mirror of
https://github.com/Z3Prover/z3
synced 2025-04-15 05:18:44 +00:00
parent
40aa2f7cb2
commit
6e8d9001dc
|
@ -2823,7 +2823,7 @@ proof * ast_manager::mk_modus_ponens(proof * p1, proof * p2) {
|
|||
SASSERT(is_implies(get_fact(p2)) || is_eq(get_fact(p2)) || is_oeq(get_fact(p2)));
|
||||
CTRACE("mk_modus_ponens", to_app(get_fact(p2))->get_arg(0) != get_fact(p1),
|
||||
tout << mk_pp(get_fact(p1), *this) << "\n" << mk_pp(get_fact(p2), *this) << "\n";);
|
||||
SASSERT(to_app(get_fact(p2))->get_arg(0) == get_fact(p1));
|
||||
SASSERT(!proofs_enabled() || to_app(get_fact(p2))->get_arg(0) == get_fact(p1));
|
||||
CTRACE("mk_modus_ponens", !is_ground(p2) && !has_quantifiers(p2), tout << "Non-ground: " << mk_pp(p2, *this) << "\n";);
|
||||
CTRACE("mk_modus_ponens", !is_ground(p1) && !has_quantifiers(p1), tout << "Non-ground: " << mk_pp(p1, *this) << "\n";);
|
||||
if (is_reflexivity(p2))
|
||||
|
@ -2887,6 +2887,8 @@ proof * ast_manager::mk_transitivity(proof * p1, proof * p2) {
|
|||
return p2;
|
||||
if (!p2)
|
||||
return p1;
|
||||
if (proofs_disabled())
|
||||
return nullptr;
|
||||
SASSERT(has_fact(p1));
|
||||
SASSERT(has_fact(p2));
|
||||
SASSERT(is_app(get_fact(p1)));
|
||||
|
|
|
@ -43,11 +43,11 @@ void rewriter_core::del_cache_stack() {
|
|||
}
|
||||
|
||||
bool rewriter_core::rewrites_from(expr* t, proof* p) {
|
||||
return !p || (to_app(m().get_fact(p))->get_arg(0) == t);
|
||||
return !p || m().proofs_disabled() || (to_app(m().get_fact(p))->get_arg(0) == t);
|
||||
}
|
||||
|
||||
bool rewriter_core::rewrites_to(expr* t, proof* p) {
|
||||
return !p || (to_app(m().get_fact(p))->get_arg(1) == t);
|
||||
return !p || m().proofs_disabled() || (to_app(m().get_fact(p))->get_arg(1) == t);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -242,7 +242,6 @@ bool rewriter_tpl<Config>::constant_fold(app * t, frame & fr) {
|
|||
template<typename Config>
|
||||
template<bool ProofGen>
|
||||
void rewriter_tpl<Config>::process_app(app * t, frame & fr) {
|
||||
// SASSERT(t->get_num_args() > 0);
|
||||
SASSERT(!frame_stack().empty());
|
||||
switch (fr.m_state) {
|
||||
case PROCESS_CHILDREN: {
|
||||
|
@ -311,13 +310,14 @@ void rewriter_tpl<Config>::process_app(app * t, frame & fr) {
|
|||
result_stack().push_back(m_r);
|
||||
if (ProofGen) {
|
||||
result_pr_stack().shrink(fr.m_spos);
|
||||
if (!m_pr2)
|
||||
if (!m_pr2) {
|
||||
m_pr2 = m().mk_rewrite(new_t, m_r);
|
||||
}
|
||||
m_pr = m().mk_transitivity(m_pr, m_pr2);
|
||||
m_pr2 = nullptr;
|
||||
result_pr_stack().push_back(m_pr);
|
||||
SASSERT(rewrites_to(m_r, m_pr));
|
||||
SASSERT(rewrites_from(t, m_pr));
|
||||
m_pr2 = nullptr;
|
||||
}
|
||||
if (st == BR_DONE) {
|
||||
cache_result<ProofGen>(t, m_r, m_pr, fr.m_cache_result);
|
||||
|
@ -346,12 +346,14 @@ void rewriter_tpl<Config>::process_app(app * t, frame & fr) {
|
|||
result_pr_stack().pop_back();
|
||||
pr1 = result_pr_stack().back();
|
||||
result_pr_stack().pop_back();
|
||||
SASSERT(rewrites_from(t, pr1));
|
||||
SASSERT(rewrites_to(m_r, pr1));
|
||||
SASSERT(rewrites_from(m_r, pr2));
|
||||
SASSERT(rewrites_to(result_stack().back(), pr2));
|
||||
m_pr = m().mk_transitivity(pr1, pr2);
|
||||
result_pr_stack().push_back(m_pr);
|
||||
}
|
||||
m_r = result_stack().back();
|
||||
SASSERT(rewrites_to(m_r, m_pr));
|
||||
SASSERT(rewrites_from(t, m_pr));
|
||||
m_r = result_stack().back();
|
||||
result_stack().pop_back();
|
||||
result_stack().pop_back();
|
||||
result_stack().push_back(m_r);
|
||||
|
|
|
@ -473,7 +473,7 @@ private:
|
|||
p2 = m.mk_oeq_congruence(e2, fml, defs.size(), defs.c_ptr());
|
||||
p3 = mk_transitivity(p1, p2);
|
||||
defs.reset();
|
||||
return proof_ref(p3, m);
|
||||
return p3;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue