mirror of
https://github.com/Z3Prover/z3
synced 2025-04-23 09:05:31 +00:00
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
8df45b442b
commit
80f00f191a
26 changed files with 213 additions and 152 deletions
|
@ -612,7 +612,7 @@ namespace smt {
|
|||
// n = bv2int(k) = ite(bit2bool(k[sz-1],2^{sz-1},0) + ... + ite(bit2bool(k[0],1,0))
|
||||
//
|
||||
SASSERT(ctx.e_internalized(n));
|
||||
SASSERT(m_util.is_bv2int(n));
|
||||
SASSERT(m_util.is_ubv2int(n));
|
||||
TRACE("bv2int_bug", tout << "bv2int:\n" << mk_pp(n, m) << "\n";);
|
||||
sort * int_sort = n->get_sort();
|
||||
app * k = to_app(n->get_arg(0));
|
||||
|
@ -693,7 +693,7 @@ namespace smt {
|
|||
expr* n_expr = n;
|
||||
expr* e = n->get_arg(0);
|
||||
expr_ref lhs(m), rhs(m);
|
||||
lhs = m.mk_app(get_id(), OP_BV2INT, 1, ¶m, 1, &n_expr);
|
||||
lhs = m.mk_app(get_id(), OP_UBV2INT, 1, ¶m, 1, &n_expr);
|
||||
unsigned sz = m_util.get_bv_size(n);
|
||||
numeral mod = power(numeral(2), sz);
|
||||
rhs = m_autil.mk_mod(e, m_autil.mk_numeral(mod, true));
|
||||
|
@ -940,11 +940,13 @@ namespace smt {
|
|||
internalize_int2bv(term);
|
||||
}
|
||||
return params().m_bv_enable_int2bv2int;
|
||||
case OP_BV2INT:
|
||||
case OP_UBV2INT:
|
||||
if (params().m_bv_enable_int2bv2int) {
|
||||
internalize_bv2int(term);
|
||||
}
|
||||
return params().m_bv_enable_int2bv2int;
|
||||
case OP_SBV2INT:
|
||||
throw default_exception("sbv_to_int should have been removed by pre-processing");
|
||||
case OP_BSREM: return false;
|
||||
case OP_BUREM: return false;
|
||||
case OP_BSMOD: return false;
|
||||
|
@ -1393,7 +1395,7 @@ namespace smt {
|
|||
}
|
||||
}
|
||||
}
|
||||
else if (params().m_bv_enable_int2bv2int && m_util.is_bv2int(n)) {
|
||||
else if (params().m_bv_enable_int2bv2int && m_util.is_ubv2int(n)) {
|
||||
ctx.mark_as_relevant(n->get_arg(0));
|
||||
assert_bv2int_axiom(n);
|
||||
}
|
||||
|
@ -1537,7 +1539,7 @@ namespace smt {
|
|||
}
|
||||
else {
|
||||
for (enode* bv2int : *n1) {
|
||||
if (m_util.is_bv2int(bv2int->get_expr()))
|
||||
if (m_util.is_ubv2int(bv2int->get_expr()))
|
||||
propagate_bv2int(bv2int);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -45,7 +45,7 @@ namespace smt {
|
|||
for (auto sib : *n) {
|
||||
if (sib == n)
|
||||
continue;
|
||||
if (!bv.is_bv2int(sib->get_expr()))
|
||||
if (!bv.is_ubv2int(sib->get_expr()))
|
||||
continue;
|
||||
if (sib->get_arg(0)->get_root() == r1)
|
||||
continue;
|
||||
|
@ -64,7 +64,7 @@ namespace smt {
|
|||
for (auto e : m_translator.int2bv()) {
|
||||
auto n = ctx.get_enode(e);
|
||||
auto x = n->get_arg(0)->get_expr();
|
||||
auto bv2int = bv.mk_bv2int(e);
|
||||
auto bv2int = bv.mk_ubv2int(e);
|
||||
ctx.internalize(bv2int, false);
|
||||
auto N = rational::power_of_two(bv.get_bv_size(e));
|
||||
auto xModN = a.mk_mod(x, a.mk_int(N));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue