TSTP Solution File: SET986+1 by CSE_E---1.5
View Problem
- Process Solution
%------------------------------------------------------------------------------
% File : CSE_E---1.5
% Problem : SET986+1 : TPTP v8.1.2. Released v3.2.0.
% Transfm : none
% Format : tptp:raw
% Command : java -jar /export/starexec/sandbox2/solver/bin/mcs_scs.jar %d %s
% Computer : n031.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 : 300s
% DateTime : Thu Aug 31 14:36:32 EDT 2023
% Result : Theorem 17.47s 17.57s
% Output : CNFRefutation 17.47s
% Verified :
% SZS Type : Refutation
% Derivation depth : 18
% Number of leaves : 22
% Syntax : Number of formulae : 86 ( 12 unt; 14 typ; 0 def)
% Number of atoms : 227 ( 68 equ)
% Maximal formula atoms : 20 ( 3 avg)
% Number of connectives : 239 ( 84 ~; 117 |; 24 &)
% ( 11 <=>; 3 =>; 0 <=; 0 <~>)
% Maximal formula depth : 17 ( 4 avg)
% Maximal term depth : 4 ( 1 avg)
% Number of types : 2 ( 0 usr)
% Number of type conns : 20 ( 10 >; 10 *; 0 +; 0 <<)
% Number of predicates : 5 ( 3 usr; 1 prp; 0-2 aty)
% Number of functors : 11 ( 11 usr; 4 con; 0-3 aty)
% Number of variables : 183 ( 10 sgn; 63 !; 0 ?; 0 :)
% Comments :
%------------------------------------------------------------------------------
tff(decl_22,type,
in: ( $i * $i ) > $o ).
tff(decl_23,type,
set_union2: ( $i * $i ) > $i ).
tff(decl_24,type,
subset: ( $i * $i ) > $o ).
tff(decl_25,type,
singleton: $i > $i ).
tff(decl_26,type,
set_difference: ( $i * $i ) > $i ).
tff(decl_27,type,
empty: $i > $o ).
tff(decl_28,type,
esk1_2: ( $i * $i ) > $i ).
tff(decl_29,type,
esk2_3: ( $i * $i * $i ) > $i ).
tff(decl_30,type,
esk3_2: ( $i * $i ) > $i ).
tff(decl_31,type,
esk4_3: ( $i * $i * $i ) > $i ).
tff(decl_32,type,
esk5_0: $i ).
tff(decl_33,type,
esk6_0: $i ).
tff(decl_34,type,
esk7_0: $i ).
tff(decl_35,type,
esk8_0: $i ).
fof(d1_tarski,axiom,
! [X1,X2] :
( X2 = singleton(X1)
<=> ! [X3] :
( in(X3,X2)
<=> X3 = X1 ) ),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p',d1_tarski) ).
fof(d3_tarski,axiom,
! [X1,X2] :
( subset(X1,X2)
<=> ! [X3] :
( in(X3,X1)
=> in(X3,X2) ) ),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p',d3_tarski) ).
fof(d4_xboole_0,axiom,
! [X1,X2,X3] :
( X3 = set_difference(X1,X2)
<=> ! [X4] :
( in(X4,X3)
<=> ( in(X4,X1)
& ~ in(X4,X2) ) ) ),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p',d4_xboole_0) ).
fof(t140_zfmisc_1,conjecture,
! [X1,X2] :
( in(X1,X2)
=> set_union2(set_difference(X2,singleton(X1)),singleton(X1)) = X2 ),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p',t140_zfmisc_1) ).
fof(t64_zfmisc_1,axiom,
! [X1,X2,X3] :
( in(X1,set_difference(X2,singleton(X3)))
<=> ( in(X1,X2)
& X1 != X3 ) ),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p',t64_zfmisc_1) ).
fof(d2_xboole_0,axiom,
! [X1,X2,X3] :
( X3 = set_union2(X1,X2)
<=> ! [X4] :
( in(X4,X3)
<=> ( in(X4,X1)
| in(X4,X2) ) ) ),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p',d2_xboole_0) ).
fof(commutativity_k2_xboole_0,axiom,
! [X1,X2] : set_union2(X1,X2) = set_union2(X2,X1),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p',commutativity_k2_xboole_0) ).
fof(d10_xboole_0,axiom,
! [X1,X2] :
( X1 = X2
<=> ( subset(X1,X2)
& subset(X2,X1) ) ),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p',d10_xboole_0) ).
fof(c_0_8,plain,
! [X11,X12,X13,X14,X15,X16] :
( ( ~ in(X13,X12)
| X13 = X11
| X12 != singleton(X11) )
& ( X14 != X11
| in(X14,X12)
| X12 != singleton(X11) )
& ( ~ in(esk1_2(X15,X16),X16)
| esk1_2(X15,X16) != X15
| X16 = singleton(X15) )
& ( in(esk1_2(X15,X16),X16)
| esk1_2(X15,X16) = X15
| X16 = singleton(X15) ) ),
inference(distribute,[status(thm)],[inference(shift_quantors,[status(thm)],[inference(skolemize,[status(esa)],[inference(variable_rename,[status(thm)],[inference(shift_quantors,[status(thm)],[inference(fof_nnf,[status(thm)],[d1_tarski])])])])])]) ).
cnf(c_0_9,plain,
( X1 = X3
| ~ in(X1,X2)
| X2 != singleton(X3) ),
inference(split_conjunct,[status(thm)],[c_0_8]) ).
fof(c_0_10,plain,
! [X27,X28,X29,X30,X31] :
( ( ~ subset(X27,X28)
| ~ in(X29,X27)
| in(X29,X28) )
& ( in(esk3_2(X30,X31),X30)
| subset(X30,X31) )
& ( ~ in(esk3_2(X30,X31),X31)
| subset(X30,X31) ) ),
inference(distribute,[status(thm)],[inference(shift_quantors,[status(thm)],[inference(skolemize,[status(esa)],[inference(variable_rename,[status(thm)],[inference(shift_quantors,[status(thm)],[inference(fof_nnf,[status(thm)],[d3_tarski])])])])])]) ).
cnf(c_0_11,plain,
( X1 = X2
| ~ in(X1,singleton(X2)) ),
inference(er,[status(thm)],[c_0_9]) ).
cnf(c_0_12,plain,
( in(esk3_2(X1,X2),X1)
| subset(X1,X2) ),
inference(split_conjunct,[status(thm)],[c_0_10]) ).
fof(c_0_13,plain,
! [X1,X2,X3] :
( X3 = set_difference(X1,X2)
<=> ! [X4] :
( in(X4,X3)
<=> ( in(X4,X1)
& ~ in(X4,X2) ) ) ),
inference(fof_simplification,[status(thm)],[d4_xboole_0]) ).
cnf(c_0_14,plain,
( subset(X1,X2)
| ~ in(esk3_2(X1,X2),X2) ),
inference(split_conjunct,[status(thm)],[c_0_10]) ).
cnf(c_0_15,plain,
( esk3_2(singleton(X1),X2) = X1
| subset(singleton(X1),X2) ),
inference(spm,[status(thm)],[c_0_11,c_0_12]) ).
fof(c_0_16,plain,
! [X33,X34,X35,X36,X37,X38,X39,X40] :
( ( in(X36,X33)
| ~ in(X36,X35)
| X35 != set_difference(X33,X34) )
& ( ~ in(X36,X34)
| ~ in(X36,X35)
| X35 != set_difference(X33,X34) )
& ( ~ in(X37,X33)
| in(X37,X34)
| in(X37,X35)
| X35 != set_difference(X33,X34) )
& ( ~ in(esk4_3(X38,X39,X40),X40)
| ~ in(esk4_3(X38,X39,X40),X38)
| in(esk4_3(X38,X39,X40),X39)
| X40 = set_difference(X38,X39) )
& ( in(esk4_3(X38,X39,X40),X38)
| in(esk4_3(X38,X39,X40),X40)
| X40 = set_difference(X38,X39) )
& ( ~ in(esk4_3(X38,X39,X40),X39)
| in(esk4_3(X38,X39,X40),X40)
| X40 = set_difference(X38,X39) ) ),
inference(distribute,[status(thm)],[inference(shift_quantors,[status(thm)],[inference(skolemize,[status(esa)],[inference(variable_rename,[status(thm)],[inference(shift_quantors,[status(thm)],[inference(fof_nnf,[status(thm)],[c_0_13])])])])])]) ).
cnf(c_0_17,plain,
( in(X3,X2)
| ~ subset(X1,X2)
| ~ in(X3,X1) ),
inference(split_conjunct,[status(thm)],[c_0_10]) ).
cnf(c_0_18,plain,
( subset(singleton(X1),X2)
| ~ in(X1,X2) ),
inference(spm,[status(thm)],[c_0_14,c_0_15]) ).
cnf(c_0_19,plain,
( in(esk4_3(X1,X2,X3),X1)
| in(esk4_3(X1,X2,X3),X3)
| X3 = set_difference(X1,X2) ),
inference(split_conjunct,[status(thm)],[c_0_16]) ).
fof(c_0_20,negated_conjecture,
~ ! [X1,X2] :
( in(X1,X2)
=> set_union2(set_difference(X2,singleton(X1)),singleton(X1)) = X2 ),
inference(assume_negation,[status(cth)],[t140_zfmisc_1]) ).
cnf(c_0_21,plain,
( in(X1,X2)
| ~ in(X1,singleton(X3))
| ~ in(X3,X2) ),
inference(spm,[status(thm)],[c_0_17,c_0_18]) ).
cnf(c_0_22,plain,
( set_difference(X1,X2) = X1
| in(esk4_3(X1,X2,X1),X1) ),
inference(ef,[status(thm)],[c_0_19]) ).
fof(c_0_23,negated_conjecture,
( in(esk7_0,esk8_0)
& set_union2(set_difference(esk8_0,singleton(esk7_0)),singleton(esk7_0)) != esk8_0 ),
inference(skolemize,[status(esa)],[inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[c_0_20])])]) ).
cnf(c_0_24,plain,
( in(esk4_3(X1,X2,X3),X2)
| X3 = set_difference(X1,X2)
| ~ in(esk4_3(X1,X2,X3),X3)
| ~ in(esk4_3(X1,X2,X3),X1) ),
inference(split_conjunct,[status(thm)],[c_0_16]) ).
fof(c_0_25,plain,
! [X52,X53,X54] :
( ( in(X52,X53)
| ~ in(X52,set_difference(X53,singleton(X54))) )
& ( X52 != X54
| ~ in(X52,set_difference(X53,singleton(X54))) )
& ( ~ in(X52,X53)
| X52 = X54
| in(X52,set_difference(X53,singleton(X54))) ) ),
inference(distribute,[status(thm)],[inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[t64_zfmisc_1])])]) ).
cnf(c_0_26,plain,
( set_difference(singleton(X1),X2) = singleton(X1)
| in(esk4_3(singleton(X1),X2,singleton(X1)),X3)
| ~ in(X1,X3) ),
inference(spm,[status(thm)],[c_0_21,c_0_22]) ).
cnf(c_0_27,negated_conjecture,
in(esk7_0,esk8_0),
inference(split_conjunct,[status(thm)],[c_0_23]) ).
cnf(c_0_28,plain,
( set_difference(X1,X2) = X1
| in(esk4_3(X1,X2,X1),X2) ),
inference(csr,[status(thm)],[inference(spm,[status(thm)],[c_0_24,c_0_22]),c_0_22]) ).
fof(c_0_29,plain,
! [X18,X19,X20,X21,X22,X23,X24,X25] :
( ( ~ in(X21,X20)
| in(X21,X18)
| in(X21,X19)
| X20 != set_union2(X18,X19) )
& ( ~ in(X22,X18)
| in(X22,X20)
| X20 != set_union2(X18,X19) )
& ( ~ in(X22,X19)
| in(X22,X20)
| X20 != set_union2(X18,X19) )
& ( ~ in(esk2_3(X23,X24,X25),X23)
| ~ in(esk2_3(X23,X24,X25),X25)
| X25 = set_union2(X23,X24) )
& ( ~ in(esk2_3(X23,X24,X25),X24)
| ~ in(esk2_3(X23,X24,X25),X25)
| X25 = set_union2(X23,X24) )
& ( in(esk2_3(X23,X24,X25),X25)
| in(esk2_3(X23,X24,X25),X23)
| in(esk2_3(X23,X24,X25),X24)
| X25 = set_union2(X23,X24) ) ),
inference(distribute,[status(thm)],[inference(shift_quantors,[status(thm)],[inference(skolemize,[status(esa)],[inference(variable_rename,[status(thm)],[inference(shift_quantors,[status(thm)],[inference(fof_nnf,[status(thm)],[d2_xboole_0])])])])])]) ).
cnf(c_0_30,plain,
( X1 != X2
| ~ in(X1,set_difference(X3,singleton(X2))) ),
inference(split_conjunct,[status(thm)],[c_0_25]) ).
cnf(c_0_31,negated_conjecture,
( set_difference(singleton(esk7_0),X1) = singleton(esk7_0)
| in(esk4_3(singleton(esk7_0),X1,singleton(esk7_0)),esk8_0) ),
inference(spm,[status(thm)],[c_0_26,c_0_27]) ).
cnf(c_0_32,plain,
( esk4_3(X1,singleton(X2),X1) = X2
| set_difference(X1,singleton(X2)) = X1 ),
inference(spm,[status(thm)],[c_0_11,c_0_28]) ).
cnf(c_0_33,plain,
( in(esk2_3(X1,X2,X3),X3)
| in(esk2_3(X1,X2,X3),X1)
| in(esk2_3(X1,X2,X3),X2)
| X3 = set_union2(X1,X2) ),
inference(split_conjunct,[status(thm)],[c_0_29]) ).
cnf(c_0_34,plain,
~ in(X1,set_difference(X2,singleton(X1))),
inference(er,[status(thm)],[c_0_30]) ).
cnf(c_0_35,negated_conjecture,
( set_difference(singleton(esk7_0),singleton(X1)) = singleton(esk7_0)
| in(X1,esk8_0) ),
inference(spm,[status(thm)],[c_0_31,c_0_32]) ).
cnf(c_0_36,plain,
( X3 = set_union2(X1,X2)
| ~ in(esk2_3(X1,X2,X3),X2)
| ~ in(esk2_3(X1,X2,X3),X3) ),
inference(split_conjunct,[status(thm)],[c_0_29]) ).
cnf(c_0_37,plain,
( set_union2(X1,X2) = X2
| in(esk2_3(X1,X2,X2),X1)
| in(esk2_3(X1,X2,X2),X2) ),
inference(ef,[status(thm)],[c_0_33]) ).
cnf(c_0_38,negated_conjecture,
( in(X1,esk8_0)
| ~ in(X1,singleton(esk7_0)) ),
inference(spm,[status(thm)],[c_0_34,c_0_35]) ).
cnf(c_0_39,plain,
( set_union2(X1,X2) = X2
| in(esk2_3(X1,X2,X2),X1) ),
inference(csr,[status(thm)],[inference(spm,[status(thm)],[c_0_36,c_0_37]),c_0_37]) ).
fof(c_0_40,plain,
! [X7,X8] : set_union2(X7,X8) = set_union2(X8,X7),
inference(variable_rename,[status(thm)],[commutativity_k2_xboole_0]) ).
cnf(c_0_41,plain,
( in(X1,X3)
| in(X1,X4)
| ~ in(X1,X2)
| X2 != set_union2(X3,X4) ),
inference(split_conjunct,[status(thm)],[c_0_29]) ).
cnf(c_0_42,plain,
( in(X1,X3)
| ~ in(X1,X2)
| X3 != set_union2(X4,X2) ),
inference(split_conjunct,[status(thm)],[c_0_29]) ).
cnf(c_0_43,negated_conjecture,
( set_union2(singleton(esk7_0),X1) = X1
| in(esk2_3(singleton(esk7_0),X1,X1),esk8_0) ),
inference(spm,[status(thm)],[c_0_38,c_0_39]) ).
cnf(c_0_44,plain,
set_union2(X1,X2) = set_union2(X2,X1),
inference(split_conjunct,[status(thm)],[c_0_40]) ).
cnf(c_0_45,plain,
( in(X1,X2)
| ~ in(X1,X3)
| X3 != set_difference(X2,X4) ),
inference(split_conjunct,[status(thm)],[c_0_16]) ).
cnf(c_0_46,plain,
( in(X1,X2)
| in(X1,X3)
| ~ in(X1,set_union2(X3,X2)) ),
inference(er,[status(thm)],[c_0_41]) ).
cnf(c_0_47,plain,
( in(X1,set_union2(X2,X3))
| ~ in(X1,X3) ),
inference(er,[status(thm)],[c_0_42]) ).
cnf(c_0_48,negated_conjecture,
( set_union2(esk8_0,singleton(esk7_0)) = esk8_0
| ~ in(esk2_3(singleton(esk7_0),esk8_0,esk8_0),esk8_0) ),
inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_36,c_0_43]),c_0_44]) ).
cnf(c_0_49,plain,
( in(X1,X2)
| ~ in(X1,set_difference(X2,X3)) ),
inference(er,[status(thm)],[c_0_45]) ).
cnf(c_0_50,plain,
( subset(set_union2(X1,X2),X3)
| in(esk3_2(set_union2(X1,X2),X3),X2)
| in(esk3_2(set_union2(X1,X2),X3),X1) ),
inference(spm,[status(thm)],[c_0_46,c_0_12]) ).
cnf(c_0_51,plain,
( subset(X1,set_union2(X2,X3))
| ~ in(esk3_2(X1,set_union2(X2,X3)),X3) ),
inference(spm,[status(thm)],[c_0_14,c_0_47]) ).
cnf(c_0_52,negated_conjecture,
set_union2(esk8_0,singleton(esk7_0)) = esk8_0,
inference(cn,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_48,c_0_43]),c_0_44])]) ).
cnf(c_0_53,plain,
( subset(set_union2(set_difference(X1,X2),X3),X4)
| in(esk3_2(set_union2(set_difference(X1,X2),X3),X4),X3)
| in(esk3_2(set_union2(set_difference(X1,X2),X3),X4),X1) ),
inference(spm,[status(thm)],[c_0_49,c_0_50]) ).
cnf(c_0_54,plain,
( in(X1,X3)
| in(X1,X4)
| ~ in(X1,X2)
| X4 != set_difference(X2,X3) ),
inference(split_conjunct,[status(thm)],[c_0_16]) ).
cnf(c_0_55,negated_conjecture,
( subset(X1,esk8_0)
| ~ in(esk3_2(X1,esk8_0),singleton(esk7_0)) ),
inference(spm,[status(thm)],[c_0_51,c_0_52]) ).
cnf(c_0_56,plain,
( subset(set_union2(set_difference(X1,X2),X3),X1)
| in(esk3_2(set_union2(set_difference(X1,X2),X3),X1),X3) ),
inference(spm,[status(thm)],[c_0_14,c_0_53]) ).
cnf(c_0_57,plain,
( in(X1,X3)
| ~ in(X1,X2)
| X3 != set_union2(X2,X4) ),
inference(split_conjunct,[status(thm)],[c_0_29]) ).
cnf(c_0_58,plain,
( in(X1,set_difference(X2,X3))
| in(X1,X3)
| ~ in(X1,X2) ),
inference(er,[status(thm)],[c_0_54]) ).
fof(c_0_59,plain,
! [X9,X10] :
( ( subset(X9,X10)
| X9 != X10 )
& ( subset(X10,X9)
| X9 != X10 )
& ( ~ subset(X9,X10)
| ~ subset(X10,X9)
| X9 = X10 ) ),
inference(distribute,[status(thm)],[inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[d10_xboole_0])])]) ).
cnf(c_0_60,negated_conjecture,
subset(set_union2(set_difference(esk8_0,X1),singleton(esk7_0)),esk8_0),
inference(spm,[status(thm)],[c_0_55,c_0_56]) ).
cnf(c_0_61,plain,
( in(X1,set_union2(X2,X3))
| ~ in(X1,X2) ),
inference(er,[status(thm)],[c_0_57]) ).
cnf(c_0_62,plain,
( subset(X1,X2)
| in(esk3_2(X1,X2),set_difference(X1,X3))
| in(esk3_2(X1,X2),X3) ),
inference(spm,[status(thm)],[c_0_58,c_0_12]) ).
cnf(c_0_63,plain,
( X1 = X2
| ~ subset(X1,X2)
| ~ subset(X2,X1) ),
inference(split_conjunct,[status(thm)],[c_0_59]) ).
cnf(c_0_64,negated_conjecture,
subset(set_union2(singleton(esk7_0),set_difference(esk8_0,X1)),esk8_0),
inference(spm,[status(thm)],[c_0_60,c_0_44]) ).
cnf(c_0_65,plain,
( subset(X1,set_union2(X2,X3))
| ~ in(esk3_2(X1,set_union2(X2,X3)),X2) ),
inference(spm,[status(thm)],[c_0_14,c_0_61]) ).
cnf(c_0_66,plain,
( subset(X1,set_union2(X2,set_difference(X1,X3)))
| in(esk3_2(X1,set_union2(X2,set_difference(X1,X3))),X3) ),
inference(spm,[status(thm)],[c_0_51,c_0_62]) ).
cnf(c_0_67,negated_conjecture,
set_union2(set_difference(esk8_0,singleton(esk7_0)),singleton(esk7_0)) != esk8_0,
inference(split_conjunct,[status(thm)],[c_0_23]) ).
cnf(c_0_68,negated_conjecture,
( set_union2(singleton(esk7_0),set_difference(esk8_0,X1)) = esk8_0
| ~ subset(esk8_0,set_union2(singleton(esk7_0),set_difference(esk8_0,X1))) ),
inference(spm,[status(thm)],[c_0_63,c_0_64]) ).
cnf(c_0_69,plain,
subset(X1,set_union2(X2,set_difference(X1,X2))),
inference(spm,[status(thm)],[c_0_65,c_0_66]) ).
cnf(c_0_70,negated_conjecture,
set_union2(singleton(esk7_0),set_difference(esk8_0,singleton(esk7_0))) != esk8_0,
inference(rw,[status(thm)],[c_0_67,c_0_44]) ).
cnf(c_0_71,negated_conjecture,
$false,
inference(sr,[status(thm)],[inference(spm,[status(thm)],[c_0_68,c_0_69]),c_0_70]),
[proof] ).
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.09/0.12 % Problem : SET986+1 : TPTP v8.1.2. Released v3.2.0.
% 0.09/0.13 % Command : java -jar /export/starexec/sandbox2/solver/bin/mcs_scs.jar %d %s
% 0.13/0.34 % Computer : n031.cluster.edu
% 0.13/0.34 % Model : x86_64 x86_64
% 0.13/0.34 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.13/0.34 % Memory : 8042.1875MB
% 0.13/0.34 % OS : Linux 3.10.0-693.el7.x86_64
% 0.13/0.34 % CPULimit : 300
% 0.13/0.34 % WCLimit : 300
% 0.13/0.34 % DateTime : Sat Aug 26 09:25:23 EDT 2023
% 0.13/0.35 % CPUTime :
% 0.19/0.58 start to proof: theBenchmark
% 17.47/17.57 % Version : CSE_E---1.5
% 17.47/17.57 % Problem : theBenchmark.p
% 17.47/17.57 % Proof found
% 17.47/17.57 % SZS status Theorem for theBenchmark.p
% 17.47/17.57 % SZS output start Proof
% See solution above
% 17.47/17.58 % Total time : 16.978000 s
% 17.47/17.58 % SZS output end Proof
% 17.47/17.58 % Total time : 16.982000 s
%------------------------------------------------------------------------------