Storm 1.11.1.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
AbstractModelChecker.cpp
Go to the documentation of this file.
2
3#include <boost/core/typeinfo.hpp>
4
33
34namespace storm {
35namespace modelchecker {
36
37template<typename ModelType>
39 return std::string(boost::core::demangled_name(BOOST_CORE_TYPEID(*this)));
40}
41
42template<typename ModelType>
44 Environment env;
45 return this->check(env, checkTask);
47
48template<typename ModelType>
50 storm::logic::Formula const& formula = checkTask.getFormula();
51 STORM_LOG_THROW(this->canHandle(checkTask), storm::exceptions::InvalidArgumentException,
52 "The model checker (" << getClassName() << ") is not able to check the formula '" << formula << "'.");
53 if (formula.isStateFormula()) {
54 return this->checkStateFormula(env, checkTask.substituteFormula(formula.asStateFormula()));
55 }
56 STORM_LOG_THROW(false, storm::exceptions::InvalidArgumentException, "The given formula '" << formula << "' is invalid.");
57}
59template<typename ModelType>
62 storm::logic::Formula const& formula = checkTask.getFormula();
63
64 if (formula.isStateFormula() || formula.hasQualitativeResult()) {
65 return this->computeStateFormulaProbabilities(env, checkTask.substituteFormula(formula));
66 }
68 if (formula.isHOAPathFormula()) {
69 return this->computeHOAPathProbabilities(env, checkTask.substituteFormula(formula.asHOAPathFormula()));
70 } else if (formula.isConditionalProbabilityFormula()) {
71 return this->computeConditionalProbabilities(env, checkTask.substituteFormula(formula.asConditionalFormula()));
72 } else if (formula.info(false).containsComplexPathFormula()) {
73 // we need to do LTL model checking
74 return this->computeLTLProbabilities(env, checkTask.substituteFormula(formula.asPathFormula()));
75 } else if (formula.isBoundedUntilFormula()) {
76 return this->computeBoundedUntilProbabilities(env, checkTask.substituteFormula(formula.asBoundedUntilFormula()));
77 } else if (formula.isReachabilityProbabilityFormula()) {
78 return this->computeReachabilityProbabilities(env, checkTask.substituteFormula(formula.asReachabilityProbabilityFormula()));
79 } else if (formula.isGloballyFormula()) {
80 return this->computeGloballyProbabilities(env, checkTask.substituteFormula(formula.asGloballyFormula()));
81 } else if (formula.isUntilFormula()) {
82 return this->computeUntilProbabilities(env, checkTask.substituteFormula(formula.asUntilFormula()));
83 } else if (formula.isNextFormula()) {
84 return this->computeNextProbabilities(env, checkTask.substituteFormula(formula.asNextFormula()));
85 }
86 STORM_LOG_THROW(false, storm::exceptions::InvalidArgumentException, "The given formula '" << formula << "' is invalid.");
87}
89template<typename ModelType>
92 STORM_LOG_THROW(false, storm::exceptions::NotImplementedException,
93 "This model checker (" << getClassName() << ") does not support the formula: " << checkTask.getFormula() << ".");
96template<typename ModelType>
99 STORM_LOG_THROW(false, storm::exceptions::NotImplementedException,
100 "This model checker (" << getClassName() << ") does not support the formula: " << checkTask.getFormula() << ".");
101}
103template<typename ModelType>
106 storm::logic::EventuallyFormula const& pathFormula = checkTask.getFormula();
108 return this->computeUntilProbabilities(env, checkTask.substituteFormula(newFormula));
109}
111template<typename ModelType>
114 STORM_LOG_THROW(false, storm::exceptions::NotImplementedException,
115 "This model checker (" << getClassName() << ") does not support the formula: " << checkTask.getFormula() << ".");
117
118template<typename ModelType>
121 STORM_LOG_THROW(false, storm::exceptions::NotImplementedException,
122 "This model checker (" << getClassName() << ") does not support the formula: " << checkTask.getFormula() << ".");
123}
125template<typename ModelType>
128 STORM_LOG_THROW(false, storm::exceptions::NotImplementedException,
129 "This model checker (" << getClassName() << ") does not support the formula: " << checkTask.getFormula() << ".");
130}
132template<typename ModelType>
135 STORM_LOG_THROW(false, storm::exceptions::NotImplementedException, "This model checker does not support the formula: " << checkTask.getFormula() << ".");
136}
137
138template<typename ModelType>
141 STORM_LOG_THROW(false, storm::exceptions::NotImplementedException, "This model checker does not support the formula: " << checkTask.getFormula() << ".");
142}
143
144template<typename ModelType>
146 Environment const& env, CheckTask<storm::logic::Formula, SolutionType> const& checkTask) {
147 // recurse
148 std::unique_ptr<CheckResult> resultPointer = this->check(env, checkTask.getFormula());
149 if (resultPointer->isExplicitQualitativeCheckResult()) {
150 STORM_LOG_ASSERT(ModelType::Representation == storm::models::ModelRepresentation::Sparse, "Unexpected model type.");
151 return std::make_unique<ExplicitQuantitativeCheckResult<SolutionType>>(resultPointer->asExplicitQualitativeCheckResult());
152 } else {
153 STORM_LOG_ASSERT(resultPointer->isSymbolicQualitativeCheckResult(), "Unexpected result type.");
154 STORM_LOG_ASSERT(ModelType::Representation != storm::models::ModelRepresentation::Sparse, "Unexpected model type.");
155 auto const& qualRes = resultPointer->asSymbolicQualitativeCheckResult<storm::models::GetDdType<ModelType::Representation>::ddType>();
156 return std::make_unique<SymbolicQuantitativeCheckResult<storm::models::GetDdType<ModelType::Representation>::ddType, SolutionType>>(qualRes);
157 }
158}
159
160template<typename ModelType>
161std::unique_ptr<CheckResult> AbstractModelChecker<ModelType>::computeRewards(Environment const& env,
163 storm::logic::Formula const& rewardFormula = checkTask.getFormula();
164 if (rewardFormula.isCumulativeRewardFormula()) {
165 return this->computeCumulativeRewards(env, checkTask.substituteFormula(rewardFormula.asCumulativeRewardFormula()));
166 } else if (rewardFormula.isDiscountedCumulativeRewardFormula()) {
167 return this->computeDiscountedCumulativeRewards(env, checkTask.substituteFormula(rewardFormula.asDiscountedCumulativeRewardFormula()));
168 } else if (rewardFormula.isInstantaneousRewardFormula()) {
169 return this->computeInstantaneousRewards(env, checkTask.substituteFormula(rewardFormula.asInstantaneousRewardFormula()));
170 } else if (rewardFormula.isReachabilityRewardFormula()) {
171 return this->computeReachabilityRewards(env, checkTask.substituteFormula(rewardFormula.asReachabilityRewardFormula()));
172 } else if (rewardFormula.isTotalRewardFormula()) {
173 return this->computeTotalRewards(env, checkTask.substituteFormula(rewardFormula.asTotalRewardFormula()));
174 } else if (rewardFormula.isDiscountedTotalRewardFormula()) {
175 return this->computeDiscountedTotalRewards(env, checkTask.substituteFormula(rewardFormula.asDiscountedTotalRewardFormula()));
176 } else if (rewardFormula.isLongRunAverageRewardFormula()) {
177 return this->computeLongRunAverageRewards(env, checkTask.substituteFormula(rewardFormula.asLongRunAverageRewardFormula()));
178 } else if (rewardFormula.isConditionalRewardFormula()) {
179 return this->computeConditionalRewards(env, checkTask.substituteFormula(rewardFormula.asConditionalFormula()));
180 }
181 STORM_LOG_THROW(false, storm::exceptions::InvalidArgumentException, "The given formula '" << rewardFormula << "' is invalid.");
182}
183
184template<typename ModelType>
187 STORM_LOG_THROW(false, storm::exceptions::NotImplementedException,
188 "This model checker (" << getClassName() << ") does not support the formula: " << checkTask.getFormula() << ".");
189}
190
191template<typename ModelType>
194 STORM_LOG_THROW(false, storm::exceptions::NotImplementedException,
195 "This model checker (" << getClassName() << ") does not support the formula: " << checkTask.getFormula() << ".");
196}
197
198template<typename ModelType>
201 STORM_LOG_THROW(false, storm::exceptions::NotImplementedException,
202 "This model checker (" << getClassName() << ") does not support the formula: " << checkTask.getFormula() << ".");
203}
204
205template<typename ModelType>
208 STORM_LOG_THROW(false, storm::exceptions::NotImplementedException,
209 "This model checker (" << getClassName() << ") does not support the formula: " << checkTask.getFormula() << ".");
210}
211
212template<typename ModelType>
215 STORM_LOG_THROW(false, storm::exceptions::NotImplementedException,
216 "This model checker (" << getClassName() << ") does not support the formula: " << checkTask.getFormula() << ".");
217}
218
219template<typename ModelType>
222 STORM_LOG_THROW(false, storm::exceptions::NotImplementedException,
223 "This model checker (" << getClassName() << ") does not support the formula: " << checkTask.getFormula() << ".");
224}
225
226template<typename ModelType>
229 STORM_LOG_THROW(false, storm::exceptions::NotImplementedException,
230 "This model checker (" << getClassName() << ") does not support the formula: " << checkTask.getFormula() << ".");
231}
232
233template<typename ModelType>
236 STORM_LOG_THROW(false, storm::exceptions::NotImplementedException,
237 "This model checker (" << getClassName() << ") does not support the formula: " << checkTask.getFormula() << ".");
238}
239
240template<typename ModelType>
243 STORM_LOG_THROW(false, storm::exceptions::NotImplementedException,
244 "This model checker (" << getClassName() << ") does not support the formula: " << checkTask.getFormula() << ".");
245}
246
247template<typename ModelType>
248std::unique_ptr<CheckResult> AbstractModelChecker<ModelType>::computeTimes(Environment const& env,
250 storm::logic::Formula const& timeFormula = checkTask.getFormula();
251 if (timeFormula.isReachabilityTimeFormula()) {
252 return this->computeReachabilityTimes(env, checkTask.substituteFormula(timeFormula.asReachabilityTimeFormula()));
253 }
254 STORM_LOG_THROW(false, storm::exceptions::NotImplementedException,
255 "This model checker (" << getClassName() << ") does not support the formula: " << checkTask.getFormula() << ".");
256}
257
258template<typename ModelType>
261 STORM_LOG_THROW(false, storm::exceptions::NotImplementedException,
262 "This model checker (" << getClassName() << ") does not support the formula: " << checkTask.getFormula() << ".");
263}
264
265template<typename ModelType>
268 storm::logic::StateFormula const& stateFormula = checkTask.getFormula();
269 if (stateFormula.isBinaryBooleanStateFormula()) {
270 return this->checkBinaryBooleanStateFormula(env, checkTask.substituteFormula(stateFormula.asBinaryBooleanStateFormula()));
271 } else if (stateFormula.isUnaryBooleanStateFormula()) {
272 return this->checkUnaryBooleanStateFormula(env, checkTask.substituteFormula(stateFormula.asUnaryBooleanStateFormula()));
273 } else if (stateFormula.isBooleanLiteralFormula()) {
274 return this->checkBooleanLiteralFormula(env, checkTask.substituteFormula(stateFormula.asBooleanLiteralFormula()));
275 } else if (stateFormula.isProbabilityOperatorFormula()) {
276 return this->checkProbabilityOperatorFormula(env, checkTask.substituteFormula(stateFormula.asProbabilityOperatorFormula()));
277 } else if (stateFormula.isRewardOperatorFormula()) {
278 return this->checkRewardOperatorFormula(env, checkTask.substituteFormula(stateFormula.asRewardOperatorFormula()));
279 } else if (stateFormula.isTimeOperatorFormula()) {
280 return this->checkTimeOperatorFormula(env, checkTask.substituteFormula(stateFormula.asTimeOperatorFormula()));
281 } else if (stateFormula.isLongRunAverageOperatorFormula()) {
282 return this->checkLongRunAverageOperatorFormula(env, checkTask.substituteFormula(stateFormula.asLongRunAverageOperatorFormula()));
283 } else if (stateFormula.isAtomicExpressionFormula()) {
284 return this->checkAtomicExpressionFormula(env, checkTask.substituteFormula(stateFormula.asAtomicExpressionFormula()));
285 } else if (stateFormula.isAtomicLabelFormula()) {
286 return this->checkAtomicLabelFormula(env, checkTask.substituteFormula(stateFormula.asAtomicLabelFormula()));
287 } else if (stateFormula.isBooleanLiteralFormula()) {
288 return this->checkBooleanLiteralFormula(env, checkTask.substituteFormula(stateFormula.asBooleanLiteralFormula()));
289 } else if (stateFormula.isGameFormula()) {
290 return this->checkGameFormula(env, checkTask.substituteFormula(stateFormula.asGameFormula()));
291 } else if (stateFormula.isMultiObjectiveFormula()) {
293 return this->checkLexObjectiveFormula(env, checkTask.substituteFormula(stateFormula.asMultiObjectiveFormula()));
294 } else {
295 return this->checkMultiObjectiveFormula(env, checkTask.substituteFormula(stateFormula.asMultiObjectiveFormula()));
296 }
297 } else if (stateFormula.isQuantileFormula()) {
298 return this->checkQuantileFormula(env, checkTask.substituteFormula(stateFormula.asQuantileFormula()));
299 }
300 STORM_LOG_THROW(false, storm::exceptions::InvalidArgumentException, "The given formula '" << stateFormula << "' is invalid.");
301}
302
303template<typename ModelType>
306 storm::logic::AtomicExpressionFormula const& stateFormula = checkTask.getFormula();
307 std::stringstream stream;
308 stream << stateFormula.getExpression();
309 return this->checkAtomicLabelFormula(env, checkTask.substituteFormula(storm::logic::AtomicLabelFormula(stream.str())));
310}
311
312template<typename ModelType>
315 STORM_LOG_THROW(false, storm::exceptions::NotImplementedException,
316 "This model checker (" << getClassName() << ") does not support the formula: " << checkTask.getFormula() << ".");
317}
318
319template<typename ModelType>
322 storm::logic::BinaryBooleanStateFormula const& stateFormula = checkTask.getFormula();
324 storm::exceptions::InvalidArgumentException, "The given formula is invalid.");
325
326 std::unique_ptr<CheckResult> leftResult =
327 this->check(env, checkTask.template substituteFormula<storm::logic::Formula>(stateFormula.getLeftSubformula().asStateFormula()));
328 std::unique_ptr<CheckResult> rightResult =
329 this->check(env, checkTask.template substituteFormula<storm::logic::Formula>(stateFormula.getRightSubformula().asStateFormula()));
330
331 STORM_LOG_THROW(leftResult->isQualitative() && rightResult->isQualitative(), storm::exceptions::InternalTypeErrorException,
332 "Expected qualitative results.");
333
334 if (stateFormula.isAnd()) {
335 leftResult->asQualitativeCheckResult() &= rightResult->asQualitativeCheckResult();
336 } else if (stateFormula.isOr()) {
337 leftResult->asQualitativeCheckResult() |= rightResult->asQualitativeCheckResult();
338 } else {
339 STORM_LOG_THROW(false, storm::exceptions::InvalidArgumentException, "The given formula '" << stateFormula << "' is invalid.");
340 }
341
342 return leftResult;
343}
344
345template<typename ModelType>
348 STORM_LOG_THROW(false, storm::exceptions::NotImplementedException,
349 "This model checker (" << getClassName() << ") does not support the formula: " << checkTask.getFormula() << ".");
350}
351
352template<typename ModelType>
355 storm::logic::ProbabilityOperatorFormula const& stateFormula = checkTask.getFormula();
356 std::unique_ptr<CheckResult> result = this->computeProbabilities(env, checkTask.substituteFormula(stateFormula.getSubformula()));
357
358 if (checkTask.isBoundSet()) {
359 STORM_LOG_THROW(result->isQuantitative(), storm::exceptions::InvalidOperationException,
360 "Unable to perform comparison operation on non-quantitative result.");
361 return result->asQuantitativeCheckResult<SolutionType>().compareAgainstBound(checkTask.getBoundComparisonType(), checkTask.getBoundThreshold());
362 } else {
363 return result;
364 }
365}
366
367template<typename ModelType>
370 storm::logic::RewardOperatorFormula const& stateFormula = checkTask.getFormula();
371 std::unique_ptr<CheckResult> result = this->computeRewards(env, checkTask.substituteFormula(stateFormula.getSubformula()));
372
373 if (checkTask.isBoundSet()) {
374 STORM_LOG_THROW(result->isQuantitative(), storm::exceptions::InvalidOperationException,
375 "Unable to perform comparison operation on non-quantitative result.");
376 return result->asQuantitativeCheckResult<SolutionType>().compareAgainstBound(checkTask.getBoundComparisonType(), checkTask.getBoundThreshold());
377 } else {
378 return result;
379 }
380}
381
382template<typename ModelType>
385 storm::logic::TimeOperatorFormula const& stateFormula = checkTask.getFormula();
386 STORM_LOG_THROW(stateFormula.getSubformula().isReachabilityTimeFormula(), storm::exceptions::InvalidArgumentException, "The given formula is invalid.");
387
388 std::unique_ptr<CheckResult> result = this->computeTimes(env, checkTask.substituteFormula(stateFormula.getSubformula()));
389
390 if (checkTask.isBoundSet()) {
391 STORM_LOG_THROW(result->isQuantitative(), storm::exceptions::InvalidOperationException,
392 "Unable to perform comparison operation on non-quantitative result.");
393 return result->asQuantitativeCheckResult<SolutionType>().compareAgainstBound(checkTask.getBoundComparisonType(), checkTask.getBoundThreshold());
394 } else {
395 return result;
396 }
397}
398
399template<typename ModelType>
402 storm::logic::LongRunAverageOperatorFormula const& stateFormula = checkTask.getFormula();
403 STORM_LOG_THROW(stateFormula.getSubformula().isStateFormula(), storm::exceptions::InvalidArgumentException, "The given formula is invalid.");
404
405 std::unique_ptr<CheckResult> result =
406 this->computeLongRunAverageProbabilities(env, checkTask.substituteFormula(stateFormula.getSubformula().asStateFormula()));
407
408 if (checkTask.isBoundSet()) {
409 STORM_LOG_THROW(result->isQuantitative(), storm::exceptions::InvalidOperationException,
410 "Unable to perform comparison operation on non-quantitative result.");
411 return result->asQuantitativeCheckResult<SolutionType>().compareAgainstBound(checkTask.getBoundComparisonType(), checkTask.getBoundThreshold());
412 } else {
413 return result;
414 }
415}
416
417template<typename ModelType>
420 storm::logic::UnaryBooleanStateFormula const& stateFormula = checkTask.getFormula();
421 std::unique_ptr<CheckResult> subResult = this->check(env, checkTask.template substituteFormula<storm::logic::Formula>(stateFormula.getSubformula()));
422 STORM_LOG_THROW(subResult->isQualitative(), storm::exceptions::InternalTypeErrorException, "Expected qualitative result.");
423 if (stateFormula.isNot()) {
424 subResult->asQualitativeCheckResult().complement();
425 } else {
426 STORM_LOG_THROW(false, storm::exceptions::InvalidArgumentException, "The given formula '" << stateFormula << "' is invalid.");
427 }
428 return subResult;
429}
430
431template<typename ModelType>
434 STORM_LOG_THROW(false, storm::exceptions::NotImplementedException,
435 "This model checker (" << getClassName() << ") does not support the formula: " << checkTask.getFormula() << ".");
436}
437
438template<typename ModelType>
441 STORM_LOG_THROW(false, storm::exceptions::NotImplementedException,
442 "This model checker (" << getClassName() << ") does not support the formula: " << checkTask.getFormula() << ".");
443}
444
445template<typename ModelType>
448 STORM_LOG_THROW(false, storm::exceptions::NotImplementedException,
449 "This model checker (" << getClassName() << ") does not support the formula: " << checkTask.getFormula() << ".");
450}
451
452template<typename ModelType>
455 STORM_LOG_THROW(false, storm::exceptions::NotImplementedException,
456 "This model checker (" << getClassName() << ") does not support the formula: " << checkTask.getFormula() << ".");
457}
458
460// Explicitly instantiate the template class.
462// Sparse
470
473
481
488
490
491// DD
516} // namespace modelchecker
517} // namespace storm
ModelCheckerEnvironment & modelchecker()
MultiObjectiveModelCheckerEnvironment & multi()
storm::expressions::Expression const & getExpression() const
Formula const & getRightSubformula() const
Formula const & getLeftSubformula() 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
virtual bool isReachabilityRewardFormula() const
Definition Formula.cpp:156
virtual bool isGloballyFormula() const
Definition Formula.cpp:96
GameFormula & asGameFormula()
Definition Formula.cpp:373
virtual bool isBooleanLiteralFormula() const
Definition Formula.cpp:60
virtual bool isMultiObjectiveFormula() const
Definition Formula.cpp:28
UntilFormula & asUntilFormula()
Definition Formula.cpp:325
virtual bool isBinaryBooleanStateFormula() const
Definition Formula.cpp:44
virtual bool isNextFormula() const
Definition Formula.cpp:132
BoundedUntilFormula & asBoundedUntilFormula()
Definition Formula.cpp:333
virtual bool isInstantaneousRewardFormula() const
Definition Formula.cpp:152
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 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
BooleanLiteralFormula & asBooleanLiteralFormula()
Definition Formula.cpp:293
ConditionalFormula & asConditionalFormula()
Definition Formula.cpp:269
EventuallyFormula & asReachabilityTimeFormula()
Definition Formula.cpp:365
GloballyFormula & asGloballyFormula()
Definition Formula.cpp:381
AtomicExpressionFormula & asAtomicExpressionFormula()
Definition Formula.cpp:301
DiscountedTotalRewardFormula & asDiscountedTotalRewardFormula()
Definition Formula.cpp:453
UnaryBooleanStateFormula & asUnaryBooleanStateFormula()
Definition Formula.cpp:285
StateFormula & asStateFormula()
Definition Formula.cpp:229
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 isLongRunAverageRewardFormula() const
Definition Formula.cpp:160
PathFormula & asPathFormula()
Definition Formula.cpp:221
TimeOperatorFormula & asTimeOperatorFormula()
Definition Formula.cpp:421
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
EventuallyFormula & asReachabilityRewardFormula()
Definition Formula.cpp:349
virtual bool isHOAPathFormula() const
Definition Formula.cpp:100
virtual bool isDiscountedTotalRewardFormula() const
Definition Formula.cpp:168
virtual bool isConditionalRewardFormula() const
Definition Formula.cpp:116
virtual bool isTimeOperatorFormula() const
Definition Formula.cpp:140
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
virtual bool isConditionalProbabilityFormula() const
Definition Formula.cpp:112
virtual bool isAtomicLabelFormula() const
Definition Formula.cpp:76
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
Formula const & getSubformula() const
Formula const & getSubformula() const
virtual std::unique_ptr< CheckResult > computeProbabilities(Environment const &env, CheckTask< storm::logic::Formula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > computeCumulativeRewards(Environment const &env, CheckTask< storm::logic::CumulativeRewardFormula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > computeDiscountedCumulativeRewards(Environment const &env, CheckTask< storm::logic::DiscountedCumulativeRewardFormula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > computeGloballyProbabilities(Environment const &env, CheckTask< storm::logic::GloballyFormula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > checkLongRunAverageOperatorFormula(Environment const &env, CheckTask< storm::logic::LongRunAverageOperatorFormula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > check(Environment const &env, CheckTask< storm::logic::Formula, SolutionType > const &checkTask)
Checks the provided formula.
virtual std::unique_ptr< CheckResult > computeLTLProbabilities(Environment const &env, CheckTask< storm::logic::PathFormula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > checkRewardOperatorFormula(Environment const &env, CheckTask< storm::logic::RewardOperatorFormula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > checkAtomicLabelFormula(Environment const &env, CheckTask< storm::logic::AtomicLabelFormula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > checkQuantileFormula(Environment const &env, CheckTask< storm::logic::QuantileFormula, SolutionType > const &checkTask)
std::unique_ptr< CheckResult > computeStateFormulaProbabilities(Environment const &env, CheckTask< storm::logic::Formula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > checkUnaryBooleanStateFormula(Environment const &env, CheckTask< storm::logic::UnaryBooleanStateFormula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > checkProbabilityOperatorFormula(Environment const &env, CheckTask< storm::logic::ProbabilityOperatorFormula, SolutionType > const &checkTask)
typename std::conditional< std::is_same_v< ValueType, storm::Interval >, double, ValueType >::type SolutionType
virtual std::unique_ptr< CheckResult > computeTimes(Environment const &env, CheckTask< storm::logic::Formula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > computeConditionalRewards(Environment const &env, CheckTask< storm::logic::ConditionalFormula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > checkGameFormula(Environment const &env, CheckTask< storm::logic::GameFormula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > checkTimeOperatorFormula(Environment const &env, CheckTask< storm::logic::TimeOperatorFormula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > checkStateFormula(Environment const &env, CheckTask< storm::logic::StateFormula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > computeReachabilityRewards(Environment const &env, CheckTask< storm::logic::EventuallyFormula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > checkBinaryBooleanStateFormula(Environment const &env, CheckTask< storm::logic::BinaryBooleanStateFormula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > computeLongRunAverageProbabilities(Environment const &env, CheckTask< storm::logic::StateFormula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > computeUntilProbabilities(Environment const &env, CheckTask< storm::logic::UntilFormula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > checkLexObjectiveFormula(Environment const &env, CheckTask< storm::logic::MultiObjectiveFormula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > computeLongRunAverageRewards(Environment const &env, CheckTask< storm::logic::LongRunAverageRewardFormula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > computeHOAPathProbabilities(Environment const &env, CheckTask< storm::logic::HOAPathFormula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > checkMultiObjectiveFormula(Environment const &env, CheckTask< storm::logic::MultiObjectiveFormula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > computeReachabilityProbabilities(Environment const &env, CheckTask< storm::logic::EventuallyFormula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > computeConditionalProbabilities(Environment const &env, CheckTask< storm::logic::ConditionalFormula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > checkBooleanLiteralFormula(Environment const &env, CheckTask< storm::logic::BooleanLiteralFormula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > computeRewards(Environment const &env, CheckTask< storm::logic::Formula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > computeInstantaneousRewards(Environment const &env, CheckTask< storm::logic::InstantaneousRewardFormula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > computeNextProbabilities(Environment const &env, CheckTask< storm::logic::NextFormula, SolutionType > const &checkTask)
virtual std::string getClassName() const
Returns the name of the model checker class (e.g., for display in error messages).
virtual std::unique_ptr< CheckResult > computeReachabilityTimes(Environment const &env, CheckTask< storm::logic::EventuallyFormula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > checkAtomicExpressionFormula(Environment const &env, CheckTask< storm::logic::AtomicExpressionFormula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > computeTotalRewards(Environment const &env, CheckTask< storm::logic::TotalRewardFormula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > computeBoundedUntilProbabilities(Environment const &env, CheckTask< storm::logic::BoundedUntilFormula, SolutionType > const &checkTask)
virtual std::unique_ptr< CheckResult > computeDiscountedTotalRewards(Environment const &env, CheckTask< storm::logic::DiscountedTotalRewardFormula, SolutionType > const &checkTask)
bool isBoundSet() const
Retrieves whether there is a bound with which the values for the states will be compared.
Definition CheckTask.h:219
ValueType getBoundThreshold() const
Retrieves the value of the bound (if set).
Definition CheckTask.h:226
storm::logic::ComparisonType const & getBoundComparisonType() const
Retrieves the comparison type of the bound (if set).
Definition CheckTask.h:235
CheckTask< NewFormulaType, ValueType > substituteFormula(NewFormulaType const &newFormula) const
Copies the check task from the source while replacing the formula with the new one.
Definition CheckTask.h:52
FormulaType const & getFormula() const
Retrieves the formula from this task.
Definition CheckTask.h:140
#define STORM_LOG_ASSERT(cond, message)
Definition macros.h:11
#define STORM_LOG_THROW(cond, exception, message)
Definition macros.h:30
std::unique_ptr< CheckResult > computeConditionalProbabilities(Environment const &env, storm::solver::SolveGoal< ValueType, SolutionType > &&goal, storm::storage::SparseMatrix< ValueType > const &transitionMatrix, storm::storage::SparseMatrix< ValueType > const &backwardTransitions, storm::storage::BitVector const &targetStates, storm::storage::BitVector const &conditionStates)