Martin Escardo, August 2018
Various maps of ordinals, including equivalences.
\begin{code}
{-# OPTIONS --safe --without-K #-}
module Ordinals.Maps where
open import MLTT.Spartan
open import Ordinals.Notions
open import Ordinals.Type
open import Ordinals.Underlying
open import UF.Base
open import UF.Embeddings
open import UF.Equiv
open import UF.FunExt
open import UF.Subsingletons
open import UF.Subsingletons-FunExt
\end{code}
Maps of ordinals. A simulation gives a notion of embedding of
ordinals, making them into a poset, as proved below.
\begin{code}
is-order-preserving
is-monotone
is-order-reflecting
is-order-embedding
is-initial-segment
is-simulation : (α : Ordinal 𝓤) (β : Ordinal 𝓥) → (⟨ α ⟩ → ⟨ β ⟩) → 𝓤 ⊔ 𝓥 ̇
is-order-preserving α β f = (x y : ⟨ α ⟩) → x ≺⟨ α ⟩ y → f x ≺⟨ β ⟩ f y
is-monotone α β f = (x y : ⟨ α ⟩) → x ≼⟨ α ⟩ y → f x ≼⟨ β ⟩ f y
is-order-reflecting α β f = (x y : ⟨ α ⟩) → f x ≺⟨ β ⟩ f y → x ≺⟨ α ⟩ y
is-order-embedding α β f = is-order-preserving α β f × is-order-reflecting α β f
is-initial-segment α β f = (x : ⟨ α ⟩) (y : ⟨ β ⟩)
→ y ≺⟨ β ⟩ f x
→ Σ x' ꞉ ⟨ α ⟩ , (x' ≺⟨ α ⟩ x) × (f x' = y)
is-simulation α β f = is-initial-segment α β f × is-order-preserving α β f
simulations-are-order-preserving : (α : Ordinal 𝓤) (β : Ordinal 𝓥)
(f : ⟨ α ⟩ → ⟨ β ⟩)
→ is-simulation α β f
→ is-order-preserving α β f
simulations-are-order-preserving α β f (i , p) = p
simulations-are-initial-segments : (α : Ordinal 𝓤) (β : Ordinal 𝓥)
(f : ⟨ α ⟩ → ⟨ β ⟩)
→ is-simulation α β f
→ is-initial-segment α β f
simulations-are-initial-segments α β f (i , p) = i
being-order-preserving-is-prop : Fun-Ext
→ (α : Ordinal 𝓤) (β : Ordinal 𝓥)
(f : ⟨ α ⟩ → ⟨ β ⟩)
→ is-prop (is-order-preserving α β f)
being-order-preserving-is-prop fe α β f =
Π₃-is-prop fe (λ x y l → Prop-valuedness β (f x) (f y))
being-order-reflecting-is-prop : Fun-Ext
→ (α : Ordinal 𝓤) (β : Ordinal 𝓥)
(f : ⟨ α ⟩ → ⟨ β ⟩)
→ is-prop (is-order-reflecting α β f)
being-order-reflecting-is-prop fe α β f =
Π₃-is-prop fe (λ x y l → Prop-valuedness α x y)
being-order-embedding-is-prop : Fun-Ext
→ (α : Ordinal 𝓤) (β : Ordinal 𝓥)
(f : ⟨ α ⟩ → ⟨ β ⟩)
→ is-prop (is-order-embedding α β f)
being-order-embedding-is-prop fe α β f =
×-is-prop
(being-order-preserving-is-prop fe α β f)
(being-order-reflecting-is-prop fe α β f)
order-reflecting-gives-inverse-order-preserving :
(α : Ordinal 𝓤) (β : Ordinal 𝓥)
(f : ⟨ α ⟩ → ⟨ β ⟩)
→ (e : is-equiv f)
→ is-order-reflecting α β f
→ is-order-preserving β α (inverse f e)
order-reflecting-gives-inverse-order-preserving α β f e r x y l = m
where
g : ⟨ β ⟩ → ⟨ α ⟩
g = inverse f e
l' : f (g x) ≺⟨ β ⟩ f (g y)
l' = transport₂ (λ x y → x ≺⟨ β ⟩ y)
((inverses-are-sections f e x)⁻¹)
((inverses-are-sections f e y)⁻¹) l
s : f (g x) ≺⟨ β ⟩ f (g y) → g x ≺⟨ α ⟩ g y
s = r (g x) (g y)
m : g x ≺⟨ α ⟩ g y
m = s l'
inverse-order-reflecting-gives-order-preserving :
(α : Ordinal 𝓤) (β : Ordinal 𝓥)
(f : ⟨ α ⟩ → ⟨ β ⟩)
(e : is-equiv f)
→ is-order-preserving β α (inverse f e)
→ is-order-reflecting α β f
inverse-order-reflecting-gives-order-preserving α β f e q x y l = r
where
g : ⟨ β ⟩ → ⟨ α ⟩
g = inverse f e
s : g (f x) ≺⟨ α ⟩ g (f y)
s = q (f x) (f y) l
r : x ≺⟨ α ⟩ y
r = transport₂ (λ x y → x ≺⟨ α ⟩ y)
(inverses-are-retractions f e x)
(inverses-are-retractions f e y) s
simulations-are-lc : (α : Ordinal 𝓤) (β : Ordinal 𝓥)
(f : ⟨ α ⟩ → ⟨ β ⟩)
→ is-simulation α β f
→ left-cancellable f
simulations-are-lc α β f (i , p) = γ
where
φ : ∀ x y
→ is-accessible (underlying-order α) x
→ is-accessible (underlying-order α) y
→ f x = f y
→ x = y
φ x y (acc s) (acc t) r = Extensionality α x y g h
where
g : (u : ⟨ α ⟩) → u ≺⟨ α ⟩ x → u ≺⟨ α ⟩ y
g u l = d
where
a : f u ≺⟨ β ⟩ f y
a = transport (λ - → f u ≺⟨ β ⟩ -) r (p u x l)
b : Σ v ꞉ ⟨ α ⟩ , (v ≺⟨ α ⟩ y) × (f v = f u)
b = i y (f u) a
c : u = pr₁ b
c = φ u (pr₁ b) (s u l) (t (pr₁ b) (pr₁ (pr₂ b))) ((pr₂ (pr₂ b))⁻¹)
d : u ≺⟨ α ⟩ y
d = transport (λ - → - ≺⟨ α ⟩ y) (c ⁻¹) (pr₁ (pr₂ b))
h : (u : ⟨ α ⟩) → u ≺⟨ α ⟩ y → u ≺⟨ α ⟩ x
h u l = d
where
a : f u ≺⟨ β ⟩ f x
a = transport (λ - → f u ≺⟨ β ⟩ -) (r ⁻¹) (p u y l)
b : Σ v ꞉ ⟨ α ⟩ , (v ≺⟨ α ⟩ x) × (f v = f u)
b = i x (f u) a
c : pr₁ b = u
c = φ (pr₁ b) u (s (pr₁ b) (pr₁ (pr₂ b))) (t u l) (pr₂ (pr₂ b))
d : u ≺⟨ α ⟩ x
d = transport (λ - → - ≺⟨ α ⟩ x) c (pr₁ (pr₂ b))
γ : left-cancellable f
γ {x} {y} = φ x y (Well-foundedness α x) (Well-foundedness α y)
simulations-are-embeddings : FunExt
→ (α : Ordinal 𝓤) (β : Ordinal 𝓥)
(f : ⟨ α ⟩ → ⟨ β ⟩)
→ is-simulation α β f
→ is-embedding f
simulations-are-embeddings fe α β f s = lc-maps-into-sets-are-embeddings f
(simulations-are-lc α β f s)
(underlying-type-is-set fe β)
being-initial-segment-is-prop : Fun-Ext
→ (α : Ordinal 𝓤) (β : Ordinal 𝓥)
(f : ⟨ α ⟩ → ⟨ β ⟩)
→ is-order-preserving α β f
→ is-prop (is-initial-segment α β f)
being-initial-segment-is-prop fe α β f p = prop-criterion γ
where
γ : is-initial-segment α β f → is-prop (is-initial-segment α β f)
γ i = Π₃-is-prop fe (λ x z l → φ x z l)
where
φ : ∀ x y
→ y ≺⟨ β ⟩ f x
→ is-prop (Σ x' ꞉ ⟨ α ⟩ , (x' ≺⟨ α ⟩ x) × (f x' = y))
φ x y l (x' , (m , r)) (x'' , (m' , r')) = to-Σ-= (a , b)
where
c : f x' = f x''
c = r ∙ r' ⁻¹
j : is-simulation α β f
j = (i , p)
a : x' = x''
a = simulations-are-lc α β f j c
k : is-prop ((x'' ≺⟨ α ⟩ x) × (f x'' = y))
k = ×-is-prop
(Prop-valuedness α x'' x)
(underlying-type-is-set (λ _ _ → fe) β)
b : transport (λ - → (- ≺⟨ α ⟩ x) × (f - = y)) a (m , r) = m' , r'
b = k _ _
being-simulation-is-prop : Fun-Ext
→ (α : Ordinal 𝓤) (β : Ordinal 𝓥)
(f : ⟨ α ⟩ → ⟨ β ⟩)
→ is-prop (is-simulation α β f)
being-simulation-is-prop fe α β f =
×-prop-criterion
(being-initial-segment-is-prop fe α β f ,
(λ _ → being-order-preserving-is-prop fe α β f))
lc-initial-segments-are-order-reflecting : (α : Ordinal 𝓤) (β : Ordinal 𝓥)
(f : ⟨ α ⟩ → ⟨ β ⟩)
→ is-initial-segment α β f
→ left-cancellable f
→ is-order-reflecting α β f
lc-initial-segments-are-order-reflecting α β f i c x y l = m
where
a : Σ x' ꞉ ⟨ α ⟩ , (x' ≺⟨ α ⟩ y) × (f x' = f x)
a = i y (f x) l
m : x ≺⟨ α ⟩ y
m = transport (λ - → - ≺⟨ α ⟩ y) (c (pr₂ (pr₂ a))) (pr₁ (pr₂ a))
simulations-are-order-reflecting : (α : Ordinal 𝓤) (β : Ordinal 𝓥)
(f : ⟨ α ⟩ → ⟨ β ⟩)
→ is-simulation α β f
→ is-order-reflecting α β f
simulations-are-order-reflecting α β f (i , p) =
lc-initial-segments-are-order-reflecting α β f i
(simulations-are-lc α β f (i , p))
order-embeddings-are-lc : (α : Ordinal 𝓤) (β : Ordinal 𝓥) (f : ⟨ α ⟩ → ⟨ β ⟩)
→ is-order-embedding α β f
→ left-cancellable f
order-embeddings-are-lc α β f (p , r) {x} {y} s = γ
where
a : (u : ⟨ α ⟩) → u ≺⟨ α ⟩ x → u ≺⟨ α ⟩ y
a u l = r u y j
where
i : f u ≺⟨ β ⟩ f x
i = p u x l
j : f u ≺⟨ β ⟩ f y
j = transport (λ - → f u ≺⟨ β ⟩ -) s i
b : (u : ⟨ α ⟩) → u ≺⟨ α ⟩ y → u ≺⟨ α ⟩ x
b u l = r u x j
where
i : f u ≺⟨ β ⟩ f y
i = p u y l
j : f u ≺⟨ β ⟩ f x
j = transport⁻¹ (λ - → f u ≺⟨ β ⟩ -) s i
γ : x = y
γ = Extensionality α x y a b
order-embedings-are-embeddings : FunExt
→ (α : Ordinal 𝓤) (β : Ordinal 𝓥)
(f : ⟨ α ⟩ → ⟨ β ⟩)
→ is-order-embedding α β f
→ is-embedding f
order-embedings-are-embeddings fe α β f (p , r) =
lc-maps-into-sets-are-embeddings f
(order-embeddings-are-lc α β f (p , r))
(underlying-type-is-set fe β)
simulations-are-monotone : (α : Ordinal 𝓤) (β : Ordinal 𝓥)
(f : ⟨ α ⟩ → ⟨ β ⟩)
→ is-simulation α β f
→ is-monotone α β f
simulations-are-monotone α β f (i , p) = φ
where
φ : (x y : ⟨ α ⟩)
→ ((z : ⟨ α ⟩) → z ≺⟨ α ⟩ x → z ≺⟨ α ⟩ y)
→ (t : ⟨ β ⟩) → t ≺⟨ β ⟩ f x → t ≺⟨ β ⟩ f y
φ x y ψ t l = transport (λ - → - ≺⟨ β ⟩ f y) b d
where
z : ⟨ α ⟩
z = pr₁ (i x t l)
a : z ≺⟨ α ⟩ x
a = pr₁ (pr₂ (i x t l))
b : f z = t
b = pr₂ (pr₂ (i x t l))
c : z ≺⟨ α ⟩ y
c = ψ z a
d : f z ≺⟨ β ⟩ f y
d = p z y c
at-most-one-simulation : (α : Ordinal 𝓤) (β : Ordinal 𝓥)
(f f' : ⟨ α ⟩ → ⟨ β ⟩)
→ is-simulation α β f
→ is-simulation α β f'
→ f ∼ f'
at-most-one-simulation α β f f' (i , p) (i' , p') x = γ
where
φ : ∀ x
→ is-accessible (underlying-order α) x
→ f x = f' x
φ x (acc u) = Extensionality β (f x) (f' x) a b
where
IH : ∀ y → y ≺⟨ α ⟩ x → f y = f' y
IH y l = φ y (u y l)
a : (z : ⟨ β ⟩) → z ≺⟨ β ⟩ f x → z ≺⟨ β ⟩ f' x
a z l = transport (λ - → - ≺⟨ β ⟩ f' x) t m
where
s : Σ y ꞉ ⟨ α ⟩ , (y ≺⟨ α ⟩ x) × (f y = z)
s = i x z l
y : ⟨ α ⟩
y = pr₁ s
m : f' y ≺⟨ β ⟩ f' x
m = p' y x (pr₁ (pr₂ s))
t : f' y = z
t = f' y =⟨ (IH y (pr₁ (pr₂ s)))⁻¹ ⟩
f y =⟨ pr₂ (pr₂ s) ⟩
z ∎
b : (z : ⟨ β ⟩) → z ≺⟨ β ⟩ f' x → z ≺⟨ β ⟩ f x
b z l = transport (λ - → - ≺⟨ β ⟩ f x) t m
where
s : Σ y ꞉ ⟨ α ⟩ , (y ≺⟨ α ⟩ x) × (f' y = z)
s = i' x z l
y : ⟨ α ⟩
y = pr₁ s
m : f y ≺⟨ β ⟩ f x
m = p y x (pr₁ (pr₂ s))
t : f y = z
t = f y =⟨ IH y (pr₁ (pr₂ s)) ⟩
f' y =⟨ pr₂ (pr₂ s) ⟩
z ∎
γ : f x = f' x
γ = φ x (Well-foundedness α x)
\end{code}
Added 29th March 2022.
Simulations preserve least elements.
\begin{code}
initial-segments-preserve-least :
(α : Ordinal 𝓤) (β : Ordinal 𝓥)
(x : ⟨ α ⟩) (y : ⟨ β ⟩)
(f : ⟨ α ⟩ → ⟨ β ⟩)
→ is-initial-segment α β f
→ is-least α x
→ is-least β y
→ f x = y
initial-segments-preserve-least α β x y f i m n = c
where
a : f x ≼⟨ β ⟩ y
a u l = IV
where
x' : ⟨ α ⟩
x' = pr₁ (i x u l)
I : x' ≺⟨ α ⟩ x
I = pr₁ (pr₂ (i x u l))
II : x ≼⟨ α ⟩ x'
II = m x'
III : x' ≺⟨ α ⟩ x'
III = II x' I
IV : u ≺⟨ β ⟩ y
IV = 𝟘-elim (irrefl α x' III)
b : y ≼⟨ β ⟩ f x
b = n (f x)
c : f x = y
c = Antisymmetry β (f x) y a b
simulations-preserve-least : (α : Ordinal 𝓤) (β : Ordinal 𝓥)
(x : ⟨ α ⟩) (y : ⟨ β ⟩)
(f : ⟨ α ⟩ → ⟨ β ⟩)
→ is-simulation α β f
→ is-least α x
→ is-least β y
→ f x = y
simulations-preserve-least α β x y f (i , _) =
initial-segments-preserve-least α β x y f i
\end{code}
Added in March 2022 by Tom de Jong:
Notice that we defined "is-initial-segment" using Σ (rather than ∃).
This is fine, because if f is a simulation from α to β, then for
every x : ⟨ α ⟩ and y : ⟨ β ⟩ with y ≺⟨ β ⟩ f x, the type
(Σ x' ꞉ ⟨ α ⟩ , (x' ≺⟨ α ⟩ x) × (f x' = y)) is a proposition. It
follows (see the proof above) that being a simulation is property.
However, for some purposes, notably for constructing suprema of
ordinals in OrdinalSupOfOrdinals.lagda, it is useful to formulate the
notion of initial segment and the notion of simulation using ∃, rather
than Σ.
Using the techniques that were used above to prove that being a simulation is
property, we show the definition of simulation with ∃ to be equivalent to the
original one.
\begin{code}
open import UF.PropTrunc
module _ (pt : propositional-truncations-exist)
(fe : FunExt)
where
open PropositionalTruncation pt
is-initial-segment' : (α : Ordinal 𝓤) (β : Ordinal 𝓥) → (⟨ α ⟩ → ⟨ β ⟩) → 𝓤 ⊔ 𝓥 ̇
is-initial-segment' α β f = (x : ⟨ α ⟩) (y : ⟨ β ⟩)
→ y ≺⟨ β ⟩ f x
→ ∃ x' ꞉ ⟨ α ⟩ , (x' ≺⟨ α ⟩ x) × (f x' = y)
is-simulation' : (α : Ordinal 𝓤) (β : Ordinal 𝓥) → (⟨ α ⟩ → ⟨ β ⟩) → 𝓤 ⊔ 𝓥 ̇
is-simulation' α β f = is-initial-segment' α β f × is-order-preserving α β f
simulations-are-lc' : (α : Ordinal 𝓤) (β : Ordinal 𝓥)
(f : ⟨ α ⟩ → ⟨ β ⟩)
→ is-simulation' α β f
→ left-cancellable f
simulations-are-lc' α β f (i , p) = γ
where
φ : ∀ x y
→ is-accessible (underlying-order α) x
→ is-accessible (underlying-order α) y
→ f x = f y
→ x = y
φ x y (acc s) (acc t) r = Extensionality α x y g h
where
g : (u : ⟨ α ⟩) → u ≺⟨ α ⟩ x → u ≺⟨ α ⟩ y
g u l = ∥∥-rec (Prop-valuedness α u y) b (i y (f u) a)
where
a : f u ≺⟨ β ⟩ f y
a = transport (λ - → f u ≺⟨ β ⟩ -) r (p u x l)
b : (Σ v ꞉ ⟨ α ⟩ , (v ≺⟨ α ⟩ y) × (f v = f u))
→ u ≺⟨ α ⟩ y
b (v , k , e) = transport (λ - → - ≺⟨ α ⟩ y) (c ⁻¹) k
where
c : u = v
c = φ u v (s u l) (t v k) (e ⁻¹)
h : (u : ⟨ α ⟩) → u ≺⟨ α ⟩ y → u ≺⟨ α ⟩ x
h u l = ∥∥-rec (Prop-valuedness α u x) b (i x (f u) a)
where
a : f u ≺⟨ β ⟩ f x
a = transport (λ - → f u ≺⟨ β ⟩ -) (r ⁻¹) (p u y l)
b : (Σ v ꞉ ⟨ α ⟩ , (v ≺⟨ α ⟩ x) × (f v = f u))
→ u ≺⟨ α ⟩ x
b (v , k , e) = transport (λ - → - ≺⟨ α ⟩ x) c k
where
c : v = u
c = φ v u (s v k) (t u l) e
γ : left-cancellable f
γ {x} {y} = φ x y (Well-foundedness α x) (Well-foundedness α y)
simulation-prime : (α : Ordinal 𝓤) (β : Ordinal 𝓥)
(f : ⟨ α ⟩ → ⟨ β ⟩)
→ is-simulation α β f
→ is-simulation' α β f
simulation-prime α β f (i , p) = (j , p)
where
j : is-initial-segment' α β f
j x y l = ∣ i x y l ∣
simulation-unprime : (α : Ordinal 𝓤) (β : Ordinal 𝓥)
(f : ⟨ α ⟩ → ⟨ β ⟩)
→ is-simulation' α β f
→ is-simulation α β f
simulation-unprime α β f (i , p) = (j , p)
where
j : is-initial-segment α β f
j x y l = ∥∥-rec prp id (i x y l)
where
prp : is-prop (Σ x' ꞉ ⟨ α ⟩ , (x' ≺⟨ α ⟩ x) × (f x' = y))
prp (z , l , e) (z' , l' , e') = to-subtype-= ⦅1⦆ ⦅2⦆
where
⦅1⦆ : (x' : ⟨ α ⟩) → is-prop ((x' ≺⟨ α ⟩ x) × (f x' = y))
⦅1⦆ x' = ×-is-prop (Prop-valuedness α x' x) (underlying-type-is-set fe β)
⦅2⦆ : z = z'
⦅2⦆ = simulations-are-lc' α β f (i , p) (e ∙ e' ⁻¹)
\end{code}
\begin{code}
order-reflecting-partial-surjections-are-initial-segments
: (α : Ordinal 𝓤) (β : Ordinal 𝓥) (f : ⟨ α ⟩ → ⟨ β ⟩)
→ is-order-reflecting α β f
→ ((a : ⟨ α ⟩) (b : ⟨ β ⟩) → b ≺⟨ β ⟩ f a → Σ a' ꞉ ⟨ α ⟩ , f a' = b)
→ is-initial-segment α β f
order-reflecting-partial-surjections-are-initial-segments
α β f f-order-reflec σ a b l = pr₁ (σ a b l) , k , pr₂ (σ a b l)
where
a' : ⟨ α ⟩
a' = pr₁ (σ a b l)
e : f a' = b
e = pr₂ (σ a b l)
k : a' ≺⟨ α ⟩ a
k = f-order-reflec a' a (transport⁻¹ (λ - → - ≺⟨ β ⟩ f a) e l)
order-preserving-and-reflecting-partial-surjections-are-simulations :
(α : Ordinal 𝓤) (β : Ordinal 𝓥) (f : ⟨ α ⟩ → ⟨ β ⟩)
→ is-order-preserving α β f
→ is-order-reflecting α β f
→ ((a : ⟨ α ⟩) (b : ⟨ β ⟩) → b ≺⟨ β ⟩ f a → Σ a' ꞉ ⟨ α ⟩ , f a' = b)
→ is-simulation α β f
order-preserving-and-reflecting-partial-surjections-are-simulations
α β f f-op f-or σ =
order-reflecting-partial-surjections-are-initial-segments α β f f-or σ ,
f-op
\end{code}