↑ Up

cvc5---1.3.4.UNS-Prf.s

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

% Computer : n004.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:09:21 AM UTC 2026

% Result   : Unsatisfiable 0.28s 0.69s
% Output   : Proof 0.28s
% Verified : 
% SZS Type : -

% Comments : 
%------------------------------------------------------------------------------
%----WARNING: Could not form TPTP format derivation
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.08/0.18  % Problem  : CAT003-2 : TPTP v9.2.1. Released v1.0.0.
% 0.08/0.19  % Command  : /export/starexec/sandbox2/solver/bin/do_cvc5 /export/starexec/sandbox2/benchmark/theBenchmark.p 300 THM
% 0.13/0.43  % Computer : n004.cluster.edu
% 0.13/0.43  % Model    : x86_64 x86_64
% 0.13/0.43  % CPU      : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.13/0.43  % Memory   : 8042.1875MB
% 0.13/0.43  % OS       : Linux 3.10.0-693.el7.x86_64
% 0.13/0.43  % CPULimit : 300
% 0.13/0.43  % WCLimit  : 300
% 0.13/0.43  % DateTime : Wed Jun  3 02:52:08 EDT 2026
% 0.13/0.44  % CPUTime  : 
% 0.25/0.61  %----Proving TF0_NAR, FOF, or CNF
% 0.25/0.62  --- Run --decision=internal --simplification=none --no-inst-no-entail --no-cbqi --full-saturate-quant at 15...
% 0.28/0.69  % SZS status Unsatisfiable
% 0.28/0.69  % SZS output start Proof
% 0.28/0.69  (
% 0.28/0.69  (declare-sort $$unsorted 0)
% 0.28/0.69  (declare-const tptp.h $$unsorted)
% 0.28/0.69  (declare-const tptp.a $$unsorted)
% 0.28/0.69  (declare-const tptp.b $$unsorted)
% 0.28/0.69  (declare-const tptp.compose (-> $$unsorted $$unsorted $$unsorted))
% 0.28/0.69  (declare-const tptp.codomain (-> $$unsorted $$unsorted))
% 0.28/0.69  (declare-const tptp.g $$unsorted)
% 0.28/0.69  (declare-const tptp.domain (-> $$unsorted $$unsorted))
% 0.28/0.69  (define @t1 () (@var "X" $$unsorted))
% 0.28/0.69  (define @t2 () (tptp.domain @t1))
% 0.28/0.69  (define @t3 () (@list @t1))
% 0.28/0.69  (define @t4 () (tptp.codomain @t1))
% 0.28/0.69  (define @t5 () (@var "Y" $$unsorted))
% 0.28/0.69  (define @t6 () (tptp.compose @t1 @t5))
% 0.28/0.69  (define @t7 () (not (= @t4 (tptp.domain @t5))))
% 0.28/0.69  (define @t8 () (@list @t1 @t5))
% 0.28/0.69  (define @t9 () (tptp.codomain @t5))
% 0.28/0.69  (define @t10 () (@var "Z" $$unsorted))
% 0.28/0.69  (define @t11 () (tptp.domain @t10))
% 0.28/0.69  (define @t12 () (@list @t1 @t5 @t10))
% 0.28/0.69  (define @t13 () (forall @t12 (or @t7 (not (= @t9 @t11)) (= (tptp.compose @t1 (tptp.compose @t5 @t10)) (tptp.compose @t6 @t10)))))
% 0.28/0.69  (define @t14 () (= @t1 @t10))
% 0.28/0.69  (define @t15 () (tptp.compose tptp.a tptp.b))
% 0.28/0.69  (define @t16 () (tptp.compose @t15 @t10))
% 0.28/0.69  (define @t17 () (not (= @t16 @t5)))
% 0.28/0.69  (define @t18 () (tptp.codomain @t15))
% 0.28/0.69  (define @t19 () (not (= @t18 @t11)))
% 0.28/0.69  (define @t20 () (tptp.compose @t15 @t1))
% 0.28/0.69  (define @t21 () (not (= @t20 @t5)))
% 0.28/0.69  (define @t22 () (not (= @t18 @t2)))
% 0.28/0.69  (define @t23 () (or @t22 @t21 @t19 @t17 @t14))
% 0.28/0.69  (define @t24 () (forall @t12 @t23))
% 0.28/0.69  (define @t25 () (= (tptp.codomain tptp.a) (tptp.domain tptp.b)))
% 0.28/0.69  (define @t26 () (tptp.domain tptp.h))
% 0.28/0.69  (define @t27 () (tptp.codomain tptp.b))
% 0.28/0.69  (define @t28 () (= @t27 @t26))
% 0.28/0.69  (define @t29 () (tptp.domain tptp.g))
% 0.28/0.69  (define @t30 () (= @t27 @t29))
% 0.28/0.69  (define @t31 () (tptp.compose tptp.b tptp.g))
% 0.28/0.69  (define @t32 () (tptp.compose tptp.b tptp.h))
% 0.28/0.69  (define @t33 () (= @t32 @t31))
% 0.28/0.69  (define @t34 () (tptp.compose tptp.a @t32))
% 0.28/0.69  (define @t35 () (tptp.compose @t15 tptp.h))
% 0.28/0.69  (define @t36 () (not @t28))
% 0.28/0.69  (define @t37 () (not @t25))
% 0.28/0.69  (define @t38 () (or @t37 @t36 (= @t34 @t35)))
% 0.28/0.69  (define @t39 () (= @t35 @t34))
% 0.28/0.69  (define @t40 () (or @t37 @t36 @t39))
% 0.28/0.69  (define @t41 () (@list false))
% 0.28/0.69  (define @t42 () (@list @t13))
% 0.28/0.69  (define @t43 () (@list false false false))
% 0.28/0.69  (define @t44 () (not (= @t20 @t16)))
% 0.28/0.69  (define @t45 () (not (= @t11 @t18)))
% 0.28/0.69  (define @t46 () (not (= @t2 @t18)))
% 0.28/0.69  (define @t47 () (or @t46 @t45 @t44 @t14))
% 0.28/0.69  (define @t48 () (not (= @t20 @t20)))
% 0.28/0.69  (define @t49 () (or @t46 @t48 @t45 @t44 @t14))
% 0.28/0.69  (define @t50 () (@list @t1 @t10))
% 0.28/0.69  (define @t51 () (not (= @t5 @t16)))
% 0.28/0.69  (define @t52 () (not (= @t5 @t20)))
% 0.28/0.69  (define @t53 () (or @t52 @t46 @t52 @t45 @t51 @t14))
% 0.28/0.69  (define @t54 () (@list @t5))
% 0.28/0.69  (define @t55 () (or @t46 @t52 @t45 @t51 @t14))
% 0.28/0.69  (define @t56 () (forall @t54 @t55))
% 0.28/0.69  (define @t57 () (forall @t50 @t56))
% 0.28/0.69  (define @t58 () (forall (@list @t1 @t10 @t5) @t55))
% 0.28/0.69  (define @t59 () (= tptp.h tptp.g))
% 0.28/0.69  (define @t60 () (tptp.compose @t15 tptp.g))
% 0.28/0.69  (define @t61 () (= @t35 @t60))
% 0.28/0.69  (define @t62 () (not @t61))
% 0.28/0.69  (define @t63 () (not (= @t29 @t18)))
% 0.28/0.69  (define @t64 () (not (= @t26 @t18)))
% 0.28/0.69  (define @t65 () (or @t64 @t63 @t62 @t59))
% 0.28/0.69  (define @t66 () (forall @t50 @t47))
% 0.28/0.69  (define @t67 () (= @t18 @t29))
% 0.28/0.69  (define @t68 () (not @t67))
% 0.28/0.69  (define @t69 () (= @t18 @t26))
% 0.28/0.69  (define @t70 () (not @t69))
% 0.28/0.69  (define @t71 () (or @t70 @t68 @t62 @t59))
% 0.28/0.69  (define @t72 () (= @t18 @t27))
% 0.28/0.69  (define @t73 () (or @t37 @t72))
% 0.28/0.69  (define @t74 () (tptp.compose tptp.a @t31))
% 0.28/0.69  (define @t75 () (not @t30))
% 0.28/0.69  (define @t76 () (= @t74 @t60))
% 0.28/0.69  (define @t77 () (or @t37 @t75 @t76))
% 0.28/0.69  (define @t78 () (= @t60 @t74))
% 0.28/0.69  (define @t79 () (or @t37 @t75 @t78))
% 0.28/0.69  (define @t80 () (not @t78))
% 0.28/0.69  (define @t81 () (not @t39))
% 0.28/0.69  (define @t82 () (not @t33))
% 0.28/0.69  (define @t83 () (not @t76))
% 0.28/0.69  (define @t84 () (and @t78 @t80))
% 0.28/0.69  (assume @p1 (forall @t3 (= (tptp.codomain @t2) @t2)))
% 0.28/0.69  (assume @p2 (forall @t3 (= (tptp.domain @t4) @t4)))
% 0.28/0.69  (assume @p3 (forall @t3 (= (tptp.compose @t2 @t1) @t1)))
% 0.28/0.69  (assume @p4 (forall @t3 (= (tptp.compose @t1 @t4) @t1)))
% 0.28/0.69  (assume @p5 (forall @t8 (or @t7 (= (tptp.domain @t6) @t2))))
% 0.28/0.69  (assume @p6 (forall @t8 (or @t7 (= (tptp.codomain @t6) @t9))))
% 0.28/0.69  (assume @p7 @t13)
% 0.28/0.69  (assume @p8 @t24)
% 0.28/0.69  (assume @p9 @t25)
% 0.28/0.69  (assume @p10 @t28)
% 0.28/0.69  (assume @p11 @t30)
% 0.28/0.69  (assume @p12 @t33)
% 0.28/0.69  (assume @p13 (not (= tptp.g tptp.h)))
% 0.28/0.69  (step @p14 :rule eq-symm :args (@t34 @t35))
% 0.28/0.69  (step @p15 :rule refl :args (@t36))
% 0.28/0.69  (step @p16 :rule refl :args (@t37))
% 0.28/0.69  (step @p17 :rule nary_cong :premises (@p16 @p15 @p14) :args (@t38))
% 0.28/0.69  (step @p18 :rule refl :args (@t13))
% 0.28/0.69  (step @p19 :rule cong :premises (@p18 @p17) :args ((=> @t13 @t38)))
% 0.28/0.69  (assume-push @p152 @t13)
% 0.28/0.69  (step @p21 :rule instantiate :premises (@p7) :args ((@list tptp.a tptp.b tptp.h)))
% 0.28/0.69  (step-pop @p153 :rule scope :premises (@p21))
% 0.28/0.69  (step @p22 :rule process_scope :premises (@p153) :args (@t38))
% 0.28/0.69  (step @p24 :rule eq_resolve :premises (@p22 @p19))
% 0.28/0.69  (step @p25 :rule implies_elim :premises (@p24))
% 0.28/0.69  (step @p26 :rule chain_m_resolution :premises (@p25 @p7) :args (@t40 @t41 @t42))
% 0.28/0.69  (step @p27 :rule cnf_or_pos :args (@t40))
% 0.28/0.69  (step @p28 :rule reordering :premises (@p27) :args ((or @t37 @t36 @t39 (not @t40))))
% 0.28/0.69  (step @p29 :rule chain_m_resolution :premises (@p28 @p9 @p10 @p26) :args (@t39 @t43 (@list @t25 @t28 @t40)))
% 0.28/0.69  (step @p30 :rule aci_norm :args ((= (or @t46 false @t45 @t44 @t14) @t47)))
% 0.28/0.69  (step @p31 :rule refl :args (@t14))
% 0.28/0.69  (step @p32 :rule refl :args (@t44))
% 0.28/0.69  (step @p33 :rule refl :args (@t45))
% 0.28/0.69  (step @p34 :rule evaluate :args ((not true)))
% 0.28/0.69  (step @p35 :rule eq-refl :args (@t20))
% 0.28/0.69  (step @p36 :rule cong :premises (@p35) :args (@t48))
% 0.28/0.69  (step @p37 :rule trans :premises (@p36 @p34))
% 0.28/0.69  (step @p38 :rule refl :args (@t46))
% 0.28/0.69  (step @p39 :rule nary_cong :premises (@p38 @p37 @p33 @p32 @p31) :args (@t49))
% 0.28/0.69  (step @p40 :rule trans :premises (@p39 @p30))
% 0.28/0.69  (step @p41 :rule cong :premises (@p40) :args ((forall @t50 @t49)))
% 0.28/0.69  (step @p42 :rule quant-var-elim-eq :args ((= (forall @t54 @t53) @t49)))
% 0.28/0.69  (step @p43 :rule aci_norm :args ((= @t55 @t53)))
% 0.28/0.69  (step @p44 :rule cong :premises (@p43) :args (@t56))
% 0.28/0.69  (step @p45 :rule trans :premises (@p44 @p42))
% 0.28/0.69  (step @p46 :rule cong :premises (@p45) :args (@t57))
% 0.28/0.69  (step @p47 :rule quant-merge-prenex :args ((= @t57 @t58)))
% 0.28/0.69  (step @p48 :rule symm :premises (@p47))
% 0.28/0.69  (step @p49 :rule quant_var_reordering :args ((= (forall @t12 @t55) @t58)))
% 0.28/0.69  (step @p50 :rule trans :premises (@p49 @p48 @p46))
% 0.28/0.69  (step @p51 :rule trans :premises (@p50 @p41))
% 0.28/0.69  (step @p52 :rule eq-symm :args (@t16 @t5))
% 0.28/0.69  (step @p53 :rule cong :premises (@p52) :args (@t17))
% 0.28/0.69  (step @p54 :rule eq-symm :args (@t18 @t11))
% 0.28/0.69  (step @p55 :rule cong :premises (@p54) :args (@t19))
% 0.28/0.69  (step @p56 :rule eq-symm :args (@t20 @t5))
% 0.28/0.69  (step @p57 :rule cong :premises (@p56) :args (@t21))
% 0.28/0.69  (step @p58 :rule eq-symm :args (@t18 @t2))
% 0.28/0.69  (step @p59 :rule cong :premises (@p58) :args (@t22))
% 0.28/0.69  (step @p60 :rule nary_cong :premises (@p59 @p57 @p55 @p53 @p31) :args (@t23))
% 0.28/0.69  (step @p61 :rule cong :premises (@p60) :args (@t24))
% 0.28/0.69  (step @p62 :rule trans :premises (@p61 @p51))
% 0.28/0.69  (step @p63 :rule eq_resolve :premises (@p8 @p62))
% 0.28/0.69  (step @p64 :rule refl :args (@t59))
% 0.28/0.69  (step @p65 :rule refl :args (@t62))
% 0.28/0.69  (step @p66 :rule eq-symm :args (@t29 @t18))
% 0.28/0.69  (step @p67 :rule cong :premises (@p66) :args (@t63))
% 0.28/0.69  (step @p68 :rule eq-symm :args (@t26 @t18))
% 0.28/0.69  (step @p69 :rule cong :premises (@p68) :args (@t64))
% 0.28/0.69  (step @p70 :rule nary_cong :premises (@p69 @p67 @p65 @p64) :args (@t65))
% 0.28/0.69  (step @p71 :rule refl :args (@t66))
% 0.28/0.69  (step @p72 :rule cong :premises (@p71 @p70) :args ((=> @t66 @t65)))
% 0.28/0.69  (assume-push @p154 @t66)
% 0.28/0.69  (step @p74 :rule instantiate :premises (@p63) :args ((@list tptp.h tptp.g)))
% 0.28/0.69  (step-pop @p155 :rule scope :premises (@p74))
% 0.28/0.69  (step @p75 :rule process_scope :premises (@p155) :args (@t65))
% 0.28/0.69  (step @p77 :rule eq_resolve :premises (@p75 @p72))
% 0.28/0.69  (step @p78 :rule implies_elim :premises (@p77))
% 0.28/0.69  (step @p79 :rule chain_m_resolution :premises (@p78 @p63) :args (@t71 @t41 (@list @t66)))
% 0.28/0.69  (step @p80 :rule instantiate :premises (@p6) :args ((@list tptp.a tptp.b)))
% 0.28/0.69  (step @p81 :rule cnf_or_pos :args (@t73))
% 0.28/0.69  (step @p82 :rule reordering :premises (@p81) :args ((or @t37 @t72 (not @t73))))
% 0.28/0.69  (step @p83 :rule chain_m_resolution :premises (@p82 @p9 @p80) :args (@t72 (@list false false) (@list @t25 @t73)))
% 0.28/0.69  (step @p84 :rule trans :premises (@p83 @p11))
% 0.28/0.69  (step @p85 :rule trans :premises (@p83 @p10))
% 0.28/0.69  (step @p86 :rule symm :premises (@p13))
% 0.28/0.69  (step @p87 :rule cnf_or_pos :args (@t71))
% 0.28/0.69  (step @p88 :rule reordering :premises (@p87) :args ((or @t59 @t70 @t62 @t68 (not @t71))))
% 0.28/0.69  (step @p89 :rule chain_m_resolution :premises (@p88 @p86 @p85 @p84 @p79) :args (@t62 (@list true false false false) (@list @t59 @t69 @t67 @t71)))
% 0.28/0.69  (step @p90 :rule eq-symm :args (@t74 @t60))
% 0.28/0.69  (step @p91 :rule refl :args (@t75))
% 0.28/0.69  (step @p92 :rule nary_cong :premises (@p16 @p91 @p90) :args (@t77))
% 0.28/0.69  (step @p93 :rule cong :premises (@p18 @p92) :args ((=> @t13 @t77)))
% 0.28/0.69  (assume-push @p156 @t13)
% 0.28/0.69  (step @p95 :rule instantiate :premises (@p7) :args ((@list tptp.a tptp.b tptp.g)))
% 0.28/0.69  (step-pop @p157 :rule scope :premises (@p95))
% 0.28/0.69  (step @p96 :rule process_scope :premises (@p157) :args (@t77))
% 0.28/0.69  (step @p98 :rule eq_resolve :premises (@p96 @p93))
% 0.28/0.69  (step @p99 :rule implies_elim :premises (@p98))
% 0.28/0.69  (step @p100 :rule chain_m_resolution :premises (@p99 @p7) :args (@t79 @t41 @t42))
% 0.28/0.69  (step @p101 :rule cnf_or_pos :args (@t79))
% 0.28/0.69  (step @p102 :rule reordering :premises (@p101) :args ((or @t37 @t75 @t78 (not @t79))))
% 0.28/0.69  (step @p103 :rule chain_m_resolution :premises (@p102 @p9 @p11 @p100) :args (@t78 @t43 (@list @t25 @t30 @t79)))
% 0.28/0.69  (step @p104 :rule refl :args (@t80))
% 0.28/0.69  (step @p105 :rule bool-double-not-elim :args (@t61))
% 0.28/0.69  (step @p106 :rule refl :args (@t81))
% 0.28/0.69  (step @p107 :rule refl :args (@t82))
% 0.28/0.69  (step @p108 :rule nary_cong :premises (@p107 @p106 @p105 @p104) :args ((or @t82 @t81 (not @t62) @t80)))
% 0.28/0.69  (assume-push @p158 @t78)
% 0.28/0.69  (assume-push @p159 @t80)
% 0.28/0.69  (step @p111 :rule evaluate :args ((= false true)))
% 0.28/0.69  (step @p112 :rule true_intro :premises (@p103))
% 0.28/0.69  (step @p113 :rule bool-eq-false :args (@t78))
% 0.28/0.69  (step @p114 :rule symm :premises (@p113))
% 0.28/0.69  (step @p115 :rule cong :premises (@p90) :args (@t83))
% 0.28/0.69  (step @p116 :rule bool-eq-false :args (@t76))
% 0.28/0.69  (step @p117 :rule trans :premises (@p116 @p115))
% 0.28/0.69  (step @p118 :rule trans :premises (@p117 @p114))
% 0.28/0.69  (step @p119 :rule false_intro :premises (@p89))
% 0.28/0.69  (step @p120 :rule refl :args (@t60))
% 0.28/0.69  (step @p121 :rule symm :premises (@p29))
% 0.28/0.69  (step @p122 :rule symm :premises (@p12))
% 0.28/0.69  (step @p123 :rule refl :args (tptp.a))
% 0.28/0.69  (step @p124 :rule cong :premises (@p123 @p122) :args (@t74))
% 0.28/0.69  (step @p125 :rule trans :premises (@p124 @p121))
% 0.28/0.69  (step @p126 :rule cong :premises (@p125 @p120) :args (@t76))
% 0.28/0.69  (step @p127 :rule trans :premises (@p126 @p119))
% 0.28/0.69  (step @p128 :rule eq_resolve :premises (@p127 @p118))
% 0.28/0.69  (step @p129 :rule symm :premises (@p128))
% 0.28/0.69  (step @p130 :rule trans :premises (@p129 @p112))
% 0.28/0.69  (step @p131 false :rule eq_resolve :premises (@p130 @p111))
% 0.28/0.69  (step-pop @p160 :rule scope :premises (@p131))
% 0.28/0.69  (step-pop @p161 :rule scope :premises (@p160))
% 0.28/0.69  (step @p132 :rule process_scope :premises (@p161) :args (false))
% 0.28/0.69  (assume-push @p162 @t33)
% 0.28/0.69  (assume-push @p163 @t39)
% 0.28/0.69  (assume-push @p164 @t62)
% 0.28/0.69  (assume-push @p165 @t78)
% 0.28/0.69  (step @p113 :rule bool-eq-false :args (@t78))
% 0.28/0.69  (step @p114 :rule symm :premises (@p113))
% 0.28/0.69  (step @p115 :rule cong :premises (@p90) :args (@t83))
% 0.28/0.69  (step @p116 :rule bool-eq-false :args (@t76))
% 0.28/0.69  (step @p117 :rule trans :premises (@p116 @p115))
% 0.28/0.69  (step @p118 :rule trans :premises (@p117 @p114))
% 0.28/0.69  (step @p119 :rule false_intro :premises (@p89))
% 0.28/0.69  (step @p120 :rule refl :args (@t60))
% 0.28/0.69  (step @p121 :rule symm :premises (@p29))
% 0.28/0.69  (step @p122 :rule symm :premises (@p12))
% 0.28/0.69  (step @p123 :rule refl :args (tptp.a))
% 0.28/0.69  (step @p124 :rule cong :premises (@p123 @p122) :args (@t74))
% 0.28/0.69  (step @p125 :rule trans :premises (@p124 @p121))
% 0.28/0.69  (step @p126 :rule cong :premises (@p125 @p120) :args (@t76))
% 0.28/0.69  (step @p127 :rule trans :premises (@p126 @p119))
% 0.28/0.69  (step @p139 :rule eq_resolve :premises (@p127 @p118))
% 0.28/0.69  (step @p140 :rule false_elim :premises (@p139))
% 0.28/0.69  (step @p141 :rule and_intro :premises (@p103 @p140))
% 0.28/0.69  (step-pop @p166 :rule scope :premises (@p141))
% 0.28/0.69  (step-pop @p167 :rule scope :premises (@p166))
% 0.28/0.69  (step-pop @p168 :rule scope :premises (@p167))
% 0.28/0.69  (step-pop @p169 :rule scope :premises (@p168))
% 0.28/0.69  (step @p142 :rule process_scope :premises (@p169) :args (@t84))
% 0.28/0.69  (step @p147 :rule implies_elim :premises (@p142))
% 0.28/0.69  (step @p148 :rule resolution :premises (@p147 @p132) :args (true @t84))
% 0.28/0.69  (step @p149 :rule not_and :premises (@p148))
% 0.28/0.69  (step @p150 :rule eq_resolve :premises (@p149 @p108))
% 0.28/0.69  (step @p151 false :rule chain_m_resolution :premises (@p150 @p103 @p89 @p29 @p12) :args (false (@list false true false false) (@list @t78 @t61 @t39 @t33)))
% 0.28/0.69  )
% 0.28/0.70  % SZS output end Proof
% 0.28/0.70  % cvc5 exiting
%------------------------------------------------------------------------------