@@ -40,6 +40,63 @@ theorem is_transcendental_of_subsingleton [Subsingleton R] (x : A) : Transcenden
40
40
41
41
variable {R}
42
42
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
+
43
100
/-- A subalgebra is algebraic if all its elements are algebraic. -/
44
101
nonrec
45
102
def Subalgebra.IsAlgebraic (S : Subalgebra R A) : Prop :=
@@ -86,10 +143,18 @@ theorem isAlgebraic_iff_not_injective {x : A} :
86
143
IsAlgebraic R x ↔ ¬Function.Injective (Polynomial.aeval x : R[X] →ₐ[R] A) := by
87
144
simp only [IsAlgebraic, injective_iff_map_eq_zero, not_forall, and_comm, exists_prop]
88
145
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`. -/
89
148
theorem transcendental_iff_injective {x : A} :
90
149
Transcendental R x ↔ Function.Injective (Polynomial.aeval x : R[X] →ₐ[R] A) :=
91
150
isAlgebraic_iff_not_injective.not_left
92
151
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
+
93
158
end
94
159
95
160
section zero_ne_one
@@ -174,6 +239,10 @@ theorem isAlgebraic_algebraMap_iff {a : S} (h : Function.Injective (algebraMap S
174
239
IsAlgebraic R (algebraMap S A a) ↔ IsAlgebraic R a :=
175
240
isAlgebraic_algHom_iff (IsScalarTower.toAlgHom R S A) h
176
241
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
+
177
246
theorem IsAlgebraic.of_pow {r : A} {n : ℕ} (hn : 0 < n) (ht : IsAlgebraic R (r ^ n)) :
178
247
IsAlgebraic R r := by
179
248
obtain ⟨p, p_nonzero, hp⟩ := ht
0 commit comments