Storm 1.14.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
verification.h
Go to the documentation of this file.
1#pragma once
2
3#include <type_traits>
4
6
20
24
28
32
34
38
39namespace storm {
40namespace api {
41
42template<typename ValueType>
44storm::modelchecker::CheckTask<storm::logic::Formula, ValueType> createTask(std::shared_ptr<const storm::logic::Formula> const& formula,
45 bool onlyInitialStatesRelevant = false) {
46 return storm::modelchecker::CheckTask<storm::logic::Formula, ValueType>(*formula, onlyInitialStatesRelevant);
47}
48
49template<typename ValueType>
51storm::modelchecker::CheckTask<storm::logic::Formula, ValueType> createTask(std::shared_ptr<const storm::logic::Formula> const& formula,
52 storm::UncertaintyResolutionMode uncertaintyResolution,
53 bool onlyInitialStatesRelevant = false) {
54 storm::modelchecker::CheckTask<storm::logic::Formula, ValueType> checkTask(*formula, onlyInitialStatesRelevant);
55 checkTask.setUncertaintyResolutionMode(uncertaintyResolution);
56 return checkTask;
57}
58
59//
60// Verifying with Exploration engine
61//
62template<typename ValueType>
63std::unique_ptr<storm::modelchecker::CheckResult> verifyWithExplorationEngine(storm::Environment const& env,
66 if (!std::is_same_v<ValueType, double>) {
67 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Exploration engine does not support data type.");
68 } else {
69 STORM_LOG_THROW(model.isPrismProgram(), storm::exceptions::NotSupportedException, "Exploration engine is currently only applicable to PRISM models.");
70 storm::prism::Program const& program = model.asPrismProgram();
71
72 std::unique_ptr<storm::modelchecker::CheckResult> result;
75 if (checker.canHandle(task)) {
76 result = checker.check(env, task);
77 }
80 if (checker.canHandle(task)) {
81 result = checker.check(env, task);
82 }
83 } else {
84 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException,
85 "The model type " << program.getModelType() << " is not supported by the exploration engine.");
86 }
87
88 return result;
89 }
90}
91
92template<typename ValueType>
93std::unique_ptr<storm::modelchecker::CheckResult> verifyWithExplorationEngine(storm::storage::SymbolicModelDescription const& model,
95 Environment env;
96 return verifyWithExplorationEngine(env, model, task);
97}
98
99//
100// Verifying with Sparse engine
101//
102template<typename ValueType>
103std::unique_ptr<storm::modelchecker::CheckResult> verifyWithSparseEngine(storm::Environment const& env,
104 std::shared_ptr<storm::models::sparse::Dtmc<ValueType>> const& dtmc,
106 std::unique_ptr<storm::modelchecker::CheckResult> result;
107 if (storm::settings::getModule<storm::settings::modules::CoreSettings>().getEquationSolver() == storm::solver::EquationSolverType::Elimination &&
109 if constexpr (storm::IsIntervalType<ValueType>) {
110 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "We do not yet support using the elimination checker with intervals models.");
111 }
112 auto newTask = task.template convertValueType<
115 if (modelchecker.canHandle(newTask)) {
116 result = modelchecker.check(env, newTask);
117 }
118 } else {
120 auto newTask =
121 task.template convertValueType<typename storm::modelchecker::SparseDtmcPrctlModelChecker<storm::models::sparse::Dtmc<ValueType>>::SolutionType>();
122 if (modelchecker.canHandle(newTask)) {
123 result = modelchecker.check(env, newTask);
124 }
125 }
126 return result;
127}
128
129template<typename ValueType>
130std::unique_ptr<storm::modelchecker::CheckResult> verifyWithSparseEngine(std::shared_ptr<storm::models::sparse::Dtmc<ValueType>> const& dtmc,
132 Environment env;
133 return verifyWithSparseEngine(env, dtmc, task);
134}
135
136template<typename ValueType>
137std::unique_ptr<storm::modelchecker::CheckResult> verifyWithSparseEngine(storm::Environment const& env,
138 std::shared_ptr<storm::models::sparse::Ctmc<ValueType>> const& ctmc,
140 if constexpr (storm::IsIntervalType<ValueType>) {
141 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Sparse engine cannot verify interval CTMCs.");
142 } else {
143 std::unique_ptr<storm::modelchecker::CheckResult> result;
145 if (modelchecker.canHandle(task)) {
146 result = modelchecker.check(env, task);
147 }
148 return result;
149 }
150}
151
152template<typename ValueType>
153std::unique_ptr<storm::modelchecker::CheckResult> verifyWithSparseEngine(std::shared_ptr<storm::models::sparse::Ctmc<ValueType>> const& ctmc,
155 Environment env;
156 return verifyWithSparseEngine(env, ctmc, task);
157}
158
159template<typename ValueType>
160std::unique_ptr<storm::modelchecker::CheckResult> verifyWithSparseEngine(storm::Environment const& env,
161 std::shared_ptr<storm::models::sparse::Mdp<ValueType>> const& mdp,
163 using ModelCheckerType = std::conditional_t<std::is_same_v<ValueType, storm::RationalFunction>,
166
167 std::unique_ptr<storm::modelchecker::CheckResult> result;
168 ModelCheckerType modelchecker(*mdp);
169 // The CheckTask needs to have the SolutionType. For now, we create a copy.
170 // TODO: This is a little messy: the CheckTask should have been provided with the right solution type already.
171 auto newTask = task.template convertValueType<typename ModelCheckerType::SolutionType>();
172 if (modelchecker.canHandle(newTask)) {
173 result = modelchecker.check(env, newTask);
174 }
175 return result;
176}
177
178template<typename ValueType>
179std::unique_ptr<storm::modelchecker::CheckResult> verifyWithSparseEngine(std::shared_ptr<storm::models::sparse::Mdp<ValueType>> const& mdp,
181 Environment env;
182 return verifyWithSparseEngine(env, mdp, task);
183}
184
185template<typename ValueType>
186std::unique_ptr<storm::modelchecker::CheckResult> verifyWithSparseEngine(storm::Environment const& env,
187 std::shared_ptr<storm::models::sparse::MarkovAutomaton<ValueType>> const& ma,
189 if constexpr (std::is_same_v<ValueType, storm::RationalFunction> || storm::IsIntervalType<ValueType>) {
190 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Sparse engine cannot verify MAs with this data type.");
191 } else {
192 std::unique_ptr<storm::modelchecker::CheckResult> result;
193
194 // Close the MA, if it is not already closed.
195 if (!ma->isClosed()) {
196 STORM_LOG_WARN("Closing Markov automaton. Consider closing the MA before verification.");
197 ma->close();
198 }
199
201 if (modelchecker.canHandle(task)) {
202 result = modelchecker.check(env, task);
203 }
204 return result;
205 }
206}
207
208template<typename ValueType>
209std::unique_ptr<storm::modelchecker::CheckResult> verifyWithSparseEngine(std::shared_ptr<storm::models::sparse::MarkovAutomaton<ValueType>> const& ma,
211 Environment env;
212 return verifyWithSparseEngine(env, ma, task);
213}
214
215template<typename ValueType>
216std::unique_ptr<storm::modelchecker::CheckResult> verifyWithSparseEngine(storm::Environment const& env,
217 std::shared_ptr<storm::models::sparse::Smg<ValueType>> const& smg,
219 if constexpr (std::is_same_v<ValueType, storm::RationalFunction> || storm::IsIntervalType<ValueType>) {
220 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Sparse engine cannot verify SMGs with this data type.");
221 } else {
222 std::unique_ptr<storm::modelchecker::CheckResult> result;
224 if (modelchecker.canHandle(task)) {
225 result = modelchecker.check(env, task);
226 }
227 return result;
228 }
229}
230
231template<typename ValueType>
232std::unique_ptr<storm::modelchecker::CheckResult> verifyWithSparseEngine(std::shared_ptr<storm::models::sparse::Smg<ValueType>> const& smg,
234 Environment env;
235 return verifyWithSparseEngine(env, smg, task);
236}
237
238template<typename ValueType>
239std::unique_ptr<storm::modelchecker::CheckResult> verifyWithSparseEngine(storm::Environment const& env,
240 std::shared_ptr<storm::models::sparse::Model<ValueType>> const& model,
242 std::unique_ptr<storm::modelchecker::CheckResult> result;
243 if (model->getType() == storm::models::ModelType::Dtmc) {
244 result = verifyWithSparseEngine(env, model->template as<storm::models::sparse::Dtmc<ValueType>>(), task);
245 } else if (model->getType() == storm::models::ModelType::Mdp) {
246 result = verifyWithSparseEngine(env, model->template as<storm::models::sparse::Mdp<ValueType>>(), task);
247 } else if (model->getType() == storm::models::ModelType::Ctmc) {
248 result = verifyWithSparseEngine(env, model->template as<storm::models::sparse::Ctmc<ValueType>>(), task);
249 } else if (model->getType() == storm::models::ModelType::MarkovAutomaton) {
250 result = verifyWithSparseEngine(env, model->template as<storm::models::sparse::MarkovAutomaton<ValueType>>(), task);
251 } else if (model->getType() == storm::models::ModelType::Smg) {
252 result = verifyWithSparseEngine(env, model->template as<storm::models::sparse::Smg<ValueType>>(), task);
253 } else {
254 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "The model type " << model->getType() << " is not supported by the sparse engine.");
255 }
256 return result;
257}
258
259template<typename ValueType>
260std::unique_ptr<storm::modelchecker::CheckResult> verifyWithSparseEngine(std::shared_ptr<storm::models::sparse::Model<ValueType>> const& model,
262 Environment env;
263 return verifyWithSparseEngine(env, model, task);
264}
265
266template<typename ValueType>
267std::unique_ptr<storm::modelchecker::CheckResult> computeSteadyStateDistributionWithSparseEngine(
268 storm::Environment const& env, std::shared_ptr<storm::models::sparse::Dtmc<ValueType>> const& dtmc) {
269 if constexpr (storm::IsIntervalType<ValueType>) {
270 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Can not compute steady state distributions for interval models.");
271 } else {
272 std::unique_ptr<storm::modelchecker::CheckResult> result;
274 return modelchecker.computeSteadyStateDistribution(env);
275 }
276}
277
278template<typename ValueType>
279std::unique_ptr<storm::modelchecker::CheckResult> computeSteadyStateDistributionWithSparseEngine(
280 storm::Environment const& env, std::shared_ptr<storm::models::sparse::Ctmc<ValueType>> const& ctmc) {
281 if constexpr (storm::IsIntervalType<ValueType>) {
282 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Can not compute steady state distributions for interval models.");
283 } else {
284 std::unique_ptr<storm::modelchecker::CheckResult> result;
286 return modelchecker.computeSteadyStateDistribution(env);
287 }
288}
289
290template<typename ValueType>
291std::unique_ptr<storm::modelchecker::CheckResult> computeSteadyStateDistributionWithSparseEngine(
292 storm::Environment const& env, std::shared_ptr<storm::models::sparse::Model<ValueType>> const& model) {
293 std::unique_ptr<storm::modelchecker::CheckResult> result;
294 if (model->getType() == storm::models::ModelType::Dtmc) {
296 } else if (model->getType() == storm::models::ModelType::Ctmc) {
298 } else {
299 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException,
300 "Computing the long run average distribution for the model type " << model->getType() << " is not supported.");
301 }
302 return result;
303}
304
305template<typename ValueType>
306std::unique_ptr<storm::modelchecker::CheckResult> computeExpectedVisitingTimesWithSparseEngine(
307 storm::Environment const& env, std::shared_ptr<storm::models::sparse::Dtmc<ValueType>> const& dtmc) {
308 if constexpr (storm::IsIntervalType<ValueType>) {
309 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Can not compute expected visiting times for interval models.");
310 } else {
311 std::unique_ptr<storm::modelchecker::CheckResult> result;
313 return modelchecker.computeExpectedVisitingTimes(env);
314 }
315}
316
317template<typename ValueType>
318std::unique_ptr<storm::modelchecker::CheckResult> computeExpectedVisitingTimesWithSparseEngine(
319 storm::Environment const& env, std::shared_ptr<storm::models::sparse::Ctmc<ValueType>> const& ctmc) {
320 if constexpr (storm::IsIntervalType<ValueType>) {
321 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Can not compute expected visiting times for interval models.");
322 } else {
323 std::unique_ptr<storm::modelchecker::CheckResult> result;
325 return modelchecker.computeExpectedVisitingTimes(env);
326 }
327}
328
329template<typename ValueType>
330std::unique_ptr<storm::modelchecker::CheckResult> computeExpectedVisitingTimesWithSparseEngine(
331 storm::Environment const& env, std::shared_ptr<storm::models::sparse::Model<ValueType>> const& model) {
332 std::unique_ptr<storm::modelchecker::CheckResult> result;
333 if (model->getType() == storm::models::ModelType::Dtmc) {
335 } else if (model->getType() == storm::models::ModelType::Ctmc) {
337 } else {
338 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException,
339 "Computing expected visiting times for the model type " << model->getType() << " is not supported.");
340 }
341 return result;
342}
343
344//
345// Verifying with Hybrid engine
346//
347template<storm::dd::DdType DdType, typename ValueType>
348std::unique_ptr<storm::modelchecker::CheckResult> verifyWithHybridEngine(storm::Environment const& env,
349 std::shared_ptr<storm::models::symbolic::Dtmc<DdType, ValueType>> const& dtmc,
351 if constexpr (storm::IsIntervalType<ValueType>) {
352 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Hybrid engine cannot verify DTMC with this data type.");
353 } else {
354 std::unique_ptr<storm::modelchecker::CheckResult> result;
355 dtmc->getManager().execute([&]() {
357 if (modelchecker.canHandle(task)) {
358 result = modelchecker.check(env, task);
359 }
360 });
361 return result;
362 }
363}
364
365template<storm::dd::DdType DdType, typename ValueType>
366std::unique_ptr<storm::modelchecker::CheckResult> verifyWithHybridEngine(std::shared_ptr<storm::models::symbolic::Dtmc<DdType, ValueType>> const& dtmc,
368 Environment env;
369 return verifyWithHybridEngine(env, dtmc, task);
370}
371
372template<storm::dd::DdType DdType, typename ValueType>
373std::unique_ptr<storm::modelchecker::CheckResult> verifyWithHybridEngine(storm::Environment const& env,
374 std::shared_ptr<storm::models::symbolic::Ctmc<DdType, ValueType>> const& ctmc,
376 if constexpr (storm::IsIntervalType<ValueType>) {
377 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Hybrid engine cannot verify CTMC with this data type.");
378 } else {
379 std::unique_ptr<storm::modelchecker::CheckResult> result;
380 ctmc->getManager().execute([&]() {
382 if (modelchecker.canHandle(task)) {
383 result = modelchecker.check(env, task);
384 }
385 });
386 return result;
387 }
388}
389
390template<storm::dd::DdType DdType, typename ValueType>
391std::unique_ptr<storm::modelchecker::CheckResult> verifyWithHybridEngine(std::shared_ptr<storm::models::symbolic::Ctmc<DdType, ValueType>> const& ctmc,
393 Environment env;
394 return verifyWithHybridEngine(env, ctmc, task);
395}
396
397template<storm::dd::DdType DdType, typename ValueType>
398std::unique_ptr<storm::modelchecker::CheckResult> verifyWithHybridEngine(storm::Environment const& env,
399 std::shared_ptr<storm::models::symbolic::Mdp<DdType, ValueType>> const& mdp,
401 if constexpr (std::is_same_v<ValueType, storm::RationalFunction> || storm::IsIntervalType<ValueType>) {
402 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Hybrid engine cannot verify MDPs with this data type.");
403 } else {
404 std::unique_ptr<storm::modelchecker::CheckResult> result;
405 mdp->getManager().execute([&]() {
407 if (modelchecker.canHandle(task)) {
408 result = modelchecker.check(env, task);
409 }
410 });
411 return result;
412 }
413}
414
415template<storm::dd::DdType DdType, typename ValueType>
416std::unique_ptr<storm::modelchecker::CheckResult> verifyWithHybridEngine(std::shared_ptr<storm::models::symbolic::Mdp<DdType, ValueType>> const& mdp,
418 Environment env;
419 return verifyWithHybridEngine(env, mdp, task);
420}
421
422template<storm::dd::DdType DdType, typename ValueType>
423std::unique_ptr<storm::modelchecker::CheckResult> verifyWithHybridEngine(storm::Environment const& env,
426 if constexpr (std::is_same_v<ValueType, storm::RationalFunction> || storm::IsIntervalType<ValueType>) {
427 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Hybrid engine cannot verify MDPs with this data type.");
428 } else {
429 std::unique_ptr<storm::modelchecker::CheckResult> result;
430 ma->getManager().execute([&]() {
432 if (modelchecker.canHandle(task)) {
433 result = modelchecker.check(env, task);
434 }
435 });
436 return result;
437 }
438}
439
440template<storm::dd::DdType DdType, typename ValueType>
441std::unique_ptr<storm::modelchecker::CheckResult> verifyWithHybridEngine(std::shared_ptr<storm::models::symbolic::MarkovAutomaton<DdType, ValueType>> const& ma,
443 Environment env;
444 return verifyWithHybridEngine(env, ma, task);
445}
446
447template<storm::dd::DdType DdType, typename ValueType>
448std::unique_ptr<storm::modelchecker::CheckResult> verifyWithHybridEngine(storm::Environment const& env,
449 std::shared_ptr<storm::models::symbolic::Model<DdType, ValueType>> const& model,
451 std::unique_ptr<storm::modelchecker::CheckResult> result;
452 if (model->getType() == storm::models::ModelType::Dtmc) {
453 result = verifyWithHybridEngine(env, model->template as<storm::models::symbolic::Dtmc<DdType, ValueType>>(), task);
454 } else if (model->getType() == storm::models::ModelType::Ctmc) {
455 result = verifyWithHybridEngine(env, model->template as<storm::models::symbolic::Ctmc<DdType, ValueType>>(), task);
456 } else if (model->getType() == storm::models::ModelType::Mdp) {
457 result = verifyWithHybridEngine(env, model->template as<storm::models::symbolic::Mdp<DdType, ValueType>>(), task);
458 } else if (model->getType() == storm::models::ModelType::MarkovAutomaton) {
460 } else {
461 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "The model type " << model->getType() << " is not supported by the hybrid engine.");
462 }
463 return result;
464}
465
466template<storm::dd::DdType DdType, typename ValueType>
467std::unique_ptr<storm::modelchecker::CheckResult> verifyWithHybridEngine(std::shared_ptr<storm::models::symbolic::Model<DdType, ValueType>> const& model,
469 Environment env;
470 return verifyWithHybridEngine(env, model, task);
471}
472
473//
474// Verifying with DD engine
475//
476template<storm::dd::DdType DdType, typename ValueType>
477std::unique_ptr<storm::modelchecker::CheckResult> verifyWithDdEngine(storm::Environment const& env,
478 std::shared_ptr<storm::models::symbolic::Dtmc<DdType, ValueType>> const& dtmc,
480 if constexpr (storm::IsIntervalType<ValueType>) {
481 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Dd engine cannot verify DTMC with this data type.");
482 } else {
483 std::unique_ptr<storm::modelchecker::CheckResult> result;
484 dtmc->getManager().execute([&]() {
486 if (modelchecker.canHandle(task)) {
487 result = modelchecker.check(env, task);
488 }
489 });
490 return result;
491 }
492}
493
494template<storm::dd::DdType DdType, typename ValueType>
495std::unique_ptr<storm::modelchecker::CheckResult> verifyWithDdEngine(std::shared_ptr<storm::models::symbolic::Dtmc<DdType, ValueType>> const& dtmc,
497 Environment env;
498 return verifyWithDdEngine(env, dtmc, task);
499}
500
501template<storm::dd::DdType DdType, typename ValueType>
502std::unique_ptr<storm::modelchecker::CheckResult> verifyWithDdEngine(storm::Environment const& env,
503 std::shared_ptr<storm::models::symbolic::Mdp<DdType, ValueType>> const& mdp,
505 if constexpr (std::is_same_v<ValueType, storm::RationalFunction> || storm::IsIntervalType<ValueType>) {
506 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Dd engine cannot verify MDPs with this data type.");
507 } else {
508 std::unique_ptr<storm::modelchecker::CheckResult> result;
509 mdp->getManager().execute([&]() {
511 if (modelchecker.canHandle(task)) {
512 result = modelchecker.check(env, task);
513 }
514 });
515 return result;
516 }
517}
518
519template<storm::dd::DdType DdType, typename ValueType>
520std::unique_ptr<storm::modelchecker::CheckResult> verifyWithDdEngine(std::shared_ptr<storm::models::symbolic::Mdp<DdType, ValueType>> const& mdp,
522 Environment env;
523 return verifyWithDdEngine(env, mdp, task);
524}
525
526template<storm::dd::DdType DdType, typename ValueType>
527std::unique_ptr<storm::modelchecker::CheckResult> verifyWithDdEngine(storm::Environment const& env,
528 std::shared_ptr<storm::models::symbolic::Model<DdType, ValueType>> const& model,
530 std::unique_ptr<storm::modelchecker::CheckResult> result;
531 if (model->getType() == storm::models::ModelType::Dtmc) {
532 result = verifyWithDdEngine(env, model->template as<storm::models::symbolic::Dtmc<DdType, ValueType>>(), task);
533 } else if (model->getType() == storm::models::ModelType::Mdp) {
534 result = verifyWithDdEngine(env, model->template as<storm::models::symbolic::Mdp<DdType, ValueType>>(), task);
535 } else {
536 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "The model type " << model->getType() << " is not supported by the dd engine.");
537 }
538 return result;
539}
540
541template<storm::dd::DdType DdType, typename ValueType>
542std::unique_ptr<storm::modelchecker::CheckResult> verifyWithDdEngine(std::shared_ptr<storm::models::symbolic::Model<DdType, ValueType>> const& model,
544 Environment env;
545 return verifyWithDdEngine(env, model, task);
546}
547
548} // namespace api
549} // namespace storm
virtual std::unique_ptr< CheckResult > check(Environment const &env, CheckTask< storm::logic::Formula, SolutionType > const &checkTask)
Checks the provided formula.
void setUncertaintyResolutionMode(UncertaintyResolutionMode uncertaintyResolutionMode)
Sets the mode which decides how the uncertainty will be resolved.
Definition CheckTask.h:312
virtual bool canHandle(CheckTask< storm::logic::Formula, ValueType > const &checkTask) const override
This class represents a continuous-time Markov chain.
Definition Ctmc.h:13
This class represents a discrete-time Markov chain.
Definition Dtmc.h:13
This class represents a Markov automaton.
This class represents a (discrete-time) Markov decision process.
Definition Mdp.h:13
Base class for all sparse models.
Definition Model.h:30
This class represents a stochastic multiplayer game.
Definition Smg.h:16
This class represents a continuous-time Markov chain.
Definition Ctmc.h:13
This class represents a discrete-time Markov chain.
Definition Dtmc.h:13
This class represents a discrete-time Markov decision process.
This class represents a discrete-time Markov decision process.
Definition Mdp.h:13
Base class for all symbolic models.
Definition Model.h:42
ModelType getModelType() const
Retrieves the model type of the model.
Definition Program.cpp:243
storm::prism::Program const & asPrismProgram() const
#define STORM_LOG_WARN(message)
Definition logging.h:28
#define STORM_LOG_THROW(cond, exception, message)
Definition macros.h:28
std::unique_ptr< storm::modelchecker::CheckResult > verifyWithHybridEngine(storm::Environment const &env, std::shared_ptr< storm::models::symbolic::Dtmc< DdType, ValueType > > const &dtmc, storm::modelchecker::CheckTask< storm::logic::Formula, ValueType > const &task)
storm::modelchecker::CheckTask< storm::logic::Formula, ValueType > createTask(std::shared_ptr< const storm::logic::Formula > const &formula, bool onlyInitialStatesRelevant=false)
std::unique_ptr< storm::modelchecker::CheckResult > verifyWithExplorationEngine(storm::Environment const &env, storm::storage::SymbolicModelDescription const &model, storm::modelchecker::CheckTask< storm::logic::Formula, ValueType > const &task)
std::unique_ptr< storm::modelchecker::CheckResult > computeExpectedVisitingTimesWithSparseEngine(storm::Environment const &env, std::shared_ptr< storm::models::sparse::Dtmc< ValueType > > const &dtmc)
std::unique_ptr< storm::modelchecker::CheckResult > verifyWithDdEngine(storm::Environment const &env, std::shared_ptr< storm::models::symbolic::Dtmc< DdType, ValueType > > const &dtmc, storm::modelchecker::CheckTask< storm::logic::Formula, ValueType > const &task)
std::unique_ptr< storm::modelchecker::CheckResult > verifyWithSparseEngine(storm::Environment const &env, std::shared_ptr< storm::models::sparse::Dtmc< ValueType > > const &dtmc, storm::modelchecker::CheckTask< storm::logic::Formula, ValueType > const &task)
std::unique_ptr< storm::modelchecker::CheckResult > computeSteadyStateDistributionWithSparseEngine(storm::Environment const &env, std::shared_ptr< storm::models::sparse::Dtmc< ValueType > > const &dtmc)
SettingsType const & getModule()
Get module.
solver::UncertaintyResolutionMode UncertaintyResolutionMode
constexpr bool IsIntervalType
Helper to check if a type is an interval.