From 32711790e87cba5e97d862e7d2fe9564910525af Mon Sep 17 00:00:00 2001 From: Nikolaj Bjorner Date: Wed, 25 Oct 2017 13:36:48 -0700 Subject: [PATCH] bug fixes reported by Miguel Signed-off-by: Nikolaj Bjorner --- src/sat/ba_solver.cpp | 2 +- src/sat/sat_config.cpp | 6 ++++++ src/sat/sat_config.h | 4 ++++ src/sat/sat_solver/inc_sat_solver.cpp | 1 - src/sat/tactic/goal2sat.cpp | 4 ++-- src/solver/tactic2solver.cpp | 4 ++++ 6 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/sat/ba_solver.cpp b/src/sat/ba_solver.cpp index a8a09d3ff..f963ce620 100644 --- a/src/sat/ba_solver.cpp +++ b/src/sat/ba_solver.cpp @@ -2396,7 +2396,7 @@ namespace sat { init_use_lists(); remove_unused_defs(); set_non_external(); - elim_pure(); + if (get_config().m_elim_vars) elim_pure(); for (unsigned sz = m_constraints.size(), i = 0; i < sz; ++i) subsumption(*m_constraints[i]); for (unsigned sz = m_learned.size(), i = 0; i < sz; ++i) subsumption(*m_learned[i]); cleanup_clauses(); diff --git a/src/sat/sat_config.cpp b/src/sat/sat_config.cpp index c77774283..08f1b86b2 100644 --- a/src/sat/sat_config.cpp +++ b/src/sat/sat_config.cpp @@ -19,6 +19,8 @@ Revision History: #include "sat/sat_config.h" #include "sat/sat_types.h" #include "sat/sat_params.hpp" +#include "sat/sat_simplifier_params.hpp" + namespace sat { @@ -39,6 +41,7 @@ namespace sat { m_local_search = 0; m_lookahead_search = false; m_lookahead_simplify = false; + m_elim_vars = false; updt_params(p); } @@ -188,6 +191,9 @@ namespace sat { } m_dimacs_display = p.dimacs_display(); m_dimacs_inprocess_display = p.dimacs_inprocess_display(); + + sat_simplifier_params sp(_p); + m_elim_vars = sp.elim_vars(); } void config::collect_param_descrs(param_descrs & r) { diff --git a/src/sat/sat_config.h b/src/sat/sat_config.h index 214a93f5d..a6db0cddc 100644 --- a/src/sat/sat_config.h +++ b/src/sat/sat_config.h @@ -133,6 +133,10 @@ namespace sat { double m_step_size_min; double m_reward_multiplier; double m_reward_offset; + + // simplifier configurations used outside of sat_simplifier + bool m_elim_vars; + config(params_ref const & p); void updt_params(params_ref const & p); static void collect_param_descrs(param_descrs & d); diff --git a/src/sat/sat_solver/inc_sat_solver.cpp b/src/sat/sat_solver/inc_sat_solver.cpp index 144b6b86c..742f9e103 100644 --- a/src/sat/sat_solver/inc_sat_solver.cpp +++ b/src/sat/sat_solver/inc_sat_solver.cpp @@ -510,7 +510,6 @@ public: } m_internalized_fmls.reset(); g.get_formulas(m_internalized_fmls); - // g.display(std::cout); m_internalized_converted = true; // if (mc) mc->display(std::cout << "mc"); // if (m_mc) m_mc->display(std::cout << "m_mc\n"); diff --git a/src/sat/tactic/goal2sat.cpp b/src/sat/tactic/goal2sat.cpp index d7b0e0892..fe8135368 100644 --- a/src/sat/tactic/goal2sat.cpp +++ b/src/sat/tactic/goal2sat.cpp @@ -1063,7 +1063,7 @@ struct sat2goal::imp { for (sat::literal l : c) { lits.push_back(lit2expr(l)); } - expr_ref fml(pb.mk_at_most_k(c.size(), lits.c_ptr(), c.k()), m); + expr_ref fml(pb.mk_at_least_k(c.size(), lits.c_ptr(), c.k()), m); if (c.lit() != sat::null_literal) { fml = m.mk_eq(lit2expr(c.lit()), fml); @@ -1110,6 +1110,7 @@ struct sat2goal::imp { r.assert_expr(m.mk_false()); return; } + IF_VERBOSE(1, verbose_stream() << "solver2goal " << s.num_vars() << " " << s.clauses().size() << "\n";); init_lit2expr(s, map, mc, r.models_enabled()); // collect units unsigned num_vars = s.num_vars(); @@ -1135,7 +1136,6 @@ struct sat2goal::imp { } // collect clauses assert_clauses(s, s.clauses(), r, true); - assert_clauses(s, s.learned(), r, false); sat::ba_solver* ext = get_ba_solver(s); if (ext) { diff --git a/src/solver/tactic2solver.cpp b/src/solver/tactic2solver.cpp index b165304bf..7d9388f50 100644 --- a/src/solver/tactic2solver.cpp +++ b/src/solver/tactic2solver.cpp @@ -173,6 +173,10 @@ lbool tactic2solver::check_sat_core(unsigned num_assumptions, expr * const * ass m_result->set_status(l_undef); if (reason_unknown != "") m_result->m_unknown = reason_unknown; + if (num_assumptions == 0) { + m_assertions.reset(); + g->get_formulas(m_assertions); + } break; } }