We define types expressing what ordinal exponentiation should be for zero,
successor and supremum exponents, and we record a few properties that follow
immediately follow from those specifications.
\begin{code}
{-# OPTIONS --safe --without-K --exact-split #-}
open import UF.PropTrunc
open import UF.Size
open import UF.Univalence
module Ordinals.Exponentiation.Specification
(ua : Univalence)
(pt : propositional-truncations-exist)
(sr : Set-Replacement pt)
where
open import MLTT.Spartan
open import UF.FunExt
open import UF.UA-FunExt
open import UF.UniverseEmbedding
private
fe : FunExt
fe = Univalence-gives-FunExt ua
open import Ordinals.AdditionProperties ua
open import Ordinals.Arithmetic fe
open import Ordinals.Maps
open import Ordinals.MultiplicationProperties ua
open import Ordinals.OrdinalOfOrdinals ua
open import Ordinals.OrdinalOfOrdinalsSuprema ua
open import Ordinals.Type
open PropositionalTruncation pt
open suprema pt sr
\end{code}
In what follows F should be thought of as implementing ordinal exponentiation
with base ฮฑ, i.e. F ฮฒ produces the ordinal ฮฑ^ฮฒ.
The three requirements below, together with ๐โ^ฮฒ ๏ผ ๐โ for ฮฒ โ ๐โ, classically
*define* ordinal exponentiation.
\begin{code}
module _
{๐ค ๐ฅ : Universe}
(ฮฑ : Ordinal ๐ค)
(F : Ordinal ๐ฅ โ Ordinal (๐ค โ ๐ฅ))
where
exp-specification-zero : (๐ค โ ๐ฅ) โบ ฬ
exp-specification-zero = F (๐โ {๐ฅ}) ๏ผ ๐โ
exp-specification-succ : (๐ค โ ๐ฅ) โบ ฬ
exp-specification-succ = (ฮฒ : Ordinal ๐ฅ) โ F (ฮฒ +โ ๐โ) ๏ผ (F ฮฒ รโ ฮฑ)
exp-specification-sup-generalized : (๐ค โ ๐ฅ) โบ ฬ
exp-specification-sup-generalized =
ฮฑ โ ๐โ โ {I : ๐ฅ ฬ } โ โฅ I โฅ โ (ฮฒ : I โ Ordinal ๐ฅ)
โ F (sup ฮฒ) ๏ผ sup (ฮป (i : Lift ๐ค I) โ F (ฮฒ (lower i)))
module _
(ฮฑ : Ordinal ๐ค)
(F : Ordinal ๐ค โ Ordinal ๐ค)
where
exp-specification-sup : ๐ค โบ ฬ
exp-specification-sup =
ฮฑ โ ๐โ โ {I : ๐ค ฬ } โ โฅ I โฅ โ (ฮฒ : I โ Ordinal ๐ค)
โ F (sup ฮฒ) ๏ผ sup (F โ ฮฒ)
exp-specification-sup-from-generalized : exp-specification-sup-generalized ฮฑ F
โ exp-specification-sup
exp-specification-sup-from-generalized ฯ l {I} I-inh ฮฒ = ฯ l I-inh ฮฒ โ e
where
e : sup (F โ ฮฒ โ lower) ๏ผ sup (F โ ฮฒ)
e = โด-antisym _ _
(sup-composition-โด lower (F โ ฮฒ))
(sup-composition-โด (lift ๐ค) (F โ ฮฒ โ lower))
\end{code}
The following special cases follow directly from the specification.
\begin{code}
module _
(ฮฑ : Ordinal ๐ค)
(exp-ฮฑ : Ordinal ๐ค โ Ordinal ๐ค)
(exp-zero : exp-specification-zero ฮฑ exp-ฮฑ)
(exp-succ : exp-specification-succ ฮฑ exp-ฮฑ)
where
๐โ-neutral-exp : exp-ฮฑ ๐โ ๏ผ ฮฑ
๐โ-neutral-exp =
exp-ฮฑ ๐โ ๏ผโจ ap (exp-ฮฑ) (๐โ-left-neutral ๐โ โปยน) โฉ
exp-ฮฑ (๐โ {๐ค} +โ ๐โ) ๏ผโจ exp-succ ๐โ โฉ
exp-ฮฑ (๐โ) รโ ฮฑ ๏ผโจ ap (_รโ ฮฑ) exp-zero โฉ
๐โ รโ ฮฑ ๏ผโจ ๐โ-left-neutral-รโ ฮฑ โฉ
ฮฑ โ
exp-๐โ-is-รโ : exp-ฮฑ ๐โ ๏ผ ฮฑ รโ ฮฑ
exp-๐โ-is-รโ =
exp-ฮฑ (๐โ +โ ๐โ) ๏ผโจ exp-succ ๐โ โฉ
exp-ฮฑ ๐โ รโ ฮฑ ๏ผโจ ap (_รโ ฮฑ) ๐โ-neutral-exp โฉ
ฮฑ รโ ฮฑ โ
\end{code}
The specification for suprema implies monotonicity.
\begin{code}
exp-is-monotone-in-exponent : (ฮฑ : Ordinal ๐ค)
(exp-ฮฑ : Ordinal ๐ฅ โ Ordinal (๐ค โ ๐ฅ))
โ (ฮฑ โ ๐โ)
โ exp-specification-sup-generalized ฮฑ exp-ฮฑ
โ is-monotone (OO ๐ฅ) (OO (๐ค โ ๐ฅ)) exp-ฮฑ
exp-is-monotone-in-exponent ฮฑ exp-ฮฑ ฮฝ exp-sup =
is-monotone-if-continuous-generalized exp-ฮฑ (exp-sup ฮฝ)
\end{code}