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

tactic: rw [normalizerCondition_iff_only_full_group_self_normalizing]
state_before: G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : Normal H
h : Group.IsNilpotent G
⊢ NormalizerCondition G

tactic: apply @nilpotent_center_quotient_ind _ G _ _ <;> clear! G
state_before: G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : Normal H
h : Group.IsNilpotent G
⊢ ∀ (H : Subgroup G), normalizer H = H → H = ⊤

tactic: intro G _ _ H _
state_before: case hbase

⊢ ∀ (G : Type u_1) [inst : Group G] [inst_1 : Subsingleton G] (H : Subgroup G), normalizer H = H → H = ⊤

tactic: exact @Subsingleton.elim _ Unique.instSubsingleton _ _
state_before: case hbase
G : Type u_1
inst✝¹ : Group G
inst✝ : Subsingleton G
H : Subgroup G
a✝ : normalizer H = H
⊢ H = ⊤

tactic: intro G _ _ ih H hH
state_before: case hstep

⊢ ∀ (G : Type u_1) [inst : Group G] [inst_1 : Group.IsNilpotent G],
    (∀ (H : Subgroup (G ⧸ center G)), normalizer H = H → H = ⊤) → ∀ (H : Subgroup G), normalizer H = H → H = ⊤

tactic: have hch : center G ≤ H := Subgroup.center_le_normalizer.trans (le_of_eq hH)
state_before: case hstep
G : Type u_1
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
ih : ∀ (H : Subgroup (G ⧸ center G)), normalizer H = H → H = ⊤
H : Subgroup G
hH : normalizer H = H
⊢ H = ⊤

tactic: have hkh : (mk' (center G)).ker ≤ H := by simpa using hch
state_before: case hstep
G : Type u_1
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
ih : ∀ (H : Subgroup (G ⧸ center G)), normalizer H = H → H = ⊤
H : Subgroup G
hH : normalizer H = H
hch : center G ≤ H
⊢ H = ⊤

tactic: have hsur : Function.Surjective (mk' (center G)) := surjective_quot_mk _
state_before: case hstep
G : Type u_1
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
ih : ∀ (H : Subgroup (G ⧸ center G)), normalizer H = H → H = ⊤
H : Subgroup G
hH : normalizer H = H
hch : center G ≤ H
hkh : MonoidHom.ker (mk' (center G)) ≤ H
⊢ H = ⊤

tactic: let H' := H.map (mk' (center G))
state_before: case hstep
G : Type u_1
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
ih : ∀ (H : Subgroup (G ⧸ center G)), normalizer H = H → H = ⊤
H : Subgroup G
hH : normalizer H = H
hch : center G ≤ H
hkh : MonoidHom.ker (mk' (center G)) ≤ H
hsur : Function.Surjective ↑(mk' (center G))
⊢ H = ⊤

tactic: have hH' : H'.normalizer = H' := by
  apply comap_injective hsur
  rw [comap_normalizer_eq_of_surjective _ hsur, comap_map_eq_self hkh]
  exact hH
state_before: case hstep
G : Type u_1
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
ih : ∀ (H : Subgroup (G ⧸ center G)), normalizer H = H → H = ⊤
H : Subgroup G
hH : normalizer H = H
hch : center G ≤ H
hkh : MonoidHom.ker (mk' (center G)) ≤ H
hsur : Function.Surjective ↑(mk' (center G))
H' : Subgroup (G ⧸ center G) := Subgroup.map (mk' (center G)) H
⊢ H = ⊤

tactic: apply map_injective_of_ker_le (mk' (center G)) hkh le_top
state_before: case hstep
G : Type u_1
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
ih : ∀ (H : Subgroup (G ⧸ center G)), normalizer H = H → H = ⊤
H : Subgroup G
hH : normalizer H = H
hch : center G ≤ H
hkh : MonoidHom.ker (mk' (center G)) ≤ H
hsur : Function.Surjective ↑(mk' (center G))
H' : Subgroup (G ⧸ center G) := Subgroup.map (mk' (center G)) H
hH' : normalizer H' = H'
⊢ H = ⊤

tactic: exact (ih H' hH').trans (symm (map_top_of_surjective _ hsur))
state_before: case hstep
G : Type u_1
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
ih : ∀ (H : Subgroup (G ⧸ center G)), normalizer H = H → H = ⊤
H : Subgroup G
hH : normalizer H = H
hch : center G ≤ H
hkh : MonoidHom.ker (mk' (center G)) ≤ H
hsur : Function.Surjective ↑(mk' (center G))
H' : Subgroup (G ⧸ center G) := Subgroup.map (mk' (center G)) H
hH' : normalizer H' = H'
⊢ Subgroup.map (mk' (center G)) H = Subgroup.map (mk' (center G)) ⊤

tactic: simpa using hch
state_before: G : Type u_1
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
ih : ∀ (H : Subgroup (G ⧸ center G)), normalizer H = H → H = ⊤
H : Subgroup G
hH : normalizer H = H
hch : center G ≤ H
⊢ MonoidHom.ker (mk' (center G)) ≤ H

tactic: apply comap_injective hsur
state_before: G : Type u_1
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
ih : ∀ (H : Subgroup (G ⧸ center G)), normalizer H = H → H = ⊤
H : Subgroup G
hH : normalizer H = H
hch : center G ≤ H
hkh : MonoidHom.ker (mk' (center G)) ≤ H
hsur : Function.Surjective ↑(mk' (center G))
H' : Subgroup (G ⧸ center G) := Subgroup.map (mk' (center G)) H
⊢ normalizer H' = H'

tactic: rw [comap_normalizer_eq_of_surjective _ hsur, comap_map_eq_self hkh]
state_before: case a
G : Type u_1
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
ih : ∀ (H : Subgroup (G ⧸ center G)), normalizer H = H → H = ⊤
H : Subgroup G
hH : normalizer H = H
hch : center G ≤ H
hkh : MonoidHom.ker (mk' (center G)) ≤ H
hsur : Function.Surjective ↑(mk' (center G))
H' : Subgroup (G ⧸ center G) := Subgroup.map (mk' (center G)) H
⊢ comap (mk' (center G)) (normalizer H') = comap (mk' (center G)) H'

tactic: exact hH
state_before: case a
G : Type u_1
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
ih : ∀ (H : Subgroup (G ⧸ center G)), normalizer H = H → H = ⊤
H : Subgroup G
hH : normalizer H = H
hch : center G ≤ H
hkh : MonoidHom.ker (mk' (center G)) ≤ H
hsur : Function.Surjective ↑(mk' (center G))
H' : Subgroup (G ⧸ center G) := Subgroup.map (mk' (center G)) H
⊢ normalizer H = H