@ -418,27 +418,27 @@ namespace storm {
STORM_LOG_THROW ( regions . size ( ) = = 1 , storm : : exceptions : : NotSupportedException , " Region refinement is not supported for multiple initial regions. " ) ;
STORM_PRINT_AND_LOG ( " with iterative refinement until " < < ( 1.0 - regionSettings . getCoverageThreshold ( ) ) * 100.0 < < " % is covered. " < < ( regionSettings . isDepthLimitSet ( ) ? " Depth limit is " + std : : to_string ( regionSettings . getDepthLimit ( ) ) + " . " : " " ) < < std : : endl ) ;
verificationCallback = [ & ] ( std : : shared_ptr < storm : : logic : : Formula const > const & formula ) {
ValueType refinementThreshold = storm : : utility : : convertNumber < ValueType > ( regionSettings . getCoverageThreshold ( ) ) ;
boost : : optional < uint64_t > optionalDepthLimit ;
if ( regionSettings . isDepthLimitSet ( ) ) {
optionalDepthLimit = regionSettings . getDepthLimit ( ) ;
}
std : : unique_ptr < storm : : modelchecker : : RegionRefinementCheckResult < ValueType > > result = storm : : api : : checkAndRefineRegionWithSparseEngine < ValueType > ( model , storm : : api : : createTask < ValueType > ( formula , true ) , regions . front ( ) , engine , refinementThreshold , optionalDepthLimit , regionSettings . getHypothesis ( ) ) ;
return result ;
} ;
ValueType refinementThreshold = storm : : utility : : convertNumber < ValueType > ( regionSettings . getCoverageThreshold ( ) ) ;
boost : : optional < uint64_t > optionalDepthLimit ;
if ( regionSettings . isDepthLimitSet ( ) ) {
optionalDepthLimit = regionSettings . getDepthLimit ( ) ;
}
std : : unique_ptr < storm : : modelchecker : : RegionRefinementCheckResult < ValueType > > result = storm : : api : : checkAndRefineRegionWithSparseEngine < ValueType > ( model , storm : : api : : createTask < ValueType > ( formula , true ) , regions . front ( ) , engine , refinementThreshold , optionalDepthLimit , regionSettings . getHypothesis ( ) ) ;
return result ;
} ;
} else {
STORM_PRINT_AND_LOG ( " . " < < std : : endl ) ;
verificationCallback = [ & ] ( std : : shared_ptr < storm : : logic : : Formula const > const & formula ) {
std : : unique_ptr < storm : : modelchecker : : CheckResult > result = storm : : api : : checkRegionsWithSparseEngine < ValueType > ( model , storm : : api : : createTask < ValueType > ( formula , true ) , regions , engine , regionSettings . getHypothesis ( ) ) ;
return result ;
} ;
std : : unique_ptr < storm : : modelchecker : : CheckResult > result = storm : : api : : checkRegionsWithSparseEngine < ValueType > ( model , storm : : api : : createTask < ValueType > ( formula , true ) , regions , engine , regionSettings . getHypothesis ( ) ) ;
return result ;
} ;
}
postprocessingCallback = [ & ] ( std : : unique_ptr < storm : : modelchecker : : CheckResult > const & result ) {
if ( parametricSettings . exportResultToFile ( ) ) {
storm : : api : : exportRegionCheckResultToFile < ValueType > ( result , parametricSettings . exportResultPath ( ) ) ;
}
} ;
if ( parametricSettings . exportResultToFile ( ) ) {
storm : : api : : exportRegionCheckResultToFile < ValueType > ( result , parametricSettings . exportResultPath ( ) ) ;
}
} ;
verifyProperties < ValueType > ( input . properties , verificationCallback , postprocessingCallback ) ;
}
@ -527,17 +527,25 @@ namespace storm {
if ( parSettings . isMonotonicityAnalysisSet ( ) ) {
std : : cout < < " Hello, Jip2 " < < std : : endl ;
std : : vector < std : : shared_ptr < storm : : logic : : Formula const > > formulas = storm : : api : : extractFormulasFromProperties ( input . properties ) ;
std : : shared_ptr < storm : : models : : sparse : : Model < ValueType > > sparseModel = model - > as < storm : : models : : sparse : : Model < ValueType > > ( ) ;
// Check if MC is acyclic
auto decomposition = storm : : storage : : StronglyConnectedComponentDecomposition < ValueType > ( sparseModel - > getTransitionMatrix ( ) , false , false ) ;
for ( auto i = 0 ; i < decomposition . size ( ) ; + + i ) {
auto scc = decomposition . getBlock ( i ) ;
STORM_LOG_THROW ( scc . size ( ) < = 1 , storm : : exceptions : : NotSupportedException , " Cycle found, not supporting cyclic MCs " ) ;
}
// Transform to Lattices
storm : : utility : : Stopwatch latticeWatch ( true ) ;
storm : : analysis : : LatticeExtender < ValueType > * extender = new storm : : analysis : : LatticeExtender < ValueType > ( sparseModel ) ;
std : : tuple < storm : : analysis : : Lattice * , uint_fast64_t , uint_fast64_t > criticalPair = extender - > toLattice ( formulas ) ;
auto assumptionMaker = storm : : analysis : : AssumptionMaker < ValueType > ( extender , sparseModel - > getNumberOfStates ( ) ) ;
std : : map < storm : : analysis : : Lattice * , std : : set < std : : shared_ptr < storm : : expressions : : BinaryRelationExpression > > > result = assumptionMaker . startMakingAssumptions ( std : : get < 0 > ( criticalPair ) , std : : get < 1 > ( criticalPair ) , std : : get < 2 > ( criticalPair ) ) ;
latticeWatch . stop ( ) ;
STORM_PRINT ( std : : endl < < " Time for lattice creation: " < < latticeWatch < < " . " < < std : : endl < < std : : endl ) ;