Skip to content

Commit c289ac2

Browse files
committed
feat(RingTheory/Algebraic): add some results on Transcendental (#17867)
- `transcendental_iff`, `transcendental_iff_ker_eq_bot`: similar to the API of `AlgebraicIndependent` - `IsAlgebraic.of_aeval`, `Transcendental.aeval`: behavior of transcendental over `aeval` - `Polynomial.transcendental`, `Polynomial.transcendental_X`: some specific polynomials are transcendental over its base ring - `Transcendental.linearIndependent_sub_inv`: if `E / F` is a field extension, `x` is an element of `E` transcendental over `F`, then `{(x - a)⁻¹ | a : F}` is linearly independent over `F` - `transcendental_algebraMap_iff`: negation of `isAlgebraic_algebraMap_iff`
1 parent 2a3ae36 commit c289ac2

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed

Mathlib/RingTheory/Algebraic.lean

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,63 @@ theorem is_transcendental_of_subsingleton [Subsingleton R] (x : A) : Transcenden
4040

4141
variable {R}
4242

43+
/-- An element `x` is transcendental over `R` if and only if for any polynomial `p`,
44+
`Polynomial.aeval x p = 0` implies `p = 0`. This is similar to `algebraicIndependent_iff`. -/
45+
theorem transcendental_iff {x : A} :
46+
Transcendental R x ↔ ∀ p : R[X], aeval x p = 0 → p = 0 := by
47+
rw [Transcendental, IsAlgebraic, not_exists]
48+
congr! 1; tauto
49+
50+
variable (R) in
51+
theorem Polynomial.transcendental_X : Transcendental R (X (R := R)) := by
52+
simp [transcendental_iff]
53+
54+
theorem IsAlgebraic.of_aeval {r : A} (f : R[X]) (hf : f.natDegree ≠ 0)
55+
(hf' : f.leadingCoeff ∈ nonZeroDivisors R) (H : IsAlgebraic R (aeval r f)) :
56+
IsAlgebraic R r := by
57+
obtain ⟨p, h1, h2⟩ := H
58+
have : (p.comp f).coeff (p.natDegree * f.natDegree) ≠ 0 := fun h ↦ h1 <| by
59+
rwa [coeff_comp_degree_mul_degree hf,
60+
mul_right_mem_nonZeroDivisors_eq_zero_iff (pow_mem hf' _),
61+
leadingCoeff_eq_zero] at h
62+
exact ⟨p.comp f, fun h ↦ this (by simp [h]), by rwa [aeval_comp]⟩
63+
64+
theorem Transcendental.aeval {r : A} (H : Transcendental R r) (f : R[X]) (hf : f.natDegree ≠ 0)
65+
(hf' : f.leadingCoeff ∈ nonZeroDivisors R) :
66+
Transcendental R (aeval r f) := fun h ↦ H (h.of_aeval f hf hf')
67+
68+
theorem Polynomial.transcendental (f : R[X]) (hf : f.natDegree ≠ 0)
69+
(hf' : f.leadingCoeff ∈ nonZeroDivisors R) :
70+
Transcendental R f := by
71+
simpa using (transcendental_X R).aeval f hf hf'
72+
73+
/-- If `E / F` is a field extension, `x` is an element of `E` transcendental over `F`,
74+
then `{(x - a)⁻¹ | a : F}` is linearly independent over `F`. -/
75+
theorem Transcendental.linearIndependent_sub_inv
76+
{F E : Type*} [Field F] [Field E] [Algebra F E] {x : E} (H : Transcendental F x) :
77+
LinearIndependent F fun a ↦ (x - algebraMap F E a)⁻¹ := by
78+
rw [transcendental_iff] at H
79+
refine linearIndependent_iff'.2 fun s m hm i hi ↦ ?_
80+
have hnz (a : F) : x - algebraMap F E a ≠ 0 := fun h ↦
81+
X_sub_C_ne_zero a <| H (.X - .C a) (by simp [h])
82+
let b := s.prod fun j ↦ x - algebraMap F E j
83+
have h1 : ∀ i ∈ s, m i • (b * (x - algebraMap F E i)⁻¹) =
84+
m i • (s.erase i).prod fun j ↦ x - algebraMap F E j := fun i hi ↦ by
85+
simp_rw [b, ← s.prod_erase_mul _ hi, mul_inv_cancel_right₀ (hnz i)]
86+
replace hm := congr(b * $(hm))
87+
simp_rw [mul_zero, Finset.mul_sum, mul_smul_comm, Finset.sum_congr rfl h1] at hm
88+
let p : Polynomial F := s.sum fun i ↦ .C (m i) * (s.erase i).prod fun j ↦ .X - .C j
89+
replace hm := congr(Polynomial.aeval i $(H p (by simp_rw [← hm, p, map_sum, map_mul, map_prod,
90+
map_sub, aeval_X, aeval_C, Algebra.smul_def])))
91+
have h2 : ∀ j ∈ s.erase i, m j * ((s.erase j).prod fun x ↦ i - x) = 0 := fun j hj ↦ by
92+
have := Finset.mem_erase_of_ne_of_mem (Finset.ne_of_mem_erase hj).symm hi
93+
simp_rw [← (s.erase j).prod_erase_mul _ this, sub_self, mul_zero]
94+
simp_rw [map_zero, p, map_sum, map_mul, map_prod, map_sub, aeval_X,
95+
aeval_C, Algebra.id.map_eq_self, ← s.sum_erase_add _ hi,
96+
Finset.sum_eq_zero h2, zero_add] at hm
97+
exact eq_zero_of_ne_zero_of_mul_right_eq_zero (Finset.prod_ne_zero_iff.2 fun j hj ↦
98+
sub_ne_zero.2 (Finset.ne_of_mem_erase hj).symm) hm
99+
43100
/-- A subalgebra is algebraic if all its elements are algebraic. -/
44101
nonrec
45102
def Subalgebra.IsAlgebraic (S : Subalgebra R A) : Prop :=
@@ -86,10 +143,18 @@ theorem isAlgebraic_iff_not_injective {x : A} :
86143
IsAlgebraic R x ↔ ¬Function.Injective (Polynomial.aeval x : R[X] →ₐ[R] A) := by
87144
simp only [IsAlgebraic, injective_iff_map_eq_zero, not_forall, and_comm, exists_prop]
88145

146+
/-- An element `x` is transcendental over `R` if and only if the map `Polynomial.aeval x`
147+
is injective. This is similar to `algebraicIndependent_iff_injective_aeval`. -/
89148
theorem transcendental_iff_injective {x : A} :
90149
Transcendental R x ↔ Function.Injective (Polynomial.aeval x : R[X] →ₐ[R] A) :=
91150
isAlgebraic_iff_not_injective.not_left
92151

152+
/-- An element `x` is transcendental over `R` if and only if the kernel of the ring homomorphism
153+
`Polynomial.aeval x` is the zero ideal. This is similar to `algebraicIndependent_iff_ker_eq_bot`. -/
154+
theorem transcendental_iff_ker_eq_bot {x : A} :
155+
Transcendental R x ↔ RingHom.ker (aeval (R := R) x) = ⊥ := by
156+
rw [transcendental_iff_injective, RingHom.injective_iff_ker_eq_bot]
157+
93158
end
94159

95160
section zero_ne_one
@@ -174,6 +239,10 @@ theorem isAlgebraic_algebraMap_iff {a : S} (h : Function.Injective (algebraMap S
174239
IsAlgebraic R (algebraMap S A a) ↔ IsAlgebraic R a :=
175240
isAlgebraic_algHom_iff (IsScalarTower.toAlgHom R S A) h
176241

242+
theorem transcendental_algebraMap_iff {a : S} (h : Function.Injective (algebraMap S A)) :
243+
Transcendental R (algebraMap S A a) ↔ Transcendental R a := by
244+
simp_rw [Transcendental, isAlgebraic_algebraMap_iff h]
245+
177246
theorem IsAlgebraic.of_pow {r : A} {n : ℕ} (hn : 0 < n) (ht : IsAlgebraic R (r ^ n)) :
178247
IsAlgebraic R r := by
179248
obtain ⟨p, p_nonzero, hp⟩ := ht

0 commit comments

Comments
 (0)