sig
  type itv = Abstract_interp.Int.t * Abstract_interp.Int.t
  module Make :
    functor
      (V : sig
             exception Error_Top
             exception Error_Bottom
             type t
             type widen_hint
             val equal : t -> t -> bool
             val join : t -> t -> t
             val link : t -> t -> t
             val meet : t -> t -> t
             val narrow : t -> t -> t
             val bottom : t
             val top : t
             val is_included : t -> t -> bool
             val is_included_exn : t -> t -> unit
             val intersects : t -> t -> bool
             val pretty : Format.formatter -> t -> unit
             val widen : widen_hint -> t -> t -> t
             val cardinal_zero_or_one : t -> bool
             val cardinal_less_than : t -> int -> int
             val tag : t -> int
             module Datatype :
               sig
                 type t = t
                 val rehash : t -> t
                 val descr : Unmarshal.t
                 val copy : t -> t
                 val name : string
                 val register_comparable :
                   ?compare:(t -> t -> int) ->
                   ?equal:(t -> t -> bool) ->
                   ?hash:(t -> int) ->
                   ?physical_hash:(t -> int) -> unit -> unit
                 val is_comparable_set : unit -> bool
                 val hash : t -> int
                 val physical_hash : t -> int
                 val equal : t -> t -> bool
                 val compare : t -> t -> int
                 val contain_project :
                   (Project.project -> t -> bool) option ref
               end
             val tag : t -> int
           end->
      sig
        type t
        module Datatype :
          sig
            type t = t
            val rehash : t -> t
            val descr : Unmarshal.t
            val copy : t -> t
            val name : string
            val register_comparable :
              ?compare:(t -> t -> int) ->
              ?equal:(t -> t -> bool) ->
              ?hash:(t -> int) -> ?physical_hash:(t -> int) -> unit -> unit
            val is_comparable_set : unit -> bool
            val hash : t -> int
            val physical_hash : t -> int
            val equal : t -> t -> bool
            val compare : t -> t -> int
            val contain_project : (Project.project -> t -> bool) option ref
          end
        val empty : Offsetmap_bitwise.Make.t
        val degenerate : V.t -> Offsetmap_bitwise.Make.t
        val pretty_with_type :
          Cil_types.typ option ->
          Format.formatter -> Offsetmap_bitwise.Make.t -> unit
        val pretty : Format.formatter -> Offsetmap_bitwise.Make.t -> unit
        val is_empty : Offsetmap_bitwise.Make.t -> bool
        val find :
          (Abstract_interp.Int.t -> Abstract_interp.Int.t -> V.t) ->
          Offsetmap_bitwise.itv -> Offsetmap_bitwise.Make.t -> V.t
        val find_intervs :
          (Abstract_interp.Int.t -> Abstract_interp.Int.t -> V.t) ->
          Abstract_value.Int_Intervals.t -> Offsetmap_bitwise.Make.t -> V.t
        val add :
          Offsetmap_bitwise.itv ->
          V.t -> Offsetmap_bitwise.Make.t -> Offsetmap_bitwise.Make.t
        val add_approximate :
          Offsetmap_bitwise.itv ->
          V.t -> Offsetmap_bitwise.Make.t -> Offsetmap_bitwise.Make.t
        val collapse : Offsetmap_bitwise.Make.t -> V.t
        val find_iset :
          (Abstract_interp.Int.t -> Abstract_interp.Int.t -> V.t) ->
          V.t ->
          Abstract_value.Int_Intervals.t -> Offsetmap_bitwise.Make.t -> V.t
        val add_iset :
          exact:bool ->
          Abstract_value.Int_Intervals.t ->
          V.t -> Offsetmap_bitwise.Make.t -> Offsetmap_bitwise.Make.t
        val join :
          Offsetmap_bitwise.Make.t ->
          Offsetmap_bitwise.Make.t -> Offsetmap_bitwise.Make.t
        val joindefault :
          Offsetmap_bitwise.Make.t -> Offsetmap_bitwise.Make.t
        val is_included_exn :
          Offsetmap_bitwise.Make.t -> Offsetmap_bitwise.Make.t -> unit
        val map_and_merge :
          (V.t -> V.t) ->
          Offsetmap_bitwise.Make.t ->
          Offsetmap_bitwise.Make.t -> Offsetmap_bitwise.Make.t
        val map :
          (bool * V.t -> bool * V.t) ->
          Offsetmap_bitwise.Make.t -> Offsetmap_bitwise.Make.t
        val map2 :
          ((bool * V.t) option -> (bool * V.t) option -> bool * V.t) ->
          Offsetmap_bitwise.Make.t ->
          Offsetmap_bitwise.Make.t -> Offsetmap_bitwise.Make.t
        val fold :
          (Abstract_value.Int_Intervals.t -> bool * V.t -> '-> 'a) ->
          Offsetmap_bitwise.Make.t -> '-> 'a
        val copy_paste :
          f:((bool * V.t -> bool * V.t) *
             (Abstract_interp.Int.t -> Abstract_interp.Int.t -> V.t))
            option ->
          Offsetmap_bitwise.Make.t ->
          Abstract_interp.Int.t ->
          Abstract_interp.Int.t ->
          Abstract_interp.Int.t ->
          Offsetmap_bitwise.Make.t -> Offsetmap_bitwise.Make.t
        val copy_merge :
          Offsetmap_bitwise.Make.t ->
          Abstract_interp.Int.t ->
          Abstract_interp.Int.t ->
          Abstract_interp.Int.t ->
          Offsetmap_bitwise.Make.t -> Offsetmap_bitwise.Make.t
        val copy :
          f:((bool * V.t -> bool * V.t) *
             (Abstract_interp.Int.t -> Abstract_interp.Int.t -> V.t))
            option ->
          Offsetmap_bitwise.Make.t ->
          Abstract_interp.Int.t ->
          Abstract_interp.Int.t -> Offsetmap_bitwise.Make.t
        val equal :
          Offsetmap_bitwise.Make.t -> Offsetmap_bitwise.Make.t -> bool
        val tag : Offsetmap_bitwise.Make.t -> int
      end
end