Skip to content

Commit a66e8da

Browse files
committed
feat(FieldTheory/Galois/IsGaloisGroup): generalize mulEquivCongr (leanprover-community#38464)
Generalizes `mulEquivCongr` from field extensions to domain extensions. The field version is renamed to `mulEquivCongr'`. Also adds some simp lemmas.
1 parent 4fec1aa commit a66e8da

1 file changed

Lines changed: 56 additions & 15 deletions

File tree

Mathlib/FieldTheory/Galois/IsGaloisGroup.lean

Lines changed: 56 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ attribute [local instance] FractionRing.liftAlgebra in
231231
/--
232232
If `G` is finite and `IsGaloisGroup G A B` with `A` and `B` domains, then `G` is also
233233
a Galois group for `FractionRing B / FractionRing A` for the action defined by
234-
`FractionRing.mulSemiringAction_of_isGaloisGroup`.
234+
`IsFractionRing.mulSemiringAction`.
235235
-/
236236
theorem IsGaloisGroup.toFractionRing [IsDomain A] [IsDomain B] [IsTorsionFree A B] [Finite G]
237237
[IsGaloisGroup G A B] :
@@ -314,16 +314,6 @@ protected theorem finite (A B : Type*) [CommRing A] [CommRing B] [Algebra A B] [
314314
IsGalois.card_aut_eq_finrank K L]
315315
exact ⟨fun _ _ ↦ (faithful K).eq_of_smul_eq_smul ∘ DFunLike.ext_iff.mp, rfl⟩)
316316

317-
/-- If `G` and `G'` are finite Galois groups for `L/K`, then `G` is isomorphic to `G'`. -/
318-
noncomputable def mulEquivCongr [IsGaloisGroup G K L] [Finite G]
319-
[IsGaloisGroup G' K L] [Finite G'] : G ≃* G' :=
320-
(mulEquivAlgEquiv G K L).trans (mulEquivAlgEquiv G' K L).symm
321-
322-
@[simp]
323-
theorem mulEquivCongr_apply_smul [IsGaloisGroup G K L] [Finite G] [IsGaloisGroup G' K L] [Finite G']
324-
(g : G) (x : L) : mulEquivCongr G G' K L g • x = g • x :=
325-
AlgEquiv.ext_iff.mp ((mulEquivAlgEquiv G' K L).apply_symm_apply (mulEquivAlgEquiv G K L g)) x
326-
327317
@[simp]
328318
theorem map_mulEquivAlgEquiv_fixingSubgroup
329319
[IsGaloisGroup G K L] [Finite G] (F : IntermediateField K L) :
@@ -332,6 +322,57 @@ theorem map_mulEquivAlgEquiv_fixingSubgroup
332322
obtain ⟨g, rfl⟩ := (mulEquivAlgEquiv G K L).surjective g
333323
simp [mem_fixingSubgroup_iff]
334324

325+
/-- If `G` and `G'` are finite Galois groups for `L/K`, then `G` is isomorphic to `G'`.
326+
See `mulEquivCongr` for a more general version. -/
327+
noncomputable def mulEquivCongr' [IsGaloisGroup G K L] [Finite G]
328+
[IsGaloisGroup G' K L] [Finite G'] : G ≃* G' :=
329+
(mulEquivAlgEquiv G K L).trans (mulEquivAlgEquiv G' K L).symm
330+
331+
@[simp]
332+
theorem mulEquivCongr'_apply_smul [IsGaloisGroup G K L] [Finite G] [IsGaloisGroup G' K L]
333+
[Finite G'] (g : G) (x : L) : mulEquivCongr' G G' K L g • x = g • x :=
334+
AlgEquiv.ext_iff.mp ((mulEquivAlgEquiv G' K L).apply_symm_apply (mulEquivAlgEquiv G K L g)) x
335+
336+
attribute [local instance] FractionRing.liftAlgebra in
337+
/-- If `G` and `G'` are finite Galois groups for `B/A` with `B` a domain, then `G` is
338+
isomorphic to `G'`. -/
339+
noncomputable def mulEquivCongr [Finite G] [Finite G'] (A B : Type*) [CommRing A]
340+
[CommRing B] [IsDomain B] [Algebra A B] [FaithfulSMul A B] [MulSemiringAction G B]
341+
[MulSemiringAction G' B] [IsGaloisGroup G A B] [IsGaloisGroup G' A B] :
342+
G ≃* G' :=
343+
haveI : IsDomain A := (FaithfulSMul.algebraMap_injective A B).isDomain
344+
letI K := FractionRing A
345+
letI L := FractionRing B
346+
letI : MulSemiringAction G L := IsFractionRing.mulSemiringAction G A B K L
347+
letI : MulSemiringAction G' L := IsFractionRing.mulSemiringAction G' A B K L
348+
haveI : IsGaloisGroup G K L := IsGaloisGroup.toFractionRing G A B
349+
haveI : IsGaloisGroup G' K L := IsGaloisGroup.toFractionRing G' A B
350+
mulEquivCongr' G G' K L
351+
352+
attribute [local instance] FractionRing.liftAlgebra in
353+
@[simp]
354+
theorem mulEquivCongr_apply_smul [Finite G] [Finite G'] (A B : Type*) [CommRing A]
355+
[CommRing B] [IsDomain B] [Algebra A B] [FaithfulSMul A B] [MulSemiringAction G B]
356+
[MulSemiringAction G' B] [IsGaloisGroup G A B] [IsGaloisGroup G' A B] (g : G) (x : B) :
357+
mulEquivCongr G G' A B g • x = g • x := by
358+
haveI : IsDomain A := (FaithfulSMul.algebraMap_injective A B).isDomain
359+
letI K := FractionRing A
360+
letI L := FractionRing B
361+
letI : MulSemiringAction G L := IsFractionRing.mulSemiringAction G A B K L
362+
letI : MulSemiringAction G' L := IsFractionRing.mulSemiringAction G' A B K L
363+
haveI : IsGaloisGroup G K L := IsGaloisGroup.toFractionRing G A B
364+
haveI : IsGaloisGroup G' K L := IsGaloisGroup.toFractionRing G' A B
365+
apply FaithfulSMul.algebraMap_injective B L
366+
rw [algebraMap.smul', algebraMap.smul']
367+
exact mulEquivCongr'_apply_smul G G' K L g _
368+
369+
@[simp]
370+
theorem mulEquivCongr_symm_apply_smul [Finite G] [Finite G'] (A B : Type*) [CommRing A]
371+
[CommRing B] [IsDomain B] [Algebra A B] [FaithfulSMul A B] [MulSemiringAction G B]
372+
[MulSemiringAction G' B] [IsGaloisGroup G A B] [IsGaloisGroup G' A B] (g : G') (x : B) :
373+
(mulEquivCongr G G' A B).symm g • x = g • x := by
374+
rw [← mulEquivCongr_apply_smul G G' A B, MulEquiv.apply_symm_apply]
375+
335376
variable (H H' : Subgroup G) (F F' : IntermediateField K L)
336377

337378
instance (R S : Type*) [CommRing R] [CommRing S] [Algebra R S]
@@ -495,10 +536,10 @@ theorem fixingSubgroup_range_algebraMap' [Finite G] (B : Type*) [CommSemiring B]
495536
attribute [local instance] FractionRing.liftAlgebra in
496537
/-- If `G` acts on a domain `C` with `IsGaloisGroup G A C`, and a subgroup `H` acts on `C` with
497538
`IsGaloisGroup H B C`, then the fixing subgroup of `algebraMap B C` equals `H`. -/
498-
theorem fixingSubgroup_range_algebraMap [Finite G] (A B C : Type*) [CommRing A]
499-
[CommRing C] [IsDomain C] [Algebra A C] [FaithfulSMul A C] [MulSemiringAction G C]
500-
(H : Subgroup G) [hGAC : IsGaloisGroup G A C] [CommRing B] [Algebra B C] [FaithfulSMul B C]
501-
[hH : IsGaloisGroup H B C] :
539+
theorem fixingSubgroup_range_algebraMap [Finite G] (A B C : Type*) (H : Subgroup G)
540+
[CommRing A] [CommRing B] [CommRing C] [IsDomain C]
541+
[Algebra A C] [FaithfulSMul A C] [MulSemiringAction G C] [hGAC : IsGaloisGroup G A C]
542+
[Algebra B C] [FaithfulSMul B C] [hH : IsGaloisGroup H B C] :
502543
fixingSubgroup G (Set.range (algebraMap B C)) = H := by
503544
have : IsDomain B := (FaithfulSMul.algebraMap_injective B C).isDomain
504545
have : IsDomain A := (FaithfulSMul.algebraMap_injective A C).isDomain

0 commit comments

Comments
 (0)