3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-07-23 12:48:53 +00:00

align translation cache with scopes and variable elimination

This commit is contained in:
Nikolaj Bjorner 2021-03-03 11:22:17 -08:00
parent 11efe33aa0
commit 69070a7486
7 changed files with 65 additions and 19 deletions

View file

@ -128,6 +128,7 @@ namespace euf {
s().set_external(v);
s().set_eliminated(v, false);
if (lit.sign()) {
v = si.add_bool_var(e);
s().set_external(v);
@ -265,17 +266,18 @@ namespace euf {
sat::status st = sat::status::th(m_is_redundant, m.get_basic_family_id());
expr* c = nullptr, * th = nullptr, * el = nullptr;
if (!m.is_bool(e) && m.is_ite(e, c, th, el)) {
app* a = to_app(e);
expr_ref eq_th = mk_eq(a, th);
expr_ref eq_th = mk_eq(e, th);
sat::literal lit_th = mk_literal(eq_th);
if (th == el) {
s().add_clause(1, &lit_th, st);
}
else {
sat::bool_var v = si.to_bool_var(c);
VERIFY(v != sat::null_bool_var);
VERIFY(s().is_external(v));
SASSERT(v != sat::null_bool_var);
expr_ref eq_el = mk_eq(a, el);
VERIFY(!s().was_eliminated(v));
expr_ref eq_el = mk_eq(e, el);
sat::literal lit_el = mk_literal(eq_el);
literal lits1[2] = { literal(v, true), lit_th };