From 3f6a1eb8c5877f041941e667888f9d519809ec9f Mon Sep 17 00:00:00 2001 From: "Christoph M. Wintersteiger" Date: Tue, 2 Feb 2016 13:01:32 +0000 Subject: [PATCH] Fix for QF_BV core theory detection. --- src/tactic/bv/bv1_blaster_tactic.cpp | 2 -- src/tactic/smtlogics/qfbv_tactic.cpp | 15 ++++++++------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/tactic/bv/bv1_blaster_tactic.cpp b/src/tactic/bv/bv1_blaster_tactic.cpp index 2e142cb13..e7327e7a9 100644 --- a/src/tactic/bv/bv1_blaster_tactic.cpp +++ b/src/tactic/bv/bv1_blaster_tactic.cpp @@ -481,8 +481,6 @@ tactic * mk_bv1_blaster_tactic(ast_manager & m, params_ref const & p) { class is_qfbv_eq_probe : public probe { public: virtual result operator()(goal const & g) { - bv_rewriter rw(g.m()); - if (!rw.hi_div0()) return false; bv1_blaster_tactic t(g.m()); return t.is_target(g); diff --git a/src/tactic/smtlogics/qfbv_tactic.cpp b/src/tactic/smtlogics/qfbv_tactic.cpp index fa188dffd..aeee6dc54 100644 --- a/src/tactic/smtlogics/qfbv_tactic.cpp +++ b/src/tactic/smtlogics/qfbv_tactic.cpp @@ -115,11 +115,12 @@ tactic * mk_qfbv_tactic(ast_manager& m, params_ref const & p, tactic* sat, tacti tactic* preamble_st = mk_qfbv_preamble(m, p); tactic * st = main_p(and_then(preamble_st, // If the user sets HI_DIV0=false, then the formula may contain uninterpreted function - // symbols. In this case, we should not use - cond(mk_is_qfbv_probe(), - cond(mk_is_qfbv_eq_probe(), - and_then(mk_bv1_blaster_tactic(m), - using_params(smt, solver_p)), + // symbols. In this case, we should not use the `sat', but instead `smt'. Alternatively, + // the UFs can be eliminated by eager ackermannization in the preamble. + cond(mk_is_qfbv_eq_probe(), + and_then(mk_bv1_blaster_tactic(m), + using_params(smt, solver_p)), + cond(mk_is_qfbv_probe(), and_then(mk_bit_blaster_tactic(m), when(mk_lt(mk_memory_probe(), mk_const_probe(MEMLIMIT)), and_then(using_params(and_then(mk_simplify_tactic(m), @@ -129,8 +130,8 @@ tactic * mk_qfbv_tactic(ast_manager& m, params_ref const & p, tactic* sat, tacti mk_aig_tactic(), using_params(mk_aig_tactic(), big_aig_p))))), - sat)), - smt))); + sat), + smt)))); st->updt_params(p); return st;