Storm 1.11.1.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
34
36
40
41namespace storm {
42namespace api {
43
44template<typename ValueType>
45 requires(!storm::IsIntervalType<ValueType>)
46storm::modelchecker::CheckTask<storm::logic::Formula, ValueType> createTask(std::shared_ptr<const storm::logic::Formula> const& formula,
47 bool onlyInitialStatesRelevant = false) {
48 return storm::modelchecker::CheckTask<storm::logic::Formula, ValueType>(*formula, onlyInitialStatesRelevant);
49}
50
51template<typename ValueType>
52 requires(storm::IsIntervalType<ValueType>)
53storm::modelchecker::CheckTask<storm::logic::Formula, ValueType> createTask(std::shared_ptr<const storm::logic::Formula> const& formula,
54 storm::UncertaintyResolutionMode uncertaintyResolution,
55 bool onlyInitialStatesRelevant = false) {
56 storm::modelchecker::CheckTask<storm::logic::Formula, ValueType> checkTask(*formula, onlyInitialStatesRelevant);
57 checkTask.setUncertaintyResolutionMode(uncertaintyResolution);
58 return checkTask;
59}
60
61//
62// Verifying with Exploration engine
63//
64template<typename ValueType>
65std::unique_ptr<storm::modelchecker::CheckResult> verifyWithExplorationEngine(storm::Environment const& env,
68 if (!std::is_same_v<ValueType, double>) {
69 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Exploration engine does not support data type.");
70 } else {
71 STORM_LOG_THROW(model.isPrismProgram(), storm::exceptions::NotSupportedException, "Exploration engine is currently only applicable to PRISM models.");
72 storm::prism::Program const& program = model.asPrismProgram();
73
74 std::unique_ptr<storm::modelchecker::CheckResult> result;
77 if (checker.canHandle(task)) {
78 result = checker.check(env, task);
79 }
82 if (checker.canHandle(task)) {
83 result = checker.check(env, task);
84 }
85 } else {
86 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException,
87 "The model type " << program.getModelType() << " is not supported by the exploration engine.");
88 }
89
90 return result;
91 }
92}
93
94template<typename ValueType>
95std::unique_ptr<storm::modelchecker::CheckResult> verifyWithExplorationEngine(storm::storage::SymbolicModelDescription const& model,
97 Environment env;
98 return verifyWithExplorationEngine(env, model, task);
99}
100
101//
102// Verifying with Sparse engine
103//
104template<typename ValueType>
105std::unique_ptr<storm::modelchecker::CheckResult> verifyWithSparseEngine(storm::Environment const& env,
106 std::shared_ptr<storm::models::sparse::Dtmc<ValueType>> const& dtmc,
108 std::unique_ptr<storm::modelchecker::CheckResult> result;
109 if (storm::settings::getModule<storm::settings::modules::CoreSettings>().getEquationSolver() == storm::solver::EquationSolverType::Elimination &&
110 storm::settings::getModule<storm::settings::modules::EliminationSettings>().isUseDedicatedModelCheckerSet()) {
111 if constexpr (storm::IsIntervalType<ValueType>) {
112 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "We do not yet support using the elimination checker with intervals models.");
113 }
114 auto newTask = task.template convertValueType<
117 if (modelchecker.canHandle(newTask)) {
118 result = modelchecker.check(env, newTask);
119 }
120 } else {
122 auto newTask =
123 task.template convertValueType<typename storm::modelchecker::SparseDtmcPrctlModelChecker<storm::models::sparse::Dtmc<ValueType>>::SolutionType>();
124 if (modelchecker.canHandle(newTask)) {
125 result = modelchecker.check(env, newTask);
126 }
127 }
128 return result;
129}
130
131template<typename ValueType>
132std::unique_ptr<storm::modelchecker::CheckResult> verifyWithSparseEngine(std::shared_ptr<storm::models::sparse::Dtmc<ValueType>> const& dtmc,
134 Environment env;
135 return verifyWithSparseEngine(env, dtmc, task);
136}
137
138template<typename ValueType>
139std::unique_ptr<storm::modelchecker::CheckResult> verifyWithSparseEngine(storm::Environment const& env,
140 std::shared_ptr<storm::models::sparse::Ctmc<ValueType>> const& ctmc,
142 if constexpr (storm::IsIntervalType<ValueType>) {
143 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Sparse engine cannot verify interval CTMCs.");
144 } else {
145 std::unique_ptr<storm::modelchecker::CheckResult> result;
147 if (modelchecker.canHandle(task)) {
148 result = modelchecker.check(env, task);
149 }
150 return result;
151 }
152}
153
154template<typename ValueType>
155std::unique_ptr<storm::modelchecker::CheckResult> verifyWithSparseEngine(std::shared_ptr<storm::models::sparse::Ctmc<ValueType>> const& ctmc,
157 Environment env;
158 return verifyWithSparseEngine(env, ctmc, task);
159}
160
161template<typename ValueType>
162std::unique_ptr<storm::modelchecker::CheckResult> verifyWithSparseEngine(storm::Environment const& env,
163 std::shared_ptr<storm::models::sparse::Mdp<ValueType>> const& mdp,
165 using ModelCheckerType = std::conditional_t<std::is_same_v<ValueType, storm::RationalFunction>,
168
169 std::unique_ptr<storm::modelchecker::CheckResult> result;
170 ModelCheckerType modelchecker(*mdp);
171 // The CheckTask needs to have the SolutionType. For now, we create a copy.
172 // TODO: This is a little messy: the CheckTask should have been provided with the right solution type already.
173 auto newTask = task.template convertValueType<typename ModelCheckerType::SolutionType>();
174 if (modelchecker.canHandle(newTask)) {
175 result = modelchecker.check(env, newTask);
176 }
177 return result;
178}
179
180template<typename ValueType>
181std::unique_ptr<storm::modelchecker::CheckResult> verifyWithSparseEngine(std::shared_ptr<storm::models::sparse::Mdp<ValueType>> const& mdp,
183 Environment env;
184 return verifyWithSparseEngine(env, mdp, task);
185}
186
187template<typename ValueType>
188std::unique_ptr<storm::modelchecker::CheckResult> verifyWithSparseEngine(storm::Environment const& env,
189 std::shared_ptr<storm::models::sparse::MarkovAutomaton<ValueType>> const& ma,
191 if constexpr (std::is_same_v<ValueType, storm::RationalFunction> || storm::IsIntervalType<ValueType>) {
192 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Sparse engine cannot verify MAs with this data type.");
193 } else {
194 std::unique_ptr<storm::modelchecker::CheckResult> result;
195
196 // Close the MA, if it is not already closed.
197 if (!ma->isClosed()) {
198 STORM_LOG_WARN("Closing Markov automaton. Consider closing the MA before verification.");
199 ma->close();
200 }
201
203 if (modelchecker.canHandle(task)) {
204 result = modelchecker.check(env, task);
205 }
206 return result;
207 }
208}
209
210template<typename ValueType>
211std::unique_ptr<storm::modelchecker::CheckResult> verifyWithSparseEngine(std::shared_ptr<storm::models::sparse::MarkovAutomaton<ValueType>> const& ma,
213 Environment env;
214 return verifyWithSparseEngine(env, ma, task);
215}
216
217template<typename ValueType>
218std::unique_ptr<storm::modelchecker::CheckResult> verifyWithSparseEngine(storm::Environment const& env,
219 std::shared_ptr<storm::models::sparse::Smg<ValueType>> const& smg,
221 if constexpr (std::is_same_v<ValueType, storm::RationalFunction> || storm::IsIntervalType<ValueType>) {
222 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Sparse engine cannot verify SMGs with this data type.");
223 } else {
224 std::unique_ptr<storm::modelchecker::CheckResult> result;
226 if (modelchecker.canHandle(task)) {
227 result = modelchecker.check(env, task);
228 }
229 return result;
230 }
231}
232
233template<typename ValueType>
234std::unique_ptr<storm::modelchecker::CheckResult> verifyWithSparseEngine(std::shared_ptr<storm::models::sparse::Smg<ValueType>> const& smg,
236 Environment env;
237 return verifyWithSparseEngine(env, smg, task);
238}
239
240template<typename ValueType>
241std::unique_ptr<storm::modelchecker::CheckResult> verifyWithSparseEngine(storm::Environment const& env,
242 std::shared_ptr<storm::models::sparse::Model<ValueType>> const& model,
244 std::unique_ptr<storm::modelchecker::CheckResult> result;
245 if (model->getType() == storm::models::ModelType::Dtmc) {
246 result = verifyWithSparseEngine(env, model->template as<storm::models::sparse::Dtmc<ValueType>>(), task);
247 } else if (model->getType() == storm::models::ModelType::Mdp) {
248 result = verifyWithSparseEngine(env, model->template as<storm::models::sparse::Mdp<ValueType>>(), task);
249 } else if (model->getType() == storm::models::ModelType::Ctmc) {
250 result = verifyWithSparseEngine(env, model->template as<storm::models::sparse::Ctmc<ValueType>>(), task);
251 } else if (model->getType() == storm::models::ModelType::MarkovAutomaton) {
252 result = verifyWithSparseEngine(env, model->template as<storm::models::sparse::MarkovAutomaton<ValueType>>(), task);
253 } else if (model->getType() == storm::models::ModelType::Smg) {
254 result = verifyWithSparseEngine(env, model->template as<storm::models::sparse::Smg<ValueType>>(), task);
255 } else {
256 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "The model type " << model->getType() << " is not supported by the sparse engine.");
257 }
258 return result;
259}
260
261template<typename ValueType>
262std::unique_ptr<storm::modelchecker::CheckResult> verifyWithSparseEngine(std::shared_ptr<storm::models::sparse::Model<ValueType>> const& model,
264 Environment env;
265 return verifyWithSparseEngine(env, model, task);
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:313
virtual bool canHandle(CheckTask< storm::logic::Formula, ValueType > const &checkTask) const override
virtual bool canHandle(CheckTask< storm::logic::Formula, ValueType > const &checkTask) const override
virtual bool canHandle(CheckTask< storm::logic::Formula, ValueType > const &checkTask) const override
virtual bool canHandle(CheckTask< storm::logic::Formula, ValueType > const &checkTask) const override
std::unique_ptr< CheckResult > computeExpectedVisitingTimes(Environment const &env)
Computes for each state the expected number of times we visit that state.
virtual bool canHandle(CheckTask< storm::logic::Formula, ValueType > const &checkTask) const override
std::unique_ptr< CheckResult > computeSteadyStateDistribution(Environment const &env)
Computes the long run average (or: steady state) distribution over all states Assumes a uniform distr...
std::unique_ptr< CheckResult > computeExpectedVisitingTimes(Environment const &env)
Computes for each state the expected number of times we visit that state.
virtual bool canHandle(CheckTask< storm::logic::Formula, SolutionType > const &checkTask) const override
Determines whether the model checker can handle the given verification task.
std::unique_ptr< CheckResult > computeSteadyStateDistribution(Environment const &env)
Computes the long run average (or: steady state) distribution over all states Assumes a uniform distr...
virtual bool canHandle(CheckTask< storm::logic::Formula, ValueType > const &checkTask) const override
virtual bool canHandle(CheckTask< storm::logic::Formula, ValueType > const &checkTask) const override
virtual bool canHandle(CheckTask< storm::logic::Formula, ValueType > const &checkTask) const override
virtual bool canHandle(CheckTask< storm::logic::Formula, ValueType > const &checkTask) const override
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:32
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:247
storm::prism::Program const & asPrismProgram() const
#define STORM_LOG_WARN(message)
Definition logging.h:25
#define STORM_LOG_THROW(cond, exception, message)
Definition macros.h:30
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)