End MapFoldExists.
Section DMergeDef.
Variable A : Type.
Definition DMerge :=
MapFold (Map A) (Map A) (M0 A) (MapMerge A) (fun (_:ad) (m:Map A) => m).

(* Specifications: *)
Lemma in_dom_DMerge_1 :
forall (m:Map (Map A)) (a:ad),
in_dom A a (DMerge m) =
match MapSweep _ (fun (_:ad) (m0:Map A) => in_dom A a m0) m with
| Some _ => true
| _ => false
end.
Lemma in_dom_DMerge_2 :
forall (m:Map (Map A)) (a:ad),
in_dom A a (DMerge m) = true ->
{b : ad &
{m0 : Map A | MapGet _ m b = Some m0 /\ in_dom A a m0 = true}}.
Lemma in_dom_DMerge_3 :
forall (m:Map (Map A)) (a b:ad) (m0:Map A),
MapGet _ m a = Some m0 ->
in_dom A b m0 = true -> in_dom A b (DMerge m) = true.