Todd Waugh Ambridge, January 2024 # Vectors \begin{code} {-# OPTIONS --without-K --safe #-} open import MLTT.Spartan open import MLTT.SpartanList hiding ([_]) open import Fin.Embeddings open import TWA.Thesis.Chapter2.Sequences hiding (head) module TWA.Thesis.Chapter2.Vectors where vec-map : {A : 𝓤 ̇ } {B : 𝓥 ̇ } {n : ℕ} → (A → B) → Vec A n → Vec B n vec-map {𝓤} {𝓥} {A} {B} {0} f ⟨⟩ = ⟨⟩ vec-map {𝓤} {𝓥} {A} {B} {succ n} f (x :: v) = f x :: vec-map f v pattern [_] x = x :: ⟨⟩ Vec-to-Seq : (n : ℕ) {X : ℕ → 𝓤 ̇ } → Π (X ∘ succ ^ n) → vec n (X ∘ ⟦_⟧) → Π X Vec-to-Seq 0 α ⟨⟩ = α Vec-to-Seq (succ n) α (x :: xs) 0 = x Vec-to-Seq (succ n) α (x :: xs) (succ i) = Vec-to-Seq n α xs i Seq-to-Vec : (n : ℕ) {X : ℕ → 𝓤 ̇ } → Π X → vec n (X ∘ ⟦_⟧) Seq-to-Vec 0 α = ⟨⟩ Seq-to-Vec (succ n) α = α 0 :: Seq-to-Vec n (α ∘ succ) Seq-to-Vec-∼ : (n : ℕ) {X : ℕ → 𝓤 ̇ } → (α : Π (X ∘ succ ^ n)) → (β : Π X) → (β ∼ⁿ Vec-to-Seq n α (Seq-to-Vec n β)) n Seq-to-Vec-∼ (succ n) α β 0 i<n = refl Seq-to-Vec-∼ (succ n) α β (succ i) i<n = Seq-to-Vec-∼ n α (β ∘ succ) i i<n \end{code}