Theorem: nilpotencyClass_le_of_ker_le_center
File: Mathlib/GroupTheory/Nilpotent.lean

tactic: haveI : IsNilpotent G := isNilpotent_of_ker_le_center f hf1 hH
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
hf1 : f.ker ≤ center G
hH : Group.IsNilpotent H
⊢ Group.nilpotencyClass G ≤ Group.nilpotencyClass H + 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
hf1 : f.ker ≤ center G
hH : Group.IsNilpotent H
this : Group.IsNilpotent G
⊢ Group.nilpotencyClass G ≤ Group.nilpotencyClass H + 1

tactic: rw [← lowerCentralSeries_length_eq_nilpotencyClass]
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
hf1 : f.ker ≤ center G
hH : Group.IsNilpotent H
this : Group.IsNilpotent G
⊢ Group.nilpotencyClass G ≤ Group.nilpotencyClass H + 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
hf1 : f.ker ≤ center G
hH : Group.IsNilpotent H
this : Group.IsNilpotent G
⊢ Nat.find ⋯ ≤ Group.nilpotencyClass H + 1

tactic: refine @Nat.find_min' _ (Classical.decPred _) _ _ ?_
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
hf1 : f.ker ≤ center G
hH : Group.IsNilpotent H
this : Group.IsNilpotent G
⊢ Nat.find ⋯ ≤ Group.nilpotencyClass H + 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
hf1 : f.ker ≤ center G
hH : Group.IsNilpotent H
this : Group.IsNilpotent G
⊢ lowerCentralSeries G (Group.nilpotencyClass H + 1) = ⊥

tactic: refine lowerCentralSeries_succ_eq_bot (le_trans ((Subgroup.map_eq_bot_iff _).mp ?_) hf1)
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
hf1 : f.ker ≤ center G
hH : Group.IsNilpotent H
this : Group.IsNilpotent G
⊢ lowerCentralSeries G (Group.nilpotencyClass H + 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
hf1 : f.ker ≤ center G
hH : Group.IsNilpotent H
this : Group.IsNilpotent G
⊢ Subgroup.map f (lowerCentralSeries G (Group.nilpotencyClass H)) = ⊥

tactic: rw [eq_bot_iff]
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
hf1 : f.ker ≤ center G
hH : Group.IsNilpotent H
this : Group.IsNilpotent G
⊢ Subgroup.map f (lowerCentralSeries G (Group.nilpotencyClass H)) = ⊥
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
hf1 : f.ker ≤ center G
hH : Group.IsNilpotent H
this : Group.IsNilpotent G
⊢ Subgroup.map f (lowerCentralSeries G (Group.nilpotencyClass H)) ≤ ⊥

tactic: apply le_trans (lowerCentralSeries.map f _)
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
hf1 : f.ker ≤ center G
hH : Group.IsNilpotent H
this : Group.IsNilpotent G
⊢ Subgroup.map f (lowerCentralSeries G (Group.nilpotencyClass H)) ≤ ⊥
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
hf1 : f.ker ≤ center G
hH : Group.IsNilpotent H
this : Group.IsNilpotent G
⊢ lowerCentralSeries H (Group.nilpotencyClass H) ≤ ⊥

tactic: simp only [lowerCentralSeries_nilpotencyClass, le_bot_iff]
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
hf1 : f.ker ≤ center G
hH : Group.IsNilpotent H
this : Group.IsNilpotent G
⊢ lowerCentralSeries H (Group.nilpotencyClass H) ≤ ⊥
state_after: no goals