STORM_LOG_ASSERT(lowerChoiceUpdateToSuccessorMapping.size()==upperChoiceUpdateToSuccessorMapping.size(),"Mismatching sizes after decode ("<<lowerChoiceUpdateToSuccessorMapping.size()<<" vs. "<<upperChoiceUpdateToSuccessorMapping.size()<<").");
// Now go through the mappings and find points of deviation. Currently, we take the first deviation.
STORM_LOG_ASSERT(newPredicate.isInitialized(),"Could not derive new predicate as there is no deviation.");
STORM_LOG_DEBUG("Derived new predicate (based on weakest-precondition): "<<newPredicate);
STORM_LOG_DEBUG("Derived new predicate (based on weakest-precondition): "<<newPredicate<<", (equivalent to "<<(refinementPredicateIndexToCount[chosenPredicateIndex]-1)<<" other refinement predicates)");
// For now, we assume that there is a single module. If the program has more than one module, it needs
// to be flattened before the procedure.
STORM_LOG_THROW(program.getNumberOfModules()==1,storm::exceptions::WrongFormatException,"Cannot create abstract program from program containing too many modules.");
// Add all variables and range expressions to the information object.
STORM_LOG_THROW(model.isPrismProgram(),storm::exceptions::NotSupportedException,"Currently only PRISM models are supported by the game-based model checker.");
STORM_LOG_THROW(originalProgram.getModelType()==storm::prism::Program::ModelType::DTMC||originalProgram.getModelType()==storm::prism::Program::ModelType::MDP,storm::exceptions::NotSupportedException,"Currently only DTMCs/MDPs are supported by the game-based model checker.");
STORM_LOG_DEBUG("Obtained quantitative bounds ["<<quantitativeResult.min.initialStateValue<<", "<<quantitativeResult.max.initialStateValue<<"] on the actual value for the initial states in "<<std::chrono::duration_cast<std::chrono::milliseconds>(quantitativeEnd-quantitativeStart).count()<<"ms.");
// (9) Check whether the lower and upper bounds are close enough to terminate with an answer.
STORM_LOG_THROW(formula.isBooleanLiteralFormula()||formula.isAtomicExpressionFormula()||formula.isAtomicLabelFormula(),storm::exceptions::InvalidPropertyException,"The target states have to be given as label or an expression.");
this->addOption(storm::settings::OptionBuilder(moduleName,addAllGuardsOptionName,true,"Sets whether all guards are added as initial predicates.").build());
this->addOption(storm::settings::OptionBuilder(moduleName,splitPredicatesOptionName,true,"Sets whether the predicates are split into atoms before they are added.").build());
@ -23,6 +26,7 @@ namespace storm {
this->addOption(storm::settings::OptionBuilder(moduleName,splitGuardsOptionName,true,"Sets whether the guards are split into atoms before they are added.").build());
this->addOption(storm::settings::OptionBuilder(moduleName,splitAllOptionName,true,"Sets whether all predicates are split into atoms before they are added.").build());
this->addOption(storm::settings::OptionBuilder(moduleName,useInterpolationOptionName,true,"Sets whether interpolation is to be used to eliminate spurious pivot blocks.").build());
this->addOption(storm::settings::OptionBuilder(moduleName,precisionOptionName,true,"The precision used for detecting convergence.").addArgument(storm::settings::ArgumentBuilder::createDoubleArgument("value","The precision to achieve.").setDefaultValueDouble(1e-03).addValidationFunctionDouble(storm::settings::ArgumentValidators::doubleRangeValidatorExcluding(0.0,1.0)).build()).build());