@ -1,5 +1,7 @@ 
			
		 
		
	
		
			
				 
				 
				# include  "src/modelchecker/abstraction/GameBasedMdpModelChecker.h" 
  
				 
				 
				# include  "src/modelchecker/abstraction/GameBasedMdpModelChecker.h" 
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				# include  "src/storage/expressions/ExpressionManager.h" 
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
				# include  "src/utility/macros.h" 
  
				 
				 
				# include  "src/utility/macros.h" 
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
				# include  "src/exceptions/NotSupportedException.h" 
  
				 
				 
				# include  "src/exceptions/NotSupportedException.h" 
  
			
		 
		
	
	
		
			
				
					
						
							 
						 
					
					
						
							 
						 
					
					
				 
				@ -30,8 +32,7 @@ namespace storm { 
			
		 
		
	
		
			
				 
				 
				        bool  GameBasedMdpModelChecker < Type ,  ValueType > : : canHandle ( CheckTask < storm : : logic : : Formula >  const &  checkTask )  const  {  
				 
				 
				        bool  GameBasedMdpModelChecker < Type ,  ValueType > : : canHandle ( CheckTask < storm : : logic : : Formula >  const &  checkTask )  const  {  
			
		 
		
	
		
			
				 
				 
				            storm : : logic : : Formula  const &  formula  =  checkTask . getFormula ( ) ;  
				 
				 
				            storm : : logic : : Formula  const &  formula  =  checkTask . getFormula ( ) ;  
			
		 
		
	
		
			
				 
				 
				            if  ( formula . isProbabilityOperatorFormula ( ) )  {  
				 
				 
				            if  ( formula . isProbabilityOperatorFormula ( ) )  {  
			
		 
		
	
		
			
				 
				 
				                storm : : logic : : ProbabilityOperatorFormula  const &  probabilityOperatorFormula  =  formula . asProbabilityOperatorFormula ( ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				                return  this - > canHandle ( checkTask . replaceFormula ( probabilityOperatorFormula . getSubformula ( ) ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                return  this - > canHandle ( checkTask . replaceFormula ( formula . asProbabilityOperatorFormula ( ) . getSubformula ( ) ) ) ;  
			
		 
		
	
		
			
				 
				 
				            }  else  if  ( formula . isUntilFormula ( )  | |  formula . isEventuallyFormula ( ) )  {  
				 
				 
				            }  else  if  ( formula . isUntilFormula ( )  | |  formula . isEventuallyFormula ( ) )  {  
			
		 
		
	
		
			
				 
				 
				                if  ( formula . isUntilFormula ( ) )  {  
				 
				 
				                if  ( formula . isUntilFormula ( ) )  {  
			
		 
		
	
		
			
				 
				 
				                    storm : : logic : : UntilFormula  const &  untilFormula  =  formula . asUntilFormula ( ) ;  
				 
				 
				                    storm : : logic : : UntilFormula  const &  untilFormula  =  formula . asUntilFormula ( ) ;  
			
		 
		
	
	
		
			
				
					
					
					
						
							 
						 
					
				 
				@ -48,38 +49,33 @@ namespace storm { 
			
		 
		
	
		
			
				 
				 
				            return  false ;  
				 
				 
				            return  false ;  
			
		 
		
	
		
			
				 
				 
				        }  
				 
				 
				        }  
			
		 
		
	
		
			
				 
				 
				                 
				 
				 
				                 
			
		 
		
	
		
			
				 
				 
				        template < storm : : dd : : DdType  Type ,  typename  ValueType >  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				        std : : unique_ptr < CheckResult >  GameBasedMdpModelChecker < Type ,  ValueType > : : checkProbabilityOperatorFormula ( CheckTask < storm : : logic : : ProbabilityOperatorFormula >  const &  checkTask )  {  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				            // Depending on whether or not there is a bound, we do something slightly different here.
  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				            return  nullptr ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				        }  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				         
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				        template < storm : : dd : : DdType  Type ,  typename  ValueType >  
				 
				 
				        template < storm : : dd : : DdType  Type ,  typename  ValueType >  
			
		 
		
	
		
			
				 
				 
				        std : : unique_ptr < CheckResult >  GameBasedMdpModelChecker < Type ,  ValueType > : : computeUntilProbabilities ( CheckTask < storm : : logic : : UntilFormula >  const &  checkTask )  {  
				 
				 
				        std : : unique_ptr < CheckResult >  GameBasedMdpModelChecker < Type ,  ValueType > : : computeUntilProbabilities ( CheckTask < storm : : logic : : UntilFormula >  const &  checkTask )  {  
			
		 
		
	
		
			
				 
				 
				            // TODO
  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				            return  n ullp tr;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            storm : : logic : : UntilFormula  const &  pathFormula  =  checkTask . getFormula ( ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            return  performGameBasedAbstractionRefinement ( CheckTask < storm : : logic : : Formula > ( pathFormula ) ,  getExpression ( pathFormula . getLeftSubformula ( ) ) ,  getExpression ( pathFormula . getRightSubformula ( ) ) ) ;  
			
		 
		
	
		
			
				 
				 
				        }  
				 
				 
				        }  
			
		 
		
	
		
			
				 
				 
				         
				 
				 
				         
			
		 
		
	
		
			
				 
				 
				        template < storm : : dd : : DdType  Type ,  typename  ValueType >  
				 
				 
				        template < storm : : dd : : DdType  Type ,  typename  ValueType >  
			
		 
		
	
		
			
				 
				 
				        std : : unique_ptr < CheckResult >  GameBasedMdpModelChecker < Type ,  ValueType > : : computeEventuallyProbabilities ( CheckTask < storm : : logic : : EventuallyFormula >  const &  checkTask )  {  
				 
				 
				        std : : unique_ptr < CheckResult >  GameBasedMdpModelChecker < Type ,  ValueType > : : computeEventuallyProbabilities ( CheckTask < storm : : logic : : EventuallyFormula >  const &  checkTask )  {  
			
		 
		
	
		
			
				 
				 
				            storm : : logic : : EventuallyFormula  const &  pathFormula  =  checkTask . getFormula ( ) ;  
				 
				 
				            storm : : logic : : EventuallyFormula  const &  pathFormula  =  checkTask . getFormula ( ) ;  
			
		 
		
	
		
			
				 
				 
				            storm : : logic : : Formula  const &  subformula  =  pathFormula . getSubformula ( ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				            STORM_LOG_THROW ( subformula . isAtomicExpressionFormula ( )  | |  subformula . isAtomicLabelFormula ( ) ,  storm : : exceptions : : InvalidPropertyException ,  " The target states have to be given as label or an expression. " ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				            storm : : expressions : : Expression  targetStateExpression ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				            if  ( subformula . isAtomicLabelFormula ( ) )  {  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				                targetStateExpression  =  preprocessedProgram . getLabelExpression ( subformula . asAtomicLabelFormula ( ) . getLabel ( ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				            }  else  {  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				                targetStateExpression  =  subformula . asAtomicExpressionFormula ( ) . getExpression ( ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            return  performGameBasedAbstractionRefinement ( CheckTask < storm : : logic : : Formula > ( pathFormula ) ,  originalProgram . getManager ( ) . boolean ( true ) ,  getExpression ( pathFormula . getSubformula ( ) ) ) ;  
			
		 
		
	
		
			
				 
				 
				        }  
				 
				 
				        }  
			
		 
		
	
		
			
				 
				 
				         
				 
				 
				         
			
		 
		
	
		
			
				 
				 
				            performGameBasedAbstractionRefinement ( CheckTask  < storm : : logic : : Formula > ( pathFormula ) ,  targetStateExpression ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				
  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				        template < storm : : dd : : DdType  Type ,  typename  ValueType >  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				        std : : unique_ptr < CheckResult >  GameBasedMdpModelChecker < Type ,  ValueType > : : performGameBasedAbstractionRefinement ( CheckTask < storm : : logic : : Formula >  const &  checkTask ,  storm : : expressions : : Expression  const &  constraintExpression ,  storm : : expressions : : Expression  const &  targetStateExpression )  {  
			
		 
		
	
		
			
				 
				 
				            return  nullptr ;  
				 
				 
				            return  nullptr ;  
			
		 
		
	
		
			
				 
				 
				        }  
				 
				 
				        }  
			
		 
		
	
		
			
				 
				 
				         
				 
				 
				         
			
		 
		
	
		
			
				 
				 
				        template < storm : : dd : : DdType  Type ,  typename  ValueType >  
				 
				 
				        template < storm : : dd : : DdType  Type ,  typename  ValueType >  
			
		 
		
	
		
			
				 
				 
				        void  GameBasedMdpModelChecker < Type ,  ValueType > : : performGameBasedAbstractionRefinement ( CheckTask < storm : : logic : : Formula >  const &  checkTask ,  storm : : expressions : : Expression  const &  targetStateExpression )  {  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				            std : : cout  < <  " hello world "  < <  std : : endl ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				        storm : : expressions : : Expression  GameBasedMdpModelChecker < Type ,  ValueType > : : getExpression ( storm : : logic : : Formula  const &  formula )  {  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            STORM_LOG_THROW ( formula . isAtomicExpressionFormula ( )  | |  formula . isAtomicLabelFormula ( ) ,  storm : : exceptions : : InvalidPropertyException ,  " The target states have to be given as label or an expression. " ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            storm : : expressions : : Expression  result ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            if  ( formula . isAtomicLabelFormula ( ) )  {  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                result  =  preprocessedProgram . getLabelExpression ( formula . asAtomicLabelFormula ( ) . getLabel ( ) ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            }  else  {  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                result  =  formula . asAtomicExpressionFormula ( ) . getExpression ( ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            }  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            return  result ;  
			
		 
		
	
		
			
				 
				 
				        }  
				 
				 
				        }  
			
		 
		
	
		
			
				 
				 
				         
				 
				 
				         
			
		 
		
	
		
			
				 
				 
				        template  class  GameBasedMdpModelChecker < storm : : dd : : DdType : : CUDD ,  double > ;  
				 
				 
				        template  class  GameBasedMdpModelChecker < storm : : dd : : DdType : : CUDD ,  double > ;