End my_MapFold.
(* Next we show the assumptions in the previous section are satisfied if M is a set of maps, neutral is the empty map, op is MapMerge and R is eqmap *)

(* The net result : a semantics for MapCollect in terms of lists *)
Lemma myMapFold_as_fold_2 :
forall (A B : Set) (f : ad -> A -> Map B) (m : Map A),
eqmap _ (MapFold _ (Map B) (M0 _) (MapMerge _) f m)
(fold_right
(fun (r : ad * A) (m : Map B) =>
let (a, y) := r in MapMerge _ (f a y) m) (M0 _)
(alist_of_Map _ m)).