{-# OPTIONS --without-K --safe #-}
open import Categories.Category
module Categories.Category.Complete.Finitely {o ℓ e} (C : Category o ℓ e) where
open import Level
open import Categories.Category.BinaryProducts C using (BinaryProducts)
open import Categories.Category.Cartesian C using (Cartesian)
open import Categories.Diagram.Equalizer C using (Equalizer)
open import Categories.Diagram.Pullback C using (Pullback; Product×Equalizer⇒Pullback)
open Category C
record FinitelyComplete : Set (levelOfTerm C) where
field
cartesian : Cartesian
equalizer : ∀ {A B} (f g : A ⇒ B) → Equalizer f g
module equalizer {A B} (f g : A ⇒ B) = Equalizer (equalizer f g)
open Cartesian cartesian using (products)
pullback : ∀ {X Y Z} (f : X ⇒ Z) (g : Y ⇒ Z) → Pullback f g
pullback f g = Product×Equalizer⇒Pullback (BinaryProducts.product products) (equalizer _ _)
module pullback {X Y Z} (f : X ⇒ Z) (g : Y ⇒ Z) = Pullback (pullback f g)