@@ -20,10 +20,6 @@ This file contains basic results on algebraic independence of a family of elemen
20
20
21
21
* [ Stacks: Transcendence ] (https://stacks.math.columbia.edu/tag/030D)
22
22
23
- ## TODO
24
- Define the transcendence degree and show it is independent of the choice of a
25
- transcendence basis.
26
-
27
23
## Tags
28
24
transcendence basis, transcendence degree, transcendence
29
25
@@ -34,9 +30,17 @@ noncomputable section
34
30
35
31
open Function Set Subalgebra MvPolynomial Algebra
36
32
37
- variable {ι ι' R K A A' : Type *} {x : ι → A}
33
+ universe u v v'
34
+
35
+ variable {ι : Type u} {ι' R : Type *} {A : Type v} {A' : Type v'} {x : ι → A}
38
36
variable [CommRing R] [CommRing A] [CommRing A'] [Algebra R A] [Algebra R A']
39
37
38
+ variable (R A) in
39
+ /-- The transcendence degree of a commutative algebra `A` over a commutative ring `R` is
40
+ defined to be the maximal cardinality of an `R`-algebraically independent set in `A`. -/
41
+ @[stacks 030G] def Algebra.trdeg : Cardinal.{v} :=
42
+ ⨆ ι : { s : Set A // AlgebraicIndepOn R _root_.id s }, Cardinal.mk ι.1
43
+
40
44
theorem algebraicIndependent_iff_ker_eq_bot :
41
45
AlgebraicIndependent R x ↔
42
46
RingHom.ker (MvPolynomial.aeval x : MvPolynomial ι R →ₐ[R] A).toRingHom = ⊥ :=
@@ -47,6 +51,9 @@ theorem algebraicIndependent_empty_type_iff [IsEmpty ι] :
47
51
AlgebraicIndependent R x ↔ Injective (algebraMap R A) := by
48
52
rw [algebraicIndependent_iff_injective_aeval, MvPolynomial.aeval_injective_iff_of_isEmpty]
49
53
54
+ instance [FaithfulSMul R A] : Nonempty { s : Set A // AlgebraicIndepOn R id s } :=
55
+ ⟨∅, algebraicIndependent_empty_type_iff.mpr <| FaithfulSMul.algebraMap_injective R A⟩
56
+
50
57
namespace AlgebraicIndependent
51
58
52
59
variable (hx : AlgebraicIndependent R x)
@@ -114,6 +121,14 @@ theorem of_aeval {f : ι → MvPolynomial ι R}
114
121
115
122
end AlgebraicIndependent
116
123
124
+ theorem isEmpty_algebraicIndependent (h : ¬ Injective (algebraMap R A)) :
125
+ IsEmpty { s : Set A // AlgebraicIndepOn R id s } where
126
+ false s := h s.2 .algebraMap_injective
127
+
128
+ theorem trdeg_eq_zero_of_not_injective (h : ¬ Injective (algebraMap R A)) : trdeg R A = 0 := by
129
+ have := isEmpty_algebraicIndependent h
130
+ rw [trdeg, ciSup_of_empty, bot_eq_zero]
131
+
117
132
theorem MvPolynomial.algebraicIndependent_X (σ R : Type *) [CommRing R] :
118
133
AlgebraicIndependent R (X (R := R) (σ := σ)) := by
119
134
rw [AlgebraicIndependent, aeval_X_left]
@@ -126,9 +141,30 @@ theorem AlgHom.algebraicIndependent_iff (f : A →ₐ[R] A') (hf : Injective f)
126
141
⟨fun h => h.of_comp f, fun h => h.map hf.injOn⟩
127
142
128
143
@[nontriviality]
129
- theorem algebraicIndependent_of_subsingleton [Subsingleton R] : AlgebraicIndependent R x :=
144
+ theorem AlgebraicIndependent.of_subsingleton [Subsingleton R] : AlgebraicIndependent R x :=
130
145
algebraicIndependent_iff.2 fun _ _ => Subsingleton.elim _ _
131
146
147
+ @[deprecated (since := "2025-02-07")] alias algebraicIndependent_of_subsingleton :=
148
+ AlgebraicIndependent.of_subsingleton
149
+
150
+ theorem isTranscendenceBasis_iff_of_subsingleton [Subsingleton R] (x : ι → A) :
151
+ IsTranscendenceBasis R x ↔ Nonempty ι := by
152
+ have := Module.subsingleton R A
153
+ refine ⟨fun h ↦ ?_, fun h ↦ ⟨.of_subsingleton, fun s hs hx ↦
154
+ hx.antisymm fun a _ ↦ ⟨Classical.arbitrary _, Subsingleton.elim ..⟩⟩⟩
155
+ by_contra hι; rw [not_nonempty_iff] at hι
156
+ have := h.2 {0 } .of_subsingleton
157
+ simp [range_eq_empty, eq_comm (a := ∅)] at this
158
+
159
+ @[nontriviality] theorem IsTranscendenceBasis.of_subsingleton [Subsingleton R] [Nonempty ι] :
160
+ IsTranscendenceBasis R x :=
161
+ (isTranscendenceBasis_iff_of_subsingleton x).mpr ‹_›
162
+
163
+ @[nontriviality] theorem trdeg_subsingleton [Subsingleton R] : trdeg R A = 1 :=
164
+ have := Module.subsingleton R A
165
+ (ciSup_le' fun s ↦ by simpa using Set.subsingleton_of_subsingleton).antisymm <| le_ciSup_of_le
166
+ (Cardinal.bddAbove_range _) ⟨{0 }, .of_subsingleton⟩ (by simp)
167
+
132
168
theorem algebraicIndependent_adjoin (hs : AlgebraicIndependent R x) :
133
169
@AlgebraicIndependent ι R (adjoin R (range x))
134
170
(fun i : ι => ⟨x i, subset_adjoin (mem_range_self i)⟩) _ _ _ :=
@@ -236,14 +272,83 @@ theorem algebraicIndependent_empty_iff :
236
272
237
273
end Subtype
238
274
239
- theorem AlgebraicIndependent.to_subtype_range {ι} {f : ι → A} (hf : AlgebraicIndependent R f) :
240
- AlgebraicIndependent R ((↑) : range f → A) := by
275
+ theorem AlgebraicIndependent.to_subtype_range (hx : AlgebraicIndependent R x) :
276
+ AlgebraicIndependent R ((↑) : range x → A) := by
277
+ nontriviality R
278
+ rwa [algebraicIndependent_subtype_range hx.injective]
279
+
280
+ theorem AlgebraicIndependent.to_subtype_range' (hx : AlgebraicIndependent R x) {t}
281
+ (ht : range x = t) :AlgebraicIndependent R ((↑) : t → A) :=
282
+ ht ▸ hx.to_subtype_range
283
+
284
+ theorem IsTranscendenceBasis.to_subtype_range (hx : IsTranscendenceBasis R x) :
285
+ IsTranscendenceBasis R ((↑) : range x → A) := by
286
+ cases subsingleton_or_nontrivial R
287
+ · rw [isTranscendenceBasis_iff_of_subsingleton] at hx ⊢; infer_instance
288
+ · rwa [isTranscendenceBasis_subtype_range hx.1 .injective]
289
+
290
+ theorem IsTranscendenceBasis.to_subtype_range' (hx : IsTranscendenceBasis R x) {t}
291
+ (ht : range x = t) : IsTranscendenceBasis R ((↑) : t → A) :=
292
+ ht ▸ hx.to_subtype_range
293
+
294
+ theorem AlgEquiv.isTranscendenceBasis (e : A ≃ₐ[R] A') (hx : IsTranscendenceBasis R x) :
295
+ IsTranscendenceBasis R (e ∘ x) := by
296
+ refine ⟨by apply hx.1 .map' (id e.injective : Injective e.toAlgHom), fun s hs hxs ↦ ?_⟩
297
+ rw [AlgebraicIndepOn, ← e.symm.toAlgHom.algebraicIndependent_iff e.symm.injective] at hs
298
+ rw [range_comp, hx.2 _ hs.to_subtype_range, ← range_comp, ← comp_assoc, range_comp]
299
+ · convert s.image_id <;> (ext; simp)
300
+ rintro _ ⟨i, rfl⟩
301
+ exact ⟨⟨_, hxs ⟨i, rfl⟩⟩, by simp⟩
302
+
303
+ theorem AlgEquiv.isTranscendenceBasis_iff (e : A ≃ₐ[R] A') :
304
+ IsTranscendenceBasis R (e ∘ x) ↔ IsTranscendenceBasis R x :=
305
+ ⟨fun hx ↦ by convert e.symm.isTranscendenceBasis hx; ext; simp, e.isTranscendenceBasis⟩
306
+
307
+ section trdeg
308
+
309
+ open Cardinal
310
+
311
+ theorem AlgebraicIndependent.lift_cardinalMk_le_trdeg [Nontrivial R]
312
+ (hx : AlgebraicIndependent R x) : lift.{v} #ι ≤ lift.{u} (trdeg R A) := by
313
+ rw [lift_mk_eq'.mpr ⟨.ofInjective _ hx.injective⟩, lift_le]
314
+ exact le_ciSup_of_le (bddAbove_range _) ⟨_, hx.to_subtype_range⟩ le_rfl
315
+
316
+ theorem AlgebraicIndependent.cardinalMk_le_trdeg [Nontrivial R] {ι : Type v} {x : ι → A}
317
+ (hx : AlgebraicIndependent R x) : #ι ≤ trdeg R A := by
318
+ rw [← (#ι).lift_id, ← (trdeg R A).lift_id]; exact hx.lift_cardinalMk_le_trdeg
319
+
320
+ theorem lift_trdeg_le_of_injective (f : A →ₐ[R] A') (hf : Injective f) :
321
+ lift.{v'} (trdeg R A) ≤ lift.{v} (trdeg R A') := by
322
+ nontriviality R
323
+ rw [trdeg, lift_iSup (bddAbove_range _)]
324
+ exact ciSup_le' fun i ↦ (i.2 .map' hf).lift_cardinalMk_le_trdeg
325
+
326
+ theorem trdeg_le_of_injective {A' : Type v} [CommRing A'] [Algebra R A'] (f : A →ₐ[R] A')
327
+ (hf : Injective f) : trdeg R A ≤ trdeg R A' := by
328
+ rw [← (trdeg R A).lift_id, ← (trdeg R A').lift_id]; exact lift_trdeg_le_of_injective f hf
329
+
330
+ theorem lift_trdeg_le_of_surjective (f : A →ₐ[R] A') (hf : Surjective f) :
331
+ lift.{v} (trdeg R A') ≤ lift.{v'} (trdeg R A) := by
241
332
nontriviality R
242
- rwa [algebraicIndependent_subtype_range hf.injective]
333
+ rw [trdeg, lift_iSup (bddAbove_range _)]
334
+ refine ciSup_le' fun i ↦ (lift_cardinalMk_le_trdeg (x := fun a : i.1 ↦ (⇑f).invFun a) <|
335
+ of_comp f ?_)
336
+ convert i.2 ; simp [invFun_eq (hf _)]
337
+
338
+ theorem trdeg_le_of_surjective {A' : Type v} [CommRing A'] [Algebra R A'] (f : A →ₐ[R] A')
339
+ (hf : Surjective f) : trdeg R A' ≤ trdeg R A := by
340
+ rw [← (trdeg R A).lift_id, ← (trdeg R A').lift_id]; exact lift_trdeg_le_of_surjective f hf
341
+
342
+ theorem AlgEquiv.lift_trdeg_eq (e : A ≃ₐ[R] A') :
343
+ lift.{v'} (trdeg R A) = lift.{v} (trdeg R A') :=
344
+ (lift_trdeg_le_of_injective e.toAlgHom e.injective).antisymm
345
+ (lift_trdeg_le_of_surjective e.toAlgHom e.surjective)
346
+
347
+ theorem AlgEquiv.trdeg_eq {A' : Type v} [CommRing A'] [Algebra R A'] (e : A ≃ₐ[R] A') :
348
+ trdeg R A = trdeg R A' := by
349
+ rw [← (trdeg R A).lift_id, e.lift_trdeg_eq, lift_id]
243
350
244
- theorem AlgebraicIndependent.to_subtype_range' {ι} {f : ι → A} (hf : AlgebraicIndependent R f) {t}
245
- (ht : range f = t) : AlgebraicIndependent R ((↑) : t → A) :=
246
- ht ▸ hf.to_subtype_range
351
+ end trdeg
247
352
248
353
theorem algebraicIndependent_comp_subtype {s : Set ι} :
249
354
AlgebraicIndependent R (x ∘ (↑) : s → A) ↔
@@ -299,8 +404,8 @@ theorem algebraicIndependent_sUnion_of_directed {s : Set (Set A)} (hsn : s.Nonem
299
404
exact algebraicIndependent_iUnion_of_directed hs.directed_val (by simpa using h)
300
405
301
406
theorem exists_maximal_algebraicIndependent (s t : Set A) (hst : s ⊆ t)
302
- (hs : AlgebraicIndependent R ((↑) : s → A) ) : ∃ u, s ⊆ u ∧
303
- Maximal (fun (x : Set A) ↦ AlgebraicIndependent R ((↑) : x → A) ∧ x ⊆ t) u := by
407
+ (hs : AlgebraicIndepOn R id s ) : ∃ u, s ⊆ u ∧
408
+ Maximal (fun (x : Set A) ↦ AlgebraicIndepOn R id x ∧ x ⊆ t) u := by
304
409
refine zorn_subset_nonempty { u : Set A | AlgebraicIndependent R ((↑) : u → A) ∧ u ⊆ t}
305
410
(fun c hc chainc hcn ↦ ⟨⋃₀ c, ⟨?_, ?_⟩, fun _ ↦ subset_sUnion_of_mem⟩) s ⟨hs, hst⟩
306
411
· exact algebraicIndependent_sUnion_of_directed hcn chainc.directedOn (fun x hxc ↦ (hc hxc).1 )
@@ -374,7 +479,7 @@ theorem AlgebraicIndependent.aeval_comp_mvPolynomialOptionEquivPolynomialAdjoin
374
479
375
480
section Field
376
481
377
- variable [Field K] [Algebra K A]
482
+ variable {K : Type *} [Field K] [Algebra K A]
378
483
379
484
/- Porting note: removing `simp`, not in simp normal form. Could make `Function.Injective f` a
380
485
simp lemma when `f` is a field hom, and then simp would prove this -/
0 commit comments