mirror of
https://github.com/Z3Prover/z3
synced 2025-04-10 03:07:07 +00:00
(partial) fix #3788
Fixes a bug in computation of implicants inside spacer. The instance now returns `unknown`. The root cause is the difference in what proofs are in spacer and SMT. Spacer returns a proof of query, but horn_tactic expects a proof of FALSE.
This commit is contained in:
parent
44302f3f2a
commit
b1b77e57e1
|
@ -127,8 +127,14 @@ void ground_sat_answer_op::mk_children(frame &fr, vector<frame> &todo) {
|
|||
m_solver->assert_expr(fr.pt().transition());
|
||||
m_solver->assert_expr(fr.pt().rule2tag(&r));
|
||||
|
||||
TRACE("spacer_sat",
|
||||
tout << "Solver in mk_children\n";
|
||||
m_solver->display(tout) << "\n";);
|
||||
|
||||
lbool res = m_solver->check_sat(0, nullptr);
|
||||
(void)res;
|
||||
CTRACE("spacer_sat", res != l_true,
|
||||
tout << "Result: " << res << "\n";);
|
||||
VERIFY(res == l_true);
|
||||
|
||||
model_ref mdl;
|
||||
|
|
|
@ -496,15 +496,16 @@ namespace {
|
|||
SASSERT(m_todo.empty());
|
||||
if (m_visited.is_marked(e) || !is_app(e)) return;
|
||||
|
||||
m_todo.reset();
|
||||
m_todo.push_back(e);
|
||||
for (unsigned i = 0; i < m_todo.size(); ++i) {
|
||||
while(!m_todo.empty()) {
|
||||
e = m_todo.back();
|
||||
m_todo.pop_back();
|
||||
if (!is_app(e)) continue;
|
||||
app* a = to_app(e);
|
||||
m_todo.pop_back();
|
||||
process_app(a, out);
|
||||
m_visited.mark(a, true);
|
||||
}
|
||||
}
|
||||
m_todo.reset();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue