3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-08-03 09:50:23 +00:00

Fix bugs on candidate list pivot rule

This commit is contained in:
Anh-Dung Phan 2013-11-11 18:23:21 -08:00
parent 0d6ffe6b31
commit 66eda866ca
2 changed files with 57 additions and 43 deletions

View file

@ -333,23 +333,29 @@ namespace smt {
SASSERT(m_pred[q] == v);
SASSERT(is_preorder_traversal(v, get_final(v)));
node prev = find_rev_thread(v);
node final_q = get_final(q);
node final_v = get_final(v);
node next = m_thread[final_v];
node f_q = get_final(q);
node f_v = get_final(v);
node next = m_thread[f_v];
node alpha = find_rev_thread(q);
if (final_q == final_v) {
m_thread[final_q] = v;
if (f_q == f_v) {
SASSERT(f_q != v && alpha != next);
m_thread[f_q] = v;
m_thread[alpha] = next;
f_q = alpha;
}
else {
node beta = m_thread[final_q];
m_thread[final_q] = v;
else {
node beta = m_thread[f_q];
SASSERT(f_q != v && alpha != beta);
m_thread[f_q] = v;
m_thread[alpha] = beta;
f_q = f_v;
}
SASSERT(prev != q);
m_thread[prev] = q;
m_pred[v] = q;
SASSERT(is_preorder_traversal(q, get_final(q)));
// Notes: f_q has to be used since m_depth hasn't been updated yet.
SASSERT(is_preorder_traversal(q, f_q));
}
/**