diff --git a/Batteries/Data/List/Lemmas.lean b/Batteries/Data/List/Lemmas.lean index 74c3e72586..b2fe7aabb9 100644 --- a/Batteries/Data/List/Lemmas.lean +++ b/Batteries/Data/List/Lemmas.lean @@ -7,6 +7,7 @@ import Batteries.Control.ForInStep.Lemmas import Batteries.Data.List.Basic import Batteries.Tactic.Init import Batteries.Tactic.Alias +import Batteries.Tactic.Lint.Simp namespace List @@ -138,6 +139,8 @@ theorem drop_left' {l₁ l₂ : List α} {n} (h : length l₁ = n) : drop n (l @[simp] theorem isEmpty_nil : ([] : List α).isEmpty = true := rfl @[simp] theorem isEmpty_cons : (x :: xs : List α).isEmpty = false := rfl +theorem isEmpty_iff_eq_nil {l : List α} : l.isEmpty ↔ l = [] := by cases l <;> simp [isEmpty] + /-! ### append -/ theorem append_eq_append : List.append l₁ l₂ = l₁ ++ l₂ := rfl @@ -1156,6 +1159,11 @@ theorem drop_eq_nil_of_eq_nil : ∀ {as : List α} {i}, as = [] → as.drop i = theorem ne_nil_of_drop_ne_nil {as : List α} {i : Nat} (h: as.drop i ≠ []) : as ≠ [] := mt drop_eq_nil_of_eq_nil h +/-! ### modifyHead -/ + +@[simp] theorem modifyHead_modifyHead (l : List α) (f g : α → α) : + (l.modifyHead f).modifyHead g = l.modifyHead (g ∘ f) := by cases l <;> simp [modifyHead] + /-! ### modify nth -/ theorem modifyNthTail_id : ∀ n (l : List α), l.modifyNthTail id n = l @@ -2356,6 +2364,17 @@ theorem IsInfix.filter (p : α → Bool) ⦃l₁ l₂ : List α⦄ (h : l₁ <:+ obtain ⟨xs, ys, rfl⟩ := h rw [filter_append, filter_append]; apply infix_append _ +theorem cons_prefix_cons : a :: l₁ <+: b :: l₂ ↔ a = b ∧ l₁ <+: l₂ := by + constructor + · rintro ⟨L, hL⟩ + simp only [cons_append] at hL + injection hL with hLLeft hLRight + exact ⟨hLLeft, ⟨L, hLRight⟩⟩ + · rintro ⟨rfl, h⟩ + rwa [prefix_cons_inj] + +@[deprecated] alias cons_prefix_iff := cons_prefix_cons + /-! ### drop -/ theorem mem_of_mem_drop {n} {l : List α} (h : a ∈ l.drop n) : a ∈ l := drop_subset _ _ h