diff --git a/src/smt/smt_model_checker.cpp b/src/smt/smt_model_checker.cpp index 44039ba36..62dde91e3 100644 --- a/src/smt/smt_model_checker.cpp +++ b/src/smt/smt_model_checker.cpp @@ -338,6 +338,10 @@ namespace smt { flet l(m_aux_context->get_fparams().m_array_fake_support, true); lbool r = m_aux_context->check(); + ptr_vector fmls; + m_aux_context->get_assertions(fmls); + for (auto * f : fmls) std::cout << mk_pp(f, m) << "\n"; + TRACE("model_checker", tout << "[complete] model-checker result: " << to_sat_str(r) << "\n";); if (r != l_true) { return r == l_false; // quantifier is satisfied by m_curr_model diff --git a/src/smt/theory_lra.cpp b/src/smt/theory_lra.cpp index e5451b661..b69c628c4 100644 --- a/src/smt/theory_lra.cpp +++ b/src/smt/theory_lra.cpp @@ -1395,10 +1395,6 @@ public: #endif } else { - literal div_ge_0 = mk_literal(a.mk_ge(div, zero)); - literal div_le_0 = mk_literal(a.mk_le(div, zero)); - literal p_ge_0 = mk_literal(a.mk_ge(p, zero)); - literal p_le_0 = mk_literal(a.mk_le(p, zero)); // q >= 0 or p = (p mod q) + q * (p div q) // q <= 0 or p = (p mod q) + q * (p div q) @@ -1417,6 +1413,11 @@ public: mk_axiom(q_ge_0, ~mk_literal(a.mk_ge(a.mk_add(mod, q), zero))); #if 0 // seem expensive + literal div_ge_0 = mk_literal(a.mk_ge(div, zero)); + literal div_le_0 = mk_literal(a.mk_le(div, zero)); + literal p_ge_0 = mk_literal(a.mk_ge(p, zero)); + literal p_le_0 = mk_literal(a.mk_le(p, zero)); + mk_axiom(q_le_0, ~p_ge_0, div_ge_0); mk_axiom(q_le_0, ~p_le_0, div_le_0); mk_axiom(q_ge_0, ~p_ge_0, div_le_0);