We relate the abstract and concrete constructions of ordinal exponentiation.
\begin{code}
{-# OPTIONS --safe --without-K --exact-split --lossy-unification #-}
open import UF.Univalence
open import UF.PropTrunc
open import UF.Size
module Ordinals.Exponentiation.RelatingConstructions
(ua : Univalence)
(pt : propositional-truncations-exist)
(sr : Set-Replacement pt)
where
open import UF.FunExt
open import UF.UA-FunExt
private
fe : FunExt
fe = Univalence-gives-FunExt ua
fe' : Fun-Ext
fe' {𝓤} {𝓥} = fe 𝓤 𝓥
open import MLTT.List
open import MLTT.Spartan
open import UF.Base
open import UF.ImageAndSurjection pt
open import Ordinals.AdditionProperties ua
open import Ordinals.Arithmetic fe
open import Ordinals.Equivalence
open import Ordinals.Maps
open import Ordinals.MultiplicationProperties ua
open import Ordinals.OrdinalOfOrdinals ua
open import Ordinals.OrdinalOfOrdinalsSuprema ua
open import Ordinals.Propositions ua
open import Ordinals.Type
open import Ordinals.Underlying
open import Ordinals.Exponentiation.DecreasingList ua
open import Ordinals.Exponentiation.Supremum ua pt sr
open import Ordinals.Exponentiation.TrichotomousLeastElement ua
open PropositionalTruncation pt
open suprema pt sr
\end{code}
Our first main result is that the abstract and concrete constructions coincide
for base ordinals with a trichotomous least element.
\begin{code}
exponentiation-constructions-agree' : (α β : Ordinal 𝓤)
→ expᴸ[𝟙+ α ] β = (𝟙ₒ +ₒ α) ^ₒ β
exponentiation-constructions-agree' {𝓤} α =
transfinite-induction-on-OO (λ β → expᴸ[𝟙+ α ] β = α' ^ₒ β) I
where
α' = 𝟙ₒ +ₒ α
I : (β : Ordinal 𝓤)
→ ((b : ⟨ β ⟩) → expᴸ[𝟙+ α ] (β ↓ b) = α' ^ₒ (β ↓ b))
→ expᴸ[𝟙+ α ] β = α' ^ₒ β
I β IH = ⊴-antisym (expᴸ[𝟙+ α ] β) (α' ^ₒ β)
(to-⊴ (expᴸ[𝟙+ α ] β) (α' ^ₒ β) II)
(to-⊴ (α' ^ₒ β) (expᴸ[𝟙+ α ] β) III)
where
II : (y : ⟨ expᴸ[𝟙+ α ] β ⟩) → expᴸ[𝟙+ α ] β ↓ y ⊲ α' ^ₒ β
II ([] , δ) = ^ₒ-⊥ α' β ,
(expᴸ[𝟙+ α ] β ↓ ([] , δ) =⟨ expᴸ-↓-⊥' α β ⟩
𝟘ₒ =⟨ (^ₒ-↓-⊥ α' β) ⁻¹ ⟩
α' ^ₒ β ↓ ^ₒ-⊥ α' β ∎)
II (((a , b) ∷ l) , δ) = e' ,
(expᴸ[𝟙+ α ] β ↓ ((a , b ∷ l) , δ) =⟨ II₁ ⟩
expᴸ[𝟙+ α ] (β ↓ b) ×ₒ αₐ +ₒ (expᴸ[𝟙+ α ] (β ↓ b) ↓ l') =⟨ II₂ ⟩
α' ^ₒ (β ↓ b) ×ₒ αₐ +ₒ (expᴸ[𝟙+ α ] (β ↓ b) ↓ l') =⟨ II₃ ⟩
α' ^ₒ (β ↓ b) ×ₒ αₐ +ₒ (α' ^ₒ (β ↓ b) ↓ e) =⟨ II₄ ⟩
α' ^ₒ (β ↓ b) ×ₒ (α' ↓ (inr a)) +ₒ (α' ^ₒ (β ↓ b) ↓ e) =⟨ II₅ ⟩
α' ^ₒ β ↓ e' ∎)
where
αₐ = 𝟙ₒ +ₒ (α ↓ a)
l' = expᴸ-tail α β a b l δ
e = Idtofunₒ (IH b) l'
e' = ×ₒ-to-^ₒ α' β (e , inr a)
II₁ = expᴸ-↓-cons α β a b l δ
II₂ = ap (λ - → - ×ₒ αₐ +ₒ (expᴸ[𝟙+ α ] (β ↓ b) ↓ l'))
(IH b)
II₃ = ap (α' ^ₒ (β ↓ b) ×ₒ αₐ +ₒ_)
(Idtofunₒ-↓-lemma (IH b))
II₄ = ap (λ - → α' ^ₒ (β ↓ b) ×ₒ - +ₒ (α' ^ₒ (β ↓ b) ↓ e))
(+ₒ-↓-right a)
II₅ = (^ₒ-↓-×ₒ-to-^ₒ α' β) ⁻¹
III : (y : ⟨ α' ^ₒ β ⟩) → α' ^ₒ β ↓ y ⊲ expᴸ[𝟙+ α ] β
III y = ∥∥-rec
(⊲-is-prop-valued (α' ^ₒ β ↓ y) (expᴸ[𝟙+ α ] β))
IV
(^ₒ-↓ α' β)
where
IV : (α' ^ₒ β ↓ y = 𝟘ₒ)
+ (Σ b ꞉ ⟨ β ⟩ , Σ e ꞉ ⟨ α' ^ₒ (β ↓ b) ⟩ , Σ x ꞉ ⟨ α' ⟩ ,
α' ^ₒ β ↓ y = α' ^ₒ (β ↓ b) ×ₒ (α' ↓ x) +ₒ (α' ^ₒ (β ↓ b) ↓ e))
→ α' ^ₒ β ↓ y ⊲ (expᴸ[𝟙+ α ] β)
IV (inl p) = expᴸ-⊥ α β ,
(α' ^ₒ β ↓ y =⟨ p ⟩
𝟘ₒ =⟨ (expᴸ-↓-⊥ α β) ⁻¹ ⟩
expᴸ[𝟙+ α ] β ↓ expᴸ-⊥ α β ∎)
IV (inr (b , e , inl ⋆ , p)) = l₂ ,
(α' ^ₒ β ↓ y =⟨ p ⟩
α' ^ₒ (β ↓ b) ×ₒ (α' ↓ inl ⋆) +ₒ (α' ^ₒ (β ↓ b) ↓ e) =⟨ IV₁ ⟩
α' ^ₒ (β ↓ b) ×ₒ (𝟙ₒ ↓ ⋆) +ₒ (α' ^ₒ (β ↓ b) ↓ e) =⟨ IV₂ ⟩
α' ^ₒ (β ↓ b) ×ₒ 𝟘ₒ +ₒ (α' ^ₒ (β ↓ b) ↓ e) =⟨ IV₃ ⟩
𝟘ₒ +ₒ (α' ^ₒ (β ↓ b) ↓ e) =⟨ IV₄ ⟩
α' ^ₒ (β ↓ b) ↓ e =⟨ IV₅ ⟩
(expᴸ[𝟙+ α ] (β ↓ b)) ↓ l₁ =⟨ IV₆ ⟩
expᴸ[𝟙+ α ] β ↓ l₂ ∎)
where
σ : expᴸ[𝟙+ α ] (β ↓ b) ⊴ expᴸ[𝟙+ α ] β
σ = expᴸ-segment-inclusion-⊴ α β b
l₁ = Idtofunₒ (IH b ⁻¹) e
l₂ = [ expᴸ[𝟙+ α ] (β ↓ b) , expᴸ[𝟙+ α ] β ]⟨ σ ⟩ l₁
IV₁ = ap (λ - → α' ^ₒ (β ↓ b) ×ₒ - +ₒ (α' ^ₒ (β ↓ b) ↓ e))
((+ₒ-↓-left ⋆) ⁻¹)
IV₂ = ap (λ - → α' ^ₒ (β ↓ b) ×ₒ - +ₒ (α' ^ₒ (β ↓ b) ↓ e)) 𝟙ₒ-↓
IV₃ = ap (_+ₒ (α' ^ₒ (β ↓ b) ↓ e)) (×ₒ-𝟘ₒ-right (α' ^ₒ (β ↓ b)))
IV₄ = 𝟘ₒ-left-neutral (α' ^ₒ (β ↓ b) ↓ e)
IV₅ = Idtofunₒ-↓-lemma (IH b ⁻¹)
IV₆ = simulations-preserve-↓ (expᴸ[𝟙+ α ] (β ↓ b)) (expᴸ[𝟙+ α ] β) σ l₁
IV (inr (b , e , inr a , p)) = l₂ ,
(α' ^ₒ β ↓ y =⟨ p ⟩
α' ^ₒ (β ↓ b) ×ₒ (α' ↓ inr a) +ₒ (α' ^ₒ (β ↓ b) ↓ e) =⟨ IV₁ ⟩
α' ^ₒ (β ↓ b) ×ₒ αₐ +ₒ (α' ^ₒ (β ↓ b) ↓ e) =⟨ IV₂ ⟩
α' ^ₒ (β ↓ b) ×ₒ αₐ +ₒ (expᴸ[𝟙+ α ] (β ↓ b) ↓ l₁) =⟨ IV₃ ⟩
expᴸ[𝟙+ α ] (β ↓ b) ×ₒ αₐ +ₒ (expᴸ[𝟙+ α ] (β ↓ b) ↓ l₁) =⟨ IV₄ ⟩
expᴸ[𝟙+ α ] β ↓ l₂ ∎)
where
αₐ = 𝟙ₒ +ₒ (α ↓ a)
l₁ = Idtofunₒ (IH b ⁻¹) e
l₂ = extended-expᴸ-segment-inclusion α β b l₁ a
IV₁ = ap (λ - → α' ^ₒ (β ↓ b) ×ₒ - +ₒ (α' ^ₒ (β ↓ b) ↓ e))
((+ₒ-↓-right a) ⁻¹)
IV₂ = ap (α' ^ₒ (β ↓ b) ×ₒ αₐ +ₒ_)
(Idtofunₒ-↓-lemma (IH b ⁻¹))
IV₃ = ap (λ - → - ×ₒ αₐ +ₒ (expᴸ[𝟙+ α ] (β ↓ b) ↓ l₁)) (IH b ⁻¹)
IV₄ = expᴸ-↓-cons' α β a b l₁ ⁻¹
exponentiation-constructions-agree
: (α β : Ordinal 𝓤) (h : has-trichotomous-least-element α)
→ exponentiationᴸ α h β = α ^ₒ β
exponentiation-constructions-agree α β h =
exponentiationᴸ α h β =⟨ refl ⟩
expᴸ[𝟙+ α⁺ ] β =⟨ I ⟩
(𝟙ₒ +ₒ α⁺) ^ₒ β =⟨ II ⟩
α ^ₒ β ∎
where
α⁺ = α ⁺[ h ]
I = exponentiation-constructions-agree' α⁺ β
II = ap (_^ₒ β) ((α ⁺[ h ]-part-of-decomposition) ⁻¹)
\end{code}
There is a canonical function f_β : DecrList₂ α β → α ^ₒ β defined by
transfinite induction on β as
f_β [] := ⊥
f_β ((a , b) ∷ l) := [inr b , f_{β ↓ b} l' , a]
where
l' : DecrList₂ α (β ↓ b)
is obtained from l and the fact that the list (a , b) ∷ l is decreasing in the
second component.
We show that this map is a surjection, which motivates and allows us to think of
lists in DecrList₂ α β as concrete representations of (abstract) elements of
α ^ₒ β. Put differently, such a list denotes the abstract element.
We furthermore state and prove precisely how this canonical function f_β relates
to the simulation induced by the identification
exponentiationᴸ α h β = α ^ₒ β
obtained above.
\begin{code}
module denotations
(α : Ordinal 𝓤)
where
abstract
private
denotation-body : (β : Ordinal 𝓥)
→ ((b : ⟨ β ⟩) → DecrList₂ α (β ↓ b) → ⟨ α ^ₒ (β ↓ b) ⟩)
→ DecrList₂ α β → ⟨ α ^ₒ β ⟩
denotation-body β r ([] , δ) = ^ₒ-⊥ α β
denotation-body β r (((a , b) ∷ l) , δ) = ×ₒ-to-^ₒ α β
(r b (expᴸ-tail α β a b l δ) , a)
denotation : (β : Ordinal 𝓥) → DecrList₂ α β → ⟨ α ^ₒ β ⟩
denotation =
transfinite-induction-on-OO (λ β → DecrList₂ α β → ⟨ α ^ₒ β ⟩) denotation-body
syntax denotation β l = ⟦ l ⟧⟨ β ⟩
denotation-behaviour
: (β : Ordinal 𝓥)
→ denotation β = denotation-body β (λ b → denotation (β ↓ b))
denotation-behaviour =
transfinite-induction-on-OO-behaviour
(λ β → DecrList₂ α β → ⟨ α ^ₒ β ⟩)
denotation-body
⟦⟧-behaviour-cons : (β : Ordinal 𝓥)
(a : ⟨ α ⟩) (b : ⟨ β ⟩)
(l : List ⟨ α ×ₒ β ⟩)
(δ : is-decreasing-pr₂ α β ((a , b) ∷ l))
→ ⟦ ((a , b) ∷ l) , δ ⟧⟨ β ⟩
= ×ₒ-to-^ₒ α β (⟦ expᴸ-tail α β a b l δ ⟧⟨ β ↓ b ⟩ , a)
⟦⟧-behaviour-cons β a b l δ =
happly (denotation-behaviour β) (((a , b) ∷ l) , δ)
⟦⟧-behaviour-[] : (β : Ordinal 𝓥) → ⟦ [] , []-decr ⟧⟨ β ⟩ = ^ₒ-⊥ α β
⟦⟧-behaviour-[] β = happly (denotation-behaviour β) ([] , []-decr)
⟦⟧-is-surjection : (β : Ordinal 𝓥) → is-surjection (denotation β)
⟦⟧-is-surjection =
transfinite-induction-on-OO (λ β → is-surjection (denotation β)) I
where
I : (β : Ordinal 𝓥)
→ ((b : ⟨ β ⟩) → is-surjection (denotation (β ↓ b)))
→ is-surjection (denotation β)
I β IH =
^ₒ-induction α β
(λ (e : ⟨ α ^ₒ β ⟩) → ∃ l ꞉ DecrList₂ α β , ⟦ l ⟧⟨ β ⟩ = e)
(λ e → ∃-is-prop)
∣ ([] , []-decr) , ⟦⟧-behaviour-[] β ∣
II
where
II : (b : ⟨ β ⟩) (y : ⟨ α ^ₒ (β ↓ b) ×ₒ α ⟩)
→ ×ₒ-to-^ₒ α β y ∈image (denotation β)
II b (e , a) = ∥∥-functor III (IH b e)
where
III : (Σ ℓ ꞉ DecrList₂ α (β ↓ b) , ⟦ ℓ ⟧⟨ β ↓ b ⟩ = e)
→ Σ l ꞉ DecrList₂ α β , ⟦ l ⟧⟨ β ⟩ = ×ₒ-to-^ₒ α β (e , a)
III ((ℓ , δ) , refl) = (((a , b) ∷ ℓ') , ε) , IV
where
ℓ' : List ⟨ α ×ₒ β ⟩
ℓ' = expᴸ-segment-inclusion-list α β b ℓ
ε : is-decreasing-pr₂ α β ((a , b) ∷ ℓ')
ε = extended-expᴸ-segment-inclusion-is-decreasing-pr₂ α β b ℓ a δ
IV = ⟦ ((a , b) ∷ ℓ') , ε ⟧⟨ β ⟩ =⟨ IV₁ ⟩
×ₒ-to-^ₒ α β (⟦ expᴸ-tail α β a b ℓ' ε ⟧⟨ β ↓ b ⟩ , a) =⟨ IV₂ ⟩
×ₒ-to-^ₒ α β (⟦ ℓ , δ ⟧⟨ β ↓ b ⟩ , a) ∎
where
IV₁ = ⟦⟧-behaviour-cons β a b ℓ' ε
IV₂ = ap (λ - → ×ₒ-to-^ₒ α β (denotation (β ↓ b) - , a))
(expᴸ-segment-inclusion-section-of-expᴸ-tail α β a b ℓ δ)
\end{code}
The equality exponentiationᴸ α β = α ^ₒ β, for α decomposable as α = 𝟙ₒ +ₒ α⁺,
induces a simulation, and in particular a map
g_β : DecrList α⁺ β → α ^ₒ β.
Put differently, for an arbitrary ordinal α, and writing α' = 𝟙ₒ +ₒ α, we obtain
a map
g_β : DecrList α β → α' ^ₒ β
We now show that this function is closely related to the above denotation
function, although this requires a new denotation function which has codomain
α' ^ₒ β.
\begin{code}
private
α' : Ordinal 𝓤
α' = 𝟙ₒ +ₒ α
abstract
private
denotation-body' : (β : Ordinal 𝓥)
→ ((b : ⟨ β ⟩) → DecrList₂ α (β ↓ b) → ⟨ α' ^ₒ (β ↓ b) ⟩)
→ DecrList₂ α β → ⟨ α' ^ₒ β ⟩
denotation-body' β r ([] , δ) = ^ₒ-⊥ α' β
denotation-body' β r (((a , b) ∷ l) , δ) =
×ₒ-to-^ₒ α' β (r b (expᴸ-tail α β a b l δ) , inr a)
denotation' : (β : Ordinal 𝓥) → DecrList₂ α β → ⟨ α' ^ₒ β ⟩
denotation' =
transfinite-induction-on-OO
(λ β → DecrList₂ α β → ⟨ α' ^ₒ β ⟩)
denotation-body'
syntax denotation' β l = ⟦ l ⟧'⟨ β ⟩
denotation'-behaviour
: (β : Ordinal 𝓥)
→ denotation' β = denotation-body' β (λ b → denotation' (β ↓ b))
denotation'-behaviour =
transfinite-induction-on-OO-behaviour
(λ β → DecrList₂ α β → ⟨ α' ^ₒ β ⟩)
denotation-body'
⟦⟧'-behaviour-cons
: (β : Ordinal 𝓥)
(a : ⟨ α ⟩) (b : ⟨ β ⟩)
(l : List ⟨ α ×ₒ β ⟩)
(δ : is-decreasing-pr₂ α β ((a , b) ∷ l))
→ ⟦ ((a , b) ∷ l) , δ ⟧'⟨ β ⟩
= ×ₒ-to-^ₒ α' β (⟦ expᴸ-tail α β a b l δ ⟧'⟨ β ↓ b ⟩ , inr a)
⟦⟧'-behaviour-cons β a b l δ =
happly (denotation'-behaviour β) (((a , b) ∷ l) , δ)
⟦⟧'-behaviour-[] : (β : Ordinal 𝓥) → ⟦ [] , []-decr ⟧'⟨ β ⟩ = ^ₒ-⊥ α' β
⟦⟧'-behaviour-[] β = happly (denotation'-behaviour β) ([] , []-decr)
\end{code}
Looking at ⟦⟧'-behaviour-cons, one may wonder about the case where we don't have
(inr a) in the right component, but rather (inl ⋆). This is handled via the
following observation, which corresponds to the fact that if an ordinal γ has a
trichotomous (in particular, detachable) least element then elements of
DecrList₂ γ β can be "normalized" by removing entries which list the least
element of α (see the end of this file).
\begin{code}
^ₒ-skip-least : (β : Ordinal 𝓤) (b : ⟨ β ⟩) (e : ⟨ α' ^ₒ (β ↓ b ) ⟩)
→ α' ^ₒ β ↓ ×ₒ-to-^ₒ α' β (e , inl ⋆) = α' ^ₒ (β ↓ b) ↓ e
^ₒ-skip-least β b e =
α' ^ₒ β ↓ ×ₒ-to-^ₒ α' β (e , inl ⋆) =⟨ I ⟩
α' ^ₒ (β ↓ b) ×ₒ (𝟙ₒ +ₒ α ↓ inl ⋆) +ₒ (α' ^ₒ (β ↓ b) ↓ e) =⟨ II ⟩
α' ^ₒ (β ↓ b) ×ₒ (𝟙ₒ ↓ ⋆) +ₒ (α' ^ₒ (β ↓ b) ↓ e) =⟨ III ⟩
α' ^ₒ (β ↓ b) ×ₒ 𝟘ₒ +ₒ (α' ^ₒ (β ↓ b) ↓ e) =⟨ IV ⟩
𝟘ₒ +ₒ (α' ^ₒ (β ↓ b) ↓ e) =⟨ V ⟩
α' ^ₒ (β ↓ b) ↓ e ∎
where
I = ^ₒ-↓-×ₒ-to-^ₒ α' β
II = ap (λ - → α' ^ₒ (β ↓ b) ×ₒ - +ₒ (α' ^ₒ (β ↓ b) ↓ e))
((+ₒ-↓-left ⋆) ⁻¹)
III = ap (λ - → α' ^ₒ (β ↓ b) ×ₒ - +ₒ (α' ^ₒ (β ↓ b) ↓ e)) 𝟙ₒ-↓
IV = ap (_+ₒ (α' ^ₒ (β ↓ b) ↓ e)) (×ₒ-𝟘ₒ-right (α' ^ₒ (β ↓ b)))
V = 𝟘ₒ-left-neutral (α' ^ₒ (β ↓ b) ↓ e)
induced-simulation : (β : Ordinal 𝓤) → expᴸ[𝟙+ α ] β ⊴ α' ^ₒ β
induced-simulation β =
=-to-⊴ (expᴸ[𝟙+ α ] β) (α' ^ₒ β) (exponentiation-constructions-agree' α β)
induced-map : (β : Ordinal 𝓤) → ⟨ expᴸ[𝟙+ α ] β ⟩ → ⟨ α' ^ₒ β ⟩
induced-map β = [ expᴸ[𝟙+ α ] β , α' ^ₒ β ]⟨ induced-simulation β ⟩
private
NB : (β : Ordinal 𝓥) → ⟨ expᴸ[𝟙+ α ] β ⟩ = DecrList₂ α β
NB β = refl
induced-map-is-denotation' : (β : Ordinal 𝓤) → induced-map β ∼ denotation' β
induced-map-is-denotation' =
transfinite-induction-on-OO (λ β → f β ∼ denotation' β) I
where
f = induced-map
I : (β : Ordinal 𝓤)
→ ((b : ⟨ β ⟩) → f (β ↓ b) ∼ denotation' (β ↓ b))
→ f β ∼ denotation' β
I β IH ([] , []-decr) =
↓-lc (α' ^ₒ β) (f β ([] , []-decr)) (⟦ [] , []-decr ⟧'⟨ β ⟩) II
where
II = α' ^ₒ β ↓ f β ([] , []-decr) =⟨ e₁ ⟩
expᴸ[𝟙+ α ] β ↓ ([] , []-decr) =⟨ expᴸ-↓-⊥ α β ⟩
𝟘ₒ =⟨ (^ₒ-↓-⊥ α' β) ⁻¹ ⟩
α' ^ₒ β ↓ ^ₒ-⊥ α' β =⟨ e₂ ⟩
α' ^ₒ β ↓ ⟦ [] , []-decr ⟧'⟨ β ⟩ ∎
where
e₁ = (simulations-preserve-↓ (expᴸ[𝟙+ α ] β) (α' ^ₒ β)
(induced-simulation β)
([] , []-decr)) ⁻¹
e₂ = ap (α' ^ₒ β ↓_) ((⟦⟧'-behaviour-[] β) ⁻¹)
I β IH (((a , b) ∷ l) , δ) =
↓-lc (α' ^ₒ β) (f β ((a , b ∷ l) , δ)) (⟦ (a , b ∷ l) , δ ⟧'⟨ β ⟩) II
where
II =
α' ^ₒ β ↓ f β (((a , b) ∷ l) , δ) =⟨ e₁ ⟩
expᴸ[𝟙+ α ] β ↓ (((a , b) ∷ l) , δ) =⟨ e₂ ⟩
expᴸ[𝟙+ α ] (β ↓ b) ×ₒ αₐ +ₒ (expᴸ[𝟙+ α ] (β ↓ b) ↓ ℓ) =⟨ e₃ ⟩
α' ^ₒ (β ↓ b) ×ₒ αₐ +ₒ (expᴸ[𝟙+ α ] (β ↓ b) ↓ ℓ) =⟨ e₄ ⟩
α' ^ₒ (β ↓ b) ×ₒ αₐ +ₒ (α' ^ₒ (β ↓ b) ↓ f (β ↓ b) ℓ) =⟨ e₅ ⟩
α' ^ₒ (β ↓ b) ×ₒ (α' ↓ inr a) +ₒ (α' ^ₒ (β ↓ b) ↓ f (β ↓ b) ℓ) =⟨ e₆ ⟩
α' ^ₒ β ↓ ×ₒ-to-^ₒ α' β (f (β ↓ b) ℓ , inr a) =⟨ e₇ ⟩
α' ^ₒ β ↓ ×ₒ-to-^ₒ α' β (⟦ ℓ ⟧'⟨ β ↓ b ⟩ , inr a) =⟨ e₈ ⟩
α' ^ₒ β ↓ ⟦ ((a , b) ∷ l) , δ ⟧'⟨ β ⟩ ∎
where
αₐ = 𝟙ₒ +ₒ (α ↓ a)
ℓ = expᴸ-tail α β a b l δ
e₁ = (simulations-preserve-↓ (expᴸ[𝟙+ α ] β) (α' ^ₒ β)
(induced-simulation β)
(((a , b) ∷ l) , δ)) ⁻¹
e₂ = expᴸ-↓-cons α β a b l δ
e₃ = ap (λ - → - ×ₒ αₐ +ₒ (expᴸ[𝟙+ α ] (β ↓ b) ↓ ℓ))
(exponentiation-constructions-agree' α (β ↓ b))
e₄ = ap (α' ^ₒ (β ↓ b) ×ₒ αₐ +ₒ_)
(simulations-preserve-↓ (expᴸ[𝟙+ α ] (β ↓ b)) (α' ^ₒ (β ↓ b))
(induced-simulation (β ↓ b))
ℓ)
e₅ = ap (λ - → α' ^ₒ (β ↓ b) ×ₒ - +ₒ (α' ^ₒ (β ↓ b) ↓ f (β ↓ b) ℓ))
(+ₒ-↓-right a)
e₆ = (^ₒ-↓-×ₒ-to-^ₒ α' β) ⁻¹
e₇ = ap (λ - → α' ^ₒ β ↓ ×ₒ-to-^ₒ α' β (- , inr a)) (IH b ℓ)
e₈ = ap (α' ^ₒ β ↓_) ((⟦⟧'-behaviour-cons β a b l δ) ⁻¹)
denotation'-is-simulation
: (β : Ordinal 𝓤) → is-simulation (expᴸ[𝟙+ α ] β) (α' ^ₒ β) (denotation' β)
denotation'-is-simulation β =
transport (is-simulation (expᴸ[𝟙+ α ] β) (α' ^ₒ β))
(dfunext fe' (induced-map-is-denotation' β))
[ expᴸ[𝟙+ α ] β , α' ^ₒ β ]⟨ induced-simulation β ⟩-is-simulation
denotation'-⊴ : (β : Ordinal 𝓤) → expᴸ[𝟙+ α ] β ⊴ α' ^ₒ β
denotation'-⊴ β = denotation' β , denotation'-is-simulation β
\end{code}
Indeed, the denotation maps are related via a normalization function.
\begin{code}
module _
(α : Ordinal 𝓤)
(β : Ordinal 𝓥)
where
private
α' = 𝟙ₒ +ₒ α
normalize-list : List ⟨ α' ×ₒ β ⟩ → List ⟨ α ×ₒ β ⟩
normalize-list [] = []
normalize-list ((inl ⋆ , b) ∷ l) = normalize-list l
normalize-list ((inr a , b) ∷ l) = (a , b) ∷ normalize-list l
normalize-list-preserves-decreasing-pr₂
: (l : List ⟨ α' ×ₒ β ⟩)
→ is-decreasing-pr₂ α' β l
→ is-decreasing-pr₂ α β (normalize-list l)
normalize-list-preserves-decreasing-pr₂ =
course-of-values-induction-on-length
(λ l → is-decreasing-pr₂ α' β l → is-decreasing-pr₂ α β (normalize-list l))
ind
where
open import Naturals.Order
open import Notation.Order
ind : (l : List ⟨ α' ×ₒ β ⟩)
→ ((l' : List ⟨ α' ×ₒ β ⟩)
→ length l' < length l
→ is-decreasing-pr₂ α' β l'
→ is-decreasing-pr₂ α β (normalize-list l'))
→ is-decreasing-pr₂ α' β l
→ is-decreasing-pr₂ α β (normalize-list l)
ind [] IH δ = []-decr
ind ((inl ⋆ , b) ∷ l) IH δ =
IH l (<-succ (length l))
(tail-is-decreasing-pr₂ α' β (inl ⋆ , b) δ)
ind ((inr a , b) ∷ []) IH δ = sing-decr
ind ((inr a , b) ∷ (inl ⋆ , b') ∷ l) IH δ =
IH ((inr a , b) ∷ l)
(<-succ (length l))
(is-decreasing-pr₂-skip α' β (inr a , b) (inl ⋆ , b') δ)
ind ((inr a , b) ∷ (inr a' , b') ∷ l) IH 𝕕@(many-decr u δ) =
many-decr u
(IH (inr a' , b' ∷ l)
(<-succ (length l))
(tail-is-decreasing-pr₂ α' β (inr a , b) 𝕕))
normalize : DecrList₂ α' β → DecrList₂ α β
normalize (l , δ) = normalize-list l ,
normalize-list-preserves-decreasing-pr₂ l δ
\end{code}
Below, we need the following technical lemmas which say that normalization
commutes with the expᴸ-tail and expᴸ-segment-inclusion functions.
For expᴸ-tail, this means that the normalization of the decreasing list
(inl ⋆ , b) ∷ l in DecrList₂ α β coincides with the normalization of l in
DecrList₂ α (β ↓ b) after embedding it back into DecrList₂ α β.
\begin{code}
normalize-expᴸ-tail
: (α : Ordinal 𝓤) (β : Ordinal 𝓥)
{a : ⟨ α ⟩} {b : ⟨ β ⟩} {l : List ⟨ (𝟙ₒ +ₒ α) ×ₒ β ⟩}
{δ : is-decreasing-pr₂ (𝟙ₒ +ₒ α) β ((inr a , b) ∷ l)}
→ normalize α (β ↓ b) (expᴸ-tail (𝟙ₒ +ₒ α) β (inr a) b l δ)
= expᴸ-tail α β a b
(normalize-list α β l)
(normalize-list-preserves-decreasing-pr₂ α β (inr a , b ∷ l) δ)
normalize-expᴸ-tail α β {a} {b} {l} = to-DecrList₂-= α (β ↓ b) (lemma l)
where
α' = 𝟙ₒ +ₒ α
lemma : (l : List ⟨ α' ×ₒ β ⟩)
{δ : is-decreasing-pr₂ α' β (inr a , b ∷ l)}
{ε : is-decreasing-pr₂ α β (a , b ∷ normalize-list α β l)}
→ normalize-list α (β ↓ b) (expᴸ-tail-list α' β (inr a) b l δ)
= expᴸ-tail-list α β a b (normalize-list α β l) ε
lemma [] = refl
lemma (inl ⋆ , b' ∷ l) = lemma l
lemma (inr a' , b' ∷ l) = ap₂ _∷_
(ap (a' ,_) (segment-inclusion-lc β refl))
(lemma l)
normalize-expᴸ-segment-inclusion
: (α : Ordinal 𝓤) (β : Ordinal 𝓥)
{b : ⟨ β ⟩} {l : List ⟨ (𝟙ₒ +ₒ α) ×ₒ β ⟩}
{δ : is-decreasing-pr₂ (𝟙ₒ +ₒ α) β ((inl ⋆) , b ∷ l)}
→ normalize α β (((inl ⋆ , b) ∷ l) , δ)
= expᴸ-segment-inclusion α β b
(normalize α (β ↓ b)
(expᴸ-tail (𝟙ₒ +ₒ α) β (inl ⋆) b l δ))
normalize-expᴸ-segment-inclusion α β {b} {l} = to-DecrList₂-= α β (lemma l)
where
α' = 𝟙ₒ +ₒ α
lemma : (l : List ⟨ α' ×ₒ β ⟩) {δ : is-decreasing-pr₂ α' β ((inl ⋆) , b ∷ l)}
→ normalize-list α β ((inl ⋆ , b) ∷ l) =
expᴸ-segment-inclusion-list α β b
(normalize-list α (β ↓ b)
(expᴸ-tail-list α' β (inl ⋆) b l δ))
lemma [] = refl
lemma (inl ⋆ , b' ∷ l) = lemma l
lemma (inr a , b' ∷ l) = ap ((a , b') ∷_) (lemma l)
\end{code}
We are now ready to prove that the denotation functions are related via
normalization.
\begin{code}
open denotations
denotations-are-related-via-normalization
: (α β : Ordinal 𝓤)
→ denotation (𝟙ₒ +ₒ α) β ∼ denotation' α β ∘ normalize α β
denotations-are-related-via-normalization {𝓤} α =
transfinite-induction-on-OO
(λ β → denotation (𝟙ₒ +ₒ α) β ∼ denotation' α β ∘ normalize α β)
(λ β IH (l , δ) → ind β IH l δ)
where
α' = 𝟙ₒ +ₒ α
ind : (β : Ordinal 𝓤)
→ ((b : ⟨ β ⟩) → denotation α' (β ↓ b)
∼ denotation' α (β ↓ b) ∘ normalize α (β ↓ b))
→ (l : List ⟨ α' ×ₒ β ⟩) (δ : is-decreasing-pr₂ α' β l)
→ denotation α' β (l , δ) = denotation' α β (normalize α β (l , δ))
ind β IH [] []-decr =
denotation α' β ([] , []-decr) =⟨ I ⟩
^ₒ-⊥ α' β =⟨ II ⟩
denotation' α β (normalize α β ([] , []-decr)) ∎
where
I = ⟦⟧-behaviour-[] α' β
II = (⟦⟧'-behaviour-[] α β) ⁻¹
ind β IH ((inl ⋆ , b) ∷ l) δ =
denotation α' β (((inl ⋆ , b) ∷ l) , δ) =⟨ I ⟩
×ₒ-to-^ₒ α' β (denotation α' (β ↓ b) ℓ , inl ⋆) =⟨ II ⟩
denotation' α β (ι (normalize α (β ↓ b) ℓ)) =⟨ III ⟩
denotation' α β (normalize α β ((inl ⋆ , b ∷ l) , δ)) ∎
where
ℓ = expᴸ-tail α' β (inl ⋆) b l δ
ι = expᴸ-segment-inclusion α β b
I = ⟦⟧-behaviour-cons α' β (inl ⋆) b l δ
III = ap (denotation' α β) (normalize-expᴸ-segment-inclusion α β ⁻¹)
II = ↓-lc (α' ^ₒ β) _ _ II'
where
II' =
α' ^ₒ β ↓ ×ₒ-to-^ₒ α' β (denotation α' (β ↓ b) ℓ , inl ⋆) =⟨ II₁ ⟩
α' ^ₒ (β ↓ b) ↓ denotation α' (β ↓ b) ℓ =⟨ II₂ ⟩
α' ^ₒ (β ↓ b) ↓ denotation' α (β ↓ b) (normalize α (β ↓ b) ℓ) =⟨ II₃ ⟩
expᴸ[𝟙+ α ] (β ↓ b) ↓ normalize α (β ↓ b) ℓ =⟨ II₄ ⟩
α' ^ₒ β ↓ denotation' α β (ι (normalize α (β ↓ b) ℓ)) ∎
where
II₁ = ^ₒ-skip-least α β b (denotation α' (β ↓ b) ℓ)
II₂ = ap (α' ^ₒ (β ↓ b) ↓_) (IH b ℓ)
II₃ = (simulations-preserve-↓ (expᴸ[𝟙+ α ] (β ↓ b)) (α' ^ₒ (β ↓ b))
(denotation'-⊴ α (β ↓ b))
(normalize α (β ↓ b) ℓ)) ⁻¹
II₄ = simulations-preserve-↓ (expᴸ[𝟙+ α ] (β ↓ b)) (α' ^ₒ β)
(⊴-trans (expᴸ[𝟙+ α ] (β ↓ b)) (expᴸ[𝟙+ α ] β) (α' ^ₒ β)
(expᴸ-segment-inclusion-⊴ α β b)
(denotation'-⊴ α β))
(normalize α (β ↓ b) ℓ)
ind β IH ((inr a , b) ∷ l) δ =
denotation α' β (((inr a , b) ∷ l) , δ) =⟨ I ⟩
ϕ α' β (denotation α' (β ↓ b) ℓ , inr a) =⟨ II ⟩
ϕ α' β (denotation' α (β ↓ b) (normalize α (β ↓ b) ℓ) , inr a) =⟨ III ⟩
ϕ α' β (denotation' α (β ↓ b) ℓ' , inr a) =⟨ IV ⟩
denotation' α β (normalize α β ((inr a , b ∷ l) , δ)) ∎
where
ϕ = ×ₒ-to-^ₒ
ε = normalize-list-preserves-decreasing-pr₂ α β (inr a , b ∷ l) δ
ℓ = expᴸ-tail α' β (inr a) b l δ
ℓ' = expᴸ-tail α β a b (normalize-list α β l) ε
I = ⟦⟧-behaviour-cons α' β (inr a) b l δ
II = ap (λ - → ×ₒ-to-^ₒ α' β (- , inr a)) (IH b ℓ)
III = ap (λ - → ×ₒ-to-^ₒ α' β (denotation' α (β ↓ b) - , inr a))
(normalize-expᴸ-tail α β)
IV = (⟦⟧'-behaviour-cons α β a b (normalize-list α β l) ε) ⁻¹
\end{code}