AlgebraicCurves.Foundations.FieldTheory.Proofs.IntermediateField_finiteDimensional_adjoin_of_linearDisjoint_of_transcendental.R1AF8LD.linearIndependent_pow_mul
Source context 10 commands
Surrounding namespaces, section variables, and local commands at this declaration.
section ProofImplementation
namespace AlgebraicCurves.Foundations.FieldTheory.Proofs
namespace IntermediateField_finiteDimensional_adjoin_of_linearDisjoint_of_transcendental
noncomputable section
open scoped IntermediateField
namespace R1AF8LD
section LD
open Polynomial IntermediateField
open scoped IntermediateField.algebraAdjoinAdjoin
variable {K₀ L F₀ F : Type*} [Field K₀] [Field L] [Field F₀] [Field F]
[Algebra K₀ F₀] [Algebra L F] [Algebra F₀ F]Lean source · full declaration
theorem linearIndependent_pow_mul {ι : Type*} [Finite ι] {x : F₀} (hx : Transcendental K₀ x)
{y : ι → F₀} (hy : LinearIndependent K₀⟮x⟯ y) (d : ℕ) :
LinearIndependent K₀ (fun q : ι × Fin d => x ^ (q.2 : ℕ) * y q.1) := by
classical
let _ : Fintype ι := Fintype.ofFinite ι
rw [Fintype.linearIndependent_iff]
intro c hc
set Pp : ι → K₀[X] := fun i => ∑ k : Fin d, C (c (i, k)) * X ^ (k : ℕ) with hPp
have hmem : ∀ i, aeval x (Pp i) ∈ K₀⟮x⟯ := fun i => by
apply algebra_adjoin_le_adjoin K₀ _
rw [Algebra.adjoin_singleton_eq_range_aeval]
exact ⟨Pp i, rfl⟩
set r : ι → K₀⟮x⟯ := fun i => ⟨aeval x (Pp i), hmem i⟩ with hr
have hexp : ∀ i, (r i • y i : F₀) = ∑ k : Fin d, c (i, k) • (x ^ (k : ℕ) * y i) := by
intro i
change aeval x (Pp i) * y i = _
simp only [hPp, map_sum, map_mul, aeval_C, map_pow, aeval_X, Finset.sum_mul]
refine Finset.sum_congr rfl fun k _ => ?_
rw [Algebra.smul_def, mul_assoc]
have hsum : ∑ i, r i • y i = 0 := by
rw [Finset.sum_congr rfl fun i _ => hexp i, ← hc, Fintype.sum_prod_type]
rw [Fintype.linearIndependent_iff] at hy
have hr0 := hy r hsum
intro q
obtain ⟨i, k⟩ := q
have hPi : Pp i = 0 := by
have h1 : aeval x (Pp i) = 0 := by
have := congrArg (fun z : K₀⟮x⟯ => (z : F₀)) (hr0 i)
exact this
exact (transcendental_iff.mp hx) _ h1
have hcoeff : (Pp i).coeff k = c (i, k) := by
simp only [hPp, finsetSum_coeff, coeff_C_mul_X_pow]
rw [Finset.sum_eq_single k]
· simp
· intro k' _ hk'
rw [ite_eq_right]
intro h
exact hk' (Fin.ext h).symm
· intro h; exact absurd (Finset.mem_univ k) h
rw [← hcoeff, hPi, coeff_zero]