# Commuting triangles of homotopies

```agda
module foundation.commuting-triangles-of-homotopies where
```

<details><summary>Imports</summary>

```agda
open import foundation.commuting-triangles-of-identifications
open import foundation.universe-levels
open import foundation.whiskering-homotopies-composition

open import foundation-core.function-types
open import foundation-core.homotopies
```

</details>

## Idea

A triangle of [homotopies](foundation-core.homotopies.md) of dependent functions

```text
      top
    f ----> g
     \     /
 left \   / right
       ∨ ∨
        h
```

is said to
{{#concept "commute" Disambiguation="triangle of homotopies" Agda=coherence-triangle-homotopies}}
if there is a homotopy `left ~ top ∙h right`.

## Definitions

### Coherences of commuting triangles of homotopies

```agda
module _
  {l1 l2 : Level} {A : UU l1} {B : A  UU l2}
  {f g h : (x : A)  B x}
  where

  coherence-triangle-homotopies :
    (left : f ~ h) (right : g ~ h) (top : f ~ g)  UU (l1  l2)
  coherence-triangle-homotopies left right top = left ~ top ∙h right

  coherence-triangle-homotopies' :
    (left : f ~ h) (right : g ~ h) (top : f ~ g)  UU (l1  l2)
  coherence-triangle-homotopies' left right top = top ∙h right ~ left
```

## Properties

### Left whiskering commuting triangles of homotopies with respect to concatenation of homotopies

Consider a commuting triangle of homotopies

```text
        top
     f ----> g
      \     /
  left \   / right
        ∨ ∨
         h
```

where `f g h : (x : A) → B x`, and consider a homotopy `H : i ~ f` for a fourth
dependent function `i : (x : A) → B x`. Then the triangle of homotopies

```text
           H ∙h top
         i --------> g
           \       /
  H ∙h left \     / right
             \   /
              ∨ ∨
               h
```

commutes.

```agda
module _
  {l1 l2 : Level} {A : UU l1} {B : A  UU l2}
  {f g h i : (x : A)  B x} (H : i ~ f)
  (left : f ~ h) (right : g ~ h) (top : f ~ g)
  where

  left-whisker-concat-coherence-triangle-homotopies :
    (T : coherence-triangle-homotopies left right top) 
    coherence-triangle-homotopies (H ∙h left) right (H ∙h top)
  left-whisker-concat-coherence-triangle-homotopies T x =
    left-whisker-concat-coherence-triangle-identifications
      ( H x)
      ( left x)
      ( right x)
      ( top x)
      ( T x)
```

### Right whiskering triangles of homotopies with respect to concatenation of homotopies

Consider a commuting triangle of homotopies

```text
        top
     f ----> g
      \     /
  left \   / right
        ∨ ∨
         h
```

where `f g h : (x : A) → B x`, and consider a homotopy `H : h ~ i` for a fourth
dependent function `i : (x : A) → B x`. Then the triangle of homotopies

```text
              top
         f --------> g
           \       /
  left ∙h H \     / right ∙h H
             \   /
              ∨ ∨
               i
```

commutes.

```agda
module _
  {l1 l2 : Level} {A : UU l1} {B : A  UU l2}
  {f g h : (x : A)  B x}
  (left : f ~ h) (right : g ~ h) (top : f ~ g)
  where

  right-whisker-concat-coherence-triangle-homotopies :
    coherence-triangle-homotopies left right top 
    {i : (x : A)  B x} (H : h ~ i) 
    coherence-triangle-homotopies (left ∙h H) (right ∙h H) top
  right-whisker-concat-coherence-triangle-homotopies T H x =
    right-whisker-concat-coherence-triangle-identifications
      ( left x)
      ( right x)
      ( top x)
      ( H x)
      ( T x)
```

### Left whiskering of commuting triangles of homotopies with respect to composition

Consider a commuting triangle of homotopies

```text
        top
     f ----> g
      \     /
  left \   / right
        ∨ ∨
         h
```

where `f`, `g`, and `h` are maps `A → B`. Furthermore, consider a map
`i : B → X`. Then we obtain a commuting triangle of homotopies

```text
           i ·l top
     i ∘ f --------> i ∘ g
           \       /
  i ·l left \     / i ·l right
             \   /
              ∨ ∨
             i ∘ h.
```

This notion of whiskering should be compared to
[whiskering higher homotopies with respect to composition](foundation.whiskering-higher-homotopies-composition.md).

```agda
module _
  {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {X : UU l3} (i : B  X)
  {f g h : A  B} (left : f ~ h) (right : g ~ h) (top : f ~ g)
  where

  left-whisker-comp-coherence-triangle-homotopies :
    (T : coherence-triangle-homotopies left right top) 
    coherence-triangle-homotopies (i ·l left) (i ·l right) (i ·l top)
  left-whisker-comp-coherence-triangle-homotopies T x =
    map-coherence-triangle-identifications i (left x) (right x) (top x) (T x)
```

### Right whiskering commuting triangles of homotopies with respect to composition

Consider a commuting triangle of homotopies

```text
        top
     f ----> g
      \     /
  left \   / right
        ∨ ∨
         h
```

where `f`, `g`, and `h` are maps `A → B`. Furthermore, consider a map
`i : X → A`. Then we obtain a commuting triangle of homotopies

```text
           top ·r i
     f ∘ i --------> g ∘ i
           \       /
  left ·r i \     / right ·r i
             \   /
              ∨ ∨
             h ∘ i.
```

This notion of whiskering should be compared to
[whiskering higher homotopies with respect to composition](foundation.whiskering-higher-homotopies-composition.md).

```agda
module _
  {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {X : UU l3}
  {f g h : A  B} (left : f ~ h) (right : g ~ h) (top : f ~ g)
  where

  right-whisker-comp-coherence-triangle-homotopies :
    (T : coherence-triangle-homotopies left right top) (i : X  A) 
    coherence-triangle-homotopies (left ·r i) (right ·r i) (top ·r i)
  right-whisker-comp-coherence-triangle-homotopies T i = T  i
```