Fin
Alice Laroche, 25th September 2023 With additions by Fredrik Nordvall Forsberg on 9 October 2025 Fin n is an ordinal{-# OPTIONS --safe --without-K --lossy-unification #-} module Ordinals.Fin where open import Fin.Embeddings open import Fin.Order open import Fin.Type open import MLTT.Spartan hiding (_^_) open import MLTT.Plus-Properties open import Naturals.Addition renaming (_+_ to _+β_) open import Naturals.Multiplication open import Naturals.Exponentiation open import Notation.Order open import Ordinals.Equivalence open import Ordinals.Maps open import Ordinals.Notions open import Ordinals.Type open import UF.Base open import UF.Equiv open import UF.FunExt open import UF.UA-FunExt open import UF.Univalence import Naturals.Order as β <-is-prop-valued : (n : β) β is-prop-valued {X = Fin n} _<_ <-is-prop-valued n i j = β.<-is-prop-valued β¦ i β§ β¦ j β§ <-is-well-founded : (n : β) β is-well-founded {X = Fin n} _<_ <-is-well-founded n i = recurs (β.<-is-well-founded (β¦ i β§)) where recurs : {i : Fin n} β is-accessible {X = β} _<_ (β¦ i β§) β is-accessible {X = Fin n} _<_ i recurs (acc recβ) = acc (Ξ» j r β recurs (recβ β¦ j β§ r)) <-is-extensional : (n : β) β is-extensional {X = Fin n} _<_ <-is-extensional 0 x y iβΌj jβΌi = π-elim x <-is-extensional (succ n) π π iβΌj jβΌi = refl <-is-extensional (succ n) π (suc x) iβΌj jβΌi = π-elim (jβΌi π β) <-is-extensional (succ n) (suc i) π iβΌj jβΌi = π-elim (iβΌj π β) <-is-extensional (succ n) (suc i) (suc j) iβΌj jβΌi = ap suc (<-is-extensional n i j (iβΌj β suc) (jβΌi β suc)) <-trans : (n : β) β is-transitive {X = Fin n} _<_ <-trans n i j k = β.<-trans β¦ i β§ β¦ j β§ β¦ k β§ <-is-well-order : (n : β) β is-well-order {X = Fin n} _<_ <-is-well-order n = <-is-prop-valued n , <-is-well-founded n , <-is-extensional n , <-trans n Fin-ordinal : (n : β) β Ord Fin-ordinal n = Fin n , _<_ , <-is-well-order nAdded 9 October 2025 by Fredrik Nordvall Forsberg. The construction of finite ordinals, from natural numbers to ordinals, preserves many arithmetical operations.module _ (ua : Univalence) where private fe : FunExt fe = Univalence-gives-FunExt ua fe' : Fun-Ext fe' {π€} {π₯} = fe π€ π₯ open import Ordinals.Arithmetic fe open import Ordinals.AdditionProperties ua open import Ordinals.MultiplicationProperties ua open import Ordinals.OrdinalOfOrdinals ua Fin-ordinal-zero : Fin-ordinal 0 οΌ πβ Fin-ordinal-zero = eqtoidβ (ua _) fe' (Fin-ordinal 0) πβ (id , (Ξ» x y l β π-elim x) , id-is-equiv π , (Ξ» x y l β π-elim x)) Fin-ordinal-succ : (n : β) β Fin-ordinal (succ n) οΌ πβ +β Fin-ordinal n Fin-ordinal-succ n = eqtoidβ (ua _) fe' Ξ± Ξ² (f , f-order-equiv) where Ξ± = Fin-ordinal (succ n) Ξ² = πβ +β Fin-ordinal n f : Fin n + π β π + Fin n f = +-commutative f-equiv : is-equiv f f-equiv = qinvs-are-equivs f (g , Ξ΅ , Ξ·) where g : π + Fin n β Fin n + π g = +-commutative Ξ΅ : β x β g (f x) οΌ x Ξ΅ (inl x) = refl Ξ΅ (inr x) = refl Ξ· : β x β f (g x) οΌ x Ξ· (inl x) = refl Ξ· (inr x) = refl f-order-preserving : is-order-preserving Ξ± Ξ² f f-order-preserving (inl n) (inl m) l = l f-order-preserving (inr β) (inl m) l = l f-order-preserving (inl n) (inr β) l = π-elim l f-order-preserving (inr β) (inr β) l = π-elim l f-order-reflecting : is-order-reflecting Ξ± Ξ² f f-order-reflecting (inl n) (inl m) l = l f-order-reflecting (inr β) (inl m) l = l f-order-reflecting (inl n) (inr β) l = π-elim l f-order-reflecting (inr β) (inr β) l = π-elim l f-order-equiv : is-order-equiv Ξ± Ξ² f f-order-equiv = order-preserving-reflecting-equivs-are-order-equivs Ξ± Ξ² f f-equiv f-order-preserving f-order-reflectingThe construction of finite ordinals preserves addition.Fin-ordinal-+β : (n m : β) β Fin-ordinal (n +β m) οΌ Fin-ordinal n +β Fin-ordinal m Fin-ordinal-+β zero m = F (0 +β m) οΌβ¨ ap F (zero-left-neutral m) β© F m οΌβ¨ πβ-left-neutral (F m) β»ΒΉ β© πβ +β F m οΌβ¨ ap (_+β F m) Fin-ordinal-zero β»ΒΉ β© F zero +β F m β where F = Fin-ordinal Fin-ordinal-+β (succ n) m = F (succ n +β m) οΌβ¨ ap F (succ-left n m) β© F (succ (n +β m)) οΌβ¨ Fin-ordinal-succ (n +β m) β© πβ +β F (n +β m) οΌβ¨ ap (πβ +β_) (Fin-ordinal-+β n m) β© πβ +β (F n +β F m) οΌβ¨ +β-assoc πβ (F n) (F m) β»ΒΉ β© (πβ +β F n) +β F m οΌβ¨ ap (_+β F m) (Fin-ordinal-succ n β»ΒΉ) β© F (succ n) +β F m β where F = Fin-ordinal Fin-ordinal-one : Fin-ordinal 1 οΌ πβ Fin-ordinal-one = Fin-ordinal 1 οΌβ¨ Fin-ordinal-succ 0 β© πβ +β Fin-ordinal 0 οΌβ¨ ap (πβ +β_) Fin-ordinal-zero β© πβ +β πβ οΌβ¨ πβ-right-neutral πβ β© πβ β Fin-ordinal-succ' : (n : β) β Fin-ordinal (succ n) οΌ Fin-ordinal n +β πβ Fin-ordinal-succ' n = Fin-ordinal (succ n) οΌβ¨reflβ© Fin-ordinal (n +β 1) οΌβ¨ Fin-ordinal-+β n 1 β© Fin-ordinal n +β Fin-ordinal 1 οΌβ¨ ap (Fin-ordinal n +β_) Fin-ordinal-one β© Fin-ordinal n +β πβ β Fin-ordinal-two : Fin-ordinal 2 οΌ πβ Fin-ordinal-two = Fin-ordinal-succ' 1 β ap (_+β πβ) Fin-ordinal-one Fin-ordinal-three : Fin-ordinal 3 οΌ πβ Fin-ordinal-three = Fin-ordinal-succ' 2 β ap (_+β πβ) Fin-ordinal-twoThe construction of finite ordinals preserves multiplication.Fin-ordinal-Γβ : (n m : β) β Fin-ordinal (n * m) οΌ Fin-ordinal n Γβ Fin-ordinal m Fin-ordinal-Γβ n zero = transportβ»ΒΉ (Ξ» - β - οΌ Fin-ordinal n Γβ -) Fin-ordinal-zero (Γβ-πβ-right (Fin-ordinal n) β»ΒΉ) Fin-ordinal-Γβ n (succ m) = F (n +β n * m) οΌβ¨ Fin-ordinal-+β n (n * m) β© F n +β F (n * m) οΌβ¨ ap (F n +β_) (Fin-ordinal-Γβ n m) β© F n +β F n Γβ F m οΌβ¨ I β© F n Γβ πβ +β F n Γβ F m οΌβ¨ Γβ-distributes-+β-right (F n) πβ (F m) β»ΒΉ β© F n Γβ (πβ +β F m) οΌβ¨ ap (F n Γβ_) (Fin-ordinal-succ m β»ΒΉ) β© F n Γβ F (succ m) β where F = Fin-ordinal I = ap (_+β F n Γβ F m) (πβ-right-neutral-Γβ (F n) β»ΒΉ)The construction of finite ordinals is order preserving.Fin-ordinal-preserves-β€ : {n m : β} β n β€ m β Fin-ordinal n β΄ Fin-ordinal m Fin-ordinal-preserves-β€ {zero} {m} l = transportβ»ΒΉ (_β΄ Fin-ordinal m) Fin-ordinal-zero (πβ-least-β΄ (Fin-ordinal m)) Fin-ordinal-preserves-β€ {succ n} {zero} l = π-elim l Fin-ordinal-preserves-β€ {succ n} {succ m} l = transportββ»ΒΉ _β΄_ (Fin-ordinal-succ n) (Fin-ordinal-succ m) (+β-right-monotone-β΄ πβ (Fin-ordinal n) (Fin-ordinal m) (Fin-ordinal-preserves-β€ l)) Fin-ordinal-succ-positive : (n : β) β πβ β΄ Fin-ordinal (succ n) Fin-ordinal-succ-positive n = transport (_β΄ Fin-ordinal (succ n)) Fin-ordinal-one (Fin-ordinal-preserves-β€ β)The construction of finite ordinals preserves exponentiation whenever the base is positive.open import UF.PropTrunc open import UF.Size module _ (pt : propositional-truncations-exist) (sr : Set-Replacement pt) where open import Ordinals.Exponentiation.Supremum ua pt sr Fin-ordinal-^β : (n m : β) β let n' = succ n in Fin-ordinal (n' ^ m) οΌ Fin-ordinal n' ^β Fin-ordinal m Fin-ordinal-^β n zero = Fin-ordinal (succ n ^ zero) οΌβ¨reflβ© Fin-ordinal 1 οΌβ¨ Fin-ordinal-one β© πβ οΌβ¨ I β© Fin-ordinal (succ n) ^β πβ οΌβ¨ II β© Fin-ordinal (succ n) ^β Fin-ordinal zero β where I = ^β-satisfies-zero-specification (Fin-ordinal (succ n)) β»ΒΉ II = ap (Fin-ordinal (succ n) ^β_) (Fin-ordinal-zero β»ΒΉ) Fin-ordinal-^β n (succ m) = Fin-ordinal (n' ^ succ m) οΌβ¨reflβ© Fin-ordinal (n' * n' ^ m) οΌβ¨ I β© Fin-ordinal (n' ^ m * n') οΌβ¨ II β© Fin-ordinal (n' ^ m) Γβ Fin-ordinal n' οΌβ¨ III β© Fin-ordinal n' ^β Fin-ordinal m Γβ Fin-ordinal n' οΌβ¨ IV β© Fin-ordinal n' ^β (Fin-ordinal m +β πβ) οΌβ¨ V β© Fin-ordinal n' ^β Fin-ordinal (succ m) β where n' = succ n I = ap Fin-ordinal (mult-commutativity n' (n' ^ m)) II = Fin-ordinal-Γβ (n' ^ m) n' III = ap (_Γβ Fin-ordinal n') (Fin-ordinal-^β n m) IV = ^β-satisfies-succ-specification (Fin-ordinal n') (Fin-ordinal-succ-positive n) (Fin-ordinal m) β»ΒΉ V = ap (Fin-ordinal n' ^β_) (Fin-ordinal-succ' m β»ΒΉ)