第11章 拓扑 - 深度伴读

本章定位

本章是 Mathlib 拓扑学的核心入门,内容量大且抽象:

  1. 滤子(Filter):统一处理所有极限概念的关键抽象
  2. 度量空间(MetricSpace):收敛、连续性、紧致性、完备性
  3. 拓扑空间(TopologicalSpace):开集、邻域、函子性、分离公理

滤子是本章 hardest 的部分,但理解后所有极限/收敛/连续性概念都会变得统一而简洁。


11.1 Filters

核心洞见

滤子 = “充分大集合”的抽象。一个滤子统一表达:

  • n → ∞atTop
  • x → x₀𝓝 x₀,邻域滤子)
  • x → x₀⁺𝓝[Ioi x₀] x₀
  • 几乎处处(μ.ae,测度论)

不用滤子,64 种极限 × 复合 = 512 个引理。用滤子,全部统一为 Tendsto

11.1.1 滤子的定义

structure Filter (α : Type*) where
  sets : Set (Set α)        -- 集合的集合
  univ_sets : univ ∈ sets   -- 全集在其中
  sets_of_superset {U V} : U ∈ sets → U ⊆ V → V ∈ sets  -- 向上封闭
  inter_sets {U V} : U ∈ sets → V ∈ sets → U ∩ V ∈ sets  -- 对交封闭

U ∈ F 的含义

U ∈ FU ∈ F.sets。可以把滤子想象成一个”充分大集合”的族。

11.1.2 常用滤子

open Filter
 
-- 𝓟 = \MCP(主滤子),包含 s 的所有超集
-- Ioo = open interval open,即开区间 (a, b)
def principal {α : Type*} (s : Set α) : Filter α where
  sets := { t | s ⊆ t }
  ...
 
-- 自然数的余尾滤子
example : Filter ℕ :=
  { sets := { s | ∃ a, ∀ b, a ≤ b → b ∈ s }
    ... }
 
-- 邻域滤子
#check (𝓝 x₀ : Filter ℝ)  -- x₀ 的邻域滤子
 
-- 积滤子
example (x₀ y₀ : ℝ) : 𝓝 (x₀, y₀) = 𝓝 x₀ ×ˢ 𝓝 y₀ := nhds_prod_eq

11.1.3 滤子的推前与拉回

-- map = 推前(像的滤子)
#check Filter.map f F    -- f_* F
 
-- comap = 拉回(原像的滤子)
#check Filter.comap f G  -- f^* G
 
-- Galois 连接
#check Filter.map_le_iff_le_comap : map f F ≤ G ↔ F ≤ comap f G
 
-- comap 的逆变复合
#check comap_comap : comap m (comap n F) = comap (n ∘ m) F

直观理解

map u atTop ≤ 𝓝 x₀ = “u 把充分大的自然数映射到 x₀ 的充分近邻域中”

11.1.4 Tendsto:统一的极限

-- 定义1(用集合成员)
def Tendsto₁ {X Y : Type*} (f : X → Y) (F : Filter X) (G : Filter Y) :=
  ∀ V ∈ G, f ⁻¹' V ∈ F
 
-- 定义2(用滤子序,更代数化)
def Tendsto₂ {X Y : Type*} (f : X → Y) (F : Filter X) (G : Filter Y) :=
  map f F ≤ G
 
-- 两者等价
example : Tendsto₂ f F G ↔ Tendsto₁ f F G := Iff.rfl

Tendsto 的威力

Tendsto u atTop (𝓝 x) = 序列 u 收敛到 x Tendsto f (𝓝 x₀) (𝓝 y₀) = lim_{x→x₀} f(x) = y₀ Tendsto f (𝓝[Ioi x₀] x₀) (𝓝 y₀) = 右极限 全部统一为同一种类型!

极限的复合(一次证明,覆盖所有 512 种情况):

#check @Filter.map_mono      -- map 保序
#check @Filter.map_map       -- map 与复合相容
 
example {f : X → Y} {g : Y → Z} (hf : Tendsto f F G) (hg : Tendsto g G H) :
    Tendsto (g ∘ f) F H := by
  rw [Tendsto₂] at hf hg ⊢
  calc
    map (g ∘ f) F = map g (map f F) := by rw [map_map]
    _ ≤ map g G := by gcongr
    _ ≤ H := hg

11.1.5 滤子基与收敛的等价刻画

-- Ioo a b = {x | a < x ∧ x < b} = 开区间 (a, b)
-- ℝ 上邻域的基:开区间 (x₀-ε, x₀+ε)
example (x₀ : ℝ) : HasBasis (𝓝 x₀) (fun ε : ℝ ↦ 0 < ε) fun ε ↦ Ioo (x₀ - ε) (x₀ + ε) :=
  nhds_basis_Ioo_pos x₀
 
-- 用基重新表述收敛
example (u : ℕ → ℝ) (x₀ : ℝ) :
    Tendsto u atTop (𝓝 x₀) ↔ ∀ ε > 0, ∃ N, ∀ n ≥ N, u n ∈ Ioo (x₀ - ε) (x₀ + ε) := by
  have : atTop.HasBasis (fun _ : ℕ ↦ True) Ici := atTop_basis
  rw [this.tendsto_iff (nhds_basis_Ioo_pos x₀)]
  simp

11.1.6 Eventually 与 Frequently

-- ∀ᶠ n in atTop, P n = "对充分大的 n,P n 成立"
example (P Q : ℕ → Prop) (hP : ∀ᶠ n in atTop, P n) (hQ : ∀ᶠ n in atTop, Q n) :
    ∀ᶠ n in atTop, P n ∧ Q n :=
  hP.and hQ
 
-- 两个序列最终相等 ⇒ 收敛性相同
example (u v : ℕ → ℝ) (h : ∀ᶠ n in atTop, u n = v n) (x₀ : ℝ) :
    Tendsto u atTop (𝓝 x₀) ↔ Tendsto v atTop (𝓝 x₀) :=
  tendsto_congr' h
 
-- 记号:u =ᶠ[atTop] v
example (u v : ℕ → ℝ) (h : u =ᶠ[atTop] v) (x₀ : ℝ) :
    Tendsto u atTop (𝓝 x₀) ↔ Tendsto v atTop (𝓝 x₀) :=
  tendsto_congr' h

filter_upwards tactic

组合多个 Eventually 假设:

example (P Q R : ℕ → Prop)
    (hP : ∀ᶠ n in atTop, P n) (hQ : ∀ᶠ n in atTop, Q n)
    (hR : ∀ᶠ n in atTop, P n ∧ Q n → R n) : ∀ᶠ n in atTop, R n := by
  filter_upwards [hP, hQ, hR] with n h h' h''
  exact h'' ⟨h, h'⟩

11.1.7 ClusterPt 与闭包

-- ClusterPt x F = "x 的每个邻域与 F 的每个集合相交"
example {x : X} {F : Filter X} : ClusterPt x F ↔ NeBot (𝓝 x ⊓ F) := Iff.rfl
 
-- 收敛 + 序列在集合中 ⇒ 极限在闭包中
example (u : ℕ → ℝ) (M : Set ℝ) (x : ℝ)
    (hux : Tendsto u atTop (𝓝 x)) (huM : ∀ᶠ n in atTop, u n ∈ M) : x ∈ closure M :=
  mem_closure_of_tendsto hux huM

11.2 Metric Spaces

核心洞见

度量空间 = 集合 + 距离函数 dist。Mathlib 有变体:EMetricSpace(距离可为∞)、PseudoMetricSpace(允许 dist=0 但 a≠b)。

11.2.1 距离公理

variable {X : Type*} [MetricSpace X] (a b c : X)
 
#check (dist a b : ℝ)
#check (dist_nonneg : 0 ≤ dist a b)
#check (dist_eq_zero : dist a b = 0 ↔ a = b)
#check (dist_comm a b : dist a b = dist b a)
#check (dist_triangle a b c : dist a c ≤ dist a b + dist b c)

11.2.2 收敛与连续性

-- 序列收敛(等价于 ε-N 定义)
example {u : ℕ → X} {a : X} :
    Tendsto u atTop (𝓝 a) ↔ ∀ ε > 0, ∃ N, ∀ n ≥ N, dist (u n) a < ε :=
  Metric.tendsto_atTop
 
-- 连续性的 ε-δ 刻画
example {X Y : Type*} [MetricSpace X] [MetricSpace Y] {f : X → Y} :
    Continuous f ↔ ∀ x : X, ∀ ε > 0, ∃ δ > 0, ∀ x', dist x' x < δ → dist (f x') (f x) < ε :=
  Metric.continuous_iff
 
-- 在一点连续
example {f : X → Y} (a : X) :
    ContinuousAt f a ↔ ∀ ε > 0, ∃ δ > 0, ∀ {x}, dist x a < δ → dist (f x) (f a) < ε :=
  Metric.continuousAt_iff

11.2.3 连续性证明技巧

example {X Y : Type*} [MetricSpace X] [MetricSpace Y] {f : X → Y} (hf : Continuous f) :
    Continuous fun p : X × X ↦ dist (f p.1) (f p.2) := by
  continuity  -- tactic 自动证明

手动证明的多种方式:

-- 方式1:显式复合
example (hf : Continuous f) :
    Continuous fun p : X × X ↦ dist (f p.1) (f p.2) :=
  continuous_dist.comp ((hf.comp continuous_fst).prodMk (hf.comp continuous_snd))
 
-- 方式2:用 Continuous.dist(对 elaborator 更友好)
example (hf : Continuous f) :
    Continuous fun p : X × X ↦ dist (f p.1) (f p.2) := by
  apply Continuous.dist
  · exact hf.comp continuous_fst
  · exact hf.comp continuous_snd
 
-- 方式3:用 Continuous.fst' / snd'
example (hf : Continuous f) :
    Continuous fun p : X × X ↦ dist (f p.1) (f p.2) :=
  hf.fst'.dist hf.snd'

composition elaboration 问题

Lean 的 elaborator 不擅长识别 fun p ↦ dist (f p.1) (f p.2)dist ∘ (fun p ↦ (f p.1, f p.2)) 的复合。 用 Continuous.distcontinuity tactic 避免此问题。

11.2.4 球、开集与闭集

variable (r : ℝ)
 
-- 开球与闭球
example : Metric.ball a r = { b | dist b a < r } := rfl
example : Metric.closedBall a r = { b | dist b a ≤ r } := rfl
 
-- 开集的球刻画
example (s : Set X) : IsOpen s ↔ ∀ x ∈ s, ∃ ε > 0, Metric.ball x ε ⊆ s :=
  Metric.isOpen_iff
 
-- 闭集 = 补集开
example {s : Set X} : IsClosed s ↔ IsOpen (sᶜ) := isOpen_compl_iff.symm
 
-- 闭集对极限封闭
example {s : Set X} (hs : IsClosed s) {u : ℕ → X} (hu : Tendsto u atTop (𝓝 a))
    (hus : ∀ n, u n ∈ s) : a ∈ s :=
  hs.mem_of_tendsto hu (Eventually.of_forall hus)
 
-- 闭包
example {s : Set X} : a ∈ closure s ↔ ∀ ε > 0, ∃ b ∈ s, a ∈ Metric.ball b ε :=
  Metric.mem_closure_iff

邻域的基

example {x : X} {s : Set X} : s ∈ 𝓝 x ↔ ∃ ε > 0, Metric.ball x ε ⊆ s :=
  Metric.nhds_basis_ball.mem_iff

11.2.5 紧致性

-- [0,1] 紧致
example : IsCompact (Set.Icc 0 1 : Set ℝ) := isCompact_Icc
 
-- 紧致集上的序列有收敛子列
example {s : Set X} (hs : IsCompact s) {u : ℕ → X} (hu : ∀ n, u n ∈ s) :
    ∃ a ∈ s, ∃ φ : ℕ → ℕ, StrictMono φ ∧ Tendsto (u ∘ φ) atTop (𝓝 a) :=
  hs.tendsto_subseq hu
 
-- 极值定理
example {s : Set X} (hs : IsCompact s) (hs' : s.Nonempty) {f : X → ℝ}
    (hfs : ContinuousOn f s) :
    ∃ x ∈ s, ∀ y ∈ s, f x ≤ f y :=
  hs.exists_isMinOn hs' hfs
 
-- 紧致 ⇒ 闭
example {s : Set X} (hs : IsCompact s) : IsClosed s := hs.isClosed
 
-- 全局紧致
example {X : Type*} [MetricSpace X] [CompactSpace X] : IsCompact (univ : Set X) :=
  isCompact_univ

11.2.6 一致连续性与完备性

-- 一致连续
example {X Y : Type*} [MetricSpace X] [MetricSpace Y] {f : X → Y} :
    UniformContinuous f ↔
      ∀ ε > 0, ∃ δ > 0, ∀ {a b : X}, dist a b < δ → dist (f a) (f b) < ε :=
  Metric.uniformContinuous_iff
 
-- 紧致 ⇒ 一致连续
example {X : Type*} [MetricSpace X] [CompactSpace X]
    {Y : Type*} [MetricSpace Y] {f : X → Y} (hf : Continuous f) : UniformContinuous f := by
  sorry  -- 练习
 
-- Cauchy 序列
example (u : ℕ → X) :
    CauchySeq u ↔ ∀ ε > 0, ∃ N : ℕ, ∀ m ≥ N, ∀ n ≥ N, dist (u m) (u n) < ε :=
  Metric.cauchySeq_iff
 
-- 完备空间:Cauchy 序列收敛
example [CompleteSpace X] (u : ℕ → X) (hu : CauchySeq u) :
    ∃ x, Tendsto u atTop (𝓝 x) :=
  cauchySeq_tendsto_of_complete hu

11.2.7 Baire 定理

example [CompleteSpace X] (f : ℕ → Set X)
    (ho : ∀ n, IsOpen (f n)) (hd : ∀ n, Dense (f n)) :
    Dense (⋂ n, f n) := by
  sorry  -- 经典证明:构造 Cauchy 序列,用完备性得到极限点

11.3 Topological Spaces

核心洞见

拓扑空间只保留连续性的信息。它比度量空间更函子化:

  • 任意映射可推前/拉回拓扑
  • 任意积/余积/商都有拓扑
  • TopologicalSpace X 是完备格

11.3.1 开集公理

variable {X : Type*} [TopologicalSpace X]
 
example : IsOpen (univ : Set X) := isOpen_univ
example : IsOpen (∅ : Set X) := isOpen_empty
example {ι : Type*} {s : ι → Set X} (hs : ∀ i, IsOpen (s i)) : IsOpen (⋃ i, s i) :=
  isOpen_iUnion hs
example {ι : Type*} [Fintype ι] {s : ι → Set X} (hs : ∀ i, IsOpen (s i)) :
    IsOpen (⋂ i, s i) :=
  isOpen_iInter_of_finite hs

11.3.2 两种等价观点

观点1:开集

example {f : X → Y} : Continuous f ↔ ∀ s, IsOpen s → IsOpen (f ⁻¹' s) :=
  continuous_def

观点2:邻域滤子(Mathlib 更常用)

example {f : X → Y} {x : X} : ContinuousAt f x ↔ map f (𝓝 x) ≤ 𝓝 (f x) := Iff.rfl
 
example {f : X → Y} {x : X} : ContinuousAt f x ↔ ∀ U ∈ 𝓝 (f x), ∀ᶠ x in 𝓝 x, f x ∈ U :=
  Iff.rfl
 
-- 邻域 = 包含开集的集合
example {x : X} {s : Set X} : s ∈ 𝓝 x ↔ ∃ t, t ⊆ s ∧ IsOpen t ∧ x ∈ t :=
  mem_nhds_iff

为什么 Mathlib 偏好邻域观点?

因为连续性在一点处的定义更自然:f 把”接近 x”的点映射到”接近 f(x)“的点。

11.3.3 从邻域函数构造拓扑

邻域函数 n : X → Filter X 必须满足两个条件:

-- 1. 每个点在自己的邻域中
example (x : X) : pure x ≤ 𝓝 x := pure_le_nhds x
 
-- 2. "接近"具有传递性
example {P : X → Prop} {x : X} (h : ∀ᶠ y in 𝓝 x, P y) :
    ∀ᶠ y in 𝓝 x, ∀ᶠ z in 𝓝 y, P z :=
  eventually_eventually_nhds.mpr h

11.3.4 拓扑的函子性

推前(coinduced)与拉回(induced)

example (f : X → Y) : TopologicalSpace X → TopologicalSpace Y :=
  TopologicalSpace.coinduced f   -- f_* T_X
 
example (f : X → Y) : TopologicalSpace Y → TopologicalSpace X :=
  TopologicalSpace.induced f     -- f^* T_Y
 
-- Galois 连接
example (f : X → Y) (T_X : TopologicalSpace X) (T_Y : TopologicalSpace Y) :
    TopologicalSpace.coinduced f T_X ≤ T_Y ↔ T_X ≤ TopologicalSpace.induced f T_Y :=
  coinduced_le_iff_le_induced

推前的泛性质

g : Y → Zf_* T_X 连续 ⇔ g ∘ fT_X 连续。 这直接给出商拓扑的存在性。

完备格结构

-- T ≤ T' 当且仅当 T' 的开集都是 T 的开集
--(注意:拓扑越"细",开集越多,但在序中越小!)
example {T T' : TopologicalSpace X} : T ≤ T' ↔ ∀ s, T'.IsOpen s → T.IsOpen s := Iff.rfl
 
-- 连续性 = 推前 ≤ 目标拓扑
example (T_X : TopologicalSpace X) (T_Y : TopologicalSpace Y) (f : X → Y) :
    Continuous f ↔ TopologicalSpace.coinduced f T_X ≤ T_Y :=
  continuous_iff_coinduced_le

积拓扑的存在性(抽象推理):

example (ι : Type*) (X : ι → Type*) (T_X : ∀ i, TopologicalSpace (X i)) :
    (Pi.topologicalSpace : TopologicalSpace (∀ i, X i)) =
      ⨅ i, TopologicalSpace.induced (fun x ↦ x i) (T_X i) :=
  rfl

积拓扑 = 最粗的使所有投影连续

f : Z → Π i, X i 连续 ⇔ 每个分量 fun z ↦ f z i 连续。 度量空间不满足这个性质(不可数积没有度量)。

11.3.5 分离公理

-- T2 = Hausdorff:极限唯一
example [TopologicalSpace X] [T2Space X] {u : ℕ → X} {a b : X}
    (ha : Tendsto u atTop (𝓝 a)) (hb : Tendsto u atTop (𝓝 b)) : a = b :=
  tendsto_nhds_unique ha hb
 
-- T3 = Regular + T1:每个点有闭邻域基
example [TopologicalSpace X] [RegularSpace X] (a : X) :
    (𝓝 a).HasBasis (fun s : Set X ↦ s ∈ 𝓝 a ∧ IsClosed s) id :=
  closed_nhds_basis a
 
-- 每个点有开邻域基(总是成立)
example [TopologicalSpace X] {x : X} :
    (𝓝 x).HasBasis (fun t : Set X ↦ t ∈ 𝓝 x ∧ IsOpen t) id :=
  nhds_basis_opens' x

11.3.6 延拓定理

-- 延拓连续性定理(Bourbaki I.8.5
example [TopologicalSpace X] [TopologicalSpace Y] [T3Space Y] {A : Set X}
    (hA : ∀ x, x ∈ closure A) {f : A → Y} (f_cont : Continuous f)
    (hf : ∀ x : X, ∃ c : Y, Tendsto f (comap (↑) (𝓝 x)) (𝓝 c)) :
    ∃ φ : X → Y, Continuous φ ∧ ∀ a : A, φ a = f a := by
  sorry

11.3.7 可数性

-- 第一可数:每个点有可数的邻域基
-- 重要推论:闭包可用序列刻画
example [TopologicalSpace X] [FirstCountableTopology X] {s : Set X} {a : X} :
    a ∈ closure s ↔ ∃ u : ℕ → X, (∀ n, u n ∈ s) ∧ Tendsto u atTop (𝓝 a) :=
  mem_closure_iff_seq_limit

11.3.8 紧致性(拓扑版本)

variable [TopologicalSpace X]
 
-- 紧致 = 每个非平凡滤子有聚点
example {s : Set X} :
    IsCompact s ↔ ∀ (F : Filter X) [NeBot F], F ≤ 𝓟 s → ∃ a ∈ s, ClusterPt a F :=
  Iff.rfl
 
-- 紧致集的连续像紧致
example [TopologicalSpace Y] {f : X → Y} (hf : Continuous f) {s : Set X} (hs : IsCompact s) :
    IsCompact (f '' s) := by
  sorry  -- 用 filter 证明
 
-- 有限覆盖性质
example {ι : Type*} {s : Set X} (hs : IsCompact s) (U : ι → Set X)
    (hUo : ∀ i, IsOpen (U i)) (hsU : s ⊆ ⋃ i, U i) :
    ∃ t : Finset ι, s ⊆ ⋃ i ∈ t, U i :=
  hs.elim_finite_subcover U hUo hsU

本章核心概念总结

概念类型/记号含义
滤子Filter α”充分大”集合的族
主滤子𝓟 s包含 s 的超集
邻域滤子𝓝 xx 的邻域
余尾滤子atTop充分大的自然数
推前map f Ff_* F
拉回comap f Gf^* G
极限Tendsto f F Gmap f F ≤ G
积滤子F ×ˢ Gcomap fst F ⊓ comap snd G
Eventually∀ᶠ x in F, P x”对 F-充分大的 x,P x”
Frequently∃ᶠ x in F, P x”对任意 F-大的集合,存在 x 使 P x”
度量空间[MetricSpace X]dist + 公理
开球Metric.ball x ε`{y
闭球Metric.closedBall x ε`{y
紧致IsCompact s滤子版本或有限覆盖
Cauchy 序列CauchySeq u彼此最终接近
完备[CompleteSpace X]Cauchy ⇒ 收敛
拓扑空间[TopologicalSpace X]IsOpen + 公理
推前拓扑coinduced f商拓扑
拉回拓扑induced f子空间拓扑
T2[T2Space X]Hausdorff,极限唯一
T3[T3Space X]Regular + T1
第一可数[FirstCountableTopology X]可数邻域基

关键学习策略

1. 极限证明模板

example {u : ℕ → ℝ} {x : ℝ} : Tendsto u atTop (𝓝 x) := by
  -- 方式1:用 ε-N 定义
  rw [Metric.tendsto_atTop]
  intro ε ε_pos
  use ...
  sorry
 
  -- 方式2:用 filter 代数
  rw [Tendsto]
  calc
    map u atTop ≤ ... := ...
    _ ≤ 𝓝 x := ...

2. 连续性证明模板

example {f : X → Y} : Continuous f := by
  -- 方式1:tactic
  continuity
 
  -- 方式2:开集原像
  rw [continuous_def]
  intro s hs
  sorry
 
  -- 方式3:邻域
  intro x
  rw [ContinuousAt, Tendsto]
  sorry

3. 拓扑构造模板

-- 商拓扑 = 推前
example (f : X → Y) (T_X : TopologicalSpace X) : TopologicalSpace Y :=
  TopologicalSpace.coinduced f T_X
 
-- 子空间拓扑 = 拉回
example (f : X → Y) (T_Y : TopologicalSpace Y) : TopologicalSpace X :=
  TopologicalSpace.induced f T_Y
 
-- 积拓扑 = inf of pullbacks
example (ι : Type*) (X : ι → Type*) (T : ∀ i, TopologicalSpace (X i)) :
    TopologicalSpace (∀ i, X i) :=
  ⨅ i, TopologicalSpace.induced (fun x ↦ x i) (T i)

预告:第12章会学到什么

第12章进入微分学

  • 导数(HasDerivAt
  • 范数空间(NormedSpace
  • Fréchet 导数(HasFDerivAt

自测问题

  1. 滤子如何解决”64 种极限 × 复合 = 512 个引理”的问题?
  2. Tendsto f F G 的两种等价定义是什么?
  3. ∀ᶠ x in F, P x∃ᶠ x in F, P x 的直觉区别?
  4. 拓扑空间的 coinducedinduced 分别对应什么构造?
  5. 为什么 TopologicalSpace X 的序与 Set (Set X) 的序相反?
  6. 紧致性的滤子定义和开覆盖定义如何对应?

伴读文档 - 第11章完