void ArithStaticLearner::process(TNode n, NodeBuilder<>& learned, const TNodeSet& defTrue){ Debug("arith::static") << "===================== looking at " << n << endl; switch(n.getKind()){ case ITE: if(n.hasBoundVar()) { // Unsafe with non-ground ITEs; do nothing Debug("arith::static") << "(potentially) non-ground ITE, ignoring..." << endl; break; } if(n[0].getKind() != EQUAL && isRelationOperator(n[0].getKind()) ){ iteMinMax(n, learned); } if((d_minMap.find(n[1]) != d_minMap.end() && d_minMap.find(n[2]) != d_minMap.end()) || (d_maxMap.find(n[1]) != d_maxMap.end() && d_maxMap.find(n[2]) != d_maxMap.end())) { iteConstant(n, learned); } break; case CONST_RATIONAL: // Mark constants as minmax d_minMap.insert(n, n.getConst<Rational>()); d_maxMap.insert(n, n.getConst<Rational>()); break; default: // Do nothing break; } }