LydiaSyft
Quantification.h
1 #ifndef QUANTIFICATION_H
2 #define QUANTIFICATION_H
3 
4 #include <cuddObj.hh>
5 
6 namespace Syft {
7 
12  public:
13  virtual ~Quantification() {}
14  virtual CUDD::BDD apply(const CUDD::BDD& bdd) const = 0;
15 };
16 
20 class NoQuantification final : public Quantification {
21  public:
22  CUDD::BDD apply(const CUDD::BDD& bdd) const override;
23 };
24 
28 class Forall final : public Quantification {
29  private:
30  CUDD::BDD universal_variables_;
31 
32  public:
33  Forall(CUDD::BDD universal_variables);
34 
35  CUDD::BDD apply(const CUDD::BDD& bdd) const override;
36 };
37 
41 class Exists final : public Quantification {
42  private:
43  CUDD::BDD existential_variables_;
44 
45  public:
46  Exists(CUDD::BDD existential_variables);
47 
48  CUDD::BDD apply(const CUDD::BDD& bdd) const override;
49 };
50 
54 class ForallExists final : public Quantification {
55  private:
56  Forall forall_;
57  Exists exists_;
58 
59  public:
60  ForallExists(CUDD::BDD universal_variables,
61  CUDD::BDD existential_variables);
62 
63  CUDD::BDD apply(const CUDD::BDD& bdd) const override;
64 };
65 
69  class ExistsForall final : public Quantification {
70  private:
71  Exists exists_;
72  Forall forall_;
73 
74  public:
75  ExistsForall(CUDD::BDD existential_variables,
76  CUDD::BDD universal_variables);
77 
78  CUDD::BDD apply(const CUDD::BDD& bdd) const override;
79  };
80 
81 
82 
83 }
84 
85 #endif // QUANTIFICATION_H
Performs both universal and existential quantification.
Definition: Quantification.h:69
Performs existential quantification.
Definition: Quantification.h:41
Performs both universal and existential quantification.
Definition: Quantification.h:54
Performs universal quantification.
Definition: Quantification.h:28
Performs no quantification.
Definition: Quantification.h:20
Abstract class representing a quantification operation on BDDs.
Definition: Quantification.h:11