Theorem: IsPGroup.iff_card
File: Mathlib/GroupTheory/PGroup.lean

Proof steps:
state_before: p : ℕ
G : Type u_1
inst✝² : Group G
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Finite G
⊢ IsPGroup p G ↔ ∃ n, Nat.card G = p ^ n
state_after: p : ℕ
G : Type u_1
inst✝² : Group G
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Finite G
hG : Nat.card G ≠ 0
⊢ IsPGroup p G ↔ ∃ n, Nat.card G = p ^ n
tactic: have hG : Nat.card G ≠ 0 := Nat.card_pos.ne'
state_before: p : ℕ
G : Type u_1
inst✝² : Group G
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Finite G
hG : Nat.card G ≠ 0
⊢ IsPGroup p G ↔ ∃ n, Nat.card G = p ^ n
state_after: p : ℕ
G : Type u_1
inst✝² : Group G
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Finite G
hG : Nat.card G ≠ 0
h : IsPGroup p G
⊢ ∃ n, Nat.card G = p ^ n
tactic: refine ⟨fun h => ?_, fun ⟨n, hn⟩ => of_card hn⟩
state_before: p : ℕ
G : Type u_1
inst✝² : Group G
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Finite G
hG : Nat.card G ≠ 0
h : IsPGroup p G
⊢ ∃ n, Nat.card G = p ^ n
state_after: p : ℕ
G : Type u_1
inst✝² : Group G
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Finite G
hG : Nat.card G ≠ 0
h : IsPGroup p G
⊢ ∀ q ∈ (Nat.card G).primeFactorsList, q = p
tactic: suffices ∀ q ∈ (Nat.card G).primeFactorsList, q = p by
    use (Nat.card G).primeFactorsList.length
    rw [← List.prod_replicate, ← List.eq_replicate_of_mem this, Nat.prod_primeFactorsList hG]
state_before: p : ℕ
G : Type u_1
inst✝² : Group G
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Finite G
hG : Nat.card G ≠ 0
h : IsPGroup p G
⊢ ∀ q ∈ (Nat.card G).primeFactorsList, q = p
state_after: p : ℕ
G : Type u_1
inst✝² : Group G
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Finite G
hG : Nat.card G ≠ 0
h : IsPGroup p G
q : ℕ
hq : q ∈ (Nat.card G).primeFactorsList
⊢ q = p
tactic: intro q hq
state_before: p : ℕ
G : Type u_1
inst✝² : Group G
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Finite G
hG : Nat.card G ≠ 0
h : IsPGroup p G
q : ℕ
hq : q ∈ (Nat.card G).primeFactorsList
⊢ q = p
state_after: case intro
p : ℕ
G : Type u_1
inst✝² : Group G
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Finite G
hG : Nat.card G ≠ 0
h : IsPGroup p G
q : ℕ
hq : q ∈ (Nat.card G).primeFactorsList
hq1 : Nat.Prime q
hq2 : q ∣ Nat.card G
⊢ q = p
tactic: obtain ⟨hq1, hq2⟩ := (Nat.mem_primeFactorsList hG).mp hq
state_before: case intro
p : ℕ
G : Type u_1
inst✝² : Group G
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Finite G
hG : Nat.card G ≠ 0
h : IsPGroup p G
q : ℕ
hq : q ∈ (Nat.card G).primeFactorsList
hq1 : Nat.Prime q
hq2 : q ∣ Nat.card G
⊢ q = p
state_after: case intro
p : ℕ
G : Type u_1
inst✝² : Group G
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Finite G
hG : Nat.card G ≠ 0
h : IsPGroup p G
q : ℕ
hq : q ∈ (Nat.card G).primeFactorsList
hq1 : Nat.Prime q
hq2 : q ∣ Nat.card G
this : Fact (Nat.Prime q)
⊢ q = p
tactic: haveI : Fact q.Prime := ⟨hq1⟩
state_before: case intro
p : ℕ
G : Type u_1
inst✝² : Group G
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Finite G
hG : Nat.card G ≠ 0
h : IsPGroup p G
q : ℕ
hq : q ∈ (Nat.card G).primeFactorsList
hq1 : Nat.Prime q
hq2 : q ∣ Nat.card G
this : Fact (Nat.Prime q)
⊢ q = p
state_after: case intro.intro
p : ℕ
G : Type u_1
inst✝² : Group G
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Finite G
hG : Nat.card G ≠ 0
h : IsPGroup p G
q : ℕ
hq : q ∈ (Nat.card G).primeFactorsList
hq1 : Nat.Prime q
hq2 : q ∣ Nat.card G
this : Fact (Nat.Prime q)
g : G
hg : orderOf g = q
⊢ q = p
tactic: obtain ⟨g, hg⟩ := exists_prime_orderOf_dvd_card' q hq2
state_before: case intro.intro
p : ℕ
G : Type u_1
inst✝² : Group G
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Finite G
hG : Nat.card G ≠ 0
h : IsPGroup p G
q : ℕ
hq : q ∈ (Nat.card G).primeFactorsList
hq1 : Nat.Prime q
hq2 : q ∣ Nat.card G
this : Fact (Nat.Prime q)
g : G
hg : orderOf g = q
⊢ q = p
state_after: case intro.intro.intro
p : ℕ
G : Type u_1
inst✝² : Group G
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Finite G
hG : Nat.card G ≠ 0
h : IsPGroup p G
q : ℕ
hq : q ∈ (Nat.card G).primeFactorsList
hq1 : Nat.Prime q
hq2 : q ∣ Nat.card G
this : Fact (Nat.Prime q)
g : G
hg : orderOf g = q
k : ℕ
hk : orderOf g = p ^ k
⊢ q = p
tactic: obtain ⟨k, hk⟩ := (iff_orderOf.mp h) g
state_before: case intro.intro.intro
p : ℕ
G : Type u_1
inst✝² : Group G
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Finite G
hG : Nat.card G ≠ 0
h : IsPGroup p G
q : ℕ
hq : q ∈ (Nat.card G).primeFactorsList
hq1 : Nat.Prime q
hq2 : q ∣ Nat.card G
this : Fact (Nat.Prime q)
g : G
hg : orderOf g = q
k : ℕ
hk : orderOf g = p ^ k
⊢ q = p
state_after: no goals
tactic: exact (hq1.pow_eq_iff.mp (hg.symm.trans hk).symm).1.symm