Fixpoint map_app_list1 (pf : ad -> ad) (l : list ad) 
 (m : Map A) {struct m} : list ad :=
  match m with
  | M0 => l
  | M1 a y => pf a :: l
  | M2 m1 m2 =>
      map_app_list1 (fun a0 : ad => pf (Ndouble_plus_one a0))
        (map_app_list1 (fun a0 : ad => pf (Ndouble a0)) l m1) m2
  end.

Lemma map_app_list1_lemma_3 : forall (m : Map A) (pf fp : ad -> ad) (l : list ad), (forall a0 : ad, fp (pf a0) = a0) -> no_dup_list _ l -> (forall a : ad, in_dom _ a m = true -> ~ In (pf a) l) -> no_dup_list _ (map_app_list1 pf l m).