# Commuting squares of identifications ```agda module foundation-core.commuting-squares-of-identifications where ``` <details><summary>Imports</summary> ```agda open import foundation.action-on-identifications-functions open import foundation.universe-levels open import foundation-core.function-types open import foundation-core.identity-types open import foundation-core.retractions open import foundation-core.sections open import foundation-core.whiskering-identifications-concatenation ``` </details> ## Idea A square of [identifications](foundation-core.identity-types.md) ```text top x -------> y | | left | | right ∨ ∨ z -------> w bottom ``` is said to be a {{#concept "commuting square" Disambiguation="identifications" Agda=coherence-square-identifications}} if there is an identification `left ∙ bottom = top ∙ right`. Such an identification is called a {{#concept "coherence" Disambiguation="commuting square of identifications" Agda=coherence-square-identifications}} of the square. ## Definitions ### Commuting squares of identifications ```agda module _ {l : Level} {A : UU l} {x y z w : A} (top : x = y) (left : x = z) (right : y = w) (bottom : z = w) where coherence-square-identifications : UU l coherence-square-identifications = left ∙ bottom = top ∙ right ``` ### Horizontally constant squares {{#concept "Horizontally constant squares" Disambiguation="identifications" Agda=horizontal-refl-coherence-square-identifications}} are commuting squares of identifications of the form ```text refl a -----> a | | p | | p ∨ ∨ b -----> b. refl ``` ```agda module _ {l : Level} {A : UU l} {a b : A} (p : a = b) where horizontal-refl-coherence-square-identifications : coherence-square-identifications refl p p refl horizontal-refl-coherence-square-identifications = right-unit ``` ### Vertically constant squares {{#concept "Vertically constant squares" Disambiguation="identifications" Agda=vertical-refl-coherence-square-identifications}} are commuting squares of identifications of the form ```text p a -----> b | | refl | | refl ∨ ∨ a -----> b. p ``` ```agda module _ {l : Level} {A : UU l} {a b : A} (p : a = b) where vertical-refl-coherence-square-identifications : coherence-square-identifications p refl refl p vertical-refl-coherence-square-identifications = inv right-unit ``` ### Squares with `refl` on the top and bottom Given an identification `α : p = q`, we can obtain a coherence square with `refl` on the top and bottom, like the diagram below. ```text refl a -----> a | | p | | q ∨ ∨ b -----> b refl ``` ```agda module _ {l : Level} {A : UU l} {a b : A} (p q : a = b) where coherence-square-identifications-horizontal-refl : p = q → coherence-square-identifications ( refl) ( p) ( q) ( refl) coherence-square-identifications-horizontal-refl α = right-unit ∙ α ``` Conversely, given a coherence square as above, we can obtain an equality `p = q`. ```agda inv-coherence-square-identifications-horizontal-refl : coherence-square-identifications ( refl) ( p) ( q) ( refl) → p = q inv-coherence-square-identifications-horizontal-refl α = inv right-unit ∙ α ``` ### Squares with `refl` on the left and right Given an identification `α : p = q`, we can obtain a coherence square with `refl` on the left and right, like the diagram below. ```text q a -----> b | | refl | | refl ∨ ∨ a -----> b p ``` ```agda coherence-square-identifications-vertical-refl : p = q → coherence-square-identifications ( q) ( refl) ( refl) ( p) coherence-square-identifications-vertical-refl α = α ∙ inv right-unit ``` Conversely, given a coherence square as above, we can obtain an equality ` p = q`. ```agda inv-coherence-square-identifications-vertical-refl : coherence-square-identifications ( q) ( refl) ( refl) ( p) → p = q inv-coherence-square-identifications-vertical-refl α = α ∙ right-unit ``` ## Operations ### Inverting squares of identifications horizontally Given a commuting square of identifications ```text top x -------> y | | left | | right ∨ ∨ z -------> w, bottom ``` the square of identifications ```text inv top y ------------> x | | right | | left ∨ ∨ w ------------> z inv bottom ``` commutes. ```agda module _ {l : Level} {A : UU l} {x y z w : A} where horizontal-inv-coherence-square-identifications : (top : x = y) (left : x = z) (right : y = w) (bottom : z = w) → coherence-square-identifications top left right bottom → coherence-square-identifications (inv top) right left (inv bottom) horizontal-inv-coherence-square-identifications refl left right bottom coh = inv (right-transpose-eq-concat left bottom right coh) ``` ### Inverting squares of identifications vertically Given a commuting square of identifications ```text top x -------> y | | left | | right ∨ ∨ z -------> w, bottom ``` the square of identifications ```text bottom z -------> w | | inv left | | inv right ∨ ∨ x -------> y top ``` commutes. ```agda module _ {l : Level} {A : UU l} {x y z w : A} where vertical-inv-coherence-square-identifications : (top : x = y) (left : x = z) (right : y = w) (bottom : z = w) → coherence-square-identifications top left right bottom → coherence-square-identifications bottom (inv left) (inv right) top vertical-inv-coherence-square-identifications top refl right bottom coh = right-transpose-eq-concat top right (bottom) (inv coh) ``` ### Functions acting on squares of identifications Given a commuting square of identifications ```text top x -------> y | | left | | right ∨ ∨ z -------> w bottom ``` in a type `A`, and given a map `f : A → B`, the square of identifications ```text ap f top f x -----------> f y | | ap f left | | ap f right ∨ ∨ z -------------> w ap f bottom ``` commutes. ```agda module _ {l1 l2 : Level} {A : UU l1} {B : UU l2} {x y z w : A} (f : A → B) where map-coherence-square-identifications : (top : x = y) (left : x = z) (right : y = w) (bottom : z = w) → coherence-square-identifications top left right bottom → coherence-square-identifications ( ap f top) ( ap f left) ( ap f right) ( ap f bottom) map-coherence-square-identifications refl refl _ _ coh = ap (ap f) coh ``` ### Concatenating identifications of edges and coherences of commuting squares of identifications Consider a commuting square of identifications and an identification of one of the four sides with another identification, as for example in the diagram below: ```text top a ---------> b | | | left | right |=| right' ∨ ∨ ∨ c ---------> d. bottom ``` Then any identification witnessing that the square commutes can be concatenated with the identification on the side, to obtain a new commuting square of identifications. **Note.** To avoid cyclic module dependencies we will give direct proofs that concatenating identifications of edges of a square with the coherence of its commutativity is an equivalence. #### Concatenating identifications of the top edge with a coherence of a commuting square of identifications Consider a commuting diagram of identifications ```text top' -------> x -------> y | top | left | | right ∨ ∨ z -------> w. bottom ``` with an identification `top = top'`. Then we get an equivalence ```text top top' x -------> y x -------> y | | | | left | | right ≃ left | | right ∨ ∨ ∨ ∨ z -------> w z -------> w. bottom bottom ``` ```agda module _ {l : Level} {A : UU l} {x y z w : A} (top : x = y) (left : x = z) (right : y = w) (bottom : z = w) {top' : x = y} (s : top = top') where concat-top-identification-coherence-square-identifications : coherence-square-identifications top left right bottom → coherence-square-identifications top' left right bottom concat-top-identification-coherence-square-identifications t = t ∙ ap (concat' _ right) s inv-concat-top-identification-coherence-square-identifications : coherence-square-identifications top' left right bottom → coherence-square-identifications top left right bottom inv-concat-top-identification-coherence-square-identifications t = t ∙ inv (ap (concat' _ right) s) is-section-inv-concat-top-identification-coherence-square-identifications : is-section concat-top-identification-coherence-square-identifications inv-concat-top-identification-coherence-square-identifications is-section-inv-concat-top-identification-coherence-square-identifications = is-section-inv-concat' (ap (concat' _ right) s) is-retraction-inv-concat-top-identification-coherence-square-identifications : is-retraction concat-top-identification-coherence-square-identifications inv-concat-top-identification-coherence-square-identifications is-retraction-inv-concat-top-identification-coherence-square-identifications = is-retraction-inv-concat' (ap (concat' _ right) s) ``` We record that this construction is an equivalence in [`foundation.commuting-squares-of-identifications`](foundation.commuting-squares-of-identifications.md). #### Concatenating identifications of the left edge with a coherence of a commuting square of identifications Consider a commuting diagram of identifications ```text top x -------> y | | | left' | | left | right ∨ ∨ ∨ z -------> w. bottom ``` with an identification `left = left'`. Then we get an equivalence ```text top top x -------> y x -------> y | | | | left | | right ≃ left' | | right ∨ ∨ ∨ ∨ z -------> w z -------> w. bottom bottom ``` ```agda module _ {l : Level} {A : UU l} {x y z w : A} (top : x = y) (left : x = z) (right : y = w) (bottom : z = w) {left' : x = z} (s : left = left') where concat-left-identification-coherence-square-identifications : coherence-square-identifications top left right bottom → coherence-square-identifications top left' right bottom concat-left-identification-coherence-square-identifications t = inv (ap (concat' _ bottom) s) ∙ t inv-concat-left-identification-coherence-square-identifications : coherence-square-identifications top left' right bottom → coherence-square-identifications top left right bottom inv-concat-left-identification-coherence-square-identifications t = ap (concat' _ bottom) s ∙ t is-section-inv-concat-left-identification-coherence-square-identifications : is-section concat-left-identification-coherence-square-identifications inv-concat-left-identification-coherence-square-identifications is-section-inv-concat-left-identification-coherence-square-identifications = is-retraction-inv-concat (ap (concat' _ bottom) s) is-retraction-inv-concat-left-identification-coherence-square-identifications : is-retraction concat-left-identification-coherence-square-identifications inv-concat-left-identification-coherence-square-identifications is-retraction-inv-concat-left-identification-coherence-square-identifications = is-section-inv-concat (ap (concat' _ bottom) s) ``` We record that this construction is an equivalence in [`foundation.commuting-squares-of-identifications`](foundation.commuting-squares-of-identifications.md). #### Concatenating identifications of the right edge with a coherence of a commuting square of identifications Consider a commuting diagram of identifications ```text top x -------> y | | | left | right | | right' ∨ ∨ ∨ z -------> w. bottom ``` with an identification `right = right'`. Then we get an equivalence ```text top top x -------> y x -------> y | | | | left | | right ≃ left | | right' ∨ ∨ ∨ ∨ z -------> w z -------> w. bottom bottom ``` ```agda module _ {l : Level} {A : UU l} {x y z w : A} (top : x = y) (left : x = z) (right : y = w) (bottom : z = w) {right' : y = w} (s : right = right') where concat-right-identification-coherence-square-identifications : coherence-square-identifications top left right bottom → coherence-square-identifications top left right' bottom concat-right-identification-coherence-square-identifications t = t ∙ ap (concat top _) s inv-concat-right-identification-coherence-square-identifications : coherence-square-identifications top left right' bottom → coherence-square-identifications top left right bottom inv-concat-right-identification-coherence-square-identifications t = t ∙ inv (ap (concat top _) s) is-section-inv-concat-right-identification-coherence-square-identifications : is-section concat-right-identification-coherence-square-identifications inv-concat-right-identification-coherence-square-identifications is-section-inv-concat-right-identification-coherence-square-identifications = is-section-inv-concat' (ap (concat top _) s) is-retraction-inv-concat-right-identification-coherence-square-identifications : is-retraction concat-right-identification-coherence-square-identifications inv-concat-right-identification-coherence-square-identifications is-retraction-inv-concat-right-identification-coherence-square-identifications = is-retraction-inv-concat' (ap (concat top _) s) ``` We record that this construction is an equivalence in [`foundation.commuting-squares-of-identifications`](foundation.commuting-squares-of-identifications.md). #### Concatenating identifications of the bottom edge with a coherence of a commuting square of identifications Consider a commuting diagram of identifications ```text top x -------> y | | left | | right ∨ bottom ∨ z -------> w. -------> bottom' ``` with an identification `bottom = bottom'`. Then we get an equivalence ```text top top x -------> y x -------> y | | | | left | | right ≃ left | | right ∨ ∨ ∨ ∨ z -------> w z -------> w. bottom bottom' ``` ```agda module _ {l : Level} {A : UU l} {x y z w : A} (top : x = y) (left : x = z) (right : y = w) (bottom : z = w) {bottom' : z = w} (s : bottom = bottom') where concat-bottom-identification-coherence-square-identifications : coherence-square-identifications top left right bottom → coherence-square-identifications top left right bottom' concat-bottom-identification-coherence-square-identifications t = inv (ap (concat left _) s) ∙ t inv-concat-bottom-identification-coherence-square-identifications : coherence-square-identifications top left right bottom' → coherence-square-identifications top left right bottom inv-concat-bottom-identification-coherence-square-identifications t = ap (concat left _) s ∙ t is-section-inv-concat-bottom-identification-coherence-square-identifications : is-section concat-bottom-identification-coherence-square-identifications inv-concat-bottom-identification-coherence-square-identifications is-section-inv-concat-bottom-identification-coherence-square-identifications = is-retraction-inv-concat (ap (concat left _) s) is-retraction-inv-concat-bottom-identification-coherence-square-identifications : is-retraction concat-bottom-identification-coherence-square-identifications inv-concat-bottom-identification-coherence-square-identifications is-retraction-inv-concat-bottom-identification-coherence-square-identifications = is-section-inv-concat (ap (concat left _) s) ``` We record that this construction is an equivalence in [`foundation.commuting-squares-of-identifications`](foundation.commuting-squares-of-identifications.md). ### Whiskering and splicing coherences of commuting squares of identifications Given a commuting square of identifications ```text top x -------> y | | left | | right ∨ ∨ z -------> w, bottom ``` we may consider four ways of attaching new identifications to it: 1. Prepending `p : u = x` to the left gives us a commuting square ```text p ∙ top u -------> y | | p ∙ left | | right ∨ ∨ z -------> w. bottom ``` More precisely, we have an equivalence ```text (left ∙ bottom = top ∙ right) ≃ ((p ∙ left) ∙ bottom = (p ∙ top) ∙ right). ``` 2. Appending an identification `p : w = u` to the right gives a commuting square of identifications ```text top x ------------> y | | left | | right ∙ p ∨ ∨ z ------------> u. bottom ∙ p ``` More precisely, we have an equivalence ```text (left ∙ bottom = top ∙ right) ≃ (left ∙ (bottom ∙ p) = top ∙ (right ∙ p)). ``` 3. Splicing an identification `p : z = u` and its inverse into the middle gives a commuting square of identifications ```text top x --------------> y | | left ∙ p | | right ∨ ∨ u --------------> w. p⁻¹ ∙ bottom ``` More precisely, we have an equivalence ```text (left ∙ bottom = top ∙ right) ≃ ((left ∙ p) ∙ (p⁻¹ ∙ bottom) = top ∙ right). ``` Similarly, we have an equivalence ```text (left ∙ bottom = top ∙ right) ≃ ((left ∙ p⁻¹) ∙ (p ∙ bottom) = top ∙ right). ``` 4. Splicing an identification `p : y = u` and its inverse into the middle gives a commuting square of identifications ```text top ∙ p x --------> u | | left | | p⁻¹ ∙ right ∨ ∨ z --------> w. bottom ``` More precisely, we have an equivalence ```text (left ∙ bottom = top ∙ right) ≃ (left ∙ bottom = (top ∙ p) ∙ (p⁻¹ ∙ right)). ``` Similarly, we have an equivalence ```text (left ∙ bottom = top ∙ right) ≃ (left ∙ bottom = (top ∙ p⁻¹) ∙ (p ∙ right)). ``` These operations are useful in proofs involving path algebra, because taking `equiv-right-whisker-concat-coherence-square-identifications` as an example, it provides us with two maps: the forward direction states `(p ∙ r = q ∙ s) → (p ∙ (r ∙ t)) = q ∙ (s ∙ t))`, which allows one to append an identification without needing to reassociate on the right, and the backwards direction conversely allows one to cancel out an identification in parentheses. #### Left whiskering coherences of commuting squares of identifications For any identification `p : u = x` we obtain an equivalence ```text top p ∙ top x -------> y u -------> y | | | | left | | right ≃ p ∙ left | | right ∨ ∨ ∨ ∨ z -------> w z -------> w bottom bottom ``` of coherences of commuting squares of identifications. ```agda module _ {l : Level} {A : UU l} {x y z w u : A} where left-whisker-concat-coherence-square-identifications : (p : u = x) (top : x = y) (left : x = z) (right : y = w) (bottom : z = w) → coherence-square-identifications top left right bottom → coherence-square-identifications (p ∙ top) (p ∙ left) right bottom left-whisker-concat-coherence-square-identifications refl top left right bottom = id left-unwhisker-concat-coherence-square-identifications : (p : u = x) (top : x = y) (left : x = z) (right : y = w) (bottom : z = w) → coherence-square-identifications (p ∙ top) (p ∙ left) right bottom → coherence-square-identifications top left right bottom left-unwhisker-concat-coherence-square-identifications refl top left right bottom = id ``` #### Right whiskering coherences of commuting squares of identifications For any identification `p : w = u` we obtain an equivalence ```text top top x -------> y x ------------> y | | | | left | | right ≃ left | | right ∙ p ∨ ∨ ∨ ∨ z -------> w z ------------> w bottom bottom ∙ p ``` of coherences of commuting squares of identifications. ```agda module _ {l : Level} {A : UU l} {x y z w : A} (top : x = y) (left : x = z) (right : y = w) (bottom : z = w) where right-whisker-concat-coherence-square-identifications : coherence-square-identifications top left right bottom → {u : A} (p : w = u) → coherence-square-identifications top left (right ∙ p) (bottom ∙ p) right-whisker-concat-coherence-square-identifications s refl = concat-bottom-identification-coherence-square-identifications ( top) ( left) ( right ∙ refl) ( bottom) ( inv right-unit) ( concat-right-identification-coherence-square-identifications ( top) ( left) ( right) ( bottom) ( inv right-unit) ( s)) right-unwhisker-cohernece-square-identifications : {u : A} (p : w = u) → coherence-square-identifications top left (right ∙ p) (bottom ∙ p) → coherence-square-identifications top left right bottom right-unwhisker-cohernece-square-identifications refl = ( inv-concat-right-identification-coherence-square-identifications ( top) ( left) ( right) ( bottom) ( inv right-unit)) ∘ ( inv-concat-bottom-identification-coherence-square-identifications ( top) ( left) ( right ∙ refl) ( bottom) ( inv right-unit)) ``` ### Double whiskering of commuting squares of identifications ```agda module _ {l : Level} {A : UU l} {x y z u v w : A} where double-whisker-coherence-square-identifications : (p : x = y) (top : y = u) (left : y = z) (right : u = v) (bottom : z = v) (s : v = w) → coherence-square-identifications top left right bottom → coherence-square-identifications ( p ∙ top) ( p ∙ left) ( right ∙ s) ( bottom ∙ s) double-whisker-coherence-square-identifications p top left right bottom q H = left-whisker-concat-coherence-square-identifications p top left ( right ∙ q) ( bottom ∙ q) ( right-whisker-concat-coherence-square-identifications ( top) ( left) ( right) ( bottom) ( H) ( q)) ``` #### Left splicing coherences of commuting squares of identifications For any inverse pair of identifications `p : y = u` and `q : u = y` equipped with `α : inv p = q` we obtain an equivalence ```text top top x -------> y x -----------> y | | | | left | | right ≃ left ∙ p | | right ∨ ∨ ∨ ∨ z -------> w u -----------> w bottom q ∙ bottom ``` of coherences of commuting squares of identifications. ```agda module _ {l : Level} {A : UU l} {x y z w : A} (top : x = y) (left : x = z) (right : y = w) (bottom : z = w) where left-splice-coherence-square-identifications : {u : A} (p : z = u) (q : u = z) (α : inv p = q) → coherence-square-identifications top left right bottom → coherence-square-identifications top (left ∙ p) right (q ∙ bottom) left-splice-coherence-square-identifications refl .refl refl = concat-left-identification-coherence-square-identifications ( top) ( left) ( right) ( bottom) ( inv right-unit) left-unsplice-coherence-square-identifications : {u : A} (p : z = u) (q : u = z) (α : inv p = q) → coherence-square-identifications top (left ∙ p) right (q ∙ bottom) → coherence-square-identifications top left right bottom left-unsplice-coherence-square-identifications refl .refl refl = inv-concat-left-identification-coherence-square-identifications ( top) ( left) ( right) ( bottom) ( inv right-unit) ``` #### Right splicing coherences of commuting squares of identifications For any inverse pair of identifications `p : y = u` and `q : u = y` equipped with `α : inv p = q` we obtain an equivalence ```text top top ∙ p x -------> y x --------> u | | | | left | | right ≃ left | | q ∙ right ∨ ∨ ∨ ∨ z -------> w z --------> w bottom bottom ``` of coherences of commuting squares of identifications. ```agda module _ {l : Level} {A : UU l} {x y z w : A} (top : x = y) (left : x = z) (right : y = w) (bottom : z = w) where right-splice-coherence-square-identifications : {u : A} (p : y = u) (q : u = y) (α : inv p = q) → coherence-square-identifications top left right bottom → coherence-square-identifications (top ∙ p) left (inv p ∙ right) bottom right-splice-coherence-square-identifications refl .refl refl = concat-top-identification-coherence-square-identifications ( top) ( left) ( right) ( bottom) ( inv right-unit) right-unsplice-coherence-square-identifications : {u : A} (p : y = u) (q : u = y) (α : inv p = q) → coherence-square-identifications (top ∙ p) left (inv p ∙ right) bottom → coherence-square-identifications top left right bottom right-unsplice-coherence-square-identifications refl .refl refl = inv-concat-top-identification-coherence-square-identifications ( top) ( left) ( right) ( bottom) ( inv right-unit) ``` ### Horizontally pasting squares of identifications Consider two squares of identifications as in the diagram ```text top-left top-right a -------------> b -------------> c | | | left | | middle | right ∨ ∨ ∨ d -------------> e -------------> f bottom-left bottom-right ``` with `s : left ∙ bottom-left = top-left ∙ middle` and `t : middle ∙ bottom-right = top-right ∙ right`. Then the outer square commutes. ```agda module _ {l : Level} {A : UU l} {a b c d e f : A} (top-left : a = b) (top-right : b = c) (left : a = d) (middle : b = e) (right : c = f) (bottom-left : d = e) (bottom-right : e = f) where horizontal-pasting-coherence-square-identifications : coherence-square-identifications top-left left middle bottom-left → coherence-square-identifications top-right middle right bottom-right → coherence-square-identifications (top-left ∙ top-right) left right (bottom-left ∙ bottom-right) horizontal-pasting-coherence-square-identifications s t = ( right-whisker-concat-coherence-square-identifications ( top-left) ( left) ( middle) ( bottom-left) ( s) ( bottom-right)) ∙ ( ( inv (assoc top-left middle bottom-right)) ∙ ( left-whisker-concat-coherence-square-identifications ( top-left) ( top-right) ( middle) ( right) ( bottom-right) ( t))) ``` ### Vertically pasting squares of identifications Consider two squares of identifications as in the diagram ```text top a --------> b | | top-left | | top-right ∨ middle ∨ c --------> d | | bottom-left | | bottom-right ∨ ∨ e --------> f bottom ``` with `s : top-left ∙ middle = top ∙ top-right` and `t : bottom-left ∙ bottom = middle ∙ bottom-right`. Then the outer square commutes. ```agda module _ {l : Level} {A : UU l} {a b c d e f : A} (top : a = b) (top-left : a = c) (top-right : b = d) (middle : c = d) (bottom-left : c = e) (bottom-right : d = f) (bottom : e = f) where vertical-pasting-coherence-square-identifications : coherence-square-identifications top top-left top-right middle → coherence-square-identifications middle bottom-left bottom-right bottom → coherence-square-identifications top (top-left ∙ bottom-left) (top-right ∙ bottom-right) bottom vertical-pasting-coherence-square-identifications s t = ( left-whisker-concat-coherence-square-identifications ( top-left) ( middle) ( bottom-left) ( bottom-right) ( bottom) ( t)) ∙ ( ( assoc top-left middle bottom-right) ∙ ( right-whisker-concat-coherence-square-identifications ( top) ( top-left) ( top-right) ( middle) ( s) ( bottom-right))) ``` ## Properties ### Left unit law for horizontal pasting of commuting squares of identifications ```agda module _ {l : Level} {A : UU l} {a b c d : A} where left-unit-law-horizontal-pasting-coherence-square-identifications : (top : a = b) (left : a = c) (right : b = d) (bottom : c = d) (s : coherence-square-identifications top left right bottom) → horizontal-pasting-coherence-square-identifications ( refl) ( top) ( left) ( left) ( right) ( refl) ( bottom) ( horizontal-refl-coherence-square-identifications left) ( s) = s left-unit-law-horizontal-pasting-coherence-square-identifications refl refl right refl s = refl ``` ### Right unit law for horizontal pasting of commuting squares of identifications ```agda module _ {l : Level} {A : UU l} {a b c d : A} where right-unit-law-horizontal-pasting-coherence-square-identifications : (top : a = b) (left : a = c) (right : b = d) (bottom : c = d) (s : coherence-square-identifications top left right bottom) → horizontal-pasting-coherence-square-identifications ( top) ( refl) ( left) ( right) ( right) ( bottom) ( refl) ( s) ( horizontal-refl-coherence-square-identifications right) ∙ right-whisker-concat right-unit right = left-whisker-concat left right-unit ∙ s right-unit-law-horizontal-pasting-coherence-square-identifications refl refl .refl refl refl = refl ``` ### Left unit law for vertical pasting of commuting squares of identifications ```agda module _ {l : Level} {A : UU l} {a b c d : A} where left-unit-law-vertical-pasting-coherence-square-identifications : (top : a = b) (left : a = c) (right : b = d) (bottom : c = d) (s : coherence-square-identifications top left right bottom) → vertical-pasting-coherence-square-identifications ( top) ( refl) ( refl) ( top) ( left) ( right) ( bottom) ( vertical-refl-coherence-square-identifications top) ( s) = s left-unit-law-vertical-pasting-coherence-square-identifications refl refl .refl refl refl = refl ``` ### Right unit law for vertical pasting of commuting squares of identifications ```agda module _ {l : Level} {A : UU l} {a b c d : A} where right-unit-law-vertical-pasting-coherence-square-identifications : (top : a = b) (left : a = c) (right : b = d) (bottom : c = d) (s : coherence-square-identifications top left right bottom) → vertical-pasting-coherence-square-identifications ( top) ( left) ( right) ( bottom) ( refl) ( refl) ( bottom) ( s) ( vertical-refl-coherence-square-identifications bottom) ∙ left-whisker-concat top right-unit = right-whisker-concat right-unit bottom ∙ s right-unit-law-vertical-pasting-coherence-square-identifications refl refl .(refl ∙ refl) refl refl = refl ``` ### Computing the right whiskering of a vertically constant square with an identification Consider the vertically constant square of identifications ```text p x -----> y | | refl | | refl ∨ ∨ x -----> y p ``` at an identification `p : x = y`, and consider an identification `q : y = z`. Then the right whiskering of the above square with `q` is the commuting square of identifications ```text p x -------> y | | refl | refl | q ∨ ∨ x -------> z p ∙ q ``` ```agda module _ {l1 : Level} {A : UU l1} where right-whisker-concat-vertical-refl-coherence-square-identifications : {x y z : A} (p : x = y) (q : y = z) → right-whisker-concat-coherence-square-identifications p refl refl p ( vertical-refl-coherence-square-identifications p) ( q) = refl right-whisker-concat-vertical-refl-coherence-square-identifications refl refl = refl ``` ### Computing the right whiskering of a horizontally constant square with an identification Consider a horizontally constant commuting square of identifications ```text refl x -----> x | | p | | p ∨ ∨ y -----> y refl ``` at an identification `p` and consider an identification `q : y = z`. Then the right whiskering of the above square with `q` is the square ```text refl x -----> x | | p | refl | p ∙ q ∨ ∨ y -----> z. q ``` ```agda module _ {l1 : Level} {A : UU l1} where right-whisker-concat-horizontal-refl-coherence-square-identifications : {x y z : A} (p : x = y) (q : y = z) → right-whisker-concat-coherence-square-identifications refl p p refl ( horizontal-refl-coherence-square-identifications p) ( q) = refl right-whisker-concat-horizontal-refl-coherence-square-identifications refl refl = refl ``` ### Computing the left whiskering of a horizontally constant square with an identification Consider an identification `p : x = y` and a horizontally constant commuting square of identifications ```text refl y -----> y | | q | | q ∨ ∨ z -----> z refl ``` at an identification `q : y = z`. The the left whiskering of the above square with `p` is the commuting square ```text q ∙ refl x ------------------------------------------------------> y | | q ∙ p | right-unit ∙ inv (right-whisker-concat right-unit p) | p ∨ ∨ z ------------------------------------------------------> z. refl ``` ```agda module _ {l1 : Level} {A : UU l1} where left-whisker-concat-horizontal-refl-coherence-square-identifications : {x y z : A} (p : x = y) (q : y = z) → left-whisker-concat-coherence-square-identifications p refl q q refl ( horizontal-refl-coherence-square-identifications q) ∙ right-whisker-concat right-unit q = right-unit left-whisker-concat-horizontal-refl-coherence-square-identifications refl refl = refl left-whisker-concat-horizontal-refl-coherence-square-identifications' : {x y z : A} (p : x = y) (q : y = z) → left-whisker-concat-coherence-square-identifications p refl q q refl ( horizontal-refl-coherence-square-identifications q) = right-unit ∙ inv (right-whisker-concat right-unit q) left-whisker-concat-horizontal-refl-coherence-square-identifications' refl refl = refl ``` ### Computing the left whiskering of a vertically constant square with an identification Consider the vertically constant square of identifications ```text q y -----> z | | refl | | refl ∨ ∨ y -----> z q ``` at an identification `q : y = z` and consider an identification `p : x = y`. Then the left whiskering of the above square with `p` is the square ```text p ∙ q x ---------------------------------------------------> z | | p ∙ refl | right-whisker-concat right-unit q ∙ inv right-unit | refl ∨ ∨ y ---------------------------------------------------> z. q ``` ```agda module _ {l1 : Level} {A : UU l1} where left-whisker-concat-vertical-refl-coherence-square-identifications : {x y z : A} (p : x = y) (q : y = z) → left-whisker-concat-coherence-square-identifications p q refl refl q ( vertical-refl-coherence-square-identifications q) ∙ right-unit = right-whisker-concat right-unit q left-whisker-concat-vertical-refl-coherence-square-identifications refl refl = refl left-whisker-concat-vertical-refl-coherence-square-identifications' : {x y z : A} (p : x = y) (q : y = z) → left-whisker-concat-coherence-square-identifications p q refl refl q ( vertical-refl-coherence-square-identifications q) = right-whisker-concat right-unit q ∙ inv right-unit left-whisker-concat-vertical-refl-coherence-square-identifications' refl refl = refl ``` ### Left whiskering horizontal concatenations of squares with identifications Consider a commuting diagram of identifications of the form ```text top-left top-right a -------------> c -------------> e | | | left | | middle | right ∨ ∨ ∨ b -------------> d -------------> f bottom-left bottom-right ``` and consider an identification `p : x = a`. Then the left whiskering of `p` and the horizontal concatenation of coherences of commuting squares is up to associativity the horizontal concatenation of the squares ```text p ∙ top-left top-right x -------------> c -------------> e | | | p ∙ left | | middle | right ∨ ∨ ∨ b -------------> d -------------> f bottom-left bottom-right ``` where the left square is the left whiskering of `p` and the original left square. ```agda module _ {l1 : Level} {A : UU l1} where left-whisker-concat-horizontal-pasting-coherence-square-identifications : {x a b c d e f : A} (p : x = a) (top-left : a = c) (top-right : c = e) (left : a = b) (middle : c = d) (right : e = f) (bottom-left : b = d) (bottom-right : d = f) (l : coherence-square-identifications top-left left middle bottom-left) (r : coherence-square-identifications top-right middle right bottom-right) → left-whisker-concat-coherence-square-identifications p ( top-left ∙ top-right) ( left) ( right) ( bottom-left ∙ bottom-right) ( horizontal-pasting-coherence-square-identifications ( top-left) ( top-right) ( left) ( middle) ( right) ( bottom-left) ( bottom-right) ( l) ( r)) = horizontal-pasting-coherence-square-identifications ( p ∙ top-left) ( top-right) ( p ∙ left) ( middle) ( right) ( bottom-left) ( bottom-right) ( left-whisker-concat-coherence-square-identifications p ( top-left) ( left) ( middle) ( bottom-left) ( l)) ( r) ∙ right-whisker-concat ( assoc p top-left top-right) ( right) left-whisker-concat-horizontal-pasting-coherence-square-identifications refl top-left top-right left middle right bottom-left bottom-right l r = inv right-unit ``` ### Left whiskering vertical concatenations of squares with identifications Consider two squares of identifications as in the diagram ```text top a --------> b | | top-left | | top-right ∨ middle ∨ c --------> d | | bottom-left | | bottom-right ∨ ∨ e --------> f bottom ``` and consider an identification `p : x = a`. Then the left whiskering of `p` with the vertical pasting of the two squares above is up to associativity the vertical pasting of the squares ```text p ∙ top x --------> b | | p ∙ top-left | | top-right ∨ middle ∨ c --------> d | | bottom-left | | bottom-right ∨ ∨ e --------> f. bottom ``` ```agda module _ {l1 : Level} {A : UU l1} where left-whisker-concat-vertical-concat-coherence-square-identifications : {x a b c d e f : A} (p : x = a) → (top : a = b) (top-left : a = c) (top-right : b = d) (middle : c = d) (bottom-left : c = e) (bottom-right : d = f) (bottom : e = f) (t : coherence-square-identifications top top-left top-right middle) → (b : coherence-square-identifications middle bottom-left bottom-right bottom) → right-whisker-concat (assoc p top-left bottom-left) bottom ∙ left-whisker-concat-coherence-square-identifications p ( top) ( top-left ∙ bottom-left) ( top-right ∙ bottom-right) ( bottom) ( vertical-pasting-coherence-square-identifications ( top) ( top-left) ( top-right) ( middle) ( bottom-left) ( bottom-right) ( bottom) ( t) ( b)) = vertical-pasting-coherence-square-identifications ( p ∙ top) ( p ∙ top-left) ( top-right) ( middle) ( bottom-left) ( bottom-right) ( bottom) ( left-whisker-concat-coherence-square-identifications p ( top) ( top-left) ( top-right) ( middle) ( t)) ( b) left-whisker-concat-vertical-concat-coherence-square-identifications refl top top-left top-right middle bottom-left bottom-right bottom t b = refl ``` ### Right whiskering horizontal pastings of commuting squares of identifications Consider a commuting diagram of identifications of the form ```text top-left top-right a -------------> c -------------> e | | | left | | middle | right ∨ ∨ ∨ b -------------> d -------------> f bottom-left bottom-right ``` and consider an identification `q : f = y`. Then the right whiskering of the horizontal pasting of the squares above is up to associativity the horizontal pasting of the squares ```text top-left top-right a -------------> c ------------------> e | | | left | | middle | right ∙ q ∨ ∨ ∨ b -------------> d ------------------> y bottom-left bottom-right ∙ q ``` ```agda module _ {l1 : Level} {A : UU l1} where right-whisker-concat-horizontal-pasting-coherence-square-identifications : {a b c d e f y : A} (top-left : a = c) (top-right : c = e) (left : a = b) (middle : c = d) (right : e = f) (bottom-left : b = d) (bottom-right : d = f) (l : coherence-square-identifications top-left left middle bottom-left) → (r : coherence-square-identifications top-right middle right bottom-right) → (q : f = y) → right-whisker-concat-coherence-square-identifications ( top-left ∙ top-right) ( left) ( right) ( bottom-left ∙ bottom-right) ( horizontal-pasting-coherence-square-identifications ( top-left) ( top-right) ( left) ( middle) ( right) ( bottom-left) ( bottom-right) ( l) ( r)) ( q) = left-whisker-concat left (assoc bottom-left bottom-right q) ∙ horizontal-pasting-coherence-square-identifications ( top-left) ( top-right) ( left) ( middle) ( right ∙ q) ( bottom-left) ( bottom-right ∙ q) ( l) ( right-whisker-concat-coherence-square-identifications ( top-right) ( middle) ( right) ( bottom-right) ( r) ( q)) right-whisker-concat-horizontal-pasting-coherence-square-identifications refl refl refl .refl .refl refl refl refl refl refl = refl ``` ### Right whiskering vertical concatenations of squares with identifications Consider two squares of identifications as in the diagram ```text top a --------> b | | top-left | | top-right ∨ middle ∨ c --------> d | | bottom-left | | bottom-right ∨ ∨ e --------> f bottom ``` and consider an identification `q : f = y`. Then the right whiskering of the vertical pasting of the two squares above with `q` is up to associativity the vertical pasting of the squares ```text top a ------------> b | | top-left | | top-right ∨ middle ∨ c ------------> d | | bottom-left | | bottom-right ∙ q ∨ ∨ e ------------> y. bottom ∙ q ``` ```agda module _ {l1 : Level} {A : UU l1} where right-whisker-concat-vertical-pasting-coherence-square-identifications : {a b c d e f y : A} (top : a = b) (top-left : a = c) (top-right : b = d) (middle : c = d) (bottom-left : c = e) (bottom-right : d = f) (bottom : e = f) (t : coherence-square-identifications top top-left top-right middle) → (b : coherence-square-identifications middle bottom-left bottom-right bottom) → (q : f = y) → right-whisker-concat-coherence-square-identifications ( top) ( top-left ∙ bottom-left) ( top-right ∙ bottom-right) ( bottom) ( vertical-pasting-coherence-square-identifications ( top) ( top-left) ( top-right) ( middle) ( bottom-left) ( bottom-right) ( bottom) ( t) ( b)) ( q) ∙ left-whisker-concat top (assoc top-right bottom-right q) = vertical-pasting-coherence-square-identifications ( top) ( top-left) ( top-right) ( middle) ( bottom-left) ( bottom-right ∙ q) ( bottom ∙ q) ( t) ( right-whisker-concat-coherence-square-identifications ( middle) ( bottom-left) ( bottom-right) ( bottom) ( b) ( q)) right-whisker-concat-vertical-pasting-coherence-square-identifications refl refl .refl refl refl .refl refl refl refl refl = refl ```