↑ Up

Vampire---5.0.1.UNS-Ref.s

View TPTP
Problem
Process solution in
SystemOnTSTP
Download .tgz
%------------------------------------------------------------------------------
% File     : Vampire---5.0.1
% Problem  : GRP002-3 : TPTP v9.3.1. Released v1.0.0.
% Transfm  : none
% Format   : tptp:raw
% Command  : run_vampire /export/starexec/sandbox2/benchmark/theBenchmark.p 300 THM

% Computer : n002.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 10:12:04 AM UTC 2026

% Result   : Unsatisfiable 3.22s 1.30s
% Output   : Refutation 0.16s
% Verified : 
% SZS Type : Refutation
%            Derivation depth      :   24
%            Number of leaves      :    7
% Syntax   : Number of formulae    :   67 (  67 unt;   1 def)
%            Number of atoms       :   67 (  42 equ)
%            Maximal formula atoms :    1 (   1 avg)
%            Number of connectives :   26 (  26   ~;   0   |;   0   &)
%                                         (   0 <=>;   0  =>;   0  <=;   0 <~>)
%            Maximal formula depth :    4 (   2 avg)
%            Maximal term depth    :   15 (   3 avg)
%            Number of predicates  :    3 (   1 usr;   1 prp; 0-2 aty)
%            Number of functors    :    6 (   6 usr;   3 con; 0-2 aty)
%            Number of variables   :   73 (  73   !;   0   ?)

% Comments : 
%------------------------------------------------------------------------------
fof(f1,axiom,
    ! [X0] : multiply(identity,X0) = X0,
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',left_identity) ).

fof(f2,axiom,
    ! [X0] : multiply(inverse(X0),X0) = identity,
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',left_inverse) ).

fof(f3,plain,
    ! [X0] : identity = multiply(inverse(X0),X0),
    inference(reorient_equations,[],[f2]) ).

fof(f4,axiom,
    ! [X2,X0,X1] : multiply(multiply(X0,X1),X2) = multiply(X0,multiply(X1,X2)),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',associativity) ).

fof(f5,axiom,
    ! [X0,X1] : commutator(X0,X1) = multiply(X0,multiply(X1,multiply(inverse(X0),inverse(X1)))),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',commutator) ).

fof(f6,axiom,
    ! [X0] : multiply(X0,multiply(X0,X0)) = identity,
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',x_cubed_is_identity) ).

fof(f7,plain,
    ! [X0] : identity = multiply(X0,multiply(X0,X0)),
    inference(reorient_equations,[],[f6]) ).

fof(f8,negated_conjecture,
    commutator(commutator(a,b),b) != identity,
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',prove_commutator) ).

fof(f9,plain,
    identity != commutator(commutator(a,b),b),
    inference(reorient_equations,[],[f8]) ).

fof(f10,plain,
    identity != multiply(multiply(a,multiply(b,multiply(inverse(a),inverse(b)))),multiply(b,multiply(inverse(multiply(a,multiply(b,multiply(inverse(a),inverse(b))))),inverse(b)))),
    inference(definition_unfolding,[],[f9,f5,f5]) ).

fof(f11,definition,
    ~ sP0(multiply(multiply(a,multiply(b,multiply(inverse(a),inverse(b)))),multiply(b,multiply(inverse(multiply(a,multiply(b,multiply(inverse(a),inverse(b))))),inverse(b))))),
    introduced(definition,[new_symbols(definition,[sP0])],[inequality_splitting_name_introduction]) ).

fof(f12,plain,
    sP0(identity),
    inference(inequality_splitting,[],[f10,f11]) ).

fof(f13,plain,
    ~ sP0(multiply(a,multiply(multiply(b,multiply(inverse(a),inverse(b))),multiply(b,multiply(inverse(multiply(a,multiply(b,multiply(inverse(a),inverse(b))))),inverse(b)))))),
    inference(backward_demodulation,[],[f11,f4]) ).

fof(f14,plain,
    ~ sP0(multiply(a,multiply(b,multiply(multiply(inverse(a),inverse(b)),multiply(b,multiply(inverse(multiply(a,multiply(b,multiply(inverse(a),inverse(b))))),inverse(b))))))),
    inference(forward_demodulation,[],[f13,f4]) ).

fof(f15,plain,
    ~ sP0(multiply(a,multiply(b,multiply(inverse(a),multiply(inverse(b),multiply(b,multiply(inverse(multiply(a,multiply(b,multiply(inverse(a),inverse(b))))),inverse(b)))))))),
    inference(forward_demodulation,[],[f14,f4]) ).

fof(f20,plain,
    ! [X0,X1] : multiply(inverse(X0),multiply(X0,X1)) = multiply(identity,X1),
    inference(superposition,[],[f4,f3]) ).

fof(f21,plain,
    ! [X0,X1] : multiply(identity,X1) = multiply(X0,multiply(multiply(X0,X0),X1)),
    inference(superposition,[],[f4,f7]) ).

fof(f25,plain,
    ! [X0,X1] : identity = multiply(X0,multiply(X1,multiply(multiply(X0,X1),multiply(X0,X1)))),
    inference(superposition,[],[f7,f4]) ).

fof(f26,plain,
    ! [X0,X1] : identity = multiply(X0,multiply(X1,multiply(X0,multiply(X1,multiply(X0,X1))))),
    inference(forward_demodulation,[],[f25,f4]) ).

fof(f30,plain,
    ! [X0,X1] : multiply(identity,X1) = multiply(X0,multiply(X0,multiply(X0,X1))),
    inference(forward_demodulation,[],[f21,f4]) ).

fof(f31,plain,
    ! [X0,X1] : multiply(inverse(X0),multiply(X0,X1)) = X1,
    inference(forward_demodulation,[],[f20,f1]) ).

fof(f33,plain,
    ! [X0,X1] : multiply(X0,multiply(X0,multiply(X0,X1))) = X1,
    inference(forward_demodulation,[],[f30,f1]) ).

fof(f34,plain,
    ~ sP0(multiply(a,multiply(b,multiply(inverse(a),multiply(inverse(multiply(a,multiply(b,multiply(inverse(a),inverse(b))))),inverse(b)))))),
    inference(backward_demodulation,[],[f15,f31]) ).

fof(f36,plain,
    ! [X0] : multiply(inverse(inverse(X0)),identity) = X0,
    inference(superposition,[],[f31,f3]) ).

fof(f37,plain,
    ! [X0] : multiply(X0,X0) = multiply(inverse(X0),identity),
    inference(superposition,[],[f31,f7]) ).

fof(f42,plain,
    ! [X0] : multiply(inverse(X0),inverse(X0)) = X0,
    inference(forward_demodulation,[],[f36,f37]) ).

fof(f57,plain,
    ! [X0] : multiply(X0,identity) = X0,
    inference(superposition,[],[f33,f7]) ).

fof(f64,plain,
    ! [X0,X1] : multiply(X1,multiply(X1,X0)) = multiply(inverse(X1),X0),
    inference(superposition,[],[f31,f33]) ).

fof(f79,plain,
    ~ sP0(multiply(a,multiply(b,multiply(a,multiply(a,multiply(inverse(multiply(a,multiply(b,multiply(inverse(a),inverse(b))))),inverse(b))))))),
    inference(backward_demodulation,[],[f34,f64]) ).

fof(f80,plain,
    ! [X0] : multiply(X0,multiply(X0,inverse(X0))) = X0,
    inference(backward_demodulation,[],[f42,f64]) ).

fof(f95,plain,
    ~ sP0(multiply(a,multiply(b,multiply(a,multiply(a,multiply(multiply(a,multiply(b,multiply(inverse(a),inverse(b)))),multiply(multiply(a,multiply(b,multiply(inverse(a),inverse(b)))),inverse(b)))))))),
    inference(forward_demodulation,[],[f79,f64]) ).

fof(f108,plain,
    ~ sP0(multiply(a,multiply(b,multiply(a,multiply(a,multiply(a,multiply(multiply(b,multiply(inverse(a),inverse(b))),multiply(multiply(a,multiply(b,multiply(inverse(a),inverse(b)))),inverse(b))))))))),
    inference(forward_demodulation,[],[f95,f4]) ).

fof(f114,plain,
    ~ sP0(multiply(a,multiply(b,multiply(multiply(b,multiply(inverse(a),inverse(b))),multiply(multiply(a,multiply(b,multiply(inverse(a),inverse(b)))),inverse(b)))))),
    inference(forward_demodulation,[],[f108,f33]) ).

fof(f118,plain,
    ~ sP0(multiply(a,multiply(b,multiply(b,multiply(multiply(inverse(a),inverse(b)),multiply(multiply(a,multiply(b,multiply(inverse(a),inverse(b)))),inverse(b))))))),
    inference(forward_demodulation,[],[f114,f4]) ).

fof(f122,plain,
    ~ sP0(multiply(a,multiply(b,multiply(b,multiply(inverse(a),multiply(inverse(b),multiply(multiply(a,multiply(b,multiply(inverse(a),inverse(b)))),inverse(b)))))))),
    inference(forward_demodulation,[],[f118,f4]) ).

fof(f123,plain,
    ~ sP0(multiply(a,multiply(b,multiply(b,multiply(a,multiply(a,multiply(inverse(b),multiply(multiply(a,multiply(b,multiply(inverse(a),inverse(b)))),inverse(b))))))))),
    inference(forward_demodulation,[],[f122,f64]) ).

fof(f124,plain,
    ~ sP0(multiply(a,multiply(b,multiply(b,multiply(a,multiply(a,multiply(b,multiply(b,multiply(multiply(a,multiply(b,multiply(inverse(a),inverse(b)))),inverse(b)))))))))),
    inference(forward_demodulation,[],[f123,f64]) ).

fof(f125,plain,
    ~ sP0(multiply(a,multiply(b,multiply(b,multiply(a,multiply(a,multiply(b,multiply(b,multiply(a,multiply(multiply(b,multiply(inverse(a),inverse(b))),inverse(b))))))))))),
    inference(forward_demodulation,[],[f124,f4]) ).

fof(f126,plain,
    ~ sP0(multiply(a,multiply(b,multiply(b,multiply(a,multiply(a,multiply(b,multiply(b,multiply(a,multiply(b,multiply(multiply(inverse(a),inverse(b)),inverse(b)))))))))))),
    inference(forward_demodulation,[],[f125,f4]) ).

fof(f127,plain,
    ~ sP0(multiply(a,multiply(b,multiply(b,multiply(a,multiply(a,multiply(b,multiply(b,multiply(a,multiply(b,multiply(inverse(a),multiply(inverse(b),inverse(b))))))))))))),
    inference(forward_demodulation,[],[f126,f4]) ).

fof(f128,plain,
    ~ sP0(multiply(a,multiply(b,multiply(b,multiply(a,multiply(a,multiply(b,multiply(b,multiply(a,multiply(b,multiply(a,multiply(a,multiply(inverse(b),inverse(b)))))))))))))),
    inference(forward_demodulation,[],[f127,f64]) ).

fof(f129,plain,
    ~ sP0(multiply(a,multiply(b,multiply(b,multiply(a,multiply(a,multiply(b,multiply(b,multiply(a,multiply(b,multiply(a,multiply(a,multiply(b,multiply(b,inverse(b))))))))))))))),
    inference(forward_demodulation,[],[f128,f64]) ).

fof(f130,plain,
    ~ sP0(multiply(a,multiply(b,multiply(b,multiply(a,multiply(a,multiply(b,multiply(b,multiply(a,multiply(b,multiply(a,multiply(a,b)))))))))))),
    inference(forward_demodulation,[],[f129,f80]) ).

fof(f144,plain,
    ! [X2,X0,X1] : identity = multiply(X2,multiply(X0,multiply(X1,multiply(X2,multiply(multiply(X0,X1),multiply(X2,multiply(X0,X1))))))),
    inference(superposition,[],[f26,f4]) ).

fof(f150,plain,
    ! [X0,X1] : multiply(X1,multiply(X0,multiply(X1,multiply(X0,X1)))) = multiply(X0,multiply(X0,identity)),
    inference(superposition,[],[f33,f26]) ).

fof(f157,plain,
    ! [X0,X1] : multiply(X0,X0) = multiply(X1,multiply(X0,multiply(X1,multiply(X0,X1)))),
    inference(forward_demodulation,[],[f150,f57]) ).

fof(f161,plain,
    ! [X2,X0,X1] : identity = multiply(X2,multiply(X0,multiply(X1,multiply(X2,multiply(X0,multiply(X1,multiply(X2,multiply(X0,X1)))))))),
    inference(forward_demodulation,[],[f144,f4]) ).

fof(f207,plain,
    ! [X0] : inverse(X0) = multiply(X0,X0),
    inference(superposition,[],[f33,f80]) ).

fof(f208,plain,
    ! [X0] : multiply(X0,multiply(X0,X0)) = multiply(X0,inverse(X0)),
    inference(superposition,[],[f33,f80]) ).

fof(f215,plain,
    ! [X0] : identity = multiply(X0,inverse(X0)),
    inference(forward_demodulation,[],[f208,f7]) ).

fof(f216,plain,
    ! [X0,X1] : inverse(X0) = multiply(X1,multiply(X0,multiply(X1,multiply(X0,X1)))),
    inference(backward_demodulation,[],[f157,f207]) ).

fof(f255,plain,
    ! [X0,X1] : multiply(X0,multiply(X1,multiply(X0,X1))) = inverse(multiply(X0,X1)),
    inference(superposition,[],[f4,f207]) ).

fof(f258,plain,
    ! [X0,X1] : inverse(X0) = multiply(X1,inverse(multiply(X0,X1))),
    inference(backward_demodulation,[],[f216,f255]) ).

fof(f276,plain,
    ! [X2,X0,X1] : multiply(X1,multiply(inverse(multiply(X0,X1)),X2)) = multiply(inverse(X0),X2),
    inference(superposition,[],[f4,f258]) ).

fof(f280,plain,
    ! [X2,X0,X1] : multiply(X1,multiply(inverse(multiply(X0,X1)),X2)) = multiply(X0,multiply(X0,X2)),
    inference(forward_demodulation,[],[f276,f64]) ).

fof(f287,plain,
    ! [X2,X0,X1] : multiply(X1,multiply(multiply(X0,X1),multiply(multiply(X0,X1),X2))) = multiply(X0,multiply(X0,X2)),
    inference(forward_demodulation,[],[f280,f64]) ).

fof(f290,plain,
    ! [X2,X0,X1] : multiply(X1,multiply(X0,multiply(X1,multiply(multiply(X0,X1),X2)))) = multiply(X0,multiply(X0,X2)),
    inference(forward_demodulation,[],[f287,f4]) ).

fof(f293,plain,
    ! [X2,X0,X1] : multiply(X1,multiply(X0,multiply(X1,multiply(X0,multiply(X1,X2))))) = multiply(X0,multiply(X0,X2)),
    inference(forward_demodulation,[],[f290,f4]) ).

fof(f341,plain,
    ! [X0,X1] : multiply(X0,identity) = multiply(X1,multiply(X0,multiply(X0,multiply(X1,multiply(X0,multiply(X0,X1)))))),
    inference(superposition,[],[f33,f161]) ).

fof(f354,plain,
    ! [X0,X1] : multiply(X1,multiply(X0,multiply(X0,multiply(X1,multiply(X0,multiply(X0,X1)))))) = X0,
    inference(forward_demodulation,[],[f341,f57]) ).

fof(f1283,plain,
    ! [X0,X1] : multiply(X0,multiply(X1,multiply(X0,X0))) = multiply(X1,multiply(X1,multiply(X0,multiply(X1,multiply(X0,multiply(X0,X1)))))),
    inference(superposition,[],[f293,f354]) ).

fof(f1344,plain,
    ! [X0,X1] : multiply(X0,multiply(X1,inverse(X0))) = multiply(X1,multiply(X1,multiply(X0,multiply(X1,multiply(X0,multiply(X0,X1)))))),
    inference(forward_demodulation,[],[f1283,f207]) ).

fof(f1372,plain,
    ~ sP0(multiply(a,multiply(b,multiply(b,multiply(a,multiply(a,multiply(a,multiply(b,inverse(a))))))))),
    inference(backward_demodulation,[],[f130,f1344]) ).

fof(f1397,plain,
    ~ sP0(multiply(a,multiply(b,multiply(b,multiply(b,inverse(a)))))),
    inference(forward_demodulation,[],[f1372,f33]) ).

fof(f1409,plain,
    ~ sP0(multiply(a,inverse(a))),
    inference(forward_demodulation,[],[f1397,f33]) ).

fof(f1417,plain,
    ~ sP0(identity),
    inference(forward_demodulation,[],[f1409,f215]) ).

fof(f1425,plain,
    $false,
    inference(forward_subsumption_resolution,[],[f1417,f12]) ).

%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.00/0.02  % Problem  : GRP002-3 : TPTP v9.3.1. Released v1.0.0.
% 0.00/0.05  % Command  : run_vampire /export/starexec/sandbox2/benchmark/theBenchmark.p 300 THM
% 0.10/0.37  % Computer : n002.cluster.edu
% 0.10/0.37  % Model    : x86_64 x86_64
% 0.10/0.37  % CPU      : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.10/0.37  % Memory   : 8046.5625MB
% 0.10/0.37  % OS       : Linux 6.8.0-71-generic
% 0.10/0.37  % CPULimit : 300
% 0.10/0.37  % WCLimit  : 300
% 0.10/0.37  % DateTime : Sun Sep 27 09:15:51 UTC 2026
% 0.10/0.37  % CPUTime  : 
% 0.10/0.37  Running run_vampire /export/starexec/sandbox2/benchmark/theBenchmark.p 300 THM
% 0.10/0.41  Running first-order theorem proving
% 0.10/0.41  Running: /export/starexec/sandbox2/solver/bin/vampire --input_syntax tptp --output_axiom_names on --mode casc -m 16384 --cores 7 -t 300 /export/starexec/sandbox2/benchmark/theBenchmark.p
% 3.22/1.30  % (3259916)Detected a unit-equality problem, will run specialized UEQ schedule.
% 3.22/1.30  % (3259925)dis+10_14_to=lpo:sil=8000:tgt=full:drc=off:sp=const_frequency:sos=all:random_seed=2799760513:i=181:gtgl=5:bs=unit_only:fsr=off:gtg=exists_all_2999 on theBenchmark for (2999ds/181Mi)
% 3.22/1.30  % (3259926)lrs+10_3_to=lpo:sil=64000:drc=off:fde=unused:sp=reverse_frequency:acc=on:bsr=on:fd=preordered:nwc=1:random_seed=3244870302:avsq=on:i=257:avsqr=16,3:bd=preordered:fsr=off_2999 on theBenchmark for (2999ds/257Mi)
% 3.22/1.30  % (3259927)dis-1010_7_sil=8000:fde=unused:flr=on:random_seed=3122822972:i=1187:sd=4:av=off:ss=axioms:sgt=32_2999 on theBenchmark for (2999ds/1187Mi)
% 3.22/1.30  % (3259921)lrs+1002_1_ncem=casc2026/models/loop7.pt:sil=128000:tgt=ground:npcc=on:drc=off:sp=reverse_frequency:spb=goal:acc=on:s2agt=16:kmz=on:sac=on:random_seed=2217155051:i=138329:kws=inv_arity_squared:fgj=on:bd=preordered_2999 on theBenchmark for (2999ds/138329Mi)
% 3.22/1.30  % (3259923)lrs+10_1_ncem=casc2026/models/loop5.pt:sil=128000:tgt=ground:npcc=on:spb=goal_then_units:urr=ec_only:random_seed=166886394:i=130716:gtgl=4:add=on:doe=on:bd=all:gtg=exists_sym_2999 on theBenchmark for (2999ds/130716Mi)
% 3.22/1.30  % (3259924)ott-1010_1_sfv=off:to=lpo:sil=8000:fdtod=off:sp=reverse_frequency:spb=goal_then_units:fd=preordered:random_seed=1784607900:i=136:bd=preordered:ins=2:av=off_2999 on theBenchmark for (2999ds/136Mi)
% 3.22/1.30  % (3259922)lrs+11_1_ncem=casc2026/models/loop6.pt:sil=128000:npcc=on:lma=off:spb=units:urr=ec_only:bce=on:s2agt=64:updr=off:random_seed=2611474284:i=130792:sd=20:aac=none:nm=16:ss=included:sgt=10_2999 on theBenchmark for (2999ds/130792Mi)
% 3.22/1.30  % (3259925)Instruction limit reached! 
% 3.22/1.30  % (3259925)------------------------------
% 3.22/1.30  % (3259925)Version: Vampire 5.0.1 (Release build, commit ea8961452 on 2026-07-16 15:14:34 +0200)
% 3.22/1.30  % (3259925)Linked with Z3 4.14.0.0 3c47fd96cf5645d0c42b2c819d9e9a84380aa721 z3-4.8.4-9178-g3c47fd96c
% 3.22/1.30  % (3259925)CaDiCaL version: 2.1.3
% 3.22/1.30  % (3259925)Termination reason: Instruction limit
% 3.22/1.30  % (3259925)Termination phase: Saturation
% 3.22/1.30  % (3259925)Time elapsed: 0.049 s
% 3.22/1.30  % (3259925)Peak memory usage: 89 MB
% 3.22/1.30  % (3259925)Instructions burned: 183 (million)
% 3.22/1.30  % (3259924)First to succeed.
% 3.22/1.30  % (3259924)Solution written to "/export/starexec/sandbox2/tmp/vampire-proof-3259916"
% 3.22/1.30  % (3259935)lrs-1011_1_ncem=casc2026/models/loop8.pt:sil=32000:npcc=on:prc=on:fde=unused:lcm=predicate:bsr=on:flr=on:random_seed=1838598904:i=2051:gtgl=2:fgj=on:bd=all:gtg=exists_top_2998 on theBenchmark for (2998ds/2051Mi)
% 3.22/1.30  % (3259927)Also succeeded, but the first one will report.
% 3.22/1.30  % (3259926)Instruction limit reached! 
% 3.22/1.30  % (3259926)------------------------------
% 3.22/1.30  % (3259926)Version: Vampire 5.0.1 (Release build, commit ea8961452 on 2026-07-16 15:14:34 +0200)
% 3.22/1.30  % (3259926)Linked with Z3 4.14.0.0 3c47fd96cf5645d0c42b2c819d9e9a84380aa721 z3-4.8.4-9178-g3c47fd96c
% 3.22/1.30  % (3259926)CaDiCaL version: 2.1.3
% 3.22/1.30  % (3259926)Termination reason: Instruction limit
% 3.22/1.30  % (3259926)Termination phase: Saturation
% 3.22/1.30  % (3259926)Time elapsed: 0.160 s
% 3.22/1.30  % (3259926)Peak memory usage: 89 MB
% 3.22/1.30  % (3259926)Instructions burned: 257 (million)
% 3.22/1.30  % (3259924)Refutation found. Thanks to Tanya!
% 3.22/1.30  % SZS status Unsatisfiable for theBenchmark
% 3.22/1.30  % SZS output start Proof for theBenchmark
% See solution above
% 0.16/1.50  % (3259924)------------------------------
% 0.16/1.50  % (3259924)Version: Vampire 5.0.1 (Release build, commit ea8961452 on 2026-07-16 15:14:34 +0200)
% 0.16/1.50  % (3259924)Linked with Z3 4.14.0.0 3c47fd96cf5645d0c42b2c819d9e9a84380aa721 z3-4.8.4-9178-g3c47fd96c
% 0.16/1.50  % (3259924)CaDiCaL version: 2.1.3
% 0.16/1.50  % (3259924)Termination reason: Refutation
% 0.16/1.50  % (3259924)Time elapsed: 0.030 s
% 0.16/1.50  % (3259924)Peak memory usage: 88 MB
% 0.16/1.50  % (3259924)Instructions burned: 50 (million)
% 0.16/1.50  % (3259924)------------------------------
% 0.16/1.50  % (3259924)------------------------------
% 0.16/1.50  % (3259916)Success in time 0.456 s
% 0.16/1.50  % Vampire exiting
%------------------------------------------------------------------------------