diff --git a/src/ast/ast.cpp b/src/ast/ast.cpp index 067c4d127..1f2f40941 100644 --- a/src/ast/ast.cpp +++ b/src/ast/ast.cpp @@ -1388,6 +1388,7 @@ ast_manager::ast_manager(ast_manager const & src, bool disable_proofs): m_format_manager = alloc(ast_manager, PGM_DISABLED, m_trace_stream, true); init(); copy_families_plugins(src); + update_fresh_id(src); } void ast_manager::update_fresh_id(ast_manager const& m) { diff --git a/src/sat/sat_model_converter.h b/src/sat/sat_model_converter.h index 65e132729..2ca340e5d 100644 --- a/src/sat/sat_model_converter.h +++ b/src/sat/sat_model_converter.h @@ -119,6 +119,7 @@ namespace sat { void add_ate(clause const& c); bool empty() const { return m_entries.empty(); } + unsigned size() const { return m_entries.size(); } void reset(); bool check_invariant(unsigned num_vars) const; diff --git a/src/sat/sat_solver.cpp b/src/sat/sat_solver.cpp index ee3bc7880..d48a6410c 100644 --- a/src/sat/sat_solver.cpp +++ b/src/sat/sat_solver.cpp @@ -1785,7 +1785,7 @@ namespace sat { TRACE("sat", for (bool_var v = 0; v < num; v++) tout << v << ": " << m_model[v] << "\n";); if (m_clone) { - IF_VERBOSE(SAT_VB_LVL, verbose_stream() << "\"checking model (on original set of clauses)\"\n";); + IF_VERBOSE(1, verbose_stream() << "\"checking model (on original set of clauses)\"\n";); if (!m_clone->check_model(m_model)) { //IF_VERBOSE(0, display(verbose_stream())); //IF_VERBOSE(0, display_watches(verbose_stream())); diff --git a/src/sat/sat_solver/inc_sat_solver.cpp b/src/sat/sat_solver/inc_sat_solver.cpp index a4131ccaf..87bcf4056 100644 --- a/src/sat/sat_solver/inc_sat_solver.cpp +++ b/src/sat/sat_solver/inc_sat_solver.cpp @@ -813,12 +813,9 @@ private: } sat::model const & ll_m = m_solver.get_model(); mdl = alloc(model, m); - for (auto const& kv : m_map) { - expr * n = kv.m_key; - if (is_app(n) && to_app(n)->get_num_args() > 0) { - continue; - } - sat::bool_var v = kv.m_value; + for (sat::bool_var v = 0; v < ll_m.size(); ++v) { + expr* n = m_sat_mc->var2expr(v); + if (!n || (is_app(n) && to_app(n)->get_num_args() > 0)) continue; switch (sat::value_at(v, ll_m)) { case l_true: mdl->register_decl(to_app(n)->get_decl(), m.mk_true()); @@ -830,23 +827,23 @@ private: break; } } - //IF_VERBOSE(0, model_v2_pp(verbose_stream(), *mdl, true);); if (m_sat_mc) { - //IF_VERBOSE(0, m_sat_mc->display(verbose_stream() << "satmc\n");); + // IF_VERBOSE(0, m_sat_mc->display(verbose_stream() << "satmc\n");); (*m_sat_mc)(mdl); } if (m_mcs.back()) { //IF_VERBOSE(0, m_mc0->display(verbose_stream() << "mc0\n");); (*m_mcs.back())(mdl); } - TRACE("sat", model_smt2_pp(tout, m, *mdl, 0);); - + TRACE("sat", model_smt2_pp(tout, m, *mdl, 0);); - if (!gparams::get_ref().get_bool("model_validate", false)) return; + if (!gparams::get_ref().get_bool("model_validate", false)) { + return; + } IF_VERBOSE(1, verbose_stream() << "Verifying solution\n";); model_evaluator eval(*mdl); - eval.set_model_completion(false); + // eval.set_model_completion(false); bool all_true = true; //unsigned i = 0; for (expr * f : m_fmls) { @@ -856,14 +853,15 @@ private: tout << "Evaluation failed: " << mk_pp(f, m) << " to " << mk_pp(f, m) << "\n"; model_smt2_pp(tout, m, *(mdl.get()), 0);); if (!m.is_true(tmp)) { - IF_VERBOSE(0, verbose_stream() << "failed to verify: " << mk_pp(f, m) << "\n";); + IF_VERBOSE(0, verbose_stream() << "failed to verify: " << mk_pp(f, m) << "\n"); + IF_VERBOSE(0, verbose_stream() << "evaluated to " << tmp << "\n"); all_true = false; } //IF_VERBOSE(0, verbose_stream() << (i++) << ": " << mk_pp(f, m) << "\n"); } if (!all_true) { IF_VERBOSE(0, verbose_stream() << m_params << "\n"); - IF_VERBOSE(0, m_sat_mc->display(verbose_stream() << "sat mc\n")); + // IF_VERBOSE(0, m_sat_mc->display(verbose_stream() << "sat mc\n")); IF_VERBOSE(0, if (m_mcs.back()) m_mcs.back()->display(verbose_stream() << "mc0\n")); //IF_VERBOSE(0, m_solver.display(verbose_stream())); IF_VERBOSE(0, for (auto const& kv : m_map) verbose_stream() << mk_pp(kv.m_key, m) << " |-> " << kv.m_value << "\n"); diff --git a/src/solver/solver.cpp b/src/solver/solver.cpp index fc6ec6f7a..f8c2f8072 100644 --- a/src/solver/solver.cpp +++ b/src/solver/solver.cpp @@ -208,7 +208,6 @@ void solver::assert_expr(expr* f, expr* t) { expr_ref fml(f, m); expr_ref a(t, m); if (m_enforce_model_conversion) { - IF_VERBOSE(0, verbose_stream() << "enforce model conversion\n";); model_converter_ref mc = get_model_converter(); if (mc) { (*mc)(fml);