Rank

每个集合都有秩:它在累积层级中现身的最低阶段,以序数度量。这个定义是集合论中最古老的定义之一,读起来就是一条沿成员关系的递归:x 的秩是高于 x 全部成员之秩的最小序数,也就是它们的后继之并。

关于它有两个事实支撑本书这一部分。任何集合的秩都是序数,故秩确实是以序数进行的度量;而序数是自身的秩,故秩是典范的序数索引,不是另一套平行编号。第二个事实使得关于阶段的问题可以换成关于秩的问题再换回来,而无穷公理的收集那一步恰是这样一个问题。

关于递归的架设方式说一句,因为这与塔用的是同一个手法。此处不需要任何外部的序数类型:秩取值于层级自身,而递归跑在良基的成员关系上,那是正则性免费供应的。所以整章是构造性的,下一章引入的经典假设在这里一处也用不上。

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

open import Base.Prelude
open import Base.Truth

module L.Rank { : Level} where

open import FOL.ZFStructure using ( module hPropStructure )
open import V.Hierarchy {}
  using ( 𝒮ᵥ; extensionalV; ∈-induction; ∈-induction-compute )
open import V.Model {} using ( ∈sucV-elim; self∈sucV )
open import L.Constructible {} using ( IsOrd )
open import L.Ordinal {} using ( suc-ord; setUnion-ord; mem-ord )

open import Cubical.Functions.Logic using ( ⇔toPath )
import Cubical.HITs.PropositionalTruncation as PT
open PT using ( ∣_∣₁ )
open import Cubical.HITs.CumulativeHierarchy.Base using ( sett )
open import Cubical.HITs.CumulativeHierarchy.Properties
  using ( _∈ₛ_; ∈∈ₛ; ∈-asFiber; ⟪_⟫; ⟪_⟫↪; ∈ₛ⟪_⟫↪_ )
open import Cubical.HITs.CumulativeHierarchy.Constructions
  using ( ⋃_; union-ax; module InfinitySet )
open InfinitySet using ( sucV )

open TruthAlgebra (hPropAlgebra (ℓ-suc ))
open hPropStructure 𝒮ᵥ

递归

步进取 x 的成员上、其秩之后继的并。与塔一样,递归调用跑在成员的类型上,而计算规则是命题级而非定义性成立,这也正是后文任何证明对它的全部要求。

秩本身被封起来,理由与塔相同:它展开成一个可及性消去子,而任何提到「由嵌套造出的集合」之秩的目标,例如对子里的对里的对,都会把那个消去子拖进归一化。实测,在一个四层深的构造上:不封 163 秒,封了 1.4 秒rank-compute 是官方展开式且住在封内,故下游不失去任何东西。

rankStep : (x : S)  (∀ y  y ∈ᵗ x  S)  S
rankStep x rec =  (sett  x   m  sucV (rec ( x ⟫↪ m) (mem m))))
  where
  mem : (m :  x )   x ⟫↪ m ∈ᵗ x
  mem m = ∈∈ₛ {a =  x ⟫↪ m} {b = x} .snd (∈ₛ⟪ x ⟫↪ m)

opaque
  rank : S  S
  rank = ∈-induction rankStep

  rank-compute : (x : S)  rank x  rankStep x  y _  rank y)
  rank-compute = ∈-induction-compute rankStep

秩沿成员关系严格增长

使秩成为一把下降尺的那一条事实。它就是下文不动点论证的向外那一半,去掉了序数假设:同一个并的见证,全程不见 IsOrd。一场必须下降进「由嵌套造出的集合」而非下降进某个成员的递归,没有成员关系可供归纳,于是改用这一条。

rank-mono : (x y : S)   x ∈ˢ y    rank x ∈ˢ rank y 
rank-mono x y x∈y = subst  w   rank x ∈ˢ w ) (sym (rank-compute y))
  (∈∈ₛ {a = rank x} {b =  (sett  y  s)} .snd
    (union-ax (sett  y  s) (rank x) .snd
       sucV (rank ( y ⟫↪ m)) , (sm∈ₛsett , x∈ₛsm) ∣₁))
  where
  s :  y   S
  s k = sucV (rank ( y ⟫↪ k))
  fibx = ∈-asFiber {a = x} {b = y} x∈y
  m = fibx .fst
  q :  y ⟫↪ m  x
  q = fibx .snd
  sm∈ₛsett :  sucV (rank ( y ⟫↪ m)) ∈ₛ sett  y  s 
  sm∈ₛsett = ∈∈ₛ {a = sucV (rank ( y ⟫↪ m))} {b = sett  y  s} .fst  m , refl ∣₁
  x∈ₛsm :  rank x ∈ₛ sucV (rank ( y ⟫↪ m)) 
  x∈ₛsm = ∈∈ₛ {a = rank x} {b = sucV (rank ( y ⟫↪ m))} .fst
    (subst  w   rank x ∈ˢ sucV (rank w) ) (sym q) (self∈sucV (rank x)))

秩是序数

一次成员归纳。展开一次;归纳假设使每个成员的秩是序数,序数的后继是序数,而上一章的小并封闭性把这一族收回成序数。

rank-ord : (A : S)  IsOrd (rank A)
rank-ord = ∈-induction {P = λ A  IsOrd (rank A)} step
  where
  step : (A : S)  (∀ y  y ∈ᵗ A  IsOrd (rank y))  IsOrd (rank A)
  step A IH = subst IsOrd (sym (rank-compute A))
    (setUnion-ord  A   m  sucV (rank ( A ⟫↪ m)))
       m  suc-ord (IH ( A ⟫↪ m) (mem m))))
    where
    mem : (m :  A )   A ⟫↪ m ∈ᵗ A
    mem m = ∈∈ₛ {a =  A ⟫↪ m} {b = A} .snd (∈ₛ⟪ A ⟫↪ m)

序数是自身的秩

仍是成员归纳,而这次的证明是 rank AA 之间的一次外延。从左到右:rank A 的元素落在某个成员之秩的后继里面,而依归纳假设那个秩就是该成员,故该元素或就是该成员、或属于它,两种情形都经传递性属于 A。从右到左:A 的成员是自身的秩,故属于该秩的后继,而那是并的一支。

论证的形状值得说一句:外延性直接施于 rank AA,二者都是中性项,而那个嵌套的并只经计算规则以路径的形式被触及。若改把展开后的并喂给外延性,就会迫使检查器归一化一个深层嵌套的集合表达式,那正是这类证明变得不可检查的标准途径。

rank-fix : (A : S)  IsOrd A  rank A  A
rank-fix = ∈-induction {P = λ A  IsOrd A  rank A  A} step
  where
  step : (A : S)  (∀ y  y ∈ᵗ A  IsOrd y  rank y  y)
        IsOrd A  rank A  A
  step A IH ordA = extensionalV  x  ⇔toPath (toA x) (fromA x))
    where
    s :  A   S
    s m = sucV (rank ( A ⟫↪ m))
    mem : (m :  A )    A ⟫↪ m ∈ˢ A 
    mem m = ∈∈ₛ {a =  A ⟫↪ m} {b = A} .snd (∈ₛ⟪ A ⟫↪ m)
    rk : (m :  A )  rank ( A ⟫↪ m)   A ⟫↪ m
    rk m = IH ( A ⟫↪ m) (mem m) (mem-ord {A = A} ordA ( A ⟫↪ m) (mem m))

    toA : (x : S)   x ∈ˢ rank A    x ∈ˢ A 
    toA x x∈r = PT.rec (snd (x ∈ˢ A))
       { (v , (v∈ₛsett , x∈ₛv))  PT.rec (snd (x ∈ˢ A))
           { (m , sm≡v) 
              ∈sucV-elim (snd (x ∈ˢ A))
                (∈∈ₛ {a = x} {b = sucV (rank ( A ⟫↪ m))} .snd
                  (subst  w   x ∈ₛ w ) (sym sm≡v) x∈ₛv))
                 x∈rm  ordA .fst (subst  w   x ∈ˢ w ) (rk m) x∈rm) (mem m))
                 x≡rm  subst  w   w ∈ˢ A ) (sym (x≡rm  rk m)) (mem m)) })
          (∈∈ₛ {a = v} {b = sett  A  s} .snd v∈ₛsett) })
      (union-ax (sett  A  s) x .fst
        (∈∈ₛ {a = x} {b =  (sett  A  s)} .fst
          (subst  w   x ∈ˢ w ) (rank-compute A) x∈r)))

    fromA : (x : S)   x ∈ˢ A    x ∈ˢ rank A 
    fromA x x∈A = subst  w   x ∈ˢ w ) (sym (rank-compute A))
      (∈∈ₛ {a = x} {b =  (sett  A  s)} .snd
        (union-ax (sett  A  s) x .snd
           sucV (rank ( A ⟫↪ m)) , (sm∈ₛsett , x∈ₛsm) ∣₁))
      where
      fibx = ∈-asFiber {a = x} {b = A} x∈A
      m = fibx .fst
      q :  A ⟫↪ m  x
      q = fibx .snd
      sm∈ₛsett :  sucV (rank ( A ⟫↪ m)) ∈ₛ sett  A  s 
      sm∈ₛsett = ∈∈ₛ {a = sucV (rank ( A ⟫↪ m))} {b = sett  A  s} .fst
         m , refl ∣₁
      x∈ₛsm :  x ∈ₛ sucV (rank ( A ⟫↪ m)) 
      x∈ₛsm = ∈∈ₛ {a = x} {b = sucV (rank ( A ⟫↪ m))} .fst
        (subst  w   w ∈ˢ sucV (rank ( A ⟫↪ m)) ) (rk m  q)
          (self∈sucV (rank ( A ⟫↪ m))))

小结

rank 以序数度量每个集合 (rank-ord),并固定序数自身 (rank-fix),二者合起来认证它为典范索引。两个证明都是正则性上的成员归纳,故本章在假设上分文不花。它买到的是「这个集合到多高才现身」这一问的序数答案,而接下来两章会把它花在关于塔的最后一个问题上:哪些序数出现在哪个阶段。