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

Proof steps:
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✝¹ : Algebra E K
inst✝ : IsScalarTower F E K
h : IsPurelyInseparable F K
⊢ IsPurelyInseparable E K
state_after: case 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✝¹ : Algebra E K
inst✝ : IsScalarTower F E K
h : IsPurelyInseparable F K
q : ℕ
h✝ : ExpChar F q
⊢ IsPurelyInseparable E K
tactic: obtain ⟨q, _⟩ := ExpChar.exists F
state_before: case 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✝¹ : Algebra E K
inst✝ : IsScalarTower F E K
h : IsPurelyInseparable F K
q : ℕ
h✝ : ExpChar F q
⊢ IsPurelyInseparable E K
state_after: case 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✝¹ : Algebra E K
inst✝ : IsScalarTower F E K
h : IsPurelyInseparable F K
q : ℕ
h✝ : ExpChar F q
this : ExpChar E q
⊢ IsPurelyInseparable E K
tactic: haveI := expChar_of_injective_algebraMap (algebraMap F E).injective q
state_before: case 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✝¹ : Algebra E K
inst✝ : IsScalarTower F E K
h : IsPurelyInseparable F K
q : ℕ
h✝ : ExpChar F q
this : ExpChar E q
⊢ IsPurelyInseparable E K
state_after: case 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✝¹ : Algebra E K
inst✝ : IsScalarTower F E K
q : ℕ
h : ∀ (x : K), ∃ n, x ^ q ^ n ∈ (algebraMap F K).range
h✝ : ExpChar F q
this : ExpChar E q
⊢ ∀ (x : K), ∃ n, x ^ q ^ n ∈ (algebraMap E K).range
tactic: rw [isPurelyInseparable_iff_pow_mem _ q] at h ⊢
state_before: case 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✝¹ : Algebra E K
inst✝ : IsScalarTower F E K
q : ℕ
h : ∀ (x : K), ∃ n, x ^ q ^ n ∈ (algebraMap F K).range
h✝ : ExpChar F q
this : ExpChar E q
⊢ ∀ (x : K), ∃ n, x ^ q ^ n ∈ (algebraMap E K).range
state_after: case 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✝¹ : Algebra E K
inst✝ : IsScalarTower F E K
q : ℕ
h : ∀ (x : K), ∃ n, x ^ q ^ n ∈ (algebraMap F K).range
h✝ : ExpChar F q
this : ExpChar E q
x : K
⊢ ∃ n, x ^ q ^ n ∈ (algebraMap E K).range
tactic: intro x
state_before: case 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✝¹ : Algebra E K
inst✝ : IsScalarTower F E K
q : ℕ
h : ∀ (x : K), ∃ n, x ^ q ^ n ∈ (algebraMap F K).range
h✝ : ExpChar F q
this : ExpChar E q
x : K
⊢ ∃ n, x ^ q ^ n ∈ (algebraMap E K).range
state_after: case intro.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✝¹ : Algebra E K
inst✝ : IsScalarTower F E K
q : ℕ
h✝¹ : ∀ (x : K), ∃ n, x ^ q ^ n ∈ (algebraMap F K).range
h✝ : ExpChar F q
this : ExpChar E q
x : K
n : ℕ
y : F
h : (algebraMap F K) y = x ^ q ^ n
⊢ ∃ n, x ^ q ^ n ∈ (algebraMap E K).range
tactic: obtain ⟨n, y, h⟩ := h x
state_before: case intro.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✝¹ : Algebra E K
inst✝ : IsScalarTower F E K
q : ℕ
h✝¹ : ∀ (x : K), ∃ n, x ^ q ^ n ∈ (algebraMap F K).range
h✝ : ExpChar F q
this : ExpChar E q
x : K
n : ℕ
y : F
h : (algebraMap F K) y = x ^ q ^ n
⊢ ∃ n, x ^ q ^ n ∈ (algebraMap E K).range
state_after: no goals
tactic: exact ⟨n, (algebraMap F E) y, h.symm ▸ (IsScalarTower.algebraMap_apply F E K y).symm⟩