Tom de Jong, 16 October 2026.
We introduce a general scheme (cf. the BoundedOperations file) that captures
addition, multiplication and exponentiation by a fixed ordinal α.
This scheme used to be part of ArithmeticReflection, but was factored out to be
hosted in this separate file.
We consider an operation F : Ordinal š¤ ā Ordinal š¤ together with
- an ordinal Z : Ordinal š¤ (for the zero case)
- an operation S : Ordinal š¤ ā Ordinal š¤ (for the successor case)
such that
- F (β +ā šā) ļ¼ S (F β) for all β : Ordinal š¤,
- F (sup L) ļ¼ Z ⨠sup (F ā L) for all L : I ā Ordinal š¤ with I : š¤.
Note that if we take L to be the empty family, then we get
F šā ļ¼ Z ⨠šā ļ¼ Z, which is why Z is the zero case.
Such an operation F is unique, because it must satisfy the recursive equation
F β = Z ⨠sup (Ī» b ā S (F (β ā b))),
since every ordinal is the supremum of the successors of its initial segments.
As mentioned, examples are addition, multiplication and exponentiation
by a fixed ordinal α. Specifically,
- for F := (-) +ā α, we take Z = α and S β := β +ā šā;
- for F := (-) Ćā α, we take Z = šā and S β := β +ā α;
- for F := α ^ā (-), we take Z = šā and S β := β Ćā α (given šā ⓠα).
In particular, these operations are uniquely specified.
\begin{code}
{-# OPTIONS --safe --without-K #-}
open import UF.Univalence
open import UF.PropTrunc
open import UF.Size
module Ordinals.OperationsByCases
(ua : Univalence)
(pt : propositional-truncations-exist)
(sr : Set-Replacement pt)
where
open import MLTT.Spartan hiding (J)
open import UF.Equiv
open import UF.EquivalenceExamples
open import UF.FunExt
open import UF.Subsingletons
open import UF.Subsingletons-FunExt
open import UF.UA-FunExt
private
fe : FunExt
fe = Univalence-gives-FunExt ua
fe' : Fun-Ext
fe' {š¤} {š„} = fe š¤ š„
open import Ordinals.AdditionProperties ua
open import Ordinals.Arithmetic fe
open import Ordinals.Equivalence
open import Ordinals.OrdinalOfOrdinals ua
open import Ordinals.OrdinalOfOrdinalsSuprema ua
open import Ordinals.SupremaPreservation ua pt sr
open import Ordinals.Type
open import Ordinals.Underlying
open PropositionalTruncation pt
open suprema pt sr
\end{code}
We find it convenient to present Z ⨠sup (F ā L) via a single supremum.
\begin{code}
extended-sup : {I : š¤ Ģ } (L : I ā Ordinal š¤) (Z : Ordinal š¤) ā Ordinal š¤
extended-sup {š¤} {I} L Z = sup {I = š + I} (cases (Ī» (_ : š{š¤}) ā Z) L)
\end{code}
As shown below, Z and S determine F uniquely, because any F which
satisfies the above equations will be equal to the function G defined
by transfinite recursion as
G β := Z ⨠sup (Ī» (b : ⨠β ā©) ā S (G (β ā b))).
This map G is called canonical-spec-by-cases below.
\begin{code}
canonical-spec-by-cases : (S : Ordinal š¤ ā Ordinal š¤) (Z : Ordinal š¤)
ā Ordinal š¤ ā Ordinal š¤
canonical-spec-by-cases {š¤} S Z =
transfinite-recursion-on-OO (Ordinal š¤)
(Ī» β ih ā extended-sup (Ī» b ā S (ih b)) Z)
module operation-by-cases-framework
(F : Ordinal š¤ ā Ordinal š¤)
(S : Ordinal š¤ ā Ordinal š¤)
(Z : Ordinal š¤)
(F-succ : (β : Ordinal š¤) ā F (β +ā šā) ļ¼ S (F β))
(F-sup : preserves-suprema-up-to-join F Z)
where
recursive-equation : (β : Ordinal š¤)
ā F β ļ¼ extended-sup (Ī» (b : ⨠β ā©) ā S (F (β ā b))) Z
recursive-equation β = F β ļ¼āØ I ā©
F (sup Ī» b ā (β ā b) +ā šā) ļ¼āØ II ā©
extended-sup (F ā (Ī» b ā (β ā b) +ā šā)) Z ļ¼āØ III ā©
extended-sup (Ī» b ā S (F (β ā b))) Z ā
where
I = ap F (supremum-of-successors-of-initial-segments pt sr β)
II = F-sup {⨠β ā©} (Ī» b ā (β ā b) +ā šā)
III = ap (Ī» - ā extended-sup - Z) (dfunext fe' (Ī» b ā F-succ (β ā b)))
presentation-by-transfinite-recursion
: (β : Ordinal š¤) ā F β ļ¼ canonical-spec-by-cases S Z β
presentation-by-transfinite-recursion =
transfinite-induction-on-OO (Ī» β ā F β ļ¼ G β) I
where
G = canonical-spec-by-cases S Z
I : (β : Ordinal š¤) ā ((b : ⨠β ā©) ā F (β ā b) ļ¼ G (β ā b)) ā F β ļ¼ G β
I β ih = F β ļ¼āØ Iā ā©
extended-sup (Ī» (b : ⨠β ā©) ā S (F (β ā b))) Z ļ¼āØ Iā ā©
extended-sup (Ī» (b : ⨠β ā©) ā S (G (β ā b))) Z ļ¼āØ Iā ā©
G β ā
where
Iā = recursive-equation β
Iā = ap (Ī» - ā extended-sup - Z) (dfunext fe' (Ī» b ā ap S (ih b)))
Iā = (transfinite-recursion-on-OO-behaviour
(Ordinal š¤)
(Ī» β ih ā extended-sup (Ī» b ā S (ih b)) Z) β) ā»Ā¹
uniquely-specified
: (S : Ordinal š¤ ā Ordinal š¤) (Z : Ordinal š¤)
ā is-prop
(Ī£ G ź (Ordinal š¤ ā Ordinal š¤) , ((β : Ordinal š¤) ā G (β +ā šā) ļ¼ S (G β))
Ć preserves-suprema-up-to-join G Z)
uniquely-specified {š¤} S Z (F , F-succ , F-sup) (G , G-succ , G-sup) =
to-subtype-ļ¼
(Ī» H ā Ć-is-prop
(Ī -is-prop fe' (Ī» β ā the-type-of-ordinals-is-a-set (ua š¤) fe'))
(preserves-suprema-up-to-join-is-prop H Z))
(dfunext fe' I)
where
I : F ā¼ G
I β = F β ļ¼āØ Iā ā©
canonical-spec-by-cases S Z β ļ¼āØ Iā ā»Ā¹ ā©
G β ā
where
open operation-by-cases-framework
Iā = presentation-by-transfinite-recursion F S Z F-succ F-sup β
Iā = presentation-by-transfinite-recursion G S Z G-succ G-sup β
\end{code}
In case we have a continuous function, we need not consider binary joins with
some ordinal Z since we can take Z ļ¼ šā. The following code handles that
special case.
\begin{code}
module operation-by-cases-framework-continuous
(F : Ordinal š¤ ā Ordinal š¤)
(S : Ordinal š¤ ā Ordinal š¤)
(F-succ : (β : Ordinal š¤) ā F (β +ā šā) ļ¼ S (F β))
(F-cont : is-continuous F)
where
recursive-equation : (β : Ordinal š¤)
ā F β ļ¼ sup (Ī» (b : ⨠β ā©) ā S (F (β ā b)))
recursive-equation β = F β ļ¼āØ I ā©
F (sup Ī» b ā (β ā b) +ā šā) ļ¼āØ II ā©
sup (F ā (Ī» b ā (β ā b) +ā šā)) ļ¼āØ III ā©
sup (Ī» b ā S (F (β ā b))) ā
where
I = ap F (supremum-of-successors-of-initial-segments pt sr β)
II = F-cont {⨠β ā©} (Ī» b ā (β ā b) +ā šā)
III = ap sup (dfunext fe' (Ī» b ā F-succ (β ā b)))
uniquely-specified'
: (S : Ordinal š¤ ā Ordinal š¤)
ā is-prop
(Ī£ G ź (Ordinal š¤ ā Ordinal š¤) , ((β : Ordinal š¤) ā G (β +ā šā) ļ¼ S (G β))
Ć is-continuous G)
uniquely-specified' {š¤} S =
equiv-to-prop (Ī£-cong (Ī» G ā Ć-cong (ā-refl _) (I G))) (uniquely-specified S šā)
where
I : (G : Ordinal š¤ ā Ordinal š¤)
ā is-continuous G ā preserves-suprema-up-to-join G šā
I G = logically-equivalent-props-are-equivalent
(being-continuous-is-prop G)
(preserves-suprema-up-to-join-is-prop G šā)
(rl-implication (preservation-of-suprema-continuity-equivalence G))
(lr-implication (preservation-of-suprema-continuity-equivalence G))
\end{code}
We now instantiate the above with addition.
This used to be part of AdditionProperties (since 22 July 2025).
\begin{code}
module addition-by-fixed-ordinal
(α : Ordinal š¤)
where
succ-equation : (Ordinal š¤ ā Ordinal š¤) ā š¤ āŗ Ģ
succ-equation αā_ =
(β : Ordinal š¤) ā αā (β +ā šā) ļ¼ (αā β) +ā šā
+ā-preserves-suprema-up-to-join : preserves-suprema-up-to-join (α +ā_) α
+ā-preserves-suprema-up-to-join =
preserves-suprema-up-to-join-criterion (α +ā_) α
(+ā-preserves-inhabited-suprema pt sr α , šā-right-neutral α)
+ā-is-uniquely-specified'
: ā! αā_ ź (Ordinal š¤ ā Ordinal š¤) ,
(succ-equation αā_) Ć (preserves-suprema-up-to-join αā_ α)
+ā-is-uniquely-specified' =
pointed-props-are-singletons
(α +ā_ ,
+ā-commutes-with-successor α ,
(Ī» {I} ā +ā-preserves-suprema-up-to-join))
(uniquely-specified (_+ā šā) α)
module addition where
private
successor-equation : (Ordinal š¤ ā Ordinal š¤ ā Ordinal š¤) ā š¤ āŗ Ģ
successor-equation {š¤} _ā_ =
(α : Ordinal š¤) ā succ-equation α (α ā_)
where
open addition-by-fixed-ordinal
suprema-equation : (Ordinal š¤ ā Ordinal š¤ ā Ordinal š¤) ā š¤ āŗ Ģ
suprema-equation {š¤} _ā_ =
(α : Ordinal š¤) ā preserves-suprema-up-to-join (α ā_) α
+ā-is-uniquely-specified
: ā! _ā_ ź (Ordinal š¤ ā Ordinal š¤ ā Ordinal š¤) ,
(successor-equation _ā_) Ć (suprema-equation _ā_)
+ā-is-uniquely-specified {š¤} =
equiv-to-singleton e (Ī -is-singleton fe' +ā-is-uniquely-specified')
where
open addition-by-fixed-ordinal
bin-op = Ordinal š¤ ā Ordinal š¤ ā Ordinal š¤
un-op = Ordinal š¤ ā Ordinal š¤
e =
(Ī£ F ź bin-op , (successor-equation F) Ć (suprema-equation F)) ā⨠I ā©
(Ī£ F ź bin-op ,
((α : Ordinal š¤) ā succ-equation α (F α)
Ć preserves-suprema-up-to-join (F α) α)) ā⨠II ā©
(Πα ź Ordinal š¤ ,
Ī£ G ź un-op , succ-equation α G
Ć preserves-suprema-up-to-join G α) ā
where
I = Ī£-cong (Ī» F ā ā-sym Ī Ć-distr)
II = ā-sym ΠΣ-distr-ā
+ā-recursive-equation : (α β : Ordinal š¤)
ā α +ā β ļ¼ extended-sup (Ī» b ā α +ā (β ā b) +ā šā) α
+ā-recursive-equation α = recursive-equation
where
open addition-by-fixed-ordinal
open operation-by-cases-framework (α +ā_) (_+ā šā) α
(+ā-commutes-with-successor α)
(+ā-preserves-suprema-up-to-join α)
\end{code}
We now instantiate the above with multiplication.
This used to be part of MultiplicationProperties (since 11 September 2024,
following a question by Martin Escardo).
\begin{code}
open import Ordinals.MultiplicationProperties ua
module multiplication-by-fixed-ordinal
(α : Ordinal š¤)
where
succ-equation : (Ordinal š¤ ā Ordinal š¤) ā š¤ āŗ Ģ
succ-equation αā_ =
(β : Ordinal š¤) ā αā (β +ā šā) ļ¼ (αā β) +ā α
Ćā-is-uniquely-specified'
: ā! αā_ ź (Ordinal š¤ ā Ordinal š¤) , (succ-equation αā_) Ć (is-continuous αā_)
Ćā-is-uniquely-specified' =
pointed-props-are-singletons
(α Ćā_ , Ćā-successor α , (Ī» {I} ā Ćā-is-continuous pt sr α))
(uniquely-specified' (_+ā α))
module multiplication where
private
successor-equation : (Ordinal š¤ ā Ordinal š¤ ā Ordinal š¤) ā š¤ āŗ Ģ
successor-equation {š¤} _ā_ =
(α : Ordinal š¤) ā succ-equation α (α ā_)
where
open multiplication-by-fixed-ordinal
suprema-equation : (Ordinal š¤ ā Ordinal š¤ ā Ordinal š¤) ā š¤ āŗ Ģ
suprema-equation {š¤} _ā_ = (α : Ordinal š¤) ā is-continuous (α ā_)
Ćā-is-uniquely-specified
: ā! _ā_ ź (Ordinal š¤ ā Ordinal š¤ ā Ordinal š¤) ,
(successor-equation _ā_) Ć (suprema-equation _ā_)
Ćā-is-uniquely-specified {š¤} =
equiv-to-singleton e (Ī -is-singleton fe' Ćā-is-uniquely-specified')
where
open multiplication-by-fixed-ordinal
bin-op = Ordinal š¤ ā Ordinal š¤ ā Ordinal š¤
un-op = Ordinal š¤ ā Ordinal š¤
e =
(Ī£ F ź bin-op , successor-equation F Ć suprema-equation F) ā⨠I ā©
(Ī£ F ź bin-op ,
((α : Ordinal š¤) ā succ-equation α (F α) Ć is-continuous (F α))) ā⨠II ā©
(Πα ź Ordinal š¤ , Ī£ G ź un-op , succ-equation α G
Ć is-continuous G) ā
where
I = Ī£-cong Ī» F ā ā-sym Ī Ć-distr
II = ā-sym ΠΣ-distr-ā
Ćā-recursive-equation : (α β : Ordinal š¤)
ā α Ćā β ļ¼ sup (Ī» b ā α Ćā (β ā b) +ā α)
Ćā-recursive-equation α = recursive-equation
where
open operation-by-cases-framework-continuous (α Ćā_) (_+ā α)
(Ćā-successor α)
(Ćā-is-continuous pt sr α)
\end{code}
Finally, we apply the above to exponentiation by a fixed (positive) ordinal.
This replaces a previous development as part of the file
Exponentiation.Specification.
\begin{code}
open import Ordinals.Exponentiation.Specification ua pt sr
open import Ordinals.Exponentiation.Supremum ua pt sr
exponentiation-is-uniquely-specified
: (α : Ordinal š¤)
ā is-prop
(Ī£ exp ź (Ordinal š¤ ā Ordinal š¤) ,
(exp-specification-succ α exp)
à (exp-specification-zero-sup-combined α exp))
exponentiation-is-uniquely-specified α =
uniquely-specified (_Ćā α) šā
^ā-is-uniquely-specified
: (α : Ordinal š¤) ā šā ⓠα
ā ā! exp ź (Ordinal š¤ ā Ordinal š¤) ,
(exp-specification-succ α exp)
à (exp-specification-zero-sup-combined α exp)
^ā-is-uniquely-specified α α-nonzero =
pointed-props-are-singletons
(α ^ā_ ,
^ā-satisfies-succ-specification α α-nonzero ,
(Ī» {I} ā ^ā-satisfies-zero-sup-combined-specification α))
(exponentiation-is-uniquely-specified α)
\end{code}