The definable subsets

第四部即将开幕,其计划一句话讲完:在刚装配好的模型内部,构造仅凭一阶可定义性所能到达的子宇宙。本章锻造整个构造反复迭代的那一步:从集合 A 造出 Def A,即结构 (A, ∈) 中由带 A 中参数的公式可定义的 A 的全体子集之集。模型章称之为数学内容的那道「谓词与公式的落差」,在此变成一台机器:Def A 收集的恰是 A 的幂集的一阶影子。

两个设计点撑起本章。公式以 A 的小成员类型 ⟪ A ⟫ 为常量域,于是「参数来自 A」由类型强制。满足取内层语义,在限制结构 𝒮ᵥ ↾ (∈ A) 上:量词只跑 A 的成员,这正是教科书里「在 (A, ∈) 可定义」的含义,也让前几章的本质小性咬合发力:任何公式求值皆小,Def A 是集合,降层分文未花。

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

open import Base.Prelude
open import Base.Truth

module L.Definability { : Level} where

open import FOL.ZFStructure using ( ZFStructure; Transitive )
open import FOL.Syntax using ( Formula; var; con; _∈̇_; ⊤̇ )
open import FOL.LevyHierarchy using ( Δ₀ )
open import FOL.Manipulation.Relabelling using ( mapFo; mapΔ₀; ⊨-map )
import FOL.Absoluteness
open import V.Hierarchy {} using ( 𝒮ᵥ )
open import V.Smallness {} using ( module InnerSmall )

open import Cubical.Foundations.Equiv
  using ( _≃_; equivFun; invEq; invEquiv; compEquiv; propBiimpl→Equiv )
open import Cubical.Functions.Embedding using ( isEmbedding→Inj )
open import Cubical.Data.Sigma using ( Σ-cong-equiv-snd )
open import Cubical.Data.Unit using ( tt* )
open import Cubical.Functions.Logic using ( ⇔toPath )
import Cubical.HITs.PropositionalTruncation as PT
open PT using ( ∣_∣₁; ∥_∥₁ )
open import Cubical.HITs.CumulativeHierarchy.Base using ( sett )
open import Cubical.HITs.CumulativeHierarchy.Properties
  using ( _∈ₛ_; ∈∈ₛ; ⟪_⟫; ⟪_⟫↪; ∈ₛ⟪_⟫↪_; ∈-asFiber; presentation
        ; isEmb⟪_⟫↪; _⊆_; extensionality )

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

算子

以下一切都相对于一个集合 A,故本章在模块 DefOf A 中工作。限制类取「属于 A」,而本质小见证 e 就是库的 presentation:小成员类型 ⟪ A ⟫ 与限制载体等价 (小成员关系逐点换成大的即可)。常量解释 ι 把常量,即 ⟪ A ⟫ 的索引,送到限制载体的对应成员;其第一分量按定义就是该成员本身。

module DefOf (A : S) where

  M : S  hProp (ℓ-suc )
  M x = x ∈ˢ A

  e :  A   (Σ[ x  S ] (x ∈ᶜ M))
  e = compEquiv (invEquiv (presentation A))
        (Σ-cong-equiv-snd  v 
          propBiimpl→Equiv (snd (v ∈ₛ A)) (snd (v ∈ˢ A))
            (∈∈ₛ {a = v} {b = A} .snd) (∈∈ₛ {a = v} {b = A} .fst)))

  ι :  A   Σ[ x  S ] (x ∈ᶜ M)
  ι = equivFun e

  open InnerSmall M  A  e {K =  A } ι public

内层满足 ⊨ᵐ 与其小性就位后,算子自己写出了自己。smallSat φ mφ 在成员 m 处的真值,压低一层宇宙;defSet φφA 中刻出的子集,在 φ 选中的成员上做 settDef A 则是它们的全体,以公式自身为索引。公式是 Type ℓ 里的归纳数据,恰是合法的小索引:语法当索引集,全部戏法尽在于此。

  smallSat : Formula  A  1   A   hProp 
  smallSat φ m = ⊨ᵐ-small φ (ι m  []) .fst

  defSet : Formula  A  1  S
  defSet φ = sett (Σ[ m   A  ]  smallSat φ m )  p   A ⟫↪ (p .fst))

  Def : S
  Def = sett (Formula  A  1) defSet

隶属,给出规格

Def 与每个 defSet φ 都是 sett,故其隶属按定义就是「仅仅被索引族命中」。对 Def 这连证明都不必:Def 的成员仅仅就是某个 defSet φ。对可定义子集则有两条规格:其成员不出 A;而成员 ⟪ A ⟫↪ m 属于 defSet φ当且仅当内层世界在 m 处满足 φ,「可定义子集」这个词组在此被逐字兑现 (压缩 smallSat 只是编码,等价把它原样送回)。

  Def-spec : (x : S)
             x ∈ˢ Def    Σ[ φ  Formula  A  1 ] (defSet φ  x) ∥₁
  Def-spec x = refl

  defSet⊆A : (φ : Formula  A  1) (y : S)   y ∈ˢ defSet φ    y ∈ˢ A 
  defSet⊆A φ y = PT.rec (snd (y ∈ˢ A)) λ { ((m , _) , q) 
    subst  v   v ∈ˢ A ) q
          (∈∈ₛ {a =  A ⟫↪ m} {b = A} .snd (∈ₛ⟪ A ⟫↪ m)) }

  private
    ⟪⟫↪-inj : {m' m :  A }   A ⟫↪ m'   A ⟫↪ m  m'  m
    ⟪⟫↪-inj {m'} {m} = isEmbedding→Inj isEmb⟪ A ⟫↪ m' m

  defSet-mem : (φ : Formula  A  1) (m :  A )
              ( A ⟫↪ m ∈ˢ defSet φ)  ((ι m  []) ⊨ᵐ φ)
  defSet-mem φ m = ⇔toPath fwd bwd
    where
    decode = ⊨ᵐ-small φ (ι m  [])
    fwd :   A ⟫↪ m ∈ˢ defSet φ    (ι m  []) ⊨ᵐ φ 
    fwd = PT.rec (snd ((ι m  []) ⊨ᵐ φ)) λ { ((m' , h) , q) 
      invEq (decode .snd) (subst  k   smallSat φ k ) (⟪⟫↪-inj q) h) }
    bwd :  (ι m  []) ⊨ᵐ φ     A ⟫↪ m ∈ˢ defSet φ 
    bwd  =  (m , equivFun (decode .snd) ) , refl ∣₁

Def 只精化,不缩水

A 自身可定义:公式「真」选中所有人,于是 defSet ⊤̇ ≡ A,从而 A ∈ Def A。对偶地,Def A 的每个成员都是 A 的子集。所以 Def 坐落在 A 与幂集之间:整个 A 保留为元素,添入的只有子集。

  private
    A-mem : (y : S)   y ∈ˢ A   Σ[ m   A  ] ( A ⟫↪ m  y)
    A-mem y y∈ = ∈-asFiber {a = y} {b = A} y∈

  defSet⊤≡A : defSet ⊤̇  A
  defSet⊤≡A = extensionality (defSet ⊤̇) A (sub₁ , sub₂)
    where
    sub₁ :  defSet ⊤̇  A 
    sub₁ y y∈ₛ = ∈∈ₛ {a = y} {b = A} .fst
      (defSet⊆A ⊤̇ y (∈∈ₛ {a = y} {b = defSet ⊤̇} .snd y∈ₛ))
    sub₂ :  A  defSet ⊤̇ 
    sub₂ y y∈ₛ =
      let (m , q) = A-mem y (∈∈ₛ {a = y} {b = A} .snd y∈ₛ)
      in subst  v   v ∈ₛ defSet ⊤̇ ) q
           (∈∈ₛ {a =  A ⟫↪ m} {b = defSet ⊤̇} .fst
             (subst ⟨_⟩ (sym (defSet-mem ⊤̇ m)) tt*))

  A∈Def :  A ∈ˢ Def 
  A∈Def = subst  x   x ∈ˢ Def ) defSet⊤≡A  ⊤̇ , refl ∣₁

  Def∋⊆A : (x : S)   x ∈ˢ Def   (y : S)   y ∈ˢ x    y ∈ˢ A 
  Def∋⊆A x = PT.rec (isPropΠ λ y  isPropΠ λ _  snd (y ∈ˢ A))
     { (φ , q) y y∈x  defSet⊆A φ y (subst  s   y ∈ˢ s ) (sym q) y∈x) })

传递性之下,A ⊆ Def A

A 传递时,A 的每个成员 a 自身也可定义,用的正是模型章造交集的那记两符号招式:原子公式「该变量属于 a」。分离暗含的「∈ A」条款恰由传递性兑清:a 的成员已是 A 的成员,于是原子公式刻出的恰好是 a。故 A ⊆ Def A:这一步不丢任何人。与上一节合观,迭代 Def 只进不出,正是第四部那座塔需要的形状。

  module Refine (Atrans : Transitive 𝒮ᵥ M) where

    atom :  A   Formula  A  1
    atom mₐ = var zero ∈̇ con mₐ

    atom-mem : (mₐ m :  A )
              ( A ⟫↪ m ∈ˢ defSet (atom mₐ))  ( A ⟫↪ m ∈ˢ  A ⟫↪ mₐ)
    atom-mem mₐ m = defSet-mem (atom mₐ) m

    defSet-atom≡ : (mₐ :  A )  defSet (atom mₐ)   A ⟫↪ mₐ
    defSet-atom≡ mₐ = extensionality (defSet (atom mₐ)) ( A ⟫↪ mₐ) (sub₁ , sub₂)
      where
      sub₁ :  defSet (atom mₐ)   A ⟫↪ mₐ 
      sub₁ y y∈ₛ = PT.rec (snd (y ∈ₛ  A ⟫↪ mₐ))
         { ((m , h) , q) 
          subst  v   v ∈ₛ  A ⟫↪ mₐ ) q
            (∈∈ₛ {a =  A ⟫↪ m} {b =  A ⟫↪ mₐ} .fst
              (subst ⟨_⟩ (atom-mem mₐ m)  (m , h) , refl ∣₁)) })
        (∈∈ₛ {a = y} {b = defSet (atom mₐ)} .snd y∈ₛ)
      sub₂ :   A ⟫↪ mₐ  defSet (atom mₐ) 
      sub₂ y y∈ₛ =
        let y∈a     = ∈∈ₛ {a = y} {b =  A ⟫↪ mₐ} .snd y∈ₛ
            y∈A     = Atrans {x =  A ⟫↪ mₐ} {y = y} y∈a mₐ-as
            (m , q) = ∈-asFiber {a = y} {b = A} y∈A
        in subst  v   v ∈ₛ defSet (atom mₐ) ) q
             (∈∈ₛ {a =  A ⟫↪ m} {b = defSet (atom mₐ)} .fst
               (subst ⟨_⟩ (sym (atom-mem mₐ m))
                 (subst  v   v ∈ˢ  A ⟫↪ mₐ ) (sym q) y∈a)))
        where
        mₐ-as :   A ⟫↪ mₐ ∈ˢ A 
        mₐ-as = ∈∈ₛ {a =  A ⟫↪ mₐ} {b = A} .snd (∈ₛ⟪ A ⟫↪ mₐ)

    A⊆Def : (a : S)   a ∈ˢ A    a ∈ˢ Def 
    A⊆Def a a∈ =
      let (mₐ , q) = ∈-asFiber {a = a} {b = A} a∈
      in  atom mₐ , defSet-atom≡ mₐ  q ∣₁

从外部读可定义性

有一条推论值得单独命名,因为第四部要反复倚重它。属于 defSet φ内层世界 (A, ∈) 的陈述,而接下来的论证都在环境层级中进行。对 Δ₀ 公式,两种读法一致,那就是绝对性定理;余下的是记账,因为绝对性对类的成员陈述,而 defSet 对小索引类型陈述。重标填平这道缝,整个证明是一条三步路径:defSet 的规格、公式的重标、然后绝对性。

这需要 A 传递,故本引理住在这个子模块里;塔的每个阶段都传递。

    module Abs = FOL.Absoluteness.Single 𝒮ᵥ M Atrans

    abs-defSet : (φ : Formula  A  1)  Δ₀ φ  (m :  A )
                ( A ⟫↪ m ∈ˢ defSet φ)
                  (( A ⟫↪ m  []) Abs.⊨ᵛ (mapFo ι φ))
    abs-defSet φ d m =
        defSet-mem φ m
       sym (⊨-map (hPropAlgebra (ℓ-suc )) Abs.𝒮M ι id φ (ι m  []))
       Abs.abs₀ (mapΔ₀ ι d) (ι m  [])

小结

Def A 是内层世界 (A, ∈) 中带 A 中参数可定义的 A 的子集之集:语法当索引集,内层满足给含义,本质小性付清宇宙账单。隶属按定义成立 (Def-spec),规格 defSet-mem 把「可定义」逐字兑现,而算子只精化:A ∈ Def A 恒成立 (A∈Def),传递性下 A ⊆ Def A (A⊆Def),且 Def A 的成员不出 A 的子集 (Def∋⊆A)。下一章把这一步迭代成一个宇宙。