diff --git a/src/qe/nlqsat.cpp b/src/qe/nlqsat.cpp index 184cfb8c1..f9ceaa26d 100644 --- a/src/qe/nlqsat.cpp +++ b/src/qe/nlqsat.cpp @@ -517,18 +517,15 @@ namespace qe { Ackermanize division For each p/q: - p = 0 & q = 0 => div = delta0 - p != 0 & q = 0 => div = p*delta1 - q != 0 => div*q = p + q != 0 => div_pq*q = p + + For each p/q, p'/q' + p = p', q = q' => div_pq = div_pq' - delta0 stands for 0/0 - delta1 stands for 1/0 - assumption: p * 1/0 = p/0 for p != 0, - so 2/0 != a * 1/0 & a = 2 is unsat by fiat. */ - void purify(expr_ref& fml, div_rewriter_star& rw, expr_ref_vector& paxioms) { - is_pure_proc is_pure(*this); + void ackermanize_div(expr_ref& fml) { + is_pure_proc is_pure(*this); { expr_fast_mark1 visited; quick_for_each_expr(is_pure, visited, fml); @@ -536,11 +533,13 @@ namespace qe { if (is_pure.has_divs()) { arith_util arith(m); proof_ref pr(m); + expr_ref_vector paxioms(m); + div_rewriter_star rw(*this); rw(fml, fml, pr); + paxioms.push_back(fml); vector