@@ -227,15 +227,23 @@ theorem sup_eq_closure_mul (H K : Subgroup G) : H ⊔ K = closure ((H : Set G) *
227227 ((closure_mul_le _ _).trans <| by rw [closure_eq, closure_eq])
228228
229229@[to_additive]
230- theorem set_mul_normal_comm (s : Set G) (N : Subgroup G) [hN : N.Normal] :
231- s * (N : Set G) = (N : Set G) * s := by
230+ theorem set_mul_normalizer_comm (S : Set G) (N : Subgroup G) (hLE : S ⊆ N.normalizer) :
231+ S * N = N * S := by
232232 rw [← iUnion_mul_left_image, ← iUnion_mul_right_image]
233- simp only [image_mul_left, image_mul_right, Set.preimage, SetLike.mem_coe, hN.mem_comm_iff]
233+ simp only [image_mul_left, image_mul_right, Set.preimage]
234+ congr! 5 with s hs x
235+ exact (mem_normalizer_iff'.mp (inv_mem (hLE hs)) x).symm
234236
235- /-- The carrier of `H ⊔ N` is just `↑H * ↑N` (pointwise set product) when `N` is normal. -/
237+ @[to_additive]
238+ theorem set_mul_normal_comm (S : Set G) (N : Subgroup G) [hN : N.Normal] :
239+ S * (N : Set G) = (N : Set G) * S := set_mul_normalizer_comm S N subset_normalizer_of_normal
240+
241+ /-- The carrier of `H ⊔ N` is just `↑H * ↑N` (pointwise set product)
242+ when `H` is a subgroup of the normalizer of `N` in `G`. -/
236243@ [to_additive "The carrier of `H ⊔ N` is just `↑H + ↑N` (pointwise set addition)
237- when `N` is normal." ]
238- theorem mul_normal (H N : Subgroup G) [hN : N.Normal] : (↑(H ⊔ N) : Set G) = H * N := by
244+ when `H` is a subgroup of the normalizer of `N` in `G`." ]
245+ theorem coe_mul_of_left_le_normalizer_right (H N : Subgroup G) (hLE : H ≤ N.normalizer) :
246+ (↑(H ⊔ N) : Set G) = H * N := by
239247 rw [sup_eq_closure_mul]
240248 refine Set.Subset.antisymm (fun x hx => ?_) subset_closure
241249 induction hx using closure_induction'' with
@@ -244,19 +252,33 @@ theorem mul_normal (H N : Subgroup G) [hN : N.Normal] : (↑(H ⊔ N) : Set G) =
244252 | inv_mem x hx =>
245253 obtain ⟨x, hx, y, hy, rfl⟩ := hx
246254 simpa only [mul_inv_rev, mul_assoc, inv_inv, inv_mul_cancel_left]
247- using mul_mem_mul (inv_mem hx) (hN.conj_mem _ (inv_mem hy) x )
255+ using mul_mem_mul (inv_mem hx) ((mem_normalizer_iff.mp (hLE hx) y⁻¹).mp (inv_mem hy))
248256 | mul x' x' _ _ hx hx' =>
249257 obtain ⟨x, hx, y, hy, rfl⟩ := hx
250258 obtain ⟨x', hx', y', hy', rfl⟩ := hx'
251259 refine ⟨x * x', mul_mem hx hx', x'⁻¹ * y * x' * y', mul_mem ?_ hy', ?_⟩
252- · simpa using hN.conj_mem _ hy x'⁻¹
260+ · exact (mem_normalizer_iff''.mp (hLE hx') y).mp hy
253261 · simp only [mul_assoc, mul_inv_cancel_left]
254262
263+ /-- The carrier of `N ⊔ H` is just `↑N * ↑H` (pointwise set product) when
264+ `H` is a subgroup of the normalizer of `N` in `G`. -/
265+ @ [to_additive "The carrier of `N ⊔ H` is just `↑N + ↑H` (pointwise set addition)
266+ when `H` is a subgroup of the normalizer of `N` in `G`." ]
267+ theorem coe_mul_of_right_le_normalizer_left (N H : Subgroup G) (hLE : H ≤ N.normalizer) :
268+ (↑(N ⊔ H) : Set G) = N * H := by
269+ rw [← set_mul_normalizer_comm _ _ hLE, sup_comm, coe_mul_of_left_le_normalizer_right _ _ hLE]
270+
271+ /-- The carrier of `H ⊔ N` is just `↑H * ↑N` (pointwise set product) when `N` is normal. -/
272+ @ [to_additive "The carrier of `H ⊔ N` is just `↑H + ↑N` (pointwise set addition)
273+ when `N` is normal." ]
274+ theorem mul_normal (H N : Subgroup G) [hN : N.Normal] : (↑(H ⊔ N) : Set G) = H * N :=
275+ coe_mul_of_left_le_normalizer_right H N le_normalizer_of_normal
276+
255277/-- The carrier of `N ⊔ H` is just `↑N * ↑H` (pointwise set product) when `N` is normal. -/
256278@ [to_additive "The carrier of `N ⊔ H` is just `↑N + ↑H` (pointwise set addition)
257279when `N` is normal." ]
258- theorem normal_mul (N H : Subgroup G) [N.Normal] : (↑(N ⊔ H) : Set G) = N * H := by
259- rw [← set_mul_normal_comm, sup_comm, mul_normal]
280+ theorem normal_mul (N H : Subgroup G) [N.Normal] : (↑(N ⊔ H) : Set G) = N * H :=
281+ coe_mul_of_right_le_normalizer_left N H le_normalizer_of_normal
260282
261283@[to_additive]
262284theorem mul_inf_assoc (A B C : Subgroup G) (h : A ≤ C) :
0 commit comments