mathlib3 documentation

data.array.lemmas

@[protected, instance]
def d_array.inhabited {n : ℕ} {α : fin n → Type u} [Π (i : fin n), inhabited (α i)] :
Equations
@[protected, 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₂ α} (hn : n₁ = n₂) (ha : 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 < 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 < a.to_list.length) :
a.to_list.nth_le ↑i 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_push_back_left {n : ℕ} {α : Type u} {v : α} {a : array n α} (i : fin n) :
@[simp]
theorem array.read_push_back_right {n : ℕ} {α : Type u} {v : α} {a : array n α} :
(a.push_back v).read (fin.last n) = v
@[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)