Theorem: Monoid.exponent_eq_prime_iff
File: Mathlib/GroupTheory/Exponent.lean

tactic: refine ⟨fun hG g hg ↦ ?_, fun h ↦ dvd_antisymm ?_ ?_⟩
state_before: G✝ : Type u
inst✝² : Monoid G✝
G : Type u_1
inst✝¹ : Monoid G
inst✝ : Nontrivial G
p : ℕ
hp : Nat.Prime p
⊢ exponent G = p ↔ ∀ (g : G), g ≠ 1 → orderOf g = p
state_after: case refine_1
G✝ : Type u
inst✝² : Monoid G✝
G : Type u_1
inst✝¹ : Monoid G
inst✝ : Nontrivial G
p : ℕ
hp : Nat.Prime p
hG : exponent G = p
g : G
hg : g ≠ 1
⊢ orderOf g = p

case refine_2
G✝ : Type u
inst✝² : Monoid G✝
G : Type u_1
inst✝¹ : Monoid G
inst✝ : Nontrivial G
p : ℕ
hp : Nat.Prime p
h : ∀ (g : G), g ≠ 1 → orderOf g = p
⊢ exponent G ∣ p

case refine_3
G✝ : Type u
inst✝² : Monoid G✝
G : Type u_1
inst✝¹ : Monoid G
inst✝ : Nontrivial G
p : ℕ
hp : Nat.Prime p
h : ∀ (g : G), g ≠ 1 → orderOf g = p
⊢ p ∣ exponent G

tactic: rw [Ne, ← orderOf_eq_one_iff] at hg
state_before: case refine_1
G✝ : Type u
inst✝² : Monoid G✝
G : Type u_1
inst✝¹ : Monoid G
inst✝ : Nontrivial G
p : ℕ
hp : Nat.Prime p
hG : exponent G = p
g : G
hg : g ≠ 1
⊢ orderOf g = p
state_after: case refine_1
G✝ : Type u
inst✝² : Monoid G✝
G : Type u_1
inst✝¹ : Monoid G
inst✝ : Nontrivial G
p : ℕ
hp : Nat.Prime p
hG : exponent G = p
g : G
hg : ¬orderOf g = 1
⊢ orderOf g = p

tactic: exact Eq.symm <| (hp.dvd_iff_eq hg).mp <| hG ▸ Monoid.order_dvd_exponent g
state_before: case refine_1
G✝ : Type u
inst✝² : Monoid G✝
G : Type u_1
inst✝¹ : Monoid G
inst✝ : Nontrivial G
p : ℕ
hp : Nat.Prime p
hG : exponent G = p
g : G
hg : ¬orderOf g = 1
⊢ orderOf g = p
state_after: no goals

tactic: rw [exponent_dvd]
state_before: case refine_2
G✝ : Type u
inst✝² : Monoid G✝
G : Type u_1
inst✝¹ : Monoid G
inst✝ : Nontrivial G
p : ℕ
hp : Nat.Prime p
h : ∀ (g : G), g ≠ 1 → orderOf g = p
⊢ exponent G ∣ p
state_after: case refine_2
G✝ : Type u
inst✝² : Monoid G✝
G : Type u_1
inst✝¹ : Monoid G
inst✝ : Nontrivial G
p : ℕ
hp : Nat.Prime p
h : ∀ (g : G), g ≠ 1 → orderOf g = p
⊢ ∀ (g : G), orderOf g ∣ p

tactic: intro g
state_before: case refine_2
G✝ : Type u
inst✝² : Monoid G✝
G : Type u_1
inst✝¹ : Monoid G
inst✝ : Nontrivial G
p : ℕ
hp : Nat.Prime p
h : ∀ (g : G), g ≠ 1 → orderOf g = p
⊢ ∀ (g : G), orderOf g ∣ p
state_after: case refine_2
G✝ : Type u
inst✝² : Monoid G✝
G : Type u_1
inst✝¹ : Monoid G
inst✝ : Nontrivial G
p : ℕ
hp : Nat.Prime p
h : ∀ (g : G), g ≠ 1 → orderOf g = p
g : G
⊢ orderOf g ∣ p

tactic: by_cases hg : g = 1
state_before: case refine_2
G✝ : Type u
inst✝² : Monoid G✝
G : Type u_1
inst✝¹ : Monoid G
inst✝ : Nontrivial G
p : ℕ
hp : Nat.Prime p
h : ∀ (g : G), g ≠ 1 → orderOf g = p
g : G
⊢ orderOf g ∣ p
state_after: case pos
G✝ : Type u
inst✝² : Monoid G✝
G : Type u_1
inst✝¹ : Monoid G
inst✝ : Nontrivial G
p : ℕ
hp : Nat.Prime p
h : ∀ (g : G), g ≠ 1 → orderOf g = p
g : G
hg : g = 1
⊢ orderOf g ∣ p

case neg
G✝ : Type u
inst✝² : Monoid G✝
G : Type u_1
inst✝¹ : Monoid G
inst✝ : Nontrivial G
p : ℕ
hp : Nat.Prime p
h : ∀ (g : G), g ≠ 1 → orderOf g = p
g : G
hg : ¬g = 1
⊢ orderOf g ∣ p

tactic: simp [hg]
state_before: case pos
G✝ : Type u
inst✝² : Monoid G✝
G : Type u_1
inst✝¹ : Monoid G
inst✝ : Nontrivial G
p : ℕ
hp : Nat.Prime p
h : ∀ (g : G), g ≠ 1 → orderOf g = p
g : G
hg : g = 1
⊢ orderOf g ∣ p
state_after: no goals

tactic: rw [h g hg]
state_before: case neg
G✝ : Type u
inst✝² : Monoid G✝
G : Type u_1
inst✝¹ : Monoid G
inst✝ : Nontrivial G
p : ℕ
hp : Nat.Prime p
h : ∀ (g : G), g ≠ 1 → orderOf g = p
g : G
hg : ¬g = 1
⊢ orderOf g ∣ p
state_after: no goals

tactic: obtain ⟨g, hg⟩ := exists_ne (1 : G)
state_before: case refine_3
G✝ : Type u
inst✝² : Monoid G✝
G : Type u_1
inst✝¹ : Monoid G
inst✝ : Nontrivial G
p : ℕ
hp : Nat.Prime p
h : ∀ (g : G), g ≠ 1 → orderOf g = p
⊢ p ∣ exponent G
state_after: case refine_3.intro
G✝ : Type u
inst✝² : Monoid G✝
G : Type u_1
inst✝¹ : Monoid G
inst✝ : Nontrivial G
p : ℕ
hp : Nat.Prime p
h : ∀ (g : G), g ≠ 1 → orderOf g = p
g : G
hg : g ≠ 1
⊢ p ∣ exponent G

tactic: simpa [h g hg] using Monoid.order_dvd_exponent g
state_before: case refine_3.intro
G✝ : Type u
inst✝² : Monoid G✝
G : Type u_1
inst✝¹ : Monoid G
inst✝ : Nontrivial G
p : ℕ
hp : Nat.Prime p
h : ∀ (g : G), g ≠ 1 → orderOf g = p
g : G
hg : g ≠ 1
⊢ p ∣ exponent G
state_after: no goals