{-# OPTIONS --cubical --safe #-}

open import Prelude
open import Categories

module Categories.Coequalizer {ℓ₁ ℓ₂} (C : Category ℓ₁ ℓ₂) where

open Category C


private
  variable
    h i : X  Y

record Coequalizer (f g : X  Y) : Type (ℓ₁ ℓ⊔ ℓ₂) where
  field
    {obj} : Ob
    arr   : Y  obj

    equality   : arr · f  arr · g
    coequalize :  {H} {h : Y  H}  h · f  h · g  obj  H
    universal  :  {H} {h : Y  H} {eq : h · f  h · g}  h  coequalize eq · arr
    unique     :  {H} {h : Y  H} {i : obj  H} {eq : h · f  h · g}  h  i · arr  i  coequalize eq