42template<
typename ValueType>
45 bool onlyInitialStatesRelevant =
false) {
49template<
typename ValueType>
53 bool onlyInitialStatesRelevant =
false) {
62template<
typename ValueType>
66 if (!std::is_same_v<ValueType, double>) {
67 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Exploration engine does not support data type.");
69 STORM_LOG_THROW(model.
isPrismProgram(), storm::exceptions::NotSupportedException,
"Exploration engine is currently only applicable to PRISM models.");
72 std::unique_ptr<storm::modelchecker::CheckResult> result;
76 result = checker.
check(env, task);
81 result = checker.
check(env, task);
85 "The model type " << program.
getModelType() <<
" is not supported by the exploration engine.");
92template<
typename ValueType>
102template<
typename ValueType>
106 std::unique_ptr<storm::modelchecker::CheckResult> result;
110 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"We do not yet support using the elimination checker with intervals models.");
112 auto newTask = task.template convertValueType<
121 task.template convertValueType<typename storm::modelchecker::SparseDtmcPrctlModelChecker<storm::models::sparse::Dtmc<ValueType>>::SolutionType>();
129template<
typename ValueType>
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 std::unique_ptr<storm::modelchecker::CheckResult> result;
254 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"The model type " << model->getType() <<
" is not supported by the sparse engine.");
259template<
typename ValueType>
266template<
typename ValueType>
270 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Can not compute steady state distributions for interval models.");
272 std::unique_ptr<storm::modelchecker::CheckResult> result;
274 return modelchecker.computeSteadyStateDistribution(env);
278template<
typename ValueType>
282 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Can not compute steady state distributions for interval models.");
284 std::unique_ptr<storm::modelchecker::CheckResult> result;
286 return modelchecker.computeSteadyStateDistribution(env);
290template<
typename ValueType>
293 std::unique_ptr<storm::modelchecker::CheckResult> result;
300 "Computing the long run average distribution for the model type " << model->getType() <<
" is not supported.");
305template<
typename ValueType>
309 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Can not compute expected visiting times for interval models.");
311 std::unique_ptr<storm::modelchecker::CheckResult> result;
317template<
typename ValueType>
321 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Can not compute expected visiting times for interval models.");
323 std::unique_ptr<storm::modelchecker::CheckResult> result;
329template<
typename ValueType>
332 std::unique_ptr<storm::modelchecker::CheckResult> result;
339 "Computing expected visiting times for the model type " << model->getType() <<
" is not supported.");
347template<storm::dd::DdType DdType,
typename ValueType>
352 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Hybrid engine cannot verify DTMC with this data type.");
354 std::unique_ptr<storm::modelchecker::CheckResult> result;
355 dtmc->getManager().execute([&]() {
365template<storm::dd::DdType DdType,
typename ValueType>
372template<storm::dd::DdType DdType,
typename ValueType>
377 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Hybrid engine cannot verify CTMC with this data type.");
379 std::unique_ptr<storm::modelchecker::CheckResult> result;
380 ctmc->getManager().execute([&]() {
390template<storm::dd::DdType DdType,
typename ValueType>
397template<storm::dd::DdType DdType,
typename ValueType>
402 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Hybrid engine cannot verify MDPs with this data type.");
404 std::unique_ptr<storm::modelchecker::CheckResult> result;
405 mdp->getManager().execute([&]() {
415template<storm::dd::DdType DdType,
typename ValueType>
422template<storm::dd::DdType DdType,
typename ValueType>
427 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Hybrid engine cannot verify MDPs with this data type.");
429 std::unique_ptr<storm::modelchecker::CheckResult> result;
430 ma->getManager().execute([&]() {
440template<storm::dd::DdType DdType,
typename ValueType>
447template<storm::dd::DdType DdType,
typename ValueType>
451 std::unique_ptr<storm::modelchecker::CheckResult> result;
461 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"The model type " << model->getType() <<
" is not supported by the hybrid engine.");
466template<storm::dd::DdType DdType,
typename ValueType>
476template<storm::dd::DdType DdType,
typename ValueType>
481 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Dd engine cannot verify DTMC with this data type.");
483 std::unique_ptr<storm::modelchecker::CheckResult> result;
484 dtmc->getManager().execute([&]() {
494template<storm::dd::DdType DdType,
typename ValueType>
501template<storm::dd::DdType DdType,
typename ValueType>
506 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Dd engine cannot verify MDPs with this data type.");
508 std::unique_ptr<storm::modelchecker::CheckResult> result;
509 mdp->getManager().execute([&]() {
519template<storm::dd::DdType DdType,
typename ValueType>
526template<storm::dd::DdType DdType,
typename ValueType>
530 std::unique_ptr<storm::modelchecker::CheckResult> result;
536 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"The model type " << model->getType() <<
" is not supported by the dd engine.");
541template<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)
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.