# Homotopy algebra
```agda
module foundation.homotopy-algebra where
```
<details><summary>Imports</summary>
```agda
open import foundation.universe-levels
open import foundation.whiskering-homotopies-composition
open import foundation-core.function-types
open import foundation-core.homotopies
open import foundation-core.whiskering-homotopies-concatenation
```
</details>
## Idea
This file has been created to collect operations on and facts about higher
[homotopies](foundation-core.homotopies.md). The scope of this file is analogous
to the scope of the file [path algebra](foundation.path-algebra.md), which is
about higher identifications.
## Definitions
### Horizontal concatenation of homotopies
```agda
module _
{l1 l2 l3 : Level} {A : UU l1} {B : A → UU l2} {C : A → UU l3}
{f f' : (x : A) → B x} {g g' : {x : A} → B x → C x}
where
horizontal-concat-htpy : ({x : A} → g {x} ~ g' {x}) → f ~ f' → g ∘ f ~ g' ∘ f'
horizontal-concat-htpy G F = (g ·l F) ∙h (G ·r f')
horizontal-concat-htpy' :
({x : A} → g {x} ~ g' {x}) → f ~ f' → g ∘ f ~ g' ∘ f'
horizontal-concat-htpy' G F = (G ·r f) ∙h (g' ·l F)
```
## Properties
### The two definitions of horizontal concatenation of homotopies agree
```agda
module _
{l1 l2 l3 : Level} {A : UU l1} {B : A → UU l2} {C : A → UU l3}
where
coh-right-unit-horizontal-concat-htpy :
{f : (x : A) → B x} {g g' : {x : A} → B x → C x}
(G : {x : A} → g {x} ~ g' {x}) →
horizontal-concat-htpy G (refl-htpy' f) ~
horizontal-concat-htpy' G (refl-htpy' f)
coh-right-unit-horizontal-concat-htpy G = inv-htpy-right-unit-htpy
coh-left-unit-horizontal-concat-htpy :
{f f' : (x : A) → B x} {g : {x : A} → B x → C x}
(F : f ~ f') →
horizontal-concat-htpy (refl-htpy' g) F ~
horizontal-concat-htpy' (refl-htpy' g) F
coh-left-unit-horizontal-concat-htpy F = right-unit-htpy
```
For the general case, we must construct a coherence of the square
```text
g ·r F
gf -------> gf'
| |
G ·r f | | G ·r f'
∨ ∨
g'f ------> g'f'
g' ·r F
```
but this is an instance of naturality of `G` applied to `F`.
```agda
module _
{l1 l2 l3 : Level} {A : UU l1} {B : A → UU l2} {C : A → UU l3}
{f f' : (x : A) → B x} {g g' : {x : A} → B x → C x}
(G : {x : A} → g {x} ~ g' {x}) (F : f ~ f')
where
coh-horizontal-concat-htpy :
horizontal-concat-htpy' G F ~ horizontal-concat-htpy G F
coh-horizontal-concat-htpy = nat-htpy G ·r F
```
### Eckmann-Hilton for homotopies
```agda
module _
{l1 l2 l3 : Level} {X : UU l1} {Y : UU l2} {Z : UU l3}
{f g : X → Y} {f' g' : Y → Z}
where
commutative-right-whisker-left-whisker-htpy :
(H' : f' ~ g') (H : f ~ g) →
(H' ·r f) ∙h (g' ·l H) ~
(f' ·l H) ∙h (H' ·r g)
commutative-right-whisker-left-whisker-htpy H' H x =
coh-horizontal-concat-htpy H' H x
module _
{l : Level} {X : UU l}
where
eckmann-hilton-htpy :
(H K : id {A = X} ~ id) →
(H ∙h K) ~ (K ∙h H)
eckmann-hilton-htpy H K =
( inv-htpy
( left-whisker-concat-htpy H (left-unit-law-left-whisker-comp K))) ∙h
( commutative-right-whisker-left-whisker-htpy H K) ∙h
( right-whisker-concat-htpy (left-unit-law-left-whisker-comp K) H)
```