TSTP Solution File: GRP110-1 by Prover9---1109a
View Problem
- Process Solution
%------------------------------------------------------------------------------
% File : Prover9---1109a
% Problem : GRP110-1 : TPTP v8.1.0. Bugfixed v2.7.0.
% Transfm : none
% Format : tptp:raw
% Command : tptp2X_and_run_prover9 %d %s
% Computer : n032.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:17:12 EDT 2022
% Result : Unsatisfiable 0.50s 0.85s
% Output : Refutation 0.54s
% Verified :
% SZS Type : -
% Comments :
%------------------------------------------------------------------------------
%----WARNING: Could not form TPTP format derivation
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.03/0.10 % Problem : GRP110-1 : TPTP v8.1.0. Bugfixed v2.7.0.
% 0.03/0.10 % Command : tptp2X_and_run_prover9 %d %s
% 0.10/0.30 % Computer : n032.cluster.edu
% 0.10/0.30 % Model : x86_64 x86_64
% 0.10/0.30 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.10/0.30 % Memory : 8042.1875MB
% 0.10/0.30 % OS : Linux 3.10.0-693.el7.x86_64
% 0.10/0.30 % CPULimit : 300
% 0.10/0.30 % WCLimit : 600
% 0.10/0.30 % DateTime : Tue Jun 14 05:16:27 EDT 2022
% 0.10/0.30 % CPUTime :
% 0.50/0.85 ============================== Prover9 ===============================
% 0.50/0.85 Prover9 (32) version 2009-11A, November 2009.
% 0.50/0.85 Process 9509 was started by sandbox2 on n032.cluster.edu,
% 0.50/0.85 Tue Jun 14 05:16:28 2022
% 0.50/0.85 The command was "/export/starexec/sandbox2/solver/bin/prover9 -t 300 -f /tmp/Prover9_9355_n032.cluster.edu".
% 0.50/0.85 ============================== end of head ===========================
% 0.50/0.85
% 0.50/0.85 ============================== INPUT =================================
% 0.50/0.85
% 0.50/0.85 % Reading from file /tmp/Prover9_9355_n032.cluster.edu
% 0.50/0.85
% 0.50/0.85 set(prolog_style_variables).
% 0.50/0.85 set(auto2).
% 0.50/0.85 % set(auto2) -> set(auto).
% 0.50/0.85 % set(auto) -> set(auto_inference).
% 0.50/0.85 % set(auto) -> set(auto_setup).
% 0.50/0.85 % set(auto_setup) -> set(predicate_elim).
% 0.50/0.85 % set(auto_setup) -> assign(eq_defs, unfold).
% 0.50/0.85 % set(auto) -> set(auto_limits).
% 0.50/0.85 % set(auto_limits) -> assign(max_weight, "100.000").
% 0.50/0.85 % set(auto_limits) -> assign(sos_limit, 20000).
% 0.50/0.85 % set(auto) -> set(auto_denials).
% 0.50/0.85 % set(auto) -> set(auto_process).
% 0.50/0.85 % set(auto2) -> assign(new_constants, 1).
% 0.50/0.85 % set(auto2) -> assign(fold_denial_max, 3).
% 0.50/0.85 % set(auto2) -> assign(max_weight, "200.000").
% 0.50/0.85 % set(auto2) -> assign(max_hours, 1).
% 0.50/0.85 % assign(max_hours, 1) -> assign(max_seconds, 3600).
% 0.50/0.85 % set(auto2) -> assign(max_seconds, 0).
% 0.50/0.85 % set(auto2) -> assign(max_minutes, 5).
% 0.50/0.85 % assign(max_minutes, 5) -> assign(max_seconds, 300).
% 0.50/0.85 % set(auto2) -> set(sort_initial_sos).
% 0.50/0.85 % set(auto2) -> assign(sos_limit, -1).
% 0.50/0.85 % set(auto2) -> assign(lrs_ticks, 3000).
% 0.50/0.85 % set(auto2) -> assign(max_megs, 400).
% 0.50/0.85 % set(auto2) -> assign(stats, some).
% 0.50/0.85 % set(auto2) -> clear(echo_input).
% 0.50/0.85 % set(auto2) -> set(quiet).
% 0.50/0.85 % set(auto2) -> clear(print_initial_clauses).
% 0.50/0.85 % set(auto2) -> clear(print_given).
% 0.50/0.85 assign(lrs_ticks,-1).
% 0.50/0.85 assign(sos_limit,10000).
% 0.50/0.85 assign(order,kbo).
% 0.50/0.85 set(lex_order_vars).
% 0.50/0.85 clear(print_given).
% 0.50/0.85
% 0.50/0.85 % formulas(sos). % not echoed (3 formulas)
% 0.50/0.85
% 0.50/0.85 ============================== end of input ==========================
% 0.50/0.85
% 0.50/0.85 % From the command line: assign(max_seconds, 300).
% 0.50/0.85
% 0.50/0.85 ============================== PROCESS NON-CLAUSAL FORMULAS ==========
% 0.50/0.85
% 0.50/0.85 % Formulas that are not ordinary clauses:
% 0.50/0.85
% 0.50/0.85 ============================== end of process non-clausal formulas ===
% 0.50/0.85
% 0.50/0.85 ============================== PROCESS INITIAL CLAUSES ===============
% 0.50/0.85
% 0.50/0.85 ============================== PREDICATE ELIMINATION =================
% 0.50/0.85
% 0.50/0.85 ============================== end predicate elimination =============
% 0.50/0.85
% 0.50/0.85 Auto_denials:
% 0.50/0.85 % copying label prove_these_axioms to answer in negative clause
% 0.50/0.85
% 0.50/0.85 Term ordering decisions:
% 0.50/0.85
% 0.50/0.85 % Assigning unary symbol inverse kb_weight 0 and highest precedence (13).
% 0.50/0.85 Function symbol KB weights: a1=1. a2=1. a3=1. a4=1. b1=1. b2=1. b3=1. b4=1. c3=1. double_divide=1. multiply=1. inverse=0.
% 0.50/0.85
% 0.50/0.85 ============================== end of process initial clauses ========
% 0.50/0.85
% 0.50/0.85 ============================== CLAUSES FOR SEARCH ====================
% 0.50/0.85
% 0.50/0.85 ============================== end of clauses for search =============
% 0.50/0.85
% 0.50/0.85 ============================== SEARCH ================================
% 0.50/0.85
% 0.50/0.85 % Starting search at 0.01 seconds.
% 0.50/0.85
% 0.50/0.85 ============================== PROOF =================================
% 0.50/0.85 % SZS status Unsatisfiable
% 0.50/0.85 % SZS output start Refutation
% 0.50/0.85
% 0.50/0.85 % Proof 1 at 0.05 (+ 0.00) seconds: prove_these_axioms.
% 0.50/0.85 % Length of proof is 67.
% 0.50/0.85 % Level of proof is 22.
% 0.50/0.85 % Maximum clause weight is 45.000.
% 0.50/0.85 % Given clauses 26.
% 0.50/0.85
% 0.50/0.85 1 multiply(A,B) = inverse(double_divide(B,A)) # label(multiply) # label(axiom). [assumption].
% 0.50/0.85 2 inverse(double_divide(inverse(double_divide(inverse(double_divide(A,B)),C)),double_divide(A,C))) = B # label(single_axiom) # label(axiom). [assumption].
% 0.50/0.85 3 multiply(inverse(a1),a1) != multiply(inverse(b1),b1) | multiply(multiply(inverse(b2),b2),a2) != a2 | multiply(multiply(a3,b3),c3) != multiply(a3,multiply(b3,c3)) | multiply(a4,b4) != multiply(b4,a4) # label(prove_these_axioms) # label(negated_conjecture) # answer(prove_these_axioms). [assumption].
% 0.50/0.85 4 inverse(double_divide(b1,inverse(b1))) != inverse(double_divide(a1,inverse(a1))) | inverse(double_divide(a2,inverse(double_divide(b2,inverse(b2))))) != a2 | inverse(double_divide(inverse(double_divide(c3,b3)),a3)) != inverse(double_divide(c3,inverse(double_divide(b3,a3)))) | inverse(double_divide(b4,a4)) != inverse(double_divide(a4,b4)) # answer(prove_these_axioms). [copy(3),rewrite([1(4),1(9),1(15),1(18),1(24),1(27),1(32),1(34),1(39),1(43)]),flip(a),flip(c)].
% 0.54/0.85 5 inverse(double_divide(inverse(double_divide(A,B)),double_divide(inverse(double_divide(inverse(double_divide(C,A)),D)),B))) = double_divide(C,D). [para(2(a,1),2(a,1,1,1,1,1))].
% 0.54/0.85 6 inverse(double_divide(A,double_divide(inverse(double_divide(B,A)),double_divide(B,C)))) = C. [para(2(a,1),2(a,1,1,1))].
% 0.54/0.85 7 inverse(double_divide(inverse(double_divide(double_divide(A,B),C)),double_divide(inverse(double_divide(D,E)),C))) = double_divide(inverse(double_divide(inverse(double_divide(A,D)),B)),E). [para(5(a,1),2(a,1,1,1,1,1))].
% 0.54/0.85 8 inverse(double_divide(double_divide(A,B),double_divide(C,double_divide(inverse(double_divide(inverse(double_divide(A,C)),B)),D)))) = D. [para(5(a,1),2(a,1,1,1))].
% 0.54/0.85 12 inverse(double_divide(inverse(double_divide(A,B)),double_divide(double_divide(C,D),B))) = double_divide(E,double_divide(inverse(double_divide(inverse(double_divide(C,E)),D)),A)). [para(5(a,1),5(a,1,1,2,1))].
% 0.54/0.85 16 double_divide(A,inverse(double_divide(B,double_divide(inverse(double_divide(A,B)),C)))) = C. [para(6(a,1),5(a,1)),flip(a)].
% 0.54/0.85 19 inverse(double_divide(inverse(double_divide(inverse(A),B)),double_divide(C,B))) = inverse(double_divide(D,double_divide(inverse(double_divide(C,D)),A))). [para(16(a,1),2(a,1,1,1,1,1,1))].
% 0.54/0.85 20 inverse(double_divide(inverse(A),double_divide(B,inverse(double_divide(C,double_divide(inverse(double_divide(inverse(double_divide(B,D)),C)),A)))))) = D. [para(16(a,1),2(a,1,1,1,1))].
% 0.54/0.85 25 inverse(double_divide(inverse(double_divide(A,B)),double_divide(inverse(C),B))) = double_divide(D,inverse(double_divide(E,double_divide(inverse(double_divide(inverse(double_divide(D,A)),E)),C)))). [para(16(a,1),5(a,1,1,2,1,1))].
% 0.54/0.85 28 double_divide(inverse(double_divide(A,B)),double_divide(A,inverse(double_divide(B,C)))) = C. [para(5(a,1),16(a,1,2))].
% 0.54/0.85 33 inverse(double_divide(A,double_divide(inverse(double_divide(inverse(double_divide(B,C)),A)),D))) = double_divide(B,inverse(double_divide(C,D))). [para(16(a,1),16(a,1,2,1,2)),flip(a)].
% 0.54/0.85 35 inverse(double_divide(inverse(double_divide(A,B)),double_divide(inverse(C),B))) = double_divide(D,double_divide(D,inverse(double_divide(A,C)))). [back_rewrite(25),rewrite([33(13)])].
% 0.54/0.85 36 inverse(double_divide(inverse(A),double_divide(B,double_divide(B,inverse(double_divide(C,A)))))) = C. [back_rewrite(20),rewrite([33(8)])].
% 0.54/0.85 37 inverse(double_divide(inverse(double_divide(inverse(A),B)),double_divide(inverse(double_divide(C,D)),B))) = double_divide(C,inverse(double_divide(D,A))). [para(28(a,1),2(a,1,1,1,1,1,1))].
% 0.54/0.85 46 double_divide(A,double_divide(B,inverse(double_divide(double_divide(inverse(double_divide(C,B)),double_divide(C,A)),D)))) = D. [para(6(a,1),28(a,1,1))].
% 0.54/0.85 50 inverse(double_divide(A,double_divide(inverse(double_divide(B,A)),C))) = double_divide(inverse(double_divide(D,B)),double_divide(D,inverse(C))). [para(16(a,1),28(a,1,2,2,1)),flip(a)].
% 0.54/0.85 58 inverse(double_divide(inverse(double_divide(A,B)),double_divide(C,B))) = double_divide(D,double_divide(E,double_divide(E,inverse(double_divide(C,double_divide(D,A)))))). [para(36(a,1),5(a,1,1,2,1))].
% 0.54/0.85 63 double_divide(inverse(double_divide(A,inverse(B))),inverse(double_divide(C,B))) = double_divide(A,C). [para(36(a,1),16(a,1,2)),flip(a)].
% 0.54/0.85 71 double_divide(inverse(double_divide(inverse(double_divide(A,inverse(double_divide(B,double_divide(A,C))))),C)),D) = double_divide(B,D). [para(7(a,1),5(a,1))].
% 0.54/0.85 78 inverse(double_divide(inverse(A),double_divide(inverse(double_divide(B,C)),inverse(double_divide(D,double_divide(inverse(double_divide(double_divide(E,F),D)),A)))))) = double_divide(inverse(double_divide(inverse(double_divide(E,B)),F)),C). [para(16(a,1),7(a,1,1,1,1))].
% 0.54/0.85 79 inverse(double_divide(inverse(double_divide(double_divide(A,B),C)),double_divide(inverse(D),C))) = double_divide(inverse(double_divide(inverse(double_divide(A,E)),B)),inverse(double_divide(F,double_divide(inverse(double_divide(E,F)),D)))). [para(16(a,1),7(a,1,1,2,1,1))].
% 0.54/0.85 87 double_divide(A,inverse(double_divide(inverse(B),double_divide(A,C)))) = inverse(double_divide(C,B)). [para(63(a,1),2(a,1,1,1,1,1,1)),rewrite([37(10)])].
% 0.54/0.85 90 double_divide(inverse(double_divide(A,inverse(double_divide(B,C)))),D) = double_divide(A,inverse(double_divide(inverse(double_divide(B,D)),C))). [para(2(a,1),63(a,1,2))].
% 0.54/0.85 92 double_divide(inverse(double_divide(A,B)),inverse(double_divide(C,double_divide(B,D)))) = double_divide(inverse(double_divide(A,inverse(D))),C). [para(63(a,1),5(a,1,1,2,1,1,1,1)),rewrite([37(11)])].
% 0.54/0.85 103 inverse(double_divide(inverse(inverse(double_divide(A,B))),double_divide(C,double_divide(C,inverse(double_divide(D,A)))))) = inverse(double_divide(D,inverse(B))). [para(63(a,1),36(a,1,1,2,2,2,1))].
% 0.54/0.85 115 double_divide(inverse(inverse(double_divide(A,double_divide(B,A)))),C) = double_divide(B,C). [back_rewrite(71),rewrite([90(6),87(6)])].
% 0.54/0.85 133 double_divide(inverse(inverse(A)),B) = double_divide(A,B). [para(28(a,1),115(a,1,1,1,1))].
% 0.54/0.85 135 inverse(inverse(double_divide(A,double_divide(B,A)))) = B. [para(115(a,1),36(a,1,1,2,2,2,1)),rewrite([36(7)]),flip(a)].
% 0.54/0.85 140 inverse(double_divide(double_divide(A,B),double_divide(C,double_divide(C,inverse(double_divide(D,A)))))) = inverse(double_divide(D,inverse(B))). [back_rewrite(103),rewrite([133(8)])].
% 0.54/0.85 149 inverse(inverse(A)) = A. [para(133(a,1),36(a,1,1,2,2,2,1)),rewrite([36(7)]),flip(a)].
% 0.54/0.85 153 double_divide(A,double_divide(B,A)) = B. [back_rewrite(135),rewrite([149(4)])].
% 0.54/0.85 159 double_divide(inverse(double_divide(A,B)),double_divide(inverse(double_divide(inverse(double_divide(C,A)),D)),B)) = inverse(double_divide(C,D)). [para(5(a,1),149(a,1,1)),flip(a)].
% 0.54/0.85 160 double_divide(A,double_divide(inverse(double_divide(B,A)),double_divide(B,C))) = inverse(C). [para(6(a,1),149(a,1,1)),flip(a)].
% 0.54/0.85 167 inverse(double_divide(double_divide(A,B),double_divide(C,D))) = double_divide(inverse(double_divide(A,C)),inverse(double_divide(B,D))). [para(16(a,1),8(a,1,1,2,2)),rewrite([33(13)])].
% 0.54/0.85 171 double_divide(inverse(double_divide(A,B)),inverse(double_divide(C,double_divide(double_divide(D,E),double_divide(F,double_divide(inverse(double_divide(inverse(double_divide(D,F)),E)),B)))))) = double_divide(A,C). [para(8(a,1),63(a,1,1,1,2))].
% 0.54/0.85 172 double_divide(double_divide(A,B),double_divide(C,double_divide(inverse(double_divide(inverse(double_divide(A,C)),B)),D))) = inverse(D). [para(8(a,1),149(a,1,1)),flip(a)].
% 0.54/0.85 174 inverse(double_divide(A,inverse(B))) = double_divide(inverse(A),B). [back_rewrite(140),rewrite([167(7),92(8),149(3),153(2)]),flip(a)].
% 0.54/0.85 179 double_divide(inverse(double_divide(A,B)),double_divide(inverse(C),B)) = double_divide(A,C). [back_rewrite(171),rewrite([172(10),174(5)])].
% 0.54/0.85 191 double_divide(double_divide(inverse(A),double_divide(B,C)),D) = double_divide(A,inverse(double_divide(inverse(double_divide(B,D)),C))). [back_rewrite(90),rewrite([174(4)])].
% 0.54/0.85 196 double_divide(inverse(b1),b1) != double_divide(inverse(a1),a1) | inverse(double_divide(a2,double_divide(inverse(b2),b2))) != a2 | inverse(double_divide(inverse(double_divide(c3,b3)),a3)) != double_divide(inverse(c3),double_divide(b3,a3)) | inverse(double_divide(b4,a4)) != inverse(double_divide(a4,b4)) # answer(prove_these_axioms). [back_rewrite(4),rewrite([174(5),174(9),174(15),174(32)])].
% 0.54/0.85 198 double_divide(A,double_divide(inverse(double_divide(B,A)),C)) = inverse(double_divide(B,C)). [back_rewrite(159),rewrite([179(8)])].
% 0.54/0.85 202 double_divide(inverse(double_divide(inverse(double_divide(A,B)),C)),double_divide(B,D)) = inverse(double_divide(double_divide(A,C),D)). [back_rewrite(79),rewrite([179(6),198(11),149(10)]),flip(a)].
% 0.54/0.85 203 inverse(double_divide(inverse(A),double_divide(B,C))) = double_divide(B,inverse(double_divide(C,A))). [back_rewrite(37),rewrite([179(7)])].
% 0.54/0.85 204 double_divide(A,double_divide(A,inverse(double_divide(B,C)))) = inverse(double_divide(B,C)). [back_rewrite(35),rewrite([179(5)]),flip(a)].
% 0.54/0.85 208 double_divide(A,inverse(double_divide(B,double_divide(inverse(double_divide(B,C)),A)))) = C. [back_rewrite(46),rewrite([191(5),174(7),198(7)])].
% 0.54/0.85 218 inverse(double_divide(A,double_divide(A,B))) = inverse(B). [back_rewrite(160),rewrite([198(5)])].
% 0.54/0.85 221 double_divide(inverse(double_divide(A,B)),inverse(double_divide(double_divide(double_divide(C,D),E),E))) = double_divide(inverse(double_divide(inverse(double_divide(C,A)),D)),B). [back_rewrite(78),rewrite([198(8),149(7),203(8)])].
% 0.54/0.85 223 double_divide(inverse(double_divide(A,B)),double_divide(A,inverse(C))) = double_divide(B,C). [back_rewrite(50),rewrite([198(4),149(3)]),flip(a)].
% 0.54/0.85 226 double_divide(inverse(double_divide(A,B)),C) = double_divide(A,inverse(double_divide(B,C))). [back_rewrite(33),rewrite([198(6),149(5)])].
% 0.54/0.85 230 inverse(double_divide(A,double_divide(B,inverse(double_divide(A,C))))) = double_divide(C,B). [back_rewrite(19),rewrite([226(5),153(3),174(4),149(2),226(4)]),flip(a)].
% 0.54/0.85 240 double_divide(A,inverse(double_divide(B,double_divide(A,C)))) = double_divide(inverse(C),B). [back_rewrite(58),rewrite([226(4),153(2),174(3),204(7)]),flip(a)].
% 0.54/0.85 242 double_divide(A,double_divide(B,double_divide(inverse(A),double_divide(C,D)))) = double_divide(inverse(C),double_divide(B,D)). [back_rewrite(12),rewrite([226(5),153(3),174(4),226(6),174(7),191(7),226(6),174(7)]),flip(a)].
% 0.54/0.85 251 double_divide(A,B) = double_divide(B,A). [back_rewrite(223),rewrite([226(5),240(5),149(2)])].
% 0.54/0.85 252 double_divide(A,double_divide(inverse(B),double_divide(C,D))) = double_divide(C,double_divide(inverse(A),double_divide(D,B))). [back_rewrite(221),rewrite([251(4),251(5),218(6),226(5),174(4),251(5),251(7),174(8),251(8)]),flip(a)].
% 0.54/0.85 254 double_divide(A,double_divide(A,B)) = B. [back_rewrite(208),rewrite([251(3),230(5),251(1)])].
% 0.54/0.85 256 inverse(double_divide(A,double_divide(B,C))) = double_divide(C,double_divide(A,inverse(B))). [back_rewrite(202),rewrite([251(3),174(4),191(5),251(4),240(4),251(2),174(3),251(2),251(5)]),flip(a)].
% 0.54/0.85 259 double_divide(b1,inverse(b1)) != double_divide(a1,inverse(a1)) | double_divide(inverse(c3),double_divide(a3,b3)) != double_divide(inverse(a3),double_divide(b3,c3)) # answer(prove_these_axioms). [back_rewrite(196),rewrite([251(4),251(8),251(14),256(16),153(16),251(15),251(18),174(19),251(23),251(28)]),flip(c),xx(b),xx(d)].
% 0.54/0.85 302 double_divide(A,double_divide(B,A)) = B. [para(254(a,1),251(a,1)),rewrite([251(1),251(2)]),flip(a)].
% 0.54/0.85 312 double_divide(A,inverse(A)) = double_divide(B,inverse(B)). [para(302(a,1),242(a,1,2)),rewrite([251(5),302(5),251(4)])].
% 0.54/0.85 320 double_divide(A,inverse(A)) = c_0. [new_symbol(312)].
% 0.54/0.85 321 double_divide(inverse(c3),double_divide(a3,b3)) != double_divide(inverse(a3),double_divide(b3,c3)) # answer(prove_these_axioms). [back_unit_del(259),rewrite([320(4),320(5)]),xx(a)].
% 0.54/0.85 346 double_divide(inverse(A),double_divide(B,C)) = double_divide(inverse(C),double_divide(A,B)). [para(252(a,2),242(a,1,2)),rewrite([254(5),251(5)])].
% 0.54/0.85 347 $F # answer(prove_these_axioms). [resolve(346,a,321,a(flip))].
% 0.54/0.85
% 0.54/0.85 % SZS output end Refutation
% 0.54/0.85 ============================== end of proof ==========================
% 0.54/0.85
% 0.54/0.85 ============================== STATISTICS ============================
% 0.54/0.85
% 0.54/0.85 Given=26. Generated=717. Kept=345. proofs=1.
% 0.54/0.85 Usable=11. Sos=50. Demods=48. Limbo=15, Disabled=271. Hints=0.
% 0.54/0.85 Megabytes=0.36.
% 0.54/0.85 User_CPU=0.05, System_CPU=0.00, Wall_clock=0.
% 0.54/0.85
% 0.54/0.85 ============================== end of statistics =====================
% 0.54/0.85
% 0.54/0.85 ============================== end of search =========================
% 0.54/0.85
% 0.54/0.85 THEOREM PROVED
% 0.54/0.85 % SZS status Unsatisfiable
% 0.54/0.85
% 0.54/0.85 Exiting with 1 proof.
% 0.54/0.85
% 0.54/0.85 Process 9509 exit (max_proofs) Tue Jun 14 05:16:28 2022
% 0.54/0.85 Prover9 interrupted
%------------------------------------------------------------------------------