@ -21,12 +21,10 @@ namespace storm { 
			
		
	
		
			
				
					    namespace  modelchecker  {  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        template < typename  ValueType >  
			
		
	
		
			
				
					        typename  DFTModelChecker < ValueType > : : dft_results  DFTModelChecker < ValueType > : : check ( storm : : storage : : DFT < ValueType >  const &  origDft ,  
			
		
	
		
			
				
					                                                                                           std : : vector < std : : shared_ptr < const  storm : : logic : : Formula > >  const &  properties ,  bool  symred ,  
			
		
	
		
			
				
					                                                                                           bool  allowModularisation ,  std : : set < size_t >  const &  relevantEvents ,  
			
		
	
		
			
				
					                                                                                           bool  allowDCForRelevantEvents ,  double  approximationError ,  
			
		
	
		
			
				
					                                                                                           storm : : builder : : ApproximationHeuristic  approximationHeuristic ,  bool  eliminateChains ,  
			
		
	
		
			
				
					                                                                                           storm : : transformer : : EliminationLabelBehavior  labelBehavior )  {  
			
		
	
		
			
				
					        typename  DFTModelChecker < ValueType > : : dft_results  DFTModelChecker < ValueType > : : check ( storm : : storage : : DFT < ValueType >  const &  origDft ,  std : : vector < std : : shared_ptr < const  storm : : logic : : Formula > >  const &  properties ,  
			
		
	
		
			
				
					                                                                                           bool  symred ,  bool  allowModularisation ,  storm : : utility : : RelevantEvents  const &  relevantEvents ,  
			
		
	
		
			
				
					                                                                                           double  approximationError ,  storm : : builder : : ApproximationHeuristic  approximationHeuristic ,  
			
		
	
		
			
				
					                                                                                           bool  eliminateChains ,  storm : : transformer : : EliminationLabelBehavior  labelBehavior )  {  
			
		
	
		
			
				
					            totalTimer . start ( ) ;  
			
		
	
		
			
				
					            dft_results  results ;  
			
		
	
		
			
				
					
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -50,8 +48,7 @@ namespace storm { 
			
		
	
		
			
				
					                    results . push_back ( result ) ;  
			
		
	
		
			
				
					                }  
			
		
	
		
			
				
					            }  else  {  
			
		
	
		
			
				
					                results  =  checkHelper ( dft ,  properties ,  symred ,  allowModularisation ,  relevantEvents ,  allowDCForRelevantEvents ,  approximationError ,  approximationHeuristic ,  
			
		
	
		
			
				
					                                      eliminateChains ,  labelBehavior ) ;  
			
		
	
		
			
				
					                results  =  checkHelper ( dft ,  properties ,  symred ,  allowModularisation ,  relevantEvents ,  approximationError ,  approximationHeuristic ,  eliminateChains ,  labelBehavior ) ;  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					            totalTimer . stop ( ) ;  
			
		
	
		
			
				
					            return  results ;  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -59,9 +56,8 @@ namespace storm { 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        template < typename  ValueType >  
			
		
	
		
			
				
					        typename  DFTModelChecker < ValueType > : : dft_results  DFTModelChecker < ValueType > : : checkHelper ( storm : : storage : : DFT < ValueType >  const &  dft ,  property_vector  const &  properties ,  
			
		
	
		
			
				
					                                                                                                 bool  symred ,  bool  allowModularisation ,  std : : set < size_t >  const &  relevantEvents ,  
			
		
	
		
			
				
					                                                                                                 bool  allowDCForRelevantEvents ,  double  approximationError ,  
			
		
	
		
			
				
					                                                                                                 storm : : builder : : ApproximationHeuristic  approximationHeuristic ,  
			
		
	
		
			
				
					                                                                                                 bool  symred ,  bool  allowModularisation ,  storm : : utility : : RelevantEvents  const &  relevantEvents ,  
			
		
	
		
			
				
					                                                                                                 double  approximationError ,  storm : : builder : : ApproximationHeuristic  approximationHeuristic ,  
			
		
	
		
			
				
					                                                                                                 bool  eliminateChains ,  storm : : transformer : : EliminationLabelBehavior  labelBehavior )  {  
			
		
	
		
			
				
					            STORM_LOG_TRACE ( " Check helper called " ) ;  
			
		
	
		
			
				
					            std : : vector < storm : : storage : : DFT < ValueType > >  dfts ;  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -118,8 +114,7 @@ namespace storm { 
			
		
	
		
			
				
					                        std : : vector < ValueType >  res ;  
			
		
	
		
			
				
					                        for  ( auto  const  ft  :  dfts )  {  
			
		
	
		
			
				
					                            // TODO: allow approximation in modularisation
  
			
		
	
		
			
				
					                            dft_results  ftResults  =  checkHelper ( ft ,  { property } ,  symred ,  true ,  relevantEvents ,  
			
		
	
		
			
				
					                                                                allowDCForRelevantEvents ,  0.0 ) ;  
			
		
	
		
			
				
					                            dft_results  ftResults  =  checkHelper ( ft ,  { property } ,  symred ,  true ,  relevantEvents ,  0.0 ) ;  
			
		
	
		
			
				
					                            STORM_LOG_ASSERT ( ftResults . size ( )  = =  1 ,  " Wrong number of results " ) ;  
			
		
	
		
			
				
					                            res . push_back ( boost : : get < ValueType > ( ftResults [ 0 ] ) ) ;  
			
		
	
		
			
				
					                        }  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -157,18 +152,13 @@ namespace storm { 
			
		
	
		
			
				
					                return  results ;  
			
		
	
		
			
				
					            }  else  {  
			
		
	
		
			
				
					                // No modularisation was possible
  
			
		
	
		
			
				
					                return  checkDFT ( dft ,  properties ,  symred ,  relevantEvents ,  allowDCForRelevantEvents ,  approximationError ,  
			
		
	
		
			
				
					                                approximationHeuristic ,  eliminateChains ,  labelBehavior ) ;  
			
		
	
		
			
				
					                return  checkDFT ( dft ,  properties ,  symred ,  relevantEvents ,  approximationError ,  approximationHeuristic ,  eliminateChains ,  labelBehavior ) ;  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        template < typename  ValueType >  
			
		
	
		
			
				
					        std : : shared_ptr < storm : : models : : sparse : : Ctmc < ValueType > >  
			
		
	
		
			
				
					        DFTModelChecker < ValueType > : : buildModelViaComposition ( storm : : storage : : DFT < ValueType >  const  & dft ,  
			
		
	
		
			
				
					                                                             property_vector  const  & properties ,  bool  symred ,  
			
		
	
		
			
				
					                                                             bool  allowModularisation ,  
			
		
	
		
			
				
					                                                             std : : set < size_t >  const  & relevantEvents ,  
			
		
	
		
			
				
					                                                             bool  allowDCForRelevantEvents )  {  
			
		
	
		
			
				
					        DFTModelChecker < ValueType > : : buildModelViaComposition ( storm : : storage : : DFT < ValueType >  const  & dft ,  property_vector  const  & properties ,  bool  symred ,  bool  allowModularisation ,  storm : : utility : : RelevantEvents  const &  relevantEvents )  {  
			
		
	
		
			
				
					            // TODO: use approximation?
  
			
		
	
		
			
				
					            STORM_LOG_TRACE ( " Build model via composition " ) ;  
			
		
	
		
			
				
					            std : : vector < storm : : storage : : DFT < ValueType > >  dfts ;  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -207,7 +197,7 @@ namespace storm { 
			
		
	
		
			
				
					                    STORM_LOG_DEBUG ( " Building Model via parallel composition... " ) ;  
			
		
	
		
			
				
					                    explorationTimer . start ( ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                    ft . setRelevantEvents ( relevantEvents ,  allowDCForRelevantEvents ) ;  
			
		
	
		
			
				
					                    ft . setRelevantEvents ( relevantEvents ) ;  
			
		
	
		
			
				
					                    // Find symmetries
  
			
		
	
		
			
				
					                    std : : map < size_t ,  std : : vector < std : : vector < size_t > > >  emptySymmetry ;  
			
		
	
		
			
				
					                    storm : : storage : : DFTIndependentSymmetries  symmetries ( emptySymmetry ) ;  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -269,7 +259,7 @@ namespace storm { 
			
		
	
		
			
				
					                // No composition was possible
  
			
		
	
		
			
				
					                explorationTimer . start ( ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                dft . setRelevantEvents ( relevantEvents ,  allowDCForRelevantEvents ) ;  
			
		
	
		
			
				
					                dft . setRelevantEvents ( relevantEvents ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                // Find symmetries
  
			
		
	
		
			
				
					                std : : map < size_t ,  std : : vector < std : : vector < size_t > > >  emptySymmetry ;  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -299,17 +289,13 @@ namespace storm { 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        template < typename  ValueType >  
			
		
	
		
			
				
					        typename  DFTModelChecker < ValueType > : : dft_results  
			
		
	
		
			
				
					        DFTModelChecker < ValueType > : : checkDFT ( storm : : storage : : DFT < ValueType >  const  & dft ,  
			
		
	
		
			
				
					                                             property_vector  const  & properties ,  bool  symred ,  
			
		
	
		
			
				
					                                             std : : set < size_t >  const  & relevantEvents ,  bool  allowDCForRelevantEvents ,  
			
		
	
		
			
				
					                                             double  approximationError ,  
			
		
	
		
			
				
					                                             storm : : builder : : ApproximationHeuristic  approximationHeuristic ,  
			
		
	
		
			
				
					                                             bool  eliminateChains ,  storm : : transformer : : EliminationLabelBehavior  labelBehavior )  {  
			
		
	
		
			
				
					        DFTModelChecker < ValueType > : : checkDFT ( storm : : storage : : DFT < ValueType >  const  & dft ,  property_vector  const  & properties ,  bool  symred ,  storm : : utility : : RelevantEvents  const &  relevantEvents ,  
			
		
	
		
			
				
					                                             double  approximationError ,  storm : : builder : : ApproximationHeuristic  approximationHeuristic ,  bool  eliminateChains ,  storm : : transformer : : EliminationLabelBehavior  labelBehavior )  {  
			
		
	
		
			
				
					            explorationTimer . start ( ) ;  
			
		
	
		
			
				
					            auto  ioSettings  =  storm : : settings : : getModule < storm : : settings : : modules : : IOSettings > ( ) ;  
			
		
	
		
			
				
					            auto  dftIOSettings  =  storm : : settings : : getModule < storm : : settings : : modules : : DftIOSettings > ( ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            dft . setRelevantEvents ( relevantEvents ,  allowDCForRelevantEvents ) ;  
			
		
	
		
			
				
					            dft . setRelevantEvents ( relevantEvents ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            // Find symmetries
  
			
		
	
		
			
				
					            std : : map < size_t ,  std : : vector < std : : vector < size_t > > >  emptySymmetry ;