summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMorgan Deters <mdeters@cs.nyu.edu>2014-03-08 15:33:46 -0500
committerMorgan Deters <mdeters@cs.nyu.edu>2014-03-08 15:33:46 -0500
commitb61f6f4a23bb3b8650fbb0fe6b96bb27012a6139 (patch)
treeda7419f9ba82bbaf28d0fdcf0f615b6e954d15d8
parentbbb8637c877a312759547d6159be38866f47eb21 (diff)
Re-fix bug 551 by adding a check to the arith ITE simplifier to ignore non-ground ITEs also.
-rw-r--r--src/theory/arith/arith_static_learner.cpp6
-rw-r--r--src/util/ite_removal.cpp1
2 files changed, 6 insertions, 1 deletions
diff --git a/src/theory/arith/arith_static_learner.cpp b/src/theory/arith/arith_static_learner.cpp
index 3854188e0..b9260c906 100644
--- a/src/theory/arith/arith_static_learner.cpp
+++ b/src/theory/arith/arith_static_learner.cpp
@@ -109,6 +109,12 @@ void ArithStaticLearner::process(TNode n, NodeBuilder<>& learned, const TNodeSet
switch(n.getKind()){
case ITE:
+ if(n.hasBoundVar()) {
+ // Unsafe with non-ground ITEs; do nothing
+ Debug("arith::static") << "(potentially) non-ground ITE, ignoring..." << endl;
+ break;
+ }
+
if(n[0].getKind() != EQUAL &&
isRelationOperator(n[0].getKind()) ){
iteMinMax(n, learned);
diff --git a/src/util/ite_removal.cpp b/src/util/ite_removal.cpp
index 1ceedc688..1b29f9ef8 100644
--- a/src/util/ite_removal.cpp
+++ b/src/util/ite_removal.cpp
@@ -91,7 +91,6 @@ Node RemoveITE::run(TNode node, std::vector<Node>& output,
if(node.getKind() == kind::ITE) {
TypeNode nodeType = node.getType();
if(!nodeType.isBoolean() && (!inQuant || !node.hasBoundVar())) {
-Debug("ite") << "CAN REMOVE ITE " << node << " BECAUSE " << inQuant << " " << node.hasBoundVar() << endl;
Node skolem;
// Make the skolem to represent the ITE
skolem = nodeManager->mkSkolem("termITE_$$", nodeType, "a variable introduced due to term-level ITE removal");
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback