topology.paracompactMathlib.Topology.Compactness.Paracompact

This file has been ported!

Changes since the initial port

The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -85,7 +85,7 @@ theorem precise_refinement [ParacompactSpace X] (u : ι → Set X) (uo : ∀ a,
     ParacompactSpace.locallyFinite_refinement (range u) coe
       (SetCoe.forall.2 <| forall_range_iff.2 uo) (by rwa [← sUnion_range, Subtype.range_coe])
   simp only [SetCoe.exists, Subtype.coe_mk, exists_range_iff', Union_eq_univ_iff, exists_prop] at
-    this 
+    this
   choose α t hto hXt htf ind hind; choose t_inv ht_inv using hXt; choose U hxU hU using htf
   -- Send each `i` to the union of `t a` over `a ∈ ind ⁻¹' {i}`
   refine' ⟨fun i => ⋃ (a : α) (ha : ind a = i), t a, _, _, _, _⟩
@@ -113,7 +113,7 @@ theorem precise_refinement_set [ParacompactSpace X] {s : Set X} (hs : IsClosed s
       _ with
     ⟨v, vo, vc, vf, vu⟩
   refine' ⟨v ∘ some, fun i => vo _, _, vf.comp_injective (Option.some_injective _), fun i => vu _⟩
-  · simp only [Union_option, ← compl_subset_iff_union] at vc 
+  · simp only [Union_option, ← compl_subset_iff_union] at vc
     exact subset.trans (subset_compl_comm.1 <| vu Option.none) vc
   · simpa only [Union_option, Option.elim', ← compl_subset_iff_union, compl_compl]
 #align precise_refinement_set precise_refinement_set
@@ -127,7 +127,7 @@ instance (priority := 100) paracompact_of_compact [CompactSpace X] : Paracompact
   -- the proof is trivial: we choose a finite subcover using compactness, and use it
   refine' ⟨fun ι s ho hu => _⟩
   rcases is_compact_univ.elim_finite_subcover _ ho hu.ge with ⟨T, hT⟩
-  have := hT; simp only [subset_def, mem_Union] at this 
+  have := hT; simp only [subset_def, mem_Union] at this
   choose i hiT hi using fun x => this x (mem_univ x)
   refine'
     ⟨(T : Set ι), fun t => s t, fun t => ho _, _, locallyFinite_of_finite _, fun t =>
Diff
@@ -163,16 +163,53 @@ theorem refinement_of_locallyCompact_sigmaCompact_of_nhds_basis_set [LocallyComp
     ∃ (α : Type v) (c : α → X) (r : ∀ a, ι (c a)),
       (∀ a, c a ∈ s ∧ p (c a) (r a)) ∧
         (s ⊆ ⋃ a, B (c a) (r a)) ∧ LocallyFinite fun a => B (c a) (r a) :=
-  by classical
+  by
+  classical
+  -- For technical reasons we prepend two empty sets to the sequence `compact_exhaustion.choice X`
+  set K' : CompactExhaustion X := CompactExhaustion.choice X
+  set K : CompactExhaustion X := K'.shiftr.shiftr
+  set Kdiff := fun n => K (n + 1) \ interior (K n)
+  -- Now we restate some properties of `compact_exhaustion` for `K`/`Kdiff`
+  have hKcov : ∀ x, x ∈ Kdiff (K'.find x + 1) :=
+    by
+    intro x
+    simpa only [K'.find_shiftr] using
+      diff_subset_diff_right interior_subset (K'.shiftr.mem_diff_shiftr_find x)
+  have Kdiffc : ∀ n, IsCompact (Kdiff n ∩ s) := fun n =>
+    ((K.is_compact _).diffₓ isOpen_interior).inter_right hs
+  -- Next we choose a finite covering `B (c n i) (r n i)` of each
+  -- `Kdiff (n + 1) ∩ s` such that `B (c n i) (r n i) ∩ s` is disjoint with `K n`
+  have : ∀ (n) (x : Kdiff (n + 1) ∩ s), K nᶜ ∈ 𝓝 (x : X) := fun n x =>
+    IsOpen.mem_nhds (K.is_closed n).isOpen_compl fun hx' => x.2.1.2 <| K.subset_interior_succ _ hx'
+  haveI : ∀ (n) (x : Kdiff n ∩ s), Nonempty (ι x) := fun n x => (hB x x.2.2).Nonempty
+  choose! r hrp hr using fun n (x : Kdiff (n + 1) ∩ s) => (hB x x.2.2).mem_iff.1 (this n x)
+  have hxr : ∀ (n x) (hx : x ∈ Kdiff (n + 1) ∩ s), B x (r n ⟨x, hx⟩) ∈ 𝓝 x := fun n x hx =>
+    (hB x hx.2).mem_of_mem (hrp _ ⟨x, hx⟩)
+  choose T hT using fun n => (Kdiffc (n + 1)).elim_nhds_subcover' _ (hxr n)
+  set T' : ∀ n, Set ↥(Kdiff (n + 1) ∩ s) := fun n => T n
+  -- Finally, we take the union of all these coverings
+  refine' ⟨Σ n, T' n, fun a => a.2, fun a => r a.1 a.2, _, _, _⟩
+  · rintro ⟨n, x, hx⟩; exact ⟨x.2.2, hrp _ _⟩
+  · refine' fun x hx => mem_Union.2 _
+    rcases mem_Union₂.1 (hT _ ⟨hKcov x, hx⟩) with ⟨⟨c, hc⟩, hcT, hcx⟩
+    exact ⟨⟨_, ⟨c, hc⟩, hcT⟩, hcx⟩
+  · intro x
+    refine'
+      ⟨interior (K (K'.find x + 3)),
+        IsOpen.mem_nhds isOpen_interior (K.subset_interior_succ _ (hKcov x).1), _⟩
+    have : (⋃ k ≤ K'.find x + 2, range <| Sigma.mk k : Set (Σ n, T' n)).Finite :=
+      (finite_le_nat _).biUnion fun k hk => finite_range _
+    apply this.subset; rintro ⟨k, c, hc⟩
+    simp only [mem_Union, mem_set_of_eq, mem_image, Subtype.coe_mk]
+    rintro ⟨x, hxB : x ∈ B c (r k c), hxK⟩
+    refine' ⟨k, _, ⟨c, hc⟩, rfl⟩
+    have := (mem_compl_iff _ _).1 (hr k c hxB)
+    contrapose! this with hnk
+    exact K.subset hnk (interior_subset hxK)
 #align refinement_of_locally_compact_sigma_compact_of_nhds_basis_set refinement_of_locallyCompact_sigmaCompact_of_nhds_basis_set
 -/
 
 #print refinement_of_locallyCompact_sigmaCompact_of_nhds_basis /-
--- For technical reasons we prepend two empty sets to the sequence `compact_exhaustion.choice X`
--- Now we restate some properties of `compact_exhaustion` for `K`/`Kdiff`
--- Next we choose a finite covering `B (c n i) (r n i)` of each
--- `Kdiff (n + 1) ∩ s` such that `B (c n i) (r n i) ∩ s` is disjoint with `K n`
--- Finally, we take the union of all these coverings
 /-- Let `X` be a locally compact sigma compact Hausdorff topological space. Suppose that for each
 `x` the sets `B x : ι x → set X` with the predicate `p x : ι x → Prop` form a basis of the filter
 `𝓝 x`. Then there exists a locally finite covering `λ i, B (c i) (r i)` of `X` such that each `r i`
Diff
@@ -163,53 +163,16 @@ theorem refinement_of_locallyCompact_sigmaCompact_of_nhds_basis_set [LocallyComp
     ∃ (α : Type v) (c : α → X) (r : ∀ a, ι (c a)),
       (∀ a, c a ∈ s ∧ p (c a) (r a)) ∧
         (s ⊆ ⋃ a, B (c a) (r a)) ∧ LocallyFinite fun a => B (c a) (r a) :=
-  by
-  classical
-  -- For technical reasons we prepend two empty sets to the sequence `compact_exhaustion.choice X`
-  set K' : CompactExhaustion X := CompactExhaustion.choice X
-  set K : CompactExhaustion X := K'.shiftr.shiftr
-  set Kdiff := fun n => K (n + 1) \ interior (K n)
-  -- Now we restate some properties of `compact_exhaustion` for `K`/`Kdiff`
-  have hKcov : ∀ x, x ∈ Kdiff (K'.find x + 1) :=
-    by
-    intro x
-    simpa only [K'.find_shiftr] using
-      diff_subset_diff_right interior_subset (K'.shiftr.mem_diff_shiftr_find x)
-  have Kdiffc : ∀ n, IsCompact (Kdiff n ∩ s) := fun n =>
-    ((K.is_compact _).diffₓ isOpen_interior).inter_right hs
-  -- Next we choose a finite covering `B (c n i) (r n i)` of each
-  -- `Kdiff (n + 1) ∩ s` such that `B (c n i) (r n i) ∩ s` is disjoint with `K n`
-  have : ∀ (n) (x : Kdiff (n + 1) ∩ s), K nᶜ ∈ 𝓝 (x : X) := fun n x =>
-    IsOpen.mem_nhds (K.is_closed n).isOpen_compl fun hx' => x.2.1.2 <| K.subset_interior_succ _ hx'
-  haveI : ∀ (n) (x : Kdiff n ∩ s), Nonempty (ι x) := fun n x => (hB x x.2.2).Nonempty
-  choose! r hrp hr using fun n (x : Kdiff (n + 1) ∩ s) => (hB x x.2.2).mem_iff.1 (this n x)
-  have hxr : ∀ (n x) (hx : x ∈ Kdiff (n + 1) ∩ s), B x (r n ⟨x, hx⟩) ∈ 𝓝 x := fun n x hx =>
-    (hB x hx.2).mem_of_mem (hrp _ ⟨x, hx⟩)
-  choose T hT using fun n => (Kdiffc (n + 1)).elim_nhds_subcover' _ (hxr n)
-  set T' : ∀ n, Set ↥(Kdiff (n + 1) ∩ s) := fun n => T n
-  -- Finally, we take the union of all these coverings
-  refine' ⟨Σ n, T' n, fun a => a.2, fun a => r a.1 a.2, _, _, _⟩
-  · rintro ⟨n, x, hx⟩; exact ⟨x.2.2, hrp _ _⟩
-  · refine' fun x hx => mem_Union.2 _
-    rcases mem_Union₂.1 (hT _ ⟨hKcov x, hx⟩) with ⟨⟨c, hc⟩, hcT, hcx⟩
-    exact ⟨⟨_, ⟨c, hc⟩, hcT⟩, hcx⟩
-  · intro x
-    refine'
-      ⟨interior (K (K'.find x + 3)),
-        IsOpen.mem_nhds isOpen_interior (K.subset_interior_succ _ (hKcov x).1), _⟩
-    have : (⋃ k ≤ K'.find x + 2, range <| Sigma.mk k : Set (Σ n, T' n)).Finite :=
-      (finite_le_nat _).biUnion fun k hk => finite_range _
-    apply this.subset; rintro ⟨k, c, hc⟩
-    simp only [mem_Union, mem_set_of_eq, mem_image, Subtype.coe_mk]
-    rintro ⟨x, hxB : x ∈ B c (r k c), hxK⟩
-    refine' ⟨k, _, ⟨c, hc⟩, rfl⟩
-    have := (mem_compl_iff _ _).1 (hr k c hxB)
-    contrapose! this with hnk
-    exact K.subset hnk (interior_subset hxK)
+  by classical
 #align refinement_of_locally_compact_sigma_compact_of_nhds_basis_set refinement_of_locallyCompact_sigmaCompact_of_nhds_basis_set
 -/
 
 #print refinement_of_locallyCompact_sigmaCompact_of_nhds_basis /-
+-- For technical reasons we prepend two empty sets to the sequence `compact_exhaustion.choice X`
+-- Now we restate some properties of `compact_exhaustion` for `K`/`Kdiff`
+-- Next we choose a finite covering `B (c n i) (r n i)` of each
+-- `Kdiff (n + 1) ∩ s` such that `B (c n i) (r n i) ∩ s` is disjoint with `K n`
+-- Finally, we take the union of all these coverings
 /-- Let `X` be a locally compact sigma compact Hausdorff topological space. Suppose that for each
 `x` the sets `B x : ι x → set X` with the predicate `p x : ι x → Prop` form a basis of the filter
 `𝓝 x`. Then there exists a locally finite covering `λ i, B (c i) (r i)` of `X` such that each `r i`
Diff
@@ -3,9 +3,9 @@ Copyright (c) 2021 Yury Kudryashov. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Reid Barton, Yury Kudryashov
 -/
-import Mathbin.Topology.SubsetProperties
-import Mathbin.Topology.Separation
-import Mathbin.Data.Option.Basic
+import Topology.SubsetProperties
+import Topology.Separation
+import Data.Option.Basic
 
 #align_import topology.paracompact from "leanprover-community/mathlib"@"0a0ec35061ed9960bf0e7ffb0335f44447b58977"
 
Diff
@@ -256,10 +256,10 @@ instance (priority := 100) paracompact_of_locallyCompact_sigmaCompact [LocallyCo
 #align paracompact_of_locally_compact_sigma_compact paracompact_of_locallyCompact_sigmaCompact
 -/
 
-#print normal_of_paracompact_t2 /-
+#print T4Space.of_paracompactSpace_t2Space /-
 /- Dieudonné‘s theorem: a paracompact Hausdorff space is normal. Formalization is based on the proof
 at [ncatlab](https://ncatlab.org/nlab/show/paracompact+Hausdorff+spaces+are+normal). -/
-theorem normal_of_paracompact_t2 [T2Space X] [ParacompactSpace X] : NormalSpace X :=
+theorem T4Space.of_paracompactSpace_t2Space [T2Space X] [ParacompactSpace X] : NormalSpace X :=
   by
   -- First we show how to go from points to a set on one side.
   have :
@@ -289,6 +289,6 @@ theorem normal_of_paracompact_t2 [T2Space X] [ParacompactSpace X] : NormalSpace
   · exact ⟨u, v, hu, hv, singleton_subset_iff.1 hxu, htv, huv.symm⟩
   · simp_rw [singleton_subset_iff]
     exact t2_separation (hst.symm.ne_of_mem hy hx)
-#align normal_of_paracompact_t2 normal_of_paracompact_t2
+#align normal_of_paracompact_t2 T4Space.of_paracompactSpace_t2Space
 -/
 
Diff
@@ -2,16 +2,13 @@
 Copyright (c) 2021 Yury Kudryashov. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Reid Barton, Yury Kudryashov
-
-! This file was ported from Lean 3 source module topology.paracompact
-! leanprover-community/mathlib commit 0a0ec35061ed9960bf0e7ffb0335f44447b58977
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Topology.SubsetProperties
 import Mathbin.Topology.Separation
 import Mathbin.Data.Option.Basic
 
+#align_import topology.paracompact from "leanprover-community/mathlib"@"0a0ec35061ed9960bf0e7ffb0335f44447b58977"
+
 /-!
 # Paracompact topological spaces
 
Diff
@@ -168,48 +168,47 @@ theorem refinement_of_locallyCompact_sigmaCompact_of_nhds_basis_set [LocallyComp
         (s ⊆ ⋃ a, B (c a) (r a)) ∧ LocallyFinite fun a => B (c a) (r a) :=
   by
   classical
-    -- For technical reasons we prepend two empty sets to the sequence `compact_exhaustion.choice X`
-    set K' : CompactExhaustion X := CompactExhaustion.choice X
-    set K : CompactExhaustion X := K'.shiftr.shiftr
-    set Kdiff := fun n => K (n + 1) \ interior (K n)
-    -- Now we restate some properties of `compact_exhaustion` for `K`/`Kdiff`
-    have hKcov : ∀ x, x ∈ Kdiff (K'.find x + 1) :=
-      by
-      intro x
-      simpa only [K'.find_shiftr] using
-        diff_subset_diff_right interior_subset (K'.shiftr.mem_diff_shiftr_find x)
-    have Kdiffc : ∀ n, IsCompact (Kdiff n ∩ s) := fun n =>
-      ((K.is_compact _).diffₓ isOpen_interior).inter_right hs
-    -- Next we choose a finite covering `B (c n i) (r n i)` of each
-    -- `Kdiff (n + 1) ∩ s` such that `B (c n i) (r n i) ∩ s` is disjoint with `K n`
-    have : ∀ (n) (x : Kdiff (n + 1) ∩ s), K nᶜ ∈ 𝓝 (x : X) := fun n x =>
-      IsOpen.mem_nhds (K.is_closed n).isOpen_compl fun hx' =>
-        x.2.1.2 <| K.subset_interior_succ _ hx'
-    haveI : ∀ (n) (x : Kdiff n ∩ s), Nonempty (ι x) := fun n x => (hB x x.2.2).Nonempty
-    choose! r hrp hr using fun n (x : Kdiff (n + 1) ∩ s) => (hB x x.2.2).mem_iff.1 (this n x)
-    have hxr : ∀ (n x) (hx : x ∈ Kdiff (n + 1) ∩ s), B x (r n ⟨x, hx⟩) ∈ 𝓝 x := fun n x hx =>
-      (hB x hx.2).mem_of_mem (hrp _ ⟨x, hx⟩)
-    choose T hT using fun n => (Kdiffc (n + 1)).elim_nhds_subcover' _ (hxr n)
-    set T' : ∀ n, Set ↥(Kdiff (n + 1) ∩ s) := fun n => T n
-    -- Finally, we take the union of all these coverings
-    refine' ⟨Σ n, T' n, fun a => a.2, fun a => r a.1 a.2, _, _, _⟩
-    · rintro ⟨n, x, hx⟩; exact ⟨x.2.2, hrp _ _⟩
-    · refine' fun x hx => mem_Union.2 _
-      rcases mem_Union₂.1 (hT _ ⟨hKcov x, hx⟩) with ⟨⟨c, hc⟩, hcT, hcx⟩
-      exact ⟨⟨_, ⟨c, hc⟩, hcT⟩, hcx⟩
-    · intro x
-      refine'
-        ⟨interior (K (K'.find x + 3)),
-          IsOpen.mem_nhds isOpen_interior (K.subset_interior_succ _ (hKcov x).1), _⟩
-      have : (⋃ k ≤ K'.find x + 2, range <| Sigma.mk k : Set (Σ n, T' n)).Finite :=
-        (finite_le_nat _).biUnion fun k hk => finite_range _
-      apply this.subset; rintro ⟨k, c, hc⟩
-      simp only [mem_Union, mem_set_of_eq, mem_image, Subtype.coe_mk]
-      rintro ⟨x, hxB : x ∈ B c (r k c), hxK⟩
-      refine' ⟨k, _, ⟨c, hc⟩, rfl⟩
-      have := (mem_compl_iff _ _).1 (hr k c hxB)
-      contrapose! this with hnk
-      exact K.subset hnk (interior_subset hxK)
+  -- For technical reasons we prepend two empty sets to the sequence `compact_exhaustion.choice X`
+  set K' : CompactExhaustion X := CompactExhaustion.choice X
+  set K : CompactExhaustion X := K'.shiftr.shiftr
+  set Kdiff := fun n => K (n + 1) \ interior (K n)
+  -- Now we restate some properties of `compact_exhaustion` for `K`/`Kdiff`
+  have hKcov : ∀ x, x ∈ Kdiff (K'.find x + 1) :=
+    by
+    intro x
+    simpa only [K'.find_shiftr] using
+      diff_subset_diff_right interior_subset (K'.shiftr.mem_diff_shiftr_find x)
+  have Kdiffc : ∀ n, IsCompact (Kdiff n ∩ s) := fun n =>
+    ((K.is_compact _).diffₓ isOpen_interior).inter_right hs
+  -- Next we choose a finite covering `B (c n i) (r n i)` of each
+  -- `Kdiff (n + 1) ∩ s` such that `B (c n i) (r n i) ∩ s` is disjoint with `K n`
+  have : ∀ (n) (x : Kdiff (n + 1) ∩ s), K nᶜ ∈ 𝓝 (x : X) := fun n x =>
+    IsOpen.mem_nhds (K.is_closed n).isOpen_compl fun hx' => x.2.1.2 <| K.subset_interior_succ _ hx'
+  haveI : ∀ (n) (x : Kdiff n ∩ s), Nonempty (ι x) := fun n x => (hB x x.2.2).Nonempty
+  choose! r hrp hr using fun n (x : Kdiff (n + 1) ∩ s) => (hB x x.2.2).mem_iff.1 (this n x)
+  have hxr : ∀ (n x) (hx : x ∈ Kdiff (n + 1) ∩ s), B x (r n ⟨x, hx⟩) ∈ 𝓝 x := fun n x hx =>
+    (hB x hx.2).mem_of_mem (hrp _ ⟨x, hx⟩)
+  choose T hT using fun n => (Kdiffc (n + 1)).elim_nhds_subcover' _ (hxr n)
+  set T' : ∀ n, Set ↥(Kdiff (n + 1) ∩ s) := fun n => T n
+  -- Finally, we take the union of all these coverings
+  refine' ⟨Σ n, T' n, fun a => a.2, fun a => r a.1 a.2, _, _, _⟩
+  · rintro ⟨n, x, hx⟩; exact ⟨x.2.2, hrp _ _⟩
+  · refine' fun x hx => mem_Union.2 _
+    rcases mem_Union₂.1 (hT _ ⟨hKcov x, hx⟩) with ⟨⟨c, hc⟩, hcT, hcx⟩
+    exact ⟨⟨_, ⟨c, hc⟩, hcT⟩, hcx⟩
+  · intro x
+    refine'
+      ⟨interior (K (K'.find x + 3)),
+        IsOpen.mem_nhds isOpen_interior (K.subset_interior_succ _ (hKcov x).1), _⟩
+    have : (⋃ k ≤ K'.find x + 2, range <| Sigma.mk k : Set (Σ n, T' n)).Finite :=
+      (finite_le_nat _).biUnion fun k hk => finite_range _
+    apply this.subset; rintro ⟨k, c, hc⟩
+    simp only [mem_Union, mem_set_of_eq, mem_image, Subtype.coe_mk]
+    rintro ⟨x, hxB : x ∈ B c (r k c), hxK⟩
+    refine' ⟨k, _, ⟨c, hc⟩, rfl⟩
+    have := (mem_compl_iff _ _).1 (hr k c hxB)
+    contrapose! this with hnk
+    exact K.subset hnk (interior_subset hxK)
 #align refinement_of_locally_compact_sigma_compact_of_nhds_basis_set refinement_of_locallyCompact_sigmaCompact_of_nhds_basis_set
 -/
 
Diff
@@ -69,7 +69,7 @@ finite refinement `t : α → set X` indexed on the same type such that each `
 class ParacompactSpace (X : Type v) [TopologicalSpace X] : Prop where
   locallyFinite_refinement :
     ∀ (α : Type v) (s : α → Set X) (ho : ∀ a, IsOpen (s a)) (hc : (⋃ a, s a) = univ),
-      ∃ (β : Type v)(t : β → Set X)(ho : ∀ b, IsOpen (t b))(hc : (⋃ b, t b) = univ),
+      ∃ (β : Type v) (t : β → Set X) (ho : ∀ b, IsOpen (t b)) (hc : (⋃ b, t b) = univ),
         LocallyFinite t ∧ ∀ b, ∃ a, t b ⊆ s a
 #align paracompact_space ParacompactSpace
 -/
@@ -88,7 +88,7 @@ theorem precise_refinement [ParacompactSpace X] (u : ι → Set X) (uo : ∀ a,
     ParacompactSpace.locallyFinite_refinement (range u) coe
       (SetCoe.forall.2 <| forall_range_iff.2 uo) (by rwa [← sUnion_range, Subtype.range_coe])
   simp only [SetCoe.exists, Subtype.coe_mk, exists_range_iff', Union_eq_univ_iff, exists_prop] at
-    this
+    this 
   choose α t hto hXt htf ind hind; choose t_inv ht_inv using hXt; choose U hxU hU using htf
   -- Send each `i` to the union of `t a` over `a ∈ ind ⁻¹' {i}`
   refine' ⟨fun i => ⋃ (a : α) (ha : ind a = i), t a, _, _, _, _⟩
@@ -116,7 +116,7 @@ theorem precise_refinement_set [ParacompactSpace X] {s : Set X} (hs : IsClosed s
       _ with
     ⟨v, vo, vc, vf, vu⟩
   refine' ⟨v ∘ some, fun i => vo _, _, vf.comp_injective (Option.some_injective _), fun i => vu _⟩
-  · simp only [Union_option, ← compl_subset_iff_union] at vc
+  · simp only [Union_option, ← compl_subset_iff_union] at vc 
     exact subset.trans (subset_compl_comm.1 <| vu Option.none) vc
   · simpa only [Union_option, Option.elim', ← compl_subset_iff_union, compl_compl]
 #align precise_refinement_set precise_refinement_set
@@ -130,7 +130,7 @@ instance (priority := 100) paracompact_of_compact [CompactSpace X] : Paracompact
   -- the proof is trivial: we choose a finite subcover using compactness, and use it
   refine' ⟨fun ι s ho hu => _⟩
   rcases is_compact_univ.elim_finite_subcover _ ho hu.ge with ⟨T, hT⟩
-  have := hT; simp only [subset_def, mem_Union] at this
+  have := hT; simp only [subset_def, mem_Union] at this 
   choose i hiT hi using fun x => this x (mem_univ x)
   refine'
     ⟨(T : Set ι), fun t => s t, fun t => ho _, _, locallyFinite_of_finite _, fun t =>
@@ -163,7 +163,7 @@ to choose `α = X`. This fact is not yet formalized in `mathlib`. -/
 theorem refinement_of_locallyCompact_sigmaCompact_of_nhds_basis_set [LocallyCompactSpace X]
     [SigmaCompactSpace X] [T2Space X] {ι : X → Type u} {p : ∀ x, ι x → Prop} {B : ∀ x, ι x → Set X}
     {s : Set X} (hs : IsClosed s) (hB : ∀ x ∈ s, (𝓝 x).HasBasis (p x) (B x)) :
-    ∃ (α : Type v)(c : α → X)(r : ∀ a, ι (c a)),
+    ∃ (α : Type v) (c : α → X) (r : ∀ a, ι (c a)),
       (∀ a, c a ∈ s ∧ p (c a) (r a)) ∧
         (s ⊆ ⋃ a, B (c a) (r a)) ∧ LocallyFinite fun a => B (c a) (r a) :=
   by
@@ -192,7 +192,7 @@ theorem refinement_of_locallyCompact_sigmaCompact_of_nhds_basis_set [LocallyComp
     choose T hT using fun n => (Kdiffc (n + 1)).elim_nhds_subcover' _ (hxr n)
     set T' : ∀ n, Set ↥(Kdiff (n + 1) ∩ s) := fun n => T n
     -- Finally, we take the union of all these coverings
-    refine' ⟨Σn, T' n, fun a => a.2, fun a => r a.1 a.2, _, _, _⟩
+    refine' ⟨Σ n, T' n, fun a => a.2, fun a => r a.1 a.2, _, _, _⟩
     · rintro ⟨n, x, hx⟩; exact ⟨x.2.2, hrp _ _⟩
     · refine' fun x hx => mem_Union.2 _
       rcases mem_Union₂.1 (hT _ ⟨hKcov x, hx⟩) with ⟨⟨c, hc⟩, hcT, hcx⟩
@@ -201,7 +201,7 @@ theorem refinement_of_locallyCompact_sigmaCompact_of_nhds_basis_set [LocallyComp
       refine'
         ⟨interior (K (K'.find x + 3)),
           IsOpen.mem_nhds isOpen_interior (K.subset_interior_succ _ (hKcov x).1), _⟩
-      have : (⋃ k ≤ K'.find x + 2, range <| Sigma.mk k : Set (Σn, T' n)).Finite :=
+      have : (⋃ k ≤ K'.find x + 2, range <| Sigma.mk k : Set (Σ n, T' n)).Finite :=
         (finite_le_nat _).biUnion fun k hk => finite_range _
       apply this.subset; rintro ⟨k, c, hc⟩
       simp only [mem_Union, mem_set_of_eq, mem_image, Subtype.coe_mk]
@@ -236,7 +236,7 @@ to choose `α = X`. This fact is not yet formalized in `mathlib`. -/
 theorem refinement_of_locallyCompact_sigmaCompact_of_nhds_basis [LocallyCompactSpace X]
     [SigmaCompactSpace X] [T2Space X] {ι : X → Type u} {p : ∀ x, ι x → Prop} {B : ∀ x, ι x → Set X}
     (hB : ∀ x, (𝓝 x).HasBasis (p x) (B x)) :
-    ∃ (α : Type v)(c : α → X)(r : ∀ a, ι (c a)),
+    ∃ (α : Type v) (c : α → X) (r : ∀ a, ι (c a)),
       (∀ a, p (c a) (r a)) ∧ (⋃ a, B (c a) (r a)) = univ ∧ LocallyFinite fun a => B (c a) (r a) :=
   let ⟨α, c, r, hp, hU, hfin⟩ :=
     refinement_of_locallyCompact_sigmaCompact_of_nhds_basis_set isClosed_univ fun x _ => hB x
Diff
@@ -56,7 +56,7 @@ compact space, paracompact space, locally finite covering
 
 open Set Filter Function
 
-open Filter Topology
+open scoped Filter Topology
 
 universe u v
 
Diff
@@ -193,8 +193,7 @@ theorem refinement_of_locallyCompact_sigmaCompact_of_nhds_basis_set [LocallyComp
     set T' : ∀ n, Set ↥(Kdiff (n + 1) ∩ s) := fun n => T n
     -- Finally, we take the union of all these coverings
     refine' ⟨Σn, T' n, fun a => a.2, fun a => r a.1 a.2, _, _, _⟩
-    · rintro ⟨n, x, hx⟩
-      exact ⟨x.2.2, hrp _ _⟩
+    · rintro ⟨n, x, hx⟩; exact ⟨x.2.2, hrp _ _⟩
     · refine' fun x hx => mem_Union.2 _
       rcases mem_Union₂.1 (hT _ ⟨hKcov x, hx⟩) with ⟨⟨c, hc⟩, hcT, hcx⟩
       exact ⟨⟨_, ⟨c, hc⟩, hcT⟩, hcx⟩
@@ -204,8 +203,7 @@ theorem refinement_of_locallyCompact_sigmaCompact_of_nhds_basis_set [LocallyComp
           IsOpen.mem_nhds isOpen_interior (K.subset_interior_succ _ (hKcov x).1), _⟩
       have : (⋃ k ≤ K'.find x + 2, range <| Sigma.mk k : Set (Σn, T' n)).Finite :=
         (finite_le_nat _).biUnion fun k hk => finite_range _
-      apply this.subset
-      rintro ⟨k, c, hc⟩
+      apply this.subset; rintro ⟨k, c, hc⟩
       simp only [mem_Union, mem_set_of_eq, mem_image, Subtype.coe_mk]
       rintro ⟨x, hxB : x ∈ B c (r k c), hxK⟩
       refine' ⟨k, _, ⟨c, hc⟩, rfl⟩
@@ -278,7 +276,7 @@ theorem normal_of_paracompact_t2 [T2Space X] [ParacompactSpace X] : NormalSpace
     /- For each `x ∈ s` we choose open disjoint `u x ∋ x` and `v x ⊇ t`. The sets `u x` form an
         open covering of `s`. We choose a locally finite refinement `u' : s → set X`, then `⋃ i, u' i`
         and `(closure (⋃ i, u' i))ᶜ` are disjoint open neighborhoods of `s` and `t`. -/
-    intro s t hs ht H
+    intro s t hs ht 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_Union.2 ⟨⟨x, hx⟩, hxu _⟩ with
       ⟨u', hu'o, hcov', hu'fin, hsub⟩
Diff
@@ -92,7 +92,7 @@ theorem precise_refinement [ParacompactSpace X] (u : ι → Set X) (uo : ∀ a,
   choose α t hto hXt htf ind hind; choose t_inv ht_inv using hXt; choose U hxU hU using htf
   -- Send each `i` to the union of `t a` over `a ∈ ind ⁻¹' {i}`
   refine' ⟨fun i => ⋃ (a : α) (ha : ind a = i), t a, _, _, _, _⟩
-  · exact fun a => isOpen_unionᵢ fun a => isOpen_unionᵢ fun ha => hto a
+  · exact fun a => isOpen_iUnion fun a => isOpen_iUnion fun ha => hto a
   · simp only [eq_univ_iff_forall, mem_Union]
     exact fun x => ⟨ind (t_inv x), _, rfl, ht_inv _⟩
   · refine' fun x => ⟨U x, hxU x, ((hU x).image ind).Subset _⟩
@@ -203,7 +203,7 @@ theorem refinement_of_locallyCompact_sigmaCompact_of_nhds_basis_set [LocallyComp
         ⟨interior (K (K'.find x + 3)),
           IsOpen.mem_nhds isOpen_interior (K.subset_interior_succ _ (hKcov x).1), _⟩
       have : (⋃ k ≤ K'.find x + 2, range <| Sigma.mk k : Set (Σn, T' n)).Finite :=
-        (finite_le_nat _).bunionᵢ fun k hk => finite_range _
+        (finite_le_nat _).biUnion fun k hk => finite_range _
       apply this.subset
       rintro ⟨k, c, hc⟩
       simp only [mem_Union, mem_set_of_eq, mem_image, Subtype.coe_mk]
@@ -283,7 +283,7 @@ theorem normal_of_paracompact_t2 [T2Space X] [ParacompactSpace X] : NormalSpace
     rcases precise_refinement_set hs u hu fun x hx => mem_Union.2 ⟨⟨x, hx⟩, hxu _⟩ with
       ⟨u', hu'o, hcov', hu'fin, hsub⟩
     refine'
-      ⟨⋃ i, u' i, closure (⋃ i, u' i)ᶜ, isOpen_unionᵢ hu'o, is_closed_closure.is_open_compl, hcov',
+      ⟨⋃ i, u' i, closure (⋃ i, u' i)ᶜ, isOpen_iUnion hu'o, is_closed_closure.is_open_compl, hcov',
         _, disjoint_compl_right.mono le_rfl (compl_le_compl subset_closure)⟩
     rw [hu'fin.closure_Union, compl_Union, subset_Inter_iff]
     refine' fun i x hxt hxu =>

Changes in mathlib4

mathlib3
mathlib4
doc: convert many comments into doc comments (#11940)

All of these changes appear to be oversights to me.

Diff
@@ -287,7 +287,7 @@ instance (priority := 100) paracompact_of_locallyCompact_sigmaCompact [WeaklyLoc
   exact ⟨β, t, fun x ↦ (hto x).1.2, htc, htf, fun b ↦ ⟨i <| c b, (hto b).2⟩⟩
 #align paracompact_of_locally_compact_sigma_compact paracompact_of_locallyCompact_sigmaCompact
 
-/- **Dieudonné's theorem**: a paracompact Hausdorff space is normal.
+/-- **Dieudonné's theorem**: a paracompact Hausdorff space is normal.
 Formalization is based on the proof
 at [ncatlab](https://ncatlab.org/nlab/show/paracompact+Hausdorff+spaces+are+normal). -/
 instance (priority := 100) T4Space.of_paracompactSpace_t2Space [T2Space X] [ParacompactSpace X] :
chore: rename open_range to isOpen_range, closed_range to isClosed_range (#11438)

All these lemmas refer to the range of some function being open/range (i.e. isOpen or isClosed).

Diff
@@ -119,7 +119,7 @@ theorem ClosedEmbedding.paracompactSpace [ParacompactSpace Y] {e : X → Y} (he
     simp only [← hU] at hu ⊢
     have heU : range e ⊆ ⋃ i, U i := by
       simpa only [range_subset_iff, mem_iUnion, iUnion_eq_univ_iff] using hu
-    rcases precise_refinement_set he.closed_range U hUo heU with ⟨V, hVo, heV, hVf, hVU⟩
+    rcases precise_refinement_set he.isClosed_range U hUo heU with ⟨V, hVo, heV, hVf, hVU⟩
     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)⟩⟩
     simpa only [range_subset_iff, mem_iUnion, iUnion_eq_univ_iff] using heV
chore(Set/Image): restore forall_range_iff (#11287)

... as a @[deprecated] alias

Also add dates to some theorems deprecated in #10816, deprecate Set.exists_range_iff', and use simp-normal form in the definition of ParacompactSpace.

Diff
@@ -61,9 +61,9 @@ finite refinement `t : α → Set X` indexed on the same type such that each `
 class ParacompactSpace (X : Type v) [TopologicalSpace X] : Prop where
   /-- Every open cover of a paracompact space assumes a locally finite refinement. -/
   locallyFinite_refinement :
-    ∀ (α : Type v) (s : α → Set X) (_ : ∀ a, IsOpen (s a)) (_ : ⋃ a, s a = univ),
-      ∃ (β : Type v) (t : β → Set X) (_ : ∀ b, IsOpen (t b)) (_ : ⋃ b, t b = univ),
-        LocallyFinite t ∧ ∀ b, ∃ a, t b ⊆ s a
+    ∀ (α : Type v) (s : α → Set X), (∀ a, IsOpen (s a)) → (⋃ a, s a = univ) →
+      ∃ (β : Type v) (t : β → Set X),
+        (∀ b, IsOpen (t b)) ∧ (⋃ b, t b = univ) ∧ LocallyFinite t ∧ ∀ b, ∃ a, t b ⊆ s a
 #align paracompact_space ParacompactSpace
 
 variable {ι : Type u} {X : Type v} {Y : Type w} [TopologicalSpace X] [TopologicalSpace Y]
@@ -75,8 +75,8 @@ theorem precise_refinement [ParacompactSpace X] (u : ι → Set X) (uo : ∀ a,
     LocallyFinite v ∧ ∀ a, v a ⊆ u a := by
   -- Apply definition to `range u`, then turn existence quantifiers into functions using `choose`
   have := ParacompactSpace.locallyFinite_refinement (range u) (fun r ↦ (r : Set X))
-    (SetCoe.forall.2 <| forall_mem_range.2 uo) (by rwa [← sUnion_range, Subtype.range_coe])
-  simp only [SetCoe.exists, exists_range_iff', iUnion_eq_univ_iff, exists_prop] at this
+    (forall_subtype_range_iff.2 uo) (by rwa [← sUnion_range, Subtype.range_coe])
+  simp only [exists_subtype_range_iff, iUnion_eq_univ_iff] at this
   choose α t hto hXt htf ind hind using this
   choose t_inv ht_inv using hXt
   choose U hxU hU using htf
chore: Remove ball and bex from lemma names (#10816)

ball for "bounded forall" and bex for "bounded exists" are from experience very confusing abbreviations. This PR renames them to forall_mem and exists_mem in the few Set lemma names that mention them.

Also deprecate ball_image_of_ball, mem_image_elim, mem_image_elim_on since those lemmas are duplicates of the renamed lemmas (apart from argument order and implicitness, which I am also fixing by making the binder in the RHS of forall_mem_image semi-implicit), have obscure names and are completely unused.

Diff
@@ -75,7 +75,7 @@ theorem precise_refinement [ParacompactSpace X] (u : ι → Set X) (uo : ∀ a,
     LocallyFinite v ∧ ∀ a, v a ⊆ u a := by
   -- Apply definition to `range u`, then turn existence quantifiers into functions using `choose`
   have := ParacompactSpace.locallyFinite_refinement (range u) (fun r ↦ (r : Set X))
-    (SetCoe.forall.2 <| forall_range_iff.2 uo) (by rwa [← sUnion_range, Subtype.range_coe])
+    (SetCoe.forall.2 <| forall_mem_range.2 uo) (by rwa [← sUnion_range, Subtype.range_coe])
   simp only [SetCoe.exists, exists_range_iff', iUnion_eq_univ_iff, exists_prop] at this
   choose α t hto hXt htf ind hind using this
   choose t_inv ht_inv using hXt
chore: classify added proof porting notes (#10889)

Classifies by adding issue number (#10888) to porting notes claiming added proof.

Diff
@@ -99,7 +99,7 @@ indexed by the same type. -/
 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 := by
-  -- Porting note: Added proof of uc
+  -- Porting note (#10888): added proof of uc
   have uc : (iUnion fun i => Option.elim' sᶜ u i) = univ := by
     apply Subset.antisymm (subset_univ _)
     · simp_rw [← compl_union_self s, Option.elim', iUnion_option]
refactor: split NormalSpace into NormalSpace and T4Space (#7072)
  • Rename NormalSpace to T4Space.
  • Add NormalSpace, a version without the T1Space assumption.
  • Adjust some theorems.
  • Supersedes thus closes #6892.
  • Add some instance cycles, see #2030
Diff
@@ -287,17 +287,18 @@ instance (priority := 100) paracompact_of_locallyCompact_sigmaCompact [WeaklyLoc
   exact ⟨β, t, fun x ↦ (hto x).1.2, htc, htf, fun b ↦ ⟨i <| c b, (hto b).2⟩⟩
 #align paracompact_of_locally_compact_sigma_compact paracompact_of_locallyCompact_sigmaCompact
 
-/- Dieudonné's theorem: a paracompact Hausdorff space is normal. Formalization is based on the proof
+/- **Dieudonné's theorem**: a paracompact Hausdorff space is normal.
+Formalization is based on the proof
 at [ncatlab](https://ncatlab.org/nlab/show/paracompact+Hausdorff+spaces+are+normal). -/
-theorem normal_of_paracompact_t2 [T2Space X] [ParacompactSpace X] : NormalSpace X := by
+instance (priority := 100) T4Space.of_paracompactSpace_t2Space [T2Space X] [ParacompactSpace X] :
+    T4Space X := by
   -- First we show how to go from points to a set on one side.
-  have : ∀ s t : Set X, IsClosed s → IsClosed t →
+  have : ∀ s t : Set X, IsClosed s →
       (∀ 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
+      ∃ u v, IsOpen u ∧ IsOpen v ∧ s ⊆ u ∧ t ⊆ v ∧ Disjoint u v := fun s t hs H ↦ by
     /- For each `x ∈ s` we choose open disjoint `u x ∋ x` and `v x ⊇ t`. The sets `u x` form an
         open covering of `s`. We choose a locally finite refinement `u' : s → Set X`, then
         `⋃ i, u' i` and `(closure (⋃ i, u' i))ᶜ` are disjoint open neighborhoods of `s` and `t`. -/
-    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⟩
@@ -308,10 +309,10 @@ theorem normal_of_paracompact_t2 [T2Space X] [ParacompactSpace X] : NormalSpace
       absurd (htv i hxt) (closure_minimal _ (isClosed_compl_iff.2 <| hv _) hxu)
     exact fun y hyu hyv ↦ (huv i).le_bot ⟨hsub _ hyu, hyv⟩
   -- Now we apply the lemma twice: first to `s` and `t`, then to `t` and each point of `s`.
-  refine' ⟨fun s t hs ht hst ↦ this s t hs ht fun x hx ↦ _⟩
-  rcases this t {x} ht isClosed_singleton fun y hy ↦ (by
+  refine { normal := fun s t hs ht hst ↦ this s t hs fun x hx ↦ ?_ }
+  rcases this t {x} ht 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⟩
   exact ⟨u, v, hu, hv, singleton_subset_iff.1 hxu, htv, huv.symm⟩
-#align normal_of_paracompact_t2 normal_of_paracompact_t2
+#align normal_of_paracompact_t2 T4Space.of_paracompactSpace_t2Space
chore: fix docstrings, names and aligns about paracompacity of emetric spaces (#7064)
Diff
@@ -34,7 +34,7 @@ We also prove the following facts.
 * Every paracompact Hausdorff space is normal. This statement is not an instance to avoid loops in
   the instance graph.
 
-* Every `EMetricSpace` is a paracompact space, see instance `EMetricSpace.ParacompactSpace` in
+* Every `EMetricSpace` is a paracompact space, see instance `EMetric.instParacompactSpace` in
   `Topology/EMetricSpace/Paracompact`.
 
 ## TODO
feat: define weakly locally compact spaces (#6770)
Diff
@@ -193,7 +193,7 @@ dealing with a covering of the whole space.
 
 In most cases (namely, if `B c r ∪ B c r'` is again a set of the form `B c r''`) it is possible
 to choose `α = X`. This fact is not yet formalized in `mathlib`. -/
-theorem refinement_of_locallyCompact_sigmaCompact_of_nhds_basis_set [LocallyCompactSpace X]
+theorem refinement_of_locallyCompact_sigmaCompact_of_nhds_basis_set [WeaklyLocallyCompactSpace X]
     [SigmaCompactSpace X] [T2Space X] {ι : X → Type u} {p : ∀ x, ι x → Prop} {B : ∀ x, ι x → Set X}
     {s : Set X} (hs : IsClosed s) (hB : ∀ x ∈ s, (𝓝 x).HasBasis (p x) (B x)) :
     ∃ (α : Type v) (c : α → X) (r : ∀ a, ι (c a)),
@@ -263,7 +263,7 @@ dealing with a covering of a closed set.
 
 In most cases (namely, if `B c r ∪ B c r'` is again a set of the form `B c r''`) it is possible
 to choose `α = X`. This fact is not yet formalized in `mathlib`. -/
-theorem refinement_of_locallyCompact_sigmaCompact_of_nhds_basis [LocallyCompactSpace X]
+theorem refinement_of_locallyCompact_sigmaCompact_of_nhds_basis [WeaklyLocallyCompactSpace X]
     [SigmaCompactSpace X] [T2Space X] {ι : X → Type u} {p : ∀ x, ι x → Prop} {B : ∀ x, ι x → Set X}
     (hB : ∀ x, (𝓝 x).HasBasis (p x) (B x)) :
     ∃ (α : Type v) (c : α → X) (r : ∀ a, ι (c a)),
@@ -276,7 +276,7 @@ theorem refinement_of_locallyCompact_sigmaCompact_of_nhds_basis [LocallyCompactS
 -- See note [lower instance priority]
 /-- A locally compact sigma compact Hausdorff space is paracompact. See also
 `refinement_of_locallyCompact_sigmaCompact_of_nhds_basis` for a more precise statement. -/
-instance (priority := 100) paracompact_of_locallyCompact_sigmaCompact [LocallyCompactSpace X]
+instance (priority := 100) paracompact_of_locallyCompact_sigmaCompact [WeaklyLocallyCompactSpace X]
     [SigmaCompactSpace X] [T2Space X] : ParacompactSpace X := by
   refine' ⟨fun α s ho hc ↦ _⟩
   choose i hi using iUnion_eq_univ_iff.1 hc
chore: move 2 files to a new folder (#6853)

Later I'm going to split files like Lipschitz into 2: one in EMetricSpace/ and one in MetricSpace/.

Diff
@@ -35,7 +35,7 @@ We also prove the following facts.
   the instance graph.
 
 * Every `EMetricSpace` is a paracompact space, see instance `EMetricSpace.ParacompactSpace` in
-  `Topology/MetricSpace/EMetricParacompact`.
+  `Topology/EMetricSpace/Paracompact`.
 
 ## TODO
 
chore: golf some proofs, add helper lemmas (#6769)
Diff
@@ -205,8 +205,7 @@ theorem refinement_of_locallyCompact_sigmaCompact_of_nhds_basis_set [LocallyComp
     set K : CompactExhaustion X := K'.shiftr.shiftr
     set Kdiff := fun n ↦ K (n + 1) \ interior (K n)
     -- Now we restate some properties of `CompactExhaustion` for `K`/`Kdiff`
-    have hKcov : ∀ x, x ∈ Kdiff (K'.find x + 1) := by
-      intro x
+    have hKcov : ∀ x, x ∈ Kdiff (K'.find x + 1) := fun x ↦ by
       simpa only [K'.find_shiftr] using
         diff_subset_diff_right interior_subset (K'.shiftr.mem_diff_shiftr_find x)
     have Kdiffc : ∀ n, IsCompact (Kdiff n ∩ s) :=
@@ -214,8 +213,7 @@ theorem refinement_of_locallyCompact_sigmaCompact_of_nhds_basis_set [LocallyComp
     -- Next we choose a finite covering `B (c n i) (r n i)` of each
     -- `Kdiff (n + 1) ∩ s` such that `B (c n i) (r n i) ∩ s` is disjoint with `K n`
     have : ∀ (n) (x : ↑(Kdiff (n + 1) ∩ s)), (K n)ᶜ ∈ 𝓝 (x : X) :=
-      fun n x ↦ IsOpen.mem_nhds (K.isClosed n).isOpen_compl
-        fun hx' ↦ x.2.1.2 <| K.subset_interior_succ _ hx'
+      fun n x ↦ (K.isClosed n).compl_mem_nhds fun hx' ↦ x.2.1.2 <| K.subset_interior_succ _ hx'
     -- Porting note: Commented out `haveI` for now.
     --haveI : ∀ (n) (x : ↑(Kdiff n ∩ s)), Nonempty (ι x) := fun n x ↦ (hB x x.2.2).nonempty
     choose! r hrp hr using fun n (x : ↑(Kdiff (n + 1) ∩ s)) ↦ (hB x x.2.2).mem_iff.1 (this n x)
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -2,15 +2,12 @@
 Copyright (c) 2021 Yury Kudryashov. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Reid Barton, Yury Kudryashov
-
-! This file was ported from Lean 3 source module topology.paracompact
-! leanprover-community/mathlib commit 2705404e701abc6b3127da906f40bae062a169c9
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Topology.Homeomorph
 import Mathlib.Data.Option.Basic
 
+#align_import topology.paracompact from "leanprover-community/mathlib"@"2705404e701abc6b3127da906f40bae062a169c9"
+
 /-!
 # Paracompact topological spaces
 
fix: precedences of ⨆⋃⋂⨅ (#5614)
Diff
@@ -64,8 +64,8 @@ finite refinement `t : α → Set X` indexed on the same type such that each `
 class ParacompactSpace (X : Type v) [TopologicalSpace X] : Prop where
   /-- Every open cover of a paracompact space assumes a locally finite refinement. -/
   locallyFinite_refinement :
-    ∀ (α : Type v) (s : α → Set X) (_ : ∀ a, IsOpen (s a)) (_ : (⋃ a, s a) = univ),
-      ∃ (β : Type v) (t : β → Set X) (_ : ∀ b, IsOpen (t b)) (_ : (⋃ b, t b) = univ),
+    ∀ (α : Type v) (s : α → Set X) (_ : ∀ a, IsOpen (s a)) (_ : ⋃ a, s a = univ),
+      ∃ (β : Type v) (t : β → Set X) (_ : ∀ b, IsOpen (t b)) (_ : ⋃ b, t b = univ),
         LocallyFinite t ∧ ∀ b, ∃ a, t b ⊆ s a
 #align paracompact_space ParacompactSpace
 
@@ -74,7 +74,7 @@ variable {ι : Type u} {X : Type v} {Y : Type w} [TopologicalSpace X] [Topologic
 /-- Any open cover of a paracompact space has a locally finite *precise* refinement, that is,
 one indexed on the same type with each open set contained in the corresponding original one. -/
 theorem precise_refinement [ParacompactSpace X] (u : ι → Set X) (uo : ∀ a, IsOpen (u a))
-    (uc : (⋃ i, u i) = univ) : ∃ v : ι → Set X, (∀ a, IsOpen (v a)) ∧ (⋃ i, v i) = univ ∧
+    (uc : ⋃ i, u i = univ) : ∃ v : ι → Set X, (∀ a, IsOpen (v a)) ∧ ⋃ i, v i = univ ∧
     LocallyFinite v ∧ ∀ a, v a ⊆ u a := by
   -- Apply definition to `range u`, then turn existence quantifiers into functions using `choose`
   have := ParacompactSpace.locallyFinite_refinement (range u) (fun r ↦ (r : Set X))
@@ -237,7 +237,7 @@ theorem refinement_of_locallyCompact_sigmaCompact_of_nhds_basis_set [LocallyComp
       refine'
         ⟨interior (K (K'.find x + 3)),
           IsOpen.mem_nhds isOpen_interior (K.subset_interior_succ _ (hKcov x).1), _⟩
-      have : (⋃ k ≤ K'.find x + 2, range <| Sigma.mk k : Set (Σn, T' n)).Finite :=
+      have : (⋃ k ≤ K'.find x + 2, range (Sigma.mk k) : Set (Σn, T' n)).Finite :=
         (finite_le_nat _).biUnion fun k _ ↦ finite_range _
       apply this.subset
       rintro ⟨k, c, hc⟩
@@ -272,7 +272,7 @@ theorem refinement_of_locallyCompact_sigmaCompact_of_nhds_basis [LocallyCompactS
     [SigmaCompactSpace X] [T2Space X] {ι : X → Type u} {p : ∀ x, ι x → Prop} {B : ∀ x, ι x → Set X}
     (hB : ∀ x, (𝓝 x).HasBasis (p x) (B x)) :
     ∃ (α : Type v) (c : α → X) (r : ∀ a, ι (c a)),
-      (∀ a, p (c a) (r a)) ∧ (⋃ a, B (c a) (r a)) = univ ∧ LocallyFinite fun a ↦ B (c a) (r a) :=
+      (∀ a, p (c a) (r a)) ∧ ⋃ a, B (c a) (r a) = univ ∧ LocallyFinite fun a ↦ B (c a) (r a) :=
   let ⟨α, c, r, hp, hU, hfin⟩ :=
     refinement_of_locallyCompact_sigmaCompact_of_nhds_basis_set isClosed_univ fun x _ ↦ hB x
   ⟨α, c, r, fun a ↦ (hp a).2, univ_subset_iff.1 hU, hfin⟩
fix: change compl precedence (#5586)

Co-authored-by: Yury G. Kudryashov <urkud@urkud.name>

Diff
@@ -103,11 +103,11 @@ theorem precise_refinement_set [ParacompactSpace X] {s : Set X} (hs : IsClosed s
     (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 := by
   -- Porting note: Added proof of uc
-  have uc : (iUnion fun i => Option.elim' (sᶜ) u i) = univ := by
+  have uc : (iUnion fun i => Option.elim' sᶜ u i) = univ := by
     apply Subset.antisymm (subset_univ _)
     · simp_rw [← compl_union_self s, Option.elim', iUnion_option]
-      apply union_subset_union_right (sᶜ) us
-  rcases precise_refinement (Option.elim' (sᶜ) u) (Option.forall.2 ⟨isOpen_compl_iff.2 hs, uo⟩)
+      apply union_subset_union_right sᶜ us
+  rcases precise_refinement (Option.elim' sᶜ u) (Option.forall.2 ⟨isOpen_compl_iff.2 hs, uo⟩)
       uc with
     ⟨v, vo, vc, vf, vu⟩
   refine' ⟨v ∘ some, fun i ↦ vo _, _, vf.comp_injective (Option.some_injective _), fun i ↦ vu _⟩
@@ -216,7 +216,7 @@ theorem refinement_of_locallyCompact_sigmaCompact_of_nhds_basis_set [LocallyComp
       fun n ↦ ((K.isCompact _).diff isOpen_interior).inter_right hs
     -- Next we choose a finite covering `B (c n i) (r n i)` of each
     -- `Kdiff (n + 1) ∩ s` such that `B (c n i) (r n i) ∩ s` is disjoint with `K n`
-    have : ∀ (n) (x : ↑(Kdiff (n + 1) ∩ s)), K nᶜ ∈ 𝓝 (x : X) :=
+    have : ∀ (n) (x : ↑(Kdiff (n + 1) ∩ s)), (K n)ᶜ ∈ 𝓝 (x : X) :=
       fun n x ↦ IsOpen.mem_nhds (K.isClosed n).isOpen_compl
         fun hx' ↦ x.2.1.2 <| K.subset_interior_succ _ hx'
     -- Porting note: Commented out `haveI` for now.
@@ -306,7 +306,7 @@ theorem normal_of_paracompact_t2 [T2Space X] [ParacompactSpace X] : NormalSpace
     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,
+    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 ↦
chore(Topology/{Paracompact + PartitionOfUnity + Algebra/Order/Compact}): restore a more faithful mathported proof, using the "newer" push_neg (#5132)

These are just three cases where a mathported proof had to be changed, due to unwanted behaviour with push_neg/contradiction. Since #5082 is supposed to fix some issues with these tactics, some of these workarounds can be removed.

Note: this was not in any way systematic, I simply grepped the line after a contra, then grepped for a not and then selected 3 likely candidates. There are potentially more situations like these.

Diff
@@ -245,10 +245,8 @@ theorem refinement_of_locallyCompact_sigmaCompact_of_nhds_basis_set [LocallyComp
       rintro ⟨x, hxB : x ∈ B c (r k c), hxK⟩
       refine' ⟨k, _, ⟨c, hc⟩, rfl⟩
       have := (mem_compl_iff _ _).1 (hr k c hxB)
-      revert this
-      contrapose!
-      simp only [ge_iff_le, not_le]
-      exact fun hnk ↦ K.subset hnk (interior_subset hxK)
+      contrapose! this with hnk
+      exact K.subset hnk (interior_subset hxK)
 #align refinement_of_locally_compact_sigma_compact_of_nhds_basis_set refinement_of_locallyCompact_sigmaCompact_of_nhds_basis_set
 
 /-- Let `X` be a locally compact sigma compact Hausdorff topological space. Suppose that for each
chore: fix backtick in docs (#5077)

I wrote a script to find lines that contain an odd number of backticks

Diff
@@ -30,7 +30,7 @@ We also prove the following facts.
 
 * A locally compact sigma compact Hausdorff space is paracompact, see instance
   `paracompact_of_locallyCompact_sigmaCompact`. Moreover, we can choose a locally finite
-  refinement with sets in a given collection of filter bases of `𝓝 x, `x : X`, see
+  refinement with sets in a given collection of filter bases of `𝓝 x`, `x : X`, see
   `refinement_of_locallyCompact_sigmaCompact_of_nhds_basis`. For example, in a proper metric space
   every open covering `⋃ i, s i` admits a refinement `⋃ i, Metric.ball (c i) (r i)`.
 
style: allow _ for an argument in notation3 & replace _foo with _ in notation3 (#4652)
Diff
@@ -84,7 +84,7 @@ theorem precise_refinement [ParacompactSpace X] (u : ι → Set X) (uo : ∀ a,
   choose t_inv ht_inv using hXt
   choose U hxU hU using htf
   -- Send each `i` to the union of `t a` over `a ∈ ind ⁻¹' {i}`
-  refine' ⟨fun i ↦ ⋃ (a : α) (_ha : ind a = i), t a, _, _, _, _⟩
+  refine' ⟨fun i ↦ ⋃ (a : α) (_ : ind a = i), t a, _, _, _, _⟩
   · exact fun a ↦ isOpen_iUnion fun a ↦ isOpen_iUnion fun _ ↦ hto a
   · simp only [eq_univ_iff_forall, mem_iUnion]
     exact fun x ↦ ⟨ind (t_inv x), _, rfl, ht_inv _⟩
chore: Rename to sSup/iSup (#3938)

As discussed on Zulip

Renames

  • supₛsSup
  • infₛsInf
  • supᵢiSup
  • infᵢiInf
  • bsupₛbsSup
  • binfₛbsInf
  • bsupᵢbiSup
  • binfᵢbiInf
  • csupₛcsSup
  • cinfₛcsInf
  • csupᵢciSup
  • cinfᵢciInf
  • unionₛsUnion
  • interₛsInter
  • unionᵢiUnion
  • interᵢiInter
  • bunionₛbsUnion
  • binterₛbsInter
  • bunionᵢbiUnion
  • binterᵢbiInter

Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>

Diff
@@ -78,21 +78,21 @@ theorem precise_refinement [ParacompactSpace X] (u : ι → Set X) (uo : ∀ a,
     LocallyFinite v ∧ ∀ a, v a ⊆ u a := by
   -- Apply definition to `range u`, then turn existence quantifiers into functions using `choose`
   have := ParacompactSpace.locallyFinite_refinement (range u) (fun r ↦ (r : Set X))
-    (SetCoe.forall.2 <| forall_range_iff.2 uo) (by rwa [← unionₛ_range, Subtype.range_coe])
-  simp only [SetCoe.exists, exists_range_iff', unionᵢ_eq_univ_iff, exists_prop] at this
+    (SetCoe.forall.2 <| forall_range_iff.2 uo) (by rwa [← sUnion_range, Subtype.range_coe])
+  simp only [SetCoe.exists, exists_range_iff', iUnion_eq_univ_iff, exists_prop] at this
   choose α t hto hXt htf ind hind using this
   choose t_inv ht_inv using hXt
   choose U hxU hU using htf
   -- Send each `i` to the union of `t a` over `a ∈ ind ⁻¹' {i}`
   refine' ⟨fun i ↦ ⋃ (a : α) (_ha : ind a = i), t a, _, _, _, _⟩
-  · exact fun a ↦ isOpen_unionᵢ fun a ↦ isOpen_unionᵢ fun _ ↦ hto a
-  · simp only [eq_univ_iff_forall, mem_unionᵢ]
+  · exact fun a ↦ isOpen_iUnion fun a ↦ isOpen_iUnion fun _ ↦ hto a
+  · simp only [eq_univ_iff_forall, mem_iUnion]
     exact fun x ↦ ⟨ind (t_inv x), _, rfl, ht_inv _⟩
   · refine' fun x ↦ ⟨U x, hxU x, ((hU x).image ind).subset _⟩
-    simp only [subset_def, mem_unionᵢ, mem_setOf_eq, Set.Nonempty, mem_inter_iff]
+    simp only [subset_def, mem_iUnion, mem_setOf_eq, Set.Nonempty, mem_inter_iff]
     rintro i ⟨y, ⟨a, rfl, hya⟩, hyU⟩
     exact mem_image_of_mem _ ⟨y, hya, hyU⟩
-  · simp only [subset_def, mem_unionᵢ]
+  · simp only [subset_def, mem_iUnion]
     rintro i x ⟨a, rfl, hxa⟩
     exact hind _ hxa
 #align precise_refinement precise_refinement
@@ -103,15 +103,15 @@ theorem precise_refinement_set [ParacompactSpace X] {s : Set X} (hs : IsClosed s
     (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 := by
   -- Porting note: Added proof of uc
-  have uc : (unionᵢ fun i => Option.elim' (sᶜ) u i) = univ := by
+  have uc : (iUnion fun i => Option.elim' (sᶜ) u i) = univ := by
     apply Subset.antisymm (subset_univ _)
-    · simp_rw [← compl_union_self s, Option.elim', unionᵢ_option]
+    · simp_rw [← compl_union_self s, Option.elim', iUnion_option]
       apply union_subset_union_right (sᶜ) us
   rcases precise_refinement (Option.elim' (sᶜ) u) (Option.forall.2 ⟨isOpen_compl_iff.2 hs, uo⟩)
       uc with
     ⟨v, vo, vc, vf, vu⟩
   refine' ⟨v ∘ some, fun i ↦ vo _, _, vf.comp_injective (Option.some_injective _), fun i ↦ vu _⟩
-  · simp only [unionᵢ_option, ← compl_subset_iff_union] at vc
+  · simp only [iUnion_option, ← compl_subset_iff_union] at vc
     exact Subset.trans (subset_compl_comm.1 <| vu Option.none) vc
 #align precise_refinement_set precise_refinement_set
 
@@ -121,11 +121,11 @@ theorem ClosedEmbedding.paracompactSpace [ParacompactSpace Y] {e : X → Y} (he
     choose U hUo hU using fun a ↦ he.isOpen_iff.1 (ho a)
     simp only [← hU] at hu ⊢
     have heU : range e ⊆ ⋃ i, U i := by
-      simpa only [range_subset_iff, mem_unionᵢ, unionᵢ_eq_univ_iff] using hu
+      simpa only [range_subset_iff, mem_iUnion, iUnion_eq_univ_iff] using hu
     rcases precise_refinement_set he.closed_range U hUo heU with ⟨V, hVo, heV, hVf, hVU⟩
     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)⟩⟩
-    simpa only [range_subset_iff, mem_unionᵢ, unionᵢ_eq_univ_iff] using heV
+    simpa only [range_subset_iff, mem_iUnion, iUnion_eq_univ_iff] using heV
 
 theorem Homeomorph.paracompactSpace_iff (e : X ≃ₜ Y) : ParacompactSpace X ↔ ParacompactSpace Y :=
   ⟨fun _ ↦ e.symm.closedEmbedding.paracompactSpace, fun _ ↦ e.closedEmbedding.paracompactSpace⟩
@@ -140,27 +140,27 @@ instance (priority := 200) [CompactSpace X] [ParacompactSpace Y] : ParacompactSp
   locallyFinite_refinement α s ho hu := by
     have : ∀ (x : X) (y : Y), ∃ (a : α) (U : Set X) (V : Set Y),
         IsOpen U ∧ IsOpen V ∧ x ∈ U ∧ y ∈ V ∧ U ×ˢ V ⊆ s a := fun x y ↦
-      (unionᵢ_eq_univ_iff.1 hu (x, y)).imp fun a ha ↦ isOpen_prod_iff.1 (ho a) x y ha
+      (iUnion_eq_univ_iff.1 hu (x, y)).imp fun a ha ↦ isOpen_prod_iff.1 (ho a) x y ha
     choose a U V hUo hVo hxU hyV hUV using this
     choose T hT using fun y ↦ CompactSpace.elim_nhds_subcover (U · y) fun x ↦
       (hUo x y).mem_nhds (hxU x y)
     set W : Y → Set Y := fun y ↦ ⋂ x ∈ T y, V x y
-    have hWo : ∀ y, IsOpen (W y) := fun y ↦ isOpen_binterᵢ_finset fun _ _ ↦ hVo _ _
-    have hW : ∀ y, y ∈ W y := fun _ ↦ mem_interᵢ₂.2 fun _ _ ↦ hyV _ _
-    rcases precise_refinement W hWo (unionᵢ_eq_univ_iff.2 fun y ↦ ⟨y, hW y⟩)
+    have hWo : ∀ y, IsOpen (W y) := fun y ↦ isOpen_biInter_finset fun _ _ ↦ hVo _ _
+    have hW : ∀ y, y ∈ W y := fun _ ↦ mem_iInter₂.2 fun _ _ ↦ hyV _ _
+    rcases precise_refinement W hWo (iUnion_eq_univ_iff.2 fun y ↦ ⟨y, hW y⟩)
       with ⟨E, hEo, hE, hEf, hEA⟩
     refine ⟨Σ y, T y, fun z ↦ U z.2.1 z.1 ×ˢ E z.1, fun _ ↦ (hUo _ _).prod (hEo _),
-      unionᵢ_eq_univ_iff.2 fun (x, y) ↦ ?_, fun (x, y) ↦ ?_, fun ⟨y, x, hx⟩ ↦ ?_⟩
-    · rcases unionᵢ_eq_univ_iff.1 hE y with ⟨b, hb⟩
-      rcases unionᵢ₂_eq_univ_iff.1 (hT b) x with ⟨a, ha, hx⟩
+      iUnion_eq_univ_iff.2 fun (x, y) ↦ ?_, fun (x, y) ↦ ?_, fun ⟨y, x, hx⟩ ↦ ?_⟩
+    · rcases iUnion_eq_univ_iff.1 hE y with ⟨b, hb⟩
+      rcases iUnion₂_eq_univ_iff.1 (hT b) x with ⟨a, ha, hx⟩
       exact ⟨⟨b, a, ha⟩, hx, hb⟩
     · rcases hEf y with ⟨t, ht, htf⟩
       refine ⟨univ ×ˢ t, prod_mem_nhds univ_mem ht, ?_⟩
-      refine (htf.bunionᵢ fun y _ ↦ finite_range (Sigma.mk y)).subset ?_
+      refine (htf.biUnion fun y _ ↦ finite_range (Sigma.mk y)).subset ?_
       rintro ⟨b, a, ha⟩ ⟨⟨c, d⟩, ⟨-, hd : d ∈ E b⟩, -, hdt : d ∈ t⟩
-      exact mem_unionᵢ₂.2 ⟨b, ⟨d, hd, hdt⟩, mem_range_self _⟩
+      exact mem_iUnion₂.2 ⟨b, ⟨d, hd, hdt⟩, mem_range_self _⟩
     · refine ⟨a x y, (Set.prod_mono Subset.rfl ?_).trans (hUV x y)⟩
-      exact (hEA _).trans (interᵢ₂_subset x hx)
+      exact (hEA _).trans (iInter₂_subset x hx)
 
 instance (priority := 200) [ParacompactSpace X] [CompactSpace Y] : ParacompactSpace (X × Y) :=
   (Homeomorph.prodComm X Y).paracompactSpace_iff.2 inferInstance
@@ -173,7 +173,7 @@ instance (priority := 100) paracompact_of_compact [CompactSpace X] : Paracompact
   rcases isCompact_univ.elim_finite_subcover _ ho hu.ge with ⟨T, hT⟩
   refine' ⟨(T : Set ι), fun t ↦ s t, fun t ↦ ho _, _, locallyFinite_of_finite _,
     fun t ↦ ⟨t, Subset.rfl⟩⟩
-  simpa only [unionᵢ_coe_set, ← univ_subset_iff]
+  simpa only [iUnion_coe_set, ← univ_subset_iff]
 #align paracompact_of_compact paracompact_of_compact
 
 /-- Let `X` be a locally compact sigma compact Hausdorff topological space, let `s` be a closed set
@@ -230,18 +230,18 @@ theorem refinement_of_locallyCompact_sigmaCompact_of_nhds_basis_set [LocallyComp
     refine' ⟨Σn, T' n, fun a ↦ a.2, fun a ↦ r a.1 a.2, _, _, _⟩
     · rintro ⟨n, x, hx⟩
       exact ⟨x.2.2, hrp _ _⟩
-    · refine' fun x hx ↦ mem_unionᵢ.2 _
-      rcases mem_unionᵢ₂.1 (hT _ ⟨hKcov x, hx⟩) with ⟨⟨c, hc⟩, hcT, hcx⟩
+    · refine' fun x hx ↦ mem_iUnion.2 _
+      rcases mem_iUnion₂.1 (hT _ ⟨hKcov x, hx⟩) with ⟨⟨c, hc⟩, hcT, hcx⟩
       exact ⟨⟨_, ⟨c, hc⟩, hcT⟩, hcx⟩
     · intro x
       refine'
         ⟨interior (K (K'.find x + 3)),
           IsOpen.mem_nhds isOpen_interior (K.subset_interior_succ _ (hKcov x).1), _⟩
       have : (⋃ k ≤ K'.find x + 2, range <| Sigma.mk k : Set (Σn, T' n)).Finite :=
-        (finite_le_nat _).bunionᵢ fun k _ ↦ finite_range _
+        (finite_le_nat _).biUnion fun k _ ↦ finite_range _
       apply this.subset
       rintro ⟨k, c, hc⟩
-      simp only [mem_unionᵢ, mem_setOf_eq, mem_image, Subtype.coe_mk]
+      simp only [mem_iUnion, mem_setOf_eq, mem_image, Subtype.coe_mk]
       rintro ⟨x, hxB : x ∈ B c (r k c), hxK⟩
       refine' ⟨k, _, ⟨c, hc⟩, rfl⟩
       have := (mem_compl_iff _ _).1 (hr k c hxB)
@@ -286,7 +286,7 @@ theorem refinement_of_locallyCompact_sigmaCompact_of_nhds_basis [LocallyCompactS
 instance (priority := 100) paracompact_of_locallyCompact_sigmaCompact [LocallyCompactSpace X]
     [SigmaCompactSpace X] [T2Space X] : ParacompactSpace X := by
   refine' ⟨fun α s ho hc ↦ _⟩
-  choose i hi using unionᵢ_eq_univ_iff.1 hc
+  choose i hi using iUnion_eq_univ_iff.1 hc
   have : ∀ x : X, (𝓝 x).HasBasis (fun t : Set X ↦ (x ∈ t ∧ IsOpen t) ∧ t ⊆ s (i x)) id :=
     fun x : X ↦ (nhds_basis_opens x).restrict_subset (IsOpen.mem_nhds (ho (i x)) (hi x))
   rcases refinement_of_locallyCompact_sigmaCompact_of_nhds_basis this with
@@ -306,11 +306,11 @@ theorem normal_of_paracompact_t2 [T2Space X] [ParacompactSpace X] : NormalSpace
         `⋃ i, u' i` and `(closure (⋃ i, u' i))ᶜ` are disjoint open neighborhoods of `s` and `t`. -/
     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_unionᵢ.2 ⟨⟨x, hx⟩, hxu _⟩ with
+    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_unionᵢ hu'o, isClosed_closure.isOpen_compl,
+    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_unionᵢ, compl_unionᵢ, subset_interᵢ_iff]
+    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⟩
chore: bye-bye, solo bys! (#3825)

This PR puts, with one exception, every single remaining by that lies all by itself on its own line to the previous line, thus matching the current behaviour of start-port.sh. The exception is when the by begins the second or later argument to a tuple or anonymous constructor; see https://github.com/leanprover-community/mathlib4/pull/3825#discussion_r1186702599.

Essentially this is s/\n *by$/ by/g, but with manual editing to satisfy the linter's max-100-char-line requirement. The Python style linter is also modified to catch these "isolated bys".

Diff
@@ -74,9 +74,8 @@ variable {ι : Type u} {X : Type v} {Y : Type w} [TopologicalSpace X] [Topologic
 /-- Any open cover of a paracompact space has a locally finite *precise* refinement, that is,
 one indexed on the same type with each open set contained in the corresponding original one. -/
 theorem precise_refinement [ParacompactSpace X] (u : ι → Set X) (uo : ∀ a, IsOpen (u a))
-    (uc : (⋃ i, u i) = univ) :
-    ∃ v : ι → Set X, (∀ a, IsOpen (v a)) ∧ (⋃ i, v i) = univ ∧ LocallyFinite v ∧ ∀ a, v a ⊆ u a :=
-  by
+    (uc : (⋃ i, u i) = univ) : ∃ v : ι → Set X, (∀ a, IsOpen (v a)) ∧ (⋃ i, v i) = univ ∧
+    LocallyFinite v ∧ ∀ a, v a ⊆ u a := by
   -- Apply definition to `range u`, then turn existence quantifiers into functions using `choose`
   have := ParacompactSpace.locallyFinite_refinement (range u) (fun r ↦ (r : Set X))
     (SetCoe.forall.2 <| forall_range_iff.2 uo) (by rwa [← unionₛ_range, Subtype.range_coe])
feat: the product of a compact space and a paracompact space is a paracompact space (#3296)

Co-authored-by: Scott Morrison <scott@tqft.net>

Diff
@@ -8,8 +8,7 @@ Authors: Reid Barton, Yury Kudryashov
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
-import Mathlib.Topology.SubsetProperties
-import Mathlib.Topology.Separation
+import Mathlib.Topology.Homeomorph
 import Mathlib.Data.Option.Basic
 
 /-!
@@ -55,7 +54,7 @@ open Set Filter Function
 
 open Filter Topology
 
-universe u v
+universe u v w
 
 /-- A topological space is called paracompact, if every open covering of this space admits a locally
 finite refinement. We use the same universe for all types in the definition to avoid creating a
@@ -70,7 +69,7 @@ class ParacompactSpace (X : Type v) [TopologicalSpace X] : Prop where
         LocallyFinite t ∧ ∀ b, ∃ a, t b ⊆ s a
 #align paracompact_space ParacompactSpace
 
-variable {ι : Type u} {X : Type v} [TopologicalSpace X]
+variable {ι : Type u} {X : Type v} {Y : Type w} [TopologicalSpace X] [TopologicalSpace Y]
 
 /-- Any open cover of a paracompact space has a locally finite *precise* refinement, that is,
 one indexed on the same type with each open set contained in the corresponding original one. -/
@@ -117,14 +116,62 @@ theorem precise_refinement_set [ParacompactSpace X] {s : Set X} (hs : IsClosed s
     exact Subset.trans (subset_compl_comm.1 <| vu Option.none) vc
 #align precise_refinement_set precise_refinement_set
 
+theorem ClosedEmbedding.paracompactSpace [ParacompactSpace Y] {e : X → Y} (he : ClosedEmbedding e) :
+    ParacompactSpace X where
+  locallyFinite_refinement α s ho hu := by
+    choose U hUo hU using fun a ↦ he.isOpen_iff.1 (ho a)
+    simp only [← hU] at hu ⊢
+    have heU : range e ⊆ ⋃ i, U i := by
+      simpa only [range_subset_iff, mem_unionᵢ, unionᵢ_eq_univ_iff] using hu
+    rcases precise_refinement_set he.closed_range U hUo heU with ⟨V, hVo, heV, hVf, hVU⟩
+    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)⟩⟩
+    simpa only [range_subset_iff, mem_unionᵢ, unionᵢ_eq_univ_iff] using heV
+
+theorem Homeomorph.paracompactSpace_iff (e : X ≃ₜ Y) : ParacompactSpace X ↔ ParacompactSpace Y :=
+  ⟨fun _ ↦ e.symm.closedEmbedding.paracompactSpace, fun _ ↦ e.closedEmbedding.paracompactSpace⟩
+
+/-- The product of a compact space and a paracompact space is a paracompact space. The formalization
+is based on https://dantopology.wordpress.com/2009/10/24/compact-x-paracompact-is-paracompact/
+with some minor modifications.
+
+This version assumes that `X` in `X × Y` is compact and `Y` is paracompact, see next lemma for the
+other case. -/
+instance (priority := 200) [CompactSpace X] [ParacompactSpace Y] : ParacompactSpace (X × Y) where
+  locallyFinite_refinement α s ho hu := by
+    have : ∀ (x : X) (y : Y), ∃ (a : α) (U : Set X) (V : Set Y),
+        IsOpen U ∧ IsOpen V ∧ x ∈ U ∧ y ∈ V ∧ U ×ˢ V ⊆ s a := fun x y ↦
+      (unionᵢ_eq_univ_iff.1 hu (x, y)).imp fun a ha ↦ isOpen_prod_iff.1 (ho a) x y ha
+    choose a U V hUo hVo hxU hyV hUV using this
+    choose T hT using fun y ↦ CompactSpace.elim_nhds_subcover (U · y) fun x ↦
+      (hUo x y).mem_nhds (hxU x y)
+    set W : Y → Set Y := fun y ↦ ⋂ x ∈ T y, V x y
+    have hWo : ∀ y, IsOpen (W y) := fun y ↦ isOpen_binterᵢ_finset fun _ _ ↦ hVo _ _
+    have hW : ∀ y, y ∈ W y := fun _ ↦ mem_interᵢ₂.2 fun _ _ ↦ hyV _ _
+    rcases precise_refinement W hWo (unionᵢ_eq_univ_iff.2 fun y ↦ ⟨y, hW y⟩)
+      with ⟨E, hEo, hE, hEf, hEA⟩
+    refine ⟨Σ y, T y, fun z ↦ U z.2.1 z.1 ×ˢ E z.1, fun _ ↦ (hUo _ _).prod (hEo _),
+      unionᵢ_eq_univ_iff.2 fun (x, y) ↦ ?_, fun (x, y) ↦ ?_, fun ⟨y, x, hx⟩ ↦ ?_⟩
+    · rcases unionᵢ_eq_univ_iff.1 hE y with ⟨b, hb⟩
+      rcases unionᵢ₂_eq_univ_iff.1 (hT b) x with ⟨a, ha, hx⟩
+      exact ⟨⟨b, a, ha⟩, hx, hb⟩
+    · rcases hEf y with ⟨t, ht, htf⟩
+      refine ⟨univ ×ˢ t, prod_mem_nhds univ_mem ht, ?_⟩
+      refine (htf.bunionᵢ fun y _ ↦ finite_range (Sigma.mk y)).subset ?_
+      rintro ⟨b, a, ha⟩ ⟨⟨c, d⟩, ⟨-, hd : d ∈ E b⟩, -, hdt : d ∈ t⟩
+      exact mem_unionᵢ₂.2 ⟨b, ⟨d, hd, hdt⟩, mem_range_self _⟩
+    · refine ⟨a x y, (Set.prod_mono Subset.rfl ?_).trans (hUV x y)⟩
+      exact (hEA _).trans (interᵢ₂_subset x hx)
+
+instance (priority := 200) [ParacompactSpace X] [CompactSpace Y] : ParacompactSpace (X × Y) :=
+  (Homeomorph.prodComm X Y).paracompactSpace_iff.2 inferInstance
+
 -- See note [lower instance priority]
 /-- A compact space is paracompact. -/
 instance (priority := 100) paracompact_of_compact [CompactSpace X] : ParacompactSpace X := by
   -- the proof is trivial: we choose a finite subcover using compactness, and use it
   refine' ⟨fun ι s ho hu ↦ _⟩
   rcases isCompact_univ.elim_finite_subcover _ ho hu.ge with ⟨T, hT⟩
-  have := hT; simp only [subset_def, mem_unionᵢ] at this
-  choose i _ _ using fun x ↦ this x (mem_univ x)
   refine' ⟨(T : Set ι), fun t ↦ s t, fun t ↦ ho _, _, locallyFinite_of_finite _,
     fun t ↦ ⟨t, Subset.rfl⟩⟩
   simpa only [unionᵢ_coe_set, ← univ_subset_iff]
feat: port Topology.Paracompact (#2036)

Co-authored-by: Lukas Miaskiwskyi <lukas.mias@gmail.com>

Dependencies 8 + 303

304 files ported (97.4%)
133350 lines ported (96.4%)
Show graph

The unported dependencies are