TSTP Solution File: SWV154+1 by cvc5---1.0.5

View Problem - Process Solution

%------------------------------------------------------------------------------
% File     : cvc5---1.0.5
% Problem  : SWV154+1 : TPTP v8.1.2. Bugfixed v3.3.0.
% Transfm  : none
% Format   : tptp
% Command  : do_cvc5 %s %d

% Computer : n018.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 21:49:30 EDT 2023

% Result   : Theorem 0.21s 0.56s
% Output   : Proof 0.21s
% Verified : 
% SZS Type : -

% Comments : 
%------------------------------------------------------------------------------
%----WARNING: Could not form TPTP format derivation
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.06/0.13  % Problem    : SWV154+1 : TPTP v8.1.2. Bugfixed v3.3.0.
% 0.06/0.14  % Command    : do_cvc5 %s %d
% 0.13/0.35  % Computer : n018.cluster.edu
% 0.13/0.35  % Model    : x86_64 x86_64
% 0.13/0.35  % CPU      : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.13/0.35  % Memory   : 8042.1875MB
% 0.13/0.35  % OS       : Linux 3.10.0-693.el7.x86_64
% 0.13/0.35  % CPULimit   : 300
% 0.13/0.35  % WCLimit    : 300
% 0.13/0.35  % DateTime   : Tue Aug 29 07:17:02 EDT 2023
% 0.13/0.35  % CPUTime    : 
% 0.21/0.49  %----Proving TF0_NAR, FOF, or CNF
% 0.21/0.56  ------- convert to smt2 : /export/starexec/sandbox/tmp/tmp.7t8sTCOezW/cvc5---1.0.5_9988.p...
% 0.21/0.56  ------- get file name : TPTP file name is SWV154+1
% 0.21/0.56  ------- cvc5-fof : /export/starexec/sandbox/solver/bin/cvc5---1.0.5_9988.smt2...
% 0.21/0.56  --- Run --decision=internal --simplification=none --no-inst-no-entail --no-cbqi --full-saturate-quant at 10...
% 0.21/0.56  % SZS status Theorem for SWV154+1
% 0.21/0.56  % SZS output start Proof for SWV154+1
% 0.21/0.56  (
% 0.21/0.56  (let ((_let_1 (tptp.succ tptp.n0))) (let ((_let_2 (tptp.succ _let_1))) (let ((_let_3 (tptp.succ _let_2))) (let ((_let_4 (tptp.succ _let_3))) (let ((_let_5 (tptp.a_select2 tptp.x tptp.pv10))) (let ((_let_6 (tptp.minus (tptp.a_select3 tptp.center tptp.tptp_sum_index tptp.n0) _let_5))) (let ((_let_7 (tptp.sum tptp.n0 tptp.n4 (tptp.sqrt (tptp.times _let_6 _let_6))))) (let ((_let_8 (= tptp.pv70 _let_7))) (let ((_let_9 (not (=> (and _let_8 (tptp.leq tptp.n0 tptp.pv10) (tptp.leq tptp.n0 tptp.pv12) (tptp.leq tptp.pv10 tptp.n135299) (tptp.leq tptp.pv12 tptp.n4) (forall ((A $$unsorted)) (let ((_let_1 (tptp.a_select2 tptp.x tptp.pv10))) (let ((_let_2 (tptp.minus (tptp.a_select3 tptp.center tptp.tptp_sum_index tptp.n0) _let_1))) (let ((_let_3 (tptp.minus (tptp.a_select3 tptp.center A tptp.n0) _let_1))) (=> (and (tptp.leq tptp.n0 A) (tptp.leq A (tptp.pred tptp.pv12))) (= (tptp.a_select3 tptp.q tptp.pv10 A) (tptp.divide (tptp.sqrt (tptp.times _let_3 _let_3)) (tptp.sum tptp.n0 tptp.n4 (tptp.sqrt (tptp.times _let_2 _let_2)))))))))) (forall ((B $$unsorted)) (=> (and (tptp.leq tptp.n0 B) (tptp.leq B (tptp.pred tptp.pv10))) (= (tptp.sum tptp.n0 tptp.n4 (tptp.a_select3 tptp.q B tptp.tptp_sum_index)) tptp.n1)))) (forall ((C $$unsorted)) (let ((_let_1 (tptp.a_select2 tptp.x tptp.pv10))) (let ((_let_2 (tptp.minus (tptp.a_select3 tptp.center tptp.tptp_sum_index tptp.n0) _let_1))) (let ((_let_3 (tptp.minus (tptp.a_select3 tptp.center C tptp.n0) _let_1))) (let ((_let_4 (tptp.minus (tptp.a_select3 tptp.center tptp.pv12 tptp.n0) _let_1))) (=> (and (tptp.leq tptp.n0 C) (tptp.leq C tptp.pv12)) (=> (= tptp.pv12 C) (= (tptp.divide (tptp.sqrt (tptp.times _let_4 _let_4)) tptp.pv70) (tptp.divide (tptp.sqrt (tptp.times _let_3 _let_3)) (tptp.sum tptp.n0 tptp.n4 (tptp.sqrt (tptp.times _let_2 _let_2)))))))))))))))) (let ((_let_10 (tptp.minus (tptp.a_select3 tptp.center tptp.pv12 tptp.n0) _let_5))) (let ((_let_11 (tptp.sqrt (tptp.times _let_10 _let_10)))) (let ((_let_12 (= (tptp.divide _let_11 tptp.pv70) (tptp.divide _let_11 _let_7)))) (let ((_let_13 (EQ_RESOLVE (ASSUME :args (_let_9)) (MACRO_SR_EQ_INTRO :args (_let_9 SB_DEFAULT SBA_FIXPOINT))))) (let ((_let_14 (_let_8))) (let ((_let_15 (ASSUME :args _let_14))) (SCOPE (SCOPE (MACRO_RESOLUTION_TRUST (REORDERING (IMPLIES_ELIM (SCOPE (MODUS_PONENS _let_15 (SCOPE (CONG (REFL :args (_let_11)) (SYMM (SYMM _let_15)) :args (APPLY_UF tptp.divide)) :args _let_14)) :args _let_14)) :args ((or _let_12 (not _let_8)))) (NOT_OR_ELIM (NOT_IMPLIES_ELIM2 _let_13) :args (2)) (AND_ELIM (NOT_IMPLIES_ELIM1 _let_13) :args (0)) :args (false true _let_12 false _let_8)) :args ((forall ((X $$unsorted) (Y $$unsorted)) (or (tptp.gt X Y) (tptp.gt Y X) (= X Y))) (forall ((X $$unsorted) (Y $$unsorted) (Z $$unsorted)) (=> (and (tptp.gt X Y) (tptp.gt Y Z)) (tptp.gt X Z))) (forall ((X $$unsorted)) (not (tptp.gt X X))) (forall ((X $$unsorted)) (tptp.leq X X)) (forall ((X $$unsorted) (Y $$unsorted) (Z $$unsorted)) (=> (and (tptp.leq X Y) (tptp.leq Y Z)) (tptp.leq X Z))) (forall ((X $$unsorted) (Y $$unsorted)) (= (tptp.lt X Y) (tptp.gt Y X))) (forall ((X $$unsorted) (Y $$unsorted)) (= (tptp.geq X Y) (tptp.leq Y X))) (forall ((X $$unsorted) (Y $$unsorted)) (=> (tptp.gt Y X) (tptp.leq X Y))) (forall ((X $$unsorted) (Y $$unsorted)) (=> (and (tptp.leq X Y) (not (= X Y))) (tptp.gt Y X))) (forall ((X $$unsorted) (Y $$unsorted)) (= (tptp.leq X (tptp.pred Y)) (tptp.gt Y X))) (forall ((X $$unsorted)) (tptp.gt (tptp.succ X) X)) (forall ((X $$unsorted) (Y $$unsorted)) (=> (tptp.leq X Y) (tptp.leq X (tptp.succ Y)))) (forall ((X $$unsorted) (Y $$unsorted)) (= (tptp.leq X Y) (tptp.gt (tptp.succ Y) X))) (forall ((X $$unsorted) (C $$unsorted)) (=> (tptp.leq tptp.n0 X) (tptp.leq (tptp.uniform_int_rnd C X) X))) (forall ((X $$unsorted) (C $$unsorted)) (=> (tptp.leq tptp.n0 X) (tptp.leq tptp.n0 (tptp.uniform_int_rnd C X)))) (forall ((I $$unsorted) (L $$unsorted) (U $$unsorted) (Val $$unsorted)) (=> (and (tptp.leq L I) (tptp.leq I U)) (= (tptp.a_select2 (tptp.tptp_const_array1 (tptp.dim L U) Val) I) Val))) (forall ((I $$unsorted) (L1 $$unsorted) (U1 $$unsorted) (J $$unsorted) (L2 $$unsorted) (U2 $$unsorted) (Val $$unsorted)) (=> (and (tptp.leq L1 I) (tptp.leq I U1) (tptp.leq L2 J) (tptp.leq J U2)) (= (tptp.a_select3 (tptp.tptp_const_array2 (tptp.dim L1 U1) (tptp.dim L2 U2) Val) I J) Val))) (forall ((A $$unsorted) (N $$unsorted)) (=> (forall ((I $$unsorted) (J $$unsorted)) (=> (and (tptp.leq tptp.n0 I) (tptp.leq I N) (tptp.leq tptp.n0 J) (tptp.leq J N)) (= (tptp.a_select3 A I J) (tptp.a_select3 A J I)))) (forall ((I $$unsorted) (J $$unsorted)) (let ((_let_1 (tptp.trans A))) (=> (and (tptp.leq tptp.n0 I) (tptp.leq I N) (tptp.leq tptp.n0 J) (tptp.leq J N)) (= (tptp.a_select3 _let_1 I J) (tptp.a_select3 _let_1 J I))))))) (forall ((A $$unsorted) (N $$unsorted)) (=> (forall ((I $$unsorted) (J $$unsorted)) (=> (and (tptp.leq tptp.n0 I) (tptp.leq I N) (tptp.leq tptp.n0 J) (tptp.leq J N)) (= (tptp.a_select3 A I J) (tptp.a_select3 A J I)))) (forall ((I $$unsorted) (J $$unsorted)) (let ((_let_1 (tptp.inv A))) (=> (and (tptp.leq tptp.n0 I) (tptp.leq I N) (tptp.leq tptp.n0 J) (tptp.leq J N)) (= (tptp.a_select3 _let_1 I J) (tptp.a_select3 _let_1 J I))))))) (forall ((A $$unsorted) (N $$unsorted)) (=> (forall ((I $$unsorted) (J $$unsorted)) (=> (and (tptp.leq tptp.n0 I) (tptp.leq I N) (tptp.leq tptp.n0 J) (tptp.leq J N)) (= (tptp.a_select3 A I J) (tptp.a_select3 A J I)))) (forall ((I $$unsorted) (J $$unsorted) (K $$unsorted) (VAL $$unsorted)) (let ((_let_1 (tptp.tptp_update3 A K K VAL))) (=> (and (tptp.leq tptp.n0 I) (tptp.leq I N) (tptp.leq tptp.n0 J) (tptp.leq J N) (tptp.leq tptp.n0 K) (tptp.leq K N)) (= (tptp.a_select3 _let_1 I J) (tptp.a_select3 _let_1 J I))))))) (forall ((A $$unsorted) (B $$unsorted) (N $$unsorted)) (=> (and (forall ((I $$unsorted) (J $$unsorted)) (=> (and (tptp.leq tptp.n0 I) (tptp.leq I N) (tptp.leq tptp.n0 J) (tptp.leq J N)) (= (tptp.a_select3 A I J) (tptp.a_select3 A J I)))) (forall ((I $$unsorted) (J $$unsorted)) (=> (and (tptp.leq tptp.n0 I) (tptp.leq I N) (tptp.leq tptp.n0 J) (tptp.leq J N)) (= (tptp.a_select3 B I J) (tptp.a_select3 B J I))))) (forall ((I $$unsorted) (J $$unsorted)) (let ((_let_1 (tptp.tptp_madd A B))) (=> (and (tptp.leq tptp.n0 I) (tptp.leq I N) (tptp.leq tptp.n0 J) (tptp.leq J N)) (= (tptp.a_select3 _let_1 I J) (tptp.a_select3 _let_1 J I))))))) (forall ((A $$unsorted) (B $$unsorted) (N $$unsorted)) (=> (and (forall ((I $$unsorted) (J $$unsorted)) (=> (and (tptp.leq tptp.n0 I) (tptp.leq I N) (tptp.leq tptp.n0 J) (tptp.leq J N)) (= (tptp.a_select3 A I J) (tptp.a_select3 A J I)))) (forall ((I $$unsorted) (J $$unsorted)) (=> (and (tptp.leq tptp.n0 I) (tptp.leq I N) (tptp.leq tptp.n0 J) (tptp.leq J N)) (= (tptp.a_select3 B I J) (tptp.a_select3 B J I))))) (forall ((I $$unsorted) (J $$unsorted)) (let ((_let_1 (tptp.tptp_msub A B))) (=> (and (tptp.leq tptp.n0 I) (tptp.leq I N) (tptp.leq tptp.n0 J) (tptp.leq J N)) (= (tptp.a_select3 _let_1 I J) (tptp.a_select3 _let_1 J I))))))) (forall ((A $$unsorted) (B $$unsorted) (N $$unsorted)) (=> (forall ((I $$unsorted) (J $$unsorted)) (=> (and (tptp.leq tptp.n0 I) (tptp.leq I N) (tptp.leq tptp.n0 J) (tptp.leq J N)) (= (tptp.a_select3 B I J) (tptp.a_select3 B J I)))) (forall ((I $$unsorted) (J $$unsorted)) (let ((_let_1 (tptp.tptp_mmul A (tptp.tptp_mmul B (tptp.trans A))))) (=> (and (tptp.leq tptp.n0 I) (tptp.leq I N) (tptp.leq tptp.n0 J) (tptp.leq J N)) (= (tptp.a_select3 _let_1 I J) (tptp.a_select3 _let_1 J I))))))) (forall ((A $$unsorted) (B $$unsorted) (N $$unsorted) (M $$unsorted)) (=> (forall ((I $$unsorted) (J $$unsorted)) (=> (and (tptp.leq tptp.n0 I) (tptp.leq I M) (tptp.leq tptp.n0 J) (tptp.leq J M)) (= (tptp.a_select3 B I J) (tptp.a_select3 B J I)))) (forall ((I $$unsorted) (J $$unsorted)) (let ((_let_1 (tptp.tptp_mmul A (tptp.tptp_mmul B (tptp.trans A))))) (=> (and (tptp.leq tptp.n0 I) (tptp.leq I N) (tptp.leq tptp.n0 J) (tptp.leq J N)) (= (tptp.a_select3 _let_1 I J) (tptp.a_select3 _let_1 J I))))))) (forall ((A $$unsorted) (B $$unsorted) (C $$unsorted) (D $$unsorted) (E $$unsorted) (F $$unsorted) (N $$unsorted) (M $$unsorted)) (=> (and (forall ((I $$unsorted) (J $$unsorted)) (=> (and (tptp.leq tptp.n0 I) (tptp.leq I M) (tptp.leq tptp.n0 J) (tptp.leq J M)) (= (tptp.a_select3 D I J) (tptp.a_select3 D J I)))) (forall ((I $$unsorted) (J $$unsorted)) (=> (and (tptp.leq tptp.n0 I) (tptp.leq I N) (tptp.leq tptp.n0 J) (tptp.leq J N)) (= (tptp.a_select3 A I J) (tptp.a_select3 A J I)))) (forall ((I $$unsorted) (J $$unsorted)) (=> (and (tptp.leq tptp.n0 I) (tptp.leq I N) (tptp.leq tptp.n0 J) (tptp.leq J N)) (= (tptp.a_select3 F I J) (tptp.a_select3 F J I))))) (forall ((I $$unsorted) (J $$unsorted)) (let ((_let_1 (tptp.tptp_madd A (tptp.tptp_mmul B (tptp.tptp_mmul (tptp.tptp_madd (tptp.tptp_mmul C (tptp.tptp_mmul D (tptp.trans C))) (tptp.tptp_mmul E (tptp.tptp_mmul F (tptp.trans E)))) (tptp.trans B)))))) (=> (and (tptp.leq tptp.n0 I) (tptp.leq I N) (tptp.leq tptp.n0 J) (tptp.leq J N)) (= (tptp.a_select3 _let_1 I J) (tptp.a_select3 _let_1 J I))))))) (forall ((Body $$unsorted)) (= (tptp.sum tptp.n0 tptp.tptp_minus_1 Body) tptp.n0)) (forall ((Body $$unsorted)) (= tptp.tptp_float_0_0 (tptp.sum tptp.n0 tptp.tptp_minus_1 Body))) (= (tptp.succ tptp.tptp_minus_1) tptp.n0) (forall ((X $$unsorted)) (= (tptp.plus X tptp.n1) (tptp.succ X))) (forall ((X $$unsorted)) (= (tptp.plus tptp.n1 X) (tptp.succ X))) (forall ((X $$unsorted)) (= (tptp.plus X tptp.n2) (tptp.succ (tptp.succ X)))) (forall ((X $$unsorted)) (= (tptp.plus tptp.n2 X) (tptp.succ (tptp.succ X)))) (forall ((X $$unsorted)) (= (tptp.plus X tptp.n3) (tptp.succ (tptp.succ (tptp.succ X))))) (forall ((X $$unsorted)) (= (tptp.plus tptp.n3 X) (tptp.succ (tptp.succ (tptp.succ X))))) (forall ((X $$unsorted)) (= (tptp.plus X tptp.n4) (tptp.succ (tptp.succ (tptp.succ (tptp.succ X)))))) (forall ((X $$unsorted)) (= (tptp.plus tptp.n4 X) (tptp.succ (tptp.succ (tptp.succ (tptp.succ X)))))) (forall ((X $$unsorted)) (= (tptp.plus X tptp.n5) (tptp.succ (tptp.succ (tptp.succ (tptp.succ (tptp.succ X))))))) (forall ((X $$unsorted)) (= (tptp.plus tptp.n5 X) (tptp.succ (tptp.succ (tptp.succ (tptp.succ (tptp.succ X))))))) (forall ((X $$unsorted)) (= (tptp.minus X tptp.n1) (tptp.pred X))) (forall ((X $$unsorted)) (= (tptp.pred (tptp.succ X)) X)) (forall ((X $$unsorted)) (= (tptp.succ (tptp.pred X)) X)) (forall ((X $$unsorted) (Y $$unsorted)) (= (tptp.leq (tptp.succ X) (tptp.succ Y)) (tptp.leq X Y))) (forall ((X $$unsorted) (Y $$unsorted)) (=> (tptp.leq (tptp.succ X) Y) (tptp.gt Y X))) (forall ((X $$unsorted) (Y $$unsorted)) (=> (tptp.leq (tptp.minus X Y) X) (tptp.leq tptp.n0 Y))) (forall ((X $$unsorted) (U $$unsorted) (V $$unsorted) (VAL $$unsorted)) (= (tptp.a_select3 (tptp.tptp_update3 X U V VAL) U V) VAL)) (forall ((I $$unsorted) (J $$unsorted) (U $$unsorted) (V $$unsorted) (X $$unsorted) (VAL $$unsorted) (VAL2 $$unsorted)) (=> (and (not (= I U)) (= J V) (= (tptp.a_select3 X U V) VAL)) (= (tptp.a_select3 (tptp.tptp_update3 X I J VAL2) U V) VAL))) (forall ((I $$unsorted) (J $$unsorted) (U $$unsorted) (V $$unsorted) (X $$unsorted) (VAL $$unsorted)) (=> (and (forall ((I0 $$unsorted) (J0 $$unsorted)) (=> (and (tptp.leq tptp.n0 I0) (tptp.leq tptp.n0 J0) (tptp.leq I0 U) (tptp.leq J0 V)) (= (tptp.a_select3 X I0 J0) VAL))) (tptp.leq tptp.n0 I) (tptp.leq I U) (tptp.leq tptp.n0 J) (tptp.leq J V)) (= (tptp.a_select3 (tptp.tptp_update3 X U V VAL) I J) VAL))) (forall ((X $$unsorted) (U $$unsorted) (VAL $$unsorted)) (= (tptp.a_select2 (tptp.tptp_update2 X U VAL) U) VAL)) (forall ((I $$unsorted) (U $$unsorted) (X $$unsorted) (VAL $$unsorted) (VAL2 $$unsorted)) (=> (and (not (= I U)) (= (tptp.a_select2 X U) VAL)) (= (tptp.a_select2 (tptp.tptp_update2 X I VAL2) U) VAL))) (forall ((I $$unsorted) (U $$unsorted) (X $$unsorted) (VAL $$unsorted)) (=> (and (forall ((I0 $$unsorted)) (=> (and (tptp.leq tptp.n0 I0) (tptp.leq I0 U)) (= (tptp.a_select2 X I0) VAL))) (tptp.leq tptp.n0 I) (tptp.leq I U)) (= (tptp.a_select2 (tptp.tptp_update2 X U VAL) I) VAL))) tptp.true (not (= tptp.def tptp.use)) _let_9 (tptp.gt tptp.n5 tptp.n4) (tptp.gt tptp.n135299 tptp.n4) (tptp.gt tptp.n135299 tptp.n5) (tptp.gt tptp.n4 tptp.tptp_minus_1) (tptp.gt tptp.n5 tptp.tptp_minus_1) (tptp.gt tptp.n135299 tptp.tptp_minus_1) (tptp.gt tptp.n0 tptp.tptp_minus_1) (tptp.gt tptp.n1 tptp.tptp_minus_1) (tptp.gt tptp.n2 tptp.tptp_minus_1) (tptp.gt tptp.n3 tptp.tptp_minus_1) (tptp.gt tptp.n4 tptp.n0) (tptp.gt tptp.n5 tptp.n0) (tptp.gt tptp.n135299 tptp.n0) (tptp.gt tptp.n1 tptp.n0) (tptp.gt tptp.n2 tptp.n0) (tptp.gt tptp.n3 tptp.n0) (tptp.gt tptp.n4 tptp.n1) (tptp.gt tptp.n5 tptp.n1) (tptp.gt tptp.n135299 tptp.n1) (tptp.gt tptp.n2 tptp.n1) (tptp.gt tptp.n3 tptp.n1) (tptp.gt tptp.n4 tptp.n2) (tptp.gt tptp.n5 tptp.n2) (tptp.gt tptp.n135299 tptp.n2) (tptp.gt tptp.n3 tptp.n2) (tptp.gt tptp.n4 tptp.n3) (tptp.gt tptp.n5 tptp.n3) (tptp.gt tptp.n135299 tptp.n3) (forall ((X $$unsorted)) (=> (and (tptp.leq tptp.n0 X) (tptp.leq X tptp.n4)) (or (= X tptp.n0) (= X tptp.n1) (= X tptp.n2) (= X tptp.n3) (= X tptp.n4)))) (forall ((X $$unsorted)) (=> (and (tptp.leq tptp.n0 X) (tptp.leq X tptp.n5)) (or (= X tptp.n0) (= X tptp.n1) (= X tptp.n2) (= X tptp.n3) (= X tptp.n4) (= X tptp.n5)))) (forall ((X $$unsorted)) (=> (and (tptp.leq tptp.n0 X) (tptp.leq X tptp.n0)) (= X tptp.n0))) (forall ((X $$unsorted)) (=> (and (tptp.leq tptp.n0 X) (tptp.leq X tptp.n1)) (or (= X tptp.n0) (= X tptp.n1)))) (forall ((X $$unsorted)) (=> (and (tptp.leq tptp.n0 X) (tptp.leq X tptp.n2)) (or (= X tptp.n0) (= X tptp.n1) (= X tptp.n2)))) (forall ((X $$unsorted)) (=> (and (tptp.leq tptp.n0 X) (tptp.leq X tptp.n3)) (or (= X tptp.n0) (= X tptp.n1) (= X tptp.n2) (= X tptp.n3)))) (= _let_4 tptp.n4) (= (tptp.succ _let_4) tptp.n5) (= _let_1 tptp.n1) (= _let_2 tptp.n2) (= _let_3 tptp.n3) true))))))))))))))))))
% 0.21/0.57  )
% 0.21/0.57  % SZS output end Proof for SWV154+1
% 0.21/0.57  % cvc5---1.0.5 exiting
% 0.21/0.57  % cvc5---1.0.5 exiting
%------------------------------------------------------------------------------