mathlib documentation

data.​array.​lemmas

data.​array.​lemmas

@[instance]
def d_array.​inhabited {n : ℕ} {α : fin n → Type u} [Π (i : fin n), inhabited (α i)] :

Equations
@[instance]
def array.​inhabited {n : ℕ} {α : Type u_1} [inhabited α] :

Equations
theorem array.​to_list_of_heq {n₁ n₂ : ℕ} {α : Type u_1} {a₁ : array n₁ α} {a₂ : array n₂ α} :
n₁ = n₂ → a₁ == a₂ → a₁.to_list = a₂.to_list

theorem array.​rev_list_reverse_aux {n : ℕ} {α : Type u} {a : array n α} (i : ℕ) (h : i ≤ n) (t : list α) :
(d_array.iterate_aux a (λ (_x : fin n), λ (_x : α) (_y : list α), _x :: _y) i h list.nil).reverse_core t = d_array.rev_iterate_aux a (λ (_x : fin n), λ (_x : α) (_y : list α), _x :: _y) i h t

@[simp]
theorem array.​rev_list_reverse {n : ℕ} {α : Type u} {a : array n α} :

@[simp]
theorem array.​to_list_reverse {n : ℕ} {α : Type u} {a : array n α} :

theorem array.​mem.​def {n : ℕ} {α : Type u} {v : α} {a : array n α} :
v ∈ a ↔ ∃ (i : fin n), a.read i = v

theorem array.​mem_rev_list_aux {n : ℕ} {α : Type u} {v : α} {a : array n α} {i : ℕ} (h : i ≤ n) :
(∃ (j : fin n), j.val < i ∧ a.read j = v) ↔ v ∈ d_array.iterate_aux a (λ (_x : fin n), λ (_x : α) (_y : list α), _x :: _y) i h list.nil

@[simp]
theorem array.​mem_rev_list {n : ℕ} {α : Type u} {v : α} {a : array n α} :

@[simp]
theorem array.​mem_to_list {n : ℕ} {α : Type u} {v : α} {a : array n α} :
v ∈ a.to_list ↔ v ∈ a

theorem array.​rev_list_foldr_aux {n : ℕ} {α : Type u} {β : Type w} {b : β} {f : α → β → β} {a : array n α} {i : ℕ} (h : i ≤ n) :
list.foldr f b (d_array.iterate_aux a (λ (_x : fin n), λ (_x : α) (_y : list α), _x :: _y) i h list.nil) = d_array.iterate_aux a (λ (_x : fin n), f) i h b

theorem array.​rev_list_foldr {n : ℕ} {α : Type u} {β : Type w} {b : β} {f : α → β → β} {a : array n α} :

theorem array.​to_list_foldl {n : ℕ} {α : Type u} {β : Type w} {b : β} {f : β → α → β} {a : array n α} :

theorem array.​rev_list_length_aux {n : ℕ} {α : Type u} (a : array n α) (i : ℕ) (h : i ≤ n) :
(d_array.iterate_aux a (λ (_x : fin n), λ (_x : α) (_y : list α), _x :: _y) i h list.nil).length = i

@[simp]
theorem array.​rev_list_length {n : ℕ} {α : Type u} (a : array n α) :

@[simp]
theorem array.​to_list_length {n : ℕ} {α : Type u} (a : array n α) :

theorem array.​to_list_nth_le_aux {n : ℕ} {α : Type u} {a : array n α} (i : ℕ) (ih : i < n) (j : ℕ) {jh : j ≤ n} {t : list α} {h' : i < (d_array.rev_iterate_aux a (λ (_x : fin n), λ (_x : α) (_y : list α), _x :: _y) j jh t).length} :
(∀ (k : ℕ) (tl : k < t.length), j + k = i → t.nth_le k tl = a.read ⟨i, ih⟩) → (d_array.rev_iterate_aux a (λ (_x : fin n), λ (_x : α) (_y : list α), _x :: _y) j jh t).nth_le i h' = a.read ⟨i, ih⟩

theorem array.​to_list_nth_le {n : ℕ} {α : Type u} {a : array n α} (i : ℕ) (h : i < n) (h' : i < a.to_list.length) :
a.to_list.nth_le i h' = a.read ⟨i, h⟩

@[simp]
theorem array.​to_list_nth_le' {n : ℕ} {α : Type u} (a : array n α) (i : fin n) (h' : i.val < a.to_list.length) :
a.to_list.nth_le i.val h' = a.read i

theorem array.​to_list_nth {n : ℕ} {α : Type u} {a : array n α} {i : ℕ} {v : α} :
a.to_list.nth i = option.some v ↔ ∃ (h : i < n), a.read ⟨i, h⟩ = v

theorem array.​write_to_list {n : ℕ} {α : Type u} {a : array n α} {i : fin n} {v : α} :

theorem array.​mem_to_list_enum {n : ℕ} {α : Type u} {a : array n α} {i : ℕ} {v : α} :
(i, v) ∈ a.to_list.enum ↔ ∃ (h : i < n), a.read ⟨i, h⟩ = v

@[simp]
theorem array.​to_list_to_array {n : ℕ} {α : Type u} (a : array n α) :

@[simp]
theorem array.​to_array_to_list {α : Type u} (l : list α) :

theorem array.​push_back_rev_list_aux {n : ℕ} {α : Type u} {v : α} {a : array n α} (i : ℕ) (h : i ≤ n + 1) (h' : i ≤ n) :
d_array.iterate_aux (a.push_back v) (λ (_x : fin (n + 1)), λ (_x : α) (_y : list α), _x :: _y) i h list.nil = d_array.iterate_aux a (λ (_x : fin n), λ (_x : α) (_y : list α), _x :: _y) i h' list.nil

@[simp]
theorem array.​push_back_rev_list {n : ℕ} {α : Type u} {v : α} {a : array n α} :

@[simp]
theorem array.​push_back_to_list {n : ℕ} {α : Type u} {v : α} {a : array n α} :

@[simp]
theorem array.​read_foreach {n : ℕ} {α : Type u} {β : Type v} {i : fin n} {f : fin n → α → β} {a : array n α} :
(a.foreach f).read i = f i (a.read i)

theorem array.​read_map {n : ℕ} {α : Type u} {β : Type v} {i : fin n} {f : α → β} {a : array n α} :
(a.map f).read i = f (a.read i)

@[simp]
theorem array.​read_map₂ {n : ℕ} {α : Type u} {i : fin n} {f : α → α → α} {a₁ a₂ : array n α} :
(array.map₂ f a₁ a₂).read i = f (a₁.read i) (a₂.read i)

def equiv.​d_array_equiv_fin {n : ℕ} (α : fin n → Type u_1) :
d_array n α ≃ Π (i : fin n), α i

Equations
def equiv.​array_equiv_fin (n : ℕ) (α : Type u_1) :
array n α ≃ (fin n → α)

Equations
def equiv.​vector_equiv_fin (α : Type u_1) (n : ℕ) :
vector α n ≃ (fin n → α)

Equations
@[instance]

Equations