Fixpoint Map_of_alist (l:alist) : Map A :=
    match l with
    | nil => M0 A
    | (a, y) :: l' => MapPut A (Map_of_alist l') a y
    end.

Lemma alist_MapMerge_semantics_disjoint : forall m m':Map A, eqmap A (MapDomRestrTo A A m m') (M0 A) -> eqm A (alist_semantics (aapp (alist_of_Map m) (alist_of_Map m'))) (alist_semantics (alist_of_Map (MapMerge A m m'))).