let is_included_exn =
    let map_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
        (*      Format.printf "begin is_included_exn map_lattice@."; *)
        (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 -> map_is_included m1 m2)