@@ -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+
440443theorem 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+
445452theorem 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+
449460theorem 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