28template<
typename ValueType>
30 std::vector<storm::jani::Property>
const& properties,
31 std::function<std::unique_ptr<storm::modelchecker::CheckResult>(std::shared_ptr<storm::logic::Formula const>
const& formula)>
const& verificationCallback,
32 std::function<
void(std::unique_ptr<storm::modelchecker::CheckResult>
const&)>
const& postprocessingCallback) {
33 for (
auto const& property : properties) {
35 STORM_LOG_THROW(property.getRawFormula()->isOperatorFormula(), storm::exceptions::NotSupportedException,
36 "We only support operator formulas (P=?, R=?, etc).");
37 STORM_LOG_THROW(!property.getRawFormula()->asOperatorFormula().hasBound(), storm::exceptions::NotSupportedException,
38 "We only support unbounded operator formulas (P=?, R=?, etc).");
40 std::unique_ptr<storm::modelchecker::CheckResult> result = verificationCallback(property.getRawFormula());
43 postprocessingCallback(result);
47template<
typename ValueType>
51 [&model](std::shared_ptr<storm::logic::Formula const>
const& formula) {
52 std::unique_ptr<storm::modelchecker::CheckResult> result =
53 storm::api::verifyWithSparseEngine<ValueType>(model, storm::api::createTask<ValueType>(formula, true));
55 result->filter(storm::modelchecker::ExplicitQualitativeCheckResult<ValueType>(model->getInitialStates()));
59 [&model](std::unique_ptr<storm::modelchecker::CheckResult>
const& result) {
62 auto dtmc = model->template as<storm::models::sparse::Dtmc<ValueType>>();
63 std::optional<ValueType> rationalFunction = result->asExplicitQuantitativeCheckResult<ValueType>()[*model->getInitialStates().begin()];
67 auto ctmc = model->template as<storm::models::sparse::Ctmc<ValueType>>();
68 std::optional<ValueType> rationalFunction = result->asExplicitQuantitativeCheckResult<ValueType>()[*model->getInitialStates().begin()];
75template<storm::dd::DdType DdType,
typename ValueType>
80 [&model](std::shared_ptr<storm::logic::Formula const>
const& formula) {
81 std::unique_ptr<storm::modelchecker::CheckResult> result =
82 storm::api::verifyWithDdEngine<DdType, ValueType>(model, storm::api::createTask<ValueType>(formula, true));
84 result->filter(storm::modelchecker::SymbolicQualitativeCheckResult<DdType>(model->getReachableStates(), model->getInitialStates()));
88 [&model](std::unique_ptr<storm::modelchecker::CheckResult>
const& result) {
91 STORM_LOG_WARN(
"For symbolic engines, we currently do not support collecting graph-preserving constraints.");
92 std::optional<ValueType> rationalFunction = result->asSymbolicQuantitativeCheckResult<DdType, ValueType>().sum();
93 api::exportParametricResultToFile<ValueType>(rationalFunction,
storm::NullRef, parametricSettings.exportResultPath());
99 std::vector<storm::jani::Property>
const&,
100 std::function<std::unique_ptr<storm::modelchecker::CheckResult>(std::shared_ptr<storm::logic::Formula const>
const&)>
const&,
101 std::function<
void(std::unique_ptr<storm::modelchecker::CheckResult>
const&)>
const&);
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 printModelCheckingProperty(storm::jani::Property const &property)
void exportParametricResultToFile(std::optional< storm::RationalFunction > result, storm::OptionalRef< storm::analysis::ConstraintCollector< storm::RationalFunction > const > const &constraintCollector, std::string const &path)
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, storm::cli::SymbolicInput const &input)
void computeSolutionFunctionsWithSymbolicEngine(std::shared_ptr< storm::models::symbolic::Model< DdType, ValueType > > const &model, storm::cli::SymbolicInput const &input)
SettingsType const & getModule()
Get module.
constexpr NullRefType NullRef