mirror of
https://github.com/Z3Prover/z3
synced 2025-08-22 19:17:53 +00:00
Missing file
This commit is contained in:
parent
fe164c843d
commit
4648c35a35
2 changed files with 9 additions and 4 deletions
|
@ -373,13 +373,14 @@ namespace polysat {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
constraint_dedup::quot_rem_args args({a, b});
|
constraint_dedup::quot_rem_args args({a, b});
|
||||||
auto it = m_dedup.quot_rem_expr.find_iterator(args);
|
auto it = m_dedup.m_quot_rem_expr.find_iterator(args);
|
||||||
if (it != m_dedup.quot_rem_expr.end())
|
if (it != m_dedup.m_quot_rem_expr.end())
|
||||||
return { m.mk_var(it->m_value.first), m.mk_var(it->m_value.second) };
|
return { m.mk_var(it->m_value.first), m.mk_var(it->m_value.second) };
|
||||||
|
|
||||||
pdd q = m.mk_var(s.add_var(sz)); // quotient
|
pdd q = m.mk_var(s.add_var(sz)); // quotient
|
||||||
pdd r = m.mk_var(s.add_var(sz)); // remainder
|
pdd r = m.mk_var(s.add_var(sz)); // remainder
|
||||||
m_dedup.quot_rem_expr.insert(args, { q.var(), r.var() });
|
m_dedup.m_quot_rem_expr.insert(args, { q.var(), r.var() });
|
||||||
|
m_dedup.m_div_rem_list.push_back({ a, b, q.var(), r.var() });
|
||||||
|
|
||||||
// Axioms for quotient/remainder:
|
// Axioms for quotient/remainder:
|
||||||
// a = b*q + r
|
// a = b*q + r
|
||||||
|
|
|
@ -38,7 +38,8 @@ namespace polysat {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
using quot_rem_expr_map = map<quot_rem_args, std::pair<pvar, pvar>, quot_rem_args_hash, quot_rem_args_eq>;
|
using quot_rem_expr_map = map<quot_rem_args, std::pair<pvar, pvar>, quot_rem_args_hash, quot_rem_args_eq>;
|
||||||
quot_rem_expr_map quot_rem_expr;
|
quot_rem_expr_map m_quot_rem_expr;
|
||||||
|
vector<std::tuple<pdd, pdd, pvar, pvar>> m_div_rem_list;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Manage constraint lifetime, deduplication, and connection to boolean variables/literals.
|
// Manage constraint lifetime, deduplication, and connection to boolean variables/literals.
|
||||||
|
@ -131,6 +132,9 @@ namespace polysat {
|
||||||
constraint* const* begin() const { return m_constraints.data(); }
|
constraint* const* begin() const { return m_constraints.data(); }
|
||||||
constraint* const* end() const { return m_constraints.data() + m_constraints.size(); }
|
constraint* const* end() const { return m_constraints.data() + m_constraints.size(); }
|
||||||
|
|
||||||
|
std::tuple<pdd, pdd, pvar, pvar> const* begin_div() const { return m_dedup.m_div_rem_list.data(); }
|
||||||
|
std::tuple<pdd, pdd, pvar, pvar> const* end_div() const { return m_dedup.m_div_rem_list.data() + m_dedup.m_div_rem_list.size(); }
|
||||||
|
|
||||||
class clause_iterator {
|
class clause_iterator {
|
||||||
friend class constraint_manager;
|
friend class constraint_manager;
|
||||||
using storage_t = decltype(constraint_manager::m_clauses);
|
using storage_t = decltype(constraint_manager::m_clauses);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue