Example #1
0
 void operator()(goal_ref const & g, 
                 goal_ref_buffer & result, 
                 model_converter_ref & mc, 
                 proof_converter_ref & pc,
                 expr_dependency_ref & core) {
     mc = 0; pc = 0; core = 0;
     
     if (!is_target(*g))
         throw tactic_exception("bv1 blaster cannot be applied to goal");
     
     tactic_report report("bv1-blaster", *g);
     m_num_steps = 0;
     
     bool proofs_enabled = g->proofs_enabled();
     expr_ref   new_curr(m());
     proof_ref  new_pr(m());
     unsigned   size = g->size();
     for (unsigned idx = 0; idx < size; idx++) {
         if (g->inconsistent())
             break;
         expr * curr = g->form(idx);
         m_rw(curr, new_curr, new_pr);
         m_num_steps += m_rw.get_num_steps();
         if (proofs_enabled) {
             proof * pr = g->pr(idx);
             new_pr     = m().mk_modus_ponens(pr, new_pr);
         }
         g->update(idx, new_curr, new_pr, g->dep(idx));
     }
     
     if (g->models_enabled())
         mc = mk_bv1_blaster_model_converter(m(), m_rw.cfg().m_const2bits);
     g->inc_depth();
     result.push_back(g.get());
     m_rw.cfg().cleanup();
 }
Example #2
0
 bool is_target(goal const & g) const {
     expr_fast_mark1 visited;
     unsigned sz = g.size();
     visitor proc(m_rw.cfg().butil().get_family_id());
     try {
         for (unsigned i = 0; i < sz; i++) {
             expr * f = g.form(i);
             for_each_expr_core<visitor, expr_fast_mark1, false, true>(proc, visited, f);
         }
     }
     catch (not_target) {
         return false;
     }
     return true;
 }
 void updt_params(params_ref const & p) {
     m_rw.cfg().updt_params(p);
 }