mirror of
https://github.com/Z3Prover/z3
synced 2025-06-25 15:23:41 +00:00
slicing::collect_fixed should start at low-order base slice
This commit is contained in:
parent
89f0fb05a5
commit
586dcba661
2 changed files with 7 additions and 3 deletions
|
@ -1371,14 +1371,16 @@ namespace polysat {
|
||||||
get_base(var2slice(v), base);
|
get_base(var2slice(v), base);
|
||||||
rational a;
|
rational a;
|
||||||
unsigned lo = 0;
|
unsigned lo = 0;
|
||||||
for (enode* n : base) {
|
for (auto it = base.rbegin(); it != base.rend(); ++it) {
|
||||||
enode* r = n->get_root();
|
enode* const n = *it;
|
||||||
|
enode* const r = n->get_root();
|
||||||
unsigned const w = width(n);
|
unsigned const w = width(n);
|
||||||
unsigned const hi = lo + w - 1;
|
unsigned const hi = lo + w - 1;
|
||||||
if (try_get_value(r, a))
|
if (try_get_value(r, a))
|
||||||
out.push_back({hi, lo, a, n});
|
out.push_back({hi, lo, a, n});
|
||||||
lo += w;
|
lo += w;
|
||||||
}
|
}
|
||||||
|
base.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
void slicing::explain_fixed(euf::enode* const n, std::function<void(sat::literal)> const& on_lit, std::function<void(pvar)> const& on_var) {
|
void slicing::explain_fixed(euf::enode* const n, std::function<void(sat::literal)> const& on_lit, std::function<void(pvar)> const& on_var) {
|
||||||
|
|
|
@ -39,9 +39,11 @@ namespace polysat {
|
||||||
|
|
||||||
friend class test_slicing;
|
friend class test_slicing;
|
||||||
|
|
||||||
|
public:
|
||||||
using enode = euf::enode;
|
using enode = euf::enode;
|
||||||
using enode_vector = euf::enode_vector;
|
using enode_vector = euf::enode_vector;
|
||||||
|
|
||||||
|
private:
|
||||||
class dep_t {
|
class dep_t {
|
||||||
std::variant<std::monostate, sat::literal, unsigned> m_data;
|
std::variant<std::monostate, sat::literal, unsigned> m_data;
|
||||||
public:
|
public:
|
||||||
|
@ -351,7 +353,7 @@ namespace polysat {
|
||||||
|
|
||||||
/** Collect fixed portions of the variable v */
|
/** Collect fixed portions of the variable v */
|
||||||
void collect_fixed(pvar v, justified_fixed_bits_vector& out);
|
void collect_fixed(pvar v, justified_fixed_bits_vector& out);
|
||||||
void explain_fixed(euf::enode* just, std::function<void(sat::literal)> const& on_lit, std::function<void(pvar)> const& on_var);
|
void explain_fixed(enode* just, std::function<void(sat::literal)> const& on_lit, std::function<void(pvar)> const& on_var);
|
||||||
|
|
||||||
std::ostream& display(std::ostream& out) const;
|
std::ostream& display(std::ostream& out) const;
|
||||||
std::ostream& display_tree(std::ostream& out) const;
|
std::ostream& display_tree(std::ostream& out) const;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue