The step described, and the table made unconditional

本部的每一章都把自己的余数交给了下一章,而余数如今只剩一条公式。把阶段处的序由描述变成对象的那个框架 (L.Choice.TableDescribed,经 L.Choice.FaithfulOrdered 施用) 索取一样它没有的东西:一条关于那一步的描述,它对一个阶段的可定义子集中的两个成员说,命名比较把前者排在后者之前。

那条描述所需的一切都已造好。命名比较已在对象语言里描述出来,它对着元层面比较的适足性也已证出,且所站的框架为每个关系位都带上「它持有的是哪个序」这条假设。那个框架为诸码所设的位由极限阶段上的序无条件填上。载体那一位则由表自己的诸读式填上,而那些读式已被重述在「无论什么实现那个类」之处,那恰恰正是步进参数所被交予的东西。于是两端会合,本章只是装配:没有新想法,只有把它写下来。

那条描述绑定个集合并钉住个常量。六个是阶段处的塔、它的可定义子集、表在该阶段的取值、以及塔之上的码集,连同被钉住的那两个。用对象等词钉住的两个是诸码之上的序与空字母表处的码集,因为一个槽位取的是变元,而那两样是特定的集合、不是描述。落在那七个槽位上的主体就是已内化的那一步。随后是两条读式,靠拆开与装回那六个绑定给出,再随后,一行打开那个框架。

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

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

module L.Choice.Order { : Level} (lem : LEM (ℓ-suc )) where

open import FOL.ZFStructure using ( module hPropStructure )
open import FOL.Syntax using ( Formula; var; con; _∈̇_; _≐_; _∧̇_; ∃̇_ )
open import V.Hierarchy {} using ( 𝒮ᵥ )
open import V.Coding {} using ( pr )
open import L.Constructible {}
  using ( 𝒮ʟ; isL; isL-trans; Lset; Lset→isL; IsOrd; 𝒟ₒ )
open import L.Ordinal {} using ( suc-ord )
open import L.Ordinal.Stages {} lem using ( ord∈Lset-suc )
open import L.Axioms.Basic {} using ( LsetS; 𝒟ₒS; ∅ʟ; Lset-suc )
open import L.Choice.Stage {} lem using ( stageBound )
open import L.Choice.Step {} lem
  using ( Mem; New; relOf; carry; orderAt; Under
        ; stepAt-fill; stepAt-read; IsLeastName; leastNameOf )
open import L.Choice.Name {} lem using ( module Naming )
open import L.Choice.Internal {} lem using ( StepAt )
open import L.Choice.Table {} lem using ( IsRel; ixRel-fill; ixRel-rep )
open import L.Choice.Faithful {} lem
  using ( CodesAt; CodesAt-in; CodesAt-out; stepOrder; module Ordered )
open import L.Choice.Adequate {} lem using ( module At )
open import L.Choice.Before {} lem
  using ( codeOrder; codeOrder-fill; codeOrder-rep )
open import L.Coding.Sequence {} lem using ( LsetGraphAt )
open import L.Coding.Powerset {} lem using ( DefAt; DefAt-stage )
open import L.Coding.Model {} using ( appAt; appAt-adequate )
open import L.Coding.CodeSet {} lem using ( AllCodes )
open import L.Hierarchy {} lem using ( Lset-only; Lset-defines )
open import L.WellOrder.Base {ℓ-suc } using ( SWO )

import FOL.Absoluteness
open import Cubical.Data.Sigma using ( Σ≡Prop )
import Cubical.HITs.PropositionalTruncation as PT
open PT using ( ∥_∥₁; ∣_∣₁ )
open import Cubical.HITs.CumulativeHierarchy.Base using ( V; _∈_ )
open import Cubical.HITs.CumulativeHierarchy.Properties using ( ⟪_⟫ )
open import Cubical.HITs.CumulativeHierarchy.Constructions
  using ( module InfinitySet )
open InfinitySet using ( sucV )

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

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

private
  sh2 :  {n}  Fin n  Fin (suc (suc n))
  sh2 i = suc (suc i)

  sh3 :  {n}  Fin n  Fin (suc (suc (suc n)))
  sh3 i = suc (suc (suc i))

  sh6 :  {n}  Fin n  Fin (suc (suc (suc (suc (suc (suc n))))))
  sh6 i = suc (suc (suc (suc (suc (suc i)))))

  iTow iRel iCod iOrd iNil
    :  {n}  Fin (suc (suc (suc (suc (suc (suc n))))))
  iTow = suc (suc (suc (suc (suc zero))))
  iRel = suc (suc (suc zero))
  iCod = suc (suc zero)
  iOrd = suc zero
  iNil = zero

描述所绑定的诸元素

六个集合中有两个是从阶段算出来的:那里的塔,以及它的可定义子集。二者都是模型的元素,亦即一个集合与一份「它是可构造的」的证明所成的对,且二者都在被造出之处封印,各配一条读式说出它的集合那一半是什么。这正是诞生描述实测为 178 秒对 2 秒的那条定律,而那次实测没有任何一处是它自己所特有的:一个抵达满足关系内部某个槽位的元素,每次那个满足关系被读时都会被转换检查展开,而封印正是止住这件事的东西。

-- perf: the elements the step description binds are sealed where they are built,
-- as the birth description's were (measured there at 178 s against 2 s)
opaque
  towerS : (β : V )  IsOrd β  S
  towerS β ob = LsetS β ob

  towerS-fst : (β : V ) (ob : IsOrd β)  fst (towerS β ob)  Lset β
  towerS-fst β ob = refl

  powS : (β : V )  IsOrd β  S
  powS β ob = 𝒟ₒS β ob

  powS-fst : (β : V ) (ob : IsOrd β)  fst (powS β ob)  𝒟ₒ (Lset β)
  powS-fst β ob = refl

那条描述

六个绑定,其次序恰是每一条条件能被陈述出来的次序。第一个绑定槽位 d 处的,抵达它的办法是抵达层级的唯一办法,即经序列那一章的图。第二个经幂集那一章的 DefAt 绑定它的可定义子集,并要求被比较的那两个集合落在其中:那一步的两个隶属分量正是这样得到的,因为下一个阶段的成员恰恰就是这一个阶段的可定义子集,无须另立引理。第三个绑定表在 d 处的取值,说成槽位 f 的一次应用,正是这一点使那条描述读在调用方所持的任意一张表上、而不是读在某张被点名的表上。第四个经上一章的 CodesAt 绑定塔之上的码集,而那条描述当初就是为这个槽位写的。

最后两个绑定用对象等词钉住常量,因为已内化的那一步取七个槽位,而槽位持有的是变元:诸码之上的序,以及空字母表处的码集,后者正是说出一个骨架无参的那一个。二者都是模型的特定集合,二者在被造出之处都已封印,钉住它们各花一个合取项。

整条公式被封印。它在下游被读在诸常元上,而那正是族那一章实测为 376 秒对 3.8 秒的定律。

-- perf: the description is read at constants, so it is sealed where it is built
opaque
  Stp :  {n}  Fin n  Fin n  Fin n  Fin n  Formula S n
  Stp d f u v =
    ∃̇ ( LsetGraphAt zero (suc d)
      ∧̇ ∃̇ ( DefAt zero (suc zero)
           ∧̇ ( (var (sh2 u) ∈̇ var zero)
             ∧̇ ( (var (sh2 v) ∈̇ var zero)
               ∧̇ ∃̇ ( appAt (sh3 f) (sh3 d) zero
                    ∧̇ ∃̇ ( CodesAt zero (sh3 zero)
                         ∧̇ ∃̇ ( (var zero  con codeOrder)
                              ∧̇ ∃̇ ( (var zero  con (AllCodes ∅ʟ))
                                   ∧̇ StepAt iOrd iRel iTow iCod iNil
                                       (sh6 u) (sh6 v) ) ) ) ) ) ) ) )

六个绑定,逐层展开

合取之下的六个存在绑定展开成六层嵌套的截断,而那两条读式沿相反方向走这层嵌套。每一层都取一个名字,从 OneSix,于是两条读式都不必把嵌套写开,且每个截断载荷都有名字,而那是关于载荷的常设定律。

StepHolds 是最里面那一层,即已内化的那一步在那六个被绑定的元素处的满足关系,而它被封印。这是本章头一回实测出的一条定律,也正是本章跑得完与跑不完之别。那一步的适足性是在一个对那些元素保持通用的框架上证出的;把那个框架实例化到本描述所绑定的具体元素上,会迫使那个框架的结论类型被正规化,而不封印时它跑不完 (超过 200 秒,对全章封印后的 7 秒)。这条规矩与诸描述自身所守的是同一条,只是被施用在高一层:一个框架所结论于其中的类型,要在它被造出之处封印

module Reading {n : } (d f u v : Fin n) (γ : S ^ n)
               (od : IsOrd (fst (lookup d γ))) where
  private
    δ : V 
    δ = fst (lookup d γ)

    ordW : SWO  Lset δ 
    ordW = carry (Lset δ) (orderAt δ od)

    module NM = Naming (Lset δ) ordW

    Goal : Type (ℓ-suc )
    Goal =  Under δ (stepOrder δ od) (fst (lookup u γ)) (fst (lookup v γ)) ∥₁

    -- perf: the type the step adequacy concludes in is sealed where it is built;
    -- unsealed, instantiating the frame at the concrete elements this description
    -- binds does not finish (over 200 s against 7 s for the whole chapter)
    opaque
      StepHolds : (tw pw rl cs ro c0 : S)  Type (ℓ-suc )
      StepHolds tw pw rl cs ro c0 =
         (c0  ro  cs  rl  pw  tw  γ)
           StepAt iOrd iRel iTow iCod iNil (sh6 u) (sh6 v) 

    Six : (tw pw rl cs ro c0 : S)  Type (ℓ-suc )
    Six tw pw rl cs ro c0 =
         (c0  ro  cs  rl  pw  tw  γ)  (var zero  con (AllCodes ∅ʟ)) 
      × StepHolds tw pw rl cs ro c0

    Five : (tw pw rl cs ro : S)  Type (ℓ-suc )
    Five tw pw rl cs ro =
         (ro  cs  rl  pw  tw  γ)  (var zero  con codeOrder) 
      ×  (Σ[ c0  S ] Six tw pw rl cs ro c0) ∥₁

    Four : (tw pw rl cs : S)  Type (ℓ-suc )
    Four tw pw rl cs =
         (cs  rl  pw  tw  γ)  CodesAt zero (sh3 zero) 
      ×  (Σ[ ro  S ] Five tw pw rl cs ro) ∥₁

    Three : (tw pw rl : S)  Type (ℓ-suc )
    Three tw pw rl =
         (rl  pw  tw  γ)  appAt (sh3 f) (sh3 d) zero 
      ×  (Σ[ cs  S ] Four tw pw rl cs) ∥₁

    Two : (tw pw : S)  Type (ℓ-suc )
    Two tw pw =
         (pw  tw  γ)  DefAt zero (suc zero) 
      × (  fst (lookup u γ)  fst pw 
        × (  fst (lookup v γ)  fst pw 
          ×  (Σ[ rl  S ] Three tw pw rl) ∥₁ ) )

    One : (tw : S)  Type (ℓ-suc )
    One tw =  (tw  γ)  LsetGraphAt zero (suc d) 
           ×  (Σ[ pw  S ] Two tw pw) ∥₁

阶段处的那一步之适足性

Slots 是那一步的适足性的全部六个实参被供给之处,而它对那六个集合保持通用,每一个都带着自己的定义方程作为假设。载体是阶段处的塔,其上的良序就是本部那一族在那里给出的那个;码那一侧由极限那一章的序连同它的两条表示引理填上,而那两条已被族那一章做成无条件的;参数那一侧由表在描述所绑定的那个取值处的诸读式填上,而这正是步进参数自己那条假设被花掉之处。其余五个实参是钉住五个槽位的那些等式,此外别无所用。

出来的是最里那一层的两条读式,以及在它们两侧、框架对「是最小名字」的写法与步进那一章所导出的谓词之间的两次翻译。那两次翻译不过是在两个分量上各作一次 sym,但它们被安置在此处,即名字仍是变元之处,而不是安置在调用处,即名字是最小名字搜寻之取值之处。

  module Slots (tw pw rl cs ro c0 : S)
               (qtw : fst tw  Lset δ)
               (hrel : IsRel δ rl)
               (qcs : fst cs  fst (AllCodes (LsetS δ od)))
               (qro : fst ro  fst codeOrder)
               (qc0 : fst c0  fst (AllCodes ∅ʟ)) where
    private
      module A6 = At (Lset δ) (snd (LsetS δ od)) ordW
      module L6 = A6.Least codeOrder rl codeOrder-rep codeOrder-fill
                    (ixRel-rep δ od rl hrel) (ixRel-fill δ od rl hrel)
      module St = L6.Step iOrd iRel iTow iCod iNil (sh6 u) (sh6 v)
        (c0  ro  cs  rl  pw  tw  γ)
        qro refl (Σ≡Prop  x  snd (isL x)) qtw) qcs qc0

    LeastFst : NM.Name  Type (ℓ-suc )
    LeastFst = St.LeastOf (sh6 u)

    LeastSnd : NM.Name  Type (ℓ-suc )
    LeastSnd = St.LeastOf (sh6 v)

    leastFst-in : (t : NM.Name)
                 IsLeastName δ ordW t (fst (lookup u γ))  LeastFst t
    leastFst-in t (q , mn) = sym q , λ t' q'  mn t' (sym q')

    leastSnd-in : (t : NM.Name)
                 IsLeastName δ ordW t (fst (lookup v γ))  LeastSnd t
    leastSnd-in t (q , mn) = sym q , λ t' q'  mn t' (sym q')

    leastFst-out : (t : NM.Name)
                  LeastFst t  IsLeastName δ ordW t (fst (lookup u γ))
    leastFst-out t (q , mn) = sym q , λ t' q'  mn t' (sym q')

    leastSnd-out : (t : NM.Name)
                  LeastSnd t  IsLeastName δ ordW t (fst (lookup v γ))
    leastSnd-out t (q , mn) = sym q , λ t' q'  mn t' (sym q')

    opaque
      unfolding StepHolds

      holds-in : (t₁ t₂ : NM.Name)  LeastFst t₁  LeastSnd t₂  NM._≺ₙ_ t₁ t₂
                StepHolds tw pw rl cs ro c0
      holds-in = St.StepAt-fill

      holds-out : StepHolds tw pw rl cs ro c0
                  Σ[ t₁  NM.Name ] Σ[ t₂  NM.Name ]
                      (LeastFst t₁ × (LeastSnd t₂ × NM._≺ₙ_ t₁ t₂)) ∥₁
      holds-out = St.StepAt-read

拆开

atAll 取那六个集合与六个绑定所持有的一切,交回元层面的那一步。塔的图把第一个集合钉在塔上,可定义子集那条描述把第二个钉在它的可定义子集上,而这两条等式合起来把两个隶属合取项变成对下一个阶段的隶属,那正是元层面那一步的两个分量。f 处的应用变成表中的一个对,那正是步进参数那条假设所消费的东西,且它是在描述所绑定的那个取值处被消费的,而不是在调用方所选的某个取值处:这正是那条假设为何要对表在那里记录的每一个取值作全称。码集那条读式钉住第四个,而被钉住的两个常量本身就是等式。随后,框架的读式给出两个名字,即那两个集合各自的最小名字,连同它们之间的命名比较,而步进那一章自己的读式把它变成阶段处的那次比较。

  private
    atAll : (tw pw rl cs ro c0 : S)
            (tw  γ)  LsetGraphAt zero (suc d) 
            (pw  tw  γ)  DefAt zero (suc zero) 
            fst (lookup u γ)  fst pw 
            fst (lookup v γ)  fst pw 
            (rl  pw  tw  γ)  appAt (sh3 f) (sh3 d) zero 
            (cs  rl  pw  tw  γ)  CodesAt zero (sh3 zero) 
           ((r : S)   pr δ (fst r)  fst (lookup f γ)   IsRel δ r)
           fst ro  fst codeOrder
           fst c0  fst (AllCodes ∅ʟ)
           StepHolds tw pw rl cs ro c0  Goal
    atAll tw pw rl cs ro c0 hg hdef hu hv happ hcs vals qro qc0 hstep =
      PT.map atNames (K.holds-out hstep)
      where
      qtw : fst tw  Lset δ
      qtw = Lset-only zero (suc d) (tw  γ) hg od

      qpw : fst pw  𝒟ₒ (Lset δ)
      qpw = subst ⟨_⟩ (DefAt-stage δ od zero (suc zero) (pw  tw  γ) qtw) hdef

      inSuc : (x : V )   x  fst pw    x  Lset (sucV δ) 
      inSuc x h = subst  z   x  z ) (sym (Lset-suc δ))
        (subst  z   x  z ) qpw h)

      a : New δ
      a = fst (lookup u γ) , inSuc (fst (lookup u γ)) hu

      b : New δ
      b = fst (lookup v γ) , inSuc (fst (lookup v γ)) hv

      hrel : IsRel δ rl
      hrel = vals rl
        (subst ⟨_⟩ (appAt-adequate (sh3 f) (sh3 d) zero (rl  pw  tw  γ)) happ)

      qcs : fst cs  fst (AllCodes (LsetS δ od))
      qcs = cong fst (CodesAt-out (LsetS δ od) zero (sh3 zero)
              (cs  rl  pw  tw  γ) qtw hcs)

      module K = Slots tw pw rl cs ro c0 qtw hrel qcs qro qc0

      atNames : Σ[ t₁  NM.Name ] Σ[ t₂  NM.Name ]
                  ( K.LeastFst t₁ × ( K.LeastSnd t₂ × NM._≺ₙ_ t₁ t₂ ) )
               Under δ (stepOrder δ od) (fst (lookup u γ)) (fst (lookup v γ))
      atNames (t₁ , (t₂ , (l₁ , (l₂ , lt)))) =
          a .snd
        , ( b .snd
          , stepAt-fill δ ordW a b t₁ t₂
              (K.leastFst-out t₁ l₁) (K.leastSnd-out t₂ l₂) lt )

装回

另一个方向选定那六个集合并交割那六条条件。塔与它的可定义子集就是那两个被封印的元素,它们的条件是序列那一章的「这是那座塔」与幂集那一章的「这是它的可定义子集」,各由一条等式读出。表的取值是调用方交来的那一个,码集则是上一章那条描述所雕出的那一个,故它的条件就是那条描述读在那座塔上。两个常量由 refl 钉住,因为被绑定的元素就是那个常量本身。最里面那个合取项是框架的另一条读式,施于步进那一章的搜寻交回的两个最小名字,以及步进那一章由阶段处的比较读出的那次命名比较。

  module Pack (rl : S) (hpr :  pr δ (fst rl)  fst (lookup f γ) )
              (hrel : IsRel δ rl)
              (hx :  fst (lookup u γ)  Lset (sucV δ) )
              (hy :  fst (lookup v γ)  Lset (sucV δ) )
              where
    private
      module K = Slots (towerS δ od) (powS δ od) rl (AllCodes (LsetS δ od))
                   codeOrder (AllCodes ∅ʟ) (towerS-fst δ od) hrel refl refl refl

      a : New δ
      a = fst (lookup u γ) , hx

      b : New δ
      b = fst (lookup v γ) , hy

      n₁ : Σ[ t  NM.Name ] IsLeastName δ ordW t (fst (lookup u γ))
      n₁ = leastNameOf δ ordW a

      n₂ : Σ[ t  NM.Name ] IsLeastName δ ordW t (fst (lookup v γ))
      n₂ = leastNameOf δ ordW b

      hg :  (towerS δ od  γ)  LsetGraphAt zero (suc d) 
      hg = Lset-defines zero (suc d) (towerS δ od  γ) od (towerS-fst δ od)

      hdef :  (powS δ od  towerS δ od  γ)  DefAt zero (suc zero) 
      hdef = subst ⟨_⟩
        (sym (DefAt-stage δ od zero (suc zero)
                (powS δ od  towerS δ od  γ) (towerS-fst δ od)))
        (powS-fst δ od)

      inPow : (x : V )   x  Lset (sucV δ)    x  fst (powS δ od) 
      inPow x h = subst  z   x  z ) (sym (powS-fst δ od))
        (subst  z   x  z ) (Lset-suc δ) h)

      happ :  (rl  powS δ od  towerS δ od  γ)
               appAt (sh3 f) (sh3 d) zero 
      happ = subst ⟨_⟩
        (sym (appAt-adequate (sh3 f) (sh3 d) zero
                (rl  powS δ od  towerS δ od  γ))) hpr

      hcs :  (AllCodes (LsetS δ od)  rl  powS δ od  towerS δ od  γ)
              CodesAt zero (sh3 zero) 
      hcs = CodesAt-in (LsetS δ od) zero (sh3 zero)
        (AllCodes (LsetS δ od)  rl  powS δ od  towerS δ od  γ)
        (towerS-fst δ od) refl

      hstep : relOf (stepOrder δ od) a b
             StepHolds (towerS δ od) (powS δ od) rl (AllCodes (LsetS δ od))
                codeOrder (AllCodes ∅ʟ)
      hstep cmp = K.holds-in (n₁ .fst) (n₂ .fst)
        (K.leastFst-in (n₁ .fst) (n₁ .snd)) (K.leastSnd-in (n₂ .fst) (n₂ .snd))
        (stepAt-read δ ordW a b (n₁ .fst) (n₂ .fst) (n₁ .snd) (n₂ .snd) cmp)

    packAll : relOf (stepOrder δ od) a b   (Σ[ tw  S ] One tw) ∥₁
    packAll cmp =
       towerS δ od
      , ( hg
        ,  powS δ od
          , ( hdef
            , ( inPow (fst (lookup u γ)) hx
              , ( inPow (fst (lookup v γ)) hy
                ,  rl
                  , ( happ
                    ,  AllCodes (LsetS δ od)
                      , ( hcs
                        ,  codeOrder
                          , ( refl
                            ,  AllCodes ∅ʟ
                              , ( refl , hstep cmp ) ∣₁ ) ∣₁ ) ∣₁ ) ∣₁ ) ) ) ∣₁ ) ∣₁

两条读式

只有到这里才打开那道封印,且只为那两条读式打开。它们按层剥开那六层,每层一个具名辅助,每一个都把自己的结论写下来。全篇不出现 with:一次结论落在满足关系上的分情形必须是把结论写下来的具名辅助,而那是忠实那一章实测超过 300 秒的定律。导出的 stp-outstp-in 就是那两条读式,其类型正是框架所索取的,且它们承接了框架自身的那份不对称:可靠性对表在该载体处记录的每一个取值作全称,因为它所读的那条描述可能自己绑定了一个取值;而完备性取的是调用方据以实现的那单个取值。

  opaque
    unfolding Stp StepHolds

    read : ((r : S)   pr δ (fst r)  fst (lookup f γ)   IsRel δ r)
           γ  Stp d f u v   Goal
    read vals = PT.rec PT.squash₁ atOne
      where
      atSix : (tw pw rl cs ro c0 : S)
              (tw  γ)  LsetGraphAt zero (suc d) 
              (pw  tw  γ)  DefAt zero (suc zero) 
              fst (lookup u γ)  fst pw 
              fst (lookup v γ)  fst pw 
              (rl  pw  tw  γ)  appAt (sh3 f) (sh3 d) zero 
              (cs  rl  pw  tw  γ)  CodesAt zero (sh3 zero) 
             fst ro  fst codeOrder
             Six tw pw rl cs ro c0  Goal
      atSix tw pw rl cs ro c0 hg hdef hu hv happ hcs qro (qc0 , hstep) =
        atAll tw pw rl cs ro c0 hg hdef hu hv happ hcs vals qro qc0 hstep

      atFive : (tw pw rl cs ro : S)
               (tw  γ)  LsetGraphAt zero (suc d) 
               (pw  tw  γ)  DefAt zero (suc zero) 
               fst (lookup u γ)  fst pw 
               fst (lookup v γ)  fst pw 
               (rl  pw  tw  γ)  appAt (sh3 f) (sh3 d) zero 
               (cs  rl  pw  tw  γ)  CodesAt zero (sh3 zero) 
              Five tw pw rl cs ro  Goal
      atFive tw pw rl cs ro hg hdef hu hv happ hcs (qro , h) =
        PT.rec PT.squash₁
           { (c0 , hsix) 
                 atSix tw pw rl cs ro c0 hg hdef hu hv happ hcs qro hsix }) h

      atFour : (tw pw rl cs : S)
               (tw  γ)  LsetGraphAt zero (suc d) 
               (pw  tw  γ)  DefAt zero (suc zero) 
               fst (lookup u γ)  fst pw 
               fst (lookup v γ)  fst pw 
               (rl  pw  tw  γ)  appAt (sh3 f) (sh3 d) zero 
              Four tw pw rl cs  Goal
      atFour tw pw rl cs hg hdef hu hv happ (hcs , h) =
        PT.rec PT.squash₁
           { (ro , hfive) 
                 atFive tw pw rl cs ro hg hdef hu hv happ hcs hfive }) h

      atThree : (tw pw rl : S)
                (tw  γ)  LsetGraphAt zero (suc d) 
                (pw  tw  γ)  DefAt zero (suc zero) 
                fst (lookup u γ)  fst pw 
                fst (lookup v γ)  fst pw 
               Three tw pw rl  Goal
      atThree tw pw rl hg hdef hu hv (happ , h) =
        PT.rec PT.squash₁
           { (cs , hfour) 
                 atFour tw pw rl cs hg hdef hu hv happ hfour }) h

      atTwo : (tw pw : S)   (tw  γ)  LsetGraphAt zero (suc d) 
             Two tw pw  Goal
      atTwo tw pw hg (hdef , (hu , (hv , h))) =
        PT.rec PT.squash₁
           { (rl , hthree)  atThree tw pw rl hg hdef hu hv hthree }) h

      atOne : Σ[ tw  S ] One tw  Goal
      atOne (tw , (hg , h)) =
        PT.rec PT.squash₁  { (pw , htwo)  atTwo tw pw hg htwo }) h

    fill : (r : S)   pr δ (fst r)  fst (lookup f γ)   IsRel δ r
          Under δ (stepOrder δ od) (fst (lookup u γ)) (fst (lookup v γ))
           γ  Stp d f u v 
    fill r hpr hrel (hx , (hy , cmp)) = Pack.packAll r hpr hrel hx hy cmp
stp-out :  {n} (d f u v : Fin n) (γ : S ^ n) (od : IsOrd (fst (lookup d γ)))
         ((r : S)   pr (fst (lookup d γ)) (fst r)  fst (lookup f γ) 
            IsRel (fst (lookup d γ)) r)
          γ  Stp d f u v 
          Under (fst (lookup d γ)) (stepOrder (fst (lookup d γ)) od)
              (fst (lookup u γ)) (fst (lookup v γ)) ∥₁
stp-out = Reading.read

stp-in :  {n} (d f u v : Fin n) (γ : S ^ n) (od : IsOrd (fst (lookup d γ)))
        (r : S)   pr (fst (lookup d γ)) (fst r)  fst (lookup f γ) 
        IsRel (fst (lookup d γ)) r
        Under (fst (lookup d γ)) (stepOrder (fst (lookup d γ)) od)
           (fst (lookup u γ)) (fst (lookup v γ))
         γ  Stp d f u v 
stp-in = Reading.fill

框架被打开

一行。它供给那个框架的最后一个参数,随之,整张序之表变成无条件的。说白了,以下诸条如今在本部那条常设假设 (排中律) 之外不带任何假设即成立:

  • 出自 L.Choice.FaithfulCondCore 连同它的两条读式、CondCond₀cond-speccond₀-spec,亦即阶段处的序被完整描述出来,且以表的构造所索取的两种形式给出;
  • 出自 L.Choice.Table:步进条件 StepAt 连同 step-relstep-table;逼近 ApproxAt 与图 GraphAt 连同它们的诸读式、approx-valapprox-uniqgraph-onlygraph-tablePairGraphAtRecordedIsTableBundletable-outtable-inbound;构造 tableAt 自身;以及它在每个序数处所携带的那个关系,即 relLrelL-spec,连同全部四条表示引理 relL-fillrelL-repix-fillix-rep

这一点是按重切验证它自己那条主张的办法验证的:把诸结果引入一个除排中律外不假设任何东西的临时模块,逐条按手写出来的类型重述,再用它们推出「界层序数处的序是模型的一个元素,且其隶属是非自反的」。那个探针随后被删除。

open Ordered Stp stp-out stp-in public

界层序数处的序

最后一章要的是一个特定的实例,且要一个特定的形状。给定 L 的一个集合,阶段那一章的界层序数是一个高于该集合自身阶段的序数,从而高于它的成员及其成员,也高于 ω。它是可构造的,因为一个序数现身于自身之后的那个阶段。于是那一族在那里的塔的诸成员上有一个序,而表把那个序作为模型的一个元素握在手里,两条表示引理则把对该元素的隶属与元层面的比较双向读通。这个三元组,即那个元素与它的两条引理,正是一次分离将要据以施行的东西。

module Bound (a : V ) (p :  isL a ) where
  boundOrd : V 
  boundOrd = stageBound a p .fst

  boundOrd-ord : IsOrd boundOrd
  boundOrd-ord = stageBound a p .snd .fst

  boundOrd-isL :  isL boundOrd 
  boundOrd-isL = Lset→isL (sucV boundOrd) (suc-ord boundOrd-ord) boundOrd
    (ord∈Lset-suc boundOrd boundOrd-ord)

  boundOrder : SWO (Mem (Lset boundOrd))
  boundOrder = orderAt boundOrd boundOrd-ord

  orderL : S
  orderL = relL boundOrd boundOrd-isL boundOrd-ord

  orderL-fill : (x y : Mem (Lset boundOrd))  relOf boundOrder x y
                pr (fst x) (fst y)  fst orderL 
  orderL-fill = relL-fill boundOrd boundOrd-isL boundOrd-ord

  orderL-rep : (x y : Mem (Lset boundOrd))
               pr (fst x) (fst y)  fst orderL   relOf boundOrder x y
  orderL-rep = relL-rep boundOrd boundOrd-isL boundOrd-ord

小结

Stp 是被描述出来的那一步:一条被封印的公式,绑定六个集合并钉住两个常量。六个是:阶段处的塔,经序列那一章的图抵达;它的可定义子集,经幂集那一章的 DefAt 抵达,并要求被比较的那两个集合落在其中,那一步的两个隶属分量就是这样到场的,而不必动用谁也没有的一条引理;表在该阶段的取值,说成一次应用抵达,正是这一点使那条描述始终读在调用方所持的任意一张表上;以及塔之上的码集,经上一章的 CodesAt 抵达,而那条描述就是为这个槽位写的。用对象等词钉住的两个是诸码之上的序与空字母表处的码集,因为槽位持有变元,而那两样是特定的集合。落在那七个槽位上的主体就是已内化的那一步。

Reading.readReading.fill 是对那六个绑定的拆开与装回,而 stp-outstp-in 就是这两条落在框架所要类型上的样子。Slots 是那一步的适足性被供给六个实参之处,对那六个集合保持通用、以它们的等式为假设:码那一侧来自极限与族两章,无条件;载体那一侧来自表在所绑定取值处的诸读式,而那正是步进参数自己的假设,也是本章从外面取的唯一输入。

一次实测,且是一条定律在新地方的现身:一个框架所结论于其中的类型,要在它被造出之处封印StepHolds 就是那一步适足性的结论;把那个框架实例化到本描述所绑定的具体元素上会把它正规化,而不封印时那件事跑不完 (超过 200 秒,对全章的 7 秒)。另有两条承袭而来的定律无须新实测即被遵守:抵达诸槽位的元素被封印,而那条描述自身被封印,因为它被读在诸常元上。

open Ordered 就是那一行,随之,序之表变成无条件的:那个构造连同它的全部四条读式,以及两个框架所导出的一切。Bound 是最后一章据以分离的那个形状:L 的一个集合的界层序数、那里的塔的诸成员上的序作为模型的一个元素,以及它的两条表示引理。