↑ Up

Vampire-SAT---5.0.1.THM-Ref.s

View TPTP
Problem
Process solution in
SystemOnTSTP
Download .tgz
%------------------------------------------------------------------------------
% File     : Vampire-SAT---5.0.1
% Problem  : SET611^5 : TPTP v9.3.1. Released v4.0.0.
% Transfm  : none
% Format   : tptp:raw
% Command  : run_vampire /export/starexec/sandbox/benchmark/theBenchmark.p 300 SAT

% Computer : n016.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:23:42 AM UTC 2026

% Result   : Theorem 0.10s 0.25s
% Output   : Refutation 0.10s
% Verified : 
% SZS Type : Refutation
%            Derivation depth      :   18
%            Number of leaves      :    5
% Syntax   : Number of formulae    :   72 (   6 unt;   0 typ;   4 def)
%            Number of atoms       :  366 (  90 equ;   0 cnn)
%            Maximal formula atoms :    4 (   5 avg)
%            Number of connectives :  360 (  75   ~;  96   |;  44   &; 136   @)
%                                         (   8 <=>;   0  =>;   0  <=;   1 <~>)
%            Maximal formula depth :    6 (   3 avg)
%            Maximal term depth    :    1 (   1 avg)
%            Number of types       :    2 (   1 usr)
%            Number of type conns  :   12 (  12   >;   0   *;   0   +;   0  <<)
%            Number of symbols     :   16 (  13 usr;   8 con; 0-4 aty)
%            Number of variables   :   77 (  18 sgn  18   !;   4   ?;  77   :)

% Comments : 
%------------------------------------------------------------------------------
thf(type_def_5,type,
    a: $tType ).

thf(type_def_6,type,
    sTfun: ( $tType * $tType ) > $tType ).

thf(func_def_1,type,
    vAND: $o > $o > $o ).

thf(func_def_2,type,
    db0: 
      !>[X0: $tType] : X0 ).

thf(func_def_3,type,
    vLAM: 
      !>[X0: $tType,X1: $tType] : ( X1 > X0 > X1 ) ).

thf(func_def_6,type,
    vNOT: $o > $o ).

thf(func_def_7,type,
    sK0: a > $o ).

thf(func_def_8,type,
    sK1: a > $o ).

thf(func_def_10,type,
    sK3: a ).

thf(func_def_11,type,
    sK4: a ).

thf(f1,conjecture,
    ! [X0: a > $o,X1: a > $o] :
      ( ( ( ^ [X2: a] :
              ( ( X1 @ X2 )
              & ( X0 @ X2 ) ) )
        = ( ^ [X2: a] : $false ) )
    <=> ( ( ^ [X2: a] :
              ( ~ ( X1 @ X2 )
              & ( X0 @ X2 ) ) )
        = X0 ) ),
    file('/export/starexec/sandbox/benchmark/theBenchmark.p',cBOOL_PROP_84_pme) ).

thf(f2,negated_conjecture,
    ~ ! [X0: a > $o,X1: a > $o] :
        ( ( ( ^ [X2: a] :
                ( ( X1 @ X2 )
                & ( X0 @ X2 ) ) )
          = ( ^ [X2: a] : $false ) )
      <=> ( ( ^ [X2: a] :
                ( ~ ( X1 @ X2 )
                & ( X0 @ X2 ) ) )
          = X0 ) ),
    inference(negated_conjecture,[status(cth)],[f1]) ).

thf(f3,plain,
    ~ ! [X0: a > $o,X1: a > $o] :
        ( ( ( ^ [X2: a] :
                ( ( X1 @ X2 )
                & ( X0 @ X2 ) ) )
          = ( ^ [X3: a] : $false ) )
      <=> ( ( ^ [X4: a] :
                ( ~ ( X1 @ X4 )
                & ( X0 @ X4 ) ) )
          = X0 ) ),
    inference(rectify,[],[f2]) ).

thf(f4,plain,
    ~ ! [X0: a > $o,X1: a > $o] :
        ( ( ( ^ [Y0: a] :
                ( ( X0 @ Y0 )
                & ( X1 @ Y0 ) ) )
          = ( ^ [Y0: a] : $false ) )
      <=> ( ( ^ [Y0: a] :
                ( ( X0 @ Y0 )
                & ~ ( X1 @ Y0 ) ) )
          = X0 ) ),
    inference(fool_elimination,[],[f3]) ).

thf(f5,plain,
    ? [X0: a > $o,X1: a > $o] :
      ( ( ( ^ [Y0: a] :
              ( ( X0 @ Y0 )
              & ( X1 @ Y0 ) ) )
        = ( ^ [Y0: a] : $false ) )
    <~> ( ( ^ [Y0: a] :
              ( ( X0 @ Y0 )
              & ~ ( X1 @ Y0 ) ) )
        = X0 ) ),
    inference(ennf_transformation,[],[f4]) ).

thf(f6,plain,
    ? [X0: a > $o,X1: a > $o] :
      ( ( ( ( ^ [Y0: a] :
                ( ( X0 @ Y0 )
                & ~ ( X1 @ Y0 ) ) )
         != X0 )
        | ( ( ^ [Y0: a] :
                ( ( X0 @ Y0 )
                & ( X1 @ Y0 ) ) )
         != ( ^ [Y0: a] : $false ) ) )
      & ( ( ( ^ [Y0: a] :
                ( ( X0 @ Y0 )
                & ~ ( X1 @ Y0 ) ) )
          = X0 )
        | ( ( ^ [Y0: a] :
                ( ( X0 @ Y0 )
                & ( X1 @ Y0 ) ) )
          = ( ^ [Y0: a] : $false ) ) ) ),
    inference(nnf_transformation,[],[f5]) ).

thf(f7,plain,
    ( ( ( sK0
       != ( ^ [Y0: a] :
              ( ( sK0 @ Y0 )
              & ~ ( sK1 @ Y0 ) ) ) )
      | ( ( ^ [Y0: a] : $false )
       != ( ^ [Y0: a] :
              ( ( sK0 @ Y0 )
              & ( sK1 @ Y0 ) ) ) ) )
    & ( ( sK0
        = ( ^ [Y0: a] :
              ( ( sK0 @ Y0 )
              & ~ ( sK1 @ Y0 ) ) ) )
      | ( ( ^ [Y0: a] : $false )
        = ( ^ [Y0: a] :
              ( ( sK0 @ Y0 )
              & ( sK1 @ Y0 ) ) ) ) ) ),
    inference(skolemize,[status(esa),new_symbols(skolem,[sK0,sK1]),skolemize(X0,sK0),skolemize(X1,sK1)],[f6]) ).

thf(f8,plain,
    ( ( sK0
      = ( ^ [Y0: a] :
            ( ( sK0 @ Y0 )
            & ~ ( sK1 @ Y0 ) ) ) )
    | ( ( ^ [Y0: a] : $false )
      = ( ^ [Y0: a] :
            ( ( sK0 @ Y0 )
            & ( sK1 @ Y0 ) ) ) ) ),
    inference(cnf_transformation,[],[f7]) ).

thf(f9,plain,
    ( ( sK0
     != ( ^ [Y0: a] :
            ( ( sK0 @ Y0 )
            & ~ ( sK1 @ Y0 ) ) ) )
    | ( ( ^ [Y0: a] : $false )
     != ( ^ [Y0: a] :
            ( ( sK0 @ Y0 )
            & ( sK1 @ Y0 ) ) ) ) ),
    inference(cnf_transformation,[],[f7]) ).

thf(f13,definition,
    ( spl2_1
  <=> ( ( ^ [Y0: a] : $false )
      = ( ^ [Y0: a] :
            ( ( sK0 @ Y0 )
            & ( sK1 @ Y0 ) ) ) ) ),
    introduced(definition,[new_symbols(definition,[spl2_1])],[avatar_definition]) ).

thf(f14,plain,
    ( ( ( ^ [Y0: a] : $false )
     != ( ^ [Y0: a] :
            ( ( sK0 @ Y0 )
            & ( sK1 @ Y0 ) ) ) )
    | spl2_1 ),
    inference(avatar_component_clause,[],[f13]) ).

thf(f15,plain,
    ( ( ( ^ [Y0: a] : $false )
      = ( ^ [Y0: a] :
            ( ( sK0 @ Y0 )
            & ( sK1 @ Y0 ) ) ) )
    | ~ spl2_1 ),
    inference(avatar_component_clause,[],[f13]) ).

thf(f17,definition,
    ( spl2_2
  <=> ( sK0
      = ( ^ [Y0: a] :
            ( ( sK0 @ Y0 )
            & ~ ( sK1 @ Y0 ) ) ) ) ),
    introduced(definition,[new_symbols(definition,[spl2_2])],[avatar_definition]) ).

thf(f18,plain,
    ( ( sK0
     != ( ^ [Y0: a] :
            ( ( sK0 @ Y0 )
            & ~ ( sK1 @ Y0 ) ) ) )
    | spl2_2 ),
    inference(avatar_component_clause,[],[f17]) ).

thf(f19,plain,
    ( ( sK0
      = ( ^ [Y0: a] :
            ( ( sK0 @ Y0 )
            & ~ ( sK1 @ Y0 ) ) ) )
    | ~ spl2_2 ),
    inference(avatar_component_clause,[],[f17]) ).

thf(f20,plain,
    ( spl2_1
    | spl2_2 ),
    inference(avatar_split_clause,[],[f8,f17,f13]) ).

thf(f21,plain,
    ( ~ spl2_1
    | ~ spl2_2 ),
    inference(avatar_split_clause,[],[f9,f17,f13]) ).

thf(f22,plain,
    ( ( ( ^ [Y0: a] : $false
        @ sK3 )
     != ( ^ [Y0: a] :
            ( ( sK0 @ Y0 )
            & ( sK1 @ Y0 ) )
        @ sK3 ) )
    | spl2_1 ),
    inference(negative_extensionality,[],[f14]) ).

thf(f23,plain,
    ( ( $true
      = ( ^ [Y0: a] : $false
        @ sK3 ) )
    | ( $true
      = ( ^ [Y0: a] :
            ( ( sK0 @ Y0 )
            & ( sK1 @ Y0 ) )
        @ sK3 ) )
    | spl2_1 ),
    inference(xor_proxy_clausification,[],[f22]) ).

thf(f27,plain,
    ( ( $false = $true )
    | ( $true
      = ( ( sK0 @ sK3 )
        & ( sK1 @ sK3 ) ) )
    | spl2_1 ),
    inference(beta-eta_normalization,[],[f23]) ).

thf(f28,plain,
    ( ( $false = $true )
    | ( $true
      = ( sK1 @ sK3 ) )
    | spl2_1 ),
    inference(and_proxy_clausification,[],[f27]) ).

thf(f29,plain,
    ( ( $false = $true )
    | ( $true
      = ( sK0 @ sK3 ) )
    | spl2_1 ),
    inference(and_proxy_clausification,[],[f27]) ).

thf(f30,plain,
    ( ( $true
      = ( sK0 @ sK3 ) )
    | spl2_1 ),
    inference(trivial_inequality_removal,[],[f29]) ).

thf(f31,plain,
    ( ( $true
      = ( sK1 @ sK3 ) )
    | spl2_1 ),
    inference(trivial_inequality_removal,[],[f28]) ).

thf(f32,plain,
    ( ! [X1: a] :
        ( ( sK0 @ X1 )
        = ( ^ [Y0: a] :
              ( ( sK0 @ Y0 )
              & ~ ( sK1 @ Y0 ) )
          @ X1 ) )
    | ~ spl2_2 ),
    inference(argument_congruence,[],[f19]) ).

thf(f34,plain,
    ( ! [X1: a] :
        ( ( $false
          = ( sK0 @ X1 ) )
        | ( $true
          = ( ^ [Y0: a] :
                ( ( sK0 @ Y0 )
                & ~ ( sK1 @ Y0 ) )
            @ X1 ) ) )
    | ~ spl2_2 ),
    inference(iff_proxy_clausification,[],[f32]) ).

thf(f35,plain,
    ( ! [X1: a] :
        ( ( $false
          = ( sK0 @ X1 ) )
        | ( $true
          = ( ( sK0 @ X1 )
            & ~ ( sK1 @ X1 ) ) ) )
    | ~ spl2_2 ),
    inference(beta-eta_normalization,[],[f34]) ).

thf(f36,plain,
    ( ! [X1: a] :
        ( ( $false
          = ( sK0 @ X1 ) )
        | ( $true
          = ( ~ ( sK1 @ X1 ) ) ) )
    | ~ spl2_2 ),
    inference(and_proxy_clausification,[],[f35]) ).

thf(f38,plain,
    ( ! [X1: a] :
        ( ( $false
          = ( sK1 @ X1 ) )
        | ( $false
          = ( sK0 @ X1 ) ) )
    | ~ spl2_2 ),
    inference(not_proxy_clausification,[],[f36]) ).

thf(f43,plain,
    ( ( $false = $true )
    | ( $false
      = ( sK0 @ sK3 ) )
    | spl2_1
    | ~ spl2_2 ),
    inference(constrained_superposition,[],[f31,f38]) ).

thf(f44,plain,
    ( ( $false
      = ( sK0 @ sK3 ) )
    | spl2_1
    | ~ spl2_2 ),
    inference(trivial_inequality_removal,[],[f43]) ).

thf(f46,plain,
    ( ( $false = $true )
    | spl2_1
    | ~ spl2_2 ),
    inference(constrained_superposition,[],[f44,f30]) ).

thf(f50,plain,
    ( $false
    | spl2_1
    | ~ spl2_2 ),
    inference(trivial_inequality_removal,[],[f46]) ).

thf(f51,plain,
    ( spl2_1
    | ~ spl2_2 ),
    inference(avatar_contradiction_clause,[],[f50]) ).

thf(f52,plain,
    ( ! [X1: a] :
        ( ( ^ [Y0: a] : $false
          @ X1 )
        = ( ^ [Y0: a] :
              ( ( sK0 @ Y0 )
              & ( sK1 @ Y0 ) )
          @ X1 ) )
    | ~ spl2_1 ),
    inference(argument_congruence,[],[f15]) ).

thf(f53,plain,
    ( ! [X1: a] :
        ( ( $true
          = ( ^ [Y0: a] : $false
            @ X1 ) )
        | ( $false
          = ( ^ [Y0: a] :
                ( ( sK0 @ Y0 )
                & ( sK1 @ Y0 ) )
            @ X1 ) ) )
    | ~ spl2_1 ),
    inference(iff_proxy_clausification,[],[f52]) ).

thf(f58,plain,
    ( ! [X1: a] :
        ( ( $false = $true )
        | ( $false
          = ( ( sK0 @ X1 )
            & ( sK1 @ X1 ) ) ) )
    | ~ spl2_1 ),
    inference(beta-eta_normalization,[],[f53]) ).

thf(f59,plain,
    ( ! [X1: a] :
        ( ( $false = $true )
        | ( $false
          = ( sK1 @ X1 ) )
        | ( $false
          = ( sK0 @ X1 ) ) )
    | ~ spl2_1 ),
    inference(and_proxy_clausification,[],[f58]) ).

thf(f60,plain,
    ( ! [X1: a] :
        ( ( $false
          = ( sK1 @ X1 ) )
        | ( $false
          = ( sK0 @ X1 ) ) )
    | ~ spl2_1 ),
    inference(trivial_inequality_removal,[],[f59]) ).

thf(f61,plain,
    ( ( ( sK0 @ sK4 )
     != ( ^ [Y0: a] :
            ( ( sK0 @ Y0 )
            & ~ ( sK1 @ Y0 ) )
        @ sK4 ) )
    | spl2_2 ),
    inference(negative_extensionality,[],[f18]) ).

thf(f62,plain,
    ( ( $true
      = ( sK0 @ sK4 ) )
    | ( $true
      = ( ^ [Y0: a] :
            ( ( sK0 @ Y0 )
            & ~ ( sK1 @ Y0 ) )
        @ sK4 ) )
    | spl2_2 ),
    inference(xor_proxy_clausification,[],[f61]) ).

thf(f63,plain,
    ( ( $false
      = ( sK0 @ sK4 ) )
    | ( $false
      = ( ^ [Y0: a] :
            ( ( sK0 @ Y0 )
            & ~ ( sK1 @ Y0 ) )
        @ sK4 ) )
    | spl2_2 ),
    inference(xor_proxy_clausification,[],[f61]) ).

thf(f64,plain,
    ( ( $false
      = ( sK0 @ sK4 ) )
    | ( $false
      = ( ( sK0 @ sK4 )
        & ~ ( sK1 @ sK4 ) ) )
    | spl2_2 ),
    inference(beta-eta_normalization,[],[f63]) ).

thf(f65,plain,
    ( ( $false
      = ( sK0 @ sK4 ) )
    | ( $false
      = ( ~ ( sK1 @ sK4 ) ) )
    | ( $false
      = ( sK0 @ sK4 ) )
    | spl2_2 ),
    inference(and_proxy_clausification,[],[f64]) ).

thf(f66,plain,
    ( ( $false
      = ( sK0 @ sK4 ) )
    | ( $true
      = ( sK1 @ sK4 ) )
    | ( $false
      = ( sK0 @ sK4 ) )
    | spl2_2 ),
    inference(not_proxy_clausification,[],[f65]) ).

thf(f67,plain,
    ( ( $false
      = ( sK0 @ sK4 ) )
    | ( $true
      = ( sK1 @ sK4 ) )
    | spl2_2 ),
    inference(duplicate_literal_removal,[],[f66]) ).

thf(f68,plain,
    ( ( $true
      = ( sK0 @ sK4 ) )
    | ( $true
      = ( ( sK0 @ sK4 )
        & ~ ( sK1 @ sK4 ) ) )
    | spl2_2 ),
    inference(beta-eta_normalization,[],[f62]) ).

thf(f70,plain,
    ( ( $true
      = ( sK0 @ sK4 ) )
    | ( $true
      = ( sK0 @ sK4 ) )
    | spl2_2 ),
    inference(and_proxy_clausification,[],[f68]) ).

thf(f71,plain,
    ( ( $true
      = ( sK0 @ sK4 ) )
    | spl2_2 ),
    inference(duplicate_literal_removal,[],[f70]) ).

thf(f74,definition,
    ( spl2_3
  <=> ( $true
      = ( sK1 @ sK4 ) ) ),
    introduced(definition,[new_symbols(definition,[spl2_3])],[avatar_definition]) ).

thf(f76,plain,
    ( ( $true
      = ( sK1 @ sK4 ) )
    | ~ spl2_3 ),
    inference(avatar_component_clause,[],[f74]) ).

thf(f78,definition,
    ( spl2_4
  <=> ( $false
      = ( sK0 @ sK4 ) ) ),
    introduced(definition,[new_symbols(definition,[spl2_4])],[avatar_definition]) ).

thf(f80,plain,
    ( ( $false
      = ( sK0 @ sK4 ) )
    | ~ spl2_4 ),
    inference(avatar_component_clause,[],[f78]) ).

thf(f81,plain,
    ( spl2_3
    | spl2_4
    | spl2_2 ),
    inference(avatar_split_clause,[],[f67,f17,f78,f74]) ).

thf(f83,plain,
    ( ( $false = $true )
    | spl2_2
    | ~ spl2_4 ),
    inference(constrained_superposition,[],[f71,f80]) ).

thf(f87,plain,
    ( $false
    | spl2_2
    | ~ spl2_4 ),
    inference(trivial_inequality_removal,[],[f83]) ).

thf(f88,plain,
    ( spl2_2
    | ~ spl2_4 ),
    inference(avatar_contradiction_clause,[],[f87]) ).

thf(f90,plain,
    ( ( $false = $true )
    | ( $false
      = ( sK0 @ sK4 ) )
    | ~ spl2_1
    | ~ spl2_3 ),
    inference(constrained_superposition,[],[f60,f76]) ).

thf(f91,plain,
    ( ( $false
      = ( sK0 @ sK4 ) )
    | ~ spl2_1
    | ~ spl2_3 ),
    inference(trivial_inequality_removal,[],[f90]) ).

thf(f93,plain,
    ( spl2_4
    | ~ spl2_1
    | ~ spl2_3 ),
    inference(avatar_split_clause,[],[f91,f74,f13,f78]) ).

cnf(s1,plain,
    ( spl2_1
    | spl2_2 ),
    inference(sat_conversion,[],[f20]) ).

cnf(s2,plain,
    ( ~ spl2_1
    | ~ spl2_2 ),
    inference(sat_conversion,[],[f21]) ).

cnf(s4,plain,
    ( spl2_1
    | ~ spl2_2 ),
    inference(sat_conversion,[],[f51]) ).

cnf(s5,plain,
    ( spl2_2
    | spl2_3
    | spl2_4 ),
    inference(sat_conversion,[],[f81]) ).

cnf(s7,plain,
    ( spl2_2
    | ~ spl2_4 ),
    inference(sat_conversion,[],[f88]) ).

cnf(s8,plain,
    ( ~ spl2_1
    | ~ spl2_3
    | spl2_4 ),
    inference(sat_conversion,[],[f93]) ).

cnf(s10,plain,
    spl2_1,
    inference(rat,[],[s1,s4]) ).

cnf(s11,plain,
    ~ spl2_2,
    inference(rat,[],[s2,s10]) ).

cnf(s12,plain,
    ~ spl2_4,
    inference(rat,[],[s7,s11]) ).

cnf(s13,plain,
    spl2_3,
    inference(rat,[],[s5,s11,s12]) ).

cnf(s14,plain,
    $false,
    inference(rat,[],[s8,s10,s12,s13]) ).

thf(f94,plain,
    $false,
    inference(avatar_sat_refutation,[],[s14]) ).

%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.00/0.03  % Problem  : SET611^5 : TPTP v9.3.1. Released v4.0.0.
% 0.00/0.06  % Command  : run_vampire /export/starexec/sandbox/benchmark/theBenchmark.p 300 SAT
% 0.10/0.17  % Computer : n016.cluster.edu
% 0.10/0.17  % Model    : x86_64 x86_64
% 0.10/0.17  % CPU      : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.10/0.17  % Memory   : 8046.5625MB
% 0.10/0.17  % OS       : Linux 6.8.0-71-generic
% 0.10/0.17  % CPULimit : 300
% 0.10/0.17  % WCLimit  : 300
% 0.10/0.17  % DateTime : Tue Sep 29 13:44:04 UTC 2026
% 0.10/0.18  % CPUTime  : 
% 0.10/0.18  Running run_vampire /export/starexec/sandbox/benchmark/theBenchmark.p 300 SAT
% 0.10/0.21  Running first-order model finding
% 0.10/0.21  Running: /export/starexec/sandbox/solver/bin/vampire-ho --input_syntax tptp --output_axiom_names on --mode casc --intent sat -m 16384 --cores 7 -t 300 /export/starexec/sandbox/benchmark/theBenchmark.p
% 0.10/0.25  % (361934)Will run a generic schedule for satisfiability detection.
% 0.10/0.25  % (361958)ott-3_16_to=lpo:sil=16000:sp=arity:fd=off:rp=on:random_seed=2248294979:i=159:bs=unit_only:nicw=on:fsr=off:amm=off_2999 on theBenchmark for (2999ds/159Mi)
% 0.10/0.25  % (361958) found proof, printing to "/export/starexec/sandbox/tmp/vampire-proof-361934-361958"...
% 0.10/0.25  % (361958)...printing done.
% 0.10/0.25  % (361958)Refutation found. Thanks to Tanya!
% 0.10/0.25  % SZS status Theorem for theBenchmark
% 0.10/0.25  % SZS output start Proof for theBenchmark
% See solution above
% 0.10/0.25  % (361958)------------------------------
% 0.10/0.25  % (361958)Version: Vampire 5.0.1 (Release build, commit 5ef7c2677 on 2026-07-16 16:54:09 +0200)
% 0.10/0.25  % (361958)Linked with Z3 4.14.0.0 3c47fd96cf5645d0c42b2c819d9e9a84380aa721 z3-4.8.4-9178-g3c47fd96c
% 0.10/0.25  % (361958)CaDiCaL version: 2.1.3
% 0.10/0.25  % (361958)Termination reason: Refutation
% 0.10/0.25  % (361958)Time elapsed: 0.002 s
% 0.10/0.25  % (361958)Peak memory usage: 12 MB
% 0.10/0.25  % (361958)Instructions burned: 5 (million)
% 0.10/0.25  % (361934)Success in time 0.035 s
% 0.10/0.25  % Vampire exiting
%------------------------------------------------------------------------------