functor (Config : Config) (M : Abstract_memory.ProtoMemory->
  sig
    type bound = Bound.t
    type submemory = M.t
    type t
    val pretty : Format.formatter -> t -> unit
    val hash : t -> int
    val equal : t -> t -> bool
    val compare : t -> t -> int
    val hull :
      oracle:Abstract_memory.oracle ->
      t -> (bound * bound) Lattice_bounds.or_top
    val raw : t -> Abstract_memory.Bit.t
    val weak_erase : Abstract_memory.Bit.t -> t -> t
    val is_included : t -> t -> bool
    val unify :
      oracle:Abstract_memory.bioracle ->
      (submemory -> submemory -> submemory) ->
      t -> t -> t Lattice_bounds.or_top
    val single : Abstract_memory.bit -> bound -> bound -> submemory -> t
    val read :
      oracle:Abstract_memory.oracle ->
      (submemory -> 'a) -> ('-> '-> 'a) -> t -> bound -> bound -> 'a
    val update :
      oracle:Abstract_memory.oracle ->
      (submemory -> submemory Lattice_bounds.or_bottom) ->
      t -> bound -> bound -> t Lattice_bounds.or_top_bottom
    val incr_bound :
      oracle:Abstract_memory.oracle ->
      Cil_types.varinfo -> Integer.t option -> t -> t Lattice_bounds.or_top
    val map : (submemory -> submemory) -> t -> t
    val fold :
      (submemory -> '-> 'a) ->
      (Abstract_memory.bit -> '-> 'a) -> t -> '-> 'a
    val add_segmentation_bounds :
      oracle:Abstract_memory.oracle -> bound list -> t -> t
  end