%------------------------------------------------------------------------------ % File : cvc5---1.3.4 % Problem : GRP517-1 : TPTP v9.2.1. Released v2.6.0. % Transfm : none % Format : tptp:raw % Command : /export/starexec/sandbox/solver/bin/do_cvc5 /export/starexec/sandbox/benchmark/theBenchmark.p 300 THM % Computer : n024.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:20:51 AM UTC 2026 % Result : Unsatisfiable 27.93s 28.11s % Output : Proof 27.93s % Verified : % SZS Type : - % Comments : %------------------------------------------------------------------------------ %----WARNING: Could not form TPTP format derivation %------------------------------------------------------------------------------ %----ORIGINAL SYSTEM OUTPUT % 0.00/0.06 % Problem : GRP517-1 : TPTP v9.2.1. Released v2.6.0. % 0.00/0.07 % Command : /export/starexec/sandbox/solver/bin/do_cvc5 /export/starexec/sandbox/benchmark/theBenchmark.p 300 THM % 0.08/0.25 % Computer : n024.cluster.edu % 0.08/0.25 % Model : x86_64 x86_64 % 0.08/0.25 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz % 0.08/0.25 % Memory : 8042.1875MB % 0.08/0.25 % OS : Linux 3.10.0-693.el7.x86_64 % 0.08/0.25 % CPULimit : 300 % 0.08/0.25 % WCLimit : 300 % 0.08/0.25 % DateTime : Mon Jun 1 20:14:30 EDT 2026 % 0.08/0.25 % CPUTime : % 0.15/0.33 %----Proving TF0_NAR, FOF, or CNF % 0.15/0.34 --- Run --decision=internal --simplification=none --no-inst-no-entail --no-cbqi --full-saturate-quant at 15... % 15.10/15.37 --- Run --no-e-matching --full-saturate-quant at 6... % 21.11/21.38 --- Run --no-e-matching --enum-inst-sum --full-saturate-quant at 6... % 27.22/27.40 --- Run --finite-model-find --uf-ss=no-minimal at 6... % 27.93/28.11 % SZS status Unsatisfiable % 27.93/28.11 % SZS output start Proof % 27.93/28.12 ( % 27.93/28.12 (declare-sort $$unsorted 0) % 27.93/28.12 (declare-const tptp.a1 $$unsorted) % 27.93/28.12 (declare-const tptp.b1 $$unsorted) % 27.93/28.12 (declare-const tptp.inverse (-> $$unsorted $$unsorted)) % 27.93/28.12 (declare-const tptp.multiply (-> $$unsorted $$unsorted $$unsorted)) % 27.93/28.12 (define @t1 () (@var "C" $$unsorted)) % 27.93/28.12 (define @t2 () (@var "B" $$unsorted)) % 27.93/28.12 (define @t3 () (@var "A" $$unsorted)) % 27.93/28.12 (define @t4 () (tptp.multiply @t3 (tptp.multiply (tptp.multiply (tptp.inverse (tptp.multiply @t3 @t2)) @t1) @t2))) % 27.93/28.12 (define @t5 () (forall (@list @t3 @t2 @t1) (= @t4 @t1))) % 27.93/28.12 (define @t6 () (tptp.inverse tptp.b1)) % 27.93/28.12 (define @t7 () (tptp.multiply @t6 tptp.b1)) % 27.93/28.12 (define @t8 () (tptp.inverse tptp.a1)) % 27.93/28.12 (define @t9 () (tptp.multiply @t8 tptp.a1)) % 27.93/28.12 (define @t10 () (tptp.inverse @t9)) % 27.93/28.12 (define @t11 () (tptp.multiply @t10 tptp.b1)) % 27.93/28.12 (define @t12 () (tptp.inverse @t11)) % 27.93/28.12 (define @t13 () (tptp.multiply @t12 tptp.b1)) % 27.93/28.12 (define @t14 () (tptp.multiply (tptp.multiply (tptp.inverse (tptp.multiply @t13 tptp.a1)) tptp.a1) tptp.a1)) % 27.93/28.12 (define @t15 () (tptp.multiply @t13 tptp.b1)) % 27.93/28.12 (define @t16 () (tptp.multiply tptp.b1 @t9)) % 27.93/28.12 (define @t17 () (tptp.multiply (tptp.multiply (tptp.inverse @t16) @t9) @t9)) % 27.93/28.12 (define @t18 () (tptp.multiply (tptp.multiply (tptp.inverse (tptp.multiply @t11 @t11)) @t9) @t11)) % 27.93/28.12 (define @t19 () (tptp.multiply (tptp.multiply (tptp.inverse (tptp.multiply @t9 @t14)) tptp.a1) @t14)) % 27.93/28.12 (define @t20 () (tptp.multiply (tptp.multiply @t12 @t9) tptp.b1)) % 27.93/28.12 (define @t21 () (tptp.multiply tptp.b1 @t17)) % 27.93/28.12 (define @t22 () (tptp.inverse @t21)) % 27.93/28.12 (define @t23 () (tptp.multiply @t22 @t15)) % 27.93/28.12 (define @t24 () (tptp.multiply @t9 tptp.a1)) % 27.93/28.12 (define @t25 () (tptp.multiply @t9 @t19)) % 27.93/28.12 (define @t26 () (tptp.inverse @t25)) % 27.93/28.12 (define @t27 () (tptp.multiply @t26 tptp.a1)) % 27.93/28.12 (define @t28 () (tptp.multiply @t27 @t19)) % 27.93/28.12 (define @t29 () (tptp.multiply @t9 @t28)) % 27.93/28.12 (define @t30 () (tptp.multiply @t10 @t9)) % 27.93/28.12 (define @t31 () (tptp.inverse @t30)) % 27.93/28.12 (define @t32 () (tptp.multiply @t31 @t15)) % 27.93/28.12 (define @t33 () (tptp.multiply @t32 @t9)) % 27.93/28.12 (define @t34 () (tptp.multiply @t10 @t33)) % 27.93/28.12 (define @t35 () (tptp.multiply @t12 @t15)) % 27.93/28.12 (define @t36 () (= @t9 @t13)) % 27.93/28.12 (define @t37 () (tptp.multiply (tptp.multiply (tptp.inverse (tptp.multiply (tptp.multiply (tptp.inverse (tptp.multiply @t9 @t11)) @t9) @t11)) (tptp.multiply (tptp.multiply (tptp.inverse (tptp.multiply tptp.a1 @t9)) @t11) @t9)) @t11)) % 27.93/28.12 (define @t38 () (tptp.multiply (tptp.multiply (tptp.inverse (tptp.multiply @t6 @t37)) @t9) @t37)) % 27.93/28.12 (define @t39 () (tptp.multiply (tptp.multiply (tptp.inverse @t24) @t9) tptp.a1)) % 27.93/28.12 (define @t40 () (= tptp.b1 (tptp.multiply @t10 @t15))) % 27.93/28.12 (define @t41 () (tptp.multiply @t11 @t18)) % 27.93/28.12 (define @t42 () (= @t9 @t41)) % 27.93/28.12 (define @t43 () (= @t9 @t21)) % 27.93/28.12 (define @t44 () (= tptp.a1 @t25)) % 27.93/28.12 (define @t45 () (tptp.multiply @t9 @t39)) % 27.93/28.12 (define @t46 () (= @t9 @t45)) % 27.93/28.12 (define @t47 () (tptp.inverse (tptp.multiply @t9 @t9))) % 27.93/28.12 (define @t48 () (= @t11 (tptp.multiply @t9 (tptp.multiply (tptp.multiply @t47 @t11) @t9)))) % 27.93/28.12 (define @t49 () (= @t15 (tptp.multiply tptp.b1 (tptp.multiply @t23 @t17)))) % 27.93/28.12 (define @t50 () (tptp.inverse @t41)) % 27.93/28.12 (define @t51 () (tptp.multiply @t50 tptp.b1)) % 27.93/28.12 (define @t52 () (tptp.multiply @t51 @t18)) % 27.93/28.12 (define @t53 () (tptp.multiply @t11 @t52)) % 27.93/28.12 (define @t54 () (= tptp.b1 @t53)) % 27.93/28.12 (define @t55 () (= tptp.a1 @t29)) % 27.93/28.12 (define @t56 () (tptp.multiply @t10 @t20)) % 27.93/28.12 (define @t57 () (= @t9 @t56)) % 27.93/28.12 (define @t58 () (= @t20 (tptp.multiply @t8 (tptp.multiply @t56 tptp.a1)))) % 27.93/28.12 (define @t59 () (= @t15 @t34)) % 27.93/28.12 (define @t60 () (= @t9 (tptp.multiply @t6 @t38))) % 27.93/28.12 (define @t61 () (tptp.inverse @t15)) % 27.93/28.12 (define @t62 () (tptp.multiply @t61 @t38)) % 27.93/28.12 (define @t63 () (tptp.multiply @t62 tptp.b1)) % 27.93/28.12 (define @t64 () (tptp.multiply @t13 @t63)) % 27.93/28.12 (define @t65 () (= @t38 @t64)) % 27.93/28.12 (define @t66 () (tptp.inverse @t45)) % 27.93/28.12 (define @t67 () (tptp.multiply @t66 @t20)) % 27.93/28.12 (define @t68 () (tptp.multiply @t67 @t39)) % 27.93/28.12 (define @t69 () (tptp.multiply @t9 @t68)) % 27.93/28.12 (define @t70 () (= @t20 @t69)) % 27.93/28.12 (define @t71 () (tptp.multiply @t47 tptp.b1)) % 27.93/28.12 (define @t72 () (and @t40 @t42 @t43 @t44 @t46 @t48 @t49 @t54 @t55 @t57 @t58 @t59 @t60 @t65 @t70)) % 27.93/28.12 (assume @p1 @t5) % 27.93/28.12 (assume @p2 (not (= @t9 @t7))) % 27.93/28.12 (step @p3 :rule eq-symm :args (@t4 @t1)) % 27.93/28.12 (step @p4 :rule cong :premises (@p3) :args (@t5)) % 27.93/28.12 (step @p5 :rule eq_resolve :premises (@p1 @p4)) % 27.93/28.12 (step @p6 :rule instantiate :premises (@p5) :args ((@list @t10 tptp.b1 tptp.b1))) % 27.93/28.12 (step @p7 :rule instantiate :premises (@p5) :args ((@list @t11 @t11 @t9))) % 27.93/28.12 (step @p8 :rule instantiate :premises (@p5) :args ((@list tptp.b1 @t9 @t9))) % 27.93/28.12 (step @p9 :rule instantiate :premises (@p5) :args ((@list @t9 @t14 tptp.a1))) % 27.93/28.12 (step @p10 :rule instantiate :premises (@p5) :args ((@list @t9 tptp.a1 @t9))) % 27.93/28.12 (step @p11 :rule instantiate :premises (@p5) :args ((@list @t9 @t9 @t11))) % 27.93/28.12 (step @p12 :rule instantiate :premises (@p5) :args ((@list tptp.b1 @t17 @t15))) % 27.93/28.12 (step @p13 :rule instantiate :premises (@p5) :args ((@list @t11 @t18 tptp.b1))) % 27.93/28.12 (step @p14 :rule instantiate :premises (@p5) :args ((@list @t9 @t19 tptp.a1))) % 27.93/28.12 (step @p15 :rule instantiate :premises (@p5) :args ((@list @t10 tptp.b1 @t9))) % 27.93/28.12 (step @p16 :rule instantiate :premises (@p5) :args ((@list @t8 tptp.a1 @t20))) % 27.93/28.12 (step @p17 :rule instantiate :premises (@p5) :args ((@list @t10 @t9 @t15))) % 27.93/28.12 (step @p18 :rule false_intro :premises (@p2)) % 27.93/28.12 (step @p19 :rule symm :premises (@p6)) % 27.93/28.12 (step @p20 :rule refl :args (@t15)) % 27.93/28.12 (step @p21 :rule symm :premises (@p8)) % 27.93/28.12 (step @p22 :rule cong :premises (@p21) :args (@t22)) % 27.93/28.12 (step @p23 :rule cong :premises (@p22 @p20) :args (@t23)) % 27.93/28.12 (step @p24 :rule symm :premises (@p12)) % 27.93/28.12 (step @p25 :rule refl :args (@t17)) % 27.93/28.12 (step @p26 :rule symm :premises (@p23)) % 27.93/28.12 (step @p27 :rule trans :premises (@p6 @p26)) % 27.93/28.12 (step @p28 :rule cong :premises (@p27 @p25) :args (@t21)) % 27.93/28.12 (step @p29 :rule trans :premises (@p8 @p28)) % 27.93/28.12 (step @p30 :rule refl :args (tptp.b1)) % 27.93/28.12 (step @p31 :rule cong :premises (@p30 @p29) :args (@t16)) % 27.93/28.12 (step @p32 :rule refl :args (@t9)) % 27.93/28.12 (step @p33 :rule symm :premises (@p22)) % 27.93/28.12 (step @p34 :rule symm :premises (@p15)) % 27.93/28.12 (step @p35 :rule symm :premises (@p16)) % 27.93/28.12 (step @p36 :rule refl :args (tptp.a1)) % 27.93/28.12 (step @p37 :rule cong :premises (@p15 @p36) :args (@t24)) % 27.93/28.12 (step @p38 :rule symm :premises (@p9)) % 27.93/28.12 (step @p39 :rule refl :args (@t19)) % 27.93/28.12 (step @p40 :rule cong :premises (@p38) :args (@t26)) % 27.93/28.12 (step @p41 :rule cong :premises (@p40 @p36) :args (@t27)) % 27.93/28.12 (step @p42 :rule cong :premises (@p41 @p39) :args (@t28)) % 27.93/28.12 (step @p43 :rule trans :premises (@p42 @p38)) % 27.93/28.12 (step @p44 :rule cong :premises (@p32 @p43) :args (@t29)) % 27.93/28.12 (step @p45 :rule trans :premises (@p14 @p44 @p37)) % 27.93/28.12 (step @p46 :rule refl :args (@t8)) % 27.93/28.12 (step @p47 :rule cong :premises (@p46 @p45) :args (@t9)) % 27.93/28.12 (step @p48 :rule trans :premises (@p47 @p35)) % 27.93/28.12 (step @p49 :rule refl :args (@t10)) % 27.93/28.12 (step @p50 :rule cong :premises (@p49 @p48) :args (@t30)) % 27.93/28.12 (step @p51 :rule trans :premises (@p50 @p34)) % 27.93/28.12 (step @p52 :rule cong :premises (@p51) :args (@t31)) % 27.93/28.12 (step @p53 :rule trans :premises (@p52 @p33)) % 27.93/28.12 (step @p54 :rule cong :premises (@p53 @p20) :args (@t32)) % 27.93/28.12 (step @p55 :rule trans :premises (@p54 @p23 @p19)) % 27.93/28.12 (step @p56 :rule cong :premises (@p55 @p32) :args (@t33)) % 27.93/28.12 (step @p57 :rule trans :premises (@p56 @p31 @p24)) % 27.93/28.12 (step @p58 :rule cong :premises (@p33 @p57) :args (@t34)) % 27.93/28.12 (step @p59 :rule trans :premises (@p17 @p58 @p23 @p19)) % 27.93/28.12 (step @p60 :rule symm :premises (@p56)) % 27.93/28.12 (step @p61 :rule symm :premises (@p31)) % 27.93/28.12 (step @p62 :rule symm :premises (@p17)) % 27.93/28.12 (step @p63 :rule symm :premises (@p58)) % 27.93/28.12 (step @p64 :rule trans :premises (@p6 @p26 @p63 @p62 @p12 @p61 @p60)) % 27.93/28.12 (step @p65 :rule cong :premises (@p49 @p64) :args (@t11)) % 27.93/28.12 (step @p66 :rule trans :premises (@p65 @p58 @p23 @p19)) % 27.93/28.12 (step @p67 :rule cong :premises (@p66) :args (@t12)) % 27.93/28.12 (step @p68 :rule cong :premises (@p67 @p59) :args (@t35)) % 27.93/28.12 (step @p69 :rule symm :premises (@p59)) % 27.93/28.12 (step @p70 :rule refl :args (@t12)) % 27.93/28.12 (step @p71 :rule cong :premises (@p70 @p69) :args (@t13)) % 27.93/28.12 (step @p72 :rule trans :premises (@p71 @p68)) % 27.93/28.12 (step @p73 :rule cong :premises (@p32 @p72) :args (@t36)) % 27.93/28.12 (step @p74 :rule trans :premises (@p73 @p18)) % 27.93/28.12 (step @p75 :rule false_elim :premises (@p74)) % 27.93/28.12 (step @p76 :rule instantiate :premises (@p5) :args ((@list @t6 @t37 @t9))) % 27.93/28.12 (step @p77 :rule instantiate :premises (@p5) :args ((@list @t13 tptp.b1 @t38))) % 27.93/28.12 (step @p78 :rule instantiate :premises (@p5) :args ((@list @t9 @t39 @t20))) % 27.93/28.12 (assume-push @p161 @t40) % 27.93/28.12 (assume-push @p162 @t42) % 27.93/28.12 (assume-push @p163 @t43) % 27.93/28.12 (assume-push @p164 @t44) % 27.93/28.12 (assume-push @p165 @t46) % 27.93/28.12 (assume-push @p166 @t48) % 27.93/28.12 (assume-push @p167 @t49) % 27.93/28.12 (assume-push @p168 @t54) % 27.93/28.12 (assume-push @p169 @t55) % 27.93/28.12 (assume-push @p170 @t57) % 27.93/28.12 (assume-push @p171 @t58) % 27.93/28.12 (assume-push @p172 @t59) % 27.93/28.12 (assume-push @p173 @t60) % 27.93/28.12 (assume-push @p174 @t65) % 27.93/28.12 (assume-push @p175 @t70) % 27.93/28.12 (step @p94 :rule cong :premises (@p70 @p59) :args (@t35)) % 27.93/28.12 (step @p95 :rule trans :premises (@p56 @p31 @p24 @p17 @p58 @p23 @p19)) % 27.93/28.12 (step @p96 :rule cong :premises (@p49 @p95) :args (@t34)) % 27.93/28.12 (step @p97 :rule trans :premises (@p6 @p26 @p63 @p96)) % 27.93/28.12 (step @p98 :rule cong :premises (@p97) :args (@t6)) % 27.93/28.12 (step @p99 :rule cong :premises (@p98 @p69) :args (@t7)) % 27.93/28.12 (step @p100 :rule symm :premises (@p11)) % 27.93/28.12 (step @p101 :rule refl :args (@t47)) % 27.93/28.12 (step @p102 :rule cong :premises (@p101 @p97) :args (@t71)) % 27.93/28.12 (step @p103 :rule cong :premises (@p102 @p32) :args ((tptp.multiply @t71 @t9))) % 27.93/28.12 (step @p104 :rule symm :premises (@p10)) % 27.93/28.12 (step @p105 :rule refl :args (@t39)) % 27.93/28.12 (step @p106 :rule refl :args (@t20)) % 27.93/28.12 (step @p107 :rule cong :premises (@p104) :args (@t66)) % 27.93/28.12 (step @p108 :rule cong :premises (@p107 @p106) :args (@t67)) % 27.93/28.12 (step @p109 :rule trans :premises (@p108 @p34)) % 27.93/28.12 (step @p110 :rule cong :premises (@p109 @p105) :args (@t68)) % 27.93/28.12 (step @p111 :rule trans :premises (@p110 @p104)) % 27.93/28.12 (step @p112 :rule cong :premises (@p32 @p111) :args (@t69)) % 27.93/28.12 (step @p113 :rule trans :premises (@p47 @p35 @p78 @p112)) % 27.93/28.12 (step @p114 :rule cong :premises (@p113) :args (@t10)) % 27.93/28.12 (step @p115 :rule cong :premises (@p114 @p30) :args (@t11)) % 27.93/28.12 (step @p116 :rule cong :premises (@p115 @p32) :args ((tptp.multiply @t11 @t9))) % 27.93/28.12 (step @p117 :rule symm :premises (@p7)) % 27.93/28.12 (step @p118 :rule refl :args (@t18)) % 27.93/28.12 (step @p119 :rule cong :premises (@p117) :args (@t50)) % 27.93/28.12 (step @p120 :rule cong :premises (@p119 @p30) :args (@t51)) % 27.93/28.12 (step @p121 :rule cong :premises (@p120 @p118) :args (@t52)) % 27.93/28.12 (step @p122 :rule trans :premises (@p121 @p117)) % 27.93/28.12 (step @p123 :rule refl :args (@t11)) % 27.93/28.12 (step @p124 :rule cong :premises (@p123 @p122) :args (@t53)) % 27.93/28.12 (step @p125 :rule trans :premises (@p13 @p124 @p116 @p103)) % 27.93/28.12 (step @p126 :rule cong :premises (@p32 @p125) :args ((tptp.multiply @t9 tptp.b1))) % 27.93/28.12 (step @p127 :rule symm :premises (@p76)) % 27.93/28.12 (step @p128 :rule refl :args (@t38)) % 27.93/28.12 (step @p129 :rule cong :premises (@p59) :args (@t61)) % 27.93/28.12 (step @p130 :rule cong :premises (@p129 @p128) :args (@t62)) % 27.93/28.12 (step @p131 :rule trans :premises (@p130 @p127)) % 27.93/28.12 (step @p132 :rule cong :premises (@p131 @p30) :args (@t63)) % 27.93/28.12 (step @p133 :rule trans :premises (@p132 @p126 @p100 @p65 @p58 @p23 @p19)) % 27.93/28.12 (step @p134 :rule refl :args (@t13)) % 27.93/28.12 (step @p135 :rule cong :premises (@p134 @p133) :args (@t64)) % 27.93/28.12 (step @p136 :rule trans :premises (@p77 @p135 @p17 @p58 @p23 @p19)) % 27.93/28.12 (step @p137 :rule cong :premises (@p129 @p136) :args (@t62)) % 27.93/28.12 (step @p138 :rule symm :premises (@p130)) % 27.93/28.12 (step @p139 :rule trans :premises (@p76 @p138 @p137 @p99 @p94)) % 27.93/28.12 (step-pop @p176 :rule scope :premises (@p139)) % 27.93/28.12 (step-pop @p177 :rule scope :premises (@p176)) % 27.93/28.12 (step-pop @p178 :rule scope :premises (@p177)) % 27.93/28.12 (step-pop @p179 :rule scope :premises (@p178)) % 27.93/28.12 (step-pop @p180 :rule scope :premises (@p179)) % 27.93/28.12 (step-pop @p181 :rule scope :premises (@p180)) % 27.93/28.12 (step-pop @p182 :rule scope :premises (@p181)) % 27.93/28.12 (step-pop @p183 :rule scope :premises (@p182)) % 27.93/28.12 (step-pop @p184 :rule scope :premises (@p183)) % 27.93/28.12 (step-pop @p185 :rule scope :premises (@p184)) % 27.93/28.12 (step-pop @p186 :rule scope :premises (@p185)) % 27.93/28.12 (step-pop @p187 :rule scope :premises (@p186)) % 27.93/28.12 (step-pop @p188 :rule scope :premises (@p187)) % 27.93/28.12 (step-pop @p189 :rule scope :premises (@p188)) % 27.93/28.12 (step-pop @p190 :rule scope :premises (@p189)) % 27.93/28.12 (step @p140 :rule process_scope :premises (@p190) :args (@t36)) % 27.93/28.12 (step @p156 :rule implies_elim :premises (@p140)) % 27.93/28.12 (step @p157 :rule cnf_and_neg :args (@t72)) % 27.93/28.12 (step @p158 :rule resolution :premises (@p157 @p156) :args (true @t72)) % 27.93/28.12 (step @p159 :rule reordering :premises (@p158) :args ((or (not @t40) (not @t42) (not @t43) (not @t44) (not @t46) (not @t48) (not @t49) (not @t54) @t36 (not @t55) (not @t57) (not @t58) (not @t59) (not @t60) (not @t65) (not @t70)))) % 27.93/28.12 (step @p160 false :rule chain_m_resolution :premises (@p159 @p78 @p77 @p76 @p75 @p17 @p16 @p15 @p14 @p13 @p12 @p11 @p10 @p9 @p8 @p7 @p6) :args (false (@list false false false true false false false false false false false false false false false false) (@list @t70 @t65 @t60 @t36 @t59 @t58 @t57 @t55 @t54 @t49 @t48 @t46 @t44 @t43 @t42 @t40))) % 27.93/28.12 ) % 27.93/28.12 % SZS output end Proof % 27.93/28.12 % cvc5 exiting %------------------------------------------------------------------------------