%------------------------------------------------------------------------------
% File : Vampire-SAT---5.0.1
% Problem : SEV065^5 : TPTP v9.3.1. Released v4.0.0.
% Transfm : none
% Format : tptp:raw
% Command : run_vampire /export/starexec/sandbox2/benchmark/theBenchmark.p 300 SAT
% Computer : n017.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:38:56 AM UTC 2026
% Result : Theorem 0.24s 0.33s
% Output : Refutation 0.24s
% Verified :
% SZS Type : Refutation
% Derivation depth : 27
% Number of leaves : 5
% Syntax : Number of formulae : 76 ( 13 unt; 0 typ; 4 def)
% Number of atoms : 402 ( 189 equ; 0 cnn)
% Maximal formula atoms : 4 ( 5 avg)
% Number of connectives : 401 ( 74 ~; 105 |; 60 &; 154 @)
% ( 4 <=>; 4 =>; 0 <=; 0 <~>)
% Maximal formula depth : 8 ( 3 avg)
% Maximal term depth : 1 ( 1 avg)
% Number of types : 3 ( 2 usr)
% Number of type conns : 10 ( 10 >; 0 *; 0 +; 0 <<)
% Number of symbols : 20 ( 17 usr; 10 con; 0-4 aty)
% Number of variables : 35 ( 0 sgn 12 !; 3 ?; 35 :)
% Comments :
%------------------------------------------------------------------------------
thf(type_def_5,type,
b: $tType ).
thf(type_def_6,type,
a: $tType ).
thf(type_def_7,type,
sTfun: ( $tType * $tType ) > $tType ).
thf(func_def_3,type,
vOR: $o > $o > $o ).
thf(func_def_4,type,
vAND: $o > $o > $o ).
thf(func_def_5,type,
db1:
!>[X0: $tType] : X0 ).
thf(func_def_6,type,
db0:
!>[X0: $tType] : X0 ).
thf(func_def_7,type,
vNOT: $o > $o ).
thf(func_def_8,type,
vEQ:
!>[X0: $tType] : ( X0 > X0 > $o ) ).
thf(func_def_9,type,
vLAM:
!>[X0: $tType,X1: $tType] : ( X1 > X0 > X1 ) ).
thf(func_def_10,type,
sK0: b ).
thf(func_def_11,type,
sK1: a ).
thf(func_def_12,type,
sK2: b > a > $o ).
thf(func_def_13,type,
sK3: b ).
thf(func_def_14,type,
sK4: a ).
thf(f1,conjecture,
! [X0: b,X1: a,X2: b > a > $o] :
( ( X2 @ X0 @ X1 )
=> ( ( ^ [X3: b,X4: a] :
( ( ( X4 = X1 )
& ( X3 = X0 ) )
| ( ~ ( ( X4 = X1 )
& ( X3 = X0 ) )
& ( X2 @ X3 @ X4 ) ) ) )
= X2 ) ),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p',cTHM177_pme) ).
thf(f2,negated_conjecture,
~ ! [X0: b,X1: a,X2: b > a > $o] :
( ( X2 @ X0 @ X1 )
=> ( ( ^ [X3: b,X4: a] :
( ( ( X4 = X1 )
& ( X3 = X0 ) )
| ( ~ ( ( X4 = X1 )
& ( X3 = X0 ) )
& ( X2 @ X3 @ X4 ) ) ) )
= X2 ) ),
inference(negated_conjecture,[status(cth)],[f1]) ).
thf(f3,plain,
~ ! [X0: b,X1: a,X2: b > a > $o] :
( ( X2 @ X0 @ X1 )
=> ( ( ^ [X3: b,X4: a] :
( ( ( X4 = X1 )
& ( X3 = X0 ) )
| ( ~ ( ( X4 = X1 )
& ( X3 = X0 ) )
& ( X2 @ X3 @ X4 ) ) ) )
= X2 ) ),
inference(rectify,[],[f2]) ).
thf(f4,plain,
~ ! [X0: b,X1: a,X2: b > a > $o] :
( ( ( X2 @ X0 @ X1 )
= $true )
=> ( ( ^ [Y0: b,Y1: a] :
( ( ( X2 @ Y0 @ Y1 )
& ~ ( ( X0 = Y0 )
& ( X1 = Y1 ) ) )
| ( ( X0 = Y0 )
& ( X1 = Y1 ) ) ) )
= X2 ) ),
inference(fool_elimination,[],[f3]) ).
thf(f5,plain,
? [X0: b,X1: a,X2: b > a > $o] :
( ( ( ^ [Y0: b,Y1: a] :
( ( ( X2 @ Y0 @ Y1 )
& ~ ( ( X0 = Y0 )
& ( X1 = Y1 ) ) )
| ( ( X0 = Y0 )
& ( X1 = Y1 ) ) ) )
!= X2 )
& ( ( X2 @ X0 @ X1 )
= $true ) ),
inference(ennf_transformation,[],[f4]) ).
thf(f6,plain,
( ( sK2
!= ( ^ [Y0: b,Y1: a] :
( ( ( sK2 @ Y0 @ Y1 )
& ~ ( ( sK0 = Y0 )
& ( sK1 = Y1 ) ) )
| ( ( sK0 = Y0 )
& ( sK1 = Y1 ) ) ) ) )
& ( $true
= ( sK2 @ sK0 @ sK1 ) ) ),
inference(skolemize,[status(esa),new_symbols(skolem,[sK0,sK1,sK2]),skolemize(X0,sK0),skolemize(X1,sK1),skolemize(X2,sK2)],[f5]) ).
thf(f7,plain,
( $true
= ( sK2 @ sK0 @ sK1 ) ),
inference(cnf_transformation,[],[f6]) ).
thf(f8,plain,
( sK2
!= ( ^ [Y0: b,Y1: a] :
( ( ( sK2 @ Y0 @ Y1 )
& ~ ( ( sK0 = Y0 )
& ( sK1 = Y1 ) ) )
| ( ( sK0 = Y0 )
& ( sK1 = Y1 ) ) ) ) ),
inference(cnf_transformation,[],[f6]) ).
thf(f11,plain,
( ( sK2 @ sK3 )
!= ( ^ [Y0: b,Y1: a] :
( ( ( sK2 @ Y0 @ Y1 )
& ~ ( ( sK0 = Y0 )
& ( sK1 = Y1 ) ) )
| ( ( sK0 = Y0 )
& ( sK1 = Y1 ) ) )
@ sK3 ) ),
inference(negative_extensionality,[],[f8]) ).
thf(f12,plain,
( ( sK2 @ sK3 )
!= ( ^ [Y0: a] :
( ( ( sK2 @ sK3 @ Y0 )
& ~ ( ( sK0 = sK3 )
& ( sK1 = Y0 ) ) )
| ( ( sK0 = sK3 )
& ( sK1 = Y0 ) ) ) ) ),
inference(beta-eta_normalization,[],[f11]) ).
thf(f13,plain,
( ( sK2 @ sK3 @ sK4 )
!= ( ^ [Y0: a] :
( ( ( sK2 @ sK3 @ Y0 )
& ~ ( ( sK0 = sK3 )
& ( sK1 = Y0 ) ) )
| ( ( sK0 = sK3 )
& ( sK1 = Y0 ) ) )
@ sK4 ) ),
inference(negative_extensionality,[],[f12]) ).
thf(f14,plain,
( ( $true
= ( sK2 @ sK3 @ sK4 ) )
| ( $true
= ( ^ [Y0: a] :
( ( ( sK2 @ sK3 @ Y0 )
& ~ ( ( sK0 = sK3 )
& ( sK1 = Y0 ) ) )
| ( ( sK0 = sK3 )
& ( sK1 = Y0 ) ) )
@ sK4 ) ) ),
inference(xor_proxy_clausification,[],[f13]) ).
thf(f15,plain,
( ( $false
= ( sK2 @ sK3 @ sK4 ) )
| ( $false
= ( ^ [Y0: a] :
( ( ( sK2 @ sK3 @ Y0 )
& ~ ( ( sK0 = sK3 )
& ( sK1 = Y0 ) ) )
| ( ( sK0 = sK3 )
& ( sK1 = Y0 ) ) )
@ sK4 ) ) ),
inference(xor_proxy_clausification,[],[f13]) ).
thf(f16,plain,
( ( $false
= ( sK2 @ sK3 @ sK4 ) )
| ( $false
= ( ( ( sK2 @ sK3 @ sK4 )
& ~ ( ( sK0 = sK3 )
& ( sK1 = sK4 ) ) )
| ( ( sK0 = sK3 )
& ( sK1 = sK4 ) ) ) ) ),
inference(beta-eta_normalization,[],[f15]) ).
thf(f17,plain,
( ( $false
= ( sK2 @ sK3 @ sK4 ) )
| ( $false
= ( ( sK0 = sK3 )
& ( sK1 = sK4 ) ) ) ),
inference(or_proxy_clausification,[],[f16]) ).
thf(f18,plain,
( ( $false
= ( sK2 @ sK3 @ sK4 ) )
| ( $false
= ( ( sK2 @ sK3 @ sK4 )
& ~ ( ( sK0 = sK3 )
& ( sK1 = sK4 ) ) ) ) ),
inference(or_proxy_clausification,[],[f16]) ).
thf(f19,plain,
( ( $false
= ( sK2 @ sK3 @ sK4 ) )
| ( $false
= ( ~ ( ( sK0 = sK3 )
& ( sK1 = sK4 ) ) ) )
| ( $false
= ( sK2 @ sK3 @ sK4 ) ) ),
inference(and_proxy_clausification,[],[f18]) ).
thf(f20,plain,
( ( $false
= ( sK2 @ sK3 @ sK4 ) )
| ( $true
= ( ( sK0 = sK3 )
& ( sK1 = sK4 ) ) )
| ( $false
= ( sK2 @ sK3 @ sK4 ) ) ),
inference(not_proxy_clausification,[],[f19]) ).
thf(f21,plain,
( ( $false
= ( sK2 @ sK3 @ sK4 ) )
| ( $true
= ( sK1 = sK4 ) )
| ( $false
= ( sK2 @ sK3 @ sK4 ) ) ),
inference(and_proxy_clausification,[],[f20]) ).
thf(f22,plain,
( ( $false
= ( sK2 @ sK3 @ sK4 ) )
| ( $true
= ( sK0 = sK3 ) )
| ( $false
= ( sK2 @ sK3 @ sK4 ) ) ),
inference(and_proxy_clausification,[],[f20]) ).
thf(f23,plain,
( ( $false
= ( sK2 @ sK3 @ sK4 ) )
| ( sK0 = sK3 )
| ( $false
= ( sK2 @ sK3 @ sK4 ) ) ),
inference(equality_proxy_clausification,[],[f22]) ).
thf(f24,plain,
( ( $false
= ( sK2 @ sK3 @ sK4 ) )
| ( sK0 = sK3 ) ),
inference(duplicate_literal_removal,[],[f23]) ).
thf(f25,plain,
( ( $false
= ( sK2 @ sK3 @ sK4 ) )
| ( sK1 = sK4 )
| ( $false
= ( sK2 @ sK3 @ sK4 ) ) ),
inference(equality_proxy_clausification,[],[f21]) ).
thf(f26,plain,
( ( $false
= ( sK2 @ sK3 @ sK4 ) )
| ( sK1 = sK4 ) ),
inference(duplicate_literal_removal,[],[f25]) ).
thf(f27,plain,
( ( $false
= ( sK2 @ sK3 @ sK4 ) )
| ( $false
= ( sK1 = sK4 ) )
| ( $false
= ( sK0 = sK3 ) ) ),
inference(and_proxy_clausification,[],[f17]) ).
thf(f28,plain,
( ( $false
= ( sK2 @ sK3 @ sK4 ) )
| ( sK1 != sK4 )
| ( $false
= ( sK0 = sK3 ) ) ),
inference(equality_proxy_clausification,[],[f27]) ).
thf(f29,plain,
( ( $false
= ( sK2 @ sK3 @ sK4 ) )
| ( sK1 != sK4 )
| ( sK0 != sK3 ) ),
inference(equality_proxy_clausification,[],[f28]) ).
thf(f30,plain,
( ( $true
= ( sK2 @ sK3 @ sK4 ) )
| ( $true
= ( ( ( sK2 @ sK3 @ sK4 )
& ~ ( ( sK0 = sK3 )
& ( sK1 = sK4 ) ) )
| ( ( sK0 = sK3 )
& ( sK1 = sK4 ) ) ) ) ),
inference(beta-eta_normalization,[],[f14]) ).
thf(f31,plain,
( ( $true
= ( sK2 @ sK3 @ sK4 ) )
| ( $true
= ( ( sK0 = sK3 )
& ( sK1 = sK4 ) ) )
| ( $true
= ( ( sK2 @ sK3 @ sK4 )
& ~ ( ( sK0 = sK3 )
& ( sK1 = sK4 ) ) ) ) ),
inference(or_proxy_clausification,[],[f30]) ).
thf(f32,plain,
( ( $true
= ( sK2 @ sK3 @ sK4 ) )
| ( $true
= ( sK1 = sK4 ) )
| ( $true
= ( ( sK2 @ sK3 @ sK4 )
& ~ ( ( sK0 = sK3 )
& ( sK1 = sK4 ) ) ) ) ),
inference(and_proxy_clausification,[],[f31]) ).
thf(f33,plain,
( ( $true
= ( sK2 @ sK3 @ sK4 ) )
| ( $true
= ( sK0 = sK3 ) )
| ( $true
= ( ( sK2 @ sK3 @ sK4 )
& ~ ( ( sK0 = sK3 )
& ( sK1 = sK4 ) ) ) ) ),
inference(and_proxy_clausification,[],[f31]) ).
thf(f34,plain,
( ( $true
= ( sK2 @ sK3 @ sK4 ) )
| ( sK0 = sK3 )
| ( $true
= ( ( sK2 @ sK3 @ sK4 )
& ~ ( ( sK0 = sK3 )
& ( sK1 = sK4 ) ) ) ) ),
inference(equality_proxy_clausification,[],[f33]) ).
thf(f36,plain,
( ( $true
= ( sK2 @ sK3 @ sK4 ) )
| ( sK0 = sK3 )
| ( $true
= ( sK2 @ sK3 @ sK4 ) ) ),
inference(and_proxy_clausification,[],[f34]) ).
thf(f37,plain,
( ( $true
= ( sK2 @ sK3 @ sK4 ) )
| ( sK0 = sK3 ) ),
inference(duplicate_literal_removal,[],[f36]) ).
thf(f42,plain,
( ( $true
= ( sK2 @ sK3 @ sK4 ) )
| ( sK1 = sK4 )
| ( $true
= ( ( sK2 @ sK3 @ sK4 )
& ~ ( ( sK0 = sK3 )
& ( sK1 = sK4 ) ) ) ) ),
inference(equality_proxy_clausification,[],[f32]) ).
thf(f44,plain,
( ( $true
= ( sK2 @ sK3 @ sK4 ) )
| ( sK1 = sK4 )
| ( $true
= ( sK2 @ sK3 @ sK4 ) ) ),
inference(and_proxy_clausification,[],[f42]) ).
thf(f45,plain,
( ( $true
= ( sK2 @ sK3 @ sK4 ) )
| ( sK1 = sK4 ) ),
inference(duplicate_literal_removal,[],[f44]) ).
thf(f51,definition,
( spl5_1
<=> ( sK0 = sK3 ) ),
introduced(definition,[new_symbols(definition,[spl5_1])],[avatar_definition]) ).
thf(f52,plain,
( ( sK0 != sK3 )
| spl5_1 ),
inference(avatar_component_clause,[],[f51]) ).
thf(f53,plain,
( ( sK0 = sK3 )
| ~ spl5_1 ),
inference(avatar_component_clause,[],[f51]) ).
thf(f55,definition,
( spl5_2
<=> ( $false
= ( sK2 @ sK3 @ sK4 ) ) ),
introduced(definition,[new_symbols(definition,[spl5_2])],[avatar_definition]) ).
thf(f57,plain,
( ( $false
= ( sK2 @ sK3 @ sK4 ) )
| ~ spl5_2 ),
inference(avatar_component_clause,[],[f55]) ).
thf(f58,plain,
( spl5_1
| spl5_2 ),
inference(avatar_split_clause,[],[f24,f55,f51]) ).
thf(f59,plain,
( ( $false
= ( sK2 @ sK0 @ sK4 ) )
| ( sK1 = sK4 )
| ~ spl5_1 ),
inference(forward_demodulation,[],[f26,f53]) ).
thf(f60,plain,
( ( $true
= ( sK2 @ sK0 @ sK4 ) )
| ( sK1 = sK4 )
| ~ spl5_1 ),
inference(forward_demodulation,[],[f45,f53]) ).
thf(f62,definition,
( spl5_3
<=> ( sK1 = sK4 ) ),
introduced(definition,[new_symbols(definition,[spl5_3])],[avatar_definition]) ).
thf(f63,plain,
( ( sK1 != sK4 )
| spl5_3 ),
inference(avatar_component_clause,[],[f62]) ).
thf(f64,plain,
( ( sK1 = sK4 )
| ~ spl5_3 ),
inference(avatar_component_clause,[],[f62]) ).
thf(f66,definition,
( spl5_4
<=> ( $false
= ( sK2 @ sK0 @ sK4 ) ) ),
introduced(definition,[new_symbols(definition,[spl5_4])],[avatar_definition]) ).
thf(f68,plain,
( ( $false
= ( sK2 @ sK0 @ sK4 ) )
| ~ spl5_4 ),
inference(avatar_component_clause,[],[f66]) ).
thf(f69,plain,
( spl5_3
| spl5_4
| ~ spl5_1 ),
inference(avatar_split_clause,[],[f59,f51,f66,f62]) ).
thf(f70,plain,
( ( $false
= ( sK2 @ sK3 @ sK4 ) )
| ( sK0 != sK3 )
| ~ spl5_3 ),
inference(forward_subsumption_resolution,[],[f29,f64]) ).
thf(f71,plain,
( ( $false
= ( sK2 @ sK3 @ sK4 ) )
| ~ spl5_1
| ~ spl5_3 ),
inference(forward_subsumption_resolution,[],[f70,f53]) ).
thf(f72,plain,
( ( $false
= ( sK2 @ sK0 @ sK4 ) )
| ~ spl5_1
| ~ spl5_3 ),
inference(forward_demodulation,[],[f71,f53]) ).
thf(f73,plain,
( ( ( sK2 @ sK0 @ sK1 )
= $false )
| ~ spl5_1
| ~ spl5_3 ),
inference(forward_demodulation,[],[f72,f64]) ).
thf(f74,plain,
( ( $true = $false )
| ~ spl5_1
| ~ spl5_3 ),
inference(constrained_superposition,[],[f73,f7]) ).
thf(f78,plain,
( $false
| ~ spl5_1
| ~ spl5_3 ),
inference(trivial_inequality_removal,[],[f74]) ).
thf(f79,plain,
( ~ spl5_1
| ~ spl5_3 ),
inference(avatar_contradiction_clause,[],[f78]) ).
thf(f82,plain,
( ( $true
= ( sK2 @ sK0 @ sK4 ) )
| ~ spl5_1
| spl5_3 ),
inference(forward_subsumption_resolution,[],[f60,f63]) ).
thf(f83,plain,
( ( $true = $false )
| ~ spl5_1
| spl5_3
| ~ spl5_4 ),
inference(forward_demodulation,[],[f82,f68]) ).
thf(f84,plain,
( $false
| ~ spl5_1
| spl5_3
| ~ spl5_4 ),
inference(trivial_inequality_removal,[],[f83]) ).
thf(f85,plain,
( ~ spl5_1
| spl5_3
| ~ spl5_4 ),
inference(avatar_contradiction_clause,[],[f84]) ).
thf(f103,plain,
( ( $true
= ( sK2 @ sK3 @ sK4 ) )
| spl5_1 ),
inference(forward_subsumption_resolution,[],[f37,f52]) ).
thf(f104,plain,
( ( $true = $false )
| spl5_1
| ~ spl5_2 ),
inference(forward_demodulation,[],[f103,f57]) ).
thf(f105,plain,
( $false
| spl5_1
| ~ spl5_2 ),
inference(trivial_inequality_removal,[],[f104]) ).
thf(f106,plain,
( spl5_1
| ~ spl5_2 ),
inference(avatar_contradiction_clause,[],[f105]) ).
cnf(s16,plain,
( spl5_1
| spl5_2 ),
inference(sat_conversion,[],[f58]) ).
cnf(s22,plain,
( ~ spl5_1
| spl5_3
| spl5_4 ),
inference(sat_conversion,[],[f69]) ).
cnf(s28,plain,
( ~ spl5_1
| ~ spl5_3 ),
inference(sat_conversion,[],[f79]) ).
cnf(s35,plain,
( ~ spl5_1
| spl5_3
| ~ spl5_4 ),
inference(sat_conversion,[],[f85]) ).
cnf(s53,plain,
( spl5_1
| ~ spl5_2 ),
inference(sat_conversion,[],[f106]) ).
cnf(s54,plain,
spl5_1,
inference(rat,[],[s16,s53]) ).
cnf(s55,plain,
~ spl5_3,
inference(rat,[],[s28,s54]) ).
cnf(s57,plain,
~ spl5_4,
inference(rat,[],[s35,s54,s55]) ).
cnf(s58,plain,
$false,
inference(rat,[],[s22,s54,s57,s55]) ).
thf(f107,plain,
$false,
inference(avatar_sat_refutation,[],[s58]) ).
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.00/0.04 % Problem : SEV065^5 : TPTP v9.3.1. Released v4.0.0.
% 0.00/0.07 % Command : run_vampire /export/starexec/sandbox2/benchmark/theBenchmark.p 300 SAT
% 0.10/0.25 % Computer : n017.cluster.edu
% 0.10/0.25 % Model : x86_64 x86_64
% 0.10/0.25 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.10/0.25 % Memory : 8046.5625MB
% 0.10/0.25 % OS : Linux 6.8.0-71-generic
% 0.10/0.25 % CPULimit : 300
% 0.10/0.25 % WCLimit : 300
% 0.10/0.25 % DateTime : Tue Sep 29 15:01:37 UTC 2026
% 0.10/0.25 % CPUTime :
% 0.10/0.25 Running run_vampire /export/starexec/sandbox2/benchmark/theBenchmark.p 300 SAT
% 0.24/0.28 Running first-order model finding
% 0.24/0.28 Running: /export/starexec/sandbox2/solver/bin/vampire-ho --input_syntax tptp --output_axiom_names on --mode casc --intent sat -m 16384 --cores 7 -t 300 /export/starexec/sandbox2/benchmark/theBenchmark.p
% 0.24/0.33 % (439273)Will run a generic schedule for satisfiability detection.
% 0.24/0.33 % (439293)dis+10_161_sil=256000:plsq=on:plsqr=61199697,1048576:gs=on:alpa=true:sac=on:slsq=on:cn=on:random_seed=437818009:i=88024:add=on:rawr=on_2999 on theBenchmark for (2999ds/88024Mi)
% 0.24/0.33 % (439293) found proof, printing to "/export/starexec/sandbox2/tmp/vampire-proof-439273-439293"...
% 0.24/0.33 % (439293)...printing done.
% 0.24/0.33 % (439292)% WARNING: option uhcvi not known.
% 0.24/0.33 % (439293)Refutation found. Thanks to Tanya!
% 0.24/0.33 % SZS status Theorem for theBenchmark
% 0.24/0.33 % SZS output start Proof for theBenchmark
% See solution above
% 0.24/0.33 % (439293)------------------------------
% 0.24/0.33 % (439293)Version: Vampire 5.0.1 (Release build, commit 5ef7c2677 on 2026-07-16 16:54:09 +0200)
% 0.24/0.33 % (439293)Linked with Z3 4.14.0.0 3c47fd96cf5645d0c42b2c819d9e9a84380aa721 z3-4.8.4-9178-g3c47fd96c
% 0.24/0.33 % (439293)CaDiCaL version: 2.1.3
% 0.24/0.33 % (439293)Termination reason: Refutation
% 0.24/0.33 % (439293)Time elapsed: 0.003 s
% 0.24/0.33 % (439293)Peak memory usage: 12 MB
% 0.24/0.33 % (439293)Instructions burned: 7 (million)
% 0.24/0.33 % (439273)Success in time 0.039 s
% 0.24/0.33 % Vampire exiting
%------------------------------------------------------------------------------