@@ -121,37 +121,23 @@ lemma map_frobenius_poly.key₁ (n j : ℕ) (hj : j < p ^ (n)) :
121
121
p ^ (n - v p ⟨j + 1 , j.succ_pos⟩) ∣ (p ^ n).choose (j + 1 ) :=
122
122
begin
123
123
apply multiplicity.pow_dvd_of_le_multiplicity,
124
- have aux : (multiplicity p ((p ^ n).choose (j + 1 ))).dom,
125
- { rw [← multiplicity.finite_iff_dom, multiplicity.finite_nat_iff],
126
- exact ⟨hp.1 .ne_one, nat.choose_pos hj⟩, },
127
- rw [← part_enat.coe_get aux, part_enat.coe_le_coe, tsub_le_iff_left,
128
- ← part_enat.coe_le_coe, nat.cast_add, pnat_multiplicity, part_enat.coe_get,
129
- part_enat.coe_get, add_comm],
130
- exact (hp.1 .multiplicity_choose_prime_pow hj j.succ_pos).ge,
124
+ rw [hp.out.multiplicity_choose_prime_pow hj j.succ_ne_zero],
125
+ refl,
131
126
end
132
127
133
128
/-- A key numerical identity needed for the proof of `witt_vector.map_frobenius_poly`. -/
134
- lemma map_frobenius_poly.key₂ {n i j : ℕ} (hi : i < n) (hj : j < p ^ (n - i)) :
135
- j - (v p ⟨j + 1 , j.succ_pos⟩) + n =
136
- i + j + (n - i - v p ⟨j + 1 , j.succ_pos⟩) :=
129
+ lemma map_frobenius_poly.key₂ {n i j : ℕ} (hi : i ≤ n) (hj : j < p ^ (n - i)) :
130
+ j - v p ⟨j + 1 , j.succ_pos⟩ + n = i + j + (n - i - v p ⟨j + 1 , j.succ_pos⟩) :=
137
131
begin
138
132
generalize h : (v p ⟨j + 1 , j.succ_pos⟩) = m,
139
- suffices : m ≤ n - i ∧ m ≤ j,
140
- { rw [tsub_add_eq_add_tsub this.2 , add_comm i j,
141
- add_tsub_assoc_of_le (this.1 .trans (nat.sub_le n i)), add_assoc, tsub_right_comm, add_comm i,
142
- tsub_add_cancel_of_le (le_tsub_of_add_le_right ((le_tsub_iff_left hi.le).mp this.1 ))] },
143
- split,
144
- { rw [← h, ← part_enat.coe_le_coe, pnat_multiplicity, part_enat.coe_get,
145
- ← hp.1 .multiplicity_choose_prime_pow hj j.succ_pos],
146
- apply le_add_left, refl },
147
- { obtain ⟨c, hc⟩ : p ^ m ∣ j + 1 ,
148
- { rw [← h], exact multiplicity.pow_multiplicity_dvd _, },
149
- obtain ⟨c, rfl⟩ : ∃ k : ℕ, c = k + 1 ,
150
- { apply nat.exists_eq_succ_of_ne_zero, rintro rfl, simpa only using hc },
151
- rw [mul_add, mul_one] at hc,
152
- apply nat.le_of_lt_succ,
153
- calc m < p ^ m : nat.lt_pow_self hp.1 .one_lt m
154
- ... ≤ j + 1 : by { rw ← tsub_eq_of_eq_add_rev hc, apply nat.sub_le } }
133
+ rsuffices ⟨h₁, h₂⟩ : m ≤ n - i ∧ m ≤ j,
134
+ { rw [tsub_add_eq_add_tsub h₂, add_comm i j,
135
+ add_tsub_assoc_of_le (h₁.trans (nat.sub_le n i)), add_assoc, tsub_right_comm, add_comm i,
136
+ tsub_add_cancel_of_le (le_tsub_of_add_le_right ((le_tsub_iff_left hi).mp h₁))] },
137
+ have hle : p ^ m ≤ j + 1 ,
138
+ from h ▸ nat.le_of_dvd j.succ_pos (multiplicity.pow_multiplicity_dvd _),
139
+ exact ⟨(pow_le_pow_iff hp.1 .one_lt).1 (hle.trans hj),
140
+ nat.le_of_lt_succ ((nat.lt_pow_self hp.1 .one_lt m).trans_le hle)⟩
155
141
end
156
142
157
143
lemma map_frobenius_poly (n : ℕ) :
@@ -200,7 +186,7 @@ begin
200
186
{ have aux : ∀ k : ℕ, (p ^ k : ℚ) ≠ 0 ,
201
187
{ intro, apply pow_ne_zero, exact_mod_cast hp.1 .ne_zero },
202
188
simpa [aux, -one_div] with field_simps using this.symm },
203
- rw [mul_comm _ (p : ℚ), mul_assoc, mul_assoc, ← pow_add, map_frobenius_poly.key₂ p hi hj],
189
+ rw [mul_comm _ (p : ℚ), mul_assoc, mul_assoc, ← pow_add, map_frobenius_poly.key₂ p hi.le hj],
204
190
ring_exp
205
191
end
206
192
0 commit comments