summaryrefslogtreecommitdiff
path: root/src/theory/arith/theory_arith.cpp
diff options
context:
space:
mode:
authorTim King <taking@cs.nyu.edu>2011-03-17 21:20:28 +0000
committerTim King <taking@cs.nyu.edu>2011-03-17 21:20:28 +0000
commit0e22528f5d249e301b2a5dc1f14849a7f8e25439 (patch)
treeedca918e8722a75568e174f25a5af066daabe484 /src/theory/arith/theory_arith.cpp
parent232042b3e2e265dbfe9c693d018d48388be91018 (diff)
SimplexDecisionProcedure no longer takes an OutputChannel as a parameter.
Diffstat (limited to 'src/theory/arith/theory_arith.cpp')
-rw-r--r--src/theory/arith/theory_arith.cpp32
1 files changed, 15 insertions, 17 deletions
diff --git a/src/theory/arith/theory_arith.cpp b/src/theory/arith/theory_arith.cpp
index 726bfc210..dfa81cb3f 100644
--- a/src/theory/arith/theory_arith.cpp
+++ b/src/theory/arith/theory_arith.cpp
@@ -66,7 +66,7 @@ TheoryArith::TheoryArith(context::Context* c, OutputChannel& out) :
d_tableauResetDensity(2.0),
d_tableauResetPeriod(10),
d_propagator(c, out),
- d_simplex(d_partialModel, d_out, d_tableau),
+ d_simplex(d_partialModel, d_tableau),
d_DELTA_ZERO(0),
d_statistics()
{}
@@ -308,16 +308,14 @@ DeltaRational determineRightConstant(TNode assertion, Kind simpleKind){
return DeltaRational(noninf, inf);
}
-void TheoryArith::disequalityConflict(TNode eq, TNode lb, TNode ub){
-
+Node TheoryArith::disequalityConflict(TNode eq, TNode lb, TNode ub){
NodeBuilder<3> conflict(kind::AND);
conflict << eq << lb << ub;
++(d_statistics.d_statDisequalityConflicts);
- d_out->conflict((TNode)conflict);
-
+ return conflict;
}
-bool TheoryArith::assertionCases(TNode assertion){
+Node TheoryArith::assertionCases(TNode assertion){
Kind simpKind = simplifiedKind(assertion);
Assert(simpKind != UNDEFINED_KIND);
ArithVar x_i = determineLeftVariable(assertion, simpKind);
@@ -331,18 +329,18 @@ bool TheoryArith::assertionCases(TNode assertion){
if (d_partialModel.hasLowerBound(x_i) && d_partialModel.getLowerBound(x_i) == c_i) {
Node diseq = assertion[0].eqNode(assertion[1]).notNode();
if (d_diseq.find(diseq) != d_diseq.end()) {
- disequalityConflict(diseq, d_partialModel.getLowerConstraint(x_i) , assertion);
- return true;
+ Node lb = d_partialModel.getLowerConstraint(x_i);
+ return disequalityConflict(diseq, lb , assertion);
}
}
case LT:
- return d_simplex.AssertUpper(x_i, c_i, assertion);
+ return d_simplex.AssertUpper(x_i, c_i, assertion);
case GEQ:
if (d_partialModel.hasUpperBound(x_i) && d_partialModel.getUpperBound(x_i) == c_i) {
Node diseq = assertion[0].eqNode(assertion[1]).notNode();
if (d_diseq.find(diseq) != d_diseq.end()) {
- disequalityConflict(diseq, assertion, d_partialModel.getUpperConstraint(x_i));
- return true;
+ Node ub = d_partialModel.getUpperConstraint(x_i);
+ return disequalityConflict(diseq, assertion, ub);
}
}
case GT:
@@ -366,14 +364,13 @@ bool TheoryArith::assertionCases(TNode assertion){
d_partialModel.getUpperBound(lhsVar) == rhsValue) {
Node lb = d_partialModel.getLowerConstraint(lhsVar);
Node ub = d_partialModel.getUpperConstraint(lhsVar);
- disequalityConflict(assertion, lb, ub);
- return true;
+ return disequalityConflict(assertion, lb, ub);
}
}
- return false;
+ return Node::null();
default:
Unreachable();
- return false;
+ return Node::null();
}
}
@@ -385,10 +382,11 @@ void TheoryArith::check(Effort effortLevel){
while(!done()){
Node assertion = get();
- bool conflictDuringAnAssert = assertionCases(assertion);
+ Node possibleConflict = assertionCases(assertion);
- if(conflictDuringAnAssert){
+ if(!possibleConflict.isNull()){
d_partialModel.revertAssignmentChanges();
+ d_out->conflict(possibleConflict);
return;
}
}
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback