3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-11-23 14:11:28 +00:00

reshuffle if conditions

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2025-11-16 17:24:31 -08:00
parent e9905c05b1
commit 12df8f593e

View file

@ -781,17 +781,17 @@ br_status arith_rewriter::mk_le_ge_eq_core(expr * arg1, expr * arg2, op_kind kin
case EQ: result = m_util.mk_eq(new_arg1, new_arg2); return BR_DONE; case EQ: result = m_util.mk_eq(new_arg1, new_arg2); return BR_DONE;
} }
} }
else if (st == BR_DONE && arg1 == orig_arg1 && arg2 == orig_arg2) { if (m_util.is_idiv(arg1, t, e) && is_numeral(e, a1) && a1 > 0 && is_numeral(arg2, a2) && a2 == 0 &&
(kind == LE || kind == GE)) {
// e > 0 => t div e ~ arg2 <=> e * (t div e) ~ e * arg2 <=> t - mod t e ~ e * arg2 // e > 0 => t div e ~ arg2 <=> e * (t div e) ~ e * arg2 <=> t - mod t e ~ e * arg2
if (m_util.is_idiv(arg1, t, e) && is_numeral(e, a1) && a1 > 0) { switch (kind) {
if (is_numeral(arg2, a2) && a2 == 0 && (kind == LE || kind == GE)) { case LE: result = m_util.mk_le(result, m_util.mk_mul(e, arg2)); return BR_REWRITE3;
switch (kind) { case GE: result = m_util.mk_ge(result, m_util.mk_mul(e, arg2)); return BR_REWRITE3;
case LE: result = m_util.mk_le(result, m_util.mk_mul(e, arg2)); return BR_REWRITE3; case EQ: result = m.mk_eq(result, m_util.mk_mul(e, arg2)); return BR_REWRITE3;
case GE: result = m_util.mk_ge(result, m_util.mk_mul(e, arg2)); return BR_REWRITE3;
case EQ: result = m.mk_eq(result, m_util.mk_mul(e, arg2)); return BR_REWRITE3;
}
}
} }
}
if (st == BR_DONE && arg1 == orig_arg1 && arg2 == orig_arg2) {
// Nothing new; return BR_FAILED to avoid rewriting loops. // Nothing new; return BR_FAILED to avoid rewriting loops.
return BR_FAILED; return BR_FAILED;
} }