// (=> (not x) y)
// (=> (not y) x)
+ x = Rewriter::rewrite(x);
+ y = Rewriter::rewrite(y);
+
Node xneg = x.negate();
Node yneg = y.negate();
d_implies[xneg].insert(y);
Assert(binor[0].getKind() == kind::EQUAL);
Assert(binor[1].getKind() == kind::EQUAL);
+ //Node n =
Node n = applySubstitutions(binor);
+ if(n != binor){
+ n = Rewriter::rewrite(n);
+
+ if(!(n.getKind() == kind::OR &&
+ n.getNumChildren() == 2 &&
+ n[0].getKind() == kind::EQUAL &&
+ n[1].getKind() == kind::EQUAL)){
+ return false;
+ }
+ }
+
Assert(n.getKind() == kind::OR);
- Assert(binor.getNumChildren() == 2);
+ Assert(n.getNumChildren() == 2);
TNode l = n[0];
TNode r = n[1];
NodeManager* nm = NodeManager::currentNM();
- Node cnd = findIteCnd(binor[0], binor[1]);
+ Node cnd = findIteCnd(l, r);
Node sk = nm->mkSkolem("deor", nm->booleanType());
Node ite = sk.iteNode(otherL, otherR);
if(mipRes == MipClosed){
d_likelyIntegerInfeasible = true;
replayLog(approx);
+
+ if(!anyConflict()){
+ //start up simplex
+ d_partialModel.stopQueueingBoundCounts();
+ UpdateTrackingCallback utcb(&d_linEq);
+ d_partialModel.processBoundsQueue(utcb);
+ d_linEq.startTrackingBoundCounts();
+ //call simplex
+ solveRelaxationOrPanic(effortLevel);
+ // shutdown simplex
+ d_linEq.stopTrackingBoundCounts();
+ d_partialModel.startQueueingBoundCounts();
+ }
}
if(!(anyConflict() || !d_approxCuts.empty())){
turnOffApproxFor(options::replayNumericFailurePenalty());