3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-15 13:28:47 +00:00

narrowing incorrect lemma generation

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2018-09-11 11:31:19 -07:00
parent 3bf072557e
commit 4ffd860375
3 changed files with 8 additions and 7 deletions

View file

@ -426,6 +426,7 @@ namespace smt {
std::stringstream strm; std::stringstream strm;
strm << "lemma_" << (++m_lemma_id) << ".smt2"; strm << "lemma_" << (++m_lemma_id) << ".smt2";
std::ofstream out(strm.str()); std::ofstream out(strm.str());
TRACE("lemma", tout << strm.str() << "\n";);
display_lemma_as_smt_problem(out, num_antecedents, antecedents, consequent, logic); display_lemma_as_smt_problem(out, num_antecedents, antecedents, consequent, logic);
out.close(); out.close();
return m_lemma_id; return m_lemma_id;
@ -466,6 +467,7 @@ namespace smt {
std::stringstream strm; std::stringstream strm;
strm << "lemma_" << (++m_lemma_id) << ".smt2"; strm << "lemma_" << (++m_lemma_id) << ".smt2";
std::ofstream out(strm.str()); std::ofstream out(strm.str());
TRACE("lemma", tout << strm.str() << "\n";);
display_lemma_as_smt_problem(out, num_antecedents, antecedents, num_eq_antecedents, eq_antecedents, consequent, logic); display_lemma_as_smt_problem(out, num_antecedents, antecedents, num_eq_antecedents, eq_antecedents, consequent, logic);
out.close(); out.close();
return m_lemma_id; return m_lemma_id;

View file

@ -1512,7 +1512,7 @@ public:
if (r1.is_int() && r2.is_int() && r == div(r1, r2)) { if (r1.is_int() && r2.is_int() && r == div(r1, r2)) {
continue; continue;
} }
if (r2.is_neg()) { if (r2.is_neg() || r1.is_neg()) {
// TBD // TBD
continue; continue;
} }

View file

@ -217,13 +217,12 @@ struct mus::imp {
} }
expr_set mss_set; expr_set mss_set;
for (unsigned i = 0; i < mss.size(); ++i) { for (expr* e : mss) {
mss_set.insert(mss[i]); mss_set.insert(e);
} }
expr_set::iterator it = min_core.begin(), end = min_core.end(); for (expr * e : min_core) {
for (; it != end; ++it) { if (mss_set.contains(e) && min_lit != e) {
if (mss_set.contains(*it) && min_lit != *it) { unknown.push_back(e);
unknown.push_back(*it);
} }
} }
core_literal = min_lit; core_literal = min_lit;