Skip to content

Commit 51c2f54

Browse files
committed
feat: homeomorphism between C(X, Σ i, Y i) and Σ i, C(X, Y i) (#5673)
This is a follow-up to #4325.
1 parent cefb050 commit 51c2f54

File tree

5 files changed

+105
-1
lines changed

5 files changed

+105
-1
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3142,6 +3142,7 @@ import Mathlib.Topology.ContinuousFunction.Ideals
31423142
import Mathlib.Topology.ContinuousFunction.LocallyConstant
31433143
import Mathlib.Topology.ContinuousFunction.Ordered
31443144
import Mathlib.Topology.ContinuousFunction.Polynomial
3145+
import Mathlib.Topology.ContinuousFunction.Sigma
31453146
import Mathlib.Topology.ContinuousFunction.StoneWeierstrass
31463147
import Mathlib.Topology.ContinuousFunction.T0Sierpinski
31473148
import Mathlib.Topology.ContinuousFunction.Units

Mathlib/Topology/CompactOpen.lean

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,6 @@ private theorem image_gen {s : Set α} (_ : IsCompact s) {u : Set γ} (_ : IsOpe
132132
ext ⟨g, _⟩
133133
change g ∘ f '' s ⊆ u ↔ g '' (f '' s) ⊆ u
134134
rw [Set.image_comp]
135-
--#align continuous_map.image_gen continuous_map.image_gen
136135

137136
/-- C(-, γ) is a functor. -/
138137
theorem continuous_comp_left : Continuous (fun g => g.comp f : C(β, γ) → C(α, γ)) :=

Mathlib/Topology/Constructions.lean

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1533,6 +1533,22 @@ theorem continuous_sigma {f : Sigma σ → α} (hf : ∀ i, Continuous fun a =>
15331533
continuous_sigma_iff.2 hf
15341534
#align continuous_sigma continuous_sigma
15351535

1536+
/-- A map defined on a sigma type (a.k.a. the disjoint union of an indexed family of topological
1537+
spaces) is inducing iff its restriction to each component is inducing and each the image of each
1538+
component under `f` can be separated from the images of all other components by an open set. -/
1539+
theorem inducing_sigma {f : Sigma σ → α} :
1540+
Inducing f ↔ (∀ i, Inducing (f ∘ Sigma.mk i)) ∧
1541+
(∀ i, ∃ U, IsOpen U ∧ ∀ x, f x ∈ U ↔ x.1 = i) := by
1542+
refine ⟨fun h ↦ ⟨fun i ↦ h.comp embedding_sigmaMk.1, fun i ↦ ?_⟩, ?_⟩
1543+
· rcases h.isOpen_iff.1 (isOpen_range_sigmaMk (i := i)) with ⟨U, hUo, hU⟩
1544+
refine ⟨U, hUo, ?_⟩
1545+
simpa [Set.ext_iff] using hU
1546+
· refine fun ⟨h₁, h₂⟩ ↦ inducing_iff_nhds.2 fun ⟨i, x⟩ ↦ ?_
1547+
rw [Sigma.nhds_mk, (h₁ i).nhds_eq_comap, comp_apply, ← comap_comap, map_comap_of_mem]
1548+
rcases h₂ i with ⟨U, hUo, hU⟩
1549+
filter_upwards [preimage_mem_comap <| hUo.mem_nhds <| (hU _).2 rfl] with y hy
1550+
simpa [hU] using hy
1551+
15361552
@[simp 1100]
15371553
theorem continuous_sigma_map {f₁ : ι → κ} {f₂ : ∀ i, σ i → τ (f₁ i)} :
15381554
Continuous (Sigma.map f₁ f₂) ↔ ∀ i, Continuous (f₂ i) :=

Mathlib/Topology/ContinuousFunction/Basic.lean

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,12 @@ def prodSwap : C(α × β, β × α) := .prodMk .snd .fst
324324

325325
end Prod
326326

327+
/-- `Sigma.mk i` as a bundled continuous map. -/
328+
@[simps apply]
329+
def sigmaMk {ι : Type _} {Y : ι → Type _} [∀ i, TopologicalSpace (Y i)] (i : ι) :
330+
C(Y i, Σ i, Y i) where
331+
toFun := Sigma.mk i
332+
327333
section Pi
328334

329335
variable {I A : Type _} {X Y : I → Type _} [TopologicalSpace A] [∀ i, TopologicalSpace (X i)]
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
/-
2+
Copyright (c) 2023 Yury Kudryashov. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Yury Kudryashov
5+
-/
6+
import Mathlib.Topology.Connected
7+
import Mathlib.Topology.CompactOpen
8+
9+
/-!
10+
# Equivalence between `C(X, Σ i, Y i)` and `Σ i, C(X, Y i)`
11+
12+
If `X` is a connected topological space, then for every continuous map `f` from `X` to the disjoint
13+
union of a collection of topological spaces `Y i` there exists a unique index `i` and a continuous
14+
map from `g` to `Y i` such that `f` is the composition of the natural embedding
15+
`Sigma.mk i : Y i → Σ i, Y i` with `g`.
16+
17+
This defines an equivalence between `C(X, Σ i, Y i)` and `Σ i, C(X, Y i)`. In fact, this equivalence
18+
is a homeomorphism if the spaces of continuous maps are equipped with the compact-open topology.
19+
20+
## Implementation notes
21+
22+
There are two natural ways to talk about this result: one is to say that for each `f` there exist
23+
unique `i` and `g`; another one is to define a noncomputable equivalence. We choose the second way
24+
because it is easier to use an equivalence in applications.
25+
26+
## TODO
27+
28+
Some results in this file can be generalized to the case when `X` is a preconnected space. However,
29+
if `X` is empty, then any index `i` will work, so there is no 1-to-1 corespondence.
30+
31+
## Keywords
32+
33+
continuous map, sigma type, disjoint union
34+
-/
35+
36+
noncomputable section
37+
38+
open scoped Topology
39+
open Filter
40+
41+
variable {X ι : Type _} {Y : ι → Type _} [TopologicalSpace X] [∀ i, TopologicalSpace (Y i)]
42+
43+
namespace ContinuousMap
44+
45+
theorem embedding_sigmaMk_comp [Nonempty X] :
46+
Embedding (fun g : Σ i, C(X, Y i) ↦ (sigmaMk g.1).comp g.2) where
47+
toInducing := inducing_sigma.2
48+
fun i ↦ (sigmaMk i).inducing_comp embedding_sigmaMk.toInducing, fun i ↦
49+
let ⟨x⟩ := ‹Nonempty X›
50+
⟨_, (isOpen_sigma_fst_preimage {i}).preimage (continuous_eval_const x), fun _ ↦ Iff.rfl⟩⟩
51+
inj := by
52+
· rintro ⟨i, g⟩ ⟨i', g'⟩ h
53+
obtain ⟨rfl, hg⟩ : i = i' ∧ HEq (⇑g) (⇑g') :=
54+
Function.eq_of_sigmaMk_comp <| congr_arg FunLike.coe h
55+
simpa using hg
56+
57+
section ConnectedSpace
58+
59+
variable [ConnectedSpace X]
60+
61+
/-- Every a continuous map from a connected topological space to the disjoint union of a family of
62+
topological spaces is a composition of the embedding `ContinuousMap.sigmMk i : C(Y i, Σ i, Y i)` for
63+
some `i` and a continuous map `g : C(X, Y i)`. See also `Continuous.exists_lift_sigma` for a version
64+
with unbundled functions and `ContinuousMap.sigmaCodHomeomorph` for a homeomorphism defined using
65+
this fact. -/
66+
theorem exists_lift_sigma (f : C(X, Σ i, Y i)) : ∃ i g, f = (sigmaMk i).comp g :=
67+
let ⟨i, g, hg, hfg⟩ := f.continuous.exists_lift_sigma
68+
⟨i, ⟨g, hg⟩, FunLike.ext' hfg⟩
69+
70+
variable (X Y)
71+
72+
/-- Homeomorphism between the type `C(X, Σ i, Y i)` of continuous maps from a connected topological
73+
space to the disjoint union of a family of topological spaces and the disjoint union of the types of
74+
continuous maps `C(X, Y i)`.
75+
76+
The inverse map sends `⟨i, g⟩` to `ContinuousMap.comp (ContinuousMap.sigmaMk i) g`. -/
77+
@[simps! symm_apply]
78+
def sigmaCodHomeomorph : C(X, Σ i, Y i) ≃ₜ Σ i, C(X, Y i) :=
79+
.symm <| Equiv.toHomeomorphOfInducing
80+
(.ofBijective _ ⟨embedding_sigmaMk_comp.inj, fun f ↦
81+
let ⟨i, g, hg⟩ := f.exists_lift_sigma; ⟨⟨i, g⟩, hg.symm⟩⟩)
82+
embedding_sigmaMk_comp.toInducing

0 commit comments

Comments
 (0)