modified getValue to return Expr instead of Node
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Mon, 10 Sep 2012 22:29:17 +0000 (22:29 +0000)
committerAndrew Reynolds <andrew.j.reynolds@gmail.com>
Mon, 10 Sep 2012 22:29:17 +0000 (22:29 +0000)
src/printer/cvc/cvc_printer.cpp
src/printer/smt2/smt2_printer.cpp
src/smt/smt_engine.cpp
src/theory/model.cpp
src/theory/model.h
src/theory/quantifiers/first_order_model.cpp
src/util/model.h

index 5803ad23fde56c8f5bd2db77aae1de0b462a756e..9e61fb8df9cdd315481068f7dacf9fb337719a67 100644 (file)
@@ -777,7 +777,7 @@ void CvcPrinter::toStream(std::ostream& out, Model* m, Command* c, int c_type )
       }
       out << "): ";
     }
-    out << tm->getValue( n );
+    out << Node::fromExpr( tm->getValue( n.toExpr() ) );
     out << ";" << std::endl;
 
 /*
index 9400b77328d66731783d6a316c4463321fd6ae7e..6c6d2a57627c799c73feda4fddb9152043ab79eb 100644 (file)
@@ -558,7 +558,7 @@ void Smt2Printer::toStream(std::ostream& out, Model* m, Command* c, int c_type )
       out << ") " << tn;
     }
     out << " ";
-    out << tm->getValue( n );
+    out << Node::fromExpr( tm->getValue( n.toExpr() ) );
     out << ")" << std::endl;
 
 /*
index b9732c32ebe48d38c766993798a3fdda9b941781..6e6ee365af610c9f898b82098c14e96446e43193 100644 (file)
@@ -1768,7 +1768,7 @@ Expr SmtEngine::getValue(const Expr& e)
   theory::TheoryModel* m = d_theoryEngine->getModel();
   Node resultNode;
   if( m ){
-    resultNode = m->getValue( n );
+    resultNode = Node::fromExpr( m->getValue( n.toExpr() ) );
   }
   Trace("smt") << "--- got value " << n << " = " << resultNode << endl;
   // type-check the result we got
@@ -1846,7 +1846,7 @@ CVC4::SExpr SmtEngine::getAssignment() throw(ModalException, AssertionException)
     theory::TheoryModel* m = d_theoryEngine->getModel();
     Node resultNode;
     if( m ){
-      resultNode = m->getValue( n );
+      resultNode = Node::fromExpr( m->getValue( n.toExpr() ) );
     }
 
     // type-check the result we got
index 51d5a77b5dea306bed531ec5123f93cdadcc32ad..67640c3098e80b356ca0d0cd64e9fa1482bf1a50 100644 (file)
@@ -46,6 +46,15 @@ void TheoryModel::reset(){
   d_rep_set.clear();
 }
 
+Expr TheoryModel::getValue( const Expr& expr ){
+  Node n = Node::fromExpr( expr );
+  //apply substitutions
+  Node nn = d_substitutions.apply( n );
+  //get value in model
+  Node ret = getModelValue( nn );
+  return ret.toExpr();
+}
+
 void TheoryModel::toStream( std::ostream& out ){
   /*//for debugging
   eq::EqClassesIterator eqcs_i = eq::EqClassesIterator( &d_equalityEngine );
@@ -114,13 +123,6 @@ Node TheoryModel::getModelValue( TNode n ){
   }
 }
 
-Node TheoryModel::getValue( TNode n ){
-  //apply substitutions
-  Node nn = d_substitutions.apply( n );
-  //get value in model
-  return getModelValue( nn );
-}
-
 Node TheoryModel::getDomainValue( TypeNode tn, std::vector< Node >& exclude ){
   if( d_rep_set.d_type_reps.find( tn )!=d_rep_set.d_type_reps.end() ){
     //try to find a pre-existing arbitrary element
index 086e39f3e187ccf69c15de2326d826168203db2a..06618e07ce73e3a6c78c2512ce5603d493323092 100644 (file)
@@ -70,11 +70,6 @@ protected:
    */
   Node getModelValue( TNode n );
 public:
-  /**
-   * Get value function.  This should be called only after a ModelBuilder has called buildModel(...)
-   * on this model.
-   */
-  Node getValue( TNode n );
   /** get existing domain value, with possible exclusions
     *   This function returns a term in d_rep_set.d_type_reps[tn] but not in exclude
     */
@@ -112,13 +107,16 @@ public:
   Node getRepresentative( Node a );
   bool areEqual( Node a, Node b );
   bool areDisequal( Node a, Node b );
+public:
+  /** get value function */
+  Expr getValue( const Expr& expr );
+  /** to stream function */
+  void toStream( std::ostream& out );
 public:
   /** print representative debug function */
   void printRepresentativeDebug( const char* c, Node r );
   /** print representative function */
   void printRepresentative( std::ostream& out, Node r );
-  /** to stream function */
-  void toStream( std::ostream& out );
 };
 
 /** Default model class
index c3be1cdaf790829ac370f818a7638efa98c5cc3f..b0326119562da322dc3041c6ae69dc1303f7ca06 100644 (file)
@@ -274,7 +274,7 @@ Node FirstOrderModel::evaluateTerm( Node n, int& depIndex, RepSetIterator* ri ){
   if( !n.hasAttribute(InstConstantAttribute()) ){
     //if evaluating a ground term, just consult the standard getValue functionality
     depIndex = -1;
-    return getValue( n );
+    return getModelValue( n );
   }else{
     Node val;
     depIndex = ri->getNumTerms()-1;
index 747247ae130128045e657fbcb03c70675e65679f..ca7565aaabbb4d63beb4cc7e884a315ca8b2b3cb 100644 (file)
@@ -22,6 +22,8 @@
 #include <iostream>
 #include <vector>
 
+#include "expr/expr.h"
+
 namespace CVC4 {
 
 class Command;
@@ -52,6 +54,9 @@ public:
   /** get type of command */
   int getCommandType( int i ) { return d_command_types[i]; }
 public:
+  /** get value */
+  virtual Expr getValue( const Expr& expr ) = 0;
+  /** to stream function */
   virtual void toStream(std::ostream& out) = 0;
 };/* class Model */