TSTP Solution File: SEU325+2 by Vampire-SAT---4.8

View Problem - Process Solution

%------------------------------------------------------------------------------
% File     : Vampire-SAT---4.8
% Problem  : SEU325+2 : TPTP v8.1.2. Released v3.3.0.
% Transfm  : none
% Format   : tptp:raw
% Command  : vampire --mode casc_sat -m 16384 --cores 7 -t %d %s

% Computer : n013.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 : Sun May  5 09:33:42 EDT 2024

% Result   : Theorem 259.73s 37.63s
% Output   : Refutation 259.73s
% Verified : 
% SZS Type : Refutation
%            Derivation depth      :   16
%            Number of leaves      :   17
% Syntax   : Number of formulae    :   73 (  21 unt;   0 def)
%            Number of atoms       :  222 (  47 equ)
%            Maximal formula atoms :   10 (   3 avg)
%            Number of connectives :  231 (  82   ~;  64   |;  58   &)
%                                         (   9 <=>;  18  =>;   0  <=;   0 <~>)
%            Maximal formula depth :    9 (   4 avg)
%            Maximal term depth    :    4 (   1 avg)
%            Number of predicates  :   16 (  14 usr;   1 prp; 0-2 aty)
%            Number of functors    :   12 (  12 usr;   3 con; 0-2 aty)
%            Number of variables   :   82 (  66   !;  16   ?)

% Comments : 
%------------------------------------------------------------------------------
fof(f312190,plain,
    $false,
    inference(resolution,[],[f227772,f2932]) ).

fof(f2932,plain,
    empty(empty_set),
    inference(cnf_transformation,[],[f207]) ).

fof(f207,axiom,
    empty(empty_set),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',fc1_xboole_0) ).

fof(f227772,plain,
    ~ empty(empty_set),
    inference(backward_demodulation,[],[f4593,f227765]) ).

fof(f227765,plain,
    empty_set = the_carrier(sK164),
    inference(resolution,[],[f227761,f4153]) ).

fof(f4153,plain,
    ! [X0] : element(empty_set,powerset(X0)),
    inference(backward_demodulation,[],[f3436,f4146]) ).

fof(f4146,plain,
    ! [X0] : empty_set = sK378(X0),
    inference(resolution,[],[f3108,f3437]) ).

fof(f3437,plain,
    ! [X0] : empty(sK378(X0)),
    inference(cnf_transformation,[],[f2034]) ).

fof(f2034,plain,
    ! [X0] :
      ( empty(sK378(X0))
      & element(sK378(X0),powerset(X0)) ),
    inference(skolemisation,[status(esa),new_symbols(skolem,[sK378])],[f297,f2033]) ).

fof(f2033,plain,
    ! [X0] :
      ( ? [X1] :
          ( empty(X1)
          & element(X1,powerset(X0)) )
     => ( empty(sK378(X0))
        & element(sK378(X0),powerset(X0)) ) ),
    introduced(choice_axiom,[]) ).

fof(f297,axiom,
    ! [X0] :
    ? [X1] :
      ( empty(X1)
      & element(X1,powerset(X0)) ),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',rc2_subset_1) ).

fof(f3108,plain,
    ! [X0] :
      ( ~ empty(X0)
      | empty_set = X0 ),
    inference(cnf_transformation,[],[f906]) ).

fof(f906,plain,
    ! [X0] :
      ( empty_set = X0
      | ~ empty(X0) ),
    inference(ennf_transformation,[],[f511]) ).

fof(f511,axiom,
    ! [X0] :
      ( empty(X0)
     => empty_set = X0 ),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',t6_boole) ).

fof(f3436,plain,
    ! [X0] : element(sK378(X0),powerset(X0)),
    inference(cnf_transformation,[],[f2034]) ).

fof(f227761,plain,
    ( ~ element(empty_set,powerset(powerset(the_carrier(sK164))))
    | empty_set = the_carrier(sK164) ),
    inference(resolution,[],[f160114,f2388]) ).

fof(f2388,plain,
    one_sorted_str(sK164),
    inference(cnf_transformation,[],[f1394]) ).

fof(f1394,plain,
    ( empty_set = sK165
    & is_a_cover_of_carrier(sK164,sK165)
    & element(sK165,powerset(powerset(the_carrier(sK164))))
    & one_sorted_str(sK164)
    & ~ empty_carrier(sK164) ),
    inference(skolemisation,[status(esa),new_symbols(skolem,[sK164,sK165])],[f597,f1393,f1392]) ).

fof(f1392,plain,
    ( ? [X0] :
        ( ? [X1] :
            ( empty_set = X1
            & is_a_cover_of_carrier(X0,X1)
            & element(X1,powerset(powerset(the_carrier(X0)))) )
        & one_sorted_str(X0)
        & ~ empty_carrier(X0) )
   => ( ? [X1] :
          ( empty_set = X1
          & is_a_cover_of_carrier(sK164,X1)
          & element(X1,powerset(powerset(the_carrier(sK164)))) )
      & one_sorted_str(sK164)
      & ~ empty_carrier(sK164) ) ),
    introduced(choice_axiom,[]) ).

fof(f1393,plain,
    ( ? [X1] :
        ( empty_set = X1
        & is_a_cover_of_carrier(sK164,X1)
        & element(X1,powerset(powerset(the_carrier(sK164)))) )
   => ( empty_set = sK165
      & is_a_cover_of_carrier(sK164,sK165)
      & element(sK165,powerset(powerset(the_carrier(sK164)))) ) ),
    introduced(choice_axiom,[]) ).

fof(f597,plain,
    ? [X0] :
      ( ? [X1] :
          ( empty_set = X1
          & is_a_cover_of_carrier(X0,X1)
          & element(X1,powerset(powerset(the_carrier(X0)))) )
      & one_sorted_str(X0)
      & ~ empty_carrier(X0) ),
    inference(flattening,[],[f596]) ).

fof(f596,plain,
    ? [X0] :
      ( ? [X1] :
          ( empty_set = X1
          & is_a_cover_of_carrier(X0,X1)
          & element(X1,powerset(powerset(the_carrier(X0)))) )
      & one_sorted_str(X0)
      & ~ empty_carrier(X0) ),
    inference(ennf_transformation,[],[f499]) ).

fof(f499,negated_conjecture,
    ~ ! [X0] :
        ( ( one_sorted_str(X0)
          & ~ empty_carrier(X0) )
       => ! [X1] :
            ( element(X1,powerset(powerset(the_carrier(X0))))
           => ~ ( empty_set = X1
                & is_a_cover_of_carrier(X0,X1) ) ) ),
    inference(negated_conjecture,[],[f498]) ).

fof(f498,conjecture,
    ! [X0] :
      ( ( one_sorted_str(X0)
        & ~ empty_carrier(X0) )
     => ! [X1] :
          ( element(X1,powerset(powerset(the_carrier(X0))))
         => ~ ( empty_set = X1
              & is_a_cover_of_carrier(X0,X1) ) ) ),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',t5_tops_2) ).

fof(f160114,plain,
    ( ~ one_sorted_str(sK164)
    | ~ element(empty_set,powerset(powerset(the_carrier(sK164))))
    | empty_set = the_carrier(sK164) ),
    inference(forward_demodulation,[],[f160113,f4412]) ).

fof(f4412,plain,
    the_carrier(sK164) = cast_as_carrier_subset(sK164),
    inference(resolution,[],[f2476,f2388]) ).

fof(f2476,plain,
    ! [X0] :
      ( ~ one_sorted_str(X0)
      | the_carrier(X0) = cast_as_carrier_subset(X0) ),
    inference(cnf_transformation,[],[f612]) ).

fof(f612,plain,
    ! [X0] :
      ( the_carrier(X0) = cast_as_carrier_subset(X0)
      | ~ one_sorted_str(X0) ),
    inference(ennf_transformation,[],[f368]) ).

fof(f368,axiom,
    ! [X0] :
      ( one_sorted_str(X0)
     => the_carrier(X0) = cast_as_carrier_subset(X0) ),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',t12_pre_topc) ).

fof(f160113,plain,
    ( empty_set = cast_as_carrier_subset(sK164)
    | ~ element(empty_set,powerset(powerset(the_carrier(sK164))))
    | ~ one_sorted_str(sK164) ),
    inference(forward_demodulation,[],[f160112,f80497]) ).

fof(f80497,plain,
    ! [X0] : empty_set = union_of_subsets(X0,empty_set),
    inference(forward_demodulation,[],[f80485,f11789]) ).

fof(f11789,plain,
    empty_set = union(empty_set),
    inference(resolution,[],[f7101,f2955]) ).

fof(f2955,plain,
    ordinal(empty_set),
    inference(cnf_transformation,[],[f214]) ).

fof(f214,axiom,
    ( ordinal(empty_set)
    & epsilon_connected(empty_set)
    & epsilon_transitive(empty_set)
    & empty(empty_set)
    & one_to_one(empty_set)
    & function(empty_set)
    & relation_empty_yielding(empty_set)
    & relation(empty_set) ),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',fc2_ordinal1) ).

fof(f7101,plain,
    ( ~ ordinal(empty_set)
    | empty_set = union(empty_set) ),
    inference(resolution,[],[f7098,f3392]) ).

fof(f3392,plain,
    ! [X0] :
      ( ~ being_limit_ordinal(X0)
      | union(X0) = X0 ),
    inference(cnf_transformation,[],[f1994]) ).

fof(f1994,plain,
    ! [X0] :
      ( ( being_limit_ordinal(X0)
        | union(X0) != X0 )
      & ( union(X0) = X0
        | ~ being_limit_ordinal(X0) ) ),
    inference(nnf_transformation,[],[f103]) ).

fof(f103,axiom,
    ! [X0] :
      ( being_limit_ordinal(X0)
    <=> union(X0) = X0 ),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',d6_ordinal1) ).

fof(f7098,plain,
    ( being_limit_ordinal(empty_set)
    | ~ ordinal(empty_set) ),
    inference(resolution,[],[f2491,f4047]) ).

fof(f4047,plain,
    ! [X2] : ~ in(X2,empty_set),
    inference(equality_resolution,[],[f3428]) ).

fof(f3428,plain,
    ! [X2,X0] :
      ( ~ in(X2,X0)
      | empty_set != X0 ),
    inference(cnf_transformation,[],[f2027]) ).

fof(f2027,plain,
    ! [X0] :
      ( ( empty_set = X0
        | in(sK374(X0),X0) )
      & ( ! [X2] : ~ in(X2,X0)
        | empty_set != X0 ) ),
    inference(skolemisation,[status(esa),new_symbols(skolem,[sK374])],[f2025,f2026]) ).

fof(f2026,plain,
    ! [X0] :
      ( ? [X1] : in(X1,X0)
     => in(sK374(X0),X0) ),
    introduced(choice_axiom,[]) ).

fof(f2025,plain,
    ! [X0] :
      ( ( empty_set = X0
        | ? [X1] : in(X1,X0) )
      & ( ! [X2] : ~ in(X2,X0)
        | empty_set != X0 ) ),
    inference(rectify,[],[f2024]) ).

fof(f2024,plain,
    ! [X0] :
      ( ( empty_set = X0
        | ? [X1] : in(X1,X0) )
      & ( ! [X1] : ~ in(X1,X0)
        | empty_set != X0 ) ),
    inference(nnf_transformation,[],[f68]) ).

fof(f68,axiom,
    ! [X0] :
      ( empty_set = X0
    <=> ! [X1] : ~ in(X1,X0) ),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',d1_xboole_0) ).

fof(f2491,plain,
    ! [X0] :
      ( in(sK187(X0),X0)
      | being_limit_ordinal(X0)
      | ~ ordinal(X0) ),
    inference(cnf_transformation,[],[f1473]) ).

fof(f1473,plain,
    ! [X0] :
      ( ( ( being_limit_ordinal(X0)
          | ( ~ in(succ(sK187(X0)),X0)
            & in(sK187(X0),X0)
            & ordinal(sK187(X0)) ) )
        & ( ! [X2] :
              ( in(succ(X2),X0)
              | ~ in(X2,X0)
              | ~ ordinal(X2) )
          | ~ being_limit_ordinal(X0) ) )
      | ~ ordinal(X0) ),
    inference(skolemisation,[status(esa),new_symbols(skolem,[sK187])],[f1471,f1472]) ).

fof(f1472,plain,
    ! [X0] :
      ( ? [X1] :
          ( ~ in(succ(X1),X0)
          & in(X1,X0)
          & ordinal(X1) )
     => ( ~ in(succ(sK187(X0)),X0)
        & in(sK187(X0),X0)
        & ordinal(sK187(X0)) ) ),
    introduced(choice_axiom,[]) ).

fof(f1471,plain,
    ! [X0] :
      ( ( ( being_limit_ordinal(X0)
          | ? [X1] :
              ( ~ in(succ(X1),X0)
              & in(X1,X0)
              & ordinal(X1) ) )
        & ( ! [X2] :
              ( in(succ(X2),X0)
              | ~ in(X2,X0)
              | ~ ordinal(X2) )
          | ~ being_limit_ordinal(X0) ) )
      | ~ ordinal(X0) ),
    inference(rectify,[],[f1470]) ).

fof(f1470,plain,
    ! [X0] :
      ( ( ( being_limit_ordinal(X0)
          | ? [X1] :
              ( ~ in(succ(X1),X0)
              & in(X1,X0)
              & ordinal(X1) ) )
        & ( ! [X1] :
              ( in(succ(X1),X0)
              | ~ in(X1,X0)
              | ~ ordinal(X1) )
          | ~ being_limit_ordinal(X0) ) )
      | ~ ordinal(X0) ),
    inference(nnf_transformation,[],[f625]) ).

fof(f625,plain,
    ! [X0] :
      ( ( being_limit_ordinal(X0)
      <=> ! [X1] :
            ( in(succ(X1),X0)
            | ~ in(X1,X0)
            | ~ ordinal(X1) ) )
      | ~ ordinal(X0) ),
    inference(flattening,[],[f624]) ).

fof(f624,plain,
    ! [X0] :
      ( ( being_limit_ordinal(X0)
      <=> ! [X1] :
            ( in(succ(X1),X0)
            | ~ in(X1,X0)
            | ~ ordinal(X1) ) )
      | ~ ordinal(X0) ),
    inference(ennf_transformation,[],[f462]) ).

fof(f462,axiom,
    ! [X0] :
      ( ordinal(X0)
     => ( being_limit_ordinal(X0)
      <=> ! [X1] :
            ( ordinal(X1)
           => ( in(X1,X0)
             => in(succ(X1),X0) ) ) ) ),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',t41_ordinal1) ).

fof(f80485,plain,
    ! [X0] : union(empty_set) = union_of_subsets(X0,empty_set),
    inference(resolution,[],[f3588,f4153]) ).

fof(f3588,plain,
    ! [X0,X1] :
      ( ~ element(X1,powerset(powerset(X0)))
      | union_of_subsets(X0,X1) = union(X1) ),
    inference(cnf_transformation,[],[f1052]) ).

fof(f1052,plain,
    ! [X0,X1] :
      ( union_of_subsets(X0,X1) = union(X1)
      | ~ element(X1,powerset(powerset(X0))) ),
    inference(ennf_transformation,[],[f313]) ).

fof(f313,axiom,
    ! [X0,X1] :
      ( element(X1,powerset(powerset(X0)))
     => union_of_subsets(X0,X1) = union(X1) ),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',redefinition_k5_setfam_1) ).

fof(f160112,plain,
    ( cast_as_carrier_subset(sK164) = union_of_subsets(the_carrier(sK164),empty_set)
    | ~ element(empty_set,powerset(powerset(the_carrier(sK164))))
    | ~ one_sorted_str(sK164) ),
    inference(resolution,[],[f3040,f4114]) ).

fof(f4114,plain,
    is_a_cover_of_carrier(sK164,empty_set),
    inference(forward_demodulation,[],[f2390,f2391]) ).

fof(f2391,plain,
    empty_set = sK165,
    inference(cnf_transformation,[],[f1394]) ).

fof(f2390,plain,
    is_a_cover_of_carrier(sK164,sK165),
    inference(cnf_transformation,[],[f1394]) ).

fof(f3040,plain,
    ! [X0,X1] :
      ( ~ is_a_cover_of_carrier(X0,X1)
      | union_of_subsets(the_carrier(X0),X1) = cast_as_carrier_subset(X0)
      | ~ element(X1,powerset(powerset(the_carrier(X0))))
      | ~ one_sorted_str(X0) ),
    inference(cnf_transformation,[],[f1784]) ).

fof(f1784,plain,
    ! [X0] :
      ( ! [X1] :
          ( ( ( is_a_cover_of_carrier(X0,X1)
              | union_of_subsets(the_carrier(X0),X1) != cast_as_carrier_subset(X0) )
            & ( union_of_subsets(the_carrier(X0),X1) = cast_as_carrier_subset(X0)
              | ~ is_a_cover_of_carrier(X0,X1) ) )
          | ~ element(X1,powerset(powerset(the_carrier(X0)))) )
      | ~ one_sorted_str(X0) ),
    inference(nnf_transformation,[],[f885]) ).

fof(f885,plain,
    ! [X0] :
      ( ! [X1] :
          ( ( is_a_cover_of_carrier(X0,X1)
          <=> union_of_subsets(the_carrier(X0),X1) = cast_as_carrier_subset(X0) )
          | ~ element(X1,powerset(powerset(the_carrier(X0)))) )
      | ~ one_sorted_str(X0) ),
    inference(ennf_transformation,[],[f113]) ).

fof(f113,axiom,
    ! [X0] :
      ( one_sorted_str(X0)
     => ! [X1] :
          ( element(X1,powerset(powerset(the_carrier(X0))))
         => ( is_a_cover_of_carrier(X0,X1)
          <=> union_of_subsets(the_carrier(X0),X1) = cast_as_carrier_subset(X0) ) ) ),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',d8_pre_topc) ).

fof(f4593,plain,
    ~ empty(the_carrier(sK164)),
    inference(resolution,[],[f4591,f2388]) ).

fof(f4591,plain,
    ( ~ one_sorted_str(sK164)
    | ~ empty(the_carrier(sK164)) ),
    inference(resolution,[],[f3039,f2387]) ).

fof(f2387,plain,
    ~ empty_carrier(sK164),
    inference(cnf_transformation,[],[f1394]) ).

fof(f3039,plain,
    ! [X0] :
      ( empty_carrier(X0)
      | ~ empty(the_carrier(X0))
      | ~ one_sorted_str(X0) ),
    inference(cnf_transformation,[],[f1783]) ).

fof(f1783,plain,
    ! [X0] :
      ( ( ( empty_carrier(X0)
          | ~ empty(the_carrier(X0)) )
        & ( empty(the_carrier(X0))
          | ~ empty_carrier(X0) ) )
      | ~ one_sorted_str(X0) ),
    inference(nnf_transformation,[],[f884]) ).

fof(f884,plain,
    ! [X0] :
      ( ( empty_carrier(X0)
      <=> empty(the_carrier(X0)) )
      | ~ one_sorted_str(X0) ),
    inference(ennf_transformation,[],[f63]) ).

fof(f63,axiom,
    ! [X0] :
      ( one_sorted_str(X0)
     => ( empty_carrier(X0)
      <=> empty(the_carrier(X0)) ) ),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',d1_struct_0) ).

%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.04/0.13  % Problem    : SEU325+2 : TPTP v8.1.2. Released v3.3.0.
% 0.14/0.15  % Command    : vampire --mode casc_sat -m 16384 --cores 7 -t %d %s
% 0.15/0.36  % Computer : n013.cluster.edu
% 0.15/0.36  % Model    : x86_64 x86_64
% 0.15/0.36  % CPU      : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.15/0.36  % Memory   : 8042.1875MB
% 0.15/0.36  % OS       : Linux 3.10.0-693.el7.x86_64
% 0.15/0.36  % CPULimit   : 300
% 0.15/0.36  % WCLimit    : 300
% 0.15/0.36  % DateTime   : Fri May  3 11:19:34 EDT 2024
% 0.15/0.36  % CPUTime    : 
% 0.15/0.36  % (27695)Running in auto input_syntax mode. Trying TPTP
% 0.21/0.40  % (27698)WARNING: value z3 for option sas not known
% 0.21/0.40  % (27700)ott+10_10:1_add=off:afr=on:amm=off:anc=all:bd=off:bs=on:fsr=off:irw=on:lma=on:msp=off:nm=4:nwc=4.0:sac=on:sp=reverse_frequency_531 on theBenchmark for (531ds/0Mi)
% 0.21/0.40  % (27697)fmb+10_1_bce=on:fmbdsb=on:fmbes=contour:fmbswr=3:fde=none:nm=0_793 on theBenchmark for (793ds/0Mi)
% 0.21/0.40  % (27699)fmb+10_1_bce=on:fmbsr=1.5:nm=32_533 on theBenchmark for (533ds/0Mi)
% 0.21/0.40  % (27701)ott-10_8_av=off:bd=preordered:bs=on:fsd=off:fsr=off:fde=unused:irw=on:lcm=predicate:lma=on:nm=4:nwc=1.7:sp=frequency_522 on theBenchmark for (522ds/0Mi)
% 0.21/0.40  % (27698)dis+2_11_add=large:afr=on:amm=off:bd=off:bce=on:fsd=off:fde=none:gs=on:gsaa=full_model:gsem=off:irw=on:msp=off:nm=4:nwc=1.3:sas=z3:sims=off:sac=on:sp=reverse_arity_569 on theBenchmark for (569ds/0Mi)
% 0.21/0.40  % (27702)ott+1_64_av=off:bd=off:bce=on:fsd=off:fde=unused:gsp=on:irw=on:lcm=predicate:lma=on:nm=2:nwc=1.1:sims=off:urr=on_497 on theBenchmark for (497ds/0Mi)
% 0.21/0.42  % (27696)fmb+10_1_bce=on:fmbas=function:fmbsr=1.2:fde=unused:nm=0_846 on theBenchmark for (846ds/0Mi)
% 1.35/0.59  TRYING [1]
% 1.35/0.61  TRYING [2]
% 3.19/0.86  TRYING [3]
% 11.77/2.08  TRYING [1]
% 12.28/2.15  TRYING [2]
% 13.41/2.32  TRYING [4]
% 14.27/2.42  TRYING [3]
% 21.69/3.49  TRYING [4]
% 28.00/4.38  TRYING [1]
% 30.63/4.76  TRYING [2]
% 45.99/6.99  TRYING [5]
% 52.99/7.96  TRYING [5]
% 62.84/9.47  TRYING [3]
% 118.22/17.39  TRYING [6]
% 200.11/29.12  TRYING [4]
% 217.31/31.58  TRYING [6]
% 259.73/37.61  % (27701)First to succeed.
% 259.73/37.61  % (27701)Solution written to "/export/starexec/sandbox2/tmp/vampire-proof-27695"
% 259.73/37.63  % (27701)Refutation found. Thanks to Tanya!
% 259.73/37.63  % SZS status Theorem for theBenchmark
% 259.73/37.63  % SZS output start Proof for theBenchmark
% See solution above
% 259.73/37.63  % (27701)------------------------------
% 259.73/37.63  % (27701)Version: Vampire 4.8 (commit 3a798227e on 2024-05-03 07:42:47 +0200)
% 259.73/37.63  % (27701)Termination reason: Refutation
% 259.73/37.63  
% 259.73/37.63  % (27701)Memory used [KB]: 178511
% 259.73/37.63  % (27701)Time elapsed: 37.207 s
% 259.73/37.63  % (27701)Instructions burned: 68902 (million)
% 259.73/37.63  % (27695)Success in time 37.15 s
%------------------------------------------------------------------------------