mirror of
https://github.com/Z3Prover/z3
synced 2025-04-29 20:05:51 +00:00
fix #5102
This commit is contained in:
parent
1cb0dbae51
commit
18143d8932
6 changed files with 41 additions and 32 deletions
|
@ -2293,16 +2293,15 @@ br_status bv_rewriter::mk_bit2bool(expr * lhs, expr * rhs, expr_ref & result) {
|
|||
return BR_DONE;
|
||||
}
|
||||
|
||||
if (m().is_ite(lhs)) {
|
||||
result = m().mk_ite(to_app(lhs)->get_arg(0),
|
||||
m().mk_eq(to_app(lhs)->get_arg(1), rhs),
|
||||
m().mk_eq(to_app(lhs)->get_arg(2), rhs));
|
||||
expr* a = nullptr, *b = nullptr, *c = nullptr;
|
||||
if (m().is_ite(lhs, a, b, c)) {
|
||||
result = m().mk_ite(a, m().mk_eq(b, rhs), m().mk_eq(c, rhs));
|
||||
return BR_REWRITE2;
|
||||
}
|
||||
|
||||
if (m_util.is_bv_not(lhs)) {
|
||||
|
||||
if (m_util.is_bv_not(lhs, a)) {
|
||||
SASSERT(v.is_one() || v.is_zero());
|
||||
result = m().mk_eq(to_app(lhs)->get_arg(0), mk_numeral(numeral(1) - v, 1));
|
||||
result = m().mk_eq(a, mk_numeral(numeral(1) - v, 1));
|
||||
return BR_REWRITE1;
|
||||
}
|
||||
|
||||
|
@ -2313,11 +2312,9 @@ br_status bv_rewriter::mk_bit2bool(expr * lhs, expr * rhs, expr_ref & result) {
|
|||
|
||||
if (m_util.is_bv_or(lhs)) {
|
||||
ptr_buffer<expr> new_args;
|
||||
unsigned num = to_app(lhs)->get_num_args();
|
||||
for (unsigned i = 0; i < num; i++) {
|
||||
new_args.push_back(m().mk_eq(to_app(lhs)->get_arg(i), bit1));
|
||||
}
|
||||
result = m().mk_or(new_args.size(), new_args.c_ptr());
|
||||
for (expr* arg : *to_app(lhs))
|
||||
new_args.push_back(m().mk_eq(arg, bit1));
|
||||
result = m().mk_or(new_args);
|
||||
if (is_one) {
|
||||
return BR_REWRITE2;
|
||||
}
|
||||
|
@ -2330,12 +2327,10 @@ br_status bv_rewriter::mk_bit2bool(expr * lhs, expr * rhs, expr_ref & result) {
|
|||
|
||||
if (m_util.is_bv_xor(lhs)) {
|
||||
ptr_buffer<expr> new_args;
|
||||
unsigned num = to_app(lhs)->get_num_args();
|
||||
for (unsigned i = 0; i < num; i++) {
|
||||
new_args.push_back(m().mk_eq(to_app(lhs)->get_arg(i), bit1));
|
||||
}
|
||||
for (expr* arg : *to_app(lhs))
|
||||
new_args.push_back(m().mk_eq(arg, bit1));
|
||||
// TODO: bool xor is not flat_assoc... must fix that.
|
||||
result = m().mk_xor(new_args.size(), new_args.c_ptr());
|
||||
result = m().mk_xor(new_args);
|
||||
if (is_one) {
|
||||
return BR_REWRITE2;
|
||||
}
|
||||
|
@ -2372,7 +2367,7 @@ br_status bv_rewriter::mk_blast_eq_value(expr * lhs, expr * rhs, expr_ref & resu
|
|||
mk_numeral(bit0 ? 0 : 1, 1)));
|
||||
div(v, two, v);
|
||||
}
|
||||
result = m().mk_and(new_args.size(), new_args.c_ptr());
|
||||
result = m().mk_and(new_args);
|
||||
return BR_REWRITE3;
|
||||
}
|
||||
|
||||
|
@ -2438,7 +2433,7 @@ br_status bv_rewriter::mk_eq_concat(expr * lhs, expr * rhs, expr_ref & result) {
|
|||
}
|
||||
SASSERT(i1 == 0 && i2 == 0);
|
||||
SASSERT(new_eqs.size() >= 1);
|
||||
result = m().mk_and(new_eqs.size(), new_eqs.c_ptr());
|
||||
result = m().mk_and(new_eqs);
|
||||
return BR_REWRITE3;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue