/// <summary>
        ///   Initializes a new instance.
        /// </summary>
        /// <param name="createModel">Creates the model that should be checked.</param>
        /// <param name="output">The callback that should be used to output messages.</param>
        /// <param name="configuration">The analysis configuration that should be used.</param>
        /// <param name="stateFormula">The analyzed stateFormula.</param>
        internal InvariantChecker(AnalysisModelCreator <TExecutableModel> createModel, Action <string> output, AnalysisConfiguration configuration, Formula stateFormula)
            : base(createModel, output, configuration, 0)
        {
            var formulasToCheck = AnalyzedModels.First().RuntimeModel.Formulas;

            Context.TraversalParameters.TransitionActions.Add(() => new InvariantViolationAction <TExecutableModel>(formulasToCheck, stateFormula));
        }
        /// <summary>
        ///   Initializes a new instance.
        /// </summary>
        /// <param name="createModel">Creates the model that should be checked.</param>
        /// <param name="output">The callback that should be used to output messages.</param>
        /// <param name="configuration">The analysis configuration that should be used.</param>
        internal StateGraphGenerator(AnalysisModelCreator <TExecutableModel> createModel,
                                     Action <string> output, AnalysisConfiguration configuration)
            : base(createModel, output, configuration, DeriveTransitionSizeFromModel)
        {
            var analyzedModel = AnalyzedModels.First();

            _stateGraph = new StateGraph <TExecutableModel>(
                Context, analyzedModel.TransitionSize,
                analyzedModel.RuntimeModel, analyzedModel.RuntimeModelCreator);

            Context.TraversalParameters.BatchedTransitionActions.Add(() => new StateGraphBuilder <TExecutableModel>(_stateGraph));
        }