mirror of
https://github.com/Z3Prover/z3
synced 2025-06-06 22:23:22 +00:00
Avoid creating tautological clauses for quot_rem
This commit is contained in:
parent
e96f69e76c
commit
bb93a2ccb2
2 changed files with 7 additions and 3 deletions
|
@ -421,6 +421,8 @@ namespace polysat {
|
||||||
m_dedup.m_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() });
|
m_dedup.m_div_rem_list.push_back({ a, b, q.var(), r.var() });
|
||||||
|
|
||||||
|
LOG("quot_rem(" << a << ", " << b << ") = (" << q << ", " << r << ")");
|
||||||
|
|
||||||
// Axioms for quotient/remainder:
|
// Axioms for quotient/remainder:
|
||||||
// a = b*q + r
|
// a = b*q + r
|
||||||
// multiplication does not overflow in b*q
|
// multiplication does not overflow in b*q
|
||||||
|
@ -443,7 +445,9 @@ namespace polysat {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
auto c_eq = eq(b);
|
auto c_eq = eq(b);
|
||||||
|
if (!c_eq.is_always_true())
|
||||||
s.add_clause("[axiom] quot_rem 4", { c_eq, ult(r, b) }, false);
|
s.add_clause("[axiom] quot_rem 4", { c_eq, ult(r, b) }, false);
|
||||||
|
if (!c_eq.is_always_false())
|
||||||
s.add_clause("[axiom] quot_rem 5", { ~c_eq, eq(q + 1) }, false);
|
s.add_clause("[axiom] quot_rem 5", { ~c_eq, eq(q + 1) }, false);
|
||||||
|
|
||||||
return {std::move(q), std::move(r)};
|
return {std::move(q), std::move(r)};
|
||||||
|
|
|
@ -1387,9 +1387,9 @@ namespace polysat {
|
||||||
|
|
||||||
clause_ref solver::mk_clause(char const* name, unsigned n, signed_constraint const* cs, bool is_redundant) {
|
clause_ref solver::mk_clause(char const* name, unsigned n, signed_constraint const* cs, bool is_redundant) {
|
||||||
clause_builder cb(*this, name);
|
clause_builder cb(*this, name);
|
||||||
|
cb.set_redundant(is_redundant);
|
||||||
for (unsigned i = 0; i < n; ++i)
|
for (unsigned i = 0; i < n; ++i)
|
||||||
cb.insert(cs[i]);
|
cb.insert(cs[i]);
|
||||||
cb.set_redundant(is_redundant);
|
|
||||||
return cb.build();
|
return cb.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue