void fault_localizationt::run(irep_idt goal_id)
{
  // find failed property
  failed=get_failed_property();
  assert(failed!=bmc.equation.SSA_steps.end());

  if(goal_id==ID_nil)
    goal_id=failed->source.pc->source_location.get_property_id();
  lpointst &lpoints = lpoints_map[goal_id];

  // collect lpoints
  collect_guards(lpoints);

  if(lpoints.empty())
    return;

  status() << "Localizing fault" << eom;

  // pick localization method
  //  if(options.get_option("localize-faults-method")=="TBD")
  localize_linear(lpoints);

  // clear assumptions
  bvt assumptions;
  bmc.prop_conv.set_assumptions(assumptions);
}
void counterexample_beautificationt::operator()(
  bv_cbmct &bv_cbmc,
  const symex_target_equationt &equation,
  const namespacet &ns)
{
  // find failed property

  failed=get_failed_property(bv_cbmc, equation);

  // lock the failed assertion
  bv_cbmc.set_to(literal_exprt(failed->cond_literal), false);

  {
    bv_cbmc.status() << "Beautifying counterexample (guards)"
                     << messaget::eom;

    // compute weights for guards
    typedef std::map<literalt, unsigned> guard_countt;
    guard_countt guard_count;

    for(symex_target_equationt::SSA_stepst::const_iterator
        it=equation.SSA_steps.begin();
        it!=equation.SSA_steps.end(); it++)
    {
      if(it->is_assignment() &&
         it->assignment_type!=symex_targett::assignment_typet::HIDDEN)
      {
        if(!it->guard_literal.is_constant())
          guard_count[it->guard_literal]++;
      }

      // reached failed assertion?
      if(it==failed)
        break;
    }

    // give to propositional minimizer
    prop_minimizet prop_minimize(bv_cbmc);
    prop_minimize.set_message_handler(bv_cbmc.get_message_handler());

    for(const auto &g : guard_count)
      prop_minimize.objective(g.first, g.second);

    // minimize
    prop_minimize();
  }

  {
    bv_cbmc.status() << "Beautifying counterexample (values)"
                     << messaget::eom;

    // get symbols we care about
    minimization_listt minimization_list;

    get_minimization_list(bv_cbmc, equation, minimization_list);

    // minimize
    bv_minimizet bv_minimize(bv_cbmc);
    bv_minimize.set_message_handler(bv_cbmc.get_message_handler());
    bv_minimize(minimization_list);
  }
}