module Cat.Diagram.Equaliser.RegularMono where
Regular monomorphisms🔗
A regular monomorphism is a morphism that behaves like an embedding, i.e. it is an isomorphism onto its image. Since images of arbitrary morphisms do not exist in every category, we must find a definition which implies this property but only speaks diagrammatically about objects directly involved in the definition.
The definition is as follows: A regular monomorphism is an equaliser of some pair of arrows
record is-regular-mono (f : Hom a b) : Type (o ⊔ ℓ) where
no-eta-equality
field
{c} : Ob
: Hom b c
arr₁ arr₂ : is-equaliser C arr₁ arr₂ f
has-is-eq
open is-equaliser has-is-eq public
From the definition we can directly conclude that regular monomorphisms are in fact monomorphisms:
: is-monic f
is-regular-mono→is-mono = is-equaliser→is-monic _ has-is-eq
is-regular-mono→is-mono
open is-regular-mono using (is-regular-mono→is-mono) public
Effective monomorphisms🔗
Proving that a map is a regular monomorphism involves finding two maps which it equalises, but if is a category with pushouts, there is often a canonical choice: The cokernel pair of that is, the pushout of along with itself. Morphisms which a) have a cokernel pair and b) equalise their cokernel pair are called effective monomorphisms.
record is-effective-mono (f : Hom a b) : Type (o ⊔ ℓ) where
no-eta-equality
field
{cokernel} : Ob
: Hom b cokernel
i₁ i₂ : is-pushout C f i₁ f i₂
is-cokernel-pair : is-equaliser C i₁ i₂ f has-is-equaliser
Every effective monomorphism is a regular monomorphism, since it equalises the inclusions of its cokernel pair.
: is-regular-mono f
is-effective-mono→is-regular-mono = rm where
is-effective-mono→is-regular-mono open is-regular-mono
: is-regular-mono f
rm .c = _
rm .arr₁ = _
rm .arr₂ = _
rm .has-is-eq = has-is-equaliser rm
If has a cokernel pair, and it is a regular monomorphism, then it is also effective — it is the equaliser of its cokernel pair.
is-regular-mono→is-effective-mono: ∀ {a b} {f : Hom a b}
→ Pushout C f f
→ is-regular-mono C f
→ is-effective-mono C f
{f = f} cokern reg = mon where
is-regular-mono→is-effective-mono module f⊔f = Pushout cokern
module reg = is-regular-mono reg
Let be the equaliser of By the universal property of the cokernel pair of we have a map such that and
: Hom f⊔f.coapex reg.c
phi = f⊔f.universal reg.equal
phi
open is-effective-mono
: is-effective-mono C f
mon .cokernel = f⊔f.coapex
mon .i₁ = f⊔f.i₁
mon .i₂ = f⊔f.i₂
mon .is-cokernel-pair = f⊔f.has-is-po
mon .has-is-equaliser = eq where mon
To show that also has the universal property of the equaliser of suppose that also equalises the injections. Then we can calculate:
So equalises the same arrows that does, hence there is a universal map which commutes with “everything in sight”:
open is-equaliser
: is-equaliser _ _ _ _
eq .equal = f⊔f.square
eq .universal {F = F} {e' = e'} p = reg.universal p' where
eq : reg.arr₁ ∘ e' ≡ reg.arr₂ ∘ e'
p' =
p' .arr₁ ∘ e' ≡˘⟨ ap (_∘ e') f⊔f.i₁∘universal ⟩
reg(phi ∘ f⊔f.i₁) ∘ e' ≡⟨ extendr p ⟩
(phi ∘ f⊔f.i₂) ∘ e' ≡⟨ ap (_∘ e') f⊔f.i₂∘universal ⟩
.arr₂ ∘ e' ∎
reg.factors = reg.factors
eq .unique = reg.unique eq
If has a canonical choice of pushout along itself, then it suffices to check that it equalises those injections to show it is an effective mono.
equalises-cokernel-pair→is-effective-mono: ∀ {a b} {f : Hom a b}
→ (P : Pushout C f f)
→ is-equaliser C (P .Pushout.i₁) (P .Pushout.i₂) f
→ is-effective-mono C f
= em where
equalises-cokernel-pair→is-effective-mono P eq open is-effective-mono
: is-effective-mono _ _
em .cokernel = _
em .i₁ = _
em .i₂ = _
em .is-cokernel-pair = P .Pushout.has-is-po
em .has-is-equaliser = eq em
Images of regular monos🔗
Let be an effective mono, or, in a category with pushouts, a regular mono. We show that admits an image relative to the class of regular monomorphisms. The construction of the image is as follows: We let and factor as
This factorisation is very straightforwardly shown to be universal, as the code below demonstrates.
is-effective-mono→image: ∀ {a b} {f : Hom a b}
→ is-effective-mono C f
→ M-image C (is-regular-mono C , is-regular-mono→is-mono) f
{f = f} mon = im where
is-effective-mono→image module eff = is-effective-mono mon
: ↓Obj _ _
itself .x = tt
itself .y = restrict (cut f) eff.is-effective-mono→is-regular-mono
itself .map = record { map = id ; commutes = idr _ }
itself
: Initial _
im .bot = itself
im .has⊥ other = contr hom unique where
im : ↓Hom _ _ itself other
hom .α = tt
hom .β = other .map
hom .sq = trivial!
hom
: ∀ x → hom ≡ x
unique = ↓Hom-path _ _ refl
unique x (ext (intror refl ∙ ap map (x .sq) ∙ elimr refl))
Hence the characterisation of regular monomorphisms given in the introductory paragraph: In a category with pushouts, every regular monomorphism “is an isomorphism” onto its image. In reality, it gives its own image!