mirror of
https://github.com/Z3Prover/z3
synced 2025-04-10 03:07:07 +00:00
parent
a71b4fab23
commit
e5892e5e97
|
@ -93,8 +93,16 @@ namespace bv {
|
|||
} while (curr != v);
|
||||
|
||||
zero_one_bits const& _bits = m_zero_one_bits[v];
|
||||
if (_bits.size() != num_bits)
|
||||
std::cout << v << " " << _bits.size() << " " << num_bits << "\n";
|
||||
if (_bits.size() != num_bits) {
|
||||
std::cout << "v" << v << " " << _bits.size() << " " << num_bits << "\n";
|
||||
std::cout << "true: " << mk_true() << "\n";
|
||||
do {
|
||||
std::cout << "v" << curr << ": " << m_bits[curr] << "\n";
|
||||
curr = m_find.next(curr);
|
||||
}
|
||||
while (curr != v);
|
||||
}
|
||||
SASSERT(_bits.size() == num_bits);
|
||||
VERIFY(_bits.size() == num_bits);
|
||||
bool_vector already_found;
|
||||
already_found.resize(bv_sz, false);
|
||||
|
|
|
@ -664,7 +664,7 @@ namespace bv {
|
|||
result->set_solver(&ctx.s());
|
||||
for (theory_var i = 0; i < static_cast<theory_var>(get_num_vars()); ++i)
|
||||
if (find(i) != i)
|
||||
result->m_find.merge(i, find(i));
|
||||
result->m_find.set_root(i, find(i));
|
||||
result->m_prop_queue.append(m_prop_queue);
|
||||
for (unsigned i = 0; i < m_bool_var2atom.size(); ++i) {
|
||||
atom* a = m_bool_var2atom[i];
|
||||
|
|
|
@ -102,6 +102,9 @@ namespace bv {
|
|||
unsigned m_is_true:1;
|
||||
zero_one_bit(theory_var v = euf::null_theory_var, unsigned idx = UINT_MAX, bool is_true = false):
|
||||
m_owner(v), m_idx(idx), m_is_true(is_true) {}
|
||||
std::ostream& display(std::ostream& out) const {
|
||||
return out << "v" << m_owner << " @ " << m_idx << " " << (m_is_true?"T":"F");
|
||||
}
|
||||
};
|
||||
|
||||
typedef svector<zero_one_bit> zero_one_bits;
|
||||
|
@ -367,9 +370,12 @@ namespace bv {
|
|||
typedef std::pair<solver const*, theory_var> pp_var;
|
||||
pp_var pp(theory_var v) const { return pp_var(this, v); }
|
||||
|
||||
friend std::ostream& operator<<(std::ostream& out, solver::zero_one_bit const& zo) { return zo.display(out); }
|
||||
|
||||
};
|
||||
|
||||
inline std::ostream& operator<<(std::ostream& out, solver::pp_var const& p) { return p.first->display(out, p.second); }
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -134,6 +134,14 @@ public:
|
|||
CASSERT("union_find", check_invariant());
|
||||
}
|
||||
|
||||
void set_root(unsigned v, unsigned root) {
|
||||
TRACE("union_find", tout << "merging " << v << " " << root << "\n";);
|
||||
SASSERT(v != root);
|
||||
m_find[v] = root;
|
||||
m_size[root] += m_size[v];
|
||||
std::swap(m_next[root], m_next[v]);
|
||||
}
|
||||
|
||||
// dissolve equivalence class of v
|
||||
// this method cannot be used with backtracking.
|
||||
void dissolve(unsigned v) {
|
||||
|
|
Loading…
Reference in a new issue