3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-05-05 06:45:45 +00:00
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2020-03-25 02:30:51 -07:00
parent 0609408fd7
commit ea396a008a
3 changed files with 15 additions and 6 deletions

View file

@ -683,20 +683,20 @@ void rewriter_tpl<Config>::update_binding_at(unsigned i, expr* binding) {
template<typename Config>
template<bool ProofGen>
void rewriter_tpl<Config>::main_loop(expr * t, expr_ref & result, proof_ref & result_pr) {
result_pr = nullptr;
if (m().canceled()) {
if (m_cancel_check) {
reset();
throw rewriter_exception(m().limit().get_cancel_msg());
}
result = t;
result_pr = nullptr;
return;
}
SASSERT(!ProofGen || result_stack().size() == result_pr_stack().size());
SASSERT(not_rewriting());
m_root = t;
m_num_qvars = 0;
m_num_steps = 0;
m_num_steps = 0;
if (visit<ProofGen>(t, RW_UNBOUNDED_DEPTH)) {
result = result_stack().back();
result_stack().pop_back();

View file

@ -200,13 +200,19 @@ public:
func_decl_ref var(m);
unsigned val;
if (is_bound(g->form(i), var, val) && !m_has_eq.is_marked(var)) {
g->update(i, m.mk_true(), nullptr, nullptr);
if (m.proofs_enabled()) {
new_pr = m.mk_rewrite(g->form(i), m.mk_true());
new_pr = m.mk_modus_ponens(g->pr(i), new_pr);
}
g->update(i, m.mk_true(), new_pr, nullptr);
mc1->insert(var, val);
continue;
}
m_rw(g->form(i), new_curr, new_pr);
if (m.proofs_enabled() && !new_pr) {
new_pr = m.mk_rewrite(g->form(i), new_curr);
if (g->form(i) == new_curr)
continue;
if (m.proofs_enabled()) {
if (!new_pr) new_pr = m.mk_rewrite(g->form(i), new_curr);
new_pr = m.mk_modus_ponens(g->pr(i), new_pr);
}
g->update(i, new_curr, new_pr, g->dep(i));

View file

@ -133,6 +133,7 @@ void goal::push_back(expr * f, proof * pr, expr_dependency * d) {
m().push_back(m_dependencies, saved_d);
}
else {
// SASSERT(!pr || m().get_fact(pr) == f);
SASSERT(!m_inconsistent);
m().push_back(m_forms, f);
m().push_back(m_proofs, pr);
@ -252,6 +253,7 @@ void goal::assert_expr(expr * f, proof * pr, expr_dependency * d) {
return;
}
if (pr) {
// SASSERT(f == m().get_fact(pr));
slow_process(f, pr, d);
}
else {
@ -282,6 +284,7 @@ void goal::update(unsigned i, expr * f, proof * pr, expr_dependency * d) {
if (m_inconsistent)
return;
if (pr) {
// SASSERT(f == m().get_fact(pr));
expr_ref out_f(m());
proof_ref out_pr(m());
slow_process(true, f, pr, d, out_f, out_pr);
@ -591,7 +594,7 @@ bool goal::is_well_formed() const {
if (!::is_well_sorted(m(), t))
return false;
#if 0
if (m().get_fact(pr(i)) != form(i)) {
if (pr(i) && m().get_fact(pr(i)) != form(i)) {
TRACE("tactic", tout << mk_ismt2_pp(pr(i), m()) << "\n" << mk_ismt2_pp(form(i), m()) << "\n";);
SASSERT(m().get_fact(pr(i)) == form(i));
return false;