Storm 1.11.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
Formula.h
Go to the documentation of this file.
1#ifndef STORM_LOGIC_FORMULA_H_
2#define STORM_LOGIC_FORMULA_H_
3
4#include <iosfwd>
5#include <memory>
6#include <set>
7#include <vector>
8
9#include <boost/any.hpp>
11
12namespace storm {
13namespace expressions {
14class Variable;
15class Expression;
16class ExpressionManager;
17} // namespace expressions
18
19namespace logic {
20
21// Forward-declare visitor for accept() method.
22class FormulaVisitor;
23
24// Forward-declare fragment specification for isInFragment() method.
25class FragmentSpecification;
26
27// Forward-declare formula information class for info() method.
28class FormulaInformation;
29
30class Formula : public std::enable_shared_from_this<Formula> {
31 public:
32 // Make the destructor virtual to allow deletion of objects of subclasses via a pointer to this class.
33 virtual ~Formula() {
34 // Intentionally left empty.
35 };
36
37 friend std::ostream& operator<<(std::ostream& out, Formula const& formula);
38
39 // Basic formula types.
40 virtual bool isPathFormula() const;
41 virtual bool isStateFormula() const;
42 virtual bool isConditionalProbabilityFormula() const;
43 virtual bool isConditionalRewardFormula() const;
44
45 virtual bool isProbabilityPathFormula() const;
46 virtual bool isRewardPathFormula() const;
47 virtual bool isTimePathFormula() const;
48
49 virtual bool isBinaryBooleanStateFormula() const;
50 virtual bool isUnaryBooleanStateFormula() const;
51
52 virtual bool isBinaryBooleanPathFormula() const;
53 virtual bool isUnaryBooleanPathFormula() const;
54
55 virtual bool isMultiObjectiveFormula() const;
56 virtual bool isQuantileFormula() const;
57
58 // Operator formulas.
59 virtual bool isOperatorFormula() const;
60 virtual bool isLongRunAverageOperatorFormula() const;
61 virtual bool isTimeOperatorFormula() const;
62 virtual bool isProbabilityOperatorFormula() const;
63 virtual bool isRewardOperatorFormula() const;
64
65 // Atomic state formulas.
66 virtual bool isBooleanLiteralFormula() const;
67 virtual bool isTrueFormula() const;
68 virtual bool isFalseFormula() const;
69 virtual bool isAtomicExpressionFormula() const;
70 virtual bool isAtomicLabelFormula() const;
71
72 // Probability path formulas.
73 virtual bool isNextFormula() const;
74 virtual bool isUntilFormula() const;
75 virtual bool isBoundedUntilFormula() const;
76 virtual bool isGloballyFormula() const;
77 virtual bool isEventuallyFormula() const;
78 virtual bool isReachabilityProbabilityFormula() const;
79 virtual bool isHOAPathFormula() const;
80
81 // Reward formulas.
82 virtual bool isCumulativeRewardFormula() const;
83 virtual bool isDiscountedCumulativeRewardFormula() const;
84 virtual bool isInstantaneousRewardFormula() const;
85 virtual bool isReachabilityRewardFormula() const;
86 virtual bool isLongRunAverageRewardFormula() const;
87 virtual bool isTotalRewardFormula() const;
88 virtual bool isDiscountedTotalRewardFormula() const;
89
90 // Expected time formulas.
91 virtual bool isReachabilityTimeFormula() const;
92
93 // Game formulas.
94 virtual bool isGameFormula() const;
95
96 // Type checks for abstract intermediate classes.
97 virtual bool isBinaryPathFormula() const;
98 virtual bool isBinaryStateFormula() const;
99 virtual bool isUnaryPathFormula() const;
100 virtual bool isUnaryStateFormula() const;
101 bool isUnaryFormula() const;
102
103 // Accessors for the return type of a formula.
104 virtual bool hasQualitativeResult() const;
105 virtual bool hasQuantitativeResult() const;
106
107 bool isInFragment(FragmentSpecification const& fragment) const;
108 FormulaInformation info(bool recurseIntoOperators = true) const;
109
110 boost::any accept(FormulaVisitor const& visitor) const;
111 virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const = 0;
112
113 static std::shared_ptr<Formula const> getTrueFormula();
114
115 bool isInitialFormula() const;
116
118 PathFormula const& asPathFormula() const;
119
121 StateFormula const& asStateFormula() const;
122
125
127 QuantileFormula const& asQuantileFormula() const;
128
131
134
137
140
143
146
149
151 UntilFormula const& asUntilFormula() const;
152
154 HOAPathFormula const& asHOAPathFormula() const;
155
158
161
164
167
170
172 GameFormula const& asGameFormula() const;
173
175 GloballyFormula const& asGloballyFormula() const;
176
179
182
185
187 NextFormula const& asNextFormula() const;
188
191
194
197
200
203
206
209
212
215
218
220 OperatorFormula const& asOperatorFormula() const;
221
222 std::vector<std::shared_ptr<AtomicExpressionFormula const>> getAtomicExpressionFormulas() const;
223 std::vector<std::shared_ptr<AtomicLabelFormula const>> getAtomicLabelFormulas() const;
224 std::set<storm::expressions::Variable> getUsedVariables() const;
225 std::set<std::string> getReferencedRewardModels() const;
226
227 std::shared_ptr<Formula const> asSharedPointer();
228 std::shared_ptr<Formula const> asSharedPointer() const;
229
230 std::shared_ptr<Formula> clone() const;
231
232 std::shared_ptr<Formula> substitute(std::map<storm::expressions::Variable, storm::expressions::Expression> const& substitution) const;
233 std::shared_ptr<Formula> substitute(
234 std::function<storm::expressions::Expression(storm::expressions::Expression const&)> const& expressionSubstitution) const;
235 std::shared_ptr<Formula> substitute(std::map<std::string, storm::expressions::Expression> const& labelSubstitution) const;
236 std::shared_ptr<Formula> substitute(std::map<std::string, std::string> const& labelSubstitution) const;
237 std::shared_ptr<Formula> substituteRewardModelNames(std::map<std::string, std::string> const& rewardModelNameSubstitution) const;
238 std::shared_ptr<Formula> substituteTranscendentalNumbers() const;
239
250 std::map<std::string, storm::expressions::Expression> const& labelToExpressionMapping = {}) const;
251
252 std::string toString() const;
253
260 virtual std::ostream& writeToStream(std::ostream& out, bool allowParentheses = false) const = 0;
261
262 std::string toPrefixString() const;
263
264 virtual void gatherAtomicExpressionFormulas(std::vector<std::shared_ptr<AtomicExpressionFormula const>>& atomicExpressionFormulas) const;
265 virtual void gatherAtomicLabelFormulas(std::vector<std::shared_ptr<AtomicLabelFormula const>>& atomicLabelFormulas) const;
266 virtual void gatherReferencedRewardModels(std::set<std::string>& referencedRewardModels) const;
267 virtual void gatherUsedVariables(std::set<storm::expressions::Variable>& usedVariables) const;
268
269 private:
270 // Currently empty.
271};
272
273std::ostream& operator<<(std::ostream& out, Formula const& formula);
274} // namespace logic
275} // namespace storm
276
277#endif /* STORM_LOGIC_FORMULA_H_ */
This class is responsible for managing a set of typed variables and all expressions using these varia...
TotalRewardFormula & asTotalRewardFormula()
Definition Formula.cpp:437
HOAPathFormula & asHOAPathFormula()
Definition Formula.cpp:317
virtual bool isUnaryBooleanStateFormula() const
Definition Formula.cpp:48
RewardOperatorFormula & asRewardOperatorFormula()
Definition Formula.cpp:484
virtual bool isDiscountedCumulativeRewardFormula() const
Definition Formula.cpp:148
std::vector< std::shared_ptr< AtomicExpressionFormula const > > getAtomicExpressionFormulas() const
Definition Formula.cpp:500
virtual bool isReachabilityRewardFormula() const
Definition Formula.cpp:156
virtual bool isGloballyFormula() const
Definition Formula.cpp:96
virtual bool isUnaryPathFormula() const
Definition Formula.cpp:108
bool isInitialFormula() const
Definition Formula.cpp:217
virtual bool isFalseFormula() const
Definition Formula.cpp:68
virtual bool isProbabilityPathFormula() const
Definition Formula.cpp:120
GameFormula & asGameFormula()
Definition Formula.cpp:373
virtual bool isBooleanLiteralFormula() const
Definition Formula.cpp:60
virtual std::ostream & writeToStream(std::ostream &out, bool allowParentheses=false) const =0
Writes the forumla to the given output stream.
virtual bool isMultiObjectiveFormula() const
Definition Formula.cpp:28
virtual bool isBinaryPathFormula() const
Definition Formula.cpp:104
std::string toString() const
Definition Formula.cpp:595
storm::expressions::Expression toExpression(storm::expressions::ExpressionManager const &manager, std::map< std::string, storm::expressions::Expression > const &labelToExpressionMapping={}) const
Takes the formula and converts it to an equivalent expression.
Definition Formula.cpp:561
virtual bool isBinaryBooleanPathFormula() const
Definition Formula.cpp:52
UntilFormula & asUntilFormula()
Definition Formula.cpp:325
virtual bool isTrueFormula() const
Definition Formula.cpp:64
virtual bool isBinaryBooleanStateFormula() const
Definition Formula.cpp:44
virtual bool isRewardPathFormula() const
Definition Formula.cpp:124
virtual bool isNextFormula() const
Definition Formula.cpp:132
BoundedUntilFormula & asBoundedUntilFormula()
Definition Formula.cpp:333
virtual bool isInstantaneousRewardFormula() const
Definition Formula.cpp:152
virtual bool isUnaryStateFormula() const
Definition Formula.cpp:40
static std::shared_ptr< Formula const > getTrueFormula()
Definition Formula.cpp:213
virtual bool isReachabilityTimeFormula() const
Definition Formula.cpp:172
LongRunAverageOperatorFormula & asLongRunAverageOperatorFormula()
Definition Formula.cpp:413
virtual void gatherReferencedRewardModels(std::set< std::string > &referencedRewardModels) const
Definition Formula.cpp:587
virtual bool isOperatorFormula() const
Definition Formula.cpp:188
virtual bool isQuantileFormula() const
Definition Formula.cpp:32
virtual bool isReachabilityProbabilityFormula() const
Definition Formula.cpp:92
LongRunAverageRewardFormula & asLongRunAverageRewardFormula()
Definition Formula.cpp:468
BinaryBooleanStateFormula & asBinaryBooleanStateFormula()
Definition Formula.cpp:277
virtual bool isProbabilityOperatorFormula() const
Definition Formula.cpp:180
virtual bool isCumulativeRewardFormula() const
Definition Formula.cpp:144
ProbabilityOperatorFormula & asProbabilityOperatorFormula()
Definition Formula.cpp:476
DiscountedCumulativeRewardFormula & asDiscountedCumulativeRewardFormula()
Definition Formula.cpp:445
std::vector< std::shared_ptr< AtomicLabelFormula const > > getAtomicLabelFormulas() const
Definition Formula.cpp:506
std::string toPrefixString() const
Definition Formula.cpp:605
BooleanLiteralFormula & asBooleanLiteralFormula()
Definition Formula.cpp:293
ConditionalFormula & asConditionalFormula()
Definition Formula.cpp:269
EventuallyFormula & asReachabilityTimeFormula()
Definition Formula.cpp:365
GloballyFormula & asGloballyFormula()
Definition Formula.cpp:381
OperatorFormula & asOperatorFormula()
Definition Formula.cpp:492
AtomicExpressionFormula & asAtomicExpressionFormula()
Definition Formula.cpp:301
DiscountedTotalRewardFormula & asDiscountedTotalRewardFormula()
Definition Formula.cpp:453
virtual void gatherAtomicLabelFormulas(std::vector< std::shared_ptr< AtomicLabelFormula const > > &atomicLabelFormulas) const
Definition Formula.cpp:583
UnaryBooleanStateFormula & asUnaryBooleanStateFormula()
Definition Formula.cpp:285
StateFormula & asStateFormula()
Definition Formula.cpp:229
bool isUnaryFormula() const
Definition Formula.cpp:192
std::shared_ptr< Formula > substituteRewardModelNames(std::map< std::string, std::string > const &rewardModelNameSubstitution) const
Definition Formula.cpp:550
std::set< std::string > getReferencedRewardModels() const
Definition Formula.cpp:518
virtual bool isGameFormula() const
Definition Formula.cpp:176
virtual bool isUntilFormula() const
Definition Formula.cpp:80
virtual ~Formula()
Definition Formula.h:33
QuantileFormula & asQuantileFormula()
Definition Formula.cpp:245
virtual bool isRewardOperatorFormula() const
Definition Formula.cpp:184
virtual bool isPathFormula() const
Definition Formula.cpp:20
virtual bool isLongRunAverageRewardFormula() const
Definition Formula.cpp:160
EventuallyFormula & asEventuallyFormula()
Definition Formula.cpp:341
BinaryStateFormula & asBinaryStateFormula()
Definition Formula.cpp:253
virtual void gatherUsedVariables(std::set< storm::expressions::Variable > &usedVariables) const
Definition Formula.cpp:591
bool isInFragment(FragmentSpecification const &fragment) const
Definition Formula.cpp:204
virtual boost::any accept(FormulaVisitor const &visitor, boost::any const &data) const =0
PathFormula & asPathFormula()
Definition Formula.cpp:221
TimeOperatorFormula & asTimeOperatorFormula()
Definition Formula.cpp:421
UnaryPathFormula & asUnaryPathFormula()
Definition Formula.cpp:397
InstantaneousRewardFormula & asInstantaneousRewardFormula()
Definition Formula.cpp:460
virtual bool isLongRunAverageOperatorFormula() const
Definition Formula.cpp:136
virtual bool isBoundedUntilFormula() const
Definition Formula.cpp:84
NextFormula & asNextFormula()
Definition Formula.cpp:405
virtual bool isTimePathFormula() const
Definition Formula.cpp:128
std::shared_ptr< Formula > clone() const
Definition Formula.cpp:524
virtual bool isEventuallyFormula() const
Definition Formula.cpp:88
EventuallyFormula & asReachabilityRewardFormula()
Definition Formula.cpp:349
virtual bool hasQuantitativeResult() const
Definition Formula.cpp:200
virtual bool isHOAPathFormula() const
Definition Formula.cpp:100
virtual bool isDiscountedTotalRewardFormula() const
Definition Formula.cpp:168
virtual void gatherAtomicExpressionFormulas(std::vector< std::shared_ptr< AtomicExpressionFormula const > > &atomicExpressionFormulas) const
Definition Formula.cpp:579
virtual bool isConditionalRewardFormula() const
Definition Formula.cpp:116
virtual bool isTimeOperatorFormula() const
Definition Formula.cpp:140
std::set< storm::expressions::Variable > getUsedVariables() const
Definition Formula.cpp:512
virtual bool isStateFormula() const
Definition Formula.cpp:24
MultiObjectiveFormula & asMultiObjectiveFormula()
Definition Formula.cpp:237
virtual bool isTotalRewardFormula() const
Definition Formula.cpp:164
AtomicLabelFormula & asAtomicLabelFormula()
Definition Formula.cpp:309
CumulativeRewardFormula & asCumulativeRewardFormula()
Definition Formula.cpp:429
EventuallyFormula & asReachabilityProbabilityFormula()
Definition Formula.cpp:357
std::shared_ptr< Formula > substitute(std::map< storm::expressions::Variable, storm::expressions::Expression > const &substitution) const
Definition Formula.cpp:529
std::shared_ptr< Formula > substituteTranscendentalNumbers() const
Definition Formula.cpp:555
virtual bool isUnaryBooleanPathFormula() const
Definition Formula.cpp:56
UnaryStateFormula & asUnaryStateFormula()
Definition Formula.cpp:261
virtual bool isConditionalProbabilityFormula() const
Definition Formula.cpp:112
virtual bool isAtomicLabelFormula() const
Definition Formula.cpp:76
BinaryPathFormula & asBinaryPathFormula()
Definition Formula.cpp:389
virtual bool isBinaryStateFormula() const
Definition Formula.cpp:36
std::shared_ptr< Formula const > asSharedPointer()
Definition Formula.cpp:571
virtual bool isAtomicExpressionFormula() const
Definition Formula.cpp:72
virtual bool hasQualitativeResult() const
Definition Formula.cpp:196
friend std::ostream & operator<<(std::ostream &out, Formula const &formula)
Definition Formula.cpp:601
FormulaInformation info(bool recurseIntoOperators=true) const
Definition Formula.cpp:209
boost::any accept(FormulaVisitor const &visitor) const
Definition Formula.cpp:16
LabParser.cpp.