Passing term registry to ematching utilities (#6190)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Tue, 23 Mar 2021 20:41:13 +0000 (15:41 -0500)
committerGitHub <noreply@github.com>
Tue, 23 Mar 2021 20:41:13 +0000 (20:41 +0000)
Model is now nested into term registry.

This PR also resolves some complications due to namespaces within quantifiers.

53 files changed:
src/theory/quantifiers/ematching/candidate_generator.cpp
src/theory/quantifiers/ematching/candidate_generator.h
src/theory/quantifiers/ematching/ho_trigger.cpp
src/theory/quantifiers/ematching/ho_trigger.h
src/theory/quantifiers/ematching/im_generator.cpp
src/theory/quantifiers/ematching/im_generator.h
src/theory/quantifiers/ematching/inst_match_generator.cpp
src/theory/quantifiers/ematching/inst_match_generator.h
src/theory/quantifiers/ematching/inst_match_generator_multi.cpp
src/theory/quantifiers/ematching/inst_match_generator_multi.h
src/theory/quantifiers/ematching/inst_match_generator_multi_linear.cpp
src/theory/quantifiers/ematching/inst_match_generator_multi_linear.h
src/theory/quantifiers/ematching/inst_match_generator_simple.cpp
src/theory/quantifiers/ematching/inst_match_generator_simple.h
src/theory/quantifiers/ematching/inst_strategy.cpp
src/theory/quantifiers/ematching/inst_strategy.h
src/theory/quantifiers/ematching/inst_strategy_e_matching.cpp
src/theory/quantifiers/ematching/inst_strategy_e_matching.h
src/theory/quantifiers/ematching/inst_strategy_e_matching_user.cpp
src/theory/quantifiers/ematching/inst_strategy_e_matching_user.h
src/theory/quantifiers/ematching/instantiation_engine.cpp
src/theory/quantifiers/ematching/instantiation_engine.h
src/theory/quantifiers/ematching/pattern_term_selector.cpp
src/theory/quantifiers/ematching/pattern_term_selector.h
src/theory/quantifiers/ematching/trigger.cpp
src/theory/quantifiers/ematching/trigger.h
src/theory/quantifiers/ematching/trigger_term_info.cpp
src/theory/quantifiers/ematching/trigger_term_info.h
src/theory/quantifiers/ematching/trigger_trie.cpp
src/theory/quantifiers/ematching/trigger_trie.h
src/theory/quantifiers/ematching/var_match_generator.cpp
src/theory/quantifiers/ematching/var_match_generator.h
src/theory/quantifiers/fmf/full_model_check.cpp
src/theory/quantifiers/fmf/model_engine.cpp
src/theory/quantifiers/inst_match.cpp
src/theory/quantifiers/inst_match.h
src/theory/quantifiers/inst_match_trie.cpp
src/theory/quantifiers/inst_match_trie.h
src/theory/quantifiers/inst_strategy_enumerative.cpp
src/theory/quantifiers/instantiate.cpp
src/theory/quantifiers/instantiate.h
src/theory/quantifiers/quantifiers_inference_manager.cpp
src/theory/quantifiers/quantifiers_inference_manager.h
src/theory/quantifiers/quantifiers_modules.cpp
src/theory/quantifiers/quantifiers_modules.h
src/theory/quantifiers/term_database.cpp
src/theory/quantifiers/term_registry.cpp
src/theory/quantifiers/term_registry.h
src/theory/quantifiers/term_util.cpp
src/theory/quantifiers/theory_quantifiers.cpp
src/theory/quantifiers/theory_quantifiers.h
src/theory/quantifiers_engine.cpp
src/theory/quantifiers_engine.h

index 4cc912e457603592875cfe8337c5025a6012e9a2..60350f882669b32fd7e7f70b4b266fff218a479b 100644 (file)
 #include "smt/smt_engine.h"
 #include "smt/smt_engine_scope.h"
 #include "theory/quantifiers/first_order_model.h"
-#include "theory/quantifiers/inst_match.h"
-#include "theory/quantifiers/instantiate.h"
 #include "theory/quantifiers/quantifiers_state.h"
 #include "theory/quantifiers/term_database.h"
+#include "theory/quantifiers/term_registry.h"
 #include "theory/quantifiers/term_util.h"
-#include "theory/quantifiers_engine.h"
 
 using namespace CVC4::kind;
 
 namespace CVC4 {
 namespace theory {
+namespace quantifiers {
 namespace inst {
 
+CandidateGenerator::CandidateGenerator(QuantifiersState& qs, TermRegistry& tr)
+    : d_qs(qs), d_treg(tr)
+{
+}
+
 bool CandidateGenerator::isLegalCandidate( Node n ){
-  return d_qe->getTermDatabase()->isTermActive( n ) && ( !options::cegqi() || !quantifiers::TermUtil::hasInstConstAttr(n) );
+  return d_treg.getTermDatabase()->isTermActive(n)
+         && (!options::cegqi() || !quantifiers::TermUtil::hasInstConstAttr(n));
 }
 
-CandidateGeneratorQE::CandidateGeneratorQE(QuantifiersEngine* qe, Node pat)
-    : CandidateGenerator(qe),
+CandidateGeneratorQE::CandidateGeneratorQE(QuantifiersState& qs,
+                                           TermRegistry& tr,
+                                           Node pat)
+    : CandidateGenerator(qs, tr),
       d_term_iter(-1),
       d_term_iter_limit(0),
       d_mode(cand_term_none)
 {
-  d_op = qe->getTermDatabase()->getMatchOperator( pat );
+  d_op = d_treg.getTermDatabase()->getMatchOperator(pat);
   Assert(!d_op.isNull());
 }
 
@@ -53,16 +60,16 @@ void CandidateGeneratorQE::resetForOperator(Node eqc, Node op)
   d_term_iter = 0;
   d_eqc = eqc;
   d_op = op;
-  d_term_iter_limit = d_qe->getTermDatabase()->getNumGroundTerms(d_op);
+  d_term_iter_limit = d_treg.getTermDatabase()->getNumGroundTerms(d_op);
   if( eqc.isNull() ){
     d_mode = cand_term_db;
   }else{
     if( isExcludedEqc( eqc ) ){
       d_mode = cand_term_none;
     }else{
-      eq::EqualityEngine* ee = d_qe->getState().getEqualityEngine();
+      eq::EqualityEngine* ee = d_qs.getEqualityEngine();
       if( ee->hasTerm( eqc ) ){
-        TNodeTrie* tat = d_qe->getTermDatabase()->getTermArgTrie(eqc, op);
+        TNodeTrie* tat = d_treg.getTermDatabase()->getTermArgTrie(eqc, op);
         if( tat ){
           //create an equivalence class iterator in eq class eqc
           Node rep = ee->getRepresentative( eqc );
@@ -81,7 +88,7 @@ void CandidateGeneratorQE::resetForOperator(Node eqc, Node op)
 bool CandidateGeneratorQE::isLegalOpCandidate( Node n ) {
   if( n.hasOperator() ){
     if( isLegalCandidate( n ) ){
-      return d_qe->getTermDatabase()->getMatchOperator( n )==d_op;
+      return d_treg.getTermDatabase()->getMatchOperator(n) == d_op;
     }
   }
   return false;
@@ -94,18 +101,18 @@ Node CandidateGeneratorQE::getNextCandidate(){
 Node CandidateGeneratorQE::getNextCandidateInternal()
 {
   if( d_mode==cand_term_db ){
-    quantifiers::QuantifiersState& qs = d_qe->getState();
     Debug("cand-gen-qe") << "...get next candidate in tbd" << std::endl;
     //get next candidate term in the uf term database
     while( d_term_iter<d_term_iter_limit ){
-      Node n = d_qe->getTermDatabase()->getGroundTerm( d_op, d_term_iter );
+      Node n = d_treg.getTermDatabase()->getGroundTerm(d_op, d_term_iter);
       d_term_iter++;
       if( isLegalCandidate( n ) ){
-        if( d_qe->getTermDatabase()->hasTermCurrent( n ) ){
+        if (d_treg.getTermDatabase()->hasTermCurrent(n))
+        {
           if( d_exclude_eqc.empty() ){
             return n;
           }else{
-            Node r = qs.getRepresentative(n);
+            Node r = d_qs.getRepresentative(n);
             if( d_exclude_eqc.find( r )==d_exclude_eqc.end() ){
               Debug("cand-gen-qe") << "...returning " << n << std::endl;
               return n;
@@ -138,14 +145,17 @@ Node CandidateGeneratorQE::getNextCandidateInternal()
   return Node::null();
 }
 
-CandidateGeneratorQELitDeq::CandidateGeneratorQELitDeq( QuantifiersEngine* qe, Node mpat ) :
-CandidateGenerator( qe ), d_match_pattern( mpat ){
+CandidateGeneratorQELitDeq::CandidateGeneratorQELitDeq(QuantifiersState& qs,
+                                                       TermRegistry& tr,
+                                                       Node mpat)
+    : CandidateGenerator(qs, tr), d_match_pattern(mpat)
+{
   Assert(d_match_pattern.getKind() == EQUAL);
   d_match_pattern_type = d_match_pattern[0].getType();
 }
 
 void CandidateGeneratorQELitDeq::reset( Node eqc ){
-  eq::EqualityEngine* ee = d_qe->getState().getEqualityEngine();
+  eq::EqualityEngine* ee = d_qs.getEqualityEngine();
   Node falset = NodeManager::currentNM()->mkConst(false);
   d_eqc_false = eq::EqClassIterator(falset, ee);
 }
@@ -169,9 +179,11 @@ Node CandidateGeneratorQELitDeq::getNextCandidate(){
   return Node::null();
 }
 
-
-CandidateGeneratorQEAll::CandidateGeneratorQEAll( QuantifiersEngine* qe, Node mpat ) :
-  CandidateGenerator( qe ), d_match_pattern( mpat ){
+CandidateGeneratorQEAll::CandidateGeneratorQEAll(QuantifiersState& qs,
+                                                 TermRegistry& tr,
+                                                 Node mpat)
+    : CandidateGenerator(qs, tr), d_match_pattern(mpat)
+{
   d_match_pattern_type = mpat.getType();
   Assert(mpat.getKind() == INST_CONSTANT);
   d_f = quantifiers::TermUtil::getInstConstAttr( mpat );
@@ -180,12 +192,12 @@ CandidateGeneratorQEAll::CandidateGeneratorQEAll( QuantifiersEngine* qe, Node mp
 }
 
 void CandidateGeneratorQEAll::reset( Node eqc ) {
-  d_eq = eq::EqClassesIterator(d_qe->getState().getEqualityEngine());
+  d_eq = eq::EqClassesIterator(d_qs.getEqualityEngine());
   d_firstTime = true;
 }
 
 Node CandidateGeneratorQEAll::getNextCandidate() {
-  quantifiers::TermDb* tdb = d_qe->getTermDatabase();
+  quantifiers::TermDb* tdb = d_treg.getTermDatabase();
   while( !d_eq.isFinished() ){
     TNode n = (*d_eq);
     ++d_eq;
@@ -194,7 +206,7 @@ Node CandidateGeneratorQEAll::getNextCandidate() {
       if( !nh.isNull() ){
         if (options::instMaxLevel() != -1)
         {
-          nh = d_qe->getModel()->getInternalRepresentative(nh, d_f, d_index);
+          nh = d_treg.getModel()->getInternalRepresentative(nh, d_f, d_index);
           //don't consider this if already the instantiation is ineligible
           if (!nh.isNull() && !tdb->isTermEligibleForInstantiation(nh, d_f))
           {
@@ -212,14 +224,15 @@ Node CandidateGeneratorQEAll::getNextCandidate() {
   if( d_firstTime ){
     //must return something
     d_firstTime = false;
-    return d_qe->getInstantiate()->getTermForType(d_match_pattern_type);
+    return d_treg.getTermForType(d_match_pattern_type);
   }
   return Node::null();
 }
 
-CandidateGeneratorConsExpand::CandidateGeneratorConsExpand(
-    QuantifiersEngine* qe, Node mpat)
-    : CandidateGeneratorQE(qe, mpat)
+CandidateGeneratorConsExpand::CandidateGeneratorConsExpand(QuantifiersState& qs,
+                                                           TermRegistry& tr,
+                                                           Node mpat)
+    : CandidateGeneratorQE(qs, tr, mpat)
 {
   Assert(mpat.getKind() == APPLY_CONSTRUCTOR);
   d_mpat_type = mpat.getType();
@@ -268,9 +281,10 @@ bool CandidateGeneratorConsExpand::isLegalOpCandidate(Node n)
   return isLegalCandidate(n);
 }
 
-CandidateGeneratorSelector::CandidateGeneratorSelector(QuantifiersEngine* qe,
+CandidateGeneratorSelector::CandidateGeneratorSelector(QuantifiersState& qs,
+                                                       TermRegistry& tr,
                                                        Node mpat)
-    : CandidateGeneratorQE(qe, mpat)
+    : CandidateGeneratorQE(qs, tr, mpat)
 {
   Trace("sel-trigger") << "Selector trigger: " << mpat << std::endl;
   Assert(mpat.getKind() == APPLY_SELECTOR);
@@ -280,19 +294,19 @@ CandidateGeneratorSelector::CandidateGeneratorSelector(QuantifiersEngine* qe,
   {
     Assert(mpatExp[1].getKind() == APPLY_SELECTOR_TOTAL);
     Assert(mpatExp[2].getKind() == APPLY_UF);
-    d_selOp = qe->getTermDatabase()->getMatchOperator(mpatExp[1]);
-    d_ufOp = qe->getTermDatabase()->getMatchOperator(mpatExp[2]);
+    d_selOp = d_treg.getTermDatabase()->getMatchOperator(mpatExp[1]);
+    d_ufOp = d_treg.getTermDatabase()->getMatchOperator(mpatExp[2]);
   }
   else if (mpatExp.getKind() == APPLY_SELECTOR_TOTAL)
   {
     // corner case of datatype with one constructor
-    d_selOp = qe->getTermDatabase()->getMatchOperator(mpatExp);
+    d_selOp = d_treg.getTermDatabase()->getMatchOperator(mpatExp);
   }
   else
   {
     // corner case of a wrongly applied selector as a trigger
     Assert(mpatExp.getKind() == APPLY_UF);
-    d_ufOp = qe->getTermDatabase()->getMatchOperator(mpatExp);
+    d_ufOp = d_treg.getTermDatabase()->getMatchOperator(mpatExp);
   }
   Assert(d_selOp != d_ufOp);
 }
@@ -332,5 +346,6 @@ Node CandidateGeneratorSelector::getNextCandidate()
 }
 
 }  // namespace inst
+}  // namespace quantifiers
 }  // namespace theory
 }  // namespace CVC4
index e0d25eb64dbe0846a394ee21f93bcfcef3d12181..45eec1d4c083c606a192d80441e8d81b5e52518e 100644 (file)
 
 namespace CVC4 {
 namespace theory {
+namespace quantifiers {
 
-class QuantifiersEngine;
+class QuantifiersState;
+class TermRegistry;
 
 namespace inst {
 
@@ -51,10 +53,8 @@ namespace inst {
  *
  */
 class CandidateGenerator {
-protected:
-  QuantifiersEngine* d_qe;
-public:
-  CandidateGenerator( QuantifiersEngine* qe ) : d_qe( qe ){}
+ public:
+  CandidateGenerator(QuantifiersState& qs, TermRegistry& tr);
   virtual ~CandidateGenerator(){}
   /** reset instantiation round
    *
@@ -70,10 +70,15 @@ public:
   virtual void reset( Node eqc ) = 0;
   /** get the next candidate */
   virtual Node getNextCandidate() = 0;
-public:
- /** is n a legal candidate? */
- bool isLegalCandidate(Node n);
-};/* class CandidateGenerator */
+  /** is n a legal candidate? */
+  bool isLegalCandidate(Node n);
+
+ protected:
+  /** Reference to the quantifiers state */
+  QuantifiersState& d_qs;
+  /** Reference to the term registry */
+  TermRegistry& d_treg;
+};
 
 /* the default candidate generator class
  *
@@ -88,7 +93,7 @@ class CandidateGeneratorQE : public CandidateGenerator
   friend class CandidateGeneratorQEDisequal;
 
  public:
-  CandidateGeneratorQE(QuantifiersEngine* qe, Node pat);
+  CandidateGeneratorQE(QuantifiersState& qs, TermRegistry& tr, Node pat);
   /** reset */
   void reset(Node eqc) override;
   /** get next candidate */
@@ -142,7 +147,7 @@ class CandidateGeneratorQELitDeq : public CandidateGenerator
    * mpat is an equality that we are matching to equalities in the equivalence
    * class of false
    */
-  CandidateGeneratorQELitDeq(QuantifiersEngine* qe, Node mpat);
+  CandidateGeneratorQELitDeq(QuantifiersState& qs, TermRegistry& tr, Node mpat);
   /** reset */
   void reset(Node eqc) override;
   /** get next candidate */
@@ -178,7 +183,7 @@ class CandidateGeneratorQEAll : public CandidateGenerator
   bool d_firstTime;
 
  public:
-  CandidateGeneratorQEAll( QuantifiersEngine* qe, Node mpat );
+  CandidateGeneratorQEAll(QuantifiersState& qs, TermRegistry& tr, Node mpat);
   /** reset */
   void reset(Node eqc) override;
   /** get next candidate */
@@ -196,7 +201,9 @@ class CandidateGeneratorQEAll : public CandidateGenerator
 class CandidateGeneratorConsExpand : public CandidateGeneratorQE
 {
  public:
-  CandidateGeneratorConsExpand(QuantifiersEngine* qe, Node mpat);
+  CandidateGeneratorConsExpand(QuantifiersState& qs,
+                               TermRegistry& tr,
+                               Node mpat);
   /** reset */
   void reset(Node eqc) override;
   /** get next candidate */
@@ -216,7 +223,7 @@ class CandidateGeneratorConsExpand : public CandidateGeneratorQE
 class CandidateGeneratorSelector : public CandidateGeneratorQE
 {
  public:
-  CandidateGeneratorSelector(QuantifiersEngine* qe, Node mpat);
+  CandidateGeneratorSelector(QuantifiersState& qs, TermRegistry& tr, Node mpat);
   /** reset */
   void reset(Node eqc) override;
   /**
@@ -234,6 +241,7 @@ class CandidateGeneratorSelector : public CandidateGeneratorQE
 };
 
 }/* CVC4::theory::inst namespace */
+}  // namespace quantifiers
 }/* CVC4::theory namespace */
 }/* CVC4 namespace */
 
index 17cbba7ea954a660bd52e9a8c8a92935de97e9f3..6206b24a711d8c539753e936b89b8aa8b1978b35 100644 (file)
@@ -29,17 +29,19 @@ using namespace CVC4::kind;
 
 namespace CVC4 {
 namespace theory {
+namespace quantifiers {
 namespace inst {
 
 HigherOrderTrigger::HigherOrderTrigger(
     QuantifiersEngine* qe,
-    quantifiers::QuantifiersState& qs,
-    quantifiers::QuantifiersInferenceManager& qim,
-    quantifiers::QuantifiersRegistry& qr,
+    QuantifiersState& qs,
+    QuantifiersInferenceManager& qim,
+    QuantifiersRegistry& qr,
+    TermRegistry& tr,
     Node q,
     std::vector<Node>& nodes,
     std::map<Node, std::vector<Node> >& ho_apps)
-    : Trigger(qe, qs, qim, qr, q, nodes), d_ho_var_apps(ho_apps)
+    : Trigger(qe, qs, qim, qr, tr, q, nodes), d_ho_var_apps(ho_apps)
 {
   NodeManager* nm = NodeManager::currentNM();
   // process the higher-order variable applications
@@ -166,7 +168,7 @@ void HigherOrderTrigger::collectHoVarApplyTerms(
           {
             if (op.getKind() == kind::INST_CONSTANT)
             {
-              Assert(quantifiers::TermUtil::getInstConstAttr(ret) == q);
+              Assert(TermUtil::getInstConstAttr(ret) == q);
               Trace("ho-quant-trigger-debug")
                   << "Ho variable apply term : " << ret << " with head " << op
                   << std::endl;
@@ -234,7 +236,7 @@ bool HigherOrderTrigger::sendInstantiation(std::vector<Node>& m, InferenceId id)
     d_lchildren.clear();
     d_arg_to_arg_rep.clear();
     d_arg_vector.clear();
-    quantifiers::QuantifiersState& qs = d_quantEngine->getState();
+    QuantifiersState& qs = d_quantEngine->getState();
     for (std::pair<const TNode, std::vector<Node> >& ha : ho_var_apps_subs)
     {
       TNode var = ha.first;
@@ -474,7 +476,7 @@ uint64_t HigherOrderTrigger::addHoTypeMatchPredicateLemmas()
   Trace("ho-quant-trigger") << "addHoTypeMatchPredicateLemmas..." << std::endl;
   uint64_t numLemmas = 0;
   // this forces expansion of APPLY_UF terms to curried HO_APPLY chains
-  quantifiers::TermDb* tdb = d_quantEngine->getTermDatabase();
+  TermDb* tdb = d_quantEngine->getTermDatabase();
   unsigned size = tdb->getNumOperators();
   NodeManager* nm = NodeManager::currentNM();
   for (unsigned j = 0; j < size; j++)
@@ -522,6 +524,7 @@ uint64_t HigherOrderTrigger::addHoTypeMatchPredicateLemmas()
   return numLemmas;
 }
 
-} /* CVC4::theory::inst namespace */
-} /* CVC4::theory namespace */
-} /* CVC4 namespace */
+}  // namespace inst
+}  // namespace quantifiers
+}  // namespace theory
+}  // namespace CVC4
index fcb3cbfee8d3f64433a36d4d05e2a1e3344a4b22..87c7adeec69b471b1624c868e6e91bd058da118d 100644 (file)
@@ -27,6 +27,7 @@
 
 namespace CVC4 {
 namespace theory {
+namespace quantifiers {
 namespace inst {
 
 class Trigger;
@@ -93,9 +94,10 @@ class HigherOrderTrigger : public Trigger
 
  private:
   HigherOrderTrigger(QuantifiersEngine* qe,
-                     quantifiers::QuantifiersState& qs,
-                     quantifiers::QuantifiersInferenceManager& qim,
-                     quantifiers::QuantifiersRegistry& qr,
+                     QuantifiersState& qs,
+                     QuantifiersInferenceManager& qim,
+                     QuantifiersRegistry& qr,
+                     TermRegistry& tr,
                      Node q,
                      std::vector<Node>& nodes,
                      std::map<Node, std::vector<Node> >& ho_apps);
@@ -274,8 +276,9 @@ class HigherOrderTrigger : public Trigger
                             bool arg_changed);
 };
 
-} /* CVC4::theory::inst namespace */
-} /* CVC4::theory namespace */
-} /* CVC4 namespace */
+}  // namespace inst
+}  // namespace quantifiers
+}  // namespace theory
+}  // namespace CVC4
 
 #endif /* CVC4__THEORY__QUANTIFIERS__HO_TRIGGER_H */
index 829ccc8b10d49fe8bf40a3767a7fab77dd8d15cd..48c07ba4d2c6b32c815af686c3130542385e0957 100644 (file)
@@ -20,10 +20,11 @@ using namespace CVC4::kind;
 
 namespace CVC4 {
 namespace theory {
+namespace quantifiers {
 namespace inst {
 
 IMGenerator::IMGenerator(Trigger* tparent)
-    : d_tparent(tparent), d_qstate(tparent->d_qstate)
+    : d_tparent(tparent), d_qstate(tparent->d_qstate), d_treg(tparent->d_treg)
 {
 }
 
@@ -37,7 +38,7 @@ QuantifiersEngine* IMGenerator::getQuantifiersEngine()
   return d_tparent->d_quantEngine;
 }
 
-
-}/* CVC4::theory::inst namespace */
-}/* CVC4::theory namespace */
-}/* CVC4 namespace */
+}  // namespace inst
+}  // namespace quantifiers
+}  // namespace theory
+}  // namespace CVC4
index 6bf472cb55aaa7b43ad1c54250eaee5e6f0a5900..0d0f9498d1b04737c698e06350e06c37e430e5b0 100644 (file)
@@ -29,7 +29,7 @@ class QuantifiersEngine;
 
 namespace quantifiers {
 class QuantifiersState;
-}  // namespace quantifiers
+class TermRegistry;
 
 namespace inst {
 
@@ -110,12 +110,15 @@ protected:
  bool sendInstantiation(InstMatch& m, InferenceId id);
  /** The parent trigger that owns this */
  Trigger* d_tparent;
- /** The state of the quantifiers engine */
- quantifiers::QuantifiersState& d_qstate;
+ /** Reference to the state of the quantifiers engine */
+ QuantifiersState& d_qstate;
+ /** Reference to the term registry */
+ TermRegistry& d_treg;
  // !!!!!!!!! temporarily available (project #15)
  QuantifiersEngine* getQuantifiersEngine();
 };/* class IMGenerator */
 
+}  // namespace inst
 }
 }
 }
index 5f47f70c3b1b72bd489d522c860f0d784686c5a8..ac3e1b9be6da78706d525da918af013f400c32cc 100644 (file)
@@ -33,6 +33,7 @@ using namespace CVC4::kind;
 
 namespace CVC4 {
 namespace theory {
+namespace quantifiers {
 namespace inst {
 
 InstMatchGenerator::InstMatchGenerator(Trigger* tparent, Node pat)
@@ -200,13 +201,13 @@ void InstMatchGenerator::initialize(Node q,
     }
   }
 
-  QuantifiersEngine* qe = getQuantifiersEngine();
   // create candidate generator
   if (mpk == APPLY_SELECTOR)
   {
     // candidates for apply selector are a union of correctly and incorrectly
     // applied selectors
-    d_cg = new inst::CandidateGeneratorSelector(qe, d_match_pattern);
+    d_cg =
+        new inst::CandidateGeneratorSelector(d_qstate, d_treg, d_match_pattern);
   }
   else if (TriggerTermInfo::isAtomicTriggerKind(mpk))
   {
@@ -217,12 +218,14 @@ void InstMatchGenerator::initialize(Node q,
       const DType& dt = d_match_pattern.getType().getDType();
       if (dt.getNumConstructors() == 1)
       {
-        d_cg = new inst::CandidateGeneratorConsExpand(qe, d_match_pattern);
+        d_cg = new inst::CandidateGeneratorConsExpand(
+            d_qstate, d_treg, d_match_pattern);
       }
     }
     if (d_cg == nullptr)
     {
-      CandidateGeneratorQE* cg = new CandidateGeneratorQE(qe, d_match_pattern);
+      CandidateGeneratorQE* cg =
+          new CandidateGeneratorQE(d_qstate, d_treg, d_match_pattern);
       // we will be scanning lists trying to find ground terms whose operator
       // is the same as d_match_operator's.
       d_cg = cg;
@@ -247,9 +250,9 @@ void InstMatchGenerator::initialize(Node q,
       Trace("inst-match-gen")
           << "Purify dt trigger " << d_pattern << ", will match terms of op "
           << cOp << std::endl;
-      d_cg = new inst::CandidateGeneratorQE(qe, cOp);
+      d_cg = new inst::CandidateGeneratorQE(d_qstate, d_treg, cOp);
     }else{
-      d_cg = new CandidateGeneratorQEAll(qe, d_match_pattern);
+      d_cg = new CandidateGeneratorQEAll(d_qstate, d_treg, d_match_pattern);
     }
   }
   else if (mpk == EQUAL)
@@ -258,7 +261,8 @@ void InstMatchGenerator::initialize(Node q,
     if (d_pattern.getKind() == NOT)
     {
       // candidates will be all disequalities
-      d_cg = new inst::CandidateGeneratorQELitDeq(qe, d_match_pattern);
+      d_cg = new inst::CandidateGeneratorQELitDeq(
+          d_qstate, d_treg, d_match_pattern);
     }
   }
   else
@@ -666,6 +670,7 @@ InstMatchGenerator* InstMatchGenerator::getInstMatchGenerator(Trigger* tparent,
   return new InstMatchGenerator(tparent, n);
 }
 
-}/* CVC4::theory::inst namespace */
-}/* CVC4::theory namespace */
-}/* CVC4 namespace */
+}  // namespace inst
+}  // namespace quantifiers
+}  // namespace theory
+}  // namespace CVC4
index 3f6976ca7f103b38ec51d732d86ef52d615a5b79..375fe73e1cfe953fcc66f1a6ac4b38d85557dd2b 100644 (file)
@@ -24,6 +24,7 @@
 
 namespace CVC4 {
 namespace theory {
+namespace quantifiers {
 namespace inst {
 
 class CandidateGenerator;
@@ -321,6 +322,7 @@ class InstMatchGenerator : public IMGenerator {
                                                    Node n);
 };/* class InstMatchGenerator */
 
+}  // namespace inst
 }
 }
 }
index 2920be1a23eff9477db4b0b0d54af5158169590e..c4d5272a49ec2bcbcf7a898f25d0bdf73f16a4ee 100644 (file)
@@ -23,6 +23,7 @@ using namespace CVC4::kind;
 
 namespace CVC4 {
 namespace theory {
+namespace quantifiers {
 namespace inst {
 
 InstMatchGeneratorMulti::InstMatchGeneratorMulti(Trigger* tparent,
@@ -35,8 +36,7 @@ InstMatchGeneratorMulti::InstMatchGeneratorMulti(Trigger* tparent,
   std::map<Node, std::vector<Node> > var_contains;
   for (const Node& pat : pats)
   {
-    quantifiers::TermUtil::computeInstConstContainsForQuant(
-        q, pat, var_contains[pat]);
+    TermUtil::computeInstConstContainsForQuant(q, pat, var_contains[pat]);
   }
   // convert to indicies
   for (std::pair<const Node, std::vector<Node> >& vc : var_contains)
@@ -269,7 +269,7 @@ void InstMatchGeneratorMulti::processNewInstantiations(InstMatch& m,
     {
       return;
     }
-    quantifiers::QuantifiersState& qs = d_qstate;
+    QuantifiersState& qs = d_qstate;
     // check modulo equality for other possible instantiations
     if (!qs.hasTerm(n))
     {
@@ -314,5 +314,6 @@ void InstMatchGeneratorMulti::processNewInstantiations(InstMatch& m,
 }
 
 }  // namespace inst
+}  // namespace quantifiers
 }  // namespace theory
 }  // namespace CVC4
index 85cbff7f0ab9770caca025ab1d465a3bf2f58c86..1e25baea424d0f6d47bc796219ca1f214d681d68 100644 (file)
@@ -25,6 +25,7 @@
 
 namespace CVC4 {
 namespace theory {
+namespace quantifiers {
 namespace inst {
 
 /** InstMatchGeneratorMulti
@@ -100,6 +101,7 @@ class InstMatchGeneratorMulti : public IMGenerator
 };
 
 }  // namespace inst
+}  // namespace quantifiers
 }  // namespace theory
 }  // namespace CVC4
 
index ac7bb5f3c37f58664b55b915aec415de9b583acc..e8c08ef1eb266e65896f5470bfa00b9627b09625 100644 (file)
@@ -22,6 +22,7 @@ using namespace CVC4::kind;
 
 namespace CVC4 {
 namespace theory {
+namespace quantifiers {
 namespace inst {
 
 InstMatchGeneratorMultiLinear::InstMatchGeneratorMultiLinear(
@@ -32,8 +33,7 @@ InstMatchGeneratorMultiLinear::InstMatchGeneratorMultiLinear(
   std::map<Node, std::vector<Node> > var_contains;
   for (const Node& pat : pats)
   {
-    quantifiers::TermUtil::computeInstConstContainsForQuant(
-        q, pat, var_contains[pat]);
+    TermUtil::computeInstConstContainsForQuant(q, pat, var_contains[pat]);
   }
   std::map<Node, std::vector<Node> > var_to_node;
   for (std::pair<const Node, std::vector<Node> >& vc : var_contains)
@@ -174,5 +174,6 @@ int InstMatchGeneratorMultiLinear::getNextMatch(Node q, InstMatch& m)
 }
 
 }  // namespace inst
+}  // namespace quantifiers
 }  // namespace theory
 }  // namespace CVC4
index ce1e79229a0bb9a25cf488879dc29b0cc3838341..b4696040076a447d5977b414560cae820036ba95 100644 (file)
@@ -24,6 +24,7 @@
 
 namespace CVC4 {
 namespace theory {
+namespace quantifiers {
 namespace inst {
 
 /** InstMatchGeneratorMultiLinear class
@@ -82,6 +83,7 @@ class InstMatchGeneratorMultiLinear : public InstMatchGenerator
 };
 
 }  // namespace inst
+}  // namespace quantifiers
 }  // namespace theory
 }  // namespace CVC4
 
index eaf917545849c668b73dde30652b05921bf3d934..c7360d02f96a1e2934111fd5681608ad5c4cdc8b 100644 (file)
@@ -26,6 +26,7 @@ using namespace CVC4::kind;
 
 namespace CVC4 {
 namespace theory {
+namespace quantifiers {
 namespace inst {
 
 InstMatchGeneratorSimple::InstMatchGeneratorSimple(Trigger* tparent,
@@ -46,7 +47,7 @@ InstMatchGeneratorSimple::InstMatchGeneratorSimple(Trigger* tparent,
   {
     d_eqc = d_match_pattern[1];
     d_match_pattern = d_match_pattern[0];
-    Assert(!quantifiers::TermUtil::hasInstConstAttr(d_eqc));
+    Assert(!TermUtil::hasInstConstAttr(d_eqc));
   }
   Assert(TriggerTermInfo::isSimpleTrigger(d_match_pattern));
   for (size_t i = 0, nchild = d_match_pattern.getNumChildren(); i < nchild; i++)
@@ -54,7 +55,7 @@ InstMatchGeneratorSimple::InstMatchGeneratorSimple(Trigger* tparent,
     if (d_match_pattern[i].getKind() == INST_CONSTANT)
     {
       if (!options::cegqi()
-          || quantifiers::TermUtil::getInstConstAttr(d_match_pattern[i]) == q)
+          || TermUtil::getInstConstAttr(d_match_pattern[i]) == q)
       {
         d_var_num[i] = d_match_pattern[i].getAttribute(InstVarNumAttribute());
       }
@@ -65,7 +66,7 @@ InstMatchGeneratorSimple::InstMatchGeneratorSimple(Trigger* tparent,
     }
     d_match_pattern_arg_types.push_back(d_match_pattern[i].getType());
   }
-  quantifiers::TermDb* tdb = getQuantifiersEngine()->getTermDatabase();
+  TermDb* tdb = getQuantifiersEngine()->getTermDatabase();
   d_op = tdb->getMatchOperator(d_match_pattern);
 }
 
@@ -74,7 +75,7 @@ uint64_t InstMatchGeneratorSimple::addInstantiations(Node q)
 {
   uint64_t addedLemmas = 0;
   TNodeTrie* tat;
-  quantifiers::TermDb* tdb = getQuantifiersEngine()->getTermDatabase();
+  TermDb* tdb = getQuantifiersEngine()->getTermDatabase();
   if (d_eqc.isNull())
   {
     tat = tdb->getTermArgTrie(d_op);
@@ -187,7 +188,7 @@ void InstMatchGeneratorSimple::addInstantiations(InstMatch& m,
 
 int InstMatchGeneratorSimple::getActiveScore()
 {
-  quantifiers::TermDb* tdb = getQuantifiersEngine()->getTermDatabase();
+  TermDb* tdb = getQuantifiersEngine()->getTermDatabase();
   Node f = tdb->getMatchOperator(d_match_pattern);
   size_t ngt = tdb->getNumGroundTerms(f);
   Trace("trigger-active-sel-debug") << "Number of ground terms for (simple) "
@@ -196,5 +197,6 @@ int InstMatchGeneratorSimple::getActiveScore()
 }
 
 }  // namespace inst
+}  // namespace quantifiers
 }  // namespace theory
 }  // namespace CVC4
index bfb4b684067efbd9d22b746161af2e2c2a47cba8..ad48d9c911b3a221a9ae802ac41e9774d64d2f62 100644 (file)
@@ -25,6 +25,7 @@
 
 namespace CVC4 {
 namespace theory {
+namespace quantifiers {
 namespace inst {
 
 /** InstMatchGeneratorSimple class
@@ -101,6 +102,7 @@ class InstMatchGeneratorSimple : public IMGenerator
 };
 
 }  // namespace inst
+}  // namespace quantifiers
 }  // namespace theory
 }  // namespace CVC4
 
index 2ca7f7af0d15fd412f6de5b009db807372051d07..08333194844d2e730f6670b2d0d3bd0623d330b9 100644 (file)
@@ -23,8 +23,9 @@ namespace quantifiers {
 InstStrategy::InstStrategy(QuantifiersEngine* qe,
                            QuantifiersState& qs,
                            QuantifiersInferenceManager& qim,
-                           QuantifiersRegistry& qr)
-    : d_quantEngine(qe), d_qstate(qs), d_qim(qim), d_qreg(qr)
+                           QuantifiersRegistry& qr,
+                           TermRegistry& tr)
+    : d_quantEngine(qe), d_qstate(qs), d_qim(qim), d_qreg(qr), d_treg(tr)
 {
 }
 InstStrategy::~InstStrategy() {}
index 84b9c4b7759fe56e12371dbc46c5115219581937..cbe6e341b27a92d3a2e51916e57d95b03994f170 100644 (file)
@@ -32,6 +32,7 @@ namespace quantifiers {
 class QuantifiersState;
 class QuantifiersInferenceManager;
 class QuantifiersRegistry;
+class TermRegistry;
 
 /** A status response to process */
 enum class InstStrategyStatus
@@ -51,7 +52,8 @@ class InstStrategy
   InstStrategy(QuantifiersEngine* qe,
                QuantifiersState& qs,
                QuantifiersInferenceManager& qim,
-               QuantifiersRegistry& qr);
+               QuantifiersRegistry& qr,
+               TermRegistry& tr);
   virtual ~InstStrategy();
   /** presolve */
   virtual void presolve();
@@ -74,8 +76,10 @@ class InstStrategy
   QuantifiersState& d_qstate;
   /** The quantifiers inference manager object */
   QuantifiersInferenceManager& d_qim;
-  /** The quantifiers registry */
+  /** Reference to the quantifiers registry */
   QuantifiersRegistry& d_qreg;
+  /** Reference to the term registry */
+  TermRegistry& d_treg;
 }; /* class InstStrategy */
 
 }  // namespace quantifiers
index 4470e5bf40596000d5e96021be59477ba5c215f4..ba068230df7ea1cc3067d6d3f50287220c1dbc4b 100644 (file)
@@ -23,7 +23,7 @@
 #include "util/random.h"
 
 using namespace CVC4::kind;
-using namespace CVC4::theory::inst;
+using namespace CVC4::theory::quantifiers::inst;
 
 namespace CVC4 {
 namespace theory {
@@ -66,8 +66,9 @@ InstStrategyAutoGenTriggers::InstStrategyAutoGenTriggers(
     QuantifiersState& qs,
     QuantifiersInferenceManager& qim,
     QuantifiersRegistry& qr,
+    TermRegistry& tr,
     QuantRelevance* qrlv)
-    : InstStrategy(qe, qs, qim, qr), d_quant_rel(qrlv)
+    : InstStrategy(qe, qs, qim, qr, tr), d_quant_rel(qrlv)
 {
   //how to select trigger terms
   d_tr_strategy = options::triggerSelMode();
@@ -284,6 +285,7 @@ void InstStrategyAutoGenTriggers::generateTriggers( Node f ){
                               d_qstate,
                               d_qim,
                               d_qreg,
+                              d_treg,
                               f,
                               patTerms[0],
                               false,
@@ -323,6 +325,7 @@ void InstStrategyAutoGenTriggers::generateTriggers( Node f ){
                               d_qstate,
                               d_qim,
                               d_qreg,
+                              d_treg,
                               f,
                               patTerms,
                               false,
@@ -367,6 +370,7 @@ void InstStrategyAutoGenTriggers::generateTriggers( Node f ){
                                             d_qstate,
                                             d_qim,
                                             d_qreg,
+                                            d_treg,
                                             f,
                                             patTerms[index],
                                             false,
index e0999e984bf90770c98fc5145154425ee9d57b65..f4c74c43a4d0bfe08af1919a8a92bd3ec0efc954 100644 (file)
@@ -89,6 +89,7 @@ class InstStrategyAutoGenTriggers : public InstStrategy
                               QuantifiersState& qs,
                               QuantifiersInferenceManager& qim,
                               QuantifiersRegistry& qr,
+                              TermRegistry& tr,
                               QuantRelevance* qrlv);
   ~InstStrategyAutoGenTriggers() {}
 
index c9e566b77b771287a8f397a4fddc3ee9f81fc0e5..412676ad4dc9364c695aefe3aca98c35f101b7f9 100644 (file)
@@ -19,7 +19,7 @@
 #include "theory/quantifiers_engine.h"
 
 using namespace CVC4::kind;
-using namespace CVC4::theory::inst;
+using namespace CVC4::theory::quantifiers::inst;
 
 namespace CVC4 {
 namespace theory {
@@ -29,15 +29,16 @@ InstStrategyUserPatterns::InstStrategyUserPatterns(
     QuantifiersEngine* ie,
     QuantifiersState& qs,
     QuantifiersInferenceManager& qim,
-    QuantifiersRegistry& qr)
-    : InstStrategy(ie, qs, qim, qr)
+    QuantifiersRegistry& qr,
+    TermRegistry& tr)
+    : InstStrategy(ie, qs, qim, qr, tr)
 {
 }
 InstStrategyUserPatterns::~InstStrategyUserPatterns() {}
 
 size_t InstStrategyUserPatterns::getNumUserGenerators(Node q) const
 {
-  std::map<Node, std::vector<inst::Trigger*> >::const_iterator it =
+  std::map<Node, std::vector<Trigger*> >::const_iterator it =
       d_user_gen.find(q);
   if (it == d_user_gen.end())
   {
@@ -46,10 +47,9 @@ size_t InstStrategyUserPatterns::getNumUserGenerators(Node q) const
   return it->second.size();
 }
 
-inst::Trigger* InstStrategyUserPatterns::getUserGenerator(Node q,
-                                                          size_t i) const
+Trigger* InstStrategyUserPatterns::getUserGenerator(Node q, size_t i) const
 {
-  std::map<Node, std::vector<inst::Trigger*> >::const_iterator it =
+  std::map<Node, std::vector<Trigger*> >::const_iterator it =
       d_user_gen.find(q);
   if (it == d_user_gen.end())
   {
@@ -111,6 +111,7 @@ InstStrategyStatus InstStrategyUserPatterns::process(Node q,
                                       d_qstate,
                                       d_qim,
                                       d_qreg,
+                                      d_treg,
                                       q,
                                       ugw[i],
                                       true,
@@ -123,7 +124,7 @@ InstStrategyStatus InstStrategyUserPatterns::process(Node q,
     ugw.clear();
   }
 
-  std::vector<inst::Trigger*>& ug = d_user_gen[q];
+  std::vector<Trigger*>& ug = d_user_gen[q];
   for (Trigger* t : ug)
   {
     if (Trace.isOn("process-trigger"))
@@ -171,6 +172,7 @@ void InstStrategyUserPatterns::addUserPattern(Node q, Node pat)
                                   d_qstate,
                                   d_qim,
                                   d_qreg,
+                                  d_treg,
                                   q,
                                   nodes,
                                   true,
index 4da092f70052075c00e5a33ab1e1896cd3441d79..e63154a60d75dd6172c9355325cc12c3ac186f91 100644 (file)
@@ -37,7 +37,8 @@ class InstStrategyUserPatterns : public InstStrategy
   InstStrategyUserPatterns(QuantifiersEngine* qe,
                            QuantifiersState& qs,
                            QuantifiersInferenceManager& qim,
-                           QuantifiersRegistry& qr);
+                           QuantifiersRegistry& qr,
+                           TermRegistry& tr);
   ~InstStrategyUserPatterns();
   /** add pattern */
   void addUserPattern(Node q, Node pat);
index 619c8b9bbb7c18b17cae801dc077728438fc00ed..1c301141ca69438bc6b9ad70c2332691597d66e7 100644 (file)
 #include "theory/quantifiers/term_util.h"
 #include "theory/quantifiers_engine.h"
 
-using namespace std;
 using namespace CVC4::kind;
 using namespace CVC4::context;
-using namespace CVC4::theory::inst;
+using namespace CVC4::theory::quantifiers::inst;
 
 namespace CVC4 {
 namespace theory {
@@ -36,7 +35,8 @@ namespace quantifiers {
 InstantiationEngine::InstantiationEngine(QuantifiersEngine* qe,
                                          QuantifiersState& qs,
                                          QuantifiersInferenceManager& qim,
-                                         QuantifiersRegistry& qr)
+                                         QuantifiersRegistry& qr,
+                                         TermRegistry& tr)
     : QuantifiersModule(qs, qim, qr, qe),
       d_instStrategies(),
       d_isup(),
@@ -53,13 +53,14 @@ InstantiationEngine::InstantiationEngine(QuantifiersEngine* qe,
     // user-provided patterns
     if (options::userPatternsQuant() != options::UserPatMode::IGNORE)
     {
-      d_isup.reset(new InstStrategyUserPatterns(d_quantEngine, qs, qim, qr));
+      d_isup.reset(
+          new InstStrategyUserPatterns(d_quantEngine, qs, qim, qr, tr));
       d_instStrategies.push_back(d_isup.get());
     }
 
     // auto-generated patterns
     d_i_ag.reset(new InstStrategyAutoGenTriggers(
-        d_quantEngine, qs, qim, qr, d_quant_rel.get()));
+        d_quantEngine, qs, qim, qr, tr, d_quant_rel.get()));
     d_instStrategies.push_back(d_i_ag.get());
   }
 }
index b327fb4a6c24ad0584111c950b596d0e9cdb0dd4..4042e3424e813ae2d525eea76ced4ecd80cc57f5 100644 (file)
@@ -51,7 +51,8 @@ class InstantiationEngine : public QuantifiersModule {
   InstantiationEngine(QuantifiersEngine* qe,
                       QuantifiersState& qs,
                       QuantifiersInferenceManager& qim,
-                      QuantifiersRegistry& qr);
+                      QuantifiersRegistry& qr,
+                      TermRegistry& tr);
   ~InstantiationEngine();
   void presolve() override;
   bool needsCheck(Theory::Effort e) override;
index bdf5499fa743a31825f29ffdd8b0b74f68838036..7ab54fcfec67f6c2f9d3b55a93e42fbc5e6ca107 100644 (file)
@@ -24,6 +24,7 @@ using namespace CVC4::kind;
 
 namespace CVC4 {
 namespace theory {
+namespace quantifiers {
 namespace inst {
 
 PatternTermSelector::PatternTermSelector(Node q,
@@ -726,5 +727,6 @@ void PatternTermSelector::getTriggerVariables(Node n,
 }
 
 }  // namespace inst
+}  // namespace quantifiers
 }  // namespace theory
 }  // namespace CVC4
index a056000955a40494dfe795c4dd978a53f2e9b1ba..9cbf4cf5e1a502e849bc9c513ec0431681cbe2fe 100644 (file)
@@ -25,6 +25,7 @@
 
 namespace CVC4 {
 namespace theory {
+namespace quantifiers {
 namespace inst {
 
 /**
@@ -189,6 +190,7 @@ class PatternTermSelector
 };
 
 }  // namespace inst
+}  // namespace quantifiers
 }  // namespace theory
 }  // namespace CVC4
 
index 3940370cf16e2cdb308e0303058f6dd4f6a7bf22..af0a0bfbcc3fe705cd6ca9aae3ac62bb8db1714d 100644 (file)
@@ -38,16 +38,23 @@ using namespace CVC4::kind;
 
 namespace CVC4 {
 namespace theory {
+namespace quantifiers {
 namespace inst {
 
 /** trigger class constructor */
 Trigger::Trigger(QuantifiersEngine* qe,
-                 quantifiers::QuantifiersState& qs,
-                 quantifiers::QuantifiersInferenceManager& qim,
-                 quantifiers::QuantifiersRegistry& qr,
+                 QuantifiersState& qs,
+                 QuantifiersInferenceManager& qim,
+                 QuantifiersRegistry& qr,
+                 TermRegistry& tr,
                  Node q,
                  std::vector<Node>& nodes)
-    : d_quantEngine(qe), d_qstate(qs), d_qim(qim), d_qreg(qr), d_quant(q)
+    : d_quantEngine(qe),
+      d_qstate(qs),
+      d_qim(qim),
+      d_qreg(qr),
+      d_treg(tr),
+      d_quant(q)
 {
   // We must ensure that the ground subterms of the trigger have been
   // preprocessed.
@@ -59,7 +66,7 @@ Trigger::Trigger(QuantifiersEngine* qe,
   }
   if (Trace.isOn("trigger"))
   {
-    quantifiers::QuantAttributes& qa = d_qreg.getQuantAttributes();
+    QuantAttributes& qa = d_qreg.getQuantAttributes();
     Trace("trigger") << "Trigger for " << qa.quantToString(q) << ": "
                      << std::endl;
     for (const Node& n : d_nodes)
@@ -169,8 +176,7 @@ bool Trigger::mkTriggerTerms(Node q,
   std::map< Node, std::vector< Node > > varContains;
   for (const Node& pat : temp)
   {
-    quantifiers::TermUtil::computeInstConstContainsForQuant(
-        q, pat, varContains[pat]);
+    TermUtil::computeInstConstContainsForQuant(q, pat, varContains[pat]);
   }
   for (const Node& t : temp)
   {
@@ -178,7 +184,7 @@ bool Trigger::mkTriggerTerms(Node q,
     bool foundVar = false;
     for (const Node& v : vct)
     {
-      Assert(quantifiers::TermUtil::getInstConstAttr(v) == q);
+      Assert(TermUtil::getInstConstAttr(v) == q);
       if( vars.find( v )==vars.end() ){
         varCount++;
         vars[ v ] = true;
@@ -242,9 +248,10 @@ bool Trigger::mkTriggerTerms(Node q,
 }
 
 Trigger* Trigger::mkTrigger(QuantifiersEngine* qe,
-                            quantifiers::QuantifiersState& qs,
-                            quantifiers::QuantifiersInferenceManager& qim,
-                            quantifiers::QuantifiersRegistry& qr,
+                            QuantifiersState& qs,
+                            QuantifiersInferenceManager& qim,
+                            QuantifiersRegistry& qr,
+                            TermRegistry& tr,
                             Node f,
                             std::vector<Node>& nodes,
                             bool keepAll,
@@ -285,11 +292,11 @@ Trigger* Trigger::mkTrigger(QuantifiersEngine* qe,
   Trigger* t;
   if (!ho_apps.empty())
   {
-    t = new HigherOrderTrigger(qe, qs, qim, qr, f, trNodes, ho_apps);
+    t = new HigherOrderTrigger(qe, qs, qim, qr, tr, f, trNodes, ho_apps);
   }
   else
   {
-    t = new Trigger(qe, qs, qim, qr, f, trNodes);
+    t = new Trigger(qe, qs, qim, qr, tr, f, trNodes);
   }
 
   qe->getTriggerDatabase()->addTrigger( trNodes, t );
@@ -297,9 +304,10 @@ Trigger* Trigger::mkTrigger(QuantifiersEngine* qe,
 }
 
 Trigger* Trigger::mkTrigger(QuantifiersEngine* qe,
-                            quantifiers::QuantifiersState& qs,
-                            quantifiers::QuantifiersInferenceManager& qim,
-                            quantifiers::QuantifiersRegistry& qr,
+                            QuantifiersState& qs,
+                            QuantifiersInferenceManager& qim,
+                            QuantifiersRegistry& qr,
+                            TermRegistry& tr,
                             Node f,
                             Node n,
                             bool keepAll,
@@ -308,7 +316,7 @@ Trigger* Trigger::mkTrigger(QuantifiersEngine* qe,
 {
   std::vector< Node > nodes;
   nodes.push_back( n );
-  return mkTrigger(qe, qs, qim, qr, f, nodes, keepAll, trOption, useNVars);
+  return mkTrigger(qe, qs, qim, qr, tr, f, nodes, keepAll, trOption, useNVars);
 }
 
 int Trigger::getActiveScore() { return d_mg->getActiveScore(); }
@@ -334,7 +342,7 @@ Node Trigger::ensureGroundTermPreprocessed(Valuation& val,
       {
         visited[cur] = cur;
       }
-      else if (!quantifiers::TermUtil::hasInstConstAttr(cur))
+      else if (!TermUtil::hasInstConstAttr(cur))
       {
         // cur has no INST_CONSTANT, thus is ground.
         Node vcur = val.getPreprocessedTerm(cur);
@@ -382,6 +390,7 @@ void Trigger::debugPrint(const char* c) const
   Trace(c) << "TRIGGER( " << d_nodes << " )" << std::endl;
 }
 
-}/* CVC4::theory::inst namespace */
-}/* CVC4::theory namespace */
-}/* CVC4 namespace */
+}  // namespace inst
+}  // namespace quantifiers
+}  // namespace theory
+}  // namespace CVC4
index b5a271fae03cfee050b2a7ecbd95793761581e38..3c218ca7b8fd8961badd2bf0a0afe293c884d026 100644 (file)
@@ -30,12 +30,12 @@ namespace quantifiers {
 class QuantifiersState;
 class QuantifiersInferenceManager;
 class QuantifiersRegistry;
-}
+class TermRegistry;
+class InstMatch;
 
 namespace inst {
 
 class IMGenerator;
-class InstMatch;
 class InstMatchGenerator;
 /** A collection of nodes representing a trigger.
 *
@@ -162,9 +162,10 @@ class Trigger {
     TR_RETURN_NULL  //return null if a duplicate is found
   };
   static Trigger* mkTrigger(QuantifiersEngine* qe,
-                            quantifiers::QuantifiersState& qs,
-                            quantifiers::QuantifiersInferenceManager& qim,
-                            quantifiers::QuantifiersRegistry& qr,
+                            QuantifiersState& qs,
+                            QuantifiersInferenceManager& qim,
+                            QuantifiersRegistry& qr,
+                            TermRegistry& tr,
                             Node q,
                             std::vector<Node>& nodes,
                             bool keepAll = true,
@@ -172,9 +173,10 @@ class Trigger {
                             size_t useNVars = 0);
   /** single trigger version that calls the above function */
   static Trigger* mkTrigger(QuantifiersEngine* qe,
-                            quantifiers::QuantifiersState& qs,
-                            quantifiers::QuantifiersInferenceManager& qim,
-                            quantifiers::QuantifiersRegistry& qr,
+                            QuantifiersState& qs,
+                            QuantifiersInferenceManager& qim,
+                            QuantifiersRegistry& qr,
+                            TermRegistry& tr,
                             Node q,
                             Node n,
                             bool keepAll = true,
@@ -197,9 +199,10 @@ class Trigger {
  protected:
   /** trigger constructor, intentionally protected (use Trigger::mkTrigger). */
   Trigger(QuantifiersEngine* ie,
-          quantifiers::QuantifiersState& qs,
-          quantifiers::QuantifiersInferenceManager& qim,
-          quantifiers::QuantifiersRegistry& qr,
+          QuantifiersState& qs,
+          QuantifiersInferenceManager& qim,
+          QuantifiersRegistry& qr,
+          TermRegistry& tr,
           Node q,
           std::vector<Node>& nodes);
   /** add an instantiation (called by InstMatchGenerator)
@@ -250,11 +253,13 @@ class Trigger {
   // !!!!!!!!!!!!!!!!!! temporarily available (project #15)
   QuantifiersEngine* d_quantEngine;
   /** Reference to the quantifiers state */
-  quantifiers::QuantifiersState& d_qstate;
+  QuantifiersState& d_qstate;
   /** Reference to the quantifiers inference manager */
-  quantifiers::QuantifiersInferenceManager& d_qim;
+  QuantifiersInferenceManager& d_qim;
   /** The quantifiers registry */
-  quantifiers::QuantifiersRegistry& d_qreg;
+  QuantifiersRegistry& d_qreg;
+  /** Reference to the term registry */
+  TermRegistry& d_treg;
   /** The quantified formula this trigger is for. */
   Node d_quant;
   /** match generator
@@ -265,8 +270,9 @@ class Trigger {
   IMGenerator* d_mg;
 }; /* class Trigger */
 
-}/* CVC4::theory::inst namespace */
-}/* CVC4::theory namespace */
-}/* CVC4 namespace */
+}  // namespace inst
+}  // namespace quantifiers
+}  // namespace theory
+}  // namespace CVC4
 
 #endif /* CVC4__THEORY__QUANTIFIERS__TRIGGER_H */
index c0aa6bcac3fa7b75d9ab24a2eb77168cda9828eb..4bc74dd96cae4564744163be3bc13fb87d6ceaae 100644 (file)
@@ -20,6 +20,7 @@ using namespace CVC4::kind;
 
 namespace CVC4 {
 namespace theory {
+namespace quantifiers {
 namespace inst {
 
 void TriggerTermInfo::init(Node q, Node n, int reqPol, Node reqPolEq)
@@ -111,5 +112,6 @@ int32_t TriggerTermInfo::getTriggerWeight(Node n)
 }
 
 }  // namespace inst
+}  // namespace quantifiers
 }  // namespace theory
 }  // namespace CVC4
index bb829b43220513e654517d7a2ae25a81b319e81e..5bf7e80999ea4fcda81702cdf8587baef17e218b 100644 (file)
@@ -23,6 +23,7 @@
 
 namespace CVC4 {
 namespace theory {
+namespace quantifiers {
 namespace inst {
 
 /** Information about a node used in a trigger.
@@ -121,6 +122,7 @@ class TriggerTermInfo
 };
 
 }  // namespace inst
+}  // namespace quantifiers
 }  // namespace theory
 }  // namespace CVC4
 
index 2ed2f4fb6a92e2cd165127c8563c1c18c630a9fb..04e9dabb01c95f976e685533abea58b8a2ba678b 100644 (file)
@@ -16,6 +16,7 @@
 
 namespace CVC4 {
 namespace theory {
+namespace quantifiers {
 namespace inst {
 
 TriggerTrie::TriggerTrie() {}
@@ -71,5 +72,6 @@ void TriggerTrie::addTrigger(std::vector<Node>& nodes, inst::Trigger* t)
 }
 
 }  // namespace inst
+}  // namespace quantifiers
 }  // namespace theory
 }  // namespace CVC4
index c016031ed5fcb84e2bacaf3c65f323bc54f83322..ad221ee2139a32c1d8c0d1942e6c01fbc9855629 100644 (file)
@@ -24,7 +24,7 @@
 
 namespace CVC4 {
 namespace theory {
-
+namespace quantifiers {
 namespace inst {
 
 /** A trie of triggers.
@@ -56,6 +56,7 @@ class TriggerTrie
 }; /* class inst::Trigger::TriggerTrie */
 
 }  // namespace inst
+}  // namespace quantifiers
 }  // namespace theory
 }  // namespace CVC4
 
index c8d907bcf14950c2654dff991fd42eeba930c8e9..1f87c88b4685d77c8732ff10de8bc4204c8368cd 100644 (file)
@@ -21,6 +21,7 @@ using namespace CVC4::kind;
 
 namespace CVC4 {
 namespace theory {
+namespace quantifiers {
 namespace inst {
 
 VarMatchGeneratorTermSubs::VarMatchGeneratorTermSubs(Trigger* tparent,
@@ -79,5 +80,6 @@ int VarMatchGeneratorTermSubs::getNextMatch(Node q, InstMatch& m)
 }
 
 }  // namespace inst
+}  // namespace quantifiers
 }  // namespace theory
 }  // namespace CVC4
index 591c4795850621e2e0aab4e192cac833e7db438e..d85a20189c8584a6ad525f557abc7884c43520af 100644 (file)
@@ -22,6 +22,7 @@
 
 namespace CVC4 {
 namespace theory {
+namespace quantifiers {
 namespace inst {
 
 /** match generator for purified terms
@@ -50,6 +51,7 @@ class VarMatchGeneratorTermSubs : public InstMatchGenerator
 };
 
 }  // namespace inst
+}  // namespace quantifiers
 }  // namespace theory
 }  // namespace CVC4
 
index be83f3b10966f4022bd92be3f5ad39317d656f70..2245e16dd981a42dc9fee35fa2fbf0de4f155e0c 100644 (file)
 #include "theory/quantifiers_engine.h"
 #include "theory/rewriter.h"
 
-using namespace std;
-using namespace CVC4;
 using namespace CVC4::kind;
 using namespace CVC4::context;
-using namespace CVC4::theory;
-using namespace CVC4::theory::quantifiers;
-using namespace CVC4::theory::inst;
-using namespace CVC4::theory::quantifiers::fmcheck;
+
+namespace CVC4 {
+namespace theory {
+namespace quantifiers {
+namespace fmcheck {
 
 struct ModelBasisArgSort
 {
@@ -1370,3 +1369,8 @@ bool FullModelChecker::isHandled(Node q) const
 {
   return d_unhandledQuant.find(q) == d_unhandledQuant.end();
 }
+
+}  // namespace fmcheck
+}  // namespace quantifiers
+}  // namespace theory
+}  // namespace CVC4
index 789a7bd7c89c1867aca4bdd525b59646655ceb89..eb7398f92c6402913da66fbd7b766d257003ffa8 100644 (file)
 #include "theory/quantifiers/term_database.h"
 #include "theory/quantifiers_engine.h"
 
-using namespace std;
-using namespace CVC4;
 using namespace CVC4::kind;
 using namespace CVC4::context;
-using namespace CVC4::theory;
-using namespace CVC4::theory::quantifiers;
-using namespace CVC4::theory::inst;
+
+namespace CVC4 {
+namespace theory {
+namespace quantifiers {
 
 //Model Engine constructor
 ModelEngine::ModelEngine(QuantifiersEngine* qe,
@@ -335,3 +334,6 @@ void ModelEngine::debugPrint( const char* c ){
   //d_quantEngine->getModel()->debugPrint( c );
 }
 
+}  // namespace quantifiers
+}  // namespace theory
+}  // namespace CVC4
index bb92b905e1df2bf22429cf1871961d8b0deeee8b..a51d66278c775fbd808337ea9a0a51af4d25f9b3 100644 (file)
@@ -21,7 +21,7 @@
 
 namespace CVC4 {
 namespace theory {
-namespace inst {
+namespace quantifiers {
 
 InstMatch::InstMatch(TNode q)
 {
@@ -103,6 +103,6 @@ bool InstMatch::set(quantifiers::QuantifiersState& qs, size_t i, TNode n)
   return true;
 }
 
-}/* CVC4::theory::inst namespace */
+}  // namespace quantifiers
 }/* CVC4::theory namespace */
 }/* CVC4 namespace */
index 7bab2083e7cbfce799cca274826262437a835d7b..0c6ddcf773055d51cfbb1fd8a820182d0913370d 100644 (file)
 
 namespace CVC4 {
 namespace theory {
-
 namespace quantifiers {
-class QuantifiersState;
-}
 
-namespace inst {
+class QuantifiersState;
 
 /** Inst match
  *
@@ -90,10 +87,7 @@ inline std::ostream& operator<<(std::ostream& out, const InstMatch& m) {
   return out;
 }
 
-}/* CVC4::theory::inst namespace */
-
-typedef CVC4::theory::inst::InstMatch InstMatch;
-
+}  // namespace quantifiers
 }/* CVC4::theory namespace */
 }/* CVC4 namespace */
 
index 9c3b9af93bc1e044d5268c10dba895ce8a5c276e..96f668c826c6bfcfc8c92bb795096e7b1b61cf77 100644 (file)
@@ -25,7 +25,7 @@ using namespace CVC4::context;
 
 namespace CVC4 {
 namespace theory {
-namespace inst {
+namespace quantifiers {
 
 bool InstMatchTrie::existsInstMatch(quantifiers::QuantifiersState& qs,
                                     Node q,
@@ -368,6 +368,6 @@ bool InstMatchTrieOrdered::existsInstMatch(quantifiers::QuantifiersState& qs,
   return d_imt.existsInstMatch(qs, q, m, modEq, d_imtio);
 }
 
-} /* CVC4::theory::inst namespace */
+}  // namespace quantifiers
 } /* CVC4::theory namespace */
 } /* CVC4 namespace */
index 6e6dd92bfad6c582d9d73aeb29d8c558b23f8d38..5164f182013a82b17ddf60b419fd0fa059a68194 100644 (file)
 
 namespace CVC4 {
 namespace theory {
-
-class QuantifiersEngine;
-
 namespace quantifiers {
-class QuantifiersState;
-}
 
-namespace inst {
+class QuantifiersState;
 
 /** trie for InstMatch objects
  *
@@ -62,7 +57,7 @@ class InstMatchTrie
    * If modEq is true, we check for duplication modulo equality the current
    * equalities in the equality engine of qs.
    */
-  bool existsInstMatch(quantifiers::QuantifiersState& qs,
+  bool existsInstMatch(QuantifiersState& qs,
                        Node q,
                        const std::vector<Node>& m,
                        bool modEq = false,
@@ -76,7 +71,7 @@ class InstMatchTrie
    * If modEq is true, we check for duplication modulo equality the current
    * equalities in the equality engine of qs.
    */
-  bool addInstMatch(quantifiers::QuantifiersState& qs,
+  bool addInstMatch(QuantifiersState& qs,
                     Node f,
                     const std::vector<Node>& m,
                     bool modEq = false,
@@ -135,7 +130,7 @@ class CDInstMatchTrie
    * equalities in the equality engine of qs.
    * It additionally takes a context c, for which the entry is valid in.
    */
-  bool existsInstMatch(quantifiers::QuantifiersState& qs,
+  bool existsInstMatch(QuantifiersState& qs,
                        Node q,
                        const std::vector<Node>& m,
                        bool modEq = false,
@@ -149,7 +144,7 @@ class CDInstMatchTrie
    * equalities in the equality engine of qs.
    * It additionally takes a context c, for which the entry is valid in.
    */
-  bool addInstMatch(quantifiers::QuantifiersState& qs,
+  bool addInstMatch(QuantifiersState& qs,
                     Node q,
                     const std::vector<Node>& m,
                     bool modEq = false,
@@ -205,7 +200,7 @@ class InstMatchTrieOrdered
    * class. If modEq is true, we consider duplicates modulo the current
    * equalities stored in the equality engine of qs.
    */
-  bool addInstMatch(quantifiers::QuantifiersState& qs,
+  bool addInstMatch(QuantifiersState& qs,
                     Node q,
                     const std::vector<Node>& m,
                     bool modEq = false);
@@ -215,7 +210,7 @@ class InstMatchTrieOrdered
    * class. If modEq is true, we consider duplicates modulo the current
    * equalities stored in the equality engine of qs.
    */
-  bool existsInstMatch(quantifiers::QuantifiersState& qs,
+  bool existsInstMatch(QuantifiersState& qs,
                        Node q,
                        const std::vector<Node>& m,
                        bool modEq = false);
@@ -227,8 +222,8 @@ class InstMatchTrieOrdered
   InstMatchTrie d_imt;
 };
 
-} /* CVC4::theory::inst namespace */
+}  // namespace quantifiers
 } /* CVC4::theory namespace */
 } /* CVC4 namespace */
 
-#endif /* CVC4__THEORY__QUANTIFIERS__INST_MATCH_H */
+#endif /* CVC4__THEORY__QUANTIFIERS__INST_MATCH_TRIE_H */
index 6efcd2adf56aee4464e5bf878e85e9303c9de235..c14ce4ad3f10a6b29828c0748476c92181f74806 100644 (file)
@@ -28,11 +28,10 @@ using namespace kind;
 using namespace context;
 
 namespace theory {
+namespace quantifiers {
 
 using namespace inst;
 
-namespace quantifiers {
-
 InstStrategyEnum::InstStrategyEnum(QuantifiersEngine* qe,
                                    QuantifiersState& qs,
                                    QuantifiersInferenceManager& qim,
index fd74e17e88cfb70f9fbc643a098de1105c3c432c..61c7703ed422040b1891c2db1e7fccc78c38e390 100644 (file)
@@ -45,13 +45,11 @@ Instantiate::Instantiate(QuantifiersState& qs,
                          QuantifiersInferenceManager& qim,
                          QuantifiersRegistry& qr,
                          TermRegistry& tr,
-                         FirstOrderModel* m,
                          ProofNodeManager* pnm)
     : d_qstate(qs),
       d_qim(qim),
       d_qreg(qr),
       d_treg(tr),
-      d_model(m),
       d_pnm(pnm),
       d_total_inst_debug(qs.getUserContext()),
       d_c_inst_match_trie_dom(qs.getUserContext()),
@@ -61,7 +59,7 @@ Instantiate::Instantiate(QuantifiersState& qs,
 
 Instantiate::~Instantiate()
 {
-  for (std::pair<const Node, inst::CDInstMatchTrie*>& t : d_c_inst_match_trie)
+  for (std::pair<const Node, CDInstMatchTrie*>& t : d_c_inst_match_trie)
   {
     delete t.second;
   }
@@ -121,7 +119,7 @@ bool Instantiate::addInstantiation(Node q,
     TypeNode tn = q[0][i].getType();
     if (terms[i].isNull())
     {
-      terms[i] = getTermForType(tn);
+      terms[i] = d_treg.getTermForType(tn);
     }
     // Ensure the type is correct, this for instance ensures that real terms
     // are cast to integers for { x -> t } where x has type Int and t has
@@ -131,7 +129,7 @@ bool Instantiate::addInstantiation(Node q,
     {
       // pick the best possible representative for instantiation, based on past
       // use and simplicity of term
-      terms[i] = d_model->getInternalRepresentative(terms[i], q, i);
+      terms[i] = d_treg.getModel()->getInternalRepresentative(terms[i], q, i);
     }
     Trace("inst-add-debug") << " -> " << terms[i] << std::endl;
     if (terms[i].isNull())
@@ -496,8 +494,7 @@ bool Instantiate::existsInstantiation(Node q,
 {
   if (options::incrementalSolving())
   {
-    std::map<Node, inst::CDInstMatchTrie*>::iterator it =
-        d_c_inst_match_trie.find(q);
+    std::map<Node, CDInstMatchTrie*>::iterator it = d_c_inst_match_trie.find(q);
     if (it != d_c_inst_match_trie.end())
     {
       return it->second->existsInstMatch(d_qstate, q, terms, modEq);
@@ -505,8 +502,7 @@ bool Instantiate::existsInstantiation(Node q,
   }
   else
   {
-    std::map<Node, inst::InstMatchTrie>::iterator it =
-        d_inst_match_trie.find(q);
+    std::map<Node, InstMatchTrie>::iterator it = d_inst_match_trie.find(q);
     if (it != d_inst_match_trie.end())
     {
       return it->second.existsInstMatch(d_qstate, q, terms, modEq);
@@ -579,16 +575,15 @@ bool Instantiate::recordInstantiationInternal(Node q,
     Trace("inst-add-debug")
         << "Adding into context-dependent inst trie, modEq = " << modEq
         << std::endl;
-    inst::CDInstMatchTrie* imt;
-    std::map<Node, inst::CDInstMatchTrie*>::iterator it =
-        d_c_inst_match_trie.find(q);
+    CDInstMatchTrie* imt;
+    std::map<Node, CDInstMatchTrie*>::iterator it = d_c_inst_match_trie.find(q);
     if (it != d_c_inst_match_trie.end())
     {
       imt = it->second;
     }
     else
     {
-      imt = new inst::CDInstMatchTrie(d_qstate.getUserContext());
+      imt = new CDInstMatchTrie(d_qstate.getUserContext());
       d_c_inst_match_trie[q] = imt;
     }
     d_c_inst_match_trie_dom.insert(q);
@@ -602,8 +597,7 @@ bool Instantiate::removeInstantiationInternal(Node q, std::vector<Node>& terms)
 {
   if (options::incrementalSolving())
   {
-    std::map<Node, inst::CDInstMatchTrie*>::iterator it =
-        d_c_inst_match_trie.find(q);
+    std::map<Node, CDInstMatchTrie*>::iterator it = d_c_inst_match_trie.find(q);
     if (it != d_c_inst_match_trie.end())
     {
       return it->second->removeInstMatch(q, terms);
@@ -613,15 +607,6 @@ bool Instantiate::removeInstantiationInternal(Node q, std::vector<Node>& terms)
   return d_inst_match_trie[q].removeInstMatch(q, terms);
 }
 
-Node Instantiate::getTermForType(TypeNode tn)
-{
-  if (tn.isClosedEnumerable())
-  {
-    return d_treg.getTermEnumeration()->getEnumerateTerm(tn, 0);
-  }
-  return d_treg.getTermDatabase()->getOrMakeTypeGroundTerm(tn);
-}
-
 void Instantiate::getInstantiatedQuantifiedFormulas(std::vector<Node>& qs)
 {
   if (options::incrementalSolving())
@@ -636,7 +621,7 @@ void Instantiate::getInstantiatedQuantifiedFormulas(std::vector<Node>& qs)
   }
   else
   {
-    for (std::pair<const Node, inst::InstMatchTrie>& t : d_inst_match_trie)
+    for (std::pair<const Node, InstMatchTrie>& t : d_inst_match_trie)
     {
       qs.push_back(t.first);
     }
@@ -649,7 +634,7 @@ void Instantiate::getInstantiationTermVectors(
 
   if (options::incrementalSolving())
   {
-    std::map<Node, inst::CDInstMatchTrie*>::const_iterator it =
+    std::map<Node, CDInstMatchTrie*>::const_iterator it =
         d_c_inst_match_trie.find(q);
     if (it != d_c_inst_match_trie.end())
     {
@@ -658,7 +643,7 @@ void Instantiate::getInstantiationTermVectors(
   }
   else
   {
-    std::map<Node, inst::InstMatchTrie>::const_iterator it =
+    std::map<Node, InstMatchTrie>::const_iterator it =
         d_inst_match_trie.find(q);
     if (it != d_inst_match_trie.end())
     {
index 8e556b648c81c5ea1fe42faf4f2a6f4cb00c318b..be410c2c801664223e1bde68bb905d9349813cb7 100644 (file)
@@ -97,7 +97,6 @@ class Instantiate : public QuantifiersUtil
               QuantifiersInferenceManager& qim,
               QuantifiersRegistry& qr,
               TermRegistry& tr,
-              FirstOrderModel* m,
               ProofNodeManager* pnm = nullptr);
   ~Instantiate();
 
@@ -224,17 +223,6 @@ class Instantiate : public QuantifiersUtil
    * Same as above but with vars equal to the bound variables of q.
    */
   Node getInstantiation(Node q, std::vector<Node>& terms, bool doVts = false);
-  /** get term for type
-   *
-   * This returns an arbitrary term for type tn.
-   * This term is chosen heuristically to be the best
-   * term for instantiation. Currently, this
-   * heuristic enumerates the first term of the
-   * type if the type is closed enumerable, otherwise
-   * an existing ground term from the term database if
-   * one exists, or otherwise a fresh variable.
-   */
-  Node getTermForType(TypeNode tn);
   //--------------------------------------end general utilities
 
   /**
@@ -318,8 +306,6 @@ class Instantiate : public QuantifiersUtil
   QuantifiersRegistry& d_qreg;
   /** Reference to the term registry */
   TermRegistry& d_treg;
-  /** Pointer to the model */
-  FirstOrderModel* d_model;
   /** pointer to the proof node manager */
   ProofNodeManager* d_pnm;
   /** instantiation rewriter classes */
@@ -335,8 +321,8 @@ class Instantiate : public QuantifiersUtil
    * We store context (dependent, independent) versions. If incremental solving
    * is disabled, we use d_inst_match_trie for performance reasons.
    */
-  std::map<Node, inst::InstMatchTrie> d_inst_match_trie;
-  std::map<Node, inst::CDInstMatchTrie*> d_c_inst_match_trie;
+  std::map<Node, InstMatchTrie> d_inst_match_trie;
+  std::map<Node, CDInstMatchTrie*> d_c_inst_match_trie;
   /**
    * The list of quantified formulas for which the domain of d_c_inst_match_trie
    * is valid.
index 9a82265f98c5b6933872a0501730a929328b35c7..b25c1aed3ded650ffb378617eea2916a6f32bea7 100644 (file)
@@ -26,10 +26,9 @@ QuantifiersInferenceManager::QuantifiersInferenceManager(
     QuantifiersState& state,
     QuantifiersRegistry& qr,
     TermRegistry& tr,
-    FirstOrderModel* m,
     ProofNodeManager* pnm)
     : InferenceManagerBuffered(t, state, pnm, "theory::quantifiers"),
-      d_instantiate(new Instantiate(state, *this, qr, tr, m, pnm)),
+      d_instantiate(new Instantiate(state, *this, qr, tr, pnm)),
       d_skolemize(new Skolemize(state, pnm))
 {
 }
index aa7fc1b6acf82ede0f9cd6b5d7085ab87a8726a4..f16f91f043b9be6f9d1b05972f71a6fe346baba0 100644 (file)
@@ -39,7 +39,6 @@ class QuantifiersInferenceManager : public InferenceManagerBuffered
                               QuantifiersState& state,
                               QuantifiersRegistry& qr,
                               TermRegistry& tr,
-                              FirstOrderModel* m,
                               ProofNodeManager* pnm);
   ~QuantifiersInferenceManager();
   /** get instantiate utility */
index 11d9a116c1dd2a0d1c1129aa316d02de35a64546..bb35d6d26387b80d35ddacf265f3adfd2f24233e 100644 (file)
@@ -15,8 +15,9 @@
 #include "theory/quantifiers/quantifiers_modules.h"
 
 #include "options/quantifiers_options.h"
-#include "theory/quantifiers_engine.h"
 #include "theory/quantifiers/relevant_domain.h"
+#include "theory/quantifiers/term_registry.h"
+#include "theory/quantifiers_engine.h"
 
 namespace CVC4 {
 namespace theory {
@@ -43,6 +44,7 @@ void QuantifiersModules::initialize(QuantifiersEngine* qe,
                                     QuantifiersState& qs,
                                     QuantifiersInferenceManager& qim,
                                     QuantifiersRegistry& qr,
+                                    TermRegistry& tr,
                                     DecisionManager* dm,
                                     std::vector<QuantifiersModule*>& modules)
 {
@@ -59,7 +61,7 @@ void QuantifiersModules::initialize(QuantifiersEngine* qe,
   }
   if (!options::finiteModelFind() || options::fmfInstEngine())
   {
-    d_inst_engine.reset(new InstantiationEngine(qe, qs, qim, qr));
+    d_inst_engine.reset(new InstantiationEngine(qe, qs, qim, qr, tr));
     modules.push_back(d_inst_engine.get());
   }
   if (options::cegqi())
@@ -86,7 +88,7 @@ void QuantifiersModules::initialize(QuantifiersEngine* qe,
     Trace("quant-init-debug")
         << "Initialize model engine, mbqi : " << options::mbqiMode() << " "
         << options::fmfBound() << std::endl;
-    if (useFmcModel())
+    if (tr.useFmcModel())
     {
       Trace("quant-init-debug") << "...make fmc builder." << std::endl;
       d_builder.reset(new fmcheck::FullModelChecker(qs, qr));
@@ -123,13 +125,6 @@ void QuantifiersModules::initialize(QuantifiersEngine* qe,
   }
 }
 
-bool QuantifiersModules::useFmcModel()
-{
-  return options::mbqiMode() == options::MbqiMode::FMC
-         || options::mbqiMode() == options::MbqiMode::TRUST
-         || options::fmfBound();
-}
-
 }  // namespace quantifiers
 }  // namespace theory
 }  // namespace CVC4
index c111eba258b0268fa6625bc54b06d7a62986860c..4ecbf7af493af3a2749e75a8b5eef2a705dd91ad 100644 (file)
@@ -58,12 +58,10 @@ class QuantifiersModules
                   QuantifiersState& qs,
                   QuantifiersInferenceManager& qim,
                   QuantifiersRegistry& qr,
+                  TermRegistry& tr,
                   DecisionManager* dm,
                   std::vector<QuantifiersModule*>& modules);
 
-  /** Whether we use the full model check builder and corresponding model */
-  static bool useFmcModel();
-
  private:
   //------------------------------ quantifier utilities
   /** relevant domain */
index ca11d491daabc6d7fb0f06c99a968dd4ee1cf4e9..a6d1388062c48b0938d9fdfdc93fb3d135ed5c31 100644 (file)
 #include "theory/quantifiers_engine.h"
 #include "theory/theory_engine.h"
 
-using namespace std;
 using namespace CVC4::kind;
 using namespace CVC4::context;
-using namespace CVC4::theory::inst;
 
 namespace CVC4 {
 namespace theory {
index d23ff060ae25beb50199832d059341b0450c86c6..74dad6cc7fdc435f9f40ff6470f44e65f94e6f3c 100644 (file)
@@ -16,6 +16,8 @@
 
 #include "options/quantifiers_options.h"
 #include "options/smt_options.h"
+#include "theory/quantifiers/first_order_model.h"
+#include "theory/quantifiers/fmf/first_order_model_fmc.h"
 #include "theory/quantifiers/quantifiers_state.h"
 
 namespace CVC4 {
@@ -24,6 +26,7 @@ namespace quantifiers {
 
 TermRegistry::TermRegistry(QuantifiersState& qs, QuantifiersRegistry& qr)
     : d_presolve(qs.getUserContext(), true),
+      d_useFmcModel(false),
       d_presolveCache(qs.getUserContext()),
       d_termEnum(new TermEnumeration),
       d_termDb(new TermDb(qs, qr)),
@@ -34,6 +37,26 @@ TermRegistry::TermRegistry(QuantifiersState& qs, QuantifiersRegistry& qr)
     // must be constructed here since it is required for datatypes finistInit
     d_sygusTdb.reset(new TermDbSygus(qs));
   }
+  Trace("quant-engine-debug") << "Initialize quantifiers engine." << std::endl;
+  Trace("quant-engine-debug")
+      << "Initialize model, mbqi : " << options::mbqiMode() << std::endl;
+  // Finite model finding requires specialized ways of building the model.
+  // We require constructing the model here, since it is required for
+  // initializing the CombinationEngine and the rest of quantifiers engine.
+  if ((options::finiteModelFind() || options::fmfBound())
+      && (options::mbqiMode() == options::MbqiMode::FMC
+          || options::mbqiMode() == options::MbqiMode::TRUST
+          || options::fmfBound()))
+  {
+    d_useFmcModel = true;
+    d_qmodel.reset(new quantifiers::fmcheck::FirstOrderModelFmc(
+        qs, qr, *this, "FirstOrderModelFmc"));
+  }
+  else
+  {
+    d_qmodel.reset(
+        new quantifiers::FirstOrderModel(qs, qr, *this, "FirstOrderModel"));
+  }
 }
 
 void TermRegistry::finishInit(QuantifiersInferenceManager* qim)
@@ -84,6 +107,15 @@ void TermRegistry::addTerm(Node n, bool withinQuant)
   }
 }
 
+Node TermRegistry::getTermForType(TypeNode tn)
+{
+  if (tn.isClosedEnumerable())
+  {
+    return d_termEnum->getEnumerateTerm(tn, 0);
+  }
+  return d_termDb->getOrMakeTypeGroundTerm(tn);
+}
+
 TermDb* TermRegistry::getTermDatabase() const { return d_termDb.get(); }
 
 TermDbSygus* TermRegistry::getTermDatabaseSygus() const
@@ -95,6 +127,11 @@ TermEnumeration* TermRegistry::getTermEnumeration() const
 {
   return d_termEnum.get();
 }
+
+FirstOrderModel* TermRegistry::getModel() const { return d_qmodel.get(); }
+
+bool TermRegistry::useFmcModel() const { return d_useFmcModel; }
+
 }  // namespace quantifiers
 }  // namespace theory
 }  // namespace CVC4
index 1d9058603fad639edec6987f5b13817959830e4e..d70b7acf81d693ecc2f26a6d887bf0a3f6cb6d08 100644 (file)
@@ -29,6 +29,8 @@ namespace CVC4 {
 namespace theory {
 namespace quantifiers {
 
+class FirstOrderModel;
+
 /**
  * Term Registry, which manages notifying modules within quantifiers about
  * (ground) terms that exist in the current context.
@@ -54,16 +56,35 @@ class TermRegistry
    */
   void addTerm(Node n, bool withinQuant = false);
 
+  /** get term for type
+   *
+   * This returns an arbitrary term for type tn.
+   * This term is chosen heuristically to be the best
+   * term for instantiation. Currently, this
+   * heuristic enumerates the first term of the
+   * type if the type is closed enumerable, otherwise
+   * an existing ground term from the term database if
+   * one exists, or otherwise a fresh variable.
+   */
+  Node getTermForType(TypeNode tn);
+
+  /** Whether we use the full model check builder and corresponding model */
+  bool useFmcModel() const;
+
   /** get term database */
   TermDb* getTermDatabase() const;
   /** get term database sygus */
   TermDbSygus* getTermDatabaseSygus() const;
   /** get term enumeration utility */
   TermEnumeration* getTermEnumeration() const;
+  /** get the model utility */
+  FirstOrderModel* getModel() const;
 
  private:
   /** has presolve been called */
   context::CDO<bool> d_presolve;
+  /** Whether we are using the fmc model */
+  bool d_useFmcModel;
   /** the set of terms we have seen before presolve */
   NodeSet d_presolveCache;
   /** term enumeration utility */
@@ -72,6 +93,8 @@ class TermRegistry
   std::unique_ptr<TermDb> d_termDb;
   /** sygus term database */
   std::unique_ptr<TermDbSygus> d_sygusTdb;
+  /** extended model object */
+  std::unique_ptr<FirstOrderModel> d_qmodel;
 };
 
 }  // namespace quantifiers
index 069b9b93535c4bc7a7400c2f7f92897358178131..d555a85da4341c9843f8c69cb131014f6129d897 100644 (file)
 #include "theory/strings/word.h"
 #include "theory/rewriter.h"
 
-using namespace std;
 using namespace CVC4::kind;
-using namespace CVC4::context;
-using namespace CVC4::theory::inst;
 
 namespace CVC4 {
 namespace theory {
index 092689b5f34ca3e5e0a35c38e69482c5dea30e1a..ace7b79ffe215cb93db38c1527e78c715dad5189 100644 (file)
@@ -18,8 +18,6 @@
 
 #include "expr/proof_node_manager.h"
 #include "options/quantifiers_options.h"
-#include "theory/quantifiers/first_order_model.h"
-#include "theory/quantifiers/fmf/first_order_model_fmc.h"
 #include "theory/quantifiers/quantifiers_modules.h"
 #include "theory/quantifiers/quantifiers_rewriter.h"
 #include "theory/valuation.h"
@@ -41,7 +39,7 @@ TheoryQuantifiers::TheoryQuantifiers(Context* c,
       d_qstate(c, u, valuation, logicInfo),
       d_qreg(),
       d_treg(d_qstate, d_qreg),
-      d_qim(nullptr),
+      d_qim(*this, d_qstate, d_qreg, d_treg, pnm),
       d_qengine(nullptr)
 {
   out.handleUserAttribute( "fun-def", this );
@@ -57,45 +55,23 @@ TheoryQuantifiers::TheoryQuantifiers(Context* c,
     d_qChecker.registerTo(pc);
   }
 
-  Trace("quant-engine-debug") << "Initialize quantifiers engine." << std::endl;
-  Trace("quant-engine-debug")
-      << "Initialize model, mbqi : " << options::mbqiMode() << std::endl;
-  // Finite model finding requires specialized ways of building the model.
-  // We require constructing the model here, since it is required for
-  // initializing the CombinationEngine and the rest of quantifiers engine.
-  if ((options::finiteModelFind() || options::fmfBound())
-      && QuantifiersModules::useFmcModel())
-  {
-    d_qmodel.reset(new quantifiers::fmcheck::FirstOrderModelFmc(
-        d_qstate, d_qreg, d_treg, "FirstOrderModelFmc"));
-  }
-  else
-  {
-    d_qmodel.reset(new quantifiers::FirstOrderModel(
-        d_qstate, d_qreg, d_treg, "FirstOrderModel"));
-  }
-
-  d_qim.reset(new QuantifiersInferenceManager(
-      *this, d_qstate, d_qreg, d_treg, d_qmodel.get(), pnm));
-
   // Finish initializing the term registry by hooking it up to the inference
   // manager. This is required due to a cyclic dependency between the term
   // database and the instantiate module. Term database needs inference manager
   // since it sends out lemmas when term indexing is inconsistent, instantiate
   // needs term database for entailment checks.
-  d_treg.finishInit(d_qim.get());
+  d_treg.finishInit(&d_qim);
 
   // construct the quantifiers engine
-  d_qengine.reset(new QuantifiersEngine(
-      d_qstate, d_qreg, d_treg, *d_qim.get(), d_qmodel.get(), pnm));
+  d_qengine.reset(new QuantifiersEngine(d_qstate, d_qreg, d_treg, d_qim, pnm));
 
   //!!!!!!!!!!!!!! temporary (project #15)
-  d_qmodel->finishInit(d_qengine.get());
+  d_treg.getModel()->finishInit(d_qengine.get());
 
   // indicate we are using the quantifiers theory state object
   d_theoryState = &d_qstate;
   // use the inference manager as the official inference manager
-  d_inferManager = d_qim.get();
+  d_inferManager = &d_qim;
   // Set the pointer to the quantifiers engine, which this theory owns. This
   // pointer will be retreived by TheoryEngine and set to all theories
   // post-construction.
index 2371b00ced8fb4edd30f0eaf800060a0532520f2..91f12c0ed92aa1ed4cdd711832b7a0712d649f58 100644 (file)
@@ -20,7 +20,6 @@
 #define CVC4__THEORY__QUANTIFIERS__THEORY_QUANTIFIERS_H
 
 #include "expr/node.h"
-#include "theory/quantifiers/first_order_model.h"
 #include "theory/quantifiers/proof_checker.h"
 #include "theory/quantifiers/quantifiers_inference_manager.h"
 #include "theory/quantifiers/quantifiers_registry.h"
@@ -89,12 +88,10 @@ class TheoryQuantifiers : public Theory {
   QuantifiersState d_qstate;
   /** The quantifiers registry */
   QuantifiersRegistry d_qreg;
-  /** extended model object */
-  std::unique_ptr<FirstOrderModel> d_qmodel;
   /** The term registry */
   TermRegistry d_treg;
   /** The quantifiers inference manager */
-  std::unique_ptr<QuantifiersInferenceManager> d_qim;
+  QuantifiersInferenceManager d_qim;
   /** The quantifiers engine, which lives here */
   std::unique_ptr<QuantifiersEngine> d_qengine;
 };/* class TheoryQuantifiers */
index 9ca8226bca6790dae52701453b4d6f07b876802a..2cface166850e043d3a9f400a30c5080c6659b9d 100644 (file)
@@ -51,7 +51,6 @@ QuantifiersEngine::QuantifiersEngine(
     quantifiers::QuantifiersRegistry& qr,
     quantifiers::TermRegistry& tr,
     quantifiers::QuantifiersInferenceManager& qim,
-    quantifiers::FirstOrderModel* qm,
     ProofNodeManager* pnm)
     : d_qstate(qstate),
       d_qim(qim),
@@ -60,8 +59,8 @@ QuantifiersEngine::QuantifiersEngine(
       d_pnm(pnm),
       d_qreg(qr),
       d_treg(tr),
-      d_tr_trie(new inst::TriggerTrie),
-      d_model(qm),
+      d_tr_trie(new quantifiers::inst::TriggerTrie),
+      d_model(d_treg.getModel()),
       d_quants_prereg(qstate.getUserContext()),
       d_quants_red(qstate.getUserContext())
 {
@@ -81,7 +80,7 @@ void QuantifiersEngine::finishInit(TheoryEngine* te, DecisionManager* dm)
   d_decManager = dm;
   // Initialize the modules and the utilities here.
   d_qmodules.reset(new quantifiers::QuantifiersModules);
-  d_qmodules->initialize(this, d_qstate, d_qim, d_qreg, dm, d_modules);
+  d_qmodules->initialize(this, d_qstate, d_qim, d_qreg, d_treg, dm, d_modules);
   if (d_qmodules->d_rel_dom.get())
   {
     d_util.push_back(d_qmodules->d_rel_dom.get());
@@ -145,7 +144,7 @@ quantifiers::Skolemize* QuantifiersEngine::getSkolemize() const
 {
   return d_qim.getSkolemize();
 }
-inst::TriggerTrie* QuantifiersEngine::getTriggerDatabase() const
+quantifiers::inst::TriggerTrie* QuantifiersEngine::getTriggerDatabase() const
 {
   return d_tr_trie.get();
 }
index b6562caa7c39369b08cf492d9d67da2b45204956..1f1dcc9509fe5e37423ceee608fdd7884156c00e 100644 (file)
@@ -36,10 +36,12 @@ class DecisionManager;
 class QuantifiersModule;
 class RepSetIterator;
 
+namespace quantifiers {
+
 namespace inst {
 class TriggerTrie;
 }
-namespace quantifiers {
+
 class FirstOrderModel;
 class Instantiate;
 class QModelBuilder;
@@ -67,7 +69,6 @@ class QuantifiersEngine {
                     quantifiers::QuantifiersRegistry& qr,
                     quantifiers::TermRegistry& tr,
                     quantifiers::QuantifiersInferenceManager& qim,
-                    quantifiers::FirstOrderModel* qm,
                     ProofNodeManager* pnm);
   ~QuantifiersEngine();
   //---------------------- external interface
@@ -96,7 +97,7 @@ class QuantifiersEngine {
   /** get skolemize utility */
   quantifiers::Skolemize* getSkolemize() const;
   /** get trigger database */
-  inst::TriggerTrie* getTriggerDatabase() const;
+  quantifiers::inst::TriggerTrie* getTriggerDatabase() const;
   //---------------------- end utilities
  private:
   //---------------------- private initialization
@@ -234,7 +235,7 @@ public:
   /** The term registry */
   quantifiers::TermRegistry& d_treg;
   /** all triggers will be stored in this trie */
-  std::unique_ptr<inst::TriggerTrie> d_tr_trie;
+  std::unique_ptr<quantifiers::inst::TriggerTrie> d_tr_trie;
   /** extended model object */
   quantifiers::FirstOrderModel* d_model;
   //------------- end quantifiers utilities