mirror of
https://github.com/Z3Prover/z3
synced 2025-08-22 19:17:53 +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
|
@ -139,7 +139,7 @@ namespace bv {
|
|||
SASSERT(!n || !n->is_attached_to(get_id()));
|
||||
bool suppress_args = !reflect()
|
||||
&& !m.is_considered_uninterpreted(a->get_decl())
|
||||
&& !bv.is_int2bv(e) && !bv.is_bv2int(e);
|
||||
&& !bv.is_int2bv(e) && !bv.is_ubv2int(e);
|
||||
if (!n)
|
||||
n = mk_enode(e, suppress_args);
|
||||
|
||||
|
@ -219,7 +219,8 @@ namespace bv {
|
|||
case OP_REPEAT: internalize_repeat(a); break;
|
||||
case OP_MKBV: internalize_mkbv(a); break;
|
||||
case OP_INT2BV: internalize_int2bv(a); break;
|
||||
case OP_BV2INT: internalize_bv2int(a); break;
|
||||
case OP_UBV2INT: internalize_bv2int(a); break;
|
||||
case OP_SBV2INT: throw default_exception("sbv_to_int is not handled. Pre-processing should have removed it");
|
||||
case OP_BUDIV: internalize_int(bv.mk_bv_udiv_i, bv.mk_bv_udiv0); break;
|
||||
case OP_BSDIV: internalize_int(bv.mk_bv_sdiv_i, bv.mk_bv_sdiv0); break;
|
||||
case OP_BSREM: internalize_int(bv.mk_bv_srem_i, bv.mk_bv_srem0); break;
|
||||
|
@ -415,7 +416,7 @@ namespace bv {
|
|||
|
||||
void solver::assert_bv2int_axiom(app* n) {
|
||||
expr* k = nullptr;
|
||||
VERIFY(bv.is_bv2int(n, k));
|
||||
VERIFY(bv.is_ubv2int(n, k));
|
||||
SASSERT(bv.is_bv_sort(k->get_sort()));
|
||||
expr_ref_vector k_bits(m);
|
||||
euf::enode* k_enode = expr2enode(k);
|
||||
|
@ -461,7 +462,7 @@ namespace bv {
|
|||
VERIFY(bv.is_int2bv(n, e));
|
||||
euf::enode* n_enode = expr2enode(n);
|
||||
expr_ref lhs(m), rhs(m);
|
||||
lhs = bv.mk_bv2int(n);
|
||||
lhs = bv.mk_ubv2int(n);
|
||||
unsigned sz = bv.get_bv_size(n);
|
||||
numeral mod = power(numeral(2), sz);
|
||||
rhs = m_autil.mk_mod(e, m_autil.mk_int(mod));
|
||||
|
|
|
@ -231,7 +231,7 @@ namespace bv {
|
|||
}
|
||||
else {
|
||||
for (euf::enode* bv2int : euf::enode_class(n1)) {
|
||||
if (bv.is_bv2int(bv2int->get_expr()))
|
||||
if (bv.is_ubv2int(bv2int->get_expr()))
|
||||
propagate_bv2int(bv2int);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -382,7 +382,7 @@ namespace intblast {
|
|||
for (auto sib : euf::enode_class(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;
|
||||
|
@ -401,7 +401,7 @@ namespace intblast {
|
|||
for (auto e : m_translator.int2bv()) {
|
||||
auto n = expr2enode(e);
|
||||
auto x = n->get_arg(0)->get_expr();
|
||||
auto bv2int = bv.mk_bv2int(e);
|
||||
auto bv2int = bv.mk_ubv2int(e);
|
||||
ctx.internalize(bv2int);
|
||||
auto N = rational::power_of_two(bv.get_bv_size(e));
|
||||
auto xModN = a.mk_mod(x, a.mk_int(N));
|
||||
|
@ -490,7 +490,7 @@ namespace intblast {
|
|||
rw.mk_app(n->get_decl(), args.size(), args.data(), value);
|
||||
}
|
||||
else {
|
||||
expr_ref bv2int(bv.mk_bv2int(n->get_expr()), m);
|
||||
expr_ref bv2int(bv.mk_ubv2int(n->get_expr()), m);
|
||||
euf::enode* b2i = ctx.get_enode(bv2int);
|
||||
SASSERT(b2i);
|
||||
VERIFY(b2i);
|
||||
|
@ -513,7 +513,7 @@ namespace intblast {
|
|||
continue;
|
||||
auto t = m_translator.translated(e);
|
||||
|
||||
expr_ref ei(bv.mk_bv2int(e), m);
|
||||
expr_ref ei(bv.mk_ubv2int(e), m);
|
||||
expr_ref ti(a.mk_mod(t, a.mk_int(rational::power_of_two(bv.get_bv_size(e)))), m);
|
||||
auto ev = mdl(ei);
|
||||
auto tv = mdl(ti);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue