mirror of
https://github.com/Z3Prover/z3
synced 2025-04-16 05:48:44 +00:00
fix nla_monotone lemmas again
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
3147be66fe
commit
b2bfb1faea
|
@ -49,7 +49,7 @@ void monotone::monotonicity_lemma(monic const& m) {
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
x <= -2 & y >= 3 => x*y <= -6
|
0 >= x >= -2 & 0 <= y <= 3 => x*y >= -6
|
||||||
|
|
||||||
*/
|
*/
|
||||||
void monotone::monotonicity_lemma_gt(const monic& m) {
|
void monotone::monotonicity_lemma_gt(const monic& m) {
|
||||||
|
@ -58,6 +58,7 @@ void monotone::monotonicity_lemma_gt(const monic& m) {
|
||||||
for (lpvar j : m.vars()) {
|
for (lpvar j : m.vars()) {
|
||||||
auto v = c().val(j);
|
auto v = c().val(j);
|
||||||
lemma |= ineq(j, v.is_neg() ? llc::LT : llc::GT, v);
|
lemma |= ineq(j, v.is_neg() ? llc::LT : llc::GT, v);
|
||||||
|
lemma |= ineq(j, v.is_neg() ? llc::GT : llc::LT, 0);
|
||||||
product *= v;
|
product *= v;
|
||||||
}
|
}
|
||||||
lemma |= ineq(m.var(), product.is_neg() ? llc::GE : llc::LE, product);
|
lemma |= ineq(m.var(), product.is_neg() ? llc::GE : llc::LE, product);
|
||||||
|
@ -68,6 +69,10 @@ void monotone::monotonicity_lemma_gt(const monic& m) {
|
||||||
/\_i |m[i]| >= |val(m[i])| => |m| >= |product_i val(m[i])|
|
/\_i |m[i]| >= |val(m[i])| => |m| >= |product_i val(m[i])|
|
||||||
<=>
|
<=>
|
||||||
\/_i |m[i]| < |val(m[i])| or |m| >= |product_i val(m[i])|
|
\/_i |m[i]| < |val(m[i])| or |m| >= |product_i val(m[i])|
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
x <= -2 & y >= 3 => x*y <= -6
|
||||||
*/
|
*/
|
||||||
void monotone::monotonicity_lemma_lt(const monic& m) {
|
void monotone::monotonicity_lemma_lt(const monic& m) {
|
||||||
new_lemma lemma(c(), __FUNCTION__);
|
new_lemma lemma(c(), __FUNCTION__);
|
||||||
|
|
Loading…
Reference in a new issue