Smallness

上一章以一句宇宙警告收尾:V ℓ 是由小索引数据造出的大类型,其真值住在高一层的 hProp (ℓ-suc ℓ)。这句警告的分量在于:库提供的每一件造集装置,头一件就是 sett,都只收输入:小索引类型、小谓词。要想用一条性质造出集合,先得把这条性质的真值降下一个宇宙。本章打造的正是这套工具,而它的回报是本部第一条值得裱起来的定理:Δ₀ 公式的分离不花任何公理。

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

open import Base.Prelude
open import Base.Truth

module V.Smallness { : Level} where

open import Base.Impredicativity using ( isSmall )
open import FOL.ZFStructure using ( ZFStructure; _↾_ )
open import FOL.Syntax
  using ( Formula; _∈̇_; _≐_; _∧̇_; _∨̇_; _⇒̇_; ¬̇_; ⊤̇; ⊥̇; ∃̇_; ∀̇_; ∀̇∈; ∃̇∈ )
open import FOL.LevyHierarchy
  using ( Δ₀; δ-∈; δ-≐; δ-∧; δ-∨; δ-⇒; δ-¬; δ-⊤; δ-⊥; δ-∀∈; δ-∃∈ )
import FOL.Semantics
open import V.Hierarchy {} using ( 𝒮ᵥ )

open import Cubical.Foundations.Equiv
  using ( _≃_; equivFun; invEq; invEquiv; secEq; propBiimpl→Equiv )
import Cubical.Functions.Logic as Logic
open import Cubical.Functions.Logic using ( ⇔toPath )
import Cubical.Data.Sum as Sum
open import Cubical.Data.Unit using ( tt* )
import Cubical.HITs.PropositionalTruncation as PT
open import Cubical.HITs.CumulativeHierarchy.Properties
  using ( _∼_; identityPrinciple; _∈ₛ_; ∈∈ₛ; ⟪_⟫; ⟪_⟫↪; ∈ₛ⟪_⟫↪_; ∈-asFiber )
open import Cubical.HITs.CumulativeHierarchy.Constructions
  using ( module SeparationSet )

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

何谓小

高一层的命题是小的,指它与某个低一层的命题等价:这个定义 (isSmall) 铸于第零部,在那里,降层接口把它一揽子断言于每个命题。本章不作这种假设。它逐原子地挣得实例,而整章无非是把挣来的见证传来传去的一套体操。

原子的小性直接来自库。这就是上一章瞥见过的局部小性装置:成员关系有小孪生 ∈ₛ (∈∈ₛ 双向换形),集合相等经 identityPrinciple 压缩为双相似

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)
small-≡ a b = (a  b) , invEquiv identityPrinciple

联结词保小

六个命题运算逐个传递小性见证,每条证明都是双蕴含的机械搬运。(限定名 Logic 是库在一层的联结词,即压缩的落点。)

small⊓ : {P Q : hProp (ℓ-suc )}  isSmall P  isSmall Q  isSmall (P  Q)
small⊓ {P} {Q} (P' , eP) (Q' , eQ) = (P' Logic.⊓ Q') ,
  propBiimpl→Equiv (snd (P  Q)) (snd (P' Logic.⊓ Q'))
     pq  equivFun eP (pq .fst) , equivFun eQ (pq .snd))
     pq  invEq eP (pq .fst) , invEq eQ (pq .snd))

small⊔ : {P Q : hProp (ℓ-suc )}  isSmall P  isSmall Q  isSmall (P  Q)
small⊔ {P} {Q} (P' , eP) (Q' , eQ) = (P' Logic.⊔ Q') ,
  propBiimpl→Equiv (snd (P  Q)) (snd (P' Logic.⊔ Q'))
    (PT.map (Sum.map (equivFun eP) (equivFun eQ)))
    (PT.map (Sum.map (invEq eP) (invEq eQ)))

small⇒ : {P Q : hProp (ℓ-suc )}  isSmall P  isSmall Q  isSmall (P  Q)
small⇒ {P} {Q} (P' , eP) (Q' , eQ) = (P' Logic.⇒ Q') ,
  propBiimpl→Equiv (snd (P  Q)) (snd (P' Logic.⇒ Q'))
     f p'  equivFun eQ (f (invEq eP p')))
     g p  invEq eQ (g (equivFun eP p)))

small¬ : {P : hProp (ℓ-suc )}  isSmall P  isSmall (¬ P)
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 
small⊤ = Logic.⊤ ,
  propBiimpl→Equiv ( .snd) (snd (Logic.⊤ {}))
     _  tt*)  _  tt*)

small⊥ : isSmall 
small⊥ = (⊥* , isProp⊥*) ,
  propBiimpl→Equiv isProp⊥* isProp⊥*  ())  ())

有界量词保小

承重的一步到了,语法章最古老的那句许诺,在此以宇宙为通货兑付。范围取全 V ℓ 的量词量化在大类型上,没有任何理由是小的。而以集合 a 为界的量词可以改在库的小成员类型 ⟪ a ⟫ 上量化,即 a 的族的索引类型,小性就此存活。往返两趟走 ∈-asFiber,其纤维不加截断,因为 ⟪ a ⟫↪ 是嵌入:从「a 的成员」回到「⟪ a ⟫ 的索引」是函数,不是选择。

small-∀∈ : (a : S) {B : S  hProp (ℓ-suc )}
          (∀ x  isSmall (B x))
          isSmall ( S  x  (x ∈ˢ a)  B x))
small-∀∈ a {B} sm = Qsm , propBiimpl→Equiv (snd big) (snd Qsm) fwd bwd
  where
  big =  S  x  (x ∈ˢ a)  B x)
  Qsm = Logic.∀[]-syntax  (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)))
  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

small-∃∈ : (a : S) {B : S  hProp (ℓ-suc )}
          (∀ x  isSmall (B x))
          isSmall ( S  x  (x ∈ˢ a)  B x))
small-∃∈ a {B} sm = Qsm , propBiimpl→Equiv (snd big) (snd Qsm) fwd bwd
  where
  big =  S  x  (x ∈ˢ a)  B x)
  Qsm = Logic.∃[]-syntax  (m :  a )  sm ( a ⟫↪ m) .fst)
  fwd :  big    Qsm 
  fwd = PT.map λ where
    (x , x∈a , bx) 
      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 
  bwd = PT.map λ where
    (m , q)   a ⟫↪ m , ∈∈ₛ {a =  a ⟫↪ m} {b = a} .snd (∈ₛ⟪ a ⟫↪ m)
            , invEq (sm ( a ⟫↪ m) .snd) q

分离的水管

小性买到的东西:逐点小的谓词可以分离。库的 SeparationSet 只收小谓词,小性见证恰好是入场券;规格以模型 record 的字段形状交还。本部往后的每一次分离,无论小性由谁买单,都流经这一根水管。

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
  ϕₛ : 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)
            , 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)))

Δ₀ 公式求值小

Δ₀ 见证开始挣第二份薪水。对 Δ₀ 见证做一次归纳,即知带见证的公式在任何环境下的真值都小:两个原子情形是库压缩,八个联结词情形是封闭性引理,两个有界量词情形消费 small-∀∈small-∃∈没有无界量词的情形,因为见证压根没有那两个构造子:缺席即分类。这是压在 Δ₀ 见证上的第二条承重归纳 (第一条是绝对性),也是 Lévy 层级兼任成本账簿的原因:Δ₀ 意谓免费,在宇宙层级的精确意义上。

module SemanticsV = FOL.Semantics (hPropAlgebra (ℓ-suc )) 𝒮ᵥ
open SemanticsV using ( _^_ )

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

  open SemanticsV.At K ι

  Δ₀-small :  {n} {φ : Formula K n}  Δ₀ φ  (γ : S ^ n)  isSmall (γ  φ)
  Δ₀-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⊔ {P = γ  φ} {Q = γ  ψ} (Δ₀-small c γ) (Δ₀-small d γ)
  Δ₀-small (δ-⇒ {φ = φ} {ψ} c d) γ =
    small⇒ {P = γ  φ} {Q = γ  ψ} (Δ₀-small c γ) (Δ₀-small d γ)
  Δ₀-small (δ-¬ {φ = φ} c) γ = small¬ {P = γ  φ} (Δ₀-small c γ)
  Δ₀-small δ-⊤ γ = small⊤
  Δ₀-small δ-⊥ γ = small⊥
  Δ₀-small (δ-∀∈ {t = t} {φ = φ} c) γ =
    small-∀∈ ( t  γ) {B = λ x  (x  γ)  φ}  x  Δ₀-small c (x  γ))
  Δ₀-small (δ-∃∈ {t = t} {φ = φ} c) γ =
    small-∃∈ ( t  γ) {B = λ x  (x  γ)  φ}  x  Δ₀-small c (x  γ))

定理:Δ₀ 分离免费

把这条归纳与那根水管在典范常量解释处一复合,招牌定理应声落地:携带 Δ₀ 见证的公式,其分离不需任何降层、不花任何公理,一路 --safe。模型章仍欠分离,但这条定理是一个贯穿主题的第一份硬证据:Δ₀ 见证是可携资产,随身携带自有回报。

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 ℓ 的量词;此处的范围是限制结构 𝒮ᵥ ↾ M 的载体,小性恰是「限制」二字买来的。

small-⋀ : {A : Type (ℓ-suc )} {X : Type } (e : X  A) {B : A  hProp (ℓ-suc )}
         (∀ a  isSmall (B a))
         isSmall ( A B)
small-⋀ {A} {X} e {B} sm = Qsm , propBiimpl→Equiv (snd big) (snd Qsm) fwd bwd
  where
  big =  A B
  Qsm = Logic.∀[]-syntax  (m : X)  sm (equivFun e m) .fst)
  fwd :  big    Qsm 
  fwd f m = equivFun (sm (equivFun e m) .snd) (f (equivFun e m))
  bwd :  Qsm    big 
  bwd g a = subst  v   B v ) (secEq e a)
                  (invEq (sm (equivFun e (invEq e a)) .snd) (g (invEq e a)))

small-⋁ : {A : Type (ℓ-suc )} {X : Type } (e : X  A) {B : A  hProp (ℓ-suc )}
         (∀ a  isSmall (B a))
         isSmall ( A B)
small-⋁ {A} {X} e {B} sm = Qsm , propBiimpl→Equiv (snd big) (snd Qsm) fwd bwd
  where
  big =  A B
  Qsm = Logic.∃[]-syntax  (m : X)  sm (equivFun e m) .fst)
  fwd :  big    Qsm 
  fwd = PT.map λ where
    (a , ba)  invEq e a ,
               equivFun (sm (equivFun e (invEq e a)) .snd)
                        (subst  v   B v ) (sym (secEq e a)) ba)
  bwd :  Qsm    big 
  bwd = PT.map λ where
    (m , q)  equivFun e m , invEq (sm (equivFun e m) .snd) q

后果是:在本质小的限制结构上,任何公式求值皆小,无需 Δ₀ 见证。量词子句沿等价行走,原子经第一投影落回 V 的原子小性。这就是「在小世界里说话,说什么都小」,也是第四部那一步构造的发动机。

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 = Σ[ x  S ] (x ∈ᶜ M)

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

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

  ⊨ᵐ-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⊔ {P = δ ⊨ᵐ φ} {Q = δ ⊨ᵐ ψ} (⊨ᵐ-small φ δ) (⊨ᵐ-small ψ δ)
  ⊨ᵐ-small (φ ⇒̇ ψ)  δ =
    small⇒ {P = δ ⊨ᵐ φ} {Q = δ ⊨ᵐ ψ} (⊨ᵐ-small φ δ) (⊨ᵐ-small ψ δ)
  ⊨ᵐ-small (¬̇ φ)    δ = small¬ {P = δ ⊨ᵐ φ} (⊨ᵐ-small φ δ)
  ⊨ᵐ-small ⊤̇        δ = small⊤
  ⊨ᵐ-small ⊥̇        δ = small⊥
  ⊨ᵐ-small (∃̇ φ)    δ =
    small-⋁ e {B = λ xm  (xm  δ) ⊨ᵐ φ}  xm  ⊨ᵐ-small φ (xm  δ))
  ⊨ᵐ-small (∀̇ φ)    δ =
    small-⋀ e {B = λ xm  (xm  δ) ⊨ᵐ φ}  xm  ⊨ᵐ-small φ (xm  δ))
  ⊨ᵐ-small (∀̇∈ t φ) δ =
    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⊓ {P = fst xm ∈ˢ fst ( t ⟧ᵐ δ)} {Q = (xm  δ) ⊨ᵐ φ}
        (small-∈ (fst xm) (fst ( t ⟧ᵐ δ))) (⊨ᵐ-small φ (xm  δ)))

小结

小性即与低一层命题的等价 (isSmall);原子经库压缩,联结词与有界量词传递小性见证,separateFromSmall 是从小谓词到集合的唯一水管。归纳 Δ₀-small 让 Lévy 层级兼任成本账簿,separateΔ₀ 是其中的免费档。Δ₀ 够不到的部分在模型章标价,而那个价格有名字:降层。