sig
  type obs
  type t
  val create : unit -> t
  val compare : t -> t -> int
  val total_ord : t -> t -> int
  val add_alias : t -> t -> unit
  val do_normalize : t -> unit
  val add_observer : obs -> t -> unit
  val remove_observer : obs -> t -> unit
  val string_of : t -> string
  val reset : unit -> unit
  val get_all_ts : unit -> t list
  type img
  type elm
  val set_lower : elm -> t -> unit
  val set_upper : elm -> t -> unit
  val set_eq : elm -> t -> unit
  val subset : t -> t -> unit
  val get_lower : t -> elm option
  val get_upper : t -> elm option
  val string_of_img : t -> string
  val get_exact : t -> elm option
  val string_of_with_img : t -> string
  val do_on_exact :
    ?nothing:(unit -> unit) -> ?something:(elm -> unit) -> t -> unit
  val do_on_lower :
    ?nothing:(unit -> unit) -> ?something:(elm -> unit) -> t -> unit
  val do_on_upper :
    ?nothing:(unit -> unit) -> ?something:(elm -> unit) -> t -> unit
end