Definition ad_inj (pf:ad -> ad) :=
    forall a0 a1:ad, pf a0 = pf a1 -> a0 = a1.

(* Specifications: *)
Lemma ad_comp_double_inj : forall pf:ad -> ad, ad_inj pf -> ad_inj (fun a0:ad => pf (Ndouble a0)).
Lemma ad_comp_double_plus_un_inj : forall pf:ad -> ad, ad_inj pf -> ad_inj (fun a0:ad => pf (Ndouble_plus_one a0)).
Lemma alist_of_Map_semantics_1 : forall (m:Map A) (pf:ad -> ad), ad_inj pf -> forall a:ad, MapGet A m a = alist_semantics (MapFold1 alist anil aapp (fun (a0:ad) (y:A) => acons (a0, y) anil) pf m) (pf a).
Lemma alist_of_Map_semantics : forall m:Map A, eqm A (MapGet A m) (alist_semantics (alist_of_Map m)).