diff --git a/src/smt/asserted_formulas.cpp b/src/smt/asserted_formulas.cpp index 9753adc5b..0afbeb434 100644 --- a/src/smt/asserted_formulas.cpp +++ b/src/smt/asserted_formulas.cpp @@ -16,31 +16,31 @@ Author: Revision History: --*/ -#include "smt/asserted_formulas.h" +#include "util/warning.h" #include "ast/ast_ll_pp.h" #include "ast/ast_pp.h" +#include "ast/for_each_expr.h" +#include "ast/well_sorted.h" #include "ast/simplifier/arith_simplifier_plugin.h" #include "ast/simplifier/array_simplifier_plugin.h" #include "ast/simplifier/datatype_simplifier_plugin.h" #include "ast/simplifier/fpa_simplifier_plugin.h" #include "ast/simplifier/seq_simplifier_plugin.h" #include "ast/simplifier/bv_simplifier_plugin.h" -#include "ast/for_each_expr.h" -#include "ast/well_sorted.h" -#include "ast/normal_forms/pull_quant.h" #include "ast/simplifier/pull_ite_tree.h" #include "ast/simplifier/push_app_ite.h" -#include "smt/elim_term_ite.h" -#include "ast/pattern/pattern_inference.h" -#include "ast/normal_forms/nnf.h" #include "ast/simplifier/bv_elim.h" #include "ast/simplifier/inj_axiom.h" -#include "ast/rewriter/der.h" #include "ast/simplifier/elim_bounds.h" -#include "util/warning.h" #include "ast/simplifier/bit2int.h" +#include "ast/normal_forms/pull_quant.h" +#include "ast/normal_forms/nnf.h" +#include "ast/pattern/pattern_inference.h" +#include "ast/rewriter/der.h" #include "ast/rewriter/distribute_forall.h" #include "ast/macros/quasi_macros.h" +#include "smt/asserted_formulas.h" +#include "smt/elim_term_ite.h" asserted_formulas::asserted_formulas(ast_manager & m, smt_params & p): m(m), @@ -138,6 +138,8 @@ void asserted_formulas::set_eliminate_and(bool flag) { m_bsimp->set_eliminate_and(flag); } +#include "th_rewriter.h" + void asserted_formulas::assert_expr(expr * e, proof * _in_pr) { if (inconsistent()) return; @@ -161,6 +163,8 @@ void asserted_formulas::assert_expr(expr * e, proof * _in_pr) { } set_eliminate_and(false); // do not eliminate and before nnf. m_simplifier(r1, r2, pr2); + th_rewriter rw(m); + rw(r2); TRACE("assert_expr_bug", tout << "after...\n" << mk_pp(r1, m) << "\n";); if (m.proofs_enabled()) { if (e == r2) diff --git a/src/smt/smt_setup.cpp b/src/smt/smt_setup.cpp index 392802d5d..da9285b94 100644 --- a/src/smt/smt_setup.cpp +++ b/src/smt/smt_setup.cpp @@ -53,7 +53,9 @@ namespace smt { // warning_msg("ignoring MODEL_COMPACT=true because it cannot be used with MBQI=true"); // m_params.m_model_compact = false; // } - TRACE("setup", tout << "configuring logical context, logic: " << m_logic << "\n";); + TRACE("setup", tout << "configuring logical context, logic: " << m_logic << " " << cm << "\n";); + + m_params.m_relevancy_lvl = 0; m_already_configured = true; switch (cm) { @@ -202,6 +204,9 @@ namespace smt { void setup::setup_QF_UF() { m_params.m_relevancy_lvl = 0; m_params.m_nnf_cnf = false; + m_params.m_restart_strategy = RS_LUBY; + m_params.m_phase_selection = PS_CACHING_CONSERVATIVE2; + m_params.m_random_initial_activity = IA_RANDOM; } void setup::setup_QF_BVRE() { @@ -210,13 +215,9 @@ namespace smt { m_context.register_plugin(alloc(theory_seq, m_manager)); } - void setup::setup_QF_UF(static_features const & st) { + void setup::setup_QF_UF(static_features const & st) { check_no_arithmetic(st, "QF_UF"); - m_params.m_relevancy_lvl = 0; - m_params.m_nnf_cnf = false; - m_params.m_restart_strategy = RS_LUBY; - m_params.m_phase_selection = PS_CACHING_CONSERVATIVE2; - m_params.m_random_initial_activity = IA_RANDOM; + setup_QF_UF(); TRACE("setup", tout << "st.m_num_theories: " << st.m_num_theories << "\n"; tout << "st.m_num_uninterpreted_functions: " << st.m_num_uninterpreted_functions << "\n";); @@ -548,6 +549,7 @@ namespace smt { } void setup::setup_QF_BV() { + TRACE("setup", tout << "qf-bv\n";); m_params.m_relevancy_lvl = 0; m_params.m_arith_reflect = false; m_params.m_bv_cc = false; @@ -877,7 +879,7 @@ namespace smt { void setup::setup_unknown() { static_features st(m_manager); st.collect(m_context.get_num_asserted_formulas(), m_context.get_asserted_formulas()); - + TRACE("setup", tout << "setup_unknown\n";); setup_arith(); setup_arrays(); setup_bv(); @@ -916,7 +918,7 @@ namespace smt { tout << "has fpa: " << st.m_has_fpa << "\n"; tout << "has arrays: " << st.m_has_arrays << "\n";); - if (st.num_non_uf_theories() == 0) { + if (st.num_non_uf_theories() == 0) { setup_QF_UF(st); return; }