sig
  module type S =
    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 set_neg : elm -> t -> unit
      val disjoint : t -> t -> unit
      val get_neg : t -> elm option
    end
  module Make :
    functor (LU : LowerUpperNeg.S->
      functor
        (Var : 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 = LU.t
                 val add_img : img -> t -> unit
                 val get_img : t -> img option
               end->
        sig
          type obs = Var.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 = LU.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 set_neg : elm -> t -> unit
          val disjoint : t -> t -> unit
          val get_neg : t -> elm option
        end
end