English
If s is clopen in Spec(R), there exist e,f ∈ R with e f = 0 and e + f = 1 such that s = D(e) and s^c = D(f).
Русский
Если s открыто и замкнуто в Spec(R), существуют e,f ∈ R такие, что e f = 0, e + f = 1 и s = D(e), s^c = D(f).
LaTeX
$$$$ \\exists e,f \\in R,\ e f=0 \\land e+f=1 \\land s=\\operatorname{basicOpen}(e) \\land s^{c}=\\operatorname{basicOpen}(f). $$$$
Lean4
theorem exists_mul_eq_zero_add_eq_one_basicOpen_eq_of_isClopen {s : Set (PrimeSpectrum R)} (hs : IsClopen s) :
∃ e f : R, e * f = 0 ∧ e + f = 1 ∧ s = basicOpen e ∧ sᶜ = basicOpen f :=
by
cases subsingleton_or_nontrivial R
· refine ⟨0, 0, ?_, ?_, ?_, ?_⟩ <;> apply Subsingleton.elim
obtain ⟨I, hI, hI'⟩ := isCompact_isOpen_iff_ideal.mp ⟨hs.1.isCompact, hs.2⟩
obtain ⟨J, hJ, hJ'⟩ := isCompact_isOpen_iff_ideal.mp ⟨hs.2.isClosed_compl.isCompact, hs.1.isOpen_compl⟩
simp only [compl_eq_iff_isCompl, ← eq_compl_iff_isCompl, compl_compl] at hI' hJ'
have : I * J ≤ nilradical R := by
refine Ideal.radical_le_radical_iff.mp (le_of_eq ?_)
rw [← zeroLocus_eq_iff, Ideal.zero_eq_bot, zeroLocus_bot, zeroLocus_mul, hI', hJ', Set.compl_union_self]
obtain ⟨n, hn⟩ := Ideal.exists_pow_le_of_le_radical_of_fg this (Submodule.FG.mul hI hJ)
have hnz : n ≠ 0 := by rintro rfl; simp at hn
rw [mul_pow, Ideal.zero_eq_bot] at hn
have : I ^ n ⊔ J ^ n = ⊤ :=
by
rw [eq_top_iff, ← Ideal.span_pow_eq_top (I ∪ J : Set R) _ n, Ideal.span_le, Set.image_union, Set.union_subset_iff]
constructor
· rintro _ ⟨x, hx, rfl⟩; exact Ideal.mem_sup_left (Ideal.pow_mem_pow hx n)
· rintro _ ⟨x, hx, rfl⟩; exact Ideal.mem_sup_right (Ideal.pow_mem_pow hx n)
·
rw [Ideal.span_union, Ideal.span_eq, Ideal.span_eq, ← zeroLocus_empty_iff_eq_top, zeroLocus_sup, hI', hJ',
Set.compl_inter_self]
rw [Ideal.eq_top_iff_one, Submodule.mem_sup] at this
obtain ⟨x, hx, y, hy, add⟩ := this
have mul : x * y = 0 := hn (Ideal.mul_mem_mul hx hy)
have : s = basicOpen x := by
refine subset_antisymm ?_ ?_
· rw [← hJ', basicOpen_eq_zeroLocus_of_mul_add _ _ mul add]
exact zeroLocus_anti_mono (Set.singleton_subset_iff.mpr <| Ideal.pow_le_self hnz hy)
· rw [basicOpen_eq_zeroLocus_compl, Set.compl_subset_comm, ← hI']
exact zeroLocus_anti_mono (Set.singleton_subset_iff.mpr <| Ideal.pow_le_self hnz hx)
refine ⟨x, y, mul, add, this, ?_⟩
rw [this, basicOpen_eq_zeroLocus_of_mul_add _ _ mul add, basicOpen_eq_zeroLocus_compl]