Theorem: Field.span_map_pow_expChar_pow_eq_top_of_isSeparable
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
q n : ℕ
hF : ExpChar F q
ι : Type u_1
v : ι → E
inst✝ : Algebra.IsSeparable F E
h : Submodule.span F (Set.range v) = ⊤
⊢ Submodule.span F (Set.range fun x => v x ^ q ^ n) = ⊤
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
q n : ℕ
hF : ExpChar F q
ι : Type u_1
v : ι → E
inst✝ : Algebra.IsSeparable F E
h : Submodule.span F (Set.range v) = ⊤
⊢ Submodule.span F (Set.range fun x => v x ^ q ^ n) = Submodule.span F ↑(MonoidHom.mrange (powMonoidHom (q ^ n)))
tactic: erw [← Algebra.top_toSubmodule, ← top_toSubalgebra, ← adjoin_univ,
    adjoin_eq_adjoin_pow_expChar_pow_of_isSeparable' F E _ q n,
    adjoin_algebraic_toSubalgebra fun x _ ↦ Algebra.IsAlgebraic.isAlgebraic x,
    Set.image_univ, Algebra.adjoin_eq_span, (powMonoidHom _).mrange.closure_eq]
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
q n : ℕ
hF : ExpChar F q
ι : Type u_1
v : ι → E
inst✝ : Algebra.IsSeparable F E
h : Submodule.span F (Set.range v) = ⊤
⊢ Submodule.span F (Set.range fun x => v x ^ q ^ n) = Submodule.span F ↑(MonoidHom.mrange (powMonoidHom (q ^ n)))
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
q n : ℕ
hF : ExpChar F q
ι : Type u_1
v : ι → E
inst✝ : Algebra.IsSeparable F E
h : Submodule.span F (Set.range v) = ⊤
⊢ Set.range (DivisionSemiring.toSemiring.8 (q ^ n)) ⊆
    ↑(Submodule.span F (Set.range (DivisionSemiring.toSemiring.8 (q ^ n) ∘ v)))
tactic: refine (Submodule.span_mono <| Set.range_comp_subset_range _ _).antisymm (Submodule.span_le.2 ?_)
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
q n : ℕ
hF : ExpChar F q
ι : Type u_1
v : ι → E
inst✝ : Algebra.IsSeparable F E
h : Submodule.span F (Set.range v) = ⊤
⊢ Set.range (DivisionSemiring.toSemiring.8 (q ^ n)) ⊆
    ↑(Submodule.span F (Set.range (DivisionSemiring.toSemiring.8 (q ^ n) ∘ v)))
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
q n : ℕ
hF : ExpChar F q
ι : Type u_1
v : ι → E
inst✝ : Algebra.IsSeparable F E
h : Submodule.span F (Set.range v) = ⊤
⊢ DivisionSemiring.toSemiring.8 (q ^ n) '' Set.univ ⊆
    ↑(Submodule.span F (DivisionSemiring.toSemiring.8 (q ^ n) '' Set.range v))
tactic: rw [Set.range_comp, ← Set.image_univ]
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
q n : ℕ
hF : ExpChar F q
ι : Type u_1
v : ι → E
inst✝ : Algebra.IsSeparable F E
h : Submodule.span F (Set.range v) = ⊤
⊢ DivisionSemiring.toSemiring.8 (q ^ n) '' Set.univ ⊆
    ↑(Submodule.span F (DivisionSemiring.toSemiring.8 (q ^ n) '' Set.range v))
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
q n : ℕ
hF : ExpChar F q
ι : Type u_1
v : ι → E
inst✝ : Algebra.IsSeparable F E
h : Submodule.span F (Set.range v) = ⊤
this : ExpChar E q
⊢ DivisionSemiring.toSemiring.8 (q ^ n) '' Set.univ ⊆
    ↑(Submodule.span F (DivisionSemiring.toSemiring.8 (q ^ n) '' Set.range v))
tactic: haveI := expChar_of_injective_algebraMap (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
q n : ℕ
hF : ExpChar F q
ι : Type u_1
v : ι → E
inst✝ : Algebra.IsSeparable F E
h : Submodule.span F (Set.range v) = ⊤
this : ExpChar E q
⊢ DivisionSemiring.toSemiring.8 (q ^ n) '' Set.univ ⊆
    ↑(Submodule.span F (DivisionSemiring.toSemiring.8 (q ^ n) '' Set.range v))
state_after: no goals
tactic: apply h ▸ Submodule.image_span_subset_span (LinearMap.iterateFrobenius F E q n) _