Whiskering homotopies with respect to composition
Content created by Fredrik Bakke and Egbert Rijke.
Created on 2024-02-06.
Last modified on 2024-04-17.
module foundation.whiskering-homotopies-composition where
Imports
open import foundation.action-on-identifications-functions open import foundation.universe-levels open import foundation-core.function-types open import foundation-core.homotopies open import foundation-core.identity-types
Idea
There are two whiskering operations¶ on homotopies with respect to composition. The left whiskering¶ operation of homotopies with respect to composition assumes a diagram of maps of the form
f
-----> h
A -----> B -----> C
g
and is defined to be the function H ↦ h ·l H : (f ~ g) → (h ∘ f ~ h ∘ g)
. The
right whiskering¶
operation of homotopies with respect to composition assumes a diagram of maps
the form
g
f ----->
A -----> B -----> C
h
and is defined to be the function H ↦ H ·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.
Note. We will define the whiskering operations with respect to function
composition for dependent functions. The definition of whiskering-operations
in whiskering operations does not support
this level of generality, so we will not be able to use it here.
Definitions
Left whiskering of homotopies
module _ {l1 l2 l3 : Level} {A : UU l1} {B : A → UU l2} {C : A → UU l3} where left-whisker-comp : (h : {x : A} → B x → C x) {f g : (x : A) → B x} → f ~ g → h ∘ f ~ h ∘ g left-whisker-comp h H x = ap h (H x) infixr 17 _·l_ _·l_ = left-whisker-comp
Right whiskering of homotopies
module _ {l1 l2 l3 : Level} {A : UU l1} {B : A → UU l2} {C : (x : A) → B x → UU l3} where right-whisker-comp : {g h : {x : A} (y : B x) → C x y} (H : {x : A} → g {x} ~ h {x}) (f : (x : A) → B x) → g ∘ f ~ h ∘ f right-whisker-comp H f x = H (f x) infixl 16 _·r_ _·r_ = right-whisker-comp
Double whiskering of homotopies
module _ {l1 l2 l3 l4 : Level} {A : UU l1} {B : A → UU l2} {C : (x : A) → B x → UU l3} {D : (x : A) → B x → UU l4} where double-whisker-comp : (left : {x : A} {y : B x} → C x y → D x y) {g h : {x : A} (y : B x) → C x y} (H : {x : A} → g {x} ~ h {x}) (right : (x : A) → B x) → left ∘ g ∘ right ~ left ∘ h ∘ right double-whisker-comp left H right = left ·l H ·r right
Properties
The left and right whiskering operations commute
We have the coherence
(h ·l H) ·r h' ~ h ·l (H ·r h')
definitionally.
module _ {l1 l2 l3 l4 : Level} {A : UU l1} {B : A → UU l2} {C : {x : A} → B x → UU l3} {D : {x : A} → B x → UU l4} {f g : {x : A} (y : B x) → C y} where coherence-double-whisker-comp : (h : {x : A} {y : B x} → C y → D y) (H : {x : A} → f {x} ~ g {x}) (h' : (x : A) → B x) → (h ·l H) ·r h' ~ h ·l (H ·r h') coherence-double-whisker-comp h H h' = refl-htpy
Unit laws and absorption laws for whiskering homotopies
The identity map is a unit element for whiskerings from the function side, and the reflexivity homotopy is an absorbing element on the homotopy side for whiskerings.
module _ {l1 l2 : Level} {A : UU l1} {B : A → UU l2} where left-unit-law-left-whisker-comp : {f f' : (x : A) → B x} (H : f ~ f') → id ·l H ~ H left-unit-law-left-whisker-comp H x = ap-id (H x) module _ {l1 l2 l3 : Level} {A : UU l1} {B : A → UU l2} {C : A → UU l3} where right-absorption-law-left-whisker-comp : {f : (x : A) → B x} (g : {x : A} → B x → C x) → g ·l refl-htpy {f = f} ~ refl-htpy right-absorption-law-left-whisker-comp g = refl-htpy module _ {l1 l2 l3 : Level} {A : UU l1} {B : A → UU l2} {C : (x : A) → B x → UU l3} where left-absorption-law-right-whisker-comp : {g : {x : A} (y : B x) → C x y} (f : (x : A) → B x) → refl-htpy {f = g} ·r f ~ refl-htpy left-absorption-law-right-whisker-comp f = refl-htpy module _ {l1 l2 : Level} {A : UU l1} {B : A → UU l2} where right-unit-law-right-whisker-comp : {f f' : (x : A) → B x} (H : f ~ f') → H ·r id ~ H right-unit-law-right-whisker-comp H = refl-htpy
Laws for whiskering an inverted homotopy
module _ {l1 l2 l3 : Level} {A : UU l1} {B : A → UU l2} {C : A → UU l3} {f f' : (x : A) → B x} (g : {x : A} → B x → C x) (H : f ~ f') where left-whisker-inv-htpy : g ·l (inv-htpy H) ~ inv-htpy (g ·l H) left-whisker-inv-htpy x = ap-inv g (H x) module _ {l1 l2 l3 : Level} {A : UU l1} {B : A → UU l2} {C : (x : A) → B x → UU l3} {g g' : {x : A} (y : B x) → C x y} (H : {x : A} → g {x} ~ g' {x}) (f : (x : A) → B x) where right-whisker-inv-htpy : inv-htpy H ·r f ~ inv-htpy (H ·r f) right-whisker-inv-htpy = refl-htpy
Inverse laws for whiskered homotopies
module _ {l1 l2 l3 : Level} {A : UU l1} {B : A → UU l2} {C : A → UU l3} {f f' : (x : A) → B x} (g : {x : A} → B x → C x) (H : f ~ f') where left-inv-htpy-left-whisker : g ·l (inv-htpy H) ∙h g ·l H ~ refl-htpy left-inv-htpy-left-whisker = ( ap-concat-htpy' (g ·l H) (left-whisker-inv-htpy g H)) ∙h ( left-inv-htpy (g ·l H)) right-inv-htpy-left-whisker : g ·l H ∙h g ·l (inv-htpy H) ~ refl-htpy right-inv-htpy-left-whisker = ( ap-concat-htpy (g ·l H) (left-whisker-inv-htpy g H)) ∙h ( right-inv-htpy (g ·l H)) module _ {l1 l2 l3 : Level} {A : UU l1} {B : A → UU l2} {C : (x : A) → B x → UU l3} {g g' : {x : A} (y : B x) → C x y} (H : {x : A} → g {x} ~ g' {x}) (f : (x : A) → B x) where left-inv-htpy-right-whisker : (inv-htpy H) ·r f ∙h H ·r f ~ refl-htpy left-inv-htpy-right-whisker = left-inv-htpy (H ·r f) right-inv-htpy-right-whisker : H ·r f ∙h (inv-htpy H) ·r f ~ refl-htpy right-inv-htpy-right-whisker = right-inv-htpy (H ·r f)
Distributivity of whiskering over concatenation of homotopies
module _ {l1 l2 l3 : Level} {A : UU l1} {B : A → UU l2} {C : A → UU l3} where distributive-left-whisker-comp-concat : { f g h : (x : A) → B x} (k : {x : A} → B x → C x) → ( H : f ~ g) (K : g ~ h) → k ·l (H ∙h K) ~ (k ·l H) ∙h (k ·l K) distributive-left-whisker-comp-concat k H K a = ap-concat k (H a) (K a) module _ {l1 l2 l3 : Level} {A : UU l1} {B : A → UU l2} {C : (x : A) → B x → UU l3} (k : (x : A) → B x) {f g h : {x : A} (y : B x) → C x y} (H : {x : A} → f {x} ~ g {x}) (K : {x : A} → g {x} ~ h {x}) where distributive-right-whisker-comp-concat : (H ∙h K) ·r k ~ (H ·r k) ∙h (K ·r k) distributive-right-whisker-comp-concat = refl-htpy
Whiskering preserves function composition
In other words, whiskering is an action of functions on homotopies.
module _ {l1 l2 l3 l4 : Level} {A : UU l1} {B : A → UU l2} {C : A → UU l3} {D : A → UU l4} where inv-preserves-comp-left-whisker-comp : ( k : {x : A} → C x → D x) (h : {x : A} → B x → C x) {f g : (x : A) → B x} ( H : f ~ g) → (k ∘ h) ·l H ~ k ·l (h ·l H) inv-preserves-comp-left-whisker-comp k h H x = ap-comp k h (H x) preserves-comp-left-whisker-comp : ( k : {x : A} → C x → D x) (h : {x : A} → B x → C x) {f g : (x : A) → B x} ( H : f ~ g) → k ·l (h ·l H) ~ (k ∘ h) ·l H preserves-comp-left-whisker-comp k h H = inv-htpy (inv-preserves-comp-left-whisker-comp k h H) module _ { l1 l2 l3 l4 : Level} { A : UU l1} {B : A → UU l2} {C : (x : A) → B x → UU l3} { D : (x : A) (y : B x) (z : C x y) → UU l4} { f g : {x : A} {y : B x} (z : C x y) → D x y z} ( h : {x : A} (y : B x) → C x y) (k : (x : A) → B x) ( H : {x : A} {y : B x} → f {x} {y} ~ g {x} {y}) where preserves-comp-right-whisker-comp : (H ·r h) ·r k ~ H ·r (h ∘ k) preserves-comp-right-whisker-comp = refl-htpy
A coherence for homotopies to the identity function
Consider a function f : A → A
and let H : f ~ id
be a homotopy to the
identity function. Then we have a homotopy
H ·r f ~ f ·l H.
module _ {l : Level} {A : UU l} {f : A → A} (H : f ~ id) where coh-htpy-id : H ·r f ~ f ·l H coh-htpy-id x = is-injective-concat' (H x) (nat-htpy-id H (H x)) inv-coh-htpy-id : f ·l H ~ H ·r f inv-coh-htpy-id = inv-htpy coh-htpy-id
See also
- For interactions between whiskering and exponentiation, see
foundation.composition-algebra
.
Recent changes
- 2024-04-17. Fredrik Bakke. Splitting idempotents (#1105).
- 2024-02-19. Fredrik Bakke. Additions for coherently invertible maps (#1024).
- 2024-02-06. Egbert Rijke and Fredrik Bakke. Refactor files about identity types and homotopies (#1014).