Move isFiniteType from theory engine to Env (#7287)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Mon, 4 Oct 2021 19:00:09 +0000 (14:00 -0500)
committerGitHub <noreply@github.com>
Mon, 4 Oct 2021 19:00:09 +0000 (19:00 +0000)
In preparation for breaking more dependencies on TheoryEngine.

23 files changed:
src/smt/env.cpp
src/smt/env.h
src/theory/datatypes/sygus_extension.cpp
src/theory/datatypes/theory_datatypes.cpp
src/theory/quantifiers/fmf/bounded_integers.cpp
src/theory/quantifiers/fmf/model_engine.cpp
src/theory/quantifiers/quant_split.cpp
src/theory/sep/theory_sep.cpp
src/theory/sets/cardinality_extension.cpp
src/theory/shared_solver.cpp
src/theory/strings/base_solver.cpp
src/theory/strings/theory_strings.cpp
src/theory/term_registration_visitor.cpp
src/theory/term_registration_visitor.h
src/theory/theory_engine.cpp
src/theory/theory_engine.h
src/theory/theory_model_builder.cpp
src/theory/theory_model_builder.h
src/theory/theory_state.cpp
src/theory/theory_state.h
src/theory/uf/ho_extension.cpp
src/theory/valuation.cpp
src/theory/valuation.h

index 3267702fb0a9778b835840b02decb02d3ca1429d..dafd13d9834b0033fad3ff79d98b87567345c0ef 100644 (file)
@@ -19,6 +19,7 @@
 #include "context/context.h"
 #include "expr/node.h"
 #include "options/base_options.h"
+#include "options/quantifiers_options.h"
 #include "options/smt_options.h"
 #include "printer/printer.h"
 #include "proof/conv_proof_generator.h"
@@ -212,4 +213,10 @@ Node Env::rewriteViaMethod(TNode n, MethodId idr)
   return n;
 }
 
+bool Env::isFiniteType(TypeNode tn) const
+{
+  return isCardinalityClassFinite(tn.getCardinalityClass(),
+                                  d_options.quantifiers.finiteModelFind);
+}
+
 }  // namespace cvc5
index 8d2b1636eae736d8465e4e1acf0542c98819121a..1974408ad3cd48a034d8e90170c52c1e021de807 100644 (file)
@@ -205,6 +205,24 @@ class Env
    */
   Node rewriteViaMethod(TNode n, MethodId idr = MethodId::RW_REWRITE);
 
+  //---------------------- information about cardinality of types
+  /**
+   * Is the cardinality of type tn finite? This method depends on whether
+   * finite model finding is enabled. If finite model finding is enabled, then
+   * we assume that all uninterpreted sorts have finite cardinality.
+   *
+   * Notice that if finite model finding is enabled, this method returns true
+   * if tn is an uninterpreted sort. It also returns true for the sort
+   * (Array Int U) where U is an uninterpreted sort. This type
+   * is finite if and only if U has cardinality one; for cases like this,
+   * we conservatively return that tn has finite cardinality.
+   *
+   * This method does *not* depend on the state of the theory engine, e.g.
+   * if U in the above example currently is entailed to have cardinality >1
+   * based on the assertions.
+   */
+  bool isFiniteType(TypeNode tn) const;
+
  private:
   /* Private initialization ------------------------------------------------- */
 
index 78ff93c1a7df9785029c1dda57fa62c65f75fbfa..d3e711c32dc9b3156776509be76accb13e388f9a 100644 (file)
@@ -788,7 +788,7 @@ Node SygusExtension::getSimpleSymBreakPred(Node e,
           TypeNode tnc = children[c1].getType();
           // we may only apply this symmetry breaking scheme (which introduces
           // disequalities) if the types are infinite.
-          if (tnc == children[c2].getType() && !d_state.isFiniteType(tnc))
+          if (tnc == children[c2].getType() && !d_env.isFiniteType(tnc))
           {
             Node sym_lem_deq = children[c1].eqNode(children[c2]).negate();
             // notice that this symmetry breaking still allows for
index a1c6942a5e09ac427b0ab72fc17e474103c4bf63..c892ffc118a05906b04492e60ca8d04e80f6529a 100644 (file)
@@ -1239,7 +1239,7 @@ bool TheoryDatatypes::collectModelValues(TheoryModel* m,
           for( unsigned i=0; i<pcons.size(); i++ ){
             // must try the infinite ones first
             bool cfinite =
-                d_state.isFiniteType(dt[i].getSpecializedConstructorType(tt));
+                d_env.isFiniteType(dt[i].getSpecializedConstructorType(tt));
             if( pcons[i] && (r==1)==cfinite ){
               neqc = utils::getInstCons(eqc, dt, i);
               break;
index 656af0e2f26bedc8d68b7ad98bfada281e8c852b..fbc6cde756e88c1f12f4beba8169dbb03d9bd1ba 100644 (file)
@@ -370,7 +370,7 @@ void BoundedIntegers::checkOwnership(Node f)
           // supported for finite element types #1123). Regardless, this is
           // typically not a limitation since this variable can be bound in a
           // standard way below since its type is finite.
-          if (!d_qstate.isFiniteType(v.getType()))
+          if (!d_env.isFiniteType(v.getType()))
           {
             setBoundedVar(f, v, BOUND_SET_MEMBER);
             setBoundVar = true;
@@ -430,7 +430,7 @@ void BoundedIntegers::checkOwnership(Node f)
       for( unsigned i=0; i<f[0].getNumChildren(); i++) {
         if( d_bound_type[f].find( f[0][i] )==d_bound_type[f].end() ){
           TypeNode tn = f[0][i].getType();
-          if ((tn.isSort() && d_qstate.isFiniteType(tn))
+          if ((tn.isSort() && d_env.isFiniteType(tn))
               || d_qreg.getQuantifiersBoundInference().mayComplete(tn))
           {
             success = true;
index 25689958004479c7a75fa5272b2b0b5740d163a0..8e099b5a4046dfe03b9cfbe91fe282a5599380ee 100644 (file)
@@ -136,7 +136,7 @@ void ModelEngine::registerQuantifier( Node f ){
     for( unsigned i=0; i<f[0].getNumChildren(); i++ ){
       TypeNode tn = f[0][i].getType();
       if( !tn.isSort() ){
-        if (!d_qstate.isFiniteType(tn))
+        if (!d_env.isFiniteType(tn))
         {
           if( tn.isInteger() ){
             if( !options::fmfBound() ){
index db07d07d0a7e7ab8ec4a4688b967c99f42e98945..d8b276ac98c04a12c832f54b83edc3856a64ef87 100644 (file)
@@ -54,7 +54,7 @@ void QuantDSplit::checkOwnership(Node q)
   for( unsigned i=0; i<q[0].getNumChildren(); i++ ){
     TypeNode tn = q[0][i].getType();
     if( tn.isDatatype() ){
-      bool isFinite = d_qstate.isFiniteType(tn);
+      bool isFinite = d_env.isFiniteType(tn);
       const DType& dt = tn.getDType();
       if (dt.isRecursiveSingleton(tn))
       {
index bcf5c78f7d61e9126979bf3cb411762069b555a8..88851e4078c8b01e044703188bda39b25320f803 100644 (file)
@@ -206,7 +206,7 @@ void TheorySep::postProcessModel( TheoryModel* m ){
         if( d_pto_model[l].isNull() ){
           Trace("sep-model") << "_";
           TypeEnumerator te_range( data_type );
-          if (d_state.isFiniteType(data_type))
+          if (d_env.isFiniteType(data_type))
           {
             pto_children.push_back( *te_range );
           }else{
@@ -826,7 +826,7 @@ void TheorySep::postCheck(Effort level)
   {
     TypeNode data_type = d_loc_to_data_type[it->first];
     // if the data type is finite
-    if (!d_state.isFiniteType(data_type))
+    if (!d_env.isFiniteType(data_type))
     {
       continue;
     }
index 1842147247182c27eecb38d08e032fc386071d79..4e4ee78a82febbd3a67821a3f732f69b12dcce85 100644 (file)
@@ -89,7 +89,7 @@ void CardinalityExtension::checkCardinalityExtended(TypeNode& t)
 {
   NodeManager* nm = NodeManager::currentNM();
   TypeNode setType = nm->mkSetType(t);
-  bool finiteType = d_state.isFiniteType(t);
+  bool finiteType = d_env.isFiniteType(t);
   // skip infinite types that do not have univset terms
   if (!finiteType && d_state.getUnivSetEqClass(setType).isNull())
   {
@@ -1002,7 +1002,7 @@ void CardinalityExtension::mkModelValueElementsFor(
     TheoryModel* model)
 {
   TypeNode elementType = eqc.getType().getSetElementType();
-  bool elementTypeFinite = d_state.isFiniteType(elementType);
+  bool elementTypeFinite = d_env.isFiniteType(elementType);
   if (isModelValueBasic(eqc))
   {
     std::map<Node, Node>::iterator it = d_eqc_to_card_term.find(eqc);
@@ -1090,7 +1090,7 @@ void CardinalityExtension::collectFiniteTypeSetElements(TheoryModel* model)
   }
   for (const Node& set : getOrderedSetsEqClasses())
   {
-    if (!d_state.isFiniteType(set.getType()))
+    if (!d_env.isFiniteType(set.getType()))
     {
       continue;
     }
index a503c55954adae09df6f1b873a3764b1099f9205..7d457051b31db2001371ba3872d442424672e40b 100644 (file)
@@ -35,8 +35,8 @@ SharedSolver::SharedSolver(Env& env, TheoryEngine& te)
       d_te(te),
       d_logicInfo(logicInfo()),
       d_sharedTerms(env, &d_te),
-      d_preRegistrationVisitor(&te, context()),
-      d_sharedTermsVisitor(&te, d_sharedTerms, context()),
+      d_preRegistrationVisitor(env, &te),
+      d_sharedTermsVisitor(env, &te, d_sharedTerms),
       d_im(te.theoryOf(THEORY_BUILTIN)->getInferenceManager())
 {
 }
index 3c825e4ae0133a230621200e5f95c68ed79c72e0..e5de8ce16bd47a78473c966339c46f3cf60400d6 100644 (file)
@@ -534,7 +534,7 @@ void BaseSolver::checkCardinalityType(TypeNode tn,
   {
     Assert(tn.isSequence());
     TypeNode etn = tn.getSequenceElementType();
-    if (!d_state.isFiniteType(etn))
+    if (!d_env.isFiniteType(etn))
     {
       // infinite cardinality, we are fine
       return;
index 3eac3ca1a5f815e95760250b61821b8a6afaca72..ac6d9b6118316cca6f9724492e940797219b667c 100644 (file)
@@ -498,7 +498,7 @@ bool TheoryStrings::collectModelInfoType(
             c = sel->getCurrent();
             // if we are a sequence with infinite element type
             if (tn.isSequence()
-                && !d_state.isFiniteType(tn.getSequenceElementType()))
+                && !d_env.isFiniteType(tn.getSequenceElementType()))
             {
               // Make a skeleton instead. In particular, this means that
               // a value:
index 7f669e36db5146abcfa2c6e68f2ecbd80215257c..0ce07c867ee3491239956588ff88eaa13a2a4cee 100644 (file)
@@ -41,7 +41,7 @@ std::string PreRegisterVisitor::toString() const {
  * current. This method is used by PreRegisterVisitor and SharedTermsVisitor
  * below.
  */
-bool isAlreadyVisited(TheoryEngine* te,
+bool isAlreadyVisited(Env& env,
                       TheoryIdSet visitedTheories,
                       TNode current,
                       TNode parent)
@@ -70,7 +70,7 @@ bool isAlreadyVisited(TheoryEngine* te,
 
   // do we need to consider the type?
   TypeNode type = current.getType();
-  if (currentTheoryId == parentTheoryId && !te->isFiniteType(type))
+  if (currentTheoryId == parentTheoryId && !env.isFiniteType(type))
   {
     // current and parent are the same theory, and we are infinite, return true
     return true;
@@ -79,6 +79,11 @@ bool isAlreadyVisited(TheoryEngine* te,
   return TheoryIdSetUtil::setContains(typeTheoryId, visitedTheories);
 }
 
+PreRegisterVisitor::PreRegisterVisitor(Env& env, TheoryEngine* engine)
+    : EnvObj(env), d_engine(engine), d_visited(context())
+{
+}
+
 bool PreRegisterVisitor::alreadyVisited(TNode current, TNode parent) {
 
   Debug("register::internal") << "PreRegisterVisitor::alreadyVisited(" << current << "," << parent << ")" << std::endl;
@@ -103,7 +108,7 @@ bool PreRegisterVisitor::alreadyVisited(TNode current, TNode parent) {
   }
 
   TheoryIdSet visitedTheories = (*find).second;
-  return isAlreadyVisited(d_engine, visitedTheories, current, parent);
+  return isAlreadyVisited(d_env, visitedTheories, current, parent);
 }
 
 void PreRegisterVisitor::visit(TNode current, TNode parent) {
@@ -119,7 +124,8 @@ void PreRegisterVisitor::visit(TNode current, TNode parent) {
   // call the preregistration on current, parent or type theories and update
   // visitedTheories. The set of preregistering theories coincides with
   // visitedTheories here.
-  preRegister(d_engine, visitedTheories, current, parent, visitedTheories);
+  preRegister(
+      d_env, d_engine, visitedTheories, current, parent, visitedTheories);
 
   Debug("register::internal")
       << "PreRegisterVisitor::visit(" << current << "," << parent
@@ -131,7 +137,8 @@ void PreRegisterVisitor::visit(TNode current, TNode parent) {
   Assert(alreadyVisited(current, parent));
 }
 
-void PreRegisterVisitor::preRegister(TheoryEngine* te,
+void PreRegisterVisitor::preRegister(Env& env,
+                                     TheoryEngine* te,
                                      TheoryIdSet& visitedTheories,
                                      TNode current,
                                      TNode parent,
@@ -152,7 +159,7 @@ void PreRegisterVisitor::preRegister(TheoryEngine* te,
     // Note that if enclosed by different theories it's shared, for example,
     // in read(a, f(a)), f(a) should be shared with integers.
     TypeNode type = current.getType();
-    if (currentTheoryId != parentTheoryId || te->isFiniteType(type))
+    if (currentTheoryId != parentTheoryId || env.isFiniteType(type))
     {
       // preregister with the type's theory, if necessary
       TheoryId typeTheoryId = Theory::theoryOf(type);
@@ -214,6 +221,16 @@ void PreRegisterVisitor::preRegisterWithTheory(TheoryEngine* te,
 
 void PreRegisterVisitor::start(TNode node) {}
 
+SharedTermsVisitor::SharedTermsVisitor(Env& env,
+                                       TheoryEngine* te,
+                                       SharedTermsDatabase& sharedTerms)
+    : EnvObj(env),
+      d_engine(te),
+      d_sharedTerms(sharedTerms),
+      d_preregistered(context())
+{
+}
+
 std::string SharedTermsVisitor::toString() const {
   std::stringstream ss;
   TNodeVisitedMap::const_iterator it = d_visited.begin();
@@ -247,7 +264,7 @@ bool SharedTermsVisitor::alreadyVisited(TNode current, TNode parent) const {
   }
 
   TheoryIdSet visitedTheories = (*find).second;
-  return isAlreadyVisited(d_engine, visitedTheories, current, parent);
+  return isAlreadyVisited(d_env, visitedTheories, current, parent);
 }
 
 void SharedTermsVisitor::visit(TNode current, TNode parent) {
@@ -261,7 +278,7 @@ void SharedTermsVisitor::visit(TNode current, TNode parent) {
 
   // preregister the term with the current, parent or type theories, as needed
   PreRegisterVisitor::preRegister(
-      d_engine, visitedTheories, current, parent, preregTheories);
+      d_env, d_engine, visitedTheories, current, parent, preregTheories);
 
   // Record the new theories that we visited
   d_visited[current] = visitedTheories;
index 86ab160d8b1ec1de25dcd3075f2520dd95e129a3..3fed2c3219daeb50481aca30e40181bd4f0d630c 100644 (file)
 
 #pragma once
 
+#include <unordered_map>
+
 #include "context/context.h"
+#include "smt/env_obj.h"
 #include "theory/shared_terms_database.h"
 
-#include <unordered_map>
-
 namespace cvc5 {
 
 class TheoryEngine;
@@ -38,8 +39,8 @@ class TheoryEngine;
  * Computation of the set of theories in the original term are computed in the alreadyVisited method
  * so as no to skip any theories.
  */
-class PreRegisterVisitor {
-
+class PreRegisterVisitor : protected EnvObj
+{
   /** The engine */
   TheoryEngine* d_engine;
 
@@ -59,10 +60,7 @@ class PreRegisterVisitor {
   /** required to instantiate template for NodeVisitor */
   using return_type = void;
 
-  PreRegisterVisitor(TheoryEngine* engine, context::Context* c)
-      : d_engine(engine), d_visited(c)
-  {
-  }
+  PreRegisterVisitor(Env& env, TheoryEngine* engine);
 
   /**
    * Returns true is current has already been pre-registered with both current
@@ -102,7 +100,8 @@ class PreRegisterVisitor {
    * If there is no theory sharing, this coincides with visitedTheories.
    * Otherwise, visitedTheories may be a subset of preregTheories.
    */
-  static void preRegister(TheoryEngine* te,
+  static void preRegister(Env& env,
+                          TheoryEngine* te,
                           theory::TheoryIdSet& visitedTheories,
                           TNode current,
                           TNode parent,
@@ -121,13 +120,13 @@ class PreRegisterVisitor {
                                     theory::TheoryIdSet preregTheories);
 };
 
-
 /**
  * The reason why we need to make this outside of the pre-registration loop is because we need a shared term x to 
  * be associated with every atom that contains it. For example, if given f(x) >= 0 and f(x) + 1 >= 0, although f(x) has
  * been visited already, we need to visit it again, since we need to associate it with both atoms.
  */
-class SharedTermsVisitor {
+class SharedTermsVisitor : protected EnvObj
+{
   using TNodeVisitedMap = std::unordered_map<TNode, theory::TheoryIdSet>;
   using TNodeToTheorySetMap = context::CDHashMap<TNode, theory::TheoryIdSet>;
   /**
@@ -144,12 +143,9 @@ class SharedTermsVisitor {
   /** required to instantiate template for NodeVisitor */
   using return_type = void;
 
-  SharedTermsVisitor(TheoryEngine* te,
-                     SharedTermsDatabase& sharedTerms,
-                     context::Context* c)
-      : d_engine(te), d_sharedTerms(sharedTerms), d_preregistered(c)
-  {
-  }
+  SharedTermsVisitor(Env& env,
+                     TheoryEngine* te,
+                     SharedTermsDatabase& sharedTerms);
 
   /**
    * Returns true is current has already been pre-registered with both current and parent theories.
index 13a812bb272911ca5288026f62a22980ef4964f9..1e7116ac4b6fb1758d3e96533ed7239ae13f2845 100644 (file)
@@ -1941,12 +1941,6 @@ std::pair<bool, Node> TheoryEngine::entailmentCheck(options::TheoryOfMode mode,
   }
 }
 
-bool TheoryEngine::isFiniteType(TypeNode tn) const
-{
-  return isCardinalityClassFinite(tn.getCardinalityClass(),
-                                  options::finiteModelFind());
-}
-
 void TheoryEngine::spendResource(Resource r)
 {
   d_env.getResourceManager()->spendResource(r);
index 3807b926d7592d788a9bd6d558f2b5a8a59fa8da..0a9b6797932e8d771bd0fa0fbe01fa39edd67e89 100644 (file)
@@ -390,25 +390,6 @@ class TheoryEngine : protected EnvObj
    */
   std::pair<bool, Node> entailmentCheck(options::TheoryOfMode mode, TNode lit);
 
-  //---------------------- information about cardinality of types
-  /**
-   * Is the cardinality of type tn finite? This method depends on whether
-   * finite model finding is enabled. If finite model finding is enabled, then
-   * we assume that all uninterpreted sorts have finite cardinality.
-   *
-   * Notice that if finite model finding is enabled, this method returns true
-   * if tn is an uninterpreted sort. It also returns true for the sort
-   * (Array Int U) where U is an uninterpreted sort. This type
-   * is finite if and only if U has cardinality one; for cases like this,
-   * we conservatively return that tn has finite cardinality.
-   *
-   * This method does *not* depend on the state of the theory engine, e.g.
-   * if U in the above example currently is entailed to have cardinality >1
-   * based on the assertions.
-   */
-  bool isFiniteType(TypeNode tn) const;
-  //---------------------- end information about cardinality of types
-
   theory::SortInference* getSortInference() { return d_sortInfer.get(); }
 
   /** Prints the assertions to the debug stream */
index bbe1588d68286cd5b588a4b82be702d65fd7f012..ac177a1141a86f799accf082057238a8e61efc0e 100644 (file)
@@ -275,12 +275,6 @@ bool TheoryEngineModelBuilder::isCdtValueMatch(Node v,
   return false;
 }
 
-bool TheoryEngineModelBuilder::isFiniteType(TypeNode tn) const
-{
-  return isCardinalityClassFinite(tn.getCardinalityClass(),
-                                  options::finiteModelFind());
-}
-
 bool TheoryEngineModelBuilder::involvesUSort(TypeNode tn) const
 {
   if (tn.isSort())
@@ -844,8 +838,9 @@ bool TheoryEngineModelBuilder::buildModel(TheoryModel* tm)
       if (t.isDatatype())
       {
         const DType& dt = t.getDType();
-        isCorecursive = dt.isCodatatype()
-                        && (!isFiniteType(t) || dt.isRecursiveSingleton(t));
+        isCorecursive =
+            dt.isCodatatype()
+            && (!d_env.isFiniteType(t) || dt.isRecursiveSingleton(t));
       }
 #ifdef CVC5_ASSERTIONS
       bool isUSortFiniteRestricted = false;
@@ -922,7 +917,7 @@ bool TheoryEngineModelBuilder::buildModel(TheoryModel* tm)
             n = itAssigner->second.getNextAssignment();
             Assert(!n.isNull());
           }
-          else if (t.isSort() || !isFiniteType(t))
+          else if (t.isSort() || !d_env.isFiniteType(t))
           {
             // If its interpreted as infinite, we get a fresh value that does
             // not occur in the model.
index dd11a3d2ec5de1991f5d08bad546f630c326d7be..a604d04025aa8b4f85ae560dd2cecd3164f2b3de 100644 (file)
@@ -299,11 +299,6 @@ class TheoryEngineModelBuilder : protected EnvObj
   bool isCdtValueMatch(Node v, Node r, Node eqc, Node& eqc_m);
   //------------------------------------end for codatatypes
 
-  /**
-   * Is the given type constrained to be finite? This depends on whether
-   * finite model finding is enabled.
-   */
-  bool isFiniteType(TypeNode tn) const;
   //---------------------------------for debugging finite model finding
   /** does type tn involve an uninterpreted sort? */
   bool involvesUSort(TypeNode tn) const;
index 484e27eaddbfa2702104f7fe5ea06ce65cfdd44d..08ad20e01ab6a87d590fa1ee769d662cf0e1a6e6 100644 (file)
@@ -162,11 +162,6 @@ context::CDList<Assertion>::const_iterator TheoryState::factsEnd(TheoryId tid)
   return d_valuation.factsEnd(tid);
 }
 
-bool TheoryState::isFiniteType(TypeNode tn) const
-{
-  return d_valuation.isFiniteType(tn);
-}
-
 Valuation& TheoryState::getValuation() { return d_valuation; }
 
 }  // namespace theory
index e8da3ad3922483af0eb88b2598a5c6b8c74fe34c..4d2c29e1bd26e32497d86619c98f110336fb405f 100644 (file)
@@ -100,11 +100,6 @@ class TheoryState : protected EnvObj
   context::CDList<Assertion>::const_iterator factsBegin(TheoryId tid);
   /** The beginning iterator of facts for theory tid.*/
   context::CDList<Assertion>::const_iterator factsEnd(TheoryId tid);
-  /**
-   * Is the cardinality of type tn finite? This method depends on whether
-   * finite model finding is enabled. For details, see theory_engine.h.
-   */
-  bool isFiniteType(TypeNode tn) const;
 
   /** Get the underlying valuation class */
   Valuation& getValuation();
index 925805332a172332e193d46ed4300d0217226938..096a47c8678cab0009b9b06d8d4cf7593e557c09 100644 (file)
@@ -215,7 +215,7 @@ unsigned HoExtension::checkExtensionality(TheoryModel* m)
       hasFunctions = true;
       // if during collect model, must have an infinite type
       // if not during collect model, must have a finite type
-      if (d_state.isFiniteType(tn) != isCollectModel)
+      if (d_env.isFiniteType(tn) != isCollectModel)
       {
         func_eqcs[tn].push_back(eqc);
         Trace("uf-ho-debug")
index 621f89539820d42b9dbf2646ff0d05d22586374c..bd7a3872c6030c94457f5431cfe8f517fca44c5b 100644 (file)
@@ -232,10 +232,5 @@ context::CDList<Assertion>::const_iterator Valuation::factsEnd(TheoryId tid)
   return theory->facts_end();
 }
 
-bool Valuation::isFiniteType(TypeNode tn) const
-{
-  return d_engine->isFiniteType(tn);
-}
-
 }  // namespace theory
 }  // namespace cvc5
index 2b95829e0e1a4623bc9af40324b3ef115784d140..f1b14da761cf51f64f8951dabd719cd230684e5d 100644 (file)
@@ -231,11 +231,6 @@ public:
   context::CDList<Assertion>::const_iterator factsBegin(TheoryId tid);
   /** The beginning iterator of facts for theory tid.*/
   context::CDList<Assertion>::const_iterator factsEnd(TheoryId tid);
-  /**
-   * Is the cardinality of type tn finite? This method depends on whether
-   * finite model finding is enabled. For details, see theory_engine.h.
-   */
-  bool isFiniteType(TypeNode tn) const;
 };/* class Valuation */
 
 }  // namespace theory