可构造层内的最小见证映射

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

阅读指南 · 依赖地图

设对每个输入 x ∈ X,我们只在命题截断下知道存在某个 w ∈ Lset γ 满足 P(w,x)。这种逐点存在还不能给出 L 内的函数图,因为必须有同一条公式确定唯一取值。本章利用固定层的典范严格良序,选取其中最小的满足候选,再以公式表达这一选取,并把图收集为 L 的集合。这里的最小元只相对于这个层与这条序,而 P 本身可以有许多见证。

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

经典逻辑经由固定的排中律假设进入,而层上的典范序本身已经依赖这一假设。在实际搜索最小元时,它承担一个明确职责:沿良基序下降的每一步,判定是否仅仅存在一个更小且满足谓词的层成员。命题截断只在「最小见证的总类型」已经证明为命题之后消去到该类型;这并不提供从任意命题截断中抽取见证的一般方法。

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

固定宇宙层级 ,并假设层级 ℓ-suc ℓ 上命题的排中律。下文选出的每个见证和构造的每个图,都相对于这一条假设以及稍后固定的层序。

module L.GCH.LeastWitnessMap { : Level} (lem : LEM (ℓ-suc )) where

所需的图必须用集合论的一阶对象语言表达。除了断言 P(w,x) 成立,其公式还须断言 w 位于选定层中,并且该层中没有更小的成员也满足 P。后一个条件由有界全称量词表达;把更小候选插入环境后,改名使原二元公式仍保持原义。

open import FOL.ZFStructure using ( module hPropStructure )
open import FOL.Syntax using ( Formula; var; con; _∈̇_; _∧̇_; ¬̇_; ∀̇∈ )
open import FOL.Manipulation.Renaming using ( renameFo; module Sat )
import FOL.Absoluteness
open import V.Hierarchy {} using ( 𝒮ᵥ )

这里需要层序的两种读法。宿主层的严格良序支持最小元搜索;由编码有序对构成的可构造集合 则让同一比较能出现在对象语言的图公式中。表示引理在两种读法之间转换,但二者并非按定义相同。

open import V.Coding {} using ( pr )
open import L.Constructible {} using ( 𝒮ʟ; isL; isL-trans; IsOrd; Lset; Lset→isL )
open import L.Axioms.Basic {} using ( LsetS )
open import L.Choice.StageOrders {} lem using ( orderAt; relOf ) renaming ( Mem to MemOf )
open import L.Choice.InternalWellOrder {} lem using ( relL; relL-fill; relL-rep )

严格良序同时提供最小元操作与三歧性。前者从仅仅非空的候选族中选出一个值;后者证明,任何两个满足完整最小性规格的候选必然重合。把这一规格写成公式后,替换把所得的输入值对收集为 L 的集合。

open import L.WellOrder.Base {ℓₚ = ℓ-suc }
  using ( SWO; leastOf; lt; eq; gt ) renaming ( Tri to Tri∙ )
open import L.DefinableInjection {} lem using ( DefinableMap; module Graph )
open import L.GCH.CardinalSquareLaw {} lem using ( isL-ord )
open import L.InjectionComposition {} lem using ( appC; appC-adequate )

命题截断有意隐藏初始候选究竟是哪一个。只有先把目标改为「最小元的总类型」并证明该目标本身是命题,证明才能消去这层截断。可构造集合的相等同样不依赖其证明分量,因此整个论证中底层集合相等便已足够。

open import Cubical.Data.Sigma using ( Σ≡Prop )
open import Cubical.HITs.CumulativeHierarchy.Base using ( V; _∈_ )
import Cubical.Data.Empty as Empty
import Cubical.HITs.PropositionalTruncation as PT
open PT using ( ∥_∥₁ )

载体 S 把外围集合与其可构造性证明打包在一起。因此,输入与候选可以占据满足环境中的各项,而打包后的层 与序关系 可以作为公式常元出现。第一投影则取回隶属关系与有序对编码所需的底层集合。

open hPropStructure 𝒮ʟ using ( S )

满足关系在可构造结构 𝒮ʟ 中读取。特别地,P 已经是一条对象语言公式;本章为这条可定义关系选取见证,并不声称能把任意宿主层谓词变成可定义谓词。

module AbsL = FOL.Absoluteness.Single 𝒮ᵥ isL isL-trans using ( _^_; _⊨ᵐ_ )
open AbsL using ( _^_ ) renaming ( _⊨ᵐ_ to _⊨_ )

原公式在二项环境 (w,x) 中求值。最小性引入有界竞争者后,环境变成 (w',w,x),所以输入所在的变元必须移动,而新候选 w' 占据第一槽位。满足关系与改名的相容性将证明这次移位正确。

module Ren = Sat 𝒮ʟ id using ( Agrees; ⊨-rename )

指标 i0i1 分别指向最前面的两个 De Bruijn 槽位;它们的数学角色随环境而定。在 (w,x) 中,二者指向提议的取值与输入;在有界环境 (w',w,x) 中,二者则指向竞争者与提议的取值。

private
  i0 :  {k}  Fin (suc k)
  i0 = zero
  i1 :  {k}  Fin (suc (suc k))
  i1 = suc i0

底层集合相等的两个可构造集合相等,依据是可构造性的命题性;后文对可构造集合的每个同一视都经此提升。

  S≡ : {x y : S}  fst x  fst y  x  y
  S≡ = Σ≡Prop  v  snd (isL v))

选取最小的满足成员

最小见证模块收取四份数据。带序数性的序数指数 γ 确定层;集合 X 约束输入;二元公式 P 是谓词;假设则仅仅地断言:对 X 中每个输入,都存在来自该层的候选满足谓词。候选取自整个层 Lset γ,而输入被约束在 X 之中。

module Least (γ : V ) ( : IsOrd γ) (X : S) (P : Formula S 2)
  (have : (x : S)   fst x  fst X 
          Σ[ w  S ] ( fst w  Lset γ  ×  (w  x  [])  P ) ∥₁) where

外围的层 Lset γ 被打包为可构造载体中的元素 。这一包可作为图公式中的常元,使公式能把搜索范围精确限制在固定的候选层内。

  opaque
     : S
     = LsetS γ 

等式 Lγ-fst 把这个不透明包的底层集合显式认同为 Lset γ。后文在宿主层的层与公式所用常元之间转换时,隶属证明都沿这条等式搬运。

    Lγ-fst : fst   Lset γ
    Lγ-fst = refl

内部关系的编码还需要序数指数本身属于可构造宇宙。每个序数都是可构造的,而 提供了为 γ 得到这一事实所需的序数性。

     :  isL γ 
     = isL-ord γ 

层序的内部实现是由编码对构成的可构造集合;最小性将在这个关系中表达。

   : S
   = relL γ  

谓词 Mem x 记录对输入的约束,即 x ∈ X 的证据。它不对见证候选施加条件;候选的另一载体将在下一步定义为 Lset γ 的成员类型。

  Mem : S  Type (ℓ-suc )
  Mem x =  fst x  fst X 

orderAt γ oγ 作用于层成员,而非 S 的任意元素。子类型 把界 c ∈ Lset γ 内置于每个被比较的对象中,因此最小元搜索不可能越出固定的候选层。

  private
     : Type (ℓ-suc )
     = MemOf (Lset γ)

的元素包含一个底层集合及其属于 Lset γ 的证明。可构造层的每个成员都是可构造的,因此 memS 能把该底层集合提升到载体 S;原有的隶属证明仍保留为候选的层界。

    memS :   S
    memS c = fst c , Lset→isL γ  (fst c) (snd c)

候选与输入处的谓词,即 P 在「候选居前、输入居后」的环境中的对象语言满足。

    At : S  S  hProp (ℓ-suc )
    At w x = (w  x  [])  P

谓词 Good x 把原关系转到 orderAt γ oγ 所排序的载体上:一个层成员是合格候选,恰当其对应的 S 元素与输入 x 一同满足 P。因此,接下来的搜索排序的是 Lset γ 中的候选;它既不排序 X 中的输入,也不把候选限制到 X 中。

    Good : S    hProp (ℓ-suc )
    Good x c = At (memS c) x

同一个底层集合可能连同两份不同的可构造性证明出现。由于可构造性是命题,S≡ 认同这两个打包后的 S 元素;沿所得路径搬运满足证明,便知重打包的层成员与原见证满足同一个 P 实例。

    toMem : (x w : S) (hw :  fst w  Lset γ )   At w x    Good x (fst w , hw) 
    toMem x w hw = subst  v   At v x ) (S≡ refl)

选取在固定输入 x 及证据 m : x ∈ X 后逐点进行。该证据允许使用逐点存在假设 have;它既不说明候选属于 X,也不给 X 配备任何序。

  module Sel (x : S) (m : Mem x) where

对固定输入,假设被映到「满足条件的层成员」这一类型中。这一步只改变每个可能见证的表示;所得非空性仍带有命题截断,因此尚未选定任何特定起始成员。

    private
      nonempty :  Σ[ c   ]  Good x c  ∥₁
      nonempty = PT.map  { (w , hw , hp)  (fst w , hw) , toMem x w hw hp }) (have x m)

此时 leastOf 沿 orderAt γ oγ 下降,并返回一个实际的最小合格成员。这是特殊的消去步骤:排中律判定下降能否继续;而命题截断之所以可被消去,是因为「最小元连同其最小性证明的总类型」已经证明为命题。仅凭其中任一事实,都不足以从 nonempty 中抽取任意见证。

    opaque
      c : 
      c = fst (leastOf (orderAt γ ) lem (Good x) nonempty)

搜索结果保留被选成员是合格候选的证明。因此,从仅仅存在走到实际最小元的过程中,原谓词并未丢失。

      c-good :  Good x c 
      c-good = fst (snd (leastOf (orderAt γ ) lem (Good x) nonempty))

与之配套的子句给出后文所需的精确相对最小性:同一层中的任何其他合格成员,都不可能在 orderAt γ oγ 中严格低于被选者。

      minimal : (c' : )   Good x c'   relOf (orderAt γ ) c' c  Empty.⊥
      minimal = snd (snd (leastOf (orderAt γ ) lem (Good x) nonempty))

层序比较的是 中的对象,而满足环境容纳的是 S 中的对象。把被选成员重打包为 e,便在不改变底层集合的前提下跨过这道接口。

    e : S
    e = memS c

由于合格性正是经同一重打包定义的,所得 S 元素立即满足 P(e,x);这里不涉及第二次选取或新的搜索。

    e-holds :  (e  x  [])  P 
    e-holds = c-good

被选层成员携带的隶属分量同时证明 e ∈ Lset γ。因此,谓词满足与层界来自同一个最小候选。

    e∈Lγ :  fst e  Lset γ 
    e∈Lγ = snd c

对带有证据 m : x ∈ X 的输入 x,函数 fn 返回这个被选候选。定义域证据显式出现,是因为存在假设只对 X 中的输入成立。

  fn : (x : S)  Mem x  S
  fn x m = Sel.e x m

在每个这样的定义域输入处,被选取值都在环境 (fn(x),x) 中满足原公式。

  fn-holds : (x : S) (m : Mem x)   (fn x m  x  [])  P 
  fn-holds x m = Sel.e-holds x m

同一取值属于 Lset γ。这一单独的值域陈述将在后文把可定义映射的陪域置为 ;它并不表示取值属于输入集 X

  fn-in : (x : S) (m : Mem x)   fst (fn x m)  Lset γ 
  fn-in x m = Sel.e∈Lγ x m

为了用也能在 L 内表达的方式陈述最小性,设内部关系 记录了竞争者 w' 低于 fn(x)。读出引理 relL-rep 把这一编码条目转成 orderAt γ oγ 所用的宿主层比较,而被选成员的最小性将其反驳。结论只排除 Lset γ 中满足谓词的竞争者,且只相对于这条固定的序。

  fn-least : (x : S) (m : Mem x) (w' : S)   fst w'  Lset γ    (w'  x  [])  P 
             pr (fst w') (fst (fn x m))  fst    Empty.⊥
  fn-least x m w' hw' hp hr = Sel.minimal x m (fst w' , hw') (toMem x w' hw' hp)
    (relL-rep γ   (fst w' , hw') (Sel.c x m) hr)

宿主层规格 TWit w x 合并图公式必须表达的三项事实:P(w,x)w 属于固定层,以及在 orderAt γ oγ 中不存在严格低于 w 且满足 P 的层成员。这是图取值的规格,此时图尚未被收集为内部表。

  TWit : (w x : S)  Type (ℓ-suc )
  TWit w x =
       (w  x  [])  P 
    ×  fst w  Lset γ 
    × ((w' : S)   fst w'  Lset γ    (w'  x  [])  P 

最后一个分量检验任意满足 w' ∈ Lset γP(w',x)w'。若编码对 (w',w) 属于 ,它便表示 w' 在固定层序中严格更小;这一规格所反驳的正是这种可能。

          pr (fst w') (fst w)  fst    Empty.⊥)

唯一性只在满足完整 TWit 规格的候选之间证明。原谓词 P 在该层中可以有许多见证;严格全序所排除的是两个不同候选既都满足 P,又都没有更小的满足者。三歧性把任意候选与被选值的比较化为下面三种情形。

  fn-unique : (x : S) (m : Mem x) (w : S)  TWit w x  fst w  fst (fn x m)
  fn-unique x m w (hp , hw , mn) = go (SWO.tri∙ (orderAt γ ) c' (Sel.c x m))
    where
    c' : 
    c' = fst w , hw

若替代候选严格低于被选者,则与最小性矛盾;若两个层成员重合,则其底层集相等。

    go : Tri∙ (relOf (orderAt γ ) c' (Sel.c x m)) (c'  Sel.c x m)
              (relOf (orderAt γ ) (Sel.c x m) c')
        fst w  fst (fn x m)
    go (lt k) = Empty.rec (Sel.minimal x m c' (toMem x w hw hp) k)
    go (eq q) = cong fst q

若被选候选严格低于替代候选,便与替代候选自身的最小性矛盾;所需的比较由内部关系的填充方向供给。

    go (gt k) = Empty.rec (mn (fn x m) (fn-in x m) (fn-holds x m)
      (relL-fill γ   (Sel.c x m) c' k))

进入有界量词后,环境为 (w',w,x),而 P 期待 (候选,输入)。因此改名把变元 0 送到仍为 w' 的槽位 0,把变元 1 送到现为 x 的槽位 2;槽位 1 留给提议的取值 w,供 w' 与之比较。

  private
    ρ : Fin 2  Fin 3
    ρ zero       = zero
    ρ (suc zero) = suc (suc zero)

环境一致性精确记录这两项认同:从 (w',w,x) 读取变元 0,得到 (w',x) 的第一项;改名后读取变元 1,得到其第二项。这种逐变元的一致性正是搬运整条公式 P 的满足关系所需的前提。

    ag : (w' w x : S)  Ren.Agrees ρ (w'  w  x  []) (w'  x  [])
    ag w' w x zero       = refl
    ag w' w x (suc zero) = refl

最小性公式遍历 w' ∈ Lγ,并否定两项陈述的合取:编码对 (w',w) 属于 ,且 P(w',x) 成立。其语义是:固定层中没有候选既在 orderAt γ oγ 中低于 w,又对同一输入见证原谓词。

  opaque
    private
      leastFo : Formula S 2
      leastFo = ∀̇∈ (con ) (¬̇ (appC  i0 i1 ∧̇ renameFo ρ P))

改名相容性现在认同 P 的两种读法:在 (w',w,x) 中求值 renameFo ρ P,等同于在 (w',x) 中直接求值 P。当前提议的取值 w 有意不出现在对竞争者的谓词检验中;它只出现在序比较 (w',w) 中。

      ren : (w' w x : S)
            (w'  w  x  [])  renameFo ρ P    (w'  x  [])  P 
      ren w' w x = cong ⟨_⟩ (Ren.⊨-rename ρ P (w'  w  x  []) (w'  x  []) (ag w' w x))

完整图公式把原谓词与层隶属、最小性子句合取:一个值被记录,恰当它满足谓词、位于固定层中、且在该层满足谓词的成员中最小。

    fo : Formula S 2
    fo = P ∧̇ ((var i0 ∈̇ con ) ∧̇ leastFo)

向外读取 fo,可恢复语义规格的三部分:P(w,x)、隶属 w ∈ Lset γ,以及该层中没有满足谓词且被内部序记录为低于 w 的成员。公式 fo 本身不含条件 x ∈ X;这一限制在 fo 被用作 Dmap 的图公式时施加。因此,X 控制哪些输入必须取得值,而 Lset γ 控制为该输入参与比较的候选。

    fo-out : (w x : S)   (w  x  [])  fo   TWit w x
    fo-out w x (hp , (hl , hm)) =
        hp
      , subst  v   fst w  v ) Lγ-fst hl
      , λ w' hw' hp' hr  lower (hm w' (subst  v   fst w'  v ) (sym Lγ-fst) hw')

为得到 TWit 的最小性分量,固定竞争者 w',并假设语义事实 pr(w',w) ∈ RγP(w',x)。证明沿向内方向使用 appC-adequate 与改名,把这两项事实变成 fo 所否定的两个合取项的满足;有界子句随即导出矛盾。该关系条目是层序比较的对象语言编码,并不与 relOf (orderAt γ oγ) 定义相等。

          ( subst ⟨_⟩ (sym (appC-adequate  i0 i1 (w'  w  x  []))) hr
          , transport (sym (ren w' w x)) hp' ))

反过来,一个满足 TWit 的见证决定了图公式的证明。其前两个分量给出 P(w,x)w ∈ Lset γ。对于有界的最小性子句,在同一层中任取 w',并假设编码的序把 w' 排在 w 之前且 P(w',x) 成立;TWit 的最后一个分量恰好排除这一合取。

    fo-in : (w x : S)  TWit w x   (w  x  [])  fo 
    fo-in w x (hp , hl , mn) =
        hp
      , subst  v   fst w  v ) (sym Lγ-fst) hl
      , λ w' hw' hc  lift (mn w' (subst  v   fst w'  v ) Lγ-fst hw')

改名与应用充分性把这两个假设转成语义最小性所需的形式。合起来,fo-outfo-in 表明 fo 恰好表达固定层中的最小见证规格。它们既不要求原谓词的见证唯一,也不比较 Lset γ 之外的候选者。

          (transport (ren w' w x) (snd hc))
          (subst ⟨_⟩ (appC-adequate  i0 i1 (w'  w  x  [])) (fst hc)))

这一精确对应使该选取成为可定义映射。映射的输入集是 X,陪域是 :对每个 x ∈ X 的证明,其取值为 fn x m,而先前的层隶属定理把该值置于 中。图公式在环境 (取值,输入) 中读取,因此第一个变量表示选出的见证,第二个变量表示输入。

  Dmap : DefinableMap
  Dmap = record
    { dom = X ; cod =  ; fn = fn
    ; into = λ x m  subst  v   fst (fn x m)  v ) (sym Lγ-fst) (fn-in x m)
    ; graph = fo

在选出的取值处,已经证明的三项事实给出 fo 的证明:该值满足 P、属于候选层,并且其中没有更小的满足候选。反过来,任何满足 fo 的取值都携带这份完整的最小见证规格,因而等于选出的取值。这一唯一性来自两个候选各自的最小性及 orderAt γ oγ 的三歧性,而非 P 的见证唯一;由于可构造性证据是命题,底层集合的相等可提升为 S 中的相等。

    ; defines = λ x m  fo-in (fn x m) x (fn-holds x m , fn-in x m , fn-least x m)
    ; only = λ x m w h  S≡ (fn-unique x m w (fo-out w x h)) }

一旦一条公式为 X 中每个输入定义唯一取值,替换便能在 L 内收集这些取值。把图构造用于 Dmap,可得到由有序对组成的可构造集,以及使用其隶属关系所需的两个方向。

  private
    module Gr = Graph Dmap using ( F; F-in; pair-out )

把这个收集所得的集合记为 T。它的条目是有序对 (x,fn(x)),输入在前,选出的取值在后。这与公式满足所用的环境 (取值,输入) 次序相反;区分这两种约定,可避免把图公式误认成内部表本身。

  T : S
  T = Gr.F

对每个 x ∈ X,表都包含有序对 (x,fn(x))。因此,后续论证可以通过同一个可构造集的隶属关系引用这些选择,而无须对每个输入分别从仅仅非空的族中作选择。

  T-in : (x : S) (m : Mem x)   pr (fst x) (fst (fn x m))  fst T 
  T-in = Gr.F-in

反过来,条目 (x,w) ∈ T 给出证据 x ∈ X,并给出 w 的底层集合与被选取值 fn(x) 的底层集合相等。表隶属本身不返回最小性证明。在 HullCounting 中,这张表用于同步此前只在命题截断下可得的诸选择。需要单射时,还须另有底层关系的反向函数性假设,证明一个固定的相关候选不能对应两个不同输入;单射性并不单由最小选取得出。

  T-out : (x w : S)   pr (fst x) (fst w)  fst T 
         Σ[ m  Mem x ] (fst w  fst (fn x m))
  T-out = Gr.pair-out