mirror of
https://github.com/Z3Prover/z3
synced 2025-05-05 06:45:45 +00:00
parent
0609408fd7
commit
ea396a008a
3 changed files with 15 additions and 6 deletions
|
@ -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();
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue