// check if the predicate holds or not
solver.push();
solver.addAssertion(ExpressionFactory.createNot(p));
if (solver.isUnsatisfiable()) {
setVariableDontCare(postPreds, predIdx);
postPreds.andWith(bddFactory.ithVar(predIdx));
} else {
// Now check whether the negative of the predicate holds
solver.pop();
solver.push();
solver.addAssertion(p);