STORM_LOG_THROW(discreteTimeModel->isOfType(storm::models::ModelType::Dtmc)||discreteTimeModel->isOfType(storm::models::ModelType::Mdp),storm::exceptions::UnexpectedException,"Transformation to discrete time model has failed.");
STORM_LOG_THROW(consideredModel->isOfType(storm::models::ModelType::Dtmc)||consideredModel->isOfType(storm::models::ModelType::Mdp),storm::exceptions::UnexpectedException,"Transformation to discrete time model has failed.");
STORM_LOG_THROW(consideredModel->isOfType(storm::models::ModelType::Dtmc)||consideredModel->isOfType(storm::models::ModelType::Mdp),storm::exceptions::UnexpectedException,"Transformation to discrete time model has failed.");
STORM_LOG_THROW(*stepBound>0,storm::exceptions::NotSupportedException,"Can not apply parameter lifting on step bounded formula: The step bound has to be positive.");
STORM_LOG_THROW(propositionalChecker.canHandle(checkTask.getFormula().getLeftSubformula())&&propositionalChecker.canHandle(checkTask.getFormula().getRightSubformula()),storm::exceptions::NotSupportedException,"Parameter lifting with non-propositional subformulas is not supported");
STORM_LOG_THROW(propositionalChecker.canHandle(checkTask.getFormula().getLeftSubformula())&&propositionalChecker.canHandle(checkTask.getFormula().getRightSubformula()),storm::exceptions::NotSupportedException,"Parameter lifting with non-propositional subformulas is not supported");
STORM_LOG_THROW(propositionalChecker.canHandle(checkTask.getFormula().getSubformula()),storm::exceptions::NotSupportedException,"Parameter lifting with non-propositional subformulas is not supported");
// if there are maybestates, create the parameterLifter
if(!maybeStates.empty()){
// Create the reward vector
STORM_LOG_THROW((checkTask.isRewardModelSet()&&this->parametricModel.hasRewardModel(checkTask.getRewardModel()))||(!checkTask.isRewardModelSet()&&this->parametricModel.hasUniqueRewardModel()),storm::exceptions::InvalidPropertyException,"The reward model specified by the CheckTask is not available in the given model.");
STORM_LOG_THROW((checkTask.isRewardModelSet()&&this->parametricModel->hasRewardModel(checkTask.getRewardModel()))||(!checkTask.isRewardModelSet()&&this->parametricModel->hasUniqueRewardModel()),storm::exceptions::InvalidPropertyException,"The reward model specified by the CheckTask is not available in the given model.");
STORM_LOG_THROW(*stepBound>0,storm::exceptions::NotSupportedException,"Can not apply parameter lifting on step bounded formula: The step bound has to be positive.");
STORM_LOG_THROW((checkTask.isRewardModelSet()&&this->parametricModel.hasRewardModel(checkTask.getRewardModel()))||(!checkTask.isRewardModelSet()&&this->parametricModel.hasUniqueRewardModel()),storm::exceptions::InvalidPropertyException,"The reward model specified by the CheckTask is not available in the given model.");
STORM_LOG_THROW((checkTask.isRewardModelSet()&&this->parametricModel->hasRewardModel(checkTask.getRewardModel()))||(!checkTask.isRewardModelSet()&&this->parametricModel->hasUniqueRewardModel()),storm::exceptions::InvalidPropertyException,"The reward model specified by the CheckTask is not available in the given model.");
STORM_LOG_THROW(*stepBound>0,storm::exceptions::NotSupportedException,"Can not apply parameter lifting on step bounded formula: The step bound has to be positive.");
STORM_LOG_THROW(propositionalChecker.canHandle(checkTask.getFormula().getLeftSubformula())&&propositionalChecker.canHandle(checkTask.getFormula().getRightSubformula()),storm::exceptions::NotSupportedException,"Parameter lifting with non-propositional subformulas is not supported");
STORM_LOG_THROW(propositionalChecker.canHandle(checkTask.getFormula().getLeftSubformula())&&propositionalChecker.canHandle(checkTask.getFormula().getRightSubformula()),storm::exceptions::NotSupportedException,"Parameter lifting with non-propositional subformulas is not supported");
// Check whether there is an EC consisting of maybestates
applyPreviousResultAsHint=storm::solver::minimize(checkTask.getOptimizationDirection())||// when minimizing, there can not be an EC within the maybestates
STORM_LOG_THROW(propositionalChecker.canHandle(checkTask.getFormula().getSubformula()),storm::exceptions::NotSupportedException,"Parameter lifting with non-propositional subformulas is not supported");
// if there are maybestates, create the parameterLifter
if(!maybeStates.empty()){
// Create the reward vector
STORM_LOG_THROW((checkTask.isRewardModelSet()&&this->parametricModel.hasRewardModel(checkTask.getRewardModel()))||(!checkTask.isRewardModelSet()&&this->parametricModel.hasUniqueRewardModel()),storm::exceptions::InvalidPropertyException,"The reward model specified by the CheckTask is not available in the given model.");
STORM_LOG_THROW((checkTask.isRewardModelSet()&&this->parametricModel->hasRewardModel(checkTask.getRewardModel()))||(!checkTask.isRewardModelSet()&&this->parametricModel->hasUniqueRewardModel()),storm::exceptions::InvalidPropertyException,"The reward model specified by the CheckTask is not available in the given model.");
// We need to handle choices that lead to an infinity state.
// As a maybeState does not have reward infinity, a choice leading to an infinity state will never be picked. Hence, we can unselect the corresponding rows
// Check whether there is an EC consisting of maybestates
applyPreviousResultAsHint=!storm::solver::minimize(checkTask.getOptimizationDirection())||// when maximizing, there can not be an EC within the maybestates
STORM_LOG_THROW(*stepBound>0,storm::exceptions::NotSupportedException,"Can not apply parameter lifting on step bounded formula: The step bound has to be positive.");
STORM_LOG_THROW((checkTask.isRewardModelSet()&&this->parametricModel.hasRewardModel(checkTask.getRewardModel()))||(!checkTask.isRewardModelSet()&&this->parametricModel.hasUniqueRewardModel()),storm::exceptions::InvalidPropertyException,"The reward model specified by the CheckTask is not available in the given model.");
STORM_LOG_THROW((checkTask.isRewardModelSet()&&this->parametricModel->hasRewardModel(checkTask.getRewardModel()))||(!checkTask.isRewardModelSet()&&this->parametricModel->hasUniqueRewardModel()),storm::exceptions::InvalidPropertyException,"The reward model specified by the CheckTask is not available in the given model.");
STORM_LOG_THROW(this->currentCheckTask->isOnlyInitialStatesRelevantSet(),storm::exceptions::NotSupportedException,"Analyzing regions with parameter lifting requires a property where only the value in the initial states is relevant.");
STORM_LOG_THROW(this->currentCheckTask->isBoundSet(),storm::exceptions::NotSupportedException,"Analyzing regions with parameter lifting requires a bounded property.");
STORM_LOG_THROW(this->parametricModel.getInitialStates().getNumberOfSetBits()==1,storm::exceptions::NotSupportedException,"Analyzing regions with parameter lifting requires a model with a single initial state.");
STORM_LOG_THROW(this->parametricModel->getInitialStates().getNumberOfSetBits()==1,storm::exceptions::NotSupportedException,"Analyzing regions with parameter lifting requires a model with a single initial state.");
RegionResultresult=initialResult;
// Check if we need to check the formula on one point to decide whether to show AllSat or AllViolated
this->addOption(storm::settings::OptionBuilder(moduleName,exportResultOptionName,false,"A path to a file where the parametric result should be saved.")
this->addOption(storm::settings::OptionBuilder(moduleName,simplifyOptionName,false,"Sets whether to perform simplification steps before model analysis.").build());
this->addOption(storm::settings::OptionBuilder(moduleName,derivativesOptionName,false,"Sets whether to generate the derivatives of the resulting rational function.").build());
this->addOption(storm::settings::OptionBuilder(moduleName,transformContinuousOptionName,false,"Sets whether to transform a continuous time input model to a discrete time model.").setShortName(transformContinuousShortOptionName).build());