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

tactic: obtain ⟨n, h⟩ : ∃ n, Group.nilpotencyClass G = n := ⟨_, rfl⟩
state_before: G✝ : Type u_1
inst✝³ : Group G✝
H : Subgroup G✝
inst✝² : H.Normal
P : (G : Type u_2) → [inst : Group G] → [inst : Group.IsNilpotent G] → Prop
G : Type u_2
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
hbase : ∀ (G : Type u_2) [inst : Group G] [inst_1 : Subsingleton G], P G
hstep : ∀ (G : Type u_2) [inst : Group G] [inst_1 : Group.IsNilpotent G], P (G ⧸ center G) → P G
⊢ P G
state_after: case intro
G✝ : Type u_1
inst✝³ : Group G✝
H : Subgroup G✝
inst✝² : H.Normal
P : (G : Type u_2) → [inst : Group G] → [inst : Group.IsNilpotent G] → Prop
G : Type u_2
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
hbase : ∀ (G : Type u_2) [inst : Group G] [inst_1 : Subsingleton G], P G
hstep : ∀ (G : Type u_2) [inst : Group G] [inst_1 : Group.IsNilpotent G], P (G ⧸ center G) → P G
n : ℕ
h : Group.nilpotencyClass G = n
⊢ P G

tactic: induction' n with n ih generalizing G
state_before: case intro
G✝ : Type u_1
inst✝³ : Group G✝
H : Subgroup G✝
inst✝² : H.Normal
P : (G : Type u_2) → [inst : Group G] → [inst : Group.IsNilpotent G] → Prop
G : Type u_2
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
hbase : ∀ (G : Type u_2) [inst : Group G] [inst_1 : Subsingleton G], P G
hstep : ∀ (G : Type u_2) [inst : Group G] [inst_1 : Group.IsNilpotent G], P (G ⧸ center G) → P G
n : ℕ
h : Group.nilpotencyClass G = n
⊢ P G
state_after: case intro.zero
G✝ : Type u_1
inst✝³ : Group G✝
H : Subgroup G✝
inst✝² : H.Normal
P : (G : Type u_2) → [inst : Group G] → [inst : Group.IsNilpotent G] → Prop
hbase : ∀ (G : Type u_2) [inst : Group G] [inst_1 : Subsingleton G], P G
hstep : ∀ (G : Type u_2) [inst : Group G] [inst_1 : Group.IsNilpotent G], P (G ⧸ center G) → P G
G : Type u_2
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
h : Group.nilpotencyClass G = 0
⊢ P G

case intro.succ
G✝ : Type u_1
inst✝³ : Group G✝
H : Subgroup G✝
inst✝² : H.Normal
P : (G : Type u_2) → [inst : Group G] → [inst : Group.IsNilpotent G] → Prop
hbase : ∀ (G : Type u_2) [inst : Group G] [inst_1 : Subsingleton G], P G
hstep : ∀ (G : Type u_2) [inst : Group G] [inst_1 : Group.IsNilpotent G], P (G ⧸ center G) → P G
n : ℕ
ih : ∀ (G : Type u_2) [inst : Group G] [inst_1 : Group.IsNilpotent G], Group.nilpotencyClass G = n → P G
G : Type u_2
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
h : Group.nilpotencyClass G = n + 1
⊢ P G

tactic: haveI := nilpotencyClass_zero_iff_subsingleton.mp h
state_before: case intro.zero
G✝ : Type u_1
inst✝³ : Group G✝
H : Subgroup G✝
inst✝² : H.Normal
P : (G : Type u_2) → [inst : Group G] → [inst : Group.IsNilpotent G] → Prop
hbase : ∀ (G : Type u_2) [inst : Group G] [inst_1 : Subsingleton G], P G
hstep : ∀ (G : Type u_2) [inst : Group G] [inst_1 : Group.IsNilpotent G], P (G ⧸ center G) → P G
G : Type u_2
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
h : Group.nilpotencyClass G = 0
⊢ P G
state_after: case intro.zero
G✝ : Type u_1
inst✝³ : Group G✝
H : Subgroup G✝
inst✝² : H.Normal
P : (G : Type u_2) → [inst : Group G] → [inst : Group.IsNilpotent G] → Prop
hbase : ∀ (G : Type u_2) [inst : Group G] [inst_1 : Subsingleton G], P G
hstep : ∀ (G : Type u_2) [inst : Group G] [inst_1 : Group.IsNilpotent G], P (G ⧸ center G) → P G
G : Type u_2
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
h : Group.nilpotencyClass G = 0
this : Subsingleton G
⊢ P G

tactic: exact hbase _
state_before: case intro.zero
G✝ : Type u_1
inst✝³ : Group G✝
H : Subgroup G✝
inst✝² : H.Normal
P : (G : Type u_2) → [inst : Group G] → [inst : Group.IsNilpotent G] → Prop
hbase : ∀ (G : Type u_2) [inst : Group G] [inst_1 : Subsingleton G], P G
hstep : ∀ (G : Type u_2) [inst : Group G] [inst_1 : Group.IsNilpotent G], P (G ⧸ center G) → P G
G : Type u_2
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
h : Group.nilpotencyClass G = 0
this : Subsingleton G
⊢ P G
state_after: no goals

tactic: have hn : Group.nilpotencyClass (G ⧸ center G) = n := by
  simp [nilpotencyClass_quotient_center, h]
state_before: case intro.succ
G✝ : Type u_1
inst✝³ : Group G✝
H : Subgroup G✝
inst✝² : H.Normal
P : (G : Type u_2) → [inst : Group G] → [inst : Group.IsNilpotent G] → Prop
hbase : ∀ (G : Type u_2) [inst : Group G] [inst_1 : Subsingleton G], P G
hstep : ∀ (G : Type u_2) [inst : Group G] [inst_1 : Group.IsNilpotent G], P (G ⧸ center G) → P G
n : ℕ
ih : ∀ (G : Type u_2) [inst : Group G] [inst_1 : Group.IsNilpotent G], Group.nilpotencyClass G = n → P G
G : Type u_2
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
h : Group.nilpotencyClass G = n + 1
⊢ P G
state_after: case intro.succ
G✝ : Type u_1
inst✝³ : Group G✝
H : Subgroup G✝
inst✝² : H.Normal
P : (G : Type u_2) → [inst : Group G] → [inst : Group.IsNilpotent G] → Prop
hbase : ∀ (G : Type u_2) [inst : Group G] [inst_1 : Subsingleton G], P G
hstep : ∀ (G : Type u_2) [inst : Group G] [inst_1 : Group.IsNilpotent G], P (G ⧸ center G) → P G
n : ℕ
ih : ∀ (G : Type u_2) [inst : Group G] [inst_1 : Group.IsNilpotent G], Group.nilpotencyClass G = n → P G
G : Type u_2
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
h : Group.nilpotencyClass G = n + 1
hn : Group.nilpotencyClass (G ⧸ center G) = n
⊢ P G

tactic: exact hstep _ (ih _ hn)
state_before: case intro.succ
G✝ : Type u_1
inst✝³ : Group G✝
H : Subgroup G✝
inst✝² : H.Normal
P : (G : Type u_2) → [inst : Group G] → [inst : Group.IsNilpotent G] → Prop
hbase : ∀ (G : Type u_2) [inst : Group G] [inst_1 : Subsingleton G], P G
hstep : ∀ (G : Type u_2) [inst : Group G] [inst_1 : Group.IsNilpotent G], P (G ⧸ center G) → P G
n : ℕ
ih : ∀ (G : Type u_2) [inst : Group G] [inst_1 : Group.IsNilpotent G], Group.nilpotencyClass G = n → P G
G : Type u_2
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
h : Group.nilpotencyClass G = n + 1
hn : Group.nilpotencyClass (G ⧸ center G) = n
⊢ P G
state_after: no goals

tactic: simp [nilpotencyClass_quotient_center, h]
state_before: G✝ : Type u_1
inst✝³ : Group G✝
H : Subgroup G✝
inst✝² : H.Normal
P : (G : Type u_2) → [inst : Group G] → [inst : Group.IsNilpotent G] → Prop
hbase : ∀ (G : Type u_2) [inst : Group G] [inst_1 : Subsingleton G], P G
hstep : ∀ (G : Type u_2) [inst : Group G] [inst_1 : Group.IsNilpotent G], P (G ⧸ center G) → P G
n : ℕ
ih : ∀ (G : Type u_2) [inst : Group G] [inst_1 : Group.IsNilpotent G], Group.nilpotencyClass G = n → P G
G : Type u_2
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
h : Group.nilpotencyClass G = n + 1
⊢ Group.nilpotencyClass (G ⧸ center G) = n
state_after: no goals