mirror of
https://github.com/Z3Prover/z3
synced 2026-02-19 23:14:40 +00:00
remove set cardinality operators from array theory. Make final-check use priority levels
Issue #7502 shows that running nlsat eagerly during final check can block quantifier instantiation. To give space for quantifier instances we introduce two levels for final check such that nlsat is only applied in the second and final level.
This commit is contained in:
parent
7b9eb2a92f
commit
e4697fe18e
59 changed files with 94 additions and 843 deletions
|
|
@ -4129,16 +4129,18 @@ namespace smt {
|
|||
unsigned old_idx = m_final_check_idx;
|
||||
unsigned num_th = m_theory_set.size();
|
||||
unsigned range = num_th + 1;
|
||||
unsigned level = 1, max_level = 1;
|
||||
final_check_status result = FC_DONE;
|
||||
failure f = OK;
|
||||
|
||||
do {
|
||||
while (true) {
|
||||
TRACE(final_check_step, tout << "processing: " << m_final_check_idx << ", result: " << result << "\n";);
|
||||
final_check_status ok;
|
||||
if (m_final_check_idx < num_th) {
|
||||
theory * th = m_theory_set[m_final_check_idx];
|
||||
IF_VERBOSE(100, verbose_stream() << "(smt.final-check \"" << th->get_name() << "\")\n";);
|
||||
ok = th->final_check_eh();
|
||||
ok = th->final_check_eh(level);
|
||||
max_level = std::max(max_level, th->num_final_check_levels());
|
||||
TRACE(final_check_step, tout << "final check '" << th->get_name() << " ok: " << ok << " inconsistent " << inconsistent() << "\n";);
|
||||
if (get_cancel_flag()) {
|
||||
f = CANCELED;
|
||||
|
|
@ -4167,8 +4169,12 @@ namespace smt {
|
|||
return FC_CONTINUE;
|
||||
break;
|
||||
}
|
||||
if (m_final_check_idx == old_idx) {
|
||||
if (level >= max_level)
|
||||
break;
|
||||
++level;
|
||||
}
|
||||
}
|
||||
while (m_final_check_idx != old_idx);
|
||||
|
||||
TRACE(final_check_step, tout << "result: " << result << "\n";);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue