mirror of
https://github.com/Z3Prover/z3
synced 2025-04-29 03:45:51 +00:00
bug fixes
values cannot change on basic variables from inequalities arithmetic modulo can produce 0 coefficients
This commit is contained in:
parent
d1118cb178
commit
05d564e828
3 changed files with 33 additions and 14 deletions
|
@ -844,9 +844,8 @@ namespace polysat {
|
|||
unsigned rz = r_z.id();
|
||||
if (rz == rx)
|
||||
continue;
|
||||
TRACE("fixplex,", display_row(tout << "eliminate ", r_z, false) << "\n";);
|
||||
VERIFY(eliminate_var(r_x, col, tz_b, old_value_y));
|
||||
TRACE("fixplex,", display_row(tout << "eliminated ", r_z, false) << "\n";);
|
||||
TRACE("fixplex", display_row(tout << "eliminated ", r_z, false) << "\n";);
|
||||
add_patch(row2base(r_z));
|
||||
}
|
||||
SASSERT(well_formed());
|
||||
|
@ -1345,7 +1344,7 @@ namespace polysat {
|
|||
if (m_vars[v].max() >= m_vars[w].max() && !new_bound(i, v, 0, m_vars[w].max(), vlo, vhi, wlo, whi))
|
||||
return false;
|
||||
|
||||
if (value(v) >= value(w) && value(v) + 1 != 0 && m_vars[w].contains(value(v) + 1))
|
||||
if (!is_base(w) && value(v) >= value(w) && value(v) + 1 != 0 && m_vars[w].contains(value(v) + 1))
|
||||
update_value(w, value(v) - value(w) + 1);
|
||||
|
||||
return true;
|
||||
|
@ -1364,7 +1363,7 @@ namespace polysat {
|
|||
if (m_vars[v].max() > m_vars[w].max() && !new_bound(i, v, 0, m_vars[w].max() + 1, vlo, vhi, wlo, whi))
|
||||
return false;
|
||||
|
||||
if (value(v) > value(w) && m_vars[w].contains(value(v)))
|
||||
if (value(v) > value(w) && !is_base(w) && m_vars[w].contains(value(v)))
|
||||
update_value(w, value(v) - value(w));
|
||||
|
||||
return true;
|
||||
|
@ -1475,6 +1474,7 @@ namespace polysat {
|
|||
if (s == null_var)
|
||||
continue;
|
||||
SASSERT(i == base2row(s).id());
|
||||
|
||||
VERIFY(well_formed_row(r));
|
||||
}
|
||||
for (unsigned i = 0; i < m_vars.size(); ++i) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue