added getCardinality to model
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Tue, 11 Sep 2012 23:44:49 +0000 (23:44 +0000)
committerAndrew Reynolds <andrew.j.reynolds@gmail.com>
Tue, 11 Sep 2012 23:44:49 +0000 (23:44 +0000)
src/theory/model.cpp
src/theory/model.h
src/util/model.h

index dc0ae787701bdd113b89c546025856a46201c272..ed2d69308f0ed30afc581c9f38f3a69ba617e6cf 100644 (file)
@@ -59,6 +59,21 @@ Expr TheoryModel::getValue( const Expr& expr ){
   return ret.toExpr();
 }
 
+/** get cardinality for sort */
+Cardinality TheoryModel::getCardinality( const Type& t ){
+  TypeNode tn = TypeNode::fromType( t );
+  //for now, we only handle cardinalities for uninterpreted sorts
+  if( tn.isSort() ){
+    if( d_rep_set.hasType( tn ) ){
+      return Cardinality( d_rep_set.d_type_reps[tn].size() );
+    }else{
+      return Cardinality( CardinalityUnknown() );
+    }
+  }else{
+    return Cardinality( CardinalityUnknown() );
+  }
+}
+
 void TheoryModel::toStream( std::ostream& out ){
   /*//for debugging
   eq::EqClassesIterator eqcs_i = eq::EqClassesIterator( &d_equalityEngine );
@@ -76,7 +91,7 @@ void TheoryModel::toStream( std::ostream& out ){
     ++eqcs_i;
   }
   */
-  //need this function?
+  out << this;
 }
 
 Node TheoryModel::getModelValue( TNode n ){
index ea1fa0fede8809bba3cdf00670232d6d54ad204c..2f4ebfdbffb3d7f874533d61bdfa6520b14016ae 100644 (file)
@@ -116,8 +116,8 @@ public:
 public:
   /** get value function for Exprs. */
   Expr getValue( const Expr& expr );
-
-
+  /** get cardinality for sort */
+  Cardinality getCardinality( const Type& t );
   /** to stream function */
   void toStream( std::ostream& out );
 public:
index ca7565aaabbb4d63beb4cc7e884a315ca8b2b3cb..9b7db536fa1227f84f205dede8a152b2e3a257ea 100644 (file)
@@ -23,6 +23,7 @@
 #include <vector>
 
 #include "expr/expr.h"
+#include "util/cardinality.h"
 
 namespace CVC4 {
 
@@ -54,8 +55,10 @@ public:
   /** get type of command */
   int getCommandType( int i ) { return d_command_types[i]; }
 public:
-  /** get value */
+  /** get value for expression */
   virtual Expr getValue( const Expr& expr ) = 0;
+  /** get cardinality for sort */
+  virtual Cardinality getCardinality( const Type& t ) = 0;
   /** to stream function */
   virtual void toStream(std::ostream& out) = 0;
 };/* class Model */