@ -179,32 +179,56 @@ namespace storm { 
		
	
		
			
				            return  opDecl ;             return  opDecl ;  
		
	
		
			
				        }         }  
		
	
		
			
				        boost : : any  FormulaToJaniJson : : visit ( storm : : logic : : BoundedUntilFormula  const &  f ,  boost : : any  const &  data )  const  {         boost : : any  FormulaToJaniJson : : visit ( storm : : logic : : BoundedUntilFormula  const &  f ,  boost : : any  const &  data )  const  {  
		
	
		
			
				            STORM_LOG_THROW ( ! f . hasMultiDimensionalSubformulas ( ) ,  storm : : exceptions : : NotSupportedException ,  " Jani export of multi-dimensional bounded until formulas is not supported. " ) ;  
		
	
		
			
				            modernjson : : json  opDecl ;             modernjson : : json  opDecl ;  
		
	
		
			
				            opDecl [ " op " ]  =  " U " ;             opDecl [ " op " ]  =  " U " ;  
		
	
		
			
				            opDecl [ " left " ]  =  boost : : any_cast < modernjson : : json > ( f . getLeftSubformula ( ) . accept ( * this ,  data ) ) ;             opDecl [ " left " ]  =  boost : : any_cast < modernjson : : json > ( f . getLeftSubformula ( ) . accept ( * this ,  data ) ) ;  
		
	
		
			
				            opDecl [ " right " ]  =  boost : : any_cast < modernjson : : json > ( f . getRightSubformula ( ) . accept ( * this ,  data ) ) ;             opDecl [ " right " ]  =  boost : : any_cast < modernjson : : json > ( f . getRightSubformula ( ) . accept ( * this ,  data ) ) ;  
		
	
		
			
				                         
		
	
		
			
				            boost : : optional < storm : : expressions : : Expression >  lower ,  upper ;  
		
	
		
			
				            boost : : optional < bool >  lowerExclusive ,  upperExclusive ;  
		
	
		
			
				            if  ( f . hasLowerBound ( ) )  {  
		
	
		
			
				                lower  =  f . getLowerBound ( ) ;  
		
	
		
			
				                lowerExclusive  =  f . isLowerBoundStrict ( ) ;  
		
	
		
			
				            }  
		
	
		
			
				            if  ( f . hasUpperBound ( ) )  {  
		
	
		
			
				                upper  =  f . getUpperBound ( ) ;  
		
	
		
			
				                upperExclusive  =  f . isUpperBoundStrict ( ) ;  
		
	
		
			
				            bool  hasStepBounds ( false ) ,  hasTimeBounds ( false ) ;  
		
	
		
			
				            std : : vector < modernjson : : json >  rewardBounds ;  
		
	
		
			
				             
		
	
		
			
				            for  ( uint64_t  i  =  0 ;  i  <  f . getDimension ( ) ;  + + i )  {  
		
	
		
			
				                boost : : optional < storm : : expressions : : Expression >  lower ,  upper ;  
		
	
		
			
				                boost : : optional < bool >  lowerExclusive ,  upperExclusive ;  
		
	
		
			
				                if  ( f . hasLowerBound ( i ) )  {  
		
	
		
			
				                    lower  =  f . getLowerBound ( i ) ;  
		
	
		
			
				                    lowerExclusive  =  f . isLowerBoundStrict ( i ) ;  
		
	
		
			
				                }  
		
	
		
			
				                if  ( f . hasUpperBound ( i ) )  {  
		
	
		
			
				                    upper  =  f . getUpperBound ( i ) ;  
		
	
		
			
				                    upperExclusive  =  f . isUpperBoundStrict ( i ) ;  
		
	
		
			
				                }  
		
	
		
			
				                modernjson : : json  propertyInterval  =  constructPropertyInterval ( lower ,  lowerExclusive ,  upper ,  upperExclusive ) ;  
		
	
		
			
				     
		
	
		
			
				                auto  tbr  =  f . getTimeBoundReference ( i ) ;  
		
	
		
			
				                if  ( tbr . isStepBound ( ) )  {  
		
	
		
			
				                    STORM_LOG_THROW ( ! hasStepBounds ,  storm : : exceptions : : NotSupportedException ,  " Jani export of until formulas with multiple step bounds is not supported. " ) ;  
		
	
		
			
				                    hasStepBounds  =  true ;  
		
	
		
			
				                    opDecl [ " step-bounds " ]  =  propertyInterval ;  
		
	
		
			
				                }  else  if ( tbr . isRewardBound ( ) )  {  
		
	
		
			
				                    modernjson : : json  rewbound ;  
		
	
		
			
				                    rewbound [ " exp " ]  =  tbr . getRewardName ( ) ;  
		
	
		
			
				                    std : : vector < std : : string >  accvec ;  
		
	
		
			
				                    if  ( model . isDiscreteTimeModel ( ) )  {  
		
	
		
			
				                        accvec . push_back ( " steps " ) ;  
		
	
		
			
				                    }  else  {  
		
	
		
			
				                        accvec . push_back ( " time " ) ;  
		
	
		
			
				                    }  
		
	
		
			
				                    rewbound [ " accumulate " ]  =  modernjson : : json ( accvec ) ;  
		
	
		
			
				                    rewbound [ " bounds " ]  =  propertyInterval ;  
		
	
		
			
				                    rewardBounds . push_back ( std : : move ( rewbound ) ) ;  
		
	
		
			
				                }  else  {  
		
	
		
			
				                    STORM_LOG_THROW ( ! hasTimeBounds ,  storm : : exceptions : : NotSupportedException ,  " Jani export of until formulas with multiple step bounds is not supported. " ) ;  
		
	
		
			
				                    hasTimeBounds  =  true ;  
		
	
		
			
				                    opDecl [ " time-bounds " ]  =  propertyInterval ;  
		
	
		
			
				                }  
		
	
		
			
				            }             }  
		
	
		
			
				            modernjson : : json  propertyInterval  =  constructPropertyInterval ( lower ,  lowerExclusive ,  upper ,  upperExclusive ) ;  
		
	
		
			
				
 
		
	
		
			
				            auto  tbr  =  f . getTimeBoundReference ( ) ;  
		
	
		
			
				            if  ( tbr . isStepBound ( ) )  {  
		
	
		
			
				                opDecl [ " step-bounds " ]  =  propertyInterval ;  
		
	
		
			
				            }  else  if ( tbr . isRewardBound ( ) )  {  
		
	
		
			
				                opDecl [ " reward-bounds " ]  =  propertyInterval ;  
		
	
		
			
				            }  else  {  
		
	
		
			
				                opDecl [ " time-bounds " ]  =  propertyInterval ;  
		
	
		
			
				            if  ( ! rewardBounds . empty ( ) )  {  
		
	
		
			
				                opDecl [ " reward-bounds " ]  =  modernjson : : json ( rewardBounds ) ;  
		
	
		
			
				            }             }  
		
	
		
			
				            return  opDecl ;             return  opDecl ;  
		
	
		
			
				
 
		
	
		
			
				        }         }  
		
	
		
			
				                 
		
	
		
			
				        boost : : any  FormulaToJaniJson : : visit ( storm : : logic : : ConditionalFormula  const & ,  boost : : any  const & )  const  {         boost : : any  FormulaToJaniJson : : visit ( storm : : logic : : ConditionalFormula  const & ,  boost : : any  const & )  const  {