Whiskering homotopies
Content created by Egbert Rijke and Vojtěch Štěpančík.
Created on 2023-09-12.
Last modified on 2023-12-05.
module foundation.whiskering-homotopies where open import foundation-core.whiskering-homotopies public
Imports
open import foundation.action-on-identifications-functions open import foundation.commuting-squares-of-homotopies open import foundation.commuting-squares-of-identifications open import foundation.function-extensionality open import foundation.path-algebra open import foundation.postcomposition-functions open import foundation.universe-levels open import foundation-core.equivalences open import foundation-core.function-types open import foundation-core.functoriality-dependent-function-types open import foundation-core.homotopies open import foundation-core.identity-types open import foundation-core.precomposition-functions
Idea
There are two whiskering operations on homotopies. The left whiskering operation assumes a diagram of the form
f
-----> h
A -----> B -----> C
g
and is defined to be a function h ·l_ : (f ~ g) → (h ∘ f ~ h ∘ g)
. The right
whiskering operation assumes a diagram of the form
g
f ----->
A -----> B -----> C
h
and is defined to be a function _·r f : (g ~ h) → (g ∘ f ~ h ∘ f)
.
Note: The infix whiskering operators _·l_
and _·r_
use the
middle dot ·
(agda-input: \cdot
\centerdot
), as opposed to the infix homotopy concatenation operator _∙h_
which uses the bullet operator ∙
(agda-input:
\.
). If these look the same in your editor, we suggest that you change your
font. For more details, see How to install.
Properties
Computation of function extensionality on whiskerings
module _ { l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {C : UU l3} { f g : B → C} (h : A → B) where compute-eq-htpy-htpy-eq-right-whisk : ( p : f = g) → eq-htpy ((htpy-eq p) ·r h) = ap (precomp h C) p compute-eq-htpy-htpy-eq-right-whisk refl = eq-htpy-refl-htpy (f ∘ h) compute-eq-htpy-right-whisk : ( H : f ~ g) → eq-htpy (H ·r h) = ap (precomp h C) (eq-htpy H) compute-eq-htpy-right-whisk H = ( ap ( λ K → eq-htpy (K ·r h)) ( inv (is-section-eq-htpy H))) ∙ ( compute-eq-htpy-htpy-eq-right-whisk (eq-htpy H))
module _ { l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {C : UU l3} { f g : A → B} (h : B → C) where compute-eq-htpy-htpy-eq-left-whisk : ( p : f = g) → eq-htpy (h ·l (htpy-eq p)) = ap (postcomp A h) p compute-eq-htpy-htpy-eq-left-whisk refl = eq-htpy-refl-htpy (h ∘ f) compute-eq-htpy-left-whisk : (H : f ~ g) → eq-htpy (h ·l H) = ap (postcomp A h) (eq-htpy H) compute-eq-htpy-left-whisk H = ( ap ( λ K → eq-htpy (h ·l K)) ( inv (is-section-eq-htpy H))) ∙ ( compute-eq-htpy-htpy-eq-left-whisk (eq-htpy H))
Whiskering a square of homotopies by a homotopy is an equivalence
A
commuting square of homotopies
may be whiskered by a homotopy L
on the left or right, which results in a
commuting square of homotopies with L
appended or prepended to the two ways of
going around the square.
Diagramatically, we may turn the pasting diagram
H
f ~~~~~ g
︴ ︴
H' ︴ ⇗ ︴ K
︴ ︴
g' ~~~~~ h ~~~~~ k
K' L
into a commmuting square
H
f ~~~~~ g
︴ ︴
H' ︴ ⇗ ︴K ∙h L
︴ ︴
g' ~~~~~ k
K' ∙h L ,
and similarly for the other side.
module _ { l1 l2 : Level} {A : UU l1} {B : UU l2} { f g g' h k : A → B} where module _ ( H : f ~ g) (H' : f ~ g') {K : g ~ h} {K' : g' ~ h} (L : h ~ k) where equiv-right-whisk-square-htpy : ( coherence-square-homotopies H H' K K') ≃ ( coherence-square-homotopies H H' (K ∙h L) (K' ∙h L)) equiv-right-whisk-square-htpy = equiv-Π-equiv-family ( λ a → equiv-right-whisk-square-identification (H a) (H' a) (L a)) right-whisk-square-htpy : coherence-square-homotopies H H' K K' → coherence-square-homotopies H H' (K ∙h L) (K' ∙h L) right-whisk-square-htpy = map-equiv equiv-right-whisk-square-htpy right-unwhisk-square-htpy : coherence-square-homotopies H H' (K ∙h L) (K' ∙h L) → coherence-square-homotopies H H' K K' right-unwhisk-square-htpy = map-inv-equiv equiv-right-whisk-square-htpy module _ ( L : k ~ f) {H : f ~ g} {H' : f ~ g'} {K : g ~ h} {K' : g' ~ h} where equiv-left-whisk-square-htpy : ( coherence-square-homotopies H H' K K') ≃ ( coherence-square-homotopies (L ∙h H) (L ∙h H') K K') equiv-left-whisk-square-htpy = equiv-Π-equiv-family ( λ a → equiv-left-whisk-square-identification (L a)) left-whisk-square-htpy : coherence-square-homotopies H H' K K' → coherence-square-homotopies (L ∙h H) (L ∙h H') K K' left-whisk-square-htpy = map-equiv equiv-left-whisk-square-htpy left-unwhisk-square-htpy : coherence-square-homotopies (L ∙h H) (L ∙h H') K K' → coherence-square-homotopies H H' K K' left-unwhisk-square-htpy = map-inv-equiv equiv-left-whisk-square-htpy module _ { l1 l2 : Level} {A : UU l1} {B : UU l2} { f g h h' k m : A → B} ( H : f ~ g) {K : g ~ h} {K' : g ~ h'} {L : h ~ k} {L' : h' ~ k} (M : k ~ m) where equiv-both-whisk-square-htpy : ( coherence-square-homotopies K K' L L') ≃ ( coherence-square-homotopies (H ∙h K) (H ∙h K') (L ∙h M) (L' ∙h M)) equiv-both-whisk-square-htpy = equiv-Π-equiv-family ( λ a → equiv-both-whisk-square-identifications (H a) (M a)) both-whisk-square-htpy : ( coherence-square-homotopies K K' L L') → ( coherence-square-homotopies (H ∙h K) (H ∙h K') (L ∙h M) (L' ∙h M)) both-whisk-square-htpy = map-equiv equiv-both-whisk-square-htpy both-unwhisk-square-htpy : ( coherence-square-homotopies (H ∙h K) (H ∙h K') (L ∙h M) (L' ∙h M)) → ( coherence-square-homotopies K K' L L') both-unwhisk-square-htpy = map-inv-equiv equiv-both-whisk-square-htpy
Whiskering a square of homotopies by a map
Given a square of homotopies
H
g ~~~~~ h
︴ ︴
H' ︴ ⇗ ︴ K
︴ ︴
h' ~~~~~ k
K'
and a map f
, we may whisker it by a map on the left into a square of
homotopies
f ·l H
fg ~~~~~ fh
︴ ︴
f ·l H' ︴ ⇗ ︴f ·l K
︴ ︴
fh' ~~~~~ fk
f ·l K' ,
and similarly we may whisker it on the right.
module _ { l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {C : UU l3} ( f : B → C) {g h h' k : A → B} ( H : g ~ h) (H' : g ~ h') {K : h ~ k} {K' : h' ~ k} where ap-left-whisk-coherence-square-homotopies : coherence-square-homotopies H H' K K' → coherence-square-homotopies (f ·l H) (f ·l H') (f ·l K) (f ·l K') ap-left-whisk-coherence-square-homotopies α a = coherence-square-identifications-ap f (H a) (H' a) (K a) (K' a) (α a) module _ { l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {C : UU l3} { g h h' k : B → C} (H : g ~ h) (H' : g ~ h') {K : h ~ k} {K' : h' ~ k} ( f : A → B) where ap-right-whisk-coherence-square-homotopies : coherence-square-homotopies H H' K K' → coherence-square-homotopies (H ·r f) (H' ·r f) (K ·r f) (K' ·r f) ap-right-whisk-coherence-square-homotopies α = α ·r f
Recent changes
- 2023-12-05. Vojtěch Štěpančík. Functoriality of sequential colimits (#919).
- 2023-11-24. Egbert Rijke. Refactor precomposition (#937).
- 2023-09-12. Egbert Rijke. Factoring out whiskering (#756).