Orthogonal factorization systems

module orthogonal-factorization-systems.orthogonal-factorization-systems where
Imports
open import foundation.cartesian-product-types
open import foundation.contractible-types
open import foundation.dependent-pair-types
open import foundation.propositions
open import foundation.universe-levels

open import orthogonal-factorization-systems.factorization-operations-function-classes
open import orthogonal-factorization-systems.function-classes
open import orthogonal-factorization-systems.wide-function-classes

Idea

An orthogonal factorization system is a pair of composition closed function classes L and R that contain the identities (morally, this means that they are wide subpre-∞-categories of the ∞-category of types), such that for every function f : A → B there is a unique factorization f ~ r ∘ l such that the left map (by diagrammatic ordering) l is in L and the right map r is in R.

Definition

Orthogonal factorization systems

is-orthogonal-factorization-system :
  {l lL lR : Level}
  (L : function-class l l lL)
  (R : function-class l l lR) 
  UU (lsuc l  lL  lR)
is-orthogonal-factorization-system {l} L R =
  ( is-wide-function-class L) ×
  ( ( is-wide-function-class R) ×
    ( (A B : UU l)  unique-factorization-operation-function-class L R A B))

orthogonal-factorization-system :
  (l lL lR : Level)  UU (lsuc l  lsuc lL  lsuc lR)
orthogonal-factorization-system l lL lR =
  Σ ( function-class l l lL)
    ( λ L 
      Σ ( function-class l l lR)
        ( is-orthogonal-factorization-system L))

Components of a orthogonal factorization system

module _
  {l lL lR : Level}
  (L : function-class l l lL)
  (R : function-class l l lR)
  (is-OFS : is-orthogonal-factorization-system L R)
  where

  is-wide-left-class-is-orthogonal-factorization-system :
    is-wide-function-class L
  is-wide-left-class-is-orthogonal-factorization-system = pr1 is-OFS

  is-wide-right-class-is-orthogonal-factorization-system :
    is-wide-function-class R
  is-wide-right-class-is-orthogonal-factorization-system = pr1 (pr2 is-OFS)

  unique-factorization-operation-is-orthogonal-factorization-system :
    (A B : UU l)  unique-factorization-operation-function-class L R A B
  unique-factorization-operation-is-orthogonal-factorization-system =
    pr2 (pr2 is-OFS)

  factorization-operation-is-orthogonal-factorization-system :
    (A B : UU l)  factorization-operation-function-class L R A B
  factorization-operation-is-orthogonal-factorization-system A B f =
    center
      ( unique-factorization-operation-is-orthogonal-factorization-system A B f)

module _
  {l lL lR : Level}
  (OFS : orthogonal-factorization-system l lL lR)
  where

  left-class-orthogonal-factorization-system : function-class l l lL
  left-class-orthogonal-factorization-system = pr1 OFS

  right-class-orthogonal-factorization-system : function-class l l lR
  right-class-orthogonal-factorization-system = pr1 (pr2 OFS)

  is-orthogonal-factorization-system-orthogonal-factorization-system :
    is-orthogonal-factorization-system
      ( left-class-orthogonal-factorization-system)
      ( right-class-orthogonal-factorization-system)
  is-orthogonal-factorization-system-orthogonal-factorization-system =
    pr2 (pr2 OFS)

  is-wide-left-class-orthogonal-factorization-system :
    is-wide-function-class left-class-orthogonal-factorization-system
  is-wide-left-class-orthogonal-factorization-system =
    is-wide-left-class-is-orthogonal-factorization-system
      ( left-class-orthogonal-factorization-system)
      ( right-class-orthogonal-factorization-system)
      ( is-orthogonal-factorization-system-orthogonal-factorization-system)

  is-wide-right-class-orthogonal-factorization-system :
    is-wide-function-class right-class-orthogonal-factorization-system
  is-wide-right-class-orthogonal-factorization-system =
    is-wide-right-class-is-orthogonal-factorization-system
      ( left-class-orthogonal-factorization-system)
      ( right-class-orthogonal-factorization-system)
      ( is-orthogonal-factorization-system-orthogonal-factorization-system)

  unique-factorization-operation-orthogonal-factorization-system :
    (A B : UU l) 
    unique-factorization-operation-function-class
      ( left-class-orthogonal-factorization-system)
      ( right-class-orthogonal-factorization-system)
      ( A)
      ( B)
  unique-factorization-operation-orthogonal-factorization-system =
    unique-factorization-operation-is-orthogonal-factorization-system
      ( left-class-orthogonal-factorization-system)
      ( right-class-orthogonal-factorization-system)
      ( is-orthogonal-factorization-system-orthogonal-factorization-system)

  factorization-operation-orthogonal-factorization-system :
    (A B : UU l) 
    factorization-operation-function-class
      ( left-class-orthogonal-factorization-system)
      ( right-class-orthogonal-factorization-system)
      ( A)
      ( B)
  factorization-operation-orthogonal-factorization-system =
    factorization-operation-is-orthogonal-factorization-system
      ( left-class-orthogonal-factorization-system)
      ( right-class-orthogonal-factorization-system)
      ( is-orthogonal-factorization-system-orthogonal-factorization-system)

Properties

Being an orthogonal factorization system is a property

module _
  {l lL lR : Level}
  (L : function-class l l lL)
  (R : function-class l l lR)
  where

  is-prop-is-orthogonal-factorization-system :
    is-prop (is-orthogonal-factorization-system L R)
  is-prop-is-orthogonal-factorization-system =
    is-prop-prod
      ( is-prop-is-wide-function-class L)
      ( is-prop-prod
        ( is-prop-is-wide-function-class R)
        ( is-prop-Π
            λ A  is-prop-Π
              λ B  is-prop-unique-factorization-operation-function-class L R))

  is-orthogonal-factorization-system-Prop : Prop (lsuc l  lL  lR)
  pr1 is-orthogonal-factorization-system-Prop =
    is-orthogonal-factorization-system L R
  pr2 is-orthogonal-factorization-system-Prop =
    is-prop-is-orthogonal-factorization-system

References

  • Egbert Rijke, Michael Shulman, Bas Spitters, Modalities in homotopy type theory, Logical Methods in Computer Science, Volume 16, Issue 1, 2020 (arXiv:1706.07526, doi:10.23638)