|
165 | 165 | end primitive_element_inf
|
166 | 166 |
|
167 | 167 | variables (F E : Type*) [field F] [field E]
|
168 |
| -variables [algebra F E] [finite_dimensional F E] [is_separable F E] |
| 168 | +variables [algebra F E] [finite_dimensional F E] |
| 169 | + |
| 170 | +section separable_assumption |
| 171 | + |
| 172 | +variable [is_separable F E] |
169 | 173 |
|
170 | 174 | /-- Primitive element theorem: a finite separable field extension `E` of `F` has a
|
171 | 175 | primitive element, i.e. there is an `α ∈ E` such that `F⟮α⟯ = (⊤ : subalgebra F E)`.-/
|
@@ -195,17 +199,62 @@ let α := (exists_primitive_element F E).some,
|
195 | 199 | have e : F⟮α⟯ = ⊤ := (exists_primitive_element F E).some_spec,
|
196 | 200 | pb.map ((intermediate_field.equiv_of_eq e).trans intermediate_field.top_equiv)
|
197 | 201 |
|
198 |
| -/-- If `E / F` is a finite separable extension, then there are finitely many |
199 |
| -embeddings from `E` into `K` that fix `F`, corresponding to the number of |
200 |
| -conjugate roots of the primitive element generating `F`. -/ |
201 |
| -instance {K : Type*} [field K] [algebra F K] : fintype (E →ₐ[F] K) := |
202 |
| -power_basis.alg_hom.fintype (power_basis_of_finite_of_separable F E) |
| 202 | +end separable_assumption |
| 203 | + |
| 204 | +/-- A technical finiteness result. -/ |
| 205 | +noncomputable def fintype.subtype_prod {E : Type*} {X : set E} (hX : X.finite) {L : Type*} |
| 206 | + (F : E → multiset L) : fintype (Π x : X, {l : L // l ∈ F x}) := |
| 207 | +by { classical, letI : fintype X := set.finite.fintype hX, exact pi.fintype} |
| 208 | + |
| 209 | +variables (K : Type*) [field K] [algebra F K] |
| 210 | + |
| 211 | +variables (E F) |
| 212 | + |
| 213 | +/-- Function from Hom_K(E,L) to pi type Π (x : basis), roots of min poly of x -/ |
| 214 | +def roots_of_min_poly_pi_type (φ : E →ₐ[F] K) |
| 215 | + (x : set.range (finite_dimensional.fin_basis F E : _ → E)) : |
| 216 | + {l : K // l ∈ (((minpoly F x.1).map (algebra_map F K)).roots : multiset K)} := |
| 217 | +⟨φ x, begin |
| 218 | + rw [polynomial.mem_roots_map (minpoly.ne_zero_of_finite_field_extension F x.val), |
| 219 | + ← polynomial.alg_hom_eval₂_algebra_map, ← φ.map_zero], |
| 220 | + exact congr_arg φ (minpoly.aeval F (x : E)), |
| 221 | +end⟩ |
| 222 | + |
| 223 | +lemma aux_inj_roots_of_min_poly : function.injective (roots_of_min_poly_pi_type F E K) := |
| 224 | +begin |
| 225 | + intros f g h, |
| 226 | + suffices : (f : E →ₗ[F] K) = g, |
| 227 | + { rw linear_map.ext_iff at this, |
| 228 | + ext x, exact this x }, |
| 229 | + rw function.funext_iff at h, |
| 230 | + apply linear_map.ext_on (finite_dimensional.fin_basis F E).span_eq, |
| 231 | + rintro e he, |
| 232 | + have := (h ⟨e, he⟩), |
| 233 | + apply_fun subtype.val at this, |
| 234 | + exact this, |
| 235 | +end |
| 236 | + |
| 237 | +/-- Given field extensions `E/F` and `K/F`, with `E/F` finite, there are finitely many `F`-algebra |
| 238 | + homomorphisms `E →ₐ[K] K`. -/ |
| 239 | +noncomputable instance : fintype (E →ₐ[F] K) := |
| 240 | +let n := finite_dimensional.finrank F E in |
| 241 | +begin |
| 242 | + let B : basis (fin n) F E := finite_dimensional.fin_basis F E, |
| 243 | + let X := set.range (B : fin n → E), |
| 244 | + have hX : X.finite := set.finite_range ⇑B, |
| 245 | + refine @fintype.of_injective _ _ |
| 246 | + (fintype.subtype_prod hX (λ e, ((minpoly F e).map (algebra_map F K)).roots)) _ |
| 247 | + (aux_inj_roots_of_min_poly F E K), |
| 248 | +end |
203 | 249 |
|
204 | 250 | end field
|
205 | 251 |
|
206 | 252 | @[simp] lemma alg_hom.card (F E K : Type*) [field F] [field E] [field K] [is_alg_closed K]
|
207 | 253 | [algebra F E] [finite_dimensional F E] [is_separable F E] [algebra F K] :
|
208 | 254 | fintype.card (E →ₐ[F] K) = finrank F E :=
|
209 |
| -(alg_hom.card_of_power_basis (field.power_basis_of_finite_of_separable F E) |
| 255 | +begin |
| 256 | + convert (alg_hom.card_of_power_basis (field.power_basis_of_finite_of_separable F E) |
210 | 257 | (is_separable.separable _ _) (is_alg_closed.splits_codomain _)).trans
|
211 |
| - (power_basis.finrank _).symm |
| 258 | + (power_basis.finrank _).symm, |
| 259 | + apply_instance, |
| 260 | +end |
0 commit comments