# The universal property of pullbacks ```agda module foundation-core.universal-property-pullbacks where ``` <details><summary>Imports</summary> ```agda open import foundation.action-on-identifications-functions open import foundation.cones-over-cospan-diagrams open import foundation.dependent-pair-types open import foundation.postcomposition-functions open import foundation.universe-levels open import foundation-core.contractible-maps open import foundation-core.contractible-types open import foundation-core.equivalences open import foundation-core.function-types open import foundation-core.functoriality-dependent-pair-types open import foundation-core.homotopies open import foundation-core.identity-types ``` </details> ## Definition ### The universal property of pullbacks ```agda module _ {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {X : UU l3} (f : A → X) (g : B → X) {C : UU l4} (c : cone f g C) where universal-property-pullback : UUω universal-property-pullback = {l : Level} (C' : UU l) → is-equiv (cone-map f g c {C'}) module _ {l1 l2 l3 l4 l5 : Level} {A : UU l1} {B : UU l2} {X : UU l3} (f : A → X) (g : B → X) {C : UU l4} (c : cone f g C) where map-universal-property-pullback : universal-property-pullback f g c → {C' : UU l5} (c' : cone f g C') → C' → C map-universal-property-pullback up-c {C'} = map-inv-is-equiv (up-c C') compute-map-universal-property-pullback : (up-c : universal-property-pullback f g c) → {C' : UU l5} (c' : cone f g C') → cone-map f g c (map-universal-property-pullback up-c c') = c' compute-map-universal-property-pullback up-c {C'} = is-section-map-inv-is-equiv (up-c C') ``` ## Properties ### The homotopy of cones obtained from the universal property of pullbacks ```agda module _ {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {X : UU l3} (f : A → X) (g : B → X) {C : UU l4} (c : cone f g C) (up : universal-property-pullback f g c) {l5 : Level} {C' : UU l5} (c' : cone f g C') where htpy-cone-map-universal-property-pullback : htpy-cone f g ( cone-map f g c (map-universal-property-pullback f g c up c')) ( c') htpy-cone-map-universal-property-pullback = htpy-eq-cone f g ( cone-map f g c (map-universal-property-pullback f g c up c')) ( c') ( compute-map-universal-property-pullback f g c up c') htpy-vertical-map-map-universal-property-pullback : vertical-map-cone f g ( cone-map f g c (map-universal-property-pullback f g c up c')) ~ vertical-map-cone f g c' htpy-vertical-map-map-universal-property-pullback = htpy-vertical-map-htpy-cone f g ( cone-map f g c (map-universal-property-pullback f g c up c')) ( c') ( htpy-cone-map-universal-property-pullback) htpy-horizontal-map-map-universal-property-pullback : horizontal-map-cone f g ( cone-map f g c (map-universal-property-pullback f g c up c')) ~ horizontal-map-cone f g c' htpy-horizontal-map-map-universal-property-pullback = htpy-horizontal-map-htpy-cone f g ( cone-map f g c (map-universal-property-pullback f g c up c')) ( c') ( htpy-cone-map-universal-property-pullback) coh-htpy-cone-map-universal-property-pullback : coherence-htpy-cone f g ( cone-map f g c (map-universal-property-pullback f g c up c')) ( c') ( htpy-vertical-map-map-universal-property-pullback) ( htpy-horizontal-map-map-universal-property-pullback) coh-htpy-cone-map-universal-property-pullback = coh-htpy-cone f g ( cone-map f g c (map-universal-property-pullback f g c up c')) ( c') ( htpy-cone-map-universal-property-pullback) ``` ### 3-for-2 property of pullbacks Given two cones `c` and `c'` over a common cospan `f : A → X ← B : g`, and a map between them `h` such that the diagram ```text h C ----> C' / \ / \ / / \ \ / / \ \ ∨ ∨ ∨ ∨ A --------> X <-------- B f g ``` is coherent, then if two out of the three conditions - `c` is a pullback cone - `c'` is a pullback cone - `h` is an equivalence hold, then so does the third. ```agda module _ {l1 l2 l3 l4 l5 : Level} {A : UU l1} {B : UU l2} {X : UU l3} {C : UU l4} {C' : UU l5} {f : A → X} {g : B → X} (c : cone f g C) (c' : cone f g C') (h : C' → C) (KLM : htpy-cone f g (cone-map f g c h) c') where inv-triangle-cone-cone : {l6 : Level} (D : UU l6) → cone-map f g c ∘ postcomp D h ~ cone-map f g c' inv-triangle-cone-cone D k = ap ( λ t → cone-map f g t k) ( eq-htpy-cone f g (cone-map f g c h) c' KLM) triangle-cone-cone : {l6 : Level} (D : UU l6) → cone-map f g c' ~ cone-map f g c ∘ postcomp D h triangle-cone-cone D k = inv (inv-triangle-cone-cone D k) abstract is-equiv-up-pullback-up-pullback : universal-property-pullback f g c → universal-property-pullback f g c' → is-equiv h is-equiv-up-pullback-up-pullback up up' = is-equiv-is-equiv-postcomp h ( λ D → is-equiv-top-map-triangle ( cone-map f g c') ( cone-map f g c) ( postcomp D h) ( triangle-cone-cone D) ( up D) ( up' D)) abstract up-pullback-up-pullback-is-equiv : is-equiv h → universal-property-pullback f g c → universal-property-pullback f g c' up-pullback-up-pullback-is-equiv is-equiv-h up D = is-equiv-left-map-triangle ( cone-map f g c') ( cone-map f g c) ( postcomp D h) ( triangle-cone-cone D) ( is-equiv-postcomp-is-equiv h is-equiv-h D) ( up D) abstract up-pullback-is-equiv-up-pullback : universal-property-pullback f g c' → is-equiv h → universal-property-pullback f g c up-pullback-is-equiv-up-pullback up' is-equiv-h D = is-equiv-right-map-triangle ( cone-map f g c') ( cone-map f g c) ( postcomp D h) ( triangle-cone-cone D) ( up' D) ( is-equiv-postcomp-is-equiv h is-equiv-h D) ``` ### Uniqueness of maps obtained via the universal property of pullbacks ```agda module _ {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {X : UU l3} (f : A → X) (g : B → X) {C : UU l4} (c : cone f g C) where abstract uniqueness-universal-property-pullback : universal-property-pullback f g c → {l5 : Level} (C' : UU l5) (c' : cone f g C') → is-contr (Σ (C' → C) (λ h → htpy-cone f g (cone-map f g c h) c')) uniqueness-universal-property-pullback up C' c' = is-contr-equiv' ( Σ (C' → C) (λ h → cone-map f g c h = c')) ( equiv-tot (λ h → extensionality-cone f g (cone-map f g c h) c')) ( is-contr-map-is-equiv (up C') c') ``` ## Table of files about pullbacks The following table lists files that are about pullbacks as a general concept. {{#include tables/pullbacks.md}}