sig
  module type Symbol =
    sig
      type t
      val rank : Ranked_alphabet.Symbol.t -> int
      val compare :
        Ranked_alphabet.Symbol.t -> Ranked_alphabet.Symbol.t -> int
      val to_string : Ranked_alphabet.Symbol.t -> string
    end
  module type S =
    sig
      type t
      and elt
      val empty : Ranked_alphabet.S.t
      val is_empty : Ranked_alphabet.S.t -> bool
      val rank : Ranked_alphabet.S.elt -> int
      val mem : Ranked_alphabet.S.elt -> Ranked_alphabet.S.t -> bool
      val add :
        Ranked_alphabet.S.elt -> Ranked_alphabet.S.t -> Ranked_alphabet.S.t
      val singleton : Ranked_alphabet.S.elt -> Ranked_alphabet.S.t
      val remove :
        Ranked_alphabet.S.elt -> Ranked_alphabet.S.t -> Ranked_alphabet.S.t
      val union :
        Ranked_alphabet.S.t -> Ranked_alphabet.S.t -> Ranked_alphabet.S.t
      val inter :
        Ranked_alphabet.S.t -> Ranked_alphabet.S.t -> Ranked_alphabet.S.t
      val diff :
        Ranked_alphabet.S.t -> Ranked_alphabet.S.t -> Ranked_alphabet.S.t
      val compare : Ranked_alphabet.S.t -> Ranked_alphabet.S.t -> int
      val equal : Ranked_alphabet.S.t -> Ranked_alphabet.S.t -> bool
      val subset : Ranked_alphabet.S.t -> Ranked_alphabet.S.t -> bool
      val iter :
        (Ranked_alphabet.S.elt -> unit) -> Ranked_alphabet.S.t -> unit
      val fold :
        (Ranked_alphabet.S.elt -> '-> 'a) ->
        Ranked_alphabet.S.t -> '-> 'a
      val for_all :
        (Ranked_alphabet.S.elt -> bool) -> Ranked_alphabet.S.t -> bool
      val exists :
        (Ranked_alphabet.S.elt -> bool) -> Ranked_alphabet.S.t -> bool
      val partition :
        (Ranked_alphabet.S.elt -> bool) ->
        Ranked_alphabet.S.t -> Ranked_alphabet.S.t * Ranked_alphabet.S.t
      val cardinal : Ranked_alphabet.S.t -> int
      val elements : Ranked_alphabet.S.t -> Ranked_alphabet.S.elt list
      val min_elt : Ranked_alphabet.S.t -> Ranked_alphabet.S.elt
      val max_elt : Ranked_alphabet.S.t -> Ranked_alphabet.S.elt
      val choose : Ranked_alphabet.S.t -> Ranked_alphabet.S.elt
      val to_string : Ranked_alphabet.S.t -> string
      val elt_to_string : Ranked_alphabet.S.elt -> string
      val from_list : Ranked_alphabet.S.elt list -> Ranked_alphabet.S.t
    end
  module Make :
    functor (Sym : Symbol->
      sig
        type t
        and elt = Sym.t
        val empty : Ranked_alphabet.S.t
        val is_empty : Ranked_alphabet.S.t -> bool
        val rank : Ranked_alphabet.S.elt -> int
        val mem : Ranked_alphabet.S.elt -> Ranked_alphabet.S.t -> bool
        val add :
          Ranked_alphabet.S.elt -> Ranked_alphabet.S.t -> Ranked_alphabet.S.t
        val singleton : Ranked_alphabet.S.elt -> Ranked_alphabet.S.t
        val remove :
          Ranked_alphabet.S.elt -> Ranked_alphabet.S.t -> Ranked_alphabet.S.t
        val union :
          Ranked_alphabet.S.t -> Ranked_alphabet.S.t -> Ranked_alphabet.S.t
        val inter :
          Ranked_alphabet.S.t -> Ranked_alphabet.S.t -> Ranked_alphabet.S.t
        val diff :
          Ranked_alphabet.S.t -> Ranked_alphabet.S.t -> Ranked_alphabet.S.t
        val compare : Ranked_alphabet.S.t -> Ranked_alphabet.S.t -> int
        val equal : Ranked_alphabet.S.t -> Ranked_alphabet.S.t -> bool
        val subset : Ranked_alphabet.S.t -> Ranked_alphabet.S.t -> bool
        val iter :
          (Ranked_alphabet.S.elt -> unit) -> Ranked_alphabet.S.t -> unit
        val fold :
          (Ranked_alphabet.S.elt -> '-> 'a) ->
          Ranked_alphabet.S.t -> '-> 'a
        val for_all :
          (Ranked_alphabet.S.elt -> bool) -> Ranked_alphabet.S.t -> bool
        val exists :
          (Ranked_alphabet.S.elt -> bool) -> Ranked_alphabet.S.t -> bool
        val partition :
          (Ranked_alphabet.S.elt -> bool) ->
          Ranked_alphabet.S.t -> Ranked_alphabet.S.t * Ranked_alphabet.S.t
        val cardinal : Ranked_alphabet.S.t -> int
        val elements : Ranked_alphabet.S.t -> Ranked_alphabet.S.elt list
        val min_elt : Ranked_alphabet.S.t -> Ranked_alphabet.S.elt
        val max_elt : Ranked_alphabet.S.t -> Ranked_alphabet.S.elt
        val choose : Ranked_alphabet.S.t -> Ranked_alphabet.S.elt
        val to_string : Ranked_alphabet.S.t -> string
        val elt_to_string : Ranked_alphabet.S.elt -> string
        val from_list : Ranked_alphabet.S.elt list -> Ranked_alphabet.S.t
      end
end