Skip to content

Commit 4ec5d95

Browse files
committed
chore(Logic/Equiv/Fin/Rotate): generalize from Fin (n + 1) to Fin n (#37338)
We can infer `NeZero n` if we already have `i : Fin n`.
1 parent cef0fc1 commit 4ec5d95

File tree

2 files changed

+27
-16
lines changed

2 files changed

+27
-16
lines changed

Mathlib/Geometry/Polygon/Basic.lean

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ theorem HasNondegenerateVertices.hasNondegenerateEdges [NeZero n] [Nontrivial R]
8484
(h : poly.HasNondegenerateVertices R) : poly.HasNondegenerateEdges := by
8585
obtain ⟨m, rfl⟩ := Nat.exists_eq_succ_of_ne_zero (NeZero.ne n)
8686
intro i
87-
simp only [finRotate_succ_apply]
8887
simpa using (h i).injective.ne (by decide : (0 : Fin 3) ≠ 1)
8988

9089
theorem HasNondegenerateVertices.three_le [NeZero n] [Nontrivial R] {poly : Polygon P n}

Mathlib/Logic/Equiv/Fin/Rotate.lean

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -64,27 +64,34 @@ theorem Fin.snoc_eq_cons_rotate {α : Type*} (v : Fin n → α) (a : α) :
6464
theorem finRotate_one : finRotate 1 = Equiv.refl _ :=
6565
Subsingleton.elim _ _
6666

67-
@[simp] theorem finRotate_succ_apply (i : Fin (n + 1)) : finRotate (n + 1) i = i + 1 := by
68-
cases n
69-
· exact @Subsingleton.elim (Fin 1) _ _ _
70-
obtain rfl | h := Fin.eq_or_lt_of_le i.le_last
71-
· simp [finRotate_last]
72-
· cases i
73-
simp only [Fin.lt_def, Fin.val_last] at h
74-
simp [finRotate_of_lt h, Fin.add_def, Nat.mod_eq_of_lt (Nat.succ_lt_succ h)]
67+
@[simp]
68+
theorem finRotate_apply (i : Fin n) : haveI := i.neZero; finRotate n i = i + 1 := by
69+
match n with
70+
| 0 => exact i.elim0
71+
| 1 => exact @Subsingleton.elim (Fin 1) _ _ _
72+
| n + 2 =>
73+
obtain rfl | h := Fin.eq_or_lt_of_le i.le_last
74+
· simp [finRotate_last]
75+
· cases i
76+
simp only [Fin.lt_def, Fin.val_last] at h
77+
simp [finRotate_of_lt h, Fin.add_def, Nat.mod_eq_of_lt (Nat.succ_lt_succ h)]
78+
79+
@[deprecated finRotate_apply (since := "2026-03-29")]
80+
theorem finRotate_succ_apply (i : Fin (n + 1)) : finRotate (n + 1) i = i + 1 := by
81+
simp
7582

7683
theorem finRotate_apply_zero : finRotate n.succ 0 = 1 := by
7784
simp
7885

7986
theorem coe_finRotate_of_ne_last {i : Fin n.succ} (h : i ≠ Fin.last n) :
8087
(finRotate (n + 1) i : ℕ) = i + 1 := by
81-
rw [finRotate_succ_apply]
88+
rw [finRotate_apply]
8289
have : (i : ℕ) < n := Fin.val_lt_last h
8390
exact Fin.val_add_one_of_lt this
8491

8592
theorem coe_finRotate (i : Fin n.succ) :
8693
(finRotate n.succ i : ℕ) = if i = Fin.last n then (0 : ℕ) else i + 1 := by
87-
rw [finRotate_succ_apply, Fin.val_add_one i]
94+
rw [finRotate_apply, Fin.val_add_one i]
8895

8996
theorem lt_finRotate_iff_ne_last (i : Fin (n + 1)) :
9097
i < finRotate _ i ↔ i ≠ Fin.last n := by
@@ -95,14 +102,19 @@ theorem lt_finRotate_iff_ne_neg_one [NeZero n] (i : Fin n) :
95102
obtain ⟨n, rfl⟩ := exists_eq_succ_of_ne_zero (NeZero.ne n)
96103
rw [lt_finRotate_iff_ne_last, ne_eq, not_iff_not, ← Fin.neg_last, neg_neg]
97104

98-
@[simp] lemma finRotate_succ_symm_apply [NeZero n] (i : Fin n) : (finRotate _).symm i = i - 1 := by
99-
obtain ⟨n, rfl⟩ := exists_eq_succ_of_ne_zero (NeZero.ne n)
105+
@[simp]
106+
lemma finRotate_symm_apply (i : Fin n) : haveI := i.neZero; (finRotate _).symm i = i - 1 := by
107+
obtain ⟨n, rfl⟩ := exists_eq_succ_of_ne_zero i.pos.ne'
100108
apply (finRotate n.succ).symm_apply_eq.mpr
101-
rw [finRotate_succ_apply, sub_add_cancel]
109+
rw [finRotate_apply, sub_add_cancel]
110+
111+
@[deprecated finRotate_symm_apply (since := "2026-03-29")]
112+
lemma finRotate_succ_symm_apply [NeZero n] (i : Fin n) : (finRotate _).symm i = i - 1 := by
113+
simp
102114

103115
lemma coe_finRotate_symm_of_ne_zero [NeZero n] {i : Fin n} (hi : i ≠ 0) :
104116
((finRotate _).symm i : ℕ) = i - 1 := by
105-
rwa [finRotate_succ_symm_apply, Fin.val_sub_one_of_ne_zero]
117+
rwa [finRotate_symm_apply, Fin.val_sub_one_of_ne_zero]
106118

107119
theorem finRotate_symm_lt_iff_ne_zero [NeZero n] (i : Fin n) :
108120
(finRotate _).symm i < i ↔ i ≠ 0 := by
@@ -128,5 +140,5 @@ lemma finCycle_eq_finRotate_iterate {k : Fin n} : finCycle k = (finRotate n)^[k.
128140
| zero => simp
129141
| succ k ih =>
130142
rw [Fin.val_eq_val, Fin.val_castSucc] at ih
131-
rw [Fin.val_succ, Function.iterate_succ', Function.comp_apply, ← ih, finRotate_succ_apply,
143+
rw [Fin.val_succ, Function.iterate_succ', Function.comp_apply, ← ih, finRotate_apply,
132144
finCycle_apply, finCycle_apply, add_assoc, Fin.coeSucc_eq_succ]

0 commit comments

Comments
 (0)