%------------------------------------------------------------------------------
% File : Waldmeister---710
% Problem : REL015-1 : TPTP v8.1.0. Released v4.0.0.
% Transfm : none
% Format : tptp:raw
% Command : woody %s
% Computer : n019.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 : Mon Jul 18 20:09:44 EDT 2022
% Result : Unsatisfiable 0.55s 0.96s
% Output : CNFRefutation 0.55s
% Verified :
% SZS Type : -
% Comments :
%------------------------------------------------------------------------------
%----WARNING: Could not form TPTP format derivation
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.07/0.12 % Problem : REL015-1 : TPTP v8.1.0. Released v4.0.0.
% 0.07/0.12 % Command : woody %s
% 0.12/0.33 % Computer : n019.cluster.edu
% 0.12/0.33 % Model : x86_64 x86_64
% 0.12/0.33 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.12/0.33 % Memory : 8042.1875MB
% 0.12/0.33 % OS : Linux 3.10.0-693.el7.x86_64
% 0.12/0.33 % CPULimit : 300
% 0.12/0.33 % WCLimit : 600
% 0.12/0.33 % DateTime : Fri Jul 8 10:41:38 EDT 2022
% 0.12/0.34 % CPUTime :
% 0.55/0.95 ********************************************************************************
% 0.55/0.95 * W A L D M E I S T E R \| \ / \|/ *
% 0.55/0.95 * |/ | \/ | *
% 0.55/0.95 * (C) 1994-2010 A. Buch and Th. Hillenbrand, \ / \ / *
% 0.55/0.95 * A. Jaeger and B. Loechner | | *
% 0.55/0.95 * <waldmeister@informatik.uni-kl.de> | *
% 0.55/0.95 ********************************************************************************
% 0.55/0.95
% 0.55/0.95
% 0.55/0.95 Goals:
% 0.55/0.95 ------
% 0.55/0.95
% 0.55/0.95 ( 1) composition(top,top) ?=? top
% 0.55/0.95
% 0.55/0.95 Detected structure: Orkus
% 0.55/0.95 ********************************************************************************
% 0.55/0.95 ****************************** COMPLETION - PROOF ******************************
% 0.55/0.95 ********************************************************************************
% 0.55/0.95
% 0.55/0.96 joined goal: 1 composition(top,top) ?= top to top
% 0.55/0.96 goal joined
% 0.55/0.96 % SZS status Unsatisfiable
% 0.55/0.96 #START OF PROOF
% 0.55/0.96 % SZS output start CNFRefutation
% 0.55/0.96 cnf('0.2.0.0',axiom,
% 0.55/0.96 ( X1 = composition(X1,one) ),
% 0.55/0.96 file('/tmp/WALDMEISTER_30096_n019')).
% 0.55/0.96 cnf('0.2.1.0',plain,
% 0.55/0.96 ( X1 = composition(X1,one) ),
% 0.55/0.96 inference(weigh,[status(thm)],['0.2.0.0']),
% 0.55/0.96 [weight('<1,0,0,[0,0,0,2]>')]).
% 0.55/0.96 cnf('0.2.2.0',plain,
% 0.55/0.96 ( composition(X1,one) = X1 ),
% 0.55/0.96 inference(orient,[status(thm)],['0.2.1.0',theory(equality)]),
% 0.55/0.96 [x,rule_2]).
% 0.55/0.96 cnf('0.3.0.0',axiom,
% 0.55/0.96 ( X1 = converse(converse(X1)) ),
% 0.55/0.96 file('/tmp/WALDMEISTER_30096_n019')).
% 0.55/0.96 cnf('0.3.1.0',plain,
% 0.55/0.96 ( X1 = converse(converse(X1)) ),
% 0.55/0.96 inference(weigh,[status(thm)],['0.3.0.0']),
% 0.55/0.96 [weight('<2,0,0,[0,0,0,3]>')]).
% 0.55/0.96 cnf('0.3.2.0',plain,
% 0.55/0.96 ( converse(converse(X1)) = X1 ),
% 0.55/0.96 inference(orient,[status(thm)],['0.3.1.0',theory(equality)]),
% 0.55/0.96 [x,rule_3]).
% 0.55/0.96 cnf('0.4.0.0',axiom,
% 0.55/0.96 ( join(X1,X2) = join(X2,X1) ),
% 0.55/0.96 file('/tmp/WALDMEISTER_30096_n019')).
% 0.55/0.96 cnf('0.4.1.0',plain,
% 0.55/0.96 ( join(X1,X2) = join(X2,X1) ),
% 0.55/0.96 inference(weigh,[status(thm)],['0.4.0.0']),
% 0.55/0.96 [weight('<3,0,0,[0,0,0,4]>')]).
% 0.55/0.96 cnf('0.4.2.0',plain,
% 0.55/0.96 ( join(X1,X2) = join(X2,X1) ),
% 0.55/0.96 inference(activate,[status(thm)],['0.4.1.0']),
% 0.55/0.96 [equation_1]).
% 0.55/0.96 cnf('0.5.0.0',axiom,
% 0.55/0.96 ( join(X1,join(X2,X3)) = join(join(X1,X2),X3) ),
% 0.55/0.96 file('/tmp/WALDMEISTER_30096_n019')).
% 0.55/0.96 cnf('0.5.1.0',plain,
% 0.55/0.96 ( join(X1,join(X2,X3)) = join(join(X1,X2),X3) ),
% 0.55/0.96 inference(weigh,[status(thm)],['0.5.0.0']),
% 0.55/0.96 [weight('<4,0,0,[0,0,0,5]>')]).
% 0.55/0.96 cnf('0.5.2.0',plain,
% 0.55/0.96 ( join(join(X1,X2),X3) = join(X1,join(X2,X3)) ),
% 0.55/0.96 inference(orient,[status(thm)],['0.5.1.0',theory(equality)]),
% 0.55/0.96 [x,rule_4]).
% 0.55/0.96 cnf('0.6.0.0',axiom,
% 0.55/0.96 ( join(X1,complement(X1)) = top ),
% 0.55/0.96 file('/tmp/WALDMEISTER_30096_n019')).
% 0.55/0.96 cnf('0.6.1.0',plain,
% 0.55/0.96 ( join(X1,complement(X1)) = top ),
% 0.55/0.96 inference(weigh,[status(thm)],['0.6.0.0']),
% 0.55/0.96 [weight('<5,0,0,[0,0,0,6]>')]).
% 0.55/0.96 cnf('0.6.2.0',plain,
% 0.55/0.96 ( join(X1,complement(X1)) = top ),
% 0.55/0.96 inference(orient,[status(thm)],['0.6.1.0',theory(equality)]),
% 0.55/0.96 [u,rule_5]).
% 0.55/0.96 cnf('0.7.0.0',axiom,
% 0.55/0.96 ( join(composition(X1,X2),composition(X3,X2)) = composition(join(X1,X3),X2) ),
% 0.55/0.96 file('/tmp/WALDMEISTER_30096_n019')).
% 0.55/0.96 cnf('0.7.1.0',plain,
% 0.55/0.96 ( join(composition(X1,X2),composition(X3,X2)) = composition(join(X1,X3),X2) ),
% 0.55/0.96 inference(weigh,[status(thm)],['0.7.0.0']),
% 0.55/0.96 [weight('<6,0,0,[0,0,0,7]>')]).
% 0.55/0.96 cnf('0.7.2.0',plain,
% 0.55/0.96 ( join(composition(X1,X2),composition(X3,X2)) = composition(join(X1,X3),X2) ),
% 0.55/0.96 inference(orient,[status(thm)],['0.7.1.0',theory(equality)]),
% 0.55/0.96 [u,rule_6]).
% 0.55/0.96 cnf('0.8.0.0',axiom,
% 0.55/0.96 ( join(composition(converse(X1),complement(composition(X1,X2))),complement(X2)) = complement(X2) ),
% 0.55/0.96 file('/tmp/WALDMEISTER_30096_n019')).
% 0.55/0.96 cnf('0.8.1.0',plain,
% 0.55/0.96 ( join(composition(converse(X1),complement(composition(X1,X2))),complement(X2)) = complement(X2) ),
% 0.55/0.96 inference(weigh,[status(thm)],['0.8.0.0']),
% 0.55/0.96 [weight('<7,0,0,[0,0,0,8]>')]).
% 0.55/0.96 cnf('0.8.1.1',plain,
% 0.55/0.96 ( join(complement(X2),composition(converse(X1),complement(composition(X1,X2)))) = complement(X2) ),
% 0.55/0.96 inference(reduction,[status(thm)],['0.8.1.0','0.4.2.0',theory(equality)]),
% 0.55/0.96 [pos('L','L')]).
% 0.55/0.96 cnf('0.8.2.0',plain,
% 0.55/0.96 ( join(complement(X1),composition(converse(X2),complement(composition(X2,X1)))) = complement(X1) ),
% 0.55/0.96 inference(orient,[status(thm)],['0.8.1.1',theory(equality)]),
% 0.55/0.96 [u,rule_7]).
% 0.55/0.96 cnf('0.12.0.0',axiom,
% 0.55/0.96 ( composition(converse(X1),converse(X2)) = converse(composition(X2,X1)) ),
% 0.55/0.96 file('/tmp/WALDMEISTER_30096_n019')).
% 0.55/0.96 cnf('0.12.1.0',plain,
% 0.55/0.96 ( composition(converse(X1),converse(X2)) = converse(composition(X2,X1)) ),
% 0.55/0.96 inference(weigh,[status(thm)],['0.12.0.0']),
% 0.55/0.96 [weight('<11,0,0,[0,0,0,12]>')]).
% 0.55/0.96 cnf('0.12.2.0',plain,
% 0.55/0.96 ( composition(converse(X1),converse(X2)) = converse(composition(X2,X1)) ),
% 0.55/0.96 inference(orient,[status(thm)],['0.12.1.0',theory(equality)]),
% 0.55/0.96 [u,rule_11]).
% 0.55/0.96 cnf('0.27.0.0',plain,
% 0.55/0.96 ( converse(composition(converse(X1),X2)) = composition(converse(X2),X1) ),
% 0.55/0.96 inference(cp,[status(thm)],['0.12.2.0','0.3.2.0',theory(equality)]),
% 0.55/0.96 [pos('L.2','L')]).
% 0.55/0.96 cnf('0.27.1.0',plain,
% 0.55/0.96 ( converse(composition(converse(X1),X2)) = composition(converse(X2),X1) ),
% 0.55/0.96 inference(weigh,[status(thm)],['0.27.0.0']),
% 0.55/0.96 [weight('<59,12,3,[1,0,0,3]>')]).
% 0.55/0.96 cnf('0.27.2.0',plain,
% 0.55/0.96 ( converse(composition(converse(X1),X2)) = composition(converse(X2),X1) ),
% 0.55/0.96 inference(orient,[status(thm)],['0.27.1.0',theory(equality)]),
% 0.55/0.96 [u,rule_25]).
% 0.55/0.96 cnf('0.28.0.0',plain,
% 0.55/0.96 ( composition(converse(one),X1) = converse(converse(X1)) ),
% 0.55/0.96 inference(cp,[status(thm)],['0.27.2.0','0.2.2.0',theory(equality)]),
% 0.55/0.96 [pos('L.1','L')]).
% 0.55/0.96 cnf('0.28.0.1',plain,
% 0.55/0.96 ( composition(converse(one),X1) = X1 ),
% 0.55/0.96 inference(reduction,[status(thm)],['0.28.0.0','0.3.2.0',theory(equality)]),
% 0.55/0.96 [pos('R','L')]).
% 0.55/0.96 cnf('0.28.1.0',plain,
% 0.55/0.96 ( composition(converse(one),X1) = X1 ),
% 0.55/0.96 inference(weigh,[status(thm)],['0.28.0.1']),
% 0.55/0.96 [weight('<29,27,2,[1,0,0,1]>')]).
% 0.55/0.96 cnf('0.28.2.0',plain,
% 0.55/0.96 ( composition(converse(one),X1) = X1 ),
% 0.55/0.96 inference(orient,[status(thm)],['0.28.1.0',theory(equality)]),
% 0.55/0.96 [u,rule_26]).
% 0.55/0.96 cnf('0.29.0.0',plain,
% 0.55/0.96 ( one = converse(one) ),
% 0.55/0.96 inference(cp,[status(thm)],['0.28.2.0','0.2.2.0',theory(equality)]),
% 0.55/0.96 [pos('L','L')]).
% 0.55/0.96 cnf('0.29.1.0',plain,
% 0.55/0.96 ( one = converse(one) ),
% 0.55/0.96 inference(weigh,[status(thm)],['0.29.0.0']),
% 0.55/0.96 [weight('<11,28,2,[1,0,0,0]>')]).
% 0.55/0.96 cnf('0.29.2.0',plain,
% 0.55/0.96 ( converse(one) = one ),
% 0.55/0.96 inference(orient,[status(thm)],['0.29.1.0',theory(equality)]),
% 0.55/0.96 [x,rule_27]).
% 0.55/0.96 cnf('0.30.0.0',plain,
% 0.55/0.96 ( composition(converse(one),X1) = X1 ),
% 0.55/0.96 inference(interreduction_right,[status(thm)],['0.28.2.0'])).
% 0.55/0.96 cnf('0.30.0.1',plain,
% 0.55/0.96 ( composition(one,X1) = X1 ),
% 0.55/0.96 inference(reduction,[status(thm)],['0.30.0.0','0.29.2.0',theory(equality)]),
% 0.55/0.96 [pos('L.1','L')]).
% 0.55/0.96 cnf('0.30.1.0',plain,
% 0.55/0.96 ( composition(one,X1) = X1 ),
% 0.55/0.96 inference(weigh,[status(thm)],['0.30.0.1']),
% 0.55/0.96 [weight('<19,28,29,[0,0,0,0]>')]).
% 0.55/0.96 cnf('0.30.2.0',plain,
% 0.55/0.96 ( composition(one,X1) = X1 ),
% 0.55/0.96 inference(orient,[status(thm)],['0.30.1.0',theory(equality)]),
% 0.55/0.96 [u,rule_28]).
% 0.55/0.96 cnf('0.33.0.0',plain,
% 0.55/0.96 ( complement(X1) = join(complement(X1),composition(converse(one),complement(X1))) ),
% 0.55/0.96 inference(cp,[status(thm)],['0.8.2.0','0.30.2.0',theory(equality)]),
% 0.55/0.96 [pos('L.2.2.1','L')]).
% 0.55/0.96 cnf('0.33.0.1',plain,
% 0.55/0.96 ( complement(X1) = join(complement(X1),composition(one,complement(X1))) ),
% 0.55/0.96 inference(reduction,[status(thm)],['0.33.0.0','0.29.2.0',theory(equality)]),
% 0.55/0.96 [pos('R.2.1','L')]).
% 0.55/0.96 cnf('0.33.0.2',plain,
% 0.55/0.96 ( complement(X1) = join(complement(X1),complement(X1)) ),
% 0.55/0.96 inference(reduction,[status(thm)],['0.33.0.1','0.30.2.0',theory(equality)]),
% 0.55/0.96 [pos('R.2','L')]).
% 0.55/0.96 cnf('0.33.1.0',plain,
% 0.55/0.96 ( complement(X1) = join(complement(X1),complement(X1)) ),
% 0.55/0.96 inference(weigh,[status(thm)],['0.33.0.2']),
% 0.55/0.96 [weight('<47,30,8,[0,0,0,7]>')]).
% 0.55/0.96 cnf('0.33.2.0',plain,
% 0.55/0.96 ( join(complement(X1),complement(X1)) = complement(X1) ),
% 0.55/0.96 inference(orient,[status(thm)],['0.33.1.0',theory(equality)]),
% 0.55/0.96 [x,rule_31]).
% 0.55/0.96 cnf('0.45.0.0',plain,
% 0.55/0.96 ( composition(join(one,X1),X2) = join(X2,composition(X1,X2)) ),
% 0.55/0.96 inference(cp,[status(thm)],['0.7.2.0','0.30.2.0',theory(equality)]),
% 0.55/0.96 [pos('L.1','L')]).
% 0.55/0.96 cnf('0.45.1.0',plain,
% 0.55/0.96 ( composition(join(one,X1),X2) = join(X2,composition(X1,X2)) ),
% 0.55/0.96 inference(weigh,[status(thm)],['0.45.0.0']),
% 0.55/0.96 [weight('<65,30,7,[0,0,0,1]>')]).
% 0.55/0.96 cnf('0.45.2.0',plain,
% 0.55/0.96 ( join(X1,composition(X2,X1)) = composition(join(one,X2),X1) ),
% 0.55/0.96 inference(orient,[status(thm)],['0.45.1.0',theory(equality)]),
% 0.55/0.96 [x,rule_42]).
% 0.55/0.96 cnf('0.46.0.0',plain,
% 0.55/0.96 ( join(X1,join(complement(X1),X2)) = join(top,X2) ),
% 0.55/0.96 inference(cp,[status(thm)],['0.5.2.0','0.6.2.0',theory(equality)]),
% 0.55/0.96 [pos('L.1','L')]).
% 0.55/0.96 cnf('0.46.1.0',plain,
% 0.55/0.96 ( join(X1,join(complement(X1),X2)) = join(top,X2) ),
% 0.55/0.96 inference(weigh,[status(thm)],['0.46.0.0']),
% 0.55/0.96 [weight('<69,6,5,[0,0,0,1]>')]).
% 0.55/0.96 cnf('0.46.2.0',plain,
% 0.55/0.96 ( join(X1,join(complement(X1),X2)) = join(top,X2) ),
% 0.55/0.96 inference(orient,[status(thm)],['0.46.1.0',theory(equality)]),
% 0.55/0.96 [u,rule_43]).
% 0.55/0.96 cnf('0.47.0.0',plain,
% 0.55/0.96 ( join(top,complement(X1)) = join(X1,complement(X1)) ),
% 0.55/0.96 inference(cp,[status(thm)],['0.46.2.0','0.33.2.0',theory(equality)]),
% 0.55/0.96 [pos('L.2','L')]).
% 0.55/0.96 cnf('0.47.0.1',plain,
% 0.55/0.96 ( join(top,complement(X1)) = top ),
% 0.55/0.96 inference(reduction,[status(thm)],['0.47.0.0','0.6.2.0',theory(equality)]),
% 0.55/0.96 [pos('R','L')]).
% 0.55/0.96 cnf('0.47.1.0',plain,
% 0.55/0.96 ( join(top,complement(X1)) = top ),
% 0.55/0.96 inference(weigh,[status(thm)],['0.47.0.1']),
% 0.55/0.96 [weight('<29,46,33,[1,0,0,2]>')]).
% 0.55/0.96 cnf('0.47.2.0',plain,
% 0.55/0.96 ( join(top,complement(X1)) = top ),
% 0.55/0.96 inference(orient,[status(thm)],['0.47.1.0',theory(equality)]),
% 0.55/0.96 [u,rule_44]).
% 0.55/0.96 cnf('0.50.0.0',plain,
% 0.55/0.96 ( join(top,complement(complement(X1))) = join(X1,top) ),
% 0.55/0.96 inference(cp,[status(thm)],['0.46.2.0','0.6.2.0',theory(equality)]),
% 0.55/0.96 [pos('L.2','L')]).
% 0.55/0.96 cnf('0.50.1.0',plain,
% 0.55/0.96 ( join(top,complement(complement(X1))) = join(X1,top) ),
% 0.55/0.96 inference(weigh,[status(thm)],['0.50.0.0']),
% 0.55/0.96 [weight('<53,46,6,[1,0,0,2]>')]).
% 0.55/0.96 cnf('0.50.1.1',plain,
% 0.55/0.96 ( top = join(X1,top) ),
% 0.55/0.96 inference(reduction,[status(thm)],['0.50.1.0','0.47.2.0',theory(equality)]),
% 0.55/0.96 [pos('L','L')]).
% 0.55/0.96 cnf('0.50.2.0',plain,
% 0.55/0.96 ( join(X1,top) = top ),
% 0.55/0.96 inference(orient,[status(thm)],['0.50.1.1',theory(equality)]),
% 0.55/0.96 [x,rule_47]).
% 0.55/0.96 cnf('0.51.0.0',plain,
% 0.55/0.96 ( top = join(top,X1) ),
% 0.55/0.96 inference(cp,[status(thm)],['0.50.2.0','0.4.2.0',theory(equality)]),
% 0.55/0.96 [pos('L','L')]).
% 0.55/0.96 cnf('0.51.1.0',plain,
% 0.55/0.96 ( top = join(top,X1) ),
% 0.55/0.96 inference(weigh,[status(thm)],['0.51.0.0']),
% 0.55/0.96 [weight('<19,50,4,[1,0,0,0]>')]).
% 0.55/0.96 cnf('0.51.2.0',plain,
% 0.55/0.96 ( join(top,X1) = top ),
% 0.55/0.96 inference(orient,[status(thm)],['0.51.1.0',theory(equality)]),
% 0.55/0.96 [x,rule_48]).
% 0.55/0.96 cnf('0.54.0.0',plain,
% 0.55/0.96 ( top = composition(join(one,X1),top) ),
% 0.55/0.96 inference(cp,[status(thm)],['0.51.2.0','0.45.2.0',theory(equality)]),
% 0.55/0.96 [pos('L','L')]).
% 0.55/0.96 cnf('0.54.1.0',plain,
% 0.55/0.96 ( top = composition(join(one,X1),top) ),
% 0.55/0.96 inference(weigh,[status(thm)],['0.54.0.0']),
% 0.55/0.96 [weight('<41,51,45,[1,0,0,0]>')]).
% 0.55/0.96 cnf('0.54.2.0',plain,
% 0.55/0.96 ( composition(join(one,X1),top) = top ),
% 0.55/0.96 inference(orient,[status(thm)],['0.54.1.0',theory(equality)]),
% 0.55/0.96 [x,rule_51]).
% 0.55/0.96 cnf('0.55.0.0',plain,
% 0.55/0.96 ( top = composition(top,top) ),
% 0.55/0.96 inference(cp,[status(thm)],['0.54.2.0','0.6.2.0',theory(equality)]),
% 0.55/0.96 [pos('L.1','L')]).
% 0.55/0.96 cnf('0.55.1.0',plain,
% 0.55/0.96 ( top = composition(top,top) ),
% 0.55/0.96 inference(weigh,[status(thm)],['0.55.0.0']),
% 0.55/0.96 [weight('<19,54,6,[1,0,0,1]>')]).
% 0.55/0.96 cnf('0.55.2.0',plain,
% 0.55/0.96 ( composition(top,top) = top ),
% 0.55/0.96 inference(orient,[status(thm)],['0.55.1.0',theory(equality)]),
% 0.55/0.96 [x,rule_52]).
% 0.55/0.96 cnf('1.0.0.0',conjecture,
% 0.55/0.96 ( composition(top,top) = top ),
% 0.55/0.96 file('/tmp/WALDMEISTER_30096_n019',conjecture_1)).
% 0.55/0.96 cnf('1.0.0.1',plain,
% 0.55/0.96 ( top = top ),
% 0.55/0.96 inference(reduction,[status(thm)],['1.0.0.0','0.55.2.0',theory(equality)]),
% 0.55/0.96 [pos('L','L')]).
% 0.55/0.96 cnf('1.0.0.2',plain,
% 0.55/0.96 ( $true ),
% 0.55/0.96 inference(trivial,[status(thm)],['1.0.0.1',theory(equality)]),
% 0.55/0.96 [conjecture_1]).
% 0.55/0.96
% 0.55/0.96 Proved Goals:
% 0.55/0.96 No. 1: composition(top,top) ?= top joined, current: top = top
% 0.55/0.96 1 goal was specified, which was proved.
% 0.55/0.96 % SZS output end CNFRefutation
% 0.55/0.96 #END OF PROOF
% 0.55/0.96
% 0.55/0.96 Problem WALDMEISTER_30096_n019
% 0.55/0.96 CPs.gen 355
% 0.55/0.96 CPs.reexp 0
% 0.55/0.96 Select 78
% 0.55/0.96 R 52
% 0.55/0.97 E 3
% 0.55/0.97 vsize 6.7M
% 0.55/0.97 rss 3.8M
% 0.55/0.97 process.time 0.012s
% 0.55/0.97 wallclock.time 0.012s
% 0.55/0.97 status S
% 0.55/0.97
% 0.55/0.97
% 0.55/0.97 Waldmeister states: Goal proved.
% 0.55/0.97 % SZS status Unsatisfiable
%------------------------------------------------------------------------------