functor (Etat : Tools.Base->
  functor (Alph : Tools.Base->
    sig
      type etat = Etat.t
      type lettre = Alph.t
      type automate =
          (Construction.Compute.etat, Construction.Compute.lettre)
          Automate.automate
      module Rel :
        sig
          type elt = etat
          type t
          val empty : t
          val id : elt list -> t
          val equal : t -> t -> bool
          val compare : t -> t -> int
          val succ : elt -> t -> elt list
          val restr : elt list -> t -> t
          val inser : elt * elt -> t -> t
          val mem : elt * elt -> t -> bool
          val map : (elt * elt -> elt * elt) -> t -> t
          val fold : (elt * elt -> '-> 'a) -> t -> '-> 'a
          val to_list : t -> (elt * elt) list
          val concatenation : t -> t -> t
          val union : t -> t -> t
          val refl : elt list -> t -> t
          val etoile : elt list -> t -> t
        end
      module AMap :
        sig
          type t
          val empty : Construction.Compute.AMap.t
          val add :
            Construction.Compute.lettre ->
            Construction.Compute.Rel.t ->
            Construction.Compute.AMap.t -> Construction.Compute.AMap.t
          val find :
            Construction.Compute.lettre ->
            Construction.Compute.AMap.t -> Construction.Compute.Rel.t
          val add_elt :
            Construction.Compute.lettre ->
            Construction.Compute.etat * Construction.Compute.etat ->
            Construction.Compute.AMap.t -> Construction.Compute.AMap.t
        end
      val base_rel :
        Construction.Compute.automate ->
        Construction.Compute.lettre -> Construction.Compute.Rel.t
      module MMap :
        sig
          type t
          val empty : Construction.Compute.MMap.t
          val add :
            Construction.Compute.lettre list ->
            Construction.Compute.Rel.t ->
            Construction.Compute.MMap.t -> Construction.Compute.MMap.t
          val find :
            Construction.Compute.lettre list ->
            Construction.Compute.MMap.t -> Construction.Compute.Rel.t
          val choose :
            Construction.Compute.MMap.t ->
            Construction.Compute.lettre list * Construction.Compute.Rel.t
          val filter :
            (Construction.Compute.lettre list ->
             Construction.Compute.Rel.t -> bool) ->
            Construction.Compute.MMap.t -> Construction.Compute.MMap.t
        end
      type state = Construction.Compute.MMap.t
      val g2 :
        (Construction.Compute.lettre -> Construction.Compute.Rel.t) ->
        Construction.Compute.etat list ->
        (Construction.Compute.lettre -> Construction.Compute.lettre) ->
        Construction.Compute.state ->
        Construction.Compute.lettre list ->
        Construction.Compute.lettre ->
        Construction.Compute.state * Construction.Compute.lettre list *
        Construction.Compute.Rel.t
      val trans_det :
        (Construction.Compute.lettre -> Construction.Compute.Rel.t) ->
        (Construction.Compute.state ->
         Construction.Compute.lettre list ->
         Construction.Compute.lettre ->
         Construction.Compute.state * Construction.Compute.lettre list *
         Construction.Compute.Rel.t) ->
        Construction.Compute.state ->
        Construction.Compute.etat list * Construction.Compute.lettre list ->
        Construction.Compute.lettre ->
        Construction.Compute.state *
        (Construction.Compute.etat list * Construction.Compute.lettre list)
      val auto_f_det :
        Construction.Compute.automate ->
        (Construction.Compute.lettre -> Construction.Compute.lettre) ->
        (Construction.Compute.etat list * Construction.Compute.lettre list,
         Construction.Compute.lettre)
        Automate.automate
      val trans :
        (Construction.Compute.lettre -> Construction.Compute.Rel.t) ->
        (Construction.Compute.state ->
         Construction.Compute.lettre list ->
         Construction.Compute.lettre ->
         Construction.Compute.state * Construction.Compute.lettre list *
         Construction.Compute.Rel.t) ->
        Construction.Compute.state ->
        Construction.Compute.etat * Construction.Compute.lettre list ->
        Construction.Compute.lettre ->
        Construction.Compute.state *
        (Construction.Compute.etat * Construction.Compute.lettre list) list
      val auto_f :
        Construction.Compute.automate ->
        (Construction.Compute.lettre -> Construction.Compute.lettre) ->
        (Construction.Compute.etat * Construction.Compute.lettre list,
         Construction.Compute.lettre)
        Automate.automate
    end