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:
parent
07dd1065db
commit
b084852397
4 changed files with 87 additions and 30 deletions
|
@ -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))
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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; }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue