Storm
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
verification.h
Go to the documentation of this file.
1#pragma once
2
4
7
8namespace storm::gbar {
9namespace api {
10
11//
12// Verifying with Abstraction Refinement engine
13//
16 AbstractionRefinementOptions(std::vector<storm::expressions::Expression>&& constraints,
17 std::vector<std::vector<storm::expressions::Expression>>&& injectedRefinementPredicates)
19 // Intentionally left empty.
20 }
21
22 std::vector<storm::expressions::Expression> constraints;
23 std::vector<std::vector<storm::expressions::Expression>> injectedRefinementPredicates;
24};
25
26template<storm::dd::DdType DdType, typename ValueType>
27typename std::enable_if<!std::is_same<ValueType, storm::RationalFunction>::value, std::unique_ptr<storm::modelchecker::CheckResult>>::type
31 storm::gbar::modelchecker::GameBasedMdpModelCheckerOptions modelCheckerOptions(options.constraints, options.injectedRefinementPredicates);
32
33 std::unique_ptr<storm::modelchecker::CheckResult> result;
36 if (modelchecker.canHandle(task)) {
37 result = modelchecker.check(env, task);
38 }
41 if (modelchecker.canHandle(task)) {
42 result = modelchecker.check(env, task);
43 }
44 } else {
45 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException,
46 "The model type " << model.getModelType() << " is not supported by the abstraction refinement engine.");
47 }
48 return result;
49}
50
51template<storm::dd::DdType DdType, typename ValueType>
52typename std::enable_if<std::is_same<ValueType, storm::RationalFunction>::value, std::unique_ptr<storm::modelchecker::CheckResult>>::type
56 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Abstraction-refinement engine does not support data type.");
57}
58
59template<storm::dd::DdType DdType, typename ValueType>
60std::unique_ptr<storm::modelchecker::CheckResult> verifyWithAbstractionRefinementEngine(
63 Environment env;
64 return verifyWithAbstractionRefinementEngine<DdType, ValueType>(env, model, task, options);
65}
66
67template<storm::dd::DdType DdType, typename ValueType>
68typename std::enable_if<std::is_same<ValueType, double>::value, std::unique_ptr<storm::modelchecker::CheckResult>>::type verifyWithAbstractionRefinementEngine(
69 storm::Environment const& env, std::shared_ptr<storm::models::symbolic::Model<DdType, ValueType>> const& model,
71 std::unique_ptr<storm::modelchecker::CheckResult> result;
72 model->getManager().execute([&]() {
73 if (model->getType() == storm::models::ModelType::Dtmc) {
74 storm::gbar::modelchecker::BisimulationAbstractionRefinementModelChecker<storm::models::symbolic::Dtmc<DdType, ValueType>> modelchecker(
75 *model->template as<storm::models::symbolic::Dtmc<DdType, double>>());
76 if (modelchecker.canHandle(task)) {
77 result = modelchecker.check(env, task);
78 }
79 } else if (model->getType() == storm::models::ModelType::Mdp) {
80 storm::gbar::modelchecker::BisimulationAbstractionRefinementModelChecker<storm::models::symbolic::Mdp<DdType, ValueType>> modelchecker(
81 *model->template as<storm::models::symbolic::Mdp<DdType, double>>());
82 if (modelchecker.canHandle(task)) {
83 result = modelchecker.check(env, task);
84 }
85 } else {
86 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException,
87 "The model type " << model->getType() << " is not supported by the abstraction refinement engine.");
88 }
89 });
90 return result;
91}
92
93template<storm::dd::DdType DdType, typename ValueType>
94typename std::enable_if<!std::is_same<ValueType, double>::value, std::unique_ptr<storm::modelchecker::CheckResult>>::type verifyWithAbstractionRefinementEngine(
97 STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Abstraction-refinement engine does not support data type.");
98}
99
100template<storm::dd::DdType DdType, typename ValueType>
101std::unique_ptr<storm::modelchecker::CheckResult> verifyWithAbstractionRefinementEngine(
102 std::shared_ptr<storm::models::symbolic::Model<DdType, ValueType>> const& model,
104 Environment env;
105 return verifyWithAbstractionRefinementEngine<DdType, ValueType>(env, model, task);
106}
107
108} // namespace api
109} // namespace storm::gbar
virtual bool canHandle(storm::modelchecker::CheckTask< storm::logic::Formula, ValueType > const &checkTask) const override
Overridden methods from super class.
virtual std::unique_ptr< CheckResult > check(Environment const &env, CheckTask< storm::logic::Formula, SolutionType > const &checkTask)
Checks the provided formula.
Base class for all symbolic models.
Definition Model.h:46
storm::expressions::ExpressionManager & getManager() const
#define STORM_LOG_THROW(cond, exception, message)
Definition macros.h:30
std::enable_if<!std::is_same< ValueType, storm::RationalFunction >::value, std::unique_ptr< storm::modelchecker::CheckResult > >::type verifyWithAbstractionRefinementEngine(storm::Environment const &env, storm::storage::SymbolicModelDescription const &model, storm::modelchecker::CheckTask< storm::logic::Formula, ValueType > const &task, AbstractionRefinementOptions const &options=AbstractionRefinementOptions())
std::vector< std::vector< storm::expressions::Expression > > injectedRefinementPredicates
AbstractionRefinementOptions(std::vector< storm::expressions::Expression > &&constraints, std::vector< std::vector< storm::expressions::Expression > > &&injectedRefinementPredicates)
std::vector< storm::expressions::Expression > constraints