3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-06-27 08:28:44 +00:00

Fixed bug in sat model converter. Fixes #1148.

This commit is contained in:
Christoph M. Wintersteiger 2017-07-15 20:25:13 +01:00
parent 8a57e081f7
commit da34de340d
4 changed files with 45 additions and 24 deletions

View file

@ -46,7 +46,7 @@ namespace sat {
literal_vector::const_iterator it2 = it->m_clauses.begin(); literal_vector::const_iterator it2 = it->m_clauses.begin();
literal_vector::const_iterator end2 = it->m_clauses.end(); literal_vector::const_iterator end2 = it->m_clauses.end();
for (; it2 != end2; ++it2) { for (; it2 != end2; ++it2) {
literal l = *it2; literal l = *it2;
if (l == null_literal) { if (l == null_literal) {
// end of clause // end of clause
if (!sat) { if (!sat) {
@ -56,6 +56,7 @@ namespace sat {
sat = false; sat = false;
continue; continue;
} }
if (sat) if (sat)
continue; continue;
bool sign = l.sign(); bool sign = l.sign();
@ -237,4 +238,22 @@ namespace sat {
} }
} }
unsigned model_converter::max_var(unsigned min) const {
unsigned result = min;
vector<entry>::const_iterator it = m_entries.begin();
vector<entry>::const_iterator end = m_entries.end();
for (; it != end; ++it) {
literal_vector::const_iterator lvit = it->m_clauses.begin();
literal_vector::const_iterator lvend = it->m_clauses.end();
for (; lvit != lvend; ++lvit) {
literal l = *lvit;
if (l != null_literal) {
if (l.var() > result)
result = l.var();
}
}
}
return result;
}
}; };

View file

@ -74,6 +74,7 @@ namespace sat {
void copy(model_converter const & src); void copy(model_converter const & src);
void collect_vars(bool_var_set & s) const; void collect_vars(bool_var_set & s) const;
unsigned max_var(unsigned min) const;
}; };
}; };

View file

@ -2628,7 +2628,7 @@ namespace sat {
unsigned j = 0; unsigned j = 0;
for (unsigned i = 0; i < clauses.size(); ++i) { for (unsigned i = 0; i < clauses.size(); ++i) {
clause & c = *(clauses[i]); clause & c = *(clauses[i]);
if (c.contains(lit)) { if (c.contains(lit) || c.contains(~lit)) {
detach_clause(c); detach_clause(c);
del_clause(c); del_clause(c);
} }
@ -2684,6 +2684,7 @@ namespace sat {
w = max_var(m_clauses, w); w = max_var(m_clauses, w);
w = max_var(true, w); w = max_var(true, w);
w = max_var(false, w); w = max_var(false, w);
v = m_mc.max_var(w);
for (unsigned i = 0; i < m_trail.size(); ++i) { for (unsigned i = 0; i < m_trail.size(); ++i) {
if (m_trail[i].var() > w) w = m_trail[i].var(); if (m_trail[i].var() > w) w = m_trail[i].var();
} }