Skip to content

Commit f0ee51a

Browse files
committed
feat(Data/List/Basic): add Fin variants of *mem_iff_getElem
1 parent a2df56f commit f0ee51a

1 file changed

Lines changed: 11 additions & 0 deletions

File tree

Mathlib/Data/List/Basic.lean

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,15 +437,26 @@ theorem get_eq_getElem? (l : List α) (i : Fin l.length) :
437437
l.get i = l[i]?.get (by simp) := by
438438
simp
439439

440+
theorem mem_iff_getElem' {l : List α} {a} : a ∈ l ↔ ∃ (i : Fin l.length), l[i] = a :=
441+
mem_iff_getElem.trans ⟨fun ⟨i, hi, h⟩ ↦ ⟨⟨i, hi⟩, h⟩, fun ⟨i, h⟩ ↦ ⟨i, i.isLt, h⟩⟩
442+
440443
theorem exists_mem_iff_getElem {l : List α} {p : α → Prop} :
441444
(∃ x ∈ l, p x) ↔ ∃ (i : ℕ) (_ : i < l.length), p l[i] := by
442445
simp only [mem_iff_getElem]
443446
exact ⟨fun ⟨_x, ⟨i, hi, hix⟩, hxp⟩ ↦ ⟨i, hi, hix ▸ hxp⟩, fun ⟨i, hi, hp⟩ ↦ ⟨_, ⟨i, hi, rfl⟩, hp⟩⟩
444447

448+
theorem exists_mem_iff_getElem' {l : List α} {p : α → Prop} :
449+
(∃ x ∈ l, p x) ↔ ∃ (i : Fin l.length), p l[i] :=
450+
exists_mem_iff_getElem.trans ⟨fun ⟨i, hi, h⟩ ↦ ⟨⟨i, hi⟩, h⟩, fun ⟨i, h⟩ ↦ ⟨i, i.isLt, h⟩⟩
451+
445452
theorem forall_mem_iff_getElem {l : List α} {p : α → Prop} :
446453
(∀ x ∈ l, p x) ↔ ∀ (i : ℕ) (_ : i < l.length), p l[i] := by
447454
simp [mem_iff_getElem, @forall_swap α]
448455

456+
theorem forall_mem_iff_getElem' {l : List α} {p : α → Prop} :
457+
(∀ x ∈ l, p x) ↔ ∀ (i : Fin l.length), p l[i] :=
458+
forall_mem_iff_getElem.trans ⟨fun h i ↦ h i i.isLt, fun h i hi ↦ h ⟨i, hi⟩⟩
459+
449460
theorem get_tail (l : List α) (i) (h : i < l.tail.length)
450461
(h' : i + 1 < l.length := (by simp only [length_tail] at h; cutsat)) :
451462
l.tail.get ⟨i, h⟩ = l.get ⟨i + 1, h'⟩ := by

0 commit comments

Comments
 (0)