/// <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);
        }