Theorem: isCyclic_of_prime_card
File: Mathlib/GroupTheory/SpecificGroups/Cyclic.lean

tactic: obtain ⟨g, hg⟩ : ∃ g : α, g ≠ 1 := Fintype.exists_ne_of_one_lt_card (h.symm ▸ hp.1.one_lt) 1
state_before: α✝ : Type u
a : α✝
inst✝² : Group α✝
α : Type u
inst✝¹ : Group α
inst✝ : Fintype α
p : ℕ
hp : Fact (Nat.Prime p)
h : Fintype.card α = p
⊢ ∃ g, ∀ (x : α), x ∈ zpowers g

tactic: have : Fintype.card (Subgroup.zpowers g) ∣ p := by
  rw [← h]
  apply card_subgroup_dvd_card
state_before: case intro
α✝ : Type u
a : α✝
inst✝² : Group α✝
α : Type u
inst✝¹ : Group α
inst✝ : Fintype α
p : ℕ
hp : Fact (Nat.Prime p)
h : Fintype.card α = p
g : α
hg : g ≠ 1
⊢ ∃ g, ∀ (x : α), x ∈ zpowers g

tactic: rw [Nat.dvd_prime hp.1] at this
state_before: case intro
α✝ : Type u
a : α✝
inst✝² : Group α✝
α : Type u
inst✝¹ : Group α
inst✝ : Fintype α
p : ℕ
hp : Fact (Nat.Prime p)
h : Fintype.card α = p
g : α
hg : g ≠ 1
this : Fintype.card { x // x ∈ zpowers g } ∣ p
⊢ ∃ g, ∀ (x : α), x ∈ zpowers g

tactic: cases' this with that that
state_before: case intro
α✝ : Type u
a : α✝
inst✝² : Group α✝
α : Type u
inst✝¹ : Group α
inst✝ : Fintype α
p : ℕ
hp : Fact (Nat.Prime p)
h : Fintype.card α = p
g : α
hg : g ≠ 1
this : Fintype.card { x // x ∈ zpowers g } = 1 ∨ Fintype.card { x // x ∈ zpowers g } = p
⊢ ∃ g, ∀ (x : α), x ∈ zpowers g

tactic: rw [← h]
state_before: α✝ : Type u
a : α✝
inst✝² : Group α✝
α : Type u
inst✝¹ : Group α
inst✝ : Fintype α
p : ℕ
hp : Fact (Nat.Prime p)
h : Fintype.card α = p
g : α
hg : g ≠ 1
⊢ Fintype.card { x // x ∈ zpowers g } ∣ p

tactic: apply card_subgroup_dvd_card
state_before: α✝ : Type u
a : α✝
inst✝² : Group α✝
α : Type u
inst✝¹ : Group α
inst✝ : Fintype α
p : ℕ
hp : Fact (Nat.Prime p)
h : Fintype.card α = p
g : α
hg : g ≠ 1
⊢ Fintype.card { x // x ∈ zpowers g } ∣ Fintype.card α

tactic: rw [Fintype.card_eq_one_iff] at that
state_before: case intro.inl
α✝ : Type u
a : α✝
inst✝² : Group α✝
α : Type u
inst✝¹ : Group α
inst✝ : Fintype α
p : ℕ
hp : Fact (Nat.Prime p)
h : Fintype.card α = p
g : α
hg : g ≠ 1
that : Fintype.card { x // x ∈ zpowers g } = 1
⊢ ∃ g, ∀ (x : α), x ∈ zpowers g

tactic: cases' that with t ht
state_before: case intro.inl
α✝ : Type u
a : α✝
inst✝² : Group α✝
α : Type u
inst✝¹ : Group α
inst✝ : Fintype α
p : ℕ
hp : Fact (Nat.Prime p)
h : Fintype.card α = p
g : α
hg : g ≠ 1
that : ∃ x, ∀ (y : { x // x ∈ zpowers g }), y = x
⊢ ∃ g, ∀ (x : α), x ∈ zpowers g

tactic: suffices g = 1 by contradiction
state_before: case intro.inl.intro
α✝ : Type u
a : α✝
inst✝² : Group α✝
α : Type u
inst✝¹ : Group α
inst✝ : Fintype α
p : ℕ
hp : Fact (Nat.Prime p)
h : Fintype.card α = p
g : α
hg : g ≠ 1
t : { x // x ∈ zpowers g }
ht : ∀ (y : { x // x ∈ zpowers g }), y = t
⊢ ∃ g, ∀ (x : α), x ∈ zpowers g

tactic: have hgt :=
  ht
    ⟨g, by
      change g ∈ Subgroup.zpowers g
      exact Subgroup.mem_zpowers g⟩
state_before: case intro.inl.intro
α✝ : Type u
a : α✝
inst✝² : Group α✝
α : Type u
inst✝¹ : Group α
inst✝ : Fintype α
p : ℕ
hp : Fact (Nat.Prime p)
h : Fintype.card α = p
g : α
hg : g ≠ 1
t : { x // x ∈ zpowers g }
ht : ∀ (y : { x // x ∈ zpowers g }), y = t
⊢ g = 1

tactic: rw [← ht 1] at hgt
state_before: case intro.inl.intro
α✝ : Type u
a : α✝
inst✝² : Group α✝
α : Type u
inst✝¹ : Group α
inst✝ : Fintype α
p : ℕ
hp : Fact (Nat.Prime p)
h : Fintype.card α = p
g : α
hg : g ≠ 1
t : { x // x ∈ zpowers g }
ht : ∀ (y : { x // x ∈ zpowers g }), y = t
hgt : { val := g, property := (_ : g ∈ zpowers g) } = t
⊢ g = 1

tactic: change (⟨_, _⟩ : Subgroup.zpowers g) = ⟨_, _⟩ at hgt
state_before: case intro.inl.intro
α✝ : Type u
a : α✝
inst✝² : Group α✝
α : Type u
inst✝¹ : Group α
inst✝ : Fintype α
p : ℕ
hp : Fact (Nat.Prime p)
h : Fintype.card α = p
g : α
hg : g ≠ 1
t : { x // x ∈ zpowers g }
ht : ∀ (y : { x // x ∈ zpowers g }), y = t
hgt : { val := g, property := (_ : g ∈ zpowers g) } = 1
⊢ g = 1

tactic: simpa using hgt
state_before: case intro.inl.intro
α✝ : Type u
a : α✝
inst✝² : Group α✝
α : Type u
inst✝¹ : Group α
inst✝ : Fintype α
p : ℕ
hp : Fact (Nat.Prime p)
h : Fintype.card α = p
g : α
hg : g ≠ 1
t : { x // x ∈ zpowers g }
ht : ∀ (y : { x // x ∈ zpowers g }), y = t
hgt : { val := g, property := (_ : g ∈ zpowers g) } = { val := 1, property := (_ : 1 ∈ (zpowers g).toSubmonoid) }
⊢ g = 1

tactic: contradiction
state_before: α✝ : Type u
a : α✝
inst✝² : Group α✝
α : Type u
inst✝¹ : Group α
inst✝ : Fintype α
p : ℕ
hp : Fact (Nat.Prime p)
h : Fintype.card α = p
g : α
hg : g ≠ 1
t : { x // x ∈ zpowers g }
ht : ∀ (y : { x // x ∈ zpowers g }), y = t
this : g = 1
⊢ ∃ g, ∀ (x : α), x ∈ zpowers g

tactic: change g ∈ Subgroup.zpowers g
state_before: α✝ : Type u
a : α✝
inst✝² : Group α✝
α : Type u
inst✝¹ : Group α
inst✝ : Fintype α
p : ℕ
hp : Fact (Nat.Prime p)
h : Fintype.card α = p
g : α
hg : g ≠ 1
t : { x // x ∈ zpowers g }
ht : ∀ (y : { x // x ∈ zpowers g }), y = t
⊢ g ∈ zpowers g

tactic: exact Subgroup.mem_zpowers g
state_before: α✝ : Type u
a : α✝
inst✝² : Group α✝
α : Type u
inst✝¹ : Group α
inst✝ : Fintype α
p : ℕ
hp : Fact (Nat.Prime p)
h : Fintype.card α = p
g : α
hg : g ≠ 1
t : { x // x ∈ zpowers g }
ht : ∀ (y : { x // x ∈ zpowers g }), y = t
⊢ g ∈ zpowers g

tactic: use g
state_before: case intro.inr
α✝ : Type u
a : α✝
inst✝² : Group α✝
α : Type u
inst✝¹ : Group α
inst✝ : Fintype α
p : ℕ
hp : Fact (Nat.Prime p)
h : Fintype.card α = p
g : α
hg : g ≠ 1
that : Fintype.card { x // x ∈ zpowers g } = p
⊢ ∃ g, ∀ (x : α), x ∈ zpowers g

tactic: intro x
state_before: case intro.inr
α✝ : Type u
a : α✝
inst✝² : Group α✝
α : Type u
inst✝¹ : Group α
inst✝ : Fintype α
p : ℕ
hp : Fact (Nat.Prime p)
h : Fintype.card α = p
g : α
hg : g ≠ 1
that : Fintype.card { x // x ∈ zpowers g } = p
⊢ ∀ (x : α), x ∈ zpowers g

tactic: rw [← h] at that
state_before: case intro.inr
α✝ : Type u
a : α✝
inst✝² : Group α✝
α : Type u
inst✝¹ : Group α
inst✝ : Fintype α
p : ℕ
hp : Fact (Nat.Prime p)
h : Fintype.card α = p
g : α
hg : g ≠ 1
that : Fintype.card { x // x ∈ zpowers g } = p
x : α
⊢ x ∈ zpowers g

tactic: rw [Subgroup.eq_top_of_card_eq _ that]
state_before: case intro.inr
α✝ : Type u
a : α✝
inst✝² : Group α✝
α : Type u
inst✝¹ : Group α
inst✝ : Fintype α
p : ℕ
hp : Fact (Nat.Prime p)
h : Fintype.card α = p
g : α
hg : g ≠ 1
that : Fintype.card { x // x ∈ zpowers g } = Fintype.card α
x : α
⊢ x ∈ zpowers g

tactic: exact Subgroup.mem_top _
state_before: case intro.inr
α✝ : Type u
a : α✝
inst✝² : Group α✝
α : Type u
inst✝¹ : Group α
inst✝ : Fintype α
p : ℕ
hp : Fact (Nat.Prime p)
h : Fintype.card α = p
g : α
hg : g ≠ 1
that : Fintype.card { x // x ∈ zpowers g } = Fintype.card α
x : α
⊢ x ∈ ⊤