mirror of
https://github.com/Z3Prover/z3
synced 2025-06-20 04:43:39 +00:00
parent
b8680f8a46
commit
b2bd4dd3b4
3 changed files with 31 additions and 27 deletions
|
@ -165,30 +165,28 @@ namespace sat {
|
||||||
s.display_watches(tout);
|
s.display_watches(tout);
|
||||||
s.display(tout););
|
s.display(tout););
|
||||||
SASSERT(!s.was_eliminated(l.var()) || wlist.empty());
|
SASSERT(!s.was_eliminated(l.var()) || wlist.empty());
|
||||||
watch_list::const_iterator it2 = wlist.begin();
|
for (watched const& w : wlist) {
|
||||||
watch_list::const_iterator end2 = wlist.end();
|
switch (w.get_kind()) {
|
||||||
for (; it2 != end2; ++it2) {
|
|
||||||
switch (it2->get_kind()) {
|
|
||||||
case watched::BINARY:
|
case watched::BINARY:
|
||||||
SASSERT(!s.was_eliminated(it2->get_literal().var()));
|
SASSERT(!s.was_eliminated(w.get_literal().var()));
|
||||||
CTRACE("sat_watched_bug", !s.get_wlist(~(it2->get_literal())).contains(watched(l, it2->is_learned())),
|
CTRACE("sat_watched_bug", !s.get_wlist(~(w.get_literal())).contains(watched(l, w.is_learned())),
|
||||||
tout << "l: " << l << " l2: " << it2->get_literal() << "\n";
|
tout << "l: " << l << " l2: " << w.get_literal() << "\n";
|
||||||
tout << "was_eliminated1: " << s.was_eliminated(l.var());
|
tout << "was_eliminated1: " << s.was_eliminated(l.var());
|
||||||
tout << " was_eliminated2: " << s.was_eliminated(it2->get_literal().var());
|
tout << " was_eliminated2: " << s.was_eliminated(w.get_literal().var());
|
||||||
tout << " learned: " << it2->is_learned() << "\n";
|
tout << " learned: " << w.is_learned() << "\n";
|
||||||
sat::display(tout, s.m_cls_allocator, wlist);
|
sat::display(tout, s.m_cls_allocator, wlist);
|
||||||
tout << "\n";
|
tout << "\n";
|
||||||
sat::display(tout, s.m_cls_allocator, s.get_wlist(~(it2->get_literal())));
|
sat::display(tout, s.m_cls_allocator, s.get_wlist(~(w.get_literal())));
|
||||||
tout << "\n";);
|
tout << "\n";);
|
||||||
SASSERT(s.get_wlist(~(it2->get_literal())).contains(watched(l, it2->is_learned())));
|
SASSERT(s.get_wlist(~(w.get_literal())).contains(watched(l, w.is_learned())));
|
||||||
break;
|
break;
|
||||||
case watched::TERNARY:
|
case watched::TERNARY:
|
||||||
SASSERT(!s.was_eliminated(it2->get_literal1().var()));
|
SASSERT(!s.was_eliminated(w.get_literal1().var()));
|
||||||
SASSERT(!s.was_eliminated(it2->get_literal2().var()));
|
SASSERT(!s.was_eliminated(w.get_literal2().var()));
|
||||||
SASSERT(it2->get_literal1().index() < it2->get_literal2().index());
|
SASSERT(w.get_literal1().index() < w.get_literal2().index());
|
||||||
break;
|
break;
|
||||||
case watched::CLAUSE:
|
case watched::CLAUSE:
|
||||||
SASSERT(!s.m_cls_allocator.get_clause(it2->get_clause_offset())->was_removed());
|
SASSERT(!s.m_cls_allocator.get_clause(w.get_clause_offset())->was_removed());
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -2641,15 +2641,22 @@ namespace sat {
|
||||||
clauses.shrink(j);
|
clauses.shrink(j);
|
||||||
}
|
}
|
||||||
|
|
||||||
void solver::gc_bin(bool learned, literal nlit) {
|
void solver::gc_bin(literal lit) {
|
||||||
m_user_bin_clauses.reset();
|
bool_var v = lit.var();
|
||||||
collect_bin_clauses(m_user_bin_clauses, learned);
|
for (watch_list& wlist : m_watches) {
|
||||||
for (unsigned i = 0; i < m_user_bin_clauses.size(); ++i) {
|
watch_list::iterator it = wlist.begin();
|
||||||
literal l1 = m_user_bin_clauses[i].first;
|
watch_list::iterator it2 = wlist.begin();
|
||||||
literal l2 = m_user_bin_clauses[i].second;
|
watch_list::iterator end = wlist.end();
|
||||||
if (nlit == l1 || nlit == l2) {
|
for (; it != end; ++it) {
|
||||||
detach_bin_clause(l1, l2, learned);
|
if (it->is_binary_clause() && it->get_literal().var() == v) {
|
||||||
|
// skip
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
*it2 = *it;
|
||||||
|
++it2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
wlist.set_end(it2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2724,8 +2731,7 @@ namespace sat {
|
||||||
|
|
||||||
gc_lit(m_learned, lit);
|
gc_lit(m_learned, lit);
|
||||||
gc_lit(m_clauses, lit);
|
gc_lit(m_clauses, lit);
|
||||||
gc_bin(true, lit);
|
gc_bin(lit);
|
||||||
gc_bin(false, lit);
|
|
||||||
TRACE("sat", tout << "gc: " << lit << "\n"; display(tout););
|
TRACE("sat", tout << "gc: " << lit << "\n"; display(tout););
|
||||||
--num_scopes;
|
--num_scopes;
|
||||||
for (unsigned i = 0; i < m_trail.size(); ++i) {
|
for (unsigned i = 0; i < m_trail.size(); ++i) {
|
||||||
|
|
|
@ -444,7 +444,7 @@ namespace sat {
|
||||||
literal_vector m_aux_literals;
|
literal_vector m_aux_literals;
|
||||||
svector<bin_clause> m_user_bin_clauses;
|
svector<bin_clause> m_user_bin_clauses;
|
||||||
void gc_lit(clause_vector& clauses, literal lit);
|
void gc_lit(clause_vector& clauses, literal lit);
|
||||||
void gc_bin(bool learned, literal nlit);
|
void gc_bin(literal lit);
|
||||||
void gc_var(bool_var v);
|
void gc_var(bool_var v);
|
||||||
|
|
||||||
bool_var max_var(clause_vector& clauses, bool_var v);
|
bool_var max_var(clause_vector& clauses, bool_var v);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue