@ -72,7 +72,8 @@
# include "src/counterexamples/MILPMinimalLabelSetGenerator.h"
# include "src/counterexamples/MILPMinimalLabelSetGenerator.h"
# include "src/counterexamples/SMTMinimalCommandSetGenerator.h"
# include "src/counterexamples/SMTMinimalCommandSetGenerator.h"
/ / Headers related to program preprocessing .
/ / Headers related to PRISM model building .
# include "src/generator/PrismNextStateGenerator.h"
# include "src/utility/prism.h"
# include "src/utility/prism.h"
/ / Headers related to exception handling .
/ / Headers related to exception handling .
@ -99,25 +100,23 @@ namespace storm {
template < typename ValueType , storm : : dd : : DdType LibraryType = storm : : dd : : DdType : : CUDD >
template < typename ValueType , storm : : dd : : DdType LibraryType = storm : : dd : : DdType : : CUDD >
storm : : storage : : ModelFormulasPair buildSymbolicModel ( storm : : prism : : Program const & program , std : : vector < std : : shared_ptr < storm : : logic : : Formula const > > const & formulas ) {
storm : : storage : : ModelFormulasPair buildSymbolicModel ( storm : : prism : : Program const & program , std : : vector < std : : shared_ptr < storm : : logic : : Formula const > > const & formulas ) {
storm : : storage : : ModelFormulasPair result ;
storm : : storage : : ModelFormulasPair result ;
storm : : prism : : Program translatedProgram ;
/ / Get the string that assigns values to the unknown currently undefined constants in the model .
/ / Get the string that assigns values to the unknown currently undefined constants in the model .
std : : string constantDefinitionString = storm : : settings : : getModule < storm : : settings : : modules : : IOSettings > ( ) . getConstantDefinitionString ( ) ;
std : : string constantDefinitionString = storm : : settings : : getModule < storm : : settings : : modules : : IOSettings > ( ) . getConstantDefinitionString ( ) ;
translat edProgram = storm : : utility : : prism : : preprocess < ValueType > ( program , constantDefinitionString ) ;
std : : map < storm : : expressions : : Variable , storm : : expressions : : Expression > constantsSubstitution = translat edProgram. getConstantsSubstitution ( ) ;
storm : : prism : : Program preprocess edProgram = storm : : utility : : prism : : preprocess < ValueType > ( program , constantDefinitionString ) ;
std : : map < storm : : expressions : : Variable , storm : : expressions : : Expression > constantsSubstitution = preprocess edProgram. getConstantsSubstitution ( ) ;
/ / Customize and perform model - building .
/ / Customize and perform model - building .
if ( storm : : settings : : getModule < storm : : settings : : modules : : MarkovChainSettings > ( ) . getEngine ( ) = = storm : : settings : : modules : : MarkovChainSettings : : Engine : : Sparse ) {
if ( storm : : settings : : getModule < storm : : settings : : modules : : MarkovChainSettings > ( ) . getEngine ( ) = = storm : : settings : : modules : : MarkovChainSettings : : Engine : : Sparse ) {
typename storm : : builder : : ExplicitModelBuilder < ValueType , storm : : models : : sparse : : StandardRewardModel < ValueType > > : : Options options ;
options = typename storm : : builder : : ExplicitModelBuilder < ValueType , storm : : models : : sparse : : StandardRewardModel < ValueType > > : : Options ( formulas ) ;
options . addConstantDefinitionsFromString ( program , constants ) ;
storm : : generator : : NextStateGeneratorOptions options ( formulas ) ;
/ / Generate command labels if we are going to build a counterexample later .
/ / Generate command labels if we are going to build a counterexample later .
if ( storm : : settings : : getModule < storm : : settings : : modules : : CounterexampleGeneratorSettings > ( ) . isMinimalCommandSetGenerationSet ( ) ) {
if ( storm : : settings : : getModule < storm : : settings : : modules : : CounterexampleGeneratorSettings > ( ) . isMinimalCommandSetGenerationSet ( ) ) {
options . buildCommandLabels = true ;
options . setBuildChoiceLabels ( true ) ;
}
}
storm : : builder : : ExplicitModelBuilder < ValueType > builder ( program , options ) ;
std : : shared_ptr < storm : : generator : : NextStateGenerator < ValueType , uint32_t > > generator = std : : make_shared < storm : : generator : : PrismNextStateGenerator < ValueType , uint32_t > > ( preprocessedProgram , options ) ;
storm : : builder : : ExplicitModelBuilder < ValueType > builder ( generator ) ;
result . model = builder . translate ( ) ;
result . model = builder . translate ( ) ;
} else if ( storm : : settings : : getModule < storm : : settings : : modules : : MarkovChainSettings > ( ) . getEngine ( ) = = storm : : settings : : modules : : MarkovChainSettings : : Engine : : Dd | | storm : : settings : : getModule < storm : : settings : : modules : : MarkovChainSettings > ( ) . getEngine ( ) = = storm : : settings : : modules : : MarkovChainSettings : : Engine : : Hybrid ) {
} else if ( storm : : settings : : getModule < storm : : settings : : modules : : MarkovChainSettings > ( ) . getEngine ( ) = = storm : : settings : : modules : : MarkovChainSettings : : Engine : : Dd | | storm : : settings : : getModule < storm : : settings : : modules : : MarkovChainSettings > ( ) . getEngine ( ) = = storm : : settings : : modules : : MarkovChainSettings : : Engine : : Hybrid ) {
typename storm : : builder : : DdPrismModelBuilder < LibraryType > : : Options options ;
typename storm : : builder : : DdPrismModelBuilder < LibraryType > : : Options options ;
@ -126,7 +125,6 @@ namespace storm {
storm : : builder : : DdPrismModelBuilder < LibraryType > builder ;
storm : : builder : : DdPrismModelBuilder < LibraryType > builder ;
result . model = builder . translateProgram ( program , options ) ;
result . model = builder . translateProgram ( program , options ) ;
translatedProgram = builder . getTranslatedProgram ( ) ;
}
}
/ / There may be constants of the model appearing in the formulas , so we replace all their occurrences
/ / There may be constants of the model appearing in the formulas , so we replace all their occurrences