functor (V : Lattice_With_Isotropy.S->
  sig
    type t
    type y = V.t
    type widen_hint = V.widen_hint
    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
    val empty : t
    val is_empty : t -> bool
    val equal : t -> t -> bool
    val pretty_typ : Cil_types.typ option -> Format.formatter -> t -> unit
    val pretty : Format.formatter -> t -> unit
    val pretty_debug : Format.formatter -> t -> unit
    val reduce : Ival.t -> size:Abstract_interp.Int.t -> y -> t -> t
    val is_included : t -> t -> bool
    val is_included_exn : t -> t -> unit
    val is_included_exn_generic : (y -> y -> unit) -> t -> t -> unit
    val is_included_actual_generic :
      BaseUtils.BaseSet.t ->
      BaseUtils.BaseSet.t ref ->
      Locations.Location_Bytes.t BaseUtils.BaseMap.t ref -> t -> t -> unit
    val join :
      t -> t -> (Abstract_interp.Int.t * Abstract_interp.Int.t) list * t
    val widen : widen_hint -> t -> t -> t
    val find_ival :
      validity:Base.validity ->
      with_alarms:CilE.warn_mode ->
      Ival.t -> t -> Abstract_interp.Int.t -> y -> y
    val concerned_bindings_ival :
      offsets:Ival.t ->
      offsetmap:t -> size:Abstract_interp.Int.t -> y list -> y list
    val update_ival :
      with_alarms:CilE.warn_mode ->
      validity:Base.validity ->
      exact:bool ->
      offsets:Ival.t -> size:Abstract_interp.Int.t -> t -> y -> t
    val overwrite : t -> y -> Origin.t -> t
    val over_intersection : t -> t -> t
    val from_string : string -> t
    val add_internal :
      itv -> Abstract_interp.Int.t * Abstract_interp.Int.t * y -> t -> t
    val add_whole : itv -> y -> t -> t
    val remove_whole : itv -> t -> t
    val fold_whole :
      size:Abstract_interp.Int.t ->
      (Ival.t -> Abstract_interp.Int.t -> y -> '-> 'a) -> t -> '-> 'a
    val fold_single_bindings :
      size:Abstract_interp.Int.t ->
      (Ival.t -> Abstract_interp.Int.t -> y -> '-> 'a) -> t -> '-> 'a
    val fold_internal :
      (itv -> Abstract_interp.Int.t * Abstract_interp.Int.t * y -> '-> 'a) ->
      t -> '-> 'a
    val shift_ival : Ival.t -> t -> t option -> t option
    val copy_paste :
      t ->
      Abstract_interp.Int.t ->
      Abstract_interp.Int.t -> Abstract_interp.Int.t -> t -> t
    val copy_merge :
      t ->
      Abstract_interp.Int.t ->
      Abstract_interp.Int.t -> Abstract_interp.Int.t -> t -> t
    val copy : t -> Abstract_interp.Int.t -> Abstract_interp.Int.t -> t
    val merge_by_itv : t -> t -> Abstract_value.Int_Intervals.t -> t
    val shift : Abstract_interp.Int.t -> t -> t
    val sized_zero : size_in_bits:Abstract_interp.Int.t -> t
    val reciprocal_image :
      t -> Base.t -> Abstract_value.Int_Intervals.t * Ival.t
    val create_initial : v:y -> modu:Abstract_interp.Int.t -> t
    val reduce_by_int_intervals : t -> Abstract_value.Int_Intervals.t -> t
    val top_stuff : (y -> bool) -> (y -> y) -> t -> t
    val iter_contents : (y -> unit) -> t -> Abstract_interp.Int.t -> unit
    val fold :
      (Abstract_interp.Int.t * Abstract_interp.Int.t ->
       Abstract_interp.Int.t * Abstract_interp.Int.t * y -> '-> 'a) ->
      t -> '-> 'a
  end