↑ Up

cvc5---1.3.4.THM-Prf.s

View TPTP
Problem
Process solution in
SystemOnTSTP
Download .tgz
%------------------------------------------------------------------------------
% File     : cvc5---1.3.4
% Problem  : RNG124+1 : TPTP v9.2.1. Released v4.0.0.
% Transfm  : none
% Format   : tptp:raw
% Command  : /export/starexec/sandbox/solver/bin/do_cvc5 /export/starexec/sandbox/benchmark/theBenchmark.p 300 THM

% Computer : n006.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 : Wed Jun  3 08:45:45 AM UTC 2026

% Result   : Theorem 0.39s 0.62s
% Output   : Proof 0.39s
% Verified : 
% SZS Type : -

% Comments : 
%------------------------------------------------------------------------------
%----WARNING: Could not form TPTP format derivation
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.00/0.12  % Problem  : RNG124+1 : TPTP v9.2.1. Released v4.0.0.
% 0.12/0.13  % Command  : /export/starexec/sandbox/solver/bin/do_cvc5 /export/starexec/sandbox/benchmark/theBenchmark.p 300 THM
% 0.16/0.34  % Computer : n006.cluster.edu
% 0.16/0.34  % Model    : x86_64 x86_64
% 0.16/0.34  % CPU      : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.16/0.34  % Memory   : 8042.1875MB
% 0.16/0.34  % OS       : Linux 3.10.0-693.el7.x86_64
% 0.16/0.34  % CPULimit : 300
% 0.16/0.34  % WCLimit  : 300
% 0.16/0.34  % DateTime : Tue Jun  2 14:08:49 EDT 2026
% 0.16/0.34  % CPUTime  : 
% 0.30/0.50  %----Proving TF0_NAR, FOF, or CNF
% 0.39/0.62  --- Run --decision=internal --simplification=none --no-inst-no-entail --no-cbqi --full-saturate-quant at 15...
% 0.39/0.62  % SZS status Theorem
% 0.39/0.62  % SZS output start Proof
% 0.39/0.62  (
% 0.39/0.62  (declare-sort $$unsorted 0)
% 0.39/0.62  (declare-const tptp.xq $$unsorted)
% 0.39/0.62  (declare-const tptp.xu $$unsorted)
% 0.39/0.62  (declare-const tptp.xc $$unsorted)
% 0.39/0.62  (declare-const tptp.xa $$unsorted)
% 0.39/0.62  (declare-const tptp.xI $$unsorted)
% 0.39/0.62  (declare-const tptp.slsdtgt0 (-> $$unsorted $$unsorted))
% 0.39/0.62  (declare-const tptp.aDivisorOf0 (-> $$unsorted $$unsorted Bool))
% 0.39/0.62  (declare-const tptp.iLess0 (-> $$unsorted $$unsorted Bool))
% 0.39/0.62  (declare-const tptp.sbrdtbr0 (-> $$unsorted $$unsorted))
% 0.39/0.62  (declare-const tptp.aElement0 (-> $$unsorted Bool))
% 0.39/0.62  (declare-const tptp.sz00 $$unsorted)
% 0.39/0.62  (declare-const tptp.sz10 $$unsorted)
% 0.39/0.62  (declare-const tptp.aGcdOfAnd0 (-> $$unsorted $$unsorted $$unsorted Bool))
% 0.39/0.62  (declare-const tptp.smndt0 (-> $$unsorted $$unsorted))
% 0.39/0.62  (declare-const tptp.xr $$unsorted)
% 0.39/0.62  (declare-const tptp.sdtpldt0 (-> $$unsorted $$unsorted $$unsorted))
% 0.39/0.62  (declare-const tptp.sdtasasdt0 (-> $$unsorted $$unsorted $$unsorted))
% 0.39/0.62  (declare-const tptp.aIdeal0 (-> $$unsorted Bool))
% 0.39/0.62  (declare-const tptp.misRelativelyPrime0 (-> $$unsorted $$unsorted Bool))
% 0.39/0.62  (declare-const tptp.sdtasdt0 (-> $$unsorted $$unsorted $$unsorted))
% 0.39/0.62  (declare-const tptp.doDivides0 (-> $$unsorted $$unsorted Bool))
% 0.39/0.62  (declare-const tptp.aSet0 (-> $$unsorted Bool))
% 0.39/0.62  (declare-const tptp.aElementOf0 (-> $$unsorted $$unsorted Bool))
% 0.39/0.62  (declare-const tptp.sdteqdtlpzmzozddtrp0 (-> $$unsorted $$unsorted $$unsorted Bool))
% 0.39/0.62  (declare-const tptp.xb $$unsorted)
% 0.39/0.62  (declare-const tptp.sdtpldt1 (-> $$unsorted $$unsorted $$unsorted))
% 0.39/0.62  (declare-const tptp.aNaturalNumber0 (-> $$unsorted Bool))
% 0.39/0.62  (define @t1 () (@var "W0" $$unsorted))
% 0.39/0.62  (define @t2 () (tptp.aElement0 @t1))
% 0.39/0.62  (define @t3 () (@list @t1))
% 0.39/0.62  (define @t4 () (tptp.smndt0 @t1))
% 0.39/0.62  (define @t5 () (@var "W1" $$unsorted))
% 0.39/0.62  (define @t6 () (tptp.sdtpldt0 @t1 @t5))
% 0.39/0.62  (define @t7 () (tptp.aElement0 @t5))
% 0.39/0.62  (define @t8 () (and @t2 @t7))
% 0.39/0.62  (define @t9 () (@list @t1 @t5))
% 0.39/0.62  (define @t10 () (tptp.sdtasdt0 @t1 @t5))
% 0.39/0.62  (define @t11 () (@var "W2" $$unsorted))
% 0.39/0.62  (define @t12 () (tptp.sdtpldt0 @t5 @t11))
% 0.39/0.62  (define @t13 () (tptp.aElement0 @t11))
% 0.39/0.62  (define @t14 () (and @t2 @t7 @t13))
% 0.39/0.62  (define @t15 () (@list @t1 @t5 @t11))
% 0.39/0.62  (define @t16 () (tptp.sdtasdt0 @t5 @t1))
% 0.39/0.62  (define @t17 () (tptp.sdtasdt0 @t1 @t11))
% 0.39/0.62  (define @t18 () (tptp.smndt0 tptp.sz10))
% 0.39/0.62  (define @t19 () (= @t5 tptp.sz00))
% 0.39/0.62  (define @t20 () (= @t1 tptp.sz00))
% 0.39/0.62  (define @t21 () (tptp.aSet0 @t1))
% 0.39/0.62  (define @t22 () (tptp.aElementOf0 @t5 @t1))
% 0.39/0.62  (define @t23 () (@list @t5))
% 0.39/0.62  (define @t24 () (tptp.aElementOf0 @t11 @t1))
% 0.39/0.62  (define @t25 () (tptp.aElementOf0 @t11 @t5))
% 0.39/0.62  (define @t26 () (@list @t11))
% 0.39/0.62  (define @t27 () (tptp.aSet0 @t5))
% 0.39/0.62  (define @t28 () (and @t21 @t27))
% 0.39/0.62  (define @t29 () (@var "W3" $$unsorted))
% 0.39/0.62  (define @t30 () (@var "W5" $$unsorted))
% 0.39/0.62  (define @t31 () (@var "W4" $$unsorted))
% 0.39/0.62  (define @t32 () (tptp.aElementOf0 @t29 @t11))
% 0.39/0.62  (define @t33 () (@list @t29))
% 0.39/0.62  (define @t34 () (tptp.aSet0 @t11))
% 0.39/0.62  (define @t35 () (tptp.sdtpldt1 @t1 @t5))
% 0.39/0.62  (define @t36 () (tptp.sdtasasdt0 @t1 @t5))
% 0.39/0.62  (define @t37 () (tptp.sdtasdt0 @t11 @t5))
% 0.39/0.62  (define @t38 () (tptp.aIdeal0 @t1))
% 0.39/0.62  (define @t39 () (and @t38 (tptp.aIdeal0 @t5)))
% 0.39/0.62  (define @t40 () (tptp.aElement0 @t29))
% 0.39/0.62  (define @t41 () (@list @t11 @t29))
% 0.39/0.62  (define @t42 () (tptp.aNaturalNumber0 @t1))
% 0.39/0.62  (define @t43 () (tptp.sbrdtbr0 @t1))
% 0.39/0.62  (define @t44 () (not @t20))
% 0.39/0.62  (define @t45 () (tptp.slsdtgt0 @t1))
% 0.39/0.62  (define @t46 () (tptp.slsdtgt0 tptp.xb))
% 0.39/0.62  (define @t47 () (tptp.slsdtgt0 tptp.xa))
% 0.39/0.62  (define @t48 () (tptp.sdtpldt1 @t47 @t46))
% 0.39/0.62  (define @t49 () (tptp.sbrdtbr0 tptp.xu))
% 0.39/0.62  (define @t50 () (not (tptp.iLess0 @t43 @t49)))
% 0.39/0.62  (define @t51 () (tptp.aElementOf0 @t1 tptp.xI))
% 0.39/0.62  (define @t52 () (and @t51 @t44))
% 0.39/0.62  (define @t53 () (forall @t3 (=> @t52 @t50)))
% 0.39/0.62  (define @t54 () (tptp.iLess0 (tptp.sbrdtbr0 tptp.xr) @t49))
% 0.39/0.62  (define @t55 () (= tptp.xr tptp.sz00))
% 0.39/0.62  (define @t56 () (or @t55 @t54))
% 0.39/0.62  (define @t57 () (tptp.sdtasdt0 tptp.xq tptp.xu))
% 0.39/0.62  (define @t58 () (tptp.smndt0 @t57))
% 0.39/0.62  (define @t59 () (tptp.aElementOf0 tptp.xr tptp.xI))
% 0.39/0.62  (define @t60 () (not @t51))
% 0.39/0.62  (define @t61 () (or @t60 @t20 @t50))
% 0.39/0.62  (define @t62 () (= tptp.sz00 tptp.xr))
% 0.39/0.62  (define @t63 () (not @t54))
% 0.39/0.62  (define @t64 () (not @t59))
% 0.39/0.62  (define @t65 () (or @t64 @t62 @t63))
% 0.39/0.62  (define @t66 () (not @t65))
% 0.39/0.62  (define @t67 () (or @t64 @t55 @t63))
% 0.39/0.62  (define @t68 () (forall @t3 @t61))
% 0.39/0.62  (assume @p1 (forall @t3 (=> @t2 true)))
% 0.39/0.62  (assume @p2 (tptp.aElement0 tptp.sz00))
% 0.39/0.62  (assume @p3 (tptp.aElement0 tptp.sz10))
% 0.39/0.62  (assume @p4 (forall @t3 (=> @t2 (tptp.aElement0 @t4))))
% 0.39/0.62  (assume @p5 (forall @t9 (=> @t8 (tptp.aElement0 @t6))))
% 0.39/0.62  (assume @p6 (forall @t9 (=> @t8 (tptp.aElement0 @t10))))
% 0.39/0.62  (assume @p7 (forall @t9 (=> @t8 (= @t6 (tptp.sdtpldt0 @t5 @t1)))))
% 0.39/0.62  (assume @p8 (forall @t15 (=> @t14 (= (tptp.sdtpldt0 @t6 @t11) (tptp.sdtpldt0 @t1 @t12)))))
% 0.39/0.62  (assume @p9 (forall @t3 (=> @t2 (and (= (tptp.sdtpldt0 @t1 tptp.sz00) @t1) (= @t1 (tptp.sdtpldt0 tptp.sz00 @t1))))))
% 0.39/0.62  (assume @p10 (forall @t3 (=> @t2 (and (= (tptp.sdtpldt0 @t1 @t4) tptp.sz00) (= tptp.sz00 (tptp.sdtpldt0 @t4 @t1))))))
% 0.39/0.62  (assume @p11 (forall @t9 (=> @t8 (= @t10 @t16))))
% 0.39/0.62  (assume @p12 (forall @t15 (=> @t14 (= (tptp.sdtasdt0 @t10 @t11) (tptp.sdtasdt0 @t1 (tptp.sdtasdt0 @t5 @t11))))))
% 0.39/0.62  (assume @p13 (forall @t3 (=> @t2 (and (= (tptp.sdtasdt0 @t1 tptp.sz10) @t1) (= @t1 (tptp.sdtasdt0 tptp.sz10 @t1))))))
% 0.39/0.62  (assume @p14 (forall @t15 (=> @t14 (and (= (tptp.sdtasdt0 @t1 @t12) (tptp.sdtpldt0 @t10 @t17)) (= (tptp.sdtasdt0 @t12 @t1) (tptp.sdtpldt0 @t16 (tptp.sdtasdt0 @t11 @t1)))))))
% 0.39/0.62  (assume @p15 (forall @t3 (=> @t2 (and (= (tptp.sdtasdt0 @t18 @t1) @t4) (= @t4 (tptp.sdtasdt0 @t1 @t18))))))
% 0.39/0.62  (assume @p16 (forall @t3 (=> @t2 (and (= (tptp.sdtasdt0 @t1 tptp.sz00) tptp.sz00) (= tptp.sz00 (tptp.sdtasdt0 tptp.sz00 @t1))))))
% 0.39/0.62  (assume @p17 (forall @t9 (=> @t8 (=> (= @t10 tptp.sz00) (or @t20 @t19)))))
% 0.39/0.62  (assume @p18 (not (= tptp.sz10 tptp.sz00)))
% 0.39/0.62  (assume @p19 (forall @t3 (=> @t21 true)))
% 0.39/0.62  (assume @p20 (forall @t3 (=> @t21 (forall @t23 (=> @t22 @t7)))))
% 0.39/0.62  (assume @p21 (forall @t9 (=> @t28 (=> (and (forall @t26 (=> @t24 @t25)) (forall @t26 (=> @t25 @t24))) (= @t1 @t5)))))
% 0.39/0.62  (assume @p22 (forall @t9 (=> @t28 (forall @t26 (= (= @t11 @t35) (and @t34 (forall @t33 (= @t32 (exists (@list @t31 @t30) (and (tptp.aElementOf0 @t31 @t1) (tptp.aElementOf0 @t30 @t5) (= (tptp.sdtpldt0 @t31 @t30) @t29)))))))))))
% 0.39/0.62  (assume @p23 (forall @t9 (=> @t28 (forall @t26 (= (= @t11 @t36) (and @t34 (forall @t33 (= @t32 (and (tptp.aElementOf0 @t29 @t1) (tptp.aElementOf0 @t29 @t5))))))))))
% 0.39/0.62  (assume @p24 (forall @t3 (= @t38 (and @t21 (forall @t23 (=> @t22 (and (forall @t26 (=> @t24 (tptp.aElementOf0 @t12 @t1))) (forall @t26 (=> @t13 (tptp.aElementOf0 @t37 @t1))))))))))
% 0.39/0.62  (assume @p25 (forall @t9 (=> @t39 (tptp.aIdeal0 @t35))))
% 0.39/0.62  (assume @p26 (forall @t9 (=> @t39 (tptp.aIdeal0 @t36))))
% 0.39/0.62  (assume @p27 (forall @t15 (=> (and @t2 @t7 (tptp.aIdeal0 @t11)) (= (tptp.sdteqdtlpzmzozddtrp0 @t1 @t5 @t11) (tptp.aElementOf0 (tptp.sdtpldt0 @t1 (tptp.smndt0 @t5)) @t11)))))
% 0.39/0.62  (assume @p28 (forall @t9 (=> @t39 (=> (forall @t26 (=> @t13 (tptp.aElementOf0 @t11 @t35))) (forall @t41 (=> (and @t13 @t40) (exists (@list @t31) (and (tptp.aElement0 @t31) (tptp.sdteqdtlpzmzozddtrp0 @t31 @t11 @t1) (tptp.sdteqdtlpzmzozddtrp0 @t31 @t29 @t5)))))))))
% 0.39/0.62  (assume @p29 (forall @t3 (=> @t42 true)))
% 0.39/0.62  (assume @p30 (forall @t3 (=> (and @t2 @t44) (tptp.aNaturalNumber0 @t43))))
% 0.39/0.62  (assume @p31 (forall @t9 (=> (and @t42 (tptp.aNaturalNumber0 @t5)) (=> (tptp.iLess0 @t1 @t5) true))))
% 0.39/0.62  (assume @p32 (forall @t9 (=> (and @t2 @t7 (not @t19)) (exists @t41 (and @t13 @t40 (= @t1 (tptp.sdtpldt0 @t37 @t29)) (=> (not (= @t29 tptp.sz00)) (tptp.iLess0 (tptp.sbrdtbr0 @t29) (tptp.sbrdtbr0 @t5))))))))
% 0.39/0.62  (assume @p33 (forall @t9 (=> @t8 (= (tptp.doDivides0 @t1 @t5) (exists @t26 (and @t13 (= @t17 @t5)))))))
% 0.39/0.62  (assume @p34 (forall @t3 (=> @t2 (forall @t23 (= (tptp.aDivisorOf0 @t5 @t1) (and @t7 (tptp.doDivides0 @t5 @t1)))))))
% 0.39/0.62  (assume @p35 (forall @t9 (=> @t8 (forall @t26 (= (tptp.aGcdOfAnd0 @t11 @t1 @t5) (and (tptp.aDivisorOf0 @t11 @t1) (tptp.aDivisorOf0 @t11 @t5) (forall @t33 (=> (and (tptp.aDivisorOf0 @t29 @t1) (tptp.aDivisorOf0 @t29 @t5)) (tptp.doDivides0 @t29 @t11)))))))))
% 0.39/0.62  (assume @p36 (forall @t9 (=> @t8 (= (tptp.misRelativelyPrime0 @t1 @t5) (tptp.aGcdOfAnd0 tptp.sz10 @t1 @t5)))))
% 0.39/0.62  (assume @p37 (forall @t3 (=> @t2 (forall @t23 (= (= @t5 @t45) (and @t27 (forall @t26 (= @t25 (exists @t33 (and @t40 (= (tptp.sdtasdt0 @t1 @t29) @t11)))))))))))
% 0.39/0.62  (assume @p38 (forall @t3 (=> @t2 (tptp.aIdeal0 @t45))))
% 0.39/0.62  (assume @p39 (and (tptp.aElement0 tptp.xa) (tptp.aElement0 tptp.xb)))
% 0.39/0.62  (assume @p40 (or (not (= tptp.xa tptp.sz00)) (not (= tptp.xb tptp.sz00))))
% 0.39/0.62  (assume @p41 (tptp.aGcdOfAnd0 tptp.xc tptp.xa tptp.xb))
% 0.39/0.62  (assume @p42 (and (tptp.aIdeal0 tptp.xI) (= tptp.xI @t48)))
% 0.39/0.62  (assume @p43 (and (tptp.aElementOf0 tptp.sz00 @t47) (tptp.aElementOf0 tptp.xa @t47) (tptp.aElementOf0 tptp.sz00 @t46) (tptp.aElementOf0 tptp.xb @t46)))
% 0.39/0.62  (assume @p44 (exists @t3 (and (tptp.aElementOf0 @t1 @t48) @t44)))
% 0.39/0.62  (assume @p45 (and (tptp.aElementOf0 tptp.xu tptp.xI) (not (= tptp.xu tptp.sz00)) @t53))
% 0.39/0.62  (assume @p46 (not (and (tptp.aDivisorOf0 tptp.xu tptp.xa) (tptp.aDivisorOf0 tptp.xu tptp.xb))))
% 0.39/0.62  (assume @p47 (exists @t9 (and @t2 @t7 (= tptp.xu (tptp.sdtpldt0 (tptp.sdtasdt0 tptp.xa @t1) (tptp.sdtasdt0 tptp.xb @t5))))))
% 0.39/0.62  (assume @p48 (not (not (tptp.doDivides0 tptp.xu tptp.xa))))
% 0.39/0.62  (assume @p49 (not (tptp.doDivides0 tptp.xu tptp.xb)))
% 0.39/0.62  (assume @p50 (and (tptp.aElement0 tptp.xq) (tptp.aElement0 tptp.xr) (= tptp.xb (tptp.sdtpldt0 @t57 tptp.xr)) @t56))
% 0.39/0.62  (assume @p51 (not @t55))
% 0.39/0.62  (assume @p52 (tptp.aElementOf0 @t58 tptp.xI))
% 0.39/0.62  (assume @p53 (tptp.aElementOf0 tptp.xb tptp.xI))
% 0.39/0.62  (assume @p54 (= tptp.xr (tptp.sdtpldt0 @t58 tptp.xb)))
% 0.39/0.62  (assume @p55 @t59)
% 0.39/0.62  (assume @p56 (not false))
% 0.39/0.62  (assume @p57 true)
% 0.39/0.62  (step @p58 :rule aci_norm :args ((= (or (or @t60 @t20) @t50) @t61)))
% 0.39/0.62  (step @p59 :rule refl :args (@t50))
% 0.39/0.62  (step @p60 :rule bool-double-not-elim :args (@t20))
% 0.39/0.62  (step @p61 :rule refl :args (@t60))
% 0.39/0.62  (step @p62 :rule nary_cong :premises (@p61 @p60) :args ((or @t60 (not @t44))))
% 0.39/0.62  (step @p63 :rule bool-and-de-morgan :args (@t51 @t44 true))
% 0.39/0.62  (step @p64 :rule trans :premises (@p63 @p62))
% 0.39/0.62  (step @p65 :rule nary_cong :premises (@p64 @p59) :args ((or (not @t52) @t50)))
% 0.39/0.62  (step @p66 :rule trans :premises (@p65 @p58))
% 0.39/0.62  (step @p67 :rule bool-impl-elim :args (@t52 @t50))
% 0.39/0.62  (step @p68 :rule trans :premises (@p67 @p66))
% 0.39/0.62  (step @p69 :rule cong :premises (@p68) :args (@t53))
% 0.39/0.62  (step @p70 :rule and_elim :premises (@p45) :args (2))
% 0.39/0.62  (step @p71 :rule eq_resolve :premises (@p70 @p69))
% 0.39/0.62  (step @p72 :rule symm :premises (@p51))
% 0.39/0.62  (step @p73 :rule refl :args (@t54))
% 0.39/0.62  (step @p74 :rule eq-symm :args (tptp.xr tptp.sz00))
% 0.39/0.62  (step @p75 :rule nary_cong :premises (@p74 @p73) :args (@t56))
% 0.39/0.62  (step @p76 :rule and_elim :premises (@p50) :args (3))
% 0.39/0.62  (step @p77 :rule eq_resolve :premises (@p76 @p75))
% 0.39/0.62  (step @p78 :rule reordering :premises (@p77) :args ((or @t54 @t62)))
% 0.39/0.62  (step @p79 :rule chain_m_resolution :premises (@p78 @p72) :args (@t54 (@list true) (@list @t62)))
% 0.39/0.62  (step @p80 :rule cnf_or_pos :args (@t65))
% 0.39/0.62  (step @p81 :rule reordering :premises (@p80) :args ((or @t62 @t63 @t64 @t66)))
% 0.39/0.62  (step @p82 :rule chain_m_resolution :premises (@p81 @p72 @p79 @p55) :args (@t66 (@list true false false) (@list @t62 @t54 @t59)))
% 0.39/0.62  (step @p83 :rule refl :args (@t63))
% 0.39/0.62  (step @p84 :rule refl :args (@t64))
% 0.39/0.62  (step @p85 :rule nary_cong :premises (@p84 @p74 @p83) :args (@t67))
% 0.39/0.62  (step @p86 :rule refl :args (@t68))
% 0.39/0.62  (step @p87 :rule cong :premises (@p86 @p85) :args ((=> @t68 @t67)))
% 0.39/0.62  (assume-push @p95 @t68)
% 0.39/0.62  (step @p89 :rule instantiate :premises (@p71) :args ((@list tptp.xr)))
% 0.39/0.62  (step-pop @p96 :rule scope :premises (@p89))
% 0.39/0.62  (step @p90 :rule process_scope :premises (@p96) :args (@t67))
% 0.39/0.62  (step @p92 :rule eq_resolve :premises (@p90 @p87))
% 0.39/0.62  (step @p93 :rule implies_elim :premises (@p92))
% 0.39/0.62  (step @p94 false :rule chain_m_resolution :premises (@p93 @p82 @p71) :args (false (@list true false) (@list @t65 @t68)))
% 0.39/0.62  )
% 0.39/0.62  % SZS output end Proof
% 0.39/0.62  % cvc5 exiting
%------------------------------------------------------------------------------