@@ -306,6 +306,87 @@ begin
306
306
{ exact polynomial.map_ne_zero (minimal_polynomial.ne_zero h2) }
307
307
end
308
308
309
+ lemma of_fixed_field_eq_bot [finite_dimensional F E]
310
+ (h : intermediate_field.fixed_field (⊤ : subgroup (E ≃ₐ[F] E)) = ⊥) : is_galois F E :=
311
+ begin
312
+ rw [←is_galois_iff_is_galois_bot, ←h],
313
+ exact is_galois.of_fixed_field E (⊤ : subgroup (E ≃ₐ[F] E)),
314
+ end
315
+
316
+ lemma of_card_aut_eq_findim [finite_dimensional F E]
317
+ (h : fintype.card (E ≃ₐ[F] E) = findim F E) : is_galois F E :=
318
+ begin
319
+ apply of_fixed_field_eq_bot,
320
+ have p : 0 < findim (intermediate_field.fixed_field (⊤ : subgroup (E ≃ₐ[F] E))) E := findim_pos,
321
+ rw [←intermediate_field.findim_eq_one_iff, ←mul_left_inj' (ne_of_lt p).symm, findim_mul_findim,
322
+ ←h, one_mul, intermediate_field.findim_fixed_field_eq_card],
323
+ exact fintype.card_congr { to_fun := λ g, ⟨g, subgroup.mem_top g⟩, inv_fun := coe,
324
+ left_inv := λ g, rfl, right_inv := λ _, by { ext, refl } },
325
+ end
326
+
327
+ variables {F} {E} {p : polynomial F}
328
+
329
+ lemma of_separable_splitting_field_aux [hFE : finite_dimensional F E]
330
+ [sp : p.is_splitting_field F E] (hp : p.separable) (K : intermediate_field F E) {x : E}
331
+ (hx : x ∈ (p.map (algebra_map F E)).roots) :
332
+ fintype.card ((↑K⟮x⟯ : intermediate_field F E) →ₐ[F] E) =
333
+ fintype.card (K →ₐ[F] E) * findim K K⟮x⟯ :=
334
+ begin
335
+ have h : is_integral K x := is_integral_of_is_scalar_tower x (is_integral_of_noetherian hFE x),
336
+ have h1 : p ≠ 0 := λ hp, by rwa [hp, polynomial.map_zero, polynomial.roots_zero] at hx,
337
+ have h2 : (minimal_polynomial h) ∣ p.map (algebra_map F K),
338
+ { apply minimal_polynomial.dvd,
339
+ rw [polynomial.aeval_def, polynomial.eval₂_map, ←polynomial.eval_map],
340
+ exact (polynomial.mem_roots (polynomial.map_ne_zero h1)).mp hx },
341
+ let key_equiv : ((↑K⟮x⟯ : intermediate_field F E) →ₐ[F] E) ≃ Σ (f : K →ₐ[F] E),
342
+ @alg_hom K K⟮x⟯ E _ _ _ _ (ring_hom.to_algebra f) :=
343
+ equiv.trans (alg_equiv.arrow_congr (intermediate_field.lift2_alg_equiv K⟮x⟯) (alg_equiv.refl))
344
+ alg_hom_equiv_sigma,
345
+ haveI : Π (f : K →ₐ[F] E), fintype (@alg_hom K K⟮x⟯ E _ _ _ _ (ring_hom.to_algebra f)) := λ f, by
346
+ { apply fintype.of_injective (sigma.mk f) (λ _ _ H, eq_of_heq ((sigma.mk.inj H).2 )),
347
+ exact fintype.of_equiv _ key_equiv },
348
+ rw [fintype.card_congr key_equiv, fintype.card_sigma, intermediate_field.adjoin.findim h],
349
+ apply finset.sum_const_nat,
350
+ intros f hf,
351
+ rw ← @intermediate_field.card_alg_hom_adjoin_integral K _ E _ _ x E _ (ring_hom.to_algebra f) h,
352
+ { apply fintype.card_congr, refl },
353
+ { exact polynomial.separable.of_dvd ((polynomial.separable_map (algebra_map F K)).mpr hp) h2 },
354
+ { refine polynomial.splits_of_splits_of_dvd _ (polynomial.map_ne_zero h1) _ h2,
355
+ rw [polynomial.splits_map_iff, ←is_scalar_tower.algebra_map_eq],
356
+ exact sp.splits },
357
+ end
358
+
359
+ lemma of_separable_splitting_field [sp : p.is_splitting_field F E] (hp : p.separable) :
360
+ is_galois F E :=
361
+ begin
362
+ haveI hFE : finite_dimensional F E := polynomial.is_splitting_field.finite_dimensional E p,
363
+ let s := (p.map (algebra_map F E)).roots.to_finset,
364
+ have adjoin_root := intermediate_field.ext (subalgebra.ext_iff.mp (eq.trans (top_le_iff.mp
365
+ (eq.trans_le sp.adjoin_roots.symm (intermediate_field.algebra_adjoin_le_adjoin F ↑s)))
366
+ intermediate_field.top_to_subalgebra.symm)),
367
+ let P : intermediate_field F E → Prop := λ K, fintype.card (K →ₐ[F] E) = findim F K,
368
+ suffices : P (intermediate_field.adjoin F ↑s),
369
+ { rw adjoin_root at this ,
370
+ apply of_card_aut_eq_findim,
371
+ rw ← eq.trans this (linear_equiv.findim_eq intermediate_field.top_equiv.to_linear_equiv),
372
+ exact fintype.card_congr (equiv.trans (alg_equiv_equiv_alg_hom F E)
373
+ (alg_equiv.arrow_congr intermediate_field.top_equiv.symm alg_equiv.refl)) },
374
+ apply intermediate_field.induction_on_adjoin_finset s P,
375
+ { have key := intermediate_field.card_alg_hom_adjoin_integral F
376
+ (show is_integral F (0 : E), by exact is_integral_zero),
377
+ rw [minimal_polynomial.zero, polynomial.nat_degree_X] at key,
378
+ specialize key polynomial.separable_X (polynomial.splits_X (algebra_map F E)),
379
+ rw [←@subalgebra.findim_bot F E _ _ _, ←intermediate_field.bot_to_subalgebra] at key,
380
+ refine eq.trans _ key,
381
+ apply fintype.card_congr,
382
+ rw intermediate_field.adjoin_zero },
383
+ intros K x hx hK,
384
+ simp only [P] at *,
385
+ rw [of_separable_splitting_field_aux hp K (multiset.mem_to_finset.mp hx),
386
+ hK, findim_mul_findim],
387
+ exact (linear_equiv.findim_eq (intermediate_field.lift2_alg_equiv K⟮x⟯).to_linear_equiv).symm,
388
+ end
389
+
309
390
end is_galois
310
391
311
392
end galois_equivalent_definitions
0 commit comments