// Check whether only bounded until formulas are contained
for(autoconst&f:formula.getSubformulas()){
STORM_LOG_THROW(f->isBoundedUntilFormula(),storm::exceptions::InvalidPropertyException,"MultiObjective subformulas are only allowed if they all contain bounded until formulas");
STORM_LOG_THROW(objectiveFormula->hasOptimalityType(),storm::exceptions::InvalidPropertyException,"Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
STORM_LOG_THROW(subFormula->isBoundedUntilFormula(),storm::exceptions::InvalidPropertyException,"Formula "<<objectiveFormula<<" is not supported. Invalid subformula "<<*subFormula<<".");
}
}else{
STORM_LOG_THROW(objectiveFormula->getSubformula().isBoundedUntilFormula(),storm::exceptions::InvalidPropertyException,"Formula "<<objectiveFormula<<" is not supported. Invalid subformula "<<objectiveFormula->getSubformula()<<".");
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(formula.getSubformula().isBoundedUntilFormula(),storm::exceptions::NotSupportedException,"Unexpected type of subformula for formula "<<formula);
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(false,storm::exceptions::UnexpectedException,"Could not find the initial product state corresponding to the given initial model state.");
// 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(checkTask.isOptimizationDirectionSet(),storm::exceptions::InvalidPropertyException,"Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
STORM_LOG_THROW(!pathFormula.hasLowerBound()&&pathFormula.hasUpperBound(),storm::exceptions::InvalidPropertyException,"Formula needs to have single upper time bound.");
STORM_LOG_THROW(pathFormula.hasIntegerUpperBound(),storm::exceptions::InvalidPropertyException,"Formula needs to have discrete upper time bound.");
STORM_LOG_THROW(checkTask.isOnlyInitialStatesRelevantSet(),storm::exceptions::InvalidOperationException,"Checking non-trivial bounded until probabilities can only be computed for the initial states of the model.");
STORM_LOG_WARN_COND(!checkTask.isQualitativeSet(),"Checking non-trivial bounded until formulas is not optimized w.r.t. qualitative queries");
STORM_LOG_THROW(!pathFormula.hasLowerBound()&&pathFormula.hasUpperBound(),storm::exceptions::InvalidPropertyException,"Formula needs to have single upper time bound.");
STORM_LOG_THROW(pathFormula.hasIntegerUpperBound(),storm::exceptions::InvalidPropertyException,"Formula needs to have discrete upper time bound.");