%------------------------------------------------------------------------------
% File : Vampire---5.0.1
% Problem : SET722+4 : TPTP v9.3.1. Bugfixed v2.2.1.
% Transfm : none
% Format : tptp:raw
% Command : run_vampire /export/starexec/sandbox/benchmark/theBenchmark.p 300 THM
% Computer : n006.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 : Tue Sep 29 12:41:44 PM UTC 2026
% Result : Theorem 2.73s 1.29s
% Output : Refutation 3.51s
% Verified :
% SZS Type : Refutation
% Derivation depth : 14
% Number of leaves : 6
% Syntax : Number of formulae : 54 ( 9 unt; 3 def)
% Number of atoms : 187 ( 0 equ)
% Maximal formula atoms : 10 ( 3 avg)
% Number of connectives : 223 ( 90 ~; 81 |; 40 &)
% ( 8 <=>; 4 =>; 0 <=; 0 <~>)
% Maximal formula depth : 16 ( 6 avg)
% Maximal term depth : 4 ( 1 avg)
% Number of predicates : 8 ( 7 usr; 4 prp; 0-3 aty)
% Number of functors : 9 ( 9 usr; 5 con; 0-5 aty)
% Number of variables : 138 ( 0 sgn 117 !; 21 ?)
% Comments :
%------------------------------------------------------------------------------
fof(f14,axiom,
! [X0,X1,X2,X3,X4,X5,X6] :
( ( member(X5,X2)
& member(X6,X4) )
=> ( apply(compose_function(X0,X1,X2,X3,X4),X5,X6)
<=> ? [X7] :
( member(X7,X3)
& apply(X1,X5,X7)
& apply(X0,X7,X6) ) ) ),
file('/export/starexec/sandbox/benchmark/theBenchmark.p',compose_function) ).
fof(f18,axiom,
! [X0,X1,X2] :
( surjective(X0,X1,X2)
<=> ! [X3] :
( member(X3,X2)
=> ? [X4] :
( member(X4,X1)
& apply(X0,X4,X3) ) ) ),
file('/export/starexec/sandbox/benchmark/theBenchmark.p',surjective) ).
fof(f29,conjecture,
! [X0,X1,X2,X3,X4] :
( ( maps(X0,X2,X3)
& maps(X1,X3,X4)
& surjective(compose_function(X1,X0,X2,X3,X4),X2,X4) )
=> surjective(X1,X3,X4) ),
file('/export/starexec/sandbox/benchmark/theBenchmark.p',thII13) ).
fof(f30,negated_conjecture,
~ ! [X0,X1,X2,X3,X4] :
( ( maps(X0,X2,X3)
& maps(X1,X3,X4)
& surjective(compose_function(X1,X0,X2,X3,X4),X2,X4) )
=> surjective(X1,X3,X4) ),
inference(negated_conjecture,[status(cth)],[f29]) ).
fof(f33,plain,
? [X0,X1,X2,X3,X4] :
( ~ surjective(X1,X3,X4)
& maps(X0,X2,X3)
& maps(X1,X3,X4)
& surjective(compose_function(X1,X0,X2,X3,X4),X2,X4) ),
inference(ennf_transformation,[],[f30]) ).
fof(f34,plain,
? [X0,X1,X2,X3,X4] :
( ~ surjective(X1,X3,X4)
& maps(X0,X2,X3)
& maps(X1,X3,X4)
& surjective(compose_function(X1,X0,X2,X3,X4),X2,X4) ),
inference(flattening,[],[f33]) ).
fof(f37,plain,
! [X0,X1,X2,X3,X4,X5,X6] :
( ( apply(compose_function(X0,X1,X2,X3,X4),X5,X6)
<=> ? [X7] :
( member(X7,X3)
& apply(X1,X5,X7)
& apply(X0,X7,X6) ) )
| ~ member(X5,X2)
| ~ member(X6,X4) ),
inference(ennf_transformation,[],[f14]) ).
fof(f38,plain,
! [X0,X1,X2,X3,X4,X5,X6] :
( ( apply(compose_function(X0,X1,X2,X3,X4),X5,X6)
<=> ? [X7] :
( member(X7,X3)
& apply(X1,X5,X7)
& apply(X0,X7,X6) ) )
| ~ member(X5,X2)
| ~ member(X6,X4) ),
inference(flattening,[],[f37]) ).
fof(f39,plain,
! [X0,X1,X2] :
( surjective(X0,X1,X2)
<=> ! [X3] :
( ? [X4] :
( member(X4,X1)
& apply(X0,X4,X3) )
| ~ member(X3,X2) ) ),
inference(ennf_transformation,[],[f18]) ).
fof(f40,plain,
( ~ surjective(sK1,sK3,sK4)
& maps(sK0,sK2,sK3)
& maps(sK1,sK3,sK4)
& surjective(compose_function(sK1,sK0,sK2,sK3,sK4),sK2,sK4) ),
inference(skolemize,[status(esa),new_symbols(skolem,[sK0,sK1,sK2,sK3,sK4]),skolemize(X0,sK0),skolemize(X1,sK1),skolemize(X2,sK2),skolemize(X3,sK3),skolemize(X4,sK4)],[f34]) ).
fof(f42,plain,
! [X0,X1,X2,X3,X4,X5,X6] :
( ( ( apply(compose_function(X0,X1,X2,X3,X4),X5,X6)
| ! [X7] :
( ~ member(X7,X3)
| ~ apply(X1,X5,X7)
| ~ apply(X0,X7,X6) ) )
& ( ? [X7] :
( member(X7,X3)
& apply(X1,X5,X7)
& apply(X0,X7,X6) )
| ~ apply(compose_function(X0,X1,X2,X3,X4),X5,X6) ) )
| ~ member(X5,X2)
| ~ member(X6,X4) ),
inference(nnf_transformation,[],[f38]) ).
fof(f43,plain,
! [X0,X1,X2,X3,X4,X5,X6] :
( ( ( apply(compose_function(X0,X1,X2,X3,X4),X5,X6)
| ! [X7] :
( ~ member(X7,X3)
| ~ apply(X1,X5,X7)
| ~ apply(X0,X7,X6) ) )
& ( ? [X8] :
( member(X8,X3)
& apply(X1,X5,X8)
& apply(X0,X8,X6) )
| ~ apply(compose_function(X0,X1,X2,X3,X4),X5,X6) ) )
| ~ member(X5,X2)
| ~ member(X6,X4) ),
inference(rectify,[],[f42]) ).
fof(f44,plain,
! [X0,X1,X2,X3,X4,X5,X6] :
( ( ( apply(compose_function(X0,X1,X2,X3,X4),X5,X6)
| ! [X7] :
( ~ member(X7,X3)
| ~ apply(X1,X5,X7)
| ~ apply(X0,X7,X6) ) )
& ( ( member(sK6(X0,X1,X3,X5,X6),X3)
& apply(X1,X5,sK6(X0,X1,X3,X5,X6))
& apply(X0,sK6(X0,X1,X3,X5,X6),X6) )
| ~ apply(compose_function(X0,X1,X2,X3,X4),X5,X6) ) )
| ~ member(X5,X2)
| ~ member(X6,X4) ),
inference(skolemize,[status(esa),new_symbols(skolem,[sK6]),skolemize(X8,sK6(X0,X1,X3,X5,X6))],[f43]) ).
fof(f45,plain,
! [X0,X1,X2] :
( ( surjective(X0,X1,X2)
| ? [X3] :
( ! [X4] :
( ~ member(X4,X1)
| ~ apply(X0,X4,X3) )
& member(X3,X2) ) )
& ( ! [X3] :
( ? [X4] :
( member(X4,X1)
& apply(X0,X4,X3) )
| ~ member(X3,X2) )
| ~ surjective(X0,X1,X2) ) ),
inference(nnf_transformation,[],[f39]) ).
fof(f46,plain,
! [X0,X1,X2] :
( ( surjective(X0,X1,X2)
| ? [X3] :
( ! [X4] :
( ~ member(X4,X1)
| ~ apply(X0,X4,X3) )
& member(X3,X2) ) )
& ( ! [X5] :
( ? [X6] :
( member(X6,X1)
& apply(X0,X6,X5) )
| ~ member(X5,X2) )
| ~ surjective(X0,X1,X2) ) ),
inference(rectify,[],[f45]) ).
fof(f47,plain,
! [X0,X1,X2] :
( ( surjective(X0,X1,X2)
| ( ! [X4] :
( ~ member(X4,X1)
| ~ apply(X0,X4,sK7(X0,X1,X2)) )
& member(sK7(X0,X1,X2),X2) ) )
& ( ! [X5] :
( ( member(sK8(X0,X1,X5),X1)
& apply(X0,sK8(X0,X1,X5),X5) )
| ~ member(X5,X2) )
| ~ surjective(X0,X1,X2) ) ),
inference(skolemize,[status(esa),new_symbols(skolem,[sK7,sK8]),skolemize(X3,sK7(X0,X1,X2)),skolemize(X6,sK8(X0,X1,X5))],[f46]) ).
fof(f51,plain,
surjective(compose_function(sK1,sK0,sK2,sK3,sK4),sK2,sK4),
inference(cnf_transformation,[],[f40]) ).
fof(f54,plain,
~ surjective(sK1,sK3,sK4),
inference(cnf_transformation,[],[f40]) ).
fof(f58,plain,
! [X2,X3,X0,X1,X6,X4,X5] :
( apply(X0,sK6(X0,X1,X3,X5,X6),X6)
| ~ apply(compose_function(X0,X1,X2,X3,X4),X5,X6)
| ~ member(X5,X2)
| ~ member(X6,X4) ),
inference(cnf_transformation,[],[f44]) ).
fof(f60,plain,
! [X2,X3,X0,X1,X6,X4,X5] :
( ~ apply(compose_function(X0,X1,X2,X3,X4),X5,X6)
| member(sK6(X0,X1,X3,X5,X6),X3)
| ~ member(X5,X2)
| ~ member(X6,X4) ),
inference(cnf_transformation,[],[f44]) ).
fof(f62,plain,
! [X2,X0,X1,X5] :
( ~ surjective(X0,X1,X2)
| ~ member(X5,X2)
| apply(X0,sK8(X0,X1,X5),X5) ),
inference(cnf_transformation,[],[f47]) ).
fof(f63,plain,
! [X2,X0,X1,X5] :
( ~ surjective(X0,X1,X2)
| ~ member(X5,X2)
| member(sK8(X0,X1,X5),X1) ),
inference(cnf_transformation,[],[f47]) ).
fof(f64,plain,
! [X2,X0,X1] :
( surjective(X0,X1,X2)
| member(sK7(X0,X1,X2),X2) ),
inference(cnf_transformation,[],[f47]) ).
fof(f65,plain,
! [X2,X0,X1,X4] :
( surjective(X0,X1,X2)
| ~ member(X4,X1)
| ~ apply(X0,X4,sK7(X0,X1,X2)) ),
inference(cnf_transformation,[],[f47]) ).
fof(f80,plain,
member(sK7(sK1,sK3,sK4),sK4),
inference(resolution,[],[f64,f54]) ).
fof(f83,plain,
! [X0] :
( member(sK8(compose_function(sK1,sK0,sK2,sK3,sK4),sK2,X0),sK2)
| ~ member(X0,sK4) ),
inference(resolution,[],[f63,f51]) ).
fof(f87,plain,
! [X0] :
( apply(compose_function(sK1,sK0,sK2,sK3,sK4),sK8(compose_function(sK1,sK0,sK2,sK3,sK4),sK2,X0),X0)
| ~ member(X0,sK4) ),
inference(resolution,[],[f62,f51]) ).
fof(f89,plain,
! [X0] :
( ~ apply(sK1,X0,sK7(sK1,sK3,sK4))
| ~ member(X0,sK3) ),
inference(resolution,[],[f65,f54]) ).
fof(f92,plain,
! [X2,X3,X0,X1,X4] :
( ~ apply(compose_function(sK1,X0,X1,X2,X3),X4,sK7(sK1,sK3,sK4))
| ~ member(X4,X1)
| ~ member(sK7(sK1,sK3,sK4),X3)
| ~ member(sK6(sK1,X0,X2,X4,sK7(sK1,sK3,sK4)),sK3) ),
inference(resolution,[],[f58,f89]) ).
fof(f94,plain,
! [X0] :
( ~ member(X0,sK4)
| member(sK6(sK1,sK0,sK3,sK8(compose_function(sK1,sK0,sK2,sK3,sK4),sK2,X0),X0),sK3)
| ~ member(sK8(compose_function(sK1,sK0,sK2,sK3,sK4),sK2,X0),sK2)
| ~ member(X0,sK4) ),
inference(resolution,[],[f87,f60]) ).
fof(f95,plain,
! [X0] :
( member(sK6(sK1,sK0,sK3,sK8(compose_function(sK1,sK0,sK2,sK3,sK4),sK2,X0),X0),sK3)
| ~ member(X0,sK4)
| ~ member(sK8(compose_function(sK1,sK0,sK2,sK3,sK4),sK2,X0),sK2) ),
inference(duplicate_literal_removal,[],[f94]) ).
fof(f97,plain,
( ~ member(sK8(compose_function(sK1,sK0,sK2,sK3,sK4),sK2,sK7(sK1,sK3,sK4)),sK2)
| ~ member(sK7(sK1,sK3,sK4),sK4)
| ~ member(sK6(sK1,sK0,sK3,sK8(compose_function(sK1,sK0,sK2,sK3,sK4),sK2,sK7(sK1,sK3,sK4)),sK7(sK1,sK3,sK4)),sK3)
| ~ member(sK7(sK1,sK3,sK4),sK4) ),
inference(resolution,[],[f92,f87]) ).
fof(f99,plain,
( ~ member(sK8(compose_function(sK1,sK0,sK2,sK3,sK4),sK2,sK7(sK1,sK3,sK4)),sK2)
| ~ member(sK7(sK1,sK3,sK4),sK4)
| ~ member(sK6(sK1,sK0,sK3,sK8(compose_function(sK1,sK0,sK2,sK3,sK4),sK2,sK7(sK1,sK3,sK4)),sK7(sK1,sK3,sK4)),sK3) ),
inference(duplicate_literal_removal,[],[f97]) ).
fof(f101,definition,
( spl10_1
<=> member(sK6(sK1,sK0,sK3,sK8(compose_function(sK1,sK0,sK2,sK3,sK4),sK2,sK7(sK1,sK3,sK4)),sK7(sK1,sK3,sK4)),sK3) ),
introduced(definition,[new_symbols(definition,[spl10_1])],[avatar_definition]) ).
fof(f102,plain,
( ~ member(sK6(sK1,sK0,sK3,sK8(compose_function(sK1,sK0,sK2,sK3,sK4),sK2,sK7(sK1,sK3,sK4)),sK7(sK1,sK3,sK4)),sK3)
| spl10_1 ),
inference(avatar_component_clause,[],[f101]) ).
fof(f104,definition,
( spl10_2
<=> member(sK7(sK1,sK3,sK4),sK4) ),
introduced(definition,[new_symbols(definition,[spl10_2])],[avatar_definition]) ).
fof(f105,plain,
( ~ member(sK7(sK1,sK3,sK4),sK4)
| spl10_2 ),
inference(avatar_component_clause,[],[f104]) ).
fof(f107,definition,
( spl10_3
<=> member(sK8(compose_function(sK1,sK0,sK2,sK3,sK4),sK2,sK7(sK1,sK3,sK4)),sK2) ),
introduced(definition,[new_symbols(definition,[spl10_3])],[avatar_definition]) ).
fof(f108,plain,
( ~ member(sK8(compose_function(sK1,sK0,sK2,sK3,sK4),sK2,sK7(sK1,sK3,sK4)),sK2)
| spl10_3 ),
inference(avatar_component_clause,[],[f107]) ).
fof(f109,plain,
( ~ spl10_1
| ~ spl10_2
| ~ spl10_3 ),
inference(avatar_split_clause,[],[f99,f107,f104,f101]) ).
fof(f110,plain,
( ~ member(sK7(sK1,sK3,sK4),sK4)
| ~ member(sK8(compose_function(sK1,sK0,sK2,sK3,sK4),sK2,sK7(sK1,sK3,sK4)),sK2)
| spl10_1 ),
inference(resolution,[],[f102,f95]) ).
fof(f111,plain,
( ~ spl10_3
| ~ spl10_2
| spl10_1 ),
inference(avatar_split_clause,[],[f110,f101,f104,f107]) ).
fof(f112,plain,
( $false
| spl10_2 ),
inference(resolution,[],[f105,f80]) ).
fof(f113,plain,
spl10_2,
inference(avatar_contradiction_clause,[],[f112]) ).
fof(f114,plain,
( ~ member(sK7(sK1,sK3,sK4),sK4)
| spl10_3 ),
inference(resolution,[],[f108,f83]) ).
fof(f115,plain,
( ~ spl10_2
| spl10_3 ),
inference(avatar_split_clause,[],[f114,f107,f104]) ).
cnf(s1,plain,
( ~ spl10_1
| ~ spl10_2
| ~ spl10_3 ),
inference(sat_conversion,[],[f109]) ).
cnf(s2,plain,
( spl10_1
| ~ spl10_2
| ~ spl10_3 ),
inference(sat_conversion,[],[f111]) ).
cnf(s3,plain,
spl10_2,
inference(sat_conversion,[],[f113]) ).
cnf(s4,plain,
( ~ spl10_2
| spl10_3 ),
inference(sat_conversion,[],[f115]) ).
cnf(s5,plain,
spl10_3,
inference(rat,[],[s4,s3]) ).
cnf(s6,plain,
spl10_1,
inference(rat,[],[s2,s5,s3]) ).
cnf(s7,plain,
$false,
inference(rat,[],[s1,s5,s3,s6]) ).
fof(f116,plain,
$false,
inference(avatar_sat_refutation,[],[s7]) ).
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.00/0.03 % Problem : SET722+4 : TPTP v9.3.1. Bugfixed v2.2.1.
% 0.00/0.05 % Command : run_vampire /export/starexec/sandbox/benchmark/theBenchmark.p 300 THM
% 0.12/0.38 % Computer : n006.cluster.edu
% 0.12/0.38 % Model : x86_64 x86_64
% 0.12/0.38 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.12/0.38 % Memory : 8046.5625MB
% 0.12/0.38 % OS : Linux 6.8.0-71-generic
% 0.12/0.38 % CPULimit : 300
% 0.12/0.38 % WCLimit : 300
% 0.12/0.38 % DateTime : Mon Sep 28 02:38:55 UTC 2026
% 0.12/0.38 % CPUTime :
% 0.12/0.38 Running run_vampire /export/starexec/sandbox/benchmark/theBenchmark.p 300 THM
% 0.12/0.42 Running first-order theorem proving
% 0.12/0.42 Running: /export/starexec/sandbox/solver/bin/vampire --input_syntax tptp --output_axiom_names on --mode casc -m 16384 --cores 7 -t 300 /export/starexec/sandbox/benchmark/theBenchmark.p
% 2.73/1.29 % (3534847)Detected formulas, will run a generic FOF schedule.
% 2.73/1.29 % (3534854)lrs+1010_1_anc=all:sfv=off:to=kbo:ncem=casc2026/models/loop7.pt:sil=128000:npcc=on:prc=on:sos=all:bsr=unit_only:sac=on:random_seed=4281154709:i=141695:sd=1:nm=32:gsp=on:ss=included_2999 on theBenchmark for (2999ds/141695Mi)
% 2.73/1.29 % (3534855)lrs+1010_1_to=lpo:sil=32000:sos=on:spb=goal_then_units:bce=on:random_seed=2744731806:i=109:sd=1:ins=1:gsp=on:ss=axioms_2999 on theBenchmark for (2999ds/109Mi)
% 2.73/1.29 % (3534853)lrs+11_1_ncem=casc2026/models/loop8.pt:sil=128000:npcc=on:lma=off:spb=units:urr=ec_only:bce=on:s2agt=64:updr=off:random_seed=2376601632:i=134677:sd=20:aac=none:nm=16:ss=included:sgt=10_2999 on theBenchmark for (2999ds/134677Mi)
% 2.73/1.29 % (3534856)dis-1010_2:3_sil=16000:sp=reverse_frequency:random_seed=2067403777:i=119:av=off:ss=axioms_2999 on theBenchmark for (2999ds/119Mi)
% 2.73/1.29 % (3534858)dis-21_1_sil=8000:lcm=predicate:random_seed=3306277464:st=5:avsq=on:i=129:avsqr=1,16:sd=3:aac=none:ep=RS:fsr=off:ss=included_2999 on theBenchmark for (2999ds/129Mi)
% 2.73/1.29 % (3534852)lrs+10_1_ncem=casc2026/models/loop8.pt:sil=128000:tgt=full:npcc=on:drc=off:sp=weighted_frequency:spb=goal:fd=preordered:foolp=on:random_seed=1097513089:i=141193_2999 on theBenchmark for (2999ds/141193Mi)
% 2.73/1.29 % (3534857)dis-1011_1_sil=16000:fde=unused:s2agt=70:random_seed=4245553832:s2a=on:i=139:gtg=position_2999 on theBenchmark for (2999ds/139Mi)
% 2.73/1.29 % (3534858)First to succeed.
% 2.73/1.29 % (3534858)Solution written to "/export/starexec/sandbox/tmp/vampire-proof-3534847"
% 2.73/1.29 % (3534855)Refutation not found, incomplete strategy
% 2.73/1.29 % (3534855)------------------------------
% 2.73/1.29 % (3534855)Version: Vampire 5.0.1 (Release build, commit ea8961452 on 2026-07-16 15:14:34 +0200)
% 2.73/1.29 % (3534855)Linked with Z3 4.14.0.0 3c47fd96cf5645d0c42b2c819d9e9a84380aa721 z3-4.8.4-9178-g3c47fd96c
% 2.73/1.29 % (3534855)CaDiCaL version: 2.1.3
% 2.73/1.29 % (3534855)Termination reason: Refutation not found, incomplete strategy
% 2.73/1.29 % (3534855)Time elapsed: 0.005 s
% 2.73/1.29 % (3534855)Peak memory usage: 88 MB
% 2.73/1.29 % (3534855)Instructions burned: 5 (million)
% 2.73/1.29 % (3534856)Also succeeded, but the first one will report.
% 2.73/1.29 % (3534857)Instruction limit reached!
% 2.73/1.29 % (3534857)------------------------------
% 2.73/1.29 % (3534857)Version: Vampire 5.0.1 (Release build, commit ea8961452 on 2026-07-16 15:14:34 +0200)
% 2.73/1.29 % (3534857)Linked with Z3 4.14.0.0 3c47fd96cf5645d0c42b2c819d9e9a84380aa721 z3-4.8.4-9178-g3c47fd96c
% 2.73/1.29 % (3534857)CaDiCaL version: 2.1.3
% 2.73/1.29 % (3534857)Termination reason: Instruction limit
% 2.73/1.29 % (3534857)Termination phase: Saturation
% 2.73/1.29 % (3534857)Time elapsed: 0.097 s
% 2.73/1.29 % (3534857)Peak memory usage: 89 MB
% 2.73/1.29 % (3534857)Instructions burned: 139 (million)
% 2.73/1.29 % (3534855)------------------------------
% 2.73/1.29 % (3534855)------------------------------
% 2.73/1.29 % (3534858)Refutation found. Thanks to Tanya!
% 2.73/1.29 % SZS status Theorem for theBenchmark
% 2.73/1.29 % SZS output start Proof for theBenchmark
% See solution above
% 3.51/1.39 % (3534858)------------------------------
% 3.51/1.39 % (3534858)Version: Vampire 5.0.1 (Release build, commit ea8961452 on 2026-07-16 15:14:34 +0200)
% 3.51/1.39 % (3534858)Linked with Z3 4.14.0.0 3c47fd96cf5645d0c42b2c819d9e9a84380aa721 z3-4.8.4-9178-g3c47fd96c
% 3.51/1.39 % (3534858)CaDiCaL version: 2.1.3
% 3.51/1.39 % (3534858)Termination reason: Refutation
% 3.51/1.39 % (3534858)Time elapsed: 0.004 s
% 3.51/1.39 % (3534858)Peak memory usage: 89 MB
% 3.51/1.39 % (3534858)Instructions burned: 4 (million)
% 3.51/1.39 % (3534858)------------------------------
% 3.51/1.39 % (3534858)------------------------------
% 3.51/1.39 % (3534847)Success in time 0.43 s
% 3.51/1.39 % Vampire exiting
%------------------------------------------------------------------------------