STORM_LOG_THROW(formula.isRewardOperatorFormula()&&formula.asRewardOperatorFormula().hasRewardModelName(),storm::exceptions::UnexpectedException,"Unexpected type of operator formula: "<<formula);
STORM_LOG_THROW(formula.isRewardOperatorFormula()&&formula.asRewardOperatorFormula().hasRewardModelName(),storm::exceptions::UnexpectedException,"Unexpected type of operator formula: "<<formula);
STORM_LOG_THROW(formula.getSubformula().isCumulativeRewardFormula()&&formula.getSubformula().asCumulativeRewardFormula().getTimeBoundReference().isTimeBound(),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_THROW(!rewModel.hasStateRewards(),storm::exceptions::InvalidPropertyException,"Found state rewards for time bounded objective "<<this->objectives[objIndex].originalFormula<<". This is not supported.");
STORM_LOG_THROW(!cumulativeRewardFormula.isMultiDimensional()&&!cumulativeRewardFormula.getTimeBoundReference().isRewardBound(),storm::exceptions::UnexpectedException,"Unexpected type of sub-formula: "<<formula.getSubformula());
STORM_LOG_THROW(!cumulativeRewardFormula.isMultiDimensional()&&!cumulativeRewardFormula.getTimeBoundReference().isRewardBound(),storm::exceptions::UnexpectedException,"Unexpected type of sub-formula: "<<formula.getSubformula());
}else{
}else{
STORM_LOG_THROW(formula.getSubformula().isTotalRewardFormula(),storm::exceptions::UnexpectedException,"Unexpected type of sub-formula: "<<formula.getSubformula());
STORM_LOG_THROW(formula.getSubformula().isTotalRewardFormula()||formula.getSubformula().isLongRunAverageRewardFormula(),storm::exceptions::UnexpectedException,"Unexpected type of sub-formula: "<<formula.getSubformula());
STORM_LOG_THROW(rewardAnalysis.rewardFinitenessType!=preprocessing::RewardFinitenessType::Infinite,storm::exceptions::NotSupportedException,"There is no Pareto optimal scheduler that yields finite reward for all objectives. This is not supported.");
STORM_LOG_THROW(rewardAnalysis.rewardFinitenessType!=preprocessing::RewardFinitenessType::Infinite,storm::exceptions::NotSupportedException,"There is no Pareto optimal scheduler that yields finite reward for all objectives. This is not supported.");
STORM_LOG_THROW(rewardAnalysis.totalRewardLessInfinityEStates,storm::exceptions::UnexpectedException,"The set of states with reward < infinity for some scheduler has not been computed during preprocessing.");
STORM_LOG_THROW(rewardAnalysis.totalRewardLessInfinityEStates,storm::exceptions::UnexpectedException,"The set of states with reward < infinity for some scheduler has not been computed during preprocessing.");
STORM_LOG_THROW(preprocessorResult.containsOnlyTrivialObjectives(),storm::exceptions::NotSupportedException,"At least one objective was not reduced to an expected (total or cumulative) reward objective during preprocessing. This is not supported by the considered weight vector checker.");
STORM_LOG_THROW(preprocessorResult.containsOnlyTrivialObjectives(),storm::exceptions::NotSupportedException,"At least one objective was not reduced to an expected (long run, total or cumulative) reward objective during preprocessing. This is not supported by the considered weight vector checker.");
STORM_LOG_THROW(preprocessorResult.preprocessedModel->getInitialStates().getNumberOfSetBits()==1,storm::exceptions::NotSupportedException,"The model has multiple initial states.");
STORM_LOG_THROW(preprocessorResult.preprocessedModel->getInitialStates().getNumberOfSetBits()==1,storm::exceptions::NotSupportedException,"The model has multiple initial states.");
// Build a subsystem of the preprocessor result model that discards states that yield infinite reward for all schedulers.
// Build a subsystem of the preprocessor result model that discards states that yield infinite reward for all schedulers.
// We can also merge the states that will have reward zero anyway.
// We can also merge the states that will have reward zero anyway.