Factorizations of maps
module orthogonal-factorization-systems.factorizations-of-maps where
Imports
open import foundation.conjunction open import foundation.contractible-types open import foundation.dependent-pair-types open import foundation.equivalences open import foundation.functions open import foundation.fundamental-theorem-of-identity-types open import foundation.homotopies open import foundation.identity-types open import foundation.propositions open import foundation.structure-identity-principle open import foundation.universe-levels open import orthogonal-factorization-systems.function-classes
Idea
A factorization of a map f : A → B
is a pair of maps g : X → B
and
h : A → X
such that their composite g ∘ h
is f
.
X
^ \
h / \ g
/ v
A -----> B
f
We use diagrammatic order and say the map h
is the left and g
the right
map of the factorization.
Definitions
Factorizations
module _ {l1 l2 : Level} {A : UU l1} {B : UU l2} (f : A → B) where is-factorization : {l3 : Level} {X : UU l3} → (g : X → B) (h : A → X) → UU (l1 ⊔ l2) is-factorization g h = f ~ (g ∘ h) factorization-through : {l3 : Level} (X : UU l3) → UU (l1 ⊔ l2 ⊔ l3) factorization-through X = Σ ( X → B) ( λ g → Σ ( A → X) ( is-factorization g)) factorization : (l3 : Level) → UU (l1 ⊔ l2 ⊔ lsuc l3) factorization l3 = Σ (UU l3) (factorization-through)
Components of a factorization
module _ {l1 l2 : Level} {A : UU l1} {B : UU l2} {f : A → B} where right-map-factorization-through : {l3 : Level} {X : UU l3} → factorization-through f X → X → B right-map-factorization-through = pr1 left-map-factorization-through : {l3 : Level} {X : UU l3} → factorization-through f X → A → X left-map-factorization-through = pr1 ∘ pr2 is-factorization-factorization-through : {l3 : Level} {X : UU l3} (F : factorization-through f X) → is-factorization f ( right-map-factorization-through F) ( left-map-factorization-through F) is-factorization-factorization-through = pr2 ∘ pr2 type-factorization : {l3 : Level} (F : factorization f l3) → UU l3 type-factorization = pr1 factorization-through-factorization : {l3 : Level} (F : factorization f l3) → factorization-through f (type-factorization F) factorization-through-factorization = pr2 right-map-factorization : {l3 : Level} (F : factorization f l3) → type-factorization F → B right-map-factorization = right-map-factorization-through ∘ factorization-through-factorization left-map-factorization : {l3 : Level} (F : factorization f l3) → A → type-factorization F left-map-factorization = left-map-factorization-through ∘ factorization-through-factorization is-factorization-factorization : {l3 : Level} (F : factorization f l3) → is-factorization f (right-map-factorization F) (left-map-factorization F) is-factorization-factorization = is-factorization-factorization-through ∘ factorization-through-factorization
Factorizations with function classes
module _ {l1 l2 lF lL lR : Level} (L : function-class l1 lF lL) (R : function-class lF l2 lR) {A : UU l1} {B : UU l2} (f : A → B) where is-factorization-function-class-Prop : factorization f lF → Prop (lL ⊔ lR) is-factorization-function-class-Prop F = conj-Prop (L (left-map-factorization F)) (R (right-map-factorization F)) is-factorization-function-class : factorization f lF → UU (lL ⊔ lR) is-factorization-function-class = type-Prop ∘ is-factorization-function-class-Prop factorization-function-class : UU (l1 ⊔ l2 ⊔ lsuc lF ⊔ lL ⊔ lR) factorization-function-class = Σ (factorization f lF) (is-factorization-function-class)
Properties
Characterization of identifications of factorizations through a type
module _ {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} (f : A → B) {X : UU l3} where coherence-htpy-factorization-through : (F F' : factorization-through f X) → right-map-factorization-through F ~ right-map-factorization-through F' → left-map-factorization-through F ~ left-map-factorization-through F' → UU (l1 ⊔ l2) coherence-htpy-factorization-through F F' R L = ( is-factorization-factorization-through F ∙h htpy-comp-horizontal L R) ~ is-factorization-factorization-through F' htpy-factorization-through : (F F' : factorization-through f X) → UU (l1 ⊔ l2 ⊔ l3) htpy-factorization-through F F' = Σ ( right-map-factorization-through F ~ right-map-factorization-through F') ( λ R → Σ ( left-map-factorization-through F ~ left-map-factorization-through F') ( coherence-htpy-factorization-through F F' R)) refl-htpy-factorization-through : (F : factorization-through f X) → htpy-factorization-through F F pr1 (refl-htpy-factorization-through F) = refl-htpy pr1 (pr2 (refl-htpy-factorization-through F)) = refl-htpy pr2 (pr2 (refl-htpy-factorization-through F)) = right-unit-htpy htpy-eq-factorization-through : (F F' : factorization-through f X) → F = F' → htpy-factorization-through F F' htpy-eq-factorization-through F .F refl = refl-htpy-factorization-through F is-contr-total-htpy-factorization-through : (F : factorization-through f X) → is-contr (Σ (factorization-through f X) (htpy-factorization-through F)) is-contr-total-htpy-factorization-through F = is-contr-total-Eq-structure ( λ g hH R → Σ ( left-map-factorization-through F ~ left-map-factorization-through (g , hH)) ( coherence-htpy-factorization-through F (g , hH) R)) ( is-contr-total-htpy (right-map-factorization-through F)) ( right-map-factorization-through F , refl-htpy) ( is-contr-total-Eq-structure ( λ h H → coherence-htpy-factorization-through ( F) ( right-map-factorization-through F , h , H) ( refl-htpy)) ( is-contr-total-htpy (left-map-factorization-through F)) ( left-map-factorization-through F , refl-htpy) ( is-contr-total-htpy ( is-factorization-factorization-through F ∙h refl-htpy))) is-equiv-htpy-eq-factorization-through : (F F' : factorization-through f X) → is-equiv (htpy-eq-factorization-through F F') is-equiv-htpy-eq-factorization-through F = fundamental-theorem-id ( is-contr-total-htpy-factorization-through F) ( htpy-eq-factorization-through F) extensionality-factorization-through : (F F' : factorization-through f X) → (F = F') ≃ (htpy-factorization-through F F') pr1 (extensionality-factorization-through F F') = htpy-eq-factorization-through F F' pr2 (extensionality-factorization-through F F') = is-equiv-htpy-eq-factorization-through F F' eq-htpy-factorization-through : (F F' : factorization-through f X) → htpy-factorization-through F F' → F = F' eq-htpy-factorization-through F F' = map-inv-equiv (extensionality-factorization-through F F')