3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-06-03 12:51:22 +00:00

Refactor assignment and search state

This commit is contained in:
Jakob Rath 2022-11-21 17:25:15 +01:00
parent 022c06f75d
commit 6e72a97727
22 changed files with 326 additions and 211 deletions

View file

@ -8,7 +8,7 @@ Module Name:
Author:
Nikolaj Bjorner (nbjorner) 2021-03-19
Jakob Rath 2021-04-6
Jakob Rath 2021-04-06
--*/
@ -89,7 +89,7 @@ namespace polysat {
std::ostream& search_state::display(std::ostream& out) const {
for (auto const& item : m_items)
display(item, out) << " ";
return out;
return out;
}
bool search_state::value(pvar v, rational& val) const {
@ -103,28 +103,7 @@ namespace polysat {
void search_state::push_assignment(pvar p, rational const& r) {
m_items.push_back(search_item::assignment(p));
m_assignment.push_back({p, r});
unsigned sz = s.size(p);
pdd& s = assignment(sz);
m_subst_trail.push_back(s);
s = s.subst_add(p, r);
SASSERT(s == *m_subst[sz]);
}
pdd& search_state::assignment(unsigned sz) const {
m_subst.reserve(sz + 1);
if (!m_subst[sz])
m_subst.set(sz, alloc(pdd, s.sz2pdd(sz).one()));
return *m_subst[sz];
}
void search_state::pop_assignment() {
m_assignment.pop_back();
pdd& s = m_subst_trail.back();
auto& m = s.manager();
unsigned sz = m.power_of_2();
*m_subst[sz] = s;
m_subst_trail.pop_back();
m_assignment.push(p, r);
}
void search_state::push_boolean(sat::literal lit) {
@ -133,8 +112,10 @@ namespace polysat {
void search_state::pop() {
auto const& item = m_items.back();
if (item.is_assignment() && !m_assignment.empty() && item.var() == m_assignment.back().first)
pop_assignment();
if (item.is_assignment()) {
SASSERT_EQ(item.var(), m_assignment.pairs().back().first);
m_assignment.pop();
}
m_items.pop_back();
}