Separation and replacement, bounded

分离公理问的是:给定一个可构造集与一条公式,它刻出的子集是否仍可构造?回答这个问题的机器已在前几章陆续备齐,本章把它们装到一起,针对不含无界量词的公式。

论证的形状与基本公理用的是同一个,只多一步。要把一个集合放进 L,我们把它呈现为单一阶段的可定义子集。此处的目标是 {x ∈ a : φ},而那个阶段必须同时装下 aφ 提到的每个常元。给定这样一个阶段,可定义性算子要的是一条该阶段成员之上的公式,而 φ 是整个模型之上的公式,故公式必须被重标下去。那正是界层证书的用途,而多出的那一步就是核对重标没有改变公式所说的内容。

核对它是一条穿过三章的五步路径,每一步都是已证的等式:可定义子集的隶属就是重标后公式的外层满足;重标与两个到层级的投影交换;而 Δ₀ 公式的外层满足就是内层满足。最后一条是花掉 Δ₀ 的地方,也是唯一的地方。含无界量词的公式也会受到同样的对待,但要等随后诸章为它们买到一个反射它们的阶段。

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

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

module L.Axioms.Separation { : Level} (lem : LEM (ℓ-suc )) where

open import FOL.ZFStructure using ( Transitive; module hPropStructure )
open import FOL.Syntax
  using ( Term; con; var; Formula; _∈̇_; _≐_; _∧̇_; _∨̇_; _⇒̇_; ¬̇_; ⊤̇; ⊥̇
        ; ∃̇_; ∀̇_; ∀̇∈; ∃̇∈ )
open import FOL.LevyHierarchy using ( Δ₀; δ-∈; δ-∧; δ-∃∈ )
open import FOL.Manipulation.Bounding
  using ( BoundedTm; BoundedFo; BoundedTm-mono; BoundedFo-mono; module Relabel )
open import FOL.Manipulation.Relabelling using ( mapFo; ⊨-map )
import FOL.Semantics
import FOL.Absoluteness
import FOL.ZFModel
open import V.Hierarchy {} using ( 𝒮ᵥ )
open import L.Definability {} using ( module DefOf )
open import L.Constructible {}
  using ( 𝒮ʟ; isL; isL-trans; IsOrd; Lset; Lset-layer; layer-trans; Lset-mono
        ; 𝒟ₒ; 𝒟ₒ-intro; Lset→isL )
open import L.Ordinal {} using ( ∅-ord; boundingOrd; bound2 )
open import L.Stage {} lem using ( stage; stage-ord; stage-mem )
open import L.Axioms.Basic {} using ( 𝒟ₒ→isL; uniqueL )

open import Cubical.Functions.Logic using ( ⇔toPath )
import Cubical.HITs.PropositionalTruncation as PT
open PT using ( ∣_∣₁ )
open import Cubical.HITs.CumulativeHierarchy.Base using ( V; _∈_ )
open import Cubical.HITs.CumulativeHierarchy.Constructions using (  )
open import Cubical.HITs.CumulativeHierarchy.Properties
  using ( ∈∈ₛ; ∈-asFiber; ⟪_⟫; ⟪_⟫↪; ∈ₛ⟪_⟫↪_ )

open TruthAlgebra (hPropAlgebra (ℓ-suc ))
open hPropStructure 𝒮ʟ

module ModelL = FOL.ZFModel 𝒮ʟ
open ModelL using ( SetOf )

module SemV = FOL.Semantics (hPropAlgebra (ℓ-suc )) 𝒮ᵥ
open SemV.At (V ) id using () renaming ( _⊨_ to _⊨v_ )
module AbsL = FOL.Absoluteness.Single 𝒮ᵥ isL isL-trans
open AbsL using ( abs₀ ) renaming ( _⊨ᵐ_ to _⊨_ ; _⊨ᵛ_ to _⊨ᵥ_ )

替换的像

先命名一次,因为下面的引擎产出它而模型 record 消费它:aφ 下的像,是 φa 的某个成员相关联的那些东西构成的类。此处源变元在索引零、像在索引一;模型 record 的陈述次序相反,而装配那个字段的章节以变量变换调整次序以相符。

ReplImage : (a : S) (φ : Formula S 2)  S  Ω
ReplImage a φ z =  S  x  (x ∈ˢ a)  ((x  z  [])  φ))

在固定的阶段上

下文一切都相对于一个阶段。谓词 Below 说模型的一个成员落在该阶段中;重标实例把这样的成员送到它在其中的索引,而它所需的那条等式是「索引把该成员命名回来」,那正是隶属关系的纤维所给出的。

module AtStage (σ : V ) ( : IsOrd σ) where
  module DefC = DefOf (Lset σ)

  Atrans : Transitive 𝒮ᵥ DefC.M
  Atrans = layer-trans (Lset-layer σ)

  module RefC = DefC.Refine Atrans
  open RefC.Abs using () renaming ( _⊨ᵛ_ to _⊨σ_ )

  Below : S  Type (ℓ-suc )
  Below c =  fst c  Lset σ 

  module RL = Relabel {K = S} {K' =  Lset σ } {W = V }
                fst  Lset σ ⟫↪ Below
                 c p  ∈-asFiber {a = fst c} {b = Lset σ} p .fst)
                 c p  ∈-asFiber {a = fst c} {b = Lset σ} p .snd)

那条五步路径。自上而下读:属于可定义子集,就是经该阶段的含入读出的、重标后公式的外层满足;两次重标律把它搬到层级自己的读法;部分重标的正确性把两种读法认同;而绝对性把它带回模型内部。每一环都是前面某章的等式,而这个复合是本章唯一做细致事情的地方。

  satBridge : (φ : Formula S 1) (h : BoundedFo Below φ) ( : Δ₀ φ)
              (m :  Lset σ ) (xL :  isL ( Lset σ ⟫↪ m) )
             (( Lset σ ⟫↪ m  []) ⊨σ (mapFo DefC.ι (RL.liftFo φ h)))
               ((( Lset σ ⟫↪ m , xL)  [])  φ)
  satBridge φ h  m xL =
      ⊨-map (hPropAlgebra (ℓ-suc )) 𝒮ᵥ DefC.ι fst (RL.liftFo φ h)
        ( Lset σ ⟫↪ m  [])
     sym (⊨-map (hPropAlgebra (ℓ-suc )) 𝒮ᵥ  Lset σ ⟫↪ id (RL.liftFo φ h)
             ( Lset σ ⟫↪ m  []))
     cong  ψ  ( Lset σ ⟫↪ m  []) ⊨v ψ) (RL.liftFo-correct φ h)
     ⊨-map (hPropAlgebra (ℓ-suc )) 𝒮ᵥ fst id φ ( Lset σ ⟫↪ m  [])
     sym (abs₀  (( Lset σ ⟫↪ m , xL)  []))

  carveSat : (φ : Formula S 1) (h : BoundedFo Below φ) ( : Δ₀ φ)
             (m :  Lset σ ) (xL :  isL ( Lset σ ⟫↪ m) )
            ( Lset σ ⟫↪ m  DefC.defSet (RL.liftFo φ h))
              ((( Lset σ ⟫↪ m , xL)  [])  φ)
  carveSat φ h  m xL =
    RefC.abs-defSet (RL.liftFo φ h) (RL.Δ₀-liftFo h ) m  satBridge φ h  m xL

  carveSatAnd : (mₐ :  Lset σ ) (φ : Formula S 1) (h : BoundedFo Below φ)
                ( : Δ₀ φ) (m :  Lset σ ) (xL :  isL ( Lset σ ⟫↪ m) )
               ( Lset σ ⟫↪ m  DefC.defSet ((var zero ∈̇ con mₐ) ∧̇ RL.liftFo φ h))
                 (( Lset σ ⟫↪ m   Lset σ ⟫↪ mₐ)
                    ((( Lset σ ⟫↪ m , xL)  [])  φ))
  carveSatAnd mₐ φ h  m xL =
      RefC.abs-defSet ((var zero ∈̇ con mₐ) ∧̇ RL.liftFo φ h)
        (δ-∧ δ-∈ (RL.Δ₀-liftFo h )) m
     cong₂ _⊓_ refl (satBridge φ h  m xL)

刻出的集合被封印,而关于它的四个事实经封印证出。不封印的话,defSet 会展开成公式之上的一个集合,而此后每个提到该集合的类型都会把那次展开带进转换检查;封印它并只导出所需之物,使本章其余部分对着一个黑箱工作。

  opaque
    carve : Formula  Lset σ  1  V 
    carve ψ = DefC.defSet ψ

  opaque
    unfolding carve
    carve∈𝒟ₒ : (ψ : Formula  Lset σ  1)   carve ψ  𝒟ₒ (Lset σ) 
    carve∈𝒟ₒ ψ = 𝒟ₒ-intro (Lset σ) (DefC.defSet ψ)  ψ , refl ∣₁

    carve⊆ : (ψ : Formula  Lset σ  1) (y : V )   y  carve ψ 
             y  Lset σ 
    carve⊆ ψ y mem = DefC.defSet⊆A ψ y mem

    carveOut : (mₐ :  Lset σ ) (φ : Formula S 1) (h : BoundedFo Below φ)
               ( : Δ₀ φ) (m :  Lset σ ) (xL :  isL ( Lset σ ⟫↪ m) )
                Lset σ ⟫↪ m  carve ((var zero ∈̇ con mₐ) ∧̇ RL.liftFo φ h) 
               ( Lset σ ⟫↪ m   Lset σ ⟫↪ mₐ)
                  ((( Lset σ ⟫↪ m , xL)  [])  φ) 
    carveOut mₐ φ h  m xL mem = subst ⟨_⟩ (carveSatAnd mₐ φ h  m xL) mem

    carveIn : (mₐ :  Lset σ ) (φ : Formula S 1) (h : BoundedFo Below φ)
              ( : Δ₀ φ) (m :  Lset σ ) (xL :  isL ( Lset σ ⟫↪ m) )
              ( Lset σ ⟫↪ m   Lset σ ⟫↪ mₐ)
                 ((( Lset σ ⟫↪ m , xL)  [])  φ) 
               Lset σ ⟫↪ m  carve ((var zero ∈̇ con mₐ) ∧̇ RL.liftFo φ h) 
    carveIn mₐ φ h  m xL br = subst ⟨_⟩ (sym (carveSatAnd mₐ φ h  m xL)) br

    imageOut : (φ : Formula S 1) (h : BoundedFo Below φ) ( : Δ₀ φ)
               (m :  Lset σ ) (xL :  isL ( Lset σ ⟫↪ m) )
                Lset σ ⟫↪ m  carve (RL.liftFo φ h) 
               (( Lset σ ⟫↪ m , xL)  [])  φ 
    imageOut φ h  m xL mem = subst ⟨_⟩ (carveSat φ h  m xL) mem

    imageIn : (φ : Formula S 1) (h : BoundedFo Below φ) ( : Δ₀ φ)
              (m :  Lset σ ) (xL :  isL ( Lset σ ⟫↪ m) )
              (( Lset σ ⟫↪ m , xL)  [])  φ 
               Lset σ ⟫↪ m  carve (RL.liftFo φ h) 
    imageIn φ h  m xL sat = subst ⟨_⟩ (sym (carveSat φ h  m xL)) sat

还有一件小工具。满足关系只依赖底层集合,而不依赖随之携带的可构造性证明,故满足的事实可沿底层集合之间的等式搬运。对 Δ₀ 公式这是直接的:走到外面、搬运、再走回来。

  opaque
    ⊨-transport : (φ : Formula S 1) ( : Δ₀ φ) (u v : S)  fst u  fst v
                  (u  [])  φ    (v  [])  φ 
    ⊨-transport φ  u v p hyp =
      subst ⟨_⟩ (sym (abs₀  (v  [])))
        (subst  w   (w  []) ⊨ᵥ φ ) p
          (subst ⟨_⟩ (abs₀  (u  [])) hyp))

    ⊨-transport₂ : (φ : Formula S 2) ( : Δ₀ φ) (u v w : S)  fst u  fst v
                   (u  w  [])  φ    (v  w  [])  φ 
    ⊨-transport₂ φ  u v w p hyp =
      subst ⟨_⟩ (sym (abs₀  (v  w  [])))
        (subst  s   (s  fst w  []) ⊨ᵥ φ ) p
          (subst ⟨_⟩ (abs₀  (u  w  [])) hyp))

在一个阶段上分离

现在是构造本身。从该阶段中刻出子集的那条公式,是「属于 a」(以 a 的索引为常量写出) 与重标后的 φ 的合取。刻出的集合是该阶段的可定义子集,故可构造;而它的成员恰是规格所要求的,经两个方向的那道桥,其中搬运工具负责在「阶段的一个成员」与「携带自身可构造性证明的同一集合」之间过渡。

  private
    memberIsL : (m :  Lset σ )   isL ( Lset σ ⟫↪ m) 
    memberIsL m = Lset→isL σ  ( Lset σ ⟫↪ m)
      (∈∈ₛ {a =  Lset σ ⟫↪ m} {b = Lset σ} .snd (∈ₛ⟪ Lset σ ⟫↪ m))

  separateAt : (a : S) (fa∈σ :  fst a  Lset σ )
               (φ : Formula S 1) (h : BoundedFo Below φ) ( : Δ₀ φ)
              isContr (SetOf  x  (x ∈ˢ a)  ((x  [])  φ)))
  separateAt a fa∈σ φ h  = uniqueL Q (sepElt , spec)
    where
    Q : S  Ω
    Q x = (x ∈ˢ a)  ((x  [])  φ)
    mₐ = ∈-asFiber {a = fst a} {b = Lset σ} fa∈σ .fst
    qₐ :  Lset σ ⟫↪ mₐ  fst a
    qₐ = ∈-asFiber {a = fst a} {b = Lset σ} fa∈σ .snd
    ψ : Formula  Lset σ  1
    ψ = (var zero ∈̇ con mₐ) ∧̇ RL.liftFo φ h
    sepElt : S
    sepElt = carve ψ , 𝒟ₒ→isL σ  (carve ψ) (carve∈𝒟ₒ ψ)

    spec : (z : S)  (z ∈ˢ sepElt)  Q z
    spec z = ⇔toPath fwd bwd
      where
      fwd :  z ∈ˢ sepElt    Q z 
      fwd z∈ = fz∈fa , 
        where
        fz∈Lσ = carve⊆ ψ (fst z) z∈
        m = ∈-asFiber {a = fst z} {b = Lset σ} fz∈Lσ .fst
        q :  Lset σ ⟫↪ m  fst z
        q = ∈-asFiber {a = fst z} {b = Lset σ} fz∈Lσ .snd
        xL = memberIsL m
        m∈ :   Lset σ ⟫↪ m  carve ψ 
        m∈ = subst  w   w  carve ψ ) (sym q) z∈
        dk = carveOut mₐ φ h  m xL m∈
        fz∈fa = subst  w   fst z  w ) qₐ
          (subst  w   w   Lset σ ⟫↪ mₐ ) q (dk .fst))
         = ⊨-transport φ  ( Lset σ ⟫↪ m , xL) z q (dk .snd)

      bwd :  Q z    z ∈ˢ sepElt 
      bwd (fz∈fa , ) = subst  w   w  carve ψ ) q m∈
        where
        fz∈Lσ = layer-trans (Lset-layer σ) {x = fst a} {y = fst z} fz∈fa fa∈σ
        m = ∈-asFiber {a = fst z} {b = Lset σ} fz∈Lσ .fst
        q :  Lset σ ⟫↪ m  fst z
        q = ∈-asFiber {a = fst z} {b = Lset σ} fz∈Lσ .snd
        xL = memberIsL m
        p₁ :   Lset σ ⟫↪ m   Lset σ ⟫↪ mₐ 
        p₁ = subst  w   w   Lset σ ⟫↪ mₐ ) (sym q)
          (subst  w   fst z  w ) (sym qₐ) fz∈fa)
        p₂ :  (( Lset σ ⟫↪ m , xL)  [])  φ 
        p₂ = ⊨-transport φ  z ( Lset σ ⟫↪ m , xL) (sym q) 
        m∈ :   Lset σ ⟫↪ m  carve ψ 
        m∈ = carveIn mₐ φ h  m xL (p₁ , p₂)

在一个阶段上替换

替换复用同一套引擎。a 在一条二元公式下的像,正是一条一元有界存在所说的东西,故这个构造把那条存在式交给上面的机器,再把答案读回来。多出的那个假设是像已经落在该阶段中;产出它是调用方的工作,而随后诸章正是经界住诸像的阶段来完成它。

  replaceAt : (a : S) (fa∈σ :  fst a  Lset σ )
              (φ : Formula S 2) (h : BoundedFo Below φ) ( : Δ₀ φ)
              (cover : (z : S)   ReplImage a φ z    fst z  Lset σ )
             isContr (SetOf (ReplImage a φ))
  replaceAt a fa∈σ φ h  cover = uniqueL (ReplImage a φ) (replElt , spec)
    where
    χ : Formula S 1
    χ = ∃̇∈ (con a) φ
     : BoundedFo Below χ
     = fa∈σ , h
     : Δ₀ χ
     = δ-∃∈ 
    replElt : S
    replElt = carve (RL.liftFo χ )
            , 𝒟ₒ→isL σ  (carve (RL.liftFo χ )) (carve∈𝒟ₒ (RL.liftFo χ ))

    spec : (z : S)  (z ∈ˢ replElt)  ReplImage a φ z
    spec z = ⇔toPath fwd bwd
      where
      fwd :  z ∈ˢ replElt    ReplImage a φ z 
      fwd z∈ = ⊨-transport χ  ( Lset σ ⟫↪ m , xL) z q (imageOut χ   m xL m∈)
        where
        fz∈Lσ = carve⊆ (RL.liftFo χ ) (fst z) z∈
        m = ∈-asFiber {a = fst z} {b = Lset σ} fz∈Lσ .fst
        q :  Lset σ ⟫↪ m  fst z
        q = ∈-asFiber {a = fst z} {b = Lset σ} fz∈Lσ .snd
        xL = memberIsL m
        m∈ :   Lset σ ⟫↪ m  carve (RL.liftFo χ ) 
        m∈ = subst  w   w  carve (RL.liftFo χ ) ) (sym q) z∈

      bwd :  ReplImage a φ z    z ∈ˢ replElt 
      bwd qz = subst  w   w  carve (RL.liftFo χ ) ) q m∈
        where
        fz∈Lσ = cover z qz
        m = ∈-asFiber {a = fst z} {b = Lset σ} fz∈Lσ .fst
        q :  Lset σ ⟫↪ m  fst z
        q = ∈-asFiber {a = fst z} {b = Lset σ} fz∈Lσ .snd
        xL = memberIsL m
        satz :  (( Lset σ ⟫↪ m , xL)  [])  χ 
        satz = ⊨-transport χ  z ( Lset σ ⟫↪ m , xL) (sym q) qz
        m∈ :   Lset σ ⟫↪ m  carve (RL.liftFo χ ) 
        m∈ = imageIn χ   m xL satz

找到那个阶段

引擎要的是一个装下公式全部常元的阶段。造一个出来,是沿公式的一次递归,同时产出阶段与证书。常元贡献它自己的最早阶段,变元什么也不贡献,而在每个分叉节点上,两个阶段经界住而合并,单调性把两份证书都抬到合并处。

合并两个序数就是序数那一章的 bound2,而这也是这次递归从序数理论索取的全部。

Below′ : V   S  Type (ℓ-suc )
Below′ σ c =  fst c  Lset σ 


liftTmTo : {σ β : V }   σ  β    {n} (t : Term S n)
          BoundedTm (Below′ σ) t  BoundedTm (Below′ β) t
liftTmTo {σ} {β} σ∈β t h =
  BoundedTm-mono {P = Below′ σ} {Q = Below′ β}
     (c : S) h'  Lset-mono {α = β} {β = σ} σ∈β {x = fst c} h') t h

liftFoTo : {σ β : V }   σ  β    {n} (φ : Formula S n)
          BoundedFo (Below′ σ) φ  BoundedFo (Below′ β) φ
liftFoTo {σ} {β} σ∈β φ h =
  BoundedFo-mono {P = Below′ σ} {Q = Below′ β}
     (c : S) h'  Lset-mono {α = β} {β = σ} σ∈β {x = fst c} h') φ h

mkBoundedTm :  {n} (t : Term S n)  Σ[ σ  V  ] (IsOrd σ × BoundedTm (Below′ σ) t)
mkBoundedTm (con c) = stage (fst c) (c .snd)
                    , (stage-ord (fst c) (c .snd) , stage-mem (fst c) (c .snd))
mkBoundedTm (var i) =  , (∅-ord , _)

mkBoundedFo :  {n} (φ : Formula S n)  Σ[ σ  V  ] (IsOrd σ × BoundedFo (Below′ σ) φ)
mkBoundedFo (t ∈̇ u) = b .fst , (b .snd .fst ,
    ( liftTmTo {β = b .fst} (b .snd .snd .fst) t (r₁ .snd .snd)
    , liftTmTo {β = b .fst} (b .snd .snd .snd) u (r₂ .snd .snd) ))
  where
  r₁ = mkBoundedTm t
  r₂ = mkBoundedTm u
  b  = bound2 (r₁ .fst) (r₂ .fst) (r₁ .snd .fst) (r₂ .snd .fst)
mkBoundedFo (t  u) = b .fst , (b .snd .fst ,
    ( liftTmTo {β = b .fst} (b .snd .snd .fst) t (r₁ .snd .snd)
    , liftTmTo {β = b .fst} (b .snd .snd .snd) u (r₂ .snd .snd) ))
  where
  r₁ = mkBoundedTm t
  r₂ = mkBoundedTm u
  b  = bound2 (r₁ .fst) (r₂ .fst) (r₁ .snd .fst) (r₂ .snd .fst)
mkBoundedFo (φ ∧̇ ψ) = b .fst , (b .snd .fst ,
    ( liftFoTo {β = b .fst} (b .snd .snd .fst) φ (r₁ .snd .snd)
    , liftFoTo {β = b .fst} (b .snd .snd .snd) ψ (r₂ .snd .snd) ))
  where
  r₁ = mkBoundedFo φ
  r₂ = mkBoundedFo ψ
  b  = bound2 (r₁ .fst) (r₂ .fst) (r₁ .snd .fst) (r₂ .snd .fst)
mkBoundedFo (φ ∨̇ ψ) = b .fst , (b .snd .fst ,
    ( liftFoTo {β = b .fst} (b .snd .snd .fst) φ (r₁ .snd .snd)
    , liftFoTo {β = b .fst} (b .snd .snd .snd) ψ (r₂ .snd .snd) ))
  where
  r₁ = mkBoundedFo φ
  r₂ = mkBoundedFo ψ
  b  = bound2 (r₁ .fst) (r₂ .fst) (r₁ .snd .fst) (r₂ .snd .fst)
mkBoundedFo (φ ⇒̇ ψ) = b .fst , (b .snd .fst ,
    ( liftFoTo {β = b .fst} (b .snd .snd .fst) φ (r₁ .snd .snd)
    , liftFoTo {β = b .fst} (b .snd .snd .snd) ψ (r₂ .snd .snd) ))
  where
  r₁ = mkBoundedFo φ
  r₂ = mkBoundedFo ψ
  b  = bound2 (r₁ .fst) (r₂ .fst) (r₁ .snd .fst) (r₂ .snd .fst)
mkBoundedFo (¬̇ φ)    = mkBoundedFo φ
mkBoundedFo ⊤̇        =  , (∅-ord , _)
mkBoundedFo ⊥̇        =  , (∅-ord , _)
mkBoundedFo (∃̇ φ)    = mkBoundedFo φ
mkBoundedFo (∀̇ φ)    = mkBoundedFo φ
mkBoundedFo (∀̇∈ t φ) = b .fst , (b .snd .fst ,
    ( liftTmTo {β = b .fst} (b .snd .snd .fst) t (r₁ .snd .snd)
    , liftFoTo {β = b .fst} (b .snd .snd .snd) φ (r₂ .snd .snd) ))
  where
  r₁ = mkBoundedTm t
  r₂ = mkBoundedFo φ
  b  = bound2 (r₁ .fst) (r₂ .fst) (r₁ .snd .fst) (r₂ .snd .fst)
mkBoundedFo (∃̇∈ t φ) = b .fst , (b .snd .fst ,
    ( liftTmTo {β = b .fst} (b .snd .snd .fst) t (r₁ .snd .snd)
    , liftFoTo {β = b .fst} (b .snd .snd .snd) φ (r₂ .snd .snd) ))
  where
  r₁ = mkBoundedTm t
  r₂ = mkBoundedFo φ
  b  = bound2 (r₁ .fst) (r₂ .fst) (r₁ .snd .fst) (r₂ .snd .fst)

Δ₀ 分离

一切就位。把公式的阶段与实参自身的最早阶段合并,把证书抬到合并处,再把结果交给引擎。这就是有界片段的分离公理,无条件成立:不需要反射,不需要前沿字段,只是把前几章的机器按顺序用一遍。

separateΔ₀ : (a : S) (φ : Formula S 1)  Δ₀ φ
            isContr (SetOf  x  (x ∈ˢ a)  ((x  [])  φ)))
separateΔ₀ a φ  = AtStage.separateAt σ  a fa∈σ φ h 
  where
   = mkBoundedFo φ
  sa = stage (fst a) (a .snd)
  bb = bound2 ( .fst) sa ( .snd .fst) (stage-ord (fst a) (a .snd))
  σ  = bb .fst
   = bb .snd .fst
  h  = liftFoTo {σ =  .fst} {β = σ} (bb .snd .snd .fst) φ ( .snd .snd)
  fa∈σ :  fst a  Lset σ 
  fa∈σ = Lset-mono {α = σ} {β = sa} (bb .snd .snd .snd) (stage-mem (fst a) (a .snd))

Δ₀ 替换

替换还多要一样:引擎要求像已经落在该阶段中,而正是在此处偿付。函数性为实参的每个成员给出唯一的像;每个像有自己的最早阶段;而界层引理在实参的成员类型上一举把它们全部合并。合并后的序数再与实参的阶段、公式的阶段相并,而覆盖条件随之成立,因为像中的任何东西经唯一性都是某个成员的像。

值得注意它需要什么。定义公式唯一的量词被实参所界,故它保持 Δ₀,绝对性适用于整条公式。出力的是函数性,而非任何跨结构的反射,这正是本引理与无界情形之间那条干净的分界。

replaceΔ₀ : (a : S) (φ : Formula S 2)  Δ₀ φ
           ((x : S)   x ∈ˢ a   isContr (Σ[ y  S ]  (x  y  [])  φ ))
           isContr (SetOf (ReplImage a φ))
replaceΔ₀ a φ  fc = AtStage.replaceAt σ  a fa∈σ φ h  cover
  where
  memS : (m :  fst a )  Σ[ x  S ]  x ∈ˢ a 
  memS m = xₘ , fm∈fa
    where
    fm∈fa :   fst a ⟫↪ m  fst a 
    fm∈fa = ∈∈ₛ {a =  fst a ⟫↪ m} {b = fst a} .snd (∈ₛ⟪ fst a ⟫↪ m)
    xₘ : S
    xₘ =  fst a ⟫↪ m , isL-trans {x = fst a} {y =  fst a ⟫↪ m} fm∈fa (a .snd)
  imgElt : (m :  fst a )  S
  imgElt m = fc (memS m .fst) (memS m .snd) .fst .fst
  imgStage :  fst a   V 
  imgStage m = stage (fst (imgElt m)) (imgElt m .snd)
  bImg = boundingOrd  fst a  imgStage
            m  stage-ord (fst (imgElt m)) (imgElt m .snd))
  βimg = bImg .fst
  oβimg = bImg .snd .fst
  img∈Lβimg : (m :  fst a )   fst (imgElt m)  Lset βimg 
  img∈Lβimg m = Lset-mono {α = βimg} {β = imgStage m} (bImg .snd .snd m)
    (stage-mem (fst (imgElt m)) (imgElt m .snd))
   = mkBoundedFo φ
  sa = stage (fst a) (a .snd)
  b1 = bound2 βimg sa oβimg (stage-ord (fst a) (a .snd))
  bb = bound2 (b1 .fst) ( .fst) (b1 .snd .fst) ( .snd .fst)
  σ  = bb .fst
   = bb .snd .fst
  b1∈σ :  b1 .fst  σ 
  b1∈σ = bb .snd .snd .fst
  βimg∈σ :  βimg  σ 
  βimg∈σ =  .fst {x = b1 .fst} {y = βimg} (b1 .snd .snd .fst) b1∈σ
  sa∈σ :  sa  σ 
  sa∈σ =  .fst {x = b1 .fst} {y = sa} (b1 .snd .snd .snd) b1∈σ
  fa∈σ :  fst a  Lset σ 
  fa∈σ = Lset-mono {α = σ} {β = sa} sa∈σ (stage-mem (fst a) (a .snd))
  h  = liftFoTo {σ =  .fst} {β = σ} (bb .snd .snd .snd) φ ( .snd .snd)
  cover : (z : S)   ReplImage a φ z    fst z  Lset σ 
  cover z = PT.rec (snd (fst z  Lset σ)) step
    where
    step : Σ[ x  S ] ( x ∈ˢ a  ×  (x  z  [])  φ )   fst z  Lset σ 
    step (x , x∈a , φxz) = Lset-mono {α = σ} {β = βimg} βimg∈σ fz∈Lβimg
      where
      m = ∈-asFiber {a = fst x} {b = fst a} x∈a .fst
      qx :  fst a ⟫↪ m  fst x
      qx = ∈-asFiber {a = fst x} {b = fst a} x∈a .snd
      φxₘz :  (memS m .fst  z  [])  φ 
      φxₘz = AtStage.⊨-transport₂ σ  φ  x (memS m .fst) z (sym qx) φxz
      img≡z : imgElt m  z
      img≡z = cong fst (fc (memS m .fst) (memS m .snd) .snd (z , φxₘz))
      fz∈Lβimg :  fst z  Lset βimg 
      fz∈Lβimg = subst  w   fst w  Lset βimg ) img≡z (img∈Lβimg m)

小结

给定一个装下某集合与某 Δ₀ 公式全部常元的阶段,separateAt 刻出子集,replaceAt 取出像,二者都落在 L 中。全部内容就是 carveSat:属于刻出的集合就是在模型中满足,沿着一条其各环分别由可定义性、重标与绝对性三章证出的路径,而 Δ₀ 恰在最后一环花掉一次。mkBoundedFo 随后沿递归为任何公式产出这样一个阶段,故 separateΔ₀replaceΔ₀ 对有界片段无条件成立:不需要反射,也不需要前沿字段。诸公理本身余下的是无界情形,那里公式的含义不绝对,必须找到一个反射它的阶段。