let is_included_exn =
let generic_is_included =
M.generic_is_included Abstract_interp.Is_not_included
~cache:("map_Lattice",2048) ~decide_fst ~decide_snd ~decide_both
in
fun m1 m2 ->
if (m1 != m2)
then
(match m1,m2 with
| Top (s,a), Top (s',a') ->
Top_Param.is_included_exn s s' ;
Origin.is_included_exn a a'
| Map _, Top (Top_Param.Top, _) -> ()
| Map m, Top (Top_Param.Set set, _) ->
M.iter
(fun k _ ->
if not (is_in_set ~set k)
then raise Is_not_included)
m
| Top _, Map _ -> raise Is_not_included
| Map m1, Map m2 -> generic_is_included m1 m2)