{-# OPTIONS --without-K --safe #-} module Categories.Category.Finite.Fin.Construction.Discrete where open import Data.Nat.Base using (ℕ) open import Data.Fin.Base using (Fin; suc) open import Data.Fin.Patterns open import Relation.Binary.PropositionalEquality.Core as ≡ using (_≡_ ; refl) open import Categories.Category.Finite.Fin open import Categories.Category.Core using (Category) private card : ∀ {n} (j k : Fin n) → ℕ card {ℕ.suc n} 0F 0F = 1 card {ℕ.suc n} 0F (suc k) = 0 card {ℕ.suc n} (suc j) 0F = 0 card {ℕ.suc n} (suc j) (suc k) = card j k id : ∀ {n} (a : Fin n) → Fin (card a a) id {ℕ.suc n} 0F = 0F id {ℕ.suc n} (suc a) = id a comp : ∀ n {a b c : Fin n} → Fin (card b c) → Fin (card a b) → Fin (card a c) comp (ℕ.suc n) {0F} {0F} {0F} f g = 0F comp (ℕ.suc n) {suc a} {suc b} {suc c} f g = comp n f g assoc : ∀ n {a b c d : Fin n} {f : Fin (card a b)} {g : Fin (card b c)} {h : Fin (card c d)} → (comp n (comp n h g) f) ≡ comp n h (comp n g f) assoc (ℕ.suc n) {0F} {0F} {0F} {0F} {f} {g} {h} = refl assoc (ℕ.suc n) {suc a} {suc b} {suc c} {suc d} {f} {g} {h} = assoc n identityˡ : ∀ n {a b : Fin n} {f : Fin (card a b)} → comp n (id b) f ≡ f identityˡ (ℕ.suc n) {0F} {0F} {0F} = refl identityˡ (ℕ.suc n) {suc a} {suc b} {f} = identityˡ n identityʳ : ∀ n {a b : Fin n} {f : Fin (card a b)} → comp n f (id a) ≡ f identityʳ (ℕ.suc n) {0F} {0F} {0F} = refl identityʳ (ℕ.suc n) {suc a} {suc b} {f} = identityʳ n module _ (n : ℕ) where DiscreteShape : FinCatShape DiscreteShape = shapeHelper record { size = n ; ∣_⇒_∣ = card {n} ; id = id {n} _ ; _∘_ = comp n ; assoc = assoc n ; identityˡ = identityˡ n ; identityʳ = identityʳ n } Discrete : ∀ n → Category _ _ _ Discrete n = FinCategory (DiscreteShape n) module Discrete n = Category (Discrete n)