mirror of
https://github.com/Z3Prover/z3
synced 2025-08-22 02:57:50 +00:00
align translation cache with scopes and variable elimination
This commit is contained in:
parent
11efe33aa0
commit
69070a7486
7 changed files with 65 additions and 19 deletions
|
@ -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 };
|
||||
|
|
|
@ -279,6 +279,11 @@ namespace euf {
|
|||
}
|
||||
}
|
||||
|
||||
void solver::set_eliminated(bool_var v) {
|
||||
si.uncache(literal(v, false));
|
||||
si.uncache(literal(v, true));
|
||||
}
|
||||
|
||||
void solver::asserted(literal l) {
|
||||
expr* e = m_bool_var2expr.get(l.var(), nullptr);
|
||||
if (!e) {
|
||||
|
|
|
@ -293,6 +293,7 @@ namespace euf {
|
|||
void get_antecedents(literal l, th_explain& jst, literal_vector& r, bool probing);
|
||||
void add_antecedent(enode* a, enode* b);
|
||||
void add_diseq_antecedent(enode* a, enode* b);
|
||||
void set_eliminated(bool_var v) override;
|
||||
void asserted(literal l) override;
|
||||
sat::check_result check() override;
|
||||
void push() override;
|
||||
|
|
|
@ -36,6 +36,7 @@ namespace sat {
|
|||
virtual bool_var to_bool_var(expr* e) = 0;
|
||||
virtual bool_var add_bool_var(expr* e) = 0;
|
||||
virtual void cache(app* t, literal l) = 0;
|
||||
virtual void uncache(literal l) = 0;
|
||||
virtual void push() = 0;
|
||||
virtual void pop(unsigned n) = 0;
|
||||
virtual void set_expr2var_replay(obj_map<expr, sat::bool_var>* r) = 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue