Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
d4fa986
The isomorphism between two coequalizers fits into a triangle
tillrampe May 30, 2025
7236d64
Add a type/proposition expressing the existence of all coequalizers
tillrampe May 30, 2025
f78d033
Import more properties of coequalizers and hide some definitions to a…
tillrampe May 30, 2025
51481b3
Add proof that split coequalizers are coequalizers
tillrampe May 30, 2025
ef26d28
Proof that a map between parallel pairs induces a map between the res…
tillrampe May 30, 2025
9d1c420
Prove that a coequailzer remains coequalizer after replacing the obje…
tillrampe May 30, 2025
48637b4
Prove that coequalizers commute with coequalizers
tillrampe May 30, 2025
dc1d945
Add a type/proposition expressing that a functor preserves coequalizers
tillrampe May 30, 2025
90676f4
Add definition of a bicategory with local coequalizers
tillrampe May 30, 2025
57a260d
Clean up open import prelude; add explicit using and avoid hiding
tillrampe May 31, 2025
49c84e7
Shorten proof by using shorthands
tillrampe May 31, 2025
3652cf2
Shorten proof by using shorthands
tillrampe Jun 1, 2025
06c4a40
Shorten proof by using shorthands
tillrampe Jun 1, 2025
7dfcff9
Shorten proof by using shorthands
tillrampe Jun 5, 2025
570aa8a
Shorten proof by contracting two successive instances of assoc
tillrampe Jun 5, 2025
38795e7
Shorten proof by using f' and g' as a shorthand
tillrampe Jun 5, 2025
b32a068
Renaming the category variable to avoid name clashes with variable na…
tillrampe Jun 5, 2025
3248916
Shorten proof by using shorthands
tillrampe Jun 5, 2025
237ae34
Shorten proof by using shorthands
tillrampe Jun 5, 2025
0bf2dd6
Shorten proof by using shorthands
tillrampe Jun 5, 2025
e5a2917
Shorten proof by using shorthands
tillrampe Jun 5, 2025
9c3da6b
Refine hole
tillrampe Jun 5, 2025
9729c33
Shorten proof by using shorthands
tillrampe Jun 5, 2025
73daeb3
Improve read flow by aligning code blocks
tillrampe Jun 5, 2025
ba306f5
Shorten proof by using shorthands
tillrampe Jun 5, 2025
2ddaa2b
Remove trailing whitespace
tillrampe Jun 5, 2025
e112fa1
Shorten proof by using shorthands
tillrampe Jun 5, 2025
285bf27
Add using to open command to keep name space clean
tillrampe Jun 5, 2025
b440872
Shorten open command to unify code: the module HomReasoning is alread…
tillrampe Jun 5, 2025
10871f4
Align the proofs
tillrampe Jun 8, 2025
e23aa57
Don't open instances of coequalizers when it requires renaming
tillrampe Jun 8, 2025
f9e9a3e
Don't open instances of coequalizers when it requires renaming
tillrampe Jun 8, 2025
704aa72
open Coeequalizer in the module MapBetweenCoequalizers
tillrampe Jun 8, 2025
44587f7
Rename the components of coeqcoeq^f^i
tillrampe Jun 8, 2025
eb7fcfd
open Coequalizer in the module CoequalizerOfCoequalizer
tillrampe Jun 8, 2025
c8756b1
Add a comment explaining the naming convention
tillrampe Jun 8, 2025
b0f6438
Remove all implicit arguments that are not actually used
tillrampe Jun 8, 2025
ef3b33c
Remove implicit arguments that are not actually used
tillrampe Jun 11, 2025
916bbc5
Lift parameters that are common to all functions in MapBetweenCoequal…
tillrampe Jun 11, 2025
549075f
Gather lemmas about split coequalizers a module which is opened publi…
tillrampe Jun 11, 2025
4cffe1f
Merge branch 'coequalizer' into localcoequalizers
tillrampe Jun 16, 2025
6949a16
Remove the custom definition of pre-/post composition functor and use…
tillrampe Jun 16, 2025
c49c67b
Rename variables to improve readability and consistency
tillrampe Jun 16, 2025
73e86e2
Place pre- and postcomposition of local coequalizers outside the reco…
tillrampe Jun 16, 2025
3551a95
Rename the functions that pre- resp. postcompose a 1-cell with a loca…
tillrampe Jun 16, 2025
ab43832
Add using clauses to import commands
tillrampe Jun 23, 2025
debac42
Remove unnecessary import command
tillrampe Jun 23, 2025
2363999
Open Coequalizer coeq in two constructions
tillrampe Jun 23, 2025
f96a29e
Open _\cong_ in the entire file
tillrampe Jun 23, 2025
ec4f727
Merge branch 'master' into localcoequalizers
JacquesCarette Jun 23, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions src/Categories/Bicategory/LocalCoequalizers.agda
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
{-# OPTIONS --without-K --safe #-}

open import Categories.Bicategory

module Categories.Bicategory.LocalCoequalizers {o ℓ e t} (𝒞 : Bicategory o ℓ e t) where

open import Categories.Diagram.Coequalizer using (Coequalizer; Coequalizers)
open import Level using (_⊔_)
open import Categories.Functor.Properties using (PreservesCoequalizers)
import Categories.Bicategory.Extras as Bicat
open Bicat 𝒞


record LocalCoequalizers : Set (o ⊔ ℓ ⊔ e ⊔ t) where
field
localCoequalizers : (A B : Obj) Coequalizers (hom A B)
precompPreservesCoequalizer : {A B E : Obj} (f : E ⇒₁ A)
PreservesCoequalizers (-⊚_ {E} {A} {B} f)
postcompPreservesCoequalizer : {A B E : Obj} (f : B ⇒₁ E)
PreservesCoequalizers (_⊚- {B} {E} {A} f)

open LocalCoequalizers

module _ (localcoeq : LocalCoequalizers)
{A B E : Obj} {X Y : A ⇒₁ B} {α β : X ⇒₂ Y} where

_coeq-◁_ : (coeq : Coequalizer (hom A B) α β) (f : E ⇒₁ A)
Coequalizer (hom E B) (α ◁ f) (β ◁ f)
coeq coeq-◁ f = record
{ obj = obj ∘₁ f
; arr = arr ◁ f
; isCoequalizer = precompPreservesCoequalizer localcoeq f {coeq = coeq}
}
where
open Coequalizer coeq

_▷-coeq_ : (f : B ⇒₁ E) (coeq : Coequalizer (hom A B) α β)
Coequalizer (hom A E) (f ▷ α) (f ▷ β)
f ▷-coeq coeq = record
{ obj = f ∘₁ obj
; arr = f ▷ arr
; isCoequalizer = postcompPreservesCoequalizer localcoeq f {coeq = coeq}
}
where
open Coequalizer coeq
53 changes: 27 additions & 26 deletions src/Categories/Diagram/Coequalizer/Properties.agda
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ open Category 𝒞

open import Categories.Diagram.Coequalizer 𝒞 using (Coequalizer; IsCoequalizer; Coequalizer⇒Epi; up-to-iso)
open import Categories.Morphism 𝒞 using (_RetractOf_; _≅_)
open _≅_
import Categories.Morphism.Reasoning as MR
open import Categories.Diagram.Equalizer op using (Equalizer)
open import Categories.Diagram.Equalizer.Properties op using (section-equalizer)
Expand Down Expand Up @@ -156,26 +157,26 @@ open MapBetweenCoequalizers public
CoeqOfIsomorphicDiagram : {A B : Obj} {f g : A ⇒ B} (coeq : Coequalizer f g )
→ {A' B' : Obj}
→ (a : A ≅ A') (b : B ≅ B')
→ Coequalizer (_≅_.from b ∘ f ∘ _≅_.to a) (_≅_.from b ∘ g ∘ _≅_.to a)
→ Coequalizer (from b ∘ f ∘ to a) (from b ∘ g ∘ to a)
CoeqOfIsomorphicDiagram {f = f} {g} coeq {A'} {B'} a b = record
{ arr = arr ∘ _≅_.to b
{ arr = arr ∘ to b
; isCoequalizer = record
{ equality = begin
(arr ∘ _≅_.to b) ∘ _≅_.from b ∘ f ∘ _≅_.to a ≈⟨ assoc²γβ ⟩
(arr ∘ _≅_.to b ∘ _≅_.from b) ∘ f ∘ _≅_.to a ≈⟨ elimʳ (_≅_.isoˡ b) ⟩∘⟨refl ⟩
arr ∘ f ∘ _≅_.to a ≈⟨ extendʳ equality ⟩
arr ∘ g ∘ _≅_.to a ≈⟨ introʳ (_≅_.isoˡ b) ⟩∘⟨refl ⟩
(arr ∘ _≅_.to b ∘ _≅_.from b) ∘ g ∘ _≅_.to a ≈⟨ assoc²βγ ⟩
(arr ∘ _≅_.to b) ∘ _≅_.from b ∘ g ∘ _≅_.to a ∎
(arr ∘ to b) ∘ from b ∘ f ∘ to a ≈⟨ assoc²γβ ⟩
(arr ∘ to b ∘ from b) ∘ f ∘ to a ≈⟨ elimʳ (isoˡ b) ⟩∘⟨refl ⟩
arr ∘ f ∘ to a ≈⟨ extendʳ equality ⟩
arr ∘ g ∘ to a ≈⟨ introʳ (isoˡ b) ⟩∘⟨refl ⟩
(arr ∘ to b ∘ from b) ∘ g ∘ to a ≈⟨ assoc²βγ ⟩
(arr ∘ to b) ∘ from b ∘ g ∘ to a ∎
; coequalize = coequalize'
; universal = λ {_} {h} {eq} → begin
h ≈⟨ switch-fromtoʳ b universal ⟩
(coequalize' eq ∘ arr) ∘ _≅_.to b ≈⟨ assoc ⟩
coequalize' eq ∘ (arr ∘ _≅_.to b) ∎
h ≈⟨ switch-fromtoʳ b universal ⟩
(coequalize' eq ∘ arr) ∘ to b ≈⟨ assoc ⟩
coequalize' eq ∘ (arr ∘ to b) ∎
; unique = λ {_} {h} {i} {eq} e → unique (⟺ (switch-tofromʳ b (begin
(i ∘ arr) ∘ _≅_.to b ≈⟨ assoc ⟩
i ∘ arr ∘ _≅_.to b ≈⟨ ⟺ e ⟩
h ∎)))
(i ∘ arr) ∘ to b ≈⟨ assoc ⟩
i ∘ arr ∘ to b ≈⟨ ⟺ e ⟩
h ∎)))
}
}
where
Expand All @@ -184,17 +185,17 @@ CoeqOfIsomorphicDiagram {f = f} {g} coeq {A'} {B'} a b = record
open MR 𝒞

f' g' : A' ⇒ B'
f' = _≅_.from b ∘ f ∘ _≅_.to a
g' = _≅_.from b ∘ g ∘ _≅_.to a
f' = from b ∘ f ∘ to a
g' = from b ∘ g ∘ to a

equalize'⇒equalize : {C : Obj} {h : B' ⇒ C}
(eq : h ∘ f' ≈ h ∘ g')
→ (h ∘ _≅_.from b) ∘ f ≈ (h ∘ _≅_.from b) ∘ g
→ (h ∘ from b) ∘ f ≈ (h ∘ from b) ∘ g
equalize'⇒equalize {_} {h} eq = cancel-toʳ a (begin
((h ∘ _≅_.from b) ∘ f) ∘ _≅_.to a ≈⟨ assoc²αε ⟩
h ∘ f' ≈⟨ eq ⟩
h ∘ g' ≈⟨ assoc²εα ⟩
((h ∘ _≅_.from b) ∘ g) ∘ _≅_.to a ∎)
((h ∘ from b) ∘ f) ∘ to a ≈⟨ assoc²αε ⟩
h ∘ f' ≈⟨ eq ⟩
h ∘ g' ≈⟨ assoc²εα ⟩
((h ∘ from b) ∘ g) ∘ to a ∎)

coequalize' : {C : Obj} {h : B' ⇒ C}
(eq : h ∘ f' ≈ h ∘ g')
Expand Down Expand Up @@ -354,9 +355,9 @@ module CoequalizerOfCoequalizer
-- We need this for proving some coherences in the bicategory of monads and bimodules --
IsoFitsInPentagon : (coeq : Coequalizer f⇒i₁ f⇒i₂)
→ arr coeqcoeqᵍʰ ∘ arr coeqʰ
_≅_.from (CoeqsAreIsomorphic coeq) ∘ arr coeq ∘ arr coeqⁱ
≈ from (CoeqsAreIsomorphic coeq) ∘ arr coeq ∘ arr coeqⁱ
IsoFitsInPentagon coeq = begin
arr coeqcoeqᵍʰ ∘ arr coeqʰ ≈⟨ arrSq ⟩
arrᶠⁱ ∘ arr coeqⁱ ≈⟨ universal coeq ⟩∘⟨refl ⟩
(_≅_.from (CoeqsAreIsomorphic coeq) ∘ arr coeq) ∘ arr coeqⁱ ≈⟨ assoc ⟩
_≅_.from (CoeqsAreIsomorphic coeq) ∘ arr coeq ∘ arr coeqⁱ ∎
arr coeqcoeqᵍʰ ∘ arr coeqʰ ≈⟨ arrSq ⟩
arrᶠⁱ ∘ arr coeqⁱ ≈⟨ universal coeq ⟩∘⟨refl ⟩
(from (CoeqsAreIsomorphic coeq) ∘ arr coeq) ∘ arr coeqⁱ ≈⟨ assoc ⟩
from (CoeqsAreIsomorphic coeq) ∘ arr coeq ∘ arr coeqⁱ ∎
Loading