sig
  module V :
    sig
      type t = Abstract_interp.Int.t
      val ty : t Type.t
      val name : string
      val descr : t Descr.t
      val packed_descr : Structural_descr.pack
      val reprs : t list
      val equal : t -> t -> bool
      val compare : t -> t -> int
      val hash : t -> int
      val pretty_code : Format.formatter -> t -> unit
      val internal_pretty_code :
        Type.precedence -> Format.formatter -> t -> unit
      val pretty : Format.formatter -> t -> unit
      val varname : t -> string
      val mem_project : (Project_skeleton.t -> bool) -> t -> bool
      val copy : t -> t
      val gt : t -> t -> bool
      val le : t -> t -> bool
      val ge : t -> t -> bool
      val lt : t -> t -> bool
      val add : t -> t -> t
      val sub : t -> t -> t
      val mul : t -> t -> t
      val native_div : t -> t -> t
      val rem : t -> t -> t
      val pos_div : t -> t -> t
      val c_div : t -> t -> t
      val c_rem : t -> t -> t
      val cast : size:t -> signed:bool -> value:t -> t
      val abs : t -> t
      val zero : t
      val one : t
      val two : t
      val four : t
      val minus_one : t
      val is_zero : t -> bool
      val is_one : t -> bool
      val pgcd : t -> t -> t
      val ppcm : t -> t -> t
      val min : t -> t -> t
      val max : t -> t -> t
      val length : t -> t -> t
      val of_int : int -> t
      val of_float : float -> t
      val of_int64 : Int64.t -> t
      val to_int : t -> int
      val to_float : t -> float
      val neg : t -> t
      val succ : t -> t
      val pred : t -> t
      val round_up_to_r : min:t -> r:t -> modu:t -> t
      val round_down_to_r : max:t -> r:t -> modu:t -> t
      val pos_rem : t -> t -> t
      val shift_left : t -> t -> t
      val shift_right : t -> t -> t
      val fold : (t -> '-> 'a) -> inf:t -> sup:t -> step:t -> '-> 'a
      val logand : t -> t -> t
      val logor : t -> t -> t
      val logxor : t -> t -> t
      val lognot : t -> t
      val power_two : int -> t
      val two_power : t -> t
      val extract_bits : start:t -> stop:t -> t -> t
    end
  type elt = Ival.Widen_Hints.V.t
  type t
  val ty : t Type.t
  val name : string
  val descr : t Descr.t
  val packed_descr : Structural_descr.pack
  val reprs : t list
  val equal : t -> t -> bool
  val compare : t -> t -> int
  val hash : t -> int
  val pretty_code : Format.formatter -> t -> unit
  val internal_pretty_code : Type.precedence -> Format.formatter -> t -> unit
  val pretty : Format.formatter -> t -> unit
  val varname : t -> string
  val mem_project : (Project_skeleton.t -> bool) -> t -> bool
  val copy : t -> t
  val empty : t
  val is_empty : t -> bool
  val mem : Ival.Widen_Hints.elt -> t -> bool
  val add : Ival.Widen_Hints.elt -> t -> t
  val singleton : Ival.Widen_Hints.elt -> t
  val remove : Ival.Widen_Hints.elt -> t -> t
  val union : t -> t -> t
  val inter : t -> t -> t
  val diff : t -> t -> t
  val subset : t -> t -> bool
  val iter : (Ival.Widen_Hints.elt -> unit) -> t -> unit
  val fold : (Ival.Widen_Hints.elt -> '-> 'a) -> t -> '-> 'a
  val for_all : (Ival.Widen_Hints.elt -> bool) -> t -> bool
  val exists : (Ival.Widen_Hints.elt -> bool) -> t -> bool
  val filter : (Ival.Widen_Hints.elt -> bool) -> t -> t
  val partition : (Ival.Widen_Hints.elt -> bool) -> t -> t * t
  val cardinal : t -> int
  val elements : t -> Ival.Widen_Hints.elt list
  val min_elt : t -> Ival.Widen_Hints.elt
  val max_elt : t -> Ival.Widen_Hints.elt
  val choose : t -> Ival.Widen_Hints.elt
  val split : Ival.Widen_Hints.elt -> t -> t * bool * t
  val nearest_elt_le : Ival.Widen_Hints.elt -> t -> Ival.Widen_Hints.elt
  val nearest_elt_ge : Ival.Widen_Hints.elt -> t -> Ival.Widen_Hints.elt
  val default_widen_hints : t
end