コンテンツにスキップ

import Mathlib と open scoped

このプロジェクトでは各章の冒頭で import Mathlib を使っています.これは Mathlib 全体を読み込みます. 実際の開発では,ビルド時間を抑えるために必要なファイルだけを import することもあります. たとえば import Mathlib.Data.Real.Basic や import Mathlib.Topology.Basic のように,必要な分野のファイルだけを import する書き方です. import Mathlib は「Mathlib に含まれる主要な定義・定理・tactic をまとめて使えるようにする」指定であり,Lean の言語機能そのものとは区別します.

一部の notation は,スコープを開かないと使えません. 有限和 ∑ には BigOperators,拡張非負実数の ∞ には ENNReal のスコープを使います. open scoped は名前空間の中の定義名を短くするというより,特定の notation やスコープ付き notation を有効にするために使います.

Mathlib では,定義そのものと notation が分かれていることがよくあります. たとえば Real という型には ℝ という notation があり,NNReal には ℝ≥0,ENNReal には ℝ≥0∞ という notation があります. また ∑ i ∈ s, f i は有限和を表す notation で,背後には Finset.sum があります. 証明中で notation の意味が分からなくなったら,#check で型を確認し,必要なら対応する定義名を探します.

open scoped BigOperators
open scoped ENNReal
open scoped NNReal

#check は,Mathlib の名前がどのような型をもつかを確認する基本コマンドです. #synth は,指定した型クラスインスタンスを Lean が見つけられるかを確認します.

#check Finset
#check Set
#check Real
#check NNReal
#check EReal
#check ENNReal
#check ℝ
#check ℝ≥0
#check ℝ≥0∞
#check (∞ : ℝ≥0∞)

#synth Field ℝ
#synth LinearOrder ℝ
#synth TopologicalSpace ℝ
#synth Add ENNReal
#synth CompleteLinearOrder ENNReal

演習

#synth で,実数が体・線形順序・狭義順序環の構造を持つことを確認してください.

#synth Field ℝ
#synth LinearOrder ℝ
#synth IsStrictOrderedRing ℝ