diff --git a/src/sat/smt/q_ematch.cpp b/src/sat/smt/q_ematch.cpp index d2cc7dac8..ccf697773 100644 --- a/src/sat/smt/q_ematch.cpp +++ b/src/sat/smt/q_ematch.cpp @@ -52,9 +52,9 @@ namespace q { m_qs(s), m(ctx.get_manager()), m_eval(ctx), - m_infer_patterns(m, ctx.get_config()), + m_qstat_gen(m, ctx.get_region()), m_inst_queue(*this, ctx), - m_qstat_gen(m, ctx.get_region()) + m_infer_patterns(m, ctx.get_config()) { std::function _on_merge = [&](euf::enode* root, euf::enode* other) { @@ -229,10 +229,8 @@ namespace q { TRACE("q", tout << "on-binding " << mk_pp(q, m) << "\n";); unsigned idx = m_q2clauses[q]; clause& c = *m_clauses[idx]; - if (!propagate(_binding, max_generation, c)) { + if (!propagate(_binding, max_generation, c)) add_binding(c, pat, _binding, max_generation, min_gen, max_gen); - insert_clause_in_queue(idx); - } } bool ematch::propagate(euf::enode* const* binding, unsigned max_generation, clause& c) { @@ -314,7 +312,6 @@ namespace q { sat::literal ematch::instantiate(clause& c, euf::enode* const* binding, lit const& l) { expr_ref_vector _binding(m); - quantifier* q = c.q(); for (unsigned i = 0; i < c.num_decls(); ++i) _binding.push_back(binding[i]->get_expr()); var_subst subst(m); @@ -349,7 +346,6 @@ namespace q { } } - /** * basic clausifier, assumes q has been normalized. */ diff --git a/src/sat/smt/q_eval.cpp b/src/sat/smt/q_eval.cpp index d25e2cb92..d06d05480 100644 --- a/src/sat/smt/q_eval.cpp +++ b/src/sat/smt/q_eval.cpp @@ -14,7 +14,6 @@ Author: Nikolaj Bjorner (nbjorner) 2021-01-24 --*/ -#pragma once #include "sat/smt/q_eval.h" #include "sat/smt/euf_solver.h" diff --git a/src/sat/smt/q_queue.cpp b/src/sat/smt/q_queue.cpp index 8730a9b67..61a13ea98 100644 --- a/src/sat/smt/q_queue.cpp +++ b/src/sat/smt/q_queue.cpp @@ -86,11 +86,9 @@ namespace q { quantifier_stat * stat = f.c->m_stat; quantifier* q = f.q(); app* pat = f.b->m_pattern; - unsigned min_top_generation = f.b->m_min_top_generation; - unsigned max_top_generation = f.b->m_max_top_generation; m_vals[COST] = cost; - m_vals[MIN_TOP_GENERATION] = static_cast(min_top_generation); - m_vals[MAX_TOP_GENERATION] = static_cast(max_top_generation); + m_vals[MIN_TOP_GENERATION] = static_cast(f.b->m_min_top_generation); + m_vals[MAX_TOP_GENERATION] = static_cast(f.b->m_max_top_generation); m_vals[INSTANCES] = static_cast(stat->get_num_instances_curr_branch()); m_vals[SIZE] = static_cast(stat->get_size()); m_vals[DEPTH] = static_cast(stat->get_depth()); @@ -138,18 +136,17 @@ namespace q { fingerprint & f = *ent.m_qb; quantifier * q = f.q(); unsigned num_bindings = f.size(); - euf::enode * const * bindings = f.nodes(); - q::quantifier_stat * stat = f.c->m_stat; + quantifier_stat * stat = f.c->m_stat; ent.m_instantiated = true; unsigned gen = get_new_gen(f, ent.m_cost); - if (em.propagate(bindings, gen, *f.c)) + if (em.propagate(f.nodes(), gen, *f.c)) return; auto* ebindings = m_subst(q, num_bindings); for (unsigned i = 0; i < num_bindings; ++i) - ebindings[i] = bindings[i]->get_expr(); + ebindings[i] = f.nodes()[i]->get_expr(); expr_ref instance = m_subst(); ctx.get_rewriter()(instance); if (m.is_true(instance)) { @@ -176,7 +173,7 @@ namespace q { if (0 == since_last_check && ctx.resource_limits_exceeded()) break; - fingerprint& f = *curr.m_qb; + fingerprint& f = *curr.m_qb; if (curr.m_cost <= m_eager_cost_threshold) instantiate(curr); diff --git a/src/test/simple_parser.cpp b/src/test/simple_parser.cpp index 1ba0d4b62..bdfb86fb8 100644 --- a/src/test/simple_parser.cpp +++ b/src/test/simple_parser.cpp @@ -16,13 +16,14 @@ Author: Revision History: --*/ -#include "parsers/util/cost_parser.h" -#include "smt/cost_evaluator.h" +#include "util/warning.h" #include "ast/arith_decl_plugin.h" #include "ast/ast_pp.h" #include "ast/well_sorted.h" -#include "util/warning.h" +#include "ast/cost_evaluator.h" #include "ast/reg_decl_plugins.h" +#include "parsers/util/cost_parser.h" + void tst_simple_parser() { ast_manager m;