TSTP Solution File: GRP102-1 by SNARK---20120808r022
View Problem
- Process Solution
%------------------------------------------------------------------------------
% File : SNARK---20120808r022
% Problem : GRP102-1 : TPTP v8.1.0. Bugfixed v2.7.0.
% Transfm : none
% Format : tptp:raw
% Command : run-snark %s %d
% Computer : n026.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 : Sat Jul 16 11:36:09 EDT 2022
% Result : Unsatisfiable 0.57s 0.79s
% Output : Refutation 0.63s
% Verified :
% SZS Type : Refutation
% Derivation depth : 20
% Number of leaves : 5
% Syntax : Number of clauses : 66 ( 62 unt; 0 nHn; 12 RR)
% Number of literals : 75 ( 74 equ; 16 neg)
% Maximal clause size : 4 ( 1 avg)
% Maximal term depth : 9 ( 2 avg)
% Number of predicates : 2 ( 0 usr; 1 prp; 0-2 aty)
% Number of functors : 11 ( 11 usr; 8 con; 0-2 aty)
% Number of variables : 110 ( 0 sgn)
% Comments :
%------------------------------------------------------------------------------
cnf(single_axiom,axiom,
double_divide(double_divide(X,double_divide(double_divide(double_divide(Y,X),Z),double_divide(Y,identity))),double_divide(identity,identity)) = Z,
file('/export/starexec/sandbox/benchmark/theBenchmark.p',single_axiom) ).
cnf(multiply,axiom,
multiply(X,Y) = double_divide(double_divide(Y,X),identity),
file('/export/starexec/sandbox/benchmark/theBenchmark.p',multiply) ).
cnf(inverse,axiom,
inverse(X) = double_divide(X,identity),
file('/export/starexec/sandbox/benchmark/theBenchmark.p',inverse) ).
cnf(identity,axiom,
identity = double_divide(X,inverse(X)),
file('/export/starexec/sandbox/benchmark/theBenchmark.p',identity) ).
cnf(prove_these_axioms,negated_conjecture,
( multiply(inverse(a1),a1) != identity
| multiply(identity,a2) != a2
| multiply(multiply(a3,b3),c3) != multiply(a3,multiply(b3,c3))
| multiply(a4,b4) != multiply(b4,a4) ),
file('/export/starexec/sandbox/benchmark/theBenchmark.p',prove_these_axioms) ).
cnf(6,plain,
multiply(X,Y) = inverse(double_divide(Y,X)),
inference('REWRITE',[status(thm)],[multiply,inverse,theory(equality)]) ).
cnf(7,plain,
( inverse(identity) != identity
| inverse(inverse(a2)) != a2
| inverse(double_divide(c3,inverse(double_divide(b3,a3)))) != inverse(double_divide(inverse(double_divide(c3,b3)),a3))
| inverse(double_divide(b4,a4)) != inverse(double_divide(a4,b4)) ),
inference('REWRITE',[status(thm)],[prove_these_axioms,inverse,identity,6,theory(equality)]) ).
cnf(8,plain,
double_divide(double_divide(X,double_divide(double_divide(double_divide(Y,X),Z),inverse(Y))),inverse(identity)) = Z,
inference('REWRITE',[status(thm)],[single_axiom,inverse,theory(equality)]) ).
cnf(9,plain,
double_divide(double_divide(inverse(X),double_divide(double_divide(identity,Y),inverse(X))),inverse(identity)) = Y,
inference('PARAMODULATE',[status(thm)],[8,identity,theory(equality)]) ).
cnf(10,plain,
double_divide(double_divide(X,double_divide(identity,inverse(Y))),inverse(identity)) = inverse(double_divide(Y,X)),
inference('PARAMODULATE',[status(thm)],[8,identity,theory(equality)]) ).
cnf(13,plain,
double_divide(double_divide(X,Y),inverse(identity)) = double_divide(double_divide(double_divide(Z,double_divide(identity,X)),Y),inverse(Z)),
inference('PARAMODULATE',[status(thm)],[8,8,theory(equality)]) ).
cnf(15,plain,
double_divide(double_divide(inverse(identity),double_divide(double_divide(X,Y),inverse(double_divide(Z,double_divide(double_divide(double_divide(U,Z),X),inverse(U)))))),inverse(identity)) = Y,
inference('PARAMODULATE',[status(thm)],[8,8,theory(equality)]) ).
cnf(16,plain,
double_divide(inverse(inverse(double_divide(identity,X))),inverse(identity)) = X,
inference('REWRITE',[status(thm)],[inference('PARAMODULATE',[status(thm)],[9,identity,theory(equality)]),inverse,theory(equality)]) ).
cnf(17,plain,
double_divide(double_divide(inverse(X),double_divide(inverse(identity),inverse(X))),inverse(identity)) = identity,
inference('PARAMODULATE',[status(thm)],[9,inverse,theory(equality)]) ).
cnf(18,plain,
double_divide(double_divide(inverse(identity),X),inverse(identity)) = double_divide(double_divide(inverse(Y),X),inverse(Y)),
inference('REWRITE',[status(thm)],[inference('PARAMODULATE',[status(thm)],[9,8,theory(equality)]),inverse,theory(equality)]) ).
cnf(22,plain,
double_divide(inverse(inverse(inverse(identity))),inverse(identity)) = identity,
inference('PARAMODULATE',[status(thm)],[16,inverse,theory(equality)]) ).
cnf(26,plain,
double_divide(inverse(X),inverse(identity)) = inverse(double_divide(identity,X)),
inference('REWRITE',[status(thm)],[inference('PARAMODULATE',[status(thm)],[10,identity,theory(equality)]),inverse,theory(equality)]) ).
cnf(27,plain,
inverse(double_divide(identity,inverse(double_divide(identity,X)))) = X,
inference('REWRITE',[status(thm)],[16,26,theory(equality)]) ).
cnf(28,plain,
inverse(double_divide(identity,inverse(inverse(identity)))) = identity,
inference('REWRITE',[status(thm)],[22,26,theory(equality)]) ).
cnf(29,plain,
double_divide(double_divide(inverse(identity),inverse(inverse(X))),inverse(identity)) = double_divide(identity,inverse(X)),
inference('REWRITE',[status(thm)],[inference('PARAMODULATE',[status(thm)],[9,10,theory(equality)]),inverse,theory(equality)]) ).
cnf(30,plain,
double_divide(double_divide(X,inverse(double_divide(Y,double_divide(identity,X)))),inverse(identity)) = double_divide(identity,inverse(Y)),
inference('PARAMODULATE',[status(thm)],[8,10,theory(equality)]) ).
cnf(32,plain,
double_divide(double_divide(inverse(identity),double_divide(double_divide(inverse(double_divide(X,Y)),Z),inverse(double_divide(Y,double_divide(identity,inverse(X)))))),inverse(identity)) = Z,
inference('PARAMODULATE',[status(thm)],[8,10,theory(equality)]) ).
cnf(33,plain,
double_divide(double_divide(inverse(identity),double_divide(double_divide(inverse(double_divide(identity,X)),Y),inverse(inverse(X)))),inverse(identity)) = Y,
inference('PARAMODULATE',[status(thm)],[8,26,theory(equality)]) ).
cnf(36,plain,
double_divide(X,inverse(identity)) = inverse(double_divide(identity,double_divide(identity,inverse(double_divide(identity,X))))),
inference('PARAMODULATE',[status(thm)],[26,27,theory(equality)]) ).
cnf(43,plain,
double_divide(double_divide(X,double_divide(inverse(identity),X)),inverse(identity)) = identity,
inference('PARAMODULATE',[status(thm)],[17,27,theory(equality)]) ).
cnf(45,plain,
inverse(double_divide(identity,X)) = double_divide(inverse(identity),double_divide(identity,X)),
inference('REWRITE',[status(thm)],[inference('PARAMODULATE',[status(thm)],[8,43,theory(equality)]),26,inverse,theory(equality)]) ).
cnf(47,plain,
inverse(identity) = inverse(inverse(identity)),
inference('REWRITE',[status(thm)],[inference('PARAMODULATE',[status(thm)],[45,identity,theory(equality)]),inverse,theory(equality)]) ).
cnf(49,plain,
inverse(identity) = identity,
inference('REWRITE',[status(thm)],[28,identity,47,theory(equality)]) ).
cnf(50,plain,
( inverse(inverse(a2)) != a2
| inverse(double_divide(c3,inverse(double_divide(b3,a3)))) != inverse(double_divide(inverse(double_divide(c3,b3)),a3))
| inverse(double_divide(b4,a4)) != inverse(double_divide(a4,b4)) ),
inference('REWRITE',[status(thm)],[7,49,theory(equality)]) ).
cnf(51,plain,
inverse(double_divide(X,double_divide(double_divide(double_divide(Y,X),Z),inverse(Y)))) = Z,
inference('REWRITE',[status(thm)],[8,inverse,49,theory(equality)]) ).
cnf(52,plain,
inverse(double_divide(X,double_divide(identity,inverse(Y)))) = inverse(double_divide(Y,X)),
inference('REWRITE',[status(thm)],[10,inverse,49,theory(equality)]) ).
cnf(56,plain,
inverse(double_divide(X,Y)) = double_divide(double_divide(double_divide(Z,double_divide(identity,X)),Y),inverse(Z)),
inference('REWRITE',[status(thm)],[13,inverse,49,theory(equality)]) ).
cnf(58,plain,
inverse(double_divide(identity,double_divide(double_divide(X,Y),X))) = Y,
inference('REWRITE',[status(thm)],[15,inverse,51,49,theory(equality)]) ).
cnf(59,plain,
inverse(double_divide(identity,X)) = double_divide(double_divide(inverse(Y),X),inverse(Y)),
inference('REWRITE',[status(thm)],[18,inverse,49,theory(equality)]) ).
cnf(63,plain,
inverse(inverse(X)) = inverse(double_divide(identity,X)),
inference('REWRITE',[status(thm)],[26,inverse,49,theory(equality)]) ).
cnf(65,plain,
inverse(inverse(double_divide(double_divide(X,Y),X))) = Y,
inference('REWRITE',[status(thm)],[58,63,theory(equality)]) ).
cnf(66,plain,
inverse(inverse(inverse(inverse(X)))) = X,
inference('REWRITE',[status(thm)],[27,63,theory(equality)]) ).
cnf(68,plain,
inverse(inverse(X)) = double_divide(double_divide(inverse(Y),X),inverse(Y)),
inference('REWRITE',[status(thm)],[59,63,theory(equality)]) ).
cnf(69,plain,
X = double_divide(identity,inverse(X)),
inference('REWRITE',[status(thm)],[29,66,63,inverse,49,theory(equality)]) ).
cnf(71,plain,
inverse(double_divide(X,Y)) = inverse(double_divide(Y,X)),
inference('REWRITE',[status(thm)],[52,69,theory(equality)]) ).
cnf(72,plain,
( inverse(inverse(a2)) != a2
| inverse(double_divide(c3,inverse(double_divide(b3,a3)))) != inverse(double_divide(inverse(double_divide(c3,b3)),a3)) ),
inference('REWRITE',[status(thm)],[50,71,theory(equality)]) ).
cnf(73,plain,
inverse(double_divide(X,inverse(double_divide(Y,double_divide(identity,X))))) = Y,
inference('REWRITE',[status(thm)],[30,69,inverse,49,theory(equality)]) ).
cnf(75,plain,
inverse(inverse(double_divide(double_divide(inverse(double_divide(X,Y)),Z),inverse(double_divide(Y,X))))) = Z,
inference('REWRITE',[status(thm)],[32,63,inverse,69,49,theory(equality)]) ).
cnf(76,plain,
inverse(inverse(X)) = X,
inference('REWRITE',[status(thm)],[33,inverse,69,68,63,49,theory(equality)]) ).
cnf(78,plain,
double_divide(double_divide(inverse(double_divide(X,Y)),Z),inverse(double_divide(Y,X))) = Z,
inference('REWRITE',[status(thm)],[75,76,theory(equality)]) ).
cnf(79,plain,
double_divide(double_divide(X,Y),X) = Y,
inference('REWRITE',[status(thm)],[65,76,theory(equality)]) ).
cnf(80,plain,
X = inverse(double_divide(identity,X)),
inference('REWRITE',[status(thm)],[63,76,theory(equality)]) ).
cnf(82,plain,
inverse(double_divide(c3,inverse(double_divide(b3,a3)))) != inverse(double_divide(inverse(double_divide(c3,b3)),a3)),
inference('REWRITE',[status(thm)],[72,76,theory(equality)]) ).
cnf(84,plain,
inverse(X) = double_divide(identity,X),
inference('REWRITE',[status(thm)],[36,80,inverse,49,theory(equality)]) ).
cnf(86,plain,
inverse(double_divide(X,Y)) = double_divide(double_divide(double_divide(Z,inverse(X)),Y),inverse(Z)),
inference('REWRITE',[status(thm)],[56,84,theory(equality)]) ).
cnf(87,plain,
inverse(double_divide(X,inverse(double_divide(Y,inverse(X))))) = Y,
inference('REWRITE',[status(thm)],[73,84,theory(equality)]) ).
cnf(94,plain,
double_divide(X,double_divide(Y,X)) = Y,
inference('PARAMODULATE',[status(thm)],[79,79,theory(equality)]) ).
cnf(100,plain,
inverse(double_divide(c3,inverse(double_divide(b3,a3)))) != inverse(double_divide(inverse(double_divide(b3,c3)),a3)),
inference('PARAMODULATE',[status(thm)],[82,71,theory(equality)]) ).
cnf(106,plain,
inverse(double_divide(X,inverse(Y))) = double_divide(inverse(X),Y),
inference('PARAMODULATE',[status(thm)],[87,79,theory(equality)]) ).
cnf(111,plain,
double_divide(inverse(c3),double_divide(b3,a3)) != double_divide(double_divide(b3,c3),inverse(a3)),
inference('REWRITE',[status(thm)],[100,76,106,theory(equality)]) ).
cnf(112,plain,
inverse(double_divide(X,Y)) = double_divide(inverse(X),inverse(Y)),
inference('PARAMODULATE',[status(thm)],[106,76,theory(equality)]) ).
cnf(113,plain,
inverse(double_divide(inverse(X),Y)) = double_divide(inverse(Y),X),
inference('PARAMODULATE',[status(thm)],[71,106,theory(equality)]) ).
cnf(114,plain,
inverse(double_divide(inverse(X),Y)) = double_divide(X,inverse(Y)),
inference('PARAMODULATE',[status(thm)],[76,106,theory(equality)]) ).
cnf(135,plain,
inverse(double_divide(inverse(X),double_divide(Y,Z))) = double_divide(inverse(double_divide(Z,Y)),X),
inference('PARAMODULATE',[status(thm)],[113,71,theory(equality)]) ).
cnf(144,plain,
inverse(double_divide(inverse(X),double_divide(Y,Z))) = double_divide(X,inverse(double_divide(Z,Y))),
inference('PARAMODULATE',[status(thm)],[114,71,theory(equality)]) ).
cnf(212,plain,
double_divide(X,inverse(double_divide(Y,Z))) = double_divide(X,inverse(double_divide(Z,Y))),
inference('PARAMODULATE',[status(thm)],[78,94,theory(equality)]) ).
cnf(230,plain,
inverse(double_divide(X,double_divide(Y,Z))) = double_divide(double_divide(X,inverse(Y)),Z),
inference('REWRITE',[status(thm)],[inference('PARAMODULATE',[status(thm)],[94,86,theory(equality)]),112,theory(equality)]) ).
cnf(268,plain,
double_divide(X,double_divide(Y,Z)) = double_divide(X,double_divide(Z,Y)),
inference('REWRITE',[status(thm)],[inference('PARAMODULATE',[status(thm)],[114,212,theory(equality)]),76,112,theory(equality)]) ).
cnf(299,plain,
inverse(double_divide(inverse(X),double_divide(Y,Z))) = double_divide(inverse(double_divide(X,Y)),Z),
inference('PARAMODULATE',[status(thm)],[230,112,theory(equality)]) ).
cnf(313,plain,
inverse(double_divide(X,inverse(double_divide(Y,Z)))) = double_divide(double_divide(X,Y),inverse(Z)),
inference('REWRITE',[status(thm)],[inference('PARAMODULATE',[status(thm)],[230,112,theory(equality)]),76,theory(equality)]) ).
cnf(318,plain,
$false,
inference('REWRITE',[status(thm)],[111,268,76,135,299,144,313,theory(equality)]) ).
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.09/0.14 % Problem : GRP102-1 : TPTP v8.1.0. Bugfixed v2.7.0.
% 0.09/0.15 % Command : run-snark %s %d
% 0.15/0.36 % Computer : n026.cluster.edu
% 0.15/0.36 % Model : x86_64 x86_64
% 0.15/0.36 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.15/0.36 % Memory : 8042.1875MB
% 0.15/0.36 % OS : Linux 3.10.0-693.el7.x86_64
% 0.15/0.36 % CPULimit : 300
% 0.15/0.36 % WCLimit : 600
% 0.15/0.36 % DateTime : Tue Jun 14 06:11:36 EDT 2022
% 0.15/0.36 % CPUTime :
% 0.22/0.50 /export/starexec/sandbox/benchmark/theBenchmark.p
% 0.22/0.51 *
% 0.22/0.51 *
% 0.22/0.51 #<PACKAGE "SNARK-USER">
% 0.22/0.51 *
% 0.22/0.51 SNARK-TPTP-OPTIONS
% 0.22/0.51 *
% 0.22/0.51 ((AGENDA-LENGTH-LIMIT NIL) (AGENDA-LENGTH-BEFORE-SIMPLIFICATION-LIMIT NIL)
% 0.22/0.51 (USE-HYPERRESOLUTION T) (USE-UR-RESOLUTION T) (USE-PARAMODULATION T)
% 0.22/0.51 (USE-FACTORING :POS)
% 0.22/0.51 (USE-LITERAL-ORDERING-WITH-HYPERRESOLUTION 'LITERAL-ORDERING-P)
% 0.22/0.51 (USE-LITERAL-ORDERING-WITH-PARAMODULATION 'LITERAL-ORDERING-P)
% 0.22/0.51 (ORDERING-FUNCTIONS>CONSTANTS T) (ASSERT-CONTEXT :CURRENT)
% 0.22/0.51 (RUN-TIME-LIMIT 300) (LISTEN-FOR-COMMANDS NIL)
% 0.22/0.51 (USE-CLOSURE-WHEN-SATISFIABLE T) (PRINT-ROWS-WHEN-GIVEN NIL)
% 0.22/0.51 (PRINT-ROWS-WHEN-DERIVED NIL) (PRINT-UNORIENTABLE-ROWS NIL)
% 0.22/0.51 (PRINT-ROW-WFFS-PRETTILY NIL) (PRINT-FINAL-ROWS :TPTP)
% 0.22/0.51 (PRINT-OPTIONS-WHEN-STARTING NIL) (USE-VARIABLE-NAME-SORTS NIL)
% 0.22/0.51 (USE-PURITY-TEST T) (USE-RELEVANCE-TEST T) (DECLARE-TPTP-SYMBOLS1)
% 0.22/0.51 (DECLARE-TPTP-SYMBOLS2))
% 0.22/0.51 *
% 0.22/0.51 "."
% 0.22/0.51 *
% 0.22/0.51 ; Begin refute-file /export/starexec/sandbox/benchmark/theBenchmark.p 2022-06-14T06:11:36
% 0.22/0.51 ; Running SNARK from /davis/home/graph/tptp/Systems/SNARK---20120808r022/Source/snark-system.lisp in SBCL 1.0.12 on n026.cluster.edu at 2022-06-14T06:11:36
% 0.22/0.53
% 0.57/0.79 ; Recognized possible right inverse assertion (= |identity| (|double_divide| ?X (|inverse| ?X))).
% 0.57/0.79
% 0.57/0.79 #||
% 0.57/0.79 % SZS status Unsatisfiable for /export/starexec/sandbox/benchmark/theBenchmark.p
% 0.57/0.79 % SZS output start Refutation
% See solution above
% 0.63/0.79 ||#
% 0.63/0.79
% 0.63/0.79 ; Summary of computation:
% 0.63/0.79 ; 2051 formulas have been input or derived (from 55 formulas).
% 0.63/0.79 ; 318 (16%) were retained. Of these,
% 0.63/0.79 ; 120 (38%) were simplified or subsumed later,
% 0.63/0.79 ; 198 (62%) are still being kept.
% 0.63/0.79 ;
% 0.63/0.79 ; Run time in seconds excluding printing time:
% 0.63/0.79 ; 0.002 1% Read assertion file (1 call)
% 0.63/0.80 ; 0.001 0% Assert (5 calls)
% 0.63/0.80 ; 0.028 10% Process new row (1,864 calls)
% 0.63/0.80 ; 0.004 1% Resolution (108 calls)
% 0.63/0.80 ; 0.032 12% Paramodulation (54 calls)
% 0.63/0.80 ; 0.000 0% Condensing (4 calls)
% 0.63/0.80 ; 0.000 0% Forward subsumption (4 calls)
% 0.63/0.80 ; 0.000 0% Backward subsumption (4 calls)
% 0.63/0.80 ; 0.056 20% Forward simplification (1,775 calls)
% 0.63/0.80 ; 0.023 8% Backward simplification (318 calls)
% 0.63/0.80 ; 0.095 35% Ordering (12,658 calls)
% 0.63/0.80 ; 0.000 0% Sortal reasoning (32 calls)
% 0.63/0.80 ; 0.000 0% Purity testing (1 call)
% 0.63/0.80 ; 0.034 12% Other
% 0.63/0.80 ; 0.275 Total
% 0.63/0.80 ; 0.282 Real time
% 0.63/0.80 ;
% 0.63/0.80 ; Term-hash-array has 864 terms in all.
% 0.63/0.80 ; Feature-vector-row-index has 0 entries (1 at peak, 4 added, 4 deleted).
% 0.63/0.80 ; Feature-vector-row-index has 1 node (29 at peak, 101 added, 100 deleted).
% 0.63/0.80 ; Retrieved 0 possibly forward subsuming rows in 4 calls.
% 0.63/0.80 ; Retrieved 0 possibly backward subsumed rows in 4 calls.
% 0.63/0.80 ; Path-index has 496 entries (505 at peak, 1,010 added, 514 deleted).
% 0.63/0.80 ; Path-index has 970 nodes (970 at peak, 1,715 added, 745 deleted).
% 0.63/0.80 ; Trie-index has 496 entries (505 at peak, 1,010 added, 514 deleted).
% 0.63/0.80 ; Trie-index has 1,962 nodes (2,059 at peak, 4,373 added, 2,411 deleted).
% 0.63/0.80 ; Retrieved 13,918 generalization terms in 11,717 calls.
% 0.63/0.80 ; Retrieved 2,548 instance terms in 457 calls.
% 0.63/0.80 ; Retrieved 3,304 unifiable terms in 440 calls.
% 0.63/0.80 ;
% 0.63/0.80 ; The agenda of backward simplifiable rows to process has 6 entries:
% 0.63/0.80 ; 6 with value 0
% 0.63/0.80 ; The agenda of rows to process has 88 entries:
% 0.63/0.80 ; 10 with value 26 27 with value 28 13 with value 30
% 0.63/0.80 ; 16 with value 27 21 with value 29 1 with value 31
% 0.63/0.80 ; The agenda of rows to give has 168 entries:
% 0.63/0.80 ; 3 with value (4 20) 29 with value (4 24) 14 with value (4 27)
% 0.63/0.80 ; 11 with value (4 21) 34 with value (4 25) 1 with value (4 28)
% 0.63/0.80 ; 13 with value (4 22) 41 with value (4 26) 4 with value (4 29)
% 0.63/0.80 ; 18 with value (4 23)
% 0.63/0.80 Evaluation took:
% 0.63/0.80 0.282 seconds of real time
% 0.63/0.80 0.245059 seconds of user run time
% 0.63/0.80 0.036859 seconds of system run time
% 0.63/0.80 [Run times include 0.007 seconds GC run time.]
% 0.63/0.80 0 calls to %EVAL
% 0.63/0.80 0 page faults and
% 0.63/0.80 19,661,920 bytes consed.
% 0.63/0.80 :PROOF-FOUND
% 0.63/0.80 ; End refute-file /export/starexec/sandbox/benchmark/theBenchmark.p 2022-06-14T06:11:37
% 0.63/0.80 :PROOF-FOUND
% 0.63/0.80 *
%------------------------------------------------------------------------------