sig
  module L :
    sig
      module L :
        sig
          type key = M.Anick.t
          type 'a t = 'Map.Make(M.Anick).t
          val empty : 'a t
          val is_empty : 'a t -> bool
          val mem : key -> 'a t -> bool
          val add : key -> '-> 'a t -> 'a t
          val update : key -> ('a option -> 'a option) -> 'a t -> 'a t
          val singleton : key -> '-> 'a t
          val remove : key -> 'a t -> 'a t
          val merge :
            (key -> 'a option -> 'b option -> 'c option) ->
            'a t -> 'b t -> 'c t
          val union : (key -> '-> '-> 'a option) -> 'a t -> 'a t -> 'a t
          val compare : ('-> '-> int) -> 'a t -> 'a t -> int
          val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
          val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b
          val for_all : (key -> '-> bool) -> 'a t -> bool
          val exists : (key -> '-> bool) -> 'a t -> bool
          val filter : (key -> '-> bool) -> 'a t -> 'a t
          val partition : (key -> '-> bool) -> 'a t -> 'a t * 'a t
          val cardinal : 'a t -> int
          val bindings : 'a t -> (key * 'a) list
          val min_binding : 'a t -> key * 'a
          val min_binding_opt : 'a t -> (key * 'a) option
          val max_binding : 'a t -> key * 'a
          val max_binding_opt : 'a t -> (key * 'a) option
          val choose : 'a t -> key * 'a
          val choose_opt : 'a t -> (key * 'a) option
          val split : key -> 'a t -> 'a t * 'a option * 'a t
          val find_opt : key -> 'a t -> 'a option
          val find_first : (key -> bool) -> 'a t -> key * 'a
          val find_first_opt : (key -> bool) -> 'a t -> (key * 'a) option
          val find_last : (key -> bool) -> 'a t -> key * 'a
          val find_last_opt : (key -> bool) -> 'a t -> (key * 'a) option
          val map : ('-> 'b) -> 'a t -> 'b t
          val mapi : (key -> '-> 'b) -> 'a t -> 'b t
          val to_seq : 'a t -> (key * 'a) Seq.t
          val to_seq_from : key -> 'a t -> (key * 'a) Seq.t
          val add_seq : (key * 'a) Seq.t -> 'a t -> 'a t
          val of_seq : (key * 'a) Seq.t -> 'a t
          val find : M.Anick.t -> 'a t -> 'a
          val iter : (M.Anick.t -> '-> unit) -> 'a t -> unit
          val of_array : M.Anick.t array -> int t
        end
      type map = int L.t
      type t = map * map * MF.M.matrix
      val matrix : t -> MF.M.matrix
      val zero : M.Anick.t array -> M.Anick.t array -> t
      val set : t -> M.Anick.t -> M.Anick.t -> A.t -> unit
      val get : t -> M.Anick.t -> M.Anick.t -> A.t
      val rank : t -> int
      val nullity : t -> int
      val iter_src : (M.Anick.t -> unit) -> t -> unit
      val iter_tgt : (M.Anick.t -> unit) -> t -> unit
      val iter : (M.Anick.t -> M.Anick.t -> unit) -> t -> unit
    end
  module L' :
    sig
      module L :
        sig
          type key = M.Anick.t
          type 'a t = 'Map.Make(M.Anick).t
          val empty : 'a t
          val is_empty : 'a t -> bool
          val mem : key -> 'a t -> bool
          val add : key -> '-> 'a t -> 'a t
          val update : key -> ('a option -> 'a option) -> 'a t -> 'a t
          val singleton : key -> '-> 'a t
          val remove : key -> 'a t -> 'a t
          val merge :
            (key -> 'a option -> 'b option -> 'c option) ->
            'a t -> 'b t -> 'c t
          val union : (key -> '-> '-> 'a option) -> 'a t -> 'a t -> 'a t
          val compare : ('-> '-> int) -> 'a t -> 'a t -> int
          val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
          val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b
          val for_all : (key -> '-> bool) -> 'a t -> bool
          val exists : (key -> '-> bool) -> 'a t -> bool
          val filter : (key -> '-> bool) -> 'a t -> 'a t
          val partition : (key -> '-> bool) -> 'a t -> 'a t * 'a t
          val cardinal : 'a t -> int
          val bindings : 'a t -> (key * 'a) list
          val min_binding : 'a t -> key * 'a
          val min_binding_opt : 'a t -> (key * 'a) option
          val max_binding : 'a t -> key * 'a
          val max_binding_opt : 'a t -> (key * 'a) option
          val choose : 'a t -> key * 'a
          val choose_opt : 'a t -> (key * 'a) option
          val split : key -> 'a t -> 'a t * 'a option * 'a t
          val find_opt : key -> 'a t -> 'a option
          val find_first : (key -> bool) -> 'a t -> key * 'a
          val find_first_opt : (key -> bool) -> 'a t -> (key * 'a) option
          val find_last : (key -> bool) -> 'a t -> key * 'a
          val find_last_opt : (key -> bool) -> 'a t -> (key * 'a) option
          val map : ('-> 'b) -> 'a t -> 'b t
          val mapi : (key -> '-> 'b) -> 'a t -> 'b t
          val to_seq : 'a t -> (key * 'a) Seq.t
          val to_seq_from : key -> 'a t -> (key * 'a) Seq.t
          val add_seq : (key * 'a) Seq.t -> 'a t -> 'a t
          val of_seq : (key * 'a) Seq.t -> 'a t
          val find : M.Anick.t -> 'a t -> 'a
          val iter : (M.Anick.t -> '-> unit) -> 'a t -> unit
          val of_array : M.Anick.t array -> int t
        end
      type map = int L.t
      type t = map * map * MF.M'.matrix
      val matrix : t -> MF.M'.matrix
      val zero : M.Anick.t array -> M.Anick.t array -> t
      val set : t -> M.Anick.t -> M.Anick.t -> K.t -> unit
      val get : t -> M.Anick.t -> M.Anick.t -> K.t
      val rank : t -> int
      val nullity : t -> int
      val iter_src : (M.Anick.t -> unit) -> t -> unit
      val iter_tgt : (M.Anick.t -> unit) -> t -> unit
      val iter : (M.Anick.t -> M.Anick.t -> unit) -> t -> unit
    end
  val map :
    (M.Anick.t -> M.Anick.t) ->
    (M.Anick.t -> M.Anick.t) -> (A.t -> K.t) -> L.t -> L'.t
end