3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-05-06 02:15:16 +00:00

smt: reset give-up state when escalating final_check level (#9408)

theory_lra reports num_final_check_levels()==2: full nlsat (m_nra.check)
only runs at level >= 2. When a level-1 round-trip ends with FC_GIVEUP
and the loop escalates to level 2, the previously accumulated 'result',
'f', and 'm_incomplete_theories' were retained, so a subsequent
successful (FC_DONE) round at level 2 was still reported as
(incomplete (theory arithmetic)). Reset that state on each level
escalation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Lev Nachmanson 2026-04-27 18:33:28 -07:00 committed by GitHub
parent 6cbc504f0b
commit c40f8a200e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -4175,6 +4175,14 @@ namespace smt {
if (level >= max_level || result == FC_DONE || can_propagate())
break;
++level;
// Re-evaluate at the higher level: clear the give-up state
// accumulated at lower levels so a level that succeeds is
// not masked by a previous FC_GIVEUP. See e.g. theory_lra
// whose level 2 invokes the full nlsat (m_nra.check) that
// is skipped at level 1.
result = FC_DONE;
f = OK;
m_incomplete_theories.reset();
}
}