let filter_comparison ival_filter e1 ~cond_expr =
let r =
match e1 with
| Top _ -> e1
| Map m1 ->
try
let k,v2 = find_lonely_key cond_expr in
let v1 = find_or_bottom k m1 in
let r = Map (add_or_bottom k (ival_filter v1 v2) m1) in
if (not (Base.equal k Base.null)) &&
(ival_filter == Ival.filter_ge || ival_filter == Ival.filter_gt)
then diff_if_one r singleton_zero
else r
with Not_found -> e1
in
(* Format.printf "filter_comparison %a %a -> %a@."
pretty e1 pretty cond_expr pretty r; *)
r