TSTP Solution File: GRP095-1 by Otter---3.3

View Problem - Process Solution

%------------------------------------------------------------------------------
% File     : Otter---3.3
% Problem  : GRP095-1 : TPTP v8.1.0. Bugfixed v2.7.0.
% Transfm  : none
% Format   : tptp:raw
% Command  : otter-tptp-script %s

% Computer : n005.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  : 300s
% DateTime : Wed Jul 27 12:56:02 EDT 2022

% Result   : Unsatisfiable 1.65s 1.91s
% Output   : Refutation 1.65s
% Verified : 
% SZS Type : Refutation
%            Derivation depth      :   17
%            Number of leaves      :    6
% Syntax   : Number of clauses     :   54 (  48 unt;   0 nHn;   7 RR)
%            Number of literals    :   72 (  71 equ;  24 neg)
%            Maximal clause size   :    4 (   1 avg)
%            Maximal term depth    :    6 (   2 avg)
%            Number of predicates  :    2 (   0 usr;   1 prp; 0-2 aty)
%            Number of functors    :   13 (  13 usr;  10 con; 0-2 aty)
%            Number of variables   :   99 (   0 sgn)

% Comments : 
%------------------------------------------------------------------------------
cnf(1,axiom,
    ( 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) ),
    file('GRP095-1.p',unknown),
    [] ).

cnf(2,plain,
    ( multiply(inverse(b1),b1) != multiply(inverse(a1),a1)
    | multiply(multiply(inverse(b2),b2),a2) != a2
    | multiply(multiply(a3,b3),c3) != multiply(a3,multiply(b3,c3))
    | multiply(b4,a4) != multiply(a4,b4) ),
    inference(flip,[status(thm),theory(equality)],[inference(flip,[status(thm),theory(equality)],[inference(copy,[status(thm)],[1])])]),
    [iquote('copy,1,flip.1,flip.4')] ).

cnf(3,axiom,
    A = A,
    file('GRP095-1.p',unknown),
    [] ).

cnf(4,axiom,
    divide(divide(identity,A),divide(divide(divide(B,A),C),B)) = C,
    file('GRP095-1.p',unknown),
    [] ).

cnf(7,axiom,
    multiply(A,B) = divide(A,divide(identity,B)),
    file('GRP095-1.p',unknown),
    [] ).

cnf(9,axiom,
    inverse(A) = divide(identity,A),
    file('GRP095-1.p',unknown),
    [] ).

cnf(10,axiom,
    identity = divide(A,A),
    file('GRP095-1.p',unknown),
    [] ).

cnf(12,plain,
    divide(A,A) = identity,
    inference(flip,[status(thm),theory(equality)],[inference(copy,[status(thm)],[10])]),
    [iquote('copy,10,flip.1')] ).

cnf(13,plain,
    ( identity != identity
    | divide(identity,divide(identity,a2)) != a2
    | divide(divide(a3,divide(identity,b3)),divide(identity,c3)) != divide(a3,divide(identity,divide(b3,divide(identity,c3))))
    | divide(a4,divide(identity,b4)) != divide(b4,divide(identity,a4)) ),
    inference(flip,[status(thm),theory(equality)],[inference(demod,[status(thm),theory(equality)],[inference(back_demod,[status(thm)],[2]),9,7,12,9,7,12,9,7,12,7,7,7,7,7,7,7])]),
    [iquote('back_demod,2,demod,9,7,12,9,7,12,9,7,12,7,7,7,7,7,7,7,flip.4')] ).

cnf(14,plain,
    divide(identity,divide(divide(divide(A,identity),B),A)) = B,
    inference(para_into,[status(thm),theory(equality)],[4,12]),
    [iquote('para_into,4.1.1.1,11.1.1')] ).

cnf(16,plain,
    divide(divide(identity,A),divide(divide(identity,B),A)) = B,
    inference(para_into,[status(thm),theory(equality)],[4,12]),
    [iquote('para_into,4.1.1.2.1.1,11.1.1')] ).

cnf(18,plain,
    divide(divide(identity,divide(divide(divide(A,B),C),A)),divide(divide(C,D),divide(identity,B))) = D,
    inference(para_into,[status(thm),theory(equality)],[4,4]),
    [iquote('para_into,4.1.1.2.1.1,4.1.1')] ).

cnf(20,plain,
    divide(divide(identity,A),divide(identity,B)) = divide(B,A),
    inference(para_into,[status(thm),theory(equality)],[4,12]),
    [iquote('para_into,4.1.1.2.1,11.1.1')] ).

cnf(22,plain,
    divide(divide(divide(A,B),C),A) = divide(divide(identity,B),divide(C,identity)),
    inference(flip,[status(thm),theory(equality)],[inference(para_into,[status(thm),theory(equality)],[4,4])]),
    [iquote('para_into,4.1.1.2.1,4.1.1,flip.1')] ).

cnf(24,plain,
    divide(divide(identity,divide(divide(identity,A),divide(B,identity))),divide(divide(B,C),divide(identity,A))) = C,
    inference(demod,[status(thm),theory(equality)],[inference(back_demod,[status(thm)],[18]),22]),
    [iquote('back_demod,18,demod,22')] ).

cnf(26,plain,
    divide(identity,divide(identity,divide(A,identity))) = A,
    inference(demod,[status(thm),theory(equality)],[inference(back_demod,[status(thm)],[14]),22,12]),
    [iquote('back_demod,14,demod,22,12')] ).

cnf(30,plain,
    divide(A,divide(divide(identity,B),divide(identity,divide(A,identity)))) = B,
    inference(para_into,[status(thm),theory(equality)],[16,26]),
    [iquote('para_into,16.1.1.1,26.1.1')] ).

cnf(32,plain,
    divide(identity,divide(divide(identity,A),identity)) = A,
    inference(para_into,[status(thm),theory(equality)],[16,12]),
    [iquote('para_into,16.1.1.1,11.1.1')] ).

cnf(35,plain,
    divide(divide(identity,divide(divide(identity,A),B)),A) = B,
    inference(para_into,[status(thm),theory(equality)],[16,16]),
    [iquote('para_into,16.1.1.2,16.1.1')] ).

cnf(41,plain,
    divide(divide(identity,A),identity) = divide(identity,divide(A,identity)),
    inference(flip,[status(thm),theory(equality)],[inference(para_into,[status(thm),theory(equality)],[32,32])]),
    [iquote('para_into,32.1.1.2.1,32.1.1,flip.1')] ).

cnf(42,plain,
    divide(A,divide(identity,B)) = divide(B,divide(identity,divide(A,identity))),
    inference(para_into,[status(thm),theory(equality)],[20,26]),
    [iquote('para_into,20.1.1.1,26.1.1')] ).

cnf(43,plain,
    divide(identity,divide(identity,A)) = divide(A,identity),
    inference(para_into,[status(thm),theory(equality)],[20,12]),
    [iquote('para_into,20.1.1.1,11.1.1')] ).

cnf(46,plain,
    divide(identity,divide(A,identity)) = divide(identity,A),
    inference(demod,[status(thm),theory(equality)],[inference(para_into,[status(thm),theory(equality)],[20,12]),41]),
    [iquote('para_into,20.1.1.2,11.1.1,demod,41')] ).

cnf(47,plain,
    divide(A,divide(identity,B)) = divide(B,divide(identity,A)),
    inference(demod,[status(thm),theory(equality)],[inference(flip,[status(thm),theory(equality)],[inference(copy,[status(thm)],[42])]),46]),
    [iquote('copy,42,flip.1,demod,46')] ).

cnf(48,plain,
    divide(A,identity) = divide(identity,divide(identity,A)),
    inference(flip,[status(thm),theory(equality)],[inference(copy,[status(thm)],[43])]),
    [iquote('copy,43,flip.1')] ).

cnf(54,plain,
    divide(A,divide(divide(identity,B),divide(identity,A))) = B,
    inference(demod,[status(thm),theory(equality)],[inference(back_demod,[status(thm)],[30]),46]),
    [iquote('back_demod,30,demod,46')] ).

cnf(57,plain,
    divide(identity,divide(identity,A)) = A,
    inference(demod,[status(thm),theory(equality)],[inference(back_demod,[status(thm)],[26]),46]),
    [iquote('back_demod,26,demod,46')] ).

cnf(59,plain,
    divide(A,identity) = A,
    inference(flip,[status(thm),theory(equality)],[inference(demod,[status(thm),theory(equality)],[inference(flip,[status(thm),theory(equality)],[inference(copy,[status(thm)],[48])]),57])]),
    [iquote('copy,48,flip.1,demod,57,flip.1')] ).

cnf(60,plain,
    ( identity != identity
    | a2 != a2
    | divide(divide(a3,divide(identity,b3)),divide(identity,c3)) != divide(a3,divide(identity,divide(b3,divide(identity,c3))))
    | divide(a4,divide(identity,b4)) != divide(b4,divide(identity,a4)) ),
    inference(demod,[status(thm),theory(equality)],[inference(back_demod,[status(thm)],[13]),57]),
    [iquote('back_demod,13,demod,57')] ).

cnf(63,plain,
    divide(divide(identity,divide(divide(identity,A),B)),divide(divide(B,C),divide(identity,A))) = C,
    inference(demod,[status(thm),theory(equality)],[inference(back_demod,[status(thm)],[24]),59]),
    [iquote('back_demod,24,demod,59')] ).

cnf(74,plain,
    divide(A,divide(A,B)) = B,
    inference(demod,[status(thm),theory(equality)],[inference(para_into,[status(thm),theory(equality)],[35,20]),57]),
    [iquote('para_into,35.1.1,20.1.1,demod,57')] ).

cnf(75,plain,
    divide(A,divide(B,divide(identity,A))) = divide(identity,B),
    inference(para_from,[status(thm),theory(equality)],[47,74]),
    [iquote('para_from,47.1.1,73.1.1.2')] ).

cnf(76,plain,
    divide(identity,A) = divide(B,divide(A,divide(identity,B))),
    inference(flip,[status(thm),theory(equality)],[inference(copy,[status(thm)],[75])]),
    [iquote('copy,75,flip.1')] ).

cnf(78,plain,
    ( identity != identity
    | a2 != a2
    | divide(a3,divide(identity,divide(b3,divide(identity,c3)))) != divide(c3,divide(identity,divide(a3,divide(identity,b3))))
    | divide(a4,divide(identity,b4)) != divide(b4,divide(identity,a4)) ),
    inference(flip,[status(thm),theory(equality)],[inference(para_into,[status(thm),theory(equality)],[60,47])]),
    [iquote('para_into,60.3.1,47.1.1,flip.3')] ).

cnf(121,plain,
    divide(A,divide(divide(divide(A,B),C),divide(identity,B))) = C,
    inference(demod,[status(thm),theory(equality)],[inference(para_into,[status(thm),theory(equality)],[63,75]),74,74]),
    [iquote('para_into,63.1.1.1.2,75.1.1,demod,74,74')] ).

cnf(143,plain,
    divide(identity,divide(divide(A,B),A)) = B,
    inference(demod,[status(thm),theory(equality)],[inference(para_into,[status(thm),theory(equality)],[63,75]),74,12,59]),
    [iquote('para_into,63.1.1.2,75.1.1,demod,74,12,59')] ).

cnf(151,plain,
    divide(divide(A,B),A) = divide(identity,B),
    inference(flip,[status(thm),theory(equality)],[inference(demod,[status(thm),theory(equality)],[inference(para_into,[status(thm),theory(equality)],[143,143]),59])]),
    [iquote('para_into,143.1.1.2.1,143.1.1,demod,59,flip.1')] ).

cnf(154,plain,
    divide(identity,divide(A,B)) = divide(B,A),
    inference(para_into,[status(thm),theory(equality)],[143,74]),
    [iquote('para_into,143.1.1.2.1,73.1.1')] ).

cnf(158,plain,
    divide(divide(identity,A),divide(identity,B)) = divide(identity,divide(A,B)),
    inference(flip,[status(thm),theory(equality)],[inference(para_into,[status(thm),theory(equality)],[143,54])]),
    [iquote('para_into,143.1.1.2.1,54.1.1,flip.1')] ).

cnf(165,plain,
    divide(A,divide(identity,divide(B,A))) = B,
    inference(demod,[status(thm),theory(equality)],[inference(para_into,[status(thm),theory(equality)],[143,76]),151,158]),
    [iquote('para_into,143.1.1,76.1.1,demod,151,158')] ).

cnf(181,plain,
    divide(A,B) = divide(identity,divide(B,A)),
    inference(flip,[status(thm),theory(equality)],[inference(copy,[status(thm)],[154])]),
    [iquote('copy,154,flip.1')] ).

cnf(183,plain,
    divide(divide(identity,A),B) = divide(identity,divide(A,divide(identity,B))),
    inference(para_into,[status(thm),theory(equality)],[151,75]),
    [iquote('para_into,150.1.1.1,75.1.1')] ).

cnf(206,plain,
    divide(divide(A,B),divide(identity,B)) = A,
    inference(para_from,[status(thm),theory(equality)],[151,74]),
    [iquote('para_from,150.1.1,73.1.1.2')] ).

cnf(210,plain,
    divide(A,divide(B,C)) = divide(divide(C,B),divide(identity,A)),
    inference(para_from,[status(thm),theory(equality)],[154,47]),
    [iquote('para_from,154.1.1,47.1.1.2')] ).

cnf(215,plain,
    divide(divide(A,B),divide(identity,C)) = divide(C,divide(B,A)),
    inference(flip,[status(thm),theory(equality)],[inference(copy,[status(thm)],[210])]),
    [iquote('copy,210,flip.1')] ).

cnf(234,plain,
    ( identity != identity
    | a2 != a2
    | divide(a3,divide(identity,divide(c3,divide(identity,b3)))) != divide(c3,divide(identity,divide(a3,divide(identity,b3))))
    | divide(a4,divide(identity,b4)) != divide(b4,divide(identity,a4)) ),
    inference(demod,[status(thm),theory(equality)],[inference(para_into,[status(thm),theory(equality)],[78,181]),183,74]),
    [iquote('para_into,78.3.1.2.2,181.1.1,demod,183,74')] ).

cnf(240,plain,
    divide(divide(A,B),divide(divide(A,C),B)) = C,
    inference(demod,[status(thm),theory(equality)],[inference(para_into,[status(thm),theory(equality)],[121,206]),74]),
    [iquote('para_into,121.1.1.2.1.1,206.1.1,demod,74')] ).

cnf(306,plain,
    divide(divide(A,B),divide(C,B)) = divide(A,C),
    inference(para_into,[status(thm),theory(equality)],[240,74]),
    [iquote('para_into,240.1.1.2.1,73.1.1')] ).

cnf(308,plain,
    divide(divide(A,divide(divide(A,B),C)),B) = C,
    inference(para_into,[status(thm),theory(equality)],[240,240]),
    [iquote('para_into,240.1.1.2,240.1.1')] ).

cnf(371,plain,
    divide(divide(A,B),divide(identity,C)) = divide(A,divide(B,C)),
    inference(para_into,[status(thm),theory(equality)],[306,151]),
    [iquote('para_into,306.1.1.2,150.1.1')] ).

cnf(394,plain,
    divide(A,divide(B,C)) = divide(C,divide(B,A)),
    inference(demod,[status(thm),theory(equality)],[inference(back_demod,[status(thm)],[215]),371]),
    [iquote('back_demod,215,demod,371')] ).

cnf(432,plain,
    divide(divide(A,B),C) = divide(identity,divide(B,divide(A,C))),
    inference(para_into,[status(thm),theory(equality)],[308,165]),
    [iquote('para_into,308.1.1.1.2,165.1.1')] ).

cnf(615,plain,
    divide(A,divide(B,divide(C,D))) = divide(C,divide(B,divide(A,D))),
    inference(demod,[status(thm),theory(equality)],[inference(para_into,[status(thm),theory(equality)],[432,394]),432,432,74,432,74]),
    [iquote('para_into,431.1.1.1,394.1.1,demod,432,432,74,432,74')] ).

cnf(1415,plain,
    $false,
    inference(hyper,[status(thm)],[615,234,3,3,394]),
    [iquote('hyper,615,234,3,3,394')] ).

%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.10/0.12  % Problem  : GRP095-1 : TPTP v8.1.0. Bugfixed v2.7.0.
% 0.10/0.12  % Command  : otter-tptp-script %s
% 0.12/0.33  % Computer : n005.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  : 300
% 0.12/0.33  % DateTime : Wed Jul 27 05:31:05 EDT 2022
% 0.12/0.33  % CPUTime  : 
% 1.65/1.91  ----- Otter 3.3f, August 2004 -----
% 1.65/1.91  The process was started by sandbox2 on n005.cluster.edu,
% 1.65/1.91  Wed Jul 27 05:31:05 2022
% 1.65/1.91  The command was "./otter".  The process ID is 18784.
% 1.65/1.91  
% 1.65/1.91  set(prolog_style_variables).
% 1.65/1.91  set(auto).
% 1.65/1.91     dependent: set(auto1).
% 1.65/1.91     dependent: set(process_input).
% 1.65/1.91     dependent: clear(print_kept).
% 1.65/1.91     dependent: clear(print_new_demod).
% 1.65/1.91     dependent: clear(print_back_demod).
% 1.65/1.91     dependent: clear(print_back_sub).
% 1.65/1.91     dependent: set(control_memory).
% 1.65/1.91     dependent: assign(max_mem, 12000).
% 1.65/1.91     dependent: assign(pick_given_ratio, 4).
% 1.65/1.91     dependent: assign(stats_level, 1).
% 1.65/1.91     dependent: assign(max_seconds, 10800).
% 1.65/1.91  clear(print_given).
% 1.65/1.91  
% 1.65/1.91  list(usable).
% 1.65/1.91  0 [] A=A.
% 1.65/1.91  0 [] divide(divide(identity,X),divide(divide(divide(Y,X),Z),Y))=Z.
% 1.65/1.91  0 [] multiply(X,Y)=divide(X,divide(identity,Y)).
% 1.65/1.91  0 [] inverse(X)=divide(identity,X).
% 1.65/1.91  0 [] identity=divide(X,X).
% 1.65/1.91  0 [] 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).
% 1.65/1.91  end_of_list.
% 1.65/1.91  
% 1.65/1.91  SCAN INPUT: prop=0, horn=1, equality=1, symmetry=0, max_lits=4.
% 1.65/1.91  
% 1.65/1.91  This is a Horn set with equality.  The strategy will be
% 1.65/1.91  Knuth-Bendix and hyper_res, with positive clauses in
% 1.65/1.91  sos and nonpositive clauses in usable.
% 1.65/1.91  
% 1.65/1.91     dependent: set(knuth_bendix).
% 1.65/1.91     dependent: set(anl_eq).
% 1.65/1.91     dependent: set(para_from).
% 1.65/1.91     dependent: set(para_into).
% 1.65/1.91     dependent: clear(para_from_right).
% 1.65/1.91     dependent: clear(para_into_right).
% 1.65/1.91     dependent: set(para_from_vars).
% 1.65/1.91     dependent: set(eq_units_both_ways).
% 1.65/1.91     dependent: set(dynamic_demod_all).
% 1.65/1.91     dependent: set(dynamic_demod).
% 1.65/1.91     dependent: set(order_eq).
% 1.65/1.91     dependent: set(back_demod).
% 1.65/1.91     dependent: set(lrpo).
% 1.65/1.91     dependent: set(hyper_res).
% 1.65/1.91     dependent: clear(order_hyper).
% 1.65/1.91  
% 1.65/1.91  ------------> process usable:
% 1.65/1.91  ** KEPT (pick-wt=35): 2 [copy,1,flip.1,flip.4] multiply(inverse(b1),b1)!=multiply(inverse(a1),a1)|multiply(multiply(inverse(b2),b2),a2)!=a2|multiply(multiply(a3,b3),c3)!=multiply(a3,multiply(b3,c3))|multiply(b4,a4)!=multiply(a4,b4).
% 1.65/1.91  
% 1.65/1.91  ------------> process sos:
% 1.65/1.91  ** KEPT (pick-wt=3): 3 [] A=A.
% 1.65/1.91  ** KEPT (pick-wt=13): 4 [] divide(divide(identity,A),divide(divide(divide(B,A),C),B))=C.
% 1.65/1.91  ---> New Demodulator: 5 [new_demod,4] divide(divide(identity,A),divide(divide(divide(B,A),C),B))=C.
% 1.65/1.91  ** KEPT (pick-wt=9): 6 [] multiply(A,B)=divide(A,divide(identity,B)).
% 1.65/1.91  ---> New Demodulator: 7 [new_demod,6] multiply(A,B)=divide(A,divide(identity,B)).
% 1.65/1.91  ** KEPT (pick-wt=6): 8 [] inverse(A)=divide(identity,A).
% 1.65/1.91  ---> New Demodulator: 9 [new_demod,8] inverse(A)=divide(identity,A).
% 1.65/1.91  ** KEPT (pick-wt=5): 11 [copy,10,flip.1] divide(A,A)=identity.
% 1.65/1.91  ---> New Demodulator: 12 [new_demod,11] divide(A,A)=identity.
% 1.65/1.91    Following clause subsumed by 3 during input processing: 0 [copy,3,flip.1] A=A.
% 1.65/1.91  >>>> Starting back demodulation with 5.
% 1.65/1.91  >>>> Starting back demodulation with 7.
% 1.65/1.91      >> back demodulating 2 with 7.
% 1.65/1.91  >>>> Starting back demodulation with 9.
% 1.65/1.91  >>>> Starting back demodulation with 12.
% 1.65/1.91  
% 1.65/1.91  ======= end of input processing =======
% 1.65/1.91  
% 1.65/1.91  =========== start of search ===========
% 1.65/1.91  
% 1.65/1.91  -------- PROOF -------- 
% 1.65/1.91  
% 1.65/1.91  -----> EMPTY CLAUSE at   0.12 sec ----> 1415 [hyper,615,234,3,3,394] $F.
% 1.65/1.91  
% 1.65/1.91  Length of proof is 47.  Level of proof is 16.
% 1.65/1.91  
% 1.65/1.91  ---------------- PROOF ----------------
% 1.65/1.91  % SZS status Unsatisfiable
% 1.65/1.91  % SZS output start Refutation
% See solution above
% 1.65/1.91  ------------ end of proof -------------
% 1.65/1.91  
% 1.65/1.91  
% 1.65/1.91  Search stopped by max_proofs option.
% 1.65/1.91  
% 1.65/1.91  
% 1.65/1.91  Search stopped by max_proofs option.
% 1.65/1.91  
% 1.65/1.91  ============ end of search ============
% 1.65/1.91  
% 1.65/1.91  -------------- statistics -------------
% 1.65/1.91  clauses given                 78
% 1.65/1.91  clauses generated           4708
% 1.65/1.91  clauses kept                1168
% 1.65/1.91  clauses forward subsumed    4613
% 1.65/1.91  clauses back subsumed        149
% 1.65/1.91  Kbytes malloced             2929
% 1.65/1.91  
% 1.65/1.91  ----------- times (seconds) -----------
% 1.65/1.91  user CPU time          0.12          (0 hr, 0 min, 0 sec)
% 1.65/1.91  system CPU time        0.01          (0 hr, 0 min, 0 sec)
% 1.65/1.91  wall-clock time        2             (0 hr, 0 min, 2 sec)
% 1.65/1.91  
% 1.65/1.91  That finishes the proof of the theorem.
% 1.65/1.91  
% 1.65/1.91  Process 18784 finished Wed Jul 27 05:31:07 2022
% 1.65/1.91  Otter interrupted
% 1.65/1.91  PROOF FOUND
%------------------------------------------------------------------------------