- 06/23 [Schedule/ProofCafe_21]() - 時間: 14:30 - 17:30 - 場所: [名古屋大学 理学部1号館(多元数理科学棟)](http://www.math.nagoya-u.ac.jp/ja/direction/campus.html) 307 - 参加登録: [PARTAKE: 第21回 ProofCafe ](http://partake.in/events/a4f91b1a-15c0-419f-abe9-bd030ccfd76e) - [ソフトウェアの基礎](http://proofcafe.org/sf/)の[ポリモルフィズム(多相性)](http://proofcafe.org/sf/Poly_J.html)の「練習問題: (apply_exercises)の三つめ override_permute (小川さん担当)」から - 参加者: 人 # 演習問題 fold_map ~~~ { .v } Definition fold_map {X Y:Type} (f : X -> Y) (l : list X) : list Y := fold (fun x l1 => (f x) :: l1) l []. Theorem fold_map_correct : forall X Y (f : X-> Y)(l : list X), fold_map f l = map f l. Proof. intros. induction l. Case "l=[]". auto. Case "l =x :: l". simpl. rewrite <- IHl. auto. Qed. ~~~ # 演習問題 forall_exists_challenge ~~~ { .v } Definition forallb {X : Type} (f: X -> bool) (l: list X) : bool := fold (fun x b => andb (f x) b) l true. Definition existsb {X : Type} (f: X -> bool) (l: list X) : bool := fold (fun x b => orb (f x) b) l false. Definition existsb' {X : Type} (f: X -> bool) (l: list X) : bool := negb (forallb (fun x => negb (f x)) l). ~~~