# Postcomposition of pullbacks
```agda
module foundation.postcomposition-pullbacks where
```
<details><summary>Imports</summary>
```agda
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
open import foundation-core.commuting-triangles-of-maps
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.pullbacks
open import foundation-core.universal-property-pullbacks
```
</details>
## Idea
Given a [pullback](foundation-core.pullbacks.md) square
```text
f'
C -------> B
| ⌟ |
g'| | g
∨ ∨
A -------> X
f
```
then the exponentiated square given by
[postcomposition](foundation-core.postcomposition-functions.md)
```text
f' ∘ -
(T → C) ---------> (T → B)
| |
g' ∘ - | | g ∘ -
| |
∨ ∨
(T → A) ---------> (T → X)
f ∘ -
```
is a pullback square for any type `T`.
## Definitions
### Postcomposition cones
```agda
postcomp-cone :
{l1 l2 l3 l4 l5 : Level}
{A : UU l1} {B : UU l2} {C : UU l3} {X : UU l4} (T : UU l5)
(f : A → X) (g : B → X) (c : cone f g C) →
cone (postcomp T f) (postcomp T g) (T → C)
pr1 (postcomp-cone T f g c) h = vertical-map-cone f g c ∘ h
pr1 (pr2 (postcomp-cone T f g c)) h = horizontal-map-cone f g c ∘ h
pr2 (pr2 (postcomp-cone T f g c)) h = eq-htpy (coherence-square-cone f g c ·r h)
```
## Properties
### The standard pullback of a postcomposition exponential computes as the type of cones
```agda
module _
{l1 l2 l3 l4 : Level}
{A : UU l1} {B : UU l2} {X : UU l3} (f : A → X) (g : B → X)
(T : UU l4)
where
map-standard-pullback-postcomp :
standard-pullback (postcomp T f) (postcomp T g) → cone f g T
map-standard-pullback-postcomp = tot (λ _ → tot (λ _ → htpy-eq))
abstract
is-equiv-map-standard-pullback-postcomp :
is-equiv map-standard-pullback-postcomp
is-equiv-map-standard-pullback-postcomp =
is-equiv-tot-is-fiberwise-equiv
( λ p → is-equiv-tot-is-fiberwise-equiv (λ q → funext (f ∘ p) (g ∘ q)))
compute-standard-pullback-postcomp :
standard-pullback (postcomp T f) (postcomp T g) ≃ cone f g T
compute-standard-pullback-postcomp =
( map-standard-pullback-postcomp ,
is-equiv-map-standard-pullback-postcomp)
```
### The precomposition action on cones computes as the gap map of a postcomposition cone
```agda
triangle-map-standard-pullback-postcomp :
{l1 l2 l3 l4 l5 : Level} {A : UU l1} {B : UU l2} {X : UU l3} {C : UU l4}
(T : UU l5) (f : A → X) (g : B → X) (c : cone f g C) →
coherence-triangle-maps
( cone-map f g c {T})
( map-standard-pullback-postcomp f g T)
( gap (postcomp T f) (postcomp T g) (postcomp-cone T f g c))
triangle-map-standard-pullback-postcomp T f g c h =
eq-pair-eq-fiber
( eq-pair-eq-fiber
( inv (is-section-eq-htpy (coherence-square-cone f g c ·r h))))
```
### Pullbacks are closed under postcomposition exponentiation
```agda
abstract
is-pullback-postcomp-is-pullback :
{l1 l2 l3 l4 l5 : Level} {A : UU l1} {B : UU l2} {X : UU l3} {C : UU l4}
(f : A → X) (g : B → X) (c : cone f g C) → is-pullback f g c →
(T : UU l5) →
is-pullback (postcomp T f) (postcomp T g) (postcomp-cone T f g c)
is-pullback-postcomp-is-pullback f g c is-pb-c T =
is-equiv-top-map-triangle
( cone-map f g c)
( map-standard-pullback-postcomp f g T)
( gap (f ∘_) (g ∘_) (postcomp-cone T f g c))
( triangle-map-standard-pullback-postcomp T f g c)
( is-equiv-map-standard-pullback-postcomp f g T)
( universal-property-pullback-is-pullback f g c is-pb-c T)
abstract
is-pullback-is-pullback-postcomp :
{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) →
( {l5 : Level} (T : UU l5) →
is-pullback (postcomp T f) (postcomp T g) (postcomp-cone T f g c)) →
is-pullback f g c
is-pullback-is-pullback-postcomp f g c is-pb-postcomp =
is-pullback-universal-property-pullback f g c
( λ T →
is-equiv-left-map-triangle
( cone-map f g c)
( map-standard-pullback-postcomp f g T)
( gap (f ∘_) (g ∘_) (postcomp-cone T f g c))
( triangle-map-standard-pullback-postcomp T f g c)
( is-pb-postcomp T)
( is-equiv-map-standard-pullback-postcomp f g T))
```
### Cones satisfying the universal property of pullbacks are closed under postcomposition exponentiation
```agda
module _
{l1 l2 l3 l4 l5 : Level} {A : UU l1} {B : UU l2} {X : UU l3} {C : UU l4}
(f : A → X) (g : B → X) (c : cone f g C) (T : UU l5)
where
universal-property-pullback-postcomp-universal-property-pullback :
universal-property-pullback f g c →
universal-property-pullback
( postcomp T f)
( postcomp T g)
( postcomp-cone T f g c)
universal-property-pullback-postcomp-universal-property-pullback H =
universal-property-pullback-is-pullback
( postcomp T f)
( postcomp T g)
( postcomp-cone T f g c)
( is-pullback-postcomp-is-pullback f g c
( is-pullback-universal-property-pullback f g c H)
( T))
```
## Table of files about pullbacks
The following table lists files that are about pullbacks as a general concept.
{{#include tables/pullbacks.md}}