mirror of
https://github.com/Z3Prover/z3
synced 2025-04-15 13:28:47 +00:00
only allow flip if it doesn't increase unsat score
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
814d7f4d0a
commit
f67e1b8b8b
|
@ -729,6 +729,8 @@ br_status bool_rewriter::mk_eq_core(expr * lhs, expr * rhs, expr_ref & result) {
|
||||||
return BR_REWRITE1;
|
return BR_REWRITE1;
|
||||||
|
|
||||||
if (m_ite_extra_rules) {
|
if (m_ite_extra_rules) {
|
||||||
|
expr* c1, * t1, * e1;
|
||||||
|
expr* c2, * t2, * e2;
|
||||||
if (m().is_ite(lhs) && m().is_value(rhs)) {
|
if (m().is_ite(lhs) && m().is_value(rhs)) {
|
||||||
r = try_ite_value(to_app(lhs), to_app(rhs), result);
|
r = try_ite_value(to_app(lhs), to_app(rhs), result);
|
||||||
CTRACE("try_ite_value", r != BR_FAILED,
|
CTRACE("try_ite_value", r != BR_FAILED,
|
||||||
|
@ -739,6 +741,16 @@ br_status bool_rewriter::mk_eq_core(expr * lhs, expr * rhs, expr_ref & result) {
|
||||||
CTRACE("try_ite_value", r != BR_FAILED,
|
CTRACE("try_ite_value", r != BR_FAILED,
|
||||||
tout << mk_bounded_pp(lhs, m()) << "\n" << mk_bounded_pp(rhs, m()) << "\n--->\n" << mk_bounded_pp(result, m()) << "\n";);
|
tout << mk_bounded_pp(lhs, m()) << "\n" << mk_bounded_pp(rhs, m()) << "\n--->\n" << mk_bounded_pp(result, m()) << "\n";);
|
||||||
}
|
}
|
||||||
|
else if (m().is_ite(lhs, c1, t1, e1) && m().is_ite(rhs, c2, t2, e2) &&
|
||||||
|
m().is_value(t1) && m().is_value(e1) && m().is_value(t2) && m().is_value(e2)) {
|
||||||
|
expr_ref_vector args(m());
|
||||||
|
args.push_back(m().mk_or(c1, c2, m().mk_eq(e1, e2)));
|
||||||
|
args.push_back(m().mk_or(m().mk_not(c1), m().mk_not(c2), m().mk_eq(t1, t2)));
|
||||||
|
args.push_back(m().mk_or(m().mk_not(c1), c2, m().mk_eq(t1, e2)));
|
||||||
|
args.push_back(m().mk_or(c1, m().mk_not(c2), m().mk_eq(e1, t2)));
|
||||||
|
result = m().mk_and(args);
|
||||||
|
return BR_REWRITE_FULL;
|
||||||
|
}
|
||||||
if (r != BR_FAILED)
|
if (r != BR_FAILED)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2934,6 +2934,7 @@ br_status bv_rewriter::mk_eq_core(expr * lhs, expr * rhs, expr_ref & result) {
|
||||||
return BR_DONE;
|
return BR_DONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return BR_FAILED;
|
return BR_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -553,8 +553,11 @@ namespace sls {
|
||||||
continue;
|
continue;
|
||||||
if (ctx.is_true(v) == v1)
|
if (ctx.is_true(v) == v1)
|
||||||
continue;
|
continue;
|
||||||
|
unsigned num_unsat = ctx.unsat().size();
|
||||||
TRACE("bv", tout << "update flip " << mk_bounded_pp(e, m) << "\n";);
|
TRACE("bv", tout << "update flip " << mk_bounded_pp(e, m) << "\n";);
|
||||||
ctx.flip(v);
|
ctx.flip(v);
|
||||||
|
if (num_unsat < ctx.unsat().size())
|
||||||
|
ctx.flip(v);
|
||||||
}
|
}
|
||||||
m_ev.set_bool_value(to_app(e), v1);
|
m_ev.set_bool_value(to_app(e), v1);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue