@@ -21,96 +21,41 @@ section separation
21
21
class t0_space (α : Type u) [topological_space α] : Prop :=
22
22
(t0 : ∀ x y, x ≠ y → ∃ U:set α, is_open U ∧ (xor (x ∈ U) (y ∈ U)))
23
23
24
+ theorem exists_open_singleton_of_open_finset [t0_space α] (s : finset α) (sne : s.nonempty)
25
+ (hso : is_open (↑s : set α)) :
26
+ ∃ x ∈ s, is_open ({x} : set α):=
27
+ begin
28
+ induction s using finset.strong_induction_on with s ihs,
29
+ by_cases hs : set.subsingleton (↑s : set α),
30
+ { rcases sne with ⟨x, hx⟩,
31
+ refine ⟨x, hx, _⟩,
32
+ have : (↑s : set α) = {x}, from hs.eq_singleton_of_mem hx,
33
+ rwa this at hso },
34
+ { dunfold set.subsingleton at hs,
35
+ push_neg at hs,
36
+ rcases hs with ⟨x, hx, y, hy, hxy⟩,
37
+ rcases t0_space.t0 x y hxy with ⟨U, hU, hxyU⟩,
38
+ wlog H : x ∈ U ∧ y ∉ U := hxyU using [x y, y x],
39
+ obtain ⟨z, hzs, hz⟩ : ∃ z ∈ s.filter (λ z, z ∈ U), is_open ({z} : set α),
40
+ { refine ihs _ (finset.filter_ssubset.2 ⟨y, hy, H.2 ⟩) ⟨x, finset.mem_filter.2 ⟨hx, H.1 ⟩⟩ _,
41
+ rw [finset.coe_filter],
42
+ exact is_open_inter hso hU },
43
+ exact ⟨z, (finset.mem_filter.1 hzs).1 , hz⟩ }
44
+ end
45
+
24
46
theorem exists_open_singleton_of_fintype [t0_space α] [f : fintype α] [ha : nonempty α] :
25
47
∃ x:α, is_open ({x}:set α) :=
26
- have H : ∀ (T : finset α), T ≠ ∅ → ∃ x ∈ T, ∃ u, is_open u ∧ {x} = {y | y ∈ T} ∩ u :=
27
- begin
28
- classical,
29
- intro T,
30
- apply finset.case_strong_induction_on T,
31
- { intro h, exact (h rfl).elim },
32
- { intros x S hxS ih h,
33
- by_cases hs : S = ∅,
34
- { existsi [x, finset.mem_insert_self x S, univ, is_open_univ],
35
- rw [hs, inter_univ], refl },
36
- { rcases ih S (finset.subset.refl S) hs with ⟨y, hy, V, hv1, hv2⟩,
37
- by_cases hxV : x ∈ V,
38
- { cases t0_space.t0 x y (λ hxy, hxS $ by rwa hxy) with U hu,
39
- rcases hu with ⟨hu1, ⟨hu2, hu3⟩ | ⟨hu2, hu3⟩⟩,
40
- { existsi [x, finset.mem_insert_self x S, U ∩ V, is_open_inter hu1 hv1],
41
- apply set.ext,
42
- intro z,
43
- split,
44
- { intro hzx,
45
- rw set.mem_singleton_iff at hzx,
46
- rw hzx,
47
- exact ⟨finset.mem_insert_self x S, ⟨hu2, hxV⟩⟩ },
48
- { intro hz,
49
- rw set.mem_singleton_iff,
50
- rcases hz with ⟨hz1, hz2, hz3⟩,
51
- cases finset.mem_insert.1 hz1 with hz4 hz4,
52
- { exact hz4 },
53
- { have h1 : z ∈ {y : α | y ∈ S} ∩ V,
54
- { exact ⟨hz4, hz3⟩ },
55
- rw ← hv2 at h1,
56
- rw set.mem_singleton_iff at h1,
57
- rw h1 at hz2,
58
- exact (hu3 hz2).elim } } },
59
- { existsi [y, finset.mem_insert_of_mem hy, U ∩ V, is_open_inter hu1 hv1],
60
- apply set.ext,
61
- intro z,
62
- split,
63
- { intro hz,
64
- rw set.mem_singleton_iff at hz,
65
- rw hz,
66
- refine ⟨finset.mem_insert_of_mem hy, hu2, _⟩,
67
- have h1 : y ∈ {y} := set.mem_singleton y,
68
- rw hv2 at h1,
69
- exact h1.2 },
70
- { intro hz,
71
- rw set.mem_singleton_iff,
72
- cases hz with hz1 hz2,
73
- cases finset.mem_insert.1 hz1 with hz3 hz3,
74
- { rw hz3 at hz2,
75
- exact (hu3 hz2.1 ).elim },
76
- { have h1 : z ∈ {y : α | y ∈ S} ∩ V := ⟨hz3, hz2.2 ⟩,
77
- rw ← hv2 at h1,
78
- rw set.mem_singleton_iff at h1,
79
- exact h1 } } } },
80
- { existsi [y, finset.mem_insert_of_mem hy, V, hv1],
81
- apply set.ext,
82
- intro z,
83
- split,
84
- { intro hz,
85
- rw set.mem_singleton_iff at hz,
86
- rw hz,
87
- split,
88
- { exact finset.mem_insert_of_mem hy },
89
- { have h1 : y ∈ {y} := set.mem_singleton y,
90
- rw hv2 at h1,
91
- exact h1.2 } },
92
- { intro hz,
93
- rw hv2,
94
- cases hz with hz1 hz2,
95
- cases finset.mem_insert.1 hz1 with hz3 hz3,
96
- { rw hz3 at hz2,
97
- exact (hxV hz2).elim },
98
- { exact ⟨hz3, hz2⟩ } } } } }
99
- end ,
100
48
begin
101
- apply nonempty.elim ha, intro x,
102
- specialize H finset.univ (finset.ne_empty_of_mem $ finset.mem_univ x),
103
- rcases H with ⟨y, hyf, U, hu1, hu2⟩,
104
- existsi y,
105
- have h1 : {y : α | y ∈ finset.univ} = (univ : set α),
106
- { exact set.eq_univ_of_forall (λ x : α,
107
- by rw mem_set_of_eq; exact finset.mem_univ x) },
108
- rw h1 at hu2,
109
- rw set.univ_inter at hu2,
110
- rw hu2,
111
- exact hu1
49
+ refine ha.elim (λ x, _),
50
+ have : is_open (↑(finset.univ : finset α) : set α), { simp },
51
+ rcases exists_open_singleton_of_open_finset _ ⟨x, finset.mem_univ x⟩ this with ⟨x, _, hx⟩,
52
+ exact ⟨x, hx⟩
112
53
end
113
54
55
+ instance subtype.t0_space [t0_space α] {p : α → Prop } : t0_space (subtype p) :=
56
+ ⟨λ x y hxy, let ⟨U, hU, hxyU⟩ := t0_space.t0 (x:α) y ((not_congr subtype.coe_ext).1 hxy) in
57
+ ⟨(coe : subtype p → α) ⁻¹' U, is_open_induced hU, hxyU⟩⟩
58
+
114
59
/-- A T₁ space, also known as a Fréchet space, is a topological space
115
60
where every singleton set is closed. Equivalently, for every pair
116
61
`x ≠ y`, there is an open set containing `x` and not `y`. -/
@@ -123,6 +68,11 @@ t1_space.t1 x
123
68
lemma is_open_ne [t1_space α] {x : α} : is_open {y | y ≠ x} :=
124
69
compl_singleton_eq x ▸ is_open_compl_iff.2 (t1_space.t1 x)
125
70
71
+ instance subtype.t1_space {α : Type u} [topological_space α] [t1_space α] {p : α → Prop } :
72
+ t1_space (subtype p) :=
73
+ ⟨λ ⟨x, hx⟩, is_closed_induced_iff.2 $ ⟨{x}, is_closed_singleton, set.ext $ λ y,
74
+ by simp [subtype.coe_ext]⟩⟩
75
+
126
76
@[priority 100 ] -- see Note [lower instance priority]
127
77
instance t1_space.t0_space [t1_space α] : t0_space α :=
128
78
⟨λ x y h, ⟨{z | z ≠ y}, is_open_ne, or.inl ⟨h, not_not_intro rfl⟩⟩⟩
@@ -320,6 +270,15 @@ let ⟨t, ht₁, ht₂, ht₃⟩ := this in
320
270
subset.trans (compl_subset_comm.1 ht₂) h₁,
321
271
is_closed_compl_iff.mpr ht₁⟩
322
272
273
+ instance subtype.regular_space [regular_space α] {p : α → Prop } : regular_space (subtype p) :=
274
+ ⟨begin
275
+ intros s a hs ha,
276
+ rcases is_closed_induced_iff.1 hs with ⟨s, hs', rfl⟩,
277
+ rcases regular_space.regular hs' ha with ⟨t, ht, hst, hat⟩,
278
+ refine ⟨coe ⁻¹' t, is_open_induced ht, preimage_mono hst, _⟩,
279
+ rw [nhds_induced, ← comap_principal, ← comap_inf, hat, comap_bot]
280
+ end ⟩
281
+
323
282
variable (α)
324
283
@[priority 100 ] -- see Note [lower instance priority]
325
284
instance regular_space.t2_space [regular_space α] : t2_space α :=
0 commit comments