@ -56,7 +56,27 @@ namespace storm {
template < typename ValueType >
void verifySymbolicModelWithLearningEngine ( storm : : prism : : Program const & program , std : : vector < std : : shared_ptr < const storm : : logic : : Formula > > const & formulas , bool onlyInitialStatesRelevant = false ) {
STORM_LOG_THROW ( false , storm : : exceptions : : NotImplementedException , " Abstraction Refinement is not yet implemented. " ) ;
for ( auto const & formula : formulas ) {
STORM_LOG_THROW ( model - > getType ( ) = = storm : : models : : ModelType : : Dtmc | | model - > getType ( ) = = storm : : models : : ModelType : : Mdp , storm : : exceptions : : InvalidSettingsException , " Currently learning-based verification is only available for DTMCs and MDPs. " ) ;
std : : cout < < std : : endl < < " Model checking property: " < < * formula < < " ... " ;
storm : : modelchecker : : CheckTask task ( * formula , onlyInitialStatesRelevant ) ;
storm : : modelchecker : : SparseLearningModelChecker < ValueType > checker ( program ) ;
std : : unique_ptr < storm : : modelchecker : : CheckResult > result ;
if ( checker . canHandle ( formula ) ) {
std : : unique_ptr < storm : : modelchecker : : CheckResult > result = checker . check ( task ) ;
} else {
std : : cout < < " skipped, because the formula cannot be handled by the selected engine/method. " < < std : : endl ;
}
if ( result ) {
std : : cout < < " done. " < < std : : endl ;
std : : cout < < " Result (initial states): " ;
result - > filter ( storm : : modelchecker : : ExplicitQualitativeCheckResult ( model - > getInitialStates ( ) ) ) ;
std : : cout < < * result < < std : : endl ;
} else {
std : : cout < < " skipped, because the modelling formalism is currently unsupported. " < < std : : endl ;
}
}
}
template < storm : : dd : : DdType DdType >