传递良基关系的塌缩

可以直接阅读本章,也可以通过阅读指南和依赖地图选择其他路线。

阅读指南 · 依赖地图

一个关系自身能携带多少集合论结构?取带良基传递关系 _≺_ 的小类型 A,该关系取值于 Type ℓ。Mostowski 的回答是:仅凭这个关系,就能用递归确定一个函数 col : A → SV.S,满足

col p = { col r | r ≺ p }

即每个点被送到其前驱的塌缩值所成的集合。一条计算律刻画每个值中的隶属关系,而关系的传递性使每个塌缩值成为这里所说的序数,即自身传递且每个成员也传递。

一个有限的例子可以展示机制。取三点 srp,有 s ≺ rr ≺ p,以及传递性所要求的 s ≺ p,且无其他关系。递归没有强制 col s 的任何成员,col r = { col s }col p = { col s, col r },这正是 von Neumann 的 012 图景。递归从不检视点本身,只检视它们的前驱锥。

设定的三个特征决定其后的一切。其一,A 与每个纤维 x ≺ y 都在 Type ℓ 中,故对每个 p,前驱锥是小类型 Σ[ r ∈ A ] (r ≺ p);层级 Vsett 构造子恰好把这样的小族变成 SV.S 中的集合。其二,sett 集合中的隶属按构造就是命题截断⟨ b ∈ˢ a ⟩ 说的是纯粹存在该族的某个索引,使族在该处的值等于 b,而非选定的索引可得。因此本章在一个方向上从给出的数据证明隶属 (r ≺ p 给出 col r ∈ˢ col p),在另一方向上只得到纯粹存在的前驱加一条塌缩值等式。其三,之后消去的目标都是命题,如集合间的等式或 isTransV x,故向它们消去截断是合法的。这里没有对 _≺_ 的外延性假设,前驱锥相同的两点不被区分:塌缩是典范的,但并不声称单射。整个构造只用良基递归与传输;这里没有假设任何经典原理。

塌缩落在累积层级的集合层载体中,因此其输出由真正的集合构成,而非 A 的点。该载体在下文记作 SV.S;它是 h-集合,也就是任意两元素之间的相等类型都是命题。其成员关系 _∈ˢ_ 把每条隶属陈述打包成一个 hProp底层类型 ⟨ b ∈ˢ a ⟩ 连同该类型为命题的证明。因此,隶属与传递性都可以直接用层级自身的关系陈述。

{-# OPTIONS --cubical --safe --guardedness #-}

open import Base.Prelude

module L.Mostowski { : Level} where

open import FOL.ZFStructure using ( module hPropStructure )

构造由两个要素驱动。其一是层级的像运算 sett:从小索引类型 X 和族 X → V ℓ 造出该族取值的集合,隶属仅在某个索引命中目标时纯粹地成立。其二是良基性证书 WellFounded _≺_,即 A 的每个元素沿 可及;其归纳原理构造递归定义的函数,配套的计算律记录该函数在每点的行为。命题截断经由 ∥ _ ∥₁ 与其引入 ∣ _ ∣₁ 进入,因为像中的隶属按设计就是截断的。序数目标 IsOrd、传递性 isTransV 及其命题性证明 isPropIsTransV 来自 L 的构造,只在最后定理需要它们时出现。

open import V.Hierarchy {} using ( 𝒮ᵥ )
open import L.Constructible {} using ( IsOrd; isTransV; isPropIsTransV )

open import Cubical.HITs.CumulativeHierarchy.Base using ( sett )
open import Cubical.Induction.WellFounded using ( WellFounded; module WFI )
import Cubical.HITs.PropositionalTruncation as PT

层级结构的等词与隶属关系取值于层级 ℓ-suc ℓhProp。另一方面,A 与每个纤维 x ≺ y 都在 Type ℓ 中,所以每个前驱锥都是可供 sett 使用的小索引类型。构造只需要这些大小事实,不需要排中律。

open PT using ( ∣_∣₁; ∥_∥₁ )

module SV = hPropStructure 𝒮ᵥ
open SV using ( _∈ˢ_ )

下面完成两个任务。首先证明塌缩的两条隶属律:给定一个前驱即可构造相应成员,而从一个成员反推时,只能得到纯粹存在的前驱及其塌缩值等式。随后在良基归纳中使用这两条定律,证明每个 p 都满足 IsOrd (col p)。显式输入与截断输出之间的不对称在两步中都不可省略。

良基性为递归提供依据。由 wf 得到的归纳原理说:要在 A 上定义一族 P,只需对每个 p,从所有前驱 r ≺ pP 的值构造 P p。传递性见证 ≺-trans 不参与 col 的定义;它在随后证明所得集合传递时才使用。

module Mostowski (A : Type ) (_≺_ : A  A  Type )
                 (wf : WellFounded _≺_)
                 (≺-trans : {x y z : A}  x  y  y  z  x  z) where

  module W = WFI wf using ( induction; induction-compute )

  colStep : (p : A)  (∀ r  r  p  SV.S)  SV.S

递归步就是前驱锥的像。给定 p 和已经知道每个 r ≺ pcol r 的递归调用 rec,该步造出 sett (Σ[ r ∈ A ] (r ≺ p)) (λ z → rec (fst z) (snd z)):索引类型是偶对 (r , r ≺ p) 的全空间,族把这样的偶对送到 rec r。抽象地说,这正是本章宣告的塌缩方程 { col r | r ≺ p }。注意步型对任意的步函数 rec 做了量化,这使同一份数据既用于定义,也经由下面的计算律用于推理。

  colStep p rec = sett (Σ[ r  A ] (r  p))  z  rec (fst z) (snd z))

  opaque
    col : A  SV.S
    col = W.induction {P = λ _  SV.S} colStep

    col-eq : (p : A)  col p  sett (Σ[ r  A ] (r  p))  z  col (fst z))

函数 col 由良基归纳定义。其计算律 col-eqcol p 等同于前驱锥在 col 下的像。随后的隶属证明用这条等式在递归定义的值与显式像之间转换,而在显式像中,隶属具有 sett 给出的截断原像分类。

    col-eq = W.induction-compute colStep

  col-in : (p r : A)  r  p   col r ∈ˢ col p 
  col-in p r rp =
    subst  v   col r ∈ˢ v ) (sym (col-eq p))  (r , rp) , refl ∣₁

  col-out : (p : A) (b : SV.S)   b ∈ˢ col p 

隶属在两个方向上各有一条计算律,且两者有意味深长的不对称。正向:若给定 r ≺ p,则 col rcol p 的成员。其见证是偶对 (r , rp) 连同记录 col r 在索引 r 处被命中的路径 refl;沿 col-eq p 传输 (取 sym 形式,因为方程是按另一方向证明的) 把这个显式像的成员移入类型 ⟨ col r ∈ˢ col p ⟩。反向:任意的隶属 ⟨ b ∈ˢ col p ⟩ 只给出截断的陈述:纯粹地存在某个 r ≺ p 使 col r ≡ b。证明沿 col-eq p 把隶属传输回显式像中的隶属;该隶属按构造就是截断的原像,再把索引数据改写为带等式的前驱。这里没有任何一步选定具体的 r;截断 ∥ _ ∥₁ 忠实记录了隶属所能揭示的信息。

            Σ[ r  A ] ((r  p) × (col r  b)) ∥₁
  col-out p b b∈ =
    PT.map  z  fst (fst z) , snd (fst z) , snd z)
      (subst  v   b ∈ˢ v ) (col-eq p) b∈)

  col-ord : (p : A)  IsOrd (col p)

最后的定理说每个塌缩值都是序数,其中 IsOrd (col p) 展开为一对:col p 传递,且其每个成员都传递。证明对 p 做良基归纳,故归纳假设 rec 对每个前驱 r ≺ p 提供 IsOrd (col r),目标由其两个分量组装。这是假设 ≺-trans 发挥作用的地方;在阅读两个子句之前,先想象三点链 s ≺ r ≺ p:关系的传递性正是让关于 col r 的隶属事实能在 col p 内重演的关键。

  col-ord = W.induction {P = λ p  IsOrd (col p)} ih
    where
    ih : (p : A)  (∀ r  r  p  IsOrd (col r))  IsOrd (col p)
    ih p rec = tr , mem
      where

第一个子句说 col p 的每个成员都传递。证明从 col-out p x x∈ 出发:成员 x 是某个纯粹存在的前驱 r ≺ pcol r,并带等式 e : col r ≡ x。归纳假设提供 isTransV (col r)subst isTransV e 沿该等式把这一证明传送到类型 isTransV x。截断消去合法,因为目标 isTransV x 是命题,由 isPropIsTransV x 证明;这里没有抽取见证,只是从纯粹存在的情形分析中确立一个命题。

      mem : (x : SV.S)   x ∈ˢ col p   isTransV x
      mem x x∈ = PT.rec (isPropIsTransV x)
         z  subst isTransV (snd (snd z)) (rec (fst z) (fst (snd z)) .fst))
        (col-out p x x∈)
      tr : isTransV (col p)

第二个子句证明 col p 自身传递:给定 y ∈ xx ∈ col p,要证 y ∈ col p。先把 x ∈ col pcol-out 剥开,纯粹地得到某个 r ≺ p 使 col r ≡ x。该等式把已给的 y ∈ x 传输入 ⟨ y ∈ˢ col r ⟩,运行示例中的中间环节 r 正是在这里把链条两端接了起来。

      tr {x} {y} y∈x x∈col = PT.rec (snd (y ∈ˢ col p)) outer (col-out p x x∈col)
        where
        outer : Σ[ r  A ] ((r  p) × (col r  x))   y ∈ˢ col p 
        outer (r , rp , e) =
          PT.rec (snd (y ∈ˢ col p)) inner

现在链条闭合。从 y ∈ col r 出发,在 r 处应用 col-out 纯粹地给出某个 s ≺ r 使 col s ≡ y;记其等式为 e2。关系传递性把 s ≺ rr ≺ p 复合成 s ≺ pcol-in p scol s 提升为 col p 的成员。最后沿 e2subst 在隶属目标中把 col s 换成 y,得到 ⟨ y ∈ˢ col p ⟩。两次截断消去都落在命题 ⟨ y ∈ˢ col p ⟩ 中,整个论证只用良基递归、传输和传递性假设:本章任何地方都没有经典原理进入。

            (col-out r y (subst  v   y ∈ˢ v ) (sym e) y∈x))
          where
          inner : Σ[ s  A ] ((s  r) × (col s  y))   y ∈ˢ col p 
          inner (s , sr , e2) =
            subst  v   v ∈ˢ col p ) e2 (col-in p s (≺-trans sr rp))