sig
  type elm
  type t =
      [ `Lower of LowerUpperNeg.S.elm
      | `LowerNeg of LowerUpperNeg.S.elm * LowerUpperNeg.S.elm
      | `LowerUpper of LowerUpperNeg.S.elm * LowerUpperNeg.S.elm
      | `Neg of LowerUpperNeg.S.elm
      | `Upper of LowerUpperNeg.S.elm ]
  val create_lower : LowerUpperNeg.S.elm -> LowerUpperNeg.S.t
  val create_upper : LowerUpperNeg.S.elm -> LowerUpperNeg.S.t
  val create_neg : LowerUpperNeg.S.elm -> LowerUpperNeg.S.t
  val create_lowerupper :
    LowerUpperNeg.S.elm -> LowerUpperNeg.S.elm -> LowerUpperNeg.S.t
  val create_lowerneg :
    LowerUpperNeg.S.elm -> LowerUpperNeg.S.elm -> LowerUpperNeg.S.t
  val compare : LowerUpperNeg.S.t -> LowerUpperNeg.S.t -> int
  val merge : LowerUpperNeg.S.t -> LowerUpperNeg.S.t -> LowerUpperNeg.S.t
  val get_exact : LowerUpperNeg.S.t -> LowerUpperNeg.S.elm option
  val string_of : LowerUpperNeg.S.t -> string
end