Martin Escardo 4th May 2022.

\begin{code}

{-# OPTIONS --safe --without-K --lossy-unification #-}

open import UF.Univalence

module Ordinals.ToppedAdditionProperties
       (ua : Univalence)
       where

open import UF.Equiv
open import UF.FunExt
open import UF.Subsingletons
open import UF.UA-FunExt

private
 fe : FunExt
 fe = Univalence-gives-FunExt ua

 fe' : Fun-Ext
 fe' {๐“ค} {๐“ฅ} = fe ๐“ค ๐“ฅ

 pe : PropExt
 pe = Univalence-gives-PropExt ua

open import MLTT.Plus-Properties
open import MLTT.Spartan
open import Notation.CanonicalMap
open import Ordinals.Arithmetic fe
open import Ordinals.Closure fe using (โˆ‘-โ‰ƒโ‚’)
open import Ordinals.Equivalence
open import Ordinals.Injectivity
open import Ordinals.Maps
open import Ordinals.ToppedArithmetic fe
open import Ordinals.ToppedType fe
open import Ordinals.Type
open import Ordinals.Underlying
open import TypeTopology.SquashedSum fe
open import UF.Embeddings

open topped-ordinals-injectivity fe

alternative-plusโ‚’ : (ฯ„โ‚€ ฯ„โ‚ : Ordinalแต€ ๐“ค)
                  โ†’ [ ฯ„โ‚€ +แต’ ฯ„โ‚ ] โ‰ƒโ‚’ ([ ฯ„โ‚€ ] +โ‚’ [ ฯ„โ‚ ])
alternative-plusโ‚’ ฯ„โ‚€ ฯ„โ‚ = e
 where
  ฯ… = cases (ฮป โ‹† โ†’ ฯ„โ‚€) (ฮป โ‹† โ†’ ฯ„โ‚)

  f : โŸจ โˆ‘ ๐Ÿšแต’ ฯ… โŸฉ โ†’ โŸจ [ ฯ„โ‚€ ] +โ‚’ [ ฯ„โ‚ ] โŸฉ
  f (inl โ‹† , x) = inl x
  f (inr โ‹† , y) = inr y

  g : โŸจ [ ฯ„โ‚€ ] +โ‚’ [ ฯ„โ‚ ] โŸฉ โ†’ โŸจ โˆ‘ ๐Ÿšแต’ ฯ… โŸฉ
  g (inl x) = (inl โ‹† , x)
  g (inr y) = (inr โ‹† , y)

  ฮท : g โˆ˜ f โˆผ id
  ฮท (inl โ‹† , x) = refl
  ฮท (inr โ‹† , y) = refl

  ฮต : f โˆ˜ g โˆผ id
  ฮต (inl x) = refl
  ฮต (inr y) = refl

  f-is-equiv : is-equiv f
  f-is-equiv = qinvs-are-equivs f (g , ฮท , ฮต)
  f-is-op : is-order-preserving [ โˆ‘ ๐Ÿšแต’ ฯ… ] ([ ฯ„โ‚€ ] +โ‚’ [ ฯ„โ‚ ]) f

  f-is-op (inl โ‹† , _) (inl โ‹† , _) (inr (refl , l)) = l
  f-is-op (inl โ‹† , _) (inr โ‹† , _) (inl โ‹†)          = โ‹†
  f-is-op (inr โ‹† , _) (inl โ‹† , _) (inl l)          = l
  f-is-op (inr โ‹† , _) (inr โ‹† , _) (inr (refl , l)) = l

  g-is-op : is-order-preserving ([ ฯ„โ‚€ ] +โ‚’ [ ฯ„โ‚ ]) [ โˆ‘ ๐Ÿšแต’ ฯ… ] g
  g-is-op (inl _) (inl _) l = inr (refl , l)
  g-is-op (inl _) (inr _) โ‹† = inl โ‹†
  g-is-op (inr _) (inl _) ()
  g-is-op (inr _) (inr _) l = inr (refl , l)

  e : [ โˆ‘ ๐Ÿšแต’ ฯ… ] โ‰ƒโ‚’ ([ ฯ„โ‚€ ] +โ‚’ [ ฯ„โ‚ ])
  e = f , f-is-op , f-is-equiv , g-is-op

alternative-plus : (ฯ„โ‚€ ฯ„โ‚ : Ordinalแต€ ๐“ค)
                 โ†’ [ ฯ„โ‚€ +แต’ ฯ„โ‚ ] ๏ผ ([ ฯ„โ‚€ ] +โ‚’ [ ฯ„โ‚ ])
alternative-plus ฯ„โ‚€ ฯ„โ‚ = eqtoidโ‚’ (ua _) fe' _ _ (alternative-plusโ‚’ ฯ„โ‚€ ฯ„โ‚)

\end{code}

Added by Martin Escardo 2nd September 2026.

The successor sum of a countable family is the successor of the sum of
the family over ฯ‰.

\begin{code}

โˆ‘โ‚-is-successorโ‚’ : (ฯ„ : โ„• โ†’ Ordแต€) โ†’ [ โˆ‘โ‚ ฯ„ ] โ‰ƒโ‚’ (โˆ‘โ‚’ ฯ‰ ฯ„ +โ‚’ ๐Ÿ™โ‚’)
โˆ‘โ‚-is-successorโ‚’ ฯ„ = โ‰ƒโ‚’-trans
                      [ โˆ‘โ‚ ฯ„ ]
                      [ โˆ‘ (succโ‚’ ฯ‰) (cases ฯ„ (ฮป _ โ†’ ๐Ÿ™แต’)) ]
                      (โˆ‘โ‚’ ฯ‰ ฯ„ +โ‚’ ๐Ÿ™โ‚’)
                      II
                      III
 where
  ๐“ฎ : โ„• โ†ช โ„• + ๐Ÿ™
  ๐“ฎ = over , over-embedding

  I : (z : โ„• + ๐Ÿ™)
    โ†’ [ (ฯ„ โ†— ๐“ฎ) z ] โ‰ƒโ‚’ [ cases ฯ„ (ฮป _ โ†’ ๐Ÿ™แต’) z ]
  I (inl n) = โ†—-propertyโ‚’ ฯ„ ๐“ฎ n
  I (inr โ‹†) = โ†—-out-of-range ฯ„ ๐“ฎ (inr โ‹†) (ฮป n โ†’ +disjoint)

  II : [ โˆ‘โ‚ ฯ„ ] โ‰ƒโ‚’ [ โˆ‘ (succโ‚’ ฯ‰) (cases ฯ„ (ฮป _ โ†’ ๐Ÿ™แต’)) ]
  II = โˆ‘-โ‰ƒโ‚’ (succโ‚’ ฯ‰) (ฯ„ โ†— ๐“ฎ) (cases ฯ„ (ฮป _ โ†’ ๐Ÿ™แต’)) I

  ฯ… : โ„• + ๐Ÿ™ โ†’ Ordแต€
  ฯ… = cases ฯ„ (ฮป _ โ†’ ๐Ÿ™แต’)

  f : โŸจ โˆ‘ (succโ‚’ ฯ‰) ฯ… โŸฉ โ†’ โŸจ โˆ‘โ‚’ ฯ‰ ฯ„ +โ‚’ ๐Ÿ™โ‚’ โŸฉ
  f (inl n , x) = inl (n , x)
  f (inr โ‹† , _) = inr โ‹†

  g : โŸจ โˆ‘โ‚’ ฯ‰ ฯ„ +โ‚’ ๐Ÿ™โ‚’ โŸฉ โ†’ โŸจ โˆ‘ (succโ‚’ ฯ‰) ฯ… โŸฉ
  g (inl (n , x)) = inl n , x
  g (inr โ‹†)       = inr โ‹† , โ‹†

  ฮท : g โˆ˜ f โˆผ id
  ฮท (inl n , x) = refl
  ฮท (inr โ‹† , โ‹†) = refl

  ฮต : f โˆ˜ g โˆผ id
  ฮต (inl (n , x)) = refl
  ฮต (inr โ‹†)       = refl

  f-is-equiv : is-equiv f
  f-is-equiv = qinvs-are-equivs f (g , ฮท , ฮต)

  f-is-op : is-order-preserving [ โˆ‘ (succโ‚’ ฯ‰) ฯ… ] (โˆ‘โ‚’ ฯ‰ ฯ„ +โ‚’ ๐Ÿ™โ‚’) f
  f-is-op (inl n , _) (inl m , _) (inl l)          = inl l
  f-is-op (inl n , _) (inl m , _) (inr (refl , l)) = inr (refl , l)
  f-is-op (inl n , _) (inr โ‹† , _) (inl โ‹†)          = โ‹†
  f-is-op (inr โ‹† , _) (inl m , _) (inl l)          = ๐Ÿ˜-elim l
  f-is-op (inr โ‹† , _) (inr โ‹† , _) (inl l)          = ๐Ÿ˜-elim l
  f-is-op (inr โ‹† , _) (inr โ‹† , _) (inr (refl , l)) = ๐Ÿ˜-elim l

  g-is-op : is-order-preserving (โˆ‘โ‚’ ฯ‰ ฯ„ +โ‚’ ๐Ÿ™โ‚’) [ โˆ‘ (succโ‚’ ฯ‰) ฯ… ] g
  g-is-op (inl (n , _)) (inl (m , _)) (inl l)          = inl l
  g-is-op (inl (n , _)) (inl (m , _)) (inr (refl , l)) = inr (refl , l)
  g-is-op (inl (n , _)) (inr โ‹†)       โ‹†                = inl โ‹†
  g-is-op (inr โ‹†)       (inr โ‹†)       l                = ๐Ÿ˜-elim l

  III : [ โˆ‘ (succโ‚’ ฯ‰) (cases ฯ„ (ฮป _ โ†’ ๐Ÿ™แต’)) ] โ‰ƒโ‚’ (โˆ‘โ‚’ ฯ‰ ฯ„ +โ‚’ ๐Ÿ™โ‚’)
  III = f , f-is-op , f-is-equiv , g-is-op

โˆ‘โ‚-is-successor : (ฯ„ : โ„• โ†’ Ordแต€) โ†’ [ โˆ‘โ‚ ฯ„ ] ๏ผ (โˆ‘โ‚’ ฯ‰ ฯ„ +โ‚’ ๐Ÿ™โ‚’)
โˆ‘โ‚-is-successor ฯ„ = eqtoidโ‚’ (ua _) fe' _ _ (โˆ‘โ‚-is-successorโ‚’ ฯ„)

\end{code}

End of addition.