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

tactic: generalize hn : Group.nilpotencyClass G = n
state_before: G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hH : Group.IsNilpotent G
⊢ Group.nilpotencyClass (G ⧸ center G) = Group.nilpotencyClass G - 1
state_after: G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hH : Group.IsNilpotent G
n : ℕ
hn : Group.nilpotencyClass G = n
⊢ Group.nilpotencyClass (G ⧸ center G) = n - 1

tactic: rcases n with (rfl | n)
state_before: G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hH : Group.IsNilpotent G
n : ℕ
hn : Group.nilpotencyClass G = n
⊢ Group.nilpotencyClass (G ⧸ center G) = n - 1
state_after: case zero
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hH : Group.IsNilpotent G
hn : Group.nilpotencyClass G = 0
⊢ Group.nilpotencyClass (G ⧸ center G) = 0 - 1

case succ
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hH : Group.IsNilpotent G
n : ℕ
hn : Group.nilpotencyClass G = n + 1
⊢ Group.nilpotencyClass (G ⧸ center G) = n + 1 - 1

tactic: simp [nilpotencyClass_zero_iff_subsingleton] at *
state_before: case zero
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hH : Group.IsNilpotent G
hn : Group.nilpotencyClass G = 0
⊢ Group.nilpotencyClass (G ⧸ center G) = 0 - 1
state_after: case zero
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hH : Group.IsNilpotent G
hn : Subsingleton G
⊢ Subsingleton (G ⧸ center G)

tactic: exact Quotient.instSubsingletonQuotient (leftRel (center G))
state_before: case zero
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hH : Group.IsNilpotent G
hn : Subsingleton G
⊢ Subsingleton (G ⧸ center G)
state_after: no goals

tactic: suffices Group.nilpotencyClass (G ⧸ center G) = n by simpa
state_before: case succ
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hH : Group.IsNilpotent G
n : ℕ
hn : Group.nilpotencyClass G = n + 1
⊢ Group.nilpotencyClass (G ⧸ center G) = n + 1 - 1
state_after: case succ
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hH : Group.IsNilpotent G
n : ℕ
hn : Group.nilpotencyClass G = n + 1
⊢ Group.nilpotencyClass (G ⧸ center G) = n

tactic: apply le_antisymm
state_before: case succ
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hH : Group.IsNilpotent G
n : ℕ
hn : Group.nilpotencyClass G = n + 1
⊢ Group.nilpotencyClass (G ⧸ center G) = n
state_after: case succ.a
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hH : Group.IsNilpotent G
n : ℕ
hn : Group.nilpotencyClass G = n + 1
⊢ Group.nilpotencyClass (G ⧸ center G) ≤ n

case succ.a
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hH : Group.IsNilpotent G
n : ℕ
hn : Group.nilpotencyClass G = n + 1
⊢ n ≤ Group.nilpotencyClass (G ⧸ center G)

tactic: simpa
state_before: G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hH : Group.IsNilpotent G
n : ℕ
hn : Group.nilpotencyClass G = n + 1
this : Group.nilpotencyClass (G ⧸ center G) = n
⊢ Group.nilpotencyClass (G ⧸ center G) = n + 1 - 1
state_after: no goals

tactic: apply upperCentralSeries_eq_top_iff_nilpotencyClass_le.mp
state_before: case succ.a
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hH : Group.IsNilpotent G
n : ℕ
hn : Group.nilpotencyClass G = n + 1
⊢ Group.nilpotencyClass (G ⧸ center G) ≤ n
state_after: case succ.a
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hH : Group.IsNilpotent G
n : ℕ
hn : Group.nilpotencyClass G = n + 1
⊢ upperCentralSeries (G ⧸ center G) n = ⊤

tactic: apply comap_injective (f := (mk' (center G))) (surjective_quot_mk _)
state_before: case succ.a
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hH : Group.IsNilpotent G
n : ℕ
hn : Group.nilpotencyClass G = n + 1
⊢ upperCentralSeries (G ⧸ center G) n = ⊤
state_after: case succ.a.a
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hH : Group.IsNilpotent G
n : ℕ
hn : Group.nilpotencyClass G = n + 1
⊢ comap (mk' (center G)) (upperCentralSeries (G ⧸ center G) n) = comap (mk' (center G)) ⊤

tactic: rw [comap_upperCentralSeries_quotient_center, comap_top, Nat.succ_eq_add_one, ← hn]
state_before: case succ.a.a
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hH : Group.IsNilpotent G
n : ℕ
hn : Group.nilpotencyClass G = n + 1
⊢ comap (mk' (center G)) (upperCentralSeries (G ⧸ center G) n) = comap (mk' (center G)) ⊤
state_after: case succ.a.a
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hH : Group.IsNilpotent G
n : ℕ
hn : Group.nilpotencyClass G = n + 1
⊢ upperCentralSeries G (Group.nilpotencyClass G) = ⊤

tactic: exact upperCentralSeries_nilpotencyClass
state_before: case succ.a.a
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hH : Group.IsNilpotent G
n : ℕ
hn : Group.nilpotencyClass G = n + 1
⊢ upperCentralSeries G (Group.nilpotencyClass G) = ⊤
state_after: no goals

tactic: apply le_of_add_le_add_right
state_before: case succ.a
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hH : Group.IsNilpotent G
n : ℕ
hn : Group.nilpotencyClass G = n + 1
⊢ n ≤ Group.nilpotencyClass (G ⧸ center G)
state_after: case succ.a.bc
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hH : Group.IsNilpotent G
n : ℕ
hn : Group.nilpotencyClass G = n + 1
⊢ n + ?succ.a.a ≤ Group.nilpotencyClass (G ⧸ center G) + ?succ.a.a

case succ.a.a
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hH : Group.IsNilpotent G
n : ℕ
hn : Group.nilpotencyClass G = n + 1
⊢ ℕ

tactic: calc
  n + 1 = Group.nilpotencyClass G := hn.symm
  _ ≤ Group.nilpotencyClass (G ⧸ center G) + 1 :=
    nilpotencyClass_le_of_ker_le_center _ (le_of_eq (ker_mk' _)) _
state_before: case succ.a.bc
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hH : Group.IsNilpotent G
n : ℕ
hn : Group.nilpotencyClass G = n + 1
⊢ n + ?succ.a.a ≤ Group.nilpotencyClass (G ⧸ center G) + ?succ.a.a

case succ.a.a
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hH : Group.IsNilpotent G
n : ℕ
hn : Group.nilpotencyClass G = n + 1
⊢ ℕ
state_after: no goals