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}