sig
  type location
  type value
  type t
  val hash : Abstract_memory.T.t -> int
  val equal : Abstract_memory.T.t -> Abstract_memory.T.t -> bool
  val compare : Abstract_memory.T.t -> Abstract_memory.T.t -> int
  val top : Abstract_memory.T.t
  val zero : Abstract_memory.T.t
  val is_top : Abstract_memory.T.t -> bool
  val get :
    Abstract_memory.T.t ->
    Abstract_memory.T.location -> Abstract_memory.T.value
  val extract :
    Abstract_memory.T.t -> Abstract_memory.T.location -> Abstract_memory.T.t
  val erase :
    weak:bool ->
    Abstract_memory.T.t ->
    Abstract_memory.T.location -> Abstract_memory.bit -> Abstract_memory.T.t
  val set :
    weak:bool ->
    Abstract_memory.T.t ->
    Abstract_memory.T.location ->
    Abstract_memory.T.value -> Abstract_memory.T.t
  val overwrite :
    weak:bool ->
    Abstract_memory.T.t ->
    Abstract_memory.T.location -> Abstract_memory.T.t -> Abstract_memory.T.t
  val reinforce :
    (Abstract_memory.T.value -> Abstract_memory.T.value) ->
    Abstract_memory.T.t -> Abstract_memory.T.location -> Abstract_memory.T.t
  val is_included : Abstract_memory.T.t -> Abstract_memory.T.t -> bool
  val join :
    Abstract_memory.T.t -> Abstract_memory.T.t -> Abstract_memory.T.t
  val widen :
    (size:Abstract_memory.size ->
     Abstract_memory.T.value ->
     Abstract_memory.T.value -> Abstract_memory.T.value) ->
    Abstract_memory.T.t -> Abstract_memory.T.t -> Abstract_memory.T.t
  val pretty : Stdlib.Format.formatter -> Abstract_memory.T.t -> unit
end