Storm
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
SparseMarkovAutomatonCslModelChecker.cpp
Go to the documentation of this file.
2
18
19namespace storm {
20namespace modelchecker {
21template<typename SparseMarkovAutomatonModelType>
23 : SparsePropositionalModelChecker<SparseMarkovAutomatonModelType>(model) {
24 // Intentionally left empty.
25}
26
27template<typename ModelType>
29 bool* requiresSingleInitialState) {
30 auto singleObjectiveFragment = storm::logic::csrlstar()
34 .setTimeAllowed(true)
39 auto multiObjectiveFragment =
42 singleObjectiveFragment.setBoundedUntilFormulasAllowed(false).setCumulativeRewardFormulasAllowed(false);
44 }
45 if (checkTask.getFormula().isInFragment(singleObjectiveFragment)) {
46 return true;
47 } else if (checkTask.isOnlyInitialStatesRelevantSet() && checkTask.getFormula().isInFragment(multiObjectiveFragment)) {
48 if (requiresSingleInitialState) {
49 *requiresSingleInitialState = true;
50 }
51 return true;
52 }
53 return false;
54}
55
56template<typename SparseMarkovAutomatonModelType>
58 bool requiresSingleInitialState = false;
59 if (canHandleStatic(checkTask, &requiresSingleInitialState)) {
60 return !requiresSingleInitialState || this->getModel().getInitialStates().getNumberOfSetBits() == 1;
61 } else {
62 return false;
63 }
64}
65
66template<typename SparseMarkovAutomatonModelType>
69 storm::logic::BoundedUntilFormula const& pathFormula = checkTask.getFormula();
70 STORM_LOG_THROW(checkTask.isOptimizationDirectionSet(), storm::exceptions::InvalidPropertyException,
71 "Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
72 STORM_LOG_THROW(this->getModel().isClosed(), storm::exceptions::InvalidPropertyException,
73 "Unable to compute time-bounded reachability probabilities in non-closed Markov automaton.");
74 std::unique_ptr<CheckResult> rightResultPointer = this->check(env, pathFormula.getRightSubformula());
75 ExplicitQualitativeCheckResult const& rightResult = rightResultPointer->asExplicitQualitativeCheckResult();
76
77 std::unique_ptr<CheckResult> leftResultPointer = this->check(env, pathFormula.getLeftSubformula());
78 ExplicitQualitativeCheckResult const& leftResult = leftResultPointer->asExplicitQualitativeCheckResult();
79
80 STORM_LOG_THROW(pathFormula.getTimeBoundReference().isTimeBound(), storm::exceptions::NotImplementedException,
81 "Currently step-bounded and reward-bounded properties on MAs are not supported.");
82 double lowerBound = 0;
83 double upperBound = 0;
84 if (pathFormula.hasLowerBound()) {
85 lowerBound = pathFormula.getLowerBound<double>();
86 }
87 if (pathFormula.hasUpperBound()) {
88 upperBound = pathFormula.getNonStrictUpperBound<double>();
89 } else {
90 upperBound = storm::utility::infinity<double>();
91 }
92
94 env, storm::solver::SolveGoal<ValueType>(this->getModel(), checkTask), this->getModel().getTransitionMatrix(), this->getModel().getExitRates(),
95 this->getModel().getMarkovianStates(), leftResult.getTruthValuesVector(), rightResult.getTruthValuesVector(), std::make_pair(lowerBound, upperBound));
96 return std::unique_ptr<CheckResult>(new ExplicitQuantitativeCheckResult<ValueType>(std::move(result)));
97}
98
99template<typename SparseMarkovAutomatonModelType>
102 storm::logic::NextFormula const& pathFormula = checkTask.getFormula();
103 STORM_LOG_THROW(checkTask.isOptimizationDirectionSet(), storm::exceptions::InvalidPropertyException,
104 "Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
105 std::unique_ptr<CheckResult> subResultPointer = this->check(env, pathFormula.getSubformula());
106 ExplicitQualitativeCheckResult const& subResult = subResultPointer->asExplicitQualitativeCheckResult();
108 env, checkTask.getOptimizationDirection(), this->getModel().getTransitionMatrix(), subResult.getTruthValuesVector());
109 return std::unique_ptr<CheckResult>(new ExplicitQuantitativeCheckResult<ValueType>(std::move(numericResult)));
110}
111
112template<typename SparseMarkovAutomatonModelType>
115 storm::logic::GloballyFormula const& pathFormula = checkTask.getFormula();
116 STORM_LOG_THROW(checkTask.isOptimizationDirectionSet(), storm::exceptions::InvalidPropertyException,
117 "Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
118 std::unique_ptr<CheckResult> subResultPointer = this->check(env, pathFormula.getSubformula());
119 ExplicitQualitativeCheckResult const& subResult = subResultPointer->asExplicitQualitativeCheckResult();
121 env, storm::solver::SolveGoal<ValueType>(this->getModel(), checkTask), this->getModel().getTransitionMatrix(),
122 this->getModel().getBackwardTransitions(), subResult.getTruthValuesVector(), checkTask.isQualitativeSet(), checkTask.isProduceSchedulersSet());
123 std::unique_ptr<CheckResult> result(new ExplicitQuantitativeCheckResult<ValueType>(std::move(ret.values)));
124 if (checkTask.isProduceSchedulersSet() && ret.scheduler) {
125 result->asExplicitQuantitativeCheckResult<ValueType>().setScheduler(std::move(ret.scheduler));
126 }
127 return result;
128}
129
130template<typename SparseMarkovAutomatonModelType>
133 storm::logic::UntilFormula const& pathFormula = checkTask.getFormula();
134 STORM_LOG_THROW(checkTask.isOptimizationDirectionSet(), storm::exceptions::InvalidPropertyException,
135 "Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
136 std::unique_ptr<CheckResult> leftResultPointer = this->check(env, pathFormula.getLeftSubformula());
137 std::unique_ptr<CheckResult> rightResultPointer = this->check(env, pathFormula.getRightSubformula());
138 ExplicitQualitativeCheckResult& leftResult = leftResultPointer->asExplicitQualitativeCheckResult();
139 ExplicitQualitativeCheckResult& rightResult = rightResultPointer->asExplicitQualitativeCheckResult();
140
142 env, checkTask.getOptimizationDirection(), this->getModel().getTransitionMatrix(), this->getModel().getBackwardTransitions(),
143 leftResult.getTruthValuesVector(), rightResult.getTruthValuesVector(), checkTask.isQualitativeSet(), checkTask.isProduceSchedulersSet());
144 std::unique_ptr<CheckResult> result(new ExplicitQuantitativeCheckResult<ValueType>(std::move(ret.values)));
145 if (checkTask.isProduceSchedulersSet() && ret.scheduler) {
146 result->asExplicitQuantitativeCheckResult<ValueType>().setScheduler(std::move(ret.scheduler));
147 }
148 return result;
149}
150
151template<typename SparseMarkovAutomatonModelType>
154 storm::logic::HOAPathFormula const& pathFormula = checkTask.getFormula();
155
156 storm::modelchecker::helper::SparseLTLHelper<ValueType, true> helper(this->getModel().getTransitionMatrix());
158
159 auto formulaChecker = [&](storm::logic::Formula const& formula) {
160 return this->check(env, formula)->asExplicitQualitativeCheckResult().getTruthValuesVector();
161 };
162 auto apSets = helper.computeApSets(pathFormula.getAPMapping(), formulaChecker);
163 std::vector<ValueType> numericResult = helper.computeDAProductProbabilities(env, *pathFormula.readAutomaton(), apSets);
164
165 std::unique_ptr<CheckResult> result(new ExplicitQuantitativeCheckResult<ValueType>(std::move(numericResult)));
166 if (checkTask.isProduceSchedulersSet()) {
167 result->asExplicitQuantitativeCheckResult<ValueType>().setScheduler(
168 std::make_unique<storm::storage::Scheduler<ValueType>>(helper.extractScheduler(this->getModel())));
169 }
170
171 return result;
172}
173
174template<typename SparseMarkovAutomatonModelType>
177 storm::logic::PathFormula const& pathFormula = checkTask.getFormula();
178
179 STORM_LOG_THROW(checkTask.isOptimizationDirectionSet(), storm::exceptions::InvalidPropertyException,
180 "Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
181
182 storm::modelchecker::helper::SparseLTLHelper<ValueType, true> helper(this->getModel().getTransitionMatrix());
184
185 auto formulaChecker = [&](storm::logic::Formula const& formula) {
186 return this->check(env, formula)->asExplicitQualitativeCheckResult().getTruthValuesVector();
187 };
188 std::vector<ValueType> numericResult = helper.computeLTLProbabilities(env, pathFormula, formulaChecker);
189
190 std::unique_ptr<CheckResult> result(new ExplicitQuantitativeCheckResult<ValueType>(std::move(numericResult)));
191 if (checkTask.isProduceSchedulersSet()) {
192 result->asExplicitQuantitativeCheckResult<ValueType>().setScheduler(
193 std::make_unique<storm::storage::Scheduler<ValueType>>(helper.extractScheduler(this->getModel())));
194 }
195
196 return result;
197}
198
199template<typename SparseMarkovAutomatonModelType>
202 storm::logic::EventuallyFormula const& eventuallyFormula = checkTask.getFormula();
203 STORM_LOG_THROW(checkTask.isOptimizationDirectionSet(), storm::exceptions::InvalidPropertyException,
204 "Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
205 STORM_LOG_THROW(this->getModel().isClosed(), storm::exceptions::InvalidPropertyException,
206 "Unable to compute reachability rewards in non-closed Markov automaton.");
207 std::unique_ptr<CheckResult> subResultPointer = this->check(env, eventuallyFormula.getSubformula());
208 ExplicitQualitativeCheckResult const& subResult = subResultPointer->asExplicitQualitativeCheckResult();
209 auto rewardModel = storm::utility::createFilteredRewardModel(this->getModel(), checkTask);
210
212 env, checkTask.getOptimizationDirection(), this->getModel().getTransitionMatrix(), this->getModel().getBackwardTransitions(),
213 this->getModel().getExitRates(), this->getModel().getMarkovianStates(), rewardModel.get(), subResult.getTruthValuesVector(),
214 checkTask.isProduceSchedulersSet());
215 std::unique_ptr<CheckResult> result(new ExplicitQuantitativeCheckResult<ValueType>(std::move(ret.values)));
216 if (checkTask.isProduceSchedulersSet() && ret.scheduler) {
217 result->asExplicitQuantitativeCheckResult<ValueType>().setScheduler(std::move(ret.scheduler));
218 }
219 return result;
220}
221
222template<typename SparseMarkovAutomatonModelType>
225 STORM_LOG_THROW(checkTask.isOptimizationDirectionSet(), storm::exceptions::InvalidPropertyException,
226 "Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
227 STORM_LOG_THROW(this->getModel().isClosed(), storm::exceptions::InvalidPropertyException,
228 "Unable to compute reachability rewards in non-closed Markov automaton.");
229 auto rewardModel = storm::utility::createFilteredRewardModel(this->getModel(), checkTask);
230
232 env, checkTask.getOptimizationDirection(), this->getModel().getTransitionMatrix(), this->getModel().getBackwardTransitions(),
233 this->getModel().getExitRates(), this->getModel().getMarkovianStates(), rewardModel.get(), checkTask.isProduceSchedulersSet());
234 std::unique_ptr<CheckResult> result(new ExplicitQuantitativeCheckResult<ValueType>(std::move(ret.values)));
235 if (checkTask.isProduceSchedulersSet() && ret.scheduler) {
236 result->asExplicitQuantitativeCheckResult<ValueType>().setScheduler(std::move(ret.scheduler));
237 }
238 return result;
239}
240
241template<typename SparseMarkovAutomatonModelType>
244 storm::logic::StateFormula const& stateFormula = checkTask.getFormula();
245 STORM_LOG_THROW(checkTask.isOptimizationDirectionSet(), storm::exceptions::InvalidPropertyException,
246 "Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
247 STORM_LOG_THROW(this->getModel().isClosed(), storm::exceptions::InvalidPropertyException,
248 "Unable to compute long-run average in non-closed Markov automaton.");
249 std::unique_ptr<CheckResult> subResultPointer = this->check(env, stateFormula);
250 ExplicitQualitativeCheckResult const& subResult = subResultPointer->asExplicitQualitativeCheckResult();
251
253 this->getModel().getTransitionMatrix(), this->getModel().getMarkovianStates(), this->getModel().getExitRates());
255 auto values = helper.computeLongRunAverageProbabilities(env, subResult.getTruthValuesVector());
256
257 std::unique_ptr<CheckResult> result(new ExplicitQuantitativeCheckResult<ValueType>(std::move(values)));
258 if (checkTask.isProduceSchedulersSet()) {
259 result->asExplicitQuantitativeCheckResult<ValueType>().setScheduler(std::make_unique<storm::storage::Scheduler<ValueType>>(helper.extractScheduler()));
260 }
261 return result;
262}
263
264template<typename SparseMarkovAutomatonModelType>
267 STORM_LOG_THROW(checkTask.isOptimizationDirectionSet(), storm::exceptions::InvalidPropertyException,
268 "Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
269 STORM_LOG_THROW(this->getModel().isClosed(), storm::exceptions::InvalidPropertyException,
270 "Unable to compute long run average rewards in non-closed Markov automaton.");
271 auto rewardModel = storm::utility::createFilteredRewardModel(this->getModel(), checkTask);
272
274 this->getModel().getTransitionMatrix(), this->getModel().getMarkovianStates(), this->getModel().getExitRates());
276 auto values = helper.computeLongRunAverageRewards(env, rewardModel.get());
277
278 std::unique_ptr<CheckResult> result(new ExplicitQuantitativeCheckResult<ValueType>(std::move(values)));
279 if (checkTask.isProduceSchedulersSet()) {
280 result->asExplicitQuantitativeCheckResult<ValueType>().setScheduler(std::make_unique<storm::storage::Scheduler<ValueType>>(helper.extractScheduler()));
281 }
282 return result;
283}
284
285template<typename SparseMarkovAutomatonModelType>
288 storm::logic::EventuallyFormula const& eventuallyFormula = checkTask.getFormula();
289 STORM_LOG_THROW(checkTask.isOptimizationDirectionSet(), storm::exceptions::InvalidPropertyException,
290 "Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
291 STORM_LOG_THROW(this->getModel().isClosed(), storm::exceptions::InvalidPropertyException,
292 "Unable to compute expected times in non-closed Markov automaton.");
293 std::unique_ptr<CheckResult> subResultPointer = this->check(env, eventuallyFormula.getSubformula());
295
297 env, checkTask.getOptimizationDirection(), this->getModel().getTransitionMatrix(), this->getModel().getBackwardTransitions(),
298 this->getModel().getExitRates(), this->getModel().getMarkovianStates(), subResult.getTruthValuesVector(), checkTask.isProduceSchedulersSet());
299 std::unique_ptr<CheckResult> result(new ExplicitQuantitativeCheckResult<ValueType>(std::move(ret.values)));
300 if (checkTask.isProduceSchedulersSet() && ret.scheduler) {
301 result->asExplicitQuantitativeCheckResult<ValueType>().setScheduler(std::move(ret.scheduler));
302 }
303 return result;
304}
305
306template<typename SparseMarkovAutomatonModelType>
311
314} // namespace modelchecker
315} // namespace storm
Formula const & getRightSubformula() const
Formula const & getLeftSubformula() const
TimeBoundReference const & getTimeBoundReference(unsigned i=0) const
ValueType getNonStrictUpperBound(unsigned i=0) const
storm::expressions::Expression const & getLowerBound(unsigned i=0) const
FragmentSpecification & setRewardAccumulationAllowed(bool newValue)
FragmentSpecification & setTimeBoundedUntilFormulasAllowed(bool newValue)
FragmentSpecification & setCumulativeRewardFormulasAllowed(bool newValue)
FragmentSpecification & setTotalRewardFormulasAllowed(bool newValue)
FragmentSpecification & setReachabilityRewardFormulasAllowed(bool newValue)
FragmentSpecification & setLongRunAverageRewardFormulasAllowed(bool newValue)
FragmentSpecification & setLongRunAverageProbabilitiesAllowed(bool newValue)
FragmentSpecification & setRewardOperatorsAllowed(bool newValue)
FragmentSpecification & setBoundedUntilFormulasAllowed(bool newValue)
FragmentSpecification & setInstantaneousFormulasAllowed(bool newValue)
FragmentSpecification & setTimeAllowed(bool newValue)
const ap_to_formula_map & getAPMapping() const
std::shared_ptr< storm::automata::DeterministicAutomaton > readAutomaton() const
Formula const & getSubformula() const
ExplicitQualitativeCheckResult & asExplicitQualitativeCheckResult()
bool isOptimizationDirectionSet() const
Retrieves whether an optimization direction was set.
Definition CheckTask.h:147
bool isQualitativeSet() const
Retrieves whether the computation only needs to be performed qualitatively, because the values will o...
Definition CheckTask.h:257
FormulaType const & getFormula() const
Retrieves the formula from this task.
Definition CheckTask.h:140
bool isProduceSchedulersSet() const
Retrieves whether scheduler(s) are to be produced (if supported).
Definition CheckTask.h:279
storm::OptimizationDirection const & getOptimizationDirection() const
Retrieves the optimization direction (if set).
Definition CheckTask.h:154
bool isOnlyInitialStatesRelevantSet() const
Retrieves whether only the initial states are relevant in the computation.
Definition CheckTask.h:204
virtual std::unique_ptr< CheckResult > computeBoundedUntilProbabilities(Environment const &env, CheckTask< storm::logic::BoundedUntilFormula, ValueType > const &checkTask) override
static bool canHandleStatic(CheckTask< storm::logic::Formula, ValueType > const &checkTask, bool *requiresSingleInitialState=nullptr)
Returns false, if this task can certainly not be handled by this model checker (independent of the co...
virtual std::unique_ptr< CheckResult > computeUntilProbabilities(Environment const &env, CheckTask< storm::logic::UntilFormula, ValueType > const &checkTask) override
virtual std::unique_ptr< CheckResult > computeLTLProbabilities(Environment const &env, CheckTask< storm::logic::PathFormula, ValueType > const &checkTask) override
virtual std::unique_ptr< CheckResult > computeLongRunAverageProbabilities(Environment const &env, CheckTask< storm::logic::StateFormula, ValueType > const &checkTask) override
virtual std::unique_ptr< CheckResult > checkMultiObjectiveFormula(Environment const &env, CheckTask< storm::logic::MultiObjectiveFormula, ValueType > const &checkTask) override
SparseMarkovAutomatonCslModelChecker(SparseMarkovAutomatonModelType const &model)
virtual bool canHandle(CheckTask< storm::logic::Formula, ValueType > const &checkTask) const override
virtual std::unique_ptr< CheckResult > computeGloballyProbabilities(Environment const &env, CheckTask< storm::logic::GloballyFormula, ValueType > const &checkTask) override
virtual std::unique_ptr< CheckResult > computeTotalRewards(Environment const &env, CheckTask< storm::logic::TotalRewardFormula, ValueType > const &checkTask) override
virtual std::unique_ptr< CheckResult > computeNextProbabilities(Environment const &env, CheckTask< storm::logic::NextFormula, ValueType > const &checkTask) override
virtual std::unique_ptr< CheckResult > computeHOAPathProbabilities(Environment const &env, CheckTask< storm::logic::HOAPathFormula, ValueType > const &checkTask) override
virtual std::unique_ptr< CheckResult > computeLongRunAverageRewards(Environment const &env, CheckTask< storm::logic::LongRunAverageRewardFormula, ValueType > const &checkTask) override
virtual std::unique_ptr< CheckResult > computeReachabilityTimes(Environment const &env, CheckTask< storm::logic::EventuallyFormula, ValueType > const &checkTask) override
virtual std::unique_ptr< CheckResult > computeReachabilityRewards(Environment const &env, CheckTask< storm::logic::EventuallyFormula, ValueType > const &checkTask) override
std::vector< ValueType > computeLongRunAverageRewards(Environment const &env, storm::models::sparse::StandardRewardModel< ValueType > const &rewardModel)
Computes the long run average rewards, i.e., the average reward collected per time unit.
std::vector< ValueType > computeLongRunAverageProbabilities(Environment const &env, storm::storage::BitVector const &psiStates)
Computes the long run average probabilities, i.e., the fraction of the time we are in a psiState.
Helper class for LTL model checking.
std::vector< ValueType > computeLTLProbabilities(Environment const &env, storm::logic::PathFormula const &formula, CheckFormulaCallback const &formulaChecker)
Computes the LTL probabilities.
storm::storage::Scheduler< ValueType > extractScheduler(storm::models::sparse::Model< ValueType > const &model)
static std::map< std::string, storm::storage::BitVector > computeApSets(std::map< std::string, std::shared_ptr< storm::logic::Formula const > > const &extracted, CheckFormulaCallback const &formulaChecker)
Computes the states that are satisfying the AP.
std::vector< ValueType > computeDAProductProbabilities(Environment const &env, storm::automata::DeterministicAutomaton const &da, std::map< std::string, storm::storage::BitVector > &apSatSets)
Computes the (maximizing) probabilities for the constructed DA product.
static MDPSparseModelCheckingHelperReturnType< ValueType > computeTotalRewards(Environment const &env, OptimizationDirection dir, storm::storage::SparseMatrix< ValueType > const &transitionMatrix, storm::storage::SparseMatrix< ValueType > const &backwardTransitions, std::vector< ValueType > const &exitRateVector, storm::storage::BitVector const &markovianStates, RewardModelType const &rewardModel, bool produceScheduler)
static MDPSparseModelCheckingHelperReturnType< ValueType > computeReachabilityRewards(Environment const &env, OptimizationDirection dir, storm::storage::SparseMatrix< ValueType > const &transitionMatrix, storm::storage::SparseMatrix< ValueType > const &backwardTransitions, std::vector< ValueType > const &exitRateVector, storm::storage::BitVector const &markovianStates, RewardModelType const &rewardModel, storm::storage::BitVector const &psiStates, bool produceScheduler)
static MDPSparseModelCheckingHelperReturnType< ValueType > computeUntilProbabilities(Environment const &env, OptimizationDirection dir, storm::storage::SparseMatrix< ValueType > const &transitionMatrix, storm::storage::SparseMatrix< ValueType > const &backwardTransitions, storm::storage::BitVector const &phiStates, storm::storage::BitVector const &psiStates, bool qualitative, bool produceScheduler)
static MDPSparseModelCheckingHelperReturnType< ValueType > computeReachabilityTimes(Environment const &env, OptimizationDirection dir, storm::storage::SparseMatrix< ValueType > const &transitionMatrix, storm::storage::SparseMatrix< ValueType > const &backwardTransitions, std::vector< ValueType > const &exitRateVector, storm::storage::BitVector const &markovianStates, storm::storage::BitVector const &psiStates, bool produceScheduler)
static std::vector< ValueType > computeBoundedUntilProbabilities(Environment const &env, storm::solver::SolveGoal< ValueType > &&goal, storm::storage::SparseMatrix< ValueType > const &transitionMatrix, std::vector< ValueType > const &exitRateVector, storm::storage::BitVector const &markovianStates, storm::storage::BitVector const &phiStates, storm::storage::BitVector const &psiStates, std::pair< double, double > const &boundsPair)
static MDPSparseModelCheckingHelperReturnType< SolutionType > computeGloballyProbabilities(Environment const &env, storm::solver::SolveGoal< ValueType, SolutionType > &&goal, storm::storage::SparseMatrix< ValueType > const &transitionMatrix, storm::storage::SparseMatrix< ValueType > const &backwardTransitions, storm::storage::BitVector const &psiStates, bool qualitative, bool produceScheduler, bool useMecBasedTechnique=false)
static std::vector< SolutionType > computeNextProbabilities(Environment const &env, OptimizationDirection dir, storm::storage::SparseMatrix< ValueType > const &transitionMatrix, storm::storage::BitVector const &nextStates)
Helper class for model checking queries that depend on the long run behavior of the (nondeterministic...
This class defines which action is chosen in a particular state of a non-deterministic model.
Definition Scheduler.h:18
#define STORM_LOG_THROW(cond, exception, message)
Definition macros.h:30
FragmentSpecification csrlstar()
FragmentSpecification multiObjective()
void setInformationFromCheckTaskNondeterministic(HelperType &helper, storm::modelchecker::CheckTask< FormulaType, typename ModelType::ValueType > const &checkTask, ModelType const &model)
Forwards relevant information stored in the given CheckTask to the given helper.
std::unique_ptr< CheckResult > performMultiObjectiveModelChecking(Environment const &env, SparseModelType const &model, storm::logic::MultiObjectiveFormula const &formula)
FilteredRewardModel< RewardModelType > createFilteredRewardModel(RewardModelType const &baseRewardModel, storm::logic::RewardAccumulation const &acc, bool isDiscreteTimeModel)
LabParser.cpp.
Definition cli.cpp:18