Which ordinals appear at which stage

关于塔还有一个问题悬而未决,而无穷公理正系于此:给定一个阶段,到那时为止究竟出现了哪些序数?答案再干净不过。Lset α 中的序数恰是 α 的成员,故塔的索引与它的序数内容逐层一致,而序数首次现身于自身之后的那个阶段。

两半都是真功夫。一个方向说序数不会提前现身:若它在 Lset α 中,则它是 α 的成员。这是较难的一半,要经过秩,而这正是上一章造出秩的原因。Lset α 中的集合是某个更早阶段的可定义子集,依归纳其成员的秩低于那个阶段,故它自身的秩有界;而作为序数,它就是自身的秩。

另一个方向说序数不会迟到:α 的每个成员都已在 Lset α 中。那一半是直截的归纳,前提是序数现身于自身之后的阶段,而那正是正在证的定理。这个循环只是表象:归纳假设为诸成员供应该陈述,而所需的恰只是诸成员。

两半齐备,一个阶段中的序数便由单一公式「是序数」从中刻出,该公式是 Δ₀ 的,因为传递性只用有界量词就说得出来。于是 αLset α 的可定义子集,上一章的收尾引擎随即收工。

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

open import Base.Prelude
open import Base.Truth
open import Base.Classical using ( LEM )

module L.Ordinal.Stages { : Level} (lem : LEM (ℓ-suc )) where

open import FOL.ZFStructure using ( module hPropStructure )
open import FOL.Syntax using ( Formula; var; _∈̇_; _∧̇_; ∀̇∈ )
open import FOL.LevyHierarchy using ( Δ₀; δ-∈; δ-∧; δ-∀∈ )
open import FOL.Manipulation.Relabelling using ( mapFo )
open import V.Hierarchy {} using ( 𝒮ᵥ; ∈-induction; ∈-irrefl )
open import V.Model {} using ( ∈sucV-elim; ∈sucV-inl; self∈sucV )
open import L.Definability {} using ( module DefOf )
open import L.Constructible {}
  using ( IsOrd; isTransV; Lset; Lset-layer; Lset-compute; layer-trans
        ; 𝒟ₒ; 𝒟ₒ-intro; 𝒟ₒ-inv; Lset-mono )
open import L.Ordinal {} using ( mem-ord; suc-ord )
open import L.Ordinal.Linear {} lem using ( ord-tri )
open import L.Rank {} using ( rank; rank-compute; rank-ord; rank-fix )

open import Cubical.Data.Sum as Sum using ( _⊎_; inl; inr )
import Cubical.Data.Empty as Empty
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; ⟪_⟫; ⟪_⟫↪; ∈ₛ⟪_⟫↪_; extensionality; _⊆_ )
open import Cubical.HITs.CumulativeHierarchy.Constructions
  using ( ⋃_; union-ax; module InfinitySet )
open InfinitySet using ( sucV )

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

两次比较

三歧的两个推论,都是关于后继的。其一,序数之间的包含把较小者放进较大者的后继里:比较二者,而第三种情形 (较大者属于较小者) 经「没有集合属于自身」与包含关系矛盾。

每个分支都抽成写明结论的具名辅助件。这不是装饰:结论是重型的隶属类型,若内联在分情形里,每个分支都会把它归一化。命名使它保持中性。本章此后每次分情形都遵守同一纪律。

private
  ∈-case : (a b : S)   a ∈ˢ b    a ∈ˢ sucV b 
  ∈-case a b a∈b = ∈sucV-inl a∈b

  ≡-case : (a b : S)  a  b   a ∈ˢ sucV b 
  ≡-case a b a≡b = subst  w   w ∈ˢ sucV b ) (sym a≡b) (self∈sucV b)

  wit-case : (a b : S)  ((y : S)   y ∈ˢ a    y ∈ˢ b )
             b ∈ˢ a    a ∈ˢ sucV b 
  wit-case a b a⊆b b∈a = Empty.rec (∈-irrefl b (a⊆b b b∈a))

⊆→∈suc : (a b : S)  IsOrd a  IsOrd b
        ((y : S)   y ∈ˢ a    y ∈ˢ b )   a ∈ˢ sucV b 
⊆→∈suc a b orda ordb a⊆b = Sum.rec
  (∈-case a b)
  (Sum.rec (≡-case a b) (wit-case a b a⊆b))
  (ord-tri a orda b ordb)

其二,成员的后继不会越过头:若 β 属于 α,则 sucV β 属于 α,或就是 α。比较 sucV βα;余下的情形把 α 放进 sucV β,于是 α 或是 β 的成员、或与之相等,两种情形都推出 α 属于自身。

private
  Out : S  S  Type (ℓ-suc )
  Out β α =  sucV β ∈ˢ α   (sucV β  α)

  overshoot : (β α : S)  IsOrd α   β ∈ˢ α    α ∈ˢ sucV β   Out β α
  overshoot β α ordα β∈α α∈sβ = Empty.rec*
    (∈sucV-elim {A = β} {x = α} {P = Empty.⊥* {ℓ-suc }} Empty.isProp⊥* α∈sβ
       α∈β  lift (∈-irrefl α (ordα .fst α∈β β∈α)))
       α≡β  lift (∈-irrefl α (subst  w   w ∈ˢ α ) (sym α≡β) β∈α))))

suc∈or≡ : (β α : S)  IsOrd β  IsOrd α   β ∈ˢ α 
          sucV β ∈ˢ α   (sucV β  α)
suc∈or≡ β α ordβ ordα β∈α = go (ord-tri (sucV β) (suc-ord ordβ) α ordα)
  where
  go : ( sucV β ∈ˢ α   ((sucV β  α)   α ∈ˢ sucV β ))  Out β α
  go (inl s∈α)        = inl s∈α
  go (inr (inl s≡α))  = inr s≡α
  go (inr (inr α∈sβ)) = overshoot β α ordα β∈α α∈sβ

以及它为之而生的累积引理:在自身后继阶段现身过的序数,在此后每个阶段都已现身,其中「此后」指索引在其之上。

private
  cumul-∈ : (β α : S)   sucV β ∈ˢ α    β ∈ˢ Lset (sucV β) 
            β ∈ˢ Lset α 
  cumul-∈ β α s∈α = Lset-mono {α = α} {β = sucV β} s∈α {x = β}

  cumul-≡ : (β α : S)  sucV β  α   β ∈ˢ Lset (sucV β)    β ∈ˢ Lset α 
  cumul-≡ β α s≡α = subst  w   β ∈ˢ Lset w ) s≡α

Lset-cumul : (β α : S)  IsOrd β  IsOrd α   β ∈ˢ α 
             β ∈ˢ Lset (sucV β)    β ∈ˢ Lset α 
Lset-cumul β α ordβ ordα β∈α β∈Lsβ =
  Sum.rec  s∈α  cumul-∈ β α s∈α β∈Lsβ)
           s≡α  cumul-≡ β α s≡α β∈Lsβ)
          (suc∈or≡ β α ordβ ordα β∈α)

没有东西早于自身的秩现身

较难的那一半。沿阶段索引归纳:Lset α 中的集合落在某个 β ∈ αLset β 的可定义子集里,故它是 Lset β 的子集;于是依归纳假设它的每个成员的秩都在 β 中;故它自身的秩,即那些秩的后继之并,包含于 β;比较把它放进 β 的后继里面,而那在 α 里面。

rank-Lset : (α : S)  IsOrd α  (x : S)   x ∈ˢ Lset α    rank x ∈ˢ α 
rank-Lset = ∈-induction
  {P = λ α  IsOrd α  (x : S)   x ∈ˢ Lset α    rank x ∈ˢ α } step
  where
  step : (α : S)
        (∀ β  β ∈ᵗ α  IsOrd β  (x : S)   x ∈ˢ Lset β    rank x ∈ˢ β )
        IsOrd α  (x : S)   x ∈ˢ Lset α    rank x ∈ˢ α 
  step α IH ordα x x∈Lα = PT.rec (snd (rank x ∈ˢ α)) fromUnion x∈⋃
    where
    s :  α   S
    s m = 𝒟ₒ (Lset ( α ⟫↪ m))

    x∈⋃ = union-ax (sett  α  s) x .fst
      (∈∈ₛ {a = x} {b =  (sett  α  s)} .fst
        (subst  w   x ∈ˢ w ) (Lset-compute α) x∈Lα))

    fromUnion : Σ[ v  S ] ( v ∈ₛ sett  α  s  ×  x ∈ₛ v )   rank x ∈ˢ α 
    fromUnion (v , (v∈ₛsett , x∈ₛv)) = PT.rec (snd (rank x ∈ˢ α)) fromFiber
      (∈∈ₛ {a = v} {b = sett  α  s} .snd v∈ₛsett)
      where
      fromFiber : Σ[ m   α  ] (s m  v)   rank x ∈ˢ α 
      fromFiber (m , sm≡v) = rankx∈α
        where
        β =  α ⟫↪ m
        β∈α :  β ∈ˢ α 
        β∈α = ∈∈ₛ {a = β} {b = α} .snd (∈ₛ⟪ α ⟫↪ m)
        ordβ : IsOrd β
        ordβ = mem-ord {A = α} ordα β β∈α
        x∈𝒟ₒLβ :  x ∈ˢ 𝒟ₒ (Lset β) 
        x∈𝒟ₒLβ = ∈∈ₛ {a = x} {b = 𝒟ₒ (Lset β)} .snd
          (subst  w   x ∈ₛ w ) (sym sm≡v) x∈ₛv)
        x⊆Lβ : (y : S)   y ∈ˢ x    y ∈ˢ Lset β 
        x⊆Lβ = DefOf.Def∋⊆A (Lset β) x (𝒟ₒ-inv (Lset β) x x∈𝒟ₒLβ)
        ry∈β : (y : S)   y ∈ˢ x    rank y ∈ˢ β 
        ry∈β y y∈x = IH β β∈α ordβ y (x⊆Lβ y y∈x)

        rankx⊆β : (z : S)   z ∈ˢ rank x    z ∈ˢ β 
        rankx⊆β z z∈rx = PT.rec (snd (z ∈ˢ β)) viaUnion
          (union-ax (sett  x  g) z .fst
            (∈∈ₛ {a = z} {b =  (sett  x  g)} .fst
              (subst  w   z ∈ˢ w ) (rank-compute x) z∈rx)))
          where
          g :  x   S
          g i = sucV (rank ( x ⟫↪ i))
          viaUnion : Σ[ w  S ] ( w ∈ₛ sett  x  g  ×  z ∈ₛ w )   z ∈ˢ β 
          viaUnion (w , (w∈ₛsett , z∈ₛw)) = PT.rec (snd (z ∈ˢ β)) viaFib
            (∈∈ₛ {a = w} {b = sett  x  g} .snd w∈ₛsett)
            where
            viaFib : Σ[ i   x  ] (g i  w)   z ∈ˢ β 
            viaFib (i , gi≡w) =
              ∈sucV-elim {A = rank yᵢ} {x = z} (snd (z ∈ˢ β))
                (∈∈ₛ {a = z} {b = sucV (rank yᵢ)} .snd
                  (subst  W   z ∈ₛ W ) (sym gi≡w) z∈ₛw))
                 z∈ryᵢ  ordβ .fst z∈ryᵢ (ry∈β yᵢ yᵢ∈x))
                 z≡ryᵢ  subst  w   w ∈ˢ β ) (sym z≡ryᵢ) (ry∈β yᵢ yᵢ∈x))
              where
              yᵢ =  x ⟫↪ i
              yᵢ∈x :  yᵢ ∈ˢ x 
              yᵢ∈x = ∈∈ₛ {a = yᵢ} {b = x} .snd (∈ₛ⟪ x ⟫↪ i)

        rankx∈α :  rank x ∈ˢ α 
        rankx∈α = ∈sucV-elim {A = β} {x = rank x} (snd (rank x ∈ˢ α))
          (⊆→∈suc (rank x) β (rank-ord x) ordβ rankx⊆β)
           rx∈β  ordα .fst rx∈β β∈α)
           rx≡β  subst  w   w ∈ˢ α ) (sym rx≡β) β∈α)

对序数,结论简化,因为秩固定它:Lset α 中的序数是 α 的成员。

ord∈Lset→∈ : (α : S)  IsOrd α  (x : S)  IsOrd x   x ∈ˢ Lset α 
             x ∈ˢ α 
ord∈Lset→∈ α ordα x ordx x∈Lα =
  subst  w   w ∈ˢ α ) (rank-fix x ordx) (rank-Lset α ordα x x∈Lα)

用有界量词说「是序数」

这个谓词是两条子句,而两条都已有界:集合传递,指其成员之成员皆是其成员;成员皆传递,指同一条在低一层成立。没有无界量词出现,故公式是 Δ₀;也没有常元出现,这省掉了整套重标机器。

索引采用 de Bruijn:每个有界量词约束一个新的变元 0,把先前的向外推,故两层约束之后,候选序数位于索引 2。

φ-ord :  {ℓk} {K : Type ℓk}  Formula K 1
φ-ord =
  (∀̇∈ (var zero) (∀̇∈ (var zero) (var zero ∈̇ var (suc (suc zero)))))
  ∧̇
  (∀̇∈ (var zero)
    (∀̇∈ (var zero) (∀̇∈ (var zero) (var zero ∈̇ var (suc (suc zero))))))

φ-ord-Δ₀ :  {ℓk} {K : Type ℓk}  Δ₀ (φ-ord {K = K})
φ-ord-Δ₀ = δ-∧ (δ-∀∈ (δ-∀∈ δ-∈)) (δ-∀∈ (δ-∀∈ (δ-∀∈ δ-∈)))

一个阶段中的序数

固定一个阶段。经上一章那道桥读出来,公式在环境层级中的满足恰好展开成序数谓词的两条子句,故二者只需重排参数即可互换。然后它刻出的可定义子集就是 α 自身:其成员是该阶段的序数,故经秩那一半是 α 的成员;而 α 的成员是已经现身过的序数,经累积引理,故满足该公式。

累积引理需要 α 的每个成员都在自身的后继阶段现身。那正是本定理自身,故它在此作为假设进入,而下面的归纳正是供应它的东西。

module OrdAt (α : S) (ordα : IsOrd α) where
  private
    A = Lset α
    Atrans = layer-trans (Lset-layer α)
    module DefA = DefOf A
    module RefA = DefA.Refine Atrans
    open RefA.Abs using ( _⊨ᵛ_ )

    φ : Formula  A  1
    φ = φ-ord {K =  A }

  ⊨ᵛ→ord : (m :  A )   ( A ⟫↪ m  []) ⊨ᵛ (mapFo DefA.ι φ) 
          IsOrd ( A ⟫↪ m)
  ⊨ᵛ→ord m sat = transB , memTransB
    where
    B =  A ⟫↪ m
    transB : isTransV B
    transB {x} {y} y∈x x∈B = sat .fst x x∈B y y∈x
    memTransB : (x : S)   x ∈ˢ B   isTransV x
    memTransB x x∈B {y} {z} z∈y y∈x = sat .snd x x∈B y y∈x z z∈y

  ord→⊨ᵛ : (m :  A )  IsOrd ( A ⟫↪ m)
           ( A ⟫↪ m  []) ⊨ᵛ (mapFo DefA.ι φ) 
  ord→⊨ᵛ m ord = c1 , c2
    where
    B =  A ⟫↪ m
    c1 : (x : S)   x ∈ˢ B   (y : S)   y ∈ˢ x    y ∈ˢ B 
    c1 x x∈B y y∈x = ord .fst y∈x x∈B
    c2 : (x : S)   x ∈ˢ B   (y : S)   y ∈ˢ x 
        (z : S)   z ∈ˢ y    z ∈ˢ x 
    c2 x x∈B y y∈x z z∈y = ord .snd x x∈B z∈y y∈x

  defSet-φ-ord : ((β : S)   β ∈ˢ α    β ∈ˢ A )  DefA.defSet φ  α
  defSet-φ-ord α⊆A = extensionality (DefA.defSet φ) α (sub₁ , sub₂)
    where
    sub₁ :  DefA.defSet φ  α 
    sub₁ y y∈ₛ = ∈∈ₛ {a = y} {b = α} .fst
      (y∈α (∈∈ₛ {a = y} {b = DefA.defSet φ} .snd y∈ₛ))
      where
      y∈α :  y ∈ˢ DefA.defSet φ    y ∈ˢ α 
      y∈α y∈def = ord∈Lset→∈ α ordα y ordy y∈A
        where
        y∈A = DefA.defSet⊆A φ y y∈def
        fib = ∈-asFiber {a = y} {b = A} y∈A
        m = fib .fst
        q = fib .snd
        sat :  ( A ⟫↪ m  []) ⊨ᵛ (mapFo DefA.ι φ) 
        sat = subst ⟨_⟩ (RefA.abs-defSet φ φ-ord-Δ₀ m)
                (subst  w   w ∈ˢ DefA.defSet φ ) (sym q) y∈def)
        ordy : IsOrd y
        ordy = subst IsOrd q (⊨ᵛ→ord m sat)

    sub₂ :  α  DefA.defSet φ 
    sub₂ y y∈ₛ = ∈∈ₛ {a = y} {b = DefA.defSet φ} .fst
      (y∈def (∈∈ₛ {a = y} {b = α} .snd y∈ₛ))
      where
      y∈def :  y ∈ˢ α    y ∈ˢ DefA.defSet φ 
      y∈def y∈α = subst  w   w ∈ˢ DefA.defSet φ ) q
        (subst ⟨_⟩ (sym (RefA.abs-defSet φ φ-ord-Δ₀ m)) sat)
        where
        ordy = mem-ord {A = α} ordα y y∈α
        y∈A = α⊆A y y∈α
        fib = ∈-asFiber {a = y} {b = A} y∈A
        m = fib .fst
        q = fib .snd
        sat :  ( A ⟫↪ m  []) ⊨ᵛ (mapFo DefA.ι φ) 
        sat = ord→⊨ᵛ m (subst IsOrd (sym q) ordy)

序数现身于其后继

归纳。假设给出 α 的每个成员都在自身的后继阶段现身;累积引理把它们逐一抬进 Lset α,那正是上一节所索取的包含关系;公式随即从 Lset α 中刻出 α;而下一阶段那个并的一支把它交付。

private
  𝒟ₒ→Lset-suc : (α : S)   α ∈ˢ 𝒟ₒ (Lset α)    α ∈ˢ Lset (sucV α) 
  𝒟ₒ→Lset-suc α α∈𝒟ₒ =
    subst  w   α ∈ˢ w ) (sym (Lset-compute (sucV α)))
      (∈∈ₛ {a = α} {b =  (sett  sucV α  s)} .snd
        (union-ax (sett  sucV α  s) α .snd
           𝒟ₒ (Lset α) , (𝒟ₒLα∈ₛsett , α∈ₛ𝒟ₒLα) ∣₁))
    where
    s :  sucV α   S
    s m = 𝒟ₒ (Lset ( sucV α ⟫↪ m))
    fib = ∈-asFiber {a = α} {b = sucV α} (self∈sucV α)
    m = fib .fst
    p :  sucV α ⟫↪ m  α
    p = fib .snd
    𝒟ₒLα∈ₛsett :  𝒟ₒ (Lset α) ∈ₛ sett  sucV α  s 
    𝒟ₒLα∈ₛsett = ∈∈ₛ {a = 𝒟ₒ (Lset α)} {b = sett  sucV α  s} .fst
       m , cong  b  𝒟ₒ (Lset b)) p ∣₁
    α∈ₛ𝒟ₒLα :  α ∈ₛ 𝒟ₒ (Lset α) 
    α∈ₛ𝒟ₒLα = ∈∈ₛ {a = α} {b = 𝒟ₒ (Lset α)} .fst α∈𝒟ₒ

ord∈Lset-suc : (α : S)  IsOrd α   α ∈ˢ Lset (sucV α) 
ord∈Lset-suc = ∈-induction
  {P = λ α  IsOrd α   α ∈ˢ Lset (sucV α) } step
  where
  step : (α : S)  (∀ β  β ∈ᵗ α  IsOrd β   β ∈ˢ Lset (sucV β) )
        IsOrd α   α ∈ˢ Lset (sucV α) 
  step α IH ordα = 𝒟ₒ→Lset-suc α α∈𝒟ₒ
    where
    α⊆A : (β : S)   β ∈ˢ α    β ∈ˢ Lset α 
    α⊆A β β∈α = Lset-cumul β α ordβ ordα β∈α (IH β β∈α ordβ)
      where
      ordβ = mem-ord {A = α} ordα β β∈α
    α∈𝒟ₒ :  α ∈ˢ 𝒟ₒ (Lset α) 
    α∈𝒟ₒ = 𝒟ₒ-intro (Lset α) α
       φ-ord {K =  Lset α } , OrdAt.defSet-φ-ord α ordα α⊆A ∣₁

小结

ord∈Lset-suc 说序数现身于自身之后的那个阶段,ord∈Lset→∈ 说它不会更早现身。二者合起来,Lset α 中的序数恰是 α 的成员。本章是经典的,经由第一节那两次比较,而它用到的其余一切都是构造性的。下一章把这个结果花掉一次,用在 ω 上,无穷公理随之合龙。