Skip to content

Commit e1cd909

Browse files
committed
feat(IsGaloisGroup): if B/A and B/A' are Galois with the same Galois group, then A ≃+* A' (leanprover-community#35797)
1 parent bf4bf08 commit e1cd909

File tree

1 file changed

+41
-1
lines changed

1 file changed

+41
-1
lines changed

Mathlib/FieldTheory/Galois/IsGaloisGroup.lean

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ open Module
4242

4343
section CommRing
4444

45-
variable (G A B : Type*) [Group G] [CommSemiring A] [Semiring B] [Algebra A B]
45+
variable (G A A' B : Type*) [Group G] [CommSemiring A] [Semiring B] [Algebra A B]
4646
[MulSemiringAction G B]
4747

4848
/-- `G` is a Galois group for `L/K` if the action of `G` on `L` is faithful with fixed field `K`.
@@ -67,6 +67,46 @@ theorem IsGaloisGroup.of_mulEquiv [hG : IsGaloisGroup G A B] {H : Type*} [Group
6767

6868
attribute [instance low] IsGaloisGroup.commutes IsGaloisGroup.isInvariant
6969

70+
variable [FaithfulSMul A B] [hA : IsGaloisGroup G A B]
71+
72+
/--
73+
If `B/A` is Galois with Galois group `G`, then `A` is isomorphic to the subring of elements of `B`
74+
fixed by `G`.
75+
-/
76+
@[simps apply_coe]
77+
noncomputable def IsGaloisGroup.ringEquivFixedPoints :
78+
A ≃+* FixedPoints.subsemiring B G where
79+
toFun x := ⟨algebraMap A B x, fun _ ↦ by rw [smul_algebraMap]⟩
80+
invFun x := (hA.isInvariant.isInvariant x x.prop).choose
81+
map_mul' _ _ := by simp [Subtype.ext_iff]
82+
map_add' _ _ := by simp [Subtype.ext_iff]
83+
left_inv _ := by simp
84+
right_inv x := by simpa [Subtype.ext_iff] using (hA.isInvariant.isInvariant x x.prop).choose_spec
85+
86+
@[simp]
87+
theorem IsGaloisGroup.algebraMap_ringEquivFixedPoints_symm_apply (x : FixedPoints.subsemiring B G) :
88+
algebraMap A B ((ringEquivFixedPoints G A B).symm x) = x :=
89+
(hA.isInvariant.isInvariant x x.prop).choose_spec
90+
91+
variable [CommSemiring A'] [Algebra A' B] [FaithfulSMul A' B] [hA' : IsGaloisGroup G A' B]
92+
93+
/--
94+
If `B/A` and `B/A'` are Galois with the same Galois group, then `A ≃+* A'`.
95+
-/
96+
noncomputable def IsGaloisGroup.ringEquiv :
97+
A ≃+* A' :=
98+
(ringEquivFixedPoints G A B).trans (ringEquivFixedPoints G A' B).symm
99+
100+
@[simp]
101+
theorem IsGaloisGroup.algebraMap_ringEquiv_apply (x : A) :
102+
algebraMap A' B (IsGaloisGroup.ringEquiv G A A' B x) = algebraMap A B x := by
103+
simp [ringEquiv]
104+
105+
@[simp]
106+
theorem IsGaloisGroup.algebraMap_ringEquiv_symm_apply (x : A') :
107+
algebraMap A B ((IsGaloisGroup.ringEquiv G A A' B).symm x) = algebraMap A' B x := by
108+
simp [ringEquiv]
109+
70110
end CommRing
71111

72112
section Field

0 commit comments

Comments
 (0)