3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-08 18:31:49 +00:00

handle potential extra nodes from q_solver

This commit is contained in:
Nikolaj Bjorner 2021-09-09 09:17:11 +02:00
parent c4d0ded7b7
commit e70f501932

View file

@ -461,6 +461,13 @@ namespace euf {
give_up = true;
unsigned num_nodes = m_egraph.num_nodes();
auto apply_solver = [&](th_solver* e) {
switch (e->check()) {
case sat::check_result::CR_CONTINUE: cont = true; break;
case sat::check_result::CR_GIVEUP: give_up = true; break;
default: break;
}
};
if (merge_shared_bools())
cont = true;
for (auto* e : m_solvers) {
@ -468,25 +475,24 @@ namespace euf {
return sat::check_result::CR_GIVEUP;
if (e == m_qsolver)
continue;
switch (e->check()) {
case sat::check_result::CR_CONTINUE: cont = true; break;
case sat::check_result::CR_GIVEUP: give_up = true; break;
default: break;
}
apply_solver(e);
if (s().inconsistent())
return sat::check_result::CR_CONTINUE;
}
if (m_qsolver)
apply_solver(m_qsolver);
if (s().inconsistent())
return sat::check_result::CR_CONTINUE;
if (cont)
return sat::check_result::CR_CONTINUE;
if (give_up)
return sat::check_result::CR_GIVEUP;
if (num_nodes < m_egraph.num_nodes()) {
IF_VERBOSE(1, verbose_stream() << "new nodes created, but not detected\n");
return sat::check_result::CR_CONTINUE;
}
if (m_qsolver)
return m_qsolver->check();
TRACE("after_search", s().display(tout););
if (give_up)
return sat::check_result::CR_GIVEUP;
return sat::check_result::CR_DONE;
}
@ -857,6 +863,14 @@ namespace euf {
};
r->m_egraph.copy_from(m_egraph, copy_justification);
r->set_solver(s);
for (euf::enode* n : r->m_egraph.nodes()) {
auto b = n->bool_var();
if (b != sat::null_bool_var) {
m_bool_var2expr.setx(b, n->get_expr(), nullptr);
SASSERT(r->m.is_bool(n->get_sort()));
IF_VERBOSE(0, verbose_stream() << "set bool_var " << r->bpp(n) << "\n");
}
}
for (auto* s_orig : m_id2solver) {
if (s_orig) {
auto* s_clone = s_orig->clone(*r);