Theorem: normal_of_paracompact_t2
File: Mathlib/Topology/Paracompact.lean

tactic: have : ∀ s t : Set X, IsClosed s → IsClosed t →
    (∀ x ∈ s, ∃ u v, IsOpen u ∧ IsOpen v ∧ x ∈ u ∧ t ⊆ v ∧ Disjoint u v) →
    ∃ u v, IsOpen u ∧ IsOpen v ∧ s ⊆ u ∧ t ⊆ v ∧ Disjoint u v := by
  
  intro s t hs _ H
  choose u v hu hv hxu htv huv using SetCoe.forall'.1 H
  rcases precise_refinement_set hs u hu fun x hx ↦ mem_iUnion.2 ⟨⟨x, hx⟩, hxu _⟩ with
    ⟨u', hu'o, hcov', hu'fin, hsub⟩
  refine' ⟨⋃ i, u' i, closure (⋃ i, u' i)ᶜ, isOpen_iUnion hu'o, isClosed_closure.isOpen_compl,
    hcov', _, disjoint_compl_right.mono le_rfl (compl_le_compl subset_closure)⟩
  rw [hu'fin.closure_iUnion, compl_iUnion, subset_iInter_iff]
  refine' fun i x hxt hxu ↦
    absurd (htv i hxt) (closure_minimal _ (isClosed_compl_iff.2 <| hv _) hxu)
  exact fun y hyu hyv ↦ (huv i).le_bot ⟨hsub _ hyu, hyv⟩
state_before: ι : Type u
X : Type v
Y : Type w
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : T2Space X
inst✝ : ParacompactSpace X
⊢ NormalSpace X

tactic: refine' ⟨fun s t hs ht hst ↦ this s t hs ht fun x hx ↦ _⟩
state_before: ι : Type u
X : Type v
Y : Type w
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : T2Space X
inst✝ : ParacompactSpace X
this :
  ∀ (s t : Set X),
    IsClosed s →
      IsClosed t →
        (∀ (x : X), x ∈ s → ∃ u v, IsOpen u ∧ IsOpen v ∧ x ∈ u ∧ t ⊆ v ∧ Disjoint u v) →
          ∃ u v, IsOpen u ∧ IsOpen v ∧ s ⊆ u ∧ t ⊆ v ∧ Disjoint u v
⊢ NormalSpace X

tactic: rcases this t {x} ht isClosed_singleton fun y hy ↦ (by
  simp_rw [singleton_subset_iff]
  exact t2_separation (hst.symm.ne_of_mem hy hx))
  with ⟨v, u, hv, hu, htv, hxu, huv⟩
state_before: ι : Type u
X : Type v
Y : Type w
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : T2Space X
inst✝ : ParacompactSpace X
this :
  ∀ (s t : Set X),
    IsClosed s →
      IsClosed t →
        (∀ (x : X), x ∈ s → ∃ u v, IsOpen u ∧ IsOpen v ∧ x ∈ u ∧ t ⊆ v ∧ Disjoint u v) →
          ∃ u v, IsOpen u ∧ IsOpen v ∧ s ⊆ u ∧ t ⊆ v ∧ Disjoint u v
s t : Set X
hs : IsClosed s
ht : IsClosed t
hst : Disjoint s t
x : X
hx : x ∈ s
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ x ∈ u ∧ t ⊆ v ∧ Disjoint u v

tactic: exact ⟨u, v, hu, hv, singleton_subset_iff.1 hxu, htv, huv.symm⟩
state_before: case intro.intro.intro.intro.intro.intro
ι : Type u
X : Type v
Y : Type w
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : T2Space X
inst✝ : ParacompactSpace X
this :
  ∀ (s t : Set X),
    IsClosed s →
      IsClosed t →
        (∀ (x : X), x ∈ s → ∃ u v, IsOpen u ∧ IsOpen v ∧ x ∈ u ∧ t ⊆ v ∧ Disjoint u v) →
          ∃ u v, IsOpen u ∧ IsOpen v ∧ s ⊆ u ∧ t ⊆ v ∧ Disjoint u v
s t : Set X
hs : IsClosed s
ht : IsClosed t
hst : Disjoint s t
x : X
hx : x ∈ s
v u : Set X
hv : IsOpen v
hu : IsOpen u
htv : t ⊆ v
hxu : {x} ⊆ u
huv : Disjoint v u
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ x ∈ u ∧ t ⊆ v ∧ Disjoint u v

tactic: intro s t hs _ H
state_before: ι : Type u
X : Type v
Y : Type w
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : T2Space X
inst✝ : ParacompactSpace X
⊢ ∀ (s t : Set X),
    IsClosed s →
      IsClosed t →
        (∀ (x : X), x ∈ s → ∃ u v, IsOpen u ∧ IsOpen v ∧ x ∈ u ∧ t ⊆ v ∧ Disjoint u v) →
          ∃ u v, IsOpen u ∧ IsOpen v ∧ s ⊆ u ∧ t ⊆ v ∧ Disjoint u v

tactic: choose u v hu hv hxu htv huv using SetCoe.forall'.1 H
state_before: ι : Type u
X : Type v
Y : Type w
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : T2Space X
inst✝ : ParacompactSpace X
s t : Set X
hs : IsClosed s
a✝ : IsClosed t
H : ∀ (x : X), x ∈ s → ∃ u v, IsOpen u ∧ IsOpen v ∧ x ∈ u ∧ t ⊆ v ∧ Disjoint u v
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ s ⊆ u ∧ t ⊆ v ∧ Disjoint u v

tactic: rcases precise_refinement_set hs u hu fun x hx ↦ mem_iUnion.2 ⟨⟨x, hx⟩, hxu _⟩ with
  ⟨u', hu'o, hcov', hu'fin, hsub⟩
state_before: ι : Type u
X : Type v
Y : Type w
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : T2Space X
inst✝ : ParacompactSpace X
s t : Set X
hs : IsClosed s
a✝ : IsClosed t
H : ∀ (x : X), x ∈ s → ∃ u v, IsOpen u ∧ IsOpen v ∧ x ∈ u ∧ t ⊆ v ∧ Disjoint u v
u v : ↑s → Set X
hu : ∀ (x : ↑s), IsOpen (u x)
hv : ∀ (x : ↑s), IsOpen (v x)
hxu : ∀ (x : ↑s), ↑x ∈ u x
htv : ∀ (x : ↑s), t ⊆ v x
huv : ∀ (x : ↑s), Disjoint (u x) (v x)
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ s ⊆ u ∧ t ⊆ v ∧ Disjoint u v

tactic: refine' ⟨⋃ i, u' i, closure (⋃ i, u' i)ᶜ, isOpen_iUnion hu'o, isClosed_closure.isOpen_compl,
  hcov', _, disjoint_compl_right.mono le_rfl (compl_le_compl subset_closure)⟩
state_before: case intro.intro.intro.intro
ι : Type u
X : Type v
Y : Type w
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : T2Space X
inst✝ : ParacompactSpace X
s t : Set X
hs : IsClosed s
a✝ : IsClosed t
H : ∀ (x : X), x ∈ s → ∃ u v, IsOpen u ∧ IsOpen v ∧ x ∈ u ∧ t ⊆ v ∧ Disjoint u v
u v : ↑s → Set X
hu : ∀ (x : ↑s), IsOpen (u x)
hv : ∀ (x : ↑s), IsOpen (v x)
hxu : ∀ (x : ↑s), ↑x ∈ u x
htv : ∀ (x : ↑s), t ⊆ v x
huv : ∀ (x : ↑s), Disjoint (u x) (v x)
u' : ↑s → Set X
hu'o : ∀ (i : ↑s), IsOpen (u' i)
hcov' : s ⊆ ⋃ (i : ↑s), u' i
hu'fin : LocallyFinite u'
hsub : ∀ (i : ↑s), u' i ⊆ u i
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ s ⊆ u ∧ t ⊆ v ∧ Disjoint u v

tactic: rw [hu'fin.closure_iUnion, compl_iUnion, subset_iInter_iff]
state_before: case intro.intro.intro.intro
ι : Type u
X : Type v
Y : Type w
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : T2Space X
inst✝ : ParacompactSpace X
s t : Set X
hs : IsClosed s
a✝ : IsClosed t
H : ∀ (x : X), x ∈ s → ∃ u v, IsOpen u ∧ IsOpen v ∧ x ∈ u ∧ t ⊆ v ∧ Disjoint u v
u v : ↑s → Set X
hu : ∀ (x : ↑s), IsOpen (u x)
hv : ∀ (x : ↑s), IsOpen (v x)
hxu : ∀ (x : ↑s), ↑x ∈ u x
htv : ∀ (x : ↑s), t ⊆ v x
huv : ∀ (x : ↑s), Disjoint (u x) (v x)
u' : ↑s → Set X
hu'o : ∀ (i : ↑s), IsOpen (u' i)
hcov' : s ⊆ ⋃ (i : ↑s), u' i
hu'fin : LocallyFinite u'
hsub : ∀ (i : ↑s), u' i ⊆ u i
⊢ t ⊆ closure (⋃ (i : ↑s), u' i)ᶜ

tactic: refine' fun i x hxt hxu ↦
  absurd (htv i hxt) (closure_minimal _ (isClosed_compl_iff.2 <| hv _) hxu)
state_before: case intro.intro.intro.intro
ι : Type u
X : Type v
Y : Type w
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : T2Space X
inst✝ : ParacompactSpace X
s t : Set X
hs : IsClosed s
a✝ : IsClosed t
H : ∀ (x : X), x ∈ s → ∃ u v, IsOpen u ∧ IsOpen v ∧ x ∈ u ∧ t ⊆ v ∧ Disjoint u v
u v : ↑s → Set X
hu : ∀ (x : ↑s), IsOpen (u x)
hv : ∀ (x : ↑s), IsOpen (v x)
hxu : ∀ (x : ↑s), ↑x ∈ u x
htv : ∀ (x : ↑s), t ⊆ v x
huv : ∀ (x : ↑s), Disjoint (u x) (v x)
u' : ↑s → Set X
hu'o : ∀ (i : ↑s), IsOpen (u' i)
hcov' : s ⊆ ⋃ (i : ↑s), u' i
hu'fin : LocallyFinite u'
hsub : ∀ (i : ↑s), u' i ⊆ u i
⊢ ∀ (i : ↑s), t ⊆ closure (u' i)ᶜ

tactic: exact fun y hyu hyv ↦ (huv i).le_bot ⟨hsub _ hyu, hyv⟩
state_before: case intro.intro.intro.intro
ι : Type u
X : Type v
Y : Type w
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : T2Space X
inst✝ : ParacompactSpace X
s t : Set X
hs : IsClosed s
a✝ : IsClosed t
H : ∀ (x : X), x ∈ s → ∃ u v, IsOpen u ∧ IsOpen v ∧ x ∈ u ∧ t ⊆ v ∧ Disjoint u v
u v : ↑s → Set X
hu : ∀ (x : ↑s), IsOpen (u x)
hv : ∀ (x : ↑s), IsOpen (v x)
hxu✝ : ∀ (x : ↑s), ↑x ∈ u x
htv : ∀ (x : ↑s), t ⊆ v x
huv : ∀ (x : ↑s), Disjoint (u x) (v x)
u' : ↑s → Set X
hu'o : ∀ (i : ↑s), IsOpen (u' i)
hcov' : s ⊆ ⋃ (i : ↑s), u' i
hu'fin : LocallyFinite u'
hsub : ∀ (i : ↑s), u' i ⊆ u i
i : ↑s
x : X
hxt : x ∈ t
hxu : x ∈ closure (u' i)
⊢ u' i ⊆ v iᶜ

tactic: simp_rw [singleton_subset_iff]
state_before: ι : Type u
X : Type v
Y : Type w
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : T2Space X
inst✝ : ParacompactSpace X
this :
  ∀ (s t : Set X),
    IsClosed s →
      IsClosed t →
        (∀ (x : X), x ∈ s → ∃ u v, IsOpen u ∧ IsOpen v ∧ x ∈ u ∧ t ⊆ v ∧ Disjoint u v) →
          ∃ u v, IsOpen u ∧ IsOpen v ∧ s ⊆ u ∧ t ⊆ v ∧ Disjoint u v
s t : Set X
hs : IsClosed s
ht : IsClosed t
hst : Disjoint s t
x : X
hx : x ∈ s
y : X
hy : y ∈ t
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ y ∈ u ∧ {x} ⊆ v ∧ Disjoint u v

tactic: exact t2_separation (hst.symm.ne_of_mem hy hx)
state_before: ι : Type u
X : Type v
Y : Type w
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : T2Space X
inst✝ : ParacompactSpace X
this :
  ∀ (s t : Set X),
    IsClosed s →
      IsClosed t →
        (∀ (x : X), x ∈ s → ∃ u v, IsOpen u ∧ IsOpen v ∧ x ∈ u ∧ t ⊆ v ∧ Disjoint u v) →
          ∃ u v, IsOpen u ∧ IsOpen v ∧ s ⊆ u ∧ t ⊆ v ∧ Disjoint u v
s t : Set X
hs : IsClosed s
ht : IsClosed t
hst : Disjoint s t
x : X
hx : x ∈ s
y : X
hy : y ∈ t
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ y ∈ u ∧ x ∈ v ∧ Disjoint u v