Пример #1
0
void project_plugin::partition_args(model& model, app_ref_vector const& selects, expr_ref_vector& lits) {
    ast_manager& m = selects.get_manager();
    if (selects.empty()) return;
    unsigned num_args = selects[0]->get_decl()->get_arity();
    for (unsigned j = 1; j < num_args; ++j) {
        expr_ref_vector args(m);            
        for (unsigned i = 0; i < selects.size(); ++i) {
            args.push_back(selects[i]->get_arg(j));
        }
        project_plugin::partition_values(model, args, lits);
    }
}
static void parse_fml(char const* str, app_ref_vector& vars, expr_ref& fml) {
    ast_manager& m = fml.get_manager();
    fml = parse_fml(m, str);
    if (is_exists(fml)) {
        quantifier* q = to_quantifier(fml);
        for (unsigned i = 0; i < q->get_num_decls(); ++i) {
            vars.push_back(m.mk_const(q->get_decl_name(i), q->get_decl_sort(i)));
        }
        fml = q->get_expr();
        var_subst vs(m, true);
        vs(fml, vars.size(), (expr*const*)vars.c_ptr(), fml);
    }
}
Пример #3
0
static expr_ref_vector mk_ineqs(app* x, app* y, app_ref_vector const& nums) {
    ast_manager& m = nums.get_manager();
    arith_util a(m);
    expr_ref_vector result(m);
    for (unsigned i = 0; i < nums.size(); ++i) {
        expr_ref ax(a.mk_mul(nums[i], x), m);
        result.push_back(a.mk_le(ax, y));
        result.push_back(m.mk_not(a.mk_ge(ax, y)));
        result.push_back(m.mk_not(a.mk_gt(y, ax)));
        result.push_back(a.mk_lt(y, ax));
    }
    return result;
}
Пример #4
0
 void euf_arith_mbi_plugin::filter_private_arith(app_ref_vector& avars) {
     arith_util a(m);
     unsigned j = 0;
     obj_hashtable<func_decl> shared;
     for (func_decl* f : m_shared) shared.insert(f);
     for (unsigned i = 0; i < avars.size(); ++i) {
         app* v = avars.get(i);
         if (!shared.contains(v->get_decl()) && 
             v->get_family_id() != a.get_family_id()) {
             avars[j++] = v;
         }
     }
     avars.shrink(j);
 }
Пример #5
0
 static bool to_apps(unsigned n, Z3_app const es[], app_ref_vector& result) {
     for (unsigned i = 0; i < n; ++i) {
         if (!is_app(to_app(es[i]))) {
             return false;
         }
         result.push_back (to_app (es [i]));
     }
     return true;
 }
Пример #6
0
    void filter_variables(model& model, app_ref_vector& vars, expr_ref_vector& lits, expr_ref_vector& unused_lits) {
        expr_mark lit_visited;
        project_plugin::mark_rec(lit_visited, lits);

        unsigned j = 0;
        for (unsigned i = 0; i < vars.size(); ++i) {
            app* var = vars[i].get();
            if (lit_visited.is_marked(var)) {
                if (i != j) {
                    vars[j] = vars[i].get();
                }
                ++j;
            }
        }
        if (vars.size() != j) {
            vars.resize(j);
        }
    }
Пример #7
0
 bool solve(model& model, app_ref_vector& vars, expr_ref_vector& lits) {
     expr_mark is_var, is_rem;
     if (vars.empty()) {
         return false;
     }
     bool reduced = false;
     for (unsigned i = 0; i < vars.size(); ++i) { 
         is_var.mark(vars[i].get());
     }
     expr_ref tmp(m), t(m), v(m);            
     th_rewriter rw(m);
     for (unsigned i = 0; i < lits.size(); ++i) {
         expr* e = lits[i].get(), *l, *r;
         if (m.is_eq(e, l, r) && reduce_eq(is_var, l, r, v, t)) {
             reduced = true;
             project_plugin::erase(lits, i);
             expr_safe_replace sub(m);
             sub.insert(v, t);
             is_rem.mark(v);
             for (unsigned j = 0; j < lits.size(); ++j) {
                 sub(lits[j].get(), tmp);
                 rw(tmp);
                 lits[j] = tmp;
             }
         }
     }
     if (reduced) {
         unsigned j = 0;
         for (unsigned i = 0; i < vars.size(); ++i) {
             if (!is_rem.is_marked(vars[i].get())) {
                 if (i != j) {
                     vars[j] = vars[i].get();
                 }
                 ++j;
             }
         }
         vars.shrink(j);
     }
     return reduced;
 }
Пример #8
0
 void rule_manager::mk_negations(app_ref_vector& body, svector<bool>& is_negated) {
     for (unsigned i = 0; i < body.size(); ++i) {
         expr* e = body[i].get(), *e1;
         if (m.is_not(e, e1) && m_ctx.is_predicate(e1)) {
             check_app(e1);
             body[i] = to_app(e1);
             is_negated.push_back(true);
         }
         else {
             is_negated.push_back(false);
         }
     }        
 }
Пример #9
0
 is_arith_var_proc(app_ref_vector& avars, app_ref_vector& proxies):
     m(avars.m()), m_avars(avars), m_proxies(proxies), m_arith(m) {
 }