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 Map_of_alist_semantics : forall l:alist, eqm A (alist_semantics l) (MapGet A (Map_of_alist l)).