We prove several properties of ordinal multiplication, including that it
preserves suprema of ordinals and that it enjoys a left-cancellation property.
\begin{code}
{-# OPTIONS --safe --without-K --lossy-unification #-}
open import UF.Univalence
module Ordinals.MultiplicationProperties
(ua : Univalence)
where
open import UF.Base
open import UF.Equiv
open import UF.FunExt
open import UF.Subsingletons
open import UF.Subsingletons-FunExt
open import UF.UA-FunExt
open import UF.ClassicalLogic
private
fe : FunExt
fe = Univalence-gives-FunExt ua
fe' : Fun-Ext
fe' {𝓤} {𝓥} = fe 𝓤 𝓥
open import MLTT.Spartan
open import MLTT.Plus-Properties
open import Ordinals.Arithmetic fe
open import Ordinals.Equivalence
open import Ordinals.Maps
open import Ordinals.OrdinalOfOrdinals ua
open import Ordinals.Type
open import Ordinals.Underlying
open import Ordinals.AdditionProperties ua
×ₒ-𝟘ₒ-right : (α : Ordinal 𝓤) → α ×ₒ 𝟘ₒ {𝓥} = 𝟘ₒ
×ₒ-𝟘ₒ-right α = ⊴-antisym _ _
(to-⊴ (α ×ₒ 𝟘ₒ) 𝟘ₒ (λ (a , b) → 𝟘-elim b))
(𝟘ₒ-least-⊴ (α ×ₒ 𝟘ₒ))
×ₒ-𝟘ₒ-left : (α : Ordinal 𝓤) → 𝟘ₒ {𝓥} ×ₒ α = 𝟘ₒ
×ₒ-𝟘ₒ-left α = ⊴-antisym _ _
(to-⊴ (𝟘ₒ ×ₒ α) 𝟘ₒ (λ (b , a) → 𝟘-elim b))
(𝟘ₒ-least-⊴ (𝟘ₒ ×ₒ α))
𝟙ₒ-left-neutral-×ₒ : (α : Ordinal 𝓤) → 𝟙ₒ {𝓤} ×ₒ α = α
𝟙ₒ-left-neutral-×ₒ {𝓤} α = eqtoidₒ (ua _) fe' _ _
(f , f-order-preserving ,
f-is-equiv , g-order-preserving)
where
f : 𝟙 × ⟨ α ⟩ → ⟨ α ⟩
f = pr₂
g : ⟨ α ⟩ → 𝟙 × ⟨ α ⟩
g = ( ⋆ ,_)
f-order-preserving : is-order-preserving (𝟙ₒ {𝓤} ×ₒ α) α f
f-order-preserving x y (inl p) = p
f-is-equiv : is-equiv f
f-is-equiv = qinvs-are-equivs f (g , (λ _ → refl) , (λ _ → refl))
g-order-preserving : is-order-preserving α (𝟙ₒ {𝓤} ×ₒ α) g
g-order-preserving x y p = inl p
𝟙ₒ-right-neutral-×ₒ : (α : Ordinal 𝓤) → α ×ₒ 𝟙ₒ {𝓤} = α
𝟙ₒ-right-neutral-×ₒ {𝓤} α = eqtoidₒ (ua _) fe' _ _
(f , f-order-preserving ,
f-is-equiv , g-order-preserving)
where
f : ⟨ α ⟩ × 𝟙 → ⟨ α ⟩
f = pr₁
g : ⟨ α ⟩ → ⟨ α ⟩ × 𝟙
g = (_, ⋆ )
f-order-preserving : is-order-preserving (α ×ₒ 𝟙ₒ {𝓤}) α f
f-order-preserving x y (inr (refl , p)) = p
f-is-equiv : is-equiv f
f-is-equiv = qinvs-are-equivs f (g , (λ _ → refl) , (λ _ → refl))
g-order-preserving : is-order-preserving α (α ×ₒ 𝟙ₒ {𝓤}) g
g-order-preserving x y p = inr (refl , p)
\end{code}
Because we use --lossy-unification to speed up typechecking we have to
explicitly mention the universes in the lemma below; using them as variables (as
usual) results in a unification error.
\begin{code}
×ₒ-assoc : {𝓤 𝓥 𝓦 : Universe}
(α : Ordinal 𝓤) (β : Ordinal 𝓥) (γ : Ordinal 𝓦)
→ (α ×ₒ β) ×ₒ γ = α ×ₒ (β ×ₒ γ)
×ₒ-assoc α β γ =
eqtoidₒ (ua _) fe' ((α ×ₒ β) ×ₒ γ) (α ×ₒ (β ×ₒ γ))
(f , order-preserving-reflecting-equivs-are-order-equivs
((α ×ₒ β) ×ₒ γ) (α ×ₒ (β ×ₒ γ))
f f-equiv f-preserves-order f-reflects-order)
where
f : ⟨ (α ×ₒ β) ×ₒ γ ⟩ → ⟨ α ×ₒ (β ×ₒ γ) ⟩
f ((a , b) , c) = (a , (b , c))
g : ⟨ α ×ₒ (β ×ₒ γ) ⟩ → ⟨ (α ×ₒ β) ×ₒ γ ⟩
g (a , (b , c)) = ((a , b) , c)
f-equiv : is-equiv f
f-equiv = qinvs-are-equivs f (g , (λ x → refl) , (λ x → refl))
f-preserves-order : is-order-preserving ((α ×ₒ β) ×ₒ γ) (α ×ₒ (β ×ₒ γ)) f
f-preserves-order _ _ (inl p) = inl (inl p)
f-preserves-order _ _ (inr (r , inl p)) = inl (inr (r , p))
f-preserves-order _ _ (inr (r , inr (u , q))) = inr (to-×-= u r , q)
f-reflects-order : is-order-reflecting ((α ×ₒ β) ×ₒ γ) (α ×ₒ (β ×ₒ γ)) f
f-reflects-order _ _ (inl (inl p)) = inl p
f-reflects-order _ _ (inl (inr (r , q))) = inr (r , (inl q))
f-reflects-order _ _ (inr (refl , q)) = inr (refl , (inr (refl , q)))
\end{code}
The lemma below is as general as possible in terms of universe parameters
because addition requires its arguments to come from the same universe, at least
at present.
\begin{code}
×ₒ-distributes-+ₒ-right : (α : Ordinal 𝓤) (β γ : Ordinal 𝓥)
→ α ×ₒ (β +ₒ γ) = (α ×ₒ β) +ₒ (α ×ₒ γ)
×ₒ-distributes-+ₒ-right α β γ = eqtoidₒ (ua _) fe' _ _
(f , f-order-preserving ,
f-is-equiv , g-order-preserving)
where
f : ⟨ α ×ₒ (β +ₒ γ) ⟩ → ⟨ (α ×ₒ β) +ₒ (α ×ₒ γ) ⟩
f (a , inl b) = inl (a , b)
f (a , inr c) = inr (a , c)
g : ⟨ (α ×ₒ β) +ₒ (α ×ₒ γ) ⟩ → ⟨ α ×ₒ (β +ₒ γ) ⟩
g (inl (a , b)) = a , inl b
g (inr (a , c)) = a , inr c
f-order-preserving : is-order-preserving _ _ f
f-order-preserving (a , inl b) (a' , inl b') (inl p) = inl p
f-order-preserving (a , inl b) (a' , inr c') (inl p) = ⋆
f-order-preserving (a , inr c) (a' , inr c') (inl p) = inl p
f-order-preserving (a , inl b) (a' , inl .b) (inr (refl , q)) = inr (refl , q)
f-order-preserving (a , inr c) (a' , inr .c) (inr (refl , q)) = inr (refl , q)
f-is-equiv : is-equiv f
f-is-equiv = qinvs-are-equivs f (g , η , ε)
where
η : g ∘ f ∼ id
η (a , inl b) = refl
η (a , inr c) = refl
ε : f ∘ g ∼ id
ε (inl (a , b)) = refl
ε (inr (a , c)) = refl
g-order-preserving : is-order-preserving _ _ g
g-order-preserving (inl (a , b)) (inl (a' , b')) (inl p) = inl p
g-order-preserving (inl (a , b)) (inl (a' , .b)) (inr (refl , q)) =
inr (refl , q)
g-order-preserving (inl (a , b)) (inr (a' , c')) p = inl ⋆
g-order-preserving (inr (a , c)) (inr (a' , c')) (inl p) = inl p
g-order-preserving (inr (a , c)) (inr (a' , c')) (inr (refl , q)) =
inr (refl , q)
\end{code}
The following characterizes the initial segments of a product and is rather
useful when working with simulations between products.
\begin{code}
×ₒ-↓ : (α β : Ordinal 𝓤)
→ {a : ⟨ α ⟩} {b : ⟨ β ⟩}
→ (α ×ₒ β) ↓ (a , b) = (α ×ₒ (β ↓ b)) +ₒ (α ↓ a)
×ₒ-↓ α β {a} {b} = eqtoidₒ (ua _) fe' _ _ (f , f-order-preserving ,
f-is-equiv , g-order-preserving)
where
f : ⟨ (α ×ₒ β) ↓ (a , b) ⟩ → ⟨ (α ×ₒ (β ↓ b)) +ₒ (α ↓ a) ⟩
f ((x , y) , inl p) = inl (x , (y , p))
f ((x , y) , inr (r , q)) = inr (x , q)
g : ⟨ (α ×ₒ (β ↓ b)) +ₒ (α ↓ a) ⟩ → ⟨ (α ×ₒ β) ↓ (a , b) ⟩
g (inl (x , y , p)) = (x , y) , inl p
g (inr (x , q)) = (x , b) , inr (refl , q)
f-order-preserving : is-order-preserving _ _ f
f-order-preserving ((x , y) , inl p) ((x' , y') , inl p') (inl l) = inl l
f-order-preserving ((x , y) , inl p) ((x' , _) , inl p') (inr (refl , l)) =
inr ((ap (y ,_) (Prop-valuedness β _ _ p p')) , l)
f-order-preserving ((x , y) , inl p) ((x' , y') , inr (r' , q')) l = ⋆
f-order-preserving ((x , y) , inr (refl , q)) ((x' , y') , inl p') (inl l) =
𝟘-elim (irrefl β y (Transitivity β _ _ _ l p'))
f-order-preserving ((x , y) , inr (refl , q))
((x' , _) , inl p') (inr (refl , l)) = 𝟘-elim
(irrefl β y p')
f-order-preserving ((x , y) , inr (refl , q))
((x' , _) , inr (refl , q')) (inl l) = 𝟘-elim
(irrefl β y l)
f-order-preserving ((x , y) , inr (refl , q))
((x' , _) , inr (refl , q')) (inr (_ , l)) = l
f-is-equiv : is-equiv f
f-is-equiv = qinvs-are-equivs f (g , η , ε)
where
η : g ∘ f ∼ id
η ((x , y) , inl p) = refl
η ((x , y) , inr (refl , q)) = refl
ε : f ∘ g ∼ id
ε (inl (x , y)) = refl
ε (inr x) = refl
g-order-preserving : is-order-preserving _ _ g
g-order-preserving (inl (x , y , p)) (inl (x' , y' , p')) (inl l) = inl l
g-order-preserving (inl (x , y , p)) (inl (x' , y' , p')) (inr (refl , l)) =
inr (refl , l)
g-order-preserving (inl (x , y , p)) (inr (x' , q')) _ = inl p
g-order-preserving (inr (x , q)) (inr (x' , q')) l = inr (refl , l)
\end{code}
We now prove several useful facts about (bounded) simulations between products.
\begin{code}
×ₒ-increasing-on-right : (α β γ : Ordinal 𝓤)
→ 𝟘ₒ ⊲ α
→ β ⊲ γ
→ (α ×ₒ β) ⊲ (α ×ₒ γ)
×ₒ-increasing-on-right α β γ (a , p) (c , q) = (a , c) , I
where
I = α ×ₒ β =⟨ 𝟘ₒ-right-neutral (α ×ₒ β) ⁻¹ ⟩
(α ×ₒ β) +ₒ 𝟘ₒ =⟨ ap₂ (λ -₁ -₂ → (α ×ₒ -₁) +ₒ -₂) q p ⟩
(α ×ₒ (γ ↓ c)) +ₒ (α ↓ a) =⟨ ×ₒ-↓ α γ ⁻¹ ⟩
(α ×ₒ γ) ↓ (a , c) ∎
×ₒ-right-monotone-⊴ : (α : Ordinal 𝓤) (β : Ordinal 𝓥) (γ : Ordinal 𝓦)
→ β ⊴ γ
→ (α ×ₒ β) ⊴ (α ×ₒ γ)
×ₒ-right-monotone-⊴ α β γ (g , sim-g) = f , f-initial-segment ,
f-order-preserving
where
f : ⟨ α ×ₒ β ⟩ → ⟨ α ×ₒ γ ⟩
f (a , b) = a , g b
f-initial-segment : is-initial-segment (α ×ₒ β) (α ×ₒ γ) f
f-initial-segment (a , b) (a' , c') (inl l) = (a' , b') , inl k , ap (a' ,_) q
where
I : Σ b' ꞉ ⟨ β ⟩ , b' ≺⟨ β ⟩ b × (g b' = c')
I = simulations-are-initial-segments β γ g sim-g b c' l
b' = pr₁ I
k = pr₁ (pr₂ I)
q = pr₂ (pr₂ I)
f-initial-segment (a , b) (a' , c') (inr (refl , q)) =
(a' , b) , inr (refl , q) , refl
f-order-preserving : is-order-preserving (α ×ₒ β) (α ×ₒ γ) f
f-order-preserving (a , b) (a' , b') (inl p) =
inl (simulations-are-order-preserving β γ g sim-g b b' p)
f-order-preserving (a , b) (a' , b') (inr (refl , q)) = inr (refl , q)
×ₒ-≼-left : (α : Ordinal 𝓤) (β : Ordinal 𝓥)
{a a' : ⟨ α ⟩} {b : ⟨ β ⟩}
→ a ≼⟨ α ⟩ a'
→ (a , b) ≼⟨ α ×ₒ β ⟩ (a' , b)
×ₒ-≼-left α β p (a₀ , b₀) (inl r) = inl r
×ₒ-≼-left α β p (a₀ , b₀) (inr (eq , r)) = inr (eq , p a₀ r)
\end{code}
Multiplication satisfies the expected recursive equations (which
classically define ordinal multiplication): zero is fixed by multiplication
(this is ×ₒ-𝟘ₒ-right above), multiplication for successors is repeated addition
and multiplication preserves suprema.
\begin{code}
×ₒ-successor : (α β : Ordinal 𝓤) → α ×ₒ (β +ₒ 𝟙ₒ) = (α ×ₒ β) +ₒ α
×ₒ-successor α β =
α ×ₒ (β +ₒ 𝟙ₒ) =⟨ ×ₒ-distributes-+ₒ-right α β 𝟙ₒ ⟩
((α ×ₒ β) +ₒ (α ×ₒ 𝟙ₒ)) =⟨ ap ((α ×ₒ β) +ₒ_) (𝟙ₒ-right-neutral-×ₒ α) ⟩
(α ×ₒ β) +ₒ α ∎
open import UF.PropTrunc
open import UF.Size
module _ (pt : propositional-truncations-exist)
(sr : Set-Replacement pt)
where
open import Ordinals.OrdinalOfOrdinalsSuprema ua
open suprema pt sr
open PropositionalTruncation pt
×ₒ-preserves-suprema : (α : Ordinal 𝓤) {I : 𝓤 ̇ } (β : I → Ordinal 𝓤)
→ α ×ₒ sup β = sup (λ i → α ×ₒ β i)
×ₒ-preserves-suprema {𝓤} α {I} β = ⊴-antisym (α ×ₒ sup β) (sup (λ i → α ×ₒ β i)) ⦅1⦆ ⦅2⦆
where
⦅2⦆ : sup (λ i → α ×ₒ β i) ⊴ (α ×ₒ sup β)
⦅2⦆ = sup-is-lower-bound-of-upper-bounds (λ i → α ×ₒ β i) (α ×ₒ sup β)
(λ i → ×ₒ-right-monotone-⊴ α (β i) (sup β) (sup-is-upper-bound β i))
⦅1⦆ : (α ×ₒ sup β) ⊴ sup (λ i → α ×ₒ β i)
⦅1⦆ = ≼-gives-⊴ (α ×ₒ sup β) (sup (λ i → α ×ₒ β i)) ⦅1⦆-I
where
⦅1⦆-I : (γ : Ordinal 𝓤) → γ ⊲ (α ×ₒ sup β) → γ ⊲ sup (λ i → α ×ₒ β i)
⦅1⦆-I _ ((a , y) , refl) = ⦅1⦆-III
where
⦅1⦆-II : (Σ i ꞉ I , Σ b ꞉ ⟨ β i ⟩ , sup β ↓ y = (β i) ↓ b)
→ ((α ×ₒ sup β) ↓ (a , y)) ⊲ sup (λ j → α ×ₒ β j)
⦅1⦆-II (i , b , e) = σ (a , b) , eq
where
σ : ⟨ α ×ₒ β i ⟩ → ⟨ sup (λ j → α ×ₒ β j) ⟩
σ = [ α ×ₒ β i , sup (λ j → α ×ₒ β j) ]⟨ sup-is-upper-bound _ i ⟩
eq = (α ×ₒ sup β) ↓ (a , y) =⟨ ×ₒ-↓ α (sup β) ⟩
(α ×ₒ (sup β ↓ y)) +ₒ (α ↓ a) =⟨ eq₁ ⟩
(α ×ₒ (β i ↓ b)) +ₒ (α ↓ a) =⟨ ×ₒ-↓ α (β i) ⁻¹ ⟩
(α ×ₒ β i) ↓ (a , b) =⟨ eq₂ ⟩
sup (λ j → α ×ₒ β j) ↓ σ (a , b) ∎
where
eq₁ = ap (λ - → ((α ×ₒ -) +ₒ (α ↓ a))) e
eq₂ = (initial-segment-of-sup-at-component
(λ j → α ×ₒ β j) i (a , b)) ⁻¹
⦅1⦆-III : ((α ×ₒ sup β) ↓ (a , y)) ⊲ sup (λ i → α ×ₒ β i)
⦅1⦆-III = ∥∥-rec (⊲-is-prop-valued _ _) ⦅1⦆-II
(initial-segment-of-sup-is-initial-segment-of-some-component
β y)
\end{code}
The equations for successor and suprema uniquely specify the multiplication
operation even though they are not constructively sufficient to define it.
\begin{code}
private
successor-equation : (Ordinal 𝓤 → Ordinal 𝓤 → Ordinal 𝓤) → 𝓤 ⁺ ̇
successor-equation {𝓤} _⊗_ =
(α β : Ordinal 𝓤) → α ⊗ (β +ₒ 𝟙ₒ) = (α ⊗ β) +ₒ α
suprema-equation : (Ordinal 𝓤 → Ordinal 𝓤 → Ordinal 𝓤) → 𝓤 ⁺ ̇
suprema-equation {𝓤} _⊗_ =
(α : Ordinal 𝓤) (I : 𝓤 ̇ ) (β : I → Ordinal 𝓤)
→ α ⊗ (sup β) = sup (λ i → α ⊗ β i)
recursive-equation : (Ordinal 𝓤 → Ordinal 𝓤 → Ordinal 𝓤) → 𝓤 ⁺ ̇
recursive-equation {𝓤} _⊗_ =
(α β : Ordinal 𝓤) → α ⊗ β = sup (λ b → (α ⊗ (β ↓ b)) +ₒ α)
successor-and-suprema-equations-give-recursive-equation
: (_⊗_ : Ordinal 𝓤 → Ordinal 𝓤 → Ordinal 𝓤)
→ successor-equation _⊗_
→ suprema-equation _⊗_
→ recursive-equation _⊗_
successor-and-suprema-equations-give-recursive-equation
_⊗_ ⊗-succ ⊗-sup α β = α ⊗ β =⟨ I ⟩
(α ⊗ sup (λ b → (β ↓ b) +ₒ 𝟙ₒ)) =⟨ II ⟩
sup (λ b → α ⊗ ((β ↓ b) +ₒ 𝟙ₒ)) =⟨ III ⟩
sup (λ b → (α ⊗ (β ↓ b)) +ₒ α) ∎
where
I = ap (α ⊗_) (supremum-of-successors-of-initial-segments pt sr β)
II = ⊗-sup α ⟨ β ⟩ (λ b → (β ↓ b) +ₒ 𝟙ₒ)
III = ap sup (dfunext fe' (λ b → ⊗-succ α (β ↓ b)))
×ₒ-recursive-equation : recursive-equation {𝓤} _×ₒ_
×ₒ-recursive-equation =
successor-and-suprema-equations-give-recursive-equation
_×ₒ_ ×ₒ-successor (λ α _ β → ×ₒ-preserves-suprema α β)
×ₒ-is-uniquely-specified'
: (_⊗_ : Ordinal 𝓤 → Ordinal 𝓤 → Ordinal 𝓤)
→ recursive-equation _⊗_
→ (α β : Ordinal 𝓤) → α ⊗ β = α ×ₒ β
×ₒ-is-uniquely-specified' {𝓤} _⊗_ ⊗-rec α =
transfinite-induction-on-OO (λ - → (α ⊗ -) = (α ×ₒ -)) I
where
I : (β : Ordinal 𝓤)
→ ((b : ⟨ β ⟩) → (α ⊗ (β ↓ b)) = (α ×ₒ (β ↓ b)))
→ (α ⊗ β) = (α ×ₒ β)
I β IH = α ⊗ β =⟨ II ⟩
sup (λ b → (α ⊗ (β ↓ b)) +ₒ α) =⟨ III ⟩
sup (λ b → (α ×ₒ (β ↓ b)) +ₒ α) =⟨ IV ⟩
α ×ₒ β ∎
where
II = ⊗-rec α β
III = ap sup (dfunext fe' (λ b → ap (_+ₒ α) (IH b)))
IV = ×ₒ-recursive-equation α β ⁻¹
×ₒ-is-uniquely-specified
: ∃! _⊗_ ꞉ (Ordinal 𝓤 → Ordinal 𝓤 → Ordinal 𝓤) ,
(successor-equation _⊗_) × (suprema-equation _⊗_)
×ₒ-is-uniquely-specified {𝓤} =
(_×ₒ_ , (×ₒ-successor , (λ α _ β → ×ₒ-preserves-suprema α β))) ,
(λ (_⊗_ , ⊗-succ , ⊗-sup) →
to-subtype-=
(λ F → ×-is-prop (Π₂-is-prop fe'
(λ _ _ → underlying-type-is-set fe (OO 𝓤)))
(Π₃-is-prop fe'
(λ _ _ _ → underlying-type-is-set fe (OO 𝓤))))
(dfunext fe'
(λ α → dfunext fe'
(λ β →
(×ₒ-is-uniquely-specified' _⊗_
(successor-and-suprema-equations-give-recursive-equation
_⊗_ ⊗-succ ⊗-sup)
α β) ⁻¹))))
\end{code}
The above should be contrasted to the situation for addition where we do not
know how to prove such a result since only *inhabited* suprema are preserved by
addition.
Multiplication being monotone in the left argument is a constructive taboo.
Addition 22 November 2024: monotonicity in the left argument is
equivalent to Excluded Middle.
\begin{code}
×ₒ-minimal : (α : Ordinal 𝓤) (β : Ordinal 𝓥) (a₀ : ⟨ α ⟩) (b₀ : ⟨ β ⟩)
→ is-least α a₀ → is-least β b₀ → is-minimal (α ×ₒ β) (a₀ , b₀)
×ₒ-minimal α β a₀ b₀ a₀-least b₀-least (a , b) (inl l)
= irrefl β b (b₀-least b b l)
×ₒ-minimal α β a₀ b₀ a₀-least b₀-least (a , b) (inr (refl , l))
= irrefl α a (a₀-least a a l)
×ₒ-least : (α : Ordinal 𝓤) (β : Ordinal 𝓥) (a₀ : ⟨ α ⟩) (b₀ : ⟨ β ⟩)
→ is-least α a₀ → is-least β b₀ → is-least (α ×ₒ β) (a₀ , b₀)
×ₒ-least α β a₀ b₀ a₀-least b₀-least =
minimal-is-least (α ×ₒ β) (a₀ , b₀) (×ₒ-minimal α β a₀ b₀ a₀-least b₀-least)
×ₒ-left-monotonicity-implies-EM
: ((α β : Ordinal 𝓤) (γ : Ordinal 𝓥) → α ⊴ β → α ×ₒ γ ⊴ β ×ₒ γ)
→ EM 𝓤
×ₒ-left-monotonicity-implies-EM hyp P isprop-P = III (f (⋆ , inr ⋆)) refl
where
α = 𝟙ₒ
Pₒ = prop-ordinal P isprop-P
β = 𝟙ₒ +ₒ Pₒ
γ = 𝟚ₒ
I : α ⊴ β
I = ≼-gives-⊴ α β
(transport
(_≼ β)
(𝟘ₒ-right-neutral 𝟙ₒ)
(+ₒ-right-monotone 𝟙ₒ 𝟘ₒ Pₒ
(𝟘ₒ-least Pₒ)))
II : (α ×ₒ γ) ⊴ (β ×ₒ γ)
II = hyp α β γ I
f = pr₁ II
f-sim = pr₂ II
f-preserves-least : f (⋆ , inl ⋆) = (inl ⋆ , inl ⋆)
f-preserves-least = simulations-preserve-least (α ×ₒ γ) (β ×ₒ γ)
(⋆ , inl ⋆)
(inl ⋆ , inl ⋆)
f f-sim
(×ₒ-least α γ ⋆ (inl ⋆)
⋆-least
(left-preserves-least 𝟙ₒ 𝟙ₒ ⋆ ⋆-least))
(×ₒ-least β γ (inl ⋆) (inl ⋆)
(left-preserves-least 𝟙ₒ Pₒ ⋆ ⋆-least)
(left-preserves-least 𝟙ₒ 𝟙ₒ ⋆ ⋆-least))
where
⋆-least : is-least (𝟙ₒ {𝓤}) ⋆
⋆-least ⋆ ⋆ = 𝟘-elim
III : (x : ⟨ β ×ₒ γ ⟩) → f (⋆ , inr ⋆) = x → P + ¬ P
III (inl ⋆ , inl ⋆) r = 𝟘-elim (+disjoint' III₂)
where
III₁ = f (⋆ , inr ⋆) =⟨ r ⟩
(inl ⋆ , inl ⋆) =⟨ f-preserves-least ⁻¹ ⟩
f (⋆ , inl ⋆) ∎
III₂ : inr ⋆ = inl ⋆
III₂ = ap pr₂ (simulations-are-lc _ _ f f-sim III₁)
III (inl ⋆ , inr ⋆) r = inr (λ p → 𝟘-elim (+disjoint (III₆ p)))
where
III₃ : (p : P)
→ Σ x ꞉ ⟨ 𝟙ₒ ×ₒ 𝟚ₒ ⟩ ,
(x ≺⟨ 𝟙ₒ ×ₒ 𝟚ₒ ⟩ (⋆ , inr ⋆)) × (f x = (inr p , inl ⋆))
III₃ p = simulations-are-initial-segments (α ×ₒ γ) (β ×ₒ γ) f f-sim
(⋆ , inr ⋆) (inr p , inl ⋆)
(transport⁻¹ (λ - → (inr p , inl ⋆) ≺⟨ β ×ₒ γ ⟩ - ) r (inl ⋆))
III₄ : (p : P)
→ Σ x ꞉ ⟨ 𝟙ₒ ×ₒ 𝟚ₒ ⟩ ,
(x ≺⟨ 𝟙ₒ ×ₒ 𝟚ₒ ⟩ (⋆ , inr ⋆)) × (f x = (inr p , inl ⋆))
→ f (⋆ , inl ⋆) = (inr p , inl ⋆)
III₄ p ((⋆ , inl ⋆) , l , q) = q
III₄ p ((⋆ , inr ⋆) , l , q) = 𝟘-elim (irrefl (𝟙ₒ ×ₒ 𝟚ₒ) (⋆ , inr ⋆) l)
III₅ : (p : P) → (inl ⋆ , inl ⋆) = (inr p , inl ⋆)
III₅ p = (inl ⋆ , inl ⋆) =⟨ f-preserves-least ⁻¹ ⟩
f (⋆ , inl ⋆) =⟨ III₄ p (III₃ p) ⟩
(inr p , inl ⋆) ∎
III₆ : (p : P) → inl ⋆ = inr p
III₆ p = ap pr₁ (III₅ p)
III (inr p , c) r = inl p
EM-implies-×ₒ-left-monotonicity
: EM (𝓤 ⊔ 𝓥)
→ (α β : Ordinal 𝓤) (γ : Ordinal 𝓥) → α ⊴ β → (α ×ₒ γ) ⊴ (β ×ₒ γ)
EM-implies-×ₒ-left-monotonicity em α β γ (g , g-sim)
= ≼-gives-⊴ (α ×ₒ γ) (β ×ₒ γ)
(EM-implies-order-preserving-gives-≼ em (α ×ₒ γ)
(β ×ₒ γ)
(f , f-order-preserving))
where
f : ⟨ α ×ₒ γ ⟩ → ⟨ β ×ₒ γ ⟩
f (a , c) = (g a , c)
f-order-preserving : is-order-preserving (α ×ₒ γ) (β ×ₒ γ) f
f-order-preserving (a , c) (a' , c') (inl l) = inl l
f-order-preserving (a , c) (a' , c) (inr (refl , l))
= inr (refl , simulations-are-order-preserving α β g g-sim a a' l)
EM-implies-induced-⊴-on-×ₒ : EM 𝓤
→ (α β γ δ : Ordinal 𝓤)
→ α ⊴ γ → β ⊴ δ → (α ×ₒ β) ⊴ (γ ×ₒ δ)
EM-implies-induced-⊴-on-×ₒ em α β γ δ 𝕗 𝕘 =
⊴-trans (α ×ₒ β) (α ×ₒ δ) (γ ×ₒ δ)
(×ₒ-right-monotone-⊴ α β δ 𝕘)
(EM-implies-×ₒ-left-monotonicity em α γ δ 𝕗)
\end{code}
To prove that multiplication is left cancellable, we require the following
technical lemma: if α > 𝟘, then every simulation from α ×ₒ β to α ×ₒ γ + α ↓ a₁
firstly never hits the second summand, and secondly, in the first component, it
decomposes as the identity on the first component and a function β → γ on the
second component, viz. one that is independent of the first component. The
inspiration for this lemma is the lemma simulation-product-decomposition below,
which only deals with simulations f : α ×ₒ β ⊴ α ×ₒ γ (ie, with α ↓ a₁ = 𝟘ₒ in
the context of the current lemma). However the more general statement seems to
be necessary for proving left cancellability with respect to ⊴, rather than
just with respect to =.
TODO. Give better names and respect the 80 char. limit in the proof below.
\begin{code}
simulation-product-decomposition-generalised
: (α β γ : Ordinal 𝓤)
→ 𝟘ₒ ⊲ α
→ (a₁ : ⟨ α ⟩)
((f , _) : α ×ₒ β ⊴ α ×ₒ γ +ₒ (α ↓ a₁))
→ Σ g ꞉ (⟨ β ⟩ → ⟨ γ ⟩) , ((a : ⟨ α ⟩) (b : ⟨ β ⟩) → f (a , b) = inl (a , g b))
simulation-product-decomposition-generalised {𝓤 = 𝓤} α β γ (a₀ , a₀-least) a₁ 𝕗 =
(g , g-satisfies-equation)
where
f = [ α ×ₒ β , α ×ₒ γ +ₒ (α ↓ a₁) ]⟨ 𝕗 ⟩
P : Ordinal 𝓤 → (𝓤 ⁺) ̇
P β = (a₁ : ⟨ α ⟩) (γ : Ordinal 𝓤)
((f , _) : (α ×ₒ β) ⊴ ((α ×ₒ γ) +ₒ (α ↓ a₁)))
→ (b : ⟨ β ⟩) → Σ c ꞉ ⟨ γ ⟩ , ((a : ⟨ α ⟩) → f (a , b) = inl (a , c))
P₀ : Ordinal 𝓤 → (𝓤 ⁺) ̇
P₀ β = (a₁ : ⟨ α ⟩) (γ : Ordinal 𝓤)
((f , _) : (α ×ₒ β) ⊴ ((α ×ₒ γ) +ₒ (α ↓ a₁)))
(b : ⟨ β ⟩) (x : ⟨ (α ×ₒ γ) +ₒ (α ↓ a₁) ⟩) → f (a₀ , b) = x
→ Σ c ꞉ ⟨ γ ⟩ , f (a₀ , b) = inl (a₀ , c)
g' : (β : Ordinal 𝓤) (ih : (b : ⟨ β ⟩) → P (β ↓ b)) → P₀ β
g' β ih a₁ γ 𝕗@(f , _) b (inl (a' , c)) e = c , (e ∙ ap (λ - → inl (- , c)) I)
where
I : a' = a₀
I = Extensionality α a' a₀ (λ x l → 𝟘-elim (II x l))
(λ x l → 𝟘-elim (transport⁻¹ ⟨_⟩ a₀-least (x , l)))
where
II : (x : ⟨ α ⟩) → ¬ (x ≺⟨ α ⟩ a')
II x l = +disjoint V
where
III = α ×ₒ (β ↓ b) =⟨ III₁ ⟩
α ×ₒ (β ↓ b) +ₒ (α ↓ a₀) =⟨ ×ₒ-↓ α β ⁻¹ ⟩
α ×ₒ β ↓ (a₀ , b) =⟨ III₂ ⟩
α ×ₒ γ +ₒ (α ↓ a₁) ↓ f (a₀ , b) =⟨ III₃ ⟩
α ×ₒ γ +ₒ (α ↓ a₁) ↓ inl (a' , c) =⟨ +ₒ-↓-left (a' , c) ⁻¹ ⟩
α ×ₒ γ ↓ (a' , c) =⟨ ×ₒ-↓ α γ ⟩
α ×ₒ (γ ↓ c) +ₒ (α ↓ a') ∎
where
III₁ = 𝟘ₒ-right-neutral (α ×ₒ (β ↓ b)) ⁻¹ ∙ ap (α ×ₒ (β ↓ b) +ₒ_) a₀-least
III₂ = simulations-preserve-↓ _ _ 𝕗 (a₀ , b)
III₃ = ap (((α ×ₒ γ) +ₒ (α ↓ a₁)) ↓_) e
𝕗' : α ×ₒ (β ↓ b) ⊴ α ×ₒ (γ ↓ c) +ₒ (α ↓ a')
𝕗' = ≃ₒ-to-⊴ _ _ (idtoeqₒ _ _ III)
f' = [ α ×ₒ (β ↓ b) , α ×ₒ (γ ↓ c) +ₒ (α ↓ a') ]⟨ 𝕗' ⟩
𝕗'⁻¹ : α ×ₒ (γ ↓ c) +ₒ (α ↓ a') ⊴ α ×ₒ (β ↓ b)
𝕗'⁻¹ = ≃ₒ-to-⊴ _ _ (idtoeqₒ _ _ (III ⁻¹))
f'⁻¹ = [ α ×ₒ (γ ↓ c) +ₒ (α ↓ a') , α ×ₒ (β ↓ b) ]⟨ 𝕗'⁻¹ ⟩
IV : (α β : Ordinal 𝓤) → (eq : α = β) (x : ⟨ β ⟩)
→ [ α , β ]⟨ ≃ₒ-to-⊴ α β (idtoeqₒ α β eq) ⟩
([ β , α ]⟨ ≃ₒ-to-⊴ β α (idtoeqₒ β α (eq ⁻¹)) ⟩ x) = x
IV α β refl x = refl
x' : ⟨ α ×ₒ (β ↓ b) ⟩
x' = f'⁻¹ (inr (x , l))
xₐ = pr₁ x'
x₂ = pr₂ x'
x'' = pr₁ (ih b a' (γ ↓ c) 𝕗' x₂)
V = inl (xₐ , x'') =⟨ pr₂ (ih b a' (γ ↓ c) 𝕗' x₂) xₐ ⁻¹ ⟩
f' (f'⁻¹ (inr (x , l))) =⟨ IV _ _ III (inr (x , l)) ⟩
inr (x , l) ∎
g' β _ a₁ γ 𝕗@(f , f-sim) b (inr (x , p)) e = 𝟘-elim V
where
I = α ×ₒ (β ↓ b) =⟨ I₁ ⟩
α ×ₒ (β ↓ b) +ₒ (α ↓ a₀) =⟨ ×ₒ-↓ α β ⁻¹ ⟩
α ×ₒ β ↓ (a₀ , b) =⟨ I₂ ⟩
α ×ₒ γ +ₒ (α ↓ a₁) ↓ f (a₀ , b) =⟨ ap (((α ×ₒ γ) +ₒ (α ↓ a₁)) ↓_) e ⟩
α ×ₒ γ +ₒ (α ↓ a₁) ↓ inr (x , p) =⟨ +ₒ-↓-right (x , p) ⁻¹ ⟩
α ×ₒ γ +ₒ (α ↓ a₁ ↓ (x , p)) =⟨ I₃ ⟩
α ×ₒ γ +ₒ (α ↓ x) ∎
where
I₁ = 𝟘ₒ-right-neutral (α ×ₒ (β ↓ b)) ⁻¹ ∙ ap (α ×ₒ (β ↓ b) +ₒ_) a₀-least
I₂ = simulations-preserve-↓ _ _ 𝕗 (a₀ , b)
I₃ = ap ((α ×ₒ γ) +ₒ_) (iterated-↓ α a₁ x p)
II = α ×ₒ γ +ₒ ((α ↓ x) +ₒ α) =⟨ +ₒ-assoc (α ×ₒ γ) (α ↓ x) α ⁻¹ ⟩
α ×ₒ γ +ₒ (α ↓ x) +ₒ α =⟨ ap (_+ₒ α) I ⁻¹ ⟩
α ×ₒ (β ↓ b) +ₒ α =⟨ ×ₒ-successor α (β ↓ b) ⁻¹ ⟩
α ×ₒ ((β ↓ b) +ₒ 𝟙ₒ) ∎
III : α ×ₒ γ +ₒ ((α ↓ x) +ₒ α) ⊴ α ×ₒ γ +ₒ (α ↓ a₁)
III = transport⁻¹ (λ - → - ⊴ α ×ₒ γ +ₒ (α ↓ a₁)) II
(⊴-trans (α ×ₒ ((β ↓ b) +ₒ 𝟙ₒ)) (α ×ₒ β) (α ×ₒ γ +ₒ (α ↓ a₁))
(×ₒ-right-monotone-⊴ α ((β ↓ b) +ₒ 𝟙ₒ) β
(upper-bound-of-successors-of-initial-segments β b))
𝕗)
IV : (α ↓ x) +ₒ α ⊴ α ↓ a₁
IV = ≼-gives-⊴ _ _
(+ₒ-left-reflects-≼ (α ×ₒ γ) ((α ↓ x) +ₒ α) (α ↓ a₁) (⊴-gives-≼ _ _ III))
h : ⟨ α ⟩ → ⟨ α ↓ a₁ ⟩
h a = [ (α ↓ x) +ₒ α , α ↓ a₁ ]⟨ IV ⟩ (inr a)
h-order-preserving : is-order-preserving α (α ↓ a₁) h
h-order-preserving a a' l =
simulations-are-order-preserving
((α ↓ x) +ₒ α)
(α ↓ a₁)
[ (α ↓ x) +ₒ α , α ↓ a₁ ]⟨ IV ⟩
([ (α ↓ x) +ₒ α , α ↓ a₁ ]⟨ IV ⟩-is-simulation)
(inr a) (inr a') l
V : 𝟘
V = order-preserving-gives-not-⊲ α (α ↓ a₁) (h , h-order-preserving) (a₁ , refl)
g'' : (β : Ordinal 𝓤) (ih : (b : ⟨ β ⟩) → P (β ↓ b)) → P β
g'' β ih a₁ γ 𝕗@(f , f-sim) b = c , c-satisfies-equation
where
c = pr₁ (g' β ih a₁ γ 𝕗 b (f (a₀ , b)) refl)
c-spec : f (a₀ , b) = inl (a₀ , c)
c-spec = pr₂ (g' β ih a₁ γ 𝕗 b (f (a₀ , b)) refl)
c-satisfies-equation : (a : ⟨ α ⟩) → f (a , b) = inl (a , c)
c-satisfies-equation a = ↓-lc (α ×ₒ γ +ₒ (α ↓ a₁)) (f (a , b)) (inl (a , c)) II
where
I = α ×ₒ (β ↓ b) =⟨ I₁ ⟩
α ×ₒ (β ↓ b) +ₒ (α ↓ a₀) =⟨ ×ₒ-↓ α β ⁻¹ ⟩
α ×ₒ β ↓ (a₀ , b) =⟨ I₂ ⟩
α ×ₒ γ +ₒ (α ↓ a₁) ↓ f (a₀ , b) =⟨ I₃ ⟩
α ×ₒ γ +ₒ (α ↓ a₁) ↓ inl (a₀ , c) =⟨ +ₒ-↓-left (a₀ , c) ⁻¹ ⟩
α ×ₒ γ ↓ (a₀ , c) =⟨ ×ₒ-↓ α γ ⟩
α ×ₒ (γ ↓ c) +ₒ (α ↓ a₀) =⟨ I₄ ⟩
α ×ₒ (γ ↓ c) ∎
where
I₁ = 𝟘ₒ-right-neutral (α ×ₒ (β ↓ b)) ⁻¹ ∙ ap ((α ×ₒ (β ↓ b)) +ₒ_) a₀-least
I₂ = simulations-preserve-↓ _ _ 𝕗 (a₀ , b)
I₃ = ap (((α ×ₒ γ) +ₒ (α ↓ a₁)) ↓_) c-spec
I₄ = ap ((α ×ₒ (γ ↓ c)) +ₒ_) a₀-least ⁻¹ ∙ 𝟘ₒ-right-neutral (α ×ₒ (γ ↓ c))
II = α ×ₒ γ +ₒ (α ↓ a₁) ↓ f (a , b) =⟨ II₁ ⟩
α ×ₒ β ↓ (a , b) =⟨ ×ₒ-↓ α β ⟩
α ×ₒ (β ↓ b) +ₒ (α ↓ a) =⟨ ap (_+ₒ (α ↓ a)) I ⟩
α ×ₒ (γ ↓ c) +ₒ (α ↓ a) =⟨ ×ₒ-↓ α γ ⁻¹ ⟩
α ×ₒ γ ↓ (a , c) =⟨ +ₒ-↓-left (a , c) ⟩
α ×ₒ γ +ₒ (α ↓ a₁) ↓ inl (a , c) ∎
where
II₁ = simulations-preserve-↓ _ _ 𝕗 (a , b) ⁻¹
g''' : (b : ⟨ β ⟩) → Σ c ꞉ ⟨ γ ⟩ , ((a : ⟨ α ⟩) → f (a , b) = inl (a , c))
g''' b = transfinite-induction-on-OO P g'' β a₁ γ 𝕗 b
g : ⟨ β ⟩ → ⟨ γ ⟩
g b = pr₁ (g''' b)
g-satisfies-equation : (a : ⟨ α ⟩) (b : ⟨ β ⟩) → f (a , b) = inl (a , g b)
g-satisfies-equation a b = pr₂ (g''' b) a
×ₒ-left-cancellable-⊴-generalised
: (α β γ : Ordinal 𝓤) (a₁ : ⟨ α ⟩)
→ 𝟘ₒ ⊲ α
→ α ×ₒ β ⊴ (α ×ₒ γ) +ₒ (α ↓ a₁)
→ β ⊴ γ
×ₒ-left-cancellable-⊴-generalised α β γ a₁ p@(a₀ , a₀-least) 𝕗 =
(g , g-is-initial-segment , g-is-order-preserving)
where
f = [ α ×ₒ β , (α ×ₒ γ) +ₒ (α ↓ a₁) ]⟨ 𝕗 ⟩
f-sim = [ α ×ₒ β , (α ×ₒ γ) +ₒ (α ↓ a₁) ]⟨ 𝕗 ⟩-is-simulation
g : ⟨ β ⟩ → ⟨ γ ⟩
g = pr₁ (simulation-product-decomposition-generalised α β γ p a₁ 𝕗)
g-property : (a : ⟨ α ⟩)(b : ⟨ β ⟩) → f (a , b) = inl (a , g b)
g-property = pr₂ (simulation-product-decomposition-generalised α β γ p a₁ 𝕗)
g-is-initial-segment : is-initial-segment β γ g
g-is-initial-segment b c l = b' , k' k , e'
where
l' : inl (a₀ , c) ≺⟨ ((α ×ₒ γ) +ₒ (α ↓ a₁)) ⟩ inl (a₀ , g b)
l' = inl l
l'' : inl (a₀ , c) ≺⟨ ((α ×ₒ γ) +ₒ (α ↓ a₁)) ⟩ f (a₀ , b)
l'' = transport⁻¹ (λ - → inl (a₀ , c) ≺⟨ ((α ×ₒ γ) +ₒ (α ↓ a₁))⟩ -)
(g-property a₀ b)
l'
x : Σ y ꞉ ⟨ α ×ₒ β ⟩ , (y ≺⟨ α ×ₒ β ⟩ (a₀ , b)) × (f y = (inl (a₀ , c)))
x = simulations-are-initial-segments _ _ f f-sim (a₀ , b) (inl (a₀ , c)) l''
a' = pr₁ (pr₁ x)
b' = pr₂ (pr₁ x)
k = pr₁ (pr₂ x)
e = pr₂ (pr₂ x)
k' : (a' , b') ≺⟨ α ×ₒ β ⟩ (a₀ , b) → b' ≺⟨ β ⟩ b
k' (inl p) = p
k' (inr (r , q)) = 𝟘-elim (transport⁻¹ ⟨_⟩ a₀-least (a' , q))
e' : g b' = c
e' = ap pr₂ (inl-lc (g-property a' b' ⁻¹ ∙ e))
g-is-order-preserving : is-order-preserving β γ g
g-is-order-preserving b b' l = III II
where
I : f (a₀ , b) ≺⟨ ((α ×ₒ γ) +ₒ (α ↓ a₁)) ⟩ f (a₀ , b')
I = simulations-are-order-preserving _ _ f f-sim (a₀ , b) (a₀ , b') (inl l)
II : inl (a₀ , g b) ≺⟨ ((α ×ₒ γ) +ₒ (α ↓ a₁)) ⟩ inl (a₀ , g b')
II = transport₂ (λ x y → x ≺⟨ ((α ×ₒ γ) +ₒ (α ↓ a₁))⟩ y)
(g-property a₀ b)
(g-property a₀ b')
I
III : (a₀ , g b) ≺⟨ (α ×ₒ γ) ⟩ (a₀ , g b') → g b ≺⟨ γ ⟩ g b'
III (inl p) = p
III (inr (r , q)) = 𝟘-elim (irrefl α a₀ q)
×ₒ-left-cancellable-⊴ : (α β γ : Ordinal 𝓤)
→ 𝟘ₒ ⊲ α
→ (α ×ₒ β) ⊴ (α ×ₒ γ)
→ β ⊴ γ
×ₒ-left-cancellable-⊴ α β γ p@(a₀ , a₀-least) 𝕗 =
×ₒ-left-cancellable-⊴-generalised α β γ a₀ p
(transport (λ - → (α ×ₒ β) ⊴ -)
(𝟘ₒ-right-neutral (α ×ₒ γ) ⁻¹ ∙ ap ((α ×ₒ γ) +ₒ_) a₀-least) 𝕗)
simulation-product-decomposition
: (α : Ordinal 𝓤) (β γ : Ordinal 𝓥)
((a₀ , a₀-least) : 𝟘ₒ ⊲ α)
((f , _) : (α ×ₒ β) ⊴ (α ×ₒ γ))
→ (a : ⟨ α ⟩) (b : ⟨ β ⟩) → f (a , b) = (a , pr₂ (f (a₀ , b)))
simulation-product-decomposition {𝓤} {𝓥} α β γ (a₀ , a₀-least)
(f , sim@(init-seg , order-pres)) a b = I
where
f' : ⟨ α ×ₒ β ⟩ → ⟨ α ×ₒ γ ⟩
f' (a , b) = (a , pr₂ (f (a₀ , b)))
P : ⟨ α ×ₒ β ⟩ → 𝓤 ⊔ 𝓥 ̇
P (a , b) = (f (a , b)) = f' (a , b)
I : P (a , b)
I = Transfinite-induction (α ×ₒ β) P II (a , b)
where
II : (x : ⟨ α ×ₒ β ⟩)
→ ((y : ⟨ α ×ₒ β ⟩) → y ≺⟨ α ×ₒ β ⟩ x → P y)
→ P x
II (a , b) IH = Extensionality (α ×ₒ γ) (f (a , b)) (f' (a , b)) III IV
where
III : (u : ⟨ α ×ₒ γ ⟩) → u ≺⟨ α ×ₒ γ ⟩ f (a , b) → u ≺⟨ α ×ₒ γ ⟩ f' (a , b)
III (a' , c') p = transport (λ - → - ≺⟨ α ×ₒ γ ⟩ f' (a , b)) III₂ (III₃ p')
where
III₁ : Σ (a'' , b') ꞉ ⟨ α ×ₒ β ⟩ , (a'' , b') ≺⟨ α ×ₒ β ⟩ (a , b)
× (f (a'' , b') = a' , c')
III₁ = init-seg (a , b) (a' , c') p
a'' = pr₁ (pr₁ III₁)
b' = pr₂ (pr₁ III₁)
p' = pr₁ (pr₂ III₁)
eq : f (a'' , b') = (a' , c')
eq = pr₂ (pr₂ III₁)
III₂ : f' (a'' , b') = (a' , c')
III₂ = IH (a'' , b') p' ⁻¹ ∙ eq
III₃ : (a'' , b') ≺⟨ α ×ₒ β ⟩ (a , b)
→ f' (a'' , b') ≺⟨ α ×ₒ γ ⟩ f' (a , b)
III₃ (inl q) = h (order-pres (a₀' , b') (a₀ , b) (inl q))
where
a₀' : ⟨ α ⟩
a₀' = pr₁ (f (a₀ , b))
ih : (f (a₀' , b')) = f' (a₀' , b')
ih = IH (a₀' , b') (inl q)
h : f (a₀' , b') ≺⟨ α ×ₒ γ ⟩ f (a₀ , b)
→ f' (a'' , b') ≺⟨ α ×ₒ γ ⟩ f' (a , b)
h (inl r) = inl (transport (λ - → - ≺⟨ γ ⟩ pr₂ (f (a₀ , b)))
(ap pr₂ ih) r)
h (inr (_ , r)) = 𝟘-elim (irrefl α a₀' (transport (λ - → - ≺⟨ α ⟩ a₀')
(ap pr₁ ih) r))
III₃ (inr (e , q)) = inr (ap (λ - → pr₂ (f (a₀ , -))) e , q)
IV : (u : ⟨ α ×ₒ γ ⟩) → u ≺⟨ α ×ₒ γ ⟩ f' (a , b) → u ≺⟨ α ×ₒ γ ⟩ f (a , b)
IV (a' , c') (inl p) = l₂ (a' , c') (inl p)
where
l₁ : a₀ ≼⟨ α ⟩ a
l₁ x p = 𝟘-elim (transport ⟨_⟩ (a₀-least ⁻¹) (x , p))
l₂ : f (a₀ , b) ≼⟨ α ×ₒ γ ⟩ f (a , b)
l₂ = simulations-are-monotone _ _
f sim (a₀ , b) (a , b) (×ₒ-≼-left α β l₁)
IV (a' , c') (inr (r , q)) =
transport (λ - → - ≺⟨ α ×ₒ γ ⟩ f (a , b)) eq
(order-pres (a' , b) (a , b) (inr (refl , q)))
where
eq = f (a' , b) =⟨ IH (a' , b) (inr (refl , q)) ⟩
f' (a' , b) =⟨ refl ⟩
(a' , pr₂ (f (a₀ , b))) =⟨ ap (a' ,_) (r ⁻¹) ⟩
(a' , c') ∎
\end{code}
The following result states that multiplication for ordinals can be cancelled on
the left. Interestingly, Andrew Swan [Swa18] proved that the corresponding
result for sets is not provable constructively already for α = 𝟚: there are
toposes where the statement
𝟚 × X ≃ 𝟚 × Y → X ≃ Y
is not true for certain objects X and Y in the topos.
[Swa18] Andrew Swan
On Dividing by Two in Constructive Mathematics
2018
https://arxiv.org/abs/1804.04490
\begin{code}
×ₒ-left-cancellable : (α β γ : Ordinal 𝓤)
→ 𝟘ₒ ⊲ α
→ (α ×ₒ β) = (α ×ₒ γ)
→ β = γ
×ₒ-left-cancellable {𝓤 = 𝓤} α β γ p e = ⊴-antisym β γ (f β γ e) (f γ β (e ⁻¹))
where
f : (β γ : Ordinal 𝓤) → (α ×ₒ β) = (α ×ₒ γ) → β ⊴ γ
f β γ e = ×ₒ-left-cancellable-⊴ α β γ p (≃ₒ-to-⊴ (α ×ₒ β) (α ×ₒ γ)
(idtoeqₒ (α ×ₒ β) (α ×ₒ γ) e))
\end{code}
Using similar techniques, we can also prove that multiplication is
left cancellable with respect to ⊲.
\begin{code}
simulation-product-decomposition-leftover-empty
: (α β γ : Ordinal 𝓤)
→ 𝟘ₒ ⊲ α
→ (a : ⟨ α ⟩)
→ (α ×ₒ β) = (α ×ₒ γ +ₒ (α ↓ a))
→ (α ×ₒ β) = (α ×ₒ γ)
simulation-product-decomposition-leftover-empty α β γ (a₀ , p) a e = eq
where
a-least : (x : ⟨ α ⟩) → ¬ (x ≺⟨ α ⟩ a)
a-least x l = +disjoint (inr-is-inl ⁻¹)
where
𝕗 : α ×ₒ β ⊴ α ×ₒ γ +ₒ (α ↓ a)
𝕗 = ≃ₒ-to-⊴ _ _ (idtoeqₒ _ _ e)
f = [ (α ×ₒ β) , ((α ×ₒ γ) +ₒ (α ↓ a)) ]⟨ 𝕗 ⟩
𝕗⁻¹ : α ×ₒ γ +ₒ (α ↓ a) ⊴ α ×ₒ β
𝕗⁻¹ = ≃ₒ-to-⊴ _ _ (idtoeqₒ _ _ (e ⁻¹))
f⁻¹ = [ α ×ₒ γ +ₒ (α ↓ a) , α ×ₒ β ]⟨ 𝕗⁻¹ ⟩
f-decomposition : Σ g ꞉ (⟨ β ⟩ → ⟨ γ ⟩) ,
((a : ⟨ α ⟩) (b : ⟨ β ⟩) → f (a , b) = inl (a , g b) )
f-decomposition =
simulation-product-decomposition-generalised α β γ (a₀ , p) a 𝕗
g = pr₁ f-decomposition
inr-is-inl = (inr (x , l)) =⟨ equiv _ _ e (inr (x , l)) ⟩
f (f⁻¹ (inr (x , l))) =⟨ pr₂ f-decomposition x' y' ⟩
inl (x' , g y') ∎
where
x' = pr₁ (f⁻¹ (inr (x , l)))
y' = pr₂ (f⁻¹ (inr (x , l)))
equiv : (α β : Ordinal 𝓤) → (eq : α = β) (x : ⟨ β ⟩)
→ x = [ α , β ]⟨ ≃ₒ-to-⊴ α β (idtoeqₒ α β eq) ⟩
([ β , α ]⟨ ≃ₒ-to-⊴ β α (idtoeqₒ β α (eq ⁻¹)) ⟩ x)
equiv α β refl x = refl
a-is-a₀ : a = a₀
a-is-a₀ = Extensionality α a a₀ (λ x l → 𝟘-elim (a-least x l))
(λ x l → 𝟘-elim (transport⁻¹ ⟨_⟩ p (x , l)))
eq = α ×ₒ β =⟨ e ⟩
α ×ₒ γ +ₒ (α ↓ a) =⟨ ap ((α ×ₒ γ) +ₒ_) (ap (α ↓_) a-is-a₀ ∙ p ⁻¹) ⟩
α ×ₒ γ +ₒ 𝟘ₒ =⟨ 𝟘ₒ-right-neutral (α ×ₒ γ) ⟩
α ×ₒ γ ∎
×ₒ-left-cancellable-⊲ : (α β γ : Ordinal 𝓤)
→ 𝟘ₒ ⊲ α
→ α ×ₒ β ⊲ α ×ₒ γ
→ β ⊲ γ
×ₒ-left-cancellable-⊲ α β γ α-positive ((a , c) , p) = c , III
where
I : α ×ₒ β = α ×ₒ (γ ↓ c) +ₒ (α ↓ a)
I = p ∙ ×ₒ-↓ α γ
II : α ×ₒ β = α ×ₒ (γ ↓ c)
II = simulation-product-decomposition-leftover-empty α β (γ ↓ c) α-positive a I
III : β = (γ ↓ c)
III = ×ₒ-left-cancellable α β (γ ↓ c) α-positive II
\end{code}