Exemple #1
0
 void operator()(var * x) {
     if (!m_quant)
         throw_found();
     sort * s = x->get_sort();
     if (m_int && u.is_int(s))
         return;
     if (m_real && u.is_real(s))
         return;
     throw_found();
 }
Exemple #2
0
    void operator()(app * n) {
        if (!compatible_sort(n))
            throw_found();
        family_id fid = n->get_family_id();
        if (fid == m.get_basic_family_id())
            return;
        if (fid == u.get_family_id()) {
            switch (n->get_decl_kind()) {
            case OP_LE:  case OP_GE: case OP_LT: case OP_GT:
            case OP_ADD: case OP_UMINUS: case OP_SUB: case OP_ABS:
            case OP_NUM:
                return;
            case OP_MUL:
                if (m_linear) {
                    if (n->get_num_args() != 2)
                        throw_found();
                    if (!u.is_numeral(n->get_arg(0)))
                        throw_found();
                }
                return;
            case OP_IDIV: case OP_DIV: case OP_REM: case OP_MOD:
                if (m_linear && !u.is_numeral(n->get_arg(1)))
                    throw_found();
                return;
            case OP_IS_INT:
                if (m_real)
                    throw_found();
                return;
            case OP_TO_INT:
            case OP_TO_REAL:
                return;
            case OP_POWER:
                if (m_linear)
                    throw_found();
                return;
            case OP_IRRATIONAL_ALGEBRAIC_NUM:
                if (m_linear || !m_real)
                    throw_found();
                return;
            default:
                throw_found();
            }
            return;
        }

        if (is_uninterp_const(n))
            return;
        throw_found();
    }
Exemple #3
0
 void operator()(app * n) {
     family_id fid = n->get_family_id();
     if (fid == m.get_basic_family_id())
         return; 
     if (fid == u.get_family_id()) {
         switch (n->get_decl_kind()) {
         case OP_LE:  case OP_GE: case OP_LT: case OP_GT:
         case OP_ADD: case OP_UMINUS: case OP_SUB: case OP_ABS: 
         case OP_NUM: 
         case OP_IRRATIONAL_ALGEBRAIC_NUM:
             return;
         case OP_MUL:
             if (n->get_num_args() == 2 &&
                 u.is_real(n->get_arg(0)) && 
                 !u.is_numeral(n->get_arg(0)) &&
                 !u.is_numeral(n->get_arg(1))) {
                 m_has_nonlinear = true;
             }
             return;
         case OP_IDIV: case OP_DIV: case OP_REM: case OP_MOD:
             if (!u.is_numeral(n->get_arg(1)))
                 throw_found();
             return;
         case OP_POWER: 
             if (!u.is_numeral(n->get_arg(1)))
                 throw_found();
             m_has_nonlinear = true;
             return;
         case OP_IS_INT:
         case OP_TO_INT:
         case OP_TO_REAL:
             throw_found();
             return;
         default:
             throw_found();
         }
     } 
 }
Exemple #4
0
 void operator()(quantifier *) {
     if (!m_quant)
         throw_found();
 }
Exemple #5
0
 void operator()(quantifier *) { 
     throw_found(); 
 }    
Exemple #6
0
 void operator()(var * x) {
     throw_found();
 }