12. 积分和测度论

12.1. 初等积分

我们首先关注函数在`ℝ`上有限区间的积分。我们可以积分初等函数。

open MeasureTheory intervalIntegral

open Interval
-- 这里引入了记号`[[a, b]]` 来表示区间`min a b`到`max a b`。

example (a b : ) : ( x in a..b, x) = (b ^ 2 - a ^ 2) / 2 :=
  integral_id

example {a b : } (h : (0 : )  [[a, b]]) : ( x in a..b, 1 / x) = Real.log (b / a) :=
  integral_one_div h

微积分基本定理联系了微分和积分。下面我们给出这个定理的两个部分的一种简单情形。 第一部分说明积分是微分的逆运算,第二部分说明了如何计算微元的累积。(这两个部分非常密切相关,但它们的最好版本(没有写在这里)并不等价。)

example (f :   ) (hf : Continuous f) (a b : ) : deriv (fun u   x :  in a..u, f x) b = f b :=
  (integral_hasStrictDerivAt_right (hf.intervalIntegrable _ _) (hf.stronglyMeasurableAtFilter _ _)
        hf.continuousAt).hasDerivAt.deriv

example {f :   } {a b : } {f' :   } (h :  x  [[a, b]], HasDerivAt f (f' x) x)
    (h' : IntervalIntegrable f' volume a b) : ( y in a..b, f' y) = f b - f a :=
  integral_eq_sub_of_hasDerivAt h h'

在Mathlib中也定义了卷积,并证明了卷积的基本性质。

open Convolution

example (f :   ) (g :   ) : f  g = fun x   t, f t * g (x - t) :=
  rfl

12.2. 测度论

Mathlib 中积分的数学基础是测度论。甚至前一节的初等积分实际上也是 Bochner 积分。Bochner 积分是 Lebesgue 积分的推广,目标空间可以是任意的Banach空间,不一定是有限维的。

测度论的第一部分是集合的 \(\sigma\) -代数的语言,被称作*可测集*。MeasurableSpace 类型族提供了带有这种结构的类型。空集 empty 和单元素集 univ 是可测的,可测集的补集是可测的,可数交和可数并是可测的。注意,这些公理是冗余的;如果你 #print MeasurableSpace,你会看到Mathlib用来构造可测集的公理。可数性条件可以使用 Encodable 类型族来表示。

variable {α : Type*} [MeasurableSpace α]

example : MeasurableSet ( : Set α) :=
  MeasurableSet.empty

example : MeasurableSet (univ : Set α) :=
  MeasurableSet.univ

example {s : Set α} (hs : MeasurableSet s) : MeasurableSet (s) :=
  hs.compl

example : Encodable  := by infer_instance

example (n : ) : Encodable (Fin n) := by infer_instance

variable {ι : Type*} [Encodable ι]

example {f : ι  Set α} (h :  b, MeasurableSet (f b)) : MeasurableSet ( b, f b) :=
  MeasurableSet.iUnion h

example {f : ι  Set α} (h :  b, MeasurableSet (f b)) : MeasurableSet ( b, f b) :=
  MeasurableSet.iInter h

如果一个类型是可测的,那么我们就可以测量它。字面上,对配备 \(\sigma\) -代数的集合(或者类型)的测量是一个函数,它是从可测集到扩展(即允许无穷)非负实数的函数,并且满足可数无交并集合上可加性。在 Mathlib 中,我们不希望每次测量集合时都带着写一个集合可测。因此我们把这个测度推广到任何集合 s ,作为包含`s`的可测集合的测度的最小值。当然,许多引理仍然需要可测假设,但不是全部。

open MeasureTheory
variable {μ : Measure α}

example (s : Set α) : μ s =  (t : Set α) (_ : s  t) (_ : MeasurableSet t), μ t :=
  measure_eq_iInf s

example (s : ι  Set α) : μ ( i, s i)  ∑' i, μ (s i) :=
  measure_iUnion_le s

example {f :   Set α} (hmeas :  i, MeasurableSet (f i)) (hdis : Pairwise (Disjoint on f)) :
    μ ( i, f i) = ∑' i, μ (f i) :=
  μ.m_iUnion hmeas hdis

一旦一个类型有了与它相关联的测度,我们就说,如果性质 P 只在一个测度为0的集合上失效,则 P “几乎处处”成立 (almost everywhere, ae)。几乎处处的性质集合形成了一个过滤器 (filter),但是 Mathlib 引入了特殊的符号来表示一个性质几乎处处成立。

example {P : α  Prop} : (∀ᵐ x μ, P x)  ∀ᶠ x in ae μ, P x :=
  Iff.rfl

12.3. 积分

现在我们有了测度和可测空间,我们就可以考虑积分了。正如前文所讲,Mathlib 使用非常一般的积分记号,支持任意的 Banach 空间。像往常一样,我们不希望我们的记号带有假设,所以我们这样约定:如果函数不可积,那么积分等于零。大多数与积分有关的引理都有可积性假设。

section
variable {E : Type*} [NormedAddCommGroup E] [NormedSpace  E] [CompleteSpace E] {f : α  E}

example {f g : α  E} (hf : Integrable f μ) (hg : Integrable g μ) :
     a, f a + g a μ =  a, f a μ +  a, g a μ :=
  integral_add hf hg

作为我们做出的各种约定之间复杂交互的一个例子,让我们看看如何积分常值函数。回顾一下测度 μ 是在扩展的非负实数 ℝ≥0∞ 上取值的,存在一个函数 ENNReal.toReal : ℝ≥0∞ → ℝ 把无穷点 映到0。对任意 s : Set α,如果 μ s = ⊤ ,则非零的常值函数在 s 上不可积,因此根据约定积分值为0,刚好是 (μ s).toReal 的结果。所以我们有下面的引理。

example {s : Set α} (c : E) :  x in s, c μ = (μ s).toReal  c :=
  setIntegral_const c

现在我们快速地解释如何获得积分理论中最重要的定理,从控制收敛定理开始 (dominated convergence theorem)。Mathlib 中有几个版本,这里我们只展示最基本的一个。

open Filter

example {F :   α  E} {f : α  E} (bound : α  ) (hmeas :  n, AEStronglyMeasurable (F n) μ)
    (hint : Integrable bound μ) (hbound :  n, ∀ᵐ a μ, F n a  bound a)
    (hlim : ∀ᵐ a μ, Tendsto (fun n :   F n a) atTop (𝓝 (f a))) :
    Tendsto (fun n   a, F n a μ) atTop (𝓝 ( a, f a μ)) :=
  tendsto_integral_of_dominated_convergence bound hmeas hint hbound hlim

还有一个积类型上的积分的 Fubini 定理:

example {α : Type*} [MeasurableSpace α] {μ : Measure α} [SigmaFinite μ] {β : Type*}
    [MeasurableSpace β] {ν : Measure β} [SigmaFinite ν] (f : α × β  E)
    (hf : Integrable f (μ.prod ν)) :  z, f z  μ.prod ν =  x,  y, f (x, y) ν μ :=
  integral_prod f hf

有一个非常一般的版本的卷积适用于任何连续双线性形式。

open Convolution

variable {𝕜 : Type*} {G : Type*} {E : Type*} {E' : Type*} {F : Type*} [NormedAddCommGroup E]
  [NormedAddCommGroup E'] [NormedAddCommGroup F] [NontriviallyNormedField 𝕜] [NormedSpace 𝕜 E]
  [NormedSpace 𝕜 E'] [NormedSpace 𝕜 F] [MeasurableSpace G] [NormedSpace  F] [CompleteSpace F]
  [Sub G]

example (f : G  E) (g : G  E') (L : E L[𝕜] E' L[𝕜] F) (μ : Measure G) :
    f [L, μ] g = fun x   t, L (f t) (g (x - t)) μ :=
  rfl

最后,Mathlib 有一个非常一般的换元公式。下面的命题中,BorelSpace E 意为由开集 E 生成的 E 上的 \(\sigma\)-代数,IsAddHaarMeasure μ 意为测度 μ 是左不变的(left-invariant),在紧集上有限,在开集上为正数。

example {E : Type*} [NormedAddCommGroup E] [NormedSpace  E] [FiniteDimensional  E]
    [MeasurableSpace E] [BorelSpace E] (μ : Measure E) [μ.IsAddHaarMeasure] {F : Type*}
    [NormedAddCommGroup F] [NormedSpace  F] [CompleteSpace F] {s : Set E} {f : E  E}
    {f' : E  E L[] E} (hs : MeasurableSet s)
    (hf :  x : E, x  s  HasFDerivWithinAt f (f' x) s x) (h_inj : InjOn f s) (g : E  F) :
     x in f '' s, g x μ =  x in s, |(f' x).det|  g (f x) μ :=
  integral_image_eq_integral_abs_det_fderiv_smul μ hs hf h_inj g