Add std::hash overloads for Node, TNode and TypeNode. (#6534)
authorMathias Preiner <mathias.preiner@gmail.com>
Thu, 13 May 2021 06:33:00 +0000 (23:33 -0700)
committerGitHub <noreply@github.com>
Thu, 13 May 2021 06:33:00 +0000 (06:33 +0000)
Eliminates NodeHashFunction, TNodeHashFunction and TypeNodeHashFunction.

323 files changed:
src/api/cpp/cvc5.cpp
src/context/cdhashset.h
src/decision/assertion_list.cpp
src/decision/assertion_list.h
src/decision/justification_heuristic.h
src/expr/array_store_all.cpp
src/expr/ascription_type.cpp
src/expr/bound_var_manager.h
src/expr/buffered_proof_generator.h
src/expr/dtype.cpp
src/expr/dtype.h
src/expr/emptybag.cpp
src/expr/emptyset.cpp
src/expr/lazy_proof.h
src/expr/lazy_proof_chain.cpp
src/expr/lazy_proof_chain.h
src/expr/node.cpp
src/expr/node.h
src/expr/node_algorithm.cpp
src/expr/node_algorithm.h
src/expr/node_traversal.h
src/expr/proof.h
src/expr/proof_node_algorithm.cpp
src/expr/proof_node_manager.cpp
src/expr/sequence.cpp
src/expr/skolem_manager.cpp
src/expr/tconv_seq_proof_generator.h
src/expr/term_conversion_proof_generator.cpp
src/expr/term_conversion_proof_generator.h
src/expr/type_node.cpp
src/expr/type_node.h
src/expr/uninterpreted_constant.cpp
src/preprocessing/passes/ackermann.cpp
src/preprocessing/passes/ackermann.h
src/preprocessing/passes/bool_to_bv.cpp
src/preprocessing/passes/bool_to_bv.h
src/preprocessing/passes/bv_gauss.cpp
src/preprocessing/passes/bv_gauss.h
src/preprocessing/passes/bv_intro_pow2.cpp
src/preprocessing/passes/bv_to_bool.h
src/preprocessing/passes/bv_to_int.h
src/preprocessing/passes/foreign_theory_rewrite.h
src/preprocessing/passes/global_negate.cpp
src/preprocessing/passes/ho_elim.cpp
src/preprocessing/passes/ho_elim.h
src/preprocessing/passes/int_to_bv.cpp
src/preprocessing/passes/miplib_trick.cpp
src/preprocessing/passes/nl_ext_purify.cpp
src/preprocessing/passes/nl_ext_purify.h
src/preprocessing/passes/non_clausal_simp.cpp
src/preprocessing/passes/pseudo_boolean_processor.h
src/preprocessing/passes/real_to_int.h
src/preprocessing/passes/sygus_inference.cpp
src/preprocessing/passes/synth_rew_rules.cpp
src/preprocessing/passes/theory_rewrite_eq.cpp
src/preprocessing/passes/unconstrained_simplifier.h
src/preprocessing/preprocessing_pass_context.cpp
src/preprocessing/preprocessing_pass_context.h
src/preprocessing/util/ite_utilities.cpp
src/preprocessing/util/ite_utilities.h
src/printer/let_binding.cpp
src/printer/let_binding.h
src/proof/cnf_proof.h
src/proof/proof_manager.h
src/prop/cnf_stream.h
src/prop/sat_proof_manager.cpp
src/prop/sat_proof_manager.h
src/prop/skolem_def_manager.cpp
src/prop/skolem_def_manager.h
src/prop/theory_proxy.cpp
src/prop/theory_proxy.h
src/smt/abstract_values.h
src/smt/check_models.cpp
src/smt/expand_definitions.cpp
src/smt/expand_definitions.h
src/smt/model_blocker.cpp
src/smt/model_core_builder.cpp
src/smt/preprocess_proof_generator.cpp
src/smt/preprocess_proof_generator.h
src/smt/preprocessor.cpp
src/smt/preprocessor.h
src/smt/process_assertions.h
src/smt/proof_post_processor.cpp
src/smt/smt_engine.cpp
src/smt/smt_engine.h
src/smt/sygus_solver.cpp
src/smt/term_formula_removal.cpp
src/smt/term_formula_removal.h
src/smt/witness_form.cpp
src/smt/witness_form.h
src/smt_util/nary_builder.h
src/theory/arith/arith_ite_utils.h
src/theory/arith/arith_preprocess.cpp
src/theory/arith/arith_preprocess.h
src/theory/arith/arith_static_learner.h
src/theory/arith/arith_utilities.cpp
src/theory/arith/arith_utilities.h
src/theory/arith/congruence_manager.h
src/theory/arith/constraint.h
src/theory/arith/dio_solver.cpp
src/theory/arith/dio_solver.h
src/theory/arith/inference_manager.h
src/theory/arith/nl/ext/ext_state.h
src/theory/arith/nl/ext/monomial_check.cpp
src/theory/arith/nl/ext/split_zero_check.h
src/theory/arith/nl/iand_solver.h
src/theory/arith/nl/icp/icp_solver.cpp
src/theory/arith/nl/nl_model.cpp
src/theory/arith/nl/nl_model.h
src/theory/arith/nl/nonlinear_extension.cpp
src/theory/arith/nl/nonlinear_extension.h
src/theory/arith/nl/transcendental/transcendental_solver.cpp
src/theory/arith/nl/transcendental/transcendental_state.h
src/theory/arith/theory_arith_private.cpp
src/theory/arith/theory_arith_private.h
src/theory/arrays/array_info.h
src/theory/arrays/theory_arrays.cpp
src/theory/arrays/theory_arrays.h
src/theory/arrays/theory_arrays_rewriter.cpp
src/theory/arrays/union_find.cpp
src/theory/atom_requests.h
src/theory/bags/inference_manager.h
src/theory/bags/make_bag_op.cpp
src/theory/bags/term_registry.h
src/theory/booleans/circuit_propagator.h
src/theory/booleans/proof_checker.cpp
src/theory/booleans/theory_bool_rewriter.cpp
src/theory/builtin/theory_builtin_rewriter.cpp
src/theory/builtin/theory_builtin_rewriter.h
src/theory/bv/abstraction.h
src/theory/bv/bitblast/aig_bitblaster.h
src/theory/bv/bitblast/bitblaster.h
src/theory/bv/bitblast/eager_bitblaster.h
src/theory/bv/bitblast/proof_bitblaster.cpp
src/theory/bv/bitblast/proof_bitblaster.h
src/theory/bv/bitblast/simple_bitblaster.h
src/theory/bv/bv_eager_solver.h
src/theory/bv/bv_inequality_graph.h
src/theory/bv/bv_quick_check.h
src/theory/bv/bv_solver_bitblast.cpp
src/theory/bv/bv_solver_bitblast.h
src/theory/bv/bv_solver_lazy.h
src/theory/bv/bv_solver_simple.cpp
src/theory/bv/bv_subtheory_algebraic.cpp
src/theory/bv/bv_subtheory_algebraic.h
src/theory/bv/bv_subtheory_bitblast.h
src/theory/bv/bv_subtheory_core.h
src/theory/bv/bv_subtheory_inequality.h
src/theory/bv/int_blaster.h
src/theory/bv/theory_bv_rewrite_rules_normalization.h
src/theory/bv/theory_bv_utils.cpp
src/theory/bv/theory_bv_utils.h
src/theory/datatypes/infer_proof_cons.h
src/theory/datatypes/sygus_datatype_utils.cpp
src/theory/datatypes/sygus_datatype_utils.h
src/theory/datatypes/sygus_extension.cpp
src/theory/datatypes/sygus_extension.h
src/theory/datatypes/theory_datatypes.h
src/theory/datatypes/theory_datatypes_type_rules.cpp
src/theory/eager_proof_generator.h
src/theory/evaluator.cpp
src/theory/evaluator.h
src/theory/ext_theory.h
src/theory/fp/fp_converter.h
src/theory/fp/fp_expand_defs.h
src/theory/fp/theory_fp.cpp
src/theory/fp/theory_fp.h
src/theory/quantifiers/bv_inverter.cpp
src/theory/quantifiers/bv_inverter.h
src/theory/quantifiers/candidate_rewrite_database.cpp
src/theory/quantifiers/candidate_rewrite_database.h
src/theory/quantifiers/candidate_rewrite_filter.cpp
src/theory/quantifiers/candidate_rewrite_filter.h
src/theory/quantifiers/cegqi/ceg_bv_instantiator.cpp
src/theory/quantifiers/cegqi/ceg_bv_instantiator.h
src/theory/quantifiers/cegqi/ceg_bv_instantiator_utils.cpp
src/theory/quantifiers/cegqi/ceg_bv_instantiator_utils.h
src/theory/quantifiers/cegqi/ceg_instantiator.cpp
src/theory/quantifiers/cegqi/ceg_instantiator.h
src/theory/quantifiers/cegqi/inst_strategy_cegqi.h
src/theory/quantifiers/cegqi/nested_qe.cpp
src/theory/quantifiers/cegqi/nested_qe.h
src/theory/quantifiers/conjecture_generator.h
src/theory/quantifiers/ematching/ho_trigger.cpp
src/theory/quantifiers/ematching/ho_trigger.h
src/theory/quantifiers/ematching/pattern_term_selector.cpp
src/theory/quantifiers/ematching/trigger.cpp
src/theory/quantifiers/equality_query.cpp
src/theory/quantifiers/equality_query.h
src/theory/quantifiers/extended_rewrite.cpp
src/theory/quantifiers/fmf/bounded_integers.h
src/theory/quantifiers/fmf/full_model_check.cpp
src/theory/quantifiers/fmf/full_model_check.h
src/theory/quantifiers/fun_def_evaluator.cpp
src/theory/quantifiers/instantiate.h
src/theory/quantifiers/proof_checker.cpp
src/theory/quantifiers/quant_bound_inference.cpp
src/theory/quantifiers/quant_bound_inference.h
src/theory/quantifiers/quant_conflict_find.cpp
src/theory/quantifiers/quant_conflict_find.h
src/theory/quantifiers/quant_split.h
src/theory/quantifiers/quantifiers_macros.cpp
src/theory/quantifiers/quantifiers_rewriter.cpp
src/theory/quantifiers/quantifiers_rewriter.h
src/theory/quantifiers/query_generator.h
src/theory/quantifiers/single_inv_partition.cpp
src/theory/quantifiers/single_inv_partition.h
src/theory/quantifiers/skolemize.cpp
src/theory/quantifiers/skolemize.h
src/theory/quantifiers/sygus/cegis.cpp
src/theory/quantifiers/sygus/cegis.h
src/theory/quantifiers/sygus/cegis_core_connective.cpp
src/theory/quantifiers/sygus/cegis_core_connective.h
src/theory/quantifiers/sygus/enum_stream_substitution.cpp
src/theory/quantifiers/sygus/enum_stream_substitution.h
src/theory/quantifiers/sygus/example_infer.cpp
src/theory/quantifiers/sygus/example_infer.h
src/theory/quantifiers/sygus/example_min_eval.cpp
src/theory/quantifiers/sygus/rcons_obligation_info.cpp
src/theory/quantifiers/sygus/rcons_obligation_info.h
src/theory/quantifiers/sygus/rcons_type_info.h
src/theory/quantifiers/sygus/sygus_abduct.cpp
src/theory/quantifiers/sygus/sygus_enumerator.cpp
src/theory/quantifiers/sygus/sygus_enumerator.h
src/theory/quantifiers/sygus/sygus_enumerator_basic.h
src/theory/quantifiers/sygus/sygus_eval_unfold.cpp
src/theory/quantifiers/sygus/sygus_eval_unfold.h
src/theory/quantifiers/sygus/sygus_grammar_cons.cpp
src/theory/quantifiers/sygus/sygus_grammar_cons.h
src/theory/quantifiers/sygus/sygus_interpol.cpp
src/theory/quantifiers/sygus/sygus_interpol.h
src/theory/quantifiers/sygus/sygus_invariance.cpp
src/theory/quantifiers/sygus/sygus_invariance.h
src/theory/quantifiers/sygus/sygus_process_conj.cpp
src/theory/quantifiers/sygus/sygus_process_conj.h
src/theory/quantifiers/sygus/sygus_reconstruct.cpp
src/theory/quantifiers/sygus/sygus_reconstruct.h
src/theory/quantifiers/sygus/sygus_repair_const.cpp
src/theory/quantifiers/sygus/sygus_repair_const.h
src/theory/quantifiers/sygus/sygus_unif_io.cpp
src/theory/quantifiers/sygus/sygus_unif_io.h
src/theory/quantifiers/sygus/sygus_unif_rl.h
src/theory/quantifiers/sygus/synth_engine.h
src/theory/quantifiers/sygus/term_database_sygus.cpp
src/theory/quantifiers/sygus/term_database_sygus.h
src/theory/quantifiers/sygus_inst.cpp
src/theory/quantifiers/sygus_inst.h
src/theory/quantifiers/sygus_sampler.cpp
src/theory/quantifiers/term_database.cpp
src/theory/quantifiers/term_database.h
src/theory/quantifiers/term_enumeration.cpp
src/theory/quantifiers/term_enumeration.h
src/theory/quantifiers/term_pools.cpp
src/theory/quantifiers/term_registry.h
src/theory/quantifiers/term_util.cpp
src/theory/quantifiers_engine.h
src/theory/relevance_manager.cpp
src/theory/relevance_manager.h
src/theory/rep_set.cpp
src/theory/rewriter.cpp
src/theory/rewriter.h
src/theory/sep/theory_sep.h
src/theory/sets/cardinality_extension.h
src/theory/sets/inference_manager.h
src/theory/sets/singleton_op.cpp
src/theory/sets/skolem_cache.h
src/theory/sets/solver_state.h
src/theory/sets/term_registry.h
src/theory/sets/theory_sets_private.h
src/theory/sets/theory_sets_rels.cpp
src/theory/sets/theory_sets_rels.h
src/theory/shared_terms_database.h
src/theory/strings/arith_entail.cpp
src/theory/strings/base_solver.h
src/theory/strings/core_solver.cpp
src/theory/strings/core_solver.h
src/theory/strings/extf_solver.cpp
src/theory/strings/extf_solver.h
src/theory/strings/infer_proof_cons.h
src/theory/strings/inference_manager.h
src/theory/strings/regexp_operation.cpp
src/theory/strings/regexp_operation.h
src/theory/strings/regexp_solver.cpp
src/theory/strings/regexp_solver.h
src/theory/strings/skolem_cache.h
src/theory/strings/strings_fmf.h
src/theory/strings/term_registry.cpp
src/theory/strings/term_registry.h
src/theory/strings/theory_strings.cpp
src/theory/strings/theory_strings.h
src/theory/strings/theory_strings_utils.cpp
src/theory/subs_minimize.cpp
src/theory/substitutions.h
src/theory/term_registration_visitor.h
src/theory/theory.cpp
src/theory/theory.h
src/theory/theory_engine.cpp
src/theory/theory_engine.h
src/theory/theory_engine_proof_generator.h
src/theory/theory_inference_manager.h
src/theory/theory_model.cpp
src/theory/theory_model.h
src/theory/theory_model_builder.cpp
src/theory/theory_model_builder.h
src/theory/theory_preprocessor.h
src/theory/theory_proof_step_buffer.cpp
src/theory/trust_substitutions.h
src/theory/type_set.cpp
src/theory/type_set.h
src/theory/uf/cardinality_extension.h
src/theory/uf/eq_proof.cpp
src/theory/uf/eq_proof.h
src/theory/uf/equality_engine.h
src/theory/uf/ho_extension.cpp
src/theory/uf/ho_extension.h
src/theory/uf/proof_equality_engine.h
src/theory/uf/symmetry_breaker.cpp
src/theory/uf/symmetry_breaker.h
src/theory/uf/theory_uf.cpp
test/unit/node/node_algorithm_black.cpp
test/unit/preprocessing/pass_bv_gauss_white.cpp
test/unit/theory/theory_quantifiers_bv_instantiator_white.cpp
test/unit/theory/type_enumerator_white.cpp

index 18db5d5ab1e9fb90175483cad6ea1757be03555e..066ea00828df72f30f1705f9d110d11e1ab10ef1 100644 (file)
@@ -4073,7 +4073,7 @@ void Grammar::addSygusConstructorVariables(DatatypeDecl& dt,
 
 bool Grammar::containsFreeVariables(const Term& rule) const
 {
-  std::unordered_set<TNode, TNodeHashFunction> scope;
+  std::unordered_set<TNode> scope;
 
   for (const Term& sygusVar : d_sygusVars)
   {
@@ -4085,7 +4085,7 @@ bool Grammar::containsFreeVariables(const Term& rule) const
     scope.emplace(*ntsymbol.d_node);
   }
 
-  std::unordered_set<Node, NodeHashFunction> fvs;
+  std::unordered_set<Node> fvs;
   return expr::getFreeVariablesScope(*rule.d_node, fvs, scope, false);
 }
 
@@ -7117,7 +7117,7 @@ size_t hash<cvc5::api::Op>::operator()(const cvc5::api::Op& t) const
 {
   if (t.isIndexedHelper())
   {
-    return cvc5::NodeHashFunction()(*t.d_node);
+    return std::hash<cvc5::Node>()(*t.d_node);
   }
   else
   {
@@ -7133,12 +7133,12 @@ size_t std::hash<cvc5::api::RoundingMode>::operator()(
 
 size_t std::hash<cvc5::api::Sort>::operator()(const cvc5::api::Sort& s) const
 {
-  return cvc5::TypeNodeHashFunction()(*s.d_type);
+  return std::hash<cvc5::TypeNode>()(*s.d_type);
 }
 
 size_t std::hash<cvc5::api::Term>::operator()(const cvc5::api::Term& t) const
 {
-  return cvc5::NodeHashFunction()(*t.d_node);
+  return std::hash<cvc5::Node>()(*t.d_node);
 }
 
 }  // namespace std
index 79c28769c2622d65a2021284f1bf7ee90a0045c2..b7e3b8ed59a29bb73e7aa64bbe2ebed1cc528673 100644 (file)
@@ -25,8 +25,9 @@
 namespace cvc5 {
 namespace context {
 
-template <class V, class HashFcn>
-class CDHashSet : protected CDInsertHashMap<V, bool, HashFcn> {
+template <class V, class HashFcn = std::hash<V>>
+class CDHashSet : protected CDInsertHashMap<V, bool, HashFcn>
+{
   typedef CDInsertHashMap<V, bool, HashFcn> super;
 
   // no copy or assignment
@@ -152,7 +153,7 @@ public:
     return super::insertAtContextLevelZero(v, true);
   }
 
-};/* class CDHashSet */
+}; /* class CDHashSet */
 
 }  // namespace context
 }  // namespace cvc5
index 098378d229fa6ce970f44fe30d3e5ecc57eb87f9..28c285a8f9e771e00420962104dff0641ecfbe12 100644 (file)
@@ -101,8 +101,7 @@ void AssertionList::notifyStatus(TNode n, DecisionStatus s)
     // no decision does not impact the decision order
     return;
   }
-  std::unordered_set<TNode, TNodeHashFunction>::iterator it =
-      d_dlistSet.find(n);
+  std::unordered_set<TNode>::iterator it = d_dlistSet.find(n);
   if (s == DecisionStatus::DECISION)
   {
     if (it == d_dlistSet.end())
index fdb4bb2d549ca9f08ef4567b90d5b184466165ba..3e7a1fee8e04671553b49275fd0824302a5d9d18 100644 (file)
@@ -97,7 +97,7 @@ class AssertionList
   /** The list of assertions */
   std::vector<TNode> d_dlist;
   /** The set of assertions for fast membership testing in the above vector */
-  std::unordered_set<TNode, TNodeHashFunction> d_dlistSet;
+  std::unordered_set<TNode> d_dlistSet;
   /** The index of the next assertion to satify */
   context::CDO<size_t> d_dindex;
 };
index 870d0674c61155eef8fb9c625801e0689f9a9e82..8c713ab06abd96f456468e87fc8b0a6ce090f82f 100644 (file)
@@ -45,21 +45,17 @@ class JustificationHeuristic : public ITEDecisionStrategy {
   enum SearchResult {FOUND_SPLITTER, NO_SPLITTER, DONT_KNOW};
 
   typedef std::vector<std::pair<Node, Node> > SkolemList;
-  typedef context::CDHashMap<Node, SkolemList, NodeHashFunction> SkolemCache;
+  typedef context::CDHashMap<Node, SkolemList> SkolemCache;
   typedef std::vector<Node> ChildList;
-  typedef context::
-      CDHashMap<Node, std::pair<ChildList, ChildList>, NodeHashFunction>
-          ChildCache;
-  typedef context::CDHashMap<Node,Node,NodeHashFunction> SkolemMap;
-  typedef context::CDHashMap<Node,
-                             std::pair<DecisionWeight, DecisionWeight>,
-                             NodeHashFunction>
+  typedef context::CDHashMap<Node, std::pair<ChildList, ChildList>> ChildCache;
+  typedef context::CDHashMap<Node, Node> SkolemMap;
+  typedef context::CDHashMap<Node, std::pair<DecisionWeight, DecisionWeight>>
       WeightCache;
 
   // being 'justified' is monotonic with respect to decisions
-  typedef context::CDHashSet<Node,NodeHashFunction> JustifiedSet;
+  typedef context::CDHashSet<Node> JustifiedSet;
   JustifiedSet d_justified;
-  typedef context::CDHashMap<Node,DecisionWeight,NodeHashFunction> ExploredThreshold;
+  typedef context::CDHashMap<Node, DecisionWeight> ExploredThreshold;
   ExploredThreshold d_exploredThreshold;
   context::CDO<unsigned>  d_prvsIndex;
   context::CDO<unsigned>  d_threshPrvsIndex;
@@ -86,13 +82,13 @@ class JustificationHeuristic : public ITEDecisionStrategy {
    * splitter. Can happen when exploring assertion corresponding to a
    * term-ITE.
    */
-  std::unordered_set<Node,NodeHashFunction> d_visited;
+  std::unordered_set<Node> d_visited;
 
   /**
    * Set to track visited nodes in a dfs search done in computeSkolems
    * function
    */
-  std::unordered_set<Node, NodeHashFunction> d_visitedComputeSkolems;
+  std::unordered_set<Node> d_visitedComputeSkolems;
 
   /** current decision for the recursive call */
   prop::SatLiteral d_curDecision;
@@ -172,7 +168,7 @@ private:
   * For big and/or nodes, a cache to save starting index into children
   * for efficiently.
   */
- typedef context::CDHashMap<Node, int, NodeHashFunction> StartIndexCache;
+ typedef context::CDHashMap<Node, int> StartIndexCache;
  StartIndexCache d_startIndexCache;
  int getStartIndex(TNode node);
  void saveStartIndex(TNode node, int val);
index 848d86edd68ee6ef30610569ad3e7708bcd539af..d97fe13207ffc5049ddc2866890107a1bf875889 100644 (file)
@@ -109,8 +109,8 @@ std::ostream& operator<<(std::ostream& out, const ArrayStoreAll& asa) {
 }
 
 size_t ArrayStoreAllHashFunction::operator()(const ArrayStoreAll& asa) const {
-  return TypeNodeHashFunction()(asa.getType())
-         * NodeHashFunction()(asa.getValue());
+  return std::hash<TypeNode>()(asa.getType())
+         * std::hash<Node>()(asa.getValue());
 }
 
 }  // namespace cvc5
index e0f1c3ec86b149f70453fab99764774cfddefbd2..65a686036142905b278c946571270953ecc21c92 100644 (file)
@@ -47,7 +47,7 @@ bool AscriptionType::operator!=(const AscriptionType& other) const
 
 size_t AscriptionTypeHashFunction::operator()(const AscriptionType& at) const
 {
-  return TypeNodeHashFunction()(at.getType());
+  return std::hash<TypeNode>()(at.getType());
 }
 
 std::ostream& operator<<(std::ostream& out, AscriptionType at)
index 3330decffec3dca011fc8630355c70aa3470a6c6..b619a36e2b584e71630114c66f8dfeb8ce271551 100644 (file)
@@ -98,7 +98,7 @@ class BoundVarManager
   /** Whether we keep cache values */
   bool d_keepCacheVals;
   /** The set of cache values we have used */
-  std::unordered_set<Node, NodeHashFunction> d_cacheVals;
+  std::unordered_set<Node> d_cacheVals;
 };
 
 }  // namespace cvc5
index 4ac0b9add15823eb073c2256b49bbe7c54742e7b..2e1ef6c53b01688ac65b57a7c6ed602095d440d8 100644 (file)
@@ -33,8 +33,7 @@ class ProofStep;
  */
 class BufferedProofGenerator : public ProofGenerator
 {
-  typedef context::CDHashMap<Node, std::shared_ptr<ProofStep>, NodeHashFunction>
-      NodeProofStepMap;
+  typedef context::CDHashMap<Node, std::shared_ptr<ProofStep>> NodeProofStepMap;
 
  public:
   BufferedProofGenerator(context::Context* c, ProofNodeManager* pnm);
index c1893d3f4baebc84c796d487904ede83688f6f22..9e09c06e6c3ba858fefb99579c13ad458fa68624 100644 (file)
@@ -192,7 +192,7 @@ bool DType::resolve(const std::map<std::string, TypeNode>& resolutions,
   {
     // all datatype constructors should be sygus and have sygus operators whose
     // free variables are subsets of sygus bound var list.
-    std::unordered_set<Node, NodeHashFunction> svs;
+    std::unordered_set<Node> svs;
     for (const Node& sv : d_sygusBvl)
     {
       svs.insert(sv);
@@ -202,7 +202,7 @@ bool DType::resolve(const std::map<std::string, TypeNode>& resolutions,
       Node sop = d_constructors[i]->getSygusOp();
       Assert(!sop.isNull())
           << "Sygus datatype contains a non-sygus constructor";
-      std::unordered_set<Node, NodeHashFunction> fvs;
+      std::unordered_set<Node> fvs;
       expr::getFreeVariables(sop, fvs);
       for (const Node& v : fvs)
       {
@@ -625,10 +625,9 @@ Node DType::mkGroundTermInternal(TypeNode t, bool isValue) const
   return groundTerm;
 }
 
-void DType::getAlienSubfieldTypes(
-    std::unordered_set<TypeNode, TypeNodeHashFunction>& types,
-    std::map<TypeNode, bool>& processed,
-    bool isAlienPos) const
+void DType::getAlienSubfieldTypes(std::unordered_set<TypeNode>& types,
+                                  std::map<TypeNode, bool>& processed,
+                                  bool isAlienPos) const
 {
   std::map<TypeNode, bool>::iterator it = processed.find(d_self);
   if (it != processed.end())
@@ -708,7 +707,7 @@ bool DType::hasNestedRecursion() const
   Trace("datatypes-init") << "Compute simply recursive for " << getName()
                           << std::endl;
   // get the alien subfield types of this datatype
-  std::unordered_set<TypeNode, TypeNodeHashFunction> types;
+  std::unordered_set<TypeNode> types;
   std::map<TypeNode, bool> processed;
   getAlienSubfieldTypes(types, processed, false);
   if (Trace.isOn("datatypes-init"))
index 6fd334e0293089d4d069223ed79a7547b5b9478c..584dc1615ab353db6d5a16c98d7ff1946a15dd23 100644 (file)
@@ -542,10 +542,9 @@ class DType
    * @param isAlienPos Whether we are in an alien subfield type position. This
    * flag is true if we have traversed beneath a non-datatype type constructor.
    */
-  void getAlienSubfieldTypes(
-      std::unordered_set<TypeNode, TypeNodeHashFunction>& types,
-      std::map<TypeNode, bool>& processed,
-      bool isAlienPos) const;
+  void getAlienSubfieldTypes(std::unordered_set<TypeNode>& types,
+                             std::map<TypeNode, bool>& processed,
+                             bool isAlienPos) const;
   /** name of this datatype */
   std::string d_name;
   /** the type parameters of this datatype (if this is a parametric datatype)
index d85aca30cbce88c994da4e52e7b9d9a5e81c1e88..b8cb70e16708c051569c6b3465b8a40053a1f15e 100644 (file)
@@ -28,7 +28,7 @@ std::ostream& operator<<(std::ostream& out, const EmptyBag& asa)
 
 size_t EmptyBagHashFunction::operator()(const EmptyBag& es) const
 {
-  return TypeNodeHashFunction()(es.getType());
+  return std::hash<TypeNode>()(es.getType());
 }
 
 /**
index d0d1d4e78a316aa2e716f5482f16aec2b5884af4..0bd7ee21317fcb163b6f6389a3f494d796b8d5fc 100644 (file)
@@ -29,7 +29,7 @@ std::ostream& operator<<(std::ostream& out, const EmptySet& asa) {
 }
 
 size_t EmptySetHashFunction::operator()(const EmptySet& es) const {
-  return TypeNodeHashFunction()(es.getType());
+  return std::hash<TypeNode>()(es.getType());
 }
 
 /**
index 6bec9ffb9d66437b829416852fe302fd6fd6d3a0..efcda94bd13f0c826261745d084ea9156a150c26 100644 (file)
@@ -92,8 +92,7 @@ class LazyCDProof : public CDProof
   bool hasGenerator(Node fact) const;
 
  protected:
-  typedef context::CDHashMap<Node, ProofGenerator*, NodeHashFunction>
-      NodeProofGeneratorMap;
+  typedef context::CDHashMap<Node, ProofGenerator*> NodeProofGeneratorMap;
   /** Maps facts that can be proven to generators */
   NodeProofGeneratorMap d_gens;
   /** The default proof generator */
index f5cf56983cbbf8e29658b1f8c7eb6924a14c4bb8..3ce2212be540fec9c0629dd50108fad255b0cba4 100644 (file)
@@ -60,18 +60,15 @@ std::shared_ptr<ProofNode> LazyCDProofChain::getProofFor(Node fact)
       << "LazyCDProofChain::getProofFor " << fact << "\n";
   // which facts have had proofs retrieved for. This is maintained to avoid
   // cycles. It also saves the proof node of the fact
-  std::unordered_map<Node, std::shared_ptr<ProofNode>, NodeHashFunction>
-      toConnect;
+  std::unordered_map<Node, std::shared_ptr<ProofNode>> toConnect;
   // leaves of proof node links in the chain, i.e. assumptions, yet to be
   // expanded
-  std::unordered_map<Node,
-                     std::vector<std::shared_ptr<ProofNode>>,
-                     NodeHashFunction>
+  std::unordered_map<Node, std::vector<std::shared_ptr<ProofNode>>>
       assumptionsToExpand;
   // invariant of the loop below, the first iteration notwithstanding:
   //   visit = domain(assumptionsToExpand) \ domain(toConnect)
   std::vector<Node> visit{fact};
-  std::unordered_map<Node, bool, NodeHashFunction> visited;
+  std::unordered_map<Node, bool> visited;
   Node cur;
   do
   {
index fa965f8bb02ca98a737c30f1da98592ccaf38915..1abb3f84ec36731414866876997b65d92b0ad5c6 100644 (file)
@@ -144,7 +144,7 @@ class LazyCDProofChain : public ProofGenerator
   /** A dummy context used by this class if none is provided */
   context::Context d_context;
   /** Maps facts that can be proven to generators */
-  context::CDHashMap<Node, ProofGenerator*, NodeHashFunction> d_gens;
+  context::CDHashMap<Node, ProofGenerator*> d_gens;
   /** The default proof generator (if one exists) */
   ProofGenerator* d_defGen;
 };
index e4acfb476a1d759d63744c3927eac6788f7a6f99..00a5302274f310afa908e08c91863a17b8a3a7f4 100644 (file)
@@ -110,3 +110,17 @@ template bool NodeTemplate<true>::isConst() const;
 template bool NodeTemplate<false>::isConst() const;
 
 }  // namespace cvc5
+
+namespace std {
+
+size_t hash<cvc5::Node>::operator()(const cvc5::Node& node) const
+{
+  return node.getId();
+}
+
+size_t hash<cvc5::TNode>::operator()(const cvc5::TNode& node) const
+{
+  return node.getId();
+}
+
+}  // namespace std
index 5480b38aec1058d5f98cb16e22f674a441a02e03..9258a32649681ecf7f2678afcd29f5f790a2057e 100644 (file)
@@ -130,6 +130,25 @@ typedef NodeTemplate<true> Node;
  */
 typedef NodeTemplate<false> TNode;
 
+}  // namespace cvc5
+
+namespace std {
+
+template <>
+struct hash<cvc5::Node>
+{
+  size_t operator()(const cvc5::Node& node) const;
+};
+
+template <>
+struct hash<cvc5::TNode>
+{
+  size_t operator()(const cvc5::TNode& node) const;
+};
+
+}  // namespace std
+
+namespace cvc5 {
 namespace expr {
 
 class NodeValue;
@@ -148,14 +167,6 @@ namespace kind {
     }  // namespace metakind
     }  // namespace kind
 
-// for hash_maps, hash_sets..
-struct NodeHashFunction {
-  inline size_t operator()(Node node) const;
-};/* struct NodeHashFunction */
-struct TNodeHashFunction {
-  inline size_t operator()(TNode node) const;
-};/* struct TNodeHashFunction */
-
 /**
  * Encapsulation of an NodeValue pointer.  The reference count is
  * maintained in the NodeValue if ref_count is true.
@@ -226,82 +237,85 @@ public:
    * Cache-aware, recursive version of substitute() used by the public
    * member function with a similar signature.
    */
-  Node substitute(TNode node, TNode replacement,
-                  std::unordered_map<TNode, TNode, TNodeHashFunction>& cache) const;
-
-  /**
-   * Cache-aware, recursive version of substitute() used by the public
-   * member function with a similar signature.
-   */
-  template <class Iterator1, class Iterator2>
-  Node substitute(Iterator1 nodesBegin, Iterator1 nodesEnd,
-                  Iterator2 replacementsBegin, Iterator2 replacementsEnd,
-                  std::unordered_map<TNode, TNode, TNodeHashFunction>& cache) const;
-
-  /**
-   * Cache-aware, recursive version of substitute() used by the public
-   * member function with a similar signature.
-   */
-  template <class Iterator>
-  Node substitute(Iterator substitutionsBegin, Iterator substitutionsEnd,
-                  std::unordered_map<TNode, TNode, TNodeHashFunction>& cache) const;
-
-  /** Default constructor, makes a null expression. */
-  NodeTemplate() : d_nv(&expr::NodeValue::null()) { }
-
-  /**
-   * Conversion between nodes that are reference-counted and those that are
-   * not.
-   * @param node the node to make copy of
-   */
-  NodeTemplate(const NodeTemplate<!ref_count>& node);
-
-  /**
-   * Copy constructor.  Note that GCC does NOT recognize an instantiation of
-   * the above template as a copy constructor and problems ensue.  So we
-   * provide an explicit one here.
-   * @param node the node to make copy of
-   */
-  NodeTemplate(const NodeTemplate& node);
-
-  /**
-   * Assignment operator for nodes, copies the relevant information from node
-   * to this node.
-   * @param node the node to copy
-   * @return reference to this node
-   */
-  NodeTemplate& operator=(const NodeTemplate& node);
-
-  /**
-   * Assignment operator for nodes, copies the relevant information from node
-   * to this node.
-   * @param node the node to copy
-   * @return reference to this node
-   */
-  NodeTemplate& operator=(const NodeTemplate<!ref_count>& node);
-
-  /**
-   * Destructor. If ref_count is true it will decrement the reference count
-   * and, if zero, collect the NodeValue.
-   */
-  ~NodeTemplate();
-
-  /**
-   * Return the null node.
-   * @return the null node
-   */
-  static NodeTemplate null() {
-    return s_null;
-  }
-
-  /**
-   * Returns true if this expression is a null expression.
-   * @return true if null
-   */
-  bool isNull() const {
-    assertTNodeNotExpired();
-    return d_nv == &expr::NodeValue::null();
-  }
+ Node substitute(TNode node,
+                 TNode replacement,
+                 std::unordered_map<TNode, TNode>& cache) const;
+
+ /**
+  * Cache-aware, recursive version of substitute() used by the public
+  * member function with a similar signature.
+  */
+ template <class Iterator1, class Iterator2>
+ Node substitute(Iterator1 nodesBegin,
+                 Iterator1 nodesEnd,
+                 Iterator2 replacementsBegin,
+                 Iterator2 replacementsEnd,
+                 std::unordered_map<TNode, TNode>& cache) const;
+
+ /**
+  * Cache-aware, recursive version of substitute() used by the public
+  * member function with a similar signature.
+  */
+ template <class Iterator>
+ Node substitute(Iterator substitutionsBegin,
+                 Iterator substitutionsEnd,
+                 std::unordered_map<TNode, TNode>& cache) const;
+
+ /** Default constructor, makes a null expression. */
+ NodeTemplate() : d_nv(&expr::NodeValue::null()) {}
+
+ /**
+  * Conversion between nodes that are reference-counted and those that are
+  * not.
+  * @param node the node to make copy of
+  */
+ NodeTemplate(const NodeTemplate<!ref_count>& node);
+
+ /**
+  * Copy constructor.  Note that GCC does NOT recognize an instantiation of
+  * the above template as a copy constructor and problems ensue.  So we
+  * provide an explicit one here.
+  * @param node the node to make copy of
+  */
+ NodeTemplate(const NodeTemplate& node);
+
+ /**
+  * Assignment operator for nodes, copies the relevant information from node
+  * to this node.
+  * @param node the node to copy
+  * @return reference to this node
+  */
+ NodeTemplate& operator=(const NodeTemplate& node);
+
+ /**
+  * Assignment operator for nodes, copies the relevant information from node
+  * to this node.
+  * @param node the node to copy
+  * @return reference to this node
+  */
+ NodeTemplate& operator=(const NodeTemplate<!ref_count>& node);
+
+ /**
+  * Destructor. If ref_count is true it will decrement the reference count
+  * and, if zero, collect the NodeValue.
+  */
+ ~NodeTemplate();
+
+ /**
+  * Return the null node.
+  * @return the null node
+  */
+ static NodeTemplate null() { return s_null; }
+
+ /**
+  * Returns true if this expression is a null expression.
+  * @return true if null
+  */
+ bool isNull() const
+ {
+   assertTNodeNotExpired();
+   return d_nv == &expr::NodeValue::null();
+ }
 
   /**
    * Structural comparison operator for expressions.
@@ -500,8 +514,7 @@ public:
   /**
    * Simultaneous substitution of Nodes in cache.
    */
-  Node substitute(
-      std::unordered_map<TNode, TNode, TNodeHashFunction>& cache) const;
+  Node substitute(std::unordered_map<TNode, TNode>& cache) const;
 
   /**
    * Returns the kind of this node.
@@ -942,15 +955,8 @@ std::ostream& operator<<(
 
 namespace cvc5 {
 
-inline size_t NodeHashFunction::operator()(Node node) const {
-  return node.getId();
-}
-inline size_t TNodeHashFunction::operator()(TNode node) const {
-  return node.getId();
-}
-
 using TNodePairHashFunction =
-    PairHashFunction<TNode, TNode, TNodeHashFunction, TNodeHashFunction>;
+    PairHashFunction<TNode, TNode, std::hash<TNode>, std::hash<TNode>>;
 
 template <bool ref_count>
 inline size_t NodeTemplate<ref_count>::getNumChildren() const {
@@ -1253,14 +1259,16 @@ NodeTemplate<ref_count>::substitute(TNode node, TNode replacement) const {
   if (node == *this) {
     return replacement;
   }
-  std::unordered_map<TNode, TNode, TNodeHashFunction> cache;
+  std::unordered_map<TNode, TNode> cache;
   return substitute(node, replacement, cache);
 }
 
 template <bool ref_count>
-Node
-NodeTemplate<ref_count>::substitute(TNode node, TNode replacement,
-                                    std::unordered_map<TNode, TNode, TNodeHashFunction>& cache) const {
+Node NodeTemplate<ref_count>::substitute(
+    TNode node,
+    TNode replacement,
+    std::unordered_map<TNode, TNode>& cache) const
+{
   Assert(node != *this);
 
   if (getNumChildren() == 0 || node == replacement)
@@ -1269,7 +1277,8 @@ NodeTemplate<ref_count>::substitute(TNode node, TNode replacement,
   }
 
   // in cache?
-  typename std::unordered_map<TNode, TNode, TNodeHashFunction>::const_iterator i = cache.find(*this);
+  typename std::unordered_map<TNode, TNode>::const_iterator i =
+      cache.find(*this);
   if(i != cache.end()) {
     return (*i).second;
   }
@@ -1309,21 +1318,23 @@ NodeTemplate<ref_count>::substitute(Iterator1 nodesBegin,
                                     Iterator1 nodesEnd,
                                     Iterator2 replacementsBegin,
                                     Iterator2 replacementsEnd) const {
-  std::unordered_map<TNode, TNode, TNodeHashFunction> cache;
+  std::unordered_map<TNode, TNode> cache;
   return substitute(nodesBegin, nodesEnd,
                     replacementsBegin, replacementsEnd, cache);
 }
 
 template <bool ref_count>
 template <class Iterator1, class Iterator2>
-Node
-NodeTemplate<ref_count>::substitute(Iterator1 nodesBegin,
-                                    Iterator1 nodesEnd,
-                                    Iterator2 replacementsBegin,
-                                    Iterator2 replacementsEnd,
-                                    std::unordered_map<TNode, TNode, TNodeHashFunction>& cache) const {
+Node NodeTemplate<ref_count>::substitute(
+    Iterator1 nodesBegin,
+    Iterator1 nodesEnd,
+    Iterator2 replacementsBegin,
+    Iterator2 replacementsEnd,
+    std::unordered_map<TNode, TNode>& cache) const
+{
   // in cache?
-  typename std::unordered_map<TNode, TNode, TNodeHashFunction>::const_iterator i = cache.find(*this);
+  typename std::unordered_map<TNode, TNode>::const_iterator i =
+      cache.find(*this);
   if(i != cache.end()) {
     return (*i).second;
   }
@@ -1366,13 +1377,13 @@ template <class Iterator>
 inline Node
 NodeTemplate<ref_count>::substitute(Iterator substitutionsBegin,
                                     Iterator substitutionsEnd) const {
-  std::unordered_map<TNode, TNode, TNodeHashFunction> cache;
+  std::unordered_map<TNode, TNode> cache;
   return substitute(substitutionsBegin, substitutionsEnd, cache);
 }
 
 template <bool ref_count>
 inline Node NodeTemplate<ref_count>::substitute(
-    std::unordered_map<TNode, TNode, TNodeHashFunction>& cache) const
+    std::unordered_map<TNode, TNode>& cache) const
 {
   // Since no substitution is given (other than what may already be in the
   // cache), we pass dummy iterators to conform to the main substitute method,
@@ -1382,12 +1393,14 @@ inline Node NodeTemplate<ref_count>::substitute(
 
 template <bool ref_count>
 template <class Iterator>
-Node
-NodeTemplate<ref_count>::substitute(Iterator substitutionsBegin,
-                                    Iterator substitutionsEnd,
-                                    std::unordered_map<TNode, TNode, TNodeHashFunction>& cache) const {
+Node NodeTemplate<ref_count>::substitute(
+    Iterator substitutionsBegin,
+    Iterator substitutionsEnd,
+    std::unordered_map<TNode, TNode>& cache) const
+{
   // in cache?
-  typename std::unordered_map<TNode, TNode, TNodeHashFunction>::const_iterator i = cache.find(*this);
+  typename std::unordered_map<TNode, TNode>::const_iterator i =
+      cache.find(*this);
   if(i != cache.end()) {
     return (*i).second;
   }
index 0dc8858a22be20ae5002e2c7fb67a7ebdb0b13b5..19955443a4b95971acdd2700f2af4d176cc82b3d 100644 (file)
@@ -30,7 +30,7 @@ bool hasSubterm(TNode n, TNode t, bool strict)
     return true;
   }
 
-  std::unordered_set<TNode, TNodeHashFunction> visited;
+  std::unordered_set<TNode> visited;
   std::vector<TNode> toProcess;
 
   toProcess.push_back(n);
@@ -76,9 +76,9 @@ bool hasSubterm(TNode n, TNode t, bool strict)
 
 bool hasSubtermMulti(TNode n, TNode t)
 {
-  std::unordered_map<TNode, bool, TNodeHashFunction> visited;
-  std::unordered_map<TNode, bool, TNodeHashFunction> contains;
-  std::unordered_map<TNode, bool, TNodeHashFunction>::iterator it;
+  std::unordered_map<TNode, bool> visited;
+  std::unordered_map<TNode, bool> contains;
+  std::unordered_map<TNode, bool>::iterator it;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(n);
@@ -131,7 +131,7 @@ bool hasSubtermMulti(TNode n, TNode t)
 
 bool hasSubtermKind(Kind k, Node n)
 {
-  std::unordered_set<TNode, TNodeHashFunction> visited;
+  std::unordered_set<TNode> visited;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(n);
@@ -162,7 +162,7 @@ bool hasSubtermKinds(const std::unordered_set<Kind, kind::KindHashFunction>& ks,
   {
     return false;
   }
-  std::unordered_set<TNode, TNodeHashFunction> visited;
+  std::unordered_set<TNode> visited;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(n);
@@ -194,7 +194,7 @@ bool hasSubterm(TNode n, const std::vector<Node>& t, bool strict)
     return true;
   }
 
-  std::unordered_set<TNode, TNodeHashFunction> visited;
+  std::unordered_set<TNode> visited;
   std::vector<TNode> toProcess;
 
   toProcess.push_back(n);
@@ -283,7 +283,7 @@ bool hasBoundVar(TNode n)
 
 bool hasFreeVar(TNode n)
 {
-  std::unordered_set<Node, NodeHashFunction> fvs;
+  std::unordered_set<Node> fvs;
   return getFreeVariables(n, fvs, false);
 }
 
@@ -324,20 +324,18 @@ bool hasClosure(Node n)
   return n.getAttribute(HasClosureAttr());
 }
 
-bool getFreeVariables(TNode n,
-                      std::unordered_set<Node, NodeHashFunction>& fvs,
-                      bool computeFv)
+bool getFreeVariables(TNode n, std::unordered_set<Node>& fvs, bool computeFv)
 {
-  std::unordered_set<TNode, TNodeHashFunction> scope;
+  std::unordered_set<TNode> scope;
   return getFreeVariablesScope(n, fvs, scope, computeFv);
 }
 
 bool getFreeVariablesScope(TNode n,
-                           std::unordered_set<Node, NodeHashFunction>& fvs,
-                           std::unordered_set<TNode, TNodeHashFunction>& scope,
+                           std::unordered_set<Node>& fvs,
+                           std::unordered_set<TNode>& scope,
                            bool computeFv)
 {
-  std::unordered_set<TNode, TNodeHashFunction> visited;
+  std::unordered_set<TNode> visited;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(n);
@@ -350,8 +348,7 @@ bool getFreeVariablesScope(TNode n,
     {
       continue;
     }
-    std::unordered_set<TNode, TNodeHashFunction>::iterator itv =
-        visited.find(cur);
+    std::unordered_set<TNode>::iterator itv = visited.find(cur);
     if (itv == visited.end())
     {
       visited.insert(cur);
@@ -404,9 +401,9 @@ bool getFreeVariablesScope(TNode n,
   return !fvs.empty();
 }
 
-bool getVariables(TNode n, std::unordered_set<TNode, TNodeHashFunction>& vs)
+bool getVariables(TNode n, std::unordered_set<TNode>& vs)
 {
-  std::unordered_set<TNode, TNodeHashFunction> visited;
+  std::unordered_set<TNode> visited;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(n);
@@ -414,8 +411,7 @@ bool getVariables(TNode n, std::unordered_set<TNode, TNodeHashFunction>& vs)
   {
     cur = visit.back();
     visit.pop_back();
-    std::unordered_set<TNode, TNodeHashFunction>::iterator itv =
-        visited.find(cur);
+    std::unordered_set<TNode>::iterator itv = visited.find(cur);
     if (itv == visited.end())
     {
       if (cur.isVar())
@@ -433,15 +429,15 @@ bool getVariables(TNode n, std::unordered_set<TNode, TNodeHashFunction>& vs)
   return !vs.empty();
 }
 
-void getSymbols(TNode n, std::unordered_set<Node, NodeHashFunction>& syms)
+void getSymbols(TNode n, std::unordered_set<Node>& syms)
 {
-  std::unordered_set<TNode, TNodeHashFunction> visited;
+  std::unordered_set<TNode> visited;
   getSymbols(n, syms, visited);
 }
 
 void getSymbols(TNode n,
-                std::unordered_set<Node, NodeHashFunction>& syms,
-                std::unordered_set<TNode, TNodeHashFunction>& visited)
+                std::unordered_set<Node>& syms,
+                std::unordered_set<TNode>& visited)
 {
   std::vector<TNode> visit;
   TNode cur;
@@ -469,9 +465,9 @@ void getSymbols(TNode n,
 void getKindSubterms(TNode n,
                      Kind k,
                      bool topLevel,
-                     std::unordered_set<Node, NodeHashFunction>& ts)
+                     std::unordered_set<Node>& ts)
 {
-  std::unordered_set<TNode, TNodeHashFunction> visited;
+  std::unordered_set<TNode> visited;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(n);
@@ -500,18 +496,15 @@ void getKindSubterms(TNode n,
   } while (!visit.empty());
 }
 
-void getOperatorsMap(
-    TNode n,
-    std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>>& ops)
+void getOperatorsMap(TNode n, std::map<TypeNode, std::unordered_set<Node>>& ops)
 {
-  std::unordered_set<TNode, TNodeHashFunction> visited;
+  std::unordered_set<TNode> visited;
   getOperatorsMap(n, ops, visited);
 }
 
-void getOperatorsMap(
-    TNode n,
-    std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>>& ops,
-    std::unordered_set<TNode, TNodeHashFunction>& visited)
+void getOperatorsMap(TNode n,
+                     std::map<TypeNode, std::unordered_set<Node>>& ops,
+                     std::unordered_set<TNode>& visited)
 {
   // nodes that we still need to visit
   std::vector<TNode> visit;
@@ -565,8 +558,8 @@ Node substituteCaptureAvoiding(TNode n,
                                std::vector<Node>& src,
                                std::vector<Node>& dest)
 {
-  std::unordered_map<TNode, Node, TNodeHashFunction> visited;
-  std::unordered_map<TNode, Node, TNodeHashFunction>::iterator it;
+  std::unordered_map<TNode, Node> visited;
+  std::unordered_map<TNode, Node>::iterator it;
   std::vector<TNode> visit;
   TNode curr;
   visit.push_back(n);
@@ -654,8 +647,7 @@ Node substituteCaptureAvoiding(TNode n,
   return visited[n];
 }
 
-void getComponentTypes(
-    TypeNode t, std::unordered_set<TypeNode, TypeNodeHashFunction>& types)
+void getComponentTypes(TypeNode t, std::unordered_set<TypeNode>& types)
 {
   std::vector<TypeNode> toProcess;
   toProcess.push_back(t);
@@ -676,14 +668,12 @@ void getComponentTypes(
   } while (!toProcess.empty());
 }
 
-bool match(Node x,
-           Node y,
-           std::unordered_map<Node, Node, NodeHashFunction>& subs)
+bool match(Node x, Node y, std::unordered_map<Node, Node>& subs)
 {
   std::unordered_set<std::pair<TNode, TNode>, TNodePairHashFunction> visited;
   std::unordered_set<std::pair<TNode, TNode>, TNodePairHashFunction>::iterator
       it;
-  std::unordered_map<Node, Node, NodeHashFunction>::iterator subsIt;
+  std::unordered_map<Node, Node>::iterator subsIt;
 
   std::vector<std::pair<TNode, TNode>> stack;
   stack.emplace_back(x, y);
index 010724c806920b3440518a83a943e873a5fb82ca..b8576f78744db48f5229ccea4abaf1daf4110465 100644 (file)
@@ -103,7 +103,7 @@ bool hasClosure(Node n);
  * @return true iff this node contains a free variable.
  */
 bool getFreeVariables(TNode n,
-                      std::unordered_set<Node, NodeHashFunction>& fvs,
+                      std::unordered_set<Node>& fvs,
                       bool computeFv = true);
 /**
  * Get the free variables in n, that is, the subterms of n of kind
@@ -116,8 +116,8 @@ bool getFreeVariables(TNode n,
  * @return true iff this node contains a free variable.
  */
 bool getFreeVariablesScope(TNode n,
-                           std::unordered_set<Node, NodeHashFunction>& fvs,
-                           std::unordered_set<TNode, TNodeHashFunction>& scope,
+                           std::unordered_set<Node>& fvs,
+                           std::unordered_set<TNode>& scope,
                            bool computeFv = true);
 
 /**
@@ -126,7 +126,7 @@ bool getFreeVariablesScope(TNode n,
  * @param vs The set which free variables are added to
  * @return true iff this node contains a free variable.
  */
-bool getVariables(TNode n, std::unordered_set<TNode, TNodeHashFunction>& vs);
+bool getVariables(TNode n, std::unordered_set<TNode>& vs);
 
 /**
  * For term n, this function collects the symbols that occur as a subterms
@@ -134,7 +134,7 @@ bool getVariables(TNode n, std::unordered_set<TNode, TNodeHashFunction>& vs);
  * @param n The node under investigation
  * @param syms The set which the symbols of n are added to
  */
-void getSymbols(TNode n, std::unordered_set<Node, NodeHashFunction>& syms);
+void getSymbols(TNode n, std::unordered_set<Node>& syms);
 
 /**
  * For term n, this function collects the symbols that occur as a subterms
@@ -144,8 +144,8 @@ void getSymbols(TNode n, std::unordered_set<Node, NodeHashFunction>& syms);
  * @param visited A cache to be used for visited nodes.
  */
 void getSymbols(TNode n,
-                std::unordered_set<Node, NodeHashFunction>& syms,
-                std::unordered_set<TNode, TNodeHashFunction>& visited);
+                std::unordered_set<Node>& syms,
+                std::unordered_set<TNode>& visited);
 
 /**
  * For term n, this function collects the subterms of n whose kind is k.
@@ -157,7 +157,7 @@ void getSymbols(TNode n,
 void getKindSubterms(TNode n,
                      Kind k,
                      bool topLevel,
-                     std::unordered_set<Node, NodeHashFunction>& ts);
+                     std::unordered_set<Node>& ts);
 
 /**
  * For term n, this function collects the operators that occur in n.
@@ -165,9 +165,8 @@ void getKindSubterms(TNode n,
  * @param ops The map (from each type to operators of that type) which the
  * operators of n are added to
  */
-void getOperatorsMap(
-    TNode n,
-    std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>>& ops);
+void getOperatorsMap(TNode n,
+                     std::map<TypeNode, std::unordered_set<Node>>& ops);
 
 /**
  * For term n, this function collects the operators that occur in n.
@@ -176,10 +175,9 @@ void getOperatorsMap(
  * operators of n are added to
  * @param visited A cache to be used for visited nodes.
  */
-void getOperatorsMap(
-    TNode n,
-    std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>>& ops,
-    std::unordered_set<TNode, TNodeHashFunction>& visited);
+void getOperatorsMap(TNode n,
+                     std::map<TypeNode, std::unordered_set<Node>>& ops,
+                     std::unordered_set<TNode>& visited);
 
 /*
  * Substitution of Nodes in a capture avoiding way.
@@ -208,8 +206,7 @@ Node substituteCaptureAvoiding(TNode n,
  * @param t The type node under investigation
  * @param types The set which component types are added to.
  */
-void getComponentTypes(
-    TypeNode t, std::unordered_set<TypeNode, TypeNodeHashFunction>& types);
+void getComponentTypes(TypeNode t, std::unordered_set<TypeNode>& types);
 
 /** match
  *
@@ -230,9 +227,7 @@ void getComponentTypes(
  * @param subs the mapping from free vars in `n1` to terms in `n2`
  * @return whether or not `n2` is an instance of `n1`
  */
-bool match(Node n1,
-           Node n2,
-           std::unordered_map<Node, Node, NodeHashFunction>& subs);
+bool match(Node n1, Node n2, std::unordered_map<Node, Node>& subs);
 
 }  // namespace expr
 }  // namespace cvc5
index 6489e19c8eb88e740e565d04369f1986b96fb37e..75ae9c068664d9287aac8fdb59887e0d7e77e8bb 100644 (file)
@@ -98,7 +98,7 @@ class NodeDfsIterator
   // Absent if we haven't visited it.
   // Set to `false` if we've already pre-visited it (enqueued its children).
   // Set to `true` if we've also already post-visited it.
-  std::unordered_map<TNode, bool, TNodeHashFunction> d_visited;
+  std::unordered_map<TNode, bool> d_visited;
 
   // The visit order that this iterator is using
   VisitOrder d_order;
index 25ab1fd23c81a305aeddb9503d4b32577428c50b..496815938ed98fb7b645c92972b66c1b51275ee4 100644 (file)
@@ -246,8 +246,7 @@ class CDProof : public ProofGenerator
   std::string identify() const override;
 
  protected:
-  typedef context::CDHashMap<Node, std::shared_ptr<ProofNode>, NodeHashFunction>
-      NodeProofNodeMap;
+  typedef context::CDHashMap<Node, std::shared_ptr<ProofNode>> NodeProofNodeMap;
   /** The proof manager, used for allocating new ProofNode objects */
   ProofNodeManager* d_manager;
   /** A dummy context used by this class if none is provided */
index 957893cb37a9681c5ddbae0c3c6afddd6fc50897..4bb35b5dcd95b7233b5d3415d50852e182946f3f 100644 (file)
@@ -61,7 +61,7 @@ void getFreeAssumptionsMap(
   //   after postvisiting SCOPE1: { y: 1 }
   //   after postvisiting SCOPE2: {}
   //
-  std::unordered_map<Node, uint32_t, NodeHashFunction> scopeDepth;
+  std::unordered_map<Node, uint32_t> scopeDepth;
   std::shared_ptr<ProofNode> cur;
   visit.push_back(pn);
   do
index d4a8b604f89cb0470c9ae5707fbf52681c1e26d0..c2c72f35dac16766b5c179c09448decb97241674 100644 (file)
@@ -87,19 +87,19 @@ std::shared_ptr<ProofNode> ProofNodeManager::mkScope(
   }
   Trace("pnm-scope") << "ProofNodeManager::mkScope " << assumps << std::endl;
   // we first ensure the assumptions are flattened
-  std::unordered_set<Node, NodeHashFunction> ac{assumps.begin(), assumps.end()};
+  std::unordered_set<Node> ac{assumps.begin(), assumps.end()};
   // map from the rewritten form of assumptions to the original. This is only
   // computed in the rare case when we need rewriting to match the
   // assumptions. An example of this is for Boolean constant equalities in
   // scoped proofs from the proof equality engine.
-  std::unordered_map<Node, Node, NodeHashFunction> acr;
+  std::unordered_map<Node, Node> acr;
   // whether we have compute the map above
   bool computedAcr = false;
 
   // The free assumptions of the proof
   std::map<Node, std::vector<std::shared_ptr<ProofNode>>> famap;
   expr::getFreeAssumptionsMap(pf, famap);
-  std::unordered_set<Node, NodeHashFunction> acu;
+  std::unordered_set<Node> acu;
   for (const std::pair<const Node, std::vector<std::shared_ptr<ProofNode>>>&
            fa : famap)
   {
@@ -153,8 +153,7 @@ std::shared_ptr<ProofNode> ProofNodeManager::mkScope(
         }
       }
       Node ar = theory::Rewriter::rewrite(a);
-      std::unordered_map<Node, Node, NodeHashFunction>::iterator itr =
-          acr.find(ar);
+      std::unordered_map<Node, Node>::iterator itr = acr.find(ar);
       if (itr != acr.end())
       {
         aMatch = itr->second;
index 9e68f6cd7e1db429f2aa36aa3a574f0b8357aee4..4202c70ecc2f88e3ec957ddcaa92724320d47b68 100644 (file)
@@ -374,7 +374,7 @@ size_t SequenceHashFunction::operator()(const Sequence& s) const
   const std::vector<Node>& vec = s.getVec();
   for (const Node& n : vec)
   {
-    ret = fnv1a::fnv1a_64(ret, NodeHashFunction()(n));
+    ret = fnv1a::fnv1a_64(ret, std::hash<Node>()(n));
   }
   return ret;
 }
index b59d01fdd483684b11125f053c77b3aeec73f67d..bb29f84ee2fde8c2a52943888f71440b1631b695 100644 (file)
@@ -243,8 +243,8 @@ Node SkolemManager::getOriginalForm(Node n)
       << "SkolemManager::getOriginalForm " << n << std::endl;
   OriginalFormAttribute ofa;
   NodeManager* nm = NodeManager::currentNM();
-  std::unordered_map<TNode, Node, TNodeHashFunction> visited;
-  std::unordered_map<TNode, Node, TNodeHashFunction>::iterator it;
+  std::unordered_map<TNode, Node> visited;
+  std::unordered_map<TNode, Node>::iterator it;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(n);
index ba8c438b280d6788708841b90b9811aceb678477..bc067f60a770029b366501c5f6320194ebff48bb 100644 (file)
@@ -102,7 +102,7 @@ class TConvSeqProofGenerator : public ProofGenerator
 
  protected:
   using NodeIndexPairHashFunction =
-      PairHashFunction<Node, size_t, NodeHashFunction>;
+      PairHashFunction<Node, size_t, std::hash<Node>>;
   typedef context::
       CDHashMap<std::pair<Node, size_t>, Node, NodeIndexPairHashFunction>
           NodeIndexNodeMap;
index 3d68fd181935d090ed165273ccd496c1f49db9c4..0e0ed3165a32a51a61dec06d8aa12a040ac613c7 100644 (file)
@@ -266,11 +266,11 @@ Node TConvProofGenerator::getProofForRewriting(Node t,
   // nodes.
 
   // the final rewritten form of terms
-  std::unordered_map<Node, Node, TNodeHashFunction> visited;
+  std::unordered_map<Node, Node> visited;
   // the rewritten form of terms we have processed so far
-  std::unordered_map<Node, Node, TNodeHashFunction> rewritten;
-  std::unordered_map<Node, Node, TNodeHashFunction>::iterator it;
-  std::unordered_map<Node, Node, TNodeHashFunction>::iterator itr;
+  std::unordered_map<Node, Node> rewritten;
+  std::unordered_map<Node, Node>::iterator it;
+  std::unordered_map<Node, Node>::iterator itr;
   std::map<Node, std::shared_ptr<ProofNode> >::iterator itc;
   Trace("tconv-pf-gen-rewrite")
       << "TConvProofGenerator::getProofForRewriting: " << toStringDebug()
index e546d23bdee963b43db06faf50e3b188e49436fd..70e606db4f514e2790f30ac8bbd34dc3e56abebb 100644 (file)
@@ -200,7 +200,7 @@ class TConvProofGenerator : public ProofGenerator
   std::shared_ptr<ProofNode> getProofForRewriting(Node n);
 
  protected:
-  typedef context::CDHashMap<Node, Node, NodeHashFunction> NodeNodeMap;
+  typedef context::CDHashMap<Node, Node> NodeNodeMap;
   /** A dummy context used by this class if none is provided */
   context::Context d_context;
   /** The (lazy) context dependent proof object. */
index bd435a3928771632e4c2a2d8e375c5246b64f716..b4f2f7efa70d1ab0595b67a7089e2e89963a9af7 100644 (file)
@@ -29,11 +29,13 @@ namespace cvc5 {
 
 TypeNode TypeNode::s_null( &expr::NodeValue::null() );
 
-TypeNode TypeNode::substitute(const TypeNode& type,
-                              const TypeNode& replacement,
-                              std::unordered_map<TypeNode, TypeNode, HashFunction>& cache) const {
+TypeNode TypeNode::substitute(
+    const TypeNode& type,
+    const TypeNode& replacement,
+    std::unordered_map<TypeNode, TypeNode>& cache) const
+{
   // in cache?
-  std::unordered_map<TypeNode, TypeNode, HashFunction>::const_iterator i = cache.find(*this);
+  std::unordered_map<TypeNode, TypeNode>::const_iterator i = cache.find(*this);
   if(i != cache.end()) {
     return (*i).second;
   }
@@ -683,3 +685,12 @@ TypeNode TypeNode::getBagElementType() const
 }
 
 }  // namespace cvc5
+
+namespace std {
+
+size_t hash<cvc5::TypeNode>::operator()(const cvc5::TypeNode& tn) const
+{
+  return tn.getId();
+}
+
+}  // namespace std
index 0ab1d0217dbf02586d9eaceb90fd90a0e08b52ea..1840820dc492f016924258d77d1504a9e27ae0d0 100644 (file)
@@ -47,15 +47,6 @@ namespace expr {
  */
 class TypeNode {
 
-public:
-
-  // for hash_maps, hash_sets..
-  struct HashFunction {
-    size_t operator()(TypeNode node) const {
-      return (size_t) node.getId();
-    }
-  };/* struct HashFunction */
-
 private:
 
   /**
@@ -92,20 +83,22 @@ private:
    * Cache-aware, recursive version of substitute() used by the public
    * member function with a similar signature.
    */
-  TypeNode substitute(const TypeNode& type, const TypeNode& replacement,
-                      std::unordered_map<TypeNode, TypeNode, HashFunction>& cache) const;
+  TypeNode substitute(const TypeNode& type,
+                      const TypeNode& replacement,
+                      std::unordered_map<TypeNode, TypeNode>& cache) const;
 
   /**
    * Cache-aware, recursive version of substitute() used by the public
    * member function with a similar signature.
    */
   template <class Iterator1, class Iterator2>
-  TypeNode substitute(Iterator1 typesBegin, Iterator1 typesEnd,
-                      Iterator2 replacementsBegin, Iterator2 replacementsEnd,
-                      std::unordered_map<TypeNode, TypeNode, HashFunction>& cache) const;
-
-public:
+  TypeNode substitute(Iterator1 typesBegin,
+                      Iterator1 typesEnd,
+                      Iterator2 replacementsBegin,
+                      Iterator2 replacementsEnd,
+                      std::unordered_map<TypeNode, TypeNode>& cache) const;
 
+ public:
   /** Default constructor, makes a null expression. */
   TypeNode() : d_nv(&expr::NodeValue::null()) { }
 
@@ -735,10 +728,18 @@ inline std::ostream& operator<<(std::ostream& out, const TypeNode& n) {
   return out;
 }
 
-typedef TypeNode::HashFunction TypeNodeHashFunction;
-
 }  // namespace cvc5
 
+namespace std {
+
+template <>
+struct hash<cvc5::TypeNode>
+{
+  size_t operator()(const cvc5::TypeNode& tn) const;
+};
+
+}  // namespace std
+
 #include "expr/node_manager.h"
 
 namespace cvc5 {
@@ -746,7 +747,7 @@ namespace cvc5 {
 inline TypeNode
 TypeNode::substitute(const TypeNode& type,
                      const TypeNode& replacement) const {
-  std::unordered_map<TypeNode, TypeNode, HashFunction> cache;
+  std::unordered_map<TypeNode, TypeNode> cache;
   return substitute(type, replacement, cache);
 }
 
@@ -756,19 +757,21 @@ TypeNode::substitute(Iterator1 typesBegin,
                      Iterator1 typesEnd,
                      Iterator2 replacementsBegin,
                      Iterator2 replacementsEnd) const {
-  std::unordered_map<TypeNode, TypeNode, HashFunction> cache;
+  std::unordered_map<TypeNode, TypeNode> cache;
   return substitute(typesBegin, typesEnd,
                     replacementsBegin, replacementsEnd, cache);
 }
 
 template <class Iterator1, class Iterator2>
-TypeNode TypeNode::substitute(Iterator1 typesBegin,
-                              Iterator1 typesEnd,
-                              Iterator2 replacementsBegin,
-                              Iterator2 replacementsEnd,
-                              std::unordered_map<TypeNode, TypeNode, HashFunction>& cache) const {
+TypeNode TypeNode::substitute(
+    Iterator1 typesBegin,
+    Iterator1 typesEnd,
+    Iterator2 replacementsBegin,
+    Iterator2 replacementsEnd,
+    std::unordered_map<TypeNode, TypeNode>& cache) const
+{
   // in cache?
-  std::unordered_map<TypeNode, TypeNode, HashFunction>::const_iterator i = cache.find(*this);
+  std::unordered_map<TypeNode, TypeNode>::const_iterator i = cache.find(*this);
   if(i != cache.end()) {
     return (*i).second;
   }
index 039a77eb3fa090bd871f1504713626fd886c75d8..ef354568da346ea45cff03edbc8d892779f2cfc4 100644 (file)
@@ -90,7 +90,7 @@ std::ostream& operator<<(std::ostream& out, const UninterpretedConstant& uc) {
 size_t UninterpretedConstantHashFunction::operator()(
     const UninterpretedConstant& uc) const
 {
-  return TypeNodeHashFunction()(uc.getType())
+  return std::hash<TypeNode>()(uc.getType())
          * IntegerHashFunction()(uc.getIndex());
 }
 
index 6b2f142fc29a4a72e5f7c6baa9c963dacc726834..89029b5eba087371942ef9050cb00f42bc271df4 100644 (file)
@@ -205,7 +205,7 @@ size_t getBVSkolemSize(size_t capacity)
  * a sufficient bit-vector size.
  * Populate usVarsToBVVars so that it maps variables with uninterpreted sort to
  * the fresh skolem BV variables. variables */
-void collectUSortsToBV(const std::unordered_set<TNode, TNodeHashFunction>& vars,
+void collectUSortsToBV(const std::unordered_set<TNode>& vars,
                        const USortToBVSizeMap& usortCardinality,
                        SubstitutionMap& usVarsToBVVars)
 {
@@ -228,14 +228,13 @@ void collectUSortsToBV(const std::unordered_set<TNode, TNodeHashFunction>& vars,
 
 /* This function returns the list of terms with uninterpreted sort in the
  * formula represented by assertions. */
-std::unordered_set<TNode, TNodeHashFunction> getVarsWithUSorts(
-    AssertionPipeline* assertions)
+std::unordered_set<TNode> getVarsWithUSorts(AssertionPipeline* assertions)
 {
-  std::unordered_set<TNode, TNodeHashFunction> res;
+  std::unordered_set<TNode> res;
 
   for (const Node& assertion : assertions->ref())
   {
-    std::unordered_set<TNode, TNodeHashFunction> vars;
+    std::unordered_set<TNode> vars;
     expr::getVariables(assertion, vars);
 
     for (const TNode& var : vars)
@@ -261,8 +260,7 @@ void usortsToBitVectors(const LogicInfo& d_logic,
                         USortToBVSizeMap& usortCardinality,
                         SubstitutionMap& usVarsToBVVars)
 {
-  std::unordered_set<TNode, TNodeHashFunction> toProcess =
-      getVarsWithUSorts(assertions);
+  std::unordered_set<TNode> toProcess = getVarsWithUSorts(assertions);
 
   if (toProcess.size() > 0)
   {
index b51c4b344601c28e69fad9941f9aade2e9da5afb..dc9375d5c70e7a7a7fa2fab585348b513aa4ccea 100644 (file)
@@ -38,11 +38,9 @@ namespace cvc5 {
 namespace preprocessing {
 namespace passes {
 
-using TNodeSet = std::unordered_set<TNode, TNodeHashFunction>;
-using FunctionToArgsMap =
-    std::unordered_map<TNode, TNodeSet, TNodeHashFunction>;
-using USortToBVSizeMap =
-    std::unordered_map<TypeNode, size_t, TypeNode::HashFunction>;
+using TNodeSet = std::unordered_set<TNode>;
+using FunctionToArgsMap = std::unordered_map<TNode, TNodeSet>;
+using USortToBVSizeMap = std::unordered_map<TypeNode, size_t>;
 
 class Ackermann : public PreprocessingPass
 {
index 7082f5553918dc595875150ba5a5967364fdbd78..a789a0d0bf52b945aed47032cc92a25596a9d57c 100644 (file)
@@ -144,7 +144,7 @@ Node BoolToBV::lowerNode(const TNode& node, bool allowIteIntroduction)
 {
   std::vector<TNode> to_visit;
   to_visit.push_back(node);
-  std::unordered_set<TNode, TNodeHashFunction> visited;
+  std::unordered_set<TNode> visited;
 
   while (!to_visit.empty())
   {
@@ -309,7 +309,7 @@ Node BoolToBV::lowerIte(const TNode& node)
 {
   std::vector<TNode> visit;
   visit.push_back(node);
-  std::unordered_set<TNode, TNodeHashFunction> visited;
+  std::unordered_set<TNode> visited;
 
   while (!visit.empty())
   {
index 210c4e5cdc5dfb94d977cbdd9c89612448d75a14..0bef7c6b5222f286c3f69155334be2d217ba4596 100644 (file)
@@ -108,12 +108,12 @@ class BoolToBV : public PreprocessingPass
       Note: it only keeps mappings for ITEs of type bit-vector.
       Other ITEs will be in the d_lowerCache
    */
-  std::unordered_map<Node, Node, NodeHashFunction> d_iteBVLowerCache;
+  std::unordered_map<Node, Node> d_iteBVLowerCache;
 
   /** Keeps track of other lowered nodes
       -- will be cleared periodically in ITE mode
   */
-  std::unordered_map<Node, Node, NodeHashFunction> d_lowerCache;
+  std::unordered_map<Node, Node> d_lowerCache;
 
   /** Stores the bool-to-bv mode option */
   options::BoolToBVMode d_boolToBVMode;
index 5575844909afaffa1e31688b861bfd89af731983..f34ebd02ea63ef57d9b3119a8e3e33e0b3476316 100644 (file)
@@ -79,8 +79,8 @@ unsigned BVGauss::getMinBwExpr(Node expr)
 {
   std::vector<Node> visit;
   /* Maps visited nodes to the determined minimum bit-width required. */
-  std::unordered_map<Node, unsigned, NodeHashFunction> visited;
-  std::unordered_map<Node, unsigned, NodeHashFunction>::iterator it;
+  std::unordered_map<Node, unsigned> visited;
+  std::unordered_map<Node, unsigned>::iterator it;
 
   visit.push_back(expr);
   while (!visit.empty())
@@ -421,20 +421,19 @@ BVGauss::Result BVGauss::gaussElim(Integer prime,
  * of the form 'unknown = mapped result' in applyInternal.
  */
 BVGauss::Result BVGauss::gaussElimRewriteForUrem(
-    const std::vector<Node>& equations,
-    std::unordered_map<Node, Node, NodeHashFunction>& res)
+    const std::vector<Node>& equations, std::unordered_map<Node, Node>& res)
 {
   Assert(res.empty());
 
   Node prime;
   Integer iprime;
-  std::unordered_map<Node, std::vector<Integer>, NodeHashFunction> vars;
+  std::unordered_map<Node, std::vector<Integer>> vars;
   size_t neqs = equations.size();
   std::vector<Integer> rhs;
   std::vector<std::vector<Integer>> lhs =
       std::vector<std::vector<Integer>>(neqs, std::vector<Integer>());
 
-  res = std::unordered_map<Node, Node, NodeHashFunction>();
+  res = std::unordered_map<Node, Node>();
 
   for (size_t i = 0; i < neqs; ++i)
   {
@@ -473,7 +472,7 @@ BVGauss::Result BVGauss::gaussElimRewriteForUrem(
       iprime = get_bv_const_value(prime);
     }
 
-    std::unordered_map<Node, Integer, NodeHashFunction> tmp;
+    std::unordered_map<Node, Integer> tmp;
     std::vector<Node> stack;
     stack.push_back(urem[0]);
     while (!stack.empty())
@@ -699,7 +698,7 @@ PreprocessingPassResult BVGauss::applyInternal(
     AssertionPipeline* assertionsToPreprocess)
 {
   std::vector<Node> assertions(assertionsToPreprocess->ref());
-  std::unordered_map<Node, std::vector<Node>, NodeHashFunction> equations;
+  std::unordered_map<Node, std::vector<Node>> equations;
 
   while (!assertions.empty())
   {
@@ -738,14 +737,14 @@ PreprocessingPassResult BVGauss::applyInternal(
     }
   }
 
-  std::unordered_map<Node, Node, NodeHashFunction> subst;
+  std::unordered_map<Node, Node> subst;
 
   NodeManager* nm = NodeManager::currentNM();
   for (const auto& eq : equations)
   {
     if (eq.second.size() <= 1) { continue; }
 
-    std::unordered_map<Node, Node, NodeHashFunction> res;
+    std::unordered_map<Node, Node> res;
     BVGauss::Result ret = gaussElimRewriteForUrem(eq.second, res);
     Trace("bv-gauss-elim") << "result: "
                            << (ret == BVGauss::Result::INVALID
index a71f4ce3f6889ced9929ec91514aeb8e75e59577..c7cec2cc01a95a6785bc9637283ddde826b65bd2 100644 (file)
@@ -96,9 +96,8 @@ class BVGauss : public PreprocessingPass
                           std::vector<Integer>& rhs,
                           std::vector<std::vector<Integer>>& lhs);
 
-  static Result gaussElimRewriteForUrem(
-      const std::vector<Node>& equations,
-      std::unordered_map<Node, Node, NodeHashFunction>& res);
+  static Result gaussElimRewriteForUrem(const std::vector<Node>& equations,
+                                        std::unordered_map<Node, Node>& res);
 
   static unsigned getMinBwExpr(Node expr);
 };
index 829655121dad941c57f3ca1448bf9fd491b97ebf..45df7478ce250c16e8bb88d52e38cc7e7d5c1288 100644 (file)
@@ -30,7 +30,7 @@ namespace cvc5 {
 namespace preprocessing {
 namespace passes {
 
-using NodeMap = std::unordered_map<Node, Node, NodeHashFunction>;
+using NodeMap = std::unordered_map<Node, Node>;
 using namespace cvc5::theory;
 
 namespace {
@@ -87,7 +87,7 @@ BvIntroPow2::BvIntroPow2(PreprocessingPassContext* preprocContext)
 PreprocessingPassResult BvIntroPow2::applyInternal(
     AssertionPipeline* assertionsToPreprocess)
 {
-  std::unordered_map<Node, Node, NodeHashFunction> cache;
+  std::unordered_map<Node, Node> cache;
   for (unsigned i = 0, size = assertionsToPreprocess->size(); i < size; ++i)
   {
     Node cur = (*assertionsToPreprocess)[i];
index 6ae33ef02834441dd25e3bdaf6c9704bbf012c25..d34f2f77f6984a65d72c2dae2308c719bcb69a3a 100644 (file)
@@ -26,7 +26,7 @@ namespace cvc5 {
 namespace preprocessing {
 namespace passes {
 
-typedef std::unordered_map<Node, Node, NodeHashFunction> NodeNodeMap;
+typedef std::unordered_map<Node, Node> NodeNodeMap;
 
 class BVToBool : public PreprocessingPass
 {
index b8fa00e95be2a6f169b39ef7fc6a3d3cb3863da5..d09f9e738d769b13cd5b33fc808f4d380c4b71b0 100644 (file)
@@ -78,7 +78,7 @@ namespace cvc5 {
 namespace preprocessing {
 namespace passes {
 
-using CDNodeMap = context::CDHashMap<Node, Node, NodeHashFunction>;
+using CDNodeMap = context::CDHashMap<Node, Node>;
 
 class BVToInt : public PreprocessingPass
 {
@@ -272,7 +272,7 @@ class BVToInt : public PreprocessingPass
    * A set of constraints of the form 0 <= x < 2^k
    * These are added for every new integer variable that we introduce.
    */
-  context::CDHashSet<Node, NodeHashFunction> d_rangeAssertions;
+  context::CDHashSet<Node> d_rangeAssertions;
 
   /**
    * Useful constants
index 87299074ad9f557a484099efce0062c4f5f90864..4940f326c37b1651df26562b4dac0859a9089c48 100644 (file)
@@ -28,7 +28,7 @@ namespace cvc5 {
 namespace preprocessing {
 namespace passes {
 
-using CDNodeMap = context::CDHashMap<Node, Node, NodeHashFunction>;
+using CDNodeMap = context::CDHashMap<Node, Node>;
 
 class ForeignTheoryRewrite : public PreprocessingPass
 {
index b09870c1196104bce35179bd90efcfcc4fb1abce..e990f88682279b096dc5cf7826cae243ec15e9e7 100644 (file)
@@ -37,7 +37,7 @@ Node GlobalNegate::simplify(const std::vector<Node>& assertions,
   // collect free variables in all assertions
   std::vector<Node> free_vars;
   std::vector<TNode> visit;
-  std::unordered_set<TNode, TNodeHashFunction> visited;
+  std::unordered_set<TNode> visited;
   for (const Node& as : assertions)
   {
     Trace("cegqi-gn") << "  " << as << std::endl;
index 48ec7860d8a23efe91bd646962d4078a8349a318..27dcf651bfa68798bb38c122c8ea810c681a5fcd 100644 (file)
@@ -39,7 +39,7 @@ Node HoElim::eliminateLambdaComplete(Node n, std::map<Node, Node>& newLambda)
 {
   NodeManager* nm = NodeManager::currentNM();
   SkolemManager* sm = nm->getSkolemManager();
-  std::unordered_map<Node, Node, TNodeHashFunction>::iterator it;
+  std::unordered_map<Node, Node>::iterator it;
   std::vector<Node> visit;
   TNode cur;
   visit.push_back(n);
@@ -57,7 +57,7 @@ Node HoElim::eliminateLambdaComplete(Node n, std::map<Node, Node>& newLambda)
         // must also get free variables in lambda
         std::vector<Node> lvars;
         std::vector<TypeNode> ftypes;
-        std::unordered_set<Node, NodeHashFunction> fvs;
+        std::unordered_set<Node> fvs;
         expr::getFreeVariables(cur, fvs);
         std::vector<Node> nvars;
         std::vector<Node> vars;
@@ -155,7 +155,7 @@ Node HoElim::eliminateHo(Node n)
   Trace("ho-elim-assert") << "Ho-elim assertion: " << n << std::endl;
   NodeManager* nm = NodeManager::currentNM();
   SkolemManager* sm = nm->getSkolemManager();
-  std::unordered_map<Node, Node, NodeHashFunction>::iterator it;
+  std::unordered_map<Node, Node>::iterator it;
   std::map<Node, Node> preReplace;
   std::map<Node, Node>::iterator itr;
   std::vector<TNode> visit;
@@ -258,7 +258,7 @@ Node HoElim::eliminateHo(Node n)
               << std::endl;
           if (typeChanged)
           {
-            std::unordered_map<TNode, Node, TNodeHashFunction>::iterator ito =
+            std::unordered_map<TNode, Node>::iterator ito =
                 d_visited_op.find(op);
             if (ito == d_visited_op.end())
             {
index a2574ff39b5c2e300078c068aeffa62bfb7ce794..8b8dc08c2bcd829d6a69e2c688f36b6e81654691 100644 (file)
@@ -117,14 +117,14 @@ class HoElim : public PreprocessingPass
    * Stores the set of nodes we have current visited and their results
    * in steps [1] and [2] of this pass.
    */
-  std::unordered_map<Node, Node, NodeHashFunction> d_visited;
+  std::unordered_map<Node, Node> d_visited;
   /**
    * Stores the mapping from functions f to their corresponding function H(f)
    * in the encoding for step [2] of this pass.
    */
-  std::unordered_map<TNode, Node, TNodeHashFunction> d_visited_op;
+  std::unordered_map<TNode, Node> d_visited_op;
   /** The set of all function types encountered in assertions. */
-  std::unordered_set<TypeNode, TypeNodeHashFunction> d_funTypes;
+  std::unordered_set<TypeNode> d_funTypes;
 
   /**
    * Get ho apply uf, this returns App_{@_{T1 x T2 ... x Tn -> T}}
index 21ec77d0cfe86fb45d0cc09a199536ddee2742b3..2f9fd28e6c67894a21b20658a79130b0c271df35 100644 (file)
@@ -38,7 +38,7 @@ namespace passes {
 using namespace std;
 using namespace cvc5::theory;
 
-using NodeMap = std::unordered_map<Node, Node, NodeHashFunction>;
+using NodeMap = std::unordered_map<Node, Node>;
 
 namespace {
 
index e9819072d5e6db25705e33fbc37e14a666fb2abc..fe515ed593155cceb40039a299aad8aad54b1135 100644 (file)
@@ -207,7 +207,7 @@ PreprocessingPassResult MipLibTrick::applyInternal(
   Node zero = nm->mkConst(Rational(0)), one = nm->mkConst(Rational(1));
   Node trueNode = nm->mkConst(true);
 
-  unordered_map<TNode, Node, TNodeHashFunction> intVars;
+  unordered_map<TNode, Node> intVars;
   for (TNode v0 : d_boolVars)
   {
     if (propagator->isAssigned(v0))
index bb32e7ba2d29e61d0746049a564252ccf157739c..afd21fb7a72bc77c916f01e0694df36ccfa34dd8 100644 (file)
@@ -116,8 +116,8 @@ NlExtPurify::NlExtPurify(PreprocessingPassContext* preprocContext)
 PreprocessingPassResult NlExtPurify::applyInternal(
     AssertionPipeline* assertionsToPreprocess)
 {
-  unordered_map<Node, Node, NodeHashFunction> cache;
-  unordered_map<Node, Node, NodeHashFunction> bcache;
+  unordered_map<Node, Node> cache;
+  unordered_map<Node, Node> bcache;
   std::vector<Node> var_eq;
   unsigned size = assertionsToPreprocess->size();
   for (unsigned i = 0; i < size; ++i)
index 211373e35466a7c246122c7f30a3cdda0f522d2b..ab5a6ac7f5dbe8c51a67749b435dee1ba36851b7 100644 (file)
@@ -31,7 +31,7 @@ namespace cvc5 {
 namespace preprocessing {
 namespace passes {
 
-using NodeMap = std::unordered_map<Node, Node, NodeHashFunction>;
+using NodeMap = std::unordered_map<Node, Node>;
 
 class NlExtPurify : public PreprocessingPass
 {
index d68c30a119bc33b22041baa508f1d6a93b200251..d88e901d7b4aa1b3267ac4dc8c4080bd1de98fa1 100644 (file)
@@ -294,7 +294,7 @@ PreprocessingPassResult NonClausalSimp::applyInternal(
       << "Resize non-clausal learned literals to " << j << std::endl;
   learned_literals.resize(j);
 
-  std::unordered_set<TNode, TNodeHashFunction> s;
+  std::unordered_set<TNode> s;
   for (size_t i = 0, size = assertionsToPreprocess->size(); i < size; ++i)
   {
     Node assertion = (*assertionsToPreprocess)[i];
index cf68bc8fbd98091861416f99d08505a4d0df889e..74ee67fa4db1dbfef4f90be55c2d613633a4b741 100644 (file)
@@ -90,12 +90,11 @@ class PseudoBooleanProcessor : public PreprocessingPass
   static Node mkGeqOne(Node v);
 
   // x ->  <geqZero, leqOne>
-  typedef context::CDHashMap<Node, std::pair<Node, Node>, NodeHashFunction>
-      CDNode2PairMap;
+  typedef context::CDHashMap<Node, std::pair<Node, Node>> CDNode2PairMap;
   CDNode2PairMap d_pbBounds;
   theory::SubstitutionMap d_subCache;
 
-  typedef std::unordered_set<Node, NodeHashFunction> NodeSet;
+  typedef std::unordered_set<Node> NodeSet;
   NodeSet d_learningCache;
 
   context::CDO<unsigned> d_pbs;
index d26547372ab3402943c95638ed4bd70cbc513ca1..4fcc6e2541f2dc93e0d1b1512d24b1ba0a9dc17d 100644 (file)
@@ -32,7 +32,7 @@ namespace passes {
 
 class RealToInt : public PreprocessingPass
 {
-  using NodeMap = context::CDHashMap<Node, Node, NodeHashFunction>;
+  using NodeMap = context::CDHashMap<Node, Node>;
 
  public:
   RealToInt(PreprocessingPassContext* preprocContext);
index b15d5a377f125edd66ea6d2eb7aa3568aee3a69a..33a2e38d97befcc7656af91ff509b0121c22298c 100644 (file)
@@ -93,7 +93,7 @@ bool SygusInference::solveSygus(const std::vector<Node>& assertions,
   std::vector<Node> free_functions;
 
   std::vector<TNode> visit;
-  std::unordered_set<TNode, TNodeHashFunction> visited;
+  std::unordered_set<TNode> visited;
 
   // add top-level conjuncts to eassertions
   std::vector<Node> assertions_proc = assertions;
index e521ceffa03cdcaee27dbdc6c5995a5ce7c64d86..81d5cae846c20cb740889d88d44b54594e969e56 100644 (file)
@@ -54,8 +54,8 @@ PreprocessingPassResult SynthRewRulesPass::applyInternal(
   NodeManager* nm = NodeManager::currentNM();
 
   // initialize the candidate rewrite
-  std::unordered_map<TNode, bool, TNodeHashFunction> visited;
-  std::unordered_map<TNode, bool, TNodeHashFunction>::iterator it;
+  std::unordered_map<TNode, bool> visited;
+  std::unordered_map<TNode, bool>::iterator it;
   std::vector<TNode> visit;
   // Get all usable terms from the input. A term is usable if it does not
   // contain a quantified subterm
index 862585790f942ff05456d5a3064888a8004d5c2e..44aedc75479721e9cef7b9c477f37c2d83683fbf 100644 (file)
@@ -49,8 +49,8 @@ theory::TrustNode TheoryRewriteEq::rewriteAssertion(TNode n)
 {
   NodeManager* nm = NodeManager::currentNM();
   TheoryEngine* te = d_preprocContext->getTheoryEngine();
-  std::unordered_map<TNode, Node, TNodeHashFunction> visited;
-  std::unordered_map<TNode, Node, TNodeHashFunction>::iterator it;
+  std::unordered_map<TNode, Node> visited;
+  std::unordered_map<TNode, Node>::iterator it;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(n);
index 2128f968196138f47b2f16d545c8e2001b9a5c5f..861a89b7eef7b9c5eac3a3407039f2b10bf51720 100644 (file)
@@ -49,9 +49,9 @@ class UnconstrainedSimplifier : public PreprocessingPass
   /** number of expressions eliminated due to unconstrained simplification */
   IntStat d_numUnconstrainedElim;
 
-  using TNodeCountMap = std::unordered_map<TNode, unsigned, TNodeHashFunction>;
-  using TNodeMap = std::unordered_map<TNode, TNode, TNodeHashFunction>;
-  using TNodeSet = std::unordered_set<TNode, TNodeHashFunction>;
+  using TNodeCountMap = std::unordered_map<TNode, unsigned>;
+  using TNodeMap = std::unordered_map<TNode, TNode>;
+  using TNodeSet = std::unordered_set<TNode>;
 
   TNodeCountMap d_visited;
   TNodeMap d_visitedOnce;
index 9e8a4efc8c2482b8cc3364b38b1f43a71c3d6f2a..eaccce1a9b8627d93687f2597182c4f81a1f5cb9 100644 (file)
@@ -55,8 +55,8 @@ void PreprocessingPassContext::spendResource(Resource r)
 void PreprocessingPassContext::recordSymbolsInAssertions(
     const std::vector<Node>& assertions)
 {
-  std::unordered_set<TNode, TNodeHashFunction> visited;
-  std::unordered_set<Node, NodeHashFunction> syms;
+  std::unordered_set<TNode> visited;
+  std::unordered_set<Node> syms;
   for (TNode cn : assertions)
   {
     expr::getSymbols(cn, syms, visited);
index a14fafb4724201f2dc2eaa97f662829f7ee67ee2..722c82f6be17404c7bba461096c3cea269691605 100644 (file)
@@ -57,10 +57,7 @@ class PreprocessingPassContext
     return d_circuitPropagator;
   }
 
-  context::CDHashSet<Node, NodeHashFunction>& getSymsInAssertions()
-  {
-    return d_symsInAssertions;
-  }
+  context::CDHashSet<Node>& getSymsInAssertions() { return d_symsInAssertions; }
 
   void spendResource(Resource r);
 
@@ -107,7 +104,7 @@ class PreprocessingPassContext
    * The (user-context-dependent) set of symbols that occur in at least one
    * assertion in the current user context.
    */
-  context::CDHashSet<Node, NodeHashFunction> d_symsInAssertions;
+  context::CDHashSet<Node> d_symsInAssertions;
 
 };  // class PreprocessingPassContext
 
index 833fa59b9473380713354392686033f2c17ed862..3e1b3659a7a5b8451a30103d2c57e62128afab0f 100644 (file)
@@ -1264,7 +1264,7 @@ bool ITESimplifier::leavesAreConst(TNode e, theory::TheoryId tid)
     return true;
   }
 
-  unordered_map<Node, bool, NodeHashFunction>::iterator it;
+  unordered_map<Node, bool>::iterator it;
   it = d_leavesConstCache.find(e);
   if (it != d_leavesConstCache.end())
   {
@@ -1358,7 +1358,7 @@ Node ITESimplifier::simpConstants(TNode simpContext,
 
 Node ITESimplifier::getSimpVar(TypeNode t)
 {
-  std::unordered_map<TypeNode, Node, TypeNode::HashFunction>::iterator it;
+  std::unordered_map<TypeNode, Node>::iterator it;
   it = d_simpVars.find(t);
   if (it != d_simpVars.end())
   {
@@ -1424,7 +1424,7 @@ Node ITESimplifier::createSimpContext(TNode c, Node& iteNode, Node& simpVar)
   d_simpContextCache[c] = result;
   return result;
 }
-typedef std::unordered_set<Node, NodeHashFunction> NodeSet;
+typedef std::unordered_set<Node> NodeSet;
 void countReachable_(Node x, Kind k, NodeSet& visited, uint32_t& reached)
 {
   if (visited.find(x) != visited.end())
index 95eaf8a849393256ae1beeaecdd5b2bac643ab65..3ab65576762858bd5dd08844972dd2fc7f663b73 100644 (file)
@@ -61,7 +61,7 @@ class ContainsTermITEVisitor
   size_t cache_size() const { return d_cache.size(); }
 
  private:
-  typedef std::unordered_map<Node, bool, NodeHashFunction> NodeBoolMap;
+  typedef std::unordered_map<Node, bool> NodeBoolMap;
   NodeBoolMap d_cache;
 };
 
@@ -121,7 +121,7 @@ class IncomingArcCounter
   void clear();
 
  private:
-  typedef std::unordered_map<Node, uint32_t, NodeHashFunction> NodeCountMap;
+  typedef std::unordered_map<Node, uint32_t> NodeCountMap;
   NodeCountMap d_reachCount;
 
   bool d_skipVariables;
@@ -154,7 +154,7 @@ class TermITEHeightCounter
   size_t cache_size() const;
 
  private:
-  typedef std::unordered_map<Node, uint32_t, NodeHashFunction> NodeCountMap;
+  typedef std::unordered_map<Node, uint32_t> NodeCountMap;
   NodeCountMap d_termITEHeight;
 }; /* class TermITEHeightCounter */
 
@@ -181,7 +181,7 @@ class ITECompressor
   AssertionPipeline* d_assertions;
   IncomingArcCounter d_incoming;
 
-  typedef std::unordered_map<Node, Node, NodeHashFunction> NodeMap;
+  typedef std::unordered_map<Node, Node> NodeMap;
   NodeMap d_compressed;
 
   void reset();
@@ -232,8 +232,7 @@ class ITESimplifier
   //     constant
   // or  termITE(cnd, ConstantIte, ConstantIte)
   typedef std::vector<Node> NodeVec;
-  typedef std::unordered_map<Node, NodeVec*, NodeHashFunction>
-      ConstantLeavesMap;
+  typedef std::unordered_map<Node, NodeVec*> ConstantLeavesMap;
   ConstantLeavesMap d_constantLeaves;
 
   // d_constantLeaves satisfies the following invariants:
@@ -269,7 +268,7 @@ class ITESimplifier
 
   typedef std::pair<Node, Node> NodePair;
   using NodePairHashFunction =
-      PairHashFunction<Node, Node, NodeHashFunction, NodeHashFunction>;
+      PairHashFunction<Node, Node, std::hash<Node>, std::hash<Node>>;
   typedef std::unordered_map<NodePair, Node, NodePairHashFunction> NodePairMap;
   NodePairMap d_constantIteEqualsConstantCache;
   NodePairMap d_replaceOverCache;
@@ -277,16 +276,16 @@ class ITESimplifier
   Node replaceOver(Node n, Node replaceWith, Node simpVar);
   Node replaceOverTermIte(Node term, Node simpAtom, Node simpVar);
 
-  std::unordered_map<Node, bool, NodeHashFunction> d_leavesConstCache;
+  std::unordered_map<Node, bool> d_leavesConstCache;
   bool leavesAreConst(TNode e, theory::TheoryId tid);
   bool leavesAreConst(TNode e);
 
   NodePairMap d_simpConstCache;
   Node simpConstants(TNode simpContext, TNode iteNode, TNode simpVar);
-  std::unordered_map<TypeNode, Node, TypeNode::HashFunction> d_simpVars;
+  std::unordered_map<TypeNode, Node> d_simpVars;
   Node getSimpVar(TypeNode t);
 
-  typedef std::unordered_map<Node, Node, NodeHashFunction> NodeMap;
+  typedef std::unordered_map<Node, Node> NodeMap;
   NodeMap d_simpContextCache;
   Node createSimpContext(TNode c, Node& iteNode, Node& simpVar);
 
@@ -335,7 +334,7 @@ class ITECareSimplifier
   Node d_true;
   Node d_false;
 
-  typedef std::unordered_map<TNode, Node, TNodeHashFunction> TNodeMap;
+  typedef std::unordered_map<TNode, Node> TNodeMap;
 
   class CareSetPtr;
   class CareSetPtrVal
index 16fc4703cee0b07be15926bf2370ff878c249fe5..a807b9d83aa24d23c057b72c7c721b7a18b7f165 100644 (file)
@@ -82,8 +82,8 @@ Node LetBinding::convert(Node n, const std::string& prefix, bool letTop) const
     return n;
   }
   NodeManager* nm = NodeManager::currentNM();
-  std::unordered_map<TNode, Node, TNodeHashFunction> visited;
-  std::unordered_map<TNode, Node, TNodeHashFunction>::iterator it;
+  std::unordered_map<TNode, Node> visited;
+  std::unordered_map<TNode, Node>::iterator it;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(n);
index abdf5985d3e0428006ee5ffd15fe6dc0a46f6f18..b67ceb129b5fc262c0a611d1504f99254d3bfb18 100644 (file)
@@ -87,7 +87,7 @@ namespace cvc5 {
 class LetBinding
 {
   using NodeList = context::CDList<Node>;
-  using NodeIdMap = context::CDHashMap<Node, uint32_t, NodeHashFunction>;
+  using NodeIdMap = context::CDHashMap<Node, uint32_t>;
 
  public:
   LetBinding(uint32_t thresh = 2);
index 50ce78eb8ea5b5e4ca17d03ec590e791d82abd96..8e8f2bc91bf0aa6c1650745a977cd156d4cf4c58 100644 (file)
@@ -32,14 +32,14 @@ namespace prop {
 
 class CnfProof;
 
-typedef std::unordered_map<Node, Node, NodeHashFunction> NodeToNode;
+typedef std::unordered_map<Node, Node> NodeToNode;
 typedef std::unordered_set<ClauseId> ClauseIdSet;
 
 typedef context::CDHashMap<ClauseId, Node> ClauseIdToNode;
 typedef std::pair<Node, Node> NodePair;
 typedef std::set<NodePair> NodePairSet;
 
-typedef std::unordered_set<Node, NodeHashFunction> NodeSet;
+typedef std::unordered_set<Node> NodeSet;
 
 class CnfProof {
 protected:
index f0bc20feab1beddd28cc041dbea111b8f2937557..8d1bbc70c7e8da9cd63e12c9d6e70275b1a40810 100644 (file)
@@ -54,8 +54,8 @@ namespace prop {
   }  // namespace prop
 
 typedef std::unordered_map<ClauseId, prop::SatClause*> IdToSatClause;
-typedef context::CDHashSet<Node, NodeHashFunction> CDNodeSet;
-typedef context::CDHashMap<Node, std::vector<Node>, NodeHashFunction> CDNodeToNodes;
+typedef context::CDHashSet<Node> CDNodeSet;
+typedef context::CDHashMap<Node, std::vector<Node>> CDNodeToNodes;
 typedef std::unordered_set<ClauseId> IdHashSet;
 
 class ProofManager {
index 2d0b83c331f3328bfddbc7dc5887400f7e694bc9..9901fb18b37798557de24beb24c34b259ae08c9a 100644 (file)
@@ -75,8 +75,7 @@ class CnfStream {
       LiteralToNodeMap;
 
   /** Cache of what literals have been registered to a node. */
-  typedef context::CDInsertHashMap<Node, SatLiteral, NodeHashFunction>
-      NodeToLiteralMap;
+  typedef context::CDInsertHashMap<Node, SatLiteral> NodeToLiteralMap;
 
   /**
    * Constructs a CnfStream that performs equisatisfiable CNF transformations
@@ -223,7 +222,7 @@ class CnfStream {
   context::CDList<TNode> d_booleanVariables;
 
   /** Formulas that we translated that we are notifying */
-  context::CDHashSet<Node, NodeHashFunction> d_notifyFormulas;
+  context::CDHashSet<Node> d_notifyFormulas;
 
   /** Map from nodes to literals */
   NodeToLiteralMap d_nodeToLiteralMap;
index 5fdc0eb798bf33ddbf17d6bd100902f59c46aece..60a4c970464f275f95d6871f1d9c82cddeccc2ce 100644 (file)
@@ -330,8 +330,8 @@ void SatProofManager::processRedundantLit(
                      !negated);
 }
 
-void SatProofManager::explainLit(
-    SatLiteral lit, std::unordered_set<TNode, TNodeHashFunction>& premises)
+void SatProofManager::explainLit(SatLiteral lit,
+                                 std::unordered_set<TNode>& premises)
 {
   Trace("sat-proof") << push << "SatProofManager::explainLit: Lit: " << lit;
   Node litNode = getClauseNode(lit);
@@ -393,7 +393,7 @@ void SatProofManager::explainLit(
     {
       continue;
     }
-    std::unordered_set<TNode, TNodeHashFunction> childPremises;
+    std::unordered_set<TNode> childPremises;
     explainLit(~currLit, childPremises);
     // save to resolution chain premises / arguments
     Assert(d_cnfStream->getNodeCache().find(currLit)
@@ -462,7 +462,7 @@ void SatProofManager::finalizeProof(Node inConflictNode,
     Trace("sat-proof-debug2")
         << push << "SatProofManager::finalizeProof: saved proofs in chain:\n";
     std::map<Node, std::shared_ptr<ProofNode>> links = d_resChains.getLinks();
-    std::unordered_set<Node, NodeHashFunction> skip;
+    std::unordered_set<Node> skip;
     for (const std::pair<const Node, std::shared_ptr<ProofNode>>& link : links)
     {
       if (skip.count(link.first))
@@ -546,12 +546,12 @@ void SatProofManager::finalizeProof(Node inConflictNode,
   // we call explainLit on each ~l_i while accumulating the children and
   // arguments for the resolution step to conclude false.
   std::vector<Node> children{inConflictNode}, args;
-  std::unordered_set<TNode, TNodeHashFunction> premises;
+  std::unordered_set<TNode> premises;
   for (unsigned i = 0, size = inConflict.size(); i < size; ++i)
   {
     Assert(d_cnfStream->getNodeCache().find(inConflict[i])
            != d_cnfStream->getNodeCache().end());
-    std::unordered_set<TNode, TNodeHashFunction> childPremises;
+    std::unordered_set<TNode> childPremises;
     explainLit(~inConflict[i], childPremises);
     Node negatedLitNode = d_cnfStream->getNodeCache()[~inConflict[i]];
     // save to resolution chain premises / arguments
@@ -659,7 +659,7 @@ void SatProofManager::finalizeProof(Node inConflictNode,
       // mark another iteration for the loop, as some resolution link may be
       // connected because of the new justifications
       expanded = true;
-      std::unordered_set<TNode, TNodeHashFunction> childPremises;
+      std::unordered_set<TNode> childPremises;
       explainLit(it->second, childPremises);
       // add the premises used in the justification. We know they will have
       // been as expanded as possible
index 8f29239813d3711ed2d9bec4a7a18415bdc75115..a53f66cec0d7a7292c5856b7ad5612c5a6024ef7 100644 (file)
@@ -493,8 +493,7 @@ class SatProofManager
    * have been used as premises of resolution steps while explaining
    * propagations
    */
-  void explainLit(prop::SatLiteral lit,
-                  std::unordered_set<TNode, TNodeHashFunction>& premises);
+  void explainLit(prop::SatLiteral lit, std::unordered_set<TNode>& premises);
 
   /** Build refutation proof starting from conflict clause
    *
@@ -568,7 +567,7 @@ class SatProofManager
 
   /** All clauses added to the SAT solver, kept in a context-dependent manner.
    */
-  context::CDHashSet<Node, NodeHashFunction> d_assumptions;
+  context::CDHashSet<Node> d_assumptions;
 
   /**
    * A placeholder that may be used to store the literal with the final
index 873a748aeec8be0e029844eb7a60b65b344af445..5b51d730c798fd199905a834a5bf9af15d25214a 100644 (file)
@@ -52,7 +52,7 @@ void SkolemDefManager::notifyAsserted(TNode literal,
                                       std::vector<TNode>& activatedSkolems,
                                       bool useDefs)
 {
-  std::unordered_set<Node, NodeHashFunction> skolems;
+  std::unordered_set<Node> skolems;
   getSkolems(literal, skolems);
   for (const Node& k : skolems)
   {
@@ -90,8 +90,8 @@ typedef expr::Attribute<HasSkolemComputedTag, bool> HasSkolemComputedAttr;
 
 bool SkolemDefManager::hasSkolems(TNode n) const
 {
-  std::unordered_set<TNode, TNodeHashFunction> visited;
-  std::unordered_set<TNode, TNodeHashFunction>::iterator it;
+  std::unordered_set<TNode> visited;
+  std::unordered_set<TNode>::iterator it;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(n);
@@ -145,11 +145,11 @@ bool SkolemDefManager::hasSkolems(TNode n) const
   return n.getAttribute(HasSkolemAttr());
 }
 
-void SkolemDefManager::getSkolems(
-    TNode n, std::unordered_set<Node, NodeHashFunction>& skolems) const
+void SkolemDefManager::getSkolems(TNode n,
+                                  std::unordered_set<Node>& skolems) const
 {
-  std::unordered_set<TNode, TNodeHashFunction> visited;
-  std::unordered_set<TNode, TNodeHashFunction>::iterator it;
+  std::unordered_set<TNode> visited;
+  std::unordered_set<TNode>::iterator it;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(n);
index 475f40c8591fc0530af94e9a29322c3317104705..d3b59f895bdfb36cecaf9c3990dc155bc274f7de 100644 (file)
@@ -41,8 +41,8 @@ namespace prop {
  */
 class SkolemDefManager
 {
-  using NodeNodeMap = context::CDInsertHashMap<Node, Node, NodeHashFunction>;
-  using NodeSet = context::CDHashSet<Node, NodeHashFunction>;
+  using NodeNodeMap = context::CDInsertHashMap<Node, Node>;
+  using NodeSet = context::CDHashSet<Node>;
 
  public:
   SkolemDefManager(context::Context* context,
@@ -81,8 +81,7 @@ class SkolemDefManager
    * @param n The node to traverse
    * @param skolems The set where the skolems are added
    */
-  void getSkolems(TNode n,
-                  std::unordered_set<Node, NodeHashFunction>& skolems) const;
+  void getSkolems(TNode n, std::unordered_set<Node>& skolems) const;
   /** Does n have skolems having definitions managed by this class? */
   bool hasSkolems(TNode n) const;
 
index 090b44b90f068aa077322503248b791c244dd654..b764695cc2be1006ed805e52132bdd37aa2a075c 100644 (file)
@@ -217,7 +217,7 @@ void TheoryProxy::getSkolems(TNode node,
                              std::vector<Node>& skAsserts,
                              std::vector<Node>& sks)
 {
-  std::unordered_set<Node, NodeHashFunction> skolems;
+  std::unordered_set<Node> skolems;
   d_skdm->getSkolems(node, skolems);
   for (const Node& k : skolems)
   {
index bc834d20521f03fff9b979ec546b2c676fee9fd9..afd99ae839424056b0ffcfa9617a9952b502425b 100644 (file)
@@ -155,7 +155,7 @@ class TheoryProxy : public Registrar
    * Set of all lemmas that have been "shared" in the portfolio---i.e.,
    * all imported and exported lemmas.
    */
-  std::unordered_set<Node, NodeHashFunction> d_shared;
+  std::unordered_set<Node> d_shared;
 
   /** The theory preprocessor */
   theory::TheoryPreprocessor d_tpp;
index 1c9069ed086b5b3c329684c50a5de0a7c0e05e48..32cff93788a4d7be48f81cf114a412d56104d6cc 100644 (file)
@@ -34,7 +34,8 @@ namespace smt {
  */
 class AbstractValues
 {
-  typedef std::unordered_map<Node, Node, NodeHashFunction> NodeToNodeHashMap;
+  typedef std::unordered_map<Node, Node> NodeToNodeHashMap;
+
  public:
   AbstractValues(NodeManager* nm);
   ~AbstractValues();
index 3d542963567eafc678e4ae2f0aeec56a91aebdfd..0bc7ce99bdc9b755e571ccbe401ec1ac1796986e 100644 (file)
@@ -53,7 +53,7 @@ void CheckModels::checkModel(Model* m,
 
   theory::SubstitutionMap& sm = d_env.getTopLevelSubstitutions().get();
   Trace("check-model") << "checkModel: Check assertions..." << std::endl;
-  std::unordered_map<Node, Node, NodeHashFunction> cache;
+  std::unordered_map<Node, Node> cache;
   // the list of assertions that did not rewrite to true
   std::vector<Node> noCheckList;
   // Now go through all our user assertions checking if they're satisfied.
index 349736d1503e61f3e4f48b18f287799e263e7b58..91287e5f97f7f4fa17b5e5484d29114ee9dc41bf 100644 (file)
@@ -42,17 +42,16 @@ ExpandDefs::ExpandDefs(Env& env, SmtEngineStatistics& stats)
 
 ExpandDefs::~ExpandDefs() {}
 
-Node ExpandDefs::expandDefinitions(
-    TNode n, std::unordered_map<Node, Node, NodeHashFunction>& cache)
+Node ExpandDefs::expandDefinitions(TNode n,
+                                   std::unordered_map<Node, Node>& cache)
 {
   TrustNode trn = expandDefinitions(n, cache, nullptr);
   return trn.isNull() ? Node(n) : trn.getNode();
 }
 
-TrustNode ExpandDefs::expandDefinitions(
-    TNode n,
-    std::unordered_map<Node, Node, NodeHashFunction>& cache,
-    TConvProofGenerator* tpg)
+TrustNode ExpandDefs::expandDefinitions(TNode n,
+                                        std::unordered_map<Node, Node>& cache,
+                                        TConvProofGenerator* tpg)
 {
   const TNode orig = n;
   std::stack<std::tuple<Node, Node, bool>> worklist;
@@ -87,8 +86,7 @@ TrustNode ExpandDefs::expandDefinitions(
       }
 
       // maybe it's in the cache
-      std::unordered_map<Node, Node, NodeHashFunction>::iterator cacheHit =
-          cache.find(n);
+      std::unordered_map<Node, Node>::iterator cacheHit = cache.find(n);
       if (cacheHit != cache.end())
       {
         TNode ret = (*cacheHit).second;
index d4e591c3184eff3f18b0c0676854634a49f41a7c..801622e27a451618dbdc8a70d59c5f1ce0290c92 100644 (file)
@@ -51,8 +51,7 @@ class ExpandDefs
    * @param cache Cache of previous results
    * @return The expanded term.
    */
-  Node expandDefinitions(
-      TNode n, std::unordered_map<Node, Node, NodeHashFunction>& cache);
+  Node expandDefinitions(TNode n, std::unordered_map<Node, Node>& cache);
 
   /**
    * Set proof node manager, which signals this class to enable proofs using the
@@ -65,10 +64,9 @@ class ExpandDefs
    * Helper function for above, called to specify if we want proof production
    * based on the optional argument tpg.
    */
-  theory::TrustNode expandDefinitions(
-      TNode n,
-      std::unordered_map<Node, Node, NodeHashFunction>& cache,
-      TConvProofGenerator* tpg);
+  theory::TrustNode expandDefinitions(TNode n,
+                                      std::unordered_map<Node, Node>& cache,
+                                      TConvProofGenerator* tpg);
   /** Reference to the environment. */
   Env& d_env;
   /** Reference to the SMT stats */
index 04613f848b53101fd613843df5adc89eef1b2f50..cbc38833153dba89b428bfa5cc555de7863f69f9 100644 (file)
@@ -72,9 +72,9 @@ Node ModelBlocker::getModelBlocker(const std::vector<Node>& assertions,
     }
 
     Node formula = asserts.size() > 1 ? nm->mkNode(AND, asserts) : asserts[0];
-    std::unordered_map<TNode, Node, TNodeHashFunction> visited;
-    std::unordered_map<TNode, Node, TNodeHashFunction> implicant;
-    std::unordered_map<TNode, Node, TNodeHashFunction>::iterator it;
+    std::unordered_map<TNode, Node> visited;
+    std::unordered_map<TNode, Node> implicant;
+    std::unordered_map<TNode, Node>::iterator it;
     std::vector<TNode> visit;
     TNode cur;
     visit.push_back(formula);
@@ -235,7 +235,7 @@ Node ModelBlocker::getModelBlocker(const std::vector<Node>& assertions,
     {
       Trace("model-blocker")
           << "no specific terms to block recognized" << std::endl;
-      std::unordered_set<Node, NodeHashFunction> symbols;
+      std::unordered_set<Node> symbols;
       for (Node n : tlAsserts)
       {
         expr::getSymbols(n, symbols);
@@ -253,7 +253,7 @@ Node ModelBlocker::getModelBlocker(const std::vector<Node>& assertions,
     // otherwise, block all terms that were specified in get-value
     else
     {
-      std::unordered_set<Node, NodeHashFunction> terms;
+      std::unordered_set<Node> terms;
       for (Node n : nodesToBlock)
       {
         Node v = m->getValue(n);
index 5b6df3c1a8cbe8d718bfecb3671db4214f0059ea..0395a32fde501ba1d17c076cc6fd07bcdb7a193a 100644 (file)
@@ -41,7 +41,7 @@ bool ModelCoreBuilder::setModelCore(const std::vector<Node>& assertions,
   std::vector<Node> vars;
   std::vector<Node> subs;
   Trace("model-core") << "Assignments: " << std::endl;
-  std::unordered_set<TNode, TNodeHashFunction> visited;
+  std::unordered_set<TNode> visited;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(formula);
index ea5d28a2380574ca1d88d218bab5a95f89048087..3ae03e58f64c23dedcb7dc101a54e5b8be154b4c 100644 (file)
@@ -126,7 +126,7 @@ std::shared_ptr<ProofNode> PreprocessProofGenerator::getProofFor(Node f)
                     << ") input " << f << std::endl;
   Node curr = f;
   std::vector<Node> transChildren;
-  std::unordered_set<Node, NodeHashFunction> processed;
+  std::unordered_set<Node> processed;
   bool success;
   // we connect the proof of f to its source via the map d_src until we
   // discover that its source is a preprocessing lemma (a lemma stored in d_src)
index d1373a9d340e7bbb75cb4931d50593b66f3cd42d..140a7c91a085332da3f6519ea746cc46efdcdffb 100644 (file)
@@ -55,8 +55,7 @@ namespace smt {
  */
 class PreprocessProofGenerator : public ProofGenerator
 {
-  typedef context::CDHashMap<Node, theory::TrustNode, NodeHashFunction>
-      NodeTrustNodeMap;
+  typedef context::CDHashMap<Node, theory::TrustNode> NodeTrustNodeMap;
 
  public:
   /**
index a222568d321cb408bd25ce7fbd449aa45503fd03..7406b922efa280fe11a23586db3323443c327157 100644 (file)
@@ -112,12 +112,12 @@ void Preprocessor::cleanup() { d_processor.cleanup(); }
 
 Node Preprocessor::expandDefinitions(const Node& n)
 {
-  std::unordered_map<Node, Node, NodeHashFunction> cache;
+  std::unordered_map<Node, Node> cache;
   return expandDefinitions(n, cache);
 }
 
-Node Preprocessor::expandDefinitions(
-    const Node& node, std::unordered_map<Node, Node, NodeHashFunction>& cache)
+Node Preprocessor::expandDefinitions(const Node& node,
+                                     std::unordered_map<Node, Node>& cache)
 {
   Trace("smt") << "SMT expandDefinitions(" << node << ")" << endl;
   // Substitute out any abstract values in node.
index 4c60a28988f739eced17b7f974116e02ac6a5ff4..3a1f9f08066ba55fa371509c8fe8f93f28465678 100644 (file)
@@ -89,8 +89,7 @@ class Preprocessor
    */
   Node expandDefinitions(const Node& n);
   /** Same as above, with a cache of previous results. */
-  Node expandDefinitions(
-      const Node& n, std::unordered_map<Node, Node, NodeHashFunction>& cache);
+  Node expandDefinitions(const Node& n, std::unordered_map<Node, Node>& cache);
   /**
    * Set proof node manager. Enables proofs in this preprocessor.
    */
index 3cdf8a463541a2407fe240d09a02bec1e7e2a41e..80219eb3c89342a5010ba3bff5b2b35a3ca5aec7 100644 (file)
@@ -57,7 +57,7 @@ class ProcessAssertions
 {
   /** The types for the recursive function definitions */
   typedef context::CDList<Node> NodeList;
-  typedef std::unordered_map<Node, bool, NodeHashFunction> NodeToBoolHashMap;
+  typedef std::unordered_map<Node, bool> NodeToBoolHashMap;
 
  public:
   ProcessAssertions(SmtEngine& smt,
index b36b00bd582a7126caa3d2659afcf252bd06c500..618cdebacf865f0b6689b47b6930129b720cfa80 100644 (file)
@@ -166,7 +166,7 @@ Node ProofPostprocessCallback::eliminateCrowdingLits(
   // get crowding lits and the position of the last clause that includes
   // them. The factoring step must be added after the last inclusion and before
   // its elimination.
-  std::unordered_set<TNode, TNodeHashFunction> crowding;
+  std::unordered_set<TNode> crowding;
   std::vector<std::pair<Node, size_t>> lastInclusion;
   // positions of eliminators of crowding literals, which are the positions of
   // the clauses that eliminate crowding literals *after* their last inclusion
@@ -752,7 +752,7 @@ Node ProofPostprocessCallback::expandMacros(PfRule id,
       // We build it rather than taking conclusionLits because the order may be
       // different
       std::vector<Node> factoredLits;
-      std::unordered_set<TNode, TNodeHashFunction> clauseSet;
+      std::unordered_set<TNode> clauseSet;
       for (size_t i = 0, size = chainConclusionLits.size(); i < size; ++i)
       {
         if (clauseSet.count(chainConclusionLits[i]))
index 780ed78cef7779d05d5334fa7796899163bcba22..67273f8549275c78ce513416d1e8a1d74f4c1504 100644 (file)
@@ -1330,7 +1330,7 @@ std::vector<Node> SmtEngine::getExpandedAssertions()
   std::vector<Node> easserts = getAssertions();
   // must expand definitions
   std::vector<Node> eassertsProc;
-  std::unordered_map<Node, Node, NodeHashFunction> cache;
+  std::unordered_map<Node, Node> cache;
   for (const Node& e : easserts)
   {
     Node eae = d_pp->expandDefinitions(e, cache);
index 22316b872bc5bfb2fae422f7667b85d153a6ff03..924e3c9746a7f20bb7cb22aa3335f956cb764555 100644 (file)
@@ -37,7 +37,6 @@ template <bool ref_count> class NodeTemplate;
 typedef NodeTemplate<true> Node;
 typedef NodeTemplate<false> TNode;
 class TypeNode;
-struct NodeHashFunction;
 
 class Env;
 class NodeManager;
index 317bb2646bb7d778751a14abf45757e7f8d89b07..37d752230016c47c7eab9d96b4f75a032330a204 100644 (file)
@@ -285,7 +285,7 @@ void SygusSolver::checkSynthSolution(Assertions& as)
   }
   Trace("check-synth-sol") << "Got solution map:\n";
   // the set of synthesis conjectures in our assertions
-  std::unordered_set<Node, NodeHashFunction> conjs;
+  std::unordered_set<Node> conjs;
   // For each of the above conjectures, the functions-to-synthesis and their
   // solutions. This is used as a substitution below.
   std::map<Node, std::vector<Node>> fvarMap;
@@ -317,7 +317,7 @@ void SygusSolver::checkSynthSolution(Assertions& as)
   // auxiliary assertions
   std::vector<Node> auxAssertions;
   // expand definitions cache
-  std::unordered_map<Node, Node, NodeHashFunction> cache;
+  std::unordered_map<Node, Node> cache;
   for (Node assertion : *alist)
   {
     Notice() << "SygusSolver::checkSynthSolution(): checking assertion "
index 823511b02566e726305b9d13fab5ff887f33f50c..34ef53194b03c265a16b17848e91ffd4bf8285a2 100644 (file)
@@ -516,7 +516,7 @@ Node RemoveTermFormulas::runCurrent(std::pair<Node, uint32_t>& curr,
 
 Node RemoveTermFormulas::getSkolemForNode(Node k) const
 {
-  context::CDInsertHashMap<Node, Node, NodeHashFunction>::const_iterator itk =
+  context::CDInsertHashMap<Node, Node>::const_iterator itk =
       d_skolem_cache.find(k);
   if (itk != d_skolem_cache.end())
   {
index 1eeed5543f84a56c8dc1b88cff5b4123bf35337a..6a3a1c0197bdfccc3193cf7ad3211ebfe3fea379 100644 (file)
@@ -127,7 +127,7 @@ class RemoveTermFormulas {
   typedef context::CDInsertHashMap<
       std::pair<Node, uint32_t>,
       Node,
-      PairHashFunction<Node, uint32_t, NodeHashFunction> >
+      PairHashFunction<Node, uint32_t, std::hash<Node>>>
       TermFormulaCache;
   /** term formula removal cache
    *
@@ -155,7 +155,7 @@ class RemoveTermFormulas {
    *   d_skolem_cache[ite( G, a, b )] = k, and
    *   d_tfCache[<ite( G, a, b ),0>] = d_tfCache[<ite( G, a, b ),1>] = k.
    */
-  context::CDInsertHashMap<Node, Node, NodeHashFunction> d_skolem_cache;
+  context::CDInsertHashMap<Node, Node> d_skolem_cache;
 
   /** gets the skolem for node
    *
index c7e3d3280e216159db9ce4cb2a8dd7fdf5839dbc..8e998b9cf6b55219212e97a6db6ca7be000db133 100644 (file)
@@ -66,7 +66,7 @@ Node WitnessFormGenerator::convertToWitnessForm(Node t)
     // trivial case
     return tw;
   }
-  std::unordered_set<TNode, TNodeHashFunction>::iterator it;
+  std::unordered_set<TNode>::iterator it;
   std::vector<TNode> visit;
   TNode cur;
   TNode curw;
@@ -123,8 +123,7 @@ bool WitnessFormGenerator::requiresWitnessFormIntro(Node t) const
   return !tr.isConst() || !tr.getConst<bool>();
 }
 
-const std::unordered_set<Node, NodeHashFunction>&
-WitnessFormGenerator::getWitnessFormEqs() const
+const std::unordered_set<Node>& WitnessFormGenerator::getWitnessFormEqs() const
 {
   return d_eqs;
 }
index be1c4e534e414f7121d2f7ad9609548b4bebe80c..980cbcadbd9129ba7ae8d9320d35408bf79dd3f2 100644 (file)
@@ -72,7 +72,7 @@ class WitnessFormGenerator : public ProofGenerator
    * where k is a skolem, containing all rewrite steps used in calls to
    * getProofFor during the entire lifetime of this generator.
    */
-  const std::unordered_set<Node, NodeHashFunction>& getWitnessFormEqs() const;
+  const std::unordered_set<Node>& getWitnessFormEqs() const;
 
  private:
   /**
@@ -88,9 +88,9 @@ class WitnessFormGenerator : public ProofGenerator
   /** The term conversion proof generator */
   TConvProofGenerator d_tcpg;
   /** The nodes we have already added rewrite steps for in d_tcpg */
-  std::unordered_set<TNode, TNodeHashFunction> d_visited;
+  std::unordered_set<TNode> d_visited;
   /** The set of equalities added as proof steps */
-  std::unordered_set<Node, NodeHashFunction> d_eqs;
+  std::unordered_set<Node> d_eqs;
   /** Lazy proof storing witness intro steps */
   LazyCDProof d_wintroPf;
   /** CDProof for justifying purification existentials */
index b1a5ef2d800d64b5c1a241ccb8fd0ca872092d4a..7af0f95a06eba1abd2cce66edcea99ff62e13f1e 100644 (file)
@@ -49,7 +49,7 @@ private:
   Node case_assoccomm(TNode n);
   Node case_other(TNode n);
 
-  typedef std::unordered_map<Node, Node, NodeHashFunction> NodeMap;
+  typedef std::unordered_map<Node, Node> NodeMap;
   NodeMap d_cache;
 };/* class RePairAssocCommutativeOperators */
 
index 4d181b39fefeb76289dc4757c7cb653ddbee5895..ed7f541821bd5bff8206a38645d96b159dd01411 100644 (file)
@@ -48,7 +48,7 @@ class ArithIteUtils {
   SubstitutionMap* d_subs;
   TheoryModel* d_model;
 
-  typedef std::unordered_map<Node, Node, NodeHashFunction> NodeMap;
+  typedef std::unordered_map<Node, Node> NodeMap;
   // cache for reduce vars
   NodeMap d_reduceVar; // if reduceVars[n].isNull(), treat reduceVars[n] == n
 
@@ -58,13 +58,13 @@ class ArithIteUtils {
 
 
   NodeMap d_reduceGcd;
-  typedef std::unordered_map<Node, Integer, NodeHashFunction> NodeIntegerMap;
+  typedef std::unordered_map<Node, Integer> NodeIntegerMap;
   NodeIntegerMap d_gcds;
 
   Integer d_one;
 
   context::CDO<unsigned> d_subcount;
-  typedef context::CDInsertHashMap<Node, Node, NodeHashFunction> CDNodeMap;
+  typedef context::CDInsertHashMap<Node, Node> CDNodeMap;
   CDNodeMap d_skolems;
 
   typedef std::map<Node, std::set<Node> > ImpMap;
index d5533de24f12fa949eb5e7ae72314d15152b0a33..6ab39934870cb9f7496b56a8a92d99720e954511 100644 (file)
@@ -39,8 +39,7 @@ TrustNode ArithPreprocess::eliminate(TNode n,
 
 bool ArithPreprocess::reduceAssertion(TNode atom)
 {
-  context::CDHashMap<Node, bool, NodeHashFunction>::const_iterator it =
-      d_reduced.find(atom);
+  context::CDHashMap<Node, bool>::const_iterator it = d_reduced.find(atom);
   if (it != d_reduced.end())
   {
     // already computed
@@ -70,8 +69,7 @@ bool ArithPreprocess::reduceAssertion(TNode atom)
 
 bool ArithPreprocess::isReduced(TNode atom) const
 {
-  context::CDHashMap<Node, bool, NodeHashFunction>::const_iterator it =
-      d_reduced.find(atom);
+  context::CDHashMap<Node, bool>::const_iterator it = d_reduced.find(atom);
   if (it == d_reduced.end())
   {
     return false;
index 63b4515e7b80f109e70ff629f9e59772843fa0aa..a537c33c70ca69b6016405f953c46315fa10c54f 100644 (file)
@@ -83,7 +83,7 @@ class ArithPreprocess
   /** The operator elimination utility */
   OperatorElim& d_opElim;
   /** The set of assertions that were reduced */
-  context::CDHashMap<Node, bool, NodeHashFunction> d_reduced;
+  context::CDHashMap<Node, bool> d_reduced;
 };
 
 }  // namespace arith
index 7ff674b2583cc68b99884b767de62686752ec360..7c6bfc47bd51c79be39af91eb1e8589affb2aed3 100644 (file)
@@ -39,9 +39,9 @@ private:
   /**
    * Map from a node to it's minimum and maximum.
    */
 typedef context::CDHashMap<Node, DeltaRational, NodeHashFunction> CDNodeToMinMaxMap;
 CDNodeToMinMaxMap d_minMap;
 CDNodeToMinMaxMap d_maxMap;
typedef context::CDHashMap<Node, DeltaRational> CDNodeToMinMaxMap;
+ CDNodeToMinMaxMap d_minMap;
+ CDNodeToMinMaxMap d_maxMap;
 
 public:
   ArithStaticLearner(context::Context* userContext);
index 81968fc13483a5bf3eb94159b05399acda914dd0..75edc49f59eaf05dba6ca754b71dd78844ae1302 100644 (file)
@@ -207,8 +207,8 @@ Node arithSubstitute(Node n, std::vector<Node>& vars, std::vector<Node>& subs)
 {
   Assert(vars.size() == subs.size());
   NodeManager* nm = NodeManager::currentNM();
-  std::unordered_map<TNode, Node, TNodeHashFunction> visited;
-  std::unordered_map<TNode, Node, TNodeHashFunction>::iterator it;
+  std::unordered_map<TNode, Node> visited;
+  std::unordered_map<TNode, Node>::iterator it;
   std::vector<Node>::iterator itv;
   std::vector<TNode> visit;
   TNode cur;
index 0c6378bc20eef63334e664b54a478fb09479fd74..6617fccb07aa0ef7ad9f10c75fa7073171360636 100644 (file)
@@ -34,12 +34,12 @@ namespace theory {
 namespace arith {
 
 //Sets of Nodes
-typedef std::unordered_set<Node, NodeHashFunction> NodeSet;
-typedef std::unordered_set<TNode, TNodeHashFunction> TNodeSet;
-typedef context::CDHashSet<Node, NodeHashFunction> CDNodeSet;
+typedef std::unordered_set<Node> NodeSet;
+typedef std::unordered_set<TNode> TNodeSet;
+typedef context::CDHashSet<Node> CDNodeSet;
 
 //Maps from Nodes -> ArithVars, and vice versa
-typedef std::unordered_map<Node, ArithVar, NodeHashFunction> NodeToArithVarMap;
+typedef std::unordered_map<Node, ArithVar> NodeToArithVarMap;
 typedef DenseMap<Node> ArithVarToNodeMap;
 
 inline Node mkRationalNode(const Rational& q){
index 6032adcc8ecd31d3ff2b2b83408feb773930af35..e45b7bf29c3a05a176fe5a6216408ffc4f9f7e9d 100644 (file)
@@ -101,7 +101,7 @@ private:
    * This is node is potentially both the propagation or
    * Rewriter::rewrite(propagation).
    */
-  typedef context::CDHashMap<Node, size_t, NodeHashFunction> ExplainMap;
+  typedef context::CDHashMap<Node, size_t> ExplainMap;
   ExplainMap d_explanationMap;
 
   ConstraintDatabase& d_constraintDatabase;
index ecd5b10fbe5a9abc6d31f36810996966c514d473..0d3c96f895f4b13eb2012f9c11d73968d9549903 100644 (file)
@@ -156,7 +156,7 @@ enum ConstraintType {LowerBound, Equality, UpperBound, Disequality};
 
 typedef context::CDList<ConstraintCP> CDConstraintList;
 
-typedef std::unordered_map<Node, ConstraintP, NodeHashFunction> NodetoConstraintMap;
+typedef std::unordered_map<Node, ConstraintP> NodetoConstraintMap;
 
 typedef size_t ConstraintRuleID;
 static const ConstraintRuleID ConstraintRuleIdSentinel = std::numeric_limits<ConstraintRuleID>::max();
index 1cd092abc7cfc73efc28151c8d1505c07173351a..19bd2f2bf993c7773f80e905c4feee4eda5e45c4 100644 (file)
@@ -294,7 +294,7 @@ bool DioSolver::queueEmpty() const{
 }
 
 Node DioSolver::columnGcdIsOne() const{
-  std::unordered_map<Node, Integer, NodeHashFunction> gcdMap;
+  std::unordered_map<Node, Integer> gcdMap;
 
   std::deque<TrailIndex>::const_iterator iter, end;
   for(iter = d_currentF.begin(), end = d_currentF.end(); iter != end; ++iter){
index 0fac563bb0ccdf25b96a3de02eff16290ee4c834..8f24110368df27e31607f78039a788396eab14b8 100644 (file)
@@ -68,7 +68,8 @@ private:
    * We maintain a map from the variables associated with proofs to an input constraint.
    * These variables can then be used in polynomial manipulations.
    */
-  typedef std::unordered_map<Node, InputConstraintIndex, NodeHashFunction> NodeToInputConstraintIndexMap;
+  typedef std::unordered_map<Node, InputConstraintIndex>
+      NodeToInputConstraintIndexMap;
   NodeToInputConstraintIndexMap d_varToInputConstraintMap;
 
   Node proofVariableToReason(const Variable& v) const{
index 287b89851b87a23d32c07de2c16006beea342666..7e103797e21bcfa6a1af8877bad42bf9fd8ff2a0 100644 (file)
@@ -43,7 +43,7 @@ class TheoryArith;
  */
 class InferenceManager : public InferenceManagerBuffered
 {
-  using NodeSet = context::CDHashSet<Node, NodeHashFunction>;
+  using NodeSet = context::CDHashSet<Node>;
 
  public:
   InferenceManager(TheoryArith& ta, ArithState& astate, ProofNodeManager* pnm);
index b2279344dc217c42b1ec9a5c574db31e57b4a0b5..b0a4fd859b655892736524671f1c9d94016cc301 100644 (file)
@@ -86,7 +86,7 @@ struct ExtState
   // ( x*y, x*z, y ) for each pair of monomials ( x*y, x*z ) with common factors
   std::map<Node, std::map<Node, Node> > d_mono_diff;
   /** the set of monomials we should apply tangent planes to */
-  std::unordered_set<Node, NodeHashFunction> d_tplane_refine;
+  std::unordered_set<Node> d_tplane_refine;
 };
 
 }  // namespace nl
index 6df35c71dede1468586fe5c95b0ae00b6223756a..404916453d6957aaba1cd180a57dfa5fd045f7fd 100644 (file)
@@ -238,7 +238,7 @@ void MonomialCheck::checkMagnitude(unsigned c)
   Trace("nl-ext-comp") << "Compute redundancies for " << lemmas.size()
                        << " lemmas." << std::endl;
   // naive
-  std::unordered_set<Node, NodeHashFunction> r_lemmas;
+  std::unordered_set<Node> r_lemmas;
   for (std::map<int, std::map<Node, std::map<Node, Node> > >::iterator itb =
            cmp_infers.begin();
        itb != cmp_infers.end();
index b42c7932d5e31c9d462e23fe22a583e983b74b07..c50737d519065c3c80d0bda6b223b4e09a4af180 100644 (file)
@@ -40,7 +40,7 @@ class SplitZeroCheck
   void check();
 
  private:
-  using NodeSet = context::CDHashSet<Node, NodeHashFunction>;
+  using NodeSet = context::CDHashSet<Node>;
 
   /** Basic data that is shared with other checks */
   ExtState* d_data;
index 67639047893701c3527d1cae769031aa2311a68e..c80edbeb312a9118a094c3193d875c375e978450 100644 (file)
@@ -39,7 +39,7 @@ class NlModel;
  */
 class IAndSolver
 {
-  typedef context::CDHashSet<Node, NodeHashFunction> NodeSet;
+  typedef context::CDHashSet<Node> NodeSet;
 
  public:
   IAndSolver(InferenceManager& im, ArithState& state, NlModel& model);
index 6e96cfe7b91d6b96204ccfcc2494e66c7d27e209..9cd74883b5e21bea5d20070fe9150b40465e520d 100644 (file)
@@ -67,7 +67,7 @@ inline std::ostream& operator<<(std::ostream& os, const IAWrapper& iaw)
 
 std::vector<Node> ICPSolver::collectVariables(const Node& n) const
 {
-  std::unordered_set<TNode, TNodeHashFunction> tmp;
+  std::unordered_set<TNode> tmp;
   expr::getVariables(n, tmp);
   std::vector<Node> res;
   for (const auto& t : tmp)
@@ -93,7 +93,7 @@ std::vector<Candidate> ICPSolver::constructCandidates(const Node& n)
   auto poly = std::get<0>(comp);
 
   std::vector<Candidate> result;
-  std::unordered_set<TNode, TNodeHashFunction> vars;
+  std::unordered_set<TNode> vars;
   expr::getVariables(n, vars);
   for (const auto& v : vars)
   {
index 9b1246f67448e783f065aba61ffb80663cc6aea1..ed4a5318f291f8b5254aa0e85b5dd149135b103e 100644 (file)
@@ -242,7 +242,7 @@ bool NlModel::checkModel(const std::vector<Node>& assertions,
   // all remaining variables are constrained to their exact model values
   Trace("nl-ext-cm-debug") << "  set exact bounds for remaining variables..."
                            << std::endl;
-  std::unordered_set<TNode, TNodeHashFunction> visited;
+  std::unordered_set<TNode> visited;
   std::vector<TNode> visit;
   TNode cur;
   for (const Node& a : assertions)
@@ -479,10 +479,10 @@ bool NlModel::solveEqualitySimple(Node eq,
   NodeManager* nm = NodeManager::currentNM();
   // the list of variables that occur as a monomial in msum, and whose value
   // is so far unconstrained in the model.
-  std::unordered_set<Node, NodeHashFunction> unc_vars;
+  std::unordered_set<Node> unc_vars;
   // the list of variables that occur as a factor in a monomial, and whose
   // value is so far unconstrained in the model.
-  std::unordered_set<Node, NodeHashFunction> unc_vars_factor;
+  std::unordered_set<Node> unc_vars_factor;
   for (std::pair<const Node, Node>& m : msum)
   {
     Node v = m.first;
@@ -797,7 +797,7 @@ bool NlModel::simpleCheckModelLit(Node lit)
   Trace("nl-ext-cms-debug")
       << "* Try univariate quadratic analysis..." << std::endl;
   std::vector<Node> vs_invalid;
-  std::unordered_set<Node, NodeHashFunction> vs;
+  std::unordered_set<Node> vs;
   std::map<Node, Node> v_a;
   std::map<Node, Node> v_b;
   // get coefficients...
index 600dbd02c2ffc4c21f05fc2212edf81a1bff8faa..acf5ee7f5405319d72c02124299140285d69801f 100644 (file)
@@ -322,7 +322,7 @@ class NlModel
    * These literals are exempt from check-model, since they are satisfied by
    * definition of our model construction.
    */
-  std::unordered_map<Node, Node, NodeHashFunction> d_check_model_solved;
+  std::unordered_map<Node, Node> d_check_model_solved;
   /** did we use an approximation on this call to last-call effort? */
   bool d_used_approx;
 }; /* class NlModel */
index a3b32c6e98e425867e934d86b8303674ed1eccf6..8221e18d5a96670b6065719249e80c00c8ede785 100644 (file)
@@ -123,7 +123,7 @@ void NonlinearExtension::getAssertions(std::vector<Node>& assertions)
 
   BoundInference bounds;
 
-  std::unordered_set<Node, NodeHashFunction> init_assertions;
+  std::unordered_set<Node> init_assertions;
 
   for (Theory::assertions_iterator it = d_containing.facts_begin();
        it != d_containing.facts_end();
index e39f97402f37c1d495e269375dace9164717df38..4e029be7c938e9b6fddbf80c90fae38994736974 100644 (file)
@@ -80,7 +80,7 @@ class NlLemma;
  */
 class NonlinearExtension
 {
-  typedef context::CDHashSet<Node, NodeHashFunction> NodeSet;
+  typedef context::CDHashSet<Node> NodeSet;
 
  public:
   NonlinearExtension(TheoryArith& containing,
index 62d101686a20777e73708187732acd4e5a39fb10..0d5e5ad04a58a3ec9072dbf19d216a23651f754a 100644 (file)
@@ -291,8 +291,7 @@ bool TranscendentalSolver::checkTfTangentPlanesFun(Node tf, unsigned d)
 
   // compute the concavity
   int region = -1;
-  std::unordered_map<Node, int, NodeHashFunction>::iterator itr =
-      d_tstate.d_tf_region.find(tf);
+  std::unordered_map<Node, int>::iterator itr = d_tstate.d_tf_region.find(tf);
   if (itr != d_tstate.d_tf_region.end())
   {
     region = itr->second;
index f98986fad932f07ff6fcdf171cd045ca4d2181a1..74f0052944a8805d600d94c4594a05336df49d1f 100644 (file)
@@ -201,7 +201,7 @@ struct TranscendentalState
    * arguments that contain transcendental functions.
    */
   std::map<Node, Node> d_trMaster;
-  std::map<Node, std::unordered_set<Node, NodeHashFunction>> d_trSlaves;
+  std::map<Node, std::unordered_set<Node>> d_trSlaves;
 
   /** concavity region for transcendental functions
    *
@@ -223,7 +223,7 @@ struct TranscendentalState
    * of transcendental functions whose arguments have model
    * values that reside in valid regions.
    */
-  std::unordered_map<Node, int, NodeHashFunction> d_tf_region;
+  std::unordered_map<Node, int> d_tf_region;
   /**
    * Maps representives of a congruence class to the members of that class.
    *
@@ -253,9 +253,7 @@ struct TranscendentalState
    * each transcendental function application. We store this set for each
    * Taylor degree.
    */
-  std::unordered_map<Node,
-                     std::map<unsigned, std::vector<Node>>,
-                     NodeHashFunction>
+  std::unordered_map<Node, std::map<unsigned, std::vector<Node>>>
       d_secant_points;
 
   /** PI
index ce8e2393b657ef35e977f07053dbcc4827b130ff..508362158ce9c4f007d4e2e820a8a20db43ee093 100644 (file)
@@ -3975,7 +3975,7 @@ void TheoryArithPrivate::collectModelValues(const std::set<Node>& termSet,
 
   // Delta lasts at least the duration of the function call
   const Rational& delta = d_partialModel.getDelta();
-  std::unordered_set<TNode, TNodeHashFunction> shared = d_containing.currentlySharedTerms();
+  std::unordered_set<TNode> shared = d_containing.currentlySharedTerms();
 
   // TODO:
   // This is not very good for user push/pop....
@@ -4446,7 +4446,7 @@ bool TheoryArithPrivate::tryToPropagate(RowIndex ridx, bool rowUp, ArithVar v, b
 
 Node flattenImplication(Node imp){
   NodeBuilder nb(kind::OR);
-  std::unordered_set<Node, NodeHashFunction> included;
+  std::unordered_set<Node> included;
   Node left = imp[0];
   Node right = imp[1];
 
index e234511675be2a787e83b2dd3101f35ceb8f5242..e029e3c418ce5cc7606d1e0f661ec2201acd38f3 100644 (file)
@@ -193,8 +193,8 @@ private:
    * A superset of all of the assertions that currently are not the literal for
    * their constraint do not match constraint literals. Not just the witnesses.
    */
-  context::CDInsertHashMap<Node, ConstraintP, NodeHashFunction> d_assertionsThatDoNotMatchTheirLiterals;
-
+  context::CDInsertHashMap<Node, ConstraintP>
+      d_assertionsThatDoNotMatchTheirLiterals;
 
   /** Returns true if x is of type Integer. */
   inline bool isInteger(ArithVar x) const {
@@ -267,8 +267,7 @@ private:
   /**
    * Contains all nodes that have been preregistered
    */
-  context::CDHashSet<Node, NodeHashFunction> d_preregisteredNodes;
-
+  context::CDHashSet<Node> d_preregisteredNodes;
 
   /**
    * Manages information about the assignment and upper and lower bounds on
index 15f27eb96cfbe5cf3ba2bce2eecf2d16011d0000..42c6e7387048cc147ee0ef4ec8ed2830ff960871 100644 (file)
@@ -86,8 +86,7 @@ public:
   }
 };/* class Info */
 
-
-typedef std::unordered_map<Node, Info*, NodeHashFunction> CNodeInfoMap;
+typedef std::unordered_map<Node, Info*> CNodeInfoMap;
 
 /**
  * Class keeping track of the following information for canonical
index e887feccbe5d7d57970ba604acfcee8c3b703779..9b5676d65f8003f94518951d76618d3fa3a4e3a1 100644 (file)
@@ -551,7 +551,7 @@ void TheoryArrays::weakEquivMakeRepIndex(TNode node) {
 }
 
 void TheoryArrays::weakEquivAddSecondary(TNode index, TNode arrayFrom, TNode arrayTo, TNode reason) {
-  std::unordered_set<TNode, TNodeHashFunction> marked;
+  std::unordered_set<TNode> marked;
   vector<TNode> index_trail;
   vector<TNode>::iterator it, iend;
   Node equivalence_trail = reason;
@@ -1043,7 +1043,8 @@ bool TheoryArrays::collectModelValues(TheoryModel* m,
   std::vector<Node> arrays;
 
   eq::EqClassesIterator eqcs_i = eq::EqClassesIterator(d_equalityEngine);
-  for (; !eqcs_i.isFinished(); ++eqcs_i) {
+  for (; !eqcs_i.isFinished(); ++eqcs_i)
+  {
     Node eqc = (*eqcs_i);
     if (!eqc.getType().isArray())
     {
@@ -1051,9 +1052,11 @@ bool TheoryArrays::collectModelValues(TheoryModel* m,
       continue;
     }
     eq::EqClassIterator eqc_i = eq::EqClassIterator(eqc, d_equalityEngine);
-    for (; !eqc_i.isFinished(); ++eqc_i) {
+    for (; !eqc_i.isFinished(); ++eqc_i)
+    {
       Node n = *eqc_i;
-      // If this EC is an array type and it contains something other than STORE nodes, we have to compute a representative explicitly
+      // If this EC is an array type and it contains something other than STORE
+      // nodes, we have to compute a representative explicitly
       if (termSet.find(n) != termSet.end())
       {
         if (n.getKind() != kind::STORE)
@@ -1068,10 +1071,13 @@ bool TheoryArrays::collectModelValues(TheoryModel* m,
   // Build a list of all the relevant reads, indexed by the store representative
   std::map<Node, std::vector<Node> > selects;
   set<Node>::iterator set_it = termSet.begin(), set_it_end = termSet.end();
-  for (; set_it != set_it_end; ++set_it) {
+  for (; set_it != set_it_end; ++set_it)
+  {
     Node n = *set_it;
-    // If this term is a select, record that the EC rep of its store parameter is being read from using this term
-    if (n.getKind() == kind::SELECT) {
+    // If this term is a select, record that the EC rep of its store parameter
+    // is being read from using this term
+    if (n.getKind() == kind::SELECT)
+    {
       selects[d_equalityEngine->getRepresentative(n[0])].push_back(n);
     }
   }
@@ -1081,71 +1087,82 @@ bool TheoryArrays::collectModelValues(TheoryModel* m,
   TypeSet defaultValuesSet;
 
   // Compute all default values already in use
-  //if (fullModel) {
-    for (size_t i=0; i<arrays.size(); ++i) {
-      TNode nrep = d_equalityEngine->getRepresentative(arrays[i]);
-      d_mayEqualEqualityEngine.addTerm(nrep); // add the term in case it isn't there already
-      TNode mayRep = d_mayEqualEqualityEngine.getRepresentative(nrep);
-      it = d_defValues.find(mayRep);
-      if (it != d_defValues.end()) {
-        defaultValuesSet.add(nrep.getType().getArrayConstituentType(), (*it).second);
-      }
+  // if (fullModel) {
+  for (size_t i = 0; i < arrays.size(); ++i)
+  {
+    TNode nrep = d_equalityEngine->getRepresentative(arrays[i]);
+    d_mayEqualEqualityEngine.addTerm(
+        nrep);  // add the term in case it isn't there already
+    TNode mayRep = d_mayEqualEqualityEngine.getRepresentative(nrep);
+    it = d_defValues.find(mayRep);
+    if (it != d_defValues.end())
+    {
+      defaultValuesSet.add(nrep.getType().getArrayConstituentType(),
+                           (*it).second);
     }
+  }
   //}
 
-  // Loop through all array equivalence classes that need a representative computed
-    for (size_t i = 0; i < arrays.size(); ++i)
+  // Loop through all array equivalence classes that need a representative
+  // computed
+  for (size_t i = 0; i < arrays.size(); ++i)
+  {
+    TNode n = arrays[i];
+    TNode nrep = d_equalityEngine->getRepresentative(n);
+
+    // if (fullModel) {
+    // Compute default value for this array - there is one default value for
+    // every mayEqual equivalence class
+    TNode mayRep = d_mayEqualEqualityEngine.getRepresentative(nrep);
+    it = d_defValues.find(mayRep);
+    // If this mayEqual EC doesn't have a default value associated, get the next
+    // available default value for the associated array element type
+    if (it == d_defValues.end())
     {
-      TNode n = arrays[i];
-      TNode nrep = d_equalityEngine->getRepresentative(n);
-
-      // if (fullModel) {
-      // Compute default value for this array - there is one default value for
-      // every mayEqual equivalence class
-      TNode mayRep = d_mayEqualEqualityEngine.getRepresentative(nrep);
-      it = d_defValues.find(mayRep);
-      // If this mayEqual EC doesn't have a default value associated, get the next available default value for the associated array element type
-      if (it == d_defValues.end()) {
-        TypeNode valueType = nrep.getType().getArrayConstituentType();
-        rep = defaultValuesSet.nextTypeEnum(valueType);
-        if (rep.isNull()) {
-          Assert(defaultValuesSet.getSet(valueType)->begin()
-                 != defaultValuesSet.getSet(valueType)->end());
-          rep = *(defaultValuesSet.getSet(valueType)->begin());
-        }
-        Trace("arrays-models") << "New default value = " << rep << endl;
-        d_defValues[mayRep] = rep;
-      }
-      else {
-        rep = (*it).second;
+      TypeNode valueType = nrep.getType().getArrayConstituentType();
+      rep = defaultValuesSet.nextTypeEnum(valueType);
+      if (rep.isNull())
+      {
+        Assert(defaultValuesSet.getSet(valueType)->begin()
+               != defaultValuesSet.getSet(valueType)->end());
+        rep = *(defaultValuesSet.getSet(valueType)->begin());
       }
+      Trace("arrays-models") << "New default value = " << rep << endl;
+      d_defValues[mayRep] = rep;
+    }
+    else
+    {
+      rep = (*it).second;
+    }
 
-      // Build the STORE_ALL term with the default value
-      rep = nm->mkConst(ArrayStoreAll(nrep.getType(), rep));
-      /*
+    // Build the STORE_ALL term with the default value
+    rep = nm->mkConst(ArrayStoreAll(nrep.getType(), rep));
+    /*
+  }
+  else {
+    std::unordered_map<Node, Node>::iterator it = d_skolemCache.find(n);
+    if (it == d_skolemCache.end()) {
+      rep = nm->mkSkolem("array_collect_model_var", n.getType(), "base model
+  variable for array collectModelInfo"); d_skolemCache[n] = rep;
     }
     else {
-      std::unordered_map<Node, Node, NodeHashFunction>::iterator it = d_skolemCache.find(n);
-      if (it == d_skolemCache.end()) {
-        rep = nm->mkSkolem("array_collect_model_var", n.getType(), "base model variable for array collectModelInfo");
-        d_skolemCache[n] = rep;
-      }
-      else {
-        rep = (*it).second;
-      }
+      rep = (*it).second;
     }
+  }
 */
 
     // For each read, require that the rep stores the right value
     vector<Node>& reads = selects[nrep];
-    for (unsigned j = 0; j < reads.size(); ++j) {
+    for (unsigned j = 0; j < reads.size(); ++j)
+    {
       rep = nm->mkNode(kind::STORE, rep, reads[j][1], reads[j]);
     }
     if (!m->assertEquality(n, rep, true))
     {
       return false;
     }
-    if (!n.isConst()) {
+    if (!n.isConst())
+    {
       m->assertSkeleton(rep);
     }
   }
@@ -1181,7 +1198,7 @@ Node TheoryArrays::getSkolem(TNode ref)
   // the call to SkolemCache::getExtIndexSkolem should be deterministic, but use
   // cache anyways for now
   Node skolem;
-  std::unordered_map<Node, Node, NodeHashFunction>::iterator it = d_skolemCache.find(ref);
+  std::unordered_map<Node, Node>::iterator it = d_skolemCache.find(ref);
   if (it == d_skolemCache.end()) {
     Assert(ref.getKind() == kind::NOT && ref[0].getKind() == kind::EQUAL);
     // make the skolem using the skolem cache utility
index f9813cd3f563de9b082ddbc57a2c7e2529118da3..c85b382e4d259c4672b8401f8786d4e4393ce499 100644 (file)
@@ -215,7 +215,7 @@ class TheoryArrays : public Theory {
   void explain(TNode literal, Node& exp);
 
   /** For debugging only- checks invariants about when things are preregistered*/
-  context::CDHashSet<Node, NodeHashFunction > d_isPreRegistered;
+  context::CDHashSet<Node> d_isPreRegistered;
 
   /** Helper for preRegisterTerm, also used internally */
   void preRegisterTermInternal(TNode n);
@@ -374,7 +374,7 @@ class TheoryArrays : public Theory {
   context::CDQueue<RowLemmaType> d_RowQueue;
   context::CDHashSet<RowLemmaType, RowLemmaTypeHashFunction > d_RowAlreadyAdded;
 
-  typedef context::CDHashSet<Node, NodeHashFunction> CDNodeSet;
+  typedef context::CDHashSet<Node> CDNodeSet;
 
   CDNodeSet d_sharedArrays;
   CDNodeSet d_sharedOther;
@@ -384,7 +384,7 @@ class TheoryArrays : public Theory {
   // When a new read term is created, we check the index to see if we know the model value.  If so, we add it to d_constReads (and d_constReadsList)
   // If not, we push it onto d_reads and figure out where it goes at computeCareGraph time.
   // d_constReadsList is used as a backup in case we can't compute the model at computeCareGraph time.
-  typedef std::unordered_map<Node, CTNodeList*, NodeHashFunction> CNodeNListMap;
+  typedef std::unordered_map<Node, CTNodeList*> CNodeNListMap;
   CNodeNListMap d_constReads;
   context::CDList<TNode> d_reads;
   context::CDList<TNode> d_constReadsList;
@@ -410,7 +410,7 @@ class TheoryArrays : public Theory {
   };/* class ContextPopper */
   ContextPopper d_contextPopper;
 
-  std::unordered_map<Node, Node, NodeHashFunction> d_skolemCache;
+  std::unordered_map<Node, Node> d_skolemCache;
   context::CDO<unsigned> d_skolemIndex;
   std::vector<Node> d_skolemAssertions;
 
@@ -420,11 +420,11 @@ class TheoryArrays : public Theory {
   // List of nodes that need permanent references in this context
   context::CDList<Node> d_permRef;
   context::CDList<Node> d_modelConstraints;
-  context::CDHashSet<Node, NodeHashFunction > d_lemmasSaved;
+  context::CDHashSet<Node> d_lemmasSaved;
   std::vector<Node> d_lemmas;
 
   // Default values for each mayEqual equivalence class
-  typedef context::CDHashMap<Node,Node,NodeHashFunction> DefValMap;
+  typedef context::CDHashMap<Node, Node> DefValMap;
   DefValMap d_defValues;
 
   typedef std::unordered_map<std::pair<TNode, TNode>, CTNodeList*, TNodePairHashFunction> ReadBucketMap;
index 6269cb5ddad903dbd152752dca3241080aa236c6..8ad7a5f95e6047ea685c993638e99e2f30111669 100644 (file)
@@ -177,9 +177,9 @@ Node TheoryArraysRewriter::normalizeConstant(TNode node, Cardinality indexCard)
   // Bad case: have to recompute value counts and/or possibly switch out
   // default value
   store = n;
-  std::unordered_set<TNode, TNodeHashFunction> indexSet;
-  std::unordered_map<TNode, uint32_t, TNodeHashFunction> elementsMap;
-  std::unordered_map<TNode, uint32_t, TNodeHashFunction>::iterator it;
+  std::unordered_set<TNode> indexSet;
+  std::unordered_map<TNode, uint32_t> elementsMap;
+  std::unordered_map<TNode, uint32_t>::iterator it;
   uint32_t count;
   uint32_t max = 0;
   TNode maxValue;
index 19ae573d852d4c69ba4297ced10efcae765d547f..5abc752d677e90a556abf2530a75921466a2a7c4 100644 (file)
@@ -45,9 +45,9 @@ void UnionFind<NodeType, NodeHash>::notify() {
 // The following declarations allow us to put functions in the .cpp file
 // instead of the header, since we know which instantiations are needed.
 
-template void UnionFind<Node, NodeHashFunction>::notify();
+template void UnionFind<Node, std::hash<Node>>::notify();
 
-template void UnionFind<TNode, TNodeHashFunction>::notify();
+template void UnionFind<TNode, std::hash<TNode>>::notify();
 
 }  // namespace arrays
 }  // namespace theory
index 0d2bf0bb44051c9b71e0eddc020c72c951b22d65..63d66f200bff32f00cfc54e04677b2efd244d98b 100644 (file)
@@ -105,7 +105,7 @@ private:
   /** We index the requests in this vector, it's a list */
   context::CDList<Element> d_requests;
 
-  typedef context::CDHashMap<Node, element_index, NodeHashFunction> trigger_to_list_map;
+  typedef context::CDHashMap<Node, element_index> trigger_to_list_map;
 
   /** Map from triggers, to the list of elements they trigger */
   trigger_to_list_map d_triggerToRequestMap;
index a74515d37c9604263a10306b76249658f06877d7..5ce05babacadb8aaca39f0115c60fbde0e55e39c 100644 (file)
@@ -35,7 +35,7 @@ class SolverState;
  */
 class InferenceManager : public InferenceManagerBuffered
 {
-  typedef context::CDHashSet<Node, NodeHashFunction> NodeSet;
+  typedef context::CDHashSet<Node> NodeSet;
 
  public:
   InferenceManager(Theory& t, SolverState& s, ProofNodeManager* pnm);
index ed3d4cf2632c9a0403b3cd37d464710488701be3..c03b21236320f361352f253837f1f7b714f929f9 100644 (file)
@@ -28,7 +28,7 @@ std::ostream& operator<<(std::ostream& out, const MakeBagOp& op)
 
 size_t MakeBagOpHashFunction::operator()(const MakeBagOp& op) const
 {
-  return TypeNodeHashFunction()(op.getType());
+  return std::hash<TypeNode>()(op.getType());
 }
 
 MakeBagOp::MakeBagOp(const TypeNode& elementType)
index 6255f3b00a4af5319503b94f01c1f4d0236ee5ef..2b0218fdf84ffeb85a24c3c3e340cbf08913945f 100644 (file)
@@ -36,7 +36,7 @@ class SolverState;
  */
 class TermRegistry
 {
-  typedef context::CDHashMap<Node, Node, NodeHashFunction> NodeMap;
+  typedef context::CDHashMap<Node, Node> NodeMap;
 
  public:
   TermRegistry(SolverState& state, InferenceManager& im);
index 443be0ec70838209f341377a94fe67e3d342c2fc..1d4f6e9ee65597555bfa3b87f373ef38ad813d45 100644 (file)
@@ -63,8 +63,7 @@ class CircuitPropagator
     ASSIGNED_TO_FALSE,
   };
 
-  typedef std::unordered_map<Node, std::vector<Node>, NodeHashFunction>
-      BackEdgesMap;
+  typedef std::unordered_map<Node, std::vector<Node>> BackEdgesMap;
 
   /**
    * Construct a new CircuitPropagator.
@@ -172,8 +171,7 @@ class CircuitPropagator
   /**
    * Assignment status of each node.
    */
-  typedef context::CDHashMap<TNode, AssignmentStatus, TNodeHashFunction>
-      AssignmentMap;
+  typedef context::CDHashMap<TNode, AssignmentStatus> AssignmentMap;
 
   /**
    * Assign Node in circuit with the value and add it to the queue; note
@@ -245,7 +243,7 @@ class CircuitPropagator
 
   /** Nodes that have been attached already (computed forward edges for) */
   // All the nodes we've visited so far
-  context::CDHashSet<Node, NodeHashFunction> d_seen;
+  context::CDHashSet<Node> d_seen;
 
   AssignmentMap d_state;
 
index 8b2967fe6d7fed645d17552ca66ade6a8d41de01..2d2155f445f93e4bf7351c9c6db37a20f073fd74 100644 (file)
@@ -140,7 +140,7 @@ Node BoolProofRuleChecker::checkInternal(PfRule id,
       return Node::null();
     }
     // remove duplicates while keeping the order of children
-    std::unordered_set<TNode, TNodeHashFunction> clauseSet;
+    std::unordered_set<TNode> clauseSet;
     std::vector<Node> disjuncts;
     unsigned size = children[0].getNumChildren();
     for (unsigned i = 0; i < size; ++i)
@@ -166,7 +166,7 @@ Node BoolProofRuleChecker::checkInternal(PfRule id,
   {
     Assert(children.size() == 1);
     Assert(args.size() == 1);
-    std::unordered_set<Node, NodeHashFunction> clauseSet1, clauseSet2;
+    std::unordered_set<Node> clauseSet1, clauseSet2;
     if (children[0].getKind() == kind::OR)
     {
       clauseSet1.insert(children[0].begin(), children[0].end());
@@ -201,7 +201,7 @@ Node BoolProofRuleChecker::checkInternal(PfRule id,
     Node falseNode = nm->mkConst(false);
     std::vector<Node> clauseNodes;
     // literals to be removed from the virtual lhs clause of the resolution
-    std::unordered_map<Node, unsigned, NodeHashFunction> lhsElim;
+    std::unordered_map<Node, unsigned> lhsElim;
     for (std::size_t i = 0, argsSize = args.size(); i < argsSize; i = i + 2)
     {
       // whether pivot should occur as is or negated depends on the polarity of
@@ -320,7 +320,7 @@ Node BoolProofRuleChecker::checkInternal(PfRule id,
     for (std::size_t i = 0, childrenSize = children.size(); i < childrenSize;
          ++i)
     {
-      std::unordered_set<Node, NodeHashFunction> elim;
+      std::unordered_set<Node> elim;
       // literals to be removed from "first" clause
       if (i < childrenSize - 1)
       {
@@ -387,8 +387,8 @@ Node BoolProofRuleChecker::checkInternal(PfRule id,
     }
     Trace("bool-pfcheck") << "clause: " << clauseNodes << "\n";
     // check that set representation is the same as of the given conclusion
-    std::unordered_set<Node, NodeHashFunction> clauseComputed{
-        clauseNodes.begin(), clauseNodes.end()};
+    std::unordered_set<Node> clauseComputed{clauseNodes.begin(),
+                                            clauseNodes.end()};
     Trace("bool-pfcheck") << "clauseSet: " << clauseComputed << "\n" << pop;
     if (clauseComputed.empty())
     {
@@ -415,8 +415,7 @@ Node BoolProofRuleChecker::checkInternal(PfRule id,
     {
       return Node::null();
     }
-    std::unordered_set<Node, NodeHashFunction> clauseGiven{args[0].begin(),
-                                                           args[0].end()};
+    std::unordered_set<Node> clauseGiven{args[0].begin(), args[0].end()};
     return clauseComputed == clauseGiven ? args[0] : Node::null();
   }
   if (id == PfRule::SPLIT)
index 0d7431a8ef6d341216b91eb7028442c5ffea9a4d..44d337c286de88c3e65e7506c7edcb67fe1646f1 100644 (file)
@@ -45,7 +45,7 @@ RewriteResponse TheoryBoolRewriter::postRewrite(TNode node) {
  */
 RewriteResponse flattenNode(TNode n, TNode trivialNode, TNode skipNode)
 {
-  typedef std::unordered_set<TNode, TNodeHashFunction> node_set;
+  typedef std::unordered_set<TNode> node_set;
 
   node_set visited;
   visited.insert(skipNode);
index e22f5f20f24e79e44eaf54ee69fbb6c91cdc6332..68d6e1ad1cb5b365ca46bf378d705d92e3a3a453 100644 (file)
@@ -144,9 +144,13 @@ TypeNode TheoryBuiltinRewriter::getArrayTypeForFunctionType(TypeNode ftn)
   return ret;
 }
 
-Node TheoryBuiltinRewriter::getLambdaForArrayRepresentationRec( TNode a, TNode bvl, unsigned bvlIndex, 
-                                                                std::unordered_map< TNode, Node, TNodeHashFunction >& visited ){
-  std::unordered_map< TNode, Node, TNodeHashFunction >::iterator it = visited.find( a );
+Node TheoryBuiltinRewriter::getLambdaForArrayRepresentationRec(
+    TNode a,
+    TNode bvl,
+    unsigned bvlIndex,
+    std::unordered_map<TNode, Node>& visited)
+{
+  std::unordered_map<TNode, Node>::iterator it = visited.find(a);
   if( it==visited.end() ){
     Node ret;
     if( bvlIndex<bvl.getNumChildren() ){
@@ -185,7 +189,7 @@ Node TheoryBuiltinRewriter::getLambdaForArrayRepresentationRec( TNode a, TNode b
 
 Node TheoryBuiltinRewriter::getLambdaForArrayRepresentation( TNode a, TNode bvl ){
   Assert(a.getType().isArray());
-  std::unordered_map< TNode, Node, TNodeHashFunction > visited;
+  std::unordered_map<TNode, Node> visited;
   Trace("builtin-rewrite-debug") << "Get lambda for : " << a << ", with variables " << bvl << std::endl;
   Node body = getLambdaForArrayRepresentationRec( a, bvl, 0, visited );
   if( !body.isNull() ){
index 7d5cde3c25269671869ac68733c37a5eca2ef0f1..f528ed43cf47bdd64a076421937d64b80abd6863 100644 (file)
@@ -40,8 +40,11 @@ class TheoryBuiltinRewriter : public TheoryRewriter
   // conversions between lambdas and arrays
  private:
   /** recursive helper for getLambdaForArrayRepresentation */
-  static Node getLambdaForArrayRepresentationRec( TNode a, TNode bvl, unsigned bvlIndex, 
-                                                  std::unordered_map< TNode, Node, TNodeHashFunction >& visited );
+  static Node getLambdaForArrayRepresentationRec(
+      TNode a,
+      TNode bvl,
+      unsigned bvlIndex,
+      std::unordered_map<TNode, Node>& visited);
   /** recursive helper for getArrayRepresentationForLambda */
   static Node getArrayRepresentationForLambdaRec(TNode n, TypeNode retType);
 
index 67a04bfea51945f973879808c0419c8489e0ecfc..7eea90cdc90418edbc8f681b325c41c5d5673ab8 100644 (file)
@@ -32,17 +32,16 @@ namespace bv {
 typedef std::vector<TNode> ArgsVec;
 
 class AbstractionModule {
-  using NodeVecMap =
-      std::unordered_map<Node, std::vector<Node>, NodeHashFunction>;
-  using NodeTNodeMap = std::unordered_map<Node, TNode, NodeHashFunction>;
-  using TNodeTNodeMap = std::unordered_map<TNode, TNode, TNodeHashFunction>;
-  using NodeNodeMap = std::unordered_map<Node, Node, NodeHashFunction>;
-  using TNodeNodeMap = std::unordered_map<Node, TNode, NodeHashFunction>;
-  using TNodeSet = std::unordered_set<TNode, TNodeHashFunction>;
+  using NodeVecMap = std::unordered_map<Node, std::vector<Node>>;
+  using NodeTNodeMap = std::unordered_map<Node, TNode>;
+  using TNodeTNodeMap = std::unordered_map<TNode, TNode>;
+  using NodeNodeMap = std::unordered_map<Node, Node>;
+  using TNodeNodeMap = std::unordered_map<Node, TNode>;
+  using TNodeSet = std::unordered_set<TNode>;
   using IntNodeMap = std::unordered_map<unsigned, Node>;
   using IndexMap = std::unordered_map<unsigned, unsigned>;
   using SkolemMap = std::unordered_map<unsigned, std::vector<Node> >;
-  using SignatureMap = std::unordered_map<TNode, unsigned, TNodeHashFunction>;
+  using SignatureMap = std::unordered_map<TNode, unsigned>;
 
   struct Statistics {
     SizeStat<NodeNodeMap> d_numFunctionsAbstracted;
@@ -77,15 +76,15 @@ class AbstractionModule {
   };
 
   class ArgsTable {
-    std::unordered_map<TNode, ArgsTableEntry, TNodeHashFunction > d_data;
+    std::unordered_map<TNode, ArgsTableEntry> d_data;
     bool hasEntry(TNode signature) const;
   public:
-    typedef std::unordered_map<TNode, ArgsTableEntry, TNodeHashFunction >::iterator iterator;
-    ArgsTable() {}
-    void addEntry(TNode signature, const ArgsVec& args);
-    ArgsTableEntry& getEntry(TNode signature);
-    iterator begin() { return d_data.begin(); }
-    iterator end() { return d_data.end(); }
+   typedef std::unordered_map<TNode, ArgsTableEntry>::iterator iterator;
+   ArgsTable() {}
+   void addEntry(TNode signature, const ArgsVec& args);
+   ArgsTableEntry& getEntry(TNode signature);
+   iterator begin() { return d_data.begin(); }
+   iterator end() { return d_data.end(); }
   };
 
   /**
index a7dfb00e5527e48f50dc5937bc4018cef6aa7fc5..39ecbc12c93d8a05e86c582f8622eb77f4282cac 100644 (file)
@@ -56,8 +56,8 @@ class AigBitblaster : public TBitblaster<Abc_Obj_t*>
   static Abc_Ntk_t* currentAigNtk();
 
  private:
-  typedef std::unordered_map<TNode, Abc_Obj_t*, TNodeHashFunction> TNodeAigMap;
-  typedef std::unordered_map<Node, Abc_Obj_t*, NodeHashFunction> NodeAigMap;
+  typedef std::unordered_map<TNode, Abc_Obj_t*> TNodeAigMap;
+  typedef std::unordered_map<Node, Abc_Obj_t*> NodeAigMap;
 
   static thread_local Abc_Ntk_t* s_abcAigNetwork;
   std::unique_ptr<context::Context> d_nullContext;
index 2a7931aa0143a1d3cd342bcedfaed62f466ad75e..a669e4a86baf33c32da959adb3b376bd432930db 100644 (file)
@@ -38,8 +38,8 @@ namespace cvc5 {
 namespace theory {
 namespace bv {
 
-typedef std::unordered_set<Node, NodeHashFunction> NodeSet;
-typedef std::unordered_set<TNode, TNodeHashFunction> TNodeSet;
+typedef std::unordered_set<Node> NodeSet;
+typedef std::unordered_set<TNode> TNodeSet;
 
 /**
  * The Bitblaster that manages the mapping between Nodes
@@ -52,9 +52,9 @@ class TBitblaster
 {
  protected:
   typedef std::vector<T> Bits;
-  typedef std::unordered_map<Node, Bits, NodeHashFunction> TermDefMap;
-  typedef std::unordered_set<TNode, TNodeHashFunction> TNodeSet;
-  typedef std::unordered_map<Node, Node, NodeHashFunction> ModelCache;
+  typedef std::unordered_map<Node, Bits> TermDefMap;
+  typedef std::unordered_set<TNode> TNodeSet;
+  typedef std::unordered_map<Node, Node> ModelCache;
 
   typedef void (*TermBBStrategy)(TNode, Bits&, TBitblaster<T>*);
   typedef T (*AtomBBStrategy)(TNode, TBitblaster<T>*);
index 765f3051e9b1b64e54f85662d6779b82c2eae7a1..9e5ace9d8b78049163456ff037ec330d912b7e57 100644 (file)
@@ -56,7 +56,7 @@ class EagerBitblaster : public TBitblaster<Node>
  private:
   context::Context* d_context;
 
-  typedef std::unordered_set<TNode, TNodeHashFunction> TNodeSet;
+  typedef std::unordered_set<TNode> TNodeSet;
   std::unique_ptr<prop::SatSolver> d_satSolver;
   std::unique_ptr<BitblastingRegistrar> d_bitblastingRegistrar;
 
index 09448da8ad4373655d07c7a1280c067670abd871..4d65016733a0f6a7203c9bd2c1021a05a1d5d8ce 100644 (file)
@@ -81,7 +81,7 @@ void BBProof::bbAtom(TNode node)
 {
   std::vector<TNode> visit;
   visit.push_back(node);
-  std::unordered_set<TNode, TNodeHashFunction> visited;
+  std::unordered_set<TNode> visited;
 
   bool fproofs =
       options::proofGranularityMode() != options::ProofGranularityMode::OFF;
index 6cd4960fbbbb060a3ccfb334aa0a2602e1797859..ef23c05c0fb4049882c0ed3489f138271f9c744b 100644 (file)
@@ -60,7 +60,7 @@ class BBProof
   /** The associated term conversion proof generator. */
   TConvProofGenerator* d_tcpg;
   /** Map bit-vector nodes to bit-blasted nodes. */
-  std::unordered_map<Node, Node, NodeHashFunction> d_bbMap;
+  std::unordered_map<Node, Node> d_bbMap;
 };
 
 }  // namespace bv
index 04a35bc4fabf3472e63fb518a49ee7eb048fe358..ebbb2891f94125fd32d3c0111288d92b6850f068 100644 (file)
@@ -68,7 +68,7 @@ class BBSimple : public TBitblaster<Node>
   /** Caches variables for which we already created bits. */
   TNodeSet d_variables;
   /** Stores bit-blasted atoms. */
-  std::unordered_map<Node, Node, NodeHashFunction> d_bbAtoms;
+  std::unordered_map<Node, Node> d_bbAtoms;
   /** Theory state. */
   TheoryState* d_state;
 };
index 4b6c4fc5ba7370888b85b4d76a48df539ac62c05..ab51ea844493779931bc8b44c30ecc53b019fa71 100644 (file)
@@ -45,8 +45,8 @@ class EagerBitblastSolver {
   bool collectModelInfo(theory::TheoryModel* m, bool fullModel);
 
  private:
-  context::CDHashSet<Node, NodeHashFunction> d_assertionSet;
-  context::CDHashSet<Node, NodeHashFunction> d_assumptionSet;
+  context::CDHashSet<Node> d_assertionSet;
+  context::CDHashSet<Node> d_assumptionSet;
   context::Context* d_context;
 
   /** Bitblasters */
index 0fa96e619c2e1c93655590476844bfdfe6b1ebca..32b6dbd7ad150871072671f61ca2af7b2217ddeb 100644 (file)
@@ -99,17 +99,18 @@ class InequalityGraph : public context::ContextNotifyObj{
 
       return (*(d_model->find(left))).second.value < (*(d_model->find(right))).second.value; 
     }
-  }; 
+  };
 
-  typedef std::unordered_map<TNode, ReasonId, TNodeHashFunction> ReasonToIdMap;
-  typedef std::unordered_map<TNode, TermId, TNodeHashFunction> TermNodeToIdMap;
+  typedef std::unordered_map<TNode, ReasonId> ReasonToIdMap;
+  typedef std::unordered_map<TNode, TermId> TermNodeToIdMap;
 
   typedef std::vector<InequalityEdge> Edges; 
   typedef std::unordered_set<TermId> TermIdSet;
 
-  typedef std::priority_queue<TermId, std::vector<TermId>, QueueComparator> BFSQueue; 
-  typedef std::unordered_set<TNode, TNodeHashFunction> TNodeSet;
-  typedef std::unordered_set<Node, NodeHashFunction> NodeSet;
+  typedef std::priority_queue<TermId, std::vector<TermId>, QueueComparator>
+      BFSQueue;
+  typedef std::unordered_set<TNode> TNodeSet;
+  typedef std::unordered_set<Node> NodeSet;
 
   std::vector<InequalityNode> d_ineqNodes;
   std::vector< Edges > d_ineqEdges;
@@ -206,7 +207,7 @@ class InequalityGraph : public context::ContextNotifyObj{
   
   /*** The currently asserted disequalities */
   context::CDQueue<TNode> d_disequalities;
-  typedef context::CDHashSet<Node, NodeHashFunction> CDNodeSet;
+  typedef context::CDHashSet<Node> CDNodeSet;
   CDNodeSet d_disequalitiesAlreadySplit; 
   Node makeDiseqSplitLemma(TNode diseq); 
   /** Backtracking mechanisms **/
index f22f298acc0ee7afabfce266d6664a149a302b89..d1411d7843f4e7b800bb19abc05d456d0fba9d26 100644 (file)
@@ -100,8 +100,7 @@ class BVQuickCheck
   bool collectModelValues(theory::TheoryModel* model,
                           const std::set<Node>& termSet);
 
-  typedef std::unordered_set<TNode, TNodeHashFunction>::const_iterator
-      vars_iterator;
+  typedef std::unordered_set<TNode>::const_iterator vars_iterator;
   vars_iterator beginVars();
   vars_iterator endVars();
 
index a9d46f06805c2f8342c022d04915514404908986..ecf2bafb68dad6751d97bcc8a4c0c65d37ef5224 100644 (file)
@@ -261,7 +261,7 @@ Node BVSolverBitblast::getValue(TNode node)
         nb << cur.getOperator();
       }
 
-      std::unordered_map<Node, Node, NodeHashFunction>::iterator iit;
+      std::unordered_map<Node, Node>::iterator iit;
       for (const TNode& child : cur)
       {
         iit = d_modelCache.find(child);
index 384017f5f6cf779c3f37f77fd7fc30cde86fcbf5..36c06209ad8e654e35915ff3b319c2b3d71b7555 100644 (file)
@@ -87,7 +87,7 @@ class BVSolverBitblast : public BVSolver
    * Is cleared at the beginning of a getValue() call if the
    * `d_invalidateModelCache` flag is set to true.
    */
-  std::unordered_map<Node, Node, NodeHashFunction> d_modelCache;
+  std::unordered_map<Node, Node> d_modelCache;
 
   /** Bit-blaster used to bit-blast atoms/terms. */
   std::unique_ptr<BBSimple> d_bitblaster;
@@ -123,8 +123,7 @@ class BVSolverBitblast : public BVSolver
   BVProofRuleChecker d_bvProofChecker;
 
   /** Stores the SatLiteral for a given fact. */
-  context::CDHashMap<Node, prop::SatLiteral, NodeHashFunction>
-      d_factLiteralCache;
+  context::CDHashMap<Node, prop::SatLiteral> d_factLiteralCache;
 
   /** Reverse map of `d_factLiteralCache`. */
   context::CDHashMap<prop::SatLiteral, Node, prop::SatLiteralHashFunction>
index 57b3e0a0855e969fbe91de72b39161dee87edf43..9b3a2f1faf74d31de681a332678658ecfe6649c2 100644 (file)
@@ -49,8 +49,8 @@ class BVSolverLazy : public BVSolver
   context::Context* d_context;
 
   /** Context dependent set of atoms we already propagated */
-  context::CDHashSet<Node, NodeHashFunction> d_alreadyPropagatedSet;
-  context::CDHashSet<Node, NodeHashFunction> d_sharedTermsSet;
+  context::CDHashSet<Node> d_alreadyPropagatedSet;
+  context::CDHashSet<Node> d_sharedTermsSet;
 
   std::vector<std::unique_ptr<SubtheorySolver>> d_subtheories;
   std::unordered_map<SubTheory, SubtheorySolver*, std::hash<int>>
@@ -122,11 +122,11 @@ class BVSolverLazy : public BVSolver
   void check(Theory::Effort e);
   void spendResource(Resource r);
 
-  typedef std::unordered_set<TNode, TNodeHashFunction> TNodeSet;
-  typedef std::unordered_set<Node, NodeHashFunction> NodeSet;
+  typedef std::unordered_set<TNode> TNodeSet;
+  typedef std::unordered_set<Node> NodeSet;
   NodeSet d_staticLearnCache;
 
-  typedef std::unordered_map<Node, Node, NodeHashFunction> NodeToNode;
+  typedef std::unordered_map<Node, Node> NodeToNode;
 
   context::CDO<bool> d_lemmasAdded;
 
@@ -149,7 +149,7 @@ class BVSolverLazy : public BVSolver
    * Keeps a map from nodes to the subtheory that propagated it so that we can
    * explain it properly.
    */
-  typedef context::CDHashMap<Node, SubTheory, NodeHashFunction> PropagatedMap;
+  typedef context::CDHashMap<Node, SubTheory> PropagatedMap;
   PropagatedMap d_propagatedBy;
 
   std::unique_ptr<EagerBitblastSolver> d_eagerSolver;
index 52f5d52ac46d821c78b1e8dacc615c7b28d97405..3faad29a9387fd452c6684fdbfd8c56d733ff8a6 100644 (file)
@@ -38,10 +38,10 @@ bool isBVAtom(TNode n)
 }
 
 /* Traverse Boolean nodes and collect BV atoms. */
-void collectBVAtoms(TNode n, std::unordered_set<Node, NodeHashFunction>& atoms)
+void collectBVAtoms(TNode n, std::unordered_set<Node>& atoms)
 {
   std::vector<TNode> visit;
-  std::unordered_set<TNode, TNodeHashFunction> visited;
+  std::unordered_set<TNode> visited;
 
   visit.push_back(n);
 
@@ -138,7 +138,7 @@ bool BVSolverSimple::preNotifyFact(
       d_im.trustedLemma(tlem, InferenceId::BV_SIMPLE_LEMMA);
     }
 
-    std::unordered_set<Node, NodeHashFunction> bv_atoms;
+    std::unordered_set<Node> bv_atoms;
     collectBVAtoms(n, bv_atoms);
     for (const Node& nn : bv_atoms)
     {
index 90276f8b1ec16b4b25d38d61cfd6f59f8a89e44c..3a9e460fe42e01373c19d3304694ea7473cc06e8 100644 (file)
@@ -47,7 +47,7 @@ namespace {
 void collectVariables(TNode node, utils::NodeSet& vars)
 {
   std::vector<TNode> stack;
-  std::unordered_set<TNode, TNodeHashFunction> visited;
+  std::unordered_set<TNode> visited;
 
   stack.push_back(node);
   while (!stack.empty())
index 670adafa33b8583f47ae5d61de592fb18b2d3610..b93ff235f2c9075acf7c2deea97fc9b65cedd33e 100644 (file)
@@ -58,10 +58,8 @@ class SubstitutionEx
     }
   };
 
-  typedef std::unordered_map<Node, SubstitutionElement, NodeHashFunction>
-      Substitutions;
-  typedef std::unordered_map<Node, SubstitutionElement, NodeHashFunction>
-      SubstitutionsCache;
+  typedef std::unordered_map<Node, SubstitutionElement> Substitutions;
+  typedef std::unordered_map<Node, SubstitutionElement> SubstitutionsCache;
 
   Substitutions d_substitutions;
   SubstitutionsCache d_cache;
@@ -103,9 +101,9 @@ struct WorklistElement
   WorklistElement() : node(), id(-1) {}
 };
 
-typedef std::unordered_map<Node, Node, NodeHashFunction> NodeNodeMap;
-typedef std::unordered_map<Node, unsigned, NodeHashFunction> NodeIdMap;
-typedef std::unordered_set<TNode, TNodeHashFunction> TNodeSet;
+typedef std::unordered_map<Node, Node> NodeNodeMap;
+typedef std::unordered_map<Node, unsigned> NodeIdMap;
+typedef std::unordered_set<TNode> TNodeSet;
 
 class ExtractSkolemizer
 {
@@ -124,7 +122,7 @@ class ExtractSkolemizer
     ExtractList() : base(1), extracts() {}
     void addExtract(Extract& e);
   };
-  typedef std::unordered_map<Node, ExtractList, NodeHashFunction> VarExtractMap;
+  typedef std::unordered_map<Node, ExtractList> VarExtractMap;
   context::Context d_emptyContext;
   VarExtractMap d_varToExtract;
   theory::SubstitutionMap* d_modelMap;
index 903a5136e9ce468db92f1d31e6ae59e7988d54cd..439bd33ed743aff98414891a6be40a7f67a2df5a 100644 (file)
@@ -49,7 +49,7 @@ class BitblastSolver : public SubtheorySolver
   context::CDQueue<TNode> d_bitblastQueue;
   Statistics d_statistics;
 
-  typedef std::unordered_map<Node, Node, NodeHashFunction> NodeMap;
+  typedef std::unordered_map<Node, Node> NodeMap;
   NodeMap d_modelCache;
   context::CDO<bool> d_validModelCache;
 
index 52d9e739a816ac234502560f6c08c79a7edd3b48..0dfcfdde4d2042bddf3e6bb9adb561af049698a8 100644 (file)
@@ -50,10 +50,9 @@ class CoreSolverExtTheoryCallback : public ExtTheoryCallback
  * Bitvector equality solver
  */
 class CoreSolver : public SubtheorySolver {
-  typedef std::unordered_map<TNode, Node, TNodeHashFunction> ModelValue;
-  typedef std::unordered_map<TNode, bool, TNodeHashFunction> TNodeBoolMap;
-  typedef std::unordered_set<TNode, TNodeHashFunction> TNodeSet;
-
+  typedef std::unordered_map<TNode, Node> ModelValue;
+  typedef std::unordered_map<TNode, bool> TNodeBoolMap;
+  typedef std::unordered_set<TNode> TNodeSet;
 
   struct Statistics {
     IntStat d_numCallstoCheck;
@@ -103,7 +102,7 @@ class CoreSolver : public SubtheorySolver {
   std::unique_ptr<ExtTheory> d_extTheory;
 
   /** To make sure we keep the explanations */
-  context::CDHashSet<Node, NodeHashFunction> d_reasons;
+  context::CDHashSet<Node> d_reasons;
   ModelValue d_modelValues;
   void buildModel();
   bool assertFactToEqualityEngine(TNode fact, TNode reason);
@@ -113,8 +112,8 @@ class CoreSolver : public SubtheorySolver {
   /** Whether we need a last call effort check */
   bool d_needsLastCallCheck;
   /** For extended functions */
-  context::CDHashSet<Node, NodeHashFunction> d_extf_range_infer;
-  context::CDHashSet<Node, NodeHashFunction> d_extf_collapse_infer;
+  context::CDHashSet<Node> d_extf_range_infer;
+  context::CDHashSet<Node> d_extf_collapse_infer;
 
   /** do extended function inferences
    *
index 65eee95e1a4516376625bc586814fe2c5e2570fb..f8a7bf113dd4b3221566c1ceefe4cda0bfbc299e 100644 (file)
@@ -51,11 +51,11 @@ class InequalitySolver : public SubtheorySolver
     Statistics();
   };
 
-  context::CDHashSet<Node, NodeHashFunction> d_assertionSet;
+  context::CDHashSet<Node> d_assertionSet;
   InequalityGraph d_inequalityGraph;
-  context::CDHashMap<Node, TNode, NodeHashFunction> d_explanations;
+  context::CDHashMap<Node, TNode> d_explanations;
   context::CDO<bool> d_isComplete;
-  typedef std::unordered_set<Node, NodeHashFunction> NodeSet;
+  typedef std::unordered_set<Node> NodeSet;
   NodeSet d_ineqTerms;
   bool isInequalityOnly(TNode node);
   bool addInequality(TNode a, TNode b, bool strict, TNode fact);
index 7fb4637213e06d00aeb55ccb4890ef6187188ca6..f8717e045f2d093e1467eb2a21aeeec51d196358 100644 (file)
@@ -87,7 +87,7 @@ namespace cvc5 {
 **/
 class IntBlaster
 {
-  using CDNodeMap = context::CDHashMap<Node, Node, NodeHashFunction>;
+  using CDNodeMap = context::CDHashMap<Node, Node>;
 
  public:
   /**
@@ -319,13 +319,13 @@ class IntBlaster
    * Range constraints of the form 0 <= x < 2^k
    * These are added for every new integer variable that we introduce.
    */
-  context::CDHashSet<Node, NodeHashFunction> d_rangeAssertions;
+  context::CDHashSet<Node> d_rangeAssertions;
 
   /**
    * A set of "bitwise" equalities over integers for BITVECTOR_AND
    *   used in for options::SolveBVAsIntMode::BITWISE
    */
-  context::CDHashSet<Node, NodeHashFunction> d_bitwiseAssertions;
+  context::CDHashSet<Node> d_bitwiseAssertions;
 
   /** Useful constants */
   Node d_zero;
index 63d618da2d5555cfe9d86dccc8c6c88df2aea00d..4a2d2943d4ada3b589aed555e3381666737b6c79 100644 (file)
@@ -1047,7 +1047,10 @@ struct Count {
   {}
 };
 
-inline static void insert(std::unordered_map<TNode, Count, TNodeHashFunction>& map, TNode node, bool neg) {
+inline static void insert(std::unordered_map<TNode, Count>& map,
+                          TNode node,
+                          bool neg)
+{
   if(map.find(node) == map.end()) {
     Count c = neg? Count(0,1) : Count(1, 0);
     map[node] = c; 
@@ -1073,7 +1076,7 @@ inline Node RewriteRule<AndSimplify>::apply(TNode node)
 
   NodeManager *nm = NodeManager::currentNM();
   // this will remove duplicates
-  std::unordered_map<TNode, Count, TNodeHashFunction> subterms;
+  std::unordered_map<TNode, Count> subterms;
   unsigned size = utils::getSize(node);
   BitVector constant = BitVector::mkOnes(size);
   for (unsigned i = 0; i < node.getNumChildren(); ++i)
@@ -1110,8 +1113,7 @@ inline Node RewriteRule<AndSimplify>::apply(TNode node)
     children.push_back(utils::mkConst(constant)); 
   }
 
-  std::unordered_map<TNode, Count, TNodeHashFunction>::const_iterator it =
-      subterms.begin();
+  std::unordered_map<TNode, Count>::const_iterator it = subterms.begin();
 
   for (; it != subterms.end(); ++it)
   {
@@ -1163,7 +1165,7 @@ Node RewriteRule<FlattenAssocCommutNoDuplicates>::apply(TNode node) {
   Debug("bv-rewrite") << "RewriteRule<FlattenAssocCommut>(" << node << ")" << std::endl;
   std::vector<Node> processingStack;
   processingStack.push_back(node);
-  std::unordered_set<TNode, TNodeHashFunction> processed;
+  std::unordered_set<TNode> processed;
   std::vector<Node> children;
   Kind kind = node.getKind(); 
   
@@ -1200,7 +1202,7 @@ inline Node RewriteRule<OrSimplify>::apply(TNode node)
 
   NodeManager *nm = NodeManager::currentNM();
   // this will remove duplicates
-  std::unordered_map<TNode, Count, TNodeHashFunction> subterms;
+  std::unordered_map<TNode, Count> subterms;
   unsigned size = utils::getSize(node);
   BitVector constant(size, (unsigned)0);
 
@@ -1238,8 +1240,7 @@ inline Node RewriteRule<OrSimplify>::apply(TNode node)
     children.push_back(utils::mkConst(constant));
   }
 
-  std::unordered_map<TNode, Count, TNodeHashFunction>::const_iterator it =
-      subterms.begin();
+  std::unordered_map<TNode, Count>::const_iterator it = subterms.begin();
 
   for (; it != subterms.end(); ++it)
   {
@@ -1283,7 +1284,7 @@ inline Node RewriteRule<XorSimplify>::apply(TNode node)
                       << std::endl;
 
   NodeManager *nm = NodeManager::currentNM();
-  std::unordered_map<TNode, Count, TNodeHashFunction> subterms;
+  std::unordered_map<TNode, Count> subterms;
   unsigned size = utils::getSize(node);
   BitVector constant;
   bool const_set = false;
@@ -1321,8 +1322,7 @@ inline Node RewriteRule<XorSimplify>::apply(TNode node)
 
   std::vector<Node> children;
 
-  std::unordered_map<TNode, Count, TNodeHashFunction>::const_iterator it =
-      subterms.begin();
+  std::unordered_map<TNode, Count>::const_iterator it = subterms.begin();
   unsigned true_count = 0;
   bool seen_false = false;
   for (; it != subterms.end(); ++it)
index eb2fd6527d63b392cd1a449df6826d1023a96d09..1549df63922a29be031f8a2f176b9e154a569df8 100644 (file)
@@ -140,7 +140,7 @@ static bool isCoreEqTerm(bool iseq, TNode term, TNodeBoolMap& cache)
   TNode t = term.getKind() == kind::NOT ? term[0] : term;
 
   std::vector<TNode> stack;
-  std::unordered_map<TNode, bool, TNodeHashFunction> visited;
+  std::unordered_map<TNode, bool> visited;
   stack.push_back(t);
 
   while (!stack.empty())
index 4844c1a938acb9e93880a4b395c58e4f82a02485..8e916e975d7a26bdf1b514587bc4e30bd5474a83 100644 (file)
@@ -28,13 +28,13 @@ namespace cvc5 {
 namespace theory {
 namespace bv {
 
-typedef std::unordered_set<Node, NodeHashFunction> NodeSet;
-typedef std::unordered_set<TNode, TNodeHashFunction> TNodeSet;
+typedef std::unordered_set<Node> NodeSet;
+typedef std::unordered_set<TNode> TNodeSet;
 
 namespace utils {
 
-typedef std::unordered_map<TNode, bool, TNodeHashFunction> TNodeBoolMap;
-typedef std::unordered_set<Node, NodeHashFunction> NodeSet;
+typedef std::unordered_map<TNode, bool> TNodeBoolMap;
+typedef std::unordered_set<Node> NodeSet;
 
 /* Get the bit-width of given node. */
 unsigned getSize(TNode node);
index 9e6b6d33915278072c935e3a31ca09709dc3ac4f..f8e7eea090b5802bca837a098d0ef8f2cd6a178d 100644 (file)
@@ -42,9 +42,8 @@ namespace datatypes {
  */
 class InferProofCons : public ProofGenerator
 {
-  typedef context::
-      CDHashMap<Node, std::shared_ptr<DatatypesInference>, NodeHashFunction>
-          NodeDatatypesInferenceMap;
+  typedef context::CDHashMap<Node, std::shared_ptr<DatatypesInference>>
+      NodeDatatypesInferenceMap;
 
  public:
   InferProofCons(context::Context* c, ProofNodeManager* pnm);
index 4b0c17bee3c50630a8ca04d92c92f710f67e7b6e..7e5099d5538cc7593be301cd21802f2c6ab98e02 100644 (file)
@@ -60,7 +60,7 @@ Node applySygusArgs(const DType& dt,
   TNode val;
   if (!op.hasAttribute(SygusVarFreeAttribute()))
   {
-    std::unordered_set<Node, NodeHashFunction> fvs;
+    std::unordered_set<Node> fvs;
     if (expr::getFreeVariables(op, fvs))
     {
       if (fvs.size() == 1)
@@ -294,8 +294,8 @@ typedef expr::Attribute<BuiltinVarToSygusAttributeId, Node>
 
 Node sygusToBuiltin(Node n, bool isExternal)
 {
-  std::unordered_map<TNode, Node, TNodeHashFunction> visited;
-  std::unordered_map<TNode, Node, TNodeHashFunction>::iterator it;
+  std::unordered_map<TNode, Node> visited;
+  std::unordered_map<TNode, Node>::iterator it;
   std::vector<TNode> visit;
   TNode cur;
   unsigned index;
@@ -410,8 +410,8 @@ Node sygusToBuiltinEval(Node n, const std::vector<Node>& args)
   std::vector<Node> eargs;
   bool svarsInit = false;
   std::vector<Node> svars;
-  std::unordered_map<TNode, Node, TNodeHashFunction> visited;
-  std::unordered_map<TNode, Node, TNodeHashFunction>::iterator it;
+  std::unordered_map<TNode, Node> visited;
+  std::unordered_map<TNode, Node>::iterator it;
   std::vector<TNode> visit;
   TNode cur;
   unsigned index;
@@ -521,8 +521,7 @@ Node builtinVarToSygus(Node v)
   return Node::null();
 }
 
-void getFreeSymbolsSygusType(TypeNode sdt,
-                             std::unordered_set<Node, NodeHashFunction>& syms)
+void getFreeSymbolsSygusType(TypeNode sdt, std::unordered_set<Node>& syms)
 {
   // datatype types we need to process
   std::vector<TypeNode> typeToProcess;
index 63e8a057a2990737d50ef37ce0d3f509bf8a14fb..6f3791a4de766079bcdbfdc75980147ccfee64ad 100644 (file)
@@ -197,8 +197,7 @@ Node sygusToBuiltinEval(Node n, const std::vector<Node>& args);
  * We have that { a, b, c, e } are added to syms. Notice that expr::getSymbols
  * excludes variables whose kind is BOUND_VARIABLE.
  */
-void getFreeSymbolsSygusType(TypeNode sdt,
-                             std::unordered_set<Node, NodeHashFunction>& syms);
+void getFreeSymbolsSygusType(TypeNode sdt, std::unordered_set<Node>& syms);
 
 /** Substitute and generalize a sygus datatype type
  *
index d4dbdf82d7720ca055bcf5f439614795f96d4dc8..45d996b555ad1580932176897ea1447911e79542 100644 (file)
@@ -156,8 +156,7 @@ void SygusExtension::registerTerm(Node n)
     bool success = false;
     if( n.getKind()==kind::APPLY_SELECTOR_TOTAL ){
       registerTerm(n[0]);
-      std::unordered_map<Node, Node, NodeHashFunction>::iterator it =
-          d_term_to_anchor.find(n[0]);
+      std::unordered_map<Node, Node>::iterator it = d_term_to_anchor.find(n[0]);
       if( it!=d_term_to_anchor.end() ) {
         d_term_to_anchor[n] = it->second;
         unsigned sel_weight =
@@ -333,7 +332,7 @@ void SygusExtension::assertTesterInternal(int tindex, TNode n, Node exp)
     }
 
     // add the above symmetry breaking predicates to lemmas
-    std::unordered_map<TNode, TNode, TNodeHashFunction> cache;
+    std::unordered_map<TNode, TNode> cache;
     Node rlv = getRelevancyCondition(n);
     for (std::pair<Node, InferenceId>& sbl : sbLemmas)
     {
@@ -450,8 +449,8 @@ Node SygusExtension::eliminateTraversalPredicates(Node n)
 {
   NodeManager* nm = NodeManager::currentNM();
   SkolemManager* sm = nm->getSkolemManager();
-  std::unordered_map<TNode, Node, TNodeHashFunction> visited;
-  std::unordered_map<TNode, Node, TNodeHashFunction>::iterator it;
+  std::unordered_map<TNode, Node> visited;
+  std::unordered_map<TNode, Node>::iterator it;
   std::map<Node, Node>::iterator ittb;
   std::vector<TNode> visit;
   TNode cur;
@@ -948,8 +947,7 @@ void SygusExtension::registerSearchTerm(TypeNode tn,
                                         bool topLevel)
 {
   //register this term
-  std::unordered_map<Node, Node, NodeHashFunction>::iterator ita =
-      d_term_to_anchor.find(n);
+  std::unordered_map<Node, Node>::iterator ita = d_term_to_anchor.find(n);
   Assert(ita != d_term_to_anchor.end());
   Node a = ita->second;
   Assert(!a.isNull());
@@ -1050,12 +1048,9 @@ Node SygusExtension::registerSearchValue(Node a,
       registerSymBreakLemmaForValue(a, nv, dbzet, Node::null(), var_count);
       return Node::null();
     }else{
-      std::unordered_map<Node, Node, NodeHashFunction>& scasv =
-          sca.d_search_val[tn];
-      std::unordered_map<Node, unsigned, NodeHashFunction>& scasvs =
-          sca.d_search_val_sz[tn];
-      std::unordered_map<Node, Node, NodeHashFunction>::iterator itsv =
-          scasv.find(bvr);
+      std::unordered_map<Node, Node>& scasv = sca.d_search_val[tn];
+      std::unordered_map<Node, unsigned>& scasvs = sca.d_search_val_sz[tn];
+      std::unordered_map<Node, Node>::iterator itsv = scasv.find(bvr);
       Node bad_val_bvr;
       bool by_examples = false;
       if (itsv == scasv.end())
@@ -1264,7 +1259,7 @@ void SygusExtension::addSymBreakLemmasFor(TypeNode tn,
     Trace("sygus-sb-debug2")
         << "add lemmas up to size " << max_sz << ", which is (search_size) "
         << csz << " - (depth) " << d << std::endl;
-    std::unordered_map<TNode, TNode, TNodeHashFunction> cache;
+    std::unordered_map<TNode, TNode> cache;
     for (std::pair<const uint64_t, std::vector<Node>>& sbls : its->second)
     {
       if (sbls.first <= max_sz)
@@ -1443,8 +1438,7 @@ void SygusExtension::notifySearchSize(TNode m, uint64_t s, Node exp)
 
 unsigned SygusExtension::getSearchSizeFor( Node n ) {
   Trace("sygus-sb-debug2") << "get search size for term : " << n << std::endl;
-  std::unordered_map<Node, Node, NodeHashFunction>::iterator ita =
-      d_term_to_anchor.find(n);
+  std::unordered_map<Node, Node>::iterator ita = d_term_to_anchor.find(n);
   Assert(ita != d_term_to_anchor.end());
   return getSearchSizeForAnchor( ita->second );
 }
@@ -1497,7 +1491,7 @@ void SygusExtension::incrementCurrentSearchSize(TNode m)
                       && !s.second.empty()))
               {
                 Node rlv = getRelevancyCondition(t);
-                std::unordered_map<TNode, TNode, TNodeHashFunction> cache;
+                std::unordered_map<TNode, TNode> cache;
                 for (const Node& lem : s.second)
                 {
                   Node slem = lem.substitute(x, t, cache);
index 25f56b33485e78c3e9be2b1e8f092f1403139501..3c7607eafcd2cf5e8e1bdd14b9dae1753b036e0f 100644 (file)
@@ -64,10 +64,10 @@ class InferenceManager;
  */
 class SygusExtension
 {
-  typedef context::CDHashMap< Node, int, NodeHashFunction > IntMap;
-  typedef context::CDHashMap< Node, Node, NodeHashFunction > NodeMap;
-  typedef context::CDHashMap< Node, bool, NodeHashFunction > BoolMap;
-  typedef context::CDHashSet<Node, NodeHashFunction> NodeSet;
+  typedef context::CDHashMap<Node, int> IntMap;
+  typedef context::CDHashMap<Node, Node> NodeMap;
+  typedef context::CDHashMap<Node, bool> BoolMap;
+  typedef context::CDHashSet<Node> NodeSet;
 
  public:
   SygusExtension(TheoryState& s,
@@ -149,7 +149,7 @@ class SygusExtension
    * Map from terms (selector chains) to their anchors. The anchor of a
    * selector chain S1( ... Sn( x ) ... ) is x.
    */
-  std::unordered_map<Node, Node, NodeHashFunction> d_term_to_anchor;
+  std::unordered_map<Node, Node> d_term_to_anchor;
   /**
    * Map from anchors to the conjecture they are associated with.
    */
@@ -161,7 +161,7 @@ class SygusExtension
    * where weight is the selector weight of Si
    * (see SygusTermDatabase::getSelectorWeight).
    */
-  std::unordered_map<Node, unsigned, NodeHashFunction> d_term_to_depth;
+  std::unordered_map<Node, unsigned> d_term_to_depth;
   /**
    * Map from terms (selector chains) to whether they are the topmost term
    * of their type. For example, if:
@@ -172,7 +172,7 @@ class SygusExtension
    * Then, x, S1( x ), and S4( S3( S2( S1( x ) ) ) ) are top-level terms,
    * whereas S2( S1( x ) ) and S3( S2( S1( x ) ) ) are not.
    */
-  std::unordered_map<Node, bool, NodeHashFunction> d_is_top_level;
+  std::unordered_map<Node, bool> d_is_top_level;
   /**
    * Returns true if the selector chain n is top-level based on the above
    * definition, when tn is the type of n.
@@ -198,13 +198,11 @@ private:
      * term. The range of this map can be updated if we later encounter a sygus
      * term that also rewrites to the builtin value but has a smaller term size.
      */
-    std::map<TypeNode, std::unordered_map<Node, Node, NodeHashFunction>>
-        d_search_val;
+    std::map<TypeNode, std::unordered_map<Node, Node>> d_search_val;
     /** the size of terms in the range of d_search val. */
-    std::map<TypeNode, std::unordered_map<Node, unsigned, NodeHashFunction>>
-        d_search_val_sz;
+    std::map<TypeNode, std::unordered_map<Node, unsigned>> d_search_val_sz;
     /** For each term, whether this cache has processed that term */
-    std::unordered_set<Node, NodeHashFunction> d_search_val_proc;
+    std::unordered_set<Node> d_search_val_proc;
   };
   /** An instance of the above cache, for each anchor */
   std::map< Node, SearchCache > d_cache;
@@ -513,7 +511,7 @@ private:
    * This should be user context-dependent if sygus is updated to work in
    * incremental mode.
    */
-  std::unordered_map<Node, unsigned, NodeHashFunction> d_simple_proc;
+  std::unordered_map<Node, unsigned> d_simple_proc;
   //------------------------end static symmetry breaking
 
   /** Get the canonical free variable for type tn */
index 1ae122f5e2f801d6d9a002464568d4f4b16bfb10..951aea8042b385a2244033e02253dd2bf2fd2a8b 100644 (file)
@@ -42,9 +42,9 @@ class TheoryDatatypes : public Theory {
  private:
   typedef context::CDList<Node> NodeList;
   /** maps nodes to an index in a vector */
-  typedef context::CDHashMap<Node, size_t, NodeHashFunction> NodeUIntMap;
-  typedef context::CDHashMap<Node, bool, NodeHashFunction> BoolMap;
-  typedef context::CDHashMap<Node, Node, NodeHashFunction> NodeMap;
+  typedef context::CDHashMap<Node, size_t> NodeUIntMap;
+  typedef context::CDHashMap<Node, bool> BoolMap;
+  typedef context::CDHashMap<Node, Node> NodeMap;
 
  private:
   //notification class for equality engine
index c9bfd98dff51bd31ff65be202fb557a25e6712fb..df644e9b2bc8d19cca60b97a75c1aca811288222 100644 (file)
@@ -420,7 +420,7 @@ TypeNode MatchTypeRule::computeType(NodeManager* nodeManager,
     if (check)
     {
       Kind nck = nc.getKind();
-      std::unordered_set<Node, NodeHashFunction> bvs;
+      std::unordered_set<Node> bvs;
       if (nck == kind::MATCH_BIND_CASE)
       {
         for (const Node& v : nc[0])
index 3a9ddd9d6aaadb1a67832a2d3f2690b1073b0432..1606fbb50b2cad368094fe6d5439b8d0aa3635d6 100644 (file)
@@ -87,8 +87,7 @@ namespace theory {
  */
 class EagerProofGenerator : public ProofGenerator
 {
-  typedef context::CDHashMap<Node, std::shared_ptr<ProofNode>, NodeHashFunction>
-      NodeProofNodeMap;
+  typedef context::CDHashMap<Node, std::shared_ptr<ProofNode>> NodeProofNodeMap;
 
  public:
   EagerProofGenerator(ProofNodeManager* pnm,
index 90ab5c4f06e5d038f9117426a01c35557b959679..c0a3a2a2f5ad053d834b7b7f90db80ae8bdb4ce7 100644 (file)
@@ -132,21 +132,20 @@ Node Evaluator::eval(TNode n,
                      const std::vector<Node>& vals,
                      bool useRewriter) const
 {
-  std::unordered_map<Node, Node, NodeHashFunction> visited;
+  std::unordered_map<Node, Node> visited;
   return eval(n, args, vals, visited, useRewriter);
 }
-Node Evaluator::eval(
-    TNode n,
-    const std::vector<Node>& args,
-    const std::vector<Node>& vals,
-    const std::unordered_map<Node, Node, NodeHashFunction>& visited,
-    bool useRewriter) const
+Node Evaluator::eval(TNode n,
+                     const std::vector<Node>& args,
+                     const std::vector<Node>& vals,
+                     const std::unordered_map<Node, Node>& visited,
+                     bool useRewriter) const
 {
   Trace("evaluator") << "Evaluating " << n << " under substitution " << args
                      << " " << vals << " with visited size = " << visited.size()
                      << std::endl;
-  std::unordered_map<TNode, Node, NodeHashFunction> evalAsNode;
-  std::unordered_map<TNode, EvalResult, TNodeHashFunction> results;
+  std::unordered_map<TNode, Node> evalAsNode;
+  std::unordered_map<TNode, EvalResult> results;
   // add visited to results
   for (const std::pair<const Node, Node>& p : visited)
   {
@@ -155,8 +154,7 @@ Node Evaluator::eval(
     if (results[p.first].d_tag == EvalResult::INVALID)
     {
       // could not evaluate, use the evalAsNode map
-      std::unordered_map<TNode, Node, NodeHashFunction>::iterator itn =
-          evalAsNode.find(p.second);
+      std::unordered_map<TNode, Node>::iterator itn = evalAsNode.find(p.second);
       Assert(itn != evalAsNode.end());
       Node val = itn->second;
       if (useRewriter)
@@ -172,8 +170,7 @@ Node Evaluator::eval(
   if (ret.isNull() && useRewriter)
   {
     // should be stored in the evaluation-as-node map
-    std::unordered_map<TNode, Node, NodeHashFunction>::iterator itn =
-        evalAsNode.find(n);
+    std::unordered_map<TNode, Node>::iterator itn = evalAsNode.find(n);
     Assert(itn != evalAsNode.end());
     ret = Rewriter::rewrite(itn->second);
   }
@@ -190,13 +187,13 @@ EvalResult Evaluator::evalInternal(
     TNode n,
     const std::vector<Node>& args,
     const std::vector<Node>& vals,
-    std::unordered_map<TNode, Node, NodeHashFunction>& evalAsNode,
-    std::unordered_map<TNode, EvalResult, TNodeHashFunction>& results,
+    std::unordered_map<TNode, Node>& evalAsNode,
+    std::unordered_map<TNode, EvalResult>& results,
     bool useRewriter) const
 {
   std::vector<TNode> queue;
   queue.emplace_back(n);
-  std::unordered_map<TNode, EvalResult, TNodeHashFunction>::iterator itr;
+  std::unordered_map<TNode, EvalResult>::iterator itr;
 
   while (queue.size() != 0)
   {
@@ -361,8 +358,8 @@ EvalResult Evaluator::evalInternal(
           // since the evaluation of op[1] is under a new substitution and thus
           // should not be cached. We could alternatively copy evalAsNode to
           // evalAsNodeC but favor avoiding this copy for performance reasons.
-          std::unordered_map<TNode, Node, NodeHashFunction> evalAsNodeC;
-          std::unordered_map<TNode, EvalResult, TNodeHashFunction> resultsC;
+          std::unordered_map<TNode, Node> evalAsNodeC;
+          std::unordered_map<TNode, EvalResult> resultsC;
           results[currNode] = evalInternal(op[1],
                                            lambdaArgs,
                                            lambdaVals,
@@ -885,10 +882,9 @@ EvalResult Evaluator::evalInternal(
   return results[n];
 }
 
-Node Evaluator::reconstruct(
-    TNode n,
-    std::unordered_map<TNode, EvalResult, TNodeHashFunction>& eresults,
-    std::unordered_map<TNode, Node, NodeHashFunction>& evalAsNode) const
+Node Evaluator::reconstruct(TNode n,
+                            std::unordered_map<TNode, EvalResult>& eresults,
+                            std::unordered_map<TNode, Node>& evalAsNode) const
 {
   if (n.getNumChildren() == 0)
   {
@@ -896,8 +892,8 @@ Node Evaluator::reconstruct(
   }
   Trace("evaluator") << "Evaluator: reconstruct " << n << std::endl;
   NodeManager* nm = NodeManager::currentNM();
-  std::unordered_map<TNode, EvalResult, TNodeHashFunction>::iterator itr;
-  std::unordered_map<TNode, Node, NodeHashFunction>::iterator itn;
+  std::unordered_map<TNode, EvalResult>::iterator itr;
+  std::unordered_map<TNode, Node>::iterator itn;
   std::vector<Node> echildren;
   if (n.getMetaKind() == kind::metakind::PARAMETERIZED)
   {
index 211b3060d9ea91c6b5cd8287d5ae733e1ac46f7a..42cc347491344f0b615825c35a83da0c79b9d972 100644 (file)
@@ -117,7 +117,7 @@ class Evaluator
   Node eval(TNode n,
             const std::vector<Node>& args,
             const std::vector<Node>& vals,
-            const std::unordered_map<Node, Node, NodeHashFunction>& visited,
+            const std::unordered_map<Node, Node>& visited,
             bool useRewriter = true) const;
 
  private:
@@ -137,13 +137,12 @@ class Evaluator
    * `args` to `vals` and rewriting. Notice that this map contains an entry
    * for n in the case that it cannot be evaluated.
    */
-  EvalResult evalInternal(
-      TNode n,
-      const std::vector<Node>& args,
-      const std::vector<Node>& vals,
-      std::unordered_map<TNode, Node, NodeHashFunction>& evalAsNode,
-      std::unordered_map<TNode, EvalResult, TNodeHashFunction>& results,
-      bool useRewriter) const;
+  EvalResult evalInternal(TNode n,
+                          const std::vector<Node>& args,
+                          const std::vector<Node>& vals,
+                          std::unordered_map<TNode, Node>& evalAsNode,
+                          std::unordered_map<TNode, EvalResult>& results,
+                          bool useRewriter) const;
   /** reconstruct
    *
    * This function reconstructs the result of evaluating n using a combination
@@ -153,10 +152,9 @@ class Evaluator
    * above method for some args and vals. This method ensures that the return
    * value is equivalent to the rewritten form of n * { args -> vals }.
    */
-  Node reconstruct(
-      TNode n,
-      std::unordered_map<TNode, EvalResult, TNodeHashFunction>& eresults,
-      std::unordered_map<TNode, Node, NodeHashFunction>& evalAsNode) const;
+  Node reconstruct(TNode n,
+                   std::unordered_map<TNode, EvalResult>& eresults,
+                   std::unordered_map<TNode, Node>& evalAsNode) const;
 };
 
 }  // namespace theory
index 425c6fe6cb50c76e98136320c5c3e68211fd98ae..f5e08e2f59cada01679a78bee1e7cd20b9a16100 100644 (file)
@@ -164,10 +164,9 @@ class ExtTheoryCallback
  */
 class ExtTheory
 {
-  using NodeBoolMap = context::CDHashMap<Node, bool, NodeHashFunction>;
-  using NodeExtReducedIdMap =
-      context::CDHashMap<Node, ExtReducedId, NodeHashFunction>;
-  using NodeSet = context::CDHashSet<Node, NodeHashFunction>;
+  using NodeBoolMap = context::CDHashMap<Node, bool>;
+  using NodeExtReducedIdMap = context::CDHashMap<Node, ExtReducedId>;
+  using NodeSet = context::CDHashSet<Node>;
 
  public:
   /** constructor
index 1db635cda0cd731235c32d0ae7986ca828bdc3c7..f1b7c8a83a30d5dbfc2fd3530d01f5e1e4a7bdf0 100644 (file)
@@ -323,11 +323,11 @@ class FpConverter
   typedef symfpuSymbolic::traits::ubv ubv;
   typedef symfpuSymbolic::traits::sbv sbv;
 
-  typedef context::CDHashMap<Node, uf, NodeHashFunction> fpMap;
-  typedef context::CDHashMap<Node, rm, NodeHashFunction> rmMap;
-  typedef context::CDHashMap<Node, prop, NodeHashFunction> boolMap;
-  typedef context::CDHashMap<Node, ubv, NodeHashFunction> ubvMap;
-  typedef context::CDHashMap<Node, sbv, NodeHashFunction> sbvMap;
+  typedef context::CDHashMap<Node, uf> fpMap;
+  typedef context::CDHashMap<Node, rm> rmMap;
+  typedef context::CDHashMap<Node, prop> boolMap;
+  typedef context::CDHashMap<Node, ubv> ubvMap;
+  typedef context::CDHashMap<Node, sbv> sbvMap;
 
   fpMap d_fpMap;
   rmMap d_rmMap;
index 674d793313f43648c13ec203cb5e211e718b872e..a9edc8b02ce2b0557d5ec5b811193ddbdcaf65ab 100644 (file)
@@ -33,11 +33,10 @@ class FpExpandDefs
 {
   using PairTypeNodeHashFunction = PairHashFunction<TypeNode,
                                                     TypeNode,
-                                                    TypeNodeHashFunction,
-                                                    TypeNodeHashFunction>;
+                                                    std::hash<TypeNode>,
+                                                    std::hash<TypeNode>>;
   /** Uninterpreted functions for undefined cases of non-total operators. */
-  using ComparisonUFMap =
-      context::CDHashMap<TypeNode, Node, TypeNodeHashFunction>;
+  using ComparisonUFMap = context::CDHashMap<TypeNode, Node>;
   /** Uninterpreted functions for lazy handling of conversions. */
   using ConversionUFMap = context::
       CDHashMap<std::pair<TypeNode, TypeNode>, Node, PairTypeNodeHashFunction>;
index 01dace411086739bb00b46aa7746dea62e82bf24..21f2975a86356c02637766a32e38f8c11275a62a 100644 (file)
@@ -804,7 +804,7 @@ bool TheoryFp::collectModelValues(TheoryModel* m,
     }
   }
 
-  std::unordered_set<TNode, TNodeHashFunction> visited;
+  std::unordered_set<TNode> visited;
   std::stack<TNode> working;
   std::set<TNode> relevantVariables;
   for (std::set<Node>::const_iterator i(relevantTerms.begin());
index 8cf4c4cc55340c1ad00e795e27c296ddda8733ef..a41bf342c2d56979577c119d292ed8d957d0627a 100644 (file)
@@ -92,9 +92,8 @@ class TheoryFp : public Theory
   TrustNode explain(TNode n) override;
 
  protected:
-  using ConversionAbstractionMap =
-      context::CDHashMap<TypeNode, Node, TypeNodeHashFunction>;
-  using AbstractionMap = context::CDHashMap<Node, Node, NodeHashFunction>;
+  using ConversionAbstractionMap = context::CDHashMap<TypeNode, Node>;
+  using AbstractionMap = context::CDHashMap<Node, Node>;
 
   /** Equality engine. */
   class NotifyClass : public eq::EqualityEngineNotify {
@@ -121,7 +120,7 @@ class TheoryFp : public Theory
   void registerTerm(TNode node);
   bool isRegistered(TNode node);
 
-  context::CDHashSet<Node, NodeHashFunction> d_registeredTerms;
+  context::CDHashSet<Node> d_registeredTerms;
 
   /** The word-blaster. Translates FP -> BV. */
   std::unique_ptr<FpConverter> d_conv;
index 2bde66fe73b87bafda2b60c0bfcc565231fffbf3..86444b8cfda3031df460308f3b3a5f01681cbad6 100644 (file)
@@ -114,12 +114,11 @@ static bool isInvertible(Kind k, unsigned index)
          || k == BITVECTOR_SHL;
 }
 
-Node BvInverter::getPathToPv(
-    Node lit,
-    Node pv,
-    Node sv,
-    std::vector<unsigned>& path,
-    std::unordered_set<TNode, TNodeHashFunction>& visited)
+Node BvInverter::getPathToPv(Node lit,
+                             Node pv,
+                             Node sv,
+                             std::vector<unsigned>& path,
+                             std::unordered_set<TNode>& visited)
 {
   if (visited.find(lit) == visited.end())
   {
@@ -169,7 +168,7 @@ Node BvInverter::getPathToPv(Node lit,
                              std::vector<unsigned>& path,
                              bool projectNl)
 {
-  std::unordered_set<TNode, TNodeHashFunction> visited;
+  std::unordered_set<TNode> visited;
   Node slit = getPathToPv(lit, pv, sv, path, visited);
   // if we are able to find a (invertible) path to pv
   if (!slit.isNull() && !pvs.isNull())
index bf6c31b1b1dbbb517a99c6e7c567d8bcb4538340..e840b53de93ebbfce6c41450a70ca8b8b73217a8 100644 (file)
@@ -104,7 +104,7 @@ class BvInverter
                    Node pv,
                    Node sv,
                    std::vector<unsigned>& path,
-                   std::unordered_set<TNode, TNodeHashFunction>& visited);
+                   std::unordered_set<TNode>& visited);
 
   /** Helper function for getInv.
    *
index dfc5efff71cabcde453ec157af184b6c4d9debcb..789a723b92b54ac9bcee8967d230e36da3595d0c 100644 (file)
@@ -83,8 +83,7 @@ Node CandidateRewriteDatabase::addTerm(Node sol,
                                        bool& rew_print)
 {
   // have we added this term before?
-  std::unordered_map<Node, Node, NodeHashFunction>::iterator itac =
-      d_add_term_cache.find(sol);
+  std::unordered_map<Node, Node>::iterator itac = d_add_term_cache.find(sol);
   if (itac != d_add_term_cache.end())
   {
     return itac->second;
index 1a2add6ebc0d9700d64d1d7635a382bcd68b4abf..309aaf4b7f88e5ed2bd2b1c3f703b0476f1eb630 100644 (file)
@@ -124,7 +124,7 @@ class CandidateRewriteDatabase : public ExprMiner
   /** candidate rewrite filter */
   CandidateRewriteFilter d_crewrite_filter;
   /** the cache for results of addTerm */
-  std::unordered_map<Node, Node, NodeHashFunction> d_add_term_cache;
+  std::unordered_map<Node, Node> d_add_term_cache;
 };
 
 }  // namespace quantifiers
index a57b74c785f8160f2c7fb9faad0634a2f50b3dc1..d5f06b6e9ffc6dba7aa78a05bb2785c92066dee5 100644 (file)
@@ -227,8 +227,7 @@ bool CandidateRewriteFilter::notify(Node s,
   Assert(!s.isNull());
   n = d_drewrite->toExternal(n);
   Assert(!n.isNull());
-  std::map<Node, std::unordered_set<Node, NodeHashFunction> >::iterator it =
-      d_pairs.find(n);
+  std::map<Node, std::unordered_set<Node> >::iterator it = d_pairs.find(n);
   if (Trace.isOn("crf-match"))
   {
     Trace("crf-match") << "  " << s << " matches " << n
index 7d2d9088c5847f7c6f57859d6a08e0bd27d3cb3b..4995dc7c2494921af2036568377de2686b0280d5 100644 (file)
@@ -115,7 +115,7 @@ class CandidateRewriteFilter
    * Stores all relevant pairs returned by this sampler (see registerTerm). In
    * detail, if (t,s) is a relevant pair, then t in d_pairs[s].
    */
-  std::map<Node, std::unordered_set<Node, NodeHashFunction> > d_pairs;
+  std::map<Node, std::unordered_set<Node> > d_pairs;
   /**
    * For each (builtin) type, a match trie storing all terms in the domain of
    * d_pairs.
index c76243a464e75f286df1533be943201e2e9bf34c..ec15b926f277c4b43f4769834180b2ec2cef99cd 100644 (file)
@@ -270,8 +270,8 @@ bool BvInstantiator::processAssertions(CegInstantiator* ci,
                                        Node pv,
                                        CegInstEffort effort)
 {
-  std::unordered_map<Node, std::vector<unsigned>, NodeHashFunction>::iterator
-      iti = d_var_to_inst_id.find(pv);
+  std::unordered_map<Node, std::vector<unsigned>>::iterator iti =
+      d_var_to_inst_id.find(pv);
   if (iti == d_var_to_inst_id.end())
   {
     // no bounds
@@ -317,7 +317,7 @@ bool BvInstantiator::processAssertions(CegInstantiator* ci,
 
       // get the slack value introduced for the asserted literal
       Node curr_slack_val;
-      std::unordered_map<Node, Node, NodeHashFunction>::iterator itms =
+      std::unordered_map<Node, Node>::iterator itms =
           d_alit_to_model_slack.find(alit);
       if (itms != d_alit_to_model_slack.end())
       {
@@ -382,12 +382,12 @@ Node BvInstantiator::rewriteAssertionForSolvePv(CegInstantiator* ci,
                                                 Node lit)
 {
   // result of rewriting the visited term
-  std::stack<std::unordered_map<TNode, Node, TNodeHashFunction> > visited;
-  visited.push(std::unordered_map<TNode, Node, TNodeHashFunction>());
+  std::stack<std::unordered_map<TNode, Node>> visited;
+  visited.push(std::unordered_map<TNode, Node>());
   // whether the visited term contains pv
-  std::unordered_map<Node, bool, NodeHashFunction> visited_contains_pv;
-  std::unordered_map<TNode, Node, TNodeHashFunction>::iterator it;
-  std::unordered_map<TNode, Node, TNodeHashFunction> curr_subs;
+  std::unordered_map<Node, bool> visited_contains_pv;
+  std::unordered_map<TNode, Node>::iterator it;
+  std::unordered_map<TNode, Node> curr_subs;
   std::stack<std::stack<TNode> > visit;
   TNode cur;
   visit.push(std::stack<TNode>());
@@ -400,8 +400,7 @@ Node BvInstantiator::rewriteAssertionForSolvePv(CegInstantiator* ci,
 
     if (it == visited.top().end())
     {
-      std::unordered_map<TNode, Node, TNodeHashFunction>::iterator itc =
-          curr_subs.find(cur);
+      std::unordered_map<TNode, Node>::iterator itc = curr_subs.find(cur);
       if (itc != curr_subs.end())
       {
         visited.top()[cur] = itc->second;
@@ -422,7 +421,7 @@ Node BvInstantiator::rewriteAssertionForSolvePv(CegInstantiator* ci,
           // of this witness expression since we are
           // now in the context { cur[0][0] -> bv },
           // hence we push a context here
-          visited.push(std::unordered_map<TNode, Node, TNodeHashFunction>());
+          visited.push(std::unordered_map<TNode, Node>());
           visit.push(std::stack<TNode>());
         }
         visited.top()[cur] = Node::null();
@@ -507,7 +506,7 @@ Node BvInstantiator::rewriteAssertionForSolvePv(CegInstantiator* ci,
   if (Trace.isOn("cegqi-bv-nl"))
   {
     std::vector<TNode> trace_visit;
-    std::unordered_set<TNode, TNodeHashFunction> trace_visited;
+    std::unordered_set<TNode> trace_visited;
 
     trace_visit.push_back(result);
     do
@@ -535,7 +534,7 @@ Node BvInstantiator::rewriteTermForSolvePv(
     Node pv,
     Node n,
     std::vector<Node>& children,
-    std::unordered_map<Node, bool, NodeHashFunction>& contains_pv)
+    std::unordered_map<Node, bool>& contains_pv)
 {
   NodeManager* nm = NodeManager::currentNM();
 
@@ -648,7 +647,7 @@ void BvInstantiatorPreprocess::registerCounterexampleLemma(
     Trace("cegqi-bv-pp") << "-----remove extracts..." << std::endl;
     // map from terms to bitvector extracts applied to that term
     std::map<Node, std::vector<Node> > extract_map;
-    std::unordered_set<TNode, TNodeHashFunction> visited;
+    std::unordered_set<TNode> visited;
     Trace("cegqi-bv-pp-debug2") << "Register ce lemma " << lem << std::endl;
     collectExtracts(lem, extract_map, visited);
     for (std::pair<const Node, std::vector<Node> >& es : extract_map)
@@ -728,8 +727,8 @@ void BvInstantiatorPreprocess::registerCounterexampleLemma(
 
 void BvInstantiatorPreprocess::collectExtracts(
     Node lem,
-    std::map<Node, std::vector<Node> >& extract_map,
-    std::unordered_set<TNode, TNodeHashFunction>& visited)
+    std::map<Node, std::vector<Node>>& extract_map,
+    std::unordered_set<TNode>& visited)
 {
   std::vector<TNode> visit;
   TNode cur;
index a1774de1c19946a2e5b38f241e2b93b545eeb320..cbc73dc2c8ac6ec9886c92f5229fe98e682d1d5e 100644 (file)
@@ -108,16 +108,15 @@ class BvInstantiator : public Instantiator
   /** identifier counter, used to allocate ids to each solve form */
   unsigned d_inst_id_counter;
   /** map from variables to list of solved form ids */
-  std::unordered_map<Node, std::vector<unsigned>, NodeHashFunction>
-      d_var_to_inst_id;
+  std::unordered_map<Node, std::vector<unsigned>> d_var_to_inst_id;
   /** for each solved form id, the term for instantiation */
   std::unordered_map<unsigned, Node> d_inst_id_to_term;
   /** for each solved form id, the corresponding asserted literal */
   std::unordered_map<unsigned, Node> d_inst_id_to_alit;
   /** map from variable to current id we are processing */
-  std::unordered_map<Node, unsigned, NodeHashFunction> d_var_to_curr_inst_id;
+  std::unordered_map<Node, unsigned> d_var_to_curr_inst_id;
   /** the amount of slack we added for asserted literals */
-  std::unordered_map<Node, Node, NodeHashFunction> d_alit_to_model_slack;
+  std::unordered_map<Node, Node> d_alit_to_model_slack;
   //--------------------------------end solved forms
   /** rewrite assertion for solve pv
    *
@@ -137,11 +136,10 @@ class BvInstantiator : public Instantiator
    * where we guarantee that all subterms of terms in children
    * appear in the domain of contains_pv.
    */
-  Node rewriteTermForSolvePv(
-      Node pv,
-      Node n,
-      std::vector<Node>& children,
-      std::unordered_map<Node, bool, NodeHashFunction>& contains_pv);
+  Node rewriteTermForSolvePv(Node pv,
+                             Node n,
+                             std::vector<Node>& children,
+                             std::unordered_map<Node, bool>& contains_pv);
   /** process literal, called from processAssertion
    *
    * lit is the literal to solve for pv that has been rewritten according to
@@ -204,8 +202,8 @@ class BvInstantiatorPreprocess : public InstantiatorPreprocess
    * visited is the terms we've already visited.
    */
   void collectExtracts(Node lem,
-                       std::map<Node, std::vector<Node> >& extract_map,
-                       std::unordered_set<TNode, TNodeHashFunction>& visited);
+                       std::map<Node, std::vector<Node>>& extract_map,
+                       std::unordered_set<TNode>& visited);
 };
 
 }  // namespace quantifiers
index 768ae73a6b31b3ef7fb6af08cd4781c7a65e2c8e..5040125bac6d8592d7edbcec651d75c9bf2c0a46 100644 (file)
@@ -59,10 +59,9 @@ Node getPvCoeff(TNode pv, TNode n)
   return coeff;
 }
 
-Node normalizePvMult(
-    TNode pv,
-    const std::vector<Node>& children,
-    std::unordered_map<Node, bool, NodeHashFunction>& contains_pv)
+Node normalizePvMult(TNode pv,
+                     const std::vector<Node>& children,
+                     std::unordered_map<Node, bool>& contains_pv)
 {
   bool neg, neg_coeff = false;
   bool found_pv = false;
@@ -139,10 +138,9 @@ Node normalizePvMult(
 
 #ifdef CVC5_ASSERTIONS
 namespace {
-bool isLinearPlus(
-    TNode n,
-    TNode pv,
-    std::unordered_map<Node, bool, NodeHashFunction>& contains_pv)
+bool isLinearPlus(TNode n,
+                  TNode pv,
+                  std::unordered_map<Node, bool>& contains_pv)
 {
   Node coeff;
   Assert(n.getAttribute(BvLinearAttribute()));
@@ -163,10 +161,9 @@ bool isLinearPlus(
 }  // namespace
 #endif
 
-Node normalizePvPlus(
-    Node pv,
-    const std::vector<Node>& children,
-    std::unordered_map<Node, bool, NodeHashFunction>& contains_pv)
+Node normalizePvPlus(Node pv,
+                     const std::vector<Node>& children,
+                     std::unordered_map<Node, bool>& contains_pv)
 {
   NodeManager* nm;
   NodeBuilder nb_c(BITVECTOR_PLUS);
@@ -252,10 +249,9 @@ Node normalizePvPlus(
   return result;
 }
 
-Node normalizePvEqual(
-    Node pv,
-    const std::vector<Node>& children,
-    std::unordered_map<Node, bool, NodeHashFunction>& contains_pv)
+Node normalizePvEqual(Node pv,
+                      const std::vector<Node>& children,
+                      std::unordered_map<Node, bool>& contains_pv)
 {
   Assert(children.size() == 2);
 
index 15b13433aee32e5689465a1d2255bd58b01203e5..6be22805dac5f06833cd03573c38ebc6ca143ae4 100644 (file)
@@ -61,10 +61,9 @@ Node getPvCoeff(TNode pv, TNode n);
  * a null node otherwise. If pv does not occur in children it returns a
  * multiplication over children.
  */
-Node normalizePvMult(
-    TNode pv,
-    const std::vector<Node>& children,
-    std::unordered_map<Node, bool, NodeHashFunction>& contains_pv);
+Node normalizePvMult(TNode pv,
+                     const std::vector<Node>& children,
+                     std::unordered_map<Node, bool>& contains_pv);
 
 /**
  * Normalizes the children of a BITVECTOR_PLUS w.r.t. pv. contains_pv marks
@@ -81,10 +80,9 @@ Node normalizePvMult(
  * a null node otherwise. If pv does not occur in children it returns an
  * addition over children.
  */
-Node normalizePvPlus(
-    Node pv,
-    const std::vector<Node>& children,
-    std::unordered_map<Node, bool, NodeHashFunction>& contains_pv);
+Node normalizePvPlus(Node pv,
+                     const std::vector<Node>& children,
+                     std::unordered_map<Node, bool>& contains_pv);
 
 /**
  * Linearize an equality w.r.t. pv such that pv only occurs once. contains_pv
@@ -97,10 +95,9 @@ Node normalizePvPlus(
  *
  *   pv * (-a - 1) = c - b.
  */
-Node normalizePvEqual(
-    Node pv,
-    const std::vector<Node>& children,
-    std::unordered_map<Node, bool, NodeHashFunction>& contains_pv);
+Node normalizePvEqual(Node pv,
+                      const std::vector<Node>& children,
+                      std::unordered_map<Node, bool>& contains_pv);
 
 }  // namespace utils
 }  // namespace quantifiers
index 8a3b22a1fadf9dbebe67b870406868ca51e5eebf..0d85b89466ac9eb22754bc8a96de7b051b2c0298 100644 (file)
@@ -274,7 +274,7 @@ CegHandledStatus CegInstantiator::isCbqiKind(Kind k)
 CegHandledStatus CegInstantiator::isCbqiTerm(Node n)
 {
   CegHandledStatus ret = CEG_HANDLED;
-  std::unordered_set<TNode, TNodeHashFunction> visited;
+  std::unordered_set<TNode> visited;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(n);
@@ -846,7 +846,7 @@ bool CegInstantiator::constructInstantiation(SolvedForm& sf,
   }
   Trace("cegqi-inst-debug") << "[3] try based on assertions." << std::endl;
   d_curr_iphase[pv] = CEG_INST_PHASE_ASSERTION;
-  std::unordered_set<Node, NodeHashFunction> lits;
+  std::unordered_set<Node> lits;
   for (unsigned r = 0; r < 2; r++)
   {
     TheoryId tid = r == 0 ? Theory::theoryOf(pvtn) : THEORY_UF;
@@ -1104,8 +1104,7 @@ bool CegInstantiator::isEligibleForInstantiation(Node n) const
 bool CegInstantiator::canApplyBasicSubstitution( Node n, std::vector< Node >& non_basic ){
   Assert(d_prog_var.find(n) != d_prog_var.end());
   if( !non_basic.empty() ){
-    for (std::unordered_set<Node, NodeHashFunction>::iterator it =
-             d_prog_var[n].begin();
+    for (std::unordered_set<Node>::iterator it = d_prog_var[n].begin();
          it != d_prog_var[n].end();
          ++it)
     {
@@ -1439,7 +1438,7 @@ Node CegInstantiator::getModelValue( Node n ) {
 Node CegInstantiator::getBoundVariable(TypeNode tn)
 {
   unsigned index = 0;
-  std::unordered_map<TypeNode, unsigned, TypeNodeHashFunction>::iterator itb =
+  std::unordered_map<TypeNode, unsigned>::iterator itb =
       d_bound_var_index.find(tn);
   if (itb != d_bound_var_index.end())
   {
@@ -1529,9 +1528,9 @@ void CegInstantiator::registerCounterexampleLemma(Node lem,
   }
 
   // register variables that were introduced during TheoryEngine preprocessing
-  std::unordered_set<Node, NodeHashFunction> ceSyms;
+  std::unordered_set<Node> ceSyms;
   expr::getSymbols(lem, ceSyms);
-  std::unordered_set<Node, NodeHashFunction> qSyms;
+  std::unordered_set<Node> qSyms;
   expr::getSymbols(d_quant, qSyms);
   // all variables that are in counterexample lemma but not in quantified
   // formula
index 0279a72ca6d5613f6431784558a16bd1e7e5ad5d..2c228777d23266c7dd3d3f80ed5a88c351c6a636 100644 (file)
@@ -359,14 +359,11 @@ class CegInstantiator {
   /** cache from nodes to the set of variables it contains
     * (from the quantified formula we are instantiating).
     */
-  std::unordered_map<Node,
-                     std::unordered_set<Node, NodeHashFunction>,
-                     NodeHashFunction>
-      d_prog_var;
+  std::unordered_map<Node, std::unordered_set<Node>> d_prog_var;
   /** cache of the set of terms that we have established are
    * ineligible for instantiation.
     */
-  std::unordered_set<Node, NodeHashFunction> d_inelig;
+  std::unordered_set<Node> d_inelig;
   /** ensures n is in d_prog_var and d_inelig. */
   void computeProgVars(Node n);
   //-------------------------------end globally cached
@@ -379,7 +376,7 @@ class CegInstantiator {
   /** map from types to representatives of that type */
   std::map<TypeNode, std::vector<Node> > d_curr_type_eqc;
   /** solved asserts */
-  std::unordered_set<Node, NodeHashFunction> d_solved_asserts;
+  std::unordered_set<Node> d_solved_asserts;
   /** process assertions
    * This is called once at the beginning of check to
    * set up all necessary information for constructing instantiations,
@@ -389,16 +386,14 @@ class CegInstantiator {
   /** cache bound variables for type returned
    * by getBoundVariable(...).
    */
-  std::unordered_map<TypeNode, std::vector<Node>, TypeNodeHashFunction>
-      d_bound_var;
+  std::unordered_map<TypeNode, std::vector<Node>> d_bound_var;
   /** current index of bound variables for type.
    * The next call to getBoundVariable(...) for
    * type tn returns the d_bound_var_index[tn]^th
    * element of d_bound_var[tn], or a fresh variable
    * if not in bounds.
    */
-  std::unordered_map<TypeNode, unsigned, TypeNodeHashFunction>
-      d_bound_var_index;
+  std::unordered_map<TypeNode, unsigned> d_bound_var_index;
   //-------------------------------end cached per round
 
   //-------------------------------data per theory
@@ -434,7 +429,7 @@ class CegInstantiator {
    */
   std::vector<Node> d_vars;
   /** set form of d_vars */
-  std::unordered_set<Node, NodeHashFunction> d_vars_set;
+  std::unordered_set<Node> d_vars_set;
   /** index of variables reported in instantiation */
   std::vector<unsigned> d_var_order_index;
   /** number of input variables
index 5547409de0b3423b6aeb6fffd46e0760524c6a7d..882f69b855df1e190682374266668c819708976a 100644 (file)
@@ -65,8 +65,8 @@ class InstRewriterCegqi : public InstantiationRewriter
  */
 class InstStrategyCegqi : public QuantifiersModule
 {
-  typedef context::CDHashSet<Node, NodeHashFunction> NodeSet;
-  typedef context::CDHashMap< Node, int, NodeHashFunction> NodeIntMap;
+  typedef context::CDHashSet<Node> NodeSet;
+  typedef context::CDHashMap<Node, int> NodeIntMap;
 
  public:
   InstStrategyCegqi(QuantifiersState& qs,
index 6ae5cf54619de138115103bf17cb9faa01a31a13..a20c370432f199a84fcddc81fa800bb3875fef09 100644 (file)
@@ -55,8 +55,7 @@ bool NestedQe::hasProcessed(Node q) const
   return d_qnqe.find(q) != d_qnqe.end();
 }
 
-bool NestedQe::getNestedQuantification(
-    Node q, std::unordered_set<Node, NodeHashFunction>& nqs)
+bool NestedQe::getNestedQuantification(Node q, std::unordered_set<Node>& nqs)
 {
   expr::getKindSubterms(q[1], kind::FORALL, true, nqs);
   return !nqs.empty();
@@ -64,7 +63,7 @@ bool NestedQe::getNestedQuantification(
 
 bool NestedQe::hasNestedQuantification(Node q)
 {
-  std::unordered_set<Node, NodeHashFunction> nqs;
+  std::unordered_set<Node> nqs;
   return getNestedQuantification(q, nqs);
 }
 
@@ -79,7 +78,7 @@ Node NestedQe::doNestedQe(Node q, bool keepTopLevel)
     inputExists = true;
   }
   Assert(q.getKind() == kind::FORALL);
-  std::unordered_set<Node, NodeHashFunction> nqs;
+  std::unordered_set<Node> nqs;
   if (!getNestedQuantification(q, nqs))
   {
     Trace("cegqi-nested-qe-debug")
index 020d15d3a4be76ecdeeadabd84082ca4ebd5c952..f6e15d4c6dfbccaf0b3ff051f8f546348d6bf859 100644 (file)
@@ -30,7 +30,7 @@ namespace quantifiers {
 
 class NestedQe
 {
-  using NodeNodeMap = context::CDHashMap<Node, Node, NodeHashFunction>;
+  using NodeNodeMap = context::CDHashMap<Node, Node>;
 
  public:
   NestedQe(context::UserContext* u);
@@ -53,8 +53,7 @@ class NestedQe
    * Get nested quantification. Returns true if q has nested quantifiers.
    * Adds each nested quantifier in the body of q to nqs.
    */
-  static bool getNestedQuantification(
-      Node q, std::unordered_set<Node, NodeHashFunction>& nqs);
+  static bool getNestedQuantification(Node q, std::unordered_set<Node>& nqs);
   /**
    * Does quantified formula q have nested quantification?
    */
index e8b5e260ab97f5ad1c4a5c34e10c412b3b8c5294..ef60792a69166be0a2ca0aca86038b13cf9e43af 100644 (file)
@@ -239,10 +239,10 @@ class ConjectureGenerator : public QuantifiersModule
   friend class SubsEqcIndex;
   friend class TermGenerator;
   friend class TermGenEnv;
-  typedef context::CDHashMap< Node, Node, NodeHashFunction > NodeMap;
-  typedef context::CDHashMap< Node, bool, NodeHashFunction > BoolMap;
-//this class maintains a congruence closure for *universal* facts
-private:
+  typedef context::CDHashMap<Node, Node> NodeMap;
+  typedef context::CDHashMap<Node, bool> BoolMap;
+  // this class maintains a congruence closure for *universal* facts
+ private:
   //notification class for equality engine
   class NotifyClass : public eq::EqualityEngineNotify {
     ConjectureGenerator& d_sg;
index 95fae09e8d7ccea4a7bdf2b14a3fd0f3f50af37c..73a894081063bbce14ce2db28a68c38ea7657026 100644 (file)
@@ -90,10 +90,10 @@ void HigherOrderTrigger::collectHoVarApplyTerms(
 void HigherOrderTrigger::collectHoVarApplyTerms(
     Node q, std::vector<Node>& ns, std::map<Node, std::vector<Node> >& apps)
 {
-  std::unordered_map<TNode, Node, TNodeHashFunction> visited;
-  std::unordered_map<TNode, Node, TNodeHashFunction>::iterator it;
+  std::unordered_map<TNode, Node> visited;
+  std::unordered_map<TNode, Node>::iterator it;
   // whether the visited node is a child of a HO_APPLY chain
-  std::unordered_map<TNode, bool, TNodeHashFunction> withinApply;
+  std::unordered_map<TNode, bool> withinApply;
   std::vector<TNode> visit;
   TNode cur;
   for (unsigned i = 0, size = ns.size(); i < size; i++)
index 64f03e7fa485d5bc849090f87844bb4309a32b28..78b2e6c849b493420f17bab4cb8b6267ee7597da 100644 (file)
@@ -145,7 +145,7 @@ class HigherOrderTrigger : public Trigger
   std::map<TNode, std::vector<Node> > d_ho_var_bvs;
   std::map<TNode, Node> d_ho_var_bvl;
   /** the set of types of ho variables */
-  std::unordered_set<TypeNode, TypeNodeHashFunction> d_ho_var_types;
+  std::unordered_set<TypeNode> d_ho_var_types;
   /** add higher-order type predicate lemmas
    *
    * Adds lemmas of the form P( f ), where P is the predicate
index 4ff77bdbf8f16a6d98fc60a0cb8c905fdd514ab3..d5af43242089dbe5f604954f2479899003c01ac9 100644 (file)
@@ -472,10 +472,10 @@ int PatternTermSelector::isInstanceOf(Node n1,
 {
   Assert(n1 != n2);
   int status = 0;
-  std::unordered_set<TNode, TNodeHashFunction> subs_vars;
+  std::unordered_set<TNode> subs_vars;
   std::unordered_set<
       std::pair<TNode, TNode>,
-      PairHashFunction<TNode, TNode, TNodeHashFunction, TNodeHashFunction> >
+      PairHashFunction<TNode, TNode, std::hash<TNode>, std::hash<TNode>>>
       visited;
   std::vector<std::pair<TNode, TNode> > visit;
   std::pair<TNode, TNode> cur;
index c63e2c830563393582e691be61e09ae2e389ad11..3a78819ea0d7565603952b8f18add55477ef739e 100644 (file)
@@ -163,8 +163,8 @@ Node Trigger::ensureGroundTermPreprocessed(Valuation& val,
                                            std::vector<Node>& gts)
 {
   NodeManager* nm = NodeManager::currentNM();
-  std::unordered_map<TNode, Node, TNodeHashFunction> visited;
-  std::unordered_map<TNode, Node, TNodeHashFunction>::iterator it;
+  std::unordered_map<TNode, Node> visited;
+  std::unordered_map<TNode, Node>::iterator it;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(n);
index 0a6ac6a78667a6cee72a16dac19e255be8006f6b..f87ec6435ebd7942361a271db52ee205b96ac53c 100644 (file)
@@ -115,7 +115,7 @@ Node EqualityQuery::getInternalRepresentative(Node a, Node q, size_t index)
     return Node::null();
   }
   // now, make sure that no other member of the class is an instance
-  std::unordered_map<TNode, Node, TNodeHashFunction> cache;
+  std::unordered_map<TNode, Node> cache;
   r_best = getInstance(r_best, eqc, cache);
   // store that this representative was chosen at this point
   if (d_rep_score.find(r_best) == d_rep_score.end())
@@ -142,10 +142,9 @@ Node EqualityQuery::getInternalRepresentative(Node a, Node q, size_t index)
 
 //helper functions
 
-Node EqualityQuery::getInstance(
-    Node n,
-    const std::vector<Node>& eqc,
-    std::unordered_map<TNode, Node, TNodeHashFunction>& cache)
+Node EqualityQuery::getInstance(Node n,
+                                const std::vector<Node>& eqc,
+                                std::unordered_map<TNode, Node>& cache)
 {
   if(cache.find(n) != cache.end()) {
     return cache[n];
index 4809cc6c2327f999d75f2666d4d67a99e7df9a53..f39ff86e3095eb3130a33df04ff684ba4d2a4dc2 100644 (file)
@@ -84,7 +84,9 @@ class EqualityQuery : public QuantifiersUtil
   /** processInferences : will merge equivalence classes in master equality engine, if possible */
   bool processInferences( Theory::Effort e );
   /** node contains */
-  Node getInstance( Node n, const std::vector< Node >& eqc, std::unordered_map<TNode, Node, TNodeHashFunction>& cache );
+  Node getInstance(Node n,
+                   const std::vector<Node>& eqc,
+                   std::unordered_map<TNode, Node>& cache);
   /** get score */
   int32_t getRepScore(Node n, Node f, size_t index, TypeNode v_tn);
 }; /* EqualityQuery */
index a8159bef9a507e76655100a43e58e385bb395d7c..e73323e482c931b9503479e07ed012d0609539e5 100644 (file)
@@ -783,7 +783,7 @@ Node ExtendedRewriter::extendedRewriteBcp(
   // the processing terms
   std::vector<Node> clauses;
   // the terms we have propagated information to
-  std::unordered_set<Node, NodeHashFunction> prop_clauses;
+  std::unordered_set<Node> prop_clauses;
   // the assignment
   std::map<Node, Node> assign;
   std::vector<Node> avars;
@@ -1531,8 +1531,8 @@ Node ExtendedRewriter::partialSubstitute(Node n,
                                          const std::map<Node, Node>& assign,
                                          const std::map<Kind, bool>& rkinds)
 {
-  std::unordered_map<TNode, Node, TNodeHashFunction> visited;
-  std::unordered_map<TNode, Node, TNodeHashFunction>::iterator it;
+  std::unordered_map<TNode, Node> visited;
+  std::unordered_map<TNode, Node>::iterator it;
   std::map<Node, Node>::const_iterator ita;
   std::vector<TNode> visit;
   TNode cur;
index 8e3b9f607bfd3d83d17cd2420a17eeb1783026da..d37e71b72d09246a09f798c10944b5a9ae8a72fe 100644 (file)
@@ -47,9 +47,9 @@ namespace quantifiers {
 
 class BoundedIntegers : public QuantifiersModule
 {
-  typedef context::CDHashMap<Node, bool, NodeHashFunction> NodeBoolMap;
-  typedef context::CDHashMap<Node, int, NodeHashFunction> NodeIntMap;
-  typedef context::CDHashMap<Node, Node, NodeHashFunction> NodeNodeMap;
+  typedef context::CDHashMap<Node, bool> NodeBoolMap;
+  typedef context::CDHashMap<Node, int> NodeIntMap;
+  typedef context::CDHashMap<Node, Node> NodeNodeMap;
   typedef context::CDHashMap<int, bool> IntBoolMap;
 private:
   //for determining bounds
index fd91a94ab877939aac4c522106dd69c8c63d84f4..808db7aec59c715eb64edb0f49bf92e21d1c0203 100644 (file)
@@ -42,7 +42,7 @@ struct ModelBasisArgSort
 {
   std::vector< Node > d_terms;
   // number of arguments that are model-basis terms
-  std::unordered_map<Node, unsigned, NodeHashFunction> d_mba_count;
+  std::unordered_map<Node, unsigned> d_mba_count;
   bool operator() (int i,int j) {
     return (d_mba_count[d_terms[i]] < d_mba_count[d_terms[j]]);
   }
index fdaf18e819e73abcb5eff9552c9c90451a2eeab0..e33d1db6d7d756af11a0c1a8fef9a05e0a5ff799 100644 (file)
@@ -96,7 +96,7 @@ protected:
   std::map<Node, Node > d_quant_cond;
   /** A set of quantified formulas that cannot be handled by model-based
    * quantifier instantiation */
-  std::unordered_set<Node, NodeHashFunction> d_unhandledQuant;
+  std::unordered_set<Node> d_unhandledQuant;
   std::map< TypeNode, Node > d_array_cond;
   std::map< Node, Node > d_array_term_cond;
   std::map< Node, std::vector< int > > d_star_insts;
index a249cf2a878fbb7c79d3dab77a20d6fc7e063a80..beb2a33cdac6ad9df559c13a5b82ebba11a4d7c6 100644 (file)
@@ -55,10 +55,10 @@ Node FunDefEvaluator::evaluate(Node n) const
   Assert(Rewriter::rewrite(n) == n);
   Trace("fd-eval") << "FunDefEvaluator: evaluate " << n << std::endl;
   NodeManager* nm = NodeManager::currentNM();
-  std::unordered_map<TNode, unsigned, TNodeHashFunction> funDefCount;
-  std::unordered_map<TNode, unsigned, TNodeHashFunction>::iterator itCount;
-  std::unordered_map<TNode, Node, TNodeHashFunction> visited;
-  std::unordered_map<TNode, Node, TNodeHashFunction>::iterator it;
+  std::unordered_map<TNode, unsigned> funDefCount;
+  std::unordered_map<TNode, unsigned>::iterator itCount;
+  std::unordered_map<TNode, Node> visited;
+  std::unordered_map<TNode, Node>::iterator it;
   std::map<Node, FunDefInfo>::const_iterator itf;
   std::vector<TNode> visit;
   TNode cur;
index 42bff316ad4c24fd996e6a2d3f5cf70a29a502da..9b410dd082dd2d23aac9b634c729a6fbeb51921d 100644 (file)
@@ -100,8 +100,8 @@ class InstLemmaList
  */
 class Instantiate : public QuantifiersUtil
 {
-  using NodeInstListMap = context::
-      CDHashMap<Node, std::shared_ptr<InstLemmaList>, NodeHashFunction>;
+  using NodeInstListMap =
+      context::CDHashMap<Node, std::shared_ptr<InstLemmaList>>;
 
  public:
   Instantiate(QuantifiersState& qs,
@@ -352,7 +352,7 @@ class Instantiate : public QuantifiersUtil
    * The list of quantified formulas for which the domain of d_c_inst_match_trie
    * is valid.
    */
-  context::CDHashSet<Node, NodeHashFunction> d_c_inst_match_trie_dom;
+  context::CDHashSet<Node> d_c_inst_match_trie_dom;
   /**
    * A CDProof storing instantiation steps.
    */
index b2a807197a47fcc8568fc921f9505b685c35cfd7..fae160aa87fd7fbdb1983287da65fa584569d456 100644 (file)
@@ -50,7 +50,7 @@ Node QuantifiersProofRuleChecker::checkInternal(
     {
       return Node::null();
     }
-    std::unordered_map<Node, Node, NodeHashFunction> subs;
+    std::unordered_map<Node, Node> subs;
     if (!expr::match(exists[1], p, subs))
     {
       return Node::null();
index 1fbf53761130cd378f8b51fb6e22739f7e1a3511..a78f66c5101477f48383c09fbce8e750ec875355 100644 (file)
@@ -34,8 +34,7 @@ void QuantifiersBoundInference::finishInit(BoundedIntegers* b) { d_bint = b; }
 
 bool QuantifiersBoundInference::mayComplete(TypeNode tn)
 {
-  std::unordered_map<TypeNode, bool, TypeNodeHashFunction>::iterator it =
-      d_may_complete.find(tn);
+  std::unordered_map<TypeNode, bool>::iterator it = d_may_complete.find(tn);
   if (it == d_may_complete.end())
   {
     // cache
index 0bcb5937a99994b0890baf6f5934cfbc542eae0d..55e7b0766bc2fa514e8d41642328317ef3eec1a4 100644 (file)
@@ -116,7 +116,7 @@ class QuantifiersBoundInference
   /** Whether finite model finding is enabled */
   bool d_isFmf;
   /** may complete */
-  std::unordered_map<TypeNode, bool, TypeNodeHashFunction> d_may_complete;
+  std::unordered_map<TypeNode, bool> d_may_complete;
   /** The bounded integers module, which may help infer bounds */
   BoundedIntegers* d_bint;
 };
index cff9fde0bdcc3aec5d929105481039876a7cff56..8c4d686311b26537eee0516bbb73cc6ec153a0c8 100644 (file)
@@ -2309,7 +2309,7 @@ std::ostream& operator<<(std::ostream& os, const QuantConflictFind::Effort& e) {
 
 bool QuantConflictFind::isPropagatingInstance(Node n) const
 {
-  std::unordered_set<TNode, TNodeHashFunction> visited;
+  std::unordered_set<TNode> visited;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(n);
index 5a36452fe76f4b404fb119c53f0417e1c273934b..de521cd0790241afabe78bf2a30b754ac80cf541 100644 (file)
@@ -193,8 +193,9 @@ class QuantConflictFind : public QuantifiersModule
 {
   friend class MatchGen;
   friend class QuantInfo;
-  typedef context::CDHashMap<Node, bool, NodeHashFunction> NodeBoolMap;
-private:
+  typedef context::CDHashMap<Node, bool> NodeBoolMap;
+
+ private:
   context::CDO< bool > d_conflict;
   std::map< Kind, Node > d_zero;
   //for storing nodes created during t-constraint solving (prevents memory leaks)
index 06b9c59f56992988a5410d9a05817561a27a754e..18aeec773138a07c7ce44408d41e0bebf7f55880 100644 (file)
@@ -47,7 +47,7 @@ namespace quantifiers {
  * one variable per quantified formula at a time.
  */
 class QuantDSplit : public QuantifiersModule {
-  typedef context::CDHashSet<Node, NodeHashFunction> NodeSet;
+  typedef context::CDHashSet<Node> NodeSet;
 
  public:
   QuantDSplit(QuantifiersState& qs,
index 43a404ff9c56960cae6fb7f6751bc276942c04f0..e53b1ed132db146204ff9946794c8ac589c9b867 100644 (file)
@@ -107,8 +107,8 @@ Node QuantifiersMacros::solve(Node lit, bool reqGround)
 
 bool QuantifiersMacros::containsBadOp(Node n, Node op, bool reqGround)
 {
-  std::unordered_set<TNode, TNodeHashFunction> visited;
-  std::unordered_set<TNode, TNodeHashFunction>::iterator it;
+  std::unordered_set<TNode> visited;
+  std::unordered_set<TNode>::iterator it;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(n);
index 3df5aa65f394370229248a3318b7cc717422e11b..48106b858420fdfea1a0caebaca1cd64b0915cfa 100644 (file)
@@ -1061,7 +1061,7 @@ bool QuantifiersRewriter::getVarElimIneq(Node body,
         {
           // compute variables in itm->first, these are not eligible for
           // elimination
-          std::unordered_set<Node, NodeHashFunction> fvs;
+          std::unordered_set<Node> fvs;
           expr::getFreeVariables(m.first, fvs);
           for (const Node& v : fvs)
           {
@@ -1113,8 +1113,7 @@ bool QuantifiersRewriter::getVarElimIneq(Node body,
   }
   // traverse the body, invalidate variables if they occur in places other than
   // the bounds they occur in
-  std::unordered_map<TNode, std::unordered_set<int>, TNodeHashFunction>
-      evisited;
+  std::unordered_map<TNode, std::unordered_set<int>> evisited;
   std::vector<TNode> evisit;
   std::vector<int> evisit_pol;
   TNode ecur;
@@ -1242,13 +1241,12 @@ Node QuantifiersRewriter::computeVarElimination( Node body, std::vector< Node >&
   return body;
 }
 
-Node QuantifiersRewriter::computePrenex(
-    Node q,
-    Node body,
-    std::unordered_set<Node, NodeHashFunction>& args,
-    std::unordered_set<Node, NodeHashFunction>& nargs,
-    bool pol,
-    bool prenexAgg)
+Node QuantifiersRewriter::computePrenex(Node q,
+                                        Node body,
+                                        std::unordered_set<Node>& args,
+                                        std::unordered_set<Node>& nargs,
+                                        bool pol,
+                                        bool prenexAgg)
 {
   NodeManager* nm = NodeManager::currentNM();
   Kind k = body.getKind();
@@ -1382,8 +1380,8 @@ Node QuantifiersRewriter::computePrenexAgg(Node n,
   }
   else
   {
-    std::unordered_set<Node, NodeHashFunction> argsSet;
-    std::unordered_set<Node, NodeHashFunction> nargsSet;
+    std::unordered_set<Node> argsSet;
+    std::unordered_set<Node> nargsSet;
     Node q;
     Node nn = computePrenex(q, n, argsSet, nargsSet, true, true);
     Assert(n != nn || argsSet.empty());
@@ -1893,7 +1891,7 @@ Node QuantifiersRewriter::computeOperation(Node f,
     }
     else
     {
-      std::unordered_set<Node, NodeHashFunction> argsSet, nargsSet;
+      std::unordered_set<Node> argsSet, nargsSet;
       n = computePrenex(f, n, argsSet, nargsSet, true, false);
       Assert(nargsSet.empty());
       args.insert(args.end(), argsSet.begin(), argsSet.end());
index c2f60c7f9dc72b3910f7f070054138b4b535ad39..cfc4eca2e7276aa1a1e264f4121ffc73c4b03136 100644 (file)
@@ -247,8 +247,8 @@ class QuantifiersRewriter : public TheoryRewriter
    */
   static Node computePrenex(Node q,
                             Node body,
-                            std::unordered_set<Node, NodeHashFunction>& args,
-                            std::unordered_set<Node, NodeHashFunction>& nargs,
+                            std::unordered_set<Node>& args,
+                            std::unordered_set<Node>& nargs,
                             bool pol,
                             bool prenexAgg);
   /**
index 6955245f7235676620929d27a50f9ea110c1b49d..90b30a0168f47747fb9ea9be72366b8ad4b64db5 100644 (file)
@@ -70,7 +70,7 @@ class QueryGenerator : public ExprMiner
 
  private:
   /** cache of all terms registered to this generator */
-  std::unordered_set<Node, NodeHashFunction> d_terms;
+  std::unordered_set<Node> d_terms;
   /** the threshold used by this module for maximum number of sat points */
   unsigned d_deqThresh;
   /**
index cc11d884c5657da1aaebf9d5af872a642b783ade..05492b5b7124c09e45cf08b772fdcd32a928d029 100644 (file)
@@ -285,7 +285,7 @@ bool SingleInvocationPartition::init(std::vector<Node>& funcs,
         Trace("si-prt-debug") << "...normalized invocations to " << cr
                               << std::endl;
         // now must check if it has other bound variables
-        std::unordered_set<Node, NodeHashFunction> fvs;
+        std::unordered_set<Node> fvs;
         expr::getFreeVariables(cr, fvs);
         // bound variables must be contained in the single invocation variables
         for (const Node& bv : fvs)
@@ -316,7 +316,7 @@ bool SingleInvocationPartition::init(std::vector<Node>& funcs,
         Trace("si-prt") << "...not single invocation." << std::endl;
         singleInvocation = false;
         // rename bound variables with maximal overlap with si_vars
-        std::unordered_set<Node, NodeHashFunction> fvs;
+        std::unordered_set<Node> fvs;
         expr::getFreeVariables(cr, fvs);
         std::vector<Node> termsNs;
         std::vector<Node> subsNs;
@@ -349,7 +349,7 @@ bool SingleInvocationPartition::init(std::vector<Node>& funcs,
       Trace("si-prt") << ".....got si=" << singleInvocation
                       << ", result : " << cr << std::endl;
       d_conjuncts[2].push_back(cr);
-      std::unordered_set<Node, NodeHashFunction> fvs;
+      std::unordered_set<Node> fvs;
       expr::getFreeVariables(cr, fvs);
       d_all_vars.insert(fvs.begin(), fvs.end());
       if (singleInvocation)
index 90b8fb3ea52d0efc6e7b07e6d0852419a83cb885..7f8cfc3265d8682731d34765a1b5a6fc7606232a 100644 (file)
@@ -202,7 +202,7 @@ class SingleInvocationPartition
   std::vector<Node> d_si_vars;
 
   /** every free variable of conjuncts[2] */
-  std::unordered_set<Node, NodeHashFunction> d_all_vars;
+  std::unordered_set<Node> d_all_vars;
   /** map from functions to first-order variables that anti-skolemized them */
   std::map<Node, Node> d_func_fo_var;
   /** map from first-order variables to the function it anti-skolemized */
index 90e780c446ba724b4b269055edb14b97767d30a2..c9234db2c13de116162bd13634a436fbab6821bf 100644 (file)
@@ -102,7 +102,7 @@ TrustNode Skolemize::process(Node q)
 
 bool Skolemize::getSkolemConstants(Node q, std::vector<Node>& skolems)
 {
-  std::unordered_map<Node, std::vector<Node>, NodeHashFunction>::iterator it =
+  std::unordered_map<Node, std::vector<Node>>::iterator it =
       d_skolem_constants.find(q);
   if (it != d_skolem_constants.end())
   {
@@ -114,7 +114,7 @@ bool Skolemize::getSkolemConstants(Node q, std::vector<Node>& skolems)
 
 Node Skolemize::getSkolemConstant(Node q, unsigned i)
 {
-  std::unordered_map<Node, std::vector<Node>, NodeHashFunction>::iterator it =
+  std::unordered_map<Node, std::vector<Node>>::iterator it =
       d_skolem_constants.find(q);
   if (it != d_skolem_constants.end())
   {
@@ -326,8 +326,7 @@ Node Skolemize::mkSkolemizedBody(Node f,
 Node Skolemize::getSkolemizedBody(Node f)
 {
   Assert(f.getKind() == FORALL);
-  std::unordered_map<Node, Node, NodeHashFunction>::iterator it =
-      d_skolem_body.find(f);
+  std::unordered_map<Node, Node>::iterator it = d_skolem_body.find(f);
   if (it == d_skolem_body.end())
   {
     std::vector<TypeNode> fvTypes;
@@ -381,8 +380,7 @@ bool Skolemize::isInductionTerm(Node n)
 void Skolemize::getSkolemTermVectors(
     std::map<Node, std::vector<Node> >& sks) const
 {
-  std::unordered_map<Node, std::vector<Node>, NodeHashFunction>::const_iterator
-      itk;
+  std::unordered_map<Node, std::vector<Node>>::const_iterator itk;
   for (const auto& p : d_skolemized)
   {
     Node q = p.first;
index 412f7a0699bc2c59760ee89d531c327fa15429c3..2a09913a94e46f1be7468d237dba0b383772049b 100644 (file)
@@ -65,7 +65,7 @@ class TermRegistry;
  */
 class Skolemize
 {
-  typedef context::CDHashMap<Node, Node, NodeHashFunction> NodeNodeMap;
+  typedef context::CDHashMap<Node, Node> NodeNodeMap;
 
  public:
   Skolemize(QuantifiersState& qs, TermRegistry& tr, ProofNodeManager* pnm);
@@ -146,10 +146,9 @@ class Skolemize
   /** quantified formulas that have been skolemized */
   NodeNodeMap d_skolemized;
   /** map from quantified formulas to the list of skolem constants */
-  std::unordered_map<Node, std::vector<Node>, NodeHashFunction>
-      d_skolem_constants;
+  std::unordered_map<Node, std::vector<Node>> d_skolem_constants;
   /** map from quantified formulas to their skolemized body */
-  std::unordered_map<Node, Node, NodeHashFunction> d_skolem_body;
+  std::unordered_map<Node, Node> d_skolem_body;
   /** Pointer to the proof node manager */
   ProofNodeManager* d_pnm;
   /** Eager proof generator for skolemization lemmas */
index 6b136936309bf80a2b11215cb56adab6f27bcece..a0cebda8e86e823dfbaaba6af490d69edba87ff2 100644 (file)
@@ -508,7 +508,7 @@ bool Cegis::getRefinementEvalLemmas(const std::vector<Node>& vs,
 
   for (unsigned r = 0; r < 2; r++)
   {
-    std::unordered_set<Node, NodeHashFunction>& rlemmas =
+    std::unordered_set<Node>& rlemmas =
         r == 0 ? d_refinement_lemma_unit : d_refinement_lemma_conj;
     for (const Node& lem : rlemmas)
     {
@@ -585,7 +585,7 @@ bool Cegis::checkRefinementEvalLemmas(const std::vector<Node>& vs,
   // Maybe we already evaluated some terms in refinement lemmas.
   // In particular, the example eval cache for f may have some evaluations
   // cached, which we add to evalVisited and pass to the evaluator below.
-  std::unordered_map<Node, Node, NodeHashFunction> evalVisited;
+  std::unordered_map<Node, Node> evalVisited;
   ExampleInfer* ei = d_parent->getExampleInfer();
   for (unsigned i = 0, vsize = vs.size(); i < vsize; i++)
   {
@@ -611,7 +611,7 @@ bool Cegis::checkRefinementEvalLemmas(const std::vector<Node>& vs,
   Evaluator* eval = d_tds->getEvaluator();
   for (unsigned r = 0; r < 2; r++)
   {
-    std::unordered_set<Node, NodeHashFunction>& rlemmas =
+    std::unordered_set<Node>& rlemmas =
         r == 0 ? d_refinement_lemma_unit : d_refinement_lemma_conj;
     for (const Node& lem : rlemmas)
     {
index db2c44ca9823e9886f79d2a7458b084ad29b78bf..b9f593b690ef9e6a73dd8f526f9ed95ff7520cf3 100644 (file)
@@ -107,14 +107,14 @@ class Cegis : public SygusModule
   /** refinement lemmas */
   std::vector<Node> d_refinement_lemmas;
   /** (processed) conjunctions of refinement lemmas that are not unit */
-  std::unordered_set<Node, NodeHashFunction> d_refinement_lemma_conj;
+  std::unordered_set<Node> d_refinement_lemma_conj;
   /** (processed) conjunctions of refinement lemmas that are unit */
-  std::unordered_set<Node, NodeHashFunction> d_refinement_lemma_unit;
+  std::unordered_set<Node> d_refinement_lemma_unit;
   /** substitution entailed by d_refinement_lemma_unit */
   std::vector<Node> d_rl_eval_hds;
   std::vector<Node> d_rl_vals;
   /** all variables appearing in refinement lemmas */
-  std::unordered_set<Node, NodeHashFunction> d_refinement_lemma_vars;
+  std::unordered_set<Node> d_refinement_lemma_vars;
 
   /** adds lem as a refinement lemma */
   void addRefinementLemma(Node lem);
index f94bc2ab2cacaa801f0a6a2d4fc388173bc3edf8..9953c5d05e0abf0cc4c8d015b502fc793cea908a 100644 (file)
@@ -330,7 +330,7 @@ bool CegisCoreConnective::constructSolution(
     {
       // check refinement points
       Node etsrn = d == 0 ? etsr : etsr.negate();
-      std::unordered_set<Node, NodeHashFunction> visited;
+      std::unordered_set<Node> visited;
       std::vector<Node> pt;
       Node rid = cfilter.getRefinementPt(this, etsrn, visited, pt);
       if (!rid.isNull())
@@ -447,7 +447,7 @@ void CegisCoreConnective::Component::addFalseCore(Node id,
 Node CegisCoreConnective::Component::getRefinementPt(
     CegisCoreConnective* p,
     Node n,
-    std::unordered_set<Node, NodeHashFunction>& visited,
+    std::unordered_set<Node>& visited,
     std::vector<Node>& ss)
 {
   std::vector<Node> ctx;
@@ -608,7 +608,7 @@ void CegisCoreConnective::getModel(SmtEngine& smt,
 
 bool CegisCoreConnective::getUnsatCore(
     SmtEngine& smt,
-    const std::unordered_set<Node, NodeHashFunction>& queryAsserts,
+    const std::unordered_set<Node>& queryAsserts,
     std::vector<Node>& uasserts) const
 {
   UnsatCore uc = smt.getUnsatCore();
@@ -656,10 +656,10 @@ Node CegisCoreConnective::evaluate(Node n,
     }
     return nm->mkConst(!expRes);
   }
-  std::unordered_map<Node, Node, NodeHashFunction>& ec = d_eval_cache[n];
+  std::unordered_map<Node, Node>& ec = d_eval_cache[n];
   if (!id.isNull())
   {
-    std::unordered_map<Node, Node, NodeHashFunction>::iterator it = ec.find(id);
+    std::unordered_map<Node, Node>::iterator it = ec.find(id);
     if (it != ec.end())
     {
       return it->second;
@@ -691,7 +691,7 @@ Node CegisCoreConnective::constructSolutionFromPool(Component& ccheck,
                 ? d_true
                 : (asserts.size() == 1 ? asserts[0] : nm->mkNode(AND, asserts));
   std::vector<Node> mvs;
-  std::unordered_set<Node, NodeHashFunction> visited;
+  std::unordered_set<Node> visited;
   bool addSuccess = true;
   // Ensure that the current conjunction evaluates to false on all refinement
   // points. We get refinement points until we have exhausted.
@@ -759,7 +759,7 @@ Node CegisCoreConnective::constructSolutionFromPool(Component& ccheck,
       //   "Let U be a subset of D such that S ^ U ^ ~B is unsat."
       // and uasserts is set to U.
       std::vector<Node> uasserts;
-      std::unordered_set<Node, NodeHashFunction> queryAsserts;
+      std::unordered_set<Node> queryAsserts;
       queryAsserts.insert(ccheck.getFormula());
       queryAsserts.insert(d_sc);
       bool hasQuery = getUnsatCore(*checkSol, queryAsserts, uasserts);
@@ -796,7 +796,7 @@ Node CegisCoreConnective::constructSolutionFromPool(Component& ccheck,
             //   "Let W be a subset of D such that S ^ W is unsat."
             // and uasserts is set to W.
             uasserts.clear();
-            std::unordered_set<Node, NodeHashFunction> queryAsserts2;
+            std::unordered_set<Node> queryAsserts2;
             queryAsserts2.insert(d_sc);
             getUnsatCore(*checkSc, queryAsserts2, uasserts);
             falseCore = true;
index d8f6fb2034c1359b2343967ba1ac4a4742039e7c..baff98de3490477ae5a0a4c932656be85f2a2269 100644 (file)
@@ -260,7 +260,7 @@ class CegisCoreConnective : public Cegis
      */
     Node getRefinementPt(CegisCoreConnective* p,
                          Node n,
-                         std::unordered_set<Node, NodeHashFunction>& visited,
+                         std::unordered_set<Node>& visited,
                          std::vector<Node>& ss);
     /** Get term pool, i.e. pool(A)/pool(B) in the algorithms above */
     void getTermPool(std::vector<Node>& passerts) const;
@@ -349,10 +349,9 @@ class CegisCoreConnective : public Cegis
    * If one of the formulas in queryAsserts was in the unsat core, then this
    * method returns true. Otherwise, this method returns false.
    */
-  bool getUnsatCore(
-      SmtEngine& smt,
-      const std::unordered_set<Node, NodeHashFunction>& queryAsserts,
-      std::vector<Node>& uasserts) const;
+  bool getUnsatCore(SmtEngine& smt,
+                    const std::unordered_set<Node>& queryAsserts,
+                    std::vector<Node>& uasserts) const;
   /**
    * Return the result of checking satisfiability of formula n.
    * If n was satisfiable, then we store the model for d_vars in mvs.
@@ -367,10 +366,7 @@ class CegisCoreConnective : public Cegis
    */
   Node evaluate(Node n, Node id, const std::vector<Node>& mvs);
   /** A cache of the above function */
-  std::unordered_map<Node,
-                     std::unordered_map<Node, Node, NodeHashFunction>,
-                     NodeHashFunction>
-      d_eval_cache;
+  std::unordered_map<Node, std::unordered_map<Node, Node>> d_eval_cache;
   /** The evaluator utility used for the above function */
   Evaluator d_eval;
   //-----------------------------------end for evaluation
index 02d9f31859c9228d78599765143d0f70e56ad27a..3ae34d82c0de3572a77f7daed882d2426c83ea9b 100644 (file)
@@ -74,12 +74,12 @@ void EnumStreamPermutation::reset(Node value)
   }
   // collect variables occurring in value
   std::vector<Node> vars;
-  std::unordered_set<Node, NodeHashFunction> visited;
+  std::unordered_set<Node> visited;
   collectVars(value, vars, visited);
   // partition permutation variables
   d_curr_ind = 0;
   Trace("synth-stream-concrete") << " ..permutting vars :";
-  std::unordered_set<Node, NodeHashFunction> seen_vars;
+  std::unordered_set<Node> seen_vars;
   for (const Node& v_cons : vars)
   {
     Assert(cons_var.find(v_cons) != cons_var.end());
@@ -231,10 +231,9 @@ unsigned EnumStreamPermutation::getVarClassSize(unsigned id) const
   return it->second.size();
 }
 
-void EnumStreamPermutation::collectVars(
-    Node n,
-    std::vector<Node>& vars,
-    std::unordered_set<Node, NodeHashFunction>& visited)
+void EnumStreamPermutation::collectVars(Node n,
+                                        std::vector<Node>& vars,
+                                        std::unordered_set<Node>& visited)
 {
   if (visited.find(n) != visited.end())
   {
index 3e849e9a7a9e0558c74ec1236ffd1ab7fbb69ee5..ea028991bbd0df2225ee4cc0885b5ce6e44f049d 100644 (file)
@@ -82,11 +82,11 @@ class EnumStreamPermutation
   /** value to which we are generating permutations */
   Node d_value;
   /** generated permutations (modulo rewriting) */
-  std::unordered_set<Node, NodeHashFunction> d_perm_values;
+  std::unordered_set<Node> d_perm_values;
   /** retrieves variables occurring in value */
   void collectVars(Node n,
                    std::vector<Node>& vars,
-                   std::unordered_set<Node, NodeHashFunction>& visited);
+                   std::unordered_set<Node>& visited);
   /** Utility for stepwise application of Heap's algorithm for permutation
    *
    * see https://en.wikipedia.org/wiki/Heap%27s_algorithm
@@ -229,7 +229,7 @@ class EnumStreamSubstitution
    */
   Node d_last;
   /** generated combinations */
-  std::unordered_set<Node, NodeHashFunction> d_comb_values;
+  std::unordered_set<Node> d_comb_values;
   /** permutation utility */
   EnumStreamPermutation d_stream_permutations;
   /** Utility for stepwise generation of ordered subsets of size k from n
index 12818685ea895897e3bd08c0ae22d7b37415b5cf..d701fe6d96a0c868c8b62df7f838c790a1dbcdf2 100644 (file)
@@ -41,8 +41,7 @@ bool ExampleInfer::initialize(Node n, const std::vector<Node>& candidates)
     d_examplesOut[v].clear();
     d_examplesTerm[v].clear();
   }
-  std::map<std::pair<bool, bool>, std::unordered_set<Node, NodeHashFunction>>
-      visited;
+  std::map<std::pair<bool, bool>, std::unordered_set<Node>> visited;
   // n is negated conjecture
   if (!collectExamples(n, visited, true, false))
   {
@@ -86,8 +85,7 @@ bool ExampleInfer::initialize(Node n, const std::vector<Node>& candidates)
 
 bool ExampleInfer::collectExamples(
     Node n,
-    std::map<std::pair<bool, bool>, std::unordered_set<Node, NodeHashFunction>>&
-        visited,
+    std::map<std::pair<bool, bool>, std::unordered_set<Node>>& visited,
     bool hasPol,
     bool pol)
 {
index 921e52c3c020b48c84aee6c4a7094428a757e305..d34e32b0ef3ca34a06a439f46d6107b6083c3c45 100644 (file)
@@ -107,8 +107,7 @@ class ExampleInfer
    */
   bool collectExamples(
       Node n,
-      std::map<std::pair<bool, bool>,
-               std::unordered_set<Node, NodeHashFunction>>& visited,
+      std::map<std::pair<bool, bool>, std::unordered_set<Node>>& visited,
       bool hasPol,
       bool pol);
   /** Pointer to the sygus term database */
index 43740708bec354325893a34b77840cb88becdb24..8d303b90cee6f9740a7d290383384b80d3b0b1ea 100644 (file)
@@ -32,7 +32,7 @@ ExampleMinEval::ExampleMinEval(Node n,
   d_vars.insert(d_vars.end(), vars.begin(), vars.end());
 
   // compute its free variables
-  std::unordered_set<Node, NodeHashFunction> fvs;
+  std::unordered_set<Node> fvs;
   expr::getFreeVariables(n, fvs);
   for (size_t i = 0, vsize = vars.size(); i < vsize; i++)
   {
index 8a8fcf64b12b9cda7223fce8ee8d71f202fdd520..19725e08b8e4662a62901eba49405c162bb42687 100644 (file)
@@ -28,8 +28,7 @@ RConsObligationInfo::RConsObligationInfo(Node builtin) : d_builtins({builtin})
 {
 }
 
-const std::unordered_set<Node, NodeHashFunction>&
-RConsObligationInfo::getBuiltins() const
+const std::unordered_set<Node>& RConsObligationInfo::getBuiltins() const
 {
   return d_builtins;
 }
@@ -44,8 +43,8 @@ void RConsObligationInfo::addBuiltin(Node builtin)
   d_builtins.emplace(builtin);
 }
 
-const std::unordered_set<Node, NodeHashFunction>&
-RConsObligationInfo::getCandidateSolutions() const
+const std::unordered_set<Node>& RConsObligationInfo::getCandidateSolutions()
+    const
 {
   return d_candSols;
 }
@@ -55,8 +54,7 @@ void RConsObligationInfo::addCandidateSolutionToWatchSet(Node candSol)
   d_watchSet.emplace(candSol);
 }
 
-const std::unordered_set<Node, NodeHashFunction>&
-RConsObligationInfo::getWatchSet() const
+const std::unordered_set<Node>& RConsObligationInfo::getWatchSet() const
 {
   return d_watchSet;
 }
@@ -66,8 +64,7 @@ std::string RConsObligationInfo::obToString(Node k,
 {
   std::stringstream ss;
   ss << "([";
-  std::unordered_set<Node, NodeHashFunction>::const_iterator it =
-      obInfo.getBuiltins().cbegin();
+  std::unordered_set<Node>::const_iterator it = obInfo.getBuiltins().cbegin();
   ss << *it;
   ++it;
   while (it != obInfo.getBuiltins().cend())
@@ -81,10 +78,9 @@ std::string RConsObligationInfo::obToString(Node k,
 
 void RConsObligationInfo::printCandSols(
     const Node& root,
-    const std::unordered_map<Node, RConsObligationInfo, NodeHashFunction>&
-        obInfo)
+    const std::unordered_map<Node, RConsObligationInfo>& obInfo)
 {
-  std::unordered_set<Node, NodeHashFunction> visited;
+  std::unordered_set<Node> visited;
   std::vector<Node> stack;
   stack.push_back(root);
 
@@ -103,7 +99,7 @@ void RConsObligationInfo::printCandSols(
     for (const Node& j : obInfo.at(k).getCandidateSolutions())
     {
       Trace("sygus-rcons") << datatypes::utils::sygusToBuiltin(j) << " ";
-      std::unordered_set<TNode, TNodeHashFunction> subObs;
+      std::unordered_set<TNode> subObs;
       expr::getVariables(j, subObs);
       for (const TNode& l : subObs)
       {
index f1a48d5613d511688f53f625c369a52df701c3ca..2fd23c5fa9d5d931ea10486f8e2cc0372493ffa7 100644 (file)
@@ -57,7 +57,7 @@ class RConsObligationInfo
   /**
    * @return equivalent builtin terms to reconstruct for this class' obligation
    */
-  const std::unordered_set<Node, NodeHashFunction>& getBuiltins() const;
+  const std::unordered_set<Node>& getBuiltins() const;
 
   /**
    * Add candidate solution to the set of candidate solutions for the
@@ -70,8 +70,7 @@ class RConsObligationInfo
   /**
    * @return set of candidate solutions for this class' obligation
    */
-  const std::unordered_set<Node, NodeHashFunction>& getCandidateSolutions()
-      const;
+  const std::unordered_set<Node>& getCandidateSolutions() const;
 
   /**
    * Add candidate solution to the set of candidate solutions waiting for the
@@ -85,7 +84,7 @@ class RConsObligationInfo
    * @return set of candidate solutions waiting for this class' obligation
    * to be solved
    */
-  const std::unordered_set<Node, NodeHashFunction>& getWatchSet() const;
+  const std::unordered_set<Node>& getWatchSet() const;
 
   /**
    * Return a string representation of an obligation.
@@ -120,8 +119,7 @@ class RConsObligationInfo
    */
   static void printCandSols(
       const Node& root,
-      const std::unordered_map<Node, RConsObligationInfo, NodeHashFunction>&
-          obInfo);
+      const std::unordered_map<Node, RConsObligationInfo>& obInfo);
 
  private:
   /** Equivalent builtin terms for this class' obligation.
@@ -129,7 +127,7 @@ class RConsObligationInfo
    * To solve the obligation, one of these builtin terms must be reconstructed
    * in the specified grammar (sygus datatype type) of the obligation.
    */
-  std::unordered_set<Node, NodeHashFunction> d_builtins;
+  std::unordered_set<Node> d_builtins;
   /** A set of candidate solutions to this class' obligation.
    *
    * Each candidate solution is a sygus datatype term containing skolem subterms
@@ -143,7 +141,7 @@ class RConsObligationInfo
    * where c_z1 and c_z2 are skolems. Notice that `d_candSols` may contain a
    * pure term that solves the obligation ((c_+ c_x c_y) in this example).
    */
-  std::unordered_set<Node, NodeHashFunction> d_candSols;
+  std::unordered_set<Node> d_candSols;
   /** A set of candidate solutions waiting for this class' obligation to
    * be solved.
    *
@@ -151,7 +149,7 @@ class RConsObligationInfo
    * the watch-set of c_z2. Similarly, (c_+ c_z1 c_z2) and (c_+ c_z1 c_y) are in
    * the watch-set of c_z1.
    */
-  std::unordered_set<Node, NodeHashFunction> d_watchSet;
+  std::unordered_set<Node> d_watchSet;
 };
 
 }  // namespace quantifiers
index d1d38c3f324a32e814faee23ce7bbb5f641ff6b3..89c6444a5af132afbea8dad709f148b44fe3eba8 100644 (file)
@@ -93,7 +93,7 @@ class RConsTypeInfo
    * possible to have multiple obligations to reconstruct the same builtin term
    * from different sygus datatype types.
    */
-  std::unordered_map<Node, Node, NodeHashFunction> d_ob;
+  std::unordered_map<Node, Node> d_ob;
 };
 
 }  // namespace quantifiers
index 78cb0dbb17eec9e76db90c16ce2c7d704b5f02fb..fc7e7a1b9881deeb8f38fc066fe69e7a09f2fc15 100644 (file)
@@ -46,7 +46,7 @@ Node SygusAbduct::mkAbductionConjecture(const std::string& name,
 {
   NodeManager* nm = NodeManager::currentNM();
   SkolemManager* sm = nm->getSkolemManager();
-  std::unordered_set<Node, NodeHashFunction> symset;
+  std::unordered_set<Node> symset;
   for (size_t i = 0, size = asserts.size(); i < size; i++)
   {
     expr::getSymbols(asserts[i], symset);
index 83a4276abd3a4cd53db228a55564a184c82c61b1..0cf92b37327173036da8b7dcda6b440e9ccd36bc 100644 (file)
@@ -1084,8 +1084,8 @@ Node SygusEnumerator::TermEnumMaster::convertShape(
     Node n, std::map<TypeNode, int>& vcounter)
 {
   NodeManager* nm = NodeManager::currentNM();
-  std::unordered_map<TNode, Node, TNodeHashFunction> visited;
-  std::unordered_map<TNode, Node, TNodeHashFunction>::iterator it;
+  std::unordered_map<TNode, Node> visited;
+  std::unordered_map<TNode, Node>::iterator it;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(n);
index c7efae3bb418c473592ed8f8a8bb955bd20762c2..35510895771e16cd92bbd4abd62e889ae9abdc03 100644 (file)
@@ -204,7 +204,7 @@ class SygusEnumerator : public EnumValGenerator
     /** the list of sygus terms we have enumerated */
     std::vector<Node> d_terms;
     /** the set of builtin terms corresponding to the above list */
-    std::unordered_set<Node, NodeHashFunction> d_bterms;
+    std::unordered_set<Node> d_bterms;
     /**
      * The index of first term whose size is greater than or equal to that size,
      * if it exists.
@@ -501,7 +501,7 @@ class SygusEnumerator : public EnumValGenerator
    * lemma that entails ~is-C( d_enum ) was registered to
    * TermDbSygus::registerSymBreakLemma.
    */
-  std::unordered_set<Node, NodeHashFunction> d_sbExcTlCons;
+  std::unordered_set<Node> d_sbExcTlCons;
   //-------------------------------- end externally specified symmetry breaking
 };
 
index 434118af092e67c5459e8a0526e459eee5be2623..bae6f632772a73266476d3494768107b9715236f 100644 (file)
@@ -61,7 +61,7 @@ class EnumValGeneratorBasic : public EnumValGenerator
   /** the current term */
   Node d_currTerm;
   /** cache of (enumerated) builtin values we have enumerated so far */
-  std::unordered_set<Node, NodeHashFunction> d_cache;
+  std::unordered_set<Node> d_cache;
 };
 
 }  // namespace quantifiers
index aff145322dcfe7f008a1ece0e5d8433aded68c30..0ef1e7f17ca84177bfcf52846b2a183792fc2b33 100644 (file)
@@ -76,8 +76,7 @@ void SygusEvalUnfold::registerModelValue(Node a,
                                          std::vector<Node>& vals,
                                          std::vector<Node>& exps)
 {
-  std::map<Node, std::unordered_set<Node, NodeHashFunction> >::iterator its =
-      d_subterms.find(a);
+  std::map<Node, std::unordered_set<Node> >::iterator its = d_subterms.find(a);
   if (its == d_subterms.end())
   {
     return;
index c9a0b0ba5e6ebfe61fe173000df144adbe6a46d7..bb181996a13cf5793d2ad201cacd7058c103a8cf 100644 (file)
@@ -132,7 +132,7 @@ class SygusEvalUnfold
   /** sygus term database associated with this utility */
   TermDbSygus* d_tds;
   /** the set of evaluation terms we have already processed */
-  std::unordered_set<Node, NodeHashFunction> d_eval_processed;
+  std::unordered_set<Node> d_eval_processed;
   /** map from evaluation heads to evaluation function applications */
   std::map<Node, std::vector<Node> > d_evals;
   /**
@@ -150,7 +150,7 @@ class SygusEvalUnfold
    * This maps anchor terms to the set of shared selector chains with
    * them as an anchor, for example x may map to { x, x.1, x.2, x.1.1 }.
    */
-  std::map<Node, std::unordered_set<Node, NodeHashFunction> > d_subterms;
+  std::map<Node, std::unordered_set<Node> > d_subterms;
 };
 
 }  // namespace quantifiers
index a532e6cadf421341a147cc47064256fe1b6305d6..263b36abf78a617fbfed1ed0b8f53a6a03b927da 100644 (file)
@@ -58,11 +58,10 @@ bool CegGrammarConstructor::hasSyntaxRestrictions(Node q)
 }
 
 void CegGrammarConstructor::collectTerms(
-    Node n,
-    std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>>& consts)
+    Node n, std::map<TypeNode, std::unordered_set<Node>>& consts)
 {
-  std::unordered_map<TNode, bool, TNodeHashFunction> visited;
-  std::unordered_map<TNode, bool, TNodeHashFunction>::iterator it;
+  std::unordered_map<TNode, bool> visited;
+  std::unordered_map<TNode, bool>::iterator it;
   std::stack<TNode> visit;
   TNode cur;
   visit.push(n);
@@ -100,13 +99,13 @@ Node CegGrammarConstructor::process(Node q,
   // now, construct the grammar
   Trace("cegqi") << "SynthConjecture : convert to deep embedding..."
                  << std::endl;
-  std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>> extra_cons;
+  std::map<TypeNode, std::unordered_set<Node>> extra_cons;
   if( options::sygusAddConstGrammar() ){
     Trace("cegqi") << "SynthConjecture : collect constants..." << std::endl;
     collectTerms( q[1], extra_cons );
   }
-  std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>> exc_cons;
-  std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>> inc_cons;
+  std::map<TypeNode, std::unordered_set<Node>> exc_cons;
+  std::map<TypeNode, std::unordered_set<Node>> inc_cons;
 
   NodeManager* nm = NodeManager::currentNM();
 
@@ -148,7 +147,7 @@ Node CegGrammarConstructor::process(Node q,
       // check which arguments are irrelevant
       std::unordered_set<unsigned> arg_irrelevant;
       d_parent->getProcess()->getIrrelevantArgs(sf, arg_irrelevant);
-      std::unordered_set<Node, NodeHashFunction> term_irlv;
+      std::unordered_set<Node> term_irlv;
       // convert to term
       for (const unsigned& arg : arg_irrelevant)
       {
@@ -279,8 +278,8 @@ Node CegGrammarConstructor::process(Node q,
 Node CegGrammarConstructor::convertToEmbedding(Node n)
 {
   NodeManager* nm = NodeManager::currentNM();
-  std::unordered_map<TNode, Node, TNodeHashFunction> visited;
-  std::unordered_map<TNode, Node, TNodeHashFunction>::iterator it;
+  std::unordered_map<TNode, Node> visited;
+  std::unordered_map<TNode, Node>::iterator it;
   std::stack<TNode> visit;
   TNode cur;
   visit.push(n);
@@ -552,12 +551,10 @@ void CegGrammarConstructor::mkSygusDefaultGrammar(
     TypeNode range,
     Node bvl,
     const std::string& fun,
-    std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>>& extra_cons,
-    std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>>&
-        exclude_cons,
-    const std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>>&
-        include_cons,
-    std::unordered_set<Node, NodeHashFunction>& term_irrelevant,
+    std::map<TypeNode, std::unordered_set<Node>>& extra_cons,
+    std::map<TypeNode, std::unordered_set<Node>>& exclude_cons,
+    const std::map<TypeNode, std::unordered_set<Node>>& include_cons,
+    std::unordered_set<Node>& term_irrelevant,
     std::vector<SygusDatatypeGenerator>& sdts,
     std::set<TypeNode>& unres)
 {
@@ -601,8 +598,7 @@ void CegGrammarConstructor::mkSygusDefaultGrammar(
   // create placeholders for collected types
   std::vector<TypeNode> unres_types;
   std::map<TypeNode, TypeNode> type_to_unres;
-  std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>>::const_iterator
-      itc;
+  std::map<TypeNode, std::unordered_set<Node>>::const_iterator itc;
   // maps types to the index of its "any term" grammar construction
   std::map<TypeNode, std::pair<unsigned, bool>> typeToGAnyTerm;
   options::SygusGrammarConsMode sgcm = options::sygusGrammarConsMode();
@@ -726,12 +722,11 @@ void CegGrammarConstructor::mkSygusDefaultGrammar(
     }
     else
     {
-      std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>>::iterator
-          itec = extra_cons.find(types[i]);
+      std::map<TypeNode, std::unordered_set<Node>>::iterator itec =
+          extra_cons.find(types[i]);
       if (itec != extra_cons.end())
       {
-        for (std::unordered_set<Node, NodeHashFunction>::iterator set_it =
-                 itec->second.begin();
+        for (std::unordered_set<Node>::iterator set_it = itec->second.begin();
              set_it != itec->second.end();
              ++set_it)
         {
@@ -1493,16 +1488,14 @@ TypeNode CegGrammarConstructor::mkSygusDefaultType(
     TypeNode range,
     Node bvl,
     const std::string& fun,
-    std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>>& extra_cons,
-    std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>>&
-        exclude_cons,
-    std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>>&
-        include_cons,
-    std::unordered_set<Node, NodeHashFunction>& term_irrelevant)
+    std::map<TypeNode, std::unordered_set<Node>>& extra_cons,
+    std::map<TypeNode, std::unordered_set<Node>>& exclude_cons,
+    std::map<TypeNode, std::unordered_set<Node>>& include_cons,
+    std::unordered_set<Node>& term_irrelevant)
 {
   Trace("sygus-grammar-def") << "*** Make sygus default type " << range << ", make datatypes..." << std::endl;
-  for (std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>>::iterator
-           it = extra_cons.begin();
+  for (std::map<TypeNode, std::unordered_set<Node>>::iterator it =
+           extra_cons.begin();
        it != extra_cons.end();
        ++it)
   {
index 8745f7d6156c195304ac3ab904a4ddcd39f71256..a743bed2fee5406ec3ec4349a1e236669b525561 100644 (file)
@@ -111,12 +111,10 @@ public:
      TypeNode range,
      Node bvl,
      const std::string& fun,
-     std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>>& extra_cons,
-     std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>>&
-         exclude_cons,
-     std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>>&
-         include_cons,
-     std::unordered_set<Node, NodeHashFunction>& term_irrelevant);
+     std::map<TypeNode, std::unordered_set<Node>>& extra_cons,
+     std::map<TypeNode, std::unordered_set<Node>>& exclude_cons,
+     std::map<TypeNode, std::unordered_set<Node>>& include_cons,
+     std::unordered_set<Node>& term_irrelevant);
 
  /**
   * Make the default sygus datatype type corresponding to builtin type range.
@@ -125,10 +123,10 @@ public:
                                     Node bvl,
                                     const std::string& fun)
  {
-   std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>> extra_cons;
-   std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>> exclude_cons;
-   std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>> include_cons;
-   std::unordered_set<Node, NodeHashFunction> term_irrelevant;
+   std::map<TypeNode, std::unordered_set<Node>> extra_cons;
+   std::map<TypeNode, std::unordered_set<Node>> exclude_cons;
+   std::map<TypeNode, std::unordered_set<Node>> include_cons;
+   std::unordered_set<Node> term_irrelevant;
    return mkSygusDefaultType(range,
                              bvl,
                              fun,
@@ -183,9 +181,8 @@ public:
   /** is the syntax restricted? */
   bool d_is_syntax_restricted;
   /** collect terms */
-  void collectTerms(
-      Node n,
-      std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>>& consts);
+  void collectTerms(Node n,
+                    std::map<TypeNode, std::unordered_set<Node>>& consts);
   //---------------- grammar construction
   /** A class for generating sygus datatypes */
   class SygusDatatypeGenerator
@@ -211,12 +208,12 @@ public:
     /** Should we include constructor with operator op? */
     bool shouldInclude(Node op) const;
     /** The constructors that should be excluded. */
-    std::unordered_set<Node, NodeHashFunction> d_exclude_cons;
+    std::unordered_set<Node> d_exclude_cons;
     /**
      * If this set is non-empty, then only include variables and constructors
      * from it.
      */
-    std::unordered_set<Node, NodeHashFunction> d_include_cons;
+    std::unordered_set<Node> d_include_cons;
     /** The sygus datatype we are generating. */
     SygusDatatype d_sdt;
   };
@@ -236,13 +233,10 @@ public:
       TypeNode range,
       Node bvl,
       const std::string& fun,
-      std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>>&
-          extra_cons,
-      std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>>&
-          exclude_cons,
-      const std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>>&
-          include_cons,
-      std::unordered_set<Node, NodeHashFunction>& term_irrelevant,
+      std::map<TypeNode, std::unordered_set<Node>>& extra_cons,
+      std::map<TypeNode, std::unordered_set<Node>>& exclude_cons,
+      const std::map<TypeNode, std::unordered_set<Node>>& include_cons,
+      std::unordered_set<Node>& term_irrelevant,
       std::vector<SygusDatatypeGenerator>& sdts,
       std::set<TypeNode>& unres);
 
index 3c8320d8c98002bcfa24126554cb8c29e6f4d4fe..426ad07ef91f771a7313e57e628660bf1ace8146 100644 (file)
@@ -38,8 +38,8 @@ void SygusInterpol::collectSymbols(const std::vector<Node>& axioms,
                                    const Node& conj)
 {
   Trace("sygus-interpol-debug") << "Collect symbols..." << std::endl;
-  std::unordered_set<Node, NodeHashFunction> symSetAxioms;
-  std::unordered_set<Node, NodeHashFunction> symSetConj;
+  std::unordered_set<Node> symSetAxioms;
+  std::unordered_set<Node> symSetConj;
   for (size_t i = 0, size = axioms.size(); i < size; i++)
   {
     expr::getSymbols(axioms[i], symSetAxioms);
@@ -96,7 +96,7 @@ void SygusInterpol::createVariables(bool needsShared)
 void SygusInterpol::getIncludeCons(
     const std::vector<Node>& axioms,
     const Node& conj,
-    std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>>& result)
+    std::map<TypeNode, std::unordered_set<Node>>& result)
 {
   NodeManager* nm = NodeManager::currentNM();
   Assert(options::produceInterpols() != options::ProduceInterpols::NONE);
@@ -116,38 +116,35 @@ void SygusInterpol::getIncludeCons(
   else if (options::produceInterpols() == options::ProduceInterpols::SHARED)
   {
     // Get operators from axioms
-    std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>>
-        include_cons_axioms;
+    std::map<TypeNode, std::unordered_set<Node>> include_cons_axioms;
     Node tmpAssumptions =
         (axioms.size() == 1 ? axioms[0] : nm->mkNode(kind::AND, axioms));
     expr::getOperatorsMap(tmpAssumptions, include_cons_axioms);
 
     // Get operators from conj
-    std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>>
-        include_cons_conj;
+    std::map<TypeNode, std::unordered_set<Node>> include_cons_conj;
     expr::getOperatorsMap(conj, include_cons_conj);
 
     // Compute intersection
-    for (std::map<TypeNode,
-                  std::unordered_set<Node, NodeHashFunction>>::iterator it =
+    for (std::map<TypeNode, std::unordered_set<Node>>::iterator it =
              include_cons_axioms.begin();
          it != include_cons_axioms.end();
          it++)
     {
       TypeNode tn = it->first;
-      std::unordered_set<Node, NodeHashFunction> axiomsOps = it->second;
-      std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>>::iterator
-          concIter = include_cons_conj.find(tn);
+      std::unordered_set<Node> axiomsOps = it->second;
+      std::map<TypeNode, std::unordered_set<Node>>::iterator concIter =
+          include_cons_conj.find(tn);
       if (concIter != include_cons_conj.end())
       {
-        std::unordered_set<Node, NodeHashFunction> conjOps = concIter->second;
+        std::unordered_set<Node> conjOps = concIter->second;
         for (const Node& n : axiomsOps)
         {
           if (conjOps.find(n) != conjOps.end())
           {
             if (result.find(tn) == result.end())
             {
-              result[tn] = std::unordered_set<Node, NodeHashFunction>();
+              result[tn] = std::unordered_set<Node>();
             }
             result[tn].insert(n);
           }
@@ -184,11 +181,11 @@ TypeNode SygusInterpol::setSynthGrammar(const TypeNode& itpGType,
   else
   {
     // set default grammar
-    std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>> extra_cons;
-    std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>> exclude_cons;
-    std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>> include_cons;
+    std::map<TypeNode, std::unordered_set<Node>> extra_cons;
+    std::map<TypeNode, std::unordered_set<Node>> exclude_cons;
+    std::map<TypeNode, std::unordered_set<Node>> include_cons;
     getIncludeCons(axioms, conj, include_cons);
-    std::unordered_set<Node, NodeHashFunction> terms_irrelevant;
+    std::unordered_set<Node> terms_irrelevant;
     itpGTypeS = CegGrammarConstructor::mkSygusDefaultType(
         NodeManager::currentNM()->booleanType(),
         d_ibvlShared,
index c96f23e00eadb32054360d0d713013002cec26e0..07f5ed4adb388180b7b5494dabb354f1f55a8cfd 100644 (file)
@@ -122,10 +122,9 @@ class SygusInterpol
    * @param conj input argument
    * @param result the return value
    */
-  void getIncludeCons(
-      const std::vector<Node>& axioms,
-      const Node& conj,
-      std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>>& result);
+  void getIncludeCons(const std::vector<Node>& axioms,
+                      const Node& conj,
+                      std::map<TypeNode, std::unordered_set<Node>>& result);
 
   /**
    * Set up the grammar for the interpol-to-synthesis.
@@ -180,7 +179,7 @@ class SygusInterpol
   /**
    * unordered set for shared symbols between axioms and conjecture.
    */
-  std::unordered_set<Node, NodeHashFunction> d_symSetShared;
+  std::unordered_set<Node> d_symSetShared;
   /**
    * free variables created from d_syms.
    */
index 966d341c1df8d676c45869950463267c7f47ac5d..78f5c49e65ebe7771559d2af52d8276a198076d7 100644 (file)
@@ -57,7 +57,7 @@ Node EvalSygusInvarianceTest::doEvaluateWithUnfolding(TermDbSygus* tds, Node n)
 bool EvalSygusInvarianceTest::invariant(TermDbSygus* tds, Node nvn, Node x)
 {
   TNode tnvn = nvn;
-  std::unordered_map<TNode, TNode, TNodeHashFunction> cache;
+  std::unordered_map<TNode, TNode> cache;
   for (const Node& c : d_terms)
   {
     Node conj_subs = c.substitute(d_var, tnvn, cache);
index 0fc6105809596b07e0c9ea6c7c08024fcf89c62b..ca5f057b131459c44680f9018c6049c06d78fadd 100644 (file)
@@ -138,7 +138,7 @@ class EvalSygusInvarianceTest : public SygusInvarianceTest
    */
   bool d_is_conjunctive;
   /** cache of n -> the simplified form of eval( n ) */
-  std::unordered_map<Node, Node, NodeHashFunction> d_visited;
+  std::unordered_map<Node, Node> d_visited;
 };
 
 /** EquivSygusInvarianceTest
index 3f802c9547dac8b9c3d871e3c78e353a3f3857f0..f5cadc6076b94d2519639e41c919ec8e79e6c89b 100644 (file)
@@ -36,8 +36,7 @@ void SynthConjectureProcessFun::init(Node f)
   Assert(f.getType().isFunction());
 
   // initialize the arguments
-  std::unordered_map<TypeNode, unsigned, TypeNodeHashFunction>
-      type_to_init_deq_id;
+  std::unordered_map<TypeNode, unsigned> type_to_init_deq_id;
   std::vector<TypeNode> argTypes = f.getType().getArgTypes();
   for (unsigned j = 0; j < argTypes.size(); j++)
   {
@@ -77,8 +76,7 @@ bool SynthConjectureProcessFun::isArgVar(Node n, unsigned& arg_index)
 {
   if (n.isVar())
   {
-    std::unordered_map<Node, unsigned, NodeHashFunction>::iterator ita =
-        d_arg_var_num.find(n);
+    std::unordered_map<Node, unsigned>::iterator ita = d_arg_var_num.find(n);
     if (ita != d_arg_var_num.end())
     {
       arg_index = ita->second;
@@ -90,13 +88,11 @@ bool SynthConjectureProcessFun::isArgVar(Node n, unsigned& arg_index)
 
 Node SynthConjectureProcessFun::inferDefinition(
     Node n,
-    std::unordered_map<Node, unsigned, NodeHashFunction>& term_to_arg_carry,
-    std::unordered_map<Node,
-                       std::unordered_set<Node, NodeHashFunction>,
-                       NodeHashFunction>& free_vars)
+    std::unordered_map<Node, unsigned>& term_to_arg_carry,
+    std::unordered_map<Node, std::unordered_set<Node>>& free_vars)
 {
-  std::unordered_map<TNode, Node, TNodeHashFunction> visited;
-  std::unordered_map<TNode, Node, TNodeHashFunction>::iterator it;
+  std::unordered_map<TNode, Node> visited;
+  std::unordered_map<TNode, Node>::iterator it;
   std::stack<TNode> visit;
   TNode cur;
   visit.push(n);
@@ -115,7 +111,7 @@ Node SynthConjectureProcessFun::inferDefinition(
       else
       {
         // if it is term used by another argument, use it
-        std::unordered_map<Node, unsigned, NodeHashFunction>::iterator itt =
+        std::unordered_map<Node, unsigned>::iterator itt =
             term_to_arg_carry.find(cur);
         if (itt != term_to_arg_carry.end())
         {
@@ -185,7 +181,7 @@ unsigned SynthConjectureProcessFun::assignRelevantDef(
   }
   unsigned rid = args[id];
   // for merging previously equivalent definitions
-  std::unordered_map<Node, unsigned, NodeHashFunction> prev_defs;
+  std::unordered_map<Node, unsigned> prev_defs;
   for (unsigned j = 0; j < args.size(); j++)
   {
     unsigned i = args[j];
@@ -199,8 +195,7 @@ unsigned SynthConjectureProcessFun::assignRelevantDef(
       else
       {
         Node t = d_arg_props[i].d_template;
-        std::unordered_map<Node, unsigned, NodeHashFunction>::iterator itt =
-            prev_defs.find(t);
+        std::unordered_map<Node, unsigned>::iterator itt = prev_defs.find(t);
         if (itt != prev_defs.end())
         {
           // merge previously equivalent definitions
@@ -254,10 +249,8 @@ void SynthConjectureProcessFun::processTerms(
     std::vector<Node>& ns,
     std::vector<Node>& ks,
     Node nf,
-    std::unordered_set<Node, NodeHashFunction>& synth_fv,
-    std::unordered_map<Node,
-                       std::unordered_set<Node, NodeHashFunction>,
-                       NodeHashFunction>& free_vars)
+    std::unordered_set<Node>& synth_fv,
+    std::unordered_map<Node, std::unordered_set<Node>>& free_vars)
 {
   Assert(ns.size() == ks.size());
   Trace("sygus-process-arg-deps") << "Process " << ns.size()
@@ -266,14 +259,14 @@ void SynthConjectureProcessFun::processTerms(
 
   // get the relevant variables
   // relevant variables are those that appear in the body of the conjunction
-  std::unordered_set<Node, NodeHashFunction> rlv_vars;
+  std::unordered_set<Node> rlv_vars;
   Assert(free_vars.find(nf) != free_vars.end());
   rlv_vars = free_vars[nf];
 
   // get the single occurrence variables
   // single occurrence variables are those that appear in only one position,
   // as an argument to the function-to-synthesize.
-  std::unordered_map<Node, bool, NodeHashFunction> single_occ_variables;
+  std::unordered_map<Node, bool> single_occ_variables;
   for (unsigned index = 0; index < ns.size(); index++)
   {
     Node n = ns[index];
@@ -282,7 +275,7 @@ void SynthConjectureProcessFun::processTerms(
       Node nn = n[i];
       if (nn.isVar())
       {
-        std::unordered_map<Node, bool, NodeHashFunction>::iterator its =
+        std::unordered_map<Node, bool>::iterator its =
             single_occ_variables.find(nn);
         if (its == single_occ_variables.end())
         {
@@ -296,12 +289,10 @@ void SynthConjectureProcessFun::processTerms(
       }
       else
       {
-        std::unordered_map<Node,
-                           std::unordered_set<Node, NodeHashFunction>,
-                           NodeHashFunction>::iterator itf = free_vars.find(nn);
+        std::unordered_map<Node, std::unordered_set<Node>>::iterator itf =
+            free_vars.find(nn);
         Assert(itf != free_vars.end());
-        for (std::unordered_set<Node, NodeHashFunction>::iterator itfv =
-                 itf->second.begin();
+        for (std::unordered_set<Node>::iterator itfv = itf->second.begin();
              itfv != itf->second.end();
              ++itfv)
         {
@@ -327,10 +318,9 @@ void SynthConjectureProcessFun::processTerms(
     std::unordered_map<unsigned, Node> n_arg_map;
     // terms to the argument that is carrying it.
     // the arguments in the range of this map must be marked as relevant.
-    std::unordered_map<Node, unsigned, NodeHashFunction> term_to_arg_carry;
+    std::unordered_map<Node, unsigned> term_to_arg_carry;
     // map of terms to (unprocessed) arguments where it occurs
-    std::unordered_map<Node, std::vector<unsigned>, NodeHashFunction>
-        term_to_args;
+    std::unordered_map<Node, std::vector<unsigned>> term_to_args;
 
     // initialize
     for (unsigned a = 0; a < n.getNumChildren(); a++)
@@ -408,8 +398,8 @@ void SynthConjectureProcessFun::processTerms(
     // list of all arguments
     std::vector<Node> arg_list;
     // now look at the terms for unprocessed arguments
-    for (std::unordered_map<Node, std::vector<unsigned>, NodeHashFunction>::
-             iterator it = term_to_args.begin();
+    for (std::unordered_map<Node, std::vector<unsigned>>::iterator it =
+             term_to_args.begin();
          it != term_to_args.end();
          ++it)
     {
@@ -454,8 +444,8 @@ void SynthConjectureProcessFun::processTerms(
       {
         infer_def_t = Node::null();
         // see if we can infer a definition
-        for (std::unordered_map<Node, std::vector<unsigned>, NodeHashFunction>::
-                 iterator it = term_to_args.begin();
+        for (std::unordered_map<Node, std::vector<unsigned>>::iterator it =
+                 term_to_args.begin();
              it != term_to_args.end();
              ++it)
         {
@@ -483,8 +473,8 @@ void SynthConjectureProcessFun::processTerms(
       while (arg_list_counter < arg_list.size() && !success)
       {
         Node curr = arg_list[arg_list_counter];
-        std::unordered_map<Node, std::vector<unsigned>, NodeHashFunction>::
-            iterator it = term_to_args.find(curr);
+        std::unordered_map<Node, std::vector<unsigned>>::iterator it =
+            term_to_args.find(curr);
         if (it != term_to_args.end())
         {
           Trace("sygus-process-arg-deps") << "  *** Decide relevant " << curr
@@ -548,7 +538,7 @@ Node SynthConjectureProcess::postSimplify(Node q)
 
     // get the base on the conjecture
     Node base = q[1];
-    std::unordered_set<Node, NodeHashFunction> synth_fv;
+    std::unordered_set<Node> synth_fv;
     if (base.getKind() == NOT && base[0].getKind() == FORALL)
     {
       for (unsigned j = 0, size = base[0][0].getNumChildren(); j < size; j++)
@@ -617,8 +607,9 @@ bool SynthConjectureProcess::getIrrelevantArgs(
   return false;
 }
 
-void SynthConjectureProcess::processConjunct(
-    Node n, Node f, std::unordered_set<Node, NodeHashFunction>& synth_fv)
+void SynthConjectureProcess::processConjunct(Node n,
+                                             Node f,
+                                             std::unordered_set<Node>& synth_fv)
 {
   Trace("sygus-process-arg-deps") << "Process conjunct: " << std::endl;
   Trace("sygus-process-arg-deps") << "  " << n << " for synth fun " << f
@@ -626,24 +617,20 @@ void SynthConjectureProcess::processConjunct(
 
   // first, flatten the conjunct
   // make a copy of free variables since we may add new ones
-  std::unordered_set<Node, NodeHashFunction> synth_fv_n = synth_fv;
-  std::unordered_map<Node, Node, NodeHashFunction> defs;
+  std::unordered_set<Node> synth_fv_n = synth_fv;
+  std::unordered_map<Node, Node> defs;
   Node nf = flatten(n, f, synth_fv_n, defs);
 
   Trace("sygus-process-arg-deps") << "Flattened to: " << std::endl;
   Trace("sygus-process-arg-deps") << "  " << nf << std::endl;
 
   // get free variables in nf
-  std::unordered_map<Node,
-                     std::unordered_set<Node, NodeHashFunction>,
-                     NodeHashFunction>
-      free_vars;
+  std::unordered_map<Node, std::unordered_set<Node>> free_vars;
   getFreeVariables(nf, synth_fv_n, free_vars);
   // get free variables in each application
   std::vector<Node> ns;
   std::vector<Node> ks;
-  for (std::unordered_map<Node, Node, NodeHashFunction>::iterator it =
-           defs.begin();
+  for (std::unordered_map<Node, Node>::iterator it = defs.begin();
        it != defs.end();
        ++it)
   {
@@ -666,11 +653,11 @@ void SynthConjectureProcess::processConjunct(
 Node SynthConjectureProcess::SynthConjectureProcess::flatten(
     Node n,
     Node f,
-    std::unordered_set<Node, NodeHashFunction>& synth_fv,
-    std::unordered_map<Node, Node, NodeHashFunction>& defs)
+    std::unordered_set<Node>& synth_fv,
+    std::unordered_map<Node, Node>& defs)
 {
-  std::unordered_map<Node, Node, NodeHashFunction> visited;
-  std::unordered_map<Node, Node, NodeHashFunction>::iterator it;
+  std::unordered_map<Node, Node> visited;
+  std::unordered_map<Node, Node>::iterator it;
   std::stack<Node> visit;
   Node cur;
   visit.push(n);
@@ -730,15 +717,13 @@ Node SynthConjectureProcess::SynthConjectureProcess::flatten(
 
 void SynthConjectureProcess::getFreeVariables(
     Node n,
-    std::unordered_set<Node, NodeHashFunction>& synth_fv,
-    std::unordered_map<Node,
-                       std::unordered_set<Node, NodeHashFunction>,
-                       NodeHashFunction>& free_vars)
+    std::unordered_set<Node>& synth_fv,
+    std::unordered_map<Node, std::unordered_set<Node>>& free_vars)
 {
   // first must compute free variables in each subterm of n,
   // as well as contains_synth_fun
-  std::unordered_map<Node, bool, NodeHashFunction> visited;
-  std::unordered_map<Node, bool, NodeHashFunction>::iterator it;
+  std::unordered_map<Node, bool> visited;
+  std::unordered_map<Node, bool>::iterator it;
   std::stack<Node> visit;
   Node cur;
   visit.push(n);
index 3a2c6eb4d20c79927c21347b03bac3ad39cd700d..d751e4c9c5570189a939422babe606582f98fb4f 100644 (file)
@@ -144,10 +144,8 @@ struct SynthConjectureProcessFun
       std::vector<Node>& ns,
       std::vector<Node>& ks,
       Node nf,
-      std::unordered_set<Node, NodeHashFunction>& synth_fv,
-      std::unordered_map<Node,
-                         std::unordered_set<Node, NodeHashFunction>,
-                         NodeHashFunction>& free_vars);
+      std::unordered_set<Node>& synth_fv,
+      std::unordered_map<Node, std::unordered_set<Node>>& free_vars);
   /** is the i^th argument of the function-to-synthesize of this class relevant?
    */
   bool isArgRelevant(unsigned i);
@@ -169,7 +167,7 @@ struct SynthConjectureProcessFun
   /** map from d_arg_vars to the argument #
    * they represent.
    */
-  std::unordered_map<Node, unsigned, NodeHashFunction> d_arg_var_num;
+  std::unordered_map<Node, unsigned> d_arg_var_num;
   /** check match
    * This function returns true iff we can infer:
    *   cn * { x -> n_arg_map[d_arg_var_num[x]] | x in d_arg_vars } = n
@@ -217,10 +215,8 @@ struct SynthConjectureProcessFun
    */
   Node inferDefinition(
       Node n,
-      std::unordered_map<Node, unsigned, NodeHashFunction>& term_to_arg_carry,
-      std::unordered_map<Node,
-                         std::unordered_set<Node, NodeHashFunction>,
-                         NodeHashFunction>& free_vars);
+      std::unordered_map<Node, unsigned>& term_to_arg_carry,
+      std::unordered_map<Node, std::unordered_set<Node>>& free_vars);
   /** Assign relevant definition
    *
    * If def is non-null,
@@ -322,9 +318,7 @@ class SynthConjectureProcess
    * is the set of (inner) universal variables in the synthesis
    * conjecture.
    */
-  void processConjunct(Node n,
-                       Node f,
-                       std::unordered_set<Node, NodeHashFunction>& synth_fv);
+  void processConjunct(Node n, Node f, std::unordered_set<Node>& synth_fv);
   /** flatten
    *
    * Flattens all applications of f in term n.
@@ -337,18 +331,16 @@ class SynthConjectureProcess
    */
   Node flatten(Node n,
                Node f,
-               std::unordered_set<Node, NodeHashFunction>& synth_fv,
-               std::unordered_map<Node, Node, NodeHashFunction>& defs);
+               std::unordered_set<Node>& synth_fv,
+               std::unordered_map<Node, Node>& defs);
   /** get free variables
    * Constructs a map of all free variables that occur in n
    * from synth_fv and stores them in the map free_vars.
    */
   void getFreeVariables(
       Node n,
-      std::unordered_set<Node, NodeHashFunction>& synth_fv,
-      std::unordered_map<Node,
-                         std::unordered_set<Node, NodeHashFunction>,
-                         NodeHashFunction>& free_vars);
+      std::unordered_set<Node>& synth_fv,
+      std::unordered_map<Node, std::unordered_set<Node>>& free_vars);
   /** for each synth-fun, information that is specific to this conjecture */
   std::map<Node, SynthConjectureProcessFun> d_sf_info;
 
index 1321ad8793c665c0a0ee2e5b7126846f2d094f19..719bb448b5604e51d29f1ea30aecc44ad5e46c13 100644 (file)
@@ -70,7 +70,7 @@ Node SygusReconstruct::reconstructSolution(Node sol,
 
   // the set of unique (up to rewriting) patterns/shapes in the grammar used by
   // matching
-  std::unordered_map<TypeNode, std::vector<Node>, TypeNodeHashFunction> pool;
+  std::unordered_map<TypeNode, std::vector<Node>> pool;
 
   uint64_t count = 0;
 
@@ -209,7 +209,7 @@ TypeObligationSetMap SygusReconstruct::matchNewObs(Node k, Node sz)
 
   // obligations generated by match. Note that we might have already seen (and
   // even solved) those obligations, hence the name "candidate obligations"
-  std::unordered_map<Node, Node, NodeHashFunction> candObs;
+  std::unordered_map<Node, Node> candObs;
   // the builtin terms corresponding to sygus variables in the grammar are bound
   // variables. However, we want the `match` method to treat them as ground
   // terms. So, we add redundant substitutions
@@ -444,10 +444,10 @@ void SygusReconstruct::removeSolvedObs(TypeObligationSetMap& unsolvedObs)
 Node SygusReconstruct::mkGround(Node n) const
 {
   // get the set of bound variables in n
-  std::unordered_set<TNode, TNodeHashFunction> vars;
+  std::unordered_set<TNode> vars;
   expr::getVariables(n, vars);
 
-  std::unordered_map<TNode, TNode, TNodeHashFunction> subs;
+  std::unordered_map<TNode, TNode> subs;
 
   // generate a ground value for each one of those variables
   for (const TNode& var : vars)
@@ -492,8 +492,7 @@ void SygusReconstruct::clear()
 }
 
 void SygusReconstruct::printPool(
-    const std::unordered_map<TypeNode, std::vector<Node>, TypeNodeHashFunction>&
-        pool) const
+    const std::unordered_map<TypeNode, std::vector<Node>>& pool) const
 {
   Trace("sygus-rcons") << "\nPool:\n[";
 
index 334b95e715e4463e017c3b676acf0cd120a0654b..e3c214bde7828c2bf544f9453438763142bea4dc 100644 (file)
@@ -28,9 +28,8 @@ namespace cvc5 {
 namespace theory {
 namespace quantifiers {
 
-using ObligationSet = std::unordered_set<Node, NodeHashFunction>;
-using TypeObligationSetMap =
-    std::unordered_map<TypeNode, ObligationSet, TypeNodeHashFunction>;
+using ObligationSet = std::unordered_set<Node>;
+using TypeObligationSetMap = std::unordered_map<TypeNode, ObligationSet>;
 
 /** SygusReconstruct
  *
@@ -288,9 +287,8 @@ class SygusReconstruct : public expr::NotifyMatch
    *
    * @param pool a pool of patterns/shapes to print
    */
-  void printPool(const std::unordered_map<TypeNode,
-                                          std::vector<Node>,
-                                          TypeNodeHashFunction>& pool) const;
+  void printPool(
+      const std::unordered_map<TypeNode, std::vector<Node>>& pool) const;
 
   /** pointer to the sygus term database */
   TermDbSygus* d_tds;
@@ -298,20 +296,20 @@ class SygusReconstruct : public expr::NotifyMatch
   SygusStatistics& d_stats;
 
   /** a map from an obligation to its reconstruction info */
-  std::unordered_map<Node, RConsObligationInfo, NodeHashFunction> d_obInfo;
+  std::unordered_map<Node, RConsObligationInfo> d_obInfo;
   /** a map from a sygus datatype type to its reconstruction info */
-  std::unordered_map<TypeNode, RConsTypeInfo, TypeNodeHashFunction> d_stnInfo;
+  std::unordered_map<TypeNode, RConsTypeInfo> d_stnInfo;
 
   /** a map from an obligation to its sygus solution (if it exists) */
-  std::unordered_map<TNode, TNode, TNodeHashFunction> d_sol;
+  std::unordered_map<TNode, TNode> d_sol;
 
   /** a map from a candidate solution to its sub-obligations */
-  std::unordered_map<Node, std::vector<Node>, NodeHashFunction> d_subObs;
+  std::unordered_map<Node, std::vector<Node>> d_subObs;
   /** a map from a candidate solution to its parent obligation */
-  std::unordered_map<Node, Node, NodeHashFunction> d_parentOb;
+  std::unordered_map<Node, Node> d_parentOb;
 
   /** a cache of sygus variables treated as ground terms by matching */
-  std::unordered_map<Node, Node, NodeHashFunction> d_sygusVars;
+  std::unordered_map<Node, Node> d_sygusVars;
 
   /** A trie for filtering out redundant terms from the paterns pool */
   expr::MatchTrie d_poolTrie;
index 62f362e2badcd99131eb4bdb5def39280ec1f04d..d45a96d3bb741739437e8453841f57797d981703 100644 (file)
@@ -286,7 +286,7 @@ bool SygusRepairConst::repairSolution(Node sygusBody,
 
 bool SygusRepairConst::mustRepair(Node n)
 {
-  std::unordered_set<TNode, TNodeHashFunction> visited;
+  std::unordered_set<TNode> visited;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(n);
@@ -365,8 +365,8 @@ Node SygusRepairConst::getSkeleton(Node n,
   }
   NodeManager* nm = NodeManager::currentNM();
   // get the most general candidate skeleton of n
-  std::unordered_map<TNode, Node, TNodeHashFunction> visited;
-  std::unordered_map<TNode, Node, TNodeHashFunction>::iterator it;
+  std::unordered_map<TNode, Node> visited;
+  std::unordered_map<TNode, Node>::iterator it;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(n);
@@ -464,8 +464,8 @@ Node SygusRepairConst::getFoQuery(Node body,
   // now, we must replace all terms of the form eval( z_i, t1...tn ) with
   // a fresh first-order variable w_i, where z_i is a variable introduced in
   // the skeleton inference step (z_i is a variable in sk_vars).
-  std::unordered_map<TNode, Node, TNodeHashFunction> visited;
-  std::unordered_map<TNode, Node, TNodeHashFunction>::iterator it;
+  std::unordered_map<TNode, Node> visited;
+  std::unordered_map<TNode, Node>::iterator it;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(body);
@@ -577,8 +577,8 @@ bool SygusRepairConst::getFitToLogicExcludeVar(LogicInfo& logic,
   // should have at least one restriction
   Assert(restrictLA);
 
-  std::unordered_set<TNode, TNodeHashFunction> visited;
-  std::unordered_set<TNode, TNodeHashFunction>::iterator it;
+  std::unordered_set<TNode> visited;
+  std::unordered_set<TNode>::iterator it;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(n);
index 1a2159b10169000c946b4b4867f66137a7f95353..f0452a59c70a4cb3ab9c233d4665ad1f32fe4127 100644 (file)
@@ -123,7 +123,7 @@ class SygusRepairConst
   /** reverse map of d_sk_to_fo */
   std::map<Node, Node> d_fo_to_sk;
   /** a cache of satisfiability queries of the form [***] above we have tried */
-  std::unordered_set<Node, NodeHashFunction> d_queries;
+  std::unordered_set<Node> d_queries;
   /**
    * Register information for sygus type tn, tprocessed stores the set of
    * already registered types.
index 7f816a97fc8b29d9c91a63a44e80de1b7a35ea79..4cf0e6bb4c075eed9aa8dbf42eab030263ac5a7d 100644 (file)
@@ -1128,9 +1128,8 @@ Node SygusUnifIo::constructSol(
     if (ret_dt.isNull() && !retValMod)
     {
       bool firstTime = true;
-      std::unordered_set<Node, NodeHashFunction> intersection;
-      std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>>::iterator
-          pit;
+      std::unordered_set<Node> intersection;
+      std::map<TypeNode, std::unordered_set<Node>>::iterator pit;
       for (size_t i = 0, nvals = x.d_vals.size(); i < nvals; i++)
       {
         if (x.d_vals[i].getConst<bool>())
index ef6732cd6a384346d705cbc97ca5ac844ed7d1cc..fd918c996baf33eea8980a30f9a73bf9249ff54f 100644 (file)
@@ -311,9 +311,7 @@ class SygusUnifIo : public SygusUnif
    *   A -> ite( A, B, C ) | ...
    * where terms of type B and C can both act as solutions.
    */
-  std::map<size_t,
-           std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>>>
-      d_psolutions;
+  std::map<size_t, std::map<TypeNode, std::unordered_set<Node>>> d_psolutions;
   /**
    * This flag is set to true if the solution construction was
    * non-deterministic with respect to failure/success.
index 356c908dc680c12fc5e9651f0b999077fe1f598e..a5c7af161c284f2b942338646685a39fe107a343 100644 (file)
@@ -30,10 +30,10 @@ namespace quantifiers {
 
 using BoolNodePair = std::pair<bool, Node>;
 using BoolNodePairHashFunction =
-    PairHashFunction<bool, Node, BoolHashFunction, NodeHashFunction>;
+    PairHashFunction<bool, Node, BoolHashFunction, std::hash<Node>>;
 using BoolNodePairMap =
     std::unordered_map<BoolNodePair, Node, BoolNodePairHashFunction>;
-using NodePairMap = std::unordered_map<Node, Node, NodeHashFunction>;
+using NodePairMap = std::unordered_map<Node, Node>;
 using NodePair = std::pair<Node, Node>;
 
 class SynthConjecture;
@@ -120,7 +120,7 @@ class SygusUnifRl : public SygusUnif
   /** Whether we are additionally using information gain heuristics */
   bool d_useCondPoolIGain;
   /* Functions-to-synthesize (a.k.a. candidates) with unification strategies */
-  std::unordered_set<Node, NodeHashFunction> d_unif_candidates;
+  std::unordered_set<Node> d_unif_candidates;
   /** construct sol */
   Node constructSol(Node f,
                     Node e,
@@ -248,7 +248,7 @@ class SygusUnifRl : public SygusUnif
     /** gathered evaluation point heads */
     std::vector<Node> d_hds;
     /** all enumerated model values for conditions */
-    std::unordered_set<Node, NodeHashFunction> d_cond_mvs;
+    std::unordered_set<Node> d_cond_mvs;
     /** get condition enumerator */
     Node getConditionEnumerator() const { return d_cond_enum; }
     /** set conditions */
@@ -262,7 +262,7 @@ class SygusUnifRl : public SygusUnif
     Node d_false;
     /** Accumulates solutions built when considering all enumerated condition
      * values (which may generate repeated solutions) */
-    std::unordered_set<Node, NodeHashFunction> d_sols;
+    std::unordered_set<Node> d_sols;
     /**
      * Conditional enumerator variables corresponding to the condition values in
      * d_conds. These are used for generating separation lemmas during
index ec4ade86b50da5950a81f72cfa3debd2c0f31bc5..df73c4821a33774505427d340c2eb1662d992944 100644 (file)
@@ -31,7 +31,7 @@ namespace quantifiers {
 
 class SynthEngine : public QuantifiersModule
 {
-  typedef context::CDHashMap<Node, bool, NodeHashFunction> NodeBoolMap;
+  typedef context::CDHashMap<Node, bool> NodeBoolMap;
 
  public:
   SynthEngine(QuantifiersState& qs,
index b18a7c796d950e5b78953cea1124bfafdbf370b1..8265634012633be0765257a23f2e908e3338b114 100644 (file)
@@ -1018,11 +1018,10 @@ Node TermDbSygus::evaluateBuiltin(TypeNode tn,
   return rewriteNode(res);
 }
 
-Node TermDbSygus::evaluateWithUnfolding(
-    Node n, std::unordered_map<Node, Node, NodeHashFunction>& visited)
+Node TermDbSygus::evaluateWithUnfolding(Node n,
+                                        std::unordered_map<Node, Node>& visited)
 {
-  std::unordered_map<Node, Node, NodeHashFunction>::iterator it =
-      visited.find(n);
+  std::unordered_map<Node, Node>::iterator it = visited.find(n);
   if( it==visited.end() ){
     Node ret = n;
     while (ret.getKind() == DT_SYGUS_EVAL
@@ -1068,7 +1067,7 @@ Node TermDbSygus::evaluateWithUnfolding(
 
 Node TermDbSygus::evaluateWithUnfolding(Node n)
 {
-  std::unordered_map<Node, Node, NodeHashFunction> visited;
+  std::unordered_map<Node, Node> visited;
   return evaluateWithUnfolding(n, visited);
 }
 
index c8a422a0e56fd5544644a92ac94e198edcc4b56b..e0a812069c3eaeeca7bb32052cf4acca2ad33ad0 100644 (file)
@@ -285,8 +285,7 @@ class TermDbSygus {
    */
   Node evaluateWithUnfolding(Node n);
   /** same as above, but with a cache of visited nodes */
-  Node evaluateWithUnfolding(
-      Node n, std::unordered_map<Node, Node, NodeHashFunction>& visited);
+  Node evaluateWithUnfolding(Node n, std::unordered_map<Node, Node>& visited);
   /** is evaluation point?
    *
    * Returns true if n is of the form eval( x, c1...cn ) for some variable x
index 1c6256c2462d1e8f2924d25236e65bc89f15b4d5..286d5f42be851858253a71e4ea5a48e982bad86d 100644 (file)
@@ -47,8 +47,8 @@ namespace {
  */
 void getMaxGroundTerms(TNode n,
                        TypeNode tn,
-                       std::unordered_set<Node, NodeHashFunction>& terms,
-                       std::unordered_set<TNode, TNodeHashFunction>& cache,
+                       std::unordered_set<Node>& terms,
+                       std::unordered_set<TNode>& cache,
                        bool skip_quant = false)
 {
   if (options::sygusInstTermSel() != options::SygusInstTermSelMode::MAX
@@ -100,12 +100,11 @@ void getMaxGroundTerms(TNode n,
  *               term was already found in a subterm.
  * @param skip_quant: Do not traverse quantified formulas (skip quantifiers).
  */
-void getMinGroundTerms(
-    TNode n,
-    TypeNode tn,
-    std::unordered_set<Node, NodeHashFunction>& terms,
-    std::unordered_map<TNode, std::pair<bool, bool>, TNodeHashFunction>& cache,
-    bool skip_quant = false)
+void getMinGroundTerms(TNode n,
+                       TypeNode tn,
+                       std::unordered_set<Node>& terms,
+                       std::unordered_map<TNode, std::pair<bool, bool>>& cache,
+                       bool skip_quant = false)
 {
   if (options::sygusInstTermSel() != options::SygusInstTermSelMode::MIN
       && options::sygusInstTermSel() != options::SygusInstTermSelMode::BOTH)
@@ -169,9 +168,8 @@ void getMinGroundTerms(
  * @param extra_cons: A map of TypeNode to constants, which are added in
  *                    addition to the default grammar.
  */
-void addSpecialValues(
-    const TypeNode& tn,
-    std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>>& extra_cons)
+void addSpecialValues(const TypeNode& tn,
+                      std::map<TypeNode, std::unordered_set<Node>>& extra_cons)
 {
   if (tn.isBitVector())
   {
@@ -331,19 +329,16 @@ void SygusInst::registerQuantifier(Node q)
 
   Trace("sygus-inst") << "Register " << q << std::endl;
 
-  std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>> extra_cons;
-  std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>> exclude_cons;
-  std::map<TypeNode, std::unordered_set<Node, NodeHashFunction>> include_cons;
-  std::unordered_set<Node, NodeHashFunction> term_irrelevant;
+  std::map<TypeNode, std::unordered_set<Node>> extra_cons;
+  std::map<TypeNode, std::unordered_set<Node>> exclude_cons;
+  std::map<TypeNode, std::unordered_set<Node>> include_cons;
+  std::unordered_set<Node> term_irrelevant;
 
   /* Collect relevant local ground terms for each variable type. */
   if (options::sygusInstScope() == options::SygusInstScope::IN
       || options::sygusInstScope() == options::SygusInstScope::BOTH)
   {
-    std::unordered_map<TypeNode,
-                       std::unordered_set<Node, NodeHashFunction>,
-                       TypeNodeHashFunction>
-        relevant_terms;
+    std::unordered_map<TypeNode, std::unordered_set<Node>> relevant_terms;
     for (const Node& var : q[0])
     {
       TypeNode tn = var.getType();
@@ -351,10 +346,9 @@ void SygusInst::registerQuantifier(Node q)
       /* Collect relevant ground terms for type tn. */
       if (relevant_terms.find(tn) == relevant_terms.end())
       {
-        std::unordered_set<Node, NodeHashFunction> terms;
-        std::unordered_set<TNode, TNodeHashFunction> cache_max;
-        std::unordered_map<TNode, std::pair<bool, bool>, TNodeHashFunction>
-            cache_min;
+        std::unordered_set<Node> terms;
+        std::unordered_set<TNode> cache_max;
+        std::unordered_map<TNode, std::pair<bool, bool>> cache_min;
 
         getMinGroundTerms(q, tn, terms, cache_min);
         getMaxGroundTerms(q, tn, terms, cache_max);
@@ -383,10 +377,9 @@ void SygusInst::registerQuantifier(Node q)
       /* Collect relevant ground terms for type tn. */
       if (d_global_terms.find(tn) == d_global_terms.end())
       {
-        std::unordered_set<Node, NodeHashFunction> terms;
-        std::unordered_set<TNode, TNodeHashFunction> cache_max;
-        std::unordered_map<TNode, std::pair<bool, bool>, TNodeHashFunction>
-            cache_min;
+        std::unordered_set<Node> terms;
+        std::unordered_set<TNode> cache_max;
+        std::unordered_map<TNode, std::pair<bool, bool>> cache_min;
 
         for (const Node& a : d_notified_assertions)
         {
index 05c62d883176da4e7d79bcfe676e23544627fd00..80c7e809fc0b5fdf90123a48795e72c29eef9955 100644 (file)
@@ -110,40 +110,35 @@ class SygusInst : public QuantifiersModule
   bool sendEvalUnfoldLemmas(const std::vector<Node>& lemmas);
 
   /* Maps quantifiers to a vector of instantiation constants. */
-  std::unordered_map<Node, std::vector<Node>, NodeHashFunction>
-      d_inst_constants;
+  std::unordered_map<Node, std::vector<Node>> d_inst_constants;
 
   /* Maps quantifiers to a vector of DT_SYGUS_EVAL terms. */
-  std::unordered_map<Node, std::vector<Node>, NodeHashFunction> d_var_eval;
+  std::unordered_map<Node, std::vector<Node>> d_var_eval;
 
   /* Maps quantified formulas to registered counterexample literals. */
-  std::unordered_map<Node, Node, NodeHashFunction> d_ce_lits;
+  std::unordered_map<Node, Node> d_ce_lits;
 
   /* Decision strategies registered for quantified formulas. */
-  std::unordered_map<Node, std::unique_ptr<DecisionStrategy>, NodeHashFunction>
-      d_dstrat;
+  std::unordered_map<Node, std::unique_ptr<DecisionStrategy>> d_dstrat;
 
   /* Currently active quantifiers. */
-  std::unordered_set<Node, NodeHashFunction> d_active_quant;
+  std::unordered_set<Node> d_active_quant;
 
   /* Currently inactive quantifiers. */
-  std::unordered_set<Node, NodeHashFunction> d_inactive_quant;
+  std::unordered_set<Node> d_inactive_quant;
 
   /* Registered counterexample lemma cache. */
-  std::unordered_map<Node, Node, NodeHashFunction> d_ce_lemmas;
+  std::unordered_map<Node, Node> d_ce_lemmas;
 
   /* Indicates whether a counterexample lemma was added for a quantified
    * formula in the current context. */
-  context::CDHashSet<Node, NodeHashFunction> d_ce_lemma_added;
+  context::CDHashSet<Node> d_ce_lemma_added;
 
   /* Set of global ground terms in assertions (outside of quantifiers). */
-  context::CDHashMap<TypeNode,
-                     std::unordered_set<Node, NodeHashFunction>,
-                     TypeNodeHashFunction>
-      d_global_terms;
+  context::CDHashMap<TypeNode, std::unordered_set<Node>> d_global_terms;
 
   /* Assertions sent by ppNotifyAssertions. */
-  context::CDHashSet<Node, NodeHashFunction> d_notified_assertions;
+  context::CDHashSet<Node> d_notified_assertions;
 };
 
 }  // namespace quantifiers
index d4720ea7c4c436867f70012fe9ae65ce3406d660..36602d3ae2f34844009aa1641d284762aff183eb 100644 (file)
@@ -323,8 +323,8 @@ bool SygusSampler::isContiguous(Node n)
 
 void SygusSampler::computeFreeVariables(Node n, std::vector<Node>& fvs)
 {
-  std::unordered_set<TNode, TNodeHashFunction> visited;
-  std::unordered_set<TNode, TNodeHashFunction>::iterator it;
+  std::unordered_set<TNode> visited;
+  std::unordered_set<TNode>::iterator it;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(n);
@@ -359,8 +359,8 @@ bool SygusSampler::checkVariables(Node n, bool checkOrder, bool checkLinear)
   // compute free variables in n for each type
   std::map<unsigned, std::vector<Node> > fvs;
 
-  std::unordered_set<TNode, TNodeHashFunction> visited;
-  std::unordered_set<TNode, TNodeHashFunction>::iterator it;
+  std::unordered_set<TNode> visited;
+  std::unordered_set<TNode>::iterator it;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(n);
@@ -411,8 +411,8 @@ bool SygusSampler::containsFreeVariables(Node a, Node b, bool strict)
   computeFreeVariables(a, fvs);
   std::vector<Node> fv_found;
 
-  std::unordered_set<TNode, TNodeHashFunction> visited;
-  std::unordered_set<TNode, TNodeHashFunction>::iterator it;
+  std::unordered_set<TNode> visited;
+  std::unordered_set<TNode>::iterator it;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(b);
index 56a4860222a3bfd8133a0ab9deb959effb2f9ae2..bedab16f1c8f0dbcf57ef33cd02535e065b84d18 100644 (file)
@@ -152,8 +152,7 @@ Node TermDb::getOrMakeTypeGroundTerm(TypeNode tn, bool reqVar)
 
 Node TermDb::getOrMakeTypeFreshVariable(TypeNode tn)
 {
-  std::unordered_map<TypeNode, Node, TypeNodeHashFunction>::iterator it =
-      d_type_fv.find(tn);
+  std::unordered_map<TypeNode, Node>::iterator it = d_type_fv.find(tn);
   if (it == d_type_fv.end())
   {
     SkolemManager* sm = NodeManager::currentNM()->getSkolemManager();
index a8551a581770f441853771babd68e0554c54f73e..01465c7ca790cb5694454a9a40535091b18dbec7 100644 (file)
@@ -65,13 +65,12 @@ class DbList
  * lazily for performance reasons.
  */
 class TermDb : public QuantifiersUtil {
-  using NodeBoolMap = context::CDHashMap<Node, bool, NodeHashFunction>;
+  using NodeBoolMap = context::CDHashMap<Node, bool>;
   using NodeList = context::CDList<Node>;
-  using NodeSet = context::CDHashSet<Node, NodeHashFunction>;
-  using TypeNodeDbListMap = context::
-      CDHashMap<TypeNode, std::shared_ptr<DbList>, TypeNodeHashFunction>;
-  using NodeDbListMap =
-      context::CDHashMap<Node, std::shared_ptr<DbList>, NodeHashFunction>;
+  using NodeSet = context::CDHashSet<Node>;
+  using TypeNodeDbListMap =
+      context::CDHashMap<TypeNode, std::shared_ptr<DbList>>;
+  using NodeDbListMap = context::CDHashMap<Node, std::shared_ptr<DbList>>;
 
  public:
   TermDb(QuantifiersState& qs,
@@ -316,7 +315,7 @@ class TermDb : public QuantifiersUtil {
   Node d_true;
   Node d_false;
   /** map from type nodes to a fresh variable we introduced */
-  std::unordered_map<TypeNode, Node, TypeNodeHashFunction> d_type_fv;
+  std::unordered_map<TypeNode, Node> d_type_fv;
   /** inactive map */
   NodeBoolMap d_inactive_map;
   /** count of the number of non-redundant ground terms per operator */
index ffade62fb4b8d959626580e56501ade0a640920d..d6b0d81543878f8b52fcd556a6294642cb56f620 100644 (file)
@@ -29,8 +29,7 @@ Node TermEnumeration::getEnumerateTerm(TypeNode tn, unsigned index)
 {
   Trace("term-db-enum") << "Get enumerate term " << tn << " " << index
                         << std::endl;
-  std::unordered_map<TypeNode, size_t, TypeNodeHashFunction>::iterator it =
-      d_typ_enum_map.find(tn);
+  std::unordered_map<TypeNode, size_t>::iterator it = d_typ_enum_map.find(tn);
   size_t teIndex;
   if (it == d_typ_enum_map.end())
   {
index 50abef744f0e61e4d4cae51272f8810bac6408fe..f23640e07de8498eaa87b10739c297f133303e23 100644 (file)
@@ -62,10 +62,9 @@ class TermEnumeration
    */
   QuantifiersBoundInference* d_qbi;
   /** ground terms enumerated for types */
-  std::unordered_map<TypeNode, std::vector<Node>, TypeNodeHashFunction>
-      d_enum_terms;
+  std::unordered_map<TypeNode, std::vector<Node>> d_enum_terms;
   /** map from type to the index of its type enumerator in d_typ_enum. */
-  std::unordered_map<TypeNode, size_t, TypeNodeHashFunction> d_typ_enum_map;
+  std::unordered_map<TypeNode, size_t> d_typ_enum_map;
   /** type enumerators */
   std::vector<TypeEnumerator> d_typ_enum;
 };
index aa0fbd06d958e5fe618e0a6de2b46b3c21642eec..883161f1ab2b4bdd17e459ecdc293eb8c9c6cc5f 100644 (file)
@@ -98,7 +98,7 @@ void TermPools::getTermsForPool(Node p, std::vector<Node>& terms)
   // if we have yet to compute terms on this round
   if (dom.d_currTerms.empty())
   {
-    std::unordered_set<Node, NodeHashFunction> reps;
+    std::unordered_set<Node> reps;
     // eliminate modulo equality
     for (const Node& t : dom.d_terms)
     {
index cf2ba7a4768583cceaab63d8c20bc182563a9ad8..c3e4fcf4c78068b0bc4c448ab3400dbce84baa12 100644 (file)
@@ -39,7 +39,7 @@ class FirstOrderModel;
  */
 class TermRegistry
 {
-  using NodeSet = context::CDHashSet<Node, NodeHashFunction>;
+  using NodeSet = context::CDHashSet<Node>;
 
  public:
   TermRegistry(QuantifiersState& qs,
index 9db3dd020daeab35694b60d5dcd8d14fa9b017da..b771db98604294edb2bbdccda9eaae121b469a5b 100644 (file)
@@ -123,7 +123,7 @@ Node TermUtil::getRemoveQuantifiers( Node n ) {
 
 //quantified simplify
 Node TermUtil::getQuantSimplify( Node n ) {
-  std::unordered_set<Node, NodeHashFunction> fvs;
+  std::unordered_set<Node> fvs;
   expr::getFreeVariables(n, fvs);
   if (fvs.empty())
   {
@@ -156,8 +156,8 @@ void TermUtil::computeVarContainsInternal(Node n,
                                           Kind k,
                                           std::vector<Node>& vars)
 {
-  std::unordered_set<TNode, TNodeHashFunction> visited;
-  std::unordered_set<TNode, TNodeHashFunction>::iterator it;
+  std::unordered_set<TNode> visited;
+  std::unordered_set<TNode>::iterator it;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(n);
index 631f7bec11b3c1d51a90e60348667adfb3ea97ca..fc29ab8e861714bcfc062aa25f7d5fb9e49dc0d9 100644 (file)
@@ -54,8 +54,8 @@ class TermRegistry;
 // TODO: organize this more/review this, github issue #1163
 class QuantifiersEngine {
   friend class ::cvc5::TheoryEngine;
-  typedef context::CDHashMap< Node, bool, NodeHashFunction > BoolMap;
-  typedef context::CDHashSet<Node, NodeHashFunction> NodeSet;
+  typedef context::CDHashMap<Node, bool> BoolMap;
+  typedef context::CDHashSet<Node> NodeSet;
 
  public:
   QuantifiersEngine(quantifiers::QuantifiersState& qstate,
index 68ec573c377c6bb0a1eb4118e8e3cae84f116f3d..9746f4a229c0a348498c79d4b5210e8ce7d7821d 100644 (file)
@@ -92,7 +92,7 @@ void RelevanceManager::computeRelevance()
   d_computed = true;
   d_rset.clear();
   Trace("rel-manager") << "RelevanceManager::computeRelevance..." << std::endl;
-  std::unordered_map<TNode, int, TNodeHashFunction> cache;
+  std::unordered_map<TNode, int> cache;
   for (const Node& node: d_input)
   {
     TNode n = node;
@@ -123,7 +123,7 @@ bool RelevanceManager::isBooleanConnective(TNode cur)
 bool RelevanceManager::updateJustifyLastChild(
     TNode cur,
     std::vector<int>& childrenJustify,
-    std::unordered_map<TNode, int, TNodeHashFunction>& cache)
+    std::unordered_map<TNode, int>& cache)
 {
   // This method is run when we are informed that child index of cur
   // has justify status lastChildJustify. We return true if we would like to
@@ -226,13 +226,12 @@ bool RelevanceManager::updateJustifyLastChild(
   return false;
 }
 
-int RelevanceManager::justify(
-    TNode n, std::unordered_map<TNode, int, TNodeHashFunction>& cache)
+int RelevanceManager::justify(TNode n, std::unordered_map<TNode, int>& cache)
 {
   // the vector of values of children
-  std::unordered_map<TNode, std::vector<int>, TNodeHashFunction> childJustify;
-  std::unordered_map<TNode, int, TNodeHashFunction>::iterator it;
-  std::unordered_map<TNode, std::vector<int>, TNodeHashFunction>::iterator itc;
+  std::unordered_map<TNode, std::vector<int>> childJustify;
+  std::unordered_map<TNode, int>::iterator it;
+  std::unordered_map<TNode, std::vector<int>>::iterator itc;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(n);
@@ -315,8 +314,8 @@ bool RelevanceManager::isRelevant(Node lit)
   return d_rset.find(lit) != d_rset.end();
 }
 
-const std::unordered_set<TNode, TNodeHashFunction>&
-RelevanceManager::getRelevantAssertions(bool& success)
+const std::unordered_set<TNode>& RelevanceManager::getRelevantAssertions(
+    bool& success)
 {
   if (!d_computed)
   {
index dc717157b543e8a266106a4972e92ab336fbef90..6c69861fdbf55be6d54964f575a2bf008f03f6fb 100644 (file)
@@ -104,8 +104,7 @@ class RelevanceManager
    *
    * The value of this return is only valid if success was not updated to false.
    */
-  const std::unordered_set<TNode, TNodeHashFunction>& getRelevantAssertions(
-      bool& success);
+  const std::unordered_set<TNode>& getRelevantAssertions(bool& success);
 
  private:
   /**
@@ -124,8 +123,7 @@ class RelevanceManager
    * This method returns 1 if we justified n to be true, -1 means
    * justified n to be false, 0 means n could not be justified.
    */
-  int justify(TNode n,
-              std::unordered_map<TNode, int, TNodeHashFunction>& cache);
+  int justify(TNode n, std::unordered_map<TNode, int>& cache);
   /** Is the top symbol of cur a Boolean connective? */
   bool isBooleanConnective(TNode cur);
   /**
@@ -140,16 +138,15 @@ class RelevanceManager
    * @return True if we wish to visit the next child. If this is the case, then
    * the justify value of the current child is added to childrenJustify.
    */
-  bool updateJustifyLastChild(
-      TNode cur,
-      std::vector<int>& childrenJustify,
-      std::unordered_map<TNode, int, TNodeHashFunction>& cache);
+  bool updateJustifyLastChild(TNode cur,
+                              std::vector<int>& childrenJustify,
+                              std::unordered_map<TNode, int>& cache);
   /** The valuation object, used to query current value of theory literals */
   Valuation d_val;
   /** The input assertions */
   NodeList d_input;
   /** The current relevant selection. */
-  std::unordered_set<TNode, TNodeHashFunction> d_rset;
+  std::unordered_set<TNode> d_rset;
   /** Have we computed the relevant selection this round? */
   bool d_computed;
   /**
index f44b269cf7188c52ed07c62d0cd492a0bf2f0cdb..d0eee18869553f8c6ef5cb203ff38691de37da8c 100644 (file)
@@ -69,7 +69,7 @@ const std::vector<Node>* RepSet::getTypeRepsOrNull(TypeNode tn) const
 
 namespace {
 
-bool containsStoreAll(Node n, std::unordered_set<Node, NodeHashFunction>& cache)
+bool containsStoreAll(Node n, std::unordered_set<Node>& cache)
 {
   if( std::find( cache.begin(), cache.end(), n )==cache.end() ){
     cache.insert(n);
@@ -91,7 +91,7 @@ bool containsStoreAll(Node n, std::unordered_set<Node, NodeHashFunction>& cache)
 void RepSet::add( TypeNode tn, Node n ){
   //for now, do not add array constants FIXME
   if( tn.isArray() ){
-    std::unordered_set<Node, NodeHashFunction> cache;
+    std::unordered_set<Node> cache;
     if( containsStoreAll( n, cache ) ){
       return;
     }
index 2b260459388c03ea0ffc30f4f7a0e6027cca788d..1094d592049c2eeb9858c7e7fa5be0ca8a483a47 100644 (file)
@@ -199,7 +199,7 @@ Node Rewriter::rewriteTo(theory::TheoryId theoryId,
 
   if (d_rewriteStack == nullptr)
   {
-    d_rewriteStack.reset(new std::unordered_set<Node, NodeHashFunction>());
+    d_rewriteStack.reset(new std::unordered_set<Node>());
   }
 #endif
 
index b3ea3b542f6a634b2ae603b03bc02ed48a8c7b20..1fc68599260a481b89e1117deff47806345223c0 100644 (file)
@@ -228,8 +228,7 @@ class Rewriter {
   /** The proof generator */
   std::unique_ptr<TConvProofGenerator> d_tpg;
 #ifdef CVC5_ASSERTIONS
-  std::unique_ptr<std::unordered_set<Node, NodeHashFunction>> d_rewriteStack =
-      nullptr;
+  std::unique_ptr<std::unordered_set<Node>> d_rewriteStack = nullptr;
 #endif /* CVC5_ASSERTIONS */
 };/* class Rewriter */
 
index 3b8ec8b6b2b91f4ffa989d0bf91eb1076720daa2..b028f06862455b9b617e7eb29a3fc12885fb4e72 100644 (file)
@@ -39,8 +39,8 @@ namespace sep {
 
 class TheorySep : public Theory {
   typedef context::CDList<Node> NodeList;
-  typedef context::CDHashSet<Node, NodeHashFunction> NodeSet;
-  typedef context::CDHashMap<Node, Node, NodeHashFunction> NodeNodeMap;
+  typedef context::CDHashSet<Node> NodeSet;
+  typedef context::CDHashMap<Node, Node> NodeNodeMap;
 
   /////////////////////////////////////////////////////////////////////////////
   // MISC
index cd4ba5de0553d95cb1ba5b6417d7f3bc486ba17b..ce2f29bd5cb078f6c0cc3f7a1d7aecccae222cd1 100644 (file)
@@ -62,7 +62,7 @@ namespace sets {
  */
 class CardinalityExtension
 {
-  typedef context::CDHashSet<Node, NodeHashFunction> NodeSet;
+  typedef context::CDHashSet<Node> NodeSet;
 
  public:
   /**
index bcb38ff5c926c6a7757e3c94b51c249b30285969..7a64b10c7d20d3a0bd1aa1aa45594700d1490e06 100644 (file)
@@ -36,7 +36,7 @@ class TheorySetsPrivate;
  */
 class InferenceManager : public InferenceManagerBuffered
 {
-  typedef context::CDHashSet<Node, NodeHashFunction> NodeSet;
+  typedef context::CDHashSet<Node> NodeSet;
 
  public:
   InferenceManager(Theory& t, SolverState& s, ProofNodeManager* pnm);
index 993457fe85e57d99183ea9e40ca2df3a246d5627..06d144f725ef0c1f7480f7410253f75b25da1bed 100644 (file)
@@ -28,7 +28,7 @@ std::ostream& operator<<(std::ostream& out, const SingletonOp& op)
 
 size_t SingletonOpHashFunction::operator()(const SingletonOp& op) const
 {
-  return TypeNodeHashFunction()(op.getType());
+  return std::hash<TypeNode>()(op.getType());
 }
 
 SingletonOp::SingletonOp(const TypeNode& elementType)
index a41886f9d5bcf4b6866a4b9d34ba0982659acc8b..62547a66e576c261a970bec205a98cc01f914552 100644 (file)
@@ -74,7 +74,7 @@ class SkolemCache
   /** map from node pairs and identifiers to skolems */
   std::map<Node, std::map<Node, std::map<SkolemId, Node> > > d_skolemCache;
   /** the set of all skolems we have generated */
-  std::unordered_set<Node, NodeHashFunction> d_allSkolems;
+  std::unordered_set<Node> d_allSkolems;
 };
 
 }  // namespace sets
index 94e06971c12e82378b1c8d1e6bddcc56ae60389b..63039eddd0c96599361854b20b0e6a0aa0cfe716 100644 (file)
@@ -43,7 +43,7 @@ class TheorySetsPrivate;
  */
 class SolverState : public TheoryState
 {
-  typedef context::CDHashMap<Node, size_t, NodeHashFunction> NodeIntMap;
+  typedef context::CDHashMap<Node, size_t> NodeIntMap;
 
  public:
   SolverState(context::Context* c,
index f98f204e009bb21c06ef59f3cdbc22bd67014b13..87f25341efbb259aefbaffa9edb5ba214d00d567 100644 (file)
@@ -37,7 +37,7 @@ namespace sets {
  */
 class TermRegistry
 {
-  typedef context::CDHashMap<Node, Node, NodeHashFunction> NodeMap;
+  typedef context::CDHashMap<Node, Node> NodeMap;
 
  public:
   TermRegistry(SolverState& state,
index 952bfd83b2ab51db281ffd0943e6e0494f9ac3d8..3b5ee23905a571d1a37bdbe867029b2bc0a44b20 100644 (file)
@@ -38,8 +38,8 @@ namespace sets {
 class TheorySets;
 
 class TheorySetsPrivate {
-  typedef context::CDHashMap< Node, bool, NodeHashFunction> NodeBoolMap;
-  typedef context::CDHashSet<Node, NodeHashFunction> NodeSet;
+  typedef context::CDHashMap<Node, bool> NodeBoolMap;
+  typedef context::CDHashSet<Node> NodeSet;
 
  public:
   void eqNotifyNewClass(TNode t);
index 0e14a6c34c2d0b5c4d406fbe98c227ebadd7dd0d..74dfc01baec635086c89ec4f721fccd377d58f2d 100644 (file)
@@ -28,9 +28,10 @@ namespace sets {
 
 typedef std::map< Node, std::vector< Node > >::iterator                                         MEM_IT;
 typedef std::map< kind::Kind_t, std::vector< Node > >::iterator                                 KIND_TERM_IT;
-typedef std::map< Node, std::unordered_set< Node, NodeHashFunction > >::iterator                     TC_GRAPH_IT;
+typedef std::map<Node, std::unordered_set<Node> >::iterator TC_GRAPH_IT;
 typedef std::map< Node, std::map< kind::Kind_t, std::vector< Node > > >::iterator               TERM_IT;
-typedef std::map< Node, std::map< Node, std::unordered_set< Node, NodeHashFunction > > >::iterator   TC_IT;
+typedef std::map<Node, std::map<Node, std::unordered_set<Node> > >::iterator
+    TC_IT;
 
 TheorySetsRels::TheorySetsRels(SolverState& s,
                                InferenceManager& im,
@@ -281,7 +282,7 @@ void TheorySetsRels::check(Theory::Effort level)
     NodeManager* nm = NodeManager::currentNM();
 
     Node join_image_rel = join_image_term[0];
-    std::unordered_set< Node, NodeHashFunction > hasChecked;
+    std::unordered_set<Node> hasChecked;
     Node join_image_rel_rep = getRepresentative( join_image_rel );
     std::vector< Node >::iterator mem_rep_it = (*rel_mem_it).second.begin();
     MEM_IT rel_mem_exp_it = d_rReps_memberReps_exp_cache.find( join_image_rel_rep );
@@ -544,14 +545,14 @@ void TheorySetsRels::check(Theory::Effort level)
       if( tc_graph_it != (tc_it->second).end() ) {
         (tc_graph_it->second).insert( mem_rep_snd );
       } else {
-        std::unordered_set< Node, NodeHashFunction > sets;
+        std::unordered_set<Node> sets;
         sets.insert( mem_rep_snd );
         (tc_it->second)[mem_rep_fst] = sets;
       }
     } else {
       std::map< Node, Node > exp_map;
-      std::unordered_set< Node, NodeHashFunction > sets;
-      std::map< Node, std::unordered_set<Node, NodeHashFunction> > element_map;
+      std::unordered_set<Node> sets;
+      std::map<Node, std::unordered_set<Node> > element_map;
       sets.insert( mem_rep_snd );
       element_map[mem_rep_fst] = sets;
       d_tcr_tcGraph[tc_rel] = element_map;
@@ -609,7 +610,7 @@ void TheorySetsRels::check(Theory::Effort level)
     TC_IT tc_it = d_rRep_tcGraph.find( getRepresentative(tc_rel[0]) );
     if( tc_it != d_rRep_tcGraph.end() ) {
       bool isReachable = false;
-      std::unordered_set<Node, NodeHashFunction> seen;
+      std::unordered_set<Node> seen;
       isTCReachable( getRepresentative( RelsUtils::nthElementOfTuple(mem_rep, 0) ),
                      getRepresentative( RelsUtils::nthElementOfTuple(mem_rep, 1) ), seen, tc_it->second, isReachable );
       return isReachable;
@@ -617,8 +618,13 @@ void TheorySetsRels::check(Theory::Effort level)
     return false;
   }
 
-  void TheorySetsRels::isTCReachable( Node start, Node dest, std::unordered_set<Node, NodeHashFunction>& hasSeen,
-                                    std::map< Node, std::unordered_set< Node, NodeHashFunction > >& tc_graph, bool& isReachable ) {
+  void TheorySetsRels::isTCReachable(
+      Node start,
+      Node dest,
+      std::unordered_set<Node>& hasSeen,
+      std::map<Node, std::unordered_set<Node> >& tc_graph,
+      bool& isReachable)
+  {
     if(hasSeen.find(start) == hasSeen.end()) {
       hasSeen.insert(start);
     }
@@ -630,7 +636,7 @@ void TheorySetsRels::check(Theory::Effort level)
         isReachable = true;
         return;
       } else {
-        std::unordered_set< Node, NodeHashFunction >::iterator set_it = pair_set_it->second.begin();
+        std::unordered_set<Node>::iterator set_it = pair_set_it->second.begin();
 
         while( set_it != pair_set_it->second.end() ) {
           // need to check if *set_it has been looked already
@@ -645,7 +651,7 @@ void TheorySetsRels::check(Theory::Effort level)
 
   void TheorySetsRels::buildTCGraphForRel( Node tc_rel ) {
     std::map< Node, Node > rel_tc_graph_exps;
-    std::map< Node, std::unordered_set<Node, NodeHashFunction> > rel_tc_graph;
+    std::map<Node, std::unordered_set<Node> > rel_tc_graph;
 
     Node rel_rep = getRepresentative( tc_rel[0] );
     Node tc_rel_rep = getRepresentative( tc_rel );
@@ -656,10 +662,11 @@ void TheorySetsRels::check(Theory::Effort level)
       Node fst_element_rep = getRepresentative( RelsUtils::nthElementOfTuple( members[i], 0 ));
       Node snd_element_rep = getRepresentative( RelsUtils::nthElementOfTuple( members[i], 1 ));
       Node tuple_rep = RelsUtils::constructPair( rel_rep, fst_element_rep, snd_element_rep );
-      std::map< Node, std::unordered_set<Node, NodeHashFunction> >::iterator rel_tc_graph_it = rel_tc_graph.find( fst_element_rep );
+      std::map<Node, std::unordered_set<Node> >::iterator rel_tc_graph_it =
+          rel_tc_graph.find(fst_element_rep);
 
       if( rel_tc_graph_it == rel_tc_graph.end() ) {
-        std::unordered_set< Node, NodeHashFunction > snd_elements;
+        std::unordered_set<Node> snd_elements;
         snd_elements.insert( snd_element_rep );
         rel_tc_graph[fst_element_rep] = snd_elements;
         rel_tc_graph_exps[tuple_rep] = exps[i];
@@ -676,19 +683,23 @@ void TheorySetsRels::check(Theory::Effort level)
     }
   }
 
-  void TheorySetsRels::doTCInference( std::map< Node, std::unordered_set<Node, NodeHashFunction> > rel_tc_graph, std::map< Node, Node > rel_tc_graph_exps, Node tc_rel ) {
+  void TheorySetsRels::doTCInference(
+      std::map<Node, std::unordered_set<Node> > rel_tc_graph,
+      std::map<Node, Node> rel_tc_graph_exps,
+      Node tc_rel)
+  {
     Trace("rels-debug") << "[Theory::Rels] ****** doTCInference !" << std::endl;
     for (TC_GRAPH_IT tc_graph_it = rel_tc_graph.begin();
          tc_graph_it != rel_tc_graph.end();
          ++tc_graph_it)
     {
-      for (std::unordered_set<Node, NodeHashFunction>::iterator
-               snd_elements_it = tc_graph_it->second.begin();
+      for (std::unordered_set<Node>::iterator snd_elements_it =
+               tc_graph_it->second.begin();
            snd_elements_it != tc_graph_it->second.end();
            ++snd_elements_it)
       {
         std::vector< Node > reasons;
-        std::unordered_set<Node, NodeHashFunction> seen;
+        std::unordered_set<Node> seen;
         Node tuple = RelsUtils::constructPair( tc_rel, getRepresentative( tc_graph_it->first ), getRepresentative( *snd_elements_it) );
         Assert(rel_tc_graph_exps.find(tuple) != rel_tc_graph_exps.end());
         Node exp   = rel_tc_graph_exps.find( tuple )->second;
@@ -701,8 +712,15 @@ void TheorySetsRels::check(Theory::Effort level)
     Trace("rels-debug") << "[Theory::Rels] ****** Done with doTCInference !" << std::endl;
   }
 
-  void TheorySetsRels::doTCInference(Node tc_rel, std::vector< Node > reasons, std::map< Node, std::unordered_set< Node, NodeHashFunction > >& tc_graph,
-                                       std::map< Node, Node >& rel_tc_graph_exps, Node start_node_rep, Node cur_node_rep, std::unordered_set< Node, NodeHashFunction >& seen ) {
+  void TheorySetsRels::doTCInference(
+      Node tc_rel,
+      std::vector<Node> reasons,
+      std::map<Node, std::unordered_set<Node> >& tc_graph,
+      std::map<Node, Node>& rel_tc_graph_exps,
+      Node start_node_rep,
+      Node cur_node_rep,
+      std::unordered_set<Node>& seen)
+  {
     NodeManager* nm = NodeManager::currentNM();
     Node tc_mem = RelsUtils::constructPair( tc_rel, RelsUtils::nthElementOfTuple((reasons.front())[0], 0), RelsUtils::nthElementOfTuple((reasons.back())[0], 1) );
     std::vector< Node > all_reasons( reasons );
@@ -737,8 +755,7 @@ void TheorySetsRels::check(Theory::Effort level)
     seen.insert( cur_node_rep );
     TC_GRAPH_IT  cur_set = tc_graph.find( cur_node_rep );
     if( cur_set != tc_graph.end() ) {
-      for (std::unordered_set<Node, NodeHashFunction>::iterator set_it =
-               cur_set->second.begin();
+      for (std::unordered_set<Node>::iterator set_it = cur_set->second.begin();
            set_it != cur_set->second.end();
            ++set_it)
       {
index 2ca8696b0a7d4add57004fd6920ed5e4ff1e77ba..c30322d07f658e51f8b6b703afe3cbfc172e7db1 100644 (file)
@@ -61,27 +61,27 @@ public:
  */
 class TheorySetsRels {
   typedef context::CDList<Node> NodeList;
-  typedef context::CDHashSet< Node, NodeHashFunction >            NodeSet;
-  typedef context::CDHashMap< Node, Node, NodeHashFunction >      NodeMap;
+  typedef context::CDHashSet<Node> NodeSet;
+  typedef context::CDHashMap<Node, Node> NodeMap;
 
-public:
- TheorySetsRels(SolverState& s,
-                InferenceManager& im,
-                SkolemCache& skc,
-                TermRegistry& treg);
-
- ~TheorySetsRels();
- /**
-  * Invoke the check method with effort level e. At a high level, this class
-  * will make calls to TheorySetsPrivate::processInference to assert facts,
-  * lemmas, and conflicts. If this class makes no such call, then the current
-  * set of assertions is satisfiable with respect to relations.
-  */
- void check(Theory::Effort e);
- /** Is kind k a kind that belongs to the relation theory? */
- static bool isRelationKind(Kind k);
-
-private:
+ public:
 TheorySetsRels(SolverState& s,
+                 InferenceManager& im,
+                 SkolemCache& skc,
+                 TermRegistry& treg);
+
 ~TheorySetsRels();
 /**
+   * Invoke the check method with effort level e. At a high level, this class
+   * will make calls to TheorySetsPrivate::processInference to assert facts,
+   * lemmas, and conflicts. If this class makes no such call, then the current
+   * set of assertions is satisfiable with respect to relations.
+   */
 void check(Theory::Effort e);
 /** Is kind k a kind that belongs to the relation theory? */
 static bool isRelationKind(Kind k);
+
+ private:
   /** True and false constant nodes */
   Node                          d_trueNode;
   Node                          d_falseNode;
@@ -98,13 +98,12 @@ private:
   std::vector<Node> d_pending;
   NodeSet                       d_shared_terms;
 
-
-  std::unordered_set< Node, NodeHashFunction >       d_rel_nodes;
+  std::unordered_set<Node> d_rel_nodes;
   std::map< Node, std::vector<Node> >           d_tuple_reps;
   std::map< Node, TupleTrie >                   d_membership_trie;
 
   /** Symbolic tuple variables that has been reduced to concrete ones */
-  std::unordered_set< Node, NodeHashFunction >       d_symbolic_tuples;
+  std::unordered_set<Node> d_symbolic_tuples;
 
   /** Mapping between relation and its member representatives */
   std::map< Node, std::vector< Node > >           d_rReps_memberReps_cache;
@@ -116,8 +115,8 @@ private:
   std::map< Node, std::map<kind::Kind_t, std::vector<Node> > >                  d_terms_cache;
 
   /** Mapping between transitive closure relation TC(r) and its TC graph constructed based on the members of r*/
-  std::map< Node, std::map< Node, std::unordered_set<Node, NodeHashFunction> > >     d_rRep_tcGraph;
-  std::map< Node, std::map< Node, std::unordered_set<Node, NodeHashFunction> > >     d_tcr_tcGraph;
+  std::map<Node, std::map<Node, std::unordered_set<Node> > > d_rRep_tcGraph;
+  std::map<Node, std::map<Node, std::unordered_set<Node> > > d_tcr_tcGraph;
   std::map< Node, std::map< Node, Node > > d_tcr_tcGraph_exps;
 
  private:
@@ -154,9 +153,16 @@ private:
   void applyTCRule( Node mem, Node rel, Node rel_rep, Node exp);
   void buildTCGraphForRel( Node tc_rel );
   void doTCInference();
-  void doTCInference( std::map< Node, std::unordered_set<Node, NodeHashFunction> > rel_tc_graph, std::map< Node, Node > rel_tc_graph_exps, Node tc_rel );
-  void doTCInference(Node tc_rel, std::vector< Node > reasons, std::map< Node, std::unordered_set< Node, NodeHashFunction > >& tc_graph,
-                       std::map< Node, Node >& rel_tc_graph_exps, Node start_node_rep, Node cur_node_rep, std::unordered_set< Node, NodeHashFunction >& seen );
+  void doTCInference(std::map<Node, std::unordered_set<Node> > rel_tc_graph,
+                     std::map<Node, Node> rel_tc_graph_exps,
+                     Node tc_rel);
+  void doTCInference(Node tc_rel,
+                     std::vector<Node> reasons,
+                     std::map<Node, std::unordered_set<Node> >& tc_graph,
+                     std::map<Node, Node>& rel_tc_graph_exps,
+                     Node start_node_rep,
+                     Node cur_node_rep,
+                     std::unordered_set<Node>& seen);
 
   void composeMembersForRels( Node );
   void computeMembersForBinOpRel( Node );
@@ -165,8 +171,11 @@ private:
   void computeMembersForJoinImageTerm( Node );
 
   bool isTCReachable( Node mem_rep, Node tc_rel );
-  void isTCReachable( Node start, Node dest, std::unordered_set<Node, NodeHashFunction>& hasSeen,
-                    std::map< Node, std::unordered_set< Node, NodeHashFunction > >& tc_graph, bool& isReachable );
+  void isTCReachable(Node start,
+                     Node dest,
+                     std::unordered_set<Node>& hasSeen,
+                     std::map<Node, std::unordered_set<Node> >& tc_graph,
+                     bool& isReachable);
 
   /** Helper functions */
   bool hasTerm( Node a );
index 655c2aa88a7219ce2c1aa7db30fc8babb17e36e2..40f6080e5e112156edd8ad6dd7b99c5c332975bc 100644 (file)
@@ -47,7 +47,7 @@ class SharedTermsDatabase : public context::ContextNotifyObj {
   IntStat d_statSharedTerms;
 
   // Needs to be a map from Nodes as after a backtrack they might not exist
-  typedef std::unordered_map<Node, shared_terms_list, TNodeHashFunction> SharedTermsMap;
+  typedef std::unordered_map<Node, shared_terms_list> SharedTermsMap;
 
   /** A map from atoms to a list of shared terms */
   SharedTermsMap d_atomsToTerms;
@@ -66,12 +66,11 @@ class SharedTermsDatabase : public context::ContextNotifyObj {
   SharedTermsTheoriesMap d_termsToTheories;
 
   /** Map from term to theories that have already been notified about the shared term */
-  typedef context::CDHashMap<TNode, theory::TheoryIdSet, TNodeHashFunction>
-      AlreadyNotifiedMap;
+  typedef context::CDHashMap<TNode, theory::TheoryIdSet> AlreadyNotifiedMap;
   AlreadyNotifiedMap d_alreadyNotifiedMap;
 
   /** The registered equalities for propagation */
-  typedef context::CDHashSet<Node, NodeHashFunction> RegisteredEqualitiesSet;
+  typedef context::CDHashSet<Node> RegisteredEqualitiesSet;
   RegisteredEqualitiesSet d_registeredEqualities;
 
  private:
index 9c9adf99e98129881149c36d3a6c20de7f2d3d6d..4c3b2f17ee31c57db7dfa8ed1769887d0442f892 100644 (file)
@@ -131,7 +131,7 @@ bool ArithEntail::checkApprox(Node ar)
       // c.isNull() means c = 1
       bool isOverApprox = !c.isNull() && c.getConst<Rational>().sgn() == -1;
       std::vector<Node>& approx = mApprox[v];
-      std::unordered_set<Node, NodeHashFunction> visited;
+      std::unordered_set<Node> visited;
       std::vector<Node> toProcess;
       toProcess.push_back(v);
       do
@@ -561,7 +561,7 @@ bool ArithEntail::checkWithEqAssumption(Node assumption, Node a, bool strict)
                           << ", strict=" << strict << std::endl;
 
   // Find candidates variables to compute substitutions for
-  std::unordered_set<Node, NodeHashFunction> candVars;
+  std::unordered_set<Node> candVars;
   std::vector<Node> toVisit = {assumption};
   while (!toVisit.empty())
   {
index 41cb3e608abc2b117cbe656720dd3dd21fcd7804..6c423e3b893c7780ba0b36f4d4593460c697bfe1 100644 (file)
@@ -39,7 +39,7 @@ namespace strings {
  */
 class BaseSolver
 {
-  using NodeSet = context::CDHashSet<Node, NodeHashFunction>;
+  using NodeSet = context::CDHashSet<Node>;
 
  public:
   BaseSolver(SolverState& s, InferenceManager& im);
index ed220c1eb3eb6bb684f83c97b783b0e8a1f4072b..a6e4ce6987f1ce6a367a2058a7d54af07bb2a0f8 100644 (file)
@@ -1078,7 +1078,7 @@ void CoreSolver::processNEqc(Node eqc,
   // the possible inferences
   std::vector<CoreInferInfo> pinfer;
   // compute normal forms that are effectively unique
-  std::unordered_map<Node, size_t, NodeHashFunction> nfCache;
+  std::unordered_map<Node, size_t> nfCache;
   std::vector<size_t> nfIndices;
   bool hasConstIndex = false;
   for (size_t i = 0, nnforms = normal_forms.size(); i < nnforms; i++)
index 143155f5589fae779490fb345a5eaa83cf00193c..4e8a0a96b9ab6c286fe8f0aa01b5b670f4116907 100644 (file)
@@ -79,7 +79,7 @@ class CoreInferInfo
 class CoreSolver
 {
   friend class InferenceManager;
-  using NodeIntMap = context::CDHashMap<Node, int, NodeHashFunction>;
+  using NodeIntMap = context::CDHashMap<Node, int>;
 
  public:
   CoreSolver(SolverState& s,
index e00668997d63f654af892c135cbf3b6112ed8e03..a1de5e2951cb0cb52fb94a93fda03c0f21e352a1 100644 (file)
@@ -251,7 +251,7 @@ void ExtfSolver::checkExtfEval(int effort)
   bool has_nreduce = false;
   std::vector<Node> terms = d_extt.getActive();
   // the set of terms we have done extf inferences for
-  std::unordered_set<Node, NodeHashFunction> inferProcessed;
+  std::unordered_set<Node> inferProcessed;
   for (const Node& n : terms)
   {
     // Setup information about n, including if it is equal to a constant.
index bfcf244d70c0168972c114a614aafe8017c37a67..82b4f61ee819e4137463e1d54f8ce83ff525c542 100644 (file)
@@ -81,7 +81,7 @@ class ExtfInfoTmp
  */
 class ExtfSolver
 {
-  typedef context::CDHashSet<Node, NodeHashFunction> NodeSet;
+  typedef context::CDHashSet<Node> NodeSet;
 
  public:
   ExtfSolver(SolverState& s,
index 6b2c4dfc46b1a67718f900e359b32feb94e51d63..af905cbada5b98012aca64f149d2ad4560fc1c32 100644 (file)
@@ -45,8 +45,7 @@ namespace strings {
  */
 class InferProofCons : public ProofGenerator
 {
-  typedef context::CDHashMap<Node, std::shared_ptr<InferInfo>, NodeHashFunction>
-      NodeInferInfoMap;
+  typedef context::CDHashMap<Node, std::shared_ptr<InferInfo>> NodeInferInfoMap;
 
  public:
   InferProofCons(context::Context* c,
index b18c64319737d11bc0ef1f5f29d5411b11296ff5..cf9c64bb10f48ecbf9afc3acc27ebb5e1eb8e31e 100644 (file)
@@ -72,8 +72,8 @@ namespace strings {
  */
 class InferenceManager : public InferenceManagerBuffered
 {
-  typedef context::CDHashSet<Node, NodeHashFunction> NodeSet;
-  typedef context::CDHashMap<Node, Node, NodeHashFunction> NodeNodeMap;
+  typedef context::CDHashSet<Node> NodeSet;
+  typedef context::CDHashMap<Node, Node> NodeNodeMap;
   friend class InferInfo;
 
  public:
index ace2756c1c9a261a25db1ced1d9238d78c3fe122..bf4c20f854be5a4cab2aaba445a9fe6a630dde35 100644 (file)
@@ -63,7 +63,7 @@ bool RegExpOpr::checkConstRegExp( Node r ) {
 RegExpConstType RegExpOpr::getRegExpConstType(Node r)
 {
   Assert(r.getType().isRegExp());
-  std::unordered_map<Node, RegExpConstType, NodeHashFunction>::iterator it;
+  std::unordered_map<Node, RegExpConstType>::iterator it;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(r);
@@ -1345,8 +1345,8 @@ Node RegExpOpr::intersectInternal( Node r1, Node r2, std::map< PairNodes, Node >
 Node RegExpOpr::removeIntersection(Node r) {
   Assert(checkConstRegExp(r));
   NodeManager* nm = NodeManager::currentNM();
-  std::unordered_map<TNode, Node, TNodeHashFunction> visited;
-  std::unordered_map<TNode, Node, TNodeHashFunction>::iterator it;
+  std::unordered_map<TNode, Node> visited;
+  std::unordered_map<TNode, Node>::iterator it;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(r);
index d0ed07308cd68f90100f6d4fb1099ba821b861a1..a20e9a0a947b059b3ec33644d7ecfefd4e6682cb 100644 (file)
@@ -78,7 +78,7 @@ class RegExpOpr {
   std::map<PairNodeStr, Node> d_dv_cache;
   std::map<PairNodeStr, std::pair<Node, int> > d_deriv_cache;
   /** cache mapping regular expressions to whether they contain constants */
-  std::unordered_map<Node, RegExpConstType, NodeHashFunction> d_constCache;
+  std::unordered_map<Node, RegExpConstType> d_constCache;
   std::map<Node, std::pair<std::set<unsigned>, std::set<Node> > > d_fset_cache;
   std::map<PairNodes, Node> d_inter_cache;
   std::map<Node, std::vector<PairNodes> > d_split_cache;
index 38fc6fc8f42f56a381fc4f000d05d2297af4b7bf..167ce9570765f1e19f4a005c524890b0503e1dc7 100644 (file)
@@ -137,7 +137,7 @@ void RegExpSolver::check(const std::map<Node, std::vector<Node> >& mems)
     NodeManager* nm = NodeManager::currentNM();
     // representatives of strings that are the LHS of positive memberships that
     // we unfolded
-    std::unordered_set<Node, NodeHashFunction> repUnfold;
+    std::unordered_set<Node> repUnfold;
     // check positive (e=0), then negative (e=1) memberships
     for (unsigned e = 0; e < 2; e++)
     {
@@ -329,7 +329,7 @@ void RegExpSolver::check(const std::map<Node, std::vector<Node> >& mems)
 
 bool RegExpSolver::checkEqcInclusion(std::vector<Node>& mems)
 {
-  std::unordered_set<Node, NodeHashFunction> remove;
+  std::unordered_set<Node> remove;
 
   for (const Node& m1 : mems)
   {
index bf148a07159cdbae86ae516c08bad6b10a069145..98e2449c57068f6e4aad41f1a74c68febd090fc5 100644 (file)
@@ -38,11 +38,11 @@ namespace strings {
 class RegExpSolver
 {
   typedef context::CDList<Node> NodeList;
-  typedef context::CDHashMap<Node, bool, NodeHashFunction> NodeBoolMap;
-  typedef context::CDHashMap<Node, int, NodeHashFunction> NodeIntMap;
-  typedef context::CDHashMap<Node, unsigned, NodeHashFunction> NodeUIntMap;
-  typedef context::CDHashMap<Node, Node, NodeHashFunction> NodeNodeMap;
-  typedef context::CDHashSet<Node, NodeHashFunction> NodeSet;
+  typedef context::CDHashMap<Node, bool> NodeBoolMap;
+  typedef context::CDHashMap<Node, int> NodeIntMap;
+  typedef context::CDHashMap<Node, unsigned> NodeUIntMap;
+  typedef context::CDHashMap<Node, Node> NodeNodeMap;
+  typedef context::CDHashSet<Node> NodeSet;
 
  public:
   RegExpSolver(SolverState& s,
index b3ffa784f288e47852ebf9ba410c8debda2e91ee..126ee313d624c0999a7b1a07319ced514f572dbe 100644 (file)
@@ -207,7 +207,7 @@ class SkolemCache
   /** map from node pairs and identifiers to skolems */
   std::map<Node, std::map<Node, std::map<SkolemId, Node> > > d_skolemCache;
   /** the set of all skolems we have generated */
-  std::unordered_set<Node, NodeHashFunction> d_allSkolems;
+  std::unordered_set<Node> d_allSkolems;
 };
 
 }  // namespace strings
index ba9f0f4e120fb14a876d677c53cdb55d591a0c7c..39ba6168a3de213563ed2093a122b0ce94713858 100644 (file)
@@ -37,7 +37,7 @@ namespace strings {
  */
 class StringsFmf
 {
-  typedef context::CDHashSet<Node, NodeHashFunction> NodeSet;
+  typedef context::CDHashSet<Node> NodeSet;
 
  public:
   StringsFmf(context::Context* c,
index 4460e1ff3363981020934938ed96e58b937fe3e0..d7a0a055466c9898c143d4f175e0a15834a166f8 100644 (file)
@@ -437,8 +437,7 @@ const context::CDList<TNode>& TermRegistry::getFunctionTerms() const
   return d_functionsTerms;
 }
 
-const context::CDHashSet<Node, NodeHashFunction>& TermRegistry::getInputVars()
-    const
+const context::CDHashSet<Node>& TermRegistry::getInputVars() const
 {
   return d_inputVars;
 }
index f0543c282d6353d923f4f3a4aec9ea6cd567c6bc..7c399759be6d1a2a95f747a910176d7b7754038c 100644 (file)
@@ -46,9 +46,9 @@ class InferenceManager;
  */
 class TermRegistry
 {
-  typedef context::CDHashSet<Node, NodeHashFunction> NodeSet;
-  typedef context::CDHashSet<TypeNode, TypeNodeHashFunction> TypeNodeSet;
-  typedef context::CDHashMap<Node, Node, NodeHashFunction> NodeNodeMap;
+  typedef context::CDHashSet<Node> NodeSet;
+  typedef context::CDHashSet<TypeNode, std::hash<TypeNode>> TypeNodeSet;
+  typedef context::CDHashMap<Node, Node> NodeNodeMap;
 
  public:
   TermRegistry(SolverState& s,
@@ -147,7 +147,7 @@ class TermRegistry
    * Get the "input variables", corresponding to the set of leaf nodes of
    * string-like type that have been preregistered as terms to this object.
    */
-  const context::CDHashSet<Node, NodeHashFunction>& getInputVars() const;
+  const context::CDHashSet<Node>& getInputVars() const;
   /** Returns true if any str.code terms have been preregistered */
   bool hasStringCode() const;
   //---------------------------- end queries
index 02c0c3130f449783f836a0f9291612a15a1bb398..06a39ec648888dd86e2198c625f09265ddad1f6c 100644 (file)
@@ -210,7 +210,7 @@ bool TheoryStrings::collectModelValues(TheoryModel* m,
     Trace("strings-debug-model") << d_esolver.debugPrintModel() << std::endl;
   }
   Trace("strings-model") << "TheoryStrings::collectModelValues" << std::endl;
-  std::map<TypeNode, std::unordered_set<Node, NodeHashFunction> > repSet;
+  std::map<TypeNode, std::unordered_set<Node> > repSet;
   // Generate model
   // get the relevant string equivalence classes
   for (const Node& s : termSet)
@@ -222,9 +222,7 @@ bool TheoryStrings::collectModelValues(TheoryModel* m,
       repSet[tn].insert(r);
     }
   }
-  for (const std::pair<const TypeNode,
-                       std::unordered_set<Node, NodeHashFunction> >& rst :
-       repSet)
+  for (const std::pair<const TypeNode, std::unordered_set<Node> >& rst : repSet)
   {
     // get partition of strings of equal lengths, per type
     std::map<TypeNode, std::vector<std::vector<Node> > > colT;
@@ -241,12 +239,11 @@ bool TheoryStrings::collectModelValues(TheoryModel* m,
   return true;
 }
 
-bool TheoryStrings::collectModelInfoType(
-    TypeNode tn,
-    const std::unordered_set<Node, NodeHashFunction>& repSet,
-    std::vector<std::vector<Node> >& col,
-    std::vector<Node>& lts,
-    TheoryModel* m)
+bool TheoryStrings::collectModelInfoType(TypeNode tn,
+                                         const std::unordered_set<Node>& repSet,
+                                         std::vector<std::vector<Node> >& col,
+                                         std::vector<Node>& lts,
+                                         TheoryModel* m)
 {
   NodeManager* nm = NodeManager::currentNM();
   std::map< Node, Node > processed;
index 01111880dff3c735dd7fdf027eb9eb2b7989c1fc..a671129d4cf77f077837a8d893b80866d4d1a27d 100644 (file)
@@ -60,8 +60,9 @@ namespace strings {
  */
 class TheoryStrings : public Theory {
   friend class InferenceManager;
-  typedef context::CDHashSet<Node, NodeHashFunction> NodeSet;
-  typedef context::CDHashSet<TypeNode, TypeNodeHashFunction> TypeNodeSet;
+  typedef context::CDHashSet<Node> NodeSet;
+  typedef context::CDHashSet<TypeNode, std::hash<TypeNode>> TypeNodeSet;
+
  public:
   TheoryStrings(context::Context* c,
                 context::UserContext* u,
@@ -195,12 +196,11 @@ class TheoryStrings : public Theory {
    *
    * Returns false if a conflict is discovered while doing this assignment.
    */
-  bool collectModelInfoType(
-      TypeNode tn,
-      const std::unordered_set<Node, NodeHashFunction>& repSet,
-      std::vector<std::vector<Node> >& col,
-      std::vector<Node>& lts,
-      TheoryModel* m);
+  bool collectModelInfoType(TypeNode tn,
+                            const std::unordered_set<Node>& repSet,
+                            std::vector<std::vector<Node>>& col,
+                            std::vector<Node>& lts,
+                            TheoryModel* m);
 
   /** assert pending fact
    *
index c3c444fc7b969721aa575612ad2fd4ab485aa5ee..5a4a25e88cb45f7675096dc4f0a4d61d2a2c5679 100644 (file)
@@ -70,8 +70,8 @@ void flattenOp(Kind k, Node n, std::vector<Node>& conj)
     return;
   }
   // otherwise, traverse
-  std::unordered_set<TNode, TNodeHashFunction> visited;
-  std::unordered_set<TNode, TNodeHashFunction>::iterator it;
+  std::unordered_set<TNode> visited;
+  std::unordered_set<TNode>::iterator it;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(n);
index b58ffad33620a37058f0c59cd3e3b3e4dfea6570..e2a81f54a9fb87f1727b47e2f1350335768e2498 100644 (file)
@@ -73,9 +73,9 @@ bool SubstitutionMinimize::findWithImplied(Node t,
   std::vector<Node> tconj;
   getConjuncts(t, tconj);
   // map from conjuncts to their free symbols
-  std::map<Node, std::unordered_set<Node, NodeHashFunction> > tcFv;
+  std::map<Node, std::unordered_set<Node> > tcFv;
 
-  std::unordered_set<Node, NodeHashFunction> reqSet;
+  std::unordered_set<Node> reqSet;
   std::vector<Node> reqSubs;
   std::map<Node, unsigned> reqVarToIndex;
   for (const Node& v : reqVars)
@@ -104,8 +104,7 @@ bool SubstitutionMinimize::findWithImplied(Node t,
     for (const Node& tc : tconj)
     {
       // ensure we've computed its free symbols
-      std::map<Node, std::unordered_set<Node, NodeHashFunction> >::iterator
-          itf = tcFv.find(tc);
+      std::map<Node, std::unordered_set<Node> >::iterator itf = tcFv.find(tc);
       if (itf == tcFv.end())
       {
         expr::getSymbols(tc, tcFv[tc]);
@@ -181,8 +180,8 @@ bool SubstitutionMinimize::findInternal(Node n,
 
   Trace("subs-min") << "--- Compute values for subterms..." << std::endl;
   // the value of each subterm in n under the substitution
-  std::unordered_map<TNode, Node, TNodeHashFunction> value;
-  std::unordered_map<TNode, Node, TNodeHashFunction>::iterator it;
+  std::unordered_map<TNode, Node> value;
+  std::unordered_map<TNode, Node>::iterator it;
   std::vector<TNode> visit;
   TNode cur;
   visit.push_back(n);
@@ -262,12 +261,12 @@ bool SubstitutionMinimize::findInternal(Node n,
   }
 
   Trace("subs-min") << "--- Compute relevant variables..." << std::endl;
-  std::unordered_set<Node, NodeHashFunction> rlvFv;
+  std::unordered_set<Node> rlvFv;
   // only variables that occur in assertions are relevant
 
   visit.push_back(n);
-  std::unordered_set<TNode, TNodeHashFunction> visited;
-  std::unordered_set<TNode, TNodeHashFunction>::iterator itv;
+  std::unordered_set<TNode> visited;
+  std::unordered_set<TNode>::iterator itv;
   do
   {
     cur = visit.back();
index e1d75d95764cd5546cca116a35074020bfcfaf31..08936e3b62b1ed75e52eb1bab12f54f3da5190c6 100644 (file)
@@ -40,18 +40,16 @@ namespace theory {
  *
  * This map is context-dependent.
  */
-class SubstitutionMap {
-
-public:
-
-  typedef context::CDHashMap<Node, Node, NodeHashFunction> NodeMap;
+class SubstitutionMap
+{
+ public:
+  typedef context::CDHashMap<Node, Node> NodeMap;
 
   typedef NodeMap::iterator iterator;
   typedef NodeMap::const_iterator const_iterator;
 
-private:
-
-  typedef std::unordered_map<Node, Node, NodeHashFunction> NodeCache;
+ private:
+  typedef std::unordered_map<Node, Node> NodeCache;
   /** A dummy context used by this class if none is provided */
   context::Context d_context;
 
@@ -68,18 +66,21 @@ private:
   Node internalSubstitute(TNode t, NodeCache& cache);
 
   /** Helper class to invalidate cache on user pop */
-  class CacheInvalidator : public context::ContextNotifyObj {
+  class CacheInvalidator : public context::ContextNotifyObj
+  {
     bool& d_cacheInvalidated;
-  protected:
-   void contextNotifyPop() override { d_cacheInvalidated = true; }
 
-  public:
-    CacheInvalidator(context::Context* context, bool& cacheInvalidated) :
-      context::ContextNotifyObj(context),
-      d_cacheInvalidated(cacheInvalidated) {
+   protected:
+    void contextNotifyPop() override { d_cacheInvalidated = true; }
+
+   public:
+    CacheInvalidator(context::Context* context, bool& cacheInvalidated)
+        : context::ContextNotifyObj(context),
+          d_cacheInvalidated(cacheInvalidated)
+    {
     }
 
-  };/* class SubstitutionMap::CacheInvalidator */
+  }; /* class SubstitutionMap::CacheInvalidator */
 
   /**
    * This object is notified on user pop and marks the SubstitutionMap's
@@ -103,7 +104,8 @@ private:
   /**
    * Returns true iff x is in the substitution map
    */
-  bool hasSubstitution(TNode x) const {
+  bool hasSubstitution(TNode x) const
+  {
     return d_substitutions.find(x) != d_substitutions.end();
   }
 
@@ -115,8 +117,10 @@ private:
    * is mainly intended for constructing assertions about what has
    * already been put in the map.
    */
-  TNode getSubstitution(TNode x) const {
-    AssertArgument(hasSubstitution(x), x, "element not in this substitution map");
+  TNode getSubstitution(TNode x) const
+  {
+    AssertArgument(
+        hasSubstitution(x), x, "element not in this substitution map");
     return (*d_substitutions.find(x)).second;
   }
 
@@ -128,29 +132,20 @@ private:
   /**
    * Apply the substitutions to the node.
    */
-  Node apply(TNode t, bool doRewrite = false) const {
+  Node apply(TNode t, bool doRewrite = false) const
+  {
     return const_cast<SubstitutionMap*>(this)->apply(t, doRewrite);
   }
 
-  iterator begin() {
-    return d_substitutions.begin();
-  }
+  iterator begin() { return d_substitutions.begin(); }
 
-  iterator end() {
-    return d_substitutions.end();
-  }
+  iterator end() { return d_substitutions.end(); }
 
-  const_iterator begin() const {
-    return d_substitutions.begin();
-  }
+  const_iterator begin() const { return d_substitutions.begin(); }
 
-  const_iterator end() const {
-    return d_substitutions.end();
-  }
+  const_iterator end() const { return d_substitutions.end(); }
 
-  bool empty() const {
-    return d_substitutions.empty();
-  }
+  bool empty() const { return d_substitutions.empty(); }
 
   /**
    * Print to the output stream
@@ -158,7 +153,7 @@ private:
   void print(std::ostream& out) const;
   void debugPrint() const;
 
-};/* class SubstitutionMap */
+}; /* class SubstitutionMap */
 
 inline std::ostream& operator << (std::ostream& out, const SubstitutionMap& subst) {
   subst.print(out);
index 04200ed70e0c60deae363e0d455c886a607d36b3..86ab160d8b1ec1de25dcd3075f2520dd95e129a3 100644 (file)
@@ -43,8 +43,7 @@ class PreRegisterVisitor {
   /** The engine */
   TheoryEngine* d_engine;
 
-  typedef context::CDHashMap<TNode, theory::TheoryIdSet, TNodeHashFunction>
-      TNodeToTheorySetMap;
+  typedef context::CDHashMap<TNode, theory::TheoryIdSet> TNodeToTheorySetMap;
 
   /**
    * Map from terms to the theories that have already had this term pre-registered.
@@ -129,10 +128,8 @@ class PreRegisterVisitor {
  * been visited already, we need to visit it again, since we need to associate it with both atoms.
  */
 class SharedTermsVisitor {
-  using TNodeVisitedMap =
-      std::unordered_map<TNode, theory::TheoryIdSet, TNodeHashFunction>;
-  using TNodeToTheorySetMap =
-      context::CDHashMap<TNode, theory::TheoryIdSet, TNodeHashFunction>;
+  using TNodeVisitedMap = std::unordered_map<TNode, theory::TheoryIdSet>;
+  using TNodeToTheorySetMap = context::CDHashMap<TNode, theory::TheoryIdSet>;
   /**
    * String representation of the visited map, for debugging purposes.
    */
index 5d2128c5435fc0e958e8cbdbe8b64f5ec75d7685..d6ad4cd4116f684f680e6604490fcc9dee1f54a8 100644 (file)
@@ -341,8 +341,9 @@ bool Theory::isLegalElimination(TNode x, TNode val)
   return tm->isLegalElimination(x, val);
 }
 
-std::unordered_set<TNode, TNodeHashFunction> Theory::currentlySharedTerms() const{
-  std::unordered_set<TNode, TNodeHashFunction> currentlyShared;
+std::unordered_set<TNode> Theory::currentlySharedTerms() const
+{
+  std::unordered_set<TNode> currentlyShared;
   for (shared_terms_iterator i = shared_terms_begin(),
            i_end = shared_terms_end(); i != i_end; ++i) {
     currentlyShared.insert (*i);
index 9cf663a4faf0d85960d82893b3e2c25c955c5b79..8f69d4cb2616d1c9e6c3cfa702d3b9d71f9b20f4 100644 (file)
@@ -828,7 +828,7 @@ class Theory {
    * This is a utility function for constructing a copy of the currently shared terms
    * in a queriable form.  As this is
    */
-  std::unordered_set<TNode, TNodeHashFunction> currentlySharedTerms() const;
+  std::unordered_set<TNode> currentlySharedTerms() const;
 
   /**
    * This allows the theory to be queried for whether a literal, lit, is
index 1acaca34f34113c9fe72bb9192bf75930f0dc071..abbca451a1c0cf3e8a7e2a6e1a3e6ee8cf79ac4e 100644 (file)
@@ -1119,8 +1119,8 @@ theory::EqualityStatus TheoryEngine::getEqualityStatus(TNode a, TNode b) {
   return d_sharedSolver->getEqualityStatus(a, b);
 }
 
-const std::unordered_set<TNode, TNodeHashFunction>&
-TheoryEngine::getRelevantAssertions(bool& success)
+const std::unordered_set<TNode>& TheoryEngine::getRelevantAssertions(
+    bool& success)
 {
   // if we are not in SAT mode, or there is no relevance manager, we fail
   if (!d_inSatMode || d_relManager == nullptr)
@@ -1203,10 +1203,9 @@ TrustNode TheoryEngine::getExplanation(TNode node)
 struct AtomsCollect {
 
   std::vector<TNode> d_atoms;
-  std::unordered_set<TNode, TNodeHashFunction> d_visited;
-
-public:
+  std::unordered_set<TNode> d_visited;
 
+ public:
   typedef void return_type;
 
   bool alreadyVisited(TNode current, TNode parent) {
@@ -1508,7 +1507,7 @@ theory::TrustNode TheoryEngine::getExplanation(
   // vector of trust nodes to explain at the end
   std::vector<std::pair<TheoryId, TrustNode>> texplains;
   // cache of nodes we have already explained by some theory
-  std::unordered_map<Node, size_t, NodeHashFunction> cache;
+  std::unordered_map<Node, size_t> cache;
 
   while (i < explanationVector.size()) {
     // Get the current literal to explain
index 4c097a26240f7fc6b9ed4c885c013c5108a485c3..6887959edddd9d915045806348486c0eb0b181ff 100644 (file)
@@ -68,10 +68,10 @@ struct NodeTheoryPair {
 };/* struct NodeTheoryPair */
 
 struct NodeTheoryPairHashFunction {
-  NodeHashFunction hashFunction;
+  std::hash<Node> hashFunction;
   // Hash doesn't take into account the timestamp
   size_t operator()(const NodeTheoryPair& pair) const {
-    uint64_t hash = fnv1a::fnv1a_64(NodeHashFunction()(pair.d_node));
+    uint64_t hash = fnv1a::fnv1a_64(std::hash<Node>()(pair.d_node));
     return static_cast<size_t>(fnv1a::fnv1a_64(pair.d_theory, hash));
   }
 };/* struct NodeTheoryPairHashFunction */
@@ -162,7 +162,7 @@ class TheoryEngine {
    * An empty set of relevant assertions, which is returned as a dummy value for
    * getRelevantAssertions when relevance is disabled.
    */
-  std::unordered_set<TNode, TNodeHashFunction> d_emptyRelevantSet;
+  std::unordered_set<TNode> d_emptyRelevantSet;
 
   /** are we in eager model building mode? (see setEagerModelBuilding). */
   bool d_eager_model_building;
@@ -637,8 +637,7 @@ class TheoryEngine {
    * relevance manager failed to compute relevant assertions due to an internal
    * error.
    */
-  const std::unordered_set<TNode, TNodeHashFunction>& getRelevantAssertions(
-      bool& success);
+  const std::unordered_set<TNode>& getRelevantAssertions(bool& success);
 
   /**
    * Forwards an entailment check according to the given theoryOfMode.
index 16721622638165a12d6f9315564d309a00f3228b..48969aa21f875ae2ab52a9d3a3b34ee6c1b24cc2 100644 (file)
@@ -38,9 +38,8 @@ namespace cvc5 {
  */
 class TheoryEngineProofGenerator : public ProofGenerator
 {
-  typedef context::
-      CDHashMap<Node, std::shared_ptr<LazyCDProof>, NodeHashFunction>
-          NodeLazyCDProofMap;
+  typedef context::CDHashMap<Node, std::shared_ptr<LazyCDProof>>
+      NodeLazyCDProofMap;
 
  public:
   TheoryEngineProofGenerator(ProofNodeManager* pnm, context::UserContext* u);
index a785af1863c51f753139956d17777e7a4c5e8a9a..2cb7d9d30f93fad1219a3bdb8907264d4dc85e64 100644 (file)
@@ -68,7 +68,7 @@ class ProofEqEngine;
  */
 class TheoryInferenceManager
 {
-  typedef context::CDHashSet<Node, NodeHashFunction> NodeSet;
+  typedef context::CDHashSet<Node> NodeSet;
 
  public:
   /**
index a95546cf5ebf717ccfcf441ca9b6342cf6377fab..dd1e0b8836b3df577ba6d236d0b568b02f35444a 100644 (file)
@@ -184,7 +184,7 @@ Cardinality TheoryModel::getCardinality(TypeNode tn) const
 
 Node TheoryModel::getModelValue(TNode n) const
 {
-  std::unordered_map<Node, Node, NodeHashFunction>::iterator it = d_modelCache.find(n);
+  std::unordered_map<Node, Node>::iterator it = d_modelCache.find(n);
   if (it != d_modelCache.end()) {
     return (*it).second;
   }
index ab66e8fe7a82abcd6e3773ef101782cde5bb308c..951a62caea7dbf58f37a27c970127871897d9ec4 100644 (file)
@@ -398,7 +398,7 @@ class TheoryModel
   /** are we using model cores? */
   bool d_using_model_core;
   /** symbols that are in the model core */
-  std::unordered_set<Node, NodeHashFunction> d_model_core;
+  std::unordered_set<Node> d_model_core;
   /** Get model value function.
    *
    * This function is a helper function for getValue.
@@ -414,7 +414,7 @@ class TheoryModel
   virtual void addTermInternal(TNode n);
  private:
   /** cache for getModelValue */
-  mutable std::unordered_map<Node, Node, NodeHashFunction> d_modelCache;
+  mutable std::unordered_map<Node, Node> d_modelCache;
 
   //---------------------------- separation logic
   /** the value of the heap */
index 2103c3997d16222e71838754e591b7e5cb1dde7d..0a038845c3ae11c598510f3ff590e29f199928d0 100644 (file)
@@ -340,7 +340,7 @@ bool TheoryEngineModelBuilder::isExcludedUSortValue(
 void TheoryEngineModelBuilder::addToTypeList(
     TypeNode tn,
     std::vector<TypeNode>& type_list,
-    std::unordered_set<TypeNode, TypeNodeHashFunction>& visiting)
+    std::unordered_set<TypeNode>& visiting)
 {
   if (std::find(type_list.begin(), type_list.end(), tn) == type_list.end())
   {
@@ -427,11 +427,11 @@ bool TheoryEngineModelBuilder::buildModel(TheoryModel* tm)
   // the set of equivalence classes that are "assignable", i.e. those that have
   // an assignable expression in them (see isAssignable), and have not already
   // been assigned a constant.
-  std::unordered_set<Node, NodeHashFunction> assignableEqc;
+  std::unordered_set<Node> assignableEqc;
   // The set of equivalence classes that are "evaluable", i.e. those that have
   // an expression in them that is not assignable, and have not already been
   // assigned a constant.
-  std::unordered_set<Node, NodeHashFunction> evaluableEqc;
+  std::unordered_set<Node> evaluableEqc;
   // Assigner objects for relevant equivalence classes that require special
   // ways of assigning values, e.g. those that take into account assignment
   // exclusion sets.
@@ -449,7 +449,7 @@ bool TheoryEngineModelBuilder::buildModel(TheoryModel* tm)
   // should we compute assigner objects?
   bool computeAssigners = tm->hasAssignmentExclusionSets();
   // the set of exclusion sets we have processed
-  std::unordered_set<Node, NodeHashFunction> processedExcSet;
+  std::unordered_set<Node> processedExcSet;
   for (; !eqcs_i.isFinished(); ++eqcs_i)
   {
     Node eqc = *eqcs_i;
@@ -591,13 +591,13 @@ bool TheoryEngineModelBuilder::buildModel(TheoryModel* tm)
     {
       assertedReps[eqc] = rep;
       typeRepSet.add(eqct.getBaseType(), eqc);
-      std::unordered_set<TypeNode, TypeNodeHashFunction> visiting;
+      std::unordered_set<TypeNode> visiting;
       addToTypeList(eqct.getBaseType(), type_list, visiting);
     }
     else
     {
       typeNoRepSet.add(eqct, eqc);
-      std::unordered_set<TypeNode, TypeNodeHashFunction> visiting;
+      std::unordered_set<TypeNode> visiting;
       addToTypeList(eqct, type_list, visiting);
     }
 
index af3f30fb0909e4ba20fdf76e69ff39191956c1df..195ba9e0f5665a6fae95cc20af23aee275156b11 100644 (file)
@@ -44,8 +44,8 @@ namespace theory {
  */
 class TheoryEngineModelBuilder
 {
-  typedef std::unordered_map<Node, Node, NodeHashFunction> NodeMap;
-  typedef std::unordered_set<Node, NodeHashFunction> NodeSet;
+  typedef std::unordered_map<Node, Node> NodeMap;
+  typedef std::unordered_set<Node> NodeSet;
 
  public:
   TheoryEngineModelBuilder();
@@ -164,10 +164,9 @@ class TheoryEngineModelBuilder
    * For example, if tn is (Array Int Bool) and type_list is empty,
    * then we append ( Int, Bool, (Array Int Bool) ) to type_list.
    */
-  void addToTypeList(
-      TypeNode tn,
-      std::vector<TypeNode>& type_list,
-      std::unordered_set<TypeNode, TypeNodeHashFunction>& visiting);
+  void addToTypeList(TypeNode tn,
+                     std::vector<TypeNode>& type_list,
+                     std::unordered_set<TypeNode>& visiting);
   /** assign function f based on the model m.
   * This construction is based on "table form". For example:
   * (f 0 1) = 1
index 79b5dbe012fa8eb9afec7ab5dcebc1c838eb09e2..58dd763e0b5238a2e50f898fc30ab63059a87bd3 100644 (file)
@@ -72,7 +72,7 @@ namespace theory {
  */
 class TheoryPreprocessor
 {
-  typedef context::CDHashMap<Node, Node, NodeHashFunction> NodeMap;
+  typedef context::CDHashMap<Node, Node> NodeMap;
 
  public:
   /** Constructs a theory preprocessor */
index 70f35afb831864f4eadaaeb4443cb7037d80a0fd..667c8d1149bae09b2cb5b9dcb8c6f38c8c2c76c0 100644 (file)
@@ -186,7 +186,7 @@ Node TheoryProofStepBuffer::factorReorderElimDoubleNeg(Node n)
   }
   children.clear();
   // remove duplicates while keeping the order of children
-  std::unordered_set<TNode, TNodeHashFunction> clauseSet;
+  std::unordered_set<TNode> clauseSet;
   unsigned size = n.getNumChildren();
   for (unsigned i = 0; i < size; ++i)
   {
index b7b526205b171a707fae9b49aee9f8add7ce1f0e..136992fbeb9187fdd6bf93f8f821d5238d793d96 100644 (file)
@@ -38,7 +38,7 @@ namespace theory {
  */
 class TrustSubstitutionMap : public ProofGenerator
 {
-  using NodeUIntMap = context::CDHashMap<Node, size_t, NodeHashFunction>;
+  using NodeUIntMap = context::CDHashMap<Node, size_t>;
 
  public:
   TrustSubstitutionMap(context::Context* c,
index 00a3d77fde602a4b9e22d727050bb1c717127982..12bb2bae601d490b63f7c77d46de80c075ade420 100644 (file)
@@ -113,14 +113,14 @@ Node TypeSet::nextTypeEnum(TypeNode t, bool useBaseType)
   // this is necessary for parametric types whose values are constructed from
   // other types to ensure that we do not enumerate subterms of other 
   // previously enumerated values
-  std::unordered_set<TNode, TNodeHashFunction> visited;
+  std::unordered_set<TNode> visited;
   addSubTerms(n, visited);
   ++(*te);
   return n;
 }
 
 void TypeSet::addSubTerms(TNode n,
-                          std::unordered_set<TNode, TNodeHashFunction>& visited,
+                          std::unordered_set<TNode>& visited,
                           bool topLevel)
 {
   if (visited.find(n) == visited.end())
index 229ec2001510fe7dcfbf891e96ee33db7a164ee2..fb48596020e3d7c5f7184f0551898b0fc2317ac4 100644 (file)
@@ -33,10 +33,8 @@ namespace theory {
 class TypeSet
 {
  public:
-  typedef std::unordered_map<TypeNode, std::set<Node>*, TypeNodeHashFunction>
-      TypeSetMap;
-  typedef std::unordered_map<TypeNode, TypeEnumerator*, TypeNodeHashFunction>
-      TypeToTypeEnumMap;
+  typedef std::unordered_map<TypeNode, std::set<Node>*> TypeSetMap;
+  typedef std::unordered_map<TypeNode, TypeEnumerator*> TypeToTypeEnumMap;
   typedef TypeSetMap::iterator iterator;
   typedef TypeSetMap::const_iterator const_iterator;
 
@@ -81,7 +79,7 @@ class TypeSet
    * (very low expression depth).
    */
   void addSubTerms(TNode n,
-                   std::unordered_set<TNode, TNodeHashFunction>& visited,
+                   std::unordered_set<TNode>& visited,
                    bool topLevel = true);
 }; /* class TypeSet */
 
index 70db9257f60866fccedbb680150de73b9ea4eb78..1809a30bdc329ceb58c3e19980ceeab90db9f56e 100644 (file)
@@ -39,8 +39,8 @@ class TheoryUF;
 class CardinalityExtension
 {
  protected:
-  typedef context::CDHashMap<Node, bool, NodeHashFunction> NodeBoolMap;
-  typedef context::CDHashMap<Node, int, NodeHashFunction> NodeIntMap;
+  typedef context::CDHashMap<Node, bool> NodeBoolMap;
+  typedef context::CDHashMap<Node, int> NodeIntMap;
 
  public:
   /**
index 8e5e0f659889136d469818da1cc6d39d62295813..c63f8b51de4a5b5ce9c726b573abc16f14ca96ca 100644 (file)
@@ -106,7 +106,7 @@ bool EqProof::expandTransitivityForDisequalities(
     Node conclusion,
     std::vector<Node>& premises,
     CDProof* p,
-    std::unordered_set<Node, NodeHashFunction>& assumptions) const
+    std::unordered_set<Node>& assumptions) const
 {
   Trace("eqproof-conv")
       << "EqProof::expandTransitivityForDisequalities: check if need "
@@ -684,8 +684,8 @@ void EqProof::reduceNestedCongruence(
     Node conclusion,
     std::vector<std::vector<Node>>& transitivityMatrix,
     CDProof* p,
-    std::unordered_map<Node, Node, NodeHashFunction>& visited,
-    std::unordered_set<Node, NodeHashFunction>& assumptions,
+    std::unordered_map<Node, Node>& visited,
+    std::unordered_set<Node>& assumptions,
     bool isNary) const
 {
   Trace("eqproof-conv") << "EqProof::reduceNestedCongruence: building for " << i
@@ -785,8 +785,8 @@ void EqProof::reduceNestedCongruence(
 
 Node EqProof::addToProof(CDProof* p) const
 {
-  std::unordered_map<Node, Node, NodeHashFunction> cache;
-  std::unordered_set<Node, NodeHashFunction> assumptions;
+  std::unordered_map<Node, Node> cache;
+  std::unordered_set<Node> assumptions;
   Node conclusion = addToProof(p, cache, assumptions);
   Trace("eqproof-conv") << "EqProof::addToProof: root of proof: " << conclusion
                         << "\n";
@@ -840,13 +840,11 @@ Node EqProof::addToProof(CDProof* p) const
   return newConclusion;
 }
 
-Node EqProof::addToProof(
-    CDProof* p,
-    std::unordered_map<Node, Node, NodeHashFunction>& visited,
-    std::unordered_set<Node, NodeHashFunction>& assumptions) const
+Node EqProof::addToProof(CDProof* p,
+                         std::unordered_map<Node, Node>& visited,
+                         std::unordered_set<Node>& assumptions) const
 {
-  std::unordered_map<Node, Node, NodeHashFunction>::const_iterator it =
-      visited.find(d_node);
+  std::unordered_map<Node, Node>::const_iterator it = visited.find(d_node);
   if (it != visited.end())
   {
     Trace("eqproof-conv") << "EqProof::addToProof: already processed " << d_node
index c938c8d9dd7e161b0bb1fbef0952b3a2891aa5a8..3179da5926e4daff8fd4734eba291fa62e2da608 100644 (file)
@@ -88,10 +88,9 @@ class EqProof
    * equalities)
    * @return the node that is the conclusion of the proof as added to p.
    */
-  Node addToProof(
-      CDProof* p,
-      std::unordered_map<Node, Node, NodeHashFunction>& visited,
-      std::unordered_set<Node, NodeHashFunction>& assumptions) const;
+  Node addToProof(CDProof* p,
+                  std::unordered_map<Node, Node>& visited,
+                  std::unordered_set<Node>& assumptions) const;
 
   /** Removes all reflexivity steps, i.e. (= t t), from premises. */
   void cleanReflPremises(std::vector<Node>& premises) const;
@@ -173,7 +172,7 @@ class EqProof
       Node conclusion,
       std::vector<Node>& premises,
       CDProof* p,
-      std::unordered_set<Node, NodeHashFunction>& assumptions) const;
+      std::unordered_set<Node>& assumptions) const;
 
   /** Expand coarse-grained transitivity steps for theory disequalities
    *
@@ -347,8 +346,8 @@ class EqProof
       Node conclusion,
       std::vector<std::vector<Node>>& transitivityMatrix,
       CDProof* p,
-      std::unordered_map<Node, Node, NodeHashFunction>& visited,
-      std::unordered_set<Node, NodeHashFunction>& assumptions,
+      std::unordered_map<Node, Node>& visited,
+      std::unordered_set<Node>& assumptions,
       bool isNary) const;
 
 }; /* class EqProof */
index 8676e446e504e29103a775f18d66675f2c0744e6..024774593fcef00058960ed2d6a178e140afaf81 100644 (file)
@@ -136,7 +136,7 @@ private:
   KindMap d_congruenceKindsExtOperators;
 
   /** Map from nodes to their ids */
-  std::unordered_map<TNode, EqualityNodeId, TNodeHashFunction> d_nodeIds;
+  std::unordered_map<TNode, EqualityNodeId> d_nodeIds;
 
   /** Map from function applications to their ids */
   typedef std::unordered_map<FunctionApplication, EqualityNodeId, FunctionApplicationHashFunction> ApplicationIdsMap;
index 13709c2ab5855f3e2728bf2117498f468200f656..853ae719b2435db1b2ed5970b1b21396fabe301d 100644 (file)
@@ -128,7 +128,7 @@ Node HoExtension::getApplyUfForHoApply(Node node)
     NodeNodeMap::const_iterator itus = d_uf_std_skolem.find(f);
     if (itus == d_uf_std_skolem.end())
     {
-      std::unordered_set<Node, NodeHashFunction> fvs;
+      std::unordered_set<Node> fvs;
       expr::getFreeVariables(f, fvs);
       Node lem;
       if (!fvs.empty())
index 58320d07b0b81ec3e29b114c9a2e796b639e7c7c..af8f727fd31750f9b26f4b7ed8bbd48e1d60a918 100644 (file)
@@ -49,8 +49,8 @@ class TheoryUF;
  */
 class HoExtension
 {
-  typedef context::CDHashSet<Node, NodeHashFunction> NodeSet;
-  typedef context::CDHashMap<Node, Node, NodeHashFunction> NodeNodeMap;
+  typedef context::CDHashSet<Node> NodeSet;
+  typedef context::CDHashMap<Node, Node> NodeNodeMap;
 
  public:
   HoExtension(TheoryState& state, TheoryInferenceManager& im);
index aed662c4c21d4ac8f8874af01e025d9385f485af..4ca13d93f4e088c6b480a4c1f8ee2bcba4b1ac5f 100644 (file)
@@ -80,9 +80,8 @@ class EqualityEngine;
  */
 class ProofEqEngine : public EagerProofGenerator
 {
-  typedef context::CDHashSet<Node, NodeHashFunction> NodeSet;
-  typedef context::CDHashMap<Node, std::shared_ptr<ProofNode>, NodeHashFunction>
-      NodeProofMap;
+  typedef context::CDHashSet<Node> NodeSet;
+  typedef context::CDHashMap<Node, std::shared_ptr<ProofNode>> NodeProofMap;
 
  public:
   ProofEqEngine(context::Context* c,
index 65ed4d542d550455f2dbd437081b928d4618c17b..aa5d9d953d430ae53b08905dcea2d6eb868852a2 100644 (file)
@@ -59,7 +59,7 @@ SymmetryBreaker::Template::Template() :
 }
 
 TNode SymmetryBreaker::Template::find(TNode n) {
-  unordered_map<TNode, TNode, TNodeHashFunction>::iterator i = d_reps.find(n);
+  unordered_map<TNode, TNode>::iterator i = d_reps.find(n);
   if(i == d_reps.end()) {
     return n;
   } else {
@@ -396,7 +396,7 @@ void SymmetryBreaker::assertFormula(TNode phi) {
         break;
       }
     }
-    unordered_map<TNode, set<TNode>, TNodeHashFunction>& ps = t.partitions();
+    unordered_map<TNode, set<TNode>>& ps = t.partitions();
     for (auto& kv : ps)
     {
       Debug("ufsymm") << "UFSYMM partition*: " << kv.first;
@@ -416,11 +416,12 @@ void SymmetryBreaker::assertFormula(TNode phi) {
   }
   if(!d_template.match(phi)) {
     // we hit a bad match, extract the partitions and reset the template
-    unordered_map<TNode, set<TNode>, TNodeHashFunction>& ps = d_template.partitions();
+    unordered_map<TNode, set<TNode>>& ps = d_template.partitions();
     Debug("ufsymm") << "UFSYMM hit a bad match---have " << ps.size() << " partitions:" << endl;
-    for(unordered_map<TNode, set<TNode>, TNodeHashFunction>::iterator i = ps.begin();
-        i != ps.end();
-        ++i) {
+    for (unordered_map<TNode, set<TNode>>::iterator i = ps.begin();
+         i != ps.end();
+         ++i)
+    {
       Debug("ufsymm") << "UFSYMM partition: " << (*i).first;
       set<TNode>& p = (*i).second;
       if(Debug.isOn("ufsymm")) {
index b5d0fbdf94e99d6e26689b059e78822c3a04fc95..67eabb6babd36fbe43a75a496fdcd57c6eba9d44 100644 (file)
@@ -63,8 +63,8 @@ class SymmetryBreaker : public context::ContextNotifyObj {
   class Template {
     Node d_template;
     NodeBuilder d_assertions;
-    std::unordered_map<TNode, std::set<TNode>, TNodeHashFunction> d_sets;
-    std::unordered_map<TNode, TNode, TNodeHashFunction> d_reps;
+    std::unordered_map<TNode, std::set<TNode>> d_sets;
+    std::unordered_map<TNode, TNode> d_reps;
 
     TNode find(TNode n);
     bool matchRecursive(TNode t, TNode n);
@@ -72,7 +72,7 @@ class SymmetryBreaker : public context::ContextNotifyObj {
   public:
     Template();
     bool match(TNode n);
-    std::unordered_map<TNode, std::set<TNode>, TNodeHashFunction>& partitions() { return d_sets; }
+    std::unordered_map<TNode, std::set<TNode>>& partitions() { return d_sets; }
     Node assertions() {
       switch(d_assertions.getNumChildren()) {
       case 0: return Node::null();
@@ -90,10 +90,9 @@ public:
   typedef TNode Term;
   typedef std::list<Term> Terms;
   typedef std::set<Term> TermEq;
-  typedef std::unordered_map<Term, TermEq, TNodeHashFunction> TermEqs;
-
-private:
+  typedef std::unordered_map<Term, TermEq> TermEqs;
 
+ private:
   /**
    * This class wasn't initially built to be incremental.  It should
    * be attached to a UserContext so that it clears everything when
@@ -112,7 +111,7 @@ private:
   Permutations d_permutations;
   Terms d_terms;
   Template d_template;
-  std::unordered_map<Node, Node, NodeHashFunction> d_normalizationCache;
+  std::unordered_map<Node, Node> d_normalizationCache;
   TermEqs d_termEqs;
   TermEqs d_termEqsOnly;
 
index 5d91faa87e19c0a551a827ac49074837dbf17e5f..9cf47bab39484d4d42d5a9dca36973ba174b801d 100644 (file)
@@ -349,7 +349,7 @@ void TheoryUF::ppStaticLearn(TNode n, NodeBuilder& learned)
 
   vector<TNode> workList;
   workList.push_back(n);
-  std::unordered_set<TNode, TNodeHashFunction> processed;
+  std::unordered_set<TNode> processed;
 
   while(!workList.empty()) {
     n = workList.back();
index 6b8c27c1753d566eb7c8d370eebdf30974e0c359..e96d3ec9e92bad36c7ce17fb34949fbb19a27b0d 100644 (file)
@@ -40,7 +40,7 @@ TEST_F(TestNodeBlackNodeAlgorithm, get_symbols1)
   // The only symbol in ~x (x is a boolean varible) should be x
   Node x = d_skolemManager->mkDummySkolem("x", d_nodeManager->booleanType());
   Node n = d_nodeManager->mkNode(NOT, x);
-  std::unordered_set<Node, NodeHashFunction> syms;
+  std::unordered_set<Node> syms;
   getSymbols(n, syms);
   ASSERT_EQ(syms.size(), 1);
   ASSERT_NE(syms.find(x), syms.end());
@@ -69,7 +69,7 @@ TEST_F(TestNodeBlackNodeAlgorithm, get_symbols2)
   Node res = d_nodeManager->mkNode(AND, left, right);
 
   // symbols
-  std::unordered_set<Node, NodeHashFunction> syms;
+  std::unordered_set<Node> syms;
   getSymbols(res, syms);
 
   // assertions
@@ -82,8 +82,8 @@ TEST_F(TestNodeBlackNodeAlgorithm, get_symbols2)
 TEST_F(TestNodeBlackNodeAlgorithm, get_operators_map)
 {
   // map to store result
-  std::map<TypeNode, std::unordered_set<Node, NodeHashFunction> > result =
-      std::map<TypeNode, std::unordered_set<Node, NodeHashFunction> >();
+  std::map<TypeNode, std::unordered_set<Node> > result =
+      std::map<TypeNode, std::unordered_set<Node> >();
 
   // create test formula
   Node x = d_skolemManager->mkDummySkolem("x", d_nodeManager->integerType());
@@ -146,7 +146,7 @@ TEST_F(TestNodeBlackNodeAlgorithm, match)
   Node a = d_skolemManager->mkDummySkolem("a", integer);
 
   Node n1 = d_nodeManager->mkNode(MULT, two, x);
-  std::unordered_map<Node, Node, NodeHashFunction> subs;
+  std::unordered_map<Node, Node> subs;
 
   // check reflexivity
   ASSERT_TRUE(match(n1, n1, subs));
index 5905f8404a8314b65ce589e67bf666730349098c..839b516e4e3d9492702b453800e22588e3c23991 100644 (file)
@@ -924,7 +924,7 @@ TEST_F(TestPPWhiteBVGauss, elim_rewrite_for_urem_unique1)
       d_two);
 
   std::vector<Node> eqs = {eq1, eq2, eq3};
-  std::unordered_map<Node, Node, NodeHashFunction> res;
+  std::unordered_map<Node, Node> res;
   BVGauss::Result ret = BVGauss::gaussElimRewriteForUrem(eqs, res);
   ASSERT_EQ(ret, BVGauss::Result::UNIQUE);
   ASSERT_EQ(res.size(), 3);
@@ -1030,7 +1030,7 @@ TEST_F(TestPPWhiteBVGauss, elim_rewrite_for_urem_unique2)
       d_two);
 
   std::vector<Node> eqs = {eq1, eq2, eq3};
-  std::unordered_map<Node, Node, NodeHashFunction> res;
+  std::unordered_map<Node, Node> res;
   BVGauss::Result ret = BVGauss::gaussElimRewriteForUrem(eqs, res);
   ASSERT_EQ(ret, BVGauss::Result::UNIQUE);
   ASSERT_EQ(res.size(), 3);
@@ -1041,7 +1041,7 @@ TEST_F(TestPPWhiteBVGauss, elim_rewrite_for_urem_unique2)
 
 TEST_F(TestPPWhiteBVGauss, elim_rewrite_for_urem_partial1a)
 {
-  std::unordered_map<Node, Node, NodeHashFunction> res;
+  std::unordered_map<Node, Node> res;
   BVGauss::Result ret;
 
   /* -------------------------------------------------------------------
@@ -1167,7 +1167,7 @@ TEST_F(TestPPWhiteBVGauss, elim_rewrite_for_urem_partial1a)
 
 TEST_F(TestPPWhiteBVGauss, elim_rewrite_for_urem_partial1b)
 {
-  std::unordered_map<Node, Node, NodeHashFunction> res;
+  std::unordered_map<Node, Node> res;
   BVGauss::Result ret;
 
   /* -------------------------------------------------------------------
@@ -1291,7 +1291,7 @@ TEST_F(TestPPWhiteBVGauss, elim_rewrite_for_urem_partial1b)
 
 TEST_F(TestPPWhiteBVGauss, elim_rewrite_for_urem_partial2)
 {
-  std::unordered_map<Node, Node, NodeHashFunction> res;
+  std::unordered_map<Node, Node> res;
   BVGauss::Result ret;
 
   /* -------------------------------------------------------------------
@@ -1380,7 +1380,7 @@ TEST_F(TestPPWhiteBVGauss, elim_rewrite_for_urem_partial2)
 
 TEST_F(TestPPWhiteBVGauss, elim_rewrite_for_urem_partial3)
 {
-  std::unordered_map<Node, Node, NodeHashFunction> res;
+  std::unordered_map<Node, Node> res;
   BVGauss::Result ret;
 
   /* -------------------------------------------------------------------
@@ -1509,7 +1509,7 @@ TEST_F(TestPPWhiteBVGauss, elim_rewrite_for_urem_partial3)
 
 TEST_F(TestPPWhiteBVGauss, elim_rewrite_for_urem_partial4)
 {
-  std::unordered_map<Node, Node, NodeHashFunction> res;
+  std::unordered_map<Node, Node> res;
   BVGauss::Result ret;
 
   /* -------------------------------------------------------------------
@@ -1660,7 +1660,7 @@ TEST_F(TestPPWhiteBVGauss, elim_rewrite_for_urem_partial4)
 
 TEST_F(TestPPWhiteBVGauss, elim_rewrite_for_urem_partial5)
 {
-  std::unordered_map<Node, Node, NodeHashFunction> res;
+  std::unordered_map<Node, Node> res;
   BVGauss::Result ret;
 
   /* -------------------------------------------------------------------
@@ -1772,7 +1772,7 @@ TEST_F(TestPPWhiteBVGauss, elim_rewrite_for_urem_partial5)
 
 TEST_F(TestPPWhiteBVGauss, elim_rewrite_for_urem_partial6)
 {
-  std::unordered_map<Node, Node, NodeHashFunction> res;
+  std::unordered_map<Node, Node> res;
   BVGauss::Result ret;
 
   /* -------------------------------------------------------------------
@@ -1860,7 +1860,7 @@ TEST_F(TestPPWhiteBVGauss, elim_rewrite_for_urem_partial6)
 
 TEST_F(TestPPWhiteBVGauss, elim_rewrite_for_urem_with_expr_partial)
 {
-  std::unordered_map<Node, Node, NodeHashFunction> res;
+  std::unordered_map<Node, Node> res;
   BVGauss::Result ret;
 
   /* -------------------------------------------------------------------
@@ -2011,7 +2011,7 @@ TEST_F(TestPPWhiteBVGauss, elim_rewrite_for_urem_with_expr_partial)
 
 TEST_F(TestPPWhiteBVGauss, elim_rewrite_for_urem_nary_partial)
 {
-  std::unordered_map<Node, Node, NodeHashFunction> res;
+  std::unordered_map<Node, Node> res;
   BVGauss::Result ret;
 
   /* -------------------------------------------------------------------
@@ -2182,7 +2182,7 @@ TEST_F(TestPPWhiteBVGauss, elim_rewrite_for_urem_nary_partial)
 
 TEST_F(TestPPWhiteBVGauss, elim_rewrite_for_urem_not_invalid1)
 {
-  std::unordered_map<Node, Node, NodeHashFunction> res;
+  std::unordered_map<Node, Node> res;
   BVGauss::Result ret;
 
   /* -------------------------------------------------------------------
@@ -2230,7 +2230,7 @@ TEST_F(TestPPWhiteBVGauss, elim_rewrite_for_urem_not_invalid1)
 
 TEST_F(TestPPWhiteBVGauss, elim_rewrite_for_urem_not_invalid2)
 {
-  std::unordered_map<Node, Node, NodeHashFunction> res;
+  std::unordered_map<Node, Node> res;
   BVGauss::Result ret;
 
   /* -------------------------------------------------------------------
@@ -2301,7 +2301,7 @@ TEST_F(TestPPWhiteBVGauss, elim_rewrite_for_urem_not_invalid2)
 
 TEST_F(TestPPWhiteBVGauss, elim_rewrite_for_urem_invalid)
 {
-  std::unordered_map<Node, Node, NodeHashFunction> res;
+  std::unordered_map<Node, Node> res;
   BVGauss::Result ret;
 
   /* -------------------------------------------------------------------
@@ -2401,7 +2401,7 @@ TEST_F(TestPPWhiteBVGauss, elim_rewrite_unique1)
   AssertionPipeline apipe;
   apipe.push_back(a);
   passes::BVGauss bgauss(nullptr, "bv-gauss-unit");
-  std::unordered_map<Node, Node, NodeHashFunction> res;
+  std::unordered_map<Node, Node> res;
   PreprocessingPassResult pres = bgauss.applyInternal(&apipe);
   ASSERT_EQ(pres, PreprocessingPassResult::NO_CONFLICT);
   Node resx = d_nodeManager->mkNode(
@@ -2490,7 +2490,7 @@ TEST_F(TestPPWhiteBVGauss, elim_rewrite_unique2)
   apipe.push_back(eq4);
   apipe.push_back(eq5);
   passes::BVGauss bgauss(nullptr, "bv-gauss-unit");
-  std::unordered_map<Node, Node, NodeHashFunction> res;
+  std::unordered_map<Node, Node> res;
   PreprocessingPassResult pres = bgauss.applyInternal(&apipe);
   ASSERT_EQ(pres, PreprocessingPassResult::NO_CONFLICT);
   Node resx1 = d_nodeManager->mkNode(
@@ -2542,7 +2542,7 @@ TEST_F(TestPPWhiteBVGauss, elim_rewrite_partial)
   apipe.push_back(eq1);
   apipe.push_back(eq2);
   passes::BVGauss bgauss(nullptr, "bv-gauss-unit");
-  std::unordered_map<Node, Node, NodeHashFunction> res;
+  std::unordered_map<Node, Node> res;
   PreprocessingPassResult pres = bgauss.applyInternal(&apipe);
   ASSERT_EQ(pres, PreprocessingPassResult::NO_CONFLICT);
   ASSERT_EQ(apipe.size(), 4);
index 2115525903ff2eaccf11db585c0143068133d981..85f14b245c4f9844b560a129b331159a36504476 100644 (file)
@@ -113,7 +113,7 @@ TEST_F(TestTheoryWhiteyQuantifiersBvInstantiator, normalizePvMult)
   Node zero = mkZero(32);
   Node one = mkOne(32);
   BvLinearAttribute is_linear;
-  std::unordered_map<Node, bool, NodeHashFunction> contains_x;
+  std::unordered_map<Node, bool> contains_x;
 
   contains_x[x] = true;
   contains_x[neg_x] = true;
@@ -211,7 +211,7 @@ TEST_F(TestTheoryWhiteyQuantifiersBvInstantiator, normalizePvPlus)
   Node c = mkVar(32);
   Node d = mkVar(32);
   BvLinearAttribute is_linear;
-  std::unordered_map<Node, bool, NodeHashFunction> contains_x;
+  std::unordered_map<Node, bool> contains_x;
 
   contains_x[x] = true;
   contains_x[neg_x] = true;
@@ -334,7 +334,7 @@ TEST_F(TestTheoryWhiteyQuantifiersBvInstantiator, normalizePvEqual)
   Node one = mkOne(32);
   Node ntrue = mkTrue();
   BvLinearAttribute is_linear;
-  std::unordered_map<Node, bool, NodeHashFunction> contains_x;
+  std::unordered_map<Node, bool> contains_x;
 
   contains_x[x] = true;
   contains_x[neg_x] = true;
index ab77a74ceb37e3b94a16eb0a7d5f2ab16ab0dfab..baf3af40e0747373ed618df441d88c3e636ea3c5 100644 (file)
@@ -248,7 +248,7 @@ TEST_F(TestTheoryWhiteTypeEnumerator, arrays_infinite)
 {
   TypeEnumerator te(d_nodeManager->mkArrayType(d_nodeManager->integerType(),
                                                d_nodeManager->integerType()));
-  std::unordered_set<Node, NodeHashFunction> elts;
+  std::unordered_set<Node> elts;
   for (uint32_t i = 0; i < 1000; ++i)
   {
     ASSERT_FALSE(te.isFinished());