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✝ : H.Normal
h : Group.IsNilpotent G
⊢ NormalizerCondition G
state_after: G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
h : Group.IsNilpotent G
⊢ ∀ (H : Subgroup G), H.normalizer = H → H = ⊤

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

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

case hstep

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

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

⊢ ∀ (G : Type u_1) [inst : Group G] [inst_1 : Subsingleton G] (H : Subgroup G), H.normalizer = H → H = ⊤
state_after: case hbase
G : Type u_1
inst✝¹ : Group G
inst✝ : Subsingleton G
H : Subgroup G
a✝ : H.normalizer = 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✝ : H.normalizer = H
⊢ H = ⊤
state_after: no goals

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)), H.normalizer = H → H = ⊤) → ∀ (H : Subgroup G), H.normalizer = H → H = ⊤
state_after: case hstep
G : Type u_1
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
ih : ∀ (H : Subgroup (G ⧸ center G)), H.normalizer = H → H = ⊤
H : Subgroup G
hH : H.normalizer = 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)), H.normalizer = H → H = ⊤
H : Subgroup G
hH : H.normalizer = H
⊢ H = ⊤
state_after: case hstep
G : Type u_1
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
ih : ∀ (H : Subgroup (G ⧸ center G)), H.normalizer = H → H = ⊤
H : Subgroup G
hH : H.normalizer = H
hch : center G ≤ 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)), H.normalizer = H → H = ⊤
H : Subgroup G
hH : H.normalizer = H
hch : center G ≤ H
⊢ H = ⊤
state_after: case hstep
G : Type u_1
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
ih : ∀ (H : Subgroup (G ⧸ center G)), H.normalizer = H → H = ⊤
H : Subgroup G
hH : H.normalizer = H
hch : center G ≤ H
hkh : (mk' (center G)).ker ≤ 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)), H.normalizer = H → H = ⊤
H : Subgroup G
hH : H.normalizer = H
hch : center G ≤ H
hkh : (mk' (center G)).ker ≤ H
⊢ H = ⊤
state_after: case hstep
G : Type u_1
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
ih : ∀ (H : Subgroup (G ⧸ center G)), H.normalizer = H → H = ⊤
H : Subgroup G
hH : H.normalizer = H
hch : center G ≤ H
hkh : (mk' (center G)).ker ≤ H
hsur : Function.Surjective ⇑(mk' (center G))
⊢ 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)), H.normalizer = H → H = ⊤
H : Subgroup G
hH : H.normalizer = H
hch : center G ≤ H
hkh : (mk' (center G)).ker ≤ H
hsur : Function.Surjective ⇑(mk' (center G))
⊢ H = ⊤
state_after: case hstep
G : Type u_1
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
ih : ∀ (H : Subgroup (G ⧸ center G)), H.normalizer = H → H = ⊤
H : Subgroup G
hH : H.normalizer = H
hch : center G ≤ H
hkh : (mk' (center G)).ker ≤ H
hsur : Function.Surjective ⇑(mk' (center G))
H' : Subgroup (G ⧸ center G) := Subgroup.map (mk' (center G)) H
⊢ 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)), H.normalizer = H → H = ⊤
H : Subgroup G
hH : H.normalizer = H
hch : center G ≤ H
hkh : (mk' (center G)).ker ≤ H
hsur : Function.Surjective ⇑(mk' (center G))
H' : Subgroup (G ⧸ center G) := Subgroup.map (mk' (center G)) H
⊢ H = ⊤
state_after: case hstep
G : Type u_1
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
ih : ∀ (H : Subgroup (G ⧸ center G)), H.normalizer = H → H = ⊤
H : Subgroup G
hH : H.normalizer = H
hch : center G ≤ H
hkh : (mk' (center G)).ker ≤ H
hsur : Function.Surjective ⇑(mk' (center G))
H' : Subgroup (G ⧸ center G) := Subgroup.map (mk' (center G)) H
hH' : H'.normalizer = 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)), H.normalizer = H → H = ⊤
H : Subgroup G
hH : H.normalizer = H
hch : center G ≤ H
hkh : (mk' (center G)).ker ≤ H
hsur : Function.Surjective ⇑(mk' (center G))
H' : Subgroup (G ⧸ center G) := Subgroup.map (mk' (center G)) H
hH' : H'.normalizer = H'
⊢ H = ⊤
state_after: case hstep
G : Type u_1
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
ih : ∀ (H : Subgroup (G ⧸ center G)), H.normalizer = H → H = ⊤
H : Subgroup G
hH : H.normalizer = H
hch : center G ≤ H
hkh : (mk' (center G)).ker ≤ H
hsur : Function.Surjective ⇑(mk' (center G))
H' : Subgroup (G ⧸ center G) := Subgroup.map (mk' (center G)) H
hH' : H'.normalizer = H'
⊢ Subgroup.map (mk' (center G)) H = Subgroup.map (mk' (center G)) ⊤

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)), H.normalizer = H → H = ⊤
H : Subgroup G
hH : H.normalizer = H
hch : center G ≤ H
hkh : (mk' (center G)).ker ≤ H
hsur : Function.Surjective ⇑(mk' (center G))
H' : Subgroup (G ⧸ center G) := Subgroup.map (mk' (center G)) H
hH' : H'.normalizer = H'
⊢ Subgroup.map (mk' (center G)) H = Subgroup.map (mk' (center G)) ⊤
state_after: no goals

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

tactic: apply comap_injective hsur
state_before: G : Type u_1
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
ih : ∀ (H : Subgroup (G ⧸ center G)), H.normalizer = H → H = ⊤
H : Subgroup G
hH : H.normalizer = H
hch : center G ≤ H
hkh : (mk' (center G)).ker ≤ H
hsur : Function.Surjective ⇑(mk' (center G))
H' : Subgroup (G ⧸ center G) := Subgroup.map (mk' (center G)) H
⊢ H'.normalizer = H'
state_after: case a
G : Type u_1
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
ih : ∀ (H : Subgroup (G ⧸ center G)), H.normalizer = H → H = ⊤
H : Subgroup G
hH : H.normalizer = H
hch : center G ≤ H
hkh : (mk' (center G)).ker ≤ H
hsur : Function.Surjective ⇑(mk' (center G))
H' : Subgroup (G ⧸ center G) := Subgroup.map (mk' (center G)) H
⊢ comap (mk' (center G)) H'.normalizer = comap (mk' (center G)) 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)), H.normalizer = H → H = ⊤
H : Subgroup G
hH : H.normalizer = H
hch : center G ≤ H
hkh : (mk' (center G)).ker ≤ H
hsur : Function.Surjective ⇑(mk' (center G))
H' : Subgroup (G ⧸ center G) := Subgroup.map (mk' (center G)) H
⊢ comap (mk' (center G)) H'.normalizer = comap (mk' (center G)) H'
state_after: case a
G : Type u_1
inst✝¹ : Group G
inst✝ : Group.IsNilpotent G
ih : ∀ (H : Subgroup (G ⧸ center G)), H.normalizer = H → H = ⊤
H : Subgroup G
hH : H.normalizer = H
hch : center G ≤ H
hkh : (mk' (center G)).ker ≤ H
hsur : Function.Surjective ⇑(mk' (center G))
H' : Subgroup (G ⧸ center G) := Subgroup.map (mk' (center G)) H
⊢ H.normalizer = 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)), H.normalizer = H → H = ⊤
H : Subgroup G
hH : H.normalizer = H
hch : center G ≤ H
hkh : (mk' (center G)).ker ≤ H
hsur : Function.Surjective ⇑(mk' (center G))
H' : Subgroup (G ⧸ center G) := Subgroup.map (mk' (center G)) H
⊢ H.normalizer = H
state_after: no goals