@@ -42,7 +42,7 @@ open Module
4242
4343section 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
6868attribute [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+
70110end CommRing
71111
72112section Field
0 commit comments