Module Tai.Wto

This modules implements functions to compute a graph's weak topological ordering (WTO). And use these to find a valid set of widening edges. It also contains the Fixpoint module, which performs the main analysis (iterate until fixpoint is reached)

type t

Weak topological ordering

val equal : t -> t -> bool
val pp : Stdlib.Format.formatter -> t -> unit
val partition : init:Ast.Program.Loc.t -> succs:(Ast.Program.Loc.t -> ('label * Ast.Program.Loc.t) list) -> t

Compute the WTO on the given LTS, ~succs maps each node to a list of labelled outgoing edges

val widening_edges_preds : preds:(Ast.Program.Loc.t -> ('label * Ast.Program.Loc.t) list) -> t -> (Ast.Program.Loc.t * 'label * Ast.Program.Loc.t) list

Compute widening edges from preds function

val widening_edges_succs : succs:(Ast.Program.Loc.t -> ('label * Ast.Program.Loc.t) list) -> t -> (Ast.Program.Loc.t * 'label * Ast.Program.Loc.t) list

Compute widening edges from succs function

val iterative_strategy : t -> t

Change the WTO so that the fixpoint on it gives the iterative strategy Compute widening edges BEFORE calling this

module Fixpoint (L : Domains.Sig.Classical_Domain) : sig ... end

Calculate the abstract program state (a function Loc.t -> L.State.t represented as a map)