module A201605.AltArtemov.Library.Fin where
open import A201605.AltArtemov.Library.O public
ren-fin : ∀ {g g′} → g′ ≥ g → Fin g → Fin g′
ren-fin base i = i
ren-fin (weak h) i = suc (ren-fin h i)
ren-fin (lift h) zero = zero
ren-fin (lift h) (suc i) = suc (ren-fin h i)
wk-fin : ∀ {g} → Fin g → Fin (suc g)
wk-fin = ren-fin ≥wk
wk*-fin : ∀ {g} → Fin 0 → Fin g
wk*-fin ()
ren-fin-id : ∀ {g} (i : Fin g) → ren-fin ≥id i ≡ i
ren-fin-id zero = refl
ren-fin-id (suc i) = cong suc (ren-fin-id i)
ren-fin-○ : ∀ {g g′ g″} (h′ : g″ ≥ g′) (h : g′ ≥ g) (i : Fin g) →
ren-fin h′ (ren-fin h i) ≡ ren-fin (h′ ○ h) i
ren-fin-○ base h i = refl
ren-fin-○ (weak h′) h i = cong suc (ren-fin-○ h′ h i)
ren-fin-○ (lift h′) (weak h) i = cong suc (ren-fin-○ h′ h i)
ren-fin-○ (lift h′) (lift h) zero = refl
ren-fin-○ (lift h′) (lift h) (suc i) = cong suc (ren-fin-○ h′ h i)
i₀ : ∀ {g} → Fin (suc g)
i₀ = zero
i₁ : ∀ {g} → Fin (suc (suc g))
i₁ = suc i₀
i₂ : ∀ {g} → Fin (suc (suc (suc g)))
i₂ = suc i₁