Zulip Chat Archive
Stream: new members
Topic: Orbit of trivial subgroup
Laurent Bartholdi (Jun 14 2023 at 17:35):
Sorry, me again... I would like to prove that the trivial subgroup has singleton orbits, and tried
@[simp] lemma orbit_bot (p : α) : mul_action.orbit (⊥ : subgroup G) p = {p} := begin
ext1,
rw mul_action.mem_orbit_iff,
split,
{ intro h, cases h with g g_to_x,
rw [← g_to_x,set.mem_singleton_iff],
cases g with _ g_bot,
have g_one := subgroup.mem_bot.mp g_bot,
sorry },
{ intro h, exact ⟨1,eq.trans (one_smul _ p) (set.mem_singleton_iff.mp h).symm⟩ }
end
but I'm stuck: I have an element g : ↥⊥
and would like to conclude g=1
, but the only thing I can do is cases g
which gives me g_val = 1
. Any suggestion? I feel I'm screwing up with the different coercions...
Yaël Dillies (Jun 14 2023 at 17:54):
When you do cases g
, g
is not in your context anymore, right? It's been replaced by \<g_val, some_proof_term\>
so g_val = 1
is what you want.
Laurent Bartholdi (Jun 14 2023 at 18:06):
@Yaël Dillies Yes, exactly! I get g_one : g_val = 1
but my goal is still ⟨g_val, g_bot⟩ • p = p
, and I can't rewrite g_one
in it to invoke one_smul
Yaël Dillies (Jun 14 2023 at 18:07):
What does simp
do on the goal?
Laurent Bartholdi (Jun 14 2023 at 18:07):
nothing :(, just says it can't simplify
Yaël Dillies (Jun 14 2023 at 18:11):
Hmm, that's unfortunate. Can you add the lemma
@[simp, to_additive] lemma subgroup.mk_smul {G α : Type*} [group G] [mul_action G α]
{S : subgroup G} {g : G} (hg : g ∈ S) (a : α) : (⟨g, hg⟩ : S) • a = g • a := rfl
and try again?
Laurent Bartholdi (Jun 14 2023 at 18:13):
You're a goddess!
Yaël Dillies (Jun 14 2023 at 18:13):
No, i just come with a brain-inbuilt Lean compiler :grinning:
Laurent Bartholdi (Jun 14 2023 at 18:14):
Is this something that should be part of the main library?
Yaël Dillies (Jun 14 2023 at 18:14):
Definitely. It not being in mathlib is an oversight.
Eric Wieser (Jun 15 2023 at 02:08):
Eric Wieser (Jun 15 2023 at 02:10):
I think the lemma Yaël suggests above is not consistent with how we usually do subobject APIs
Eric Wieser (Jun 15 2023 at 02:14):
I recommend you instead prove
@[simp] lemma orbit_bot [subsingleton G] (p : α) : mul_action.orbit G p = {p} := begin
ext1,
rw mul_action.mem_orbit_iff,
sorry
end
Which is more general than your statement
Yaël Dillies (Jun 15 2023 at 07:42):
Eric, are you claiming subgroup.mk_smul
is a bad simp lemma? Why?
Yaël Dillies (Jun 15 2023 at 07:43):
If subgroup.smul_def
were simp, I would understand, but it's not (and shouldn't be).
Eric Wieser (Jun 15 2023 at 08:23):
Yaël Dillies said:
Eric, are you claiming
subgroup.mk_smul
is a bad simp lemma? Why?
Yes, to be consistent with the fact we don't have .mk_zero
or .neg_mk
or .mk_add_mk
or ...
Eric Wieser (Jun 15 2023 at 08:24):
Also the subtype.mk
term it uses isn't very well typed (there's no subgroup.subtype_mk); though lean 4 resolves that
Yaël Dillies (Jun 15 2023 at 09:04):
docs#add_mem_class.mk_add_mk :thinking:
Yaël Dillies (Jun 15 2023 at 09:04):
Regardless of whether the lemmas you claim are missing, missing simp lemmas is not an argument against adding them!
Eric Wieser (Jun 15 2023 at 09:11):
Missing families of simp lemmas are evidence that the simp set has not been constructed with those lemmas in mind, and introducing them without further analysis might make things less confluent
Eric Wieser (Jun 15 2023 at 09:11):
But yes, given those exist I think the lemma you suggest is sensible after all
Eric Wieser (Jun 15 2023 at 09:12):
I would guess you need to repeat it for every subobject? I don't think we generalized the smul instances to use mul_mem_class
, though we certainly could after the port
Yaël Dillies (Jun 15 2023 at 09:24):
Yes, I suspect it will have to be subobject-specific for the time being.
Last updated: Dec 20 2023 at 11:08 UTC