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