累积层级中的小真值

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

阅读指南 · 依赖地图

在累积层级 V ℓ 上工作会不断产生形如 x ∈ˢ aa ≈ˢ b 的陈述:它们是打包成 hProp (ℓ-suc ℓ) 元素的命题,比集合自身所在的层级 高一个宇宙。这样的上宇宙命题不便使用:期望 层数据的构造,例如库中的分离集合,无法接受它们。于是,若命题 P : hProp (ℓ-suc ℓ) 作为证明的类型等价于某个低宇宙命题 Q : hProp ℓ,就称它是小的。小性不是把 P 本身化简,而是一份证书:另一个更低的命题说的恰是同一件事。

本章分阶段把大真值降到小真值。V 的原子隶属关系与相等关系直接是小,因为每个集合都配有呈现其成员的小索引类型。小性随后经一切联结词传播,也经有界量词传播,因为后者的量化范围恰是这种索引类型。对无界量词,本章证明了量化范围本身本质小,即等价于层级 的某个类型时,小性仍然保持。两项成果是:无需命题降级的 Δ₀ 分离,以及载体本质小的限制结构上全体公式真值的小性。

本章的一切都在一个固定的宇宙层级 上进行,它由模块参数一次性确定。环境对象是 V.Hierarchy 章引入的累积层级 V ℓ,其集合是 Type ℓ 索引族的像。统摄全章的定义是 isSmall:对 P : hProp (ℓ-suc ℓ)isSmall P 的元素是一个对子,第一分量是低宇宙命题 Q : hProp ℓ第二分量底层类型间的等价 ⟨ P ⟩ ≃ ⟨ Q ⟩。本章的任务就是制造这样的对子。工作环境是 ZFStructure record,它把载体与取真值的等词、隶属关系打包在一起;把这样的 record 限制到一个类上的运算 _↾_ 将在最后一节用到。

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

open import Base.Prelude

module V.Smallness { : Level} where

open import Base.Impredicativity using ( isSmall )

待压低的陈述生活在一阶形式语言中。其关系符号是表示隶属与相等的 _∈̇__≐_;联结词组合公式;语言同时具有有界量词 ∀̇∈∃̇∈ 与无界量词 ∀̇∃̇_Δ₀ 片段在 Lévy 层级中给公式分类。Δ₀ 不是公式上的谓词,而是一个归纳见证,证明该公式仅由原子经联结词与有界量词构成。关键在于,无界量化没有对应构造子:含有 ∀̇∃̇_ 的公式根本无法携带 Δ₀ 见证,本章的 Δ₀ 定理正是依赖这一缺席。

open import FOL.ZFStructure using ( ZFStructure; _↾_ )
open import FOL.Syntax
  using ( Formula; _∈̇_; _≐_; _∧̇_; _∨̇_; _⇒̇_; ⊥̇; ∃̇_; ∀̇_; ∀̇∈; ∃̇∈ )
open import FOL.LevyHierarchy
  using ( Δ₀; δ-∈; δ-≐; δ-∧; δ-∨; δ-⇒; δ-⊥; δ-∀∈; δ-∃∈ )

公式的意义由语义模块给出,这里在 V.Hierarchy 的结构 𝒮ᵥ 上实例化:即装备成结构的累积层级,其关系取值于 hProp (ℓ-suc ℓ)。因此本章研究的真值恰是高一层的命题,正是 isSmall 所谈的那类。所有证明都建立在一套等价工具之上:等价类型 _≃_ 及其求值 equivFun 与原像 invEq,穿越函数类型的 equivΠ,以及 propBiimpl→Equiv,它把两个命题性证明加一条双向蕴含变成等价。由于下面各等价的两端都是命题,最后这个构造子承担了大部分工作。

import FOL.Semantics
open import V.Hierarchy {} using ( 𝒮ᵥ )

open import Cubical.Foundations.Equiv
  using ( _≃_; equivFun; invEq; invEquiv; equivΠ; propBiimpl→Equiv )
import Cubical.Functions.Logic as Logic

要证联结词保小,需要低层 ,即每次化归的目标宇宙,上的命题运算。它们保留限定名 Logic,因此 Logic.⊓ 等名字显然作用于 hProp ℓ,而下文不加限定的运算作用于 hProp (ℓ-suc ℓ)。其余部分服务于具体的等价构造:Σ-cong-equiv 由逐分量的等价构造对子类型间的等价;Sum.⊎-equiv 处理余积;tt* 是单元元素;命题截断模块 PT 的 map 运算沿函数搬运「仅仅存在」式陈述,而不选取任何见证。

open import Cubical.Functions.Logic using ( ⇔toPath )
open import Cubical.Data.Sigma using ( Σ-cong-equiv )
import Cubical.Data.Sum as Sum
open import Cubical.Data.Unit using ( tt* )
import Cubical.HITs.PropositionalTruncation as PT

层级本身提供原子数据。每个集合 a 都有一个单射呈现:小索引类型 ⟪ a ⟫ 与到 V ℓ 的嵌入 ⟪ a ⟫↪。于是隶属有一个小的孪生 _∈ₛ_,定义为所有对 (m : ⟪ b ⟫, ⟪ b ⟫↪ m ∼ a) 的类型,落在 hProp ℓ 中;转换 ∈∈ₛ 双向联结两种隶属,identityPrinciple 把双相似 与真正的路径等同。运算 ∈-asFiber 把 (不加截断的) 隶属变成嵌入的一个真正的纤维。SeparationSet 是库的分离构造,只接受已经在低宇宙取值的谓词。不加限定的联结词 ⊓ ⊔ ⇒ ¬ ⊤ ⊥ 与量词 ∀[ x ] P x∃[ x ] P x 直接作用于 hProp (ℓ-suc ℓ)

open import Cubical.HITs.CumulativeHierarchy.Properties
  using ( _∼_; identityPrinciple; _∈ₛ_; ∈∈ₛ; ⟪_⟫; ⟪_⟫↪; ∈ₛ⟪_⟫↪_; ∈-asFiber )
open import Cubical.HITs.CumulativeHierarchy.Constructions
  using ( module SeparationSet )

结构 record 在 𝒮ᵥ 处实例化,此后名字 S_≈ˢ__∈ˢ_ 就指它的载体与关系。具体地,SV ℓ。关于结构成员的陈述因此是高一层的命题,而这类陈述能否小,正是本章要用力的地方。

open ZFStructure 𝒮ᵥ

何谓小

命题 P : hProp (ℓ-suc ℓ) 是小的 (记作 isSmall P),指它配有低宇宙命题 Q : hProp ℓ 以及等价 ⟨ P ⟩ ≃ ⟨ Q ⟩。该定义来自 Base.Impredicativity,那里的降层接口对每个命题一次性断言小性。本章不作这种假设,而是对个别的命题挣得小性,从结构的两个原子关系开始,再把这些见证经联结词与量词传递下去。

原子为何会是小的?因为 V ℓ 中集合的构造方式:它是某个 ⟪ a ⟫ : Type ℓ 索引的族的像。「xa 的成员」即是说某个索引呈现的成员等于 x,而这个陈述在小类型上量化。隶属因此有小孪生 a ∈ₛ b∈∈ₛ 在两个方向上转换这两种关系。相等同样经恒等原理压缩为双相似 a ∼ b

第一条引理把小的隶属关系打包成小性见证。要证 isSmall (a ∈ˢ b),须给出一个低宇宙命题以及它与 ⟨ a ∈ˢ b ⟩ 的等价;见证取 a ∈ₛ b。由于两个底层类型都是命题,propBiimpl→Equiv 仅凭 ∈∈ₛ 的两个方向即可造出等价。这里没有用到关于 ab 的任何内容:无论这两个集合是什么,它们之间的隶属都是小的。注意引理没有说的内容:它不以路径等同两个关系,也不让 ∈ˢ 本身落在低宇宙;它提供的是一个被压缩的等价物。

small-∈ : (a b : S)  isSmall (a ∈ˢ b)
small-∈ a b = (a ∈ₛ b) ,
  propBiimpl→Equiv (snd (a ∈ˢ b)) (snd (a ∈ₛ b))
    (∈∈ₛ {a = a} {b = b} .fst) (∈∈ₛ {a = a} {b = b} .snd)

small-≡ : (a b : S)  isSmall (a ≈ˢ b)

相等原子遵循同一模式,但用不同的小孪生。结构的相等 a ≈ˢ b 压缩为双相似 a ∼ b,即两集合有相同成员的陈述;库的恒等原理是 ⟨ a ∼ b ⟩路径类型 a ≡ b 之间的等价,invEquiv 把它转向 isSmall 所需的方向,即从大宇宙的相等类型 ⟨ a ≈ˢ b ⟩ 到低宇宙的双相似命题。与 small-∈ 合起来,语言的原子情形就此穷尽。

small-≡ a b = (a  b) , invEquiv identityPrinciple

联结词保小

有了原子之后,下一个问题是小性能否在逻辑组合下存活。答案是肯定的:四个联结词与两个常量逐一传递小性见证;本节完成后,凡由小原子经联结词构成的真值都是小的。这也为日后对 Δ₀ 见证的归纳一次性封闭所有联结词情形铺平了道路。

每个证明取两个小性见证 (P' , eP)(Q' , eQ),其中 eP : ⟨ P ⟩ ≃ ⟨ P' ⟩eQ : ⟨ Q ⟩ ≃ ⟨ Q' ⟩,再返回复合命题的小性见证。低宇宙分量由 P'Q' 经层级 上对应的 Logic 运算构成;等价分量则沿 ePeQ 传输复合命题的证明。

合取最简单,因为 P ⊓ Q底层类型是对子 ⟨ P ⟩ × ⟨ Q ⟩。用 Logic.⊓ 组合两个压缩命题,其底层类型同样是乘积;等价由 Σ-cong-equiv 作用于 ePeQ 得到:把一对证明映到其压缩后的一对。除了每个因子可压缩之外,不需要任何关于命题的其他内容。

small⊓ : {P Q : hProp (ℓ-suc )}  isSmall P  isSmall Q  isSmall (P  Q)
small⊓ {P} {Q} (P' , eP) (Q' , eQ) =
  (P' Logic.⊓ Q') , Σ-cong-equiv eP  _  eQ)

small⊔ : {P Q : hProp (ℓ-suc )}  isSmall P  isSmall Q  isSmall (P  Q)
small⊔ {P} {Q} (P' , eP) (Q' , eQ) =

析取与蕴涵各需一个想法。对析取,⟨ P ⊔ Q ⟩ 是余积的命题截断,因此压缩命题 P' Logic.⊔ Q' 也是截断,PT.propTrunc≃ 把余积等价 Sum.⊎-equiv eP eQ 提升到截断上。截断纪律在此显现:该映射只是改记哪一侧成立,从不检视选定了哪一侧,因为截断根本不提供选定的侧。对蕴涵,⟨ P ⇒ Q ⟩ 是函数类型 ⟨ P ⟩ → ⟨ Q ⟩;压缩命题 P' Logic.⇒ Q' 在层级 上形状相同,equivΠ 逐点地把等价穿过函数空间。

  (P' Logic.⊔ Q') , PT.propTrunc≃ (Sum.⊎-equiv eP eQ)

small⇒ : {P Q : hProp (ℓ-suc )}  isSmall P  isSmall Q  isSmall (P  Q)
small⇒ {P} {Q} (P' , eP) (Q' , eQ) =
  (P' Logic.⇒ Q') , equivΠ eP  _  eQ)

small¬ : {P : hProp (ℓ-suc )}  isSmall P  isSmall (¬ P)

否定是唯一一个压缩命题本身不能确定等价的情形,缘于否定的反变性:¬ P 的证明要消费 P 的证明。压缩命题取 Logic.¬ P',其底层类型⟨ P' ⟩ 映入空类型。两端都是命题,故 propBiimpl→Equiv 适用;两个方向沿相反方向使用 eP:要从压缩的反驳 p' 得到 np : ¬ P 的矛盾,把原像 invEq eP p' 喂给 np;反向则把 p : ⟨ P ⟩ 的像 equivFun eP p 喂给 np'。等价的求值与逆恰好按否定的逻辑以相反的变差出现。

small¬ {P} (P' , eP) = (Logic.¬ P') ,
  propBiimpl→Equiv (snd (¬ P)) (snd (Logic.¬ P'))
     np p'  np (invEq eP p'))
     np' p  np' (equivFun eP p))

small⊤ : isSmall 

两个常量收尾本节。真是小的,因为两端都是有元素的命题:压缩命题取 Logic.⊤,两个方向的函数都丢弃参数、返回单元元素 tt*。假的起点略有不同:真值 本就定义为 hProp 对 (⊥* , isProp⊥*),故其底层类型恰是空类型 ⊥*,压缩命题也就是打包成 hProp 的同一个空类型。于是两个函数都用荒谬来定义:空类型的参数没有任何情形可分。

small⊤ = Logic.⊤ ,
  propBiimpl→Equiv ( .snd) (snd (Logic.⊤ {}))
     _  tt*)  _  tt*)

small⊥ : isSmall ( { = ℓ-suc })
small⊥ = (⊥* , isProp⊥*) ,

两个方向中的荒谬情形分析 (λ ()) 就是假性证明的全部内容:⊥* 没有构造子,因此从它出发的函数无需任何定义子句。这是「构造子缺席能做真正的逻辑工作」这一主题的首次登场,它将在 Δ₀ 一节强势回归。

  propBiimpl→Equiv isProp⊥* isProp⊥*  ())  ())

有界量词保小

联结词只够处理无量词的真值,而公式里出现一个有界量词就足以让下一节的归纳中断。本节移除这一障碍。以整个 V ℓ 为范围的量词在大载体 S : Type (ℓ-suc ℓ) 上量化,本章已有的构造本身不能压缩其真值;而以集合 a 为界的量词在语义上只在 a 的成员上量化,这些成员由一个小的索引类型呈现:单射呈现把 a 给作 sett ⟪ a ⟫ ⟪ a ⟫↪,其中 ⟪ a ⟫ : Type ℓ。于是改在 ⟪ a ⟫ 上量化,得到的真值由小的命题 sm (⟪ a ⟫↪ m) 经 Π 或截断 Σ 构成,两者都能压缩。

两种量化之间的桥梁是 ∈-asFiber:从 x ∈ᵗ a 的元素出发,它返回 ⟪ a ⟫↪x 上的一个真正的纤维,即索引 m路径 ⟪ a ⟫↪ m ≡ x 的对。该纤维不加截断,因为 ⟪ a ⟫↪ 是嵌入,所以从 a 的成员回到 ⟪ a ⟫ 的索引是函数操作而非选择。两条引理的反向因此都无需任何选取。

全称有界量词陈述的是:对 a 的每个成员 x,命题 B x 成立。其真值是 ∀[ x ] (x ∈ˢ a) ⇒ B x,即在整个载体上索引的蕴涵,前件 x ∈ˢ a 把注意限制到成员上。引理假设每个 B x 都小,见证为 sm x = (B' x , e x),并断言整个全称陈述小。压缩命题用小孪生替换隶属、用 ⟪ a ⟫ 替换载体:它断言对每个索引 m : ⟪ a ⟫,命题 B' (⟪ a ⟫↪ m) 成立。界 a 作为显式参数进入,族 B 则保持隐式、由目标类型确定。

small-∀∈ : (a : S) {B : S  hProp (ℓ-suc )}
          (∀ x  isSmall (B x))
          isSmall (∀[ x  S ] (x ∈ˢ a)  B x)
small-∀∈ a {B} sm = Qsm , propBiimpl→Equiv (snd big) (snd Qsm) fwd bwd
  where

正向方向把原陈述的证明转换为压缩命题的证明。给定 f,它对每个 x 给出从 x ∈ˢ aB x 的蕴涵;我们要对每个索引 m 产出 B' (⟪ a ⟫↪ m) 的证明。先在成员 ⟪ a ⟫↪ m 处应用 f,这需要前件,即 ⟪ a ⟫↪ ma 成员的证明;转换 ∈∈ₛ 从典范见证 ∈ₛ⟪ a ⟫↪ m 给出它,后者不过是索引配上 的自反性。得到的 B (⟪ a ⟫↪ m) 的证明再穿过等价 e,落入压缩命题。

  big = ∀[ x  S ] (x ∈ˢ a)  B x
  Qsm = ∀[ m   a  ] sm ( a ⟫↪ m) .fst
  fwd :  big    Qsm 
  fwd f m = equivFun (sm ( a ⟫↪ m) .snd)
                     (f ( a ⟫↪ m) (∈∈ₛ {a =  a ⟫↪ m} {b = a} .snd (∈ₛ⟪ a ⟫↪ m)))

反向方向正是嵌入发挥价值之处。给定 g,它对每个索引 m 给出 B' (⟪ a ⟫↪ m) 的证明;我们要对每个满足 x∈a : x ∈ᵗ ax 产出 B x 的证明。纤维 mf = ∈-asFiber x∈a 给出索引 mf .fst路径 mf .snd : ⟪ a ⟫↪ (mf .fst) ≡ x。在该索引处应用 g 得到 B' (⟪ a ⟫↪ (mf .fst)) 的证明,逆等价把它送到 B (⟪ a ⟫↪ (mf .fst))subst 再沿 mf .snd 把它传输到 B x。注意做调整的是路径,而非在成员间的任意选择:若纤维被截断,这一传输就无从谈起,引理在不加额外假设时将失败。

  bwd :  Qsm    big 
  bwd g x x∈a =
    subst  v   B v ) (mf .snd)
          (invEq (sm ( a ⟫↪ (mf .fst)) .snd) (g (mf .fst)))
    where mf = ∈-asFiber {a = x} {b = a} x∈a

存在有界量词陈述的是:a 的某个成员 x 满足 B x。其真值是 ∃[ x ] (x ∈ˢ a) ⊓ B x,即隶属与 B 的截断配对;压缩命题仅仅断言存在索引 m : ⟪ a ⟫ 使 B' (⟪ a ⟫↪ m)。假设与结论都镜像全称情形,但证明性质不同:由于两侧都是截断的存在陈述,两个方向都不返回函数,而是把截断映到截断。

small-∃∈ : (a : S) {B : S  hProp (ℓ-suc )}
          (∀ x  isSmall (B x))
          isSmall (∃[ x  S ] (x ∈ˢ a)  B x)
small-∃∈ a {B} sm = Qsm , propBiimpl→Equiv (snd big) (snd Qsm) fwd bwd
  where

正向:PT.map 在截断内部施加逐点构造,这是允许的,因为目标即压缩命题仍是命题。逐点步骤拆开截断的三元组 (x , x∈a , bx):成员、其隶属证据、以及 B x 的证明。这一拆开之所以合法,只因它发生在截断之下,x 的选取永远不必导出。随后 x∈a 的纤维给出索引,证明 bx 沿纤维的路径、按 sym (mf .snd) 方向传输,再经等价压缩。可与全称的正向对照:那里函数是直接到手的,这里仅仅知道这样的数据存在。

  big = ∃[ x  S ] (x ∈ˢ a)  B x
  Qsm = ∃[ m   a  ] sm ( a ⟫↪ m) .fst
  fwd :  big    Qsm 
  fwd = PT.map λ where
    (x , x∈a , bx) 

反向:同样在 PT.map 之下,截断的对 (m , q),即索引与 B' (⟪ a ⟫↪ m) 的证明,被转换成一个具有性质 Ba 的成员。成员取 ⟪ a ⟫↪ m,其隶属证据由 ∈∈ₛ 作用于典范见证得到,性质证明是原像 invEq (sm _ .snd) q。这里完全不需要传输:索引一开始就给定,无须从成员恢复。两个方向之间的不对称正是数据的不对称:一侧直接握有索引,另一侧必须从成员制造索引,而只有嵌入使这一制造成为函数。

      let mf = ∈-asFiber {a = x} {b = a} x∈a
      in mf .fst ,
         equivFun (sm ( a ⟫↪ (mf .fst)) .snd)
                  (subst  v   B v ) (sym (mf .snd)) bx)
  bwd :  Qsm    big 

有了这对引理,语义中的有界量词子句已被覆盖,下一节的归纳可以穿过任何量词皆有界的公式。值得注意的是没有用到什么:两条证明都没有使用任何经典原则、选择,也没有使用降层。唯一实质的事实是隶属的单射呈现,以及 ⟪ a ⟫↪ 是嵌入这一性质。

  bwd = PT.map λ where
    (m , q)   a ⟫↪ m , ∈∈ₛ {a =  a ⟫↪ m} {b = a} .snd (∈ₛ⟪ a ⟫↪ m)
            , invEq (sm ( a ⟫↪ m) .snd) q

从小性到分离

本节是小性兑现之处。库的分离构造 SeparationSet 对集合 a 与取值于宇宙的谓词 ϕ : V ℓ → hProp ℓ,构造一个集合,其成员恰是 a 中满足 ϕ 的成员。对上宇宙谓词这种构造不可能:其内部索引类型必须落在层级 。下面的引理是适配器:给定 S 上逐点带小性见证的谓词 P,它产出结构中的集合 s,并附上成员规格「y ∈ˢ s 当且仅当 y ∈ˢ aP y」,以模型 record 分离字段风格的路径表述。

这里也是各部件汇成计划之处。无论谓词的小性最先来自何处,是上一节的有界量词,还是最后的本质小世界,本引理都把小谓词一次性、以同一方式变成集合。

这条陈述值得细读。结果是一个依值对:结构中的集合 s,以及对每个 y路径 (y ∈ˢ s) ≡ ((y ∈ˢ a) ⊓ P y),落在类型 hProp (ℓ-suc ℓ) 中,而不只是底层命题间的双向蕴含。这与模型 record 分离字段的形状一致,因此该构造可以被移植进任何需要验证分离公理的结构。证明把库构造应用于 a 与压缩后的谓词,再由所得规格的两个方向拼装出所需的路径

separateFromSmall : (a : S) (P : S  hProp (ℓ-suc ))
                   (∀ y  isSmall (P y))
                   Σ[ s  S ] (∀ y  (y ∈ˢ s)  ((y ∈ˢ a)  P y))
separateFromSmall a P sm = Sep.SEPAREE , λ y  ⇔toPath (fwd y) (bwd y)
  where

先组装压缩谓词:ϕₛ y 按定义就是从逐点小性见证中取出的低宇宙替身 sm y .fst。随后库模块 Sepaϕₛ 处实例化,其结果集合名为 Sep.SEPAREE。这是本章唯一一处运行库分离的地方;本部分其余的分离都要经过这条引理。

  ϕₛ : S  hProp 
  ϕₛ y = sm y .fst
  module Sep = SeparationSet a ϕₛ
  fwd :  y   y ∈ˢ Sep.SEPAREE    (y ∈ˢ a)  P y 
  fwd y y∈s = ∈∈ₛ {a = y} {b = a} .snd (Sep.separation-ax y .fst y∈ₛs .fst)

两个方向都在结构隶属 y ∈ˢ Sep.SEPAREE 与「y ∈ˢ aP y」之间翻译。正向:经 ∈∈ₛy∈s 转成小隶属,喂给库规格 separation-ax y 的正向,得到 y ∈ₛ a 与压缩性质的配对;第一分量再以另一朝向经 ∈∈ₛ 转回 y ∈ᵗ a第二分量经等价 e 的逆展开。反向是镜像:把 a 中隶属转成小形式,用 equivFun 压缩性质证明,让 separation-ax y 的反向产出 Sep.SEPAREE 中的隶属,再经 ∈∈ₛ 转换一次。库规格承担集合论的工作,等价承担宇宙层面的记账。

            , invEq (sm y .snd) (Sep.separation-ax y .fst y∈ₛs .snd)
    where y∈ₛs = ∈∈ₛ {a = y} {b = Sep.SEPAREE} .fst y∈s
  bwd :  y   (y ∈ˢ a)  P y    y ∈ˢ Sep.SEPAREE 
  bwd y yp = ∈∈ₛ {a = y} {b = Sep.SEPAREE} .snd (Sep.separation-ax y .snd
               (∈∈ₛ {a = y} {b = a} .fst (yp .fst) , equivFun (sm y .snd) (yp .snd)))

Δ₀ 公式求值小

前几节积累了小性见证的库存:两个原子、四个联结词、两个常量与两个有界量词。本节通过对 Δ₀ 见证本身的归纳把库存变成定理。回顾 Lévy 层级一章,Δ₀ 是归纳定义的见证,每个公式至多一个,其构造子证明该公式仅由原子经联结词与有界量词构成。定理陈述:凡带有这种见证的公式,在任何环境下的真值都小。由于见证是归纳定义的,证明就是每个构造子一个情形的归纳,而每个情形恰好就是库存中的一条引理。

情形分析有一个富有教益的省略:无界量词 ∀̇∃̇_ 没有对应情形,因为见证类型本就没有它们的构造子构造子的缺席正是分类的实现方式;带无界量词的公式根本无法携带 Δ₀ 见证,归纳也就永远不必面对它。Lévy 层级由此充任宇宙代价的核算:Δ₀ 恰是真值无需付出这一代价的片段。

准备工作一次性实例化语义:SemanticsV𝒮ᵥ 上、真值取于 hProp (ℓ-suc ℓ) 的满足关系,因此公式的真值恰是全章一直在压缩的那类命题。环境类型 S ^ n 是长度 n 的向量记法。模块由常元解释 ι : K → S 参数化,故定理对常元的任意选取成立;恒等函数这一典范情形在本章末取用。模块内 open SemanticsV.At K ι 把词项求值 ⟦_⟧ 与满足 _⊨_ 带入作用域。目标类型值得注意:Δ₀-small 是从 Δ₀ 见证到「对每个环境 γγ ⊨ φ 的小性见证」的函数。归纳针对见证进行,公式与环境在其外围被全称量化。

module SemanticsV = FOL.Semantics 𝒮ᵥ
open SemanticsV using ( _^_ )

module Δ₀Small {ℓc} {K : Type ℓc} (ι : K  S) where

  open SemanticsV.At K ι

  Δ₀-small :  {n} {φ : Formula K n}  Δ₀ φ  (γ : S ^ n)  isSmall (γ  φ)

原子情形在环境 γ 中求值两个词项后,直接调用前两条库存引理:隶属变为对 tu 的值应用 small-∈,相等变为 small-≡。三个二元联结词情形同样直接:归纳假设 Δ₀-small c γΔ₀-small d γ 是子公式真值的小性见证,对应联结词的封闭引理把它们组合起来。显式实例化 {P = γ ⊨ φ} 只是记录见证所压缩的是哪些命题;Agda 本可推断,但写出来记录了该情形的形状。

  Δ₀-small (δ-∈ {t = t} {u}) γ = small-∈ ( t  γ) ( u  γ)
  Δ₀-small (δ-≐ {t = t} {u}) γ = small-≡ ( t  γ) ( u  γ)
  Δ₀-small (δ-∧ {φ = φ} {ψ} c d) γ =
    small⊓ {P = γ  φ} {Q = γ  ψ} (Δ₀-small c γ) (Δ₀-small d γ)
  Δ₀-small (δ-∨ {φ = φ} {ψ} c d) γ =

其余联结词形状的情形是假,然后是两个有界量词。假完全不需要环境:见证 δ-⊥ 不携带子公式,该情形就是 small⊥。有界量词情形才有意思。对 δ-∀∈,公式是 ∀̇∈ t φ,其真值是 ∀[ x ] (x ∈ˢ ⟦ t ⟧ γ) ⇒ ((x ∷ γ) ⊨ φ);这恰好是 small-∀∈ 消费的形状,其中 at 的值,族 B x 取体公式在扩展环境 x ∷ γ 下的真值。归纳假设在扩展环境处应用;这是合法的,因为见证 c 证明的正是体公式 φ 本身。

    small⊔ {P = γ  φ} {Q = γ  ψ} (Δ₀-small c γ) (Δ₀-small d γ)
  Δ₀-small (δ-⇒ {φ = φ} {ψ} c d) γ =
    small⇒ {P = γ  φ} {Q = γ  ψ} (Δ₀-small c γ) (Δ₀-small d γ)
  Δ₀-small δ-⊥ γ = small⊥
  Δ₀-small (δ-∀∈ {t = t} {φ = φ} c) γ =

存在有界情形与全称完全镜像:用 small-∃∈ 替换 small-∀∈,把合取形状的真值 ∃[ x ] (x ∈ˢ ⟦ t ⟧ γ) ⊓ ((x ∷ γ) ⊨ φ) 对上 small-∃∈ 的结论。归纳就此闭合:见证类型的每个构造子都有情形,每个情形都是一条库存引理,而无界量词不再留下任何情形。定理 Δ₀-small 由此成为前几节从孤立事实转变为关于形式语言之陈述的转折点。

    small-∀∈ ( t  γ) {B = λ x  (x  γ)  φ}  x  Δ₀-small c (x  γ))
  Δ₀-small (δ-∃∈ {t = t} {φ = φ} c) γ =
    small-∃∈ ( t  γ) {B = λ x  (x  γ)  φ}  x  Δ₀-small c (x  γ))

无需命题降级的 Δ₀ 分离

把上一节的归纳与之前的适配器复合,本章的核心定理便出现了。取典范常元解释:语言的常元就是结构中的集合本身,ι 为恒等函数。此时带一个自由变量的 Δ₀ 公式 φS 上定义一个逐点小的谓词,separateFromSmall 把它变成集合。结果是分离公理模式限制到 Δ₀ 公式的完整实例,证明中既无命题降级原则,也无任何经典公理或选择:小性由归纳供给,其余交给库构造。模型章仍欠无限制的分离公理;本定理说明,Lévy 层级中的 Δ₀ 档无需 V 的表示之外的任何东西。

开头两行固定典范解释:Δ₀Small id 在恒等处实例化归纳,单自由变量的满足关系再导出为 _⊨_。定理的类型是以 φ 替换任意谓词的分离规格:一个集合 s,使得对每个 ys 中的隶属作为真值等于 a 中的隶属与「y 在单元环境 y ∷ [] 下满足 φ」的合取。证明是 separateFromSmall 的一次应用:传入谓词 λ y → (y ∷ []) ⊨ φ 及其逐点小性,后者是 Δ₀-small c 在每个单元环境处的应用。此外别无他物:Δ₀ 见证 c 恰好被归纳消费一次。

open Δ₀Small id
open SemanticsV.At S id using ( _⊨_ )

separateΔ₀ : (a : S) (φ : Formula S 1)  Δ₀ φ
            Σ[ s  S ] (∀ y  (y ∈ˢ s)  ((y ∈ˢ a)  ((y  [])  φ)))
separateΔ₀ a φ c = separateFromSmall a  y  (y  [])  φ)  y  Δ₀-small c (y  []))

本质小的世界

Δ₀ 定理把每个量词都按「在全 V ℓ 上量化」计价。最后这一层小性通过改变量化的位置连这个代价也免除了。设上层类型 A 配有从小类型 X : Type ℓ 出发的等价 e : X ≃ A。那么对 A 的量化可以逐步替换为对 X 的量化:关于 A 中元素 a 的陈述,在其原像 equivFun e m 处读取。有界量词引理是相关但不同的现象:那里量化范围是呈现某个集合的索引类型,隶属充当过滤器;这里不再留下任何有界性假设。于是小性不是由公式的形状承载,而是由说出它的世界的形状承载。注意假设的方向:它断言的是从 XA 的等价 e 存在;A 本身仍住在上层宇宙。

先看全称版本。陈述 ∀[ x ] P x B 对整个 A 量化;压缩命题改为对 X 量化,断言对每个 m : X,压缩命题 sm (equivFun e m) .fst 成立。由于 e 是等价,在 X 上量化与在 A 上量化给出等价的依值函数类型。等价分量把一族证明 f : ∀ m → ⟨ sm (e m) ⟩ 传输为 ∀ a → ⟨ B a ⟩,逐点再与各等价复合,invEquiv 按目标类型的要求把复合定向为从小 Π 到大 Π。注意与 small-∀∈ 的对照:那里的前件 x ∈ˢ a 起了过滤作用;这里没有前件,仅凭等价完成化归。

small-∀ : {A : Type (ℓ-suc )} {X : Type } (e : X  A) {B : A  hProp (ℓ-suc )}
         (∀ a  isSmall (B a))
         isSmall (∀[ a  A ] B a)
small-∀ {X = X} e sm = (∀[ m  X ] sm (equivFun e m) .fst)
  , invEquiv (equivΠ e  m  invEquiv (sm (equivFun e m) .snd)))

存在版本沿用同一方案,只是以截断替换函数类型。压缩命题是对 X 的小性见证的截断 Σ;等价从对 A 的大见证的截断 Σ 出发:Σ-cong-equiv 沿 e 把对子的基底从 A 换成 X,各纤维沿逆的逐点等价变换,PT.propTrunc≃ 再把对子等价提升到截断上。invEquiv 同样提供所需朝向。两条引理合起来说:对任何本质小类型的量化保持小性;而「本质小」在下一块代码中将指等价于层级 的某个类型。

small-∃ : {A : Type (ℓ-suc )} {X : Type } (e : X  A) {B : A  hProp (ℓ-suc )}
         (∀ a  isSmall (B a))
         isSmall (∃[ a  A ] B a)
small-∃ {X = X} e sm = (∃[ m  X ] sm (equivFun e m) .fst)
  , invEquiv (PT.propTrunc≃ (Σ-cong-equiv e  m  invEquiv (sm (equivFun e m) .snd))))

后果是:在本质小的限制结构上,任何公式求值皆小,无需 Δ₀ 见证。固定结构上的类 M,并设其限制载体本质小,精确形式是等价 e : X ≃ (Σ[ x ∈ S ] (x ∈ᶜ M)),其中 X : Type ℓ。在结构 𝒮ᵥ ↾ M 内,量词在该限制载体上量化,于是上一块代码的两条引理对每个量词都适用,无论有界与否;原子则经第一投影归结为 V 的原子小性。有界性是公式的句法限制,而本质小是量化范围的性质。有了后一项假设,结构归纳便同时覆盖无界与有界量词。内部满足的这一小性,正是让可定义性步骤 (例如可构造层级在每层所做的那一步) 能以低宇宙的谓词运作的原因。

模块的参数装配出这个小世界。M 是载体 S 上的一个类,可以是真类:没有任何大小限制。假设是一对数据:小类型 X : Type ℓ,以及从 X 到限制载体 Σ[ x ∈ S ] (x ∈ᶜ M) 的等价;这正是「世界本质小」的精确含义。注意负担在于该等价存在,而不在于 M 在任何内部意义上有界。常元经 ι : K → Σ[ x ∈ S ] (x ∈ᶜ M) 在限制载体中解释,因此每个常元指称一个对子,其第二分量是「第一分量属于 M」的证据。

module InnerSmall (M : S  hProp (ℓ-suc ))
                  (X : Type ) (e : X  (Σ[ x  S ] (x ∈ᶜ M)))
                  {ℓc} {K : Type ℓc}
                  (ι : K  Σ[ x  S ] (x ∈ᶜ M)) where

  SM : Type (ℓ-suc )

两个缩写固定记号。SM 命名限制载体本身;𝒮M 是限制到 M 的结构,由 _↾_ 构造:其载体是 SMh-集合性被继承,两个关系沿第一投影拉回,因此世界内部的相等与隶属由 V 的底层集合决定。语义模块在 𝒮M 处实例化,满足与词项求值记号以上标记号改名,标示公式是在世界内部读取的。该改名以 public 导出,其他章节可在这些名字下读取限制后的满足关系。

  SM = Σ[ x  S ] (x ∈ᶜ M)

  𝒮M : ZFStructure (ℓ-suc )
  𝒮M = 𝒮ᵥ  M

  module SemanticsM = FOL.Semantics 𝒮M
  open SemanticsM.At K ι renaming ( _⊨_ to _⊨ᵐ_ ; ⟦_⟧ to ⟦_⟧ᵐ ) public

定理的陈述刻意与 Δ₀-small 平行:对任意元数 n 的公式 φ 与任意限制元素环境 δ : SM ^ n,真值 δ ⊨ᵐ φ 是小的。这里看不到任何归纳见证,因为不需要:此处的归纳直接针对公式,载体的本质小性取代了 Δ₀ 限制。两个原子情形在世界内求值词项,得到限制元素,再对其第一投影应用原子小性引理:世界内的隶属 (fst xm) ∈ˢ (fst ym) 恰是环境结构的命题,其小性已知。

  ⊨ᵐ-small :  {n} (φ : Formula K n) (δ : SM ^ n)  isSmall (δ ⊨ᵐ φ)
  ⊨ᵐ-small (t ∈̇ u)  δ = small-∈ (fst ( t ⟧ᵐ δ)) (fst ( u ⟧ᵐ δ))
  ⊨ᵐ-small (t  u)  δ = small-≡ (fst ( t ⟧ᵐ δ)) (fst ( u ⟧ᵐ δ))
  ⊨ᵐ-small (φ ∧̇ ψ)  δ =
    small⊓ {P = δ ⊨ᵐ φ} {Q = δ ⊨ᵐ ψ} (⊨ᵐ-small φ δ) (⊨ᵐ-small ψ δ)

三个二元联结词与假的处理与之前完全相同:封闭引理 small⊓small⊔small⇒ 与常量 small⊥ 对所消费的命题是层级泛型的,因此对在世界内读取的真值原样适用。这正是先前把它们单独隔离的意义:那些证明没有提及 V 的任何特殊性,只涉及 hProp (ℓ-suc ℓ)

  ⊨ᵐ-small (φ ∨̇ ψ)  δ =
    small⊔ {P = δ ⊨ᵐ φ} {Q = δ ⊨ᵐ ψ} (⊨ᵐ-small φ δ) (⊨ᵐ-small ψ δ)
  ⊨ᵐ-small (φ ⇒̇ ψ)  δ =
    small⇒ {P = δ ⊨ᵐ φ} {Q = δ ⊨ᵐ ψ} (⊨ᵐ-small φ δ) (⊨ᵐ-small ψ δ)
  ⊨ᵐ-small ⊥̇        δ = small⊥

现在轮到量词,两个世界引理在此登场。无界存在量词 ∃̇ φ 的真值是限制载体上的 ∃[ xm ] (xm ∷ δ) ⊨ᵐ φ,归纳假设给出每个纤维 (xm ∷ δ) ⊨ᵐ φ 的小性。这恰是 small-∃ 的形状,A 取限制载体、e 取其小性等价,该情形由直接应用闭合。全称情形是 small-∀ 的镜像。注意量化确实是对限制世界进行的:SM 的元素是对子,因此扩展环境 xm ∷ δ 是以完整的限制元素扩展,体公式在这些元素处读取。

  ⊨ᵐ-small (∃̇ φ)    δ =
    small-∃ e {B = λ xm  (xm  δ) ⊨ᵐ φ}  xm  ⊨ᵐ-small φ (xm  δ))
  ⊨ᵐ-small (∀̇ φ)    δ =
    small-∀ e {B = λ xm  (xm  δ) ⊨ᵐ φ}  xm  ⊨ᵐ-small φ (xm  δ))
  ⊨ᵐ-small (∀̇∈ t φ) δ =

有界量词在每个情形中把两个小性来源合并。对 ∀̇∈ t φ,真值是限制载体上有界的蕴涵:∀[ xm ] (fst xm ∈ˢ ⟦ t ⟧ᵐ δ) ⇒ ((xm ∷ δ) ⊨ᵐ φ)。前件的小性来自原子引理,后件的小性来自归纳假设,small⇒ 组装蕴涵;整个陈述再经 small-∀ 沿 e 而小。有趣的细节是第一投影 fst xm:有界性是关于限制元素底层集合的陈述,因为世界的隶属关系本就是 V 的拉回。

    small-∀ e {B = λ xm  (fst xm ∈ˢ fst ( t ⟧ᵐ δ))  ((xm  δ) ⊨ᵐ φ)}  xm 
      small⇒ {P = fst xm ∈ˢ fst ( t ⟧ᵐ δ)} {Q = (xm  δ) ⊨ᵐ φ}
        (small-∈ (fst xm) (fst ( t ⟧ᵐ δ))) (⊨ᵐ-small φ (xm  δ)))
  ⊨ᵐ-small (∃̇∈ t φ) δ =
    small-∃ e {B = λ xm  (fst xm ∈ˢ fst ( t ⟧ᵐ δ))  ((xm  δ) ⊨ᵐ φ)}  xm 

存在有界情形是对偶的复合:真值是在截断 Σ 下把有界与体公式配对,small⊓ 组合两个小性见证,small-∃ 把整个陈述搬到小索引类型上。此情形完成归纳,本章的第二项主结果就此成立:在本质小的世界内,包括无界量词在内的每个公式都有小的真值。Δ₀ 小性由公式的形状承载,本质小性由量词的范围承载;无论哪种方式,一旦拿到小谓词,前一节的分离都照常适用。

      small⊓ {P = fst xm ∈ˢ fst ( t ⟧ᵐ δ)} {Q = (xm  δ) ⊨ᵐ φ}
        (small-∈ (fst xm) (fst ( t ⟧ᵐ δ))) (⊨ᵐ-small φ (xm  δ)))

小结

小性即与低一层命题的等价 (isSmall)。V 的原子隶属与相等经库的单射呈现压缩;四个联结词与两个常量经对应的低层运算传递小性见证;有界量词通过在集合的小索引类型上量化而压缩,其间用到嵌入的非截断纤维。适配器 separateFromSmall 把任何逐点小的谓词变成带有分离规格的集合。归纳 Δ₀-small 直接给出 Lévy 层级的 Δ₀ 档,separateΔ₀ 把它变成无需命题降级、无需任何经典公理或选择的 Δ₀ 分离。Δ₀ 之外的公式需要更多,模型章以命题降级的名义供给。最后一节引入了第二条路径:在载体本质小,即等价于 层某类型的世界里,每个公式求值皆小,这正是让可定义性步骤能以低宇宙谓词运作的原因。