Handing the case in replay where a cut is directly in conflict with an existing bound.
authorTim King <taking@cs.nyu.edu>
Sun, 14 Jun 2015 21:37:59 +0000 (23:37 +0200)
committerTim King <taking@cs.nyu.edu>
Sun, 14 Jun 2015 21:37:59 +0000 (23:37 +0200)
src/theory/arith/theory_arith_private.cpp

index a4825c1c471fa63f5d3d630e7b5b341f2c642280..328a07a24376924bdaf0195716431cb298605c88 100644 (file)
@@ -2639,13 +2639,16 @@ std::vector<ConstraintCPVec> TheoryArithPrivate::replayLogRec(ApproximateSimplex
 
             const ConstraintCPVec& exp = ci->getExplanation();
             // success
-            Assert(!con->negationHasProof());
             if(con->isTrue()){
               Debug("approx::replayLogRec") << "not asserted?" << endl;
-            }else{
+            }else if(!con->negationHasProof()){
               con->impliedByIntHole(exp, false);
               replayAssert(con);
               Debug("approx::replayLogRec") << "cut prop" << endl;
+            }else {
+              con->impliedByIntHole(exp, true);
+              Debug("approx::replayLogRec") << "cut into conflict " << con << endl;
+              raiseConflict(con);
             }
           }else{
             ++d_statistics.d_cutsProofFailed;