Example #1
0
 unsigned Z3_API Z3_get_pattern_num_terms(Z3_context c, Z3_pattern p) {
     Z3_TRY;
     LOG_Z3_get_pattern_num_terms(c, p);
     RESET_ERROR_CODE();
     app* _p = to_pattern(p);
     if (mk_c(c)->m().is_pattern(_p)) {
         return _p->get_num_args();
     }
     else {
         SET_ERROR_CODE(Z3_SORT_ERROR);
         return 0;            
     }
     Z3_CATCH_RETURN(0);
 }
Example #2
0
 Z3_string Z3_API Z3_stats_to_string(Z3_context c, Z3_stats s) {
     Z3_TRY;
     LOG_Z3_stats_to_string(c, s);
     RESET_ERROR_CODE();
     std::ostringstream buffer;
     to_stats_ref(s).display_smt2(buffer);
     std::string result = buffer.str();
     // Hack for removing the trailing '\n'
     result = buffer.str();
     SASSERT(result.size() > 0);
     result.resize(result.size()-1);
     return mk_c(c)->mk_external_string(result);
     Z3_CATCH_RETURN("");
 }
Example #3
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, "fp sort expected");
         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);
 }
Example #4
0
 Z3_ast_vector Z3_API Z3_fixedpoint_simplify_rules(
     Z3_context c,
     Z3_fixedpoint d,
     unsigned num_rules,
     Z3_ast _rules[],
     unsigned num_outputs,
     Z3_func_decl _outputs[]) {
     Z3_TRY;
     LOG_Z3_fixedpoint_simplify_rules(c, d, num_rules, _rules, num_outputs, _outputs);
     RESET_ERROR_CODE();        
     expr** rules = (expr**)_rules;
     func_decl** outputs = (func_decl**)_outputs;
     ast_manager& m = mk_c(c)->m();        
     expr_ref_vector result(m);
     to_fixedpoint_ref(d)->simplify_rules(num_rules, rules, num_outputs, outputs, result);        
     Z3_ast_vector_ref* v = alloc(Z3_ast_vector_ref, mk_c(c)->m());
     mk_c(c)->save_object(v);
     for (unsigned i = 0; i < result.size(); ++i) {
         v->m_ast_vector.push_back(result[i].get());
     }
     RETURN_Z3(of_ast_vector(v));
     Z3_CATCH_RETURN(0)
 }
Example #5
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, "fp sorts expected");
         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);
 }
Example #6
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, "rm and float sorts expected");
         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);
 }
Example #7
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, "bv sorts expected for arguments");
         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);
 }
Example #8
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);
 }
Example #9
0
 Z3_string Z3_API Z3_apply_result_to_string(Z3_context c, Z3_apply_result r) {
     Z3_TRY;
     LOG_Z3_apply_result_to_string(c, r);
     RESET_ERROR_CODE();
     std::ostringstream buffer;
     buffer << "(goals\n";
     unsigned sz = to_apply_result(r)->m_subgoals.size();
     for (unsigned i = 0; i < sz; i++) {
         to_apply_result(r)->m_subgoals[i]->display(buffer);
     }
     buffer << ")";
     return mk_c(c)->mk_external_string(buffer.str());
     Z3_CATCH_RETURN("");
 }
Example #10
0
 Z3_ast Z3_API Z3_solver_get_proof(Z3_context c, Z3_solver s) {
     Z3_TRY;
     LOG_Z3_solver_get_proof(c, s);
     RESET_ERROR_CODE();
     init_solver(c, s);
     proof * p = to_solver_ref(s)->get_proof();
     if (!p) {
         SET_ERROR_CODE(Z3_INVALID_USAGE);
         RETURN_Z3(0);
     }
     mk_c(c)->save_ast_trail(p);
     RETURN_Z3(of_ast(p));
     Z3_CATCH_RETURN(0);
 }
Example #11
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);

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

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

        return of_expr (result);
        Z3_CATCH_RETURN(nullptr);
    }
Example #12
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);
 }
Example #13
0
 Z3_goal Z3_API Z3_apply_result_get_subgoal(Z3_context c, Z3_apply_result r, unsigned i) {
     Z3_TRY;
     LOG_Z3_apply_result_get_subgoal(c, r, i);
     RESET_ERROR_CODE();
     if (i > to_apply_result(r)->m_subgoals.size()) {
         SET_ERROR_CODE(Z3_IOB);
         RETURN_Z3(0);
     }
     Z3_goal_ref * g = alloc(Z3_goal_ref);
     g->m_goal       = to_apply_result(r)->m_subgoals[i];
     mk_c(c)->save_object(g);
     Z3_goal result  = of_goal(g);
     RETURN_Z3(result);
     Z3_CATCH_RETURN(0);
 }
Example #14
0
    Z3_ast Z3_API Z3_qe_model_project_skolem (Z3_context c,
                                              Z3_model mdl,
                                              unsigned num_bounds,
                                              Z3_app const bound[],
                                              Z3_ast body,
                                              Z3_ast_map map)
    {
        Z3_TRY;
        LOG_Z3_qe_model_project_skolem (c, mdl, num_bounds, bound, body, map);
        RESET_ERROR_CODE();

        ast_manager& m = mk_c(c)->m();
        app_ref_vector vars(m);
        if (!to_apps(num_bounds, bound, vars)) {
            RETURN_Z3(nullptr);
        }

        expr_ref result (m);
        result = to_expr (body);
        model_ref model (to_model_ref (mdl));
        expr_map emap (m);

        spacer::qe_project(m, vars, result, model, emap);
        mk_c(c)->save_ast_trail(result);

        obj_map<ast, ast*> &map_z3 = to_ast_map_ref(map);

        for (auto& kv : emap) {
            m.inc_ref(kv.m_key);
            m.inc_ref(kv.m_value);
            map_z3.insert(kv.m_key, kv.m_value);
        }

        return of_expr (result);
        Z3_CATCH_RETURN(nullptr);
    }
Example #15
0
 Z3_ast Z3_API Z3_get_pattern(Z3_context c, Z3_pattern p, unsigned idx) {
     Z3_TRY;
     LOG_Z3_get_pattern(c, p, idx);
     RESET_ERROR_CODE();
     app* _p = to_pattern(p);
     if (mk_c(c)->m().is_pattern(_p)) {
         Z3_ast r = of_ast(_p->get_arg(idx));
         RETURN_Z3(r);
     }
     else {
         SET_ERROR_CODE(Z3_SORT_ERROR);
         RETURN_Z3(0);
     }
     Z3_CATCH_RETURN(0);
 }
Example #16
0
 Z3_ast Z3_API Z3_mk_map(Z3_context c, Z3_func_decl f, unsigned n, Z3_ast const* args) {
     Z3_TRY;
     LOG_Z3_mk_map(c, f, n, args);
     RESET_ERROR_CODE();
     if (n == 0) {
         SET_ERROR_CODE(Z3_INVALID_ARG);
         RETURN_Z3(0);
     }
     ast_manager & m = mk_c(c)->m();
     func_decl* _f      = to_func_decl(f);
     expr* const* _args = to_exprs(args);
     
     ptr_vector<sort> domain;
     for (unsigned i = 0; i < n; ++i) {
         domain.push_back(m.get_sort(_args[i]));
     }
     parameter param(_f);
     func_decl * d = m.mk_func_decl(mk_c(c)->get_array_fid(), OP_ARRAY_MAP, 1, &param, n, domain.c_ptr());
     app* r = m.mk_app(d, n, _args);
     mk_c(c)->save_ast_trail(r);
     check_sorts(c, r);
     RETURN_Z3(of_ast(r));
     Z3_CATCH_RETURN(0);
 }
Example #17
0
 Z3_lbool Z3_API Z3_fixedpoint_query_relations(
     Z3_context c,Z3_fixedpoint d,
     unsigned num_relations, Z3_func_decl const relations[]) {
     Z3_TRY;
     LOG_Z3_fixedpoint_query_relations(c, d, num_relations, relations);
     RESET_ERROR_CODE();
     lbool r = l_undef;
     unsigned timeout = to_fixedpoint(d)->m_params.get_uint("timeout", mk_c(c)->get_timeout());
     cancel_eh<reslimit> eh(mk_c(c)->m().limit());
     api::context::set_interruptable si(*(mk_c(c)), eh);
     {
         scoped_timer timer(timeout, &eh);
         try {
             r = to_fixedpoint_ref(d)->ctx().rel_query(num_relations, to_func_decls(relations));
         }
         catch (z3_exception& ex) {
             mk_c(c)->handle_exception(ex);
             r = l_undef;
         }
         to_fixedpoint_ref(d)->ctx().cleanup();
     }
     return of_lbool(r);
     Z3_CATCH_RETURN(Z3_L_UNDEF);
 }
Example #18
0
 Z3_ast Z3_API Z3_mk_store(Z3_context c, Z3_ast a, Z3_ast i, Z3_ast v) {
     Z3_TRY;
     LOG_Z3_mk_store(c, a, i, v);
     RESET_ERROR_CODE();
     ast_manager & m = mk_c(c)->m();
     expr * _a        = to_expr(a);
     expr * _i        = to_expr(i);
     expr * _v        = to_expr(v);
     sort * a_ty = m.get_sort(_a);
     sort * i_ty = m.get_sort(_i);
     sort * v_ty = m.get_sort(_v);
     if (a_ty->get_family_id() != mk_c(c)->get_array_fid()) {
         SET_ERROR_CODE(Z3_SORT_ERROR);
         RETURN_Z3(0);
     }
     sort * domain[3] = {a_ty, i_ty, v_ty};
     func_decl * d   = m.mk_func_decl(mk_c(c)->get_array_fid(), OP_STORE, 2, a_ty->get_parameters(), 3, domain);
     expr * args[3]        = {_a, _i, _v};
     app * r        = m.mk_app(d, 3, args);
     mk_c(c)->save_ast_trail(r);
     check_sorts(c, r);
     RETURN_Z3(of_ast(r));
     Z3_CATCH_RETURN(0);
 }
Example #19
0
 Z3_ast_vector Z3_API Z3_ast_map_keys(Z3_context c, Z3_ast_map m) {
     Z3_TRY;
     LOG_Z3_ast_map_keys(c, m);
     RESET_ERROR_CODE();
     Z3_ast_vector_ref * v = alloc(Z3_ast_vector_ref, to_ast_map(m)->m);
     mk_c(c)->save_object(v);
     obj_map<ast, ast*>::iterator it  = to_ast_map_ref(m).begin();
     obj_map<ast, ast*>::iterator end = to_ast_map_ref(m).end();
     for (; it != end; ++it) {
         v->m_ast_vector.push_back(it->m_key);
     }
     Z3_ast_vector r       = of_ast_vector(v);
     RETURN_Z3(r);
     Z3_CATCH_RETURN(0);
 }
Example #20
0
    Z3_ast Z3_API Z3_qe_lite (Z3_context c, Z3_ast_vector vars, Z3_ast body)
    {
        Z3_TRY;
        LOG_Z3_qe_lite (c, vars, body);
        RESET_ERROR_CODE();
        ast_ref_vector &vVars = to_ast_vector_ref (vars);

        app_ref_vector vApps (mk_c(c)->m());
        for (unsigned i = 0; i < vVars.size (); ++i) {
            app *a = to_app (vVars.get (i));
            if (a->get_kind () != AST_APP) {
                SET_ERROR_CODE (Z3_INVALID_ARG);
                RETURN_Z3(0);
            }
            vApps.push_back (a);
        }

        expr_ref result (mk_c(c)->m ());
        result = to_expr (body);

        params_ref p;
        qe_lite qe (mk_c(c)->m (), p);
        qe (vApps, result);

        // -- copy back variables that were not eliminated
        if (vApps.size () < vVars.size ()) {
            vVars.reset ();
            for (app* v : vApps) {
                vVars.push_back (v);
            }
        }

        mk_c(c)->save_ast_trail (result.get ());
        return of_expr (result);
        Z3_CATCH_RETURN(0);
    }
Example #21
0
    Z3_ast Z3_API Z3_qe_model_project_skolem (Z3_context c,
                                              Z3_model m,
                                              unsigned num_bounds,
                                              Z3_app const bound[],
                                              Z3_ast body,
                                              Z3_ast_map map)
    {
        Z3_TRY;
        LOG_Z3_qe_model_project_skolem (c, m, num_bounds, bound, body, map);
        RESET_ERROR_CODE();

        ast_manager& man = mk_c(c)->m ();
        app_ref_vector vars(man);
        if (!to_apps(num_bounds, bound, vars)) {
            RETURN_Z3(0);
        }

        expr_ref result (mk_c(c)->m ());
        result = to_expr (body);
        model_ref model (to_model_ref (m));
        expr_map emap (man);

        spacer::qe_project (mk_c(c)->m (), vars, result, model, emap);
        mk_c(c)->save_ast_trail (result.get ());

        obj_map<ast, ast*> &map_z3 = to_ast_map_ref(map);

        for (expr_map::iterator it = emap.begin(), end = emap.end(); it != end; ++it){
            man.inc_ref(&(it->get_key()));
            man.inc_ref(it->get_value());
            map_z3.insert(&(it->get_key()), it->get_value());
        }

        return of_expr (result.get ());
        Z3_CATCH_RETURN(0);
    }
Example #22
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);
 }
Example #23
0
 Z3_lbool Z3_API Z3_get_implied_equalities(Z3_context c, 
                                           Z3_solver s,
                                           unsigned num_terms,
                                           Z3_ast const terms[],
                                           unsigned class_ids[]) {
     Z3_TRY;
     LOG_Z3_get_implied_equalities(c, s, num_terms, terms, class_ids);
     ast_manager& m = mk_c(c)->m();
     RESET_ERROR_CODE();
     CHECK_SEARCHING(c);
     init_solver(c, s);
     lbool result = smt::implied_equalities(m, *to_solver_ref(s), num_terms, to_exprs(terms), class_ids);
     return static_cast<Z3_lbool>(result); 
     Z3_CATCH_RETURN(Z3_L_UNDEF);
 }
Example #24
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);
 }
Example #25
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);
 }
Example #26
0
 Z3_func_interp Z3_API Z3_model_get_func_interp(Z3_context c, Z3_model m, Z3_func_decl f) {
     Z3_TRY;
     LOG_Z3_model_get_func_interp(c, m, f);
     RESET_ERROR_CODE();
     CHECK_NON_NULL(m, 0);
     func_interp * _fi       = to_model_ref(m)->get_func_interp(to_func_decl(f));
     if (!_fi) {
         SET_ERROR_CODE(Z3_INVALID_ARG);
         RETURN_Z3(0);
     }
     Z3_func_interp_ref * fi = alloc(Z3_func_interp_ref, to_model_ref(m));
     fi->m_func_interp       = _fi;
     mk_c(c)->save_object(fi);
     RETURN_Z3(of_func_interp(fi));
     Z3_CATCH_RETURN(0);
 }
Example #27
0
 Z3_string Z3_API Z3_ast_map_to_string(Z3_context c, Z3_ast_map m) {
     Z3_TRY;
     LOG_Z3_ast_map_to_string(c, m);
     RESET_ERROR_CODE();
     std::ostringstream buffer;
     ast_manager & mng = to_ast_map(m)->m;
     buffer << "(ast-map";
     obj_map<ast, ast*>::iterator it  = to_ast_map_ref(m).begin();
     obj_map<ast, ast*>::iterator end = to_ast_map_ref(m).end();
     for (; it != end; ++it) {
         buffer << "\n  (" << mk_ismt2_pp(it->m_key, mng, 3) << "\n   " << mk_ismt2_pp(it->m_value, mng, 3) << ")";
     }
     buffer << ")";
     return mk_c(c)->mk_external_string(buffer.str());
     Z3_CATCH_RETURN(0);
 }
Example #28
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);
 }
Example #29
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);
 }
Example #30
0
 Z3_string Z3_API Z3_param_descrs_to_string(Z3_context c, Z3_param_descrs p) {
     Z3_TRY;
     LOG_Z3_param_descrs_to_string(c, p);
     RESET_ERROR_CODE();
     std::ostringstream buffer;
     buffer << "(";
     unsigned sz = to_param_descrs_ptr(p)->size();
     for (unsigned i = 0; i < sz; i++) {
         if (i > 0) 
             buffer << ", ";
         buffer << to_param_descrs_ptr(p)->get_param_name(i);
     }
     buffer << ")";
     return mk_c(c)->mk_external_string(buffer.str());
     Z3_CATCH_RETURN("");
 }