↑ Up

iProver---3.9.4.THM-CRf.s

View TPTP
Problem
Process solution in
SystemOnTSTP
Download .tgz
%------------------------------------------------------------------------------
% File     : iProver---3.9.4
% Problem  : NUM600+3 : TPTP v9.3.1. Released v4.0.0.
% Transfm  : none
% Format   : tptp:raw
% Command  : run_iprover 300 /export/starexec/sandbox2/benchmark/theBenchmark.p THM

% Computer : n010.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 : Fri Sep 25 02:26:10 PM UTC 2026

% Result   : Theorem 0.41s 1.61s
% Output   : CNFRefutation 0.41s
% Verified : 
% SZS Type : Refutation
%            Derivation depth      :   11
%            Number of leaves      :    3
% Syntax   : Number of formulae    :   31 (   8 unt;   0 def)
%            Number of atoms       :  189 (  66 equ)
%            Maximal formula atoms :   15 (   6 avg)
%            Number of connectives :  230 (  72   ~;  57   |;  91   &)
%                                         (   4 <=>;   6  =>;   0  <=;   0 <~>)
%            Maximal formula depth :   14 (   7 avg)
%            Maximal term depth    :    4 (   1 avg)
%            Number of types       :    1 (   0 usr)
%            Number of type conns  :    0 (   0   >;   0   *;   0   +;   0  <<)
%            Number of predicates  :    6 (   4 usr;   1 prp; 0-2 aty)
%            Number of functors    :   19 (  19 usr;   9 con; 0-2 aty)
%            Number of variables   :   57 (   0 sgn  38   !;  19   ?;   4   :)

% Comments : 
%------------------------------------------------------------------------------
fof(f92,axiom,
    ( ! [X0] :
        ( aElementOf0(X0,szNzAzT0)
       => ! [X1] :
            ( ( ( aElementOf0(X1,slbdtsldtrb0(sdtlpdtrp0(xN,szszuzczcdt0(X0)),xk))
                | ( sbrdtbr0(X1) = xk
                  & ( aSubsetOf0(X1,sdtlpdtrp0(xN,szszuzczcdt0(X0)))
                    | ! [X2] :
                        ( aElementOf0(X2,X1)
                       => aElementOf0(X2,sdtlpdtrp0(xN,szszuzczcdt0(X0))) ) ) ) )
              & aSet0(X1) )
           => sdtlpdtrp0(xd,X0) = sdtlpdtrp0(sdtlpdtrp0(xC,X0),X1) ) )
    & szDzozmdt0(xd) = szNzAzT0
    & aFunction0(xd) ),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',m__4730) ).

fof(f95,axiom,
    ( xO = sdtlcdtrc0(xe,sdtlbdtrb0(xd,szDzizrdt0(xd)))
    & ! [X0] :
        ( aElementOf0(X0,xO)
      <=> ? [X1] :
            ( sdtlpdtrp0(xe,X1) = X0
            & aElementOf0(X1,sdtlbdtrb0(xd,szDzizrdt0(xd))) ) )
    & ! [X0] :
        ( aElementOf0(X0,sdtlbdtrb0(xd,szDzizrdt0(xd)))
      <=> ( sdtlpdtrp0(xd,X0) = szDzizrdt0(xd)
          & aElementOf0(X0,szDzozmdt0(xd)) ) )
    & aSet0(sdtlbdtrb0(xd,szDzizrdt0(xd)))
    & aSet0(xO) ),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',m__4891) ).

fof(f97,conjecture,
    ! [X0] :
      ( ( aElementOf0(X0,xO)
        & ? [X1] :
            ( sdtlpdtrp0(xe,X1) = X0
            & aElementOf0(X1,sdtlbdtrb0(xd,szDzizrdt0(xd))) ) )
     => ? [X1] :
          ( sdtlpdtrp0(xe,X1) = X0
          & ( aElementOf0(X1,sdtlbdtrb0(xd,szDzizrdt0(xd)))
            | sdtlpdtrp0(xd,X1) = szDzizrdt0(xd) )
          & aElementOf0(X1,szNzAzT0) ) ),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',m__) ).

fof(f98,negated_conjecture,
    ~ ! [X0] :
        ( ( aElementOf0(X0,xO)
          & ? [X1] :
              ( sdtlpdtrp0(xe,X1) = X0
              & aElementOf0(X1,sdtlbdtrb0(xd,szDzizrdt0(xd))) ) )
       => ? [X1] :
            ( sdtlpdtrp0(xe,X1) = X0
            & ( aElementOf0(X1,sdtlbdtrb0(xd,szDzizrdt0(xd)))
              | sdtlpdtrp0(xd,X1) = szDzizrdt0(xd) )
            & aElementOf0(X1,szNzAzT0) ) ),
    inference(negated_conjecture,[status(cth)],[f97]) ).

fof(f116,plain,
    ( xO = sdtlcdtrc0(xe,sdtlbdtrb0(xd,szDzizrdt0(xd)))
    & ! [X1] :
        ( aElementOf0(X1,xO)
      <=> ? [X2] :
            ( sdtlpdtrp0(xe,X2) = X1
            & aElementOf0(X2,sdtlbdtrb0(xd,szDzizrdt0(xd))) ) )
    & ! [X0] :
        ( aElementOf0(X0,sdtlbdtrb0(xd,szDzizrdt0(xd)))
      <=> ( sdtlpdtrp0(xd,X0) = szDzizrdt0(xd)
          & aElementOf0(X0,szDzozmdt0(xd)) ) )
    & aSet0(sdtlbdtrb0(xd,szDzizrdt0(xd)))
    & aSet0(xO) ),
    inference(rectify,[],[f95]) ).

fof(f117,plain,
    ~ ! [X0] :
        ( ( aElementOf0(X0,xO)
          & ? [X1] :
              ( sdtlpdtrp0(xe,X1) = X0
              & aElementOf0(X1,sdtlbdtrb0(xd,szDzizrdt0(xd))) ) )
       => ? [X2] :
            ( sdtlpdtrp0(xe,X2) = X0
            & ( aElementOf0(X2,sdtlbdtrb0(xd,szDzizrdt0(xd)))
              | szDzizrdt0(xd) = sdtlpdtrp0(xd,X2) )
            & aElementOf0(X2,szNzAzT0) ) ),
    inference(rectify,[],[f98]) ).

fof(f241,plain,
    ( ! [X0] :
        ( ~ aElementOf0(X0,szNzAzT0)
        | ! [X1] :
            ( ( ~ aElementOf0(X1,slbdtsldtrb0(sdtlpdtrp0(xN,szszuzczcdt0(X0)),xk))
              & ( sbrdtbr0(X1) != xk
                | ( ~ aSubsetOf0(X1,sdtlpdtrp0(xN,szszuzczcdt0(X0)))
                  & ? [X2] :
                      ( aElementOf0(X2,X1)
                      & ~ aElementOf0(X2,sdtlpdtrp0(xN,szszuzczcdt0(X0))) ) ) ) )
            | ~ aSet0(X1)
            | sdtlpdtrp0(xd,X0) = sdtlpdtrp0(sdtlpdtrp0(xC,X0),X1) ) )
    & szDzozmdt0(xd) = szNzAzT0
    & aFunction0(xd) ),
    inference(ennf_transformation,[],[f92]) ).

fof(f242,plain,
    ( ! [X0] :
        ( ~ aElementOf0(X0,szNzAzT0)
        | ! [X1] :
            ( ( ~ aElementOf0(X1,slbdtsldtrb0(sdtlpdtrp0(xN,szszuzczcdt0(X0)),xk))
              & ( sbrdtbr0(X1) != xk
                | ( ~ aSubsetOf0(X1,sdtlpdtrp0(xN,szszuzczcdt0(X0)))
                  & ? [X2] :
                      ( aElementOf0(X2,X1)
                      & ~ aElementOf0(X2,sdtlpdtrp0(xN,szszuzczcdt0(X0))) ) ) ) )
            | ~ aSet0(X1)
            | sdtlpdtrp0(xd,X0) = sdtlpdtrp0(sdtlpdtrp0(xC,X0),X1) ) )
    & szDzozmdt0(xd) = szNzAzT0
    & aFunction0(xd) ),
    inference(flattening,[],[f241]) ).

fof(f244,plain,
    ? [X0] :
      ( aElementOf0(X0,xO)
      & ? [X1] :
          ( sdtlpdtrp0(xe,X1) = X0
          & aElementOf0(X1,sdtlbdtrb0(xd,szDzizrdt0(xd))) )
      & ! [X2] :
          ( sdtlpdtrp0(xe,X2) != X0
          | ( ~ aElementOf0(X2,sdtlbdtrb0(xd,szDzizrdt0(xd)))
            & szDzizrdt0(xd) != sdtlpdtrp0(xd,X2) )
          | ~ aElementOf0(X2,szNzAzT0) ) ),
    inference(ennf_transformation,[],[f117]) ).

fof(f245,plain,
    ? [X0] :
      ( aElementOf0(X0,xO)
      & ? [X1] :
          ( sdtlpdtrp0(xe,X1) = X0
          & aElementOf0(X1,sdtlbdtrb0(xd,szDzizrdt0(xd))) )
      & ! [X2] :
          ( sdtlpdtrp0(xe,X2) != X0
          | ( ~ aElementOf0(X2,sdtlbdtrb0(xd,szDzizrdt0(xd)))
            & szDzizrdt0(xd) != sdtlpdtrp0(xd,X2) )
          | ~ aElementOf0(X2,szNzAzT0) ) ),
    inference(flattening,[],[f244]) ).

fof(f414,plain,
    ( ! [X0] :
        ( ~ aElementOf0(X0,szNzAzT0)
        | ! [X1] :
            ( ( ~ aElementOf0(X1,slbdtsldtrb0(sdtlpdtrp0(xN,szszuzczcdt0(X0)),xk))
              & ( sbrdtbr0(X1) != xk
                | ( ~ aSubsetOf0(X1,sdtlpdtrp0(xN,szszuzczcdt0(X0)))
                  & aElementOf0(sK67(X0,X1),X1)
                  & ~ aElementOf0(sK67(X0,X1),sdtlpdtrp0(xN,szszuzczcdt0(X0))) ) ) )
            | ~ aSet0(X1)
            | sdtlpdtrp0(xd,X0) = sdtlpdtrp0(sdtlpdtrp0(xC,X0),X1) ) )
    & szDzozmdt0(xd) = szNzAzT0
    & aFunction0(xd) ),
    inference(skolemize,[status(esa),new_symbols(skolem,[sK67]),skolemize(X2,sK67(X0,X1))],[f242]) ).

fof(f420,plain,
    ( xO = sdtlcdtrc0(xe,sdtlbdtrb0(xd,szDzizrdt0(xd)))
    & ! [X1] :
        ( ( ~ aElementOf0(X1,xO)
          | ? [X2] :
              ( sdtlpdtrp0(xe,X2) = X1
              & aElementOf0(X2,sdtlbdtrb0(xd,szDzizrdt0(xd))) ) )
        & ( ! [X2] :
              ( sdtlpdtrp0(xe,X2) != X1
              | ~ aElementOf0(X2,sdtlbdtrb0(xd,szDzizrdt0(xd))) )
          | aElementOf0(X1,xO) ) )
    & ! [X0] :
        ( ( ~ aElementOf0(X0,sdtlbdtrb0(xd,szDzizrdt0(xd)))
          | ( sdtlpdtrp0(xd,X0) = szDzizrdt0(xd)
            & aElementOf0(X0,szDzozmdt0(xd)) ) )
        & ( sdtlpdtrp0(xd,X0) != szDzizrdt0(xd)
          | ~ aElementOf0(X0,szDzozmdt0(xd))
          | aElementOf0(X0,sdtlbdtrb0(xd,szDzizrdt0(xd))) ) )
    & aSet0(sdtlbdtrb0(xd,szDzizrdt0(xd)))
    & aSet0(xO) ),
    inference(nnf_transformation,[],[f116]) ).

fof(f421,plain,
    ( xO = sdtlcdtrc0(xe,sdtlbdtrb0(xd,szDzizrdt0(xd)))
    & ! [X1] :
        ( ( ~ aElementOf0(X1,xO)
          | ? [X2] :
              ( sdtlpdtrp0(xe,X2) = X1
              & aElementOf0(X2,sdtlbdtrb0(xd,szDzizrdt0(xd))) ) )
        & ( ! [X2] :
              ( sdtlpdtrp0(xe,X2) != X1
              | ~ aElementOf0(X2,sdtlbdtrb0(xd,szDzizrdt0(xd))) )
          | aElementOf0(X1,xO) ) )
    & ! [X0] :
        ( ( ~ aElementOf0(X0,sdtlbdtrb0(xd,szDzizrdt0(xd)))
          | ( sdtlpdtrp0(xd,X0) = szDzizrdt0(xd)
            & aElementOf0(X0,szDzozmdt0(xd)) ) )
        & ( sdtlpdtrp0(xd,X0) != szDzizrdt0(xd)
          | ~ aElementOf0(X0,szDzozmdt0(xd))
          | aElementOf0(X0,sdtlbdtrb0(xd,szDzizrdt0(xd))) ) )
    & aSet0(sdtlbdtrb0(xd,szDzizrdt0(xd)))
    & aSet0(xO) ),
    inference(flattening,[],[f420]) ).

fof(f422,plain,
    ( xO = sdtlcdtrc0(xe,sdtlbdtrb0(xd,szDzizrdt0(xd)))
    & ! [X1] :
        ( ( ~ aElementOf0(X1,xO)
          | ? [X3] :
              ( sdtlpdtrp0(xe,X3) = X1
              & aElementOf0(X3,sdtlbdtrb0(xd,szDzizrdt0(xd))) ) )
        & ( ! [X2] :
              ( sdtlpdtrp0(xe,X2) != X1
              | ~ aElementOf0(X2,sdtlbdtrb0(xd,szDzizrdt0(xd))) )
          | aElementOf0(X1,xO) ) )
    & ! [X0] :
        ( ( ~ aElementOf0(X0,sdtlbdtrb0(xd,szDzizrdt0(xd)))
          | ( sdtlpdtrp0(xd,X0) = szDzizrdt0(xd)
            & aElementOf0(X0,szDzozmdt0(xd)) ) )
        & ( sdtlpdtrp0(xd,X0) != szDzizrdt0(xd)
          | ~ aElementOf0(X0,szDzozmdt0(xd))
          | aElementOf0(X0,sdtlbdtrb0(xd,szDzizrdt0(xd))) ) )
    & aSet0(sdtlbdtrb0(xd,szDzizrdt0(xd)))
    & aSet0(xO) ),
    inference(rectify,[],[f421]) ).

fof(f423,plain,
    ( xO = sdtlcdtrc0(xe,sdtlbdtrb0(xd,szDzizrdt0(xd)))
    & ! [X1] :
        ( ( ~ aElementOf0(X1,xO)
          | ( sdtlpdtrp0(xe,sK69(X1)) = X1
            & aElementOf0(sK69(X1),sdtlbdtrb0(xd,szDzizrdt0(xd))) ) )
        & ( ! [X2] :
              ( sdtlpdtrp0(xe,X2) != X1
              | ~ aElementOf0(X2,sdtlbdtrb0(xd,szDzizrdt0(xd))) )
          | aElementOf0(X1,xO) ) )
    & ! [X0] :
        ( ( ~ aElementOf0(X0,sdtlbdtrb0(xd,szDzizrdt0(xd)))
          | ( sdtlpdtrp0(xd,X0) = szDzizrdt0(xd)
            & aElementOf0(X0,szDzozmdt0(xd)) ) )
        & ( sdtlpdtrp0(xd,X0) != szDzizrdt0(xd)
          | ~ aElementOf0(X0,szDzozmdt0(xd))
          | aElementOf0(X0,sdtlbdtrb0(xd,szDzizrdt0(xd))) ) )
    & aSet0(sdtlbdtrb0(xd,szDzizrdt0(xd)))
    & aSet0(xO) ),
    inference(skolemize,[status(esa),new_symbols(skolem,[sK69]),skolemize(X3,sK69(X1))],[f422]) ).

fof(f424,plain,
    ? [X0] :
      ( aElementOf0(X0,xO)
      & ? [X2] :
          ( sdtlpdtrp0(xe,X2) = X0
          & aElementOf0(X2,sdtlbdtrb0(xd,szDzizrdt0(xd))) )
      & ! [X1] :
          ( sdtlpdtrp0(xe,X1) != X0
          | ( ~ aElementOf0(X1,sdtlbdtrb0(xd,szDzizrdt0(xd)))
            & sdtlpdtrp0(xd,X1) != szDzizrdt0(xd) )
          | ~ aElementOf0(X1,szNzAzT0) ) ),
    inference(rectify,[],[f245]) ).

fof(f425,plain,
    ( aElementOf0(sK70,xO)
    & sK70 = sdtlpdtrp0(xe,sK71)
    & aElementOf0(sK71,sdtlbdtrb0(xd,szDzizrdt0(xd)))
    & ! [X1] :
        ( sdtlpdtrp0(xe,X1) != sK70
        | ( ~ aElementOf0(X1,sdtlbdtrb0(xd,szDzizrdt0(xd)))
          & sdtlpdtrp0(xd,X1) != szDzizrdt0(xd) )
        | ~ aElementOf0(X1,szNzAzT0) ) ),
    inference(skolemize,[status(esa),new_symbols(skolem,[sK70,sK71]),skolemize(X0,sK70),skolemize(X2,sK71)],[f424]) ).

fof(f784,plain,
    szNzAzT0 = szDzozmdt0(xd),
    inference(cnf_transformation,[],[f414]) ).

fof(f802,plain,
    ! [X0] :
      ( ~ aElementOf0(X0,sdtlbdtrb0(xd,szDzizrdt0(xd)))
      | aElementOf0(X0,szDzozmdt0(xd)) ),
    inference(cnf_transformation,[],[f423]) ).

fof(f809,plain,
    sK70 = sdtlpdtrp0(xe,sK71),
    inference(cnf_transformation,[],[f425]) ).

fof(f810,plain,
    aElementOf0(sK71,sdtlbdtrb0(xd,szDzizrdt0(xd))),
    inference(cnf_transformation,[],[f425]) ).

fof(f811,plain,
    ! [X1] :
      ( sdtlpdtrp0(xe,X1) != sK70
      | ~ aElementOf0(X1,sdtlbdtrb0(xd,szDzizrdt0(xd)))
      | ~ aElementOf0(X1,szNzAzT0) ),
    inference(cnf_transformation,[],[f425]) ).

tcf(c_404,plain,
    szDzozmdt0(xd) = szNzAzT0,
    inference(cnf_transformation,[],[f784]) ).

tcf(c_423,plain,
    ! [X0: $i] :
      ( aElementOf0(X0,szDzozmdt0(xd))
      | ~ aElementOf0(X0,sdtlbdtrb0(xd,szDzizrdt0(xd))) ),
    inference(cnf_transformation,[],[f802]) ).

tcf(c_432,negated_conjecture,
    ! [X0: $i] :
      ( ~ aElementOf0(X0,szNzAzT0)
      | ~ aElementOf0(X0,sdtlbdtrb0(xd,szDzizrdt0(xd)))
      | ( sdtlpdtrp0(xe,X0) != sK70 ) ),
    inference(cnf_transformation,[],[f811]) ).

tcf(c_433,negated_conjecture,
    aElementOf0(sK71,sdtlbdtrb0(xd,szDzizrdt0(xd))),
    inference(cnf_transformation,[],[f810]) ).

tcf(c_434,negated_conjecture,
    sdtlpdtrp0(xe,sK71) = sK70,
    inference(cnf_transformation,[],[f809]) ).

tcf(c_505,plain,
    ! [X0: $i] :
      ( aElementOf0(X0,szNzAzT0)
      | ~ aElementOf0(X0,sdtlbdtrb0(xd,szDzizrdt0(xd))) ),
    inference(light_normalisation,[status(thm)],[c_423,c_404]) ).

tcf(c_577,plain,
    ! [X0: $i] :
      ( ~ aElementOf0(X0,sdtlbdtrb0(xd,szDzizrdt0(xd)))
      | ( sdtlpdtrp0(xe,X0) != sK70 ) ),
    inference(forward_subsumption_resolution,[status(thm)],[c_432,c_505]) ).

tcf(c_584,plain,
    ~ aElementOf0(sK71,sdtlbdtrb0(xd,szDzizrdt0(xd))),
    inference(superposition,[status(thm)],[c_434,c_577]) ).

tcf(c_585,plain,
    $false,
    inference(backward_subsumption_resolution,[status(thm)],[c_433,c_584]) ).


%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.00/0.03  % Problem  : NUM600+3 : TPTP v9.3.1. Released v4.0.0.
% 0.00/0.04  % Command  : run_iprover 300 /export/starexec/sandbox2/benchmark/theBenchmark.p THM
% 0.10/0.78  % Computer : n010.cluster.edu
% 0.10/0.78  % Model    : x86_64 x86_64
% 0.10/0.78  % CPU      : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.10/0.78  % Memory   : 8046.5625MB
% 0.10/0.78  % OS       : Linux 6.8.0-71-generic
% 0.10/0.78  % CPULimit : 300
% 0.10/0.78  % WCLimit  : 300
% 0.10/0.78  % DateTime : Thu Sep 24 04:51:31 UTC 2026
% 0.10/0.79  % CPUTime  : 
% 0.10/0.79  Running run_iprover 300 /export/starexec/sandbox2/benchmark/theBenchmark.p THM
% 0.14/0.82  Running first-order theorem proving
% 0.14/0.82  Running: /export/starexec/sandbox2/solver/bin/iproveropt-multi-core.sh -d -n -l tptp -s fof_schedule -t 300 /export/starexec/sandbox2/benchmark/theBenchmark.p
% 0.14/0.83  
% 0.14/0.83  % ======== iProver multi-core TPTP/SMT =========
% 0.14/0.83  
% 0.14/0.83  % Detected problem language: tptp
% 0.14/0.84  % Proving...
% 0.41/1.61  % SZS status Started for theBenchmark.p
% 0.41/1.61  % SZS status Theorem for theBenchmark.p
% 0.41/1.61  
% 0.41/1.61  %---------------- iProver v3.9.4 (pre CASC 2026/SMT-COMP 2026) ----------------%
% 0.41/1.61  
% 0.41/1.61  % ------  iProver source info
% 0.41/1.61  
% 0.41/1.61  % git: date: 2026-07-19 20:42:38 +0200
% 0.41/1.61  % git: sha1: 804e7d636a263075307957e923b7a22a4035de61
% 0.41/1.61  % git: non_committed_changes: false
% 0.41/1.61  
% 0.41/1.61  % ------ Parsing...
% 0.41/1.61  % ------ Clausification by vclausify_rel  & Parsing by iProver...
% 0.41/1.61  % ------ Proving...
% 0.41/1.61  % ------ Problem Properties 
% 0.41/1.61  
% 0.41/1.61  % 
% 0.41/1.61  % clauses                               387
% 0.41/1.61  % conjectures                           5
% 0.41/1.61  % EPR                                   63
% 0.41/1.61  % Horn                                  303
% 0.41/1.61  % unary                                 42
% 0.41/1.61  % binary                                107
% 0.41/1.61  % lits                                  1258
% 0.41/1.61  % lits eq                               165
% 0.41/1.61  % fd_pure                               0
% 0.41/1.61  % fd_pseudo                             0
% 0.41/1.61  % fd_cond                               10
% 0.41/1.61  % fd_pseudo_cond                        47
% 0.41/1.61  % AC symbols                            0
% 0.41/1.61  
% 0.41/1.61  % ------ Input Options Time Limit: Unbounded
% 0.41/1.61  
% 0.41/1.61  
% 0.41/1.61  % ------ 
% 0.41/1.61  % Current options:
% 0.41/1.61  % ------ 
% 0.41/1.61  
% 0.41/1.61  
% 0.41/1.61  % 
% 0.41/1.61  
% 0.41/1.61  % ------ Proving...
% 0.41/1.61  % 
% 0.41/1.61  
% 0.41/1.61  % SZS status Theorem for theBenchmark.p
% 0.41/1.61  
% 0.41/1.61  % SZS output start CNFRefutation for theBenchmark.p
% See solution above
% 0.41/1.62  
% 0.41/1.62  
%------------------------------------------------------------------------------