TSTP Solution File: NUM561+2 by cvc5---1.0.5

View Problem - Process Solution

%------------------------------------------------------------------------------
% File     : cvc5---1.0.5
% Problem  : NUM561+2 : TPTP v8.1.2. Released v4.0.0.
% Transfm  : none
% Format   : tptp
% Command  : do_cvc5 %s %d

% Computer : n016.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 : Thu Aug 31 10:45:06 EDT 2023

% Result   : Theorem 0.22s 0.59s
% Output   : Proof 0.22s
% Verified : 
% SZS Type : -

% Comments : 
%------------------------------------------------------------------------------
%----WARNING: Could not form TPTP format derivation
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.00/0.13  % Problem    : NUM561+2 : TPTP v8.1.2. Released v4.0.0.
% 0.00/0.14  % Command    : do_cvc5 %s %d
% 0.18/0.36  % Computer : n016.cluster.edu
% 0.18/0.36  % Model    : x86_64 x86_64
% 0.18/0.36  % CPU      : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.18/0.36  % Memory   : 8042.1875MB
% 0.18/0.36  % OS       : Linux 3.10.0-693.el7.x86_64
% 0.18/0.36  % CPULimit   : 300
% 0.18/0.36  % WCLimit    : 300
% 0.18/0.36  % DateTime   : Fri Aug 25 14:34:55 EDT 2023
% 0.18/0.36  % CPUTime    : 
% 0.22/0.50  %----Proving TF0_NAR, FOF, or CNF
% 0.22/0.59  ------- convert to smt2 : /export/starexec/sandbox2/tmp/tmp.yWP0Xqamna/cvc5---1.0.5_28647.p...
% 0.22/0.59  ------- get file name : TPTP file name is NUM561+2
% 0.22/0.59  ------- cvc5-fof : /export/starexec/sandbox2/solver/bin/cvc5---1.0.5_28647.smt2...
% 0.22/0.59  --- Run --decision=internal --simplification=none --no-inst-no-entail --no-cbqi --full-saturate-quant at 10...
% 0.22/0.59  % SZS status Theorem for NUM561+2
% 0.22/0.59  % SZS output start Proof for NUM561+2
% 0.22/0.59  (
% 0.22/0.59  (let ((_let_1 (tptp.szDzozmdt0 tptp.xF))) (let ((_let_2 (not (or (exists ((W0 $$unsorted)) (and (tptp.aElementOf0 W0 (tptp.szDzozmdt0 tptp.xF)) (= (tptp.sdtlpdtrp0 tptp.xF W0) (tptp.sdtlpdtrp0 tptp.xF tptp.xx)))) (tptp.aElementOf0 (tptp.sdtlpdtrp0 tptp.xF tptp.xx) (tptp.sdtlcdtrc0 tptp.xF _let_1)))))) (let ((_let_3 (tptp.aElementOf0 tptp.xx _let_1))) (let ((_let_4 (forall ((W0 $$unsorted)) (or (not (tptp.aElementOf0 W0 (tptp.szDzozmdt0 tptp.xF))) (not (= (tptp.sdtlpdtrp0 tptp.xF W0) (tptp.sdtlpdtrp0 tptp.xF tptp.xx))))))) (let ((_let_5 (_let_4))) (SCOPE (SCOPE (MACRO_RESOLUTION_TRUST (IMPLIES_ELIM (MACRO_SR_PRED_ELIM (SCOPE (INSTANTIATE (ASSUME :args _let_5) :args (tptp.xx QUANTIFIERS_INST_E_MATCHING_SIMPLE ((not (= (tptp.aElementOf0 W0 _let_1) false))))) :args _let_5))) (NOT_NOT_ELIM (NOT_OR_ELIM (EQ_RESOLVE (ASSUME :args (_let_2)) (MACRO_SR_EQ_INTRO :args (_let_2 SB_DEFAULT SBA_FIXPOINT))) :args (0))) (ASSUME :args (_let_3)) :args (false false _let_4 false _let_3)) :args ((forall ((W0 $$unsorted)) (=> (tptp.aSet0 W0) true)) (forall ((W0 $$unsorted)) (=> (tptp.aElement0 W0) true)) (forall ((W0 $$unsorted)) (=> (tptp.aSet0 W0) (forall ((W1 $$unsorted)) (=> (tptp.aElementOf0 W1 W0) (tptp.aElement0 W1))))) (forall ((W0 $$unsorted)) (=> (tptp.aSet0 W0) (=> (tptp.isFinite0 W0) true))) (forall ((W0 $$unsorted)) (= (= W0 tptp.slcrc0) (and (tptp.aSet0 W0) (not (exists ((W1 $$unsorted)) (tptp.aElementOf0 W1 W0)))))) (tptp.isFinite0 tptp.slcrc0) (forall ((W0 $$unsorted)) (=> (tptp.aSet0 W0) (=> (tptp.isCountable0 W0) true))) (forall ((W0 $$unsorted)) (=> (and (tptp.aSet0 W0) (tptp.isCountable0 W0)) (not (tptp.isFinite0 W0)))) (forall ((W0 $$unsorted)) (=> (and (tptp.aSet0 W0) (tptp.isCountable0 W0)) (not (= W0 tptp.slcrc0)))) (forall ((W0 $$unsorted)) (=> (tptp.aSet0 W0) (forall ((W1 $$unsorted)) (= (tptp.aSubsetOf0 W1 W0) (and (tptp.aSet0 W1) (forall ((W2 $$unsorted)) (=> (tptp.aElementOf0 W2 W1) (tptp.aElementOf0 W2 W0)))))))) (forall ((W0 $$unsorted)) (=> (and (tptp.aSet0 W0) (tptp.isFinite0 W0)) (forall ((W1 $$unsorted)) (=> (tptp.aSubsetOf0 W1 W0) (tptp.isFinite0 W1))))) (forall ((W0 $$unsorted)) (=> (tptp.aSet0 W0) (tptp.aSubsetOf0 W0 W0))) (forall ((W0 $$unsorted) (W1 $$unsorted)) (=> (and (tptp.aSet0 W0) (tptp.aSet0 W1)) (=> (and (tptp.aSubsetOf0 W0 W1) (tptp.aSubsetOf0 W1 W0)) (= W0 W1)))) (forall ((W0 $$unsorted) (W1 $$unsorted) (W2 $$unsorted)) (=> (and (tptp.aSet0 W0) (tptp.aSet0 W1) (tptp.aSet0 W2)) (=> (and (tptp.aSubsetOf0 W0 W1) (tptp.aSubsetOf0 W1 W2)) (tptp.aSubsetOf0 W0 W2)))) (forall ((W0 $$unsorted) (W1 $$unsorted)) (=> (and (tptp.aSet0 W0) (tptp.aElement0 W1)) (forall ((W2 $$unsorted)) (= (= W2 (tptp.sdtpldt0 W0 W1)) (and (tptp.aSet0 W2) (forall ((W3 $$unsorted)) (= (tptp.aElementOf0 W3 W2) (and (tptp.aElement0 W3) (or (tptp.aElementOf0 W3 W0) (= W3 W1)))))))))) (forall ((W0 $$unsorted) (W1 $$unsorted)) (=> (and (tptp.aSet0 W0) (tptp.aElement0 W1)) (forall ((W2 $$unsorted)) (= (= W2 (tptp.sdtmndt0 W0 W1)) (and (tptp.aSet0 W2) (forall ((W3 $$unsorted)) (= (tptp.aElementOf0 W3 W2) (and (tptp.aElement0 W3) (tptp.aElementOf0 W3 W0) (not (= W3 W1)))))))))) (forall ((W0 $$unsorted)) (=> (tptp.aSet0 W0) (forall ((W1 $$unsorted)) (=> (tptp.aElementOf0 W1 W0) (= (tptp.sdtpldt0 (tptp.sdtmndt0 W0 W1) W1) W0))))) (forall ((W0 $$unsorted) (W1 $$unsorted)) (=> (and (tptp.aElement0 W0) (tptp.aSet0 W1)) (=> (not (tptp.aElementOf0 W0 W1)) (= (tptp.sdtmndt0 (tptp.sdtpldt0 W1 W0) W0) W1)))) (forall ((W0 $$unsorted)) (=> (tptp.aElement0 W0) (forall ((W1 $$unsorted)) (=> (and (tptp.aSet0 W1) (tptp.isCountable0 W1)) (tptp.isCountable0 (tptp.sdtpldt0 W1 W0)))))) (forall ((W0 $$unsorted)) (=> (tptp.aElement0 W0) (forall ((W1 $$unsorted)) (=> (and (tptp.aSet0 W1) (tptp.isCountable0 W1)) (tptp.isCountable0 (tptp.sdtmndt0 W1 W0)))))) (forall ((W0 $$unsorted)) (=> (tptp.aElement0 W0) (forall ((W1 $$unsorted)) (=> (and (tptp.aSet0 W1) (tptp.isFinite0 W1)) (tptp.isFinite0 (tptp.sdtpldt0 W1 W0)))))) (forall ((W0 $$unsorted)) (=> (tptp.aElement0 W0) (forall ((W1 $$unsorted)) (=> (and (tptp.aSet0 W1) (tptp.isFinite0 W1)) (tptp.isFinite0 (tptp.sdtmndt0 W1 W0)))))) (and (tptp.aSet0 tptp.szNzAzT0) (tptp.isCountable0 tptp.szNzAzT0)) (tptp.aElementOf0 tptp.sz00 tptp.szNzAzT0) (forall ((W0 $$unsorted)) (let ((_let_1 (tptp.szszuzczcdt0 W0))) (=> (tptp.aElementOf0 W0 tptp.szNzAzT0) (and (tptp.aElementOf0 _let_1 tptp.szNzAzT0) (not (= _let_1 tptp.sz00)))))) (forall ((W0 $$unsorted) (W1 $$unsorted)) (=> (and (tptp.aElementOf0 W0 tptp.szNzAzT0) (tptp.aElementOf0 W1 tptp.szNzAzT0)) (=> (= (tptp.szszuzczcdt0 W0) (tptp.szszuzczcdt0 W1)) (= W0 W1)))) (forall ((W0 $$unsorted)) (=> (tptp.aElementOf0 W0 tptp.szNzAzT0) (or (= W0 tptp.sz00) (exists ((W1 $$unsorted)) (and (tptp.aElementOf0 W1 tptp.szNzAzT0) (= W0 (tptp.szszuzczcdt0 W1))))))) (forall ((W0 $$unsorted)) (=> (tptp.aElementOf0 W0 tptp.szNzAzT0) (not (= W0 (tptp.szszuzczcdt0 W0))))) (forall ((W0 $$unsorted) (W1 $$unsorted)) (=> (and (tptp.aElementOf0 W0 tptp.szNzAzT0) (tptp.aElementOf0 W1 tptp.szNzAzT0)) (=> (tptp.sdtlseqdt0 W0 W1) true))) (forall ((W0 $$unsorted)) (=> (tptp.aElementOf0 W0 tptp.szNzAzT0) (tptp.sdtlseqdt0 tptp.sz00 W0))) (forall ((W0 $$unsorted)) (=> (tptp.aElementOf0 W0 tptp.szNzAzT0) (not (tptp.sdtlseqdt0 (tptp.szszuzczcdt0 W0) tptp.sz00)))) (forall ((W0 $$unsorted) (W1 $$unsorted)) (=> (and (tptp.aElementOf0 W0 tptp.szNzAzT0) (tptp.aElementOf0 W1 tptp.szNzAzT0)) (= (tptp.sdtlseqdt0 W0 W1) (tptp.sdtlseqdt0 (tptp.szszuzczcdt0 W0) (tptp.szszuzczcdt0 W1))))) (forall ((W0 $$unsorted)) (=> (tptp.aElementOf0 W0 tptp.szNzAzT0) (tptp.sdtlseqdt0 W0 (tptp.szszuzczcdt0 W0)))) (forall ((W0 $$unsorted)) (=> (tptp.aElementOf0 W0 tptp.szNzAzT0) (tptp.sdtlseqdt0 W0 W0))) (forall ((W0 $$unsorted) (W1 $$unsorted)) (=> (and (tptp.aElementOf0 W0 tptp.szNzAzT0) (tptp.aElementOf0 W1 tptp.szNzAzT0)) (=> (and (tptp.sdtlseqdt0 W0 W1) (tptp.sdtlseqdt0 W1 W0)) (= W0 W1)))) (forall ((W0 $$unsorted) (W1 $$unsorted) (W2 $$unsorted)) (=> (and (tptp.aElementOf0 W0 tptp.szNzAzT0) (tptp.aElementOf0 W1 tptp.szNzAzT0) (tptp.aElementOf0 W2 tptp.szNzAzT0)) (=> (and (tptp.sdtlseqdt0 W0 W1) (tptp.sdtlseqdt0 W1 W2)) (tptp.sdtlseqdt0 W0 W2)))) (forall ((W0 $$unsorted) (W1 $$unsorted)) (=> (and (tptp.aElementOf0 W0 tptp.szNzAzT0) (tptp.aElementOf0 W1 tptp.szNzAzT0)) (or (tptp.sdtlseqdt0 W0 W1) (tptp.sdtlseqdt0 (tptp.szszuzczcdt0 W1) W0)))) (forall ((W0 $$unsorted) (W1 $$unsorted)) (=> (and (tptp.aElementOf0 W0 tptp.szNzAzT0) (tptp.aElementOf0 W1 tptp.szNzAzT0)) (=> (tptp.iLess0 W0 W1) true))) (forall ((W0 $$unsorted)) (=> (tptp.aElementOf0 W0 tptp.szNzAzT0) (tptp.iLess0 W0 (tptp.szszuzczcdt0 W0)))) (forall ((W0 $$unsorted)) (=> (tptp.aSet0 W0) (tptp.aElement0 (tptp.sbrdtbr0 W0)))) (forall ((W0 $$unsorted)) (=> (tptp.aSet0 W0) (= (tptp.aElementOf0 (tptp.sbrdtbr0 W0) tptp.szNzAzT0) (tptp.isFinite0 W0)))) (forall ((W0 $$unsorted)) (=> (tptp.aSet0 W0) (= (= (tptp.sbrdtbr0 W0) tptp.sz00) (= W0 tptp.slcrc0)))) (forall ((W0 $$unsorted)) (=> (and (tptp.aSet0 W0) (tptp.isFinite0 W0)) (forall ((W1 $$unsorted)) (=> (tptp.aElement0 W1) (=> (not (tptp.aElementOf0 W1 W0)) (= (tptp.sbrdtbr0 (tptp.sdtpldt0 W0 W1)) (tptp.szszuzczcdt0 (tptp.sbrdtbr0 W0)))))))) (forall ((W0 $$unsorted)) (=> (tptp.aSet0 W0) (forall ((W1 $$unsorted)) (=> (and (tptp.isFinite0 W0) (tptp.aElementOf0 W1 W0)) (= (tptp.szszuzczcdt0 (tptp.sbrdtbr0 (tptp.sdtmndt0 W0 W1))) (tptp.sbrdtbr0 W0)))))) (forall ((W0 $$unsorted)) (=> (tptp.aSet0 W0) (forall ((W1 $$unsorted)) (=> (and (tptp.isFinite0 W0) (tptp.aSubsetOf0 W1 W0)) (tptp.sdtlseqdt0 (tptp.sbrdtbr0 W1) (tptp.sbrdtbr0 W0)))))) (forall ((W0 $$unsorted) (W1 $$unsorted)) (=> (and (tptp.aSet0 W0) (tptp.aElementOf0 W1 tptp.szNzAzT0)) (=> (and (tptp.isFinite0 W0) (tptp.sdtlseqdt0 W1 (tptp.sbrdtbr0 W0))) (exists ((W2 $$unsorted)) (and (tptp.aSubsetOf0 W2 W0) (= (tptp.sbrdtbr0 W2) W1)))))) (forall ((W0 $$unsorted)) (=> (and (tptp.aSubsetOf0 W0 tptp.szNzAzT0) (not (= W0 tptp.slcrc0))) (forall ((W1 $$unsorted)) (= (= W1 (tptp.szmzizndt0 W0)) (and (tptp.aElementOf0 W1 W0) (forall ((W2 $$unsorted)) (=> (tptp.aElementOf0 W2 W0) (tptp.sdtlseqdt0 W1 W2)))))))) (forall ((W0 $$unsorted)) (=> (and (tptp.aSubsetOf0 W0 tptp.szNzAzT0) (tptp.isFinite0 W0) (not (= W0 tptp.slcrc0))) (forall ((W1 $$unsorted)) (= (= W1 (tptp.szmzazxdt0 W0)) (and (tptp.aElementOf0 W1 W0) (forall ((W2 $$unsorted)) (=> (tptp.aElementOf0 W2 W0) (tptp.sdtlseqdt0 W2 W1)))))))) (forall ((W0 $$unsorted) (W1 $$unsorted)) (let ((_let_1 (tptp.szmzizndt0 W1))) (let ((_let_2 (tptp.szmzizndt0 W0))) (=> (and (tptp.aSubsetOf0 W0 tptp.szNzAzT0) (tptp.aSubsetOf0 W1 tptp.szNzAzT0) (not (= W0 tptp.slcrc0)) (not (= W1 tptp.slcrc0))) (=> (and (tptp.aElementOf0 _let_2 W1) (tptp.aElementOf0 _let_1 W0)) (= _let_2 _let_1)))))) (forall ((W0 $$unsorted)) (=> (tptp.aElementOf0 W0 tptp.szNzAzT0) (forall ((W1 $$unsorted)) (= (= W1 (tptp.slbdtrb0 W0)) (and (tptp.aSet0 W1) (forall ((W2 $$unsorted)) (= (tptp.aElementOf0 W2 W1) (and (tptp.aElementOf0 W2 tptp.szNzAzT0) (tptp.sdtlseqdt0 (tptp.szszuzczcdt0 W2) W0))))))))) (forall ((W0 $$unsorted)) (=> (tptp.aElementOf0 W0 tptp.szNzAzT0) (tptp.isFinite0 (tptp.slbdtrb0 W0)))) (= (tptp.slbdtrb0 tptp.sz00) tptp.slcrc0) (forall ((W0 $$unsorted) (W1 $$unsorted)) (=> (and (tptp.aElementOf0 W0 tptp.szNzAzT0) (tptp.aElementOf0 W1 tptp.szNzAzT0)) (= (tptp.aElementOf0 W0 (tptp.slbdtrb0 (tptp.szszuzczcdt0 W1))) (or (tptp.aElementOf0 W0 (tptp.slbdtrb0 W1)) (= W0 W1))))) (forall ((W0 $$unsorted) (W1 $$unsorted)) (=> (and (tptp.aElementOf0 W0 tptp.szNzAzT0) (tptp.aElementOf0 W1 tptp.szNzAzT0)) (= (tptp.sdtlseqdt0 W0 W1) (tptp.aSubsetOf0 (tptp.slbdtrb0 W0) (tptp.slbdtrb0 W1))))) (forall ((W0 $$unsorted)) (=> (and (tptp.aSubsetOf0 W0 tptp.szNzAzT0) (tptp.isFinite0 W0)) (exists ((W1 $$unsorted)) (and (tptp.aElementOf0 W1 tptp.szNzAzT0) (tptp.aSubsetOf0 W0 (tptp.slbdtrb0 W1)))))) (forall ((W0 $$unsorted)) (=> (tptp.aElementOf0 W0 tptp.szNzAzT0) (= (tptp.sbrdtbr0 (tptp.slbdtrb0 W0)) W0))) (forall ((W0 $$unsorted) (W1 $$unsorted)) (=> (and (tptp.aSet0 W0) (tptp.aElementOf0 W1 tptp.szNzAzT0)) (forall ((W2 $$unsorted)) (= (= W2 (tptp.slbdtsldtrb0 W0 W1)) (and (tptp.aSet0 W2) (forall ((W3 $$unsorted)) (= (tptp.aElementOf0 W3 W2) (and (tptp.aSubsetOf0 W3 W0) (= (tptp.sbrdtbr0 W3) W1))))))))) (forall ((W0 $$unsorted)) (=> (and (tptp.aSet0 W0) (tptp.isFinite0 W0)) (forall ((W1 $$unsorted)) (=> (tptp.aElementOf0 W1 tptp.szNzAzT0) (tptp.isFinite0 (tptp.slbdtsldtrb0 W0 W1)))))) (forall ((W0 $$unsorted)) (=> (and (tptp.aSet0 W0) (not (tptp.isFinite0 W0))) (forall ((W1 $$unsorted)) (=> (tptp.aElementOf0 W1 tptp.szNzAzT0) (not (= (tptp.slbdtsldtrb0 W0 W1) tptp.slcrc0)))))) (forall ((W0 $$unsorted)) (=> (and (tptp.aSet0 W0) (tptp.isCountable0 W0)) (forall ((W1 $$unsorted)) (=> (and (tptp.aElementOf0 W1 tptp.szNzAzT0) (not (= W1 tptp.sz00))) (tptp.isCountable0 (tptp.slbdtsldtrb0 W0 W1)))))) (forall ((W0 $$unsorted)) (=> (tptp.aElementOf0 W0 tptp.szNzAzT0) (forall ((W1 $$unsorted) (W2 $$unsorted)) (let ((_let_1 (tptp.slbdtsldtrb0 W1 W0))) (=> (and (tptp.aSet0 W1) (tptp.aSet0 W2) (not (= W0 tptp.sz00))) (=> (and (tptp.aSubsetOf0 _let_1 (tptp.slbdtsldtrb0 W2 W0)) (not (= _let_1 tptp.slcrc0))) (tptp.aSubsetOf0 W1 W2))))))) (forall ((W0 $$unsorted) (W1 $$unsorted)) (=> (and (tptp.aSet0 W0) (tptp.aElementOf0 W1 tptp.szNzAzT0)) (forall ((W2 $$unsorted)) (=> (and (tptp.aSubsetOf0 W2 (tptp.slbdtsldtrb0 W0 W1)) (tptp.isFinite0 W2)) (exists ((W3 $$unsorted)) (and (tptp.aSubsetOf0 W3 W0) (tptp.isFinite0 W3) (tptp.aSubsetOf0 W2 (tptp.slbdtsldtrb0 W3 W1)))))))) (forall ((W0 $$unsorted)) (=> (tptp.aFunction0 W0) true)) (forall ((W0 $$unsorted)) (=> (tptp.aFunction0 W0) (tptp.aSet0 (tptp.szDzozmdt0 W0)))) (forall ((W0 $$unsorted)) (=> (tptp.aFunction0 W0) (forall ((W1 $$unsorted)) (=> (tptp.aElementOf0 W1 (tptp.szDzozmdt0 W0)) (tptp.aElement0 (tptp.sdtlpdtrp0 W0 W1)))))) (forall ((W0 $$unsorted) (W1 $$unsorted)) (=> (and (tptp.aFunction0 W0) (tptp.aElement0 W1)) (forall ((W2 $$unsorted)) (= (= W2 (tptp.sdtlbdtrb0 W0 W1)) (and (tptp.aSet0 W2) (forall ((W3 $$unsorted)) (= (tptp.aElementOf0 W3 W2) (and (tptp.aElementOf0 W3 (tptp.szDzozmdt0 W0)) (= (tptp.sdtlpdtrp0 W0 W3) W1))))))))) (forall ((W0 $$unsorted) (W1 $$unsorted)) (=> (and (tptp.aFunction0 W0) (tptp.aElement0 W1)) (tptp.aSubsetOf0 (tptp.sdtlbdtrb0 W0 W1) (tptp.szDzozmdt0 W0)))) (forall ((W0 $$unsorted)) (=> (tptp.aFunction0 W0) (forall ((W1 $$unsorted)) (=> (tptp.aSubsetOf0 W1 (tptp.szDzozmdt0 W0)) (forall ((W2 $$unsorted)) (= (= W2 (tptp.sdtlcdtrc0 W0 W1)) (and (tptp.aSet0 W2) (forall ((W3 $$unsorted)) (= (tptp.aElementOf0 W3 W2) (exists ((W4 $$unsorted)) (and (tptp.aElementOf0 W4 W1) (= (tptp.sdtlpdtrp0 W0 W4) W3)))))))))))) (tptp.aFunction0 tptp.xF) _let_3 _let_2 true))))))))
% 0.22/0.60  )
% 0.22/0.60  % SZS output end Proof for NUM561+2
% 0.22/0.60  % cvc5---1.0.5 exiting
% 0.22/0.60  % cvc5---1.0.5 exiting
%------------------------------------------------------------------------------