The axiom of infinity in L

数码链已在上一章造好,分文未花。剩下的是公理本身,只有一步,而无穷公理全部的经典代价都付在这一步上。

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

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

module L.Axioms.Infinity { : Level} (lem : LEM (ℓ-suc )) where

open import FOL.ZFStructure using ( module hPropStructure )
import FOL.ZFModel
open import L.Constructible {} using ( 𝒮ʟ; isL )
open import L.Ordinal {} using ( suc-ord; ω-ord )
open import L.Ordinal.Stages {} lem using ( ord∈Lset-suc )
open import L.Axioms.Basic {} using ( uniqueL )
open import L.Axioms.Numerals {} using ( numeralL; numeralL-fst )

import Cubical.HITs.PropositionalTruncation as PT
open PT using ( ∣_∣₁ )
open import Cubical.Functions.Logic using ( ⇔toPath )
open import Cubical.HITs.CumulativeHierarchy.Constructions
  using ( module InfinitySet )
open InfinitySet using ( sucV; ω )

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

module ModelL = FOL.ZFModel 𝒮ʟ
open ModelL using ( SetOf )

收集这条链

现在是公理本身。必须在 L 内拿出一个成员恰为诸数码的集合,而环境层级有现成的候选,即 ω。要证的是 ω 可构造,上一章一行给出:ω 是序数,而序数现身于自身之后的那个阶段。

这就是花费排中律的那一步,值得看清代价花在了哪里。不在链上,链是免费的;不在收集一个族上,此处没有任何原则做那件事;而在于知道哪些序数住在哪个阶段,那是一次比较。

ω∈L :  isL ω 
ω∈L =  sucV ω , (suc-ord ω-ord , ord∈Lset-suc ω ω-ord) ∣₁

ωʟ : S
ωʟ = ω , ω∈L

余下要核对的是 ωʟ 的成员恰是链上的诸数码。属于 ωʟ 就是属于 ω,而库把后者给成「仅仅被某个库数码命中」;链的投影等式把其中每一个换成链的成员,反之亦然。于是 ωʟ 实现了那个数码谓词,而外延性使它成为唯一这样的集合。

isNumeralL : S  Ω
isNumeralL x =  (Lift {ℓ-zero} {ℓ-suc } )  n  x ≈ˢ numeralL (lower n))

ω-specL : (x : S)  (x ∈ˢ ωʟ)  isNumeralL x
ω-specL x = ⇔toPath
  (PT.map  { (k , p)  lift (lower k)
             , (sym p  sym (numeralL-fst (lower k))) }))
  (PT.map  { (n , q)  lift (lower n)
             , (sym (q  numeralL-fst (lower n))) }))

hasInfinityL : isContr (SetOf isNumeralL)
hasInfinityL = uniqueL isNumeralL (ωʟ , ω-specL)

小结

无穷公理已全额付清:链 numeralL 连同它的两条钉死方程,以及把它收集成集合的 hasInfinityL。四个字段离开前沿,而二者之间的分野正是本章的教益。造链是免费的;收集它花掉一次序数比较,从而花掉排中律。这就是 L 中无穷公理的全部经典内容,而它在本章的参数表里一望可见。