7template<
typename ValueType>
9 std::vector<storm::jani::Property>
const& properties,
10 std::function<std::unique_ptr<storm::modelchecker::CheckResult>(std::shared_ptr<storm::logic::Formula const>
const& formula)>
const& verificationCallback,
11 std::function<
void(std::unique_ptr<storm::modelchecker::CheckResult>
const&)>
const& postprocessingCallback) {
12 for (
auto const& property : properties) {
14 STORM_LOG_THROW(property.getRawFormula()->isOperatorFormula(), storm::exceptions::NotSupportedException,
15 "We only support operator formulas (P=?, R=?, etc).");
16 STORM_LOG_THROW(!property.getRawFormula()->asOperatorFormula().hasBound(), storm::exceptions::NotSupportedException,
17 "We only support unbounded operator formulas (P=?, R=?, etc).");
19 std::unique_ptr<storm::modelchecker::CheckResult> result = verificationCallback(property.getRawFormula());
22 postprocessingCallback(result);
26template<
typename ValueType>
30 [&model](std::shared_ptr<storm::logic::Formula const>
const& formula) {
31 std::unique_ptr<storm::modelchecker::CheckResult> result =
32 storm::api::verifyWithSparseEngine<ValueType>(model, storm::api::createTask<ValueType>(formula, true));
34 result->filter(storm::modelchecker::ExplicitQualitativeCheckResult<ValueType>(model->getInitialStates()));
38 [&model](std::unique_ptr<storm::modelchecker::CheckResult>
const& result) {
41 auto dtmc = model->template as<storm::models::sparse::Dtmc<ValueType>>();
42 std::optional<ValueType> rationalFunction = result->asExplicitQuantitativeCheckResult<ValueType>()[*model->getInitialStates().begin()];
46 auto ctmc = model->template as<storm::models::sparse::Ctmc<ValueType>>();
47 std::optional<ValueType> rationalFunction = result->asExplicitQuantitativeCheckResult<ValueType>()[*model->getInitialStates().begin()];
54template<storm::dd::DdType DdType,
typename ValueType>
59 [&model](std::shared_ptr<storm::logic::Formula const>
const& formula) {
60 std::unique_ptr<storm::modelchecker::CheckResult> result =
61 storm::api::verifyWithDdEngine<DdType, ValueType>(model, storm::api::createTask<ValueType>(formula, true));
63 result->filter(storm::modelchecker::SymbolicQualitativeCheckResult<DdType>(model->getReachableStates(), model->getInitialStates()));
67 [&model](std::unique_ptr<storm::modelchecker::CheckResult>
const& result) {
70 STORM_LOG_WARN(
"For symbolic engines, we currently do not support collecting graph-preserving constraints.");
71 std::optional<ValueType> rationalFunction = result->asSymbolicQuantitativeCheckResult<DdType, ValueType>().sum();
Class to collect constraints on parametric Markov chains.
Base class for all sparse models.
Base class for all symbolic models.
A class that provides convenience operations to display run times.
void stop()
Stop stopwatch and add measured time to total time.
#define STORM_LOG_WARN(message)
#define STORM_LOG_THROW(cond, exception, message)
void exportParametricResultToFile(std::optional< ValueType >, storm::OptionalRef< storm::analysis::ConstraintCollector< ValueType > const > const &, std::string const &)
void printModelCheckingProperty(storm::jani::Property const &property)
void computeSolutionFunctionsWithSymbolicEngine(std::shared_ptr< storm::models::symbolic::Model< DdType, ValueType > > const &model, cli::SymbolicInput const &input)
void verifyProperties(std::vector< storm::jani::Property > const &properties, std::function< std::unique_ptr< storm::modelchecker::CheckResult >(std::shared_ptr< storm::logic::Formula const > const &formula)> const &verificationCallback, std::function< void(std::unique_ptr< storm::modelchecker::CheckResult > const &)> const &postprocessingCallback)
void printInitialStatesResult(std::unique_ptr< storm::modelchecker::CheckResult > const &result, storm::utility::Stopwatch *watch, const storm::utility::parametric::Valuation< ValueType > *valuation)
void computeSolutionFunctionsWithSparseEngine(std::shared_ptr< storm::models::sparse::Model< ValueType > > const &model, cli::SymbolicInput const &input)
SettingsType const & getModule()
Get module.
constexpr NullRefType NullRef