@@ -3,27 +3,19 @@ Copyright (c) 2020 Kenny Lau. All rights reserved.
3
3
Released under Apache 2.0 license as described in the file LICENSE.
4
4
Authors: Kenny Lau
5
5
-/
6
- import Mathlib.Data.Nat.Prime.Defs
7
6
import Mathlib.RingTheory.AlgebraTower
8
- import Mathlib.LinearAlgebra.FiniteDimensional.Defs
9
- import Mathlib.LinearAlgebra.FreeModule.Finite.Matrix
10
- import Mathlib.RingTheory.LocalRing.Basic
7
+ import Mathlib.RingTheory.Noetherian
11
8
12
9
/-!
13
- # Tower of field extensions
10
+ # Finiteness of `IsScalarTower`
14
11
15
- In this file we prove the tower law for arbitrary extensions and finite extensions.
16
- Suppose `L ` is a field extension of `K` and `K` is a field extension of `F`.
17
- Then `[L:F] = [L:K] [K:F]` where `[E₁:E₂]` means the `E₂`-dimension of `E₁ `.
12
+ We prove that given `IsScalarTower F K A`, if `A` is finite as a module over `F` then
13
+ `A ` is finite over `K`, and
14
+ (as long as `A` is Noetherian over `F` and we have `NoZeroSMulDivisors K A`) `K` is finite over `F `.
18
15
19
- In fact we generalize it to rings and modules, where `L` is not necessarily a field,
20
- but just a free module over `K`.
16
+ In particular these conditions hold when `A`, `F`, and `K` are fields.
21
17
22
- ## Implementation notes
23
-
24
- We prove two versions, since there are two notions of dimensions: `Module.rank` which gives
25
- the dimension of an arbitrary vector space as a cardinal, and `FiniteDimensional.finrank` which
26
- gives the dimension of a finite-dimensional vector space as a natural number.
18
+ The formulas for the dimensions are given elsewhere by `FiniteDimensional.finrank_mul_finrank`.
27
19
28
20
## Tags
29
21
@@ -38,49 +30,31 @@ open Cardinal Submodule
38
30
39
31
variable (F : Type u) (K : Type v) (A : Type w)
40
32
41
- section Field
42
-
43
- variable [DivisionRing F] [DivisionRing K] [AddCommGroup A]
44
- variable [Module F K] [Module K A] [Module F A] [IsScalarTower F K A]
45
-
46
- namespace FiniteDimensional
47
-
48
- open IsNoetherian
33
+ namespace Module.Finite
49
34
35
+ variable [Ring F] [Ring K] [Module F K]
36
+ [AddCommGroup A] [Module K A] [NoZeroSMulDivisors K A]
37
+ [Module F A] [IsNoetherian F A] [IsScalarTower F K A] in
50
38
/-- In a tower of field extensions `A / K / F`, if `A / F` is finite, so is `K / F`.
51
39
52
40
(In fact, it suffices that `A` is a nontrivial ring.)
53
41
54
42
Note this cannot be an instance as Lean cannot infer `A`.
55
43
-/
56
- theorem left [Nontrivial A] [FiniteDimensional F A] : FiniteDimensional F K :=
44
+ theorem left [Nontrivial A] : Module.Finite F K :=
57
45
let ⟨x, hx⟩ := exists_ne (0 : A)
58
- FiniteDimensional .of_injective
46
+ Module.Finite .of_injective
59
47
(LinearMap.ringLmapEquivSelf K ℕ A |>.symm x |>.restrictScalars F) (smul_left_injective K hx)
60
48
61
- theorem right [hf : FiniteDimensional F A] : FiniteDimensional K A :=
49
+ variable [Semiring F] [Semiring K] [Module F K]
50
+ [AddCommMonoid A] [Module K A] [Module F A] [IsScalarTower F K A] in
51
+ theorem right [hf : Module.Finite F A] : Module.Finite K A :=
62
52
let ⟨⟨b, hb⟩⟩ := hf
63
53
⟨⟨b, Submodule.restrictScalars_injective F _ _ <| by
64
54
rw [Submodule.restrictScalars_top, eq_top_iff, ← hb, Submodule.span_le]
65
55
exact Submodule.subset_span⟩⟩
66
56
67
- theorem Subalgebra.isSimpleOrder_of_finrank_prime (F A) [Field F] [Ring A] [IsDomain A]
68
- [Algebra F A] (hp : (finrank F A).Prime) : IsSimpleOrder (Subalgebra F A) :=
69
- { toNontrivial :=
70
- ⟨⟨⊥, ⊤, fun he =>
71
- Nat.not_prime_one ((Subalgebra.bot_eq_top_iff_finrank_eq_one.1 he).subst hp)⟩⟩
72
- eq_bot_or_eq_top := fun K => by
73
- haveI : FiniteDimensional _ _ := .of_finrank_pos hp.pos
74
- letI := divisionRingOfFiniteDimensional F K
75
- refine (hp.eq_one_or_self_of_dvd _ ⟨_, (finrank_mul_finrank F K A).symm⟩).imp ?_ fun h => ?_
76
- · exact fun h' => Subalgebra.eq_bot_of_finrank_one h'
77
- · exact
78
- Algebra.toSubmodule_eq_top.1 (eq_top_of_finrank_eq <| K.finrank_toSubmodule.trans h) }
79
- -- TODO: `IntermediateField` version
80
-
81
- @[deprecated (since := "2024-01-12")]
82
- alias finrank_linear_map' := FiniteDimensional.finrank_linearMap_self
83
-
84
- end FiniteDimensional
85
-
86
- end Field
57
+ end Module.Finite
58
+
59
+ alias FiniteDimensional.left := Module.Finite.left
60
+ alias FiniteDimensional.right := Module.Finite.right
0 commit comments