TSTP Solution File: KRS106+1 by iProver---3.9
View Problem
- Process Solution
%------------------------------------------------------------------------------
% File : iProver---3.9
% Problem : KRS106+1 : TPTP v8.1.2. Released v3.1.0.
% Transfm : none
% Format : tptp:raw
% Command : run_iprover %s %d THM
% Computer : n023.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 : Fri May 3 02:33:38 EDT 2024
% Result : Unsatisfiable 2.36s 1.22s
% Output : CNFRefutation 2.36s
% Verified :
% SZS Type : Refutation
% Derivation depth : 17
% Number of leaves : 13
% Syntax : Number of formulae : 83 ( 8 unt; 0 def)
% Number of atoms : 251 ( 21 equ)
% Maximal formula atoms : 14 ( 3 avg)
% Number of connectives : 278 ( 110 ~; 98 |; 50 &)
% ( 7 <=>; 13 =>; 0 <=; 0 <~>)
% Maximal formula depth : 9 ( 4 avg)
% Maximal term depth : 2 ( 1 avg)
% Number of predicates : 10 ( 8 usr; 1 prp; 0-2 aty)
% Number of functors : 6 ( 6 usr; 1 con; 0-1 aty)
% Number of variables : 161 ( 4 sgn 95 !; 28 ?)
% Comments :
%------------------------------------------------------------------------------
fof(f19,axiom,
! [X3] :
( cUnsatisfiable(X3)
<=> ( ? [X4] :
( cp1xcomp(X4)
& rf2(X3,X4) )
& ? [X4] :
( cp1(X4)
& rf1(X3,X4) )
& ? [X4] :
( cp2(X4)
& rf3(X3,X4) ) ) ),
file('/export/starexec/sandbox/benchmark/theBenchmark.p',axiom_2) ).
fof(f20,axiom,
! [X3] :
( cp1(X3)
<=> ~ ? [X4] : ra_Px1(X3,X4) ),
file('/export/starexec/sandbox/benchmark/theBenchmark.p',axiom_3) ).
fof(f21,axiom,
! [X3] :
( cp1xcomp(X3)
<=> ? [X5] : ra_Px1(X3,X5) ),
file('/export/starexec/sandbox/benchmark/theBenchmark.p',axiom_4) ).
fof(f22,axiom,
! [X3,X4,X6] :
( ( rf1(X3,X6)
& rf1(X3,X4) )
=> X4 = X6 ),
file('/export/starexec/sandbox/benchmark/theBenchmark.p',axiom_5) ).
fof(f23,axiom,
! [X3,X4,X6] :
( ( rf2(X3,X6)
& rf2(X3,X4) )
=> X4 = X6 ),
file('/export/starexec/sandbox/benchmark/theBenchmark.p',axiom_6) ).
fof(f25,axiom,
cUnsatisfiable(i2003_11_14_17_20_57644),
file('/export/starexec/sandbox/benchmark/theBenchmark.p',axiom_8) ).
fof(f26,axiom,
! [X3,X4] :
( rf3(X3,X4)
=> rf1(X3,X4) ),
file('/export/starexec/sandbox/benchmark/theBenchmark.p',axiom_9) ).
fof(f27,axiom,
! [X3,X4] :
( rf3(X3,X4)
=> rf2(X3,X4) ),
file('/export/starexec/sandbox/benchmark/theBenchmark.p',axiom_10) ).
fof(f30,plain,
! [X0] :
( cUnsatisfiable(X0)
<=> ( ? [X1] :
( cp1xcomp(X1)
& rf2(X0,X1) )
& ? [X2] :
( cp1(X2)
& rf1(X0,X2) )
& ? [X3] :
( cp2(X3)
& rf3(X0,X3) ) ) ),
inference(rectify,[],[f19]) ).
fof(f31,plain,
! [X0] :
( cp1(X0)
<=> ~ ? [X1] : ra_Px1(X0,X1) ),
inference(rectify,[],[f20]) ).
fof(f32,plain,
! [X0] :
( cp1xcomp(X0)
<=> ? [X1] : ra_Px1(X0,X1) ),
inference(rectify,[],[f21]) ).
fof(f33,plain,
! [X0,X1,X2] :
( ( rf1(X0,X2)
& rf1(X0,X1) )
=> X1 = X2 ),
inference(rectify,[],[f22]) ).
fof(f34,plain,
! [X0,X1,X2] :
( ( rf2(X0,X2)
& rf2(X0,X1) )
=> X1 = X2 ),
inference(rectify,[],[f23]) ).
fof(f36,plain,
! [X0,X1] :
( rf3(X0,X1)
=> rf1(X0,X1) ),
inference(rectify,[],[f26]) ).
fof(f37,plain,
! [X0,X1] :
( rf3(X0,X1)
=> rf2(X0,X1) ),
inference(rectify,[],[f27]) ).
fof(f70,plain,
! [X0] :
( cp1(X0)
<=> ! [X1] : ~ ra_Px1(X0,X1) ),
inference(ennf_transformation,[],[f31]) ).
fof(f71,plain,
! [X0,X1,X2] :
( X1 = X2
| ~ rf1(X0,X2)
| ~ rf1(X0,X1) ),
inference(ennf_transformation,[],[f33]) ).
fof(f72,plain,
! [X0,X1,X2] :
( X1 = X2
| ~ rf1(X0,X2)
| ~ rf1(X0,X1) ),
inference(flattening,[],[f71]) ).
fof(f73,plain,
! [X0,X1,X2] :
( X1 = X2
| ~ rf2(X0,X2)
| ~ rf2(X0,X1) ),
inference(ennf_transformation,[],[f34]) ).
fof(f74,plain,
! [X0,X1,X2] :
( X1 = X2
| ~ rf2(X0,X2)
| ~ rf2(X0,X1) ),
inference(flattening,[],[f73]) ).
fof(f77,plain,
! [X0,X1] :
( rf1(X0,X1)
| ~ rf3(X0,X1) ),
inference(ennf_transformation,[],[f36]) ).
fof(f78,plain,
! [X0,X1] :
( rf2(X0,X1)
| ~ rf3(X0,X1) ),
inference(ennf_transformation,[],[f37]) ).
fof(f80,plain,
! [X0] :
( ( cUnsatisfiable(X0)
| ! [X1] :
( ~ cp1xcomp(X1)
| ~ rf2(X0,X1) )
| ! [X2] :
( ~ cp1(X2)
| ~ rf1(X0,X2) )
| ! [X3] :
( ~ cp2(X3)
| ~ rf3(X0,X3) ) )
& ( ( ? [X1] :
( cp1xcomp(X1)
& rf2(X0,X1) )
& ? [X2] :
( cp1(X2)
& rf1(X0,X2) )
& ? [X3] :
( cp2(X3)
& rf3(X0,X3) ) )
| ~ cUnsatisfiable(X0) ) ),
inference(nnf_transformation,[],[f30]) ).
fof(f81,plain,
! [X0] :
( ( cUnsatisfiable(X0)
| ! [X1] :
( ~ cp1xcomp(X1)
| ~ rf2(X0,X1) )
| ! [X2] :
( ~ cp1(X2)
| ~ rf1(X0,X2) )
| ! [X3] :
( ~ cp2(X3)
| ~ rf3(X0,X3) ) )
& ( ( ? [X1] :
( cp1xcomp(X1)
& rf2(X0,X1) )
& ? [X2] :
( cp1(X2)
& rf1(X0,X2) )
& ? [X3] :
( cp2(X3)
& rf3(X0,X3) ) )
| ~ cUnsatisfiable(X0) ) ),
inference(flattening,[],[f80]) ).
fof(f82,plain,
! [X0] :
( ( cUnsatisfiable(X0)
| ! [X1] :
( ~ cp1xcomp(X1)
| ~ rf2(X0,X1) )
| ! [X2] :
( ~ cp1(X2)
| ~ rf1(X0,X2) )
| ! [X3] :
( ~ cp2(X3)
| ~ rf3(X0,X3) ) )
& ( ( ? [X4] :
( cp1xcomp(X4)
& rf2(X0,X4) )
& ? [X5] :
( cp1(X5)
& rf1(X0,X5) )
& ? [X6] :
( cp2(X6)
& rf3(X0,X6) ) )
| ~ cUnsatisfiable(X0) ) ),
inference(rectify,[],[f81]) ).
fof(f83,plain,
! [X0] :
( ? [X4] :
( cp1xcomp(X4)
& rf2(X0,X4) )
=> ( cp1xcomp(sK0(X0))
& rf2(X0,sK0(X0)) ) ),
introduced(choice_axiom,[]) ).
fof(f84,plain,
! [X0] :
( ? [X5] :
( cp1(X5)
& rf1(X0,X5) )
=> ( cp1(sK1(X0))
& rf1(X0,sK1(X0)) ) ),
introduced(choice_axiom,[]) ).
fof(f85,plain,
! [X0] :
( ? [X6] :
( cp2(X6)
& rf3(X0,X6) )
=> ( cp2(sK2(X0))
& rf3(X0,sK2(X0)) ) ),
introduced(choice_axiom,[]) ).
fof(f86,plain,
! [X0] :
( ( cUnsatisfiable(X0)
| ! [X1] :
( ~ cp1xcomp(X1)
| ~ rf2(X0,X1) )
| ! [X2] :
( ~ cp1(X2)
| ~ rf1(X0,X2) )
| ! [X3] :
( ~ cp2(X3)
| ~ rf3(X0,X3) ) )
& ( ( cp1xcomp(sK0(X0))
& rf2(X0,sK0(X0))
& cp1(sK1(X0))
& rf1(X0,sK1(X0))
& cp2(sK2(X0))
& rf3(X0,sK2(X0)) )
| ~ cUnsatisfiable(X0) ) ),
inference(skolemisation,[status(esa),new_symbols(skolem,[sK0,sK1,sK2])],[f82,f85,f84,f83]) ).
fof(f87,plain,
! [X0] :
( ( cp1(X0)
| ? [X1] : ra_Px1(X0,X1) )
& ( ! [X1] : ~ ra_Px1(X0,X1)
| ~ cp1(X0) ) ),
inference(nnf_transformation,[],[f70]) ).
fof(f88,plain,
! [X0] :
( ( cp1(X0)
| ? [X1] : ra_Px1(X0,X1) )
& ( ! [X2] : ~ ra_Px1(X0,X2)
| ~ cp1(X0) ) ),
inference(rectify,[],[f87]) ).
fof(f89,plain,
! [X0] :
( ? [X1] : ra_Px1(X0,X1)
=> ra_Px1(X0,sK3(X0)) ),
introduced(choice_axiom,[]) ).
fof(f90,plain,
! [X0] :
( ( cp1(X0)
| ra_Px1(X0,sK3(X0)) )
& ( ! [X2] : ~ ra_Px1(X0,X2)
| ~ cp1(X0) ) ),
inference(skolemisation,[status(esa),new_symbols(skolem,[sK3])],[f88,f89]) ).
fof(f91,plain,
! [X0] :
( ( cp1xcomp(X0)
| ! [X1] : ~ ra_Px1(X0,X1) )
& ( ? [X1] : ra_Px1(X0,X1)
| ~ cp1xcomp(X0) ) ),
inference(nnf_transformation,[],[f32]) ).
fof(f92,plain,
! [X0] :
( ( cp1xcomp(X0)
| ! [X1] : ~ ra_Px1(X0,X1) )
& ( ? [X2] : ra_Px1(X0,X2)
| ~ cp1xcomp(X0) ) ),
inference(rectify,[],[f91]) ).
fof(f93,plain,
! [X0] :
( ? [X2] : ra_Px1(X0,X2)
=> ra_Px1(X0,sK4(X0)) ),
introduced(choice_axiom,[]) ).
fof(f94,plain,
! [X0] :
( ( cp1xcomp(X0)
| ! [X1] : ~ ra_Px1(X0,X1) )
& ( ra_Px1(X0,sK4(X0))
| ~ cp1xcomp(X0) ) ),
inference(skolemisation,[status(esa),new_symbols(skolem,[sK4])],[f92,f93]) ).
fof(f115,plain,
! [X0] :
( rf3(X0,sK2(X0))
| ~ cUnsatisfiable(X0) ),
inference(cnf_transformation,[],[f86]) ).
fof(f117,plain,
! [X0] :
( rf1(X0,sK1(X0))
| ~ cUnsatisfiable(X0) ),
inference(cnf_transformation,[],[f86]) ).
fof(f118,plain,
! [X0] :
( cp1(sK1(X0))
| ~ cUnsatisfiable(X0) ),
inference(cnf_transformation,[],[f86]) ).
fof(f119,plain,
! [X0] :
( rf2(X0,sK0(X0))
| ~ cUnsatisfiable(X0) ),
inference(cnf_transformation,[],[f86]) ).
fof(f120,plain,
! [X0] :
( cp1xcomp(sK0(X0))
| ~ cUnsatisfiable(X0) ),
inference(cnf_transformation,[],[f86]) ).
fof(f122,plain,
! [X2,X0] :
( ~ ra_Px1(X0,X2)
| ~ cp1(X0) ),
inference(cnf_transformation,[],[f90]) ).
fof(f124,plain,
! [X0] :
( ra_Px1(X0,sK4(X0))
| ~ cp1xcomp(X0) ),
inference(cnf_transformation,[],[f94]) ).
fof(f126,plain,
! [X2,X0,X1] :
( X1 = X2
| ~ rf1(X0,X2)
| ~ rf1(X0,X1) ),
inference(cnf_transformation,[],[f72]) ).
fof(f127,plain,
! [X2,X0,X1] :
( X1 = X2
| ~ rf2(X0,X2)
| ~ rf2(X0,X1) ),
inference(cnf_transformation,[],[f74]) ).
fof(f129,plain,
cUnsatisfiable(i2003_11_14_17_20_57644),
inference(cnf_transformation,[],[f25]) ).
fof(f130,plain,
! [X0,X1] :
( rf1(X0,X1)
| ~ rf3(X0,X1) ),
inference(cnf_transformation,[],[f77]) ).
fof(f131,plain,
! [X0,X1] :
( rf2(X0,X1)
| ~ rf3(X0,X1) ),
inference(cnf_transformation,[],[f78]) ).
cnf(c_54,plain,
( ~ cUnsatisfiable(X0)
| cp1xcomp(sK0(X0)) ),
inference(cnf_transformation,[],[f120]) ).
cnf(c_55,plain,
( ~ cUnsatisfiable(X0)
| rf2(X0,sK0(X0)) ),
inference(cnf_transformation,[],[f119]) ).
cnf(c_56,plain,
( ~ cUnsatisfiable(X0)
| cp1(sK1(X0)) ),
inference(cnf_transformation,[],[f118]) ).
cnf(c_57,plain,
( ~ cUnsatisfiable(X0)
| rf1(X0,sK1(X0)) ),
inference(cnf_transformation,[],[f117]) ).
cnf(c_59,plain,
( ~ cUnsatisfiable(X0)
| rf3(X0,sK2(X0)) ),
inference(cnf_transformation,[],[f115]) ).
cnf(c_61,plain,
( ~ ra_Px1(X0,X1)
| ~ cp1(X0) ),
inference(cnf_transformation,[],[f122]) ).
cnf(c_63,plain,
( ~ cp1xcomp(X0)
| ra_Px1(X0,sK4(X0)) ),
inference(cnf_transformation,[],[f124]) ).
cnf(c_64,plain,
( ~ rf1(X0,X1)
| ~ rf1(X0,X2)
| X1 = X2 ),
inference(cnf_transformation,[],[f126]) ).
cnf(c_65,plain,
( ~ rf2(X0,X1)
| ~ rf2(X0,X2)
| X1 = X2 ),
inference(cnf_transformation,[],[f127]) ).
cnf(c_67,plain,
cUnsatisfiable(i2003_11_14_17_20_57644),
inference(cnf_transformation,[],[f129]) ).
cnf(c_68,plain,
( ~ rf3(X0,X1)
| rf1(X0,X1) ),
inference(cnf_transformation,[],[f130]) ).
cnf(c_69,plain,
( ~ rf3(X0,X1)
| rf2(X0,X1) ),
inference(cnf_transformation,[],[f131]) ).
cnf(c_93,plain,
( ~ cUnsatisfiable(X0)
| cp1xcomp(sK0(X0)) ),
inference(prop_impl_just,[status(thm)],[c_54]) ).
cnf(c_107,plain,
( ~ cp1(X0)
| ~ ra_Px1(X0,X1) ),
inference(prop_impl_just,[status(thm)],[c_61]) ).
cnf(c_108,plain,
( ~ ra_Px1(X0,X1)
| ~ cp1(X0) ),
inference(renaming,[status(thm)],[c_107]) ).
cnf(c_115,plain,
( ~ cp1xcomp(X0)
| ra_Px1(X0,sK4(X0)) ),
inference(prop_impl_just,[status(thm)],[c_63]) ).
cnf(c_412,plain,
( sK4(X1) != X2
| X0 != X1
| ~ cp1xcomp(X1)
| ~ cp1(X0) ),
inference(resolution_lifted,[status(thm)],[c_108,c_115]) ).
cnf(c_413,plain,
( ~ cp1xcomp(X0)
| ~ cp1(X0) ),
inference(unflattening,[status(thm)],[c_412]) ).
cnf(c_427,plain,
( sK0(X0) != X1
| ~ cUnsatisfiable(X0)
| ~ cp1(X1) ),
inference(resolution_lifted,[status(thm)],[c_93,c_413]) ).
cnf(c_428,plain,
( ~ cp1(sK0(X0))
| ~ cUnsatisfiable(X0) ),
inference(unflattening,[status(thm)],[c_427]) ).
cnf(c_429,plain,
( ~ cp1(sK0(i2003_11_14_17_20_57644))
| ~ cUnsatisfiable(i2003_11_14_17_20_57644) ),
inference(instantiation,[status(thm)],[c_428]) ).
cnf(c_1356,plain,
( ~ cUnsatisfiable(X0)
| rf1(X0,sK2(X0)) ),
inference(superposition,[status(thm)],[c_59,c_68]) ).
cnf(c_1364,plain,
( ~ cUnsatisfiable(X0)
| rf2(X0,sK2(X0)) ),
inference(superposition,[status(thm)],[c_59,c_69]) ).
cnf(c_1374,plain,
( ~ rf1(X0,X1)
| ~ cUnsatisfiable(X0)
| sK1(X0) = X1 ),
inference(superposition,[status(thm)],[c_57,c_64]) ).
cnf(c_1385,plain,
( ~ rf2(X0,X1)
| ~ cUnsatisfiable(X0)
| sK0(X0) = X1 ),
inference(superposition,[status(thm)],[c_55,c_65]) ).
cnf(c_1430,plain,
( ~ cUnsatisfiable(X0)
| sK1(X0) = sK2(X0) ),
inference(superposition,[status(thm)],[c_1356,c_1374]) ).
cnf(c_1438,plain,
sK1(i2003_11_14_17_20_57644) = sK2(i2003_11_14_17_20_57644),
inference(superposition,[status(thm)],[c_67,c_1430]) ).
cnf(c_1439,plain,
( ~ cUnsatisfiable(i2003_11_14_17_20_57644)
| rf2(i2003_11_14_17_20_57644,sK1(i2003_11_14_17_20_57644)) ),
inference(superposition,[status(thm)],[c_1438,c_1364]) ).
cnf(c_1445,plain,
rf2(i2003_11_14_17_20_57644,sK1(i2003_11_14_17_20_57644)),
inference(forward_subsumption_resolution,[status(thm)],[c_1439,c_67]) ).
cnf(c_1489,plain,
( ~ cUnsatisfiable(i2003_11_14_17_20_57644)
| sK0(i2003_11_14_17_20_57644) = sK1(i2003_11_14_17_20_57644) ),
inference(superposition,[status(thm)],[c_1445,c_1385]) ).
cnf(c_1490,plain,
sK0(i2003_11_14_17_20_57644) = sK1(i2003_11_14_17_20_57644),
inference(forward_subsumption_resolution,[status(thm)],[c_1489,c_67]) ).
cnf(c_1548,plain,
( ~ cUnsatisfiable(i2003_11_14_17_20_57644)
| cp1(sK0(i2003_11_14_17_20_57644)) ),
inference(superposition,[status(thm)],[c_1490,c_56]) ).
cnf(c_1549,plain,
cp1(sK0(i2003_11_14_17_20_57644)),
inference(forward_subsumption_resolution,[status(thm)],[c_1548,c_67]) ).
cnf(c_1551,plain,
$false,
inference(prop_impl_just,[status(thm)],[c_1549,c_429,c_67]) ).
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.12/0.13 % Problem : KRS106+1 : TPTP v8.1.2. Released v3.1.0.
% 0.12/0.14 % Command : run_iprover %s %d THM
% 0.15/0.35 % Computer : n023.cluster.edu
% 0.15/0.35 % Model : x86_64 x86_64
% 0.15/0.35 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.15/0.35 % Memory : 8042.1875MB
% 0.15/0.35 % OS : Linux 3.10.0-693.el7.x86_64
% 0.15/0.35 % CPULimit : 300
% 0.15/0.35 % WCLimit : 300
% 0.15/0.35 % DateTime : Thu May 2 22:55:09 EDT 2024
% 0.15/0.35 % CPUTime :
% 0.21/0.48 Running first-order theorem proving
% 0.21/0.48 Running: /export/starexec/sandbox/solver/bin/run_problem --schedule fof_schedule --heuristic_context casc_unsat --no_cores 8 /export/starexec/sandbox/benchmark/theBenchmark.p 300
% 2.36/1.22 % SZS status Started for theBenchmark.p
% 2.36/1.22 % SZS status Unsatisfiable for theBenchmark.p
% 2.36/1.22
% 2.36/1.22 %---------------- iProver v3.9 (pre CASC 2024/SMT-COMP 2024) ----------------%
% 2.36/1.22
% 2.36/1.22 ------ iProver source info
% 2.36/1.22
% 2.36/1.22 git: date: 2024-05-02 19:28:25 +0000
% 2.36/1.22 git: sha1: a33b5eb135c74074ba803943bb12f2ebd971352f
% 2.36/1.22 git: non_committed_changes: false
% 2.36/1.22
% 2.36/1.22 ------ Parsing...
% 2.36/1.22 ------ Clausification by vclausify_rel & Parsing by iProver...
% 2.36/1.22
% 2.36/1.22 ------ Preprocessing... sup_sim: 0 sf_s rm: 5 0s sf_e pe_s pe:1:0s pe:2:0s pe_e sup_sim: 0 sf_s rm: 3 0s sf_e pe_s pe_e
% 2.36/1.22
% 2.36/1.22 ------ Preprocessing... gs_s sp: 0 0s gs_e snvd_s sp: 0 0s snvd_e
% 2.36/1.22
% 2.36/1.22 ------ Preprocessing... sf_s rm: 1 0s sf_e sf_s rm: 0 0s sf_e
% 2.36/1.22 ------ Proving...
% 2.36/1.22 ------ Problem Properties
% 2.36/1.22
% 2.36/1.22
% 2.36/1.22 clauses 14
% 2.36/1.22 conjectures 0
% 2.36/1.22 EPR 8
% 2.36/1.22 Horn 13
% 2.36/1.22 unary 1
% 2.36/1.22 binary 9
% 2.36/1.22 lits 35
% 2.36/1.22 lits eq 3
% 2.36/1.22 fd_pure 0
% 2.36/1.22 fd_pseudo 0
% 2.36/1.22 fd_cond 0
% 2.36/1.22 fd_pseudo_cond 3
% 2.36/1.22 AC symbols 0
% 2.36/1.22
% 2.36/1.22 ------ Schedule dynamic 5 is on
% 2.36/1.22
% 2.36/1.22 ------ no conjectures: strip conj schedule
% 2.36/1.22
% 2.36/1.22 ------ Input Options "--resolution_flag false --inst_lit_sel_side none" stripped conjectures Time Limit: 10.
% 2.36/1.22
% 2.36/1.22
% 2.36/1.22 ------
% 2.36/1.22 Current options:
% 2.36/1.22 ------
% 2.36/1.22
% 2.36/1.22
% 2.36/1.22
% 2.36/1.22
% 2.36/1.22 ------ Proving...
% 2.36/1.22
% 2.36/1.22
% 2.36/1.22 % SZS status Unsatisfiable for theBenchmark.p
% 2.36/1.22
% 2.36/1.22 % SZS output start CNFRefutation for theBenchmark.p
% See solution above
% 2.36/1.22
% 2.36/1.22
%------------------------------------------------------------------------------