Variable comm : forall a b:M, op a b = op b a.

Lemma MapFold_Put_disjoint :
forall (f:ad -> A -> M) (m:Map A) (a:ad) (y:A),
MapGet A m a = None ->
MapFold A M neutral op f (MapPut A m a y) =
op (f a y) (MapFold A M neutral op f m).