Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit ac10136

Browse files
committed
feat(algebraic_geometry): The underlying topological space of a Scheme is T0 (#10869)
Co-authored-by: Andrew Yang <36414270+erdOne@users.noreply.github.com>
1 parent cb0a6f7 commit ac10136

File tree

4 files changed

+89
-0
lines changed

4 files changed

+89
-0
lines changed

src/algebraic_geometry/prime_spectrum/basic.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -657,6 +657,10 @@ lemma le_iff_mem_closure (x y : prime_spectrum R) :
657657
by rw [← as_ideal_le_as_ideal, ← zero_locus_vanishing_ideal_eq_closure,
658658
mem_zero_locus, vanishing_ideal_singleton, set_like.coe_subset_coe]
659659

660+
instance : t0_space (prime_spectrum R) :=
661+
by { simp [t0_space_iff_or_not_mem_closure, ← le_iff_mem_closure,
662+
← not_and_distrib, ← le_antisymm_iff, eq_comm] }
663+
660664
end order
661665

662666
end prime_spectrum

src/algebraic_geometry/properties.lean

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,21 @@ namespace algebraic_geometry
2828

2929
variable (X : Scheme)
3030

31+
-- TODO: add sober spaces, and show that schemes are sober
32+
instance : t0_space X.carrier :=
33+
begin
34+
rw t0_space_iff_distinguishable,
35+
intros x y h h',
36+
obtain ⟨U, R, ⟨e⟩⟩ := X.local_affine x,
37+
have hy := (h' _ U.1.2).mp U.2,
38+
erw ← subtype_indistinguishable_iff (⟨x, U.2⟩ : U.1.1) (⟨y, hy⟩ : U.1.1) at h',
39+
let e' : U.1 ≃ₜ prime_spectrum R :=
40+
homeo_of_iso ((LocallyRingedSpace.forget_to_SheafedSpace ⋙ SheafedSpace.forget _).map_iso e),
41+
have := t0_space_of_injective_of_continuous e'.injective e'.continuous,
42+
rw t0_space_iff_distinguishable at this,
43+
exact this ⟨x, U.2⟩ ⟨y, hy⟩ (by simpa using h) h'
44+
end
45+
3146
/-- A scheme `X` is integral if its carrier is nonempty,
3247
and `𝒪ₓ(U)` is an integral domain for each `U ≠ ∅`. -/
3348
class is_integral : Prop :=

src/logic/basic.lean

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -702,6 +702,13 @@ by rw [← decidable.not_and_distrib, decidable.not_not]
702702

703703
theorem and_iff_not_or_not : a ∧ b ↔ ¬ (¬ a ∨ ¬ b) := decidable.and_iff_not_or_not
704704

705+
@[simp] theorem not_xor (P Q : Prop) : ¬ xor P Q ↔ (P ↔ Q) :=
706+
by simp only [not_and, xor, not_or_distrib, not_not, ← iff_iff_implies_and_implies]
707+
708+
theorem xor_iff_not_iff (P Q : Prop) : xor P Q ↔ ¬ (P ↔ Q) :=
709+
by rw [iff_not_comm, not_xor]
710+
711+
705712
end propositional
706713

707714
/-! ### Declarations about equality -/

src/topology/separation.lean

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,41 @@ end separated
137137
class t0_space (α : Type u) [topological_space α] : Prop :=
138138
(t0 : ∀ x y, x ≠ y → ∃ U:set α, is_open U ∧ (xor (x ∈ U) (y ∈ U)))
139139

140+
lemma t0_space_def (α : Type u) [topological_space α] :
141+
t0_space α ↔ ∀ x y, x ≠ y → ∃ U:set α, is_open U ∧ (xor (x ∈ U) (y ∈ U)) :=
142+
by { split, apply @t0_space.t0, apply t0_space.mk }
143+
144+
/-- Two points are topologically indistinguishable if no open set separates them. -/
145+
def indistinguishable {α : Type u} [topological_space α] (x y : α) : Prop :=
146+
∀ (U : set α) (hU : is_open U), x ∈ U ↔ y ∈ U
147+
148+
lemma t0_space_iff_distinguishable (α : Type u) [topological_space α] :
149+
t0_space α ↔ ∀ (x y : α), x ≠ y → ¬ indistinguishable x y :=
150+
begin
151+
delta indistinguishable,
152+
rw t0_space_def,
153+
push_neg,
154+
simp_rw xor_iff_not_iff,
155+
end
156+
157+
lemma indistinguishable_iff_closed {α : Type u} [topological_space α] (x y : α) :
158+
indistinguishable x y ↔ ∀ (U : set α) (hU : is_closed U), x ∈ U ↔ y ∈ U :=
159+
⟨λ h U hU, not_iff_not.mp (h _ hU.1), λ h U hU, not_iff_not.mp (h _ (is_closed_compl_iff.mpr hU))⟩
160+
161+
lemma indistinguishable_iff_closure {α : Type u} [topological_space α] (x y : α) :
162+
indistinguishable x y ↔ x ∈ closure ({y} : set α) ∧ y ∈ closure ({x} : set α) :=
163+
begin
164+
rw indistinguishable_iff_closed,
165+
exact ⟨λ h, ⟨(h _ is_closed_closure).mpr (subset_closure $ set.mem_singleton y),
166+
(h _ is_closed_closure).mp (subset_closure $ set.mem_singleton x)⟩,
167+
λ h U hU, ⟨λ hx, (is_closed.closure_subset_iff hU).mpr (set.singleton_subset_iff.mpr hx) h.2,
168+
λ hy, (is_closed.closure_subset_iff hU).mpr (set.singleton_subset_iff.mpr hy) h.1⟩⟩
169+
end
170+
171+
lemma subtype_indistinguishable_iff {α : Type u} [topological_space α] {U : set α} (x y : U) :
172+
indistinguishable x y ↔ indistinguishable (x : α) y :=
173+
by { simp_rw [indistinguishable_iff_closure, closure_subtype, image_singleton] }
174+
140175
/-- Given a closed set `S` in a compact T₀ space,
141176
there is some `x ∈ S` such that `{x}` is closed. -/
142177
theorem is_closed.exists_closed_singleton {α : Type*} [topological_space α]
@@ -207,6 +242,34 @@ instance subtype.t0_space [t0_space α] {p : α → Prop} : t0_space (subtype p)
207242
⟨λ x y hxy, let ⟨U, hU, hxyU⟩ := t0_space.t0 (x:α) y ((not_congr subtype.ext_iff_val).1 hxy) in
208243
⟨(coe : subtype p → α) ⁻¹' U, is_open_induced hU, hxyU⟩⟩
209244

245+
theorem t0_space_iff_or_not_mem_closure (α : Type u) [topological_space α] :
246+
t0_space α ↔ (∀ a b : α, (a ≠ b) → (a ∉ closure ({b} : set α) ∨ b ∉ closure ({a} : set α))) :=
247+
begin
248+
simp only [← not_and_distrib, t0_space_def, not_and],
249+
apply forall_congr, intro a,
250+
apply forall_congr, intro b,
251+
apply forall_congr, intro _,
252+
split,
253+
{ rintro ⟨s, h₁, (⟨h₂, h₃ : b ∈ sᶜ⟩|⟨h₂, h₃ : a ∈ sᶜ⟩)⟩ ha hb; rw ← is_closed_compl_iff at h₁,
254+
{ exact (is_closed.closure_subset_iff h₁).mpr (set.singleton_subset_iff.mpr h₃) ha h₂ },
255+
{ exact (is_closed.closure_subset_iff h₁).mpr (set.singleton_subset_iff.mpr h₃) hb h₂ } },
256+
{ intro h,
257+
by_cases h' : a ∈ closure ({b} : set α),
258+
{ exact ⟨(closure {a})ᶜ, is_closed_closure.1,
259+
or.inr ⟨h h', not_not.mpr (subset_closure (set.mem_singleton a))⟩⟩ },
260+
{ exact ⟨(closure {b})ᶜ, is_closed_closure.1,
261+
or.inl ⟨h', not_not.mpr (subset_closure (set.mem_singleton b))⟩⟩ } }
262+
end
263+
264+
lemma t0_space_of_injective_of_continuous {α β : Type u} [topological_space α] [topological_space β]
265+
{f : α → β} (hf : function.injective f) (hf' : continuous f) [t0_space β] : t0_space α :=
266+
begin
267+
constructor,
268+
intros x y h,
269+
obtain ⟨U, hU, e⟩ := t0_space.t0 _ _ (hf.ne h),
270+
exact ⟨f ⁻¹' U, hf'.1 U hU, e⟩
271+
end
272+
210273
/-- A T₁ space, also known as a Fréchet space, is a topological space
211274
where every singleton set is closed. Equivalently, for every pair
212275
`x ≠ y`, there is an open set containing `x` and not `y`. -/

0 commit comments

Comments
 (0)