@@ -565,17 +565,41 @@ struct
565565 let nonidempotent_union f m1 m2 = M. nonidempotent_union (fun b1 b2 ->
566566 B. nonidempotent_union f b1 b2
567567 ) m1 m2
568- let idempotent_inter f m1 m2 = M. idempotent_inter (fun b1 b2 ->
569- B. idempotent_inter f b1 b2 (* TODO: should remove bot bucket to preserve invariant? *)
568+ let idempotent_inter f m1 m2 = M. idempotent_inter_filter (fun b1 b2 ->
569+ match B. idempotent_inter f b1 b2 with
570+ | b' when B. is_bot b' ->
571+ None (* remove bot bucket to preserve invariant *)
572+ | exception Lattice. BotValue ->
573+ None (* remove bot bucket to preserve invariant *)
574+ | b' ->
575+ Some b'
570576 ) m1 m2
571- let nonidempotent_inter f m1 m2 = M. nonidempotent_inter (fun b1 b2 ->
572- B. nonidempotent_inter f b1 b2 (* TODO: should remove bot bucket to preserve invariant? *)
577+ let nonidempotent_inter f m1 m2 = M. nonidempotent_inter_filter (fun b1 b2 ->
578+ match B. nonidempotent_inter f b1 b2 with
579+ | b' when B. is_bot b' ->
580+ None (* remove bot bucket to preserve invariant *)
581+ | exception Lattice. BotValue ->
582+ None (* remove bot bucket to preserve invariant *)
583+ | b' ->
584+ Some b'
573585 ) m1 m2
574- let idempotent_inter_filter f m1 m2 = M. idempotent_inter (fun b1 b2 ->
575- B. idempotent_inter_filter f b1 b2 (* TODO: should remove bot bucket to preserve invariant? *)
586+ let idempotent_inter_filter f m1 m2 = M. idempotent_inter_filter (fun b1 b2 ->
587+ match B. idempotent_inter_filter f b1 b2 with
588+ | b' when B. is_bot b' ->
589+ None (* remove bot bucket to preserve invariant *)
590+ | exception Lattice. BotValue ->
591+ None (* remove bot bucket to preserve invariant *)
592+ | b' ->
593+ Some b'
576594 ) m1 m2
577- let nonidempotent_inter_filter f m1 m2 = M. nonidempotent_inter (fun b1 b2 ->
578- B. nonidempotent_inter_filter f b1 b2 (* TODO: should remove bot bucket to preserve invariant? *)
595+ let nonidempotent_inter_filter f m1 m2 = M. nonidempotent_inter_filter (fun b1 b2 ->
596+ match B. nonidempotent_inter_filter f b1 b2 with
597+ | b' when B. is_bot b' ->
598+ None (* remove bot bucket to preserve invariant *)
599+ | exception Lattice. BotValue ->
600+ None (* remove bot bucket to preserve invariant *)
601+ | b' ->
602+ Some b'
579603 ) m1 m2
580604 let difference f m1 m2 = M. difference (fun b1 b2 ->
581605 match B. difference f b1 b2 with
0 commit comments