More uses of EnvObj (#7230)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Thu, 23 Sep 2021 18:54:03 +0000 (13:54 -0500)
committerGitHub <noreply@github.com>
Thu, 23 Sep 2021 18:54:03 +0000 (18:54 +0000)
src/smt/model_core_builder.cpp
src/smt/model_core_builder.h
src/smt/smt_engine.cpp
src/theory/datatypes/sygus_extension.cpp
src/theory/datatypes/theory_datatypes.cpp
src/theory/quantifiers_engine.cpp
src/theory/sep/theory_sep.cpp
src/theory/subs_minimize.cpp
src/theory/subs_minimize.h

index 9e9eb5f230d1968ea198b13ebc4de5d6a7415d75..9a9c56972e7368cf00e4124f247e382fb9d85699 100644 (file)
@@ -21,6 +21,8 @@ using namespace cvc5::kind;
 
 namespace cvc5 {
 
+ModelCoreBuilder::ModelCoreBuilder(Env& env) : EnvObj(env) {}
+
 bool ModelCoreBuilder::setModelCore(const std::vector<Node>& assertions,
                                     theory::TheoryModel* m,
                                     options::ModelCoresMode mode)
@@ -78,15 +80,14 @@ bool ModelCoreBuilder::setModelCore(const std::vector<Node>& assertions,
   std::vector<Node> coreVars;
   std::vector<Node> impliedVars;
   bool minimized = false;
+  theory::SubstitutionMinimize sm(d_env);
   if (mode == options::ModelCoresMode::NON_IMPLIED)
   {
-    minimized = theory::SubstitutionMinimize::findWithImplied(
-        formula, vars, subs, coreVars, impliedVars);
+    minimized = sm.findWithImplied(formula, vars, subs, coreVars, impliedVars);
   }
   else if (mode == options::ModelCoresMode::SIMPLE)
   {
-    minimized = theory::SubstitutionMinimize::find(
-        formula, truen, vars, subs, coreVars);
+    minimized = sm.find(formula, truen, vars, subs, coreVars);
   }
   else
   {
index aab4fab5eb9614fc13fe700ee11ffcbac6e4921b..8a0ca5c8a1f6ef0d248ebbdd42cdf9b99b43b2f5 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "expr/node.h"
 #include "options/smt_options.h"
+#include "smt/env_obj.h"
 #include "theory/theory_model.h"
 
 namespace cvc5 {
@@ -29,9 +30,10 @@ namespace cvc5 {
 /**
  * A utility for building model cores.
  */
-class ModelCoreBuilder
+class ModelCoreBuilder : protected EnvObj
 {
  public:
+  ModelCoreBuilder(Env& env);
   /** set model core
    *
    * This function updates model m so that it has information regarding its
@@ -55,9 +57,9 @@ class ModelCoreBuilder
    * If m is not a model for assertions, this method returns false and m is
    * left unchanged.
    */
-  static bool setModelCore(const std::vector<Node>& assertions,
-                           theory::TheoryModel* m,
-                           options::ModelCoresMode mode);
+  bool setModelCore(const std::vector<Node>& assertions,
+                    theory::TheoryModel* m,
+                    options::ModelCoresMode mode);
 }; /* class TheoryModelCoreBuilder */
 
 }  // namespace cvc5
index 28ad11f46a23fe94ee587d16ff3b2d91bf08abab..f447773ad75f2a623a815da83ca9322bb0fcdbc2 100644 (file)
@@ -1135,7 +1135,8 @@ bool SmtEngine::isModelCoreSymbol(Node n)
     // impact whether we are in "sat" mode
     std::vector<Node> asserts = getAssertionsInternal();
     d_pp->expandDefinitions(asserts);
-    ModelCoreBuilder::setModelCore(asserts, tm, opts.smt.modelCoresMode);
+    ModelCoreBuilder mcb(*d_env.get());
+    mcb.setModelCore(asserts, tm, opts.smt.modelCoresMode);
   }
   return tm->isModelCoreSymbol(n);
 }
index d666cdac53a9358012c746d56fb2f62160591231..78ff93c1a7df9785029c1dda57fa62c65f75fbfa 100644 (file)
@@ -602,7 +602,7 @@ Node SygusExtension::getSimpleSymBreakPred(Node e,
     {
       Node szl = nm->mkNode(DT_SIZE, n);
       Node szr = nm->mkNode(DT_SIZE, utils::getInstCons(n, dt, tindex));
-      szr = Rewriter::rewrite(szr);
+      szr = rewrite(szr);
       sbp_conj.push_back(szl.eqNode(szr));
     }
     if (isVarAgnostic)
index 427e0251ff2f9a145d118bea1d07437edb3dc57e..feb19b182a690c379e0dec2e24d28f6282dcfab3 100644 (file)
@@ -327,7 +327,7 @@ void TheoryDatatypes::postCheck(Effort level)
                   if( options::dtBinarySplit() && consIndex!=-1 ){
                     Node test = utils::mkTester(n, consIndex, dt);
                     Trace("dt-split") << "*************Split for possible constructor " << dt[consIndex] << " for " << n << endl;
-                    test = Rewriter::rewrite( test );
+                    test = rewrite(test);
                     NodeBuilder nb(kind::OR);
                     nb << test << test.notNode();
                     Node lemma = nb;
@@ -1009,7 +1009,7 @@ void TheoryDatatypes::collapseSelector( Node s, Node c ) {
     }
     else
     {
-      rrs = Rewriter::rewrite(r);
+      rrs = rewrite(r);
     }
     if (s != rrs)
     {
@@ -1424,7 +1424,7 @@ Node TheoryDatatypes::getInstantiateCons(Node n, const DType& dt, int index)
   //add constructor to equivalence class
   Node k = getTermSkolemFor( n );
   Node n_ic = utils::getInstCons(k, dt, index);
-  n_ic = Rewriter::rewrite( n_ic );
+  n_ic = rewrite(n_ic);
   // it may be a new term, so we collect terms and add it to the equality engine
   collectTerms( n_ic );
   d_equalityEngine->addTerm(n_ic);
index dfce485f2af4bb6ecf185f30983b896f881521b9..e0863f9537963b9d93cc4840dd0a013501d6273d 100644 (file)
@@ -622,7 +622,7 @@ void QuantifiersEngine::assertQuantifier( Node f, bool pol ){
     {
       if (Trace.isOn("quantifiers-sk-debug"))
       {
-        Node slem = Rewriter::rewrite(lem.getNode());
+        Node slem = rewrite(lem.getNode());
         Trace("quantifiers-sk-debug")
             << "Skolemize lemma : " << slem << std::endl;
       }
index d28bae12a4f6ae16ed4264f31f3e568551d7d063..dc72783c0868ee76f8a570f1c32c4aaa2ee58e18 100644 (file)
@@ -761,7 +761,7 @@ void TheorySep::postCheck(Effort level)
       }
       else
       {
-        inst = Rewriter::rewrite(inst);
+        inst = rewrite(inst);
         if (inst == (polarity ? d_true : d_false))
         {
           inst_success = false;
@@ -1768,7 +1768,7 @@ void TheorySep::mergePto( Node p1, Node p2 ) {
 
 void TheorySep::sendLemma( std::vector< Node >& ant, Node conc, InferenceId id, bool infer ) {
   Trace("sep-lemma-debug") << "Do rewrite on inference : " << conc << std::endl;
-  conc = Rewriter::rewrite( conc );
+  conc = rewrite(conc);
   Trace("sep-lemma-debug") << "Got : " << conc << std::endl;
   if( conc!=d_true ){
     if( infer && conc!=d_false ){
index 2ec945963b3122f7cb9658ecfd594ae7af6887e3..56b7a2fedca9dbd863bd96dfdd246e81655e5216 100644 (file)
@@ -27,7 +27,7 @@ using namespace cvc5::kind;
 namespace cvc5 {
 namespace theory {
 
-SubstitutionMinimize::SubstitutionMinimize() {}
+SubstitutionMinimize::SubstitutionMinimize(Env& env) : EnvObj(env) {}
 
 bool SubstitutionMinimize::find(Node t,
                                 Node target,
@@ -119,7 +119,7 @@ bool SubstitutionMinimize::findWithImplied(Node t,
       // try the current substitution
       Node tcs = tc.substitute(
           reqVars.begin(), reqVars.end(), reqSubs.begin(), reqSubs.end());
-      Node tcsr = Rewriter::rewrite(tcs);
+      Node tcsr = rewrite(tcs);
       std::vector<Node> tcsrConj;
       getConjuncts(tcsr, tcsrConj);
       for (const Node& tcc : tcsrConj)
@@ -246,7 +246,7 @@ bool SubstitutionMinimize::findInternal(Node n,
           nb << it->second;
         }
         ret = nb.constructNode();
-        ret = Rewriter::rewrite(ret);
+        ret = rewrite(ret);
       }
       value[cur] = ret;
     }
@@ -323,7 +323,7 @@ bool SubstitutionMinimize::findInternal(Node n,
               // i to visit, and update curr below.
               if (scurr != curr)
               {
-                curr = Rewriter::rewrite(scurr);
+                curr = rewrite(scurr);
                 visit.push_back(cur[i]);
               }
             }
index c7846750879dc3f4ede6a3cf59fc99e8c268ddc1..571f629dd3c33e42c4ca664316b15eeeb25e0a31 100644 (file)
@@ -21,6 +21,7 @@
 #include <vector>
 
 #include "expr/node.h"
+#include "smt/env_obj.h"
 
 namespace cvc5 {
 namespace theory {
@@ -30,10 +31,10 @@ namespace theory {
  * This class is used for finding a minimal substitution under which an
  * evaluation holds.
  */
-class SubstitutionMinimize
+class SubstitutionMinimize : protected EnvObj
 {
  public:
-  SubstitutionMinimize();
+  SubstitutionMinimize(Env& env);
   ~SubstitutionMinimize() {}
   /** find
    *
@@ -45,11 +46,11 @@ class SubstitutionMinimize
    * If t { vars -> subs } does not rewrite to target, this method returns
    * false.
    */
-  static bool find(Node t,
-                   Node target,
-                   const std::vector<Node>& vars,
-                   const std::vector<Node>& subs,
-                   std::vector<Node>& reqVars);
+  bool find(Node t,
+            Node target,
+            const std::vector<Node>& vars,
+            const std::vector<Node>& subs,
+            std::vector<Node>& reqVars);
   /** find with implied
    *
    * This method should be called on a formula t.
@@ -73,26 +74,26 @@ class SubstitutionMinimize
    * to appear in reqVars, whereas those later in the vars are more likely to
    * appear in impliedVars.
    */
-  static bool findWithImplied(Node t,
-                              const std::vector<Node>& vars,
-                              const std::vector<Node>& subs,
-                              std::vector<Node>& reqVars,
-                              std::vector<Node>& impliedVars);
+  bool findWithImplied(Node t,
+                       const std::vector<Node>& vars,
+                       const std::vector<Node>& subs,
+                       std::vector<Node>& reqVars,
+                       std::vector<Node>& impliedVars);
 
  private:
   /** Common helper function for the above functions. */
-  static bool findInternal(Node t,
-                           Node target,
-                           const std::vector<Node>& vars,
-                           const std::vector<Node>& subs,
-                           std::vector<Node>& reqVars);
+  bool findInternal(Node t,
+                    Node target,
+                    const std::vector<Node>& vars,
+                    const std::vector<Node>& subs,
+                    std::vector<Node>& reqVars);
   /** is singular arg
    *
    * Returns true if
    *   <k>( ... t_{arg-1}, n, t_{arg+1}...) = c
    * always holds for some constant c.
    */
-  static bool isSingularArg(Node n, Kind k, unsigned arg);
+  bool isSingularArg(Node n, Kind k, unsigned arg);
 };
 
 }  // namespace theory