|
| 1 | +import Mathlib.Topology.Separation.Regular |
| 2 | + |
| 3 | +universe u |
| 4 | + |
| 5 | +namespace MA3209 |
| 6 | + |
| 7 | +section Definitions |
| 8 | + |
| 9 | +variable (α : Type u) [TopologicalSpace α] |
| 10 | + |
| 11 | +structure T₁ : Prop where |
| 12 | + t₁ {x y : α} : x ≠ y → ∃ U, IsOpen U ∧ x ∈ U ∧ y ∉ U |
| 13 | + |
| 14 | +structure T₂ : Prop where |
| 15 | + t₂ {x y : α} : x ≠ y → ∃ U V, IsOpen U ∧ IsOpen V ∧ x ∈ U ∧ y ∈ V ∧ Disjoint U V |
| 16 | + |
| 17 | +structure T₃ : Prop extends T₁ α where |
| 18 | + t₃ {x : α} {B} : x ∉ B → IsClosed B → ∃ U V, IsOpen U ∧ IsOpen V ∧ x ∈ U ∧ B ⊆ V ∧ Disjoint U V |
| 19 | + |
| 20 | +structure T₄ : Prop extends T₁ α where |
| 21 | + t₄ {A B : Set α} : IsClosed A → IsClosed B → Disjoint A B → |
| 22 | + ∃ U V, IsOpen U ∧ IsOpen V ∧ A ⊆ U ∧ B ⊆ V ∧ Disjoint U V |
| 23 | + |
| 24 | +end Definitions |
| 25 | + |
| 26 | +variable {X : Type u} [TopologicalSpace X] |
| 27 | + |
| 28 | +protected theorem T₁.iff : T₁ X ↔ T1Space X |
| 29 | + := by -- |
| 30 | + rw [t1Space_iff_exists_open] |
| 31 | + exact ⟨fun h _ _ ↦ h.t₁, fun h ↦ { t₁ := (h ·) }⟩ -- ∎ |
| 32 | + |
| 33 | +theorem T₁.toT1 (h : T₁ X) : T1Space X := T₁.iff.mp h |
| 34 | + |
| 35 | +protected theorem T₂.iff : T₂ X ↔ T2Space X |
| 36 | + := by -- |
| 37 | + rw [t2Space_iff] |
| 38 | + exact ⟨fun h _ _ ↦ h.t₂, fun h ↦ { t₂ := (h ·) }⟩ -- ∎ |
| 39 | + |
| 40 | +theorem T₂.toT2 (h : T₂ X) : T2Space X := T₂.iff.mp h |
| 41 | + |
| 42 | +protected lemma T₃.iff : T₃ X ↔ T3Space X |
| 43 | + := by -- |
| 44 | + constructor |
| 45 | + · intro h₃ |
| 46 | + haveI : T0Space X := h₃.toT1.t0Space |
| 47 | + refine { regular := ?_ } |
| 48 | + intro B x hB hxB |
| 49 | + rw [Filter.disjoint_iff] |
| 50 | + obtain ⟨U, V, hU, hV, hxU, hBV, h₃⟩ := h₃.t₃ hxB hB |
| 51 | + refine ⟨V, ?_, U, ?_, h₃.symm⟩ |
| 52 | + · exact hV.mem_nhdsSet.mpr hBV |
| 53 | + · exact hU.mem_nhds hxU |
| 54 | + · intro h₃ |
| 55 | + have h₁ : T₁ X := by |
| 56 | + rw [T₁.iff] |
| 57 | + exact instT1SpaceOfT0SpaceOfR0Space |
| 58 | + exact { |
| 59 | + t₁ := h₁.t₁ |
| 60 | + t₃ {x B} hxB hB := by |
| 61 | + replace h₃ := h₃.toRegularSpace |
| 62 | + rw [regularSpace_iff] at h₃ |
| 63 | + specialize h₃ hB hxB |
| 64 | + rw [Filter.disjoint_iff] at h₃ |
| 65 | + obtain ⟨V', hV', U', hU', h₃⟩ := h₃ |
| 66 | + rw [mem_nhds_iff] at hU' |
| 67 | + rw [mem_nhdsSet_iff_exists] at hV' |
| 68 | + obtain ⟨U, hUU', hU, hxU⟩ := hU' |
| 69 | + obtain ⟨V, hV, hBV, hVV'⟩ := hV' |
| 70 | + refine ⟨U, V, hU, hV, hxU, hBV, ?_⟩ |
| 71 | + exact Set.disjoint_of_subset hUU' hVV' h₃.symm |
| 72 | + } -- ∎ |
| 73 | + |
| 74 | +theorem T₃.toT3 (h : T₃ X) : T3Space X := T₃.iff.mp h |
| 75 | + |
| 76 | +protected lemma T₄.iff : T₄ X ↔ T4Space X |
| 77 | + := by -- |
| 78 | + constructor |
| 79 | + · intro h₄ |
| 80 | + haveI : T1Space X := h₄.toT1 |
| 81 | + refine { normal := ?_ } |
| 82 | + intro A B hA hB hd |
| 83 | + replace h₄ := h₄.t₄ hA hB hd |
| 84 | + obtain ⟨U, V, hU, hV, hAU, hBV, h₄⟩ := h₄ |
| 85 | + rw [separatedNhds_iff_disjoint, Filter.disjoint_iff] |
| 86 | + refine ⟨U, ?_, V, ?_, h₄⟩ |
| 87 | + · exact hU.mem_nhdsSet.mpr hAU |
| 88 | + · exact hV.mem_nhdsSet.mpr hBV |
| 89 | + · intro h₄ |
| 90 | + have h₁ : T₁ X := by |
| 91 | + rw [T₁.iff] |
| 92 | + exact instT1SpaceOfT0SpaceOfR0Space |
| 93 | + exact { |
| 94 | + t₁ := h₁.t₁ |
| 95 | + t₄ {A B} hA hB hd := by |
| 96 | + replace h₄ := h₄.normal A B hA hB hd |
| 97 | + rw [separatedNhds_iff_disjoint, Filter.disjoint_iff] at h₄ |
| 98 | + obtain ⟨U', hU', V', hV', h₄⟩ := h₄ |
| 99 | + rw [mem_nhdsSet_iff_exists] at hU' hV' |
| 100 | + obtain ⟨U, hU, hAU, hUU'⟩ := hU' |
| 101 | + obtain ⟨V, hV, hBV, hVV'⟩ := hV' |
| 102 | + refine ⟨U, V, hU, hV, hAU, hBV, ?_⟩ |
| 103 | + exact Set.disjoint_of_subset hUU' hVV' h₄ |
| 104 | + } -- ∎ |
| 105 | + |
| 106 | +theorem T₄.toT4 (h : T₄ X) : T4Space X := T₄.iff.mp h |
| 107 | + |
| 108 | +end MA3209 |
0 commit comments