|
| 1 | +/- |
| 2 | +Copyright (c) 2020 Anne Baanen. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Author: Anne Baanen |
| 5 | +-/ |
| 6 | + |
| 7 | +import ring_theory.algebraic |
| 8 | + |
| 9 | +/-! |
| 10 | +# Ideals over/under ideals |
| 11 | +
|
| 12 | +This file concerns ideals lying over other ideals. |
| 13 | +Let `f : R →+* S` be a ring homomorphism (typically a ring extension), `I` an ideal of `R` and |
| 14 | +`J` an ideal of `S`. We say `J` lies over `I` (and `I` under `J`) if `I` is the `f`-preimage of `J`. |
| 15 | +This is expressed here by writing `I = J.comap f`. |
| 16 | +-/ |
| 17 | + |
| 18 | +variables {R : Type*} [comm_ring R] |
| 19 | + |
| 20 | +namespace ideal |
| 21 | + |
| 22 | +open polynomial |
| 23 | +open submodule |
| 24 | + |
| 25 | +section comm_ring |
| 26 | +variables {S : Type*} [comm_ring S] {f : R →+* S} {I : ideal S} |
| 27 | + |
| 28 | +lemma coeff_zero_mem_comap_of_root_mem {r : S} (hr : r ∈ I) {p : polynomial R} |
| 29 | + (hp : p.eval₂ f r = 0) : p.coeff 0 ∈ I.comap f := |
| 30 | +begin |
| 31 | + rw [←p.div_X_mul_X_add, eval₂_add, eval₂_C, eval₂_mul, eval₂_X] at hp, |
| 32 | + refine mem_comap.mpr ((I.add_mem_iff_right _).mp (by simpa only [←hp] using I.zero_mem)), |
| 33 | + exact I.mul_mem_left hr |
| 34 | +end |
| 35 | +end comm_ring |
| 36 | + |
| 37 | +section integral_domain |
| 38 | +variables {S : Type*} [integral_domain S] {f : R →+* S} {I : ideal S} |
| 39 | + |
| 40 | +lemma exists_coeff_ne_zero_mem_comap_of_root_mem {r : S} (r_ne_zero : r ≠ 0) (hr : r ∈ I) |
| 41 | + {p : polynomial R} : ∀ (p_ne_zero : p ≠ 0) (hp : p.eval₂ f r = 0), |
| 42 | + ∃ i, p.coeff i ≠ 0 ∧ p.coeff i ∈ I.comap f := |
| 43 | +begin |
| 44 | + refine p.rec_on_horner _ _ _, |
| 45 | + { intro h, contradiction }, |
| 46 | + { intros p a coeff_eq_zero a_ne_zero ih p_ne_zero hp, |
| 47 | + refine ⟨0, _, coeff_zero_mem_comap_of_root_mem hr hp⟩, |
| 48 | + simp [coeff_eq_zero, a_ne_zero] }, |
| 49 | + { intros p p_nonzero ih mul_nonzero hp, |
| 50 | + rw [eval₂_mul, eval₂_X, mul_eq_zero] at hp, |
| 51 | + obtain ⟨i, hi, mem⟩ := ih p_nonzero (or.resolve_right hp r_ne_zero), |
| 52 | + refine ⟨i + 1, _, _⟩; simp [hi, mem] } |
| 53 | +end |
| 54 | + |
| 55 | +lemma comap_ne_bot_of_root_mem {r : S} (r_ne_zero : r ≠ 0) (hr : r ∈ I) |
| 56 | + {p : polynomial R} (p_ne_zero : p ≠ 0) (hp : p.eval₂ f r = 0) : |
| 57 | + I.comap f ≠ ⊥ := |
| 58 | +λ h, let ⟨i, hi, mem⟩ := exists_coeff_ne_zero_mem_comap_of_root_mem r_ne_zero hr p_ne_zero hp in |
| 59 | +absurd ((mem_bot _).mp (eq_bot_iff.mp h mem)) hi |
| 60 | + |
| 61 | +variables [algebra R S] |
| 62 | + |
| 63 | +lemma comap_ne_bot_of_algebraic_mem {I : ideal S} {x : S} |
| 64 | + (x_ne_zero : x ≠ 0) (x_mem : x ∈ I) (hx : is_algebraic R x) : I.comap (algebra_map R S) ≠ ⊥ := |
| 65 | +let ⟨p, p_ne_zero, hp⟩ := hx |
| 66 | +in comap_ne_bot_of_root_mem x_ne_zero x_mem p_ne_zero hp |
| 67 | + |
| 68 | +lemma comap_ne_bot_of_integral_mem [nontrivial R] {I : ideal S} {x : S} |
| 69 | + (x_ne_zero : x ≠ 0) (x_mem : x ∈ I) (hx : is_integral R x) : I.comap (algebra_map R S) ≠ ⊥ := |
| 70 | +comap_ne_bot_of_algebraic_mem x_ne_zero x_mem (hx.is_algebraic R) |
| 71 | + |
| 72 | +lemma integral_closure.comap_ne_bot [nontrivial R] {I : ideal (integral_closure R S)} |
| 73 | + (I_ne_bot : I ≠ ⊥) : I.comap (algebra_map R (integral_closure R S)) ≠ ⊥ := |
| 74 | +let ⟨x, x_mem, x_ne_zero⟩ := I.ne_bot_iff.mp I_ne_bot in |
| 75 | +comap_ne_bot_of_integral_mem x_ne_zero x_mem (integral_closure.is_integral x) |
| 76 | + |
| 77 | +lemma integral_closure.eq_bot_of_comap_eq_bot [nontrivial R] {I : ideal (integral_closure R S)} : |
| 78 | + I.comap (algebra_map R (integral_closure R S)) = ⊥ → I = ⊥ := |
| 79 | +imp_of_not_imp_not _ _ integral_closure.comap_ne_bot |
| 80 | + |
| 81 | +end integral_domain |
| 82 | + |
| 83 | +end ideal |
0 commit comments