|
| 1 | +{-# OPTIONS --without-K --safe #-} |
| 2 | + |
| 3 | + |
| 4 | +open import Categories.Category.Core |
| 5 | +open import Experiments.Category.Abelian |
| 6 | + |
| 7 | +module Experiments.Category.Instance.NonNegativeChainComplexes {o ℓ e} {𝒜 : Category o ℓ e} (abelian : Abelian 𝒜) where |
| 8 | + |
| 9 | +open import Level |
| 10 | + |
| 11 | +open import Data.Nat using (ℕ) |
| 12 | + |
| 13 | +open import Categories.Morphism.Reasoning 𝒜 |
| 14 | + |
| 15 | +open Category 𝒜 |
| 16 | +open Abelian abelian |
| 17 | + |
| 18 | +open HomReasoning |
| 19 | +open Equiv |
| 20 | + |
| 21 | +record ChainComplex : Set (o ⊔ ℓ ⊔ e) where |
| 22 | + field |
| 23 | + Chain : ℕ → Obj |
| 24 | + boundary : ∀ (n : ℕ) → Chain (ℕ.suc n) ⇒ Chain n |
| 25 | + bounary-zero : ∀ {n} → boundary n ∘ boundary (ℕ.suc n) ≈ zero⇒ |
| 26 | + |
| 27 | +record ChainMap (V W : ChainComplex) : Set (ℓ ⊔ e) where |
| 28 | + private |
| 29 | + module V = ChainComplex V |
| 30 | + module W = ChainComplex W |
| 31 | + field |
| 32 | + hom : ∀ (n : ℕ) → V.Chain n ⇒ W.Chain n |
| 33 | + commute : ∀ {n : ℕ} → (hom n ∘ V.boundary n) ≈ (W.boundary n ∘ hom (ℕ.suc n)) |
| 34 | + |
| 35 | +ChainComplexes : Category (o ⊔ ℓ ⊔ e) (ℓ ⊔ e) e |
| 36 | +ChainComplexes = record |
| 37 | + { Obj = ChainComplex |
| 38 | + ; _⇒_ = ChainMap |
| 39 | + ; _≈_ = λ f g → |
| 40 | + let module f = ChainMap f |
| 41 | + module g = ChainMap g |
| 42 | + in ∀ {n : ℕ} → f.hom n ≈ g.hom n |
| 43 | + ; id = record |
| 44 | + { hom = λ _ → id |
| 45 | + ; commute = id-comm-sym |
| 46 | + } |
| 47 | + ; _∘_ = λ {U} {V} {W} f g → |
| 48 | + let module U = ChainComplex U |
| 49 | + module V = ChainComplex V |
| 50 | + module W = ChainComplex W |
| 51 | + module f = ChainMap f |
| 52 | + module g = ChainMap g |
| 53 | + in record |
| 54 | + { hom = λ n → f.hom n ∘ g.hom n |
| 55 | + ; commute = λ {n} → begin |
| 56 | + (f.hom n ∘ g.hom n) ∘ U.boundary n ≈⟨ pullʳ g.commute ⟩ |
| 57 | + f.hom n ∘ V.boundary n ∘ g.hom (ℕ.suc n) ≈⟨ extendʳ f.commute ⟩ |
| 58 | + W.boundary n ∘ f.hom (ℕ.suc n) ∘ g.hom (ℕ.suc n) ∎ |
| 59 | + } |
| 60 | + ; assoc = assoc |
| 61 | + ; sym-assoc = sym-assoc |
| 62 | + ; identityˡ = identityˡ |
| 63 | + ; identityʳ = identityʳ |
| 64 | + ; identity² = identity² |
| 65 | + ; equiv = record |
| 66 | + { refl = refl |
| 67 | + ; sym = λ eq → sym eq |
| 68 | + ; trans = λ eq₁ eq₂ → trans eq₁ eq₂ |
| 69 | + } |
| 70 | + ; ∘-resp-≈ = λ eq₁ eq₂ → ∘-resp-≈ eq₁ eq₂ |
| 71 | + } |
0 commit comments