@ -34,13 +34,13 @@ namespace storm { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					         
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        template < typename  SparseDtmcModelType >  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        bool  SparseDtmcPrctlModelChecker < SparseDtmcModelType > : : canHandle ( CheckTask < storm : : logic : : Formula >  const &  checkTask )  const  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        bool  SparseDtmcPrctlModelChecker < SparseDtmcModelType > : : canHandle ( CheckTask < storm : : logic : : Formula ,  ValueType >  const &  checkTask )  const  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            storm : : logic : : Formula  const &  formula  =  checkTask . getFormula ( ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            return  formula . isInFragment ( storm : : logic : : prctl ( ) . setLongRunAverageRewardFormulasAllowed ( false ) . setLongRunAverageProbabilitiesAllowed ( true ) . setConditionalProbabilityFormulasAllowed ( true ) . setConditionalRewardFormulasAllowed ( true ) . setOnlyEventuallyFormuluasInConditionalFormulasAllowed ( true ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					         
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        template < typename  SparseDtmcModelType >  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        std : : unique_ptr < CheckResult >  SparseDtmcPrctlModelChecker < SparseDtmcModelType > : : computeBoundedUntilProbabilities ( CheckTask < storm : : logic : : BoundedUntilFormula >  const &  checkTask )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        std : : unique_ptr < CheckResult >  SparseDtmcPrctlModelChecker < SparseDtmcModelType > : : computeBoundedUntilProbabilities ( CheckTask < storm : : logic : : BoundedUntilFormula ,  ValueType >  const &  checkTask )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            storm : : logic : : BoundedUntilFormula  const &  pathFormula  =  checkTask . getFormula ( ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            STORM_LOG_THROW ( pathFormula . hasDiscreteTimeBound ( ) ,  storm : : exceptions : : InvalidPropertyException ,  " Formula needs to have a discrete time bound. " ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            std : : unique_ptr < CheckResult >  leftResultPointer  =  this - > check ( pathFormula . getLeftSubformula ( ) ) ;  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -53,7 +53,7 @@ namespace storm { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					         
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        template < typename  SparseDtmcModelType >  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        std : : unique_ptr < CheckResult >  SparseDtmcPrctlModelChecker < SparseDtmcModelType > : : computeNextProbabilities ( CheckTask < storm : : logic : : NextFormula >  const &  checkTask )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        std : : unique_ptr < CheckResult >  SparseDtmcPrctlModelChecker < SparseDtmcModelType > : : computeNextProbabilities ( CheckTask < storm : : logic : : NextFormula ,  ValueType >  const &  checkTask )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            storm : : logic : : NextFormula  const &  pathFormula  =  checkTask . getFormula ( ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            std : : unique_ptr < CheckResult >  subResultPointer  =  this - > check ( pathFormula . getSubformula ( ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            ExplicitQualitativeCheckResult  const &  subResult  =  subResultPointer - > asExplicitQualitativeCheckResult ( ) ;  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -62,7 +62,7 @@ namespace storm { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					         
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        template < typename  SparseDtmcModelType >  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        std : : unique_ptr < CheckResult >  SparseDtmcPrctlModelChecker < SparseDtmcModelType > : : computeUntilProbabilities ( CheckTask < storm : : logic : : UntilFormula >  const &  checkTask )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        std : : unique_ptr < CheckResult >  SparseDtmcPrctlModelChecker < SparseDtmcModelType > : : computeUntilProbabilities ( CheckTask < storm : : logic : : UntilFormula ,  ValueType >  const &  checkTask )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            storm : : logic : : UntilFormula  const &  pathFormula  =  checkTask . getFormula ( ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            std : : unique_ptr < CheckResult >  leftResultPointer  =  this - > check ( pathFormula . getLeftSubformula ( ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            std : : unique_ptr < CheckResult >  rightResultPointer  =  this - > check ( pathFormula . getRightSubformula ( ) ) ;  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -73,7 +73,7 @@ namespace storm { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					         
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        template < typename  SparseDtmcModelType >  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        std : : unique_ptr < CheckResult >  SparseDtmcPrctlModelChecker < SparseDtmcModelType > : : computeGloballyProbabilities ( CheckTask < storm : : logic : : GloballyFormula >  const &  checkTask )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        std : : unique_ptr < CheckResult >  SparseDtmcPrctlModelChecker < SparseDtmcModelType > : : computeGloballyProbabilities ( CheckTask < storm : : logic : : GloballyFormula ,  ValueType >  const &  checkTask )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            storm : : logic : : GloballyFormula  const &  pathFormula  =  checkTask . getFormula ( ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            std : : unique_ptr < CheckResult >  subResultPointer  =  this - > check ( pathFormula . getSubformula ( ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            ExplicitQualitativeCheckResult  const &  subResult  =  subResultPointer - > asExplicitQualitativeCheckResult ( ) ;  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -82,7 +82,7 @@ namespace storm { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					         
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        template < typename  SparseDtmcModelType >  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        std : : unique_ptr < CheckResult >  SparseDtmcPrctlModelChecker < SparseDtmcModelType > : : computeCumulativeRewards ( storm : : logic : : RewardMeasureType  rewardMeasureType ,  CheckTask < storm : : logic : : CumulativeRewardFormula >  const &  checkTask )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        std : : unique_ptr < CheckResult >  SparseDtmcPrctlModelChecker < SparseDtmcModelType > : : computeCumulativeRewards ( storm : : logic : : RewardMeasureType  rewardMeasureType ,  CheckTask < storm : : logic : : CumulativeRewardFormula ,  ValueType >  const &  checkTask )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            storm : : logic : : CumulativeRewardFormula  const &  rewardPathFormula  =  checkTask . getFormula ( ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            STORM_LOG_THROW ( rewardPathFormula . hasDiscreteTimeBound ( ) ,  storm : : exceptions : : InvalidPropertyException ,  " Formula needs to have a discrete time bound. " ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            std : : vector < ValueType >  numericResult  =  storm : : modelchecker : : helper : : SparseDtmcPrctlHelper < ValueType > : : computeCumulativeRewards ( this - > getModel ( ) . getTransitionMatrix ( ) ,  checkTask . isRewardModelSet ( )  ?  this - > getModel ( ) . getRewardModel ( checkTask . getRewardModel ( ) )  :  this - > getModel ( ) . getRewardModel ( " " ) ,  rewardPathFormula . getDiscreteTimeBound ( ) ,  * linearEquationSolverFactory ) ;  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -90,7 +90,7 @@ namespace storm { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					         
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        template < typename  SparseDtmcModelType >  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        std : : unique_ptr < CheckResult >  SparseDtmcPrctlModelChecker < SparseDtmcModelType > : : computeInstantaneousRewards ( storm : : logic : : RewardMeasureType  rewardMeasureType ,  CheckTask < storm : : logic : : InstantaneousRewardFormula >  const &  checkTask )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        std : : unique_ptr < CheckResult >  SparseDtmcPrctlModelChecker < SparseDtmcModelType > : : computeInstantaneousRewards ( storm : : logic : : RewardMeasureType  rewardMeasureType ,  CheckTask < storm : : logic : : InstantaneousRewardFormula ,  ValueType >  const &  checkTask )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            storm : : logic : : InstantaneousRewardFormula  const &  rewardPathFormula  =  checkTask . getFormula ( ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            STORM_LOG_THROW ( rewardPathFormula . hasDiscreteTimeBound ( ) ,  storm : : exceptions : : InvalidPropertyException ,  " Formula needs to have a discrete time bound. " ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            std : : vector < ValueType >  numericResult  =  storm : : modelchecker : : helper : : SparseDtmcPrctlHelper < ValueType > : : computeInstantaneousRewards ( this - > getModel ( ) . getTransitionMatrix ( ) ,  checkTask . isRewardModelSet ( )  ?  this - > getModel ( ) . getRewardModel ( checkTask . getRewardModel ( ) )  :  this - > getModel ( ) . getRewardModel ( " " ) ,  rewardPathFormula . getDiscreteTimeBound ( ) ,  * linearEquationSolverFactory ) ;  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -98,7 +98,7 @@ namespace storm { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					         
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        template < typename  SparseDtmcModelType >  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        std : : unique_ptr < CheckResult >  SparseDtmcPrctlModelChecker < SparseDtmcModelType > : : computeReachabilityRewards ( storm : : logic : : RewardMeasureType  rewardMeasureType ,  CheckTask < storm : : logic : : EventuallyFormula >  const &  checkTask )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        std : : unique_ptr < CheckResult >  SparseDtmcPrctlModelChecker < SparseDtmcModelType > : : computeReachabilityRewards ( storm : : logic : : RewardMeasureType  rewardMeasureType ,  CheckTask < storm : : logic : : EventuallyFormula ,  ValueType >  const &  checkTask )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            storm : : logic : : EventuallyFormula  const &  eventuallyFormula  =  checkTask . getFormula ( ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            std : : unique_ptr < CheckResult >  subResultPointer  =  this - > check ( eventuallyFormula . getSubformula ( ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            ExplicitQualitativeCheckResult  const &  subResult  =  subResultPointer - > asExplicitQualitativeCheckResult ( ) ;  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -107,7 +107,7 @@ namespace storm { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        template < typename  SparseDtmcModelType >  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        std : : unique_ptr < CheckResult >  SparseDtmcPrctlModelChecker < SparseDtmcModelType > : : computeLongRunAverageProbabilities ( CheckTask < storm : : logic : : StateFormula >  const &  checkTask )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        std : : unique_ptr < CheckResult >  SparseDtmcPrctlModelChecker < SparseDtmcModelType > : : computeLongRunAverageProbabilities ( CheckTask < storm : : logic : : StateFormula ,  ValueType >  const &  checkTask )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            storm : : logic : : StateFormula  const &  stateFormula  =  checkTask . getFormula ( ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            std : : unique_ptr < CheckResult >  subResultPointer  =  this - > check ( stateFormula ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            ExplicitQualitativeCheckResult  const &  subResult  =  subResultPointer - > asExplicitQualitativeCheckResult ( ) ;  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -116,7 +116,7 @@ namespace storm { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					         
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        template < typename  SparseDtmcModelType >  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        std : : unique_ptr < CheckResult >  SparseDtmcPrctlModelChecker < SparseDtmcModelType > : : computeConditionalProbabilities ( CheckTask < storm : : logic : : ConditionalFormula >  const &  checkTask )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        std : : unique_ptr < CheckResult >  SparseDtmcPrctlModelChecker < SparseDtmcModelType > : : computeConditionalProbabilities ( CheckTask < storm : : logic : : ConditionalFormula ,  ValueType >  const &  checkTask )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            storm : : logic : : ConditionalFormula  const &  conditionalFormula  =  checkTask . getFormula ( ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            STORM_LOG_THROW ( conditionalFormula . getSubformula ( ) . isEventuallyFormula ( ) ,  storm : : exceptions : : InvalidPropertyException ,  " Illegal conditional probability formula. " ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            STORM_LOG_THROW ( conditionalFormula . getConditionFormula ( ) . isEventuallyFormula ( ) ,  storm : : exceptions : : InvalidPropertyException ,  " Illegal conditional probability formula. " ) ;  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -131,7 +131,7 @@ namespace storm { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					         
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        template < typename  SparseDtmcModelType >  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        std : : unique_ptr < CheckResult >  SparseDtmcPrctlModelChecker < SparseDtmcModelType > : : computeConditionalRewards ( storm : : logic : : RewardMeasureType  rewardMeasureType ,  CheckTask < storm : : logic : : ConditionalFormula >  const &  checkTask )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        std : : unique_ptr < CheckResult >  SparseDtmcPrctlModelChecker < SparseDtmcModelType > : : computeConditionalRewards ( storm : : logic : : RewardMeasureType  rewardMeasureType ,  CheckTask < storm : : logic : : ConditionalFormula ,  ValueType >  const &  checkTask )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            storm : : logic : : ConditionalFormula  const &  conditionalFormula  =  checkTask . getFormula ( ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            STORM_LOG_THROW ( conditionalFormula . getSubformula ( ) . isReachabilityRewardFormula ( ) ,  storm : : exceptions : : InvalidPropertyException ,  " Illegal conditional probability formula. " ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            STORM_LOG_THROW ( conditionalFormula . getConditionFormula ( ) . isEventuallyFormula ( ) ,  storm : : exceptions : : InvalidPropertyException ,  " Illegal conditional probability formula. " ) ;