-- Mathlib/Topology/Compactness/Paracompact.lean
theorem precise_refinement_set [ParacompactSpace X] {s : Set X} (hs : IsClosed s) (u : ι → Set X)
    (uo : ∀ i, IsOpen (u i)) (us : s ⊆ ⋃ i, u i) :
    ∃ v : ι → Set X, (∀ i, IsOpen (v i)) ∧ (s ⊆ ⋃ i, v i) ∧ LocallyFinite v ∧ ∀ i, v i ⊆ u i

Proof state:
ι : Type u
X : Type v
inst✝¹ : TopologicalSpace X
inst✝ : ParacompactSpace X
s : Set X
hs : IsClosed s
u : ι → Set X
uo : ∀ (i : ι), IsOpen (u i)
us : s ⊆ ⋃ i, u i
uc : ⋃ i, Option.elim' sᶜ u i = univ
⊢ ∃ v, (∀ (i : ι), IsOpen (v i)) ∧ s ⊆ ⋃ i, v i ∧ LocallyFinite v ∧ ∀ (i : ι), v i ⊆ u i

Tactic:
rcases precise_refinement (Option.elim' sᶜ u) (Option.forall.2 ⟨isOpen_compl_iff.2 hs, uo⟩)
    uc with
  ⟨v, vo, vc, vf, vu⟩

Result:
case intro.intro.intro.intro
ι : Type u
X : Type v
inst✝¹ : TopologicalSpace X
inst✝ : ParacompactSpace X
s : Set X
hs : IsClosed s
u : ι → Set X
uo : ∀ (i : ι), IsOpen (u i)
us : s ⊆ ⋃ i, u i
uc : ⋃ i, Option.elim' sᶜ u i = univ
v : Option ι → Set X
vo : ∀ (a : Option ι), IsOpen (v a)
vc : ⋃ i, v i = univ
vf : LocallyFinite v
vu : ∀ (a : Option ι), v a ⊆ Option.elim' sᶜ u a
⊢ ∃ v, (∀ (i : ι), IsOpen (v i)) ∧ s ⊆ ⋃ i, v i ∧ LocallyFinite v ∧ ∀ (i : ι), v i ⊆ u i

Proof state:
ι : Type u
X : Type v
inst✝¹ : TopologicalSpace X
inst✝ : ParacompactSpace X
s : Set X
hs : IsClosed s
u : ι → Set X
uo : ∀ (i : ι), IsOpen (u i)
us : s ⊆ ⋃ i, u i
⊢ sᶜ ∪ s ⊆ sᶜ ∪ ⋃ i, u i

Tactic:
apply union_subset_union_right sᶜ us

Result:
no goals

Proof state:
case intro.intro.intro.intro
ι : Type u
X : Type v
inst✝¹ : TopologicalSpace X
inst✝ : ParacompactSpace X
s : Set X
hs : IsClosed s
u : ι → Set X
uo : ∀ (i : ι), IsOpen (u i)
us : s ⊆ ⋃ i, u i
uc : ⋃ i, Option.elim' sᶜ u i = univ
v : Option ι → Set X
vo : ∀ (a : Option ι), IsOpen (v a)
vc : ⋃ i, v i = univ
vf : LocallyFinite v
vu : ∀ (a : Option ι), v a ⊆ Option.elim' sᶜ u a
⊢ s ⊆ ⋃ i, (v ∘ some) i

Tactic:
simp only [iUnion_option, ← compl_subset_iff_union] at vc

Result:
case intro.intro.intro.intro
ι : Type u
X : Type v
inst✝¹ : TopologicalSpace X
inst✝ : ParacompactSpace X
s : Set X
hs : IsClosed s
u : ι → Set X
uo : ∀ (i : ι), IsOpen (u i)
us : s ⊆ ⋃ i, u i
uc : ⋃ i, Option.elim' sᶜ u i = univ
v : Option ι → Set X
vo : ∀ (a : Option ι), IsOpen (v a)
vf : LocallyFinite v
vu : ∀ (a : Option ι), v a ⊆ Option.elim' sᶜ u a
vc : (v none)ᶜ ⊆ ⋃ i, v (some i)
⊢ s ⊆ ⋃ i, (v ∘ some) i

Proof state:
ι : Type u
X : Type v
inst✝¹ : TopologicalSpace X
inst✝ : ParacompactSpace X
s : Set X
hs : IsClosed s
u : ι → Set X
uo : ∀ (i : ι), IsOpen (u i)
us : s ⊆ ⋃ i, u i
⊢ univ ⊆ ⋃ i, Option.elim' sᶜ u i

Tactic:
simp_rw [← compl_union_self s, Option.elim', iUnion_option]

Result:
ι : Type u
X : Type v
inst✝¹ : TopologicalSpace X
inst✝ : ParacompactSpace X
s : Set X
hs : IsClosed s
u : ι → Set X
uo : ∀ (i : ι), IsOpen (u i)
us : s ⊆ ⋃ i, u i
⊢ sᶜ ∪ s ⊆ sᶜ ∪ ⋃ i, u i

Proof state:
case intro.intro.intro.intro
ι : Type u
X : Type v
inst✝¹ : TopologicalSpace X
inst✝ : ParacompactSpace X
s : Set X
hs : IsClosed s
u : ι → Set X
uo : ∀ (i : ι), IsOpen (u i)
us : s ⊆ ⋃ i, u i
uc : ⋃ i, Option.elim' sᶜ u i = univ
v : Option ι → Set X
vo : ∀ (a : Option ι), IsOpen (v a)
vc : ⋃ i, v i = univ
vf : LocallyFinite v
vu : ∀ (a : Option ι), v a ⊆ Option.elim' sᶜ u a
⊢ ∃ v, (∀ (i : ι), IsOpen (v i)) ∧ s ⊆ ⋃ i, v i ∧ LocallyFinite v ∧ ∀ (i : ι), v i ⊆ u i

Tactic:
refine ⟨v ∘ some, fun i ↦ vo _, ?_, vf.comp_injective (Option.some_injective _), fun i ↦ vu _⟩

Result:
case intro.intro.intro.intro
ι : Type u
X : Type v
inst✝¹ : TopologicalSpace X
inst✝ : ParacompactSpace X
s : Set X
hs : IsClosed s
u : ι → Set X
uo : ∀ (i : ι), IsOpen (u i)
us : s ⊆ ⋃ i, u i
uc : ⋃ i, Option.elim' sᶜ u i = univ
v : Option ι → Set X
vo : ∀ (a : Option ι), IsOpen (v a)
vc : ⋃ i, v i = univ
vf : LocallyFinite v
vu : ∀ (a : Option ι), v a ⊆ Option.elim' sᶜ u a
⊢ s ⊆ ⋃ i, (v ∘ some) i

Proof state:
case intro.intro.intro.intro
ι : Type u
X : Type v
inst✝¹ : TopologicalSpace X
inst✝ : ParacompactSpace X
s : Set X
hs : IsClosed s
u : ι → Set X
uo : ∀ (i : ι), IsOpen (u i)
us : s ⊆ ⋃ i, u i
uc : ⋃ i, Option.elim' sᶜ u i = univ
v : Option ι → Set X
vo : ∀ (a : Option ι), IsOpen (v a)
vf : LocallyFinite v
vu : ∀ (a : Option ι), v a ⊆ Option.elim' sᶜ u a
vc : (v none)ᶜ ⊆ ⋃ i, v (some i)
⊢ s ⊆ ⋃ i, (v ∘ some) i

Tactic:
exact Subset.trans (subset_compl_comm.1 <| vu Option.none) vc

Result:
no goals

Proof state:
ι : Type u
X : Type v
inst✝¹ : TopologicalSpace X
inst✝ : ParacompactSpace X
s : Set X
hs : IsClosed s
u : ι → Set X
uo : ∀ (i : ι), IsOpen (u i)
us : s ⊆ ⋃ i, u i
⊢ ⋃ i, Option.elim' sᶜ u i = univ

Tactic:
apply Subset.antisymm (subset_univ _)

Result:
ι : Type u
X : Type v
inst✝¹ : TopologicalSpace X
inst✝ : ParacompactSpace X
s : Set X
hs : IsClosed s
u : ι → Set X
uo : ∀ (i : ι), IsOpen (u i)
us : s ⊆ ⋃ i, u i
⊢ univ ⊆ ⋃ i, Option.elim' sᶜ u i