Theorem: LinearIndependent.map_pow_expChar_pow_of_separable
File: Mathlib/FieldTheory/PurelyInseparable.lean

tactic: let E' := adjoin F (Set.range v)
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
hsep : ∀ (i : ι), (minpoly F (v i)).Separable
h : LinearIndependent F v
⊢ LinearIndependent F 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
hsep : ∀ (i : ι), (minpoly F (v i)).Separable
h : LinearIndependent F v
E' : IntermediateField F E := adjoin F (Set.range v)
⊢ LinearIndependent F fun x => v x ^ q ^ n

tactic: haveI : IsSeparable F E' := (isSeparable_adjoin_iff_separable F _).2 <| by
  rintro _ ⟨y, rfl⟩; exact hsep y
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
hsep : ∀ (i : ι), (minpoly F (v i)).Separable
h : LinearIndependent F v
E' : IntermediateField F E := adjoin F (Set.range v)
⊢ LinearIndependent F 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
hsep : ∀ (i : ι), (minpoly F (v i)).Separable
h : LinearIndependent F v
E' : IntermediateField F E := adjoin F (Set.range v)
this : IsSeparable F ↥E'
⊢ LinearIndependent F fun x => v x ^ q ^ n

tactic: let v' (i : ι) : E' := ⟨v i, subset_adjoin F _ ⟨i, rfl⟩⟩
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
hsep : ∀ (i : ι), (minpoly F (v i)).Separable
h : LinearIndependent F v
E' : IntermediateField F E := adjoin F (Set.range v)
this : IsSeparable F ↥E'
⊢ LinearIndependent F 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
hsep : ∀ (i : ι), (minpoly F (v i)).Separable
h : LinearIndependent F v
E' : IntermediateField F E := adjoin F (Set.range v)
this : IsSeparable F ↥E'
v' : ι → ↥E' := fun i => ⟨v i, ⋯⟩
⊢ LinearIndependent F fun x => v x ^ q ^ n

tactic: have h' : LinearIndependent F v' := h.of_comp E'.val.toLinearMap
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
hsep : ∀ (i : ι), (minpoly F (v i)).Separable
h : LinearIndependent F v
E' : IntermediateField F E := adjoin F (Set.range v)
this : IsSeparable F ↥E'
v' : ι → ↥E' := fun i => ⟨v i, ⋯⟩
⊢ LinearIndependent F 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
hsep : ∀ (i : ι), (minpoly F (v i)).Separable
h : LinearIndependent F v
E' : IntermediateField F E := adjoin F (Set.range v)
this : IsSeparable F ↥E'
v' : ι → ↥E' := fun i => ⟨v i, ⋯⟩
h' : LinearIndependent F v'
⊢ LinearIndependent F fun x => v x ^ q ^ n

tactic: exact (h'.map_pow_expChar_pow_of_isSeparable q n).map'
  E'.val.toLinearMap (LinearMap.ker_eq_bot_of_injective E'.val.injective)
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
hsep : ∀ (i : ι), (minpoly F (v i)).Separable
h : LinearIndependent F v
E' : IntermediateField F E := adjoin F (Set.range v)
this : IsSeparable F ↥E'
v' : ι → ↥E' := fun i => ⟨v i, ⋯⟩
h' : LinearIndependent F v'
⊢ LinearIndependent F fun x => v x ^ q ^ n
state_after: no goals

tactic: rintro _ ⟨y, rfl⟩
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
hsep : ∀ (i : ι), (minpoly F (v i)).Separable
h : LinearIndependent F v
E' : IntermediateField F E := adjoin F (Set.range v)
⊢ ∀ x ∈ Set.range v, (minpoly F x).Separable
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
q n : ℕ
hF : ExpChar F q
ι : Type u_1
v : ι → E
hsep : ∀ (i : ι), (minpoly F (v i)).Separable
h : LinearIndependent F v
E' : IntermediateField F E := adjoin F (Set.range v)
y : ι
⊢ (minpoly F (v y)).Separable

tactic: exact hsep y
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
q n : ℕ
hF : ExpChar F q
ι : Type u_1
v : ι → E
hsep : ∀ (i : ι), (minpoly F (v i)).Separable
h : LinearIndependent F v
E' : IntermediateField F E := adjoin F (Set.range v)
y : ι
⊢ (minpoly F (v y)).Separable
state_after: no goals