%------------------------------------------------------------------------------
% File : Drodi---4.1.1
% Problem : SWC028+1 : TPTP v9.3.1. Released v2.4.0.
% Transfm : none
% Format : tptp:raw
% Command : drodi -timeout(300) /export/starexec/sandbox/benchmark/theBenchmark.p
% Computer : n014.cluster.edu
% Model : x86_64 x86_64
% CPU : Intel(R) Xeon(R) CPU E5-2620 v4 2.10GHz
% Memory : 8046.5625MB
% OS : Linux 6.8.0-71-generic
% CPULimit : 300s
% WCLimit : 300s
% DateTime : Thu Sep 24 02:39:39 PM UTC 2026
% Result : Theorem 0.14s 0.57s
% Output : CNFRefutation 0.14s
% Verified :
% SZS Type : Refutation
% Derivation depth : 14
% Number of leaves : 21
% Syntax : Number of formulae : 110 ( 11 unt; 15 def)
% Number of atoms : 334 ( 96 equ)
% Maximal formula atoms : 14 ( 3 avg)
% Number of connectives : 370 ( 146 ~; 144 |; 49 &)
% ( 17 <=>; 14 =>; 0 <=; 0 <~>)
% Maximal formula depth : 16 ( 4 avg)
% Maximal term depth : 1 ( 1 avg)
% Number of predicates : 21 ( 19 usr; 14 prp; 0-2 aty)
% Number of functors : 7 ( 7 usr; 7 con; 0-0 aty)
% Number of variables : 72 ( 62 !; 10 ?)
% Comments :
%------------------------------------------------------------------------------
fof(f2,axiom,
? [U] :
( ? [V] :
( U != V
& ssItem(V) )
& ssItem(U) ),
file('/export/starexec/sandbox/benchmark/theBenchmark.p') ).
fof(f15,axiom,
! [U] :
( ssList(U)
=> ! [V] :
( ssList(V)
=> ( neq(U,V)
<=> U != V ) ) ),
file('/export/starexec/sandbox/benchmark/theBenchmark.p') ).
fof(f17,axiom,
ssList(nil),
file('/export/starexec/sandbox/benchmark/theBenchmark.p') ).
fof(f48,axiom,
! [U] :
( ssList(U)
=> ! [V] :
( ssList(V)
=> ( ( rearsegP(V,U)
& rearsegP(U,V) )
=> U = V ) ) ),
file('/export/starexec/sandbox/benchmark/theBenchmark.p') ).
fof(f51,axiom,
! [U] :
( ssList(U)
=> rearsegP(U,nil) ),
file('/export/starexec/sandbox/benchmark/theBenchmark.p') ).
fof(f96,conjecture,
! [U] :
( ssList(U)
=> ! [V] :
( ssList(V)
=> ! [W] :
( ssList(W)
=> ! [X] :
( ssList(X)
=> ( ( ( ~ rearsegP(X,W)
| ~ neq(W,nil) )
& ( nil != W
| nil != X ) )
| ( ( nil = V
| nil != U )
& ( nil = U
| nil != V ) )
| U != W
| V != X ) ) ) ) ),
file('/export/starexec/sandbox/benchmark/theBenchmark.p') ).
fof(f97,negated_conjecture,
~ ! [U] :
( ssList(U)
=> ! [V] :
( ssList(V)
=> ! [W] :
( ssList(W)
=> ! [X] :
( ssList(X)
=> ( ( ( ~ rearsegP(X,W)
| ~ neq(W,nil) )
& ( nil != W
| nil != X ) )
| ( ( nil = V
| nil != U )
& ( nil = U
| nil != V ) )
| U != W
| V != X ) ) ) ) ),
inference(negated_conjecture,[status(cth)],[f96]) ).
fof(f102,plain,
( sK0_skl != sK1_skl
& ssItem(sK1_skl)
& ssItem(sK0_skl) ),
inference(skolemize,[status(esa),new_symbols(skolem,[sK0_skl,sK1_skl]),skolemize(U,sK0_skl),skolemize(V,sK1_skl)],[f2]) ).
fof(f105,plain,
sK0_skl != sK1_skl,
inference(cnf_transformation,[status(thm)],[f102]) ).
fof(f217,plain,
! [U] :
( ! [V] :
( ( neq(U,V)
<=> U != V )
| ~ ssList(V) )
| ~ ssList(U) ),
inference(pre_NNF_transformation,[status(thm)],[f15]) ).
fof(f218,plain,
! [U] :
( ! [V] :
( ( ( U = V
| neq(U,V) )
& ( U != V
| ~ neq(U,V) ) )
| ~ ssList(V) )
| ~ ssList(U) ),
inference(NNF_transformation,[status(thm)],[f217]) ).
fof(f219,plain,
! [X0,X1] :
( X0 != X1
| ~ neq(X0,X1)
| ~ ssList(X1)
| ~ ssList(X0) ),
inference(cnf_transformation,[status(thm)],[f218]) ).
fof(f223,plain,
ssList(nil),
inference(cnf_transformation,[status(thm)],[f17]) ).
fof(f302,plain,
! [U] :
( ! [V] :
( U = V
| ~ rearsegP(V,U)
| ~ rearsegP(U,V)
| ~ ssList(V) )
| ~ ssList(U) ),
inference(pre_NNF_transformation,[status(thm)],[f48]) ).
fof(f303,plain,
! [X0,X1] :
( X0 = X1
| ~ rearsegP(X1,X0)
| ~ rearsegP(X0,X1)
| ~ ssList(X1)
| ~ ssList(X0) ),
inference(cnf_transformation,[status(thm)],[f302]) ).
fof(f308,plain,
! [U] :
( rearsegP(U,nil)
| ~ ssList(U) ),
inference(pre_NNF_transformation,[status(thm)],[f51]) ).
fof(f309,plain,
! [X0] :
( rearsegP(X0,nil)
| ~ ssList(X0) ),
inference(cnf_transformation,[status(thm)],[f308]) ).
fof(f415,plain,
? [U] :
( ? [V] :
( ? [W] :
( ? [X] :
( ( ( rearsegP(X,W)
& neq(W,nil) )
| ( nil = W
& nil = X ) )
& ( ( nil != V
& nil = U )
| ( nil != U
& nil = V ) )
& U = W
& V = X
& ssList(X) )
& ssList(W) )
& ssList(V) )
& ssList(U) ),
inference(pre_NNF_transformation,[status(thm)],[f97]) ).
fof(f416,definition,
! [U,V] :
( sP0_prd(V,U)
<=> ( nil != U
& nil = V ) ),
introduced(definition,[new_symbols(definition,[sP0_prd])],[]) ).
fof(f417,definition,
! [W,X] :
( sP1_prd(X,W)
<=> ( nil = W
& nil = X ) ),
introduced(definition,[new_symbols(definition,[sP1_prd])],[]) ).
fof(f418,plain,
? [U] :
( ? [V] :
( ? [W] :
( ? [X] :
( ( ( rearsegP(X,W)
& neq(W,nil) )
| sP1_prd(X,W) )
& ( ( nil != V
& nil = U )
| sP0_prd(V,U) )
& U = W
& V = X
& ssList(X) )
& ssList(W) )
& ssList(V) )
& ssList(U) ),
inference(formula_renaming,[status(thm)],[f415,f417,f416]) ).
fof(f419,plain,
( ( ( rearsegP(sK50_skl,sK49_skl)
& neq(sK49_skl,nil) )
| sP1_prd(sK50_skl,sK49_skl) )
& ( ( nil != sK48_skl
& nil = sK47_skl )
| sP0_prd(sK48_skl,sK47_skl) )
& sK47_skl = sK49_skl
& sK48_skl = sK50_skl
& ssList(sK50_skl)
& ssList(sK49_skl)
& ssList(sK48_skl)
& ssList(sK47_skl) ),
inference(skolemize,[status(esa),new_symbols(skolem,[sK47_skl,sK48_skl,sK49_skl,sK50_skl]),skolemize(U,sK47_skl),skolemize(V,sK48_skl),skolemize(W,sK49_skl),skolemize(X,sK50_skl)],[f418]) ).
fof(f422,plain,
ssList(sK49_skl),
inference(cnf_transformation,[status(thm)],[f419]) ).
fof(f424,plain,
sK48_skl = sK50_skl,
inference(cnf_transformation,[status(thm)],[f419]) ).
fof(f425,plain,
sK47_skl = sK49_skl,
inference(cnf_transformation,[status(thm)],[f419]) ).
fof(f426,plain,
( nil = sK47_skl
| sP0_prd(sK48_skl,sK47_skl) ),
inference(cnf_transformation,[status(thm)],[f419]) ).
fof(f427,plain,
( nil != sK48_skl
| sP0_prd(sK48_skl,sK47_skl) ),
inference(cnf_transformation,[status(thm)],[f419]) ).
fof(f428,plain,
( neq(sK49_skl,nil)
| sP1_prd(sK50_skl,sK49_skl) ),
inference(cnf_transformation,[status(thm)],[f419]) ).
fof(f429,plain,
( rearsegP(sK50_skl,sK49_skl)
| sP1_prd(sK50_skl,sK49_skl) ),
inference(cnf_transformation,[status(thm)],[f419]) ).
fof(f430,plain,
! [U,V] :
( ( nil = U
| nil != V
| sP0_prd(V,U) )
& ( ( nil != U
& nil = V )
| ~ sP0_prd(V,U) ) ),
inference(NNF_transformation,[status(thm)],[f416]) ).
fof(f431,plain,
( ! [U,V] :
( nil = U
| nil != V
| sP0_prd(V,U) )
& ! [U,V] :
( ( nil != U
& nil = V )
| ~ sP0_prd(V,U) ) ),
inference(miniscoping,[status(thm)],[f430]) ).
fof(f432,plain,
! [X0,X1] :
( nil = X0
| ~ sP0_prd(X0,X1) ),
inference(cnf_transformation,[status(thm)],[f431]) ).
fof(f433,plain,
! [X0,X1] :
( nil != X1
| ~ sP0_prd(X0,X1) ),
inference(cnf_transformation,[status(thm)],[f431]) ).
fof(f434,plain,
! [X0,X1] :
( nil = X1
| nil != X0
| sP0_prd(X0,X1) ),
inference(cnf_transformation,[status(thm)],[f431]) ).
fof(f435,plain,
! [W,X] :
( ( nil != W
| nil != X
| sP1_prd(X,W) )
& ( ( nil = W
& nil = X )
| ~ sP1_prd(X,W) ) ),
inference(NNF_transformation,[status(thm)],[f417]) ).
fof(f436,plain,
( ! [W,X] :
( nil != W
| nil != X
| sP1_prd(X,W) )
& ! [W,X] :
( ( nil = W
& nil = X )
| ~ sP1_prd(X,W) ) ),
inference(miniscoping,[status(thm)],[f435]) ).
fof(f437,plain,
! [X0,X1] :
( nil = X0
| ~ sP1_prd(X0,X1) ),
inference(cnf_transformation,[status(thm)],[f436]) ).
fof(f438,plain,
! [X0,X1] :
( nil = X1
| ~ sP1_prd(X0,X1) ),
inference(cnf_transformation,[status(thm)],[f436]) ).
fof(f440,definition,
( sQ0_spl
<=> sP0_prd(sK48_skl,sK47_skl) ),
introduced(definition,[new_symbols(definition,[sQ0_spl])],[split_symbol_definition]) ).
fof(f441,plain,
( ~ sQ0_spl
| sP0_prd(sK48_skl,sK47_skl) ),
inference(component_clause,[status(thm)],[f440]) ).
fof(f443,definition,
( sQ1_spl
<=> nil = sK47_skl ),
introduced(definition,[new_symbols(definition,[sQ1_spl])],[split_symbol_definition]) ).
fof(f444,plain,
( ~ sQ1_spl
| nil = sK47_skl ),
inference(component_clause,[status(thm)],[f443]) ).
fof(f445,plain,
( sQ1_spl
| nil != sK47_skl ),
inference(component_clause,[status(thm)],[f443]) ).
fof(f446,plain,
( sQ1_spl
| sQ0_spl ),
inference(split_clause,[status(thm)],[f426,f440,f443]) ).
fof(f447,definition,
( sQ2_spl
<=> nil = sK48_skl ),
introduced(definition,[new_symbols(definition,[sQ2_spl])],[split_symbol_definition]) ).
fof(f449,plain,
( sQ2_spl
| nil != sK48_skl ),
inference(component_clause,[status(thm)],[f447]) ).
fof(f450,plain,
( ~ sQ2_spl
| sQ0_spl ),
inference(split_clause,[status(thm)],[f427,f440,f447]) ).
fof(f451,definition,
( sQ3_spl
<=> sP1_prd(sK50_skl,sK49_skl) ),
introduced(definition,[new_symbols(definition,[sQ3_spl])],[split_symbol_definition]) ).
fof(f452,plain,
( ~ sQ3_spl
| sP1_prd(sK50_skl,sK49_skl) ),
inference(component_clause,[status(thm)],[f451]) ).
fof(f454,definition,
( sQ4_spl
<=> neq(sK49_skl,nil) ),
introduced(definition,[new_symbols(definition,[sQ4_spl])],[split_symbol_definition]) ).
fof(f455,plain,
( ~ sQ4_spl
| neq(sK49_skl,nil) ),
inference(component_clause,[status(thm)],[f454]) ).
fof(f457,plain,
( sQ4_spl
| sQ3_spl ),
inference(split_clause,[status(thm)],[f428,f451,f454]) ).
fof(f458,definition,
( sQ5_spl
<=> rearsegP(sK50_skl,sK49_skl) ),
introduced(definition,[new_symbols(definition,[sQ5_spl])],[split_symbol_definition]) ).
fof(f459,plain,
( ~ sQ5_spl
| rearsegP(sK50_skl,sK49_skl) ),
inference(component_clause,[status(thm)],[f458]) ).
fof(f461,plain,
( sQ5_spl
| sQ3_spl ),
inference(split_clause,[status(thm)],[f429,f451,f458]) ).
fof(f477,plain,
! [X1] :
( ~ neq(X1,X1)
| ~ ssList(X1)
| ~ ssList(X1) ),
inference(destructive_equality_resolution,[status(thm)],[f219]) ).
fof(f478,plain,
! [X0] :
( ~ neq(X0,X0)
| ~ ssList(X0) ),
inference(duplicate_literals_removal,[status(thm)],[f477]) ).
fof(f492,plain,
! [X0] : ~ sP0_prd(X0,nil),
inference(destructive_equality_resolution,[status(thm)],[f433]) ).
fof(f493,plain,
! [X0] :
( nil = X0
| sP0_prd(nil,X0) ),
inference(destructive_equality_resolution,[status(thm)],[f434]) ).
fof(f497,plain,
( ~ sQ0_spl
| sP0_prd(sK50_skl,sK47_skl) ),
inference(forward_demodulation,[status(thm)],[f424,f441]) ).
fof(f498,plain,
( ~ sQ0_spl
| sP0_prd(sK50_skl,sK49_skl) ),
inference(forward_demodulation,[status(thm)],[f425,f497]) ).
fof(f503,plain,
( ~ sQ0_spl
| nil = sK50_skl ),
inference(resolution,[status(thm)],[f432,f498]) ).
fof(f504,plain,
( ~ sQ0_spl
| sP0_prd(nil,sK49_skl) ),
inference(backward_demodulation,[status(thm)],[f503,f498]) ).
fof(f505,plain,
( ~ sQ3_spl
| ~ sQ0_spl
| sP1_prd(nil,sK49_skl) ),
inference(backward_demodulation,[status(thm)],[f503,f452]) ).
fof(f510,plain,
! [X0] :
( nil = nil
| nil = X0 ),
inference(resolution,[status(thm)],[f493,f432]) ).
fof(f511,definition,
! [X0] :
( sQ6_spl
<=> nil = X0 ),
introduced(definition,[new_symbols(definition,[sQ6_spl])],[split_symbol_definition]) ).
fof(f512,plain,
! [X0] :
( ~ sQ6_spl
| nil = X0 ),
inference(component_clause,[status(thm)],[f511]) ).
fof(f514,definition,
( sQ7_spl
<=> nil = nil ),
introduced(definition,[new_symbols(definition,[sQ7_spl])],[split_symbol_definition]) ).
fof(f517,plain,
( sQ7_spl
| sQ6_spl ),
inference(split_clause,[status(thm)],[f510,f511,f514]) ).
fof(f518,plain,
! [X0,X1] :
( ~ sQ6_spl
| X0 = X1 ),
inference(paramodulation,[status(thm)],[f512,f512]) ).
fof(f532,plain,
( ~ sQ6_spl
| $false ),
inference(backward_subsumption_resolution,[status(thm)],[f105,f518]) ).
fof(f533,plain,
~ sQ6_spl,
inference(contradiction_clause,[status(thm)],[f532]) ).
fof(f553,plain,
( ~ sQ3_spl
| ~ sQ0_spl
| nil = sK49_skl ),
inference(resolution,[status(thm)],[f438,f505]) ).
fof(f557,plain,
( ~ sQ0_spl
| ~ sQ3_spl
| sP0_prd(nil,nil) ),
inference(backward_demodulation,[status(thm)],[f553,f504]) ).
fof(f559,plain,
( ~ sQ0_spl
| ~ sQ3_spl
| $false ),
inference(forward_subsumption_resolution,[status(thm)],[f557,f492]) ).
fof(f560,plain,
( ~ sQ0_spl
| ~ sQ3_spl ),
inference(contradiction_clause,[status(thm)],[f559]) ).
fof(f567,plain,
( ~ sQ1_spl
| nil = sK49_skl ),
inference(forward_demodulation,[status(thm)],[f425,f444]) ).
fof(f571,plain,
( sQ2_spl
| nil != sK50_skl ),
inference(backward_demodulation,[status(thm)],[f424,f449]) ).
fof(f577,plain,
( ~ sQ3_spl
| ~ sQ1_spl
| sP1_prd(sK50_skl,nil) ),
inference(forward_demodulation,[status(thm)],[f567,f452]) ).
fof(f579,plain,
( ~ sQ3_spl
| ~ sQ1_spl
| nil = sK50_skl ),
inference(resolution,[status(thm)],[f577,f437]) ).
fof(f580,plain,
( ~ sQ3_spl
| ~ sQ1_spl
| sQ2_spl
| $false ),
inference(forward_subsumption_resolution,[status(thm)],[f579,f571]) ).
fof(f581,plain,
( ~ sQ3_spl
| ~ sQ1_spl
| sQ2_spl ),
inference(contradiction_clause,[status(thm)],[f580]) ).
fof(f582,plain,
( ~ sQ4_spl
| ~ sQ1_spl
| neq(nil,nil) ),
inference(forward_demodulation,[status(thm)],[f567,f455]) ).
fof(f587,plain,
( ~ sQ4_spl
| ~ sQ1_spl
| ~ ssList(nil) ),
inference(resolution,[status(thm)],[f582,f478]) ).
fof(f588,plain,
( ~ sQ4_spl
| ~ sQ1_spl
| $false ),
inference(forward_subsumption_resolution,[status(thm)],[f587,f223]) ).
fof(f589,plain,
( ~ sQ4_spl
| ~ sQ1_spl ),
inference(contradiction_clause,[status(thm)],[f588]) ).
fof(f591,plain,
( sQ1_spl
| nil != sK49_skl ),
inference(forward_demodulation,[status(thm)],[f425,f445]) ).
fof(f595,plain,
( ~ sQ5_spl
| ~ sQ0_spl
| rearsegP(nil,sK49_skl) ),
inference(forward_demodulation,[status(thm)],[f503,f459]) ).
fof(f596,plain,
( ~ sQ5_spl
| ~ sQ0_spl
| sK49_skl = nil
| ~ rearsegP(sK49_skl,nil)
| ~ ssList(nil)
| ~ ssList(sK49_skl) ),
inference(resolution,[status(thm)],[f595,f303]) ).
fof(f597,definition,
( sQ12_spl
<=> ssList(sK49_skl) ),
introduced(definition,[new_symbols(definition,[sQ12_spl])],[split_symbol_definition]) ).
fof(f599,plain,
( sQ12_spl
| ~ ssList(sK49_skl) ),
inference(component_clause,[status(thm)],[f597]) ).
fof(f600,definition,
( sQ13_spl
<=> ssList(nil) ),
introduced(definition,[new_symbols(definition,[sQ13_spl])],[split_symbol_definition]) ).
fof(f602,plain,
( sQ13_spl
| ~ ssList(nil) ),
inference(component_clause,[status(thm)],[f600]) ).
fof(f603,definition,
( sQ14_spl
<=> rearsegP(sK49_skl,nil) ),
introduced(definition,[new_symbols(definition,[sQ14_spl])],[split_symbol_definition]) ).
fof(f605,plain,
( sQ14_spl
| ~ rearsegP(sK49_skl,nil) ),
inference(component_clause,[status(thm)],[f603]) ).
fof(f606,definition,
( sQ15_spl
<=> sK49_skl = nil ),
introduced(definition,[new_symbols(definition,[sQ15_spl])],[split_symbol_definition]) ).
fof(f607,plain,
( ~ sQ15_spl
| sK49_skl = nil ),
inference(component_clause,[status(thm)],[f606]) ).
fof(f609,plain,
( ~ sQ5_spl
| ~ sQ0_spl
| sQ15_spl
| ~ sQ14_spl
| ~ sQ13_spl
| ~ sQ12_spl ),
inference(split_clause,[status(thm)],[f596,f597,f600,f603,f606,f440,f458]) ).
fof(f610,plain,
( ~ sQ15_spl
| sQ1_spl
| $false ),
inference(forward_subsumption_resolution,[status(thm)],[f607,f591]) ).
fof(f611,plain,
( ~ sQ15_spl
| sQ1_spl ),
inference(contradiction_clause,[status(thm)],[f610]) ).
fof(f620,plain,
( sQ13_spl
| $false ),
inference(forward_subsumption_resolution,[status(thm)],[f602,f223]) ).
fof(f621,plain,
sQ13_spl,
inference(contradiction_clause,[status(thm)],[f620]) ).
fof(f622,plain,
( sQ12_spl
| $false ),
inference(forward_subsumption_resolution,[status(thm)],[f599,f422]) ).
fof(f623,plain,
sQ12_spl,
inference(contradiction_clause,[status(thm)],[f622]) ).
fof(f626,plain,
( sQ14_spl
| ~ ssList(sK49_skl) ),
inference(resolution,[status(thm)],[f309,f605]) ).
fof(f627,plain,
! [X0] :
( nil = X0
| ~ rearsegP(nil,X0)
| ~ ssList(X0)
| ~ ssList(nil)
| ~ ssList(X0) ),
inference(resolution,[status(thm)],[f309,f303]) ).
fof(f628,plain,
( sQ14_spl
| ~ sQ12_spl ),
inference(split_clause,[status(thm)],[f626,f597,f603]) ).
fof(f629,definition,
! [X0] :
( sQ17_spl
<=> ( nil = X0
| ~ rearsegP(nil,X0)
| ~ ssList(X0)
| ~ ssList(X0) ) ),
introduced(definition,[new_symbols(definition,[sQ17_spl])],[split_symbol_definition]) ).
fof(f632,plain,
( ~ sQ13_spl
| sQ17_spl ),
inference(split_clause,[status(thm)],[f627,f629,f600]) ).
fof(f633,plain,
$false,
inference(sat_refutation,[status(thm)],[f446,f450,f457,f461,f517,f533,f560,f581,f589,f609,f611,f621,f623,f628,f632]) ).
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.00/0.03 % Problem : SWC028+1 : TPTP v9.3.1. Released v2.4.0.
% 0.00/0.04 % Command : drodi -timeout(300) /export/starexec/sandbox/benchmark/theBenchmark.p
% 0.11/0.53 % Computer : n014.cluster.edu
% 0.11/0.53 % Model : x86_64 x86_64
% 0.11/0.53 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.11/0.53 % Memory : 8046.5625MB
% 0.11/0.53 % OS : Linux 6.8.0-71-generic
% 0.11/0.53 % CPULimit : 300
% 0.11/0.53 % WCLimit : 300
% 0.11/0.53 % DateTime : Mon Sep 21 07:49:51 UTC 2026
% 0.11/0.54 % CPUTime :
% 0.11/0.55 % Drodi V4.1.1
% 0.14/0.57 % Refutation found
% 0.14/0.57 % SZS status Theorem for theBenchmark: Theorem is valid
% 0.14/0.57 % SZS output start CNFRefutation for theBenchmark
% See solution above
% 0.14/0.60 % Elapsed time: 0.060563 seconds
% 0.14/0.60 % CPU time: 0.167140 seconds
% 0.14/0.60 % Total memory used: 107.166 MB
% 0.14/0.60 % Net memory used: 107.034 MB
%------------------------------------------------------------------------------