Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
1316735
fix file mostly
plp127 Mar 6, 2026
53e958f
author
plp127 Mar 6, 2026
9f35974
more work
plp127 Mar 6, 2026
8a9354e
fix one file
plp127 Mar 6, 2026
359fa28
fix the other file
plp127 Mar 6, 2026
d65ea47
Update Mathlib/FieldTheory/KrullTopology.lean
plp127 Mar 6, 2026
33711bf
Update Mathlib/FieldTheory/KrullTopology.lean
plp127 Mar 6, 2026
cbf6271
little reshuffling of rewrites
plp127 Mar 6, 2026
e109865
fix next file
plp127 Mar 6, 2026
6508683
prove compactness
plp127 Mar 6, 2026
b08bce4
Merge branch 'master' into aliu/krullTopology
plp127 Mar 29, 2026
e9d7042
Merge branch 'master' into aliu/krullTopology
plp127 May 11, 2026
40449b4
add comments about deprecation
plp127 May 14, 2026
5bd8385
update module docstring
plp127 May 14, 2026
6b0f6bc
fix downstream files
plp127 May 14, 2026
dc59c8f
Merge branch 'master' into aliu/krullTopology
plp127 May 23, 2026
21304af
reminder to remove the import at the top
plp127 May 23, 2026
21f280a
Merge branch 'master' into aliu/krullTopology
plp127 Jul 20, 2026
dde4d1b
fix krull topology file
plp127 Jul 20, 2026
25cff20
fix cyclotomic character
plp127 Jul 20, 2026
b53c2eb
prove
plp127 Jul 26, 2026
f9a23da
fix definition
plp127 Jul 26, 2026
f5c9043
fix docstrings
plp127 Jul 26, 2026
acfc52e
prove more theorem
plp127 Jul 26, 2026
596fe4e
test: low priority instance
plp127 Jul 26, 2026
ad3c407
uninstance
plp127 Jul 26, 2026
a574a21
generalize totally bounded
plp127 Jul 27, 2026
fd3a72a
add theorems
plp127 Jul 27, 2026
05aabb4
new file
plp127 Jul 27, 2026
33495b6
more instances
plp127 Jul 27, 2026
adb5605
remove redundant `have`
plp127 Jul 27, 2026
3497cd2
Merge branch 'aliu/trdeg' into aliu/krullTopology
plp127 Jul 27, 2026
070969a
Merge branch 'aliu/finiteType' into aliu/krullTopology
plp127 Jul 27, 2026
03add1b
Merge branch 'aliu/fixingSubgroupEquiv' into aliu/krullTopology
plp127 Jul 27, 2026
3658bfc
make `K` and `L` explicit
plp127 Jul 27, 2026
4a01eb8
Merge branch 'aliu/trdeg' into aliu/krullTopology
plp127 Jul 27, 2026
49a60d4
fix binder infos
plp127 Jul 27, 2026
14f50d8
Merge branch 'aliu/trdeg' into aliu/krullTopology
plp127 Jul 27, 2026
9dc59cf
more more instances
plp127 Jul 27, 2026
a464da9
Merge branch 'aliu/finiteType' into aliu/krullTopology
plp127 Jul 27, 2026
1e0dab9
progress
plp127 Jul 28, 2026
5c062b8
Merge branch 'aliu/left-right-group' into aliu/krullTopology
plp127 Jul 28, 2026
36cf747
deprecate
plp127 Jul 28, 2026
00b209d
Merge branch 'aliu/complete_univ' into aliu/krullTopology
plp127 Jul 28, 2026
1e966a7
Merge branch 'master' into aliu/krullTopology
plp127 Aug 6, 2026
d23395e
Merge branch 'master' into aliu/krullTopology
plp127 Aug 17, 2026
b75b2f8
finish krull topology
plp127 Aug 17, 2026
656dcc1
fix downstream
plp127 Aug 17, 2026
d2b728e
Merge branch 'master' into aliu/finiteType
plp127 Aug 18, 2026
6d29fe2
Merge branch 'aliu/finiteType' into aliu/krullTopology
plp127 Aug 18, 2026
c963f81
add opposite instance
plp127 Sep 10, 2026
7cd9358
Merge branch 'master' into aliu/left-right-group
plp127 Sep 10, 2026
1f98394
use opposite equivalence
plp127 Sep 10, 2026
03e48a1
make complete space iff theorem
plp127 Sep 10, 2026
4b689db
Merge branch 'aliu/left-right-group' into aliu/krullTopology
plp127 Sep 10, 2026
b35ec8d
made argument explicit
plp127 Sep 10, 2026
a1d7122
move instances to `UniformEquiv` file
plp127 Sep 10, 2026
28051b3
unnamespace
plp127 Sep 10, 2026
7171ac5
Apply batched suggestions from code review
plp127 Sep 10, 2026
5f647e6
move comment
plp127 Sep 10, 2026
b64a586
add embedding theorems
plp127 Sep 10, 2026
0ab579f
docblame will yell at me again
plp127 Sep 10, 2026
1db418f
typo
plp127 Sep 10, 2026
01563eb
Merge branch 'aliu/left-right-group' into aliu/krullTopology
plp127 Sep 10, 2026
eb05b26
Merge branch 'master' into aliu/krullTopology
plp127 Sep 11, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions Mathlib/FieldTheory/AbsoluteGaloisGroup.lean
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ section

variable [Algebra K L] [Algebra (AlgebraicClosure K) (AlgebraicClosure L)]
[IsScalarTower K (AlgebraicClosure K) (AlgebraicClosure L)]

-- set_option pp.rawOnError true
open IntermediateField in
/-- A commuting square of two fields and their algebraic closures induces a continuous homomorphism
of their absolute Galois groups. -/
Expand All @@ -65,10 +65,11 @@ noncomputable def absoluteGaloisGroup.mapOfAlgebra : G_K L →ₜ* G_K K :=
let f := IsScalarTower.toAlgHom K (AlgebraicClosure K) (AlgebraicClosure L)
apply continuous_of_continuousAt_one F
rw [ContinuousAt, map_one]
refine ((galGroupBasis L (AlgebraicClosure L)).nhds_one_hasBasis.tendsto_iff
(galGroupBasis K (AlgebraicClosure K)).nhds_one_hasBasis).mpr ?_
rintro _ ⟨_, ⟨F, hF : FiniteDimensional _ _, rfl⟩, rfl⟩
refine ⟨_, ⟨_, ⟨adjoin L (F.map f), ?_, rfl⟩, rfl⟩, fun σ hσ x ↦ ?_⟩
intro U hU
rw [Filter.mem_map]
erw [krullTopology_mem_nhds_one_iff] at hU ⊢
obtain ⟨F, fd, hF⟩ := hU
refine ⟨adjoin L (F.map f), ?_, fun σ hσ => hF fun x => ?_⟩
· suffices Algebra.EssFiniteType L (adjoin L (F.map f : Set (AlgebraicClosure L))) by
apply Algebra.finite_of_essFiniteType_of_isAlgebraic
replace hF : Algebra.EssFiniteType K F := inferInstance
Expand Down
20 changes: 20 additions & 0 deletions Mathlib/FieldTheory/Galois/Basic.lean
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,16 @@ def fixingSubgroupEquiv : fixingSubgroup K ≃* Gal(E/K) where
invFun ϕ := ⟨ϕ.restrictScalars _, ϕ.commutes⟩
map_mul' _ _ := by ext; rfl

@[simp]
theorem coe_fixingSubgroupEquiv_apply (σ : K.fixingSubgroup) :
⇑(K.fixingSubgroupEquiv σ) = ⇑σ.1 :=
rfl

@[simp]
theorem coe_fixingSubgroupEquiv_symm_apply (σ : Gal(E/K)) :
⇑(K.fixingSubgroupEquiv.symm σ).1 = ⇑σ :=
rfl

theorem fixingSubgroup_fixedField [FiniteDimensional F E] : fixingSubgroup (fixedField H) = H := by
have H_le : H ≤ fixingSubgroup (fixedField H) := (le_iff_le _ _).mp le_rfl
suffices Nat.card H = Nat.card (fixingSubgroup (fixedField H)) by
Expand All @@ -288,6 +298,16 @@ def subgroupEquivAlgEquiv [FiniteDimensional F E] (H : Subgroup Gal(E/F)) :
H ≃* Gal(E/IntermediateField.fixedField H) :=
(MulEquiv.subgroupCongr (fixingSubgroup_fixedField H).symm).trans (fixingSubgroupEquiv _)

@[simp]
theorem coe_subgroupEquivAlgEquiv_apply [FiniteDimensional F E] (σ : H) :
⇑(subgroupEquivAlgEquiv H σ) = ⇑σ.1 :=
rfl

@[simp]
theorem coe_subgroupEquivAlgEquiv_symm_apply [FiniteDimensional F E] (σ : Gal(E/fixedField H)) :
⇑((subgroupEquivAlgEquiv H).symm σ).1 = ⇑σ :=
rfl

instance fixedField.smul : SMul K (fixedField (fixingSubgroup K)) where
smul x y := ⟨x * y, fun ϕ => by
rw [smul_mul', show ϕ • (x : E) = ↑x from ϕ.2 x, show ϕ • (y : E) = ↑y from y.2 ϕ]⟩
Expand Down
54 changes: 15 additions & 39 deletions Mathlib/FieldTheory/Galois/Infinite.lean
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,6 @@ closed subgroups of the Galois group.

In `K/k`, for any intermediate field `L` :

* `fixingSubgroup_isClosed` : the subgroup fixing `L` (`Gal(K/L)`) is closed.

* `fixedField_fixingSubgroup` : the field fixed by the
subgroup fixing `L` is equal to `L` itself.

Expand Down Expand Up @@ -61,26 +59,10 @@ open scoped Pointwise
open FiniteGaloisIntermediateField AlgEquiv
--Note: The `adjoin`s below are `FiniteGaloisIntermediateField.adjoin`

@[deprecated IntermediateField.isClosed_fixingSubgroup (since := "2026-05-14")]
lemma fixingSubgroup_isClosed (L : IntermediateField k K) [IsGalois k K] :
IsClosed (L.fixingSubgroup : Set Gal(K/k)) where
isOpen_compl := isOpen_iff_mem_nhds.mpr fun σ h => by
apply mem_nhds_iff.mpr
rcases Set.not_subset.mp ((mem_fixingSubgroup_iff Gal(K/k)).not.mp h) with ⟨y, yL, ne⟩
use σ • ((adjoin k {y}).1.fixingSubgroup : Set Gal(K/k))
constructor
· intro f hf
rcases (Set.mem_smul_set.mp hf) with ⟨g, hg, eq⟩
simp only [Set.mem_compl_iff, SetLike.mem_coe, ← eq]
apply (mem_fixingSubgroup_iff Gal(K/k)).not.mpr
push Not
use y
simp only [yL, smul_eq_mul, AlgEquiv.smul_def, AlgEquiv.mul_apply, ne_eq, true_and]
have : g y = y := (mem_fixingSubgroup_iff Gal(K/k)).mp hg y <|
adjoin_simple_le_iff.mp le_rfl
simpa only [this, ne_eq, AlgEquiv.smul_def] using! ne
· simp only [(IntermediateField.fixingSubgroup_isOpen (adjoin k {y}).1).smul σ, true_and]
use 1
simp only [SetLike.mem_coe, smul_eq_mul, mul_one, and_true, Subgroup.one_mem]
IsClosed (L.fixingSubgroup : Set Gal(K/k)) :=
IntermediateField.isClosed_fixingSubgroup L

lemma fixedField_fixingSubgroup (L : IntermediateField k K) [IsGalois k K] :
IntermediateField.fixedField L.fixingSubgroup = L := by
Expand Down Expand Up @@ -150,21 +132,17 @@ lemma fixingSubgroup_fixedField (H : ClosedSubgroup Gal(K/k)) [IsGalois k K] :
intro σ hσ
by_contra h
have nhds : H.carrierᶜ ∈ nhds σ := H.isClosed'.isOpen_compl.mem_nhds h
rw [GroupFilterBasis.nhds_eq (x₀ := σ) (galGroupBasis k K)] at nhds
rcases nhds with ⟨b, ⟨gp, ⟨L, hL, eq'⟩, eq⟩, sub⟩
rw [← eq'] at eq
have := hL.out
rw [← map_mul_left_nhds_one, Filter.mem_map, krullTopology_mem_nhds_one_iff] at nhds
rcases nhds with ⟨L, hL, sub⟩
let L' : FiniteGaloisIntermediateField k K := {
normalClosure k L K with
finiteDimensional := normalClosure.is_finiteDimensional k L K
isGalois := IsGalois.normalClosure k L K }
have compl : σ • L'.1.fixingSubgroup.carrier ⊆ H.carrierᶜ := by
rintro φ ⟨τ, hτ, muleq⟩
have sub' : σ • b ⊆ H.carrierᶜ := Set.smul_set_subset_iff.mpr sub
apply sub'
simp only [← muleq, ← eq]
apply Set.smul_mem_smul_set
exact (L.fixingSubgroup_le (IntermediateField.le_normalClosure L) hτ)
have compl : σ • L'.1.fixingSubgroup.carrier ⊆ H.carrierᶜ :=
calc σ • (SetLike.coe L'.1.fixingSubgroup)
_ ⊆ σ • (SetLike.coe L.fixingSubgroup) :=
Set.smul_set_mono (fixingSubgroup_antitone (L.le_normalClosure))
_ ⊆ H.carrierᶜ := Set.smul_set_subset_iff.mpr sub
have fix : ∀ x ∈ IntermediateField.fixedField H.toSubgroup ⊓ ↑L', σ x = x :=
fun x hx ↦ ((mem_fixingSubgroup_iff Gal(K/k)).mp hσ) x hx.1
rw [restrict_fixedField H.1 L'.1] at fix
Expand Down Expand Up @@ -195,7 +173,7 @@ lemma fixingSubgroup_fixedField (H : ClosedSubgroup Gal(K/k)) [IsGalois k K] :
/-- The Galois correspondence from intermediate fields to closed subgroups. -/
def IntermediateFieldEquivClosedSubgroup [IsGalois k K] :
IntermediateField k K ≃o (ClosedSubgroup Gal(K/k))ᵒᵈ where
toFun L := ⟨L.fixingSubgroup, fixingSubgroup_isClosed L
toFun L := ⟨L.fixingSubgroup, L.isClosed_fixingSubgroup
invFun H := IntermediateField.fixedField H.1
left_inv L := fixedField_fixingSubgroup L
right_inv H := by
Expand All @@ -208,7 +186,7 @@ def IntermediateFieldEquivClosedSubgroup [IsGalois k K] :
/-- The Galois correspondence as a `GaloisInsertion` -/
def GaloisInsertionIntermediateFieldClosedSubgroup [IsGalois k K] :
GaloisInsertion (OrderDual.toDual ∘ fun (E : IntermediateField k K) ↦
(⟨E.fixingSubgroup, fixingSubgroup_isClosed E⟩ : ClosedSubgroup Gal(K/k)))
(⟨E.fixingSubgroup, E.isClosed_fixingSubgroup⟩ : ClosedSubgroup Gal(K/k)))
((fun (H : ClosedSubgroup Gal(K/k)) ↦ IntermediateField.fixedField H) ∘
OrderDual.toDual) :=
OrderIso.toGaloisInsertion IntermediateFieldEquivClosedSubgroup
Expand Down Expand Up @@ -240,13 +218,11 @@ set_option backward.isDefEq.respectTransparency false in
open IntermediateField in
theorem isOpen_iff_finite (L : IntermediateField k K) [IsGalois k K] :
IsOpen L.fixingSubgroup.carrier ↔ FiniteDimensional k L := by
refine ⟨fun h ↦ ?_, fun h ↦ IntermediateField.fixingSubgroup_isOpen L⟩
refine ⟨fun h ↦ ?_, fun h ↦ IntermediateField.isOpen_fixingSubgroup L⟩
have : (IntermediateFieldEquivClosedSubgroup.toFun L).carrier ∈ nhds 1 :=
IsOpen.mem_nhds h (congrFun rfl)
rw [GroupFilterBasis.nhds_one_eq] at this
rcases this with ⟨S, ⟨gp, ⟨M, hM, eq'⟩, eq⟩, sub⟩
rw [← eq, ← eq'] at sub
have := hM.out
rw [krullTopology_mem_nhds_one_iff] at this
rcases this with ⟨M, hM, sub⟩
let L' : FiniteGaloisIntermediateField k K := {
normalClosure k M K with
finiteDimensional := normalClosure.is_finiteDimensional k M K
Expand Down
5 changes: 1 addition & 4 deletions Mathlib/FieldTheory/Galois/Profinite.lean
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ theorem restrictNormalHom_continuous (L : IntermediateField k K) [Normal k L] :
dsimp at this
rw [hx y.1 ((IntermediateField.mem_lift y).mpr hy)] at this
exact SetLike.coe_eq_coe.mp this
· exact ⟨IntermediateField.fixingSubgroup_isOpen (IntermediateField.lift L'), congrFun rfl
· exact ⟨IntermediateField.isOpen_fixingSubgroup (IntermediateField.lift L'), one_mem _

set_option backward.isDefEq.respectTransparency false in
lemma algEquivToLimit_continuous : Continuous (algEquivToLimit k K) := by
Expand Down Expand Up @@ -326,9 +326,6 @@ noncomputable def continuousMulEquivToLimit [IsGalois k K] :
continuous_toFun := algEquivToLimit_continuous
continuous_invFun := mulEquivToLimit_symm_continuous

instance [IsGalois k K] : CompactSpace Gal(K/k) :=
(continuousMulEquivToLimit k K).symm.compactSpace

/-- `Gal(K/k)` as a profinite group as there is
a `ContinuousMulEquiv` to a `ProfiniteGrp` given above -/
noncomputable def profiniteGalGrp [IsGalois k K] : ProfiniteGrp :=
Expand Down
4 changes: 3 additions & 1 deletion Mathlib/FieldTheory/IntermediateField/Adjoin/Algebra.lean
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,6 @@ lemma fg_top_iff :
(⊤ : IntermediateField F E).FG ↔ Algebra.EssFiniteType F E := by
constructor
· intro ⟨s, hs⟩
have : Algebra.FiniteType F (Algebra.adjoin F (s : Set E)) := .adjoin_of_finite s.finite_toSet
have : Algebra.EssFiniteType (Algebra.adjoin F (s : Set E)) (adjoin F (s : Set E)) :=
.of_isLocalization _ (nonZeroDivisors _)
have : Algebra.EssFiniteType F (adjoin F (s : Set E)) :=
Expand Down Expand Up @@ -124,6 +123,9 @@ lemma essFiniteType_iff {K : IntermediateField F E} :
adjoin_map, ← Set.range_comp, Function.comp_def, ← AlgHom.fieldRange_eq_map] using! this
exact ⟨fun ⟨s, _, hs⟩ ↦ ⟨s, hs⟩, fun ⟨s, hs⟩ ↦ ⟨s, hs ▸ subset_adjoin _ _, hs⟩⟩

instance [Finite S] : Algebra.EssFiniteType F (adjoin F S) :=
essFiniteType_iff.mpr (fg_adjoin_of_finite S.toFinite)

/-- A field is finitely generated if and only if it is essentially of finite type over its prime
subfield. -/
theorem _root_.Field.fg_iff_essFiniteType : Field.FG F ↔ Algebra.EssFiniteType (⊥ : Subfield F) F :=
Expand Down
4 changes: 4 additions & 0 deletions Mathlib/FieldTheory/IntermediateField/Adjoin/Basic.lean
Original file line number Diff line number Diff line change
Expand Up @@ -614,6 +614,10 @@ theorem finiteDimensional_adjoin {S : Set L} [Finite S] (hS : ∀ x ∈ S, IsInt
have (x : S) := adjoin.finiteDimensional (hS x.1 x.2)
exact finiteDimensional_iSup_of_finite

instance {S : Set L} [Finite S] [Algebra.IsIntegral K L] :
FiniteDimensional K (adjoin K S) :=
finiteDimensional_adjoin fun _ _ => Algebra.IsIntegral.isIntegral _

/-- If `x` generates `L` over `K` (i.e., `K⟮x⟯ = ⊤`) and is integral over `K`, then `x`
defines a `PowerBasis` for `L` over `K`. See `PowerBasis.ofAdjoinEqTop` for a version with
`Algebra.adjoin`. -/
Expand Down
Loading
Loading