module Cat.Diagram.Pullback.Along where

Pullbacks along an indeterminate morphism🔗

This module defines the auxiliary notion of a map being the pullback of a map along a map by summing over the possible maps fitting in the diagram below.

While this is a rather artificial notion, it comes up a lot in the context of elementary topos theory, especially in the case where is the generic subobject

  record is-pullback-along {P X Y Z} (p₁ : Hom P X) (f : Hom X Z) (g : Hom Y Z) : Type (o ⊔ ℓ) where
    no-eta-equality
    field
      top       : Hom P Y
      has-is-pb : is-pullback C p₁ f top g
    open is-pullback has-is-pb public
\ Warning

Despite the name is-pullback-along, nothing about the definition guarantees that this type is a proposition after fixing the three maps and However, we choose to name this auxiliary notion as though it were always a proposition, since it will most commonly be used when is a monomorphism, and, under this assumption, it is propositional:

    is-monic→is-pullback-along-is-prop
      :  {P X Y Z} {f : Hom P X} {g : Hom X Z} {h : Hom Y Z}
       is-monic h
       is-prop (is-pullback-along C f g h)
    is-monic→is-pullback-along-is-prop h-monic = Iso→is-hlevel 1 eqv λ (_ , x) (_ , y) 
      Σ-prop-path! (h-monic _ _ (sym (x .square) ∙ y .square))

Of course, the notion of being a pullback along a map is closed under composition: if is the pullback of along and is the pullback of along as in the diagram below, then is also the pullback of along

  paste-is-pullback-along
    : is-pullback-along C k n l  is-pullback-along C h m k
     n ∘ m ≡ nm  is-pullback-along C h nm l
  paste-is-pullback-along p q r .top = p .top ∘ q .top
  paste-is-pullback-along p q r .has-is-pb =
    subst-is-pullback refl r refl refl (rotate-pullback (pasting-left→outer-is-pullback
      (rotate-pullback (p .has-is-pb))
      (rotate-pullback (q .has-is-pb))
      ( extendl (sym (p .is-pullback-along.square))
      ∙ pushr (sym (q .is-pullback-along.square)))))