module Cat.Diagram.Coequaliser.RegularEpi where
Regular epimorphismsπ
Dually to regular monomorphisms, which behave as embeddings, regular epimorphisms behave like covers: A regular epimorphism expresses as βa union of parts of possibly glued togetherβ.
The definition is also precisely dual: A map is a regular epimorphism if it is the coequaliser of some pair of arrows
record is-regular-epi (f : Hom a b) : Type (o β β) where no-eta-equality constructor reg-epi field {r} : Ob {arrβ} {arrβ} : Hom r a has-is-coeq : is-coequaliser C arrβ arrβ f open is-coequaliser has-is-coeq public
From the definition we can directly conclude that regular epis are in fact epic:
is-regular-epiβis-epic : is-epic f is-regular-epiβis-epic = is-coequaliserβis-epic _ has-is-coeq open is-regular-epi using (is-regular-epiβis-epic) public
Effective episπ
Again by duality, we have a pair of canonical choices of maps which may coequalise: Its kernel pair, that is, the pullback of along itself. An epimorphism which coequalises its kernel pair is called an effective epi, and effective epis are immediately seen to be regular epis:
record is-effective-epi (f : Hom a b) : Type (o β β) where no-eta-equality field {kernel} : Ob pβ pβ : Hom kernel a has-kernel-pair : is-kernel-pair C pβ pβ f has-is-coeq : is-coequaliser C pβ pβ f is-effective-epiβis-regular-epi : is-regular-epi f is-effective-epiβis-regular-epi = re where open is-regular-epi hiding (has-is-coeq) re : is-regular-epi f re .r = _ re .arrβ = _ re .arrβ = _ re .is-regular-epi.has-is-coeq = has-is-coeq
If a regular epimorphism (a coequaliser) has a kernel pair, then it is also the coequaliser of its kernel pair. That is: If the pullback of exists, then is also an effective epimorphism.
is-regular-epiβis-effective-epi : β {a b} {f : Hom a b} β Pullback C f f β is-regular-epi C f β is-effective-epi C f is-regular-epiβis-effective-epi {f = f} kp reg = epi where module reg = is-regular-epi reg module kp = Pullback kp open is-effective-epi open is-coequaliser epi : is-effective-epi C f epi .kernel = kp.apex epi .pβ = kp.pβ epi .pβ = kp.pβ epi .has-kernel-pair = kp.has-is-pb epi .has-is-coeq .coequal = kp.square epi .has-is-coeq .universal {F = F} {e'} p = reg.universal q where q : e' β reg.arrβ β‘ e' β reg.arrβ q = e' β reg.arrβ β‘β¨ ap (e' β_) (sym kp.pββuniversal) β©β‘ e' β kp.pβ β kp.universal (sym reg.coequal) β‘β¨ pulll (sym p) β©β‘ (e' β kp.pβ) β kp.universal _ β‘β¨ pullr kp.pββuniversal β©β‘ e' β reg.arrβ β epi .has-is-coeq .factors = reg.factors epi .has-is-coeq .unique = reg.unique
Existence of regular episπ
Let be a categories such that has coproducts indexed by the objects and arrows of and let be a functor with a colimit in The canonical map is a regular epimorphism
module _ {o β oj βj} {C : Precategory o β} {J : Precategory oj βj} {F : Functor J C} (βOb : has-coproducts-indexed-by C β J β) (βHom : has-coproducts-indexed-by C (Arrows J)) (βF : Colimit F) where
private module C = Cat.Reasoning C module J = Cat.Reasoning J module F = Cat.Functor.Reasoning F module βOb F = Indexed-coproduct (βOb F) module βHom F = Indexed-coproduct (βHom F) module βF = Colimit βF open is-regular-epi open is-coequaliser
indexed-coproductβregular-epi : is-regular-epi C (βOb.match F.β βF.Ο)
We start by constructing a pair of maps via the universal property of
indexed-coproductβregular-epi .r = βHom.Ξ£F Ξ» (i , j , f) β F.β i indexed-coproductβregular-epi .arrβ = βHom.match _ Ξ» (i , j , f) β βOb.ΞΉ F.β j C.β F.β f indexed-coproductβregular-epi .arrβ = βHom.match _ Ξ» (i , j , f) β βOb.ΞΉ F.β i
By some rather tedious calculations, we can show that and coequalize
indexed-coproductβregular-epi .has-is-coeq .coequal = βHom.uniqueβ _ Ξ» (i , j , f) β (βOb.match F.β βF.Ο C.β βHom.match _ _) C.β βHom.ΞΉ _ (i , j , f) β‘β¨ C.pullr (βHom.commute _) β©β‘ βOb.match F.β βF.Ο C.β βOb.ΞΉ _ j C.β F.β f β‘β¨ C.pulll (βOb.commute _) β©β‘ βF.Ο j C.β F.β f β‘β¨ βF.commutes f β©β‘ βF.Ο i β‘Λβ¨ βOb.commute _ β©β‘Λ βOb.match F.β βF.Ο C.β βOb.ΞΉ _ i β‘Λβ¨ C.pullr (βHom.commute _) β©β‘Λ (βOb.match F.β βF.Ο C.β βHom.match _ _) C.β βHom.ΞΉ _ (i , j , f) β
Moreover, and form the universal such coequalizing pair. This follows by yet more brute-force calculation.
indexed-coproductβregular-epi .has-is-coeq .universal {e' = e'} p = βF.universal (Ξ» j β e' C.β βOb.ΞΉ F.β j) comm where abstract comm : β {i j} (f : J.Hom i j) β (e' C.β βOb.ΞΉ F.β j) C.β F.β f β‘ e' C.β βOb.ΞΉ F.β i comm {i} {j} f = (e' C.β βOb.ΞΉ F.β j) C.β F.β f β‘β¨ C.pullr (sym (βHom.commute _)) β©β‘ e' C.β (βHom.match _ _ C.β βHom.ΞΉ _ (i , j , f)) β‘β¨ C.extendl p β©β‘ e' C.β (βHom.match _ _ C.β βHom.ΞΉ _ (i , j , f)) β‘β¨ apβ C._β_ refl (βHom.commute _) β©β‘ e' C.β βOb.ΞΉ F.β i β indexed-coproductβregular-epi .has-is-coeq .factors {e' = e'} {p = p} = βOb.uniqueβ F.β Ξ» j β (βF.universal _ _ C.β βOb.match F.β βF.Ο) C.β βOb.ΞΉ F.β j β‘β¨ C.pullr (βOb.commute _) β©β‘ βF.universal _ _ C.β βF.Ο j β‘β¨ βF.factors _ _ β©β‘ e' C.β βOb.ΞΉ F.β j β indexed-coproductβregular-epi .has-is-coeq .unique {e' = e'} {colim = h} p = βF.unique _ _ _ Ξ» j β h C.β βF.Ο j β‘Λβ¨ apβ C._β_ refl (βOb.commute _) β©β‘Λ h C.β (βOb.match F.β βF.Ο C.β βOb.ΞΉ F.β j) β‘β¨ C.pulll p β©β‘ e' C.β βOb.ΞΉ F.β j β