mirror of
https://github.com/Z3Prover/z3
synced 2025-06-29 09:28:45 +00:00
parent
bdd66e1fa0
commit
c765869d38
1 changed files with 10 additions and 4 deletions
|
@ -680,19 +680,25 @@ class solve_eqs_tactic : public tactic {
|
||||||
}
|
}
|
||||||
|
|
||||||
void distribute_and_or(goal & g) {
|
void distribute_and_or(goal & g) {
|
||||||
|
if (m_produce_proofs)
|
||||||
|
return;
|
||||||
unsigned size = g.size();
|
unsigned size = g.size();
|
||||||
hoist_rewriter_star rw(m());
|
hoist_rewriter_star rw(m());
|
||||||
th_rewriter thrw(m());
|
th_rewriter thrw(m());
|
||||||
expr_ref tmp(m()), tmp2(m());
|
expr_ref tmp(m()), tmp2(m());
|
||||||
|
|
||||||
// TRACE("solve_eqs", g.display(tout););
|
// TRACE("solve_eqs", g.display(tout););
|
||||||
for (unsigned idx = 0; idx < size; idx++) {
|
for (unsigned idx = 0; idx < size; idx++) {
|
||||||
checkpoint();
|
checkpoint();
|
||||||
if (g.is_decided_unsat()) break;
|
if (g.is_decided_unsat()) break;
|
||||||
expr* f = g.form(idx);
|
expr* f = g.form(idx);
|
||||||
thrw(f, tmp);
|
proof_ref pr1(m()), pr2(m());
|
||||||
rw(tmp, tmp2);
|
thrw(f, tmp, pr1);
|
||||||
TRACE("solve_eqs", tout << mk_pp(f, m()) << " " << tmp2 << "\n";);
|
rw(tmp, tmp2, pr2);
|
||||||
g.update(idx, tmp2, g.pr(idx), g.dep(idx));
|
pr1 = m().mk_transitivity(pr1, pr2);
|
||||||
|
TRACE("solve_eqs", tout << mk_pp(f, m()) << " " << tmp2 << "\n" << pr1 << "\n" << mk_pp(g.pr(idx), m()) << "\n";);
|
||||||
|
if (!pr1) pr1 = g.pr(idx); else pr1 = m().mk_modus_ponens(g.pr(idx), pr1);
|
||||||
|
g.update(idx, tmp2, pr1, g.dep(idx));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue