%------------------------------------------------------------------------------
% File : FindProof---0.1
% Problem : GRP067-1 : TPTP v9.3.1. Bugfixed v2.3.0.
% Transfm : none
% Format : tptp:raw
% Command : run_findproof /export/starexec/sandbox/benchmark/theBenchmark.p 300
% Computer : n006.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 : Fri Sep 25 01:25:06 PM UTC 2026
% Result : Unsatisfiable 5.28s 6.15s
% Output : Proof 5.28s
% Verified :
% SZS Type : Refutation
% Derivation depth : 56
% Number of leaves : 6
% Syntax : Number of formulae : 128 ( 124 unt; 0 def)
% Number of atoms : 136 ( 135 equ)
% Maximal formula atoms : 3 ( 1 avg)
% Number of connectives : 36 ( 28 ~; 8 |; 0 &)
% ( 0 <=>; 0 =>; 0 <=; 0 <~>)
% Maximal formula depth : 4 ( 1 avg)
% Maximal term depth : 7 ( 2 avg)
% Number of predicates : 2 ( 0 usr; 1 prp; 0-2 aty)
% Number of functors : 12 ( 12 usr; 8 con; 0-4 aty)
% Number of variables : 205 ( 2 sgn 14 !; 0 ?)
% Comments :
%------------------------------------------------------------------------------
cnf(f2,axiom,
inverse(X) = divide(identity,X),
file('/export/starexec/sandbox/benchmark/theBenchmark.p',inverse) ).
fof(f2_nnf,plain,
! [X] : inverse(X) = divide(identity,X),
inference(nnf_transformation,[status(thm)],[f2]) ).
fof(f2_sk,plain,
! [X] : inverse(X) = divide(identity,X),
inference(skolemisation,[status(esa)],[f2_nnf]) ).
cnf(c2,plain,
inverse(X0) = divide(identity,X0),
inference(cnf_transformation,[status(esa)],[f2_sk]) ).
cnf(t1,plain,
divide(identity,X1) = inverse(X1),
inference(equality_encoding,[status(esa)],[c2]) ).
cnf(t15,plain,
divide(identity,X1) = inverse(X1),
inference(orient,[status(thm)],[t1]) ).
cnf(f3,axiom,
identity = divide(X,X),
file('/export/starexec/sandbox/benchmark/theBenchmark.p',identity) ).
fof(f3_nnf,plain,
! [X] : identity = divide(X,X),
inference(nnf_transformation,[status(thm)],[f3]) ).
fof(f3_sk,plain,
! [X] : identity = divide(X,X),
inference(skolemisation,[status(esa)],[f3_nnf]) ).
cnf(c3,plain,
identity = divide(X0,X0),
inference(cnf_transformation,[status(esa)],[f3_sk]) ).
cnf(t0,plain,
divide(X1,X1) = identity,
inference(equality_encoding,[status(esa)],[c3]) ).
cnf(t9,plain,
divide(X1,X1) = identity,
inference(orient,[status(thm)],[t0]) ).
cnf(t16,plain,
inverse(identity) = identity,
inference(cp,[status(thm)],[t15,t9]) ).
cnf(t19,plain,
inverse(identity) = identity,
inference(orient,[status(thm)],[t16]) ).
cnf(f0,axiom,
divide(divide(divide(X,X),divide(X,divide(Y,divide(divide(identity,X),Z)))),Z) = Y,
file('/export/starexec/sandbox/benchmark/theBenchmark.p',single_axiom) ).
fof(f0_nnf,plain,
! [X,Y,Z] : divide(divide(divide(X,X),divide(X,divide(Y,divide(divide(identity,X),Z)))),Z) = Y,
inference(nnf_transformation,[status(thm)],[f0]) ).
fof(f0_sk,plain,
! [X,Y,Z] : divide(divide(divide(X,X),divide(X,divide(Y,divide(divide(identity,X),Z)))),Z) = Y,
inference(skolemisation,[status(esa)],[f0_nnf]) ).
cnf(c0,plain,
divide(divide(divide(X0,X0),divide(X0,divide(X1,divide(divide(identity,X0),X2)))),X2) = X1,
inference(cnf_transformation,[status(esa)],[f0_sk]) ).
cnf(t4,plain,
divide(divide(divide(X1,X1),divide(X1,divide(X2,divide(divide(identity,X1),X3)))),X3) = X2,
inference(equality_encoding,[status(esa)],[c0]) ).
cnf(t6,plain,
divide(divide(divide(X1,X1),divide(X1,divide(X2,divide(divide(identity,X1),X3)))),X3) = X2,
inference(orient,[status(thm)],[t4]) ).
cnf(t342,plain,
divide(divide(identity,divide(X1,divide(X2,divide(divide(identity,X1),X3)))),X3) = X2,
inference(step,[status(thm)],[t6,t9]) ).
cnf(t10,plain,
divide(divide(identity,divide(X1,divide(X2,divide(divide(identity,X1),X3)))),X3) = X2,
inference(rw,[status(thm)],[t342]) ).
cnf(t347,plain,
divide(inverse(divide(X1,divide(X2,divide(divide(identity,X1),X3)))),X3) = X2,
inference(step,[status(thm)],[t10,t15]) ).
cnf(t348,plain,
divide(inverse(divide(X1,divide(X2,divide(inverse(X1),X3)))),X3) = X2,
inference(step,[status(thm)],[t347,t15]) ).
cnf(t49,plain,
divide(inverse(divide(X1,divide(X2,divide(inverse(X1),X3)))),X3) = X2,
inference(orient,[status(thm)],[t348]) ).
cnf(t53,plain,
X1 = divide(inverse(inverse(divide(X1,divide(inverse(identity),X2)))),X2),
inference(cp,[status(thm)],[t49,t15]) ).
cnf(f1,axiom,
multiply(X,Y) = divide(X,divide(identity,Y)),
file('/export/starexec/sandbox/benchmark/theBenchmark.p',multiply) ).
fof(f1_nnf,plain,
! [X,Y] : multiply(X,Y) = divide(X,divide(identity,Y)),
inference(nnf_transformation,[status(thm)],[f1]) ).
fof(f1_sk,plain,
! [X,Y] : multiply(X,Y) = divide(X,divide(identity,Y)),
inference(skolemisation,[status(esa)],[f1_nnf]) ).
cnf(c1,plain,
multiply(X0,X1) = divide(X0,divide(identity,X1)),
inference(cnf_transformation,[status(esa)],[f1_sk]) ).
cnf(t3,plain,
divide(X1,divide(identity,X2)) = multiply(X1,X2),
inference(equality_encoding,[status(esa)],[c1]) ).
cnf(t11,plain,
divide(X1,divide(identity,X2)) = multiply(X1,X2),
inference(orient,[status(thm)],[t3]) ).
cnf(t343,plain,
divide(X1,inverse(X2)) = multiply(X1,X2),
inference(step,[status(thm)],[t11,t15]) ).
cnf(t17,plain,
divide(X1,inverse(X2)) = multiply(X1,X2),
inference(rw,[status(thm)],[t343]) ).
cnf(t20,plain,
divide(X1,inverse(X2)) = multiply(X1,X2),
inference(orient,[status(thm)],[t17]) ).
cnf(t22,plain,
multiply(identity,X1) = inverse(inverse(X1)),
inference(cp,[status(thm)],[t20,t15]) ).
cnf(t24,plain,
inverse(inverse(X1)) = multiply(identity,X1),
inference(orient,[status(thm)],[t22]) ).
cnf(t349,plain,
X1 = divide(multiply(identity,divide(X1,divide(inverse(identity),X2))),X2),
inference(step,[status(thm)],[t53,t24]) ).
cnf(t350,plain,
X1 = divide(multiply(identity,divide(X1,divide(identity,X2))),X2),
inference(step,[status(thm)],[t349,t19]) ).
cnf(t351,plain,
X1 = divide(multiply(identity,divide(X1,inverse(X2))),X2),
inference(step,[status(thm)],[t350,t15]) ).
cnf(t352,plain,
X1 = divide(multiply(identity,multiply(X1,X2)),X2),
inference(step,[status(thm)],[t351,t20]) ).
cnf(t65,plain,
divide(multiply(identity,multiply(X1,X2)),X2) = X1,
inference(orient,[status(thm)],[t352]) ).
cnf(t54,plain,
divide(inverse(X1),X2) = divide(inverse(divide(X1,identity)),X2),
inference(cp,[status(thm)],[t49,t9]) ).
cnf(t23,plain,
multiply(X1,identity) = divide(X1,identity),
inference(cp,[status(thm)],[t20,t19]) ).
cnf(t29,plain,
divide(X1,identity) = multiply(X1,identity),
inference(orient,[status(thm)],[t23]) ).
cnf(t354,plain,
divide(inverse(X1),X2) = divide(inverse(multiply(X1,identity)),X2),
inference(step,[status(thm)],[t54,t29]) ).
cnf(t84,plain,
divide(inverse(multiply(X1,identity)),X2) = divide(inverse(X1),X2),
inference(orient,[status(thm)],[t354]) ).
cnf(t91,plain,
inverse(multiply(X1,identity)) = divide(inverse(divide(X2,divide(inverse(X1),divide(inverse(X2),X3)))),X3),
inference(cp,[status(thm)],[t49,t84]) ).
cnf(t355,plain,
inverse(multiply(X1,identity)) = inverse(X1),
inference(step,[status(thm)],[t91,t49]) ).
cnf(t93,plain,
inverse(multiply(X1,identity)) = inverse(X1),
inference(orient,[status(thm)],[t355]) ).
cnf(t94,plain,
multiply(X1,multiply(X2,identity)) = divide(X1,inverse(X2)),
inference(cp,[status(thm)],[t20,t93]) ).
cnf(t356,plain,
multiply(X1,multiply(X2,identity)) = multiply(X1,X2),
inference(step,[status(thm)],[t94,t20]) ).
cnf(t102,plain,
multiply(X1,multiply(X2,identity)) = multiply(X1,X2),
inference(orient,[status(thm)],[t356]) ).
cnf(t105,plain,
X1 = divide(multiply(identity,X1),identity),
inference(cp,[status(thm)],[t65,t102]) ).
cnf(t361,plain,
X1 = multiply(multiply(identity,X1),identity),
inference(step,[status(thm)],[t105,t29]) ).
cnf(t67,plain,
X1 = multiply(multiply(identity,multiply(X1,identity)),identity),
inference(cp,[status(thm)],[t65,t29]) ).
cnf(t70,plain,
multiply(multiply(identity,multiply(X1,identity)),identity) = X1,
inference(orient,[status(thm)],[t67]) ).
cnf(t71,plain,
multiply(identity,multiply(X1,identity)) = multiply(multiply(identity,X1),identity),
inference(cp,[status(thm)],[t70,t70]) ).
cnf(t73,plain,
multiply(multiply(identity,X1),identity) = multiply(identity,multiply(X1,identity)),
inference(orient,[status(thm)],[t71]) ).
cnf(t357,plain,
multiply(multiply(identity,X1),identity) = multiply(identity,X1),
inference(step,[status(thm)],[t73,t102]) ).
cnf(t103,plain,
multiply(multiply(identity,X1),identity) = multiply(identity,X1),
inference(orient,[status(thm)],[t357]) ).
cnf(t362,plain,
X1 = multiply(identity,X1),
inference(step,[status(thm)],[t361,t103]) ).
cnf(t108,plain,
multiply(identity,X1) = X1,
inference(orient,[status(thm)],[t362]) ).
cnf(t2,plain,
ifeq(X1,X1,X2,X3) = X2,
introduced(definition) ).
cnf(t8,plain,
ifeq(X1,X1,X2,X3) = X2,
inference(orient,[status(thm)],[t2]) ).
cnf(t369,plain,
divide(multiply(X1,X2),X2) = X1,
inference(step,[status(thm)],[t65,t108]) ).
cnf(t115,plain,
divide(multiply(X1,X2),X2) = X1,
inference(rw,[status(thm)],[t369]) ).
cnf(t122,plain,
divide(multiply(X1,X2),X2) = X1,
inference(orient,[status(thm)],[t115]) ).
cnf(t56,plain,
X1 = divide(inverse(divide(X2,divide(X1,identity))),inverse(X2)),
inference(cp,[status(thm)],[t49,t9]) ).
cnf(t377,plain,
X1 = multiply(inverse(divide(X2,divide(X1,identity))),X2),
inference(step,[status(thm)],[t56,t20]) ).
cnf(t111,plain,
multiply(X1,identity) = multiply(identity,X1),
inference(cp,[status(thm)],[t108,t102]) ).
cnf(t373,plain,
multiply(X1,identity) = X1,
inference(step,[status(thm)],[t111,t108]) ).
cnf(t117,plain,
multiply(X1,identity) = X1,
inference(orient,[status(thm)],[t373]) ).
cnf(t374,plain,
divide(X1,identity) = X1,
inference(step,[status(thm)],[t29,t117]) ).
cnf(t118,plain,
divide(X1,identity) = X1,
inference(orient,[status(thm)],[t374]) ).
cnf(t378,plain,
X1 = multiply(inverse(divide(X2,X1)),X2),
inference(step,[status(thm)],[t377,t118]) ).
cnf(t128,plain,
multiply(inverse(divide(X1,X2)),X1) = X2,
inference(orient,[status(thm)],[t378]) ).
cnf(t133,plain,
inverse(divide(X1,X2)) = divide(X2,X1),
inference(cp,[status(thm)],[t122,t128]) ).
cnf(t134,plain,
inverse(divide(X1,X2)) = divide(X2,X1),
inference(orient,[status(thm)],[t133]) ).
cnf(t135,plain,
divide(inverse(X1),X2) = inverse(multiply(X2,X1)),
inference(cp,[status(thm)],[t134,t20]) ).
cnf(t141,plain,
inverse(multiply(X1,X2)) = divide(inverse(X2),X1),
inference(orient,[status(thm)],[t135]) ).
cnf(t379,plain,
divide(divide(divide(X2,divide(inverse(X1),X3)),X1),X3) = X2,
inference(step,[status(thm)],[t49,t134]) ).
cnf(t140,plain,
divide(divide(divide(X2,divide(inverse(X1),X3)),X1),X3) = X2,
inference(rw,[status(thm)],[t379]) ).
cnf(t137,plain,
multiply(X1,divide(X2,X3)) = divide(X1,divide(X3,X2)),
inference(cp,[status(thm)],[t20,t134]) ).
cnf(t169,plain,
divide(X1,divide(X2,X3)) = multiply(X1,divide(X3,X2)),
inference(orient,[status(thm)],[t137]) ).
cnf(t382,plain,
divide(divide(multiply(X2,divide(X3,inverse(X1))),X1),X3) = X2,
inference(step,[status(thm)],[t140,t169]) ).
cnf(t383,plain,
divide(divide(multiply(X2,multiply(X3,X1)),X1),X3) = X2,
inference(step,[status(thm)],[t382,t20]) ).
cnf(t249,plain,
divide(divide(multiply(X1,multiply(X2,X3)),X3),X2) = X1,
inference(orient,[status(thm)],[t383]) ).
cnf(t123,plain,
X1 = multiply(multiply(X1,inverse(X2)),X2),
inference(cp,[status(thm)],[t122,t20]) ).
cnf(t26,plain,
multiply(X1,inverse(X2)) = divide(X1,multiply(identity,X2)),
inference(cp,[status(thm)],[t20,t24]) ).
cnf(t39,plain,
divide(X1,multiply(identity,X2)) = multiply(X1,inverse(X2)),
inference(orient,[status(thm)],[t26]) ).
cnf(t367,plain,
divide(X1,X2) = multiply(X1,inverse(X2)),
inference(step,[status(thm)],[t39,t108]) ).
cnf(t113,plain,
divide(X1,X2) = multiply(X1,inverse(X2)),
inference(rw,[status(thm)],[t367]) ).
cnf(t121,plain,
multiply(X1,inverse(X2)) = divide(X1,X2),
inference(orient,[status(thm)],[t113]) ).
cnf(t376,plain,
X1 = multiply(divide(X1,X2),X2),
inference(step,[status(thm)],[t123,t121]) ).
cnf(t126,plain,
multiply(divide(X1,X2),X2) = X1,
inference(orient,[status(thm)],[t376]) ).
cnf(t258,plain,
divide(X1,multiply(X2,X3)) = divide(divide(X1,X3),X2),
inference(cp,[status(thm)],[t249,t126]) ).
cnf(t282,plain,
divide(divide(X1,X2),X3) = divide(X1,multiply(X3,X2)),
inference(orient,[status(thm)],[t258]) ).
cnf(t294,plain,
divide(X1,multiply(X2,inverse(X3))) = divide(multiply(X1,X3),X2),
inference(cp,[status(thm)],[t282,t20]) ).
cnf(t387,plain,
divide(X1,divide(X2,X3)) = divide(multiply(X1,X3),X2),
inference(step,[status(thm)],[t294,t121]) ).
cnf(t388,plain,
multiply(X1,divide(X3,X2)) = divide(multiply(X1,X3),X2),
inference(step,[status(thm)],[t387,t169]) ).
cnf(t309,plain,
divide(multiply(X1,X2),X3) = multiply(X1,divide(X2,X3)),
inference(orient,[status(thm)],[t388]) ).
cnf(t314,plain,
multiply(X1,divide(X2,inverse(X3))) = multiply(multiply(X1,X2),X3),
inference(cp,[status(thm)],[t309,t20]) ).
cnf(t389,plain,
multiply(X1,multiply(X2,X3)) = multiply(multiply(X1,X2),X3),
inference(step,[status(thm)],[t314,t20]) ).
cnf(t330,plain,
multiply(multiply(X1,X2),X3) = multiply(X1,multiply(X2,X3)),
inference(orient,[status(thm)],[t389]) ).
cnf(t21,plain,
multiply(inverse(X1),X1) = identity,
inference(cp,[status(thm)],[t20,t9]) ).
cnf(t30,plain,
multiply(inverse(X1),X1) = identity,
inference(orient,[status(thm)],[t21]) ).
cnf(f4,negated_conjecture,
( multiply(multiply(a3,b3),c3) != multiply(a3,multiply(b3,c3))
| multiply(identity,a2) != a2
| multiply(inverse(a1),a1) != identity ),
file('/export/starexec/sandbox/benchmark/theBenchmark.p',prove_these_axioms) ).
fof(f4_nnf,plain,
( multiply(multiply(a3,b3),c3) != multiply(a3,multiply(b3,c3))
| multiply(identity,a2) != a2
| multiply(inverse(a1),a1) != identity ),
inference(nnf_transformation,[status(thm)],[f4]) ).
fof(f4_sk,plain,
( multiply(multiply(a3,b3),c3) != multiply(a3,multiply(b3,c3))
| multiply(identity,a2) != a2
| multiply(inverse(a1),a1) != identity ),
inference(skolemisation,[status(esa)],[f4_nnf]) ).
cnf(c4,plain,
( multiply(multiply(a3,b3),c3) != multiply(a3,multiply(b3,c3))
| multiply(identity,a2) != a2
| multiply(inverse(a1),a1) != identity ),
inference(cnf_transformation,[status(esa)],[f4_sk]) ).
cnf(goal_0,negated_conjecture,
true != false,
inference(equality_encoding,[status(esa)],[c4]) ).
cnf(g0_0,plain,
true != ifeq(multiply(inverse(a1),a1),identity,ifeq(multiply(identity,a2),a2,ifeq(multiply(multiply(a3,b3),c3),multiply(a3,multiply(b3,c3)),false,true),true),true),
inference(rw,[status(thm)],[goal_0]) ).
cnf(g0_1,plain,
true != ifeq(multiply(inverse(a1),a1),inverse(identity),ifeq(multiply(identity,a2),a2,ifeq(multiply(multiply(a3,b3),c3),multiply(a3,multiply(b3,c3)),false,true),true),true),
inference(rw,[status(thm)],[g0_0,t19]) ).
cnf(g0_2,plain,
true != ifeq(multiply(inverse(a1),a1),inverse(multiply(identity,identity)),ifeq(multiply(identity,a2),a2,ifeq(multiply(multiply(a3,b3),c3),multiply(a3,multiply(b3,c3)),false,true),true),true),
inference(rw,[status(thm)],[g0_1,t108]) ).
cnf(g0_3,plain,
true != ifeq(multiply(inverse(a1),a1),inverse(multiply(identity,identity)),ifeq(a2,a2,ifeq(multiply(multiply(a3,b3),c3),multiply(a3,multiply(b3,c3)),false,true),true),true),
inference(rw,[status(thm)],[g0_2,t108]) ).
cnf(g0_4,plain,
true != ifeq(multiply(inverse(a1),a1),inverse(multiply(identity,identity)),ifeq(multiply(multiply(a3,b3),c3),multiply(a3,multiply(b3,c3)),false,true),true),
inference(rw,[status(thm)],[g0_3,t8]) ).
cnf(g0_5,plain,
true != ifeq(multiply(inverse(a1),a1),divide(inverse(identity),identity),ifeq(multiply(multiply(a3,b3),c3),multiply(a3,multiply(b3,c3)),false,true),true),
inference(rw,[status(thm)],[g0_4,t141]) ).
cnf(g0_6,plain,
true != ifeq(multiply(inverse(a1),a1),divide(inverse(identity),identity),ifeq(multiply(multiply(a3,b3),c3),multiply(a3,multiply(b3,c3)),false,true),ifeq(multiply(multiply(a3,b3),c3),multiply(a3,multiply(b3,c3)),false,true)),
inference(rw,[status(thm)],[g0_5]) ).
cnf(g0_7,plain,
true != ifeq(multiply(inverse(a1),a1),divide(inverse(identity),identity),ifeq(multiply(multiply(a3,b3),c3),multiply(a3,multiply(b3,c3)),false,true),ifeq(multiply(a3,multiply(b3,c3)),multiply(a3,multiply(b3,c3)),false,true)),
inference(rw,[status(thm)],[g0_6,t330]) ).
cnf(g0_8,plain,
true != ifeq(multiply(inverse(a1),a1),divide(inverse(identity),identity),ifeq(multiply(multiply(a3,b3),c3),multiply(a3,multiply(b3,c3)),false,true),false),
inference(rw,[status(thm)],[g0_7,t8]) ).
cnf(g0_9,plain,
true != ifeq(multiply(inverse(a1),a1),divide(inverse(identity),identity),ifeq(multiply(a3,multiply(b3,c3)),multiply(a3,multiply(b3,c3)),false,true),false),
inference(rw,[status(thm)],[g0_8,t330]) ).
cnf(g0_10,plain,
true != ifeq(multiply(inverse(a1),a1),divide(inverse(identity),identity),false,false),
inference(rw,[status(thm)],[g0_9,t8]) ).
cnf(g0_11,plain,
true != ifeq(multiply(inverse(a1),a1),divide(identity,identity),false,false),
inference(rw,[status(thm)],[g0_10,t19]) ).
cnf(g0_12,plain,
true != ifeq(multiply(inverse(a1),a1),identity,false,false),
inference(rw,[status(thm)],[g0_11,t9]) ).
cnf(g0_13,plain,
true != ifeq(identity,identity,false,false),
inference(rw,[status(thm)],[g0_12,t30]) ).
cnf(g0_14,plain,
true != false,
inference(rw,[status(thm)],[g0_13,t8]) ).
cnf(contradiction_0,plain,
$false,
inference(trivial_inequality_removal,[status(thm)],[g0_14]) ).
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.00/0.03 % Problem : GRP067-1 : TPTP v9.3.1. Bugfixed v2.3.0.
% 0.00/0.04 % Command : run_findproof /export/starexec/sandbox/benchmark/theBenchmark.p 300
% 0.10/5.35 % Computer : n006.cluster.edu
% 0.10/5.35 % Model : x86_64 x86_64
% 0.10/5.35 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.10/5.35 % Memory : 8046.5625MB
% 0.10/5.35 % OS : Linux 6.8.0-71-generic
% 0.10/5.35 % CPULimit : 300
% 0.10/5.35 % WCLimit : 300
% 0.10/5.35 % DateTime : Wed Sep 23 13:26:32 UTC 2026
% 0.10/5.36 % CPUTime :
% 0.10/5.36 Running run_findproof /export/starexec/sandbox/benchmark/theBenchmark.p 300
% 5.28/6.15 % SZS status Unsatisfiable for /export/starexec/sandbox/benchmark/theBenchmark.p
% 5.28/6.15 % SZS output start Proof for /export/starexec/sandbox/benchmark/theBenchmark.p
% See solution above
%------------------------------------------------------------------------------