↑ Up

cvc5---1.3.4.THM-Prf.s

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

% Computer : n023.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:50:39 AM UTC 2026

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

% Comments : 
%------------------------------------------------------------------------------
%----WARNING: Could not form TPTP format derivation
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.00/0.12  % Problem  : SEU131+1 : TPTP v9.2.1. Released v3.3.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 : n023.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 16:32:13 EDT 2026
% 0.16/0.35  % CPUTime  : 
% 0.30/0.49  %----Proving TF0_NAR, FOF, or CNF
% 0.37/0.62  --- Run --decision=internal --simplification=none --no-inst-no-entail --no-cbqi --full-saturate-quant at 15...
% 0.37/0.62  % SZS status Theorem
% 0.37/0.62  % SZS output start Proof
% 0.37/0.62  (
% 0.37/0.62  (declare-sort $$unsorted 0)
% 0.37/0.62  (declare-const tptp.empty (-> $$unsorted Bool))
% 0.37/0.62  (declare-const tptp.set_difference (-> $$unsorted $$unsorted $$unsorted))
% 0.37/0.62  (declare-const tptp.empty_set $$unsorted)
% 0.37/0.62  (declare-const tptp.subset (-> $$unsorted $$unsorted Bool))
% 0.37/0.62  (declare-const tptp.in (-> $$unsorted $$unsorted Bool))
% 0.37/0.62  (define @t1 () (@var "A" $$unsorted))
% 0.37/0.62  (define @t2 () (@var "B" $$unsorted))
% 0.37/0.62  (define @t3 () (tptp.in @t1 @t2))
% 0.37/0.62  (define @t4 () (@list @t1 @t2))
% 0.37/0.62  (define @t5 () (@var "C" $$unsorted))
% 0.37/0.62  (define @t6 () (tptp.in @t5 @t2))
% 0.37/0.62  (define @t7 () (tptp.in @t5 @t1))
% 0.37/0.62  (define @t8 () (@list @t5))
% 0.37/0.62  (define @t9 () (forall @t8 (=> @t7 @t6)))
% 0.37/0.62  (define @t10 () (tptp.subset @t1 @t2))
% 0.37/0.62  (define @t11 () (= @t10 @t9))
% 0.37/0.62  (define @t12 () (forall @t4 @t11))
% 0.37/0.62  (define @t13 () (@var "D" $$unsorted))
% 0.37/0.62  (define @t14 () (@list @t13))
% 0.37/0.62  (define @t15 () (tptp.set_difference @t1 @t2))
% 0.37/0.62  (define @t16 () (forall (@list @t1 @t2 @t5) (= (= @t5 @t15) (forall @t14 (= (tptp.in @t13 @t5) (and (tptp.in @t13 @t1) (not (tptp.in @t13 @t2))))))))
% 0.37/0.62  (define @t17 () (tptp.empty tptp.empty_set))
% 0.37/0.62  (define @t18 () (= @t15 tptp.empty_set))
% 0.37/0.62  (define @t19 () (forall @t4 (= @t18 @t10)))
% 0.37/0.62  (define @t20 () (not @t19))
% 0.37/0.62  (define @t21 () (tptp.empty @t1))
% 0.37/0.62  (define @t22 () (@list @t1))
% 0.37/0.62  (define @t23 () (= @t1 @t2))
% 0.37/0.62  (define @t24 () (tptp.set_difference @t1 tptp.empty_set))
% 0.37/0.62  (define @t25 () (forall @t22 (= @t24 @t1)))
% 0.37/0.62  (define @t26 () (tptp.empty @t2))
% 0.37/0.62  (define @t27 () (forall @t4 (not (and @t3 @t26))))
% 0.37/0.62  (define @t28 () (forall @t4 (= @t10 @t18)))
% 0.37/0.62  (define @t29 () (@quantifiers_skolemize @t28 1))
% 0.37/0.62  (define @t30 () (@quantifiers_skolemize @t28 0))
% 0.37/0.62  (define @t31 () (tptp.set_difference @t30 @t29))
% 0.37/0.62  (define @t32 () (= tptp.empty_set @t31))
% 0.37/0.62  (define @t33 () (tptp.subset @t30 @t29))
% 0.37/0.62  (define @t34 () (= @t33 @t32))
% 0.37/0.62  (define @t35 () (not @t34))
% 0.37/0.62  (define @t36 () (not @t28))
% 0.37/0.62  (define @t37 () (= @t33 (= @t31 tptp.empty_set)))
% 0.37/0.62  (define @t38 () (not @t37))
% 0.37/0.62  (define @t39 () (@list true))
% 0.37/0.62  (define @t40 () (forall @t8 (or (not (tptp.in @t5 @t30)) (tptp.in @t5 @t29))))
% 0.37/0.62  (define @t41 () (= @t33 @t40))
% 0.37/0.62  (define @t42 () (not @t41))
% 0.37/0.62  (define @t43 () (not @t40))
% 0.37/0.62  (define @t44 () (tptp.in @t13 tptp.empty_set))
% 0.37/0.62  (define @t45 () (forall @t14 (= @t44 (and (tptp.in @t13 @t30) (not (tptp.in @t13 @t29))))))
% 0.37/0.62  (define @t46 () (= @t32 @t45))
% 0.37/0.62  (define @t47 () (not @t46))
% 0.37/0.62  (define @t48 () (not @t32))
% 0.37/0.62  (define @t49 () (@quantifiers_skolemize @t40 0))
% 0.37/0.62  (define @t50 () (tptp.in @t49 @t29))
% 0.37/0.62  (define @t51 () (tptp.in @t49 @t30))
% 0.37/0.62  (define @t52 () (not @t51))
% 0.37/0.62  (define @t53 () (or @t52 @t50))
% 0.37/0.62  (define @t54 () (not @t53))
% 0.37/0.62  (define @t55 () (@list @t49))
% 0.37/0.62  (define @t56 () (not @t50))
% 0.37/0.62  (define @t57 () (and @t51 @t56))
% 0.37/0.62  (define @t58 () (tptp.in @t49 tptp.empty_set))
% 0.37/0.62  (define @t59 () (= @t58 @t57))
% 0.37/0.62  (define @t60 () (not @t44))
% 0.37/0.62  (define @t61 () (= @t44 (and @t44 @t60)))
% 0.37/0.62  (define @t62 () (forall @t14 @t61))
% 0.37/0.62  (define @t63 () (= tptp.empty_set (tptp.set_difference tptp.empty_set tptp.empty_set)))
% 0.37/0.62  (define @t64 () (= @t63 @t62))
% 0.37/0.62  (define @t65 () (forall @t14 @t60))
% 0.37/0.62  (define @t66 () (= @t63 @t65))
% 0.37/0.62  (define @t67 () (@list false))
% 0.37/0.62  (define @t68 () (@list false false))
% 0.37/0.62  (define @t69 () (@list true false))
% 0.37/0.62  (define @t70 () (not @t45))
% 0.37/0.62  (define @t71 () (@quantifiers_skolemize @t45 0))
% 0.37/0.62  (define @t72 () (tptp.in @t71 @t29))
% 0.37/0.62  (define @t73 () (not @t72))
% 0.37/0.62  (define @t74 () (tptp.in @t71 @t30))
% 0.37/0.62  (define @t75 () (and @t74 @t73))
% 0.37/0.62  (define @t76 () (tptp.in @t71 tptp.empty_set))
% 0.37/0.62  (define @t77 () (= @t76 @t75))
% 0.37/0.62  (define @t78 () (not @t77))
% 0.37/0.62  (define @t79 () (not @t75))
% 0.37/0.62  (define @t80 () (not @t74))
% 0.37/0.62  (define @t81 () (or @t80 @t72))
% 0.37/0.62  (define @t82 () (not @t17))
% 0.37/0.62  (define @t83 () (not @t76))
% 0.37/0.62  (define @t84 () (or @t83 @t82))
% 0.37/0.62  (define @t85 () (not @t84))
% 0.37/0.62  (define @t86 () (forall @t4 (or (not @t3) (not @t26))))
% 0.37/0.62  (assume @p1 (forall @t4 (=> @t3 (not (tptp.in @t2 @t1)))))
% 0.37/0.62  (assume @p2 @t12)
% 0.37/0.62  (assume @p3 @t16)
% 0.37/0.62  (assume @p4 true)
% 0.37/0.62  (assume @p5 @t17)
% 0.37/0.62  (assume @p6 @t20)
% 0.37/0.62  (assume @p7 (exists @t22 @t21))
% 0.37/0.62  (assume @p8 (exists @t22 (not @t21)))
% 0.37/0.62  (assume @p9 (forall @t4 (tptp.subset @t1 @t1)))
% 0.37/0.62  (assume @p10 (forall @t4 (=> (forall @t8 (= @t7 @t6)) @t23)))
% 0.37/0.62  (assume @p11 @t25)
% 0.37/0.62  (assume @p12 (forall @t22 (= (tptp.set_difference tptp.empty_set @t1) tptp.empty_set)))
% 0.37/0.62  (assume @p13 (forall @t22 (=> @t21 (= @t1 tptp.empty_set))))
% 0.37/0.62  (assume @p14 @t27)
% 0.37/0.62  (assume @p15 (forall @t4 (not (and @t21 (not @t23) @t26))))
% 0.37/0.62  (step @p16 :rule bool-and-de-morgan :args (@t3 @t26 true))
% 0.37/0.62  (step @p17 :rule cong :premises (@p16) :args (@t27))
% 0.37/0.62  (step @p18 :rule eq_resolve :premises (@p14 @p17))
% 0.37/0.62  (step @p19 :rule instantiate :premises (@p3) :args ((@list @t30 @t29 tptp.empty_set)))
% 0.37/0.62  (step @p20 :rule eq-symm :args (@t18 @t10))
% 0.37/0.62  (step @p21 :rule cong :premises (@p20) :args (@t19))
% 0.37/0.62  (step @p22 :rule cong :premises (@p21) :args (@t20))
% 0.37/0.62  (step @p23 :rule eq_resolve :premises (@p6 @p22))
% 0.37/0.62  (step @p24 :rule refl :args (@t35))
% 0.37/0.62  (step @p25 :rule bool-double-not-elim :args (@t28))
% 0.37/0.62  (step @p26 :rule nary_cong :premises (@p25 @p24) :args ((or (not @t36) @t35)))
% 0.37/0.62  (step @p27 :rule eq-symm :args (@t31 tptp.empty_set))
% 0.37/0.62  (step @p28 :rule refl :args (@t33))
% 0.37/0.62  (step @p29 :rule cong :premises (@p28 @p27) :args (@t37))
% 0.37/0.62  (step @p30 :rule cong :premises (@p29) :args (@t38))
% 0.37/0.62  (step @p31 :rule refl :args (@t36))
% 0.37/0.62  (step @p32 :rule cong :premises (@p31 @p30) :args ((=> @t36 @t38)))
% 0.37/0.62  (assume-push @p154 @t36)
% 0.37/0.62  (step @p34 :rule skolemize :premises (@p23))
% 0.37/0.62  (step-pop @p155 :rule scope :premises (@p34))
% 0.37/0.62  (step @p35 :rule process_scope :premises (@p155) :args (@t38))
% 0.37/0.62  (step @p37 :rule eq_resolve :premises (@p35 @p32))
% 0.37/0.62  (step @p38 :rule implies_elim :premises (@p37))
% 0.37/0.62  (step @p39 :rule eq_resolve :premises (@p38 @p26))
% 0.37/0.62  (step @p40 :rule chain_m_resolution :premises (@p39 @p23) :args (@t35 @t39 (@list @t28)))
% 0.37/0.62  (step @p41 :rule cnf_equiv_neg1 :args (@t34))
% 0.37/0.62  (step @p42 :rule reordering :premises (@p41) :args ((or @t33 @t32 @t34)))
% 0.37/0.62  (step @p43 :rule bool-impl-elim :args (@t7 @t6))
% 0.37/0.62  (step @p44 :rule cong :premises (@p43) :args (@t9))
% 0.37/0.62  (step @p45 :rule refl :args (@t10))
% 0.37/0.62  (step @p46 :rule cong :premises (@p45 @p44) :args (@t11))
% 0.37/0.62  (step @p47 :rule cong :premises (@p46) :args (@t12))
% 0.37/0.62  (step @p48 :rule eq_resolve :premises (@p2 @p47))
% 0.37/0.62  (step @p49 :rule instantiate :premises (@p48) :args ((@list @t30 @t29)))
% 0.37/0.62  (step @p50 :rule cnf_equiv_pos2 :args (@t41))
% 0.37/0.62  (step @p51 :rule reordering :premises (@p50) :args ((or @t33 @t43 @t42)))
% 0.37/0.62  (step @p52 :rule cnf_equiv_pos1 :args (@t46))
% 0.37/0.62  (step @p53 :rule reordering :premises (@p52) :args ((or @t48 @t45 @t47)))
% 0.37/0.62  (step @p54 :rule refl :args (@t54))
% 0.37/0.62  (step @p55 :rule bool-double-not-elim :args (@t40))
% 0.37/0.62  (step @p56 :rule nary_cong :premises (@p55 @p54) :args ((or (not @t43) @t54)))
% 0.37/0.62  (assume-push @p156 @t43)
% 0.37/0.62  (step @p58 :rule skolemize :premises (@p156))
% 0.37/0.62  (step-pop @p157 :rule scope :premises (@p58))
% 0.37/0.62  (step @p59 :rule process_scope :premises (@p157) :args (@t54))
% 0.37/0.62  (step @p61 :rule implies_elim :premises (@p59))
% 0.37/0.62  (step @p62 :rule eq_resolve :premises (@p61 @p56))
% 0.37/0.62  (assume-push @p158 @t45)
% 0.37/0.62  (step @p64 :rule instantiate :premises (@p158) :args (@t55))
% 0.37/0.62  (step-pop @p159 :rule scope :premises (@p64))
% 0.37/0.62  (step @p65 :rule process_scope :premises (@p159) :args (@t59))
% 0.37/0.62  (step @p67 :rule implies_elim :premises (@p65))
% 0.37/0.62  (step @p68 :rule bool-double-not-elim :args (@t51))
% 0.37/0.62  (step @p69 :rule refl :args (@t53))
% 0.37/0.62  (step @p70 :rule nary_cong :premises (@p69 @p68) :args ((or @t53 (not @t52))))
% 0.37/0.62  (step @p71 :rule cnf_or_neg :args (@t53 0))
% 0.37/0.62  (step @p72 :rule eq_resolve :premises (@p71 @p70))
% 0.37/0.62  (step @p73 :rule reordering :premises (@p72) :args ((or @t51 @t53)))
% 0.37/0.62  (step @p74 :rule cnf_or_neg :args (@t53 1))
% 0.37/0.62  (step @p75 :rule bool-eq-false :args (@t44))
% 0.37/0.62  (step @p76 :rule cong :premises (@p75) :args ((forall @t14 (= @t44 false))))
% 0.37/0.62  (step @p77 :rule bool-and-conf :args (true @t44 true true))
% 0.37/0.62  (step @p78 :rule refl :args (@t44))
% 0.37/0.62  (step @p79 :rule cong :premises (@p78 @p77) :args (@t61))
% 0.37/0.62  (step @p80 :rule cong :premises (@p79) :args (@t62))
% 0.37/0.62  (step @p81 :rule trans :premises (@p80 @p76))
% 0.37/0.62  (step @p82 :rule refl :args (@t63))
% 0.37/0.62  (step @p83 :rule cong :premises (@p82 @p81) :args (@t64))
% 0.37/0.62  (step @p84 :rule refl :args (@t16))
% 0.37/0.62  (step @p85 :rule cong :premises (@p84 @p83) :args ((=> @t16 @t64)))
% 0.37/0.62  (assume-push @p160 @t16)
% 0.37/0.62  (step @p87 :rule instantiate :premises (@p3) :args ((@list tptp.empty_set tptp.empty_set tptp.empty_set)))
% 0.37/0.62  (step-pop @p161 :rule scope :premises (@p87))
% 0.37/0.62  (step @p88 :rule process_scope :premises (@p161) :args (@t64))
% 0.37/0.62  (step @p90 :rule eq_resolve :premises (@p88 @p85))
% 0.37/0.62  (step @p91 :rule implies_elim :premises (@p90))
% 0.37/0.62  (step @p92 :rule chain_m_resolution :premises (@p91 @p3) :args (@t66 @t67 (@list @t16)))
% 0.37/0.62  (step @p93 :rule eq-symm :args (@t24 @t1))
% 0.37/0.62  (step @p94 :rule cong :premises (@p93) :args (@t25))
% 0.37/0.62  (step @p95 :rule eq_resolve :premises (@p11 @p94))
% 0.37/0.62  (step @p96 :rule instantiate :premises (@p95) :args ((@list tptp.empty_set)))
% 0.37/0.62  (step @p97 :rule cnf_equiv_pos1 :args (@t66))
% 0.37/0.62  (step @p98 :rule reordering :premises (@p97) :args ((or @t65 (not @t63) (not @t66))))
% 0.37/0.62  (step @p99 :rule chain_m_resolution :premises (@p98 @p96 @p92) :args (@t65 @t68 (@list @t63 @t66)))
% 0.37/0.62  (step @p100 :rule instantiate :premises (@p99) :args (@t55))
% 0.37/0.62  (step @p101 :rule cnf_equiv_pos2 :args (@t59))
% 0.37/0.62  (step @p102 :rule reordering :premises (@p101) :args ((or @t58 (not @t57) (not @t59))))
% 0.37/0.62  (step @p103 :rule bool-double-not-elim :args (@t50))
% 0.37/0.62  (step @p104 :rule refl :args (@t52))
% 0.37/0.62  (step @p105 :rule refl :args (@t57))
% 0.37/0.62  (step @p106 :rule nary_cong :premises (@p105 @p104 @p103) :args ((or @t57 @t52 (not @t56))))
% 0.37/0.62  (step @p107 :rule cnf_and_neg :args (@t57))
% 0.37/0.62  (step @p108 :rule eq_resolve :premises (@p107 @p106))
% 0.37/0.62  (step @p109 :rule reordering :premises (@p108) :args ((or @t52 @t50 @t57)))
% 0.37/0.62  (step @p110 :rule chain_m_resolution :premises (@p109 @p102 @p100 @p74 @p73 @p67 @p62 @p53 @p19 @p51 @p49 @p42 @p40) :args (@t33 (@list true true true false false true false false true false false true) (@list @t57 @t58 @t50 @t51 @t59 @t53 @t45 @t46 @t40 @t41 @t32 @t34)))
% 0.37/0.62  (step @p111 :rule cnf_equiv_neg2 :args (@t34))
% 0.37/0.62  (step @p112 :rule chain_m_resolution :premises (@p111 @p40 @p110) :args (@t48 @t69 (@list @t34 @t33)))
% 0.37/0.62  (step @p113 :rule cnf_equiv_pos2 :args (@t46))
% 0.37/0.62  (step @p114 :rule reordering :premises (@p113) :args ((or @t32 @t70 @t47)))
% 0.37/0.62  (step @p115 :rule chain_m_resolution :premises (@p114 @p112 @p19) :args (@t70 @t69 (@list @t32 @t46)))
% 0.37/0.62  (step @p116 :rule refl :args (@t78))
% 0.37/0.62  (step @p117 :rule bool-double-not-elim :args (@t45))
% 0.37/0.62  (step @p118 :rule nary_cong :premises (@p117 @p116) :args ((or (not @t70) @t78)))
% 0.37/0.62  (assume-push @p162 @t70)
% 0.37/0.62  (step @p120 :rule skolemize :premises (@p162))
% 0.37/0.62  (step-pop @p163 :rule scope :premises (@p120))
% 0.37/0.62  (step @p121 :rule process_scope :premises (@p163) :args (@t78))
% 0.37/0.62  (step @p123 :rule implies_elim :premises (@p121))
% 0.37/0.62  (step @p124 :rule eq_resolve :premises (@p123 @p118))
% 0.37/0.62  (step @p125 :rule chain_m_resolution :premises (@p124 @p115) :args (@t78 @t39 (@list @t45)))
% 0.37/0.62  (step @p126 :rule cnf_and_pos :args (@t75 0))
% 0.37/0.62  (step @p127 :rule reordering :premises (@p126) :args ((or @t74 @t79)))
% 0.37/0.62  (step @p128 :rule cnf_and_pos :args (@t75 1))
% 0.37/0.62  (step @p129 :rule reordering :premises (@p128) :args ((or @t73 @t79)))
% 0.37/0.62  (step @p130 :rule cnf_equiv_pos1 :args (@t41))
% 0.37/0.62  (step @p131 :rule reordering :premises (@p130) :args ((or (not @t33) @t40 @t42)))
% 0.37/0.62  (step @p132 :rule chain_m_resolution :premises (@p131 @p110 @p49) :args (@t40 @t68 (@list @t33 @t41)))
% 0.37/0.62  (assume-push @p164 @t40)
% 0.37/0.62  (step @p134 :rule instantiate :premises (@p164) :args ((@list @t71)))
% 0.37/0.62  (step-pop @p165 :rule scope :premises (@p134))
% 0.37/0.62  (step @p135 :rule process_scope :premises (@p165) :args (@t81))
% 0.37/0.62  (step @p137 :rule implies_elim :premises (@p135))
% 0.37/0.62  (step @p138 :rule chain_m_resolution :premises (@p137 @p132) :args (@t81 @t67 (@list @t40)))
% 0.37/0.62  (step @p139 :rule cnf_or_pos :args (@t81))
% 0.37/0.62  (step @p140 :rule reordering :premises (@p139) :args ((or @t72 @t80 (not @t81))))
% 0.37/0.62  (step @p141 :rule chain_m_resolution :premises (@p140 @p138 @p129 @p127) :args (@t79 (@list false true false) (@list @t81 @t72 @t74)))
% 0.37/0.62  (step @p142 :rule cnf_equiv_neg1 :args (@t77))
% 0.37/0.62  (step @p143 :rule reordering :premises (@p142) :args ((or @t76 @t75 @t77)))
% 0.37/0.62  (step @p144 :rule chain_m_resolution :premises (@p143 @p141 @p125) :args (@t76 (@list true true) (@list @t75 @t77)))
% 0.37/0.62  (step @p145 :rule cnf_or_pos :args (@t84))
% 0.37/0.62  (step @p146 :rule reordering :premises (@p145) :args ((or @t82 @t83 @t85)))
% 0.37/0.62  (step @p147 :rule chain_m_resolution :premises (@p146 @p5 @p144) :args (@t85 @t68 (@list @t17 @t76)))
% 0.37/0.62  (assume-push @p166 @t86)
% 0.37/0.62  (step @p149 :rule instantiate :premises (@p18) :args ((@list @t71 tptp.empty_set)))
% 0.37/0.62  (step-pop @p167 :rule scope :premises (@p149))
% 0.37/0.62  (step @p150 :rule process_scope :premises (@p167) :args (@t84))
% 0.37/0.62  (step @p152 :rule implies_elim :premises (@p150))
% 0.37/0.62  (step @p153 false :rule chain_m_resolution :premises (@p152 @p147 @p18) :args (false @t69 (@list @t84 @t86)))
% 0.37/0.62  )
% 0.37/0.62  % SZS output end Proof
% 0.37/0.62  % cvc5 exiting
%------------------------------------------------------------------------------