sig
  module type M =
    sig
      val kf : Kernel_function.t
      type abstract_value
      val compile_node :
        Cil_types.stmt ->
        Region_analysis_stmt.M.abstract_value ->
        (Cil_types.stmt Region_analysis.edge *
         Region_analysis_stmt.M.abstract_value)
        list
      val mu :
        (Region_analysis_stmt.M.abstract_value ->
         Region_analysis_stmt.M.abstract_value) ->
        Region_analysis_stmt.M.abstract_value ->
        Region_analysis_stmt.M.abstract_value
      val join :
        Region_analysis_stmt.M.abstract_value list ->
        Region_analysis_stmt.M.abstract_value
    end
  module MakeNode :
    functor (M : M->
      sig
        type node = Cil_types.stmt
        val pretty : Format.formatter -> node -> unit
        module Dict :
          sig
            type 'a t
            val create : int -> '-> 'a t
            val get : 'a t -> node -> 'a
            val set : 'a t -> node -> '-> unit
            val iter : 'a t -> (node -> '-> unit) -> unit
            val copy : 'a t -> 'a t
          end
        module Set :
          sig
            type elt = node
            type t
            val empty : t
            val is_empty : t -> bool
            val mem : elt -> t -> bool
            val add : elt -> t -> t
            val singleton : elt -> t
            val remove : elt -> t -> t
            val union : t -> t -> t
            val inter : t -> t -> t
            val disjoint : t -> t -> bool
            val diff : t -> t -> t
            val compare : t -> t -> int
            val equal : t -> t -> bool
            val subset : t -> t -> bool
            val iter : (elt -> unit) -> t -> unit
            val map : (elt -> elt) -> t -> t
            val fold : (elt -> '-> 'a) -> t -> '-> 'a
            val for_all : (elt -> bool) -> t -> bool
            val exists : (elt -> bool) -> t -> bool
            val filter : (elt -> bool) -> t -> t
            val filter_map : (elt -> elt option) -> t -> t
            val partition : (elt -> bool) -> t -> t * t
            val cardinal : t -> int
            val elements : t -> elt list
            val min_elt : t -> elt
            val min_elt_opt : t -> elt option
            val max_elt : t -> elt
            val max_elt_opt : t -> elt option
            val choose : t -> elt
            val choose_opt : t -> elt option
            val split : elt -> t -> t * bool * t
            val find : elt -> t -> elt
            val find_opt : elt -> t -> elt option
            val find_first : (elt -> bool) -> t -> elt
            val find_first_opt : (elt -> bool) -> t -> elt option
            val find_last : (elt -> bool) -> t -> elt
            val find_last_opt : (elt -> bool) -> t -> elt option
            val of_list : elt list -> t
            val to_seq_from : elt -> t -> elt Seq.t
            val to_seq : t -> elt Seq.t
            val add_seq : elt Seq.t -> t -> t
            val of_seq : elt Seq.t -> t
          end
        module Graph :
          sig
            val iter_succs : node -> (node -> unit) -> unit
            val iter_preds : node -> (node -> unit) -> unit
            val all_nodes : Set.t
            val entry_node : node
            val exit_nodes : node list
          end
        module DomTree :
          sig
            val dominates : node -> node -> bool
            val domtree_postfix_iter : (node -> unit) -> unit
          end
        module Edge_Dict :
          sig
            type 'a t
            val set : 'a t -> node Region_analysis.edge -> '-> unit
            val get : 'a t -> node Region_analysis.edge -> 'a
            val create : unit -> 'a t
            val iter :
              'a t -> (node Region_analysis.edge -> '-> unit) -> unit
          end
        type abstract_value = M.abstract_value
        val compile_node :
          node ->
          abstract_value -> (node Region_analysis.edge * abstract_value) list
        val join : abstract_value list -> abstract_value
        val mu :
          (abstract_value -> abstract_value) ->
          abstract_value -> abstract_value
      end
end