Storm 1.14.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
14
15namespace storm {
16namespace logic {
17boost::any Formula::accept(FormulaVisitor const& visitor) const {
18 return accept(visitor, boost::any());
19}
20
21void Formula::traverse(std::function<bool(Formula const&)> const& callback) const {
22 TraverseFormulaVisitor const visitor(callback);
23 visitor.traverse(*this);
24}
25
27 return false;
28}
29
31 return false;
32}
33
35 return false;
36}
37
39 return false;
40}
41
43 return false;
44}
45
47 return false;
48}
49
51 return false;
52}
53
55 return false;
56}
57
59 return false;
60}
61
63 return false;
64}
65
67 return false;
68}
69
71 return false;
72}
73
75 return false;
76}
77
79 return false;
80}
81
83 return false;
84}
85
87 return false;
88}
89
91 return false;
92}
93
95 return false;
96}
97
99 return false;
100}
101
103 return false;
104}
105
107 return false;
108}
109
111 return false;
112}
113
115 return false;
116}
117
119 return false;
120}
121
123 return false;
124}
125
127 return false;
128}
129
131 return false;
132}
133
135 return false;
136}
137
139 return false;
140}
141
143 return false;
144}
145
147 return false;
148}
149
151 return false;
152}
153
155 return false;
156}
157
159 return false;
160}
161
163 return false;
164}
165
167 return false;
168}
169
171 return false;
172}
173
175 return false;
176}
177
179 return false;
180}
181
183 return false;
184}
185
187 return false;
188}
189
191 return false;
192}
193
195 return false;
196}
197
199 return false;
200}
201
203 return false;
204}
205
209
211 return true;
212}
213
215 return false;
216}
217
218bool Formula::isInFragment(FragmentSpecification const& fragment) const {
219 FragmentChecker checker;
220 return checker.conformsToSpecification(*this, fragment);
221}
222
223FormulaInformation Formula::info(bool recurseIntoOperators) const {
224 return FormulaInformationVisitor::getInformation(*this, recurseIntoOperators);
225}
226
227std::shared_ptr<Formula const> Formula::getTrueFormula() {
228 return std::shared_ptr<Formula const>(new BooleanLiteralFormula(true));
229}
230
232 return this->isAtomicLabelFormula() && this->asAtomicLabelFormula().getLabel() == "init";
233}
234
236 return dynamic_cast<PathFormula&>(*this);
237}
238
240 return dynamic_cast<PathFormula const&>(*this);
241}
242
244 return dynamic_cast<StateFormula&>(*this);
245}
246
248 return dynamic_cast<StateFormula const&>(*this);
249}
250
254
256 return dynamic_cast<MultiObjectiveFormula const&>(*this);
257}
258
260 return dynamic_cast<QuantileFormula&>(*this);
261}
262
264 return dynamic_cast<QuantileFormula const&>(*this);
265}
266
268 return dynamic_cast<BinaryStateFormula&>(*this);
269}
270
272 return dynamic_cast<BinaryStateFormula const&>(*this);
273}
274
276 return dynamic_cast<UnaryStateFormula&>(*this);
277}
278
280 return dynamic_cast<UnaryStateFormula const&>(*this);
281}
282
284 return dynamic_cast<ConditionalFormula&>(*this);
285}
286
288 return dynamic_cast<ConditionalFormula const&>(*this);
289}
290
294
296 return dynamic_cast<BinaryBooleanStateFormula const&>(*this);
297}
298
302
304 return dynamic_cast<UnaryBooleanStateFormula const&>(*this);
305}
306
310
312 return dynamic_cast<BooleanLiteralFormula const&>(*this);
313}
314
318
320 return dynamic_cast<AtomicExpressionFormula const&>(*this);
321}
322
324 return dynamic_cast<AtomicLabelFormula&>(*this);
325}
326
328 return dynamic_cast<AtomicLabelFormula const&>(*this);
329}
330
332 return dynamic_cast<HOAPathFormula&>(*this);
333}
334
336 return dynamic_cast<HOAPathFormula const&>(*this);
337}
338
340 return dynamic_cast<UntilFormula&>(*this);
341}
342
344 return dynamic_cast<UntilFormula const&>(*this);
345}
346
348 return dynamic_cast<WeakUntilFormula&>(*this);
349}
350
352 return dynamic_cast<WeakUntilFormula const&>(*this);
353}
354
356 return dynamic_cast<ReleaseFormula&>(*this);
357}
358
360 return dynamic_cast<ReleaseFormula const&>(*this);
361}
362
366
368 return dynamic_cast<BoundedUntilFormula const&>(*this);
369}
370
372 return dynamic_cast<EventuallyFormula&>(*this);
373}
374
376 return dynamic_cast<EventuallyFormula const&>(*this);
377}
378
382
384 return dynamic_cast<EventuallyFormula const&>(*this);
385}
386
390
392 return dynamic_cast<EventuallyFormula const&>(*this);
393}
394
398
400 return dynamic_cast<EventuallyFormula const&>(*this);
401}
402
404 return dynamic_cast<GameFormula&>(*this);
405}
406
408 return dynamic_cast<GameFormula const&>(*this);
409}
410
412 return dynamic_cast<GloballyFormula&>(*this);
413}
414
416 return dynamic_cast<GloballyFormula const&>(*this);
417}
418
420 return dynamic_cast<BinaryPathFormula&>(*this);
421}
422
424 return dynamic_cast<BinaryPathFormula const&>(*this);
425}
426
428 return dynamic_cast<UnaryPathFormula&>(*this);
429}
430
432 return dynamic_cast<UnaryPathFormula const&>(*this);
433}
434
436 return dynamic_cast<NextFormula&>(*this);
437}
438
440 return dynamic_cast<NextFormula const&>(*this);
441}
442
446
450
454
456 return dynamic_cast<TimeOperatorFormula const&>(*this);
457}
458
462
464 return dynamic_cast<CumulativeRewardFormula const&>(*this);
465}
466
468 return dynamic_cast<TotalRewardFormula&>(*this);
469}
470
472 return dynamic_cast<TotalRewardFormula const&>(*this);
473}
474
478
482
489
493
495 return dynamic_cast<InstantaneousRewardFormula const&>(*this);
496}
497
501
503 return dynamic_cast<LongRunAverageRewardFormula const&>(*this);
504}
505
509
511 return dynamic_cast<ProbabilityOperatorFormula const&>(*this);
512}
513
517
519 return dynamic_cast<RewardOperatorFormula const&>(*this);
520}
521
523 return dynamic_cast<OperatorFormula&>(*this);
524}
525
527 return dynamic_cast<OperatorFormula const&>(*this);
528}
529
530std::vector<std::shared_ptr<AtomicExpressionFormula const>> Formula::getAtomicExpressionFormulas() const {
531 std::vector<std::shared_ptr<AtomicExpressionFormula const>> result;
532 this->gatherAtomicExpressionFormulas(result);
533 return result;
534}
535
536std::vector<std::shared_ptr<AtomicLabelFormula const>> Formula::getAtomicLabelFormulas() const {
537 std::vector<std::shared_ptr<AtomicLabelFormula const>> result;
538 this->gatherAtomicLabelFormulas(result);
539 return result;
540}
541
542std::set<storm::expressions::Variable> Formula::getUsedVariables() const {
543 std::set<storm::expressions::Variable> usedVariables;
544 this->gatherUsedVariables(usedVariables);
545 return usedVariables;
546}
547
548std::set<std::string> Formula::getReferencedRewardModels() const {
549 std::set<std::string> referencedRewardModels;
550 this->gatherReferencedRewardModels(referencedRewardModels);
551 return referencedRewardModels;
552}
553
554std::shared_ptr<Formula> Formula::clone() const {
555 CloneVisitor cv;
556 return cv.clone(*this);
557}
558
559std::shared_ptr<Formula> Formula::substitute(std::map<storm::expressions::Variable, storm::expressions::Expression> const& substitution) const {
561 return substitute([&v](storm::expressions::Expression const& exp) { return v.substitute(exp); });
562}
563
564std::shared_ptr<Formula> Formula::substitute(
565 std::function<storm::expressions::Expression(storm::expressions::Expression const&)> const& expressionSubstitution) const {
567 return visitor.substitute(*this, expressionSubstitution);
568}
569
570std::shared_ptr<Formula> Formula::substitute(std::map<std::string, storm::expressions::Expression> const& labelSubstitution) const {
571 LabelSubstitutionVisitor visitor(labelSubstitution);
572 return visitor.substitute(*this);
573}
574
575std::shared_ptr<Formula> Formula::substitute(std::map<std::string, std::string> const& labelSubstitution) const {
576 LabelSubstitutionVisitor visitor(labelSubstitution);
577 return visitor.substitute(*this);
578}
579
580std::shared_ptr<Formula> Formula::substituteRewardModelNames(std::map<std::string, std::string> const& rewardModelNameSubstitution) const {
581 RewardModelNameSubstitutionVisitor visitor(rewardModelNameSubstitution);
582 return visitor.substitute(*this);
583}
584
585std::shared_ptr<Formula> Formula::substituteTranscendentalNumbers() const {
586 using SubMap = std::map<storm::expressions::Variable, storm::expressions::Expression>;
587 storm::expressions::JaniExpressionSubstitutionVisitor<SubMap> transcendentalsVisitor(SubMap(), true);
588 return substitute([&transcendentalsVisitor](storm::expressions::Expression const& exp) { return transcendentalsVisitor.substitute(exp); });
589}
590
592 std::map<std::string, storm::expressions::Expression> const& labelToExpressionMapping) const {
593 ToExpressionVisitor visitor;
594 if (labelToExpressionMapping.empty()) {
595 return visitor.toExpression(*this, manager);
596 } else {
597 return visitor.toExpression(*this->substitute(labelToExpressionMapping), manager);
598 }
599}
600
601std::shared_ptr<Formula const> Formula::asSharedPointer() {
602 return this->shared_from_this();
603}
604
605std::shared_ptr<Formula const> Formula::asSharedPointer() const {
606 return this->shared_from_this();
607}
608
609void Formula::gatherAtomicExpressionFormulas(std::vector<std::shared_ptr<AtomicExpressionFormula const>>&) const {}
610
611void Formula::gatherAtomicLabelFormulas(std::vector<std::shared_ptr<AtomicLabelFormula const>>&) const {}
612
613void Formula::gatherReferencedRewardModels(std::set<std::string>&) const {}
614
615void Formula::gatherUsedVariables(std::set<storm::expressions::Variable>&) const {}
616
617std::string Formula::toString() const {
618 std::stringstream str2;
619 writeToStream(str2);
620 return str2.str();
621}
622
623std::ostream& operator<<(std::ostream& out, Formula const& formula) {
624 return formula.writeToStream(out);
625}
626
627std::string Formula::toPrefixString() const {
628 ToPrefixStringVisitor visitor;
629 return visitor.toPrefixString(*this);
630}
631
632} // namespace logic
633} // 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: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
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
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
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
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
Visits a formula and its subformulas in pre-order, i.e., each formula is visited before its subformul...
void traverse(Formula const &f) const
Visits the given formula and, as far as the callback demands it, its subformulas in pre-order.
std::ostream & operator<<(std::ostream &out, Bound const &bound)
Definition Bound.h:39