topology.paracompact
⟷
Mathlib.Topology.Compactness.Paracompact
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.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(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)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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 =>
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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`
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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`
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -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"
mathlib commit https://github.com/leanprover-community/mathlib/commit/001ffdc42920050657fd45bd2b8bfbec8eaaeb29
@@ -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
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -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
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -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 =>
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
All of these changes appear to be oversights to me.
@@ -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] :
All these lemmas refer to the range of some function being open/range (i.e. isOpen
or isClosed
).
@@ -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
@@ -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
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.
@@ -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
@@ -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]
@@ -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
@@ -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
@@ -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
Later I'm going to split files like Lipschitz
into 2: one in EMetricSpace/
and one in MetricSpace/
.
@@ -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
@@ -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)
@@ -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
@@ -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⟩
@@ -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 ↦
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 grep
ped the line after a contra
, then grep
ped for a not
and then selected 3 likely candidates. There are potentially more situations like these.
@@ -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
I wrote a script to find lines that contain an odd number of backticks
@@ -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)`.
@@ -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 _⟩
sSup
/iSup
(#3938)
As discussed on Zulip
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>
@@ -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⟩
by
s! (#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 by
s".
@@ -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])
@@ -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]
The unported dependencies are