STORM_LOG_THROW(value>=storm::utility::zero<storm::RationalNumber>(),storm::exceptions::InvalidPropertyException,"Time-bound must not evaluate to negative number.");
STORM_LOG_ASSERT(!isMultiDimensional(),"Cumulative Reward Formula is multi-dimensional.");
int_fast64_tbound=getBound<uint64_t>();
if(isBoundStrict()){
STORM_LOG_THROW(bound>0,storm::exceptions::InvalidPropertyException,"Cannot retrieve non-strict bound from strict zero-bound.");
@ -109,13 +137,43 @@ namespace storm {
STORM_LOG_THROW(!bound.containsVariables(),storm::exceptions::InvalidOperationException,"Cannot evaluate time-bound '"<<bound<<"' as it contains undefined constants.");
STORM_LOG_THROW(data.originalModel.isOfType(storm::models::ModelType::Mdp),storm::exceptions::InvalidPropertyException,"Cumulative reward formulas are not supported for the given model type.");
STORM_LOG_THROW(formula.getSubformula().isCumulativeRewardFormula()&&formula.getSubformula().asCumulativeRewardFormula().isTimeBounded(),storm::exceptions::UnexpectedException,"Unexpected type of sub-formula: "<<formula.getSubformula());
STORM_LOG_THROW(formula.getSubformula().isCumulativeRewardFormula()&&formula.getSubformula().asCumulativeRewardFormula().getTimeBoundReference().isTimeBound(),storm::exceptions::UnexpectedException,"Unexpected type of sub-formula: "<<formula.getSubformula());
STORM_LOG_THROW(!rewModel.hasStateRewards(),storm::exceptions::InvalidPropertyException,"Found state rewards for time bounded objective "<<this->objectives[objIndex].originalFormula<<". This is not supported.");
STORM_LOG_WARN_COND(this->objectives[objIndex].originalFormula->isProbabilityOperatorFormula()&&this->objectives[objIndex].originalFormula->asProbabilityOperatorFormula().getSubformula().isBoundedUntilFormula(),"Objective "<<this->objectives[objIndex].originalFormula<<" was simplified to a cumulative reward formula. Correctness of the algorithm is unknown for this type of property.");
STORM_LOG_THROW(!rewModel.hasTransitionRewards(),storm::exceptions::NotSupportedException,"Reward model has transition rewards which is not expected.");
// Check whether we consider a multi-objective formula
// For multi-objective model checking, each initial state requires an individual scheduler (in contrast to single-objective model checking). Let's exclude multiple initial states.
STORM_LOG_THROW(this->model.hasRewardModel(rewardName),storm::exceptions::IllegalArgumentException,"No reward model with name '"<<rewardName<<"' found.");
STORM_LOG_THROW(!rewardModel.hasTransitionRewards(),storm::exceptions::NotSupportedException,"Transition rewards are currently not supported as reward bounds.");
STORM_LOG_THROW(this->model.hasRewardModel(rewardName),storm::exceptions::IllegalArgumentException,"No reward model with name '"<<rewardName<<"' found.");
STORM_LOG_THROW(!rewardModel.hasTransitionRewards(),storm::exceptions::NotSupportedException,"Transition rewards are currently not supported as reward bounds.");