Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 1e0761e

Browse files
rwbartonmergify[bot]
authored andcommitted
feat(topology/maps): closed embeddings (#1013)
* feat(topology/maps): closed embeddings * fix "is_open_map"
1 parent de5d038 commit 1e0761e

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

src/topology/maps.lean

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,33 @@ lemma to_quotient_map {f : α → β}
342342

343343
end is_open_map
344344

345+
section is_closed_map
346+
variables [topological_space α] [topological_space β]
347+
348+
def is_closed_map (f : α → β) := ∀ U : set α, is_closed U → is_closed (f '' U)
349+
350+
end is_closed_map
351+
352+
namespace is_closed_map
353+
354+
variables [topological_space α] [topological_space β] [topological_space γ]
355+
open function
356+
357+
protected lemma id : is_closed_map (@id α) := assume s hs, by rwa image_id
358+
359+
protected lemma comp {f : α → β} {g : β → γ} (hf : is_closed_map f) (hg : is_closed_map g) :
360+
is_closed_map (g ∘ f) :=
361+
by { intros s hs, rw image_comp, exact hg _ (hf _ hs) }
362+
363+
lemma of_inverse {f : α → β} {f' : β → α}
364+
(h : continuous f') (l_inv : left_inverse f f') (r_inv : right_inverse f f') :
365+
is_closed_map f :=
366+
assume s hs,
367+
have f' ⁻¹' s = f '' s, by ext x; simp [mem_image_iff_of_inverse r_inv l_inv],
368+
this ▸ continuous_iff_is_closed.mp h s hs
369+
370+
end is_closed_map
371+
345372
section sierpinski
346373
variables [topological_space α]
347374

@@ -358,3 +385,48 @@ lemma continuous_Prop {p : α → Prop} : continuous p ↔ is_open {x | p x} :=
358385
by simp at hs; simp [hs, preimage, eq_true, h]⟩
359386

360387
end sierpinski
388+
389+
section closed_embedding
390+
variables [topological_space α] [topological_space β] [topological_space γ]
391+
392+
/-- A closed embedding is an embedding with closed image. -/
393+
def closed_embedding (f : α → β) : Prop := embedding f ∧ is_closed (range f)
394+
395+
lemma closed_embedding.closed_iff_image_closed {f : α → β} (hf : closed_embedding f)
396+
{s : set α} : is_closed s ↔ is_closed (f '' s) :=
397+
⟨embedding_is_closed hf.1 hf.2,
398+
λ h, begin
399+
convert ←continuous_iff_is_closed.mp hf.1.continuous _ h,
400+
apply preimage_image_eq _ hf.1.1
401+
end
402+
403+
lemma closed_embedding.closed_iff_preimage_closed {f : α → β} (hf : closed_embedding f)
404+
{s : set β} (hs : s ⊆ range f) : is_closed s ↔ is_closed (f ⁻¹' s) :=
405+
begin
406+
convert ←hf.closed_iff_image_closed.symm,
407+
rwa [image_preimage_eq_inter_range, inter_eq_self_of_subset_left]
408+
end
409+
410+
lemma closed_embedding_of_continuous_injective_closed {f : α → β} (h₁ : continuous f)
411+
(h₂ : function.injective f) (h₃ : is_closed_map f) : closed_embedding f :=
412+
begin
413+
refine ⟨⟨h₂, _⟩, by convert h₃ univ is_closed_univ; simp⟩,
414+
apply le_antisymm _ (continuous_iff_induced_le.mp h₁),
415+
intro s',
416+
change is_open _ ≤ is_open _,
417+
rw [←is_closed_compl_iff, ←is_closed_compl_iff],
418+
generalize : -s' = s,
419+
rw is_closed_induced_iff,
420+
refine λ hs, ⟨f '' s, h₃ s hs, _⟩,
421+
rw preimage_image_eq _ h₂
422+
end
423+
424+
lemma closed_embedding_id : closed_embedding (@id α) :=
425+
⟨embedding_id, by convert is_closed_univ; apply range_id⟩
426+
427+
lemma closed_embedding_compose {f : α → β} {g : β → γ}
428+
(hf : closed_embedding f) (hg : closed_embedding g) : closed_embedding (g ∘ f) :=
429+
⟨embedding_compose hf.1 hg.1, show is_closed (range (g ∘ f)),
430+
by rw [range_comp, ←hg.closed_iff_image_closed]; exact hf.2
431+
432+
end closed_embedding

0 commit comments

Comments
 (0)