@@ -199,67 +199,95 @@ protected theorem Algebra.isAlgebraic_iff_isIntegral :
199
199
200
200
end Field
201
201
202
- namespace Algebra
202
+ section
203
203
204
204
variable {K : Type _} {L : Type _} {R : Type _} {S : Type _} {A : Type _}
205
205
206
- variable [Field K] [Field L] [CommRing R] [CommRing S] [CommRing A]
206
+ section Ring
207
207
208
- variable [Algebra K L] [Algebra L A] [Algebra K A] [IsScalarTower K L A]
208
+ section CommRing
209
209
210
- variable [Algebra R S ] [Algebra S A ] [Algebra R A] [IsScalarTower R S A]
210
+ variable [CommRing R ] [CommRing S ] [Ring A]
211
211
212
- /-- If L is an algebraic field extension of K and A is an algebraic algebra over L,
213
- then A is algebraic over K. -/
214
- theorem isAlgebraic_trans (L_alg : IsAlgebraic K L) (A_alg : IsAlgebraic L A) :
215
- IsAlgebraic K A := by
216
- simp only [IsAlgebraic, isAlgebraic_iff_isIntegral] at L_alg A_alg ⊢
217
- exact isIntegral_trans L_alg A_alg
218
- #align algebra.is_algebraic_trans Algebra.isAlgebraic_trans
219
-
220
- variable (K L)
212
+ variable [Algebra R S] [Algebra S A] [Algebra R A] [IsScalarTower R S A]
221
213
222
214
/-- If x is algebraic over R, then x is algebraic over S when S is an extension of R,
223
215
and the map from `R` to `S` is injective. -/
224
- theorem _root_. isAlgebraic_of_larger_base_of_injective
216
+ theorem isAlgebraic_of_larger_base_of_injective
225
217
(hinj : Function.Injective (algebraMap R S)) {x : A}
226
- (A_alg : _root_. IsAlgebraic R x) : _root_. IsAlgebraic S x :=
218
+ (A_alg : IsAlgebraic R x) : IsAlgebraic S x :=
227
219
let ⟨p, hp₁, hp₂⟩ := A_alg
228
220
⟨p.map (algebraMap _ _), by
229
221
rwa [Ne.def, ← degree_eq_bot, degree_map_eq_of_injective hinj, degree_eq_bot], by simpa⟩
230
222
#align is_algebraic_of_larger_base_of_injective isAlgebraic_of_larger_base_of_injective
231
223
232
224
/-- If A is an algebraic algebra over R, then A is algebraic over S when S is an extension of R,
233
225
and the map from `R` to `S` is injective. -/
234
- theorem isAlgebraic_of_larger_base_of_injective (hinj : Function.Injective (algebraMap R S))
226
+ theorem Algebra. isAlgebraic_of_larger_base_of_injective (hinj : Function.Injective (algebraMap R S))
235
227
(A_alg : IsAlgebraic R A) : IsAlgebraic S A := fun x =>
236
228
_root_.isAlgebraic_of_larger_base_of_injective hinj (A_alg x)
237
229
#align algebra.is_algebraic_of_larger_base_of_injective Algebra.isAlgebraic_of_larger_base_of_injective
238
230
231
+ end CommRing
232
+
233
+ section Field
234
+
235
+ variable [Field K] [Field L] [Ring A]
236
+
237
+ variable [Algebra K L] [Algebra L A] [Algebra K A] [IsScalarTower K L A]
238
+
239
+ variable (L)
240
+
239
241
/-- If x is algebraic over K, then x is algebraic over L when L is an extension of K -/
240
- theorem _root_. isAlgebraic_of_larger_base {x : A} (A_alg : _root_. IsAlgebraic K x) :
241
- _root_. IsAlgebraic L x :=
242
- _root_. isAlgebraic_of_larger_base_of_injective (algebraMap K L).injective A_alg
242
+ theorem isAlgebraic_of_larger_base {x : A} (A_alg : IsAlgebraic K x) :
243
+ IsAlgebraic L x :=
244
+ isAlgebraic_of_larger_base_of_injective (algebraMap K L).injective A_alg
243
245
#align is_algebraic_of_larger_base isAlgebraic_of_larger_base
244
246
245
247
/-- If A is an algebraic algebra over K, then A is algebraic over L when L is an extension of K -/
246
- theorem isAlgebraic_of_larger_base (A_alg : IsAlgebraic K A) : IsAlgebraic L A :=
248
+ theorem Algebra. isAlgebraic_of_larger_base (A_alg : IsAlgebraic K A) : IsAlgebraic L A :=
247
249
isAlgebraic_of_larger_base_of_injective (algebraMap K L).injective A_alg
248
250
#align algebra.is_algebraic_of_larger_base Algebra.isAlgebraic_of_larger_base
249
251
250
- /-- A field extension is integral if it is finite. -/
251
- theorem isIntegral_of_finite [FiniteDimensional K L] : Algebra.IsIntegral K L := fun x =>
252
- isIntegral_of_submodule_noetherian ⊤ (IsNoetherian.iff_fg.2 inferInstance) x Algebra.mem_top
253
- #align algebra.is_integral_of_finite Algebra.isIntegral_of_finite
252
+ variable (K)
253
+
254
+ theorem isAlgebraic_of_finite (e : A) [FiniteDimensional K A] : IsAlgebraic K e :=
255
+ isAlgebraic_iff_isIntegral.mpr (isIntegral_of_finite K e)
256
+
257
+ variable (A)
254
258
255
259
/-- A field extension is algebraic if it is finite. -/
256
- theorem isAlgebraic_of_finite [FiniteDimensional K L ] : IsAlgebraic K L :=
257
- Algebra.isAlgebraic_iff_isIntegral.mpr (isIntegral_of_finite K L )
260
+ theorem Algebra. isAlgebraic_of_finite [FiniteDimensional K A ] : IsAlgebraic K A :=
261
+ Algebra.isAlgebraic_iff_isIntegral.mpr (isIntegral_of_finite K A )
258
262
#align algebra.is_algebraic_of_finite Algebra.isAlgebraic_of_finite
259
263
260
- variable {K L}
264
+ end Field
265
+
266
+ end Ring
267
+
268
+ section CommRing
269
+
270
+ variable [Field K] [Field L] [CommRing A]
271
+
272
+ variable [Algebra K L] [Algebra L A] [Algebra K A] [IsScalarTower K L A]
261
273
262
- theorem IsAlgebraic.algHom_bijective (ha : Algebra.IsAlgebraic K L) (f : L →ₐ[K] L) :
274
+ /-- If L is an algebraic field extension of K and A is an algebraic algebra over L,
275
+ then A is algebraic over K. -/
276
+ theorem Algebra.isAlgebraic_trans (L_alg : IsAlgebraic K L) (A_alg : IsAlgebraic L A) :
277
+ IsAlgebraic K A := by
278
+ simp only [IsAlgebraic, isAlgebraic_iff_isIntegral] at L_alg A_alg ⊢
279
+ exact isIntegral_trans L_alg A_alg
280
+ #align algebra.is_algebraic_trans Algebra.isAlgebraic_trans
281
+
282
+ end CommRing
283
+
284
+ section Field
285
+
286
+ variable [Field K] [Field L]
287
+
288
+ variable [Algebra K L]
289
+
290
+ theorem Algebra.IsAlgebraic.algHom_bijective (ha : Algebra.IsAlgebraic K L) (f : L →ₐ[K] L) :
263
291
Function.Bijective f := by
264
292
refine' ⟨f.toRingHom.injective, fun b => _⟩
265
293
obtain ⟨p, hp, he⟩ := ha b
@@ -271,15 +299,15 @@ theorem IsAlgebraic.algHom_bijective (ha : Algebra.IsAlgebraic K L) (f : L →
271
299
exact ⟨a, Subtype.ext_iff.1 ha⟩
272
300
#align algebra.is_algebraic.alg_hom_bijective Algebra.IsAlgebraic.algHom_bijective
273
301
274
- theorem _root_. AlgHom.bijective [FiniteDimensional K L] (ϕ : L →ₐ[K] L) : Function.Bijective ϕ :=
302
+ theorem AlgHom.bijective [FiniteDimensional K L] (ϕ : L →ₐ[K] L) : Function.Bijective ϕ :=
275
303
(Algebra.isAlgebraic_of_finite K L).algHom_bijective ϕ
276
304
#align alg_hom.bijective AlgHom.bijective
277
305
278
306
variable (K L)
279
307
280
308
/-- Bijection between algebra equivalences and algebra homomorphisms -/
281
309
@[simps]
282
- noncomputable def IsAlgebraic.algEquivEquivAlgHom (ha : Algebra.IsAlgebraic K L) :
310
+ noncomputable def Algebra. IsAlgebraic.algEquivEquivAlgHom (ha : Algebra.IsAlgebraic K L) :
283
311
(L ≃ₐ[K] L) ≃* (L →ₐ[K] L) where
284
312
toFun ϕ := ϕ.toAlgHom
285
313
invFun ϕ := AlgEquiv.ofBijective ϕ (ha.algHom_bijective ϕ)
@@ -294,12 +322,14 @@ noncomputable def IsAlgebraic.algEquivEquivAlgHom (ha : Algebra.IsAlgebraic K L)
294
322
295
323
/-- Bijection between algebra equivalences and algebra homomorphisms -/
296
324
@[reducible]
297
- noncomputable def _root_. algEquivEquivAlgHom [FiniteDimensional K L] :
325
+ noncomputable def algEquivEquivAlgHom [FiniteDimensional K L] :
298
326
(L ≃ₐ[K] L) ≃* (L →ₐ[K] L) :=
299
327
(Algebra.isAlgebraic_of_finite K L).algEquivEquivAlgHom K L
300
328
#align alg_equiv_equiv_alg_hom algEquivEquivAlgHom
301
329
302
- end Algebra
330
+ end Field
331
+
332
+ end
303
333
304
334
variable {R S : Type _} [CommRing R] [IsDomain R] [CommRing S]
305
335
0 commit comments