Zulip Chat Archive
Stream: mathlib4
Topic: Subgroup.closure_toAddSubgroup
Xavier Roblot (Mar 20 2025 at 11:12):
Somehow, I have the feeling that the proof below is not optimal. I seem to have trouble finding the best way to deal with Additive
and Multiplicative
. If anyone could improve on it, I would be grateful. Also, is there a way to deduce easily the proof of the Additive
version from the Multiplicative
version?
import Mathlib.Algebra.Group.Subgroup.Lattice
theorem Subgroup.closure_toAddSubgroup {G : Type*} [Group G] (s : Set G) :
(Subgroup.closure s).toAddSubgroup = AddSubgroup.closure (Additive.ofMul '' s) := by
rw [OrderIso.apply_eq_iff_eq_symm_apply, AddSubgroup.closure,
OrderIso.map_sInf_eq_sInf_symm_preimage, OrderIso.symm_symm]
simp_rw [Set.preimage_setOf_eq, coe_toAddSubgroup_apply, Set.preimage_equiv_eq_image_symm,
Additive.toMul_symm_eq, Set.image_subset_iff, Equiv.preimage_image, closure]
theorem _AddSubgroup.closure_toSubgroup {G : Type*} [AddGroup G] (s : Set G) :
(AddSubgroup.closure s).toSubgroup = Subgroup.closure (Multiplicative.ofAdd '' s) := by
sorry
María Inés de Frutos Fernández (Mar 20 2025 at 11:53):
This is not exactly what you are asking for, but in case it is helpful, I wrote some similar theorems a while ago:
theorem AddSubgroup.toSubgroup_closure {A : Type} [AddGroup A] (S : Set A) :
(AddSubgroup.closure S).toSubgroup =
Subgroup.closure (Multiplicative.toAdd ⁻¹' S) :=
le_antisymm
(AddSubgroup.toSubgroup.to_galoisConnection.l_le <|
(AddSubgroup.closure_le _).2 <| Subgroup.subset_closure (G := Multiplicative A))
((Subgroup.closure_le _).2 <| AddSubgroup.subset_closure (G := A))
theorem Subgroup.toAddSubgroup_closure {G : Type} [Group G] (S : Set G) :
(Subgroup.closure S).toAddSubgroup =
AddSubgroup.closure (Additive.toMul ⁻¹' S) :=
le_antisymm
(Subgroup.toAddSubgroup.le_symm_apply.1 <|
(Subgroup.closure_le _).2 (AddSubgroup.subset_closure (G := Additive G)))
((AddSubgroup.closure_le _).2 (Subgroup.subset_closure (G := G)))
Xavier Roblot (Mar 20 2025 at 13:41):
Thanks. It is quite close and I guess your proof is somewhat cleaner. In any case, it is interesting to see that you reproved the second version and were not able to use the first proof to deduce the second one.
Eric Wieser (Mar 20 2025 at 13:53):
Here's the second one in terms of the first:
theorem Subgroup.toAddSubgroup_closure {G : Type} [Group G] (S : Set G) :
(Subgroup.closure S).toAddSubgroup =
AddSubgroup.closure (Additive.toMul ⁻¹' S) :=
AddSubgroup.toSubgroup.injective <| Eq.symm <| AddSubgroup.toSubgroup_closure _
Xavier Roblot (Mar 20 2025 at 17:52):
Thanks. Can I use that (with due credit) in a coming PR?
Eric Wieser (Mar 20 2025 at 19:48):
Yes, though I think you can shrink it further by using something from the Equiv API
Xavier Roblot (Mar 21 2025 at 08:54):
I have another question though. What is the best spelling for this result:
theorem AddSubgroup.closure_toSubgroup {A : Type*} [AddGroup A] (S : Set A) :
(AddSubgroup.closure S).toSubgroup =
Subgroup.closure (Multiplicative.ofAdd '' S) :=
or
theorem AddSubgroup.closure_toSubgroup {A : Type} [AddGroup A] (S : Set A) :
(AddSubgroup.closure S).toSubgroup =
Subgroup.closure (Multiplicative.toAdd ⁻¹' S) :=
That is: Multiplicative.ofAdd '' S
or Multiplicative.toAdd ⁻¹' S
?
Eric Wieser (Mar 21 2025 at 08:55):
I think the preimage is preferred
Xavier Roblot (Mar 21 2025 at 08:55):
Ok. thanks
Xavier Roblot (Mar 21 2025 at 09:59):
Kevin Buzzard (Mar 21 2025 at 10:25):
Preimage has better defeqs because there's not a random "exists" in the middle
Last updated: May 02 2025 at 03:31 UTC