Additional theorems and definitions about the Vector
type #
This file introduces the infix notation ::ᵥ
for Vector.cons
.
If a : α
and l : Vector α n
, then cons a l
, is the vector of length n + 1
whose first element is a and with l as the rest of the list.
Equations
- List.Vector.«term_::ᵥ_» = Lean.ParserDescr.trailingNode `List.Vector.«term_::ᵥ_» 67 68 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ::ᵥ ") (Lean.ParserDescr.cat `term 67))
Instances For
Equations
- List.Vector.instInhabited = { default := List.Vector.ofFn default }
Two v w : Vector α n
are equal iff they are equal at every single index.
The empty Vector
is a Subsingleton
.
Opposite direction of Vector.pmap_cons
Alias of List.Vector.get_eq_get_toList
.
The natural equivalence between length-n
vectors and functions from Fin n
.
Equations
- Equiv.vectorEquivFin α n = { toFun := List.Vector.get, invFun := List.Vector.ofFn, left_inv := ⋯, right_inv := ⋯ }
Instances For
The tail
of a nil
vector is nil
.
The tail
of a vector made up of one element is nil
.
The list that makes up a Vector
made up of a single element,
retrieved via toList
, is equal to the list of that single element.
Mapping under id
does not change a vector.
The List
of a vector after a reverse
, retrieved by toList
is equal
to the List.reverse
after retrieving a vector's toList
.
The last element of a Vector
, given that the vector is at least one element.
Instances For
The last element of a Vector
, given that the vector is at least one element.
The last
element of a vector is the head
of the reverse
vector.
Construct a Vector β (n + 1)
from a Vector α n
by scanning f : β → α → β
from the "left", that is, from 0 to Fin.last n
, using b : β
as the starting value.
Equations
- List.Vector.scanl f b v = ⟨List.scanl f b v.toList, ⋯⟩
Instances For
Providing an empty vector to scanl
gives the starting value b : β
.
The recursive step of scanl
splits a vector x ::ᵥ v : Vector α (n + 1)
into the provided starting value b : β
and the recursed scanl
f b x : β
as the starting value.
This lemma is the cons
version of scanl_get
.
The underlying List
of a Vector
after a scanl
is the List.scanl
of the underlying List
of the original Vector
.
The toList
of a Vector
after a scanl
is the List.scanl
of the toList
of the original Vector
.
The recursive step of scanl
splits a vector made up of a single element
x ::ᵥ nil : Vector α 1
into a Vector
of the provided starting value b : β
and the mapped f b x : β
as the last value.
The first element of scanl
of a vector v : Vector α n
,
retrieved via head
, is the starting value b : β
.
For an index i : Fin n
, the nth element of scanl
of a
vector v : Vector α n
at i.succ
, is equal to the application
function f : β → α → β
of the castSucc i
element of
scanl f b v
and get v i
.
This lemma is the get
version of scanl_cons
.
Monadic analog of Vector.ofFn
.
Given a monadic function on Fin n
, return a Vector α n
inside the monad.
Equations
- List.Vector.mOfFn x_2 = pure List.Vector.nil
- List.Vector.mOfFn f = do let a ← f 0 let v ← List.Vector.mOfFn fun (i : Fin n) => f i.succ pure (a ::ᵥ v)
Instances For
Apply a monadic function to each component of a vector, returning a vector inside the monad.
Equations
- List.Vector.mmap f x_2 = pure List.Vector.nil
- List.Vector.mmap f xs = do let h' ← f xs.head let t' ← List.Vector.mmap f xs.tail pure (h' ::ᵥ t')
Instances For
Define C v
by induction on v : Vector α n
.
This function has two arguments: nil
handles the base case on C nil
,
and cons
defines the inductive step using ∀ x : α, C w → C (x ::ᵥ w)
.
It is used as the default induction principle for the induction
tactic.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Define C v w
by induction on a pair of vectors v : Vector α n
and w : Vector β n
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Define C u v w
by induction on a triplet of vectors
u : Vector α n
, v : Vector β n
, and w : Vector γ b
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Define motive v
by case-analysis on v : Vector α n
.
Equations
- List.Vector.casesOn v nil cons = v.inductionOn nil fun (x : ℕ) (hd : α) (tl : List.Vector α x) (x_1 : motive tl) => cons hd tl
Instances For
Define motive v₁ v₂
by case-analysis on v₁ : Vector α n
and v₂ : Vector β n
.
Equations
- List.Vector.casesOn₂ v₁ v₂ nil cons = v₁.inductionOn₂ v₂ nil fun (x : ℕ) (x_1 : α) (y : β) (xs : List.Vector α x) (ys : List.Vector β x) (x_2 : motive xs ys) => cons x_1 y xs ys
Instances For
Define motive v₁ v₂ v₃
by case-analysis on v₁ : Vector α n
, v₂ : Vector β n
, and
v₃ : Vector γ n
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Cast a vector to an array.
Equations
- List.Vector.toArray ⟨xs, property⟩ = cast ⋯ xs.toArray
Instances For
v.insertIdx a i
inserts a
into the vector v
at position i
(and shifting later components to the right).
Equations
- List.Vector.insertIdx a i v = ⟨List.insertIdx (↑i) a ↑v, ⋯⟩
Instances For
Alias of List.Vector.insertIdx
.
v.insertIdx a i
inserts a
into the vector v
at position i
(and shifting later components to the right).
Instances For
Alias of List.Vector.insertIdx_val
.
Alias of List.Vector.eraseIdx_val
.
Alias of List.Vector.eraseIdx_val
.
Alias of List.Vector.eraseIdx_insertIdx
.
Alias of List.Vector.eraseIdx_insertIdx
.
Erasing an element after inserting an element, at different indices.
Alias of List.Vector.eraseIdx_insertIdx'
.
Erasing an element after inserting an element, at different indices.
Alias of List.Vector.eraseIdx_insertIdx'
.
Erasing an element after inserting an element, at different indices.
Alias of List.Vector.insertIdx_comm
.
set v n a
replaces the n
th element of v
with a
.
Equations
- v.set i a = ⟨(↑v).set (↑i) a, ⋯⟩
Instances For
Variant of List.Vector.prod_set
that multiplies by the inverse of the replaced element.
Variant of List.Vector.sum_set
that subtracts the inverse of the replaced element.
Apply an applicative function to each component of a vector.
Equations
- List.Vector.traverse f ⟨v, Hv⟩ = cast ⋯ (List.Vector.traverseAux✝ f v)
Instances For
Equations
- List.Vector.instTraversableFlipNat = Traversable.mk (@List.Vector.traverse n)