mirror of
https://github.com/Z3Prover/z3
synced 2025-04-13 20:38:43 +00:00
parent
2c97799564
commit
60cf482cea
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -570,7 +570,7 @@ namespace bv {
|
|||
}
|
||||
|
||||
void solver::internalize_ac_binary(app* e, std::function<void(unsigned, expr* const*, expr* const*, expr_ref_vector&)>& 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);
|
||||
|
|
|
@ -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<euf::enode>& 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);
|
||||
|
|
|
@ -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()));
|
||||
|
|
Loading…
Reference in a new issue