TSTP Solution File: KRS113+1 by Otter---3.3

View Problem - Process Solution

%------------------------------------------------------------------------------
% File     : Otter---3.3
% Problem  : KRS113+1 : TPTP v8.1.0. Released v3.1.0.
% Transfm  : none
% Format   : tptp:raw
% Command  : otter-tptp-script %s

% Computer : n016.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 13:01:10 EDT 2022

% Result   : Unsatisfiable 1.73s 1.95s
% Output   : Refutation 1.73s
% Verified : 
% SZS Type : Refutation
%            Derivation depth      :    6
%            Number of leaves      :   12
% Syntax   : Number of clauses     :   24 (  13 unt;   1 nHn;  23 RR)
%            Number of literals    :   38 (   2 equ;  14 neg)
%            Maximal clause size   :    4 (   1 avg)
%            Maximal term depth    :    2 (   1 avg)
%            Number of predicates  :   10 (   8 usr;   1 prp; 0-2 aty)
%            Number of functors    :    5 (   5 usr;   1 con; 0-1 aty)
%            Number of variables   :   17 (   1 sgn)

% Comments : 
%------------------------------------------------------------------------------
cnf(19,axiom,
    ( ~ cUnsatisfiable(A)
    | ~ rr(A,B)
    | ~ rr(A,C)
    | B = C ),
    file('KRS113+1.p',unknown),
    [] ).

cnf(20,axiom,
    ( ~ cUnsatisfiable(A)
    | rr(A,dollar_f1(A)) ),
    file('KRS113+1.p',unknown),
    [] ).

cnf(21,axiom,
    ( ~ cUnsatisfiable(A)
    | ca_Vx2(dollar_f1(A)) ),
    file('KRS113+1.p',unknown),
    [] ).

cnf(22,axiom,
    ( ~ cUnsatisfiable(A)
    | rs(A,dollar_f2(A)) ),
    file('KRS113+1.p',unknown),
    [] ).

cnf(24,axiom,
    ( ~ cUnsatisfiable(A)
    | cpxcomp(A) ),
    file('KRS113+1.p',unknown),
    [] ).

cnf(28,axiom,
    ( ~ cp(A)
    | ~ ra_Px1(A,B) ),
    file('KRS113+1.p',unknown),
    [] ).

cnf(29,axiom,
    ( ~ cpxcomp(A)
    | ra_Px1(A,dollar_f6(A)) ),
    file('KRS113+1.p',unknown),
    [] ).

cnf(31,axiom,
    ( ~ ca_Vx2(A)
    | ~ rinvS(A,B)
    | cp(B) ),
    file('KRS113+1.p',unknown),
    [] ).

cnf(34,axiom,
    ( rinvS(A,B)
    | ~ rs(B,A) ),
    file('KRS113+1.p',unknown),
    [] ).

cnf(35,axiom,
    ( ~ rs(A,B)
    | rr(A,B) ),
    file('KRS113+1.p',unknown),
    [] ).

cnf(40,axiom,
    ( cp(A)
    | ra_Px1(A,dollar_f5(A)) ),
    file('KRS113+1.p',unknown),
    [] ).

cnf(42,axiom,
    cUnsatisfiable(i2003_11_14_17_21_22376),
    file('KRS113+1.p',unknown),
    [] ).

cnf(43,plain,
    cpxcomp(i2003_11_14_17_21_22376),
    inference(hyper,[status(thm)],[42,24]),
    [iquote('hyper,42,24')] ).

cnf(45,plain,
    rs(i2003_11_14_17_21_22376,dollar_f2(i2003_11_14_17_21_22376)),
    inference(hyper,[status(thm)],[42,22]),
    [iquote('hyper,42,22')] ).

cnf(46,plain,
    ca_Vx2(dollar_f1(i2003_11_14_17_21_22376)),
    inference(hyper,[status(thm)],[42,21]),
    [iquote('hyper,42,21')] ).

cnf(47,plain,
    rr(i2003_11_14_17_21_22376,dollar_f1(i2003_11_14_17_21_22376)),
    inference(hyper,[status(thm)],[42,20]),
    [iquote('hyper,42,20')] ).

cnf(49,plain,
    ra_Px1(i2003_11_14_17_21_22376,dollar_f6(i2003_11_14_17_21_22376)),
    inference(hyper,[status(thm)],[43,29]),
    [iquote('hyper,43,29')] ).

cnf(55,plain,
    rr(i2003_11_14_17_21_22376,dollar_f2(i2003_11_14_17_21_22376)),
    inference(hyper,[status(thm)],[45,35]),
    [iquote('hyper,45,35')] ).

cnf(56,plain,
    rinvS(dollar_f2(i2003_11_14_17_21_22376),i2003_11_14_17_21_22376),
    inference(hyper,[status(thm)],[45,34]),
    [iquote('hyper,45,34')] ).

cnf(67,plain,
    ra_Px1(i2003_11_14_17_21_22376,dollar_f5(i2003_11_14_17_21_22376)),
    inference(hyper,[status(thm)],[40,28,49]),
    [iquote('hyper,40,28,49')] ).

cnf(70,plain,
    dollar_f2(i2003_11_14_17_21_22376) = dollar_f1(i2003_11_14_17_21_22376),
    inference(flip,[status(thm),theory(equality)],[inference(hyper,[status(thm)],[55,19,42,47])]),
    [iquote('hyper,55,19,42,47,flip.1')] ).

cnf(73,plain,
    rinvS(dollar_f1(i2003_11_14_17_21_22376),i2003_11_14_17_21_22376),
    inference(demod,[status(thm),theory(equality)],[inference(back_demod,[status(thm)],[56]),70]),
    [iquote('back_demod,56,demod,70')] ).

cnf(81,plain,
    cp(i2003_11_14_17_21_22376),
    inference(hyper,[status(thm)],[73,31,46]),
    [iquote('hyper,73,31,46')] ).

cnf(86,plain,
    $false,
    inference(hyper,[status(thm)],[81,28,67]),
    [iquote('hyper,81,28,67')] ).

%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.11/0.11  % Problem  : KRS113+1 : TPTP v8.1.0. Released v3.1.0.
% 0.11/0.12  % Command  : otter-tptp-script %s
% 0.12/0.33  % Computer : n016.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 03:48:22 EDT 2022
% 0.12/0.33  % CPUTime  : 
% 1.73/1.94  ----- Otter 3.3f, August 2004 -----
% 1.73/1.94  The process was started by sandbox on n016.cluster.edu,
% 1.73/1.94  Wed Jul 27 03:48:22 2022
% 1.73/1.94  The command was "./otter".  The process ID is 26304.
% 1.73/1.94  
% 1.73/1.94  set(prolog_style_variables).
% 1.73/1.94  set(auto).
% 1.73/1.94     dependent: set(auto1).
% 1.73/1.94     dependent: set(process_input).
% 1.73/1.94     dependent: clear(print_kept).
% 1.73/1.94     dependent: clear(print_new_demod).
% 1.73/1.94     dependent: clear(print_back_demod).
% 1.73/1.94     dependent: clear(print_back_sub).
% 1.73/1.94     dependent: set(control_memory).
% 1.73/1.94     dependent: assign(max_mem, 12000).
% 1.73/1.94     dependent: assign(pick_given_ratio, 4).
% 1.73/1.94     dependent: assign(stats_level, 1).
% 1.73/1.94     dependent: assign(max_seconds, 10800).
% 1.73/1.94  clear(print_given).
% 1.73/1.94  
% 1.73/1.94  formula_list(usable).
% 1.73/1.94  all A (A=A).
% 1.73/1.94  all A B (A=B&cUnsatisfiable(A)->cUnsatisfiable(B)).
% 1.73/1.94  all A B (A=B&ca_Vx2(A)->ca_Vx2(B)).
% 1.73/1.94  all A B (A=B&cowlNothing(A)->cowlNothing(B)).
% 1.73/1.94  all A B (A=B&cowlThing(A)->cowlThing(B)).
% 1.73/1.94  all A B (A=B&cp(A)->cp(B)).
% 1.73/1.94  all A B (A=B&cpxcomp(A)->cpxcomp(B)).
% 1.73/1.94  all A B C (A=B&ra_Px1(A,C)->ra_Px1(B,C)).
% 1.73/1.94  all A B C (A=B&ra_Px1(C,A)->ra_Px1(C,B)).
% 1.73/1.94  all A B C (A=B&rinvS(A,C)->rinvS(B,C)).
% 1.73/1.94  all A B C (A=B&rinvS(C,A)->rinvS(C,B)).
% 1.73/1.94  all A B C (A=B&rr(A,C)->rr(B,C)).
% 1.73/1.94  all A B C (A=B&rr(C,A)->rr(C,B)).
% 1.73/1.94  all A B C (A=B&rs(A,C)->rs(B,C)).
% 1.73/1.94  all A B C (A=B&rs(C,A)->rs(C,B)).
% 1.73/1.94  all A B (A=B&xsd_integer(A)->xsd_integer(B)).
% 1.73/1.94  all A B (A=B&xsd_string(A)->xsd_string(B)).
% 1.73/1.94  all X (cowlThing(X)& -cowlNothing(X)).
% 1.73/1.94  all X (xsd_string(X)<-> -xsd_integer(X)).
% 1.73/1.94  all X (cUnsatisfiable(X)<-> (all Y0 Y1 (rr(X,Y0)&rr(X,Y1)->Y0=Y1))& (exists Y (rr(X,Y)&ca_Vx2(Y)))& (exists Y (rs(X,Y)&cp(Y)))&cpxcomp(X)).
% 1.73/1.94  all X (cp(X)<-> -(exists Y ra_Px1(X,Y))).
% 1.73/1.94  all X (cpxcomp(X)<-> (exists Y0 ra_Px1(X,Y0))).
% 1.73/1.94  all X (ca_Vx2(X)<-> (all Y (rinvS(X,Y)->cp(Y)))).
% 1.73/1.94  all X Y (rinvS(X,Y)<->rs(Y,X)).
% 1.73/1.94  cUnsatisfiable(i2003_11_14_17_21_22376).
% 1.73/1.94  all X Y (rs(X,Y)->rr(X,Y)).
% 1.73/1.94  end_of_list.
% 1.73/1.94  
% 1.73/1.94  -------> usable clausifies to:
% 1.73/1.94  
% 1.73/1.94  list(usable).
% 1.73/1.94  0 [] A=A.
% 1.73/1.94  0 [] A!=B| -cUnsatisfiable(A)|cUnsatisfiable(B).
% 1.73/1.94  0 [] A!=B| -ca_Vx2(A)|ca_Vx2(B).
% 1.73/1.94  0 [] A!=B| -cowlNothing(A)|cowlNothing(B).
% 1.73/1.94  0 [] A!=B| -cowlThing(A)|cowlThing(B).
% 1.73/1.94  0 [] A!=B| -cp(A)|cp(B).
% 1.73/1.94  0 [] A!=B| -cpxcomp(A)|cpxcomp(B).
% 1.73/1.94  0 [] A!=B| -ra_Px1(A,C)|ra_Px1(B,C).
% 1.73/1.94  0 [] A!=B| -ra_Px1(C,A)|ra_Px1(C,B).
% 1.73/1.94  0 [] A!=B| -rinvS(A,C)|rinvS(B,C).
% 1.73/1.94  0 [] A!=B| -rinvS(C,A)|rinvS(C,B).
% 1.73/1.94  0 [] A!=B| -rr(A,C)|rr(B,C).
% 1.73/1.94  0 [] A!=B| -rr(C,A)|rr(C,B).
% 1.73/1.94  0 [] A!=B| -rs(A,C)|rs(B,C).
% 1.73/1.94  0 [] A!=B| -rs(C,A)|rs(C,B).
% 1.73/1.94  0 [] A!=B| -xsd_integer(A)|xsd_integer(B).
% 1.73/1.94  0 [] A!=B| -xsd_string(A)|xsd_string(B).
% 1.73/1.94  0 [] cowlThing(X).
% 1.73/1.94  0 [] -cowlNothing(X).
% 1.73/1.94  0 [] -xsd_string(X)| -xsd_integer(X).
% 1.73/1.94  0 [] xsd_string(X)|xsd_integer(X).
% 1.73/1.94  0 [] -cUnsatisfiable(X)| -rr(X,Y0)| -rr(X,Y1)|Y0=Y1.
% 1.73/1.94  0 [] -cUnsatisfiable(X)|rr(X,$f1(X)).
% 1.73/1.94  0 [] -cUnsatisfiable(X)|ca_Vx2($f1(X)).
% 1.73/1.94  0 [] -cUnsatisfiable(X)|rs(X,$f2(X)).
% 1.73/1.94  0 [] -cUnsatisfiable(X)|cp($f2(X)).
% 1.73/1.94  0 [] -cUnsatisfiable(X)|cpxcomp(X).
% 1.73/1.94  0 [] cUnsatisfiable(X)|rr(X,$f4(X))| -rr(X,Y)| -ca_Vx2(Y)| -rs(X,X1)| -cp(X1)| -cpxcomp(X).
% 1.73/1.94  0 [] cUnsatisfiable(X)|rr(X,$f3(X))| -rr(X,Y)| -ca_Vx2(Y)| -rs(X,X1)| -cp(X1)| -cpxcomp(X).
% 1.73/1.94  0 [] cUnsatisfiable(X)|$f4(X)!=$f3(X)| -rr(X,Y)| -ca_Vx2(Y)| -rs(X,X1)| -cp(X1)| -cpxcomp(X).
% 1.73/1.94  0 [] -cp(X)| -ra_Px1(X,Y).
% 1.73/1.94  0 [] cp(X)|ra_Px1(X,$f5(X)).
% 1.73/1.94  0 [] -cpxcomp(X)|ra_Px1(X,$f6(X)).
% 1.73/1.94  0 [] cpxcomp(X)| -ra_Px1(X,Y0).
% 1.73/1.94  0 [] -ca_Vx2(X)| -rinvS(X,Y)|cp(Y).
% 1.73/1.94  0 [] ca_Vx2(X)|rinvS(X,$f7(X)).
% 1.73/1.94  0 [] ca_Vx2(X)| -cp($f7(X)).
% 1.73/1.94  0 [] -rinvS(X,Y)|rs(Y,X).
% 1.73/1.94  0 [] rinvS(X,Y)| -rs(Y,X).
% 1.73/1.94  0 [] cUnsatisfiable(i2003_11_14_17_21_22376).
% 1.73/1.94  0 [] -rs(X,Y)|rr(X,Y).
% 1.73/1.94  end_of_list.
% 1.73/1.94  
% 1.73/1.94  SCAN INPUT: prop=0, horn=0, equality=1, symmetry=0, max_lits=7.
% 1.73/1.94  
% 1.73/1.94  This ia a non-Horn set with equality.  The strategy will be
% 1.73/1.94  Knuth-Bendix, ordered hyper_res, factoring, and unit
% 1.73/1.94  deletion, with positive clauses in sos and nonpositive
% 1.73/1.94  clauses in usable.
% 1.73/1.94  
% 1.73/1.94     dependent: set(knuth_bendix).
% 1.73/1.94     dependent: set(anl_eq).
% 1.73/1.94     dependent: set(para_from).
% 1.73/1.94     dependent: set(para_into).
% 1.73/1.94     dependent: clear(para_from_right).
% 1.73/1.94     dependent: clear(para_into_right).
% 1.73/1.94     dependent: set(para_from_vars).
% 1.73/1.94     dependent: set(eq_units_both_ways).
% 1.73/1.94     dependent: set(dynamic_demod_all).
% 1.73/1.94     dependent: set(dynamic_demod).
% 1.73/1.94     dependent: set(order_eq).
% 1.73/1.94     dependent: set(back_demod).
% 1.73/1.94     dependent: set(lrpo).
% 1.73/1.94     dependent: set(hyper_res).
% 1.73/1.95     dependent: set(unit_deletion).
% 1.73/1.95     dependent: set(factor).
% 1.73/1.95  
% 1.73/1.95  ------------> process usable:
% 1.73/1.95  ** KEPT (pick-wt=7): 1 [] A!=B| -cUnsatisfiable(A)|cUnsatisfiable(B).
% 1.73/1.95  ** KEPT (pick-wt=7): 2 [] A!=B| -ca_Vx2(A)|ca_Vx2(B).
% 1.73/1.95  ** KEPT (pick-wt=7): 3 [] A!=B| -cowlNothing(A)|cowlNothing(B).
% 1.73/1.95  ** KEPT (pick-wt=7): 4 [] A!=B| -cowlThing(A)|cowlThing(B).
% 1.73/1.95  ** KEPT (pick-wt=7): 5 [] A!=B| -cp(A)|cp(B).
% 1.73/1.95  ** KEPT (pick-wt=7): 6 [] A!=B| -cpxcomp(A)|cpxcomp(B).
% 1.73/1.95  ** KEPT (pick-wt=9): 7 [] A!=B| -ra_Px1(A,C)|ra_Px1(B,C).
% 1.73/1.95  ** KEPT (pick-wt=9): 8 [] A!=B| -ra_Px1(C,A)|ra_Px1(C,B).
% 1.73/1.95  ** KEPT (pick-wt=9): 9 [] A!=B| -rinvS(A,C)|rinvS(B,C).
% 1.73/1.95  ** KEPT (pick-wt=9): 10 [] A!=B| -rinvS(C,A)|rinvS(C,B).
% 1.73/1.95  ** KEPT (pick-wt=9): 11 [] A!=B| -rr(A,C)|rr(B,C).
% 1.73/1.95  ** KEPT (pick-wt=9): 12 [] A!=B| -rr(C,A)|rr(C,B).
% 1.73/1.95  ** KEPT (pick-wt=9): 13 [] A!=B| -rs(A,C)|rs(B,C).
% 1.73/1.95  ** KEPT (pick-wt=9): 14 [] A!=B| -rs(C,A)|rs(C,B).
% 1.73/1.95  ** KEPT (pick-wt=7): 15 [] A!=B| -xsd_integer(A)|xsd_integer(B).
% 1.73/1.95  ** KEPT (pick-wt=7): 16 [] A!=B| -xsd_string(A)|xsd_string(B).
% 1.73/1.95  ** KEPT (pick-wt=2): 17 [] -cowlNothing(A).
% 1.73/1.95  ** KEPT (pick-wt=4): 18 [] -xsd_string(A)| -xsd_integer(A).
% 1.73/1.95  ** KEPT (pick-wt=11): 19 [] -cUnsatisfiable(A)| -rr(A,B)| -rr(A,C)|B=C.
% 1.73/1.95  ** KEPT (pick-wt=6): 20 [] -cUnsatisfiable(A)|rr(A,$f1(A)).
% 1.73/1.95  ** KEPT (pick-wt=5): 21 [] -cUnsatisfiable(A)|ca_Vx2($f1(A)).
% 1.73/1.95  ** KEPT (pick-wt=6): 22 [] -cUnsatisfiable(A)|rs(A,$f2(A)).
% 1.73/1.95  ** KEPT (pick-wt=5): 23 [] -cUnsatisfiable(A)|cp($f2(A)).
% 1.73/1.95  ** KEPT (pick-wt=4): 24 [] -cUnsatisfiable(A)|cpxcomp(A).
% 1.73/1.95  ** KEPT (pick-wt=18): 25 [] cUnsatisfiable(A)|rr(A,$f4(A))| -rr(A,B)| -ca_Vx2(B)| -rs(A,C)| -cp(C)| -cpxcomp(A).
% 1.73/1.95  ** KEPT (pick-wt=18): 26 [] cUnsatisfiable(A)|rr(A,$f3(A))| -rr(A,B)| -ca_Vx2(B)| -rs(A,C)| -cp(C)| -cpxcomp(A).
% 1.73/1.95  ** KEPT (pick-wt=19): 27 [] cUnsatisfiable(A)|$f4(A)!=$f3(A)| -rr(A,B)| -ca_Vx2(B)| -rs(A,C)| -cp(C)| -cpxcomp(A).
% 1.73/1.95  ** KEPT (pick-wt=5): 28 [] -cp(A)| -ra_Px1(A,B).
% 1.73/1.95  ** KEPT (pick-wt=6): 29 [] -cpxcomp(A)|ra_Px1(A,$f6(A)).
% 1.73/1.95  ** KEPT (pick-wt=5): 30 [] cpxcomp(A)| -ra_Px1(A,B).
% 1.73/1.95  ** KEPT (pick-wt=7): 31 [] -ca_Vx2(A)| -rinvS(A,B)|cp(B).
% 1.73/1.95  ** KEPT (pick-wt=5): 32 [] ca_Vx2(A)| -cp($f7(A)).
% 1.73/1.95  ** KEPT (pick-wt=6): 33 [] -rinvS(A,B)|rs(B,A).
% 1.73/1.95  ** KEPT (pick-wt=6): 34 [] rinvS(A,B)| -rs(B,A).
% 1.73/1.95  ** KEPT (pick-wt=6): 35 [] -rs(A,B)|rr(A,B).
% 1.73/1.95  17 back subsumes 3.
% 1.73/1.95  
% 1.73/1.95  ------------> process sos:
% 1.73/1.95  ** KEPT (pick-wt=3): 37 [] A=A.
% 1.73/1.95  ** KEPT (pick-wt=2): 38 [] cowlThing(A).
% 1.73/1.95  ** KEPT (pick-wt=4): 39 [] xsd_string(A)|xsd_integer(A).
% 1.73/1.95  ** KEPT (pick-wt=6): 40 [] cp(A)|ra_Px1(A,$f5(A)).
% 1.73/1.95  ** KEPT (pick-wt=6): 41 [] ca_Vx2(A)|rinvS(A,$f7(A)).
% 1.73/1.95  ** KEPT (pick-wt=2): 42 [] cUnsatisfiable(i2003_11_14_17_21_22376).
% 1.73/1.95    Following clause subsumed by 37 during input processing: 0 [copy,37,flip.1] A=A.
% 1.73/1.95  37 back subsumes 36.
% 1.73/1.95  38 back subsumes 4.
% 1.73/1.95  
% 1.73/1.95  ======= end of input processing =======
% 1.73/1.95  
% 1.73/1.95  =========== start of search ===========
% 1.73/1.95  
% 1.73/1.95  -------- PROOF -------- 
% 1.73/1.95  
% 1.73/1.95  -----> EMPTY CLAUSE at   0.00 sec ----> 86 [hyper,81,28,67] $F.
% 1.73/1.95  
% 1.73/1.95  Length of proof is 11.  Level of proof is 5.
% 1.73/1.95  
% 1.73/1.95  ---------------- PROOF ----------------
% 1.73/1.95  % SZS status Theorem
% 1.73/1.95  % SZS output start Refutation
% See solution above
% 1.73/1.95  ------------ end of proof -------------
% 1.73/1.95  
% 1.73/1.95  
% 1.73/1.95  Search stopped by max_proofs option.
% 1.73/1.95  
% 1.73/1.95  
% 1.73/1.95  Search stopped by max_proofs option.
% 1.73/1.95  
% 1.73/1.95  ============ end of search ============
% 1.73/1.95  
% 1.73/1.95  -------------- statistics -------------
% 1.73/1.95  clauses given                 17
% 1.73/1.95  clauses generated            100
% 1.73/1.95  clauses kept                  84
% 1.73/1.95  clauses forward subsumed      64
% 1.73/1.95  clauses back subsumed          3
% 1.73/1.95  Kbytes malloced              976
% 1.73/1.95  
% 1.73/1.95  ----------- times (seconds) -----------
% 1.73/1.95  user CPU time          0.00          (0 hr, 0 min, 0 sec)
% 1.73/1.95  system CPU time        0.00          (0 hr, 0 min, 0 sec)
% 1.73/1.95  wall-clock time        1             (0 hr, 0 min, 1 sec)
% 1.73/1.95  
% 1.73/1.95  That finishes the proof of the theorem.
% 1.73/1.95  
% 1.73/1.95  Process 26304 finished Wed Jul 27 03:48:23 2022
% 1.73/1.95  Otter interrupted
% 1.73/1.95  PROOF FOUND
%------------------------------------------------------------------------------