3
0
Fork 0
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:
Nikolaj Bjorner 2022-12-06 04:56:42 -08:00
parent 317edb2b03
commit ef811a3dd8
2 changed files with 11 additions and 0 deletions

View file

@ -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)); }

View file

@ -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