Documentation

Mathlib.Data.List.InsertIdx

insertIdx #

Proves various lemmas about List.insertIdx.

@[simp]
theorem List.sublist_insertIdx {α : Type u} (l : List α) (n : ) (a : α) :
l.Sublist (l.insertIdx n a)
@[simp]
theorem List.subset_insertIdx {α : Type u} (l : List α) (n : ) (a : α) :
l l.insertIdx n a
@[simp]
theorem List.insertIdx_eraseIdx {α : Type u} {l : List α} {n : } (hn : n l.length) (a : α) :
(l.eraseIdx n).insertIdx n a = l.set n a

Erasing nth element of a list, then inserting a at the same place is the same as setting nth element to a.

We assume that n ≠ length l, because otherwise LHS equals l ++ [a] while RHS equals l.

theorem List.insertIdx_eraseIdx_getElem {α : Type u} {l : List α} {n : } (hn : n < l.length) :
(l.eraseIdx n).insertIdx n l[n] = l
theorem List.eq_or_mem_of_mem_insertIdx {α : Type u} {l : List α} {n : } {a b : α} (h : a l.insertIdx n b) :
a = b a l
theorem List.insertIdx_subset_cons {α : Type u} (n : ) (a : α) (l : List α) :
l.insertIdx n a a :: l
theorem List.insertIdx_pmap {α : Type u} {β : Type v} {p : αProp} (f : (a : α) → p aβ) {l : List α} {a : α} {n : } (hl : ∀ (x : α), x lp x) (ha : p a) :
(pmap f l hl).insertIdx n (f a ha) = pmap f (l.insertIdx n a)
theorem List.map_insertIdx {α : Type u} {β : Type v} (f : αβ) (l : List α) (n : ) (a : α) :
map f (l.insertIdx n a) = (map f l).insertIdx n (f a)
theorem List.eraseIdx_pmap {α : Type u} {β : Type v} {p : αProp} (f : (a : α) → p aβ) {l : List α} (hl : ∀ (a : α), a lp a) (n : ) :
(pmap f l hl).eraseIdx n = pmap f (l.eraseIdx n)
theorem List.eraseIdx_map {α : Type u} {β : Type v} (f : αβ) (l : List α) (n : ) :
(map f l).eraseIdx n = map f (l.eraseIdx n)

Erasing an index commutes with List.map.

theorem List.get_insertIdx_of_lt {α : Type u} (l : List α) (x : α) (n k : ) (hn : k < n) (hk : k < l.length) (hk' : k < (l.insertIdx n x).length := ) :
(l.insertIdx n x).get k, hk' = l.get k, hk
theorem List.get_insertIdx_self {α : Type u} (l : List α) (x : α) (n : ) (hn : n l.length) (hn' : n < (l.insertIdx n x).length := ) :
(l.insertIdx n x).get n, hn' = x
theorem List.getElem_insertIdx_add_succ {α : Type u} (l : List α) (x : α) (n k : ) (hk' : n + k < l.length) (hk : n + k + 1 < (l.insertIdx n x).length := ) :
(l.insertIdx n x)[n + k + 1] = l[n + k]
theorem List.get_insertIdx_add_succ {α : Type u} (l : List α) (x : α) (n k : ) (hk' : n + k < l.length) (hk : n + k + 1 < (l.insertIdx n x).length := ) :
(l.insertIdx n x).get n + k + 1, hk = l.get n + k, hk'
theorem List.insertIdx_injective {α : Type u} (n : ) (x : α) :
Function.Injective fun (l : List α) => l.insertIdx n x