public void StepwiseProbablityOfNotLabel1UntilLabel2ForExample4()
        {
            var example = new Example4();
            var dtmc    = example.MarkovChain;

            var results = new List <Probability>();

            using (var prismChecker = new BuiltinDtmcModelChecker(dtmc, Output.TextWriterAdapter()))
            {
                for (var i = 0; i <= 10; i++)
                {
                    var boundedStepi       = new BoundedBinaryFormula(new UnaryFormula(MarkovChainExample.Label1Formula, UnaryOperator.Not), BinaryOperator.Until, MarkovChainExample.Label2Formula, i);
                    var resultBoundedStepi = prismChecker.CalculateProbability(boundedStepi);
                    Output.Log($"Result {i}:\t{resultBoundedStepi}");
                    results.Add(resultBoundedStepi);
                }

                var boundedStep200       = new BoundedBinaryFormula(new UnaryFormula(MarkovChainExample.Label1Formula, UnaryOperator.Not), BinaryOperator.Until, MarkovChainExample.Label2Formula, 200);
                var resultBoundedStep200 = prismChecker.CalculateProbability(boundedStep200);
                Output.Log($"Result {200}:\t{resultBoundedStep200}");

                /*
                 * var inf = new BinaryFormula(new UnaryFormula(MarkovChainExample.Label1Formula, UnaryOperator.Not), BinaryOperator.Until, MarkovChainExample.Label2Formula);
                 * var resultInf = prismChecker.CalculateProbability(inf);
                 * Output.Log($"Result inf:\t{resultInf}");
                 */
            }
        }
        public void ProbabilityIn10Steps_Label1UntilLabel2(MarkovChainExample example)
        {
            var dtmc = example.MarkovChain;

            var label1UntilLabel2 = new BoundedBinaryFormula(MarkovChainExample.Label1Formula, BinaryOperator.Until, MarkovChainExample.Label2Formula, 10);

            using (var prismChecker = new BuiltinDtmcModelChecker(dtmc, Output.TextWriterAdapter()))
            {
                var result = prismChecker.CalculateProbability(label1UntilLabel2);
                result.Is(example.ProbabilityLabel1UntilLabel2, 0.0001).ShouldBe(true);
            }
        }
        public void ProbabilityToReachIn10Steps_Label1(MarkovChainExample example)
        {
            var dtmc = example.MarkovChain;

            var finallyLabel1 = new BoundedUnaryFormula(MarkovChainExample.Label1Formula, UnaryOperator.Finally, 10);

            using (var prismChecker = new BuiltinDtmcModelChecker(dtmc, Output.TextWriterAdapter()))
            {
                var result = prismChecker.CalculateProbability(finallyLabel1);
                result.Is(example.ProbabilityFinally10Label1, 0.0001).ShouldBe(true);
            }
        }
        /// <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);
        }