3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-08-02 09:20:22 +00:00

tune user-pop

This commit is contained in:
Nikolaj Bjorner 2021-01-18 16:51:34 -08:00
parent 3ed490d4ed
commit b87405cc92
3 changed files with 113 additions and 125 deletions

View file

@ -423,6 +423,64 @@ namespace sat {
return true;
}
void solver::gc_vars(bool_var max_var) {
init_visited();
m_aux_literals.reset();
auto gc_watch = [&](literal lit) {
auto& wl1 = get_wlist(lit);
for (auto w : get_wlist(lit)) {
if (w.is_binary_clause() && w.get_literal().var() < max_var && !is_visited(w.get_literal())) {
m_aux_literals.push_back(w.get_literal());
mark_visited(w.get_literal());
}
}
wl1.reset();
};
for (unsigned v = max_var; v < num_vars(); ++v) {
gc_watch(literal(v, false));
gc_watch(literal(v, true));
}
for (literal lit : m_aux_literals) {
auto& wl2 = get_wlist(~lit);
unsigned j = 0;
for (auto w2 : wl2)
if (!w2.is_binary_clause() || w2.get_literal().var() < max_var)
wl2[j++] = w2;
wl2.shrink(j);
}
m_aux_literals.reset();
auto gc_clauses = [&](ptr_vector<clause>& clauses) {
unsigned j = 0;
for (clause* c : clauses) {
bool should_remove = false;
for (auto lit : *c)
should_remove |= lit.var() >= max_var;
if (should_remove) {
SASSERT(!c->on_reinit_stack());
detach_clause(*c);
del_clause(*c);
}
else {
clauses[j++] = c;
}
}
clauses.shrink(j);
};
gc_clauses(m_learned);
gc_clauses(m_clauses);
unsigned j = 0;
for (literal lit : m_trail) {
SASSERT(lvl(lit) == 0);
if (lit.var() < max_var)
m_trail[j++] = lit;
}
m_trail.shrink(j);
shrink_vars(max_var);
}
#if 0
void solver::gc_reinit_stack(unsigned num_scopes) {
SASSERT (!at_base_lvl());