open import Cat.Morphism.Factorisation
open import Cat.Morphism.Orthogonal
open import Cat.Morphism.Class
open import Cat.Morphism.Lifts
open import Cat.Prelude

import Cat.Reasoning
module Cat.Morphism.Factorisation.Orthogonal where

Orthogonal factorisation systems🔗

Suppose you have some category and you, inspired by the wisdom of King Solomon, want to chop every morphism in half. A factorisation system on will provide a tool for doing so, in a particularly coherent way. Here, and are predicates on the space of morphisms of First, we package the data of an of a morphism

module _
  {o ℓ ℓe ℓm}
  (C : Precategory o ℓ)
  (E : Arrows C ℓe)
  (M : Arrows C ℓm) where
  private module C = Cat.Reasoning C

Note that while the archetype for a factorisation system is the (epi, mono)-factorisation system on the category of sets1, so that it’s very hard not to refer to these things as images, it is not the case, in general, nothing is required about the interaction of epis and monos with the classes and Generically, we call the in the factorisation mediate, and the forget.

  open Factorisation
    renaming
      ( mid to mediating
      ; left to mediate
      ; right to forget
      ; left∈L to mediate∈E
      ; right∈R to forget∈M
      )

In addition to mandating that every map factors as a map where and the classes must satisfy the following properties:

  • Every isomorphism is in both and in 2

  • Both classes are stable under composition: if and then and the same for

  record is-ofs : Type (o ⊔ ℓ ⊔ ℓe ⊔ ℓm) where
    field
      factor :  {a b} (f : C.Hom a b)  Factorisation C E M f

      is-iso→in-E :  {a b} (f : C.Hom a b)  C.is-invertible f  f ∈ E
      E-is-stable
        :  {a b c} (g : C.Hom b c) (f : C.Hom a b)  f ∈ E  g ∈ E
         (g C.∘ f) ∈ E

      is-iso→in-M :  {a b} (f : C.Hom a b)  C.is-invertible f  f ∈ M
      M-is-stable
        :  {a b c} (g : C.Hom b c) (f : C.Hom a b)  f ∈ M  g ∈ M
         (g C.∘ f) ∈ M

Most importantly, the class is exactly the class of morphisms left-orthogonal to A map satisfies if, and only if, for every we have Conversely, a map has if, and only if, we have for every

      E⊥M : Orthogonal C E M
module _
  {o ℓ ℓe ℓm}
  (C : Precategory o ℓ)
  (E : Arrows C ℓe)
  (M : Arrows C ℓm)
  (fs : is-ofs C E M)
  where

  private module C = Cat.Reasoning C
  open is-ofs fs
  open Factorisation
    renaming
      ( mid to mediating
      ; left to mediate
      ; right to forget
      ; left∈L to mediate∈E
      ; right∈R to forget∈M
      )

The first thing we observe is that factorisations for a morphism are unique. Working in precategorical generality, we weaken this to essential uniqueness: Given two factorisations of we exhibit an isomorphism between their replacements which commutes with both the mediate morphism and the forget morphism. We reproduce the proof from (Borceux 1994, vol. 1, sec. 5.5).

  factorisation-essentially-unique
    :  {a b} (f : C.Hom a b) (fa1 fa2 : Factorisation C E M f)
     Σ[ f ∈ fa1 .mediating C.≅ fa2 .mediating ]
        ( (f .C.to C.∘ fa1 .mediate ≡ fa2 .mediate)
        × (fa1 .forget C.∘ f .C.from ≡ fa2 .forget))
  factorisation-essentially-unique f fa1 fa2 =
    C.make-iso (upq .fst) (vp'q' .fst) vu=id uv=id , upq .snd .fst , vp'q' .snd .snd
    where

Suppose that and are both of We use the fact that and to get maps satisfying and

      upq =
        E⊥M _ (fa1 .mediate∈E) _ (fa2 .forget∈M) _ _
          (sym (fa1 .factors) ∙ fa2 .factors) .centre

      vp'q' = E⊥M _ (fa2 .mediate∈E) _ (fa1 .forget∈M) _ _
        (sym (fa2 .factors) ∙ fa1 .factors) .centre

To show that and are inverses, fit first and into a lifting diagram like the one below. Since we have that the space of diagonals is contractible, hence a proposition, and since both and the identity are in that diagonal,

      vu=id : upq .fst C.∘ vp'q' .fst ≡ C.id
      vu=id = ap fst $ is-contr→is-prop
        (E⊥M _ (fa2 .mediate∈E) _ (fa2 .forget∈M) _ _ refl)
        ( upq .fst C.∘ vp'q' .fst
        , C.pullr (vp'q' .snd .fst) ∙ upq .snd .fst
        , C.pulll (upq .snd .snd) ∙ vp'q' .snd .snd
        ) (C.id , C.idl _ , C.idr _)

A dual argument works by making a lifting square with and as its faces. We omit it for brevity. By the characterisation of path spaces in categories, this implies that factorisations of a fixed morphism are a proposition.

      uv=id : vp'q' .fst C.∘ upq .fst ≡ C.id
      uv=id = ap fst $ is-contr→is-prop
        (E⊥M _ (fa1 .mediate∈E) _ (fa1 .forget∈M) _ _ refl)
        ( vp'q' .fst C.∘ upq .fst
        , C.pullr (upq .snd .fst) ∙ vp'q' .snd .fst
        , C.pulll (vp'q' .snd .snd) ∙ upq .snd .snd
        ) (C.id , C.idl _ , C.idr _)
  factorisation-unique
    :  {a b} (f : C.Hom a b)  is-category C  is-prop (Factorisation C E M f)
  factorisation-unique f c-cat x y = go where
    isop1p2 = factorisation-essentially-unique f x y

    p = Univalent.Hom-pathp-reflr-iso c-cat {q = isop1p2 .fst} (isop1p2 .snd .fst)
    q = Univalent.Hom-pathp-refll-iso c-cat {p = isop1p2 .fst} (isop1p2 .snd .snd)

    go : x ≡ y
    go i .mediating = c-cat .to-path (isop1p2 .fst) i
    go i .mediate = p i
    go i .forget = q i
    go i .mediate∈E = is-prop→pathp  i  is-tr (E · (p i))) (x .mediate∈E) (y .mediate∈E) i
    go i .forget∈M = is-prop→pathp  i  is-tr (M · (q i))) (x .forget∈M) (y .forget∈M) i
    go i .factors =
      is-prop→pathp  i  C.Hom-set _ _ f (q i C.∘ p i)) (x .factors) (y .factors) i

As a passing observation, note that the intersection is precisely the class of isomorphisms of Every isomorphism is in both classes, by the definition, and if a morphism is in both classes, it is orthogonal to itself, hence an isomorphism.

  in-intersection→is-iso
    :  {a b} (f : C.Hom a b)  f ∈ E  f ∈ M  C.is-invertible f
  in-intersection→is-iso f f∈E f∈M = self-orthogonal→invertible C f $ E⊥M f f∈E f f∈M

  in-intersection≃is-iso
    :  {a b} (f : C.Hom a b)  C.is-invertible f ≃ ((f ∈ E) × (f ∈ M))
  in-intersection≃is-iso f = prop-ext!
     fi  is-iso→in-E f fi , is-iso→in-M f fi)
    λ { (a , b)  in-intersection→is-iso f a b }

The final observation is that the class is precisely the class of morphisms left-orthogonal to those in One direction is by definition, and the other is rather technical. Let’s focus on the technical one.

  E-is-⊥M
    :  {a b} (f : C.Hom a b)
     (f ∈ E)(∀ {c d} (m : C.Hom c d)  m ∈ M  Orthogonal C f m)
  E-is-⊥M f =
    prop-ext!  m f∈E m∈M  to f∈E m m∈M) from
    where
      to :  {c d} (m : C.Hom c d)  f ∈ E  m ∈ M  Orthogonal C f m
      to m f∈E m∈M u v square = E⊥M f f∈E m m∈M u v square

      from : (∀ {c d} (m : C.Hom c d)  m ∈ M  Orthogonal C f m)  f ∈ E
      from ortho = subst (_∈ E) (sym (fa .factors)) $ E-is-stable _ _ (fa .mediate∈E) m∈E
        where

Suppose that is left-orthogonal to every and write out the By a syntactic limitation in Agda, we start with the conclusion: We’ll show that is in and since is closed under composition, so is Since is orthogonal to we can fit it into a lifting diagram

and make note of the diagonal filler and that it satisfies and

        fa = factor f
        gpq = ortho (fa .forget) (fa .forget∈M) (fa .mediate) C.id (C.idl _(fa .factors))

We’ll show by fitting it into a lifting diagram. But since the factorisation is unique, and as needed.

        gm=id : gpq .centre .fst C.(fa .forget) ≡ C.id
        gm=id = ap fst $ is-contr→is-prop
          (E⊥M _ (fa .mediate∈E) _ (fa .forget∈M) _ _ refl)
          ( _ , C.pullr (sym (fa .factors)) ∙ gpq .centre .snd .fst
          , C.cancell (gpq .centre .snd .snd)) (C.id , C.idl _ , C.idr _)

Think back to the conclusion we wanted to reach: is in so since and is stable, so is

        m∈E : fa .forget ∈ E
        m∈E = is-iso→in-E (fa .forget) $
          C.make-invertible (gpq .centre .fst) (gpq .centre .snd .snd) gm=id

  1. Or, more generally, in every topos.↩︎

  2. We’ll see, in a bit, that the converse is true, too.↩︎


References