mirror of
https://github.com/Z3Prover/z3
synced 2026-05-22 18:09:37 +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:
parent
6cbc504f0b
commit
c40f8a200e
1 changed files with 8 additions and 0 deletions
|
|
@ -4175,6 +4175,14 @@ namespace smt {
|
||||||
if (level >= max_level || result == FC_DONE || can_propagate())
|
if (level >= max_level || result == FC_DONE || can_propagate())
|
||||||
break;
|
break;
|
||||||
++level;
|
++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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue