Storm 1.14.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
solutionFunctions.cpp
Go to the documentation of this file.
2
11#include "storm/logic/Formula.h"
25
26namespace storm::pars {
27
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).");
39 storm::utility::Stopwatch watch(true);
40 std::unique_ptr<storm::modelchecker::CheckResult> result = verificationCallback(property.getRawFormula());
41 watch.stop();
43 postprocessingCallback(result);
44 }
45}
46
47template<typename ValueType>
50 input.properties,
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));
54 if (result) {
55 result->filter(storm::modelchecker::ExplicitQualitativeCheckResult<ValueType>(model->getInitialStates()));
56 }
57 return result;
58 },
59 [&model](std::unique_ptr<storm::modelchecker::CheckResult> const& result) {
61 if (parametricSettings.exportResultToFile() && model->isOfType(storm::models::ModelType::Dtmc)) {
62 auto dtmc = model->template as<storm::models::sparse::Dtmc<ValueType>>();
63 std::optional<ValueType> rationalFunction = result->asExplicitQuantitativeCheckResult<ValueType>()[*model->getInitialStates().begin()];
64 auto constraintCollector = storm::analysis::ConstraintCollector<ValueType>(*dtmc);
65 api::exportParametricResultToFile<ValueType>(rationalFunction, constraintCollector, parametricSettings.exportResultPath());
66 } else if (parametricSettings.exportResultToFile() && model->isOfType(storm::models::ModelType::Ctmc)) {
67 auto ctmc = model->template as<storm::models::sparse::Ctmc<ValueType>>();
68 std::optional<ValueType> rationalFunction = result->asExplicitQuantitativeCheckResult<ValueType>()[*model->getInitialStates().begin()];
69 auto constraintCollector = storm::analysis::ConstraintCollector<ValueType>(*ctmc);
70 api::exportParametricResultToFile<ValueType>(rationalFunction, constraintCollector, parametricSettings.exportResultPath());
71 }
72 });
73}
74
75template<storm::dd::DdType DdType, typename ValueType>
77 storm::cli::SymbolicInput const& input) {
79 input.properties,
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));
83 if (result) {
84 result->filter(storm::modelchecker::SymbolicQualitativeCheckResult<DdType>(model->getReachableStates(), model->getInitialStates()));
85 }
86 return result;
87 },
88 [&model](std::unique_ptr<storm::modelchecker::CheckResult> const& result) {
90 if (parametricSettings.exportResultToFile() && model->isOfType(storm::models::ModelType::Dtmc)) {
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());
94 }
95 });
96}
97
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&);
102
105
108
109} // namespace storm::pars
Class to collect constraints on parametric Markov chains.
Base class for all sparse models.
Definition Model.h:30
Base class for all symbolic models.
Definition Model.h:42
A class that provides convenience operations to display run times.
Definition Stopwatch.h:13
void stop()
Stop stopwatch and add measured time to total time.
Definition Stopwatch.cpp:42
#define STORM_LOG_WARN(message)
Definition logging.h:28
#define STORM_LOG_THROW(cond, exception, message)
Definition macros.h:28
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)
Definition export.cpp:15
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)
Definition print.cpp:11
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
Definition OptionalRef.h:31
std::vector< storm::jani::Property > properties