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:
parent
c4d0ded7b7
commit
e70f501932
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue