diff --git a/src/interp/iz3interp.cpp b/src/interp/iz3interp.cpp index c204cc35d..73eaab841 100755 --- a/src/interp/iz3interp.cpp +++ b/src/interp/iz3interp.cpp @@ -64,7 +64,7 @@ struct frame_reducer : public iz3mgr { : iz3mgr(other) {} void get_proof_assumptions_rec(z3pf proof, hash_set &memo, std::vector &used_frames){ - if(memo.count(proof))return; + if(memo.find(proof) != memo.end())return; memo.insert(proof); pfrule dk = pr(proof); if(dk == PR_ASSERTED){ diff --git a/src/interp/iz3proof_itp.cpp b/src/interp/iz3proof_itp.cpp index 303d90b1b..9d241398c 100755 --- a/src/interp/iz3proof_itp.cpp +++ b/src/interp/iz3proof_itp.cpp @@ -680,7 +680,7 @@ class iz3proof_itp_impl : public iz3proof_itp { ast dummy1, dummy2; sum_cond_ineq(in1,coeff2,in2,dummy1,dummy2); n1 = merge_normal_chains(n1,n2, Aproves, Bproves); - ineq = make_normal(in1,n1); + ineq = is_true(n1) ? in1 : make_normal(in1,n1); } bool is_ineq(const ast &ineq){ @@ -760,6 +760,8 @@ class iz3proof_itp_impl : public iz3proof_itp { } ast round_ineq(const ast &ineq){ + if(sym(ineq) == normal) + return make_normal(round_ineq(arg(ineq,0)),arg(ineq,1)); if(!is_ineq(ineq)) throw cannot_simplify(); ast res = simplify_ineq(ineq); @@ -1689,7 +1691,7 @@ class iz3proof_itp_impl : public iz3proof_itp { ast diff; if(comp_op == Leq) diff = make(Sub,rhs,mid); else diff = make(Sub,mid,rhs); - ast foo = z3_simplify(make(Leq,make_int("0"),diff)); + ast foo = make(Leq,make_int("0"),z3_simplify(diff)); if(is_true(cond)) cond = foo; else {