コンテンツにスキップ

まとめ

Lean の基本は「すべての式には型がある」という考え方です. Prop は命題,Type はデータ型,Sort はその両方を含む一般化です. α → β∀ x : α, P x はどちらも関数型・依存関数型であり,命題として読むと含意や全称量化になります. inductive は constructor で項を作る型を定義し,structure は名前つき field をもつ積型を定義し,classstructure を型クラス探索に登録できる形で定義します.

Chapter 01 で見た P ∧ QP ∨ Q∃ x, P xa = b¬ Px ≤ yx < y は,それぞれ AndOrExistsEqNotLE.leLT.lt の notation として理解できます. それぞれが structureinductivedefclass のどれで実装されているかを見ると,constructorcasesintrorflrw などの tactic がどのような証明項を作っているかも見えやすくなります.

今後 Mathlib を読むときには,まず宣言が def なのか,theorem/lemma なのか,inductive なのか,structure なのか,class/instance なのかを見ると,対象の役割を把握しやすくなります.