41template<
typename ValueType>
44 bool onlyInitialStatesRelevant =
false) {
48template<
typename ValueType>
52 bool onlyInitialStatesRelevant =
false) {
61template<
typename ValueType>
65 if (!std::is_same_v<ValueType, double>) {
66 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Exploration engine does not support data type.");
68 STORM_LOG_THROW(model.
isPrismProgram(), storm::exceptions::NotSupportedException,
"Exploration engine is currently only applicable to PRISM models.");
71 std::unique_ptr<storm::modelchecker::CheckResult> result;
75 result = checker.
check(env, task);
80 result = checker.
check(env, task);
84 "The model type " << program.
getModelType() <<
" is not supported by the exploration engine.");
91template<
typename ValueType>
101template<
typename ValueType>
105 bool preferEliminationChecker =
false) {
106 std::unique_ptr<storm::modelchecker::CheckResult> result;
107 if (preferEliminationChecker) {
109 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"We do not yet support using the elimination checker with intervals models.");
111 auto newTask = task.template convertValueType<
120 task.template convertValueType<typename storm::modelchecker::SparseDtmcPrctlModelChecker<storm::models::sparse::Dtmc<ValueType>>::SolutionType>();
128template<
typename ValueType>
131 bool preferEliminationChecker =
false) {
136template<
typename ValueType>
141 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Sparse engine cannot verify interval CTMCs.");
143 std::unique_ptr<storm::modelchecker::CheckResult> result;
152template<
typename ValueType>
159template<
typename ValueType>
163 using ModelCheckerType = std::conditional_t<std::is_same_v<ValueType, storm::RationalFunction>,
167 std::unique_ptr<storm::modelchecker::CheckResult> result;
171 auto newTask = task.template convertValueType<typename ModelCheckerType::SolutionType>();
178template<
typename ValueType>
185template<
typename ValueType>
190 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Sparse engine cannot verify MAs with this data type.");
192 std::unique_ptr<storm::modelchecker::CheckResult> result;
195 if (!ma->isClosed()) {
196 STORM_LOG_WARN(
"Closing Markov automaton. Consider closing the MA before verification.");
208template<
typename ValueType>
215template<
typename ValueType>
220 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Sparse engine cannot verify SMGs with this data type.");
222 std::unique_ptr<storm::modelchecker::CheckResult> result;
231template<
typename ValueType>
238template<
typename ValueType>
242 bool preferEliminationChecker =
false) {
243 std::unique_ptr<storm::modelchecker::CheckResult> result;
255 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"The model type " << model->getType() <<
" is not supported by the sparse engine.");
260template<
typename ValueType>
263 bool preferEliminationChecker =
false) {
268template<
typename ValueType>
272 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Can not compute steady state distributions for interval models.");
274 std::unique_ptr<storm::modelchecker::CheckResult> result;
276 return modelchecker.computeSteadyStateDistribution(env);
280template<
typename ValueType>
284 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Can not compute steady state distributions for interval models.");
286 std::unique_ptr<storm::modelchecker::CheckResult> result;
288 return modelchecker.computeSteadyStateDistribution(env);
292template<
typename ValueType>
295 std::unique_ptr<storm::modelchecker::CheckResult> result;
302 "Computing the long run average distribution for the model type " << model->getType() <<
" is not supported.");
307template<
typename ValueType>
311 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Can not compute expected visiting times for interval models.");
313 std::unique_ptr<storm::modelchecker::CheckResult> result;
319template<
typename ValueType>
323 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Can not compute expected visiting times for interval models.");
325 std::unique_ptr<storm::modelchecker::CheckResult> result;
331template<
typename ValueType>
334 std::unique_ptr<storm::modelchecker::CheckResult> result;
341 "Computing expected visiting times for the model type " << model->getType() <<
" is not supported.");
349template<storm::dd::DdType DdType,
typename ValueType>
354 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Hybrid engine cannot verify DTMC with this data type.");
356 std::unique_ptr<storm::modelchecker::CheckResult> result;
357 dtmc->getManager().execute([&]() {
367template<storm::dd::DdType DdType,
typename ValueType>
374template<storm::dd::DdType DdType,
typename ValueType>
379 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Hybrid engine cannot verify CTMC with this data type.");
381 std::unique_ptr<storm::modelchecker::CheckResult> result;
382 ctmc->getManager().execute([&]() {
392template<storm::dd::DdType DdType,
typename ValueType>
399template<storm::dd::DdType DdType,
typename ValueType>
404 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Hybrid engine cannot verify MDPs with this data type.");
406 std::unique_ptr<storm::modelchecker::CheckResult> result;
407 mdp->getManager().execute([&]() {
417template<storm::dd::DdType DdType,
typename ValueType>
424template<storm::dd::DdType DdType,
typename ValueType>
429 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Hybrid engine cannot verify MDPs with this data type.");
431 std::unique_ptr<storm::modelchecker::CheckResult> result;
432 ma->getManager().execute([&]() {
442template<storm::dd::DdType DdType,
typename ValueType>
449template<storm::dd::DdType DdType,
typename ValueType>
453 std::unique_ptr<storm::modelchecker::CheckResult> result;
463 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"The model type " << model->getType() <<
" is not supported by the hybrid engine.");
468template<storm::dd::DdType DdType,
typename ValueType>
478template<storm::dd::DdType DdType,
typename ValueType>
483 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Dd engine cannot verify DTMC with this data type.");
485 std::unique_ptr<storm::modelchecker::CheckResult> result;
486 dtmc->getManager().execute([&]() {
496template<storm::dd::DdType DdType,
typename ValueType>
503template<storm::dd::DdType DdType,
typename ValueType>
508 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Dd engine cannot verify MDPs with this data type.");
510 std::unique_ptr<storm::modelchecker::CheckResult> result;
511 mdp->getManager().execute([&]() {
521template<storm::dd::DdType DdType,
typename ValueType>
528template<storm::dd::DdType DdType,
typename ValueType>
532 std::unique_ptr<storm::modelchecker::CheckResult> result;
538 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"The model type " << model->getType() <<
" is not supported by the dd engine.");
543template<storm::dd::DdType DdType,
typename ValueType>
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.
virtual bool canHandle(CheckTask< storm::logic::Formula, ValueType > const &checkTask) const override
This class represents a continuous-time Markov chain.
This class represents a discrete-time Markov chain.
This class represents a Markov automaton.
This class represents a (discrete-time) Markov decision process.
Base class for all sparse models.
This class represents a stochastic multiplayer game.
This class represents a continuous-time Markov chain.
This class represents a discrete-time Markov chain.
This class represents a discrete-time Markov decision process.
This class represents a discrete-time Markov decision process.
Base class for all symbolic models.
ModelType getModelType() const
Retrieves the model type of the model.
storm::prism::Program const & asPrismProgram() const
bool isPrismProgram() const
#define STORM_LOG_WARN(message)
#define STORM_LOG_THROW(cond, exception, message)
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.