Exemplo n.º 1
0
 Z3_ast Z3_API Z3_fpa_get_numeral_sign_bv(Z3_context c, Z3_ast t) {
     Z3_TRY;
     LOG_Z3_fpa_get_numeral_sign_bv(c, t);
     RESET_ERROR_CODE();
     CHECK_NON_NULL(t, nullptr);
     CHECK_VALID_AST(t, nullptr);
     ast_manager & m = mk_c(c)->m();
     mpf_manager & mpfm = mk_c(c)->fpautil().fm();
     family_id fid = mk_c(c)->get_fpa_fid();
     fpa_decl_plugin * plugin = (fpa_decl_plugin*)m.get_plugin(fid);
     api::context * ctx = mk_c(c);
     expr * e = to_expr(t);
     if (!is_app(e) || is_app_of(e, fid, OP_FPA_NAN) || !is_fp(c, t)) {
         SET_ERROR_CODE(Z3_INVALID_ARG);
         RETURN_Z3(nullptr);
     }
     scoped_mpf val(mpfm);
     bool r = plugin->is_numeral(to_expr(t), val);
     if (!r || mpfm.is_nan(val)) {
         SET_ERROR_CODE(Z3_INVALID_ARG);
         return nullptr;
     }
     app * a;
     if (mpfm.is_pos(val))
         a = ctx->bvutil().mk_numeral(0, 1);
     else
         a = ctx->bvutil().mk_numeral(1, 1);
     mk_c(c)->save_ast_trail(a);
     RETURN_Z3(of_expr(a));
     Z3_CATCH_RETURN(nullptr);
 }
Exemplo n.º 2
0
 Z3_ast Z3_API Z3_fpa_get_numeral_significand_bv(Z3_context c, Z3_ast t) {
     Z3_TRY;
     LOG_Z3_fpa_get_numeral_significand_bv(c, t);
     RESET_ERROR_CODE();
     CHECK_NON_NULL(t, nullptr);
     CHECK_VALID_AST(t, nullptr);
     ast_manager & m = mk_c(c)->m();
     mpf_manager & mpfm = mk_c(c)->fpautil().fm();
     unsynch_mpq_manager & mpqm = mpfm.mpq_manager();
     family_id fid = mk_c(c)->get_fpa_fid();
     fpa_decl_plugin * plugin = (fpa_decl_plugin*)m.get_plugin(fid);
     SASSERT(plugin != 0);
     expr * e = to_expr(t);
     if (!is_app(e) || is_app_of(e, fid, OP_FPA_NAN) || !is_fp(c, t)) {
         SET_ERROR_CODE(Z3_INVALID_ARG);
         RETURN_Z3(nullptr);
     }
     scoped_mpf val(mpfm);
     bool r = plugin->is_numeral(e, val);
     if (!r || !(mpfm.is_normal(val) || mpfm.is_denormal(val) || mpfm.is_zero(val) || mpfm.is_inf(val))) {
         SET_ERROR_CODE(Z3_INVALID_ARG);
         RETURN_Z3(nullptr);
     }
     unsigned sbits = val.get().get_sbits();
     scoped_mpq q(mpqm);
     mpqm.set(q, mpfm.sig(val));
     if (mpfm.is_inf(val)) mpqm.set(q, 0);
     app * a = mk_c(c)->bvutil().mk_numeral(q.get(), sbits-1);
     mk_c(c)->save_ast_trail(a);
     RETURN_Z3(of_expr(a));
     Z3_CATCH_RETURN(nullptr);
 }
Exemplo n.º 3
0
    Z3_ast Z3_API Z3_model_extrapolate (Z3_context c,
                                        Z3_model m,
                                        Z3_ast fml)
    {
        Z3_TRY;
        LOG_Z3_model_extrapolate (c, m, fml);
        RESET_ERROR_CODE();

        model_ref model (to_model_ref (m));
        expr_ref_vector facts (mk_c(c)->m ());
        facts.push_back (to_expr (fml));
        flatten_and (facts);

        spacer::model_evaluator_util mev (mk_c(c)->m());
        mev.set_model (*model);

        expr_ref_vector lits (mk_c(c)->m());
        spacer::compute_implicant_literals (mev, facts, lits);

        expr_ref result (mk_c(c)->m ());
        result = mk_and (lits);
        mk_c(c)->save_ast_trail (result.get ());

        return of_expr (result.get ());
        Z3_CATCH_RETURN(0);
    }
Exemplo n.º 4
0
    Z3_ast Z3_API Z3_qe_model_project (Z3_context c,
                                       Z3_model m,
                                       unsigned num_bounds,
                                       Z3_app const bound[],
                                       Z3_ast body)
    {
        Z3_TRY;
        LOG_Z3_qe_model_project (c, m, num_bounds, bound, body);
        RESET_ERROR_CODE();
      
        app_ref_vector vars(mk_c(c)->m ());
        if (!to_apps(num_bounds, bound, vars)) {
            SET_ERROR_CODE (Z3_INVALID_ARG);
            RETURN_Z3(0);
        }

        expr_ref result (mk_c(c)->m ());
        result = to_expr (body);
        model_ref model (to_model_ref (m));
        spacer::qe_project (mk_c(c)->m (), vars, result, model);
        mk_c(c)->save_ast_trail (result.get ());

        return of_expr (result.get ());
        Z3_CATCH_RETURN(0);
    }
Exemplo n.º 5
0
 Z3_ast Z3_API Z3_func_entry_get_value(Z3_context c, Z3_func_entry e) {
     Z3_TRY;
     LOG_Z3_func_entry_get_value(c, e);
     RESET_ERROR_CODE();
     expr * v = to_func_entry_ref(e)->get_result();
     RETURN_Z3(of_expr(v));
     Z3_CATCH_RETURN(0);
 }
Exemplo n.º 6
0
 Z3_ast Z3_API Z3_fixedpoint_get_cover_delta(Z3_context c, Z3_fixedpoint d, int level, Z3_func_decl pred) {
     Z3_TRY;
     LOG_Z3_fixedpoint_get_cover_delta(c, d, level, pred);
     RESET_ERROR_CODE();
     expr_ref r = to_fixedpoint_ref(d)->get_cover_delta(level, to_func_decl(pred));
     mk_c(c)->save_ast_trail(r);
     RETURN_Z3(of_expr(r.get()));
     Z3_CATCH_RETURN(0);
 }
Exemplo n.º 7
0
 Z3_ast Z3_API Z3_func_interp_get_else(Z3_context c, Z3_func_interp f) {
     Z3_TRY;
     LOG_Z3_func_interp_get_else(c, f);
     RESET_ERROR_CODE();
     CHECK_NON_NULL(f, 0);
     expr * e = to_func_interp_ref(f)->get_else();
     RETURN_Z3(of_expr(e));
     Z3_CATCH_RETURN(0);
 }
Exemplo n.º 8
0
 Z3_ast Z3_API Z3_fixedpoint_get_answer(Z3_context c, Z3_fixedpoint d) {
     Z3_TRY;
     LOG_Z3_fixedpoint_get_answer(c, d);
     RESET_ERROR_CODE();
     expr* e = to_fixedpoint_ref(d)->ctx().get_answer_as_formula();
     mk_c(c)->save_ast_trail(e);
     RETURN_Z3(of_expr(e));
     Z3_CATCH_RETURN(0);
 }
Exemplo n.º 9
0
 Z3_ast Z3_API Z3_fixedpoint_get_reachable(Z3_context c, Z3_fixedpoint d, Z3_func_decl pred) {
     Z3_TRY;
     LOG_Z3_fixedpoint_get_reachable(c, d, pred);
     RESET_ERROR_CODE();
     expr_ref r = to_fixedpoint_ref(d)->ctx().get_reachable(to_func_decl(pred));
     mk_c(c)->save_ast_trail(r);        
     RETURN_Z3(of_expr(r.get()));
     Z3_CATCH_RETURN(nullptr);
 }
Exemplo n.º 10
0
 Z3_ast Z3_API Z3_mk_fpa_rna(Z3_context c) {
     Z3_TRY;
     LOG_Z3_mk_fpa_rna(c);
     RESET_ERROR_CODE();
     api::context * ctx = mk_c(c);
     expr * a = ctx->fpautil().mk_round_nearest_ties_to_away();
     ctx->save_ast_trail(a);
     RETURN_Z3(of_expr(a));
     Z3_CATCH_RETURN(nullptr);
 }
Exemplo n.º 11
0
 Z3_ast Z3_API Z3_mk_fpa_rtz(Z3_context c) {
     Z3_TRY;
     LOG_Z3_mk_fpa_rtz(c);
     RESET_ERROR_CODE();
     api::context * ctx = mk_c(c);
     expr * a = ctx->fpautil().mk_round_toward_zero();
     ctx->save_ast_trail(a);
     RETURN_Z3(of_expr(a));
     Z3_CATCH_RETURN(nullptr);
 }
Exemplo n.º 12
0
 Z3_ast Z3_API Z3_func_interp_get_else(Z3_context c, Z3_func_interp f) {
     Z3_TRY;
     LOG_Z3_func_interp_get_else(c, f);
     RESET_ERROR_CODE();
     CHECK_NON_NULL(f, nullptr);
     expr * e = to_func_interp_ref(f)->get_else();
     if (e) {
         mk_c(c)->save_ast_trail(e);
     }
     RETURN_Z3(of_expr(e));
     Z3_CATCH_RETURN(nullptr);
 }
Exemplo n.º 13
0
 Z3_ast Z3_API Z3_func_entry_get_arg(Z3_context c, Z3_func_entry e, unsigned i) {
     Z3_TRY;
     LOG_Z3_func_entry_get_arg(c, e, i);
     RESET_ERROR_CODE();
     if (i >= to_func_entry(e)->m_func_interp->get_arity()) {
         SET_ERROR_CODE(Z3_IOB, nullptr);
         RETURN_Z3(nullptr);
     }
     expr * r = to_func_entry(e)->m_func_entry->get_arg(i);
     RETURN_Z3(of_expr(r));
     Z3_CATCH_RETURN(nullptr);
 }    
Exemplo n.º 14
0
 Z3_ast Z3_API Z3_model_get_const_interp(Z3_context c, Z3_model m, Z3_func_decl a) {
     Z3_TRY;
     LOG_Z3_model_get_const_interp(c, m, a);
     RESET_ERROR_CODE();
     CHECK_NON_NULL(m, 0);
     expr * r = to_model_ref(m)->get_const_interp(to_func_decl(a));
     if (!r) {
         SET_ERROR_CODE(Z3_INVALID_ARG);
         RETURN_Z3(0);
     }
     RETURN_Z3(of_expr(r));
     Z3_CATCH_RETURN(0);
 }
Exemplo n.º 15
0
 Z3_ast_opt Z3_API Z3_model_get_const_interp(Z3_context c, Z3_model m, Z3_func_decl a) {
     Z3_TRY;
     LOG_Z3_model_get_const_interp(c, m, a);
     RESET_ERROR_CODE();
     CHECK_NON_NULL(m, nullptr);
     expr * r = to_model_ref(m)->get_const_interp(to_func_decl(a));
     if (!r) {
         RETURN_Z3(nullptr);
     }
     mk_c(c)->save_ast_trail(r);
     RETURN_Z3(of_expr(r));
     Z3_CATCH_RETURN(nullptr);
 }
Exemplo n.º 16
0
 Z3_ast Z3_API Z3_mk_fpa_round_to_integral(Z3_context c, Z3_ast rm, Z3_ast t) {
     Z3_TRY;
     LOG_Z3_mk_fpa_round_to_integral(c, rm, t);
     RESET_ERROR_CODE();
     if (!is_rm(c, rm) || !is_fp(c, t)) {
         SET_ERROR_CODE(Z3_INVALID_ARG, "rm and fp sorts expected");
         RETURN_Z3(nullptr);
     }
     api::context * ctx = mk_c(c);
     expr * a = ctx->fpautil().mk_round_to_integral(to_expr(rm), to_expr(t));
     ctx->save_ast_trail(a);
     RETURN_Z3(of_expr(a));
     Z3_CATCH_RETURN(nullptr);
 }
Exemplo n.º 17
0
 Z3_ast Z3_API Z3_mk_fpa_fp(Z3_context c, Z3_ast sgn, Z3_ast exp, Z3_ast sig) {
     Z3_TRY;
     LOG_Z3_mk_fpa_fp(c, sgn, exp, sig);
     RESET_ERROR_CODE();
     if (!is_bv(c, sgn) || !is_bv(c, exp) || !is_bv(c, sig)) {
         SET_ERROR_CODE(Z3_INVALID_ARG);
         RETURN_Z3(nullptr);
     }
     api::context * ctx = mk_c(c);
     expr * a = ctx->fpautil().mk_fp(to_expr(sgn), to_expr(exp), to_expr(sig));
     ctx->save_ast_trail(a);
     RETURN_Z3(of_expr(a));
     Z3_CATCH_RETURN(nullptr);
 }
Exemplo n.º 18
0
 Z3_ast Z3_API Z3_mk_fpa_to_real(Z3_context c, Z3_ast t) {
     Z3_TRY;
     LOG_Z3_mk_fpa_to_real(c, t);
     RESET_ERROR_CODE();
     if (!is_fp(c, t)) {
         SET_ERROR_CODE(Z3_INVALID_ARG);
         RETURN_Z3(nullptr);
     }
     api::context * ctx = mk_c(c);
     expr * a = ctx->fpautil().mk_to_real(to_expr(t));
     ctx->save_ast_trail(a);
     RETURN_Z3(of_expr(a));
     Z3_CATCH_RETURN(nullptr);
 }
Exemplo n.º 19
0
 Z3_ast Z3_API Z3_mk_fpa_eq(Z3_context c, Z3_ast t1, Z3_ast t2) {
     Z3_TRY;
     LOG_Z3_mk_fpa_eq(c, t1, t2);
     RESET_ERROR_CODE();
     if (!is_fp(c, t1) || !is_fp(c, t2)) {
         SET_ERROR_CODE(Z3_INVALID_ARG);
         RETURN_Z3(nullptr);
     }
     api::context * ctx = mk_c(c);
     expr * a = ctx->fpautil().mk_float_eq(to_expr(t1), to_expr(t2));
     ctx->save_ast_trail(a);
     RETURN_Z3(of_expr(a));
     Z3_CATCH_RETURN(nullptr);
 }
Exemplo n.º 20
0
 Z3_ast Z3_API Z3_mk_fpa_to_sbv(Z3_context c, Z3_ast rm, Z3_ast t, unsigned sz) {
     Z3_TRY;
     LOG_Z3_mk_fpa_to_sbv(c, rm, t, sz);
     RESET_ERROR_CODE();
     if (!is_rm(c, rm) || !is_fp(c, t)) {
         SET_ERROR_CODE(Z3_INVALID_ARG);
         RETURN_Z3(nullptr);
     }
     api::context * ctx = mk_c(c);
     expr * a = ctx->fpautil().mk_to_sbv(to_expr(rm), to_expr(t), sz);
     ctx->save_ast_trail(a);
     RETURN_Z3(of_expr(a));
     Z3_CATCH_RETURN(nullptr);
 }
Exemplo n.º 21
0
 Z3_ast Z3_API Z3_mk_fpa_nan(Z3_context c, Z3_sort s) {
     Z3_TRY;
     LOG_Z3_mk_fpa_nan(c, s);
     RESET_ERROR_CODE();
     CHECK_VALID_AST(s, nullptr);
     if (!is_fp_sort(c, s)) {
         SET_ERROR_CODE(Z3_INVALID_ARG);
         RETURN_Z3(nullptr);
     }
     api::context * ctx = mk_c(c);
     expr * a = ctx->fpautil().mk_nan(to_sort(s));
     ctx->save_ast_trail(a);
     RETURN_Z3(of_expr(a));
     Z3_CATCH_RETURN(nullptr);
 }
Exemplo n.º 22
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);
 }
Exemplo n.º 23
0
 Z3_ast Z3_API Z3_mk_fpa_zero(Z3_context c, Z3_sort s, Z3_bool negative) {
     Z3_TRY;
     LOG_Z3_mk_fpa_inf(c, s, negative);
     RESET_ERROR_CODE();
     CHECK_VALID_AST(s, nullptr);
     if (!is_fp_sort(c, s)) {
         SET_ERROR_CODE(Z3_INVALID_ARG);
         RETURN_Z3(nullptr);
     }
     api::context * ctx = mk_c(c);
     expr * a = negative != 0 ? ctx->fpautil().mk_nzero(to_sort(s)) :
                                ctx->fpautil().mk_pzero(to_sort(s));
     ctx->save_ast_trail(a);
     RETURN_Z3(of_expr(a));
     Z3_CATCH_RETURN(nullptr);
 }
Exemplo n.º 24
0
 Z3_ast Z3_API Z3_mk_fpa_numeral_double(Z3_context c, double v, Z3_sort ty) {
     Z3_TRY;
     LOG_Z3_mk_fpa_numeral_double(c, v, ty);
     RESET_ERROR_CODE();
     if (!is_fp_sort(c, ty)) {
         SET_ERROR_CODE(Z3_INVALID_ARG);
         RETURN_Z3(nullptr);
     }
     api::context * ctx = mk_c(c);
     scoped_mpf tmp(ctx->fpautil().fm());
     ctx->fpautil().fm().set(tmp, ctx->fpautil().get_ebits(to_sort(ty)), ctx->fpautil().get_sbits(to_sort(ty)), v);
     expr * a = ctx->fpautil().mk_value(tmp);
     ctx->save_ast_trail(a);
     RETURN_Z3(of_expr(a));
     Z3_CATCH_RETURN(nullptr);
 }
Exemplo n.º 25
0
 Z3_ast Z3_API Z3_get_algebraic_number_upper(Z3_context c, Z3_ast a, unsigned precision) {
     Z3_TRY;
     LOG_Z3_get_algebraic_number_upper(c, a, precision);
     RESET_ERROR_CODE();
     if (!Z3_is_algebraic_number(c, a)) {
         SET_ERROR_CODE(Z3_INVALID_ARG, nullptr);
         RETURN_Z3(nullptr);
     }
     expr * e = to_expr(a);
     algebraic_numbers::anum const & val = mk_c(c)->autil().to_irrational_algebraic_numeral(e);
     rational l;
     mk_c(c)->autil().am().get_upper(val, l, precision);
     expr * r = mk_c(c)->autil().mk_numeral(l, false);
     mk_c(c)->save_ast_trail(r);
     RETURN_Z3(of_expr(r));
     Z3_CATCH_RETURN(nullptr);
 }
Exemplo n.º 26
0
 Z3_ast Z3_API Z3_mk_fpa_to_fp_unsigned(Z3_context c, Z3_ast rm, Z3_ast t, Z3_sort s) {
     Z3_TRY;
     LOG_Z3_mk_fpa_to_fp_unsigned(c, rm, t, s);
     RESET_ERROR_CODE();
     api::context * ctx = mk_c(c);
     fpa_util & fu = ctx->fpautil();
     if (!fu.is_rm(to_expr(rm)) ||
         !ctx->bvutil().is_bv(to_expr(t)) ||
         !fu.is_float(to_sort(s))) {
         SET_ERROR_CODE(Z3_INVALID_ARG);
         return nullptr;
     }
     expr * a = fu.mk_to_fp_unsigned(to_sort(s), to_expr(rm), to_expr(t));
     ctx->save_ast_trail(a);
     RETURN_Z3(of_expr(a));
     Z3_CATCH_RETURN(nullptr);
 }
Exemplo n.º 27
0
 Z3_ast Z3_API Z3_mk_fpa_to_fp_int_real(Z3_context c, Z3_ast rm, Z3_ast exp, Z3_ast sig, Z3_sort s) {
     Z3_TRY;
     LOG_Z3_mk_fpa_to_fp_int_real(c, rm, exp, sig, s);
     RESET_ERROR_CODE();
     api::context * ctx = mk_c(c);
     fpa_util & fu = ctx->fpautil();
     if (!fu.is_rm(to_expr(rm)) ||
         !ctx->autil().is_int(to_expr(exp)) ||
         !ctx->autil().is_real(to_expr(sig)) ||
         !fu.is_float(to_sort(s))) {
         SET_ERROR_CODE(Z3_INVALID_ARG);
         return nullptr;
     }
     expr * a = fu.mk_to_fp(to_sort(s), to_expr(rm), to_expr(exp), to_expr(sig));
     ctx->save_ast_trail(a);
     RETURN_Z3(of_expr(a));
     Z3_CATCH_RETURN(nullptr);
 }
Exemplo n.º 28
0
 Z3_ast Z3_API Z3_mk_sub(Z3_context c, unsigned num_args, Z3_ast const args[]) {
     Z3_TRY;
     LOG_Z3_mk_sub(c, num_args, args);
     RESET_ERROR_CODE();
     if (num_args == 0) {
         SET_ERROR_CODE(Z3_INVALID_ARG, nullptr);
         RETURN_Z3(nullptr);
     }
     expr* r = to_expr(args[0]);
     for (unsigned i = 1; i < num_args; ++i) {
         expr* args1[2] = { r, to_expr(args[i]) };
         r = mk_c(c)->m().mk_app(mk_c(c)->get_arith_fid(), OP_SUB, 0, nullptr, 2, args1);
         check_sorts(c, r);
     }
     mk_c(c)->save_ast_trail(r);
     RETURN_Z3(of_expr(r));
     Z3_CATCH_RETURN(nullptr);
 }
Exemplo n.º 29
0
 Z3_ast Z3_API Z3_mk_fpa_numeral_int64_uint64(Z3_context c, Z3_bool sgn, int64_t exp, uint64_t sig, Z3_sort ty) {
     Z3_TRY;
     LOG_Z3_mk_fpa_numeral_int64_uint64(c, sgn, exp, sig, ty);
     RESET_ERROR_CODE();
     if (!is_fp_sort(c, ty)) {
         SET_ERROR_CODE(Z3_INVALID_ARG);
         RETURN_Z3(nullptr);
     }
     api::context * ctx = mk_c(c);
     scoped_mpf tmp(ctx->fpautil().fm());
     ctx->fpautil().fm().set(tmp,
                             ctx->fpautil().get_ebits(to_sort(ty)),
                             ctx->fpautil().get_sbits(to_sort(ty)),
                             sgn != 0, exp, sig);
     expr * a = ctx->fpautil().mk_value(tmp);
     ctx->save_ast_trail(a);
     RETURN_Z3(of_expr(a));
     Z3_CATCH_RETURN(nullptr);
 }
Exemplo n.º 30
0
 Z3_ast Z3_API Z3_mk_fpa_to_fp_bv(Z3_context c, Z3_ast bv, Z3_sort s) {
     Z3_TRY;
     LOG_Z3_mk_fpa_to_fp_bv(c, bv, s);
     RESET_ERROR_CODE();
     if (!is_bv(c, bv) || !is_fp_sort(c, s)) {
         SET_ERROR_CODE(Z3_INVALID_ARG);
         RETURN_Z3(nullptr);
     }
     api::context * ctx = mk_c(c);
     fpa_util & fu = ctx->fpautil();
     if (!ctx->bvutil().is_bv(to_expr(bv)) ||
         !fu.is_float(to_sort(s))) {
         SET_ERROR_CODE(Z3_INVALID_ARG);
         return nullptr;
     }
     expr * a = fu.mk_to_fp(to_sort(s), to_expr(bv));
     ctx->save_ast_trail(a);
     RETURN_Z3(of_expr(a));
     Z3_CATCH_RETURN(nullptr);
 }