AnalysisInterface between strategy and low-level analysis
An analysis distinguishes exactly one system as the top system, and looks at its properties and its contract. Subsystems are view either as abstract with their contract or as concrete with their implementations.
The result of an analysis indicates which properties of the top system are invariant, whether the system conforms to its contract and whether it conforms to the preconditions of all its subsystems.
Values of type param are produced by a strategy and parameterize the input-specific transitions system generators, in particular the slicing ot the cone of influence.
Values of type result are produced by running an analysis of a generated transition system. The accumulated results are used by a strategey to decide the next steps.
NB: The uid stored in an info must be unique because it is used during transition system generation to avoid name clashes in UFs and svars.
type assumptions = Invs.t Scope.Map.tType of scope-wise assumptions.
val assumptions_empty : assumptionsEmpty assumptions.
val assumptions_merge : assumptions -> assumptions -> assumptionsMerges two assumptions.
val assumptions_of_sys : TransSys.t -> assumptionsAssumptions of a transition system.
val assumptions_fold :
('a -> Scope.t -> Invs.t -> 'a) ->
'a ->
assumptions ->
'aFold over assumptions.
type info = {top : Scope.t;The top system for the analysis run
*)uid : int;UID for the analysis.
*)abstraction_map : bool Scope.Map.t;Systems flagged true are to be represented abstractly, those flagged false are to be represented by their implementation.
assumptions : assumptions;Properties that can be assumed invariant in subsystems
*)}Information for the creation of a transition system
val shrink_info_to_sys : info -> TransSys.t -> infoShrinks an abstraction map to the subsystems of a system.
and result = {param : param;Parameters of the analysis.
*)time : float;Runtime of the analysis.
*)sys : TransSys.t;System analyzed, contains property statuses and invariants.
*)contract_valid : bool option;None if system analyzed has not contracts, Some true if it does and they have been proved correct, Some false if it does and some are unknown / falsified.
requirements_valid : bool option;None if system analyzed has not sub-requirements, Some true if it does and they have been proved correct, Some false if it does and some are unknown / falsified.
}Result of analysing a transistion system
val shrink_param_to_sys : param -> TransSys.t -> paramShrinks a param to a system.
Return true if a scope is flagged as abstract in the abstraction_map of a param. Default to false if the node is not in the map.
val no_system_is_abstract : ?include_top:bool -> param -> boolReturn true if no system is flagged abstract in the abstraction_map of a param.
Retrieve the assumptions of a scope from a param.
val mk_result : param -> TransSys.t -> float -> resultReturns a result from an analysis.
val result_is_all_proved : result -> boolReturns true if all properties in the system in a result have been proved.
val result_is_all_inv_proved : result -> boolReturns true if all invariant properties in the system in a result have been proved.
val result_is_some_falsified : result -> boolReturns true if some properties in the system in a result have been falsified.
val result_is_some_inv_falsified : result -> boolReturns true if some invariant properties in the system in a result have been falsified.
val result_is_some_reach_proved : result -> boolReturns true if some reachability properties in the system in a result have been proven reachable.
val mk_results : unit -> resultsCreates a new results.
Returns the list of results for a top scope.
Raises Not_found if not found.
val results_size : results -> intReturns the total number of analyzed systems so far
val results_length : results -> intReturns the total number of results stored in a results. Used to generate UIDs for params.
val results_is_safe : results -> bool optionReturns None if no properties were falsified but some could not be proved, Some true if all properties were proved, and Some false if some were falsified.
val results_is_empty : results -> boolCleans the results by removing nodes that don't have any property or contract.
type pp_print_system_user_name = Stdlib.Format.formatter -> Scope.t -> unitval pp_print_param :
bool ->
TransSys.t ->
pp_print_system_user_name ->
Stdlib.Format.formatter ->
param ->
unitPretty printer for param.
val pp_print_result_quiet :
pp_print_system_user_name ->
Stdlib.Format.formatter ->
result ->
unitPretty printer for result, quiet version.
val pp_print_result :
pp_print_system_user_name ->
Stdlib.Format.formatter ->
result ->
unitPretty printer for result.