@ -458,6 +458,12 @@ namespace storm { 
			
		
	
		
			
				
					                     
			
		
	
		
			
				
					                    / /  Now  check  for  possible  backward  cuts .  
			
		
	
		
			
				
					                    for  ( auto  const &  labelSetAndPrecedingLabelSetsPair  :  precedingLabels )  {  
			
		
	
		
			
				
					                        bool  backwardImplicationAdded  =  false ;  
			
		
	
		
			
				
					/ /                         std : : cout  < <  " labelSetAndPrecedingLabelSetsPair.first  " ;  
			
		
	
		
			
				
					/ /                         for  ( auto  const &  e  :  labelSetAndPrecedingLabelSetsPair . first )  {  
			
		
	
		
			
				
					/ /                             std : : cout  < <  e  < <  " ,  " ;  
			
		
	
		
			
				
					/ /                         }  
			
		
	
		
			
				
					/ /                         std : : cout  < <  std : : endl ;  
			
		
	
		
			
				
					                        / /  Find  out  the  commands  for  the  currently  considered  label  set .  
			
		
	
		
			
				
					                        storm : : expressions : : Expression  guardConjunction ;  
			
		
	
		
			
				
					                         
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -510,15 +516,18 @@ namespace storm { 
			
		
	
		
			
				
					                        / /  If  the  solver  reports  unsat ,  then  we  know  that  the  current  selection  is  not  enabled  in  the  initial  state .  
			
		
	
		
			
				
					                        if  ( checkResult  = =  storm : : solver : : SmtSolver : : CheckResult : : Unsat )  {  
			
		
	
		
			
				
					                            STORM_LOG_DEBUG ( " Selection not enabled in initial state. " ) ;  
			
		
	
		
			
				
					                             
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                            / / std : : cout  < <  " not gc:  "  < <  ! guardConjunction  < <  std : : endl ;  
			
		
	
		
			
				
					                            localSolver - > add ( ! guardConjunction ) ;  
			
		
	
		
			
				
					                            STORM_LOG_DEBUG ( " Asserted disjunction of negated guards. " ) ;  
			
		
	
		
			
				
					                             
			
		
	
		
			
				
					                             
			
		
	
		
			
				
					                            / /  Now  check  the  possible  preceding  label  sets  for  the  essential  ones .  
			
		
	
		
			
				
					                            for  ( auto  const &  precedingLabelSet  :  labelSetAndPrecedingLabelSetsPair . second )  {  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                                if  ( labelSetAndPrecedingLabelSetsPair . first  = =  precedingLabelSet )  continue ;  
			
		
	
		
			
				
					                                 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                                / / std : : cout  < <  " push "  < <  std : : endl ;  
			
		
	
		
			
				
					                                / /  Create  a  restore  point  so  we  can  easily  pop - off  all  weakest  precondition  expressions .  
			
		
	
		
			
				
					                                localSolver - > push ( ) ;  
			
		
	
		
			
				
					                                 
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -576,7 +585,9 @@ namespace storm { 
			
		
	
		
			
				
					                                        }  
			
		
	
		
			
				
					                                    }  
			
		
	
		
			
				
					                                }  
			
		
	
		
			
				
					                                 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                                / / std : : cout  < <  " pgc:  "  < <  preceedingGuardConjunction  < <  std : : endl ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                                / /  Assert  all  the  guards  of  the  preceding  command  set .  
			
		
	
		
			
				
					                                localSolver - > add ( preceedingGuardConjunction ) ;  
			
		
	
		
			
				
					                                 
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -624,11 +635,15 @@ namespace storm { 
			
		
	
		
			
				
					                                assertDisjunction ( * localSolver ,  formulae ,  symbolicModel . isPrismProgram ( )  ?  symbolicModel . asPrismProgram ( ) . getManager ( )  :  symbolicModel . asJaniModel ( ) . getManager ( ) ) ;  
			
		
	
		
			
				
					                                 
			
		
	
		
			
				
					                                STORM_LOG_DEBUG ( " Asserted disjunction of all weakest preconditions. " ) ;  
			
		
	
		
			
				
					                                 
			
		
	
		
			
				
					                                if  ( localSolver - > check ( )  = =  storm : : solver : : SmtSolver : : CheckResult : : Sat )  {  
			
		
	
		
			
				
					                                storm : : solver : : SmtSolver : : CheckResult  result  =  localSolver - > check ( ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                                if  ( result  = =  storm : : solver : : SmtSolver : : CheckResult : : Sat )  {  
			
		
	
		
			
				
					                                    backwardImplications [ labelSetAndPrecedingLabelSetsPair . first ] . insert ( precedingLabelSet ) ;  
			
		
	
		
			
				
					                                    backwardImplicationAdded  =  true ;  
			
		
	
		
			
				
					                                }  else  if  ( result  = =  storm : : solver : : SmtSolver : : CheckResult : : Unknown )  {  
			
		
	
		
			
				
					                                    STORM_LOG_ERROR ( " The SMT solver does not come to a conclusive answer. Does your model contain integer division? " ) ;  
			
		
	
		
			
				
					                                }  
			
		
	
		
			
				
					                                 
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					                                localSolver - > pop ( ) ;  
			
		
	
		
			
				
					                            }  
			
		
	
		
			
				
					                             
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -637,6 +652,7 @@ namespace storm { 
			
		
	
		
			
				
					                        }  else  {  
			
		
	
		
			
				
					                            STORM_LOG_DEBUG ( " Selection is enabled in initial state. " ) ;  
			
		
	
		
			
				
					                        }  
			
		
	
		
			
				
					                        STORM_LOG_ERROR_COND ( backwardImplicationAdded ,  " Error in adding cuts for counterexample generation (backward implication misses a label set). " ) ;  
			
		
	
		
			
				
					                    }  
			
		
	
		
			
				
					                }  else  if  ( symbolicModel . isJaniModel ( ) )  {  
			
		
	
		
			
				
					                    STORM_LOG_WARN ( " Model uses assignment levels, did not assert backward implications. " ) ;  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -1697,6 +1713,7 @@ namespace storm { 
			
		
	
		
			
				
					                        labelSets [ choice ]  =  choiceOrigins . getEdgeIndexSet ( choice ) ;  
			
		
	
		
			
				
					                    }  
			
		
	
		
			
				
					                }  
			
		
	
		
			
				
					                assert ( labelSets . size ( )  = =  model . getNumberOfChoices ( ) ) ;  
			
		
	
		
			
				
					                 
			
		
	
		
			
				
					                / /  ( 1 )  Check  whether  its  possible  to  exceed  the  threshold  if  checkThresholdFeasible  is  set .  
			
		
	
		
			
				
					                double  maximalReachabilityProbability  =  0 ;  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -1764,7 +1781,7 @@ namespace storm { 
			
		
	
		
			
				
					                    solverClock  =  std : : chrono : : high_resolution_clock : : now ( ) ;  
			
		
	
		
			
				
					                    commandSet  =  findSmallestCommandSet ( * solver ,  variableInformation ,  currentBound ) ;  
			
		
	
		
			
				
					                    totalSolverTime  + =  std : : chrono : : high_resolution_clock : : now ( )  -  solverClock ;  
			
		
	
		
			
				
					                    STORM_LOG_DEBUG ( " Computed minimal command set of size  "  < <  ( commandSet . size ( )  +  relevancyInformation . knownLabels . size ( ) )  < <  " . " ) ;  
			
		
	
		
			
				
					                    STORM_LOG_DEBUG ( " Computed minimal command set of size  "  < <    commandSet . size ( )  +  relevancyInformation . knownLabels . size ( )  < <  "  ( "  < <  commandSet . size (  )  < <  "  +  "  < <  relevancyInformation . knownLabels . size ( )  < <  " )  " ) ;  
			
		
	
		
			
				
					                     
			
		
	
		
			
				
					                    / /  Restrict  the  given  model  to  the  current  set  of  labels  and  compute  the  reachability  probability .  
			
		
	
		
			
				
					                    modelCheckingClock  =  std : : chrono : : high_resolution_clock : : now ( ) ;