TSTP Solution File: REL002-1 by LEO-II---1.7.0
View Problem
- Process Solution
%------------------------------------------------------------------------------
% File : LEO-II---1.7.0
% Problem : REL002-1 : TPTP v8.1.0. Released v4.0.0.
% Transfm : none
% Format : tptp
% Command : leo --timeout %d --proofoutput 1 --foatp e --atp e=./eprover %s
% Computer : n015.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 : 600s
% DateTime : Mon Jul 18 19:38:16 EDT 2022
% Result : Unsatisfiable 0.22s 0.55s
% Output : CNFRefutation 0.22s
% Verified :
% SZS Type : Refutation
% Derivation depth : 7
% Number of leaves : 24
% Syntax : Number of formulae : 86 ( 77 unt; 9 typ; 0 def)
% Number of atoms : 199 ( 130 equ; 0 cnn)
% Maximal formula atoms : 1 ( 2 avg)
% Number of connectives : 442 ( 6 ~; 0 |; 0 &; 436 @)
% ( 0 <=>; 0 =>; 0 <=; 0 <~>)
% Maximal formula depth : 4 ( 2 avg)
% Number of types : 1 ( 0 usr)
% Number of type conns : 8 ( 8 >; 0 *; 0 +; 0 <<)
% Number of symbols : 12 ( 9 usr; 6 con; 0-2 aty)
% Number of variables : 130 ( 0 ^ 130 !; 0 ?; 130 :)
% Comments :
%------------------------------------------------------------------------------
thf(tp_complement,type,
complement: $i > $i ).
thf(tp_composition,type,
composition: $i > $i > $i ).
thf(tp_converse,type,
converse: $i > $i ).
thf(tp_join,type,
join: $i > $i > $i ).
thf(tp_meet,type,
meet: $i > $i > $i ).
thf(tp_one,type,
one: $i ).
thf(tp_sk1,type,
sk1: $i ).
thf(tp_top,type,
top: $i ).
thf(tp_zero,type,
zero: $i ).
thf(1,axiom,
! [A: $i] :
( zero
= ( meet @ A @ ( complement @ A ) ) ),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p',def_zero_13) ).
thf(2,axiom,
! [A: $i] :
( top
= ( join @ A @ ( complement @ A ) ) ),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p',def_top_12) ).
thf(3,axiom,
! [A: $i,B: $i] :
( ( join @ ( composition @ ( converse @ A ) @ ( complement @ ( composition @ A @ B ) ) ) @ ( complement @ B ) )
= ( complement @ B ) ),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p',converse_cancellativity_11) ).
thf(4,axiom,
! [A: $i,B: $i] :
( ( converse @ ( composition @ A @ B ) )
= ( composition @ ( converse @ B ) @ ( converse @ A ) ) ),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p',converse_multiplicativity_10) ).
thf(5,axiom,
! [A: $i,B: $i] :
( ( converse @ ( join @ A @ B ) )
= ( join @ ( converse @ A ) @ ( converse @ B ) ) ),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p',converse_additivity_9) ).
thf(6,axiom,
! [A: $i] :
( ( converse @ ( converse @ A ) )
= A ),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p',converse_idempotence_8) ).
thf(7,axiom,
! [A: $i,B: $i,C: $i] :
( ( composition @ ( join @ A @ B ) @ C )
= ( join @ ( composition @ A @ C ) @ ( composition @ B @ C ) ) ),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p',composition_distributivity_7) ).
thf(8,axiom,
! [A: $i] :
( ( composition @ A @ one )
= A ),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p',composition_identity_6) ).
thf(9,axiom,
! [A: $i,B: $i,C: $i] :
( ( composition @ A @ ( composition @ B @ C ) )
= ( composition @ ( composition @ A @ B ) @ C ) ),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p',composition_associativity_5) ).
thf(10,axiom,
! [A: $i,B: $i] :
( ( meet @ A @ B )
= ( complement @ ( join @ ( complement @ A ) @ ( complement @ B ) ) ) ),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p',maddux4_definiton_of_meet_4) ).
thf(11,axiom,
! [A: $i,B: $i] :
( A
= ( join @ ( complement @ ( join @ ( complement @ A ) @ ( complement @ B ) ) ) @ ( complement @ ( join @ ( complement @ A ) @ B ) ) ) ),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p',maddux3_a_kind_of_de_Morgan_3) ).
thf(12,axiom,
! [A: $i,B: $i,C: $i] :
( ( join @ A @ ( join @ B @ C ) )
= ( join @ ( join @ A @ B ) @ C ) ),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p',maddux2_join_associativity_2) ).
thf(13,axiom,
! [A: $i,B: $i] :
( ( join @ A @ B )
= ( join @ B @ A ) ),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p',maddux1_join_commutativity_1) ).
thf(14,conjecture,
$false,
file('no conjecture given, we try to refute the axioms',dummy_conjecture) ).
thf(15,negated_conjecture,
$false = $false,
inference(negate_conjecture,[status(cth)],[14]) ).
thf(16,negated_conjecture,
( join @ sk1 @ top )
!= top,
file('/export/starexec/sandbox2/benchmark/theBenchmark.p',goals_14) ).
thf(17,plain,
$false = $false,
inference(unfold_def,[status(thm)],[15]) ).
thf(18,plain,
( ( ! [A: $i] :
( zero
= ( meet @ A @ ( complement @ A ) ) ) )
= $true ),
inference(unfold_def,[status(thm)],[1]) ).
thf(19,plain,
( ( ! [A: $i] :
( top
= ( join @ A @ ( complement @ A ) ) ) )
= $true ),
inference(unfold_def,[status(thm)],[2]) ).
thf(20,plain,
( ( ! [A: $i,B: $i] :
( ( join @ ( composition @ ( converse @ A ) @ ( complement @ ( composition @ A @ B ) ) ) @ ( complement @ B ) )
= ( complement @ B ) ) )
= $true ),
inference(unfold_def,[status(thm)],[3]) ).
thf(21,plain,
( ( ! [A: $i,B: $i] :
( ( converse @ ( composition @ A @ B ) )
= ( composition @ ( converse @ B ) @ ( converse @ A ) ) ) )
= $true ),
inference(unfold_def,[status(thm)],[4]) ).
thf(22,plain,
( ( ! [A: $i,B: $i] :
( ( converse @ ( join @ A @ B ) )
= ( join @ ( converse @ A ) @ ( converse @ B ) ) ) )
= $true ),
inference(unfold_def,[status(thm)],[5]) ).
thf(23,plain,
( ( ! [A: $i] :
( ( converse @ ( converse @ A ) )
= A ) )
= $true ),
inference(unfold_def,[status(thm)],[6]) ).
thf(24,plain,
( ( ! [A: $i,B: $i,C: $i] :
( ( composition @ ( join @ A @ B ) @ C )
= ( join @ ( composition @ A @ C ) @ ( composition @ B @ C ) ) ) )
= $true ),
inference(unfold_def,[status(thm)],[7]) ).
thf(25,plain,
( ( ! [A: $i] :
( ( composition @ A @ one )
= A ) )
= $true ),
inference(unfold_def,[status(thm)],[8]) ).
thf(26,plain,
( ( ! [A: $i,B: $i,C: $i] :
( ( composition @ A @ ( composition @ B @ C ) )
= ( composition @ ( composition @ A @ B ) @ C ) ) )
= $true ),
inference(unfold_def,[status(thm)],[9]) ).
thf(27,plain,
( ( ! [A: $i,B: $i] :
( ( meet @ A @ B )
= ( complement @ ( join @ ( complement @ A ) @ ( complement @ B ) ) ) ) )
= $true ),
inference(unfold_def,[status(thm)],[10]) ).
thf(28,plain,
( ( ! [A: $i,B: $i] :
( A
= ( join @ ( complement @ ( join @ ( complement @ A ) @ ( complement @ B ) ) ) @ ( complement @ ( join @ ( complement @ A ) @ B ) ) ) ) )
= $true ),
inference(unfold_def,[status(thm)],[11]) ).
thf(29,plain,
( ( ! [A: $i,B: $i,C: $i] :
( ( join @ A @ ( join @ B @ C ) )
= ( join @ ( join @ A @ B ) @ C ) ) )
= $true ),
inference(unfold_def,[status(thm)],[12]) ).
thf(30,plain,
( ( ! [A: $i,B: $i] :
( ( join @ A @ B )
= ( join @ B @ A ) ) )
= $true ),
inference(unfold_def,[status(thm)],[13]) ).
thf(31,plain,
( ( ( ( join @ sk1 @ top )
!= top ) )
= $true ),
inference(unfold_def,[status(thm)],[16]) ).
thf(32,plain,
( ( ~ $false )
= $true ),
inference(polarity_switch,[status(thm)],[17]) ).
thf(33,plain,
( ( ( ( join @ sk1 @ top )
!= top ) )
= $true ),
inference(extcnf_combined,[status(esa)],[31]) ).
thf(34,plain,
( ( ( ( join @ sk1 @ top )
!= top ) )
= $true ),
inference(copy,[status(thm)],[33]) ).
thf(35,plain,
( ( ! [A: $i,B: $i] :
( ( join @ A @ B )
= ( join @ B @ A ) ) )
= $true ),
inference(copy,[status(thm)],[30]) ).
thf(36,plain,
( ( ! [A: $i,B: $i,C: $i] :
( ( join @ A @ ( join @ B @ C ) )
= ( join @ ( join @ A @ B ) @ C ) ) )
= $true ),
inference(copy,[status(thm)],[29]) ).
thf(37,plain,
( ( ! [A: $i,B: $i] :
( A
= ( join @ ( complement @ ( join @ ( complement @ A ) @ ( complement @ B ) ) ) @ ( complement @ ( join @ ( complement @ A ) @ B ) ) ) ) )
= $true ),
inference(copy,[status(thm)],[28]) ).
thf(38,plain,
( ( ! [A: $i,B: $i] :
( ( meet @ A @ B )
= ( complement @ ( join @ ( complement @ A ) @ ( complement @ B ) ) ) ) )
= $true ),
inference(copy,[status(thm)],[27]) ).
thf(39,plain,
( ( ! [A: $i,B: $i,C: $i] :
( ( composition @ A @ ( composition @ B @ C ) )
= ( composition @ ( composition @ A @ B ) @ C ) ) )
= $true ),
inference(copy,[status(thm)],[26]) ).
thf(40,plain,
( ( ! [A: $i] :
( ( composition @ A @ one )
= A ) )
= $true ),
inference(copy,[status(thm)],[25]) ).
thf(41,plain,
( ( ! [A: $i,B: $i,C: $i] :
( ( composition @ ( join @ A @ B ) @ C )
= ( join @ ( composition @ A @ C ) @ ( composition @ B @ C ) ) ) )
= $true ),
inference(copy,[status(thm)],[24]) ).
thf(42,plain,
( ( ! [A: $i] :
( ( converse @ ( converse @ A ) )
= A ) )
= $true ),
inference(copy,[status(thm)],[23]) ).
thf(43,plain,
( ( ! [A: $i,B: $i] :
( ( converse @ ( join @ A @ B ) )
= ( join @ ( converse @ A ) @ ( converse @ B ) ) ) )
= $true ),
inference(copy,[status(thm)],[22]) ).
thf(44,plain,
( ( ! [A: $i,B: $i] :
( ( converse @ ( composition @ A @ B ) )
= ( composition @ ( converse @ B ) @ ( converse @ A ) ) ) )
= $true ),
inference(copy,[status(thm)],[21]) ).
thf(45,plain,
( ( ! [A: $i,B: $i] :
( ( join @ ( composition @ ( converse @ A ) @ ( complement @ ( composition @ A @ B ) ) ) @ ( complement @ B ) )
= ( complement @ B ) ) )
= $true ),
inference(copy,[status(thm)],[20]) ).
thf(46,plain,
( ( ! [A: $i] :
( top
= ( join @ A @ ( complement @ A ) ) ) )
= $true ),
inference(copy,[status(thm)],[19]) ).
thf(47,plain,
( ( ! [A: $i] :
( zero
= ( meet @ A @ ( complement @ A ) ) ) )
= $true ),
inference(copy,[status(thm)],[18]) ).
thf(48,plain,
( ( ~ $false )
= $true ),
inference(copy,[status(thm)],[32]) ).
thf(49,plain,
( ( ( join @ sk1 @ top )
= top )
= $false ),
inference(extcnf_not_pos,[status(thm)],[34]) ).
thf(50,plain,
! [SV1: $i] :
( ( ! [SY25: $i] :
( ( join @ SV1 @ SY25 )
= ( join @ SY25 @ SV1 ) ) )
= $true ),
inference(extcnf_forall_pos,[status(thm)],[35]) ).
thf(51,plain,
! [SV2: $i] :
( ( ! [SY26: $i,SY27: $i] :
( ( join @ SV2 @ ( join @ SY26 @ SY27 ) )
= ( join @ ( join @ SV2 @ SY26 ) @ SY27 ) ) )
= $true ),
inference(extcnf_forall_pos,[status(thm)],[36]) ).
thf(52,plain,
! [SV3: $i] :
( ( ! [SY28: $i] :
( SV3
= ( join @ ( complement @ ( join @ ( complement @ SV3 ) @ ( complement @ SY28 ) ) ) @ ( complement @ ( join @ ( complement @ SV3 ) @ SY28 ) ) ) ) )
= $true ),
inference(extcnf_forall_pos,[status(thm)],[37]) ).
thf(53,plain,
! [SV4: $i] :
( ( ! [SY29: $i] :
( ( meet @ SV4 @ SY29 )
= ( complement @ ( join @ ( complement @ SV4 ) @ ( complement @ SY29 ) ) ) ) )
= $true ),
inference(extcnf_forall_pos,[status(thm)],[38]) ).
thf(54,plain,
! [SV5: $i] :
( ( ! [SY30: $i,SY31: $i] :
( ( composition @ SV5 @ ( composition @ SY30 @ SY31 ) )
= ( composition @ ( composition @ SV5 @ SY30 ) @ SY31 ) ) )
= $true ),
inference(extcnf_forall_pos,[status(thm)],[39]) ).
thf(55,plain,
! [SV6: $i] :
( ( ( composition @ SV6 @ one )
= SV6 )
= $true ),
inference(extcnf_forall_pos,[status(thm)],[40]) ).
thf(56,plain,
! [SV7: $i] :
( ( ! [SY32: $i,SY33: $i] :
( ( composition @ ( join @ SV7 @ SY32 ) @ SY33 )
= ( join @ ( composition @ SV7 @ SY33 ) @ ( composition @ SY32 @ SY33 ) ) ) )
= $true ),
inference(extcnf_forall_pos,[status(thm)],[41]) ).
thf(57,plain,
! [SV8: $i] :
( ( ( converse @ ( converse @ SV8 ) )
= SV8 )
= $true ),
inference(extcnf_forall_pos,[status(thm)],[42]) ).
thf(58,plain,
! [SV9: $i] :
( ( ! [SY34: $i] :
( ( converse @ ( join @ SV9 @ SY34 ) )
= ( join @ ( converse @ SV9 ) @ ( converse @ SY34 ) ) ) )
= $true ),
inference(extcnf_forall_pos,[status(thm)],[43]) ).
thf(59,plain,
! [SV10: $i] :
( ( ! [SY35: $i] :
( ( converse @ ( composition @ SV10 @ SY35 ) )
= ( composition @ ( converse @ SY35 ) @ ( converse @ SV10 ) ) ) )
= $true ),
inference(extcnf_forall_pos,[status(thm)],[44]) ).
thf(60,plain,
! [SV11: $i] :
( ( ! [SY36: $i] :
( ( join @ ( composition @ ( converse @ SV11 ) @ ( complement @ ( composition @ SV11 @ SY36 ) ) ) @ ( complement @ SY36 ) )
= ( complement @ SY36 ) ) )
= $true ),
inference(extcnf_forall_pos,[status(thm)],[45]) ).
thf(61,plain,
! [SV12: $i] :
( ( top
= ( join @ SV12 @ ( complement @ SV12 ) ) )
= $true ),
inference(extcnf_forall_pos,[status(thm)],[46]) ).
thf(62,plain,
! [SV13: $i] :
( ( zero
= ( meet @ SV13 @ ( complement @ SV13 ) ) )
= $true ),
inference(extcnf_forall_pos,[status(thm)],[47]) ).
thf(63,plain,
$false = $false,
inference(extcnf_not_pos,[status(thm)],[48]) ).
thf(64,plain,
! [SV14: $i,SV1: $i] :
( ( ( join @ SV1 @ SV14 )
= ( join @ SV14 @ SV1 ) )
= $true ),
inference(extcnf_forall_pos,[status(thm)],[50]) ).
thf(65,plain,
! [SV15: $i,SV2: $i] :
( ( ! [SY37: $i] :
( ( join @ SV2 @ ( join @ SV15 @ SY37 ) )
= ( join @ ( join @ SV2 @ SV15 ) @ SY37 ) ) )
= $true ),
inference(extcnf_forall_pos,[status(thm)],[51]) ).
thf(66,plain,
! [SV16: $i,SV3: $i] :
( ( SV3
= ( join @ ( complement @ ( join @ ( complement @ SV3 ) @ ( complement @ SV16 ) ) ) @ ( complement @ ( join @ ( complement @ SV3 ) @ SV16 ) ) ) )
= $true ),
inference(extcnf_forall_pos,[status(thm)],[52]) ).
thf(67,plain,
! [SV17: $i,SV4: $i] :
( ( ( meet @ SV4 @ SV17 )
= ( complement @ ( join @ ( complement @ SV4 ) @ ( complement @ SV17 ) ) ) )
= $true ),
inference(extcnf_forall_pos,[status(thm)],[53]) ).
thf(68,plain,
! [SV18: $i,SV5: $i] :
( ( ! [SY38: $i] :
( ( composition @ SV5 @ ( composition @ SV18 @ SY38 ) )
= ( composition @ ( composition @ SV5 @ SV18 ) @ SY38 ) ) )
= $true ),
inference(extcnf_forall_pos,[status(thm)],[54]) ).
thf(69,plain,
! [SV19: $i,SV7: $i] :
( ( ! [SY39: $i] :
( ( composition @ ( join @ SV7 @ SV19 ) @ SY39 )
= ( join @ ( composition @ SV7 @ SY39 ) @ ( composition @ SV19 @ SY39 ) ) ) )
= $true ),
inference(extcnf_forall_pos,[status(thm)],[56]) ).
thf(70,plain,
! [SV20: $i,SV9: $i] :
( ( ( converse @ ( join @ SV9 @ SV20 ) )
= ( join @ ( converse @ SV9 ) @ ( converse @ SV20 ) ) )
= $true ),
inference(extcnf_forall_pos,[status(thm)],[58]) ).
thf(71,plain,
! [SV21: $i,SV10: $i] :
( ( ( converse @ ( composition @ SV10 @ SV21 ) )
= ( composition @ ( converse @ SV21 ) @ ( converse @ SV10 ) ) )
= $true ),
inference(extcnf_forall_pos,[status(thm)],[59]) ).
thf(72,plain,
! [SV22: $i,SV11: $i] :
( ( ( join @ ( composition @ ( converse @ SV11 ) @ ( complement @ ( composition @ SV11 @ SV22 ) ) ) @ ( complement @ SV22 ) )
= ( complement @ SV22 ) )
= $true ),
inference(extcnf_forall_pos,[status(thm)],[60]) ).
thf(73,plain,
! [SV23: $i,SV15: $i,SV2: $i] :
( ( ( join @ SV2 @ ( join @ SV15 @ SV23 ) )
= ( join @ ( join @ SV2 @ SV15 ) @ SV23 ) )
= $true ),
inference(extcnf_forall_pos,[status(thm)],[65]) ).
thf(74,plain,
! [SV24: $i,SV18: $i,SV5: $i] :
( ( ( composition @ SV5 @ ( composition @ SV18 @ SV24 ) )
= ( composition @ ( composition @ SV5 @ SV18 ) @ SV24 ) )
= $true ),
inference(extcnf_forall_pos,[status(thm)],[68]) ).
thf(75,plain,
! [SV25: $i,SV19: $i,SV7: $i] :
( ( ( composition @ ( join @ SV7 @ SV19 ) @ SV25 )
= ( join @ ( composition @ SV7 @ SV25 ) @ ( composition @ SV19 @ SV25 ) ) )
= $true ),
inference(extcnf_forall_pos,[status(thm)],[69]) ).
thf(76,plain,
$false = $true,
inference(fo_atp_e,[status(thm)],[49,75,74,73,72,71,70,67,66,64,63,62,61,57,55]) ).
thf(77,plain,
$false,
inference(solved_all_splits,[solved_all_splits(join,[])],[76]) ).
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.09/0.14 % Problem : REL002-1 : TPTP v8.1.0. Released v4.0.0.
% 0.09/0.15 % Command : leo --timeout %d --proofoutput 1 --foatp e --atp e=./eprover %s
% 0.15/0.37 % Computer : n015.cluster.edu
% 0.15/0.37 % Model : x86_64 x86_64
% 0.15/0.37 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.15/0.37 % Memory : 8042.1875MB
% 0.15/0.37 % OS : Linux 3.10.0-693.el7.x86_64
% 0.15/0.37 % CPULimit : 300
% 0.15/0.37 % WCLimit : 600
% 0.15/0.37 % DateTime : Fri Jul 8 11:37:21 EDT 2022
% 0.15/0.37 % CPUTime :
% 0.15/0.38
% 0.15/0.38 No.of.Axioms: 14
% 0.15/0.38
% 0.15/0.38 Length.of.Defs: 0
% 0.15/0.38
% 0.15/0.38 Contains.Choice.Funs: false
% 0.15/0.39 (rf:0,axioms:14,ps:3,u:6,ude:true,rLeibEQ:true,rAndEQ:true,use_choice:true,use_extuni:true,use_extcnf_combined:true,expand_extuni:false,foatp:e,atp_timeout:600,atp_calls_frequency:10,ordering:none,proof_output:1,protocol_output:false,clause_count:16,loop_count:0,foatp_calls:0,translation:fof_full)....
% 0.22/0.55
% 0.22/0.55 ********************************
% 0.22/0.55 * All subproblems solved! *
% 0.22/0.55 ********************************
% 0.22/0.55 % SZS status Unsatisfiable for /export/starexec/sandbox2/benchmark/theBenchmark.p : (rf:0,axioms:14,ps:3,u:6,ude:true,rLeibEQ:true,rAndEQ:true,use_choice:true,use_extuni:true,use_extcnf_combined:true,expand_extuni:false,foatp:e,atp_timeout:74,atp_calls_frequency:10,ordering:none,proof_output:1,protocol_output:false,clause_count:76,loop_count:0,foatp_calls:1,translation:fof_full)
% 0.22/0.55
% 0.22/0.55 %**** Beginning of derivation protocol ****
% 0.22/0.55 % SZS output start CNFRefutation
% See solution above
% 0.22/0.55
% 0.22/0.55 %**** End of derivation protocol ****
% 0.22/0.55 %**** no. of clauses in derivation: 77 ****
% 0.22/0.55 %**** clause counter: 76 ****
% 0.22/0.55
% 0.22/0.55 % SZS status Unsatisfiable for /export/starexec/sandbox2/benchmark/theBenchmark.p : (rf:0,axioms:14,ps:3,u:6,ude:true,rLeibEQ:true,rAndEQ:true,use_choice:true,use_extuni:true,use_extcnf_combined:true,expand_extuni:false,foatp:e,atp_timeout:74,atp_calls_frequency:10,ordering:none,proof_output:1,protocol_output:false,clause_count:76,loop_count:0,foatp_calls:1,translation:fof_full)
%------------------------------------------------------------------------------