InvGenGraph.BVGraph of signed bitvectors with less than or equal.
module L : sig ... endmodule Domain : InvGenDomain.DomainDomain with an order relation.
Creates a graph from a single equivalence class and its representative.
val has_svars : graph -> boolChecks whether at least one candidate mentions a state variable.
val mine :
bool ->
bool ->
Analysis.param ->
TransSys.t ->
(TransSys.t -> unit) ->
(TransSys.t * graph * set * set) listMines a system and creates the relevant graphs.
First boolean is top_only, then two_state. Input function is applied to each subsystem. It is used to create the pruning checkers.
val term_count : graph -> intTotal number of terms in the graph.
val class_count : graph -> intTotal number of classes in the graph.
val is_stale : graph -> boolReturns true if all classes in the graph only have one candidate term.
Drops a term from the class corresponding to a representative.
val fmt_graph_dot : Stdlib.Format.formatter -> graph -> unitFormats a graph in dot format. Only the representatives will appear.
val fmt_graph_classes_dot : Stdlib.Format.formatter -> graph -> unitFormats the eq classes of a graph in dot format.
val check_graph : graph -> boolChecks that a graph makes sense. Dumps the graph and its classes in dot format in the current directory if the graph does not make sense.
Minimal list of terms encoding the current state of the graph. Contains
Input function returns true for candidates we want to ignore, typically candidates we have already proved true.
Used when querying the base instance of the LSD (graph stabilization). See also equalities_of and relations_of, used for the step instance (induction check).
Equalities coming from the equivalence classes of a graph.
Input function returns true for candidates we want to ignore, typically candidates we have already proved true.
Generates a list of pairs term * (term * term). The first term is the candidate invariant, while the second element stores the representative of the class the candidate comes from, and the term that can be dropped from it if the candidate is indeed invariant.
Appends the relations from a graph to the input term list.
Input function returns true for candidates we want to ignore, typically candidates we have already proved true.
More precisely, generates implications between representatives and the representative and terms of each equivalence class they're a parent of.
Generates a list of pairs term * unit. The useless unit second element is just there to be compatible with the signature of the lsd step query function. This is to accomodate with the information we need to keep around for the equalities of a graph (see equalities_of).
val stabilize :
graph ->
'a InputSystem.t ->
TransSys.t ->
(term -> bool) ->
Lsd.base ->
unitQueries the lsd and updates the graph. Terminates when the graph is stable, meaning all terms the graph represents are unfalsifiable in the current lsd.
Input function returns true for candidates we want to ignore, typically candidates we have already proved true.
val step_stabilize :
bool ->
graph ->
'a InputSystem.t ->
TransSys.t ->
(term -> bool) ->
Lsd.step ->
((Term.t * Certificate.t) list -> unit) ->
Term.t listClones the graph, and splits it in step.
Stabilizes eq classes one by one, communicates invariants at each step. Then stabilizes relations, communicating by packs.