case FarkasAP: o << "FarkasAP"; break;
case TrichotomyAP: o << "TrichotomyAP"; break;
case EqualityEngineAP: o << "EqualityEngineAP"; break;
- case IntTightenAP: o << "IntTightenAP"; break;
case IntHoleAP: o << "IntHoleAP"; break;
default: break;
}
return true;
}
-bool Constraint::hasIntTightenProof() const {
- return getProofType() == IntTightenAP;
-}
-
bool Constraint::hasIntHoleProof() const {
return getProofType() == IntHoleAP;
}
return true;
}
-void Constraint::impliedByIntTighten(ConstraintCP a, bool nowInConflict){
- Debug("constraints::pf") << "impliedByIntTighten(" << this << ", " << *a << ")" << std::endl;
- Assert(!hasProof());
- Assert(negationHasProof() == nowInConflict);
- Assert(a->hasProof());
- Debug("pf::arith") << "impliedByIntTighten(" << this << ", " << a << ")"
- << std::endl;
-
- d_database->d_antecedents.push_back(NullConstraint);
- d_database->d_antecedents.push_back(a);
- AntecedentId antecedentEnd = d_database->d_antecedents.size() - 1;
- d_database->pushConstraintRule(ConstraintRule(this, IntTightenAP, antecedentEnd));
-
- Assert(inConflict() == nowInConflict);
- if(inConflict()){
- Debug("constraint::conflictCommit") << "inConflict impliedByIntTighten" << this << std::endl;
- }
-}
-
void Constraint::impliedByIntHole(ConstraintCP a, bool nowInConflict){
Debug("constraints::pf") << "impliedByIntHole(" << this << ", " << *a << ")" << std::endl;
Assert(!hasProof());
writePos++;
}else{
Assert(vi->hasTrichotomyProof() || vi->hasFarkasProof()
- || vi->hasIntHoleProof() || vi->hasIntTightenProof());
+ || vi->hasIntHoleProof());
AntecedentId p = vi->getEndAntecedent();
ConstraintCP antecedent = antecedents[p];
}else if(hasEqualityEngineProof()){
return d_database->eeExplain(this);
}else{
- Assert(hasFarkasProof() || hasIntHoleProof() || hasIntTightenProof() || hasTrichotomyProof());
+ Assert(hasFarkasProof() || hasIntHoleProof() || hasTrichotomyProof());
Assert(!antecentListIsEmpty());
//Force the selection of the layer above if the node is
// assertedToTheTheory()!
* : !(x > a) and !(x < a) => x = a
* - EqualityEngineAP : This is propagated by the equality engine.
* : Consult this for the proof.
- * - IntTightenAP : This is indicates that a bound involving integers was tightened.
- * : e.g. i < 5.5 became i <= 5, when i is an integer.
* - IntHoleAP : This is currently a catch-all for all integer specific reason.
*/
enum ArithProofType
FarkasAP,
TrichotomyAP,
EqualityEngineAP,
- IntTightenAP,
IntHoleAP};
/**
*/
bool hasSimpleFarkasProof() const;
- /** Returns true if the node has a int bound tightening proof. */
- bool hasIntTightenProof() const;
-
/** Returns true if the node has a int hole proof. */
bool hasIntHoleProof() const;
/**
* Marks a the constraint c as being entailed by a.
- * The reason has to do with integer bound tightening.
- *
- * After calling impliedByIntTighten(), the caller should either raise a conflict
- * or try call tryToPropagate().
- */
- void impliedByIntTighten(ConstraintCP a, bool inConflict);
-
- /**
- * Marks a the constraint c as being entailed by a.
- * The reason has to do with integer reasoning.
+ * The reason has to do with integer rounding.
*
* After calling impliedByIntHole(), the caller should either raise a conflict
* or try call tryToPropagate().
/**
* Marks a the constraint c as being entailed by a.
- * The reason has to do with integer reasoning.
+ * The reason has to do with integer rounding.
*
* After calling impliedByIntHole(), the caller should either raise a conflict
* or try call tryToPropagate().
Debug("arith::intbound") << "literal, before: " << constraint->getLiteral() << std::endl;
Debug("arith::intbound") << "constraint, after: " << floorConstraint << std::endl;
}
- floorConstraint->impliedByIntTighten(constraint, inConflict);
+ floorConstraint->impliedByIntHole(constraint, inConflict);
floorConstraint->tryToPropagate();
if(inConflict){
raiseConflict(floorConstraint);
Debug("arith::intbound") << "literal, before: " << constraint->getLiteral() << std::endl;
Debug("arith::intbound") << "constraint, after: " << ceilingConstraint << std::endl;
}
- ceilingConstraint->impliedByIntTighten(constraint, inConflict);
+ ceilingConstraint->impliedByIntHole(constraint, inConflict);
ceilingConstraint->tryToPropagate();
if(inConflict){
raiseConflict(ceilingConstraint);