rClause GenPWAgg::checkHeadPropagationForAgg(bool& propagations, const Agg& agg, const minmaxBounds& bound) { auto confl = nullPtrClause; auto propagatehead = false; if (agg.hasLB() && bound.max < agg.getBound()) { propagatehead = true; } else if (agg.hasUB() && agg.getBound() < bound.min) { propagatehead = true; } if (propagatehead) { propagations = true; confl = getSet().notifySolver(new HeadReason(agg, agg.getHead())); notifyFirstPropagation(agg.getHead()); } return confl; }
/** * Returns true if this aggregate can be propagated in the initialization, so it will never change truth value * and can be left out of any propagations. * Returns false if the aggregate is certainly unsat. */ lbool FWAgg::initialize(const Agg& agg) { auto confl = nullPtrClause; auto hv = canPropagateHead(agg, getCC(), getCP()); bool alwaystrue = false; if (hv != l_Undef) { alwaystrue = true; } if (hv == l_True) { confl = getSet().notifySolver(new HeadReason(agg, agg.getHead())); } else if (hv == l_False) { confl = getSet().notifySolver(new HeadReason(agg, not agg.getHead())); } if (confl != nullPtrClause) { return l_False; } return alwaystrue ? l_True : l_Undef; }