# The action of functions on higher identifications ```agda module foundation.action-on-higher-identifications-functions where ``` <details><summary>Imports</summary> ```agda open import foundation.action-on-identifications-functions open import foundation.path-algebra open import foundation.universe-levels open import foundation-core.commuting-squares-of-identifications open import foundation-core.constant-maps open import foundation-core.function-types open import foundation-core.homotopies open import foundation-core.identity-types ``` </details> ## Idea Any map `f : A → B` has an {{#concept "action on higher identifications" Disambiguation="functions" Agda=ap²}}, which is a map ```text ap² f : (p = q) → (ap f p = ap f q) ``` Here `p q : x = y` are [identifications](foundation-core.identity-types.md) in the type `A`. The action of `f` on higher identifications is defined by ```text ap² f := ap (ap f). ``` ## Definitions ### The action of functions on higher identifications ```agda module _ {l1 l2 : Level} {A : UU l1} {B : UU l2} {x y : A} {p q : x = y} (f : A → B) (α : p = q) where ap² : ap f p = ap f q ap² = ap (ap f) α ``` ## Properties ### The inverse law of the action of functions on higher identifications Consider an identification `α : p = q` between two identifications `p q : x = y` in a type `A`, and consider a map `f : A → B`. Then the square of identifications ```text ap² f (horizontal-inv-Id² α) ap f (inv p) ------------------------------> ap f (inv q) | | ap-inv f p | | ap-inv f q ∨ ∨ inv (ap f p) ------------------------------> inv (ap f q) horizontal-inv-Id² (ap² f α) ``` [commutes](foundation.commuting-squares-of-identifications.md). ```agda module _ {l1 l2 : Level} {A : UU l1} {B : UU l2} {x y : A} {p q : x = y} (f : A → B) (α : p = q) where compute-inv-ap² : coherence-square-identifications ( ap² f (horizontal-inv-Id² α)) ( ap-inv f p) ( ap-inv f q) ( horizontal-inv-Id² (ap² f α)) compute-inv-ap² = ( ( inv (horizontal-concat-Id² refl (ap-comp inv (ap f) α))) ∙ ( nat-htpy (ap-inv f) α)) ∙ ( horizontal-concat-Id² (ap-comp (ap f) inv α) refl) ``` ### The action of the identity function on higher identifications is trivial Consider an identification `α : p = q` between two identifications `p q : x = y` in a type `A`. Then the square of identifications ```text ap² id α ap id p ----------> ap id q | | ap-id p | | ap-id q ∨ ∨ p -----------------> q α ``` commutes. ```agda module _ {l1 l2 : Level} {A : UU l1} {B : UU l2} {x y : A} {p q : x = y} (α : p = q) where compute-id-ap² : coherence-square-identifications (ap² id α) (ap-id p) (ap-id q) α compute-id-ap² = horizontal-concat-Id² refl (inv (ap-id α)) ∙ nat-htpy ap-id α ``` ### The action of a composite function on higher identifications Consider an identification `α : p = q` between two identifications `p q : x = y` in a type `A` and consider two functions `f : A → B` and `g : B → C`. Then the square of identifications ```text ap² (g ∘ f) α ap (g ∘ f) p -----------------> ap (g ∘ f) q | | ap-comp g f p | | ap-comp g f q ∨ ∨ ap g (ap f p) ----------------> ap g (ap f q) ap² g (ap² f α) ``` commutes. ```agda module _ {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {C : UU l3} {x y : A} {p q : x = y} (g : B → C) (f : A → B) (α : p = q) where compute-comp-ap² : coherence-square-identifications ( ap² (g ∘ f) α) ( ap-comp g f p) ( ap-comp g f q) ( (ap² g ∘ ap² f) α) compute-comp-ap² = (horizontal-concat-Id² refl (inv (ap-comp (ap g) (ap f) α)) ∙ (nat-htpy (ap-comp g f) α)) ``` ### The action of a constant function on higher identifications is constant Consider an identification `α : p = q` between two identifications `p q : x = y` in a type `A` and consider an element `b : B`. Then the triangle of identifications ```text ap² (const b) α ap (const b) p ---------------> ap (const b) q \ / ap-const b p \ / ap-const b q ∨ ∨ refl ``` [commutes](foundation.commuting-triangles-of-identifications.md). ```agda module _ {l1 l2 : Level} {A : UU l1} {B : UU l2} {x y : A} {p q : x = y} (α : p = q) where compute-const-ap² : (b : B) → coherence-square-identifications ( ap² (const A b) α) ( ap-const b p) ( ap-const b q) ( refl) compute-const-ap² b = ( inv (horizontal-concat-Id² refl (ap-const refl α))) ∙ ( nat-htpy (ap-const b) α) ``` ## See also - [Action of functions on identifications](foundation.action-on-identifications-functions.md) - [Action of binary functions on identifications](foundation.action-on-identifications-binary-functions.md). - [Action of dependent functions on identifications](foundation.action-on-identifications-dependent-functions.md).