Theorem: Disjoint.hasSeparatingCover_closed_gdelta_right
File: Mathlib/Topology/Separation.lean

Proof steps:
state_before: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
s t : Set X
inst✝ : NormalSpace X
st_dis : Disjoint s t
t_cl : IsClosed t
t_gd : IsGδ t
⊢ HasSeparatingCover s t
state_after: case intro.intro.intro
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
s t : Set X
inst✝ : NormalSpace X
st_dis : Disjoint s t
t_cl : IsClosed t
T : Set (Set X)
T_open : ∀ t ∈ T, IsOpen t
T_count : T.Countable
T_int : t = ⋂₀ T
⊢ HasSeparatingCover s t
tactic: obtain ⟨T, T_open, T_count, T_int⟩ := t_gd
state_before: case intro.intro.intro
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
s t : Set X
inst✝ : NormalSpace X
st_dis : Disjoint s t
t_cl : IsClosed t
T : Set (Set X)
T_open : ∀ t ∈ T, IsOpen t
T_count : T.Countable
T_int : t = ⋂₀ T
⊢ HasSeparatingCover s t
state_after: case intro.intro.intro.inl
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
s t : Set X
inst✝ : NormalSpace X
st_dis : Disjoint s t
t_cl : IsClosed t
T_open : ∀ t ∈ ∅, IsOpen t
T_count : ∅.Countable
T_int : t = ⋂₀ ∅
⊢ HasSeparatingCover s t

case intro.intro.intro.inr
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
s t : Set X
inst✝ : NormalSpace X
st_dis : Disjoint s t
t_cl : IsClosed t
T : Set (Set X)
T_open : ∀ t ∈ T, IsOpen t
T_count : T.Countable
T_int : t = ⋂₀ T
T_nonempty : T.Nonempty
⊢ HasSeparatingCover s t
tactic: rcases T.eq_empty_or_nonempty with rfl | T_nonempty
state_before: case intro.intro.intro.inr
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
s t : Set X
inst✝ : NormalSpace X
st_dis : Disjoint s t
t_cl : IsClosed t
T : Set (Set X)
T_open : ∀ t ∈ T, IsOpen t
T_count : T.Countable
T_int : t = ⋂₀ T
T_nonempty : T.Nonempty
⊢ HasSeparatingCover s t
state_after: case intro.intro.intro.inr.intro
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
s t : Set X
inst✝ : NormalSpace X
st_dis : Disjoint s t
t_cl : IsClosed t
T : Set (Set X)
T_open : ∀ t ∈ T, IsOpen t
T_count : T.Countable
T_int : t = ⋂₀ T
T_nonempty : T.Nonempty
g : ℕ → ↑T
g_surj : Surjective g
⊢ HasSeparatingCover s t
tactic: obtain ⟨g, g_surj⟩ := T_count.exists_surjective T_nonempty
state_before: case intro.intro.intro.inr.intro
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
s t : Set X
inst✝ : NormalSpace X
st_dis : Disjoint s t
t_cl : IsClosed t
T : Set (Set X)
T_open : ∀ t ∈ T, IsOpen t
T_count : T.Countable
T_int : t = ⋂₀ T
T_nonempty : T.Nonempty
g : ℕ → ↑T
g_surj : Surjective g
⊢ HasSeparatingCover s t
state_after: case intro.intro.intro.inr.intro
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
s t : Set X
inst✝ : NormalSpace X
st_dis : Disjoint s t
t_cl : IsClosed t
T : Set (Set X)
T_open : ∀ t ∈ T, IsOpen t
T_count : T.Countable
T_int : t = ⋂₀ T
T_nonempty : T.Nonempty
g : ℕ → ↑T
g_surj : Surjective g
g' : ℕ → Set X
g'_open : ∀ (n : ℕ), IsOpen (g' n)
clt_sub_g' : ∀ (n : ℕ), t ⊆ g' n
clg'_sub_g : ∀ (n : ℕ), closure (g' n) ⊆ ↑(g n)
⊢ HasSeparatingCover s t
tactic: choose g' g'_open clt_sub_g' clg'_sub_g using fun n ↦ by
    apply normal_exists_closure_subset t_cl (T_open (g n).1 (g n).2)
    rw [T_int]
    exact sInter_subset_of_mem (g n).2
state_before: case intro.intro.intro.inr.intro
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
s t : Set X
inst✝ : NormalSpace X
st_dis : Disjoint s t
t_cl : IsClosed t
T : Set (Set X)
T_open : ∀ t ∈ T, IsOpen t
T_count : T.Countable
T_int : t = ⋂₀ T
T_nonempty : T.Nonempty
g : ℕ → ↑T
g_surj : Surjective g
g' : ℕ → Set X
g'_open : ∀ (n : ℕ), IsOpen (g' n)
clt_sub_g' : ∀ (n : ℕ), t ⊆ g' n
clg'_sub_g : ∀ (n : ℕ), closure (g' n) ⊆ ↑(g n)
⊢ HasSeparatingCover s t
state_after: case intro.intro.intro.inr.intro
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
s t : Set X
inst✝ : NormalSpace X
st_dis : Disjoint s t
t_cl : IsClosed t
T : Set (Set X)
T_open : ∀ t ∈ T, IsOpen t
T_count : T.Countable
T_int : t = ⋂₀ T
T_nonempty : T.Nonempty
g : ℕ → ↑T
g_surj : Surjective g
g' : ℕ → Set X
g'_open : ∀ (n : ℕ), IsOpen (g' n)
clt_sub_g' : ∀ (n : ℕ), t ⊆ g' n
clg'_sub_g : ∀ (n : ℕ), closure (g' n) ⊆ ↑(g n)
clg'_int : t = ⋂ i, closure (g' i)
⊢ HasSeparatingCover s t
tactic: have clg'_int : t = ⋂ i, closure (g' i) := by
    apply (subset_iInter fun n ↦ (clt_sub_g' n).trans subset_closure).antisymm
    rw [T_int]
    refine subset_sInter fun t tinT ↦ ?_
    obtain ⟨n, gn⟩ := g_surj ⟨t, tinT⟩
    refine iInter_subset_of_subset n <| (clg'_sub_g n).trans ?_
    rw [gn]
state_before: case intro.intro.intro.inr.intro
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
s t : Set X
inst✝ : NormalSpace X
st_dis : Disjoint s t
t_cl : IsClosed t
T : Set (Set X)
T_open : ∀ t ∈ T, IsOpen t
T_count : T.Countable
T_int : t = ⋂₀ T
T_nonempty : T.Nonempty
g : ℕ → ↑T
g_surj : Surjective g
g' : ℕ → Set X
g'_open : ∀ (n : ℕ), IsOpen (g' n)
clt_sub_g' : ∀ (n : ℕ), t ⊆ g' n
clg'_sub_g : ∀ (n : ℕ), closure (g' n) ⊆ ↑(g n)
clg'_int : t = ⋂ i, closure (g' i)
⊢ HasSeparatingCover s t
state_after: case h
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
s t : Set X
inst✝ : NormalSpace X
st_dis : Disjoint s t
t_cl : IsClosed t
T : Set (Set X)
T_open : ∀ t ∈ T, IsOpen t
T_count : T.Countable
T_int : t = ⋂₀ T
T_nonempty : T.Nonempty
g : ℕ → ↑T
g_surj : Surjective g
g' : ℕ → Set X
g'_open : ∀ (n : ℕ), IsOpen (g' n)
clt_sub_g' : ∀ (n : ℕ), t ⊆ g' n
clg'_sub_g : ∀ (n : ℕ), closure (g' n) ⊆ ↑(g n)
clg'_int : t = ⋂ i, closure (g' i)
⊢ s ⊆ ⋃ n, (closure (g' n))ᶜ ∧ ∀ (n : ℕ), IsOpen (closure (g' n))ᶜ ∧ Disjoint (closure (closure (g' n))ᶜ) t
tactic: use fun n ↦ (closure (g' n))ᶜ
state_before: case h
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
s t : Set X
inst✝ : NormalSpace X
st_dis : Disjoint s t
t_cl : IsClosed t
T : Set (Set X)
T_open : ∀ t ∈ T, IsOpen t
T_count : T.Countable
T_int : t = ⋂₀ T
T_nonempty : T.Nonempty
g : ℕ → ↑T
g_surj : Surjective g
g' : ℕ → Set X
g'_open : ∀ (n : ℕ), IsOpen (g' n)
clt_sub_g' : ∀ (n : ℕ), t ⊆ g' n
clg'_sub_g : ∀ (n : ℕ), closure (g' n) ⊆ ↑(g n)
clg'_int : t = ⋂ i, closure (g' i)
⊢ s ⊆ ⋃ n, (closure (g' n))ᶜ ∧ ∀ (n : ℕ), IsOpen (closure (g' n))ᶜ ∧ Disjoint (closure (closure (g' n))ᶜ) t
state_after: case h.left
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
s t : Set X
inst✝ : NormalSpace X
st_dis : Disjoint s t
t_cl : IsClosed t
T : Set (Set X)
T_open : ∀ t ∈ T, IsOpen t
T_count : T.Countable
T_int : t = ⋂₀ T
T_nonempty : T.Nonempty
g : ℕ → ↑T
g_surj : Surjective g
g' : ℕ → Set X
g'_open : ∀ (n : ℕ), IsOpen (g' n)
clt_sub_g' : ∀ (n : ℕ), t ⊆ g' n
clg'_sub_g : ∀ (n : ℕ), closure (g' n) ⊆ ↑(g n)
clg'_int : t = ⋂ i, closure (g' i)
⊢ s ⊆ ⋃ n, (closure (g' n))ᶜ

case h.right
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
s t : Set X
inst✝ : NormalSpace X
st_dis : Disjoint s t
t_cl : IsClosed t
T : Set (Set X)
T_open : ∀ t ∈ T, IsOpen t
T_count : T.Countable
T_int : t = ⋂₀ T
T_nonempty : T.Nonempty
g : ℕ → ↑T
g_surj : Surjective g
g' : ℕ → Set X
g'_open : ∀ (n : ℕ), IsOpen (g' n)
clt_sub_g' : ∀ (n : ℕ), t ⊆ g' n
clg'_sub_g : ∀ (n : ℕ), closure (g' n) ⊆ ↑(g n)
clg'_int : t = ⋂ i, closure (g' i)
⊢ ∀ (n : ℕ), IsOpen (closure (g' n))ᶜ ∧ Disjoint (closure (closure (g' n))ᶜ) t
tactic: constructor