mirror of
https://github.com/Z3Prover/z3
synced 2025-04-29 03:45:51 +00:00
parent
98dfb1ba86
commit
50db22b2b2
3 changed files with 16 additions and 15 deletions
|
@ -98,7 +98,7 @@ public:
|
|||
m_eqs[sv.first.index()].pop_back();
|
||||
m_eqs[sv.second.index()].pop_back();
|
||||
m_eqs[(~sv.first).index()].pop_back();
|
||||
m_eqs[(~sv.second).index()].pop_back();
|
||||
m_eqs[(~sv.second).index()].pop_back();
|
||||
}
|
||||
m_trail.pop_scope(n);
|
||||
m_stack.pop_scope(n); // this cass takes care of unmerging through union_find m_uf
|
||||
|
@ -110,12 +110,15 @@ public:
|
|||
void merge(signed_var v1, signed_var v2, eq_justification const& j) {
|
||||
if (v1 == v2)
|
||||
return;
|
||||
if (find(v1).var() == find(v2).var())
|
||||
return;
|
||||
unsigned max_i = std::max(v1.index(), v2.index()) + 2;
|
||||
m_eqs.reserve(max_i);
|
||||
while (m_uf.get_num_vars() <= max_i) m_uf.mk_var();
|
||||
TRACE("nla_solver_mons", tout << v1 << " == " << v2 << " " << m_uf.find(v1.index()) << " == " << m_uf.find(v2.index()) << "\n";);
|
||||
m_trail.push_back(std::make_pair(v1, v2));
|
||||
m_uf.merge(v1.index(), v2.index());
|
||||
m_uf.merge((~v1).index(), (~v2).index());
|
||||
m_uf.merge((~v1).index(), (~v2).index());
|
||||
m_eqs[v1.index()].push_back(eq_edge(v2, j));
|
||||
m_eqs[v2.index()].push_back(eq_edge(v1, j));
|
||||
m_eqs[(~v1).index()].push_back(eq_edge(~v2, j));
|
||||
|
@ -146,7 +149,7 @@ public:
|
|||
}
|
||||
inline bool is_root(svector<lpvar> v) const {
|
||||
for (lpvar j : v)
|
||||
if (! is_root(j))
|
||||
if (!is_root(j))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue