3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-24 01:25:31 +00:00

update release notes, fix bug in replay of Boolean variables in new core

This commit is contained in:
Nikolaj Bjorner 2022-10-19 12:12:32 -07:00
parent 07dd1065db
commit b084852397
4 changed files with 87 additions and 30 deletions

View file

@ -159,8 +159,7 @@ namespace euf {
v = si.add_bool_var(e);
s().set_external(v);
s().set_eliminated(v, false);
m_bool_var2expr.reserve(v + 1, nullptr);
m_bool_var2expr[v] = e;
set_bool_var2expr(v, e);
m_var_trail.push_back(v);
sat::literal lit2 = literal(v, false);
th_proof_hint* ph1 = nullptr, * ph2 = nullptr;
@ -189,11 +188,11 @@ namespace euf {
return lit;
}
m_bool_var2expr[v] = e;
m_var_trail.push_back(v);
set_bool_var2expr(v, e);
enode* n = m_egraph.find(e);
if (!n)
n = mk_enode(e, 0, nullptr);
CTRACE("euf", n->bool_var() != sat::null_bool_var && n->bool_var() != v, display(tout << bpp(n) << " " << n->bool_var() << " vs " << v << "\n"));
SASSERT(n->bool_var() == sat::null_bool_var || n->bool_var() == v);
m_egraph.set_bool_var(n, v);
if (m.is_eq(e) || m.is_or(e) || m.is_and(e) || m.is_not(e))

View file

@ -672,6 +672,10 @@ namespace euf {
else
attach_lit(lit, e);
}
for (auto const& [e, v] : replay.m)
if (si.is_bool_op(e))
si.cache(to_app(e), sat::literal(v, false));
if (relevancy_enabled())
for (auto const& [e, generation, v] : m_reinit)

View file

@ -444,7 +444,7 @@ namespace euf {
expr_ref mk_eq(euf::enode* n1, euf::enode* n2) { return mk_eq(n1->get_expr(), n2->get_expr()); }
euf::enode* e_internalize(expr* e);
euf::enode* mk_enode(expr* e, unsigned n, enode* const* args);
void set_bool_var2expr(sat::bool_var v, expr* e) { m_bool_var2expr.setx(v, e, nullptr); }
void set_bool_var2expr(sat::bool_var v, expr* e) { m_var_trail.push_back(v); m_bool_var2expr.setx(v, e, nullptr); }
expr* bool_var2expr(sat::bool_var v) const { return m_bool_var2expr.get(v, nullptr); }
expr_ref literal2expr(sat::literal lit) const { expr* e = bool_var2expr(lit.var()); return (e && lit.sign()) ? expr_ref(mk_not(m, e), m) : expr_ref(e, m); }
unsigned generation() const { return m_generation; }