3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-28 19:35:50 +00:00

intblast debugging

This commit is contained in:
Nikolaj Bjorner 2023-12-11 10:00:11 -08:00
parent f89de2b455
commit 9373e1b7f5
8 changed files with 121 additions and 22 deletions

View file

@ -82,6 +82,7 @@ namespace intblast {
m_core.reset();
m_vars.reset();
m_trail.reset();
m_new_funs.reset();
m_solver = mk_smt2_solver(m, s.params(), symbol::null);
expr_ref_vector es(m);
@ -228,12 +229,19 @@ namespace intblast {
}
continue;
}
if (m.is_ite(e)) {
m_trail.push_back(m.mk_ite(args.get(0), args.get(1), args.get(2)));
translated.insert(e, m_trail.back());
continue;
}
if (ap->get_family_id() != bv.get_family_id()) {
bool has_bv_arg = any_of(*ap, [&](expr* arg) { return bv.is_bv(arg); });
bool has_bv_sort = bv.is_bv(e);
func_decl* f = ap->get_decl();
if (has_bv_arg) {
verbose_stream() << mk_pp(ap, m) << "\n";
// need to update args with mod where they are bit-vectors.
NOT_IMPLEMENTED_YET();
}
@ -245,14 +253,17 @@ namespace intblast {
domain.push_back(bv.is_bv_sort(s) ? a.mk_int() : s);
}
sort* range = bv.is_bv(e) ? a.mk_int() : e->get_sort();
f = m.mk_fresh_func_decl(ap->get_decl()->get_name(), symbol("bv"), domain.size(), domain.data(), range);
func_decl* g = nullptr;
if (!m_new_funs.find(f, g)) {
g = m.mk_fresh_func_decl(ap->get_decl()->get_name(), symbol("bv"), domain.size(), domain.data(), range);
m_new_funs.insert(f, g);
}
f = g;
}
m_trail.push_back(m.mk_app(f, args));
translated.insert(e, m_trail.back());
verbose_stream() << "translate " << mk_pp(e, m) << " " << has_bv_sort << "\n";
if (has_bv_sort)
m_vars.insert(e, { m_trail.back(), bv_size() });
@ -329,7 +340,7 @@ namespace intblast {
unsigned sz = hi - lo + 1;
expr* new_arg = args.get(0);
if (lo > 0)
new_arg = a.mk_div(new_arg, a.mk_int(rational::power_of_two(lo)));
new_arg = a.mk_idiv(new_arg, a.mk_int(rational::power_of_two(lo)));
m_trail.push_back(new_arg);
break;
}
@ -386,12 +397,19 @@ namespace intblast {
default:
verbose_stream() << mk_pp(e, m) << "\n";
NOT_IMPLEMENTED_YET();
}
verbose_stream() << "insert " << mk_pp(e, m) << " -> " << mk_pp(m_trail.back(), m) << "\n";
}
translated.insert(e, m_trail.back());
}
TRACE("bv",
for (unsigned i = 0; i < es.size(); ++i)
tout << mk_pp(es.get(i), m) << " -> " << mk_pp(translated[es.get(i)], m) << "\n";
);
for (unsigned i = 0; i < es.size(); ++i)
es[i] = translated[es.get(i)];
}
rational solver::get_value(expr* e) const {
@ -414,4 +432,10 @@ namespace intblast {
return m_core;
}
std::ostream& solver::display(std::ostream& out) const {
if (m_solver)
m_solver->display(out);
return out;
}
}