Skip to content

Commit 85af2e4

Browse files
committed
feat: composition of ContinuousMaps is inducing (leanprover-community#5652)
If `g : C(β, γ)` is inducing, then `fun f : C(α, β) ↦ g.comp f` is inducing.
1 parent b0bb297 commit 85af2e4

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

Mathlib/Topology/CompactOpen.lean

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,11 @@ instance compactOpen : TopologicalSpace C(α, β) :=
8787
{ m | ∃ (s : Set α) (_ : IsCompact s) (u : Set β) (_ : IsOpen u), m = CompactOpen.gen s u }
8888
#align continuous_map.compact_open ContinuousMap.compactOpen
8989

90+
/-- Definition of `ContinuousMap.compactOpen` in terms of `Set.image2`. -/
91+
theorem compactOpen_eq : @compactOpen α β _ _ =
92+
.generateFrom (Set.image2 CompactOpen.gen {s | IsCompact s} {t | IsOpen t}) :=
93+
congr_arg TopologicalSpace.generateFrom <| Set.ext fun _ ↦ by simp [eq_comm]
94+
9095
protected theorem isOpen_gen {s : Set α} (hs : IsCompact s) {u : Set β} (hu : IsOpen u) :
9196
IsOpen (CompactOpen.gen s u) :=
9297
TopologicalSpace.GenerateOpen.basic _ (by dsimp [mem_setOf_eq]; tauto)
@@ -96,19 +101,30 @@ section Functorial
96101

97102
variable (g : C(β, γ))
98103

99-
private theorem preimage_gen {s : Set α} (_ : IsCompact s) {u : Set γ} (_ : IsOpen u) :
104+
private theorem preimage_gen {s : Set α} {u : Set γ} :
100105
ContinuousMap.comp g ⁻¹' CompactOpen.gen s u = CompactOpen.gen s (g ⁻¹' u) := by
101106
ext ⟨f, _⟩
102107
change g ∘ f '' s ⊆ u ↔ f '' s ⊆ g ⁻¹' u
103108
rw [image_comp, image_subset_iff]
104-
--#align continuous_map.preimage_gen ContinuousMap.preimage_gen
105109

106110
/-- C(α, -) is a functor. -/
107111
theorem continuous_comp : Continuous (ContinuousMap.comp g : C(α, β) → C(α, γ)) :=
108112
continuous_generateFrom fun m ⟨s, hs, u, hu, hm⟩ => by
109-
rw [hm, preimage_gen g hs hu]; exact ContinuousMap.isOpen_gen hs (hu.preimage g.2)
113+
rw [hm, preimage_gen g]; exact ContinuousMap.isOpen_gen hs (hu.preimage g.2)
110114
#align continuous_map.continuous_comp ContinuousMap.continuous_comp
111115

116+
/-- If `g : C(β, γ)` is a topology inducing map, then the composition
117+
`ContinuousMap.comp g : C(α, β) → C(α, γ)` is a topology inducing map too. -/
118+
theorem inducing_comp (hg : Inducing g) : Inducing (g.comp : C(α, β) → C(α, γ)) where
119+
induced := by
120+
simp only [compactOpen_eq, induced_generateFrom_eq, image_image2, preimage_gen,
121+
hg.setOf_isOpen, image2_image_right]
122+
123+
/-- If `g : C(β, γ)` is a topological embedding, then the composition
124+
`ContinuousMap.comp g : C(α, β) → C(α, γ)` is an embedding too. -/
125+
theorem embedding_comp (hg : Embedding g) : Embedding (g.comp : C(α, β) → C(α, γ)) :=
126+
⟨inducing_comp g hg.1, fun _ _ ↦ (cancel_left hg.2).1
127+
112128
variable (f : C(α, β))
113129

114130
private theorem image_gen {s : Set α} (_ : IsCompact s) {u : Set γ} (_ : IsOpen u) :

Mathlib/Topology/Maps.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,10 @@ theorem Inducing.isOpen_iff {f : α → β} (hf : Inducing f) {s : Set α} :
175175
IsOpen s ↔ ∃ t, IsOpen t ∧ f ⁻¹' t = s := by rw [hf.induced, isOpen_induced_iff]
176176
#align inducing.is_open_iff Inducing.isOpen_iff
177177

178+
theorem Inducing.setOf_isOpen {f : α → β} (hf : Inducing f) :
179+
{s : Set α | IsOpen s} = preimage f '' {t | IsOpen t} :=
180+
Set.ext fun _ ↦ hf.isOpen_iff
181+
178182
theorem Inducing.dense_iff {f : α → β} (hf : Inducing f) {s : Set α} :
179183
Dense s ↔ ∀ x, f x ∈ closure (f '' s) := by
180184
simp only [Dense, hf.closure_eq_preimage_closure_image, mem_preimage]

0 commit comments

Comments
 (0)