{-# OPTIONS --safe --cubical-compatible --guardedness --exact-split --double-check #-}
module ALMA.Cosmos.Carried.SeqColimitS where
open import Agda.Primitive using (Level; _⊔_; lsuc)
open import Agda.Builtin.Sigma using (Σ; _,_)
open import Agda.Builtin.Equality using (_≡_)
open import Data.Nat.Base using (ℕ; zero; suc)
open import ALMA.Base.MCorrSetoid using (SysEq)
open import ALMA.Base.MCorrSetoidCat using
(FMapˢ; FMˢ; idFMˢ; compFMˢ; _≈FM_; ≈FM-refl; ≈FM-trans
; ∘-resp-≈FM; sym-assocFM; identityʳFM)
open SysEq
shift : ℕ → ℕ → ℕ
shift zero m = m
shift (suc d) m = shift d (suc m)
record Chainˢ (i a b ℓa ℓe : Level) : Set (lsuc (i ⊔ a ⊔ b ⊔ ℓa ⊔ ℓe)) where
field
X : ℕ → SysEq i a b ℓa ℓe
emb : (m : ℕ) → FMˢ (X m) (X (suc m))
embˢ^d : (m d : ℕ) → FMˢ (X m) (X (shift d m))
embˢ^d m zero = idFMˢ
embˢ^d m (suc d) = compFMˢ (embˢ^d (suc m) d) (emb m)
open Chainˢ public
record Coconeˢ {i a b ℓa ℓe : Level} (ch : Chainˢ i a b ℓa ℓe)
(L : SysEq i a b ℓa ℓe)
: Set (lsuc (i ⊔ a ⊔ b ⊔ ℓa ⊔ ℓe)) where
field
leg : (m : ℕ) → FMˢ (X ch m) L
coh : (m : ℕ)
→ compFMˢ (leg (suc m)) (emb ch m) ≈FM leg m
open Coconeˢ public
module _ {i a b ℓa ℓe : Level} {ch : Chainˢ i a b ℓa ℓe}
{L : SysEq i a b ℓa ℓe} (coc : Coconeˢ ch L) where
leg-coh^dˢ : (m d : ℕ)
→ compFMˢ (leg coc (shift d m)) (embˢ^d ch m d) ≈FM leg coc m
leg-coh^dˢ m zero =
identityʳFM {f = leg coc m}
leg-coh^dˢ m (suc d) =
≈FM-trans {X = X ch m} {Y = L}
{f = compFMˢ (leg coc (shift d (suc m)))
(compFMˢ (embˢ^d ch (suc m) d) (emb ch m))}
{g = compFMˢ (compFMˢ (leg coc (shift d (suc m)))
(embˢ^d ch (suc m) d))
(emb ch m)}
{h = leg coc m}
(sym-assocFM {W = X ch m} {X = X ch (suc m)}
{Y = X ch (shift d (suc m))} {Z = L}
{f = emb ch m} {g = embˢ^d ch (suc m) d}
{h = leg coc (shift d (suc m))})
(≈FM-trans {X = X ch m} {Y = L}
{f = compFMˢ (compFMˢ (leg coc (shift d (suc m)))
(embˢ^d ch (suc m) d))
(emb ch m)}
{g = compFMˢ (leg coc (suc m)) (emb ch m)}
{h = leg coc m}
(∘-resp-≈FM {X = X ch m} {Y = X ch (suc m)} {Z = L}
{F₁ = emb ch m} {F₂ = emb ch m}
{G₁ = compFMˢ (leg coc (shift d (suc m)))
(embˢ^d ch (suc m) d)}
{G₂ = leg coc (suc m)}
(≈FM-refl (emb ch m))
(leg-coh^dˢ (suc m) d))
(coh coc m))
record IsColimitˢ {i a b ℓa ℓe : Level} {ch : Chainˢ i a b ℓa ℓe}
(Apex : SysEq i a b ℓa ℓe) (coc : Coconeˢ ch Apex)
: Set (lsuc (i ⊔ a ⊔ b ⊔ ℓa ⊔ ℓe)) where
field
mediate : {Y : SysEq i a b ℓa ℓe} (k : Coconeˢ ch Y) → FMˢ Apex Y
triangle : {Y : SysEq i a b ℓa ℓe} (k : Coconeˢ ch Y) (m : ℕ)
→ compFMˢ (mediate k) (leg coc m) ≈FM leg k m
unique : {Y : SysEq i a b ℓa ℓe} (h : FMˢ Apex Y) (k : Coconeˢ ch Y)
→ ((m : ℕ) → compFMˢ h (leg coc m) ≈FM leg k m)
→ h ≈FM mediate k
open IsColimitˢ public
record Colimitˢ (i a b ℓa ℓe : Level) (ch : Chainˢ i a b ℓa ℓe)
: Set (lsuc (i ⊔ a ⊔ b ⊔ ℓa ⊔ ℓe)) where
field
Apex : SysEq i a b ℓa ℓe
coc : Coconeˢ ch Apex
has : IsColimitˢ Apex coc
open Colimitˢ public
record Limitˢ {i a b ℓa ℓe : Level} (ch : Chainˢ i a b ℓa ℓe)
: Set (lsuc (i ⊔ a ⊔ b ⊔ ℓa ⊔ ℓe)) where
field
L : SysEq i a b ℓa ℓe
inj-u : (m : ℕ) → I (X ch m) → I L
inj-shape : (m : ℕ) (x : I (X ch m))
→ A (X ch m) x → A L (inj-u m x)
inj-coh : (m : ℕ) (x : I (X ch m))
→ inj-u (suc m) (FMapˢ.u (FMˢ.mor (emb ch m)) x) ≡ inj-u m x
rep : (v : I L)
→ Σ ℕ λ m → Σ (I (X ch m)) λ x → inj-u m x ≡ v
open Limitˢ public