From 9729db16a23beffc1eede4217067f8b395e77fa7 Mon Sep 17 00:00:00 2001 From: Nikolaj Bjorner Date: Thu, 13 Aug 2020 17:39:15 -0700 Subject: [PATCH] always reduce macro expansions in model evaluation #4588 Signed-off-by: Nikolaj Bjorner --- src/ast/rewriter/rewriter.h | 1 + src/ast/rewriter/rewriter_def.h | 2 +- src/model/model_evaluator.cpp | 2 ++ 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/ast/rewriter/rewriter.h b/src/ast/rewriter/rewriter.h index fc3f50faf..22ae69e85 100644 --- a/src/ast/rewriter/rewriter.h +++ b/src/ast/rewriter/rewriter.h @@ -390,6 +390,7 @@ struct default_rewriter_cfg { } bool reduce_var(var * t, expr_ref & result, proof_ref & result_pr) { return false; } bool get_macro(func_decl * d, expr * & def, quantifier * & q, proof * & def_pr) { return false; } + bool reduce_macro() { return false; } bool get_subst(expr * s, expr * & t, proof * & t_pr) { return false; } void reset() {} void cleanup() {} diff --git a/src/ast/rewriter/rewriter_def.h b/src/ast/rewriter/rewriter_def.h index 4055161fa..8e3845a3e 100644 --- a/src/ast/rewriter/rewriter_def.h +++ b/src/ast/rewriter/rewriter_def.h @@ -394,7 +394,7 @@ void rewriter_tpl::process_app(app * t, frame & fr) { SASSERT(!f->is_associative() || !flat_assoc(f)); SASSERT(new_num_args == t->get_num_args()); SASSERT(m().get_sort(def) == m().get_sort(t)); - if (is_ground(def)) { + if (is_ground(def) && !m_cfg.reduce_macro()) { m_r = def; if (ProofGen) { m_pr = m().mk_transitivity(m_pr, def_pr); diff --git a/src/model/model_evaluator.cpp b/src/model/model_evaluator.cpp index 645ae0a15..02604ca9c 100644 --- a/src/model/model_evaluator.cpp +++ b/src/model/model_evaluator.cpp @@ -296,6 +296,8 @@ struct evaluator_cfg : public default_rewriter_cfg { } } + bool reduce_macro() { return true; } + bool get_macro(func_decl * f, expr * & def, quantifier * & , proof * &) { func_interp * fi = m_model.get_func_interp(f); def = nullptr;