@@ -4,8 +4,8 @@ Released under Apache 2.0 license as described in the file LICENSE.
4
4
Authors: Andrew Yang
5
5
-/
6
6
import Mathlib.RingTheory.RootsOfUnity.PrimitiveRoots
7
- import Mathlib.RingTheory.AdjoinRoot
8
7
import Mathlib.FieldTheory.Galois.Basic
8
+ import Mathlib.FieldTheory.KummerPolynomial
9
9
import Mathlib.LinearAlgebra.Eigenspace.Minpoly
10
10
import Mathlib.RingTheory.Norm.Basic
11
11
/-!
@@ -31,8 +31,6 @@ then isomorphic to `Multiplicative (ZMod n)` whose inverse is given by
31
31
32
32
## Other results
33
33
Criteria for `X ^ n - C a` to be irreducible is given:
34
- - `X_pow_sub_C_irreducible_iff_of_prime`:
35
- For `n = p` a prime, `X ^ n - C a` is irreducible iff `a` is not a `p`-power.
36
34
- `X_pow_sub_C_irreducible_iff_of_prime_pow`:
37
35
For `n = p ^ k` an odd prime power, `X ^ n - C a` is irreducible iff `a` is not a `p`-power.
38
36
- `X_pow_sub_C_irreducible_iff_forall_prime_of_odd`:
@@ -51,26 +49,6 @@ open Polynomial IntermediateField AdjoinRoot
51
49
52
50
section Splits
53
51
54
- lemma root_X_pow_sub_C_pow (n : ℕ) (a : K) :
55
- (AdjoinRoot.root (X ^ n - C a)) ^ n = AdjoinRoot.of _ a := by
56
- rw [← sub_eq_zero, ← AdjoinRoot.eval₂_root, eval₂_sub, eval₂_C, eval₂_pow, eval₂_X]
57
-
58
- lemma root_X_pow_sub_C_ne_zero {n : ℕ} (hn : 1 < n) (a : K) :
59
- (AdjoinRoot.root (X ^ n - C a)) ≠ 0 :=
60
- mk_ne_zero_of_natDegree_lt (monic_X_pow_sub_C _ (Nat.not_eq_zero_of_lt hn))
61
- X_ne_zero <| by rwa [natDegree_X_pow_sub_C, natDegree_X]
62
-
63
- lemma root_X_pow_sub_C_ne_zero' {n : ℕ} {a : K} (hn : 0 < n) (ha : a ≠ 0 ) :
64
- (AdjoinRoot.root (X ^ n - C a)) ≠ 0 := by
65
- obtain (rfl|hn) := (Nat.succ_le_iff.mpr hn).eq_or_lt
66
- · rw [pow_one]
67
- intro e
68
- refine mk_ne_zero_of_natDegree_lt (monic_X_sub_C a) (C_ne_zero.mpr ha) (by simp) ?_
69
- trans AdjoinRoot.mk (X - C a) (X - (X - C a))
70
- · rw [sub_sub_cancel]
71
- · rw [map_sub, mk_self, sub_zero, mk_X, e]
72
- · exact root_X_pow_sub_C_ne_zero hn a
73
-
74
52
theorem X_pow_sub_C_splits_of_isPrimitiveRoot
75
53
{n : ℕ} {ζ : K} (hζ : IsPrimitiveRoot ζ n) {α a : K} (e : α ^ n = a) :
76
54
(X ^ n - C a).Splits (RingHom.id _) := by
@@ -105,85 +83,6 @@ end Splits
105
83
106
84
section Irreducible
107
85
108
- lemma ne_zero_of_irreducible_X_pow_sub_C {n : ℕ} {a : K} (H : Irreducible (X ^ n - C a)) :
109
- n ≠ 0 := by
110
- rintro rfl
111
- rw [pow_zero, ← C.map_one, ← map_sub] at H
112
- exact not_irreducible_C _ H
113
-
114
- lemma ne_zero_of_irreducible_X_pow_sub_C' {n : ℕ} (hn : n ≠ 1 ) {a : K}
115
- (H : Irreducible (X ^ n - C a)) : a ≠ 0 := by
116
- rintro rfl
117
- rw [map_zero, sub_zero] at H
118
- exact not_irreducible_pow hn H
119
-
120
- lemma root_X_pow_sub_C_eq_zero_iff {n : ℕ} {a : K} (H : Irreducible (X ^ n - C a)) :
121
- (AdjoinRoot.root (X ^ n - C a)) = 0 ↔ a = 0 := by
122
- have hn := Nat.pos_iff_ne_zero.mpr (ne_zero_of_irreducible_X_pow_sub_C H)
123
- refine ⟨not_imp_not.mp (root_X_pow_sub_C_ne_zero' hn), ?_⟩
124
- rintro rfl
125
- have := not_imp_not.mp (fun hn ↦ ne_zero_of_irreducible_X_pow_sub_C' hn H) rfl
126
- rw [this, pow_one, map_zero, sub_zero, ← mk_X, mk_self]
127
-
128
- lemma root_X_pow_sub_C_ne_zero_iff {n : ℕ} {a : K} (H : Irreducible (X ^ n - C a)) :
129
- (AdjoinRoot.root (X ^ n - C a)) ≠ 0 ↔ a ≠ 0 :=
130
- (root_X_pow_sub_C_eq_zero_iff H).not
131
-
132
- theorem pow_ne_of_irreducible_X_pow_sub_C {n : ℕ} {a : K}
133
- (H : Irreducible (X ^ n - C a)) {m : ℕ} (hm : m ∣ n) (hm' : m ≠ 1 ) (b : K) : b ^ m ≠ a := by
134
- have hn : n ≠ 0 := fun e ↦ not_irreducible_C
135
- (1 - a) (by simpa only [e, pow_zero, ← C.map_one, ← map_sub] using H)
136
- obtain ⟨k, rfl⟩ := hm
137
- rintro rfl
138
- obtain ⟨q, hq⟩ := sub_dvd_pow_sub_pow (X ^ k) (C b) m
139
- rw [mul_comm, pow_mul, map_pow, hq] at H
140
- have : degree q = 0 := by
141
- simpa [isUnit_iff_degree_eq_zero, degree_X_pow_sub_C,
142
- Nat.pos_iff_ne_zero, (mul_ne_zero_iff.mp hn).2 ] using H.2 _ q rfl
143
- apply_fun degree at hq
144
- simp only [this, ← pow_mul, mul_comm k m, degree_X_pow_sub_C, Nat.pos_iff_ne_zero.mpr hn,
145
- Nat.pos_iff_ne_zero.mpr (mul_ne_zero_iff.mp hn).2 , degree_mul, ← map_pow, add_zero,
146
- Nat.cast_injective.eq_iff] at hq
147
- exact hm' ((mul_eq_right₀ (mul_ne_zero_iff.mp hn).2 ).mp hq)
148
-
149
- /--Let `p` be a prime number. Let `K` be a field.
150
- Let `t ∈ K` be an element which does not have a `p`th root in `K`.
151
- Then the polynomial `x ^ p - t` is irreducible over `K`.-/
152
- @[stacks 09HF "We proved the result without the condition that `K` is char p in 09HF."]
153
- theorem X_pow_sub_C_irreducible_of_prime {p : ℕ} (hp : p.Prime) {a : K} (ha : ∀ b : K, b ^ p ≠ a) :
154
- Irreducible (X ^ p - C a) := by
155
- -- First of all, We may find an irreducible factor `g` of `X ^ p - C a`.
156
- have : ¬ IsUnit (X ^ p - C a) := by
157
- rw [Polynomial.isUnit_iff_degree_eq_zero, degree_X_pow_sub_C hp.pos, Nat.cast_eq_zero]
158
- exact hp.ne_zero
159
- have ⟨g, hg, hg'⟩ := WfDvdMonoid.exists_irreducible_factor this (X_pow_sub_C_ne_zero hp.pos a)
160
- -- It suffices to show that `deg g = p`.
161
- suffices natDegree g = p from (associated_of_dvd_of_natDegree_le hg'
162
- (X_pow_sub_C_ne_zero hp.pos a) (this.trans natDegree_X_pow_sub_C.symm).ge).irreducible hg
163
- -- Suppose `deg g ≠ p`.
164
- by_contra h
165
- have : Fact (Irreducible g) := ⟨hg⟩
166
- -- Let `r` be a root of `g`, then `N_K(r) ^ p = N_K(r ^ p) = N_K(a) = a ^ (deg g)`.
167
- have key : (Algebra.norm K (AdjoinRoot.root g)) ^ p = a ^ g.natDegree := by
168
- have := eval₂_eq_zero_of_dvd_of_eval₂_eq_zero _ _ hg' (AdjoinRoot.eval₂_root g)
169
- rw [eval₂_sub, eval₂_pow, eval₂_C, eval₂_X, sub_eq_zero] at this
170
- rw [← map_pow, this, ← AdjoinRoot.algebraMap_eq, Algebra.norm_algebraMap,
171
- ← finrank_top', ← IntermediateField.adjoin_root_eq_top g,
172
- IntermediateField.adjoin.finrank,
173
- AdjoinRoot.minpoly_root hg.ne_zero, natDegree_mul_C]
174
- · simpa using hg.ne_zero
175
- · exact AdjoinRoot.isIntegral_root hg.ne_zero
176
- -- Since `a ^ (deg g)` is a `p`-power, and `p` is coprime to `deg g`, we conclude that `a` is
177
- -- also a `p`-power, contradicting the hypothesis
178
- have : p.Coprime (natDegree g) := hp.coprime_iff_not_dvd.mpr (fun e ↦ h (((natDegree_le_of_dvd hg'
179
- (X_pow_sub_C_ne_zero hp.pos a)).trans_eq natDegree_X_pow_sub_C).antisymm (Nat.le_of_dvd
180
- (natDegree_pos_iff_degree_pos.mpr <| Polynomial.degree_pos_of_irreducible hg) e)))
181
- exact ha _ ((pow_mem_range_pow_of_coprime this.symm a).mp ⟨_, key⟩).choose_spec
182
-
183
- theorem X_pow_sub_C_irreducible_iff_of_prime {p : ℕ} (hp : p.Prime) {a : K} :
184
- Irreducible (X ^ p - C a) ↔ ∀ b, b ^ p ≠ a :=
185
- ⟨(pow_ne_of_irreducible_X_pow_sub_C · dvd_rfl hp.ne_one), X_pow_sub_C_irreducible_of_prime hp⟩
186
-
187
86
theorem X_pow_mul_sub_C_irreducible
188
87
{n m : ℕ} {a : K} (hm : Irreducible (X ^ m - C a))
189
88
(hn : ∀ (E : Type u) [Field E] [Algebra K E] (x : E) (_ : minpoly K x = X ^ m - C a),
0 commit comments