{-# OPTIONS --without-K --rewriting --overlapping-instances #-} module Pi.Common.FinHelpers where open import HoTT hiding (⟨_⟩) open import Pi.Common.Misc ⟨_⟩ : ∀ {n} → Fin n → Fin (S n) ⟨_⟩ = Fin-S S⟨_⟩ : ∀ {n} → Fin n → Fin (S n) S⟨ k , kltn ⟩ = S k , <-ap-S kltn _≤^_ : {m : ℕ} -> Fin m -> Fin m -> Type₀ k ≤^ n = (k .fst) < S (n .fst) <-down : {n k : ℕ} -> (S n < k) -> (n < k) <-down p = <-cancel-S (ltSR p) Fin= : {n : ℕ} -> (x y : ℕ) -> (x == y) -> (px : x < n) -> (py : y < n) -> (((x , px) :> Fin n) == ((y , py) :> Fin n)) Fin= {n} x y p xp yp = pair= p (from-transp (λ z → z < n) p (<-has-all-paths (transport (λ z → z < n) p xp) yp)) Fin-has-dec-eq-p : {n : ℕ} → has-dec-eq (Fin n) Fin-has-dec-eq-p {n} (O , xp) (O , yp) = inl (pair= idp (<-has-all-paths xp yp)) Fin-has-dec-eq-p {n} (O , xp) (S y , yp) = inr (λ {()}) Fin-has-dec-eq-p {n} (S x , xp) (O , yp) = inr (λ {()}) Fin-has-dec-eq-p {S n} (S x , xp) (S y , yp) with (Fin-has-dec-eq-p {n} (x , <-cancel-S xp) (y , <-cancel-S yp)) ... | inl q = inl (Fin= (S x) (S y) (ap S (ap fst q)) xp yp) ... | inr q = inr λ qq → q (Fin= x y (ℕ-S-is-inj x y (ap fst qq)) (<-cancel-S xp) (<-cancel-S yp)) instance Fin-is-set-p : {n : ℕ} → is-set (Fin n) Fin-is-set-p = dec-eq-is-set Fin-has-dec-eq-p instance Fin1-level : is-contr (Fin 1) Fin1-level = has-level-in ((0 , ltS) , λ { (O , ϕ) → fin= idp ; (S n , ltSR ()) }) private variable k : ℕ fzero : Fin (S k) fzero = (0 , O<S _) toℕ : Fin k → ℕ toℕ = fst abstract toℕ-inj : {fj fk : Fin k} → toℕ fj == toℕ fk → fj == fk toℕ-inj {fj = fj} {fk} p = pair= p prop-has-all-paths-↓ ap-toℕ-equiv : {fj fk : Fin k} → is-equiv (ap toℕ {x = fj} {y = fk}) ap-toℕ-equiv = is-eq (ap toℕ) toℕ-inj (λ _ → prop-has-all-paths _ _) (λ _ → prop-has-all-paths _ _) abstract S⟨⟩-inj : {n : ℕ} → {fj fk : Fin n} → S⟨ fj ⟩ == S⟨ fk ⟩ → fj == fk S⟨⟩-inj = toℕ-inj ∘ ℕ-S-is-inj _ _ ∘ ap toℕ ap-S⟨⟩-equiv : {n : ℕ} → {fj fk : Fin n} → is-equiv (ap S⟨_⟩ {x = fj} {y = fk}) ap-S⟨⟩-equiv {n} {fj} {fk} = is-eq (ap S⟨_⟩) S⟨⟩-inj (λ _ → prop-has-all-paths _ _) (λ _ → prop-has-all-paths _ _)