예제 #1
0
 void collect(expr * t, expr_fast_mark1 & visited) {
     rational k;
     visit(t, visited);
     while (!m_todo.empty()) {
         checkpoint();
         expr * t = m_todo.back();
         m_todo.pop_back();
         if (is_var(t))
             continue;
         if (is_quantifier(t)) {
             unsigned num_children = to_quantifier(t)->get_num_children();
             for (unsigned i = 0; i < num_children; i ++)
                 visit(to_quantifier(t)->get_child(i), visited);
         }
         else {
             SASSERT(is_app(t));
             if (m_autil.is_power(t) && m_autil.is_numeral(to_app(t)->get_arg(1), k) && k.is_int() && k.is_pos()) {
                 expr * arg = to_app(t)->get_arg(0);
                 save_degree(arg, k);
                 visit_args(arg, visited);
             }
             else {
                 visit_args(t, visited);
             }
         }
     }
 }
예제 #2
0
 void visit_args(expr * t, expr_fast_mark1 & visited) {
     if (is_app(t)) {
         for (expr * arg : *to_app(t)) {
             save_degree(arg, m_one);
             visit(arg, visited);
         }
     }
 }
예제 #3
0
 void visit_args(expr * t, expr_fast_mark1 & visited) {
     if (is_app(t)) {
         unsigned num_args = to_app(t)->get_num_args();
         for (unsigned i = 0; i < num_args; i++) {
             expr * arg = to_app(t)->get_arg(i);
             save_degree(arg, m_one);
             visit(arg, visited);
         }
     }
 }