Zulip Chat Archive

Stream: Is there code for X?

Topic: induction lemmas for semidirect product


Edward van de Meent (May 24 2024 at 19:02):

i have defined a GroupHom using SemidirectProduct.lift, and i'd like to prove that it is injective by using the fact that the maps i used to define it are injective, and that the only overlap in the codomain is 1. I had guessed that to do this i could use some kind of closure-induction argument for the semidirect product, but i found none...
a first thing that would help is the following lemma:

import Mathlib.GroupTheory.SemidirectProduct

variable {N G : Type*} [Group N] [Group G] (hom : G →* MulAut N)
lemma SemidirectProduct.is_closure :
  Subgroup.closure ((Set.range SemidirectProduct.inl : Set (N [hom] G))  (Set.range SemidirectProduct.inr : Set (N [hom] G))) =  := sorry

ultimately, my goal is this:

variable {H:Type*} [Group H] (f₁ : N →* H) (f₂ : G →* H)
  (h :  (g : G), f₁.comp (MulEquiv.toMonoidHom (φ g)) = (MulEquiv.toMonoidHom (MulAut.conj (f₂ g))).comp f₁))
lemma SemidirectProduct.lift_inj (hf₁ : Function.Injective f₁) (hf2 : Function.Injective f₂)
    (hindep : f₁.range  f₂.range = )
    :
    Function.Injective (SemidirectProduct.lift f₁ f₂ h ) := sorry

Edward van de Meent (May 24 2024 at 19:03):

solution to second part

Kevin Buzzard (May 25 2024 at 07:07):

I would prove the stronger theorem that every element of a semidirect product is equal to a product g*n. A general element of a Subgroup.closure is a random finite product so the stronger theorem looks easier to prove. You can then just use the fact that injective iff trivial kernel

Edward van de Meent (May 25 2024 at 07:12):

so you suggest using something like this?

lemma SemidirectProduct.factor (x : N [φ] G) :
     n g, x = SemidirectProduct.inl n * SemidirectProduct.inr g := by
  obtain n,g := x
  simp only [mk_eq_inl_mul_inr]
  use n,g

Edward van de Meent (May 25 2024 at 07:14):

my point is mostly that proving this closure property opens up the use of Subgroup.induction and variants

Edward van de Meent (May 25 2024 at 07:14):

which i imagine wouldn't be harmful

Kevin Buzzard (May 25 2024 at 07:16):

Sure, but now proving the closure property is easy

Edward van de Meent (May 25 2024 at 07:16):

ah, i see

Kevin Buzzard (May 25 2024 at 07:16):

(hopefully!)

Kevin Buzzard (May 25 2024 at 07:17):

I guess you just need to prove that the product of two things in S is in closure S, which could be a lemma in its own right

Edward van de Meent (May 25 2024 at 07:35):

it already is (sort of): docs#Subgroup.mul_mem_sup

Edward van de Meent (May 25 2024 at 07:36):

at least, the form i need

Eric Wieser (May 25 2024 at 09:45):

Edward van de Meent said:

so you suggest using something like this?

lemma SemidirectProduct.factor (x : N [φ] G) :
     n g, x = SemidirectProduct.inl n * SemidirectProduct.inr g := by
  obtain n,g := x
  simp only [mk_eq_inl_mul_inr]
  use n,g

This should be phrased as an induction principle

Edward van de Meent (May 25 2024 at 09:46):

protected lemma SemidirectProduct.induction {motive : N [φ] G  Prop} (x : N [φ] G)
    (left :  n, motive (inl n))
    (right :  g, motive (inr g))
    (mul :  (n : N) (g : G), motive (inl n)  motive (inr g)  motive (inl n * inr g)) :
    motive x := by
  obtain x₁,x₂ := x
  simp only [mk_eq_inl_mul_inr]
  exact mul _ _ (left x₁) (right x₂)

you mean like this?

Edward van de Meent (May 25 2024 at 09:47):

or like this:

protected lemma SemidirectProduct.induction' {motive : N [φ] G  Prop} (x : N [φ] G)
    (mul :  (n : N) (g : G),motive (inl n * inr g)) :
    motive x := by
  obtain x₁,x₂ := x
  simp only [mk_eq_inl_mul_inr]
  exact mul x₁ x₂

Eric Wieser (May 25 2024 at 17:46):

I meant the second one

Eric Wieser (May 25 2024 at 17:47):

But with @[elab_as_elim]


Last updated: May 02 2025 at 03:31 UTC