STORM_LOG_THROW(parametricModel.getInitialStates().getNumberOfSetBits()==1,storm::exceptions::NotSupportedException,"Parameter lifting requires models with only one initial state");
STORM_LOG_THROW(checkTask.isOnlyInitialStatesRelevantSet(),storm::exceptions::NotSupportedException,"Parameter lifting requires a property where only the value in the initial states is relevant.");
STORM_LOG_THROW(checkTask.isBoundSet(),storm::exceptions::NotSupportedException,"Parameter lifting requires a bounded property.");
STORM_LOG_THROW(parameterLiftingChecker->canHandle(*currentCheckTask),storm::exceptions::NotSupportedException,"Parameter lifting is not supported for this property.");
STORM_LOG_THROW(this->currentCheckTask,storm::exceptions::InvalidStateException,"Checking has been invoked but no property has been specified before.");
STORM_LOG_THROW(this->currentCheckTask,storm::exceptions::InvalidStateException,"Checking has been invoked but no property has been specified before.");
this->addOption(storm::settings::OptionBuilder(moduleName,lpSolverOptionName,false,"Sets which LP solver is preferred.")
.addArgument(storm::settings::ArgumentBuilder::createStringArgument("name","The name of an LP solver.").addValidatorString(ArgumentValidatorFactory::createMultipleChoiceValidator(lpSolvers)).setDefaultValueString("glpk").build()).build());
this->addOption(storm::settings::OptionBuilder(moduleName,parameterLiftingOptionName,false,"Sets whether parameter lifting is applied.")
.addArgument(storm::settings::ArgumentBuilder::createStringArgument("parameterspace","The considered parameter-space given in format a<=x<=b,c<=y<=d").build())
.addArgument(storm::settings::ArgumentBuilder::createDoubleArgument("threshold","The refinement converges as soon as the fraction of unknown area falls below this threshold").setDefaultValueDouble(0.05).build()).build());
this->addOption(storm::settings::OptionBuilder(moduleName,parameterLiftingOptionName,false,"Sets whether parameter lifting is applied.").build());
this->addOption(storm::settings::OptionBuilder(moduleName,exportResultDestinationPathOptionName,true,"A path to a file where the smt2 encoding should be saved.")
this->addOption(storm::settings::OptionBuilder(moduleName,parameterSpaceOptionName,true,"Sets the considered parameter-space (i.e., the initial region) for parameter lifting.")
.addArgument(storm::settings::ArgumentBuilder::createStringArgument("region","The parameter-space (given in format a<=x<=b,c<=y<=d).").build()).build());
this->addOption(storm::settings::OptionBuilder(moduleName,refinementThresholdOptionName,true,"Parameter space refinement converges if the fraction of unknown area falls below this threshold.")
this->addOption(storm::settings::OptionBuilder(moduleName,derivativesOptionName,true,"Sets whether to generate the derivatives of the resulting rational function.").build());
STORM_LOG_THROW(storm::settings::getModule<storm::settings::modules::ParametricSettings>().isParameterSpaceSet(),storm::exceptions::InvalidSettingsException,"Invoked Parameter lifting but no parameter space was defined.");
std::cout<<"Performing parameter lifting for property "<<*formula<<" on initial region "<<initialRegion.toString(true)<<" with refinementThreshold "<<storm::utility::convertNumber<double>(refinementThreshold)<<" ...";
std::cout.flush();
STORM_PRINT_AND_LOG("Performing parameter lifting for property "<<*formula<<" with parameter space "<<parameterSpace.toString(true)<<" and refinement threshold "<<storm::utility::convertNumber<double>(refinementThreshold)<<" ..."<<std::endl);
xxxxxxxxxx