Definition ad_list_of_dom :=
    MapFold A (list ad) nil (app (A:=ad)) (fun (a:ad) (_:A) => a :: nil).

(* Specifications: *)
Lemma ad_in_list_of_dom_in_dom : forall (m:Map A) (a:ad), ad_in_list a (ad_list_of_dom m) = in_dom A a m.
Lemma Elems_of_list_of_dom : forall m:Map A, eqmap unit (Elems (ad_list_of_dom m)) (MapDom A m).
Lemma Elems_of_list_of_dom_c : forall m:Map A, mapcanon A m -> Elems (ad_list_of_dom m) = MapDom A m.
Lemma ad_list_of_dom_card_1 : forall (m:Map A) (pf:ad -> ad), length (MapFold1 A (list ad) nil (app (A:=ad)) (fun (a:ad) (_:A) => a :: nil) pf m) = MapCard A m.
Lemma ad_list_of_dom_card : forall m:Map A, length (ad_list_of_dom m) = MapCard A m.
Lemma ad_list_of_dom_not_stutters : forall m:Map A, ad_list_stutters (ad_list_of_dom m) = false.
Lemma ad_list_of_dom_Dom_1 : forall (A:Type) (m:Map A) (pf:ad -> ad), MapFold1 A (list ad) nil (app (A:=ad)) (fun (a:ad) (_:A) => a :: nil) pf m = MapFold1 unit (list ad) nil (app (A:=ad)) (fun (a:ad) (_:unit) => a :: nil) pf (MapDom A m).
Lemma ad_list_of_dom_Dom : forall (A:Type) (m:Map A), ad_list_of_dom A m = ad_list_of_dom unit (MapDom A m).