module Real:Graph
module Domain:InvGenDomain.Domain
type
graph
val mk : InvGenGraph.term -> InvGenGraph.set -> graph
val has_svars : graph -> bool
val mine : bool ->
bool ->
Analysis.param ->
TransSys.t ->
(TransSys.t -> unit) ->
(TransSys.t * graph * InvGenGraph.set * InvGenGraph.set)
list
First boolean is top_only
, then two_state
. Input function is applied to
each subsystem. It is used to create the pruning checkers.
val clone : graph -> graph
val term_count : graph -> int
val class_count : graph -> int
val is_stale : graph -> bool
val drop_class_member : graph -> InvGenGraph.term -> InvGenGraph.term -> unit
val fmt_graph_dot : Format.formatter -> graph -> unit
Formats the eq classes of a graph in dot format.
val fmt_graph_classes_dot : Format.formatter -> graph -> unit
val check_graph : graph -> bool
val terms_of : graph ->
(InvGenGraph.term -> bool) -> InvGenGraph.term list
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).
val equalities_of : graph ->
(InvGenGraph.term -> bool) ->
(InvGenGraph.term * (InvGenGraph.term * InvGenGraph.term)) list
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.
val relations_of : graph ->
(InvGenGraph.term * unit) list ->
(InvGenGraph.term -> bool) -> (InvGenGraph.term * unit) 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 ->
TransSys.t -> (InvGenGraph.term -> bool) -> Lsd.base -> unit
Input function returns true for candidates we want to ignore, typically
candidates we have already proved true.
val step_stabilize : bool ->
graph ->
TransSys.t ->
(InvGenGraph.term -> bool) ->
Lsd.step -> ((Term.t * Certificate.t) list -> unit) -> Term.t list
Stabilizes eq classes one by one, communicates invariants at each step.
Then stabilizes relations, communicating by packs.