From 60cf482cea94c8fd2475733ba26e27e1855edc9a Mon Sep 17 00:00:00 2001 From: Nikolaj Bjorner Date: Mon, 3 May 2021 11:44:44 -0700 Subject: [PATCH] fix #5239 Signed-off-by: Nikolaj Bjorner --- src/math/lp/int_cube.cpp | 2 +- src/math/lp/lar_solver.cpp | 11 +++++++++-- src/sat/smt/bv_internalize.cpp | 2 +- src/sat/smt/dt_solver.cpp | 8 ++++++-- src/sat/smt/euf_model.cpp | 1 + 5 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/math/lp/int_cube.cpp b/src/math/lp/int_cube.cpp index cdf190865..da724a543 100644 --- a/src/math/lp/int_cube.cpp +++ b/src/math/lp/int_cube.cpp @@ -61,7 +61,7 @@ namespace lp { return true; const lar_term* t = lra.terms()[i]; impq delta = get_cube_delta_for_term(*t); - TRACE("cube", lra.print_term_as_indices(*t, tout); tout << ", delta = " << delta;); + TRACE("cube", lra.print_term_as_indices(*t, tout); tout << ", delta = " << delta << "\n";); if (is_zero(delta)) return true; return lra.tighten_term_bounds_by_delta(tv::term(i), delta); diff --git a/src/math/lp/lar_solver.cpp b/src/math/lp/lar_solver.cpp index 61c0b3e5d..bdd92afe7 100644 --- a/src/math/lp/lar_solver.cpp +++ b/src/math/lp/lar_solver.cpp @@ -2331,15 +2331,19 @@ namespace lp { v = flv; } m_incorrect_columns.insert(j); - TRACE("cube", tout << "new val = " << v << "\n";); + TRACE("cube", tout << "new val = " << v << " column: " << j << "\n";); } - if (m_incorrect_columns.size()) { + if (!m_incorrect_columns.empty()) { fix_terms_with_rounded_columns(); m_incorrect_columns.clear(); } } void lar_solver::fix_terms_with_rounded_columns() { + TRACE("cube", + for (unsigned i = 0; i < m_terms.size(); i++) + tout << i << " " << term_is_used_as_row(i) << "\n";); + for (unsigned i = 0; i < m_terms.size(); i++) { if (!term_is_used_as_row(i)) continue; @@ -2357,6 +2361,9 @@ namespace lp { m_mpq_lar_core_solver.m_r_solver.update_x(j, v); } } + for (unsigned i = 0; i < A_r().row_count(); i++) + row_is_correct(i); + SASSERT(ax_is_correct()); } // return true if all y coords are zeroes diff --git a/src/sat/smt/bv_internalize.cpp b/src/sat/smt/bv_internalize.cpp index 1beb35a39..88f0f79c1 100644 --- a/src/sat/smt/bv_internalize.cpp +++ b/src/sat/smt/bv_internalize.cpp @@ -570,7 +570,7 @@ namespace bv { } void solver::internalize_ac_binary(app* e, std::function& fn) { - SASSERT(e->get_num_args() >= 2); + SASSERT(e->get_num_args() >= 1); expr_ref_vector bits(m), new_bits(m), arg_bits(m); unsigned i = e->get_num_args() - 1; get_arg_bits(e, i, bits); diff --git a/src/sat/smt/dt_solver.cpp b/src/sat/smt/dt_solver.cpp index 67a57a068..adc99ce9e 100644 --- a/src/sat/smt/dt_solver.cpp +++ b/src/sat/smt/dt_solver.cpp @@ -693,6 +693,10 @@ namespace dt { void solver::add_value(euf::enode* n, model& mdl, expr_ref_vector& values) { theory_var v = n->get_th_var(get_id()); + if (v == euf::null_theory_var) { + values.set(n->get_root_id(), mdl.get_fresh_value(n->get_sort())); + return; + } v = m_find.find(v); SASSERT(v != euf::null_theory_var); enode* con = m_var_data[v]->m_constructor; @@ -705,10 +709,10 @@ namespace dt { bool solver::add_dep(euf::enode* n, top_sort& dep) { if (!is_datatype(n->get_expr())) - return true; + return false; theory_var v = n->get_th_var(get_id()); if (v == euf::null_theory_var) - return true; + return false; euf::enode* con = m_var_data[m_find.find(v)]->m_constructor; if (con->num_args() == 0) dep.insert(n, nullptr); diff --git a/src/sat/smt/euf_model.cpp b/src/sat/smt/euf_model.cpp index 2e9d155a9..c8780252a 100644 --- a/src/sat/smt/euf_model.cpp +++ b/src/sat/smt/euf_model.cpp @@ -208,6 +208,7 @@ namespace euf { fi = alloc(func_interp, m, arity); mdl->register_decl(f, fi); } + TRACE("euf", tout << f->get_name() << "\n";); args.reset(); for (enode* arg : enode_args(n)) args.push_back(m_values.get(arg->get_root_id()));