3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-08 18:31:49 +00:00

support self-subsumption, remove verbose log 0

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2018-02-11 21:21:55 -08:00
parent 8fb7fb9f98
commit bb4888ce31
2 changed files with 15 additions and 15 deletions

View file

@ -3439,7 +3439,7 @@ namespace sat {
- A >= k subsumes A + B >= k' for k' <= k
- A + A' >= k subsumes A + B >= k' for k' + |A'| <= k
- A + lit >= k self subsumes A + ~lit + B >= k' into A + B >= k' for k' <= k
- TBD: consider version that generalizes self-subsumption to more than one literal
- version that generalizes self-subsumption to more than one literal
A + ~L + B >= k' => A + B >= k' if A + A' + L >= k and k' + |L| + |A'| <= k
*/
bool ba_solver::subsumes(card& c1, card& c2, literal_vector & comp) {
@ -3480,12 +3480,14 @@ namespace sat {
}
}
if (!comp.empty()) {
// self-subsumption is TBD.
unsigned c1_exclusive = c1.size() - common - comp.size();
bool result = c1_exclusive + 1 <= c1.k();
if (!comp.empty() && result) {
IF_VERBOSE(10, verbose_stream() << "self-subsume clause " << c2 << " is TBD\n";);
return false;
}
unsigned c1_exclusive = c1.size() - common - comp.size();
return c1_exclusive + 1 <= c1.k();
return result;
}
/*
@ -3559,22 +3561,20 @@ namespace sat {
}
else {
TRACE("ba", tout << "self subsume cardinality\n";);
IF_VERBOSE(0,
verbose_stream() << "self-subsume cardinality is TBD\n";
IF_VERBOSE(11,
verbose_stream() << "self-subsume cardinality\n";
verbose_stream() << c1 << "\n";
verbose_stream() << c2 << "\n";);
#if 0
clear_watch(c2);
unsigned j = 0;
for (unsigned i = 0; i < c2.size(); ++i) {
if (slit == c2[i]) {
c2.swap(i, c2.size() -1);
break;
if (!is_marked(~c2[i])) {
c2[j++] = c2[i];
}
}
c2.set_size(c2.size() - 1);
c2.set_size(j);
init_watch(c2);
m_simplify_change = true;
#endif
}
}
}
@ -3594,7 +3594,7 @@ namespace sat {
c1.set_learned(false);
}
else {
IF_VERBOSE(0, verbose_stream() << "self-subsume clause is TBD\n";);
IF_VERBOSE(11, verbose_stream() << "self-subsume clause is TBD\n";);
// remove literal slit from c2.
TRACE("ba", tout << "TBD remove literals " << slit << " from " << c2 << "\n";);
}

View file

@ -1860,7 +1860,7 @@ namespace sat {
void solver::gc_half(char const * st_name) {
TRACE("sat", tout << "gc\n";);
unsigned sz = m_learned.size();
unsigned new_sz = sz/2;
unsigned new_sz = sz/2; // std::min(sz/2, m_clauses.size()*2);
unsigned j = new_sz;
for (unsigned i = new_sz; i < sz; i++) {
clause & c = *(m_learned[i]);