Adding a check in Polynomial::parsePolynomial to better enforce the arithmetic normal...
authorTim King <taking@cs.nyu.edu>
Fri, 28 Oct 2011 18:35:27 +0000 (18:35 +0000)
committerTim King <taking@cs.nyu.edu>
Fri, 28 Oct 2011 18:35:27 +0000 (18:35 +0000)
src/theory/arith/normal_form.h

index a182bc3b0c6cfce4cd83ad8ae28efdb70d1ce6de..a1a33fed0e1b9396ebe96f5f3e8595f0620413a9 100644 (file)
@@ -570,10 +570,24 @@ public:
       return true;
     }else if(n.getKind() == kind::PLUS){
       Assert(n.getNumChildren() >= 2);
-      for(Node::iterator curr = n.begin(), end = n.end(); curr != end;++curr){
-        if(!Monomial::isMember(*curr)){
+      Node::iterator currIter = n.begin(), end = n.end();
+      Node prev = *currIter;
+      if(!Monomial::isMember(prev)){
+        return false;
+      }
+
+      Monomial mprev = Monomial::parseMonomial(prev);
+      ++currIter;
+      for(; currIter != end; ++currIter){
+        Node curr = *currIter;
+        if(!Monomial::isMember(curr)){
+          return false;
+        }
+        Monomial mcurr = Monomial::parseMonomial(curr);
+        if(!(mprev < mcurr)){
           return false;
         }
+        mprev = mcurr;
       }
       return true;
     } else {