@@ -34,14 +34,14 @@ to each potential index in order, starting at `0`.
3434def 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 = ]
3838theorem 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 = ]
4545protected 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 = ]
5959protected 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 = ]
7171theorem 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) → α} :
9898theorem 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 = ]
102102theorem 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 = ]
121121theorem ofFnM_zero [Monad m] [LawfulMonad m] {f : Fin 0 → m α} : ofFnM f = pure [] := by
122122 simp [ofFnM]
123123
0 commit comments