sig
  type elt = Abstract_interp.Int.t
  type t
  val empty : Ival.O.t
  val is_empty : Ival.O.t -> bool
  val mem : Ival.O.elt -> Ival.O.t -> bool
  val add : Ival.O.elt -> Ival.O.t -> Ival.O.t
  val singleton : Ival.O.elt -> Ival.O.t
  val remove : Ival.O.elt -> Ival.O.t -> Ival.O.t
  val union : Ival.O.t -> Ival.O.t -> Ival.O.t
  val inter : Ival.O.t -> Ival.O.t -> Ival.O.t
  val diff : Ival.O.t -> Ival.O.t -> Ival.O.t
  val compare : Ival.O.t -> Ival.O.t -> int
  val equal : Ival.O.t -> Ival.O.t -> bool
  val subset : Ival.O.t -> Ival.O.t -> bool
  val iter : (Ival.O.elt -> unit) -> Ival.O.t -> unit
  val fold : (Ival.O.elt -> '-> 'a) -> Ival.O.t -> '-> 'a
  val for_all : (Ival.O.elt -> bool) -> Ival.O.t -> bool
  val exists : (Ival.O.elt -> bool) -> Ival.O.t -> bool
  val filter : (Ival.O.elt -> bool) -> Ival.O.t -> Ival.O.t
  val partition : (Ival.O.elt -> bool) -> Ival.O.t -> Ival.O.t * Ival.O.t
  val cardinal : Ival.O.t -> int
  val elements : Ival.O.t -> Ival.O.elt list
  val min_elt : Ival.O.t -> Ival.O.elt
  val max_elt : Ival.O.t -> Ival.O.elt
  val choose : Ival.O.t -> Ival.O.elt
  val split : Ival.O.elt -> Ival.O.t -> Ival.O.t * bool * Ival.O.t
end