Theorem: FiniteField.card
File: Mathlib/FieldTheory/Finite/Basic.lean

tactic: haveI hp : Fact p.Prime := ⟨CharP.char_is_prime K p⟩
state_before: K : Type u_1
R : Type ?u.399990
inst✝² : Field K
inst✝¹ : Fintype K
p : ℕ
inst✝ : CharP K p
⊢ ∃ n, Nat.Prime p ∧ q = p ^ ↑n

tactic: letI : Module (ZMod p) K := { (ZMod.castHom dvd_rfl K : ZMod p →+* _).toModule with }
state_before: K : Type u_1
R : Type ?u.399990
inst✝² : Field K
inst✝¹ : Fintype K
p : ℕ
inst✝ : CharP K p
hp : Fact (Nat.Prime p)
⊢ ∃ n, Nat.Prime p ∧ q = p ^ ↑n

tactic: obtain ⟨n, h⟩ := VectorSpace.card_fintype (ZMod p) K
state_before: K : Type u_1
R : Type ?u.399990
inst✝² : Field K
inst✝¹ : Fintype K
p : ℕ
inst✝ : CharP K p
hp : Fact (Nat.Prime p)
this : Module (ZMod p) K :=
  let src := RingHom.toModule (ZMod.castHom (_ : p ∣ p) K);
  Module.mk (_ : ∀ (r s : ZMod p) (x : K), (r + s) • x = r • x + s • x) (_ : ∀ (x : K), 0 • x = 0)
⊢ ∃ n, Nat.Prime p ∧ q = p ^ ↑n

tactic: rw [ZMod.card] at h
state_before: case intro
K : Type u_1
R : Type ?u.399990
inst✝² : Field K
inst✝¹ : Fintype K
p : ℕ
inst✝ : CharP K p
hp : Fact (Nat.Prime p)
this : Module (ZMod p) K :=
  let src := RingHom.toModule (ZMod.castHom (_ : p ∣ p) K);
  Module.mk (_ : ∀ (r s : ZMod p) (x : K), (r + s) • x = r • x + s • x) (_ : ∀ (x : K), 0 • x = 0)
n : ℕ
h : q = Fintype.card (ZMod p) ^ n
⊢ ∃ n, Nat.Prime p ∧ q = p ^ ↑n

tactic: refine' ⟨⟨n, _⟩, hp.1, h⟩
state_before: case intro
K : Type u_1
R : Type ?u.399990
inst✝² : Field K
inst✝¹ : Fintype K
p : ℕ
inst✝ : CharP K p
hp : Fact (Nat.Prime p)
this : Module (ZMod p) K :=
  let src := RingHom.toModule (ZMod.castHom (_ : p ∣ p) K);
  Module.mk (_ : ∀ (r s : ZMod p) (x : K), (r + s) • x = r • x + s • x) (_ : ∀ (x : K), 0 • x = 0)
n : ℕ
h : q = p ^ n
⊢ ∃ n, Nat.Prime p ∧ q = p ^ ↑n

tactic: apply Or.resolve_left (Nat.eq_zero_or_pos n)
state_before: case intro
K : Type u_1
R : Type ?u.399990
inst✝² : Field K
inst✝¹ : Fintype K
p : ℕ
inst✝ : CharP K p
hp : Fact (Nat.Prime p)
this : Module (ZMod p) K :=
  let src := RingHom.toModule (ZMod.castHom (_ : p ∣ p) K);
  Module.mk (_ : ∀ (r s : ZMod p) (x : K), (r + s) • x = r • x + s • x) (_ : ∀ (x : K), 0 • x = 0)
n : ℕ
h : q = p ^ n
⊢ 0 < n

tactic: rintro rfl
state_before: case intro
K : Type u_1
R : Type ?u.399990
inst✝² : Field K
inst✝¹ : Fintype K
p : ℕ
inst✝ : CharP K p
hp : Fact (Nat.Prime p)
this : Module (ZMod p) K :=
  let src := RingHom.toModule (ZMod.castHom (_ : p ∣ p) K);
  Module.mk (_ : ∀ (r s : ZMod p) (x : K), (r + s) • x = r • x + s • x) (_ : ∀ (x : K), 0 • x = 0)
n : ℕ
h : q = p ^ n
⊢ ¬n = 0

tactic: rw [pow_zero] at h
state_before: case intro
K : Type u_1
R : Type ?u.399990
inst✝² : Field K
inst✝¹ : Fintype K
p : ℕ
inst✝ : CharP K p
hp : Fact (Nat.Prime p)
this : Module (ZMod p) K :=
  let src := RingHom.toModule (ZMod.castHom (_ : p ∣ p) K);
  Module.mk (_ : ∀ (r s : ZMod p) (x : K), (r + s) • x = r • x + s • x) (_ : ∀ (x : K), 0 • x = 0)
h : q = p ^ 0
⊢ False

tactic: have : (0 : K) = 1 := by apply Fintype.card_le_one_iff.mp (le_of_eq h)
state_before: case intro
K : Type u_1
R : Type ?u.399990
inst✝² : Field K
inst✝¹ : Fintype K
p : ℕ
inst✝ : CharP K p
hp : Fact (Nat.Prime p)
this : Module (ZMod p) K :=
  let src := RingHom.toModule (ZMod.castHom (_ : p ∣ p) K);
  Module.mk (_ : ∀ (r s : ZMod p) (x : K), (r + s) • x = r • x + s • x) (_ : ∀ (x : K), 0 • x = 0)
h : q = 1
⊢ False

tactic: exact absurd this zero_ne_one
state_before: case intro
K : Type u_1
R : Type ?u.399990
inst✝² : Field K
inst✝¹ : Fintype K
p : ℕ
inst✝ : CharP K p
hp : Fact (Nat.Prime p)
this✝ : Module (ZMod p) K :=
  let src := RingHom.toModule (ZMod.castHom (_ : p ∣ p) K);
  Module.mk (_ : ∀ (r s : ZMod p) (x : K), (r + s) • x = r • x + s • x) (_ : ∀ (x : K), 0 • x = 0)
h : q = 1
this : 0 = 1
⊢ False

tactic: apply Fintype.card_le_one_iff.mp (le_of_eq h)
state_before: K : Type u_1
R : Type ?u.399990
inst✝² : Field K
inst✝¹ : Fintype K
p : ℕ
inst✝ : CharP K p
hp : Fact (Nat.Prime p)
this : Module (ZMod p) K :=
  let src := RingHom.toModule (ZMod.castHom (_ : p ∣ p) K);
  Module.mk (_ : ∀ (r s : ZMod p) (x : K), (r + s) • x = r • x + s • x) (_ : ∀ (x : K), 0 • x = 0)
h : q = 1
⊢ 0 = 1