We give a concrete construction of ordinal exponentiation using decreasing
lists.
\begin{code}
{-# OPTIONS --safe --without-K --exact-split #-}
open import UF.Univalence
module Ordinals.Exponentiation.DecreasingList
(ua : Univalence)
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.Plus-Properties
open import MLTT.Spartan
open import UF.Base
open import UF.Equiv
open import UF.Sets
open import UF.Subsingletons
open import Ordinals.Arithmetic fe
open import Ordinals.AdditionProperties ua
open import Ordinals.Equivalence
open import Ordinals.Maps
open import Ordinals.Notions
open import Ordinals.OrdinalOfOrdinals ua renaming (_≼_ to _≼OO_)
open import Ordinals.Propositions ua
open import Ordinals.Type
open import Ordinals.Underlying
open import Ordinals.Exponentiation.TrichotomousLeastElement ua
\end{code}
The lexicographic order on lists.
\begin{code}
data lex {X : 𝓤 ̇ } (R : X → X → 𝓥 ̇ ) : List X → List X → 𝓤 ⊔ 𝓥 ̇ where
[]-lex : {x : X} {l : List X} → lex R [] (x ∷ l)
head-lex : {x y : X} {l l' : List X} → R x y → lex R (x ∷ l) (y ∷ l')
tail-lex : {x y : X} {l l' : List X} → x = y → lex R l l' → lex R (x ∷ l) (y ∷ l')
lex-for-ordinal : (α : Ordinal 𝓤) → List ⟨ α ⟩ → List ⟨ α ⟩ → 𝓤 ̇
lex-for-ordinal α = lex (underlying-order α)
syntax lex-for-ordinal α l l' = l ≺⟨List α ⟩ l'
\end{code}
The lexicographic order preserves many properties of the order.
\begin{code}
module _ {X : 𝓤 ̇ } (R : X → X → 𝓥 ̇ ) where
lex-transitive : is-transitive R → is-transitive (lex R)
lex-transitive tr [] (y ∷ l₂) (z ∷ l₃) []-lex (head-lex q) = []-lex
lex-transitive tr [] (y ∷ l₂) (z ∷ l₃) []-lex (tail-lex r q) = []-lex
lex-transitive tr (x ∷ l₁) (y ∷ l₂) (z ∷ l₃) (head-lex p) (head-lex q) =
head-lex (tr x y z p q)
lex-transitive tr (x ∷ l₁) (y ∷ l₂) (.y ∷ l₃) (head-lex p) (tail-lex refl q) =
head-lex p
lex-transitive tr (x ∷ l₁) (.x ∷ l₂) (z ∷ l₃) (tail-lex refl p) (head-lex q) =
head-lex q
lex-transitive tr (x ∷ l₁) (x ∷ l₂) (x ∷ l₃) (tail-lex refl p) (tail-lex refl q)
= tail-lex refl (lex-transitive tr l₁ l₂ l₃ p q)
[]-lex-bot : is-bot (lex R) []
[]-lex-bot l ()
lex-irreflexive : is-irreflexive R → is-irreflexive (lex R)
lex-irreflexive ir (x ∷ l) (head-lex p) = ir x p
lex-irreflexive ir (x ∷ l) (tail-lex e q) = lex-irreflexive ir l q
lex-prop-valued : is-set X
→ is-prop-valued R
→ is-irreflexive R
→ is-prop-valued (lex R)
lex-prop-valued st pr irR l (y ∷ l') []-lex []-lex = refl
lex-prop-valued st pr irR (x ∷ l) (y ∷ l') (head-lex u) (head-lex v) =
ap head-lex (pr x y u v)
lex-prop-valued st pr irR (x ∷ l) (y ∷ l') (head-lex u) (tail-lex refl v) =
𝟘-elim (irR y u)
lex-prop-valued st pr irR (x ∷ l) (y ∷ l') (tail-lex refl u) (head-lex v) =
𝟘-elim (irR x v)
lex-prop-valued st pr irR (x ∷ l) (y ∷ l') (tail-lex refl u) (tail-lex e v) =
ap₂ tail-lex (st refl e) (lex-prop-valued st pr irR l l' u v)
\end{code}
We now consider the subtype of decreasing lists.
\begin{code}
data is-decreasing : List X → 𝓤 ⊔ 𝓥 ̇ where
[]-decr : is-decreasing []
sing-decr : {x : X} → is-decreasing [ x ]
many-decr : {x y : X} {l : List X}
→ R y x
→ is-decreasing (y ∷ l)
→ is-decreasing (x ∷ y ∷ l)
is-decreasing-is-prop : is-prop-valued R
→ (l : List X) → is-prop (is-decreasing l)
is-decreasing-is-prop pR [] []-decr []-decr = refl
is-decreasing-is-prop pR (x ∷ []) sing-decr sing-decr = refl
is-decreasing-is-prop pR (x ∷ y ∷ l) (many-decr p ps) (many-decr q qs) =
ap₂ many-decr (pR y x p q) (is-decreasing-is-prop pR (y ∷ l) ps qs)
tail-is-decreasing : {x : X} {l : List X}
→ is-decreasing (x ∷ l) → is-decreasing l
tail-is-decreasing sing-decr = []-decr
tail-is-decreasing (many-decr _ d) = d
heads-are-decreasing : {x y : X} {l : List X}
→ is-decreasing (x ∷ y ∷ l) → R y x
heads-are-decreasing (many-decr p _) = p
is-decreasing-swap-heads : is-transitive R
→ {y x : X} {l : List X}
→ R x y
→ is-decreasing (x ∷ l)
→ is-decreasing (y ∷ l)
is-decreasing-swap-heads τ {y} {x} {[]} r δ = sing-decr
is-decreasing-swap-heads τ {y} {x} {z ∷ l} r δ =
many-decr (τ z x y (heads-are-decreasing δ) r) (tail-is-decreasing δ)
is-decreasing-skip : is-transitive R
→ {x x' : X} {l : List X}
→ is-decreasing (x ∷ x' ∷ l)
→ is-decreasing (x ∷ l)
is-decreasing-skip τ δ =
is-decreasing-swap-heads τ (heads-are-decreasing δ) (tail-is-decreasing δ)
DecreasingList : 𝓤 ⊔ 𝓥 ̇
DecreasingList = Σ l ꞉ List X , is-decreasing l
\end{code}
Next we show that the lexicographic order on lists when restricted to
DecreasingList is wellfounded, provided the original order is.
\begin{code}
lex-decr : DecreasingList → DecreasingList → 𝓤 ⊔ 𝓥 ̇
lex-decr (l , _) (l' , _) = lex R l l'
[]-acc-decr : {p : is-decreasing []} → is-accessible lex-decr ([] , p)
[]-acc-decr {[]-decr} = acc (λ xs q → 𝟘-elim ([]-lex-bot _ q))
lex-decr-acc : is-transitive R
→ (x : X) → is-accessible R x
→ (l : List X) (δ : is-decreasing l)
→ is-accessible lex-decr (l , δ)
→ (ε : is-decreasing (x ∷ l))
→ is-accessible lex-decr ((x ∷ l) , ε)
lex-decr-acc tr =
transfinite-induction' R P ϕ
where
Q : X → DecreasingList → 𝓤 ⊔ 𝓥 ̇
Q x (l , _) = (ε' : is-decreasing (x ∷ l))
→ is-accessible lex-decr ((x ∷ l) , ε')
P : X → 𝓤 ⊔ 𝓥 ̇
P x = (l : List X) (δ : is-decreasing l)
→ is-accessible lex-decr (l , δ)
→ Q x (l , δ)
ϕ : (x : X) → ((y : X) → R y x → P y) → P x
ϕ x IH l δ β =
transfinite-induction' lex-decr (Q x) (λ (l , ε) → ϕ' l ε) (l , δ) β
where
ϕ' : (l : List X) (ε : is-decreasing l)
→ ((l' : DecreasingList) → lex-decr l' (l , ε) → Q x l')
→ Q x (l , ε)
ϕ' l _ IH₂ ε' = acc (λ (l' , ε) → g l' ε)
where
g : (l' : List X) → (ε : is-decreasing l')
→ lex-decr (l' , ε) ((x ∷ l) , ε')
→ is-accessible lex-decr (l' , ε)
g [] ε u = []-acc-decr
g (y ∷ []) ε (head-lex u) = IH y u [] []-decr []-acc-decr ε
g (y ∷ []) ε (tail-lex refl u) = IH₂ ([] , []-decr) u ε
g (y ∷ z ∷ l') ε (head-lex u) =
IH y u (z ∷ l') (tail-is-decreasing ε)
(g (z ∷ l')
(tail-is-decreasing ε)
(head-lex (tr z y x (heads-are-decreasing ε) u)))
ε
g (y ∷ z ∷ l') ε (tail-lex refl u) =
IH₂ ((z ∷ l') , tail-is-decreasing ε) u ε
lex-wellfounded : is-transitive R
→ is-well-founded R
→ is-well-founded lex-decr
lex-wellfounded tr wf (l , δ) = lex-wellfounded' wf l δ
where
lex-wellfounded' : is-well-founded R
→ (xs : List X) (δ : is-decreasing xs)
→ is-accessible lex-decr (xs , δ)
lex-wellfounded' wf [] δ = []-acc-decr
lex-wellfounded' wf (x ∷ l) δ =
lex-decr-acc tr x (wf x) l
(tail-is-decreasing δ)
(lex-wellfounded' wf l (tail-is-decreasing δ))
δ
\end{code}
We construct an ordinal, which we denote by DecrList₂ α β, that implements
exponentiation of (𝟙ₒ +ₒ α) by β.
The reason that it implements exponentiation with base (𝟙ₒ +ₒ α) rather than α,
is because our construction needs a trichotomous least element (see
Ordinals.Exponentiation.TrichotomousLeastElement). Since we then restrict to the
positive elements of the base ordinal, it is convenient to only consider α
(rather than 𝟙ₒ +ₒ α).
\begin{code}
module _ (α : Ordinal 𝓤) (β : Ordinal 𝓥) where
is-decreasing-pr₂ : List ⟨ α ×ₒ β ⟩ → 𝓥 ̇
is-decreasing-pr₂ xs = is-decreasing (underlying-order β) (map pr₂ xs)
heads-are-decreasing-pr₂ : (a a' : ⟨ α ⟩) {b b' : ⟨ β ⟩} {l : List ⟨ α ×ₒ β ⟩}
→ is-decreasing-pr₂ ((a , b) ∷ (a' , b') ∷ l)
→ b' ≺⟨ β ⟩ b
heads-are-decreasing-pr₂ a a' = heads-are-decreasing (underlying-order β)
tail-is-decreasing-pr₂ : (x : ⟨ α ×ₒ β ⟩) {l : List ⟨ α ×ₒ β ⟩}
→ is-decreasing-pr₂ (x ∷ l)
→ is-decreasing-pr₂ l
tail-is-decreasing-pr₂ x = tail-is-decreasing (underlying-order β)
is-decreasing-pr₂-skip : (x y : ⟨ α ×ₒ β ⟩) {l : List ⟨ α ×ₒ β ⟩}
→ is-decreasing-pr₂ (x ∷ y ∷ l)
→ is-decreasing-pr₂ (x ∷ l)
is-decreasing-pr₂-skip x y = is-decreasing-skip (underlying-order β)
(Transitivity β)
DecrList₂ : 𝓤 ⊔ 𝓥 ̇
DecrList₂ = Σ l ꞉ List ⟨ α ×ₒ β ⟩ , is-decreasing-pr₂ l
DecrList₂-list : DecrList₂ → List ⟨ α ×ₒ β ⟩
DecrList₂-list = pr₁
to-DecrList₂-= : {l l' : DecrList₂}
→ DecrList₂-list l = DecrList₂-list l' → l = l'
to-DecrList₂-= = to-subtype-= (λ l → is-decreasing-is-prop
(underlying-order β)
(Prop-valuedness β)
(map pr₂ l))
DecrList₂-list-is-decreasing-pr₂ : (l : DecrList₂)
→ is-decreasing-pr₂ (DecrList₂-list l)
DecrList₂-list-is-decreasing-pr₂ = pr₂
is-decreasing-if-decreasing-pr₂ : (l : List ⟨ α ×ₒ β ⟩)
→ is-decreasing-pr₂ l
→ is-decreasing (underlying-order (α ×ₒ β)) l
is-decreasing-if-decreasing-pr₂ [] _ = []-decr
is-decreasing-if-decreasing-pr₂ (x ∷ []) _ = sing-decr
is-decreasing-if-decreasing-pr₂ (x ∷ x' ∷ l) (many-decr p δ)
= many-decr (inl p) (is-decreasing-if-decreasing-pr₂ (x' ∷ l) δ)
DecrList₂-list-is-decreasing
: (l : DecrList₂)
→ is-decreasing (underlying-order (α ×ₒ β)) (DecrList₂-list l)
DecrList₂-list-is-decreasing (l , δ) = is-decreasing-if-decreasing-pr₂ l δ
DecrList₂-order : DecrList₂ → DecrList₂ → 𝓤 ⊔ 𝓥 ̇
DecrList₂-order (l , _) (l' , _) = l ≺⟨List (α ×ₒ β) ⟩ l'
DecrList₂-order-is-prop-valued : is-prop-valued DecrList₂-order
DecrList₂-order-is-prop-valued (l , _) (l' , _) =
lex-prop-valued
(underlying-order (α ×ₒ β))
(underlying-type-is-set fe (α ×ₒ β))
(Prop-valuedness (α ×ₒ β))
(irrefl (α ×ₒ β))
l
l'
\end{code}
The order on DecrList₂ α β is transitive and wellfounded.
\begin{code}
DecrList₂-order-is-transitive : is-transitive DecrList₂-order
DecrList₂-order-is-transitive (l , _) (l' , _) (l'' , _) p q =
lex-transitive (underlying-order (α ×ₒ β)) (Transitivity (α ×ₒ β)) l l' l'' p q
DecrList₂-order-is-wellfounded : is-well-founded DecrList₂-order
DecrList₂-order-is-wellfounded (l , δ) =
acc-lex-decr-to-acc-exponential l δ
(lex-wellfounded (underlying-order (α ×ₒ β))
(Transitivity (α ×ₒ β))
(Well-foundedness (α ×ₒ β))
(DecrList₂-list (l , δ) ,
DecrList₂-list-is-decreasing (l , δ)))
where
acc-lex-decr-to-acc-exponential
: (l : List ⟨ α ×ₒ β ⟩)
→ (δ : is-decreasing-pr₂ l)
→ is-accessible (lex-decr (underlying-order (α ×ₒ β)))
((l , DecrList₂-list-is-decreasing (l , δ)))
→ is-accessible DecrList₂-order (l , δ)
acc-lex-decr-to-acc-exponential l δ (acc h) =
acc (λ (l' , ε) u → acc-lex-decr-to-acc-exponential l' ε
(h (l' , DecrList₂-list-is-decreasing (l' , ε)) u))
\end{code}
The order on DecrList₂ α β is extensional.
\begin{code}
private
R = underlying-order (α ×ₒ β)
_≼_ = extensional-po DecrList₂-order
is-decreasing-pr₂-swap-tails
: (l l' : List ⟨ α ×ₒ β ⟩) (x : ⟨ α ×ₒ β ⟩)
→ is-decreasing-pr₂ (x ∷ l)
→ is-decreasing-pr₂ l'
→ lex R l' l
→ is-decreasing-pr₂ (x ∷ l')
is-decreasing-pr₂-swap-tails l l' x δ ε []-lex = sing-decr
is-decreasing-pr₂-swap-tails ((a , b) ∷ l) ((a' , b') ∷ l') (a₀ , b₀) δ ε
(head-lex (inl u)) = many-decr (Transitivity β b' b b₀ u
(heads-are-decreasing-pr₂ a₀ a δ))
ε
is-decreasing-pr₂-swap-tails ((a , b) ∷ l) ((a' , b') ∷ l') (a₀ , b₀) δ ε
(head-lex (inr (refl , u))) = many-decr (heads-are-decreasing-pr₂ a₀ a δ) ε
is-decreasing-pr₂-swap-tails ((a , b) ∷ l) ((a' , b') ∷ l') (a₀ , b₀) δ ε
(tail-lex refl u) = many-decr (heads-are-decreasing-pr₂ a₀ a δ) ε
private
no-≼-[] : (x : ⟨ α ×ₒ β ⟩) (l : List ⟨ α ×ₒ β ⟩)
(δ : is-decreasing-pr₂ (x ∷ l))
→ ¬ (((x ∷ l) , δ) ≼ ([] , []-decr))
no-≼-[] x l δ h =
𝟘-elim
(lex-irreflexive R (Irreflexivity (α ×ₒ β)) [] (h ([] , []-decr) []-lex))
tails-≼
: (l l' : List ⟨ α ×ₒ β ⟩) (x : ⟨ α ×ₒ β ⟩)
(δ : is-decreasing-pr₂ (x ∷ l))
(ε : is-decreasing-pr₂ (x ∷ l'))
→ ((x ∷ l) , δ) ≼ ((x ∷ l') , ε)
→ (l , tail-is-decreasing-pr₂ x δ) ≼ (l' , tail-is-decreasing-pr₂ x ε)
tails-≼ l l' x δ ε h (l₀ , δ₀) u = g hₓ
where
hₓ : lex R (x ∷ l₀) (x ∷ l')
hₓ = h ((x ∷ l₀) , is-decreasing-pr₂-swap-tails l l₀ x δ δ₀ u)
(tail-lex refl u)
g : lex R (x ∷ l₀) (x ∷ l') → lex R l₀ l'
g (head-lex r) = 𝟘-elim (Irreflexivity (α ×ₒ β) x r)
g (tail-lex _ k) = k
DecrList₂-order-is-extensional' : (l₁ l₂ : List ⟨ α ×ₒ β ⟩)
(δ₁ : is-decreasing-pr₂ l₁)
(δ₂ : is-decreasing-pr₂ l₂)
→ (l₁ , δ₁) ≼ (l₂ , δ₂)
→ (l₂ , δ₂) ≼ (l₁ , δ₁)
→ l₁ = l₂
DecrList₂-order-is-extensional' [] [] δ₁ δ₂ u v = refl
DecrList₂-order-is-extensional' [] (y ∷ l₂) δ₁ δ₂ u h₂ =
𝟘-elim (no-≼-[] y l₂ δ₂ h₂)
DecrList₂-order-is-extensional' (x ∷ l₁) [] δ₁ δ₂ h₁ h₂ =
𝟘-elim (no-≼-[] x l₁ δ₁ h₁)
DecrList₂-order-is-extensional' (x ∷ []) (y ∷ []) δ₁ δ₂ h₁ h₂ =
ap [_] (Extensionality (α ×ₒ β) x y I₁ I₂)
where
I₁ : x ≼⟨ α ×ₒ β ⟩ y
I₁ z u = κ c
where
c : [ z ] ≺⟨List (α ×ₒ β) ⟩ [ y ]
c = h₁ ([ z ] , sing-decr) (head-lex u)
κ : [ z ] ≺⟨List (α ×ₒ β) ⟩ [ y ] → z ≺⟨ α ×ₒ β ⟩ y
κ (head-lex v) = v
I₂ : y ≼⟨ α ×ₒ β ⟩ x
I₂ z u = κ c
where
c : [ z ] ≺⟨List (α ×ₒ β) ⟩ [ x ]
c = h₂ ([ z ] , sing-decr) (head-lex u)
κ : [ z ] ≺⟨List (α ×ₒ β) ⟩ [ x ] → z ≺⟨ α ×ₒ β ⟩ x
κ (head-lex v) = v
DecrList₂-order-is-extensional' (x ∷ []) (y ∷ y' ∷ l₂) δ₁ δ₂ h₁ h₂ =
𝟘-elim (lex-irreflexive R (Irreflexivity (α ×ₒ β)) (y ∷ y' ∷ l₂) III)
where
I : y ≺⟨ α ×ₒ β ⟩ x
I = κ (h₂ ([ y ] , sing-decr) (tail-lex refl []-lex))
where
κ : [ y ] ≺⟨List (α ×ₒ β) ⟩ [ x ] → y ≺⟨ α ×ₒ β ⟩ x
κ (head-lex u) = u
II : (y ∷ y' ∷ l₂) ≺⟨List (α ×ₒ β) ⟩ [ x ]
II = head-lex I
III : (y ∷ y' ∷ l₂) ≺⟨List (α ×ₒ β) ⟩ (y ∷ y' ∷ l₂)
III = h₁ ((y ∷ y' ∷ l₂) , δ₂) II
DecrList₂-order-is-extensional' (x ∷ x' ∷ l₁) (y ∷ []) δ₁ δ₂ h₁ h₂ =
𝟘-elim (lex-irreflexive R (Irreflexivity (α ×ₒ β)) (x ∷ x' ∷ l₁) III)
where
I : x ≺⟨ α ×ₒ β ⟩ y
I = κ (h₁ ([ x ] , sing-decr) (tail-lex refl []-lex))
where
κ : [ x ] ≺⟨List (α ×ₒ β) ⟩ [ y ] → x ≺⟨ α ×ₒ β ⟩ y
κ (head-lex u) = u
II : (x ∷ x' ∷ l₁) ≺⟨List (α ×ₒ β) ⟩ [ y ]
II = head-lex I
III : (x ∷ x' ∷ l₁) ≺⟨List (α ×ₒ β) ⟩ (x ∷ x' ∷ l₁)
III = h₂ ((x ∷ x' ∷ l₁) , δ₁) II
DecrList₂-order-is-extensional' (x ∷ x' ∷ l₁) (y ∷ y' ∷ l₂) δ₁ δ₂ h₁ h₂ =
ap₂ _∷_ I
(DecrList₂-order-is-extensional'
(x' ∷ l₁) (y' ∷ l₂)
(tail-is-decreasing-pr₂ x {x' ∷ l₁} δ₁)
(tail-is-decreasing-pr₂ y {y' ∷ l₂} δ₂)
(k₁ I)
(k₂ I))
where
I : x = y
I = κ (h₁ ([ x ] , sing-decr) (tail-lex refl []-lex))
(h₂ ([ y ] , sing-decr) (tail-lex refl []-lex))
where
κ : [ x ] ≺⟨List (α ×ₒ β) ⟩ (y ∷ y' ∷ l₂)
→ [ y ] ≺⟨List (α ×ₒ β) ⟩ (x ∷ x' ∷ l₁)
→ x = y
κ (head-lex u) (head-lex v) =
𝟘-elim (Irreflexivity (α ×ₒ β) x (Transitivity (α ×ₒ β) x y x u v))
κ (head-lex u) (tail-lex refl v) = refl
κ (tail-lex refl u) (head-lex v) = refl
κ (tail-lex refl u) (tail-lex e v) = refl
k₁ : x = y
→ ((x' ∷ l₁) , tail-is-decreasing-pr₂ x {x' ∷ l₁} δ₁)
≼ ((y' ∷ l₂) , tail-is-decreasing-pr₂ y {y' ∷ l₂} δ₂)
k₁ refl = tails-≼ (x' ∷ l₁) (y' ∷ l₂) x δ₁ δ₂ h₁
k₂ : x = y
→ ((y' ∷ l₂) , tail-is-decreasing-pr₂ y {y' ∷ l₂} δ₂)
≼ ((x' ∷ l₁) , tail-is-decreasing-pr₂ x {x' ∷ l₁} δ₁)
k₂ refl = tails-≼ (y' ∷ l₂) (x' ∷ l₁) x δ₂ δ₁ h₂
DecrList₂-order-is-extensional : is-extensional DecrList₂-order
DecrList₂-order-is-extensional (l₁ , δ₁) (l₂ , δ₂) u v =
to-DecrList₂-= (DecrList₂-order-is-extensional' l₁ l₂ δ₁ δ₂ u v)
\end{code}
Therefore, DecrList₂ α β is an ordinal. As shown, via different techniques, in
Ordinals.Exponentiation.DecreasingListProperties-Concrete and
Ordinals.Exponentiation.PropertiesViaTransport, this ordinal implements the
exponentiation of 𝟙 + α to β.
\begin{code}
expᴸ[𝟙+_] : Ordinal 𝓤 → Ordinal 𝓥 → Ordinal (𝓤 ⊔ 𝓥)
expᴸ[𝟙+_] α β = DecrList₂ α β
, DecrList₂-order α β
, DecrList₂-order-is-prop-valued α β
, DecrList₂-order-is-wellfounded α β
, DecrList₂-order-is-extensional α β
, DecrList₂-order-is-transitive α β
exponentiationᴸ : (α : Ordinal 𝓤)
→ has-trichotomous-least-element α
→ Ordinal 𝓥
→ Ordinal (𝓤 ⊔ 𝓥)
exponentiationᴸ α h = expᴸ[𝟙+ α ⁺[ h ] ]
\end{code}
Some properties of the empty list as an element of expᴸ[𝟙+ α ] β.
\begin{code}
module _
(α : Ordinal 𝓤)
(β : Ordinal 𝓥)
where
expᴸ-⊥ : ⟨ expᴸ[𝟙+ α ] β ⟩
expᴸ-⊥ = [] , []-decr
expᴸ-↓-⊥ : expᴸ[𝟙+ α ] β ↓ expᴸ-⊥ = 𝟘ₒ
expᴸ-↓-⊥ = ⊲-is-extensional (expᴸ[𝟙+ α ] β ↓ expᴸ-⊥) 𝟘ₒ I II
where
I : (expᴸ[𝟙+ α ] β ↓ expᴸ-⊥) ≼OO 𝟘ₒ
I = to-≼ {_} {expᴸ[𝟙+ α ] β ↓ expᴸ-⊥} {𝟘ₒ} h
where
h : (l : ⟨ expᴸ[𝟙+ α ] β ↓ expᴸ-⊥ ⟩)
→ ((expᴸ[𝟙+ α ] β ↓ expᴸ-⊥) ↓ l) ⊲ 𝟘ₒ
h ()
II : 𝟘ₒ ≼OO (expᴸ[𝟙+ α ] β ↓ expᴸ-⊥)
II = 𝟘ₒ-least (expᴸ[𝟙+ α ] β ↓ expᴸ-⊥)
expᴸ-↓-⊥' : {δ : is-decreasing-pr₂ α β []}
→ expᴸ[𝟙+ α ] β ↓ ([] , δ) = 𝟘ₒ
expᴸ-↓-⊥' {δ} =
expᴸ[𝟙+ α ] β ↓ ([] , δ) =⟨ ap (expᴸ[𝟙+ α ] β ↓_) (to-DecrList₂-= α β refl) ⟩
expᴸ[𝟙+ α ] β ↓ expᴸ-⊥ =⟨ expᴸ-↓-⊥ ⟩
𝟘ₒ ∎
expᴸ-is-positive : 𝟘ₒ ⊲ expᴸ[𝟙+ α ] β
expᴸ-is-positive = expᴸ-⊥ , (expᴸ-↓-⊥ ⁻¹)
expᴸ-has-least : 𝟙ₒ ⊴ expᴸ[𝟙+ α ] β
expᴸ-has-least =
to-⊴ 𝟙ₒ (expᴸ[𝟙+ α ] β)
(λ ⋆ → transport⁻¹ (_⊲ expᴸ[𝟙+ α ] β) 𝟙ₒ-↓ expᴸ-is-positive)
\end{code}
The empty list is the trichotomous least element of expᴸ[𝟙+ α ] β.
\begin{code}
expᴸ-is-trichotomous-least : is-trichotomous-least (expᴸ[𝟙+ α ] β) expᴸ-⊥
expᴸ-is-trichotomous-least ([] , []-decr) = inl refl
expᴸ-is-trichotomous-least ((x ∷ l) , δ) = inr []-lex
expᴸ-has-trichotomous-least-element
: has-trichotomous-least-element (expᴸ[𝟙+ α ] β)
expᴸ-has-trichotomous-least-element = expᴸ-⊥ , expᴸ-is-trichotomous-least
exponentiationᴸ-has-trichotomous-least-element
: (α : Ordinal 𝓤) (h : has-trichotomous-least-element α) (β : Ordinal 𝓥)
→ has-trichotomous-least-element (exponentiationᴸ α h β)
exponentiationᴸ-has-trichotomous-least-element α h β =
expᴸ-has-trichotomous-least-element (α ⁺[ h ]) β
\end{code}
An order preserving map f : β → γ induces a map expᴸ[𝟙+ α ] β → expᴸ[𝟙+ α ] γ by
applying f on the second components.
Moreover, the induced map is order reflecting if f is order reflecting and
left-cancellable.
\begin{code}
module _
(α : Ordinal 𝓤)
(β : Ordinal 𝓥)
(γ : Ordinal 𝓦)
(f : ⟨ β ⟩ → ⟨ γ ⟩)
(f-is-order-preserving : is-order-preserving β γ f)
where
expᴸ-map-on-lists : List ⟨ α ×ₒ β ⟩ → List ⟨ α ×ₒ γ ⟩
expᴸ-map-on-lists = map (λ (a , b) → (a , f b))
expᴸ-map-on-lists-preserves-decreasing-pr₂
: (l : List ⟨ α ×ₒ β ⟩)
→ is-decreasing-pr₂ α β l
→ is-decreasing-pr₂ α γ (expᴸ-map-on-lists l)
expᴸ-map-on-lists-preserves-decreasing-pr₂ [] δ = []-decr
expᴸ-map-on-lists-preserves-decreasing-pr₂ ((a , b) ∷ []) δ = sing-decr
expᴸ-map-on-lists-preserves-decreasing-pr₂ ((a , b) ∷ (a' , b') ∷ l)
(many-decr p δ) = many-decr (f-is-order-preserving b' b p)
(expᴸ-map-on-lists-preserves-decreasing-pr₂
((a' , b') ∷ l)
δ)
expᴸ-map : ⟨ expᴸ[𝟙+ α ] β ⟩ → ⟨ expᴸ[𝟙+ α ] γ ⟩
expᴸ-map (l , δ) = expᴸ-map-on-lists l ,
expᴸ-map-on-lists-preserves-decreasing-pr₂ l δ
expᴸ-map-is-order-preserving
: is-order-preserving (expᴸ[𝟙+ α ] β) (expᴸ[𝟙+ α ] γ) expᴸ-map
expᴸ-map-is-order-preserving ([] , δ) (l' , δ') []-lex = []-lex
expᴸ-map-is-order-preserving (((a , b) ∷ l), δ) (((a' , b') ∷ l') , δ')
(head-lex (inl u)) = head-lex (inl (f-is-order-preserving b b' u))
expᴸ-map-is-order-preserving (((a , b) ∷ l), δ) (((a' , b') ∷ l') , δ')
(head-lex (inr (refl , u))) = head-lex (inr (refl , u))
expᴸ-map-is-order-preserving (((a , b) ∷ l), δ) (((a' , b') ∷ l') , δ')
(tail-lex refl u) =
tail-lex refl
(expᴸ-map-is-order-preserving
(l , tail-is-decreasing-pr₂ α β (a , b) δ)
(l' , tail-is-decreasing-pr₂ α β (a' , b') δ')
u)
expᴸ-map-is-order-reflecting
: is-order-reflecting β γ f
→ left-cancellable f
→ is-order-reflecting (expᴸ[𝟙+ α ] β) (expᴸ[𝟙+ α ] γ) expᴸ-map
expᴸ-map-is-order-reflecting ρ κ ([] , δ) ((_ ∷ l') , δ') u = []-lex
expᴸ-map-is-order-reflecting ρ κ (((a , b) ∷ l) , δ) (((a' , b') ∷ l') , δ')
(head-lex (inl v)) = head-lex (inl (ρ b b' v))
expᴸ-map-is-order-reflecting ρ κ (((a , b) ∷ l) , δ) (((a' , b') ∷ l') , δ')
(head-lex (inr (e , v))) = head-lex (inr (κ e , v))
expᴸ-map-is-order-reflecting ρ κ (((a , b) ∷ l) , δ) (((a' , b') ∷ l') , δ')
(tail-lex e v) =
tail-lex
(to-×-= (pr₁ (from-×-=' e)) (κ (pr₂ (from-×-=' e))))
(expᴸ-map-is-order-reflecting ρ κ
(l , tail-is-decreasing-pr₂ α β (a , b) δ)
(l' , tail-is-decreasing-pr₂ α β (a' , b') δ')
v)
expᴸ-map-is-decreasing-pr₂-lc
: is-order-reflecting β γ f
→ (l : List (⟨ α ×ₒ β ⟩))
→ is-decreasing-pr₂ α γ (expᴸ-map-on-lists l)
→ is-decreasing-pr₂ α β l
expᴸ-map-is-decreasing-pr₂-lc ρ [] δ = []-decr
expᴸ-map-is-decreasing-pr₂-lc ρ ((a , b) ∷ []) δ = sing-decr
expᴸ-map-is-decreasing-pr₂-lc ρ ((a , b) ∷ (a' , b') ∷ l) (many-decr u δ) =
many-decr (ρ b' b u) (expᴸ-map-is-decreasing-pr₂-lc ρ ((a' , b') ∷ l) δ)
\end{code}
The following technical lemma is used to show that if f is simulation, then so
is the induced map on expᴸ.
\begin{code}
expᴸ-map-is-partially-surjective
: is-order-reflecting β γ f
→ ((b : ⟨ β ⟩) (c : ⟨ γ ⟩) → c ≺⟨ γ ⟩ f b → Σ b' ꞉ ⟨ β ⟩ , f b' = c)
→ (l₁ : List ⟨ α ×ₒ β ⟩) (l : List ⟨ α ×ₒ γ ⟩)
(δ₁ : is-decreasing-pr₂ α β l₁) (δ : is-decreasing-pr₂ α γ l)
→ (l , δ) ≺⟨ expᴸ[𝟙+ α ] γ ⟩ expᴸ-map (l₁ , δ₁)
→ Σ l₂ ꞉ ⟨ expᴸ[𝟙+ α ] β ⟩ , expᴸ-map l₂ = (l , δ)
expᴸ-map-is-partially-surjective ρ h ((a₁ , b) ∷ l₁) [] δ₁ []-decr v =
([] , []-decr) , refl
expᴸ-map-is-partially-surjective ρ h ((a₁ , b) ∷ l₁) ((a , c) ∷ []) δ₁ δ
(head-lex (inl v)) = (((a , b') ∷ []) , sing-decr) ,
to-DecrList₂-= α γ (ap (λ - → (a , -) ∷ []) e)
where
b' = pr₁ (h b c v)
e = pr₂ (h b c v)
expᴸ-map-is-partially-surjective ρ h ((a₁ , b) ∷ l₁) ((a , c) ∷ []) δ₁ δ
(head-lex (inr (refl , v))) = ((a , b ∷ []) , sing-decr) ,
to-DecrList₂-= α γ refl
expᴸ-map-is-partially-surjective ρ h ((a₁ , b) ∷ l₁) ((a , c) ∷ []) δ₁ δ
(tail-lex refl v) = ((a , b ∷ []) , sing-decr) , (to-DecrList₂-= α γ refl)
expᴸ-map-is-partially-surjective ρ h ((a₁ , b₁) ∷ l₁) ((a , c) ∷ (a' , c') ∷ l)
δ₁ (many-decr u δ) (head-lex (inl v)) =
(((a , b') ∷ l₂) , ε) , to-DecrList₂-= α γ e₃
where
IH : Σ l₂ ꞉ ⟨ expᴸ[𝟙+ α ] β ⟩ , expᴸ-map l₂ = ((a' , c' ∷ l) , δ)
IH = expᴸ-map-is-partially-surjective ρ h
((a₁ , b₁) ∷ l₁)
((a' , c') ∷ l)
δ₁
δ
(head-lex (inl (Transitivity γ c' c (f b₁) u v)))
l₂ = pr₁ (pr₁ IH)
δ₂ = pr₂ (pr₁ IH)
e₂ = pr₂ IH
b' = pr₁ (h b₁ c v)
e₁ = pr₂ (h b₁ c v)
ε : is-decreasing-pr₂ α β (a , b' ∷ l₂)
ε = expᴸ-map-is-decreasing-pr₂-lc ρ ((a , b') ∷ l₂)
(transport₂
(λ -₁ -₂ → is-decreasing-pr₂ α γ (a , -₁ ∷ -₂))
(e₁ ⁻¹)
((ap (DecrList₂-list α γ) e₂) ⁻¹)
(many-decr u δ))
e₃ : (a , f b' ∷ expᴸ-map-on-lists l₂) = (a , c ∷ a' , c' ∷ l)
e₃ = ap₂ (λ x y → a , x ∷ y) e₁ (ap (DecrList₂-list α γ) e₂)
expᴸ-map-is-partially-surjective ρ h ((a₁ , b₁) ∷ l₁) ((a , c) ∷ (a' , c') ∷ l)
δ₁ (many-decr u δ) (head-lex (inr (refl , v))) =
(((a , b₁) ∷ l₂) , ε) , (to-DecrList₂-= α γ e₃)
where
IH : Σ l₂ ꞉ ⟨ expᴸ[𝟙+ α ] β ⟩ , expᴸ-map l₂ = ((a' , c' ∷ l) , δ)
IH = expᴸ-map-is-partially-surjective ρ h
((a₁ , b₁) ∷ l₁)
((a' , c') ∷ l)
δ₁
δ
(head-lex (inl u))
l₂ = pr₁ (pr₁ IH)
δ₂ = pr₂ (pr₁ IH)
e₂ = pr₂ IH
ε : is-decreasing-pr₂ α β (a , b₁ ∷ l₂)
ε = expᴸ-map-is-decreasing-pr₂-lc ρ ((a , b₁) ∷ l₂)
(transport⁻¹
(λ - → is-decreasing-pr₂ α γ (a , f b₁ ∷ -))
(ap (DecrList₂-list α γ) e₂)
(many-decr u δ))
e₃ : ((a , f b₁) ∷ expᴸ-map-on-lists l₂) = ((a , f b₁) ∷ (a' , c') ∷ l)
e₃ = ap ((a , f b₁) ∷_) (ap (DecrList₂-list α γ) e₂)
expᴸ-map-is-partially-surjective ρ h ((a₁ , b₁) ∷ l₁) ((a , c) ∷ (a' , c') ∷ l)
δ₁ 𝕕@(many-decr u δ) (tail-lex refl v) =
(((a₁ , b₁) ∷ l₂) , ε) ,
to-DecrList₂-= α γ (ap (a₁ , f b₁ ∷_) (ap (DecrList₂-list α γ) e₂))
where
IH : Σ l₂ ꞉ ⟨ expᴸ[𝟙+ α ] β ⟩ , expᴸ-map l₂ = ((a' , c' ∷ l) , δ)
IH = expᴸ-map-is-partially-surjective ρ h l₁ ((a' , c') ∷ l)
(tail-is-decreasing-pr₂ α β (a₁ , b₁) δ₁)
δ
v
l₂ = pr₁ (pr₁ IH)
δ₂ = pr₂ (pr₁ IH)
e₂ = pr₂ IH
ε : is-decreasing-pr₂ α β (a₁ , b₁ ∷ l₂)
ε = expᴸ-map-is-decreasing-pr₂-lc ρ (a₁ , b₁ ∷ l₂)
(transport⁻¹
(λ - → is-decreasing-pr₂ α γ ((a₁ , f b₁) ∷ -))
(ap (DecrList₂-list α γ) e₂)
𝕕)
expᴸ-map-is-simulation : is-initial-segment β γ f
→ is-simulation (expᴸ[𝟙+ α ] β) (expᴸ[𝟙+ α ] γ) expᴸ-map
expᴸ-map-is-simulation f-init-seg =
order-preserving-and-reflecting-partial-surjections-are-simulations
(expᴸ[𝟙+ α ] β) (expᴸ[𝟙+ α ] γ) expᴸ-map
expᴸ-map-is-order-preserving
(expᴸ-map-is-order-reflecting
(simulations-are-order-reflecting β γ f f-sim)
(simulations-are-lc β γ f f-sim))
(λ (l₁ , δ₁) (l , δ) →
expᴸ-map-is-partially-surjective
(simulations-are-order-reflecting β γ f f-sim)
(λ b c v → (pr₁ (f-init-seg b c v)) , pr₂ (pr₂ (f-init-seg b c v)))
l₁ l δ₁ δ)
where
f-sim : is-simulation β γ f
f-sim = (f-init-seg , f-is-order-preserving)
\end{code}
The above can be restated as: the operation expᴸ[𝟙+ α] is monotone.
\begin{code}
expᴸ-is-monotone-in-exponent : (α : Ordinal 𝓤) (β : Ordinal 𝓥) (γ : Ordinal 𝓦)
→ β ⊴ γ
→ expᴸ[𝟙+ α ] β ⊴ expᴸ[𝟙+ α ] γ
expᴸ-is-monotone-in-exponent α β γ (f , f-sim) =
expᴸ-map α β γ f (simulations-are-order-preserving β γ f f-sim) ,
expᴸ-map-is-simulation α β γ f
(simulations-are-order-preserving β γ f f-sim)
(simulations-are-initial-segments β γ f f-sim)
\end{code}
We work towards characterizing initial segments of expᴸ α β.
A first basic but fundamental ingredient is the following map:
Given an element l : expᴸ[𝟙+ α ] (β ↓ b₀), we can forget all the inequality
proofs in the second components to obtain an element of expᴸ[𝟙+ α ] β.
This assignment is called expᴸ-segment-inclusion below and is shown to be a
simulation.
\begin{code}
module _
(α : Ordinal 𝓤)
(β : Ordinal 𝓥)
(b₀ : ⟨ β ⟩)
where
expᴸ-segment-inclusion : ⟨ expᴸ[𝟙+ α ] (β ↓ b₀) ⟩ → ⟨ expᴸ[𝟙+ α ] β ⟩
expᴸ-segment-inclusion =
expᴸ-map α (β ↓ b₀) β
(segment-inclusion β b₀)
(simulations-are-order-preserving
(β ↓ b₀) β
(segment-inclusion β b₀)
(segment-inclusion-is-simulation β b₀))
expᴸ-segment-inclusion-list : List ⟨ α ×ₒ (β ↓ b₀) ⟩ → List ⟨ α ×ₒ β ⟩
expᴸ-segment-inclusion-list = map (λ (a , b) → (a , segment-inclusion β b₀ b))
expᴸ-segment-inclusion-list-preserves-decreasing-pr₂ :
(l : List ⟨ α ×ₒ (β ↓ b₀) ⟩)
→ is-decreasing-pr₂ α (β ↓ b₀) l
→ is-decreasing-pr₂ α β (expᴸ-segment-inclusion-list l)
expᴸ-segment-inclusion-list-preserves-decreasing-pr₂ l δ =
DecrList₂-list-is-decreasing-pr₂ α β (expᴸ-segment-inclusion (l , δ))
extended-expᴸ-segment-inclusion-is-decreasing-pr₂ :
(l : List ⟨ α ×ₒ (β ↓ b₀) ⟩) (a₀ : ⟨ α ⟩)
→ is-decreasing-pr₂ α (β ↓ b₀) l
→ is-decreasing-pr₂ α β ((a₀ , b₀) ∷ expᴸ-segment-inclusion-list l)
extended-expᴸ-segment-inclusion-is-decreasing-pr₂ [] a₀ δ = sing-decr
extended-expᴸ-segment-inclusion-is-decreasing-pr₂ ((a , (b , u)) ∷ l) a₀ δ =
many-decr
u
(expᴸ-segment-inclusion-list-preserves-decreasing-pr₂ (a , b , u ∷ l) δ)
predecessor-of-expᴸ-segment-inclusion-lemma :
(a : ⟨ α ⟩) {b : ⟨ β ⟩}
{l₁ : List ⟨ α ×ₒ β ⟩}
{l₂ : List ⟨ α ×ₒ (β ↓ b₀) ⟩}
→ ((a , b) ∷ l₁) ≺⟨List (α ×ₒ β) ⟩ expᴸ-segment-inclusion-list l₂
→ b ≺⟨ β ⟩ b₀
predecessor-of-expᴸ-segment-inclusion-lemma a {b} {l₁} {(a' , (b' , u)) ∷ l₂}
(head-lex (inl v)) = Transitivity β b b' b₀ v u
predecessor-of-expᴸ-segment-inclusion-lemma a {b} {l₁} {(a' , (b' , u)) ∷ l₂}
(head-lex (inr (refl , v))) = u
predecessor-of-expᴸ-segment-inclusion-lemma a {b} {l₁} {(a' , (b' , u)) ∷ l₂}
(tail-lex refl v) = u
expᴸ-segment-inclusion-list-lex :
{l₁ : List ⟨ α ×ₒ (β ↓ b₀) ⟩}
{a : ⟨ α ⟩} {l : List ⟨ α ×ₒ β ⟩}
→ expᴸ-segment-inclusion-list l₁ ≺⟨List (α ×ₒ β ) ⟩ ((a , b₀) ∷ l)
expᴸ-segment-inclusion-list-lex {[]} = []-lex
expᴸ-segment-inclusion-list-lex {((a' , (b' , u)) ∷ l₁)} = head-lex (inl u)
extended-expᴸ-segment-inclusion : (l : ⟨ expᴸ[𝟙+ α ] (β ↓ b₀) ⟩) (a₀ : ⟨ α ⟩)
→ ⟨ expᴸ[𝟙+ α ] β ⟩
extended-expᴸ-segment-inclusion (l , δ) a₀ =
((a₀ , b₀) ∷ expᴸ-segment-inclusion-list l) ,
extended-expᴸ-segment-inclusion-is-decreasing-pr₂ l a₀ δ
expᴸ-segment-inclusion-is-order-preserving :
is-order-preserving
(expᴸ[𝟙+ α ] (β ↓ b₀))
(expᴸ[𝟙+ α ] β)
expᴸ-segment-inclusion
expᴸ-segment-inclusion-is-order-preserving =
expᴸ-map-is-order-preserving α (β ↓ b₀) β (segment-inclusion β b₀)
(simulations-are-order-preserving (β ↓ b₀) β
(segment-inclusion β b₀)
(segment-inclusion-is-simulation β b₀))
expᴸ-segment-inclusion-is-order-reflecting :
is-order-reflecting
(expᴸ[𝟙+ α ] (β ↓ b₀))
(expᴸ[𝟙+ α ] β)
expᴸ-segment-inclusion
expᴸ-segment-inclusion-is-order-reflecting =
expᴸ-map-is-order-reflecting α (β ↓ b₀) β (segment-inclusion β b₀)
(simulations-are-order-preserving (β ↓ b₀) β
(segment-inclusion β b₀)
(segment-inclusion-is-simulation β b₀))
(simulations-are-order-reflecting (β ↓ b₀) β
(segment-inclusion β b₀)
(segment-inclusion-is-simulation β b₀))
(simulations-are-lc (β ↓ b₀) β
(segment-inclusion β b₀)
(segment-inclusion-is-simulation β b₀))
expᴸ-segment-inclusion-is-simulation :
(α : Ordinal 𝓤) (β : Ordinal 𝓥) (b₀ : ⟨ β ⟩)
→ is-simulation (expᴸ[𝟙+ α ] (β ↓ b₀)) (expᴸ[𝟙+ α ] β)
(expᴸ-segment-inclusion α β b₀)
expᴸ-segment-inclusion-is-simulation α β b₀ =
expᴸ-map-is-simulation α (β ↓ b₀) β
(segment-inclusion β b₀)
(simulations-are-order-preserving (β ↓ b₀) β
(segment-inclusion β b₀) (segment-inclusion-is-simulation β b₀))
(simulations-are-initial-segments (β ↓ b₀) β
(segment-inclusion β b₀)
(segment-inclusion-is-simulation β b₀))
expᴸ-segment-inclusion-⊴ : (α : Ordinal 𝓤) (β : Ordinal 𝓥) (b₀ : ⟨ β ⟩)
→ expᴸ[𝟙+ α ] (β ↓ b₀) ⊴ expᴸ[𝟙+ α ] β
expᴸ-segment-inclusion-⊴ α β b₀ = expᴸ-segment-inclusion α β b₀ ,
expᴸ-segment-inclusion-is-simulation α β b₀
\end{code}
The following construction goes in the other direction. More precisely, given a
list l with entries in α ×ₒ β such that (a₀ , b₀) ∷ l is decreasing in the
second component, we obtain an element of expᴸ[𝟙+ α ] (β ↓ b₀) by inserting the
required inequality proofs in the second components.
\begin{code}
module _
(α : Ordinal 𝓤)
(β : Ordinal 𝓥)
(a₀ : ⟨ α ⟩)
(b₀ : ⟨ β ⟩)
where
expᴸ-tail-list : (l : List ⟨ α ×ₒ β ⟩)
→ is-decreasing-pr₂ α β ((a₀ , b₀) ∷ l)
→ List ⟨ α ×ₒ (β ↓ b₀) ⟩
expᴸ-tail-list [] _ = []
expᴸ-tail-list ((a , b) ∷ l) δ = (a , (b , u)) ∷ (expᴸ-tail-list l ε)
where
u : b ≺⟨ β ⟩ b₀
u = heads-are-decreasing-pr₂ α β a₀ a δ
ε : is-decreasing-pr₂ α β (a₀ , b₀ ∷ l)
ε = is-decreasing-pr₂-skip α β (a₀ , b₀) (a , b) δ
expᴸ-tail-list-preserves-decreasing-pr₂ :
(l : List ⟨ α ×ₒ β ⟩) (δ : is-decreasing-pr₂ α β ((a₀ , b₀) ∷ l))
→ is-decreasing-pr₂ α (β ↓ b₀) (expᴸ-tail-list l δ)
expᴸ-tail-list-preserves-decreasing-pr₂ [] _ = []-decr
expᴸ-tail-list-preserves-decreasing-pr₂ ((a , b) ∷ []) δ = sing-decr
expᴸ-tail-list-preserves-decreasing-pr₂ ((a , b) ∷ (a' , b') ∷ l) (many-decr u δ) =
many-decr v (expᴸ-tail-list-preserves-decreasing-pr₂ ((a' , b') ∷ l) ε)
where
v : b' ≺⟨ β ⟩ b
v = heads-are-decreasing-pr₂ α β a a' δ
ε : is-decreasing-pr₂ α β (a₀ , b₀ ∷ a' , b' ∷ l)
ε = many-decr
(Transitivity β b' b b₀ v u)
(tail-is-decreasing-pr₂ α β (a , b) {a , b' ∷ l} δ)
expᴸ-tail : (l : List ⟨ α ×ₒ β ⟩)
→ is-decreasing-pr₂ α β ((a₀ , b₀) ∷ l)
→ ⟨ expᴸ[𝟙+ α ] (β ↓ b₀) ⟩
expᴸ-tail l δ = expᴸ-tail-list l δ ,
(expᴸ-tail-list-preserves-decreasing-pr₂ l δ)
expᴸ-tail-is-order-preserving :
{l₁ l₂ : List ⟨ α ×ₒ β ⟩}
(δ₁ : is-decreasing-pr₂ α β ((a₀ , b₀) ∷ l₁))
(δ₂ : is-decreasing-pr₂ α β ((a₀ , b₀) ∷ l₂))
→ l₁ ≺⟨List (α ×ₒ β) ⟩ l₂
→ expᴸ-tail l₁ δ₁ ≺⟨ expᴸ[𝟙+ α ] (β ↓ b₀) ⟩ expᴸ-tail l₂ δ₂
expᴸ-tail-is-order-preserving {[]} {(_ ∷ l₂)} δ₁ δ₂ _ = []-lex
expᴸ-tail-is-order-preserving {((a , b) ∷ l₁)} {((a' , b') ∷ l₂)} δ₁ δ₂
(head-lex (inl u)) = head-lex (inl u)
expᴸ-tail-is-order-preserving {((a , b) ∷ l₁)} {((a' , b') ∷ l₂)} δ₁ δ₂
(head-lex (inr (refl , u))) =
head-lex (inr ((segment-inclusion-lc β refl) , u))
expᴸ-tail-is-order-preserving {((a , b) ∷ l₁)} {((a' , b') ∷ l₂)} δ₁ δ₂
(tail-lex refl u) = tail-lex
(ap (a ,_) (segment-inclusion-lc β refl))
(expᴸ-tail-is-order-preserving
(is-decreasing-pr₂-skip α β (a₀ , b₀) (a , b) δ₁)
(is-decreasing-pr₂-skip α β (a₀ , b₀) (a , b) δ₂)
u)
\end{code}
The assignments expᴸ-tail and expᴸ-segment-inclusion are inverses to each other.
\begin{code}
expᴸ-tail-section-of-expᴸ-segment-inclusion' :
(l : List ⟨ α ×ₒ β ⟩) (δ : is-decreasing-pr₂ α β ((a₀ , b₀) ∷ l))
→ DecrList₂-list α β (expᴸ-segment-inclusion α β b₀ (expᴸ-tail l δ)) = l
expᴸ-tail-section-of-expᴸ-segment-inclusion' [] _ = refl
expᴸ-tail-section-of-expᴸ-segment-inclusion' ((a , b) ∷ l) δ =
ap ((a , b) ∷_)
(expᴸ-tail-section-of-expᴸ-segment-inclusion' l
(is-decreasing-pr₂-skip α β (a₀ , b₀) (a , b) δ))
expᴸ-tail-section-of-expᴸ-segment-inclusion :
(l : List ⟨ α ×ₒ β ⟩)
{δ : is-decreasing-pr₂ α β ((a₀ , b₀) ∷ l)}
{ε : is-decreasing-pr₂ α β l}
→ expᴸ-segment-inclusion α β b₀ (expᴸ-tail l δ) = (l , ε)
expᴸ-tail-section-of-expᴸ-segment-inclusion l {δ} =
to-DecrList₂-= α β (expᴸ-tail-section-of-expᴸ-segment-inclusion' l δ)
expᴸ-segment-inclusion-section-of-expᴸ-tail' :
(l : List ⟨ α ×ₒ (β ↓ b₀) ⟩)
(δ : is-decreasing-pr₂ α (β ↓ b₀) l)
{ε : is-decreasing-pr₂ α β (a₀ , b₀ ∷ expᴸ-segment-inclusion-list α β b₀ l)}
→ DecrList₂-list α (β ↓ b₀) (expᴸ-tail (expᴸ-segment-inclusion-list α β b₀ l) ε)
= l
expᴸ-segment-inclusion-section-of-expᴸ-tail' [] _ = refl
expᴸ-segment-inclusion-section-of-expᴸ-tail' ((a , (b , u)) ∷ l) δ =
ap₂ _∷_
(ap (a ,_) (segment-inclusion-lc β refl))
(expᴸ-segment-inclusion-section-of-expᴸ-tail'
l
(tail-is-decreasing-pr₂ α (β ↓ b₀) (a , (b , u)) δ))
expᴸ-segment-inclusion-section-of-expᴸ-tail :
(l : List ⟨ α ×ₒ (β ↓ b₀) ⟩)
(δ : is-decreasing-pr₂ α (β ↓ b₀) l)
{ε : is-decreasing-pr₂ α β (a₀ , b₀ ∷ expᴸ-segment-inclusion-list α β b₀ l)}
→ expᴸ-tail (expᴸ-segment-inclusion-list α β b₀ l) ε = l , δ
expᴸ-segment-inclusion-section-of-expᴸ-tail l δ =
to-DecrList₂-= α (β ↓ b₀) (expᴸ-segment-inclusion-section-of-expᴸ-tail' l δ)
\end{code}
We are now ready to characterize the initial segment
expᴸ[𝟙+ α ] β ↓ ((a , b) ∷ l)
as the ordinal
expᴸ[𝟙+ α ] (β ↓ b) ×ₒ (𝟙ₒ +ₒ (α ↓ a)) +ₒ (expᴸ[𝟙+ α ] (β ↓ b) ↓ expᴸ-tail l).
\begin{code}
expᴸ-↓-cons-≃ₒ
: (α : Ordinal 𝓤) (β : Ordinal 𝓥)
(a : ⟨ α ⟩) (b : ⟨ β ⟩) (l : List ⟨ α ×ₒ β ⟩)
(δ : is-decreasing-pr₂ α β ((a , b) ∷ l))
→ expᴸ[𝟙+ α ] β ↓ (((a , b) ∷ l) , δ)
≃ₒ expᴸ[𝟙+ α ] (β ↓ b) ×ₒ (𝟙ₒ +ₒ (α ↓ a))
+ₒ (expᴸ[𝟙+ α ] (β ↓ b) ↓ expᴸ-tail α β a b l δ)
expᴸ-↓-cons-≃ₒ {𝓤} {𝓥} α β a b l δ =
f , f-is-order-preserving ,
(qinvs-are-equivs f (g , gf-is-id , fg-is-id) ,
g-is-order-preserving)
where
LHS RHS : Ordinal (𝓤 ⊔ 𝓥)
LHS = expᴸ[𝟙+ α ] β ↓ (((a , b) ∷ l) , δ)
RHS = expᴸ[𝟙+ α ] (β ↓ b) ×ₒ (𝟙ₒ +ₒ (α ↓ a))
+ₒ (expᴸ[𝟙+ α ] (β ↓ b) ↓ expᴸ-tail α β a b l δ)
f : ⟨ LHS ⟩ → ⟨ RHS ⟩
f (([] , _) , u) =
inl (([] , []-decr) , inl ⋆)
f ((((a' , b') ∷ l') , ε) , head-lex (inl u)) =
inl (expᴸ-tail α β a b (a' , b' ∷ l') (many-decr u ε) , inl ⋆)
f ((((a' , b ) ∷ l') , ε) , head-lex (inr (refl , u))) =
inl (expᴸ-tail α β a b l' ε , inr (a' , u))
f ((((a , b ) ∷ l') , ε) , tail-lex refl u) =
inr (expᴸ-tail α β a b l' ε , expᴸ-tail-is-order-preserving α β a b ε δ u)
g : ⟨ RHS ⟩ → ⟨ LHS ⟩
g (inl (l₁ , inl ⋆)) = expᴸ-segment-inclusion α β b l₁ ,
expᴸ-segment-inclusion-list-lex α β b
g (inl (l₁ , inr (a₁ , s))) = extended-expᴸ-segment-inclusion α β b l₁ a₁ ,
head-lex (inr (refl , s))
g (inr (l₁ , w)) = extended-expᴸ-segment-inclusion α β b l₁ a ,
tail-lex refl w'
where
ℓ : List ⟨ α ×ₒ (β ↓ b) ⟩
ℓ = DecrList₂-list α (β ↓ b) l₁
w' : expᴸ-segment-inclusion-list α β b ℓ ≺⟨List (α ×ₒ β) ⟩ l
w' = transport
(λ - → expᴸ-segment-inclusion-list α β b ℓ ≺⟨List (α ×ₒ β) ⟩ -)
(expᴸ-tail-section-of-expᴸ-segment-inclusion' α β a b l δ)
(expᴸ-segment-inclusion-is-order-preserving α β b
l₁
(expᴸ-tail α β a b l δ)
w)
fg-is-id : f ∘ g ∼ id
fg-is-id (inl (([] , []-decr) , inl ⋆)) = refl
fg-is-id (inl ((((a' , b') ∷ l') , ε) , inl ⋆)) =
ap (λ - → (inl (- , inl ⋆)))
(to-DecrList₂-= α (β ↓ b)
(ap ((a' , b') ∷_)
(expᴸ-segment-inclusion-section-of-expᴸ-tail' α β a b l'
(tail-is-decreasing-pr₂ α (β ↓ b) (a , b') ε))))
fg-is-id (inl (([] , []-decr) , inr x)) = refl
fg-is-id (inl ((l'@(_ ∷ l₁) , ε) , inr (a' , s))) =
ap (λ - → inl (- , inr (a' , s)))
(expᴸ-segment-inclusion-section-of-expᴸ-tail α β a b l' ε)
fg-is-id (inr ((l' , ε) , w)) =
ap inr (segment-inclusion-lc
(expᴸ[𝟙+ α ] (β ↓ b))
{expᴸ-tail α β a b l δ}
(expᴸ-segment-inclusion-section-of-expᴸ-tail α β a b l' ε))
gf-is-id : g ∘ f ∼ id
gf-is-id (([] , []-decr) , []-lex) = refl
gf-is-id ((((a' , b') ∷ l') , ε) , head-lex (inl u)) =
segment-inclusion-lc
(expᴸ[𝟙+ α ] β)
{(a , b ∷ l) , δ}
(expᴸ-tail-section-of-expᴸ-segment-inclusion α β a b (a' , b' ∷ l'))
gf-is-id ((((a' , b) ∷ l') , ε) , head-lex (inr (refl , u))) =
segment-inclusion-lc
(expᴸ[𝟙+ α ] β)
{(a , b ∷ l) , δ}
(to-DecrList₂-= α β
(ap ((a' , b) ∷_)
(expᴸ-tail-section-of-expᴸ-segment-inclusion' α β a b l' ε)))
gf-is-id ((((a , b) ∷ l') , ε) , tail-lex refl u) =
segment-inclusion-lc
(expᴸ[𝟙+ α ] β)
{(a , b ∷ l) , δ}
(to-DecrList₂-= α β
(ap ((a , b) ∷_)
(expᴸ-tail-section-of-expᴸ-segment-inclusion' α β a b l' ε)))
g-is-order-preserving : is-order-preserving RHS LHS g
g-is-order-preserving (inl (l , inl ⋆)) (inl (l' , inl ⋆)) (inr (refl , u)) =
expᴸ-segment-inclusion-is-order-preserving α β b l l' u
g-is-order-preserving (inl (l , inl ⋆)) (inl (l' , inr (a' , j))) u =
expᴸ-segment-inclusion-list-lex α β b
g-is-order-preserving (inl (l , inr (a' , i))) (inl (l' , inl ⋆))
(inr (e , u)) = 𝟘-elim (+disjoint (e ⁻¹))
g-is-order-preserving (inl (l , inr (a' , i))) (inl (l' , inr (a'' , j)))
(inl u) = head-lex (inr (refl , u))
g-is-order-preserving (inl (l , inr (a' , i))) (inl (l' , inr (a'' , j)))
(inr (refl , v)) =
tail-lex refl (expᴸ-segment-inclusion-is-order-preserving α β b l l' v)
g-is-order-preserving (inl (l , inl ⋆)) (inr (l' , v)) _ =
expᴸ-segment-inclusion-list-lex α β b
g-is-order-preserving (inl (l , inr (a' , i))) (inr (l' , v)) _ =
head-lex (inr (refl , i))
g-is-order-preserving (inr (l , v)) (inr (l' , v')) u =
tail-lex refl (expᴸ-segment-inclusion-is-order-preserving α β b l l' u)
f-is-order-preserving : is-order-preserving LHS RHS f
f-is-order-preserving (([] , δ₁) , u)
(((_ ∷ l') , δ₂) , head-lex (inl v)) w =
inr (refl , []-lex)
f-is-order-preserving (([] , δ₁) , u)
(((_ ∷ l') , δ₂) , head-lex (inr (refl , v))) w = inl ⋆
f-is-order-preserving (([] , δ₁) , u)
(((_ ∷ l') , δ₂) , tail-lex refl v) w = ⋆
f-is-order-preserving (((a₁ , b₁ ∷ l₁) , δ₁) , head-lex (inl u))
(((a₂ , b₂ ∷ l₂) , δ₂) , head-lex (inl v))
(head-lex (inl w)) = inr (refl , (head-lex (inl w)))
f-is-order-preserving (((a₁ , b₁ ∷ l₁) , δ₁) , head-lex (inl u))
(((a₂ , b₂ ∷ l₂) , δ₂) , head-lex (inl v))
(head-lex (inr (refl , w))) =
inr (refl , (head-lex (inr ((segment-inclusion-lc β refl) , w))))
f-is-order-preserving (((a₁ , b₁ ∷ l₁) , δ₁) , head-lex (inl u))
(((a₂ , b₂ ∷ l₂) , δ₂) , head-lex (inl v))
(tail-lex refl w) =
inr (refl , tail-lex
(ap (a₁ ,_) (segment-inclusion-lc β refl))
(expᴸ-tail-is-order-preserving α β a b _ _ w))
f-is-order-preserving (((a₁ , b₁ ∷ l₁) , δ₁) , head-lex (inl u))
(((a₂ , b₂ ∷ l₂) , δ₂) , head-lex (inr (refl , v))) w =
inl ⋆
f-is-order-preserving (((a₁ , b₁ ∷ l₁) , δ₁) , head-lex (inl u))
(((a₂ , b₂ ∷ l₂) , δ₂) , tail-lex refl v) w = ⋆
f-is-order-preserving (((a₁ , b₁ ∷ l₁) , δ₁) , head-lex (inr (refl , u)))
(((a₂ , b₂ ∷ l₂) , δ₂) , head-lex (inl v))
(head-lex (inl w)) =
𝟘-elim (irrefl β b₁ (Transitivity β b₁ b₂ b₁ w v))
f-is-order-preserving (((a₁ , b₁ ∷ l₁) , δ₁) , head-lex (inr (refl , u)))
(((a₂ , b₂ ∷ l₂) , δ₂) , head-lex (inl v))
(head-lex (inr (refl , w))) = 𝟘-elim (irrefl β b₁ v)
f-is-order-preserving (((a₁ , b₁ ∷ l₁) , δ₁) , head-lex (inr (refl , u)))
(((a₂ , b₂ ∷ l₂) , δ₂) , head-lex (inl v))
(tail-lex refl w) = 𝟘-elim (irrefl β b₁ v)
f-is-order-preserving (((a₁ , b₁ ∷ l₁) , δ₁) , head-lex (inr (refl , u)))
(((a₂ , b₂ ∷ l₂) , δ₂) , head-lex (inr (refl , v)))
(head-lex (inl w)) = 𝟘-elim (irrefl β b₁ w)
f-is-order-preserving (((a₁ , b₁ ∷ l₁) , δ₁) , head-lex (inr (refl , u)))
(((a₂ , b₂ ∷ l₂) , δ₂) , head-lex (inr (refl , v)))
(head-lex (inr (e , w))) = inl w
f-is-order-preserving (((a₁ , b₁ ∷ l₁) , δ₁) , head-lex (inr (refl , u)))
(((a₂ , b₂ ∷ l₂) , δ₂) , head-lex (inr (refl , v)))
(tail-lex e w) =
inr (ap inr (segment-inclusion-lc α (ap pr₁ e)) ,
expᴸ-tail-is-order-preserving α β a b δ₁ δ₂ w)
f-is-order-preserving (((a₁ , b₁ ∷ l₁) , δ₁) , head-lex (inr (refl , u)))
(((a₂ , b₂ ∷ l₂) , δ₂) , tail-lex refl v) w = ⋆
f-is-order-preserving (((a₁ , b₁ ∷ l₁) , δ₁) , tail-lex refl u)
(((a₂ , b₂ ∷ l₂) , δ₂) , head-lex (inl v))
(head-lex (inl w)) =
𝟘-elim (irrefl β b₁ (Transitivity β b₁ b₂ b₁ w v))
f-is-order-preserving (((a₁ , b₁ ∷ l₁) , δ₁) , tail-lex refl u)
(((a₂ , b₂ ∷ l₂) , δ₂) , head-lex (inl v))
(head-lex (inr (refl , w))) = 𝟘-elim (irrefl β b₁ v)
f-is-order-preserving (((a₁ , b₁ ∷ l₁) , δ₁) , tail-lex refl u)
(((a₂ , b₂ ∷ l₂) , δ₂) , head-lex (inl v))
(tail-lex refl w) = 𝟘-elim (irrefl β b₁ v)
f-is-order-preserving (((a₁ , b₁ ∷ l₁) , δ₁) , tail-lex refl u)
(((a₂ , b₂ ∷ l₂) , δ₂) , head-lex (inr (refl , v)))
(head-lex (inl w)) = 𝟘-elim (irrefl β b₁ w)
f-is-order-preserving (((a₁ , b₁ ∷ l₁) , δ₁) , tail-lex refl u)
(((a₂ , b₂ ∷ l₂) , δ₂) , head-lex (inr (refl , v)))
(head-lex (inr (e , w))) =
𝟘-elim (irrefl α a₁ (Transitivity α a₁ a₂ a₁ w v))
f-is-order-preserving (((a₁ , b₁ ∷ l₁) , δ₁) , tail-lex refl u)
(((a₂ , b₂ ∷ l₂) , δ₂) , head-lex (inr (refl , v)))
(tail-lex e w) =
𝟘-elim (irrefl α a₁ (transport⁻¹ (λ - → - ≺⟨ α ⟩ a₁) (ap pr₁ e) v))
f-is-order-preserving (((a₁ , b₁ ∷ l₁) , δ₁) , tail-lex refl u)
(((a₂ , b₂ ∷ l₂) , δ₂) , tail-lex refl v)
(head-lex (inl w)) = 𝟘-elim (irrefl β b₁ w)
f-is-order-preserving (((a₁ , b₁ ∷ l₁) , δ₁) , tail-lex refl u)
(((a₂ , b₂ ∷ l₂) , δ₂) , tail-lex refl v)
(head-lex (inr (e , w))) = 𝟘-elim (irrefl α a₁ w)
f-is-order-preserving (((a₁ , b₁ ∷ l₁) , δ₁) , tail-lex refl u)
(((a₂ , b₂ ∷ l₂) , δ₂) , tail-lex refl v)
(tail-lex e w) =
expᴸ-tail-is-order-preserving α β a₁ b₁ δ₁ δ₂ w
\end{code}
The below is a variation of, and follows from, the above where we start with an
element of expᴸ[𝟙+ α ] (β ↓ b) rather than expᴸ[𝟙+ α ] β.
\begin{code}
expᴸ-↓-cons-≃ₒ'
: (α : Ordinal 𝓤) (β : Ordinal 𝓥)
(a : ⟨ α ⟩) (b : ⟨ β ⟩) (l : ⟨ expᴸ[𝟙+ α ] (β ↓ b) ⟩)
→ expᴸ[𝟙+ α ] β ↓ extended-expᴸ-segment-inclusion α β b l a
≃ₒ expᴸ[𝟙+ α ] (β ↓ b) ×ₒ (𝟙ₒ +ₒ (α ↓ a)) +ₒ (expᴸ[𝟙+ α ] (β ↓ b) ↓ l)
expᴸ-↓-cons-≃ₒ' α β a b (l , δ) =
transport
(λ - → LHS ≃ₒ expᴸ[𝟙+ α ] (β ↓ b) ×ₒ (𝟙ₒ +ₒ (α ↓ a))
+ₒ (expᴸ[𝟙+ α ] (β ↓ b) ↓ -))
I
II
where
LHS = expᴸ[𝟙+ α ] β ↓ extended-expᴸ-segment-inclusion α β b (l , δ) a
ε : is-decreasing-pr₂ α β (a , b ∷ expᴸ-segment-inclusion-list α β b l)
ε = extended-expᴸ-segment-inclusion-is-decreasing-pr₂ α β b l a δ
l' : List ⟨ α ×ₒ β ⟩
l' = expᴸ-segment-inclusion-list α β b l
I : expᴸ-tail α β a b l' ε = (l , δ)
I = expᴸ-segment-inclusion-section-of-expᴸ-tail α β a b l δ
II : LHS ≃ₒ expᴸ[𝟙+ α ] (β ↓ b) ×ₒ (𝟙ₒ +ₒ (α ↓ a))
+ₒ (expᴸ[𝟙+ α ] (β ↓ b) ↓ expᴸ-tail α β a b l' ε)
II = expᴸ-↓-cons-≃ₒ α β a b (expᴸ-segment-inclusion-list α β b l) ε
\end{code}
Finally, using univalence, we promote the above equivalences to identifications.
\begin{code}
expᴸ-↓-cons
: (α : Ordinal 𝓤) (β : Ordinal 𝓥)
(a : ⟨ α ⟩) (b : ⟨ β ⟩) (l : List ⟨ α ×ₒ β ⟩)
(δ : is-decreasing-pr₂ α β ((a , b) ∷ l))
→ expᴸ[𝟙+ α ] β ↓ (((a , b) ∷ l) , δ)
= expᴸ[𝟙+ α ] (β ↓ b) ×ₒ (𝟙ₒ +ₒ (α ↓ a))
+ₒ (expᴸ[𝟙+ α ] (β ↓ b) ↓ expᴸ-tail α β a b l δ)
expᴸ-↓-cons α β a b l δ = eqtoidₒ (ua _) fe' _ _ (expᴸ-↓-cons-≃ₒ α β a b l δ)
expᴸ-↓-cons'
: (α : Ordinal 𝓤) (β : Ordinal 𝓥)
(a : ⟨ α ⟩) (b : ⟨ β ⟩) (l : ⟨ expᴸ[𝟙+ α ] (β ↓ b) ⟩)
→ expᴸ[𝟙+ α ] β ↓ extended-expᴸ-segment-inclusion α β b l a
= expᴸ[𝟙+ α ] (β ↓ b) ×ₒ (𝟙ₒ +ₒ (α ↓ a)) +ₒ (expᴸ[𝟙+ α ] (β ↓ b) ↓ l)
expᴸ-↓-cons' α β a b l = eqtoidₒ (ua _) fe' _ _ (expᴸ-↓-cons-≃ₒ' α β a b l)
\end{code}