module Order.Ordinal.Base whereOrdinalsπ
An ordinal captures the concept of a well-founded order. Such an order is
necessarily a strict order (like _<_, not
_β€_), since a well-founded relation cannot be
reflexive.
The conditions for a well-order an be expressed fairly concisely. A
relation _<_ : X β X β Type is a well order if all of
the following hold:
It is propositional.
It is well-founded.
It is transitive.
Whenever
{z | z < x} β‘ {z | z < y}, we havex β‘ y.
Every ordinal is in fact a poset, where x β€ y iff
β {z} β z < x β z < y. We choose to use a somewhat
redundant definition of ordinal, where this poset is part of the
structure, since it often lines up with a preexisting
order.
record Ordinal (β : Level) : Type (lsuc β) where
no-eta-equality
field
poset : Poset β β
open Poset poset public
field
_<_ : Ob β Ob β Type β
<-thin : β {x y} β is-prop (x < y)
<-wf : Wf _<_
<ββ€ : β {x y} β x < y β x β€ y
<ββ€β< : β {x y z} β x < y β y β€ z β x < z
[<β<]ββ€ : β {x y} β (β {z} β z < x β z < y) β (x β€ y)
<-trans : β {x y z} β x < y β y < z β x < z
<-trans x<y y<z = <ββ€β< x<y (<ββ€ y<z) <-irrefl : β {x} β Β¬ (x < x)
<-irrefl {x} x<x = go (<-wf x) where
go : Β¬ Acc _<_ x
go (acc h) = go (h x x<x)
<-asym : β {x y} β x < y β y < x β β₯
<-asym x<y y<x = <-irrefl (<-trans x<y y<x)
private variable
β ββ ββ ββ : Level
module _ where
instance
Underlying-Ordinal : Underlying (Ordinal β)
Underlying-Ordinal = record { β_β = Ordinal.Ob }
open Reflection
open hlevel-projection
open hlevel-projection
Ordinal-<-hlevel-proj : hlevel-projection (quote Ordinal._<_)
Ordinal-<-hlevel-proj .has-level = quote Ordinal.<-thin
Ordinal-<-hlevel-proj .get-level _ = pure (lit (nat 1))
Ordinal-<-hlevel-proj .get-argument (_ β· arg _ t β· _) = pure t
Ordinal-<-hlevel-proj .get-argument _ = typeError []For example, the ordinal Ο is given by the natural
numbers, under their standard ordering.
Ο : Ordinal lzero
Ο = record where
poset = Nat-poset
_<_ = Nat._<_
<-thin = Nat.β€-is-prop
<ββ€ = Nat.<-weaken
<ββ€β< = Nat.β€-trans
[<β<]ββ€ {x} {y} h =
let
h' : {z : Nat} β z Nat.β€ x β z Nat.β€ y
h' = Ξ» { {zero} _ β 0β€x; {suc z} β h {z} }
in h' Nat.β€-refl
<-wf = Data.Wellfounded.Properties.<-wfAs mentioned above, this representation is rather redundant. We confirm that ordinals are determined by their underlying type and strict order, and can be constructed from the same.
record _ββ_ (Ξ± : Ordinal ββ) (Ξ² : Ordinal ββ) : Type (ββ β ββ) where
field
equiv : β Ξ± β β β Ξ² β
pres-< : β {x y} β Ordinal._<_ Ξ± x y β Ordinal._<_ Ξ² (equiv Β· x) (equiv Β· y)instance
Funlike-ββ : {Ξ± : Ordinal ββ} {Ξ² : Ordinal ββ} β Funlike (Ξ± ββ Ξ²) β Ξ± β Ξ» _ β β Ξ² β
Funlike-ββ = record { _Β·_ = fst β _ββ_.equiv }ββββ‘ : {Ξ± Ξ² : Ordinal β} β Ξ± ββ Ξ² β Ξ± β‘ Ξ²
ββββ‘ {β} {Ξ±} {Ξ²} e = p whereLong proof.
module Ξ± = Ordinal Ξ±
module Ξ² = Ordinal Ξ²
open _ββ_ e
pβ : β Ξ± β β‘ β Ξ² β
pβ = ua equiv
pβ : PathP (Ξ» i β pβ i β pβ i β Type β) Ξ±._<_ Ξ²._<_
pβ = uaβ Ξ» x β uaβ Ξ» y β ua pres-<
pβ : PathP
(Ξ» i β (x y : pβ i) β
Ξ£ (Type β) Ξ» le β (β {z : pβ i} β pβ i z x β pβ i z y) β le)
(Ξ» x y β x Ξ±.β€ y , prop-ext (hlevel 1) (hlevel 1)
Ξ±.[<β<]ββ€ (Ξ» hβ hβ β Ξ±.<ββ€β< hβ hβ))
(Ξ» x y β x Ξ².β€ y , prop-ext (hlevel 1) (hlevel 1)
Ξ².[<β<]ββ€ (Ξ» hβ hβ β Ξ².<ββ€β< hβ hβ))
pβ = is-propβpathp (Ξ» i β
is-contrβis-prop $ Ξ -is-hlevel 0 Ξ» _ β Ξ -is-hlevel 0 Ξ» _ β
is-contr-Ξ£R univalence-identity-system) _ _
pβ : PathP (Ξ» i β β {x y} β is-prop (fst (pβ i x y))) Ξ±.β€-thin Ξ².β€-thin
pβ = is-propβpathp (Ξ» _ β hlevel 1) _ _
pβ : PathP (Ξ» i β β {x} β fst (pβ i x x)) Ξ±.β€-refl Ξ².β€-refl
pβ = is-propβpathp (Ξ» i β Ξ -is-hlevel' 1 Ξ» x β pβ i {x} {x}) _ _
pβ
: PathP (Ξ» i β β {x y z} β fst (pβ i x y) β fst (pβ i y z) β fst (pβ i x z))
Ξ±.β€-trans Ξ².β€-trans
pβ
= is-propβpathp (Ξ» i β
Ξ -is-hlevel' 1 Ξ» x β Ξ -is-hlevel' 1 Ξ» y β Ξ -is-hlevel' 1 Ξ» z β
Ξ -is-hlevel 1 Ξ» _ β Ξ -is-hlevel 1 Ξ» _ β pβ i {x} {z}) _ _
pβ : PathP (Ξ» i β β {x y} β fst (pβ i x y) β fst (pβ i y x) β x β‘ y)
Ξ±.β€-antisym Ξ².β€-antisym
pβ = is-prop-i0βpathp (
Ξ -is-hlevel' 1 Ξ» x β Ξ -is-hlevel' 1 Ξ» y β
Ξ -is-hlevel 1 Ξ» _ β Ξ -is-hlevel 1 Ξ» _ β Ξ±.Ob-is-set x y) _ _
pβ : PathP (Ξ» i β β {x y} β is-prop (pβ i x y)) Ξ±.<-thin Ξ².<-thin
pβ = is-propβpathp (Ξ» _ β hlevel 1) _ _
pβ : PathP (Ξ» i β β {x y} β pβ i x y β fst (pβ i x y)) Ξ±.<ββ€ Ξ².<ββ€
pβ = is-propβpathp (Ξ» i β
Ξ -is-hlevel' 1 Ξ» x β Ξ -is-hlevel' 1 Ξ» y β Ξ -is-hlevel 1 Ξ» _ β pβ i {x} {y}) _ _
pβ : PathP (Ξ» i β Wf (pβ i)) Ξ±.<-wf Ξ².<-wf
pβ = is-propβpathp (Ξ» _ β Ξ -is-hlevel 1 Acc-is-prop) _ _
p : Ξ± β‘ Ξ²
p i .Ordinal.poset .Poset.Ob = pβ i
p i .Ordinal.poset .Poset._β€_ x y = fst (pβ i x y)
p i .Ordinal.poset .Poset.β€-thin {x} {y} = pβ i {x} {y}
p i .Ordinal.poset .Poset.β€-refl {x} = pβ i {x}
p i .Ordinal.poset .Poset.β€-trans {x} {y} {z} = pβ
i {x} {y} {z}
p i .Ordinal.poset .Poset.β€-antisym {x} {y} = pβ i {x} {y}
p i .Ordinal._<_ = pβ i
p i .Ordinal.<-thin {x} {y} = pβ i {x} {y}
p i .Ordinal.<ββ€ {x} {y} = pβ i {x} {y}
p i .Ordinal.<ββ€β< {z} {x} {y} hβ hβ = Equiv.from (snd (pβ i x y)) hβ {z} hβ
p i .Ordinal.[<β<]ββ€ {x} {y} = Equiv.to (snd (pβ i x y))
p i .Ordinal.<-wf = pβ irecord make-ordinal (β : Level) : Type (lsuc β) where
no-eta-equality
field
Ob : Type β
_<_ : Ob β Ob β Type β
<-thin : β {x y} β is-prop (x < y)
<-wf : Wf _<_
<-trans : β {x y z} β x < y β y < z β x < z
<-extensional : β {x y} β (β {z} β (z < x β z < y) Γ (z < y β z < x)) β x β‘ y
to-ordinal : Ordinal β
to-ordinal = record where
poset = record where
Ob = Ob
_β€_ x y = β {z} β z < x β z < y
β€-thin = Ξ -is-hlevel' 1 Ξ» _ β Ξ -is-hlevel 1 Ξ» _ β <-thin
β€-refl = id
β€-trans hβ hβ = hβ β hβ
β€-antisym hβ hβ = <-extensional (hβ , hβ)
_<_ = _<_
<-thin = <-thin
<ββ€ x<y z<x = <-trans z<x x<y
<ββ€β< x<y yβ€z = yβ€z x<y
[<β<]ββ€ = id
<-wf = <-wfThe _ββ_ relation in fact defines an identity system,
but weβll prove that later. For now, we show itβs reflexive, symmetric,
and transitive.
ββ-refl : {Ξ± : Ordinal β} β Ξ± ββ Ξ±
ββ-refl = record { equiv = idβ ; pres-< = idβ }
ββ-trans : {Ξ± : Ordinal ββ} {Ξ² : Ordinal ββ} {Ξ³ : Ordinal ββ}
β Ξ± ββ Ξ² β Ξ² ββ Ξ³ β Ξ± ββ Ξ³
ββ-trans eβ eβ =
let module eβ = _ββ_ eβ; module eβ = _ββ_ eβ
in record { equiv = eβ.equiv βe eβ.equiv ; pres-< = eβ.pres-< βe eβ.pres-< }
ββ-sym : {Ξ± : Ordinal ββ} {Ξ² : Ordinal ββ} β Ξ± ββ Ξ² β Ξ² ββ Ξ±
ββ-sym {_} {_} {Ξ±} {Ξ²} e =
let
open _ββ_ e
equiv' = equiv eβ»ΒΉ
counit = equivβcounit (snd equiv)
in record {
equiv = equiv';
pres-< = Ξ» {x} {y} β transport
(Ξ» i β
Ordinal._<_ Ξ² (counit x i) (counit y i) β
Ordinal._<_ Ξ± (fst equiv' x) (fst equiv' y))
(pres-< {equiv' Β· x} {equiv' Β· y} eβ»ΒΉ)
}Subordinalsπ
Given any element of an ordinal, the elements below it form an ordinal of their own.
module _ (Ξ± : Ordinal β) (a : β Ξ± β) where
open Ordinal Ξ±
Subordinal : Ordinal β
Subordinal .Ordinal.poset = Subposet poset Ξ» x β el (x < a) <-thin
Subordinal .Ordinal._<_ (x , _) (y , _) = x < y
Subordinal .Ordinal.<-thin = <-thin
Subordinal .Ordinal.<ββ€ = <ββ€
Subordinal .Ordinal.<ββ€β< = <ββ€β<
Subordinal .Ordinal.[<β<]ββ€ {x , x<a} {y , y<a} h =
[<β<]ββ€ (Ξ» {z} z<x β h {z , <-trans z<x x<a} z<x)
Subordinal .Ordinal.<-wf (x , x<a) = Wf-induction _<_ <-wf
(Ξ» x β (x<a : x < a)
β Acc (Ξ» (x y : Ξ£ β Ξ± β (_< a)) β fst x < fst y) (x , x<a))
(Ξ» x ih x<a β acc Ξ» (y , y<a) y<x β ih y y<x y<a)
x x<aSimulationsπ
The correct notion of map between ordinals, called a simulation, is a strictly monotone function that induces an equivalence on subordinals.
record is-simulation (Ξ± : Ordinal ββ) (Ξ² : Ordinal ββ)
(f : β Ξ± β β β Ξ² β) : Type (ββ β ββ) where
no-eta-equality
private
module Ξ± = Ordinal Ξ±
module Ξ² = Ordinal Ξ²
field
pres-< : β {x y} β x Ξ±.< y β f x Ξ².< f y
segment : (x : Ξ±.Ob) β β Subordinal Ξ± x β β β Subordinal Ξ² (f x) β
segment x (y , y<x) = f y , pres-< y<x
field
segment-is-equiv : β {x} β is-equiv (segment x)
sim : β {x y} β y Ξ².< f x β β Ξ± β
sim h = fst (equivβinverse segment-is-equiv (_ , h))
simulates : β {x y} β (y<fx : y Ξ².< f x) β f (sim y<fx) β‘ y
simulates h = ap fst (equivβcounit segment-is-equiv (_ , h))
sim-< : β {x y} β (y<fx : y Ξ².< f x) β sim y<fx Ξ±.< x
sim-< h = snd (equivβinverse segment-is-equiv (_ , h))Simulations are injective, and monotone in every reasonable sense.
pres-β€ : β {x y} β x Ξ±.β€ y β f x Ξ².β€ f y
pres-β€ {x} {y} xβ€y = Ξ².[<β<]ββ€ Ξ» {z} z<fx β
transport (Ξ» i β simulates z<fx i Ξ².< f y) (pres-< (Ξ±.<ββ€β< (sim-< z<fx) xβ€y))
reflect-β€ : β {x y} β f x Ξ².β€ f y β x Ξ±.β€ y
reflect-β€ = go (Ξ±.<-wf _) (Ξ±.<-wf _) where
go : β {x y} β Acc Ξ±._<_ x β Acc Ξ±._<_ y β f x Ξ².β€ f y β x Ξ±.β€ y
go {x} {y} (acc hx) (acc hy) fxβ€fy =
Ξ±.[<β<]ββ€ Ξ» {z} z<x β
let
fz<fx = pres-< z<x
fz<fy = Ξ².<ββ€β< fz<fx fxβ€fy
w = sim fz<fy
w<y = sim-< fz<fy
fwβ‘fz = simulates fz<fy
wβ€z = go (hy w w<y) (hx z z<x) (Ξ².β€-refl' fwβ‘fz)
zβ€w = go (hx z z<x) (hy w w<y) (Ξ².β€-refl' (sym fwβ‘fz))
wβ‘z = Ξ±.β€-antisym wβ€z zβ€w
in transport (Ξ» i β wβ‘z i Ξ±.< y) w<y
has-injective : injective f
has-injective p = Ξ±.β€-antisym
(reflect-β€ (Ξ².β€-refl' p))
(reflect-β€ (Ξ².β€-refl' (sym p)))
has-is-embedding : is-embedding f
has-is-embedding = injectiveβis-embedding Ξ².Ob-is-set f has-injective
reflect-< : β {x y} β f x Ξ².< f y β x Ξ±.< y
reflect-< {x} {y} fx<fy =
transport (Ξ» i β has-injective (simulates fx<fy) i Ξ±.< y) (sim-< fx<fy)
Subordinal-β : (x : Ξ±.Ob) β Subordinal Ξ± x ββ Subordinal Ξ² (f x)
Subordinal-β x = record where
equiv = segment x , segment-is-equiv
pres-< = prop-ext Ξ±.<-thin Ξ².<-thin pres-< reflect-<is-simulation-is-prop : β {Ξ± Ξ² f} β is-prop (is-simulation {ββ} {ββ} Ξ± Ξ² f)
is-simulation-is-prop {_} {_} {Ξ±} {Ξ²} {f} sβ sβ = p where
open is-simulation
pβ : β {x y} β pres-< sβ {x} {y} β‘ pres-< sβ {x} {y}
pβ = hlevel 1 _ _
pβ : β {x} β PathP
(Ξ» i β is-equiv {A = β Subordinal Ξ± x β} {B = β Subordinal Ξ² (f x) β}
Ξ» (y , y<x) β f y , pβ i y<x)
(segment-is-equiv sβ {x})
(segment-is-equiv sβ {x})
pβ = is-propβpathp (Ξ» _ β is-equiv-is-prop _) _ _
p : sβ β‘ sβ
p i .pres-< = pβ i
p i .segment-is-equiv = pβ i
instance
H-Level-is-simulation
: β {n} {β} {Ξ± Ξ² : Ordinal β} {f} β H-Level (is-simulation Ξ± Ξ² f) (suc n)
H-Level-is-simulation = prop-instance is-simulation-is-propIf a simulation is also an equivalence, it forces the ordinals to be equal.
is-simulationβis-equivβββ : {Ξ± : Ordinal ββ} {Ξ² : Ordinal ββ} {f : β Ξ± β β β Ξ² β}
(sim : is-simulation Ξ± Ξ² f) (e : is-equiv f) β Ξ± ββ Ξ²
is-simulationβis-equivβββ _ e ._ββ_.equiv = _ , e
is-simulationβis-equivβββ {_} {_} {Ξ±} {Ξ²} sim _ ._ββ_.pres-< = prop-ext
(Ordinal.<-thin Ξ±) (Ordinal.<-thin Ξ²)
(is-simulation.pres-< sim) (is-simulation.reflect-< sim)Orderingπ
Intriguingly, simulations are unique.
simulation-unique : {Ξ± : Ordinal ββ} {Ξ² : Ordinal ββ} {f g : β Ξ± β β β Ξ² β} β
is-simulation Ξ± Ξ² f β is-simulation Ξ± Ξ² g β f β‘ g
simulation-unique {_} {_} {Ξ±} {Ξ²} {f} {g} f-sim g-sim =
let
module Ξ± = Ordinal Ξ±
module Ξ² = Ordinal Ξ²
open is-simulation
in ext $ Wf-induction Ξ±._<_ Ξ±.<-wf (Ξ» x β f x β‘ g x) Ξ» x ih β
Ξ².β€-antisym
(Ξ².[<β<]ββ€ Ξ» z<fx β
subst (Ξ» z β z Ξ².< g x)
(sym (ih (sim f-sim z<fx) (sim-< f-sim z<fx)) β simulates f-sim z<fx)
(pres-< g-sim (sim-< f-sim z<fx)))
(Ξ².[<β<]ββ€ Ξ» z<gx β
subst (Ξ» z β z Ξ².< f x)
(ih (sim g-sim z<gx) (sim-< g-sim z<gx) β simulates g-sim z<gx)
(pres-< f-sim (sim-< g-sim z<gx)))So they induce an ordering on ordinals.
_β€β_ : (Ξ± : Ordinal ββ) (Ξ² : Ordinal ββ) β Type (ββ β ββ)
Ξ± β€β Ξ² = Ξ£ (β Ξ± β β β Ξ² β) (is-simulation Ξ± Ξ²)
β€β-thin : {ββ ββ : Level} {Ξ± : Ordinal ββ} {Ξ² : Ordinal ββ} β is-prop (Ξ± β€β Ξ²)
β€β-thin (_ , f-sim) (_ , g-sim) =
Ξ£-path (simulation-unique f-sim g-sim) (is-simulation-is-prop _ _)
β€β-refl : {Ξ± : Ordinal β} β Ξ± β€β Ξ±
β€β-refl = id , record { pres-< = id ; segment-is-equiv = id-equiv }
β€β-trans : {Ξ± : Ordinal ββ} {Ξ² : Ordinal ββ} {Ξ³ : Ordinal ββ}
β Ξ± β€β Ξ² β Ξ² β€β Ξ³ β Ξ± β€β Ξ³
β€β-trans (f , f-sim) (g , g-sim) = g β f , record where
open is-simulation
pres-< = pres-< g-sim β pres-< f-sim
segment-is-equiv = β-is-equiv (segment-is-equiv g-sim) (segment-is-equiv f-sim)
β€β-antisym : {Ξ± : Ordinal ββ} {Ξ² : Ordinal ββ} β Ξ± β€β Ξ² β Ξ² β€β Ξ± β Ξ± ββ Ξ²
β€β-antisym {_} {_} {Ξ±} {Ξ²} Ξ±β€Ξ² Ξ²β€Ξ± =
is-simulationβis-equivβββ (snd Ξ±β€Ξ²)
$ is-isoβis-equiv
$ iso (fst Ξ²β€Ξ±)
(happly (ap fst (β€β-thin (β€β-trans Ξ²β€Ξ± Ξ±β€Ξ²) β€β-refl)))
(happly (ap fst (β€β-thin (β€β-trans Ξ±β€Ξ² Ξ²β€Ξ±) β€β-refl)))
ββββ€β : {Ξ± : Ordinal ββ} {Ξ² : Ordinal ββ} β Ξ± ββ Ξ² β Ξ± β€β Ξ²
ββββ€β e =
let open _ββ_ e
in fst equiv , record {
pres-< = fst pres-<;
segment-is-equiv = snd (Ξ£-ap equiv Ξ» _ β pres-<)
}
Ordinal-poset : (β : Level) β Poset (lsuc β) β
Ordinal-poset β .Poset.Ob = Ordinal β
Ordinal-poset β .Poset._β€_ = _β€β_
Ordinal-poset β .Poset.β€-thin = β€β-thin
Ordinal-poset β .Poset.β€-refl = β€β-refl
Ordinal-poset β .Poset.β€-trans = β€β-trans
Ordinal-poset β .Poset.β€-antisym hβ hβ = ββββ‘ (β€β-antisym hβ hβ)In particular, the type of ordinals is a set, and _ββ_
forms an identity system.
Ordinal-is-set : is-set (Ordinal β)
Ordinal-is-set {β} = Poset.Ob-is-set (Ordinal-poset β)
private unquoteDecl ββ-path = declare-record-path ββ-path (quote _ββ_)
ββ-thin : {Ξ± : Ordinal ββ} {Ξ² : Ordinal ββ} β is-prop (Ξ± ββ Ξ²)
ββ-thin {_} {_} {Ξ±} {Ξ²} = retractβis-prop
{A = (Ξ± β€β Ξ²) Γ (Ξ² β€β Ξ±)}
(Ξ» (Ξ±β€Ξ² , Ξ²β€Ξ±) β β€β-antisym Ξ±β€Ξ² Ξ²β€Ξ±)
(Ξ» e β ββββ€β e , ββββ€β (ββ-sym e))
(Ξ» e β ββ-path (ext Ξ» x β refl))
(Γ-is-hlevel 1 β€β-thin β€β-thin)
ββ-identity-system : is-identity-system {A = Ordinal β} _ββ_ Ξ» _ β ββ-refl
ββ-identity-system = set-identity-system {r = Ξ» _ β ββ-refl} (Ξ» _ _ β ββ-thin) ββββ‘instance
H-Level-Ordinal
: β {n} {β} β H-Level (Ordinal β) (suc (suc n))
H-Level-Ordinal = basic-instance 2 Ordinal-is-set
H-Level-ββ
: β {n ββ ββ} {Ξ± : Ordinal ββ} {Ξ² : Ordinal ββ} β H-Level (Ξ± ββ Ξ²) (suc n)
H-Level-ββ = basic-instance 1 ββ-thinWe conclude with the ways in which subordinals interact with the order.
module _ {Ξ± : Ordinal β} {x : β Ξ± β} {y : β Subordinal Ξ± x β} where
open Ordinal Ξ±
Subsubordinal : Subordinal (Subordinal Ξ± x) y ββ Subordinal Ξ± (fst y)
Subsubordinal ._ββ_.equiv = IsoβEquiv
$ (Ξ» ((z , z<x) , z<y) β z , z<y)
, iso
(Ξ» (z , z<y) β (z , <-trans z<y (snd y)) , z<y)
(Ξ» _ β refl)
(Ξ» ((z , z<x) , z<y) β Ξ£-pathp (Ξ£-pathp refl (<-thin _ _)) refl)
Subsubordinal ._ββ_.pres-< = idβ
Subordinal-β€β : {Ξ± : Ordinal ββ} {x : β Ξ± β} β Subordinal Ξ± x β€β Ξ±
Subordinal-β€β {Ξ± = Ξ±} {x} = fst , record where
pres-< = id
segment-is-equiv {y} = Subsubordinal {Ξ± = Ξ±} {x} {y} ._ββ_.equiv .snd
is-subordinal-simulationβis-identity : β {Ξ± : Ordinal β} {x y f}
β is-simulation (Subordinal Ξ± x) (Subordinal Ξ± y) f
β fst β f β‘ fst
is-subordinal-simulationβis-identity {Ξ± = Ξ±} {x} {y} {f} sim =
simulation-unique (snd (β€β-trans (f , sim) Subordinal-β€β)) (snd Subordinal-β€β)
Subordinal-preserves-β€β : {Ξ± : Ordinal β} {x y : β Ξ± β}
β Ordinal._β€_ Ξ± x y β Subordinal Ξ± x β€β Subordinal Ξ± y
Subordinal-preserves-β€β {Ξ± = Ξ±} {x} {y} h =
let open Ordinal Ξ±
in (Ξ» (z , z<x) β z , <ββ€β< z<x h) , record where
pres-< = id
segment-is-equiv {z , z<x} = is-isoβis-equiv record where
from ((w , w<y) , w<z) = (w , <-trans w<z z<x) , w<z
rinv _ = Ξ£-path (Ξ£-path refl (<-thin _ _)) (<-thin _ _)
linv _ = Ξ£-path (Ξ£-path refl (<-thin _ _)) (<-thin _ _)
Subordinal-reflects-β€β : {Ξ± : Ordinal β} {x y : β Ξ± β}
β Subordinal Ξ± x β€β Subordinal Ξ± y β Ordinal._β€_ Ξ± x y
Subordinal-reflects-β€β {Ξ± = Ξ±} {x} {y} h =
let open Ordinal Ξ±
in [<β<]ββ€ Ξ» {z} z<x β subst (_< y)
(happly (is-subordinal-simulationβis-identity (snd h)) (z , z<x))
(snd (h Β· (z , z<x)))
Subordinal-injective : {Ξ± : Ordinal β} {x y : β Ξ± β}
β Subordinal Ξ± x ββ Subordinal Ξ± y β x β‘ y
Subordinal-injective {Ξ± = Ξ±} e = Ordinal.β€-antisym Ξ±
(Subordinal-reflects-β€β (ββββ€β e))
(Subordinal-reflects-β€β (ββββ€β (ββ-sym e)))The ordinal of ordinalsπ
The collection of ordinals is itself well-ordered, with the strict inequality coming from the notion of subordinal. Induction over this ordering is known as transfinite induction.
_<β_ : Ordinal ββ β Ordinal ββ β Type (ββ β ββ)
Ξ± <β Ξ² = Ξ£ β Ξ² β Ξ» x β Ξ± ββ Subordinal Ξ² x
<β-thin : {Ξ± : Ordinal ββ} {Ξ² : Ordinal ββ} β is-prop (Ξ± <β Ξ²)
<β-thin {ββ} {ββ} {Ξ±} {Ξ²} (x , eβ) (y , eβ) =
Ξ£-path (Subordinal-injective (ββ-trans (ββ-sym eβ) eβ)) (ββ-thin _ _)
<βββ€β : {Ξ± : Ordinal ββ} {Ξ² : Ordinal ββ} β Ξ± <β Ξ² β Ξ± β€β Ξ²
<βββ€β (x , e) = β€β-trans (ββββ€β e) Subordinal-β€β
βββ<ββ<β : {Ξ± : Ordinal ββ} {Ξ² : Ordinal ββ} {Ξ³ : Ordinal ββ}
β Ξ± ββ Ξ² β Ξ² <β Ξ³ β Ξ± <β Ξ³
βββ<ββ<β eβ (x , eβ) = x , ββ-trans eβ eβ
<βββ€ββ<β : {Ξ± : Ordinal ββ} {Ξ² : Ordinal ββ} {Ξ³ : Ordinal ββ}
β Ξ± <β Ξ² β Ξ² β€β Ξ³ β Ξ± <β Ξ³
<βββ€ββ<β (x , e) (f , sim) = f x , ββ-trans e (is-simulation.Subordinal-β sim x)
<β-trans : {Ξ± : Ordinal ββ} {Ξ² : Ordinal ββ} {Ξ³ : Ordinal ββ}
β Ξ± <β Ξ² β Ξ² <β Ξ³ β Ξ± <β Ξ³
<β-trans hβ hβ = <βββ€ββ<β hβ (<βββ€β hβ)
<β-wf : Wf (_<β_ {β} {β})
<β-wf {β} Ξ± = acc Ξ» Ξ² Ξ²<Ξ± β go Ξ² Ξ²<Ξ± (<-wf (fst Ξ²<Ξ±)) where
open Ordinal Ξ±
go : (Ξ² : Ordinal β) β (Ξ²<Ξ± : Ξ² <β Ξ±) β Acc _<_ (fst Ξ²<Ξ±) β Acc _<β_ Ξ²
go Ξ² Ξ²<Ξ± (acc h) = acc Ξ» Ξ³ Ξ³<Ξ² β go Ξ³
(<β-trans Ξ³<Ξ² Ξ²<Ξ±)
(h _ (snd (_ββ_.equiv (snd Ξ²<Ξ±) Β· fst Ξ³<Ξ²)))
Subordinal-preserves-<β : {Ξ± : Ordinal β} {x y : β Ξ± β}
β Ordinal._<_ Ξ± x y β Subordinal Ξ± x <β Subordinal Ξ± y
Subordinal-preserves-<β {Ξ± = Ξ±} {x} {y} x<y = (x , x<y) , ββ-sym Subsubordinal
Subordinal-reflects-<β : {Ξ± : Ordinal β} {x y : β Ξ± β}
β Subordinal Ξ± x <β Subordinal Ξ± y β Ordinal._<_ Ξ± x y
Subordinal-reflects-<β {Ξ± = Ξ±} {x} {y} ((z , z<y) , e) =
let
xβ‘z : x β‘ z
xβ‘z = Subordinal-injective (ββ-trans e Subsubordinal)
in transport (Ξ» i β Ordinal._<_ Ξ± (xβ‘z (~ i)) y) z<y
[<ββ<β]ββ€β : {Ξ± Ξ² : Ordinal β} β (β {Ξ³ : Ordinal β} β Ξ³ <β Ξ± β Ξ³ <β Ξ²) β Ξ± β€β Ξ²
[<ββ<β]ββ€β {Ξ± = Ξ±} {Ξ²} h =
let
f : β Ξ± β β β Ξ² β
f x = fst (h (x , ββ-refl))
hf : β x β Subordinal Ξ± x ββ Subordinal Ξ² (f x)
hf x = snd (h (x , ββ-refl))
in f , record where
open Ordinal Ξ²
pres-< {x} {y} h = Subordinal-reflects-<β
(<βββ€ββ<β
(βββ<ββ<β (ββ-sym (hf x)) (Subordinal-preserves-<β h))
(ββββ€β (hf y)))
segment-is-hf : β x β Path (β Subordinal Ξ± x β β β Subordinal Ξ² (f x) β)
(Ξ» (y , y<x) β f y , pres-< y<x)
(hf x ._ββ_.equiv .fst)
segment-is-hf x = funext Ξ» (y , y<x) β Ξ£-path
(Subordinal-injective
$ ββ-trans (ββ-sym (hf y))
$ ββ-trans (ββ-sym Subsubordinal)
$ ββ-trans (is-simulation.Subordinal-β (snd (ββββ€β (hf x))) (y , y<x))
$ Subsubordinal)
(<-thin _ _)
segment-is-equiv {x} =
transport (Ξ» i β is-equiv (segment-is-hf x (~ i))) (hf x ._ββ_.equiv .snd)We have everything we need to assemble the ordinal of ordinals, but the construction is complicated by the need to shift universe levels.
Ord : (β : Level) β Ordinal (lsuc β)
Ord β = record where
poset = record where
Ob = Ordinal β
_β€_ Ξ± Ξ² = Lift _ (Ξ± β€β Ξ²)
β€-thin (lift hβ) (lift hβ) = ap lift (β€β-thin hβ hβ)
β€-refl = lift β€β-refl
β€-trans (lift hβ) (lift hβ) = lift (β€β-trans hβ hβ)
β€-antisym (lift hβ) (lift hβ) = ββββ‘ (β€β-antisym hβ hβ)
_<_ Ξ± Ξ² = Lift _ (Ξ± <β Ξ²)
<-thin (lift hβ) (lift hβ) = ap lift (<β-thin hβ hβ)
<-wf = Wf-induction _<β_ <β-wf (Acc _<_) Ξ» Ξ± ih β acc (Ξ» y (lift h) β ih y h)
<ββ€β< (lift hβ) (lift hβ) = lift (<βββ€ββ<β hβ hβ)
[<β<]ββ€ h = lift ([<ββ<β]ββ€β (Ξ» h' β lower (h (lift h'))))
<ββ€ (lift h) = lift (<βββ€β h)Subordinals
of
Ordπ
Every ordinal at level β is a subordinal of
Ord.
Subordinal-Ord : {Ξ± : Ordinal β} β Subordinal (Ord β) Ξ± ββ Ξ±
Subordinal-Ord {Ξ± = Ξ±} = record where
equiv = (Ξ» (_ , lift (x , _)) β x) , is-isoβis-equiv record where
from x = Subordinal Ξ± x , lift (x , ββ-refl)
rinv x = refl
linv (Ξ² , lift (x , e)) =
Ξ£-pathp (sym (ββββ‘ e)) (apd (Ξ» _ β lift)
(Ξ£-pathp refl (is-propβpathp (Ξ» _ β ββ-thin) _ _)))
pres-< {Ξ²β , lift (xβ , eβ)} {Ξ²β , lift (xβ , eβ)} = prop-ext
(Lift-is-hlevel 1 <β-thin) (Ordinal.<-thin Ξ±)
(Ξ» h β
Subordinal-reflects-<β (βββ<ββ<β (ββ-sym eβ) (<βββ€ββ<β (lower h) (ββββ€β eβ))))
(Ξ» h β
lift (βββ<ββ<β eβ (<βββ€ββ<β (Subordinal-preserves-<β h) (ββββ€β (ββ-sym eβ)))))
<β-Ord : (Ξ± : Ordinal β) β Ξ± <β Ord β
<β-Ord Ξ± = Ξ± , ββ-sym Subordinal-OrdAs a consequence, Ord is a large ordinal β it
is not equivalent to any ordinal in the previous universe. In naΓ―ve set
theory, this leads to the Burali-Forti paradox.
Ord-large : (β : Level) β Β¬ Ξ£ (Ordinal β) (Ord β ββ_)
Ord-large β (Ξ© , e) = Ordinal.<-irrefl (Ord β) (lift Ξ©<Ξ©) where
Ξ©<Ξ© : Ξ© <β Ξ©
Ξ©<Ξ© = <βββ€ββ<β (<β-Ord Ξ©) (ββββ€β e)