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