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());
21 printInitialStatesResult<ValueType>(result, &watch);
22 postprocessingCallback(result);
28 verifyProperties<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(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()];
44 storm::api::exportParametricResultToFile<ValueType>(rationalFunction, constraintCollector, parametricSettings.exportResultPath());
46 auto ctmc = model->template as<storm::models::sparse::Ctmc<ValueType>>();
47 std::optional<ValueType> rationalFunction = result->asExplicitQuantitativeCheckResult<ValueType>()[*model->getInitialStates().begin()];
49 storm::api::exportParametricResultToFile<ValueType>(rationalFunction, constraintCollector, parametricSettings.exportResultPath());
57 verifyProperties<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();
72 storm::api::exportParametricResultToFile<ValueType>(rationalFunction,
storm::NullRef, parametricSettings.exportResultPath());
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)