Exemplo n.º 1
0
 Z3_ast Z3_API Z3_mk_atmost(Z3_context c, unsigned num_args, 
                            Z3_ast const args[], unsigned k) {
     Z3_TRY;
     LOG_Z3_mk_atmost(c, num_args, args, k);
     RESET_ERROR_CODE();
     parameter param(k);
     pb_util util(mk_c(c)->m());
     ast* a = util.mk_at_most_k(num_args, to_exprs(args), k);
     mk_c(c)->save_ast_trail(a);
     check_sorts(c, a);
     RETURN_Z3(of_ast(a));
     Z3_CATCH_RETURN(0);
 }
Exemplo n.º 2
0
    Z3_ast Z3_API Z3_mk_array_default(Z3_context c, Z3_ast array) {
        Z3_TRY;
        LOG_Z3_mk_array_default(c, array);
        RESET_ERROR_CODE(); 
        ast_manager & m = mk_c(c)->m();
        expr * _a        = to_expr(array);

        func_decl * f   = m.mk_func_decl(mk_c(c)->get_array_fid(), OP_ARRAY_DEFAULT, 0, 0, 1, &_a);
        app * r        = m.mk_app(f, 1, &_a);
        mk_c(c)->save_ast_trail(r);
        check_sorts(c, r);
        RETURN_Z3(of_ast(r));        
        Z3_CATCH_RETURN(0);
    }
Exemplo n.º 3
0
 Z3_ast mk_app_array_core(Z3_context c, Z3_sort domain, Z3_ast v) {
     RESET_ERROR_CODE();   
     ast_manager & m = mk_c(c)->m();
     expr * _v        = to_expr(v);
     sort * _range = m.get_sort(_v);
     sort * _domain = to_sort(domain);
     parameter params[2]  = { parameter(_domain), parameter(_range) };
     sort * a_ty    = mk_c(c)->m().mk_sort(mk_c(c)->get_array_fid(), ARRAY_SORT, 2, params);
     parameter param(a_ty);
     func_decl * cd   = m.mk_func_decl(mk_c(c)->get_array_fid(), OP_CONST_ARRAY, 1, &param, 1, &_range);
     app * r        = m.mk_app(cd, 1, &_v);
     mk_c(c)->save_ast_trail(r);
     check_sorts(c, r);
     return of_ast(r);
 }
Exemplo n.º 4
0
 Z3_ast Z3_API Z3_mk_pbeq(Z3_context c, unsigned num_args, 
                          Z3_ast const args[], int _coeffs[],
                          int k) {
     Z3_TRY;
     LOG_Z3_mk_pble(c, num_args, args, _coeffs, k);
     RESET_ERROR_CODE();
     pb_util util(mk_c(c)->m());
     vector<rational> coeffs;
     for (unsigned i = 0; i < num_args; ++i) {
         coeffs.push_back(rational(_coeffs[i]));
     }
     ast* a = util.mk_eq(num_args, coeffs.c_ptr(), to_exprs(args), rational(k));
     mk_c(c)->save_ast_trail(a);
     check_sorts(c, a);
     RETURN_Z3(of_ast(a));
     Z3_CATCH_RETURN(0);
 }
Exemplo n.º 5
0
 Z3_ast Z3_API Z3_mk_div(Z3_context c, Z3_ast n1, Z3_ast n2) {
     Z3_TRY;
     LOG_Z3_mk_div(c, n1, n2);
     RESET_ERROR_CODE();
     decl_kind k = OP_IDIV;
     sort* ty = mk_c(c)->m().get_sort(to_expr(n1));
     sort* real_ty = mk_c(c)->m().mk_sort(mk_c(c)->get_arith_fid(), REAL_SORT);
     if (ty == real_ty) {
         k = OP_DIV;
     }
     expr * args[2] = { to_expr(n1), to_expr(n2) };
     ast* a = mk_c(c)->m().mk_app(mk_c(c)->get_arith_fid(), k, 0, nullptr, 2, args);
     mk_c(c)->save_ast_trail(a);
     check_sorts(c, a);
     RETURN_Z3(of_ast(a));
     Z3_CATCH_RETURN(nullptr);
 }
Exemplo n.º 6
0
 Z3_ast Z3_API Z3_mk_const_array(Z3_context c, Z3_sort domain, Z3_ast v) {
     Z3_TRY;
     LOG_Z3_mk_const_array(c, domain, v);
     RESET_ERROR_CODE(); 
     ast_manager & m = mk_c(c)->m();
     expr * _v        = to_expr(v);
     sort * _range = m.get_sort(_v);
     sort * _domain = to_sort(domain);
     parameter params[2]  = { parameter(_domain), parameter(_range) };
     sort * a_ty    = mk_c(c)->m().mk_sort(mk_c(c)->get_array_fid(), ARRAY_SORT, 2, params);
     parameter param(a_ty);
     func_decl* cd   = m.mk_func_decl(mk_c(c)->get_array_fid(), OP_CONST_ARRAY, 1, &param, 1, &_range);
     app * r        = m.mk_app(cd, 1, &_v);
     mk_c(c)->save_ast_trail(r);
     check_sorts(c, r);
     RETURN_Z3(of_ast(r));        
     Z3_CATCH_RETURN(0);
 }
Exemplo n.º 7
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.º 8
0
 Z3_ast Z3_API Z3_mk_select(Z3_context c, Z3_ast a, Z3_ast i) {
     Z3_TRY;
     LOG_Z3_mk_select(c, a, i);
     RESET_ERROR_CODE();
     ast_manager & m = mk_c(c)->m();
     expr * _a        = to_expr(a);
     expr * _i        = to_expr(i);
     sort * a_ty = m.get_sort(_a);
     sort * i_ty = m.get_sort(_i);
     if (a_ty->get_family_id() != mk_c(c)->get_array_fid()) {
         SET_ERROR_CODE(Z3_SORT_ERROR);
         RETURN_Z3(0);
     }
     sort * domain[2] = {a_ty, i_ty};
     func_decl * d   = m.mk_func_decl(mk_c(c)->get_array_fid(), OP_SELECT, 2, a_ty->get_parameters(), 2, domain);
     expr * args[2]        = {_a, _i};
     app * r        = m.mk_app(d, 2, args);
     mk_c(c)->save_ast_trail(r);
     check_sorts(c, r);
     RETURN_Z3(of_ast(r));
     Z3_CATCH_RETURN(0);
 }
Exemplo n.º 9
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);
 }