{-# OPTIONS --without-K --safe #-}
open import Categories.Category
module Categories.Diagram.Equalizer.Properties {o ℓ e} (C : Category o ℓ e) where
open import Categories.Diagram.Equalizer C
open import Categories.Morphism C
open import Categories.Morphism.Reasoning C
private
module C = Category C
open C
variable
X Y Z : Obj
f g : X ⇒ Y
module _ (equalizer : Equalizer f g) where
open Equalizer equalizer
open HomReasoning
equalizer-≈⇒≈ : ∀ {h} → arr ∘ h ≈ id → f ≈ g
equalizer-≈⇒≈ {h} eq = begin
f ≈⟨ introʳ eq ⟩
f ∘ arr ∘ h ≈⟨ pullˡ equality ⟩
(g ∘ arr) ∘ h ≈⟨ cancelʳ eq ⟩
g ∎
section-equalizer : ∀ {X Y} {f : Y ⇒ X} {g : X ⇒ Y} → f SectionOf g → IsEqualizer f (f ∘ g) id
section-equalizer {X = X} {Y = Y} {f = f} {g = g} g∘f≈id = record
{ equality = equality
; equalize = equalize
; universal = λ {_} {_} {eq} → universal {eq = eq}
; unique = unique
}
where
open HomReasoning
equality : (f ∘ g) ∘ f ≈ id ∘ f
equality = begin
(f ∘ g) ∘ f ≈⟨ pullʳ g∘f≈id ⟩
f ∘ id ≈⟨ id-comm ⟩
id ∘ f ∎
equalize : ∀ {Z} {h : Z ⇒ X} → (f ∘ g) ∘ h ≈ id ∘ h → Z ⇒ Y
equalize {h = h} _ = g ∘ h
universal : ∀ {Z} {h : Z ⇒ X} {eq : (f ∘ g) ∘ h ≈ id ∘ h} → h ≈ f ∘ g ∘ h
universal {h = h} {eq = eq} = begin
h ≈˘⟨ identityˡ ⟩
id ∘ h ≈˘⟨ eq ⟩
(f ∘ g) ∘ h ≈⟨ assoc ⟩
f ∘ g ∘ h ∎
unique : ∀ {Z} {h : Z ⇒ X} {i : Z ⇒ Y} → h ≈ f ∘ i → i ≈ g ∘ h
unique {h = h} {i = i} h≈g∘i = begin
i ≈⟨ introˡ g∘f≈id ⟩
(g ∘ f) ∘ i ≈⟨ pullʳ (⟺ h≈g∘i) ⟩
g ∘ h ∎