Finite sequences
Content created by Louis Wasserman.
Created on 2025-05-14.
Last modified on 2025-05-14.
module lists.finite-sequences where
Imports
open import elementary-number-theory.natural-numbers open import foundation.coproduct-types 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.sets open import foundation.truncated-types open import foundation.truncation-levels open import foundation.unit-type open import foundation.universe-levels open import univalent-combinatorics.involution-standard-finite-types open import univalent-combinatorics.standard-finite-types
Idea
A finite sequence¶ of length n
is a map from
the standard finite type of
cardinality n
, Fin n
, to A
. These are
equivalent to the related
concept of tuples, but are structured like
arrays instead of lists.
Definition
fin-sequence : {l : Level} → UU l → ℕ → UU l fin-sequence A n = Fin n → A module _ {l : Level} {A : UU l} where empty-fin-sequence : fin-sequence A 0 empty-fin-sequence () head-fin-sequence : (n : ℕ) → fin-sequence A (succ-ℕ n) → A head-fin-sequence n v = v (inr star) tail-fin-sequence : (n : ℕ) → fin-sequence A (succ-ℕ n) → fin-sequence A n tail-fin-sequence n v = v ∘ (inl-Fin n) cons-fin-sequence : (n : ℕ) → A → fin-sequence A n → fin-sequence A (succ-ℕ n) cons-fin-sequence n a v (inl x) = v x cons-fin-sequence n a v (inr x) = a snoc-fin-sequence : (n : ℕ) → fin-sequence A n → A → fin-sequence A (succ-ℕ n) snoc-fin-sequence zero-ℕ v a i = a snoc-fin-sequence (succ-ℕ n) v a (inl x) = snoc-fin-sequence n (tail-fin-sequence n v) a x snoc-fin-sequence (succ-ℕ n) v a (inr x) = head-fin-sequence n v revert-fin-sequence : (n : ℕ) → fin-sequence A n → fin-sequence A n revert-fin-sequence n v i = v (opposite-Fin n i) in-fin-sequence : (n : ℕ) → A → fin-sequence A n → UU l in-fin-sequence n a v = Σ (Fin n) (λ k → a = v k) index-in-fin-sequence : (n : ℕ) (x : A) (v : fin-sequence A n) → in-fin-sequence n x v → Fin n index-in-fin-sequence n x v I = pr1 I eq-component-fin-sequence-index-in-fin-sequence : (n : ℕ) (x : A) (v : fin-sequence A n) (I : in-fin-sequence n x v) → x = v (index-in-fin-sequence n x v I) eq-component-fin-sequence-index-in-fin-sequence n x v I = pr2 I
Properties
The type of finite sequences of elements in a truncated type is truncated
module _ {l : Level} {A : UU l} where is-trunc-fin-sequence : (k : 𝕋) (n : ℕ) → is-trunc k A → is-trunc k (fin-sequence A n) is-trunc-fin-sequence k n H = is-trunc-function-type k H
The type of finite sequences of elements in a set is a set
module _ {l : Level} {A : UU l} where is-set-fin-sequence : (n : ℕ) → is-set A → is-set (fin-sequence A n) is-set-fin-sequence = is-trunc-fin-sequence zero-𝕋 fin-sequence-Set : {l : Level} → Set l → ℕ → Set l pr1 (fin-sequence-Set A n) = fin-sequence (type-Set A) n pr2 (fin-sequence-Set A n) = is-set-fin-sequence n (is-set-type-Set A)
Adding the tail to the head gives the same finite sequence
module _ {l : Level} {A : UU l} where htpy-cons-head-tail-fin-sequence : ( n : ℕ) → ( v : fin-sequence A (succ-ℕ n)) → ( cons-fin-sequence n ( head-fin-sequence n v) ( tail-fin-sequence n v)) ~ ( v) htpy-cons-head-tail-fin-sequence n v (inl x) = refl htpy-cons-head-tail-fin-sequence n v (inr star) = refl cons-head-tail-fin-sequence : ( n : ℕ) → ( v : fin-sequence A (succ-ℕ n)) → ( cons-fin-sequence n ( head-fin-sequence n v) ( tail-fin-sequence n v)) = ( v) cons-head-tail-fin-sequence n v = eq-htpy (htpy-cons-head-tail-fin-sequence n v)
See also
Recent changes
- 2025-05-14. Louis Wasserman. Refactor linear algebra to use “tuples” for what was “vectors” (#1397).