Skip to content

Commit 3f72c0f

Browse files
committed
feat(Algebra): lemma about is AdicComplete local ring (#22429)
Prove that if a ring is adic complete with respect to a maximal ideal then very element outside it is unit and it follows that the ring is a local ring (complete local ring).
1 parent 05c75f8 commit 3f72c0f

2 files changed

Lines changed: 80 additions & 0 deletions

File tree

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4645,6 +4645,7 @@ import Mathlib.RingTheory.AdicCompletion.AsTensorProduct
46454645
import Mathlib.RingTheory.AdicCompletion.Basic
46464646
import Mathlib.RingTheory.AdicCompletion.Exactness
46474647
import Mathlib.RingTheory.AdicCompletion.Functoriality
4648+
import Mathlib.RingTheory.AdicCompletion.LocalRing
46484649
import Mathlib.RingTheory.AdicCompletion.Noetherian
46494650
import Mathlib.RingTheory.Adjoin.Basic
46504651
import Mathlib.RingTheory.Adjoin.Dimension
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
/-
2+
Copyright (c) 2025 Nailin Guan. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Nailin Guan
5+
-/
6+
7+
import Mathlib.RingTheory.AdicCompletion.Basic
8+
import Mathlib.RingTheory.LocalRing.Defs
9+
10+
/-!
11+
# Basic Properties of Complete Local Ring
12+
13+
In this file we prove that a ring that is adic complete with respect to a maximal ideal
14+
ia a local ring (complete local ring).
15+
16+
-/
17+
18+
variable {R : Type*} [CommRing R] (m : Ideal R) [hmax : m.IsMaximal]
19+
20+
open Ideal Quotient
21+
22+
lemma isUnit_iff_nmem_of_isAdicComplete_maximal [IsAdicComplete m R] (r : R) :
23+
IsUnit r ↔ r ∉ m := by
24+
refine ⟨fun h ↦ ?_, fun h ↦ ?_⟩
25+
· by_contra mem
26+
rcases IsUnit.exists_left_inv h with ⟨s, hs⟩
27+
absurd m.ne_top_iff_one.mp (Ideal.IsMaximal.ne_top hmax)
28+
simp [← hs, Ideal.mul_mem_left m s mem]
29+
· have mapu {n : ℕ} (npos : 0 < n) : IsUnit (Ideal.Quotient.mk (m ^ n) r) := by
30+
induction' n with n ih
31+
· absurd npos
32+
exact Nat.not_lt_zero 0
33+
· by_cases neq0 : n = 0
34+
· let max' : (m ^ (n + 1)).IsMaximal := by simpa only [neq0, zero_add, pow_one] using hmax
35+
let hField : Field (R ⧸ m ^ (n + 1)) := Ideal.Quotient.field (m ^ (n + 1))
36+
simpa [isUnit_iff_ne_zero, ne_eq, Ideal.Quotient.eq_zero_iff_mem.not, neq0] using h
37+
· apply factorPowSucc.isUnit_of_isUnit_image (Nat.zero_lt_of_ne_zero neq0)
38+
simpa using (ih (Nat.zero_lt_of_ne_zero neq0))
39+
choose invSeries' invSeries_spec' using fun (n : {n : ℕ // 0 < n}) ↦
40+
(IsUnit.exists_left_inv (mapu n.2))
41+
let invSeries : ℕ → R := fun n ↦ if h : n = 0 then 0 else Classical.choose <|
42+
Ideal.Quotient.mk_surjective <| invSeries' ⟨n, (Nat.zero_lt_of_ne_zero h)⟩
43+
have invSeries_spec {n : ℕ} (npos : 0 < n): (Ideal.Quotient.mk (m ^ n)) (invSeries n) =
44+
invSeries' ⟨n, npos⟩ := by
45+
simpa only [Nat.not_eq_zero_of_lt npos, invSeries]
46+
using Classical.choose_spec (Ideal.Quotient.mk_surjective (invSeries' ⟨n, npos⟩))
47+
have mod {a b : ℕ} (le : a ≤ b) :
48+
invSeries a ≡ invSeries b [SMOD m ^ a • (⊤ : Submodule R R)] := by
49+
by_cases apos : 0 < a
50+
· simp only [smul_eq_mul, Ideal.mul_top]
51+
rw [SModEq.sub_mem, ← eq_zero_iff_mem, map_sub, ← (mapu apos).mul_right_inj,
52+
mul_zero, mul_sub]
53+
nth_rw 3 [← factor_mk (pow_le_pow_right le), ← factor_mk (pow_le_pow_right le)]
54+
simp only [invSeries_spec apos, invSeries_spec (Nat.lt_of_lt_of_le apos le)]
55+
rw [← _root_.map_mul, mul_comm, invSeries_spec', mul_comm, invSeries_spec',
56+
map_one, sub_self]
57+
· simp [Nat.eq_zero_of_not_pos apos]
58+
rcases IsAdicComplete.toIsPrecomplete.prec mod with ⟨inv, hinv⟩
59+
have eq (n : ℕ) : inv * r - 10 [SMOD m ^ n • (⊤ : Submodule R R)] := by
60+
by_cases npos : 0 < n
61+
· apply SModEq.sub_mem.mpr
62+
simp only [smul_eq_mul, Ideal.mul_top, sub_zero, ← eq_zero_iff_mem]
63+
rw [map_sub, map_one, _root_.map_mul, ← sub_add_cancel inv (invSeries n), map_add]
64+
have := SModEq.sub_mem.mp (hinv n).symm
65+
simp only [smul_eq_mul, Ideal.mul_top] at this
66+
simp [Ideal.Quotient.eq_zero_iff_mem.mpr this, invSeries_spec npos, invSeries_spec']
67+
· simp [Nat.eq_zero_of_not_pos npos]
68+
apply isUnit_iff_exists_inv'.mpr
69+
use inv
70+
exact sub_eq_zero.mp <| IsHausdorff.haus IsAdicComplete.toIsHausdorff (inv * r - 1) eq
71+
72+
theorem isLocalRing_of_isAdicComplete_maximal [IsAdicComplete m R] : IsLocalRing R where
73+
exists_pair_ne := ⟨0, 1, ne_of_mem_of_not_mem m.zero_mem
74+
(m.ne_top_iff_one.mp (Ideal.IsMaximal.ne_top hmax))⟩
75+
isUnit_or_isUnit_of_add_one {a b} hab := by
76+
simp only [isUnit_iff_nmem_of_isAdicComplete_maximal m]
77+
by_contra! h
78+
absurd m.add_mem h.1 h.2
79+
simpa [hab] using m.ne_top_iff_one.mp (Ideal.IsMaximal.ne_top hmax)

0 commit comments

Comments
 (0)