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
  module I : sig type key type img end
  val domain : t -> MapVar.S_WITHOUT_STATE.I.key list
  val find' :
    MapVar.S_WITHOUT_STATE.I.key -> t -> MapVar.S_WITHOUT_STATE.I.img option
  val find_or_add :
    create:(unit -> MapVar.S_WITHOUT_STATE.I.img) ->
    key:MapVar.S_WITHOUT_STATE.I.key -> map:t -> MapVar.S_WITHOUT_STATE.I.img
  val iter :
    (MapVar.S_WITHOUT_STATE.I.key -> MapVar.S_WITHOUT_STATE.I.img -> unit) ->
    t -> unit
  val fold :
    (MapVar.S_WITHOUT_STATE.I.key -> MapVar.S_WITHOUT_STATE.I.img -> '-> 'a) ->
    t -> '-> 'a
  val make_write_equal :
    (MapVar.S_WITHOUT_STATE.I.key -> MapVar.S_WITHOUT_STATE.I.key -> int) ->
    (MapVar.S_WITHOUT_STATE.I.img -> MapVar.S_WITHOUT_STATE.I.img -> unit) ->
    t -> t -> MapVar.S_WITHOUT_STATE.I.key -> unit
  val string_of_map : t -> string
  val string_of_with_img : t -> string
end