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 =
Presentation(X).t = {
generators : X.t list;
rules : (W.t * W.t) list;
}
val make : X.t list -> (W.t * W.t) list -> t
val orient : (W.t -> W.t -> bool) -> t -> t
val normalize : t -> W.t -> W.t
val add_rule : t -> W.t * W.t -> t
val reduce : t -> t
val complete : (W.t -> W.t -> bool) -> t -> t
module Make :
functor (P : sig val presentation : t end) ->
sig
type t = Presentation(X).Make(P).t
val eq : t -> t -> bool
val mul : t -> t -> t
val one : t
val to_string : t -> string
val compare : t -> t -> int
end
end