Exemplo n.º 1
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.º 2
0
 Z3_bool Z3_API Z3_fpa_get_numeral_sign(Z3_context c, Z3_ast t, int * sgn) {
     Z3_TRY;
     LOG_Z3_fpa_get_numeral_sign(c, t, sgn);
     RESET_ERROR_CODE();
     CHECK_NON_NULL(t, 0);
     CHECK_VALID_AST(t, 0);
     if (sgn == nullptr) {
         SET_ERROR_CODE(Z3_INVALID_ARG);
         return 0;
     }
     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);
     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 0;
     }
     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 0;
     }
     *sgn = mpfm.sgn(val);
     return r;
     Z3_CATCH_RETURN(0);
 }
Exemplo n.º 3
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.º 4
0
 Z3_string Z3_API Z3_fpa_get_numeral_significand_string(Z3_context c, Z3_ast t) {
     Z3_TRY;
     LOG_Z3_fpa_get_numeral_significand_string(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 "";
     }
     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 "";
     }
     unsigned sbits = val.get().get_sbits();
     scoped_mpq q(mpqm);
     mpqm.set(q, mpfm.sig(val));
     if (!mpfm.is_denormal(val)) mpqm.add(q, mpfm.m_powers2(sbits - 1), q);
     mpqm.div(q, mpfm.m_powers2(sbits - 1), q);
     if (mpfm.is_inf(val)) mpqm.set(q, 0);
     std::stringstream ss;
     mpqm.display_decimal(ss, q, sbits);
     return mk_c(c)->mk_external_string(ss.str());
     Z3_CATCH_RETURN("");
 }
Exemplo n.º 5
0
 unsigned Z3_API Z3_fpa_get_sbits(Z3_context c, Z3_sort s) {
     Z3_TRY;
     LOG_Z3_fpa_get_sbits(c, s);
     RESET_ERROR_CODE();
     CHECK_NON_NULL(s, 0);
     CHECK_VALID_AST(s, 0);
     if (!is_fp_sort(c, s)) {
         SET_ERROR_CODE(Z3_INVALID_ARG);
         RETURN_Z3(0);
     }
     return mk_c(c)->fpautil().get_sbits(to_sort(s));
     Z3_CATCH_RETURN(0);
 }
Exemplo n.º 6
0
 Z3_sort Z3_API Z3_get_array_sort_range(Z3_context c, Z3_sort t) {
     Z3_TRY;
     LOG_Z3_get_array_sort_range(c, t);
     RESET_ERROR_CODE(); 
     CHECK_VALID_AST(t, 0);
     if (to_sort(t)->get_family_id() == mk_c(c)->get_array_fid() && 
         to_sort(t)->get_decl_kind() == ARRAY_SORT) {
         Z3_sort r = reinterpret_cast<Z3_sort>(to_sort(t)->get_parameter(1).get_ast());
         RETURN_Z3(r);
     }
     SET_ERROR_CODE(Z3_INVALID_ARG);
     RETURN_Z3(0);
     Z3_CATCH_RETURN(0);
 }
Exemplo n.º 7
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.º 8
0
 Z3_ast Z3_API Z3_mk_fpa_to_ieee_bv(Z3_context c, Z3_ast t) {
     Z3_TRY;
     LOG_Z3_mk_fpa_to_ieee_bv(c, t);
     RESET_ERROR_CODE();
     CHECK_NON_NULL(t, nullptr);
     CHECK_VALID_AST(t, nullptr);
     if (!is_fp(c, t)) {
         SET_ERROR_CODE(Z3_INVALID_ARG);
         RETURN_Z3(nullptr);
     }
     api::context * ctx = mk_c(c);
     Z3_ast r = of_ast(ctx->fpautil().mk_to_ieee_bv(to_expr(t)));
     RETURN_Z3(r);
     Z3_CATCH_RETURN(nullptr);
 }
Exemplo n.º 9
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.º 10
0
 Z3_bool Z3_API Z3_fpa_get_numeral_exponent_int64(Z3_context c, Z3_ast t, int64_t * n, Z3_bool biased) {
     Z3_TRY;
     LOG_Z3_fpa_get_numeral_exponent_int64(c, t, n, biased);
     RESET_ERROR_CODE();
     CHECK_NON_NULL(t, 0);
     CHECK_VALID_AST(t, 0);
     if (n == nullptr) {
         SET_ERROR_CODE(Z3_INVALID_ARG);
         return 0;
     }
     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(mk_c(c)->get_fpa_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);
         *n = 0;
         return 0;
     }
     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);
         *n = 0;
         return 0;
     }
     unsigned ebits = val.get().get_ebits();
     if (biased) {
         *n = mpfm.is_zero(val) ? 0 :
              mpfm.is_inf(val) ? mpfm.mk_top_exp(ebits) :
              mpfm.bias_exp(ebits, mpfm.exp(val));
     }
     else {
         *n = mpfm.is_zero(val) ? 0 :
              mpfm.is_inf(val) ? mpfm.mk_top_exp(ebits) :
               mpfm.is_denormal(val) ? mpfm.mk_min_exp(ebits) :
              mpfm.exp(val);
     }
     return 1;
     Z3_CATCH_RETURN(0);
 }
Exemplo n.º 11
0
 Z3_string Z3_API Z3_fpa_get_numeral_exponent_string(Z3_context c, Z3_ast t, Z3_bool biased) {
     Z3_TRY;
     LOG_Z3_fpa_get_numeral_exponent_string(c, t, biased);
     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(mk_c(c)->get_fpa_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 "";
     }
     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 "";
     }
     unsigned ebits = val.get().get_ebits();
     mpf_exp_t exp;
     if (biased) {
         exp = mpfm.is_zero(val) ? 0 :
               mpfm.is_inf(val) ? mpfm.mk_top_exp(ebits) :
               mpfm.bias_exp(ebits, mpfm.exp(val));            
     }
     else {
         exp = mpfm.is_zero(val) ? 0 :
               mpfm.is_inf(val) ? mpfm.mk_top_exp(ebits) :
               mpfm.is_denormal(val) ? mpfm.mk_min_exp(ebits) :
               mpfm.exp(val);
     }
     std::stringstream ss;
     ss << exp;
     return mk_c(c)->mk_external_string(ss.str());
     Z3_CATCH_RETURN("");
 }
Exemplo n.º 12
0
 Z3_ast Z3_API Z3_fpa_get_numeral_exponent_bv(Z3_context c, Z3_ast t, Z3_bool biased) {
     Z3_TRY;
     LOG_Z3_fpa_get_numeral_exponent_bv(c, t, biased);
     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);
     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 ebits = val.get().get_ebits();
     mpf_exp_t exp;
     if (biased) {
         exp = mpfm.is_zero(val) ? 0 :
               mpfm.is_inf(val) ? mpfm.mk_top_exp(ebits) :
               mpfm.bias_exp(ebits, mpfm.exp(val));
     }
     else {
         exp = mpfm.is_zero(val) ? 0 :
               mpfm.is_inf(val) ? mpfm.mk_top_exp(ebits) :
               mpfm.is_denormal(val) ? mpfm.mk_min_exp(ebits) :
               mpfm.exp(val);
     }
     app * a = mk_c(c)->bvutil().mk_numeral(exp, ebits);
     mk_c(c)->save_ast_trail(a);
     RETURN_Z3(of_expr(a));
     Z3_CATCH_RETURN(nullptr);
 }
Exemplo n.º 13
0
 Z3_bool Z3_API Z3_fpa_get_numeral_significand_uint64(Z3_context c, Z3_ast t, uint64_t * n) {
     Z3_TRY;
     LOG_Z3_fpa_get_numeral_significand_uint64(c, t, n);
     RESET_ERROR_CODE();
     CHECK_NON_NULL(t, 0);
     CHECK_VALID_AST(t, 0);
     if (n == nullptr) {
         SET_ERROR_CODE(Z3_INVALID_ARG);
         return 0;
     }
     ast_manager & m = mk_c(c)->m();
     mpf_manager & mpfm = mk_c(c)->fpautil().fm();
     unsynch_mpz_manager & mpzm = mpfm.mpz_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);
         *n = 0;
         return 0;
     }
     scoped_mpf val(mpfm);
     bool r = plugin->is_numeral(e, val);
     const mpz & z = mpfm.sig(val);
     if (!r ||
         !(mpfm.is_normal(val) || mpfm.is_denormal(val) || mpfm.is_zero(val) || mpfm.is_inf(val)) ||
         !mpzm.is_uint64(z)) {
         SET_ERROR_CODE(Z3_INVALID_ARG);
         *n = 0;
         return 0;
     }
     *n = mpzm.get_uint64(z);
     return 1;
     Z3_CATCH_RETURN(0);
 }