%------------------------------------------------------------------------------ % File : cvc5---1.3.4 % Problem : SYO212^5 : TPTP v9.2.1. Released v4.0.0. % Transfm : none % Format : tptp:raw % Command : /export/starexec/sandbox2/solver/bin/do_cvc5 /export/starexec/sandbox2/benchmark/theBenchmark.p 300 THM % Computer : n012.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 09:12:14 AM UTC 2026 % Result : Theorem 0.17s 0.36s % Output : Proof 0.17s % Verified : % SZS Type : - % Comments : %------------------------------------------------------------------------------ %----WARNING: Could not form TPTP format derivation %------------------------------------------------------------------------------ %----ORIGINAL SYSTEM OUTPUT % 0.00/0.06 % Problem : SYO212^5 : TPTP v9.2.1. Released v4.0.0. % 0.00/0.07 % Command : /export/starexec/sandbox2/solver/bin/do_cvc5 /export/starexec/sandbox2/benchmark/theBenchmark.p 300 THM % 0.07/0.25 % Computer : n012.cluster.edu % 0.07/0.25 % Model : x86_64 x86_64 % 0.07/0.25 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz % 0.07/0.25 % Memory : 8042.1875MB % 0.07/0.25 % OS : Linux 3.10.0-693.el7.x86_64 % 0.07/0.25 % CPULimit : 300 % 0.07/0.25 % WCLimit : 300 % 0.07/0.25 % DateTime : Wed Jun 3 00:00:48 EDT 2026 % 0.07/0.25 % CPUTime : % 0.17/0.33 %----Proving TH0 % 0.17/0.36 --- Run --mbqi --mbqi-enum --mbqi-enum-choice-grammar --mbqi-enum-global-syms-grammar --sygus-grammar-ho-partial --no-cegqi --no-sygus-inst at 90s... % 0.17/0.36 % SZS status Theorem % 0.17/0.36 % SZS output start Proof % 0.17/0.36 ( % 0.17/0.36 (declare-const tptp.a Bool) % 0.17/0.36 (declare-const tptp.b Bool) % 0.17/0.36 (define @t1 () (and tptp.a tptp.b)) % 0.17/0.36 (define @t2 () (@var "Xp" (-> Bool Bool))) % 0.17/0.36 (define @t3 () (_ @t2 @t1)) % 0.17/0.36 (define @t4 () (_ @t2 tptp.b)) % 0.17/0.36 (define @t5 () (_ @t2 tptp.a)) % 0.17/0.36 (define @t6 () (and @t5 @t4)) % 0.17/0.36 (define @t7 () (@list @t2)) % 0.17/0.36 (define @t8 () (forall @t7 (=> @t6 @t3))) % 0.17/0.36 (define @t9 () (not @t8)) % 0.17/0.36 (define @t10 () (_ @t2 @t1)) % 0.17/0.36 (define @t11 () (_ @t2 tptp.b)) % 0.17/0.36 (define @t12 () (not @t4)) % 0.17/0.36 (define @t13 () (_ @t2 tptp.a)) % 0.17/0.36 (define @t14 () (not @t5)) % 0.17/0.36 (define @t15 () (or @t14 @t12 @t3)) % 0.17/0.36 (define @t16 () (@purify @t1)) % 0.17/0.36 (define @t17 () (forall @t7 (or (not @t13) (not @t11) @t10))) % 0.17/0.36 (define @t18 () (@quantifiers_skolemize @t17 0)) % 0.17/0.36 (define @t19 () (_ @t18 @t16)) % 0.17/0.36 (define @t20 () (@purify tptp.b)) % 0.17/0.36 (define @t21 () (_ @t18 @t20)) % 0.17/0.36 (define @t22 () (not @t21)) % 0.17/0.36 (define @t23 () (@purify tptp.a)) % 0.17/0.36 (define @t24 () (_ @t18 @t23)) % 0.17/0.36 (define @t25 () (not @t24)) % 0.17/0.36 (define @t26 () (or @t25 @t22 @t19)) % 0.17/0.36 (define @t27 () (not @t26)) % 0.17/0.36 (define @t28 () (not @t17)) % 0.17/0.36 (define @t29 () (_ @t18 @t1)) % 0.17/0.36 (define @t30 () (_ @t18 tptp.b)) % 0.17/0.36 (define @t31 () (not @t30)) % 0.17/0.36 (define @t32 () (_ @t18 tptp.a)) % 0.17/0.36 (define @t33 () (not @t32)) % 0.17/0.36 (define @t34 () (or @t33 @t31 @t29)) % 0.17/0.36 (define @t35 () (not @t34)) % 0.17/0.36 (define @t36 () (@list true)) % 0.17/0.36 (define @t37 () (@list @t26)) % 0.17/0.36 (define @t38 () (not @t19)) % 0.17/0.36 (define @t39 () (not tptp.a)) % 0.17/0.36 (define @t40 () (not @t23)) % 0.17/0.36 (define @t41 () (not @t16)) % 0.17/0.36 (define @t42 () (not @t38)) % 0.17/0.36 (define @t43 () (= false true)) % 0.17/0.36 (define @t44 () (and @t24 @t23 @t16 @t38)) % 0.17/0.36 (define @t45 () (not @t1)) % 0.17/0.36 (define @t46 () (not @t20)) % 0.17/0.36 (define @t47 () (not @t41)) % 0.17/0.36 (define @t48 () (and @t38 @t41 @t46 @t21)) % 0.17/0.36 (define @t49 () (@list tptp.a)) % 0.17/0.36 (define @t50 () (and @t24 @t40 @t41 @t38)) % 0.17/0.36 (assume @p1 @t9) % 0.17/0.36 (assume @p2 true) % 0.17/0.36 (step @p3 :rule refl :args (@t10)) % 0.17/0.36 (step @p4 :rule refl :args (@t3)) % 0.17/0.36 (step @p5 :rule cong :premises (@p4 @p3) :args ((= @t3 @t10))) % 0.17/0.36 (step @p6 :rule symm :premises (@p5)) % 0.17/0.36 (step @p7 :rule eq_resolve :premises (@p4 @p6)) % 0.17/0.36 (step @p8 :rule refl :args (@t11)) % 0.17/0.36 (step @p9 :rule refl :args (@t4)) % 0.17/0.36 (step @p10 :rule cong :premises (@p9 @p8) :args ((= @t4 @t11))) % 0.17/0.36 (step @p11 :rule symm :premises (@p10)) % 0.17/0.36 (step @p12 :rule eq_resolve :premises (@p9 @p11)) % 0.17/0.36 (step @p13 :rule cong :premises (@p12) :args (@t12)) % 0.17/0.36 (step @p14 :rule refl :args (@t13)) % 0.17/0.36 (step @p15 :rule refl :args (@t5)) % 0.17/0.36 (step @p16 :rule cong :premises (@p15 @p14) :args ((= @t5 @t13))) % 0.17/0.36 (step @p17 :rule symm :premises (@p16)) % 0.17/0.36 (step @p18 :rule eq_resolve :premises (@p15 @p17)) % 0.17/0.36 (step @p19 :rule cong :premises (@p18) :args (@t14)) % 0.17/0.36 (step @p20 :rule nary_cong :premises (@p19 @p13 @p7) :args (@t15)) % 0.17/0.36 (step @p21 :rule cong :premises (@p20) :args ((forall @t7 @t15))) % 0.17/0.36 (step @p22 :rule aci_norm :args ((= (or (or @t14 @t12) @t3) @t15))) % 0.17/0.36 (step @p23 :rule bool-and-de-morgan :args (@t5 @t4 true)) % 0.17/0.36 (step @p24 :rule nary_cong :premises (@p23 @p4) :args ((or (not @t6) @t3))) % 0.17/0.36 (step @p25 :rule trans :premises (@p24 @p22)) % 0.17/0.36 (step @p26 :rule bool-impl-elim :args (@t6 @t3)) % 0.17/0.36 (step @p27 :rule trans :premises (@p26 @p25)) % 0.17/0.36 (step @p28 :rule cong :premises (@p27) :args (@t8)) % 0.17/0.36 (step @p29 :rule trans :premises (@p28 @p21)) % 0.17/0.36 (step @p30 :rule cong :premises (@p29) :args (@t9)) % 0.17/0.36 (step @p31 :rule eq_resolve :premises (@p1 @p30)) % 0.17/0.36 (step @p32 :rule refl :args (@t27)) % 0.17/0.36 (step @p33 :rule bool-double-not-elim :args (@t17)) % 0.17/0.36 (step @p34 :rule nary_cong :premises (@p33 @p32) :args ((or (not @t28) @t27))) % 0.17/0.36 (step @p35 :rule eq-refl :args (@t1)) % 0.17/0.36 (step @p36 :rule skolem_intro :args (@t16)) % 0.17/0.36 (step @p37 :rule refl :args (@t1)) % 0.17/0.36 (step @p38 :rule cong :premises (@p37 @p36) :args ((= @t1 @t16))) % 0.17/0.36 (step @p39 :rule trans :premises (@p38 @p35)) % 0.17/0.36 (step @p40 :rule true_elim :premises (@p39)) % 0.17/0.36 (step @p41 :rule cong :premises (@p40) :args (@t29)) % 0.17/0.36 (step @p42 :rule eq-refl :args (tptp.b)) % 0.17/0.36 (step @p43 :rule skolem_intro :args (@t20)) % 0.17/0.36 (step @p44 :rule refl :args (tptp.b)) % 0.17/0.36 (step @p45 :rule cong :premises (@p44 @p43) :args ((= tptp.b @t20))) % 0.17/0.36 (step @p46 :rule trans :premises (@p45 @p42)) % 0.17/0.36 (step @p47 :rule true_elim :premises (@p46)) % 0.17/0.36 (step @p48 :rule cong :premises (@p47) :args (@t30)) % 0.17/0.36 (step @p49 :rule cong :premises (@p48) :args (@t31)) % 0.17/0.36 (step @p50 :rule eq-refl :args (tptp.a)) % 0.17/0.36 (step @p51 :rule skolem_intro :args (@t23)) % 0.17/0.36 (step @p52 :rule refl :args (tptp.a)) % 0.17/0.36 (step @p53 :rule cong :premises (@p52 @p51) :args ((= tptp.a @t23))) % 0.17/0.36 (step @p54 :rule trans :premises (@p53 @p50)) % 0.17/0.36 (step @p55 :rule true_elim :premises (@p54)) % 0.17/0.36 (step @p56 :rule cong :premises (@p55) :args (@t32)) % 0.17/0.36 (step @p57 :rule cong :premises (@p56) :args (@t33)) % 0.17/0.36 (step @p58 :rule nary_cong :premises (@p57 @p49 @p41) :args (@t34)) % 0.17/0.36 (step @p59 :rule cong :premises (@p58) :args (@t35)) % 0.17/0.36 (step @p60 :rule refl :args (@t28)) % 0.17/0.36 (step @p61 :rule cong :premises (@p60 @p59) :args ((=> @t28 @t35))) % 0.17/0.36 (assume-push @p211 @t28) % 0.17/0.36 (step @p63 :rule skolemize :premises (@p31)) % 0.17/0.36 (step-pop @p212 :rule scope :premises (@p63)) % 0.17/0.36 (step @p64 :rule process_scope :premises (@p212) :args (@t35)) % 0.17/0.36 (step @p66 :rule eq_resolve :premises (@p64 @p61)) % 0.17/0.36 (step @p67 :rule implies_elim :premises (@p66)) % 0.17/0.36 (step @p68 :rule eq_resolve :premises (@p67 @p34)) % 0.17/0.36 (step @p69 :rule chain_m_resolution :premises (@p68 @p31) :args (@t27 @t36 (@list @t17))) % 0.17/0.36 (step @p70 :rule bool-double-not-elim :args (@t24)) % 0.17/0.36 (step @p71 :rule refl :args (@t26)) % 0.17/0.36 (step @p72 :rule nary_cong :premises (@p71 @p70) :args ((or @t26 (not @t25)))) % 0.17/0.36 (step @p73 :rule cnf_or_neg :args (@t26 0)) % 0.17/0.36 (step @p74 :rule eq_resolve :premises (@p73 @p72)) % 0.17/0.36 (step @p75 :rule reordering :premises (@p74) :args ((or @t24 @t26))) % 0.17/0.36 (step @p76 :rule chain_m_resolution :premises (@p75 @p69) :args (@t24 @t36 @t37)) % 0.17/0.36 (step @p77 :rule cnf_or_neg :args (@t26 2)) % 0.17/0.36 (step @p78 :rule chain_m_resolution :premises (@p77 @p69) :args (@t38 @t36 @t37)) % 0.17/0.36 (step @p79 :rule equiv_elim1 :premises (@p55)) % 0.17/0.36 (step @p80 :rule reordering :premises (@p79) :args ((or @t23 @t39))) % 0.17/0.36 (step @p81 :rule bool-double-not-elim :args (@t19)) % 0.17/0.36 (step @p82 :rule refl :args (@t25)) % 0.17/0.36 (step @p83 :rule refl :args (@t40)) % 0.17/0.36 (step @p84 :rule refl :args (@t41)) % 0.17/0.36 (step @p85 :rule nary_cong :premises (@p84 @p83 @p82 @p81) :args ((or @t41 @t40 @t25 @t42))) % 0.17/0.36 (assume-push @p213 @t24) % 0.17/0.36 (assume-push @p214 @t23) % 0.17/0.36 (assume-push @p215 @t16) % 0.17/0.36 (assume-push @p216 @t38) % 0.17/0.36 (step @p90 :rule evaluate :args (@t43)) % 0.17/0.36 (step @p91 :rule true_intro :premises (@p76)) % 0.17/0.36 (step @p92 :rule true_intro :premises (@p214)) % 0.17/0.36 (step @p93 :rule symm :premises (@p92)) % 0.17/0.36 (step @p94 :rule true_intro :premises (@p215)) % 0.17/0.36 (step @p95 :rule trans :premises (@p94 @p93)) % 0.17/0.36 (step @p96 :rule cong :premises (@p95) :args (@t19)) % 0.17/0.36 (step @p97 :rule false_intro :premises (@p78)) % 0.17/0.36 (step @p98 :rule symm :premises (@p97)) % 0.17/0.36 (step @p99 :rule trans :premises (@p98 @p96 @p91)) % 0.17/0.36 (step @p100 false :rule eq_resolve :premises (@p99 @p90)) % 0.17/0.36 (step-pop @p217 :rule scope :premises (@p100)) % 0.17/0.36 (step-pop @p218 :rule scope :premises (@p217)) % 0.17/0.36 (step-pop @p219 :rule scope :premises (@p218)) % 0.17/0.36 (step-pop @p220 :rule scope :premises (@p219)) % 0.17/0.36 (step @p101 :rule process_scope :premises (@p220) :args (false)) % 0.17/0.36 (assume-push @p221 @t16) % 0.17/0.36 (assume-push @p222 @t23) % 0.17/0.36 (assume-push @p223 @t24) % 0.17/0.36 (assume-push @p224 @t38) % 0.17/0.36 (step @p110 :rule and_intro :premises (@p76 @p222 @p221 @p78)) % 0.17/0.36 (step-pop @p225 :rule scope :premises (@p110)) % 0.17/0.36 (step-pop @p226 :rule scope :premises (@p225)) % 0.17/0.36 (step-pop @p227 :rule scope :premises (@p226)) % 0.17/0.36 (step-pop @p228 :rule scope :premises (@p227)) % 0.17/0.36 (step @p111 :rule process_scope :premises (@p228) :args (@t44)) % 0.17/0.36 (step @p116 :rule implies_elim :premises (@p111)) % 0.17/0.36 (step @p117 :rule resolution :premises (@p116 @p101) :args (true @t44)) % 0.17/0.36 (step @p118 :rule not_and :premises (@p117)) % 0.17/0.36 (step @p119 :rule eq_resolve :premises (@p118 @p85)) % 0.17/0.36 (step @p120 :rule reordering :premises (@p119) :args ((or @t19 @t25 @t41 @t40))) % 0.17/0.36 (step @p121 :rule equiv_elim1 :premises (@p40)) % 0.17/0.36 (step @p122 :rule reordering :premises (@p121) :args ((or @t16 @t45))) % 0.17/0.36 (step @p123 :rule cnf_and_neg :args (@t1)) % 0.17/0.36 (step @p124 :rule equiv_elim2 :premises (@p47)) % 0.17/0.36 (step @p125 :rule bool-double-not-elim :args (@t21)) % 0.17/0.36 (step @p126 :rule nary_cong :premises (@p71 @p125) :args ((or @t26 (not @t22)))) % 0.17/0.36 (step @p127 :rule cnf_or_neg :args (@t26 1)) % 0.17/0.36 (step @p128 :rule eq_resolve :premises (@p127 @p126)) % 0.17/0.36 (step @p129 :rule reordering :premises (@p128) :args ((or @t21 @t26))) % 0.17/0.36 (step @p130 :rule chain_m_resolution :premises (@p129 @p69) :args (@t21 @t36 @t37)) % 0.17/0.36 (step @p131 :rule bool-double-not-elim :args (@t20)) % 0.17/0.36 (step @p132 :rule bool-double-not-elim :args (@t16)) % 0.17/0.36 (step @p133 :rule refl :args (@t22)) % 0.17/0.36 (step @p134 :rule nary_cong :premises (@p133 @p81 @p132 @p131) :args ((or @t22 @t42 @t47 (not @t46)))) % 0.17/0.36 (assume-push @p229 @t38) % 0.17/0.36 (assume-push @p230 @t41) % 0.17/0.36 (assume-push @p231 @t46) % 0.17/0.36 (assume-push @p232 @t21) % 0.17/0.36 (step @p139 :rule evaluate :args ((= true false))) % 0.17/0.36 (step @p97 :rule false_intro :premises (@p78)) % 0.17/0.36 (step @p140 :rule false_intro :premises (@p230)) % 0.17/0.36 (step @p141 :rule symm :premises (@p140)) % 0.17/0.36 (step @p142 :rule false_intro :premises (@p231)) % 0.17/0.36 (step @p143 :rule trans :premises (@p142 @p141)) % 0.17/0.36 (step @p144 :rule cong :premises (@p143) :args (@t21)) % 0.17/0.36 (step @p145 :rule true_intro :premises (@p130)) % 0.17/0.36 (step @p146 :rule symm :premises (@p145)) % 0.17/0.36 (step @p147 :rule trans :premises (@p146 @p144 @p97)) % 0.17/0.36 (step @p148 false :rule eq_resolve :premises (@p147 @p139)) % 0.17/0.36 (step-pop @p233 :rule scope :premises (@p148)) % 0.17/0.36 (step-pop @p234 :rule scope :premises (@p233)) % 0.17/0.36 (step-pop @p235 :rule scope :premises (@p234)) % 0.17/0.36 (step-pop @p236 :rule scope :premises (@p235)) % 0.17/0.36 (step @p149 :rule process_scope :premises (@p236) :args (false)) % 0.17/0.36 (assume-push @p237 @t21) % 0.17/0.36 (assume-push @p238 @t38) % 0.17/0.36 (assume-push @p239 @t41) % 0.17/0.36 (assume-push @p240 @t46) % 0.17/0.36 (step @p158 :rule and_intro :premises (@p78 @p239 @p240 @p130)) % 0.17/0.36 (step-pop @p241 :rule scope :premises (@p158)) % 0.17/0.36 (step-pop @p242 :rule scope :premises (@p241)) % 0.17/0.36 (step-pop @p243 :rule scope :premises (@p242)) % 0.17/0.36 (step-pop @p244 :rule scope :premises (@p243)) % 0.17/0.36 (step @p159 :rule process_scope :premises (@p244) :args (@t48)) % 0.17/0.36 (step @p164 :rule implies_elim :premises (@p159)) % 0.17/0.36 (step @p165 :rule resolution :premises (@p164 @p149) :args (true @t48)) % 0.17/0.36 (step @p166 :rule not_and :premises (@p165)) % 0.17/0.36 (step @p167 :rule eq_resolve :premises (@p166 @p134)) % 0.17/0.36 (step @p168 :rule reordering :premises (@p167) :args ((or @t16 @t19 @t20 @t22))) % 0.17/0.36 (step @p169 :rule chain_m_resolution :premises (@p168 @p78 @p130 @p124 @p123 @p122 @p120 @p78 @p76 @p80) :args (@t39 (@list true false true true true true true false false) (@list @t19 @t21 @t20 tptp.b @t1 @t16 @t19 @t24 @t23))) % 0.17/0.36 (step @p170 :rule equiv_elim2 :premises (@p55)) % 0.17/0.36 (step @p171 :rule chain_m_resolution :premises (@p170 @p169) :args (@t40 @t36 @t49)) % 0.17/0.36 (step @p172 :rule cnf_and_pos :args (@t1 0)) % 0.17/0.36 (step @p173 :rule reordering :premises (@p172) :args ((or tptp.a @t45))) % 0.17/0.36 (step @p174 :rule chain_m_resolution :premises (@p173 @p169) :args (@t45 @t36 @t49)) % 0.17/0.36 (step @p175 :rule equiv_elim2 :premises (@p40)) % 0.17/0.36 (step @p176 :rule chain_m_resolution :premises (@p175 @p174) :args (@t41 @t36 (@list @t1))) % 0.17/0.36 (step @p177 :rule bool-double-not-elim :args (@t23)) % 0.17/0.36 (step @p178 :rule nary_cong :premises (@p82 @p81 @p132 @p177) :args ((or @t25 @t42 @t47 (not @t40)))) % 0.17/0.36 (assume-push @p245 @t24) % 0.17/0.36 (assume-push @p246 @t40) % 0.17/0.36 (assume-push @p247 @t41) % 0.17/0.36 (assume-push @p248 @t38) % 0.17/0.36 (step @p90 :rule evaluate :args (@t43)) % 0.17/0.36 (step @p91 :rule true_intro :premises (@p76)) % 0.17/0.36 (step @p183 :rule false_intro :premises (@p246)) % 0.17/0.36 (step @p184 :rule symm :premises (@p183)) % 0.17/0.36 (step @p185 :rule false_intro :premises (@p247)) % 0.17/0.36 (step @p186 :rule trans :premises (@p185 @p184)) % 0.17/0.36 (step @p187 :rule cong :premises (@p186) :args (@t19)) % 0.17/0.36 (step @p97 :rule false_intro :premises (@p78)) % 0.17/0.36 (step @p98 :rule symm :premises (@p97)) % 0.17/0.36 (step @p188 :rule trans :premises (@p98 @p187 @p91)) % 0.17/0.36 (step @p189 false :rule eq_resolve :premises (@p188 @p90)) % 0.17/0.36 (step-pop @p249 :rule scope :premises (@p189)) % 0.17/0.36 (step-pop @p250 :rule scope :premises (@p249)) % 0.17/0.36 (step-pop @p251 :rule scope :premises (@p250)) % 0.17/0.36 (step-pop @p252 :rule scope :premises (@p251)) % 0.17/0.36 (step @p190 :rule process_scope :premises (@p252) :args (false)) % 0.17/0.36 (assume-push @p253 @t24) % 0.17/0.36 (assume-push @p254 @t38) % 0.17/0.36 (assume-push @p255 @t41) % 0.17/0.36 (assume-push @p256 @t40) % 0.17/0.36 (step @p199 :rule and_intro :premises (@p76 @p256 @p255 @p78)) % 0.17/0.36 (step-pop @p257 :rule scope :premises (@p199)) % 0.17/0.36 (step-pop @p258 :rule scope :premises (@p257)) % 0.17/0.36 (step-pop @p259 :rule scope :premises (@p258)) % 0.17/0.36 (step-pop @p260 :rule scope :premises (@p259)) % 0.17/0.36 (step @p200 :rule process_scope :premises (@p260) :args (@t50)) % 0.17/0.36 (step @p205 :rule implies_elim :premises (@p200)) % 0.17/0.36 (step @p206 :rule resolution :premises (@p205 @p190) :args (true @t50)) % 0.17/0.36 (step @p207 :rule not_and :premises (@p206)) % 0.17/0.36 (step @p208 :rule eq_resolve :premises (@p207 @p178)) % 0.17/0.36 (step @p209 :rule reordering :premises (@p208) :args ((or @t16 @t19 @t23 @t25))) % 0.17/0.36 (step @p210 false :rule chain_m_resolution :premises (@p209 @p176 @p171 @p78 @p76) :args (false (@list true true true false) (@list @t16 @t23 @t19 @t24))) % 0.17/0.36 ) % 0.17/0.36 % SZS output end Proof % 0.17/0.36 % cvc5 exiting %------------------------------------------------------------------------------