-- Mathlib/Topology/Compactness/Paracompact.lean
theorem Topology.IsClosedEmbedding.paracompactSpace [ParacompactSpace Y] {e : X → Y}
    (he : IsClosedEmbedding e) : ParacompactSpace X where
  locallyFinite_refinement α s ho hu

Proof state:
X : Type v
Y : Type w
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : ParacompactSpace Y
e : X → Y
he : IsClosedEmbedding e
α : Type v
s : α → Set X
ho : ∀ (a : α), IsOpen (s a)
hu : ⋃ a, s a = univ
U : α → Set Y
hUo : ∀ (a : α), IsOpen (U a)
hU : ∀ (a : α), e ⁻¹' U a = s a
⊢ ∃ β t, (∀ (b : β), IsOpen (t b)) ∧ ⋃ b, t b = univ ∧ LocallyFinite t ∧ ∀ (b : β), ∃ a, t b ⊆ s a

Tactic:
simp only [← hU] at hu ⊢

Result:
X : Type v
Y : Type w
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : ParacompactSpace Y
e : X → Y
he : IsClosedEmbedding e
α : Type v
s : α → Set X
ho : ∀ (a : α), IsOpen (s a)
U : α → Set Y
hUo : ∀ (a : α), IsOpen (U a)
hU : ∀ (a : α), e ⁻¹' U a = s a
hu : ⋃ a, e ⁻¹' U a = univ
⊢ ∃ β t, (∀ (b : β), IsOpen (t b)) ∧ ⋃ b, t b = univ ∧ LocallyFinite t ∧ ∀ (b : β), ∃ a, t b ⊆ e ⁻¹' U a

Proof state:
X : Type v
Y : Type w
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : ParacompactSpace Y
e : X → Y
he : IsClosedEmbedding e
α : Type v
s : α → Set X
ho : ∀ (a : α), IsOpen (s a)
U : α → Set Y
hUo : ∀ (a : α), IsOpen (U a)
hU : ∀ (a : α), e ⁻¹' U a = s a
hu : ⋃ a, e ⁻¹' U a = univ
⊢ range e ⊆ ⋃ i, U i

Tactic:
simpa only [range_subset_iff, mem_iUnion, iUnion_eq_univ_iff] using hu

Result:
no goals

Proof state:
X : Type v
Y : Type w
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : ParacompactSpace Y
e : X → Y
he : IsClosedEmbedding e
α : Type v
s : α → Set X
ho : ∀ (a : α), IsOpen (s a)
U : α → Set Y
hUo : ∀ (a : α), IsOpen (U a)
hU : ∀ (a : α), e ⁻¹' U a = s a
hu : ⋃ a, e ⁻¹' U a = univ
heU : range e ⊆ ⋃ i, U i
⊢ ∃ β t, (∀ (b : β), IsOpen (t b)) ∧ ⋃ b, t b = univ ∧ LocallyFinite t ∧ ∀ (b : β), ∃ a, t b ⊆ e ⁻¹' U a

Tactic:
rcases precise_refinement_set he.isClosed_range U hUo heU with ⟨V, hVo, heV, hVf, hVU⟩

Result:
case intro.intro.intro.intro
X : Type v
Y : Type w
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : ParacompactSpace Y
e : X → Y
he : IsClosedEmbedding e
α : Type v
s : α → Set X
ho : ∀ (a : α), IsOpen (s a)
U : α → Set Y
hUo : ∀ (a : α), IsOpen (U a)
hU : ∀ (a : α), e ⁻¹' U a = s a
hu : ⋃ a, e ⁻¹' U a = univ
heU : range e ⊆ ⋃ i, U i
V : α → Set Y
hVo : ∀ (i : α), IsOpen (V i)
heV : range e ⊆ ⋃ i, V i
hVf : LocallyFinite V
hVU : ∀ (i : α), V i ⊆ U i
⊢ ∃ β t, (∀ (b : β), IsOpen (t b)) ∧ ⋃ b, t b = univ ∧ LocallyFinite t ∧ ∀ (b : β), ∃ a, t b ⊆ e ⁻¹' U a

Proof state:
X : Type v
Y : Type w
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : ParacompactSpace Y
e : X → Y
he : IsClosedEmbedding e
α : Type v
s : α → Set X
ho : ∀ (a : α), IsOpen (s a)
U : α → Set Y
hUo : ∀ (a : α), IsOpen (U a)
hU : ∀ (a : α), e ⁻¹' U a = s a
hu : ⋃ a, e ⁻¹' U a = univ
⊢ ∃ β t, (∀ (b : β), IsOpen (t b)) ∧ ⋃ b, t b = univ ∧ LocallyFinite t ∧ ∀ (b : β), ∃ a, t b ⊆ e ⁻¹' U a

Tactic:
have heU : range e ⊆ ⋃ i, U i := by
  simpa only [range_subset_iff, mem_iUnion, iUnion_eq_univ_iff] using hu

Result:
X : Type v
Y : Type w
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : ParacompactSpace Y
e : X → Y
he : IsClosedEmbedding e
α : Type v
s : α → Set X
ho : ∀ (a : α), IsOpen (s a)
U : α → Set Y
hUo : ∀ (a : α), IsOpen (U a)
hU : ∀ (a : α), e ⁻¹' U a = s a
hu : ⋃ a, e ⁻¹' U a = univ
heU : range e ⊆ ⋃ i, U i
⊢ ∃ β t, (∀ (b : β), IsOpen (t b)) ∧ ⋃ b, t b = univ ∧ LocallyFinite t ∧ ∀ (b : β), ∃ a, t b ⊆ e ⁻¹' U a

Proof state:
X : Type v
Y : Type w
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : ParacompactSpace Y
e : X → Y
he : IsClosedEmbedding e
α : Type v
s : α → Set X
ho : ∀ (a : α), IsOpen (s a)
hu : ⋃ a, s a = univ
⊢ ∃ β t, (∀ (b : β), IsOpen (t b)) ∧ ⋃ b, t b = univ ∧ LocallyFinite t ∧ ∀ (b : β), ∃ a, t b ⊆ s a

Tactic:
choose U hUo hU using fun a ↦ he.isOpen_iff.1 (ho a)

Result:
X : Type v
Y : Type w
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : ParacompactSpace Y
e : X → Y
he : IsClosedEmbedding e
α : Type v
s : α → Set X
ho : ∀ (a : α), IsOpen (s a)
hu : ⋃ a, s a = univ
U : α → Set Y
hUo : ∀ (a : α), IsOpen (U a)
hU : ∀ (a : α), e ⁻¹' U a = s a
⊢ ∃ β t, (∀ (b : β), IsOpen (t b)) ∧ ⋃ b, t b = univ ∧ LocallyFinite t ∧ ∀ (b : β), ∃ a, t b ⊆ s a

Proof state:
case intro.intro.intro.intro
X : Type v
Y : Type w
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : ParacompactSpace Y
e : X → Y
he : IsClosedEmbedding e
α : Type v
s : α → Set X
ho : ∀ (a : α), IsOpen (s a)
U : α → Set Y
hUo : ∀ (a : α), IsOpen (U a)
hU : ∀ (a : α), e ⁻¹' U a = s a
hu : ⋃ a, e ⁻¹' U a = univ
heU : range e ⊆ ⋃ i, U i
V : α → Set Y
hVo : ∀ (i : α), IsOpen (V i)
heV : range e ⊆ ⋃ i, V i
hVf : LocallyFinite V
hVU : ∀ (i : α), V i ⊆ U i
⊢ ∃ β t, (∀ (b : β), IsOpen (t b)) ∧ ⋃ b, t b = univ ∧ LocallyFinite t ∧ ∀ (b : β), ∃ a, t b ⊆ e ⁻¹' U a

Tactic:
refine ⟨α, fun a ↦ e ⁻¹' (V a), fun a ↦ (hVo a).preimage he.continuous, ?_,
  hVf.preimage_continuous he.continuous, fun a ↦ ⟨a, preimage_mono (hVU a)⟩⟩

Result:
case intro.intro.intro.intro
X : Type v
Y : Type w
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : ParacompactSpace Y
e : X → Y
he : IsClosedEmbedding e
α : Type v
s : α → Set X
ho : ∀ (a : α), IsOpen (s a)
U : α → Set Y
hUo : ∀ (a : α), IsOpen (U a)
hU : ∀ (a : α), e ⁻¹' U a = s a
hu : ⋃ a, e ⁻¹' U a = univ
heU : range e ⊆ ⋃ i, U i
V : α → Set Y
hVo : ∀ (i : α), IsOpen (V i)
heV : range e ⊆ ⋃ i, V i
hVf : LocallyFinite V
hVU : ∀ (i : α), V i ⊆ U i
⊢ ⋃ b, (fun a => e ⁻¹' V a) b = univ

Proof state:
case intro.intro.intro.intro
X : Type v
Y : Type w
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : ParacompactSpace Y
e : X → Y
he : IsClosedEmbedding e
α : Type v
s : α → Set X
ho : ∀ (a : α), IsOpen (s a)
U : α → Set Y
hUo : ∀ (a : α), IsOpen (U a)
hU : ∀ (a : α), e ⁻¹' U a = s a
hu : ⋃ a, e ⁻¹' U a = univ
heU : range e ⊆ ⋃ i, U i
V : α → Set Y
hVo : ∀ (i : α), IsOpen (V i)
heV : range e ⊆ ⋃ i, V i
hVf : LocallyFinite V
hVU : ∀ (i : α), V i ⊆ U i
⊢ ⋃ b, (fun a => e ⁻¹' V a) b = univ

Tactic:
simpa only [range_subset_iff, mem_iUnion, iUnion_eq_univ_iff] using heV

Result:
no goals