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

Proof steps:
state_before: K : Type u_1
R : Type u_2
inst✝³ : Field K
inst✝² : Fintype K
p : ℕ
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Algebra (ZMod p) K
f : K[X]
⊢ (expand K q) f = f ^ q
state_after: case intro
K : Type u_1
R : Type u_2
inst✝³ : Field K
inst✝² : Fintype K
p✝ : ℕ
inst✝¹ : Fact (Nat.Prime p✝)
inst✝ : Algebra (ZMod p✝) K
f : K[X]
p : ℕ
hp : CharP K p
⊢ (expand K q) f = f ^ q
tactic: cases' CharP.exists K with p hp
state_before: case intro
K : Type u_1
R : Type u_2
inst✝³ : Field K
inst✝² : Fintype K
p✝ : ℕ
inst✝¹ : Fact (Nat.Prime p✝)
inst✝ : Algebra (ZMod p✝) K
f : K[X]
p : ℕ
hp : CharP K p
⊢ (expand K q) f = f ^ q
state_after: case intro
K : Type u_1
R : Type u_2
inst✝³ : Field K
inst✝² : Fintype K
p✝ : ℕ
inst✝¹ : Fact (Nat.Prime p✝)
inst✝ : Algebra (ZMod p✝) K
f : K[X]
p : ℕ
hp : CharP K p
this : CharP K p := hp
⊢ (expand K q) f = f ^ q
tactic: letI := hp
state_before: case intro
K : Type u_1
R : Type u_2
inst✝³ : Field K
inst✝² : Fintype K
p✝ : ℕ
inst✝¹ : Fact (Nat.Prime p✝)
inst✝ : Algebra (ZMod p✝) K
f : K[X]
p : ℕ
hp : CharP K p
this : CharP K p := hp
⊢ (expand K q) f = f ^ q
state_after: case intro.intro.mk.intro
K : Type u_1
R : Type u_2
inst✝³ : Field K
inst✝² : Fintype K
p✝ : ℕ
inst✝¹ : Fact (Nat.Prime p✝)
inst✝ : Algebra (ZMod p✝) K
f : K[X]
p : ℕ
hp✝ : CharP K p
this : CharP K p := hp✝
n : ℕ
npos : 0 < n
hp : Nat.Prime p
hn : q = p ^ ↑⟨n, npos⟩
⊢ (expand K q) f = f ^ q
tactic: rcases FiniteField.card K p with ⟨⟨n, npos⟩, ⟨hp, hn⟩⟩
state_before: case intro.intro.mk.intro
K : Type u_1
R : Type u_2
inst✝³ : Field K
inst✝² : Fintype K
p✝ : ℕ
inst✝¹ : Fact (Nat.Prime p✝)
inst✝ : Algebra (ZMod p✝) K
f : K[X]
p : ℕ
hp✝ : CharP K p
this : CharP K p := hp✝
n : ℕ
npos : 0 < n
hp : Nat.Prime p
hn : q = p ^ ↑⟨n, npos⟩
⊢ (expand K q) f = f ^ q
state_after: case intro.intro.mk.intro
K : Type u_1
R : Type u_2
inst✝³ : Field K
inst✝² : Fintype K
p✝ : ℕ
inst✝¹ : Fact (Nat.Prime p✝)
inst✝ : Algebra (ZMod p✝) K
f : K[X]
p : ℕ
hp✝ : CharP K p
this✝ : CharP K p := hp✝
n : ℕ
npos : 0 < n
hp : Nat.Prime p
hn : q = p ^ ↑⟨n, npos⟩
this : Fact (Nat.Prime p)
⊢ (expand K q) f = f ^ q
tactic: haveI : Fact p.Prime := ⟨hp⟩
state_before: case intro.intro.mk.intro
K : Type u_1
R : Type u_2
inst✝³ : Field K
inst✝² : Fintype K
p✝ : ℕ
inst✝¹ : Fact (Nat.Prime p✝)
inst✝ : Algebra (ZMod p✝) K
f : K[X]
p : ℕ
hp✝ : CharP K p
this✝ : CharP K p := hp✝
n : ℕ
npos : 0 < n
hp : Nat.Prime p
hn : q = p ^ ↑⟨n, npos⟩
this : Fact (Nat.Prime p)
⊢ (expand K q) f = f ^ q
state_after: case intro.intro.mk.intro
K : Type u_1
R : Type u_2
inst✝³ : Field K
inst✝² : Fintype K
p✝ : ℕ
inst✝¹ : Fact (Nat.Prime p✝)
inst✝ : Algebra (ZMod p✝) K
f : K[X]
p : ℕ
hp✝ : CharP K p
this✝ : CharP K p := hp✝
n : ℕ
npos : 0 < n
hp : Nat.Prime p
hn : q = p ^ n
this : Fact (Nat.Prime p)
⊢ (expand K q) f = f ^ q
tactic: dsimp at hn
state_before: case intro.intro.mk.intro
K : Type u_1
R : Type u_2
inst✝³ : Field K
inst✝² : Fintype K
p✝ : ℕ
inst✝¹ : Fact (Nat.Prime p✝)
inst✝ : Algebra (ZMod p✝) K
f : K[X]
p : ℕ
hp✝ : CharP K p
this✝ : CharP K p := hp✝
n : ℕ
npos : 0 < n
hp : Nat.Prime p
hn : q = p ^ n
this : Fact (Nat.Prime p)
⊢ (expand K q) f = f ^ q
state_after: no goals
tactic: rw [hn, ← map_expand_pow_char, frobenius_pow hn, RingHom.one_def, map_id]