TSTP Solution File: SEU215+1 by iProver---3.8

View Problem - Process Solution

%------------------------------------------------------------------------------
% File     : iProver---3.8
% Problem  : SEU215+1 : TPTP v8.1.2. Released v3.3.0.
% Transfm  : none
% Format   : tptp:raw
% Command  : run_iprover %s %d THM

% Computer : n007.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  : 300s
% DateTime : Thu Aug 31 17:04:47 EDT 2023

% Result   : Theorem 3.61s 1.19s
% Output   : CNFRefutation 3.61s
% Verified : 
% SZS Type : Refutation
%            Derivation depth      :    9
%            Number of leaves      :    9
% Syntax   : Number of formulae    :   59 (  13 unt;   0 def)
%            Number of atoms       :  285 (  47 equ)
%            Maximal formula atoms :   12 (   4 avg)
%            Number of connectives :  368 ( 142   ~; 139   |;  60   &)
%                                         (   9 <=>;  18  =>;   0  <=;   0 <~>)
%            Maximal formula depth :   11 (   6 avg)
%            Maximal term depth    :    3 (   1 avg)
%            Number of predicates  :    5 (   3 usr;   1 prp; 0-2 aty)
%            Number of functors    :    8 (   8 usr;   4 con; 0-2 aty)
%            Number of variables   :   97 (   0 sgn;  69   !;  11   ?)

% Comments : 
%------------------------------------------------------------------------------
fof(f5,axiom,
    ! [X0] :
      ( ( function(X0)
        & relation(X0) )
     => ! [X1,X2] :
          ( ( ~ in(X1,relation_dom(X0))
           => ( apply(X0,X1) = X2
            <=> empty_set = X2 ) )
          & ( in(X1,relation_dom(X0))
           => ( apply(X0,X1) = X2
            <=> in(ordered_pair(X1,X2),X0) ) ) ) ),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',d4_funct_1) ).

fof(f13,axiom,
    ! [X0,X1] :
      ( ( relation(X1)
        & relation(X0) )
     => relation(relation_composition(X0,X1)) ),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',dt_k5_relat_1) ).

fof(f18,axiom,
    ! [X0,X1] :
      ( ( function(X1)
        & relation(X1)
        & function(X0)
        & relation(X0) )
     => ( function(relation_composition(X0,X1))
        & relation(relation_composition(X0,X1)) ) ),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',fc1_funct_1) ).

fof(f34,axiom,
    ! [X0,X1] :
      ( ( function(X1)
        & relation(X1) )
     => ! [X2] :
          ( ( function(X2)
            & relation(X2) )
         => ( in(X0,relation_dom(relation_composition(X2,X1)))
          <=> ( in(apply(X2,X0),relation_dom(X1))
              & in(X0,relation_dom(X2)) ) ) ) ),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',t21_funct_1) ).

fof(f35,axiom,
    ! [X0,X1] :
      ( ( function(X1)
        & relation(X1) )
     => ! [X2] :
          ( ( function(X2)
            & relation(X2) )
         => ( in(X0,relation_dom(relation_composition(X2,X1)))
           => apply(relation_composition(X2,X1),X0) = apply(X1,apply(X2,X0)) ) ) ),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',t22_funct_1) ).

fof(f36,conjecture,
    ! [X0,X1] :
      ( ( function(X1)
        & relation(X1) )
     => ! [X2] :
          ( ( function(X2)
            & relation(X2) )
         => ( in(X0,relation_dom(X1))
           => apply(relation_composition(X1,X2),X0) = apply(X2,apply(X1,X0)) ) ) ),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',t23_funct_1) ).

fof(f37,negated_conjecture,
    ~ ! [X0,X1] :
        ( ( function(X1)
          & relation(X1) )
       => ! [X2] :
            ( ( function(X2)
              & relation(X2) )
           => ( in(X0,relation_dom(X1))
             => apply(relation_composition(X1,X2),X0) = apply(X2,apply(X1,X0)) ) ) ),
    inference(negated_conjecture,[],[f36]) ).

fof(f47,plain,
    ! [X0] :
      ( ! [X1,X2] :
          ( ( ( apply(X0,X1) = X2
            <=> empty_set = X2 )
            | in(X1,relation_dom(X0)) )
          & ( ( apply(X0,X1) = X2
            <=> in(ordered_pair(X1,X2),X0) )
            | ~ in(X1,relation_dom(X0)) ) )
      | ~ function(X0)
      | ~ relation(X0) ),
    inference(ennf_transformation,[],[f5]) ).

fof(f48,plain,
    ! [X0] :
      ( ! [X1,X2] :
          ( ( ( apply(X0,X1) = X2
            <=> empty_set = X2 )
            | in(X1,relation_dom(X0)) )
          & ( ( apply(X0,X1) = X2
            <=> in(ordered_pair(X1,X2),X0) )
            | ~ in(X1,relation_dom(X0)) ) )
      | ~ function(X0)
      | ~ relation(X0) ),
    inference(flattening,[],[f47]) ).

fof(f49,plain,
    ! [X0,X1] :
      ( relation(relation_composition(X0,X1))
      | ~ relation(X1)
      | ~ relation(X0) ),
    inference(ennf_transformation,[],[f13]) ).

fof(f50,plain,
    ! [X0,X1] :
      ( relation(relation_composition(X0,X1))
      | ~ relation(X1)
      | ~ relation(X0) ),
    inference(flattening,[],[f49]) ).

fof(f53,plain,
    ! [X0,X1] :
      ( ( function(relation_composition(X0,X1))
        & relation(relation_composition(X0,X1)) )
      | ~ function(X1)
      | ~ relation(X1)
      | ~ function(X0)
      | ~ relation(X0) ),
    inference(ennf_transformation,[],[f18]) ).

fof(f54,plain,
    ! [X0,X1] :
      ( ( function(relation_composition(X0,X1))
        & relation(relation_composition(X0,X1)) )
      | ~ function(X1)
      | ~ relation(X1)
      | ~ function(X0)
      | ~ relation(X0) ),
    inference(flattening,[],[f53]) ).

fof(f61,plain,
    ! [X0,X1] :
      ( ! [X2] :
          ( ( in(X0,relation_dom(relation_composition(X2,X1)))
          <=> ( in(apply(X2,X0),relation_dom(X1))
              & in(X0,relation_dom(X2)) ) )
          | ~ function(X2)
          | ~ relation(X2) )
      | ~ function(X1)
      | ~ relation(X1) ),
    inference(ennf_transformation,[],[f34]) ).

fof(f62,plain,
    ! [X0,X1] :
      ( ! [X2] :
          ( ( in(X0,relation_dom(relation_composition(X2,X1)))
          <=> ( in(apply(X2,X0),relation_dom(X1))
              & in(X0,relation_dom(X2)) ) )
          | ~ function(X2)
          | ~ relation(X2) )
      | ~ function(X1)
      | ~ relation(X1) ),
    inference(flattening,[],[f61]) ).

fof(f63,plain,
    ! [X0,X1] :
      ( ! [X2] :
          ( apply(relation_composition(X2,X1),X0) = apply(X1,apply(X2,X0))
          | ~ in(X0,relation_dom(relation_composition(X2,X1)))
          | ~ function(X2)
          | ~ relation(X2) )
      | ~ function(X1)
      | ~ relation(X1) ),
    inference(ennf_transformation,[],[f35]) ).

fof(f64,plain,
    ! [X0,X1] :
      ( ! [X2] :
          ( apply(relation_composition(X2,X1),X0) = apply(X1,apply(X2,X0))
          | ~ in(X0,relation_dom(relation_composition(X2,X1)))
          | ~ function(X2)
          | ~ relation(X2) )
      | ~ function(X1)
      | ~ relation(X1) ),
    inference(flattening,[],[f63]) ).

fof(f65,plain,
    ? [X0,X1] :
      ( ? [X2] :
          ( apply(relation_composition(X1,X2),X0) != apply(X2,apply(X1,X0))
          & in(X0,relation_dom(X1))
          & function(X2)
          & relation(X2) )
      & function(X1)
      & relation(X1) ),
    inference(ennf_transformation,[],[f37]) ).

fof(f66,plain,
    ? [X0,X1] :
      ( ? [X2] :
          ( apply(relation_composition(X1,X2),X0) != apply(X2,apply(X1,X0))
          & in(X0,relation_dom(X1))
          & function(X2)
          & relation(X2) )
      & function(X1)
      & relation(X1) ),
    inference(flattening,[],[f65]) ).

fof(f72,plain,
    ! [X0] :
      ( ! [X1,X2] :
          ( ( ( ( apply(X0,X1) = X2
                | empty_set != X2 )
              & ( empty_set = X2
                | apply(X0,X1) != X2 ) )
            | in(X1,relation_dom(X0)) )
          & ( ( ( apply(X0,X1) = X2
                | ~ in(ordered_pair(X1,X2),X0) )
              & ( in(ordered_pair(X1,X2),X0)
                | apply(X0,X1) != X2 ) )
            | ~ in(X1,relation_dom(X0)) ) )
      | ~ function(X0)
      | ~ relation(X0) ),
    inference(nnf_transformation,[],[f48]) ).

fof(f87,plain,
    ! [X0,X1] :
      ( ! [X2] :
          ( ( ( in(X0,relation_dom(relation_composition(X2,X1)))
              | ~ in(apply(X2,X0),relation_dom(X1))
              | ~ in(X0,relation_dom(X2)) )
            & ( ( in(apply(X2,X0),relation_dom(X1))
                & in(X0,relation_dom(X2)) )
              | ~ in(X0,relation_dom(relation_composition(X2,X1))) ) )
          | ~ function(X2)
          | ~ relation(X2) )
      | ~ function(X1)
      | ~ relation(X1) ),
    inference(nnf_transformation,[],[f62]) ).

fof(f88,plain,
    ! [X0,X1] :
      ( ! [X2] :
          ( ( ( in(X0,relation_dom(relation_composition(X2,X1)))
              | ~ in(apply(X2,X0),relation_dom(X1))
              | ~ in(X0,relation_dom(X2)) )
            & ( ( in(apply(X2,X0),relation_dom(X1))
                & in(X0,relation_dom(X2)) )
              | ~ in(X0,relation_dom(relation_composition(X2,X1))) ) )
          | ~ function(X2)
          | ~ relation(X2) )
      | ~ function(X1)
      | ~ relation(X1) ),
    inference(flattening,[],[f87]) ).

fof(f89,plain,
    ( ? [X0,X1] :
        ( ? [X2] :
            ( apply(relation_composition(X1,X2),X0) != apply(X2,apply(X1,X0))
            & in(X0,relation_dom(X1))
            & function(X2)
            & relation(X2) )
        & function(X1)
        & relation(X1) )
   => ( ? [X2] :
          ( apply(relation_composition(sK8,X2),sK7) != apply(X2,apply(sK8,sK7))
          & in(sK7,relation_dom(sK8))
          & function(X2)
          & relation(X2) )
      & function(sK8)
      & relation(sK8) ) ),
    introduced(choice_axiom,[]) ).

fof(f90,plain,
    ( ? [X2] :
        ( apply(relation_composition(sK8,X2),sK7) != apply(X2,apply(sK8,sK7))
        & in(sK7,relation_dom(sK8))
        & function(X2)
        & relation(X2) )
   => ( apply(relation_composition(sK8,sK9),sK7) != apply(sK9,apply(sK8,sK7))
      & in(sK7,relation_dom(sK8))
      & function(sK9)
      & relation(sK9) ) ),
    introduced(choice_axiom,[]) ).

fof(f91,plain,
    ( apply(relation_composition(sK8,sK9),sK7) != apply(sK9,apply(sK8,sK7))
    & in(sK7,relation_dom(sK8))
    & function(sK9)
    & relation(sK9)
    & function(sK8)
    & relation(sK8) ),
    inference(skolemisation,[status(esa),new_symbols(skolem,[sK7,sK8,sK9])],[f66,f90,f89]) ).

fof(f98,plain,
    ! [X2,X0,X1] :
      ( empty_set = X2
      | apply(X0,X1) != X2
      | in(X1,relation_dom(X0))
      | ~ function(X0)
      | ~ relation(X0) ),
    inference(cnf_transformation,[],[f72]) ).

fof(f101,plain,
    ! [X0,X1] :
      ( relation(relation_composition(X0,X1))
      | ~ relation(X1)
      | ~ relation(X0) ),
    inference(cnf_transformation,[],[f50]) ).

fof(f108,plain,
    ! [X0,X1] :
      ( function(relation_composition(X0,X1))
      | ~ function(X1)
      | ~ relation(X1)
      | ~ function(X0)
      | ~ relation(X0) ),
    inference(cnf_transformation,[],[f54]) ).

fof(f132,plain,
    ! [X2,X0,X1] :
      ( in(X0,relation_dom(relation_composition(X2,X1)))
      | ~ in(apply(X2,X0),relation_dom(X1))
      | ~ in(X0,relation_dom(X2))
      | ~ function(X2)
      | ~ relation(X2)
      | ~ function(X1)
      | ~ relation(X1) ),
    inference(cnf_transformation,[],[f88]) ).

fof(f133,plain,
    ! [X2,X0,X1] :
      ( apply(relation_composition(X2,X1),X0) = apply(X1,apply(X2,X0))
      | ~ in(X0,relation_dom(relation_composition(X2,X1)))
      | ~ function(X2)
      | ~ relation(X2)
      | ~ function(X1)
      | ~ relation(X1) ),
    inference(cnf_transformation,[],[f64]) ).

fof(f134,plain,
    relation(sK8),
    inference(cnf_transformation,[],[f91]) ).

fof(f135,plain,
    function(sK8),
    inference(cnf_transformation,[],[f91]) ).

fof(f136,plain,
    relation(sK9),
    inference(cnf_transformation,[],[f91]) ).

fof(f137,plain,
    function(sK9),
    inference(cnf_transformation,[],[f91]) ).

fof(f138,plain,
    in(sK7,relation_dom(sK8)),
    inference(cnf_transformation,[],[f91]) ).

fof(f139,plain,
    apply(relation_composition(sK8,sK9),sK7) != apply(sK9,apply(sK8,sK7)),
    inference(cnf_transformation,[],[f91]) ).

fof(f148,plain,
    ! [X0,X1] :
      ( apply(X0,X1) = empty_set
      | in(X1,relation_dom(X0))
      | ~ function(X0)
      | ~ relation(X0) ),
    inference(equality_resolution,[],[f98]) ).

cnf(c_54,plain,
    ( ~ function(X0)
    | ~ relation(X0)
    | apply(X0,X1) = empty_set
    | in(X1,relation_dom(X0)) ),
    inference(cnf_transformation,[],[f148]) ).

cnf(c_57,plain,
    ( ~ relation(X0)
    | ~ relation(X1)
    | relation(relation_composition(X1,X0)) ),
    inference(cnf_transformation,[],[f101]) ).

cnf(c_63,plain,
    ( ~ function(X0)
    | ~ function(X1)
    | ~ relation(X0)
    | ~ relation(X1)
    | function(relation_composition(X1,X0)) ),
    inference(cnf_transformation,[],[f108]) ).

cnf(c_86,plain,
    ( ~ in(apply(X0,X1),relation_dom(X2))
    | ~ in(X1,relation_dom(X0))
    | ~ function(X0)
    | ~ function(X2)
    | ~ relation(X0)
    | ~ relation(X2)
    | in(X1,relation_dom(relation_composition(X0,X2))) ),
    inference(cnf_transformation,[],[f132]) ).

cnf(c_89,plain,
    ( ~ in(X0,relation_dom(relation_composition(X1,X2)))
    | ~ function(X1)
    | ~ function(X2)
    | ~ relation(X1)
    | ~ relation(X2)
    | apply(relation_composition(X1,X2),X0) = apply(X2,apply(X1,X0)) ),
    inference(cnf_transformation,[],[f133]) ).

cnf(c_90,negated_conjecture,
    apply(relation_composition(sK8,sK9),sK7) != apply(sK9,apply(sK8,sK7)),
    inference(cnf_transformation,[],[f139]) ).

cnf(c_91,negated_conjecture,
    in(sK7,relation_dom(sK8)),
    inference(cnf_transformation,[],[f138]) ).

cnf(c_92,negated_conjecture,
    function(sK9),
    inference(cnf_transformation,[],[f137]) ).

cnf(c_93,negated_conjecture,
    relation(sK9),
    inference(cnf_transformation,[],[f136]) ).

cnf(c_94,negated_conjecture,
    function(sK8),
    inference(cnf_transformation,[],[f135]) ).

cnf(c_95,negated_conjecture,
    relation(sK8),
    inference(cnf_transformation,[],[f134]) ).

cnf(c_897,plain,
    ( X0 != X1
    | X2 != X1
    | X2 = X0 ),
    theory(equality) ).

cnf(c_1887,plain,
    ( apply(relation_composition(sK8,sK9),sK7) != X0
    | apply(sK9,apply(sK8,sK7)) != X0
    | apply(relation_composition(sK8,sK9),sK7) = apply(sK9,apply(sK8,sK7)) ),
    inference(instantiation,[status(thm)],[c_897]) ).

cnf(c_1888,plain,
    ( apply(relation_composition(sK8,sK9),sK7) != empty_set
    | apply(sK9,apply(sK8,sK7)) != empty_set
    | apply(relation_composition(sK8,sK9),sK7) = apply(sK9,apply(sK8,sK7)) ),
    inference(instantiation,[status(thm)],[c_1887]) ).

cnf(c_1962,plain,
    ( ~ in(apply(sK8,sK7),relation_dom(X0))
    | ~ in(sK7,relation_dom(sK8))
    | ~ function(X0)
    | ~ relation(X0)
    | ~ function(sK8)
    | ~ relation(sK8)
    | in(sK7,relation_dom(relation_composition(sK8,X0))) ),
    inference(instantiation,[status(thm)],[c_86]) ).

cnf(c_2477,plain,
    ( ~ function(sK8)
    | ~ function(sK9)
    | ~ relation(sK8)
    | ~ relation(sK9)
    | function(relation_composition(sK8,sK9)) ),
    inference(instantiation,[status(thm)],[c_63]) ).

cnf(c_2500,plain,
    ( ~ function(relation_composition(sK8,sK9))
    | ~ relation(relation_composition(sK8,sK9))
    | apply(relation_composition(sK8,sK9),sK7) = empty_set
    | in(sK7,relation_dom(relation_composition(sK8,sK9))) ),
    inference(instantiation,[status(thm)],[c_54]) ).

cnf(c_3313,plain,
    ( ~ relation(sK8)
    | ~ relation(sK9)
    | relation(relation_composition(sK8,sK9)) ),
    inference(instantiation,[status(thm)],[c_57]) ).

cnf(c_3433,plain,
    ( ~ function(sK9)
    | ~ relation(sK9)
    | apply(sK9,apply(sK8,sK7)) = empty_set
    | in(apply(sK8,sK7),relation_dom(sK9)) ),
    inference(instantiation,[status(thm)],[c_54]) ).

cnf(c_4805,plain,
    ( ~ in(sK7,relation_dom(relation_composition(sK8,sK9)))
    | ~ function(sK8)
    | ~ function(sK9)
    | ~ relation(sK8)
    | ~ relation(sK9)
    | apply(relation_composition(sK8,sK9),sK7) = apply(sK9,apply(sK8,sK7)) ),
    inference(instantiation,[status(thm)],[c_89]) ).

cnf(c_7217,plain,
    ( ~ in(apply(sK8,sK7),relation_dom(sK9))
    | ~ in(sK7,relation_dom(sK8))
    | ~ function(sK8)
    | ~ function(sK9)
    | ~ relation(sK8)
    | ~ relation(sK9)
    | in(sK7,relation_dom(relation_composition(sK8,sK9))) ),
    inference(instantiation,[status(thm)],[c_1962]) ).

cnf(c_7218,plain,
    $false,
    inference(prop_impl_just,[status(thm)],[c_7217,c_4805,c_3433,c_3313,c_2500,c_2477,c_1888,c_90,c_91,c_92,c_93,c_94,c_95]) ).


%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.07/0.12  % Problem  : SEU215+1 : TPTP v8.1.2. Released v3.3.0.
% 0.07/0.13  % Command  : run_iprover %s %d THM
% 0.13/0.34  % Computer : n007.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  : 300
% 0.13/0.34  % DateTime : Wed Aug 23 22:06:40 EDT 2023
% 0.13/0.34  % CPUTime  : 
% 0.19/0.47  Running first-order theorem proving
% 0.19/0.47  Running: /export/starexec/sandbox2/solver/bin/run_problem --schedule fof_schedule --no_cores 8 /export/starexec/sandbox2/benchmark/theBenchmark.p 300
% 3.61/1.19  % SZS status Started for theBenchmark.p
% 3.61/1.19  % SZS status Theorem for theBenchmark.p
% 3.61/1.19  
% 3.61/1.19  %---------------- iProver v3.8 (pre SMT-COMP 2023/CASC 2023) ----------------%
% 3.61/1.19  
% 3.61/1.19  ------  iProver source info
% 3.61/1.19  
% 3.61/1.19  git: date: 2023-05-31 18:12:56 +0000
% 3.61/1.19  git: sha1: 8abddc1f627fd3ce0bcb8b4cbf113b3cc443d7b6
% 3.61/1.19  git: non_committed_changes: false
% 3.61/1.19  git: last_make_outside_of_git: false
% 3.61/1.19  
% 3.61/1.19  ------ Parsing...
% 3.61/1.19  ------ Clausification by vclausify_rel  & Parsing by iProver...
% 3.61/1.19  
% 3.61/1.19  ------ Preprocessing... sup_sim: 2  sf_s  rm: 1 0s  sf_e  pe_s  pe:1:0s pe_e  sup_sim: 0  sf_s  rm: 2 0s  sf_e  pe_s  pe_e 
% 3.61/1.19  
% 3.61/1.19  ------ Preprocessing... gs_s  sp: 0 0s  gs_e  snvd_s sp: 0 0s snvd_e 
% 3.61/1.19  
% 3.61/1.19  ------ Preprocessing... sf_s  rm: 1 0s  sf_e  sf_s  rm: 0 0s  sf_e 
% 3.61/1.19  ------ Proving...
% 3.61/1.19  ------ Problem Properties 
% 3.61/1.19  
% 3.61/1.19  
% 3.61/1.19  clauses                                 43
% 3.61/1.19  conjectures                             6
% 3.61/1.19  EPR                                     21
% 3.61/1.19  Horn                                    41
% 3.61/1.19  unary                                   20
% 3.61/1.19  binary                                  8
% 3.61/1.19  lits                                    100
% 3.61/1.19  lits eq                                 7
% 3.61/1.19  fd_pure                                 0
% 3.61/1.19  fd_pseudo                               0
% 3.61/1.19  fd_cond                                 1
% 3.61/1.19  fd_pseudo_cond                          2
% 3.61/1.19  AC symbols                              0
% 3.61/1.19  
% 3.61/1.19  ------ Schedule dynamic 5 is on 
% 3.61/1.19  
% 3.61/1.19  ------ Input Options "--resolution_flag false --inst_lit_sel_side none" Time Limit: 10.
% 3.61/1.19  
% 3.61/1.19  
% 3.61/1.19  ------ 
% 3.61/1.19  Current options:
% 3.61/1.19  ------ 
% 3.61/1.19  
% 3.61/1.19  
% 3.61/1.19  
% 3.61/1.19  
% 3.61/1.19  ------ Proving...
% 3.61/1.19  
% 3.61/1.19  
% 3.61/1.19  % SZS status Theorem for theBenchmark.p
% 3.61/1.19  
% 3.61/1.19  % SZS output start CNFRefutation for theBenchmark.p
% See solution above
% 3.61/1.19  
% 3.61/1.19  
%------------------------------------------------------------------------------