mirror of
https://github.com/Z3Prover/z3
synced 2025-08-22 11:07:51 +00:00
fix #2450 - track assumptions across lazy explanations and variable equalities
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
db5af3088b
commit
4431a534b3
7 changed files with 86 additions and 55 deletions
|
@ -1382,14 +1382,14 @@ namespace nlsat {
|
|||
literal l = core[i];
|
||||
atom * a = m_atoms[l.var()];
|
||||
SASSERT(a != 0);
|
||||
interval_set_ref inf = m_evaluator.infeasible_intervals(a, l.sign());
|
||||
interval_set_ref inf = m_evaluator.infeasible_intervals(a, l.sign(), nullptr);
|
||||
r = ism.mk_union(inf, r);
|
||||
if (ism.is_full(r)) {
|
||||
// Done
|
||||
return false;
|
||||
}
|
||||
}
|
||||
TRACE("nlsat_mininize", tout << "interval set after adding partial core:\n" << r << "\n";);
|
||||
TRACE("nlsat_minimize", tout << "interval set after adding partial core:\n" << r << "\n";);
|
||||
if (todo.size() == 1) {
|
||||
// Done
|
||||
core.push_back(todo[0]);
|
||||
|
@ -1401,7 +1401,7 @@ namespace nlsat {
|
|||
literal l = todo[i];
|
||||
atom * a = m_atoms[l.var()];
|
||||
SASSERT(a != 0);
|
||||
interval_set_ref inf = m_evaluator.infeasible_intervals(a, l.sign());
|
||||
interval_set_ref inf = m_evaluator.infeasible_intervals(a, l.sign(), nullptr);
|
||||
r = ism.mk_union(inf, r);
|
||||
if (ism.is_full(r)) {
|
||||
// literal l must be in the core
|
||||
|
@ -1425,15 +1425,15 @@ namespace nlsat {
|
|||
todo.reset(); core.reset();
|
||||
todo.append(num, ls);
|
||||
while (true) {
|
||||
TRACE("nlsat_mininize", tout << "core minimization:\n"; display(tout, todo); tout << "\nCORE:\n"; display(tout, core););
|
||||
TRACE("nlsat_minimize", tout << "core minimization:\n"; display(tout, todo); tout << "\nCORE:\n"; display(tout, core););
|
||||
if (!minimize_core(todo, core))
|
||||
break;
|
||||
std::reverse(todo.begin(), todo.end());
|
||||
TRACE("nlsat_mininize", tout << "core minimization:\n"; display(tout, todo); tout << "\nCORE:\n"; display(tout, core););
|
||||
TRACE("nlsat_minimize", tout << "core minimization:\n"; display(tout, todo); tout << "\nCORE:\n"; display(tout, core););
|
||||
if (!minimize_core(todo, core))
|
||||
break;
|
||||
}
|
||||
TRACE("nlsat_mininize", tout << "core:\n"; display(tout, core););
|
||||
TRACE("nlsat_minimize", tout << "core:\n"; display(tout, core););
|
||||
r.append(core.size(), core.c_ptr());
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue