. '+Outstanding case split in theory arith'
authorTim King <taking@cs.nyu.edu>
Wed, 26 May 2010 22:41:54 +0000 (22:41 +0000)
committerTim King <taking@cs.nyu.edu>
Wed, 26 May 2010 22:41:54 +0000 (22:41 +0000)
src/theory/arith/arith_rewriter.cpp
src/theory/arith/arith_rewriter.h
src/theory/arith/theory_arith.cpp

index 0eb3f2da758327e7f9c34cecf6494ee5c823d09c..92211076598c93abee0a1968351c4de8c84d8a3f 100644 (file)
@@ -448,6 +448,9 @@ Node ArithRewriter::rewriteTerm(TNode t){
   }else if(t.getKind() == kind::MINUS){
     Node sub = makeSubtractionNode(t[0],t[1]);
     return rewrite(sub);
+  }else if(t.getKind() == kind::UMINUS){
+    Node sub = makeUnaryMinusNode(t[0]);
+    return rewrite(sub);
   }else{
     Unreachable();
     return Node::null();
@@ -481,13 +484,14 @@ Node ArithRewriter::multPnfByNonZero(TNode pnf, Rational& q){
   return result;
 }
 
-
+Node ArithRewriter::makeUnaryMinusNode(TNode n){
+  Node tmp = NodeManager::currentNM()->mkNode(kind::MULT,d_constants->d_NEGATIVE_ONE_NODE,n);
+  return tmp;
+}
 
 Node ArithRewriter::makeSubtractionNode(TNode l, TNode r){
-  using namespace CVC4::kind;
-  NodeManager* currentNM = NodeManager::currentNM();
-  Node negR = currentNM->mkNode(MULT, d_constants->d_NEGATIVE_ONE_NODE, r);
-  Node diff = currentNM->mkNode(PLUS, l, negR);
+  Node negR = makeUnaryMinusNode(r);
+  Node diff = NodeManager::currentNM()->mkNode(kind::PLUS, l, negR);
 
   return diff;
 }
index 184844dbc3e563a1a2ab397e4bd86c31b9cdd7cd..61107703808681c1d4b3dee2ccbc7db91fd63ad2 100644 (file)
@@ -77,6 +77,7 @@ private:
   Node rewritePlus(TNode t);
   Node rewriteMinus(TNode t);
   Node makeSubtractionNode(TNode l, TNode r);
+  Node makeUnaryMinusNode(TNode n);
 
 
   Node var2pnf(TNode variable);
index bdc32ab21ab9ce90982758c0308c3699f237f788..6ff74f0f915be9ad9b8622a7c52633c052dc27d0 100644 (file)
@@ -428,7 +428,6 @@ Node TheoryArith::simulatePreprocessing(TNode n){
   }else{
     Node rewritten = rewrite(n);
     Kind k = rewritten.getKind();
-    bool negate = false;
 
     if(rewritten.getKind() == NOT){
       Node sub = simulatePreprocessing(rewritten[0]);
@@ -532,6 +531,7 @@ void TheoryArith::check(Effort level){
     }
     if(enqueuedCaseSplit){
       //d_out->caseSplit();
+      Warning() << "Outstanding case split in theory arith" << endl;
     }
   }
 }