TSTP Solution File: SEU225+3 by SInE---0.4
View Problem
- Process Solution
%------------------------------------------------------------------------------
% File : SInE---0.4
% Problem : SEU225+3 : TPTP v5.0.0. Released v3.2.0.
% Transfm : none
% Format : tptp:raw
% Command : Source/sine.py -e eprover -t %d %s
% Computer : art02.cs.miami.edu
% Model : i686 i686
% CPU : Intel(R) Pentium(R) 4 CPU 2.80GHz @ 2793MHz
% Memory : 2018MB
% OS : Linux 2.6.26.8-57.fc8
% CPULimit : 300s
% DateTime : Sun Dec 26 05:52:40 EST 2010
% Result : Theorem 0.78s
% Output : CNFRefutation 0.78s
% Verified :
% SZS Type : Refutation
% Derivation depth : 23
% Number of leaves : 6
% Syntax : Number of formulae : 63 ( 9 unt; 0 def)
% Number of atoms : 360 ( 95 equ)
% Maximal formula atoms : 27 ( 5 avg)
% Number of connectives : 502 ( 205 ~; 217 |; 58 &)
% ( 6 <=>; 16 =>; 0 <=; 0 <~>)
% Maximal formula depth : 15 ( 6 avg)
% Maximal term depth : 3 ( 1 avg)
% Number of predicates : 5 ( 3 usr; 1 prp; 0-2 aty)
% Number of functors : 10 ( 10 usr; 4 con; 0-3 aty)
% Number of variables : 128 ( 8 sgn 74 !; 8 ?)
% Comments :
%------------------------------------------------------------------------------
fof(1,axiom,
! [X1,X2] :
( ( relation(X1)
& function(X1) )
=> ( relation(relation_dom_restriction(X1,X2))
& function(relation_dom_restriction(X1,X2)) ) ),
file('/tmp/tmpKjYFMv/sel_SEU225+3.p_1',fc4_funct_1) ).
fof(4,conjecture,
! [X1,X2,X3] :
( ( relation(X3)
& function(X3) )
=> ( in(X2,X1)
=> apply(relation_dom_restriction(X3,X1),X2) = apply(X3,X2) ) ),
file('/tmp/tmpKjYFMv/sel_SEU225+3.p_1',t72_funct_1) ).
fof(5,axiom,
! [X1] :
( ( relation(X1)
& function(X1) )
=> ! [X2,X3] :
( ( in(X2,relation_dom(X1))
=> ( X3 = apply(X1,X2)
<=> in(ordered_pair(X2,X3),X1) ) )
& ( ~ in(X2,relation_dom(X1))
=> ( X3 = apply(X1,X2)
<=> X3 = empty_set ) ) ) ),
file('/tmp/tmpKjYFMv/sel_SEU225+3.p_1',d4_funct_1) ).
fof(30,axiom,
! [X1,X2,X3] :
( ( relation(X3)
& function(X3) )
=> ( in(X2,relation_dom(relation_dom_restriction(X3,X1)))
<=> ( in(X2,relation_dom(X3))
& in(X2,X1) ) ) ),
file('/tmp/tmpKjYFMv/sel_SEU225+3.p_1',l82_funct_1) ).
fof(32,axiom,
! [X1,X2] :
( ( relation(X2)
& function(X2) )
=> ! [X3] :
( ( relation(X3)
& function(X3) )
=> ( X2 = relation_dom_restriction(X3,X1)
<=> ( relation_dom(X2) = set_intersection2(relation_dom(X3),X1)
& ! [X4] :
( in(X4,relation_dom(X2))
=> apply(X2,X4) = apply(X3,X4) ) ) ) ) ),
file('/tmp/tmpKjYFMv/sel_SEU225+3.p_1',t68_funct_1) ).
fof(41,axiom,
! [X1,X2] :
( relation(X1)
=> relation(relation_dom_restriction(X1,X2)) ),
file('/tmp/tmpKjYFMv/sel_SEU225+3.p_1',dt_k7_relat_1) ).
fof(47,negated_conjecture,
~ ! [X1,X2,X3] :
( ( relation(X3)
& function(X3) )
=> ( in(X2,X1)
=> apply(relation_dom_restriction(X3,X1),X2) = apply(X3,X2) ) ),
inference(assume_negation,[status(cth)],[4]) ).
fof(48,plain,
! [X1] :
( ( relation(X1)
& function(X1) )
=> ! [X2,X3] :
( ( in(X2,relation_dom(X1))
=> ( X3 = apply(X1,X2)
<=> in(ordered_pair(X2,X3),X1) ) )
& ( ~ in(X2,relation_dom(X1))
=> ( X3 = apply(X1,X2)
<=> X3 = empty_set ) ) ) ),
inference(fof_simplification,[status(thm)],[5,theory(equality)]) ).
fof(58,plain,
! [X1,X2] :
( ~ relation(X1)
| ~ function(X1)
| ( relation(relation_dom_restriction(X1,X2))
& function(relation_dom_restriction(X1,X2)) ) ),
inference(fof_nnf,[status(thm)],[1]) ).
fof(59,plain,
! [X3,X4] :
( ~ relation(X3)
| ~ function(X3)
| ( relation(relation_dom_restriction(X3,X4))
& function(relation_dom_restriction(X3,X4)) ) ),
inference(variable_rename,[status(thm)],[58]) ).
fof(60,plain,
! [X3,X4] :
( ( relation(relation_dom_restriction(X3,X4))
| ~ relation(X3)
| ~ function(X3) )
& ( function(relation_dom_restriction(X3,X4))
| ~ relation(X3)
| ~ function(X3) ) ),
inference(distribute,[status(thm)],[59]) ).
cnf(61,plain,
( function(relation_dom_restriction(X1,X2))
| ~ function(X1)
| ~ relation(X1) ),
inference(split_conjunct,[status(thm)],[60]) ).
fof(69,negated_conjecture,
? [X1,X2,X3] :
( relation(X3)
& function(X3)
& in(X2,X1)
& apply(relation_dom_restriction(X3,X1),X2) != apply(X3,X2) ),
inference(fof_nnf,[status(thm)],[47]) ).
fof(70,negated_conjecture,
? [X4,X5,X6] :
( relation(X6)
& function(X6)
& in(X5,X4)
& apply(relation_dom_restriction(X6,X4),X5) != apply(X6,X5) ),
inference(variable_rename,[status(thm)],[69]) ).
fof(71,negated_conjecture,
( relation(esk4_0)
& function(esk4_0)
& in(esk3_0,esk2_0)
& apply(relation_dom_restriction(esk4_0,esk2_0),esk3_0) != apply(esk4_0,esk3_0) ),
inference(skolemize,[status(esa)],[70]) ).
cnf(72,negated_conjecture,
apply(relation_dom_restriction(esk4_0,esk2_0),esk3_0) != apply(esk4_0,esk3_0),
inference(split_conjunct,[status(thm)],[71]) ).
cnf(73,negated_conjecture,
in(esk3_0,esk2_0),
inference(split_conjunct,[status(thm)],[71]) ).
cnf(74,negated_conjecture,
function(esk4_0),
inference(split_conjunct,[status(thm)],[71]) ).
cnf(75,negated_conjecture,
relation(esk4_0),
inference(split_conjunct,[status(thm)],[71]) ).
fof(76,plain,
! [X1] :
( ~ relation(X1)
| ~ function(X1)
| ! [X2,X3] :
( ( ~ in(X2,relation_dom(X1))
| ( ( X3 != apply(X1,X2)
| in(ordered_pair(X2,X3),X1) )
& ( ~ in(ordered_pair(X2,X3),X1)
| X3 = apply(X1,X2) ) ) )
& ( in(X2,relation_dom(X1))
| ( ( X3 != apply(X1,X2)
| X3 = empty_set )
& ( X3 != empty_set
| X3 = apply(X1,X2) ) ) ) ) ),
inference(fof_nnf,[status(thm)],[48]) ).
fof(77,plain,
! [X4] :
( ~ relation(X4)
| ~ function(X4)
| ! [X5,X6] :
( ( ~ in(X5,relation_dom(X4))
| ( ( X6 != apply(X4,X5)
| in(ordered_pair(X5,X6),X4) )
& ( ~ in(ordered_pair(X5,X6),X4)
| X6 = apply(X4,X5) ) ) )
& ( in(X5,relation_dom(X4))
| ( ( X6 != apply(X4,X5)
| X6 = empty_set )
& ( X6 != empty_set
| X6 = apply(X4,X5) ) ) ) ) ),
inference(variable_rename,[status(thm)],[76]) ).
fof(78,plain,
! [X4,X5,X6] :
( ( ( ~ in(X5,relation_dom(X4))
| ( ( X6 != apply(X4,X5)
| in(ordered_pair(X5,X6),X4) )
& ( ~ in(ordered_pair(X5,X6),X4)
| X6 = apply(X4,X5) ) ) )
& ( in(X5,relation_dom(X4))
| ( ( X6 != apply(X4,X5)
| X6 = empty_set )
& ( X6 != empty_set
| X6 = apply(X4,X5) ) ) ) )
| ~ relation(X4)
| ~ function(X4) ),
inference(shift_quantors,[status(thm)],[77]) ).
fof(79,plain,
! [X4,X5,X6] :
( ( X6 != apply(X4,X5)
| in(ordered_pair(X5,X6),X4)
| ~ in(X5,relation_dom(X4))
| ~ relation(X4)
| ~ function(X4) )
& ( ~ in(ordered_pair(X5,X6),X4)
| X6 = apply(X4,X5)
| ~ in(X5,relation_dom(X4))
| ~ relation(X4)
| ~ function(X4) )
& ( X6 != apply(X4,X5)
| X6 = empty_set
| in(X5,relation_dom(X4))
| ~ relation(X4)
| ~ function(X4) )
& ( X6 != empty_set
| X6 = apply(X4,X5)
| in(X5,relation_dom(X4))
| ~ relation(X4)
| ~ function(X4) ) ),
inference(distribute,[status(thm)],[78]) ).
cnf(80,plain,
( in(X2,relation_dom(X1))
| X3 = apply(X1,X2)
| ~ function(X1)
| ~ relation(X1)
| X3 != empty_set ),
inference(split_conjunct,[status(thm)],[79]) ).
fof(163,plain,
! [X1,X2,X3] :
( ~ relation(X3)
| ~ function(X3)
| ( ( ~ in(X2,relation_dom(relation_dom_restriction(X3,X1)))
| ( in(X2,relation_dom(X3))
& in(X2,X1) ) )
& ( ~ in(X2,relation_dom(X3))
| ~ in(X2,X1)
| in(X2,relation_dom(relation_dom_restriction(X3,X1))) ) ) ),
inference(fof_nnf,[status(thm)],[30]) ).
fof(164,plain,
! [X4,X5,X6] :
( ~ relation(X6)
| ~ function(X6)
| ( ( ~ in(X5,relation_dom(relation_dom_restriction(X6,X4)))
| ( in(X5,relation_dom(X6))
& in(X5,X4) ) )
& ( ~ in(X5,relation_dom(X6))
| ~ in(X5,X4)
| in(X5,relation_dom(relation_dom_restriction(X6,X4))) ) ) ),
inference(variable_rename,[status(thm)],[163]) ).
fof(165,plain,
! [X4,X5,X6] :
( ( in(X5,relation_dom(X6))
| ~ in(X5,relation_dom(relation_dom_restriction(X6,X4)))
| ~ relation(X6)
| ~ function(X6) )
& ( in(X5,X4)
| ~ in(X5,relation_dom(relation_dom_restriction(X6,X4)))
| ~ relation(X6)
| ~ function(X6) )
& ( ~ in(X5,relation_dom(X6))
| ~ in(X5,X4)
| in(X5,relation_dom(relation_dom_restriction(X6,X4)))
| ~ relation(X6)
| ~ function(X6) ) ),
inference(distribute,[status(thm)],[164]) ).
cnf(166,plain,
( in(X2,relation_dom(relation_dom_restriction(X1,X3)))
| ~ function(X1)
| ~ relation(X1)
| ~ in(X2,X3)
| ~ in(X2,relation_dom(X1)) ),
inference(split_conjunct,[status(thm)],[165]) ).
cnf(168,plain,
( in(X2,relation_dom(X1))
| ~ function(X1)
| ~ relation(X1)
| ~ in(X2,relation_dom(relation_dom_restriction(X1,X3))) ),
inference(split_conjunct,[status(thm)],[165]) ).
fof(172,plain,
! [X1,X2] :
( ~ relation(X2)
| ~ function(X2)
| ! [X3] :
( ~ relation(X3)
| ~ function(X3)
| ( ( X2 != relation_dom_restriction(X3,X1)
| ( relation_dom(X2) = set_intersection2(relation_dom(X3),X1)
& ! [X4] :
( ~ in(X4,relation_dom(X2))
| apply(X2,X4) = apply(X3,X4) ) ) )
& ( relation_dom(X2) != set_intersection2(relation_dom(X3),X1)
| ? [X4] :
( in(X4,relation_dom(X2))
& apply(X2,X4) != apply(X3,X4) )
| X2 = relation_dom_restriction(X3,X1) ) ) ) ),
inference(fof_nnf,[status(thm)],[32]) ).
fof(173,plain,
! [X5,X6] :
( ~ relation(X6)
| ~ function(X6)
| ! [X7] :
( ~ relation(X7)
| ~ function(X7)
| ( ( X6 != relation_dom_restriction(X7,X5)
| ( relation_dom(X6) = set_intersection2(relation_dom(X7),X5)
& ! [X8] :
( ~ in(X8,relation_dom(X6))
| apply(X6,X8) = apply(X7,X8) ) ) )
& ( relation_dom(X6) != set_intersection2(relation_dom(X7),X5)
| ? [X9] :
( in(X9,relation_dom(X6))
& apply(X6,X9) != apply(X7,X9) )
| X6 = relation_dom_restriction(X7,X5) ) ) ) ),
inference(variable_rename,[status(thm)],[172]) ).
fof(174,plain,
! [X5,X6] :
( ~ relation(X6)
| ~ function(X6)
| ! [X7] :
( ~ relation(X7)
| ~ function(X7)
| ( ( X6 != relation_dom_restriction(X7,X5)
| ( relation_dom(X6) = set_intersection2(relation_dom(X7),X5)
& ! [X8] :
( ~ in(X8,relation_dom(X6))
| apply(X6,X8) = apply(X7,X8) ) ) )
& ( relation_dom(X6) != set_intersection2(relation_dom(X7),X5)
| ( in(esk11_3(X5,X6,X7),relation_dom(X6))
& apply(X6,esk11_3(X5,X6,X7)) != apply(X7,esk11_3(X5,X6,X7)) )
| X6 = relation_dom_restriction(X7,X5) ) ) ) ),
inference(skolemize,[status(esa)],[173]) ).
fof(175,plain,
! [X5,X6,X7,X8] :
( ( ( ( ( ~ in(X8,relation_dom(X6))
| apply(X6,X8) = apply(X7,X8) )
& relation_dom(X6) = set_intersection2(relation_dom(X7),X5) )
| X6 != relation_dom_restriction(X7,X5) )
& ( relation_dom(X6) != set_intersection2(relation_dom(X7),X5)
| ( in(esk11_3(X5,X6,X7),relation_dom(X6))
& apply(X6,esk11_3(X5,X6,X7)) != apply(X7,esk11_3(X5,X6,X7)) )
| X6 = relation_dom_restriction(X7,X5) ) )
| ~ relation(X7)
| ~ function(X7)
| ~ relation(X6)
| ~ function(X6) ),
inference(shift_quantors,[status(thm)],[174]) ).
fof(176,plain,
! [X5,X6,X7,X8] :
( ( ~ in(X8,relation_dom(X6))
| apply(X6,X8) = apply(X7,X8)
| X6 != relation_dom_restriction(X7,X5)
| ~ relation(X7)
| ~ function(X7)
| ~ relation(X6)
| ~ function(X6) )
& ( relation_dom(X6) = set_intersection2(relation_dom(X7),X5)
| X6 != relation_dom_restriction(X7,X5)
| ~ relation(X7)
| ~ function(X7)
| ~ relation(X6)
| ~ function(X6) )
& ( in(esk11_3(X5,X6,X7),relation_dom(X6))
| relation_dom(X6) != set_intersection2(relation_dom(X7),X5)
| X6 = relation_dom_restriction(X7,X5)
| ~ relation(X7)
| ~ function(X7)
| ~ relation(X6)
| ~ function(X6) )
& ( apply(X6,esk11_3(X5,X6,X7)) != apply(X7,esk11_3(X5,X6,X7))
| relation_dom(X6) != set_intersection2(relation_dom(X7),X5)
| X6 = relation_dom_restriction(X7,X5)
| ~ relation(X7)
| ~ function(X7)
| ~ relation(X6)
| ~ function(X6) ) ),
inference(distribute,[status(thm)],[175]) ).
cnf(180,plain,
( apply(X1,X4) = apply(X2,X4)
| ~ function(X1)
| ~ relation(X1)
| ~ function(X2)
| ~ relation(X2)
| X1 != relation_dom_restriction(X2,X3)
| ~ in(X4,relation_dom(X1)) ),
inference(split_conjunct,[status(thm)],[176]) ).
fof(202,plain,
! [X1,X2] :
( ~ relation(X1)
| relation(relation_dom_restriction(X1,X2)) ),
inference(fof_nnf,[status(thm)],[41]) ).
fof(203,plain,
! [X3,X4] :
( ~ relation(X3)
| relation(relation_dom_restriction(X3,X4)) ),
inference(variable_rename,[status(thm)],[202]) ).
cnf(204,plain,
( relation(relation_dom_restriction(X1,X2))
| ~ relation(X1) ),
inference(split_conjunct,[status(thm)],[203]) ).
cnf(284,plain,
( apply(X1,X2) = empty_set
| in(X2,relation_dom(X1))
| ~ function(X1)
| ~ relation(X1) ),
inference(er,[status(thm)],[80,theory(equality)]) ).
cnf(301,plain,
( apply(relation_dom_restriction(X1,X2),X3) = apply(X4,X3)
| relation_dom_restriction(X4,X5) != relation_dom_restriction(X1,X2)
| ~ function(X4)
| ~ function(relation_dom_restriction(X1,X2))
| ~ relation(X4)
| ~ relation(relation_dom_restriction(X1,X2))
| ~ in(X3,relation_dom(X1))
| ~ in(X3,X2)
| ~ function(X1)
| ~ relation(X1) ),
inference(spm,[status(thm)],[180,166,theory(equality)]) ).
cnf(479,plain,
( in(X1,relation_dom(X2))
| apply(relation_dom_restriction(X2,X3),X1) = empty_set
| ~ function(X2)
| ~ relation(X2)
| ~ function(relation_dom_restriction(X2,X3))
| ~ relation(relation_dom_restriction(X2,X3)) ),
inference(spm,[status(thm)],[168,284,theory(equality)]) ).
cnf(880,plain,
( apply(relation_dom_restriction(X1,X2),X3) = apply(X4,X3)
| relation_dom_restriction(X4,X5) != relation_dom_restriction(X1,X2)
| ~ in(X3,relation_dom(X1))
| ~ in(X3,X2)
| ~ function(relation_dom_restriction(X1,X2))
| ~ function(X1)
| ~ function(X4)
| ~ relation(X1)
| ~ relation(X4) ),
inference(csr,[status(thm)],[301,204]) ).
cnf(881,plain,
( apply(relation_dom_restriction(X1,X2),X3) = apply(X4,X3)
| relation_dom_restriction(X4,X5) != relation_dom_restriction(X1,X2)
| ~ in(X3,relation_dom(X1))
| ~ in(X3,X2)
| ~ function(X1)
| ~ function(X4)
| ~ relation(X4)
| ~ relation(X1) ),
inference(csr,[status(thm)],[880,61]) ).
cnf(882,plain,
( apply(relation_dom_restriction(X1,X2),X3) = apply(X1,X3)
| ~ in(X3,relation_dom(X1))
| ~ in(X3,X2)
| ~ function(X1)
| ~ relation(X1) ),
inference(er,[status(thm)],[881,theory(equality)]) ).
cnf(4256,plain,
( apply(relation_dom_restriction(X2,X3),X1) = empty_set
| in(X1,relation_dom(X2))
| ~ function(relation_dom_restriction(X2,X3))
| ~ function(X2)
| ~ relation(X2) ),
inference(csr,[status(thm)],[479,204]) ).
cnf(4257,plain,
( apply(relation_dom_restriction(X2,X3),X1) = empty_set
| in(X1,relation_dom(X2))
| ~ function(X2)
| ~ relation(X2) ),
inference(csr,[status(thm)],[4256,61]) ).
cnf(4259,negated_conjecture,
( in(esk3_0,relation_dom(esk4_0))
| empty_set != apply(esk4_0,esk3_0)
| ~ function(esk4_0)
| ~ relation(esk4_0) ),
inference(spm,[status(thm)],[72,4257,theory(equality)]) ).
cnf(4278,negated_conjecture,
( in(esk3_0,relation_dom(esk4_0))
| empty_set != apply(esk4_0,esk3_0)
| $false
| ~ relation(esk4_0) ),
inference(rw,[status(thm)],[4259,74,theory(equality)]) ).
cnf(4279,negated_conjecture,
( in(esk3_0,relation_dom(esk4_0))
| empty_set != apply(esk4_0,esk3_0)
| $false
| $false ),
inference(rw,[status(thm)],[4278,75,theory(equality)]) ).
cnf(4280,negated_conjecture,
( in(esk3_0,relation_dom(esk4_0))
| empty_set != apply(esk4_0,esk3_0) ),
inference(cn,[status(thm)],[4279,theory(equality)]) ).
cnf(11999,negated_conjecture,
( ~ in(esk3_0,relation_dom(esk4_0))
| ~ in(esk3_0,esk2_0)
| ~ function(esk4_0)
| ~ relation(esk4_0) ),
inference(spm,[status(thm)],[72,882,theory(equality)]) ).
cnf(12023,negated_conjecture,
( ~ in(esk3_0,relation_dom(esk4_0))
| $false
| ~ function(esk4_0)
| ~ relation(esk4_0) ),
inference(rw,[status(thm)],[11999,73,theory(equality)]) ).
cnf(12024,negated_conjecture,
( ~ in(esk3_0,relation_dom(esk4_0))
| $false
| $false
| ~ relation(esk4_0) ),
inference(rw,[status(thm)],[12023,74,theory(equality)]) ).
cnf(12025,negated_conjecture,
( ~ in(esk3_0,relation_dom(esk4_0))
| $false
| $false
| $false ),
inference(rw,[status(thm)],[12024,75,theory(equality)]) ).
cnf(12026,negated_conjecture,
~ in(esk3_0,relation_dom(esk4_0)),
inference(cn,[status(thm)],[12025,theory(equality)]) ).
cnf(12037,negated_conjecture,
( apply(esk4_0,esk3_0) = empty_set
| ~ function(esk4_0)
| ~ relation(esk4_0) ),
inference(spm,[status(thm)],[12026,284,theory(equality)]) ).
cnf(12045,negated_conjecture,
( apply(esk4_0,esk3_0) = empty_set
| $false
| ~ relation(esk4_0) ),
inference(rw,[status(thm)],[12037,74,theory(equality)]) ).
cnf(12046,negated_conjecture,
( apply(esk4_0,esk3_0) = empty_set
| $false
| $false ),
inference(rw,[status(thm)],[12045,75,theory(equality)]) ).
cnf(12047,negated_conjecture,
apply(esk4_0,esk3_0) = empty_set,
inference(cn,[status(thm)],[12046,theory(equality)]) ).
cnf(12060,negated_conjecture,
( in(esk3_0,relation_dom(esk4_0))
| $false ),
inference(rw,[status(thm)],[4280,12047,theory(equality)]) ).
cnf(12061,negated_conjecture,
in(esk3_0,relation_dom(esk4_0)),
inference(cn,[status(thm)],[12060,theory(equality)]) ).
cnf(12062,negated_conjecture,
$false,
inference(sr,[status(thm)],[12061,12026,theory(equality)]) ).
cnf(12063,negated_conjecture,
$false,
12062,
[proof] ).
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% % SZS status Started for /home/graph/tptp/TPTP/Problems/SEU/SEU225+3.p
% --creating new selector for []
% -running prover on /tmp/tmpKjYFMv/sel_SEU225+3.p_1 with time limit 29
% -prover status Theorem
% Problem SEU225+3.p solved in phase 0.
% % SZS status Theorem for /home/graph/tptp/TPTP/Problems/SEU/SEU225+3.p
% % SZS status Ended for /home/graph/tptp/TPTP/Problems/SEU/SEU225+3.p
% Solved 1 out of 1.
% # Problem is unsatisfiable (or provable), constructing proof object
% # SZS status Theorem
% # SZS output start CNFRefutation.
% See solution above
% # SZS output end CNFRefutation
%
%------------------------------------------------------------------------------