Definition alist := list (ad * A).
Definition anil := nil (A:=(ad * A)).
Definition acons := cons (A:=(ad * A)).
Definition aapp := app (A:=(ad * A)).
Definition alist_of_Map :=
MapFold alist anil aapp (fun (a:ad) (y:A) => acons (a, y) anil).
Fixpoint alist_semantics (l:alist) : ad -> option A :=
match l with
| nil => fun _:ad => None
| (a, y) :: l' =>
fun a0:ad => if Neqb a a0 then Some y else alist_semantics l' a0
end.

Lemma alist_of_Map_semantics_1_1 :
forall (m:Map A) (pf:ad -> ad) (a:ad) (y:A),
alist_semantics
(MapFold1 alist anil aapp (fun (a0:ad) (y:A) => acons (a0, y) anil) pf
m) a = Some y -> {a' : ad | a = pf a'}.