25namespace modelchecker {
 
   26template<
typename ModelType>
 
   31template<
typename ModelType>
 
   41        if (requiresSingleInitialState) {
 
   42            *requiresSingleInitialState = 
true;
 
 
   49template<
typename ModelType>
 
   51    bool requiresSingleInitialState = 
false;
 
   52    if (canHandleStatic(checkTask, &requiresSingleInitialState)) {
 
   53        return !requiresSingleInitialState || this->getModel().getInitialStates().getNonZeroCount() == 1;
 
 
   59template<
typename ModelType>
 
   64                    "Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
 
   65    std::unique_ptr<CheckResult> leftResultPointer = this->check(env, pathFormula.
getLeftSubformula());
 
   66    std::unique_ptr<CheckResult> rightResultPointer = this->check(env, pathFormula.
getRightSubformula());
 
 
   74template<
typename ModelType>
 
   79                    "Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
 
   80    std::unique_ptr<CheckResult> subResultPointer = this->check(env, pathFormula.
getSubformula());
 
 
   87template<
typename ModelType>
 
   92                    "Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
 
   93    std::unique_ptr<CheckResult> subResultPointer = this->check(env, pathFormula.
getSubformula());
 
 
   99template<
typename ModelType>
 
  104                    "Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
 
  106                    "Formula needs to have (a single) upper time bound, and no lower bound.");
 
  108    std::unique_ptr<CheckResult> leftResultPointer = this->check(env, pathFormula.
getLeftSubformula());
 
  109    std::unique_ptr<CheckResult> rightResultPointer = this->check(env, pathFormula.
getRightSubformula());
 
 
  117template<
typename ModelType>
 
  122                    "Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
 
  123    STORM_LOG_THROW(rewardPathFormula.
hasIntegerBound(), storm::exceptions::InvalidPropertyException, 
"Formula needs to have a discrete time bound.");
 
  126        env, checkTask.
getOptimizationDirection(), this->getModel(), this->getModel().getTransitionMatrix(), rewardModel.get(),
 
 
  130template<
typename ModelType>
 
  135                    "Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
 
  136    STORM_LOG_THROW(rewardPathFormula.
hasIntegerBound(), storm::exceptions::InvalidPropertyException, 
"Formula needs to have a discrete time bound.");
 
  140        rewardPathFormula.
getBound<uint64_t>());
 
 
  143template<
typename ModelType>
 
  148                    "Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
 
  149    std::unique_ptr<CheckResult> subResultPointer = this->check(env, eventuallyFormula.
getSubformula());
 
  153        env, checkTask.
getOptimizationDirection(), this->getModel(), this->getModel().getTransitionMatrix(), rewardModel.get(),
 
 
  157template<
typename ModelType>
 
  162                    "Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
 
  163    std::unique_ptr<CheckResult> subResultPointer = this->check(env, eventuallyFormula.
getSubformula());
 
 
  170template<
typename ModelType>
 
  174    std::unique_ptr<CheckResult> explicitResult =
 
  178    if (explicitResult->isExplicitQualitativeCheckResult()) {
 
  179        if (explicitResult->asExplicitQualitativeCheckResult()[*sparseModel->getInitialStates().begin()]) {
 
  181                this->getModel().getReachableStates(), this->getModel().getInitialStates(), this->getModel().getManager().getBddOne()));
 
  184                this->getModel().getReachableStates(), this->getModel().getInitialStates(), this->getModel().getManager().getBddZero()));
 
  186    } 
else if (explicitResult->isExplicitQuantitativeCheckResult()) {
 
  187        ValueType const& res = explicitResult->template asExplicitQuantitativeCheckResult<ValueType>()[*sparseModel->getInitialStates().begin()];
 
  189            this->getModel().getReachableStates(), this->getModel().getInitialStates(), this->getModel().getManager().
template getConstant<ValueType>(res)));
 
  190    } 
else if (explicitResult->isExplicitParetoCurveCheckResult()) {
 
  195        STORM_LOG_THROW(
false, storm::exceptions::UnexpectedException, 
"The obtained checkresult has an unexpected type.");
 
 
FragmentSpecification & setRewardAccumulationAllowed(bool newValue)
 
FragmentSpecification & setTimeOperatorsAllowed(bool newValue)
 
FragmentSpecification & setCumulativeRewardFormulasAllowed(bool newValue)
 
FragmentSpecification & setLongRunAverageRewardFormulasAllowed(bool newValue)
 
FragmentSpecification & setReachbilityTimeFormulasAllowed(bool newValue)
 
SymbolicQualitativeCheckResult< Type > & asSymbolicQualitativeCheckResult()
 
bool isOptimizationDirectionSet() const
Retrieves whether an optimization direction was set.
 
bool isRewardModelSet() const
Retrieves whether a reward model was set.
 
bool isQualitativeSet() const
Retrieves whether the computation only needs to be performed qualitatively, because the values will o...
 
std::string const & getRewardModel() const
Retrieves the reward model over which to perform the checking (if set).
 
FormulaType const & getFormula() const
Retrieves the formula from this task.
 
bool isProduceSchedulersSet() const
Retrieves whether scheduler(s) are to be produced (if supported).
 
storm::OptimizationDirection const & getOptimizationDirection() const
Retrieves the optimization direction (if set).
 
bool isOnlyInitialStatesRelevantSet() const
Retrieves whether only the initial states are relevant in the computation.
 
virtual std::unique_ptr< CheckResult > computeBoundedUntilProbabilities(Environment const &env, CheckTask< storm::logic::BoundedUntilFormula, ValueType > const &checkTask) override
 
virtual std::unique_ptr< CheckResult > computeInstantaneousRewards(Environment const &env, CheckTask< storm::logic::InstantaneousRewardFormula, ValueType > const &checkTask) override
 
virtual std::unique_ptr< CheckResult > computeGloballyProbabilities(Environment const &env, CheckTask< storm::logic::GloballyFormula, ValueType > const &checkTask) override
 
ModelType::ValueType ValueType
 
virtual std::unique_ptr< CheckResult > computeNextProbabilities(Environment const &env, CheckTask< storm::logic::NextFormula, ValueType > const &checkTask) override
 
virtual std::unique_ptr< CheckResult > computeCumulativeRewards(Environment const &env, CheckTask< storm::logic::CumulativeRewardFormula, 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...
 
HybridMdpPrctlModelChecker(ModelType const &model)
 
virtual std::unique_ptr< CheckResult > checkMultiObjectiveFormula(Environment const &env, CheckTask< storm::logic::MultiObjectiveFormula, ValueType > const &checkTask) override
 
virtual std::unique_ptr< CheckResult > computeUntilProbabilities(Environment const &env, CheckTask< storm::logic::UntilFormula, ValueType > const &checkTask) override
 
virtual std::unique_ptr< CheckResult > computeReachabilityTimes(Environment const &env, CheckTask< storm::logic::EventuallyFormula, ValueType > const &checkTask) override
 
virtual bool canHandle(CheckTask< storm::logic::Formula, ValueType > const &checkTask) const override
 
virtual std::unique_ptr< CheckResult > computeReachabilityRewards(Environment const &env, CheckTask< storm::logic::EventuallyFormula, ValueType > const &checkTask) override
 
polytope_type const & getOverApproximation() const
 
polytope_type const & getUnderApproximation() const
 
std::vector< point_type > const & getPoints() const
 
storm::dd::Bdd< Type > const & getTruthValuesVector() const
 
static std::unique_ptr< CheckResult > computeGloballyProbabilities(Environment const &env, OptimizationDirection dir, storm::models::symbolic::NondeterministicModel< DdType, ValueType > const &model, storm::dd::Add< DdType, ValueType > const &transitionMatrix, storm::dd::Bdd< DdType > const &psiStates, bool qualitative)
 
static std::unique_ptr< CheckResult > computeNextProbabilities(Environment const &env, OptimizationDirection dir, storm::models::symbolic::NondeterministicModel< DdType, ValueType > const &model, storm::dd::Add< DdType, ValueType > const &transitionMatrix, storm::dd::Bdd< DdType > const &nextStates)
 
static std::unique_ptr< CheckResult > computeInstantaneousRewards(Environment const &env, OptimizationDirection dir, storm::models::symbolic::NondeterministicModel< DdType, ValueType > const &model, storm::dd::Add< DdType, ValueType > const &transitionMatrix, RewardModelType const &rewardModel, uint_fast64_t stepBound)
 
static std::unique_ptr< CheckResult > computeReachabilityTimes(Environment const &env, OptimizationDirection dir, storm::models::symbolic::NondeterministicModel< DdType, ValueType > const &model, storm::dd::Add< DdType, ValueType > const &transitionMatrix, storm::dd::Bdd< DdType > const &targetStates, bool qualitative)
 
static std::unique_ptr< CheckResult > computeCumulativeRewards(Environment const &env, OptimizationDirection dir, storm::models::symbolic::NondeterministicModel< DdType, ValueType > const &model, storm::dd::Add< DdType, ValueType > const &transitionMatrix, RewardModelType const &rewardModel, uint_fast64_t stepBound)
 
static std::unique_ptr< CheckResult > computeBoundedUntilProbabilities(Environment const &env, OptimizationDirection dir, storm::models::symbolic::NondeterministicModel< DdType, ValueType > const &model, storm::dd::Add< DdType, ValueType > const &transitionMatrix, storm::dd::Bdd< DdType > const &phiStates, storm::dd::Bdd< DdType > const &psiStates, uint_fast64_t stepBound)
 
static std::unique_ptr< CheckResult > computeUntilProbabilities(Environment const &env, OptimizationDirection dir, storm::models::symbolic::NondeterministicModel< DdType, ValueType > const &model, storm::dd::Add< DdType, ValueType > const &transitionMatrix, storm::dd::Bdd< DdType > const &phiStates, storm::dd::Bdd< DdType > const &psiStates, bool qualitative)
 
static std::unique_ptr< CheckResult > computeReachabilityRewards(Environment const &env, OptimizationDirection dir, storm::models::symbolic::NondeterministicModel< DdType, ValueType > const &model, storm::dd::Add< DdType, ValueType > const &transitionMatrix, RewardModelType const &rewardModel, storm::dd::Bdd< DdType > const &targetStates, bool qualitative)
 
#define STORM_LOG_THROW(cond, exception, message)
 
FragmentSpecification prctl()
 
FragmentSpecification multiObjective()
 
std::unique_ptr< CheckResult > performMultiObjectiveModelChecking(Environment const &env, SparseModelType const &model, storm::logic::MultiObjectiveFormula const &formula, bool produceScheduler)
 
FilteredRewardModel< RewardModelType > createFilteredRewardModel(RewardModelType const &baseRewardModel, storm::logic::RewardAccumulation const &acc, bool isDiscreteTimeModel)