3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-24 01:25:31 +00:00
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2020-08-24 01:55:13 -07:00
parent 96587bf708
commit 65e6d942ac
23 changed files with 1338 additions and 39 deletions

View file

@ -7,6 +7,7 @@ z3_add_component(sat_tactic
sat
tactic
solver
euf
TACTIC_HEADERS
sat_tactic.h
)

View file

@ -637,7 +637,6 @@ struct goal2sat::imp {
}
m_ext->add_at_least(v2, lits, lits.size() - k.get_unsigned());
if (root && !sign) {
m_result_stack.reset();
}
@ -769,15 +768,14 @@ struct goal2sat::imp {
return t->get_arg(idx);
}
}
void process(expr * n) {
//SASSERT(m_result_stack.empty());
TRACE("goal2sat", tout << "converting: " << mk_bounded_pp(n, m, 2) << "\n";);
if (visit(n, true, false)) {
void process(expr* n, bool is_root) {
unsigned sz = m_frame_stack.size();
if (visit(n, is_root, false)) {
SASSERT(m_result_stack.empty());
return;
}
while (!m_frame_stack.empty()) {
while (m_frame_stack.size() > sz) {
loop:
if (!m.inc())
throw tactic_exception(m.limit().get_cancel_msg());
@ -812,6 +810,20 @@ struct goal2sat::imp {
convert(t, root, sign);
m_frame_stack.pop_back();
}
}
sat::literal internalize(expr* n) {
SASSERT(m_result_stack.empty());
process(n, false);
SASSERT(m_result_stack.size() == 1);
sat::literal result = m_result_stack.back();
m_result_stack.reset();
return result;
}
void process(expr * n) {
m_result_stack.reset();
process(n, true);
CTRACE("goal2sat", !m_result_stack.empty(), tout << m_result_stack << "\n";);
SASSERT(m_result_stack.empty());
}
@ -868,7 +880,7 @@ struct goal2sat::imp {
}
fmls.push_back(d_new);
}
f = m.mk_or(fmls.size(), fmls.c_ptr());
f = m.mk_or(fmls);
}
TRACE("goal2sat", tout << mk_bounded_pp(f, m, 2) << "\n";);
process(f);
@ -1187,7 +1199,7 @@ struct sat2goal::imp {
for (sat::literal l : c) {
lits.push_back(lit2expr(mc, l));
}
r.assert_expr(m.mk_or(lits.size(), lits.c_ptr()));
r.assert_expr(m.mk_or(lits));
}
}
}