Theorem: IsPurelyInseparable.injective_comp_algebraMap
File: Mathlib/FieldTheory/PurelyInseparable.lean

tactic: ext x
state_before: F : Type u
E : Type v
inst✝⁷ : Field F
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
K : Type w
inst✝⁴ : Field K
inst✝³ : Algebra F K
inst✝² : IsPurelyInseparable F E
L : Type w
inst✝¹ : CommRing L
inst✝ : IsReduced L
f g : E →+* L
heq : (fun f => f.comp (algebraMap F E)) f = (fun f => f.comp (algebraMap F E)) g
⊢ f = g
state_after: case a
F : Type u
E : Type v
inst✝⁷ : Field F
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
K : Type w
inst✝⁴ : Field K
inst✝³ : Algebra F K
inst✝² : IsPurelyInseparable F E
L : Type w
inst✝¹ : CommRing L
inst✝ : IsReduced L
f g : E →+* L
heq : (fun f => f.comp (algebraMap F E)) f = (fun f => f.comp (algebraMap F E)) g
x : E
⊢ f x = g x

tactic: let q := ringExpChar F
state_before: case a
F : Type u
E : Type v
inst✝⁷ : Field F
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
K : Type w
inst✝⁴ : Field K
inst✝³ : Algebra F K
inst✝² : IsPurelyInseparable F E
L : Type w
inst✝¹ : CommRing L
inst✝ : IsReduced L
f g : E →+* L
heq : (fun f => f.comp (algebraMap F E)) f = (fun f => f.comp (algebraMap F E)) g
x : E
⊢ f x = g x
state_after: case a
F : Type u
E : Type v
inst✝⁷ : Field F
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
K : Type w
inst✝⁴ : Field K
inst✝³ : Algebra F K
inst✝² : IsPurelyInseparable F E
L : Type w
inst✝¹ : CommRing L
inst✝ : IsReduced L
f g : E →+* L
heq : (fun f => f.comp (algebraMap F E)) f = (fun f => f.comp (algebraMap F E)) g
x : E
q : ℕ := ringExpChar F
⊢ f x = g x

tactic: obtain ⟨n, y, h⟩ := IsPurelyInseparable.pow_mem F q x
state_before: case a
F : Type u
E : Type v
inst✝⁷ : Field F
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
K : Type w
inst✝⁴ : Field K
inst✝³ : Algebra F K
inst✝² : IsPurelyInseparable F E
L : Type w
inst✝¹ : CommRing L
inst✝ : IsReduced L
f g : E →+* L
heq : (fun f => f.comp (algebraMap F E)) f = (fun f => f.comp (algebraMap F E)) g
x : E
q : ℕ := ringExpChar F
⊢ f x = g x
state_after: case a.intro.intro
F : Type u
E : Type v
inst✝⁷ : Field F
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
K : Type w
inst✝⁴ : Field K
inst✝³ : Algebra F K
inst✝² : IsPurelyInseparable F E
L : Type w
inst✝¹ : CommRing L
inst✝ : IsReduced L
f g : E →+* L
heq : (fun f => f.comp (algebraMap F E)) f = (fun f => f.comp (algebraMap F E)) g
x : E
q : ℕ := ringExpChar F
n : ℕ
y : F
h : (algebraMap F E) y = x ^ q ^ n
⊢ f x = g x

tactic: replace heq := congr($heq y)
state_before: case a.intro.intro
F : Type u
E : Type v
inst✝⁷ : Field F
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
K : Type w
inst✝⁴ : Field K
inst✝³ : Algebra F K
inst✝² : IsPurelyInseparable F E
L : Type w
inst✝¹ : CommRing L
inst✝ : IsReduced L
f g : E →+* L
heq : (fun f => f.comp (algebraMap F E)) f = (fun f => f.comp (algebraMap F E)) g
x : E
q : ℕ := ringExpChar F
n : ℕ
y : F
h : (algebraMap F E) y = x ^ q ^ n
⊢ f x = g x
state_after: case a.intro.intro
F : Type u
E : Type v
inst✝⁷ : Field F
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
K : Type w
inst✝⁴ : Field K
inst✝³ : Algebra F K
inst✝² : IsPurelyInseparable F E
L : Type w
inst✝¹ : CommRing L
inst✝ : IsReduced L
f g : E →+* L
x : E
q : ℕ := ringExpChar F
n : ℕ
y : F
h : (algebraMap F E) y = x ^ q ^ n
heq : ((fun f => f.comp (algebraMap F E)) f) y = ((fun f => f.comp (algebraMap F E)) g) y
⊢ f x = g x

tactic: simp_rw [RingHom.comp_apply, h, map_pow] at heq
state_before: case a.intro.intro
F : Type u
E : Type v
inst✝⁷ : Field F
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
K : Type w
inst✝⁴ : Field K
inst✝³ : Algebra F K
inst✝² : IsPurelyInseparable F E
L : Type w
inst✝¹ : CommRing L
inst✝ : IsReduced L
f g : E →+* L
x : E
q : ℕ := ringExpChar F
n : ℕ
y : F
h : (algebraMap F E) y = x ^ q ^ n
heq : ((fun f => f.comp (algebraMap F E)) f) y = ((fun f => f.comp (algebraMap F E)) g) y
⊢ f x = g x
state_after: case a.intro.intro
F : Type u
E : Type v
inst✝⁷ : Field F
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
K : Type w
inst✝⁴ : Field K
inst✝³ : Algebra F K
inst✝² : IsPurelyInseparable F E
L : Type w
inst✝¹ : CommRing L
inst✝ : IsReduced L
f g : E →+* L
x : E
q : ℕ := ringExpChar F
n : ℕ
y : F
h : (algebraMap F E) y = x ^ q ^ n
heq : f x ^ q ^ n = g x ^ q ^ n
⊢ f x = g x

tactic: nontriviality L
state_before: case a.intro.intro
F : Type u
E : Type v
inst✝⁷ : Field F
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
K : Type w
inst✝⁴ : Field K
inst✝³ : Algebra F K
inst✝² : IsPurelyInseparable F E
L : Type w
inst✝¹ : CommRing L
inst✝ : IsReduced L
f g : E →+* L
x : E
q : ℕ := ringExpChar F
n : ℕ
y : F
h : (algebraMap F E) y = x ^ q ^ n
heq : f x ^ q ^ n = g x ^ q ^ n
⊢ f x = g x
state_after: F : Type u
E : Type v
inst✝⁷ : Field F
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
K : Type w
inst✝⁴ : Field K
inst✝³ : Algebra F K
inst✝² : IsPurelyInseparable F E
L : Type w
inst✝¹ : CommRing L
inst✝ : IsReduced L
f g : E →+* L
x : E
q : ℕ := ringExpChar F
n : ℕ
y : F
h : (algebraMap F E) y = x ^ q ^ n
heq : f x ^ q ^ n = g x ^ q ^ n
a✝ : Nontrivial L
⊢ f x = g x

tactic: haveI := expChar_of_injective_ringHom (f.comp (algebraMap F E)).injective q
state_before: F : Type u
E : Type v
inst✝⁷ : Field F
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
K : Type w
inst✝⁴ : Field K
inst✝³ : Algebra F K
inst✝² : IsPurelyInseparable F E
L : Type w
inst✝¹ : CommRing L
inst✝ : IsReduced L
f g : E →+* L
x : E
q : ℕ := ringExpChar F
n : ℕ
y : F
h : (algebraMap F E) y = x ^ q ^ n
heq : f x ^ q ^ n = g x ^ q ^ n
a✝ : Nontrivial L
⊢ f x = g x
state_after: F : Type u
E : Type v
inst✝⁷ : Field F
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
K : Type w
inst✝⁴ : Field K
inst✝³ : Algebra F K
inst✝² : IsPurelyInseparable F E
L : Type w
inst✝¹ : CommRing L
inst✝ : IsReduced L
f g : E →+* L
x : E
q : ℕ := ringExpChar F
n : ℕ
y : F
h : (algebraMap F E) y = x ^ q ^ n
heq : f x ^ q ^ n = g x ^ q ^ n
a✝ : Nontrivial L
this : ExpChar L q
⊢ f x = g x

tactic: exact iterateFrobenius_inj L q n heq
state_before: F : Type u
E : Type v
inst✝⁷ : Field F
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
K : Type w
inst✝⁴ : Field K
inst✝³ : Algebra F K
inst✝² : IsPurelyInseparable F E
L : Type w
inst✝¹ : CommRing L
inst✝ : IsReduced L
f g : E →+* L
x : E
q : ℕ := ringExpChar F
n : ℕ
y : F
h : (algebraMap F E) y = x ^ q ^ n
heq : f x ^ q ^ n = g x ^ q ^ n
a✝ : Nontrivial L
this : ExpChar L q
⊢ f x = g x
state_after: no goals