let filter_base f m =
match m with
| Top (t, a) ->
(try
inject_top_origin a
(Top_Param.fold
(fun v acc -> if f v then Top_Param.O.add v acc else acc)
t
Top_Param.O.empty)
with Top_Param.Error_Top -> top)
| Map m ->
Map (M.fold (fun k _ acc -> if f k then acc else M.remove k acc) m m)