Ejemplo n.º 1
0
 Z3_ast Z3_API Z3_goal_formula(Z3_context c, Z3_goal g, unsigned idx) {
     Z3_TRY;
     LOG_Z3_goal_formula(c, g, idx);
     RESET_ERROR_CODE();
     if (idx >= to_goal_ref(g)->size()) {
         SET_ERROR_CODE(Z3_INVALID_ARG);
         RETURN_Z3(0);
     }
     expr * result = to_goal_ref(g)->form(idx);
     mk_c(c)->save_ast_trail(result);
     RETURN_Z3(of_ast(result));
     Z3_CATCH_RETURN(0);
 }
Ejemplo n.º 2
0
 Z3_model Z3_API Z3_goal_convert_model(Z3_context c, Z3_goal g, Z3_model m) {
     Z3_TRY;
     LOG_Z3_goal_convert_model(c, g, m);
     RESET_ERROR_CODE();
     model_ref new_m;
     Z3_model_ref * m_ref = alloc(Z3_model_ref, *mk_c(c)); 
     mk_c(c)->save_object(m_ref);
     if (m) m_ref->m_model = to_model_ref(m)->copy(); 
     if (to_goal_ref(g)->mc()) 
         (*to_goal_ref(g)->mc())(m_ref->m_model);
     RETURN_Z3(of_model(m_ref));
     Z3_CATCH_RETURN(0);
 }    
Ejemplo n.º 3
0
 void Z3_API Z3_goal_reset(Z3_context c, Z3_goal g) {
     Z3_TRY;
     LOG_Z3_goal_reset(c, g);
     RESET_ERROR_CODE();
     to_goal_ref(g)->reset();
     Z3_CATCH;
 }
Ejemplo n.º 4
0
 unsigned Z3_API Z3_goal_depth(Z3_context c, Z3_goal g) {
     Z3_TRY;
     LOG_Z3_goal_depth(c, g);
     RESET_ERROR_CODE();
     return to_goal_ref(g)->depth();
     Z3_CATCH_RETURN(0);
 }
Ejemplo n.º 5
0
 Z3_bool Z3_API Z3_goal_inconsistent(Z3_context c, Z3_goal g) {
     Z3_TRY;
     LOG_Z3_goal_inconsistent(c, g);
     RESET_ERROR_CODE();
     return to_goal_ref(g)->inconsistent();
     Z3_CATCH_RETURN(Z3_FALSE);
 }
Ejemplo n.º 6
0
 Z3_bool Z3_API Z3_goal_is_decided_unsat(Z3_context c, Z3_goal g) {
     Z3_TRY;
     LOG_Z3_goal_is_decided_unsat(c, g);
     RESET_ERROR_CODE();
     return to_goal_ref(g)->is_decided_unsat();
     Z3_CATCH_RETURN(Z3_FALSE);
 }
Ejemplo n.º 7
0
 double Z3_API Z3_probe_apply(Z3_context c, Z3_probe p, Z3_goal g) {
     Z3_TRY;
     LOG_Z3_probe_apply(c, p, g);
     RESET_ERROR_CODE();
     return to_probe_ref(p)->operator()(*to_goal_ref(g)).get_value();
     Z3_CATCH_RETURN(0);
 }
Ejemplo n.º 8
0
    static Z3_apply_result _tactic_apply(Z3_context c, Z3_tactic t, Z3_goal g, params_ref p) {
        goal_ref new_goal;
        new_goal = alloc(goal, *to_goal_ref(g));
        Z3_apply_result_ref * ref = alloc(Z3_apply_result_ref, mk_c(c)->m());
        mk_c(c)->save_object(ref); 

        unsigned timeout     = p.get_uint("timeout", UINT_MAX);
        bool     use_ctrl_c  = p.get_bool("ctrl_c", false);
        cancel_eh<reslimit> eh(mk_c(c)->m().limit());
        
        to_tactic_ref(t)->updt_params(p);

        api::context::set_interruptable si(*(mk_c(c)), eh);
        {
            scoped_ctrl_c ctrlc(eh, false, use_ctrl_c);
            scoped_timer timer(timeout, &eh);
            try {
                exec(*to_tactic_ref(t), new_goal, ref->m_subgoals, ref->m_mc, ref->m_pc, ref->m_core);
                return of_apply_result(ref);
            }
            catch (z3_exception & ex) {
                mk_c(c)->handle_exception(ex);
                return 0;
            }
        }
    }
Ejemplo n.º 9
0
 void Z3_API Z3_goal_assert(Z3_context c, Z3_goal g, Z3_ast a) {
     Z3_TRY;
     LOG_Z3_goal_assert(c, g, a);
     RESET_ERROR_CODE();
     CHECK_FORMULA(a,);        
     to_goal_ref(g)->assert_expr(to_expr(a));
     Z3_CATCH;
 }
Ejemplo n.º 10
0
 Z3_string Z3_API Z3_goal_to_dimacs_string(Z3_context c, Z3_goal g) {
     Z3_TRY;
     LOG_Z3_goal_to_dimacs_string(c, g);
     RESET_ERROR_CODE();
     std::ostringstream buffer;
     if (!to_goal_ref(g)->is_cnf()) { 
         SET_ERROR_CODE(Z3_INVALID_ARG, "If this is not what you want, then preprocess by optional bit-blasting and applying tseitin-cnf");
         RETURN_Z3(nullptr);
     }
     to_goal_ref(g)->display_dimacs(buffer);
     // Hack for removing the trailing '\n'
     std::string result = buffer.str();
     SASSERT(result.size() > 0);
     result.resize(result.size()-1);
     return mk_c(c)->mk_external_string(result);
     Z3_CATCH_RETURN("");
 }
Ejemplo n.º 11
0
 Z3_goal Z3_API Z3_goal_translate(Z3_context c, Z3_goal g, Z3_context target) {
     Z3_TRY;
     LOG_Z3_goal_translate(c, g, target);
     RESET_ERROR_CODE();
     ast_translation translator(mk_c(c)->m(), mk_c(target)->m());
     Z3_goal_ref * _r = alloc(Z3_goal_ref);
     _r->m_goal       = to_goal_ref(g)->translate(translator);
     mk_c(target)->save_object(_r);
     Z3_goal r = of_goal(_r);
     RETURN_Z3(r);
     Z3_CATCH_RETURN(0);
 }
Ejemplo n.º 12
0
 Z3_string Z3_API Z3_goal_to_string(Z3_context c, Z3_goal g) {
     Z3_TRY;
     LOG_Z3_goal_to_string(c, g);
     RESET_ERROR_CODE();
     std::ostringstream buffer;
     to_goal_ref(g)->display(buffer);
     // Hack for removing the trailing '\n'
     std::string result = buffer.str();
     SASSERT(result.size() > 0);
     result.resize(result.size()-1);
     return mk_c(c)->mk_external_string(result);
     Z3_CATCH_RETURN("");
 }
Ejemplo n.º 13
0
 Z3_goal_prec Z3_API Z3_goal_precision(Z3_context c, Z3_goal g) {
     Z3_TRY;
     LOG_Z3_goal_precision(c, g);
     RESET_ERROR_CODE();
     switch (to_goal_ref(g)->prec()) {
     case goal::PRECISE: return Z3_GOAL_PRECISE;
     case goal::UNDER:   return Z3_GOAL_UNDER;
     case goal::OVER:    return Z3_GOAL_OVER;
     case goal::UNDER_OVER: return Z3_GOAL_UNDER_OVER;
     default:
         UNREACHABLE();
         return Z3_GOAL_UNDER_OVER;
     }
     Z3_CATCH_RETURN(Z3_GOAL_UNDER_OVER);
 }