Lévy 层级

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

阅读指南 · 依赖地图

一阶公式有两种量化方式:有界的,如「对所有 $x$ 属于 $t$」;以及在整个宇宙上取量的无界量化。Lévy 层级按无界量词衡量公式的语法复杂度:Δ₀ 公式只用有界量词,Σ₁ 公式在 Δ₀ 核心之前加一段无界存在量词,Π₁ 公式则加一段无界全称量词。这些类的归属之所以重要,是因为后面的章节要证明 Δ₀ 绝对性,并在可构造宇宙上按量词形状做结构归纳的可定义性论证。与其反复去检查公式,本章干脆把分类本身做成数据:见证是以公式为下标的归纳数据,对任意常元域 K 都可用,于是一个公式可以在语法之外同时携带其复杂度类的证明。本章构造 Δ₀ 见证、一个识别有界公式的布尔检查器,以及推广到每个有限层级 Σₙ/Πₙ 的分类。

本章依赖一条从计算到证明的桥梁。类型 Booltruefalse 两个值,_and_ 合取两个布尔结果。运算 Bool→Type 把布尔值送到一个类型:true 对应单点类型,false 对应空类型。于是 Bool→Type b 有元素当且仅当 btrue。这正是让计算结果日后能兼作证明义务的机制:程序可以先对语法作出布尔判定,而「答案为 true」这个断言本身就是一个可以有元素的类型。

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

module FOL.LevyHierarchy where

open import Base.Prelude
open import Cubical.Data.Bool using ( Bool; true; false; _and_; Bool→Type )

被分类的公式来自 FOL.Syntax 的对象语言:词项、原子关系 _∈̇__≐_、联结词,以及两对不同的量词形式。有界量词 ∀̇∈∃̇∈ 把界限写成语言中的词项,而 ∀̇_∃̇_ 则不带界限地量化。两种量词在语法上分离,正是整个分类得以进行的前提:下面定义的每个族都以 Formula K n 为下标,所以这里的Lévy 层级是语法本身的谓词,而不是语义值的谓词。

open import Cubical.Data.Unit using ( tt )
open import FOL.Syntax using
  ( Term; Formula; _∈̇_; _≐_; _∧̇_; _∨̇_; _⇒̇_; ¬̇_; ⊤̇; ⊥̇; ∃̇_; ∀̇_; ∀̇∈; ∃̇∈ )

Δ₀ 见证

Δ₀ 是以公式为下标的归纳族:Δ₀ φ 的一个元素就是一份显式数据的见证,证明 φ 中出现的每个量词都有界。定义对每个获准的公式形状给一个构造子,而不给 ∃̇∀̇ 任何构造子缺席即分类。该族除在某个宇宙层级 ℓc 上以常元域 K 为参数外,只由语法决定,所以同一见证类型对任意常元域都可用。

Δ₀ 族的指引性不变量是:有界量词保持有界性,无界量词破坏它。声明把它实现为以每个元数 n 的公式为下标的归纳族 Δ₀,与 K 同处一个宇宙层级,故见证是小数据。像 t ∈̇ u 这样的原子公式被直接接受:它根本不含量词,所以 δ-∈ (以及等式的同伴 δ-≐) 不带参数。该类随后对二元联结词封闭,δ-∧δ-∨ 各自要求复合公式两个成分都有见证。

data Δ₀ {ℓc} {K : Type ℓc} :  {n}  Formula K n  Type ℓc where
  δ-∈  :  {n} {t u : Term K n}  Δ₀ (t ∈̇ u)
  δ-≐  :  {n} {t u : Term K n}  Δ₀ (t  u)
  δ-∧  :  {n} {φ ψ : Formula K n}  Δ₀ φ  Δ₀ ψ  Δ₀ (φ ∧̇ ψ)
  δ-∨  :  {n} {φ ψ : Formula K n}  Δ₀ φ  Δ₀ ψ  Δ₀ (φ ∨̇ ψ)

蕴涵 δ-⇒ 与不带量词的伪式 δ-⊥ 补齐了无量词的形状。决定性的行是有界量词:δ-∀∈δ-∃∈ 取元数 suc n 的体 φ 的见证,返回 ∀̇∈ t φ∃̇∈ t φ 的见证,其界限是词项 t。于是有界性原封不动地穿过有界量词。同样决定性的是清单所省略者:没有任何构造子提到无界的 ∃̇∀̇。像 ∃̇ (x₀ ∈̇ x₁) 这样含无界量词的公式不落入任何构造子,所以在该下标处根本拼不出 Δ₀ 的元素。这种拒绝本身就是分类,而不是关于分类的定理。

  δ-⇒  :  {n} {φ ψ : Formula K n}  Δ₀ φ  Δ₀ ψ  Δ₀ (φ ⇒̇ ψ)
  δ-⊥  :  {n}  Δ₀ {n = n} ⊥̇
  δ-∀∈ :  {n} {t : Term K n} {φ : Formula K (suc n)}  Δ₀ φ  Δ₀ (∀̇∈ t φ)
  δ-∃∈ :  {n} {t : Term K n} {φ : Formula K (suc n)}  Δ₀ φ  Δ₀ (∃̇∈ t φ)

δ-¬ :  {ℓc} {K : Type ℓc} {n} {φ : Formula K n}  Δ₀ φ  Δ₀ (¬̇ φ)

否定与真无需特殊处理,因为它们不是原始的:在这套语法中,¬̇ φ 定义为 φ ⇒̇ ⊥̇⊤̇ 定义为 ⊥̇ ⇒̇ ⊥̇。既然蕴涵与伪式已有见证,被定义公式的有界性便由 δ-⇒ 构造子推出。派生见证 δ-¬ d 把见证 dδ-⊥ 打包,δ-⊤ 则把 δ-⊥ 放在蕴涵两端。它们是关于既有族的引理而非新构造子,使后面的代码无需新的分情形即可证明否定式与平凡式。

δ-¬ d = δ-⇒ d δ-⊥

δ-⊤ :  {ℓc} {K : Type ℓc} {n}  Δ₀ {K = K} {n = n} ⊤̇
δ-⊤ = δ-⇒ δ-⊥ δ-⊥

检查具体公式

逐条对照构造子清单去读一个公式并无必要:函数 bounded 遍历语法,恰在未遇到无界量词时返回 truecheckΔ₀ 再把「这个布尔值为 true」这一断言转成真正的 Δ₀ 见证。已证明的方向是单向的:布尔成功给出见证。这里并未声称该定义是反方向的判定过程,也没有证明任何完备性结果。

一旦不变量可以机械地检查,手工构造 Δ₀ 见证就不必要了。函数 bounded 遍历公式并报告一个 Bool:原子公式与伪式直接报告 true,每个二元联结词则用 _and_ 合取两个子公式的结果。此阶段的检查只是逐个公式构造子地镜像 Δ₀ 所接受的形状。

bounded :  {ℓc} {K : Type ℓc} {n}  Formula K n  Bool
bounded (t ∈̇ u) = true
bounded (t  u) = true
bounded (φ ∧̇ ψ) = bounded φ and bounded ψ
bounded (φ ∨̇ ψ) = bounded φ and bounded ψ

不变量在这里真正发挥作用。两个无界量词都返回 false,所以公式中任何一处出现无界量词,无论子公式如何,整个检查即告失败。有界量词则相反:递归直接进入体公式,因为界限 t 是语法中的词项,藏不住量词。规则 bounded (∀̇∈ t φ) = bounded φ 正是那条允许有界性穿过的 Δ₀ 构造子的计算对应物。

bounded (φ ⇒̇ ψ) = bounded φ and bounded ψ
bounded ⊥̇ = true
bounded (∃̇ φ) = false
bounded (∀̇ φ) = false
bounded (∀̇∈ t φ) = bounded φ

合取处的布尔值 true 意味着两件事,私有辅助函数 and-out 把它拆开。给定 a b : BoolBool→Type (a and b) 的一个元素,它返回一对元素,分别属于 Bool→Type aBool→Type b。当 afalse 时,输入将不得不落入空类型 Bool→Type false,所以该情形由荒谬模式 () 直接打发。当 atrue 时,单位元 tt 证明第一个合取支,而给定的 h 本身就是第二个。

bounded (∃̇∈ t φ) = bounded φ

private
  and-out : (a b : Bool)  Bool→Type (a and b)  Bool→Type a × Bool→Type b
  and-out false b ()
  and-out true b h = tt , h

函数 checkΔ₀ 正是布尔判定变成证据之处。它取公式 φBool→Type (bounded φ) 的一个元素,后者只有在遍历算出 true 时才可能存在,并产出真正的 Δ₀ φ 见证。原子情形直接返回相应构造子,前提 h 用不上。合取情形中,bounded (φ ∧̇ ψ) 计算为 bounded φ and bounded ψ,于是 and-outh 拆成两个逐支证明 p .fstp .snd,递归调用给出子见证,再由 δ-∧ 重组。

checkΔ₀ :  {ℓc} {K : Type ℓc} {n} (φ : Formula K n)  Bool→Type (bounded φ)  Δ₀ φ
checkΔ₀ (t ∈̇ u) h = δ-∈
checkΔ₀ (t  u) h = δ-≐
checkΔ₀ (φ ∧̇ ψ) h = δ-∧ (checkΔ₀ φ (p .fst)) (checkΔ₀ ψ (p .snd))
  where p = and-out (bounded φ) (bounded ψ) h

析取与蕴涵重复同一动作:各自用 and-out 拆开 h,运行两次递归调用,再以 δ-∨δ-⇒ 重组。伪式只需 δ-⊥。有了这些子句,Δ₀ 接受的每个无量词形状都有了从布尔结果到见证的路径

checkΔ₀ (φ ∨̇ ψ) h = δ-∨ (checkΔ₀ φ (p .fst)) (checkΔ₀ ψ (p .snd))
  where p = and-out (bounded φ) (bounded ψ) h
checkΔ₀ (φ ⇒̇ ψ) h = δ-⇒ (checkΔ₀ φ (p .fst)) (checkΔ₀ ψ (p .snd))
  where p = and-out (bounded φ) (bounded ψ) h
checkΔ₀ ⊥̇ h = δ-⊥

余下的子句收束论证。对无界量词,bounded (∃̇ φ)bounded (∀̇ φ) 都计算为 false,于是前提 h 将不得不落入空类型 Bool→Type false;荒谬模式 () 之所以能接受该情形,正因为这样的元素不存在。对有界量词,bounded (∀̇∈ t φ) 计算为 bounded φ,于是 h 原样传给体公式,递归结果用 δ-∀∈δ-∃∈ 包住。合起来,这些子句对每个公式确立 bounded φ ≡ true → Δ₀ φ:计算上的成功给出证据。词项 tu 从不影响结果,而相反方向在这里任何地方都未被声称。

checkΔ₀ (∃̇ φ) ()
checkΔ₀ (∀̇ φ) ()
checkΔ₀ (∀̇∈ t φ) h = δ-∀∈ (checkΔ₀ φ h)
checkΔ₀ (∃̇∈ t φ) h = δ-∃∈ (checkΔ₀ φ h)

Σ₁ 与 Π₁

公式既然可以无界量化,下一个自然的问题是:公式可以含多少个无界量词、是哪种。Σ₁ 与 Π₁ 恰好对一段量词作出回答:Σ₁ 见证要么是 Δ₀ 见证,要么是对某个 Σ₁ 见证 (其体公式) 再多施加一个无界存在量词。因此 Σ₁ 见证构成一个套在自己之上的类型,记录 Δ₀ 核心之上任意有限段存在量词;Π₁ 则是同一构造、极性翻转。两类都不允许两种量词交替,且每个约束词消耗元数 suc n 的体、产出元数 n 的公式。这里的两族是独立定义的;下一节把同一想法重组成按层级下标的统一层级。

这种嵌套在 Σ₁ 的两个构造子中清晰可见。基座 σ-Δ₀ 原样嵌入任何 Δ₀ 见证,于是每个有界公式都算 Σ₁,不带额外量词。台阶 σ-∃ 前置一个无界存在量词:从元数 suc n 的体的 Σ₁ 见证构造出 ∃̇ φ 的见证。反复使用 σ-∃ 便得到有限段存在量词,而这一段必须终于 σ-Δ₀ 核心;途中没有办法引入全称量词。

data Σ₁ {ℓc} {K : Type ℓc} :  {n}  Formula K n  Type ℓc where
  σ-Δ₀ :  {n} {φ : Formula K n}  Δ₀ φ  Σ₁ φ
  σ-∃  :  {n} {φ : Formula K (suc n)}  Σ₁ φ  Σ₁ (∃̇ φ)

Π₁ 是其镜像:π-Δ₀ 共享同一个 Δ₀ 基座,π-∀ 前置一个无界全称量词,同样取自元数 suc n 的体。两族由同一嵌套模式构成,只是量词极性相反,而这一极性之差正是后面绝对性论证要从见证中读出的东西。

data Π₁ {ℓc} {K : Type ℓc} :  {n}  Formula K n  Type ℓc where
  π-Δ₀ :  {n} {φ : Formula K n}  Δ₀ φ  Π₁ φ
  π-∀  :  {n} {φ : Formula K (suc n)}  Π₁ φ  Π₁ (∀̇ φ)

一般层级

一段固定的无界量词只是第一级。一般Lévy 层级按无界量词极性交替的次数为公式分级,本章用两个互定义的归纳族 ΣₙΠₙ 来编码这种分级,各带自然数层级 k。下标 k 是由见证自身提供的一个界:层级 k 的见证至多可用 k 次交替,但不必恰好用 k 次,因为 Δ₀ 公式在每个层级都有嵌入。隐含的 n 仍是公式的元数,是另一回事,不可与 k 混淆。每个族在固定层级上对自己那种无界量词封闭,而 σ-Ππ-Σ 则是跨越两族、抬升下标的两个交替步骤。

两族必须互相引用,因为交替恰恰就是换族,所以它们在一个 mutual 块中声明。Σₙ 在公式下标之前带上层级下标 k。基座 σ-Δ₀ 允许 Δ₀ 公式处于任何层级 k,这正是层级记录上界而非确切次数的原因。交替台阶 σ-ΠΠₙ k 的见证提升为 Σₙ (suc k),为跨越极性付出一级层。最后,σ-∃ 在同一层级 suc k 上用多一个存在量词扩展见证,体的元数 suc n 缩回到 n

mutual
  data Σₙ {ℓc} {K : Type ℓc} :    {n}  Formula K n  Type ℓc where
    σ-Δ₀ :  {k n} {φ : Formula K n}  Δ₀ φ  Σₙ k φ
    σ-Π  :  {k n} {φ : Formula K n}  Πₙ k φ  Σₙ (suc k) φ
    σ-∃  :  {k n} {φ : Formula K (suc n)}  Σₙ (suc k) φ  Σₙ (suc k) (∃̇ φ)

Πₙ 在同一互定义块中以对偶形状声明:π-Δ₀ 在每个层级嵌入 Δ₀,π-ΣΣₙ k 的见证提升为 Πₙ (suc k)π-∀ 使层级 suc k 对无界全称量词封闭。两族合起来记录了核心按层级所允许的次数交替的有限量词段。上一节独立定义的 Σ₁/Π₁ 两族在形状上对应 Σₙ 1Πₙ 1,即 suc zero:零层级只有 Δ₀ 构造子可用,而量词构造子都要求 suc k

  data Πₙ {ℓc} {K : Type ℓc} :    {n}  Formula K n  Type ℓc where
    π-Δ₀ :  {k n} {φ : Formula K n}  Δ₀ φ  Πₙ k φ
    π-Σ  :  {k n} {φ : Formula K n}  Σₙ k φ  Πₙ (suc k) φ
    π-∀  :  {k n} {φ : Formula K (suc n)}  Πₙ (suc k) φ  Πₙ (suc k) (∀̇ φ)

小结

Lévy 层级现在由归纳见证表示。Δ₀ 见证从构造上排除无界量词;Σ₁ 与 Π₁ 各加入一段有限的单一极性量词;互定义的 Σₙ 与 Πₙ 族则把更高的交替层级同公式元数分开控制。每个见证都显露获准的外层形状,因此后续归纳论证可以分别处理有界、存在与全称情形。