TSTP Solution File: REL004+1 by ET---2.0

View Problem - Process Solution

%------------------------------------------------------------------------------
% File     : ET---2.0
% Problem  : REL004+1 : TPTP v8.1.0. Released v4.0.0.
% Transfm  : none
% Format   : tptp:raw
% Command  : run_ET %s %d

% Computer : n014.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 : Mon Jul 18 19:18:54 EDT 2022

% Result   : Theorem 0.22s 1.40s
% Output   : CNFRefutation 0.22s
% Verified : 
% SZS Type : Refutation
%            Derivation depth      :   32
%            Number of leaves      :    7
% Syntax   : Number of formulae    :   78 (  78 unt;   0 def)
%            Number of atoms       :   78 (  77 equ)
%            Maximal formula atoms :    1 (   1 avg)
%            Number of connectives :    3 (   3   ~;   0   |;   0   &)
%                                         (   0 <=>;   0  =>;   0  <=;   0 <~>)
%            Maximal formula depth :    4 (   1 avg)
%            Maximal term depth    :    7 (   2 avg)
%            Number of predicates  :    2 (   0 usr;   1 prp; 0-2 aty)
%            Number of functors    :    5 (   5 usr;   1 con; 0-2 aty)
%            Number of variables   :  148 (   3 sgn  26   !;   0   ?)

% Comments : 
%------------------------------------------------------------------------------
fof(maddux3_a_kind_of_de_Morgan,axiom,
    ! [X1,X2] : X1 = join(complement(join(complement(X1),complement(X2))),complement(join(complement(X1),X2))),
    file('/export/starexec/sandbox/benchmark/Axioms/REL001+0.ax',maddux3_a_kind_of_de_Morgan) ).

fof(maddux1_join_commutativity,axiom,
    ! [X1,X2] : join(X1,X2) = join(X2,X1),
    file('/export/starexec/sandbox/benchmark/Axioms/REL001+0.ax',maddux1_join_commutativity) ).

fof(maddux2_join_associativity,axiom,
    ! [X1,X2,X3] : join(X1,join(X2,X3)) = join(join(X1,X2),X3),
    file('/export/starexec/sandbox/benchmark/Axioms/REL001+0.ax',maddux2_join_associativity) ).

fof(converse_cancellativity,axiom,
    ! [X1,X2] : join(composition(converse(X1),complement(composition(X1,X2))),complement(X2)) = complement(X2),
    file('/export/starexec/sandbox/benchmark/Axioms/REL001+0.ax',converse_cancellativity) ).

fof(converse_additivity,axiom,
    ! [X1,X2] : converse(join(X1,X2)) = join(converse(X1),converse(X2)),
    file('/export/starexec/sandbox/benchmark/Axioms/REL001+0.ax',converse_additivity) ).

fof(converse_idempotence,axiom,
    ! [X1] : converse(converse(X1)) = X1,
    file('/export/starexec/sandbox/benchmark/Axioms/REL001+0.ax',converse_idempotence) ).

fof(goals,conjecture,
    ! [X1] : converse(complement(X1)) = complement(converse(X1)),
    file('/export/starexec/sandbox/solver/bin/../tmp/theBenchmark.p.mepo_128.in',goals) ).

fof(c_0_7,plain,
    ! [X3,X4] : X3 = join(complement(join(complement(X3),complement(X4))),complement(join(complement(X3),X4))),
    inference(variable_rename,[status(thm)],[maddux3_a_kind_of_de_Morgan]) ).

fof(c_0_8,plain,
    ! [X3,X4] : join(X3,X4) = join(X4,X3),
    inference(variable_rename,[status(thm)],[maddux1_join_commutativity]) ).

cnf(c_0_9,plain,
    X1 = join(complement(join(complement(X1),complement(X2))),complement(join(complement(X1),X2))),
    inference(split_conjunct,[status(thm)],[c_0_7]) ).

cnf(c_0_10,plain,
    join(X1,X2) = join(X2,X1),
    inference(split_conjunct,[status(thm)],[c_0_8]) ).

fof(c_0_11,plain,
    ! [X4,X5,X6] : join(X4,join(X5,X6)) = join(join(X4,X5),X6),
    inference(variable_rename,[status(thm)],[maddux2_join_associativity]) ).

cnf(c_0_12,plain,
    join(complement(join(complement(X1),X2)),complement(join(complement(X1),complement(X2)))) = X1,
    inference(rw,[status(thm)],[c_0_9,c_0_10]) ).

cnf(c_0_13,plain,
    join(X1,join(X2,X3)) = join(join(X1,X2),X3),
    inference(split_conjunct,[status(thm)],[c_0_11]) ).

cnf(c_0_14,plain,
    join(complement(join(complement(X1),X2)),complement(join(complement(X2),complement(X1)))) = X1,
    inference(spm,[status(thm)],[c_0_12,c_0_10]) ).

cnf(c_0_15,plain,
    join(X1,join(X2,X3)) = join(X2,join(X1,X3)),
    inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_13,c_0_10]),c_0_13]) ).

cnf(c_0_16,plain,
    join(complement(join(complement(X1),X2)),join(complement(join(complement(X1),complement(X2))),X3)) = join(X1,X3),
    inference(spm,[status(thm)],[c_0_13,c_0_12]) ).

cnf(c_0_17,plain,
    join(complement(join(X1,complement(X2))),complement(join(complement(X1),complement(X2)))) = X2,
    inference(spm,[status(thm)],[c_0_14,c_0_10]) ).

cnf(c_0_18,plain,
    join(complement(join(complement(X1),X2)),join(X3,complement(join(complement(X1),complement(X2))))) = join(X3,X1),
    inference(spm,[status(thm)],[c_0_15,c_0_12]) ).

cnf(c_0_19,plain,
    join(X1,complement(join(complement(complement(X1)),complement(X2)))) = join(X2,complement(join(complement(X1),X2))),
    inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_16,c_0_17]),c_0_10]) ).

cnf(c_0_20,plain,
    join(X1,complement(join(complement(X2),X1))) = join(X2,complement(join(X2,complement(X1)))),
    inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_18,c_0_17]),c_0_10]),c_0_10]) ).

cnf(c_0_21,plain,
    join(complement(complement(X1)),complement(join(complement(complement(X1)),complement(complement(X1))))) = join(complement(X1),complement(join(complement(X1),complement(X1)))),
    inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_19,c_0_20]),c_0_10]),c_0_20]) ).

cnf(c_0_22,plain,
    join(complement(complement(X1)),join(complement(join(complement(complement(X1)),complement(complement(X1)))),X2)) = join(complement(X1),join(complement(join(complement(X1),complement(X1))),X2)),
    inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_13,c_0_21]),c_0_13]) ).

cnf(c_0_23,plain,
    join(complement(join(complement(X1),complement(X2))),complement(join(complement(X2),X1))) = X2,
    inference(spm,[status(thm)],[c_0_10,c_0_14]) ).

cnf(c_0_24,plain,
    join(complement(X1),complement(complement(X1))) = join(X1,complement(X1)),
    inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_22,c_0_23]),c_0_14]),c_0_10]),c_0_10]) ).

cnf(c_0_25,plain,
    join(complement(join(X1,complement(X1))),complement(join(X1,complement(complement(X1))))) = complement(X1),
    inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_23,c_0_24]),c_0_10]) ).

cnf(c_0_26,plain,
    complement(complement(X1)) = X1,
    inference(spm,[status(thm)],[c_0_12,c_0_25]) ).

cnf(c_0_27,plain,
    join(complement(X1),complement(join(complement(X2),complement(X1)))) = join(X2,complement(join(X2,X1))),
    inference(spm,[status(thm)],[c_0_20,c_0_26]) ).

cnf(c_0_28,plain,
    join(complement(join(X1,complement(X2))),complement(join(complement(X2),complement(X1)))) = X2,
    inference(spm,[status(thm)],[c_0_12,c_0_10]) ).

fof(c_0_29,plain,
    ! [X3,X4] : join(composition(converse(X3),complement(composition(X3,X4))),complement(X4)) = complement(X4),
    inference(variable_rename,[status(thm)],[converse_cancellativity]) ).

cnf(c_0_30,plain,
    join(complement(X1),join(complement(join(complement(X2),complement(X1))),X3)) = join(X2,join(complement(join(X2,X1)),X3)),
    inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_13,c_0_27]),c_0_13]) ).

cnf(c_0_31,plain,
    join(complement(join(X1,X2)),complement(join(X2,complement(X1)))) = complement(X2),
    inference(spm,[status(thm)],[c_0_28,c_0_26]) ).

cnf(c_0_32,plain,
    join(complement(join(X1,X2)),complement(join(complement(X2),X1))) = complement(X1),
    inference(spm,[status(thm)],[c_0_14,c_0_26]) ).

cnf(c_0_33,plain,
    join(composition(converse(X1),complement(composition(X1,X2))),complement(X2)) = complement(X2),
    inference(split_conjunct,[status(thm)],[c_0_29]) ).

cnf(c_0_34,plain,
    join(X1,complement(X1)) = join(X2,complement(X2)),
    inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_30,c_0_31]),c_0_26]),c_0_10]),c_0_26]),c_0_32]) ).

cnf(c_0_35,plain,
    join(complement(join(complement(X1),complement(X2))),complement(join(X2,complement(X1)))) = X1,
    inference(spm,[status(thm)],[c_0_10,c_0_28]) ).

cnf(c_0_36,plain,
    join(complement(X1),composition(converse(X2),complement(composition(X2,X1)))) = complement(X1),
    inference(rw,[status(thm)],[c_0_33,c_0_10]) ).

cnf(c_0_37,plain,
    join(X1,join(complement(X1),X2)) = join(X3,join(complement(X3),X2)),
    inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_13,c_0_34]),c_0_13]) ).

cnf(c_0_38,plain,
    join(complement(join(X1,complement(X2))),complement(join(X2,X1))) = complement(X1),
    inference(spm,[status(thm)],[c_0_35,c_0_26]) ).

cnf(c_0_39,plain,
    join(complement(X1),join(X2,composition(converse(X3),complement(composition(X3,X1))))) = join(X2,complement(X1)),
    inference(spm,[status(thm)],[c_0_15,c_0_36]) ).

cnf(c_0_40,plain,
    join(X1,join(complement(X1),complement(join(X2,X3)))) = join(X3,join(complement(X2),complement(X3))),
    inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_37,c_0_38]),c_0_13]) ).

cnf(c_0_41,plain,
    join(X1,complement(join(complement(X2),X1))) = join(X2,complement(join(complement(X1),X2))),
    inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_16,c_0_23]),c_0_10]) ).

cnf(c_0_42,plain,
    join(X1,join(X2,X3)) = join(X3,join(X1,X2)),
    inference(spm,[status(thm)],[c_0_10,c_0_13]) ).

cnf(c_0_43,plain,
    join(X1,composition(converse(X2),complement(composition(X2,join(complement(X1),X3))))) = X1,
    inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_16,c_0_39]),c_0_10]),c_0_12]) ).

cnf(c_0_44,plain,
    join(complement(join(X1,X2)),complement(join(X1,complement(X2)))) = complement(X1),
    inference(spm,[status(thm)],[c_0_12,c_0_26]) ).

cnf(c_0_45,plain,
    join(X1,complement(X1)) = join(X2,join(X3,complement(join(X2,X3)))),
    inference(spm,[status(thm)],[c_0_13,c_0_34]) ).

cnf(c_0_46,plain,
    join(X1,join(X2,complement(join(X1,X2)))) = join(X1,join(complement(X1),X2)),
    inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_40,c_0_41]),c_0_26]),c_0_26]),c_0_26]),c_0_42]) ).

cnf(c_0_47,plain,
    join(X1,composition(converse(X2),complement(composition(X2,complement(X1))))) = X1,
    inference(spm,[status(thm)],[c_0_43,c_0_43]) ).

cnf(c_0_48,plain,
    join(X1,complement(join(complement(X2),join(X1,complement(join(X1,X2)))))) = join(X1,X2),
    inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_44,c_0_44]),c_0_26]),c_0_26]),c_0_26]),c_0_42]),c_0_10]) ).

cnf(c_0_49,plain,
    join(X1,complement(X1)) = join(X2,join(complement(X2),X3)),
    inference(rw,[status(thm)],[c_0_45,c_0_46]) ).

fof(c_0_50,plain,
    ! [X3,X4] : converse(join(X3,X4)) = join(converse(X3),converse(X4)),
    inference(variable_rename,[status(thm)],[converse_additivity]) ).

cnf(c_0_51,plain,
    join(X1,join(composition(converse(X2),complement(composition(X2,complement(X1)))),X3)) = join(X1,X3),
    inference(spm,[status(thm)],[c_0_13,c_0_47]) ).

cnf(c_0_52,plain,
    join(X1,complement(join(X2,complement(X2)))) = join(X1,X1),
    inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_48,c_0_49]),c_0_26]),c_0_10]),c_0_26]) ).

cnf(c_0_53,plain,
    converse(join(X1,X2)) = join(converse(X1),converse(X2)),
    inference(split_conjunct,[status(thm)],[c_0_50]) ).

fof(c_0_54,plain,
    ! [X2] : converse(converse(X2)) = X2,
    inference(variable_rename,[status(thm)],[converse_idempotence]) ).

cnf(c_0_55,plain,
    join(X1,complement(join(X2,complement(X2)))) = X1,
    inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_51,c_0_52]),c_0_51]),c_0_47]) ).

cnf(c_0_56,plain,
    join(converse(X1),converse(complement(X1))) = join(converse(X2),converse(complement(X2))),
    inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_53,c_0_34]),c_0_53]) ).

cnf(c_0_57,plain,
    converse(converse(X1)) = X1,
    inference(split_conjunct,[status(thm)],[c_0_54]) ).

cnf(c_0_58,plain,
    join(complement(join(complement(X1),complement(X2))),join(X3,complement(join(complement(X2),X1)))) = join(X3,X2),
    inference(spm,[status(thm)],[c_0_42,c_0_14]) ).

cnf(c_0_59,plain,
    join(X1,X1) = X1,
    inference(rw,[status(thm)],[c_0_52,c_0_55]) ).

cnf(c_0_60,plain,
    join(complement(join(complement(X1),X2)),complement(join(X2,X1))) = complement(X2),
    inference(spm,[status(thm)],[c_0_23,c_0_26]) ).

cnf(c_0_61,plain,
    join(converse(X1),converse(complement(X1))) = join(X2,converse(complement(converse(X2)))),
    inference(spm,[status(thm)],[c_0_56,c_0_57]) ).

cnf(c_0_62,plain,
    join(X1,complement(join(complement(X1),X2))) = X1,
    inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_58,c_0_59]),c_0_60]),c_0_26]),c_0_10]) ).

cnf(c_0_63,plain,
    join(X1,converse(complement(converse(X1)))) = join(X2,converse(complement(converse(X2)))),
    inference(spm,[status(thm)],[c_0_61,c_0_61]) ).

cnf(c_0_64,plain,
    join(X1,complement(join(X2,converse(complement(converse(X2)))))) = X1,
    inference(spm,[status(thm)],[c_0_62,c_0_63]) ).

cnf(c_0_65,plain,
    complement(join(X1,complement(converse(complement(converse(X1)))))) = complement(X1),
    inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_60,c_0_64]),c_0_10]) ).

cnf(c_0_66,plain,
    join(X1,complement(converse(complement(converse(X1))))) = X1,
    inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_26,c_0_65]),c_0_26]) ).

cnf(c_0_67,plain,
    join(converse(X1),complement(converse(complement(X1)))) = converse(X1),
    inference(spm,[status(thm)],[c_0_66,c_0_57]) ).

cnf(c_0_68,plain,
    join(complement(join(X1,X2)),complement(join(complement(X1),X2))) = complement(X2),
    inference(spm,[status(thm)],[c_0_17,c_0_26]) ).

cnf(c_0_69,plain,
    join(X1,converse(complement(converse(complement(X1))))) = X1,
    inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_53,c_0_67]),c_0_57]),c_0_57]) ).

cnf(c_0_70,plain,
    complement(converse(complement(converse(complement(X1))))) = complement(X1),
    inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_68,c_0_69]),c_0_64]) ).

fof(c_0_71,negated_conjecture,
    ~ ! [X1] : converse(complement(X1)) = complement(converse(X1)),
    inference(assume_negation,[status(cth)],[goals]) ).

cnf(c_0_72,plain,
    converse(complement(converse(complement(X1)))) = X1,
    inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_26,c_0_70]),c_0_26]) ).

fof(c_0_73,negated_conjecture,
    converse(complement(esk1_0)) != complement(converse(esk1_0)),
    inference(skolemize,[status(esa)],[inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[c_0_71])])]) ).

cnf(c_0_74,plain,
    complement(converse(complement(X1))) = converse(X1),
    inference(spm,[status(thm)],[c_0_57,c_0_72]) ).

cnf(c_0_75,negated_conjecture,
    converse(complement(esk1_0)) != complement(converse(esk1_0)),
    inference(split_conjunct,[status(thm)],[c_0_73]) ).

cnf(c_0_76,plain,
    complement(converse(X1)) = converse(complement(X1)),
    inference(spm,[status(thm)],[c_0_26,c_0_74]) ).

cnf(c_0_77,negated_conjecture,
    $false,
    inference(cn,[status(thm)],[inference(rw,[status(thm)],[c_0_75,c_0_76])]),
    [proof] ).

%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.07/0.12  % Problem  : REL004+1 : TPTP v8.1.0. Released v4.0.0.
% 0.07/0.12  % Command  : run_ET %s %d
% 0.12/0.33  % Computer : n014.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  : 600
% 0.12/0.33  % DateTime : Fri Jul  8 11:59:36 EDT 2022
% 0.12/0.33  % CPUTime  : 
% 0.22/1.40  # Running protocol protocol_eprover_4a02c828a8cc55752123edbcc1ad40e453c11447 for 23 seconds:
% 0.22/1.40  # SinE strategy is GSinE(CountFormulas,hypos,1.4,,04,100,1.0)
% 0.22/1.40  # Preprocessing time       : 0.014 s
% 0.22/1.40  
% 0.22/1.40  # Proof found!
% 0.22/1.40  # SZS status Theorem
% 0.22/1.40  # SZS output start CNFRefutation
% See solution above
% 0.22/1.40  # Proof object total steps             : 78
% 0.22/1.40  # Proof object clause steps            : 63
% 0.22/1.40  # Proof object formula steps           : 15
% 0.22/1.40  # Proof object conjectures             : 5
% 0.22/1.40  # Proof object clause conjectures      : 2
% 0.22/1.40  # Proof object formula conjectures     : 3
% 0.22/1.40  # Proof object initial clauses used    : 7
% 0.22/1.40  # Proof object initial formulas used   : 7
% 0.22/1.40  # Proof object generating inferences   : 51
% 0.22/1.40  # Proof object simplifying inferences  : 51
% 0.22/1.40  # Training examples: 0 positive, 0 negative
% 0.22/1.40  # Parsed axioms                        : 14
% 0.22/1.40  # Removed by relevancy pruning/SinE    : 4
% 0.22/1.40  # Initial clauses                      : 10
% 0.22/1.40  # Removed in clause preprocessing      : 0
% 0.22/1.40  # Initial clauses in saturation        : 10
% 0.22/1.40  # Processed clauses                    : 1440
% 0.22/1.40  # ...of these trivial                  : 547
% 0.22/1.40  # ...subsumed                          : 594
% 0.22/1.40  # ...remaining for further processing  : 299
% 0.22/1.40  # Other redundant clauses eliminated   : 0
% 0.22/1.40  # Clauses deleted for lack of memory   : 0
% 0.22/1.40  # Backward-subsumed                    : 1
% 0.22/1.40  # Backward-rewritten                   : 160
% 0.22/1.40  # Generated clauses                    : 47839
% 0.22/1.40  # ...of the previous two non-trivial   : 44373
% 0.22/1.40  # Contextual simplify-reflections      : 0
% 0.22/1.40  # Paramodulations                      : 47839
% 0.22/1.40  # Factorizations                       : 0
% 0.22/1.40  # Equation resolutions                 : 0
% 0.22/1.40  # Current number of processed clauses  : 138
% 0.22/1.40  #    Positive orientable unit clauses  : 82
% 0.22/1.40  #    Positive unorientable unit clauses: 56
% 0.22/1.40  #    Negative unit clauses             : 0
% 0.22/1.40  #    Non-unit-clauses                  : 0
% 0.22/1.40  # Current number of unprocessed clauses: 20970
% 0.22/1.40  # ...number of literals in the above   : 20970
% 0.22/1.40  # Current number of archived formulas  : 0
% 0.22/1.40  # Current number of archived clauses   : 161
% 0.22/1.40  # Clause-clause subsumption calls (NU) : 0
% 0.22/1.40  # Rec. Clause-clause subsumption calls : 0
% 0.22/1.40  # Non-unit clause-clause subsumptions  : 0
% 0.22/1.40  # Unit Clause-clause subsumption calls : 891
% 0.22/1.40  # Rewrite failures with RHS unbound    : 82
% 0.22/1.40  # BW rewrite match attempts            : 4094
% 0.22/1.40  # BW rewrite match successes           : 465
% 0.22/1.40  # Condensation attempts                : 0
% 0.22/1.40  # Condensation successes               : 0
% 0.22/1.40  # Termbank termtop insertions          : 995247
% 0.22/1.40  
% 0.22/1.40  # -------------------------------------------------
% 0.22/1.40  # User time                : 0.662 s
% 0.22/1.40  # System time              : 0.023 s
% 0.22/1.40  # Total time               : 0.685 s
% 0.22/1.40  # Maximum resident set size: 46636 pages
%------------------------------------------------------------------------------