@@ -7,6 +7,7 @@ Authors: Riccardo Brasca
7
7
import ring_theory.eisenstein_criterion
8
8
import ring_theory.integrally_closed
9
9
import ring_theory.norm
10
+ import ring_theory.polynomial.cyclotomic.basic
10
11
11
12
/-!
12
13
# Eisenstein polynomials
@@ -194,6 +195,55 @@ end is_eisenstein_at
194
195
195
196
end polynomial
196
197
198
+ section cyclotomic
199
+
200
+ variables {p : ℕ}
201
+
202
+ local notation `𝓟 ` := submodule.span ℤ {p}
203
+
204
+ open polynomial
205
+
206
+ lemma cyclotomic_comp_X_add_one_is_eisenstein_at [hp : fact p.prime] :
207
+ ((cyclotomic p ℤ).comp (X + 1 )).is_eisenstein_at 𝓟 :=
208
+ { leading :=
209
+ begin
210
+ intro h,
211
+ rw [show (X + 1 : ℤ[X]) = X + C 1 , by simp] at h,
212
+ suffices : ((cyclotomic p ℤ).comp (X + C 1 )).monic,
213
+ { rw [monic.def.1 this , ideal.submodule_span_eq, ideal.mem_span_singleton] at h,
214
+ exact nat.prime.not_dvd_one hp.out (by exact_mod_cast h) },
215
+ refine monic.comp (cyclotomic.monic p ℤ) (monic_X_add_C 1 ) (λ h₁, _),
216
+ rw [nat_degree_X_add_C] at h₁,
217
+ exact zero_ne_one h₁.symm,
218
+ end ,
219
+ mem := λ i hi,
220
+ begin
221
+ rw [cyclotomic_eq_geom_sum hp.out, geom_sum_X_comp_X_add_one_eq_sum, ← lcoeff_apply,
222
+ linear_map.map_sum],
223
+ conv { congr, congr, skip, funext,
224
+ rw [lcoeff_apply, ← C_eq_nat_cast, ← monomial_eq_C_mul_X, coeff_monomial] },
225
+ rw [nat_degree_comp, show (X + 1 : ℤ[X]) = X + C 1 , by simp, nat_degree_X_add_C, mul_one,
226
+ nat_degree_cyclotomic, nat.totient_prime hp.out] at hi,
227
+ simp only [lt_of_lt_of_le hi (nat.sub_le _ _), int.nat_cast_eq_coe_nat, sum_ite_eq', mem_range,
228
+ if_true, ideal.submodule_span_eq, ideal.mem_span_singleton],
229
+ exact int.coe_nat_dvd.2
230
+ (nat.prime.dvd_choose_self (nat.succ_pos i) (lt_tsub_iff_right.1 hi) hp.out)
231
+ end ,
232
+ not_mem :=
233
+ begin
234
+ rw [coeff_zero_eq_eval_zero, eval_comp, cyclotomic_eq_geom_sum hp.out, eval_add, eval_X,
235
+ eval_one, zero_add, eval_geom_sum, one_geom_sum, int.nat_cast_eq_coe_nat,
236
+ ideal.submodule_span_eq, ideal.span_singleton_pow, ideal.mem_span_singleton],
237
+ intro h,
238
+ obtain ⟨k, hk⟩ := int.coe_nat_dvd.1 h,
239
+ rw [← mul_assoc, mul_one, mul_assoc] at hk,
240
+ nth_rewrite 0 [← nat.mul_one p] at hk,
241
+ rw [nat.mul_right_inj hp.out.pos] at hk,
242
+ exact nat.prime.not_dvd_one hp.out (dvd.intro k (hk.symm)),
243
+ end }
244
+
245
+ end cyclotomic
246
+
197
247
section is_integral
198
248
199
249
variables {K : Type v} {L : Type z} {p : R} [comm_ring R] [field K] [field L]
@@ -350,12 +400,12 @@ begin
350
400
have H := degree_mod_by_monic_lt Q₁ (minpoly.monic hBint),
351
401
rw [← hQ₁, ← hP] at H,
352
402
replace H:= nat.lt_iff_add_one_le.1 (lt_of_lt_of_le (lt_of_le_of_lt
353
- (nat.lt_iff_add_one_le.1 (lt_of_succ_lt_succ (mem_range.1 hj))) (lt_succ_self _))
403
+ (nat.lt_iff_add_one_le.1 (nat. lt_of_succ_lt_succ (mem_range.1 hj))) (lt_succ_self _))
354
404
(nat.lt_iff_add_one_le.1 (((nat_degree_lt_nat_degree_iff hQzero).2 H)))),
355
405
rw [add_assoc] at H,
356
406
have Hj : Q.nat_degree + 1 = j + 1 + (Q.nat_degree - j),
357
407
{ rw [← add_comm 1 , ← add_comm 1 , add_assoc, add_right_inj, ← nat.add_sub_assoc
358
- (lt_of_succ_lt_succ (mem_range.1 hj)).le, add_comm, nat.add_sub_cancel] },
408
+ (nat. lt_of_succ_lt_succ (mem_range.1 hj)).le, add_comm, nat.add_sub_cancel] },
359
409
360
410
-- By induction hypothesis we can find `g : ℕ → R` such that
361
411
-- `k ∈ range (j + 1) → Q.coeff k • B.gen ^ k = (algebra_map R L) p * g k • B.gen ^ k`-
@@ -408,7 +458,7 @@ begin
408
458
-- we didn't know were multiples of `p`, and we take the norm on both sides.
409
459
replace hQ := congr_arg (λ x, x * B.gen ^ (P.nat_degree - (j + 2 ))) hQ,
410
460
simp_rw [sum_map, add_left_embedding_apply, add_mul, sum_mul, mul_assoc] at hQ,
411
- rw [← insert_erase (mem_range.2 (tsub_pos_iff_lt.2 $ lt_of_succ_lt_succ $ mem_range.1 hj)),
461
+ rw [← insert_erase (mem_range.2 (tsub_pos_iff_lt.2 $ nat. lt_of_succ_lt_succ $ mem_range.1 hj)),
412
462
sum_insert (not_mem_erase 0 _), add_zero, sum_congr rfl hf₁, ← mul_sum, ← mul_sum,
413
463
add_assoc, ← mul_add, smul_mul_assoc, ← pow_add, smul_def] at hQ,
414
464
replace hQ := congr_arg (norm K) (eq_sub_of_add_eq hQ),
0 commit comments