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

tactic: have h' := h.coe_range
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✝¹ : FiniteDimensional F E
inst✝ : IsSeparable F E
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
inst✝¹ : FiniteDimensional F E
inst✝ : IsSeparable F E
h : LinearIndependent F v
h' : LinearIndependent (ι := { x // x ∈ Set.range v }) F Subtype.val
⊢ LinearIndependent F fun x => v x ^ q ^ n

tactic: let ι' := h'.extend (Set.range v).subset_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✝¹ : FiniteDimensional F E
inst✝ : IsSeparable F E
h : LinearIndependent F v
h' : LinearIndependent (ι := { x // x ∈ Set.range v }) F Subtype.val
⊢ 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
inst✝¹ : FiniteDimensional F E
inst✝ : IsSeparable F E
h : LinearIndependent F v
h' : LinearIndependent (ι := { x // x ∈ Set.range v }) F Subtype.val
ι' : Set E := h'.extend ⋯
⊢ LinearIndependent F fun x => v x ^ q ^ n

tactic: let b : Basis ι' F E := Basis.extend h'
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✝¹ : FiniteDimensional F E
inst✝ : IsSeparable F E
h : LinearIndependent F v
h' : LinearIndependent (ι := { x // x ∈ Set.range v }) F Subtype.val
ι' : Set E := h'.extend ⋯
⊢ 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
inst✝¹ : FiniteDimensional F E
inst✝ : IsSeparable F E
h : LinearIndependent F v
h' : LinearIndependent (ι := { x // x ∈ Set.range v }) F Subtype.val
ι' : Set E := h'.extend ⋯
b : Basis (↑ι') F E := Basis.extend h'
⊢ LinearIndependent F fun x => v x ^ q ^ n

tactic: letI : Fintype ι' := fintypeBasisIndex b
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✝¹ : FiniteDimensional F E
inst✝ : IsSeparable F E
h : LinearIndependent F v
h' : LinearIndependent (ι := { x // x ∈ Set.range v }) F Subtype.val
ι' : Set E := h'.extend ⋯
b : Basis (↑ι') F E := Basis.extend h'
⊢ 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
inst✝¹ : FiniteDimensional F E
inst✝ : IsSeparable F E
h : LinearIndependent F v
h' : LinearIndependent (ι := { x // x ∈ Set.range v }) F Subtype.val
ι' : Set E := h'.extend ⋯
b : Basis (↑ι') F E := Basis.extend h'
this : Fintype ↑ι' := fintypeBasisIndex b
⊢ LinearIndependent F fun x => v x ^ q ^ n

tactic: have H := linearIndependent_of_top_le_span_of_card_eq_finrank
  (span_map_pow_expChar_pow_eq_top_of_isSeparable q n b.span_eq).ge
  (finrank_eq_card_basis b).symm
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✝¹ : FiniteDimensional F E
inst✝ : IsSeparable F E
h : LinearIndependent F v
h' : LinearIndependent (ι := { x // x ∈ Set.range v }) F Subtype.val
ι' : Set E := h'.extend ⋯
b : Basis (↑ι') F E := Basis.extend h'
this : Fintype ↑ι' := fintypeBasisIndex b
⊢ 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
inst✝¹ : FiniteDimensional F E
inst✝ : IsSeparable F E
h : LinearIndependent F v
h' : LinearIndependent (ι := { x // x ∈ Set.range v }) F Subtype.val
ι' : Set E := h'.extend ⋯
b : Basis (↑ι') F E := Basis.extend h'
this : Fintype ↑ι' := fintypeBasisIndex b
H : LinearIndependent F fun (x : ↑ι') => b x ^ q ^ n
⊢ LinearIndependent F fun x => v x ^ q ^ n

tactic: let f (i : ι) : ι' := ⟨v i, h'.subset_extend _ ⟨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
inst✝¹ : FiniteDimensional F E
inst✝ : IsSeparable F E
h : LinearIndependent F v
h' : LinearIndependent (ι := { x // x ∈ Set.range v }) F Subtype.val
ι' : Set E := h'.extend ⋯
b : Basis (↑ι') F E := Basis.extend h'
this : Fintype ↑ι' := fintypeBasisIndex b
H : LinearIndependent F fun (x : ↑ι') => b x ^ q ^ n
⊢ 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
inst✝¹ : FiniteDimensional F E
inst✝ : IsSeparable F E
h : LinearIndependent F v
h' : LinearIndependent (ι := { x // x ∈ Set.range v }) F Subtype.val
ι' : Set E := h'.extend ⋯
b : Basis (↑ι') F E := Basis.extend h'
this : Fintype ↑ι' := fintypeBasisIndex b
H : LinearIndependent F fun (x : ↑ι') => b x ^ q ^ n
f : ι → ↑ι' := fun i => ⟨v i, ⋯⟩
⊢ LinearIndependent F fun x => v x ^ q ^ n

tactic: convert H.comp f fun _ _ heq ↦ h.injective (by simpa only [f, Subtype.mk.injEq] using 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
q n : ℕ
hF : ExpChar F q
ι : Type u_1
v : ι → E
inst✝¹ : FiniteDimensional F E
inst✝ : IsSeparable F E
h : LinearIndependent F v
h' : LinearIndependent (ι := { x // x ∈ Set.range v }) F Subtype.val
ι' : Set E := h'.extend ⋯
b : Basis (↑ι') F E := Basis.extend h'
this : Fintype ↑ι' := fintypeBasisIndex b
H : LinearIndependent F fun (x : ↑ι') => b x ^ q ^ n
f : ι → ↑ι' := fun i => ⟨v i, ⋯⟩
⊢ LinearIndependent F fun x => v x ^ q ^ n
state_after: case h.e'_4.h
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✝¹ : FiniteDimensional F E
inst✝ : IsSeparable F E
h : LinearIndependent F v
h' : LinearIndependent (ι := { x // x ∈ Set.range v }) F Subtype.val
ι' : Set E := h'.extend ⋯
b : Basis (↑ι') F E := Basis.extend h'
this : Fintype ↑ι' := fintypeBasisIndex b
H : LinearIndependent F fun (x : ↑ι') => b x ^ q ^ n
f : ι → ↑ι' := fun i => ⟨v i, ⋯⟩
x✝ : ι
⊢ v x✝ ^ q ^ n = ((fun x => b x ^ q ^ n) ∘ f) x✝

tactic: simp_rw [Function.comp_apply, b, Basis.extend_apply_self]
state_before: case h.e'_4.h
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✝¹ : FiniteDimensional F E
inst✝ : IsSeparable F E
h : LinearIndependent F v
h' : LinearIndependent (ι := { x // x ∈ Set.range v }) F Subtype.val
ι' : Set E := h'.extend ⋯
b : Basis (↑ι') F E := Basis.extend h'
this : Fintype ↑ι' := fintypeBasisIndex b
H : LinearIndependent F fun (x : ↑ι') => b x ^ q ^ n
f : ι → ↑ι' := fun i => ⟨v i, ⋯⟩
x✝ : ι
⊢ v x✝ ^ q ^ n = ((fun x => b x ^ q ^ n) ∘ f) x✝
state_after: no goals

tactic: simpa only [f, Subtype.mk.injEq] using 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
q n : ℕ
hF : ExpChar F q
ι : Type u_1
v : ι → E
inst✝¹ : FiniteDimensional F E
inst✝ : IsSeparable F E
h : LinearIndependent F v
h' : LinearIndependent (ι := { x // x ∈ Set.range v }) F Subtype.val
ι' : Set E := h'.extend ⋯
b : Basis (↑ι') F E := Basis.extend h'
this : Fintype ↑ι' := fintypeBasisIndex b
H : LinearIndependent F fun (x : ↑ι') => b x ^ q ^ n
f : ι → ↑ι' := fun i => ⟨v i, ⋯⟩
x✝¹ x✝ : ι
heq : f x✝¹ = f x✝
⊢ v x✝¹ = v x✝
state_after: no goals