[GOAL]
α : Type u
β : Type v
inst✝ : TopologicalSpace α
s t : Set α
⊢ SeparatedNhds s t ↔ Disjoint (𝓝ˢ s) (𝓝ˢ t)
[PROOFSTEP]
simp only [(hasBasis_nhdsSet s).disjoint_iff (hasBasis_nhdsSet t), SeparatedNhds, exists_prop, ← exists_and_left,
  and_assoc, and_comm, and_left_comm]
[GOAL]
α : Type u
β : Type v
inst✝ : TopologicalSpace α
s s₁ s₂ t t₁ t₂ u : Set α
⊢ SeparatedNhds s u → SeparatedNhds t u → SeparatedNhds (s ∪ t) u
[PROOFSTEP]
simpa only [separatedNhds_iff_disjoint, nhdsSet_union, disjoint_sup_left] using And.intro
[GOAL]
α✝ : Type u
β : Type v
inst✝¹ : TopologicalSpace α✝
α : Type u
inst✝ : TopologicalSpace α
⊢ T0Space α ↔ ∀ (x y : α), x ≠ y → ¬Inseparable x y
[PROOFSTEP]
simp only [t0Space_iff_inseparable, Ne.def, not_imp_not]
[GOAL]
α : Type u
β : Type v
inst✝ : TopologicalSpace α
b : Set (Set α)
hb : IsTopologicalBasis b
x y : α
h : ∀ (s : Set α), s ∈ b → (x ∈ s ↔ y ∈ s)
⊢ HasBasis (𝓝 y) (fun t => t ∈ b ∧ x ∈ t) fun t => t
[PROOFSTEP]
convert hb.nhds_hasBasis using 2
[GOAL]
case h.e'_4.h.a
α : Type u
β : Type v
inst✝ : TopologicalSpace α
b : Set (Set α)
hb : IsTopologicalBasis b
x y : α
h : ∀ (s : Set α), s ∈ b → (x ∈ s ↔ y ∈ s)
x✝ : Set α
⊢ x✝ ∈ b ∧ x ∈ x✝ ↔ x✝ ∈ b ∧ y ∈ x✝
[PROOFSTEP]
exact and_congr_right (h _)
[GOAL]
α✝ : Type u
β : Type v
inst✝¹ : TopologicalSpace α✝
α : Type u
inst✝ : TopologicalSpace α
⊢ T0Space α ↔ ∀ (x y : α), x ≠ y → ∃ U, IsOpen U ∧ Xor' (x ∈ U) (y ∈ U)
[PROOFSTEP]
simp only [t0Space_iff_not_inseparable, xor_iff_not_iff, not_forall, exists_prop, inseparable_iff_forall_open]
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T0Space α
s : Set α
hs : IsClosed s
hmin : ∀ (t : Set α), t ⊆ s → Set.Nonempty t → IsClosed t → t = s
⊢ Set.Subsingleton s
[PROOFSTEP]
clear β
[GOAL]
α : Type u
inst✝¹ : TopologicalSpace α
inst✝ : T0Space α
s : Set α
hs : IsClosed s
hmin : ∀ (t : Set α), t ⊆ s → Set.Nonempty t → IsClosed t → t = s
⊢ Set.Subsingleton s
[PROOFSTEP]
refine' fun x hx y hy => of_not_not fun hxy => _
[GOAL]
α : Type u
inst✝¹ : TopologicalSpace α
inst✝ : T0Space α
s : Set α
hs : IsClosed s
hmin : ∀ (t : Set α), t ⊆ s → Set.Nonempty t → IsClosed t → t = s
x : α
hx : x ∈ s
y : α
hy : y ∈ s
hxy : ¬x = y
⊢ False
[PROOFSTEP]
rcases exists_isOpen_xor'_mem hxy with ⟨U, hUo, hU⟩
[GOAL]
case intro.intro
α : Type u
inst✝¹ : TopologicalSpace α
inst✝ : T0Space α
s : Set α
hs : IsClosed s
hmin : ∀ (t : Set α), t ⊆ s → Set.Nonempty t → IsClosed t → t = s
x : α
hx : x ∈ s
y : α
hy : y ∈ s
hxy : ¬x = y
U : Set α
hUo : IsOpen U
hU : Xor' (x ∈ U) (y ∈ U)
⊢ False
[PROOFSTEP]
wlog h : x ∈ U ∧ y ∉ U
[GOAL]
case intro.intro.inr
α : Type u
inst✝¹ : TopologicalSpace α
inst✝ : T0Space α
s : Set α
hs : IsClosed s
hmin : ∀ (t : Set α), t ⊆ s → Set.Nonempty t → IsClosed t → t = s
x : α
hx : x ∈ s
y : α
hy : y ∈ s
hxy : ¬x = y
U : Set α
hUo : IsOpen U
hU : Xor' (x ∈ U) (y ∈ U)
this :
  ∀ {α : Type u} [inst : TopologicalSpace α] [inst_1 : T0Space α] {s : Set α},
    IsClosed s →
      (∀ (t : Set α), t ⊆ s → Set.Nonempty t → IsClosed t → t = s) →
        ∀ (x : α),
          x ∈ s → ∀ (y : α), y ∈ s → ¬x = y → ∀ (U : Set α), IsOpen U → Xor' (x ∈ U) (y ∈ U) → x ∈ U ∧ ¬y ∈ U → False
h : ¬(x ∈ U ∧ ¬y ∈ U)
⊢ False
[PROOFSTEP]
refine this hs hmin y hy x hx (Ne.symm hxy) U hUo hU.symm (hU.resolve_left h)
[GOAL]
α✝ : Type u
inst✝² : TopologicalSpace α✝
α : Type u
inst✝¹ : TopologicalSpace α
inst✝ : T0Space α
s : Set α
hs : IsClosed s
hmin : ∀ (t : Set α), t ⊆ s → Set.Nonempty t → IsClosed t → t = s
x : α
hx : x ∈ s
y : α
hy : y ∈ s
hxy : ¬x = y
U : Set α
hUo : IsOpen U
hU : Xor' (x ∈ U) (y ∈ U)
h : x ∈ U ∧ ¬y ∈ U
⊢ False
[PROOFSTEP]
cases' h with hxU hyU
[GOAL]
case intro
α✝ : Type u
inst✝² : TopologicalSpace α✝
α : Type u
inst✝¹ : TopologicalSpace α
inst✝ : T0Space α
s : Set α
hs : IsClosed s
hmin : ∀ (t : Set α), t ⊆ s → Set.Nonempty t → IsClosed t → t = s
x : α
hx : x ∈ s
y : α
hy : y ∈ s
hxy : ¬x = y
U : Set α
hUo : IsOpen U
hU : Xor' (x ∈ U) (y ∈ U)
hxU : x ∈ U
hyU : ¬y ∈ U
⊢ False
[PROOFSTEP]
have : s \ U = s := hmin (s \ U) (diff_subset _ _) ⟨y, hy, hyU⟩ (hs.sdiff hUo)
[GOAL]
case intro
α✝ : Type u
inst✝² : TopologicalSpace α✝
α : Type u
inst✝¹ : TopologicalSpace α
inst✝ : T0Space α
s : Set α
hs : IsClosed s
hmin : ∀ (t : Set α), t ⊆ s → Set.Nonempty t → IsClosed t → t = s
x : α
hx : x ∈ s
y : α
hy : y ∈ s
hxy : ¬x = y
U : Set α
hUo : IsOpen U
hU : Xor' (x ∈ U) (y ∈ U)
hxU : x ∈ U
hyU : ¬y ∈ U
this : s \ U = s
⊢ False
[PROOFSTEP]
exact (this.symm.subset hx).2 hxU
[GOAL]
α✝ : Type u
β : Type v
inst✝³ : TopologicalSpace α✝
α : Type u_1
inst✝² : TopologicalSpace α
inst✝¹ : T0Space α
inst✝ : CompactSpace α
S : Set α
hS : IsClosed S
hne : Set.Nonempty S
⊢ ∃ x, x ∈ S ∧ IsClosed {x}
[PROOFSTEP]
obtain ⟨V, Vsub, Vne, Vcls, hV⟩ := hS.exists_minimal_nonempty_closed_subset hne
[GOAL]
case intro.intro.intro.intro
α✝ : Type u
β : Type v
inst✝³ : TopologicalSpace α✝
α : Type u_1
inst✝² : TopologicalSpace α
inst✝¹ : T0Space α
inst✝ : CompactSpace α
S : Set α
hS : IsClosed S
hne : Set.Nonempty S
V : Set α
Vsub : V ⊆ S
Vne : Set.Nonempty V
Vcls : IsClosed V
hV : ∀ (V' : Set α), V' ⊆ V → Set.Nonempty V' → IsClosed V' → V' = V
⊢ ∃ x, x ∈ S ∧ IsClosed {x}
[PROOFSTEP]
rcases minimal_nonempty_closed_eq_singleton Vcls Vne hV with ⟨x, rfl⟩
[GOAL]
case intro.intro.intro.intro.intro
α✝ : Type u
β : Type v
inst✝³ : TopologicalSpace α✝
α : Type u_1
inst✝² : TopologicalSpace α
inst✝¹ : T0Space α
inst✝ : CompactSpace α
S : Set α
hS : IsClosed S
hne : Set.Nonempty S
x : α
Vsub : {x} ⊆ S
Vne : Set.Nonempty {x}
Vcls : IsClosed {x}
hV : ∀ (V' : Set α), V' ⊆ {x} → Set.Nonempty V' → IsClosed V' → V' = {x}
⊢ ∃ x, x ∈ S ∧ IsClosed {x}
[PROOFSTEP]
exact ⟨x, Vsub (mem_singleton x), Vcls⟩
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T0Space α
s : Set α
hs : IsOpen s
hmin : ∀ (t : Set α), t ⊆ s → Set.Nonempty t → IsOpen t → t = s
⊢ Set.Subsingleton s
[PROOFSTEP]
clear β
[GOAL]
α : Type u
inst✝¹ : TopologicalSpace α
inst✝ : T0Space α
s : Set α
hs : IsOpen s
hmin : ∀ (t : Set α), t ⊆ s → Set.Nonempty t → IsOpen t → t = s
⊢ Set.Subsingleton s
[PROOFSTEP]
refine' fun x hx y hy => of_not_not fun hxy => _
[GOAL]
α : Type u
inst✝¹ : TopologicalSpace α
inst✝ : T0Space α
s : Set α
hs : IsOpen s
hmin : ∀ (t : Set α), t ⊆ s → Set.Nonempty t → IsOpen t → t = s
x : α
hx : x ∈ s
y : α
hy : y ∈ s
hxy : ¬x = y
⊢ False
[PROOFSTEP]
rcases exists_isOpen_xor'_mem hxy with ⟨U, hUo, hU⟩
[GOAL]
case intro.intro
α : Type u
inst✝¹ : TopologicalSpace α
inst✝ : T0Space α
s : Set α
hs : IsOpen s
hmin : ∀ (t : Set α), t ⊆ s → Set.Nonempty t → IsOpen t → t = s
x : α
hx : x ∈ s
y : α
hy : y ∈ s
hxy : ¬x = y
U : Set α
hUo : IsOpen U
hU : Xor' (x ∈ U) (y ∈ U)
⊢ False
[PROOFSTEP]
wlog h : x ∈ U ∧ y ∉ U
[GOAL]
case intro.intro.inr
α : Type u
inst✝¹ : TopologicalSpace α
inst✝ : T0Space α
s : Set α
hs : IsOpen s
hmin : ∀ (t : Set α), t ⊆ s → Set.Nonempty t → IsOpen t → t = s
x : α
hx : x ∈ s
y : α
hy : y ∈ s
hxy : ¬x = y
U : Set α
hUo : IsOpen U
hU : Xor' (x ∈ U) (y ∈ U)
this :
  ∀ {α : Type u} [inst : TopologicalSpace α] [inst_1 : T0Space α] {s : Set α},
    IsOpen s →
      (∀ (t : Set α), t ⊆ s → Set.Nonempty t → IsOpen t → t = s) →
        ∀ (x : α),
          x ∈ s → ∀ (y : α), y ∈ s → ¬x = y → ∀ (U : Set α), IsOpen U → Xor' (x ∈ U) (y ∈ U) → x ∈ U ∧ ¬y ∈ U → False
h : ¬(x ∈ U ∧ ¬y ∈ U)
⊢ False
[PROOFSTEP]
exact this hs hmin y hy x hx (Ne.symm hxy) U hUo hU.symm (hU.resolve_left h)
[GOAL]
α✝ : Type u
inst✝² : TopologicalSpace α✝
α : Type u
inst✝¹ : TopologicalSpace α
inst✝ : T0Space α
s : Set α
hs : IsOpen s
hmin : ∀ (t : Set α), t ⊆ s → Set.Nonempty t → IsOpen t → t = s
x : α
hx : x ∈ s
y : α
hy : y ∈ s
hxy : ¬x = y
U : Set α
hUo : IsOpen U
hU : Xor' (x ∈ U) (y ∈ U)
h : x ∈ U ∧ ¬y ∈ U
⊢ False
[PROOFSTEP]
cases' h with hxU hyU
[GOAL]
case intro
α✝ : Type u
inst✝² : TopologicalSpace α✝
α : Type u
inst✝¹ : TopologicalSpace α
inst✝ : T0Space α
s : Set α
hs : IsOpen s
hmin : ∀ (t : Set α), t ⊆ s → Set.Nonempty t → IsOpen t → t = s
x : α
hx : x ∈ s
y : α
hy : y ∈ s
hxy : ¬x = y
U : Set α
hUo : IsOpen U
hU : Xor' (x ∈ U) (y ∈ U)
hxU : x ∈ U
hyU : ¬y ∈ U
⊢ False
[PROOFSTEP]
have : s ∩ U = s := hmin (s ∩ U) (inter_subset_left _ _) ⟨x, hx, hxU⟩ (hs.inter hUo)
[GOAL]
case intro
α✝ : Type u
inst✝² : TopologicalSpace α✝
α : Type u
inst✝¹ : TopologicalSpace α
inst✝ : T0Space α
s : Set α
hs : IsOpen s
hmin : ∀ (t : Set α), t ⊆ s → Set.Nonempty t → IsOpen t → t = s
x : α
hx : x ∈ s
y : α
hy : y ∈ s
hxy : ¬x = y
U : Set α
hUo : IsOpen U
hU : Xor' (x ∈ U) (y ∈ U)
hxU : x ∈ U
hyU : ¬y ∈ U
this : s ∩ U = s
⊢ False
[PROOFSTEP]
exact hyU (this.symm.subset hy).2
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T0Space α
s : Set α
hfin : Set.Finite s
hne : Set.Nonempty s
ho : IsOpen s
⊢ ∃ x, x ∈ s ∧ IsOpen {x}
[PROOFSTEP]
lift s to Finset α using hfin
[GOAL]
case intro
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T0Space α
s : Finset α
hne : Set.Nonempty ↑s
ho : IsOpen ↑s
⊢ ∃ x, x ∈ ↑s ∧ IsOpen {x}
[PROOFSTEP]
induction' s using Finset.strongInductionOn with s ihs
[GOAL]
case intro.a
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T0Space α
s✝ : Finset α
hne✝ : Set.Nonempty ↑s✝
ho✝ : IsOpen ↑s✝
s : Finset α
ihs : ∀ (t : Finset α), t ⊂ s → Set.Nonempty ↑t → IsOpen ↑t → ∃ x, x ∈ ↑t ∧ IsOpen {x}
hne : Set.Nonempty ↑s
ho : IsOpen ↑s
⊢ ∃ x, x ∈ ↑s ∧ IsOpen {x}
[PROOFSTEP]
rcases em (∃ t, t ⊂ s ∧ t.Nonempty ∧ IsOpen (t : Set α)) with (⟨t, hts, htne, hto⟩ | ht)
[GOAL]
case intro.a.inl.intro.intro.intro
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T0Space α
s✝ : Finset α
hne✝ : Set.Nonempty ↑s✝
ho✝ : IsOpen ↑s✝
s : Finset α
ihs : ∀ (t : Finset α), t ⊂ s → Set.Nonempty ↑t → IsOpen ↑t → ∃ x, x ∈ ↑t ∧ IsOpen {x}
hne : Set.Nonempty ↑s
ho : IsOpen ↑s
t : Finset α
hts : t ⊂ s
htne : Finset.Nonempty t
hto : IsOpen ↑t
⊢ ∃ x, x ∈ ↑s ∧ IsOpen {x}
[PROOFSTEP]
rcases ihs t hts htne hto with ⟨x, hxt, hxo⟩
[GOAL]
case intro.a.inl.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T0Space α
s✝ : Finset α
hne✝ : Set.Nonempty ↑s✝
ho✝ : IsOpen ↑s✝
s : Finset α
ihs : ∀ (t : Finset α), t ⊂ s → Set.Nonempty ↑t → IsOpen ↑t → ∃ x, x ∈ ↑t ∧ IsOpen {x}
hne : Set.Nonempty ↑s
ho : IsOpen ↑s
t : Finset α
hts : t ⊂ s
htne : Finset.Nonempty t
hto : IsOpen ↑t
x : α
hxt : x ∈ ↑t
hxo : IsOpen {x}
⊢ ∃ x, x ∈ ↑s ∧ IsOpen {x}
[PROOFSTEP]
exact ⟨x, hts.1 hxt, hxo⟩
[GOAL]
case intro.a.inr
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T0Space α
s✝ : Finset α
hne✝ : Set.Nonempty ↑s✝
ho✝ : IsOpen ↑s✝
s : Finset α
ihs : ∀ (t : Finset α), t ⊂ s → Set.Nonempty ↑t → IsOpen ↑t → ∃ x, x ∈ ↑t ∧ IsOpen {x}
hne : Set.Nonempty ↑s
ho : IsOpen ↑s
ht : ¬∃ t, t ⊂ s ∧ Finset.Nonempty t ∧ IsOpen ↑t
⊢ ∃ x, x ∈ ↑s ∧ IsOpen {x}
[PROOFSTEP]
rsuffices ⟨x, hx⟩ : ∃ x, s.toSet = { x }
[GOAL]
case intro.a.inr.intro
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T0Space α
s✝ : Finset α
hne✝ : Set.Nonempty ↑s✝
ho✝ : IsOpen ↑s✝
s : Finset α
ihs : ∀ (t : Finset α), t ⊂ s → Set.Nonempty ↑t → IsOpen ↑t → ∃ x, x ∈ ↑t ∧ IsOpen {x}
hne : Set.Nonempty ↑s
ho : IsOpen ↑s
ht : ¬∃ t, t ⊂ s ∧ Finset.Nonempty t ∧ IsOpen ↑t
x : α
hx : ↑s = {x}
⊢ ∃ x, x ∈ ↑s ∧ IsOpen {x}
[PROOFSTEP]
exact ⟨x, hx.symm ▸ rfl, hx ▸ ho⟩
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T0Space α
s✝ : Finset α
hne✝ : Set.Nonempty ↑s✝
ho✝ : IsOpen ↑s✝
s : Finset α
ihs : ∀ (t : Finset α), t ⊂ s → Set.Nonempty ↑t → IsOpen ↑t → ∃ x, x ∈ ↑t ∧ IsOpen {x}
hne : Set.Nonempty ↑s
ho : IsOpen ↑s
ht : ¬∃ t, t ⊂ s ∧ Finset.Nonempty t ∧ IsOpen ↑t
⊢ ∃ x, ↑s = {x}
[PROOFSTEP]
refine minimal_nonempty_open_eq_singleton ho hne ?_
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T0Space α
s✝ : Finset α
hne✝ : Set.Nonempty ↑s✝
ho✝ : IsOpen ↑s✝
s : Finset α
ihs : ∀ (t : Finset α), t ⊂ s → Set.Nonempty ↑t → IsOpen ↑t → ∃ x, x ∈ ↑t ∧ IsOpen {x}
hne : Set.Nonempty ↑s
ho : IsOpen ↑s
ht : ¬∃ t, t ⊂ s ∧ Finset.Nonempty t ∧ IsOpen ↑t
⊢ ∀ (t : Set α), t ⊆ ↑s → Set.Nonempty t → IsOpen t → t = ↑s
[PROOFSTEP]
refine' fun t hts htne hto => of_not_not fun hts' => ht _
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T0Space α
s✝ : Finset α
hne✝ : Set.Nonempty ↑s✝
ho✝ : IsOpen ↑s✝
s : Finset α
ihs : ∀ (t : Finset α), t ⊂ s → Set.Nonempty ↑t → IsOpen ↑t → ∃ x, x ∈ ↑t ∧ IsOpen {x}
hne : Set.Nonempty ↑s
ho : IsOpen ↑s
ht : ¬∃ t, t ⊂ s ∧ Finset.Nonempty t ∧ IsOpen ↑t
t : Set α
hts : t ⊆ ↑s
htne : Set.Nonempty t
hto : IsOpen t
hts' : ¬t = ↑s
⊢ ∃ t, t ⊂ s ∧ Finset.Nonempty t ∧ IsOpen ↑t
[PROOFSTEP]
lift t to Finset α using s.finite_toSet.subset hts
[GOAL]
case intro
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T0Space α
s✝ : Finset α
hne✝ : Set.Nonempty ↑s✝
ho✝ : IsOpen ↑s✝
s : Finset α
ihs : ∀ (t : Finset α), t ⊂ s → Set.Nonempty ↑t → IsOpen ↑t → ∃ x, x ∈ ↑t ∧ IsOpen {x}
hne : Set.Nonempty ↑s
ho : IsOpen ↑s
ht : ¬∃ t, t ⊂ s ∧ Finset.Nonempty t ∧ IsOpen ↑t
t : Finset α
hts : ↑t ⊆ ↑s
htne : Set.Nonempty ↑t
hto : IsOpen ↑t
hts' : ¬↑t = ↑s
⊢ ∃ t, t ⊂ s ∧ Finset.Nonempty t ∧ IsOpen ↑t
[PROOFSTEP]
exact ⟨t, ssubset_iff_subset_ne.2 ⟨hts, mt Finset.coe_inj.2 hts'⟩, htne, hto⟩
[GOAL]
α✝ : Type u
β : Type v
inst✝¹ : TopologicalSpace α✝
α : Type u
inst✝ : TopologicalSpace α
⊢ T0Space α ↔ ∀ (a b : α), a ≠ b → ¬a ∈ closure {b} ∨ ¬b ∈ closure {a}
[PROOFSTEP]
simp only [t0Space_iff_not_inseparable, inseparable_iff_mem_closure, not_and_or]
[GOAL]
α : Type u
β : Type v
inst✝ : TopologicalSpace α
h : ∀ (x y : α), Inseparable x y → ∃ s, x ∈ s ∧ y ∈ s ∧ T0Space ↑s
⊢ T0Space α
[PROOFSTEP]
refine' ⟨fun x y hxy => _⟩
[GOAL]
α : Type u
β : Type v
inst✝ : TopologicalSpace α
h : ∀ (x y : α), Inseparable x y → ∃ s, x ∈ s ∧ y ∈ s ∧ T0Space ↑s
x y : α
hxy : Inseparable x y
⊢ x = y
[PROOFSTEP]
rcases h x y hxy with ⟨s, hxs, hys, hs⟩
[GOAL]
case intro.intro.intro
α : Type u
β : Type v
inst✝ : TopologicalSpace α
h : ∀ (x y : α), Inseparable x y → ∃ s, x ∈ s ∧ y ∈ s ∧ T0Space ↑s
x y : α
hxy : Inseparable x y
s : Set α
hxs : x ∈ s
hys : y ∈ s
hs : T0Space ↑s
⊢ x = y
[PROOFSTEP]
lift x to s using hxs
[GOAL]
case intro.intro.intro.intro
α : Type u
β : Type v
inst✝ : TopologicalSpace α
h : ∀ (x y : α), Inseparable x y → ∃ s, x ∈ s ∧ y ∈ s ∧ T0Space ↑s
y : α
s : Set α
hys : y ∈ s
hs : T0Space ↑s
x : { x // x ∈ s }
hxy : Inseparable (↑x) y
⊢ ↑x = y
[PROOFSTEP]
lift y to s using hys
[GOAL]
case intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝ : TopologicalSpace α
h : ∀ (x y : α), Inseparable x y → ∃ s, x ∈ s ∧ y ∈ s ∧ T0Space ↑s
s : Set α
hs : T0Space ↑s
x y : { x // x ∈ s }
hxy : Inseparable ↑x ↑y
⊢ ↑x = ↑y
[PROOFSTEP]
rw [← subtype_inseparable_iff] at hxy 
[GOAL]
case intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝ : TopologicalSpace α
h : ∀ (x y : α), Inseparable x y → ∃ s, x ∈ s ∧ y ∈ s ∧ T0Space ↑s
s : Set α
hs : T0Space ↑s
x y : { x // x ∈ s }
hxy : Inseparable x y
⊢ ↑x = ↑y
[PROOFSTEP]
exact congr_arg Subtype.val hxy.eq
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
x y : α
h : x ≠ y
s : Set α
⊢ 𝓝[s \ {y}] x = 𝓝[s] x
[PROOFSTEP]
rw [diff_eq, inter_comm, nhdsWithin_inter_of_mem]
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
x y : α
h : x ≠ y
s : Set α
⊢ {y}ᶜ ∈ 𝓝[s] x
[PROOFSTEP]
exact mem_nhdsWithin_of_mem_nhds (isOpen_ne.mem_nhds h)
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
p : α → Prop
⊢ IsOpen {x | ∀ᶠ (y : α) in 𝓝[{x}ᶜ] x, p y}
[PROOFSTEP]
refine' isOpen_iff_mem_nhds.mpr fun a ha => _
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
p : α → Prop
a : α
ha : a ∈ {x | ∀ᶠ (y : α) in 𝓝[{x}ᶜ] x, p y}
⊢ {x | ∀ᶠ (y : α) in 𝓝[{x}ᶜ] x, p y} ∈ 𝓝 a
[PROOFSTEP]
filter_upwards [eventually_nhds_nhdsWithin.mpr ha] with b hb
[GOAL]
case h
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
p : α → Prop
a : α
ha : a ∈ {x | ∀ᶠ (y : α) in 𝓝[{x}ᶜ] x, p y}
b : α
hb : ∀ᶠ (x : α) in 𝓝[{a}ᶜ] b, p x
⊢ ∀ᶠ (y : α) in 𝓝[{b}ᶜ] b, p y
[PROOFSTEP]
rcases eq_or_ne a b with rfl | h
[GOAL]
case h.inl
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
p : α → Prop
a : α
ha : a ∈ {x | ∀ᶠ (y : α) in 𝓝[{x}ᶜ] x, p y}
hb : ∀ᶠ (x : α) in 𝓝[{a}ᶜ] a, p x
⊢ ∀ᶠ (y : α) in 𝓝[{a}ᶜ] a, p y
[PROOFSTEP]
exact hb
[GOAL]
case h.inr
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
p : α → Prop
a : α
ha : a ∈ {x | ∀ᶠ (y : α) in 𝓝[{x}ᶜ] x, p y}
b : α
hb : ∀ᶠ (x : α) in 𝓝[{a}ᶜ] b, p x
h : a ≠ b
⊢ ∀ᶠ (y : α) in 𝓝[{b}ᶜ] b, p y
[PROOFSTEP]
rw [h.symm.nhdsWithin_compl_singleton] at hb 
[GOAL]
case h.inr
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
p : α → Prop
a : α
ha : a ∈ {x | ∀ᶠ (y : α) in 𝓝[{x}ᶜ] x, p y}
b : α
hb : ∀ᶠ (x : α) in 𝓝 b, p x
h : a ≠ b
⊢ ∀ᶠ (y : α) in 𝓝[{b}ᶜ] b, p y
[PROOFSTEP]
exact hb.filter_mono nhdsWithin_le_nhds
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
s : Set α
hs : Set.Finite s
⊢ IsClosed s
[PROOFSTEP]
rw [← biUnion_of_singleton s]
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
s : Set α
hs : Set.Finite s
⊢ IsClosed (⋃ (x : α) (_ : x ∈ s), {x})
[PROOFSTEP]
exact isClosed_biUnion hs fun i _ => isClosed_singleton
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
b : Set (Set α)
hb : IsTopologicalBasis b
x y : α
h : x ≠ y
⊢ ∃ a, a ∈ b ∧ x ∈ a ∧ ¬y ∈ a
[PROOFSTEP]
rcases hb.isOpen_iff.1 isOpen_ne x h with ⟨a, ab, xa, ha⟩
[GOAL]
case intro.intro.intro
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
b : Set (Set α)
hb : IsTopologicalBasis b
x y : α
h : x ≠ y
a : Set α
ab : a ∈ b
xa : x ∈ a
ha : a ⊆ {y_1 | y_1 ≠ y}
⊢ ∃ a, a ∈ b ∧ x ∈ a ∧ ¬y ∈ a
[PROOFSTEP]
exact ⟨a, ab, xa, fun h => ha h rfl⟩
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
s : Set α
⊢ IsBounded s ↔ IsCompact (closure s)
[PROOFSTEP]
change sᶜ ∈ Filter.coclosedCompact α ↔ _
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
s : Set α
⊢ sᶜ ∈ coclosedCompact α ↔ IsCompact (closure s)
[PROOFSTEP]
rw [Filter.mem_coclosedCompact]
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
s : Set α
⊢ (∃ t, IsClosed t ∧ IsCompact t ∧ tᶜ ⊆ sᶜ) ↔ IsCompact (closure s)
[PROOFSTEP]
constructor
[GOAL]
case mp
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
s : Set α
⊢ (∃ t, IsClosed t ∧ IsCompact t ∧ tᶜ ⊆ sᶜ) → IsCompact (closure s)
[PROOFSTEP]
rintro ⟨t, ht₁, ht₂, hst⟩
[GOAL]
case mp.intro.intro.intro
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
s t : Set α
ht₁ : IsClosed t
ht₂ : IsCompact t
hst : tᶜ ⊆ sᶜ
⊢ IsCompact (closure s)
[PROOFSTEP]
rw [compl_subset_compl] at hst 
[GOAL]
case mp.intro.intro.intro
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
s t : Set α
ht₁ : IsClosed t
ht₂ : IsCompact t
hst : s ⊆ t
⊢ IsCompact (closure s)
[PROOFSTEP]
exact isCompact_of_isClosed_subset ht₂ isClosed_closure (closure_minimal hst ht₁)
[GOAL]
case mpr
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
s : Set α
⊢ IsCompact (closure s) → ∃ t, IsClosed t ∧ IsCompact t ∧ tᶜ ⊆ sᶜ
[PROOFSTEP]
intro h
[GOAL]
case mpr
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
s : Set α
h : IsCompact (closure s)
⊢ ∃ t, IsClosed t ∧ IsCompact t ∧ tᶜ ⊆ sᶜ
[PROOFSTEP]
exact ⟨closure s, isClosed_closure, h, compl_subset_compl.mpr subset_closure⟩
[GOAL]
α✝ : Type u
β : Type v
inst✝¹ : TopologicalSpace α✝
α : Type u
inst✝ : TopologicalSpace α
⊢ List.TFAE
    [T1Space α, ∀ (x : α), IsClosed {x}, ∀ (x : α), IsOpen {x}ᶜ, Continuous ↑CofiniteTopology.of,
      ∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x, ∀ ⦃x y : α⦄, x ≠ y → ∃ s, s ∈ 𝓝 x ∧ ¬y ∈ s,
      ∀ ⦃x y : α⦄, x ≠ y → ∃ U, IsOpen U ∧ x ∈ U ∧ ¬y ∈ U, ∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y),
      ∀ ⦃x y : α⦄, x ≠ y → Disjoint (pure x) (𝓝 y), ∀ ⦃x y : α⦄, x ⤳ y → x = y]
[PROOFSTEP]
tfae_have 1 ↔ 2
[GOAL]
case tfae_1_iff_2
α✝ : Type u
β : Type v
inst✝¹ : TopologicalSpace α✝
α : Type u
inst✝ : TopologicalSpace α
⊢ T1Space α ↔ ∀ (x : α), IsClosed {x}
[PROOFSTEP]
exact ⟨fun h => h.1, fun h => ⟨h⟩⟩
[GOAL]
α✝ : Type u
β : Type v
inst✝¹ : TopologicalSpace α✝
α : Type u
inst✝ : TopologicalSpace α
tfae_1_iff_2 : T1Space α ↔ ∀ (x : α), IsClosed {x}
⊢ List.TFAE
    [T1Space α, ∀ (x : α), IsClosed {x}, ∀ (x : α), IsOpen {x}ᶜ, Continuous ↑CofiniteTopology.of,
      ∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x, ∀ ⦃x y : α⦄, x ≠ y → ∃ s, s ∈ 𝓝 x ∧ ¬y ∈ s,
      ∀ ⦃x y : α⦄, x ≠ y → ∃ U, IsOpen U ∧ x ∈ U ∧ ¬y ∈ U, ∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y),
      ∀ ⦃x y : α⦄, x ≠ y → Disjoint (pure x) (𝓝 y), ∀ ⦃x y : α⦄, x ⤳ y → x = y]
[PROOFSTEP]
tfae_have 2 ↔ 3
[GOAL]
case tfae_2_iff_3
α✝ : Type u
β : Type v
inst✝¹ : TopologicalSpace α✝
α : Type u
inst✝ : TopologicalSpace α
tfae_1_iff_2 : T1Space α ↔ ∀ (x : α), IsClosed {x}
⊢ (∀ (x : α), IsClosed {x}) ↔ ∀ (x : α), IsOpen {x}ᶜ
[PROOFSTEP]
simp only [isOpen_compl_iff]
[GOAL]
α✝ : Type u
β : Type v
inst✝¹ : TopologicalSpace α✝
α : Type u
inst✝ : TopologicalSpace α
tfae_1_iff_2 : T1Space α ↔ ∀ (x : α), IsClosed {x}
tfae_2_iff_3 : (∀ (x : α), IsClosed {x}) ↔ ∀ (x : α), IsOpen {x}ᶜ
⊢ List.TFAE
    [T1Space α, ∀ (x : α), IsClosed {x}, ∀ (x : α), IsOpen {x}ᶜ, Continuous ↑CofiniteTopology.of,
      ∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x, ∀ ⦃x y : α⦄, x ≠ y → ∃ s, s ∈ 𝓝 x ∧ ¬y ∈ s,
      ∀ ⦃x y : α⦄, x ≠ y → ∃ U, IsOpen U ∧ x ∈ U ∧ ¬y ∈ U, ∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y),
      ∀ ⦃x y : α⦄, x ≠ y → Disjoint (pure x) (𝓝 y), ∀ ⦃x y : α⦄, x ⤳ y → x = y]
[PROOFSTEP]
tfae_have 5 ↔ 3
[GOAL]
case tfae_5_iff_3
α✝ : Type u
β : Type v
inst✝¹ : TopologicalSpace α✝
α : Type u
inst✝ : TopologicalSpace α
tfae_1_iff_2 : T1Space α ↔ ∀ (x : α), IsClosed {x}
tfae_2_iff_3 : (∀ (x : α), IsClosed {x}) ↔ ∀ (x : α), IsOpen {x}ᶜ
⊢ (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ (x : α), IsOpen {x}ᶜ
[PROOFSTEP]
refine' forall_swap.trans _
[GOAL]
case tfae_5_iff_3
α✝ : Type u
β : Type v
inst✝¹ : TopologicalSpace α✝
α : Type u
inst✝ : TopologicalSpace α
tfae_1_iff_2 : T1Space α ↔ ∀ (x : α), IsClosed {x}
tfae_2_iff_3 : (∀ (x : α), IsClosed {x}) ↔ ∀ (x : α), IsOpen {x}ᶜ
⊢ (∀ (y x : α), x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ (x : α), IsOpen {x}ᶜ
[PROOFSTEP]
simp only [isOpen_iff_mem_nhds, mem_compl_iff, mem_singleton_iff]
[GOAL]
α✝ : Type u
β : Type v
inst✝¹ : TopologicalSpace α✝
α : Type u
inst✝ : TopologicalSpace α
tfae_1_iff_2 : T1Space α ↔ ∀ (x : α), IsClosed {x}
tfae_2_iff_3 : (∀ (x : α), IsClosed {x}) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_3 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ (x : α), IsOpen {x}ᶜ
⊢ List.TFAE
    [T1Space α, ∀ (x : α), IsClosed {x}, ∀ (x : α), IsOpen {x}ᶜ, Continuous ↑CofiniteTopology.of,
      ∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x, ∀ ⦃x y : α⦄, x ≠ y → ∃ s, s ∈ 𝓝 x ∧ ¬y ∈ s,
      ∀ ⦃x y : α⦄, x ≠ y → ∃ U, IsOpen U ∧ x ∈ U ∧ ¬y ∈ U, ∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y),
      ∀ ⦃x y : α⦄, x ≠ y → Disjoint (pure x) (𝓝 y), ∀ ⦃x y : α⦄, x ⤳ y → x = y]
[PROOFSTEP]
tfae_have 5 ↔ 6
[GOAL]
case tfae_5_iff_6
α✝ : Type u
β : Type v
inst✝¹ : TopologicalSpace α✝
α : Type u
inst✝ : TopologicalSpace α
tfae_1_iff_2 : T1Space α ↔ ∀ (x : α), IsClosed {x}
tfae_2_iff_3 : (∀ (x : α), IsClosed {x}) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_3 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ (x : α), IsOpen {x}ᶜ
⊢ (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ s, s ∈ 𝓝 x ∧ ¬y ∈ s
[PROOFSTEP]
simp only [← subset_compl_singleton_iff, exists_mem_subset_iff]
[GOAL]
α✝ : Type u
β : Type v
inst✝¹ : TopologicalSpace α✝
α : Type u
inst✝ : TopologicalSpace α
tfae_1_iff_2 : T1Space α ↔ ∀ (x : α), IsClosed {x}
tfae_2_iff_3 : (∀ (x : α), IsClosed {x}) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_3 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_6 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ s, s ∈ 𝓝 x ∧ ¬y ∈ s
⊢ List.TFAE
    [T1Space α, ∀ (x : α), IsClosed {x}, ∀ (x : α), IsOpen {x}ᶜ, Continuous ↑CofiniteTopology.of,
      ∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x, ∀ ⦃x y : α⦄, x ≠ y → ∃ s, s ∈ 𝓝 x ∧ ¬y ∈ s,
      ∀ ⦃x y : α⦄, x ≠ y → ∃ U, IsOpen U ∧ x ∈ U ∧ ¬y ∈ U, ∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y),
      ∀ ⦃x y : α⦄, x ≠ y → Disjoint (pure x) (𝓝 y), ∀ ⦃x y : α⦄, x ⤳ y → x = y]
[PROOFSTEP]
tfae_have 5 ↔ 7
[GOAL]
case tfae_5_iff_7
α✝ : Type u
β : Type v
inst✝¹ : TopologicalSpace α✝
α : Type u
inst✝ : TopologicalSpace α
tfae_1_iff_2 : T1Space α ↔ ∀ (x : α), IsClosed {x}
tfae_2_iff_3 : (∀ (x : α), IsClosed {x}) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_3 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_6 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ s, s ∈ 𝓝 x ∧ ¬y ∈ s
⊢ (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ U, IsOpen U ∧ x ∈ U ∧ ¬y ∈ U
[PROOFSTEP]
simp only [(nhds_basis_opens _).mem_iff, subset_compl_singleton_iff, exists_prop, and_assoc, and_left_comm]
[GOAL]
α✝ : Type u
β : Type v
inst✝¹ : TopologicalSpace α✝
α : Type u
inst✝ : TopologicalSpace α
tfae_1_iff_2 : T1Space α ↔ ∀ (x : α), IsClosed {x}
tfae_2_iff_3 : (∀ (x : α), IsClosed {x}) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_3 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_6 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ s, s ∈ 𝓝 x ∧ ¬y ∈ s
tfae_5_iff_7 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ U, IsOpen U ∧ x ∈ U ∧ ¬y ∈ U
⊢ List.TFAE
    [T1Space α, ∀ (x : α), IsClosed {x}, ∀ (x : α), IsOpen {x}ᶜ, Continuous ↑CofiniteTopology.of,
      ∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x, ∀ ⦃x y : α⦄, x ≠ y → ∃ s, s ∈ 𝓝 x ∧ ¬y ∈ s,
      ∀ ⦃x y : α⦄, x ≠ y → ∃ U, IsOpen U ∧ x ∈ U ∧ ¬y ∈ U, ∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y),
      ∀ ⦃x y : α⦄, x ≠ y → Disjoint (pure x) (𝓝 y), ∀ ⦃x y : α⦄, x ⤳ y → x = y]
[PROOFSTEP]
tfae_have 5 ↔ 8
[GOAL]
case tfae_5_iff_8
α✝ : Type u
β : Type v
inst✝¹ : TopologicalSpace α✝
α : Type u
inst✝ : TopologicalSpace α
tfae_1_iff_2 : T1Space α ↔ ∀ (x : α), IsClosed {x}
tfae_2_iff_3 : (∀ (x : α), IsClosed {x}) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_3 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_6 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ s, s ∈ 𝓝 x ∧ ¬y ∈ s
tfae_5_iff_7 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ U, IsOpen U ∧ x ∈ U ∧ ¬y ∈ U
⊢ (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y)
[PROOFSTEP]
simp only [← principal_singleton, disjoint_principal_right]
[GOAL]
α✝ : Type u
β : Type v
inst✝¹ : TopologicalSpace α✝
α : Type u
inst✝ : TopologicalSpace α
tfae_1_iff_2 : T1Space α ↔ ∀ (x : α), IsClosed {x}
tfae_2_iff_3 : (∀ (x : α), IsClosed {x}) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_3 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_6 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ s, s ∈ 𝓝 x ∧ ¬y ∈ s
tfae_5_iff_7 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ U, IsOpen U ∧ x ∈ U ∧ ¬y ∈ U
tfae_5_iff_8 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y)
⊢ List.TFAE
    [T1Space α, ∀ (x : α), IsClosed {x}, ∀ (x : α), IsOpen {x}ᶜ, Continuous ↑CofiniteTopology.of,
      ∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x, ∀ ⦃x y : α⦄, x ≠ y → ∃ s, s ∈ 𝓝 x ∧ ¬y ∈ s,
      ∀ ⦃x y : α⦄, x ≠ y → ∃ U, IsOpen U ∧ x ∈ U ∧ ¬y ∈ U, ∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y),
      ∀ ⦃x y : α⦄, x ≠ y → Disjoint (pure x) (𝓝 y), ∀ ⦃x y : α⦄, x ⤳ y → x = y]
[PROOFSTEP]
tfae_have 8 ↔ 9
[GOAL]
case tfae_8_iff_9
α✝ : Type u
β : Type v
inst✝¹ : TopologicalSpace α✝
α : Type u
inst✝ : TopologicalSpace α
tfae_1_iff_2 : T1Space α ↔ ∀ (x : α), IsClosed {x}
tfae_2_iff_3 : (∀ (x : α), IsClosed {x}) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_3 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_6 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ s, s ∈ 𝓝 x ∧ ¬y ∈ s
tfae_5_iff_7 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ U, IsOpen U ∧ x ∈ U ∧ ¬y ∈ U
tfae_5_iff_8 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y)
⊢ (∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y)) ↔ ∀ ⦃x y : α⦄, x ≠ y → Disjoint (pure x) (𝓝 y)
[PROOFSTEP]
exact forall_swap.trans (by simp only [disjoint_comm, ne_comm])
[GOAL]
α✝ : Type u
β : Type v
inst✝¹ : TopologicalSpace α✝
α : Type u
inst✝ : TopologicalSpace α
tfae_1_iff_2 : T1Space α ↔ ∀ (x : α), IsClosed {x}
tfae_2_iff_3 : (∀ (x : α), IsClosed {x}) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_3 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_6 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ s, s ∈ 𝓝 x ∧ ¬y ∈ s
tfae_5_iff_7 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ U, IsOpen U ∧ x ∈ U ∧ ¬y ∈ U
tfae_5_iff_8 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y)
⊢ (∀ (y x : α), x ≠ y → Disjoint (𝓝 x) (pure y)) ↔ ∀ ⦃x y : α⦄, x ≠ y → Disjoint (pure x) (𝓝 y)
[PROOFSTEP]
simp only [disjoint_comm, ne_comm]
[GOAL]
α✝ : Type u
β : Type v
inst✝¹ : TopologicalSpace α✝
α : Type u
inst✝ : TopologicalSpace α
tfae_1_iff_2 : T1Space α ↔ ∀ (x : α), IsClosed {x}
tfae_2_iff_3 : (∀ (x : α), IsClosed {x}) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_3 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_6 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ s, s ∈ 𝓝 x ∧ ¬y ∈ s
tfae_5_iff_7 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ U, IsOpen U ∧ x ∈ U ∧ ¬y ∈ U
tfae_5_iff_8 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y)
tfae_8_iff_9 : (∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y)) ↔ ∀ ⦃x y : α⦄, x ≠ y → Disjoint (pure x) (𝓝 y)
⊢ List.TFAE
    [T1Space α, ∀ (x : α), IsClosed {x}, ∀ (x : α), IsOpen {x}ᶜ, Continuous ↑CofiniteTopology.of,
      ∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x, ∀ ⦃x y : α⦄, x ≠ y → ∃ s, s ∈ 𝓝 x ∧ ¬y ∈ s,
      ∀ ⦃x y : α⦄, x ≠ y → ∃ U, IsOpen U ∧ x ∈ U ∧ ¬y ∈ U, ∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y),
      ∀ ⦃x y : α⦄, x ≠ y → Disjoint (pure x) (𝓝 y), ∀ ⦃x y : α⦄, x ⤳ y → x = y]
[PROOFSTEP]
tfae_have 1 → 4
[GOAL]
case tfae_1_to_4
α✝ : Type u
β : Type v
inst✝¹ : TopologicalSpace α✝
α : Type u
inst✝ : TopologicalSpace α
tfae_1_iff_2 : T1Space α ↔ ∀ (x : α), IsClosed {x}
tfae_2_iff_3 : (∀ (x : α), IsClosed {x}) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_3 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_6 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ s, s ∈ 𝓝 x ∧ ¬y ∈ s
tfae_5_iff_7 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ U, IsOpen U ∧ x ∈ U ∧ ¬y ∈ U
tfae_5_iff_8 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y)
tfae_8_iff_9 : (∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y)) ↔ ∀ ⦃x y : α⦄, x ≠ y → Disjoint (pure x) (𝓝 y)
⊢ T1Space α → Continuous ↑CofiniteTopology.of
[PROOFSTEP]
simp only [continuous_def, CofiniteTopology.isOpen_iff']
[GOAL]
case tfae_1_to_4
α✝ : Type u
β : Type v
inst✝¹ : TopologicalSpace α✝
α : Type u
inst✝ : TopologicalSpace α
tfae_1_iff_2 : T1Space α ↔ ∀ (x : α), IsClosed {x}
tfae_2_iff_3 : (∀ (x : α), IsClosed {x}) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_3 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_6 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ s, s ∈ 𝓝 x ∧ ¬y ∈ s
tfae_5_iff_7 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ U, IsOpen U ∧ x ∈ U ∧ ¬y ∈ U
tfae_5_iff_8 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y)
tfae_8_iff_9 : (∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y)) ↔ ∀ ⦃x y : α⦄, x ≠ y → Disjoint (pure x) (𝓝 y)
⊢ T1Space α → ∀ (s : Set (CofiniteTopology α)), s = ∅ ∨ Set.Finite sᶜ → IsOpen (↑CofiniteTopology.of ⁻¹' s)
[PROOFSTEP]
rintro H s (rfl | hs)
[GOAL]
case tfae_1_to_4.inl
α✝ : Type u
β : Type v
inst✝¹ : TopologicalSpace α✝
α : Type u
inst✝ : TopologicalSpace α
tfae_1_iff_2 : T1Space α ↔ ∀ (x : α), IsClosed {x}
tfae_2_iff_3 : (∀ (x : α), IsClosed {x}) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_3 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_6 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ s, s ∈ 𝓝 x ∧ ¬y ∈ s
tfae_5_iff_7 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ U, IsOpen U ∧ x ∈ U ∧ ¬y ∈ U
tfae_5_iff_8 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y)
tfae_8_iff_9 : (∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y)) ↔ ∀ ⦃x y : α⦄, x ≠ y → Disjoint (pure x) (𝓝 y)
H : T1Space α
⊢ IsOpen (↑CofiniteTopology.of ⁻¹' ∅)
case tfae_1_to_4.inr
α✝ : Type u
β : Type v
inst✝¹ : TopologicalSpace α✝
α : Type u
inst✝ : TopologicalSpace α
tfae_1_iff_2 : T1Space α ↔ ∀ (x : α), IsClosed {x}
tfae_2_iff_3 : (∀ (x : α), IsClosed {x}) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_3 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_6 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ s, s ∈ 𝓝 x ∧ ¬y ∈ s
tfae_5_iff_7 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ U, IsOpen U ∧ x ∈ U ∧ ¬y ∈ U
tfae_5_iff_8 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y)
tfae_8_iff_9 : (∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y)) ↔ ∀ ⦃x y : α⦄, x ≠ y → Disjoint (pure x) (𝓝 y)
H : T1Space α
s : Set (CofiniteTopology α)
hs : Set.Finite sᶜ
⊢ IsOpen (↑CofiniteTopology.of ⁻¹' s)
[PROOFSTEP]
exacts [isOpen_empty, compl_compl s ▸ (@Set.Finite.isClosed _ _ H _ hs).isOpen_compl]
[GOAL]
α✝ : Type u
β : Type v
inst✝¹ : TopologicalSpace α✝
α : Type u
inst✝ : TopologicalSpace α
tfae_1_iff_2 : T1Space α ↔ ∀ (x : α), IsClosed {x}
tfae_2_iff_3 : (∀ (x : α), IsClosed {x}) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_3 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_6 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ s, s ∈ 𝓝 x ∧ ¬y ∈ s
tfae_5_iff_7 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ U, IsOpen U ∧ x ∈ U ∧ ¬y ∈ U
tfae_5_iff_8 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y)
tfae_8_iff_9 : (∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y)) ↔ ∀ ⦃x y : α⦄, x ≠ y → Disjoint (pure x) (𝓝 y)
tfae_1_to_4 : T1Space α → Continuous ↑CofiniteTopology.of
⊢ List.TFAE
    [T1Space α, ∀ (x : α), IsClosed {x}, ∀ (x : α), IsOpen {x}ᶜ, Continuous ↑CofiniteTopology.of,
      ∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x, ∀ ⦃x y : α⦄, x ≠ y → ∃ s, s ∈ 𝓝 x ∧ ¬y ∈ s,
      ∀ ⦃x y : α⦄, x ≠ y → ∃ U, IsOpen U ∧ x ∈ U ∧ ¬y ∈ U, ∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y),
      ∀ ⦃x y : α⦄, x ≠ y → Disjoint (pure x) (𝓝 y), ∀ ⦃x y : α⦄, x ⤳ y → x = y]
[PROOFSTEP]
tfae_have 4 → 2
[GOAL]
case tfae_4_to_2
α✝ : Type u
β : Type v
inst✝¹ : TopologicalSpace α✝
α : Type u
inst✝ : TopologicalSpace α
tfae_1_iff_2 : T1Space α ↔ ∀ (x : α), IsClosed {x}
tfae_2_iff_3 : (∀ (x : α), IsClosed {x}) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_3 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_6 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ s, s ∈ 𝓝 x ∧ ¬y ∈ s
tfae_5_iff_7 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ U, IsOpen U ∧ x ∈ U ∧ ¬y ∈ U
tfae_5_iff_8 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y)
tfae_8_iff_9 : (∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y)) ↔ ∀ ⦃x y : α⦄, x ≠ y → Disjoint (pure x) (𝓝 y)
tfae_1_to_4 : T1Space α → Continuous ↑CofiniteTopology.of
⊢ Continuous ↑CofiniteTopology.of → ∀ (x : α), IsClosed {x}
[PROOFSTEP]
exact fun h x => (CofiniteTopology.isClosed_iff.2 <| Or.inr (finite_singleton _)).preimage h
[GOAL]
α✝ : Type u
β : Type v
inst✝¹ : TopologicalSpace α✝
α : Type u
inst✝ : TopologicalSpace α
tfae_1_iff_2 : T1Space α ↔ ∀ (x : α), IsClosed {x}
tfae_2_iff_3 : (∀ (x : α), IsClosed {x}) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_3 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_6 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ s, s ∈ 𝓝 x ∧ ¬y ∈ s
tfae_5_iff_7 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ U, IsOpen U ∧ x ∈ U ∧ ¬y ∈ U
tfae_5_iff_8 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y)
tfae_8_iff_9 : (∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y)) ↔ ∀ ⦃x y : α⦄, x ≠ y → Disjoint (pure x) (𝓝 y)
tfae_1_to_4 : T1Space α → Continuous ↑CofiniteTopology.of
tfae_4_to_2 : Continuous ↑CofiniteTopology.of → ∀ (x : α), IsClosed {x}
⊢ List.TFAE
    [T1Space α, ∀ (x : α), IsClosed {x}, ∀ (x : α), IsOpen {x}ᶜ, Continuous ↑CofiniteTopology.of,
      ∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x, ∀ ⦃x y : α⦄, x ≠ y → ∃ s, s ∈ 𝓝 x ∧ ¬y ∈ s,
      ∀ ⦃x y : α⦄, x ≠ y → ∃ U, IsOpen U ∧ x ∈ U ∧ ¬y ∈ U, ∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y),
      ∀ ⦃x y : α⦄, x ≠ y → Disjoint (pure x) (𝓝 y), ∀ ⦃x y : α⦄, x ⤳ y → x = y]
[PROOFSTEP]
tfae_have 2 ↔ 10
[GOAL]
case tfae_2_iff_10
α✝ : Type u
β : Type v
inst✝¹ : TopologicalSpace α✝
α : Type u
inst✝ : TopologicalSpace α
tfae_1_iff_2 : T1Space α ↔ ∀ (x : α), IsClosed {x}
tfae_2_iff_3 : (∀ (x : α), IsClosed {x}) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_3 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_6 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ s, s ∈ 𝓝 x ∧ ¬y ∈ s
tfae_5_iff_7 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ U, IsOpen U ∧ x ∈ U ∧ ¬y ∈ U
tfae_5_iff_8 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y)
tfae_8_iff_9 : (∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y)) ↔ ∀ ⦃x y : α⦄, x ≠ y → Disjoint (pure x) (𝓝 y)
tfae_1_to_4 : T1Space α → Continuous ↑CofiniteTopology.of
tfae_4_to_2 : Continuous ↑CofiniteTopology.of → ∀ (x : α), IsClosed {x}
⊢ (∀ (x : α), IsClosed {x}) ↔ ∀ ⦃x y : α⦄, x ⤳ y → x = y
[PROOFSTEP]
simp only [← closure_subset_iff_isClosed, specializes_iff_mem_closure, subset_def, mem_singleton_iff, eq_comm]
[GOAL]
α✝ : Type u
β : Type v
inst✝¹ : TopologicalSpace α✝
α : Type u
inst✝ : TopologicalSpace α
tfae_1_iff_2 : T1Space α ↔ ∀ (x : α), IsClosed {x}
tfae_2_iff_3 : (∀ (x : α), IsClosed {x}) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_3 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ (x : α), IsOpen {x}ᶜ
tfae_5_iff_6 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ s, s ∈ 𝓝 x ∧ ¬y ∈ s
tfae_5_iff_7 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → ∃ U, IsOpen U ∧ x ∈ U ∧ ¬y ∈ U
tfae_5_iff_8 : (∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x) ↔ ∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y)
tfae_8_iff_9 : (∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y)) ↔ ∀ ⦃x y : α⦄, x ≠ y → Disjoint (pure x) (𝓝 y)
tfae_1_to_4 : T1Space α → Continuous ↑CofiniteTopology.of
tfae_4_to_2 : Continuous ↑CofiniteTopology.of → ∀ (x : α), IsClosed {x}
tfae_2_iff_10 : (∀ (x : α), IsClosed {x}) ↔ ∀ ⦃x y : α⦄, x ⤳ y → x = y
⊢ List.TFAE
    [T1Space α, ∀ (x : α), IsClosed {x}, ∀ (x : α), IsOpen {x}ᶜ, Continuous ↑CofiniteTopology.of,
      ∀ ⦃x y : α⦄, x ≠ y → {y}ᶜ ∈ 𝓝 x, ∀ ⦃x y : α⦄, x ≠ y → ∃ s, s ∈ 𝓝 x ∧ ¬y ∈ s,
      ∀ ⦃x y : α⦄, x ≠ y → ∃ U, IsOpen U ∧ x ∈ U ∧ ¬y ∈ U, ∀ ⦃x y : α⦄, x ≠ y → Disjoint (𝓝 x) (pure y),
      ∀ ⦃x y : α⦄, x ≠ y → Disjoint (pure x) (𝓝 y), ∀ ⦃x y : α⦄, x ⤳ y → x = y]
[PROOFSTEP]
tfae_finish
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T1Space α
inst✝¹ : DecidableEq α
inst✝ : TopologicalSpace β
f : α → β
x y : α
z : β
hne : y ≠ x
⊢ ContinuousAt (update f x z) y ↔ ContinuousAt f y
[PROOFSTEP]
simp only [← continuousWithinAt_univ, continuousWithinAt_update_of_ne hne]
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T1Space α
inst✝¹ : DecidableEq α
inst✝ : TopologicalSpace β
f : α → β
s : Set α
x : α
y : β
⊢ ContinuousOn (update f x y) s ↔ ContinuousOn f (s \ {x}) ∧ (x ∈ s → Tendsto f (𝓝[s \ {x}] x) (𝓝 y))
[PROOFSTEP]
rw [ContinuousOn, ← and_forall_ne x, and_comm]
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T1Space α
inst✝¹ : DecidableEq α
inst✝ : TopologicalSpace β
f : α → β
s : Set α
x : α
y : β
⊢ (∀ (b : α), b ≠ x → b ∈ s → ContinuousWithinAt (update f x y) s b) ∧ (x ∈ s → ContinuousWithinAt (update f x y) s x) ↔
    ContinuousOn f (s \ {x}) ∧ (x ∈ s → Tendsto f (𝓝[s \ {x}] x) (𝓝 y))
[PROOFSTEP]
refine' and_congr ⟨fun H z hz => _, fun H z hzx hzs => _⟩ (forall_congr' fun _ => _)
[GOAL]
case refine'_1
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T1Space α
inst✝¹ : DecidableEq α
inst✝ : TopologicalSpace β
f : α → β
s : Set α
x : α
y : β
H : ∀ (b : α), b ≠ x → b ∈ s → ContinuousWithinAt (update f x y) s b
z : α
hz : z ∈ s \ {x}
⊢ ContinuousWithinAt f (s \ {x}) z
[PROOFSTEP]
specialize H z hz.2 hz.1
[GOAL]
case refine'_1
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T1Space α
inst✝¹ : DecidableEq α
inst✝ : TopologicalSpace β
f : α → β
s : Set α
x : α
y : β
z : α
hz : z ∈ s \ {x}
H : ContinuousWithinAt (update f x y) s z
⊢ ContinuousWithinAt f (s \ {x}) z
[PROOFSTEP]
rw [continuousWithinAt_update_of_ne hz.2] at H 
[GOAL]
case refine'_1
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T1Space α
inst✝¹ : DecidableEq α
inst✝ : TopologicalSpace β
f : α → β
s : Set α
x : α
y : β
z : α
hz : z ∈ s \ {x}
H : ContinuousWithinAt f s z
⊢ ContinuousWithinAt f (s \ {x}) z
[PROOFSTEP]
exact H.mono (diff_subset _ _)
[GOAL]
case refine'_2
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T1Space α
inst✝¹ : DecidableEq α
inst✝ : TopologicalSpace β
f : α → β
s : Set α
x : α
y : β
H : ContinuousOn f (s \ {x})
z : α
hzx : z ≠ x
hzs : z ∈ s
⊢ ContinuousWithinAt (update f x y) s z
[PROOFSTEP]
rw [continuousWithinAt_update_of_ne hzx]
[GOAL]
case refine'_2
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T1Space α
inst✝¹ : DecidableEq α
inst✝ : TopologicalSpace β
f : α → β
s : Set α
x : α
y : β
H : ContinuousOn f (s \ {x})
z : α
hzx : z ≠ x
hzs : z ∈ s
⊢ ContinuousWithinAt f s z
[PROOFSTEP]
refine' (H z ⟨hzs, hzx⟩).mono_of_mem (inter_mem_nhdsWithin _ _)
[GOAL]
case refine'_2
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T1Space α
inst✝¹ : DecidableEq α
inst✝ : TopologicalSpace β
f : α → β
s : Set α
x : α
y : β
H : ContinuousOn f (s \ {x})
z : α
hzx : z ≠ x
hzs : z ∈ s
⊢ (fun a => a ∈ {x} → False) ∈ 𝓝 z
[PROOFSTEP]
exact isOpen_ne.mem_nhds hzx
[GOAL]
case refine'_3
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T1Space α
inst✝¹ : DecidableEq α
inst✝ : TopologicalSpace β
f : α → β
s : Set α
x : α
y : β
x✝ : x ∈ s
⊢ ContinuousWithinAt (update f x y) s x ↔ Tendsto f (𝓝[s \ {x}] x) (𝓝 y)
[PROOFSTEP]
exact continuousWithinAt_update_same
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
s : Set α
hs : Set.Subsingleton s
⊢ Set.Subsingleton (_root_.closure s)
[PROOFSTEP]
rcases hs.eq_empty_or_singleton with (rfl | ⟨x, rfl⟩)
[GOAL]
case inl
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
hs : Set.Subsingleton ∅
⊢ Set.Subsingleton (_root_.closure ∅)
[PROOFSTEP]
simp
[GOAL]
case inr.intro
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
x : α
hs : Set.Subsingleton {x}
⊢ Set.Subsingleton (_root_.closure {x})
[PROOFSTEP]
simp
[GOAL]
α✝ : Type u
β✝ : Type v
inst✝³ : TopologicalSpace α✝
α : Type u_1
β : Type u_2
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
inst✝ : T1Space β
y : β
s : Set α
x✝ : IsClosed s
h2s : Set.Nonempty s
⊢ IsClosed (const α y '' s)
[PROOFSTEP]
simp_rw [const, h2s.image_const, isClosed_singleton]
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
x y : α
s : Set α
hxy : x ≠ y
⊢ 𝓝[insert y s] x = 𝓝[s] x
[PROOFSTEP]
refine' le_antisymm (Filter.le_def.2 fun t ht => _) (nhdsWithin_mono x <| subset_insert y s)
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
x y : α
s : Set α
hxy : x ≠ y
t : Set α
ht : t ∈ 𝓝[s] x
⊢ t ∈ 𝓝[insert y s] x
[PROOFSTEP]
obtain ⟨o, ho, hxo, host⟩ := mem_nhdsWithin.mp ht
[GOAL]
case intro.intro.intro
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
x y : α
s : Set α
hxy : x ≠ y
t : Set α
ht : t ∈ 𝓝[s] x
o : Set α
ho : IsOpen o
hxo : x ∈ o
host : o ∩ s ⊆ t
⊢ t ∈ 𝓝[insert y s] x
[PROOFSTEP]
refine' mem_nhdsWithin.mpr ⟨o \ { y }, ho.sdiff isClosed_singleton, ⟨hxo, hxy⟩, _⟩
[GOAL]
case intro.intro.intro
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
x y : α
s : Set α
hxy : x ≠ y
t : Set α
ht : t ∈ 𝓝[s] x
o : Set α
ho : IsOpen o
hxo : x ∈ o
host : o ∩ s ⊆ t
⊢ o \ {y} ∩ insert y s ⊆ t
[PROOFSTEP]
rw [inter_insert_of_not_mem <| not_mem_diff_of_mem (mem_singleton y)]
[GOAL]
case intro.intro.intro
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
x y : α
s : Set α
hxy : x ≠ y
t : Set α
ht : t ∈ 𝓝[s] x
o : Set α
ho : IsOpen o
hxo : x ∈ o
host : o ∩ s ⊆ t
⊢ o \ {y} ∩ s ⊆ t
[PROOFSTEP]
exact (inter_subset_inter (diff_subset _ _) Subset.rfl).trans host
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
x y : α
s t : Set α
hu : t ⊆ insert y s
⊢ insert x s ∈ 𝓝[t] x
[PROOFSTEP]
rcases eq_or_ne x y with (rfl | h)
[GOAL]
case inl
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
x : α
s t : Set α
hu : t ⊆ insert x s
⊢ insert x s ∈ 𝓝[t] x
[PROOFSTEP]
exact mem_of_superset self_mem_nhdsWithin hu
[GOAL]
case inr
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
x y : α
s t : Set α
hu : t ⊆ insert y s
h : x ≠ y
⊢ insert x s ∈ 𝓝[t] x
[PROOFSTEP]
refine' nhdsWithin_mono x hu _
[GOAL]
case inr
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
x y : α
s t : Set α
hu : t ⊆ insert y s
h : x ≠ y
⊢ insert x s ∈ 𝓝[insert y s] x
[PROOFSTEP]
rw [nhdsWithin_insert_of_ne h]
[GOAL]
case inr
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
x y : α
s t : Set α
hu : t ⊆ insert y s
h : x ≠ y
⊢ insert x s ∈ 𝓝[s] x
[PROOFSTEP]
exact mem_of_superset self_mem_nhdsWithin (subset_insert x s)
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
x : α
⊢ ⋂₀ (𝓝 x).sets = {x}
[PROOFSTEP]
simp [sInter_nhds_sets_eq_specializes]
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
ι : Sort u_1
p : ι → Prop
s : ι → Set α
x : α
h : HasBasis (𝓝 x) p s
⊢ ⋂ (i : ι) (_ : p i), s i = {x}
[PROOFSTEP]
rw [← h.sInter_sets, sInter_sets_nhds]
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
x : α
s : Set α
⊢ {x}ᶜ ∈ 𝓝ˢ s ↔ ¬x ∈ s
[PROOFSTEP]
rw [isOpen_compl_singleton.mem_nhdsSet, subset_compl_singleton_iff]
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
s t : Set α
⊢ 𝓝ˢ s ≤ 𝓝ˢ t ↔ s ⊆ t
[PROOFSTEP]
refine' ⟨_, fun h => monotone_nhdsSet h⟩
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
s t : Set α
⊢ 𝓝ˢ s ≤ 𝓝ˢ t → s ⊆ t
[PROOFSTEP]
simp_rw [Filter.le_def]
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
s t : Set α
⊢ (∀ (x : Set α), x ∈ 𝓝ˢ t → x ∈ 𝓝ˢ s) → s ⊆ t
[PROOFSTEP]
intro h x hx
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
s t : Set α
h : ∀ (x : Set α), x ∈ 𝓝ˢ t → x ∈ 𝓝ˢ s
x : α
hx : x ∈ s
⊢ x ∈ t
[PROOFSTEP]
specialize h { x }ᶜ
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
s t : Set α
x : α
hx : x ∈ s
h : {x}ᶜ ∈ 𝓝ˢ t → {x}ᶜ ∈ 𝓝ˢ s
⊢ x ∈ t
[PROOFSTEP]
simp_rw [compl_singleton_mem_nhdsSet_iff] at h 
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
s t : Set α
x : α
hx : x ∈ s
h : ¬x ∈ t → ¬x ∈ s
⊢ x ∈ t
[PROOFSTEP]
by_contra hxt
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
s t : Set α
x : α
hx : x ∈ s
h : ¬x ∈ t → ¬x ∈ s
hxt : ¬x ∈ t
⊢ False
[PROOFSTEP]
exact h hxt hx
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
s t : Set α
⊢ 𝓝ˢ s = 𝓝ˢ t ↔ s = t
[PROOFSTEP]
simp_rw [le_antisymm_iff]
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
s t : Set α
⊢ 𝓝ˢ s ≤ 𝓝ˢ t ∧ 𝓝ˢ t ≤ 𝓝ˢ s ↔ s ≤ t ∧ t ≤ s
[PROOFSTEP]
exact and_congr nhdsSet_le_iff nhdsSet_le_iff
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
s : Set α
x : α
⊢ 𝓝 x ≤ 𝓝ˢ s ↔ x ∈ s
[PROOFSTEP]
rw [← nhdsSet_singleton, nhdsSet_le_iff, singleton_subset_iff]
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T1Space α
inst✝ : ∀ (x : α), NeBot (𝓝[{x}ᶜ] x)
s : Set α
hs : Dense s
t : Finset α
⊢ Dense (s \ ↑t)
[PROOFSTEP]
induction t using Finset.induction_on with
| empty => simpa using hs
| insert _ ih =>
  rw [Finset.coe_insert, ← union_singleton, ← diff_diff]
  exact ih.diff_singleton _
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T1Space α
inst✝ : ∀ (x : α), NeBot (𝓝[{x}ᶜ] x)
s : Set α
hs : Dense s
t : Finset α
⊢ Dense (s \ ↑t)
[PROOFSTEP]
induction t using Finset.induction_on with
| empty => simpa using hs
| insert _ ih =>
  rw [Finset.coe_insert, ← union_singleton, ← diff_diff]
  exact ih.diff_singleton _
[GOAL]
case empty
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T1Space α
inst✝ : ∀ (x : α), NeBot (𝓝[{x}ᶜ] x)
s : Set α
hs : Dense s
⊢ Dense (s \ ↑∅)
[PROOFSTEP]

| empty => simpa using hs
[GOAL]
case empty
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T1Space α
inst✝ : ∀ (x : α), NeBot (𝓝[{x}ᶜ] x)
s : Set α
hs : Dense s
⊢ Dense (s \ ↑∅)
[PROOFSTEP]
simpa using hs
[GOAL]
case insert
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T1Space α
inst✝ : ∀ (x : α), NeBot (𝓝[{x}ᶜ] x)
s : Set α
hs : Dense s
a✝¹ : α
s✝ : Finset α
a✝ : ¬a✝¹ ∈ s✝
ih : Dense (s \ ↑s✝)
⊢ Dense (s \ ↑(insert a✝¹ s✝))
[PROOFSTEP]

| insert _ ih =>
  rw [Finset.coe_insert, ← union_singleton, ← diff_diff]
  exact ih.diff_singleton _
[GOAL]
case insert
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T1Space α
inst✝ : ∀ (x : α), NeBot (𝓝[{x}ᶜ] x)
s : Set α
hs : Dense s
a✝¹ : α
s✝ : Finset α
a✝ : ¬a✝¹ ∈ s✝
ih : Dense (s \ ↑s✝)
⊢ Dense (s \ ↑(insert a✝¹ s✝))
[PROOFSTEP]
rw [Finset.coe_insert, ← union_singleton, ← diff_diff]
[GOAL]
case insert
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T1Space α
inst✝ : ∀ (x : α), NeBot (𝓝[{x}ᶜ] x)
s : Set α
hs : Dense s
a✝¹ : α
s✝ : Finset α
a✝ : ¬a✝¹ ∈ s✝
ih : Dense (s \ ↑s✝)
⊢ Dense ((s \ ↑s✝) \ {a✝¹})
[PROOFSTEP]
exact ih.diff_singleton _
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T1Space α
inst✝ : ∀ (x : α), NeBot (𝓝[{x}ᶜ] x)
s : Set α
hs : Dense s
t : Set α
ht : Set.Finite t
⊢ Dense (s \ t)
[PROOFSTEP]
convert hs.diff_finset ht.toFinset
[GOAL]
case h.e'_3.h.e'_4
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T1Space α
inst✝ : ∀ (x : α), NeBot (𝓝[{x}ᶜ] x)
s : Set α
hs : Dense s
t : Set α
ht : Set.Finite t
⊢ t = ↑(Finite.toFinset ht)
[PROOFSTEP]
exact (Finite.coe_toFinset _).symm
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
inst✝ : T1Space β
f : α → β
a : α
b : β
h : Tendsto f (𝓝 a) (𝓝 b)
⊢ ContinuousAt f a
[PROOFSTEP]
rwa [ContinuousAt, eq_of_tendsto_nhds h]
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T1Space α
l : Filter β
inst✝ : NeBot l
c d : α
⊢ Tendsto (fun x => c) l (𝓝 d) ↔ c = d
[PROOFSTEP]
simp_rw [Tendsto, Filter.map_const, pure_le_nhds_iff]
[GOAL]
α✝ : Type u
β : Type v
inst✝² : TopologicalSpace α✝
α : Type u_1
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
x : α
s : Set α
hs : s ∈ 𝓝 x
hsf : Set.Finite s
⊢ IsOpen {x}
[PROOFSTEP]
have A : { x } ⊆ s := by simp only [singleton_subset_iff, mem_of_mem_nhds hs]
[GOAL]
α✝ : Type u
β : Type v
inst✝² : TopologicalSpace α✝
α : Type u_1
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
x : α
s : Set α
hs : s ∈ 𝓝 x
hsf : Set.Finite s
⊢ {x} ⊆ s
[PROOFSTEP]
simp only [singleton_subset_iff, mem_of_mem_nhds hs]
[GOAL]
α✝ : Type u
β : Type v
inst✝² : TopologicalSpace α✝
α : Type u_1
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
x : α
s : Set α
hs : s ∈ 𝓝 x
hsf : Set.Finite s
A : {x} ⊆ s
⊢ IsOpen {x}
[PROOFSTEP]
have B : IsClosed (s \ { x }) := (hsf.subset (diff_subset _ _)).isClosed
[GOAL]
α✝ : Type u
β : Type v
inst✝² : TopologicalSpace α✝
α : Type u_1
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
x : α
s : Set α
hs : s ∈ 𝓝 x
hsf : Set.Finite s
A : {x} ⊆ s
B : IsClosed (s \ {x})
⊢ IsOpen {x}
[PROOFSTEP]
have C : (s \ { x })ᶜ ∈ 𝓝 x := B.isOpen_compl.mem_nhds fun h => h.2 rfl
[GOAL]
α✝ : Type u
β : Type v
inst✝² : TopologicalSpace α✝
α : Type u_1
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
x : α
s : Set α
hs : s ∈ 𝓝 x
hsf : Set.Finite s
A : {x} ⊆ s
B : IsClosed (s \ {x})
C : (s \ {x})ᶜ ∈ 𝓝 x
⊢ IsOpen {x}
[PROOFSTEP]
have D : { x } ∈ 𝓝 x := by simpa only [← diff_eq, diff_diff_cancel_left A] using inter_mem hs C
[GOAL]
α✝ : Type u
β : Type v
inst✝² : TopologicalSpace α✝
α : Type u_1
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
x : α
s : Set α
hs : s ∈ 𝓝 x
hsf : Set.Finite s
A : {x} ⊆ s
B : IsClosed (s \ {x})
C : (s \ {x})ᶜ ∈ 𝓝 x
⊢ {x} ∈ 𝓝 x
[PROOFSTEP]
simpa only [← diff_eq, diff_diff_cancel_left A] using inter_mem hs C
[GOAL]
α✝ : Type u
β : Type v
inst✝² : TopologicalSpace α✝
α : Type u_1
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
x : α
s : Set α
hs : s ∈ 𝓝 x
hsf : Set.Finite s
A : {x} ⊆ s
B : IsClosed (s \ {x})
C : (s \ {x})ᶜ ∈ 𝓝 x
D : {x} ∈ 𝓝 x
⊢ IsOpen {x}
[PROOFSTEP]
rwa [← mem_interior_iff_mem_nhds, ← singleton_subset_iff, subset_interior_iff_isOpen] at D 
[GOAL]
α✝ : Type u
β : Type v
inst✝² : TopologicalSpace α✝
α : Type u_1
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
x : α
hx : NeBot (𝓝[{x}ᶜ] x)
s : Set α
hs : s ∈ 𝓝 x
⊢ Set.Infinite s
[PROOFSTEP]
refine' fun hsf => hx.1 _
[GOAL]
α✝ : Type u
β : Type v
inst✝² : TopologicalSpace α✝
α : Type u_1
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
x : α
hx : NeBot (𝓝[{x}ᶜ] x)
s : Set α
hs : s ∈ 𝓝 x
hsf : Set.Finite s
⊢ 𝓝[{x}ᶜ] x = ⊥
[PROOFSTEP]
rw [← isOpen_singleton_iff_punctured_nhds]
[GOAL]
α✝ : Type u
β : Type v
inst✝² : TopologicalSpace α✝
α : Type u_1
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
x : α
hx : NeBot (𝓝[{x}ᶜ] x)
s : Set α
hs : s ∈ 𝓝 x
hsf : Set.Finite s
⊢ IsOpen {x}
[PROOFSTEP]
exact isOpen_singleton_of_finite_mem_nhds x hs hsf
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
X : Type u_1
inst✝² : TopologicalSpace X
inst✝¹ : T1Space X
inst✝ : Finite X
⊢ DiscreteTopology X
[PROOFSTEP]
apply singletons_open_iff_discrete.mp
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
X : Type u_1
inst✝² : TopologicalSpace X
inst✝¹ : T1Space X
inst✝ : Finite X
⊢ ∀ (a : X), IsOpen {a}
[PROOFSTEP]
intro x
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
X : Type u_1
inst✝² : TopologicalSpace X
inst✝¹ : T1Space X
inst✝ : Finite X
x : X
⊢ IsOpen {x}
[PROOFSTEP]
rw [← isClosed_compl_iff]
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
X : Type u_1
inst✝² : TopologicalSpace X
inst✝¹ : T1Space X
inst✝ : Finite X
x : X
⊢ IsClosed {x}ᶜ
[PROOFSTEP]
exact (Set.toFinite _).isClosed
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : PreconnectedSpace α
inst✝ : DiscreteTopology α
⊢ Subsingleton α
[PROOFSTEP]
rw [← not_nontrivial_iff_subsingleton]
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : PreconnectedSpace α
inst✝ : DiscreteTopology α
⊢ ¬Nontrivial α
[PROOFSTEP]
rintro ⟨x, y, hxy⟩
[GOAL]
case mk.intro.intro
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : PreconnectedSpace α
inst✝ : DiscreteTopology α
x y : α
hxy : x ≠ y
⊢ False
[PROOFSTEP]
rw [Ne.def, ← mem_singleton_iff, (isClopen_discrete _).eq_univ <| singleton_nonempty y] at hxy 
[GOAL]
case mk.intro.intro
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : PreconnectedSpace α
inst✝ : DiscreteTopology α
x y : α
hxy : ¬x ∈ univ
⊢ False
[PROOFSTEP]
exact hxy (mem_univ x)
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
s : Set α
h : IsPreconnected s
hs : Set.Nontrivial s
⊢ Set.Infinite s
[PROOFSTEP]
refine' mt (fun hf => (subsingleton_coe s).mp _) (not_subsingleton_iff.mpr hs)
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
s : Set α
h : IsPreconnected s
hs : Set.Nontrivial s
hf : Set.Finite s
⊢ Subsingleton ↑s
[PROOFSTEP]
haveI := @discrete_of_t1_of_finite s _ _ hf.to_subtype
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
s : Set α
h : IsPreconnected s
hs : Set.Nontrivial s
hf : Set.Finite s
this : DiscreteTopology ↑s
⊢ Subsingleton ↑s
[PROOFSTEP]
exact @PreconnectedSpace.trivial_of_discrete _ _ (Subtype.preconnectedSpace h) _
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : ConnectedSpace α
inst✝¹ : Nontrivial α
inst✝ : T1Space α
x : α
⊢ NeBot (𝓝[{x}ᶜ] x)
[PROOFSTEP]
by_contra contra
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : ConnectedSpace α
inst✝¹ : Nontrivial α
inst✝ : T1Space α
x : α
contra : ¬NeBot (𝓝[{x}ᶜ] x)
⊢ False
[PROOFSTEP]
rw [not_neBot, ← isOpen_singleton_iff_punctured_nhds] at contra 
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : ConnectedSpace α
inst✝¹ : Nontrivial α
inst✝ : T1Space α
x : α
contra : IsOpen {x}
⊢ False
[PROOFSTEP]
replace contra :=
  nonempty_inter isOpen_compl_singleton contra (compl_union_self _) (Set.nonempty_compl_of_nontrivial _)
    (singleton_nonempty _)
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : ConnectedSpace α
inst✝¹ : Nontrivial α
inst✝ : T1Space α
x : α
contra : Set.Nonempty ({x}ᶜ ∩ {x})
⊢ False
[PROOFSTEP]
simp [compl_inter_self { x }] at contra 
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
s : Set α
inst✝ : DiscreteTopology ↑s
x : α
hx : x ∈ s
⊢ {x} ∈ 𝓝[s] x
[PROOFSTEP]
have : ({⟨x, hx⟩} : Set s) ∈ 𝓝 (⟨x, hx⟩ : s) := by simp [nhds_discrete]
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
s : Set α
inst✝ : DiscreteTopology ↑s
x : α
hx : x ∈ s
⊢ {{ val := x, property := hx }} ∈ 𝓝 { val := x, property := hx }
[PROOFSTEP]
simp [nhds_discrete]
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
s : Set α
inst✝ : DiscreteTopology ↑s
x : α
hx : x ∈ s
this : {{ val := x, property := hx }} ∈ 𝓝 { val := x, property := hx }
⊢ {x} ∈ 𝓝[s] x
[PROOFSTEP]
simpa only [nhdsWithin_eq_map_subtype_coe hx, image_singleton] using @image_mem_map _ _ _ ((↑) : s → α) _ this
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
ι : Type u_1
p : ι → Prop
t : ι → Set α
s : Set α
inst✝ : DiscreteTopology ↑s
x : α
hb : HasBasis (𝓝 x) p t
hx : x ∈ s
⊢ ∃ i, p i ∧ t i ∩ s = {x}
[PROOFSTEP]
rcases(nhdsWithin_hasBasis hb s).mem_iff.1 (singleton_mem_nhdsWithin_of_mem_discrete hx) with ⟨i, hi, hix⟩
[GOAL]
case intro.intro
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
ι : Type u_1
p : ι → Prop
t : ι → Set α
s : Set α
inst✝ : DiscreteTopology ↑s
x : α
hb : HasBasis (𝓝 x) p t
hx : x ∈ s
i : ι
hi : p i
hix : t i ∩ s ⊆ {x}
⊢ ∃ i, p i ∧ t i ∩ s = {x}
[PROOFSTEP]
exact ⟨i, hi, hix.antisymm <| singleton_subset_iff.2 ⟨mem_of_mem_nhds <| hb.mem_of_mem hi, hx⟩⟩
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
s : Set α
inst✝ : DiscreteTopology ↑s
x : α
hx : x ∈ s
⊢ ∃ U, U ∈ 𝓝 x ∧ U ∩ s = {x}
[PROOFSTEP]
simpa using (𝓝 x).basis_sets.exists_inter_eq_singleton_of_mem_discrete hx
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
s : Set α
inst✝ : DiscreteTopology ↑s
x : α
hx : x ∈ s
V : Set α
h : V ∈ 𝓝 x
h' : V ∩ s = {x}
⊢ {x}ᶜ ∩ V ∩ s = ∅
[PROOFSTEP]
rw [inter_assoc, h', compl_inter_self]
[GOAL]
α : Type u
β : Type v
inst✝ : TopologicalSpace α
⊢ T2Space α ↔ ∀ (x y : α), x ≠ y → Disjoint (𝓝 x) (𝓝 y)
[PROOFSTEP]
refine (t2Space_iff α).trans (forall₃_congr fun x y _ => ?_)
[GOAL]
α : Type u
β : Type v
inst✝ : TopologicalSpace α
x y : α
x✝ : x ≠ y
⊢ (∃ u v, IsOpen u ∧ IsOpen v ∧ x ∈ u ∧ y ∈ v ∧ Disjoint u v) ↔ Disjoint (𝓝 x) (𝓝 y)
[PROOFSTEP]
simp only [(nhds_basis_opens x).disjoint_iff (nhds_basis_opens y), exists_prop, ← exists_and_left, and_assoc, and_comm,
  and_left_comm]
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T2Space α
x y : α
hd : Disjoint (𝓝 x) (𝓝 y)
he : x = y
⊢ False
[PROOFSTEP]
simp [he, nhds_neBot.ne] at hd 
[GOAL]
α : Type u
β : Type v
inst✝ : TopologicalSpace α
⊢ IsOpen {p | Disjoint (𝓝 p.fst) (𝓝 p.snd)}
[PROOFSTEP]
simp only [isOpen_iff_mem_nhds, Prod.forall, mem_setOf_eq]
[GOAL]
α : Type u
β : Type v
inst✝ : TopologicalSpace α
⊢ ∀ (a b : α), Disjoint (𝓝 a) (𝓝 b) → {p | Disjoint (𝓝 p.fst) (𝓝 p.snd)} ∈ 𝓝 (a, b)
[PROOFSTEP]
intro x y h
[GOAL]
α : Type u
β : Type v
inst✝ : TopologicalSpace α
x y : α
h : Disjoint (𝓝 x) (𝓝 y)
⊢ {p | Disjoint (𝓝 p.fst) (𝓝 p.snd)} ∈ 𝓝 (x, y)
[PROOFSTEP]
obtain ⟨U, hU, V, hV, hd⟩ := ((nhds_basis_opens x).disjoint_iff (nhds_basis_opens y)).mp h
[GOAL]
case intro.intro.intro.intro
α : Type u
β : Type v
inst✝ : TopologicalSpace α
x y : α
h : Disjoint (𝓝 x) (𝓝 y)
U : Set α
hU : x ∈ U ∧ IsOpen U
V : Set α
hV : y ∈ V ∧ IsOpen V
hd : Disjoint U V
⊢ {p | Disjoint (𝓝 p.fst) (𝓝 p.snd)} ∈ 𝓝 (x, y)
[PROOFSTEP]
exact
  mem_nhds_prod_iff.mpr
    ⟨U, hU.2.mem_nhds hU.1, V, hV.2.mem_nhds hV.1, fun ⟨x', y'⟩ ⟨hx', hy'⟩ =>
      disjoint_of_disjoint_of_mem hd (hU.2.mem_nhds hx') (hV.2.mem_nhds hy')⟩
[GOAL]
α : Type u
β : Type v
inst✝ : TopologicalSpace α
⊢ T2Space α ↔ ∀ {x y : α}, NeBot (𝓝 x ⊓ 𝓝 y) → x = y
[PROOFSTEP]
simp only [t2Space_iff_disjoint_nhds, disjoint_iff, neBot_iff, Ne.def, not_imp_comm]
[GOAL]
α : Type u
β : Type v
inst✝ : TopologicalSpace α
⊢ T2Space α ↔ ∀ {x y : α}, x ≠ y → ∃ U, U ∈ 𝓝 x ∧ ∃ V, V ∈ 𝓝 y ∧ Disjoint U V
[PROOFSTEP]
simp only [t2Space_iff_disjoint_nhds, Filter.disjoint_iff]
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : LocallyCompactSpace α
inst✝ : T2Space α
x y : α
h : x ≠ y
⊢ ∃ u v, u ∈ 𝓝 x ∧ v ∈ 𝓝 y ∧ IsCompact u ∧ IsCompact v ∧ Disjoint u v
[PROOFSTEP]
simpa only [exists_prop, ← exists_and_left, and_comm, and_assoc, and_left_comm] using
  ((compact_basis_nhds x).disjoint_iff (compact_basis_nhds y)).1 (disjoint_nhds_nhds.2 h)
[GOAL]
α : Type u
β : Type v
inst✝ : TopologicalSpace α
⊢ (∀ {x y : α}, NeBot (𝓝 x ⊓ 𝓝 y) → x = y) ↔ ∀ {x y : α} (f : Ultrafilter α), ↑f ≤ 𝓝 x → ↑f ≤ 𝓝 y → x = y
[PROOFSTEP]
simp only [← exists_ultrafilter_iff, and_imp, le_inf_iff, exists_imp]
[GOAL]
α : Type u
β : Type v
inst✝ : TopologicalSpace α
⊢ T2Space α ↔ IsClosed (diagonal α)
[PROOFSTEP]
simp only [t2Space_iff_disjoint_nhds, ← isOpen_compl_iff, isOpen_iff_mem_nhds, Prod.forall, nhds_prod_eq,
  compl_diagonal_mem_prod, mem_compl_iff, mem_diagonal_iff]
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T25Space α
x y : α
h : Disjoint (Filter.lift' (𝓝 x) closure) (Filter.lift' (𝓝 y) closure)
hxy : x = y
⊢ False
[PROOFSTEP]
simp [hxy, nhds_neBot.ne] at h 
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T25Space α
x y : α
h : x ≠ y
⊢ ∃ u, x ∈ u ∧ IsOpen u ∧ ∃ v, y ∈ v ∧ IsOpen v ∧ Disjoint (closure u) (closure v)
[PROOFSTEP]
simpa only [exists_prop, and_assoc] using
  ((nhds_basis_opens x).lift'_closure.disjoint_iff (nhds_basis_opens y).lift'_closure).1
    (disjoint_lift'_closure_nhds.2 h)
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
f : Filter α
inst✝ : CompactSpace α
U : Set α
⊢ IsOpen U ↔ ∀ (F : Ultrafilter α), Ultrafilter.lim F ∈ U → U ∈ ↑F
[PROOFSTEP]
rw [isOpen_iff_ultrafilter]
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
f : Filter α
inst✝ : CompactSpace α
U : Set α
⊢ (∀ (x : α), x ∈ U → ∀ (l : Ultrafilter α), ↑l ≤ 𝓝 x → U ∈ l) ↔ ∀ (F : Ultrafilter α), Ultrafilter.lim F ∈ U → U ∈ ↑F
[PROOFSTEP]
refine' ⟨fun h F hF => h F.lim hF F F.le_nhds_lim, _⟩
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
f : Filter α
inst✝ : CompactSpace α
U : Set α
⊢ (∀ (F : Ultrafilter α), Ultrafilter.lim F ∈ U → U ∈ ↑F) → ∀ (x : α), x ∈ U → ∀ (l : Ultrafilter α), ↑l ≤ 𝓝 x → U ∈ l
[PROOFSTEP]
intro cond x hx f h
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
f✝ : Filter α
inst✝ : CompactSpace α
U : Set α
cond : ∀ (F : Ultrafilter α), Ultrafilter.lim F ∈ U → U ∈ ↑F
x : α
hx : x ∈ U
f : Ultrafilter α
h : ↑f ≤ 𝓝 x
⊢ U ∈ f
[PROOFSTEP]
rw [← Ultrafilter.lim_eq_iff_le_nhds.2 h] at hx 
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
f✝ : Filter α
inst✝ : CompactSpace α
U : Set α
cond : ∀ (F : Ultrafilter α), Ultrafilter.lim F ∈ U → U ∈ ↑F
x : α
f : Ultrafilter α
hx : Ultrafilter.lim f ∈ U
h : ↑f ≤ 𝓝 x
⊢ U ∈ f
[PROOFSTEP]
exact cond _ hx
[GOAL]
α✝ : Type u
β✝ : Type v
inst✝⁴ : TopologicalSpace α✝
α : Type u_1
β : Type u_2
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : TopologicalSpace β
inst✝ : T2Space β
⊢ T2Space (α ⊕ β)
[PROOFSTEP]
constructor
[GOAL]
case t2
α✝ : Type u
β✝ : Type v
inst✝⁴ : TopologicalSpace α✝
α : Type u_1
β : Type u_2
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : TopologicalSpace β
inst✝ : T2Space β
⊢ ∀ (x y : α ⊕ β), x ≠ y → ∃ u v, IsOpen u ∧ IsOpen v ∧ x ∈ u ∧ y ∈ v ∧ Disjoint u v
[PROOFSTEP]
rintro (x | x) (y | y) h
[GOAL]
case t2.inl.inl
α✝ : Type u
β✝ : Type v
inst✝⁴ : TopologicalSpace α✝
α : Type u_1
β : Type u_2
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : TopologicalSpace β
inst✝ : T2Space β
x y : α
h : Sum.inl x ≠ Sum.inl y
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ Sum.inl x ∈ u ∧ Sum.inl y ∈ v ∧ Disjoint u v
[PROOFSTEP]
exact separated_by_openEmbedding openEmbedding_inl <| ne_of_apply_ne _ h
[GOAL]
case t2.inl.inr
α✝ : Type u
β✝ : Type v
inst✝⁴ : TopologicalSpace α✝
α : Type u_1
β : Type u_2
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : TopologicalSpace β
inst✝ : T2Space β
x : α
y : β
h : Sum.inl x ≠ Sum.inr y
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ Sum.inl x ∈ u ∧ Sum.inr y ∈ v ∧ Disjoint u v
[PROOFSTEP]
exact separated_by_continuous continuous_isLeft <| by simp
[GOAL]
α✝ : Type u
β✝ : Type v
inst✝⁴ : TopologicalSpace α✝
α : Type u_1
β : Type u_2
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : TopologicalSpace β
inst✝ : T2Space β
x : α
y : β
h : Sum.inl x ≠ Sum.inr y
⊢ Sum.isLeft (Sum.inl x) ≠ Sum.isLeft (Sum.inr y)
[PROOFSTEP]
simp
[GOAL]
case t2.inr.inl
α✝ : Type u
β✝ : Type v
inst✝⁴ : TopologicalSpace α✝
α : Type u_1
β : Type u_2
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : TopologicalSpace β
inst✝ : T2Space β
x : β
y : α
h : Sum.inr x ≠ Sum.inl y
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ Sum.inr x ∈ u ∧ Sum.inl y ∈ v ∧ Disjoint u v
[PROOFSTEP]
exact separated_by_continuous continuous_isLeft <| by simp
[GOAL]
α✝ : Type u
β✝ : Type v
inst✝⁴ : TopologicalSpace α✝
α : Type u_1
β : Type u_2
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : TopologicalSpace β
inst✝ : T2Space β
x : β
y : α
h : Sum.inr x ≠ Sum.inl y
⊢ Sum.isLeft (Sum.inr x) ≠ Sum.isLeft (Sum.inl y)
[PROOFSTEP]
simp
[GOAL]
case t2.inr.inr
α✝ : Type u
β✝ : Type v
inst✝⁴ : TopologicalSpace α✝
α : Type u_1
β : Type u_2
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : TopologicalSpace β
inst✝ : T2Space β
x y : β
h : Sum.inr x ≠ Sum.inr y
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ Sum.inr x ∈ u ∧ Sum.inr y ∈ v ∧ Disjoint u v
[PROOFSTEP]
exact separated_by_openEmbedding openEmbedding_inr <| ne_of_apply_ne _ h
[GOAL]
α✝ : Type u
β : Type v
inst✝² : TopologicalSpace α✝
ι : Type ?u.128612
α : ι → Type u_1
inst✝¹ : (i : ι) → TopologicalSpace (α i)
inst✝ : ∀ (a : ι), T2Space (α a)
⊢ T2Space ((i : ι) × α i)
[PROOFSTEP]
constructor
[GOAL]
case t2
α✝ : Type u
β : Type v
inst✝² : TopologicalSpace α✝
ι : Type ?u.128612
α : ι → Type u_1
inst✝¹ : (i : ι) → TopologicalSpace (α i)
inst✝ : ∀ (a : ι), T2Space (α a)
⊢ ∀ (x y : (i : ι) × α i), x ≠ y → ∃ u v, IsOpen u ∧ IsOpen v ∧ x ∈ u ∧ y ∈ v ∧ Disjoint u v
[PROOFSTEP]
rintro ⟨i, x⟩ ⟨j, y⟩ neq
[GOAL]
case t2.mk.mk
α✝ : Type u
β : Type v
inst✝² : TopologicalSpace α✝
ι : Type ?u.128612
α : ι → Type u_1
inst✝¹ : (i : ι) → TopologicalSpace (α i)
inst✝ : ∀ (a : ι), T2Space (α a)
i : ι
x : α i
j : ι
y : α j
neq : { fst := i, snd := x } ≠ { fst := j, snd := y }
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ { fst := i, snd := x } ∈ u ∧ { fst := j, snd := y } ∈ v ∧ Disjoint u v
[PROOFSTEP]
rcases eq_or_ne i j with (rfl | h)
[GOAL]
case t2.mk.mk.inl
α✝ : Type u
β : Type v
inst✝² : TopologicalSpace α✝
ι : Type ?u.128612
α : ι → Type u_1
inst✝¹ : (i : ι) → TopologicalSpace (α i)
inst✝ : ∀ (a : ι), T2Space (α a)
i : ι
x y : α i
neq : { fst := i, snd := x } ≠ { fst := i, snd := y }
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ { fst := i, snd := x } ∈ u ∧ { fst := i, snd := y } ∈ v ∧ Disjoint u v
[PROOFSTEP]
replace neq : x ≠ y := ne_of_apply_ne _ neq
[GOAL]
case t2.mk.mk.inl
α✝ : Type u
β : Type v
inst✝² : TopologicalSpace α✝
ι : Type ?u.128612
α : ι → Type u_1
inst✝¹ : (i : ι) → TopologicalSpace (α i)
inst✝ : ∀ (a : ι), T2Space (α a)
i : ι
x y : α i
neq : x ≠ y
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ { fst := i, snd := x } ∈ u ∧ { fst := i, snd := y } ∈ v ∧ Disjoint u v
[PROOFSTEP]
exact separated_by_openEmbedding openEmbedding_sigmaMk neq
[GOAL]
case t2.mk.mk.inr
α✝ : Type u
β : Type v
inst✝² : TopologicalSpace α✝
ι : Type ?u.128612
α : ι → Type u_1
inst✝¹ : (i : ι) → TopologicalSpace (α i)
inst✝ : ∀ (a : ι), T2Space (α a)
i : ι
x : α i
j : ι
y : α j
neq : { fst := i, snd := x } ≠ { fst := j, snd := y }
h : i ≠ j
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ { fst := i, snd := x } ∈ u ∧ { fst := j, snd := y } ∈ v ∧ Disjoint u v
[PROOFSTEP]
let _ := (⊥ : TopologicalSpace ι)
[GOAL]
case t2.mk.mk.inr
α✝ : Type u
β : Type v
inst✝² : TopologicalSpace α✝
ι : Type ?u.128612
α : ι → Type u_1
inst✝¹ : (i : ι) → TopologicalSpace (α i)
inst✝ : ∀ (a : ι), T2Space (α a)
i : ι
x : α i
j : ι
y : α j
neq : { fst := i, snd := x } ≠ { fst := j, snd := y }
h : i ≠ j
x✝ : TopologicalSpace ι := ⊥
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ { fst := i, snd := x } ∈ u ∧ { fst := j, snd := y } ∈ v ∧ Disjoint u v
[PROOFSTEP]
have : DiscreteTopology ι := ⟨rfl⟩
[GOAL]
case t2.mk.mk.inr
α✝ : Type u
β : Type v
inst✝² : TopologicalSpace α✝
ι : Type ?u.128612
α : ι → Type u_1
inst✝¹ : (i : ι) → TopologicalSpace (α i)
inst✝ : ∀ (a : ι), T2Space (α a)
i : ι
x : α i
j : ι
y : α j
neq : { fst := i, snd := x } ≠ { fst := j, snd := y }
h : i ≠ j
x✝ : TopologicalSpace ι := ⊥
this : DiscreteTopology ι
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ { fst := i, snd := x } ∈ u ∧ { fst := j, snd := y } ∈ v ∧ Disjoint u v
[PROOFSTEP]
exact separated_by_continuous (continuous_def.2 fun u _ => isOpen_sigma_fst_preimage u) h
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
s : Set β
t : Set γ
f g : β → γ → α
h : ∀ (x : β), x ∈ s → ∀ (y : γ), y ∈ t → f x y = g x y
hf₁ : ∀ (x : β), Continuous (f x)
hf₂ : ∀ (y : γ), Continuous fun x => f x y
hg₁ : ∀ (x : β), Continuous (g x)
hg₂ : ∀ (y : γ), Continuous fun x => g x y
this : closure s ⊆ ⋂ (y : γ) (_ : y ∈ closure t), {x | f x y = g x y}
⊢ ∀ (x : β), x ∈ closure s → ∀ (y : γ), y ∈ closure t → f x y = g x y
[PROOFSTEP]
simpa only [subset_def, mem_iInter]
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
s t : Set β
f g : β → α
h : EqOn f g s
hf : ContinuousOn f t
hg : ContinuousOn g t
hst : s ⊆ t
hts : t ⊆ closure s
⊢ EqOn f g t
[PROOFSTEP]
intro x hx
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
s t : Set β
f g : β → α
h : EqOn f g s
hf : ContinuousOn f t
hg : ContinuousOn g t
hst : s ⊆ t
hts : t ⊆ closure s
x : β
hx : x ∈ t
⊢ f x = g x
[PROOFSTEP]
have : (𝓝[s] x).NeBot := mem_closure_iff_clusterPt.mp (hts hx)
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
s t : Set β
f g : β → α
h : EqOn f g s
hf : ContinuousOn f t
hg : ContinuousOn g t
hst : s ⊆ t
hts : t ⊆ closure s
x : β
hx : x ∈ t
this : NeBot (𝓝[s] x)
⊢ f x = g x
[PROOFSTEP]
exact
  tendsto_nhds_unique_of_eventuallyEq ((hf x hx).mono_left <| nhdsWithin_mono _ hst)
    ((hg x hx).mono_left <| nhdsWithin_mono _ hst) (h.eventuallyEq_of_mem self_mem_nhdsWithin)
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
s t : Set α
hs : IsCompact s
ht : IsCompact t
hst : Disjoint s t
⊢ SeparatedNhds s t
[PROOFSTEP]
simp only [SeparatedNhds, prod_subset_compl_diagonal_iff_disjoint.symm] at hst ⊢
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
s t : Set α
hs : IsCompact s
ht : IsCompact t
hst : s ×ˢ t ⊆ (diagonal α)ᶜ
⊢ ∃ U V, IsOpen U ∧ IsOpen V ∧ s ⊆ U ∧ t ⊆ V ∧ U ×ˢ V ⊆ (diagonal α)ᶜ
[PROOFSTEP]
exact generalized_tube_lemma hs ht isClosed_diagonal.isOpen_compl hst
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
s t : Finset α
h : Disjoint s t
⊢ Disjoint ↑s ↑t
[PROOFSTEP]
exact_mod_cast h
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
x : α
s : Finset α
h : ¬x ∈ s
⊢ SeparatedNhds {x} ↑s
[PROOFSTEP]
exact_mod_cast finset_disjoint_finset_opens_of_t2 { x } s (Finset.disjoint_singleton_left.mpr h)
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
s : Set α
hs : IsCompact s
x : α
hx : x ∈ sᶜ
u v : Set α
left✝ : IsOpen u
vo : IsOpen v
su : s ⊆ u
xv : {x} ⊆ v
uv : Disjoint u v
⊢ x ∈ v
[PROOFSTEP]
simpa using xv
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
⊢ coclosedCompact α = cocompact α
[PROOFSTEP]
simp only [coclosedCompact, cocompact, iInf_and', and_iff_right_of_imp (@IsCompact.isClosed α _ _ _)]
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
K U V : Set α
hK : IsCompact K
hU : IsOpen U
hV : IsOpen V
h2K : K ⊆ U ∪ V
⊢ ∃ K₁ K₂, IsCompact K₁ ∧ IsCompact K₂ ∧ K₁ ⊆ U ∧ K₂ ⊆ V ∧ K = K₁ ∪ K₂
[PROOFSTEP]
obtain ⟨O₁, O₂, h1O₁, h1O₂, h2O₁, h2O₂, hO⟩ :=
  isCompact_isCompact_separated (hK.diff hU) (hK.diff hV)
    (by rwa [disjoint_iff_inter_eq_empty, diff_inter_diff, diff_eq_empty])
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
K U V : Set α
hK : IsCompact K
hU : IsOpen U
hV : IsOpen V
h2K : K ⊆ U ∪ V
⊢ Disjoint (K \ U) (K \ V)
[PROOFSTEP]
rwa [disjoint_iff_inter_eq_empty, diff_inter_diff, diff_eq_empty]
[GOAL]
case intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
K U V : Set α
hK : IsCompact K
hU : IsOpen U
hV : IsOpen V
h2K : K ⊆ U ∪ V
O₁ O₂ : Set α
h1O₁ : IsOpen O₁
h1O₂ : IsOpen O₂
h2O₁ : K \ U ⊆ O₁
h2O₂ : K \ V ⊆ O₂
hO : Disjoint O₁ O₂
⊢ ∃ K₁ K₂, IsCompact K₁ ∧ IsCompact K₂ ∧ K₁ ⊆ U ∧ K₂ ⊆ V ∧ K = K₁ ∪ K₂
[PROOFSTEP]
exact
  ⟨_, _, hK.diff h1O₁, hK.diff h1O₂, by rwa [diff_subset_comm], by rwa [diff_subset_comm], by
    rw [← diff_inter, hO.inter_eq, diff_empty]⟩
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
K U V : Set α
hK : IsCompact K
hU : IsOpen U
hV : IsOpen V
h2K : K ⊆ U ∪ V
O₁ O₂ : Set α
h1O₁ : IsOpen O₁
h1O₂ : IsOpen O₂
h2O₁ : K \ U ⊆ O₁
h2O₂ : K \ V ⊆ O₂
hO : Disjoint O₁ O₂
⊢ K \ O₁ ⊆ U
[PROOFSTEP]
rwa [diff_subset_comm]
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
K U V : Set α
hK : IsCompact K
hU : IsOpen U
hV : IsOpen V
h2K : K ⊆ U ∪ V
O₁ O₂ : Set α
h1O₁ : IsOpen O₁
h1O₂ : IsOpen O₂
h2O₁ : K \ U ⊆ O₁
h2O₂ : K \ V ⊆ O₂
hO : Disjoint O₁ O₂
⊢ K \ O₂ ⊆ V
[PROOFSTEP]
rwa [diff_subset_comm]
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
K U V : Set α
hK : IsCompact K
hU : IsOpen U
hV : IsOpen V
h2K : K ⊆ U ∪ V
O₁ O₂ : Set α
h1O₁ : IsOpen O₁
h1O₂ : IsOpen O₂
h2O₁ : K \ U ⊆ O₁
h2O₂ : K \ V ⊆ O₂
hO : Disjoint O₁ O₂
⊢ K = K \ O₁ ∪ K \ O₂
[PROOFSTEP]
rw [← diff_inter, hO.inter_eq, diff_empty]
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
s : Set α
hs : IsCompact s
ι : Type u_2
t : Finset ι
U : ι → Set α
hU : ∀ (i : ι), i ∈ t → IsOpen (U i)
hsC : s ⊆ ⋃ (i : ι) (_ : i ∈ t), U i
⊢ ∃ K, (∀ (i : ι), IsCompact (K i)) ∧ (∀ (i : ι), K i ⊆ U i) ∧ s = ⋃ (i : ι) (_ : i ∈ t), K i
[PROOFSTEP]
induction' t using Finset.induction with x t hx ih generalizing U s
[GOAL]
case empty
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
s✝ : Set α
hs✝ : IsCompact s✝
ι : Type u_2
t : Finset ι
U✝ : ι → Set α
hU✝ : ∀ (i : ι), i ∈ t → IsOpen (U✝ i)
hsC✝ : s✝ ⊆ ⋃ (i : ι) (_ : i ∈ t), U✝ i
s : Set α
hs : IsCompact s
U : ι → Set α
hU : ∀ (i : ι), i ∈ ∅ → IsOpen (U i)
hsC : s ⊆ ⋃ (i : ι) (_ : i ∈ ∅), U i
⊢ ∃ K, (∀ (i : ι), IsCompact (K i)) ∧ (∀ (i : ι), K i ⊆ U i) ∧ s = ⋃ (i : ι) (_ : i ∈ ∅), K i
[PROOFSTEP]
refine' ⟨fun _ => ∅, fun _ => isCompact_empty, fun i => empty_subset _, _⟩
[GOAL]
case empty
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
s✝ : Set α
hs✝ : IsCompact s✝
ι : Type u_2
t : Finset ι
U✝ : ι → Set α
hU✝ : ∀ (i : ι), i ∈ t → IsOpen (U✝ i)
hsC✝ : s✝ ⊆ ⋃ (i : ι) (_ : i ∈ t), U✝ i
s : Set α
hs : IsCompact s
U : ι → Set α
hU : ∀ (i : ι), i ∈ ∅ → IsOpen (U i)
hsC : s ⊆ ⋃ (i : ι) (_ : i ∈ ∅), U i
⊢ s = ⋃ (i : ι) (_ : i ∈ ∅), (fun x => ∅) i
[PROOFSTEP]
simpa only [subset_empty_iff, Finset.not_mem_empty, iUnion_false, iUnion_empty] using hsC
[GOAL]
case insert
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
s✝ : Set α
hs✝ : IsCompact s✝
ι : Type u_2
t✝ : Finset ι
U✝ : ι → Set α
hU✝ : ∀ (i : ι), i ∈ t✝ → IsOpen (U✝ i)
hsC✝ : s✝ ⊆ ⋃ (i : ι) (_ : i ∈ t✝), U✝ i
x : ι
t : Finset ι
hx : ¬x ∈ t
ih :
  ∀ {s : Set α},
    IsCompact s →
      ∀ (U : ι → Set α),
        (∀ (i : ι), i ∈ t → IsOpen (U i)) →
          s ⊆ ⋃ (i : ι) (_ : i ∈ t), U i →
            ∃ K, (∀ (i : ι), IsCompact (K i)) ∧ (∀ (i : ι), K i ⊆ U i) ∧ s = ⋃ (i : ι) (_ : i ∈ t), K i
s : Set α
hs : IsCompact s
U : ι → Set α
hU : ∀ (i : ι), i ∈ insert x t → IsOpen (U i)
hsC : s ⊆ ⋃ (i : ι) (_ : i ∈ insert x t), U i
⊢ ∃ K, (∀ (i : ι), IsCompact (K i)) ∧ (∀ (i : ι), K i ⊆ U i) ∧ s = ⋃ (i : ι) (_ : i ∈ insert x t), K i
[PROOFSTEP]
simp only [Finset.set_biUnion_insert] at hsC 
[GOAL]
case insert
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
s✝ : Set α
hs✝ : IsCompact s✝
ι : Type u_2
t✝ : Finset ι
U✝ : ι → Set α
hU✝ : ∀ (i : ι), i ∈ t✝ → IsOpen (U✝ i)
hsC✝ : s✝ ⊆ ⋃ (i : ι) (_ : i ∈ t✝), U✝ i
x : ι
t : Finset ι
hx : ¬x ∈ t
ih :
  ∀ {s : Set α},
    IsCompact s →
      ∀ (U : ι → Set α),
        (∀ (i : ι), i ∈ t → IsOpen (U i)) →
          s ⊆ ⋃ (i : ι) (_ : i ∈ t), U i →
            ∃ K, (∀ (i : ι), IsCompact (K i)) ∧ (∀ (i : ι), K i ⊆ U i) ∧ s = ⋃ (i : ι) (_ : i ∈ t), K i
s : Set α
hs : IsCompact s
U : ι → Set α
hU : ∀ (i : ι), i ∈ insert x t → IsOpen (U i)
hsC : s ⊆ U x ∪ ⋃ (x : ι) (_ : x ∈ t), U x
⊢ ∃ K, (∀ (i : ι), IsCompact (K i)) ∧ (∀ (i : ι), K i ⊆ U i) ∧ s = ⋃ (i : ι) (_ : i ∈ insert x t), K i
[PROOFSTEP]
simp only [Finset.forall_mem_insert] at hU 
[GOAL]
case insert
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
s✝ : Set α
hs✝ : IsCompact s✝
ι : Type u_2
t✝ : Finset ι
U✝ : ι → Set α
hU✝ : ∀ (i : ι), i ∈ t✝ → IsOpen (U✝ i)
hsC✝ : s✝ ⊆ ⋃ (i : ι) (_ : i ∈ t✝), U✝ i
x : ι
t : Finset ι
hx : ¬x ∈ t
ih :
  ∀ {s : Set α},
    IsCompact s →
      ∀ (U : ι → Set α),
        (∀ (i : ι), i ∈ t → IsOpen (U i)) →
          s ⊆ ⋃ (i : ι) (_ : i ∈ t), U i →
            ∃ K, (∀ (i : ι), IsCompact (K i)) ∧ (∀ (i : ι), K i ⊆ U i) ∧ s = ⋃ (i : ι) (_ : i ∈ t), K i
s : Set α
hs : IsCompact s
U : ι → Set α
hsC : s ⊆ U x ∪ ⋃ (x : ι) (_ : x ∈ t), U x
hU : IsOpen (U x) ∧ ∀ (x : ι), x ∈ t → IsOpen (U x)
⊢ ∃ K, (∀ (i : ι), IsCompact (K i)) ∧ (∀ (i : ι), K i ⊆ U i) ∧ s = ⋃ (i : ι) (_ : i ∈ insert x t), K i
[PROOFSTEP]
have hU' : ∀ i ∈ t, IsOpen (U i) := fun i hi => hU.2 i hi
[GOAL]
case insert
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
s✝ : Set α
hs✝ : IsCompact s✝
ι : Type u_2
t✝ : Finset ι
U✝ : ι → Set α
hU✝ : ∀ (i : ι), i ∈ t✝ → IsOpen (U✝ i)
hsC✝ : s✝ ⊆ ⋃ (i : ι) (_ : i ∈ t✝), U✝ i
x : ι
t : Finset ι
hx : ¬x ∈ t
ih :
  ∀ {s : Set α},
    IsCompact s →
      ∀ (U : ι → Set α),
        (∀ (i : ι), i ∈ t → IsOpen (U i)) →
          s ⊆ ⋃ (i : ι) (_ : i ∈ t), U i →
            ∃ K, (∀ (i : ι), IsCompact (K i)) ∧ (∀ (i : ι), K i ⊆ U i) ∧ s = ⋃ (i : ι) (_ : i ∈ t), K i
s : Set α
hs : IsCompact s
U : ι → Set α
hsC : s ⊆ U x ∪ ⋃ (x : ι) (_ : x ∈ t), U x
hU : IsOpen (U x) ∧ ∀ (x : ι), x ∈ t → IsOpen (U x)
hU' : ∀ (i : ι), i ∈ t → IsOpen (U i)
⊢ ∃ K, (∀ (i : ι), IsCompact (K i)) ∧ (∀ (i : ι), K i ⊆ U i) ∧ s = ⋃ (i : ι) (_ : i ∈ insert x t), K i
[PROOFSTEP]
rcases hs.binary_compact_cover hU.1 (isOpen_biUnion hU') hsC with ⟨K₁, K₂, h1K₁, h1K₂, h2K₁, h2K₂, hK⟩
[GOAL]
case insert.intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
s✝ : Set α
hs✝ : IsCompact s✝
ι : Type u_2
t✝ : Finset ι
U✝ : ι → Set α
hU✝ : ∀ (i : ι), i ∈ t✝ → IsOpen (U✝ i)
hsC✝ : s✝ ⊆ ⋃ (i : ι) (_ : i ∈ t✝), U✝ i
x : ι
t : Finset ι
hx : ¬x ∈ t
ih :
  ∀ {s : Set α},
    IsCompact s →
      ∀ (U : ι → Set α),
        (∀ (i : ι), i ∈ t → IsOpen (U i)) →
          s ⊆ ⋃ (i : ι) (_ : i ∈ t), U i →
            ∃ K, (∀ (i : ι), IsCompact (K i)) ∧ (∀ (i : ι), K i ⊆ U i) ∧ s = ⋃ (i : ι) (_ : i ∈ t), K i
s : Set α
hs : IsCompact s
U : ι → Set α
hsC : s ⊆ U x ∪ ⋃ (x : ι) (_ : x ∈ t), U x
hU : IsOpen (U x) ∧ ∀ (x : ι), x ∈ t → IsOpen (U x)
hU' : ∀ (i : ι), i ∈ t → IsOpen (U i)
K₁ K₂ : Set α
h1K₁ : IsCompact K₁
h1K₂ : IsCompact K₂
h2K₁ : K₁ ⊆ U x
h2K₂ : K₂ ⊆ ⋃ (i : ι) (_ : i ∈ fun i => i ∈ t.val), U i
hK : s = K₁ ∪ K₂
⊢ ∃ K, (∀ (i : ι), IsCompact (K i)) ∧ (∀ (i : ι), K i ⊆ U i) ∧ s = ⋃ (i : ι) (_ : i ∈ insert x t), K i
[PROOFSTEP]
rcases ih h1K₂ U hU' h2K₂ with ⟨K, h1K, h2K, h3K⟩
[GOAL]
case insert.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
s✝ : Set α
hs✝ : IsCompact s✝
ι : Type u_2
t✝ : Finset ι
U✝ : ι → Set α
hU✝ : ∀ (i : ι), i ∈ t✝ → IsOpen (U✝ i)
hsC✝ : s✝ ⊆ ⋃ (i : ι) (_ : i ∈ t✝), U✝ i
x : ι
t : Finset ι
hx : ¬x ∈ t
ih :
  ∀ {s : Set α},
    IsCompact s →
      ∀ (U : ι → Set α),
        (∀ (i : ι), i ∈ t → IsOpen (U i)) →
          s ⊆ ⋃ (i : ι) (_ : i ∈ t), U i →
            ∃ K, (∀ (i : ι), IsCompact (K i)) ∧ (∀ (i : ι), K i ⊆ U i) ∧ s = ⋃ (i : ι) (_ : i ∈ t), K i
s : Set α
hs : IsCompact s
U : ι → Set α
hsC : s ⊆ U x ∪ ⋃ (x : ι) (_ : x ∈ t), U x
hU : IsOpen (U x) ∧ ∀ (x : ι), x ∈ t → IsOpen (U x)
hU' : ∀ (i : ι), i ∈ t → IsOpen (U i)
K₁ K₂ : Set α
h1K₁ : IsCompact K₁
h1K₂ : IsCompact K₂
h2K₁ : K₁ ⊆ U x
h2K₂ : K₂ ⊆ ⋃ (i : ι) (_ : i ∈ fun i => i ∈ t.val), U i
hK : s = K₁ ∪ K₂
K : ι → Set α
h1K : ∀ (i : ι), IsCompact (K i)
h2K : ∀ (i : ι), K i ⊆ U i
h3K : K₂ = ⋃ (i : ι) (_ : i ∈ t), K i
⊢ ∃ K, (∀ (i : ι), IsCompact (K i)) ∧ (∀ (i : ι), K i ⊆ U i) ∧ s = ⋃ (i : ι) (_ : i ∈ insert x t), K i
[PROOFSTEP]
refine' ⟨update K x K₁, _, _, _⟩
[GOAL]
case insert.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_1
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
s✝ : Set α
hs✝ : IsCompact s✝
ι : Type u_2
t✝ : Finset ι
U✝ : ι → Set α
hU✝ : ∀ (i : ι), i ∈ t✝ → IsOpen (U✝ i)
hsC✝ : s✝ ⊆ ⋃ (i : ι) (_ : i ∈ t✝), U✝ i
x : ι
t : Finset ι
hx : ¬x ∈ t
ih :
  ∀ {s : Set α},
    IsCompact s →
      ∀ (U : ι → Set α),
        (∀ (i : ι), i ∈ t → IsOpen (U i)) →
          s ⊆ ⋃ (i : ι) (_ : i ∈ t), U i →
            ∃ K, (∀ (i : ι), IsCompact (K i)) ∧ (∀ (i : ι), K i ⊆ U i) ∧ s = ⋃ (i : ι) (_ : i ∈ t), K i
s : Set α
hs : IsCompact s
U : ι → Set α
hsC : s ⊆ U x ∪ ⋃ (x : ι) (_ : x ∈ t), U x
hU : IsOpen (U x) ∧ ∀ (x : ι), x ∈ t → IsOpen (U x)
hU' : ∀ (i : ι), i ∈ t → IsOpen (U i)
K₁ K₂ : Set α
h1K₁ : IsCompact K₁
h1K₂ : IsCompact K₂
h2K₁ : K₁ ⊆ U x
h2K₂ : K₂ ⊆ ⋃ (i : ι) (_ : i ∈ fun i => i ∈ t.val), U i
hK : s = K₁ ∪ K₂
K : ι → Set α
h1K : ∀ (i : ι), IsCompact (K i)
h2K : ∀ (i : ι), K i ⊆ U i
h3K : K₂ = ⋃ (i : ι) (_ : i ∈ t), K i
⊢ ∀ (i : ι), IsCompact (update K x K₁ i)
[PROOFSTEP]
intro i
[GOAL]
case insert.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_1
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
s✝ : Set α
hs✝ : IsCompact s✝
ι : Type u_2
t✝ : Finset ι
U✝ : ι → Set α
hU✝ : ∀ (i : ι), i ∈ t✝ → IsOpen (U✝ i)
hsC✝ : s✝ ⊆ ⋃ (i : ι) (_ : i ∈ t✝), U✝ i
x : ι
t : Finset ι
hx : ¬x ∈ t
ih :
  ∀ {s : Set α},
    IsCompact s →
      ∀ (U : ι → Set α),
        (∀ (i : ι), i ∈ t → IsOpen (U i)) →
          s ⊆ ⋃ (i : ι) (_ : i ∈ t), U i →
            ∃ K, (∀ (i : ι), IsCompact (K i)) ∧ (∀ (i : ι), K i ⊆ U i) ∧ s = ⋃ (i : ι) (_ : i ∈ t), K i
s : Set α
hs : IsCompact s
U : ι → Set α
hsC : s ⊆ U x ∪ ⋃ (x : ι) (_ : x ∈ t), U x
hU : IsOpen (U x) ∧ ∀ (x : ι), x ∈ t → IsOpen (U x)
hU' : ∀ (i : ι), i ∈ t → IsOpen (U i)
K₁ K₂ : Set α
h1K₁ : IsCompact K₁
h1K₂ : IsCompact K₂
h2K₁ : K₁ ⊆ U x
h2K₂ : K₂ ⊆ ⋃ (i : ι) (_ : i ∈ fun i => i ∈ t.val), U i
hK : s = K₁ ∪ K₂
K : ι → Set α
h1K : ∀ (i : ι), IsCompact (K i)
h2K : ∀ (i : ι), K i ⊆ U i
h3K : K₂ = ⋃ (i : ι) (_ : i ∈ t), K i
i : ι
⊢ IsCompact (update K x K₁ i)
[PROOFSTEP]
rcases eq_or_ne i x with rfl | hi
[GOAL]
case insert.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_1.inl
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
s✝ : Set α
hs✝ : IsCompact s✝
ι : Type u_2
t✝ : Finset ι
U✝ : ι → Set α
hU✝ : ∀ (i : ι), i ∈ t✝ → IsOpen (U✝ i)
hsC✝ : s✝ ⊆ ⋃ (i : ι) (_ : i ∈ t✝), U✝ i
t : Finset ι
ih :
  ∀ {s : Set α},
    IsCompact s →
      ∀ (U : ι → Set α),
        (∀ (i : ι), i ∈ t → IsOpen (U i)) →
          s ⊆ ⋃ (i : ι) (_ : i ∈ t), U i →
            ∃ K, (∀ (i : ι), IsCompact (K i)) ∧ (∀ (i : ι), K i ⊆ U i) ∧ s = ⋃ (i : ι) (_ : i ∈ t), K i
s : Set α
hs : IsCompact s
U : ι → Set α
hU' : ∀ (i : ι), i ∈ t → IsOpen (U i)
K₁ K₂ : Set α
h1K₁ : IsCompact K₁
h1K₂ : IsCompact K₂
h2K₂ : K₂ ⊆ ⋃ (i : ι) (_ : i ∈ fun i => i ∈ t.val), U i
hK : s = K₁ ∪ K₂
K : ι → Set α
h1K : ∀ (i : ι), IsCompact (K i)
h2K : ∀ (i : ι), K i ⊆ U i
h3K : K₂ = ⋃ (i : ι) (_ : i ∈ t), K i
i : ι
hx : ¬i ∈ t
hsC : s ⊆ U i ∪ ⋃ (x : ι) (_ : x ∈ t), U x
hU : IsOpen (U i) ∧ ∀ (x : ι), x ∈ t → IsOpen (U x)
h2K₁ : K₁ ⊆ U i
⊢ IsCompact (update K i K₁ i)
[PROOFSTEP]
simp only [update_same, h1K₁]
[GOAL]
case insert.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_1.inr
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
s✝ : Set α
hs✝ : IsCompact s✝
ι : Type u_2
t✝ : Finset ι
U✝ : ι → Set α
hU✝ : ∀ (i : ι), i ∈ t✝ → IsOpen (U✝ i)
hsC✝ : s✝ ⊆ ⋃ (i : ι) (_ : i ∈ t✝), U✝ i
x : ι
t : Finset ι
hx : ¬x ∈ t
ih :
  ∀ {s : Set α},
    IsCompact s →
      ∀ (U : ι → Set α),
        (∀ (i : ι), i ∈ t → IsOpen (U i)) →
          s ⊆ ⋃ (i : ι) (_ : i ∈ t), U i →
            ∃ K, (∀ (i : ι), IsCompact (K i)) ∧ (∀ (i : ι), K i ⊆ U i) ∧ s = ⋃ (i : ι) (_ : i ∈ t), K i
s : Set α
hs : IsCompact s
U : ι → Set α
hsC : s ⊆ U x ∪ ⋃ (x : ι) (_ : x ∈ t), U x
hU : IsOpen (U x) ∧ ∀ (x : ι), x ∈ t → IsOpen (U x)
hU' : ∀ (i : ι), i ∈ t → IsOpen (U i)
K₁ K₂ : Set α
h1K₁ : IsCompact K₁
h1K₂ : IsCompact K₂
h2K₁ : K₁ ⊆ U x
h2K₂ : K₂ ⊆ ⋃ (i : ι) (_ : i ∈ fun i => i ∈ t.val), U i
hK : s = K₁ ∪ K₂
K : ι → Set α
h1K : ∀ (i : ι), IsCompact (K i)
h2K : ∀ (i : ι), K i ⊆ U i
h3K : K₂ = ⋃ (i : ι) (_ : i ∈ t), K i
i : ι
hi : i ≠ x
⊢ IsCompact (update K x K₁ i)
[PROOFSTEP]
simp only [update_noteq hi, h1K]
[GOAL]
case insert.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_2
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
s✝ : Set α
hs✝ : IsCompact s✝
ι : Type u_2
t✝ : Finset ι
U✝ : ι → Set α
hU✝ : ∀ (i : ι), i ∈ t✝ → IsOpen (U✝ i)
hsC✝ : s✝ ⊆ ⋃ (i : ι) (_ : i ∈ t✝), U✝ i
x : ι
t : Finset ι
hx : ¬x ∈ t
ih :
  ∀ {s : Set α},
    IsCompact s →
      ∀ (U : ι → Set α),
        (∀ (i : ι), i ∈ t → IsOpen (U i)) →
          s ⊆ ⋃ (i : ι) (_ : i ∈ t), U i →
            ∃ K, (∀ (i : ι), IsCompact (K i)) ∧ (∀ (i : ι), K i ⊆ U i) ∧ s = ⋃ (i : ι) (_ : i ∈ t), K i
s : Set α
hs : IsCompact s
U : ι → Set α
hsC : s ⊆ U x ∪ ⋃ (x : ι) (_ : x ∈ t), U x
hU : IsOpen (U x) ∧ ∀ (x : ι), x ∈ t → IsOpen (U x)
hU' : ∀ (i : ι), i ∈ t → IsOpen (U i)
K₁ K₂ : Set α
h1K₁ : IsCompact K₁
h1K₂ : IsCompact K₂
h2K₁ : K₁ ⊆ U x
h2K₂ : K₂ ⊆ ⋃ (i : ι) (_ : i ∈ fun i => i ∈ t.val), U i
hK : s = K₁ ∪ K₂
K : ι → Set α
h1K : ∀ (i : ι), IsCompact (K i)
h2K : ∀ (i : ι), K i ⊆ U i
h3K : K₂ = ⋃ (i : ι) (_ : i ∈ t), K i
⊢ ∀ (i : ι), update K x K₁ i ⊆ U i
[PROOFSTEP]
intro i
[GOAL]
case insert.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_2
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
s✝ : Set α
hs✝ : IsCompact s✝
ι : Type u_2
t✝ : Finset ι
U✝ : ι → Set α
hU✝ : ∀ (i : ι), i ∈ t✝ → IsOpen (U✝ i)
hsC✝ : s✝ ⊆ ⋃ (i : ι) (_ : i ∈ t✝), U✝ i
x : ι
t : Finset ι
hx : ¬x ∈ t
ih :
  ∀ {s : Set α},
    IsCompact s →
      ∀ (U : ι → Set α),
        (∀ (i : ι), i ∈ t → IsOpen (U i)) →
          s ⊆ ⋃ (i : ι) (_ : i ∈ t), U i →
            ∃ K, (∀ (i : ι), IsCompact (K i)) ∧ (∀ (i : ι), K i ⊆ U i) ∧ s = ⋃ (i : ι) (_ : i ∈ t), K i
s : Set α
hs : IsCompact s
U : ι → Set α
hsC : s ⊆ U x ∪ ⋃ (x : ι) (_ : x ∈ t), U x
hU : IsOpen (U x) ∧ ∀ (x : ι), x ∈ t → IsOpen (U x)
hU' : ∀ (i : ι), i ∈ t → IsOpen (U i)
K₁ K₂ : Set α
h1K₁ : IsCompact K₁
h1K₂ : IsCompact K₂
h2K₁ : K₁ ⊆ U x
h2K₂ : K₂ ⊆ ⋃ (i : ι) (_ : i ∈ fun i => i ∈ t.val), U i
hK : s = K₁ ∪ K₂
K : ι → Set α
h1K : ∀ (i : ι), IsCompact (K i)
h2K : ∀ (i : ι), K i ⊆ U i
h3K : K₂ = ⋃ (i : ι) (_ : i ∈ t), K i
i : ι
⊢ update K x K₁ i ⊆ U i
[PROOFSTEP]
rcases eq_or_ne i x with rfl | hi
[GOAL]
case insert.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_2.inl
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
s✝ : Set α
hs✝ : IsCompact s✝
ι : Type u_2
t✝ : Finset ι
U✝ : ι → Set α
hU✝ : ∀ (i : ι), i ∈ t✝ → IsOpen (U✝ i)
hsC✝ : s✝ ⊆ ⋃ (i : ι) (_ : i ∈ t✝), U✝ i
t : Finset ι
ih :
  ∀ {s : Set α},
    IsCompact s →
      ∀ (U : ι → Set α),
        (∀ (i : ι), i ∈ t → IsOpen (U i)) →
          s ⊆ ⋃ (i : ι) (_ : i ∈ t), U i →
            ∃ K, (∀ (i : ι), IsCompact (K i)) ∧ (∀ (i : ι), K i ⊆ U i) ∧ s = ⋃ (i : ι) (_ : i ∈ t), K i
s : Set α
hs : IsCompact s
U : ι → Set α
hU' : ∀ (i : ι), i ∈ t → IsOpen (U i)
K₁ K₂ : Set α
h1K₁ : IsCompact K₁
h1K₂ : IsCompact K₂
h2K₂ : K₂ ⊆ ⋃ (i : ι) (_ : i ∈ fun i => i ∈ t.val), U i
hK : s = K₁ ∪ K₂
K : ι → Set α
h1K : ∀ (i : ι), IsCompact (K i)
h2K : ∀ (i : ι), K i ⊆ U i
h3K : K₂ = ⋃ (i : ι) (_ : i ∈ t), K i
i : ι
hx : ¬i ∈ t
hsC : s ⊆ U i ∪ ⋃ (x : ι) (_ : x ∈ t), U x
hU : IsOpen (U i) ∧ ∀ (x : ι), x ∈ t → IsOpen (U x)
h2K₁ : K₁ ⊆ U i
⊢ update K i K₁ i ⊆ U i
[PROOFSTEP]
simp only [update_same, h2K₁]
[GOAL]
case insert.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_2.inr
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
s✝ : Set α
hs✝ : IsCompact s✝
ι : Type u_2
t✝ : Finset ι
U✝ : ι → Set α
hU✝ : ∀ (i : ι), i ∈ t✝ → IsOpen (U✝ i)
hsC✝ : s✝ ⊆ ⋃ (i : ι) (_ : i ∈ t✝), U✝ i
x : ι
t : Finset ι
hx : ¬x ∈ t
ih :
  ∀ {s : Set α},
    IsCompact s →
      ∀ (U : ι → Set α),
        (∀ (i : ι), i ∈ t → IsOpen (U i)) →
          s ⊆ ⋃ (i : ι) (_ : i ∈ t), U i →
            ∃ K, (∀ (i : ι), IsCompact (K i)) ∧ (∀ (i : ι), K i ⊆ U i) ∧ s = ⋃ (i : ι) (_ : i ∈ t), K i
s : Set α
hs : IsCompact s
U : ι → Set α
hsC : s ⊆ U x ∪ ⋃ (x : ι) (_ : x ∈ t), U x
hU : IsOpen (U x) ∧ ∀ (x : ι), x ∈ t → IsOpen (U x)
hU' : ∀ (i : ι), i ∈ t → IsOpen (U i)
K₁ K₂ : Set α
h1K₁ : IsCompact K₁
h1K₂ : IsCompact K₂
h2K₁ : K₁ ⊆ U x
h2K₂ : K₂ ⊆ ⋃ (i : ι) (_ : i ∈ fun i => i ∈ t.val), U i
hK : s = K₁ ∪ K₂
K : ι → Set α
h1K : ∀ (i : ι), IsCompact (K i)
h2K : ∀ (i : ι), K i ⊆ U i
h3K : K₂ = ⋃ (i : ι) (_ : i ∈ t), K i
i : ι
hi : i ≠ x
⊢ update K x K₁ i ⊆ U i
[PROOFSTEP]
simp only [update_noteq hi, h2K]
[GOAL]
case insert.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_3
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
s✝ : Set α
hs✝ : IsCompact s✝
ι : Type u_2
t✝ : Finset ι
U✝ : ι → Set α
hU✝ : ∀ (i : ι), i ∈ t✝ → IsOpen (U✝ i)
hsC✝ : s✝ ⊆ ⋃ (i : ι) (_ : i ∈ t✝), U✝ i
x : ι
t : Finset ι
hx : ¬x ∈ t
ih :
  ∀ {s : Set α},
    IsCompact s →
      ∀ (U : ι → Set α),
        (∀ (i : ι), i ∈ t → IsOpen (U i)) →
          s ⊆ ⋃ (i : ι) (_ : i ∈ t), U i →
            ∃ K, (∀ (i : ι), IsCompact (K i)) ∧ (∀ (i : ι), K i ⊆ U i) ∧ s = ⋃ (i : ι) (_ : i ∈ t), K i
s : Set α
hs : IsCompact s
U : ι → Set α
hsC : s ⊆ U x ∪ ⋃ (x : ι) (_ : x ∈ t), U x
hU : IsOpen (U x) ∧ ∀ (x : ι), x ∈ t → IsOpen (U x)
hU' : ∀ (i : ι), i ∈ t → IsOpen (U i)
K₁ K₂ : Set α
h1K₁ : IsCompact K₁
h1K₂ : IsCompact K₂
h2K₁ : K₁ ⊆ U x
h2K₂ : K₂ ⊆ ⋃ (i : ι) (_ : i ∈ fun i => i ∈ t.val), U i
hK : s = K₁ ∪ K₂
K : ι → Set α
h1K : ∀ (i : ι), IsCompact (K i)
h2K : ∀ (i : ι), K i ⊆ U i
h3K : K₂ = ⋃ (i : ι) (_ : i ∈ t), K i
⊢ s = ⋃ (i : ι) (_ : i ∈ insert x t), update K x K₁ i
[PROOFSTEP]
simp only [set_biUnion_insert_update _ hx, hK, h3K]
[GOAL]
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
γ : Type u_1
inst✝³ : TopologicalSpace β
inst✝² : TopologicalSpace γ
inst✝¹ : LocallyCompactSpace α
inst✝ : T2Space α
x : α
⊢ ∃ U, IsOpen U ∧ x ∈ U ∧ IsCompact (closure U)
[PROOFSTEP]
rcases exists_compact_mem_nhds x with ⟨K, hKc, hxK⟩
[GOAL]
case intro.intro
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
γ : Type u_1
inst✝³ : TopologicalSpace β
inst✝² : TopologicalSpace γ
inst✝¹ : LocallyCompactSpace α
inst✝ : T2Space α
x : α
K : Set α
hKc : IsCompact K
hxK : K ∈ 𝓝 x
⊢ ∃ U, IsOpen U ∧ x ∈ U ∧ IsCompact (closure U)
[PROOFSTEP]
rcases mem_nhds_iff.1 hxK with ⟨t, h1t, h2t, h3t⟩
[GOAL]
case intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
γ : Type u_1
inst✝³ : TopologicalSpace β
inst✝² : TopologicalSpace γ
inst✝¹ : LocallyCompactSpace α
inst✝ : T2Space α
x : α
K : Set α
hKc : IsCompact K
hxK : K ∈ 𝓝 x
t : Set α
h1t : t ⊆ K
h2t : IsOpen t
h3t : x ∈ t
⊢ ∃ U, IsOpen U ∧ x ∈ U ∧ IsCompact (closure U)
[PROOFSTEP]
exact ⟨t, h2t, h3t, isCompact_closure_of_subset_compact hKc h1t⟩
[GOAL]
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
γ : Type u_1
inst✝³ : TopologicalSpace β
inst✝² : TopologicalSpace γ
inst✝¹ : LocallyCompactSpace α
inst✝ : T2Space α
K : Set α
hK : IsCompact K
⊢ ∃ V, IsOpen V ∧ K ⊆ V ∧ IsCompact (closure V)
[PROOFSTEP]
rcases exists_compact_superset hK with ⟨K', hK', hKK'⟩
[GOAL]
case intro.intro
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
γ : Type u_1
inst✝³ : TopologicalSpace β
inst✝² : TopologicalSpace γ
inst✝¹ : LocallyCompactSpace α
inst✝ : T2Space α
K : Set α
hK : IsCompact K
K' : Set α
hK' : IsCompact K'
hKK' : K ⊆ interior K'
⊢ ∃ V, IsOpen V ∧ K ⊆ V ∧ IsCompact (closure V)
[PROOFSTEP]
refine' ⟨interior K', isOpen_interior, hKK', isCompact_closure_of_subset_compact hK' interior_subset⟩
[GOAL]
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
γ : Type u_1
inst✝³ : TopologicalSpace β
inst✝² : TopologicalSpace γ
inst✝¹ : LocallyCompactSpace α
inst✝ : T2Space α
K U : Set α
hK : IsCompact K
hU : IsOpen U
hKU : K ⊆ U
⊢ ∃ V, IsOpen V ∧ K ⊆ V ∧ closure V ⊆ U ∧ IsCompact (closure V)
[PROOFSTEP]
rcases exists_compact_between hK hU hKU with ⟨V, hV, hKV, hVU⟩
[GOAL]
case intro.intro.intro
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
γ : Type u_1
inst✝³ : TopologicalSpace β
inst✝² : TopologicalSpace γ
inst✝¹ : LocallyCompactSpace α
inst✝ : T2Space α
K U : Set α
hK : IsCompact K
hU : IsOpen U
hKU : K ⊆ U
V : Set α
hV : IsCompact V
hKV : K ⊆ interior V
hVU : V ⊆ U
⊢ ∃ V, IsOpen V ∧ K ⊆ V ∧ closure V ⊆ U ∧ IsCompact (closure V)
[PROOFSTEP]
exact
  ⟨interior V, isOpen_interior, hKV, (closure_minimal interior_subset hV.isClosed).trans hVU,
    isCompact_closure_of_subset_compact hV interior_subset⟩
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
S : Set α
⊢ IsPreirreducible S ↔ Set.Subsingleton S
[PROOFSTEP]
refine' ⟨fun h x hx y hy => _, Set.Subsingleton.isPreirreducible⟩
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
S : Set α
h : IsPreirreducible S
x : α
hx : x ∈ S
y : α
hy : y ∈ S
⊢ x = y
[PROOFSTEP]
by_contra e
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
S : Set α
h : IsPreirreducible S
x : α
hx : x ∈ S
y : α
hy : y ∈ S
e : ¬x = y
⊢ False
[PROOFSTEP]
obtain ⟨U, V, hU, hV, hxU, hyV, h'⟩ := t2_separation e
[GOAL]
case intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
S : Set α
h : IsPreirreducible S
x : α
hx : x ∈ S
y : α
hy : y ∈ S
e : ¬x = y
U V : Set α
hU : IsOpen U
hV : IsOpen V
hxU : x ∈ U
hyV : y ∈ V
h' : Disjoint U V
⊢ False
[PROOFSTEP]
exact ((h U V hU hV ⟨x, hx, hxU⟩ ⟨y, hy, hyV⟩).mono <| inter_subset_right _ _).not_disjoint h'
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
γ : Type u_1
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : T2Space α
S : Set α
⊢ IsIrreducible S ↔ ∃ x, S = {x}
[PROOFSTEP]
rw [IsIrreducible, isPreirreducible_iff_subsingleton, exists_eq_singleton_iff_nonempty_subsingleton]
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
X : Type u
inst✝ : TopologicalSpace X
⊢ List.TFAE
    [RegularSpace X, ∀ (s : Set X) (a : X), ¬a ∈ closure s → Disjoint (𝓝ˢ s) (𝓝 a),
      ∀ (a : X) (s : Set X), Disjoint (𝓝ˢ s) (𝓝 a) ↔ ¬a ∈ closure s,
      ∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s, ∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a,
      ∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a]
[PROOFSTEP]
tfae_have 1 ↔ 5
[GOAL]
case tfae_1_iff_5
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
X : Type u
inst✝ : TopologicalSpace X
⊢ RegularSpace X ↔ ∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a
[PROOFSTEP]
rw [regularSpace_iff, (@compl_surjective (Set X) _).forall, forall_swap]
[GOAL]
case tfae_1_iff_5
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
X : Type u
inst✝ : TopologicalSpace X
⊢ (∀ (y : X) (x : Set X), IsClosed xᶜ → ¬y ∈ xᶜ → Disjoint (𝓝ˢ xᶜ) (𝓝 y)) ↔ ∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a
[PROOFSTEP]
simp only [isClosed_compl_iff, mem_compl_iff, Classical.not_not, @and_comm (_ ∈ _),
  (nhds_basis_opens _).lift'_closure.le_basis_iff (nhds_basis_opens _), and_imp,
  (nhds_basis_opens _).disjoint_iff_right, exists_prop, ← subset_interior_iff_mem_nhdsSet, interior_compl,
  compl_subset_compl]
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a
⊢ List.TFAE
    [RegularSpace X, ∀ (s : Set X) (a : X), ¬a ∈ closure s → Disjoint (𝓝ˢ s) (𝓝 a),
      ∀ (a : X) (s : Set X), Disjoint (𝓝ˢ s) (𝓝 a) ↔ ¬a ∈ closure s,
      ∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s, ∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a,
      ∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a]
[PROOFSTEP]
tfae_have 5 → 6
[GOAL]
case tfae_5_to_6
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a
⊢ (∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a) → ∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a
[PROOFSTEP]
exact fun h a => (h a).antisymm (𝓝 _).le_lift'_closure
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a
tfae_5_to_6 : (∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a) → ∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a
⊢ List.TFAE
    [RegularSpace X, ∀ (s : Set X) (a : X), ¬a ∈ closure s → Disjoint (𝓝ˢ s) (𝓝 a),
      ∀ (a : X) (s : Set X), Disjoint (𝓝ˢ s) (𝓝 a) ↔ ¬a ∈ closure s,
      ∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s, ∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a,
      ∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a]
[PROOFSTEP]
tfae_have 6 → 4
[GOAL]
case tfae_6_to_4
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a
tfae_5_to_6 : (∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a) → ∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a
⊢ (∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a) → ∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s
[PROOFSTEP]
intro H a s hs
[GOAL]
case tfae_6_to_4
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a
tfae_5_to_6 : (∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a) → ∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a
H : ∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a
a : X
s : Set X
hs : s ∈ 𝓝 a
⊢ ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s
[PROOFSTEP]
rw [← H] at hs 
[GOAL]
case tfae_6_to_4
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a
tfae_5_to_6 : (∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a) → ∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a
H : ∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a
a : X
s : Set X
hs : s ∈ Filter.lift' (𝓝 a) closure
⊢ ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s
[PROOFSTEP]
rcases(𝓝 a).basis_sets.lift'_closure.mem_iff.mp hs with ⟨U, hU, hUs⟩
[GOAL]
case tfae_6_to_4.intro.intro
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a
tfae_5_to_6 : (∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a) → ∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a
H : ∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a
a : X
s : Set X
hs : s ∈ Filter.lift' (𝓝 a) closure
U : Set X
hU : U ∈ 𝓝 a
hUs : closure (id U) ⊆ s
⊢ ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s
[PROOFSTEP]
exact ⟨closure U, mem_of_superset hU subset_closure, isClosed_closure, hUs⟩
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a
tfae_5_to_6 : (∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a) → ∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a
tfae_6_to_4 :
  (∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a) → ∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s
⊢ List.TFAE
    [RegularSpace X, ∀ (s : Set X) (a : X), ¬a ∈ closure s → Disjoint (𝓝ˢ s) (𝓝 a),
      ∀ (a : X) (s : Set X), Disjoint (𝓝ˢ s) (𝓝 a) ↔ ¬a ∈ closure s,
      ∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s, ∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a,
      ∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a]
[PROOFSTEP]
tfae_have 4 → 2
[GOAL]
case tfae_4_to_2
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a
tfae_5_to_6 : (∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a) → ∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a
tfae_6_to_4 :
  (∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a) → ∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s
⊢ (∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s) →
    ∀ (s : Set X) (a : X), ¬a ∈ closure s → Disjoint (𝓝ˢ s) (𝓝 a)
[PROOFSTEP]
intro H s a ha
[GOAL]
case tfae_4_to_2
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a
tfae_5_to_6 : (∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a) → ∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a
tfae_6_to_4 :
  (∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a) → ∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s
H : ∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s
s : Set X
a : X
ha : ¬a ∈ closure s
⊢ Disjoint (𝓝ˢ s) (𝓝 a)
[PROOFSTEP]
have ha' : sᶜ ∈ 𝓝 a := by rwa [← mem_interior_iff_mem_nhds, interior_compl]
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a
tfae_5_to_6 : (∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a) → ∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a
tfae_6_to_4 :
  (∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a) → ∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s
H : ∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s
s : Set X
a : X
ha : ¬a ∈ closure s
⊢ sᶜ ∈ 𝓝 a
[PROOFSTEP]
rwa [← mem_interior_iff_mem_nhds, interior_compl]
[GOAL]
case tfae_4_to_2
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a
tfae_5_to_6 : (∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a) → ∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a
tfae_6_to_4 :
  (∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a) → ∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s
H : ∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s
s : Set X
a : X
ha : ¬a ∈ closure s
ha' : sᶜ ∈ 𝓝 a
⊢ Disjoint (𝓝ˢ s) (𝓝 a)
[PROOFSTEP]
rcases H _ _ ha' with ⟨U, hU, hUc, hUs⟩
[GOAL]
case tfae_4_to_2.intro.intro.intro
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a
tfae_5_to_6 : (∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a) → ∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a
tfae_6_to_4 :
  (∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a) → ∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s
H : ∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s
s : Set X
a : X
ha : ¬a ∈ closure s
ha' : sᶜ ∈ 𝓝 a
U : Set X
hU : U ∈ 𝓝 a
hUc : IsClosed U
hUs : U ⊆ sᶜ
⊢ Disjoint (𝓝ˢ s) (𝓝 a)
[PROOFSTEP]
refine' disjoint_of_disjoint_of_mem disjoint_compl_left _ hU
[GOAL]
case tfae_4_to_2.intro.intro.intro
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a
tfae_5_to_6 : (∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a) → ∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a
tfae_6_to_4 :
  (∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a) → ∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s
H : ∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s
s : Set X
a : X
ha : ¬a ∈ closure s
ha' : sᶜ ∈ 𝓝 a
U : Set X
hU : U ∈ 𝓝 a
hUc : IsClosed U
hUs : U ⊆ sᶜ
⊢ Uᶜ ∈ 𝓝ˢ s
[PROOFSTEP]
rwa [← subset_interior_iff_mem_nhdsSet, hUc.isOpen_compl.interior_eq, subset_compl_comm]
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a
tfae_5_to_6 : (∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a) → ∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a
tfae_6_to_4 :
  (∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a) → ∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s
tfae_4_to_2 :
  (∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s) →
    ∀ (s : Set X) (a : X), ¬a ∈ closure s → Disjoint (𝓝ˢ s) (𝓝 a)
⊢ List.TFAE
    [RegularSpace X, ∀ (s : Set X) (a : X), ¬a ∈ closure s → Disjoint (𝓝ˢ s) (𝓝 a),
      ∀ (a : X) (s : Set X), Disjoint (𝓝ˢ s) (𝓝 a) ↔ ¬a ∈ closure s,
      ∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s, ∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a,
      ∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a]
[PROOFSTEP]
tfae_have 2 → 3
[GOAL]
case tfae_2_to_3
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a
tfae_5_to_6 : (∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a) → ∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a
tfae_6_to_4 :
  (∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a) → ∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s
tfae_4_to_2 :
  (∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s) →
    ∀ (s : Set X) (a : X), ¬a ∈ closure s → Disjoint (𝓝ˢ s) (𝓝 a)
⊢ (∀ (s : Set X) (a : X), ¬a ∈ closure s → Disjoint (𝓝ˢ s) (𝓝 a)) →
    ∀ (a : X) (s : Set X), Disjoint (𝓝ˢ s) (𝓝 a) ↔ ¬a ∈ closure s
[PROOFSTEP]
refine' fun H a s => ⟨fun hd has => mem_closure_iff_nhds_neBot.mp has _, H s a⟩
[GOAL]
case tfae_2_to_3
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a
tfae_5_to_6 : (∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a) → ∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a
tfae_6_to_4 :
  (∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a) → ∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s
tfae_4_to_2 :
  (∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s) →
    ∀ (s : Set X) (a : X), ¬a ∈ closure s → Disjoint (𝓝ˢ s) (𝓝 a)
H : ∀ (s : Set X) (a : X), ¬a ∈ closure s → Disjoint (𝓝ˢ s) (𝓝 a)
a : X
s : Set X
hd : Disjoint (𝓝ˢ s) (𝓝 a)
has : a ∈ closure s
⊢ 𝓝 a ⊓ 𝓟 s = ⊥
[PROOFSTEP]
exact (hd.symm.mono_right <| @principal_le_nhdsSet _ _ s).eq_bot
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a
tfae_5_to_6 : (∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a) → ∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a
tfae_6_to_4 :
  (∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a) → ∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s
tfae_4_to_2 :
  (∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s) →
    ∀ (s : Set X) (a : X), ¬a ∈ closure s → Disjoint (𝓝ˢ s) (𝓝 a)
tfae_2_to_3 :
  (∀ (s : Set X) (a : X), ¬a ∈ closure s → Disjoint (𝓝ˢ s) (𝓝 a)) →
    ∀ (a : X) (s : Set X), Disjoint (𝓝ˢ s) (𝓝 a) ↔ ¬a ∈ closure s
⊢ List.TFAE
    [RegularSpace X, ∀ (s : Set X) (a : X), ¬a ∈ closure s → Disjoint (𝓝ˢ s) (𝓝 a),
      ∀ (a : X) (s : Set X), Disjoint (𝓝ˢ s) (𝓝 a) ↔ ¬a ∈ closure s,
      ∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s, ∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a,
      ∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a]
[PROOFSTEP]
tfae_have 3 → 1
[GOAL]
case tfae_3_to_1
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a
tfae_5_to_6 : (∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a) → ∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a
tfae_6_to_4 :
  (∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a) → ∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s
tfae_4_to_2 :
  (∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s) →
    ∀ (s : Set X) (a : X), ¬a ∈ closure s → Disjoint (𝓝ˢ s) (𝓝 a)
tfae_2_to_3 :
  (∀ (s : Set X) (a : X), ¬a ∈ closure s → Disjoint (𝓝ˢ s) (𝓝 a)) →
    ∀ (a : X) (s : Set X), Disjoint (𝓝ˢ s) (𝓝 a) ↔ ¬a ∈ closure s
⊢ (∀ (a : X) (s : Set X), Disjoint (𝓝ˢ s) (𝓝 a) ↔ ¬a ∈ closure s) → RegularSpace X
[PROOFSTEP]
exact fun H => ⟨fun hs ha => (H _ _).mpr <| hs.closure_eq.symm ▸ ha⟩
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a
tfae_5_to_6 : (∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a) → ∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a
tfae_6_to_4 :
  (∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a) → ∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s
tfae_4_to_2 :
  (∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s) →
    ∀ (s : Set X) (a : X), ¬a ∈ closure s → Disjoint (𝓝ˢ s) (𝓝 a)
tfae_2_to_3 :
  (∀ (s : Set X) (a : X), ¬a ∈ closure s → Disjoint (𝓝ˢ s) (𝓝 a)) →
    ∀ (a : X) (s : Set X), Disjoint (𝓝ˢ s) (𝓝 a) ↔ ¬a ∈ closure s
tfae_3_to_1 : (∀ (a : X) (s : Set X), Disjoint (𝓝ˢ s) (𝓝 a) ↔ ¬a ∈ closure s) → RegularSpace X
⊢ List.TFAE
    [RegularSpace X, ∀ (s : Set X) (a : X), ¬a ∈ closure s → Disjoint (𝓝ˢ s) (𝓝 a),
      ∀ (a : X) (s : Set X), Disjoint (𝓝ˢ s) (𝓝 a) ↔ ¬a ∈ closure s,
      ∀ (a : X) (s : Set X), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s, ∀ (a : X), Filter.lift' (𝓝 a) closure ≤ 𝓝 a,
      ∀ (a : X), Filter.lift' (𝓝 a) closure = 𝓝 a]
[PROOFSTEP]
tfae_finish
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : RegularSpace α
a : α
s : Set α
⊢ Disjoint (𝓝ˢ s) (𝓝 a) ↔ ¬a ∈ closure s
[PROOFSTEP]
have h := (regularSpace_TFAE α).out 0 2
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : RegularSpace α
a : α
s : Set α
h : RegularSpace α ↔ ∀ (a : α) (s : Set α), Disjoint (𝓝ˢ s) (𝓝 a) ↔ ¬a ∈ closure s
⊢ Disjoint (𝓝ˢ s) (𝓝 a) ↔ ¬a ∈ closure s
[PROOFSTEP]
exact h.mp ‹_› _ _
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : RegularSpace α
a✝ : α
s✝ : Set α
a : α
s : Set α
h : s ∈ 𝓝 a
⊢ ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s
[PROOFSTEP]
have h' := (regularSpace_TFAE α).out 0 3
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : RegularSpace α
a✝ : α
s✝ : Set α
a : α
s : Set α
h : s ∈ 𝓝 a
h' : RegularSpace α ↔ ∀ (a : α) (s : Set α), s ∈ 𝓝 a → ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s
⊢ ∃ t, t ∈ 𝓝 a ∧ IsClosed t ∧ t ⊆ s
[PROOFSTEP]
exact h'.mp ‹_› _ _ h
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : RegularSpace α
a✝ : α
s : Set α
B : Set (Set α)
hB : IsTopologicalBasis B
a : α
⊢ HasBasis (𝓝 a) (fun s => a ∈ s ∧ s ∈ B) closure
[PROOFSTEP]
simpa only [and_comm] using hB.nhds_hasBasis.nhds_closure
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : RegularSpace α
a✝ : α
s✝ : Set α
B : Set (Set α)
hB : IsTopologicalBasis B
a : α
s : Set α
h : s ∈ 𝓝 a
⊢ ∃ t, t ∈ B ∧ a ∈ t ∧ closure t ⊆ s
[PROOFSTEP]
simpa only [exists_prop, and_assoc] using hB.nhds_hasBasis.nhds_closure.mem_iff.mp h
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : RegularSpace α
a✝ : α
s : Set α
a b : α
⊢ Disjoint (𝓝 a) (𝓝 b) ↔ ¬a ⤳ b
[PROOFSTEP]
rw [← nhdsSet_singleton, disjoint_nhdsSet_nhds, specializes_iff_mem_closure]
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : RegularSpace α
a✝ : α
s : Set α
a b : α
⊢ a ⤳ b ↔ b ⤳ a
[PROOFSTEP]
simp only [← (disjoint_nhds_nhds_iff_not_specializes (α := α)).not_left, disjoint_comm]
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : RegularSpace α
a : α
s : Set α
⊢ IsClosed {p | p.fst ⤳ p.snd}
[PROOFSTEP]
simp only [← isOpen_compl_iff, compl_setOf, ← disjoint_nhds_nhds_iff_not_specializes, isOpen_setOf_disjoint_nhds_nhds]
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : RegularSpace α
a : α
s : Set α
⊢ IsClosed {p | Inseparable p.fst p.snd}
[PROOFSTEP]
simp only [← specializes_iff_inseparable, isClosed_setOf_specializes]
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : RegularSpace α
a : α
s : Set α
inst✝ : TopologicalSpace β
f : β → α
hf : Inducing f
b : β
⊢ HasBasis (𝓝 b) (?m.165807 hf b) (?m.165808 hf b)
[PROOFSTEP]
rw [hf.nhds_eq_comap b]
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : RegularSpace α
a : α
s : Set α
inst✝ : TopologicalSpace β
f : β → α
hf : Inducing f
b : β
⊢ HasBasis (comap f (𝓝 (f b))) (?m.165807 hf b) (?m.165808 hf b)
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : RegularSpace α
a : α
s : Set α
⊢ [inst : TopologicalSpace β] → {f : β → α} → Inducing f → β → Sort ?u.165737
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : RegularSpace α
a : α
s : Set α
⊢ [inst : TopologicalSpace β] → {f : β → α} → (hf : Inducing f) → (a : β) → ?m.165806 hf a → Prop
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : RegularSpace α
a : α
s : Set α
⊢ [inst : TopologicalSpace β] → {f : β → α} → (hf : Inducing f) → (a : β) → ?m.165806 hf a → Set β
[PROOFSTEP]
exact (closed_nhds_basis _).comap _
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : RegularSpace α
a : α
s✝ : Set α
inst✝ : TopologicalSpace β
f : β → α
hf : Inducing f
b : β
s : Set α
hs : s ∈ 𝓝 (f b) ∧ IsClosed s
⊢ IsClosed (f ⁻¹' id s)
[PROOFSTEP]
exact hs.2.preimage hf.continuous
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : RegularSpace α
a : α
s : Set α
X : Type u_1
T : Set (TopologicalSpace X)
h : ∀ (t : TopologicalSpace X), t ∈ T → RegularSpace X
⊢ RegularSpace X
[PROOFSTEP]
let _ := sInf T
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : RegularSpace α
a : α
s : Set α
X : Type u_1
T : Set (TopologicalSpace X)
h : ∀ (t : TopologicalSpace X), t ∈ T → RegularSpace X
x✝ : TopologicalSpace X := sInf T
⊢ RegularSpace X
[PROOFSTEP]
have :
  ∀ a,
    (𝓝 a).HasBasis
      (fun If : Σ I : Set T, I → Set X => If.1.Finite ∧ ∀ i : If.1, If.2 i ∈ @nhds X i a ∧ @IsClosed X i (If.2 i))
      fun If => ⋂ i : If.1, If.snd i :=
  by
  intro a
  rw [nhds_sInf, ← iInf_subtype'']
  exact hasBasis_iInf fun t : T => @closed_nhds_basis X t (h t t.2) a
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : RegularSpace α
a : α
s : Set α
X : Type u_1
T : Set (TopologicalSpace X)
h : ∀ (t : TopologicalSpace X), t ∈ T → RegularSpace X
x✝ : TopologicalSpace X := sInf T
⊢ ∀ (a : X),
    HasBasis (𝓝 a) (fun If => Set.Finite If.fst ∧ ∀ (i : ↑If.fst), Sigma.snd If i ∈ 𝓝 a ∧ IsClosed (Sigma.snd If i))
      fun If => ⋂ (i : ↑If.fst), Sigma.snd If i
[PROOFSTEP]
intro a
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : RegularSpace α
a✝ : α
s : Set α
X : Type u_1
T : Set (TopologicalSpace X)
h : ∀ (t : TopologicalSpace X), t ∈ T → RegularSpace X
x✝ : TopologicalSpace X := sInf T
a : X
⊢ HasBasis (𝓝 a) (fun If => Set.Finite If.fst ∧ ∀ (i : ↑If.fst), Sigma.snd If i ∈ 𝓝 a ∧ IsClosed (Sigma.snd If i))
    fun If => ⋂ (i : ↑If.fst), Sigma.snd If i
[PROOFSTEP]
rw [nhds_sInf, ← iInf_subtype'']
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : RegularSpace α
a✝ : α
s : Set α
X : Type u_1
T : Set (TopologicalSpace X)
h : ∀ (t : TopologicalSpace X), t ∈ T → RegularSpace X
x✝ : TopologicalSpace X := sInf T
a : X
⊢ HasBasis (⨅ (i : ↑T), 𝓝 a)
    (fun If => Set.Finite If.fst ∧ ∀ (i : ↑If.fst), Sigma.snd If i ∈ 𝓝 a ∧ IsClosed (Sigma.snd If i)) fun If =>
    ⋂ (i : ↑If.fst), Sigma.snd If i
[PROOFSTEP]
exact hasBasis_iInf fun t : T => @closed_nhds_basis X t (h t t.2) a
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : RegularSpace α
a : α
s : Set α
X : Type u_1
T : Set (TopologicalSpace X)
h : ∀ (t : TopologicalSpace X), t ∈ T → RegularSpace X
x✝ : TopologicalSpace X := sInf T
this :
  ∀ (a : X),
    HasBasis (𝓝 a) (fun If => Set.Finite If.fst ∧ ∀ (i : ↑If.fst), Sigma.snd If i ∈ 𝓝 a ∧ IsClosed (Sigma.snd If i))
      fun If => ⋂ (i : ↑If.fst), Sigma.snd If i
⊢ RegularSpace X
[PROOFSTEP]
refine' RegularSpace.ofBasis this fun a If hIf => isClosed_iInter fun i => _
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : RegularSpace α
a✝ : α
s : Set α
X : Type u_1
T : Set (TopologicalSpace X)
h : ∀ (t : TopologicalSpace X), t ∈ T → RegularSpace X
x✝ : TopologicalSpace X := sInf T
this :
  ∀ (a : X),
    HasBasis (𝓝 a) (fun If => Set.Finite If.fst ∧ ∀ (i : ↑If.fst), Sigma.snd If i ∈ 𝓝 a ∧ IsClosed (Sigma.snd If i))
      fun If => ⋂ (i : ↑If.fst), Sigma.snd If i
a : X
If : (I : Set ↑T) × (↑I → Set X)
hIf : Set.Finite If.fst ∧ ∀ (i : ↑If.fst), Sigma.snd If i ∈ 𝓝 a ∧ IsClosed (Sigma.snd If i)
i : ↑If.fst
⊢ IsClosed (Sigma.snd If i)
[PROOFSTEP]
exact (hIf.2 i).2.mono (sInf_le (i : T).2)
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : RegularSpace α
a : α
s : Set α
X : Type u_1
t₁ t₂ : TopologicalSpace X
h₁ : RegularSpace X
h₂ : RegularSpace X
⊢ RegularSpace X
[PROOFSTEP]
rw [inf_eq_iInf]
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : RegularSpace α
a : α
s : Set α
X : Type u_1
t₁ t₂ : TopologicalSpace X
h₁ : RegularSpace X
h₂ : RegularSpace X
⊢ RegularSpace X
[PROOFSTEP]
exact regularSpace_iInf (Bool.forall_bool.2 ⟨h₂, h₁⟩)
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T3Space α
⊢ T25Space α
[PROOFSTEP]
refine' ⟨fun x y hne => _⟩
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T3Space α
x y : α
hne : x ≠ y
⊢ Disjoint (Filter.lift' (𝓝 x) closure) (Filter.lift' (𝓝 y) closure)
[PROOFSTEP]
rw [lift'_nhds_closure, lift'_nhds_closure]
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T3Space α
x y : α
hne : x ≠ y
⊢ Disjoint (𝓝 x) (𝓝 y)
[PROOFSTEP]
have : x ∉ closure { y } ∨ y ∉ closure { x } := (t0Space_iff_or_not_mem_closure α).mp inferInstance x y hne
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T3Space α
x y : α
hne : x ≠ y
this : ¬x ∈ closure {y} ∨ ¬y ∈ closure {x}
⊢ Disjoint (𝓝 x) (𝓝 y)
[PROOFSTEP]
simp only [← disjoint_nhds_nhdsSet, nhdsSet_singleton] at this 
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T3Space α
x y : α
hne : x ≠ y
this : Disjoint (𝓝 x) (𝓝 y) ∨ Disjoint (𝓝 y) (𝓝 x)
⊢ Disjoint (𝓝 x) (𝓝 y)
[PROOFSTEP]
exact this.elim id fun h => h.symm
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T3Space α
x y : α
h : x ≠ y
⊢ ∃ U₁,
    U₁ ∈ 𝓝 x ∧
      ∃ V₁,
        V₁ ∈ 𝓝 x ∧
          ∃ U₂,
            U₂ ∈ 𝓝 y ∧
              ∃ V₂, V₂ ∈ 𝓝 y ∧ IsClosed V₁ ∧ IsClosed V₂ ∧ IsOpen U₁ ∧ IsOpen U₂ ∧ V₁ ⊆ U₁ ∧ V₂ ⊆ U₂ ∧ Disjoint U₁ U₂
[PROOFSTEP]
rcases t2_separation h with ⟨U₁, U₂, U₁_op, U₂_op, x_in, y_in, H⟩
[GOAL]
case intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T3Space α
x y : α
h : x ≠ y
U₁ U₂ : Set α
U₁_op : IsOpen U₁
U₂_op : IsOpen U₂
x_in : x ∈ U₁
y_in : y ∈ U₂
H : Disjoint U₁ U₂
⊢ ∃ U₁,
    U₁ ∈ 𝓝 x ∧
      ∃ V₁,
        V₁ ∈ 𝓝 x ∧
          ∃ U₂,
            U₂ ∈ 𝓝 y ∧
              ∃ V₂, V₂ ∈ 𝓝 y ∧ IsClosed V₁ ∧ IsClosed V₂ ∧ IsOpen U₁ ∧ IsOpen U₂ ∧ V₁ ⊆ U₁ ∧ V₂ ⊆ U₂ ∧ Disjoint U₁ U₂
[PROOFSTEP]
rcases exists_mem_nhds_isClosed_subset (U₁_op.mem_nhds x_in) with ⟨V₁, V₁_in, V₁_closed, h₁⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T3Space α
x y : α
h : x ≠ y
U₁ U₂ : Set α
U₁_op : IsOpen U₁
U₂_op : IsOpen U₂
x_in : x ∈ U₁
y_in : y ∈ U₂
H : Disjoint U₁ U₂
V₁ : Set α
V₁_in : V₁ ∈ 𝓝 x
V₁_closed : IsClosed V₁
h₁ : V₁ ⊆ U₁
⊢ ∃ U₁,
    U₁ ∈ 𝓝 x ∧
      ∃ V₁,
        V₁ ∈ 𝓝 x ∧
          ∃ U₂,
            U₂ ∈ 𝓝 y ∧
              ∃ V₂, V₂ ∈ 𝓝 y ∧ IsClosed V₁ ∧ IsClosed V₂ ∧ IsOpen U₁ ∧ IsOpen U₂ ∧ V₁ ⊆ U₁ ∧ V₂ ⊆ U₂ ∧ Disjoint U₁ U₂
[PROOFSTEP]
rcases exists_mem_nhds_isClosed_subset (U₂_op.mem_nhds y_in) with ⟨V₂, V₂_in, V₂_closed, h₂⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T3Space α
x y : α
h : x ≠ y
U₁ U₂ : Set α
U₁_op : IsOpen U₁
U₂_op : IsOpen U₂
x_in : x ∈ U₁
y_in : y ∈ U₂
H : Disjoint U₁ U₂
V₁ : Set α
V₁_in : V₁ ∈ 𝓝 x
V₁_closed : IsClosed V₁
h₁ : V₁ ⊆ U₁
V₂ : Set α
V₂_in : V₂ ∈ 𝓝 y
V₂_closed : IsClosed V₂
h₂ : V₂ ⊆ U₂
⊢ ∃ U₁,
    U₁ ∈ 𝓝 x ∧
      ∃ V₁,
        V₁ ∈ 𝓝 x ∧
          ∃ U₂,
            U₂ ∈ 𝓝 y ∧
              ∃ V₂, V₂ ∈ 𝓝 y ∧ IsClosed V₁ ∧ IsClosed V₂ ∧ IsOpen U₁ ∧ IsOpen U₂ ∧ V₁ ⊆ U₁ ∧ V₂ ⊆ U₂ ∧ Disjoint U₁ U₂
[PROOFSTEP]
exact
  ⟨U₁, mem_of_superset V₁_in h₁, V₁, V₁_in, U₂, mem_of_superset V₂_in h₂, V₂, V₂_in, V₁_closed, V₂_closed, U₁_op, U₂_op,
    h₁, h₂, H⟩
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : RegularSpace α
s : Set (SeparationQuotient α)
a : SeparationQuotient α
hs : IsClosed s
ha : ¬a ∈ s
⊢ Disjoint (𝓝ˢ s) (𝓝 a)
[PROOFSTEP]
rcases surjective_mk a with ⟨a, rfl⟩
[GOAL]
case intro
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : RegularSpace α
s : Set (SeparationQuotient α)
hs : IsClosed s
a : α
ha : ¬SeparationQuotient.mk a ∈ s
⊢ Disjoint (𝓝ˢ s) (𝓝 (SeparationQuotient.mk a))
[PROOFSTEP]
rw [← disjoint_comap_iff surjective_mk, comap_mk_nhds_mk, comap_mk_nhdsSet]
[GOAL]
case intro
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : RegularSpace α
s : Set (SeparationQuotient α)
hs : IsClosed s
a : α
ha : ¬SeparationQuotient.mk a ∈ s
⊢ Disjoint (𝓝ˢ (SeparationQuotient.mk ⁻¹' s)) (𝓝 a)
[PROOFSTEP]
exact RegularSpace.regular (hs.preimage continuous_mk) ha
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : NormalSpace α
s t : Set α
hs : IsClosed s
ht : IsOpen t
hst : s ⊆ t
⊢ ∃ u, IsOpen u ∧ s ⊆ u ∧ closure u ⊆ t
[PROOFSTEP]
have : Disjoint s tᶜ := Set.disjoint_left.mpr fun x hxs hxt => hxt (hst hxs)
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : NormalSpace α
s t : Set α
hs : IsClosed s
ht : IsOpen t
hst : s ⊆ t
this : Disjoint s tᶜ
⊢ ∃ u, IsOpen u ∧ s ⊆ u ∧ closure u ⊆ t
[PROOFSTEP]
rcases normal_separation hs (isClosed_compl_iff.2 ht) this with ⟨s', t', hs', ht', hss', htt', hs't'⟩
[GOAL]
case intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : NormalSpace α
s t : Set α
hs : IsClosed s
ht : IsOpen t
hst : s ⊆ t
this : Disjoint s tᶜ
s' t' : Set α
hs' : IsOpen s'
ht' : IsOpen t'
hss' : s ⊆ s'
htt' : tᶜ ⊆ t'
hs't' : Disjoint s' t'
⊢ ∃ u, IsOpen u ∧ s ⊆ u ∧ closure u ⊆ t
[PROOFSTEP]
refine ⟨s', hs', hss', Subset.trans (closure_minimal ?_ (isClosed_compl_iff.2 ht')) (compl_subset_comm.1 htt')⟩
[GOAL]
case intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : NormalSpace α
s t : Set α
hs : IsClosed s
ht : IsOpen t
hst : s ⊆ t
this : Disjoint s tᶜ
s' t' : Set α
hs' : IsOpen s'
ht' : IsOpen t'
hss' : s ⊆ s'
htt' : tᶜ ⊆ t'
hs't' : Disjoint s' t'
⊢ s' ⊆ t'ᶜ
[PROOFSTEP]
exact fun x hxs hxt => hs't'.le_bot ⟨hxs, hxt⟩
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : NormalSpace α
s✝ : Set α
a✝ : α
hs : IsClosed s✝
hxs : ¬a✝ ∈ s✝
⊢ Disjoint (𝓝ˢ s✝) (𝓝 a✝)
[PROOFSTEP]
simpa only [nhdsSet_singleton] using
  (normal_separation hs isClosed_singleton (disjoint_singleton_right.mpr hxs)).disjoint_nhdsSet
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
inst✝ : NormalSpace β
f : α → β
hf : ClosedEmbedding f
s t : Set α
hs : IsClosed s
ht : IsClosed t
hst : Disjoint s t
⊢ SeparatedNhds s t
[PROOFSTEP]
have H : SeparatedNhds (f '' s) (f '' t) :=
  NormalSpace.normal (f '' s) (f '' t) (hf.isClosedMap s hs) (hf.isClosedMap t ht)
    (disjoint_image_of_injective hf.inj hst)
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
inst✝ : NormalSpace β
f : α → β
hf : ClosedEmbedding f
s t : Set α
hs : IsClosed s
ht : IsClosed t
hst : Disjoint s t
H : SeparatedNhds (f '' s) (f '' t)
⊢ SeparatedNhds s t
[PROOFSTEP]
exact (H.preimage hf.continuous).mono (subset_preimage_image _ _) (subset_preimage_image _ _)
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : NormalSpace α
s t : Set (SeparationQuotient α)
hs : IsClosed s
ht : IsClosed t
hd : Disjoint s t
⊢ Disjoint (𝓝ˢ s) (𝓝ˢ t)
[PROOFSTEP]
rw [← disjoint_comap_iff surjective_mk, comap_mk_nhdsSet, comap_mk_nhdsSet]
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : NormalSpace α
s t : Set (SeparationQuotient α)
hs : IsClosed s
ht : IsClosed t
hd : Disjoint s t
⊢ Disjoint (𝓝ˢ (mk ⁻¹' s)) (𝓝ˢ (mk ⁻¹' t))
[PROOFSTEP]
exact (normal_separation (hs.preimage continuous_mk) (ht.preimage continuous_mk) (hd.preimage mk)).disjoint_nhdsSet
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
⊢ NormalSpace α
[PROOFSTEP]
have key :
  ∀ {s t : Set α},
    IsClosed t →
      Disjoint s t →
        ∃ U : Set (countableBasis α),
          (s ⊆ ⋃ u ∈ U, ↑u) ∧
            (∀ u ∈ U, Disjoint (closure ↑u) t) ∧
              ∀ n : ℕ, IsClosed (⋃ (u ∈ U) (_ : Encodable.encode u ≤ n), closure (u : Set α)) :=
  by
  intro s t hc hd
  rw [disjoint_left] at hd 
  have : ∀ x ∈ s, ∃ U ∈ countableBasis α, x ∈ U ∧ Disjoint (closure U) t :=
    by
    intro x hx
    rcases(isBasis_countableBasis α).exists_closure_subset (hc.compl_mem_nhds (hd hx)) with ⟨u, hu, hxu, hut⟩
    exact ⟨u, hu, hxu, disjoint_left.2 hut⟩
  choose! U hu hxu hd using this
  set V : s → countableBasis α := MapsTo.restrict _ _ _ hu
  refine' ⟨range V, _, forall_range_iff.2 <| Subtype.forall.2 hd, fun n => _⟩
  · rw [biUnion_range]
    exact fun x hx => mem_iUnion.2 ⟨⟨x, hx⟩, hxu x hx⟩
  · simp only [← iSup_eq_iUnion, iSup_and']
    exact
      isClosed_biUnion (((finite_le_nat n).preimage_embedding (Encodable.encode' _)).subset <| inter_subset_right _ _)
        fun u _ => isClosed_closure
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
⊢ ∀ {s t : Set α},
    IsClosed t →
      Disjoint s t →
        ∃ U,
          s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u ∧
            (∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t) ∧
              ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
[PROOFSTEP]
intro s t hc hd
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
s t : Set α
hc : IsClosed t
hd : Disjoint s t
⊢ ∃ U,
    s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u ∧
      (∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t) ∧
        ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
[PROOFSTEP]
rw [disjoint_left] at hd 
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
s t : Set α
hc : IsClosed t
hd : ∀ ⦃a : α⦄, a ∈ s → ¬a ∈ t
⊢ ∃ U,
    s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u ∧
      (∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t) ∧
        ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
[PROOFSTEP]
have : ∀ x ∈ s, ∃ U ∈ countableBasis α, x ∈ U ∧ Disjoint (closure U) t :=
  by
  intro x hx
  rcases(isBasis_countableBasis α).exists_closure_subset (hc.compl_mem_nhds (hd hx)) with ⟨u, hu, hxu, hut⟩
  exact ⟨u, hu, hxu, disjoint_left.2 hut⟩
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
s t : Set α
hc : IsClosed t
hd : ∀ ⦃a : α⦄, a ∈ s → ¬a ∈ t
⊢ ∀ (x : α), x ∈ s → ∃ U, U ∈ countableBasis α ∧ x ∈ U ∧ Disjoint (closure U) t
[PROOFSTEP]
intro x hx
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
s t : Set α
hc : IsClosed t
hd : ∀ ⦃a : α⦄, a ∈ s → ¬a ∈ t
x : α
hx : x ∈ s
⊢ ∃ U, U ∈ countableBasis α ∧ x ∈ U ∧ Disjoint (closure U) t
[PROOFSTEP]
rcases(isBasis_countableBasis α).exists_closure_subset (hc.compl_mem_nhds (hd hx)) with ⟨u, hu, hxu, hut⟩
[GOAL]
case intro.intro.intro
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
s t : Set α
hc : IsClosed t
hd : ∀ ⦃a : α⦄, a ∈ s → ¬a ∈ t
x : α
hx : x ∈ s
u : Set α
hu : u ∈ countableBasis α
hxu : x ∈ u
hut : closure u ⊆ tᶜ
⊢ ∃ U, U ∈ countableBasis α ∧ x ∈ U ∧ Disjoint (closure U) t
[PROOFSTEP]
exact ⟨u, hu, hxu, disjoint_left.2 hut⟩
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
s t : Set α
hc : IsClosed t
hd : ∀ ⦃a : α⦄, a ∈ s → ¬a ∈ t
this : ∀ (x : α), x ∈ s → ∃ U, U ∈ countableBasis α ∧ x ∈ U ∧ Disjoint (closure U) t
⊢ ∃ U,
    s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u ∧
      (∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t) ∧
        ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
[PROOFSTEP]
choose! U hu hxu hd using this
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
s t : Set α
hc : IsClosed t
hd✝ : ∀ ⦃a : α⦄, a ∈ s → ¬a ∈ t
U : α → Set α
hu : ∀ (x : α), x ∈ s → U x ∈ countableBasis α
hxu : ∀ (x : α), x ∈ s → x ∈ U x
hd : ∀ (x : α), x ∈ s → Disjoint (closure (U x)) t
⊢ ∃ U,
    s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u ∧
      (∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t) ∧
        ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
[PROOFSTEP]
set V : s → countableBasis α := MapsTo.restrict _ _ _ hu
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
s t : Set α
hc : IsClosed t
hd✝ : ∀ ⦃a : α⦄, a ∈ s → ¬a ∈ t
U : α → Set α
hu : ∀ (x : α), x ∈ s → U x ∈ countableBasis α
hxu : ∀ (x : α), x ∈ s → x ∈ U x
hd : ∀ (x : α), x ∈ s → Disjoint (closure (U x)) t
V : ↑s → ↑(countableBasis α) := MapsTo.restrict (fun x => U x) s (countableBasis α) hu
⊢ ∃ U,
    s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u ∧
      (∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t) ∧
        ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
[PROOFSTEP]
refine' ⟨range V, _, forall_range_iff.2 <| Subtype.forall.2 hd, fun n => _⟩
[GOAL]
case refine'_1
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
s t : Set α
hc : IsClosed t
hd✝ : ∀ ⦃a : α⦄, a ∈ s → ¬a ∈ t
U : α → Set α
hu : ∀ (x : α), x ∈ s → U x ∈ countableBasis α
hxu : ∀ (x : α), x ∈ s → x ∈ U x
hd : ∀ (x : α), x ∈ s → Disjoint (closure (U x)) t
V : ↑s → ↑(countableBasis α) := MapsTo.restrict (fun x => U x) s (countableBasis α) hu
⊢ s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ range V), ↑u
[PROOFSTEP]
rw [biUnion_range]
[GOAL]
case refine'_1
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
s t : Set α
hc : IsClosed t
hd✝ : ∀ ⦃a : α⦄, a ∈ s → ¬a ∈ t
U : α → Set α
hu : ∀ (x : α), x ∈ s → U x ∈ countableBasis α
hxu : ∀ (x : α), x ∈ s → x ∈ U x
hd : ∀ (x : α), x ∈ s → Disjoint (closure (U x)) t
V : ↑s → ↑(countableBasis α) := MapsTo.restrict (fun x => U x) s (countableBasis α) hu
⊢ s ⊆ ⋃ (y : ↑s), ↑(V y)
[PROOFSTEP]
exact fun x hx => mem_iUnion.2 ⟨⟨x, hx⟩, hxu x hx⟩
[GOAL]
case refine'_2
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
s t : Set α
hc : IsClosed t
hd✝ : ∀ ⦃a : α⦄, a ∈ s → ¬a ∈ t
U : α → Set α
hu : ∀ (x : α), x ∈ s → U x ∈ countableBasis α
hxu : ∀ (x : α), x ∈ s → x ∈ U x
hd : ∀ (x : α), x ∈ s → Disjoint (closure (U x)) t
V : ↑s → ↑(countableBasis α) := MapsTo.restrict (fun x => U x) s (countableBasis α) hu
n : ℕ
⊢ IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ range V) (_ : Encodable.encode u ≤ n), closure ↑u)
[PROOFSTEP]
simp only [← iSup_eq_iUnion, iSup_and']
[GOAL]
case refine'_2
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
s t : Set α
hc : IsClosed t
hd✝ : ∀ ⦃a : α⦄, a ∈ s → ¬a ∈ t
U : α → Set α
hu : ∀ (x : α), x ∈ s → U x ∈ countableBasis α
hxu : ∀ (x : α), x ∈ s → x ∈ U x
hd : ∀ (x : α), x ∈ s → Disjoint (closure (U x)) t
V : ↑s → ↑(countableBasis α) := MapsTo.restrict (fun x => U x) s (countableBasis α) hu
n : ℕ
⊢ IsClosed
    (⨆ (u : ↑(countableBasis α)) (_ :
      u ∈ range (MapsTo.restrict (fun x => U x) s (countableBasis α) hu) ∧ Encodable.encode u ≤ n), closure ↑u)
[PROOFSTEP]
exact
  isClosed_biUnion (((finite_le_nat n).preimage_embedding (Encodable.encode' _)).subset <| inter_subset_right _ _)
    fun u _ => isClosed_closure
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
key :
  ∀ {s t : Set α},
    IsClosed t →
      Disjoint s t →
        ∃ U,
          s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u ∧
            (∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t) ∧
              ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
⊢ NormalSpace α
[PROOFSTEP]
refine' ⟨fun s t hs ht hd => _⟩
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
key :
  ∀ {s t : Set α},
    IsClosed t →
      Disjoint s t →
        ∃ U,
          s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u ∧
            (∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t) ∧
              ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
s t : Set α
hs : IsClosed s
ht : IsClosed t
hd : Disjoint s t
⊢ SeparatedNhds s t
[PROOFSTEP]
rcases key ht hd with ⟨U, hsU, hUd, hUc⟩
[GOAL]
case intro.intro.intro
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
key :
  ∀ {s t : Set α},
    IsClosed t →
      Disjoint s t →
        ∃ U,
          s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u ∧
            (∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t) ∧
              ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
s t : Set α
hs : IsClosed s
ht : IsClosed t
hd : Disjoint s t
U : Set ↑(countableBasis α)
hsU : s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u
hUd : ∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t
hUc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
⊢ SeparatedNhds s t
[PROOFSTEP]
rcases key hs hd.symm with ⟨V, htV, hVd, hVc⟩
[GOAL]
case intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
key :
  ∀ {s t : Set α},
    IsClosed t →
      Disjoint s t →
        ∃ U,
          s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u ∧
            (∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t) ∧
              ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
s t : Set α
hs : IsClosed s
ht : IsClosed t
hd : Disjoint s t
U : Set ↑(countableBasis α)
hsU : s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u
hUd : ∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t
hUc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
V : Set ↑(countableBasis α)
htV : t ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ V), ↑u
hVd : ∀ (u : ↑(countableBasis α)), u ∈ V → Disjoint (closure ↑u) s
hVc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ V) (_ : Encodable.encode u ≤ n), closure ↑u)
⊢ SeparatedNhds s t
[PROOFSTEP]
refine
  ⟨⋃ u ∈ U, ↑u \ ⋃ (v ∈ V) (_ : Encodable.encode v ≤ Encodable.encode u), closure ↑v,
    ⋃ v ∈ V, ↑v \ ⋃ (u ∈ U) (_ : Encodable.encode u ≤ Encodable.encode v), closure ↑u,
    isOpen_biUnion fun u _ => (isOpen_of_mem_countableBasis u.2).sdiff (hVc _),
    isOpen_biUnion fun v _ => (isOpen_of_mem_countableBasis v.2).sdiff (hUc _), fun x hx => ?_, fun x hx => ?_, ?_⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.refine_1
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
key :
  ∀ {s t : Set α},
    IsClosed t →
      Disjoint s t →
        ∃ U,
          s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u ∧
            (∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t) ∧
              ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
s t : Set α
hs : IsClosed s
ht : IsClosed t
hd : Disjoint s t
U : Set ↑(countableBasis α)
hsU : s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u
hUd : ∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t
hUc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
V : Set ↑(countableBasis α)
htV : t ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ V), ↑u
hVd : ∀ (u : ↑(countableBasis α)), u ∈ V → Disjoint (closure ↑u) s
hVc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ V) (_ : Encodable.encode u ≤ n), closure ↑u)
x : α
hx : x ∈ s
⊢ x ∈
    ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U),
      ↑u \ ⋃ (v : ↑(countableBasis α)) (_ : v ∈ V) (_ : Encodable.encode v ≤ Encodable.encode u), closure ↑v
[PROOFSTEP]
rcases mem_iUnion₂.1 (hsU hx) with ⟨u, huU, hxu⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.refine_1.intro.intro
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
key :
  ∀ {s t : Set α},
    IsClosed t →
      Disjoint s t →
        ∃ U,
          s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u ∧
            (∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t) ∧
              ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
s t : Set α
hs : IsClosed s
ht : IsClosed t
hd : Disjoint s t
U : Set ↑(countableBasis α)
hsU : s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u
hUd : ∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t
hUc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
V : Set ↑(countableBasis α)
htV : t ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ V), ↑u
hVd : ∀ (u : ↑(countableBasis α)), u ∈ V → Disjoint (closure ↑u) s
hVc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ V) (_ : Encodable.encode u ≤ n), closure ↑u)
x : α
hx : x ∈ s
u : ↑(countableBasis α)
huU : u ∈ U
hxu : x ∈ ↑u
⊢ x ∈
    ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U),
      ↑u \ ⋃ (v : ↑(countableBasis α)) (_ : v ∈ V) (_ : Encodable.encode v ≤ Encodable.encode u), closure ↑v
[PROOFSTEP]
refine' mem_biUnion huU ⟨hxu, _⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.refine_1.intro.intro
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
key :
  ∀ {s t : Set α},
    IsClosed t →
      Disjoint s t →
        ∃ U,
          s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u ∧
            (∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t) ∧
              ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
s t : Set α
hs : IsClosed s
ht : IsClosed t
hd : Disjoint s t
U : Set ↑(countableBasis α)
hsU : s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u
hUd : ∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t
hUc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
V : Set ↑(countableBasis α)
htV : t ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ V), ↑u
hVd : ∀ (u : ↑(countableBasis α)), u ∈ V → Disjoint (closure ↑u) s
hVc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ V) (_ : Encodable.encode u ≤ n), closure ↑u)
x : α
hx : x ∈ s
u : ↑(countableBasis α)
huU : u ∈ U
hxu : x ∈ ↑u
⊢ ¬x ∈ ⋃ (v : ↑(countableBasis α)) (_ : v ∈ V) (_ : Encodable.encode v ≤ Encodable.encode u), closure ↑v
[PROOFSTEP]
simp only [mem_iUnion]
[GOAL]
case intro.intro.intro.intro.intro.intro.refine_1.intro.intro
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
key :
  ∀ {s t : Set α},
    IsClosed t →
      Disjoint s t →
        ∃ U,
          s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u ∧
            (∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t) ∧
              ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
s t : Set α
hs : IsClosed s
ht : IsClosed t
hd : Disjoint s t
U : Set ↑(countableBasis α)
hsU : s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u
hUd : ∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t
hUc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
V : Set ↑(countableBasis α)
htV : t ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ V), ↑u
hVd : ∀ (u : ↑(countableBasis α)), u ∈ V → Disjoint (closure ↑u) s
hVc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ V) (_ : Encodable.encode u ≤ n), closure ↑u)
x : α
hx : x ∈ s
u : ↑(countableBasis α)
huU : u ∈ U
hxu : x ∈ ↑u
⊢ ¬∃ i h i_1, x ∈ closure ↑i
[PROOFSTEP]
rintro ⟨v, hvV, -, hxv⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.refine_1.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
key :
  ∀ {s t : Set α},
    IsClosed t →
      Disjoint s t →
        ∃ U,
          s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u ∧
            (∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t) ∧
              ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
s t : Set α
hs : IsClosed s
ht : IsClosed t
hd : Disjoint s t
U : Set ↑(countableBasis α)
hsU : s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u
hUd : ∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t
hUc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
V : Set ↑(countableBasis α)
htV : t ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ V), ↑u
hVd : ∀ (u : ↑(countableBasis α)), u ∈ V → Disjoint (closure ↑u) s
hVc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ V) (_ : Encodable.encode u ≤ n), closure ↑u)
x : α
hx : x ∈ s
u : ↑(countableBasis α)
huU : u ∈ U
hxu : x ∈ ↑u
v : ↑(countableBasis α)
hvV : v ∈ V
hxv : x ∈ closure ↑v
⊢ False
[PROOFSTEP]
exact (hVd v hvV).le_bot ⟨hxv, hx⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.refine_2
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
key :
  ∀ {s t : Set α},
    IsClosed t →
      Disjoint s t →
        ∃ U,
          s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u ∧
            (∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t) ∧
              ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
s t : Set α
hs : IsClosed s
ht : IsClosed t
hd : Disjoint s t
U : Set ↑(countableBasis α)
hsU : s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u
hUd : ∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t
hUc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
V : Set ↑(countableBasis α)
htV : t ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ V), ↑u
hVd : ∀ (u : ↑(countableBasis α)), u ∈ V → Disjoint (closure ↑u) s
hVc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ V) (_ : Encodable.encode u ≤ n), closure ↑u)
x : α
hx : x ∈ t
⊢ x ∈
    ⋃ (v : ↑(countableBasis α)) (_ : v ∈ V),
      ↑v \ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ Encodable.encode v), closure ↑u
[PROOFSTEP]
rcases mem_iUnion₂.1 (htV hx) with ⟨v, hvV, hxv⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.refine_2.intro.intro
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
key :
  ∀ {s t : Set α},
    IsClosed t →
      Disjoint s t →
        ∃ U,
          s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u ∧
            (∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t) ∧
              ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
s t : Set α
hs : IsClosed s
ht : IsClosed t
hd : Disjoint s t
U : Set ↑(countableBasis α)
hsU : s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u
hUd : ∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t
hUc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
V : Set ↑(countableBasis α)
htV : t ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ V), ↑u
hVd : ∀ (u : ↑(countableBasis α)), u ∈ V → Disjoint (closure ↑u) s
hVc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ V) (_ : Encodable.encode u ≤ n), closure ↑u)
x : α
hx : x ∈ t
v : ↑(countableBasis α)
hvV : v ∈ V
hxv : x ∈ ↑v
⊢ x ∈
    ⋃ (v : ↑(countableBasis α)) (_ : v ∈ V),
      ↑v \ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ Encodable.encode v), closure ↑u
[PROOFSTEP]
refine' mem_biUnion hvV ⟨hxv, _⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.refine_2.intro.intro
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
key :
  ∀ {s t : Set α},
    IsClosed t →
      Disjoint s t →
        ∃ U,
          s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u ∧
            (∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t) ∧
              ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
s t : Set α
hs : IsClosed s
ht : IsClosed t
hd : Disjoint s t
U : Set ↑(countableBasis α)
hsU : s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u
hUd : ∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t
hUc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
V : Set ↑(countableBasis α)
htV : t ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ V), ↑u
hVd : ∀ (u : ↑(countableBasis α)), u ∈ V → Disjoint (closure ↑u) s
hVc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ V) (_ : Encodable.encode u ≤ n), closure ↑u)
x : α
hx : x ∈ t
v : ↑(countableBasis α)
hvV : v ∈ V
hxv : x ∈ ↑v
⊢ ¬x ∈ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ Encodable.encode v), closure ↑u
[PROOFSTEP]
simp only [mem_iUnion]
[GOAL]
case intro.intro.intro.intro.intro.intro.refine_2.intro.intro
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
key :
  ∀ {s t : Set α},
    IsClosed t →
      Disjoint s t →
        ∃ U,
          s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u ∧
            (∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t) ∧
              ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
s t : Set α
hs : IsClosed s
ht : IsClosed t
hd : Disjoint s t
U : Set ↑(countableBasis α)
hsU : s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u
hUd : ∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t
hUc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
V : Set ↑(countableBasis α)
htV : t ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ V), ↑u
hVd : ∀ (u : ↑(countableBasis α)), u ∈ V → Disjoint (closure ↑u) s
hVc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ V) (_ : Encodable.encode u ≤ n), closure ↑u)
x : α
hx : x ∈ t
v : ↑(countableBasis α)
hvV : v ∈ V
hxv : x ∈ ↑v
⊢ ¬∃ i h i_1, x ∈ closure ↑i
[PROOFSTEP]
rintro ⟨u, huU, -, hxu⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.refine_2.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
key :
  ∀ {s t : Set α},
    IsClosed t →
      Disjoint s t →
        ∃ U,
          s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u ∧
            (∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t) ∧
              ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
s t : Set α
hs : IsClosed s
ht : IsClosed t
hd : Disjoint s t
U : Set ↑(countableBasis α)
hsU : s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u
hUd : ∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t
hUc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
V : Set ↑(countableBasis α)
htV : t ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ V), ↑u
hVd : ∀ (u : ↑(countableBasis α)), u ∈ V → Disjoint (closure ↑u) s
hVc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ V) (_ : Encodable.encode u ≤ n), closure ↑u)
x : α
hx : x ∈ t
v : ↑(countableBasis α)
hvV : v ∈ V
hxv : x ∈ ↑v
u : ↑(countableBasis α)
huU : u ∈ U
hxu : x ∈ closure ↑u
⊢ False
[PROOFSTEP]
exact (hUd u huU).le_bot ⟨hxu, hx⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.refine_3
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
key :
  ∀ {s t : Set α},
    IsClosed t →
      Disjoint s t →
        ∃ U,
          s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u ∧
            (∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t) ∧
              ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
s t : Set α
hs : IsClosed s
ht : IsClosed t
hd : Disjoint s t
U : Set ↑(countableBasis α)
hsU : s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u
hUd : ∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t
hUc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
V : Set ↑(countableBasis α)
htV : t ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ V), ↑u
hVd : ∀ (u : ↑(countableBasis α)), u ∈ V → Disjoint (closure ↑u) s
hVc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ V) (_ : Encodable.encode u ≤ n), closure ↑u)
⊢ Disjoint
    (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U),
      ↑u \ ⋃ (v : ↑(countableBasis α)) (_ : v ∈ V) (_ : Encodable.encode v ≤ Encodable.encode u), closure ↑v)
    (⋃ (v : ↑(countableBasis α)) (_ : v ∈ V),
      ↑v \ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ Encodable.encode v), closure ↑u)
[PROOFSTEP]
simp only [disjoint_left, mem_iUnion, mem_diff, not_exists, not_and, not_forall, not_not]
[GOAL]
case intro.intro.intro.intro.intro.intro.refine_3
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
key :
  ∀ {s t : Set α},
    IsClosed t →
      Disjoint s t →
        ∃ U,
          s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u ∧
            (∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t) ∧
              ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
s t : Set α
hs : IsClosed s
ht : IsClosed t
hd : Disjoint s t
U : Set ↑(countableBasis α)
hsU : s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u
hUd : ∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t
hUc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
V : Set ↑(countableBasis α)
htV : t ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ V), ↑u
hVd : ∀ (u : ↑(countableBasis α)), u ∈ V → Disjoint (closure ↑u) s
hVc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ V) (_ : Encodable.encode u ≤ n), closure ↑u)
⊢ ∀ ⦃a : α⦄,
    (∃ i h, a ∈ ↑i ∧ ∀ (x : ↑(countableBasis α)), x ∈ V → Encodable.encode x ≤ Encodable.encode i → ¬a ∈ closure ↑x) →
      ∀ (x : ↑(countableBasis α)), x ∈ V → a ∈ ↑x → ∃ x_2 h h, a ∈ closure ↑x_2
[PROOFSTEP]
rintro a ⟨u, huU, hau, haV⟩ v hvV hav
[GOAL]
case intro.intro.intro.intro.intro.intro.refine_3.intro.intro.intro
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
key :
  ∀ {s t : Set α},
    IsClosed t →
      Disjoint s t →
        ∃ U,
          s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u ∧
            (∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t) ∧
              ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
s t : Set α
hs : IsClosed s
ht : IsClosed t
hd : Disjoint s t
U : Set ↑(countableBasis α)
hsU : s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u
hUd : ∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t
hUc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
V : Set ↑(countableBasis α)
htV : t ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ V), ↑u
hVd : ∀ (u : ↑(countableBasis α)), u ∈ V → Disjoint (closure ↑u) s
hVc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ V) (_ : Encodable.encode u ≤ n), closure ↑u)
a : α
u : ↑(countableBasis α)
huU : u ∈ U
hau : a ∈ ↑u
haV : ∀ (x : ↑(countableBasis α)), x ∈ V → Encodable.encode x ≤ Encodable.encode u → ¬a ∈ closure ↑x
v : ↑(countableBasis α)
hvV : v ∈ V
hav : a ∈ ↑v
⊢ ∃ x h h, a ∈ closure ↑x
[PROOFSTEP]
cases' le_total (Encodable.encode u) (Encodable.encode v) with hle hle
[GOAL]
case intro.intro.intro.intro.intro.intro.refine_3.intro.intro.intro.inl
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
key :
  ∀ {s t : Set α},
    IsClosed t →
      Disjoint s t →
        ∃ U,
          s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u ∧
            (∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t) ∧
              ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
s t : Set α
hs : IsClosed s
ht : IsClosed t
hd : Disjoint s t
U : Set ↑(countableBasis α)
hsU : s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u
hUd : ∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t
hUc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
V : Set ↑(countableBasis α)
htV : t ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ V), ↑u
hVd : ∀ (u : ↑(countableBasis α)), u ∈ V → Disjoint (closure ↑u) s
hVc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ V) (_ : Encodable.encode u ≤ n), closure ↑u)
a : α
u : ↑(countableBasis α)
huU : u ∈ U
hau : a ∈ ↑u
haV : ∀ (x : ↑(countableBasis α)), x ∈ V → Encodable.encode x ≤ Encodable.encode u → ¬a ∈ closure ↑x
v : ↑(countableBasis α)
hvV : v ∈ V
hav : a ∈ ↑v
hle : Encodable.encode u ≤ Encodable.encode v
⊢ ∃ x h h, a ∈ closure ↑x
case intro.intro.intro.intro.intro.intro.refine_3.intro.intro.intro.inr
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : SecondCountableTopology α
inst✝ : T3Space α
key :
  ∀ {s t : Set α},
    IsClosed t →
      Disjoint s t →
        ∃ U,
          s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u ∧
            (∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t) ∧
              ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
s t : Set α
hs : IsClosed s
ht : IsClosed t
hd : Disjoint s t
U : Set ↑(countableBasis α)
hsU : s ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ U), ↑u
hUd : ∀ (u : ↑(countableBasis α)), u ∈ U → Disjoint (closure ↑u) t
hUc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ U) (_ : Encodable.encode u ≤ n), closure ↑u)
V : Set ↑(countableBasis α)
htV : t ⊆ ⋃ (u : ↑(countableBasis α)) (_ : u ∈ V), ↑u
hVd : ∀ (u : ↑(countableBasis α)), u ∈ V → Disjoint (closure ↑u) s
hVc : ∀ (n : ℕ), IsClosed (⋃ (u : ↑(countableBasis α)) (_ : u ∈ V) (_ : Encodable.encode u ≤ n), closure ↑u)
a : α
u : ↑(countableBasis α)
huU : u ∈ U
hau : a ∈ ↑u
haV : ∀ (x : ↑(countableBasis α)), x ∈ V → Encodable.encode x ≤ Encodable.encode u → ¬a ∈ closure ↑x
v : ↑(countableBasis α)
hvV : v ∈ V
hav : a ∈ ↑v
hle : Encodable.encode v ≤ Encodable.encode u
⊢ ∃ x h h, a ∈ closure ↑x
[PROOFSTEP]
exacts [⟨u, huU, hle, subset_closure hau⟩, (haV _ hvV hle <| subset_closure hav).elim]
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
inst✝ : T5Space β
e : α → β
he : _root_.Embedding e
⊢ T5Space α
[PROOFSTEP]
haveI := he.t1Space
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
inst✝ : T5Space β
e : α → β
he : _root_.Embedding e
this : T1Space α
⊢ T5Space α
[PROOFSTEP]
refine' ⟨fun s t hd₁ hd₂ => _⟩
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
inst✝ : T5Space β
e : α → β
he : _root_.Embedding e
this : T1Space α
s t : Set α
hd₁ : Disjoint (closure s) t
hd₂ : Disjoint s (closure t)
⊢ Disjoint (𝓝ˢ s) (𝓝ˢ t)
[PROOFSTEP]
simp only [he.toInducing.nhdsSet_eq_comap]
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
inst✝ : T5Space β
e : α → β
he : _root_.Embedding e
this : T1Space α
s t : Set α
hd₁ : Disjoint (closure s) t
hd₂ : Disjoint s (closure t)
⊢ Disjoint (comap e (𝓝ˢ (e '' s))) (comap e (𝓝ˢ (e '' t)))
[PROOFSTEP]
refine disjoint_comap (completely_normal ?_ ?_)
[GOAL]
case refine_1
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
inst✝ : T5Space β
e : α → β
he : _root_.Embedding e
this : T1Space α
s t : Set α
hd₁ : Disjoint (closure s) t
hd₂ : Disjoint s (closure t)
⊢ Disjoint (closure (e '' s)) (e '' t)
[PROOFSTEP]
rwa [← subset_compl_iff_disjoint_left, image_subset_iff, preimage_compl, ← he.closure_eq_preimage_closure_image,
  subset_compl_iff_disjoint_left]
[GOAL]
case refine_2
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
inst✝ : T5Space β
e : α → β
he : _root_.Embedding e
this : T1Space α
s t : Set α
hd₁ : Disjoint (closure s) t
hd₂ : Disjoint s (closure t)
⊢ Disjoint (e '' s) (closure (e '' t))
[PROOFSTEP]
rwa [← subset_compl_iff_disjoint_right, image_subset_iff, preimage_compl, ← he.closure_eq_preimage_closure_image,
  subset_compl_iff_disjoint_right]
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T5Space α
s t : Set α
hs : IsClosed s
ht : IsClosed t
hd : Disjoint s t
⊢ Disjoint (closure s) t
[PROOFSTEP]
rwa [hs.closure_eq]
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T5Space α
s t : Set α
hs : IsClosed s
ht : IsClosed t
hd : Disjoint s t
⊢ Disjoint s (closure t)
[PROOFSTEP]
rwa [ht.closure_eq]
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T5Space α
s t : Set (SeparationQuotient α)
hd₁ : Disjoint (closure s) t
hd₂ : Disjoint s (closure t)
⊢ Disjoint (𝓝ˢ s) (𝓝ˢ t)
[PROOFSTEP]
rw [← disjoint_comap_iff surjective_mk, comap_mk_nhdsSet, comap_mk_nhdsSet]
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T5Space α
s t : Set (SeparationQuotient α)
hd₁ : Disjoint (closure s) t
hd₂ : Disjoint s (closure t)
⊢ Disjoint (𝓝ˢ (SeparationQuotient.mk ⁻¹' s)) (𝓝ˢ (SeparationQuotient.mk ⁻¹' t))
[PROOFSTEP]
apply T5Space.completely_normal
[GOAL]
case a
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T5Space α
s t : Set (SeparationQuotient α)
hd₁ : Disjoint (closure s) t
hd₂ : Disjoint s (closure t)
⊢ Disjoint (closure (SeparationQuotient.mk ⁻¹' s)) (SeparationQuotient.mk ⁻¹' t)
[PROOFSTEP]
rw [← preimage_mk_closure]
[GOAL]
case a
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T5Space α
s t : Set (SeparationQuotient α)
hd₁ : Disjoint (closure s) t
hd₂ : Disjoint s (closure t)
⊢ Disjoint (SeparationQuotient.mk ⁻¹' s) (closure (SeparationQuotient.mk ⁻¹' t))
[PROOFSTEP]
rw [← preimage_mk_closure]
[GOAL]
case a
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T5Space α
s t : Set (SeparationQuotient α)
hd₁ : Disjoint (closure s) t
hd₂ : Disjoint s (closure t)
⊢ Disjoint (SeparationQuotient.mk ⁻¹' closure s) (SeparationQuotient.mk ⁻¹' t)
case a
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T5Space α
s t : Set (SeparationQuotient α)
hd₁ : Disjoint (closure s) t
hd₂ : Disjoint s (closure t)
⊢ Disjoint (SeparationQuotient.mk ⁻¹' s) (SeparationQuotient.mk ⁻¹' closure t)
[PROOFSTEP]
exacts [hd₁.preimage mk, hd₂.preimage mk]
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
x : α
⊢ connectedComponent x = ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z
[PROOFSTEP]
apply Subset.antisymm connectedComponent_subset_iInter_clopen
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
x : α
⊢ ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ connectedComponent x
[PROOFSTEP]
refine'
  IsPreconnected.subset_connectedComponent _
    (mem_iInter.2 fun Z => Z.2.2)
      -- We do this by showing that any disjoint cover by two closed sets implies
        -- that one of these closed sets must contain our whole thing.
        -- To reduce to the case where the cover is disjoint on all of `α` we need that `s` is closed
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
x : α
⊢ IsPreconnected (⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z)
[PROOFSTEP]
have hs : @IsClosed α _ (⋂ Z : { Z : Set α // IsClopen Z ∧ x ∈ Z }, Z) := isClosed_iInter fun Z => Z.2.1.2
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
x : α
hs : IsClosed (⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z)
⊢ IsPreconnected (⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z)
[PROOFSTEP]
rw [isPreconnected_iff_subset_of_fully_disjoint_closed hs]
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
x : α
hs : IsClosed (⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z)
⊢ ∀ (u v : Set α),
    IsClosed u →
      IsClosed v →
        ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ u ∪ v →
          Disjoint u v → ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ u ∨ ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ v
[PROOFSTEP]
intro a b ha hb hab ab_disj
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
x : α
hs : IsClosed (⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z)
a b : Set α
ha : IsClosed a
hb : IsClosed b
hab : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∪ b
ab_disj : Disjoint a b
⊢ ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∨ ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ b
[PROOFSTEP]
haveI :=
  @normalOfCompactT2 α _ _
    _
      -- Since our space is normal, we get two larger disjoint open sets containing the disjoint
        -- closed sets. If we can show that our intersection is a subset of any of these we can then
        -- "descend" this to show that it is a subset of either a or b.
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
x : α
hs : IsClosed (⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z)
a b : Set α
ha : IsClosed a
hb : IsClosed b
hab : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∪ b
ab_disj : Disjoint a b
this : NormalSpace α
⊢ ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∨ ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ b
[PROOFSTEP]
rcases normal_separation ha hb ab_disj with ⟨u, v, hu, hv, hau, hbv, huv⟩
[GOAL]
case intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
x : α
hs : IsClosed (⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z)
a b : Set α
ha : IsClosed a
hb : IsClosed b
hab : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∪ b
ab_disj : Disjoint a b
this : NormalSpace α
u v : Set α
hu : IsOpen u
hv : IsOpen v
hau : a ⊆ u
hbv : b ⊆ v
huv : Disjoint u v
⊢ ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∨ ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ b
[PROOFSTEP]
obtain ⟨Z, H⟩ : ∃ Z : Set α, IsClopen Z ∧ x ∈ Z ∧ Z ⊆ u ∪ v
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
x : α
hs : IsClosed (⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z)
a b : Set α
ha : IsClosed a
hb : IsClosed b
hab : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∪ b
ab_disj : Disjoint a b
this : NormalSpace α
u v : Set α
hu : IsOpen u
hv : IsOpen v
hau : a ⊆ u
hbv : b ⊆ v
huv : Disjoint u v
⊢ ∃ Z, IsClopen Z ∧ x ∈ Z ∧ Z ⊆ u ∪ v
[PROOFSTEP]
have H1 :=
  (hu.union hv).isClosed_compl.isCompact.inter_iInter_nonempty (fun Z : { Z : Set α // IsClopen Z ∧ x ∈ Z } => Z)
    fun Z => Z.2.1.2
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
x : α
hs : IsClosed (⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z)
a b : Set α
ha : IsClosed a
hb : IsClosed b
hab : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∪ b
ab_disj : Disjoint a b
this : NormalSpace α
u v : Set α
hu : IsOpen u
hv : IsOpen v
hau : a ⊆ u
hbv : b ⊆ v
huv : Disjoint u v
H1 :
  (∀ (t : Finset { Z // IsClopen Z ∧ x ∈ Z }),
      Set.Nonempty ((u ∪ v)ᶜ ∩ ⋂ (i : { Z // IsClopen Z ∧ x ∈ Z }) (_ : i ∈ t), (fun Z => ↑Z) i)) →
    Set.Nonempty ((u ∪ v)ᶜ ∩ ⋂ (i : { Z // IsClopen Z ∧ x ∈ Z }), (fun Z => ↑Z) i)
⊢ ∃ Z, IsClopen Z ∧ x ∈ Z ∧ Z ⊆ u ∪ v
[PROOFSTEP]
rw [← not_disjoint_iff_nonempty_inter, imp_not_comm, not_forall] at H1 
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
x : α
hs : IsClosed (⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z)
a b : Set α
ha : IsClosed a
hb : IsClosed b
hab : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∪ b
ab_disj : Disjoint a b
this : NormalSpace α
u v : Set α
hu : IsOpen u
hv : IsOpen v
hau : a ⊆ u
hbv : b ⊆ v
huv : Disjoint u v
H1 :
  Disjoint (u ∪ v)ᶜ (⋂ (i : { Z // IsClopen Z ∧ x ∈ Z }), (fun Z => ↑Z) i) →
    ∃ x_1, ¬Set.Nonempty ((u ∪ v)ᶜ ∩ ⋂ (i : { Z // IsClopen Z ∧ x ∈ Z }) (_ : i ∈ x_1), (fun Z => ↑Z) i)
⊢ ∃ Z, IsClopen Z ∧ x ∈ Z ∧ Z ⊆ u ∪ v
[PROOFSTEP]
cases' H1 (disjoint_compl_left_iff_subset.2 <| hab.trans <| union_subset_union hau hbv) with Zi H2
[GOAL]
case intro
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
x : α
hs : IsClosed (⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z)
a b : Set α
ha : IsClosed a
hb : IsClosed b
hab : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∪ b
ab_disj : Disjoint a b
this : NormalSpace α
u v : Set α
hu : IsOpen u
hv : IsOpen v
hau : a ⊆ u
hbv : b ⊆ v
huv : Disjoint u v
H1 :
  Disjoint (u ∪ v)ᶜ (⋂ (i : { Z // IsClopen Z ∧ x ∈ Z }), (fun Z => ↑Z) i) →
    ∃ x_1, ¬Set.Nonempty ((u ∪ v)ᶜ ∩ ⋂ (i : { Z // IsClopen Z ∧ x ∈ Z }) (_ : i ∈ x_1), (fun Z => ↑Z) i)
Zi : Finset { Z // IsClopen Z ∧ x ∈ Z }
H2 : ¬Set.Nonempty ((u ∪ v)ᶜ ∩ ⋂ (i : { Z // IsClopen Z ∧ x ∈ Z }) (_ : i ∈ Zi), (fun Z => ↑Z) i)
⊢ ∃ Z, IsClopen Z ∧ x ∈ Z ∧ Z ⊆ u ∪ v
[PROOFSTEP]
refine' ⟨⋂ U ∈ Zi, Subtype.val U, _, _, _⟩
[GOAL]
case intro.refine'_1
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
x : α
hs : IsClosed (⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z)
a b : Set α
ha : IsClosed a
hb : IsClosed b
hab : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∪ b
ab_disj : Disjoint a b
this : NormalSpace α
u v : Set α
hu : IsOpen u
hv : IsOpen v
hau : a ⊆ u
hbv : b ⊆ v
huv : Disjoint u v
H1 :
  Disjoint (u ∪ v)ᶜ (⋂ (i : { Z // IsClopen Z ∧ x ∈ Z }), (fun Z => ↑Z) i) →
    ∃ x_1, ¬Set.Nonempty ((u ∪ v)ᶜ ∩ ⋂ (i : { Z // IsClopen Z ∧ x ∈ Z }) (_ : i ∈ x_1), (fun Z => ↑Z) i)
Zi : Finset { Z // IsClopen Z ∧ x ∈ Z }
H2 : ¬Set.Nonempty ((u ∪ v)ᶜ ∩ ⋂ (i : { Z // IsClopen Z ∧ x ∈ Z }) (_ : i ∈ Zi), (fun Z => ↑Z) i)
⊢ IsClopen (⋂ (U : { Z // IsClopen Z ∧ x ∈ Z }) (_ : U ∈ Zi), ↑U)
[PROOFSTEP]
exact isClopen_biInter_finset fun Z _ => Z.2.1
[GOAL]
case intro.refine'_2
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
x : α
hs : IsClosed (⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z)
a b : Set α
ha : IsClosed a
hb : IsClosed b
hab : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∪ b
ab_disj : Disjoint a b
this : NormalSpace α
u v : Set α
hu : IsOpen u
hv : IsOpen v
hau : a ⊆ u
hbv : b ⊆ v
huv : Disjoint u v
H1 :
  Disjoint (u ∪ v)ᶜ (⋂ (i : { Z // IsClopen Z ∧ x ∈ Z }), (fun Z => ↑Z) i) →
    ∃ x_1, ¬Set.Nonempty ((u ∪ v)ᶜ ∩ ⋂ (i : { Z // IsClopen Z ∧ x ∈ Z }) (_ : i ∈ x_1), (fun Z => ↑Z) i)
Zi : Finset { Z // IsClopen Z ∧ x ∈ Z }
H2 : ¬Set.Nonempty ((u ∪ v)ᶜ ∩ ⋂ (i : { Z // IsClopen Z ∧ x ∈ Z }) (_ : i ∈ Zi), (fun Z => ↑Z) i)
⊢ x ∈ ⋂ (U : { Z // IsClopen Z ∧ x ∈ Z }) (_ : U ∈ Zi), ↑U
[PROOFSTEP]
exact mem_iInter₂.2 fun Z _ => Z.2.2
[GOAL]
case intro.refine'_3
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
x : α
hs : IsClosed (⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z)
a b : Set α
ha : IsClosed a
hb : IsClosed b
hab : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∪ b
ab_disj : Disjoint a b
this : NormalSpace α
u v : Set α
hu : IsOpen u
hv : IsOpen v
hau : a ⊆ u
hbv : b ⊆ v
huv : Disjoint u v
H1 :
  Disjoint (u ∪ v)ᶜ (⋂ (i : { Z // IsClopen Z ∧ x ∈ Z }), (fun Z => ↑Z) i) →
    ∃ x_1, ¬Set.Nonempty ((u ∪ v)ᶜ ∩ ⋂ (i : { Z // IsClopen Z ∧ x ∈ Z }) (_ : i ∈ x_1), (fun Z => ↑Z) i)
Zi : Finset { Z // IsClopen Z ∧ x ∈ Z }
H2 : ¬Set.Nonempty ((u ∪ v)ᶜ ∩ ⋂ (i : { Z // IsClopen Z ∧ x ∈ Z }) (_ : i ∈ Zi), (fun Z => ↑Z) i)
⊢ ⋂ (U : { Z // IsClopen Z ∧ x ∈ Z }) (_ : U ∈ Zi), ↑U ⊆ u ∪ v
[PROOFSTEP]
rwa [← disjoint_compl_left_iff_subset, disjoint_iff_inter_eq_empty, ← not_nonempty_iff_eq_empty]
  -- So, we get a disjoint decomposition `Z = Z ∩ u ∪ Z ∩ v` of clopen sets. The intersection of all
    -- clopen neighbourhoods will then lie in whichever of u or v x lies in and hence will be a subset
    -- of either a or b.
[GOAL]
case intro.intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
x : α
hs : IsClosed (⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z)
a b : Set α
ha : IsClosed a
hb : IsClosed b
hab : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∪ b
ab_disj : Disjoint a b
this : NormalSpace α
u v : Set α
hu : IsOpen u
hv : IsOpen v
hau : a ⊆ u
hbv : b ⊆ v
huv : Disjoint u v
Z : Set α
H : IsClopen Z ∧ x ∈ Z ∧ Z ⊆ u ∪ v
⊢ ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∨ ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ b
[PROOFSTEP]
have H1 := isClopen_inter_of_disjoint_cover_clopen H.1 H.2.2 hu hv huv
[GOAL]
case intro.intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
x : α
hs : IsClosed (⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z)
a b : Set α
ha : IsClosed a
hb : IsClosed b
hab : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∪ b
ab_disj : Disjoint a b
this : NormalSpace α
u v : Set α
hu : IsOpen u
hv : IsOpen v
hau : a ⊆ u
hbv : b ⊆ v
huv : Disjoint u v
Z : Set α
H : IsClopen Z ∧ x ∈ Z ∧ Z ⊆ u ∪ v
H1 : IsClopen (Z ∩ u)
⊢ ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∨ ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ b
[PROOFSTEP]
rw [union_comm] at H 
[GOAL]
case intro.intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
x : α
hs : IsClosed (⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z)
a b : Set α
ha : IsClosed a
hb : IsClosed b
hab : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∪ b
ab_disj : Disjoint a b
this : NormalSpace α
u v : Set α
hu : IsOpen u
hv : IsOpen v
hau : a ⊆ u
hbv : b ⊆ v
huv : Disjoint u v
Z : Set α
H : IsClopen Z ∧ x ∈ Z ∧ Z ⊆ v ∪ u
H1 : IsClopen (Z ∩ u)
⊢ ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∨ ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ b
[PROOFSTEP]
have H2 := isClopen_inter_of_disjoint_cover_clopen H.1 H.2.2 hv hu huv.symm
[GOAL]
case intro.intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
x : α
hs : IsClosed (⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z)
a b : Set α
ha : IsClosed a
hb : IsClosed b
hab : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∪ b
ab_disj : Disjoint a b
this : NormalSpace α
u v : Set α
hu : IsOpen u
hv : IsOpen v
hau : a ⊆ u
hbv : b ⊆ v
huv : Disjoint u v
Z : Set α
H : IsClopen Z ∧ x ∈ Z ∧ Z ⊆ v ∪ u
H1 : IsClopen (Z ∩ u)
H2 : IsClopen (Z ∩ v)
⊢ ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∨ ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ b
[PROOFSTEP]
by_cases hxu : x ∈ u <;> [left; right]
  -- The x ∈ u case.
[GOAL]
case intro.intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
x : α
hs : IsClosed (⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z)
a b : Set α
ha : IsClosed a
hb : IsClosed b
hab : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∪ b
ab_disj : Disjoint a b
this : NormalSpace α
u v : Set α
hu : IsOpen u
hv : IsOpen v
hau : a ⊆ u
hbv : b ⊆ v
huv : Disjoint u v
Z : Set α
H : IsClopen Z ∧ x ∈ Z ∧ Z ⊆ v ∪ u
H1 : IsClopen (Z ∩ u)
H2 : IsClopen (Z ∩ v)
⊢ ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∨ ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ b
[PROOFSTEP]
by_cases hxu : x ∈ u
[GOAL]
case pos
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
x : α
hs : IsClosed (⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z)
a b : Set α
ha : IsClosed a
hb : IsClosed b
hab : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∪ b
ab_disj : Disjoint a b
this : NormalSpace α
u v : Set α
hu : IsOpen u
hv : IsOpen v
hau : a ⊆ u
hbv : b ⊆ v
huv : Disjoint u v
Z : Set α
H : IsClopen Z ∧ x ∈ Z ∧ Z ⊆ v ∪ u
H1 : IsClopen (Z ∩ u)
H2 : IsClopen (Z ∩ v)
hxu : x ∈ u
⊢ ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∨ ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ b
[PROOFSTEP]
left
[GOAL]
case neg
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
x : α
hs : IsClosed (⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z)
a b : Set α
ha : IsClosed a
hb : IsClosed b
hab : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∪ b
ab_disj : Disjoint a b
this : NormalSpace α
u v : Set α
hu : IsOpen u
hv : IsOpen v
hau : a ⊆ u
hbv : b ⊆ v
huv : Disjoint u v
Z : Set α
H : IsClopen Z ∧ x ∈ Z ∧ Z ⊆ v ∪ u
H1 : IsClopen (Z ∩ u)
H2 : IsClopen (Z ∩ v)
hxu : ¬x ∈ u
⊢ ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∨ ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ b
[PROOFSTEP]
right
[GOAL]
case pos.h
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
x : α
hs : IsClosed (⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z)
a b : Set α
ha : IsClosed a
hb : IsClosed b
hab : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∪ b
ab_disj : Disjoint a b
this : NormalSpace α
u v : Set α
hu : IsOpen u
hv : IsOpen v
hau : a ⊆ u
hbv : b ⊆ v
huv : Disjoint u v
Z : Set α
H : IsClopen Z ∧ x ∈ Z ∧ Z ⊆ v ∪ u
H1 : IsClopen (Z ∩ u)
H2 : IsClopen (Z ∩ v)
hxu : x ∈ u
⊢ ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a
[PROOFSTEP]
suffices ⋂ Z : { Z : Set α // IsClopen Z ∧ x ∈ Z }, ↑Z ⊆ u from Disjoint.left_le_of_le_sup_right hab (huv.mono this hbv)
[GOAL]
case pos.h
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
x : α
hs : IsClosed (⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z)
a b : Set α
ha : IsClosed a
hb : IsClosed b
hab : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∪ b
ab_disj : Disjoint a b
this : NormalSpace α
u v : Set α
hu : IsOpen u
hv : IsOpen v
hau : a ⊆ u
hbv : b ⊆ v
huv : Disjoint u v
Z : Set α
H : IsClopen Z ∧ x ∈ Z ∧ Z ⊆ v ∪ u
H1 : IsClopen (Z ∩ u)
H2 : IsClopen (Z ∩ v)
hxu : x ∈ u
⊢ ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ u
[PROOFSTEP]
apply Subset.trans _ (inter_subset_right Z u)
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
x : α
hs : IsClosed (⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z)
a b : Set α
ha : IsClosed a
hb : IsClosed b
hab : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∪ b
ab_disj : Disjoint a b
this : NormalSpace α
u v : Set α
hu : IsOpen u
hv : IsOpen v
hau : a ⊆ u
hbv : b ⊆ v
huv : Disjoint u v
Z : Set α
H : IsClopen Z ∧ x ∈ Z ∧ Z ⊆ v ∪ u
H1 : IsClopen (Z ∩ u)
H2 : IsClopen (Z ∩ v)
hxu : x ∈ u
⊢ ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ Z ∩ u
[PROOFSTEP]
exact
  iInter_subset (fun Z : { Z : Set α // IsClopen Z ∧ x ∈ Z } => Z.1)
    ⟨Z ∩ u, H1, mem_inter H.2.1 hxu⟩
      -- If x ∉ u, we get x ∈ v since x ∈ u ∪ v. The rest is then like the x ∈ u case.
[GOAL]
case neg.h
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
x : α
hs : IsClosed (⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z)
a b : Set α
ha : IsClosed a
hb : IsClosed b
hab : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∪ b
ab_disj : Disjoint a b
this : NormalSpace α
u v : Set α
hu : IsOpen u
hv : IsOpen v
hau : a ⊆ u
hbv : b ⊆ v
huv : Disjoint u v
Z : Set α
H : IsClopen Z ∧ x ∈ Z ∧ Z ⊆ v ∪ u
H1 : IsClopen (Z ∩ u)
H2 : IsClopen (Z ∩ v)
hxu : ¬x ∈ u
⊢ ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ b
[PROOFSTEP]
have h1 : x ∈ v := (hab.trans (union_subset_union hau hbv) (mem_iInter.2 fun i => i.2.2)).resolve_left hxu
[GOAL]
case neg.h
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
x : α
hs : IsClosed (⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z)
a b : Set α
ha : IsClosed a
hb : IsClosed b
hab : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∪ b
ab_disj : Disjoint a b
this : NormalSpace α
u v : Set α
hu : IsOpen u
hv : IsOpen v
hau : a ⊆ u
hbv : b ⊆ v
huv : Disjoint u v
Z : Set α
H : IsClopen Z ∧ x ∈ Z ∧ Z ⊆ v ∪ u
H1 : IsClopen (Z ∩ u)
H2 : IsClopen (Z ∩ v)
hxu : ¬x ∈ u
h1 : x ∈ v
⊢ ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ b
[PROOFSTEP]
suffices ⋂ Z : { Z : Set α // IsClopen Z ∧ x ∈ Z }, ↑Z ⊆ v from (huv.symm.mono this hau).left_le_of_le_sup_left hab
[GOAL]
case neg.h
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
x : α
hs : IsClosed (⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z)
a b : Set α
ha : IsClosed a
hb : IsClosed b
hab : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∪ b
ab_disj : Disjoint a b
this : NormalSpace α
u v : Set α
hu : IsOpen u
hv : IsOpen v
hau : a ⊆ u
hbv : b ⊆ v
huv : Disjoint u v
Z : Set α
H : IsClopen Z ∧ x ∈ Z ∧ Z ⊆ v ∪ u
H1 : IsClopen (Z ∩ u)
H2 : IsClopen (Z ∩ v)
hxu : ¬x ∈ u
h1 : x ∈ v
⊢ ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ v
[PROOFSTEP]
refine Subset.trans ?_ (inter_subset_right Z v)
[GOAL]
case neg.h
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
x : α
hs : IsClosed (⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z)
a b : Set α
ha : IsClosed a
hb : IsClosed b
hab : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ a ∪ b
ab_disj : Disjoint a b
this : NormalSpace α
u v : Set α
hu : IsOpen u
hv : IsOpen v
hau : a ⊆ u
hbv : b ⊆ v
huv : Disjoint u v
Z : Set α
H : IsClopen Z ∧ x ∈ Z ∧ Z ⊆ v ∪ u
H1 : IsClopen (Z ∩ u)
H2 : IsClopen (Z ∩ v)
hxu : ¬x ∈ u
h1 : x ∈ v
⊢ ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z ⊆ Z ∩ v
[PROOFSTEP]
exact iInter_subset (fun Z : { Z : Set α // IsClopen Z ∧ x ∈ Z } => Z.1) ⟨Z ∩ v, H2, mem_inter H.2.1 h1⟩
[GOAL]
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
h : IsTopologicalBasis {s | IsClopen s}
⊢ TotallySeparatedSpace α
[PROOFSTEP]
constructor
[GOAL]
case isTotallySeparated_univ
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
h : IsTopologicalBasis {s | IsClopen s}
⊢ IsTotallySeparated univ
[PROOFSTEP]
rintro x - y - hxy
[GOAL]
case isTotallySeparated_univ
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
h : IsTopologicalBasis {s | IsClopen s}
x y : α
hxy : x ≠ y
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ x ∈ u ∧ y ∈ v ∧ univ ⊆ u ∪ v ∧ Disjoint u v
[PROOFSTEP]
rcases h.mem_nhds_iff.mp (isOpen_ne.mem_nhds hxy) with ⟨U, hU, hxU, hyU⟩
[GOAL]
case isTotallySeparated_univ.intro.intro.intro
α : Type u
β : Type v
inst✝¹ : TopologicalSpace α
inst✝ : T1Space α
h : IsTopologicalBasis {s | IsClopen s}
x y : α
hxy : x ≠ y
U : Set α
hU : U ∈ {s | IsClopen s}
hxU : x ∈ U
hyU : U ⊆ {y_1 | y_1 ≠ y}
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ x ∈ u ∧ y ∈ v ∧ univ ⊆ u ∪ v ∧ Disjoint u v
[PROOFSTEP]
exact ⟨U, Uᶜ, hU.isOpen, hU.compl.isOpen, hxU, fun h => hyU h rfl, (union_compl_self U).superset, disjoint_compl_right⟩
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
⊢ TotallyDisconnectedSpace α ↔ TotallySeparatedSpace α
[PROOFSTEP]
refine ⟨fun h => ⟨fun x _ y _ => ?_⟩, @TotallySeparatedSpace.totallyDisconnectedSpace _ _⟩
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
h : TotallyDisconnectedSpace α
x : α
x✝¹ : x ∈ univ
y : α
x✝ : y ∈ univ
⊢ x ≠ y → ∃ u v, IsOpen u ∧ IsOpen v ∧ x ∈ u ∧ y ∈ v ∧ univ ⊆ u ∪ v ∧ Disjoint u v
[PROOFSTEP]
contrapose!
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
h : TotallyDisconnectedSpace α
x : α
x✝¹ : x ∈ univ
y : α
x✝ : y ∈ univ
⊢ (∀ (u v : Set α), IsOpen u → IsOpen v → x ∈ u → y ∈ v → univ ⊆ u ∪ v → ¬Disjoint u v) → x = y
[PROOFSTEP]
intro hyp
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
h : TotallyDisconnectedSpace α
x : α
x✝¹ : x ∈ univ
y : α
x✝ : y ∈ univ
hyp : ∀ (u v : Set α), IsOpen u → IsOpen v → x ∈ u → y ∈ v → univ ⊆ u ∪ v → ¬Disjoint u v
⊢ x = y
[PROOFSTEP]
suffices x ∈ connectedComponent y by
  simpa [totallyDisconnectedSpace_iff_connectedComponent_singleton.1 h y, mem_singleton_iff]
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
h : TotallyDisconnectedSpace α
x : α
x✝¹ : x ∈ univ
y : α
x✝ : y ∈ univ
hyp : ∀ (u v : Set α), IsOpen u → IsOpen v → x ∈ u → y ∈ v → univ ⊆ u ∪ v → ¬Disjoint u v
this : x ∈ connectedComponent y
⊢ x = y
[PROOFSTEP]
simpa [totallyDisconnectedSpace_iff_connectedComponent_singleton.1 h y, mem_singleton_iff]
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
h : TotallyDisconnectedSpace α
x : α
x✝¹ : x ∈ univ
y : α
x✝ : y ∈ univ
hyp : ∀ (u v : Set α), IsOpen u → IsOpen v → x ∈ u → y ∈ v → univ ⊆ u ∪ v → ¬Disjoint u v
⊢ x ∈ connectedComponent y
[PROOFSTEP]
rw [connectedComponent_eq_iInter_clopen, mem_iInter]
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
h : TotallyDisconnectedSpace α
x : α
x✝¹ : x ∈ univ
y : α
x✝ : y ∈ univ
hyp : ∀ (u v : Set α), IsOpen u → IsOpen v → x ∈ u → y ∈ v → univ ⊆ u ∪ v → ¬Disjoint u v
⊢ ∀ (i : { Z // IsClopen Z ∧ y ∈ Z }), x ∈ ↑i
[PROOFSTEP]
rintro ⟨w : Set α, hw : IsClopen w, hy : y ∈ w⟩
[GOAL]
case mk.intro
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
h : TotallyDisconnectedSpace α
x : α
x✝¹ : x ∈ univ
y : α
x✝ : y ∈ univ
hyp : ∀ (u v : Set α), IsOpen u → IsOpen v → x ∈ u → y ∈ v → univ ⊆ u ∪ v → ¬Disjoint u v
w : Set α
hw : IsClopen w
hy : y ∈ w
⊢ x ∈ ↑{ val := w, property := (_ : IsClopen w ∧ y ∈ w) }
[PROOFSTEP]
by_contra hx
[GOAL]
case mk.intro
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
h : TotallyDisconnectedSpace α
x : α
x✝¹ : x ∈ univ
y : α
x✝ : y ∈ univ
hyp : ∀ (u v : Set α), IsOpen u → IsOpen v → x ∈ u → y ∈ v → univ ⊆ u ∪ v → ¬Disjoint u v
w : Set α
hw : IsClopen w
hy : y ∈ w
hx : ¬x ∈ ↑{ val := w, property := (_ : IsClopen w ∧ y ∈ w) }
⊢ False
[PROOFSTEP]
exact hyp wᶜ w hw.2.isOpen_compl hw.1 hx hy (@isCompl_compl _ w _).symm.codisjoint.top_le disjoint_compl_left
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : CompactSpace α
inst✝ : TotallyDisconnectedSpace α
x : α
U : Set α
⊢ U ∈ 𝓝 x ↔ ∃ i, (x ∈ i ∧ IsClopen i) ∧ id i ⊆ U
[PROOFSTEP]
constructor
[GOAL]
case mp
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : CompactSpace α
inst✝ : TotallyDisconnectedSpace α
x : α
U : Set α
⊢ U ∈ 𝓝 x → ∃ i, (x ∈ i ∧ IsClopen i) ∧ id i ⊆ U
[PROOFSTEP]
have hx : connectedComponent x = { x } := totallyDisconnectedSpace_iff_connectedComponent_singleton.mp ‹_› x
[GOAL]
case mp
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : CompactSpace α
inst✝ : TotallyDisconnectedSpace α
x : α
U : Set α
hx : connectedComponent x = {x}
⊢ U ∈ 𝓝 x → ∃ i, (x ∈ i ∧ IsClopen i) ∧ id i ⊆ U
[PROOFSTEP]
rw [connectedComponent_eq_iInter_clopen] at hx 
[GOAL]
case mp
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : CompactSpace α
inst✝ : TotallyDisconnectedSpace α
x : α
U : Set α
hx : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z = {x}
⊢ U ∈ 𝓝 x → ∃ i, (x ∈ i ∧ IsClopen i) ∧ id i ⊆ U
[PROOFSTEP]
intro hU
[GOAL]
case mp
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : CompactSpace α
inst✝ : TotallyDisconnectedSpace α
x : α
U : Set α
hx : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z = {x}
hU : U ∈ 𝓝 x
⊢ ∃ i, (x ∈ i ∧ IsClopen i) ∧ id i ⊆ U
[PROOFSTEP]
let N := { Z // IsClopen Z ∧ x ∈ Z }
[GOAL]
case mp
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : CompactSpace α
inst✝ : TotallyDisconnectedSpace α
x : α
U : Set α
hx : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z = {x}
hU : U ∈ 𝓝 x
N : Type u := { Z // IsClopen Z ∧ x ∈ Z }
⊢ ∃ i, (x ∈ i ∧ IsClopen i) ∧ id i ⊆ U
[PROOFSTEP]
suffices : ∃ Z : N, Z.val ⊆ U
[GOAL]
case mp
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : CompactSpace α
inst✝ : TotallyDisconnectedSpace α
x : α
U : Set α
hx : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z = {x}
hU : U ∈ 𝓝 x
N : Type u := { Z // IsClopen Z ∧ x ∈ Z }
this : ∃ Z, ↑Z ⊆ U
⊢ ∃ i, (x ∈ i ∧ IsClopen i) ∧ id i ⊆ U
[PROOFSTEP]
rcases this with ⟨⟨s, hs, hs'⟩, hs''⟩
[GOAL]
case mp.intro.mk.intro
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : CompactSpace α
inst✝ : TotallyDisconnectedSpace α
x : α
U : Set α
hx : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z = {x}
hU : U ∈ 𝓝 x
N : Type u := { Z // IsClopen Z ∧ x ∈ Z }
s : Set α
hs : IsClopen s
hs' : x ∈ s
hs'' : ↑{ val := s, property := (_ : IsClopen s ∧ x ∈ s) } ⊆ U
⊢ ∃ i, (x ∈ i ∧ IsClopen i) ∧ id i ⊆ U
[PROOFSTEP]
exact ⟨s, ⟨hs', hs⟩, hs''⟩
[GOAL]
case this
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : CompactSpace α
inst✝ : TotallyDisconnectedSpace α
x : α
U : Set α
hx : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z = {x}
hU : U ∈ 𝓝 x
N : Type u := { Z // IsClopen Z ∧ x ∈ Z }
⊢ ∃ Z, ↑Z ⊆ U
[PROOFSTEP]
haveI : Nonempty N := ⟨⟨univ, isClopen_univ, mem_univ x⟩⟩
[GOAL]
case this
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : CompactSpace α
inst✝ : TotallyDisconnectedSpace α
x : α
U : Set α
hx : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z = {x}
hU : U ∈ 𝓝 x
N : Type u := { Z // IsClopen Z ∧ x ∈ Z }
this : Nonempty N
⊢ ∃ Z, ↑Z ⊆ U
[PROOFSTEP]
have hNcl : ∀ Z : N, IsClosed Z.val := fun Z => Z.property.1.2
[GOAL]
case this
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : CompactSpace α
inst✝ : TotallyDisconnectedSpace α
x : α
U : Set α
hx : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z = {x}
hU : U ∈ 𝓝 x
N : Type u := { Z // IsClopen Z ∧ x ∈ Z }
this : Nonempty N
hNcl : ∀ (Z : N), IsClosed ↑Z
⊢ ∃ Z, ↑Z ⊆ U
[PROOFSTEP]
have hdir : Directed Superset fun Z : N => Z.val :=
  by
  rintro ⟨s, hs, hxs⟩ ⟨t, ht, hxt⟩
  exact ⟨⟨s ∩ t, hs.inter ht, ⟨hxs, hxt⟩⟩, inter_subset_left s t, inter_subset_right s t⟩
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : CompactSpace α
inst✝ : TotallyDisconnectedSpace α
x : α
U : Set α
hx : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z = {x}
hU : U ∈ 𝓝 x
N : Type u := { Z // IsClopen Z ∧ x ∈ Z }
this : Nonempty N
hNcl : ∀ (Z : N), IsClosed ↑Z
⊢ Directed Superset fun Z => ↑Z
[PROOFSTEP]
rintro ⟨s, hs, hxs⟩ ⟨t, ht, hxt⟩
[GOAL]
case mk.intro.mk.intro
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : CompactSpace α
inst✝ : TotallyDisconnectedSpace α
x : α
U : Set α
hx : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z = {x}
hU : U ∈ 𝓝 x
N : Type u := { Z // IsClopen Z ∧ x ∈ Z }
this : Nonempty N
hNcl : ∀ (Z : N), IsClosed ↑Z
s : Set α
hs : IsClopen s
hxs : x ∈ s
t : Set α
ht : IsClopen t
hxt : x ∈ t
⊢ ∃ z,
    (fun Z => ↑Z) { val := s, property := (_ : IsClopen s ∧ x ∈ s) } ⊇ (fun Z => ↑Z) z ∧
      (fun Z => ↑Z) { val := t, property := (_ : IsClopen t ∧ x ∈ t) } ⊇ (fun Z => ↑Z) z
[PROOFSTEP]
exact ⟨⟨s ∩ t, hs.inter ht, ⟨hxs, hxt⟩⟩, inter_subset_left s t, inter_subset_right s t⟩
[GOAL]
case this
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : CompactSpace α
inst✝ : TotallyDisconnectedSpace α
x : α
U : Set α
hx : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z = {x}
hU : U ∈ 𝓝 x
N : Type u := { Z // IsClopen Z ∧ x ∈ Z }
this : Nonempty N
hNcl : ∀ (Z : N), IsClosed ↑Z
hdir : Directed Superset fun Z => ↑Z
⊢ ∃ Z, ↑Z ⊆ U
[PROOFSTEP]
have h_nhd : ∀ y ∈ ⋂ Z : N, Z.val, U ∈ 𝓝 y := fun y y_in =>
  by
  erw [hx, mem_singleton_iff] at y_in 
  rwa [y_in]
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : CompactSpace α
inst✝ : TotallyDisconnectedSpace α
x : α
U : Set α
hx : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z = {x}
hU : U ∈ 𝓝 x
N : Type u := { Z // IsClopen Z ∧ x ∈ Z }
this : Nonempty N
hNcl : ∀ (Z : N), IsClosed ↑Z
hdir : Directed Superset fun Z => ↑Z
y : α
y_in : y ∈ ⋂ (Z : N), ↑Z
⊢ U ∈ 𝓝 y
[PROOFSTEP]
erw [hx, mem_singleton_iff] at y_in 
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : CompactSpace α
inst✝ : TotallyDisconnectedSpace α
x : α
U : Set α
hx : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z = {x}
hU : U ∈ 𝓝 x
N : Type u := { Z // IsClopen Z ∧ x ∈ Z }
this : Nonempty N
hNcl : ∀ (Z : N), IsClosed ↑Z
hdir : Directed Superset fun Z => ↑Z
y : α
y_in : y = x
⊢ U ∈ 𝓝 y
[PROOFSTEP]
rwa [y_in]
[GOAL]
case this
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : CompactSpace α
inst✝ : TotallyDisconnectedSpace α
x : α
U : Set α
hx : ⋂ (Z : { Z // IsClopen Z ∧ x ∈ Z }), ↑Z = {x}
hU : U ∈ 𝓝 x
N : Type u := { Z // IsClopen Z ∧ x ∈ Z }
this : Nonempty N
hNcl : ∀ (Z : N), IsClosed ↑Z
hdir : Directed Superset fun Z => ↑Z
h_nhd : ∀ (y : α), y ∈ ⋂ (Z : N), ↑Z → U ∈ 𝓝 y
⊢ ∃ Z, ↑Z ⊆ U
[PROOFSTEP]
exact exists_subset_nhds_of_compactSpace hdir hNcl h_nhd
[GOAL]
case mpr
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : CompactSpace α
inst✝ : TotallyDisconnectedSpace α
x : α
U : Set α
⊢ (∃ i, (x ∈ i ∧ IsClopen i) ∧ id i ⊆ U) → U ∈ 𝓝 x
[PROOFSTEP]
rintro ⟨V, ⟨hxV, V_op, -⟩, hUV : V ⊆ U⟩
[GOAL]
case mpr.intro.intro.intro.intro
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : CompactSpace α
inst✝ : TotallyDisconnectedSpace α
x : α
U V : Set α
hUV : V ⊆ U
hxV : x ∈ V
V_op : IsOpen V
⊢ U ∈ 𝓝 x
[PROOFSTEP]
rw [mem_nhds_iff]
[GOAL]
case mpr.intro.intro.intro.intro
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : CompactSpace α
inst✝ : TotallyDisconnectedSpace α
x : α
U V : Set α
hUV : V ⊆ U
hxV : x ∈ V
V_op : IsOpen V
⊢ ∃ t, t ⊆ U ∧ IsOpen t ∧ x ∈ t
[PROOFSTEP]
exact ⟨V, hUV, V_op, hxV⟩
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : CompactSpace α
inst✝ : TotallyDisconnectedSpace α
⊢ IsTopologicalBasis {s | IsClopen s}
[PROOFSTEP]
apply isTopologicalBasis_of_open_of_nhds fun U (hU : IsClopen U) => hU.1
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : CompactSpace α
inst✝ : TotallyDisconnectedSpace α
⊢ ∀ (a : α) (u : Set α), a ∈ u → IsOpen u → ∃ v, (v ∈ fun U => IsOpen U ∧ IsClosed U) ∧ a ∈ v ∧ v ⊆ u
[PROOFSTEP]
intro x U hxU U_op
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : CompactSpace α
inst✝ : TotallyDisconnectedSpace α
x : α
U : Set α
hxU : x ∈ U
U_op : IsOpen U
⊢ ∃ v, (v ∈ fun U => IsOpen U ∧ IsClosed U) ∧ x ∈ v ∧ v ⊆ U
[PROOFSTEP]
have : U ∈ 𝓝 x := IsOpen.mem_nhds U_op hxU
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : CompactSpace α
inst✝ : TotallyDisconnectedSpace α
x : α
U : Set α
hxU : x ∈ U
U_op : IsOpen U
this : U ∈ 𝓝 x
⊢ ∃ v, (v ∈ fun U => IsOpen U ∧ IsClosed U) ∧ x ∈ v ∧ v ⊆ U
[PROOFSTEP]
rcases(nhds_basis_clopen x).mem_iff.mp this with ⟨V, ⟨hxV, hV⟩, hVU : V ⊆ U⟩
[GOAL]
case intro.intro.intro
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : CompactSpace α
inst✝ : TotallyDisconnectedSpace α
x : α
U : Set α
hxU : x ∈ U
U_op : IsOpen U
this : U ∈ 𝓝 x
V : Set α
hVU : V ⊆ U
hxV : x ∈ V
hV : IsClopen V
⊢ ∃ v, (v ∈ fun U => IsOpen U ∧ IsClosed U) ∧ x ∈ v ∧ v ⊆ U
[PROOFSTEP]
use V
[GOAL]
case h
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : CompactSpace α
inst✝ : TotallyDisconnectedSpace α
x : α
U : Set α
hxU : x ∈ U
U_op : IsOpen U
this : U ∈ 𝓝 x
V : Set α
hVU : V ⊆ U
hxV : x ∈ V
hV : IsClopen V
⊢ (V ∈ fun U => IsOpen U ∧ IsClosed U) ∧ x ∈ V ∧ V ⊆ U
[PROOFSTEP]
tauto
[GOAL]
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
H : Type u_1
inst✝³ : TopologicalSpace H
inst✝² : LocallyCompactSpace H
inst✝¹ : T2Space H
inst✝ : TotallyDisconnectedSpace H
⊢ IsTopologicalBasis {s | IsClopen s}
[PROOFSTEP]
refine isTopologicalBasis_of_open_of_nhds (fun u hu => hu.1) fun x U memU hU => ?_
[GOAL]
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
H : Type u_1
inst✝³ : TopologicalSpace H
inst✝² : LocallyCompactSpace H
inst✝¹ : T2Space H
inst✝ : TotallyDisconnectedSpace H
x : H
U : Set H
memU : x ∈ U
hU : IsOpen U
⊢ ∃ v, v ∈ {s | IsClopen s} ∧ x ∈ v ∧ v ⊆ U
[PROOFSTEP]
obtain ⟨s, comp, xs, sU⟩ := exists_compact_subset hU memU
[GOAL]
case intro.intro.intro
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
H : Type u_1
inst✝³ : TopologicalSpace H
inst✝² : LocallyCompactSpace H
inst✝¹ : T2Space H
inst✝ : TotallyDisconnectedSpace H
x : H
U : Set H
memU : x ∈ U
hU : IsOpen U
s : Set H
comp : IsCompact s
xs : x ∈ interior s
sU : s ⊆ U
⊢ ∃ v, v ∈ {s | IsClopen s} ∧ x ∈ v ∧ v ⊆ U
[PROOFSTEP]
let u : Set s := ((↑) : s → H) ⁻¹' interior s
[GOAL]
case intro.intro.intro
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
H : Type u_1
inst✝³ : TopologicalSpace H
inst✝² : LocallyCompactSpace H
inst✝¹ : T2Space H
inst✝ : TotallyDisconnectedSpace H
x : H
U : Set H
memU : x ∈ U
hU : IsOpen U
s : Set H
comp : IsCompact s
xs : x ∈ interior s
sU : s ⊆ U
u : Set ↑s := Subtype.val ⁻¹' interior s
⊢ ∃ v, v ∈ {s | IsClopen s} ∧ x ∈ v ∧ v ⊆ U
[PROOFSTEP]
have u_open_in_s : IsOpen u := isOpen_interior.preimage continuous_subtype_val
[GOAL]
case intro.intro.intro
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
H : Type u_1
inst✝³ : TopologicalSpace H
inst✝² : LocallyCompactSpace H
inst✝¹ : T2Space H
inst✝ : TotallyDisconnectedSpace H
x : H
U : Set H
memU : x ∈ U
hU : IsOpen U
s : Set H
comp : IsCompact s
xs : x ∈ interior s
sU : s ⊆ U
u : Set ↑s := Subtype.val ⁻¹' interior s
u_open_in_s : IsOpen u
⊢ ∃ v, v ∈ {s | IsClopen s} ∧ x ∈ v ∧ v ⊆ U
[PROOFSTEP]
lift x to s using interior_subset xs
[GOAL]
case intro.intro.intro.intro
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
H : Type u_1
inst✝³ : TopologicalSpace H
inst✝² : LocallyCompactSpace H
inst✝¹ : T2Space H
inst✝ : TotallyDisconnectedSpace H
U : Set H
hU : IsOpen U
s : Set H
comp : IsCompact s
sU : s ⊆ U
u : Set ↑s := Subtype.val ⁻¹' interior s
u_open_in_s : IsOpen u
x : { x // x ∈ s }
memU : ↑x ∈ U
xs : ↑x ∈ interior s
⊢ ∃ v, v ∈ {s | IsClopen s} ∧ ↑x ∈ v ∧ v ⊆ U
[PROOFSTEP]
haveI : CompactSpace s := isCompact_iff_compactSpace.1 comp
[GOAL]
case intro.intro.intro.intro
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
H : Type u_1
inst✝³ : TopologicalSpace H
inst✝² : LocallyCompactSpace H
inst✝¹ : T2Space H
inst✝ : TotallyDisconnectedSpace H
U : Set H
hU : IsOpen U
s : Set H
comp : IsCompact s
sU : s ⊆ U
u : Set ↑s := Subtype.val ⁻¹' interior s
u_open_in_s : IsOpen u
x : { x // x ∈ s }
memU : ↑x ∈ U
xs : ↑x ∈ interior s
this : CompactSpace ↑s
⊢ ∃ v, v ∈ {s | IsClopen s} ∧ ↑x ∈ v ∧ v ⊆ U
[PROOFSTEP]
obtain ⟨V : Set s, clopen_in_s, Vx, V_sub⟩ := compact_exists_clopen_in_open u_open_in_s xs
[GOAL]
case intro.intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
H : Type u_1
inst✝³ : TopologicalSpace H
inst✝² : LocallyCompactSpace H
inst✝¹ : T2Space H
inst✝ : TotallyDisconnectedSpace H
U : Set H
hU : IsOpen U
s : Set H
comp : IsCompact s
sU : s ⊆ U
u : Set ↑s := Subtype.val ⁻¹' interior s
u_open_in_s : IsOpen u
x : { x // x ∈ s }
memU : ↑x ∈ U
xs : ↑x ∈ interior s
this : CompactSpace ↑s
V : Set ↑s
clopen_in_s : IsClopen V
Vx : x ∈ V
V_sub : V ⊆ u
⊢ ∃ v, v ∈ {s | IsClopen s} ∧ ↑x ∈ v ∧ v ⊆ U
[PROOFSTEP]
have V_clopen : IsClopen (((↑) : s → H) '' V) :=
  by
  refine' ⟨_, comp.isClosed.closedEmbedding_subtype_val.closed_iff_image_closed.1 clopen_in_s.2⟩
  let v : Set u := ((↑) : u → s) ⁻¹' V
  have : ((↑) : u → H) = ((↑) : s → H) ∘ ((↑) : u → s) := rfl
  have f0 : Embedding ((↑) : u → H) := embedding_subtype_val.comp embedding_subtype_val
  have f1 : OpenEmbedding ((↑) : u → H) := by
    refine' ⟨f0, _⟩
    · have : Set.range ((↑) : u → H) = interior s :=
        by
        rw [this, Set.range_comp, Subtype.range_coe, Subtype.image_preimage_coe]
        apply Set.inter_eq_self_of_subset_left interior_subset
      rw [this]
      apply isOpen_interior
  have f2 : IsOpen v := clopen_in_s.1.preimage continuous_subtype_val
  have f3 : ((↑) : s → H) '' V = ((↑) : u → H) '' v := by
    rw [this, image_comp, Subtype.image_preimage_coe, inter_eq_self_of_subset_left V_sub]
  rw [f3]
  apply f1.isOpenMap v f2
[GOAL]
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
H : Type u_1
inst✝³ : TopologicalSpace H
inst✝² : LocallyCompactSpace H
inst✝¹ : T2Space H
inst✝ : TotallyDisconnectedSpace H
U : Set H
hU : IsOpen U
s : Set H
comp : IsCompact s
sU : s ⊆ U
u : Set ↑s := Subtype.val ⁻¹' interior s
u_open_in_s : IsOpen u
x : { x // x ∈ s }
memU : ↑x ∈ U
xs : ↑x ∈ interior s
this : CompactSpace ↑s
V : Set ↑s
clopen_in_s : IsClopen V
Vx : x ∈ V
V_sub : V ⊆ u
⊢ IsClopen (Subtype.val '' V)
[PROOFSTEP]
refine' ⟨_, comp.isClosed.closedEmbedding_subtype_val.closed_iff_image_closed.1 clopen_in_s.2⟩
[GOAL]
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
H : Type u_1
inst✝³ : TopologicalSpace H
inst✝² : LocallyCompactSpace H
inst✝¹ : T2Space H
inst✝ : TotallyDisconnectedSpace H
U : Set H
hU : IsOpen U
s : Set H
comp : IsCompact s
sU : s ⊆ U
u : Set ↑s := Subtype.val ⁻¹' interior s
u_open_in_s : IsOpen u
x : { x // x ∈ s }
memU : ↑x ∈ U
xs : ↑x ∈ interior s
this : CompactSpace ↑s
V : Set ↑s
clopen_in_s : IsClopen V
Vx : x ∈ V
V_sub : V ⊆ u
⊢ IsOpen (Subtype.val '' V)
[PROOFSTEP]
let v : Set u := ((↑) : u → s) ⁻¹' V
[GOAL]
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
H : Type u_1
inst✝³ : TopologicalSpace H
inst✝² : LocallyCompactSpace H
inst✝¹ : T2Space H
inst✝ : TotallyDisconnectedSpace H
U : Set H
hU : IsOpen U
s : Set H
comp : IsCompact s
sU : s ⊆ U
u : Set ↑s := Subtype.val ⁻¹' interior s
u_open_in_s : IsOpen u
x : { x // x ∈ s }
memU : ↑x ∈ U
xs : ↑x ∈ interior s
this : CompactSpace ↑s
V : Set ↑s
clopen_in_s : IsClopen V
Vx : x ∈ V
V_sub : V ⊆ u
v : Set ↑u := Subtype.val ⁻¹' V
⊢ IsOpen (Subtype.val '' V)
[PROOFSTEP]
have : ((↑) : u → H) = ((↑) : s → H) ∘ ((↑) : u → s) := rfl
[GOAL]
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
H : Type u_1
inst✝³ : TopologicalSpace H
inst✝² : LocallyCompactSpace H
inst✝¹ : T2Space H
inst✝ : TotallyDisconnectedSpace H
U : Set H
hU : IsOpen U
s : Set H
comp : IsCompact s
sU : s ⊆ U
u : Set ↑s := Subtype.val ⁻¹' interior s
u_open_in_s : IsOpen u
x : { x // x ∈ s }
memU : ↑x ∈ U
xs : ↑x ∈ interior s
this✝ : CompactSpace ↑s
V : Set ↑s
clopen_in_s : IsClopen V
Vx : x ∈ V
V_sub : V ⊆ u
v : Set ↑u := Subtype.val ⁻¹' V
this : (fun x => ↑↑x) = Subtype.val ∘ Subtype.val
⊢ IsOpen (Subtype.val '' V)
[PROOFSTEP]
have f0 : Embedding ((↑) : u → H) := embedding_subtype_val.comp embedding_subtype_val
[GOAL]
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
H : Type u_1
inst✝³ : TopologicalSpace H
inst✝² : LocallyCompactSpace H
inst✝¹ : T2Space H
inst✝ : TotallyDisconnectedSpace H
U : Set H
hU : IsOpen U
s : Set H
comp : IsCompact s
sU : s ⊆ U
u : Set ↑s := Subtype.val ⁻¹' interior s
u_open_in_s : IsOpen u
x : { x // x ∈ s }
memU : ↑x ∈ U
xs : ↑x ∈ interior s
this✝ : CompactSpace ↑s
V : Set ↑s
clopen_in_s : IsClopen V
Vx : x ∈ V
V_sub : V ⊆ u
v : Set ↑u := Subtype.val ⁻¹' V
this : (fun x => ↑↑x) = Subtype.val ∘ Subtype.val
f0 : _root_.Embedding fun x => ↑↑x
⊢ IsOpen (Subtype.val '' V)
[PROOFSTEP]
have f1 : OpenEmbedding ((↑) : u → H) := by
  refine' ⟨f0, _⟩
  · have : Set.range ((↑) : u → H) = interior s :=
      by
      rw [this, Set.range_comp, Subtype.range_coe, Subtype.image_preimage_coe]
      apply Set.inter_eq_self_of_subset_left interior_subset
    rw [this]
    apply isOpen_interior
[GOAL]
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
H : Type u_1
inst✝³ : TopologicalSpace H
inst✝² : LocallyCompactSpace H
inst✝¹ : T2Space H
inst✝ : TotallyDisconnectedSpace H
U : Set H
hU : IsOpen U
s : Set H
comp : IsCompact s
sU : s ⊆ U
u : Set ↑s := Subtype.val ⁻¹' interior s
u_open_in_s : IsOpen u
x : { x // x ∈ s }
memU : ↑x ∈ U
xs : ↑x ∈ interior s
this✝ : CompactSpace ↑s
V : Set ↑s
clopen_in_s : IsClopen V
Vx : x ∈ V
V_sub : V ⊆ u
v : Set ↑u := Subtype.val ⁻¹' V
this : (fun x => ↑↑x) = Subtype.val ∘ Subtype.val
f0 : _root_.Embedding fun x => ↑↑x
⊢ OpenEmbedding fun x => ↑↑x
[PROOFSTEP]
refine' ⟨f0, _⟩
[GOAL]
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
H : Type u_1
inst✝³ : TopologicalSpace H
inst✝² : LocallyCompactSpace H
inst✝¹ : T2Space H
inst✝ : TotallyDisconnectedSpace H
U : Set H
hU : IsOpen U
s : Set H
comp : IsCompact s
sU : s ⊆ U
u : Set ↑s := Subtype.val ⁻¹' interior s
u_open_in_s : IsOpen u
x : { x // x ∈ s }
memU : ↑x ∈ U
xs : ↑x ∈ interior s
this✝ : CompactSpace ↑s
V : Set ↑s
clopen_in_s : IsClopen V
Vx : x ∈ V
V_sub : V ⊆ u
v : Set ↑u := Subtype.val ⁻¹' V
this : (fun x => ↑↑x) = Subtype.val ∘ Subtype.val
f0 : _root_.Embedding fun x => ↑↑x
⊢ IsOpen (range fun x => ↑↑x)
[PROOFSTEP]
have : Set.range ((↑) : u → H) = interior s :=
  by
  rw [this, Set.range_comp, Subtype.range_coe, Subtype.image_preimage_coe]
  apply Set.inter_eq_self_of_subset_left interior_subset
[GOAL]
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
H : Type u_1
inst✝³ : TopologicalSpace H
inst✝² : LocallyCompactSpace H
inst✝¹ : T2Space H
inst✝ : TotallyDisconnectedSpace H
U : Set H
hU : IsOpen U
s : Set H
comp : IsCompact s
sU : s ⊆ U
u : Set ↑s := Subtype.val ⁻¹' interior s
u_open_in_s : IsOpen u
x : { x // x ∈ s }
memU : ↑x ∈ U
xs : ↑x ∈ interior s
this✝ : CompactSpace ↑s
V : Set ↑s
clopen_in_s : IsClopen V
Vx : x ∈ V
V_sub : V ⊆ u
v : Set ↑u := Subtype.val ⁻¹' V
this : (fun x => ↑↑x) = Subtype.val ∘ Subtype.val
f0 : _root_.Embedding fun x => ↑↑x
⊢ (range fun x => ↑↑x) = interior s
[PROOFSTEP]
rw [this, Set.range_comp, Subtype.range_coe, Subtype.image_preimage_coe]
[GOAL]
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
H : Type u_1
inst✝³ : TopologicalSpace H
inst✝² : LocallyCompactSpace H
inst✝¹ : T2Space H
inst✝ : TotallyDisconnectedSpace H
U : Set H
hU : IsOpen U
s : Set H
comp : IsCompact s
sU : s ⊆ U
u : Set ↑s := Subtype.val ⁻¹' interior s
u_open_in_s : IsOpen u
x : { x // x ∈ s }
memU : ↑x ∈ U
xs : ↑x ∈ interior s
this✝ : CompactSpace ↑s
V : Set ↑s
clopen_in_s : IsClopen V
Vx : x ∈ V
V_sub : V ⊆ u
v : Set ↑u := Subtype.val ⁻¹' V
this : (fun x => ↑↑x) = Subtype.val ∘ Subtype.val
f0 : _root_.Embedding fun x => ↑↑x
⊢ interior s ∩ s = interior s
[PROOFSTEP]
apply Set.inter_eq_self_of_subset_left interior_subset
[GOAL]
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
H : Type u_1
inst✝³ : TopologicalSpace H
inst✝² : LocallyCompactSpace H
inst✝¹ : T2Space H
inst✝ : TotallyDisconnectedSpace H
U : Set H
hU : IsOpen U
s : Set H
comp : IsCompact s
sU : s ⊆ U
u : Set ↑s := Subtype.val ⁻¹' interior s
u_open_in_s : IsOpen u
x : { x // x ∈ s }
memU : ↑x ∈ U
xs : ↑x ∈ interior s
this✝¹ : CompactSpace ↑s
V : Set ↑s
clopen_in_s : IsClopen V
Vx : x ∈ V
V_sub : V ⊆ u
v : Set ↑u := Subtype.val ⁻¹' V
this✝ : (fun x => ↑↑x) = Subtype.val ∘ Subtype.val
f0 : _root_.Embedding fun x => ↑↑x
this : (range fun x => ↑↑x) = interior s
⊢ IsOpen (range fun x => ↑↑x)
[PROOFSTEP]
rw [this]
[GOAL]
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
H : Type u_1
inst✝³ : TopologicalSpace H
inst✝² : LocallyCompactSpace H
inst✝¹ : T2Space H
inst✝ : TotallyDisconnectedSpace H
U : Set H
hU : IsOpen U
s : Set H
comp : IsCompact s
sU : s ⊆ U
u : Set ↑s := Subtype.val ⁻¹' interior s
u_open_in_s : IsOpen u
x : { x // x ∈ s }
memU : ↑x ∈ U
xs : ↑x ∈ interior s
this✝¹ : CompactSpace ↑s
V : Set ↑s
clopen_in_s : IsClopen V
Vx : x ∈ V
V_sub : V ⊆ u
v : Set ↑u := Subtype.val ⁻¹' V
this✝ : (fun x => ↑↑x) = Subtype.val ∘ Subtype.val
f0 : _root_.Embedding fun x => ↑↑x
this : (range fun x => ↑↑x) = interior s
⊢ IsOpen (interior s)
[PROOFSTEP]
apply isOpen_interior
[GOAL]
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
H : Type u_1
inst✝³ : TopologicalSpace H
inst✝² : LocallyCompactSpace H
inst✝¹ : T2Space H
inst✝ : TotallyDisconnectedSpace H
U : Set H
hU : IsOpen U
s : Set H
comp : IsCompact s
sU : s ⊆ U
u : Set ↑s := Subtype.val ⁻¹' interior s
u_open_in_s : IsOpen u
x : { x // x ∈ s }
memU : ↑x ∈ U
xs : ↑x ∈ interior s
this✝ : CompactSpace ↑s
V : Set ↑s
clopen_in_s : IsClopen V
Vx : x ∈ V
V_sub : V ⊆ u
v : Set ↑u := Subtype.val ⁻¹' V
this : (fun x => ↑↑x) = Subtype.val ∘ Subtype.val
f0 : _root_.Embedding fun x => ↑↑x
f1 : OpenEmbedding fun x => ↑↑x
⊢ IsOpen (Subtype.val '' V)
[PROOFSTEP]
have f2 : IsOpen v := clopen_in_s.1.preimage continuous_subtype_val
[GOAL]
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
H : Type u_1
inst✝³ : TopologicalSpace H
inst✝² : LocallyCompactSpace H
inst✝¹ : T2Space H
inst✝ : TotallyDisconnectedSpace H
U : Set H
hU : IsOpen U
s : Set H
comp : IsCompact s
sU : s ⊆ U
u : Set ↑s := Subtype.val ⁻¹' interior s
u_open_in_s : IsOpen u
x : { x // x ∈ s }
memU : ↑x ∈ U
xs : ↑x ∈ interior s
this✝ : CompactSpace ↑s
V : Set ↑s
clopen_in_s : IsClopen V
Vx : x ∈ V
V_sub : V ⊆ u
v : Set ↑u := Subtype.val ⁻¹' V
this : (fun x => ↑↑x) = Subtype.val ∘ Subtype.val
f0 : _root_.Embedding fun x => ↑↑x
f1 : OpenEmbedding fun x => ↑↑x
f2 : IsOpen v
⊢ IsOpen (Subtype.val '' V)
[PROOFSTEP]
have f3 : ((↑) : s → H) '' V = ((↑) : u → H) '' v := by
  rw [this, image_comp, Subtype.image_preimage_coe, inter_eq_self_of_subset_left V_sub]
[GOAL]
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
H : Type u_1
inst✝³ : TopologicalSpace H
inst✝² : LocallyCompactSpace H
inst✝¹ : T2Space H
inst✝ : TotallyDisconnectedSpace H
U : Set H
hU : IsOpen U
s : Set H
comp : IsCompact s
sU : s ⊆ U
u : Set ↑s := Subtype.val ⁻¹' interior s
u_open_in_s : IsOpen u
x : { x // x ∈ s }
memU : ↑x ∈ U
xs : ↑x ∈ interior s
this✝ : CompactSpace ↑s
V : Set ↑s
clopen_in_s : IsClopen V
Vx : x ∈ V
V_sub : V ⊆ u
v : Set ↑u := Subtype.val ⁻¹' V
this : (fun x => ↑↑x) = Subtype.val ∘ Subtype.val
f0 : _root_.Embedding fun x => ↑↑x
f1 : OpenEmbedding fun x => ↑↑x
f2 : IsOpen v
⊢ Subtype.val '' V = (fun x => ↑↑x) '' v
[PROOFSTEP]
rw [this, image_comp, Subtype.image_preimage_coe, inter_eq_self_of_subset_left V_sub]
[GOAL]
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
H : Type u_1
inst✝³ : TopologicalSpace H
inst✝² : LocallyCompactSpace H
inst✝¹ : T2Space H
inst✝ : TotallyDisconnectedSpace H
U : Set H
hU : IsOpen U
s : Set H
comp : IsCompact s
sU : s ⊆ U
u : Set ↑s := Subtype.val ⁻¹' interior s
u_open_in_s : IsOpen u
x : { x // x ∈ s }
memU : ↑x ∈ U
xs : ↑x ∈ interior s
this✝ : CompactSpace ↑s
V : Set ↑s
clopen_in_s : IsClopen V
Vx : x ∈ V
V_sub : V ⊆ u
v : Set ↑u := Subtype.val ⁻¹' V
this : (fun x => ↑↑x) = Subtype.val ∘ Subtype.val
f0 : _root_.Embedding fun x => ↑↑x
f1 : OpenEmbedding fun x => ↑↑x
f2 : IsOpen v
f3 : Subtype.val '' V = (fun x => ↑↑x) '' v
⊢ IsOpen (Subtype.val '' V)
[PROOFSTEP]
rw [f3]
[GOAL]
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
H : Type u_1
inst✝³ : TopologicalSpace H
inst✝² : LocallyCompactSpace H
inst✝¹ : T2Space H
inst✝ : TotallyDisconnectedSpace H
U : Set H
hU : IsOpen U
s : Set H
comp : IsCompact s
sU : s ⊆ U
u : Set ↑s := Subtype.val ⁻¹' interior s
u_open_in_s : IsOpen u
x : { x // x ∈ s }
memU : ↑x ∈ U
xs : ↑x ∈ interior s
this✝ : CompactSpace ↑s
V : Set ↑s
clopen_in_s : IsClopen V
Vx : x ∈ V
V_sub : V ⊆ u
v : Set ↑u := Subtype.val ⁻¹' V
this : (fun x => ↑↑x) = Subtype.val ∘ Subtype.val
f0 : _root_.Embedding fun x => ↑↑x
f1 : OpenEmbedding fun x => ↑↑x
f2 : IsOpen v
f3 : Subtype.val '' V = (fun x => ↑↑x) '' v
⊢ IsOpen ((fun x => ↑↑x) '' v)
[PROOFSTEP]
apply f1.isOpenMap v f2
[GOAL]
case intro.intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
H : Type u_1
inst✝³ : TopologicalSpace H
inst✝² : LocallyCompactSpace H
inst✝¹ : T2Space H
inst✝ : TotallyDisconnectedSpace H
U : Set H
hU : IsOpen U
s : Set H
comp : IsCompact s
sU : s ⊆ U
u : Set ↑s := Subtype.val ⁻¹' interior s
u_open_in_s : IsOpen u
x : { x // x ∈ s }
memU : ↑x ∈ U
xs : ↑x ∈ interior s
this : CompactSpace ↑s
V : Set ↑s
clopen_in_s : IsClopen V
Vx : x ∈ V
V_sub : V ⊆ u
V_clopen : IsClopen (Subtype.val '' V)
⊢ ∃ v, v ∈ {s | IsClopen s} ∧ ↑x ∈ v ∧ v ⊆ U
[PROOFSTEP]
refine' ⟨(↑) '' V, V_clopen, by simp [Vx], Subset.trans _ sU⟩
[GOAL]
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
H : Type u_1
inst✝³ : TopologicalSpace H
inst✝² : LocallyCompactSpace H
inst✝¹ : T2Space H
inst✝ : TotallyDisconnectedSpace H
U : Set H
hU : IsOpen U
s : Set H
comp : IsCompact s
sU : s ⊆ U
u : Set ↑s := Subtype.val ⁻¹' interior s
u_open_in_s : IsOpen u
x : { x // x ∈ s }
memU : ↑x ∈ U
xs : ↑x ∈ interior s
this : CompactSpace ↑s
V : Set ↑s
clopen_in_s : IsClopen V
Vx : x ∈ V
V_sub : V ⊆ u
V_clopen : IsClopen (Subtype.val '' V)
⊢ ↑x ∈ Subtype.val '' V
[PROOFSTEP]
simp [Vx]
[GOAL]
case intro.intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝⁴ : TopologicalSpace α
H : Type u_1
inst✝³ : TopologicalSpace H
inst✝² : LocallyCompactSpace H
inst✝¹ : T2Space H
inst✝ : TotallyDisconnectedSpace H
U : Set H
hU : IsOpen U
s : Set H
comp : IsCompact s
sU : s ⊆ U
u : Set ↑s := Subtype.val ⁻¹' interior s
u_open_in_s : IsOpen u
x : { x // x ∈ s }
memU : ↑x ∈ U
xs : ↑x ∈ interior s
this : CompactSpace ↑s
V : Set ↑s
clopen_in_s : IsClopen V
Vx : x ∈ V
V_sub : V ⊆ u
V_clopen : IsClopen (Subtype.val '' V)
⊢ Subtype.val '' V ⊆ s
[PROOFSTEP]
simp
[GOAL]
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
H : Type u_1
inst✝² : TopologicalSpace H
inst✝¹ : LocallyCompactSpace H
inst✝ : T2Space H
⊢ TotallyDisconnectedSpace H ↔ TotallySeparatedSpace H
[PROOFSTEP]
constructor
[GOAL]
case mp
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
H : Type u_1
inst✝² : TopologicalSpace H
inst✝¹ : LocallyCompactSpace H
inst✝ : T2Space H
⊢ TotallyDisconnectedSpace H → TotallySeparatedSpace H
[PROOFSTEP]
intro h
[GOAL]
case mp
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
H : Type u_1
inst✝² : TopologicalSpace H
inst✝¹ : LocallyCompactSpace H
inst✝ : T2Space H
h : TotallyDisconnectedSpace H
⊢ TotallySeparatedSpace H
[PROOFSTEP]
exact totallySeparatedSpace_of_t1_of_basis_clopen loc_compact_Haus_tot_disc_of_zero_dim
[GOAL]
case mpr
α : Type u
β : Type v
inst✝³ : TopologicalSpace α
H : Type u_1
inst✝² : TopologicalSpace H
inst✝¹ : LocallyCompactSpace H
inst✝ : T2Space H
⊢ TotallySeparatedSpace H → TotallyDisconnectedSpace H
[PROOFSTEP]
apply TotallySeparatedSpace.totallyDisconnectedSpace
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
⊢ T2Space (ConnectedComponents α)
[PROOFSTEP]
refine ⟨ConnectedComponents.surjective_coe.forall₂.2 fun a b ne => ?_⟩
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
a b : α
ne : mk a ≠ mk b
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ mk a ∈ u ∧ mk b ∈ v ∧ Disjoint u v
[PROOFSTEP]
rw [ConnectedComponents.coe_ne_coe] at ne 
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
a b : α
ne : connectedComponent a ≠ connectedComponent b
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ mk a ∈ u ∧ mk b ∈ v ∧ Disjoint u v
[PROOFSTEP]
have h := connectedComponent_disjoint ne
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
a b : α
ne : connectedComponent a ≠ connectedComponent b
h : Disjoint (connectedComponent a) (connectedComponent b)
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ mk a ∈ u ∧ mk b ∈ v ∧ Disjoint u v
[PROOFSTEP]
rw [connectedComponent_eq_iInter_clopen b, disjoint_iff_inter_eq_empty] at h 
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
a b : α
ne : connectedComponent a ≠ connectedComponent b
h : connectedComponent a ∩ ⋂ (Z : { Z // IsClopen Z ∧ b ∈ Z }), ↑Z = ∅
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ mk a ∈ u ∧ mk b ∈ v ∧ Disjoint u v
[PROOFSTEP]
obtain ⟨U, V, hU, ha, hb, rfl⟩ :
  ∃ (U : Set α) (V : Set (ConnectedComponents α)),
    IsClopen U ∧ connectedComponent a ∩ U = ∅ ∧ connectedComponent b ⊆ U ∧ (↑) ⁻¹' V = U :=
  by
  have h :=
    (isClosed_connectedComponent (α := α)).isCompact.elim_finite_subfamily_closed _
      (fun Z : { Z : Set α // IsClopen Z ∧ b ∈ Z } => Z.2.1.2) h
  cases' h with fin_a ha
  set U : Set α := ⋂ (i : { Z // IsClopen Z ∧ b ∈ Z }) (_ : i ∈ fin_a), i
  have hU : IsClopen U := isClopen_biInter_finset fun i _ => i.2.1
  exact
    ⟨U, (↑) '' U, hU, ha, subset_iInter₂ fun Z _ => Z.2.1.connectedComponent_subset Z.2.2,
      (connectedComponents_preimage_image U).symm ▸ hU.biUnion_connectedComponent_eq⟩
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
a b : α
ne : connectedComponent a ≠ connectedComponent b
h : connectedComponent a ∩ ⋂ (Z : { Z // IsClopen Z ∧ b ∈ Z }), ↑Z = ∅
⊢ ∃ U V, IsClopen U ∧ connectedComponent a ∩ U = ∅ ∧ connectedComponent b ⊆ U ∧ mk ⁻¹' V = U
[PROOFSTEP]
have h :=
  (isClosed_connectedComponent (α := α)).isCompact.elim_finite_subfamily_closed _
    (fun Z : { Z : Set α // IsClopen Z ∧ b ∈ Z } => Z.2.1.2) h
[GOAL]
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
a b : α
ne : connectedComponent a ≠ connectedComponent b
h✝ : connectedComponent a ∩ ⋂ (Z : { Z // IsClopen Z ∧ b ∈ Z }), ↑Z = ∅
h : ∃ t, connectedComponent a ∩ ⋂ (i : { Z // IsClopen Z ∧ b ∈ Z }) (_ : i ∈ t), ↑i = ∅
⊢ ∃ U V, IsClopen U ∧ connectedComponent a ∩ U = ∅ ∧ connectedComponent b ⊆ U ∧ mk ⁻¹' V = U
[PROOFSTEP]
cases' h with fin_a ha
[GOAL]
case intro
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
a b : α
ne : connectedComponent a ≠ connectedComponent b
h : connectedComponent a ∩ ⋂ (Z : { Z // IsClopen Z ∧ b ∈ Z }), ↑Z = ∅
fin_a : Finset { Z // IsClopen Z ∧ b ∈ Z }
ha : connectedComponent a ∩ ⋂ (i : { Z // IsClopen Z ∧ b ∈ Z }) (_ : i ∈ fin_a), ↑i = ∅
⊢ ∃ U V, IsClopen U ∧ connectedComponent a ∩ U = ∅ ∧ connectedComponent b ⊆ U ∧ mk ⁻¹' V = U
[PROOFSTEP]
set U : Set α := ⋂ (i : { Z // IsClopen Z ∧ b ∈ Z }) (_ : i ∈ fin_a), i
[GOAL]
case intro
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
a b : α
ne : connectedComponent a ≠ connectedComponent b
h : connectedComponent a ∩ ⋂ (Z : { Z // IsClopen Z ∧ b ∈ Z }), ↑Z = ∅
fin_a : Finset { Z // IsClopen Z ∧ b ∈ Z }
U : Set α := ⋂ (i : { Z // IsClopen Z ∧ b ∈ Z }) (_ : i ∈ fin_a), ↑i
ha : connectedComponent a ∩ U = ∅
⊢ ∃ U V, IsClopen U ∧ connectedComponent a ∩ U = ∅ ∧ connectedComponent b ⊆ U ∧ mk ⁻¹' V = U
[PROOFSTEP]
have hU : IsClopen U := isClopen_biInter_finset fun i _ => i.2.1
[GOAL]
case intro
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
a b : α
ne : connectedComponent a ≠ connectedComponent b
h : connectedComponent a ∩ ⋂ (Z : { Z // IsClopen Z ∧ b ∈ Z }), ↑Z = ∅
fin_a : Finset { Z // IsClopen Z ∧ b ∈ Z }
U : Set α := ⋂ (i : { Z // IsClopen Z ∧ b ∈ Z }) (_ : i ∈ fin_a), ↑i
ha : connectedComponent a ∩ U = ∅
hU : IsClopen U
⊢ ∃ U V, IsClopen U ∧ connectedComponent a ∩ U = ∅ ∧ connectedComponent b ⊆ U ∧ mk ⁻¹' V = U
[PROOFSTEP]
exact
  ⟨U, (↑) '' U, hU, ha, subset_iInter₂ fun Z _ => Z.2.1.connectedComponent_subset Z.2.2,
    (connectedComponents_preimage_image U).symm ▸ hU.biUnion_connectedComponent_eq⟩
[GOAL]
case intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
a b : α
ne : connectedComponent a ≠ connectedComponent b
h : connectedComponent a ∩ ⋂ (Z : { Z // IsClopen Z ∧ b ∈ Z }), ↑Z = ∅
V : Set (ConnectedComponents α)
hU : IsClopen (mk ⁻¹' V)
ha : connectedComponent a ∩ mk ⁻¹' V = ∅
hb : connectedComponent b ⊆ mk ⁻¹' V
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ mk a ∈ u ∧ mk b ∈ v ∧ Disjoint u v
[PROOFSTEP]
rw [ConnectedComponents.quotientMap_coe.isClopen_preimage] at hU 
[GOAL]
case intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
a b : α
ne : connectedComponent a ≠ connectedComponent b
h : connectedComponent a ∩ ⋂ (Z : { Z // IsClopen Z ∧ b ∈ Z }), ↑Z = ∅
V : Set (ConnectedComponents α)
hU : IsClopen V
ha : connectedComponent a ∩ mk ⁻¹' V = ∅
hb : connectedComponent b ⊆ mk ⁻¹' V
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ mk a ∈ u ∧ mk b ∈ v ∧ Disjoint u v
[PROOFSTEP]
refine' ⟨Vᶜ, V, hU.compl.isOpen, hU.isOpen, _, hb mem_connectedComponent, disjoint_compl_left⟩
[GOAL]
case intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝² : TopologicalSpace α
inst✝¹ : T2Space α
inst✝ : CompactSpace α
a b : α
ne : connectedComponent a ≠ connectedComponent b
h : connectedComponent a ∩ ⋂ (Z : { Z // IsClopen Z ∧ b ∈ Z }), ↑Z = ∅
V : Set (ConnectedComponents α)
hU : IsClopen V
ha : connectedComponent a ∩ mk ⁻¹' V = ∅
hb : connectedComponent b ⊆ mk ⁻¹' V
⊢ mk a ∈ Vᶜ
[PROOFSTEP]
exact fun h => flip Set.Nonempty.ne_empty ha ⟨a, mem_connectedComponent, h⟩
