Skip to content

Commit e0945f5

Browse files
fix #7554
mbp_qel uses two iterations of saturation. The first iteration uses only congruences, not the model. The second iteration uses the model. Terms are marked as "seen" during either iteration and will not be reprocessed if they are "seen". All select terms get marked as "seen" to avoid reproducing Ackerman axioms. But this conflicts with expanding select-store axioms during the phase of saturation where use_model is allowed.
1 parent 28f3f80 commit e0945f5

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

src/qe/mbp/mbp_arrays_tg.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -401,9 +401,13 @@ struct mbp_array_tg::impl {
401401
if (m_array_util.is_select(term) &&
402402
has_var(to_app(term)->get_arg(0))) {
403403
rdTerms.push_back(to_app(term));
404-
if (is_seen(term)) continue;
404+
if (is_seen(term))
405+
continue;
405406
add_rdVar(term);
406-
mark_seen(term);
407+
// select-store axioms are only introduced during m_use_mdl
408+
// so don't mark select-store terms if m_use_mdl is false
409+
if (m_use_mdl || !m_array_util.is_store(to_app(term)->get_arg(0)))
410+
mark_seen(term);
407411
}
408412
}
409413
if (!m_use_mdl)

0 commit comments

Comments
 (0)