@@ -4,7 +4,6 @@ Released under Apache 2.0 license as described in the file LICENSE.
4
4
Authors: Anne Baanen
5
5
-/
6
6
import Mathlib.RingTheory.Localization.Integral
7
- import Mathlib.RingTheory.Localization.LocalizationLocalization
8
7
9
8
/-!
10
9
# Integrally closed rings
@@ -278,44 +277,7 @@ end integralClosure
278
277
279
278
/-- Any field is integral closed. -/
280
279
/- Although `infer_instance` can find this if you import Mathlib, in this file they have not been
281
- proven yet. However, the next theorem is a fundamental property of `IsIntegrallyClosed`,
280
+ proven yet. However, it is used to prove a fundamental property of `IsIntegrallyClosed`,
282
281
and it is not desirable to involve more content from other files. -/
283
282
instance Field.instIsIntegrallyClosed (K : Type *) [Field K] : IsIntegrallyClosed K :=
284
283
(isIntegrallyClosed_iff K).mpr fun {x} _ ↦ ⟨x, rfl⟩
285
-
286
- open Localization Ideal IsLocalization in
287
- /-- An integral domain `R` is integral closed if `Rₘ` is integral closed
288
- for any maximal ideal `m` of `R`. -/
289
- theorem IsIntegrallyClosed.of_localization_maximal {R : Type *} [CommRing R] [IsDomain R]
290
- (h : ∀ p : Ideal R, p ≠ ⊥ → [p.IsMaximal] → IsIntegrallyClosed (Localization.AtPrime p)) :
291
- IsIntegrallyClosed R := by
292
- by_cases hf : IsField R
293
- · exact hf.toField.instIsIntegrallyClosed
294
- apply (isIntegrallyClosed_iff (FractionRing R)).mpr
295
- rintro ⟨x⟩ hx
296
- let I : Ideal R := span {x.2 .1 } / span {x.1 }
297
- have h1 : 1 ∈ I := by
298
- apply I.eq_top_iff_one.mp
299
- by_contra hn
300
- rcases I.exists_le_maximal hn with ⟨p, hpm, hpi⟩
301
- have hic := h p (Ring.ne_bot_of_isMaximal_of_not_isField hpm hf)
302
- have hxp : IsIntegral (Localization.AtPrime p) (mk x.1 x.2 ) := hx.tower_top
303
- /- `x.1 / x.2.1 ∈ Rₚ` since it is integral over `Rₚ` and `Rₚ` is integrally closed.
304
- More precisely, `x.1 / x.2.1 = y.1 / y.2.1` where `y.1, y.2.1 ∈ R` and `y.2.1 ∉ p`. -/
305
- rcases (isIntegrallyClosed_iff (FractionRing R)).mp hic hxp with ⟨⟨y⟩, hy⟩
306
- /- `y.2.1 ∈ I` since for all `a ∈ Ideal.span {x.1}`, say `a = b * x.1`,
307
- we have `y.2 * a = b * x.1 * y.2 = b * y.1 * x.2.1 ∈ Ideal.span {x.2.1}`. -/
308
- have hyi : y.2 .1 ∈ I := by
309
- intro a ha
310
- rcases mem_span_singleton'.mp ha with ⟨b, hb⟩
311
- apply mem_span_singleton'.mpr ⟨b * y.1 , _⟩
312
- rw [← hb, ← mul_assoc, mul_comm y.2 .1 b, mul_assoc, mul_assoc]
313
- exact congrArg (HMul.hMul b) <| (mul_comm y.1 x.2 .1 ).trans <|
314
- NoZeroSMulDivisors.algebraMap_injective R (Localization R⁰) <| mk'_eq_iff_eq.mp <|
315
- (mk'_eq_algebraMap_mk'_of_submonoid_le _ _ p.primeCompl_le_nonZeroDivisors y.1 y.2 ).trans
316
- <| show algebraMap (Localization.AtPrime p) _ (mk' _ y.1 y.2 ) = mk' _ x.1 x.2
317
- by simpa only [← mk_eq_mk', ← hy] using by rfl
318
- -- `y.2.1 ∈ I` implies `y.2.1 ∈ p` since `I ⊆ p`, which contradicts to the choice of `y`.
319
- exact y.2 .2 (hpi hyi)
320
- rcases mem_span_singleton'.mp (h1 x.1 (mem_span_singleton_self x.1 )) with ⟨y, hy⟩
321
- exact ⟨y, (eq_mk'_of_mul_eq (hy.trans (one_mul x.1 ))).trans (mk_eq_mk'_apply x.1 x.2 ).symm⟩
0 commit comments