mirror of
https://github.com/Z3Prover/z3
synced 2025-04-29 11:55:51 +00:00
working on relevant
This commit is contained in:
parent
9527471967
commit
28bce8f09c
11 changed files with 121 additions and 98 deletions
|
@ -23,10 +23,10 @@ Author:
|
|||
namespace euf {
|
||||
|
||||
void solver::add_auto_relevant(sat::literal lit) {
|
||||
#if NEW_RELEVANCY
|
||||
m_relevancy.mark_relevant(lit);
|
||||
return;
|
||||
#endif
|
||||
if (m_relevancy.enabled()) {
|
||||
m_relevancy.mark_relevant(lit);
|
||||
return;
|
||||
}
|
||||
if (!relevancy_enabled())
|
||||
return;
|
||||
for (; m_auto_relevant_scopes > 0; --m_auto_relevant_scopes)
|
||||
|
@ -37,10 +37,10 @@ namespace euf {
|
|||
}
|
||||
|
||||
void solver::pop_relevant(unsigned n) {
|
||||
#if NEW_RELEVANCY
|
||||
m_relevancy.pop(n);
|
||||
return;
|
||||
#endif
|
||||
if (m_relevancy.enabled()) {
|
||||
m_relevancy.pop(n);
|
||||
return;
|
||||
}
|
||||
if (m_auto_relevant_scopes >= n) {
|
||||
m_auto_relevant_scopes -= n;
|
||||
return;
|
||||
|
@ -54,31 +54,28 @@ namespace euf {
|
|||
}
|
||||
|
||||
void solver::push_relevant() {
|
||||
#if NEW_RELEVANCY
|
||||
m_relevancy.push();
|
||||
return;
|
||||
#endif
|
||||
if (m_relevancy.enabled()) {
|
||||
m_relevancy.push();
|
||||
return;
|
||||
}
|
||||
++m_auto_relevant_scopes;
|
||||
}
|
||||
|
||||
bool solver::is_relevant(expr* e) const {
|
||||
#if NEW_RELEVANCY
|
||||
return m_relevancy.is_relevant(e);
|
||||
#endif
|
||||
if (m_relevancy.enabled())
|
||||
return m_relevancy.is_relevant(e);
|
||||
return m_relevant_expr_ids.get(e->get_id(), true);
|
||||
}
|
||||
|
||||
bool solver::is_relevant(enode* n) const {
|
||||
#if NEW_RELEVANCY
|
||||
return m_relevancy.is_relevant(n);
|
||||
#endif
|
||||
if (m_relevancy.enabled())
|
||||
return m_relevancy.is_relevant(n);
|
||||
return m_relevant_expr_ids.get(n->get_expr_id(), true);
|
||||
}
|
||||
|
||||
void solver::ensure_dual_solver() {
|
||||
#if NEW_RELEVANCY
|
||||
return;
|
||||
#endif
|
||||
if (m_relevancy.enabled())
|
||||
return;
|
||||
if (m_dual_solver)
|
||||
return;
|
||||
m_dual_solver = alloc(sat::dual_solver, s(), s().rlimit());
|
||||
|
@ -93,10 +90,10 @@ namespace euf {
|
|||
* not tracked.
|
||||
*/
|
||||
void solver::add_root(unsigned n, sat::literal const* lits) {
|
||||
#if NEW_RELEVANCY
|
||||
m_relevancy.add_root(n, lits);
|
||||
return;
|
||||
#endif
|
||||
if (m_relevancy.enabled()) {
|
||||
m_relevancy.add_root(n, lits);
|
||||
return;
|
||||
}
|
||||
if (!relevancy_enabled())
|
||||
return;
|
||||
ensure_dual_solver();
|
||||
|
@ -104,10 +101,10 @@ namespace euf {
|
|||
}
|
||||
|
||||
void solver::add_aux(unsigned n, sat::literal const* lits) {
|
||||
#if NEW_RELEVANCY
|
||||
m_relevancy.add_def(n, lits);
|
||||
return;
|
||||
#endif
|
||||
if (m_relevancy.enabled()) {
|
||||
m_relevancy.add_def(n, lits);
|
||||
return;
|
||||
}
|
||||
if (!relevancy_enabled())
|
||||
return;
|
||||
ensure_dual_solver();
|
||||
|
@ -115,17 +112,15 @@ namespace euf {
|
|||
}
|
||||
|
||||
void solver::track_relevancy(sat::bool_var v) {
|
||||
#if NEW_RELEVANCY
|
||||
return;
|
||||
#endif
|
||||
if (m_relevancy.enabled())
|
||||
return;
|
||||
ensure_dual_solver();
|
||||
m_dual_solver->track_relevancy(v);
|
||||
}
|
||||
|
||||
bool solver::init_relevancy() {
|
||||
#if NEW_RELEVANCY
|
||||
return true;
|
||||
#endif
|
||||
if (m_relevancy.enabled())
|
||||
return true;
|
||||
m_relevant_expr_ids.reset();
|
||||
if (!relevancy_enabled())
|
||||
return true;
|
||||
|
@ -144,19 +139,19 @@ namespace euf {
|
|||
}
|
||||
|
||||
void solver::push_relevant(sat::bool_var v) {
|
||||
SASSERT(!NEW_RELEVANCY);
|
||||
SASSERT(!m_relevancy.enabled());
|
||||
expr* e = m_bool_var2expr.get(v, nullptr);
|
||||
if (e)
|
||||
m_relevant_todo.push_back(e);
|
||||
}
|
||||
|
||||
bool solver::is_propagated(sat::literal lit) {
|
||||
SASSERT(!NEW_RELEVANCY);
|
||||
SASSERT(!m_relevancy.enabled());
|
||||
return s().value(lit) == l_true && !s().get_justification(lit.var()).is_none();
|
||||
}
|
||||
|
||||
void solver::init_relevant_expr_ids() {
|
||||
SASSERT(!NEW_RELEVANCY);
|
||||
SASSERT(!m_relevancy.enabled());
|
||||
unsigned max_id = 0;
|
||||
for (enode* n : m_egraph.nodes())
|
||||
max_id = std::max(max_id, n->get_expr_id());
|
||||
|
@ -166,7 +161,7 @@ namespace euf {
|
|||
}
|
||||
|
||||
void solver::relevant_subterms() {
|
||||
SASSERT(!NEW_RELEVANCY);
|
||||
SASSERT(!m_relevancy.enabled());
|
||||
ptr_vector<expr>& todo = m_relevant_todo;
|
||||
bool_vector& visited = m_relevant_visited;
|
||||
for (unsigned i = 0; i < todo.size(); ++i) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue