functor (X : Alphabet.T->
  sig
    type t = X.t array
    type word = Monoid.Free.t
    val mul : Monoid.Free.t -> Monoid.Free.t -> Monoid.Free.t
    val one : Monoid.Free.t
    val inj : X.t -> Monoid.Free.t
    val length : Monoid.Free.t -> int
    val sub : Monoid.Free.t -> int -> int -> Monoid.Free.t
    val eq : Monoid.Free.t -> Monoid.Free.t -> bool
    val compare : Monoid.Free.t -> Monoid.Free.t -> int
    val peq : Monoid.Free.t -> int -> Monoid.Free.t -> int -> int -> bool
    val to_string : Monoid.Free.t -> string
    val included : Monoid.Free.t -> Monoid.Free.t -> bool
    val unifier : ?i:int -> Monoid.Free.t -> Monoid.Free.t -> int
    val ordered_unifiers : Monoid.Free.t -> Monoid.Free.t -> int list
    val ordered_unifiers_bicontext :
      Monoid.Free.t ->
      Monoid.Free.t ->
      ((Monoid.Free.t * Monoid.Free.t) * (Monoid.Free.t * Monoid.Free.t))
      list
    val unifiers_bicontext :
      Monoid.Free.t ->
      Monoid.Free.t ->
      ((Monoid.Free.t * Monoid.Free.t) * (Monoid.Free.t * Monoid.Free.t))
      list
    module Order :
      sig
        val lexicographic :
          (X.t -> X.t -> bool) -> Monoid.Free.t -> Monoid.Free.t -> bool
        val deglex :
          (X.t -> X.t -> bool) -> Monoid.Free.t -> Monoid.Free.t -> bool
      end
    module Anick :
      sig
        type t = Monoid.Free.word list
        val empty : Monoid.Free.Anick.t
        val singleton : X.t -> Monoid.Free.Anick.t
        val singletons : X.t list -> Monoid.Free.Anick.t list
        val hd : Monoid.Free.Anick.t -> Monoid.Free.word
        val tl : Monoid.Free.Anick.t -> Monoid.Free.Anick.t
        val weq : Monoid.Free.Anick.t -> Monoid.Free.Anick.t -> bool
        val eq : Monoid.Free.Anick.t list -> Monoid.Free.Anick.t list -> bool
        val compare :
          Monoid.Free.Anick.t list -> Monoid.Free.Anick.t list -> int
        val extend :
          Monoid.Free.word list ->
          Monoid.Free.Anick.t list -> Monoid.Free.Anick.t list
        val eval : Monoid.Free.Anick.t -> Monoid.Free.Anick.t
        val length : Monoid.Free.Anick.t -> int
        val to_string : Monoid.Free.Anick.t -> string
      end
  end