TSTP Solution File: GRP587-1 by SNARK---20120808r022
View Problem
- Process Solution
%------------------------------------------------------------------------------
% File : SNARK---20120808r022
% Problem : GRP587-1 : TPTP v8.1.0. Released v2.6.0.
% Transfm : none
% Format : tptp:raw
% Command : run-snark %s %d
% Computer : n009.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:39:32 EDT 2022
% Result : Unsatisfiable 0.45s 0.64s
% Output : Refutation 0.45s
% Verified :
% SZS Type : Refutation
% Derivation depth : 27
% Number of leaves : 3
% Syntax : Number of clauses : 59 ( 59 unt; 0 nHn; 5 RR)
% Number of literals : 59 ( 58 equ; 4 neg)
% Maximal clause size : 1 ( 1 avg)
% Maximal term depth : 11 ( 3 avg)
% Number of predicates : 2 ( 0 usr; 1 prp; 0-2 aty)
% Number of functors : 6 ( 6 usr; 3 con; 0-2 aty)
% Number of variables : 178 ( 0 sgn)
% Comments :
%------------------------------------------------------------------------------
cnf(single_axiom,axiom,
double_divide(X,inverse(double_divide(inverse(double_divide(double_divide(X,Y),inverse(Z))),Y))) = Z,
file('/export/starexec/sandbox2/benchmark/theBenchmark.p',single_axiom) ).
cnf(multiply,axiom,
multiply(X,Y) = inverse(double_divide(Y,X)),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p',multiply) ).
cnf(prove_these_axioms_3,negated_conjecture,
multiply(multiply(a3,b3),c3) != multiply(a3,multiply(b3,c3)),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p',prove_these_axioms_3) ).
cnf(4,plain,
inverse(double_divide(c3,inverse(double_divide(b3,a3)))) != inverse(double_divide(inverse(double_divide(c3,b3)),a3)),
inference('REWRITE',[status(thm)],[prove_these_axioms_3,multiply,theory(equality)]) ).
cnf(5,plain,
double_divide(X,inverse(double_divide(inverse(Y),Z))) = double_divide(inverse(double_divide(double_divide(double_divide(X,Z),U),inverse(Y))),U),
inference('PARAMODULATE',[status(thm)],[single_axiom,single_axiom,theory(equality)]) ).
cnf(6,plain,
double_divide(X,inverse(double_divide(inverse(double_divide(Y,inverse(Z))),inverse(double_divide(inverse(double_divide(double_divide(X,U),inverse(Y))),U))))) = Z,
inference('PARAMODULATE',[status(thm)],[single_axiom,single_axiom,theory(equality)]) ).
cnf(7,plain,
double_divide(double_divide(X,Y),inverse(double_divide(X,inverse(double_divide(inverse(Z),Y))))) = Z,
inference('PARAMODULATE',[status(thm)],[single_axiom,5,theory(equality)]) ).
cnf(12,plain,
double_divide(double_divide(double_divide(inverse(X),Y),inverse(double_divide(inverse(Z),Y))),inverse(Z)) = X,
inference('PARAMODULATE',[status(thm)],[7,7,theory(equality)]) ).
cnf(15,plain,
double_divide(X,inverse(double_divide(double_divide(Y,Z),inverse(double_divide(inverse(U),inverse(double_divide(Y,inverse(double_divide(inverse(X),Z))))))))) = U,
inference('PARAMODULATE',[status(thm)],[7,7,theory(equality)]) ).
cnf(21,plain,
double_divide(X,inverse(double_divide(double_divide(double_divide(inverse(Y),Z),Z),inverse(X)))) = Y,
inference('PARAMODULATE',[status(thm)],[12,single_axiom,theory(equality)]) ).
cnf(31,plain,
double_divide(X,inverse(double_divide(inverse(Y),Z))) = double_divide(double_divide(double_divide(inverse(Y),U),U),inverse(double_divide(X,Z))),
inference('PARAMODULATE',[status(thm)],[single_axiom,21,theory(equality)]) ).
cnf(35,plain,
double_divide(X,inverse(double_divide(double_divide(Y,inverse(double_divide(double_divide(double_divide(inverse(Y),Z),Z),inverse(inverse(U))))),inverse(X)))) = U,
inference('PARAMODULATE',[status(thm)],[21,21,theory(equality)]) ).
cnf(37,plain,
double_divide(X,inverse(double_divide(Y,inverse(double_divide(inverse(Z),inverse(double_divide(double_divide(double_divide(inverse(X),U),U),inverse(Y)))))))) = Z,
inference('PARAMODULATE',[status(thm)],[7,21,theory(equality)]) ).
cnf(38,plain,
double_divide(double_divide(X,inverse(double_divide(inverse(Y),inverse(double_divide(double_divide(double_divide(inverse(X),Z),Z),inverse(inverse(U))))))),inverse(Y)) = U,
inference('PARAMODULATE',[status(thm)],[12,21,theory(equality)]) ).
cnf(50,plain,
double_divide(inverse(X),inverse(double_divide(inverse(Y),Z))) = double_divide(double_divide(double_divide(inverse(X),U),U),inverse(double_divide(double_divide(double_divide(inverse(Y),V),V),Z))),
inference('PARAMODULATE',[status(thm)],[31,31,theory(equality)]) ).
cnf(53,plain,
double_divide(X,inverse(double_divide(inverse(Y),Z))) = double_divide(double_divide(U,inverse(double_divide(double_divide(double_divide(inverse(U),V),V),inverse(inverse(Y))))),inverse(double_divide(X,Z))),
inference('PARAMODULATE',[status(thm)],[31,21,theory(equality)]) ).
cnf(62,plain,
double_divide(double_divide(X,Y),inverse(double_divide(inverse(Z),inverse(double_divide(X,inverse(double_divide(inverse(U),Y))))))) = double_divide(double_divide(double_divide(inverse(Z),V),V),inverse(U)),
inference('PARAMODULATE',[status(thm)],[31,7,theory(equality)]) ).
cnf(69,plain,
double_divide(X,inverse(double_divide(inverse(Y),inverse(double_divide(inverse(Z),U))))) = double_divide(inverse(Y),inverse(double_divide(inverse(Z),inverse(double_divide(X,U))))),
inference('REWRITE',[status(thm)],[inference('PARAMODULATE',[status(thm)],[31,31,theory(equality)]),50,theory(equality)]) ).
cnf(74,plain,
double_divide(inverse(double_divide(X,inverse(Y))),inverse(double_divide(inverse(double_divide(double_divide(Z,U),inverse(X))),inverse(double_divide(Z,U))))) = Y,
inference('REWRITE',[status(thm)],[6,69,theory(equality)]) ).
cnf(80,plain,
double_divide(inverse(double_divide(X,inverse(Y))),inverse(double_divide(inverse(double_divide(Z,inverse(X))),inverse(Z)))) = Y,
inference('PARAMODULATE',[status(thm)],[74,74,theory(equality)]) ).
cnf(81,plain,
double_divide(double_divide(inverse(double_divide(X,inverse(Y))),inverse(Z)),inverse(Y)) = double_divide(Z,inverse(X)),
inference('PARAMODULATE',[status(thm)],[7,80,theory(equality)]) ).
cnf(82,plain,
double_divide(inverse(X),inverse(double_divide(inverse(double_divide(Y,inverse(Z))),inverse(Y)))) = double_divide(inverse(double_divide(double_divide(Z,U),inverse(X))),U),
inference('PARAMODULATE',[status(thm)],[80,single_axiom,theory(equality)]) ).
cnf(90,plain,
double_divide(inverse(double_divide(X,inverse(Y))),inverse(double_divide(inverse(Z),inverse(double_divide(double_divide(inverse(Z),U),inverse(double_divide(inverse(X),U))))))) = Y,
inference('PARAMODULATE',[status(thm)],[80,12,theory(equality)]) ).
cnf(92,plain,
double_divide(double_divide(X,inverse(double_divide(inverse(Y),inverse(double_divide(inverse(double_divide(Z,inverse(U))),inverse(Z)))))),inverse(Y)) = double_divide(U,inverse(X)),
inference('PARAMODULATE',[status(thm)],[12,80,theory(equality)]) ).
cnf(97,plain,
double_divide(inverse(double_divide(X,inverse(Y))),inverse(double_divide(inverse(Z),inverse(double_divide(inverse(double_divide(U,inverse(X))),inverse(U)))))) = double_divide(inverse(double_divide(double_divide(Y,V),inverse(Z))),V),
inference('PARAMODULATE',[status(thm)],[5,80,theory(equality)]) ).
cnf(104,plain,
double_divide(inverse(double_divide(X,inverse(Y))),inverse(double_divide(inverse(Z),inverse(double_divide(inverse(double_divide(U,inverse(X))),inverse(U)))))) = double_divide(double_divide(double_divide(inverse(Z),V),V),inverse(Y)),
inference('PARAMODULATE',[status(thm)],[31,80,theory(equality)]) ).
cnf(105,plain,
double_divide(double_divide(X,inverse(Y)),inverse(Z)) = double_divide(Y,inverse(double_divide(inverse(Z),inverse(X)))),
inference('PARAMODULATE',[status(thm)],[12,81,theory(equality)]) ).
cnf(107,plain,
double_divide(double_divide(double_divide(X,inverse(double_divide(inverse(Y),Z))),inverse(double_divide(X,Z))),inverse(U)) = double_divide(double_divide(double_divide(inverse(U),V),V),inverse(Y)),
inference('REWRITE',[status(thm)],[62,105,theory(equality)]) ).
cnf(108,plain,
double_divide(X,inverse(double_divide(double_divide(double_divide(Y,inverse(double_divide(inverse(X),Z))),inverse(double_divide(Y,Z))),inverse(U)))) = U,
inference('REWRITE',[status(thm)],[15,105,theory(equality)]) ).
cnf(110,plain,
double_divide(double_divide(double_divide(double_divide(double_divide(double_divide(inverse(X),Y),Y),inverse(inverse(Z))),inverse(X)),inverse(U)),inverse(U)) = Z,
inference('REWRITE',[status(thm)],[38,105,theory(equality)]) ).
cnf(113,plain,
double_divide(X,inverse(double_divide(double_divide(double_divide(double_divide(double_divide(inverse(X),Y),Y),inverse(Z)),inverse(Z)),inverse(U)))) = U,
inference('REWRITE',[status(thm)],[37,105,theory(equality)]) ).
cnf(117,plain,
double_divide(X,inverse(double_divide(double_divide(Y,inverse(Z)),inverse(X)))) = double_divide(Z,inverse(Y)),
inference('PARAMODULATE',[status(thm)],[21,81,theory(equality)]) ).
cnf(118,plain,
double_divide(double_divide(double_divide(double_divide(inverse(X),Y),Y),inverse(inverse(Z))),inverse(X)) = Z,
inference('REWRITE',[status(thm)],[35,117,theory(equality)]) ).
cnf(119,plain,
double_divide(double_divide(X,inverse(Y)),inverse(Y)) = X,
inference('REWRITE',[status(thm)],[110,118,theory(equality)]) ).
cnf(122,plain,
double_divide(X,inverse(double_divide(double_divide(double_divide(inverse(X),Y),Y),inverse(Z)))) = Z,
inference('REWRITE',[status(thm)],[113,119,theory(equality)]) ).
cnf(123,plain,
double_divide(X,inverse(double_divide(inverse(Y),Z))) = double_divide(inverse(Y),inverse(double_divide(X,Z))),
inference('REWRITE',[status(thm)],[53,122,theory(equality)]) ).
cnf(127,plain,
double_divide(inverse(double_divide(X,inverse(Y))),inverse(X)) = Y,
inference('REWRITE',[status(thm)],[90,7,123,theory(equality)]) ).
cnf(132,plain,
double_divide(double_divide(X,inverse(double_divide(inverse(Y),inverse(Z)))),inverse(Y)) = double_divide(Z,inverse(X)),
inference('REWRITE',[status(thm)],[92,127,theory(equality)]) ).
cnf(135,plain,
double_divide(inverse(double_divide(X,inverse(Y))),inverse(double_divide(inverse(Z),inverse(X)))) = double_divide(inverse(double_divide(double_divide(Y,U),inverse(Z))),U),
inference('REWRITE',[status(thm)],[97,127,theory(equality)]) ).
cnf(136,plain,
double_divide(inverse(double_divide(X,inverse(Y))),inverse(double_divide(inverse(Z),inverse(X)))) = double_divide(double_divide(double_divide(inverse(Z),U),U),inverse(Y)),
inference('REWRITE',[status(thm)],[104,127,theory(equality)]) ).
cnf(137,plain,
double_divide(inverse(X),inverse(Y)) = double_divide(inverse(double_divide(double_divide(Y,Z),inverse(X))),Z),
inference('REWRITE',[status(thm)],[82,127,theory(equality)]) ).
cnf(138,plain,
double_divide(inverse(double_divide(X,inverse(Y))),inverse(double_divide(inverse(Z),inverse(X)))) = double_divide(inverse(Z),inverse(Y)),
inference('REWRITE',[status(thm)],[135,137,theory(equality)]) ).
cnf(139,plain,
double_divide(inverse(X),inverse(Y)) = double_divide(double_divide(double_divide(inverse(X),Z),Z),inverse(Y)),
inference('REWRITE',[status(thm)],[136,138,theory(equality)]) ).
cnf(141,plain,
double_divide(double_divide(inverse(X),inverse(inverse(Y))),inverse(X)) = Y,
inference('REWRITE',[status(thm)],[118,139,theory(equality)]) ).
cnf(142,plain,
double_divide(double_divide(double_divide(X,inverse(double_divide(inverse(Y),Z))),inverse(double_divide(X,Z))),inverse(U)) = double_divide(inverse(U),inverse(Y)),
inference('REWRITE',[status(thm)],[107,139,theory(equality)]) ).
cnf(143,plain,
double_divide(X,inverse(double_divide(inverse(Y),inverse(X)))) = Y,
inference('REWRITE',[status(thm)],[108,142,theory(equality)]) ).
cnf(175,plain,
inverse(double_divide(X,inverse(Y))) = double_divide(Y,inverse(X)),
inference('PARAMODULATE',[status(thm)],[81,119,theory(equality)]) ).
cnf(181,plain,
inverse(inverse(X)) = X,
inference('REWRITE',[status(thm)],[143,119,175,theory(equality)]) ).
cnf(185,plain,
double_divide(double_divide(inverse(X),Y),inverse(X)) = Y,
inference('REWRITE',[status(thm)],[141,181,theory(equality)]) ).
cnf(191,plain,
double_divide(double_divide(b3,a3),inverse(c3)) != inverse(double_divide(inverse(double_divide(c3,b3)),a3)),
inference('REWRITE',[status(thm)],[4,181,175,theory(equality)]) ).
cnf(194,plain,
double_divide(double_divide(X,Y),Y) = X,
inference('PARAMODULATE',[status(thm)],[119,181,theory(equality)]) ).
cnf(196,plain,
double_divide(double_divide(X,Y),X) = Y,
inference('PARAMODULATE',[status(thm)],[185,181,theory(equality)]) ).
cnf(197,plain,
double_divide(X,Y) = double_divide(Y,X),
inference('PARAMODULATE',[status(thm)],[194,196,theory(equality)]) ).
cnf(202,plain,
double_divide(double_divide(b3,a3),inverse(c3)) != double_divide(double_divide(c3,b3),inverse(a3)),
inference('REWRITE',[status(thm)],[inference('PARAMODULATE',[status(thm)],[191,197,theory(equality)]),181,175,theory(equality)]) ).
cnf(204,plain,
double_divide(inverse(double_divide(X,Y)),inverse(X)) = inverse(Y),
inference('PARAMODULATE',[status(thm)],[127,181,theory(equality)]) ).
cnf(206,plain,
double_divide(inverse(X),inverse(Y)) = inverse(double_divide(Y,X)),
inference('PARAMODULATE',[status(thm)],[194,204,theory(equality)]) ).
cnf(230,plain,
double_divide(double_divide(X,double_divide(Y,Z)),inverse(Z)) = double_divide(Y,inverse(X)),
inference('REWRITE',[status(thm)],[132,181,206,theory(equality)]) ).
cnf(266,plain,
double_divide(double_divide(X,Y),inverse(Z)) = double_divide(double_divide(Y,Z),inverse(X)),
inference('PARAMODULATE',[status(thm)],[230,194,theory(equality)]) ).
cnf(267,plain,
$false,
inference('REWRITE',[status(thm)],[202,266,theory(equality)]) ).
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.12/0.12 % Problem : GRP587-1 : TPTP v8.1.0. Released v2.6.0.
% 0.12/0.13 % Command : run-snark %s %d
% 0.13/0.34 % Computer : n009.cluster.edu
% 0.13/0.34 % Model : x86_64 x86_64
% 0.13/0.34 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.13/0.34 % Memory : 8042.1875MB
% 0.13/0.34 % OS : Linux 3.10.0-693.el7.x86_64
% 0.13/0.34 % CPULimit : 300
% 0.13/0.34 % WCLimit : 600
% 0.13/0.34 % DateTime : Tue Jun 14 08:08:53 EDT 2022
% 0.13/0.34 % CPUTime :
% 0.19/0.46 /export/starexec/sandbox2/benchmark/theBenchmark.p
% 0.19/0.47 *
% 0.19/0.47 *
% 0.19/0.48 #<PACKAGE "SNARK-USER">
% 0.19/0.48 *
% 0.19/0.48 SNARK-TPTP-OPTIONS
% 0.19/0.48 *
% 0.19/0.48 ((AGENDA-LENGTH-LIMIT NIL) (AGENDA-LENGTH-BEFORE-SIMPLIFICATION-LIMIT NIL)
% 0.19/0.48 (USE-HYPERRESOLUTION T) (USE-UR-RESOLUTION T) (USE-PARAMODULATION T)
% 0.19/0.48 (USE-FACTORING :POS)
% 0.19/0.48 (USE-LITERAL-ORDERING-WITH-HYPERRESOLUTION 'LITERAL-ORDERING-P)
% 0.19/0.48 (USE-LITERAL-ORDERING-WITH-PARAMODULATION 'LITERAL-ORDERING-P)
% 0.19/0.48 (ORDERING-FUNCTIONS>CONSTANTS T) (ASSERT-CONTEXT :CURRENT)
% 0.19/0.48 (RUN-TIME-LIMIT 300) (LISTEN-FOR-COMMANDS NIL)
% 0.19/0.48 (USE-CLOSURE-WHEN-SATISFIABLE T) (PRINT-ROWS-WHEN-GIVEN NIL)
% 0.19/0.48 (PRINT-ROWS-WHEN-DERIVED NIL) (PRINT-UNORIENTABLE-ROWS NIL)
% 0.19/0.48 (PRINT-ROW-WFFS-PRETTILY NIL) (PRINT-FINAL-ROWS :TPTP)
% 0.19/0.48 (PRINT-OPTIONS-WHEN-STARTING NIL) (USE-VARIABLE-NAME-SORTS NIL)
% 0.19/0.48 (USE-PURITY-TEST T) (USE-RELEVANCE-TEST T) (DECLARE-TPTP-SYMBOLS1)
% 0.19/0.48 (DECLARE-TPTP-SYMBOLS2))
% 0.19/0.48 *
% 0.19/0.48 "."
% 0.19/0.48 *
% 0.19/0.48 ; Begin refute-file /export/starexec/sandbox2/benchmark/theBenchmark.p 2022-06-14T08:08:53
% 0.19/0.48 ; Running SNARK from /davis/home/graph/tptp/Systems/SNARK---20120808r022/Source/snark-system.lisp in SBCL 1.0.12 on n009.cluster.edu at 2022-06-14T08:08:53
% 0.45/0.64
% 0.45/0.64
% 0.45/0.64 #||
% 0.45/0.64 % SZS status Unsatisfiable for /export/starexec/sandbox2/benchmark/theBenchmark.p
% 0.45/0.64 % SZS output start Refutation
% See solution above
% 0.45/0.65 ||#
% 0.45/0.65
% 0.45/0.65 ; Summary of computation:
% 0.45/0.65 ; 607 formulas have been input or derived (from 29 formulas).
% 0.45/0.65 ; 267 (44%) were retained. Of these,
% 0.45/0.65 ; 194 (73%) were simplified or subsumed later,
% 0.45/0.65 ; 73 (27%) are still being kept.
% 0.45/0.65 ;
% 0.45/0.65 ; Run time in seconds excluding printing time:
% 0.45/0.65 ; 0.001 1% Read assertion file (1 call)
% 0.45/0.65 ; 0.000 0% Assert (3 calls)
% 0.45/0.65 ; 0.044 27% Process new row (557 calls)
% 0.45/0.65 ; 0.001 1% Resolution (56 calls)
% 0.45/0.65 ; 0.013 8% Paramodulation (28 calls)
% 0.45/0.65 ; 0.016 10% Forward simplification (461 calls)
% 0.45/0.65 ; 0.030 19% Backward simplification (266 calls)
% 0.45/0.65 ; 0.029 18% Ordering (3,324 calls)
% 0.45/0.65 ; 0.000 0% Sortal reasoning (32 calls)
% 0.45/0.65 ; 0.000 0% Purity testing (1 call)
% 0.45/0.65 ; 0.027 17% Other
% 0.45/0.65 ; 0.161 Total
% 0.45/0.65 ; 0.176 Real time
% 0.45/0.65 ;
% 0.45/0.65 ; Term-hash-array has 1,217 terms in all.
% 0.45/0.65 ; Feature-vector-row-index has 0 entries (0 at peak, 0 added, 0 deleted).
% 0.45/0.65 ; Feature-vector-row-index has 1 node (1 at peak, 1 added, 0 deleted).
% 0.45/0.65 ; Path-index has 334 entries (644 at peak, 1,353 added, 1,019 deleted).
% 0.45/0.65 ; Path-index has 1,412 nodes (1,445 at peak, 2,001 added, 589 deleted).
% 0.45/0.65 ; Trie-index has 334 entries (644 at peak, 1,353 added, 1,019 deleted).
% 0.45/0.65 ; Trie-index has 1,389 nodes (3,071 at peak, 5,933 added, 4,544 deleted).
% 0.45/0.65 ; Retrieved 1,976 generalization terms in 3,266 calls.
% 0.45/0.65 ; Retrieved 2,403 instance terms in 358 calls.
% 0.45/0.65 ; Retrieved 2,954 unifiable terms in 228 calls.
% 0.45/0.65 ;
% 0.45/0.65 ; The agenda of backward simplifiable rows to process has 4 entries:
% 0.45/0.65 ; 4 with value 0
% 0.45/0.65 ; The agenda of rows to process has 23 entries:
% 0.45/0.65 ; 2 with value 23 1 with value 26 4 with value 29
% 0.45/0.65 ; 2 with value 24 1 with value 27 3 with value 31
% 0.45/0.65 ; 10 with value 25
% 0.45/0.65 ; The agenda of rows to give has 61 entries:
% 0.45/0.65 ; 1 with value (4 20) 3 with value (4 27) 2 with value (4 34)
% 0.45/0.65 ; 2 with value (4 21) 9 with value (4 28) 2 with value (4 35)
% 0.45/0.65 ; 6 with value (4 22) 2 with value (4 29) 4 with value (4 36)
% 0.45/0.65 ; 2 with value (4 23) 6 with value (4 30) 1 with value (4 37)
% 0.45/0.65 ; 2 with value (4 24) 5 with value (4 31) 1 with value (4 38)
% 0.45/0.65 ; 3 with value (4 25) 4 with value (4 32) 1 with value (4 43)
% 0.45/0.65 ; 2 with value (4 26) 3 with value (4 33)
% 0.45/0.65 Evaluation took:
% 0.45/0.65 0.176 seconds of real time
% 0.45/0.65 0.164311 seconds of user run time
% 0.45/0.65 0.012096 seconds of system run time
% 0.45/0.65 [Run times include 0.008 seconds GC run time.]
% 0.45/0.65 0 calls to %EVAL
% 0.45/0.65 0 page faults and
% 0.45/0.65 15,918,040 bytes consed.
% 0.45/0.65 :PROOF-FOUND
% 0.45/0.65 ; End refute-file /export/starexec/sandbox2/benchmark/theBenchmark.p 2022-06-14T08:08:53
% 0.45/0.65 :PROOF-FOUND
% 0.45/0.65 *
%------------------------------------------------------------------------------