| 
					
					
						
							
						
					
					
				 | 
				@ -36,23 +36,31 @@ | 
			
		
		
	
		
			
				 | 
				 | 
				/*!
 | 
				 | 
				 | 
				/*!
 | 
			
		
		
	
		
			
				 | 
				 | 
				 * Load DFT from filename, build corresponding Model and check against given property. | 
				 | 
				 | 
				 * Load DFT from filename, build corresponding Model and check against given property. | 
			
		
		
	
		
			
				 | 
				 | 
				 * | 
				 | 
				 | 
				 * | 
			
		
		
	
		
			
				 | 
				 | 
				 * @param filename Path to DFT file in Galileo format. | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 * @param property PCTC formula capturing the property to check. | 
				 | 
				 | 
				 * @param property PCTC formula capturing the property to check. | 
			
		
		
	
		
			
				 | 
				 | 
				 * @param symred Flag whether symmetry reduction should be used. | 
				 | 
				 | 
				 * @param symred Flag whether symmetry reduction should be used. | 
			
		
		
	
		
			
				 | 
				 | 
				 * @param allowModularisation Flag whether modularisation should be applied if possible. | 
				 | 
				 | 
				 * @param allowModularisation Flag whether modularisation should be applied if possible. | 
			
		
		
	
		
			
				 | 
				 | 
				 * @param enableDC Flag whether Don't Care propagation should be used. | 
				 | 
				 | 
				 * @param enableDC Flag whether Don't Care propagation should be used. | 
			
		
		
	
		
			
				 | 
				 | 
				 */ | 
				 | 
				 | 
				 */ | 
			
		
		
	
		
			
				 | 
				 | 
				template <typename ValueType> | 
				 | 
				 | 
				template <typename ValueType> | 
			
		
		
	
		
			
				 | 
				 | 
				void analyzeDFT(std::string filename, std::string property, bool symred, bool allowModularisation, bool enableDC, double approximationError) { | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				    std::cout << "Running DFT analysis on file " << filename << " with property " << property << std::endl; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				void analyzeDFT(std::string property, bool symred, bool allowModularisation, bool enableDC, double approximationError) { | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    storm::settings::modules::DFTSettings const& dftSettings = storm::settings::getModule<storm::settings::modules::DFTSettings>(); | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    std::shared_ptr<storm::storage::DFT<ValueType>> dft; | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    if (dftSettings.isDftJsonFileSet()) { | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        storm::parser::DFTJsonParser<ValueType> parser; | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        std::cout << "Running DFT analysis on file " << dftSettings.getDftJsonFilename() << " with property " << property << std::endl; | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        dft = std::make_shared<storm::storage::DFT<ValueType>>(parser.parseJson(dftSettings.getDftJsonFilename())); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    } else { | 
			
		
		
	
		
			
				 | 
				 | 
				        storm::parser::DFTGalileoParser<ValueType> parser; | 
				 | 
				 | 
				        storm::parser::DFTGalileoParser<ValueType> parser; | 
			
		
		
	
		
			
				 | 
				 | 
				    storm::storage::DFT<ValueType> dft = parser.parseDFT(filename); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        std::cout << "Running DFT analysis on file " << dftSettings.getDftFilename() << " with property " << property << std::endl; | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        dft = std::make_shared<storm::storage::DFT<ValueType>>(parser.parseDFT(dftSettings.getDftFilename())); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    } | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				    std::vector<std::shared_ptr<storm::logic::Formula const>> formulas = storm::extractFormulasFromProperties(storm::parsePropertiesForExplicit(property)); | 
				 | 
				 | 
				    std::vector<std::shared_ptr<storm::logic::Formula const>> formulas = storm::extractFormulasFromProperties(storm::parsePropertiesForExplicit(property)); | 
			
		
		
	
		
			
				 | 
				 | 
				    STORM_LOG_ASSERT(formulas.size() == 1, "Wrong number of formulas."); | 
				 | 
				 | 
				    STORM_LOG_ASSERT(formulas.size() == 1, "Wrong number of formulas."); | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				    storm::modelchecker::DFTModelChecker<ValueType> modelChecker; | 
				 | 
				 | 
				    storm::modelchecker::DFTModelChecker<ValueType> modelChecker; | 
			
		
		
	
		
			
				 | 
				 | 
				    modelChecker.check(dft, formulas[0], symred, allowModularisation, enableDC, approximationError); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    modelChecker.check(*dft, formulas[0], symred, allowModularisation, enableDC, approximationError); | 
			
		
		
	
		
			
				 | 
				 | 
				    modelChecker.printTimings(); | 
				 | 
				 | 
				    modelChecker.printTimings(); | 
			
		
		
	
		
			
				 | 
				 | 
				    modelChecker.printResult(); | 
				 | 
				 | 
				    modelChecker.printResult(); | 
			
		
		
	
		
			
				 | 
				 | 
				} | 
				 | 
				 | 
				} | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
						
							
						
					
					
				 | 
				@ -247,12 +255,12 @@ int main(const int argc, const char** argv) { | 
			
		
		
	
		
			
				 | 
				 | 
				        // From this point on we are ready to carry out the actual computations.
 | 
				 | 
				 | 
				        // From this point on we are ready to carry out the actual computations.
 | 
			
		
		
	
		
			
				 | 
				 | 
				        if (parametric) { | 
				 | 
				 | 
				        if (parametric) { | 
			
		
		
	
		
			
				 | 
				 | 
				#ifdef STORM_HAVE_CARL
 | 
				 | 
				 | 
				#ifdef STORM_HAVE_CARL
 | 
			
		
		
	
		
			
				 | 
				 | 
				            analyzeDFT<storm::RationalFunction>(dftSettings.getDftFilename(), pctlFormula, dftSettings.useSymmetryReduction(), dftSettings.useModularisation(), !dftSettings.isDisableDC(), approximationError); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            analyzeDFT<storm::RationalFunction>(pctlFormula, dftSettings.useSymmetryReduction(), dftSettings.useModularisation(), !dftSettings.isDisableDC(), approximationError); | 
			
		
		
	
		
			
				 | 
				 | 
				#else
 | 
				 | 
				 | 
				#else
 | 
			
		
		
	
		
			
				 | 
				 | 
				            STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Parameters are not supported in this build."); | 
				 | 
				 | 
				            STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Parameters are not supported in this build."); | 
			
		
		
	
		
			
				 | 
				 | 
				#endif
 | 
				 | 
				 | 
				#endif
 | 
			
		
		
	
		
			
				 | 
				 | 
				        } else { | 
				 | 
				 | 
				        } else { | 
			
		
		
	
		
			
				 | 
				 | 
				            analyzeDFT<double>(dftSettings.getDftFilename(), pctlFormula, dftSettings.useSymmetryReduction(), dftSettings.useModularisation(), !dftSettings.isDisableDC(), approximationError); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            analyzeDFT<double>(pctlFormula, dftSettings.useSymmetryReduction(), dftSettings.useModularisation(), !dftSettings.isDisableDC(), approximationError); | 
			
		
		
	
		
			
				 | 
				 | 
				        } | 
				 | 
				 | 
				        } | 
			
		
		
	
		
			
				 | 
				 | 
				         | 
				 | 
				 | 
				         | 
			
		
		
	
		
			
				 | 
				 | 
				        // All operations have now been performed, so we clean up everything and terminate.
 | 
				 | 
				 | 
				        // All operations have now been performed, so we clean up everything and terminate.
 | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
					
				 | 
				
  |