Storm 1.14.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
Formula.h
Go to the documentation of this file.
1#pragma once
2
3#include <functional>
4#include <iosfwd>
5#include <map>
6#include <memory>
7#include <set>
8#include <vector>
9
10#include <boost/any.hpp>
12
13namespace storm {
14namespace expressions {
15class Variable;
16class Expression;
18} // namespace expressions
19
20namespace logic {
21
22// Forward-declare visitor for accept() method.
23class FormulaVisitor;
24
25// Forward-declare fragment specification for isInFragment() method.
27
28// Forward-declare formula information class for info() method.
30
31class Formula : public std::enable_shared_from_this<Formula> {
32 public:
33 // Make the destructor virtual to allow deletion of objects of subclasses via a pointer to this class.
34 virtual ~Formula() {
35 // Intentionally left empty.
36 }
37
38 friend std::ostream& operator<<(std::ostream& out, Formula const& formula);
39
40 // Basic formula types.
41 virtual bool isPathFormula() const;
42 virtual bool isStateFormula() const;
43 virtual bool isConditionalProbabilityFormula() const;
44 virtual bool isConditionalRewardFormula() const;
45
46 virtual bool isProbabilityPathFormula() const;
47 virtual bool isRewardPathFormula() const;
48 virtual bool isTimePathFormula() const;
49
50 virtual bool isBinaryBooleanStateFormula() const;
51 virtual bool isUnaryBooleanStateFormula() const;
52
53 virtual bool isBinaryBooleanPathFormula() const;
54 virtual bool isUnaryBooleanPathFormula() const;
55
56 virtual bool isMultiObjectiveFormula() const;
57 virtual bool isQuantileFormula() const;
58
59 // Operator formulas.
60 virtual bool isOperatorFormula() const;
61 virtual bool isLongRunAverageOperatorFormula() const;
62 virtual bool isTimeOperatorFormula() const;
63 virtual bool isProbabilityOperatorFormula() const;
64 virtual bool isRewardOperatorFormula() const;
65
66 // Atomic state formulas.
67 virtual bool isBooleanLiteralFormula() const;
68 virtual bool isTrueFormula() const;
69 virtual bool isFalseFormula() const;
70 virtual bool isAtomicExpressionFormula() const;
71 virtual bool isAtomicLabelFormula() const;
72
73 // Probability path formulas.
74 virtual bool isNextFormula() const;
75 virtual bool isUntilFormula() const;
76 virtual bool isBoundedUntilFormula() const;
77 virtual bool isGloballyFormula() const;
78 virtual bool isEventuallyFormula() const;
79 virtual bool isReachabilityProbabilityFormula() const;
80 virtual bool isWeakUntilFormula() const;
81 virtual bool isReleaseFormula() const;
82 virtual bool isHOAPathFormula() const;
83
84 // Reward formulas.
85 virtual bool isCumulativeRewardFormula() const;
86 virtual bool isDiscountedCumulativeRewardFormula() const;
87 virtual bool isInstantaneousRewardFormula() const;
88 virtual bool isReachabilityRewardFormula() const;
89 virtual bool isLongRunAverageRewardFormula() const;
90 virtual bool isTotalRewardFormula() const;
91 virtual bool isDiscountedTotalRewardFormula() const;
92
93 // Expected time formulas.
94 virtual bool isReachabilityTimeFormula() const;
95
96 // Game formulas.
97 virtual bool isGameFormula() const;
98
99 // Type checks for abstract intermediate classes.
100 virtual bool isBinaryPathFormula() const;
101 virtual bool isBinaryStateFormula() const;
102 virtual bool isUnaryPathFormula() const;
103 virtual bool isUnaryStateFormula() const;
104 bool isUnaryFormula() const;
105
106 // Accessors for the return type of a formula.
107 virtual bool hasQualitativeResult() const;
108 virtual bool hasQuantitativeResult() const;
109
110 bool isInFragment(FragmentSpecification const& fragment) const;
111 FormulaInformation info(bool recurseIntoOperators = true) const;
112
113 boost::any accept(FormulaVisitor const& visitor) const;
114 virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const = 0;
115
120 void traverse(std::function<bool(Formula const&)> const& callback) const;
121
122 static std::shared_ptr<Formula const> getTrueFormula();
123
124 bool isInitialFormula() const;
125
127 PathFormula const& asPathFormula() const;
128
130 StateFormula const& asStateFormula() const;
131
134
136 QuantileFormula const& asQuantileFormula() const;
137
140
143
146
149
152
155
158
160 UntilFormula const& asUntilFormula() const;
161
164
166 ReleaseFormula const& asReleaseFormula() const;
167
169 HOAPathFormula const& asHOAPathFormula() const;
170
173
176
179
182
185
187 GameFormula const& asGameFormula() const;
188
190 GloballyFormula const& asGloballyFormula() const;
191
194
197
200
202 NextFormula const& asNextFormula() const;
203
206
209
212
215
218
221
224
227
230
233
235 OperatorFormula const& asOperatorFormula() const;
236
237 std::vector<std::shared_ptr<AtomicExpressionFormula const>> getAtomicExpressionFormulas() const;
238 std::vector<std::shared_ptr<AtomicLabelFormula const>> getAtomicLabelFormulas() const;
239 std::set<storm::expressions::Variable> getUsedVariables() const;
240 std::set<std::string> getReferencedRewardModels() const;
241
242 std::shared_ptr<Formula const> asSharedPointer();
243 std::shared_ptr<Formula const> asSharedPointer() const;
244
245 std::shared_ptr<Formula> clone() const;
246
247 std::shared_ptr<Formula> substitute(std::map<storm::expressions::Variable, storm::expressions::Expression> const& substitution) const;
248 std::shared_ptr<Formula> substitute(
249 std::function<storm::expressions::Expression(storm::expressions::Expression const&)> const& expressionSubstitution) const;
250 std::shared_ptr<Formula> substitute(std::map<std::string, storm::expressions::Expression> const& labelSubstitution) const;
251 std::shared_ptr<Formula> substitute(std::map<std::string, std::string> const& labelSubstitution) const;
252 std::shared_ptr<Formula> substituteRewardModelNames(std::map<std::string, std::string> const& rewardModelNameSubstitution) const;
253 std::shared_ptr<Formula> substituteTranscendentalNumbers() const;
254
265 std::map<std::string, storm::expressions::Expression> const& labelToExpressionMapping = {}) const;
266
267 std::string toString() const;
268
275 virtual std::ostream& writeToStream(std::ostream& out, bool allowParentheses = false) const = 0;
276
277 std::string toPrefixString() const;
278
279 virtual void gatherAtomicExpressionFormulas(std::vector<std::shared_ptr<AtomicExpressionFormula const>>& atomicExpressionFormulas) const;
280 virtual void gatherAtomicLabelFormulas(std::vector<std::shared_ptr<AtomicLabelFormula const>>& atomicLabelFormulas) const;
281 virtual void gatherReferencedRewardModels(std::set<std::string>& referencedRewardModels) const;
282 virtual void gatherUsedVariables(std::set<storm::expressions::Variable>& usedVariables) const;
283
284 private:
285 // Currently empty.
286};
287
288std::ostream& operator<<(std::ostream& out, Formula const& formula);
289} // namespace logic
290} // namespace storm
This class is responsible for managing a set of typed variables and all expressions using these varia...
TotalRewardFormula & asTotalRewardFormula()
Definition Formula.cpp:467
HOAPathFormula & asHOAPathFormula()
Definition Formula.cpp:331
virtual bool isUnaryBooleanStateFormula() const
Definition Formula.cpp:54
RewardOperatorFormula & asRewardOperatorFormula()
Definition Formula.cpp:514
virtual bool isDiscountedCumulativeRewardFormula() const
Definition Formula.cpp:162
std::vector< std::shared_ptr< AtomicExpressionFormula const > > getAtomicExpressionFormulas() const
Definition Formula.cpp:530
virtual bool isReachabilityRewardFormula() const
Definition Formula.cpp:170
virtual bool isGloballyFormula() const
Definition Formula.cpp:110
virtual bool isUnaryPathFormula() const
Definition Formula.cpp:122
bool isInitialFormula() const
Definition Formula.cpp:231
virtual bool isFalseFormula() const
Definition Formula.cpp:74
virtual bool isProbabilityPathFormula() const
Definition Formula.cpp:134
GameFormula & asGameFormula()
Definition Formula.cpp:403
virtual bool isBooleanLiteralFormula() const
Definition Formula.cpp:66
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:34
virtual bool isBinaryPathFormula() const
Definition Formula.cpp:118
std::string toString() const
Definition Formula.cpp:617
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:591
virtual bool isBinaryBooleanPathFormula() const
Definition Formula.cpp:58
UntilFormula & asUntilFormula()
Definition Formula.cpp:339
virtual bool isTrueFormula() const
Definition Formula.cpp:70
virtual bool isBinaryBooleanStateFormula() const
Definition Formula.cpp:50
virtual bool isRewardPathFormula() const
Definition Formula.cpp:138
virtual bool isNextFormula() const
Definition Formula.cpp:146
BoundedUntilFormula & asBoundedUntilFormula()
Definition Formula.cpp:363
virtual bool isInstantaneousRewardFormula() const
Definition Formula.cpp:166
virtual bool isUnaryStateFormula() const
Definition Formula.cpp:46
static std::shared_ptr< Formula const > getTrueFormula()
Definition Formula.cpp:227
virtual bool isReachabilityTimeFormula() const
Definition Formula.cpp:186
LongRunAverageOperatorFormula & asLongRunAverageOperatorFormula()
Definition Formula.cpp:443
virtual void gatherReferencedRewardModels(std::set< std::string > &referencedRewardModels) const
Definition Formula.cpp:613
virtual bool isOperatorFormula() const
Definition Formula.cpp:202
void traverse(std::function< bool(Formula const &)> const &callback) const
Invokes the given callback on this formula and on its subformulas in pre-order, i....
Definition Formula.cpp:21
virtual bool isQuantileFormula() const
Definition Formula.cpp:38
virtual bool isReachabilityProbabilityFormula() const
Definition Formula.cpp:106
LongRunAverageRewardFormula & asLongRunAverageRewardFormula()
Definition Formula.cpp:498
virtual bool isWeakUntilFormula() const
Definition Formula.cpp:94
BinaryBooleanStateFormula & asBinaryBooleanStateFormula()
Definition Formula.cpp:291
virtual bool isProbabilityOperatorFormula() const
Definition Formula.cpp:194
virtual bool isCumulativeRewardFormula() const
Definition Formula.cpp:158
ProbabilityOperatorFormula & asProbabilityOperatorFormula()
Definition Formula.cpp:506
DiscountedCumulativeRewardFormula & asDiscountedCumulativeRewardFormula()
Definition Formula.cpp:475
std::vector< std::shared_ptr< AtomicLabelFormula const > > getAtomicLabelFormulas() const
Definition Formula.cpp:536
std::string toPrefixString() const
Definition Formula.cpp:627
BooleanLiteralFormula & asBooleanLiteralFormula()
Definition Formula.cpp:307
ConditionalFormula & asConditionalFormula()
Definition Formula.cpp:283
EventuallyFormula & asReachabilityTimeFormula()
Definition Formula.cpp:395
GloballyFormula & asGloballyFormula()
Definition Formula.cpp:411
OperatorFormula & asOperatorFormula()
Definition Formula.cpp:522
AtomicExpressionFormula & asAtomicExpressionFormula()
Definition Formula.cpp:315
DiscountedTotalRewardFormula & asDiscountedTotalRewardFormula()
Definition Formula.cpp:483
virtual void gatherAtomicLabelFormulas(std::vector< std::shared_ptr< AtomicLabelFormula const > > &atomicLabelFormulas) const
Definition Formula.cpp:611
UnaryBooleanStateFormula & asUnaryBooleanStateFormula()
Definition Formula.cpp:299
StateFormula & asStateFormula()
Definition Formula.cpp:243
bool isUnaryFormula() const
Definition Formula.cpp:206
std::shared_ptr< Formula > substituteRewardModelNames(std::map< std::string, std::string > const &rewardModelNameSubstitution) const
Definition Formula.cpp:580
std::set< std::string > getReferencedRewardModels() const
Definition Formula.cpp:548
virtual bool isGameFormula() const
Definition Formula.cpp:190
virtual bool isUntilFormula() const
Definition Formula.cpp:86
virtual ~Formula()
Definition Formula.h:34
QuantileFormula & asQuantileFormula()
Definition Formula.cpp:259
virtual bool isRewardOperatorFormula() const
Definition Formula.cpp:198
virtual bool isPathFormula() const
Definition Formula.cpp:26
virtual bool isLongRunAverageRewardFormula() const
Definition Formula.cpp:174
EventuallyFormula & asEventuallyFormula()
Definition Formula.cpp:371
BinaryStateFormula & asBinaryStateFormula()
Definition Formula.cpp:267
virtual void gatherUsedVariables(std::set< storm::expressions::Variable > &usedVariables) const
Definition Formula.cpp:615
bool isInFragment(FragmentSpecification const &fragment) const
Definition Formula.cpp:218
virtual boost::any accept(FormulaVisitor const &visitor, boost::any const &data) const =0
PathFormula & asPathFormula()
Definition Formula.cpp:235
TimeOperatorFormula & asTimeOperatorFormula()
Definition Formula.cpp:451
ReleaseFormula & asReleaseFormula()
Definition Formula.cpp:355
UnaryPathFormula & asUnaryPathFormula()
Definition Formula.cpp:427
WeakUntilFormula & asWeakUntilFormula()
Definition Formula.cpp:347
InstantaneousRewardFormula & asInstantaneousRewardFormula()
Definition Formula.cpp:490
virtual bool isLongRunAverageOperatorFormula() const
Definition Formula.cpp:150
virtual bool isBoundedUntilFormula() const
Definition Formula.cpp:90
NextFormula & asNextFormula()
Definition Formula.cpp:435
virtual bool isTimePathFormula() const
Definition Formula.cpp:142
std::shared_ptr< Formula > clone() const
Definition Formula.cpp:554
virtual bool isEventuallyFormula() const
Definition Formula.cpp:102
EventuallyFormula & asReachabilityRewardFormula()
Definition Formula.cpp:379
virtual bool hasQuantitativeResult() const
Definition Formula.cpp:214
virtual bool isHOAPathFormula() const
Definition Formula.cpp:114
virtual bool isDiscountedTotalRewardFormula() const
Definition Formula.cpp:182
virtual void gatherAtomicExpressionFormulas(std::vector< std::shared_ptr< AtomicExpressionFormula const > > &atomicExpressionFormulas) const
Definition Formula.cpp:609
virtual bool isConditionalRewardFormula() const
Definition Formula.cpp:130
virtual bool isTimeOperatorFormula() const
Definition Formula.cpp:154
std::set< storm::expressions::Variable > getUsedVariables() const
Definition Formula.cpp:542
virtual bool isStateFormula() const
Definition Formula.cpp:30
MultiObjectiveFormula & asMultiObjectiveFormula()
Definition Formula.cpp:251
virtual bool isTotalRewardFormula() const
Definition Formula.cpp:178
AtomicLabelFormula & asAtomicLabelFormula()
Definition Formula.cpp:323
CumulativeRewardFormula & asCumulativeRewardFormula()
Definition Formula.cpp:459
EventuallyFormula & asReachabilityProbabilityFormula()
Definition Formula.cpp:387
std::shared_ptr< Formula > substitute(std::map< storm::expressions::Variable, storm::expressions::Expression > const &substitution) const
Definition Formula.cpp:559
std::shared_ptr< Formula > substituteTranscendentalNumbers() const
Definition Formula.cpp:585
virtual bool isUnaryBooleanPathFormula() const
Definition Formula.cpp:62
UnaryStateFormula & asUnaryStateFormula()
Definition Formula.cpp:275
virtual bool isConditionalProbabilityFormula() const
Definition Formula.cpp:126
virtual bool isAtomicLabelFormula() const
Definition Formula.cpp:82
BinaryPathFormula & asBinaryPathFormula()
Definition Formula.cpp:419
virtual bool isBinaryStateFormula() const
Definition Formula.cpp:42
std::shared_ptr< Formula const > asSharedPointer()
Definition Formula.cpp:601
virtual bool isAtomicExpressionFormula() const
Definition Formula.cpp:78
virtual bool hasQualitativeResult() const
Definition Formula.cpp:210
friend std::ostream & operator<<(std::ostream &out, Formula const &formula)
Definition Formula.cpp:623
FormulaInformation info(bool recurseIntoOperators=true) const
Definition Formula.cpp:223
boost::any accept(FormulaVisitor const &visitor) const
Definition Formula.cpp:17
virtual bool isReleaseFormula() const
Definition Formula.cpp:98
std::ostream & operator<<(std::ostream &out, Bound const &bound)
Definition Bound.h:39