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.

(* Specifications: *)
Lemma alist_semantics_app : forall (l l':alist) (a:ad), alist_semantics (aapp l l') a = match alist_semantics l a with | None => alist_semantics l' a | Some y => Some y 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'}.