Storm 1.11.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
Formula.cpp
Go to the documentation of this file.
1#include <boost/any.hpp>
2#include <sstream>
4
13
14namespace storm {
15namespace logic {
16boost::any Formula::accept(FormulaVisitor const& visitor) const {
17 return accept(visitor, boost::any());
18}
19
21 return false;
22}
23
25 return false;
26}
27
29 return false;
30}
31
33 return false;
34}
35
37 return false;
38}
39
41 return false;
42}
43
45 return false;
46}
47
49 return false;
50}
51
53 return false;
54}
55
57 return false;
58}
59
61 return false;
62}
63
65 return false;
66}
67
69 return false;
70}
71
73 return false;
74}
75
77 return false;
78}
79
81 return false;
82}
83
85 return false;
86}
87
89 return false;
90}
91
93 return false;
94}
95
97 return false;
98}
99
101 return false;
102}
103
105 return false;
106}
107
109 return false;
110}
111
113 return false;
114}
115
117 return false;
118}
119
121 return false;
122}
123
125 return false;
126}
127
129 return false;
130}
131
133 return false;
134}
135
137 return false;
138}
139
141 return false;
142}
143
145 return false;
146}
147
149 return false;
150}
151
153 return false;
154}
155
157 return false;
158}
159
161 return false;
162}
163
165 return false;
166}
167
169 return false;
170}
171
173 return false;
174}
175
177 return false;
178}
179
181 return false;
182}
183
185 return false;
186}
187
189 return false;
190}
191
195
197 return true;
198}
199
201 return false;
202}
203
204bool Formula::isInFragment(FragmentSpecification const& fragment) const {
205 FragmentChecker checker;
206 return checker.conformsToSpecification(*this, fragment);
207}
208
209FormulaInformation Formula::info(bool recurseIntoOperators) const {
210 return FormulaInformationVisitor::getInformation(*this, recurseIntoOperators);
211}
212
213std::shared_ptr<Formula const> Formula::getTrueFormula() {
214 return std::shared_ptr<Formula const>(new BooleanLiteralFormula(true));
215}
216
218 return this->isAtomicLabelFormula() && this->asAtomicLabelFormula().getLabel() == "init";
219}
220
222 return dynamic_cast<PathFormula&>(*this);
223}
224
226 return dynamic_cast<PathFormula const&>(*this);
227}
228
230 return dynamic_cast<StateFormula&>(*this);
231}
232
234 return dynamic_cast<StateFormula const&>(*this);
235}
236
240
242 return dynamic_cast<MultiObjectiveFormula const&>(*this);
243}
244
246 return dynamic_cast<QuantileFormula&>(*this);
247}
248
250 return dynamic_cast<QuantileFormula const&>(*this);
251}
252
254 return dynamic_cast<BinaryStateFormula&>(*this);
255}
256
258 return dynamic_cast<BinaryStateFormula const&>(*this);
259}
260
262 return dynamic_cast<UnaryStateFormula&>(*this);
263}
264
266 return dynamic_cast<UnaryStateFormula const&>(*this);
267}
268
270 return dynamic_cast<ConditionalFormula&>(*this);
271}
272
274 return dynamic_cast<ConditionalFormula const&>(*this);
275}
276
280
282 return dynamic_cast<BinaryBooleanStateFormula const&>(*this);
283}
284
288
290 return dynamic_cast<UnaryBooleanStateFormula const&>(*this);
291}
292
296
298 return dynamic_cast<BooleanLiteralFormula const&>(*this);
299}
300
304
306 return dynamic_cast<AtomicExpressionFormula const&>(*this);
307}
308
310 return dynamic_cast<AtomicLabelFormula&>(*this);
311}
312
314 return dynamic_cast<AtomicLabelFormula const&>(*this);
315}
316
318 return dynamic_cast<HOAPathFormula&>(*this);
319}
320
322 return dynamic_cast<HOAPathFormula const&>(*this);
323}
324
326 return dynamic_cast<UntilFormula&>(*this);
327}
328
330 return dynamic_cast<UntilFormula const&>(*this);
331}
332
336
338 return dynamic_cast<BoundedUntilFormula const&>(*this);
339}
340
342 return dynamic_cast<EventuallyFormula&>(*this);
343}
344
346 return dynamic_cast<EventuallyFormula const&>(*this);
347}
348
352
354 return dynamic_cast<EventuallyFormula const&>(*this);
355}
356
360
362 return dynamic_cast<EventuallyFormula const&>(*this);
363}
364
368
370 return dynamic_cast<EventuallyFormula const&>(*this);
371}
372
374 return dynamic_cast<GameFormula&>(*this);
375}
376
378 return dynamic_cast<GameFormula const&>(*this);
379}
380
382 return dynamic_cast<GloballyFormula&>(*this);
383}
384
386 return dynamic_cast<GloballyFormula const&>(*this);
387}
388
390 return dynamic_cast<BinaryPathFormula&>(*this);
391}
392
394 return dynamic_cast<BinaryPathFormula const&>(*this);
395}
396
398 return dynamic_cast<UnaryPathFormula&>(*this);
399}
400
402 return dynamic_cast<UnaryPathFormula const&>(*this);
403}
404
406 return dynamic_cast<NextFormula&>(*this);
407}
408
410 return dynamic_cast<NextFormula const&>(*this);
411}
412
416
420
424
426 return dynamic_cast<TimeOperatorFormula const&>(*this);
427}
428
432
434 return dynamic_cast<CumulativeRewardFormula const&>(*this);
435}
436
438 return dynamic_cast<TotalRewardFormula&>(*this);
439}
440
442 return dynamic_cast<TotalRewardFormula const&>(*this);
443}
444
448
452
459
463
465 return dynamic_cast<InstantaneousRewardFormula const&>(*this);
466}
467
471
473 return dynamic_cast<LongRunAverageRewardFormula const&>(*this);
474}
475
479
481 return dynamic_cast<ProbabilityOperatorFormula const&>(*this);
482}
483
487
489 return dynamic_cast<RewardOperatorFormula const&>(*this);
490}
491
493 return dynamic_cast<OperatorFormula&>(*this);
494}
495
497 return dynamic_cast<OperatorFormula const&>(*this);
498}
499
500std::vector<std::shared_ptr<AtomicExpressionFormula const>> Formula::getAtomicExpressionFormulas() const {
501 std::vector<std::shared_ptr<AtomicExpressionFormula const>> result;
502 this->gatherAtomicExpressionFormulas(result);
503 return result;
504}
505
506std::vector<std::shared_ptr<AtomicLabelFormula const>> Formula::getAtomicLabelFormulas() const {
507 std::vector<std::shared_ptr<AtomicLabelFormula const>> result;
508 this->gatherAtomicLabelFormulas(result);
509 return result;
510}
511
512std::set<storm::expressions::Variable> Formula::getUsedVariables() const {
513 std::set<storm::expressions::Variable> usedVariables;
514 this->gatherUsedVariables(usedVariables);
515 return usedVariables;
516}
517
518std::set<std::string> Formula::getReferencedRewardModels() const {
519 std::set<std::string> referencedRewardModels;
520 this->gatherReferencedRewardModels(referencedRewardModels);
521 return referencedRewardModels;
522}
523
524std::shared_ptr<Formula> Formula::clone() const {
525 CloneVisitor cv;
526 return cv.clone(*this);
527}
528
529std::shared_ptr<Formula> Formula::substitute(std::map<storm::expressions::Variable, storm::expressions::Expression> const& substitution) const {
531 return substitute([&v](storm::expressions::Expression const& exp) { return v.substitute(exp); });
532}
533
534std::shared_ptr<Formula> Formula::substitute(
535 std::function<storm::expressions::Expression(storm::expressions::Expression const&)> const& expressionSubstitution) const {
537 return visitor.substitute(*this, expressionSubstitution);
538}
539
540std::shared_ptr<Formula> Formula::substitute(std::map<std::string, storm::expressions::Expression> const& labelSubstitution) const {
541 LabelSubstitutionVisitor visitor(labelSubstitution);
542 return visitor.substitute(*this);
543}
544
545std::shared_ptr<Formula> Formula::substitute(std::map<std::string, std::string> const& labelSubstitution) const {
546 LabelSubstitutionVisitor visitor(labelSubstitution);
547 return visitor.substitute(*this);
548}
549
550std::shared_ptr<Formula> Formula::substituteRewardModelNames(std::map<std::string, std::string> const& rewardModelNameSubstitution) const {
551 RewardModelNameSubstitutionVisitor visitor(rewardModelNameSubstitution);
552 return visitor.substitute(*this);
553}
554
555std::shared_ptr<Formula> Formula::substituteTranscendentalNumbers() const {
556 using SubMap = std::map<storm::expressions::Variable, storm::expressions::Expression>;
557 storm::expressions::JaniExpressionSubstitutionVisitor<SubMap> transcendentalsVisitor(SubMap(), true);
558 return substitute([&transcendentalsVisitor](storm::expressions::Expression const& exp) { return transcendentalsVisitor.substitute(exp); });
559}
560
562 std::map<std::string, storm::expressions::Expression> const& labelToExpressionMapping) const {
563 ToExpressionVisitor visitor;
564 if (labelToExpressionMapping.empty()) {
565 return visitor.toExpression(*this, manager);
566 } else {
567 return visitor.toExpression(*this->substitute(labelToExpressionMapping), manager);
568 }
569}
570
571std::shared_ptr<Formula const> Formula::asSharedPointer() {
572 return this->shared_from_this();
573}
574
575std::shared_ptr<Formula const> Formula::asSharedPointer() const {
576 return this->shared_from_this();
577}
578
579void Formula::gatherAtomicExpressionFormulas(std::vector<std::shared_ptr<AtomicExpressionFormula const>>&) const {
580 return;
581}
582
583void Formula::gatherAtomicLabelFormulas(std::vector<std::shared_ptr<AtomicLabelFormula const>>&) const {
584 return;
585}
586
587void Formula::gatherReferencedRewardModels(std::set<std::string>&) const {
588 return;
589}
590
591void Formula::gatherUsedVariables(std::set<storm::expressions::Variable>&) const {
592 return;
593}
594
595std::string Formula::toString() const {
596 std::stringstream str2;
597 writeToStream(str2);
598 return str2.str();
599}
600
601std::ostream& operator<<(std::ostream& out, Formula const& formula) {
602 return formula.writeToStream(out);
603}
604
605std::string Formula::toPrefixString() const {
606 ToPrefixStringVisitor visitor;
607 return visitor.toPrefixString(*this);
608}
609
610} // namespace logic
611} // namespace storm
This class is responsible for managing a set of typed variables and all expressions using these varia...
Expression substitute(Expression const &expression)
Substitutes the identifiers in the given expression according to the previously given map and returns...
std::string const & getLabel() const
std::shared_ptr< Formula > clone(Formula const &f) const
std::shared_ptr< Formula > substitute(Formula const &f, std::function< storm::expressions::Expression(storm::expressions::Expression const &)> const &substitutionFunction) const
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
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
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
FormulaInformation info(bool recurseIntoOperators=true) const
Definition Formula.cpp:209
boost::any accept(FormulaVisitor const &visitor) const
Definition Formula.cpp:16
static FormulaInformation getInformation(Formula const &f, bool recurseIntoOperators=true)
bool conformsToSpecification(Formula const &f, FragmentSpecification const &specification) const
std::shared_ptr< Formula > substitute(Formula const &f) const
std::shared_ptr< Formula > substitute(Formula const &f) const
storm::expressions::Expression toExpression(Formula const &f, storm::expressions::ExpressionManager const &manager) const
std::string toPrefixString(Formula const &f) const
LabParser.cpp.