# Functoriality of the type of vectors ```agda module linear-algebra.functoriality-vectors where ``` <details><summary>Imports</summary> ```agda open import elementary-number-theory.natural-numbers open import foundation.action-on-identifications-binary-functions open import foundation.dependent-pair-types open import foundation.function-extensionality open import foundation.function-types open import foundation.homotopies open import foundation.identity-types open import foundation.postcomposition-functions open import foundation.universe-levels open import foundation.whiskering-homotopies-composition open import linear-algebra.vectors open import univalent-combinatorics.standard-finite-types ``` </details> ## Idea Any map `f : A → B` determines a map `vec A n → vec B n` for every `n`. ## Definition ### Functoriality of the type of listed vectors ```agda module _ {l1 l2 : Level} {A : UU l1} {B : UU l2} where map-vec : {n : ℕ} → (A → B) → vec A n → vec B n map-vec _ empty-vec = empty-vec map-vec f (x ∷ xs) = f x ∷ map-vec f xs htpy-vec : {n : ℕ} {f g : A → B} → (f ~ g) → map-vec {n = n} f ~ map-vec {n = n} g htpy-vec H empty-vec = refl htpy-vec H (x ∷ v) = ap-binary _∷_ (H x) (htpy-vec H v) ``` ### Binary functoriality of the type of listed vectors ```agda module _ {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {C : UU l3} where binary-map-vec : {n : ℕ} → (A → B → C) → vec A n → vec B n → vec C n binary-map-vec f empty-vec empty-vec = empty-vec binary-map-vec f (x ∷ v) (y ∷ w) = f x y ∷ binary-map-vec f v w ``` ### Functoriality of the type of functional vectors ```agda module _ {l1 l2 : Level} {A : UU l1} {B : UU l2} where map-functional-vec : (n : ℕ) → (A → B) → functional-vec A n → functional-vec B n map-functional-vec n f v = f ∘ v htpy-functional-vec : (n : ℕ) {f g : A → B} → (f ~ g) → map-functional-vec n f ~ map-functional-vec n g htpy-functional-vec n = htpy-postcomp (Fin n) ``` ### Binary functoriality of the type of functional vectors ```agda module _ {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {C : UU l3} where binary-map-functional-vec : (n : ℕ) → (A → B → C) → functional-vec A n → functional-vec B n → functional-vec C n binary-map-functional-vec n f v w i = f (v i) (w i) ``` ### Link between functoriality of the type of vectors and of the type of functional vectors ```agda module _ {l1 l2 : Level} {A : UU l1} {B : UU l2} (f : A → B) where map-vec-map-functional-vec : (n : ℕ) (v : vec A n) → listed-vec-functional-vec ( n) ( map-functional-vec n f (functional-vec-vec n v)) = map-vec f v map-vec-map-functional-vec zero-ℕ empty-vec = refl map-vec-map-functional-vec (succ-ℕ n) (x ∷ v) = eq-Eq-vec ( succ-ℕ n) ( listed-vec-functional-vec ( succ-ℕ n) ( map-functional-vec ( succ-ℕ n) ( f) ( functional-vec-vec (succ-ℕ n) (x ∷ v)))) ( map-vec f (x ∷ v)) ( refl , Eq-eq-vec ( n) ( listed-vec-functional-vec ( n) ( map-functional-vec n f (functional-vec-vec n v))) ( map-vec f v) ( map-vec-map-functional-vec n v)) ```