mirror of
https://github.com/Z3Prover/z3
synced 2025-06-19 20:33:38 +00:00
This commit is contained in:
parent
7bae297297
commit
037c93b258
1 changed files with 16 additions and 8 deletions
|
@ -530,15 +530,23 @@ namespace bv {
|
||||||
expr* arg1 = n->get_arg(0);
|
expr* arg1 = n->get_arg(0);
|
||||||
expr* arg2 = n->get_arg(1);
|
expr* arg2 = n->get_arg(1);
|
||||||
mk_bits(get_th_var(n));
|
mk_bits(get_th_var(n));
|
||||||
|
sat::literal eq_lit;
|
||||||
if (p.hi_div0()) {
|
if (p.hi_div0()) {
|
||||||
add_unit(eq_internalize(n, ibin(arg1, arg2)));
|
eq_lit = eq_internalize(n, ibin(arg1, arg2));
|
||||||
return;
|
add_unit(eq_lit);
|
||||||
}
|
ctx.add_root(eq_lit);
|
||||||
unsigned sz = bv.get_bv_size(n);
|
}
|
||||||
expr_ref zero(bv.mk_numeral(0, sz), m);
|
else {
|
||||||
expr_ref eq(m.mk_eq(arg2, zero), m);
|
unsigned sz = bv.get_bv_size(n);
|
||||||
expr_ref ite(m.mk_ite(eq, iun(arg1), ibin(arg1, arg2)), m);
|
expr_ref zero(bv.mk_numeral(0, sz), m);
|
||||||
add_unit(eq_internalize(n, ite));
|
sat::literal eqZ = eq_internalize(arg2, zero);
|
||||||
|
sat::literal eqU = mk_literal(iun(arg1));
|
||||||
|
sat::literal eqI = mk_literal(ibin(arg1, arg2));
|
||||||
|
add_clause(~eqZ, eqU);
|
||||||
|
add_clause(eqZ, eqI);
|
||||||
|
ctx.add_aux(~eqZ, eqU);
|
||||||
|
ctx.add_aux(eqZ, eqI);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void solver::internalize_unary(app* n, std::function<void(unsigned, expr* const*, expr_ref_vector&)>& fn) {
|
void solver::internalize_unary(app* n, std::function<void(unsigned, expr* const*, expr_ref_vector&)>& fn) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue