3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-01-10 04:49:00 +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:
Nikolaj Bjorner 2025-11-26 15:35:19 -08:00
parent 28dc71c75e
commit 62b3668beb
59 changed files with 94 additions and 843 deletions

View file

@ -271,7 +271,7 @@ namespace smt {
return theory_array::internalize_term(n);
}
if (!is_const(n) && !is_default(n) && !is_map(n) && !is_as_array(n) && !is_set_has_size(n) && !is_set_card(n)) {
if (!is_const(n) && !is_default(n) && !is_map(n) && !is_as_array(n)) {
if (!is_array_ext(n))
found_unsupported_op(n);
return false;
@ -295,12 +295,6 @@ namespace smt {
mk_var(arg0);
}
}
else if (is_set_has_size(n) || is_set_card(n)) {
if (!m_bapa) {
m_bapa = alloc(theory_array_bapa, *this);
}
m_bapa->internalize_term(n);
}
enode* node = ctx.get_enode(n);
if (!is_attached_to_var(node)) {
@ -449,11 +443,10 @@ namespace smt {
}
bool theory_array_full::should_research(expr_ref_vector & unsat_core) {
return m_bapa && m_bapa->should_research(unsat_core);
return false;
}
void theory_array_full::add_theory_assumptions(expr_ref_vector & assumptions) {
if (m_bapa) m_bapa->add_theory_assumptions(assumptions);
}
//
@ -814,9 +807,6 @@ namespace smt {
}
}
}
if (r == FC_DONE && m_bapa) {
r = m_bapa->final_check();
}
bool should_giveup = m_found_unsupported_op || has_propagate_up_trail() || has_non_beta_as_array();
if (r == FC_DONE && should_giveup)
r = FC_GIVEUP;