The step described, and the table made unconditional

Every chapter of this part has handed its remainder to the next one, and the remainder is now a single formula. The frame that turns the order at a stage from a description into an object (L.Choice.Table's Described, applied through L.Choice.Faithful's Ordered) asks for one thing it does not have: a description of the step, saying of two members of a stage's definable subsets that the naming comparison puts the first before the second.

Everything that description needs is already built. The naming comparison is described in the object language, and its adequacy against the meta comparison is proven, on a frame that hands every relation slot the hypothesis of which order it holds. The code slot of that frame is filled unconditionally by the order on the limit stage. The carrier slot is filled by the table's own readings, and those readings were restated at "whatever realizes the class", which is exactly what the step parameter is handed. So the two ends meet, and this chapter is assembly: no new idea, only the writing down.

The description binds six sets and pins two constants. The six are the tower at the stage, its definable subsets, the table's value at the stage, and the code set over the tower, together with the two pinned ones. The two pinned by an object equality are the order on the codes and the code set at the empty alphabet, because a slot takes a variable and those two are particular sets, not descriptions. The body at those seven slots is the internalized step. Then two readings, by unpacking and packing the six binders, and then one line opens the frame.

{-# 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

The elements the description binds

Two of the six sets are computed from the stage: the tower there, and its definable subsets. Both are elements of the model, that is, pairs of a set and a proof that it is constructible, and both are sealed where they are built, with one reading each saying what the set half is. This is the law the birth description measured at 178 s against 2 s, and nothing about that measurement was local to it: an element that reaches a slot inside a satisfaction is unfolded by conversion every time the satisfaction is read, and the seal is what stops that.

-- 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

The description

Six binders, in the order in which each one's condition can be stated. The first binds the tower at the slot d, reached the only way the hierarchy can be reached, through the sequence chapter's graph. The second binds its definable subsets through the powerset chapter's DefAt, and the two compared sets are required to lie in it: that is how the step's two membership components are obtained, since a member of the next stage is exactly a definable subset of this one, and no separate lemma is needed. The third binds the table's value at d, said as an application of the slot f, which is what makes the description read against whatever table the caller holds rather than against a named one. The fourth binds the code set over the tower through the previous chapter's

CodesAt, which was written for exactly this slot.

The last two binders pin constants by an object equality, because the internalized step takes seven slots and a slot holds a variable: the order on the codes, and the code set at the empty alphabet, which is the one that says a skeleton is parameter-free. Both are particular sets of the model, both are already sealed where they were built, and pinning them costs one conjunct each.

The whole formula is sealed. It is read at constants downstream, and that is the law the family chapter measured at 376 s against 3.8 s.

-- 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) ) ) ) ) ) ) ) )

The six binders, layer by layer

Six existential binders under conjunctions unfold into six nested truncations, and the two readings walk that nesting in opposite directions. Each layer gets a name,

One through Six, so that neither reading ever writes the nesting out and every truncation payload is named, which is the standing law for payloads.

StepHolds is the innermost layer, the satisfaction of the internalized step at the six bound elements, and it is sealed. That is a law measured here for the first time, and it is the difference between this chapter finishing and not finishing. The step adequacy is proved on a frame generic in those elements; instantiating that frame at the concrete elements this description binds forces the frame's conclusion type to be normalized, and unsealed it does not finish (over 200 s, against 7 s for the whole chapter with the seal). The rule is the same one the descriptions themselves obey, applied one level up: the type a frame concludes in is sealed where it is built.

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) ∥₁

The step adequacy at a stage

Slots is where all six arguments of the step adequacy are supplied, and it is generic in the six sets, each carrying its defining equation as a hypothesis. The carrier is the tower at the stage and the well-order on it is the one this part's family gives there; the code side is filled by the limit chapter's order and its two representation lemmas, which the family chapter made unconditional; the parameter side is filled by the table's readings at the value the description binds, which is where the step parameter's own hypothesis is spent. The remaining five arguments are the equations pinning the five slots, and nothing else is used.

What comes out is two readings of the innermost layer and, on either side of them, the two translations between the frame's spelling of "is the least name of" and the step chapter's exported predicate. The translations are only sym on each of two components, but they are placed here, where the name is still a variable, and not at the call sites, where it is the value of the least-name search.

  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

Unpacking

atAll takes the six sets and everything the six binders held, and returns the meta step. The tower's graph pins the first set to the tower, the definable subsets' description pins the second to the definable subsets of it, and those two equations together turn the two membership conjuncts into memberships of the next stage, which is what the meta step's two components are. The application at f turns into a pair in the table, which is what the step parameter's hypothesis consumes, and it is consumed at whatever value the description bound, not at one the caller chose: that is why the hypothesis quantifies over every value the table records there. The code set reading pins the fourth, and the two pinned constants are already equations. Then the frame's reading gives two names, least for the two sets, with the naming comparison between them, and the step chapter's own reading turns that into the comparison at the stage.

  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 )

Packing

The other direction chooses the six sets and discharges the six conditions. The tower and its definable subsets are the sealed elements, and their conditions are the sequence chapter's "this is the tower" and the powerset chapter's "this is the definable subsets of it", each read off a single equation. The table's value is the one the caller hands over, and the code set is the one the previous chapter's description carves, so its condition is that description read at the tower. The two constants are pinned by refl, because the element bound is the constant itself. The innermost conjunct is the frame's other reading, applied to the two least names the step chapter's search returns, and to the naming comparison the step chapter reads off the comparison at the stage.

  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 ) ∣₁ ) ∣₁ ) ∣₁ ) ∣₁ ) ) ) ∣₁ ) ∣₁

The two readings

Only here is the seal opened, and only for the two readings, which peel the six layers by named helpers, one per layer, each with its conclusion written down. No

with appears: a case split concluding in a satisfaction is a named helper with its conclusion written down, and that is the law the faithfulness chapter measured past 300 s. The exported stp-out and stp-in are the two readings at the exact types the frame demands, and they carry the frame's own asymmetry: soundness quantifies over every value the table records at the carrier, because the description it reads may have bound a value of its own, while completeness takes the single value the caller realizes with.

  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

The frame opened

One line. It supplies the frame's last parameter, and with it the whole of the order table becomes unconditional. Said plainly, the following now hold with no hypothesis beyond this part's standing one, excluded middle:

Cond, Cond₀, cond-spec and cond₀-spec, that is, the order at a stage completely described, in both the forms the table's construction asks for;

step-rel and step-table; the approximation ApproxAt

and the graph GraphAt with their readings, approx-val and

approx-uniq, graph-only and graph-table;

PairGraphAt; Recorded, IsTable, Bundle,

table-out, table-in and bound; the construction

tableAt itself; and the relation it carries at every ordinal,

relL and relL-spec, with all four representation lemmas

relL-fill, relL-rep, ix-fill and ix-rep.

This was checked the way the re-cut checked its own claim: the results were imported into a throwaway module assuming nothing but excluded middle, each restated at its type spelled out by hand, and used to derive that the order at the bounding ordinal is an element of the model whose membership is irreflexive. The probe was then deleted.

open Ordered Stp stp-out stp-in public

The order at the bounding ordinal

The last chapter will want one particular instance, in one particular shape. Given a set of L, the stage chapter's bounding ordinal is an ordinal above that set's own stage, hence above its members and their members, and above ω as well. It is constructible, because an ordinal appears at the stage after itself. So the family has an order on the members of the tower there, and the table has that order as an element of the model, with the two representation lemmas reading membership in that element against the meta comparison in both directions. That triple, the element and its two lemmas, is what a separation will be run against.

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

Recap

Stp is the step described: a sealed formula binding six sets and pinning two constants. The six are the tower at the stage, reached through the sequence chapter's graph; its definable subsets, reached through the powerset chapter's DefAt, with the two compared sets required to lie in it, which is how the step's two membership components arrive without a lemma nobody has; the table's value at the stage, reached as an application, which is what keeps the description reading against whatever table the caller holds; and the code set over the tower, reached through the previous chapter's CodesAt, which was written for this slot. The two pinned by an object equality are the order on the codes and the code set at the empty alphabet, because a slot holds a variable and those two are particular sets. The body at those seven slots is the internalized step.

Reading.read and Reading.fill are unpack and pack over the six binders, and stp-out and stp-in are those two at the frame's types. Slots is where the step adequacy is supplied its six arguments, generic in the six sets with their equations as hypotheses: the code side from the limit and family chapters, unconditional; the carrier side from the table's readings at the bound value, which is the step parameter's own hypothesis and the only input this chapter takes from outside.

One measurement, and it is a law at a new place: the type a frame concludes in is sealed where it is built. StepHolds is the step adequacy's conclusion; instantiating the frame at the concrete elements this description binds normalizes it, and unsealed that does not finish (over 200 s, against 7 s for the whole chapter). Two inherited laws are obeyed without new measurement: the elements reaching the slots are sealed, and the description itself is sealed because it is read at constants.

open Ordered is the one line, and with it the order table is unconditional: the construction and all four of its readings, together with everything the two frames export. Bound is the shape the last chapter separates with: the bounding ordinal of a set of L, the order on the members of the tower there as an element of the model, and its two representation lemmas.