%------------------------------------------------------------------------------
% File : Prover9---2026-6A
% Problem : REL026+1 : TPTP v9.3.1. Released v4.0.0.
% Transfm : none
% Format : tptp:raw
% Command : prover9 -casc 300 -f /export/starexec/sandbox2/benchmark/theBenchmark.p
% Computer : n011.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 : Sun Sep 27 08:24:54 AM UTC 2026
% Result : Theorem 15.80s 2.46s
% Output : CNFRefutation 15.80s
% Verified :
% SZS Type : Refutation
% Derivation depth : 32
% Number of leaves : 13
% Syntax : Number of formulae : 122 ( 118 unt; 0 def)
% Number of atoms : 126 ( 125 equ)
% Maximal formula atoms : 2 ( 1 avg)
% Number of connectives : 10 ( 6 ~; 0 |; 2 &)
% ( 0 <=>; 2 =>; 0 <=; 0 <~>)
% Maximal formula depth : 5 ( 1 avg)
% Maximal term depth : 8 ( 2 avg)
% Number of predicates : 2 ( 0 usr; 1 prp; 0-2 aty)
% Number of functors : 10 ( 10 usr; 5 con; 0-2 aty)
% Number of variables : 193 ( 4 sgn 26 !; 2 ?)
% Comments :
%------------------------------------------------------------------------------
fof(maddux1_join_commutativity,axiom,
! [X0,X1] : join(X0,X1) = join(X1,X0),
file('theBenchmark.p',maddux1_join_commutativity) ).
fof(maddux2_join_associativity,axiom,
! [X0,X1,X2] : join(X0,join(X1,X2)) = join(join(X0,X1),X2),
file('theBenchmark.p',maddux2_join_associativity) ).
fof(maddux3_a_kind_of_de_Morgan,axiom,
! [X0,X1] : X0 = join(complement(join(complement(X0),complement(X1))),complement(join(complement(X0),X1))),
file('theBenchmark.p',maddux3_a_kind_of_de_Morgan) ).
fof(maddux4_definiton_of_meet,axiom,
! [X0,X1] : meet(X0,X1) = complement(join(complement(X0),complement(X1))),
file('theBenchmark.p',maddux4_definiton_of_meet) ).
fof(composition_identity,axiom,
! [X0] : composition(X0,one) = X0,
file('theBenchmark.p',composition_identity) ).
fof(composition_distributivity,axiom,
! [X0,X1,X2] : composition(join(X0,X1),X2) = join(composition(X0,X2),composition(X1,X2)),
file('theBenchmark.p',composition_distributivity) ).
fof(converse_idempotence,axiom,
! [X0] : converse(converse(X0)) = X0,
file('theBenchmark.p',converse_idempotence) ).
fof(converse_additivity,axiom,
! [X0,X1] : converse(join(X0,X1)) = join(converse(X0),converse(X1)),
file('theBenchmark.p',converse_additivity) ).
fof(converse_multiplicativity,axiom,
! [X0,X1] : converse(composition(X0,X1)) = composition(converse(X1),converse(X0)),
file('theBenchmark.p',converse_multiplicativity) ).
fof(converse_cancellativity,axiom,
! [X0,X1] : join(composition(converse(X0),complement(composition(X0,X1))),complement(X1)) = complement(X1),
file('theBenchmark.p',converse_cancellativity) ).
fof(def_top,axiom,
! [X0] : top = join(X0,complement(X0)),
file('theBenchmark.p',def_top) ).
fof(def_zero,axiom,
! [X0] : zero = meet(X0,complement(X0)),
file('theBenchmark.p',def_zero) ).
fof(goals,conjecture,
! [X0,X1] :
( join(X0,one) = one
=> meet(composition(X0,top),X1) = composition(X0,X1) ),
file('theBenchmark.p',goals) ).
fof(goals_neg,negated_conjecture,
~ ! [X0,X1] :
( join(X0,one) = one
=> meet(composition(X0,top),X1) = composition(X0,X1) ),
inference(assume_negation,[status(cth)],[goals]) ).
cnf(c_15,plain,
join(A,B) = join(B,A),
inference(clausify,[status(thm)],[maddux1_join_commutativity]) ).
cnf(c_16,plain,
join(join(A,B),C) = join(A,join(B,C)),
inference(clausify,[status(thm)],[maddux2_join_associativity]) ).
cnf(c_17,plain,
join(complement(join(complement(A),complement(B))),complement(join(complement(A),B))) = A,
inference(clausify,[status(thm)],[maddux3_a_kind_of_de_Morgan]) ).
cnf(c_18,plain,
join(complement(join(complement(A),B)),complement(join(complement(A),complement(B)))) = A,
inference(paramod,[status(thm)],[c_15,c_17]) ).
cnf(c_19,plain,
meet(A,B) = complement(join(complement(A),complement(B))),
inference(clausify,[status(thm)],[maddux4_definiton_of_meet]) ).
cnf(c_21,plain,
composition(A,one) = A,
inference(clausify,[status(thm)],[composition_identity]) ).
cnf(c_22,plain,
composition(join(A,B),C) = join(composition(A,C),composition(B,C)),
inference(clausify,[status(thm)],[composition_distributivity]) ).
cnf(c_23,plain,
converse(converse(A)) = A,
inference(clausify,[status(thm)],[converse_idempotence]) ).
cnf(c_24,plain,
converse(join(A,B)) = join(converse(A),converse(B)),
inference(clausify,[status(thm)],[converse_additivity]) ).
cnf(c_25,plain,
converse(composition(A,B)) = composition(converse(B),converse(A)),
inference(clausify,[status(thm)],[converse_multiplicativity]) ).
cnf(c_26,plain,
complement(A) = join(composition(converse(B),complement(composition(B,A))),complement(A)),
inference(clausify,[status(thm)],[converse_cancellativity]) ).
cnf(c_2586,plain,
complement(A) = join(complement(A),composition(converse(B),complement(composition(B,A)))),
inference(paramod,[status(thm)],[c_15,c_26]) ).
cnf(c_27,plain,
join(complement(A),composition(converse(B),complement(composition(B,A)))) = complement(A),
inference(copy,[status(thm)],[c_2586]) ).
cnf(c_28,plain,
join(A,complement(A)) = top,
inference(clausify,[status(thm)],[def_top]) ).
cnf(c_29,plain,
meet(A,complement(A)) = zero,
inference(clausify,[status(thm)],[def_zero]) ).
cnf(c_2587,plain,
complement(join(complement(A),complement(complement(A)))) = zero,
inference(paramod,[status(thm)],[c_19,c_29]) ).
cnf(c_30,plain,
complement(top) = zero,
inference(paramod,[status(thm)],[c_28,c_2587]) ).
fof(nnf_14,plain,
? [X0,X1] :
( composition(X0,X1) != meet(composition(X0,top),X1)
& join(X0,one) = one ),
inference(fof_nnf,[status(thm)],[goals_neg]) ).
fof(sk_goals_neg,plain,
( composition(sK0,sK1) != meet(composition(sK0,top),sK1)
& join(sK0,one) = one ),
inference(skolemize,[status(esa),new_symbols(skolem,[sK0,sK1]),skolemize(X0,sK0),skolemize(X1,sK1)],[nnf_14]) ).
cnf(c_31,negated_conjecture,
join(sK0,one) = one,
inference(split_conjunct,[status(thm)],[sk_goals_neg]) ).
cnf(c_32,negated_conjecture,
join(one,sK0) = one,
inference(paramod,[status(thm)],[c_15,c_31]) ).
cnf(c_33,negated_conjecture,
composition(sK0,sK1) != meet(composition(sK0,top),sK1),
inference(split_conjunct,[status(thm)],[sk_goals_neg]) ).
cnf(c_2588,negated_conjecture,
composition(sK0,sK1) != complement(join(complement(composition(sK0,top)),complement(sK1))),
inference(paramod,[status(thm)],[c_19,c_33]) ).
cnf(c_34,negated_conjecture,
composition(sK0,sK1) != complement(join(complement(sK1),complement(composition(sK0,top)))),
inference(paramod,[status(thm)],[c_15,c_2588]) ).
cnf(c_2589,plain,
join(join(A,B),C) = join(B,join(A,C)),
inference(paramod,[status(thm)],[c_15,c_16]) ).
cnf(c_36,plain,
join(A,join(B,C)) = join(B,join(A,C)),
inference(paramod,[status(thm)],[c_16,c_2589]) ).
cnf(c_37,plain,
join(complement(join(A,complement(B))),complement(join(complement(B),complement(A)))) = B,
inference(paramod,[status(thm)],[c_15,c_18]) ).
cnf(c_38,plain,
join(complement(join(complement(A),B)),complement(join(complement(B),complement(A)))) = A,
inference(paramod,[status(thm)],[c_15,c_18]) ).
cnf(c_2590,plain,
converse(A) = composition(converse(one),converse(A)),
inference(paramod,[status(thm)],[c_21,c_25]) ).
cnf(c_41,plain,
composition(converse(one),converse(A)) = converse(A),
inference(copy,[status(thm)],[c_2590]) ).
cnf(c_2591,plain,
converse(join(composition(A,B),composition(C,B))) = composition(converse(B),converse(join(A,C))),
inference(paramod,[status(thm)],[c_22,c_25]) ).
cnf(c_2592,plain,
join(converse(composition(A,B)),converse(composition(C,B))) = composition(converse(B),converse(join(A,C))),
inference(paramod,[status(thm)],[c_24,c_2591]) ).
cnf(c_2593,plain,
join(composition(converse(B),converse(A)),converse(composition(C,B))) = composition(converse(B),converse(join(A,C))),
inference(paramod,[status(thm)],[c_25,c_2592]) ).
cnf(c_2594,plain,
join(composition(converse(B),converse(A)),composition(converse(B),converse(C))) = composition(converse(B),converse(join(A,C))),
inference(paramod,[status(thm)],[c_25,c_2593]) ).
cnf(c_2595,plain,
join(composition(converse(B),converse(A)),composition(converse(B),converse(C))) = composition(converse(B),join(converse(A),converse(C))),
inference(paramod,[status(thm)],[c_24,c_2594]) ).
cnf(c_42,plain,
composition(converse(A),join(converse(B),converse(C))) = join(composition(converse(A),converse(B)),composition(converse(A),converse(C))),
inference(copy,[status(thm)],[c_2595]) ).
cnf(c_2596,plain,
join(complement(top),complement(join(complement(A),complement(complement(complement(A)))))) = A,
inference(paramod,[status(thm)],[c_28,c_18]) ).
cnf(c_48,plain,
join(zero,complement(join(complement(A),complement(complement(complement(A)))))) = A,
inference(paramod,[status(thm)],[c_30,c_2596]) ).
cnf(c_2597,plain,
join(complement(join(complement(A),complement(A))),complement(top)) = A,
inference(paramod,[status(thm)],[c_28,c_18]) ).
cnf(c_2598,plain,
join(complement(join(complement(A),complement(A))),zero) = A,
inference(paramod,[status(thm)],[c_30,c_2597]) ).
cnf(c_49,plain,
join(zero,complement(join(complement(A),complement(A)))) = A,
inference(paramod,[status(thm)],[c_15,c_2598]) ).
cnf(c_2599,plain,
composition(one,A) = join(composition(one,A),composition(sK0,A)),
inference(paramod,[status(thm)],[c_32,c_22]) ).
cnf(c_58,plain,
join(composition(one,A),composition(sK0,A)) = composition(one,A),
inference(copy,[status(thm)],[c_2599]) ).
cnf(c_2600,plain,
composition(converse(one),A) = converse(converse(A)),
inference(paramod,[status(thm)],[c_23,c_41]) ).
cnf(c_72,plain,
composition(converse(one),A) = A,
inference(paramod,[status(thm)],[c_23,c_2600]) ).
cnf(c_2601,plain,
one = converse(one),
inference(paramod,[status(thm)],[c_72,c_21]) ).
cnf(c_74,plain,
converse(one) = one,
inference(copy,[status(thm)],[c_2601]) ).
cnf(c_78,plain,
join(complement(A),complement(composition(one,A))) = complement(A),
inference(paramod,[status(thm)],[c_72,c_27]) ).
cnf(c_79,plain,
composition(one,A) = A,
inference(paramod,[status(thm)],[c_74,c_72]) ).
cnf(c_2602,plain,
join(A,composition(sK0,A)) = composition(one,A),
inference(paramod,[status(thm)],[c_79,c_58]) ).
cnf(c_81,plain,
join(A,composition(sK0,A)) = A,
inference(paramod,[status(thm)],[c_79,c_2602]) ).
cnf(c_82,plain,
join(complement(A),complement(A)) = complement(A),
inference(paramod,[status(thm)],[c_79,c_78]) ).
cnf(c_83,plain,
join(zero,complement(complement(A))) = A,
inference(paramod,[status(thm)],[c_82,c_49]) ).
cnf(c_2603,plain,
join(complement(join(complement(complement(A)),A)),complement(top)) = complement(A),
inference(paramod,[status(thm)],[c_28,c_38]) ).
cnf(c_2604,plain,
join(complement(join(A,complement(complement(A)))),complement(top)) = complement(A),
inference(paramod,[status(thm)],[c_15,c_2603]) ).
cnf(c_2605,plain,
join(complement(join(A,complement(complement(A)))),zero) = complement(A),
inference(paramod,[status(thm)],[c_30,c_2604]) ).
cnf(c_86,plain,
join(zero,complement(join(A,complement(complement(A))))) = complement(A),
inference(paramod,[status(thm)],[c_15,c_2605]) ).
cnf(c_87,plain,
complement(complement(A)) = A,
inference(paramod,[status(thm)],[c_86,c_48]) ).
cnf(c_88,plain,
join(zero,complement(join(A,A))) = complement(A),
inference(paramod,[status(thm)],[c_87,c_86]) ).
cnf(c_89,plain,
join(zero,A) = A,
inference(paramod,[status(thm)],[c_87,c_83]) ).
cnf(c_90,plain,
complement(join(A,A)) = complement(A),
inference(paramod,[status(thm)],[c_89,c_88]) ).
cnf(c_2606,plain,
join(A,B) = join(B,join(A,composition(sK0,B))),
inference(paramod,[status(thm)],[c_81,c_36]) ).
cnf(c_112,plain,
join(A,join(B,composition(sK0,A))) = join(B,A),
inference(copy,[status(thm)],[c_2606]) ).
cnf(c_2607,plain,
composition(A,join(converse(B),converse(C))) = join(composition(converse(converse(A)),converse(B)),composition(converse(converse(A)),converse(C))),
inference(paramod,[status(thm)],[c_23,c_42]) ).
cnf(c_2608,plain,
composition(A,join(converse(B),converse(C))) = join(composition(A,converse(B)),composition(converse(converse(A)),converse(C))),
inference(paramod,[status(thm)],[c_23,c_2607]) ).
cnf(c_114,plain,
composition(A,join(converse(B),converse(C))) = join(composition(A,converse(B)),composition(A,converse(C))),
inference(paramod,[status(thm)],[c_23,c_2608]) ).
cnf(c_2609,plain,
join(complement(join(A,B)),complement(join(complement(complement(A)),complement(B)))) = complement(A),
inference(paramod,[status(thm)],[c_87,c_18]) ).
cnf(c_128,plain,
join(complement(join(A,B)),complement(join(A,complement(B)))) = complement(A),
inference(paramod,[status(thm)],[c_87,c_2609]) ).
cnf(c_2610,plain,
join(complement(join(A,B)),complement(join(complement(complement(B)),complement(A)))) = complement(B),
inference(paramod,[status(thm)],[c_87,c_37]) ).
cnf(c_130,plain,
join(complement(join(A,B)),complement(join(B,complement(A)))) = complement(B),
inference(paramod,[status(thm)],[c_87,c_2610]) ).
cnf(c_2611,plain,
complement(complement(A)) = join(A,A),
inference(paramod,[status(thm)],[c_90,c_87]) ).
cnf(c_2612,plain,
A = join(A,A),
inference(paramod,[status(thm)],[c_87,c_2611]) ).
cnf(c_137,plain,
join(A,A) = A,
inference(copy,[status(thm)],[c_2612]) ).
cnf(c_2613,plain,
join(A,B) = join(A,join(A,B)),
inference(paramod,[status(thm)],[c_137,c_16]) ).
cnf(c_143,plain,
join(A,join(A,B)) = join(A,B),
inference(copy,[status(thm)],[c_2613]) ).
cnf(c_2614,plain,
composition(A,join(B,converse(C))) = join(composition(A,converse(converse(B))),composition(A,converse(C))),
inference(paramod,[status(thm)],[c_23,c_114]) ).
cnf(c_404,plain,
composition(A,join(B,converse(C))) = join(composition(A,B),composition(A,converse(C))),
inference(paramod,[status(thm)],[c_23,c_2614]) ).
cnf(c_2615,plain,
join(complement(join(A,B)),complement(A)) = join(complement(join(A,B)),complement(join(A,complement(B)))),
inference(paramod,[status(thm)],[c_128,c_143]) ).
cnf(c_2616,plain,
join(complement(A),complement(join(A,B))) = join(complement(join(A,B)),complement(join(A,complement(B)))),
inference(paramod,[status(thm)],[c_15,c_2615]) ).
cnf(c_516,plain,
join(complement(A),complement(join(A,B))) = complement(A),
inference(paramod,[status(thm)],[c_128,c_2616]) ).
cnf(c_532,plain,
join(complement(A),complement(join(B,A))) = complement(A),
inference(paramod,[status(thm)],[c_15,c_516]) ).
cnf(c_2617,plain,
join(A,complement(join(B,complement(A)))) = complement(complement(A)),
inference(paramod,[status(thm)],[c_87,c_532]) ).
cnf(c_553,plain,
join(A,complement(join(B,complement(A)))) = A,
inference(paramod,[status(thm)],[c_87,c_2617]) ).
cnf(c_2618,plain,
join(complement(complement(A)),complement(join(complement(join(A,complement(B))),complement(complement(join(A,B)))))) = complement(complement(join(A,complement(B)))),
inference(paramod,[status(thm)],[c_128,c_130]) ).
cnf(c_2619,plain,
join(A,complement(join(complement(join(A,complement(B))),complement(complement(join(A,B)))))) = complement(complement(join(A,complement(B)))),
inference(paramod,[status(thm)],[c_87,c_2618]) ).
cnf(c_2620,plain,
join(A,complement(join(complement(join(A,complement(B))),join(A,B)))) = complement(complement(join(A,complement(B)))),
inference(paramod,[status(thm)],[c_87,c_2619]) ).
cnf(c_2621,plain,
join(A,complement(join(join(A,B),complement(join(A,complement(B)))))) = complement(complement(join(A,complement(B)))),
inference(paramod,[status(thm)],[c_15,c_2620]) ).
cnf(c_2622,plain,
join(A,complement(join(A,join(B,complement(join(A,complement(B))))))) = complement(complement(join(A,complement(B)))),
inference(paramod,[status(thm)],[c_16,c_2621]) ).
cnf(c_2623,plain,
join(A,complement(join(A,B))) = complement(complement(join(A,complement(B)))),
inference(paramod,[status(thm)],[c_553,c_2622]) ).
cnf(c_611,plain,
join(A,complement(join(A,B))) = join(A,complement(B)),
inference(paramod,[status(thm)],[c_87,c_2623]) ).
cnf(c_2624,plain,
composition(A,join(B,C)) = join(composition(A,B),composition(A,converse(converse(C)))),
inference(paramod,[status(thm)],[c_23,c_404]) ).
cnf(c_2407,plain,
composition(A,join(B,C)) = join(composition(A,B),composition(A,C)),
inference(paramod,[status(thm)],[c_23,c_2624]) ).
cnf(c_2625,plain,
composition(A,top) = join(composition(A,B),composition(A,complement(B))),
inference(paramod,[status(thm)],[c_28,c_2407]) ).
cnf(c_2435,plain,
join(composition(A,B),composition(A,complement(B))) = composition(A,top),
inference(copy,[status(thm)],[c_2625]) ).
cnf(c_2626,plain,
join(complement(A),composition(sK0,top)) = join(composition(sK0,A),complement(A)),
inference(paramod,[status(thm)],[c_2435,c_112]) ).
cnf(c_2509,plain,
join(complement(A),composition(sK0,top)) = join(complement(A),composition(sK0,A)),
inference(paramod,[status(thm)],[c_15,c_2626]) ).
cnf(c_2627,plain,
join(complement(join(complement(A),composition(sK0,top))),complement(join(composition(sK0,A),complement(complement(A))))) = complement(composition(sK0,A)),
inference(paramod,[status(thm)],[c_2509,c_130]) ).
cnf(c_2628,plain,
join(complement(join(complement(A),composition(sK0,top))),complement(join(composition(sK0,A),A))) = complement(composition(sK0,A)),
inference(paramod,[status(thm)],[c_87,c_2627]) ).
cnf(c_2629,plain,
join(complement(join(complement(A),composition(sK0,top))),complement(join(A,composition(sK0,A)))) = complement(composition(sK0,A)),
inference(paramod,[status(thm)],[c_15,c_2628]) ).
cnf(c_2630,plain,
join(complement(join(complement(A),composition(sK0,top))),complement(A)) = complement(composition(sK0,A)),
inference(paramod,[status(thm)],[c_81,c_2629]) ).
cnf(c_2631,plain,
join(complement(A),complement(join(complement(A),composition(sK0,top)))) = complement(composition(sK0,A)),
inference(paramod,[status(thm)],[c_15,c_2630]) ).
cnf(c_2632,plain,
join(complement(A),complement(composition(sK0,top))) = complement(composition(sK0,A)),
inference(paramod,[status(thm)],[c_611,c_2631]) ).
cnf(c_2535,plain,
complement(composition(sK0,A)) = join(complement(A),complement(composition(sK0,top))),
inference(copy,[status(thm)],[c_2632]) ).
cnf(c_2633,plain,
meet(A,composition(sK0,top)) = complement(complement(composition(sK0,A))),
inference(paramod,[status(thm)],[c_2535,c_19]) ).
cnf(c_2634,plain,
complement(join(complement(A),complement(composition(sK0,top)))) = complement(complement(composition(sK0,A))),
inference(paramod,[status(thm)],[c_19,c_2633]) ).
cnf(c_2635,plain,
complement(join(complement(A),complement(composition(sK0,top)))) = composition(sK0,A),
inference(paramod,[status(thm)],[c_87,c_2634]) ).
cnf(c_2584,plain,
composition(sK0,A) = complement(join(complement(A),complement(composition(sK0,top)))),
inference(copy,[status(thm)],[c_2635]) ).
cnf(c_2585,plain,
$false,
inference(resolve,[status(thm)],[c_2584,c_34]) ).
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.00/0.03 % Problem : REL026+1 : TPTP v9.3.1. Released v4.0.0.
% 0.00/0.04 % Command : prover9 -casc 300 -f /export/starexec/sandbox2/benchmark/theBenchmark.p
% 0.09/0.35 % Computer : n011.cluster.edu
% 0.09/0.35 % Model : x86_64 x86_64
% 0.09/0.35 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.09/0.35 % Memory : 8046.5625MB
% 0.09/0.35 % OS : Linux 6.8.0-71-generic
% 0.09/0.36 % CPULimit : 300
% 0.09/0.36 % WCLimit : 300
% 0.09/0.36 % DateTime : Sat Sep 26 05:32:14 UTC 2026
% 0.09/0.36 % CPUTime :
% 0.09/0.36 % Prover9 (64) version 2026-6A, July 2026, CASC-J13.
% 0.09/0.36 % Process 3876641 was started by sandbox2 on n011,
% 0.09/0.36 % Sat Sep 26 05:32:14 2026
% 0.09/0.36 % The command was "/export/starexec/sandbox2/solver/bin/prover9 -casc 300 -f /export/starexec/sandbox2/benchmark/theBenchmark.p".
% 0.09/0.37
% 0.09/0.37 % From the command line: assign(max_seconds, 300).
% 15.80/2.46
% 15.80/2.46 % SZS status Theorem for theBenchmark
% 15.80/2.46
% 15.80/2.46 % Proof 1 at 1.57 (+ 0.49) seconds.
% 15.80/2.46 % Length of proof is 69.
% 15.80/2.46 % Level of proof is 18.
% 15.80/2.46 % Maximum clause weight is 30.000.
% 15.80/2.46 % Given clauses 382.
% 15.80/2.46
% 15.80/2.46 % SZS output start CNFRefutation for theBenchmark
% See solution above
%------------------------------------------------------------------------------