3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-11-06 06:16:02 +00:00

avoid div/mod axioms on 0

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2020-05-23 16:36:59 -07:00
parent 7a12cebd41
commit d6ad371934
2 changed files with 10 additions and 1 deletions

View file

@ -1326,6 +1326,15 @@ public:
expr_ref div(a.mk_idiv(p, q), m);
expr_ref mod(a.mk_mod(p, q), m);
expr_ref zero(a.mk_int(0), m);
if (a.is_zero(p)) {
literal q_ge_0 = mk_literal(a.mk_ge(q, zero));
literal q_le_0 = mk_literal(a.mk_le(q, zero));
mk_axiom(~q_ge_0, ~q_le_0, mk_literal(a.mk_ge(div, zero)));
mk_axiom(~q_ge_0, ~q_le_0, mk_literal(a.mk_le(div, zero)));
mk_axiom(~q_ge_0, ~q_le_0, mk_literal(a.mk_ge(mod, zero)));
mk_axiom(~q_ge_0, ~q_le_0, mk_literal(a.mk_le(mod, zero)));
return;
}
literal eq = th.mk_eq(a.mk_add(a.mk_mul(q, div), mod), p, false);
literal mod_ge_0 = mk_literal(a.mk_ge(mod, zero));
literal div_ge_0 = mk_literal(a.mk_ge(div, zero));