mirror of
https://github.com/Z3Prover/z3
synced 2025-09-30 05:09:02 +00:00
propagate mod over ite even if it hurts
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
a382ddbd8a
commit
7005d04755
1 changed files with 8 additions and 1 deletions
|
@ -1413,7 +1413,7 @@ br_status arith_rewriter::mk_mod_core(expr * arg1, expr * arg2, expr_ref & resul
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
expr* x, *y;
|
expr* x = nullptr, * y = nullptr, * z = nullptr;
|
||||||
if (is_num2 && v2.is_pos() && m_util.is_mul(arg1, x, y) && m_util.is_numeral(x, v1, is_int) && v1 > 0 && divides(v1, v2)) {
|
if (is_num2 && v2.is_pos() && m_util.is_mul(arg1, x, y) && m_util.is_numeral(x, v1, is_int) && v1 > 0 && divides(v1, v2)) {
|
||||||
result = m_util.mk_mul(m_util.mk_int(v1), m_util.mk_mod(y, m_util.mk_int(v2/v1)));
|
result = m_util.mk_mul(m_util.mk_int(v1), m_util.mk_mod(y, m_util.mk_int(v2/v1)));
|
||||||
return BR_REWRITE1;
|
return BR_REWRITE1;
|
||||||
|
@ -1425,6 +1425,13 @@ br_status arith_rewriter::mk_mod_core(expr * arg1, expr * arg2, expr_ref & resul
|
||||||
return BR_REWRITE1;
|
return BR_REWRITE1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m.is_ite(arg2, x, y, z)) {
|
||||||
|
expr_ref mod1(m_util.mk_mod(arg1, y), m);
|
||||||
|
expr_ref mod2(m_util.mk_mod(arg1, z), m);
|
||||||
|
result = m.mk_ite(x, mod1, mod2);
|
||||||
|
return BR_REWRITE3;
|
||||||
|
}
|
||||||
|
|
||||||
return BR_FAILED;
|
return BR_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue