Esempio n. 1
0
 void context::display_literal_info(std::ostream & out, literal l) const {
     l.display_compact(out, m_bool_var2expr.c_ptr());
     if (l.sign())
         out << "  (not " << mk_bounded_pp(bool_var2expr(l.var()), m_manager, 10) << ") ";
     else
         out << "  " << mk_bounded_pp(bool_var2expr(l.var()), m_manager, 10) << " ";
     out << "relevant: " << is_relevant(bool_var2expr(l.var())) << ", val: " << get_assignment(l) << "\n";
 }
Esempio n. 2
0
 void context::check_sorts(ast * n) {
     if (!m().check_sorts(n)) {
         switch(n->get_kind()) {
         case AST_APP: {
             std::ostringstream buffer;
             app * a = to_app(n);
             buffer << mk_pp(a->get_decl(), m()) << " applied to: ";
             if (a->get_num_args() > 1) buffer << "\n";
             for (unsigned i = 0; i < a->get_num_args(); ++i) {
                 buffer << mk_bounded_pp(a->get_arg(i), m(), 3) << " of sort ";
                 buffer << mk_pp(m().get_sort(a->get_arg(i)), m()) << "\n";
             }
             warning_msg("%s",buffer.str().c_str());
             break;
         }
         case AST_VAR:
         case AST_QUANTIFIER:
         case AST_SORT:
         case AST_FUNC_DECL:
             break;
         }
         set_error_code(Z3_SORT_ERROR);
     }
 }
        void operator()(expr * t) {
            SASSERT(m.is_bool(t));
            push_frame(t, true);
            SASSERT(!m_frame_stack.empty());
            while (!m_frame_stack.empty()) {
                frame & fr    = m_frame_stack.back();
                expr * t      = fr.m_t;
                bool form_ctx = fr.m_form_ctx;
                TRACE("cofactor", tout << "processing, form_ctx: " << form_ctx << "\n" << mk_bounded_pp(t, m) << "\n";);

                m_owner.checkpoint();
                
                if (m_processed.is_marked(t)) {
                    save_candidate(t, form_ctx);
                    m_frame_stack.pop_back();
                    continue;
                }

                if (m.is_term_ite(t)) {
                    m_has_term_ite.mark(t);
                    m_processed.mark(t);
                    m_frame_stack.pop_back();
                    continue;
                }
                
                if (fr.m_first) {
                    fr.m_first   = false;
                    bool visited = true;
                    if (is_app(t)) {
                        unsigned num_args = to_app(t)->get_num_args();
                        for (unsigned i = 0; i < num_args; i++)
                            visit(to_app(t)->get_arg(i), form_ctx, visited);
                    }
                    // ignoring quantifiers
                    if (!visited)
                        continue;
                }
                
                if (is_app(t)) {
                    unsigned num_args = to_app(t)->get_num_args();
                    unsigned i;
                    for (i = 0; i < num_args; i++) {
                        if (m_has_term_ite.is_marked(to_app(t)->get_arg(i)))
                            break;
                    }
                    if (i < num_args) {
                        m_has_term_ite.mark(t);
                        TRACE("cofactor", tout << "saving candidate: " << form_ctx << "\n" << mk_bounded_pp(t, m) << "\n";);
                        save_candidate(t, form_ctx);
                    }