Theorem: charP_of_ne_zero
File: Mathlib/GroupTheory/OrderOfElement.lean

tactic: have H : (p : R) = 0 := by rw [← hn, Nat.cast_card_eq_zero]
state_before: G : Type u_1
H : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
R : Type u_6
inst✝¹ : NonAssocRing R
inst✝ : Fintype R
p : ℕ
hn : card R = p
hR : ∀ i < p, ↑i = 0 → i = 0
n : ℕ
⊢ ↑n = 0 ↔ p ∣ n
state_after: G : Type u_1
H✝ : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
R : Type u_6
inst✝¹ : NonAssocRing R
inst✝ : Fintype R
p : ℕ
hn : card R = p
hR : ∀ i < p, ↑i = 0 → i = 0
n : ℕ
H : ↑p = 0
⊢ ↑n = 0 ↔ p ∣ n

tactic: constructor
state_before: G : Type u_1
H✝ : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
R : Type u_6
inst✝¹ : NonAssocRing R
inst✝ : Fintype R
p : ℕ
hn : card R = p
hR : ∀ i < p, ↑i = 0 → i = 0
n : ℕ
H : ↑p = 0
⊢ ↑n = 0 ↔ p ∣ n
state_after: case mp
G : Type u_1
H✝ : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
R : Type u_6
inst✝¹ : NonAssocRing R
inst✝ : Fintype R
p : ℕ
hn : card R = p
hR : ∀ i < p, ↑i = 0 → i = 0
n : ℕ
H : ↑p = 0
⊢ ↑n = 0 → p ∣ n

case mpr
G : Type u_1
H✝ : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
R : Type u_6
inst✝¹ : NonAssocRing R
inst✝ : Fintype R
p : ℕ
hn : card R = p
hR : ∀ i < p, ↑i = 0 → i = 0
n : ℕ
H : ↑p = 0
⊢ p ∣ n → ↑n = 0

tactic: rw [← hn, Nat.cast_card_eq_zero]
state_before: G : Type u_1
H : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
R : Type u_6
inst✝¹ : NonAssocRing R
inst✝ : Fintype R
p : ℕ
hn : card R = p
hR : ∀ i < p, ↑i = 0 → i = 0
n : ℕ
⊢ ↑p = 0
state_after: no goals

tactic: intro h
state_before: case mp
G : Type u_1
H✝ : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
R : Type u_6
inst✝¹ : NonAssocRing R
inst✝ : Fintype R
p : ℕ
hn : card R = p
hR : ∀ i < p, ↑i = 0 → i = 0
n : ℕ
H : ↑p = 0
⊢ ↑n = 0 → p ∣ n
state_after: case mp
G : Type u_1
H✝ : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
R : Type u_6
inst✝¹ : NonAssocRing R
inst✝ : Fintype R
p : ℕ
hn : card R = p
hR : ∀ i < p, ↑i = 0 → i = 0
n : ℕ
H : ↑p = 0
h : ↑n = 0
⊢ p ∣ n

tactic: rw [← Nat.mod_add_div n p, Nat.cast_add, Nat.cast_mul, H, zero_mul, add_zero] at h
state_before: case mp
G : Type u_1
H✝ : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
R : Type u_6
inst✝¹ : NonAssocRing R
inst✝ : Fintype R
p : ℕ
hn : card R = p
hR : ∀ i < p, ↑i = 0 → i = 0
n : ℕ
H : ↑p = 0
h : ↑n = 0
⊢ p ∣ n
state_after: case mp
G : Type u_1
H✝ : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
R : Type u_6
inst✝¹ : NonAssocRing R
inst✝ : Fintype R
p : ℕ
hn : card R = p
hR : ∀ i < p, ↑i = 0 → i = 0
n : ℕ
H : ↑p = 0
h : ↑(n % p) = 0
⊢ p ∣ n

tactic: rw [Nat.dvd_iff_mod_eq_zero]
state_before: case mp
G : Type u_1
H✝ : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
R : Type u_6
inst✝¹ : NonAssocRing R
inst✝ : Fintype R
p : ℕ
hn : card R = p
hR : ∀ i < p, ↑i = 0 → i = 0
n : ℕ
H : ↑p = 0
h : ↑(n % p) = 0
⊢ p ∣ n
state_after: case mp
G : Type u_1
H✝ : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
R : Type u_6
inst✝¹ : NonAssocRing R
inst✝ : Fintype R
p : ℕ
hn : card R = p
hR : ∀ i < p, ↑i = 0 → i = 0
n : ℕ
H : ↑p = 0
h : ↑(n % p) = 0
⊢ n % p = 0

tactic: apply hR _ (Nat.mod_lt _ _) h
state_before: case mp
G : Type u_1
H✝ : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
R : Type u_6
inst✝¹ : NonAssocRing R
inst✝ : Fintype R
p : ℕ
hn : card R = p
hR : ∀ i < p, ↑i = 0 → i = 0
n : ℕ
H : ↑p = 0
h : ↑(n % p) = 0
⊢ n % p = 0
state_after: G : Type u_1
H✝ : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
R : Type u_6
inst✝¹ : NonAssocRing R
inst✝ : Fintype R
p : ℕ
hn : card R = p
hR : ∀ i < p, ↑i = 0 → i = 0
n : ℕ
H : ↑p = 0
h : ↑(n % p) = 0
⊢ p > 0

tactic: rw [← hn, gt_iff_lt, Fintype.card_pos_iff]
state_before: G : Type u_1
H✝ : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
R : Type u_6
inst✝¹ : NonAssocRing R
inst✝ : Fintype R
p : ℕ
hn : card R = p
hR : ∀ i < p, ↑i = 0 → i = 0
n : ℕ
H : ↑p = 0
h : ↑(n % p) = 0
⊢ p > 0
state_after: G : Type u_1
H✝ : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
R : Type u_6
inst✝¹ : NonAssocRing R
inst✝ : Fintype R
p : ℕ
hn : card R = p
hR : ∀ i < p, ↑i = 0 → i = 0
n : ℕ
H : ↑p = 0
h : ↑(n % p) = 0
⊢ Nonempty R

tactic: exact ⟨0⟩
state_before: G : Type u_1
H✝ : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
R : Type u_6
inst✝¹ : NonAssocRing R
inst✝ : Fintype R
p : ℕ
hn : card R = p
hR : ∀ i < p, ↑i = 0 → i = 0
n : ℕ
H : ↑p = 0
h : ↑(n % p) = 0
⊢ Nonempty R
state_after: no goals

tactic: rintro ⟨n, rfl⟩
state_before: case mpr
G : Type u_1
H✝ : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
R : Type u_6
inst✝¹ : NonAssocRing R
inst✝ : Fintype R
p : ℕ
hn : card R = p
hR : ∀ i < p, ↑i = 0 → i = 0
n : ℕ
H : ↑p = 0
⊢ p ∣ n → ↑n = 0
state_after: case mpr.intro
G : Type u_1
H✝ : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
R : Type u_6
inst✝¹ : NonAssocRing R
inst✝ : Fintype R
p : ℕ
hn : card R = p
hR : ∀ i < p, ↑i = 0 → i = 0
H : ↑p = 0
n : ℕ
⊢ ↑(p * n) = 0

tactic: rw [Nat.cast_mul, H, zero_mul]
state_before: case mpr.intro
G : Type u_1
H✝ : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
R : Type u_6
inst✝¹ : NonAssocRing R
inst✝ : Fintype R
p : ℕ
hn : card R = p
hR : ∀ i < p, ↑i = 0 → i = 0
H : ↑p = 0
n : ℕ
⊢ ↑(p * n) = 0
state_after: no goals