sig
  module Compute :
    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
end