# Commuting hexagons of identifications

```agda
module foundation.commuting-hexagons-of-identifications where
```

<details><summary>Imports</summary>

```agda
open import foundation.universe-levels

open import foundation-core.identity-types
```

</details>

## Idea

A hexagon of identifications is an identification
`((α ∙ β) ∙ γ) = (δ ∙ (ε ∙ ζ))`.

## Definition

### Hexagons of identifications

```agda
coherence-hexagon :
  {l : Level} {A : UU l} {x u u' v v' y : A}
  (α : x  u) (β : u  u') (γ : u'  y)
  (δ : x  v) (ε : v  v') (ζ : v'  y)  UU l
coherence-hexagon α β γ δ ε ζ = ((α  β)  γ)  (δ  (ε  ζ))
```

### Symmetries of hexagons of identifications

```agda
module _
  {l : Level} {A : UU l} {x u u' v v' y : A}
  where

  hexagon-rotate-120 :
    (α : x  u) (β : u  u') (γ : u'  y)
    (δ : x  v) (ε : v  v') (ζ : v'  y) 
    coherence-hexagon α β γ δ ε ζ 
    coherence-hexagon (inv ε) (inv δ) α ζ (inv γ) (inv β)
  hexagon-rotate-120 refl refl refl refl refl .refl refl = refl

  hexagon-rotate-240 :
    (α : x  u) (β : u  u') (γ : u'  y)
    (δ : x  v) (ε : v  v') (ζ : v'  y) 
    coherence-hexagon α β γ δ ε ζ 
    coherence-hexagon γ (inv ζ) (inv ε) (inv β) (inv α) δ
  hexagon-rotate-240 refl refl refl refl refl .refl refl = refl

  hexagon-mirror-A :
    (α : x  u) (β : u  u') (γ : u'  y)
    (δ : x  v) (ε : v  v') (ζ : v'  y) 
    coherence-hexagon α β γ δ ε ζ 
    coherence-hexagon ε ζ (inv γ) (inv δ) α β
  hexagon-mirror-A refl refl refl refl refl .refl refl = refl

  hexagon-mirror-B :
    (α : x  u) (β : u  u') (γ : u'  y)
    (δ : x  v) (ε : v  v') (ζ : v'  y) 
    coherence-hexagon α β γ δ ε ζ 
    coherence-hexagon (inv α) δ ε β γ (inv ζ)
  hexagon-mirror-B refl refl refl refl refl .refl refl = refl

  hexagon-mirror-C :
    (α : x  u) (β : u  u') (γ : u'  y)
    (δ : x  v) (ε : v  v') (ζ : v'  y) 
    coherence-hexagon α β γ δ ε ζ 
    coherence-hexagon (inv γ) (inv β) (inv α) (inv ζ) (inv ε) (inv δ)
  hexagon-mirror-C refl refl refl refl refl .refl refl = refl
```

### Inversion of a hexagon

The definition of a hexagon has an explicit asymmetrical choice of association,
so `inv` only gives the correct identification up to reassociation.

```agda
module _
  { l : Level} {A : UU l} {x u u' v v' y : A}
  where

  inv-hexagon :
    ( α : x  u) (β : u  u') (γ : u'  y) 
    ( δ : x  v) (ε : v  v') (ζ : v'  y) 
    coherence-hexagon α β γ δ ε ζ 
    coherence-hexagon δ ε ζ α β γ
  inv-hexagon refl refl refl refl refl .refl refl = refl
```