Zulip Chat Archive

Stream: new members

Topic: Ensuring that a property holds for arbitrary group elements


Alex Griffin (May 19 2021 at 13:40):

I have a collection of proofs (I previously posted about this) that show which elements of dihedral groups can and can't be central. Part of that shows that rotation elements of order at most 2 necessarily commute with all rotations and with all reflections. Now, I know that this means that these elements are central, because every element of the group is of this form. However, I realized that just having these proofs and saying that they imply centrality might be a bit of a handwave. Therefore, it would be beneficial to have a proof explicitly stating that these elements belong to the center, which would be done by providing a proof that, for any given x : dihedral_group n term, that these elements commute with x. The conceptual problem I'm having is how to extend a result of my form to one involving an arbitrary element. The group multiplication of dihedral_group n is defined in a way that is divided into a collection of cases, such as r i * r j, sr i * r j, etc. How can I get a result about whether two products of group elements are equal if the way they are computed is left up in the air?

For reference, here are the relevant pieces of code that show commutation for the individual cases:

import group_theory.specific_groups.dihedral
variables {n : }

/--
Rotations with order at most 2 commute with all rotations.
`i` is any `zmod n` term satisfying `2 * i = 0`.
-/
lemma r_mem_center_r {i : zmod n} (h : 2 * i = 0) (j : zmod n) : r i * r j = r j * r i :=
by simp [add_comm]

/--
Rotations with order at most 2 commute with all reflections.
`i` is any `zmod n` term satisfying `2 * i = 0`.
-/
lemma r_mem_center_sr {i : zmod n} (h : 2 * i = 0) (j : zmod n) : r i * sr j = sr j * r i :=
by simpa [sub_eq_add_neg,  add_eq_zero_iff_neg_eq,  two_mul]

Kevin Buzzard (May 19 2021 at 13:49):

Can you post a #mwe of a sorry which you'd like to see filled, rather than just asking a maths question?

Eric Wieser (May 19 2021 at 14:04):

I think you're looking for:

lemma r_mem_center {i : zmod n} (h : 2 * i = 0) (x : dihedral_group n) : r i * x = x * r i :=
begin
  cases x,
  -- now this is easy
end

Alex Griffin (May 19 2021 at 14:13):

Ah, did not realize that cases would work like that. That makes sense. Thank you very much, that did the trick.

Eric Wieser (May 19 2021 at 14:13):

Once you do that, I'd recommend you try to fit this into the mathlib structures

-- this stuff should be in mathlib but isn't
namespace subgroup

instance (G : Type*) [group G] (S : subgroup G) : mul_action S G :=
{ smul := λ a b, a * b,
  one_smul := λ a, one_mul _,
  mul_smul := λ a b, mul_assoc _ _ }

instance is_scalar_tower_right (G : Type*) [group G] (S : subgroup G) :
  is_scalar_tower S S G :=
λ a b c, (mul_assoc _ _ _)⟩

end subgroup

I've left the sorries for you to solve for practice:

def dihedral_group.center : subgroup (dihedral_group n) :=
{ carrier := {x |  i, 2 * i = 0  x = r i},
  one_mem' := sorry,
  mul_mem' := λ a b, sorry,
  inv_mem' := λ a, sorry }

instance : smul_comm_class (dihedral_group.center n) (dihedral_group n) (dihedral_group n) :=
{ smul_comm := λ a b c, show a * (b * c) = b * (a * c), begin
    sorry
  end }

With these instances, you can now use lemmas like docs#smul_mul_assoc

Kevin Buzzard (May 19 2021 at 14:14):

Yes, I was going to get to that after I'd teased out a MWE :-) Actually making the definition of the centre is more useful than proving a theorem saying precisely which elements are in the centre

Eric Wieser (May 19 2021 at 14:16):

I think the mathlib definition of "center" is implicitly:

@[class]
abbreviation subgroup.is_center {G : Type*} [group G] (S : subgroup G) := smul_comm_class S G G

Eric Wieser (May 19 2021 at 14:18):

But I guess for that definition to make sense you need the other two instances I defined above that aren't in mathlib yet

Eric Wieser (May 19 2021 at 14:50):

PR'd more general version of those instances as #7665

Eric Wieser (May 26 2021 at 17:49):

Ok, everything in the "this stuff should be in mathlib but isn't" code block above is now in mathlib


Last updated: Dec 20 2023 at 11:08 UTC