首次与集合相交的层

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

阅读指南 · 依赖地图

本章为内部选择构造提供两样原料。第一是关于最小层的引理。当一条序数性质首次成立时,它在一个最小层处成立;该层是否为后继并非自动成立,因为性质可能在零序数处首次成立。本章证明论证所需的条件形式:若除最小层之外,一次雕出仅仅存在,即存在低于它的序数 δ 使性质在后继 sucV δ 处已经成立,则最小层是后继,且有唯一的前一层。第二样原料是一个上界序数:对可构造集合而言,存在一个序数,其层同时容纳该集合、它的成员、成员的成员,以及塔的极限层。

这些材料服务于一把双钥匙的比较。首次出现在不同层的两个集合,仅凭各自的诞生序数比较,别无其他;只有首次出现在同一层的集合,才在该层之内按名字比较。第一样原料使每个诞生序数成为确定的对象,而非单纯的存在;第二样原料保证一整族候选者所需的材料都住进同一个层,从而名字的比较有共同的场地。

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

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

module L.Choice.FirstIntersectionStage { : Level} (lem : LEM (ℓ-suc )) where

全章在唯一一条假设下运行:模型层级的后继处的一份排中律实例;以下每条陈述都在这一设定之内作出。

open import FOL.ZFStructure using ( module hPropStructure )
open import V.Hierarchy {} using ( 𝒮ᵥ; ∈-irrefl )
open import V.Model {} using ( ∈sucV-elim; self∈sucV )

本章的问题是关于首次出现的。一个可构造集合会在某个时刻进入层之塔;塔所居于的环境层级具有非自反的隶属,故没有序数包含自身,而其后继的性质也已清楚:序数坐在自己的后继之内,后继的成员或是该序数的成员、或是该序数本身。

open import L.Constructible {}
  using ( IsOrd; isPropIsOrd; isL; Lset; Lset-layer; Lset-out
        ; Lset-mono; layer-trans )

可构造一侧以塔 Lset 作答,塔由序数索引,序数是层级的集合,而非宿主宇宙层级。序数性 IsOrd 本身是命题;塔有层关系、向外的分解与单调性;传递性则在层之间搬运成员。

open import L.Ordinal {} using ( mem-ord; suc-ord; bound2; ω-ord )
open import L.Ordinal.Stages {} lem using ( suc∈or≡ )
open import L.Stage {} lem
  using ( isLeastOrd; stage; stage-ord; stage-mem )
open import L.Axioms.Basic {} using ( Lset-suc )

论证依靠比较与层。把低于某层的序数与该层自身相比,正是判定该层是否越过一个后继的方法;序数的成员与序数的后继都仍是序数。每个可构造集合携带着它最早的序数,连同序数性与隶属交付,而极小性以反驳形式陈述。两个序数有共同上界。后继恒等式则说:下一层恰是上一层的可定义子集,这正是任何东西得以进入塔的那一步。

import Cubical.Data.Sum as Sum
import Cubical.Data.Empty as Empty
import Cubical.HITs.PropositionalTruncation as PT
open PT using ( ∥_∥₁ )

论证以三个命题动作写成:分裂成情形、以空类型告终的反驳,以及仅知其为存在的存在。

open import Cubical.Data.Sigma using ( Σ≡Prop )
open import Cubical.Foundations.HLevels using ( isProp× )
open import Cubical.HITs.CumulativeHierarchy.Base using ( setIsSet )

前一层把一个序数与命题性的证据配成一对。这类序对由第一分量决定;累积层级本身又是集合,因此前一层的相等归结为其序数分量的相等。

open import Cubical.HITs.CumulativeHierarchy.Constructions
  using ( module InfinitySet )
open InfinitySet using ( sucV; ω )

层级的无穷构造同时给出冯·诺伊曼后继 sucV,以及上界所要包含的极限层 ω

open hPropStructure 𝒮ᵥ

结构隶属 ∈ˢ 是序数性、层与极小性共同陈述其中的关系。

最小层的前一层

问题是:某物现身的那个最小层是否为后继,若是,它后继的是哪一层。单独的最小层未必是后继,因为性质可能从零开始;构造在「其下有雕出」这一附加假设之下产出唯一的前一层。

后继决定它所后继的东西,至少在序数之内如此。把一个候选前一层与另一个相比:各自属于对方的后继,故各自或是对方的成员、或与对方相等;而两个序数不能互为成员,否则传递性会使其一属于自身。于是「是给定序数的前一层」是命题,正是这一点使一个仅仅存在的前一层可以被读作一个确定的前一层。

最小层凭什么有前一层?这需要两样输入,值得分开看。第一是最小层自身:性质在其中成立的序数 σ,其极小性以反驳形式陈述,即没有更小的序数拥有该性质。第二是 σ 处雕出的仅仅存在:σ 以下的某个序数 δ,其后续 sucV δ 处性质已经成立。有了雕出,极小性排除「后继仍严格在下」,而不越头的比较只剩一种情形:被雕出序数的后继恰是 σ。于是最小层是后继,而被雕出的序数就是它的前一层。没有雕出则推不出任何东西:性质可能恰在零序数处首次成立,而零以下根本没有序数。

IsPredOf : S  S  Type (ℓ-suc )
IsPredOf σ δ = IsOrd δ × (sucV δ  σ)

序数 σ 的候选前一层 δ 是一个序数,其冯·诺伊曼后继就是 σ 本身。两半都不可或缺:序数性是比较所需的,等式则是把 δ 钉在 σ 上的。

private
  cycle₂ : (a b : S)  IsOrd a   a ∈ˢ b    b ∈ˢ a   Empty.⊥
  cycle₂ a b orda a∈b b∈a = ∈-irrefl a (orda .fst a∈b b∈a)

没有序数能属于它自己的某个成员:传递性会把这条隶属沿两步循环搬回 a 自身,与非自反性矛盾。正是这个两步的不可能性,禁止两个序数互为成员。

  mem-branch : (δ δ' : S)  IsOrd δ   δ' ∈ˢ sucV δ    δ ∈ˢ δ'   δ  δ'
  mem-branch δ δ' ordδ δ'∈sδ δ∈δ' =
    ∈sucV-elim {A = δ} {x = δ'} (setIsSet δ δ') δ'∈sδ
       δ'∈δ  Empty.rec (cycle₂ δ δ' ordδ δ∈δ' δ'∈δ))
       δ'≡δ  sym δ'≡δ)

隶属分支读作:δ' 属于 δ 的后继,且 δ 属于 δ';结论必为 δ ≡ δ'。倘若 δ' 属于 δ 自身,两步循环便会闭合;故 δ' 就是 δ 自身,消去恰返回这一点。

ord-suc-inj : (δ δ' : S)  IsOrd δ  sucV δ  sucV δ'  δ  δ'
ord-suc-inj δ δ' ordδ e =
  ∈sucV-elim {A = δ'} {x = δ} (setIsSet δ δ') δ∈sδ'
    (mem-branch δ δ' ordδ δ'∈sδ)
     δ≡δ'  δ≡δ')

后继运算在序数上是单射的。由后继的等式,δ 属于 sucV δ';消去给出两种读法。要么 δ 属于 δ',此时隶属分支闭合循环并给出等式;要么 δ 本来就是 δ'。后继决定它所后继者。

  where
  δ∈sδ' :  δ ∈ˢ sucV δ' 
  δ∈sδ' = subst  w   δ ∈ˢ w ) e (self∈sucV δ)
  δ'∈sδ :  δ' ∈ˢ sucV δ 
  δ'∈sδ = subst  w   δ' ∈ˢ w ) (sym e) (self∈sucV δ')

喂给消去的两条隶属来自既有事实「序数坐在自己的后继之内」,沿等式及其反向运输而得。

isPropPredOf : (σ : S)  isProp (Σ[ δ  S ] IsPredOf σ δ)
isPropPredOf σ (δ , (ordδ , e)) (δ' , (ordδ' , e')) =
  Σ≡Prop  d  isProp× (isPropIsOrd d) (setIsSet (sucV d) σ))
    (ord-suc-inj δ δ' ordδ (e  sym e'))

于是同一序数的任意两个前一层相等。第一分量由单射性一致,其余数据都是命题,故前一层组成的整个类型是命题。正是这一点使「仅仅存在的前一层」可当作确定的前一层使用:把截断展开到命题值的目标永远合法。

module _ (P : S  hProp (ℓ-suc )) where

最小层论证对每条序数性质同时只写一次:性质是参数,以下任何地方都不读入其内部。

  Carved : S  Type (ℓ-suc )
  Carved σ = Σ[ δ  S ] ( δ ∈ˢ σ  ×  P (sucV δ) )

σ 处的一次雕出是论证所运行的数据:一个严格低于 σ 的序数 δ,其后继已携带该性质。若雕出仅仅存在,最小层就不可能远在 δ 之上,因为性质在 sucV δ 处已经成立。

  private
    below-case : (σ δ : S)  isLeastOrd P σ  IsOrd δ   P (sucV δ) 
                 sucV δ ∈ˢ σ   sucV δ  σ
    below-case σ δ least ordδ m s∈σ =
      Empty.rec (least (sucV δ) (suc-ord ordδ) m s∈σ)

below 分支处理「后继仍严格低于最小层」的情形。极小性以反驳形式陈述,而本分支的假设恰是它的前提,故 least 先给出矛盾;Empty.rec 再把该矛盾消去成分支所欠的路径 sucV δ ≡ σ

    same-case : (σ δ : S)  sucV δ  σ  sucV δ  σ
    same-case σ δ e = e

相等情形无须任何工作:交给该情形的恰是「后继与最小层等同」这件事本身。

    atCarve : (σ : S)  IsOrd σ  isLeastOrd P σ
             Carved σ  Σ[ δ  S ] IsPredOf σ δ
    atCarve σ ordσ least (δ , (δ∈σ , m)) = δ , (ordδ , suc≡σ)

atCarve 把一次雕出变成确定的前一层。见证 δ 被保留,其序数性由属于序数 σ 而恢复,而把 sucV δ 钉到 σ 上的等式正是那场情形分析的内容。

      where
      ordδ : IsOrd δ
      ordδ = mem-ord {A = σ} ordσ δ δ∈σ

δ 的序数性承继自序数 σ,因为序数的成员是序数。

      suc≡σ : sucV δ  σ
      suc≡σ = Sum.rec (below-case σ δ least ordδ m) (same-case σ δ)
        (suc∈or≡ δ σ ordδ ordσ δ∈σ)

δ ∈ σ 出发,suc∈or≡ 为其后继留下两种可能:仍严格低于 σ,或等于 σ。极小性排除前者,后者便给出所需等式。

  predOf : (σ : S)  IsOrd σ  isLeastOrd P σ   Carved σ ∥₁
          Σ[ δ  S ] IsPredOf σ δ
  predOf σ ordσ least = PT.rec (isPropPredOf σ) (atCarve σ ordσ least)

predOf 消费一个仅知其存在的雕出,返回前一层。截断的输入被消去到「前一层类型是命题」这一事实之中,因此从不在假想的雕出之间作选择;无论截断交出哪次雕出,答案都是同一个确定的前一层。

  carveAt : (σ z : S)   z ∈ˢ Lset σ 
           ((δ : S)   z ∈ˢ Lset (sucV δ)    P (sucV δ) )
            Carved σ ∥₁

carveAt 从最小层的一个成员 z 造出雕出,配合的是这样一条观察:但凡 z 在某个后继层现身,性质便已在彼处成立。这正是进入塔之下降的形状:出现在某层,就是出现在某个更早层的可定义幂集之内,而由后继恒等式,每个可定义幂集都是一个后继层。

  carveAt σ z z∈Lσ k = PT.map
     { (δ , (δ∈σ , z∈𝒟))  δ , (δ∈σ
      , k δ (subst  w   z ∈ˢ w ) (sym (Lset-suc δ)) z∈𝒟)) })
    (Lset-out σ z z∈Lσ)

塔以截断的方式分解 z 的隶属:给出某个低于 σ 的层 δ,使 z 落在 Lset δ 的可定义幂集之内。映射只在截断内部进行:后继恒等式反向读取,把 z𝒟ₒ (Lset δ) 搬到 Lset (sucV δ),观察 k 在该后继处触发,所得的雕出被重新注入截断。

一层装下一个集合以下的一切

本节用层的传递性与序数上界,得到一个同时包含集合的成员、成员的成员以及极限层 ω 的层。

构造还需要另一样东西:一个上界,而取得它不牵涉任何比较。层传递,故一个集合的层已经装着该集合的诸成员,以及其后它们的诸成员;最早的层与别的层无异,故它就够用。

还需确定一个包含塔的极限层的序数。前方的比较以对象语言书写,而各元数的无常元公式 Formula ⊥* n 的码都属于 Lset ω;这样的码可以带有自由变量,因此它们是公式,而非句子。后继层中一个成员的完整名字所说的多于它的码:它还要指名元数,以及取自更早层的参数向量。这里造出的界覆盖码,因为 ω ∈ β 加上单调性把 Lset ω 抬进 Lset β;参数低于界则另有原因,下一条事实记录的正是它:集合的成员与成员的成员落在同一层中。

stage-below : (a : S) (p :  isL a ) (x : S)   x ∈ˢ a 
              x ∈ˢ Lset (stage a p) 
stage-below a p x x∈a =
  layer-trans (Lset-layer (stage a p)) x∈a (stage-mem a p)

层传递,而 a 的最早层也是一个层。故 a 的成员 x 落在塔在 a 自身层处的层里:传递性把隶属从集合搬进容纳该集合的那一层。

stage-below₂ : (a : S) (p :  isL a ) (x y : S)   y ∈ˢ x    x ∈ˢ a 
               y ∈ˢ Lset (stage a p) 
stage-below₂ a p x y y∈x x∈a =
  layer-trans (Lset-layer (stage a p)) y∈x (stage-below a p x x∈a)

传递性应用两次即可下探两层:a 的成员的成员落在同一层里,因为它属于 x,而 x 属于那一层。

stageBound : (a : S) (p :  isL a )
            Σ[ β  S ] (IsOrd β ×  ω ∈ˢ β  ×  stage a p ∈ˢ β )
stageBound a p = bound2 ω (stage a p) ω-ord (stage-ord a p)

必须被支配的两个序数是极限层 ω 与该集合自身的最早层;bound2 返回一个同时高于两者的序数,并附带其序数性证书

bound-below₂ : (a : S) (p :  isL a ) (x y : S)   y ∈ˢ x    x ∈ˢ a 
               y ∈ˢ Lset (stageBound a p .fst) 
bound-below₂ a p x y y∈x x∈a =
  Lset-mono (stageBound a p .snd .snd .snd) (stage-below₂ a p x y y∈x x∈a)

塔的单调性把「下探两层」的事实从最早层提升到界序数的层。现在这一层同时容纳 a、它的成员、成员的成员,以及比较所要读取的公式码。

小结

本章可复用的结果,是最小层为后继时的唯一前一层,以及足以承载选择构造的上界序数。最小层引理是带条件的,而条件正是它的内容。对以 σ 为最小层的某条序数性质而言,性质完全可能恰在零序数处首次成立,此时其下无可雕出之物。当 σ 处的雕出仅仅存在,即有低于 σ 的序数使其后继已具该性质时,carveAt 产出雕出,predOfisPropPredOf 闭合截断,把它化为唯一的前一层;而 ord-suc-inj 正是「后继决定它所后继者」的理由。stageBound 给出上界序数:它在一个集合自身的层之上,从而在其成员及其成员之上,也在塔的极限层之上,而公式码恰在那里。