@@ -178,6 +178,88 @@ variables {R : Type u} {σ : Type v} [comm_ring R]
178
178
namespace ideal
179
179
open polynomial
180
180
181
+ /-- The push-forward of an ideal `I` of `R` to `polynomial R` via inclusion
182
+ is exactly the set of polynomials whose coefficients are in `I` -/
183
+ theorem mem_map_C_iff {I : ideal R} {f : polynomial R} :
184
+ f ∈ (ideal.map C I : ideal (polynomial R)) ↔ ∀ n : ℕ, f.coeff n ∈ I :=
185
+ begin
186
+ split,
187
+ { intros hf,
188
+ apply submodule.span_induction hf,
189
+ { intros f hf n,
190
+ cases (set.mem_image _ _ _).mp hf with x hx,
191
+ rw [← hx.right, coeff_C],
192
+ by_cases (n = 0 ),
193
+ { simpa [h] using hx.left },
194
+ { simp [h] } },
195
+ { simp },
196
+ { exact λ f g hf hg n, by simp [I.add_mem (hf n) (hg n)] },
197
+ { refine λ f g hg n, _,
198
+ rw [smul_eq_mul, coeff_mul],
199
+ exact I.sum_mem (λ c hc, I.smul_mem (f.coeff c.fst) (hg c.snd)) } },
200
+ { intros hf,
201
+ rw ← sum_monomial_eq f,
202
+ refine (map C I : ideal (polynomial R)).sum_mem (λ n hn, _),
203
+ simp [single_eq_C_mul_X],
204
+ rw mul_comm,
205
+ exact (map C I : ideal (polynomial R)).smul_mem _ (mem_map_of_mem (hf n)) }
206
+ end
207
+
208
+ lemma quotient_map_C_eq_zero {I : ideal R} :
209
+ ∀ a ∈ I, ((quotient.mk (map C I : ideal (polynomial R))).comp C) a = 0 :=
210
+ begin
211
+ intros a ha,
212
+ rw [ring_hom.comp_apply, quotient.eq_zero_iff_mem],
213
+ exact mem_map_of_mem ha,
214
+ end
215
+
216
+ lemma eval₂_C_mk_eq_zero {I : ideal R} :
217
+ ∀ f ∈ (map C I : ideal (polynomial R)), eval₂_ring_hom (C.comp (quotient.mk I)) X f = 0 :=
218
+ begin
219
+ intros a ha,
220
+ rw ← sum_monomial_eq a,
221
+ dsimp,
222
+ rw eval₂_sum (C.comp (quotient.mk I)) a monomial X,
223
+ refine finset.sum_eq_zero (λ n hn, _),
224
+ dsimp,
225
+ rw eval₂_monomial (C.comp (quotient.mk I)) X,
226
+ refine mul_eq_zero_of_left (polynomial.ext (λ m, _)) (X ^ n),
227
+ erw coeff_C,
228
+ by_cases h : m = 0 ,
229
+ { simpa [h] using quotient.eq_zero_iff_mem.2 ((mem_map_C_iff.1 ha) n) },
230
+ { simp [h] }
231
+ end
232
+
233
+ /-- If `I` is an ideal of `R`, then the ring polynomials over the quotient ring `I.quotient` is
234
+ isomorphic to the quotient of `polynomial R` by the ideal `map C I`,
235
+ where `map C I` contains exactly the polynomials whose coefficients all lie in `I` -/
236
+ def polynomial_quotient_equiv_quotient_polynomial {I : ideal R} :
237
+ polynomial (I.quotient) ≃+* (map C I : ideal (polynomial R)).quotient :=
238
+ { to_fun := eval₂_ring_hom
239
+ (quotient.lift I ((quotient.mk (map C I : ideal (polynomial R))).comp C) quotient_map_C_eq_zero)
240
+ ((quotient.mk (map C I : ideal (polynomial R)) X)),
241
+ inv_fun := quotient.lift (map C I : ideal (polynomial R))
242
+ (eval₂_ring_hom (C.comp (quotient.mk I)) X) eval₂_C_mk_eq_zero,
243
+ map_mul' := λ f g, by simp,
244
+ map_add' := λ f g, by simp,
245
+ left_inv := begin
246
+ intro f,
247
+ apply polynomial.induction_on' f,
248
+ { simp_intros p q hp hq,
249
+ rw [hp, hq] },
250
+ { rintros n ⟨x⟩,
251
+ simp [monomial_eq_smul_X, C_mul'] }
252
+ end ,
253
+ right_inv := begin
254
+ rintro ⟨f⟩,
255
+ apply polynomial.induction_on' f,
256
+ { simp_intros p q hp hq,
257
+ rw [hp, hq] },
258
+ { intros n a,
259
+ simp [monomial_eq_smul_X, ← C_mul' a (X ^ n)] },
260
+ end ,
261
+ }
262
+
181
263
/-- Transport an ideal of `R[X]` to an `R`-submodule of `R[X]`. -/
182
264
def of_polynomial (I : ideal (polynomial R)) : submodule R (polynomial R) :=
183
265
{ carrier := I.carrier,
0 commit comments