%------------------------------------------------------------------------------ % File : cvc5---1.3.4 % Problem : SEU186+1 : TPTP v9.2.1. Released v3.3.0. % Transfm : none % Format : tptp:raw % Command : /export/starexec/sandbox2/solver/bin/do_cvc5 /export/starexec/sandbox2/benchmark/theBenchmark.p 300 THM % Computer : n010.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:53 AM UTC 2026 % Result : Theorem 0.46s 0.64s % Output : Proof 0.46s % Verified : % SZS Type : - % Comments : %------------------------------------------------------------------------------ %----WARNING: Could not form TPTP format derivation %------------------------------------------------------------------------------ %----ORIGINAL SYSTEM OUTPUT % 0.00/0.12 % Problem : SEU186+1 : TPTP v9.2.1. Released v3.3.0. % 0.12/0.13 % Command : /export/starexec/sandbox2/solver/bin/do_cvc5 /export/starexec/sandbox2/benchmark/theBenchmark.p 300 THM % 0.17/0.34 % Computer : n010.cluster.edu % 0.17/0.34 % Model : x86_64 x86_64 % 0.17/0.34 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz % 0.17/0.34 % Memory : 8042.1875MB % 0.17/0.34 % OS : Linux 3.10.0-693.el7.x86_64 % 0.17/0.34 % CPULimit : 300 % 0.17/0.34 % WCLimit : 300 % 0.17/0.34 % DateTime : Tue Jun 2 16:33:55 EDT 2026 % 0.17/0.34 % CPUTime : % 0.29/0.50 %----Proving TF0_NAR, FOF, or CNF % 0.46/0.64 --- Run --decision=internal --simplification=none --no-inst-no-entail --no-cbqi --full-saturate-quant at 15... % 0.46/0.64 % SZS status Theorem % 0.46/0.64 % SZS output start Proof % 0.46/0.64 ( % 0.46/0.64 (declare-sort $$unsorted 0) % 0.46/0.64 (declare-const tptp.empty_set $$unsorted) % 0.46/0.64 (declare-const tptp.singleton (-> $$unsorted $$unsorted)) % 0.46/0.64 (declare-const tptp.ordered_pair (-> $$unsorted $$unsorted $$unsorted)) % 0.46/0.64 (declare-const tptp.empty (-> $$unsorted Bool)) % 0.46/0.64 (declare-const tptp.relation (-> $$unsorted Bool)) % 0.46/0.64 (declare-const tptp.element (-> $$unsorted $$unsorted Bool)) % 0.46/0.64 (declare-const tptp.unordered_pair (-> $$unsorted $$unsorted $$unsorted)) % 0.46/0.64 (declare-const tptp.in (-> $$unsorted $$unsorted Bool)) % 0.46/0.64 (define @t1 () (@var "A" $$unsorted)) % 0.46/0.64 (define @t2 () (@var "B" $$unsorted)) % 0.46/0.64 (define @t3 () (tptp.in @t2 @t1)) % 0.46/0.64 (define @t4 () (tptp.in @t1 @t2)) % 0.46/0.64 (define @t5 () (@list @t1 @t2)) % 0.46/0.64 (define @t6 () (tptp.relation @t1)) % 0.46/0.64 (define @t7 () (tptp.empty @t1)) % 0.46/0.64 (define @t8 () (@list @t1)) % 0.46/0.64 (define @t9 () (tptp.unordered_pair @t1 @t2)) % 0.46/0.64 (define @t10 () (@var "D" $$unsorted)) % 0.46/0.64 (define @t11 () (@var "C" $$unsorted)) % 0.46/0.64 (define @t12 () (tptp.ordered_pair @t11 @t10)) % 0.46/0.64 (define @t13 () (@list @t11 @t10)) % 0.46/0.64 (define @t14 () (forall @t13 (not (= @t2 @t12)))) % 0.46/0.64 (define @t15 () (@list @t2)) % 0.46/0.64 (define @t16 () (forall @t15 (not (and @t3 @t14)))) % 0.46/0.64 (define @t17 () (= @t6 @t16)) % 0.46/0.64 (define @t18 () (forall @t8 @t17)) % 0.46/0.64 (define @t19 () (tptp.singleton @t1)) % 0.46/0.64 (define @t20 () (tptp.ordered_pair @t1 @t2)) % 0.46/0.64 (define @t21 () (tptp.element @t2 @t1)) % 0.46/0.64 (define @t22 () (exists @t15 @t21)) % 0.46/0.64 (define @t23 () (forall @t8 @t22)) % 0.46/0.64 (define @t24 () (tptp.empty tptp.empty_set)) % 0.46/0.64 (define @t25 () (not @t7)) % 0.46/0.64 (define @t26 () (tptp.element @t1 @t2)) % 0.46/0.64 (define @t27 () (tptp.empty @t2)) % 0.46/0.64 (define @t28 () (or @t27 @t4)) % 0.46/0.64 (define @t29 () (forall @t5 (=> @t26 @t28))) % 0.46/0.64 (define @t30 () (= @t1 tptp.empty_set)) % 0.46/0.64 (define @t31 () (tptp.ordered_pair @t2 @t11)) % 0.46/0.64 (define @t32 () (@list @t2 @t11)) % 0.46/0.64 (define @t33 () (forall @t32 (not (tptp.in @t31 @t1)))) % 0.46/0.64 (define @t34 () (=> @t33 @t30)) % 0.46/0.64 (define @t35 () (forall @t8 (=> @t6 @t34))) % 0.46/0.64 (define @t36 () (not @t35)) % 0.46/0.64 (define @t37 () (forall @t8 (=> @t7 @t30))) % 0.46/0.64 (define @t38 () (not @t33)) % 0.46/0.64 (define @t39 () (not @t6)) % 0.46/0.64 (define @t40 () (or @t39 @t38 @t30)) % 0.46/0.64 (define @t41 () (forall @t8 @t40)) % 0.46/0.64 (define @t42 () (@quantifiers_skolemize @t41 0)) % 0.46/0.64 (define @t43 () (= tptp.empty_set @t42)) % 0.46/0.64 (define @t44 () (forall @t32 (not (tptp.in @t31 @t42)))) % 0.46/0.64 (define @t45 () (not @t44)) % 0.46/0.64 (define @t46 () (tptp.relation @t42)) % 0.46/0.64 (define @t47 () (not @t46)) % 0.46/0.64 (define @t48 () (or @t47 @t45 @t43)) % 0.46/0.64 (define @t49 () (not @t48)) % 0.46/0.64 (define @t50 () (not @t41)) % 0.46/0.64 (define @t51 () (= @t42 tptp.empty_set)) % 0.46/0.64 (define @t52 () (or @t47 @t45 @t51)) % 0.46/0.64 (define @t53 () (not @t52)) % 0.46/0.64 (define @t54 () (@list true)) % 0.46/0.64 (define @t55 () (@list @t48)) % 0.46/0.64 (define @t56 () (forall @t15 (not (tptp.element @t2 @t42)))) % 0.46/0.64 (define @t57 () (@quantifiers_skolemize @t56 0)) % 0.46/0.64 (define @t58 () (forall @t13 (not (= @t12 @t57)))) % 0.46/0.64 (define @t59 () (@quantifiers_skolemize @t58 1)) % 0.46/0.64 (define @t60 () (@quantifiers_skolemize @t58 0)) % 0.46/0.64 (define @t61 () (@list @t42)) % 0.46/0.64 (define @t62 () (forall @t15 (or (not (tptp.in @t2 @t42)) (not @t14)))) % 0.46/0.64 (define @t63 () (= @t46 @t62)) % 0.46/0.64 (define @t64 () (@list false false)) % 0.46/0.64 (define @t65 () (not (= @t57 @t12))) % 0.46/0.64 (define @t66 () (forall @t13 @t65)) % 0.46/0.64 (define @t67 () (not @t66)) % 0.46/0.64 (define @t68 () (tptp.in @t57 @t42)) % 0.46/0.64 (define @t69 () (not @t68)) % 0.46/0.64 (define @t70 () (or @t69 @t67)) % 0.46/0.64 (define @t71 () (not @t58)) % 0.46/0.64 (define @t72 () (or @t69 @t71)) % 0.46/0.64 (define @t73 () (@list false)) % 0.46/0.64 (define @t74 () (not @t26)) % 0.46/0.64 (define @t75 () (tptp.element @t57 @t42)) % 0.46/0.64 (define @t76 () (not @t56)) % 0.46/0.64 (define @t77 () (not @t75)) % 0.46/0.64 (define @t78 () (not @t77)) % 0.46/0.64 (define @t79 () (tptp.empty @t42)) % 0.46/0.64 (define @t80 () (not @t79)) % 0.46/0.64 (define @t81 () (or @t80 @t51)) % 0.46/0.64 (define @t82 () (forall @t8 (or @t25 @t30))) % 0.46/0.64 (define @t83 () (or @t80 @t43)) % 0.46/0.64 (define @t84 () (or @t77 @t79 @t68)) % 0.46/0.64 (define @t85 () (tptp.ordered_pair @t60 @t59)) % 0.46/0.64 (define @t86 () (= @t57 @t85)) % 0.46/0.64 (define @t87 () (= @t85 @t57)) % 0.46/0.64 (define @t88 () (not (not @t87))) % 0.46/0.64 (assume @p1 (forall @t5 (=> @t4 (not @t3)))) % 0.46/0.64 (assume @p2 (forall @t8 (=> @t7 @t6))) % 0.46/0.64 (assume @p3 (forall @t5 (= @t9 (tptp.unordered_pair @t2 @t1)))) % 0.46/0.64 (assume @p4 @t18) % 0.46/0.64 (assume @p5 (forall @t5 (= @t20 (tptp.unordered_pair @t9 @t19)))) % 0.46/0.64 (assume @p6 true) % 0.46/0.64 (assume @p7 @t23) % 0.46/0.64 (assume @p8 @t24) % 0.46/0.64 (assume @p9 (forall @t5 (not (tptp.empty @t20)))) % 0.46/0.64 (assume @p10 (forall @t8 (not (tptp.empty @t19)))) % 0.46/0.64 (assume @p11 (forall @t5 (not (tptp.empty @t9)))) % 0.46/0.64 (assume @p12 (and @t24 (tptp.relation tptp.empty_set))) % 0.46/0.64 (assume @p13 (exists @t8 (and @t7 @t6))) % 0.46/0.64 (assume @p14 (exists @t8 @t7)) % 0.46/0.64 (assume @p15 (exists @t8 (and @t25 @t6))) % 0.46/0.64 (assume @p16 (exists @t8 @t25)) % 0.46/0.64 (assume @p17 (forall @t5 (=> @t4 @t26))) % 0.46/0.64 (assume @p18 @t29) % 0.46/0.64 (assume @p19 @t36) % 0.46/0.64 (assume @p20 @t37) % 0.46/0.64 (assume @p21 (forall @t5 (not (and @t4 @t27)))) % 0.46/0.64 (assume @p22 (forall @t5 (not (and @t7 (not (= @t1 @t2)) @t27)))) % 0.46/0.64 (step @p23 :rule evaluate :args ((= true false))) % 0.46/0.64 (step @p24 :rule aci_norm :args ((= (or @t39 (or @t38 @t30)) @t40))) % 0.46/0.64 (step @p25 :rule bool-impl-elim :args (@t33 @t30)) % 0.46/0.64 (step @p26 :rule refl :args (@t39)) % 0.46/0.64 (step @p27 :rule nary_cong :premises (@p26 @p25) :args ((or @t39 @t34))) % 0.46/0.64 (step @p28 :rule trans :premises (@p27 @p24)) % 0.46/0.64 (step @p29 :rule bool-impl-elim :args (@t6 @t34)) % 0.46/0.64 (step @p30 :rule trans :premises (@p29 @p28)) % 0.46/0.64 (step @p31 :rule cong :premises (@p30) :args (@t35)) % 0.46/0.64 (step @p32 :rule cong :premises (@p31) :args (@t36)) % 0.46/0.64 (step @p33 :rule eq_resolve :premises (@p19 @p32)) % 0.46/0.64 (step @p34 :rule refl :args (@t49)) % 0.46/0.64 (step @p35 :rule bool-double-not-elim :args (@t41)) % 0.46/0.64 (step @p36 :rule nary_cong :premises (@p35 @p34) :args ((or (not @t50) @t49))) % 0.46/0.64 (step @p37 :rule eq-symm :args (@t42 tptp.empty_set)) % 0.46/0.64 (step @p38 :rule refl :args (@t45)) % 0.46/0.64 (step @p39 :rule refl :args (@t47)) % 0.46/0.64 (step @p40 :rule nary_cong :premises (@p39 @p38 @p37) :args (@t52)) % 0.46/0.64 (step @p41 :rule cong :premises (@p40) :args (@t53)) % 0.46/0.64 (step @p42 :rule refl :args (@t50)) % 0.46/0.64 (step @p43 :rule cong :premises (@p42 @p41) :args ((=> @t50 @t53))) % 0.46/0.64 (assume-push @p163 @t50) % 0.46/0.64 (step @p45 :rule skolemize :premises (@p33)) % 0.46/0.64 (step-pop @p164 :rule scope :premises (@p45)) % 0.46/0.64 (step @p46 :rule process_scope :premises (@p164) :args (@t53)) % 0.46/0.64 (step @p48 :rule eq_resolve :premises (@p46 @p43)) % 0.46/0.64 (step @p49 :rule implies_elim :premises (@p48)) % 0.46/0.64 (step @p50 :rule eq_resolve :premises (@p49 @p36)) % 0.46/0.64 (step @p51 :rule chain_m_resolution :premises (@p50 @p33) :args (@t49 @t54 (@list @t41))) % 0.46/0.64 (step @p52 :rule bool-double-not-elim :args (@t44)) % 0.46/0.64 (step @p53 :rule refl :args (@t48)) % 0.46/0.64 (step @p54 :rule nary_cong :premises (@p53 @p52) :args ((or @t48 (not @t45)))) % 0.46/0.64 (step @p55 :rule cnf_or_neg :args (@t48 1)) % 0.46/0.64 (step @p56 :rule eq_resolve :premises (@p55 @p54)) % 0.46/0.64 (step @p57 :rule reordering :premises (@p56) :args ((or @t44 @t48))) % 0.46/0.64 (step @p58 :rule chain_m_resolution :premises (@p57 @p51) :args (@t44 @t54 @t55)) % 0.46/0.64 (step @p59 :rule instantiate :premises (@p58) :args ((@list @t60 @t59))) % 0.46/0.64 (step @p60 :rule false_intro :premises (@p59)) % 0.46/0.64 (step @p61 :rule refl :args (@t42)) % 0.46/0.64 (step @p62 :rule bool-and-de-morgan :args (@t3 @t14 true)) % 0.46/0.64 (step @p63 :rule cong :premises (@p62) :args (@t16)) % 0.46/0.64 (step @p64 :rule refl :args (@t6)) % 0.46/0.64 (step @p65 :rule cong :premises (@p64 @p63) :args (@t17)) % 0.46/0.64 (step @p66 :rule cong :premises (@p65) :args (@t18)) % 0.46/0.64 (step @p67 :rule eq_resolve :premises (@p4 @p66)) % 0.46/0.64 (step @p68 :rule instantiate :premises (@p67) :args (@t61)) % 0.46/0.64 (step @p69 :rule bool-double-not-elim :args (@t46)) % 0.46/0.64 (step @p70 :rule nary_cong :premises (@p53 @p69) :args ((or @t48 (not @t47)))) % 0.46/0.64 (step @p71 :rule cnf_or_neg :args (@t48 0)) % 0.46/0.64 (step @p72 :rule eq_resolve :premises (@p71 @p70)) % 0.46/0.64 (step @p73 :rule reordering :premises (@p72) :args ((or @t46 @t48))) % 0.46/0.64 (step @p74 :rule chain_m_resolution :premises (@p73 @p51) :args (@t46 @t54 @t55)) % 0.46/0.64 (step @p75 :rule cnf_equiv_pos1 :args (@t63)) % 0.46/0.64 (step @p76 :rule reordering :premises (@p75) :args ((or @t47 @t62 (not @t63)))) % 0.46/0.64 (step @p77 :rule chain_m_resolution :premises (@p76 @p74 @p68) :args (@t62 @t64 (@list @t46 @t63))) % 0.46/0.64 (step @p78 :rule eq-symm :args (@t57 @t12)) % 0.46/0.64 (step @p79 :rule cong :premises (@p78) :args (@t65)) % 0.46/0.64 (step @p80 :rule cong :premises (@p79) :args (@t66)) % 0.46/0.64 (step @p81 :rule cong :premises (@p80) :args (@t67)) % 0.46/0.64 (step @p82 :rule refl :args (@t69)) % 0.46/0.64 (step @p83 :rule nary_cong :premises (@p82 @p81) :args (@t70)) % 0.46/0.64 (step @p84 :rule refl :args (@t62)) % 0.46/0.64 (step @p85 :rule cong :premises (@p84 @p83) :args ((=> @t62 @t70))) % 0.46/0.64 (assume-push @p165 @t62) % 0.46/0.64 (step @p87 :rule instantiate :premises (@p77) :args ((@list @t57))) % 0.46/0.64 (step-pop @p166 :rule scope :premises (@p87)) % 0.46/0.64 (step @p88 :rule process_scope :premises (@p166) :args (@t70)) % 0.46/0.64 (step @p90 :rule eq_resolve :premises (@p88 @p85)) % 0.46/0.64 (step @p91 :rule implies_elim :premises (@p90)) % 0.46/0.64 (step @p92 :rule chain_m_resolution :premises (@p91 @p77) :args (@t72 @t73 (@list @t62))) % 0.46/0.64 (step @p93 :rule aci_norm :args ((= (or @t74 @t28) (or @t74 @t27 @t4)))) % 0.46/0.64 (step @p94 :rule bool-impl-elim :args (@t26 @t28)) % 0.46/0.64 (step @p95 :rule trans :premises (@p94 @p93)) % 0.46/0.64 (step @p96 :rule cong :premises (@p95) :args (@t29)) % 0.46/0.64 (step @p97 :rule eq_resolve :premises (@p18 @p96)) % 0.46/0.64 (step @p98 :rule instantiate :premises (@p97) :args ((@list @t57 @t42))) % 0.46/0.64 (step @p99 :rule exists-elim :args ((= @t22 (not (forall @t15 (not @t21)))))) % 0.46/0.64 (step @p100 :rule cong :premises (@p99) :args (@t23)) % 0.46/0.64 (step @p101 :rule eq_resolve :premises (@p7 @p100)) % 0.46/0.64 (step @p102 :rule instantiate :premises (@p101) :args (@t61)) % 0.46/0.64 (step @p103 :rule refl :args (@t75)) % 0.46/0.64 (step @p104 :rule bool-double-not-elim :args (@t56)) % 0.46/0.64 (step @p105 :rule nary_cong :premises (@p104 @p103) :args ((or (not @t76) @t75))) % 0.46/0.64 (step @p106 :rule bool-double-not-elim :args (@t75)) % 0.46/0.64 (step @p107 :rule refl :args (@t76)) % 0.46/0.64 (step @p108 :rule cong :premises (@p107 @p106) :args ((=> @t76 @t78))) % 0.46/0.64 (assume-push @p167 @t76) % 0.46/0.64 (step @p110 :rule skolemize :premises (@p102)) % 0.46/0.64 (step-pop @p168 :rule scope :premises (@p110)) % 0.46/0.64 (step @p111 :rule process_scope :premises (@p168) :args (@t78)) % 0.46/0.64 (step @p113 :rule eq_resolve :premises (@p111 @p108)) % 0.46/0.64 (step @p114 :rule implies_elim :premises (@p113)) % 0.46/0.64 (step @p115 :rule eq_resolve :premises (@p114 @p105)) % 0.46/0.64 (step @p116 :rule chain_m_resolution :premises (@p115 @p102) :args (@t75 @t54 (@list @t56))) % 0.46/0.64 (step @p117 :rule bool-impl-elim :args (@t7 @t30)) % 0.46/0.64 (step @p118 :rule cong :premises (@p117) :args (@t37)) % 0.46/0.64 (step @p119 :rule eq_resolve :premises (@p20 @p118)) % 0.46/0.64 (step @p120 :rule refl :args (@t80)) % 0.46/0.64 (step @p121 :rule nary_cong :premises (@p120 @p37) :args (@t81)) % 0.46/0.64 (step @p122 :rule refl :args (@t82)) % 0.46/0.64 (step @p123 :rule cong :premises (@p122 @p121) :args ((=> @t82 @t81))) % 0.46/0.64 (assume-push @p169 @t82) % 0.46/0.64 (step @p125 :rule instantiate :premises (@p119) :args (@t61)) % 0.46/0.64 (step-pop @p170 :rule scope :premises (@p125)) % 0.46/0.64 (step @p126 :rule process_scope :premises (@p170) :args (@t81)) % 0.46/0.64 (step @p128 :rule eq_resolve :premises (@p126 @p123)) % 0.46/0.64 (step @p129 :rule implies_elim :premises (@p128)) % 0.46/0.64 (step @p130 :rule chain_m_resolution :premises (@p129 @p119) :args (@t83 @t73 (@list @t82))) % 0.46/0.64 (step @p131 :rule cnf_or_neg :args (@t48 2)) % 0.46/0.64 (step @p132 :rule chain_m_resolution :premises (@p131 @p51) :args ((not @t43) @t54 @t55)) % 0.46/0.64 (step @p133 :rule cnf_or_pos :args (@t83)) % 0.46/0.64 (step @p134 :rule reordering :premises (@p133) :args ((or @t43 @t80 (not @t83)))) % 0.46/0.64 (step @p135 :rule chain_m_resolution :premises (@p134 @p132 @p130) :args (@t80 (@list true false) (@list @t43 @t83))) % 0.46/0.64 (step @p136 :rule cnf_or_pos :args (@t84)) % 0.46/0.64 (step @p137 :rule reordering :premises (@p136) :args ((or @t79 @t77 @t68 (not @t84)))) % 0.46/0.64 (step @p138 :rule chain_m_resolution :premises (@p137 @p135 @p116 @p98) :args (@t68 (@list true false false) (@list @t79 @t75 @t84))) % 0.46/0.64 (step @p139 :rule cnf_or_pos :args (@t72)) % 0.46/0.64 (step @p140 :rule reordering :premises (@p139) :args ((or @t69 @t71 (not @t72)))) % 0.46/0.64 (step @p141 :rule chain_m_resolution :premises (@p140 @p138 @p92) :args (@t71 @t64 (@list @t68 @t72))) % 0.46/0.64 (step @p142 :rule refl :args (@t86)) % 0.46/0.64 (step @p143 :rule bool-double-not-elim :args (@t58)) % 0.46/0.64 (step @p144 :rule nary_cong :premises (@p143 @p142) :args ((or (not @t71) @t86))) % 0.46/0.64 (step @p145 :rule eq-symm :args (@t85 @t57)) % 0.46/0.64 (step @p146 :rule bool-double-not-elim :args (@t87)) % 0.46/0.64 (step @p147 :rule trans :premises (@p146 @p145)) % 0.46/0.64 (step @p148 :rule refl :args (@t71)) % 0.46/0.64 (step @p149 :rule cong :premises (@p148 @p147) :args ((=> @t71 @t88))) % 0.46/0.64 (assume-push @p171 @t71) % 0.46/0.64 (step @p151 :rule skolemize :premises (@p141)) % 0.46/0.64 (step-pop @p172 :rule scope :premises (@p151)) % 0.46/0.64 (step @p152 :rule process_scope :premises (@p172) :args (@t88)) % 0.46/0.64 (step @p154 :rule eq_resolve :premises (@p152 @p149)) % 0.46/0.64 (step @p155 :rule implies_elim :premises (@p154)) % 0.46/0.64 (step @p156 :rule eq_resolve :premises (@p155 @p144)) % 0.46/0.64 (step @p157 :rule chain_m_resolution :premises (@p156 @p141) :args (@t86 @t54 (@list @t58))) % 0.46/0.64 (step @p158 :rule cong :premises (@p157 @p61) :args (@t68)) % 0.46/0.64 (step @p159 :rule true_intro :premises (@p138)) % 0.46/0.64 (step @p160 :rule symm :premises (@p159)) % 0.46/0.64 (step @p161 :rule trans :premises (@p160 @p158 @p60)) % 0.46/0.64 (step @p162 false :rule eq_resolve :premises (@p161 @p23)) % 0.46/0.64 ) % 0.46/0.64 % SZS output end Proof % 0.46/0.64 % cvc5 exiting %------------------------------------------------------------------------------