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_semantics_disjoint_comm :
forall l l':alist,
eqmap A (MapDomRestrTo A A (Map_of_alist l) (Map_of_alist l')) (M0 A) ->
eqm A (alist_semantics (aapp l l')) (alist_semantics (aapp l' l)).