Theorem: IsClosed.HasSeparatingCover
File: Mathlib/Topology/Separation.lean

Proof steps:
state_before: X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : RegularSpace X
x : X
s✝ s t : Set X
r : RegularSpace X
inst✝ : LindelofSpace X
s_cl : IsClosed s
t_cl : IsClosed t
st_dis : Disjoint s t
⊢ _root_.HasSeparatingCover s t
state_after: case inl
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : RegularSpace X
x : X
s✝ s t : Set X
r : RegularSpace X
inst✝ : LindelofSpace X
s_cl : IsClosed s
t_cl : IsClosed t
st_dis : Disjoint s t
empty_X : IsEmpty X
⊢ _root_.HasSeparatingCover s t

case inr
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : RegularSpace X
x : X
s✝ s t : Set X
r : RegularSpace X
inst✝ : LindelofSpace X
s_cl : IsClosed s
t_cl : IsClosed t
st_dis : Disjoint s t
nonempty_X : Nonempty X
⊢ _root_.HasSeparatingCover s t
tactic: rcases isEmpty_or_nonempty X with empty_X | nonempty_X
state_before: case inr
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : RegularSpace X
x : X
s✝ s t : Set X
r : RegularSpace X
inst✝ : LindelofSpace X
s_cl : IsClosed s
t_cl : IsClosed t
st_dis : Disjoint s t
nonempty_X : Nonempty X
this : ∀ (a : X), ∃ n, IsOpen n ∧ Disjoint (closure n) t ∧ (a ∈ s → a ∈ n)
⊢ _root_.HasSeparatingCover s t
state_after: case inr
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : RegularSpace X
x : X
s✝ s t : Set X
r : RegularSpace X
inst✝ : LindelofSpace X
s_cl : IsClosed s
t_cl : IsClosed t
st_dis : Disjoint s t
nonempty_X : Nonempty X
u : X → Set X
u_open : ∀ (a : X), IsOpen (u a)
u_dis : ∀ (a : X), Disjoint (closure (u a)) t
u_nhd : ∀ a ∈ s, a ∈ u a
⊢ _root_.HasSeparatingCover s t
tactic: choose u u_open u_dis u_nhd using this
state_before: case inr
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : RegularSpace X
x : X
s✝ s t : Set X
r : RegularSpace X
inst✝ : LindelofSpace X
s_cl : IsClosed s
t_cl : IsClosed t
st_dis : Disjoint s t
nonempty_X : Nonempty X
u : X → Set X
u_open : ∀ (a : X), IsOpen (u a)
u_dis : ∀ (a : X), Disjoint (closure (u a)) t
u_nhd : ∀ a ∈ s, a ∈ u a
⊢ _root_.HasSeparatingCover s t
state_after: case inr.intro
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : RegularSpace X
x : X
s✝ s t : Set X
r : RegularSpace X
inst✝ : LindelofSpace X
s_cl : IsClosed s
t_cl : IsClosed t
st_dis : Disjoint s t
nonempty_X : Nonempty X
u : X → Set X
u_open : ∀ (a : X), IsOpen (u a)
u_dis : ∀ (a : X), Disjoint (closure (u a)) t
u_nhd : ∀ a ∈ s, a ∈ u a
f : ℕ → X
f_cov : s ⊆ ⋃ n, u (f n)
⊢ _root_.HasSeparatingCover s t
tactic: obtain ⟨f, f_cov⟩ := s_cl.isLindelof.indexed_countable_subcover
    u u_open (fun a ainh ↦ mem_iUnion.mpr ⟨a, u_nhd a ainh⟩)
state_before: case inr.intro
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : RegularSpace X
x : X
s✝ s t : Set X
r : RegularSpace X
inst✝ : LindelofSpace X
s_cl : IsClosed s
t_cl : IsClosed t
st_dis : Disjoint s t
nonempty_X : Nonempty X
u : X → Set X
u_open : ∀ (a : X), IsOpen (u a)
u_dis : ∀ (a : X), Disjoint (closure (u a)) t
u_nhd : ∀ a ∈ s, a ∈ u a
f : ℕ → X
f_cov : s ⊆ ⋃ n, u (f n)
⊢ _root_.HasSeparatingCover s t
state_after: no goals
tactic: exact ⟨u ∘ f, f_cov, fun n ↦ ⟨u_open (f n), u_dis (f n)⟩⟩