Esempio n. 1
0
 void Z3_API Z3_ast_map_reset(Z3_context c, Z3_ast_map m) {
     Z3_TRY;
     LOG_Z3_ast_map_reset(c, m);
     RESET_ERROR_CODE();
     dec_ref_key_values(to_ast_map(m)->m, to_ast_map_ref(m));
     SASSERT(to_ast_map_ref(m).empty());
     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_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);
 }
Esempio n. 4
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. 5
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);
 }
Esempio n. 6
0
 unsigned Z3_API Z3_ast_map_size(Z3_context c, Z3_ast_map m) {
     Z3_TRY;
     LOG_Z3_ast_map_size(c, m);
     RESET_ERROR_CODE();
     return to_ast_map_ref(m).size();
     Z3_CATCH_RETURN(0);
 }
Esempio n. 7
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. 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_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);
    }
Esempio n. 10
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);
    }