Skip to content

Commit e6f71a0

Browse files
committed
feat: grind annotations for List/Array/Vector.finRange theorems
1 parent f0347ee commit e6f71a0

File tree

3 files changed

+9
-6
lines changed

3 files changed

+9
-6
lines changed

src/Init/Data/Array/FinRange.lean

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ Examples:
2323
-/
2424
protected def finRange (n : Nat) : Array (Fin n) := ofFn fun i => i
2525

26-
@[simp] theorem size_finRange {n} : (Array.finRange n).size = n := by
26+
@[simp, grind =] theorem size_finRange {n} : (Array.finRange n).size = n := by
2727
simp [Array.finRange]
2828

29-
@[simp] theorem getElem_finRange {i : Nat} (h : i < (Array.finRange n).size) :
29+
@[simp, grind =] theorem getElem_finRange {i : Nat} (h : i < (Array.finRange n).size) :
3030
(Array.finRange n)[i] = Fin.cast size_finRange ⟨i, h⟩ := by
3131
simp [Array.finRange]
3232

@@ -49,6 +49,7 @@ theorem finRange_succ_last {n} :
4949
· simp_all
5050
omega
5151

52+
@[grind _=_]
5253
theorem finRange_reverse {n} : (Array.finRange n).reverse = (Array.finRange n).map Fin.rev := by
5354
ext i h
5455
· simp

src/Init/Data/List/FinRange.lean

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,14 @@ Examples:
2323
-/
2424
def finRange (n : Nat) : List (Fin n) := ofFn fun i => i
2525

26-
@[simp] theorem length_finRange {n : Nat} : (List.finRange n).length = n := by
26+
@[simp, grind =] theorem length_finRange {n : Nat} : (List.finRange n).length = n := by
2727
simp [List.finRange]
2828

29-
@[simp] theorem getElem_finRange {i : Nat} (h : i < (List.finRange n).length) :
29+
@[simp, grind =] theorem getElem_finRange {i : Nat} (h : i < (List.finRange n).length) :
3030
(finRange n)[i] = Fin.cast length_finRange ⟨i, h⟩ := by
3131
simp [List.finRange]
3232

33-
@[simp] theorem finRange_zero : finRange 0 = [] := by simp [finRange]
33+
@[simp, grind =] theorem finRange_zero : finRange 0 = [] := by simp [finRange]
3434

3535
theorem finRange_succ {n} : finRange (n+1) = 0 :: (finRange n).map Fin.succ := by
3636
apply List.ext_getElem; simp; intro i; cases i <;> simp
@@ -46,6 +46,7 @@ theorem finRange_succ_last {n} :
4646
· rfl
4747
· next h => exact Fin.eq_last_of_not_lt h
4848

49+
@[grind _=_]
4950
theorem finRange_reverse {n} : (finRange n).reverse = (finRange n).map Fin.rev := by
5051
induction n with
5152
| zero => simp

src/Init/Data/Vector/FinRange.lean

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ namespace Vector
1717
/-- `finRange n` is the vector of all elements of `Fin n` in order. -/
1818
protected def finRange (n : Nat) : Vector (Fin n) n := ofFn fun i => i
1919

20-
@[simp] theorem getElem_finRange {i : Nat} (h : i < n) :
20+
@[simp, grind =] theorem getElem_finRange {i : Nat} (h : i < n) :
2121
(Vector.finRange n)[i] = ⟨i, h⟩ := by
2222
simp [Vector.finRange]
2323

@@ -39,6 +39,7 @@ theorem finRange_succ_last {n} :
3939
· simp_all
4040
omega
4141

42+
@[grind _=_]
4243
theorem finRange_reverse {n} : (Vector.finRange n).reverse = (Vector.finRange n).map Fin.rev := by
4344
ext i h
4445
simp

0 commit comments

Comments
 (0)