コンテンツにスキップ

まとめ

Mathlib を使う証明では,具体的な対象だけでなく,それが持つ型クラスインスタンスを意識することが重要です. Set α は型 α 上の部分集合全体を表し,Finset α は有限集合をデータとして持つ型です. また,ℝ≥0ℝ≥0∞EReal は別々の型であり,用途に応じて選びます. それぞれに登録された型クラスインスタンスと,型の間の coercion・変換関数を確認することが重要です. 不等式 a ≤ ba < b は,両辺の型に入っている順序構造から作られる命題です. 数値計算,線形不等式,多項式不等式,単調性,型変換を切り分けると,使う tactic や補題を選びやすくなります.

Mathlib の証明は既存補題の組み合わせです. #check#synth,命名規則,simprwextnorm_numlinarithnlinarith を使いながら,ゴールに合う補題を探して適用します. 大きな流れとしては,まず型クラスや bundled structure などの一般的な読み方を押さえ,その上で SetFinset,実数,不等式の各対象に入ると,Mathlib の定理の形が見通しやすくなります.