Esempio n. 1
0
 void Z3_API Z3_dec_ref(Z3_context c, Z3_ast a) {
     Z3_TRY;
     LOG_Z3_dec_ref(c, a);
     RESET_ERROR_CODE();
     if (to_ast(a)->get_ref_count() == 0) {
         SET_ERROR_CODE(Z3_DEC_REF_ERROR);
         return;
     }
     mk_c(c)->m().dec_ref(to_ast(a));
     Z3_CATCH;
 }
Esempio n. 2
0
 void Z3_API Z3_ast_map_erase(Z3_context c, Z3_ast_map m, Z3_ast k) {
     Z3_TRY;
     LOG_Z3_ast_map_erase(c, m, k);
     RESET_ERROR_CODE();
     ast * v = 0;
     if (to_ast_map_ref(m).find(to_ast(k), v)) {
         to_ast_map_ref(m).erase(to_ast(k));
         ast_manager & mng = to_ast_map(m)->m;
         mng.dec_ref(to_ast(k));
         mng.dec_ref(v);
     }
     Z3_CATCH;
 }
Esempio n. 3
0
 Z3_bool Z3_API Z3_ast_map_contains(Z3_context c, Z3_ast_map m, Z3_ast k) {
     Z3_TRY;
     LOG_Z3_ast_map_contains(c, m, k);
     RESET_ERROR_CODE();
     return to_ast_map_ref(m).contains(to_ast(k));
     Z3_CATCH_RETURN(Z3_FALSE);
 }
Esempio n. 4
0
 static Z3_lbool _solver_check(Z3_context c, Z3_solver s, unsigned num_assumptions, Z3_ast const assumptions[]) {
     for (unsigned i = 0; i < num_assumptions; i++) {
         if (!is_expr(to_ast(assumptions[i]))) {
             SET_ERROR_CODE(Z3_INVALID_ARG, "assumption is not an expression");
             return Z3_L_UNDEF;
         }
     }
     expr * const * _assumptions = to_exprs(assumptions);
     unsigned timeout     = to_solver(s)->m_params.get_uint("timeout", mk_c(c)->get_timeout());
     unsigned rlimit      = to_solver(s)->m_params.get_uint("rlimit", mk_c(c)->get_rlimit());
     bool     use_ctrl_c  = to_solver(s)->m_params.get_bool("ctrl_c", false);
     cancel_eh<reslimit> eh(mk_c(c)->m().limit());
     api::context::set_interruptable si(*(mk_c(c)), eh);
     lbool result;
     {
         scoped_ctrl_c ctrlc(eh, false, use_ctrl_c);
         scoped_timer timer(timeout, &eh);
         scoped_rlimit _rlimit(mk_c(c)->m().limit(), rlimit);
         try {
             result = to_solver_ref(s)->check_sat(num_assumptions, _assumptions);
         }
         catch (z3_exception & ex) {
             to_solver_ref(s)->set_reason_unknown(eh);
             if (!mk_c(c)->m().canceled()) {
                 mk_c(c)->handle_exception(ex);
             }
             return Z3_L_UNDEF;
         }
     }
     if (result == l_undef) {
         to_solver_ref(s)->set_reason_unknown(eh);
     }
     return static_cast<Z3_lbool>(result);
 }
Esempio n. 5
0
 void Z3_API Z3_inc_ref(Z3_context c, Z3_ast a) {
     Z3_TRY;
     LOG_Z3_inc_ref(c, a);
     RESET_ERROR_CODE();
     mk_c(c)->m().inc_ref(to_ast(a));
     Z3_CATCH;
 }
Esempio n. 6
0
 bool Z3_API Z3_is_as_array(Z3_context c, Z3_ast a) {
     Z3_TRY;
     LOG_Z3_is_as_array(c, a);
     RESET_ERROR_CODE();
     return a && is_expr(to_ast(a)) && is_app_of(to_expr(a), mk_c(c)->get_array_fid(), OP_AS_ARRAY);
     Z3_CATCH_RETURN(false);
 }
Esempio n. 7
0
 void Z3_API Z3_persist_ast(Z3_context c, Z3_ast n, unsigned num_scopes) {
     Z3_TRY;
     LOG_Z3_persist_ast(c, n, num_scopes);
     RESET_ERROR_CODE();
     CHECK_VALID_AST(to_ast(n), );
     mk_c(c)->persist_ast(to_ast(n), num_scopes);
     Z3_CATCH;
 }
Esempio n. 8
0
 void Z3_API Z3_ast_map_insert(Z3_context c, Z3_ast_map m, Z3_ast k, Z3_ast v) {
     Z3_TRY;
     LOG_Z3_ast_map_insert(c, m, k, v);
     RESET_ERROR_CODE();
     ast_manager & mng = to_ast_map(m)->m;
     obj_map<ast, ast*>::obj_map_entry * entry = to_ast_map_ref(m).insert_if_not_there2(to_ast(k), 0);
     if (entry->get_data().m_value == 0) {
         // new entry
         mng.inc_ref(to_ast(k));
         mng.inc_ref(to_ast(v));
         entry->get_data().m_value = to_ast(v);            
     }
     else {
         // replacing entry
         mng.inc_ref(to_ast(v));
         mng.dec_ref(entry->get_data().m_value);
         entry->get_data().m_value = to_ast(v);
     }
     Z3_CATCH;
 }
Esempio n. 9
0
 Z3_func_decl Z3_API Z3_get_as_array_func_decl(Z3_context c, Z3_ast a) {
     Z3_TRY;
     LOG_Z3_get_as_array_func_decl(c, a);
     RESET_ERROR_CODE();
     if (a && is_expr(to_ast(a)) && is_app_of(to_expr(a), mk_c(c)->get_array_fid(), OP_AS_ARRAY)) {
         RETURN_Z3(of_func_decl(to_func_decl(to_app(a)->get_decl()->get_parameter(0).get_ast())));
     }
     else {
         SET_ERROR_CODE(Z3_INVALID_ARG, nullptr);
         RETURN_Z3(nullptr);
     }
     Z3_CATCH_RETURN(nullptr);
 }
Esempio n. 10
0
 Z3_symbol Z3_API Z3_get_quantifier_bound_name(Z3_context c, Z3_ast a, unsigned i) {
     Z3_TRY;
     LOG_Z3_get_quantifier_bound_name(c, a, i);
     RESET_ERROR_CODE();
     ast * _a = to_ast(a);
     if (_a->get_kind() == AST_QUANTIFIER) {
         return of_symbol(to_quantifier(_a)->get_decl_names()[i]);
     }
     else {
         SET_ERROR_CODE(Z3_SORT_ERROR);
         return 0;
     }
     Z3_CATCH_RETURN(0);
 }
Esempio n. 11
0
 unsigned Z3_API Z3_get_quantifier_num_no_patterns(Z3_context c, Z3_ast a) {
     Z3_TRY;
     LOG_Z3_get_quantifier_num_no_patterns(c, a);
     RESET_ERROR_CODE();
     ast * _a = to_ast(a);
     if (_a->get_kind() == AST_QUANTIFIER) {
         return to_quantifier(_a)->get_num_no_patterns();
     }
     else {
         SET_ERROR_CODE(Z3_SORT_ERROR);
         return 0;
     }
     Z3_CATCH_RETURN(0);
 }
Esempio n. 12
0
 Z3_bool Z3_API Z3_is_quantifier_forall(Z3_context c, Z3_ast a) {
     Z3_TRY;
     LOG_Z3_is_quantifier_forall(c, a);
     RESET_ERROR_CODE();
     ast * _a = to_ast(a);
     if (_a->get_kind() == AST_QUANTIFIER) {
         return to_quantifier(_a)->is_forall();
     }
     else {
         SET_ERROR_CODE(Z3_SORT_ERROR);
         return Z3_FALSE;
     }
     Z3_CATCH_RETURN(Z3_FALSE);
 }
Esempio n. 13
0
 Z3_sort Z3_API Z3_get_quantifier_bound_sort(Z3_context c, Z3_ast a, unsigned i) {
     Z3_TRY;
     LOG_Z3_get_quantifier_bound_sort(c, a, i);
     RESET_ERROR_CODE();
     ast * _a = to_ast(a);
     if (_a->get_kind() == AST_QUANTIFIER) {
         Z3_sort r = of_sort(to_quantifier(_a)->get_decl_sort(i));
         RETURN_Z3(r);
     }
     else {
         SET_ERROR_CODE(Z3_SORT_ERROR);
         RETURN_Z3(0);
     }
     Z3_CATCH_RETURN(0);
 }
Esempio n. 14
0
 Z3_pattern Z3_API Z3_get_quantifier_pattern_ast(Z3_context c, Z3_ast a, unsigned i) {
     Z3_TRY;
     LOG_Z3_get_quantifier_pattern_ast(c, a, i);
     RESET_ERROR_CODE();
     ast * _a = to_ast(a);
     if (_a->get_kind() == AST_QUANTIFIER) {
         Z3_pattern r = of_pattern(to_quantifier(_a)->get_patterns()[i]);
         RETURN_Z3(r);
     }
     else {
         SET_ERROR_CODE(Z3_SORT_ERROR);
         RETURN_Z3(0);
     }
     Z3_CATCH_RETURN(0);
 }
Esempio n. 15
0
 Z3_ast Z3_API Z3_ast_map_find(Z3_context c, Z3_ast_map m, Z3_ast k) {
     Z3_TRY;
     LOG_Z3_ast_map_find(c, m, k);
     RESET_ERROR_CODE();
     obj_map<ast, ast*>::obj_map_entry * entry = to_ast_map_ref(m).find_core(to_ast(k));
     if (entry == 0) {
         SET_ERROR_CODE(Z3_INVALID_ARG);
         RETURN_Z3(0);
     }
     else {
         ast * r = entry->get_data().m_value;
         RETURN_Z3(of_ast(r));
     }
     Z3_CATCH_RETURN(0);
 }
Esempio n. 16
0
 Z3_ast Z3_API Z3_get_quantifier_body(Z3_context c, Z3_ast a) {
     Z3_TRY;
     LOG_Z3_get_quantifier_body(c, a);
     RESET_ERROR_CODE();
     ast * _a = to_ast(a);
     if (_a->get_kind() == AST_QUANTIFIER) {
         Z3_ast r = of_ast(to_quantifier(_a)->get_expr());
         RETURN_Z3(r);
     }
     else {
         SET_ERROR_CODE(Z3_SORT_ERROR);
         RETURN_Z3(0);
     }
     Z3_CATCH_RETURN(0);
 }
Esempio n. 17
0
 Z3_ast Z3_API Z3_get_denominator(Z3_context c, Z3_ast a) {
     Z3_TRY;
     LOG_Z3_get_denominator(c, a);
     RESET_ERROR_CODE();
     rational val;
     ast * _a = to_ast(a);
     if (!is_expr(_a) || !mk_c(c)->autil().is_numeral(to_expr(_a), val)) {
         SET_ERROR_CODE(Z3_INVALID_ARG, nullptr);
         RETURN_Z3(nullptr);
     }
     expr * r = mk_c(c)->autil().mk_numeral(denominator(val), true);
     mk_c(c)->save_ast_trail(r);
     RETURN_Z3(of_expr(r));
     Z3_CATCH_RETURN(nullptr);
 }