functor (X : Alphabet.T) ->
sig
module W :
sig
type t = X.t array
type word = t
val mul : t -> t -> t
val one : t
val inj : X.t -> t
val length : t -> int
val sub : t -> int -> int -> t
val eq : t -> t -> bool
val compare : t -> t -> int
val peq : t -> int -> t -> int -> int -> bool
val to_string : t -> string
val included : t -> t -> bool
val unifier : ?i:int -> t -> t -> int
val ordered_unifiers : t -> t -> int list
val ordered_unifiers_bicontext : t -> t -> ((t * t) * (t * t)) list
val unifiers_bicontext : t -> t -> ((t * t) * (t * t)) list
module Order :
sig
val lexicographic : (X.t -> X.t -> bool) -> t -> t -> bool
val deglex : (X.t -> X.t -> bool) -> t -> t -> bool
end
module Anick :
sig
type t = word list
val empty : t
val singleton : X.t -> t
val singletons : X.t list -> t list
val hd : t -> word
val tl : t -> t
val weq : t -> t -> bool
val eq : t list -> t list -> bool
val compare : t list -> t list -> int
val extend : word list -> t list -> t list
val eval : t -> t
val length : t -> int
val to_string : t -> string
end
end
type t = {
generators : X.t list;
rules : (Monoid.Presentation.W.t * Monoid.Presentation.W.t) list;
}
val make :
X.t list ->
(Monoid.Presentation.W.t * Monoid.Presentation.W.t) list ->
Monoid.Presentation.t
val orient :
(Monoid.Presentation.W.t -> Monoid.Presentation.W.t -> bool) ->
Monoid.Presentation.t -> Monoid.Presentation.t
val normalize :
Monoid.Presentation.t ->
Monoid.Presentation.W.t -> Monoid.Presentation.W.t
val add_rule :
Monoid.Presentation.t ->
Monoid.Presentation.W.t * Monoid.Presentation.W.t ->
Monoid.Presentation.t
val reduce : Monoid.Presentation.t -> Monoid.Presentation.t
val complete :
(Monoid.Presentation.W.t -> Monoid.Presentation.W.t -> bool) ->
Monoid.Presentation.t -> Monoid.Presentation.t
module Make :
functor (P : sig val presentation : Monoid.Presentation.t end) -> T
end