diff --git a/src/foundation-core.lagda.md b/src/foundation-core.lagda.md index f31ffa5491..7f25f3e438 100644 --- a/src/foundation-core.lagda.md +++ b/src/foundation-core.lagda.md @@ -50,7 +50,6 @@ open import foundation-core.retractions public open import foundation-core.sections public open import foundation-core.sets public open import foundation-core.small-types public -open import foundation-core.standard-pullbacks public open import foundation-core.subtypes public open import foundation-core.torsorial-type-families public open import foundation-core.transport-along-identifications public diff --git a/src/foundation-core/pullbacks.lagda.md b/src/foundation-core/pullbacks.lagda.md index 3218951ee7..369c89d4a5 100644 --- a/src/foundation-core/pullbacks.lagda.md +++ b/src/foundation-core/pullbacks.lagda.md @@ -13,6 +13,7 @@ open import foundation.dependent-pair-types open import foundation.functoriality-cartesian-product-types open import foundation.functoriality-fibers-of-maps open import foundation.identity-types +open import foundation.standard-pullbacks open import foundation.universe-levels open import foundation-core.diagonal-maps-of-types @@ -23,7 +24,6 @@ open import foundation-core.fibers-of-maps open import foundation-core.function-types open import foundation-core.functoriality-dependent-pair-types open import foundation-core.homotopies -open import foundation-core.standard-pullbacks open import foundation-core.universal-property-pullbacks ``` @@ -50,7 +50,7 @@ this concept is captured by this is a large proposition, which is not suitable for all purposes. Therefore, as our main definition of a pullback cone we consider the {{#concept "small predicate of being a pullback" Agda=is-pullback}}: given the -existence of the [standard pullback type](foundation-core.standard-pullbacks.md) +existence of the [standard pullback type](foundation.standard-pullbacks.md) `A ×_X B`, a cone is a _pullback_ if the gap map into the standard pullback is an [equivalence](foundation-core.equivalences.md). diff --git a/src/foundation-core/standard-pullbacks.lagda.md b/src/foundation-core/standard-pullbacks.lagda.md deleted file mode 100644 index b3d447d6bb..0000000000 --- a/src/foundation-core/standard-pullbacks.lagda.md +++ /dev/null @@ -1,404 +0,0 @@ -# Standard pullbacks - -```agda -module foundation-core.standard-pullbacks where -``` - -
Imports - -```agda -open import foundation.action-on-identifications-functions -open import foundation.cones-over-cospan-diagrams -open import foundation.dependent-pair-types -open import foundation.equality-cartesian-product-types -open import foundation.functoriality-cartesian-product-types -open import foundation.identity-types -open import foundation.structure-identity-principle -open import foundation.type-arithmetic-dependent-pair-types -open import foundation.universe-levels - -open import foundation-core.cartesian-product-types -open import foundation-core.commuting-squares-of-maps -open import foundation-core.diagonal-maps-of-types -open import foundation-core.equality-dependent-pair-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.retractions -open import foundation-core.sections -open import foundation-core.type-theoretic-principle-of-choice -open import foundation-core.universal-property-pullbacks -open import foundation-core.whiskering-identifications-concatenation -``` - -
- -## Idea - -Given a [cospan of types](foundation.cospans.md) - -```text - f : A → X ← B : g, -``` - -we can form the -{{#concept "standard pullback" Disambiguation="types" Agda=standard-pullback}} -`A ×_X B` satisfying -[the universal property of the pullback](foundation-core.universal-property-pullbacks.md) -of the cospan, completing the diagram - -```text - A ×_X B ------> B - | ⌟ | - | | g - | | - v v - A ---------> X. - f -``` - -The standard pullback consists of [pairs](foundation.dependent-pair-types.md) -`a : A` and `b : B` such that `f a` and `g b` agree: - -```text - A ×_X B := Σ (a : A) (b : B), (f a = g b). -``` - -Thus the standard [cone](foundation.cones-over-cospan-diagrams.md) consists of -the canonical projections. - -## Definitions - -### The standard pullback of a cospan - -```agda -module _ - {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {X : UU l3} (f : A → X) (g : B → X) - where - - standard-pullback : UU (l1 ⊔ l2 ⊔ l3) - standard-pullback = Σ A (λ x → Σ B (λ y → f x = g y)) - -module _ - {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {X : UU l3} {f : A → X} {g : B → X} - where - - vertical-map-standard-pullback : standard-pullback f g → A - vertical-map-standard-pullback = pr1 - - horizontal-map-standard-pullback : standard-pullback f g → B - horizontal-map-standard-pullback t = pr1 (pr2 t) - - coherence-square-standard-pullback : - coherence-square-maps - horizontal-map-standard-pullback - vertical-map-standard-pullback - g - f - coherence-square-standard-pullback t = pr2 (pr2 t) -``` - -### The cone at the standard pullback - -```agda -module _ - {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {X : UU l3} (f : A → X) (g : B → X) - where - - cone-standard-pullback : cone f g (standard-pullback f g) - pr1 cone-standard-pullback = vertical-map-standard-pullback - pr1 (pr2 cone-standard-pullback) = horizontal-map-standard-pullback - pr2 (pr2 cone-standard-pullback) = coherence-square-standard-pullback -``` - -### The gap map into the standard pullback - -The {{#concept "standard gap map" Disambiguation="cone over a cospan" Agda=gap}} -of a [commuting square](foundation-core.commuting-squares-of-maps.md) is the map -from the domain of the cone into the standard pullback. - -```agda -module _ - {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {X : UU l3} {C : UU l4} - (f : A → X) (g : B → X) - where - - gap : cone f g C → C → standard-pullback f g - pr1 (gap c z) = vertical-map-cone f g c z - pr1 (pr2 (gap c z)) = horizontal-map-cone f g c z - pr2 (pr2 (gap c z)) = coherence-square-cone f g c z -``` - -## Properties - -### Characterization of the identity type of the standard pullback - -```agda -module _ - {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {X : UU l3} (f : A → X) (g : B → X) - where - - Eq-standard-pullback : (t t' : standard-pullback f g) → UU (l1 ⊔ l2 ⊔ l3) - Eq-standard-pullback (a , b , p) (a' , b' , p') = - Σ (a = a') (λ α → Σ (b = b') (λ β → ap f α ∙ p' = p ∙ ap g β)) - - refl-Eq-standard-pullback : - (t : standard-pullback f g) → Eq-standard-pullback t t - pr1 (refl-Eq-standard-pullback (a , b , p)) = refl - pr1 (pr2 (refl-Eq-standard-pullback (a , b , p))) = refl - pr2 (pr2 (refl-Eq-standard-pullback (a , b , p))) = inv right-unit - - Eq-eq-standard-pullback : - (s t : standard-pullback f g) → s = t → Eq-standard-pullback s t - Eq-eq-standard-pullback s .s refl = refl-Eq-standard-pullback s - - extensionality-standard-pullback : - (t t' : standard-pullback f g) → (t = t') ≃ Eq-standard-pullback t t' - extensionality-standard-pullback (a , b , p) = - extensionality-Σ - ( λ bp' α → Σ (b = pr1 bp') (λ β → ap f α ∙ pr2 bp' = p ∙ ap g β)) - ( refl) - ( refl , inv right-unit) - ( λ x → id-equiv) - ( extensionality-Σ - ( λ p' β → p' = p ∙ ap g β) - ( refl) - ( inv right-unit) - ( λ y → id-equiv) - ( λ p' → equiv-concat' p' (inv right-unit) ∘e equiv-inv p p')) - - map-extensionality-standard-pullback : - { s t : standard-pullback f g} - ( α : vertical-map-standard-pullback s = vertical-map-standard-pullback t) - ( β : - horizontal-map-standard-pullback s = - horizontal-map-standard-pullback t) → - ( ( ap f α ∙ coherence-square-standard-pullback t) = - ( coherence-square-standard-pullback s ∙ ap g β)) → - s = t - map-extensionality-standard-pullback {s} {t} α β γ = - map-inv-equiv (extensionality-standard-pullback s t) (α , β , γ) -``` - -### The standard pullback satisfies the universal property of pullbacks - -```agda -module _ - {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {X : UU l3} (f : A → X) (g : B → X) - where - - abstract - universal-property-standard-pullback : - universal-property-pullback f g (cone-standard-pullback f g) - universal-property-standard-pullback C = - is-equiv-comp - ( tot (λ _ → map-distributive-Π-Σ)) - ( mapping-into-Σ) - ( is-equiv-mapping-into-Σ) - ( is-equiv-tot-is-fiberwise-equiv (λ _ → is-equiv-map-distributive-Π-Σ)) -``` - -### A cone is equal to the value of `cone-map` at its own gap map - -```agda -module _ - {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {X : UU l3} {C : UU l4} - (f : A → X) (g : B → X) - where - - htpy-cone-up-pullback-standard-pullback : - (c : cone f g C) → - htpy-cone f g (cone-map f g (cone-standard-pullback f g) (gap f g c)) c - pr1 (htpy-cone-up-pullback-standard-pullback c) = refl-htpy - pr1 (pr2 (htpy-cone-up-pullback-standard-pullback c)) = refl-htpy - pr2 (pr2 (htpy-cone-up-pullback-standard-pullback c)) = right-unit-htpy -``` - -### Standard pullbacks are symmetric - -The standard pullback of `f : A -> X <- B : g` is equivalent to the standard -pullback of `g : B -> X <- A : f`. - -```agda -map-commutative-standard-pullback : - {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {X : UU l3} - (f : A → X) (g : B → X) → standard-pullback f g → standard-pullback g f -pr1 (map-commutative-standard-pullback f g x) = - horizontal-map-standard-pullback x -pr1 (pr2 (map-commutative-standard-pullback f g x)) = - vertical-map-standard-pullback x -pr2 (pr2 (map-commutative-standard-pullback f g x)) = - inv (coherence-square-standard-pullback x) - -inv-inv-map-commutative-standard-pullback : - {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {X : UU l3} - (f : A → X) (g : B → X) → - ( map-commutative-standard-pullback f g ∘ - map-commutative-standard-pullback g f) ~ id -inv-inv-map-commutative-standard-pullback f g x = - eq-pair-eq-fiber - ( eq-pair-eq-fiber - ( inv-inv (coherence-square-standard-pullback x))) - -abstract - is-equiv-map-commutative-standard-pullback : - {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {X : UU l3} - (f : A → X) (g : B → X) → is-equiv (map-commutative-standard-pullback f g) - is-equiv-map-commutative-standard-pullback f g = - is-equiv-is-invertible - ( map-commutative-standard-pullback g f) - ( inv-inv-map-commutative-standard-pullback f g) - ( inv-inv-map-commutative-standard-pullback g f) - -commutative-standard-pullback : - {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {X : UU l3} - (f : A → X) (g : B → X) → - standard-pullback f g ≃ standard-pullback g f -pr1 (commutative-standard-pullback f g) = - map-commutative-standard-pullback f g -pr2 (commutative-standard-pullback f g) = - is-equiv-map-commutative-standard-pullback f g -``` - -#### The gap map of the swapped cone computes as the underlying gap map followed by a swap - -```agda -triangle-map-commutative-standard-pullback : - {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {X : UU l3} {C : UU l4} - (f : A → X) (g : B → X) (c : cone f g C) → - gap g f (swap-cone f g c) ~ - map-commutative-standard-pullback f g ∘ gap f g c -triangle-map-commutative-standard-pullback f g c = refl-htpy -``` - -### Pullbacks can be "folded" - -Given a standard pullback square - -```text - f' - C -------> B - | ⌟ | - g'| | g - v v - A -------> X - f -``` - -we can "fold" the vertical edge onto the horizontal one and get a new pullback -square - -```text - C ---------> X - | ⌟ | - (f' , g') | | - v v - A × B -----> X × X, - f × g -``` - -moreover, this folded square is a pullback if and only if the original one is. - -```agda -module _ - {l1 l2 l3 : Level} - {A : UU l1} {B : UU l2} {X : UU l3} - (f : A → X) (g : B → X) - where - - fold-cone : - {l4 : Level} {C : UU l4} → - cone f g C → cone (map-product f g) (diagonal X) C - pr1 (pr1 (fold-cone c) z) = vertical-map-cone f g c z - pr2 (pr1 (fold-cone c) z) = horizontal-map-cone f g c z - pr1 (pr2 (fold-cone c)) = g ∘ horizontal-map-cone f g c - pr2 (pr2 (fold-cone c)) z = eq-pair (coherence-square-cone f g c z) refl - - map-fold-cone-standard-pullback : - standard-pullback f g → standard-pullback (map-product f g) (diagonal X) - pr1 (pr1 (map-fold-cone-standard-pullback x)) = - vertical-map-standard-pullback x - pr2 (pr1 (map-fold-cone-standard-pullback x)) = - horizontal-map-standard-pullback x - pr1 (pr2 (map-fold-cone-standard-pullback x)) = - g (horizontal-map-standard-pullback x) - pr2 (pr2 (map-fold-cone-standard-pullback x)) = - eq-pair (coherence-square-standard-pullback x) refl - - map-inv-fold-cone-standard-pullback : - standard-pullback (map-product f g) (diagonal X) → standard-pullback f g - pr1 (map-inv-fold-cone-standard-pullback ((a , b) , x , α)) = a - pr1 (pr2 (map-inv-fold-cone-standard-pullback ((a , b) , x , α))) = b - pr2 (pr2 (map-inv-fold-cone-standard-pullback ((a , b) , x , α))) = - ap pr1 α ∙ inv (ap pr2 α) - - abstract - is-section-map-inv-fold-cone-standard-pullback : - is-section - ( map-fold-cone-standard-pullback) - ( map-inv-fold-cone-standard-pullback) - is-section-map-inv-fold-cone-standard-pullback ((a , b) , (x , α)) = - map-extensionality-standard-pullback - ( map-product f g) - ( diagonal X) - ( refl) - ( ap pr2 α) - ( ( inv (is-section-pair-eq α)) ∙ - ( ap - ( λ t → eq-pair t (ap pr2 α)) - ( ( inv right-unit) ∙ - ( inv - ( left-whisker-concat - ( ap pr1 α) - ( left-inv (ap pr2 α)))) ∙ - ( inv (assoc (ap pr1 α) (inv (ap pr2 α)) (ap pr2 α))))) ∙ - ( eq-pair-concat - ( ap pr1 α ∙ inv (ap pr2 α)) - ( ap pr2 α) - ( refl) - ( ap pr2 α)) ∙ - ( ap - ( concat (eq-pair (ap pr1 α ∙ inv (ap pr2 α)) refl) (x , x)) - ( inv (ap-diagonal (ap pr2 α))))) - - abstract - is-retraction-map-inv-fold-cone-standard-pullback : - is-retraction - ( map-fold-cone-standard-pullback) - ( map-inv-fold-cone-standard-pullback) - is-retraction-map-inv-fold-cone-standard-pullback (a , b , p) = - map-extensionality-standard-pullback f g - ( refl) - ( refl) - ( inv - ( ( right-whisker-concat - ( ( right-whisker-concat - ( ap-pr1-eq-pair p refl) - ( inv (ap pr2 (eq-pair p refl)))) ∙ - ( ap (λ t → p ∙ inv t) (ap-pr2-eq-pair p refl)) ∙ - ( right-unit)) - ( refl)) ∙ - ( right-unit))) - - abstract - is-equiv-map-fold-cone-standard-pullback : - is-equiv map-fold-cone-standard-pullback - is-equiv-map-fold-cone-standard-pullback = - is-equiv-is-invertible - ( map-inv-fold-cone-standard-pullback) - ( is-section-map-inv-fold-cone-standard-pullback) - ( is-retraction-map-inv-fold-cone-standard-pullback) - - triangle-map-fold-cone-standard-pullback : - {l4 : Level} {C : UU l4} (c : cone f g C) → - gap (map-product f g) (diagonal X) (fold-cone c) ~ - map-fold-cone-standard-pullback ∘ gap f g c - triangle-map-fold-cone-standard-pullback c = refl-htpy -``` - -## Table of files about pullbacks - -The following table lists files that are about pullbacks as a general concept. - -{{#include tables/pullbacks.md}} diff --git a/src/foundation/coproducts-pullbacks.lagda.md b/src/foundation/coproducts-pullbacks.lagda.md index 67e694bbc5..e61513962f 100644 --- a/src/foundation/coproducts-pullbacks.lagda.md +++ b/src/foundation/coproducts-pullbacks.lagda.md @@ -14,6 +14,7 @@ open import foundation.dependent-pair-types open import foundation.equality-coproduct-types open import foundation.functoriality-coproduct-types open import foundation.identity-types +open import foundation.standard-pullbacks open import foundation.universe-levels open import foundation-core.equality-dependent-pair-types @@ -23,7 +24,6 @@ open import foundation-core.homotopies open import foundation-core.pullbacks open import foundation-core.retractions open import foundation-core.sections -open import foundation-core.standard-pullbacks open import foundation-core.universal-property-pullbacks ``` diff --git a/src/foundation/dependent-products-pullbacks.lagda.md b/src/foundation/dependent-products-pullbacks.lagda.md index 9b34417078..157b8e5143 100644 --- a/src/foundation/dependent-products-pullbacks.lagda.md +++ b/src/foundation/dependent-products-pullbacks.lagda.md @@ -12,6 +12,7 @@ open import foundation.dependent-pair-types open import foundation.function-extensionality open import foundation.functoriality-dependent-function-types open import foundation.identity-types +open import foundation.standard-pullbacks open import foundation.universe-levels open import foundation-core.equivalences @@ -20,7 +21,6 @@ open import foundation-core.homotopies open import foundation-core.pullbacks open import foundation-core.retractions open import foundation-core.sections -open import foundation-core.standard-pullbacks open import foundation-core.universal-property-pullbacks ``` diff --git a/src/foundation/dependent-sums-pullbacks.lagda.md b/src/foundation/dependent-sums-pullbacks.lagda.md index 852a428f9e..ae048f2205 100644 --- a/src/foundation/dependent-sums-pullbacks.lagda.md +++ b/src/foundation/dependent-sums-pullbacks.lagda.md @@ -11,6 +11,7 @@ open import foundation.cones-over-cospan-diagrams open import foundation.dependent-pair-types open import foundation.equivalences open import foundation.identity-types +open import foundation.standard-pullbacks open import foundation.transport-along-identifications open import foundation.type-arithmetic-dependent-pair-types open import foundation.universe-levels @@ -23,7 +24,6 @@ open import foundation-core.homotopies open import foundation-core.pullbacks open import foundation-core.retractions open import foundation-core.sections -open import foundation-core.standard-pullbacks open import foundation-core.universal-property-pullbacks ``` diff --git a/src/foundation/diagonals-of-maps.lagda.md b/src/foundation/diagonals-of-maps.lagda.md index 0cbbaee888..fcf5a1366a 100644 --- a/src/foundation/diagonals-of-maps.lagda.md +++ b/src/foundation/diagonals-of-maps.lagda.md @@ -10,6 +10,7 @@ module foundation.diagonals-of-maps where open import foundation.action-on-identifications-functions open import foundation.dependent-pair-types open import foundation.equality-fibers-of-maps +open import foundation.standard-pullbacks open import foundation.universe-levels open import foundation-core.contractible-maps @@ -20,7 +21,6 @@ open import foundation-core.function-types open import foundation-core.homotopies open import foundation-core.identity-types open import foundation-core.propositional-maps -open import foundation-core.standard-pullbacks open import foundation-core.truncated-maps open import foundation-core.truncated-types open import foundation-core.truncation-levels diff --git a/src/foundation/fiber-inclusions.lagda.md b/src/foundation/fiber-inclusions.lagda.md index ddd5de671f..fb33d403c9 100644 --- a/src/foundation/fiber-inclusions.lagda.md +++ b/src/foundation/fiber-inclusions.lagda.md @@ -12,6 +12,7 @@ open import foundation.cones-over-cospan-diagrams open import foundation.dependent-pair-types open import foundation.faithful-maps open import foundation.fibers-of-maps +open import foundation.standard-pullbacks open import foundation.transport-along-identifications open import foundation.type-arithmetic-dependent-pair-types open import foundation.unit-type @@ -29,7 +30,6 @@ open import foundation-core.propositional-maps open import foundation-core.propositions open import foundation-core.pullbacks open import foundation-core.sets -open import foundation-core.standard-pullbacks open import foundation-core.truncated-maps open import foundation-core.truncated-types open import foundation-core.truncation-levels diff --git a/src/foundation/functoriality-pullbacks.lagda.md b/src/foundation/functoriality-pullbacks.lagda.md index f09e4151a8..76eaf05019 100644 --- a/src/foundation/functoriality-pullbacks.lagda.md +++ b/src/foundation/functoriality-pullbacks.lagda.md @@ -11,12 +11,12 @@ open import foundation.action-on-identifications-functions open import foundation.cones-over-cospan-diagrams open import foundation.dependent-pair-types open import foundation.morphisms-cospan-diagrams +open import foundation.standard-pullbacks open import foundation.universe-levels open import foundation-core.equivalences open import foundation-core.identity-types open import foundation-core.pullbacks -open import foundation-core.standard-pullbacks ``` diff --git a/src/foundation/postcomposition-pullbacks.lagda.md b/src/foundation/postcomposition-pullbacks.lagda.md index b075c5c722..725fae5fd9 100644 --- a/src/foundation/postcomposition-pullbacks.lagda.md +++ b/src/foundation/postcomposition-pullbacks.lagda.md @@ -11,6 +11,7 @@ open import foundation.cones-over-cospan-diagrams open import foundation.dependent-pair-types open import foundation.function-extensionality open import foundation.identity-types +open import foundation.standard-pullbacks open import foundation.universe-levels open import foundation.whiskering-homotopies-composition @@ -21,7 +22,6 @@ open import foundation-core.functoriality-dependent-pair-types open import foundation-core.homotopies open import foundation-core.postcomposition-functions open import foundation-core.pullbacks -open import foundation-core.standard-pullbacks open import foundation-core.universal-property-pullbacks ``` diff --git a/src/foundation/products-pullbacks.lagda.md b/src/foundation/products-pullbacks.lagda.md index 8f6b311a98..6454d0137b 100644 --- a/src/foundation/products-pullbacks.lagda.md +++ b/src/foundation/products-pullbacks.lagda.md @@ -11,6 +11,7 @@ open import foundation.cones-over-cospan-diagrams open import foundation.dependent-pair-types open import foundation.equality-cartesian-product-types open import foundation.functoriality-cartesian-product-types +open import foundation.standard-pullbacks open import foundation.type-arithmetic-dependent-pair-types open import foundation.universe-levels @@ -21,7 +22,6 @@ open import foundation-core.functoriality-dependent-pair-types open import foundation-core.homotopies open import foundation-core.identity-types open import foundation-core.pullbacks -open import foundation-core.standard-pullbacks open import foundation-core.universal-property-pullbacks ``` diff --git a/src/foundation/pullbacks.lagda.md b/src/foundation/pullbacks.lagda.md index 537e5052ec..652fa205db 100644 --- a/src/foundation/pullbacks.lagda.md +++ b/src/foundation/pullbacks.lagda.md @@ -65,7 +65,7 @@ this concept is captured by this is a large proposition, which is not suitable for all purposes. Therefore, as our main definition of a pullback cone we consider the {{#concept "small predicate of being a pullback" Agda=is-pullback}}: given the -existence of the [standard pullback type](foundation-core.standard-pullbacks.md) +existence of the [standard pullback type](foundation.standard-pullbacks.md) `A ×_X B`, a cone is a _pullback_ if the gap map into the standard pullback is an [equivalence](foundation-core.equivalences.md). diff --git a/src/foundation/standard-pullbacks.lagda.md b/src/foundation/standard-pullbacks.lagda.md index 6ac58a978c..4d73beac89 100644 --- a/src/foundation/standard-pullbacks.lagda.md +++ b/src/foundation/standard-pullbacks.lagda.md @@ -2,8 +2,6 @@ ```agda module foundation.standard-pullbacks where - -open import foundation-core.standard-pullbacks public ```
Imports @@ -11,24 +9,25 @@ open import foundation-core.standard-pullbacks public ```agda open import foundation.action-on-identifications-functions open import foundation.cones-over-cospan-diagrams -open import foundation.coproduct-types open import foundation.dependent-pair-types -open import foundation.equality-coproduct-types -open import foundation.function-extensionality -open import foundation.functoriality-coproduct-types -open import foundation.functoriality-function-types +open import foundation.equality-cartesian-product-types +open import foundation.functoriality-cartesian-product-types open import foundation.identity-types +open import foundation.structure-identity-principle open import foundation.universe-levels -open import foundation.whiskering-homotopies-composition +open import foundation-core.commuting-squares-of-maps +open import foundation-core.diagonal-maps-of-types open import foundation-core.equality-dependent-pair-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.postcomposition-functions open import foundation-core.retractions open import foundation-core.sections +open import foundation-core.type-theoretic-principle-of-choice +open import foundation-core.universal-property-pullbacks +open import foundation-core.whiskering-identifications-concatenation ```
@@ -67,6 +66,335 @@ The standard pullback consists of [pairs](foundation.dependent-pair-types.md) thus the standard [cone](foundation.cones-over-cospan-diagrams.md) consists of the canonical projections. +## Definitions + +### The standard pullback of a cospan + +```agda +module _ + {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {X : UU l3} (f : A → X) (g : B → X) + where + + standard-pullback : UU (l1 ⊔ l2 ⊔ l3) + standard-pullback = Σ A (λ x → Σ B (λ y → f x = g y)) + +module _ + {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {X : UU l3} {f : A → X} {g : B → X} + where + + vertical-map-standard-pullback : standard-pullback f g → A + vertical-map-standard-pullback = pr1 + + horizontal-map-standard-pullback : standard-pullback f g → B + horizontal-map-standard-pullback t = pr1 (pr2 t) + + coherence-square-standard-pullback : + coherence-square-maps + horizontal-map-standard-pullback + vertical-map-standard-pullback + g + f + coherence-square-standard-pullback t = pr2 (pr2 t) +``` + +### The cone at the standard pullback + +```agda +module _ + {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {X : UU l3} (f : A → X) (g : B → X) + where + + cone-standard-pullback : cone f g (standard-pullback f g) + pr1 cone-standard-pullback = vertical-map-standard-pullback + pr1 (pr2 cone-standard-pullback) = horizontal-map-standard-pullback + pr2 (pr2 cone-standard-pullback) = coherence-square-standard-pullback +``` + +### The gap map into the standard pullback + +The {{#concept "standard gap map" Disambiguation="cone over a cospan" Agda=gap}} +of a [commuting square](foundation-core.commuting-squares-of-maps.md) is the map +from the domain of the cone into the standard pullback. + +```agda +module _ + {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {X : UU l3} {C : UU l4} + (f : A → X) (g : B → X) + where + + gap : cone f g C → C → standard-pullback f g + pr1 (gap c z) = vertical-map-cone f g c z + pr1 (pr2 (gap c z)) = horizontal-map-cone f g c z + pr2 (pr2 (gap c z)) = coherence-square-cone f g c z +``` + +## Properties + +### Characterization of the identity type of the standard pullback + +```agda +module _ + {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {X : UU l3} (f : A → X) (g : B → X) + where + + Eq-standard-pullback : (t t' : standard-pullback f g) → UU (l1 ⊔ l2 ⊔ l3) + Eq-standard-pullback (a , b , p) (a' , b' , p') = + Σ (a = a') (λ α → Σ (b = b') (λ β → ap f α ∙ p' = p ∙ ap g β)) + + refl-Eq-standard-pullback : + (t : standard-pullback f g) → Eq-standard-pullback t t + pr1 (refl-Eq-standard-pullback (a , b , p)) = refl + pr1 (pr2 (refl-Eq-standard-pullback (a , b , p))) = refl + pr2 (pr2 (refl-Eq-standard-pullback (a , b , p))) = inv right-unit + + Eq-eq-standard-pullback : + (s t : standard-pullback f g) → s = t → Eq-standard-pullback s t + Eq-eq-standard-pullback s .s refl = refl-Eq-standard-pullback s + + extensionality-standard-pullback : + (t t' : standard-pullback f g) → (t = t') ≃ Eq-standard-pullback t t' + extensionality-standard-pullback (a , b , p) = + extensionality-Σ + ( λ bp' α → Σ (b = pr1 bp') (λ β → ap f α ∙ pr2 bp' = p ∙ ap g β)) + ( refl) + ( refl , inv right-unit) + ( λ x → id-equiv) + ( extensionality-Σ + ( λ p' β → p' = p ∙ ap g β) + ( refl) + ( inv right-unit) + ( λ y → id-equiv) + ( λ p' → equiv-concat' p' (inv right-unit) ∘e equiv-inv p p')) + + map-extensionality-standard-pullback : + { s t : standard-pullback f g} + ( α : vertical-map-standard-pullback s = vertical-map-standard-pullback t) + ( β : + horizontal-map-standard-pullback s = + horizontal-map-standard-pullback t) → + ( ( ap f α ∙ coherence-square-standard-pullback t) = + ( coherence-square-standard-pullback s ∙ ap g β)) → + s = t + map-extensionality-standard-pullback {s} {t} α β γ = + map-inv-equiv (extensionality-standard-pullback s t) (α , β , γ) +``` + +### The standard pullback satisfies the universal property of pullbacks + +```agda +module _ + {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {X : UU l3} (f : A → X) (g : B → X) + where + + abstract + universal-property-standard-pullback : + universal-property-pullback f g (cone-standard-pullback f g) + universal-property-standard-pullback C = + is-equiv-comp + ( tot (λ _ → map-distributive-Π-Σ)) + ( mapping-into-Σ) + ( is-equiv-mapping-into-Σ) + ( is-equiv-tot-is-fiberwise-equiv (λ _ → is-equiv-map-distributive-Π-Σ)) +``` + +### A cone is equal to the value of `cone-map` at its own gap map + +```agda +module _ + {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {X : UU l3} {C : UU l4} + (f : A → X) (g : B → X) + where + + htpy-cone-up-pullback-standard-pullback : + (c : cone f g C) → + htpy-cone f g (cone-map f g (cone-standard-pullback f g) (gap f g c)) c + pr1 (htpy-cone-up-pullback-standard-pullback c) = refl-htpy + pr1 (pr2 (htpy-cone-up-pullback-standard-pullback c)) = refl-htpy + pr2 (pr2 (htpy-cone-up-pullback-standard-pullback c)) = right-unit-htpy +``` + +### Standard pullbacks are symmetric + +The standard pullback of `f : A -> X <- B : g` is equivalent to the standard +pullback of `g : B -> X <- A : f`. + +```agda +map-commutative-standard-pullback : + {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {X : UU l3} + (f : A → X) (g : B → X) → standard-pullback f g → standard-pullback g f +pr1 (map-commutative-standard-pullback f g x) = + horizontal-map-standard-pullback x +pr1 (pr2 (map-commutative-standard-pullback f g x)) = + vertical-map-standard-pullback x +pr2 (pr2 (map-commutative-standard-pullback f g x)) = + inv (coherence-square-standard-pullback x) + +inv-inv-map-commutative-standard-pullback : + {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {X : UU l3} + (f : A → X) (g : B → X) → + ( map-commutative-standard-pullback f g ∘ + map-commutative-standard-pullback g f) ~ id +inv-inv-map-commutative-standard-pullback f g x = + eq-pair-eq-fiber + ( eq-pair-eq-fiber + ( inv-inv (coherence-square-standard-pullback x))) + +abstract + is-equiv-map-commutative-standard-pullback : + {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {X : UU l3} + (f : A → X) (g : B → X) → is-equiv (map-commutative-standard-pullback f g) + is-equiv-map-commutative-standard-pullback f g = + is-equiv-is-invertible + ( map-commutative-standard-pullback g f) + ( inv-inv-map-commutative-standard-pullback f g) + ( inv-inv-map-commutative-standard-pullback g f) + +commutative-standard-pullback : + {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {X : UU l3} + (f : A → X) (g : B → X) → + standard-pullback f g ≃ standard-pullback g f +pr1 (commutative-standard-pullback f g) = + map-commutative-standard-pullback f g +pr2 (commutative-standard-pullback f g) = + is-equiv-map-commutative-standard-pullback f g +``` + +#### The gap map of the swapped cone computes as the underlying gap map followed by a swap + +```agda +triangle-map-commutative-standard-pullback : + {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {X : UU l3} {C : UU l4} + (f : A → X) (g : B → X) (c : cone f g C) → + gap g f (swap-cone f g c) ~ + map-commutative-standard-pullback f g ∘ gap f g c +triangle-map-commutative-standard-pullback f g c = refl-htpy +``` + +### Pullbacks can be "folded" + +Given a standard pullback square + +```text + f' + C -------> B + | ⌟ | + g'| | g + v v + A -------> X + f +``` + +we can "fold" the vertical edge onto the horizontal one and get a new pullback +square + +```text + C ---------> X + | ⌟ | + (f' , g') | | + v v + A × B -----> X × X, + f × g +``` + +moreover, this folded square is a pullback if and only if the original one is. + +```agda +module _ + {l1 l2 l3 : Level} + {A : UU l1} {B : UU l2} {X : UU l3} + (f : A → X) (g : B → X) + where + + fold-cone : + {l4 : Level} {C : UU l4} → + cone f g C → cone (map-product f g) (diagonal X) C + pr1 (pr1 (fold-cone c) z) = vertical-map-cone f g c z + pr2 (pr1 (fold-cone c) z) = horizontal-map-cone f g c z + pr1 (pr2 (fold-cone c)) = g ∘ horizontal-map-cone f g c + pr2 (pr2 (fold-cone c)) z = eq-pair (coherence-square-cone f g c z) refl + + map-fold-cone-standard-pullback : + standard-pullback f g → standard-pullback (map-product f g) (diagonal X) + pr1 (pr1 (map-fold-cone-standard-pullback x)) = + vertical-map-standard-pullback x + pr2 (pr1 (map-fold-cone-standard-pullback x)) = + horizontal-map-standard-pullback x + pr1 (pr2 (map-fold-cone-standard-pullback x)) = + g (horizontal-map-standard-pullback x) + pr2 (pr2 (map-fold-cone-standard-pullback x)) = + eq-pair (coherence-square-standard-pullback x) refl + + map-inv-fold-cone-standard-pullback : + standard-pullback (map-product f g) (diagonal X) → standard-pullback f g + pr1 (map-inv-fold-cone-standard-pullback ((a , b) , x , α)) = a + pr1 (pr2 (map-inv-fold-cone-standard-pullback ((a , b) , x , α))) = b + pr2 (pr2 (map-inv-fold-cone-standard-pullback ((a , b) , x , α))) = + ap pr1 α ∙ inv (ap pr2 α) + + abstract + is-section-map-inv-fold-cone-standard-pullback : + is-section + ( map-fold-cone-standard-pullback) + ( map-inv-fold-cone-standard-pullback) + is-section-map-inv-fold-cone-standard-pullback ((a , b) , (x , α)) = + map-extensionality-standard-pullback + ( map-product f g) + ( diagonal X) + ( refl) + ( ap pr2 α) + ( ( inv (is-section-pair-eq α)) ∙ + ( ap + ( λ t → eq-pair t (ap pr2 α)) + ( ( inv right-unit) ∙ + ( inv + ( left-whisker-concat + ( ap pr1 α) + ( left-inv (ap pr2 α)))) ∙ + ( inv (assoc (ap pr1 α) (inv (ap pr2 α)) (ap pr2 α))))) ∙ + ( eq-pair-concat + ( ap pr1 α ∙ inv (ap pr2 α)) + ( ap pr2 α) + ( refl) + ( ap pr2 α)) ∙ + ( ap + ( concat (eq-pair (ap pr1 α ∙ inv (ap pr2 α)) refl) (x , x)) + ( inv (ap-diagonal (ap pr2 α))))) + + abstract + is-retraction-map-inv-fold-cone-standard-pullback : + is-retraction + ( map-fold-cone-standard-pullback) + ( map-inv-fold-cone-standard-pullback) + is-retraction-map-inv-fold-cone-standard-pullback (a , b , p) = + map-extensionality-standard-pullback f g + ( refl) + ( refl) + ( inv + ( ( right-whisker-concat + ( ( right-whisker-concat + ( ap-pr1-eq-pair p refl) + ( inv (ap pr2 (eq-pair p refl)))) ∙ + ( ap (λ t → p ∙ inv t) (ap-pr2-eq-pair p refl)) ∙ + ( right-unit)) + ( refl)) ∙ + ( right-unit))) + + abstract + is-equiv-map-fold-cone-standard-pullback : + is-equiv map-fold-cone-standard-pullback + is-equiv-map-fold-cone-standard-pullback = + is-equiv-is-invertible + ( map-inv-fold-cone-standard-pullback) + ( is-section-map-inv-fold-cone-standard-pullback) + ( is-retraction-map-inv-fold-cone-standard-pullback) + + triangle-map-fold-cone-standard-pullback : + {l4 : Level} {C : UU l4} (c : cone f g C) → + gap (map-product f g) (diagonal X) (fold-cone c) ~ + map-fold-cone-standard-pullback ∘ gap f g c + triangle-map-fold-cone-standard-pullback c = refl-htpy +``` + ## Properties ### The equivalence on standard pullbacks induced by parallel cospans diff --git a/src/foundation/universal-property-cartesian-product-types.lagda.md b/src/foundation/universal-property-cartesian-product-types.lagda.md index d351347122..2b8c5788c9 100644 --- a/src/foundation/universal-property-cartesian-product-types.lagda.md +++ b/src/foundation/universal-property-cartesian-product-types.lagda.md @@ -9,6 +9,7 @@ module foundation.universal-property-cartesian-product-types where ```agda open import foundation.cones-over-cospan-diagrams open import foundation.dependent-pair-types +open import foundation.standard-pullbacks open import foundation.unit-type open import foundation.universe-levels @@ -19,7 +20,6 @@ open import foundation-core.function-types open import foundation-core.homotopies open import foundation-core.identity-types open import foundation-core.pullbacks -open import foundation-core.standard-pullbacks open import foundation-core.universal-property-pullbacks ``` diff --git a/src/foundation/universal-property-fiber-products.lagda.md b/src/foundation/universal-property-fiber-products.lagda.md index 22d91cd153..6a4c8732c1 100644 --- a/src/foundation/universal-property-fiber-products.lagda.md +++ b/src/foundation/universal-property-fiber-products.lagda.md @@ -10,6 +10,7 @@ module foundation.universal-property-fiber-products where open import foundation.cones-over-cospan-diagrams open import foundation.dependent-pair-types open import foundation.equality-cartesian-product-types +open import foundation.standard-pullbacks open import foundation.universe-levels open import foundation-core.cartesian-product-types @@ -21,7 +22,6 @@ open import foundation-core.functoriality-dependent-pair-types open import foundation-core.homotopies open import foundation-core.identity-types open import foundation-core.pullbacks -open import foundation-core.standard-pullbacks open import foundation-core.universal-property-pullbacks ``` diff --git a/tables/pullbacks.md b/tables/pullbacks.md index 552cde2fd8..77407e39b5 100644 --- a/tables/pullbacks.md +++ b/tables/pullbacks.md @@ -6,8 +6,7 @@ | The universal property of pullbacks (foundation-core) | [`foundation-core.universal-property-pullbacks`](foundation-core.universal-property-pullbacks.md) | | The universal property of pullbacks (foundation) | [`foundation.universal-property-pullbacks`](foundation.universal-property-pullbacks.md) | | The universal property of fiber products | [`foundation.universal-property-fiber-products`](foundation.universal-property-fiber-products.md) | -| Standard pullbacks (foundation-core) | [`foundation-core.standard-pullbacks`](foundation-core.standard-pullbacks.md) | -| Standard pullbacks (foundation) | [`foundation.standard-pullbacks`](foundation.standard-pullbacks.md) | +| Standard pullbacks | [`foundation.standard-pullbacks`](foundation.standard-pullbacks.md) | | Pullbacks (foundation-core) | [`foundation-core.pullbacks`](foundation-core.pullbacks.md) | | Pullbacks (foundation) | [`foundation.pullbacks`](foundation.pullbacks.md) | | Functoriality of pullbacks | [`foundation.functoriality-pullbacks`](foundation.functoriality-pullbacks.md) |