@@ -321,6 +321,43 @@ variable (H)
321321
322322section Normalizer
323323
324+ @[to_additive]
325+ theorem normalizer_empty : normalizer (∅ : Set G) = ⊤ :=
326+ ext fun _ ↦ ⟨fun _ ↦ trivial, fun _ _ ↦ .rfl⟩
327+
328+ @[to_additive]
329+ theorem _root_.CommGroup.normalizer_eq_top {G : Type *} [CommGroup G] (s : Set G) :
330+ normalizer s = ⊤ := by
331+ ext
332+ simp [mem_set_normalizer_iff]
333+
334+ theorem mem_normalizer_iff_conj_image_eq {s : Set G} {g : G} :
335+ g ∈ normalizer s ↔ MulAut.conj g '' s = s := by
336+ simp_rw [mem_set_normalizer_iff'', Set.ext_iff, Set.mem_image, MulAut.conj_apply]
337+ refine forall_congr' fun h ↦ ?_
338+ simp_rw [mul_inv_eq_iff_eq_mul, ← eq_inv_mul_iff_mul_eq, ← mul_assoc, exists_eq_right, iff_comm]
339+
340+ theorem _root_.AddSubgroup.mem_normalizer_iff_conj_image_eq {G : Type *} [AddGroup G] {s : Set G}
341+ {g : G} : g ∈ AddSubgroup.normalizer s ↔ AddAut.conj g '' s = s := by
342+ simp_rw [AddSubgroup.mem_set_normalizer_iff'', Set.ext_iff, Set.mem_image, AddAut.conj_apply]
343+ refine forall_congr' fun h ↦ ?_
344+ simp_rw [add_neg_eq_iff_eq_add, ← eq_neg_add_iff_add_eq, ← add_assoc, exists_eq_right, iff_comm]
345+
346+ theorem normalizer_le_normalizer_closure (s : Set G) : normalizer s ≤ normalizer (closure s) := by
347+ intro g hg
348+ have : MulAut.conj g '' (closure s) = closure (MulAut.conj g '' s) :=
349+ congr(SetLike.coe $(MulAut.conj g |>.toMonoidHom.map_closure s))
350+ rw [mem_normalizer_iff_conj_image_eq.mp hg] at this
351+ rwa [mem_normalizer_iff_conj_image_eq]
352+
353+ theorem _root_.AddSubgroup.normalizer_le_normalizer_closure {G : Type *} [AddGroup G] (s : Set G) :
354+ AddSubgroup.normalizer s ≤ AddSubgroup.normalizer (AddSubgroup.closure s) := by
355+ intro g hg
356+ have : AddAut.conj g '' (AddSubgroup.closure s) = AddSubgroup.closure (AddAut.conj g '' s) :=
357+ congr(SetLike.coe $(AddAut.conj g |>.toAddMonoidHom.map_closure s))
358+ rw [AddSubgroup.mem_normalizer_iff_conj_image_eq.mp hg] at this
359+ rwa [AddSubgroup.mem_normalizer_iff_conj_image_eq]
360+
324361variable {H}
325362
326363@[to_additive]
@@ -385,6 +422,11 @@ theorem normal_subgroupOf_iff_le_normalizer_inf :
385422instance (priority := 100 ) normal_in_normalizer : (H.subgroupOf <| normalizer H).Normal :=
386423 (normal_subgroupOf_iff_le_normalizer H.le_normalizer).mpr le_rfl
387424
425+ @[to_additive]
426+ theorem maximal_normal_subgroupOf_normalizer : Maximal (H.subgroupOf · |>.Normal) (normalizer H) :=
427+ ⟨inferInstance,
428+ fun _ hnormal hle ↦ (normal_subgroupOf_iff_le_normalizer <| le_normalizer.trans hle).mp hnormal⟩
429+
388430@[to_additive]
389431theorem le_normalizer_of_normal_subgroupOf [hK : (H.subgroupOf K).Normal] (HK : H ≤ K) :
390432 K ≤ normalizer H :=
@@ -825,10 +867,6 @@ theorem Normal.of_map_subtype {K : Subgroup G} {L : Subgroup K}
825867 (n : (Subgroup.map K.subtype L).Normal) : L.Normal :=
826868 n.of_map_injective K.subtype_injective
827869
828- end Subgroup
829-
830- namespace Subgroup
831-
832870section SubgroupNormal
833871
834872@[to_additive]
@@ -917,6 +955,11 @@ theorem normal_subgroupOf_sup_of_le_normalizer {H N : Subgroup G}
917955
918956end SubgroupNormal
919957
958+ @[to_additive]
959+ instance normal_subgroupOf_closure_normalizer (s : Set G) :
960+ (closure s |>.subgroupOf <| normalizer s).Normal :=
961+ normal_subgroupOf_of_le_normalizer <| normalizer_le_normalizer_closure s
962+
920963end Subgroup
921964
922965namespace IsConj
0 commit comments