/// <summary>
        ///   Initializes the model that should be analyzed.
        /// </summary>
        /// <param name="configuration">The configuration that should be used for the analyses.</param>
        /// <param name="hazard">The hazard that should be analyzed.</param>
        protected override void InitializeModel(AnalysisConfiguration configuration, Formula hazard)
        {
            var invariant = new UnaryFormula(hazard, UnaryOperator.Not);

            var checker = new QualitativeChecker <TExecutableModel>(RuntimeModelCreator)
            {
                Configuration = configuration
            };

            checker.Configuration.ProgressReportsOnly = false;


            var stateGraph = checker.GenerateStateGraph();



            var stateCapacity    = Math.Max(1024, (int)(stateGraph.StateCount * 1.5));
            var newModelCapacity = new ModelCapacityByModelDensity(stateCapacity, ModelDensityLimit.High);

            configuration.ModelCapacity = newModelCapacity;
            Func <AnalysisModel> createAnalysisModelFunc = () => new StateGraphModel <TExecutableModel>(stateGraph, configuration.SuccessorCapacity);
            var createAnalysisModel = new AnalysisModelCreator(createAnalysisModelFunc);

            _checker = new InvariantChecker(createAnalysisModel, configuration, invariant);
        }
        public override InvariantAnalysisResult[] CheckInvariants(CoupledExecutableModelCreator <SafetySharpRuntimeModel> createModel, params Formula[] invariants)
        {
            var checker = new QualitativeChecker <SafetySharpRuntimeModel>(createModel);

            checker.Configuration = _analysisConfiguration;
            return(checker.CheckInvariants(invariants));
        }
        /// <summary>
        ///   Checks whether the <paramref name="invariants" /> hold in all states of the <paramref name="model" />. The appropriate
        ///   model checker is chosen automatically.
        /// </summary>
        /// <param name="model">The model that should be checked.</param>
        /// <param name="invariants">The invariants that should be checked.</param>
        public static AnalysisResult <SafetySharpRuntimeModel>[] CheckInvariants(ModelBase model, params Formula[] invariants)
        {
            var createModel        = SafetySharpRuntimeModel.CreateExecutedModelFromFormulasCreator(model);
            var qualitativeChecker = new QualitativeChecker <SafetySharpRuntimeModel> {
                Configuration = TraversalConfiguration
            };

            return(qualitativeChecker.CheckInvariants(createModel, invariants));
        }
        /// <summary>
        ///   Checks whether the <paramref name="invariant" /> holds in all states of the <paramref name="model" />. The appropriate
        ///   model checker is chosen automatically.
        /// </summary>
        /// <param name="model">The model that should be checked.</param>
        /// <param name="invariant">The invariant that should be checked.</param>
        public static AnalysisResult <SafetySharpRuntimeModel> CheckInvariant(ModelBase model, Formula invariant)
        {
            var createModel        = SafetySharpRuntimeModel.CreateExecutedModelCreator(model, invariant);
            var qualitativeChecker = new QualitativeChecker <SafetySharpRuntimeModel> {
                Configuration = TraversalConfiguration
            };

            return(qualitativeChecker.CheckInvariant(createModel, formulaIndex: 0));
        }
Beispiel #5
0
        public override void CreateModelChecker(bool suppressCounterExampleGeneration, Action <string> logAction)
        {
            // QualitativeChecker<SafetySharpRuntimeModel>
            // LtsMin
            modelChecker = new SafetySharpQualitativeChecker();
            modelChecker.OutputWritten += logAction;

            modelChecker.Configuration.ModelCapacity          = ModelCapacityByMemorySize.Small;
            modelChecker.Configuration.GenerateCounterExample = !suppressCounterExampleGeneration;
        }
        /// <summary>
        ///   Checks whether the <paramref name="invariant" /> holds in all states of the <paramref name="model" />. The appropriate
        ///   model checker is chosen automatically.
        /// </summary>
        /// <param name="model">The model that should be checked.</param>
        /// <param name="invariant">The invariant that should be checked.</param>
        public static SafetySharpInvariantAnalysisResult CheckInvariant(ModelBase model, Formula invariant)
        {
            var createModel        = SafetySharpRuntimeModel.CreateExecutedModelCreator(model, invariant);
            var qualitativeChecker = new QualitativeChecker <SafetySharpRuntimeModel>(createModel)
            {
                Configuration = TraversalConfiguration
            };
            var result = qualitativeChecker.CheckInvariant(formulaIndex: 0);

            return(SafetySharpInvariantAnalysisResult.FromInvariantAnalysisResult(result, createModel));
        }
        /// <summary>
        ///   Checks whether the <paramref name="invariants" /> hold in all states of the <paramref name="model" />. The appropriate
        ///   model checker is chosen automatically.
        /// </summary>
        /// <param name="model">The model that should be checked.</param>
        /// <param name="invariants">The invariants that should be checked.</param>
        public static SafetySharpInvariantAnalysisResult[] CheckInvariants(ModelBase model, params Formula[] invariants)
        {
            var createModel        = SafetySharpRuntimeModel.CreateExecutedModelCreator(model, invariants);
            var qualitativeChecker = new QualitativeChecker <SafetySharpRuntimeModel>(createModel)
            {
                Configuration = TraversalConfiguration
            };
            var results    = qualitativeChecker.CheckInvariants(invariants);
            var newResults = results.Select(result => SafetySharpInvariantAnalysisResult.FromInvariantAnalysisResult(result, createModel));

            return(newResults.ToArray());
        }
        public override InvariantAnalysisResult CheckInvariant(CoupledExecutableModelCreator <SafetySharpRuntimeModel> createModel, Formula formula)
        {
            var checker = new QualitativeChecker <SafetySharpRuntimeModel>(createModel);

            checker.Configuration = _analysisConfiguration;
            var formulaIndex = Array.FindIndex(createModel.StateFormulasToCheckInBaseModel, stateFormula =>
            {
                var isEqual = IsFormulasStructurallyEquivalentVisitor.Compare(stateFormula, formula);
                return(isEqual);
            }
                                               );

            if (formulaIndex == -1)
            {
                throw new Exception($"Input formula is not checked directly. Use {nameof(AnalysisTestsWithQualitative)} instead");
            }

            return(checker.CheckInvariant(formulaIndex));
        }