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
31
33
37
38namespace storm {
39namespace api {
40
41template<typename ValueType>
43storm::modelchecker::CheckTask<storm::logic::Formula, ValueType> createTask(std::shared_ptr<const storm::logic::Formula> const& formula,
44 bool onlyInitialStatesRelevant = false) {
45 return storm::modelchecker::CheckTask<storm::logic::Formula, ValueType>(*formula, onlyInitialStatesRelevant);
46}
47
48template<typename ValueType>
50storm::modelchecker::CheckTask<storm::logic::Formula, ValueType> createTask(std::shared_ptr<const storm::logic::Formula> const& formula,
51 storm::UncertaintyResolutionMode uncertaintyResolution,
52 bool onlyInitialStatesRelevant = false) {
53 storm::modelchecker::CheckTask<storm::logic::Formula, ValueType> checkTask(*formula, onlyInitialStatesRelevant);
54 checkTask.setUncertaintyResolutionMode(uncertaintyResolution);
55 return checkTask;
56}
57
58//
59// Verifying with Exploration engine
60//
61template<typename ValueType>
62std::unique_ptr<storm::modelchecker::CheckResult> verifyWithExplorationEngine(storm::Environment const& env,
65 if (!std::is_same_v<ValueType, double>) {
66 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Exploration engine does not support data type.");
67 } else {
68 STORM_LOG_THROW(model.isPrismProgram(), storm::exceptions::NotSupportedException, "Exploration engine is currently only applicable to PRISM models.");
69 storm::prism::Program const& program = model.asPrismProgram();
70
71 std::unique_ptr<storm::modelchecker::CheckResult> result;
74 if (checker.canHandle(task)) {
75 result = checker.check(env, task);
76 }
79 if (checker.canHandle(task)) {
80 result = checker.check(env, task);
81 }
82 } else {
83 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException,
84 "The model type " << program.getModelType() << " is not supported by the exploration engine.");
85 }
86
87 return result;
88 }
89}
90
91template<typename ValueType>
92std::unique_ptr<storm::modelchecker::CheckResult> verifyWithExplorationEngine(storm::storage::SymbolicModelDescription const& model,
94 Environment env;
95 return verifyWithExplorationEngine(env, model, task);
96}
97
98//
99// Verifying with Sparse engine
100//
101template<typename ValueType>
102std::unique_ptr<storm::modelchecker::CheckResult> verifyWithSparseEngine(storm::Environment const& env,
103 std::shared_ptr<storm::models::sparse::Dtmc<ValueType>> const& dtmc,
105 bool preferEliminationChecker = false) {
106 std::unique_ptr<storm::modelchecker::CheckResult> result;
107 if (preferEliminationChecker) {
108 if constexpr (storm::IsIntervalType<ValueType>) {
109 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "We do not yet support using the elimination checker with intervals models.");
110 }
111 auto newTask = task.template convertValueType<
114 if (modelchecker.canHandle(newTask)) {
115 result = modelchecker.check(env, newTask);
116 }
117 } else {
119 auto newTask =
120 task.template convertValueType<typename storm::modelchecker::SparseDtmcPrctlModelChecker<storm::models::sparse::Dtmc<ValueType>>::SolutionType>();
121 if (modelchecker.canHandle(newTask)) {
122 result = modelchecker.check(env, newTask);
123 }
124 }
125 return result;
126}
127
128template<typename ValueType>
129std::unique_ptr<storm::modelchecker::CheckResult> verifyWithSparseEngine(std::shared_ptr<storm::models::sparse::Dtmc<ValueType>> const& dtmc,
131 bool preferEliminationChecker = false) {
132 Environment env;
133 return verifyWithSparseEngine(env, dtmc, task, preferEliminationChecker);
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 bool preferEliminationChecker = false) {
243 std::unique_ptr<storm::modelchecker::CheckResult> result;
244 if (model->getType() == storm::models::ModelType::Dtmc) {
245 result = verifyWithSparseEngine(env, model->template as<storm::models::sparse::Dtmc<ValueType>>(), task, preferEliminationChecker);
246 } else if (model->getType() == storm::models::ModelType::Mdp) {
247 result = verifyWithSparseEngine(env, model->template as<storm::models::sparse::Mdp<ValueType>>(), task);
248 } else if (model->getType() == storm::models::ModelType::Ctmc) {
249 result = verifyWithSparseEngine(env, model->template as<storm::models::sparse::Ctmc<ValueType>>(), task);
250 } else if (model->getType() == storm::models::ModelType::MarkovAutomaton) {
251 result = verifyWithSparseEngine(env, model->template as<storm::models::sparse::MarkovAutomaton<ValueType>>(), task);
252 } else if (model->getType() == storm::models::ModelType::Smg) {
253 result = verifyWithSparseEngine(env, model->template as<storm::models::sparse::Smg<ValueType>>(), task);
254 } else {
255 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "The model type " << model->getType() << " is not supported by the sparse engine.");
256 }
257 return result;
258}
259
260template<typename ValueType>
261std::unique_ptr<storm::modelchecker::CheckResult> verifyWithSparseEngine(std::shared_ptr<storm::models::sparse::Model<ValueType>> const& model,
263 bool preferEliminationChecker = false) {
264 Environment env;
265 return verifyWithSparseEngine(env, model, task, preferEliminationChecker);
266}
267
268template<typename ValueType>
269std::unique_ptr<storm::modelchecker::CheckResult> computeSteadyStateDistributionWithSparseEngine(
270 storm::Environment const& env, std::shared_ptr<storm::models::sparse::Dtmc<ValueType>> const& dtmc) {
271 if constexpr (storm::IsIntervalType<ValueType>) {
272 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Can not compute steady state distributions for interval models.");
273 } else {
274 std::unique_ptr<storm::modelchecker::CheckResult> result;
276 return modelchecker.computeSteadyStateDistribution(env);
277 }
278}
279
280template<typename ValueType>
281std::unique_ptr<storm::modelchecker::CheckResult> computeSteadyStateDistributionWithSparseEngine(
282 storm::Environment const& env, std::shared_ptr<storm::models::sparse::Ctmc<ValueType>> const& ctmc) {
283 if constexpr (storm::IsIntervalType<ValueType>) {
284 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Can not compute steady state distributions for interval models.");
285 } else {
286 std::unique_ptr<storm::modelchecker::CheckResult> result;
288 return modelchecker.computeSteadyStateDistribution(env);
289 }
290}
291
292template<typename ValueType>
293std::unique_ptr<storm::modelchecker::CheckResult> computeSteadyStateDistributionWithSparseEngine(
294 storm::Environment const& env, std::shared_ptr<storm::models::sparse::Model<ValueType>> const& model) {
295 std::unique_ptr<storm::modelchecker::CheckResult> result;
296 if (model->getType() == storm::models::ModelType::Dtmc) {
298 } else if (model->getType() == storm::models::ModelType::Ctmc) {
300 } else {
301 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException,
302 "Computing the long run average distribution for the model type " << model->getType() << " is not supported.");
303 }
304 return result;
305}
306
307template<typename ValueType>
308std::unique_ptr<storm::modelchecker::CheckResult> computeExpectedVisitingTimesWithSparseEngine(
309 storm::Environment const& env, std::shared_ptr<storm::models::sparse::Dtmc<ValueType>> const& dtmc) {
310 if constexpr (storm::IsIntervalType<ValueType>) {
311 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Can not compute expected visiting times for interval models.");
312 } else {
313 std::unique_ptr<storm::modelchecker::CheckResult> result;
315 return modelchecker.computeExpectedVisitingTimes(env);
316 }
317}
318
319template<typename ValueType>
320std::unique_ptr<storm::modelchecker::CheckResult> computeExpectedVisitingTimesWithSparseEngine(
321 storm::Environment const& env, std::shared_ptr<storm::models::sparse::Ctmc<ValueType>> const& ctmc) {
322 if constexpr (storm::IsIntervalType<ValueType>) {
323 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Can not compute expected visiting times for interval models.");
324 } else {
325 std::unique_ptr<storm::modelchecker::CheckResult> result;
327 return modelchecker.computeExpectedVisitingTimes(env);
328 }
329}
330
331template<typename ValueType>
332std::unique_ptr<storm::modelchecker::CheckResult> computeExpectedVisitingTimesWithSparseEngine(
333 storm::Environment const& env, std::shared_ptr<storm::models::sparse::Model<ValueType>> const& model) {
334 std::unique_ptr<storm::modelchecker::CheckResult> result;
335 if (model->getType() == storm::models::ModelType::Dtmc) {
337 } else if (model->getType() == storm::models::ModelType::Ctmc) {
339 } else {
340 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException,
341 "Computing expected visiting times for the model type " << model->getType() << " is not supported.");
342 }
343 return result;
344}
345
346//
347// Verifying with Hybrid engine
348//
349template<storm::dd::DdType DdType, typename ValueType>
350std::unique_ptr<storm::modelchecker::CheckResult> verifyWithHybridEngine(storm::Environment const& env,
351 std::shared_ptr<storm::models::symbolic::Dtmc<DdType, ValueType>> const& dtmc,
353 if constexpr (storm::IsIntervalType<ValueType>) {
354 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Hybrid engine cannot verify DTMC with this data type.");
355 } else {
356 std::unique_ptr<storm::modelchecker::CheckResult> result;
357 dtmc->getManager().execute([&]() {
359 if (modelchecker.canHandle(task)) {
360 result = modelchecker.check(env, task);
361 }
362 });
363 return result;
364 }
365}
366
367template<storm::dd::DdType DdType, typename ValueType>
368std::unique_ptr<storm::modelchecker::CheckResult> verifyWithHybridEngine(std::shared_ptr<storm::models::symbolic::Dtmc<DdType, ValueType>> const& dtmc,
370 Environment env;
371 return verifyWithHybridEngine(env, dtmc, task);
372}
373
374template<storm::dd::DdType DdType, typename ValueType>
375std::unique_ptr<storm::modelchecker::CheckResult> verifyWithHybridEngine(storm::Environment const& env,
376 std::shared_ptr<storm::models::symbolic::Ctmc<DdType, ValueType>> const& ctmc,
378 if constexpr (storm::IsIntervalType<ValueType>) {
379 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Hybrid engine cannot verify CTMC with this data type.");
380 } else {
381 std::unique_ptr<storm::modelchecker::CheckResult> result;
382 ctmc->getManager().execute([&]() {
384 if (modelchecker.canHandle(task)) {
385 result = modelchecker.check(env, task);
386 }
387 });
388 return result;
389 }
390}
391
392template<storm::dd::DdType DdType, typename ValueType>
393std::unique_ptr<storm::modelchecker::CheckResult> verifyWithHybridEngine(std::shared_ptr<storm::models::symbolic::Ctmc<DdType, ValueType>> const& ctmc,
395 Environment env;
396 return verifyWithHybridEngine(env, ctmc, task);
397}
398
399template<storm::dd::DdType DdType, typename ValueType>
400std::unique_ptr<storm::modelchecker::CheckResult> verifyWithHybridEngine(storm::Environment const& env,
401 std::shared_ptr<storm::models::symbolic::Mdp<DdType, ValueType>> const& mdp,
403 if constexpr (std::is_same_v<ValueType, storm::RationalFunction> || storm::IsIntervalType<ValueType>) {
404 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Hybrid engine cannot verify MDPs with this data type.");
405 } else {
406 std::unique_ptr<storm::modelchecker::CheckResult> result;
407 mdp->getManager().execute([&]() {
409 if (modelchecker.canHandle(task)) {
410 result = modelchecker.check(env, task);
411 }
412 });
413 return result;
414 }
415}
416
417template<storm::dd::DdType DdType, typename ValueType>
418std::unique_ptr<storm::modelchecker::CheckResult> verifyWithHybridEngine(std::shared_ptr<storm::models::symbolic::Mdp<DdType, ValueType>> const& mdp,
420 Environment env;
421 return verifyWithHybridEngine(env, mdp, task);
422}
423
424template<storm::dd::DdType DdType, typename ValueType>
425std::unique_ptr<storm::modelchecker::CheckResult> verifyWithHybridEngine(storm::Environment const& env,
428 if constexpr (std::is_same_v<ValueType, storm::RationalFunction> || storm::IsIntervalType<ValueType>) {
429 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Hybrid engine cannot verify MDPs with this data type.");
430 } else {
431 std::unique_ptr<storm::modelchecker::CheckResult> result;
432 ma->getManager().execute([&]() {
434 if (modelchecker.canHandle(task)) {
435 result = modelchecker.check(env, task);
436 }
437 });
438 return result;
439 }
440}
441
442template<storm::dd::DdType DdType, typename ValueType>
443std::unique_ptr<storm::modelchecker::CheckResult> verifyWithHybridEngine(std::shared_ptr<storm::models::symbolic::MarkovAutomaton<DdType, ValueType>> const& ma,
445 Environment env;
446 return verifyWithHybridEngine(env, ma, task);
447}
448
449template<storm::dd::DdType DdType, typename ValueType>
450std::unique_ptr<storm::modelchecker::CheckResult> verifyWithHybridEngine(storm::Environment const& env,
451 std::shared_ptr<storm::models::symbolic::Model<DdType, ValueType>> const& model,
453 std::unique_ptr<storm::modelchecker::CheckResult> result;
454 if (model->getType() == storm::models::ModelType::Dtmc) {
455 result = verifyWithHybridEngine(env, model->template as<storm::models::symbolic::Dtmc<DdType, ValueType>>(), task);
456 } else if (model->getType() == storm::models::ModelType::Ctmc) {
457 result = verifyWithHybridEngine(env, model->template as<storm::models::symbolic::Ctmc<DdType, ValueType>>(), task);
458 } else if (model->getType() == storm::models::ModelType::Mdp) {
459 result = verifyWithHybridEngine(env, model->template as<storm::models::symbolic::Mdp<DdType, ValueType>>(), task);
460 } else if (model->getType() == storm::models::ModelType::MarkovAutomaton) {
462 } else {
463 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "The model type " << model->getType() << " is not supported by the hybrid engine.");
464 }
465 return result;
466}
467
468template<storm::dd::DdType DdType, typename ValueType>
469std::unique_ptr<storm::modelchecker::CheckResult> verifyWithHybridEngine(std::shared_ptr<storm::models::symbolic::Model<DdType, ValueType>> const& model,
471 Environment env;
472 return verifyWithHybridEngine(env, model, task);
473}
474
475//
476// Verifying with DD engine
477//
478template<storm::dd::DdType DdType, typename ValueType>
479std::unique_ptr<storm::modelchecker::CheckResult> verifyWithDdEngine(storm::Environment const& env,
480 std::shared_ptr<storm::models::symbolic::Dtmc<DdType, ValueType>> const& dtmc,
482 if constexpr (storm::IsIntervalType<ValueType>) {
483 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Dd engine cannot verify DTMC with this data type.");
484 } else {
485 std::unique_ptr<storm::modelchecker::CheckResult> result;
486 dtmc->getManager().execute([&]() {
488 if (modelchecker.canHandle(task)) {
489 result = modelchecker.check(env, task);
490 }
491 });
492 return result;
493 }
494}
495
496template<storm::dd::DdType DdType, typename ValueType>
497std::unique_ptr<storm::modelchecker::CheckResult> verifyWithDdEngine(std::shared_ptr<storm::models::symbolic::Dtmc<DdType, ValueType>> const& dtmc,
499 Environment env;
500 return verifyWithDdEngine(env, dtmc, task);
501}
502
503template<storm::dd::DdType DdType, typename ValueType>
504std::unique_ptr<storm::modelchecker::CheckResult> verifyWithDdEngine(storm::Environment const& env,
505 std::shared_ptr<storm::models::symbolic::Mdp<DdType, ValueType>> const& mdp,
507 if constexpr (std::is_same_v<ValueType, storm::RationalFunction> || storm::IsIntervalType<ValueType>) {
508 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Dd engine cannot verify MDPs with this data type.");
509 } else {
510 std::unique_ptr<storm::modelchecker::CheckResult> result;
511 mdp->getManager().execute([&]() {
513 if (modelchecker.canHandle(task)) {
514 result = modelchecker.check(env, task);
515 }
516 });
517 return result;
518 }
519}
520
521template<storm::dd::DdType DdType, typename ValueType>
522std::unique_ptr<storm::modelchecker::CheckResult> verifyWithDdEngine(std::shared_ptr<storm::models::symbolic::Mdp<DdType, ValueType>> const& mdp,
524 Environment env;
525 return verifyWithDdEngine(env, mdp, task);
526}
527
528template<storm::dd::DdType DdType, typename ValueType>
529std::unique_ptr<storm::modelchecker::CheckResult> verifyWithDdEngine(storm::Environment const& env,
530 std::shared_ptr<storm::models::symbolic::Model<DdType, ValueType>> const& model,
532 std::unique_ptr<storm::modelchecker::CheckResult> result;
533 if (model->getType() == storm::models::ModelType::Dtmc) {
534 result = verifyWithDdEngine(env, model->template as<storm::models::symbolic::Dtmc<DdType, ValueType>>(), task);
535 } else if (model->getType() == storm::models::ModelType::Mdp) {
536 result = verifyWithDdEngine(env, model->template as<storm::models::symbolic::Mdp<DdType, ValueType>>(), task);
537 } else {
538 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "The model type " << model->getType() << " is not supported by the dd engine.");
539 }
540 return result;
541}
542
543template<storm::dd::DdType DdType, typename ValueType>
544std::unique_ptr<storm::modelchecker::CheckResult> verifyWithDdEngine(std::shared_ptr<storm::models::symbolic::Model<DdType, ValueType>> const& model,
546 Environment env;
547 return verifyWithDdEngine(env, model, task);
548}
549
550} // namespace api
551} // 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:16
This class represents a discrete-time Markov chain.
Definition Dtmc.h:16
This class represents a Markov automaton.
This class represents a (discrete-time) Markov decision process.
Definition Mdp.h:16
Base class for all sparse models.
Definition Model.h:34
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:35
#define STORM_LOG_THROW(cond, exception, message)
Definition macros.h:39
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, bool preferEliminationChecker=false)
std::unique_ptr< storm::modelchecker::CheckResult > computeSteadyStateDistributionWithSparseEngine(storm::Environment const &env, std::shared_ptr< storm::models::sparse::Dtmc< ValueType > > const &dtmc)
solver::UncertaintyResolutionMode UncertaintyResolutionMode
constexpr bool IsIntervalType
Helper to check if a type is an interval.