# Transport along higher identifications
```agda
module foundation.transport-along-higher-identifications where
```
<details><summary>Imports</summary>
```agda
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-types
open import foundation.homotopies
open import foundation.homotopy-algebra
open import foundation.path-algebra
open import foundation.universe-levels
open import foundation.whiskering-homotopies-composition
open import foundation.whiskering-identifications-concatenation
open import foundation-core.identity-types
open import foundation-core.transport-along-identifications
open import foundation-core.whiskering-homotopies-concatenation
```
</details>
### The action on identifications of transport
```agda
module _
{l1 l2 : Level} {A : UU l1} {x y : A} {p p' : x = y}
where
tr² : (B : A → UU l2) (α : p = p') (b : B x) → (tr B p b) = (tr B p' b)
tr² B α b = ap (λ t → tr B t b) α
module _
{l1 l2 : Level} {A : UU l1} {x y : A} {p p' : x = y}
{α α' : p = p'}
where
tr³ : (B : A → UU l2) (β : α = α') (b : B x) → (tr² B α b) = (tr² B α' b)
tr³ B β b = ap (λ t → tr² B t b) β
module _
{l1 l2 : Level} {A : UU l1} {x y : A} {p p' : x = y}
{α α' : p = p'} {γ γ' : α = α'}
where
tr⁴ : (B : A → UU l2) (ψ : γ = γ') → (tr³ B γ) ~ (tr³ B γ')
tr⁴ B ψ b = ap (λ t → tr³ B t b) ψ
```
### Computing 2-dimensional transport in a family of identifications with a fixed source
```agda
module _
{l : Level} {A : UU l} {a b c : A} {q q' : b = c}
where
tr²-Id-right :
(α : q = q') (p : a = b) →
coherence-square-identifications
( tr-Id-right q p)
( tr² (Id a) α p)
( left-whisker-concat p α)
( tr-Id-right q' p)
tr²-Id-right α p =
inv-nat-htpy (λ (t : b = c) → tr-Id-right t p) α
```
### Coherences and algebraic identities for `tr²`
#### Computing `tr²` along the concatenation of identifications
```agda
module _
{l1 l2 : Level} {A : UU l1} {x y : A}
{B : A → UU l2}
where
tr²-concat :
{p p' p'' : x = y} (α : p = p') (β : p' = p'') →
tr² B (α ∙ β) ~ tr² B α ∙h tr² B β
tr²-concat α β b = ap-concat (λ t → tr B t b) α β
```
#### Computing `tr²` along the inverse of an identification
```agda
module _
{l1 l2 : Level} {A : UU l1} {x y : A}
{B : A → UU l2}
where
tr²-inv :
{p p' : x = y} (α : p = p') →
tr² B (inv α) ~ inv-htpy (tr² B α)
tr²-inv α b = ap-inv (λ t → tr B t b) α
left-inverse-law-tr² :
{p p' : x = y} (α : p = p') →
tr² B (inv α) ∙h tr² B α ~ refl-htpy
left-inverse-law-tr² α =
( right-whisker-concat-htpy (tr²-inv α) (tr² B α)) ∙h
( left-inv-htpy (tr² B α))
right-inverse-law-tr² :
{p p' : x = y} (α : p = p') →
tr² B α ∙h tr² B (inv α) ~ refl-htpy
right-inverse-law-tr² α =
( left-whisker-concat-htpy (tr² B α) (tr²-inv α)) ∙h
( right-inv-htpy (tr² B α))
```
#### Computing `tr²` along the unit laws for vertical concatenation of identifications
```agda
module _
{l1 l2 : Level} {A : UU l1} {x y : A}
{B : A → UU l2}
where
tr²-left-unit :
(p : x = y) → tr² B left-unit ~ tr-concat refl p
tr²-left-unit p = refl-htpy
tr²-right-unit :
(p : x = y) → tr² B right-unit ~ tr-concat p refl
tr²-right-unit refl = refl-htpy
```
#### Computing `tr²` along the whiskering of identification
```agda
module _
{l1 l2 : Level} {A : UU l1} {x y z : A}
{B : A → UU l2}
where
tr²-left-whisker :
(p : x = y) {q q' : y = z} (β : q = q') →
coherence-square-homotopies
( tr-concat p q)
( tr² B (left-whisker-concat p β))
( tr² B β ·r tr B p)
( tr-concat p q')
tr²-left-whisker refl refl = refl-htpy
```
```agda
module _
{l1 l2 : Level} {A : UU l1} {x y z : A}
{B : A → UU l2}
where
tr²-right-whisker :
{p p' : x = y} (α : p = p') (q : y = z) →
coherence-square-homotopies
( tr-concat p q)
( tr² B (right-whisker-concat α q))
( ( tr B q) ·l (tr² B α))
( tr-concat p' q)
tr²-right-whisker refl refl = inv-htpy right-unit-htpy
```
### Coherences and algebraic identities for `tr³`
#### Computing `tr³` along the concatenation of identifications
```agda
module _
{l1 l2 : Level} {A : UU l1} {B : A → UU l2}
{x y : A} {p p' : x = y} {α α' α'' : p = p'}
where
tr³-concat :
(γ : α = α') (δ : α' = α'') → tr³ B (γ ∙ δ) ~ (tr³ B γ) ∙h (tr³ B δ)
tr³-concat γ δ b = ap-concat (λ t → tr² B t b) γ δ
```
#### Computing `tr³` along the horizontal concatenation of identifications
```agda
module _
{l1 l2 : Level} {A : UU l1} {x y : A} {p p' p'' : x = y}
{α α' : p = p'} {β β' : p' = p''} {B : A → UU l2}
where
tr³-horizontal-concat :
(γ : α = α') (δ : β = β') →
coherence-square-homotopies
( tr²-concat α β)
( tr³ B (horizontal-concat-Id² γ δ))
( horizontal-concat-htpy² (tr³ B γ) (tr³ B δ))
( tr²-concat α' β')
tr³-horizontal-concat refl refl = inv-htpy right-unit-htpy
```
#### Computing `tr³` along the inverse of an identification
```agda
module _
{l1 l2 : Level} {A : UU l1} {x y : A} {p p' : x = y} {α α' : p = p'}
{B : A → UU l2}
where
tr³-inv :
(γ : α = α') →
tr³ B (inv γ) ~ inv-htpy (tr³ B γ)
tr³-inv γ b = ap-inv (λ t → tr² B t b) γ
left-inv-law-tr³ :
(γ : α = α') →
tr³ B (inv γ) ∙h tr³ B γ ~ refl-htpy
left-inv-law-tr³ γ =
( right-whisker-concat-htpy (tr³-inv γ) (tr³ B γ)) ∙h
( left-inv-htpy (tr³ B γ))
right-inv-law-tr³ :
(γ : α = α') →
tr³ B γ ∙h tr³ B (inv γ) ~ refl-htpy
right-inv-law-tr³ γ =
( left-whisker-concat-htpy (tr³ B γ) (tr³-inv γ)) ∙h
( right-inv-htpy (tr³ B γ))
```
#### Computing `tr³` along the unit laws for vertical concatenation of identifications
```agda
module _
{l1 l2 : Level} {A : UU l1} {x y : A} {p q : x = y}
{B : A → UU l2}
where
tr³-right-unit :
(α : p = q) →
tr³ B (right-unit {p = α}) ~ tr²-concat α refl ∙h right-unit-htpy
tr³-right-unit refl = refl-htpy
tr³-left-unit :
(α : p = q) →
tr³ B (left-unit {p = α}) ~ tr²-concat refl α ∙h left-unit-htpy
tr³-left-unit α = refl-htpy
```
#### Computing tr³ along the unit laws for whiskering of identifications
These coherences take the form of the following commutative diagrams. Note that
there is an asymmetry between the left and right coherence laws due to the
asymmetry in the definition of concatenation of identifications.
```agda
module _
{l1 l2 : Level} {A : UU l1} {x y : A}
{B : A → UU l2}
where
tr³-left-unit-law-left-whisker-concat :
{q q' : x = y} (β : q = q') →
coherence-square-homotopies
( inv-htpy right-unit-htpy)
( refl-htpy)
( tr²-left-whisker refl β)
( tr³ B (left-unit-law-left-whisker-concat β))
tr³-left-unit-law-left-whisker-concat refl = refl-htpy
```
```agda
module _
{l1 l2 : Level} {A : UU l1} {x y : A}
{B : A → UU l2}
where
tr³-right-unit-law-right-whisker-concat :
{p p' : x = y} (α : p = p') →
coherence-square-homotopies
( ( tr²-concat (right-whisker-concat α refl) right-unit) ∙h
( left-whisker-concat-htpy
( tr² B (right-whisker-concat α refl))
( tr²-right-unit p')))
( tr³ B (inv (right-unit-law-right-whisker-concat α)))
( tr²-right-whisker α refl)
( ( tr²-concat right-unit α) ∙h
( right-whisker-concat-htpy (tr²-right-unit p) (tr² B α)) ∙h
( inv-htpy
( left-whisker-concat-htpy
( tr-concat p refl)
( left-unit-law-left-whisker-comp (tr² B α)))))
tr³-right-unit-law-right-whisker-concat {p = refl} {p' = refl} refl =
refl-htpy
```
The above coherences have simplified forms when we consider 2-loops
```agda
module _
{l1 l2 : Level} {A : UU l1} {x : A}
{B : A → UU l2}
where
tr³-left-unit-law-left-whisker-concat-Ω² :
(β : refl {x = x} = refl) →
coherence-square-homotopies
( inv-htpy right-unit-htpy)
( refl-htpy)
( tr²-left-whisker refl β)
( tr³ B (left-unit-law-left-whisker-concat β))
tr³-left-unit-law-left-whisker-concat-Ω² β =
tr³-left-unit-law-left-whisker-concat β
tr³-right-unit-law-right-whisker-concat-Ω² :
(α : refl {x = x} = refl) →
coherence-square-homotopies
( inv-htpy right-unit-htpy)
( tr³ B (inv (right-unit-law-right-whisker-concat α ∙ right-unit)))
( tr²-right-whisker α refl)
( inv-htpy (left-unit-law-left-whisker-comp (tr² B α)))
tr³-right-unit-law-right-whisker-concat-Ω² α =
concat-top-homotopy-coherence-square-homotopies
( ( tr³ B (inv right-unit)) ∙h
( tr²-concat (right-whisker-concat α refl) refl))
( tr³
( B)
( inv (right-unit-law-right-whisker-concat α ∙ right-unit)))
( tr²-right-whisker α refl)
( inv-htpy (left-unit-law-left-whisker-comp (tr² B α)))
( ( right-whisker-concat-htpy
( tr³-inv right-unit)
( tr²-concat (right-whisker-concat α refl) refl)) ∙h
( inv-htpy
( left-transpose-htpy-concat
( tr³ B right-unit)
( inv-htpy right-unit-htpy)
( tr²-concat (right-whisker-concat α refl) refl)
( inv-htpy
( right-transpose-htpy-concat
( tr²-concat (right-whisker-concat α refl) refl)
( right-unit-htpy)
( tr³ B right-unit)
( inv-htpy
( tr³-right-unit (right-whisker-concat α refl))))))))
( concat-left-homotopy-coherence-square-homotopies
( ( tr³ B (inv right-unit)) ∙h
( tr²-concat (right-whisker-concat α refl) refl))
( ( tr³ B (inv right-unit)) ∙h
( tr³ B (inv (right-unit-law-right-whisker-concat α))))
( tr²-right-whisker α refl)
( inv-htpy (left-unit-law-left-whisker-comp (tr² B α)))
( ( inv-htpy
( tr³-concat
( inv right-unit)
( inv (right-unit-law-right-whisker-concat α)))) ∙h
( tr⁴
( B)
( inv
( distributive-inv-concat
( right-unit-law-right-whisker-concat α) (right-unit)))))
( left-whisker-concat-coherence-square-homotopies
( tr³ B (inv right-unit))
( tr²-concat (right-whisker-concat α refl) refl)
( tr³ B (inv (right-unit-law-right-whisker-concat α)))
( tr²-right-whisker α refl)
( inv-htpy (left-unit-law-left-whisker-comp (tr² B α)))
( concat-bottom-homotopy-coherence-square-homotopies
( tr²-concat (right-whisker-concat α refl) refl)
( tr³ B (inv (right-unit-law-right-whisker-concat α)))
( tr²-right-whisker α refl)
( inv-htpy
( left-whisker-concat-htpy
( refl-htpy)
( left-unit-law-left-whisker-comp (tr² B α))))
( ap-inv-htpy
( left-unit-law-left-whisker-concat-htpy
( left-unit-law-left-whisker-comp (tr² B α))))
( concat-top-homotopy-coherence-square-homotopies
( ( tr²-concat (right-whisker-concat α refl) refl) ∙h
( refl-htpy))
( tr³ B (inv (right-unit-law-right-whisker-concat α)))
( tr²-right-whisker α refl)
( inv-htpy
( left-whisker-concat-htpy
( refl-htpy)
( left-unit-law-left-whisker-comp (tr² B α))))
( right-unit-htpy)
( tr³-right-unit-law-right-whisker-concat α)))))
```
#### Computing `tr³` along `commutative-left-whisker-right-whisker-concat`
This coherence naturally takes the form of a filler for a cube whose left face
is
```text
tr³ B (commutative-left-whisker-right-whisker-concat β α)
```
and whose right face is
```text
commutative-right-whisker-left-whisker-htpy (tr² B β) (tr² B α)
```
However, this cube has trivial front and back faces. Thus, we only prove a
simplified form of the coherence.
##### Non-trivial faces of the cube
```agda
module _
{l1 l2 : Level} {A : UU l1} {x y z : A}
{B : A → UU l2} {p p' : x = y} {q q' : y = z}
where
tr²-left-whisker-concat-tr²-right-whisker-concat :
(β : q = q') (α : p = p') →
coherence-square-homotopies
( tr-concat p q)
( ( tr² B (left-whisker-concat p β)) ∙h
( tr² B (right-whisker-concat α q')))
( (tr² B β ·r tr B p) ∙h (tr B q' ·l tr² B α))
( tr-concat p' q')
tr²-left-whisker-concat-tr²-right-whisker-concat β α =
( vertical-pasting-coherence-square-homotopies
( tr-concat p q)
( tr² B (left-whisker-concat p β))
( right-whisker-comp (tr² B β) (tr B p))
( tr-concat p q')
( tr² B (right-whisker-concat α q'))
( left-whisker-comp (tr B q') (tr² B α))
( tr-concat p' q')
( tr²-left-whisker p β)
( tr²-right-whisker α q'))
tr²-concat-left-whisker-concat-right-whisker-concat :
(β : q = q') (α : p = p') →
coherence-square-homotopies
( tr-concat p q)
( tr² B (left-whisker-concat p β ∙ right-whisker-concat α q'))
( (tr² B β ·r tr B p) ∙h (tr B q' ·l tr² B α))
( tr-concat p' q')
tr²-concat-left-whisker-concat-right-whisker-concat β α =
( right-whisker-concat-htpy
( tr²-concat
( left-whisker-concat p β)
( right-whisker-concat α q'))
( tr-concat p' q')) ∙h
( tr²-left-whisker-concat-tr²-right-whisker-concat β α)
tr²-right-whisker-concat-tr²-left-whisker-concat :
(α : p = p') (β : q = q') →
coherence-square-homotopies
( tr-concat p q)
( ( tr² B (right-whisker-concat α q)) ∙h
( tr² B (left-whisker-concat p' β)))
( (tr B q ·l tr² B α) ∙h (tr² B β ·r tr B p'))
( tr-concat p' q')
tr²-right-whisker-concat-tr²-left-whisker-concat α β =
( vertical-pasting-coherence-square-homotopies
( tr-concat p q)
( tr² B (right-whisker-concat α q))
( left-whisker-comp (tr B q) (tr² B α))
( tr-concat p' q)
( tr² B (left-whisker-concat p' β))
( right-whisker-comp (tr² B β) (tr B p'))
( tr-concat p' q')
( tr²-right-whisker α q)
( tr²-left-whisker p' β))
tr²-concat-right-whisker-concat-left-whisker-concat :
(α : p = p') (β : q = q') →
coherence-square-homotopies
( tr-concat p q)
( tr² B (right-whisker-concat α q ∙ left-whisker-concat p' β))
( ( tr B q ·l tr² B α) ∙h (tr² B β ·r tr B p'))
( tr-concat p' q')
tr²-concat-right-whisker-concat-left-whisker-concat α β =
( right-whisker-concat-htpy
( tr²-concat
( right-whisker-concat α q)
( left-whisker-concat p' β))
( tr-concat p' q')) ∙h
( tr²-right-whisker-concat-tr²-left-whisker-concat α β)
```
##### The coherence itself
```agda
module _
{l1 l2 : Level} {A : UU l1} {x y z : A}
{B : A → UU l2}
where
tr³-commutative-left-whisker-right-whisker-concat :
{q q' : y = z} (β : q = q') {p p' : x = y} (α : p = p') →
coherence-square-homotopies
( tr²-concat-left-whisker-concat-right-whisker-concat β α)
( right-whisker-concat-htpy
( tr³
( B)
( commutative-left-whisker-right-whisker-concat β α))
( tr-concat p' q'))
( left-whisker-concat-htpy
( tr-concat p q)
( commutative-right-whisker-left-whisker-htpy
( tr² B β)
( tr² B α)))
( tr²-concat-right-whisker-concat-left-whisker-concat α β)
tr³-commutative-left-whisker-right-whisker-concat
{q = refl} refl {p = refl} refl =
refl-htpy
```
##### A simplification of the non-trivial faces of the cube when `α` and `β` are 2-loops
```agda
module _
{l1 l2 : Level} {A : UU l1} {a : A}
{B : A → UU l2}
where
tr²-left-whisker-concat-tr²-right-whisker-concat-Ω² :
(α β : refl {x = a} = refl) →
( ( tr² B (left-whisker-concat refl α)) ∙h
( tr² B (right-whisker-concat β refl))) ~
( tr² B α ∙h (id ·l (tr² B β)))
tr²-left-whisker-concat-tr²-right-whisker-concat-Ω² α β =
horizontal-concat-htpy²
( tr³ B (left-unit-law-left-whisker-concat α))
( ( tr³
( B)
( inv (right-unit-law-right-whisker-concat β ∙ right-unit))) ∙h
( inv-htpy (left-unit-law-left-whisker-comp (tr² B β))))
compute-tr²-left-whisker-concat-tr²-right-whisker-concat-Ω² :
(α β : refl {x = a} = refl) →
( inv-coherence-square-homotopies-horizontal-refl
( ( tr² B (left-whisker-concat refl α)) ∙h
( tr² B (right-whisker-concat β refl)))
( tr² B α ∙h id ·l (tr² B β))
( tr²-left-whisker-concat-tr²-right-whisker-concat α β)) ~
( tr²-left-whisker-concat-tr²-right-whisker-concat-Ω² α β)
compute-tr²-left-whisker-concat-tr²-right-whisker-concat-Ω² α β =
( vertical-pasting-inv-coherence-square-homotopies-horizontal-refl
( tr² B (left-whisker-concat refl α))
( tr² B α)
( tr² B (right-whisker-concat β refl))
( id ·l (tr² B β))
( tr²-left-whisker refl α)
( tr²-right-whisker β refl)) ∙h
( z-concat-htpy³
( inv-htpy (tr³-left-unit-law-left-whisker-concat-Ω² α))
( inv-htpy (tr³-right-unit-law-right-whisker-concat-Ω² β)))
tr²-right-whisker-concat-tr²-left-whisker-concat-Ω² :
(α β : refl {x = a} = refl) →
( ( tr² B (right-whisker-concat α refl)) ∙h
( tr² B (left-whisker-concat refl β))) ~
( ( id ·l (tr² B α)) ∙h (tr² B β))
tr²-right-whisker-concat-tr²-left-whisker-concat-Ω² α β =
horizontal-concat-htpy²
( ( tr³
( B)
( inv (right-unit-law-right-whisker-concat α ∙ right-unit))) ∙h
( inv-htpy (left-unit-law-left-whisker-comp (tr² B α))))
( tr³ B (left-unit-law-left-whisker-concat β))
compute-tr²-right-whisker-concat-tr²-left-whisker-concat-Ω² :
(α β : refl {x = a} = refl) →
( inv-coherence-square-homotopies-horizontal-refl
( ( tr² B (right-whisker-concat α refl)) ∙h
( tr² B (left-whisker-concat refl β)))
( id ·l (tr² B α) ∙h tr² B β)
( tr²-right-whisker-concat-tr²-left-whisker-concat α β)) ~
( tr²-right-whisker-concat-tr²-left-whisker-concat-Ω² α β)
compute-tr²-right-whisker-concat-tr²-left-whisker-concat-Ω² α β =
( vertical-pasting-inv-coherence-square-homotopies-horizontal-refl
( tr² B (right-whisker-concat α refl))
( id ·l (tr² B α))
( tr² B (left-whisker-concat refl β))
( tr² B β)
( tr²-right-whisker α refl)
( tr²-left-whisker refl β)) ∙h
( z-concat-htpy³
( inv-htpy (tr³-right-unit-law-right-whisker-concat-Ω² α))
( inv-htpy (tr³-left-unit-law-left-whisker-concat-Ω² β)))
tr²-concat-left-whisker-concat-right-whisker-concat-Ω² :
(α β : refl {x = a} = refl) →
( tr²
( B)
( ( left-whisker-concat refl α) ∙
( right-whisker-concat β refl))) ~
( ( ( tr² B α) ·r (tr B refl)) ∙h ((tr B refl) ·l (tr² B β)))
tr²-concat-left-whisker-concat-right-whisker-concat-Ω² α β =
( tr²-concat
( left-whisker-concat refl α)
( right-whisker-concat β refl)) ∙h
( tr²-left-whisker-concat-tr²-right-whisker-concat-Ω² α β)
compute-tr²-concat-left-whisker-concat-right-whisker-concat-Ω² :
(α β : refl {x = a} = refl) →
( ( inv-htpy right-unit-htpy) ∙h
( tr²-concat-left-whisker-concat-right-whisker-concat α β)) ~
( tr²-concat-left-whisker-concat-right-whisker-concat-Ω² α β)
compute-tr²-concat-left-whisker-concat-right-whisker-concat-Ω² α β =
( inv-htpy
( assoc-htpy
( inv-htpy right-unit-htpy)
( right-whisker-concat-htpy
( tr²-concat
( left-whisker-concat refl α)
( right-whisker-concat β refl))
( refl-htpy))
( tr²-left-whisker-concat-tr²-right-whisker-concat α β))) ∙h
( right-whisker-concat-htpy
( vertical-inv-coherence-square-homotopies
( right-whisker-concat-htpy
( tr²-concat
( left-whisker-concat refl α)
( right-whisker-concat β refl))
( refl-htpy))
( right-unit-htpy)
( right-unit-htpy)
( tr²-concat
( left-whisker-concat refl α)
( right-whisker-concat β refl))
( right-unit-law-right-whisker-concat-htpy
( tr²-concat
( left-whisker-concat refl α)
( right-whisker-concat β refl))))
( tr²-left-whisker-concat-tr²-right-whisker-concat α β)) ∙h
( assoc-htpy
( tr²-concat
( left-whisker-concat refl α)
( right-whisker-concat β refl))
( inv-htpy right-unit-htpy)
( tr²-left-whisker-concat-tr²-right-whisker-concat α β)) ∙h
( left-whisker-concat-htpy
( tr²-concat
( left-whisker-concat refl α)
( right-whisker-concat β refl))
( compute-tr²-left-whisker-concat-tr²-right-whisker-concat-Ω² α β))
tr²-concat-right-whisker-concat-left-whisker-concat-Ω² :
(α β : refl {x = a} = refl) →
( tr²
( B)
( ( right-whisker-concat α refl) ∙
( left-whisker-concat refl β))) ~
( ( ( tr B refl) ·l (tr² B α)) ∙h ((tr² B β) ·r (tr B refl)))
tr²-concat-right-whisker-concat-left-whisker-concat-Ω² α β =
( tr²-concat
( right-whisker-concat α refl)
( left-whisker-concat refl β)) ∙h
( tr²-right-whisker-concat-tr²-left-whisker-concat-Ω² α β)
compute-tr²-concat-right-whisker-concat-left-whisker-concat-Ω² :
(α β : refl {x = a} = refl) →
( ( inv-htpy right-unit-htpy) ∙h
( tr²-concat-right-whisker-concat-left-whisker-concat α β)) ~
( tr²-concat-right-whisker-concat-left-whisker-concat-Ω² α β)
compute-tr²-concat-right-whisker-concat-left-whisker-concat-Ω² α β =
( inv-htpy
( assoc-htpy
( inv-htpy right-unit-htpy)
( right-whisker-concat-htpy
( tr²-concat
( right-whisker-concat α refl)
( left-whisker-concat refl β))
( refl-htpy))
( tr²-right-whisker-concat-tr²-left-whisker-concat α β))) ∙h
( right-whisker-concat-htpy
( vertical-inv-coherence-square-homotopies
( right-whisker-concat-htpy
( tr²-concat
( right-whisker-concat α refl)
( left-whisker-concat refl β))
( refl-htpy))
( right-unit-htpy)
( right-unit-htpy)
( tr²-concat
( right-whisker-concat α refl)
( left-whisker-concat refl β))
( right-unit-law-right-whisker-concat-htpy
( tr²-concat
( right-whisker-concat α refl)
( left-whisker-concat refl β))))
( tr²-right-whisker-concat-tr²-left-whisker-concat α β)) ∙h
( assoc-htpy
( tr²-concat
( right-whisker-concat α refl)
( left-whisker-concat refl β))
( inv-htpy right-unit-htpy)
( tr²-right-whisker-concat-tr²-left-whisker-concat α β)) ∙h
( left-whisker-concat-htpy
( tr²-concat
( right-whisker-concat α refl)
( left-whisker-concat refl β))
( compute-tr²-right-whisker-concat-tr²-left-whisker-concat-Ω² α β))
```
##### A simplification of the main coherence when `α` and `β` are 2-loops
```agda
module _
{l1 l2 : Level} {A : UU l1} {a : A}
{B : A → UU l2}
where
tr³-commutative-left-whisker-right-whisker-concat-Ω² :
(α β : refl {x = a} = refl) →
coherence-square-homotopies
( tr²-concat-left-whisker-concat-right-whisker-concat-Ω² α β)
( tr³ B (commutative-left-whisker-right-whisker-concat α β))
( commutative-right-whisker-left-whisker-htpy
( tr² B α)
( tr² B β))
( tr²-concat-right-whisker-concat-left-whisker-concat-Ω² β α)
tr³-commutative-left-whisker-right-whisker-concat-Ω² α β =
concat-bottom-homotopy-coherence-square-homotopies
( tr²-concat-left-whisker-concat-right-whisker-concat-Ω² α β)
( tr³ B (commutative-left-whisker-right-whisker-concat α β))
( commutative-right-whisker-left-whisker-htpy
( tr² B α)
( tr² B β))
( ( inv-htpy right-unit-htpy) ∙h
( tr²-concat-right-whisker-concat-left-whisker-concat β α))
( compute-tr²-concat-right-whisker-concat-left-whisker-concat-Ω² β α)
( concat-top-homotopy-coherence-square-homotopies
( ( inv-htpy right-unit-htpy) ∙h
( tr²-concat-left-whisker-concat-right-whisker-concat α β))
( tr³ B (commutative-left-whisker-right-whisker-concat α β))
( commutative-right-whisker-left-whisker-htpy
( tr² B α)
( tr² B β))
( ( inv-htpy right-unit-htpy) ∙h
( tr²-concat-right-whisker-concat-left-whisker-concat β α))
( compute-tr²-concat-left-whisker-concat-right-whisker-concat-Ω² α β)
( horizontal-pasting-coherence-square-homotopies
( inv-htpy right-unit-htpy)
( tr²-concat-left-whisker-concat-right-whisker-concat α β)
( tr³ B (commutative-left-whisker-right-whisker-concat α β))
( right-whisker-concat-htpy
( tr³ B (commutative-left-whisker-right-whisker-concat α β))
( refl-htpy))
( commutative-right-whisker-left-whisker-htpy
( tr² B α)
( tr² B β))
( inv-htpy right-unit-htpy)
( tr²-concat-right-whisker-concat-left-whisker-concat β α)
( horizontal-inv-coherence-square-homotopies
( right-unit-htpy)
( right-whisker-concat-htpy
( tr³ B (commutative-left-whisker-right-whisker-concat α β))
( refl-htpy))
( tr³ B (commutative-left-whisker-right-whisker-concat α β))
( right-unit-htpy)
( inv-htpy
( right-unit-law-right-whisker-concat-htpy
( tr³
( B)
( commutative-left-whisker-right-whisker-concat α β)))))
( concat-right-homotopy-coherence-square-homotopies
( tr²-concat-left-whisker-concat-right-whisker-concat α β)
( right-whisker-concat-htpy
( tr³ B (commutative-left-whisker-right-whisker-concat α β))
( refl-htpy))
( left-whisker-concat-htpy
( refl-htpy)
( commutative-right-whisker-left-whisker-htpy
( tr² B α)
( tr² B β)))
( tr²-concat-right-whisker-concat-left-whisker-concat β α)
( left-unit-law-left-whisker-comp
( commutative-right-whisker-left-whisker-htpy
( tr² B α)
( tr² B β)))
( tr³-commutative-left-whisker-right-whisker-concat α β))))
```