@@ -208,6 +208,64 @@ begin
208
208
{ rwa [ne.def, mul_eq_zero, map_eq_zero, map_eq_zero, ←mul_eq_zero] }
209
209
end
210
210
211
+ lemma mul_splits_in_splitting_field_of_mul {p₁ q₁ p₂ q₂ : polynomial F}
212
+ (hq₁ : q₁ ≠ 0 ) (hq₂ : q₂ ≠ 0 ) (h₁ : p₁.splits (algebra_map F q₁.splitting_field))
213
+ (h₂ : p₂.splits (algebra_map F q₂.splitting_field)) :
214
+ (p₁ * p₂).splits (algebra_map F (q₁ * q₂).splitting_field) :=
215
+ begin
216
+ apply splits_mul,
217
+ { rw ← (splitting_field.lift q₁ (splits_of_splits_of_dvd _
218
+ (mul_ne_zero hq₁ hq₂) (splitting_field.splits _) (dvd_mul_right q₁ q₂))).comp_algebra_map,
219
+ exact splits_comp_of_splits _ _ h₁, },
220
+ { rw ← (splitting_field.lift q₂ (splits_of_splits_of_dvd _
221
+ (mul_ne_zero hq₁ hq₂) (splitting_field.splits _) (dvd_mul_left q₂ q₁))).comp_algebra_map,
222
+ exact splits_comp_of_splits _ _ h₂, },
223
+ end
224
+
225
+ lemma splits_in_splitting_field_of_comp (hq : q.nat_degree ≠ 0 ) :
226
+ p.splits (algebra_map F (p.comp q).splitting_field) :=
227
+ begin
228
+ let P : polynomial F → Prop := λ r, r.splits (algebra_map F (r.comp q).splitting_field),
229
+ have key1 : ∀ {r : polynomial F}, irreducible r → P r,
230
+ { intros r hr,
231
+ by_cases hr' : nat_degree r = 0 ,
232
+ { exact splits_of_nat_degree_le_one _ (le_trans (le_of_eq hr') zero_le_one) },
233
+ obtain ⟨x, hx⟩ := exists_root_of_splits _ (splitting_field.splits (r.comp q))
234
+ (λ h, hr' ((mul_eq_zero.mp (nat_degree_comp.symm.trans
235
+ (nat_degree_eq_of_degree_eq_some h))).resolve_right hq)),
236
+ rw [←aeval_def, aeval_comp] at hx,
237
+ have h_normal : normal F (r.comp q).splitting_field := splitting_field.normal (r.comp q),
238
+ have qx_int := normal.is_integral h_normal (aeval x q),
239
+ exact splits_of_splits_of_dvd _
240
+ (minpoly.ne_zero qx_int)
241
+ (normal.splits h_normal _)
242
+ (dvd_symm_of_irreducible (minpoly.irreducible qx_int) hr (minpoly.dvd F _ hx)) },
243
+ have key2 : ∀ {p₁ p₂ : polynomial F}, P p₁ → P p₂ → P (p₁ * p₂),
244
+ { intros p₁ p₂ hp₁ hp₂,
245
+ by_cases h₁ : p₁.comp q = 0 ,
246
+ { cases comp_eq_zero_iff.mp h₁ with h h,
247
+ { rw [h, zero_mul],
248
+ exact splits_zero _ },
249
+ { exact false.rec _ (hq (by rw [h.2 , nat_degree_C])) } },
250
+ by_cases h₂ : p₂.comp q = 0 ,
251
+ { cases comp_eq_zero_iff.mp h₂ with h h,
252
+ { rw [h, mul_zero],
253
+ exact splits_zero _ },
254
+ { exact false.rec _ (hq (by rw [h.2 , nat_degree_C])) } },
255
+ have key := mul_splits_in_splitting_field_of_mul h₁ h₂ hp₁ hp₂,
256
+ rwa ← mul_comp at key },
257
+ exact wf_dvd_monoid.induction_on_irreducible p (splits_zero _)
258
+ (λ _, splits_of_is_unit _) (λ _ _ _ h, key2 (key1 h)),
259
+ end
260
+
261
+ /-- The restriction homomorphism from the Galois group of a homomorphism -/
262
+ def restrict_comp (hq : q.nat_degree ≠ 0 ) : (p.comp q).gal →* p.gal :=
263
+ @restrict F _ p _ _ _ (splits_in_splitting_field_of_comp p q hq)
264
+
265
+ lemma restrict_comp_surjective (hq : q.nat_degree ≠ 0 ) :
266
+ function.surjective (restrict_comp p q hq) :=
267
+ by simp only [restrict_comp, restrict_surjective]
268
+
211
269
variables {p q}
212
270
213
271
lemma card_of_separable (hp : p.separable) :
0 commit comments