1 /*********************                                                        */
2 /*! \file theory_sets.h
3  ** \verbatim
4  ** Top contributors (to current version):
5  **   Tim King, Kshitij Bansal, Andrew Reynolds
6  ** This file is part of the CVC4 project.
7  ** Copyright (c) 2009-2019 by the authors listed in the file AUTHORS
8  ** in the top-level source directory) and their institutional affiliations.
9  ** All rights reserved.  See the file COPYING in the top-level source
10  ** directory for licensing information.\endverbatim
11  **
12  ** \brief Sets theory.
13  **
14  ** Sets theory.
15  **/
16 
17 #include "cvc4_private.h"
18 
19 #ifndef __CVC4__THEORY__SETS__THEORY_SETS_H
20 #define __CVC4__THEORY__SETS__THEORY_SETS_H
21 
22 #include <memory>
23 
24 #include "theory/theory.h"
25 #include "theory/uf/equality_engine.h"
26 
27 namespace CVC4 {
28 namespace theory {
29 namespace sets {
30 
31 class TheorySetsPrivate;
32 class TheorySetsScrutinize;
33 
34 class TheorySets : public Theory
35 {
36  public:
37   /** Constructs a new instance of TheorySets w.r.t. the provided contexts. */
38   TheorySets(context::Context* c,
39              context::UserContext* u,
40              OutputChannel& out,
41              Valuation valuation,
42              const LogicInfo& logicInfo);
43   ~TheorySets() override;
44 
45   void addSharedTerm(TNode) override;
46   void check(Effort) override;
47   bool needsCheckLastEffort() override;
48   bool collectModelInfo(TheoryModel* m) override;
49   void computeCareGraph() override;
50   Node explain(TNode) override;
51   EqualityStatus getEqualityStatus(TNode a, TNode b) override;
52   Node getModelValue(TNode) override;
identify()53   std::string identify() const override { return "THEORY_SETS"; }
54   void preRegisterTerm(TNode node) override;
55   Node expandDefinition(LogicRequest& logicRequest, Node n) override;
56   PPAssertStatus ppAssert(TNode in, SubstitutionMap& outSubstitutions) override;
57   void presolve() override;
58   void propagate(Effort) override;
59   void setMasterEqualityEngine(eq::EqualityEngine* eq) override;
60   bool isEntailed(Node n, bool pol);
61 
62  private:
63   friend class TheorySetsPrivate;
64   friend class TheorySetsScrutinize;
65   friend class TheorySetsRels;
66 
67   std::unique_ptr<TheorySetsPrivate> d_internal;
68 }; /* class TheorySets */
69 
70 }/* CVC4::theory::sets namespace */
71 }/* CVC4::theory namespace */
72 }/* CVC4 namespace */
73 
74 #endif /* __CVC4__THEORY__SETS__THEORY_SETS_H */
75