3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-07-18 02:16:40 +00:00
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2020-04-01 10:56:27 -07:00
parent 65b2037ba2
commit c6b4641050
8 changed files with 36 additions and 22 deletions

View file

@ -100,6 +100,8 @@ bool rewriter_tpl<Config>::process_const(app * t0) {
case BR_DONE:
result_stack().push_back(m_r.get());
if (ProofGen) {
SASSERT(rewrites_from(t0, m_pr));
SASSERT(rewrites_to(t0, m_pr));
if (m_pr)
result_pr_stack().push_back(m_pr);
else
@ -139,6 +141,8 @@ bool rewriter_tpl<Config>::visit(expr * t, unsigned max_depth) {
SASSERT(m().get_sort(t) == m().get_sort(new_t));
result_stack().push_back(new_t);
set_new_child_flag(t, new_t);
SASSERT(rewrites_from(t, new_t_pr));
SASSERT(rewrites_to(new_t, new_t_pr));
if (ProofGen)
result_pr_stack().push_back(new_t_pr);
return true;
@ -167,6 +171,8 @@ bool rewriter_tpl<Config>::visit(expr * t, unsigned max_depth) {
if (ProofGen) {
proof * pr = get_cached_pr(t);
result_pr_stack().push_back(pr);
SASSERT(rewrites_from(t, pr));
SASSERT(rewrites_to(r, pr));
}
return true;
}
@ -286,14 +292,22 @@ void rewriter_tpl<Config>::process_app(app * t, frame & fr) {
else {
new_t = m().mk_app(f, new_num_args, new_args);
m_pr = m().mk_congruence(t, new_t, num_prs, result_pr_stack().c_ptr() + fr.m_spos);
SASSERT(rewrites_from(t, m_pr));
SASSERT(rewrites_to(new_t, m_pr));
}
}
m_pr2 = nullptr;
br_status st = m_cfg.reduce_app(f, new_num_args, new_args, m_r, m_pr2);
if (st != BR_FAILED && !rewrites_to(m_r, m_pr2)) enable_trace("reduce_app");
CTRACE("reduce_app", st != BR_FAILED,
tout << mk_bounded_pp(t, m()) << "\n";
tout << "st: " << st;
if (m_r) tout << " --->\n" << mk_bounded_pp(m_r, m());
tout << "\n";);
tout << "\n";
tout << m_pr2 << "\n";
);
SASSERT(st == BR_FAILED || rewrites_to(m_r, m_pr2));
SASSERT(st != BR_DONE || m().get_sort(m_r) == m().get_sort(t));
if (st != BR_FAILED) {
result_stack().shrink(fr.m_spos);
@ -491,6 +505,7 @@ void rewriter_tpl<Config>::process_app(app * t, frame & fr) {
}
}
template<typename Config>
template<bool ProofGen>
void rewriter_tpl<Config>::process_quantifier(quantifier * q, frame & fr) {