-
Notifications
You must be signed in to change notification settings - Fork 1.4k
[Merged by Bors] - feat(RingTheory): definition of regular local ring #28682
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 106 commits
78b6206
74b6e46
0d9df37
58bfa3c
dbbc1d0
cb08e01
1409e55
f0eee47
df1e3df
b63f40c
f525679
5bce000
64a6daf
240a55d
1c0b700
b3bbcf7
2b7d062
39cda43
6eaeeff
48078f4
9c9133f
722d74c
5edab8a
26a27a5
edeab4d
3fca17c
b900b96
11cffb8
5ae2b50
c220224
e103dc9
7868aeb
6cbc6a6
13ca00e
d810ab7
7e3a308
88ebf95
4f32eaa
6cf21b0
ca8bab0
4547600
514f992
60ce0cd
a22ad4c
4c679e0
7f4146c
c4e0ccd
3b50eb9
8311afc
acd4141
6347803
d5141b3
0c8ddc5
58ffb62
5d2512d
e2f91b2
2310be7
80fcd13
782bd75
1dc4e82
251a214
ab939df
d31c677
fdd4742
b12ab54
bd2a931
496f5a5
0691f4d
dd82339
c0cf3ae
54003cd
ef5b60d
c50145c
9076eeb
0d6b267
88a89b5
f3b46bd
2e0beff
ca5786a
cd54a09
eea67d8
6c59477
435a579
163291a
379c4ab
10bb149
0e42b01
ce937df
201acfd
cd6c4d0
723f840
23bbe4e
821e02e
01211a7
507efb1
6fc8258
9236436
3133352
46274e2
69c2bbd
0011ecf
bb90a75
f940521
fd3d647
19c1337
29fec98
3ddb6f3
a979108
a5f4135
2410537
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||
|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,77 @@ | ||||||||
| /- | ||||||||
| Copyright (c) 2025 Nailin Guan. All rights reserved. | ||||||||
| Released under Apache 2.0 license as described in the file LICENSE. | ||||||||
| Authors: Nailin Guan | ||||||||
| -/ | ||||||||
| module | ||||||||
|
|
||||||||
| public import Mathlib.Algebra.Module.SpanRankOperations | ||||||||
| public import Mathlib.RingTheory.DiscreteValuationRing.Basic | ||||||||
| public import Mathlib.RingTheory.Ideal.KrullsHeightTheorem | ||||||||
| public import Mathlib.RingTheory.KrullDimension.Field | ||||||||
| public import Mathlib.RingTheory.KrullDimension.PID | ||||||||
|
|
||||||||
| /-! | ||||||||
| # Define Regular Local Ring | ||||||||
|
|
||||||||
| For a Noetherian local ring `R`, we define `IsRegularLocalRing` as | ||||||||
| `(maximalIdeal R).spanFinrank = ringKrullDim R`. This definition is equivalent to | ||||||||
| the dimension of the cotangent space over the residue field being equal to `ringKrullDim R`, | ||||||||
| (see `IsRegularLocalRing.iff_finrank_cotangentSpace`). | ||||||||
|
|
||||||||
| # Main Definition and Results | ||||||||
|
|
||||||||
| * `IsRegularLocalRing` : A Noetherian local ring is regular if | ||||||||
| `(maximalIdeal R).spanFinrank = ringKrullDim R`, | ||||||||
| i.e. its maximal ideal can be generated by `dim R` elements. | ||||||||
|
|
||||||||
| * `IsRegularLocalRing.iff_finrank_cotangentSpace` : the equivalence of `IsRegularLocalRing` and | ||||||||
| `Module.finrank (ResidueField R) (CotangentSpace R) = ringKrullDim R` | ||||||||
|
|
||||||||
| -/ | ||||||||
|
|
||||||||
| @[expose] public section | ||||||||
|
|
||||||||
| open IsLocalRing | ||||||||
|
|
||||||||
| variable (R : Type*) [CommRing R] | ||||||||
|
|
||||||||
| /-- A Noetherian local ring is said to be regular if its maximal ideal | ||||||||
| can be generated by `dim R` elements. -/ | ||||||||
| class IsRegularLocalRing : Prop extends IsLocalRing R, IsNoetherianRing R where | ||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Then you can drop your
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think this
Thmoas-Guan marked this conversation as resolved.
Outdated
|
||||||||
| spanFinrank_maximalIdeal : (maximalIdeal R).spanFinrank = ringKrullDim R | ||||||||
|
|
||||||||
| lemma isRegularLocalRing_def [IsLocalRing R] [IsNoetherianRing R] : | ||||||||
|
Thmoas-Guan marked this conversation as resolved.
Outdated
|
||||||||
| IsRegularLocalRing R ↔ (maximalIdeal R).spanFinrank = ringKrullDim R := | ||||||||
| ⟨fun ⟨h⟩ ↦ h, fun h ↦ ⟨h⟩⟩ | ||||||||
|
|
||||||||
| namespace IsRegularLocalRing | ||||||||
|
|
||||||||
| lemma of_spanFinrank_maximalIdeal_le [IsLocalRing R] [IsNoetherianRing R] | ||||||||
| (le : (maximalIdeal R).spanFinrank ≤ ringKrullDim R) : IsRegularLocalRing R := | ||||||||
| (isRegularLocalRing_def _).mpr (le_antisymm le (ringKrullDim_le_spanFinrank_maximalIdeal R)) | ||||||||
|
|
||||||||
| variable {R} in | ||||||||
| lemma of_ringEquiv [IsRegularLocalRing R] {R' : Type*} [CommRing R'] | ||||||||
| (e : R ≃+* R') : IsRegularLocalRing R' := by | ||||||||
| let _ := e.isLocalRing | ||||||||
| let _ := isNoetherianRing_of_ringEquiv R e | ||||||||
|
Thmoas-Guan marked this conversation as resolved.
Outdated
|
||||||||
| rwa [isRegularLocalRing_def, ← ringKrullDim_eq_of_ringEquiv e, ← map_ringEquiv_maximalIdeal e, | ||||||||
| Ideal.spanFinrank_map_eq_of_ringEquiv, ← isRegularLocalRing_def] | ||||||||
|
|
||||||||
| lemma iff_finrank_cotangentSpace [IsLocalRing R] [IsNoetherianRing R] : | ||||||||
| IsRegularLocalRing R ↔ Module.finrank (ResidueField R) (CotangentSpace R) = ringKrullDim R := by | ||||||||
| rw [isRegularLocalRing_def, spanFinrank_maximalIdeal_eq_finrank_cotangentSpace] | ||||||||
|
|
||||||||
| instance {k : Type*} [Field k] : IsRegularLocalRing k := by | ||||||||
| simp [isRegularLocalRing_def, maximalIdeal_eq_bot] | ||||||||
|
|
||||||||
| set_option backward.isDefEq.respectTransparency false in | ||||||||
| instance [IsDomain R] [IsDiscreteValuationRing R] : IsRegularLocalRing R := by | ||||||||
| apply of_spanFinrank_maximalIdeal_le | ||||||||
| rcases IsPrincipalIdealRing.principal (maximalIdeal R) with ⟨x, hx⟩ | ||||||||
| simpa only [(IsPrincipalIdealRing.ringKrullDim_eq_one R) (IsDiscreteValuationRing.not_isField R), | ||||||||
| Nat.cast_le_one, ← Set.ncard_singleton x, hx] using | ||||||||
| Submodule.spanFinrank_span_le_ncard_of_finite (Set.finite_singleton x) | ||||||||
|
|
||||||||
| end IsRegularLocalRing | ||||||||
Uh oh!
There was an error while loading. Please reload this page.