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 = Location.LSet.t
  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 set_neg : elm -> t -> unit
  val disjoint : t -> t -> unit
  val get_neg : t -> elm option
  val lower_one_element :
    ?nothing:(unit -> unit) ->
    ?exact:(Location.Loc.t -> unit) -> ?tomuch:(unit -> unit) -> t -> unit
  val lower_iter : (Location.Loc.t -> unit) -> t -> unit
  val upper_iter : (Location.Loc.t -> unit) -> t -> unit
  val is_one_possible : t -> bool
  val equal_possible : t -> t -> bool
  val equal_possible_lset : t -> Location.LSet.t -> bool
  val subset_possible : t -> t -> bool
  val subset_possible_lset : t -> Location.LSet.t -> bool
  val choose_lower : t -> Location.Loc.t option
  val set_upper_for_all : Location.LSet.t -> unit
end