Theorem: lowerCentralSeries.map
File: Mathlib/GroupTheory/Nilpotent.lean

tactic: induction' n with d hd
state_before: G : Type u_1
inst✝² : Group G
H✝ : Subgroup G
inst✝¹ : H✝.Normal
H : Type u_2
inst✝ : Group H
f : G →* H
n : ℕ
⊢ Subgroup.map f (lowerCentralSeries G n) ≤ lowerCentralSeries H n
state_after: case zero
G : Type u_1
inst✝² : Group G
H✝ : Subgroup G
inst✝¹ : H✝.Normal
H : Type u_2
inst✝ : Group H
f : G →* H
⊢ Subgroup.map f (lowerCentralSeries G 0) ≤ lowerCentralSeries H 0

case succ
G : Type u_1
inst✝² : Group G
H✝ : Subgroup G
inst✝¹ : H✝.Normal
H : Type u_2
inst✝ : Group H
f : G →* H
d : ℕ
hd : Subgroup.map f (lowerCentralSeries G d) ≤ lowerCentralSeries H d
⊢ Subgroup.map f (lowerCentralSeries G (d + 1)) ≤ lowerCentralSeries H (d + 1)

tactic: simp [Nat.zero_eq]
state_before: case zero
G : Type u_1
inst✝² : Group G
H✝ : Subgroup G
inst✝¹ : H✝.Normal
H : Type u_2
inst✝ : Group H
f : G →* H
⊢ Subgroup.map f (lowerCentralSeries G 0) ≤ lowerCentralSeries H 0
state_after: no goals

tactic: rintro a ⟨x, hx : x ∈ lowerCentralSeries G d.succ, rfl⟩
state_before: case succ
G : Type u_1
inst✝² : Group G
H✝ : Subgroup G
inst✝¹ : H✝.Normal
H : Type u_2
inst✝ : Group H
f : G →* H
d : ℕ
hd : Subgroup.map f (lowerCentralSeries G d) ≤ lowerCentralSeries H d
⊢ Subgroup.map f (lowerCentralSeries G (d + 1)) ≤ lowerCentralSeries H (d + 1)
state_after: case succ.intro.intro
G : Type u_1
inst✝² : Group G
H✝ : Subgroup G
inst✝¹ : H✝.Normal
H : Type u_2
inst✝ : Group H
f : G →* H
d : ℕ
hd : Subgroup.map f (lowerCentralSeries G d) ≤ lowerCentralSeries H d
x : G
hx : x ∈ lowerCentralSeries G d.succ
⊢ f x ∈ lowerCentralSeries H (d + 1)

tactic: refine closure_induction hx ?_ (by simp [f.map_one, Subgroup.one_mem _])
  (fun y z hy hz => by simp [MonoidHom.map_mul, Subgroup.mul_mem _ hy hz]) (fun y hy => by
    rw [f.map_inv]; exact Subgroup.inv_mem _ hy)
state_before: case succ.intro.intro
G : Type u_1
inst✝² : Group G
H✝ : Subgroup G
inst✝¹ : H✝.Normal
H : Type u_2
inst✝ : Group H
f : G →* H
d : ℕ
hd : Subgroup.map f (lowerCentralSeries G d) ≤ lowerCentralSeries H d
x : G
hx : x ∈ lowerCentralSeries G d.succ
⊢ f x ∈ lowerCentralSeries H (d + 1)
state_after: case succ.intro.intro
G : Type u_1
inst✝² : Group G
H✝ : Subgroup G
inst✝¹ : H✝.Normal
H : Type u_2
inst✝ : Group H
f : G →* H
d : ℕ
hd : Subgroup.map f (lowerCentralSeries G d) ≤ lowerCentralSeries H d
x : G
hx : x ∈ lowerCentralSeries G d.succ
⊢ ∀ x ∈ {g | ∃ g₁ ∈ lowerCentralSeries G d, ∃ g₂ ∈ ⊤, ⁅g₁, g₂⁆ = g}, f x ∈ lowerCentralSeries H (d + 1)

tactic: rintro a ⟨y, hy, z, ⟨-, rfl⟩⟩
state_before: case succ.intro.intro
G : Type u_1
inst✝² : Group G
H✝ : Subgroup G
inst✝¹ : H✝.Normal
H : Type u_2
inst✝ : Group H
f : G →* H
d : ℕ
hd : Subgroup.map f (lowerCentralSeries G d) ≤ lowerCentralSeries H d
x : G
hx : x ∈ lowerCentralSeries G d.succ
⊢ ∀ x ∈ {g | ∃ g₁ ∈ lowerCentralSeries G d, ∃ g₂ ∈ ⊤, ⁅g₁, g₂⁆ = g}, f x ∈ lowerCentralSeries H (d + 1)
state_after: case succ.intro.intro.intro.intro.intro.intro
G : Type u_1
inst✝² : Group G
H✝ : Subgroup G
inst✝¹ : H✝.Normal
H : Type u_2
inst✝ : Group H
f : G →* H
d : ℕ
hd : Subgroup.map f (lowerCentralSeries G d) ≤ lowerCentralSeries H d
x : G
hx : x ∈ lowerCentralSeries G d.succ
y : G
hy : y ∈ lowerCentralSeries G d
z : G
⊢ f ⁅y, z⁆ ∈ lowerCentralSeries H (d + 1)

tactic: apply mem_closure.mpr
state_before: case succ.intro.intro.intro.intro.intro.intro
G : Type u_1
inst✝² : Group G
H✝ : Subgroup G
inst✝¹ : H✝.Normal
H : Type u_2
inst✝ : Group H
f : G →* H
d : ℕ
hd : Subgroup.map f (lowerCentralSeries G d) ≤ lowerCentralSeries H d
x : G
hx : x ∈ lowerCentralSeries G d.succ
y : G
hy : y ∈ lowerCentralSeries G d
z : G
⊢ f ⁅y, z⁆ ∈ lowerCentralSeries H (d + 1)
state_after: case succ.intro.intro.intro.intro.intro.intro
G : Type u_1
inst✝² : Group G
H✝ : Subgroup G
inst✝¹ : H✝.Normal
H : Type u_2
inst✝ : Group H
f : G →* H
d : ℕ
hd : Subgroup.map f (lowerCentralSeries G d) ≤ lowerCentralSeries H d
x : G
hx : x ∈ lowerCentralSeries G d.succ
y : G
hy : y ∈ lowerCentralSeries G d
z : G
⊢ ∀ (K : Subgroup H), {g | ∃ g₁ ∈ lowerCentralSeries H d, ∃ g₂ ∈ ⊤, ⁅g₁, g₂⁆ = g} ⊆ ↑K → f ⁅y, z⁆ ∈ K

tactic: exact fun K hK => hK ⟨f y, hd (mem_map_of_mem f hy), by simp [commutatorElement_def]⟩
state_before: case succ.intro.intro.intro.intro.intro.intro
G : Type u_1
inst✝² : Group G
H✝ : Subgroup G
inst✝¹ : H✝.Normal
H : Type u_2
inst✝ : Group H
f : G →* H
d : ℕ
hd : Subgroup.map f (lowerCentralSeries G d) ≤ lowerCentralSeries H d
x : G
hx : x ∈ lowerCentralSeries G d.succ
y : G
hy : y ∈ lowerCentralSeries G d
z : G
⊢ ∀ (K : Subgroup H), {g | ∃ g₁ ∈ lowerCentralSeries H d, ∃ g₂ ∈ ⊤, ⁅g₁, g₂⁆ = g} ⊆ ↑K → f ⁅y, z⁆ ∈ K
state_after: no goals

tactic: simp [f.map_one, Subgroup.one_mem _]
state_before: G : Type u_1
inst✝² : Group G
H✝ : Subgroup G
inst✝¹ : H✝.Normal
H : Type u_2
inst✝ : Group H
f : G →* H
d : ℕ
hd : Subgroup.map f (lowerCentralSeries G d) ≤ lowerCentralSeries H d
x : G
hx : x ∈ lowerCentralSeries G d.succ
⊢ f 1 ∈ lowerCentralSeries H (d + 1)
state_after: no goals

tactic: simp [MonoidHom.map_mul, Subgroup.mul_mem _ hy hz]
state_before: G : Type u_1
inst✝² : Group G
H✝ : Subgroup G
inst✝¹ : H✝.Normal
H : Type u_2
inst✝ : Group H
f : G →* H
d : ℕ
hd : Subgroup.map f (lowerCentralSeries G d) ≤ lowerCentralSeries H d
x : G
hx : x ∈ lowerCentralSeries G d.succ
y z : G
hy : f y ∈ lowerCentralSeries H (d + 1)
hz : f z ∈ lowerCentralSeries H (d + 1)
⊢ f (y * z) ∈ lowerCentralSeries H (d + 1)
state_after: no goals

tactic: rw [f.map_inv]
state_before: G : Type u_1
inst✝² : Group G
H✝ : Subgroup G
inst✝¹ : H✝.Normal
H : Type u_2
inst✝ : Group H
f : G →* H
d : ℕ
hd : Subgroup.map f (lowerCentralSeries G d) ≤ lowerCentralSeries H d
x : G
hx : x ∈ lowerCentralSeries G d.succ
y : G
hy : f y ∈ lowerCentralSeries H (d + 1)
⊢ f y⁻¹ ∈ lowerCentralSeries H (d + 1)
state_after: G : Type u_1
inst✝² : Group G
H✝ : Subgroup G
inst✝¹ : H✝.Normal
H : Type u_2
inst✝ : Group H
f : G →* H
d : ℕ
hd : Subgroup.map f (lowerCentralSeries G d) ≤ lowerCentralSeries H d
x : G
hx : x ∈ lowerCentralSeries G d.succ
y : G
hy : f y ∈ lowerCentralSeries H (d + 1)
⊢ (f y)⁻¹ ∈ lowerCentralSeries H (d + 1)

tactic: exact Subgroup.inv_mem _ hy
state_before: G : Type u_1
inst✝² : Group G
H✝ : Subgroup G
inst✝¹ : H✝.Normal
H : Type u_2
inst✝ : Group H
f : G →* H
d : ℕ
hd : Subgroup.map f (lowerCentralSeries G d) ≤ lowerCentralSeries H d
x : G
hx : x ∈ lowerCentralSeries G d.succ
y : G
hy : f y ∈ lowerCentralSeries H (d + 1)
⊢ (f y)⁻¹ ∈ lowerCentralSeries H (d + 1)
state_after: no goals

tactic: simp [commutatorElement_def]
state_before: G : Type u_1
inst✝² : Group G
H✝ : Subgroup G
inst✝¹ : H✝.Normal
H : Type u_2
inst✝ : Group H
f : G →* H
d : ℕ
hd : Subgroup.map f (lowerCentralSeries G d) ≤ lowerCentralSeries H d
x : G
hx : x ∈ lowerCentralSeries G d.succ
y : G
hy : y ∈ lowerCentralSeries G d
z : G
K : Subgroup H
hK : {g | ∃ g₁ ∈ lowerCentralSeries H d, ∃ g₂ ∈ ⊤, ⁅g₁, g₂⁆ = g} ⊆ ↑K
⊢ ∃ g₂ ∈ ⊤, ⁅f y, g₂⁆ = f ⁅y, z⁆
state_after: no goals