@@ -342,6 +342,33 @@ lemma to_quotient_map {f : α → β}
342
342
343
343
end is_open_map
344
344
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
+
345
372
section sierpinski
346
373
variables [topological_space α]
347
374
@@ -358,3 +385,48 @@ lemma continuous_Prop {p : α → Prop} : continuous p ↔ is_open {x | p x} :=
358
385
by simp at hs; simp [hs, preimage, eq_true, h]⟩
359
386
360
387
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