mirror of
https://github.com/Z3Prover/z3
synced 2025-11-22 05:36:41 +00:00
close entire tree when sibling resolvent is empty
This commit is contained in:
parent
5143ba0118
commit
f75d137911
1 changed files with 5 additions and 10 deletions
|
|
@ -211,12 +211,11 @@ namespace search_tree {
|
|||
|
||||
auto resolvent = compute_sibling_resolvent(left, right);
|
||||
|
||||
// empty resolvent → subtree is UNSAT
|
||||
// empty resolvent of sibling complement (i.e. tautology) -> global UNSAT
|
||||
if (resolvent.empty()) {
|
||||
p->set_core(resolvent); // empty core
|
||||
close_node(p);
|
||||
p = p->parent();
|
||||
continue;
|
||||
m_root->set_core(resolvent);
|
||||
close_node(m_root.get());
|
||||
return;
|
||||
}
|
||||
|
||||
// if p already has the same core, nothing more to do
|
||||
|
|
@ -288,12 +287,8 @@ namespace search_tree {
|
|||
// they are a subset of literals on the path from root to n
|
||||
void backtrack(node<Config>* n, vector<literal> const& conflict) {
|
||||
if (conflict.empty()) {
|
||||
m_root->set_core(conflict);
|
||||
close_node(m_root.get());
|
||||
m_root->set_status(status::closed);
|
||||
|
||||
// store empty core at root to signal global unsat if you like
|
||||
m_root->set_core(vector<literal>()); // optional
|
||||
|
||||
return;
|
||||
}
|
||||
SASSERT(n != m_root.get());
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue