3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-24 01:25:31 +00:00

re-enabling model evaluation of as-array after tuning normalization

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2019-02-10 18:11:01 -08:00
parent 81d322b79f
commit 6cfe66c3c2
6 changed files with 56 additions and 30 deletions

View file

@ -56,6 +56,8 @@ struct evaluator_cfg : public default_rewriter_cfg {
bool m_cache;
bool m_array_equalities;
bool m_array_as_stores;
obj_map<func_decl, expr*> m_def_cache;
expr_ref_vector m_pinned;
evaluator_cfg(ast_manager & m, model_core & md, params_ref const & p):
m(m),
@ -72,7 +74,8 @@ struct evaluator_cfg : public default_rewriter_cfg {
m_pb_rw(m),
m_f_rw(m),
m_seq_rw(m),
m_ar(m) {
m_ar(m),
m_pinned(m) {
bool flat = true;
m_b_rw.set_flat(flat);
m_a_rw.set_flat(flat);
@ -202,23 +205,29 @@ struct evaluator_cfg : public default_rewriter_cfg {
return BR_REWRITE1;
}
}
#if 0
#if 1
if (st == BR_FAILED && num == 0 && m_ar.is_as_array(f) && m_model_completion) {
func_decl* g = nullptr;
VERIFY(m_ar.is_as_array(f, g));
expr* def = nullptr;
quantifier* q = nullptr;
proof* def_pr = nullptr;
if (m_def_cache.find(g, def)) {
result = def;
return BR_DONE;
}
if (get_macro(g, def, q, def_pr)) {
sort_ref_vector vars(m);
svector<symbol> var_names;
for (unsigned i = 0; i < g->get_arity(); ++i) {
var_names.push_back(symbol(i));
vars.push_back(g->get_domain(g->get_arity() - i - 1));
vars.push_back(g->get_domain(i));
}
result = m.mk_lambda(vars.size(), vars.c_ptr(), var_names.c_ptr(), def);
model_evaluator ev(m_model, m_params);
result = ev(result);
m_pinned.push_back(result);
m_def_cache.insert(g, result);
return BR_DONE;
}
}