mirror of
https://github.com/Z3Prover/z3
synced 2025-06-26 07:43:41 +00:00
parent
0609408fd7
commit
ea396a008a
3 changed files with 15 additions and 6 deletions
|
@ -683,13 +683,13 @@ void rewriter_tpl<Config>::update_binding_at(unsigned i, expr* binding) {
|
||||||
template<typename Config>
|
template<typename Config>
|
||||||
template<bool ProofGen>
|
template<bool ProofGen>
|
||||||
void rewriter_tpl<Config>::main_loop(expr * t, expr_ref & result, proof_ref & result_pr) {
|
void rewriter_tpl<Config>::main_loop(expr * t, expr_ref & result, proof_ref & result_pr) {
|
||||||
|
result_pr = nullptr;
|
||||||
if (m().canceled()) {
|
if (m().canceled()) {
|
||||||
if (m_cancel_check) {
|
if (m_cancel_check) {
|
||||||
reset();
|
reset();
|
||||||
throw rewriter_exception(m().limit().get_cancel_msg());
|
throw rewriter_exception(m().limit().get_cancel_msg());
|
||||||
}
|
}
|
||||||
result = t;
|
result = t;
|
||||||
result_pr = nullptr;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
SASSERT(!ProofGen || result_stack().size() == result_pr_stack().size());
|
SASSERT(!ProofGen || result_stack().size() == result_pr_stack().size());
|
||||||
|
|
|
@ -200,13 +200,19 @@ public:
|
||||||
func_decl_ref var(m);
|
func_decl_ref var(m);
|
||||||
unsigned val;
|
unsigned val;
|
||||||
if (is_bound(g->form(i), var, val) && !m_has_eq.is_marked(var)) {
|
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);
|
mc1->insert(var, val);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
m_rw(g->form(i), new_curr, new_pr);
|
m_rw(g->form(i), new_curr, new_pr);
|
||||||
if (m.proofs_enabled() && !new_pr) {
|
if (g->form(i) == new_curr)
|
||||||
new_pr = m.mk_rewrite(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);
|
new_pr = m.mk_modus_ponens(g->pr(i), new_pr);
|
||||||
}
|
}
|
||||||
g->update(i, new_curr, new_pr, g->dep(i));
|
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);
|
m().push_back(m_dependencies, saved_d);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
// SASSERT(!pr || m().get_fact(pr) == f);
|
||||||
SASSERT(!m_inconsistent);
|
SASSERT(!m_inconsistent);
|
||||||
m().push_back(m_forms, f);
|
m().push_back(m_forms, f);
|
||||||
m().push_back(m_proofs, pr);
|
m().push_back(m_proofs, pr);
|
||||||
|
@ -252,6 +253,7 @@ void goal::assert_expr(expr * f, proof * pr, expr_dependency * d) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (pr) {
|
if (pr) {
|
||||||
|
// SASSERT(f == m().get_fact(pr));
|
||||||
slow_process(f, pr, d);
|
slow_process(f, pr, d);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -282,6 +284,7 @@ void goal::update(unsigned i, expr * f, proof * pr, expr_dependency * d) {
|
||||||
if (m_inconsistent)
|
if (m_inconsistent)
|
||||||
return;
|
return;
|
||||||
if (pr) {
|
if (pr) {
|
||||||
|
// SASSERT(f == m().get_fact(pr));
|
||||||
expr_ref out_f(m());
|
expr_ref out_f(m());
|
||||||
proof_ref out_pr(m());
|
proof_ref out_pr(m());
|
||||||
slow_process(true, f, pr, d, out_f, out_pr);
|
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))
|
if (!::is_well_sorted(m(), t))
|
||||||
return false;
|
return false;
|
||||||
#if 0
|
#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";);
|
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));
|
SASSERT(m().get_fact(pr(i)) == form(i));
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue