TSTP Solution File: SWC228+1 by E-SAT---3.1

View Problem - Process Solution

%------------------------------------------------------------------------------
% File     : E-SAT---3.1
% Problem  : SWC228+1 : TPTP v8.1.2. Released v2.4.0.
% Transfm  : none
% Format   : tptp:raw
% Command  : run_E %s %d THM

% Computer : n027.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 : 2400s
% WCLimit  : 300s
% DateTime : Tue Oct 10 19:42:07 EDT 2023

% Result   : Theorem 0.19s 0.61s
% Output   : CNFRefutation 0.19s
% Verified : 
% SZS Type : Refutation
%            Derivation depth      :    9
%            Number of leaves      :    9
% Syntax   : Number of formulae    :   40 (   8 unt;   0 def)
%            Number of atoms       :  197 (  58 equ)
%            Maximal formula atoms :   44 (   4 avg)
%            Number of connectives :  258 ( 101   ~;  94   |;  38   &)
%                                         (   0 <=>;  25  =>;   0  <=;   0 <~>)
%            Maximal formula depth :   31 (   6 avg)
%            Maximal term depth    :    4 (   1 avg)
%            Number of predicates  :    8 (   6 usr;   1 prp; 0-2 aty)
%            Number of functors    :   11 (  11 usr;   6 con; 0-3 aty)
%            Number of variables   :   77 (   0 sgn;  38   !;  14   ?)

% Comments : 
%------------------------------------------------------------------------------
fof(ax38,axiom,
    ! [X1] :
      ( ssItem(X1)
     => ~ memberP(nil,X1) ),
    file('/export/starexec/sandbox2/tmp/tmp.TWQ08DriZL/E---3.1_4161.p',ax38) ).

fof(co1,conjecture,
    ! [X1] :
      ( ssList(X1)
     => ! [X2] :
          ( ssList(X2)
         => ! [X3] :
              ( ssList(X3)
             => ! [X4] :
                  ( ssList(X4)
                 => ( X2 != X4
                    | X1 != X3
                    | nil = X1
                    | ? [X5] :
                        ( ssItem(X5)
                        & ? [X6] :
                            ( ssList(X6)
                            & ? [X7] :
                                ( ssList(X7)
                                & app(app(X6,cons(X5,nil)),X7) = X1
                                & ! [X8] :
                                    ( ssItem(X8)
                                   => ( ~ memberP(X6,X8)
                                      | ~ memberP(X7,X8)
                                      | ~ leq(X5,X8)
                                      | leq(X8,X5) ) ) ) ) )
                    | ! [X9] :
                        ( ssList(X9)
                       => ( app(X3,X9) != X4
                          | ~ strictorderedP(X3)
                          | ? [X10] :
                              ( ssItem(X10)
                              & ? [X11] :
                                  ( ssList(X11)
                                  & app(cons(X10,nil),X11) = X9
                                  & ? [X12] :
                                      ( ssItem(X12)
                                      & ? [X13] :
                                          ( ssList(X13)
                                          & app(X13,cons(X12,nil)) = X3
                                          & lt(X12,X10) ) ) ) ) ) )
                    | ( nil != X4
                      & nil = X3 ) ) ) ) ) ),
    file('/export/starexec/sandbox2/tmp/tmp.TWQ08DriZL/E---3.1_4161.p',co1) ).

fof(ax17,axiom,
    ssList(nil),
    file('/export/starexec/sandbox2/tmp/tmp.TWQ08DriZL/E---3.1_4161.p',ax17) ).

fof(ax28,axiom,
    ! [X1] :
      ( ssList(X1)
     => app(nil,X1) = X1 ),
    file('/export/starexec/sandbox2/tmp/tmp.TWQ08DriZL/E---3.1_4161.p',ax28) ).

fof(ax81,axiom,
    ! [X1] :
      ( ssList(X1)
     => ! [X2] :
          ( ssItem(X2)
         => cons(X2,X1) = app(cons(X2,nil),X1) ) ),
    file('/export/starexec/sandbox2/tmp/tmp.TWQ08DriZL/E---3.1_4161.p',ax81) ).

fof(ax16,axiom,
    ! [X1] :
      ( ssList(X1)
     => ! [X2] :
          ( ssItem(X2)
         => ssList(cons(X2,X1)) ) ),
    file('/export/starexec/sandbox2/tmp/tmp.TWQ08DriZL/E---3.1_4161.p',ax16) ).

fof(ax78,axiom,
    ! [X1] :
      ( ssList(X1)
     => ( nil != X1
       => cons(hd(X1),tl(X1)) = X1 ) ),
    file('/export/starexec/sandbox2/tmp/tmp.TWQ08DriZL/E---3.1_4161.p',ax78) ).

fof(ax24,axiom,
    ! [X1] :
      ( ssList(X1)
     => ( nil != X1
       => ssList(tl(X1)) ) ),
    file('/export/starexec/sandbox2/tmp/tmp.TWQ08DriZL/E---3.1_4161.p',ax24) ).

fof(ax22,axiom,
    ! [X1] :
      ( ssList(X1)
     => ( nil != X1
       => ssItem(hd(X1)) ) ),
    file('/export/starexec/sandbox2/tmp/tmp.TWQ08DriZL/E---3.1_4161.p',ax22) ).

fof(c_0_9,plain,
    ! [X1] :
      ( ssItem(X1)
     => ~ memberP(nil,X1) ),
    inference(fof_simplification,[status(thm)],[ax38]) ).

fof(c_0_10,negated_conjecture,
    ~ ! [X1] :
        ( ssList(X1)
       => ! [X2] :
            ( ssList(X2)
           => ! [X3] :
                ( ssList(X3)
               => ! [X4] :
                    ( ssList(X4)
                   => ( X2 != X4
                      | X1 != X3
                      | nil = X1
                      | ? [X5] :
                          ( ssItem(X5)
                          & ? [X6] :
                              ( ssList(X6)
                              & ? [X7] :
                                  ( ssList(X7)
                                  & app(app(X6,cons(X5,nil)),X7) = X1
                                  & ! [X8] :
                                      ( ssItem(X8)
                                     => ( ~ memberP(X6,X8)
                                        | ~ memberP(X7,X8)
                                        | ~ leq(X5,X8)
                                        | leq(X8,X5) ) ) ) ) )
                      | ! [X9] :
                          ( ssList(X9)
                         => ( app(X3,X9) != X4
                            | ~ strictorderedP(X3)
                            | ? [X10] :
                                ( ssItem(X10)
                                & ? [X11] :
                                    ( ssList(X11)
                                    & app(cons(X10,nil),X11) = X9
                                    & ? [X12] :
                                        ( ssItem(X12)
                                        & ? [X13] :
                                            ( ssList(X13)
                                            & app(X13,cons(X12,nil)) = X3
                                            & lt(X12,X10) ) ) ) ) ) )
                      | ( nil != X4
                        & nil = X3 ) ) ) ) ) ),
    inference(fof_simplification,[status(thm)],[inference(assume_negation,[status(cth)],[co1])]) ).

fof(c_0_11,plain,
    ! [X107] :
      ( ~ ssItem(X107)
      | ~ memberP(nil,X107) ),
    inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[c_0_9])]) ).

fof(c_0_12,negated_conjecture,
    ! [X18,X19,X20,X23,X24,X25,X26] :
      ( ssList(esk1_0)
      & ssList(esk2_0)
      & ssList(esk3_0)
      & ssList(esk4_0)
      & esk2_0 = esk4_0
      & esk1_0 = esk3_0
      & nil != esk1_0
      & ( ssItem(esk5_3(X18,X19,X20))
        | ~ ssList(X20)
        | app(app(X19,cons(X18,nil)),X20) != esk1_0
        | ~ ssList(X19)
        | ~ ssItem(X18) )
      & ( memberP(X19,esk5_3(X18,X19,X20))
        | ~ ssList(X20)
        | app(app(X19,cons(X18,nil)),X20) != esk1_0
        | ~ ssList(X19)
        | ~ ssItem(X18) )
      & ( memberP(X20,esk5_3(X18,X19,X20))
        | ~ ssList(X20)
        | app(app(X19,cons(X18,nil)),X20) != esk1_0
        | ~ ssList(X19)
        | ~ ssItem(X18) )
      & ( leq(X18,esk5_3(X18,X19,X20))
        | ~ ssList(X20)
        | app(app(X19,cons(X18,nil)),X20) != esk1_0
        | ~ ssList(X19)
        | ~ ssItem(X18) )
      & ( ~ leq(esk5_3(X18,X19,X20),X18)
        | ~ ssList(X20)
        | app(app(X19,cons(X18,nil)),X20) != esk1_0
        | ~ ssList(X19)
        | ~ ssItem(X18) )
      & ssList(esk6_0)
      & app(esk3_0,esk6_0) = esk4_0
      & strictorderedP(esk3_0)
      & ( ~ ssItem(X23)
        | ~ ssList(X24)
        | app(cons(X23,nil),X24) != esk6_0
        | ~ ssItem(X25)
        | ~ ssList(X26)
        | app(X26,cons(X25,nil)) != esk3_0
        | ~ lt(X25,X23) )
      & ( nil = esk4_0
        | nil != esk3_0 ) ),
    inference(distribute,[status(thm)],[inference(shift_quantors,[status(thm)],[inference(skolemize,[status(esa)],[inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[c_0_10])])])])]) ).

cnf(c_0_13,plain,
    ( ~ ssItem(X1)
    | ~ memberP(nil,X1) ),
    inference(split_conjunct,[status(thm)],[c_0_11]) ).

cnf(c_0_14,negated_conjecture,
    ( memberP(X1,esk5_3(X2,X1,X3))
    | ~ ssList(X3)
    | app(app(X1,cons(X2,nil)),X3) != esk1_0
    | ~ ssList(X1)
    | ~ ssItem(X2) ),
    inference(split_conjunct,[status(thm)],[c_0_12]) ).

cnf(c_0_15,plain,
    ssList(nil),
    inference(split_conjunct,[status(thm)],[ax17]) ).

fof(c_0_16,plain,
    ! [X50] :
      ( ~ ssList(X50)
      | app(nil,X50) = X50 ),
    inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[ax28])]) ).

cnf(c_0_17,negated_conjecture,
    ( app(app(nil,cons(X1,nil)),X2) != esk1_0
    | ~ ssList(X2)
    | ~ ssItem(esk5_3(X1,nil,X2))
    | ~ ssItem(X1) ),
    inference(cn,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_13,c_0_14]),c_0_15])]) ).

cnf(c_0_18,plain,
    ( app(nil,X1) = X1
    | ~ ssList(X1) ),
    inference(split_conjunct,[status(thm)],[c_0_16]) ).

cnf(c_0_19,negated_conjecture,
    ( ssItem(esk5_3(X1,X2,X3))
    | ~ ssList(X3)
    | app(app(X2,cons(X1,nil)),X3) != esk1_0
    | ~ ssList(X2)
    | ~ ssItem(X1) ),
    inference(split_conjunct,[status(thm)],[c_0_12]) ).

cnf(c_0_20,negated_conjecture,
    ( app(cons(X1,nil),X2) != esk1_0
    | ~ ssList(cons(X1,nil))
    | ~ ssList(X2)
    | ~ ssItem(esk5_3(X1,nil,X2))
    | ~ ssItem(X1) ),
    inference(spm,[status(thm)],[c_0_17,c_0_18]) ).

fof(c_0_21,plain,
    ! [X57,X58] :
      ( ~ ssList(X57)
      | ~ ssItem(X58)
      | cons(X58,X57) = app(cons(X58,nil),X57) ),
    inference(shift_quantors,[status(thm)],[inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[ax81])])]) ).

cnf(c_0_22,negated_conjecture,
    ( app(cons(X1,nil),X2) != esk1_0
    | ~ ssList(cons(X1,nil))
    | ~ ssList(X2)
    | ~ ssItem(X1) ),
    inference(csr,[status(thm)],[inference(cn,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_19,c_0_18]),c_0_15])]),c_0_20]) ).

cnf(c_0_23,plain,
    ( cons(X2,X1) = app(cons(X2,nil),X1)
    | ~ ssList(X1)
    | ~ ssItem(X2) ),
    inference(split_conjunct,[status(thm)],[c_0_21]) ).

fof(c_0_24,plain,
    ! [X65,X66] :
      ( ~ ssList(X65)
      | ~ ssItem(X66)
      | ssList(cons(X66,X65)) ),
    inference(shift_quantors,[status(thm)],[inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[ax16])])]) ).

fof(c_0_25,plain,
    ! [X115] :
      ( ~ ssList(X115)
      | nil = X115
      | cons(hd(X115),tl(X115)) = X115 ),
    inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[ax78])]) ).

fof(c_0_26,plain,
    ! [X118] :
      ( ~ ssList(X118)
      | nil = X118
      | ssList(tl(X118)) ),
    inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[ax24])]) ).

fof(c_0_27,plain,
    ! [X108] :
      ( ~ ssList(X108)
      | nil = X108
      | ssItem(hd(X108)) ),
    inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[ax22])]) ).

cnf(c_0_28,negated_conjecture,
    ( cons(X1,X2) != esk1_0
    | ~ ssList(cons(X1,nil))
    | ~ ssList(X2)
    | ~ ssItem(X1) ),
    inference(spm,[status(thm)],[c_0_22,c_0_23]) ).

cnf(c_0_29,plain,
    ( ssList(cons(X2,X1))
    | ~ ssList(X1)
    | ~ ssItem(X2) ),
    inference(split_conjunct,[status(thm)],[c_0_24]) ).

cnf(c_0_30,plain,
    ( nil = X1
    | cons(hd(X1),tl(X1)) = X1
    | ~ ssList(X1) ),
    inference(split_conjunct,[status(thm)],[c_0_25]) ).

cnf(c_0_31,negated_conjecture,
    ssList(esk1_0),
    inference(split_conjunct,[status(thm)],[c_0_12]) ).

cnf(c_0_32,negated_conjecture,
    nil != esk1_0,
    inference(split_conjunct,[status(thm)],[c_0_12]) ).

cnf(c_0_33,plain,
    ( nil = X1
    | ssList(tl(X1))
    | ~ ssList(X1) ),
    inference(split_conjunct,[status(thm)],[c_0_26]) ).

cnf(c_0_34,plain,
    ( nil = X1
    | ssItem(hd(X1))
    | ~ ssList(X1) ),
    inference(split_conjunct,[status(thm)],[c_0_27]) ).

cnf(c_0_35,negated_conjecture,
    ( cons(X1,X2) != esk1_0
    | ~ ssList(X2)
    | ~ ssItem(X1) ),
    inference(cn,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_28,c_0_29]),c_0_15])]) ).

cnf(c_0_36,negated_conjecture,
    cons(hd(esk1_0),tl(esk1_0)) = esk1_0,
    inference(sr,[status(thm)],[inference(spm,[status(thm)],[c_0_30,c_0_31]),c_0_32]) ).

cnf(c_0_37,negated_conjecture,
    ssList(tl(esk1_0)),
    inference(sr,[status(thm)],[inference(spm,[status(thm)],[c_0_33,c_0_31]),c_0_32]) ).

cnf(c_0_38,negated_conjecture,
    ssItem(hd(esk1_0)),
    inference(sr,[status(thm)],[inference(spm,[status(thm)],[c_0_34,c_0_31]),c_0_32]) ).

cnf(c_0_39,negated_conjecture,
    $false,
    inference(cn,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_35,c_0_36]),c_0_37]),c_0_38])]),
    [proof] ).

%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.07/0.12  % Problem    : SWC228+1 : TPTP v8.1.2. Released v2.4.0.
% 0.07/0.13  % Command    : run_E %s %d THM
% 0.13/0.34  % Computer : n027.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   : 2400
% 0.13/0.34  % WCLimit    : 300
% 0.13/0.34  % DateTime   : Tue Oct  3 02:06:46 EDT 2023
% 0.13/0.34  % CPUTime    : 
% 0.19/0.47  Running first-order model finding
% 0.19/0.47  Running: /export/starexec/sandbox2/solver/bin/eprover --delete-bad-limit=2000000000 --definitional-cnf=24 -s --print-statistics -R --print-version --proof-object --satauto-schedule=8 --cpu-limit=300 /export/starexec/sandbox2/tmp/tmp.TWQ08DriZL/E---3.1_4161.p
% 0.19/0.61  # Version: 3.1pre001
% 0.19/0.61  # Preprocessing class: FSLSSMSSSSSNFFN.
% 0.19/0.61  # Scheduled 4 strats onto 8 cores with 300 seconds (2400 total)
% 0.19/0.61  # Starting G-E--_207_C18_F1_SE_CS_SP_PI_PS_S5PRR_S2S with 1500s (5) cores
% 0.19/0.61  # Starting new_bool_3 with 300s (1) cores
% 0.19/0.61  # Starting new_bool_1 with 300s (1) cores
% 0.19/0.61  # Starting sh5l with 300s (1) cores
% 0.19/0.61  # new_bool_3 with pid 4239 completed with status 0
% 0.19/0.61  # Result found by new_bool_3
% 0.19/0.61  # Preprocessing class: FSLSSMSSSSSNFFN.
% 0.19/0.61  # Scheduled 4 strats onto 8 cores with 300 seconds (2400 total)
% 0.19/0.61  # Starting G-E--_207_C18_F1_SE_CS_SP_PI_PS_S5PRR_S2S with 1500s (5) cores
% 0.19/0.61  # Starting new_bool_3 with 300s (1) cores
% 0.19/0.61  # SinE strategy is GSinE(CountFormulas,hypos,1.5,,3,20000,1.0)
% 0.19/0.61  # Search class: FGHSF-FFMM31-MFFFFFNN
% 0.19/0.61  # Scheduled 5 strats onto 1 cores with 300 seconds (300 total)
% 0.19/0.61  # Starting G-E--_302_C18_F1_URBAN_RG_S04BN with 181s (1) cores
% 0.19/0.61  # G-E--_302_C18_F1_URBAN_RG_S04BN with pid 4242 completed with status 0
% 0.19/0.61  # Result found by G-E--_302_C18_F1_URBAN_RG_S04BN
% 0.19/0.61  # Preprocessing class: FSLSSMSSSSSNFFN.
% 0.19/0.61  # Scheduled 4 strats onto 8 cores with 300 seconds (2400 total)
% 0.19/0.61  # Starting G-E--_207_C18_F1_SE_CS_SP_PI_PS_S5PRR_S2S with 1500s (5) cores
% 0.19/0.61  # Starting new_bool_3 with 300s (1) cores
% 0.19/0.61  # SinE strategy is GSinE(CountFormulas,hypos,1.5,,3,20000,1.0)
% 0.19/0.61  # Search class: FGHSF-FFMM31-MFFFFFNN
% 0.19/0.61  # Scheduled 5 strats onto 1 cores with 300 seconds (300 total)
% 0.19/0.61  # Starting G-E--_302_C18_F1_URBAN_RG_S04BN with 181s (1) cores
% 0.19/0.61  # Preprocessing time       : 0.004 s
% 0.19/0.61  
% 0.19/0.61  # Proof found!
% 0.19/0.61  # SZS status Theorem
% 0.19/0.61  # SZS output start CNFRefutation
% See solution above
% 0.19/0.61  # Parsed axioms                        : 96
% 0.19/0.61  # Removed by relevancy pruning/SinE    : 52
% 0.19/0.61  # Initial clauses                      : 89
% 0.19/0.61  # Removed in clause preprocessing      : 1
% 0.19/0.61  # Initial clauses in saturation        : 88
% 0.19/0.61  # Processed clauses                    : 790
% 0.19/0.61  # ...of these trivial                  : 35
% 0.19/0.61  # ...subsumed                          : 328
% 0.19/0.61  # ...remaining for further processing  : 427
% 0.19/0.61  # Other redundant clauses eliminated   : 3
% 0.19/0.61  # Clauses deleted for lack of memory   : 0
% 0.19/0.61  # Backward-subsumed                    : 14
% 0.19/0.61  # Backward-rewritten                   : 14
% 0.19/0.61  # Generated clauses                    : 4140
% 0.19/0.61  # ...of the previous two non-redundant : 3818
% 0.19/0.61  # ...aggressively subsumed             : 0
% 0.19/0.61  # Contextual simplify-reflections      : 76
% 0.19/0.61  # Paramodulations                      : 4054
% 0.19/0.61  # Factorizations                       : 62
% 0.19/0.61  # NegExts                              : 0
% 0.19/0.61  # Equation resolutions                 : 24
% 0.19/0.61  # Total rewrite steps                  : 1746
% 0.19/0.61  # Propositional unsat checks           : 0
% 0.19/0.61  #    Propositional check models        : 0
% 0.19/0.61  #    Propositional check unsatisfiable : 0
% 0.19/0.61  #    Propositional clauses             : 0
% 0.19/0.61  #    Propositional clauses after purity: 0
% 0.19/0.61  #    Propositional unsat core size     : 0
% 0.19/0.61  #    Propositional preprocessing time  : 0.000
% 0.19/0.61  #    Propositional encoding time       : 0.000
% 0.19/0.61  #    Propositional solver time         : 0.000
% 0.19/0.61  #    Success case prop preproc time    : 0.000
% 0.19/0.61  #    Success case prop encoding time   : 0.000
% 0.19/0.61  #    Success case prop solver time     : 0.000
% 0.19/0.61  # Current number of processed clauses  : 397
% 0.19/0.61  #    Positive orientable unit clauses  : 28
% 0.19/0.61  #    Positive unorientable unit clauses: 0
% 0.19/0.61  #    Negative unit clauses             : 23
% 0.19/0.61  #    Non-unit-clauses                  : 346
% 0.19/0.61  # Current number of unprocessed clauses: 3055
% 0.19/0.61  # ...number of literals in the above   : 14193
% 0.19/0.61  # Current number of archived formulas  : 0
% 0.19/0.61  # Current number of archived clauses   : 28
% 0.19/0.61  # Clause-clause subsumption calls (NU) : 13080
% 0.19/0.61  # Rec. Clause-clause subsumption calls : 3140
% 0.19/0.61  # Non-unit clause-clause subsumptions  : 303
% 0.19/0.61  # Unit Clause-clause subsumption calls : 876
% 0.19/0.61  # Rewrite failures with RHS unbound    : 0
% 0.19/0.61  # BW rewrite match attempts            : 5
% 0.19/0.61  # BW rewrite match successes           : 5
% 0.19/0.61  # Condensation attempts                : 0
% 0.19/0.61  # Condensation successes               : 0
% 0.19/0.61  # Termbank termtop insertions          : 76787
% 0.19/0.61  
% 0.19/0.61  # -------------------------------------------------
% 0.19/0.61  # User time                : 0.116 s
% 0.19/0.61  # System time              : 0.003 s
% 0.19/0.61  # Total time               : 0.119 s
% 0.19/0.61  # Maximum resident set size: 2068 pages
% 0.19/0.61  
% 0.19/0.61  # -------------------------------------------------
% 0.19/0.61  # User time                : 0.120 s
% 0.19/0.61  # System time              : 0.004 s
% 0.19/0.61  # Total time               : 0.125 s
% 0.19/0.61  # Maximum resident set size: 1804 pages
% 0.19/0.61  % E---3.1 exiting
%------------------------------------------------------------------------------