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