TSTP Solution File: SWB024+2 by ET---2.0

View Problem - Process Solution

%------------------------------------------------------------------------------
% File     : ET---2.0
% Problem  : SWB024+2 : TPTP v8.1.0. Released v5.2.0.
% Transfm  : none
% Format   : tptp:raw
% Command  : run_ET %s %d

% Computer : n026.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 : Tue Jul 19 19:02:04 EDT 2022

% Result   : Theorem 0.24s 1.42s
% Output   : CNFRefutation 0.24s
% Verified : 
% SZS Type : Refutation
%            Derivation depth      :    9
%            Number of leaves      :    6
% Syntax   : Number of formulae    :   36 (   9 unt;   0 def)
%            Number of atoms       :  132 (   0 equ)
%            Maximal formula atoms :   15 (   3 avg)
%            Number of connectives :  157 (  61   ~;  58   |;  31   &)
%                                         (   4 <=>;   3  =>;   0  <=;   0 <~>)
%            Maximal formula depth :   14 (   5 avg)
%            Maximal term depth    :    2 (   1 avg)
%            Number of predicates  :    5 (   4 usr;   1 prp; 0-3 aty)
%            Number of functors    :   19 (  19 usr;  13 con; 0-3 aty)
%            Number of variables   :   67 (   6 sgn  32   !;   4   ?)

% Comments : 
%------------------------------------------------------------------------------
fof(owl_char_transitive,axiom,
    ! [X4] :
      ( icext(uri_owl_TransitiveProperty,X4)
    <=> ( ip(X4)
        & ! [X1,X5,X3] :
            ( ( iext(X4,X1,X5)
              & iext(X4,X5,X3) )
           => iext(X4,X1,X3) ) ) ),
    file('/export/starexec/sandbox/solver/bin/../tmp/theBenchmark.p.mepo_128.in',owl_char_transitive) ).

fof(rdfs_cext_def,axiom,
    ! [X1,X2] :
      ( iext(uri_rdf_type,X1,X2)
    <=> icext(X2,X1) ),
    file('/export/starexec/sandbox/solver/bin/../tmp/theBenchmark.p.mepo_128.in',rdfs_cext_def) ).

fof(testcase_premise_fullish_024_Cardinality_Restrictions_on_Complex_Properties,axiom,
    ? [X9] :
      ( iext(uri_rdf_type,uri_ex_hasAncestor,uri_owl_TransitiveProperty)
      & iext(uri_rdfs_subClassOf,uri_ex_Person,X9)
      & iext(uri_rdf_type,X9,uri_owl_Restriction)
      & iext(uri_owl_onProperty,X9,uri_ex_hasAncestor)
      & iext(uri_owl_minCardinality,X9,literal_typed(dat_str_1,uri_xsd_nonNegativeInteger))
      & iext(uri_rdf_type,uri_ex_alice,uri_ex_Person)
      & iext(uri_rdf_type,uri_ex_bob,uri_ex_Person)
      & iext(uri_ex_hasAncestor,uri_ex_alice,uri_ex_bob) ),
    file('/export/starexec/sandbox/solver/bin/../tmp/theBenchmark.p.mepo_128.in',testcase_premise_fullish_024_Cardinality_Restrictions_on_Complex_Properties) ).

fof(testcase_conclusion_fullish_024_Cardinality_Restrictions_on_Complex_Properties,conjecture,
    ? [X8] :
      ( iext(uri_ex_hasAncestor,uri_ex_bob,X8)
      & iext(uri_ex_hasAncestor,uri_ex_alice,X8) ),
    file('/export/starexec/sandbox/solver/bin/../tmp/theBenchmark.p.mepo_128.in',testcase_conclusion_fullish_024_Cardinality_Restrictions_on_Complex_Properties) ).

fof(owl_restrict_mincard_001,axiom,
    ! [X3,X4] :
      ( ( iext(uri_owl_minCardinality,X3,literal_typed(dat_str_1,uri_xsd_nonNegativeInteger))
        & iext(uri_owl_onProperty,X3,X4) )
     => ! [X1] :
          ( icext(X3,X1)
        <=> ? [X5] : iext(X4,X1,X5) ) ),
    file('/export/starexec/sandbox/solver/bin/../tmp/theBenchmark.p.mepo_128.in',owl_restrict_mincard_001) ).

fof(owl_rdfsext_subclassof,axiom,
    ! [X6,X7] :
      ( iext(uri_rdfs_subClassOf,X6,X7)
    <=> ( ic(X6)
        & ic(X7)
        & ! [X1] :
            ( icext(X6,X1)
           => icext(X7,X1) ) ) ),
    file('/export/starexec/sandbox/solver/bin/../tmp/theBenchmark.p.mepo_128.in',owl_rdfsext_subclassof) ).

fof(c_0_6,plain,
    ! [X6,X7,X8,X9,X6] :
      ( ( ip(X6)
        | ~ icext(uri_owl_TransitiveProperty,X6) )
      & ( ~ iext(X6,X7,X8)
        | ~ iext(X6,X8,X9)
        | iext(X6,X7,X9)
        | ~ icext(uri_owl_TransitiveProperty,X6) )
      & ( iext(X6,esk3_1(X6),esk4_1(X6))
        | ~ ip(X6)
        | icext(uri_owl_TransitiveProperty,X6) )
      & ( iext(X6,esk4_1(X6),esk5_1(X6))
        | ~ ip(X6)
        | icext(uri_owl_TransitiveProperty,X6) )
      & ( ~ iext(X6,esk3_1(X6),esk5_1(X6))
        | ~ ip(X6)
        | icext(uri_owl_TransitiveProperty,X6) ) ),
    inference(distribute,[status(thm)],[inference(shift_quantors,[status(thm)],[inference(skolemize,[status(esa)],[inference(shift_quantors,[status(thm)],[inference(shift_quantors,[status(thm)],[inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[owl_char_transitive])])])])])])]) ).

fof(c_0_7,plain,
    ! [X3,X4,X3,X4] :
      ( ( ~ iext(uri_rdf_type,X3,X4)
        | icext(X4,X3) )
      & ( ~ icext(X4,X3)
        | iext(uri_rdf_type,X3,X4) ) ),
    inference(shift_quantors,[status(thm)],[inference(shift_quantors,[status(thm)],[inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[rdfs_cext_def])])])]) ).

cnf(c_0_8,plain,
    ( iext(X1,X2,X3)
    | ~ icext(uri_owl_TransitiveProperty,X1)
    | ~ iext(X1,X4,X3)
    | ~ iext(X1,X2,X4) ),
    inference(split_conjunct,[status(thm)],[c_0_6]) ).

cnf(c_0_9,plain,
    ( icext(X1,X2)
    | ~ iext(uri_rdf_type,X2,X1) ),
    inference(split_conjunct,[status(thm)],[c_0_7]) ).

fof(c_0_10,plain,
    ( iext(uri_rdf_type,uri_ex_hasAncestor,uri_owl_TransitiveProperty)
    & iext(uri_rdfs_subClassOf,uri_ex_Person,esk6_0)
    & iext(uri_rdf_type,esk6_0,uri_owl_Restriction)
    & iext(uri_owl_onProperty,esk6_0,uri_ex_hasAncestor)
    & iext(uri_owl_minCardinality,esk6_0,literal_typed(dat_str_1,uri_xsd_nonNegativeInteger))
    & iext(uri_rdf_type,uri_ex_alice,uri_ex_Person)
    & iext(uri_rdf_type,uri_ex_bob,uri_ex_Person)
    & iext(uri_ex_hasAncestor,uri_ex_alice,uri_ex_bob) ),
    inference(skolemize,[status(esa)],[inference(shift_quantors,[status(thm)],[inference(variable_rename,[status(thm)],[testcase_premise_fullish_024_Cardinality_Restrictions_on_Complex_Properties])])]) ).

fof(c_0_11,negated_conjecture,
    ~ ? [X8] :
        ( iext(uri_ex_hasAncestor,uri_ex_bob,X8)
        & iext(uri_ex_hasAncestor,uri_ex_alice,X8) ),
    inference(assume_negation,[status(cth)],[testcase_conclusion_fullish_024_Cardinality_Restrictions_on_Complex_Properties]) ).

cnf(c_0_12,plain,
    ( iext(X1,X2,X3)
    | ~ iext(uri_rdf_type,X1,uri_owl_TransitiveProperty)
    | ~ iext(X1,X4,X3)
    | ~ iext(X1,X2,X4) ),
    inference(spm,[status(thm)],[c_0_8,c_0_9]) ).

cnf(c_0_13,plain,
    iext(uri_rdf_type,uri_ex_hasAncestor,uri_owl_TransitiveProperty),
    inference(split_conjunct,[status(thm)],[c_0_10]) ).

fof(c_0_14,plain,
    ! [X6,X7,X8,X8,X10] :
      ( ( ~ icext(X6,X8)
        | iext(X7,X8,esk1_3(X6,X7,X8))
        | ~ iext(uri_owl_minCardinality,X6,literal_typed(dat_str_1,uri_xsd_nonNegativeInteger))
        | ~ iext(uri_owl_onProperty,X6,X7) )
      & ( ~ iext(X7,X8,X10)
        | icext(X6,X8)
        | ~ iext(uri_owl_minCardinality,X6,literal_typed(dat_str_1,uri_xsd_nonNegativeInteger))
        | ~ iext(uri_owl_onProperty,X6,X7) ) ),
    inference(distribute,[status(thm)],[inference(shift_quantors,[status(thm)],[inference(skolemize,[status(esa)],[inference(shift_quantors,[status(thm)],[inference(shift_quantors,[status(thm)],[inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[owl_restrict_mincard_001])])])])])])]) ).

fof(c_0_15,plain,
    ! [X8,X9,X10,X8,X9] :
      ( ( ic(X8)
        | ~ iext(uri_rdfs_subClassOf,X8,X9) )
      & ( ic(X9)
        | ~ iext(uri_rdfs_subClassOf,X8,X9) )
      & ( ~ icext(X8,X10)
        | icext(X9,X10)
        | ~ iext(uri_rdfs_subClassOf,X8,X9) )
      & ( icext(X8,esk2_2(X8,X9))
        | ~ ic(X8)
        | ~ ic(X9)
        | iext(uri_rdfs_subClassOf,X8,X9) )
      & ( ~ icext(X9,esk2_2(X8,X9))
        | ~ ic(X8)
        | ~ ic(X9)
        | iext(uri_rdfs_subClassOf,X8,X9) ) ),
    inference(distribute,[status(thm)],[inference(shift_quantors,[status(thm)],[inference(skolemize,[status(esa)],[inference(shift_quantors,[status(thm)],[inference(shift_quantors,[status(thm)],[inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[owl_rdfsext_subclassof])])])])])])]) ).

fof(c_0_16,negated_conjecture,
    ! [X9] :
      ( ~ iext(uri_ex_hasAncestor,uri_ex_bob,X9)
      | ~ iext(uri_ex_hasAncestor,uri_ex_alice,X9) ),
    inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[c_0_11])]) ).

cnf(c_0_17,plain,
    ( iext(uri_ex_hasAncestor,X1,X2)
    | ~ iext(uri_ex_hasAncestor,X3,X2)
    | ~ iext(uri_ex_hasAncestor,X1,X3) ),
    inference(spm,[status(thm)],[c_0_12,c_0_13]) ).

cnf(c_0_18,plain,
    ( iext(X2,X3,esk1_3(X1,X2,X3))
    | ~ iext(uri_owl_onProperty,X1,X2)
    | ~ iext(uri_owl_minCardinality,X1,literal_typed(dat_str_1,uri_xsd_nonNegativeInteger))
    | ~ icext(X1,X3) ),
    inference(split_conjunct,[status(thm)],[c_0_14]) ).

cnf(c_0_19,plain,
    ( icext(X2,X3)
    | ~ iext(uri_rdfs_subClassOf,X1,X2)
    | ~ icext(X1,X3) ),
    inference(split_conjunct,[status(thm)],[c_0_15]) ).

cnf(c_0_20,plain,
    iext(uri_rdfs_subClassOf,uri_ex_Person,esk6_0),
    inference(split_conjunct,[status(thm)],[c_0_10]) ).

cnf(c_0_21,negated_conjecture,
    ( ~ iext(uri_ex_hasAncestor,uri_ex_alice,X1)
    | ~ iext(uri_ex_hasAncestor,uri_ex_bob,X1) ),
    inference(split_conjunct,[status(thm)],[c_0_16]) ).

cnf(c_0_22,plain,
    ( iext(uri_ex_hasAncestor,X1,esk1_3(X2,uri_ex_hasAncestor,X3))
    | ~ icext(X2,X3)
    | ~ iext(uri_owl_minCardinality,X2,literal_typed(dat_str_1,uri_xsd_nonNegativeInteger))
    | ~ iext(uri_owl_onProperty,X2,uri_ex_hasAncestor)
    | ~ iext(uri_ex_hasAncestor,X1,X3) ),
    inference(spm,[status(thm)],[c_0_17,c_0_18]) ).

cnf(c_0_23,plain,
    ( icext(esk6_0,X1)
    | ~ icext(uri_ex_Person,X1) ),
    inference(spm,[status(thm)],[c_0_19,c_0_20]) ).

cnf(c_0_24,negated_conjecture,
    ( ~ icext(X1,X2)
    | ~ iext(uri_ex_hasAncestor,uri_ex_bob,esk1_3(X1,uri_ex_hasAncestor,X2))
    | ~ iext(uri_owl_minCardinality,X1,literal_typed(dat_str_1,uri_xsd_nonNegativeInteger))
    | ~ iext(uri_owl_onProperty,X1,uri_ex_hasAncestor)
    | ~ iext(uri_ex_hasAncestor,uri_ex_alice,X2) ),
    inference(spm,[status(thm)],[c_0_21,c_0_22]) ).

cnf(c_0_25,plain,
    iext(uri_ex_hasAncestor,uri_ex_alice,uri_ex_bob),
    inference(split_conjunct,[status(thm)],[c_0_10]) ).

cnf(c_0_26,plain,
    ( iext(uri_rdf_type,X1,X2)
    | ~ icext(X2,X1) ),
    inference(split_conjunct,[status(thm)],[c_0_7]) ).

cnf(c_0_27,plain,
    ( icext(esk6_0,X1)
    | ~ iext(uri_rdf_type,X1,uri_ex_Person) ),
    inference(spm,[status(thm)],[c_0_23,c_0_9]) ).

cnf(c_0_28,negated_conjecture,
    ( ~ icext(X1,uri_ex_bob)
    | ~ iext(uri_owl_minCardinality,X1,literal_typed(dat_str_1,uri_xsd_nonNegativeInteger))
    | ~ iext(uri_owl_onProperty,X1,uri_ex_hasAncestor) ),
    inference(cn,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_24,c_0_18]),c_0_25])]) ).

cnf(c_0_29,plain,
    iext(uri_owl_minCardinality,esk6_0,literal_typed(dat_str_1,uri_xsd_nonNegativeInteger)),
    inference(split_conjunct,[status(thm)],[c_0_10]) ).

cnf(c_0_30,plain,
    iext(uri_owl_onProperty,esk6_0,uri_ex_hasAncestor),
    inference(split_conjunct,[status(thm)],[c_0_10]) ).

cnf(c_0_31,plain,
    ( iext(uri_rdf_type,X1,esk6_0)
    | ~ iext(uri_rdf_type,X1,uri_ex_Person) ),
    inference(spm,[status(thm)],[c_0_26,c_0_27]) ).

cnf(c_0_32,plain,
    iext(uri_rdf_type,uri_ex_bob,uri_ex_Person),
    inference(split_conjunct,[status(thm)],[c_0_10]) ).

cnf(c_0_33,negated_conjecture,
    ~ icext(esk6_0,uri_ex_bob),
    inference(cn,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_28,c_0_29]),c_0_30])]) ).

cnf(c_0_34,plain,
    iext(uri_rdf_type,uri_ex_bob,esk6_0),
    inference(spm,[status(thm)],[c_0_31,c_0_32]) ).

cnf(c_0_35,negated_conjecture,
    $false,
    inference(cn,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_33,c_0_9]),c_0_34])]),
    [proof] ).

%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.07/0.12  % Problem  : SWB024+2 : TPTP v8.1.0. Released v5.2.0.
% 0.07/0.13  % Command  : run_ET %s %d
% 0.13/0.34  % Computer : n026.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 : Wed Jun  1 01:10:41 EDT 2022
% 0.13/0.34  % CPUTime  : 
% 0.24/1.41  # Running protocol protocol_eprover_4a02c828a8cc55752123edbcc1ad40e453c11447 for 23 seconds:
% 0.24/1.41  # SinE strategy is GSinE(CountFormulas,hypos,1.4,,04,100,1.0)
% 0.24/1.41  # Preprocessing time       : 0.014 s
% 0.24/1.41  
% 0.24/1.41  # Failure: Out of unprocessed clauses!
% 0.24/1.41  # OLD status GaveUp
% 0.24/1.41  # Parsed axioms                        : 6
% 0.24/1.41  # Removed by relevancy pruning/SinE    : 5
% 0.24/1.41  # Initial clauses                      : 1
% 0.24/1.41  # Removed in clause preprocessing      : 0
% 0.24/1.41  # Initial clauses in saturation        : 1
% 0.24/1.41  # Processed clauses                    : 1
% 0.24/1.41  # ...of these trivial                  : 0
% 0.24/1.41  # ...subsumed                          : 0
% 0.24/1.41  # ...remaining for further processing  : 1
% 0.24/1.41  # Other redundant clauses eliminated   : 0
% 0.24/1.41  # Clauses deleted for lack of memory   : 0
% 0.24/1.41  # Backward-subsumed                    : 0
% 0.24/1.41  # Backward-rewritten                   : 0
% 0.24/1.41  # Generated clauses                    : 0
% 0.24/1.41  # ...of the previous two non-trivial   : 0
% 0.24/1.41  # Contextual simplify-reflections      : 0
% 0.24/1.41  # Paramodulations                      : 0
% 0.24/1.41  # Factorizations                       : 0
% 0.24/1.42  # Equation resolutions                 : 0
% 0.24/1.42  # Current number of processed clauses  : 1
% 0.24/1.42  #    Positive orientable unit clauses  : 0
% 0.24/1.42  #    Positive unorientable unit clauses: 0
% 0.24/1.42  #    Negative unit clauses             : 0
% 0.24/1.42  #    Non-unit-clauses                  : 1
% 0.24/1.42  # Current number of unprocessed clauses: 0
% 0.24/1.42  # ...number of literals in the above   : 0
% 0.24/1.42  # Current number of archived formulas  : 0
% 0.24/1.42  # Current number of archived clauses   : 0
% 0.24/1.42  # Clause-clause subsumption calls (NU) : 0
% 0.24/1.42  # Rec. Clause-clause subsumption calls : 0
% 0.24/1.42  # Non-unit clause-clause subsumptions  : 0
% 0.24/1.42  # Unit Clause-clause subsumption calls : 0
% 0.24/1.42  # Rewrite failures with RHS unbound    : 0
% 0.24/1.42  # BW rewrite match attempts            : 0
% 0.24/1.42  # BW rewrite match successes           : 0
% 0.24/1.42  # Condensation attempts                : 0
% 0.24/1.42  # Condensation successes               : 0
% 0.24/1.42  # Termbank termtop insertions          : 188
% 0.24/1.42  
% 0.24/1.42  # -------------------------------------------------
% 0.24/1.42  # User time                : 0.010 s
% 0.24/1.42  # System time              : 0.004 s
% 0.24/1.42  # Total time               : 0.014 s
% 0.24/1.42  # Maximum resident set size: 2640 pages
% 0.24/1.42  # Running protocol protocol_eprover_f171197f65f27d1ba69648a20c844832c84a5dd7 for 23 seconds:
% 0.24/1.42  # Preprocessing time       : 0.015 s
% 0.24/1.42  
% 0.24/1.42  # Proof found!
% 0.24/1.42  # SZS status Theorem
% 0.24/1.42  # SZS output start CNFRefutation
% See solution above
% 0.24/1.42  # Proof object total steps             : 36
% 0.24/1.42  # Proof object clause steps            : 23
% 0.24/1.42  # Proof object formula steps           : 13
% 0.24/1.42  # Proof object conjectures             : 8
% 0.24/1.42  # Proof object clause conjectures      : 5
% 0.24/1.42  # Proof object formula conjectures     : 3
% 0.24/1.42  # Proof object initial clauses used    : 12
% 0.24/1.42  # Proof object initial formulas used   : 6
% 0.24/1.42  # Proof object generating inferences   : 11
% 0.24/1.42  # Proof object simplifying inferences  : 6
% 0.24/1.42  # Training examples: 0 positive, 0 negative
% 0.24/1.42  # Parsed axioms                        : 6
% 0.24/1.42  # Removed by relevancy pruning/SinE    : 0
% 0.24/1.42  # Initial clauses                      : 23
% 0.24/1.42  # Removed in clause preprocessing      : 0
% 0.24/1.42  # Initial clauses in saturation        : 23
% 0.24/1.42  # Processed clauses                    : 98
% 0.24/1.42  # ...of these trivial                  : 0
% 0.24/1.42  # ...subsumed                          : 15
% 0.24/1.42  # ...remaining for further processing  : 83
% 0.24/1.42  # Other redundant clauses eliminated   : 0
% 0.24/1.42  # Clauses deleted for lack of memory   : 0
% 0.24/1.42  # Backward-subsumed                    : 2
% 0.24/1.42  # Backward-rewritten                   : 0
% 0.24/1.42  # Generated clauses                    : 119
% 0.24/1.42  # ...of the previous two non-trivial   : 101
% 0.24/1.42  # Contextual simplify-reflections      : 13
% 0.24/1.42  # Paramodulations                      : 119
% 0.24/1.42  # Factorizations                       : 0
% 0.24/1.42  # Equation resolutions                 : 0
% 0.24/1.42  # Current number of processed clauses  : 81
% 0.24/1.42  #    Positive orientable unit clauses  : 15
% 0.24/1.42  #    Positive unorientable unit clauses: 0
% 0.24/1.42  #    Negative unit clauses             : 3
% 0.24/1.42  #    Non-unit-clauses                  : 63
% 0.24/1.42  # Current number of unprocessed clauses: 25
% 0.24/1.42  # ...number of literals in the above   : 149
% 0.24/1.42  # Current number of archived formulas  : 0
% 0.24/1.42  # Current number of archived clauses   : 2
% 0.24/1.42  # Clause-clause subsumption calls (NU) : 1130
% 0.24/1.42  # Rec. Clause-clause subsumption calls : 463
% 0.24/1.42  # Non-unit clause-clause subsumptions  : 30
% 0.24/1.42  # Unit Clause-clause subsumption calls : 47
% 0.24/1.42  # Rewrite failures with RHS unbound    : 0
% 0.24/1.42  # BW rewrite match attempts            : 3
% 0.24/1.42  # BW rewrite match successes           : 0
% 0.24/1.42  # Condensation attempts                : 0
% 0.24/1.42  # Condensation successes               : 0
% 0.24/1.42  # Termbank termtop insertions          : 3588
% 0.24/1.42  
% 0.24/1.42  # -------------------------------------------------
% 0.24/1.42  # User time                : 0.020 s
% 0.24/1.42  # System time              : 0.002 s
% 0.24/1.42  # Total time               : 0.022 s
% 0.24/1.42  # Maximum resident set size: 3136 pages
%------------------------------------------------------------------------------