No diamond-breaking under quantifiers (resolves bug #550).
authorMorgan Deters <mdeters@cs.nyu.edu>
Fri, 21 Feb 2014 22:15:43 +0000 (17:15 -0500)
committerMorgan Deters <mdeters@cs.nyu.edu>
Fri, 21 Feb 2014 23:15:56 +0000 (18:15 -0500)
src/theory/uf/theory_uf.cpp

index 1045c5a249a8dfcdaf8f2cf0fdd42f45e71383ac..2bce77451cd52f309991a3be633d097e73b6b822 100644 (file)
@@ -243,6 +243,13 @@ void TheoryUF::ppStaticLearn(TNode n, NodeBuilder<>& learned) {
   while(!workList.empty()) {
     n = workList.back();
 
+    if(n.getKind() == kind::FORALL || n.getKind() == kind::EXISTS) {
+      // unsafe to go under quantifiers; we might pull bound vars out of scope!
+      processed.insert(n);
+      workList.pop_back();
+      continue;
+    }
+
     bool unprocessedChildren = false;
     for(TNode::iterator i = n.begin(), iend = n.end(); i != iend; ++i) {
       if(processed.find(*i) == processed.end()) {