open import Cat.Prelude module Cat.Diagram.Pushout {o ℓ} (C : Precategory o ℓ) where
Pushouts🔗
A pushout of and is the dual construction to the pullback. Much like the pullback is a subobject of the product, the pushout is a quotient object of the coproduct. The maps and tell us which parts of the coproduct to identify.
record is-pushout {P} (f : Hom X Y) (i₁ : Hom Y P) (g : Hom X Z) (i₂ : Hom Z P) : Type (o ⊔ ℓ) where field square : i₁ ∘ f ≡ i₂ ∘ g
The most important part of the pushout is a commutative square of the following shape:
This can be thought of as providing “gluing instructions”. The injection maps and embed and into , and the maps and determine what parts of and we ought to identify in .
The universal property ensures that we only perform the minimal number of identifications required to make the aforementioned square commute.
colimiting : ∀ {Q} {i₁′ : Hom Y Q} {i₂′ : Hom Z Q} → i₁′ ∘ f ≡ i₂′ ∘ g → Hom P Q i₁∘colimiting : {p : i₁′ ∘ f ≡ i₂′ ∘ g} → colimiting p ∘ i₁ ≡ i₁′ i₂∘colimiting : {p : i₁′ ∘ f ≡ i₂′ ∘ g} → colimiting p ∘ i₂ ≡ i₂′ unique : {p : i₁′ ∘ f ≡ i₂′ ∘ g} {colim′ : Hom P Q} → colim′ ∘ i₁ ≡ i₁′ → colim′ ∘ i₂ ≡ i₂′ → colim′ ≡ colimiting p
We provide a convenient packaging of the pushout and the injection maps:
record Pushout (f : Hom X Y) (g : Hom X Z) : Type (o ⊔ ℓ) where field {coapex} : Ob i₁ : Hom Y coapex i₂ : Hom Z coapex has-is-po : is-pushout f i₁ g i₂ open is-pushout has-is-po public