STORM_LOG_THROW(this->typeOfParametricModel==storm::models::ModelType::Dtmc,storm::exceptions::InvalidArgumentException,"Approximation with rewards is only implemented for Dtmcs");
STORM_LOG_THROW(parametricModel.hasUniqueRewardModel(),storm::exceptions::InvalidArgumentException,"The rewardmodel of the approximation model should be unique");
STORM_LOG_THROW(parametricModel.getUniqueRewardModel()->second.hasOnlyStateRewards(),storm::exceptions::InvalidArgumentException,"The rewardmodel of the approximation model should have state rewards only");
STORM_LOG_THROW(parametricModel.getUniqueRewardModel().hasOnlyStateRewards(),storm::exceptions::InvalidArgumentException,"The rewardmodel of the approximation model should have state rewards only");
}else{
STORM_LOG_THROW(false,storm::exceptions::InvalidArgumentException,"Invalid formula: "<<formula<<". Approximation model only supports eventually or reachability reward formulae.");
STORM_LOG_THROW(this->typeOfParametricModel==storm::models::ModelType::Dtmc,storm::exceptions::InvalidArgumentException,"Sampling with rewards is only implemented for Dtmcs");
STORM_LOG_THROW(parametricModel.hasUniqueRewardModel(),storm::exceptions::InvalidArgumentException,"The rewardmodel of the sampling model should be unique");
STORM_LOG_THROW(parametricModel.getUniqueRewardModel()->second.hasOnlyStateRewards(),storm::exceptions::InvalidArgumentException,"The rewardmodel of the sampling model should have state rewards only");
STORM_LOG_THROW(parametricModel.getUniqueRewardModel().hasOnlyStateRewards(),storm::exceptions::InvalidArgumentException,"The rewardmodel of the sampling model should have state rewards only");
STORM_LOG_THROW(formula->getSubformula().isEventuallyFormula(),storm::exceptions::InvalidArgumentException,"The subformula should be a reachabilityreward formula");
STORM_LOG_THROW(formula->getSubformula().asEventuallyFormula().getSubformula().isInFragment(storm::logic::propositional()),storm::exceptions::InvalidArgumentException,"The subsubformula should be a propositional formula");
STORM_LOG_THROW(this->getModel()->hasRewardModel(),storm::exceptions::InvalidArgumentException,"No reward model specified");
STORM_LOG_THROW(this->getModel()->hasUniqueRewardModel(),storm::exceptions::InvalidArgumentException,"Ambiguous reward model. Specify it in the formula!");
STORM_LOG_THROW(false,storm::exceptions::IllegalArgumentException,"Unable to refer to default reward model, because there is no default model or it is not unique.");
STORM_LOG_THROW(false,storm::exceptions::IllegalArgumentException,"Unable to refer to default reward model, because there is no default model or it is not unique.");
STORM_LOG_THROW(this->hasUniqueRewardModel(),storm::exceptions::InvalidOperationException,"Cannot retrieve unique reward model, because there is no unique one.");
STORM_LOG_THROW(this->hasUniqueRewardModel(),storm::exceptions::InvalidOperationException,"Cannot retrieve unique reward model, because there is no unique one.");
STORM_LOG_THROW(this->identifiers_!=nullptr,storm::exceptions::WrongFormatException,"Unable to substitute identifier expressions without given mapping.");
STORM_LOG_THROW(!options.getKeepRewards()||!model.hasRewardModel()||model.hasUniqueRewardModel(),storm::exceptions::IllegalFunctionCallException,"Bisimulation currently only supports models with at most one reward model.");
STORM_LOG_THROW(!options.getKeepRewards()||!model.hasRewardModel()||model.getUniqueRewardModel()->second.hasOnlyStateRewards(),storm::exceptions::IllegalFunctionCallException,"Bisimulation is currently supported for models with state rewards only. Consider converting the transition rewards to state rewards (via suitable function calls).");
STORM_LOG_THROW(!options.getKeepRewards()||!model.hasRewardModel()||model.getUniqueRewardModel().hasOnlyStateRewards(),storm::exceptions::IllegalFunctionCallException,"Bisimulation is currently supported for models with state rewards only. Consider converting the transition rewards to state rewards (via suitable function calls).");