mirror of
https://github.com/Z3Prover/z3
synced 2025-04-12 04:03:39 +00:00
fix unsoundness with what appears to be unit literals but really are literals that are justified
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
4d61c19917
commit
9db4ac434d
|
@ -2389,6 +2389,7 @@ namespace smt {
|
||||||
assign(l, b_justification::mk_axiom());
|
assign(l, b_justification::mk_axiom());
|
||||||
if (is_relevant)
|
if (is_relevant)
|
||||||
mark_as_relevant(l);
|
mark_as_relevant(l);
|
||||||
|
verbose_stream() << "reassert " << unit << ": " << mk_bounded_pp(unit, m) << "\n";
|
||||||
TRACE("reassert_units", tout << "reasserting #" << unit->get_id() << " " << sign << " @ " << m_scope_lvl << "\n";);
|
TRACE("reassert_units", tout << "reasserting #" << unit->get_id() << " " << sign << " @ " << m_scope_lvl << "\n";);
|
||||||
}
|
}
|
||||||
if (at_base_level())
|
if (at_base_level())
|
||||||
|
|
|
@ -1438,8 +1438,10 @@ namespace smt {
|
||||||
m_justifications.push_back(j);
|
m_justifications.push_back(j);
|
||||||
assign(unit, j);
|
assign(unit, j);
|
||||||
inc_ref(unit);
|
inc_ref(unit);
|
||||||
if (m_scope_lvl > m_search_lvl)
|
if (m_scope_lvl > m_search_lvl && !j) {
|
||||||
|
verbose_stream() << "unit clause " << unit << ": " << mk_bounded_pp(atom, m) << "\n";
|
||||||
m_units_to_reassert.push_back({ expr_ref(atom, m), unit.sign(), is_relevant(unit) });
|
m_units_to_reassert.push_back({ expr_ref(atom, m), unit.sign(), is_relevant(unit) });
|
||||||
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
case 2:
|
case 2:
|
||||||
|
|
Loading…
Reference in a new issue