We give an abstract construction of ordinal exponentiation using suprema of
ordinals.

\begin{code}

{-# OPTIONS --safe --without-K --exact-split #-}

open import UF.Univalence
open import UF.PropTrunc
open import UF.Size

module Ordinals.Exponentiation.Supremum
       (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.Spartan

open import UF.Base
open import UF.ImageAndSurjection pt
open import UF.Subsingletons
open import UF.UniverseEmbedding

open import Ordinals.AdditionProperties ua
open import Ordinals.Arithmetic fe
open import Ordinals.Exponentiation.Specification ua pt sr
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 PropositionalTruncation pt
open suprema pt sr

\end{code}

We define
  Ξ± ^β‚’ Ξ² = sup {1 + ⟨ Ξ² ⟩} (inl _ ↦ πŸ™β‚’; inr b ↦ Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’ Ξ±)
by transfinite recursion on Ξ².

As we will show, this gives a well defined ordinal exponentiation function
whenever Ξ± ⊡ πŸ™β‚’. Moreover, many desirable properties also hold in the absence of
this assumption)

\begin{code}

exp-bundled :
   (Ξ± : Ordinal 𝓀)
 β†’ Ξ£ f κž‰ (Ordinal π“₯ β†’ Ordinal (𝓀 βŠ” π“₯)) ,
     ((Ξ² : Ordinal π“₯)
       β†’ f Ξ² = sup {I = πŸ™ + ⟨ Ξ² ⟩} (cases (Ξ» _ β†’ πŸ™β‚’) (Ξ» b β†’ f (Ξ² ↓ b) Γ—β‚’ Ξ±)))
exp-bundled {𝓀} {π“₯} Ξ± =
 transfinite-recursion-on-OO-bundled
  (Ordinal (𝓀 βŠ” π“₯))
  (Ξ» Ξ² ih β†’ sup {I = πŸ™ {𝓀} + ⟨ Ξ² ⟩} (cases (Ξ» _ β†’ πŸ™β‚’) Ξ» b β†’ ih b Γ—β‚’ Ξ±))

abstract
 _^β‚’_ : (Ξ± : Ordinal 𝓀) β†’ (Ξ² : Ordinal π“₯) β†’ Ordinal (𝓀 βŠ” π“₯)
 _^β‚’_ Ξ± = pr₁ (exp-bundled Ξ±)

 infixr 8 _^β‚’_

 ^β‚’-behaviour :
    (Ξ± : Ordinal 𝓀) (Ξ² : Ordinal π“₯)
  β†’ Ξ± ^β‚’ Ξ²
    = sup {I = πŸ™ {𝓀} + ⟨ Ξ² ⟩} (cases (Ξ» _ β†’ πŸ™β‚’) (Ξ» b β†’ Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’ Ξ±))
 ^β‚’-behaviour Ξ± = prβ‚‚ (exp-bundled Ξ±)

 module _
  (Ξ± : Ordinal 𝓀)
  (Ξ² : Ordinal π“₯)
  where

  ^β‚’-family : πŸ™ {𝓀} + ⟨ Ξ² ⟩ β†’ Ordinal (𝓀 βŠ” π“₯)
  ^β‚’-family = cases (Ξ» _ β†’ πŸ™β‚’) (Ξ» b β†’ Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’ Ξ±)

  ^β‚’-is-upper-bound : (x : πŸ™ + ⟨ Ξ² ⟩) β†’ ^β‚’-family x ⊴ Ξ± ^β‚’ Ξ²
  ^β‚’-is-upper-bound x =
   transport⁻¹
    (^β‚’-family x ⊴_)
    (^β‚’-behaviour Ξ± Ξ²)
    (sup-is-upper-bound ^β‚’-family x)

  ^β‚’-is-upper-bound₁ : πŸ™β‚’ ⊴ Ξ± ^β‚’ Ξ²
  ^β‚’-is-upper-bound₁ = ^β‚’-is-upper-bound (inl ⋆)

  ^β‚’-is-upper-boundβ‚‚ : {b : ⟨ Ξ² ⟩} β†’ Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’ Ξ± ⊴ Ξ± ^β‚’ Ξ²
  ^β‚’-is-upper-boundβ‚‚ {b} = ^β‚’-is-upper-bound (inr b)

  ^β‚’-is-lower-bound-of-upper-bounds :
     (Ξ³ : Ordinal (𝓀 βŠ” π“₯))
   β†’ πŸ™β‚’ ⊴ Ξ³
   β†’ ((b : ⟨ Ξ² ⟩) β†’ Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’ Ξ± ⊴ Ξ³)
   β†’ Ξ± ^β‚’ Ξ² ⊴ Ξ³
  ^β‚’-is-lower-bound-of-upper-bounds Ξ³ l₁ lβ‚‚ =
   transport⁻¹ (_⊴ γ)
    (^β‚’-behaviour Ξ± Ξ²)
    (sup-is-lower-bound-of-upper-bounds
      ^β‚’-family Ξ³ (dep-cases (Ξ» _ β†’ l₁) lβ‚‚))

\end{code}

Since ^β‚’ is defined as a supremum which in turn can be realized as a quotient,
it enjoyes an induction principle which we formulate and prove below.

\begin{code}

  ^β‚’-βŠ₯ : ⟨ Ξ± ^β‚’ Ξ² ⟩
  ^β‚’-βŠ₯ = [ πŸ™β‚’ , Ξ± ^β‚’ Ξ² ]⟨ ^β‚’-is-upper-bound₁ ⟩ ⋆

  Γ—β‚’-to-^β‚’ : {b : ⟨ Ξ² ⟩} β†’ ⟨ Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’ Ξ± ⟩ β†’ ⟨ Ξ± ^β‚’ Ξ² ⟩
  Γ—β‚’-to-^β‚’ {b} = [ Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’ Ξ± , Ξ± ^β‚’ Ξ² ]⟨ ^β‚’-is-upper-boundβ‚‚ ⟩

  private
   ΞΉ : (x : πŸ™ + ⟨ Ξ² ⟩) β†’ ⟨ ^β‚’-family x ⟩ β†’ ⟨ Ξ± ^β‚’ Ξ² ⟩
   ΞΉ x = [ ^β‚’-family x , Ξ± ^β‚’ Ξ² ]⟨ ^β‚’-is-upper-bound x ⟩

   ΞΉ-is-jointly-surjective :
      (e : ⟨ Ξ± ^β‚’ Ξ² ⟩)
     β†’ βˆƒ x κž‰ πŸ™ + ⟨ Ξ² ⟩ , Ξ£ y κž‰ ⟨ ^β‚’-family x ⟩ , ΞΉ x y = e
   ΞΉ-is-jointly-surjective e = βˆ₯βˆ₯-functor II III
    where
     Οƒ = Ξ» (x : πŸ™ + ⟨ Ξ² ⟩)
           β†’ [ ^β‚’-family x , sup ^β‚’-family ]⟨ sup-is-upper-bound ^β‚’-family x ⟩

     I : {Ξ³ : Ordinal (𝓀 βŠ” π“₯)} (e : ⟨ Ξ³ ⟩)
         (p : Ξ³ = sup ^β‚’-family) {x : πŸ™ + ⟨ Ξ² ⟩} {y : ⟨ ^β‚’-family x ⟩}
       β†’ Οƒ x y = Idtofun (ap ⟨_⟩ p) e
       β†’ [ ^β‚’-family x , Ξ³ ]⟨
            transport⁻¹ (^β‚’-family x ⊴_) p (sup-is-upper-bound ^β‚’-family x) ⟩ y
         = e
     I _ refl = id

     p = ^β‚’-behaviour Ξ± Ξ²
     q = ap ⟨_⟩ p
     e' = Idtofun q e

     II : (Ξ£ x κž‰ πŸ™ + ⟨ Ξ² ⟩ , Ξ£ y κž‰ ⟨ ^β‚’-family x ⟩ , Οƒ x y = e')
        β†’ (Ξ£ x κž‰ πŸ™ + ⟨ Ξ² ⟩ , Ξ£ y κž‰ ⟨ ^β‚’-family x ⟩ , ΞΉ x y = e)
     II (x , y , eq) = x , y , I e p eq

     III : βˆƒ x κž‰ πŸ™ + ⟨ Ξ² ⟩ , Ξ£ y κž‰ ⟨ ^β‚’-family x ⟩ , Οƒ x y = e'
     III = sup-is-upper-bound-jointly-surjective ^β‚’-family (Idtofun q e)

  ^β‚’-induction : {𝓦 : Universe} (P : ⟨ Ξ± ^β‚’ Ξ² ⟩ β†’ 𝓦 Μ‡  )
               β†’ ((e : ⟨ Ξ± ^β‚’ Ξ² ⟩) β†’ is-prop (P e))
               β†’ P ^β‚’-βŠ₯
               β†’ ((b : ⟨ Ξ² ⟩) (y : ⟨ Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’ Ξ± ⟩) β†’ P (Γ—β‚’-to-^β‚’ y))
               β†’ (e : ⟨ Ξ± ^β‚’ Ξ² ⟩) β†’ P e
  ^β‚’-induction P P-is-prop-valued P-βŠ₯ P-component =
   surjection-induction Οƒ Οƒ-is-surjection P P-is-prop-valued ρ
    where
     Οƒ : (Ξ£ x κž‰ πŸ™ + ⟨ Ξ² ⟩ , ⟨ ^β‚’-family x ⟩) β†’ ⟨ Ξ± ^β‚’ Ξ² ⟩
     Οƒ (x , y) = ΞΉ x y

     Οƒ-is-surjection : is-surjection Οƒ
     Οƒ-is-surjection e =
      βˆ₯βˆ₯-functor
       (Ξ» (x , y , p) β†’ (x , y) , p)
       (ΞΉ-is-jointly-surjective e)

     ρ : ((x , y) : domain Οƒ) β†’ P (ΞΉ x y)
     ρ (inl ⋆ , ⋆) = P-βŠ₯
     ρ (inr b , y) = P-component b y

\end{code}

We introduce a more descriptive name for the fact that our exponentiation
function is always at least πŸ™β‚’ and derive the corollary that πŸ˜β‚’ is strictly
below any exponentiated ordinal.

\begin{code}

^β‚’-has-least-element : (Ξ± : Ordinal 𝓀) (Ξ² : Ordinal π“₯) β†’ πŸ™β‚’ ⊴ Ξ± ^β‚’ Ξ²
^β‚’-has-least-element = ^β‚’-is-upper-bound₁

^β‚’-is-positive : (Ξ± : Ordinal 𝓀) (Ξ² : Ordinal π“₯) β†’ πŸ˜β‚’ ⊲ Ξ± ^β‚’ Ξ²
^β‚’-is-positive Ξ± Ξ² =
 ⊲-⊴-gives-⊲ πŸ˜β‚’ πŸ™β‚’ (Ξ± ^β‚’ Ξ²) πŸ˜β‚’-⊲-πŸ™β‚’ (^β‚’-has-least-element Ξ± Ξ²)

\end{code}

The exponentiation function meets the zero specification as formulated in
Ordinals.Exponentiation.Specification.

\begin{code}

^β‚’-satisfies-zero-specification : {𝓀 π“₯ : Universe} (Ξ± : Ordinal 𝓀)
                                β†’ exp-specification-zero {𝓀} {π“₯} Ξ± (Ξ± ^β‚’_)
^β‚’-satisfies-zero-specification {𝓀} {π“₯} Ξ± = ⊴-antisym (Ξ± ^β‚’ πŸ˜β‚’) πŸ™β‚’ I II
 where
  I : Ξ± ^β‚’ πŸ˜β‚’ ⊴ πŸ™β‚’
  I = ^β‚’-is-lower-bound-of-upper-bounds Ξ± πŸ˜β‚’ πŸ™β‚’ (⊴-refl πŸ™β‚’) 𝟘-induction

  II : πŸ™β‚’ ⊴ Ξ± ^β‚’ πŸ˜β‚’
  II = ^β‚’-has-least-element Ξ± πŸ˜β‚’

\end{code}

The exponentiation function meets the successor specification (as formulated in
Ordinals.Exponentiation.Specification) for base ordinals Ξ± ⊡ πŸ™β‚’.

The proof relies on the following general lemma.

\begin{code}

^β‚’-Γ—β‚’-right-⊴ : (Ξ± : Ordinal 𝓀) (Ξ² : Ordinal π“₯) (Ξ³ : Ordinal 𝓦)
              β†’ πŸ™β‚’ {𝓣} ⊴ Ξ³
              β†’ Ξ± ^β‚’ Ξ² ⊴ Ξ± ^β‚’ Ξ² Γ—β‚’ Ξ³
^β‚’-Γ—β‚’-right-⊴ Ξ± Ξ² Ξ³ l =
 ⊴-trans (Ξ± ^β‚’ Ξ²) (Ξ± ^β‚’ Ξ² Γ—β‚’ πŸ™β‚’) (Ξ± ^β‚’ Ξ² Γ—β‚’ Ξ³)
  (=-to-⊴ (Ξ± ^β‚’ Ξ²) (Ξ± ^β‚’ Ξ² Γ—β‚’ πŸ™β‚’) ((πŸ™β‚’-right-neutral-Γ—β‚’ (Ξ± ^β‚’ Ξ²)) ⁻¹))
  (Γ—β‚’-right-monotone-⊴ (Ξ± ^β‚’ Ξ²) πŸ™β‚’ Ξ³ (πŸ™β‚’-⊴-shift Ξ³ l))

^β‚’-satisfies-succ-specification : {𝓀 π“₯ : Universe} (Ξ± : Ordinal 𝓀)
                                β†’ πŸ™β‚’ {𝓀} ⊴ Ξ±
                                β†’ exp-specification-succ {𝓀} {π“₯} Ξ± (Ξ± ^β‚’_)
^β‚’-satisfies-succ-specification {𝓀} {π“₯} Ξ± l Ξ² =
 ⊴-antisym (Ξ± ^β‚’ (Ξ² +β‚’ πŸ™β‚’)) (Ξ± ^β‚’ Ξ² Γ—β‚’ Ξ±) I II
  where
   I : Ξ± ^β‚’ (Ξ² +β‚’ πŸ™β‚’) ⊴ Ξ± ^β‚’ Ξ² Γ—β‚’ Ξ±
   I = ^β‚’-is-lower-bound-of-upper-bounds Ξ± (Ξ² +β‚’ πŸ™β‚’) (Ξ± ^β‚’ Ξ² Γ—β‚’ Ξ±) I₁ Iβ‚‚
    where
     I₁ : πŸ™β‚’ ⊴ Ξ± ^β‚’ Ξ² Γ—β‚’ Ξ±
     I₁ = ⊴-trans πŸ™β‚’ (Ξ± ^β‚’ Ξ²) (Ξ± ^β‚’ Ξ² Γ—β‚’ Ξ±)
           (^β‚’-is-upper-bound₁ Ξ± Ξ²)
           (^β‚’-Γ—β‚’-right-⊴ Ξ± Ξ² Ξ± l)
     Iβ‚‚ : (x : ⟨ Ξ² +β‚’ πŸ™β‚’ ⟩) β†’ Ξ± ^β‚’ ((Ξ² +β‚’ πŸ™β‚’) ↓ x) Γ—β‚’ Ξ± ⊴ Ξ± ^β‚’ Ξ² Γ—β‚’ Ξ±
     Iβ‚‚ (inl b) = ⊴-trans
                   (Ξ± ^β‚’ ((Ξ² +β‚’ πŸ™β‚’) ↓ inl b) Γ—β‚’ Ξ±)
                   (Ξ± ^β‚’ Ξ²)
                   (Ξ± ^β‚’ Ξ² Γ—β‚’ Ξ±)
                   (transport (_⊴ Ξ± ^β‚’ Ξ²)
                     (ap (Ξ» - β†’ Ξ± ^β‚’ - Γ—β‚’ Ξ±) (+β‚’-↓-left b))
                     (^β‚’-is-upper-boundβ‚‚ Ξ± Ξ²))
                   (^β‚’-Γ—β‚’-right-⊴ Ξ± Ξ² Ξ± l)
     Iβ‚‚ (inr ⋆) = =-to-⊴
                   (Ξ± ^β‚’ ((Ξ² +β‚’ πŸ™β‚’) ↓ inr ⋆) Γ—β‚’ Ξ±)
                   (Ξ± ^β‚’ Ξ² Γ—β‚’ Ξ±)
                   (ap (Ξ» - β†’ Ξ± ^β‚’ - Γ—β‚’ Ξ±) (successor-lemma-right Ξ²))
   II : Ξ± ^β‚’ Ξ² Γ—β‚’ Ξ± ⊴ Ξ± ^β‚’ (Ξ² +β‚’ πŸ™β‚’)
   II = transport
         (_⊴ Ξ± ^β‚’ (Ξ² +β‚’ πŸ™β‚’))
         (ap (Ξ» - β†’ Ξ± ^β‚’ - Γ—β‚’ Ξ±) (successor-lemma-right Ξ²))
         (^β‚’-is-upper-boundβ‚‚ Ξ± (Ξ² +β‚’ πŸ™β‚’))

\end{code}

The exponentiation function meets the supremum specification (as formulated in
Ordinals.Exponentiation.Specification).

The proof relies on the following monotonicity property of the exponentiation.

\begin{code}

^β‚’-monotone-in-exponent : (Ξ± : Ordinal 𝓀) (Ξ² Ξ³ : Ordinal π“₯)
                        β†’ Ξ² ⊴ Ξ³ β†’ Ξ± ^β‚’ Ξ² ⊴ Ξ± ^β‚’ Ξ³
^β‚’-monotone-in-exponent {𝓀} {π“₯} Ξ± Ξ² Ξ³ 𝕗@(f , _) =
 transport₂⁻¹ _⊴_
  (^β‚’-behaviour Ξ± Ξ²) (^β‚’-behaviour Ξ± Ξ³)
  (transport (Ξ» - β†’ sup - ⊴ sup G) I (sup-composition-⊴ f' G))
  where
   F = ^β‚’-family Ξ± Ξ²
   G = ^β‚’-family Ξ± Ξ³

   f' : πŸ™ + ⟨ Ξ² ⟩ β†’ πŸ™ + ⟨ Ξ³ ⟩
   f' = cases (Ξ» _ β†’ inl ⋆) (Ξ» b β†’ inr (f b))

   initial-segments-agree : (b : ⟨ Ξ² ⟩) β†’ Ξ² ↓ b = Ξ³ ↓ f b
   initial-segments-agree b = simulations-preserve-↓ Ξ² Ξ³ 𝕗 b

   I : G ∘ f' = F
   I = dfunext fe' II
    where
     II : (x : πŸ™ + ⟨ Ξ² ⟩) β†’ G (f' x) = F x
     II (inl ⋆) = refl
     II (inr b) = ap (Ξ» - β†’ Ξ± ^β‚’ - Γ—β‚’ Ξ±) (initial-segments-agree b ⁻¹)

^β‚’-satisfies-sup-specification-generalized :
   {𝓀 π“₯ : Universe} (Ξ± : Ordinal 𝓀)
 β†’ exp-specification-sup-generalized {𝓀} {π“₯} Ξ± (Ξ± ^β‚’_)
^β‚’-satisfies-sup-specification-generalized {𝓀} {π“₯} Ξ± _ {S} S-inh F =
 ⊴-antisym (Ξ± ^β‚’ sup F) (sup (Ξ» - β†’ Ξ± ^β‚’ F (lower -))) I II
  where
   II : sup (Ξ» - β†’ Ξ± ^β‚’ F (lower -)) ⊴ Ξ± ^β‚’ sup F
   II = sup-is-lower-bound-of-upper-bounds
         (Ξ» - β†’ Ξ± ^β‚’ F (lower -))
         (Ξ± ^β‚’ sup F)
         (Ξ» i β†’ ^β‚’-monotone-in-exponent Ξ± (F (lower i)) (sup F)
                 (sup-is-upper-bound F (lower i)))

   I : Ξ± ^β‚’ sup F ⊴ sup (Ξ» - β†’ Ξ± ^β‚’ F (lower -))
   I = ^β‚’-is-lower-bound-of-upper-bounds
        Ξ±
        (sup F)
        (sup (Ξ» - β†’ Ξ± ^β‚’ F (lower -)))
        I₁
        Iβ‚‚
    where
     I₁ : πŸ™β‚’ ⊴ sup (Ξ» - β†’ Ξ± ^β‚’ F (lower -))
     I₁ = βˆ₯βˆ₯-rec (⊴-is-prop-valued πŸ™β‚’ (sup (Ξ» - β†’ Ξ± ^β‚’ F (lower -)))) I₁' S-inh
      where
       I₁' : S β†’ πŸ™β‚’ ⊴ sup (Ξ» - β†’ Ξ± ^β‚’ F (lower -))
       I₁' sβ‚€ = ⊴-trans
                 πŸ™β‚’
                 (Ξ± ^β‚’ (F sβ‚€))
                 (sup (Ξ» - β†’ Ξ± ^β‚’ F (lower -)))
                 (^β‚’-is-upper-bound₁ Ξ± (F sβ‚€))
                 (sup-is-upper-bound (Ξ» - β†’ Ξ± ^β‚’ F (lower -)) (lift 𝓀 sβ‚€))
     Iβ‚‚ : (y : ⟨ sup F ⟩)
        β†’ Ξ± ^β‚’ (sup F ↓ y) Γ—β‚’ Ξ± ⊴ sup (Ξ» - β†’ Ξ± ^β‚’ F (lower -))
     Iβ‚‚ y = βˆ₯βˆ₯-rec
             (⊴-is-prop-valued
               (Ξ± ^β‚’ (sup F ↓ y) Γ—β‚’ Ξ±)
               (sup (Ξ» - β†’ Ξ± ^β‚’ F (lower -))))
             Iβ‚‚'
             (initial-segment-of-sup-is-initial-segment-of-some-component F y)
      where
       Iβ‚‚' : (Ξ£ s κž‰ S , Ξ£ x κž‰ ⟨ F s ⟩ , sup F ↓ y = F s ↓ x)
           β†’ Ξ± ^β‚’ (sup F ↓ y) Γ—β‚’ Ξ± ⊴ sup (Ξ» - β†’ Ξ± ^β‚’ F (lower -))
       Iβ‚‚' (s , x , p) =
        transport⁻¹
         (_⊴ sup (Ξ» - β†’ Ξ± ^β‚’ F (lower -)))
         (ap (Ξ» - β†’ Ξ± ^β‚’ - Γ—β‚’ Ξ±) p)
         (⊴-trans
          (Ξ± ^β‚’ (F s ↓ x) Γ—β‚’ Ξ±)
          (Ξ± ^β‚’ F s)
          (sup (Ξ» - β†’ Ξ± ^β‚’ (F (lower -))))
          (^β‚’-is-upper-boundβ‚‚ Ξ± (F s))
          (sup-is-upper-bound (Ξ» - β†’ Ξ± ^β‚’ (F (lower -))) (lift 𝓀 s)))

^β‚’-satisfies-sup-specification : (Ξ± : Ordinal 𝓀)
                               β†’ exp-specification-sup Ξ± (Ξ± ^β‚’_)
^β‚’-satisfies-sup-specification Ξ± =
 exp-specification-sup-from-generalized
  Ξ± (Ξ± ^β‚’_) (^β‚’-satisfies-sup-specification-generalized Ξ±)

\end{code}

Exponentiating by πŸ™β‚’ and πŸšβ‚’ behaves as expected (and this behaviour follows
abstractly from the zero and successor specifications).

\begin{code}

πŸ™β‚’-neutral-^β‚’ : (Ξ± : Ordinal 𝓀) β†’ πŸ™β‚’ ⊴ Ξ± β†’ Ξ± ^β‚’ πŸ™β‚’ = Ξ±
πŸ™β‚’-neutral-^β‚’ Ξ± l = πŸ™β‚’-neutral-exp Ξ± (Ξ± ^β‚’_)
                     (^β‚’-satisfies-zero-specification Ξ±)
                     (^β‚’-satisfies-succ-specification Ξ± l)

^β‚’-πŸšβ‚’-is-Γ—β‚’ : (Ξ± : Ordinal 𝓀) β†’ πŸ™β‚’ ⊴ Ξ± β†’ Ξ± ^β‚’ πŸšβ‚’ = Ξ± Γ—β‚’ Ξ±
^β‚’-πŸšβ‚’-is-Γ—β‚’ Ξ± l = exp-πŸšβ‚’-is-Γ—β‚’ Ξ± (Ξ± ^β‚’_)
                   (^β‚’-satisfies-zero-specification Ξ±)
                   (^β‚’-satisfies-succ-specification Ξ± l)

\end{code}

More generally, we have
  Ξ± ^β‚’ (Ξ² +β‚’ Ξ³) = Ξ± ^β‚’ Ξ² Γ—β‚’ Ξ± ^β‚’ Ξ³,
the proof of which makes use of the following general lemma which folds the
product into the supremum.

\begin{code}

Γ—β‚’-^β‚’-lemma :
   (Ξ± : Ordinal 𝓀) (Ξ² : Ordinal π“₯) (Ξ³ : Ordinal (𝓀 βŠ” π“₯))
 β†’ Ξ³ Γ—β‚’ Ξ± ^β‚’ Ξ²
   = sup (cases (Ξ» (_ : πŸ™  {𝓀}) β†’ Ξ³) (Ξ» (b : ⟨ Ξ² ⟩) β†’ Ξ³ Γ—β‚’ Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’ Ξ±))
Γ—β‚’-^β‚’-lemma {𝓀} {π“₯} Ξ± Ξ² Ξ³ =
 Ξ³ Γ—β‚’ Ξ± ^β‚’ Ξ²                        =⟨ I   ⟩
 Ξ³ Γ—β‚’ sup (^β‚’-family Ξ± Ξ²)           =⟨ II  ⟩
 sup (Ξ» - β†’ Ξ³ Γ—β‚’ (^β‚’-family Ξ± Ξ² -)) =⟨ III ⟩
 sup F                              ∎
  where
   F : πŸ™ + ⟨ Ξ² ⟩ β†’ Ordinal (𝓀 βŠ” π“₯)
   F = cases (Ξ» _ β†’ Ξ³) (Ξ» b β†’ Ξ³ Γ—β‚’ Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’ Ξ±)

   I   = ap (Ξ³ Γ—β‚’_) (^β‚’-behaviour Ξ± Ξ²)
   II  = Γ—β‚’-preserves-suprema pt sr Ξ³ (^β‚’-family Ξ± Ξ²)
   III = ap sup (dfunext fe' h)
    where
     h : (Ξ» - β†’ Ξ³ Γ—β‚’ ^β‚’-family Ξ± Ξ² -) ∼ F
     h (inl ⋆) = πŸ™β‚’-right-neutral-Γ—β‚’ Ξ³
     h (inr b) = (Γ—β‚’-assoc Ξ³ (Ξ± ^β‚’ (Ξ² ↓ b)) Ξ±) ⁻¹

^β‚’-by-+β‚’ : (Ξ± : Ordinal 𝓀) (Ξ² Ξ³ : Ordinal π“₯)
         β†’ Ξ± ^β‚’ (Ξ² +β‚’ Ξ³) = Ξ± ^β‚’ Ξ² Γ—β‚’ Ξ± ^β‚’ Ξ³
^β‚’-by-+β‚’ {𝓀} {π“₯} Ξ± Ξ² =
 transfinite-induction-on-OO (Ξ» Ξ³ β†’ Ξ± ^β‚’ (Ξ² +β‚’ Ξ³) = Ξ± ^β‚’ Ξ² Γ—β‚’ Ξ± ^β‚’ Ξ³) I
  where
   I : (Ξ³ : Ordinal π“₯)
     β†’ ((c : ⟨ Ξ³ ⟩) β†’ Ξ± ^β‚’ (Ξ² +β‚’ (Ξ³ ↓ c)) = Ξ± ^β‚’ Ξ² Γ—β‚’ Ξ± ^β‚’ (Ξ³ ↓ c))
     β†’ Ξ± ^β‚’ (Ξ² +β‚’ Ξ³) = Ξ± ^β‚’ Ξ² Γ—β‚’ Ξ± ^β‚’ Ξ³
   I Ξ³ IH = Ξ± ^β‚’ (Ξ² +β‚’ Ξ³)    =⟨ ⊴-antisym (Ξ± ^β‚’ (Ξ² +β‚’ Ξ³)) (sup F) II III ⟩
            sup F            =⟨ (Γ—β‚’-^β‚’-lemma Ξ± Ξ³ (Ξ± ^β‚’ Ξ²)) ⁻¹ ⟩
            Ξ± ^β‚’ Ξ² Γ—β‚’ Ξ± ^β‚’ Ξ³ ∎
    where
     F : πŸ™ + ⟨ Ξ³ ⟩ β†’ Ordinal (𝓀 βŠ” π“₯)
     F = cases (Ξ» _ β†’ Ξ± ^β‚’ Ξ²) (Ξ» c β†’ Ξ± ^β‚’ Ξ² Γ—β‚’ Ξ± ^β‚’ (Ξ³ ↓ c) Γ—β‚’ Ξ±)

     eq : (c : ⟨ γ ⟩)
        β†’ Ξ± ^β‚’ Ξ² Γ—β‚’ Ξ± ^β‚’ (Ξ³ ↓ c) Γ—β‚’ Ξ± = Ξ± ^β‚’ ((Ξ² +β‚’ Ξ³) ↓ inr c) Γ—β‚’ Ξ±
     eq c = Ξ± ^β‚’ Ξ² Γ—β‚’ Ξ± ^β‚’ (Ξ³ ↓ c) Γ—β‚’ Ξ±  =⟨ e₁ ⟩
            Ξ± ^β‚’ (Ξ² +β‚’ (Ξ³ ↓ c)) Γ—β‚’ Ξ±     =⟨ eβ‚‚ ⟩
            Ξ± ^β‚’ ((Ξ² +β‚’ Ξ³) ↓ inr c) Γ—β‚’ Ξ± ∎
      where
       e₁ = ap (_Γ—β‚’ Ξ±) ((IH c) ⁻¹)
       eβ‚‚ = ap (Ξ» - β†’ Ξ± ^β‚’ - Γ—β‚’ Ξ±) (+β‚’-↓-right c)

     II : Ξ± ^β‚’ (Ξ² +β‚’ Ξ³) ⊴ sup F
     II = ^β‚’-is-lower-bound-of-upper-bounds Ξ± (Ξ² +β‚’ Ξ³) (sup F)
            II₁ IIβ‚‚
       where
        II₁ : πŸ™β‚’ ⊴ sup F
        II₁ = ⊴-trans πŸ™β‚’ (Ξ± ^β‚’ Ξ²) (sup F)
               (^β‚’-has-least-element Ξ± Ξ²)
               (sup-is-upper-bound _ (inl ⋆))
        IIβ‚‚ : (x : ⟨ Ξ² +β‚’ Ξ³ ⟩) β†’ Ξ± ^β‚’ (Ξ² +β‚’ Ξ³ ↓ x) Γ—β‚’ Ξ± ⊴ sup F
        IIβ‚‚ (inl b) = transport
                       (_⊴ sup F)
                       (ap (Ξ» - β†’ Ξ± ^β‚’ - Γ—β‚’ Ξ±) (+β‚’-↓-left b))
                       (⊴-trans (Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’ Ξ±) (Ξ± ^β‚’ Ξ²) (sup F)
                         (^β‚’-is-upper-boundβ‚‚ Ξ± Ξ²)
                         (sup-is-upper-bound F (inl ⋆)))
        IIβ‚‚ (inr c) =
         transport (_⊴ sup F) (eq c) (sup-is-upper-bound F (inr c))

     III : sup F ⊴ Ξ± ^β‚’ (Ξ² +β‚’ Ξ³)
     III = sup-is-lower-bound-of-upper-bounds _ (Ξ± ^β‚’ (Ξ² +β‚’ Ξ³)) III'
      where
       III' : (x : πŸ™ + ⟨ Ξ³ ⟩) β†’ F x ⊴ Ξ± ^β‚’ (Ξ² +β‚’ Ξ³)
       III' (inl ⋆) = ^β‚’-monotone-in-exponent Ξ± Ξ² (Ξ² +β‚’ Ξ³) (+β‚’-left-⊴ Ξ² Ξ³)
       III' (inr c) =
        transport⁻¹ (_⊴ Ξ± ^β‚’ (Ξ² +β‚’ Ξ³)) (eq c) (^β‚’-is-upper-boundβ‚‚ Ξ± (Ξ² +β‚’ Ξ³))

\end{code}

The general lemma
  Ξ± ^β‚’ (Ξ² +β‚’ Ξ³) = Ξ± ^β‚’ Ξ² Γ—β‚’ Ξ± ^β‚’ Ξ³
has the successor specification
  Ξ± ^β‚’ (Ξ² +β‚’ πŸ™β‚’) = Ξ± ^β‚’ Ξ² Γ—β‚’ Ξ±
as a special case, but deriving it like this forces the universe parameters to
be less general compared to the direct proof given above in
^β‚’-satisifies-succ-specification.

The proof above of πŸ™β‚’-neutral-^β‚’ goes via
^β‚’-satisifies-succ-specification, so in order to avoid an implicit
dependency on that proof, we reprove it from scratch here.

\begin{code}

^β‚’-satisfies-succ-specification' : (Ξ± : Ordinal 𝓀)
                                 β†’ πŸ™β‚’ ⊴ Ξ±
                                 β†’ exp-specification-succ {𝓀} {𝓀} Ξ± (Ξ± ^β‚’_)
^β‚’-satisfies-succ-specification' {𝓀} Ξ± l Ξ² =
 Ξ± ^β‚’ (Ξ² +β‚’ πŸ™β‚’)    =⟨ ^β‚’-by-+β‚’ Ξ± Ξ² πŸ™β‚’ ⟩
 Ξ± ^β‚’ Ξ² Γ—β‚’ Ξ± ^β‚’ πŸ™β‚’ =⟨ ap (Ξ± ^β‚’ Ξ² Γ—β‚’_) (πŸ™β‚’-neutral-^β‚’' Ξ± l) ⟩
 Ξ± ^β‚’ Ξ² Γ—β‚’ Ξ±       ∎
  where
   πŸ™β‚’-neutral-^β‚’' : (Ξ± : Ordinal 𝓀) β†’ πŸ™β‚’ {𝓀} ⊴ Ξ± β†’ Ξ± ^β‚’ πŸ™β‚’ = Ξ±
   πŸ™β‚’-neutral-^β‚’' Ξ± l = ⊴-antisym (Ξ± ^β‚’ πŸ™β‚’) Ξ± II III
    where
     I = Ξ± ^β‚’ (πŸ™β‚’ ↓ ⋆) Γ—β‚’ Ξ± =⟨ ap (Ξ» - β†’ Ξ± ^β‚’ - Γ—β‚’ Ξ±) πŸ™β‚’-↓ ⟩
         Ξ± ^β‚’ πŸ˜β‚’ Γ—β‚’ Ξ±       =⟨ ap (_Γ—β‚’ Ξ±) (^β‚’-satisfies-zero-specification Ξ±) ⟩
         πŸ™β‚’ Γ—β‚’ Ξ±            =⟨ πŸ™β‚’-left-neutral-Γ—β‚’ Ξ± ⟩
         α                  ∎

     II : Ξ± ^β‚’ πŸ™β‚’ ⊴ Ξ±
     II = ^β‚’-is-lower-bound-of-upper-bounds Ξ± πŸ™β‚’ Ξ± l (Ξ» _ β†’ II')
      where
       II' : Ξ± ^β‚’ (πŸ™β‚’ ↓ ⋆) Γ—β‚’ Ξ± ⊴ Ξ±
       II' = transport⁻¹ (_⊴ α) I (⊴-refl α)

     III : Ξ± ⊴ Ξ± ^β‚’ πŸ™β‚’
     III = transport (_⊴ Ξ± ^β‚’ πŸ™β‚’) I (^β‚’-is-upper-boundβ‚‚ Ξ± πŸ™β‚’)

\end{code}

Exponentiating by a product is iterated exponentiation:

\begin{code}

^β‚’-by-Γ—β‚’ : (Ξ± : Ordinal 𝓀) (Ξ² Ξ³ : Ordinal π“₯)
         β†’ Ξ± ^β‚’ (Ξ² Γ—β‚’ Ξ³) = (Ξ± ^β‚’ Ξ²) ^β‚’ Ξ³
^β‚’-by-Γ—β‚’ {𝓀} {π“₯} Ξ± Ξ² =
 transfinite-induction-on-OO (Ξ» Ξ³ β†’ Ξ± ^β‚’ (Ξ² Γ—β‚’ Ξ³) = (Ξ± ^β‚’ Ξ²) ^β‚’ Ξ³) I
  where
   I : (Ξ³ : Ordinal π“₯)
     β†’ ((c : ⟨ Ξ³ ⟩) β†’ Ξ± ^β‚’ (Ξ² Γ—β‚’ (Ξ³ ↓ c)) = (Ξ± ^β‚’ Ξ²) ^β‚’ (Ξ³ ↓ c))
     β†’ Ξ± ^β‚’ (Ξ² Γ—β‚’ Ξ³) = (Ξ± ^β‚’ Ξ²) ^β‚’ Ξ³
   I Ξ³ IH = ⊴-antisym (Ξ± ^β‚’ (Ξ² Γ—β‚’ Ξ³)) ((Ξ± ^β‚’ Ξ²) ^β‚’ Ξ³) II III
    where
     II : Ξ± ^β‚’ (Ξ² Γ—β‚’ Ξ³) ⊴ (Ξ± ^β‚’ Ξ²) ^β‚’ Ξ³
     II = ^β‚’-is-lower-bound-of-upper-bounds Ξ± (Ξ² Γ—β‚’ Ξ³) ((Ξ± ^β‚’ Ξ²) ^β‚’ Ξ³)
           (^β‚’-is-upper-bound₁ (Ξ± ^β‚’ Ξ²) Ξ³)
           II'
      where
       II' : (x : ⟨ Ξ² Γ—β‚’ Ξ³ ⟩) β†’ Ξ± ^β‚’ (Ξ² Γ—β‚’ Ξ³ ↓ x) Γ—β‚’ Ξ± ⊴ (Ξ± ^β‚’ Ξ²) ^β‚’ Ξ³
       II' (b , c) =
        transport⁻¹ (_⊴ (Ξ± ^β‚’ Ξ²) ^β‚’ Ξ³) eq
         (⊴-trans
           ((Ξ± ^β‚’ Ξ²) ^β‚’ (Ξ³ ↓ c) Γ—β‚’ (Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’ Ξ±))
           ((Ξ± ^β‚’ Ξ²) ^β‚’ (Ξ³ ↓ c) Γ—β‚’ Ξ± ^β‚’ Ξ²)
           ((Ξ± ^β‚’ Ξ²) ^β‚’ Ξ³)
           (Γ—β‚’-right-monotone-⊴
             ((Ξ± ^β‚’ Ξ²) ^β‚’ (Ξ³ ↓ c))
             (Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’ Ξ±)
             (Ξ± ^β‚’ Ξ²)
             (^β‚’-is-upper-boundβ‚‚ Ξ± Ξ²))
           (^β‚’-is-upper-boundβ‚‚ (Ξ± ^β‚’ Ξ²) Ξ³))
        where
         eq = Ξ± ^β‚’ (Ξ² Γ—β‚’ Ξ³ ↓ (b , c)) Γ—β‚’ Ξ±               =⟨ e₁ ⟩
              Ξ± ^β‚’ (Ξ² Γ—β‚’ (Ξ³ ↓ c) +β‚’ (Ξ² ↓ b)) Γ—β‚’ Ξ±        =⟨ eβ‚‚ ⟩
              Ξ± ^β‚’ (Ξ² Γ—β‚’ (Ξ³ ↓ c)) Γ—β‚’ Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’ Ξ±   =⟨ e₃ ⟩
              (Ξ± ^β‚’ Ξ²) ^β‚’ (Ξ³ ↓ c) Γ—β‚’ Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’ Ξ±   =⟨ eβ‚„ ⟩
              (Ξ± ^β‚’ Ξ²) ^β‚’ (Ξ³ ↓ c) Γ—β‚’ (Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’ Ξ±) ∎
          where
           e₁ = ap (Ξ» - β†’ Ξ± ^β‚’ - Γ—β‚’ Ξ±) (Γ—β‚’-↓ Ξ² Ξ³)
           eβ‚‚ = ap (_Γ—β‚’ Ξ±) (^β‚’-by-+β‚’ Ξ± (Ξ² Γ—β‚’ (Ξ³ ↓ c)) (Ξ² ↓ b))
           e₃ = ap (Ξ» - β†’ - Γ—β‚’ Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’ Ξ±) (IH c)
           eβ‚„ = Γ—β‚’-assoc ((Ξ± ^β‚’ Ξ²) ^β‚’ (Ξ³ ↓ c)) (Ξ± ^β‚’ (Ξ² ↓ b)) Ξ±

     III : (Ξ± ^β‚’ Ξ²) ^β‚’ Ξ³ ⊴ Ξ± ^β‚’ (Ξ² Γ—β‚’ Ξ³)
     III = ^β‚’-is-lower-bound-of-upper-bounds (Ξ± ^β‚’ Ξ²) Ξ³ (Ξ± ^β‚’ (Ξ² Γ—β‚’ Ξ³))
            (^β‚’-is-upper-bound₁ Ξ± (Ξ² Γ—β‚’ Ξ³))
            III'
      where
       III' : (c : ⟨ Ξ³ ⟩) β†’ (Ξ± ^β‚’ Ξ²) ^β‚’ (Ξ³ ↓ c) Γ—β‚’ Ξ± ^β‚’ Ξ² ⊴ Ξ± ^β‚’ (Ξ² Γ—β‚’ Ξ³)
       III' c =
        transport⁻¹ (_⊴ Ξ± ^β‚’ (Ξ² Γ—β‚’ Ξ³)) eq
         (^β‚’-monotone-in-exponent Ξ± (Ξ² Γ—β‚’ ((Ξ³ ↓ c) +β‚’ πŸ™β‚’)) (Ξ² Γ—β‚’ Ξ³)
           (Γ—β‚’-right-monotone-⊴ Ξ² ((Ξ³ ↓ c) +β‚’ πŸ™β‚’) Ξ³
             (upper-bound-of-successors-of-initial-segments Ξ³ c)))
        where
         eq = (Ξ± ^β‚’ Ξ²) ^β‚’ (Ξ³ ↓ c) Γ—β‚’ Ξ± ^β‚’ Ξ² =⟨ e₁ ⟩
              Ξ± ^β‚’ (Ξ² Γ—β‚’ (Ξ³ ↓ c)) Γ—β‚’ Ξ± ^β‚’ Ξ² =⟨ eβ‚‚ ⟩
              Ξ± ^β‚’ (Ξ² Γ—β‚’ (Ξ³ ↓ c) +β‚’ Ξ²)      =⟨ e₃ ⟩
              Ξ± ^β‚’ (Ξ² Γ—β‚’ ((Ξ³ ↓ c) +β‚’ πŸ™β‚’))   ∎
          where
           e₁ = ap (_Γ—β‚’ Ξ± ^β‚’ Ξ²) ((IH c) ⁻¹)
           eβ‚‚ = (^β‚’-by-+β‚’ Ξ± (Ξ² Γ—β‚’ (Ξ³ ↓ c)) Ξ²) ⁻¹
           e₃ = ap (Ξ± ^β‚’_) (Γ—β‚’-successor Ξ² (Ξ³ ↓ c) ⁻¹)

\end{code}

The following characterizes initial segments of exponentiated ordinals.

\begin{code}

^β‚’-↓-βŠ₯ : (Ξ± : Ordinal 𝓀) (Ξ² : Ordinal π“₯)
       β†’ Ξ± ^β‚’ Ξ² ↓ ^β‚’-βŠ₯ Ξ± Ξ² = πŸ˜β‚’
^β‚’-↓-βŠ₯ Ξ± Ξ² = Ξ± ^β‚’ Ξ² ↓ ^β‚’-βŠ₯ Ξ± Ξ² =⟨ I ⟩
             πŸ™β‚’ ↓ ⋆            =⟨ πŸ™β‚’-↓ ⟩
             πŸ˜β‚’                ∎
 where
  I = (simulations-preserve-↓ πŸ™β‚’ (Ξ± ^β‚’ Ξ²) (^β‚’-is-upper-bound₁ Ξ± Ξ²) ⋆) ⁻¹

^β‚’-↓-Γ—β‚’-to-^β‚’ : (Ξ± Ξ² : Ordinal 𝓀)
                {b : ⟨ Ξ² ⟩} {e : ⟨ Ξ± ^β‚’ (Ξ² ↓ b) ⟩} {a : ⟨ Ξ± ⟩}
              β†’ Ξ± ^β‚’ Ξ² ↓ Γ—β‚’-to-^β‚’ Ξ± Ξ² (e , a)
                = Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’ (Ξ± ↓ a) +β‚’ (Ξ± ^β‚’ (Ξ² ↓ b) ↓ e)
^β‚’-↓-Γ—β‚’-to-^β‚’ Ξ± Ξ² {b} {e} {a} =
 Ξ± ^β‚’ Ξ² ↓ Γ—β‚’-to-^β‚’ Ξ± Ξ² (e , a)                 =⟨ I ⟩
 Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’ Ξ± ↓ (e , a)                   =⟨ II ⟩
 Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’ (Ξ± ↓ a) +β‚’ (Ξ± ^β‚’ (Ξ² ↓ b) ↓ e) ∎
  where
   I = (simulations-preserve-↓
         (Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’ Ξ±)
         (Ξ± ^β‚’ Ξ²)
         (^β‚’-is-upper-boundβ‚‚ Ξ± Ξ²)
         (e , a)) ⁻¹
   II = Γ—β‚’-↓ (Ξ± ^β‚’ (Ξ² ↓ b)) Ξ±

^β‚’-↓ :
   (Ξ± Ξ² : Ordinal 𝓀) {x : ⟨ Ξ± ^β‚’ Ξ² ⟩}
 β†’ (Ξ± ^β‚’ Ξ² ↓ x = πŸ˜β‚’)
 ∨ (Ξ£ b κž‰ ⟨ Ξ² ⟩ , Ξ£ e κž‰ ⟨ Ξ± ^β‚’ (Ξ² ↓ b) ⟩ , Ξ£ a κž‰ ⟨ Ξ± ⟩ ,
     Ξ± ^β‚’ Ξ² ↓ x = Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’ (Ξ± ↓ a) +β‚’ (Ξ± ^β‚’ (Ξ² ↓ b) ↓ e))
^β‚’-↓ {𝓀} Ξ± Ξ² {x} =
 ^β‚’-induction Ξ± Ξ² P
  (Ξ» _ β†’ βˆ₯βˆ₯-is-prop)
  (∣ inl (^β‚’-↓-βŠ₯ Ξ± Ξ²) ∣)
  (Ξ» b (e , a) β†’ ∣ inr (b , e , a , ^β‚’-↓-Γ—β‚’-to-^β‚’ Ξ± Ξ²) ∣)
  x
 where
  P : (x : ⟨ Ξ± ^β‚’ Ξ² ⟩) β†’ 𝓀 ⁺ Μ‡
  P x = (Ξ± ^β‚’ Ξ² ↓ x = πŸ˜β‚’)
      ∨ (Ξ£ b κž‰ ⟨ Ξ² ⟩ , Ξ£ e κž‰ ⟨ Ξ± ^β‚’ (Ξ² ↓ b) ⟩ , Ξ£ a κž‰ ⟨ Ξ± ⟩ ,
          Ξ± ^β‚’ Ξ² ↓ x = Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’ (Ξ± ↓ a) +β‚’ (Ξ± ^β‚’ (Ξ² ↓ b) ↓ e))

\end{code}

Finally, using the above characterization of initial segments, we show that ^β‚’
is (stricly) order preserving in the exponent (provided that the base is
strictly greater than πŸ™β‚’).

\begin{code}

^β‚’-⊲-lemma : (Ξ± Ξ² : Ordinal 𝓀)
           β†’ πŸ™β‚’ ⊲ Ξ±
           β†’ {b : ⟨ Ξ² ⟩} β†’ Ξ± ^β‚’ (Ξ² ↓ b) ⊲ Ξ± ^β‚’ Ξ²
^β‚’-⊲-lemma Ξ± Ξ² (a₁ , p) {b} = e , (q ⁻¹)
 where
  βŠ₯ : ⟨ Ξ± ^β‚’ (Ξ² ↓ b) ⟩
  βŠ₯ = ^β‚’-βŠ₯ Ξ± (Ξ² ↓ b)
  e : ⟨ Ξ± ^β‚’ Ξ² ⟩
  e = Γ—β‚’-to-^β‚’ Ξ± Ξ² (βŠ₯ , a₁)
  q = Ξ± ^β‚’ Ξ² ↓ e                                     =⟨ I   ⟩
      Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’ (Ξ± ↓ a₁) +β‚’ (Ξ± ^β‚’ (Ξ² ↓ b) ↓ βŠ₯) =⟨ II  ⟩
      Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’ (Ξ± ↓ a₁) +β‚’ πŸ˜β‚’                 =⟨ III ⟩
      Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’ (Ξ± ↓ a₁)                       =⟨ IV  ⟩
      Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’ πŸ™β‚’                             =⟨ V   ⟩
      Ξ± ^β‚’ (Ξ² ↓ b)                                   ∎
   where
    I   = ^β‚’-↓-Γ—β‚’-to-^β‚’ Ξ± Ξ²
    II  = ap (Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’ (Ξ± ↓ a₁) +β‚’_) (^β‚’-↓-βŠ₯ Ξ± (Ξ² ↓ b))
    III = πŸ˜β‚’-right-neutral (Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’ (Ξ± ↓ a₁))
    IV  = ap (Ξ± ^β‚’ (Ξ² ↓ b) Γ—β‚’_) (p ⁻¹)
    V   = πŸ™β‚’-right-neutral-Γ—β‚’ (Ξ± ^β‚’ (Ξ² ↓ b))

^β‚’-order-preserving-in-exponent : (Ξ± Ξ² Ξ³ : Ordinal 𝓀)
                                β†’ πŸ™β‚’ ⊲ Ξ±
                                β†’ Ξ² ⊲ Ξ³ β†’ Ξ± ^β‚’ Ξ² ⊲ Ξ± ^β‚’ Ξ³
^β‚’-order-preserving-in-exponent Ξ± Ξ² Ξ³ h (c , refl) = ^β‚’-⊲-lemma Ξ± Ξ³ h

\end{code}