3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-05-04 06:15:46 +00:00

two bugs: check for always false, adjust start of list was incorrect during re-insert

This commit is contained in:
Nikolaj Bjorner 2022-02-02 07:37:35 -08:00
parent 1a36b74143
commit 32edbfa28e
4 changed files with 13 additions and 13 deletions

View file

@ -46,9 +46,11 @@ namespace polysat {
void viable::pop_viable() {
auto& [v, k, e] = m_trail.back();
SASSERT(well_formed(m_units[v]));
switch (k) {
case entry_kind::unit_e:
e->remove_from(m_units[v], e);
SASSERT(well_formed(m_units[v]));
break;
case entry_kind::equal_e:
e->remove_from(m_equal_lin[v], e);
@ -67,13 +69,15 @@ namespace polysat {
SASSERT(e->prev() != e || e->next() == e);
SASSERT(k == entry_kind::unit_e);
(void)k;
SASSERT(well_formed(m_units[v]));
if (e->prev() != e) {
e->prev()->insert_after(e);
if (e->interval.lo_val() < e->next()->interval.lo_val())
if (e->interval.lo_val() < m_units[v]->interval.lo_val())
m_units[v] = e;
}
else
m_units[v] = e;
m_units[v] = e;
SASSERT(well_formed(m_units[v]));
m_trail.pop_back();
}
@ -102,6 +106,7 @@ namespace polysat {
}
void viable::insert(entry* e, pvar v, ptr_vector<entry>& entries, entry_kind k) {
SASSERT(well_formed(m_units[v]));
m_trail.push_back({ v, k, e });
s.m_trail.push_back(trail_instr_t::viable_add_i);
e->init(e);
@ -109,6 +114,7 @@ namespace polysat {
entries[v] = e;
else
e->insert_after(entries[v]);
SASSERT(well_formed(m_units[v]));
}
bool viable::intersect(pvar v, entry* ne) {
@ -441,6 +447,7 @@ namespace polysat {
return refine_viable(v, val);
}
rational viable::min_viable(pvar v) {
refined:
rational lo(0);