↑ Up

E---3.5.1.THM-CRf.s

View TPTP
Problem
Process solution in
SystemOnTSTP
Download .tgz
%------------------------------------------------------------------------------
% File     : E---3.5.1
% Problem  : NUM710^1 : TPTP v9.3.1. Released v3.7.0.
% Transfm  : none
% Format   : tptp:raw
% Command  : run_E /export/starexec/sandbox/benchmark/theBenchmark.p 300 THM

% Computer : n012.cluster.edu
% Model    : x86_64 x86_64
% CPU      : Intel(R) Xeon(R) CPU E5-2620 v4 2.10GHz
% Memory   : 8046.5625MB
% OS       : Linux 6.8.0-71-generic
% CPULimit : 300s
% WCLimit  : 300s
% DateTime : Wed Sep 30 08:16:55 AM UTC 2026

% Result   : Theorem 0.08s 0.15s
% Output   : CNFRefutation 0.08s
% Verified : 
% SZS Type : Refutation
%            Derivation depth      :   13
%            Number of leaves      :    8
% Syntax   : Number of formulae    :   38 (  27 unt;   0 typ;   0 def)
%            Number of atoms       :   74 (  41 equ;   0 cnn)
%            Maximal formula atoms :    6 (   1 avg)
%            Number of connectives :  326 (  19   ~;  18   |;   1   &; 283   @)
%                                         (   0 <=>;   5  =>;   0  <=;   0 <~>)
%            Maximal formula depth :   11 (   4 avg)
%            Number of types       :    3 (   2 usr)
%            Number of type conns  :    6 (   6   >;   0   *;   0   +;   0  <<)
%            Number of symbols     :   11 (   9 usr;   4 con; 0-2 aty)
%            Number of variables   :   64 (  18   ^;  46   !;   0   ?;  64   :)

% Comments : 
%------------------------------------------------------------------------------
thf(decl_sort1,type,
    nat: $tType ).

thf(decl_sort2,type,
    set: $tType ).

thf(decl_23,type,
    x: nat ).

thf(decl_24,type,
    y: nat ).

thf(decl_25,type,
    ts: nat > nat > nat ).

thf(decl_26,type,
    esti: nat > set > $o ).

thf(decl_27,type,
    setof: ( nat > $o ) > set ).

thf(decl_28,type,
    n_1: nat ).

thf(decl_29,type,
    suc: nat > nat ).

thf(decl_30,type,
    pl: nat > nat > nat ).

thf(decl_31,type,
    esk1_1: set > nat ).

thf(satz29,conjecture,
    ( ( ts @ x @ y )
    = ( ts @ y @ x ) ),
    file('/export/starexec/sandbox/tmp/tmp.m3J6J2S9WX/E---3.1_51578.p',satz29) ).

thf(estii,axiom,
    ! [X1: nat > $o,X2: nat] :
      ( ( X1 @ X2 )
     => ( esti @ X2 @ ( setof @ X1 ) ) ),
    file('/export/starexec/sandbox/tmp/tmp.m3J6J2S9WX/E---3.1_51578.p',estii) ).

thf(ax5,axiom,
    ! [X3: set] :
      ( ( esti @ n_1 @ X3 )
     => ( ! [X4: nat] :
            ( ( esti @ X4 @ X3 )
           => ( esti @ ( suc @ X4 ) @ X3 ) )
       => ! [X4: nat] : ( esti @ X4 @ X3 ) ) ),
    file('/export/starexec/sandbox/tmp/tmp.m3J6J2S9WX/E---3.1_51578.p',ax5) ).

thf(satz28a,axiom,
    ! [X4: nat] :
      ( ( ts @ X4 @ n_1 )
      = X4 ),
    file('/export/starexec/sandbox/tmp/tmp.m3J6J2S9WX/E---3.1_51578.p',satz28a) ).

thf(satz28c,axiom,
    ! [X4: nat] :
      ( ( ts @ n_1 @ X4 )
      = X4 ),
    file('/export/starexec/sandbox/tmp/tmp.m3J6J2S9WX/E---3.1_51578.p',satz28c) ).

thf(estie,axiom,
    ! [X1: nat > $o,X2: nat] :
      ( ( esti @ X2 @ ( setof @ X1 ) )
     => ( X1 @ X2 ) ),
    file('/export/starexec/sandbox/tmp/tmp.m3J6J2S9WX/E---3.1_51578.p',estie) ).

thf(satz28d,axiom,
    ! [X4: nat,X5: nat] :
      ( ( ts @ ( suc @ X4 ) @ X5 )
      = ( pl @ ( ts @ X4 @ X5 ) @ X5 ) ),
    file('/export/starexec/sandbox/tmp/tmp.m3J6J2S9WX/E---3.1_51578.p',satz28d) ).

thf(satz28f,axiom,
    ! [X4: nat,X5: nat] :
      ( ( pl @ ( ts @ X4 @ X5 ) @ X4 )
      = ( ts @ X4 @ ( suc @ X5 ) ) ),
    file('/export/starexec/sandbox/tmp/tmp.m3J6J2S9WX/E---3.1_51578.p',satz28f) ).

thf(c_0_8,negated_conjecture,
    ( ( ts @ x @ y )
   != ( ts @ y @ x ) ),
    inference(assume_negation,[status(cth)],[satz29]) ).

thf(c_0_9,negated_conjecture,
    ( ( ts @ x @ y )
   != ( ts @ y @ x ) ),
    inference(fof_simplification,[status(thm)],[c_0_8]) ).

thf(c_0_10,plain,
    ! [X24: nat > $o,X25: nat] :
      ( ~ ( X24 @ X25 )
      | ( esti @ X25 @ ( setof @ X24 ) ) ),
    inference(fof_nnf,[status(thm)],[inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[estii])])]) ).

thf(c_0_11,negated_conjecture,
    ( ( ts @ x @ y )
   != ( ts @ y @ x ) ),
    inference(fof_nnf,[status(thm)],[c_0_9]) ).

thf(c_0_12,plain,
    ! [X21: set,X23: nat] :
      ( ( ( esti @ ( esk1_1 @ X21 ) @ X21 )
        | ( esti @ X23 @ X21 )
        | ~ ( esti @ n_1 @ X21 ) )
      & ( ~ ( esti @ ( suc @ ( esk1_1 @ X21 ) ) @ X21 )
        | ( esti @ X23 @ X21 )
        | ~ ( esti @ n_1 @ X21 ) ) ),
    inference(distribute,[status(thm)],[inference(fof_nnf,[status(thm)],[inference(shift_quantors,[status(thm)],[inference(skolemize,[status(esa)],[inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[ax5])])])])])]) ).

thf(c_0_13,plain,
    ! [X1: nat > $o,X2: nat] :
      ( ( esti @ X2 @ ( setof @ X1 ) )
      | ~ ( X1 @ X2 ) ),
    inference(split_conjunct,[status(thm)],[c_0_10]) ).

thf(c_0_14,negated_conjecture,
    ( ( ts @ x @ y )
   != ( ts @ y @ x ) ),
    inference(split_conjunct,[status(thm)],[c_0_11]) ).

thf(c_0_15,plain,
    ! [X26: nat] :
      ( ( ts @ X26 @ n_1 )
      = X26 ),
    inference(variable_rename,[status(thm)],[satz28a]) ).

thf(c_0_16,plain,
    ! [X27: nat] :
      ( ( ts @ n_1 @ X27 )
      = X27 ),
    inference(variable_rename,[status(thm)],[satz28c]) ).

thf(c_0_17,plain,
    ! [X2: nat,X3: set] :
      ( ( esti @ ( esk1_1 @ X3 ) @ X3 )
      | ( esti @ X2 @ X3 )
      | ~ ( esti @ n_1 @ X3 ) ),
    inference(split_conjunct,[status(thm)],[c_0_12]) ).

thf(c_0_18,plain,
    ! [X2: nat] :
      ( ( esti @ X2
        @ ( setof
          @ ^ [Z0: nat] :
              ( ( ts @ x @ Z0 )
              = ( ts @ Z0 @ x ) ) ) )
      | ( ( ts @ x @ X2 )
       != ( ts @ X2 @ x ) ) ),
    inference(trigger,[status(thm)],[inference(cn,[status(thm)],[]),c_0_13,c_0_14]) ).

thf(c_0_19,plain,
    ! [X2: nat] :
      ( ( ts @ X2 @ n_1 )
      = X2 ),
    inference(split_conjunct,[status(thm)],[c_0_15]) ).

thf(c_0_20,plain,
    ! [X2: nat] :
      ( ( ts @ n_1 @ X2 )
      = X2 ),
    inference(split_conjunct,[status(thm)],[c_0_16]) ).

thf(c_0_21,plain,
    ! [X19: nat > $o,X20: nat] :
      ( ~ ( esti @ X20 @ ( setof @ X19 ) )
      | ( X19 @ X20 ) ),
    inference(fof_nnf,[status(thm)],[inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[estie])])]) ).

thf(c_0_22,plain,
    ! [X2: nat] :
      ( ( esti
        @ ( esk1_1
          @ ( setof
            @ ^ [Z0: nat] :
                ( ( ts @ x @ Z0 )
                = ( ts @ Z0 @ x ) ) ) )
        @ ( setof
          @ ^ [Z0: nat] :
              ( ( ts @ x @ Z0 )
              = ( ts @ Z0 @ x ) ) ) )
      | ( esti @ X2
        @ ( setof
          @ ^ [Z0: nat] :
              ( ( ts @ x @ Z0 )
              = ( ts @ Z0 @ x ) ) ) ) ),
    inference(cn,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_17,c_0_18]),c_0_19]),c_0_20])]) ).

thf(c_0_23,plain,
    ! [X30: nat,X31: nat] :
      ( ( ts @ ( suc @ X30 ) @ X31 )
      = ( pl @ ( ts @ X30 @ X31 ) @ X31 ) ),
    inference(variable_rename,[status(thm)],[satz28d]) ).

thf(c_0_24,plain,
    ! [X2: nat,X1: nat > $o] :
      ( ( X1 @ X2 )
      | ~ ( esti @ X2 @ ( setof @ X1 ) ) ),
    inference(split_conjunct,[status(thm)],[c_0_21]) ).

thf(c_0_25,plain,
    ( esti
    @ ( esk1_1
      @ ( setof
        @ ^ [Z0: nat] :
            ( ( ts @ x @ Z0 )
            = ( ts @ Z0 @ x ) ) ) )
    @ ( setof
      @ ^ [Z0: nat] :
          ( ( ts @ x @ Z0 )
          = ( ts @ Z0 @ x ) ) ) ),
    inference(ef,[status(thm)],[c_0_22]) ).

thf(c_0_26,plain,
    ! [X28: nat,X29: nat] :
      ( ( pl @ ( ts @ X28 @ X29 ) @ X28 )
      = ( ts @ X28 @ ( suc @ X29 ) ) ),
    inference(variable_rename,[status(thm)],[satz28f]) ).

thf(c_0_27,plain,
    ! [X2: nat,X3: set] :
      ( ( esti @ X2 @ X3 )
      | ~ ( esti @ ( suc @ ( esk1_1 @ X3 ) ) @ X3 )
      | ~ ( esti @ n_1 @ X3 ) ),
    inference(split_conjunct,[status(thm)],[c_0_12]) ).

thf(c_0_28,plain,
    ! [X2: nat,X4: nat] :
      ( ( ts @ ( suc @ X2 ) @ X4 )
      = ( pl @ ( ts @ X2 @ X4 ) @ X4 ) ),
    inference(split_conjunct,[status(thm)],[c_0_23]) ).

thf(c_0_29,plain,
    ( ( ts
      @ ( esk1_1
        @ ( setof
          @ ^ [Z0: nat] :
              ( ( ts @ x @ Z0 )
              = ( ts @ Z0 @ x ) ) ) )
      @ x )
    = ( ts @ x
      @ ( esk1_1
        @ ( setof
          @ ^ [Z0: nat] :
              ( ( ts @ x @ Z0 )
              = ( ts @ Z0 @ x ) ) ) ) ) ),
    inference(cn,[status(thm)],[inference(spm,[status(thm)],[c_0_24,c_0_25])]) ).

thf(c_0_30,plain,
    ! [X2: nat,X4: nat] :
      ( ( pl @ ( ts @ X2 @ X4 ) @ X2 )
      = ( ts @ X2 @ ( suc @ X4 ) ) ),
    inference(split_conjunct,[status(thm)],[c_0_26]) ).

thf(c_0_31,plain,
    ! [X2: nat] :
      ( ( esti @ X2
        @ ( setof
          @ ^ [Z0: nat] :
              ( ( ts @ x @ Z0 )
              = ( ts @ Z0 @ x ) ) ) )
      | ( ( ts
          @ ( suc
            @ ( esk1_1
              @ ( setof
                @ ^ [Z0: nat] :
                    ( ( ts @ x @ Z0 )
                    = ( ts @ Z0 @ x ) ) ) ) )
          @ x )
       != ( ts @ x
          @ ( suc
            @ ( esk1_1
              @ ( setof
                @ ^ [Z0: nat] :
                    ( ( ts @ x @ Z0 )
                    = ( ts @ Z0 @ x ) ) ) ) ) ) )
      | ~ ( esti @ n_1
          @ ( setof
            @ ^ [Z0: nat] :
                ( ( ts @ x @ Z0 )
                = ( ts @ Z0 @ x ) ) ) ) ),
    inference(spm,[status(thm)],[c_0_27,c_0_18]) ).

thf(c_0_32,plain,
    ( ( ts
      @ ( suc
        @ ( esk1_1
          @ ( setof
            @ ^ [Z0: nat] :
                ( ( ts @ x @ Z0 )
                = ( ts @ Z0 @ x ) ) ) ) )
      @ x )
    = ( ts @ x
      @ ( suc
        @ ( esk1_1
          @ ( setof
            @ ^ [Z0: nat] :
                ( ( ts @ x @ Z0 )
                = ( ts @ Z0 @ x ) ) ) ) ) ) ),
    inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_28,c_0_29]),c_0_30]) ).

thf(c_0_33,plain,
    ! [X2: nat] :
      ( ( esti @ X2
        @ ( setof
          @ ^ [Z0: nat] :
              ( ( ts @ x @ Z0 )
              = ( ts @ Z0 @ x ) ) ) )
      | ~ ( esti @ n_1
          @ ( setof
            @ ^ [Z0: nat] :
                ( ( ts @ x @ Z0 )
                = ( ts @ Z0 @ x ) ) ) ) ),
    inference(cn,[status(thm)],[inference(rw,[status(thm)],[c_0_31,c_0_32])]) ).

thf(c_0_34,plain,
    ! [X2: nat] :
      ( ( ( ts @ x @ X2 )
        = ( ts @ X2 @ x ) )
      | ~ ( esti @ X2
          @ ( setof
            @ ^ [Z0: nat] :
                ( ( ts @ x @ Z0 )
                = ( ts @ Z0 @ x ) ) ) ) ),
    inference(trigger,[status(thm)],[inference(cn,[status(thm)],[]),c_0_24,c_0_14]) ).

thf(c_0_35,plain,
    ! [X2: nat] :
      ( esti @ X2
      @ ( setof
        @ ^ [Z0: nat] :
            ( ( ts @ x @ Z0 )
            = ( ts @ Z0 @ x ) ) ) ),
    inference(cn,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(cn,[status(thm)],[inference(spm,[status(thm)],[c_0_33,c_0_13])]),c_0_19]),c_0_20])]) ).

thf(c_0_36,plain,
    ! [X2: nat] :
      ( ( ts @ x @ X2 )
      = ( ts @ X2 @ x ) ),
    inference(cn,[status(thm)],[inference(rw,[status(thm)],[c_0_34,c_0_35])]) ).

thf(c_0_37,negated_conjecture,
    $false,
    inference(cn,[status(thm)],[inference(rw,[status(thm)],[c_0_14,c_0_36])]),
    [proof] ).

%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.00/0.01  % Problem  : NUM710^1 : TPTP v9.3.1. Released v3.7.0.
% 0.00/0.02  % Command  : run_E /export/starexec/sandbox/benchmark/theBenchmark.p 300 THM
% 0.00/0.10  % Computer : n012.cluster.edu
% 0.00/0.10  % Model    : x86_64 x86_64
% 0.00/0.10  % CPU      : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.00/0.10  % Memory   : 8046.5625MB
% 0.00/0.10  % OS       : Linux 6.8.0-71-generic
% 0.00/0.10  % CPULimit : 300
% 0.00/0.10  % WCLimit  : 300
% 0.00/0.10  % DateTime : Tue Sep 29 12:43:03 UTC 2026
% 0.00/0.11  % CPUTime  : 
% 0.00/0.11  Running run_E /export/starexec/sandbox/benchmark/theBenchmark.p 300 THM
% 0.08/0.13  Running higher-order theorem proving
% 0.08/0.13  Running: /export/starexec/sandbox/solver/bin/eprover-ho --delete-bad-limit=2000000000 --definitional-cnf=24 -s --print-statistics -R --print-version --proof-object --auto-schedule=8 --cpu-limit=300 /export/starexec/sandbox/tmp/tmp.m3J6J2S9WX/E---3.1_51578.p
% 0.08/0.15  % Version: 3.5.1-ho
% 0.08/0.15  % Preprocessing class: HSMSSMSSSSSNSFA.
% 0.08/0.15  % Scheduled 4 strats onto 8 cores with 300 seconds (2400 total)
% 0.08/0.15  % Starting new_ho_14 with 1200s (4) cores
% 0.08/0.15  % Starting new_ho_13 with 600s (2) cores
% 0.08/0.15  % Starting new_ho_10_cnf2 with 300s (1) cores
% 0.08/0.15  % Starting new_bool_3 with 300s (1) cores
% 0.08/0.15  % new_ho_13 with pid 51592 completed with status 0
% 0.08/0.15  % Result found by new_ho_13
% 0.08/0.15  % Preprocessing class: HSMSSMSSSSSNSFA.
% 0.08/0.15  % Scheduled 4 strats onto 8 cores with 300 seconds (2400 total)
% 0.08/0.15  % Starting new_ho_14 with 1200s (4) cores
% 0.08/0.15  % Starting new_ho_13 with 600s (2) cores
% 0.08/0.15  % (lift_lambdas = 0, lambda_to_forall = 1,unroll_only_formulas = 1, sine = Auto)
% 0.08/0.15  % No SInE strategy applied
% 0.08/0.15  % Search class: HGUSM-FFMF21-MSFFFSBN
% 0.08/0.15  % partial match(2): HGUSM-FFSF21-SSFFFSBN
% 0.08/0.15  % Scheduled 5 strats onto 2 cores with 600 seconds (600 total)
% 0.08/0.15  % Starting SubtermCWHack with 61s (1) cores
% 0.08/0.15  % Starting new_ho_14 with 361s (1) cores
% 0.08/0.15  % SubtermCWHack with pid 51596 completed with status 0
% 0.08/0.15  % Result found by SubtermCWHack
% 0.08/0.15  % Preprocessing class: HSMSSMSSSSSNSFA.
% 0.08/0.15  % Scheduled 4 strats onto 8 cores with 300 seconds (2400 total)
% 0.08/0.15  % Starting new_ho_14 with 1200s (4) cores
% 0.08/0.15  % Starting new_ho_13 with 600s (2) cores
% 0.08/0.15  % (lift_lambdas = 0, lambda_to_forall = 1,unroll_only_formulas = 1, sine = Auto)
% 0.08/0.15  % No SInE strategy applied
% 0.08/0.15  % Search class: HGUSM-FFMF21-MSFFFSBN
% 0.08/0.15  % partial match(2): HGUSM-FFSF21-SSFFFSBN
% 0.08/0.15  % Scheduled 5 strats onto 2 cores with 600 seconds (600 total)
% 0.08/0.15  % Starting SubtermCWHack with 61s (1) cores
% 0.08/0.15  % Preprocessing time       : 0.001 s
% 0.08/0.15  
% 0.08/0.15  % Proof found!
% 0.08/0.15  % SZS status Theorem
% 0.08/0.15  % SZS output start CNFRefutation
% See solution above
% 0.08/0.15  % Parsed axioms                        : 18
% 0.08/0.15  % Removed by relevancy pruning/SinE    : 0
% 0.08/0.15  % Initial clauses                      : 19
% 0.08/0.15  % Removed in clause preprocessing      : 10
% 0.08/0.15  % Initial clauses in saturation        : 17
% 0.08/0.15  % Processed clauses                    : 73
% 0.08/0.15  % ...of these trivial                  : 1
% 0.08/0.15  % ...subsumed                          : 24
% 0.08/0.15  % ...remaining for further processing  : 48
% 0.08/0.15  % Other redundant clauses eliminated   : 0
% 0.08/0.15  % Clauses deleted for lack of memory   : 0
% 0.08/0.15  % Backward-subsumed                    : 3
% 0.08/0.15  % Backward-rewritten                   : 7
% 0.08/0.15  % Generated clauses                    : 127
% 0.08/0.15  % ...of the previous two non-redundant : 77
% 0.08/0.15  % ...aggressively subsumed             : 0
% 0.08/0.15  % Contextual simplify-reflections      : 0
% 0.08/0.15  % Paramodulations                      : 124
% 0.08/0.15  % Factorizations                       : 2
% 0.08/0.15  % NegExts                              : 0
% 0.08/0.15  % Equation resolutions                 : 0
% 0.08/0.15  % Disequality decompositions           : 0
% 0.08/0.15  % Total rewrite steps                  : 118
% 0.08/0.15  % ...of those cached                   : 23
% 0.08/0.15  % Propositional unsat checks           : 0
% 0.08/0.15  %    Propositional check models        : 0
% 0.08/0.15  %    Propositional check unsatisfiable : 0
% 0.08/0.15  %    Propositional clauses             : 0
% 0.08/0.15  %    Propositional clauses after purity: 0
% 0.08/0.15  %    Propositional unsat core size     : 0
% 0.08/0.15  %    Propositional preprocessing time  : 0.000
% 0.08/0.15  %    Propositional encoding time       : 0.000
% 0.08/0.15  %    Propositional solver time         : 0.000
% 0.08/0.15  %    Success case prop preproc time    : 0.000
% 0.08/0.15  %    Success case prop encoding time   : 0.000
% 0.08/0.15  %    Success case prop solver time     : 0.000
% 0.08/0.15  % Current number of processed clauses  : 37
% 0.08/0.15  %    Positive orientable unit clauses  : 16
% 0.08/0.15  %    Positive unorientable unit clauses: 10
% 0.08/0.15  %    Negative unit clauses             : 0
% 0.08/0.15  %    Non-unit-clauses                  : 11
% 0.08/0.15  % Current number of unprocessed clauses: 18
% 0.08/0.15  % ...number of literals in the above   : 29
% 0.08/0.15  % Current number of archived formulas  : 0
% 0.08/0.15  % Current number of archived clauses   : 11
% 0.08/0.15  % Clause-clause subsumption calls (NU) : 66
% 0.08/0.15  % Rec. Clause-clause subsumption calls : 66
% 0.08/0.15  % Non-unit clause-clause subsumptions  : 0
% 0.08/0.15  % Unit Clause-clause subsumption calls : 203
% 0.08/0.15  % Rewrite failures with RHS unbound    : 0
% 0.08/0.15  % BW rewrite match attempts            : 207
% 0.08/0.15  % BW rewrite match successes           : 14
% 0.08/0.15  % Condensation attempts                : 0
% 0.08/0.15  % Condensation successes               : 0
% 0.08/0.15  % Termbank termtop insertions          : 10416
% 0.08/0.15  % Search garbage collected termcells   : 134
% 0.08/0.15  
% 0.08/0.15  % -------------------------------------------------
% 0.08/0.15  % User time                : 0.005 s
% 0.08/0.15  % System time              : 0.002 s
% 0.08/0.15  % Total time               : 0.008 s
% 0.08/0.15  % Maximum resident set size: 3640 pages
% 0.08/0.15  
% 0.08/0.15  % -------------------------------------------------
% 0.08/0.15  % User time                : 0.011 s
% 0.08/0.15  % System time              : 0.006 s
% 0.08/0.15  % Total time               : 0.017 s
% 0.08/0.15  % Maximum resident set size: 4864 pages
% 0.08/0.15  % E exiting
%------------------------------------------------------------------------------