@@ -41,29 +41,30 @@ section CommRing
4141variable [CommRing K] [Field L] [Field F]
4242variable (i : K →+* L)
4343
44- theorem splits_zero : Splits ( 0 : K[X]) := by
45- simp
44+ @[deprecated (since := "2025-11-24")]
45+ alias splits_zero := Splits.zero
4646
47- theorem splits_of_map_eq_C {f : K[X]} {a : L} (h : f.map i = C a) : Splits (f.map i) := by
48- simp [h]
47+ @[deprecated "Use `Splits.C` instead." (since := "2025-11-24")]
48+ theorem splits_of_map_eq_C {f : K[X]} {a : L} (h : f.map i = C a) : Splits (f.map i) :=
49+ h ▸ Splits.C a
4950
50- theorem splits_C (a : K) : Splits (C a) := by
51- simp
51+ @[deprecated (since := "2025-11-24")]
52+ alias splits_C := Splits.C
5253
53- theorem splits_of_map_degree_eq_one {f : K[X]} (hf : degree (f.map i) = 1 ) : Splits (f.map i) :=
54- Splits.of_degree_eq_one hf
54+ @[deprecated (since := "2025-11-24")]
55+ alias splits_of_map_degree_eq_one := Splits.of_degree_eq_one
5556
56- theorem splits_of_degree_le_one {f : K[X]} (hf : degree f ≤ 1 ) : Splits (f.map i) :=
57- Splits.of_degree_le_one (degree_map_le.trans hf)
57+ @[deprecated (since := "2025-11-24")]
58+ alias splits_of_degree_le_one := Splits.of_degree_le_one
5859
59- theorem splits_of_degree_eq_one {f : K[X]} (hf : degree f = 1 ) : Splits (f.map i) :=
60- splits_of_degree_le_one i hf.le
60+ @[deprecated (since := "2025-11-24")]
61+ alias splits_of_degree_eq_one := Splits.of_degree_eq_one
6162
62- theorem splits_of_natDegree_le_one {f : K[X]} (hf : natDegree f ≤ 1 ) : Splits (f.map i) :=
63- splits_of_degree_le_one i (degree_le_of_natDegree_le hf)
63+ @[deprecated (since := "2025-11-24")]
64+ alias splits_of_natDegree_le_one := Splits.of_natDegree_le_one
6465
65- theorem splits_of_natDegree_eq_one {f : K[X]} (hf : natDegree f = 1 ) : Splits (f.map i) :=
66- splits_of_natDegree_le_one i (le_of_eq hf)
66+ @[deprecated (since := "2025-11-24")]
67+ alias splits_of_natDegree_eq_one := Splits.of_natDegree_eq_one
6768
6869theorem splits_mul {f g : K[X]} (hf : Splits (f.map i)) (hg : Splits (g.map i)) :
6970 Splits ((f * g).map i) := by
@@ -74,106 +75,78 @@ theorem splits_of_splits_mul' {f g : K[X]} (hfg : (f * g).map i ≠ 0) (h : Spli
7475 simp only [Splits, Polynomial.map_mul, mul_ne_zero_iff] at hfg h
7576 exact (splits_mul_iff hfg.1 hfg.2 ).mp h
7677
78+ @[deprecated "Use `Polynomial.map_map` instead." (since := "2025-11-24")]
7779theorem splits_map_iff {L : Type *} [CommRing L] (i : K →+* L) (j : L →+* F) {f : K[X]} :
7880 Splits ((f.map i).map j) ↔ Splits (f.map (j.comp i)) := by
79- simp [Splits, Polynomial.map_map]
81+ rw [ Polynomial.map_map]
8082
81- theorem splits_one : Splits (map i 1 ) :=
82- map_C i ▸ splits_C _
83+ @[deprecated (since := "2025-11-24")]
84+ alias splits_one := Splits.one
8385
8486theorem splits_of_isUnit [IsDomain K] {u : K[X]} (hu : IsUnit u) : (u.map i).Splits :=
85- (isUnit_iff.mp hu).choose_spec.2 ▸ map_C i ▸ splits_C _
87+ (isUnit_iff.mp hu).choose_spec.2 ▸ map_C i ▸ Splits.C _
8688
87- theorem splits_X_sub_C {x : K} : ((X - C x).map i).Splits :=
88- splits_of_degree_le_one _ <| degree_X_sub_C_le _
89+ @[deprecated (since := "2025-11-24")]
90+ alias splits_X_sub_C := Splits.X_sub_C
8991
90- theorem splits_X : (X.map i).Splits :=
91- splits_of_degree_le_one _ degree_X_le
92+ @[deprecated (since := "2025-11-24")]
93+ alias splits_X := Splits.X
9294
93- theorem splits_prod {ι : Type u} {s : ι → K[X]} {t : Finset ι} :
94- (∀ j ∈ t, ((s j).map i).Splits) → ((∏ x ∈ t, s x).map i).Splits := by
95- classical
96- refine Finset.induction_on t (fun _ => splits_one i) fun a t hat ih ht => ?_
97- rw [Finset.forall_mem_insert] at ht; rw [Finset.prod_insert hat]
98- exact splits_mul i ht.1 (ih ht.2 )
95+ @[deprecated (since := "2025-11-24")]
96+ alias splits_prod := Splits.prod
9997
100- theorem splits_pow {f : K[X]} (hf : (f.map i).Splits) (n : ℕ) : ((f ^ n).map i).Splits := by
101- rw [← Finset.card_range n, ← Finset.prod_const]
102- exact splits_prod i fun j _ => hf
98+ @[deprecated (since := "2025-11-24")]
99+ alias splits_pow := Splits.pow
103100
104- theorem splits_X_pow (n : ℕ) : ((X ^ n).map i).Splits :=
105- splits_pow i (splits_X i) n
101+ @[deprecated (since := "2025-11-24")]
102+ alias splits_X_pow := Splits.X_pow
106103
104+ @[deprecated "Use `Polynomial.map_id` instead." (since := "2025-11-24")]
107105theorem splits_id_iff_splits {f : K[X]} :
108106 ((f.map i).map (RingHom.id L)).Splits ↔ (f.map i).Splits := by
109- rw [splits_map_iff, RingHom.id_comp ]
107+ rw [map_id ]
110108
111109variable {i}
112110
113- -- TODO: Prove the analogous composition theorems for `Factors`
114- theorem Splits.comp_of_map_degree_le_one {f : K[X]} {p : K[X]} (hd : (p.map i).degree ≤ 1 )
115- (h : (f.map i).Splits) : ((f.comp p).map i).Splits := by
116- rw [splits_iff_splits] at h ⊢
117- by_cases hzero : map i (f.comp p) = 0
118- · exact Or.inl hzero
119- cases h with
120- | inl h0 =>
121- exact Or.inl <| map_comp i _ _ ▸ h0.symm ▸ zero_comp
122- | inr h =>
123- right
124- intro g irr dvd
125- rw [map_comp] at dvd hzero
126- cases lt_or_eq_of_le hd with
127- | inl hd =>
128- rw [eq_C_of_degree_le_zero (Nat.WithBot.lt_one_iff_le_zero.mp hd), comp_C] at dvd hzero
129- refine False.elim (irr.1 (isUnit_of_dvd_unit dvd ?_))
130- simpa using hzero
131- | inr hd =>
132- let _ := invertibleOfNonzero (leadingCoeff_ne_zero.mpr
133- (ne_zero_of_degree_gt (n := ⊥) (by rw [hd]; decide)))
134- rw [eq_X_add_C_of_degree_eq_one hd, dvd_comp_C_mul_X_add_C_iff _ _] at dvd
135- have := h (irr.map (algEquivCMulXAddC _ _).symm) dvd
136- rw [degree_eq_natDegree irr.ne_zero]
137- rwa [algEquivCMulXAddC_symm_apply, ← comp_eq_aeval,
138- degree_eq_natDegree (fun h => WithBot.bot_ne_one (h ▸ this)),
139- natDegree_comp, natDegree_C_mul (invertibleInvOf.ne_zero),
140- natDegree_X_sub_C, mul_one] at this
141-
142- theorem splits_iff_comp_splits_of_degree_eq_one {f : K[X]} {p : K[X]} (hd : (p.map i).degree = 1 ) :
143- (f.map i).Splits ↔ ((f.comp p).map i).Splits := by
144- rw [← splits_id_iff_splits, ← splits_id_iff_splits (f := f.comp p), map_comp]
145- refine ⟨fun h => Splits.comp_of_map_degree_le_one
146- (le_of_eq (map_id (R := L) ▸ hd)) h, fun h => ?_⟩
111+ theorem Splits.comp_of_degree_le_one {f : L[X]} {p : L[X]} (hd : p.degree ≤ 1 )
112+ (h : f.Splits) : (f.comp p).Splits := by
113+ obtain ⟨m, hm⟩ := splits_iff_exists_multiset.mp h
114+ rw [hm, mul_comp, C_comp, multiset_prod_comp]
115+ refine (Splits.C _).mul (Splits.multisetProd ?_)
116+ simp only [Multiset.mem_map]
117+ rintro - ⟨-, ⟨a, -, rfl⟩, rfl⟩
118+ apply Splits.of_degree_le_one
119+ grw [sub_comp, X_comp, C_comp, degree_sub_le, hd, degree_C_le, max_eq_left zero_le_one]
120+
121+ @[deprecated (since := "2025-11-24")]
122+ alias Splits.comp_of_map_degree_le_one := Splits.comp_of_degree_le_one
123+
124+ theorem splits_iff_comp_splits_of_degree_eq_one {f : L[X]} {p : L[X]} (hd : p.degree = 1 ) :
125+ f.Splits ↔ (f.comp p).Splits := by
126+ refine ⟨Splits.comp_of_degree_le_one hd.le, fun h ↦ ?_⟩
147127 let _ := invertibleOfNonzero (leadingCoeff_ne_zero.mpr
148128 (ne_zero_of_degree_gt (n := ⊥) (by rw [hd]; decide)))
149- have : (map i f) = ((map i f) .comp (map i p)) .comp ((C ⅟(map i p) .leadingCoeff *
150- (X - C ((map i p) .coeff 0 )))) := by
129+ have : f = (f .comp p) .comp ((C ⅟p .leadingCoeff *
130+ (X - C (p .coeff 0 )))) := by
151131 rw [comp_assoc]
152132 nth_rw 1 [eq_X_add_C_of_degree_eq_one hd]
153- simp only [coeff_map, invOf_eq_inv, mul_sub, ← C_mul, add_comp, mul_comp, C_comp, X_comp,
133+ simp only [invOf_eq_inv, mul_sub, ← C_mul, add_comp, mul_comp, C_comp, X_comp,
154134 ← mul_assoc]
155135 simp
156- refine this ▸ Splits.comp_of_map_degree_le_one ?_ h
157- simp [degree_C (inv_ne_zero (Invertible.ne_zero (a := (map i p).leadingCoeff)))]
158-
159- /--
160- This is a weaker variant of `Splits.comp_of_map_degree_le_one`,
161- but its conditions are easier to check.
162- -/
163- theorem Splits.comp_of_degree_le_one {f : K[X]} {p : K[X]} (hd : p.degree ≤ 1 )
164- (h : (f.map i).Splits) : ((f.comp p).map i).Splits :=
165- Splits.comp_of_map_degree_le_one (degree_map_le.trans hd) h
136+ rw [this]
137+ refine Splits.comp_of_degree_le_one ?_ h
138+ simp [degree_C (inv_ne_zero (Invertible.ne_zero (a := p.leadingCoeff)))]
166139
167- theorem Splits.comp_X_sub_C (a : K ) {f : K [X]}
168- (h : (f.map i). Splits) : (( f.comp (X - C a)).map i ).Splits :=
140+ theorem Splits.comp_X_sub_C (a : L ) {f : L [X]}
141+ (h : f. Splits) : (f.comp (X - C a)).Splits :=
169142 Splits.comp_of_degree_le_one (degree_X_sub_C_le _) h
170143
171- theorem Splits.comp_X_add_C (a : K ) {f : K [X]}
172- (h : (f.map i). Splits) : (( f.comp (X + C a)).map i ).Splits :=
173- Splits.comp_of_degree_le_one (by simpa using degree_X_sub_C_le (-a)) h
144+ theorem Splits.comp_X_add_C (a : L ) {f : L [X]}
145+ (h : f. Splits) : (f.comp (X + C a)).Splits :=
146+ Splits.comp_of_degree_le_one (degree_X_add_C a).le h
174147
175- theorem Splits.comp_neg_X {f : K [X]} (h : (f.map i). Splits) : (( f.comp (-X)).map i ).Splits :=
176- Splits.comp_of_degree_le_one (by simpa using degree_X_sub_C_le ( 0 : K) ) h
148+ theorem Splits.comp_neg_X {f : L [X]} (h : f. Splits) : (f.comp (-X)).Splits :=
149+ Splits.comp_of_degree_le_one (by rw [degree_neg, degree_X] ) h
177150
178151variable (i)
179152
@@ -246,7 +219,7 @@ theorem splits_prod_iff {ι : Type u} {s : ι → K[X]} {t : Finset ι} :
246219 classical
247220 refine
248221 Finset.induction_on t (fun _ =>
249- ⟨fun _ _ h => by simp only [Finset.notMem_empty] at h, fun _ => splits_one i ⟩)
222+ ⟨fun _ _ h => by simp only [Finset.notMem_empty] at h, by simp ⟩)
250223 fun a t hat ih ht => ?_
251224 rw [Finset.forall_mem_insert] at ht ⊢
252225 rw [Finset.prod_insert hat, Polynomial.map_mul, splits_mul_iff (map_ne_zero ht.1 )
@@ -430,7 +403,7 @@ theorem splits_id_of_splits {f : K[X]} (h : Splits (f.map i))
430403
431404theorem splits_comp_of_splits (i : R →+* K) (j : K →+* L) {f : R[X]} (h : Splits (f.map i)) :
432405 Splits (f.map (j.comp i)) :=
433- (splits_map_iff i j).mp (splits_of_splits_id _ <| (splits_map_iff i <| .id K).mpr h)
406+ f.map_map i j ▸ h.map j
434407
435408variable [Algebra R K] [Algebra R L]
436409
0 commit comments