Theorem: IsPRadical.injective_comp_of_pNilradical_eq_bot
File: Mathlib/FieldTheory/IsPerfectClosure.lean

tactic: ext x
state_before: K : Type u_1
L : Type u_2
M : Type u_3
N : Type u_4
inst✝⁸ : CommRing K
inst✝⁷ : CommRing L
inst✝⁶ : CommRing M
inst✝⁵ : CommRing N
i : K →+* L
j : K →+* M
k : K →+* N
f✝ : L →+* M
g✝ : L →+* N
p : ℕ
inst✝⁴ : ExpChar K p
inst✝³ : ExpChar L p
inst✝² : ExpChar M p
inst✝¹ : ExpChar N p
inst✝ : IsPRadical i p
h : pNilradical M p = ⊥
f g : L →+* M
heq : (fun f => f.comp i) f = (fun f => f.comp i) g
⊢ f = g
state_after: case a
K : Type u_1
L : Type u_2
M : Type u_3
N : Type u_4
inst✝⁸ : CommRing K
inst✝⁷ : CommRing L
inst✝⁶ : CommRing M
inst✝⁵ : CommRing N
i : K →+* L
j : K →+* M
k : K →+* N
f✝ : L →+* M
g✝ : L →+* N
p : ℕ
inst✝⁴ : ExpChar K p
inst✝³ : ExpChar L p
inst✝² : ExpChar M p
inst✝¹ : ExpChar N p
inst✝ : IsPRadical i p
h : pNilradical M p = ⊥
f g : L →+* M
heq : (fun f => f.comp i) f = (fun f => f.comp i) g
x : L
⊢ f x = g x

tactic: obtain ⟨n, y, hx⟩ := IsPRadical.pow_mem i p x
state_before: case a
K : Type u_1
L : Type u_2
M : Type u_3
N : Type u_4
inst✝⁸ : CommRing K
inst✝⁷ : CommRing L
inst✝⁶ : CommRing M
inst✝⁵ : CommRing N
i : K →+* L
j : K →+* M
k : K →+* N
f✝ : L →+* M
g✝ : L →+* N
p : ℕ
inst✝⁴ : ExpChar K p
inst✝³ : ExpChar L p
inst✝² : ExpChar M p
inst✝¹ : ExpChar N p
inst✝ : IsPRadical i p
h : pNilradical M p = ⊥
f g : L →+* M
heq : (fun f => f.comp i) f = (fun f => f.comp i) g
x : L
⊢ f x = g x
state_after: case a.intro.intro
K : Type u_1
L : Type u_2
M : Type u_3
N : Type u_4
inst✝⁸ : CommRing K
inst✝⁷ : CommRing L
inst✝⁶ : CommRing M
inst✝⁵ : CommRing N
i : K →+* L
j : K →+* M
k : K →+* N
f✝ : L →+* M
g✝ : L →+* N
p : ℕ
inst✝⁴ : ExpChar K p
inst✝³ : ExpChar L p
inst✝² : ExpChar M p
inst✝¹ : ExpChar N p
inst✝ : IsPRadical i p
h : pNilradical M p = ⊥
f g : L →+* M
heq : (fun f => f.comp i) f = (fun f => f.comp i) g
x : L
n : ℕ
y : K
hx : i y = x ^ p ^ n
⊢ f x = g x

tactic: apply_fun _ using pow_expChar_pow_inj_of_pNilradical_eq_bot M p h n
state_before: case a.intro.intro
K : Type u_1
L : Type u_2
M : Type u_3
N : Type u_4
inst✝⁸ : CommRing K
inst✝⁷ : CommRing L
inst✝⁶ : CommRing M
inst✝⁵ : CommRing N
i : K →+* L
j : K →+* M
k : K →+* N
f✝ : L →+* M
g✝ : L →+* N
p : ℕ
inst✝⁴ : ExpChar K p
inst✝³ : ExpChar L p
inst✝² : ExpChar M p
inst✝¹ : ExpChar N p
inst✝ : IsPRadical i p
h : pNilradical M p = ⊥
f g : L →+* M
heq : (fun f => f.comp i) f = (fun f => f.comp i) g
x : L
n : ℕ
y : K
hx : i y = x ^ p ^ n
⊢ f x = g x
state_after: case a.intro.intro
K : Type u_1
L : Type u_2
M : Type u_3
N : Type u_4
inst✝⁸ : CommRing K
inst✝⁷ : CommRing L
inst✝⁶ : CommRing M
inst✝⁵ : CommRing N
i : K →+* L
j : K →+* M
k : K →+* N
f✝ : L →+* M
g✝ : L →+* N
p : ℕ
inst✝⁴ : ExpChar K p
inst✝³ : ExpChar L p
inst✝² : ExpChar M p
inst✝¹ : ExpChar N p
inst✝ : IsPRadical i p
h : pNilradical M p = ⊥
f g : L →+* M
heq : (fun f => f.comp i) f = (fun f => f.comp i) g
x : L
n : ℕ
y : K
hx : i y = x ^ p ^ n
⊢ f x ^ p ^ n = g x ^ p ^ n

tactic: simpa only [← map_pow, ← hx] using congr($(heq) y)
state_before: case a.intro.intro
K : Type u_1
L : Type u_2
M : Type u_3
N : Type u_4
inst✝⁸ : CommRing K
inst✝⁷ : CommRing L
inst✝⁶ : CommRing M
inst✝⁵ : CommRing N
i : K →+* L
j : K →+* M
k : K →+* N
f✝ : L →+* M
g✝ : L →+* N
p : ℕ
inst✝⁴ : ExpChar K p
inst✝³ : ExpChar L p
inst✝² : ExpChar M p
inst✝¹ : ExpChar N p
inst✝ : IsPRadical i p
h : pNilradical M p = ⊥
f g : L →+* M
heq : (fun f => f.comp i) f = (fun f => f.comp i) g
x : L
n : ℕ
y : K
hx : i y = x ^ p ^ n
⊢ f x ^ p ^ n = g x ^ p ^ n
state_after: no goals