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₁