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

tactic: rcases isEmpty_or_nonempty X with empty_X | nonempty_X
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: 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
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: 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
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: exact ⟨u ∘ f, f_cov, fun n ↦ ⟨u_open (f n), u_dis (f n)⟩⟩
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: rw [subset_eq_empty (t := s) (fun ⦃_⦄ _ ↦ trivial) (univ_eq_empty_iff.mpr empty_X)]
state_before: 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
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 ∅ t

tactic: exact hasSeparatingCovers_iff_separatedNhds.mpr (SeparatedNhds.empty_left t) |>.1
state_before: 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 ∅ t
state_after: no goals

tactic: wlog ains : a ∈ s
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
nonempty_X : Nonempty X
a : X
⊢ ∃ n, IsOpen n ∧ Disjoint (closure n) t ∧ (a ∈ s → a ∈ n)
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
a : X
this :
  ∀ {X : Type u_1} {Y : Type u_2} [inst : TopologicalSpace X] [inst_1 : RegularSpace X] {x : X} {s : Set X}
    {s t : Set X} [r : RegularSpace X] [inst_2 : LindelofSpace X],
    IsClosed s →
      IsClosed t → Disjoint s t → Nonempty X → ∀ a ∈ s, ∃ n, IsOpen n ∧ Disjoint (closure n) t ∧ (a ∈ s → a ∈ n)
ains : a ∉ s
⊢ ∃ n, IsOpen n ∧ Disjoint (closure n) t ∧ (a ∈ s → a ∈ n)

X✝ : Type u_1
inst✝³ : TopologicalSpace X✝
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
a : X
ains : a ∈ s
⊢ ∃ n, IsOpen n ∧ Disjoint (closure n) t ∧ (a ∈ s → a ∈ n)

tactic: obtain ⟨n, nna, ncl, nsubkc⟩ := ((regularSpace_TFAE X).out 0 3 :).mp r a tᶜ <|
  t_cl.compl_mem_nhds (disjoint_left.mp st_dis ains)
state_before: X✝ : Type u_1
inst✝³ : TopologicalSpace X✝
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
a : X
ains : a ∈ s
⊢ ∃ n, IsOpen n ∧ Disjoint (closure n) t ∧ (a ∈ s → a ∈ n)
state_after: case intro.intro.intro
X✝ : Type u_1
inst✝³ : TopologicalSpace X✝
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
a : X
ains : a ∈ s
n : Set X
nna : n ∈ 𝓝 a
ncl : IsClosed n
nsubkc : n ⊆ tᶜ
⊢ ∃ n, IsOpen n ∧ Disjoint (closure n) t ∧ (a ∈ s → a ∈ n)

tactic: exact
  ⟨interior n,
   isOpen_interior,
   disjoint_left.mpr fun ⦃_⦄ ain ↦
     nsubkc <| (IsClosed.closure_subset_iff ncl).mpr interior_subset ain,
   fun _ ↦ mem_interior_iff_mem_nhds.mpr nna⟩
state_before: case intro.intro.intro
X✝ : Type u_1
inst✝³ : TopologicalSpace X✝
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
a : X
ains : a ∈ s
n : Set X
nna : n ∈ 𝓝 a
ncl : IsClosed n
nsubkc : n ⊆ tᶜ
⊢ ∃ n, IsOpen n ∧ Disjoint (closure n) t ∧ (a ∈ s → a ∈ n)
state_after: no goals

tactic: exact ⟨∅, isOpen_empty, SeparatedNhds.empty_left t |>.disjoint_closure_left, fun a ↦ ains a⟩
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
a : X
this :
  ∀ {X : Type u_1} {Y : Type u_2} [inst : TopologicalSpace X] [inst_1 : RegularSpace X] {x : X} {s : Set X}
    {s t : Set X} [r : RegularSpace X] [inst_2 : LindelofSpace X],
    IsClosed s →
      IsClosed t → Disjoint s t → Nonempty X → ∀ a ∈ s, ∃ n, IsOpen n ∧ Disjoint (closure n) t ∧ (a ∈ s → a ∈ n)
ains : a ∉ s
⊢ ∃ n, IsOpen n ∧ Disjoint (closure n) t ∧ (a ∈ s → a ∈ n)
state_after: no goals