/// <summary> /// Calculates the probability of formula. /// </summary> /// <param name="model">The model that should be checked.</param> /// <param name="formula">The state formula to be checked.</param> /// <param name="terminateEarlyFormula">When terminateEarlyFormula is satisfied stop building the state space.</param> /// <param name="bound">The maximal number of steps. If stateFormula is satisfied the first time any step later than bound, this probability does not count into the end result.</param> public static Probability CalculateProbabilityOfFormulaBounded(ModelBase model, Formula formula, Formula terminateEarlyFormula, int bound) { Probability probability; var createModel = SafetySharpRuntimeModel.CreateExecutedModelFromFormulasCreator(model); var markovChainGenerator = new DtmcFromExecutableModelGenerator <SafetySharpRuntimeModel>(createModel) { Configuration = TraversalConfiguration }; markovChainGenerator.Configuration.SuccessorCapacity *= 2; markovChainGenerator.AddFormulaToCheck(formula); var markovChain = markovChainGenerator.GenerateMarkovChain(terminateEarlyFormula); using (var modelChecker = new BuiltinDtmcModelChecker(markovChain, System.Console.Out)) { probability = modelChecker.CalculateProbability(formula); } return(probability); }
/// <summary> /// Calculates the probability to reach a state where <paramref name="stateFormula" /> holds. /// </summary> /// <param name="model">The model that should be checked.</param> /// <param name="stateFormula">The state formula to be checked.</param> public static Probability CalculateProbabilityToReachState(ModelBase model, Formula stateFormula) { Probability probabilityToReachState; var probabilityToReachStateFormula = new UnaryFormula(stateFormula, UnaryOperator.Finally); var createModel = SafetySharpRuntimeModel.CreateExecutedModelFromFormulasCreator(model); var markovChainGenerator = new DtmcFromExecutableModelGenerator <SafetySharpRuntimeModel>(createModel) { Configuration = TraversalConfiguration }; markovChainGenerator.AddFormulaToCheck(probabilityToReachStateFormula); var markovChain = markovChainGenerator.GenerateMarkovChain(stateFormula); using (var modelChecker = new BuiltinDtmcModelChecker(markovChain, System.Console.Out)) { probabilityToReachState = modelChecker.CalculateProbability(probabilityToReachStateFormula); } return(probabilityToReachState); }