summaryrefslogtreecommitdiff
path: root/src/theory/quantifiers/bounded_integers.cpp
diff options
context:
space:
mode:
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>2014-01-18 12:13:47 -0600
committerAndrew Reynolds <andrew.j.reynolds@gmail.com>2014-01-18 12:13:47 -0600
commitf772f276bb8e6e13e8a24a0c94ab2ad351cc72ff (patch)
tree047e66c63f0ba2d33a0fd21c02c58c53ff7455bf /src/theory/quantifiers/bounded_integers.cpp
parentc6f7c7e36c7897e9c9e6fd556bcdddcb9574d881 (diff)
Fixed non-termination issue in bounded integers.
Diffstat (limited to 'src/theory/quantifiers/bounded_integers.cpp')
-rw-r--r--src/theory/quantifiers/bounded_integers.cpp21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/theory/quantifiers/bounded_integers.cpp b/src/theory/quantifiers/bounded_integers.cpp
index d4faf41fe..5ad4cef92 100644
--- a/src/theory/quantifiers/bounded_integers.cpp
+++ b/src/theory/quantifiers/bounded_integers.cpp
@@ -104,7 +104,7 @@ Node BoundedIntegers::RangeModel::getNextDecisionRequest() {
if (!d_lit_to_pol[it->first]) {
rn = rn.negate();
}
- Trace("bound-int-dec") << "For " << d_range << ", make decision " << rn << " to make range " << i << std::endl;
+ Trace("bound-int-dec-debug") << "For " << d_range << ", make decision " << rn << " to make range " << i << std::endl;
return rn;
}
}
@@ -312,11 +312,26 @@ void BoundedIntegers::assertNode( Node n ) {
}
Node BoundedIntegers::getNextDecisionRequest() {
- Trace("bound-int-dec") << "bi: Get next decision request?" << std::endl;
+ Trace("bound-int-dec-debug") << "bi: Get next decision request?" << std::endl;
for( unsigned i=0; i<d_ranges.size(); i++) {
Node d = d_rms[d_ranges[i]]->getNextDecisionRequest();
if (!d.isNull()) {
- return d;
+ bool polLit = d.getKind()!=NOT;
+ Node lit = d.getKind()==NOT ? d[0] : d;
+ bool value;
+ if( d_quantEngine->getValuation().hasSatValue( lit, value ) ) {
+ if( value==polLit ){
+ Trace("bound-int-dec-debug") << "...already asserted properly." << std::endl;
+ //already true, we're already fine
+ }else{
+ Trace("bound-int-dec-debug") << "...already asserted with wrong polarity, re-assert." << std::endl;
+ assertNode( d.negate() );
+ i--;
+ }
+ }else{
+ Trace("bound-int-dec") << "Bounded Integers : Decide " << d << std::endl;
+ return d;
+ }
}
}
return Node::null();
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback