diff --git a/src/Init/GetElem.lean b/src/Init/GetElem.lean index 1b54ccf982..35f0e5d047 100644 --- a/src/Init/GetElem.lean +++ b/src/Init/GetElem.lean @@ -164,25 +164,25 @@ export LawfulGetElem (getElem?_def getElem!_def) instance (priority := low) [GetElem coll idx elem valid] [∀ xs i, Decidable (valid xs i)] : LawfulGetElem coll idx elem valid where -@[simp] theorem getElem?_pos [GetElem? cont idx elem dom] [LawfulGetElem cont idx elem dom] +@[simp, grind] theorem getElem?_pos [GetElem? cont idx elem dom] [LawfulGetElem cont idx elem dom] (c : cont) (i : idx) (h : dom c i) : c[i]? = some (c[i]'h) := by have : Decidable (dom c i) := .isTrue h rw [getElem?_def] exact dif_pos h -@[simp] theorem getElem?_neg [GetElem? cont idx elem dom] [LawfulGetElem cont idx elem dom] +@[simp, grind] theorem getElem?_neg [GetElem? cont idx elem dom] [LawfulGetElem cont idx elem dom] (c : cont) (i : idx) (h : ¬dom c i) : c[i]? = none := by have : Decidable (dom c i) := .isFalse h rw [getElem?_def] exact dif_neg h -@[simp] theorem getElem!_pos [GetElem? cont idx elem dom] [LawfulGetElem cont idx elem dom] +@[simp, grind] theorem getElem!_pos [GetElem? cont idx elem dom] [LawfulGetElem cont idx elem dom] [Inhabited elem] (c : cont) (i : idx) (h : dom c i) : c[i]! = c[i]'h := by have : Decidable (dom c i) := .isTrue h simp [getElem!_def, getElem?_def, h] -@[simp] theorem getElem!_neg [GetElem? cont idx elem dom] [LawfulGetElem cont idx elem dom] +@[simp, grind] theorem getElem!_neg [GetElem? cont idx elem dom] [LawfulGetElem cont idx elem dom] [Inhabited elem] (c : cont) (i : idx) (h : ¬dom c i) : c[i]! = default := by have : Decidable (dom c i) := .isFalse h simp [getElem!_def, getElem?_def, h] diff --git a/tests/lean/run/grind_list2.lean b/tests/lean/run/grind_list2.lean index e5538c2c1b..1d8cc76615 100644 --- a/tests/lean/run/grind_list2.lean +++ b/tests/lean/run/grind_list2.lean @@ -1075,7 +1075,7 @@ theorem map_dropLast {f : α → β} {l : List α} : l.dropLast.map f = (l.map f theorem dropLast_append {l₁ l₂ : List α} : (l₁ ++ l₂).dropLast = if l₂.isEmpty then l₁.dropLast else l₁ ++ l₂.dropLast := by - grind +extAll (splits := 10) [length_eq_zero_iff] + grind +extAll (splits := 12) [length_eq_zero_iff] theorem dropLast_append_cons : dropLast (l₁ ++ b :: l₂) = l₁ ++ dropLast (b :: l₂) := by grind +extAll