3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-24 09:35:32 +00:00

updated handling of value initialization for bit-vectors

This commit is contained in:
Nikolaj Bjorner 2024-09-22 21:30:11 +03:00
parent ba5cec7704
commit a9f8ec1bcb
10 changed files with 112 additions and 36 deletions

View file

@ -222,6 +222,34 @@ struct bit_blaster_model_converter : public model_converter {
// no-op
}
void convert_initialize_value(vector<std::pair<expr_ref, expr_ref>>& var2value) {
if (m_vars.empty() || var2value.empty())
return;
rational r;
bv_util util(m());
for (unsigned j = 0; j < var2value.size(); ++j) {
auto& [var, value] = var2value[j];
if (!is_uninterp_const(var))
continue;
if (!util.is_numeral(value, r))
continue;
unsigned sz = m_vars.size();
for (unsigned i = 0; i < sz; i++) {
if (m_vars.get(i) != to_app(var)->get_decl())
continue;
unsigned k = 0;
expr_ref bit_k(m());
for (auto arg : *to_app(m_bits.get(i))) {
bit_k = m().mk_bool_val(r.get_bit(k));
var2value.push_back({ expr_ref(arg, m()), bit_k });
++k;
}
var2value[i] = var2value.back();
var2value.pop_back();
}
}
}
protected:
bit_blaster_model_converter(ast_manager & m):m_vars(m), m_bits(m), m_newbits(m) { }
public: