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:
parent
8a57e081f7
commit
da34de340d
4 changed files with 45 additions and 24 deletions
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue