TSTP Solution File: SWV486+1 by ET---2.0
View Problem
- Process Solution
%------------------------------------------------------------------------------
% File : ET---2.0
% Problem : SWV486+1 : TPTP v8.1.0. Released v4.0.0.
% Transfm : none
% Format : tptp:raw
% Command : run_ET %s %d
% Computer : n025.cluster.edu
% Model : x86_64 x86_64
% CPU : Intel(R) Xeon(R) CPU E5-2620 v4 2.10GHz
% Memory : 8042.1875MB
% OS : Linux 3.10.0-693.el7.x86_64
% CPULimit : 300s
% WCLimit : 600s
% DateTime : Wed Jul 20 18:16:58 EDT 2022
% Result : Theorem 0.23s 1.42s
% Output : CNFRefutation 0.23s
% Verified :
% SZS Type : Refutation
% Derivation depth : 12
% Number of leaves : 9
% Syntax : Number of formulae : 57 ( 11 unt; 0 def)
% Number of atoms : 190 ( 44 equ)
% Maximal formula atoms : 14 ( 3 avg)
% Number of connectives : 204 ( 71 ~; 74 |; 36 &)
% ( 4 <=>; 19 =>; 0 <=; 0 <~>)
% Maximal formula depth : 14 ( 4 avg)
% Maximal term depth : 4 ( 1 avg)
% Number of predicates : 5 ( 3 usr; 1 prp; 0-2 aty)
% Number of functors : 10 ( 10 usr; 6 con; 0-2 aty)
% Number of variables : 103 ( 5 sgn 62 !; 1 ?)
% Comments :
%------------------------------------------------------------------------------
fof(plus_and_inverse,axiom,
! [X1,X2] :
( int_less(X1,X2)
<=> ? [X3] :
( plus(X1,X3) = X2
& int_less(int_zero,X3) ) ),
file('/export/starexec/sandbox2/solver/bin/../tmp/theBenchmark.p.mepo_128.in',plus_and_inverse) ).
fof(int_leq,axiom,
! [X1,X2] :
( int_leq(X1,X2)
<=> ( int_less(X1,X2)
| X1 = X2 ) ),
file('/export/starexec/sandbox2/solver/bin/../tmp/theBenchmark.p.mepo_128.in',int_leq) ).
fof(lt,conjecture,
! [X1,X2] :
( ( int_leq(int_one,X1)
& int_less(X1,X2)
& int_leq(X2,n) )
=> a(X1,X2) = real_zero ),
file('/export/starexec/sandbox2/solver/bin/../tmp/theBenchmark.p.mepo_128.in',lt) ).
fof(qih,hypothesis,
! [X1,X2] :
( ( int_leq(int_one,X1)
& int_leq(X1,n)
& int_leq(int_one,X2)
& int_leq(X2,n) )
=> ( ! [X8] :
( ( int_less(int_zero,X8)
& X1 = plus(X2,X8) )
=> ! [X3] :
( ( int_leq(int_one,X3)
& int_leq(X3,X2) )
=> a(plus(X3,X8),X3) = qr(plus(X3,X8),X3) ) )
& ! [X8] :
( ( int_less(int_zero,X8)
& X2 = plus(X1,X8) )
=> ! [X3] :
( ( int_leq(int_one,X3)
& int_leq(X3,X1) )
=> a(X3,plus(X3,X8)) = real_zero ) ) ) ),
file('/export/starexec/sandbox2/solver/bin/../tmp/theBenchmark.p.mepo_128.in',qih) ).
fof(int_less_total,axiom,
! [X1,X2] :
( int_less(X1,X2)
| int_leq(X2,X1) ),
file('/export/starexec/sandbox2/solver/bin/../tmp/theBenchmark.p.mepo_128.in',int_less_total) ).
fof(int_less_irreflexive,axiom,
! [X1,X2] :
( int_less(X1,X2)
=> X1 != X2 ),
file('/export/starexec/sandbox2/solver/bin/../tmp/theBenchmark.p.mepo_128.in',int_less_irreflexive) ).
fof(int_less_transitive,axiom,
! [X1,X2,X3] :
( ( int_less(X1,X2)
& int_less(X2,X3) )
=> int_less(X1,X3) ),
file('/export/starexec/sandbox2/solver/bin/../tmp/theBenchmark.p.mepo_128.in',int_less_transitive) ).
fof(one_successor_of_zero,axiom,
! [X1] :
( int_less(int_zero,X1)
<=> int_leq(int_one,X1) ),
file('/export/starexec/sandbox2/solver/bin/../tmp/theBenchmark.p.mepo_128.in',one_successor_of_zero) ).
fof(c_0_8,plain,
! [X2,X1] :
( epred1_2(X1,X2)
<=> ( ! [X8] :
( ( int_less(int_zero,X8)
& X1 = plus(X2,X8) )
=> ! [X3] :
( ( int_leq(int_one,X3)
& int_leq(X3,X2) )
=> a(plus(X3,X8),X3) = qr(plus(X3,X8),X3) ) )
& ! [X8] :
( ( int_less(int_zero,X8)
& X2 = plus(X1,X8) )
=> ! [X3] :
( ( int_leq(int_one,X3)
& int_leq(X3,X1) )
=> a(X3,plus(X3,X8)) = real_zero ) ) ) ),
introduced(definition) ).
fof(c_0_9,plain,
! [X2,X1] :
( epred1_2(X1,X2)
=> ( ! [X8] :
( ( int_less(int_zero,X8)
& X1 = plus(X2,X8) )
=> ! [X3] :
( ( int_leq(int_one,X3)
& int_leq(X3,X2) )
=> a(plus(X3,X8),X3) = qr(plus(X3,X8),X3) ) )
& ! [X8] :
( ( int_less(int_zero,X8)
& X2 = plus(X1,X8) )
=> ! [X3] :
( ( int_leq(int_one,X3)
& int_leq(X3,X1) )
=> a(X3,plus(X3,X8)) = real_zero ) ) ) ),
inference(split_equiv,[status(thm)],[c_0_8]) ).
fof(c_0_10,plain,
! [X9,X10,X11,X12,X13,X14] :
( ( ~ int_less(int_zero,X11)
| X10 != plus(X9,X11)
| ~ int_leq(int_one,X12)
| ~ int_leq(X12,X9)
| a(plus(X12,X11),X12) = qr(plus(X12,X11),X12)
| ~ epred1_2(X10,X9) )
& ( ~ int_less(int_zero,X13)
| X9 != plus(X10,X13)
| ~ int_leq(int_one,X14)
| ~ int_leq(X14,X10)
| a(X14,plus(X14,X13)) = real_zero
| ~ epred1_2(X10,X9) ) ),
inference(distribute,[status(thm)],[inference(shift_quantors,[status(thm)],[inference(shift_quantors,[status(thm)],[inference(shift_quantors,[status(thm)],[inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[c_0_9])])])])])]) ).
fof(c_0_11,plain,
! [X4,X5,X4,X5,X7] :
( ( plus(X4,esk3_2(X4,X5)) = X5
| ~ int_less(X4,X5) )
& ( int_less(int_zero,esk3_2(X4,X5))
| ~ int_less(X4,X5) )
& ( plus(X4,X7) != X5
| ~ int_less(int_zero,X7)
| int_less(X4,X5) ) ),
inference(distribute,[status(thm)],[inference(shift_quantors,[status(thm)],[inference(skolemize,[status(esa)],[inference(shift_quantors,[status(thm)],[inference(shift_quantors,[status(thm)],[inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[plus_and_inverse])])])])])])]) ).
fof(c_0_12,plain,
! [X3,X4,X3,X4] :
( ( ~ int_leq(X3,X4)
| int_less(X3,X4)
| X3 = X4 )
& ( ~ int_less(X3,X4)
| int_leq(X3,X4) )
& ( X3 != X4
| int_leq(X3,X4) ) ),
inference(distribute,[status(thm)],[inference(shift_quantors,[status(thm)],[inference(shift_quantors,[status(thm)],[inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[int_leq])])])])]) ).
fof(c_0_13,negated_conjecture,
~ ! [X1,X2] :
( ( int_leq(int_one,X1)
& int_less(X1,X2)
& int_leq(X2,n) )
=> a(X1,X2) = real_zero ),
inference(assume_negation,[status(cth)],[lt]) ).
cnf(c_0_14,plain,
( a(X3,plus(X3,X4)) = real_zero
| ~ epred1_2(X1,X2)
| ~ int_leq(X3,X1)
| ~ int_leq(int_one,X3)
| X2 != plus(X1,X4)
| ~ int_less(int_zero,X4) ),
inference(split_conjunct,[status(thm)],[c_0_10]) ).
cnf(c_0_15,plain,
( plus(X1,esk3_2(X1,X2)) = X2
| ~ int_less(X1,X2) ),
inference(split_conjunct,[status(thm)],[c_0_11]) ).
cnf(c_0_16,plain,
( int_less(int_zero,esk3_2(X1,X2))
| ~ int_less(X1,X2) ),
inference(split_conjunct,[status(thm)],[c_0_11]) ).
cnf(c_0_17,plain,
( int_leq(X1,X2)
| X1 != X2 ),
inference(split_conjunct,[status(thm)],[c_0_12]) ).
fof(c_0_18,negated_conjecture,
( int_leq(int_one,esk1_0)
& int_less(esk1_0,esk2_0)
& int_leq(esk2_0,n)
& a(esk1_0,esk2_0) != real_zero ),
inference(skolemize,[status(esa)],[inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[c_0_13])])]) ).
cnf(c_0_19,plain,
( a(X1,plus(X1,esk3_2(X2,X3))) = real_zero
| ~ epred1_2(X2,X3)
| ~ int_less(X2,X3)
| ~ int_leq(int_one,X1)
| ~ int_leq(X1,X2) ),
inference(csr,[status(thm)],[inference(er,[status(thm)],[inference(spm,[status(thm)],[c_0_14,c_0_15])]),c_0_16]) ).
cnf(c_0_20,plain,
int_leq(X1,X1),
inference(er,[status(thm)],[c_0_17]) ).
fof(c_0_21,hypothesis,
! [X1,X2] :
( ( int_leq(int_one,X1)
& int_leq(X1,n)
& int_leq(int_one,X2)
& int_leq(X2,n) )
=> epred1_2(X1,X2) ),
inference(apply_def,[status(thm)],[qih,c_0_8]) ).
fof(c_0_22,plain,
! [X3,X4] :
( int_less(X3,X4)
| int_leq(X4,X3) ),
inference(variable_rename,[status(thm)],[int_less_total]) ).
cnf(c_0_23,negated_conjecture,
a(esk1_0,esk2_0) != real_zero,
inference(split_conjunct,[status(thm)],[c_0_18]) ).
cnf(c_0_24,plain,
( a(X1,X2) = real_zero
| ~ epred1_2(X1,X2)
| ~ int_less(X1,X2)
| ~ int_leq(int_one,X1) ),
inference(cn,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_19,c_0_15]),c_0_20])]) ).
cnf(c_0_25,negated_conjecture,
int_less(esk1_0,esk2_0),
inference(split_conjunct,[status(thm)],[c_0_18]) ).
cnf(c_0_26,negated_conjecture,
int_leq(int_one,esk1_0),
inference(split_conjunct,[status(thm)],[c_0_18]) ).
fof(c_0_27,hypothesis,
! [X3,X4] :
( ~ int_leq(int_one,X3)
| ~ int_leq(X3,n)
| ~ int_leq(int_one,X4)
| ~ int_leq(X4,n)
| epred1_2(X3,X4) ),
inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[c_0_21])]) ).
fof(c_0_28,plain,
! [X3,X4] :
( ~ int_less(X3,X4)
| X3 != X4 ),
inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[int_less_irreflexive])]) ).
fof(c_0_29,plain,
! [X4,X5,X6] :
( ~ int_less(X4,X5)
| ~ int_less(X5,X6)
| int_less(X4,X6) ),
inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[int_less_transitive])]) ).
cnf(c_0_30,plain,
( X1 = X2
| int_less(X1,X2)
| ~ int_leq(X1,X2) ),
inference(split_conjunct,[status(thm)],[c_0_12]) ).
cnf(c_0_31,negated_conjecture,
int_leq(esk2_0,n),
inference(split_conjunct,[status(thm)],[c_0_18]) ).
cnf(c_0_32,plain,
( int_leq(X1,X2)
| int_less(X2,X1) ),
inference(split_conjunct,[status(thm)],[c_0_22]) ).
cnf(c_0_33,negated_conjecture,
~ epred1_2(esk1_0,esk2_0),
inference(cn,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_23,c_0_24]),c_0_25]),c_0_26])]) ).
cnf(c_0_34,hypothesis,
( epred1_2(X1,X2)
| ~ int_leq(X2,n)
| ~ int_leq(int_one,X2)
| ~ int_leq(X1,n)
| ~ int_leq(int_one,X1) ),
inference(split_conjunct,[status(thm)],[c_0_27]) ).
fof(c_0_35,plain,
! [X2,X2] :
( ( ~ int_less(int_zero,X2)
| int_leq(int_one,X2) )
& ( ~ int_leq(int_one,X2)
| int_less(int_zero,X2) ) ),
inference(shift_quantors,[status(thm)],[inference(shift_quantors,[status(thm)],[inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[one_successor_of_zero])])])]) ).
cnf(c_0_36,plain,
( X1 != X2
| ~ int_less(X1,X2) ),
inference(split_conjunct,[status(thm)],[c_0_28]) ).
cnf(c_0_37,plain,
( int_less(X1,X2)
| ~ int_less(X3,X2)
| ~ int_less(X1,X3) ),
inference(split_conjunct,[status(thm)],[c_0_29]) ).
cnf(c_0_38,negated_conjecture,
( n = esk2_0
| int_less(esk2_0,n) ),
inference(spm,[status(thm)],[c_0_30,c_0_31]) ).
cnf(c_0_39,plain,
( X1 = X2
| int_less(X2,X1)
| int_less(X1,X2) ),
inference(spm,[status(thm)],[c_0_30,c_0_32]) ).
cnf(c_0_40,hypothesis,
( ~ int_leq(esk1_0,n)
| ~ int_leq(int_one,esk2_0) ),
inference(cn,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_33,c_0_34]),c_0_31]),c_0_26])]) ).
cnf(c_0_41,plain,
( int_leq(int_one,X1)
| ~ int_less(int_zero,X1) ),
inference(split_conjunct,[status(thm)],[c_0_35]) ).
cnf(c_0_42,plain,
~ int_less(X1,X1),
inference(er,[status(thm)],[c_0_36]) ).
cnf(c_0_43,negated_conjecture,
( n = esk2_0
| int_less(X1,n)
| ~ int_less(X1,esk2_0) ),
inference(spm,[status(thm)],[c_0_37,c_0_38]) ).
cnf(c_0_44,plain,
( X1 = X2
| int_less(X2,X1)
| int_less(X3,X2)
| ~ int_less(X3,X1) ),
inference(spm,[status(thm)],[c_0_37,c_0_39]) ).
cnf(c_0_45,hypothesis,
( ~ int_less(int_zero,esk2_0)
| ~ int_leq(esk1_0,n) ),
inference(spm,[status(thm)],[c_0_40,c_0_41]) ).
cnf(c_0_46,plain,
( int_leq(X1,X2)
| ~ int_less(X1,X2) ),
inference(split_conjunct,[status(thm)],[c_0_12]) ).
cnf(c_0_47,plain,
( int_less(int_zero,X1)
| ~ int_leq(int_one,X1) ),
inference(split_conjunct,[status(thm)],[c_0_35]) ).
cnf(c_0_48,negated_conjecture,
( n = esk2_0
| ~ int_less(n,esk2_0) ),
inference(spm,[status(thm)],[c_0_42,c_0_43]) ).
cnf(c_0_49,negated_conjecture,
( esk2_0 = X1
| int_less(esk1_0,X1)
| int_less(X1,esk2_0) ),
inference(spm,[status(thm)],[c_0_44,c_0_25]) ).
cnf(c_0_50,hypothesis,
( ~ int_less(int_zero,esk2_0)
| ~ int_less(esk1_0,n) ),
inference(spm,[status(thm)],[c_0_45,c_0_46]) ).
cnf(c_0_51,negated_conjecture,
( int_less(X1,esk2_0)
| ~ int_less(X1,esk1_0) ),
inference(spm,[status(thm)],[c_0_37,c_0_25]) ).
cnf(c_0_52,negated_conjecture,
int_less(int_zero,esk1_0),
inference(spm,[status(thm)],[c_0_47,c_0_26]) ).
cnf(c_0_53,negated_conjecture,
( n = esk2_0
| int_less(esk1_0,n) ),
inference(spm,[status(thm)],[c_0_48,c_0_49]) ).
cnf(c_0_54,negated_conjecture,
~ int_less(esk1_0,n),
inference(cn,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_50,c_0_51]),c_0_52])]) ).
cnf(c_0_55,negated_conjecture,
n = esk2_0,
inference(sr,[status(thm)],[c_0_53,c_0_54]) ).
cnf(c_0_56,negated_conjecture,
$false,
inference(cn,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[c_0_54,c_0_55]),c_0_25])]),
[proof] ).
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.07/0.12 % Problem : SWV486+1 : TPTP v8.1.0. Released v4.0.0.
% 0.07/0.13 % Command : run_ET %s %d
% 0.12/0.34 % Computer : n025.cluster.edu
% 0.12/0.34 % Model : x86_64 x86_64
% 0.12/0.34 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.12/0.34 % Memory : 8042.1875MB
% 0.12/0.34 % OS : Linux 3.10.0-693.el7.x86_64
% 0.12/0.34 % CPULimit : 300
% 0.12/0.34 % WCLimit : 600
% 0.12/0.34 % DateTime : Tue Jun 14 20:16:40 EDT 2022
% 0.12/0.34 % CPUTime :
% 0.23/1.42 # Running protocol protocol_eprover_4a02c828a8cc55752123edbcc1ad40e453c11447 for 23 seconds:
% 0.23/1.42 # SinE strategy is GSinE(CountFormulas,hypos,1.4,,04,100,1.0)
% 0.23/1.42 # Preprocessing time : 0.016 s
% 0.23/1.42
% 0.23/1.42 # Proof found!
% 0.23/1.42 # SZS status Theorem
% 0.23/1.42 # SZS output start CNFRefutation
% See solution above
% 0.23/1.42 # Proof object total steps : 57
% 0.23/1.42 # Proof object clause steps : 36
% 0.23/1.42 # Proof object formula steps : 21
% 0.23/1.42 # Proof object conjectures : 18
% 0.23/1.42 # Proof object clause conjectures : 15
% 0.23/1.42 # Proof object formula conjectures : 3
% 0.23/1.42 # Proof object initial clauses used : 16
% 0.23/1.42 # Proof object initial formulas used : 8
% 0.23/1.42 # Proof object generating inferences : 16
% 0.23/1.42 # Proof object simplifying inferences : 18
% 0.23/1.42 # Training examples: 0 positive, 0 negative
% 0.23/1.42 # Parsed axioms : 13
% 0.23/1.42 # Removed by relevancy pruning/SinE : 1
% 0.23/1.42 # Initial clauses : 22
% 0.23/1.42 # Removed in clause preprocessing : 0
% 0.23/1.42 # Initial clauses in saturation : 22
% 0.23/1.42 # Processed clauses : 347
% 0.23/1.42 # ...of these trivial : 1
% 0.23/1.42 # ...subsumed : 193
% 0.23/1.42 # ...remaining for further processing : 153
% 0.23/1.42 # Other redundant clauses eliminated : 34
% 0.23/1.42 # Clauses deleted for lack of memory : 0
% 0.23/1.42 # Backward-subsumed : 10
% 0.23/1.42 # Backward-rewritten : 35
% 0.23/1.42 # Generated clauses : 1606
% 0.23/1.42 # ...of the previous two non-trivial : 1371
% 0.23/1.42 # Contextual simplify-reflections : 160
% 0.23/1.42 # Paramodulations : 1539
% 0.23/1.42 # Factorizations : 26
% 0.23/1.42 # Equation resolutions : 40
% 0.23/1.42 # Current number of processed clauses : 105
% 0.23/1.42 # Positive orientable unit clauses : 8
% 0.23/1.42 # Positive unorientable unit clauses: 1
% 0.23/1.42 # Negative unit clauses : 5
% 0.23/1.42 # Non-unit-clauses : 91
% 0.23/1.42 # Current number of unprocessed clauses: 653
% 0.23/1.42 # ...number of literals in the above : 3822
% 0.23/1.42 # Current number of archived formulas : 0
% 0.23/1.42 # Current number of archived clauses : 46
% 0.23/1.42 # Clause-clause subsumption calls (NU) : 3351
% 0.23/1.42 # Rec. Clause-clause subsumption calls : 1963
% 0.23/1.42 # Non-unit clause-clause subsumptions : 350
% 0.23/1.42 # Unit Clause-clause subsumption calls : 151
% 0.23/1.42 # Rewrite failures with RHS unbound : 0
% 0.23/1.42 # BW rewrite match attempts : 14
% 0.23/1.42 # BW rewrite match successes : 3
% 0.23/1.42 # Condensation attempts : 0
% 0.23/1.42 # Condensation successes : 0
% 0.23/1.42 # Termbank termtop insertions : 19808
% 0.23/1.42
% 0.23/1.42 # -------------------------------------------------
% 0.23/1.42 # User time : 0.060 s
% 0.23/1.42 # System time : 0.002 s
% 0.23/1.42 # Total time : 0.062 s
% 0.23/1.42 # Maximum resident set size: 3840 pages
% 0.23/23.44 eprover: CPU time limit exceeded, terminating
% 0.23/23.45 eprover: Cannot stat file /export/starexec/sandbox2/solver/bin/../tmp/theBenchmark.p
% 0.23/23.45 eprover: No such file or directory
% 0.23/23.46 eprover: Cannot stat file /export/starexec/sandbox2/solver/bin/../tmp/theBenchmark.p
% 0.23/23.46 eprover: No such file or directory
% 0.23/23.46 eprover: Cannot stat file /export/starexec/sandbox2/solver/bin/../tmp/theBenchmark.p
% 0.23/23.46 eprover: No such file or directory
% 0.23/23.47 eprover: Cannot stat file /export/starexec/sandbox2/solver/bin/../tmp/theBenchmark.p
% 0.23/23.47 eprover: No such file or directory
% 0.23/23.47 eprover: Cannot stat file /export/starexec/sandbox2/solver/bin/../tmp/theBenchmark.p
% 0.23/23.47 eprover: No such file or directory
% 0.23/23.48 eprover: Cannot stat file /export/starexec/sandbox2/solver/bin/../tmp/theBenchmark.p
% 0.23/23.48 eprover: No such file or directory
% 0.23/23.49 eprover: Cannot stat file /export/starexec/sandbox2/solver/bin/../tmp/theBenchmark.p
% 0.23/23.49 eprover: No such file or directory
% 0.23/23.49 eprover: Cannot stat file /export/starexec/sandbox2/solver/bin/../tmp/theBenchmark.p
% 0.23/23.49 eprover: No such file or directory
% 0.23/23.50 eprover: Cannot stat file /export/starexec/sandbox2/solver/bin/../tmp/theBenchmark.p
% 0.23/23.50 eprover: No such file or directory
% 0.23/23.50 eprover: Cannot stat file /export/starexec/sandbox2/solver/bin/../tmp/theBenchmark.p
% 0.23/23.50 eprover: No such file or directory
% 0.23/23.51 eprover: Cannot stat file /export/starexec/sandbox2/solver/bin/../tmp/theBenchmark.p
% 0.23/23.51 eprover: No such file or directory
%------------------------------------------------------------------------------