module type MapSet_Lattice =sig
..end
A lattice structure on top of maps from keys to values and sets of keys. The maps and the sets have their own lattice structure (see abstract_interp.ml for the lattice of sets). The sets are implicitly considered as maps binding all their keys to top. Any map is included in the set of its keys (and in any larger set).
type
set
type
map
type
t =
| |
Top of |
| |
Map of |
include Datatype.S_with_collections
include Map_lattice.Lattice
val bottom : t
val top : t
type
key
type
v
val add : key ->
v ->
t -> t
add key v t
binds the value v
to key
in t
. If t
is a set, it
adds key
to the set. If v
is bottom, then it removes the key
from
t
instead.
val find : key ->
t -> v
find key t
returns the value bound to key
in t
. It returns Value.top
if t
is a set that contains key
. It returns Value.bottom if key
does
not belong to t
.
val find_lonely_key : t ->
key * v
If t
is a singleton map binding k
to v
, then returns the pair (k,v).
Not_found
otherwise.val split : key ->
t ->
v * t
split key t
is equivalent to find key t
, add key bottom t
.
val inject : key ->
v -> t
Returns the singleton map binding key
to v
.
val get_keys : t -> set
Returns the set of keys in t
.
val filter_keys : (key -> bool) ->
t -> t
val map : (v -> v) ->
t -> t
val fold_keys : (key -> 'a -> 'a) ->
t -> 'a -> 'a
val fold : (key -> v -> 'a -> 'a) ->
t -> 'a -> 'a
val cached_fold : cache_name:string ->
temporary:bool ->
f:(key -> v -> 'a) ->
projection:(key -> v) ->
joiner:('a -> 'a -> 'a) -> empty:'a -> t -> 'a
val for_all : (key -> v -> bool) ->
t -> bool
for_all p t
checks if all binding of t
satisfy p
. Always false if
t
is top.
val exists : (key -> v -> bool) ->
t -> bool
exists p t
checks if one binding of t
satisfies p
. Always true if
t
is top.
val pretty_debug : Format.formatter -> t -> unit