%------------------------------------------------------------------------------
% File : Drodi---4.1.1
% Problem : REL013+1 : TPTP v9.3.1. Released v4.0.0.
% Transfm : none
% Format : tptp:raw
% Command : drodi -timeout(300) /export/starexec/sandbox2/benchmark/theBenchmark.p
% Computer : n002.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:03:15 PM UTC 2026
% Result : Theorem 8.06s 1.50s
% Output : CNFRefutation 7.19s
% Verified :
% SZS Type : Refutation
% Derivation depth : 28
% Number of leaves : 15
% Syntax : Number of formulae : 128 ( 113 unt; 2 def)
% Number of atoms : 143 ( 128 equ)
% Maximal formula atoms : 2 ( 1 avg)
% Number of connectives : 30 ( 15 ~; 11 |; 2 &)
% ( 2 <=>; 0 =>; 0 <=; 0 <~>)
% Maximal formula depth : 4 ( 2 avg)
% Maximal term depth : 5 ( 2 avg)
% Number of predicates : 4 ( 2 usr; 3 prp; 0-2 aty)
% Number of functors : 10 ( 10 usr; 5 con; 0-2 aty)
% Number of variables : 161 ( 158 !; 3 ?)
% Comments :
%------------------------------------------------------------------------------
fof(f1,axiom,
! [X0,X1] : join(X0,X1) = join(X1,X0),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p') ).
fof(f2,axiom,
! [X0,X1,X2] : join(X0,join(X1,X2)) = join(join(X0,X1),X2),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p') ).
fof(f3,axiom,
! [X0,X1] : X0 = join(complement(join(complement(X0),complement(X1))),complement(join(complement(X0),X1))),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p') ).
fof(f4,axiom,
! [X0,X1] : meet(X0,X1) = complement(join(complement(X0),complement(X1))),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p') ).
fof(f6,axiom,
! [X0] : composition(X0,one) = X0,
file('/export/starexec/sandbox2/benchmark/theBenchmark.p') ).
fof(f7,axiom,
! [X0,X1,X2] : composition(join(X0,X1),X2) = join(composition(X0,X2),composition(X1,X2)),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p') ).
fof(f8,axiom,
! [X0] : converse(converse(X0)) = X0,
file('/export/starexec/sandbox2/benchmark/theBenchmark.p') ).
fof(f9,axiom,
! [X0,X1] : converse(join(X0,X1)) = join(converse(X0),converse(X1)),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p') ).
fof(f10,axiom,
! [X0,X1] : converse(composition(X0,X1)) = composition(converse(X1),converse(X0)),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p') ).
fof(f11,axiom,
! [X0,X1] : join(composition(converse(X0),complement(composition(X0,X1))),complement(X1)) = complement(X1),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p') ).
fof(f12,axiom,
! [X0] : top = join(X0,complement(X0)),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p') ).
fof(f13,axiom,
! [X0] : zero = meet(X0,complement(X0)),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p') ).
fof(f14,conjecture,
! [X0] :
( composition(zero,X0) = zero
& composition(X0,zero) = zero ),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p') ).
fof(f15,negated_conjecture,
~ ! [X0] :
( composition(zero,X0) = zero
& composition(X0,zero) = zero ),
inference(negated_conjecture,[status(cth)],[f14]) ).
fof(f16,plain,
! [X0,X1] : join(X0,X1) = join(X1,X0),
inference(cnf_transformation,[status(thm)],[f1]) ).
fof(f17,plain,
! [X0,X1,X2] : join(X0,join(X1,X2)) = join(join(X0,X1),X2),
inference(cnf_transformation,[status(thm)],[f2]) ).
fof(f18,plain,
! [X0,X1] : X0 = join(complement(join(complement(X0),complement(X1))),complement(join(complement(X0),X1))),
inference(cnf_transformation,[status(thm)],[f3]) ).
fof(f19,plain,
! [X0,X1] : meet(X0,X1) = complement(join(complement(X0),complement(X1))),
inference(cnf_transformation,[status(thm)],[f4]) ).
fof(f21,plain,
! [X0] : composition(X0,one) = X0,
inference(cnf_transformation,[status(thm)],[f6]) ).
fof(f22,plain,
! [X0,X1,X2] : composition(join(X0,X1),X2) = join(composition(X0,X2),composition(X1,X2)),
inference(cnf_transformation,[status(thm)],[f7]) ).
fof(f23,plain,
! [X0] : converse(converse(X0)) = X0,
inference(cnf_transformation,[status(thm)],[f8]) ).
fof(f24,plain,
! [X0,X1] : converse(join(X0,X1)) = join(converse(X0),converse(X1)),
inference(cnf_transformation,[status(thm)],[f9]) ).
fof(f25,plain,
! [X0,X1] : converse(composition(X0,X1)) = composition(converse(X1),converse(X0)),
inference(cnf_transformation,[status(thm)],[f10]) ).
fof(f26,plain,
! [X0,X1] : join(composition(converse(X0),complement(composition(X0,X1))),complement(X1)) = complement(X1),
inference(cnf_transformation,[status(thm)],[f11]) ).
fof(f27,plain,
! [X0] : top = join(X0,complement(X0)),
inference(cnf_transformation,[status(thm)],[f12]) ).
fof(f28,plain,
! [X0] : zero = meet(X0,complement(X0)),
inference(cnf_transformation,[status(thm)],[f13]) ).
fof(f29,plain,
? [X0] :
( composition(zero,X0) != zero
| composition(X0,zero) != zero ),
inference(pre_NNF_transformation,[status(thm)],[f15]) ).
fof(f30,plain,
( ? [X0] : composition(zero,X0) != zero
| ? [X0] : composition(X0,zero) != zero ),
inference(miniscoping,[status(thm)],[f29]) ).
fof(f31,plain,
( composition(zero,sK1_skl) != zero
| composition(sK0_skl,zero) != zero ),
inference(skolemize,[status(esa),new_symbols(skolem,[sK0_skl,sK1_skl]),skolemize(X0,sK0_skl),skolemize(X0,sK1_skl)],[f30]) ).
fof(f32,plain,
( composition(zero,sK1_skl) != zero
| composition(sK0_skl,zero) != zero ),
inference(cnf_transformation,[status(thm)],[f31]) ).
fof(f33,definition,
( sQ0_spl
<=> composition(sK0_skl,zero) = zero ),
introduced(definition,[new_symbols(definition,[sQ0_spl])],[split_symbol_definition]) ).
fof(f35,plain,
( sQ0_spl
| composition(sK0_skl,zero) != zero ),
inference(component_clause,[status(thm)],[f33]) ).
fof(f36,definition,
( sQ1_spl
<=> composition(zero,sK1_skl) = zero ),
introduced(definition,[new_symbols(definition,[sQ1_spl])],[split_symbol_definition]) ).
fof(f38,plain,
( sQ1_spl
| composition(zero,sK1_skl) != zero ),
inference(component_clause,[status(thm)],[f36]) ).
fof(f39,plain,
( ~ sQ1_spl
| ~ sQ0_spl ),
inference(split_clause,[status(thm)],[f32,f33,f36]) ).
fof(f40,plain,
! [X0,X1] : X0 = join(complement(join(complement(X0),X1)),complement(join(complement(X0),complement(X1)))),
inference(forward_demodulation,[status(thm)],[f16,f18]) ).
fof(f41,plain,
! [X0,X1] : X0 = join(complement(join(complement(X0),X1)),meet(X0,X1)),
inference(backward_demodulation,[status(thm)],[f19,f40]) ).
fof(f42,plain,
! [X0,X1] : join(complement(X0),composition(converse(X1),complement(composition(X1,X0)))) = complement(X0),
inference(forward_demodulation,[status(thm)],[f16,f26]) ).
fof(f43,plain,
! [X0,X1] : X0 = join(meet(X0,X1),complement(join(complement(X0),X1))),
inference(forward_demodulation,[status(thm)],[f16,f41]) ).
fof(f50,plain,
! [X0,X1,X2] : join(X0,join(X1,X2)) = join(X2,join(X0,X1)),
inference(paramodulation,[status(thm)],[f16,f17]) ).
fof(f53,plain,
! [X0,X1] : join(X0,join(complement(X0),X1)) = join(top,X1),
inference(paramodulation,[status(thm)],[f27,f17]) ).
fof(f54,plain,
! [X0,X1,X2] : join(X0,join(X1,X2)) = join(join(X1,X0),X2),
inference(paramodulation,[status(thm)],[f16,f17]) ).
fof(f61,plain,
! [X0,X1,X2] : join(X0,join(X1,X2)) = join(X1,join(X0,X2)),
inference(forward_demodulation,[status(thm)],[f17,f54]) ).
fof(f63,plain,
! [X0] : meet(X0,complement(X0)) = complement(top),
inference(paramodulation,[status(thm)],[f27,f19]) ).
fof(f64,plain,
! [X0,X1] : meet(X0,X1) = complement(join(complement(X1),complement(X0))),
inference(paramodulation,[status(thm)],[f16,f19]) ).
fof(f70,plain,
zero = complement(top),
inference(forward_demodulation,[status(thm)],[f28,f63]) ).
fof(f71,plain,
! [X0,X1] : meet(X0,X1) = meet(X1,X0),
inference(forward_demodulation,[status(thm)],[f19,f64]) ).
fof(f94,plain,
! [X0,X1] : converse(join(converse(X0),X1)) = join(X0,converse(X1)),
inference(paramodulation,[status(thm)],[f23,f24]) ).
fof(f95,plain,
! [X0,X1] : converse(join(X0,converse(X1))) = join(converse(X0),X1),
inference(paramodulation,[status(thm)],[f23,f24]) ).
fof(f142,plain,
! [X0,X1] : converse(composition(converse(X0),X1)) = composition(converse(X1),X0),
inference(paramodulation,[status(thm)],[f23,f25]) ).
fof(f248,plain,
! [X0,X1,X2] : composition(join(X0,X1),X2) = join(composition(X1,X2),composition(X0,X2)),
inference(paramodulation,[status(thm)],[f16,f22]) ).
fof(f264,plain,
! [X0,X1,X2] : composition(join(X0,X1),X2) = composition(join(X1,X0),X2),
inference(forward_demodulation,[status(thm)],[f22,f248]) ).
fof(f292,plain,
! [X0,X1] : join(X0,top) = join(X1,join(X0,complement(X1))),
inference(paramodulation,[status(thm)],[f27,f61]) ).
fof(f493,plain,
! [X0] : converse(converse(X0)) = composition(converse(one),X0),
inference(paramodulation,[status(thm)],[f21,f142]) ).
fof(f512,plain,
! [X0] : X0 = composition(converse(one),X0),
inference(forward_demodulation,[status(thm)],[f23,f493]) ).
fof(f553,plain,
one = converse(one),
inference(paramodulation,[status(thm)],[f21,f512]) ).
fof(f554,plain,
! [X0] : join(complement(X0),complement(composition(one,X0))) = complement(X0),
inference(paramodulation,[status(thm)],[f512,f42]) ).
fof(f560,plain,
! [X0,X1] : composition(join(X0,converse(one)),X1) = join(composition(X0,X1),X1),
inference(paramodulation,[status(thm)],[f512,f22]) ).
fof(f563,plain,
! [X0] : X0 = composition(one,X0),
inference(backward_demodulation,[status(thm)],[f553,f512]) ).
fof(f567,plain,
! [X0,X1] : composition(join(X0,one),X1) = join(composition(X0,X1),X1),
inference(forward_demodulation,[status(thm)],[f553,f560]) ).
fof(f569,plain,
! [X0,X1] : composition(join(X0,one),X1) = join(X1,composition(X0,X1)),
inference(forward_demodulation,[status(thm)],[f16,f567]) ).
fof(f572,plain,
! [X0] : join(complement(X0),complement(X0)) = complement(X0),
inference(backward_demodulation,[status(thm)],[f563,f554]) ).
fof(f588,plain,
join(zero,complement(top)) = complement(top),
inference(paramodulation,[status(thm)],[f70,f572]) ).
fof(f589,plain,
! [X0,X1] : join(meet(X0,X1),complement(join(complement(X0),complement(X1)))) = complement(join(complement(X0),complement(X1))),
inference(paramodulation,[status(thm)],[f19,f572]) ).
fof(f592,plain,
! [X0] : meet(X0,X0) = complement(complement(X0)),
inference(paramodulation,[status(thm)],[f572,f19]) ).
fof(f599,plain,
join(zero,zero) = complement(top),
inference(forward_demodulation,[status(thm)],[f70,f588]) ).
fof(f600,plain,
join(zero,zero) = zero,
inference(forward_demodulation,[status(thm)],[f70,f599]) ).
fof(f601,plain,
! [X0,X1] : join(meet(X0,X1),meet(X0,X1)) = complement(join(complement(X0),complement(X1))),
inference(forward_demodulation,[status(thm)],[f19,f589]) ).
fof(f602,plain,
! [X0,X1] : join(meet(X0,X1),meet(X0,X1)) = meet(X0,X1),
inference(forward_demodulation,[status(thm)],[f19,f601]) ).
fof(f614,plain,
! [X0] : join(zero,join(zero,X0)) = join(X0,zero),
inference(paramodulation,[status(thm)],[f600,f50]) ).
fof(f634,plain,
! [X0] : X0 = join(complement(complement(X0)),complement(join(complement(X0),X0))),
inference(paramodulation,[status(thm)],[f592,f43]) ).
fof(f637,plain,
! [X0,X1] : X0 = join(meet(X0,complement(X1)),meet(X0,X1)),
inference(paramodulation,[status(thm)],[f19,f43]) ).
fof(f645,plain,
! [X0] : X0 = join(meet(X0,complement(complement(X0))),complement(top)),
inference(paramodulation,[status(thm)],[f27,f43]) ).
fof(f658,plain,
! [X0] : X0 = join(complement(complement(X0)),complement(join(X0,complement(X0)))),
inference(forward_demodulation,[status(thm)],[f16,f634]) ).
fof(f659,plain,
! [X0] : X0 = join(complement(complement(X0)),complement(top)),
inference(forward_demodulation,[status(thm)],[f27,f658]) ).
fof(f660,plain,
! [X0] : X0 = join(complement(top),complement(complement(X0))),
inference(forward_demodulation,[status(thm)],[f16,f659]) ).
fof(f661,plain,
! [X0] : X0 = join(zero,complement(complement(X0))),
inference(forward_demodulation,[status(thm)],[f70,f660]) ).
fof(f662,plain,
! [X0,X1] : X0 = join(meet(X0,X1),meet(X0,complement(X1))),
inference(forward_demodulation,[status(thm)],[f16,f637]) ).
fof(f669,plain,
! [X0] : X0 = join(complement(top),meet(X0,complement(complement(X0)))),
inference(forward_demodulation,[status(thm)],[f16,f645]) ).
fof(f670,plain,
! [X0] : X0 = join(zero,meet(X0,complement(complement(X0)))),
inference(forward_demodulation,[status(thm)],[f70,f669]) ).
fof(f740,plain,
! [X0,X1] : X0 = join(meet(X0,X1),meet(complement(X1),X0)),
inference(paramodulation,[status(thm)],[f71,f662]) ).
fof(f766,plain,
! [X0] : join(X0,complement(X0)) = join(top,complement(X0)),
inference(paramodulation,[status(thm)],[f572,f53]) ).
fof(f774,plain,
! [X0] : join(X0,top) = join(top,complement(complement(X0))),
inference(paramodulation,[status(thm)],[f27,f53]) ).
fof(f775,plain,
! [X0,X1] : join(X0,join(X1,complement(X0))) = join(top,X1),
inference(paramodulation,[status(thm)],[f16,f53]) ).
fof(f793,plain,
! [X0] : top = join(top,complement(X0)),
inference(forward_demodulation,[status(thm)],[f27,f766]) ).
fof(f804,plain,
! [X0] : join(X0,top) = top,
inference(forward_demodulation,[status(thm)],[f793,f774]) ).
fof(f805,plain,
! [X0] : join(X0,top) = join(top,X0),
inference(forward_demodulation,[status(thm)],[f292,f775]) ).
fof(f815,plain,
! [X0] : top = join(top,X0),
inference(forward_demodulation,[status(thm)],[f804,f805]) ).
fof(f866,plain,
! [X0] : X0 = join(meet(X0,top),complement(top)),
inference(paramodulation,[status(thm)],[f804,f43]) ).
fof(f879,plain,
! [X0] : X0 = join(complement(top),meet(X0,top)),
inference(forward_demodulation,[status(thm)],[f16,f866]) ).
fof(f880,plain,
! [X0] : X0 = join(zero,meet(X0,top)),
inference(forward_demodulation,[status(thm)],[f70,f879]) ).
fof(f935,plain,
! [X0] : X0 = join(zero,meet(top,X0)),
inference(paramodulation,[status(thm)],[f71,f880]) ).
fof(f1150,plain,
! [X0] : complement(complement(X0)) = join(meet(complement(complement(X0)),X0),zero),
inference(paramodulation,[status(thm)],[f28,f740]) ).
fof(f1169,plain,
! [X0] : complement(complement(X0)) = join(zero,meet(complement(complement(X0)),X0)),
inference(forward_demodulation,[status(thm)],[f16,f1150]) ).
fof(f1170,plain,
! [X0] : complement(complement(X0)) = join(zero,meet(X0,complement(complement(X0)))),
inference(forward_demodulation,[status(thm)],[f71,f1169]) ).
fof(f1172,plain,
! [X0] : X0 = join(zero,X0),
inference(backward_demodulation,[status(thm)],[f1184,f661]) ).
fof(f1184,plain,
! [X0] : complement(complement(X0)) = X0,
inference(forward_demodulation,[status(thm)],[f670,f1170]) ).
fof(f1193,plain,
! [X0] : X0 = meet(top,X0),
inference(backward_demodulation,[status(thm)],[f1172,f935]) ).
fof(f1207,plain,
! [X0] : join(zero,X0) = join(X0,zero),
inference(backward_demodulation,[status(thm)],[f1172,f614]) ).
fof(f1245,plain,
! [X0] : X0 = join(X0,zero),
inference(forward_demodulation,[status(thm)],[f1172,f1207]) ).
fof(f1394,plain,
! [X0] : converse(converse(X0)) = join(converse(zero),X0),
inference(paramodulation,[status(thm)],[f1172,f95]) ).
fof(f1414,plain,
! [X0] : X0 = join(converse(zero),X0),
inference(forward_demodulation,[status(thm)],[f23,f1394]) ).
fof(f1504,plain,
zero = converse(zero),
inference(paramodulation,[status(thm)],[f1245,f1414]) ).
fof(f2464,plain,
! [X0] : join(X0,meet(top,X0)) = meet(top,X0),
inference(paramodulation,[status(thm)],[f1193,f602]) ).
fof(f2485,plain,
! [X0] : join(X0,X0) = meet(top,X0),
inference(forward_demodulation,[status(thm)],[f1193,f2464]) ).
fof(f2488,plain,
! [X0] : join(X0,X0) = X0,
inference(forward_demodulation,[status(thm)],[f1193,f2485]) ).
fof(f2546,plain,
! [X0,X1] : join(X0,join(X1,X0)) = join(X1,X0),
inference(paramodulation,[status(thm)],[f2488,f61]) ).
fof(f3654,plain,
! [X0] : composition(join(X0,one),zero) = composition(X0,zero),
inference(paramodulation,[status(thm)],[f1172,f569]) ).
fof(f3655,plain,
! [X0] : composition(join(X0,one),top) = top,
inference(paramodulation,[status(thm)],[f815,f569]) ).
fof(f3750,plain,
! [X0] : join(complement(top),composition(converse(join(X0,one)),complement(top))) = complement(top),
inference(paramodulation,[status(thm)],[f3655,f42]) ).
fof(f3760,plain,
! [X0] : composition(join(converse(join(X0,one)),one),complement(top)) = complement(top),
inference(forward_demodulation,[status(thm)],[f569,f3750]) ).
fof(f3761,plain,
! [X0] : composition(join(one,converse(join(X0,one))),complement(top)) = complement(top),
inference(forward_demodulation,[status(thm)],[f264,f3760]) ).
fof(f3762,plain,
! [X0] : composition(join(one,converse(join(X0,one))),zero) = complement(top),
inference(forward_demodulation,[status(thm)],[f70,f3761]) ).
fof(f3763,plain,
! [X0] : composition(join(one,converse(join(X0,one))),zero) = zero,
inference(forward_demodulation,[status(thm)],[f70,f3762]) ).
fof(f6503,plain,
! [X0] : composition(join(one,join(X0,converse(one))),zero) = zero,
inference(paramodulation,[status(thm)],[f94,f3763]) ).
fof(f6527,plain,
! [X0] : composition(join(one,join(X0,one)),zero) = zero,
inference(forward_demodulation,[status(thm)],[f553,f6503]) ).
fof(f6528,plain,
! [X0] : composition(join(X0,one),zero) = zero,
inference(forward_demodulation,[status(thm)],[f2546,f6527]) ).
fof(f6530,plain,
( sQ0_spl
| zero != zero ),
inference(backward_demodulation,[status(thm)],[f6540,f35]) ).
fof(f6540,plain,
! [X0] : composition(X0,zero) = zero,
inference(forward_demodulation,[status(thm)],[f3654,f6528]) ).
fof(f6582,plain,
( sQ0_spl
| $false ),
inference(trivial_equality_resolution,[status(thm)],[f6530]) ).
fof(f6583,plain,
sQ0_spl,
inference(contradiction_clause,[status(thm)],[f6582]) ).
fof(f6597,plain,
! [X0] : converse(zero) = composition(converse(zero),X0),
inference(paramodulation,[status(thm)],[f6540,f142]) ).
fof(f6616,plain,
! [X0] : zero = composition(converse(zero),X0),
inference(forward_demodulation,[status(thm)],[f1504,f6597]) ).
fof(f6617,plain,
( sQ1_spl
| zero != zero ),
inference(backward_demodulation,[status(thm)],[f6621,f38]) ).
fof(f6621,plain,
! [X0] : zero = composition(zero,X0),
inference(forward_demodulation,[status(thm)],[f1504,f6616]) ).
fof(f6649,plain,
( sQ1_spl
| $false ),
inference(trivial_equality_resolution,[status(thm)],[f6617]) ).
fof(f6650,plain,
sQ1_spl,
inference(contradiction_clause,[status(thm)],[f6649]) ).
fof(f6651,plain,
$false,
inference(sat_refutation,[status(thm)],[f39,f6583,f6650]) ).
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.00/0.03 % Problem : REL013+1 : TPTP v9.3.1. Released v4.0.0.
% 0.00/0.04 % Command : drodi -timeout(300) /export/starexec/sandbox2/benchmark/theBenchmark.p
% 0.08/0.35 % Computer : n002.cluster.edu
% 0.08/0.35 % Model : x86_64 x86_64
% 0.08/0.35 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.08/0.35 % Memory : 8046.5625MB
% 0.08/0.35 % OS : Linux 6.8.0-71-generic
% 0.08/0.35 % CPULimit : 300
% 0.08/0.35 % WCLimit : 300
% 0.08/0.35 % DateTime : Mon Sep 21 04:01:16 UTC 2026
% 0.08/0.35 % CPUTime :
% 0.08/0.36 % Drodi V4.1.1
% 8.06/1.50 % Refutation found
% 8.06/1.50 % SZS status Theorem for theBenchmark: Theorem is valid
% 8.06/1.50 % SZS output start CNFRefutation for theBenchmark
% See solution above
% 7.19/1.55 % Elapsed time: 1.181169 seconds
% 7.19/1.55 % CPU time: 8.906885 seconds
% 7.19/1.55 % Total memory used: 137.686 MB
% 7.19/1.55 % Net memory used: 135.413 MB
%------------------------------------------------------------------------------