3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-15 21:38:44 +00:00
This commit is contained in:
Nikolaj Bjorner 2022-04-16 18:30:35 +02:00
parent b5309d5fd0
commit 7496f11542

View file

@ -763,19 +763,16 @@ public:
unfold_record r; unfold_record r;
if (!m_unfold.find(c, r)) if (!m_unfold.find(c, r))
continue; continue;
IF_VERBOSE(2, verbose_stream() << "to unfold " << mk_pp(c, m) << "\n"); IF_VERBOSE(1, verbose_stream() << "to unfold " << mk_pp(c, m) << " unfold size " << m_unfold.size() << " core " << core.size() << "\n");
for (expr* f : r.ws) { for (expr* f : r.ws) {
IF_VERBOSE(2, verbose_stream() << "unfold " << mk_pp(f, m) << "\n"); IF_VERBOSE(1, verbose_stream() << "unfold " << mk_pp(f, m) << "\n");
new_assumption(f, r.weight); new_assumption(f, r.weight);
} }
m_unfold_upper -= r.weight * rational(r.ws.size() - 1); m_unfold_upper -= r.weight * rational(r.ws.size() - 1);
m_unfold.remove(c); m_unfold.remove(c);
} }
for (expr* _ : core)
partial.push_back(nullptr);
std::cout << "Core size " << core.size() << "\n"; partial.resize(core.size(), nullptr);
if (core.size() > 2) if (core.size() > 2)
m_unfold_upper += rational(core.size()-2)*weight; m_unfold_upper += rational(core.size()-2)*weight;
@ -808,16 +805,21 @@ public:
if (partial.get(i + 1)) if (partial.get(i + 1))
r.ws.push_back(partial.get(i + 1)); r.ws.push_back(partial.get(i + 1));
m_trail.append(r.ws.size(), r.ws.data()); m_trail.append(r.ws.size(), r.ws.data());
w = mk_fresh_bool("w"); if (r.ws.size() == 1)
cls = m.mk_and(r.ws); w = u;
fml = m.mk_implies(w, cls); else {
partial.push_back(w); w = mk_fresh_bool("w");
add(fml); cls = m.mk_and(r.ws);
update_model(w, cls); fml = m.mk_implies(w, cls);
m_defs.push_back(fml); add(fml);
m_unfold.insert(w, r); update_model(w, cls);
m_defs.push_back(fml);
m_unfold.insert(w, r);
}
partial.push_back(w);
} }
new_assumption(w, weight); if (w)
new_assumption(w, weight);
s().assert_expr(m.mk_not(core.back())); s().assert_expr(m.mk_not(core.back()));
} }