예제 #1
0
파일: horn_tactic.cpp 프로젝트: CHolmes3/z3
 void check_predicate(ast_mark& mark, expr* a) {
     ptr_vector<expr> todo;
     todo.push_back(a);
     while (!todo.empty()) {
         a = todo.back();
         todo.pop_back();
         if (mark.is_marked(a)) {
             continue;
         }
         mark.mark(a, true);
         if (is_quantifier(a)) {
             a = to_quantifier(a)->get_expr();
             todo.push_back(a);
         }
         else if (m.is_not(a) || m.is_and(a) || m.is_or(a) || m.is_implies(a)) {
             todo.append(to_app(a)->get_num_args(), to_app(a)->get_args());
         }
         else if (m.is_ite(a)) {
             todo.push_back(to_app(a)->get_arg(1));
             todo.push_back(to_app(a)->get_arg(2));
         }
         else if (is_predicate(a)) {
             register_predicate(a);
         }
     }
 }
예제 #2
0
func_decl * context::mk_fresh_head_predicate(symbol const & prefix, symbol const & suffix,
        unsigned arity, sort * const * domain, func_decl* orig_pred) {
    func_decl* new_pred =
        m.mk_fresh_func_decl(prefix, suffix, arity, domain, m.mk_bool_sort());

    register_predicate(new_pred, true);

    if (m_rel) {
        m_rel->inherit_predicate_kind(new_pred, orig_pred);
    }
    return new_pred;
}