%------------------------------------------------------------------------------
% File : ConnectPP---0.7.2
% Problem : SET617+3 : TPTP v9.3.1. Released v2.2.0.
% Transfm : none
% Format : tptp:raw
% Command : /export/starexec/sandbox/solver/bin/connect++ --verbosity 1 --no-colour --tptp-proof --schedule default --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 08:57:08 AM UTC 2026
% Result : Theorem 129.61s 129.97s
% Output : Proof 129.61s
% Verified :
% SZS Type : Refutation
% Derivation depth : 10
% Number of leaves : 12
% Syntax : Number of formulae : 110 ( 79 unt; 0 def)
% Number of atoms : 176 ( 106 equ)
% Maximal formula atoms : 6 ( 1 avg)
% Number of connectives : 131 ( 65 ~; 56 |; 9 &)
% ( 1 <=>; 0 =>; 0 <=; 0 <~>)
% Maximal formula depth : 7 ( 2 avg)
% Maximal term depth : 3 ( 1 avg)
% Number of predicates : 3 ( 1 usr; 1 prp; 0-2 aty)
% Number of functors : 6 ( 6 usr; 3 con; 0-2 aty)
% Number of variables : 70 ( 1 sgn 42 !; 5 ?)
% Comments :
%------------------------------------------------------------------------------
fof(symmetric_difference_defn,axiom,
! [B,C] : symmetric_difference(B,C) = union(difference(B,C),difference(C,B)),
file('theBenchmark.p',symmetric_difference_defn) ).
fof(union_empty_set,axiom,
! [B] : union(B,empty_set) = B,
file('theBenchmark.p',union_empty_set) ).
fof(no_difference_with_empty_set1,axiom,
! [B] : difference(B,empty_set) = B,
file('theBenchmark.p',no_difference_with_empty_set1) ).
fof(no_difference_with_empty_set2,axiom,
! [B] : difference(empty_set,B) = empty_set,
file('theBenchmark.p',no_difference_with_empty_set2) ).
fof(equal_defn,axiom,
! [B,C] :
( B = C
<=> ( subset(C,B)
& subset(B,C) ) ),
file('theBenchmark.p',equal_defn) ).
fof(commutativity_of_union,axiom,
! [B,C] : union(B,C) = union(C,B),
file('theBenchmark.p',commutativity_of_union) ).
fof(commutativity_of_symmetric_difference,axiom,
! [B,C] : symmetric_difference(B,C) = symmetric_difference(C,B),
file('theBenchmark.p',commutativity_of_symmetric_difference) ).
fof(reflexivity_of_subset,axiom,
! [B] : subset(B,B),
file('theBenchmark.p',reflexivity_of_subset) ).
fof(prove_th92,conjecture,
! [B] :
( symmetric_difference(empty_set,B) = B
& symmetric_difference(B,empty_set) = B ),
file('theBenchmark.p',prove_th92) ).
fof(f_1_1,plain,
! [B,C] : symmetric_difference(B,C) = union(difference(B,C),difference(C,B)),
inference(fof_nnf,[status(thm)],[symmetric_difference_defn]) ).
fof(f_1_2,plain,
! [U_1,U_0] : symmetric_difference(U_1,U_0) = union(difference(U_1,U_0),difference(U_0,U_1)),
inference(variable_rename,[status(thm)],[f_1_1]) ).
cnf(f_1_3,plain,
symmetric_difference(U_1,U_0) = union(difference(U_1,U_0),difference(U_0,U_1)),
inference(clausify,[status(thm)],[f_1_2]) ).
fof(f_2_1,plain,
! [B] : union(B,empty_set) = B,
inference(fof_nnf,[status(thm)],[union_empty_set]) ).
fof(f_2_2,plain,
! [U_2] : union(U_2,empty_set) = U_2,
inference(variable_rename,[status(thm)],[f_2_1]) ).
cnf(f_2_3,plain,
union(U_2,empty_set) = U_2,
inference(clausify,[status(thm)],[f_2_2]) ).
fof(f_3_1,plain,
! [B] : difference(B,empty_set) = B,
inference(fof_nnf,[status(thm)],[no_difference_with_empty_set1]) ).
fof(f_3_2,plain,
! [U_3] : difference(U_3,empty_set) = U_3,
inference(variable_rename,[status(thm)],[f_3_1]) ).
cnf(f_3_3,plain,
difference(U_3,empty_set) = U_3,
inference(clausify,[status(thm)],[f_3_2]) ).
fof(f_4_1,plain,
! [B] : difference(empty_set,B) = empty_set,
inference(fof_nnf,[status(thm)],[no_difference_with_empty_set2]) ).
fof(f_4_2,plain,
! [U_4] : difference(empty_set,U_4) = empty_set,
inference(variable_rename,[status(thm)],[f_4_1]) ).
cnf(f_4_3,plain,
difference(empty_set,U_4) = empty_set,
inference(clausify,[status(thm)],[f_4_2]) ).
fof(f_6_1,plain,
! [B,C] :
( ( B = C
| ~ subset(C,B)
| ~ subset(B,C) )
& ( ( subset(C,B)
& subset(B,C) )
| B != C ) ),
inference(fof_nnf,[status(thm)],[equal_defn]) ).
fof(f_6_2,plain,
! [U_7,U_6] :
( ( U_7 = U_6
| ~ subset(U_6,U_7)
| ~ subset(U_7,U_6) )
& ( ( subset(U_6,U_7)
& subset(U_7,U_6) )
| U_7 != U_6 ) ),
inference(variable_rename,[status(thm)],[f_6_1]) ).
fof(f_6_3,plain,
( ! [U_11,U_9] :
( U_11 = U_9
| ~ subset(U_9,U_11)
| ~ subset(U_11,U_9) )
& ! [U_10,U_8] :
( ( subset(U_8,U_10)
& subset(U_10,U_8) )
| U_10 != U_8 ) ),
inference(miniscope,[status(thm)],[f_6_2]) ).
cnf(f_6_6,plain,
( U_11 = U_9
| ~ subset(U_9,U_11)
| ~ subset(U_11,U_9) ),
inference(clausify,[status(thm)],[f_6_3]) ).
fof(f_7_1,plain,
! [B,C] : union(B,C) = union(C,B),
inference(fof_nnf,[status(thm)],[commutativity_of_union]) ).
fof(f_7_2,plain,
! [U_13,U_12] : union(U_13,U_12) = union(U_12,U_13),
inference(variable_rename,[status(thm)],[f_7_1]) ).
cnf(f_7_3,plain,
union(U_13,U_12) = union(U_12,U_13),
inference(clausify,[status(thm)],[f_7_2]) ).
fof(f_8_1,plain,
! [B,C] : symmetric_difference(B,C) = symmetric_difference(C,B),
inference(fof_nnf,[status(thm)],[commutativity_of_symmetric_difference]) ).
fof(f_8_2,plain,
! [U_15,U_14] : symmetric_difference(U_15,U_14) = symmetric_difference(U_14,U_15),
inference(variable_rename,[status(thm)],[f_8_1]) ).
cnf(f_8_3,plain,
symmetric_difference(U_15,U_14) = symmetric_difference(U_14,U_15),
inference(clausify,[status(thm)],[f_8_2]) ).
fof(f_11_1,plain,
! [B] : subset(B,B),
inference(fof_nnf,[status(thm)],[reflexivity_of_subset]) ).
fof(f_11_2,plain,
! [U_36] : subset(U_36,U_36),
inference(variable_rename,[status(thm)],[f_11_1]) ).
cnf(f_11_3,plain,
subset(U_36,U_36),
inference(clausify,[status(thm)],[f_11_2]) ).
fof(f_13_1,negated_conjecture,
~ ! [B] :
( symmetric_difference(empty_set,B) = B
& symmetric_difference(B,empty_set) = B ),
inference(negate,[status(cth)],[prove_th92]) ).
fof(f_13_2,negated_conjecture,
? [B] :
( symmetric_difference(empty_set,B) != B
| symmetric_difference(B,empty_set) != B ),
inference(fof_nnf,[status(thm)],[f_13_1]) ).
fof(f_13_3,negated_conjecture,
? [U_42] :
( symmetric_difference(empty_set,U_42) != U_42
| symmetric_difference(U_42,empty_set) != U_42 ),
inference(variable_rename,[status(thm)],[f_13_2]) ).
fof(f_13_4,negated_conjecture,
( ? [U_44] : symmetric_difference(empty_set,U_44) != U_44
| ? [U_43] : symmetric_difference(U_43,empty_set) != U_43 ),
inference(miniscope,[status(thm)],[f_13_3]) ).
fof(f_13_5,negated_conjecture,
( ? [U_44] : symmetric_difference(empty_set,U_44) != U_44
| symmetric_difference(sK5,empty_set) != sK5 ),
inference(skolemize,[status(esa),new_symbols(skolem,[sK5]),skolemize(U_43,sK5)],[f_13_4]) ).
fof(f_13_6,negated_conjecture,
( symmetric_difference(empty_set,sK6) != sK6
| symmetric_difference(sK5,empty_set) != sK5 ),
inference(skolemize,[status(esa),new_symbols(skolem,[sK6]),skolemize(U_44,sK6)],[f_13_5]) ).
fof(f_13_7,negated_conjecture,
( symmetric_difference(empty_set,sK6) != sK6
| symmetric_difference(sK5,empty_set) != sK5 ),
inference(definitional_conversion,[status(esa)],[f_13_6]) ).
cnf(f_13_8,negated_conjecture,
( symmetric_difference(empty_set,sK6) != sK6
| symmetric_difference(sK5,empty_set) != sK5 ),
inference(clausify,[status(thm)],[f_13_7]) ).
cnf(equality_3,axiom,
( Eq_x_0 = Eq_x_2
| Eq_x_1 != Eq_x_2
| Eq_x_0 != Eq_x_1 ),
theory(equality,[transitivity]) ).
cnf(equality_6,axiom,
( union(Eq_x_0,Eq_x_1) = union(Eq_y_0,Eq_y_1)
| Eq_x_1 != Eq_y_1
| Eq_x_0 != Eq_y_0 ),
theory(equality,[substitution_functions]) ).
cnf(equality_12,axiom,
( subset(Eq_y_0,Eq_y_1)
| ~ subset(Eq_x_0,Eq_x_1)
| Eq_x_1 != Eq_y_1
| Eq_x_0 != Eq_y_0 ),
theory(equality,[substitution_predicates]) ).
cnf(t1,plain,
( symmetric_difference(empty_set,sK6) != sK6
| symmetric_difference(sK5,empty_set) != sK5 ),
inference(start,[status(thm),parent(0:0)],[f_13_8]) ).
cnf(t2,plain,
( union(difference(empty_set,sK5),difference(sK5,empty_set)) != sK5
| symmetric_difference(sK5,empty_set) != union(difference(empty_set,sK5),difference(sK5,empty_set))
| symmetric_difference(sK5,empty_set) = sK5 ),
inference(extension,[status(thm),parent(t1:1)],[equality_3]) ).
cnf(t3,plain,
$false,
inference(connection,[status(thm),parent(t2:1)],[t2:1,t1:1]) ).
cnf(t4,plain,
( ~ subset(union(difference(empty_set,sK5),difference(sK5,empty_set)),symmetric_difference(sK5,empty_set))
| ~ subset(symmetric_difference(sK5,empty_set),union(difference(empty_set,sK5),difference(sK5,empty_set)))
| symmetric_difference(sK5,empty_set) = union(difference(empty_set,sK5),difference(sK5,empty_set)) ),
inference(extension,[status(thm),parent(t2:2)],[f_6_6]) ).
cnf(t5,plain,
$false,
inference(connection,[status(thm),parent(t4:1)],[t4:1,t2:2]) ).
cnf(t6,plain,
( symmetric_difference(empty_set,sK5) != union(difference(empty_set,sK5),difference(sK5,empty_set))
| ~ subset(symmetric_difference(empty_set,sK5),symmetric_difference(empty_set,sK5))
| symmetric_difference(empty_set,sK5) != symmetric_difference(sK5,empty_set)
| subset(symmetric_difference(sK5,empty_set),union(difference(empty_set,sK5),difference(sK5,empty_set))) ),
inference(extension,[status(thm),parent(t4:2)],[equality_12]) ).
cnf(t7,plain,
$false,
inference(connection,[status(thm),parent(t6:1)],[t6:1,t4:2]) ).
cnf(t8,plain,
symmetric_difference(empty_set,sK5) = symmetric_difference(sK5,empty_set),
inference(extension,[status(thm),parent(t6:2)],[f_8_3]) ).
cnf(t9,plain,
$false,
inference(connection,[status(thm),parent(t8:1)],[t8:1,t6:2]) ).
cnf(t10,plain,
subset(symmetric_difference(empty_set,sK5),symmetric_difference(empty_set,sK5)),
inference(extension,[status(thm),parent(t6:3)],[f_11_3]) ).
cnf(t11,plain,
$false,
inference(connection,[status(thm),parent(t10:1)],[t10:1,t6:3]) ).
cnf(t12,plain,
symmetric_difference(empty_set,sK5) = union(difference(empty_set,sK5),difference(sK5,empty_set)),
inference(extension,[status(thm),parent(t6:4)],[f_1_3]) ).
cnf(t13,plain,
$false,
inference(connection,[status(thm),parent(t12:1)],[t12:1,t6:4]) ).
cnf(t14,plain,
( symmetric_difference(empty_set,sK5) != symmetric_difference(sK5,empty_set)
| ~ subset(symmetric_difference(empty_set,sK5),symmetric_difference(empty_set,sK5))
| symmetric_difference(empty_set,sK5) != union(difference(empty_set,sK5),difference(sK5,empty_set))
| subset(union(difference(empty_set,sK5),difference(sK5,empty_set)),symmetric_difference(sK5,empty_set)) ),
inference(extension,[status(thm),parent(t4:3)],[equality_12]) ).
cnf(t15,plain,
$false,
inference(connection,[status(thm),parent(t14:1)],[t14:1,t4:3]) ).
cnf(t16,plain,
symmetric_difference(empty_set,sK5) = union(difference(empty_set,sK5),difference(sK5,empty_set)),
inference(extension,[status(thm),parent(t14:2)],[f_1_3]) ).
cnf(t17,plain,
$false,
inference(connection,[status(thm),parent(t16:1)],[t16:1,t14:2]) ).
cnf(t18,plain,
subset(symmetric_difference(empty_set,sK5),symmetric_difference(empty_set,sK5)),
inference(extension,[status(thm),parent(t14:3)],[f_11_3]) ).
cnf(t19,plain,
$false,
inference(connection,[status(thm),parent(t18:1)],[t18:1,t14:3]) ).
cnf(t20,plain,
symmetric_difference(empty_set,sK5) = symmetric_difference(sK5,empty_set),
inference(extension,[status(thm),parent(t14:4)],[f_8_3]) ).
cnf(t21,plain,
$false,
inference(connection,[status(thm),parent(t20:1)],[t20:1,t14:4]) ).
cnf(t22,plain,
( union(empty_set,sK5) != sK5
| union(difference(empty_set,sK5),difference(sK5,empty_set)) != union(empty_set,sK5)
| union(difference(empty_set,sK5),difference(sK5,empty_set)) = sK5 ),
inference(extension,[status(thm),parent(t2:3)],[equality_3]) ).
cnf(t23,plain,
$false,
inference(connection,[status(thm),parent(t22:1)],[t22:1,t2:3]) ).
cnf(t24,plain,
( difference(sK5,empty_set) != sK5
| difference(empty_set,sK5) != empty_set
| union(difference(empty_set,sK5),difference(sK5,empty_set)) = union(empty_set,sK5) ),
inference(extension,[status(thm),parent(t22:2)],[equality_6]) ).
cnf(t25,plain,
$false,
inference(connection,[status(thm),parent(t24:1)],[t24:1,t22:2]) ).
cnf(t26,plain,
difference(empty_set,sK5) = empty_set,
inference(extension,[status(thm),parent(t24:2)],[f_4_3]) ).
cnf(t27,plain,
$false,
inference(connection,[status(thm),parent(t26:1)],[t26:1,t24:2]) ).
cnf(t28,plain,
difference(sK5,empty_set) = sK5,
inference(extension,[status(thm),parent(t24:3)],[f_3_3]) ).
cnf(t29,plain,
$false,
inference(connection,[status(thm),parent(t28:1)],[t28:1,t24:3]) ).
cnf(t30,plain,
( union(sK5,empty_set) != sK5
| union(empty_set,sK5) != union(sK5,empty_set)
| union(empty_set,sK5) = sK5 ),
inference(extension,[status(thm),parent(t22:3)],[equality_3]) ).
cnf(t31,plain,
$false,
inference(connection,[status(thm),parent(t30:1)],[t30:1,t22:3]) ).
cnf(t32,plain,
union(empty_set,sK5) = union(sK5,empty_set),
inference(extension,[status(thm),parent(t30:2)],[f_7_3]) ).
cnf(t33,plain,
$false,
inference(connection,[status(thm),parent(t32:1)],[t32:1,t30:2]) ).
cnf(t34,plain,
union(sK5,empty_set) = sK5,
inference(extension,[status(thm),parent(t30:3)],[f_2_3]) ).
cnf(t35,plain,
$false,
inference(connection,[status(thm),parent(t34:1)],[t34:1,t30:3]) ).
cnf(t36,plain,
( union(difference(sK6,empty_set),difference(empty_set,sK6)) != sK6
| symmetric_difference(empty_set,sK6) != union(difference(sK6,empty_set),difference(empty_set,sK6))
| symmetric_difference(empty_set,sK6) = sK6 ),
inference(extension,[status(thm),parent(t1:2)],[equality_3]) ).
cnf(t37,plain,
$false,
inference(connection,[status(thm),parent(t36:1)],[t36:1,t1:2]) ).
cnf(t38,plain,
( ~ subset(union(difference(sK6,empty_set),difference(empty_set,sK6)),symmetric_difference(empty_set,sK6))
| ~ subset(symmetric_difference(empty_set,sK6),union(difference(sK6,empty_set),difference(empty_set,sK6)))
| symmetric_difference(empty_set,sK6) = union(difference(sK6,empty_set),difference(empty_set,sK6)) ),
inference(extension,[status(thm),parent(t36:2)],[f_6_6]) ).
cnf(t39,plain,
$false,
inference(connection,[status(thm),parent(t38:1)],[t38:1,t36:2]) ).
cnf(t40,plain,
( symmetric_difference(sK6,empty_set) != union(difference(sK6,empty_set),difference(empty_set,sK6))
| ~ subset(symmetric_difference(sK6,empty_set),symmetric_difference(sK6,empty_set))
| symmetric_difference(sK6,empty_set) != symmetric_difference(empty_set,sK6)
| subset(symmetric_difference(empty_set,sK6),union(difference(sK6,empty_set),difference(empty_set,sK6))) ),
inference(extension,[status(thm),parent(t38:2)],[equality_12]) ).
cnf(t41,plain,
$false,
inference(connection,[status(thm),parent(t40:1)],[t40:1,t38:2]) ).
cnf(t42,plain,
symmetric_difference(sK6,empty_set) = symmetric_difference(empty_set,sK6),
inference(extension,[status(thm),parent(t40:2)],[f_8_3]) ).
cnf(t43,plain,
$false,
inference(connection,[status(thm),parent(t42:1)],[t42:1,t40:2]) ).
cnf(t44,plain,
subset(symmetric_difference(sK6,empty_set),symmetric_difference(sK6,empty_set)),
inference(extension,[status(thm),parent(t40:3)],[f_11_3]) ).
cnf(t45,plain,
$false,
inference(connection,[status(thm),parent(t44:1)],[t44:1,t40:3]) ).
cnf(t46,plain,
symmetric_difference(sK6,empty_set) = union(difference(sK6,empty_set),difference(empty_set,sK6)),
inference(extension,[status(thm),parent(t40:4)],[f_1_3]) ).
cnf(t47,plain,
$false,
inference(connection,[status(thm),parent(t46:1)],[t46:1,t40:4]) ).
cnf(t48,plain,
( symmetric_difference(sK6,empty_set) != symmetric_difference(empty_set,sK6)
| ~ subset(symmetric_difference(sK6,empty_set),symmetric_difference(sK6,empty_set))
| symmetric_difference(sK6,empty_set) != union(difference(sK6,empty_set),difference(empty_set,sK6))
| subset(union(difference(sK6,empty_set),difference(empty_set,sK6)),symmetric_difference(empty_set,sK6)) ),
inference(extension,[status(thm),parent(t38:3)],[equality_12]) ).
cnf(t49,plain,
$false,
inference(connection,[status(thm),parent(t48:1)],[t48:1,t38:3]) ).
cnf(t50,plain,
symmetric_difference(sK6,empty_set) = union(difference(sK6,empty_set),difference(empty_set,sK6)),
inference(extension,[status(thm),parent(t48:2)],[f_1_3]) ).
cnf(t51,plain,
$false,
inference(connection,[status(thm),parent(t50:1)],[t50:1,t48:2]) ).
cnf(t52,plain,
subset(symmetric_difference(sK6,empty_set),symmetric_difference(sK6,empty_set)),
inference(extension,[status(thm),parent(t48:3)],[f_11_3]) ).
cnf(t53,plain,
$false,
inference(connection,[status(thm),parent(t52:1)],[t52:1,t48:3]) ).
cnf(t54,plain,
symmetric_difference(sK6,empty_set) = symmetric_difference(empty_set,sK6),
inference(extension,[status(thm),parent(t48:4)],[f_8_3]) ).
cnf(t55,plain,
$false,
inference(connection,[status(thm),parent(t54:1)],[t54:1,t48:4]) ).
cnf(t56,plain,
( union(sK6,empty_set) != sK6
| union(difference(sK6,empty_set),difference(empty_set,sK6)) != union(sK6,empty_set)
| union(difference(sK6,empty_set),difference(empty_set,sK6)) = sK6 ),
inference(extension,[status(thm),parent(t36:3)],[equality_3]) ).
cnf(t57,plain,
$false,
inference(connection,[status(thm),parent(t56:1)],[t56:1,t36:3]) ).
cnf(t58,plain,
( difference(empty_set,sK6) != empty_set
| difference(sK6,empty_set) != sK6
| union(difference(sK6,empty_set),difference(empty_set,sK6)) = union(sK6,empty_set) ),
inference(extension,[status(thm),parent(t56:2)],[equality_6]) ).
cnf(t59,plain,
$false,
inference(connection,[status(thm),parent(t58:1)],[t58:1,t56:2]) ).
cnf(t60,plain,
difference(sK6,empty_set) = sK6,
inference(extension,[status(thm),parent(t58:2)],[f_3_3]) ).
cnf(t61,plain,
$false,
inference(connection,[status(thm),parent(t60:1)],[t60:1,t58:2]) ).
cnf(t62,plain,
difference(empty_set,sK6) = empty_set,
inference(extension,[status(thm),parent(t58:3)],[f_4_3]) ).
cnf(t63,plain,
$false,
inference(connection,[status(thm),parent(t62:1)],[t62:1,t58:3]) ).
cnf(t64,plain,
union(sK6,empty_set) = sK6,
inference(extension,[status(thm),parent(t56:3)],[f_2_3]) ).
cnf(t65,plain,
$false,
inference(connection,[status(thm),parent(t64:1)],[t64:1,t56:3]) ).
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.00/0.02 % Problem : SET617+3 : TPTP v9.3.1. Released v2.2.0.
% 0.00/0.03 This is a FOF_THM_RFO_SEQ problem
% 0.00/0.03 % Command : /export/starexec/sandbox/solver/bin/connect++ --verbosity 1 --no-colour --tptp-proof --schedule default --timeout 300 /export/starexec/sandbox/benchmark/theBenchmark.p
% 0.11/0.37 % Computer : n014.cluster.edu
% 0.11/0.37 % Model : x86_64 x86_64
% 0.11/0.37 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.11/0.37 % Memory : 8046.5625MB
% 0.11/0.37 % OS : Linux 6.8.0-71-generic
% 0.11/0.37 % CPULimit : 300
% 0.11/0.37 % WCLimit : 300
% 0.11/0.37 % DateTime : Sat Sep 19 22:43:20 UTC 2026
% 0.11/0.37 % CPUTime :
% 129.61/129.97 % SZS status Theorem for theBenchmark
% 129.61/129.97 % SZS output start Proof for theBenchmark
% See solution above
%------------------------------------------------------------------------------