summaryrefslogtreecommitdiff
path: root/src/theory/bags/bag_solver.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/theory/bags/bag_solver.h')
-rw-r--r--src/theory/bags/bag_solver.h17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/theory/bags/bag_solver.h b/src/theory/bags/bag_solver.h
index 5fb49fab7..9155c93d0 100644
--- a/src/theory/bags/bag_solver.h
+++ b/src/theory/bags/bag_solver.h
@@ -13,7 +13,10 @@
* Solver for the theory of bags.
*/
+#include "context/cdhashmap.h"
+#include "context/cdhashset.h"
#include "cvc5_private.h"
+#include "smt/env_obj.h"
#ifndef CVC5__THEORY__BAG__SOLVER_H
#define CVC5__THEORY__BAG__SOLVER_H
@@ -31,10 +34,10 @@ class TermRegistry;
/** The solver for the theory of bags
*
*/
-class BagSolver
+class BagSolver : protected EnvObj
{
public:
- BagSolver(SolverState& s, InferenceManager& im, TermRegistry& tr);
+ BagSolver(Env& env, SolverState& s, InferenceManager& im, TermRegistry& tr);
~BagSolver();
void postCheck();
@@ -73,6 +76,8 @@ class BagSolver
void checkNonNegativeCountTerms(const Node& bag, const Node& element);
/** apply inference rules for disequal bag terms */
void checkDisequalBagTerms();
+ /** apply inference rules for map operator */
+ void checkMap(Node n);
/** The solver state object */
SolverState& d_state;
@@ -82,6 +87,14 @@ class BagSolver
InferenceManager& d_im;
/** Reference to the term registry of theory of bags */
TermRegistry& d_termReg;
+
+ /** a cache that stores bags of kind BAG_MAP and those element representatives
+ * which we generated their inferences.
+ */
+ using BagElementsMap =
+ context::CDHashMap<Node, std::shared_ptr<context::CDHashSet<Node> > >;
+ BagElementsMap d_mapCache;
+
/** Commonly used constants */
Node d_true;
Node d_false;
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback