mirror of
https://github.com/Z3Prover/z3
synced 2025-04-24 09:35:32 +00:00
add propagation rule for strict inequality to force univariate polynomials
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
317edb2b03
commit
ef811a3dd8
2 changed files with 11 additions and 0 deletions
|
@ -426,6 +426,8 @@ namespace polysat {
|
|||
signed_constraint ult(pdd const& p, pdd const& q) { return m_constraints.ult(p, q); }
|
||||
signed_constraint ult(pdd const& p, rational const& q) { return ult(p, p.manager().mk_val(q)); }
|
||||
signed_constraint ult(rational const& p, pdd const& q) { return ult(q.manager().mk_val(p), q); }
|
||||
signed_constraint ult(int p, pdd const& q) { return ult(rational(p), q); }
|
||||
signed_constraint ult(pdd const& p, int q) { return ult(p, rational(q)); }
|
||||
signed_constraint sle(pdd const& p, pdd const& q) { return m_constraints.sle(p, q); }
|
||||
signed_constraint slt(pdd const& p, pdd const& q) { return m_constraints.slt(p, q); }
|
||||
signed_constraint slt(pdd const& p, rational const& q) { return slt(p, p.manager().mk_val(q)); }
|
||||
|
|
|
@ -200,6 +200,15 @@ namespace polysat {
|
|||
}
|
||||
|
||||
s.m_viable.intersect(p, q, sc);
|
||||
|
||||
if (first && !is_positive) {
|
||||
if (!p.is_val())
|
||||
// -1 > q
|
||||
s.add_clause(~sc, s.ult(q, -1), false);
|
||||
if (!q.is_val())
|
||||
// p > 0
|
||||
s.add_clause(~sc, s.ult(0, q), false);
|
||||
}
|
||||
}
|
||||
|
||||
// Evaluate lhs <= rhs
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue