Skip to content

Commit 868f4a6

Browse files
committed
feat: grind annotations for List/Array/Vector.ofFn theorems and List.Impl
1 parent c2876a1 commit 868f4a6

File tree

4 files changed

+24
-24
lines changed

4 files changed

+24
-24
lines changed

src/Init/Data/Array/OfFn.lean

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ namespace Array
2323

2424
/-! ### ofFn -/
2525

26-
@[simp] theorem ofFn_zero {f : Fin 0 → α} : ofFn f = #[] := by
26+
@[simp, grind =] theorem ofFn_zero {f : Fin 0 → α} : ofFn f = #[] := by
2727
simp [ofFn, ofFn.go]
2828

2929
theorem ofFn_succ {f : Fin (n+1) → α} :
@@ -42,10 +42,10 @@ theorem ofFn_add {n m} {f : Fin (n + m) → α} :
4242
| zero => simp
4343
| succ m ih => simp [ofFn_succ, ih]
4444

45-
@[simp] theorem _root_.List.toArray_ofFn {f : Fin n → α} : (List.ofFn f).toArray = Array.ofFn f := by
45+
@[simp, grind =] theorem _root_.List.toArray_ofFn {f : Fin n → α} : (List.ofFn f).toArray = Array.ofFn f := by
4646
ext <;> simp
4747

48-
@[simp] theorem toList_ofFn {f : Fin n → α} : (Array.ofFn f).toList = List.ofFn f := by
48+
@[simp, grind =] theorem toList_ofFn {f : Fin n → α} : (Array.ofFn f).toList = List.ofFn f := by
4949
apply List.ext_getElem <;> simp
5050

5151
theorem ofFn_succ' {f : Fin (n+1) → α} :
@@ -58,7 +58,7 @@ theorem ofFn_eq_empty_iff {f : Fin n → α} : ofFn f = #[] ↔ n = 0 := by
5858
rw [← Array.toList_inj]
5959
simp
6060

61-
@[simp 500]
61+
@[simp 500, grind =]
6262
theorem mem_ofFn {n} {f : Fin n → α} {a : α} : a ∈ ofFn f ↔ ∃ i, f i = a := by
6363
constructor
6464
· intro w
@@ -73,7 +73,7 @@ theorem mem_ofFn {n} {f : Fin n → α} {a : α} : a ∈ ofFn f ↔ ∃ i, f i =
7373
def ofFnM {n} [Monad m] (f : Fin n → m α) : m (Array α) :=
7474
Fin.foldlM n (fun xs i => xs.push <$> f i) (Array.emptyWithCapacity n)
7575

76-
@[simp]
76+
@[simp, grind =]
7777
theorem ofFnM_zero [Monad m] {f : Fin 0 → m α} : ofFnM f = pure #[] := by
7878
simp [ofFnM]
7979

@@ -109,7 +109,7 @@ theorem ofFnM_add {n m} [Monad m] [LawfulMonad m] {f : Fin (n + k) → m α} :
109109
funext x
110110
simp
111111

112-
@[simp] theorem toList_ofFnM [Monad m] [LawfulMonad m] {f : Fin n → m α} :
112+
@[simp, grind =] theorem toList_ofFnM [Monad m] [LawfulMonad m] {f : Fin n → m α} :
113113
toList <$> ofFnM f = List.ofFnM f := by
114114
induction n with
115115
| zero => simp

src/Init/Data/List/Impl.lean

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ Examples:
261261
/-- Tail recursive implementation of `findRev?`. This is only used at runtime. -/
262262
def findRev?TR (p : α → Bool) (l : List α) : Option α := l.reverse.find? p
263263

264-
@[simp] theorem find?_singleton {a : α} : [a].find? p = if p a then some a else none := by
264+
@[simp, grind =] theorem find?_singleton {a : α} : [a].find? p = if p a then some a else none := by
265265
simp only [find?]
266266
split <;> simp_all
267267

@@ -287,12 +287,12 @@ def findRev?TR (p : α → Bool) (l : List α) : Option α := l.reverse.find? p
287287
/-- Tail recursive implementation of `finSomedRev?`. This is only used at runtime. -/
288288
def findSomeRev?TR (f : α → Option β) (l : List α) : Option β := l.reverse.findSome? f
289289

290-
@[simp] theorem findSome?_singleton {a : α} :
290+
@[simp, grind =] theorem findSome?_singleton {a : α} :
291291
[a].findSome? f = f a := by
292292
simp only [findSome?_cons, findSome?_nil]
293293
split <;> simp_all
294294

295-
@[simp] theorem findSome?_append {xs ys : List α} : (xs ++ ys).findSome? f = (xs.findSome? f).or (ys.findSome? f) := by
295+
@[simp, grind =] theorem findSome?_append {xs ys : List α} : (xs ++ ys).findSome? f = (xs.findSome? f).or (ys.findSome? f) := by
296296
induction xs with
297297
| nil => simp [findSome?]
298298
| cons x xs ih =>

src/Init/Data/List/OfFn.lean

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,14 @@ to each potential index in order, starting at `0`.
3434
def ofFnM {n} [Monad m] (f : Fin n → m α) : m (List α) :=
3535
List.reverse <$> Fin.foldlM n (fun xs i => (· :: xs) <$> f i) []
3636

37-
@[simp]
37+
@[simp, grind =]
3838
theorem length_ofFn {f : Fin n → α} : (ofFn f).length = n := by
3939
simp only [ofFn]
4040
induction n with
4141
| zero => simp
4242
| succ n ih => simp [Fin.foldr_succ, ih]
4343

44-
@[simp]
44+
@[simp, grind =]
4545
protected theorem getElem_ofFn {f : Fin n → α} (h : i < (ofFn f).length) :
4646
(ofFn f)[i] = f ⟨i, by simp_all⟩ := by
4747
simp only [ofFn]
@@ -55,7 +55,7 @@ protected theorem getElem_ofFn {f : Fin n → α} (h : i < (ofFn f).length) :
5555
apply ih
5656
simp_all
5757

58-
@[simp]
58+
@[simp, grind =]
5959
protected theorem getElem?_ofFn {f : Fin n → α} :
6060
(ofFn f)[i]? = if h : i < n then some (f ⟨i, h⟩) else none :=
6161
if h : i < (ofFn f).length
@@ -67,7 +67,7 @@ protected theorem getElem?_ofFn {f : Fin n → α} :
6767
simpa using h
6868

6969
/-- `ofFn` on an empty domain is the empty list. -/
70-
@[simp]
70+
@[simp, grind =]
7171
theorem ofFn_zero {f : Fin 0 → α} : ofFn f = [] := by
7272
rw [ofFn, Fin.foldr_zero]
7373

@@ -98,7 +98,7 @@ theorem ofFn_add {n m} {f : Fin (n + m) → α} :
9898
theorem ofFn_eq_nil_iff {f : Fin n → α} : ofFn f = [] ↔ n = 0 := by
9999
cases n <;> simp only [ofFn_zero, ofFn_succ, eq_self_iff_true, Nat.succ_ne_zero, reduceCtorEq]
100100

101-
@[simp 500]
101+
@[simp 500, grind =]
102102
theorem mem_ofFn {n} {f : Fin n → α} {a : α} : a ∈ ofFn f ↔ ∃ i, f i = a := by
103103
constructor
104104
· intro w
@@ -107,17 +107,17 @@ theorem mem_ofFn {n} {f : Fin n → α} {a : α} : a ∈ ofFn f ↔ ∃ i, f i =
107107
· rintro ⟨i, rfl⟩
108108
apply mem_of_getElem (i := i) <;> simp
109109

110-
theorem head_ofFn {n} {f : Fin n → α} (h : ofFn f ≠ []) :
110+
@[grind =] theorem head_ofFn {n} {f : Fin n → α} (h : ofFn f ≠ []) :
111111
(ofFn f).head h = f ⟨0, Nat.pos_of_ne_zero (mt ofFn_eq_nil_iff.2 h)⟩ := by
112112
rw [← getElem_zero (length_ofFn ▸ Nat.pos_of_ne_zero (mt ofFn_eq_nil_iff.2 h)),
113113
List.getElem_ofFn]
114114

115-
theorem getLast_ofFn {n} {f : Fin n → α} (h : ofFn f ≠ []) :
115+
@[grind =]theorem getLast_ofFn {n} {f : Fin n → α} (h : ofFn f ≠ []) :
116116
(ofFn f).getLast h = f ⟨n - 1, Nat.sub_one_lt (mt ofFn_eq_nil_iff.2 h)⟩ := by
117117
simp [getLast_eq_getElem, length_ofFn, List.getElem_ofFn]
118118

119119
/-- `ofFnM` on an empty domain is the empty list. -/
120-
@[simp]
120+
@[simp, grind =]
121121
theorem ofFnM_zero [Monad m] [LawfulMonad m] {f : Fin 0 → m α} : ofFnM f = pure [] := by
122122
simp [ofFnM]
123123

src/Init/Data/Vector/OfFn.lean

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@ set_option linter.indexVariables true -- Enforce naming conventions for index va
2020

2121
namespace Vector
2222

23-
@[simp] theorem getElem_ofFn {α n} {f : Fin n → α} (h : i < n) :
23+
@[simp, grind =] theorem getElem_ofFn {α n} {f : Fin n → α} (h : i < n) :
2424
(Vector.ofFn f)[i] = f ⟨i, by simpa using h⟩ := by
2525
simp [ofFn]
2626

27-
theorem getElem?_ofFn {α n} {f : Fin n → α} :
27+
@[simp, grind =] theorem getElem?_ofFn {α n} {f : Fin n → α} :
2828
(ofFn f)[i]? = if h : i < n then some (f ⟨i, h⟩) else none := by
2929
simp [getElem?_def]
3030

31-
@[simp 500]
31+
@[simp 500, grind =]
3232
theorem mem_ofFn {n} {f : Fin n → α} {a : α} : a ∈ ofFn f ↔ ∃ i, f i = a := by
3333
constructor
3434
· intro w
@@ -37,7 +37,7 @@ theorem mem_ofFn {n} {f : Fin n → α} {a : α} : a ∈ ofFn f ↔ ∃ i, f i =
3737
· rintro ⟨i, rfl⟩
3838
apply mem_of_getElem (i := i) <;> simp
3939

40-
theorem back_ofFn {n} [NeZero n] {f : Fin n → α} :
40+
@[grind =] theorem back_ofFn {n} [NeZero n] {f : Fin n → α} :
4141
(ofFn f).back = f ⟨n - 1, by have := NeZero.ne n; omega⟩ := by
4242
simp [back]
4343

@@ -71,7 +71,7 @@ def ofFnM {n} [Monad m] (f : Fin n → m α) : m (Vector α n) :=
7171
else
7272
pure ⟨acc, by omega⟩
7373

74-
@[simp]
74+
@[simp, grind =]
7575
theorem ofFnM_zero [Monad m] {f : Fin 0 → m α} : Vector.ofFnM f = pure #v[] := by
7676
simp [ofFnM, ofFnM.go]
7777

@@ -114,13 +114,13 @@ theorem ofFnM_add {n m} [Monad m] [LawfulMonad m] {f : Fin (n + k) → m α} :
114114
| zero => simp
115115
| succ k ih => simp [ofFnM_succ, ih, ← push_append]
116116

117-
@[simp, grind] theorem toArray_ofFnM [Monad m] [LawfulMonad m] {f : Fin n → m α} :
117+
@[simp, grind =] theorem toArray_ofFnM [Monad m] [LawfulMonad m] {f : Fin n → m α} :
118118
toArray <$> ofFnM f = Array.ofFnM f := by
119119
induction n with
120120
| zero => simp
121121
| succ n ih => simp [ofFnM_succ, Array.ofFnM_succ, ← ih]
122122

123-
@[simp, grind] theorem toList_ofFnM [Monad m] [LawfulMonad m] {f : Fin n → m α} :
123+
@[simp, grind =] theorem toList_ofFnM [Monad m] [LawfulMonad m] {f : Fin n → m α} :
124124
toList <$> Vector.ofFnM f = List.ofFnM f := by
125125
unfold toList
126126
suffices Array.toList <$> (toArray <$> ofFnM f) = List.ofFnM f by

0 commit comments

Comments
 (0)