topology.mapsMathlib.Topology.Maps

This file has been ported!

Changes since the initial port

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.

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(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)

feat(topology/{maps,separation}): add lemmas about closed and quotient maps (#19071)

Lemma statements are from Shamrock-Frost/BrouwerFixedPoint

Co-authored-by: @Shamrock-Frost

Diff
@@ -228,10 +228,15 @@ def quotient_map {α : Type*} {β : Type*} [tα : topological_space α] [tβ : t
   (f : α → β) : Prop :=
 surjective f ∧ tβ = tα.coinduced f
 
-lemma quotient_map_iff {α β : Type*} [topological_space α] [topological_space β] {f : α → β} :
+lemma quotient_map_iff [topological_space α] [topological_space β] {f : α → β} :
   quotient_map f ↔ surjective f ∧ ∀ s : set β, is_open s ↔ is_open (f ⁻¹' s) :=
 and_congr iff.rfl topological_space_eq_iff
 
+lemma quotient_map_iff_closed [topological_space α] [topological_space β] {f : α → β} :
+  quotient_map f ↔ surjective f ∧ ∀ s : set β, is_closed s ↔ is_closed (f ⁻¹' s) :=
+quotient_map_iff.trans $ iff.rfl.and $ compl_surjective.forall.trans $
+  by simp only [is_open_compl_iff, preimage_compl]
+
 namespace quotient_map
 
 variables [topological_space α] [topological_space β] [topological_space γ] [topological_space δ]
@@ -270,7 +275,7 @@ protected lemma is_open_preimage (hf : quotient_map f) {s : set β} :
 
 protected lemma is_closed_preimage (hf : quotient_map f) {s : set β} :
   is_closed (f ⁻¹' s) ↔ is_closed s :=
-by simp only [← is_open_compl_iff, ← preimage_compl, hf.is_open_preimage]
+((quotient_map_iff_closed.1 hf).2 s).symm
 
 end quotient_map
 
@@ -427,6 +432,11 @@ end
 lemma closed_range {f : α → β} (hf : is_closed_map f) : is_closed (range f) :=
 @image_univ _ _ f ▸ hf _ is_closed_univ
 
+lemma to_quotient_map {f : α → β} (hcl : is_closed_map f) (hcont : continuous f)
+  (hsurj : surjective f) : quotient_map f :=
+quotient_map_iff_closed.2
+  ⟨hsurj, λ s, ⟨λ hs, hs.preimage hcont, λ hs, hsurj.image_preimage s ▸ hcl _ hs⟩⟩
+
 end is_closed_map
 
 lemma inducing.is_closed_map [topological_space α] [topological_space β]

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(first ported)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -643,10 +643,10 @@ theorem of_nonempty {f : α → β} (h : ∀ s, IsClosed s → s.Nonempty → Is
 #align is_closed_map.of_nonempty IsClosedMap.of_nonempty
 -/
 
-#print IsClosedMap.closed_range /-
-theorem closed_range {f : α → β} (hf : IsClosedMap f) : IsClosed (range f) :=
+#print IsClosedMap.isClosed_range /-
+theorem isClosed_range {f : α → β} (hf : IsClosedMap f) : IsClosed (range f) :=
   @image_univ _ _ f ▸ hf _ isClosed_univ
-#align is_closed_map.closed_range IsClosedMap.closed_range
+#align is_closed_map.closed_range IsClosedMap.isClosed_range
 -/
 
 #print IsClosedMap.to_quotientMap /-
@@ -815,7 +815,7 @@ variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
 /-- A closed embedding is an embedding with closed image. -/
 @[mk_iff]
 structure ClosedEmbedding (f : α → β) extends Embedding f : Prop where
-  closed_range : IsClosed <| range f
+  isClosed_range : IsClosed <| range f
 #align closed_embedding ClosedEmbedding
 -/
 
@@ -836,7 +836,7 @@ theorem ClosedEmbedding.continuous (hf : ClosedEmbedding f) : Continuous f :=
 
 #print ClosedEmbedding.isClosedMap /-
 theorem ClosedEmbedding.isClosedMap (hf : ClosedEmbedding f) : IsClosedMap f :=
-  hf.toEmbedding.to_inducing.IsClosedMap hf.closed_range
+  hf.toEmbedding.to_inducing.IsClosedMap hf.isClosed_range
 #align closed_embedding.is_closed_map ClosedEmbedding.isClosedMap
 -/
 
Diff
@@ -3,8 +3,8 @@ Copyright (c) 2017 Johannes Hölzl. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Mario Carneiro, Patrick Massot
 -/
-import Mathbin.Topology.Order
-import Mathbin.Topology.NhdsSet
+import Topology.Order
+import Topology.NhdsSet
 
 #align_import topology.maps from "leanprover-community/mathlib"@"d91e7f7a7f1c7e9f0e18fdb6bde4f652004c735d"
 
Diff
@@ -336,7 +336,7 @@ def QuotientMap {α : Type _} {β : Type _} [tα : TopologicalSpace α] [tβ : T
 #print quotientMap_iff /-
 theorem quotientMap_iff [TopologicalSpace α] [TopologicalSpace β] {f : α → β} :
     QuotientMap f ↔ Surjective f ∧ ∀ s : Set β, IsOpen s ↔ IsOpen (f ⁻¹' s) :=
-  and_congr Iff.rfl topologicalSpace_eq_iff
+  and_congr Iff.rfl TopologicalSpace.ext_iff
 #align quotient_map_iff quotientMap_iff
 -/
 
Diff
@@ -2,15 +2,12 @@
 Copyright (c) 2017 Johannes Hölzl. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Mario Carneiro, Patrick Massot
-
-! This file was ported from Lean 3 source module topology.maps
-! leanprover-community/mathlib commit d91e7f7a7f1c7e9f0e18fdb6bde4f652004c735d
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Topology.Order
 import Mathbin.Topology.NhdsSet
 
+#align_import topology.maps from "leanprover-community/mathlib"@"d91e7f7a7f1c7e9f0e18fdb6bde4f652004c735d"
+
 /-!
 # Specific classes of maps between topological spaces
 
Diff
@@ -511,7 +511,7 @@ theorem of_inverse {f : α → β} {f' : β → α} (h : Continuous f') (l_inv :
 theorem to_quotientMap {f : α → β} (open_map : IsOpenMap f) (cont : Continuous f)
     (surj : Surjective f) : QuotientMap f :=
   quotientMap_iff.2
-    ⟨surj, fun s => ⟨fun h => h.Preimage cont, fun h => surj.image_preimage s ▸ open_map _ h⟩⟩
+    ⟨surj, fun s => ⟨fun h => h.Preimage Cont, fun h => surj.image_preimage s ▸ open_map _ h⟩⟩
 #align is_open_map.to_quotient_map IsOpenMap.to_quotientMap
 -/
 
Diff
@@ -77,68 +77,95 @@ theorem inducing_id : Inducing (@id α) :=
 #align inducing_id inducing_id
 -/
 
+#print Inducing.comp /-
 protected theorem Inducing.comp {g : β → γ} {f : α → β} (hg : Inducing g) (hf : Inducing f) :
     Inducing (g ∘ f) :=
   ⟨by rw [hf.induced, hg.induced, induced_compose]⟩
 #align inducing.comp Inducing.comp
+-/
 
+#print inducing_of_inducing_compose /-
 theorem inducing_of_inducing_compose {f : α → β} {g : β → γ} (hf : Continuous f) (hg : Continuous g)
     (hgf : Inducing (g ∘ f)) : Inducing f :=
   ⟨le_antisymm (by rwa [← continuous_iff_le_induced])
       (by rw [hgf.induced, ← continuous_iff_le_induced]; apply hg.comp continuous_induced_dom)⟩
 #align inducing_of_inducing_compose inducing_of_inducing_compose
+-/
 
+#print inducing_iff_nhds /-
 theorem inducing_iff_nhds {f : α → β} : Inducing f ↔ ∀ a, 𝓝 a = comap f (𝓝 (f a)) :=
   (inducing_iff _).trans (induced_iff_nhds_eq f)
 #align inducing_iff_nhds inducing_iff_nhds
+-/
 
+#print Inducing.nhds_eq_comap /-
 theorem Inducing.nhds_eq_comap {f : α → β} (hf : Inducing f) : ∀ a : α, 𝓝 a = comap f (𝓝 <| f a) :=
   inducing_iff_nhds.1 hf
 #align inducing.nhds_eq_comap Inducing.nhds_eq_comap
+-/
 
+#print Inducing.nhdsSet_eq_comap /-
 theorem Inducing.nhdsSet_eq_comap {f : α → β} (hf : Inducing f) (s : Set α) :
     𝓝ˢ s = comap f (𝓝ˢ (f '' s)) := by
   simp only [nhdsSet, sSup_image, comap_supr, hf.nhds_eq_comap, iSup_image]
 #align inducing.nhds_set_eq_comap Inducing.nhdsSet_eq_comap
+-/
 
+#print Inducing.map_nhds_eq /-
 theorem Inducing.map_nhds_eq {f : α → β} (hf : Inducing f) (a : α) : (𝓝 a).map f = 𝓝[range f] f a :=
   hf.induced.symm ▸ map_nhds_induced_eq a
 #align inducing.map_nhds_eq Inducing.map_nhds_eq
+-/
 
+#print Inducing.map_nhds_of_mem /-
 theorem Inducing.map_nhds_of_mem {f : α → β} (hf : Inducing f) (a : α) (h : range f ∈ 𝓝 (f a)) :
     (𝓝 a).map f = 𝓝 (f a) :=
   hf.induced.symm ▸ map_nhds_induced_of_mem h
 #align inducing.map_nhds_of_mem Inducing.map_nhds_of_mem
+-/
 
+#print Inducing.image_mem_nhdsWithin /-
 theorem Inducing.image_mem_nhdsWithin {f : α → β} (hf : Inducing f) {a : α} {s : Set α}
     (hs : s ∈ 𝓝 a) : f '' s ∈ 𝓝[range f] f a :=
   hf.map_nhds_eq a ▸ image_mem_map hs
 #align inducing.image_mem_nhds_within Inducing.image_mem_nhdsWithin
+-/
 
+#print Inducing.tendsto_nhds_iff /-
 theorem Inducing.tendsto_nhds_iff {ι : Type _} {f : ι → β} {g : β → γ} {a : Filter ι} {b : β}
     (hg : Inducing g) : Tendsto f a (𝓝 b) ↔ Tendsto (g ∘ f) a (𝓝 (g b)) := by
   rw [hg.nhds_eq_comap, tendsto_comap_iff]
 #align inducing.tendsto_nhds_iff Inducing.tendsto_nhds_iff
+-/
 
+#print Inducing.continuousAt_iff /-
 theorem Inducing.continuousAt_iff {f : α → β} {g : β → γ} (hg : Inducing g) {x : α} :
     ContinuousAt f x ↔ ContinuousAt (g ∘ f) x := by
   simp_rw [ContinuousAt, Inducing.tendsto_nhds_iff hg]
 #align inducing.continuous_at_iff Inducing.continuousAt_iff
+-/
 
+#print Inducing.continuous_iff /-
 theorem Inducing.continuous_iff {f : α → β} {g : β → γ} (hg : Inducing g) :
     Continuous f ↔ Continuous (g ∘ f) := by
   simp_rw [continuous_iff_continuousAt, hg.continuous_at_iff]
 #align inducing.continuous_iff Inducing.continuous_iff
+-/
 
+#print Inducing.continuousAt_iff' /-
 theorem Inducing.continuousAt_iff' {f : α → β} {g : β → γ} (hf : Inducing f) {x : α}
     (h : range f ∈ 𝓝 (f x)) : ContinuousAt (g ∘ f) x ↔ ContinuousAt g (f x) := by
   simp_rw [ContinuousAt, Filter.Tendsto, ← hf.map_nhds_of_mem _ h, Filter.map_map]
 #align inducing.continuous_at_iff' Inducing.continuousAt_iff'
+-/
 
+#print Inducing.continuous /-
 protected theorem Inducing.continuous {f : α → β} (hf : Inducing f) : Continuous f :=
   hf.continuous_iff.mp continuous_id
 #align inducing.continuous Inducing.continuous
+-/
 
+#print Inducing.inducing_iff /-
 protected theorem Inducing.inducing_iff {f : α → β} {g : β → γ} (hg : Inducing g) :
     Inducing f ↔ Inducing (g ∘ f) :=
   by
@@ -146,33 +173,46 @@ protected theorem Inducing.inducing_iff {f : α → β} {g : β → γ} (hg : In
   rw [hg.continuous_iff]
   exact hgf.continuous
 #align inducing.inducing_iff Inducing.inducing_iff
+-/
 
+#print Inducing.closure_eq_preimage_closure_image /-
 theorem Inducing.closure_eq_preimage_closure_image {f : α → β} (hf : Inducing f) (s : Set α) :
     closure s = f ⁻¹' closure (f '' s) := by ext x;
   rw [Set.mem_preimage, ← closure_induced, hf.induced]
 #align inducing.closure_eq_preimage_closure_image Inducing.closure_eq_preimage_closure_image
+-/
 
+#print Inducing.isClosed_iff /-
 theorem Inducing.isClosed_iff {f : α → β} (hf : Inducing f) {s : Set α} :
     IsClosed s ↔ ∃ t, IsClosed t ∧ f ⁻¹' t = s := by rw [hf.induced, isClosed_induced_iff]
 #align inducing.is_closed_iff Inducing.isClosed_iff
+-/
 
+#print Inducing.isClosed_iff' /-
 theorem Inducing.isClosed_iff' {f : α → β} (hf : Inducing f) {s : Set α} :
     IsClosed s ↔ ∀ x, f x ∈ closure (f '' s) → x ∈ s := by rw [hf.induced, isClosed_induced_iff']
 #align inducing.is_closed_iff' Inducing.isClosed_iff'
+-/
 
+#print Inducing.isClosed_preimage /-
 theorem Inducing.isClosed_preimage {f : α → β} (h : Inducing f) (s : Set β) (hs : IsClosed s) :
     IsClosed (f ⁻¹' s) :=
   (Inducing.isClosed_iff h).mpr ⟨s, hs, rfl⟩
 #align inducing.is_closed_preimage Inducing.isClosed_preimage
+-/
 
+#print Inducing.isOpen_iff /-
 theorem Inducing.isOpen_iff {f : α → β} (hf : Inducing f) {s : Set α} :
     IsOpen s ↔ ∃ t, IsOpen t ∧ f ⁻¹' t = s := by rw [hf.induced, isOpen_induced_iff]
 #align inducing.is_open_iff Inducing.isOpen_iff
+-/
 
+#print Inducing.dense_iff /-
 theorem Inducing.dense_iff {f : α → β} (hf : Inducing f) {s : Set α} :
     Dense s ↔ ∀ x, f x ∈ closure (f '' s) := by
   simp only [Dense, hf.closure_eq_preimage_closure_image, mem_preimage]
 #align inducing.dense_iff Inducing.dense_iff
+-/
 
 end Inducing
 
@@ -198,10 +238,12 @@ theorem Function.Injective.embedding_induced [t : TopologicalSpace β] {f : α 
 
 variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
 
+#print Embedding.mk' /-
 theorem Embedding.mk' (f : α → β) (inj : Injective f) (induced : ∀ a, comap f (𝓝 (f a)) = 𝓝 a) :
     Embedding f :=
   ⟨inducing_iff_nhds.2 fun a => (induced a).symm, inj⟩
 #align embedding.mk' Embedding.mk'
+-/
 
 #print embedding_id /-
 theorem embedding_id : Embedding (@id α) :=
@@ -209,16 +251,20 @@ theorem embedding_id : Embedding (@id α) :=
 #align embedding_id embedding_id
 -/
 
+#print Embedding.comp /-
 theorem Embedding.comp {g : β → γ} {f : α → β} (hg : Embedding g) (hf : Embedding f) :
     Embedding (g ∘ f) :=
   { hg.to_inducing.comp hf.to_inducing with inj := fun a₁ a₂ h => hf.inj <| hg.inj h }
 #align embedding.comp Embedding.comp
+-/
 
+#print embedding_of_embedding_compose /-
 theorem embedding_of_embedding_compose {f : α → β} {g : β → γ} (hf : Continuous f)
     (hg : Continuous g) (hgf : Embedding (g ∘ f)) : Embedding f :=
   { induced := (inducing_of_inducing_compose hf hg hgf.to_inducing).induced
     inj := fun a₁ a₂ h => hgf.inj <| by simp [h, (· ∘ ·)] }
 #align embedding_of_embedding_compose embedding_of_embedding_compose
+-/
 
 #print Function.LeftInverse.embedding /-
 protected theorem Function.LeftInverse.embedding {f : α → β} {g : β → α} (h : LeftInverse f g)
@@ -227,35 +273,48 @@ protected theorem Function.LeftInverse.embedding {f : α → β} {g : β → α}
 #align function.left_inverse.embedding Function.LeftInverse.embedding
 -/
 
+#print Embedding.map_nhds_eq /-
 theorem Embedding.map_nhds_eq {f : α → β} (hf : Embedding f) (a : α) :
     (𝓝 a).map f = 𝓝[range f] f a :=
   hf.1.map_nhds_eq a
 #align embedding.map_nhds_eq Embedding.map_nhds_eq
+-/
 
+#print Embedding.map_nhds_of_mem /-
 theorem Embedding.map_nhds_of_mem {f : α → β} (hf : Embedding f) (a : α) (h : range f ∈ 𝓝 (f a)) :
     (𝓝 a).map f = 𝓝 (f a) :=
   hf.1.map_nhds_of_mem a h
 #align embedding.map_nhds_of_mem Embedding.map_nhds_of_mem
+-/
 
+#print Embedding.tendsto_nhds_iff /-
 theorem Embedding.tendsto_nhds_iff {ι : Type _} {f : ι → β} {g : β → γ} {a : Filter ι} {b : β}
     (hg : Embedding g) : Tendsto f a (𝓝 b) ↔ Tendsto (g ∘ f) a (𝓝 (g b)) :=
   hg.to_inducing.tendsto_nhds_iff
 #align embedding.tendsto_nhds_iff Embedding.tendsto_nhds_iff
+-/
 
+#print Embedding.continuous_iff /-
 theorem Embedding.continuous_iff {f : α → β} {g : β → γ} (hg : Embedding g) :
     Continuous f ↔ Continuous (g ∘ f) :=
   Inducing.continuous_iff hg.1
 #align embedding.continuous_iff Embedding.continuous_iff
+-/
 
+#print Embedding.continuous /-
 theorem Embedding.continuous {f : α → β} (hf : Embedding f) : Continuous f :=
   Inducing.continuous hf.1
 #align embedding.continuous Embedding.continuous
+-/
 
+#print Embedding.closure_eq_preimage_closure_image /-
 theorem Embedding.closure_eq_preimage_closure_image {e : α → β} (he : Embedding e) (s : Set α) :
     closure s = e ⁻¹' closure (e '' s) :=
   he.1.closure_eq_preimage_closure_image s
 #align embedding.closure_eq_preimage_closure_image Embedding.closure_eq_preimage_closure_image
+-/
 
+#print Embedding.discreteTopology /-
 /-- The topology induced under an inclusion `f : X → Y` from the discrete topological space `Y`
 is the discrete topology on `X`. -/
 theorem Embedding.discreteTopology {X Y : Type _} [TopologicalSpace X] [tY : TopologicalSpace Y]
@@ -264,6 +323,7 @@ theorem Embedding.discreteTopology {X Y : Type _} [TopologicalSpace X] [tY : Top
     rw [hf.nhds_eq_comap, nhds_discrete, comap_pure, ← image_singleton, hf.inj.preimage_image,
       principal_singleton]
 #align embedding.discrete_topology Embedding.discreteTopology
+-/
 
 end Embedding
 
@@ -276,16 +336,20 @@ def QuotientMap {α : Type _} {β : Type _} [tα : TopologicalSpace α] [tβ : T
 #align quotient_map QuotientMap
 -/
 
+#print quotientMap_iff /-
 theorem quotientMap_iff [TopologicalSpace α] [TopologicalSpace β] {f : α → β} :
     QuotientMap f ↔ Surjective f ∧ ∀ s : Set β, IsOpen s ↔ IsOpen (f ⁻¹' s) :=
   and_congr Iff.rfl topologicalSpace_eq_iff
 #align quotient_map_iff quotientMap_iff
+-/
 
+#print quotientMap_iff_closed /-
 theorem quotientMap_iff_closed [TopologicalSpace α] [TopologicalSpace β] {f : α → β} :
     QuotientMap f ↔ Surjective f ∧ ∀ s : Set β, IsClosed s ↔ IsClosed (f ⁻¹' s) :=
   quotientMap_iff.trans <|
     Iff.rfl.And <| compl_surjective.forall.trans <| by simp only [isOpen_compl_iff, preimage_compl]
 #align quotient_map_iff_closed quotientMap_iff_closed
+-/
 
 namespace QuotientMap
 
@@ -298,10 +362,13 @@ protected theorem id : QuotientMap (@id α) :=
 #align quotient_map.id QuotientMap.id
 -/
 
+#print QuotientMap.comp /-
 protected theorem comp (hg : QuotientMap g) (hf : QuotientMap f) : QuotientMap (g ∘ f) :=
   ⟨hg.left.comp hf.left, by rw [hg.right, hf.right, coinduced_compose]⟩
 #align quotient_map.comp QuotientMap.comp
+-/
 
+#print QuotientMap.of_quotientMap_compose /-
 protected theorem of_quotientMap_compose (hf : Continuous f) (hg : Continuous g)
     (hgf : QuotientMap (g ∘ f)) : QuotientMap g :=
   ⟨hgf.1.of_comp,
@@ -309,32 +376,45 @@ protected theorem of_quotientMap_compose (hf : Continuous f) (hg : Continuous g)
       (by rw [hgf.right, ← continuous_iff_coinduced_le]; apply continuous_coinduced_rng.comp hf)
       (by rwa [← continuous_iff_coinduced_le])⟩
 #align quotient_map.of_quotient_map_compose QuotientMap.of_quotientMap_compose
+-/
 
+#print QuotientMap.of_inverse /-
 theorem of_inverse {g : β → α} (hf : Continuous f) (hg : Continuous g) (h : LeftInverse g f) :
     QuotientMap g :=
   QuotientMap.of_quotientMap_compose hf hg <| h.comp_eq_id.symm ▸ QuotientMap.id
 #align quotient_map.of_inverse QuotientMap.of_inverse
+-/
 
+#print QuotientMap.continuous_iff /-
 protected theorem continuous_iff (hf : QuotientMap f) : Continuous g ↔ Continuous (g ∘ f) := by
   rw [continuous_iff_coinduced_le, continuous_iff_coinduced_le, hf.right, coinduced_compose]
 #align quotient_map.continuous_iff QuotientMap.continuous_iff
+-/
 
+#print QuotientMap.continuous /-
 protected theorem continuous (hf : QuotientMap f) : Continuous f :=
   hf.continuous_iff.mp continuous_id
 #align quotient_map.continuous QuotientMap.continuous
+-/
 
+#print QuotientMap.surjective /-
 protected theorem surjective (hf : QuotientMap f) : Surjective f :=
   hf.1
 #align quotient_map.surjective QuotientMap.surjective
+-/
 
+#print QuotientMap.isOpen_preimage /-
 protected theorem isOpen_preimage (hf : QuotientMap f) {s : Set β} : IsOpen (f ⁻¹' s) ↔ IsOpen s :=
   ((quotientMap_iff.1 hf).2 s).symm
 #align quotient_map.is_open_preimage QuotientMap.isOpen_preimage
+-/
 
+#print QuotientMap.isClosed_preimage /-
 protected theorem isClosed_preimage (hf : QuotientMap f) {s : Set β} :
     IsClosed (f ⁻¹' s) ↔ IsClosed s :=
   ((quotientMap_iff_closed.1 hf).2 s).symm
 #align quotient_map.is_closed_preimage QuotientMap.isClosed_preimage
+-/
 
 end QuotientMap
 
@@ -355,42 +435,59 @@ protected theorem id : IsOpenMap (@id α) := fun s hs => by rwa [image_id]
 #align is_open_map.id IsOpenMap.id
 -/
 
+#print IsOpenMap.comp /-
 protected theorem comp {g : β → γ} {f : α → β} (hg : IsOpenMap g) (hf : IsOpenMap f) :
     IsOpenMap (g ∘ f) := by intro s hs <;> rw [image_comp] <;> exact hg _ (hf _ hs)
 #align is_open_map.comp IsOpenMap.comp
+-/
 
+#print IsOpenMap.isOpen_range /-
 theorem isOpen_range (hf : IsOpenMap f) : IsOpen (range f) := by rw [← image_univ];
   exact hf _ isOpen_univ
 #align is_open_map.is_open_range IsOpenMap.isOpen_range
+-/
 
+#print IsOpenMap.image_mem_nhds /-
 theorem image_mem_nhds (hf : IsOpenMap f) {x : α} {s : Set α} (hx : s ∈ 𝓝 x) : f '' s ∈ 𝓝 (f x) :=
   let ⟨t, hts, ht, hxt⟩ := mem_nhds_iff.1 hx
   mem_of_superset (IsOpen.mem_nhds (hf t ht) (mem_image_of_mem _ hxt)) (image_subset _ hts)
 #align is_open_map.image_mem_nhds IsOpenMap.image_mem_nhds
+-/
 
+#print IsOpenMap.range_mem_nhds /-
 theorem range_mem_nhds (hf : IsOpenMap f) (x : α) : range f ∈ 𝓝 (f x) :=
   hf.isOpen_range.mem_nhds <| mem_range_self _
 #align is_open_map.range_mem_nhds IsOpenMap.range_mem_nhds
+-/
 
+#print IsOpenMap.mapsTo_interior /-
 theorem mapsTo_interior (hf : IsOpenMap f) {s : Set α} {t : Set β} (h : MapsTo f s t) :
     MapsTo f (interior s) (interior t) :=
   mapsTo'.2 <|
     interior_maximal (h.mono interior_subset Subset.rfl).image_subset (hf _ isOpen_interior)
 #align is_open_map.maps_to_interior IsOpenMap.mapsTo_interior
+-/
 
+#print IsOpenMap.image_interior_subset /-
 theorem image_interior_subset (hf : IsOpenMap f) (s : Set α) :
     f '' interior s ⊆ interior (f '' s) :=
   (hf.mapsTo_interior (mapsTo_image f s)).image_subset
 #align is_open_map.image_interior_subset IsOpenMap.image_interior_subset
+-/
 
+#print IsOpenMap.nhds_le /-
 theorem nhds_le (hf : IsOpenMap f) (a : α) : 𝓝 (f a) ≤ (𝓝 a).map f :=
   le_map fun s => hf.image_mem_nhds
 #align is_open_map.nhds_le IsOpenMap.nhds_le
+-/
 
+#print IsOpenMap.of_nhds_le /-
 theorem of_nhds_le (hf : ∀ a, 𝓝 (f a) ≤ map f (𝓝 a)) : IsOpenMap f := fun s hs =>
   isOpen_iff_mem_nhds.2 fun b ⟨a, has, hab⟩ => hab ▸ hf _ (image_mem_map <| IsOpen.mem_nhds hs has)
 #align is_open_map.of_nhds_le IsOpenMap.of_nhds_le
+-/
 
+#print IsOpenMap.of_sections /-
 theorem of_sections {f : α → β}
     (h : ∀ x, ∃ g : β → α, ContinuousAt g (f x) ∧ g (f x) = x ∧ RightInverse g f) : IsOpenMap f :=
   of_nhds_le fun x =>
@@ -400,6 +497,7 @@ theorem of_sections {f : α → β}
       _ ≤ map f (𝓝 (g (f x))) := (map_mono hgc)
       _ = map f (𝓝 x) := by rw [hgx]
 #align is_open_map.of_sections IsOpenMap.of_sections
+-/
 
 #print IsOpenMap.of_inverse /-
 theorem of_inverse {f : α → β} {f' : β → α} (h : Continuous f') (l_inv : LeftInverse f f')
@@ -408,56 +506,73 @@ theorem of_inverse {f : α → β} {f' : β → α} (h : Continuous f') (l_inv :
 #align is_open_map.of_inverse IsOpenMap.of_inverse
 -/
 
+#print IsOpenMap.to_quotientMap /-
 /-- A continuous surjective open map is a quotient map. -/
 theorem to_quotientMap {f : α → β} (open_map : IsOpenMap f) (cont : Continuous f)
     (surj : Surjective f) : QuotientMap f :=
   quotientMap_iff.2
     ⟨surj, fun s => ⟨fun h => h.Preimage cont, fun h => surj.image_preimage s ▸ open_map _ h⟩⟩
 #align is_open_map.to_quotient_map IsOpenMap.to_quotientMap
+-/
 
+#print IsOpenMap.interior_preimage_subset_preimage_interior /-
 theorem interior_preimage_subset_preimage_interior (hf : IsOpenMap f) {s : Set β} :
     interior (f ⁻¹' s) ⊆ f ⁻¹' interior s :=
   hf.mapsTo_interior (mapsTo_preimage _ _)
 #align is_open_map.interior_preimage_subset_preimage_interior IsOpenMap.interior_preimage_subset_preimage_interior
+-/
 
+#print IsOpenMap.preimage_interior_eq_interior_preimage /-
 theorem preimage_interior_eq_interior_preimage (hf₁ : IsOpenMap f) (hf₂ : Continuous f)
     (s : Set β) : f ⁻¹' interior s = interior (f ⁻¹' s) :=
   Subset.antisymm (preimage_interior_subset_interior_preimage hf₂)
     (interior_preimage_subset_preimage_interior hf₁)
 #align is_open_map.preimage_interior_eq_interior_preimage IsOpenMap.preimage_interior_eq_interior_preimage
+-/
 
+#print IsOpenMap.preimage_closure_subset_closure_preimage /-
 theorem preimage_closure_subset_closure_preimage (hf : IsOpenMap f) {s : Set β} :
     f ⁻¹' closure s ⊆ closure (f ⁻¹' s) :=
   by
   rw [← compl_subset_compl]
   simp only [← interior_compl, ← preimage_compl, hf.interior_preimage_subset_preimage_interior]
 #align is_open_map.preimage_closure_subset_closure_preimage IsOpenMap.preimage_closure_subset_closure_preimage
+-/
 
+#print IsOpenMap.preimage_closure_eq_closure_preimage /-
 theorem preimage_closure_eq_closure_preimage (hf : IsOpenMap f) (hfc : Continuous f) (s : Set β) :
     f ⁻¹' closure s = closure (f ⁻¹' s) :=
   hf.preimage_closure_subset_closure_preimage.antisymm (hfc.closure_preimage_subset s)
 #align is_open_map.preimage_closure_eq_closure_preimage IsOpenMap.preimage_closure_eq_closure_preimage
+-/
 
+#print IsOpenMap.preimage_frontier_subset_frontier_preimage /-
 theorem preimage_frontier_subset_frontier_preimage (hf : IsOpenMap f) {s : Set β} :
     f ⁻¹' frontier s ⊆ frontier (f ⁻¹' s) := by
   simpa only [frontier_eq_closure_inter_closure, preimage_inter] using
     inter_subset_inter hf.preimage_closure_subset_closure_preimage
       hf.preimage_closure_subset_closure_preimage
 #align is_open_map.preimage_frontier_subset_frontier_preimage IsOpenMap.preimage_frontier_subset_frontier_preimage
+-/
 
+#print IsOpenMap.preimage_frontier_eq_frontier_preimage /-
 theorem preimage_frontier_eq_frontier_preimage (hf : IsOpenMap f) (hfc : Continuous f) (s : Set β) :
     f ⁻¹' frontier s = frontier (f ⁻¹' s) := by
   simp only [frontier_eq_closure_inter_closure, preimage_inter, preimage_compl,
     hf.preimage_closure_eq_closure_preimage hfc]
 #align is_open_map.preimage_frontier_eq_frontier_preimage IsOpenMap.preimage_frontier_eq_frontier_preimage
+-/
 
 end IsOpenMap
 
+#print isOpenMap_iff_nhds_le /-
 theorem isOpenMap_iff_nhds_le [TopologicalSpace α] [TopologicalSpace β] {f : α → β} :
     IsOpenMap f ↔ ∀ a : α, 𝓝 (f a) ≤ (𝓝 a).map f :=
   ⟨fun hf => hf.nhds_le, IsOpenMap.of_nhds_le⟩
 #align is_open_map_iff_nhds_le isOpenMap_iff_nhds_le
+-/
 
+#print isOpenMap_iff_interior /-
 theorem isOpenMap_iff_interior [TopologicalSpace α] [TopologicalSpace β] {f : α → β} :
     IsOpenMap f ↔ ∀ s, f '' interior s ⊆ interior (f '' s) :=
   ⟨IsOpenMap.image_interior_subset, fun hs u hu =>
@@ -466,12 +581,15 @@ theorem isOpenMap_iff_interior [TopologicalSpace α] [TopologicalSpace β] {f :
         f '' u = f '' interior u := by rw [hu.interior_eq]
         _ ⊆ interior (f '' u) := hs u⟩
 #align is_open_map_iff_interior isOpenMap_iff_interior
+-/
 
+#print Inducing.isOpenMap /-
 /-- An inducing map with an open range is an open map. -/
 protected theorem Inducing.isOpenMap [TopologicalSpace α] [TopologicalSpace β] {f : α → β}
     (hi : Inducing f) (ho : IsOpen (range f)) : IsOpenMap f :=
   IsOpenMap.of_nhds_le fun x => (hi.map_nhds_of_mem _ <| IsOpen.mem_nhds ho <| mem_range_self _).ge
 #align inducing.is_open_map Inducing.isOpenMap
+-/
 
 section IsClosedMap
 
@@ -498,14 +616,18 @@ protected theorem id : IsClosedMap (@id α) := fun s hs => by rwa [image_id]
 #align is_closed_map.id IsClosedMap.id
 -/
 
+#print IsClosedMap.comp /-
 protected theorem comp {g : β → γ} {f : α → β} (hg : IsClosedMap g) (hf : IsClosedMap f) :
     IsClosedMap (g ∘ f) := by intro s hs; rw [image_comp]; exact hg _ (hf _ hs)
 #align is_closed_map.comp IsClosedMap.comp
+-/
 
+#print IsClosedMap.closure_image_subset /-
 theorem closure_image_subset {f : α → β} (hf : IsClosedMap f) (s : Set α) :
     closure (f '' s) ⊆ f '' closure s :=
   closure_minimal (image_subset _ subset_closure) (hf _ isClosed_closure)
 #align is_closed_map.closure_image_subset IsClosedMap.closure_image_subset
+-/
 
 #print IsClosedMap.of_inverse /-
 theorem of_inverse {f : α → β} {f' : β → α} (h : Continuous f') (l_inv : LeftInverse f f')
@@ -515,25 +637,32 @@ theorem of_inverse {f : α → β} {f' : β → α} (h : Continuous f') (l_inv :
 #align is_closed_map.of_inverse IsClosedMap.of_inverse
 -/
 
+#print IsClosedMap.of_nonempty /-
 theorem of_nonempty {f : α → β} (h : ∀ s, IsClosed s → s.Nonempty → IsClosed (f '' s)) :
     IsClosedMap f := by
   intro s hs; cases' eq_empty_or_nonempty s with h2s h2s
   · simp_rw [h2s, image_empty, isClosed_empty]
   · exact h s hs h2s
 #align is_closed_map.of_nonempty IsClosedMap.of_nonempty
+-/
 
+#print IsClosedMap.closed_range /-
 theorem closed_range {f : α → β} (hf : IsClosedMap f) : IsClosed (range f) :=
   @image_univ _ _ f ▸ hf _ isClosed_univ
 #align is_closed_map.closed_range IsClosedMap.closed_range
+-/
 
+#print IsClosedMap.to_quotientMap /-
 theorem to_quotientMap {f : α → β} (hcl : IsClosedMap f) (hcont : Continuous f)
     (hsurj : Surjective f) : QuotientMap f :=
   quotientMap_iff_closed.2
     ⟨hsurj, fun s => ⟨fun hs => hs.Preimage hcont, fun hs => hsurj.image_preimage s ▸ hcl _ hs⟩⟩
 #align is_closed_map.to_quotient_map IsClosedMap.to_quotientMap
+-/
 
 end IsClosedMap
 
+#print Inducing.isClosedMap /-
 theorem Inducing.isClosedMap [TopologicalSpace α] [TopologicalSpace β] {f : α → β} (hf : Inducing f)
     (h : IsClosed (range f)) : IsClosedMap f :=
   by
@@ -542,7 +671,9 @@ theorem Inducing.isClosedMap [TopologicalSpace α] [TopologicalSpace β] {f : α
   rw [image_preimage_eq_inter_range]
   exact ht.inter h
 #align inducing.is_closed_map Inducing.isClosedMap
+-/
 
+#print isClosedMap_iff_closure_image /-
 theorem isClosedMap_iff_closure_image [TopologicalSpace α] [TopologicalSpace β] {f : α → β} :
     IsClosedMap f ↔ ∀ s, closure (f '' s) ⊆ f '' closure s :=
   ⟨IsClosedMap.closure_image_subset, fun hs c hc =>
@@ -551,6 +682,7 @@ theorem isClosedMap_iff_closure_image [TopologicalSpace α] [TopologicalSpace β
         closure (f '' c) ⊆ f '' closure c := hs c
         _ = f '' c := by rw [hc.closure_eq]⟩
 #align is_closed_map_iff_closure_image isClosedMap_iff_closure_image
+-/
 
 section OpenEmbedding
 
@@ -564,15 +696,20 @@ structure OpenEmbedding (f : α → β) extends Embedding f : Prop where
 #align open_embedding OpenEmbedding
 -/
 
+#print OpenEmbedding.isOpenMap /-
 theorem OpenEmbedding.isOpenMap {f : α → β} (hf : OpenEmbedding f) : IsOpenMap f :=
   hf.toEmbedding.to_inducing.IsOpenMap hf.open_range
 #align open_embedding.is_open_map OpenEmbedding.isOpenMap
+-/
 
+#print OpenEmbedding.map_nhds_eq /-
 theorem OpenEmbedding.map_nhds_eq {f : α → β} (hf : OpenEmbedding f) (a : α) :
     map f (𝓝 a) = 𝓝 (f a) :=
   hf.toEmbedding.map_nhds_of_mem _ <| hf.open_range.mem_nhds <| mem_range_self _
 #align open_embedding.map_nhds_eq OpenEmbedding.map_nhds_eq
+-/
 
+#print OpenEmbedding.open_iff_image_open /-
 theorem OpenEmbedding.open_iff_image_open {f : α → β} (hf : OpenEmbedding f) {s : Set α} :
     IsOpen s ↔ IsOpen (f '' s) :=
   ⟨hf.IsOpenMap s, fun h =>
@@ -580,33 +717,45 @@ theorem OpenEmbedding.open_iff_image_open {f : α → β} (hf : OpenEmbedding f)
     convert ← h.preimage hf.to_embedding.continuous
     apply preimage_image_eq _ hf.inj⟩
 #align open_embedding.open_iff_image_open OpenEmbedding.open_iff_image_open
+-/
 
+#print OpenEmbedding.tendsto_nhds_iff /-
 theorem OpenEmbedding.tendsto_nhds_iff {ι : Type _} {f : ι → β} {g : β → γ} {a : Filter ι} {b : β}
     (hg : OpenEmbedding g) : Tendsto f a (𝓝 b) ↔ Tendsto (g ∘ f) a (𝓝 (g b)) :=
   hg.toEmbedding.tendsto_nhds_iff
 #align open_embedding.tendsto_nhds_iff OpenEmbedding.tendsto_nhds_iff
+-/
 
+#print OpenEmbedding.continuous /-
 theorem OpenEmbedding.continuous {f : α → β} (hf : OpenEmbedding f) : Continuous f :=
   hf.toEmbedding.Continuous
 #align open_embedding.continuous OpenEmbedding.continuous
+-/
 
+#print OpenEmbedding.open_iff_preimage_open /-
 theorem OpenEmbedding.open_iff_preimage_open {f : α → β} (hf : OpenEmbedding f) {s : Set β}
     (hs : s ⊆ range f) : IsOpen s ↔ IsOpen (f ⁻¹' s) :=
   by
   convert ← hf.open_iff_image_open.symm
   rwa [image_preimage_eq_inter_range, inter_eq_self_of_subset_left]
 #align open_embedding.open_iff_preimage_open OpenEmbedding.open_iff_preimage_open
+-/
 
+#print openEmbedding_of_embedding_open /-
 theorem openEmbedding_of_embedding_open {f : α → β} (h₁ : Embedding f) (h₂ : IsOpenMap f) :
     OpenEmbedding f :=
   ⟨h₁, h₂.isOpen_range⟩
 #align open_embedding_of_embedding_open openEmbedding_of_embedding_open
+-/
 
+#print openEmbedding_iff_embedding_open /-
 theorem openEmbedding_iff_embedding_open {f : α → β} :
     OpenEmbedding f ↔ Embedding f ∧ IsOpenMap f :=
   ⟨fun h => ⟨h.1, h.IsOpenMap⟩, fun h => openEmbedding_of_embedding_open h.1 h.2⟩
 #align open_embedding_iff_embedding_open openEmbedding_iff_embedding_open
+-/
 
+#print openEmbedding_of_continuous_injective_open /-
 theorem openEmbedding_of_continuous_injective_open {f : α → β} (h₁ : Continuous f)
     (h₂ : Injective f) (h₃ : IsOpenMap f) : OpenEmbedding f :=
   by
@@ -614,12 +763,15 @@ theorem openEmbedding_of_continuous_injective_open {f : α → β} (h₁ : Conti
   exact fun a =>
     le_antisymm (h₁.tendsto _).le_comap (@comap_map _ _ (𝓝 a) _ h₂ ▸ comap_mono (h₃.nhds_le _))
 #align open_embedding_of_continuous_injective_open openEmbedding_of_continuous_injective_open
+-/
 
+#print openEmbedding_iff_continuous_injective_open /-
 theorem openEmbedding_iff_continuous_injective_open {f : α → β} :
     OpenEmbedding f ↔ Continuous f ∧ Injective f ∧ IsOpenMap f :=
   ⟨fun h => ⟨h.Continuous, h.inj, h.IsOpenMap⟩, fun h =>
     openEmbedding_of_continuous_injective_open h.1 h.2.1 h.2.2⟩
 #align open_embedding_iff_continuous_injective_open openEmbedding_iff_continuous_injective_open
+-/
 
 #print openEmbedding_id /-
 theorem openEmbedding_id : OpenEmbedding (@id α) :=
@@ -627,26 +779,34 @@ theorem openEmbedding_id : OpenEmbedding (@id α) :=
 #align open_embedding_id openEmbedding_id
 -/
 
+#print OpenEmbedding.comp /-
 theorem OpenEmbedding.comp {g : β → γ} {f : α → β} (hg : OpenEmbedding g) (hf : OpenEmbedding f) :
     OpenEmbedding (g ∘ f) :=
   ⟨hg.1.comp hf.1, (hg.IsOpenMap.comp hf.IsOpenMap).isOpen_range⟩
 #align open_embedding.comp OpenEmbedding.comp
+-/
 
+#print OpenEmbedding.isOpenMap_iff /-
 theorem OpenEmbedding.isOpenMap_iff {g : β → γ} {f : α → β} (hg : OpenEmbedding g) :
     IsOpenMap f ↔ IsOpenMap (g ∘ f) := by
   simp only [isOpenMap_iff_nhds_le, ← @map_map _ _ _ _ f g, ← hg.map_nhds_eq, map_le_map_iff hg.inj]
 #align open_embedding.is_open_map_iff OpenEmbedding.isOpenMap_iff
+-/
 
+#print OpenEmbedding.of_comp_iff /-
 theorem OpenEmbedding.of_comp_iff (f : α → β) {g : β → γ} (hg : OpenEmbedding g) :
     OpenEmbedding (g ∘ f) ↔ OpenEmbedding f := by
   simp only [openEmbedding_iff_continuous_injective_open, ← hg.is_open_map_iff, ←
     hg.1.continuous_iff, hg.inj.of_comp_iff]
 #align open_embedding.of_comp_iff OpenEmbedding.of_comp_iff
+-/
 
+#print OpenEmbedding.of_comp /-
 theorem OpenEmbedding.of_comp (f : α → β) {g : β → γ} (hg : OpenEmbedding g)
     (h : OpenEmbedding (g ∘ f)) : OpenEmbedding f :=
   (OpenEmbedding.of_comp_iff f hg).1 h
 #align open_embedding.of_comp OpenEmbedding.of_comp
+-/
 
 end OpenEmbedding
 
@@ -664,19 +824,26 @@ structure ClosedEmbedding (f : α → β) extends Embedding f : Prop where
 
 variable {f : α → β}
 
+#print ClosedEmbedding.tendsto_nhds_iff /-
 theorem ClosedEmbedding.tendsto_nhds_iff {ι : Type _} {g : ι → α} {a : Filter ι} {b : α}
     (hf : ClosedEmbedding f) : Tendsto g a (𝓝 b) ↔ Tendsto (f ∘ g) a (𝓝 (f b)) :=
   hf.toEmbedding.tendsto_nhds_iff
 #align closed_embedding.tendsto_nhds_iff ClosedEmbedding.tendsto_nhds_iff
+-/
 
+#print ClosedEmbedding.continuous /-
 theorem ClosedEmbedding.continuous (hf : ClosedEmbedding f) : Continuous f :=
   hf.toEmbedding.Continuous
 #align closed_embedding.continuous ClosedEmbedding.continuous
+-/
 
+#print ClosedEmbedding.isClosedMap /-
 theorem ClosedEmbedding.isClosedMap (hf : ClosedEmbedding f) : IsClosedMap f :=
   hf.toEmbedding.to_inducing.IsClosedMap hf.closed_range
 #align closed_embedding.is_closed_map ClosedEmbedding.isClosedMap
+-/
 
+#print ClosedEmbedding.closed_iff_image_closed /-
 theorem ClosedEmbedding.closed_iff_image_closed (hf : ClosedEmbedding f) {s : Set α} :
     IsClosed s ↔ IsClosed (f '' s) :=
   ⟨hf.IsClosedMap s, fun h =>
@@ -684,19 +851,25 @@ theorem ClosedEmbedding.closed_iff_image_closed (hf : ClosedEmbedding f) {s : Se
     convert ← continuous_iff_is_closed.mp hf.continuous _ h
     apply preimage_image_eq _ hf.inj⟩
 #align closed_embedding.closed_iff_image_closed ClosedEmbedding.closed_iff_image_closed
+-/
 
+#print ClosedEmbedding.closed_iff_preimage_closed /-
 theorem ClosedEmbedding.closed_iff_preimage_closed (hf : ClosedEmbedding f) {s : Set β}
     (hs : s ⊆ range f) : IsClosed s ↔ IsClosed (f ⁻¹' s) :=
   by
   convert ← hf.closed_iff_image_closed.symm
   rwa [image_preimage_eq_inter_range, inter_eq_self_of_subset_left]
 #align closed_embedding.closed_iff_preimage_closed ClosedEmbedding.closed_iff_preimage_closed
+-/
 
+#print closedEmbedding_of_embedding_closed /-
 theorem closedEmbedding_of_embedding_closed (h₁ : Embedding f) (h₂ : IsClosedMap f) :
     ClosedEmbedding f :=
   ⟨h₁, by convert h₂ univ isClosed_univ <;> simp⟩
 #align closed_embedding_of_embedding_closed closedEmbedding_of_embedding_closed
+-/
 
+#print closedEmbedding_of_continuous_injective_closed /-
 theorem closedEmbedding_of_continuous_injective_closed (h₁ : Continuous f) (h₂ : Injective f)
     (h₃ : IsClosedMap f) : ClosedEmbedding f :=
   by
@@ -710,6 +883,7 @@ theorem closedEmbedding_of_continuous_injective_closed (h₁ : Continuous f) (h
   refine' fun hs => ⟨f '' s, h₃ s hs, _⟩
   rw [preimage_image_eq _ h₂]
 #align closed_embedding_of_continuous_injective_closed closedEmbedding_of_continuous_injective_closed
+-/
 
 #print closedEmbedding_id /-
 theorem closedEmbedding_id : ClosedEmbedding (@id α) :=
@@ -717,18 +891,22 @@ theorem closedEmbedding_id : ClosedEmbedding (@id α) :=
 #align closed_embedding_id closedEmbedding_id
 -/
 
+#print ClosedEmbedding.comp /-
 theorem ClosedEmbedding.comp {g : β → γ} {f : α → β} (hg : ClosedEmbedding g)
     (hf : ClosedEmbedding f) : ClosedEmbedding (g ∘ f) :=
   ⟨hg.toEmbedding.comp hf.toEmbedding,
     show IsClosed (range (g ∘ f)) by
       rw [range_comp, ← hg.closed_iff_image_closed] <;> exact hf.closed_range⟩
 #align closed_embedding.comp ClosedEmbedding.comp
+-/
 
+#print ClosedEmbedding.closure_image_eq /-
 theorem ClosedEmbedding.closure_image_eq {f : α → β} (hf : ClosedEmbedding f) (s : Set α) :
     closure (f '' s) = f '' closure s :=
   (hf.IsClosedMap.closure_image_subset _).antisymm
     (image_closure_subset_closure_image hf.Continuous)
 #align closed_embedding.closure_image_eq ClosedEmbedding.closure_image_eq
+-/
 
 end ClosedEmbedding
 
Diff
@@ -399,7 +399,6 @@ theorem of_sections {f : α → β}
       𝓝 (f x) = map f (map g (𝓝 (f x))) := by rw [map_map, hgf.comp_eq_id, map_id]
       _ ≤ map f (𝓝 (g (f x))) := (map_mono hgc)
       _ = map f (𝓝 x) := by rw [hgx]
-      
 #align is_open_map.of_sections IsOpenMap.of_sections
 
 #print IsOpenMap.of_inverse /-
@@ -465,8 +464,7 @@ theorem isOpenMap_iff_interior [TopologicalSpace α] [TopologicalSpace β] {f :
     subset_interior_iff_isOpen.mp <|
       calc
         f '' u = f '' interior u := by rw [hu.interior_eq]
-        _ ⊆ interior (f '' u) := hs u
-        ⟩
+        _ ⊆ interior (f '' u) := hs u⟩
 #align is_open_map_iff_interior isOpenMap_iff_interior
 
 /-- An inducing map with an open range is an open map. -/
@@ -551,8 +549,7 @@ theorem isClosedMap_iff_closure_image [TopologicalSpace α] [TopologicalSpace β
     isClosed_of_closure_subset <|
       calc
         closure (f '' c) ⊆ f '' closure c := hs c
-        _ = f '' c := by rw [hc.closure_eq]
-        ⟩
+        _ = f '' c := by rw [hc.closure_eq]⟩
 #align is_closed_map_iff_closure_image isClosedMap_iff_closure_image
 
 section OpenEmbedding
Diff
@@ -580,7 +580,7 @@ theorem OpenEmbedding.open_iff_image_open {f : α → β} (hf : OpenEmbedding f)
     IsOpen s ↔ IsOpen (f '' s) :=
   ⟨hf.IsOpenMap s, fun h =>
     by
-    convert← h.preimage hf.to_embedding.continuous
+    convert ← h.preimage hf.to_embedding.continuous
     apply preimage_image_eq _ hf.inj⟩
 #align open_embedding.open_iff_image_open OpenEmbedding.open_iff_image_open
 
@@ -596,7 +596,7 @@ theorem OpenEmbedding.continuous {f : α → β} (hf : OpenEmbedding f) : Contin
 theorem OpenEmbedding.open_iff_preimage_open {f : α → β} (hf : OpenEmbedding f) {s : Set β}
     (hs : s ⊆ range f) : IsOpen s ↔ IsOpen (f ⁻¹' s) :=
   by
-  convert← hf.open_iff_image_open.symm
+  convert ← hf.open_iff_image_open.symm
   rwa [image_preimage_eq_inter_range, inter_eq_self_of_subset_left]
 #align open_embedding.open_iff_preimage_open OpenEmbedding.open_iff_preimage_open
 
@@ -684,14 +684,14 @@ theorem ClosedEmbedding.closed_iff_image_closed (hf : ClosedEmbedding f) {s : Se
     IsClosed s ↔ IsClosed (f '' s) :=
   ⟨hf.IsClosedMap s, fun h =>
     by
-    convert← continuous_iff_is_closed.mp hf.continuous _ h
+    convert ← continuous_iff_is_closed.mp hf.continuous _ h
     apply preimage_image_eq _ hf.inj⟩
 #align closed_embedding.closed_iff_image_closed ClosedEmbedding.closed_iff_image_closed
 
 theorem ClosedEmbedding.closed_iff_preimage_closed (hf : ClosedEmbedding f) {s : Set β}
     (hs : s ⊆ range f) : IsClosed s ↔ IsClosed (f ⁻¹' s) :=
   by
-  convert← hf.closed_iff_image_closed.symm
+  convert ← hf.closed_iff_image_closed.symm
   rwa [image_preimage_eq_inter_range, inter_eq_self_of_subset_left]
 #align closed_embedding.closed_iff_preimage_closed ClosedEmbedding.closed_iff_preimage_closed
 
Diff
@@ -183,7 +183,7 @@ section Embedding
   and for all `s : set α`, `s` is open iff it is the preimage of an open set. -/
 @[mk_iff]
 structure Embedding [tα : TopologicalSpace α] [tβ : TopologicalSpace β] (f : α → β) extends
-  Inducing f : Prop where
+    Inducing f : Prop where
   inj : Injective f
 #align embedding Embedding
 -/
Diff
@@ -53,7 +53,7 @@ open map, closed map, embedding, quotient map, identification map
 
 open Set Filter Function
 
-open Topology Filter
+open scoped Topology Filter
 
 variable {α : Type _} {β : Type _} {γ : Type _} {δ : Type _}
 
Diff
@@ -77,152 +77,68 @@ theorem inducing_id : Inducing (@id α) :=
 #align inducing_id inducing_id
 -/
 
-/- warning: inducing.comp -> Inducing.comp is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] {g : β -> γ} {f : α -> β}, (Inducing.{u2, u3} β γ _inst_2 _inst_3 g) -> (Inducing.{u1, u2} α β _inst_1 _inst_2 f) -> (Inducing.{u1, u3} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u2, succ u3} α β γ g f))
-but is expected to have type
-  forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u2} γ] {g : β -> γ} {f : α -> β}, (Inducing.{u3, u2} β γ _inst_2 _inst_3 g) -> (Inducing.{u1, u3} α β _inst_1 _inst_2 f) -> (Inducing.{u1, u2} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u3, succ u2} α β γ g f))
-Case conversion may be inaccurate. Consider using '#align inducing.comp Inducing.compₓ'. -/
 protected theorem Inducing.comp {g : β → γ} {f : α → β} (hg : Inducing g) (hf : Inducing f) :
     Inducing (g ∘ f) :=
   ⟨by rw [hf.induced, hg.induced, induced_compose]⟩
 #align inducing.comp Inducing.comp
 
-/- warning: inducing_of_inducing_compose -> inducing_of_inducing_compose is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] {f : α -> β} {g : β -> γ}, (Continuous.{u1, u2} α β _inst_1 _inst_2 f) -> (Continuous.{u2, u3} β γ _inst_2 _inst_3 g) -> (Inducing.{u1, u3} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u2, succ u3} α β γ g f)) -> (Inducing.{u1, u2} α β _inst_1 _inst_2 f)
-but is expected to have type
-  forall {α : Type.{u3}} {β : Type.{u2}} {γ : Type.{u1}} [_inst_1 : TopologicalSpace.{u3} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u1} γ] {f : α -> β} {g : β -> γ}, (Continuous.{u3, u2} α β _inst_1 _inst_2 f) -> (Continuous.{u2, u1} β γ _inst_2 _inst_3 g) -> (Inducing.{u3, u1} α γ _inst_1 _inst_3 (Function.comp.{succ u3, succ u2, succ u1} α β γ g f)) -> (Inducing.{u3, u2} α β _inst_1 _inst_2 f)
-Case conversion may be inaccurate. Consider using '#align inducing_of_inducing_compose inducing_of_inducing_composeₓ'. -/
 theorem inducing_of_inducing_compose {f : α → β} {g : β → γ} (hf : Continuous f) (hg : Continuous g)
     (hgf : Inducing (g ∘ f)) : Inducing f :=
   ⟨le_antisymm (by rwa [← continuous_iff_le_induced])
       (by rw [hgf.induced, ← continuous_iff_le_induced]; apply hg.comp continuous_induced_dom)⟩
 #align inducing_of_inducing_compose inducing_of_inducing_compose
 
-/- warning: inducing_iff_nhds -> inducing_iff_nhds is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, Iff (Inducing.{u1, u2} α β _inst_1 _inst_2 f) (forall (a : α), Eq.{succ u1} (Filter.{u1} α) (nhds.{u1} α _inst_1 a) (Filter.comap.{u1, u2} α β f (nhds.{u2} β _inst_2 (f a))))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, Iff (Inducing.{u2, u1} α β _inst_1 _inst_2 f) (forall (a : α), Eq.{succ u2} (Filter.{u2} α) (nhds.{u2} α _inst_1 a) (Filter.comap.{u2, u1} α β f (nhds.{u1} β _inst_2 (f a))))
-Case conversion may be inaccurate. Consider using '#align inducing_iff_nhds inducing_iff_nhdsₓ'. -/
 theorem inducing_iff_nhds {f : α → β} : Inducing f ↔ ∀ a, 𝓝 a = comap f (𝓝 (f a)) :=
   (inducing_iff _).trans (induced_iff_nhds_eq f)
 #align inducing_iff_nhds inducing_iff_nhds
 
-/- warning: inducing.nhds_eq_comap -> Inducing.nhds_eq_comap is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (Inducing.{u1, u2} α β _inst_1 _inst_2 f) -> (forall (a : α), Eq.{succ u1} (Filter.{u1} α) (nhds.{u1} α _inst_1 a) (Filter.comap.{u1, u2} α β f (nhds.{u2} β _inst_2 (f a))))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (Inducing.{u2, u1} α β _inst_1 _inst_2 f) -> (forall (a : α), Eq.{succ u2} (Filter.{u2} α) (nhds.{u2} α _inst_1 a) (Filter.comap.{u2, u1} α β f (nhds.{u1} β _inst_2 (f a))))
-Case conversion may be inaccurate. Consider using '#align inducing.nhds_eq_comap Inducing.nhds_eq_comapₓ'. -/
 theorem Inducing.nhds_eq_comap {f : α → β} (hf : Inducing f) : ∀ a : α, 𝓝 a = comap f (𝓝 <| f a) :=
   inducing_iff_nhds.1 hf
 #align inducing.nhds_eq_comap Inducing.nhds_eq_comap
 
-/- warning: inducing.nhds_set_eq_comap -> Inducing.nhdsSet_eq_comap is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (Inducing.{u1, u2} α β _inst_1 _inst_2 f) -> (forall (s : Set.{u1} α), Eq.{succ u1} (Filter.{u1} α) (nhdsSet.{u1} α _inst_1 s) (Filter.comap.{u1, u2} α β f (nhdsSet.{u2} β _inst_2 (Set.image.{u1, u2} α β f s))))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (Inducing.{u2, u1} α β _inst_1 _inst_2 f) -> (forall (s : Set.{u2} α), Eq.{succ u2} (Filter.{u2} α) (nhdsSet.{u2} α _inst_1 s) (Filter.comap.{u2, u1} α β f (nhdsSet.{u1} β _inst_2 (Set.image.{u2, u1} α β f s))))
-Case conversion may be inaccurate. Consider using '#align inducing.nhds_set_eq_comap Inducing.nhdsSet_eq_comapₓ'. -/
 theorem Inducing.nhdsSet_eq_comap {f : α → β} (hf : Inducing f) (s : Set α) :
     𝓝ˢ s = comap f (𝓝ˢ (f '' s)) := by
   simp only [nhdsSet, sSup_image, comap_supr, hf.nhds_eq_comap, iSup_image]
 #align inducing.nhds_set_eq_comap Inducing.nhdsSet_eq_comap
 
-/- warning: inducing.map_nhds_eq -> Inducing.map_nhds_eq is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (Inducing.{u1, u2} α β _inst_1 _inst_2 f) -> (forall (a : α), Eq.{succ u2} (Filter.{u2} β) (Filter.map.{u1, u2} α β f (nhds.{u1} α _inst_1 a)) (nhdsWithin.{u2} β _inst_2 (f a) (Set.range.{u2, succ u1} β α f)))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (Inducing.{u2, u1} α β _inst_1 _inst_2 f) -> (forall (a : α), Eq.{succ u1} (Filter.{u1} β) (Filter.map.{u2, u1} α β f (nhds.{u2} α _inst_1 a)) (nhdsWithin.{u1} β _inst_2 (f a) (Set.range.{u1, succ u2} β α f)))
-Case conversion may be inaccurate. Consider using '#align inducing.map_nhds_eq Inducing.map_nhds_eqₓ'. -/
 theorem Inducing.map_nhds_eq {f : α → β} (hf : Inducing f) (a : α) : (𝓝 a).map f = 𝓝[range f] f a :=
   hf.induced.symm ▸ map_nhds_induced_eq a
 #align inducing.map_nhds_eq Inducing.map_nhds_eq
 
-/- warning: inducing.map_nhds_of_mem -> Inducing.map_nhds_of_mem is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (Inducing.{u1, u2} α β _inst_1 _inst_2 f) -> (forall (a : α), (Membership.Mem.{u2, u2} (Set.{u2} β) (Filter.{u2} β) (Filter.hasMem.{u2} β) (Set.range.{u2, succ u1} β α f) (nhds.{u2} β _inst_2 (f a))) -> (Eq.{succ u2} (Filter.{u2} β) (Filter.map.{u1, u2} α β f (nhds.{u1} α _inst_1 a)) (nhds.{u2} β _inst_2 (f a))))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (Inducing.{u2, u1} α β _inst_1 _inst_2 f) -> (forall (a : α), (Membership.mem.{u1, u1} (Set.{u1} β) (Filter.{u1} β) (instMembershipSetFilter.{u1} β) (Set.range.{u1, succ u2} β α f) (nhds.{u1} β _inst_2 (f a))) -> (Eq.{succ u1} (Filter.{u1} β) (Filter.map.{u2, u1} α β f (nhds.{u2} α _inst_1 a)) (nhds.{u1} β _inst_2 (f a))))
-Case conversion may be inaccurate. Consider using '#align inducing.map_nhds_of_mem Inducing.map_nhds_of_memₓ'. -/
 theorem Inducing.map_nhds_of_mem {f : α → β} (hf : Inducing f) (a : α) (h : range f ∈ 𝓝 (f a)) :
     (𝓝 a).map f = 𝓝 (f a) :=
   hf.induced.symm ▸ map_nhds_induced_of_mem h
 #align inducing.map_nhds_of_mem Inducing.map_nhds_of_mem
 
-/- warning: inducing.image_mem_nhds_within -> Inducing.image_mem_nhdsWithin is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (Inducing.{u1, u2} α β _inst_1 _inst_2 f) -> (forall {a : α} {s : Set.{u1} α}, (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) s (nhds.{u1} α _inst_1 a)) -> (Membership.Mem.{u2, u2} (Set.{u2} β) (Filter.{u2} β) (Filter.hasMem.{u2} β) (Set.image.{u1, u2} α β f s) (nhdsWithin.{u2} β _inst_2 (f a) (Set.range.{u2, succ u1} β α f))))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (Inducing.{u2, u1} α β _inst_1 _inst_2 f) -> (forall {a : α} {s : Set.{u2} α}, (Membership.mem.{u2, u2} (Set.{u2} α) (Filter.{u2} α) (instMembershipSetFilter.{u2} α) s (nhds.{u2} α _inst_1 a)) -> (Membership.mem.{u1, u1} (Set.{u1} β) (Filter.{u1} β) (instMembershipSetFilter.{u1} β) (Set.image.{u2, u1} α β f s) (nhdsWithin.{u1} β _inst_2 (f a) (Set.range.{u1, succ u2} β α f))))
-Case conversion may be inaccurate. Consider using '#align inducing.image_mem_nhds_within Inducing.image_mem_nhdsWithinₓ'. -/
 theorem Inducing.image_mem_nhdsWithin {f : α → β} (hf : Inducing f) {a : α} {s : Set α}
     (hs : s ∈ 𝓝 a) : f '' s ∈ 𝓝[range f] f a :=
   hf.map_nhds_eq a ▸ image_mem_map hs
 #align inducing.image_mem_nhds_within Inducing.image_mem_nhdsWithin
 
-/- warning: inducing.tendsto_nhds_iff -> Inducing.tendsto_nhds_iff is a dubious translation:
-lean 3 declaration is
-  forall {β : Type.{u1}} {γ : Type.{u2}} [_inst_2 : TopologicalSpace.{u1} β] [_inst_3 : TopologicalSpace.{u2} γ] {ι : Type.{u3}} {f : ι -> β} {g : β -> γ} {a : Filter.{u3} ι} {b : β}, (Inducing.{u1, u2} β γ _inst_2 _inst_3 g) -> (Iff (Filter.Tendsto.{u3, u1} ι β f a (nhds.{u1} β _inst_2 b)) (Filter.Tendsto.{u3, u2} ι γ (Function.comp.{succ u3, succ u1, succ u2} ι β γ g f) a (nhds.{u2} γ _inst_3 (g b))))
-but is expected to have type
-  forall {β : Type.{u2}} {γ : Type.{u1}} [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u1} γ] {ι : Type.{u3}} {f : ι -> β} {g : β -> γ} {a : Filter.{u3} ι} {b : β}, (Inducing.{u2, u1} β γ _inst_2 _inst_3 g) -> (Iff (Filter.Tendsto.{u3, u2} ι β f a (nhds.{u2} β _inst_2 b)) (Filter.Tendsto.{u3, u1} ι γ (Function.comp.{succ u3, succ u2, succ u1} ι β γ g f) a (nhds.{u1} γ _inst_3 (g b))))
-Case conversion may be inaccurate. Consider using '#align inducing.tendsto_nhds_iff Inducing.tendsto_nhds_iffₓ'. -/
 theorem Inducing.tendsto_nhds_iff {ι : Type _} {f : ι → β} {g : β → γ} {a : Filter ι} {b : β}
     (hg : Inducing g) : Tendsto f a (𝓝 b) ↔ Tendsto (g ∘ f) a (𝓝 (g b)) := by
   rw [hg.nhds_eq_comap, tendsto_comap_iff]
 #align inducing.tendsto_nhds_iff Inducing.tendsto_nhds_iff
 
-/- warning: inducing.continuous_at_iff -> Inducing.continuousAt_iff is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] {f : α -> β} {g : β -> γ}, (Inducing.{u2, u3} β γ _inst_2 _inst_3 g) -> (forall {x : α}, Iff (ContinuousAt.{u1, u2} α β _inst_1 _inst_2 f x) (ContinuousAt.{u1, u3} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u2, succ u3} α β γ g f) x))
-but is expected to have type
-  forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u2} γ] {f : α -> β} {g : β -> γ}, (Inducing.{u3, u2} β γ _inst_2 _inst_3 g) -> (forall {x : α}, Iff (ContinuousAt.{u1, u3} α β _inst_1 _inst_2 f x) (ContinuousAt.{u1, u2} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u3, succ u2} α β γ g f) x))
-Case conversion may be inaccurate. Consider using '#align inducing.continuous_at_iff Inducing.continuousAt_iffₓ'. -/
 theorem Inducing.continuousAt_iff {f : α → β} {g : β → γ} (hg : Inducing g) {x : α} :
     ContinuousAt f x ↔ ContinuousAt (g ∘ f) x := by
   simp_rw [ContinuousAt, Inducing.tendsto_nhds_iff hg]
 #align inducing.continuous_at_iff Inducing.continuousAt_iff
 
-/- warning: inducing.continuous_iff -> Inducing.continuous_iff is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] {f : α -> β} {g : β -> γ}, (Inducing.{u2, u3} β γ _inst_2 _inst_3 g) -> (Iff (Continuous.{u1, u2} α β _inst_1 _inst_2 f) (Continuous.{u1, u3} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u2, succ u3} α β γ g f)))
-but is expected to have type
-  forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u2} γ] {f : α -> β} {g : β -> γ}, (Inducing.{u3, u2} β γ _inst_2 _inst_3 g) -> (Iff (Continuous.{u1, u3} α β _inst_1 _inst_2 f) (Continuous.{u1, u2} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u3, succ u2} α β γ g f)))
-Case conversion may be inaccurate. Consider using '#align inducing.continuous_iff Inducing.continuous_iffₓ'. -/
 theorem Inducing.continuous_iff {f : α → β} {g : β → γ} (hg : Inducing g) :
     Continuous f ↔ Continuous (g ∘ f) := by
   simp_rw [continuous_iff_continuousAt, hg.continuous_at_iff]
 #align inducing.continuous_iff Inducing.continuous_iff
 
-/- warning: inducing.continuous_at_iff' -> Inducing.continuousAt_iff' is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] {f : α -> β} {g : β -> γ}, (Inducing.{u1, u2} α β _inst_1 _inst_2 f) -> (forall {x : α}, (Membership.Mem.{u2, u2} (Set.{u2} β) (Filter.{u2} β) (Filter.hasMem.{u2} β) (Set.range.{u2, succ u1} β α f) (nhds.{u2} β _inst_2 (f x))) -> (Iff (ContinuousAt.{u1, u3} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u2, succ u3} α β γ g f) x) (ContinuousAt.{u2, u3} β γ _inst_2 _inst_3 g (f x))))
-but is expected to have type
-  forall {α : Type.{u3}} {β : Type.{u2}} {γ : Type.{u1}} [_inst_1 : TopologicalSpace.{u3} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u1} γ] {f : α -> β} {g : β -> γ}, (Inducing.{u3, u2} α β _inst_1 _inst_2 f) -> (forall {x : α}, (Membership.mem.{u2, u2} (Set.{u2} β) (Filter.{u2} β) (instMembershipSetFilter.{u2} β) (Set.range.{u2, succ u3} β α f) (nhds.{u2} β _inst_2 (f x))) -> (Iff (ContinuousAt.{u3, u1} α γ _inst_1 _inst_3 (Function.comp.{succ u3, succ u2, succ u1} α β γ g f) x) (ContinuousAt.{u2, u1} β γ _inst_2 _inst_3 g (f x))))
-Case conversion may be inaccurate. Consider using '#align inducing.continuous_at_iff' Inducing.continuousAt_iff'ₓ'. -/
 theorem Inducing.continuousAt_iff' {f : α → β} {g : β → γ} (hf : Inducing f) {x : α}
     (h : range f ∈ 𝓝 (f x)) : ContinuousAt (g ∘ f) x ↔ ContinuousAt g (f x) := by
   simp_rw [ContinuousAt, Filter.Tendsto, ← hf.map_nhds_of_mem _ h, Filter.map_map]
 #align inducing.continuous_at_iff' Inducing.continuousAt_iff'
 
-/- warning: inducing.continuous -> Inducing.continuous is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (Inducing.{u1, u2} α β _inst_1 _inst_2 f) -> (Continuous.{u1, u2} α β _inst_1 _inst_2 f)
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (Inducing.{u2, u1} α β _inst_1 _inst_2 f) -> (Continuous.{u2, u1} α β _inst_1 _inst_2 f)
-Case conversion may be inaccurate. Consider using '#align inducing.continuous Inducing.continuousₓ'. -/
 protected theorem Inducing.continuous {f : α → β} (hf : Inducing f) : Continuous f :=
   hf.continuous_iff.mp continuous_id
 #align inducing.continuous Inducing.continuous
 
-/- warning: inducing.inducing_iff -> Inducing.inducing_iff is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] {f : α -> β} {g : β -> γ}, (Inducing.{u2, u3} β γ _inst_2 _inst_3 g) -> (Iff (Inducing.{u1, u2} α β _inst_1 _inst_2 f) (Inducing.{u1, u3} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u2, succ u3} α β γ g f)))
-but is expected to have type
-  forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u2} γ] {f : α -> β} {g : β -> γ}, (Inducing.{u3, u2} β γ _inst_2 _inst_3 g) -> (Iff (Inducing.{u1, u3} α β _inst_1 _inst_2 f) (Inducing.{u1, u2} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u3, succ u2} α β γ g f)))
-Case conversion may be inaccurate. Consider using '#align inducing.inducing_iff Inducing.inducing_iffₓ'. -/
 protected theorem Inducing.inducing_iff {f : α → β} {g : β → γ} (hg : Inducing g) :
     Inducing f ↔ Inducing (g ∘ f) :=
   by
@@ -231,64 +147,28 @@ protected theorem Inducing.inducing_iff {f : α → β} {g : β → γ} (hg : In
   exact hgf.continuous
 #align inducing.inducing_iff Inducing.inducing_iff
 
-/- warning: inducing.closure_eq_preimage_closure_image -> Inducing.closure_eq_preimage_closure_image is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (Inducing.{u1, u2} α β _inst_1 _inst_2 f) -> (forall (s : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (closure.{u1} α _inst_1 s) (Set.preimage.{u1, u2} α β f (closure.{u2} β _inst_2 (Set.image.{u1, u2} α β f s))))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (Inducing.{u2, u1} α β _inst_1 _inst_2 f) -> (forall (s : Set.{u2} α), Eq.{succ u2} (Set.{u2} α) (closure.{u2} α _inst_1 s) (Set.preimage.{u2, u1} α β f (closure.{u1} β _inst_2 (Set.image.{u2, u1} α β f s))))
-Case conversion may be inaccurate. Consider using '#align inducing.closure_eq_preimage_closure_image Inducing.closure_eq_preimage_closure_imageₓ'. -/
 theorem Inducing.closure_eq_preimage_closure_image {f : α → β} (hf : Inducing f) (s : Set α) :
     closure s = f ⁻¹' closure (f '' s) := by ext x;
   rw [Set.mem_preimage, ← closure_induced, hf.induced]
 #align inducing.closure_eq_preimage_closure_image Inducing.closure_eq_preimage_closure_image
 
-/- warning: inducing.is_closed_iff -> Inducing.isClosed_iff is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (Inducing.{u1, u2} α β _inst_1 _inst_2 f) -> (forall {s : Set.{u1} α}, Iff (IsClosed.{u1} α _inst_1 s) (Exists.{succ u2} (Set.{u2} β) (fun (t : Set.{u2} β) => And (IsClosed.{u2} β _inst_2 t) (Eq.{succ u1} (Set.{u1} α) (Set.preimage.{u1, u2} α β f t) s))))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (Inducing.{u2, u1} α β _inst_1 _inst_2 f) -> (forall {s : Set.{u2} α}, Iff (IsClosed.{u2} α _inst_1 s) (Exists.{succ u1} (Set.{u1} β) (fun (t : Set.{u1} β) => And (IsClosed.{u1} β _inst_2 t) (Eq.{succ u2} (Set.{u2} α) (Set.preimage.{u2, u1} α β f t) s))))
-Case conversion may be inaccurate. Consider using '#align inducing.is_closed_iff Inducing.isClosed_iffₓ'. -/
 theorem Inducing.isClosed_iff {f : α → β} (hf : Inducing f) {s : Set α} :
     IsClosed s ↔ ∃ t, IsClosed t ∧ f ⁻¹' t = s := by rw [hf.induced, isClosed_induced_iff]
 #align inducing.is_closed_iff Inducing.isClosed_iff
 
-/- warning: inducing.is_closed_iff' -> Inducing.isClosed_iff' is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (Inducing.{u1, u2} α β _inst_1 _inst_2 f) -> (forall {s : Set.{u1} α}, Iff (IsClosed.{u1} α _inst_1 s) (forall (x : α), (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) (f x) (closure.{u2} β _inst_2 (Set.image.{u1, u2} α β f s))) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s)))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (Inducing.{u2, u1} α β _inst_1 _inst_2 f) -> (forall {s : Set.{u2} α}, Iff (IsClosed.{u2} α _inst_1 s) (forall (x : α), (Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) (f x) (closure.{u1} β _inst_2 (Set.image.{u2, u1} α β f s))) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s)))
-Case conversion may be inaccurate. Consider using '#align inducing.is_closed_iff' Inducing.isClosed_iff'ₓ'. -/
 theorem Inducing.isClosed_iff' {f : α → β} (hf : Inducing f) {s : Set α} :
     IsClosed s ↔ ∀ x, f x ∈ closure (f '' s) → x ∈ s := by rw [hf.induced, isClosed_induced_iff']
 #align inducing.is_closed_iff' Inducing.isClosed_iff'
 
-/- warning: inducing.is_closed_preimage -> Inducing.isClosed_preimage is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (Inducing.{u1, u2} α β _inst_1 _inst_2 f) -> (forall (s : Set.{u2} β), (IsClosed.{u2} β _inst_2 s) -> (IsClosed.{u1} α _inst_1 (Set.preimage.{u1, u2} α β f s)))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (Inducing.{u2, u1} α β _inst_1 _inst_2 f) -> (forall (s : Set.{u1} β), (IsClosed.{u1} β _inst_2 s) -> (IsClosed.{u2} α _inst_1 (Set.preimage.{u2, u1} α β f s)))
-Case conversion may be inaccurate. Consider using '#align inducing.is_closed_preimage Inducing.isClosed_preimageₓ'. -/
 theorem Inducing.isClosed_preimage {f : α → β} (h : Inducing f) (s : Set β) (hs : IsClosed s) :
     IsClosed (f ⁻¹' s) :=
   (Inducing.isClosed_iff h).mpr ⟨s, hs, rfl⟩
 #align inducing.is_closed_preimage Inducing.isClosed_preimage
 
-/- warning: inducing.is_open_iff -> Inducing.isOpen_iff is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (Inducing.{u1, u2} α β _inst_1 _inst_2 f) -> (forall {s : Set.{u1} α}, Iff (IsOpen.{u1} α _inst_1 s) (Exists.{succ u2} (Set.{u2} β) (fun (t : Set.{u2} β) => And (IsOpen.{u2} β _inst_2 t) (Eq.{succ u1} (Set.{u1} α) (Set.preimage.{u1, u2} α β f t) s))))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (Inducing.{u2, u1} α β _inst_1 _inst_2 f) -> (forall {s : Set.{u2} α}, Iff (IsOpen.{u2} α _inst_1 s) (Exists.{succ u1} (Set.{u1} β) (fun (t : Set.{u1} β) => And (IsOpen.{u1} β _inst_2 t) (Eq.{succ u2} (Set.{u2} α) (Set.preimage.{u2, u1} α β f t) s))))
-Case conversion may be inaccurate. Consider using '#align inducing.is_open_iff Inducing.isOpen_iffₓ'. -/
 theorem Inducing.isOpen_iff {f : α → β} (hf : Inducing f) {s : Set α} :
     IsOpen s ↔ ∃ t, IsOpen t ∧ f ⁻¹' t = s := by rw [hf.induced, isOpen_induced_iff]
 #align inducing.is_open_iff Inducing.isOpen_iff
 
-/- warning: inducing.dense_iff -> Inducing.dense_iff is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (Inducing.{u1, u2} α β _inst_1 _inst_2 f) -> (forall {s : Set.{u1} α}, Iff (Dense.{u1} α _inst_1 s) (forall (x : α), Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) (f x) (closure.{u2} β _inst_2 (Set.image.{u1, u2} α β f s))))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (Inducing.{u2, u1} α β _inst_1 _inst_2 f) -> (forall {s : Set.{u2} α}, Iff (Dense.{u2} α _inst_1 s) (forall (x : α), Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) (f x) (closure.{u1} β _inst_2 (Set.image.{u2, u1} α β f s))))
-Case conversion may be inaccurate. Consider using '#align inducing.dense_iff Inducing.dense_iffₓ'. -/
 theorem Inducing.dense_iff {f : α → β} (hf : Inducing f) {s : Set α} :
     Dense s ↔ ∀ x, f x ∈ closure (f '' s) := by
   simp only [Dense, hf.closure_eq_preimage_closure_image, mem_preimage]
@@ -318,12 +198,6 @@ theorem Function.Injective.embedding_induced [t : TopologicalSpace β] {f : α 
 
 variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
 
-/- warning: embedding.mk' -> Embedding.mk' is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (f : α -> β), (Function.Injective.{succ u1, succ u2} α β f) -> (forall (a : α), Eq.{succ u1} (Filter.{u1} α) (Filter.comap.{u1, u2} α β f (nhds.{u2} β _inst_2 (f a))) (nhds.{u1} α _inst_1 a)) -> (Embedding.{u1, u2} α β _inst_1 _inst_2 f)
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (f : α -> β), (Function.Injective.{succ u2, succ u1} α β f) -> (forall (a : α), Eq.{succ u2} (Filter.{u2} α) (Filter.comap.{u2, u1} α β f (nhds.{u1} β _inst_2 (f a))) (nhds.{u2} α _inst_1 a)) -> (Embedding.{u2, u1} α β _inst_1 _inst_2 f)
-Case conversion may be inaccurate. Consider using '#align embedding.mk' Embedding.mk'ₓ'. -/
 theorem Embedding.mk' (f : α → β) (inj : Injective f) (induced : ∀ a, comap f (𝓝 (f a)) = 𝓝 a) :
     Embedding f :=
   ⟨inducing_iff_nhds.2 fun a => (induced a).symm, inj⟩
@@ -335,23 +209,11 @@ theorem embedding_id : Embedding (@id α) :=
 #align embedding_id embedding_id
 -/
 
-/- warning: embedding.comp -> Embedding.comp is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] {g : β -> γ} {f : α -> β}, (Embedding.{u2, u3} β γ _inst_2 _inst_3 g) -> (Embedding.{u1, u2} α β _inst_1 _inst_2 f) -> (Embedding.{u1, u3} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u2, succ u3} α β γ g f))
-but is expected to have type
-  forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u2} γ] {g : β -> γ} {f : α -> β}, (Embedding.{u3, u2} β γ _inst_2 _inst_3 g) -> (Embedding.{u1, u3} α β _inst_1 _inst_2 f) -> (Embedding.{u1, u2} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u3, succ u2} α β γ g f))
-Case conversion may be inaccurate. Consider using '#align embedding.comp Embedding.compₓ'. -/
 theorem Embedding.comp {g : β → γ} {f : α → β} (hg : Embedding g) (hf : Embedding f) :
     Embedding (g ∘ f) :=
   { hg.to_inducing.comp hf.to_inducing with inj := fun a₁ a₂ h => hf.inj <| hg.inj h }
 #align embedding.comp Embedding.comp
 
-/- warning: embedding_of_embedding_compose -> embedding_of_embedding_compose is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] {f : α -> β} {g : β -> γ}, (Continuous.{u1, u2} α β _inst_1 _inst_2 f) -> (Continuous.{u2, u3} β γ _inst_2 _inst_3 g) -> (Embedding.{u1, u3} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u2, succ u3} α β γ g f)) -> (Embedding.{u1, u2} α β _inst_1 _inst_2 f)
-but is expected to have type
-  forall {α : Type.{u3}} {β : Type.{u2}} {γ : Type.{u1}} [_inst_1 : TopologicalSpace.{u3} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u1} γ] {f : α -> β} {g : β -> γ}, (Continuous.{u3, u2} α β _inst_1 _inst_2 f) -> (Continuous.{u2, u1} β γ _inst_2 _inst_3 g) -> (Embedding.{u3, u1} α γ _inst_1 _inst_3 (Function.comp.{succ u3, succ u2, succ u1} α β γ g f)) -> (Embedding.{u3, u2} α β _inst_1 _inst_2 f)
-Case conversion may be inaccurate. Consider using '#align embedding_of_embedding_compose embedding_of_embedding_composeₓ'. -/
 theorem embedding_of_embedding_compose {f : α → β} {g : β → γ} (hf : Continuous f)
     (hg : Continuous g) (hgf : Embedding (g ∘ f)) : Embedding f :=
   { induced := (inducing_of_inducing_compose hf hg hgf.to_inducing).induced
@@ -365,77 +227,35 @@ protected theorem Function.LeftInverse.embedding {f : α → β} {g : β → α}
 #align function.left_inverse.embedding Function.LeftInverse.embedding
 -/
 
-/- warning: embedding.map_nhds_eq -> Embedding.map_nhds_eq is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (Embedding.{u1, u2} α β _inst_1 _inst_2 f) -> (forall (a : α), Eq.{succ u2} (Filter.{u2} β) (Filter.map.{u1, u2} α β f (nhds.{u1} α _inst_1 a)) (nhdsWithin.{u2} β _inst_2 (f a) (Set.range.{u2, succ u1} β α f)))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (Embedding.{u2, u1} α β _inst_1 _inst_2 f) -> (forall (a : α), Eq.{succ u1} (Filter.{u1} β) (Filter.map.{u2, u1} α β f (nhds.{u2} α _inst_1 a)) (nhdsWithin.{u1} β _inst_2 (f a) (Set.range.{u1, succ u2} β α f)))
-Case conversion may be inaccurate. Consider using '#align embedding.map_nhds_eq Embedding.map_nhds_eqₓ'. -/
 theorem Embedding.map_nhds_eq {f : α → β} (hf : Embedding f) (a : α) :
     (𝓝 a).map f = 𝓝[range f] f a :=
   hf.1.map_nhds_eq a
 #align embedding.map_nhds_eq Embedding.map_nhds_eq
 
-/- warning: embedding.map_nhds_of_mem -> Embedding.map_nhds_of_mem is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (Embedding.{u1, u2} α β _inst_1 _inst_2 f) -> (forall (a : α), (Membership.Mem.{u2, u2} (Set.{u2} β) (Filter.{u2} β) (Filter.hasMem.{u2} β) (Set.range.{u2, succ u1} β α f) (nhds.{u2} β _inst_2 (f a))) -> (Eq.{succ u2} (Filter.{u2} β) (Filter.map.{u1, u2} α β f (nhds.{u1} α _inst_1 a)) (nhds.{u2} β _inst_2 (f a))))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (Embedding.{u2, u1} α β _inst_1 _inst_2 f) -> (forall (a : α), (Membership.mem.{u1, u1} (Set.{u1} β) (Filter.{u1} β) (instMembershipSetFilter.{u1} β) (Set.range.{u1, succ u2} β α f) (nhds.{u1} β _inst_2 (f a))) -> (Eq.{succ u1} (Filter.{u1} β) (Filter.map.{u2, u1} α β f (nhds.{u2} α _inst_1 a)) (nhds.{u1} β _inst_2 (f a))))
-Case conversion may be inaccurate. Consider using '#align embedding.map_nhds_of_mem Embedding.map_nhds_of_memₓ'. -/
 theorem Embedding.map_nhds_of_mem {f : α → β} (hf : Embedding f) (a : α) (h : range f ∈ 𝓝 (f a)) :
     (𝓝 a).map f = 𝓝 (f a) :=
   hf.1.map_nhds_of_mem a h
 #align embedding.map_nhds_of_mem Embedding.map_nhds_of_mem
 
-/- warning: embedding.tendsto_nhds_iff -> Embedding.tendsto_nhds_iff is a dubious translation:
-lean 3 declaration is
-  forall {β : Type.{u1}} {γ : Type.{u2}} [_inst_2 : TopologicalSpace.{u1} β] [_inst_3 : TopologicalSpace.{u2} γ] {ι : Type.{u3}} {f : ι -> β} {g : β -> γ} {a : Filter.{u3} ι} {b : β}, (Embedding.{u1, u2} β γ _inst_2 _inst_3 g) -> (Iff (Filter.Tendsto.{u3, u1} ι β f a (nhds.{u1} β _inst_2 b)) (Filter.Tendsto.{u3, u2} ι γ (Function.comp.{succ u3, succ u1, succ u2} ι β γ g f) a (nhds.{u2} γ _inst_3 (g b))))
-but is expected to have type
-  forall {β : Type.{u2}} {γ : Type.{u1}} [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u1} γ] {ι : Type.{u3}} {f : ι -> β} {g : β -> γ} {a : Filter.{u3} ι} {b : β}, (Embedding.{u2, u1} β γ _inst_2 _inst_3 g) -> (Iff (Filter.Tendsto.{u3, u2} ι β f a (nhds.{u2} β _inst_2 b)) (Filter.Tendsto.{u3, u1} ι γ (Function.comp.{succ u3, succ u2, succ u1} ι β γ g f) a (nhds.{u1} γ _inst_3 (g b))))
-Case conversion may be inaccurate. Consider using '#align embedding.tendsto_nhds_iff Embedding.tendsto_nhds_iffₓ'. -/
 theorem Embedding.tendsto_nhds_iff {ι : Type _} {f : ι → β} {g : β → γ} {a : Filter ι} {b : β}
     (hg : Embedding g) : Tendsto f a (𝓝 b) ↔ Tendsto (g ∘ f) a (𝓝 (g b)) :=
   hg.to_inducing.tendsto_nhds_iff
 #align embedding.tendsto_nhds_iff Embedding.tendsto_nhds_iff
 
-/- warning: embedding.continuous_iff -> Embedding.continuous_iff is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] {f : α -> β} {g : β -> γ}, (Embedding.{u2, u3} β γ _inst_2 _inst_3 g) -> (Iff (Continuous.{u1, u2} α β _inst_1 _inst_2 f) (Continuous.{u1, u3} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u2, succ u3} α β γ g f)))
-but is expected to have type
-  forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u2} γ] {f : α -> β} {g : β -> γ}, (Embedding.{u3, u2} β γ _inst_2 _inst_3 g) -> (Iff (Continuous.{u1, u3} α β _inst_1 _inst_2 f) (Continuous.{u1, u2} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u3, succ u2} α β γ g f)))
-Case conversion may be inaccurate. Consider using '#align embedding.continuous_iff Embedding.continuous_iffₓ'. -/
 theorem Embedding.continuous_iff {f : α → β} {g : β → γ} (hg : Embedding g) :
     Continuous f ↔ Continuous (g ∘ f) :=
   Inducing.continuous_iff hg.1
 #align embedding.continuous_iff Embedding.continuous_iff
 
-/- warning: embedding.continuous -> Embedding.continuous is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (Embedding.{u1, u2} α β _inst_1 _inst_2 f) -> (Continuous.{u1, u2} α β _inst_1 _inst_2 f)
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (Embedding.{u2, u1} α β _inst_1 _inst_2 f) -> (Continuous.{u2, u1} α β _inst_1 _inst_2 f)
-Case conversion may be inaccurate. Consider using '#align embedding.continuous Embedding.continuousₓ'. -/
 theorem Embedding.continuous {f : α → β} (hf : Embedding f) : Continuous f :=
   Inducing.continuous hf.1
 #align embedding.continuous Embedding.continuous
 
-/- warning: embedding.closure_eq_preimage_closure_image -> Embedding.closure_eq_preimage_closure_image is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : α -> β}, (Embedding.{u1, u2} α β _inst_1 _inst_2 e) -> (forall (s : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (closure.{u1} α _inst_1 s) (Set.preimage.{u1, u2} α β e (closure.{u2} β _inst_2 (Set.image.{u1, u2} α β e s))))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : α -> β}, (Embedding.{u2, u1} α β _inst_1 _inst_2 e) -> (forall (s : Set.{u2} α), Eq.{succ u2} (Set.{u2} α) (closure.{u2} α _inst_1 s) (Set.preimage.{u2, u1} α β e (closure.{u1} β _inst_2 (Set.image.{u2, u1} α β e s))))
-Case conversion may be inaccurate. Consider using '#align embedding.closure_eq_preimage_closure_image Embedding.closure_eq_preimage_closure_imageₓ'. -/
 theorem Embedding.closure_eq_preimage_closure_image {e : α → β} (he : Embedding e) (s : Set α) :
     closure s = e ⁻¹' closure (e '' s) :=
   he.1.closure_eq_preimage_closure_image s
 #align embedding.closure_eq_preimage_closure_image Embedding.closure_eq_preimage_closure_image
 
-/- warning: embedding.discrete_topology -> Embedding.discreteTopology is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_4 : TopologicalSpace.{u1} X] [tY : TopologicalSpace.{u2} Y] [_inst_5 : DiscreteTopology.{u2} Y tY] {f : X -> Y}, (Embedding.{u1, u2} X Y _inst_4 tY f) -> (DiscreteTopology.{u1} X _inst_4)
-but is expected to have type
-  forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_4 : TopologicalSpace.{u2} X] [tY : TopologicalSpace.{u1} Y] [_inst_5 : DiscreteTopology.{u1} Y tY] {f : X -> Y}, (Embedding.{u2, u1} X Y _inst_4 tY f) -> (DiscreteTopology.{u2} X _inst_4)
-Case conversion may be inaccurate. Consider using '#align embedding.discrete_topology Embedding.discreteTopologyₓ'. -/
 /-- The topology induced under an inclusion `f : X → Y` from the discrete topological space `Y`
 is the discrete topology on `X`. -/
 theorem Embedding.discreteTopology {X Y : Type _} [TopologicalSpace X] [tY : TopologicalSpace Y]
@@ -456,12 +276,6 @@ def QuotientMap {α : Type _} {β : Type _} [tα : TopologicalSpace α] [tβ : T
 #align quotient_map QuotientMap
 -/
 
-/- warning: quotient_map_iff -> quotientMap_iff is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, Iff (QuotientMap.{u1, u2} α β _inst_1 _inst_2 f) (And (Function.Surjective.{succ u1, succ u2} α β f) (forall (s : Set.{u2} β), Iff (IsOpen.{u2} β _inst_2 s) (IsOpen.{u1} α _inst_1 (Set.preimage.{u1, u2} α β f s))))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, Iff (QuotientMap.{u2, u1} α β _inst_1 _inst_2 f) (And (Function.Surjective.{succ u2, succ u1} α β f) (forall (s : Set.{u1} β), Iff (IsOpen.{u1} β _inst_2 s) (IsOpen.{u2} α _inst_1 (Set.preimage.{u2, u1} α β f s))))
-Case conversion may be inaccurate. Consider using '#align quotient_map_iff quotientMap_iffₓ'. -/
 theorem quotientMap_iff [TopologicalSpace α] [TopologicalSpace β] {f : α → β} :
     QuotientMap f ↔ Surjective f ∧ ∀ s : Set β, IsOpen s ↔ IsOpen (f ⁻¹' s) :=
   and_congr Iff.rfl topologicalSpace_eq_iff
@@ -484,22 +298,10 @@ protected theorem id : QuotientMap (@id α) :=
 #align quotient_map.id QuotientMap.id
 -/
 
-/- warning: quotient_map.comp -> QuotientMap.comp is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] {g : β -> γ} {f : α -> β}, (QuotientMap.{u2, u3} β γ _inst_2 _inst_3 g) -> (QuotientMap.{u1, u2} α β _inst_1 _inst_2 f) -> (QuotientMap.{u1, u3} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u2, succ u3} α β γ g f))
-but is expected to have type
-  forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u2} γ] {g : β -> γ} {f : α -> β}, (QuotientMap.{u3, u2} β γ _inst_2 _inst_3 g) -> (QuotientMap.{u1, u3} α β _inst_1 _inst_2 f) -> (QuotientMap.{u1, u2} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u3, succ u2} α β γ g f))
-Case conversion may be inaccurate. Consider using '#align quotient_map.comp QuotientMap.compₓ'. -/
 protected theorem comp (hg : QuotientMap g) (hf : QuotientMap f) : QuotientMap (g ∘ f) :=
   ⟨hg.left.comp hf.left, by rw [hg.right, hf.right, coinduced_compose]⟩
 #align quotient_map.comp QuotientMap.comp
 
-/- warning: quotient_map.of_quotient_map_compose -> QuotientMap.of_quotientMap_compose is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] {g : β -> γ} {f : α -> β}, (Continuous.{u1, u2} α β _inst_1 _inst_2 f) -> (Continuous.{u2, u3} β γ _inst_2 _inst_3 g) -> (QuotientMap.{u1, u3} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u2, succ u3} α β γ g f)) -> (QuotientMap.{u2, u3} β γ _inst_2 _inst_3 g)
-but is expected to have type
-  forall {α : Type.{u3}} {β : Type.{u2}} {γ : Type.{u1}} [_inst_1 : TopologicalSpace.{u3} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u1} γ] {g : β -> γ} {f : α -> β}, (Continuous.{u3, u2} α β _inst_1 _inst_2 f) -> (Continuous.{u2, u1} β γ _inst_2 _inst_3 g) -> (QuotientMap.{u3, u1} α γ _inst_1 _inst_3 (Function.comp.{succ u3, succ u2, succ u1} α β γ g f)) -> (QuotientMap.{u2, u1} β γ _inst_2 _inst_3 g)
-Case conversion may be inaccurate. Consider using '#align quotient_map.of_quotient_map_compose QuotientMap.of_quotientMap_composeₓ'. -/
 protected theorem of_quotientMap_compose (hf : Continuous f) (hg : Continuous g)
     (hgf : QuotientMap (g ∘ f)) : QuotientMap g :=
   ⟨hgf.1.of_comp,
@@ -508,63 +310,27 @@ protected theorem of_quotientMap_compose (hf : Continuous f) (hg : Continuous g)
       (by rwa [← continuous_iff_coinduced_le])⟩
 #align quotient_map.of_quotient_map_compose QuotientMap.of_quotientMap_compose
 
-/- warning: quotient_map.of_inverse -> QuotientMap.of_inverse is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β} {g : β -> α}, (Continuous.{u1, u2} α β _inst_1 _inst_2 f) -> (Continuous.{u2, u1} β α _inst_2 _inst_1 g) -> (Function.LeftInverse.{succ u1, succ u2} α β g f) -> (QuotientMap.{u2, u1} β α _inst_2 _inst_1 g)
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β} {g : β -> α}, (Continuous.{u2, u1} α β _inst_1 _inst_2 f) -> (Continuous.{u1, u2} β α _inst_2 _inst_1 g) -> (Function.LeftInverse.{succ u2, succ u1} α β g f) -> (QuotientMap.{u1, u2} β α _inst_2 _inst_1 g)
-Case conversion may be inaccurate. Consider using '#align quotient_map.of_inverse QuotientMap.of_inverseₓ'. -/
 theorem of_inverse {g : β → α} (hf : Continuous f) (hg : Continuous g) (h : LeftInverse g f) :
     QuotientMap g :=
   QuotientMap.of_quotientMap_compose hf hg <| h.comp_eq_id.symm ▸ QuotientMap.id
 #align quotient_map.of_inverse QuotientMap.of_inverse
 
-/- warning: quotient_map.continuous_iff -> QuotientMap.continuous_iff is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] {g : β -> γ} {f : α -> β}, (QuotientMap.{u1, u2} α β _inst_1 _inst_2 f) -> (Iff (Continuous.{u2, u3} β γ _inst_2 _inst_3 g) (Continuous.{u1, u3} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u2, succ u3} α β γ g f)))
-but is expected to have type
-  forall {α : Type.{u3}} {β : Type.{u2}} {γ : Type.{u1}} [_inst_1 : TopologicalSpace.{u3} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u1} γ] {g : β -> γ} {f : α -> β}, (QuotientMap.{u3, u2} α β _inst_1 _inst_2 f) -> (Iff (Continuous.{u2, u1} β γ _inst_2 _inst_3 g) (Continuous.{u3, u1} α γ _inst_1 _inst_3 (Function.comp.{succ u3, succ u2, succ u1} α β γ g f)))
-Case conversion may be inaccurate. Consider using '#align quotient_map.continuous_iff QuotientMap.continuous_iffₓ'. -/
 protected theorem continuous_iff (hf : QuotientMap f) : Continuous g ↔ Continuous (g ∘ f) := by
   rw [continuous_iff_coinduced_le, continuous_iff_coinduced_le, hf.right, coinduced_compose]
 #align quotient_map.continuous_iff QuotientMap.continuous_iff
 
-/- warning: quotient_map.continuous -> QuotientMap.continuous is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (QuotientMap.{u1, u2} α β _inst_1 _inst_2 f) -> (Continuous.{u1, u2} α β _inst_1 _inst_2 f)
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (QuotientMap.{u2, u1} α β _inst_1 _inst_2 f) -> (Continuous.{u2, u1} α β _inst_1 _inst_2 f)
-Case conversion may be inaccurate. Consider using '#align quotient_map.continuous QuotientMap.continuousₓ'. -/
 protected theorem continuous (hf : QuotientMap f) : Continuous f :=
   hf.continuous_iff.mp continuous_id
 #align quotient_map.continuous QuotientMap.continuous
 
-/- warning: quotient_map.surjective -> QuotientMap.surjective is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (QuotientMap.{u1, u2} α β _inst_1 _inst_2 f) -> (Function.Surjective.{succ u1, succ u2} α β f)
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (QuotientMap.{u2, u1} α β _inst_1 _inst_2 f) -> (Function.Surjective.{succ u2, succ u1} α β f)
-Case conversion may be inaccurate. Consider using '#align quotient_map.surjective QuotientMap.surjectiveₓ'. -/
 protected theorem surjective (hf : QuotientMap f) : Surjective f :=
   hf.1
 #align quotient_map.surjective QuotientMap.surjective
 
-/- warning: quotient_map.is_open_preimage -> QuotientMap.isOpen_preimage is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (QuotientMap.{u1, u2} α β _inst_1 _inst_2 f) -> (forall {s : Set.{u2} β}, Iff (IsOpen.{u1} α _inst_1 (Set.preimage.{u1, u2} α β f s)) (IsOpen.{u2} β _inst_2 s))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (QuotientMap.{u2, u1} α β _inst_1 _inst_2 f) -> (forall {s : Set.{u1} β}, Iff (IsOpen.{u2} α _inst_1 (Set.preimage.{u2, u1} α β f s)) (IsOpen.{u1} β _inst_2 s))
-Case conversion may be inaccurate. Consider using '#align quotient_map.is_open_preimage QuotientMap.isOpen_preimageₓ'. -/
 protected theorem isOpen_preimage (hf : QuotientMap f) {s : Set β} : IsOpen (f ⁻¹' s) ↔ IsOpen s :=
   ((quotientMap_iff.1 hf).2 s).symm
 #align quotient_map.is_open_preimage QuotientMap.isOpen_preimage
 
-/- warning: quotient_map.is_closed_preimage -> QuotientMap.isClosed_preimage is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (QuotientMap.{u1, u2} α β _inst_1 _inst_2 f) -> (forall {s : Set.{u2} β}, Iff (IsClosed.{u1} α _inst_1 (Set.preimage.{u1, u2} α β f s)) (IsClosed.{u2} β _inst_2 s))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (QuotientMap.{u2, u1} α β _inst_1 _inst_2 f) -> (forall {s : Set.{u1} β}, Iff (IsClosed.{u2} α _inst_1 (Set.preimage.{u2, u1} α β f s)) (IsClosed.{u1} β _inst_2 s))
-Case conversion may be inaccurate. Consider using '#align quotient_map.is_closed_preimage QuotientMap.isClosed_preimageₓ'. -/
 protected theorem isClosed_preimage (hf : QuotientMap f) {s : Set β} :
     IsClosed (f ⁻¹' s) ↔ IsClosed s :=
   ((quotientMap_iff_closed.1 hf).2 s).symm
@@ -589,96 +355,42 @@ protected theorem id : IsOpenMap (@id α) := fun s hs => by rwa [image_id]
 #align is_open_map.id IsOpenMap.id
 -/
 
-/- warning: is_open_map.comp -> IsOpenMap.comp is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] {g : β -> γ} {f : α -> β}, (IsOpenMap.{u2, u3} β γ _inst_2 _inst_3 g) -> (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f) -> (IsOpenMap.{u1, u3} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u2, succ u3} α β γ g f))
-but is expected to have type
-  forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u2} γ] {g : β -> γ} {f : α -> β}, (IsOpenMap.{u3, u2} β γ _inst_2 _inst_3 g) -> (IsOpenMap.{u1, u3} α β _inst_1 _inst_2 f) -> (IsOpenMap.{u1, u2} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u3, succ u2} α β γ g f))
-Case conversion may be inaccurate. Consider using '#align is_open_map.comp IsOpenMap.compₓ'. -/
 protected theorem comp {g : β → γ} {f : α → β} (hg : IsOpenMap g) (hf : IsOpenMap f) :
     IsOpenMap (g ∘ f) := by intro s hs <;> rw [image_comp] <;> exact hg _ (hf _ hs)
 #align is_open_map.comp IsOpenMap.comp
 
-/- warning: is_open_map.is_open_range -> IsOpenMap.isOpen_range is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f) -> (IsOpen.{u2} β _inst_2 (Set.range.{u2, succ u1} β α f))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (IsOpenMap.{u2, u1} α β _inst_1 _inst_2 f) -> (IsOpen.{u1} β _inst_2 (Set.range.{u1, succ u2} β α f))
-Case conversion may be inaccurate. Consider using '#align is_open_map.is_open_range IsOpenMap.isOpen_rangeₓ'. -/
 theorem isOpen_range (hf : IsOpenMap f) : IsOpen (range f) := by rw [← image_univ];
   exact hf _ isOpen_univ
 #align is_open_map.is_open_range IsOpenMap.isOpen_range
 
-/- warning: is_open_map.image_mem_nhds -> IsOpenMap.image_mem_nhds is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f) -> (forall {x : α} {s : Set.{u1} α}, (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) s (nhds.{u1} α _inst_1 x)) -> (Membership.Mem.{u2, u2} (Set.{u2} β) (Filter.{u2} β) (Filter.hasMem.{u2} β) (Set.image.{u1, u2} α β f s) (nhds.{u2} β _inst_2 (f x))))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (IsOpenMap.{u2, u1} α β _inst_1 _inst_2 f) -> (forall {x : α} {s : Set.{u2} α}, (Membership.mem.{u2, u2} (Set.{u2} α) (Filter.{u2} α) (instMembershipSetFilter.{u2} α) s (nhds.{u2} α _inst_1 x)) -> (Membership.mem.{u1, u1} (Set.{u1} β) (Filter.{u1} β) (instMembershipSetFilter.{u1} β) (Set.image.{u2, u1} α β f s) (nhds.{u1} β _inst_2 (f x))))
-Case conversion may be inaccurate. Consider using '#align is_open_map.image_mem_nhds IsOpenMap.image_mem_nhdsₓ'. -/
 theorem image_mem_nhds (hf : IsOpenMap f) {x : α} {s : Set α} (hx : s ∈ 𝓝 x) : f '' s ∈ 𝓝 (f x) :=
   let ⟨t, hts, ht, hxt⟩ := mem_nhds_iff.1 hx
   mem_of_superset (IsOpen.mem_nhds (hf t ht) (mem_image_of_mem _ hxt)) (image_subset _ hts)
 #align is_open_map.image_mem_nhds IsOpenMap.image_mem_nhds
 
-/- warning: is_open_map.range_mem_nhds -> IsOpenMap.range_mem_nhds is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f) -> (forall (x : α), Membership.Mem.{u2, u2} (Set.{u2} β) (Filter.{u2} β) (Filter.hasMem.{u2} β) (Set.range.{u2, succ u1} β α f) (nhds.{u2} β _inst_2 (f x)))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (IsOpenMap.{u2, u1} α β _inst_1 _inst_2 f) -> (forall (x : α), Membership.mem.{u1, u1} (Set.{u1} β) (Filter.{u1} β) (instMembershipSetFilter.{u1} β) (Set.range.{u1, succ u2} β α f) (nhds.{u1} β _inst_2 (f x)))
-Case conversion may be inaccurate. Consider using '#align is_open_map.range_mem_nhds IsOpenMap.range_mem_nhdsₓ'. -/
 theorem range_mem_nhds (hf : IsOpenMap f) (x : α) : range f ∈ 𝓝 (f x) :=
   hf.isOpen_range.mem_nhds <| mem_range_self _
 #align is_open_map.range_mem_nhds IsOpenMap.range_mem_nhds
 
-/- warning: is_open_map.maps_to_interior -> IsOpenMap.mapsTo_interior is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f) -> (forall {s : Set.{u1} α} {t : Set.{u2} β}, (Set.MapsTo.{u1, u2} α β f s t) -> (Set.MapsTo.{u1, u2} α β f (interior.{u1} α _inst_1 s) (interior.{u2} β _inst_2 t)))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (IsOpenMap.{u2, u1} α β _inst_1 _inst_2 f) -> (forall {s : Set.{u2} α} {t : Set.{u1} β}, (Set.MapsTo.{u2, u1} α β f s t) -> (Set.MapsTo.{u2, u1} α β f (interior.{u2} α _inst_1 s) (interior.{u1} β _inst_2 t)))
-Case conversion may be inaccurate. Consider using '#align is_open_map.maps_to_interior IsOpenMap.mapsTo_interiorₓ'. -/
 theorem mapsTo_interior (hf : IsOpenMap f) {s : Set α} {t : Set β} (h : MapsTo f s t) :
     MapsTo f (interior s) (interior t) :=
   mapsTo'.2 <|
     interior_maximal (h.mono interior_subset Subset.rfl).image_subset (hf _ isOpen_interior)
 #align is_open_map.maps_to_interior IsOpenMap.mapsTo_interior
 
-/- warning: is_open_map.image_interior_subset -> IsOpenMap.image_interior_subset is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f) -> (forall (s : Set.{u1} α), HasSubset.Subset.{u2} (Set.{u2} β) (Set.hasSubset.{u2} β) (Set.image.{u1, u2} α β f (interior.{u1} α _inst_1 s)) (interior.{u2} β _inst_2 (Set.image.{u1, u2} α β f s)))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (IsOpenMap.{u2, u1} α β _inst_1 _inst_2 f) -> (forall (s : Set.{u2} α), HasSubset.Subset.{u1} (Set.{u1} β) (Set.instHasSubsetSet.{u1} β) (Set.image.{u2, u1} α β f (interior.{u2} α _inst_1 s)) (interior.{u1} β _inst_2 (Set.image.{u2, u1} α β f s)))
-Case conversion may be inaccurate. Consider using '#align is_open_map.image_interior_subset IsOpenMap.image_interior_subsetₓ'. -/
 theorem image_interior_subset (hf : IsOpenMap f) (s : Set α) :
     f '' interior s ⊆ interior (f '' s) :=
   (hf.mapsTo_interior (mapsTo_image f s)).image_subset
 #align is_open_map.image_interior_subset IsOpenMap.image_interior_subset
 
-/- warning: is_open_map.nhds_le -> IsOpenMap.nhds_le is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f) -> (forall (a : α), LE.le.{u2} (Filter.{u2} β) (Preorder.toHasLe.{u2} (Filter.{u2} β) (PartialOrder.toPreorder.{u2} (Filter.{u2} β) (Filter.partialOrder.{u2} β))) (nhds.{u2} β _inst_2 (f a)) (Filter.map.{u1, u2} α β f (nhds.{u1} α _inst_1 a)))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (IsOpenMap.{u2, u1} α β _inst_1 _inst_2 f) -> (forall (a : α), LE.le.{u1} (Filter.{u1} β) (Preorder.toLE.{u1} (Filter.{u1} β) (PartialOrder.toPreorder.{u1} (Filter.{u1} β) (Filter.instPartialOrderFilter.{u1} β))) (nhds.{u1} β _inst_2 (f a)) (Filter.map.{u2, u1} α β f (nhds.{u2} α _inst_1 a)))
-Case conversion may be inaccurate. Consider using '#align is_open_map.nhds_le IsOpenMap.nhds_leₓ'. -/
 theorem nhds_le (hf : IsOpenMap f) (a : α) : 𝓝 (f a) ≤ (𝓝 a).map f :=
   le_map fun s => hf.image_mem_nhds
 #align is_open_map.nhds_le IsOpenMap.nhds_le
 
-/- warning: is_open_map.of_nhds_le -> IsOpenMap.of_nhds_le is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (forall (a : α), LE.le.{u2} (Filter.{u2} β) (Preorder.toHasLe.{u2} (Filter.{u2} β) (PartialOrder.toPreorder.{u2} (Filter.{u2} β) (Filter.partialOrder.{u2} β))) (nhds.{u2} β _inst_2 (f a)) (Filter.map.{u1, u2} α β f (nhds.{u1} α _inst_1 a))) -> (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f)
-but is expected to have type
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (forall (a : α), LE.le.{u2} (Filter.{u2} β) (Preorder.toLE.{u2} (Filter.{u2} β) (PartialOrder.toPreorder.{u2} (Filter.{u2} β) (Filter.instPartialOrderFilter.{u2} β))) (nhds.{u2} β _inst_2 (f a)) (Filter.map.{u1, u2} α β f (nhds.{u1} α _inst_1 a))) -> (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f)
-Case conversion may be inaccurate. Consider using '#align is_open_map.of_nhds_le IsOpenMap.of_nhds_leₓ'. -/
 theorem of_nhds_le (hf : ∀ a, 𝓝 (f a) ≤ map f (𝓝 a)) : IsOpenMap f := fun s hs =>
   isOpen_iff_mem_nhds.2 fun b ⟨a, has, hab⟩ => hab ▸ hf _ (image_mem_map <| IsOpen.mem_nhds hs has)
 #align is_open_map.of_nhds_le IsOpenMap.of_nhds_le
 
-/- warning: is_open_map.of_sections -> IsOpenMap.of_sections is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (forall (x : α), Exists.{max (succ u2) (succ u1)} (β -> α) (fun (g : β -> α) => And (ContinuousAt.{u2, u1} β α _inst_2 _inst_1 g (f x)) (And (Eq.{succ u1} α (g (f x)) x) (Function.RightInverse.{succ u1, succ u2} α β g f)))) -> (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f)
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (forall (x : α), Exists.{max (succ u2) (succ u1)} (β -> α) (fun (g : β -> α) => And (ContinuousAt.{u1, u2} β α _inst_2 _inst_1 g (f x)) (And (Eq.{succ u2} α (g (f x)) x) (Function.RightInverse.{succ u2, succ u1} α β g f)))) -> (IsOpenMap.{u2, u1} α β _inst_1 _inst_2 f)
-Case conversion may be inaccurate. Consider using '#align is_open_map.of_sections IsOpenMap.of_sectionsₓ'. -/
 theorem of_sections {f : α → β}
     (h : ∀ x, ∃ g : β → α, ContinuousAt g (f x) ∧ g (f x) = x ∧ RightInverse g f) : IsOpenMap f :=
   of_nhds_le fun x =>
@@ -697,12 +409,6 @@ theorem of_inverse {f : α → β} {f' : β → α} (h : Continuous f') (l_inv :
 #align is_open_map.of_inverse IsOpenMap.of_inverse
 -/
 
-/- warning: is_open_map.to_quotient_map -> IsOpenMap.to_quotientMap is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f) -> (Continuous.{u1, u2} α β _inst_1 _inst_2 f) -> (Function.Surjective.{succ u1, succ u2} α β f) -> (QuotientMap.{u1, u2} α β _inst_1 _inst_2 f)
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (IsOpenMap.{u2, u1} α β _inst_1 _inst_2 f) -> (Continuous.{u2, u1} α β _inst_1 _inst_2 f) -> (Function.Surjective.{succ u2, succ u1} α β f) -> (QuotientMap.{u2, u1} α β _inst_1 _inst_2 f)
-Case conversion may be inaccurate. Consider using '#align is_open_map.to_quotient_map IsOpenMap.to_quotientMapₓ'. -/
 /-- A continuous surjective open map is a quotient map. -/
 theorem to_quotientMap {f : α → β} (open_map : IsOpenMap f) (cont : Continuous f)
     (surj : Surjective f) : QuotientMap f :=
@@ -710,35 +416,17 @@ theorem to_quotientMap {f : α → β} (open_map : IsOpenMap f) (cont : Continuo
     ⟨surj, fun s => ⟨fun h => h.Preimage cont, fun h => surj.image_preimage s ▸ open_map _ h⟩⟩
 #align is_open_map.to_quotient_map IsOpenMap.to_quotientMap
 
-/- warning: is_open_map.interior_preimage_subset_preimage_interior -> IsOpenMap.interior_preimage_subset_preimage_interior is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f) -> (forall {s : Set.{u2} β}, HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (interior.{u1} α _inst_1 (Set.preimage.{u1, u2} α β f s)) (Set.preimage.{u1, u2} α β f (interior.{u2} β _inst_2 s)))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (IsOpenMap.{u2, u1} α β _inst_1 _inst_2 f) -> (forall {s : Set.{u1} β}, HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) (interior.{u2} α _inst_1 (Set.preimage.{u2, u1} α β f s)) (Set.preimage.{u2, u1} α β f (interior.{u1} β _inst_2 s)))
-Case conversion may be inaccurate. Consider using '#align is_open_map.interior_preimage_subset_preimage_interior IsOpenMap.interior_preimage_subset_preimage_interiorₓ'. -/
 theorem interior_preimage_subset_preimage_interior (hf : IsOpenMap f) {s : Set β} :
     interior (f ⁻¹' s) ⊆ f ⁻¹' interior s :=
   hf.mapsTo_interior (mapsTo_preimage _ _)
 #align is_open_map.interior_preimage_subset_preimage_interior IsOpenMap.interior_preimage_subset_preimage_interior
 
-/- warning: is_open_map.preimage_interior_eq_interior_preimage -> IsOpenMap.preimage_interior_eq_interior_preimage is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f) -> (Continuous.{u1, u2} α β _inst_1 _inst_2 f) -> (forall (s : Set.{u2} β), Eq.{succ u1} (Set.{u1} α) (Set.preimage.{u1, u2} α β f (interior.{u2} β _inst_2 s)) (interior.{u1} α _inst_1 (Set.preimage.{u1, u2} α β f s)))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (IsOpenMap.{u2, u1} α β _inst_1 _inst_2 f) -> (Continuous.{u2, u1} α β _inst_1 _inst_2 f) -> (forall (s : Set.{u1} β), Eq.{succ u2} (Set.{u2} α) (Set.preimage.{u2, u1} α β f (interior.{u1} β _inst_2 s)) (interior.{u2} α _inst_1 (Set.preimage.{u2, u1} α β f s)))
-Case conversion may be inaccurate. Consider using '#align is_open_map.preimage_interior_eq_interior_preimage IsOpenMap.preimage_interior_eq_interior_preimageₓ'. -/
 theorem preimage_interior_eq_interior_preimage (hf₁ : IsOpenMap f) (hf₂ : Continuous f)
     (s : Set β) : f ⁻¹' interior s = interior (f ⁻¹' s) :=
   Subset.antisymm (preimage_interior_subset_interior_preimage hf₂)
     (interior_preimage_subset_preimage_interior hf₁)
 #align is_open_map.preimage_interior_eq_interior_preimage IsOpenMap.preimage_interior_eq_interior_preimage
 
-/- warning: is_open_map.preimage_closure_subset_closure_preimage -> IsOpenMap.preimage_closure_subset_closure_preimage is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f) -> (forall {s : Set.{u2} β}, HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Set.preimage.{u1, u2} α β f (closure.{u2} β _inst_2 s)) (closure.{u1} α _inst_1 (Set.preimage.{u1, u2} α β f s)))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (IsOpenMap.{u2, u1} α β _inst_1 _inst_2 f) -> (forall {s : Set.{u1} β}, HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) (Set.preimage.{u2, u1} α β f (closure.{u1} β _inst_2 s)) (closure.{u2} α _inst_1 (Set.preimage.{u2, u1} α β f s)))
-Case conversion may be inaccurate. Consider using '#align is_open_map.preimage_closure_subset_closure_preimage IsOpenMap.preimage_closure_subset_closure_preimageₓ'. -/
 theorem preimage_closure_subset_closure_preimage (hf : IsOpenMap f) {s : Set β} :
     f ⁻¹' closure s ⊆ closure (f ⁻¹' s) :=
   by
@@ -746,23 +434,11 @@ theorem preimage_closure_subset_closure_preimage (hf : IsOpenMap f) {s : Set β}
   simp only [← interior_compl, ← preimage_compl, hf.interior_preimage_subset_preimage_interior]
 #align is_open_map.preimage_closure_subset_closure_preimage IsOpenMap.preimage_closure_subset_closure_preimage
 
-/- warning: is_open_map.preimage_closure_eq_closure_preimage -> IsOpenMap.preimage_closure_eq_closure_preimage is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f) -> (Continuous.{u1, u2} α β _inst_1 _inst_2 f) -> (forall (s : Set.{u2} β), Eq.{succ u1} (Set.{u1} α) (Set.preimage.{u1, u2} α β f (closure.{u2} β _inst_2 s)) (closure.{u1} α _inst_1 (Set.preimage.{u1, u2} α β f s)))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (IsOpenMap.{u2, u1} α β _inst_1 _inst_2 f) -> (Continuous.{u2, u1} α β _inst_1 _inst_2 f) -> (forall (s : Set.{u1} β), Eq.{succ u2} (Set.{u2} α) (Set.preimage.{u2, u1} α β f (closure.{u1} β _inst_2 s)) (closure.{u2} α _inst_1 (Set.preimage.{u2, u1} α β f s)))
-Case conversion may be inaccurate. Consider using '#align is_open_map.preimage_closure_eq_closure_preimage IsOpenMap.preimage_closure_eq_closure_preimageₓ'. -/
 theorem preimage_closure_eq_closure_preimage (hf : IsOpenMap f) (hfc : Continuous f) (s : Set β) :
     f ⁻¹' closure s = closure (f ⁻¹' s) :=
   hf.preimage_closure_subset_closure_preimage.antisymm (hfc.closure_preimage_subset s)
 #align is_open_map.preimage_closure_eq_closure_preimage IsOpenMap.preimage_closure_eq_closure_preimage
 
-/- warning: is_open_map.preimage_frontier_subset_frontier_preimage -> IsOpenMap.preimage_frontier_subset_frontier_preimage is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f) -> (forall {s : Set.{u2} β}, HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Set.preimage.{u1, u2} α β f (frontier.{u2} β _inst_2 s)) (frontier.{u1} α _inst_1 (Set.preimage.{u1, u2} α β f s)))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (IsOpenMap.{u2, u1} α β _inst_1 _inst_2 f) -> (forall {s : Set.{u1} β}, HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) (Set.preimage.{u2, u1} α β f (frontier.{u1} β _inst_2 s)) (frontier.{u2} α _inst_1 (Set.preimage.{u2, u1} α β f s)))
-Case conversion may be inaccurate. Consider using '#align is_open_map.preimage_frontier_subset_frontier_preimage IsOpenMap.preimage_frontier_subset_frontier_preimageₓ'. -/
 theorem preimage_frontier_subset_frontier_preimage (hf : IsOpenMap f) {s : Set β} :
     f ⁻¹' frontier s ⊆ frontier (f ⁻¹' s) := by
   simpa only [frontier_eq_closure_inter_closure, preimage_inter] using
@@ -770,12 +446,6 @@ theorem preimage_frontier_subset_frontier_preimage (hf : IsOpenMap f) {s : Set 
       hf.preimage_closure_subset_closure_preimage
 #align is_open_map.preimage_frontier_subset_frontier_preimage IsOpenMap.preimage_frontier_subset_frontier_preimage
 
-/- warning: is_open_map.preimage_frontier_eq_frontier_preimage -> IsOpenMap.preimage_frontier_eq_frontier_preimage is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f) -> (Continuous.{u1, u2} α β _inst_1 _inst_2 f) -> (forall (s : Set.{u2} β), Eq.{succ u1} (Set.{u1} α) (Set.preimage.{u1, u2} α β f (frontier.{u2} β _inst_2 s)) (frontier.{u1} α _inst_1 (Set.preimage.{u1, u2} α β f s)))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (IsOpenMap.{u2, u1} α β _inst_1 _inst_2 f) -> (Continuous.{u2, u1} α β _inst_1 _inst_2 f) -> (forall (s : Set.{u1} β), Eq.{succ u2} (Set.{u2} α) (Set.preimage.{u2, u1} α β f (frontier.{u1} β _inst_2 s)) (frontier.{u2} α _inst_1 (Set.preimage.{u2, u1} α β f s)))
-Case conversion may be inaccurate. Consider using '#align is_open_map.preimage_frontier_eq_frontier_preimage IsOpenMap.preimage_frontier_eq_frontier_preimageₓ'. -/
 theorem preimage_frontier_eq_frontier_preimage (hf : IsOpenMap f) (hfc : Continuous f) (s : Set β) :
     f ⁻¹' frontier s = frontier (f ⁻¹' s) := by
   simp only [frontier_eq_closure_inter_closure, preimage_inter, preimage_compl,
@@ -784,23 +454,11 @@ theorem preimage_frontier_eq_frontier_preimage (hf : IsOpenMap f) (hfc : Continu
 
 end IsOpenMap
 
-/- warning: is_open_map_iff_nhds_le -> isOpenMap_iff_nhds_le is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, Iff (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f) (forall (a : α), LE.le.{u2} (Filter.{u2} β) (Preorder.toHasLe.{u2} (Filter.{u2} β) (PartialOrder.toPreorder.{u2} (Filter.{u2} β) (Filter.partialOrder.{u2} β))) (nhds.{u2} β _inst_2 (f a)) (Filter.map.{u1, u2} α β f (nhds.{u1} α _inst_1 a)))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, Iff (IsOpenMap.{u2, u1} α β _inst_1 _inst_2 f) (forall (a : α), LE.le.{u1} (Filter.{u1} β) (Preorder.toLE.{u1} (Filter.{u1} β) (PartialOrder.toPreorder.{u1} (Filter.{u1} β) (Filter.instPartialOrderFilter.{u1} β))) (nhds.{u1} β _inst_2 (f a)) (Filter.map.{u2, u1} α β f (nhds.{u2} α _inst_1 a)))
-Case conversion may be inaccurate. Consider using '#align is_open_map_iff_nhds_le isOpenMap_iff_nhds_leₓ'. -/
 theorem isOpenMap_iff_nhds_le [TopologicalSpace α] [TopologicalSpace β] {f : α → β} :
     IsOpenMap f ↔ ∀ a : α, 𝓝 (f a) ≤ (𝓝 a).map f :=
   ⟨fun hf => hf.nhds_le, IsOpenMap.of_nhds_le⟩
 #align is_open_map_iff_nhds_le isOpenMap_iff_nhds_le
 
-/- warning: is_open_map_iff_interior -> isOpenMap_iff_interior is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, Iff (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f) (forall (s : Set.{u1} α), HasSubset.Subset.{u2} (Set.{u2} β) (Set.hasSubset.{u2} β) (Set.image.{u1, u2} α β f (interior.{u1} α _inst_1 s)) (interior.{u2} β _inst_2 (Set.image.{u1, u2} α β f s)))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, Iff (IsOpenMap.{u2, u1} α β _inst_1 _inst_2 f) (forall (s : Set.{u2} α), HasSubset.Subset.{u1} (Set.{u1} β) (Set.instHasSubsetSet.{u1} β) (Set.image.{u2, u1} α β f (interior.{u2} α _inst_1 s)) (interior.{u1} β _inst_2 (Set.image.{u2, u1} α β f s)))
-Case conversion may be inaccurate. Consider using '#align is_open_map_iff_interior isOpenMap_iff_interiorₓ'. -/
 theorem isOpenMap_iff_interior [TopologicalSpace α] [TopologicalSpace β] {f : α → β} :
     IsOpenMap f ↔ ∀ s, f '' interior s ⊆ interior (f '' s) :=
   ⟨IsOpenMap.image_interior_subset, fun hs u hu =>
@@ -811,12 +469,6 @@ theorem isOpenMap_iff_interior [TopologicalSpace α] [TopologicalSpace β] {f :
         ⟩
 #align is_open_map_iff_interior isOpenMap_iff_interior
 
-/- warning: inducing.is_open_map -> Inducing.isOpenMap is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (Inducing.{u1, u2} α β _inst_1 _inst_2 f) -> (IsOpen.{u2} β _inst_2 (Set.range.{u2, succ u1} β α f)) -> (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f)
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (Inducing.{u2, u1} α β _inst_1 _inst_2 f) -> (IsOpen.{u1} β _inst_2 (Set.range.{u1, succ u2} β α f)) -> (IsOpenMap.{u2, u1} α β _inst_1 _inst_2 f)
-Case conversion may be inaccurate. Consider using '#align inducing.is_open_map Inducing.isOpenMapₓ'. -/
 /-- An inducing map with an open range is an open map. -/
 protected theorem Inducing.isOpenMap [TopologicalSpace α] [TopologicalSpace β] {f : α → β}
     (hi : Inducing f) (ho : IsOpen (range f)) : IsOpenMap f :=
@@ -848,22 +500,10 @@ protected theorem id : IsClosedMap (@id α) := fun s hs => by rwa [image_id]
 #align is_closed_map.id IsClosedMap.id
 -/
 
-/- warning: is_closed_map.comp -> IsClosedMap.comp is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] {g : β -> γ} {f : α -> β}, (IsClosedMap.{u2, u3} β γ _inst_2 _inst_3 g) -> (IsClosedMap.{u1, u2} α β _inst_1 _inst_2 f) -> (IsClosedMap.{u1, u3} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u2, succ u3} α β γ g f))
-but is expected to have type
-  forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u2} γ] {g : β -> γ} {f : α -> β}, (IsClosedMap.{u3, u2} β γ _inst_2 _inst_3 g) -> (IsClosedMap.{u1, u3} α β _inst_1 _inst_2 f) -> (IsClosedMap.{u1, u2} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u3, succ u2} α β γ g f))
-Case conversion may be inaccurate. Consider using '#align is_closed_map.comp IsClosedMap.compₓ'. -/
 protected theorem comp {g : β → γ} {f : α → β} (hg : IsClosedMap g) (hf : IsClosedMap f) :
     IsClosedMap (g ∘ f) := by intro s hs; rw [image_comp]; exact hg _ (hf _ hs)
 #align is_closed_map.comp IsClosedMap.comp
 
-/- warning: is_closed_map.closure_image_subset -> IsClosedMap.closure_image_subset is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (IsClosedMap.{u1, u2} α β _inst_1 _inst_2 f) -> (forall (s : Set.{u1} α), HasSubset.Subset.{u2} (Set.{u2} β) (Set.hasSubset.{u2} β) (closure.{u2} β _inst_2 (Set.image.{u1, u2} α β f s)) (Set.image.{u1, u2} α β f (closure.{u1} α _inst_1 s)))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (IsClosedMap.{u2, u1} α β _inst_1 _inst_2 f) -> (forall (s : Set.{u2} α), HasSubset.Subset.{u1} (Set.{u1} β) (Set.instHasSubsetSet.{u1} β) (closure.{u1} β _inst_2 (Set.image.{u2, u1} α β f s)) (Set.image.{u2, u1} α β f (closure.{u2} α _inst_1 s)))
-Case conversion may be inaccurate. Consider using '#align is_closed_map.closure_image_subset IsClosedMap.closure_image_subsetₓ'. -/
 theorem closure_image_subset {f : α → β} (hf : IsClosedMap f) (s : Set α) :
     closure (f '' s) ⊆ f '' closure s :=
   closure_minimal (image_subset _ subset_closure) (hf _ isClosed_closure)
@@ -877,12 +517,6 @@ theorem of_inverse {f : α → β} {f' : β → α} (h : Continuous f') (l_inv :
 #align is_closed_map.of_inverse IsClosedMap.of_inverse
 -/
 
-/- warning: is_closed_map.of_nonempty -> IsClosedMap.of_nonempty is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (forall (s : Set.{u1} α), (IsClosed.{u1} α _inst_1 s) -> (Set.Nonempty.{u1} α s) -> (IsClosed.{u2} β _inst_2 (Set.image.{u1, u2} α β f s))) -> (IsClosedMap.{u1, u2} α β _inst_1 _inst_2 f)
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (forall (s : Set.{u2} α), (IsClosed.{u2} α _inst_1 s) -> (Set.Nonempty.{u2} α s) -> (IsClosed.{u1} β _inst_2 (Set.image.{u2, u1} α β f s))) -> (IsClosedMap.{u2, u1} α β _inst_1 _inst_2 f)
-Case conversion may be inaccurate. Consider using '#align is_closed_map.of_nonempty IsClosedMap.of_nonemptyₓ'. -/
 theorem of_nonempty {f : α → β} (h : ∀ s, IsClosed s → s.Nonempty → IsClosed (f '' s)) :
     IsClosedMap f := by
   intro s hs; cases' eq_empty_or_nonempty s with h2s h2s
@@ -890,12 +524,6 @@ theorem of_nonempty {f : α → β} (h : ∀ s, IsClosed s → s.Nonempty → Is
   · exact h s hs h2s
 #align is_closed_map.of_nonempty IsClosedMap.of_nonempty
 
-/- warning: is_closed_map.closed_range -> IsClosedMap.closed_range is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (IsClosedMap.{u1, u2} α β _inst_1 _inst_2 f) -> (IsClosed.{u2} β _inst_2 (Set.range.{u2, succ u1} β α f))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (IsClosedMap.{u2, u1} α β _inst_1 _inst_2 f) -> (IsClosed.{u1} β _inst_2 (Set.range.{u1, succ u2} β α f))
-Case conversion may be inaccurate. Consider using '#align is_closed_map.closed_range IsClosedMap.closed_rangeₓ'. -/
 theorem closed_range {f : α → β} (hf : IsClosedMap f) : IsClosed (range f) :=
   @image_univ _ _ f ▸ hf _ isClosed_univ
 #align is_closed_map.closed_range IsClosedMap.closed_range
@@ -908,12 +536,6 @@ theorem to_quotientMap {f : α → β} (hcl : IsClosedMap f) (hcont : Continuous
 
 end IsClosedMap
 
-/- warning: inducing.is_closed_map -> Inducing.isClosedMap is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (Inducing.{u1, u2} α β _inst_1 _inst_2 f) -> (IsClosed.{u2} β _inst_2 (Set.range.{u2, succ u1} β α f)) -> (IsClosedMap.{u1, u2} α β _inst_1 _inst_2 f)
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (Inducing.{u2, u1} α β _inst_1 _inst_2 f) -> (IsClosed.{u1} β _inst_2 (Set.range.{u1, succ u2} β α f)) -> (IsClosedMap.{u2, u1} α β _inst_1 _inst_2 f)
-Case conversion may be inaccurate. Consider using '#align inducing.is_closed_map Inducing.isClosedMapₓ'. -/
 theorem Inducing.isClosedMap [TopologicalSpace α] [TopologicalSpace β] {f : α → β} (hf : Inducing f)
     (h : IsClosed (range f)) : IsClosedMap f :=
   by
@@ -923,12 +545,6 @@ theorem Inducing.isClosedMap [TopologicalSpace α] [TopologicalSpace β] {f : α
   exact ht.inter h
 #align inducing.is_closed_map Inducing.isClosedMap
 
-/- warning: is_closed_map_iff_closure_image -> isClosedMap_iff_closure_image is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, Iff (IsClosedMap.{u1, u2} α β _inst_1 _inst_2 f) (forall (s : Set.{u1} α), HasSubset.Subset.{u2} (Set.{u2} β) (Set.hasSubset.{u2} β) (closure.{u2} β _inst_2 (Set.image.{u1, u2} α β f s)) (Set.image.{u1, u2} α β f (closure.{u1} α _inst_1 s)))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, Iff (IsClosedMap.{u2, u1} α β _inst_1 _inst_2 f) (forall (s : Set.{u2} α), HasSubset.Subset.{u1} (Set.{u1} β) (Set.instHasSubsetSet.{u1} β) (closure.{u1} β _inst_2 (Set.image.{u2, u1} α β f s)) (Set.image.{u2, u1} α β f (closure.{u2} α _inst_1 s)))
-Case conversion may be inaccurate. Consider using '#align is_closed_map_iff_closure_image isClosedMap_iff_closure_imageₓ'. -/
 theorem isClosedMap_iff_closure_image [TopologicalSpace α] [TopologicalSpace β] {f : α → β} :
     IsClosedMap f ↔ ∀ s, closure (f '' s) ⊆ f '' closure s :=
   ⟨IsClosedMap.closure_image_subset, fun hs c hc =>
@@ -951,33 +567,15 @@ structure OpenEmbedding (f : α → β) extends Embedding f : Prop where
 #align open_embedding OpenEmbedding
 -/
 
-/- warning: open_embedding.is_open_map -> OpenEmbedding.isOpenMap is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (OpenEmbedding.{u1, u2} α β _inst_1 _inst_2 f) -> (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f)
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (OpenEmbedding.{u2, u1} α β _inst_1 _inst_2 f) -> (IsOpenMap.{u2, u1} α β _inst_1 _inst_2 f)
-Case conversion may be inaccurate. Consider using '#align open_embedding.is_open_map OpenEmbedding.isOpenMapₓ'. -/
 theorem OpenEmbedding.isOpenMap {f : α → β} (hf : OpenEmbedding f) : IsOpenMap f :=
   hf.toEmbedding.to_inducing.IsOpenMap hf.open_range
 #align open_embedding.is_open_map OpenEmbedding.isOpenMap
 
-/- warning: open_embedding.map_nhds_eq -> OpenEmbedding.map_nhds_eq is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (OpenEmbedding.{u1, u2} α β _inst_1 _inst_2 f) -> (forall (a : α), Eq.{succ u2} (Filter.{u2} β) (Filter.map.{u1, u2} α β f (nhds.{u1} α _inst_1 a)) (nhds.{u2} β _inst_2 (f a)))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (OpenEmbedding.{u2, u1} α β _inst_1 _inst_2 f) -> (forall (a : α), Eq.{succ u1} (Filter.{u1} β) (Filter.map.{u2, u1} α β f (nhds.{u2} α _inst_1 a)) (nhds.{u1} β _inst_2 (f a)))
-Case conversion may be inaccurate. Consider using '#align open_embedding.map_nhds_eq OpenEmbedding.map_nhds_eqₓ'. -/
 theorem OpenEmbedding.map_nhds_eq {f : α → β} (hf : OpenEmbedding f) (a : α) :
     map f (𝓝 a) = 𝓝 (f a) :=
   hf.toEmbedding.map_nhds_of_mem _ <| hf.open_range.mem_nhds <| mem_range_self _
 #align open_embedding.map_nhds_eq OpenEmbedding.map_nhds_eq
 
-/- warning: open_embedding.open_iff_image_open -> OpenEmbedding.open_iff_image_open is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (OpenEmbedding.{u1, u2} α β _inst_1 _inst_2 f) -> (forall {s : Set.{u1} α}, Iff (IsOpen.{u1} α _inst_1 s) (IsOpen.{u2} β _inst_2 (Set.image.{u1, u2} α β f s)))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (OpenEmbedding.{u2, u1} α β _inst_1 _inst_2 f) -> (forall {s : Set.{u2} α}, Iff (IsOpen.{u2} α _inst_1 s) (IsOpen.{u1} β _inst_2 (Set.image.{u2, u1} α β f s)))
-Case conversion may be inaccurate. Consider using '#align open_embedding.open_iff_image_open OpenEmbedding.open_iff_image_openₓ'. -/
 theorem OpenEmbedding.open_iff_image_open {f : α → β} (hf : OpenEmbedding f) {s : Set α} :
     IsOpen s ↔ IsOpen (f '' s) :=
   ⟨hf.IsOpenMap s, fun h =>
@@ -986,33 +584,15 @@ theorem OpenEmbedding.open_iff_image_open {f : α → β} (hf : OpenEmbedding f)
     apply preimage_image_eq _ hf.inj⟩
 #align open_embedding.open_iff_image_open OpenEmbedding.open_iff_image_open
 
-/- warning: open_embedding.tendsto_nhds_iff -> OpenEmbedding.tendsto_nhds_iff is a dubious translation:
-lean 3 declaration is
-  forall {β : Type.{u1}} {γ : Type.{u2}} [_inst_2 : TopologicalSpace.{u1} β] [_inst_3 : TopologicalSpace.{u2} γ] {ι : Type.{u3}} {f : ι -> β} {g : β -> γ} {a : Filter.{u3} ι} {b : β}, (OpenEmbedding.{u1, u2} β γ _inst_2 _inst_3 g) -> (Iff (Filter.Tendsto.{u3, u1} ι β f a (nhds.{u1} β _inst_2 b)) (Filter.Tendsto.{u3, u2} ι γ (Function.comp.{succ u3, succ u1, succ u2} ι β γ g f) a (nhds.{u2} γ _inst_3 (g b))))
-but is expected to have type
-  forall {β : Type.{u2}} {γ : Type.{u1}} [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u1} γ] {ι : Type.{u3}} {f : ι -> β} {g : β -> γ} {a : Filter.{u3} ι} {b : β}, (OpenEmbedding.{u2, u1} β γ _inst_2 _inst_3 g) -> (Iff (Filter.Tendsto.{u3, u2} ι β f a (nhds.{u2} β _inst_2 b)) (Filter.Tendsto.{u3, u1} ι γ (Function.comp.{succ u3, succ u2, succ u1} ι β γ g f) a (nhds.{u1} γ _inst_3 (g b))))
-Case conversion may be inaccurate. Consider using '#align open_embedding.tendsto_nhds_iff OpenEmbedding.tendsto_nhds_iffₓ'. -/
 theorem OpenEmbedding.tendsto_nhds_iff {ι : Type _} {f : ι → β} {g : β → γ} {a : Filter ι} {b : β}
     (hg : OpenEmbedding g) : Tendsto f a (𝓝 b) ↔ Tendsto (g ∘ f) a (𝓝 (g b)) :=
   hg.toEmbedding.tendsto_nhds_iff
 #align open_embedding.tendsto_nhds_iff OpenEmbedding.tendsto_nhds_iff
 
-/- warning: open_embedding.continuous -> OpenEmbedding.continuous is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (OpenEmbedding.{u1, u2} α β _inst_1 _inst_2 f) -> (Continuous.{u1, u2} α β _inst_1 _inst_2 f)
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (OpenEmbedding.{u2, u1} α β _inst_1 _inst_2 f) -> (Continuous.{u2, u1} α β _inst_1 _inst_2 f)
-Case conversion may be inaccurate. Consider using '#align open_embedding.continuous OpenEmbedding.continuousₓ'. -/
 theorem OpenEmbedding.continuous {f : α → β} (hf : OpenEmbedding f) : Continuous f :=
   hf.toEmbedding.Continuous
 #align open_embedding.continuous OpenEmbedding.continuous
 
-/- warning: open_embedding.open_iff_preimage_open -> OpenEmbedding.open_iff_preimage_open is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (OpenEmbedding.{u1, u2} α β _inst_1 _inst_2 f) -> (forall {s : Set.{u2} β}, (HasSubset.Subset.{u2} (Set.{u2} β) (Set.hasSubset.{u2} β) s (Set.range.{u2, succ u1} β α f)) -> (Iff (IsOpen.{u2} β _inst_2 s) (IsOpen.{u1} α _inst_1 (Set.preimage.{u1, u2} α β f s))))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (OpenEmbedding.{u2, u1} α β _inst_1 _inst_2 f) -> (forall {s : Set.{u1} β}, (HasSubset.Subset.{u1} (Set.{u1} β) (Set.instHasSubsetSet.{u1} β) s (Set.range.{u1, succ u2} β α f)) -> (Iff (IsOpen.{u1} β _inst_2 s) (IsOpen.{u2} α _inst_1 (Set.preimage.{u2, u1} α β f s))))
-Case conversion may be inaccurate. Consider using '#align open_embedding.open_iff_preimage_open OpenEmbedding.open_iff_preimage_openₓ'. -/
 theorem OpenEmbedding.open_iff_preimage_open {f : α → β} (hf : OpenEmbedding f) {s : Set β}
     (hs : s ⊆ range f) : IsOpen s ↔ IsOpen (f ⁻¹' s) :=
   by
@@ -1020,34 +600,16 @@ theorem OpenEmbedding.open_iff_preimage_open {f : α → β} (hf : OpenEmbedding
   rwa [image_preimage_eq_inter_range, inter_eq_self_of_subset_left]
 #align open_embedding.open_iff_preimage_open OpenEmbedding.open_iff_preimage_open
 
-/- warning: open_embedding_of_embedding_open -> openEmbedding_of_embedding_open is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (Embedding.{u1, u2} α β _inst_1 _inst_2 f) -> (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f) -> (OpenEmbedding.{u1, u2} α β _inst_1 _inst_2 f)
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (Embedding.{u2, u1} α β _inst_1 _inst_2 f) -> (IsOpenMap.{u2, u1} α β _inst_1 _inst_2 f) -> (OpenEmbedding.{u2, u1} α β _inst_1 _inst_2 f)
-Case conversion may be inaccurate. Consider using '#align open_embedding_of_embedding_open openEmbedding_of_embedding_openₓ'. -/
 theorem openEmbedding_of_embedding_open {f : α → β} (h₁ : Embedding f) (h₂ : IsOpenMap f) :
     OpenEmbedding f :=
   ⟨h₁, h₂.isOpen_range⟩
 #align open_embedding_of_embedding_open openEmbedding_of_embedding_open
 
-/- warning: open_embedding_iff_embedding_open -> openEmbedding_iff_embedding_open is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, Iff (OpenEmbedding.{u1, u2} α β _inst_1 _inst_2 f) (And (Embedding.{u1, u2} α β _inst_1 _inst_2 f) (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, Iff (OpenEmbedding.{u2, u1} α β _inst_1 _inst_2 f) (And (Embedding.{u2, u1} α β _inst_1 _inst_2 f) (IsOpenMap.{u2, u1} α β _inst_1 _inst_2 f))
-Case conversion may be inaccurate. Consider using '#align open_embedding_iff_embedding_open openEmbedding_iff_embedding_openₓ'. -/
 theorem openEmbedding_iff_embedding_open {f : α → β} :
     OpenEmbedding f ↔ Embedding f ∧ IsOpenMap f :=
   ⟨fun h => ⟨h.1, h.IsOpenMap⟩, fun h => openEmbedding_of_embedding_open h.1 h.2⟩
 #align open_embedding_iff_embedding_open openEmbedding_iff_embedding_open
 
-/- warning: open_embedding_of_continuous_injective_open -> openEmbedding_of_continuous_injective_open is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (Continuous.{u1, u2} α β _inst_1 _inst_2 f) -> (Function.Injective.{succ u1, succ u2} α β f) -> (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f) -> (OpenEmbedding.{u1, u2} α β _inst_1 _inst_2 f)
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (Continuous.{u2, u1} α β _inst_1 _inst_2 f) -> (Function.Injective.{succ u2, succ u1} α β f) -> (IsOpenMap.{u2, u1} α β _inst_1 _inst_2 f) -> (OpenEmbedding.{u2, u1} α β _inst_1 _inst_2 f)
-Case conversion may be inaccurate. Consider using '#align open_embedding_of_continuous_injective_open openEmbedding_of_continuous_injective_openₓ'. -/
 theorem openEmbedding_of_continuous_injective_open {f : α → β} (h₁ : Continuous f)
     (h₂ : Injective f) (h₃ : IsOpenMap f) : OpenEmbedding f :=
   by
@@ -1056,12 +618,6 @@ theorem openEmbedding_of_continuous_injective_open {f : α → β} (h₁ : Conti
     le_antisymm (h₁.tendsto _).le_comap (@comap_map _ _ (𝓝 a) _ h₂ ▸ comap_mono (h₃.nhds_le _))
 #align open_embedding_of_continuous_injective_open openEmbedding_of_continuous_injective_open
 
-/- warning: open_embedding_iff_continuous_injective_open -> openEmbedding_iff_continuous_injective_open is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, Iff (OpenEmbedding.{u1, u2} α β _inst_1 _inst_2 f) (And (Continuous.{u1, u2} α β _inst_1 _inst_2 f) (And (Function.Injective.{succ u1, succ u2} α β f) (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f)))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, Iff (OpenEmbedding.{u2, u1} α β _inst_1 _inst_2 f) (And (Continuous.{u2, u1} α β _inst_1 _inst_2 f) (And (Function.Injective.{succ u2, succ u1} α β f) (IsOpenMap.{u2, u1} α β _inst_1 _inst_2 f)))
-Case conversion may be inaccurate. Consider using '#align open_embedding_iff_continuous_injective_open openEmbedding_iff_continuous_injective_openₓ'. -/
 theorem openEmbedding_iff_continuous_injective_open {f : α → β} :
     OpenEmbedding f ↔ Continuous f ∧ Injective f ∧ IsOpenMap f :=
   ⟨fun h => ⟨h.Continuous, h.inj, h.IsOpenMap⟩, fun h =>
@@ -1074,46 +630,22 @@ theorem openEmbedding_id : OpenEmbedding (@id α) :=
 #align open_embedding_id openEmbedding_id
 -/
 
-/- warning: open_embedding.comp -> OpenEmbedding.comp is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] {g : β -> γ} {f : α -> β}, (OpenEmbedding.{u2, u3} β γ _inst_2 _inst_3 g) -> (OpenEmbedding.{u1, u2} α β _inst_1 _inst_2 f) -> (OpenEmbedding.{u1, u3} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u2, succ u3} α β γ g f))
-but is expected to have type
-  forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u2} γ] {g : β -> γ} {f : α -> β}, (OpenEmbedding.{u3, u2} β γ _inst_2 _inst_3 g) -> (OpenEmbedding.{u1, u3} α β _inst_1 _inst_2 f) -> (OpenEmbedding.{u1, u2} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u3, succ u2} α β γ g f))
-Case conversion may be inaccurate. Consider using '#align open_embedding.comp OpenEmbedding.compₓ'. -/
 theorem OpenEmbedding.comp {g : β → γ} {f : α → β} (hg : OpenEmbedding g) (hf : OpenEmbedding f) :
     OpenEmbedding (g ∘ f) :=
   ⟨hg.1.comp hf.1, (hg.IsOpenMap.comp hf.IsOpenMap).isOpen_range⟩
 #align open_embedding.comp OpenEmbedding.comp
 
-/- warning: open_embedding.is_open_map_iff -> OpenEmbedding.isOpenMap_iff is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] {g : β -> γ} {f : α -> β}, (OpenEmbedding.{u2, u3} β γ _inst_2 _inst_3 g) -> (Iff (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f) (IsOpenMap.{u1, u3} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u2, succ u3} α β γ g f)))
-but is expected to have type
-  forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u2} γ] {g : β -> γ} {f : α -> β}, (OpenEmbedding.{u3, u2} β γ _inst_2 _inst_3 g) -> (Iff (IsOpenMap.{u1, u3} α β _inst_1 _inst_2 f) (IsOpenMap.{u1, u2} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u3, succ u2} α β γ g f)))
-Case conversion may be inaccurate. Consider using '#align open_embedding.is_open_map_iff OpenEmbedding.isOpenMap_iffₓ'. -/
 theorem OpenEmbedding.isOpenMap_iff {g : β → γ} {f : α → β} (hg : OpenEmbedding g) :
     IsOpenMap f ↔ IsOpenMap (g ∘ f) := by
   simp only [isOpenMap_iff_nhds_le, ← @map_map _ _ _ _ f g, ← hg.map_nhds_eq, map_le_map_iff hg.inj]
 #align open_embedding.is_open_map_iff OpenEmbedding.isOpenMap_iff
 
-/- warning: open_embedding.of_comp_iff -> OpenEmbedding.of_comp_iff is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (f : α -> β) {g : β -> γ}, (OpenEmbedding.{u2, u3} β γ _inst_2 _inst_3 g) -> (Iff (OpenEmbedding.{u1, u3} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u2, succ u3} α β γ g f)) (OpenEmbedding.{u1, u2} α β _inst_1 _inst_2 f))
-but is expected to have type
-  forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u2} γ] (f : α -> β) {g : β -> γ}, (OpenEmbedding.{u3, u2} β γ _inst_2 _inst_3 g) -> (Iff (OpenEmbedding.{u1, u2} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u3, succ u2} α β γ g f)) (OpenEmbedding.{u1, u3} α β _inst_1 _inst_2 f))
-Case conversion may be inaccurate. Consider using '#align open_embedding.of_comp_iff OpenEmbedding.of_comp_iffₓ'. -/
 theorem OpenEmbedding.of_comp_iff (f : α → β) {g : β → γ} (hg : OpenEmbedding g) :
     OpenEmbedding (g ∘ f) ↔ OpenEmbedding f := by
   simp only [openEmbedding_iff_continuous_injective_open, ← hg.is_open_map_iff, ←
     hg.1.continuous_iff, hg.inj.of_comp_iff]
 #align open_embedding.of_comp_iff OpenEmbedding.of_comp_iff
 
-/- warning: open_embedding.of_comp -> OpenEmbedding.of_comp is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (f : α -> β) {g : β -> γ}, (OpenEmbedding.{u2, u3} β γ _inst_2 _inst_3 g) -> (OpenEmbedding.{u1, u3} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u2, succ u3} α β γ g f)) -> (OpenEmbedding.{u1, u2} α β _inst_1 _inst_2 f)
-but is expected to have type
-  forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u2} γ] (f : α -> β) {g : β -> γ}, (OpenEmbedding.{u3, u2} β γ _inst_2 _inst_3 g) -> (OpenEmbedding.{u1, u2} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u3, succ u2} α β γ g f)) -> (OpenEmbedding.{u1, u3} α β _inst_1 _inst_2 f)
-Case conversion may be inaccurate. Consider using '#align open_embedding.of_comp OpenEmbedding.of_compₓ'. -/
 theorem OpenEmbedding.of_comp (f : α → β) {g : β → γ} (hg : OpenEmbedding g)
     (h : OpenEmbedding (g ∘ f)) : OpenEmbedding f :=
   (OpenEmbedding.of_comp_iff f hg).1 h
@@ -1135,43 +667,19 @@ structure ClosedEmbedding (f : α → β) extends Embedding f : Prop where
 
 variable {f : α → β}
 
-/- warning: closed_embedding.tendsto_nhds_iff -> ClosedEmbedding.tendsto_nhds_iff is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β} {ι : Type.{u3}} {g : ι -> α} {a : Filter.{u3} ι} {b : α}, (ClosedEmbedding.{u1, u2} α β _inst_1 _inst_2 f) -> (Iff (Filter.Tendsto.{u3, u1} ι α g a (nhds.{u1} α _inst_1 b)) (Filter.Tendsto.{u3, u2} ι β (Function.comp.{succ u3, succ u1, succ u2} ι α β f g) a (nhds.{u2} β _inst_2 (f b))))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β} {ι : Type.{u3}} {g : ι -> α} {a : Filter.{u3} ι} {b : α}, (ClosedEmbedding.{u2, u1} α β _inst_1 _inst_2 f) -> (Iff (Filter.Tendsto.{u3, u2} ι α g a (nhds.{u2} α _inst_1 b)) (Filter.Tendsto.{u3, u1} ι β (Function.comp.{succ u3, succ u2, succ u1} ι α β f g) a (nhds.{u1} β _inst_2 (f b))))
-Case conversion may be inaccurate. Consider using '#align closed_embedding.tendsto_nhds_iff ClosedEmbedding.tendsto_nhds_iffₓ'. -/
 theorem ClosedEmbedding.tendsto_nhds_iff {ι : Type _} {g : ι → α} {a : Filter ι} {b : α}
     (hf : ClosedEmbedding f) : Tendsto g a (𝓝 b) ↔ Tendsto (f ∘ g) a (𝓝 (f b)) :=
   hf.toEmbedding.tendsto_nhds_iff
 #align closed_embedding.tendsto_nhds_iff ClosedEmbedding.tendsto_nhds_iff
 
-/- warning: closed_embedding.continuous -> ClosedEmbedding.continuous is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (ClosedEmbedding.{u1, u2} α β _inst_1 _inst_2 f) -> (Continuous.{u1, u2} α β _inst_1 _inst_2 f)
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (ClosedEmbedding.{u2, u1} α β _inst_1 _inst_2 f) -> (Continuous.{u2, u1} α β _inst_1 _inst_2 f)
-Case conversion may be inaccurate. Consider using '#align closed_embedding.continuous ClosedEmbedding.continuousₓ'. -/
 theorem ClosedEmbedding.continuous (hf : ClosedEmbedding f) : Continuous f :=
   hf.toEmbedding.Continuous
 #align closed_embedding.continuous ClosedEmbedding.continuous
 
-/- warning: closed_embedding.is_closed_map -> ClosedEmbedding.isClosedMap is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (ClosedEmbedding.{u1, u2} α β _inst_1 _inst_2 f) -> (IsClosedMap.{u1, u2} α β _inst_1 _inst_2 f)
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (ClosedEmbedding.{u2, u1} α β _inst_1 _inst_2 f) -> (IsClosedMap.{u2, u1} α β _inst_1 _inst_2 f)
-Case conversion may be inaccurate. Consider using '#align closed_embedding.is_closed_map ClosedEmbedding.isClosedMapₓ'. -/
 theorem ClosedEmbedding.isClosedMap (hf : ClosedEmbedding f) : IsClosedMap f :=
   hf.toEmbedding.to_inducing.IsClosedMap hf.closed_range
 #align closed_embedding.is_closed_map ClosedEmbedding.isClosedMap
 
-/- warning: closed_embedding.closed_iff_image_closed -> ClosedEmbedding.closed_iff_image_closed is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (ClosedEmbedding.{u1, u2} α β _inst_1 _inst_2 f) -> (forall {s : Set.{u1} α}, Iff (IsClosed.{u1} α _inst_1 s) (IsClosed.{u2} β _inst_2 (Set.image.{u1, u2} α β f s)))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (ClosedEmbedding.{u2, u1} α β _inst_1 _inst_2 f) -> (forall {s : Set.{u2} α}, Iff (IsClosed.{u2} α _inst_1 s) (IsClosed.{u1} β _inst_2 (Set.image.{u2, u1} α β f s)))
-Case conversion may be inaccurate. Consider using '#align closed_embedding.closed_iff_image_closed ClosedEmbedding.closed_iff_image_closedₓ'. -/
 theorem ClosedEmbedding.closed_iff_image_closed (hf : ClosedEmbedding f) {s : Set α} :
     IsClosed s ↔ IsClosed (f '' s) :=
   ⟨hf.IsClosedMap s, fun h =>
@@ -1180,12 +688,6 @@ theorem ClosedEmbedding.closed_iff_image_closed (hf : ClosedEmbedding f) {s : Se
     apply preimage_image_eq _ hf.inj⟩
 #align closed_embedding.closed_iff_image_closed ClosedEmbedding.closed_iff_image_closed
 
-/- warning: closed_embedding.closed_iff_preimage_closed -> ClosedEmbedding.closed_iff_preimage_closed is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (ClosedEmbedding.{u1, u2} α β _inst_1 _inst_2 f) -> (forall {s : Set.{u2} β}, (HasSubset.Subset.{u2} (Set.{u2} β) (Set.hasSubset.{u2} β) s (Set.range.{u2, succ u1} β α f)) -> (Iff (IsClosed.{u2} β _inst_2 s) (IsClosed.{u1} α _inst_1 (Set.preimage.{u1, u2} α β f s))))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (ClosedEmbedding.{u2, u1} α β _inst_1 _inst_2 f) -> (forall {s : Set.{u1} β}, (HasSubset.Subset.{u1} (Set.{u1} β) (Set.instHasSubsetSet.{u1} β) s (Set.range.{u1, succ u2} β α f)) -> (Iff (IsClosed.{u1} β _inst_2 s) (IsClosed.{u2} α _inst_1 (Set.preimage.{u2, u1} α β f s))))
-Case conversion may be inaccurate. Consider using '#align closed_embedding.closed_iff_preimage_closed ClosedEmbedding.closed_iff_preimage_closedₓ'. -/
 theorem ClosedEmbedding.closed_iff_preimage_closed (hf : ClosedEmbedding f) {s : Set β}
     (hs : s ⊆ range f) : IsClosed s ↔ IsClosed (f ⁻¹' s) :=
   by
@@ -1193,23 +695,11 @@ theorem ClosedEmbedding.closed_iff_preimage_closed (hf : ClosedEmbedding f) {s :
   rwa [image_preimage_eq_inter_range, inter_eq_self_of_subset_left]
 #align closed_embedding.closed_iff_preimage_closed ClosedEmbedding.closed_iff_preimage_closed
 
-/- warning: closed_embedding_of_embedding_closed -> closedEmbedding_of_embedding_closed is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (Embedding.{u1, u2} α β _inst_1 _inst_2 f) -> (IsClosedMap.{u1, u2} α β _inst_1 _inst_2 f) -> (ClosedEmbedding.{u1, u2} α β _inst_1 _inst_2 f)
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (Embedding.{u2, u1} α β _inst_1 _inst_2 f) -> (IsClosedMap.{u2, u1} α β _inst_1 _inst_2 f) -> (ClosedEmbedding.{u2, u1} α β _inst_1 _inst_2 f)
-Case conversion may be inaccurate. Consider using '#align closed_embedding_of_embedding_closed closedEmbedding_of_embedding_closedₓ'. -/
 theorem closedEmbedding_of_embedding_closed (h₁ : Embedding f) (h₂ : IsClosedMap f) :
     ClosedEmbedding f :=
   ⟨h₁, by convert h₂ univ isClosed_univ <;> simp⟩
 #align closed_embedding_of_embedding_closed closedEmbedding_of_embedding_closed
 
-/- warning: closed_embedding_of_continuous_injective_closed -> closedEmbedding_of_continuous_injective_closed is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (Continuous.{u1, u2} α β _inst_1 _inst_2 f) -> (Function.Injective.{succ u1, succ u2} α β f) -> (IsClosedMap.{u1, u2} α β _inst_1 _inst_2 f) -> (ClosedEmbedding.{u1, u2} α β _inst_1 _inst_2 f)
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (Continuous.{u2, u1} α β _inst_1 _inst_2 f) -> (Function.Injective.{succ u2, succ u1} α β f) -> (IsClosedMap.{u2, u1} α β _inst_1 _inst_2 f) -> (ClosedEmbedding.{u2, u1} α β _inst_1 _inst_2 f)
-Case conversion may be inaccurate. Consider using '#align closed_embedding_of_continuous_injective_closed closedEmbedding_of_continuous_injective_closedₓ'. -/
 theorem closedEmbedding_of_continuous_injective_closed (h₁ : Continuous f) (h₂ : Injective f)
     (h₃ : IsClosedMap f) : ClosedEmbedding f :=
   by
@@ -1230,12 +720,6 @@ theorem closedEmbedding_id : ClosedEmbedding (@id α) :=
 #align closed_embedding_id closedEmbedding_id
 -/
 
-/- warning: closed_embedding.comp -> ClosedEmbedding.comp is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] {g : β -> γ} {f : α -> β}, (ClosedEmbedding.{u2, u3} β γ _inst_2 _inst_3 g) -> (ClosedEmbedding.{u1, u2} α β _inst_1 _inst_2 f) -> (ClosedEmbedding.{u1, u3} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u2, succ u3} α β γ g f))
-but is expected to have type
-  forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u2} γ] {g : β -> γ} {f : α -> β}, (ClosedEmbedding.{u3, u2} β γ _inst_2 _inst_3 g) -> (ClosedEmbedding.{u1, u3} α β _inst_1 _inst_2 f) -> (ClosedEmbedding.{u1, u2} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u3, succ u2} α β γ g f))
-Case conversion may be inaccurate. Consider using '#align closed_embedding.comp ClosedEmbedding.compₓ'. -/
 theorem ClosedEmbedding.comp {g : β → γ} {f : α → β} (hg : ClosedEmbedding g)
     (hf : ClosedEmbedding f) : ClosedEmbedding (g ∘ f) :=
   ⟨hg.toEmbedding.comp hf.toEmbedding,
@@ -1243,12 +727,6 @@ theorem ClosedEmbedding.comp {g : β → γ} {f : α → β} (hg : ClosedEmbeddi
       rw [range_comp, ← hg.closed_iff_image_closed] <;> exact hf.closed_range⟩
 #align closed_embedding.comp ClosedEmbedding.comp
 
-/- warning: closed_embedding.closure_image_eq -> ClosedEmbedding.closure_image_eq is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (ClosedEmbedding.{u1, u2} α β _inst_1 _inst_2 f) -> (forall (s : Set.{u1} α), Eq.{succ u2} (Set.{u2} β) (closure.{u2} β _inst_2 (Set.image.{u1, u2} α β f s)) (Set.image.{u1, u2} α β f (closure.{u1} α _inst_1 s)))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (ClosedEmbedding.{u2, u1} α β _inst_1 _inst_2 f) -> (forall (s : Set.{u2} α), Eq.{succ u1} (Set.{u1} β) (closure.{u1} β _inst_2 (Set.image.{u2, u1} α β f s)) (Set.image.{u2, u1} α β f (closure.{u2} α _inst_1 s)))
-Case conversion may be inaccurate. Consider using '#align closed_embedding.closure_image_eq ClosedEmbedding.closure_image_eqₓ'. -/
 theorem ClosedEmbedding.closure_image_eq {f : α → β} (hf : ClosedEmbedding f) (s : Set α) :
     closure (f '' s) = f '' closure s :=
   (hf.IsClosedMap.closure_image_subset _).antisymm
Diff
@@ -97,9 +97,7 @@ Case conversion may be inaccurate. Consider using '#align inducing_of_inducing_c
 theorem inducing_of_inducing_compose {f : α → β} {g : β → γ} (hf : Continuous f) (hg : Continuous g)
     (hgf : Inducing (g ∘ f)) : Inducing f :=
   ⟨le_antisymm (by rwa [← continuous_iff_le_induced])
-      (by
-        rw [hgf.induced, ← continuous_iff_le_induced]
-        apply hg.comp continuous_induced_dom)⟩
+      (by rw [hgf.induced, ← continuous_iff_le_induced]; apply hg.comp continuous_induced_dom)⟩
 #align inducing_of_inducing_compose inducing_of_inducing_compose
 
 /- warning: inducing_iff_nhds -> inducing_iff_nhds is a dubious translation:
@@ -240,8 +238,7 @@ but is expected to have type
   forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (Inducing.{u2, u1} α β _inst_1 _inst_2 f) -> (forall (s : Set.{u2} α), Eq.{succ u2} (Set.{u2} α) (closure.{u2} α _inst_1 s) (Set.preimage.{u2, u1} α β f (closure.{u1} β _inst_2 (Set.image.{u2, u1} α β f s))))
 Case conversion may be inaccurate. Consider using '#align inducing.closure_eq_preimage_closure_image Inducing.closure_eq_preimage_closure_imageₓ'. -/
 theorem Inducing.closure_eq_preimage_closure_image {f : α → β} (hf : Inducing f) (s : Set α) :
-    closure s = f ⁻¹' closure (f '' s) := by
-  ext x
+    closure s = f ⁻¹' closure (f '' s) := by ext x;
   rw [Set.mem_preimage, ← closure_induced, hf.induced]
 #align inducing.closure_eq_preimage_closure_image Inducing.closure_eq_preimage_closure_image
 
@@ -507,9 +504,7 @@ protected theorem of_quotientMap_compose (hf : Continuous f) (hg : Continuous g)
     (hgf : QuotientMap (g ∘ f)) : QuotientMap g :=
   ⟨hgf.1.of_comp,
     le_antisymm
-      (by
-        rw [hgf.right, ← continuous_iff_coinduced_le]
-        apply continuous_coinduced_rng.comp hf)
+      (by rw [hgf.right, ← continuous_iff_coinduced_le]; apply continuous_coinduced_rng.comp hf)
       (by rwa [← continuous_iff_coinduced_le])⟩
 #align quotient_map.of_quotient_map_compose QuotientMap.of_quotientMap_compose
 
@@ -610,9 +605,7 @@ lean 3 declaration is
 but is expected to have type
   forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (IsOpenMap.{u2, u1} α β _inst_1 _inst_2 f) -> (IsOpen.{u1} β _inst_2 (Set.range.{u1, succ u2} β α f))
 Case conversion may be inaccurate. Consider using '#align is_open_map.is_open_range IsOpenMap.isOpen_rangeₓ'. -/
-theorem isOpen_range (hf : IsOpenMap f) : IsOpen (range f) :=
-  by
-  rw [← image_univ]
+theorem isOpen_range (hf : IsOpenMap f) : IsOpen (range f) := by rw [← image_univ];
   exact hf _ isOpen_univ
 #align is_open_map.is_open_range IsOpenMap.isOpen_range
 
@@ -862,10 +855,7 @@ but is expected to have type
   forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u2} γ] {g : β -> γ} {f : α -> β}, (IsClosedMap.{u3, u2} β γ _inst_2 _inst_3 g) -> (IsClosedMap.{u1, u3} α β _inst_1 _inst_2 f) -> (IsClosedMap.{u1, u2} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u3, succ u2} α β γ g f))
 Case conversion may be inaccurate. Consider using '#align is_closed_map.comp IsClosedMap.compₓ'. -/
 protected theorem comp {g : β → γ} {f : α → β} (hg : IsClosedMap g) (hf : IsClosedMap f) :
-    IsClosedMap (g ∘ f) := by
-  intro s hs
-  rw [image_comp]
-  exact hg _ (hf _ hs)
+    IsClosedMap (g ∘ f) := by intro s hs; rw [image_comp]; exact hg _ (hf _ hs)
 #align is_closed_map.comp IsClosedMap.comp
 
 /- warning: is_closed_map.closure_image_subset -> IsClosedMap.closure_image_subset is a dubious translation:
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Mario Carneiro, Patrick Massot
 
 ! This file was ported from Lean 3 source module topology.maps
-! leanprover-community/mathlib commit e46da4e335b8671848ac711ccb34b42538c0d800
+! leanprover-community/mathlib commit d91e7f7a7f1c7e9f0e18fdb6bde4f652004c735d
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -465,11 +465,17 @@ lean 3 declaration is
 but is expected to have type
   forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, Iff (QuotientMap.{u2, u1} α β _inst_1 _inst_2 f) (And (Function.Surjective.{succ u2, succ u1} α β f) (forall (s : Set.{u1} β), Iff (IsOpen.{u1} β _inst_2 s) (IsOpen.{u2} α _inst_1 (Set.preimage.{u2, u1} α β f s))))
 Case conversion may be inaccurate. Consider using '#align quotient_map_iff quotientMap_iffₓ'. -/
-theorem quotientMap_iff {α β : Type _} [TopologicalSpace α] [TopologicalSpace β] {f : α → β} :
+theorem quotientMap_iff [TopologicalSpace α] [TopologicalSpace β] {f : α → β} :
     QuotientMap f ↔ Surjective f ∧ ∀ s : Set β, IsOpen s ↔ IsOpen (f ⁻¹' s) :=
   and_congr Iff.rfl topologicalSpace_eq_iff
 #align quotient_map_iff quotientMap_iff
 
+theorem quotientMap_iff_closed [TopologicalSpace α] [TopologicalSpace β] {f : α → β} :
+    QuotientMap f ↔ Surjective f ∧ ∀ s : Set β, IsClosed s ↔ IsClosed (f ⁻¹' s) :=
+  quotientMap_iff.trans <|
+    Iff.rfl.And <| compl_surjective.forall.trans <| by simp only [isOpen_compl_iff, preimage_compl]
+#align quotient_map_iff_closed quotientMap_iff_closed
+
 namespace QuotientMap
 
 variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ] [TopologicalSpace δ]
@@ -565,8 +571,8 @@ but is expected to have type
   forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (QuotientMap.{u2, u1} α β _inst_1 _inst_2 f) -> (forall {s : Set.{u1} β}, Iff (IsClosed.{u2} α _inst_1 (Set.preimage.{u2, u1} α β f s)) (IsClosed.{u1} β _inst_2 s))
 Case conversion may be inaccurate. Consider using '#align quotient_map.is_closed_preimage QuotientMap.isClosed_preimageₓ'. -/
 protected theorem isClosed_preimage (hf : QuotientMap f) {s : Set β} :
-    IsClosed (f ⁻¹' s) ↔ IsClosed s := by
-  simp only [← isOpen_compl_iff, ← preimage_compl, hf.is_open_preimage]
+    IsClosed (f ⁻¹' s) ↔ IsClosed s :=
+  ((quotientMap_iff_closed.1 hf).2 s).symm
 #align quotient_map.is_closed_preimage QuotientMap.isClosed_preimage
 
 end QuotientMap
@@ -904,6 +910,12 @@ theorem closed_range {f : α → β} (hf : IsClosedMap f) : IsClosed (range f) :
   @image_univ _ _ f ▸ hf _ isClosed_univ
 #align is_closed_map.closed_range IsClosedMap.closed_range
 
+theorem to_quotientMap {f : α → β} (hcl : IsClosedMap f) (hcont : Continuous f)
+    (hsurj : Surjective f) : QuotientMap f :=
+  quotientMap_iff_closed.2
+    ⟨hsurj, fun s => ⟨fun hs => hs.Preimage hcont, fun hs => hsurj.image_preimage s ▸ hcl _ hs⟩⟩
+#align is_closed_map.to_quotient_map IsClosedMap.to_quotientMap
+
 end IsClosedMap
 
 /- warning: inducing.is_closed_map -> Inducing.isClosedMap is a dubious translation:
Diff
@@ -656,7 +656,7 @@ theorem image_interior_subset (hf : IsOpenMap f) (s : Set α) :
 
 /- warning: is_open_map.nhds_le -> IsOpenMap.nhds_le is a dubious translation:
 lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f) -> (forall (a : α), LE.le.{u2} (Filter.{u2} β) (Preorder.toLE.{u2} (Filter.{u2} β) (PartialOrder.toPreorder.{u2} (Filter.{u2} β) (Filter.partialOrder.{u2} β))) (nhds.{u2} β _inst_2 (f a)) (Filter.map.{u1, u2} α β f (nhds.{u1} α _inst_1 a)))
+  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f) -> (forall (a : α), LE.le.{u2} (Filter.{u2} β) (Preorder.toHasLe.{u2} (Filter.{u2} β) (PartialOrder.toPreorder.{u2} (Filter.{u2} β) (Filter.partialOrder.{u2} β))) (nhds.{u2} β _inst_2 (f a)) (Filter.map.{u1, u2} α β f (nhds.{u1} α _inst_1 a)))
 but is expected to have type
   forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, (IsOpenMap.{u2, u1} α β _inst_1 _inst_2 f) -> (forall (a : α), LE.le.{u1} (Filter.{u1} β) (Preorder.toLE.{u1} (Filter.{u1} β) (PartialOrder.toPreorder.{u1} (Filter.{u1} β) (Filter.instPartialOrderFilter.{u1} β))) (nhds.{u1} β _inst_2 (f a)) (Filter.map.{u2, u1} α β f (nhds.{u2} α _inst_1 a)))
 Case conversion may be inaccurate. Consider using '#align is_open_map.nhds_le IsOpenMap.nhds_leₓ'. -/
@@ -666,7 +666,7 @@ theorem nhds_le (hf : IsOpenMap f) (a : α) : 𝓝 (f a) ≤ (𝓝 a).map f :=
 
 /- warning: is_open_map.of_nhds_le -> IsOpenMap.of_nhds_le is a dubious translation:
 lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (forall (a : α), LE.le.{u2} (Filter.{u2} β) (Preorder.toLE.{u2} (Filter.{u2} β) (PartialOrder.toPreorder.{u2} (Filter.{u2} β) (Filter.partialOrder.{u2} β))) (nhds.{u2} β _inst_2 (f a)) (Filter.map.{u1, u2} α β f (nhds.{u1} α _inst_1 a))) -> (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f)
+  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (forall (a : α), LE.le.{u2} (Filter.{u2} β) (Preorder.toHasLe.{u2} (Filter.{u2} β) (PartialOrder.toPreorder.{u2} (Filter.{u2} β) (Filter.partialOrder.{u2} β))) (nhds.{u2} β _inst_2 (f a)) (Filter.map.{u1, u2} α β f (nhds.{u1} α _inst_1 a))) -> (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f)
 but is expected to have type
   forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, (forall (a : α), LE.le.{u2} (Filter.{u2} β) (Preorder.toLE.{u2} (Filter.{u2} β) (PartialOrder.toPreorder.{u2} (Filter.{u2} β) (Filter.instPartialOrderFilter.{u2} β))) (nhds.{u2} β _inst_2 (f a)) (Filter.map.{u1, u2} α β f (nhds.{u1} α _inst_1 a))) -> (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f)
 Case conversion may be inaccurate. Consider using '#align is_open_map.of_nhds_le IsOpenMap.of_nhds_leₓ'. -/
@@ -787,7 +787,7 @@ end IsOpenMap
 
 /- warning: is_open_map_iff_nhds_le -> isOpenMap_iff_nhds_le is a dubious translation:
 lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, Iff (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f) (forall (a : α), LE.le.{u2} (Filter.{u2} β) (Preorder.toLE.{u2} (Filter.{u2} β) (PartialOrder.toPreorder.{u2} (Filter.{u2} β) (Filter.partialOrder.{u2} β))) (nhds.{u2} β _inst_2 (f a)) (Filter.map.{u1, u2} α β f (nhds.{u1} α _inst_1 a)))
+  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : α -> β}, Iff (IsOpenMap.{u1, u2} α β _inst_1 _inst_2 f) (forall (a : α), LE.le.{u2} (Filter.{u2} β) (Preorder.toHasLe.{u2} (Filter.{u2} β) (PartialOrder.toPreorder.{u2} (Filter.{u2} β) (Filter.partialOrder.{u2} β))) (nhds.{u2} β _inst_2 (f a)) (Filter.map.{u1, u2} α β f (nhds.{u1} α _inst_1 a)))
 but is expected to have type
   forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : α -> β}, Iff (IsOpenMap.{u2, u1} α β _inst_1 _inst_2 f) (forall (a : α), LE.le.{u1} (Filter.{u1} β) (Preorder.toLE.{u1} (Filter.{u1} β) (PartialOrder.toPreorder.{u1} (Filter.{u1} β) (Filter.instPartialOrderFilter.{u1} β))) (nhds.{u1} β _inst_2 (f a)) (Filter.map.{u2, u1} α β f (nhds.{u2} α _inst_1 a)))
 Case conversion may be inaccurate. Consider using '#align is_open_map_iff_nhds_le isOpenMap_iff_nhds_leₓ'. -/
Diff
@@ -130,7 +130,7 @@ but is expected to have type
 Case conversion may be inaccurate. Consider using '#align inducing.nhds_set_eq_comap Inducing.nhdsSet_eq_comapₓ'. -/
 theorem Inducing.nhdsSet_eq_comap {f : α → β} (hf : Inducing f) (s : Set α) :
     𝓝ˢ s = comap f (𝓝ˢ (f '' s)) := by
-  simp only [nhdsSet, supₛ_image, comap_supr, hf.nhds_eq_comap, supᵢ_image]
+  simp only [nhdsSet, sSup_image, comap_supr, hf.nhds_eq_comap, iSup_image]
 #align inducing.nhds_set_eq_comap Inducing.nhdsSet_eq_comap
 
 /- warning: inducing.map_nhds_eq -> Inducing.map_nhds_eq is a dubious translation:
Diff
@@ -980,7 +980,7 @@ theorem OpenEmbedding.open_iff_image_open {f : α → β} (hf : OpenEmbedding f)
     IsOpen s ↔ IsOpen (f '' s) :=
   ⟨hf.IsOpenMap s, fun h =>
     by
-    convert ← h.preimage hf.to_embedding.continuous
+    convert← h.preimage hf.to_embedding.continuous
     apply preimage_image_eq _ hf.inj⟩
 #align open_embedding.open_iff_image_open OpenEmbedding.open_iff_image_open
 
@@ -1014,7 +1014,7 @@ Case conversion may be inaccurate. Consider using '#align open_embedding.open_if
 theorem OpenEmbedding.open_iff_preimage_open {f : α → β} (hf : OpenEmbedding f) {s : Set β}
     (hs : s ⊆ range f) : IsOpen s ↔ IsOpen (f ⁻¹' s) :=
   by
-  convert ← hf.open_iff_image_open.symm
+  convert← hf.open_iff_image_open.symm
   rwa [image_preimage_eq_inter_range, inter_eq_self_of_subset_left]
 #align open_embedding.open_iff_preimage_open OpenEmbedding.open_iff_preimage_open
 
@@ -1174,7 +1174,7 @@ theorem ClosedEmbedding.closed_iff_image_closed (hf : ClosedEmbedding f) {s : Se
     IsClosed s ↔ IsClosed (f '' s) :=
   ⟨hf.IsClosedMap s, fun h =>
     by
-    convert ← continuous_iff_is_closed.mp hf.continuous _ h
+    convert← continuous_iff_is_closed.mp hf.continuous _ h
     apply preimage_image_eq _ hf.inj⟩
 #align closed_embedding.closed_iff_image_closed ClosedEmbedding.closed_iff_image_closed
 
@@ -1187,7 +1187,7 @@ Case conversion may be inaccurate. Consider using '#align closed_embedding.close
 theorem ClosedEmbedding.closed_iff_preimage_closed (hf : ClosedEmbedding f) {s : Set β}
     (hs : s ⊆ range f) : IsClosed s ↔ IsClosed (f ⁻¹' s) :=
   by
-  convert ← hf.closed_iff_image_closed.symm
+  convert← hf.closed_iff_image_closed.symm
   rwa [image_preimage_eq_inter_range, inter_eq_self_of_subset_left]
 #align closed_embedding.closed_iff_preimage_closed ClosedEmbedding.closed_iff_preimage_closed
 
Diff
@@ -686,7 +686,7 @@ theorem of_sections {f : α → β}
     let ⟨g, hgc, hgx, hgf⟩ := h x
     calc
       𝓝 (f x) = map f (map g (𝓝 (f x))) := by rw [map_map, hgf.comp_eq_id, map_id]
-      _ ≤ map f (𝓝 (g (f x))) := map_mono hgc
+      _ ≤ map f (𝓝 (g (f x))) := (map_mono hgc)
       _ = map f (𝓝 x) := by rw [hgx]
       
 #align is_open_map.of_sections IsOpenMap.of_sections

Changes in mathlib4

mathlib3
mathlib4
feat(Topology/Maps): add *.of_subsingleton and *.of_isEmpty (#11818)

Also use OpenEmbedding.of_subsingleton to golf AlgebraicGeometry.isOpenImmersion_of_isEmpty.

Diff
@@ -176,6 +176,9 @@ theorem dense_iff (hf : Inducing f) {s : Set X} :
   simp only [Dense, hf.closure_eq_preimage_closure_image, mem_preimage]
 #align inducing.dense_iff Inducing.dense_iff
 
+theorem of_subsingleton [Subsingleton X] (f : X → Y) : Inducing f :=
+  ⟨Subsingleton.elim _ _⟩
+
 end Inducing
 
 end Inducing
@@ -251,6 +254,9 @@ theorem Embedding.discreteTopology [DiscreteTopology Y] (hf : Embedding f) : Dis
   .of_continuous_injective hf.continuous hf.inj
 #align embedding.discrete_topology Embedding.discreteTopology
 
+theorem Embedding.of_subsingleton [Subsingleton X] (f : X → Y) : Embedding f :=
+  ⟨.of_subsingleton f, f.injective_of_subsingleton⟩
+
 end Embedding
 
 section QuotientMap
@@ -417,6 +423,8 @@ theorem preimage_frontier_eq_frontier_preimage (hf : IsOpenMap f) (hfc : Continu
     hf.preimage_closure_eq_closure_preimage hfc]
 #align is_open_map.preimage_frontier_eq_frontier_preimage IsOpenMap.preimage_frontier_eq_frontier_preimage
 
+theorem of_isEmpty [h : IsEmpty X] (f : X → Y) : IsOpenMap f := of_nhds_le h.elim
+
 end IsOpenMap
 
 theorem isOpenMap_iff_nhds_le : IsOpenMap f ↔ ∀ x : X, 𝓝 (f x) ≤ (𝓝 x).map f :=
@@ -630,6 +638,9 @@ theorem of_comp (f : X → Y) (hg : OpenEmbedding g)
   (OpenEmbedding.of_comp_iff f hg).1 h
 #align open_embedding.of_comp OpenEmbedding.of_comp
 
+theorem of_isEmpty [IsEmpty X] (f : X → Y) : OpenEmbedding f :=
+  openEmbedding_of_embedding_open (.of_subsingleton f) (IsOpenMap.of_isEmpty f)
+
 end OpenEmbedding
 
 end OpenEmbedding
chore: rename open_range to isOpen_range, closed_range to isClosed_range (#11438)

All these lemmas refer to the range of some function being open/range (i.e. isOpen or isClosed).

Diff
@@ -472,9 +472,11 @@ theorem of_nonempty (h : ∀ s, IsClosed s → s.Nonempty → IsClosed (f '' s))
   · exact h s hs h2s
 #align is_closed_map.of_nonempty IsClosedMap.of_nonempty
 
-theorem closed_range (hf : IsClosedMap f) : IsClosed (range f) :=
+theorem isClosed_range (hf : IsClosedMap f) : IsClosed (range f) :=
   @image_univ _ _ f ▸ hf _ isClosed_univ
-#align is_closed_map.closed_range IsClosedMap.closed_range
+#align is_closed_map.closed_range IsClosedMap.isClosed_range
+
+@[deprecated] alias closed_range := isClosed_range -- 2024-03-17
 
 theorem to_quotientMap (hcl : IsClosedMap f) (hcont : Continuous f)
     (hsurj : Surjective f) : QuotientMap f :=
@@ -535,12 +537,12 @@ section OpenEmbedding
 variable [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z]
 
 theorem OpenEmbedding.isOpenMap (hf : OpenEmbedding f) : IsOpenMap f :=
-  hf.toEmbedding.toInducing.isOpenMap hf.open_range
+  hf.toEmbedding.toInducing.isOpenMap hf.isOpen_range
 #align open_embedding.is_open_map OpenEmbedding.isOpenMap
 
 theorem OpenEmbedding.map_nhds_eq (hf : OpenEmbedding f) (x : X) :
     map f (𝓝 x) = 𝓝 (f x) :=
-  hf.toEmbedding.map_nhds_of_mem _ <| hf.open_range.mem_nhds <| mem_range_self _
+  hf.toEmbedding.map_nhds_of_mem _ <| hf.isOpen_range.mem_nhds <| mem_range_self _
 #align open_embedding.map_nhds_eq OpenEmbedding.map_nhds_eq
 
 theorem OpenEmbedding.open_iff_image_open (hf : OpenEmbedding f) {s : Set X} :
@@ -648,7 +650,7 @@ theorem continuous (hf : ClosedEmbedding f) : Continuous f :=
 #align closed_embedding.continuous ClosedEmbedding.continuous
 
 theorem isClosedMap (hf : ClosedEmbedding f) : IsClosedMap f :=
-  hf.toEmbedding.toInducing.isClosedMap hf.closed_range
+  hf.toEmbedding.toInducing.isClosedMap hf.isClosed_range
 #align closed_embedding.is_closed_map ClosedEmbedding.isClosedMap
 
 theorem closed_iff_image_closed (hf : ClosedEmbedding f) {s : Set X} :
@@ -677,12 +679,12 @@ theorem _root_.closedEmbedding_of_continuous_injective_closed (h₁ : Continuous
 #align closed_embedding_of_continuous_injective_closed closedEmbedding_of_continuous_injective_closed
 
 theorem _root_.closedEmbedding_id : ClosedEmbedding (@id X) :=
-  ⟨embedding_id, IsClosedMap.id.closed_range⟩
+  ⟨embedding_id, IsClosedMap.id.isClosed_range⟩
 #align closed_embedding_id closedEmbedding_id
 
 theorem comp (hg : ClosedEmbedding g) (hf : ClosedEmbedding f) :
     ClosedEmbedding (g ∘ f) :=
-  ⟨hg.toEmbedding.comp hf.toEmbedding, (hg.isClosedMap.comp hf.isClosedMap).closed_range⟩
+  ⟨hg.toEmbedding.comp hf.toEmbedding, (hg.isClosedMap.comp hf.isClosedMap).isClosed_range⟩
 #align closed_embedding.comp ClosedEmbedding.comp
 
 theorem closure_image_eq (hf : ClosedEmbedding f) (s : Set X) :
feat: review and expand API on behavior of topological bases under some constructions (#10732)

The main addition is IsTopologicalBasis.inf (see https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/Inf.20of.20a.20pair.20of.20topologies/near/419989448), and I also reordered things to be in the more typical order (deducing the Pi version from the iInf version rather than the converse).

Also a few extra golfs and variations.

Co-authored-by: Yury G. Kudryashov <urkud@urkud.name> Co-authored-by: Christopher Hoskin <christopher.hoskin@gmail.com> Co-authored-by: Christopher Hoskin <christopher.hoskin@overleaf.com>

Diff
@@ -84,6 +84,10 @@ theorem nhds_eq_comap (hf : Inducing f) : ∀ x : X, 𝓝 x = comap f (𝓝 <| f
   inducing_iff_nhds.1 hf
 #align inducing.nhds_eq_comap Inducing.nhds_eq_comap
 
+theorem basis_nhds {p : ι → Prop} {s : ι → Set Y} (hf : Inducing f) {x : X}
+    (h_basis : (𝓝 (f x)).HasBasis p s) : (𝓝 x).HasBasis p (preimage f ∘ s) :=
+  hf.nhds_eq_comap x ▸ h_basis.comap f
+
 theorem nhdsSet_eq_comap (hf : Inducing f) (s : Set X) :
     𝓝ˢ s = comap f (𝓝ˢ (f '' s)) := by
   simp only [nhdsSet, sSup_image, comap_iSup, hf.nhds_eq_comap, iSup_image]
chore: classify new lemma porting notes (#11217)

Classifies by adding issue number #10756 to porting notes claiming anything semantically equivalent to:

  • "new lemma"
  • "added lemma"
Diff
@@ -98,7 +98,7 @@ theorem map_nhds_of_mem (hf : Inducing f) (x : X) (h : range f ∈ 𝓝 (f x)) :
   hf.induced.symm ▸ map_nhds_induced_of_mem h
 #align inducing.map_nhds_of_mem Inducing.map_nhds_of_mem
 
--- Porting note: new lemma
+-- Porting note (#10756): new lemma
 theorem mapClusterPt_iff (hf : Inducing f) {x : X} {l : Filter X} :
     MapClusterPt (f x) l f ↔ ClusterPt x l := by
   delta MapClusterPt ClusterPt
style: homogenise porting notes (#11145)

Homogenises porting notes via capitalisation and addition of whitespace.

It makes the following changes:

  • converts "--porting note" into "-- Porting note";
  • converts "porting note" into "Porting note".
Diff
@@ -98,7 +98,7 @@ theorem map_nhds_of_mem (hf : Inducing f) (x : X) (h : range f ∈ 𝓝 (f x)) :
   hf.induced.symm ▸ map_nhds_induced_of_mem h
 #align inducing.map_nhds_of_mem Inducing.map_nhds_of_mem
 
--- porting note: new lemma
+-- Porting note: new lemma
 theorem mapClusterPt_iff (hf : Inducing f) {x : X} {l : Filter X} :
     MapClusterPt (f x) l f ↔ ClusterPt x l := by
   delta MapClusterPt ClusterPt
chore(Topology): move some definitions to new files (#10151)

In some cases, the order of implicit arguments changed because now they appear in a different order in variables.

Also, some definitions used greek letters for topological spaces, changed to X/Y.

Diff
@@ -4,7 +4,6 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Mario Carneiro, Patrick Massot
 -/
 import Mathlib.Topology.Order
-import Mathlib.Topology.NhdsSet
 
 #align_import topology.maps from "leanprover-community/mathlib"@"d91e7f7a7f1c7e9f0e18fdb6bde4f652004c735d"
 
@@ -53,16 +52,6 @@ variable {X : Type*} {Y : Type*} {Z : Type*} {ι : Type*} {f : X → Y} {g : Y 
 
 section Inducing
 
-/-- A function `f : X → Y` between topological spaces is inducing if the topology on `X` is induced
-by the topology on `Y` through `f`, meaning that a set `s : Set X` is open iff it is the preimage
-under `f` of some open set `t : Set Y`. -/
-@[mk_iff]
-structure Inducing [tX : TopologicalSpace X] [tY : TopologicalSpace Y] (f : X → Y) : Prop where
-  /-- The topology on the domain is equal to the induced topology. -/
-  induced : tX = tY.induced f
-#align inducing Inducing
-#align inducing_iff inducing_iff
-
 variable [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z]
 
 theorem inducing_induced (f : X → Y) : @Inducing X Y (TopologicalSpace.induced f ‹_›) _ f :=
@@ -189,16 +178,6 @@ end Inducing
 
 section Embedding
 
-/-- A function between topological spaces is an embedding if it is injective,
-  and for all `s : Set X`, `s` is open iff it is the preimage of an open set. -/
-@[mk_iff]
-structure Embedding [TopologicalSpace X] [TopologicalSpace Y] (f : X → Y) extends
-  Inducing f : Prop where
-  /-- A topological embedding is injective. -/
-  inj : Injective f
-#align embedding Embedding
-#align embedding_iff embedding_iff
-
 theorem Function.Injective.embedding_induced [t : TopologicalSpace Y] (hf : Injective f) :
     @_root_.Embedding X Y (t.induced f) t f :=
   @_root_.Embedding.mk X Y (t.induced f) t _ (inducing_induced f) hf
@@ -271,12 +250,6 @@ theorem Embedding.discreteTopology [DiscreteTopology Y] (hf : Embedding f) : Dis
 end Embedding
 
 section QuotientMap
-/-- A function between topological spaces is a quotient map if it is surjective,
-  and for all `s : Set Y`, `s` is open iff its preimage is an open set. -/
-def QuotientMap {X : Type*} {Y : Type*} [tX : TopologicalSpace X] [tY : TopologicalSpace Y]
-    (f : X → Y) : Prop :=
-  Surjective f ∧ tY = tX.coinduced f
-#align quotient_map QuotientMap
 
 variable [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z]
 
@@ -339,12 +312,6 @@ end QuotientMap
 end QuotientMap
 
 section OpenMap
-/-- A map `f : X → Y` is said to be an *open map*, if the image of any open `U : Set X`
-is open in `Y`. -/
-def IsOpenMap [TopologicalSpace X] [TopologicalSpace Y] (f : X → Y) :=
-  ∀ U : Set X, IsOpen U → IsOpen (f '' U)
-#align is_open_map IsOpenMap
-
 variable [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z]
 
 namespace IsOpenMap
@@ -471,12 +438,6 @@ section IsClosedMap
 
 variable [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z]
 
-/-- A map `f : X → Y` is said to be a *closed map*, if the image of any closed `U : Set X`
-is closed in `Y`. -/
-def IsClosedMap (f : X → Y) :=
-  ∀ U : Set X, IsClosed U → IsClosed (f '' U)
-#align is_closed_map IsClosedMap
-
 namespace IsClosedMap
 open Function
 
@@ -569,14 +530,6 @@ section OpenEmbedding
 
 variable [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z]
 
-/-- An open embedding is an embedding with open image. -/
-@[mk_iff]
-structure OpenEmbedding (f : X → Y) extends Embedding f : Prop where
-  /-- The range of an open embedding is an open set. -/
-  open_range : IsOpen <| range f
-#align open_embedding OpenEmbedding
-#align open_embedding_iff openEmbedding_iff
-
 theorem OpenEmbedding.isOpenMap (hf : OpenEmbedding f) : IsOpenMap f :=
   hf.toEmbedding.toInducing.isOpenMap hf.open_range
 #align open_embedding.is_open_map OpenEmbedding.isOpenMap
@@ -679,14 +632,6 @@ section ClosedEmbedding
 
 variable [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z]
 
-/-- A closed embedding is an embedding with closed image. -/
-@[mk_iff]
-structure ClosedEmbedding (f : X → Y) extends Embedding f : Prop where
-  /-- The range of a closed embedding is a closed set. -/
-  closed_range : IsClosed <| range f
-#align closed_embedding ClosedEmbedding
-#align closed_embedding_iff closedEmbedding_iff
-
 namespace ClosedEmbedding
 
 theorem tendsto_nhds_iff {g : ι → X} {l : Filter ι} {x : X} (hf : ClosedEmbedding f) :
chore(Topology/Maps): rename type variables (#9548)

This file was mostly using Greek letters, but used letters X, Y, Z in comments and one theorem. Switch to using the latter consistently, per Zulip discussion.

Co-authored-by: grunweg <grunweg@posteo.de>

Diff
@@ -49,26 +49,26 @@ open Set Filter Function
 
 open TopologicalSpace Topology Filter
 
-variable {α : Type*} {β : Type*} {γ : Type*} {ι : Type*} {f : α → β} {g : β → γ}
+variable {X : Type*} {Y : Type*} {Z : Type*} {ι : Type*} {f : X → Y} {g : Y → Z}
 
 section Inducing
 
-/-- A function `f : α → β` between topological spaces is inducing if the topology on `α` is induced
-by the topology on `β` through `f`, meaning that a set `s : Set α` is open iff it is the preimage
-under `f` of some open set `t : Set β`. -/
+/-- A function `f : X → Y` between topological spaces is inducing if the topology on `X` is induced
+by the topology on `Y` through `f`, meaning that a set `s : Set X` is open iff it is the preimage
+under `f` of some open set `t : Set Y`. -/
 @[mk_iff]
-structure Inducing [tα : TopologicalSpace α] [tβ : TopologicalSpace β] (f : α → β) : Prop where
+structure Inducing [tX : TopologicalSpace X] [tY : TopologicalSpace Y] (f : X → Y) : Prop where
   /-- The topology on the domain is equal to the induced topology. -/
-  induced : tα = tβ.induced f
+  induced : tX = tY.induced f
 #align inducing Inducing
 #align inducing_iff inducing_iff
 
-variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
+variable [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z]
 
-theorem inducing_induced (f : α → β) : @Inducing α β (TopologicalSpace.induced f ‹_›) _ f :=
+theorem inducing_induced (f : X → Y) : @Inducing X Y (TopologicalSpace.induced f ‹_›) _ f :=
   @Inducing.mk _ _ (TopologicalSpace.induced f ‹_›) _ _ rfl
 
-theorem inducing_id : Inducing (@id α) :=
+theorem inducing_id : Inducing (@id X) :=
   ⟨induced_id.symm⟩
 #align inducing_id inducing_id
 
@@ -85,47 +85,47 @@ theorem inducing_of_inducing_compose
         exact induced_mono hg.le_induced)⟩
 #align inducing_of_inducing_compose inducing_of_inducing_compose
 
-theorem inducing_iff_nhds : Inducing f ↔ ∀ a, 𝓝 a = comap f (𝓝 (f a)) :=
+theorem inducing_iff_nhds : Inducing f ↔ ∀ x, 𝓝 x = comap f (𝓝 (f x)) :=
   (inducing_iff _).trans (induced_iff_nhds_eq f)
 #align inducing_iff_nhds inducing_iff_nhds
 
 namespace Inducing
 
-theorem nhds_eq_comap (hf : Inducing f) : ∀ a : α, 𝓝 a = comap f (𝓝 <| f a) :=
+theorem nhds_eq_comap (hf : Inducing f) : ∀ x : X, 𝓝 x = comap f (𝓝 <| f x) :=
   inducing_iff_nhds.1 hf
 #align inducing.nhds_eq_comap Inducing.nhds_eq_comap
 
-theorem nhdsSet_eq_comap (hf : Inducing f) (s : Set α) :
+theorem nhdsSet_eq_comap (hf : Inducing f) (s : Set X) :
     𝓝ˢ s = comap f (𝓝ˢ (f '' s)) := by
   simp only [nhdsSet, sSup_image, comap_iSup, hf.nhds_eq_comap, iSup_image]
 #align inducing.nhds_set_eq_comap Inducing.nhdsSet_eq_comap
 
-theorem map_nhds_eq (hf : Inducing f) (a : α) : (𝓝 a).map f = 𝓝[range f] f a :=
-  hf.induced.symm ▸ map_nhds_induced_eq a
+theorem map_nhds_eq (hf : Inducing f) (x : X) : (𝓝 x).map f = 𝓝[range f] f x :=
+  hf.induced.symm ▸ map_nhds_induced_eq x
 #align inducing.map_nhds_eq Inducing.map_nhds_eq
 
-theorem map_nhds_of_mem (hf : Inducing f) (a : α) (h : range f ∈ 𝓝 (f a)) :
-    (𝓝 a).map f = 𝓝 (f a) :=
+theorem map_nhds_of_mem (hf : Inducing f) (x : X) (h : range f ∈ 𝓝 (f x)) :
+    (𝓝 x).map f = 𝓝 (f x) :=
   hf.induced.symm ▸ map_nhds_induced_of_mem h
 #align inducing.map_nhds_of_mem Inducing.map_nhds_of_mem
 
 -- porting note: new lemma
-theorem mapClusterPt_iff (hf : Inducing f) {a : α} {l : Filter α} :
-    MapClusterPt (f a) l f ↔ ClusterPt a l := by
+theorem mapClusterPt_iff (hf : Inducing f) {x : X} {l : Filter X} :
+    MapClusterPt (f x) l f ↔ ClusterPt x l := by
   delta MapClusterPt ClusterPt
   rw [← Filter.push_pull', ← hf.nhds_eq_comap, map_neBot_iff]
 
-theorem image_mem_nhdsWithin (hf : Inducing f) {a : α} {s : Set α} (hs : s ∈ 𝓝 a) :
-    f '' s ∈ 𝓝[range f] f a :=
-  hf.map_nhds_eq a ▸ image_mem_map hs
+theorem image_mem_nhdsWithin (hf : Inducing f) {x : X} {s : Set X} (hs : s ∈ 𝓝 x) :
+    f '' s ∈ 𝓝[range f] f x :=
+  hf.map_nhds_eq x ▸ image_mem_map hs
 #align inducing.image_mem_nhds_within Inducing.image_mem_nhdsWithin
 
-theorem tendsto_nhds_iff {f : ι → β} {a : Filter ι} {b : β} (hg : Inducing g) :
-    Tendsto f a (𝓝 b) ↔ Tendsto (g ∘ f) a (𝓝 (g b)) := by
+theorem tendsto_nhds_iff {f : ι → Y} {l : Filter ι} {y : Y} (hg : Inducing g) :
+    Tendsto f l (𝓝 y) ↔ Tendsto (g ∘ f) l (𝓝 (g y)) := by
   rw [hg.nhds_eq_comap, tendsto_comap_iff]
 #align inducing.tendsto_nhds_iff Inducing.tendsto_nhds_iff
 
-theorem continuousAt_iff (hg : Inducing g) {x : α} :
+theorem continuousAt_iff (hg : Inducing g) {x : X} :
     ContinuousAt f x ↔ ContinuousAt (g ∘ f) x :=
   hg.tendsto_nhds_iff
 #align inducing.continuous_at_iff Inducing.continuousAt_iff
@@ -135,7 +135,7 @@ theorem continuous_iff (hg : Inducing g) :
   simp_rw [continuous_iff_continuousAt, hg.continuousAt_iff]
 #align inducing.continuous_iff Inducing.continuous_iff
 
-theorem continuousAt_iff' (hf : Inducing f) {x : α} (h : range f ∈ 𝓝 (f x)) :
+theorem continuousAt_iff' (hf : Inducing f) {x : X} (h : range f ∈ 𝓝 (f x)) :
     ContinuousAt (g ∘ f) x ↔ ContinuousAt g (f x) := by
   simp_rw [ContinuousAt, Filter.Tendsto, ← hf.map_nhds_of_mem _ h, Filter.map_map, comp]
 #align inducing.continuous_at_iff' Inducing.continuousAt_iff'
@@ -151,34 +151,34 @@ protected theorem inducing_iff (hg : Inducing g) :
   exact hgf.continuous
 #align inducing.inducing_iff Inducing.inducing_iff
 
-theorem closure_eq_preimage_closure_image (hf : Inducing f) (s : Set α) :
+theorem closure_eq_preimage_closure_image (hf : Inducing f) (s : Set X) :
     closure s = f ⁻¹' closure (f '' s) := by
   ext x
   rw [Set.mem_preimage, ← closure_induced, hf.induced]
 #align inducing.closure_eq_preimage_closure_image Inducing.closure_eq_preimage_closure_image
 
-theorem isClosed_iff (hf : Inducing f) {s : Set α} :
+theorem isClosed_iff (hf : Inducing f) {s : Set X} :
     IsClosed s ↔ ∃ t, IsClosed t ∧ f ⁻¹' t = s := by rw [hf.induced, isClosed_induced_iff]
 #align inducing.is_closed_iff Inducing.isClosed_iff
 
-theorem isClosed_iff' (hf : Inducing f) {s : Set α} :
+theorem isClosed_iff' (hf : Inducing f) {s : Set X} :
     IsClosed s ↔ ∀ x, f x ∈ closure (f '' s) → x ∈ s := by rw [hf.induced, isClosed_induced_iff']
 #align inducing.is_closed_iff' Inducing.isClosed_iff'
 
-theorem isClosed_preimage (h : Inducing f) (s : Set β) (hs : IsClosed s) :
+theorem isClosed_preimage (h : Inducing f) (s : Set Y) (hs : IsClosed s) :
     IsClosed (f ⁻¹' s) :=
   (isClosed_iff h).mpr ⟨s, hs, rfl⟩
 #align inducing.is_closed_preimage Inducing.isClosed_preimage
 
-theorem isOpen_iff (hf : Inducing f) {s : Set α} :
+theorem isOpen_iff (hf : Inducing f) {s : Set X} :
     IsOpen s ↔ ∃ t, IsOpen t ∧ f ⁻¹' t = s := by rw [hf.induced, isOpen_induced_iff]
 #align inducing.is_open_iff Inducing.isOpen_iff
 
 theorem setOf_isOpen (hf : Inducing f) :
-    {s : Set α | IsOpen s} = preimage f '' {t | IsOpen t} :=
+    {s : Set X | IsOpen s} = preimage f '' {t | IsOpen t} :=
   Set.ext fun _ ↦ hf.isOpen_iff
 
-theorem dense_iff (hf : Inducing f) {s : Set α} :
+theorem dense_iff (hf : Inducing f) {s : Set X} :
     Dense s ↔ ∀ x, f x ∈ closure (f '' s) := by
   simp only [Dense, hf.closure_eq_preimage_closure_image, mem_preimage]
 #align inducing.dense_iff Inducing.dense_iff
@@ -190,28 +190,28 @@ end Inducing
 section Embedding
 
 /-- A function between topological spaces is an embedding if it is injective,
-  and for all `s : Set α`, `s` is open iff it is the preimage of an open set. -/
+  and for all `s : Set X`, `s` is open iff it is the preimage of an open set. -/
 @[mk_iff]
-structure Embedding [TopologicalSpace α] [TopologicalSpace β] (f : α → β) extends
+structure Embedding [TopologicalSpace X] [TopologicalSpace Y] (f : X → Y) extends
   Inducing f : Prop where
   /-- A topological embedding is injective. -/
   inj : Injective f
 #align embedding Embedding
 #align embedding_iff embedding_iff
 
-theorem Function.Injective.embedding_induced [t : TopologicalSpace β] {f : α → β}
-    (hf : Injective f) : @_root_.Embedding α β (t.induced f) t f :=
-  @_root_.Embedding.mk α β (t.induced f) t _ (inducing_induced f) hf
+theorem Function.Injective.embedding_induced [t : TopologicalSpace Y] (hf : Injective f) :
+    @_root_.Embedding X Y (t.induced f) t f :=
+  @_root_.Embedding.mk X Y (t.induced f) t _ (inducing_induced f) hf
 #align function.injective.embedding_induced Function.Injective.embedding_induced
 
-variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
+variable [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z]
 
-theorem Embedding.mk' (f : α → β) (inj : Injective f) (induced : ∀ a, comap f (𝓝 (f a)) = 𝓝 a) :
+theorem Embedding.mk' (f : X → Y) (inj : Injective f) (induced : ∀ x, comap f (𝓝 (f x)) = 𝓝 x) :
     Embedding f :=
-  ⟨inducing_iff_nhds.2 fun a => (induced a).symm, inj⟩
+  ⟨inducing_iff_nhds.2 fun x => (induced x).symm, inj⟩
 #align embedding.mk' Embedding.mk'
 
-theorem embedding_id : Embedding (@id α) :=
+theorem embedding_id : Embedding (@id X) :=
   ⟨inducing_id, fun _ _ h => h⟩
 #align embedding_id embedding_id
 
@@ -223,26 +223,26 @@ protected theorem Embedding.comp (hg : Embedding g) (hf : Embedding f) :
 theorem embedding_of_embedding_compose
     (hf : Continuous f) (hg : Continuous g) (hgf : Embedding (g ∘ f)) : Embedding f :=
   { induced := (inducing_of_inducing_compose hf hg hgf.toInducing).induced
-    inj := fun a₁ a₂ h => hgf.inj <| by simp [h, (· ∘ ·)] }
+    inj := fun x₁ x₂ h => hgf.inj <| by simp [h, (· ∘ ·)] }
 #align embedding_of_embedding_compose embedding_of_embedding_compose
 
-protected theorem Function.LeftInverse.embedding {f : α → β} {g : β → α} (h : LeftInverse f g)
+protected theorem Function.LeftInverse.embedding {f : X → Y} {g : Y → X} (h : LeftInverse f g)
     (hf : Continuous f) (hg : Continuous g) : _root_.Embedding g :=
   embedding_of_embedding_compose hg hf <| h.comp_eq_id.symm ▸ embedding_id
 #align function.left_inverse.embedding Function.LeftInverse.embedding
 
-theorem Embedding.map_nhds_eq (hf : Embedding f) (a : α) :
-    (𝓝 a).map f = 𝓝[range f] f a :=
-  hf.1.map_nhds_eq a
+theorem Embedding.map_nhds_eq (hf : Embedding f) (x : X) :
+    (𝓝 x).map f = 𝓝[range f] f x :=
+  hf.1.map_nhds_eq x
 #align embedding.map_nhds_eq Embedding.map_nhds_eq
 
-theorem Embedding.map_nhds_of_mem (hf : Embedding f) (a : α) (h : range f ∈ 𝓝 (f a)) :
-    (𝓝 a).map f = 𝓝 (f a) :=
-  hf.1.map_nhds_of_mem a h
+theorem Embedding.map_nhds_of_mem (hf : Embedding f) (x : X) (h : range f ∈ 𝓝 (f x)) :
+    (𝓝 x).map f = 𝓝 (f x) :=
+  hf.1.map_nhds_of_mem x h
 #align embedding.map_nhds_of_mem Embedding.map_nhds_of_mem
 
-theorem Embedding.tendsto_nhds_iff {f : ι → β} {a : Filter ι} {b : β}
-    (hg : Embedding g) : Tendsto f a (𝓝 b) ↔ Tendsto (g ∘ f) a (𝓝 (g b)) :=
+theorem Embedding.tendsto_nhds_iff {f : ι → Y} {l : Filter ι} {y : Y}
+    (hg : Embedding g) : Tendsto f l (𝓝 y) ↔ Tendsto (g ∘ f) l (𝓝 (g y)) :=
   hg.toInducing.tendsto_nhds_iff
 #align embedding.tendsto_nhds_iff Embedding.tendsto_nhds_iff
 
@@ -255,17 +255,16 @@ theorem Embedding.continuous (hf : Embedding f) : Continuous f :=
   Inducing.continuous hf.1
 #align embedding.continuous Embedding.continuous
 
-theorem Embedding.closure_eq_preimage_closure_image {e : α → β} (he : Embedding e) (s : Set α) :
-    closure s = e ⁻¹' closure (e '' s) :=
-  he.1.closure_eq_preimage_closure_image s
+theorem Embedding.closure_eq_preimage_closure_image (hf : Embedding f) (s : Set X) :
+    closure s = f ⁻¹' closure (f '' s) :=
+  hf.1.closure_eq_preimage_closure_image s
 #align embedding.closure_eq_preimage_closure_image Embedding.closure_eq_preimage_closure_image
 
 /-- The topology induced under an inclusion `f : X → Y` from a discrete topological space `Y`
 is the discrete topology on `X`.
 
 See also `DiscreteTopology.of_continuous_injective`. -/
-theorem Embedding.discreteTopology {X Y : Type*} [TopologicalSpace X] [TopologicalSpace Y]
-    [DiscreteTopology Y] {f : X → Y} (hf : Embedding f) : DiscreteTopology X :=
+theorem Embedding.discreteTopology [DiscreteTopology Y] (hf : Embedding f) : DiscreteTopology X :=
   .of_continuous_injective hf.continuous hf.inj
 #align embedding.discrete_topology Embedding.discreteTopology
 
@@ -273,28 +272,28 @@ end Embedding
 
 section QuotientMap
 /-- A function between topological spaces is a quotient map if it is surjective,
-  and for all `s : Set β`, `s` is open iff its preimage is an open set. -/
-def QuotientMap {α : Type*} {β : Type*} [tα : TopologicalSpace α] [tβ : TopologicalSpace β]
-    (f : α → β) : Prop :=
-  Surjective f ∧ tβ = tα.coinduced f
+  and for all `s : Set Y`, `s` is open iff its preimage is an open set. -/
+def QuotientMap {X : Type*} {Y : Type*} [tX : TopologicalSpace X] [tY : TopologicalSpace Y]
+    (f : X → Y) : Prop :=
+  Surjective f ∧ tY = tX.coinduced f
 #align quotient_map QuotientMap
 
-variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
+variable [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z]
 
-theorem quotientMap_iff : QuotientMap f ↔ Surjective f ∧ ∀ s : Set β, IsOpen s ↔ IsOpen (f ⁻¹' s) :=
+theorem quotientMap_iff : QuotientMap f ↔ Surjective f ∧ ∀ s : Set Y, IsOpen s ↔ IsOpen (f ⁻¹' s) :=
   and_congr Iff.rfl TopologicalSpace.ext_iff
 #align quotient_map_iff quotientMap_iff
 
 theorem quotientMap_iff_closed :
-    QuotientMap f ↔ Surjective f ∧ ∀ s : Set β, IsClosed s ↔ IsClosed (f ⁻¹' s) :=
+    QuotientMap f ↔ Surjective f ∧ ∀ s : Set Y, IsClosed s ↔ IsClosed (f ⁻¹' s) :=
   quotientMap_iff.trans <| Iff.rfl.and <| compl_surjective.forall.trans <| by
     simp only [isOpen_compl_iff, preimage_compl]
 #align quotient_map_iff_closed quotientMap_iff_closed
 
 namespace QuotientMap
 
-protected theorem id : QuotientMap (@id α) :=
-  ⟨fun a => ⟨a, rfl⟩, coinduced_id.symm⟩
+protected theorem id : QuotientMap (@id X) :=
+  ⟨fun x => ⟨x, rfl⟩, coinduced_id.symm⟩
 #align quotient_map.id QuotientMap.id
 
 protected theorem comp (hg : QuotientMap g) (hf : QuotientMap f) : QuotientMap (g ∘ f) :=
@@ -309,7 +308,7 @@ protected theorem of_quotientMap_compose (hf : Continuous f) (hg : Continuous g)
       hg.coinduced_le⟩
 #align quotient_map.of_quotient_map_compose QuotientMap.of_quotientMap_compose
 
-theorem of_inverse {g : β → α} (hf : Continuous f) (hg : Continuous g) (h : LeftInverse g f) :
+theorem of_inverse {g : Y → X} (hf : Continuous f) (hg : Continuous g) (h : LeftInverse g f) :
     QuotientMap g :=
   QuotientMap.of_quotientMap_compose hf hg <| h.comp_eq_id.symm ▸ QuotientMap.id
 #align quotient_map.of_inverse QuotientMap.of_inverse
@@ -326,11 +325,11 @@ protected theorem surjective (hf : QuotientMap f) : Surjective f :=
   hf.1
 #align quotient_map.surjective QuotientMap.surjective
 
-protected theorem isOpen_preimage (hf : QuotientMap f) {s : Set β} : IsOpen (f ⁻¹' s) ↔ IsOpen s :=
+protected theorem isOpen_preimage (hf : QuotientMap f) {s : Set Y} : IsOpen (f ⁻¹' s) ↔ IsOpen s :=
   ((quotientMap_iff.1 hf).2 s).symm
 #align quotient_map.is_open_preimage QuotientMap.isOpen_preimage
 
-protected theorem isClosed_preimage (hf : QuotientMap f) {s : Set β} :
+protected theorem isClosed_preimage (hf : QuotientMap f) {s : Set Y} :
     IsClosed (f ⁻¹' s) ↔ IsClosed s :=
   ((quotientMap_iff_closed.1 hf).2 s).symm
 #align quotient_map.is_closed_preimage QuotientMap.isClosed_preimage
@@ -340,17 +339,17 @@ end QuotientMap
 end QuotientMap
 
 section OpenMap
-/-- A map `f : α → β` is said to be an *open map*, if the image of any open `U : Set α`
-is open in `β`. -/
-def IsOpenMap [TopologicalSpace α] [TopologicalSpace β] (f : α → β) :=
-  ∀ U : Set α, IsOpen U → IsOpen (f '' U)
+/-- A map `f : X → Y` is said to be an *open map*, if the image of any open `U : Set X`
+is open in `Y`. -/
+def IsOpenMap [TopologicalSpace X] [TopologicalSpace Y] (f : X → Y) :=
+  ∀ U : Set X, IsOpen U → IsOpen (f '' U)
 #align is_open_map IsOpenMap
 
-variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
+variable [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z]
 
 namespace IsOpenMap
 
-protected theorem id : IsOpenMap (@id α) := fun s hs => by rwa [image_id]
+protected theorem id : IsOpenMap (@id X) := fun s hs => by rwa [image_id]
 #align is_open_map.id IsOpenMap.id
 
 protected theorem comp (hg : IsOpenMap g) (hf : IsOpenMap f) :
@@ -362,36 +361,36 @@ theorem isOpen_range (hf : IsOpenMap f) : IsOpen (range f) := by
   exact hf _ isOpen_univ
 #align is_open_map.is_open_range IsOpenMap.isOpen_range
 
-theorem image_mem_nhds (hf : IsOpenMap f) {x : α} {s : Set α} (hx : s ∈ 𝓝 x) : f '' s ∈ 𝓝 (f x) :=
+theorem image_mem_nhds (hf : IsOpenMap f) {x : X} {s : Set X} (hx : s ∈ 𝓝 x) : f '' s ∈ 𝓝 (f x) :=
   let ⟨t, hts, ht, hxt⟩ := mem_nhds_iff.1 hx
   mem_of_superset (IsOpen.mem_nhds (hf t ht) (mem_image_of_mem _ hxt)) (image_subset _ hts)
 #align is_open_map.image_mem_nhds IsOpenMap.image_mem_nhds
 
-theorem range_mem_nhds (hf : IsOpenMap f) (x : α) : range f ∈ 𝓝 (f x) :=
+theorem range_mem_nhds (hf : IsOpenMap f) (x : X) : range f ∈ 𝓝 (f x) :=
   hf.isOpen_range.mem_nhds <| mem_range_self _
 #align is_open_map.range_mem_nhds IsOpenMap.range_mem_nhds
 
-theorem mapsTo_interior (hf : IsOpenMap f) {s : Set α} {t : Set β} (h : MapsTo f s t) :
+theorem mapsTo_interior (hf : IsOpenMap f) {s : Set X} {t : Set Y} (h : MapsTo f s t) :
     MapsTo f (interior s) (interior t) :=
   mapsTo'.2 <|
     interior_maximal (h.mono interior_subset Subset.rfl).image_subset (hf _ isOpen_interior)
 #align is_open_map.maps_to_interior IsOpenMap.mapsTo_interior
 
-theorem image_interior_subset (hf : IsOpenMap f) (s : Set α) :
+theorem image_interior_subset (hf : IsOpenMap f) (s : Set X) :
     f '' interior s ⊆ interior (f '' s) :=
   (hf.mapsTo_interior (mapsTo_image f s)).image_subset
 #align is_open_map.image_interior_subset IsOpenMap.image_interior_subset
 
-theorem nhds_le (hf : IsOpenMap f) (a : α) : 𝓝 (f a) ≤ (𝓝 a).map f :=
+theorem nhds_le (hf : IsOpenMap f) (x : X) : 𝓝 (f x) ≤ (𝓝 x).map f :=
   le_map fun _ => hf.image_mem_nhds
 #align is_open_map.nhds_le IsOpenMap.nhds_le
 
-theorem of_nhds_le (hf : ∀ a, 𝓝 (f a) ≤ map f (𝓝 a)) : IsOpenMap f := fun _s hs =>
-  isOpen_iff_mem_nhds.2 fun _b ⟨_a, has, hab⟩ => hab ▸ hf _ (image_mem_map <| hs.mem_nhds has)
+theorem of_nhds_le (hf : ∀ x, 𝓝 (f x) ≤ map f (𝓝 x)) : IsOpenMap f := fun _s hs =>
+  isOpen_iff_mem_nhds.2 fun _y ⟨_x, hxs, hxy⟩ => hxy ▸ hf _ (image_mem_map <| hs.mem_nhds hxs)
 #align is_open_map.of_nhds_le IsOpenMap.of_nhds_le
 
 theorem of_sections
-    (h : ∀ x, ∃ g : β → α, ContinuousAt g (f x) ∧ g (f x) = x ∧ RightInverse g f) : IsOpenMap f :=
+    (h : ∀ x, ∃ g : Y → X, ContinuousAt g (f x) ∧ g (f x) = x ∧ RightInverse g f) : IsOpenMap f :=
   of_nhds_le fun x =>
     let ⟨g, hgc, hgx, hgf⟩ := h x
     calc
@@ -400,7 +399,7 @@ theorem of_sections
       _ = map f (𝓝 x) := by rw [hgx]
 #align is_open_map.of_sections IsOpenMap.of_sections
 
-theorem of_inverse {f' : β → α} (h : Continuous f') (l_inv : LeftInverse f f')
+theorem of_inverse {f' : Y → X} (h : Continuous f') (l_inv : LeftInverse f f')
     (r_inv : RightInverse f f') : IsOpenMap f :=
   of_sections fun _ => ⟨f', h.continuousAt, r_inv _, l_inv⟩
 #align is_open_map.of_inverse IsOpenMap.of_inverse
@@ -412,36 +411,36 @@ theorem to_quotientMap (open_map : IsOpenMap f) (cont : Continuous f) (surj : Su
     ⟨surj, fun s => ⟨fun h => h.preimage cont, fun h => surj.image_preimage s ▸ open_map _ h⟩⟩
 #align is_open_map.to_quotient_map IsOpenMap.to_quotientMap
 
-theorem interior_preimage_subset_preimage_interior (hf : IsOpenMap f) {s : Set β} :
+theorem interior_preimage_subset_preimage_interior (hf : IsOpenMap f) {s : Set Y} :
     interior (f ⁻¹' s) ⊆ f ⁻¹' interior s :=
   hf.mapsTo_interior (mapsTo_preimage _ _)
 #align is_open_map.interior_preimage_subset_preimage_interior IsOpenMap.interior_preimage_subset_preimage_interior
 
 theorem preimage_interior_eq_interior_preimage (hf₁ : IsOpenMap f) (hf₂ : Continuous f)
-    (s : Set β) : f ⁻¹' interior s = interior (f ⁻¹' s) :=
+    (s : Set Y) : f ⁻¹' interior s = interior (f ⁻¹' s) :=
   Subset.antisymm (preimage_interior_subset_interior_preimage hf₂)
     (interior_preimage_subset_preimage_interior hf₁)
 #align is_open_map.preimage_interior_eq_interior_preimage IsOpenMap.preimage_interior_eq_interior_preimage
 
-theorem preimage_closure_subset_closure_preimage (hf : IsOpenMap f) {s : Set β} :
+theorem preimage_closure_subset_closure_preimage (hf : IsOpenMap f) {s : Set Y} :
     f ⁻¹' closure s ⊆ closure (f ⁻¹' s) := by
   rw [← compl_subset_compl]
   simp only [← interior_compl, ← preimage_compl, hf.interior_preimage_subset_preimage_interior]
 #align is_open_map.preimage_closure_subset_closure_preimage IsOpenMap.preimage_closure_subset_closure_preimage
 
-theorem preimage_closure_eq_closure_preimage (hf : IsOpenMap f) (hfc : Continuous f) (s : Set β) :
+theorem preimage_closure_eq_closure_preimage (hf : IsOpenMap f) (hfc : Continuous f) (s : Set Y) :
     f ⁻¹' closure s = closure (f ⁻¹' s) :=
   hf.preimage_closure_subset_closure_preimage.antisymm (hfc.closure_preimage_subset s)
 #align is_open_map.preimage_closure_eq_closure_preimage IsOpenMap.preimage_closure_eq_closure_preimage
 
-theorem preimage_frontier_subset_frontier_preimage (hf : IsOpenMap f) {s : Set β} :
+theorem preimage_frontier_subset_frontier_preimage (hf : IsOpenMap f) {s : Set Y} :
     f ⁻¹' frontier s ⊆ frontier (f ⁻¹' s) := by
   simpa only [frontier_eq_closure_inter_closure, preimage_inter] using
     inter_subset_inter hf.preimage_closure_subset_closure_preimage
       hf.preimage_closure_subset_closure_preimage
 #align is_open_map.preimage_frontier_subset_frontier_preimage IsOpenMap.preimage_frontier_subset_frontier_preimage
 
-theorem preimage_frontier_eq_frontier_preimage (hf : IsOpenMap f) (hfc : Continuous f) (s : Set β) :
+theorem preimage_frontier_eq_frontier_preimage (hf : IsOpenMap f) (hfc : Continuous f) (s : Set Y) :
     f ⁻¹' frontier s = frontier (f ⁻¹' s) := by
   simp only [frontier_eq_closure_inter_closure, preimage_inter, preimage_compl,
     hf.preimage_closure_eq_closure_preimage hfc]
@@ -449,7 +448,7 @@ theorem preimage_frontier_eq_frontier_preimage (hf : IsOpenMap f) (hfc : Continu
 
 end IsOpenMap
 
-theorem isOpenMap_iff_nhds_le : IsOpenMap f ↔ ∀ a : α, 𝓝 (f a) ≤ (𝓝 a).map f :=
+theorem isOpenMap_iff_nhds_le : IsOpenMap f ↔ ∀ x : X, 𝓝 (f x) ≤ (𝓝 x).map f :=
   ⟨fun hf => hf.nhds_le, IsOpenMap.of_nhds_le⟩
 #align is_open_map_iff_nhds_le isOpenMap_iff_nhds_le
 
@@ -470,18 +469,18 @@ end OpenMap
 
 section IsClosedMap
 
-variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
+variable [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z]
 
-/-- A map `f : α → β` is said to be a *closed map*, if the image of any closed `U : Set α`
-is closed in `β`. -/
-def IsClosedMap (f : α → β) :=
-  ∀ U : Set α, IsClosed U → IsClosed (f '' U)
+/-- A map `f : X → Y` is said to be a *closed map*, if the image of any closed `U : Set X`
+is closed in `Y`. -/
+def IsClosedMap (f : X → Y) :=
+  ∀ U : Set X, IsClosed U → IsClosed (f '' U)
 #align is_closed_map IsClosedMap
 
 namespace IsClosedMap
 open Function
 
-protected theorem id : IsClosedMap (@id α) := fun s hs => by rwa [image_id]
+protected theorem id : IsClosedMap (@id X) := fun s hs => by rwa [image_id]
 #align is_closed_map.id IsClosedMap.id
 
 protected theorem comp (hg : IsClosedMap g) (hf : IsClosedMap f) : IsClosedMap (g ∘ f) := by
@@ -490,12 +489,12 @@ protected theorem comp (hg : IsClosedMap g) (hf : IsClosedMap f) : IsClosedMap (
   exact hg _ (hf _ hs)
 #align is_closed_map.comp IsClosedMap.comp
 
-theorem closure_image_subset (hf : IsClosedMap f) (s : Set α) :
+theorem closure_image_subset (hf : IsClosedMap f) (s : Set X) :
     closure (f '' s) ⊆ f '' closure s :=
   closure_minimal (image_subset _ subset_closure) (hf _ isClosed_closure)
 #align is_closed_map.closure_image_subset IsClosedMap.closure_image_subset
 
-theorem of_inverse {f' : β → α} (h : Continuous f') (l_inv : LeftInverse f f')
+theorem of_inverse {f' : Y → X} (h : Continuous f') (l_inv : LeftInverse f f')
     (r_inv : RightInverse f f') : IsClosedMap f := fun s hs => by
   rw [image_eq_preimage_of_inverse r_inv l_inv]
   exact hs.preimage h
@@ -546,20 +545,20 @@ theorem isClosedMap_iff_clusterPt :
     and_comm]
 
 theorem IsClosedMap.closure_image_eq_of_continuous
-    (f_closed : IsClosedMap f) (f_cont : Continuous f) (s : Set α) :
+    (f_closed : IsClosedMap f) (f_cont : Continuous f) (s : Set X) :
     closure (f '' s) = f '' closure s :=
   subset_antisymm (f_closed.closure_image_subset s) (image_closure_subset_closure_image f_cont)
 
 theorem IsClosedMap.lift'_closure_map_eq
-    (f_closed : IsClosedMap f) (f_cont : Continuous f) (F : Filter α) :
+    (f_closed : IsClosedMap f) (f_cont : Continuous f) (F : Filter X) :
     (map f F).lift' closure = map f (F.lift' closure) := by
-  rw [map_lift'_eq2 (monotone_closure β), map_lift'_eq (monotone_closure α)]
+  rw [map_lift'_eq2 (monotone_closure Y), map_lift'_eq (monotone_closure X)]
   congr
   ext s : 1
   exact f_closed.closure_image_eq_of_continuous f_cont s
 
 theorem IsClosedMap.mapClusterPt_iff_lift'_closure
-    {F : Filter α} (f_closed : IsClosedMap f) (f_cont : Continuous f) {y : β} :
+    {F : Filter X} (f_closed : IsClosedMap f) (f_cont : Continuous f) {y : Y} :
     MapClusterPt y F f ↔ ((F.lift' closure) ⊓ 𝓟 (f ⁻¹' {y})).NeBot := by
   rw [MapClusterPt, clusterPt_iff_lift'_closure', f_closed.lift'_closure_map_eq f_cont,
       ← comap_principal, ← map_neBot_iff f, Filter.push_pull, principal_singleton]
@@ -568,11 +567,11 @@ end IsClosedMap
 
 section OpenEmbedding
 
-variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
+variable [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z]
 
 /-- An open embedding is an embedding with open image. -/
 @[mk_iff]
-structure OpenEmbedding (f : α → β) extends Embedding f : Prop where
+structure OpenEmbedding (f : X → Y) extends Embedding f : Prop where
   /-- The range of an open embedding is an open set. -/
   open_range : IsOpen <| range f
 #align open_embedding OpenEmbedding
@@ -582,28 +581,28 @@ theorem OpenEmbedding.isOpenMap (hf : OpenEmbedding f) : IsOpenMap f :=
   hf.toEmbedding.toInducing.isOpenMap hf.open_range
 #align open_embedding.is_open_map OpenEmbedding.isOpenMap
 
-theorem OpenEmbedding.map_nhds_eq (hf : OpenEmbedding f) (a : α) :
-    map f (𝓝 a) = 𝓝 (f a) :=
+theorem OpenEmbedding.map_nhds_eq (hf : OpenEmbedding f) (x : X) :
+    map f (𝓝 x) = 𝓝 (f x) :=
   hf.toEmbedding.map_nhds_of_mem _ <| hf.open_range.mem_nhds <| mem_range_self _
 #align open_embedding.map_nhds_eq OpenEmbedding.map_nhds_eq
 
-theorem OpenEmbedding.open_iff_image_open (hf : OpenEmbedding f) {s : Set α} :
+theorem OpenEmbedding.open_iff_image_open (hf : OpenEmbedding f) {s : Set X} :
     IsOpen s ↔ IsOpen (f '' s) :=
   ⟨hf.isOpenMap s, fun h => by
     convert ← h.preimage hf.toEmbedding.continuous
     apply preimage_image_eq _ hf.inj⟩
 #align open_embedding.open_iff_image_open OpenEmbedding.open_iff_image_open
 
-theorem OpenEmbedding.tendsto_nhds_iff {f : ι → β} {a : Filter ι} {b : β} (hg : OpenEmbedding g) :
-    Tendsto f a (𝓝 b) ↔ Tendsto (g ∘ f) a (𝓝 (g b)) :=
+theorem OpenEmbedding.tendsto_nhds_iff {f : ι → Y} {l : Filter ι} {y : Y} (hg : OpenEmbedding g) :
+    Tendsto f l (𝓝 y) ↔ Tendsto (g ∘ f) l (𝓝 (g y)) :=
   hg.toEmbedding.tendsto_nhds_iff
 #align open_embedding.tendsto_nhds_iff OpenEmbedding.tendsto_nhds_iff
 
-theorem OpenEmbedding.tendsto_nhds_iff' (hf : OpenEmbedding f) {l : Filter γ} {a : α} :
-    Tendsto (g ∘ f) (𝓝 a) l ↔ Tendsto g (𝓝 (f a)) l := by
+theorem OpenEmbedding.tendsto_nhds_iff' (hf : OpenEmbedding f) {l : Filter Z} {x : X} :
+    Tendsto (g ∘ f) (𝓝 x) l ↔ Tendsto g (𝓝 (f x)) l := by
   rw [Tendsto, ← map_map, hf.map_nhds_eq]; rfl
 
-theorem OpenEmbedding.continuousAt_iff (hf : OpenEmbedding f) {x : α} :
+theorem OpenEmbedding.continuousAt_iff (hf : OpenEmbedding f) {x : X} :
     ContinuousAt (g ∘ f) x ↔ ContinuousAt g (f x) :=
   hf.tendsto_nhds_iff'
 #align open_embedding.continuous_at_iff OpenEmbedding.continuousAt_iff
@@ -612,7 +611,7 @@ theorem OpenEmbedding.continuous (hf : OpenEmbedding f) : Continuous f :=
   hf.toEmbedding.continuous
 #align open_embedding.continuous OpenEmbedding.continuous
 
-theorem OpenEmbedding.open_iff_preimage_open (hf : OpenEmbedding f) {s : Set β}
+theorem OpenEmbedding.open_iff_preimage_open (hf : OpenEmbedding f) {s : Set Y}
     (hs : s ⊆ range f) : IsOpen s ↔ IsOpen (f ⁻¹' s) := by
   rw [hf.open_iff_image_open, image_preimage_eq_inter_range, inter_eq_self_of_subset_left hs]
 #align open_embedding.open_iff_preimage_open OpenEmbedding.open_iff_preimage_open
@@ -635,8 +634,8 @@ theorem openEmbedding_iff_embedding_open :
 theorem openEmbedding_of_continuous_injective_open
     (h₁ : Continuous f) (h₂ : Injective f) (h₃ : IsOpenMap f) : OpenEmbedding f := by
   simp only [openEmbedding_iff_embedding_open, embedding_iff, inducing_iff_nhds, *, and_true_iff]
-  exact fun a =>
-    le_antisymm (h₁.tendsto _).le_comap (@comap_map _ _ (𝓝 a) _ h₂ ▸ comap_mono (h₃.nhds_le _))
+  exact fun x =>
+    le_antisymm (h₁.tendsto _).le_comap (@comap_map _ _ (𝓝 x) _ h₂ ▸ comap_mono (h₃.nhds_le _))
 #align open_embedding_of_continuous_injective_open openEmbedding_of_continuous_injective_open
 
 theorem openEmbedding_iff_continuous_injective_open :
@@ -645,7 +644,7 @@ theorem openEmbedding_iff_continuous_injective_open :
     openEmbedding_of_continuous_injective_open h.1 h.2.1 h.2.2⟩
 #align open_embedding_iff_continuous_injective_open openEmbedding_iff_continuous_injective_open
 
-theorem openEmbedding_id : OpenEmbedding (@id α) :=
+theorem openEmbedding_id : OpenEmbedding (@id X) :=
   ⟨embedding_id, IsOpenMap.id.isOpen_range⟩
 #align open_embedding_id openEmbedding_id
 
@@ -661,13 +660,13 @@ theorem isOpenMap_iff (hg : OpenEmbedding g) :
   simp_rw [isOpenMap_iff_nhds_le, ← map_map, comp, ← hg.map_nhds_eq, Filter.map_le_map_iff hg.inj]
 #align open_embedding.is_open_map_iff OpenEmbedding.isOpenMap_iff
 
-theorem of_comp_iff (f : α → β) (hg : OpenEmbedding g) :
+theorem of_comp_iff (f : X → Y) (hg : OpenEmbedding g) :
     OpenEmbedding (g ∘ f) ↔ OpenEmbedding f := by
   simp only [openEmbedding_iff_continuous_injective_open, ← hg.isOpenMap_iff, ←
     hg.1.continuous_iff, hg.inj.of_comp_iff]
 #align open_embedding.of_comp_iff OpenEmbedding.of_comp_iff
 
-theorem of_comp (f : α → β) (hg : OpenEmbedding g)
+theorem of_comp (f : X → Y) (hg : OpenEmbedding g)
     (h : OpenEmbedding (g ∘ f)) : OpenEmbedding f :=
   (OpenEmbedding.of_comp_iff f hg).1 h
 #align open_embedding.of_comp OpenEmbedding.of_comp
@@ -678,11 +677,11 @@ end OpenEmbedding
 
 section ClosedEmbedding
 
-variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
+variable [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z]
 
 /-- A closed embedding is an embedding with closed image. -/
 @[mk_iff]
-structure ClosedEmbedding (f : α → β) extends Embedding f : Prop where
+structure ClosedEmbedding (f : X → Y) extends Embedding f : Prop where
   /-- The range of a closed embedding is a closed set. -/
   closed_range : IsClosed <| range f
 #align closed_embedding ClosedEmbedding
@@ -690,8 +689,8 @@ structure ClosedEmbedding (f : α → β) extends Embedding f : Prop where
 
 namespace ClosedEmbedding
 
-theorem tendsto_nhds_iff {g : ι → α} {a : Filter ι} {b : α} (hf : ClosedEmbedding f) :
-    Tendsto g a (𝓝 b) ↔ Tendsto (f ∘ g) a (𝓝 (f b)) :=
+theorem tendsto_nhds_iff {g : ι → X} {l : Filter ι} {x : X} (hf : ClosedEmbedding f) :
+    Tendsto g l (𝓝 x) ↔ Tendsto (f ∘ g) l (𝓝 (f x)) :=
   hf.toEmbedding.tendsto_nhds_iff
 #align closed_embedding.tendsto_nhds_iff ClosedEmbedding.tendsto_nhds_iff
 
@@ -703,14 +702,14 @@ theorem isClosedMap (hf : ClosedEmbedding f) : IsClosedMap f :=
   hf.toEmbedding.toInducing.isClosedMap hf.closed_range
 #align closed_embedding.is_closed_map ClosedEmbedding.isClosedMap
 
-theorem closed_iff_image_closed (hf : ClosedEmbedding f) {s : Set α} :
+theorem closed_iff_image_closed (hf : ClosedEmbedding f) {s : Set X} :
     IsClosed s ↔ IsClosed (f '' s) :=
   ⟨hf.isClosedMap s, fun h => by
     rw [← preimage_image_eq s hf.inj]
     exact h.preimage hf.continuous⟩
 #align closed_embedding.closed_iff_image_closed ClosedEmbedding.closed_iff_image_closed
 
-theorem closed_iff_preimage_closed (hf : ClosedEmbedding f) {s : Set β}
+theorem closed_iff_preimage_closed (hf : ClosedEmbedding f) {s : Set Y}
     (hs : s ⊆ range f) : IsClosed s ↔ IsClosed (f ⁻¹' s) := by
   rw [hf.closed_iff_image_closed, image_preimage_eq_of_subset hs]
 #align closed_embedding.closed_iff_preimage_closed ClosedEmbedding.closed_iff_preimage_closed
@@ -728,7 +727,7 @@ theorem _root_.closedEmbedding_of_continuous_injective_closed (h₁ : Continuous
   rw [preimage_compl, preimage_image_eq _ h₂, compl_compl]
 #align closed_embedding_of_continuous_injective_closed closedEmbedding_of_continuous_injective_closed
 
-theorem _root_.closedEmbedding_id : ClosedEmbedding (@id α) :=
+theorem _root_.closedEmbedding_id : ClosedEmbedding (@id X) :=
   ⟨embedding_id, IsClosedMap.id.closed_range⟩
 #align closed_embedding_id closedEmbedding_id
 
@@ -737,7 +736,7 @@ theorem comp (hg : ClosedEmbedding g) (hf : ClosedEmbedding f) :
   ⟨hg.toEmbedding.comp hf.toEmbedding, (hg.isClosedMap.comp hf.isClosedMap).closed_range⟩
 #align closed_embedding.comp ClosedEmbedding.comp
 
-theorem closure_image_eq (hf : ClosedEmbedding f) (s : Set α) :
+theorem closure_image_eq (hf : ClosedEmbedding f) (s : Set X) :
     closure (f '' s) = f '' closure s :=
   hf.isClosedMap.closure_image_eq_of_continuous hf.continuous s
 #align closed_embedding.closure_image_eq ClosedEmbedding.closure_image_eq
chore(Topology/Maps): small clean-ups (#9268)
  • Make sure each new definition is in a separate section.
  • Add corresponding namespaces where missing.
  • Collect TopologicalSpace assumptions.
  • Collect variables ${f : \alpha \to \beta}$ and ${g : \beta \to \gamma}$ in theorems; we leave definitions alone.
  • In a later PR, we will rename the type variables in this file: this reduces the diff in doing so.

Co-authored-by: grunweg <grunweg@posteo.de>

Diff
@@ -49,7 +49,7 @@ open Set Filter Function
 
 open TopologicalSpace Topology Filter
 
-variable {α : Type*} {β : Type*} {γ : Type*} {δ : Type*}
+variable {α : Type*} {β : Type*} {γ : Type*} {ι : Type*} {f : α → β} {g : β → γ}
 
 section Inducing
 
@@ -63,7 +63,7 @@ structure Inducing [tα : TopologicalSpace α] [tβ : TopologicalSpace β] (f :
 #align inducing Inducing
 #align inducing_iff inducing_iff
 
-variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ] [TopologicalSpace δ]
+variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
 
 theorem inducing_induced (f : α → β) : @Inducing α β (TopologicalSpace.induced f ‹_›) _ f :=
   @Inducing.mk _ _ (TopologicalSpace.induced f ‹_›) _ _ rfl
@@ -72,117 +72,121 @@ theorem inducing_id : Inducing (@id α) :=
   ⟨induced_id.symm⟩
 #align inducing_id inducing_id
 
-protected theorem Inducing.comp {g : β → γ} {f : α → β} (hg : Inducing g) (hf : Inducing f) :
+protected theorem Inducing.comp (hg : Inducing g) (hf : Inducing f) :
     Inducing (g ∘ f) :=
   ⟨by rw [hf.induced, hg.induced, induced_compose]⟩
 #align inducing.comp Inducing.comp
 
-theorem inducing_of_inducing_compose {f : α → β} {g : β → γ} (hf : Continuous f) (hg : Continuous g)
-    (hgf : Inducing (g ∘ f)) : Inducing f :=
+theorem inducing_of_inducing_compose
+    (hf : Continuous f) (hg : Continuous g) (hgf : Inducing (g ∘ f)) : Inducing f :=
   ⟨le_antisymm (by rwa [← continuous_iff_le_induced])
       (by
         rw [hgf.induced, ← induced_compose]
         exact induced_mono hg.le_induced)⟩
 #align inducing_of_inducing_compose inducing_of_inducing_compose
 
-theorem inducing_iff_nhds {f : α → β} : Inducing f ↔ ∀ a, 𝓝 a = comap f (𝓝 (f a)) :=
+theorem inducing_iff_nhds : Inducing f ↔ ∀ a, 𝓝 a = comap f (𝓝 (f a)) :=
   (inducing_iff _).trans (induced_iff_nhds_eq f)
 #align inducing_iff_nhds inducing_iff_nhds
 
-theorem Inducing.nhds_eq_comap {f : α → β} (hf : Inducing f) : ∀ a : α, 𝓝 a = comap f (𝓝 <| f a) :=
+namespace Inducing
+
+theorem nhds_eq_comap (hf : Inducing f) : ∀ a : α, 𝓝 a = comap f (𝓝 <| f a) :=
   inducing_iff_nhds.1 hf
 #align inducing.nhds_eq_comap Inducing.nhds_eq_comap
 
-theorem Inducing.nhdsSet_eq_comap {f : α → β} (hf : Inducing f) (s : Set α) :
+theorem nhdsSet_eq_comap (hf : Inducing f) (s : Set α) :
     𝓝ˢ s = comap f (𝓝ˢ (f '' s)) := by
   simp only [nhdsSet, sSup_image, comap_iSup, hf.nhds_eq_comap, iSup_image]
 #align inducing.nhds_set_eq_comap Inducing.nhdsSet_eq_comap
 
-theorem Inducing.map_nhds_eq {f : α → β} (hf : Inducing f) (a : α) : (𝓝 a).map f = 𝓝[range f] f a :=
+theorem map_nhds_eq (hf : Inducing f) (a : α) : (𝓝 a).map f = 𝓝[range f] f a :=
   hf.induced.symm ▸ map_nhds_induced_eq a
 #align inducing.map_nhds_eq Inducing.map_nhds_eq
 
-theorem Inducing.map_nhds_of_mem {f : α → β} (hf : Inducing f) (a : α) (h : range f ∈ 𝓝 (f a)) :
+theorem map_nhds_of_mem (hf : Inducing f) (a : α) (h : range f ∈ 𝓝 (f a)) :
     (𝓝 a).map f = 𝓝 (f a) :=
   hf.induced.symm ▸ map_nhds_induced_of_mem h
 #align inducing.map_nhds_of_mem Inducing.map_nhds_of_mem
 
 -- porting note: new lemma
-theorem Inducing.mapClusterPt_iff {f : α → β} (hf : Inducing f) {a : α} {l : Filter α} :
+theorem mapClusterPt_iff (hf : Inducing f) {a : α} {l : Filter α} :
     MapClusterPt (f a) l f ↔ ClusterPt a l := by
   delta MapClusterPt ClusterPt
   rw [← Filter.push_pull', ← hf.nhds_eq_comap, map_neBot_iff]
 
-theorem Inducing.image_mem_nhdsWithin {f : α → β} (hf : Inducing f) {a : α} {s : Set α}
-    (hs : s ∈ 𝓝 a) : f '' s ∈ 𝓝[range f] f a :=
+theorem image_mem_nhdsWithin (hf : Inducing f) {a : α} {s : Set α} (hs : s ∈ 𝓝 a) :
+    f '' s ∈ 𝓝[range f] f a :=
   hf.map_nhds_eq a ▸ image_mem_map hs
 #align inducing.image_mem_nhds_within Inducing.image_mem_nhdsWithin
 
-theorem Inducing.tendsto_nhds_iff {ι : Type*} {f : ι → β} {g : β → γ} {a : Filter ι} {b : β}
-    (hg : Inducing g) : Tendsto f a (𝓝 b) ↔ Tendsto (g ∘ f) a (𝓝 (g b)) := by
+theorem tendsto_nhds_iff {f : ι → β} {a : Filter ι} {b : β} (hg : Inducing g) :
+    Tendsto f a (𝓝 b) ↔ Tendsto (g ∘ f) a (𝓝 (g b)) := by
   rw [hg.nhds_eq_comap, tendsto_comap_iff]
 #align inducing.tendsto_nhds_iff Inducing.tendsto_nhds_iff
 
-theorem Inducing.continuousAt_iff {f : α → β} {g : β → γ} (hg : Inducing g) {x : α} :
+theorem continuousAt_iff (hg : Inducing g) {x : α} :
     ContinuousAt f x ↔ ContinuousAt (g ∘ f) x :=
   hg.tendsto_nhds_iff
 #align inducing.continuous_at_iff Inducing.continuousAt_iff
 
-theorem Inducing.continuous_iff {f : α → β} {g : β → γ} (hg : Inducing g) :
+theorem continuous_iff (hg : Inducing g) :
     Continuous f ↔ Continuous (g ∘ f) := by
   simp_rw [continuous_iff_continuousAt, hg.continuousAt_iff]
 #align inducing.continuous_iff Inducing.continuous_iff
 
-theorem Inducing.continuousAt_iff' {f : α → β} {g : β → γ} (hf : Inducing f) {x : α}
-    (h : range f ∈ 𝓝 (f x)) : ContinuousAt (g ∘ f) x ↔ ContinuousAt g (f x) := by
+theorem continuousAt_iff' (hf : Inducing f) {x : α} (h : range f ∈ 𝓝 (f x)) :
+    ContinuousAt (g ∘ f) x ↔ ContinuousAt g (f x) := by
   simp_rw [ContinuousAt, Filter.Tendsto, ← hf.map_nhds_of_mem _ h, Filter.map_map, comp]
 #align inducing.continuous_at_iff' Inducing.continuousAt_iff'
 
-protected theorem Inducing.continuous {f : α → β} (hf : Inducing f) : Continuous f :=
+protected theorem continuous (hf : Inducing f) : Continuous f :=
   hf.continuous_iff.mp continuous_id
 #align inducing.continuous Inducing.continuous
 
-protected theorem Inducing.inducing_iff {f : α → β} {g : β → γ} (hg : Inducing g) :
+protected theorem inducing_iff (hg : Inducing g) :
     Inducing f ↔ Inducing (g ∘ f) := by
   refine' ⟨fun h => hg.comp h, fun hgf => inducing_of_inducing_compose _ hg.continuous hgf⟩
   rw [hg.continuous_iff]
   exact hgf.continuous
 #align inducing.inducing_iff Inducing.inducing_iff
 
-theorem Inducing.closure_eq_preimage_closure_image {f : α → β} (hf : Inducing f) (s : Set α) :
+theorem closure_eq_preimage_closure_image (hf : Inducing f) (s : Set α) :
     closure s = f ⁻¹' closure (f '' s) := by
   ext x
   rw [Set.mem_preimage, ← closure_induced, hf.induced]
 #align inducing.closure_eq_preimage_closure_image Inducing.closure_eq_preimage_closure_image
 
-theorem Inducing.isClosed_iff {f : α → β} (hf : Inducing f) {s : Set α} :
+theorem isClosed_iff (hf : Inducing f) {s : Set α} :
     IsClosed s ↔ ∃ t, IsClosed t ∧ f ⁻¹' t = s := by rw [hf.induced, isClosed_induced_iff]
 #align inducing.is_closed_iff Inducing.isClosed_iff
 
-theorem Inducing.isClosed_iff' {f : α → β} (hf : Inducing f) {s : Set α} :
+theorem isClosed_iff' (hf : Inducing f) {s : Set α} :
     IsClosed s ↔ ∀ x, f x ∈ closure (f '' s) → x ∈ s := by rw [hf.induced, isClosed_induced_iff']
 #align inducing.is_closed_iff' Inducing.isClosed_iff'
 
-theorem Inducing.isClosed_preimage {f : α → β} (h : Inducing f) (s : Set β) (hs : IsClosed s) :
+theorem isClosed_preimage (h : Inducing f) (s : Set β) (hs : IsClosed s) :
     IsClosed (f ⁻¹' s) :=
-  (Inducing.isClosed_iff h).mpr ⟨s, hs, rfl⟩
+  (isClosed_iff h).mpr ⟨s, hs, rfl⟩
 #align inducing.is_closed_preimage Inducing.isClosed_preimage
 
-theorem Inducing.isOpen_iff {f : α → β} (hf : Inducing f) {s : Set α} :
+theorem isOpen_iff (hf : Inducing f) {s : Set α} :
     IsOpen s ↔ ∃ t, IsOpen t ∧ f ⁻¹' t = s := by rw [hf.induced, isOpen_induced_iff]
 #align inducing.is_open_iff Inducing.isOpen_iff
 
-theorem Inducing.setOf_isOpen {f : α → β} (hf : Inducing f) :
+theorem setOf_isOpen (hf : Inducing f) :
     {s : Set α | IsOpen s} = preimage f '' {t | IsOpen t} :=
   Set.ext fun _ ↦ hf.isOpen_iff
 
-theorem Inducing.dense_iff {f : α → β} (hf : Inducing f) {s : Set α} :
+theorem dense_iff (hf : Inducing f) {s : Set α} :
     Dense s ↔ ∀ x, f x ∈ closure (f '' s) := by
   simp only [Dense, hf.closure_eq_preimage_closure_image, mem_preimage]
 #align inducing.dense_iff Inducing.dense_iff
 
 end Inducing
 
+end Inducing
+
 section Embedding
 
 /-- A function between topological spaces is an embedding if it is injective,
@@ -211,13 +215,13 @@ theorem embedding_id : Embedding (@id α) :=
   ⟨inducing_id, fun _ _ h => h⟩
 #align embedding_id embedding_id
 
-protected theorem Embedding.comp {g : β → γ} {f : α → β} (hg : Embedding g) (hf : Embedding f) :
+protected theorem Embedding.comp (hg : Embedding g) (hf : Embedding f) :
     Embedding (g ∘ f) :=
   { hg.toInducing.comp hf.toInducing with inj := fun _ _ h => hf.inj <| hg.inj h }
 #align embedding.comp Embedding.comp
 
-theorem embedding_of_embedding_compose {f : α → β} {g : β → γ} (hf : Continuous f)
-    (hg : Continuous g) (hgf : Embedding (g ∘ f)) : Embedding f :=
+theorem embedding_of_embedding_compose
+    (hf : Continuous f) (hg : Continuous g) (hgf : Embedding (g ∘ f)) : Embedding f :=
   { induced := (inducing_of_inducing_compose hf hg hgf.toInducing).induced
     inj := fun a₁ a₂ h => hgf.inj <| by simp [h, (· ∘ ·)] }
 #align embedding_of_embedding_compose embedding_of_embedding_compose
@@ -227,27 +231,27 @@ protected theorem Function.LeftInverse.embedding {f : α → β} {g : β → α}
   embedding_of_embedding_compose hg hf <| h.comp_eq_id.symm ▸ embedding_id
 #align function.left_inverse.embedding Function.LeftInverse.embedding
 
-theorem Embedding.map_nhds_eq {f : α → β} (hf : Embedding f) (a : α) :
+theorem Embedding.map_nhds_eq (hf : Embedding f) (a : α) :
     (𝓝 a).map f = 𝓝[range f] f a :=
   hf.1.map_nhds_eq a
 #align embedding.map_nhds_eq Embedding.map_nhds_eq
 
-theorem Embedding.map_nhds_of_mem {f : α → β} (hf : Embedding f) (a : α) (h : range f ∈ 𝓝 (f a)) :
+theorem Embedding.map_nhds_of_mem (hf : Embedding f) (a : α) (h : range f ∈ 𝓝 (f a)) :
     (𝓝 a).map f = 𝓝 (f a) :=
   hf.1.map_nhds_of_mem a h
 #align embedding.map_nhds_of_mem Embedding.map_nhds_of_mem
 
-theorem Embedding.tendsto_nhds_iff {ι : Type*} {f : ι → β} {g : β → γ} {a : Filter ι} {b : β}
+theorem Embedding.tendsto_nhds_iff {f : ι → β} {a : Filter ι} {b : β}
     (hg : Embedding g) : Tendsto f a (𝓝 b) ↔ Tendsto (g ∘ f) a (𝓝 (g b)) :=
   hg.toInducing.tendsto_nhds_iff
 #align embedding.tendsto_nhds_iff Embedding.tendsto_nhds_iff
 
-theorem Embedding.continuous_iff {f : α → β} {g : β → γ} (hg : Embedding g) :
+theorem Embedding.continuous_iff (hg : Embedding g) :
     Continuous f ↔ Continuous (g ∘ f) :=
   Inducing.continuous_iff hg.1
 #align embedding.continuous_iff Embedding.continuous_iff
 
-theorem Embedding.continuous {f : α → β} (hf : Embedding f) : Continuous f :=
+theorem Embedding.continuous (hf : Embedding f) : Continuous f :=
   Inducing.continuous hf.1
 #align embedding.continuous Embedding.continuous
 
@@ -267,6 +271,7 @@ theorem Embedding.discreteTopology {X Y : Type*} [TopologicalSpace X] [Topologic
 
 end Embedding
 
+section QuotientMap
 /-- A function between topological spaces is a quotient map if it is surjective,
   and for all `s : Set β`, `s` is open iff its preimage is an open set. -/
 def QuotientMap {α : Type*} {β : Type*} [tα : TopologicalSpace α] [tβ : TopologicalSpace β]
@@ -274,12 +279,13 @@ def QuotientMap {α : Type*} {β : Type*} [tα : TopologicalSpace α] [tβ : Top
   Surjective f ∧ tβ = tα.coinduced f
 #align quotient_map QuotientMap
 
-theorem quotientMap_iff [TopologicalSpace α] [TopologicalSpace β] {f : α → β} :
-    QuotientMap f ↔ Surjective f ∧ ∀ s : Set β, IsOpen s ↔ IsOpen (f ⁻¹' s) :=
+variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
+
+theorem quotientMap_iff : QuotientMap f ↔ Surjective f ∧ ∀ s : Set β, IsOpen s ↔ IsOpen (f ⁻¹' s) :=
   and_congr Iff.rfl TopologicalSpace.ext_iff
 #align quotient_map_iff quotientMap_iff
 
-theorem quotientMap_iff_closed [TopologicalSpace α] [TopologicalSpace β] {f : α → β} :
+theorem quotientMap_iff_closed :
     QuotientMap f ↔ Surjective f ∧ ∀ s : Set β, IsClosed s ↔ IsClosed (f ⁻¹' s) :=
   quotientMap_iff.trans <| Iff.rfl.and <| compl_surjective.forall.trans <| by
     simp only [isOpen_compl_iff, preimage_compl]
@@ -287,9 +293,6 @@ theorem quotientMap_iff_closed [TopologicalSpace α] [TopologicalSpace β] {f :
 
 namespace QuotientMap
 
-variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ] [TopologicalSpace δ]
-  {g : β → γ} {f : α → β}
-
 protected theorem id : QuotientMap (@id α) :=
   ⟨fun a => ⟨a, rfl⟩, coinduced_id.symm⟩
 #align quotient_map.id QuotientMap.id
@@ -334,20 +337,23 @@ protected theorem isClosed_preimage (hf : QuotientMap f) {s : Set β} :
 
 end QuotientMap
 
+end QuotientMap
+
+section OpenMap
 /-- A map `f : α → β` is said to be an *open map*, if the image of any open `U : Set α`
 is open in `β`. -/
 def IsOpenMap [TopologicalSpace α] [TopologicalSpace β] (f : α → β) :=
   ∀ U : Set α, IsOpen U → IsOpen (f '' U)
 #align is_open_map IsOpenMap
 
-namespace IsOpenMap
+variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
 
-variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ] {f : α → β}
+namespace IsOpenMap
 
 protected theorem id : IsOpenMap (@id α) := fun s hs => by rwa [image_id]
 #align is_open_map.id IsOpenMap.id
 
-protected theorem comp {g : β → γ} {f : α → β} (hg : IsOpenMap g) (hf : IsOpenMap f) :
+protected theorem comp (hg : IsOpenMap g) (hf : IsOpenMap f) :
     IsOpenMap (g ∘ f) := fun s hs => by rw [image_comp]; exact hg _ (hf _ hs)
 #align is_open_map.comp IsOpenMap.comp
 
@@ -384,7 +390,7 @@ theorem of_nhds_le (hf : ∀ a, 𝓝 (f a) ≤ map f (𝓝 a)) : IsOpenMap f :=
   isOpen_iff_mem_nhds.2 fun _b ⟨_a, has, hab⟩ => hab ▸ hf _ (image_mem_map <| hs.mem_nhds has)
 #align is_open_map.of_nhds_le IsOpenMap.of_nhds_le
 
-theorem of_sections {f : α → β}
+theorem of_sections
     (h : ∀ x, ∃ g : β → α, ContinuousAt g (f x) ∧ g (f x) = x ∧ RightInverse g f) : IsOpenMap f :=
   of_nhds_le fun x =>
     let ⟨g, hgc, hgx, hgf⟩ := h x
@@ -394,14 +400,14 @@ theorem of_sections {f : α → β}
       _ = map f (𝓝 x) := by rw [hgx]
 #align is_open_map.of_sections IsOpenMap.of_sections
 
-theorem of_inverse {f : α → β} {f' : β → α} (h : Continuous f') (l_inv : LeftInverse f f')
+theorem of_inverse {f' : β → α} (h : Continuous f') (l_inv : LeftInverse f f')
     (r_inv : RightInverse f f') : IsOpenMap f :=
   of_sections fun _ => ⟨f', h.continuousAt, r_inv _, l_inv⟩
 #align is_open_map.of_inverse IsOpenMap.of_inverse
 
 /-- A continuous surjective open map is a quotient map. -/
-theorem to_quotientMap {f : α → β} (open_map : IsOpenMap f) (cont : Continuous f)
-    (surj : Surjective f) : QuotientMap f :=
+theorem to_quotientMap (open_map : IsOpenMap f) (cont : Continuous f) (surj : Surjective f) :
+    QuotientMap f :=
   quotientMap_iff.2
     ⟨surj, fun s => ⟨fun h => h.preimage cont, fun h => surj.image_preimage s ▸ open_map _ h⟩⟩
 #align is_open_map.to_quotient_map IsOpenMap.to_quotientMap
@@ -443,13 +449,11 @@ theorem preimage_frontier_eq_frontier_preimage (hf : IsOpenMap f) (hfc : Continu
 
 end IsOpenMap
 
-theorem isOpenMap_iff_nhds_le [TopologicalSpace α] [TopologicalSpace β] {f : α → β} :
-    IsOpenMap f ↔ ∀ a : α, 𝓝 (f a) ≤ (𝓝 a).map f :=
+theorem isOpenMap_iff_nhds_le : IsOpenMap f ↔ ∀ a : α, 𝓝 (f a) ≤ (𝓝 a).map f :=
   ⟨fun hf => hf.nhds_le, IsOpenMap.of_nhds_le⟩
 #align is_open_map_iff_nhds_le isOpenMap_iff_nhds_le
 
-theorem isOpenMap_iff_interior [TopologicalSpace α] [TopologicalSpace β] {f : α → β} :
-    IsOpenMap f ↔ ∀ s, f '' interior s ⊆ interior (f '' s) :=
+theorem isOpenMap_iff_interior : IsOpenMap f ↔ ∀ s, f '' interior s ⊆ interior (f '' s) :=
   ⟨IsOpenMap.image_interior_subset, fun hs u hu =>
     subset_interior_iff_isOpen.mp <|
       calc
@@ -458,14 +462,15 @@ theorem isOpenMap_iff_interior [TopologicalSpace α] [TopologicalSpace β] {f :
 #align is_open_map_iff_interior isOpenMap_iff_interior
 
 /-- An inducing map with an open range is an open map. -/
-protected theorem Inducing.isOpenMap [TopologicalSpace α] [TopologicalSpace β] {f : α → β}
-    (hi : Inducing f) (ho : IsOpen (range f)) : IsOpenMap f :=
+protected theorem Inducing.isOpenMap (hi : Inducing f) (ho : IsOpen (range f)) : IsOpenMap f :=
   IsOpenMap.of_nhds_le fun _ => (hi.map_nhds_of_mem _ <| IsOpen.mem_nhds ho <| mem_range_self _).ge
 #align inducing.is_open_map Inducing.isOpenMap
 
+end OpenMap
+
 section IsClosedMap
 
-variable [TopologicalSpace α] [TopologicalSpace β]
+variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
 
 /-- A map `f : α → β` is said to be a *closed map*, if the image of any closed `U : Set α`
 is closed in `β`. -/
@@ -473,47 +478,41 @@ def IsClosedMap (f : α → β) :=
   ∀ U : Set α, IsClosed U → IsClosed (f '' U)
 #align is_closed_map IsClosedMap
 
-end IsClosedMap
-
 namespace IsClosedMap
-
-variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
-
 open Function
 
 protected theorem id : IsClosedMap (@id α) := fun s hs => by rwa [image_id]
 #align is_closed_map.id IsClosedMap.id
 
-protected theorem comp {g : β → γ} {f : α → β} (hg : IsClosedMap g) (hf : IsClosedMap f) :
-    IsClosedMap (g ∘ f) := by
+protected theorem comp (hg : IsClosedMap g) (hf : IsClosedMap f) : IsClosedMap (g ∘ f) := by
   intro s hs
   rw [image_comp]
   exact hg _ (hf _ hs)
 #align is_closed_map.comp IsClosedMap.comp
 
-theorem closure_image_subset {f : α → β} (hf : IsClosedMap f) (s : Set α) :
+theorem closure_image_subset (hf : IsClosedMap f) (s : Set α) :
     closure (f '' s) ⊆ f '' closure s :=
   closure_minimal (image_subset _ subset_closure) (hf _ isClosed_closure)
 #align is_closed_map.closure_image_subset IsClosedMap.closure_image_subset
 
-theorem of_inverse {f : α → β} {f' : β → α} (h : Continuous f') (l_inv : LeftInverse f f')
+theorem of_inverse {f' : β → α} (h : Continuous f') (l_inv : LeftInverse f f')
     (r_inv : RightInverse f f') : IsClosedMap f := fun s hs => by
   rw [image_eq_preimage_of_inverse r_inv l_inv]
   exact hs.preimage h
 #align is_closed_map.of_inverse IsClosedMap.of_inverse
 
-theorem of_nonempty {f : α → β} (h : ∀ s, IsClosed s → s.Nonempty → IsClosed (f '' s)) :
+theorem of_nonempty (h : ∀ s, IsClosed s → s.Nonempty → IsClosed (f '' s)) :
     IsClosedMap f := by
   intro s hs; rcases eq_empty_or_nonempty s with h2s | h2s
   · simp_rw [h2s, image_empty, isClosed_empty]
   · exact h s hs h2s
 #align is_closed_map.of_nonempty IsClosedMap.of_nonempty
 
-theorem closed_range {f : α → β} (hf : IsClosedMap f) : IsClosed (range f) :=
+theorem closed_range (hf : IsClosedMap f) : IsClosed (range f) :=
   @image_univ _ _ f ▸ hf _ isClosed_univ
 #align is_closed_map.closed_range IsClosedMap.closed_range
 
-theorem to_quotientMap {f : α → β} (hcl : IsClosedMap f) (hcont : Continuous f)
+theorem to_quotientMap (hcl : IsClosedMap f) (hcont : Continuous f)
     (hsurj : Surjective f) : QuotientMap f :=
   quotientMap_iff_closed.2 ⟨hsurj, fun s =>
     ⟨fun hs => hs.preimage hcont, fun hs => hsurj.image_preimage s ▸ hcl _ hs⟩⟩
@@ -521,15 +520,14 @@ theorem to_quotientMap {f : α → β} (hcl : IsClosedMap f) (hcont : Continuous
 
 end IsClosedMap
 
-theorem Inducing.isClosedMap [TopologicalSpace α] [TopologicalSpace β] {f : α → β} (hf : Inducing f)
-    (h : IsClosed (range f)) : IsClosedMap f := by
+theorem Inducing.isClosedMap (hf : Inducing f) (h : IsClosed (range f)) : IsClosedMap f := by
   intro s hs
   rcases hf.isClosed_iff.1 hs with ⟨t, ht, rfl⟩
   rw [image_preimage_eq_inter_range]
   exact ht.inter h
 #align inducing.is_closed_map Inducing.isClosedMap
 
-theorem isClosedMap_iff_closure_image [TopologicalSpace α] [TopologicalSpace β] {f : α → β} :
+theorem isClosedMap_iff_closure_image :
     IsClosedMap f ↔ ∀ s, closure (f '' s) ⊆ f '' closure s :=
   ⟨IsClosedMap.closure_image_subset, fun hs c hc =>
     isClosed_of_closure_subset <|
@@ -542,30 +540,32 @@ theorem isClosedMap_iff_closure_image [TopologicalSpace α] [TopologicalSpace β
 the image by `f` of some cluster point of `s`.
 If you require this for all filters instead of just principal filters, and also that `f` is
 continuous, you get the notion of **proper map**. See `isProperMap_iff_clusterPt`. -/
-theorem isClosedMap_iff_clusterPt [TopologicalSpace α] [TopologicalSpace β] {f : α → β} :
+theorem isClosedMap_iff_clusterPt :
     IsClosedMap f ↔ ∀ s y, MapClusterPt y (𝓟 s) f → ∃ x, f x = y ∧ ClusterPt x (𝓟 s) := by
   simp [MapClusterPt, isClosedMap_iff_closure_image, subset_def, mem_closure_iff_clusterPt,
     and_comm]
 
-theorem IsClosedMap.closure_image_eq_of_continuous [TopologicalSpace α] [TopologicalSpace β]
-    {f : α → β} (f_closed : IsClosedMap f) (f_cont : Continuous f) (s : Set α) :
+theorem IsClosedMap.closure_image_eq_of_continuous
+    (f_closed : IsClosedMap f) (f_cont : Continuous f) (s : Set α) :
     closure (f '' s) = f '' closure s :=
   subset_antisymm (f_closed.closure_image_subset s) (image_closure_subset_closure_image f_cont)
 
-theorem IsClosedMap.lift'_closure_map_eq [TopologicalSpace α] [TopologicalSpace β]
-    {f : α → β} (f_closed : IsClosedMap f) (f_cont : Continuous f) (F : Filter α) :
+theorem IsClosedMap.lift'_closure_map_eq
+    (f_closed : IsClosedMap f) (f_cont : Continuous f) (F : Filter α) :
     (map f F).lift' closure = map f (F.lift' closure) := by
   rw [map_lift'_eq2 (monotone_closure β), map_lift'_eq (monotone_closure α)]
   congr
   ext s : 1
   exact f_closed.closure_image_eq_of_continuous f_cont s
 
-theorem IsClosedMap.mapClusterPt_iff_lift'_closure [TopologicalSpace α] [TopologicalSpace β]
-    {F : Filter α} {f : α → β} (f_closed : IsClosedMap f) (f_cont : Continuous f) {y : β} :
+theorem IsClosedMap.mapClusterPt_iff_lift'_closure
+    {F : Filter α} (f_closed : IsClosedMap f) (f_cont : Continuous f) {y : β} :
     MapClusterPt y F f ↔ ((F.lift' closure) ⊓ 𝓟 (f ⁻¹' {y})).NeBot := by
   rw [MapClusterPt, clusterPt_iff_lift'_closure', f_closed.lift'_closure_map_eq f_cont,
       ← comap_principal, ← map_neBot_iff f, Filter.push_pull, principal_singleton]
 
+end IsClosedMap
+
 section OpenEmbedding
 
 variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
@@ -578,68 +578,68 @@ structure OpenEmbedding (f : α → β) extends Embedding f : Prop where
 #align open_embedding OpenEmbedding
 #align open_embedding_iff openEmbedding_iff
 
-theorem OpenEmbedding.isOpenMap {f : α → β} (hf : OpenEmbedding f) : IsOpenMap f :=
+theorem OpenEmbedding.isOpenMap (hf : OpenEmbedding f) : IsOpenMap f :=
   hf.toEmbedding.toInducing.isOpenMap hf.open_range
 #align open_embedding.is_open_map OpenEmbedding.isOpenMap
 
-theorem OpenEmbedding.map_nhds_eq {f : α → β} (hf : OpenEmbedding f) (a : α) :
+theorem OpenEmbedding.map_nhds_eq (hf : OpenEmbedding f) (a : α) :
     map f (𝓝 a) = 𝓝 (f a) :=
   hf.toEmbedding.map_nhds_of_mem _ <| hf.open_range.mem_nhds <| mem_range_self _
 #align open_embedding.map_nhds_eq OpenEmbedding.map_nhds_eq
 
-theorem OpenEmbedding.open_iff_image_open {f : α → β} (hf : OpenEmbedding f) {s : Set α} :
+theorem OpenEmbedding.open_iff_image_open (hf : OpenEmbedding f) {s : Set α} :
     IsOpen s ↔ IsOpen (f '' s) :=
   ⟨hf.isOpenMap s, fun h => by
     convert ← h.preimage hf.toEmbedding.continuous
     apply preimage_image_eq _ hf.inj⟩
 #align open_embedding.open_iff_image_open OpenEmbedding.open_iff_image_open
 
-theorem OpenEmbedding.tendsto_nhds_iff {ι : Type*} {f : ι → β} {g : β → γ} {a : Filter ι} {b : β}
-    (hg : OpenEmbedding g) : Tendsto f a (𝓝 b) ↔ Tendsto (g ∘ f) a (𝓝 (g b)) :=
+theorem OpenEmbedding.tendsto_nhds_iff {f : ι → β} {a : Filter ι} {b : β} (hg : OpenEmbedding g) :
+    Tendsto f a (𝓝 b) ↔ Tendsto (g ∘ f) a (𝓝 (g b)) :=
   hg.toEmbedding.tendsto_nhds_iff
 #align open_embedding.tendsto_nhds_iff OpenEmbedding.tendsto_nhds_iff
 
-theorem OpenEmbedding.tendsto_nhds_iff' {f : α → β} (hf : OpenEmbedding f) {g : β → γ}
-    {l : Filter γ} {a : α} : Tendsto (g ∘ f) (𝓝 a) l ↔ Tendsto g (𝓝 (f a)) l := by
+theorem OpenEmbedding.tendsto_nhds_iff' (hf : OpenEmbedding f) {l : Filter γ} {a : α} :
+    Tendsto (g ∘ f) (𝓝 a) l ↔ Tendsto g (𝓝 (f a)) l := by
   rw [Tendsto, ← map_map, hf.map_nhds_eq]; rfl
 
-theorem OpenEmbedding.continuousAt_iff {f : α → β} (hf : OpenEmbedding f) {g : β → γ} {x : α} :
+theorem OpenEmbedding.continuousAt_iff (hf : OpenEmbedding f) {x : α} :
     ContinuousAt (g ∘ f) x ↔ ContinuousAt g (f x) :=
   hf.tendsto_nhds_iff'
 #align open_embedding.continuous_at_iff OpenEmbedding.continuousAt_iff
 
-theorem OpenEmbedding.continuous {f : α → β} (hf : OpenEmbedding f) : Continuous f :=
+theorem OpenEmbedding.continuous (hf : OpenEmbedding f) : Continuous f :=
   hf.toEmbedding.continuous
 #align open_embedding.continuous OpenEmbedding.continuous
 
-theorem OpenEmbedding.open_iff_preimage_open {f : α → β} (hf : OpenEmbedding f) {s : Set β}
+theorem OpenEmbedding.open_iff_preimage_open (hf : OpenEmbedding f) {s : Set β}
     (hs : s ⊆ range f) : IsOpen s ↔ IsOpen (f ⁻¹' s) := by
   rw [hf.open_iff_image_open, image_preimage_eq_inter_range, inter_eq_self_of_subset_left hs]
 #align open_embedding.open_iff_preimage_open OpenEmbedding.open_iff_preimage_open
 
-theorem openEmbedding_of_embedding_open {f : α → β} (h₁ : Embedding f) (h₂ : IsOpenMap f) :
+theorem openEmbedding_of_embedding_open (h₁ : Embedding f) (h₂ : IsOpenMap f) :
     OpenEmbedding f :=
   ⟨h₁, h₂.isOpen_range⟩
 #align open_embedding_of_embedding_open openEmbedding_of_embedding_open
 
 /-- A surjective embedding is an `OpenEmbedding`. -/
-theorem _root_.Embedding.toOpenEmbedding_of_surjective {f : α → β}
-    (hf : Embedding f) (hsurj: f.Surjective) : OpenEmbedding f :=
+theorem _root_.Embedding.toOpenEmbedding_of_surjective (hf : Embedding f) (hsurj: f.Surjective) :
+    OpenEmbedding f :=
   ⟨hf, hsurj.range_eq ▸ isOpen_univ⟩
 
-theorem openEmbedding_iff_embedding_open {f : α → β} :
+theorem openEmbedding_iff_embedding_open :
     OpenEmbedding f ↔ Embedding f ∧ IsOpenMap f :=
   ⟨fun h => ⟨h.1, h.isOpenMap⟩, fun h => openEmbedding_of_embedding_open h.1 h.2⟩
 #align open_embedding_iff_embedding_open openEmbedding_iff_embedding_open
 
-theorem openEmbedding_of_continuous_injective_open {f : α → β} (h₁ : Continuous f)
-    (h₂ : Injective f) (h₃ : IsOpenMap f) : OpenEmbedding f := by
+theorem openEmbedding_of_continuous_injective_open
+    (h₁ : Continuous f) (h₂ : Injective f) (h₃ : IsOpenMap f) : OpenEmbedding f := by
   simp only [openEmbedding_iff_embedding_open, embedding_iff, inducing_iff_nhds, *, and_true_iff]
   exact fun a =>
     le_antisymm (h₁.tendsto _).le_comap (@comap_map _ _ (𝓝 a) _ h₂ ▸ comap_mono (h₃.nhds_le _))
 #align open_embedding_of_continuous_injective_open openEmbedding_of_continuous_injective_open
 
-theorem openEmbedding_iff_continuous_injective_open {f : α → β} :
+theorem openEmbedding_iff_continuous_injective_open :
     OpenEmbedding f ↔ Continuous f ∧ Injective f ∧ IsOpenMap f :=
   ⟨fun h => ⟨h.continuous, h.inj, h.isOpenMap⟩, fun h =>
     openEmbedding_of_continuous_injective_open h.1 h.2.1 h.2.2⟩
@@ -649,29 +649,33 @@ theorem openEmbedding_id : OpenEmbedding (@id α) :=
   ⟨embedding_id, IsOpenMap.id.isOpen_range⟩
 #align open_embedding_id openEmbedding_id
 
-protected theorem OpenEmbedding.comp {g : β → γ} {f : α → β} (hg : OpenEmbedding g)
+namespace OpenEmbedding
+
+protected theorem comp (hg : OpenEmbedding g)
     (hf : OpenEmbedding f) : OpenEmbedding (g ∘ f) :=
   ⟨hg.1.comp hf.1, (hg.isOpenMap.comp hf.isOpenMap).isOpen_range⟩
 #align open_embedding.comp OpenEmbedding.comp
 
-theorem OpenEmbedding.isOpenMap_iff {g : β → γ} {f : α → β} (hg : OpenEmbedding g) :
+theorem isOpenMap_iff (hg : OpenEmbedding g) :
     IsOpenMap f ↔ IsOpenMap (g ∘ f) := by
   simp_rw [isOpenMap_iff_nhds_le, ← map_map, comp, ← hg.map_nhds_eq, Filter.map_le_map_iff hg.inj]
 #align open_embedding.is_open_map_iff OpenEmbedding.isOpenMap_iff
 
-theorem OpenEmbedding.of_comp_iff (f : α → β) {g : β → γ} (hg : OpenEmbedding g) :
+theorem of_comp_iff (f : α → β) (hg : OpenEmbedding g) :
     OpenEmbedding (g ∘ f) ↔ OpenEmbedding f := by
   simp only [openEmbedding_iff_continuous_injective_open, ← hg.isOpenMap_iff, ←
     hg.1.continuous_iff, hg.inj.of_comp_iff]
 #align open_embedding.of_comp_iff OpenEmbedding.of_comp_iff
 
-theorem OpenEmbedding.of_comp (f : α → β) {g : β → γ} (hg : OpenEmbedding g)
+theorem of_comp (f : α → β) (hg : OpenEmbedding g)
     (h : OpenEmbedding (g ∘ f)) : OpenEmbedding f :=
   (OpenEmbedding.of_comp_iff f hg).1 h
 #align open_embedding.of_comp OpenEmbedding.of_comp
 
 end OpenEmbedding
 
+end OpenEmbedding
+
 section ClosedEmbedding
 
 variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
@@ -684,39 +688,39 @@ structure ClosedEmbedding (f : α → β) extends Embedding f : Prop where
 #align closed_embedding ClosedEmbedding
 #align closed_embedding_iff closedEmbedding_iff
 
-variable {f : α → β}
+namespace ClosedEmbedding
 
-theorem ClosedEmbedding.tendsto_nhds_iff {ι : Type*} {g : ι → α} {a : Filter ι} {b : α}
-    (hf : ClosedEmbedding f) : Tendsto g a (𝓝 b) ↔ Tendsto (f ∘ g) a (𝓝 (f b)) :=
+theorem tendsto_nhds_iff {g : ι → α} {a : Filter ι} {b : α} (hf : ClosedEmbedding f) :
+    Tendsto g a (𝓝 b) ↔ Tendsto (f ∘ g) a (𝓝 (f b)) :=
   hf.toEmbedding.tendsto_nhds_iff
 #align closed_embedding.tendsto_nhds_iff ClosedEmbedding.tendsto_nhds_iff
 
-theorem ClosedEmbedding.continuous (hf : ClosedEmbedding f) : Continuous f :=
+theorem continuous (hf : ClosedEmbedding f) : Continuous f :=
   hf.toEmbedding.continuous
 #align closed_embedding.continuous ClosedEmbedding.continuous
 
-theorem ClosedEmbedding.isClosedMap (hf : ClosedEmbedding f) : IsClosedMap f :=
+theorem isClosedMap (hf : ClosedEmbedding f) : IsClosedMap f :=
   hf.toEmbedding.toInducing.isClosedMap hf.closed_range
 #align closed_embedding.is_closed_map ClosedEmbedding.isClosedMap
 
-theorem ClosedEmbedding.closed_iff_image_closed (hf : ClosedEmbedding f) {s : Set α} :
+theorem closed_iff_image_closed (hf : ClosedEmbedding f) {s : Set α} :
     IsClosed s ↔ IsClosed (f '' s) :=
   ⟨hf.isClosedMap s, fun h => by
     rw [← preimage_image_eq s hf.inj]
     exact h.preimage hf.continuous⟩
 #align closed_embedding.closed_iff_image_closed ClosedEmbedding.closed_iff_image_closed
 
-theorem ClosedEmbedding.closed_iff_preimage_closed (hf : ClosedEmbedding f) {s : Set β}
+theorem closed_iff_preimage_closed (hf : ClosedEmbedding f) {s : Set β}
     (hs : s ⊆ range f) : IsClosed s ↔ IsClosed (f ⁻¹' s) := by
   rw [hf.closed_iff_image_closed, image_preimage_eq_of_subset hs]
 #align closed_embedding.closed_iff_preimage_closed ClosedEmbedding.closed_iff_preimage_closed
 
-theorem closedEmbedding_of_embedding_closed (h₁ : Embedding f) (h₂ : IsClosedMap f) :
+theorem _root_.closedEmbedding_of_embedding_closed (h₁ : Embedding f) (h₂ : IsClosedMap f) :
     ClosedEmbedding f :=
   ⟨h₁, image_univ (f := f) ▸ h₂ univ isClosed_univ⟩
 #align closed_embedding_of_embedding_closed closedEmbedding_of_embedding_closed
 
-theorem closedEmbedding_of_continuous_injective_closed (h₁ : Continuous f) (h₂ : Injective f)
+theorem _root_.closedEmbedding_of_continuous_injective_closed (h₁ : Continuous f) (h₂ : Injective f)
     (h₃ : IsClosedMap f) : ClosedEmbedding f := by
   refine closedEmbedding_of_embedding_closed ⟨⟨?_⟩, h₂⟩ h₃
   refine h₁.le_induced.antisymm fun s hs => ?_
@@ -724,18 +728,20 @@ theorem closedEmbedding_of_continuous_injective_closed (h₁ : Continuous f) (h
   rw [preimage_compl, preimage_image_eq _ h₂, compl_compl]
 #align closed_embedding_of_continuous_injective_closed closedEmbedding_of_continuous_injective_closed
 
-theorem closedEmbedding_id : ClosedEmbedding (@id α) :=
+theorem _root_.closedEmbedding_id : ClosedEmbedding (@id α) :=
   ⟨embedding_id, IsClosedMap.id.closed_range⟩
 #align closed_embedding_id closedEmbedding_id
 
-theorem ClosedEmbedding.comp {g : β → γ} {f : α → β} (hg : ClosedEmbedding g)
-    (hf : ClosedEmbedding f) : ClosedEmbedding (g ∘ f) :=
+theorem comp (hg : ClosedEmbedding g) (hf : ClosedEmbedding f) :
+    ClosedEmbedding (g ∘ f) :=
   ⟨hg.toEmbedding.comp hf.toEmbedding, (hg.isClosedMap.comp hf.isClosedMap).closed_range⟩
 #align closed_embedding.comp ClosedEmbedding.comp
 
-theorem ClosedEmbedding.closure_image_eq {f : α → β} (hf : ClosedEmbedding f) (s : Set α) :
+theorem closure_image_eq (hf : ClosedEmbedding f) (s : Set α) :
     closure (f '' s) = f '' closure s :=
   hf.isClosedMap.closure_image_eq_of_continuous hf.continuous s
 #align closed_embedding.closure_image_eq ClosedEmbedding.closure_image_eq
 
 end ClosedEmbedding
+
+end ClosedEmbedding
refactor: decapitalize names in @[mk_iff] (#9378)
  • @[mk_iff] class MyPred now generates myPred_iff, not MyPred_iff
  • add Lean.Name.decapitalize
  • fix indentation and a few typos in the docs/comments.

Partially addresses issue #9129

Diff
@@ -56,7 +56,7 @@ section Inducing
 /-- A function `f : α → β` between topological spaces is inducing if the topology on `α` is induced
 by the topology on `β` through `f`, meaning that a set `s : Set α` is open iff it is the preimage
 under `f` of some open set `t : Set β`. -/
-@[mk_iff inducing_iff]
+@[mk_iff]
 structure Inducing [tα : TopologicalSpace α] [tβ : TopologicalSpace β] (f : α → β) : Prop where
   /-- The topology on the domain is equal to the induced topology. -/
   induced : tα = tβ.induced f
@@ -187,7 +187,7 @@ section Embedding
 
 /-- A function between topological spaces is an embedding if it is injective,
   and for all `s : Set α`, `s` is open iff it is the preimage of an open set. -/
-@[mk_iff embedding_iff]
+@[mk_iff]
 structure Embedding [TopologicalSpace α] [TopologicalSpace β] (f : α → β) extends
   Inducing f : Prop where
   /-- A topological embedding is injective. -/
@@ -571,7 +571,7 @@ section OpenEmbedding
 variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
 
 /-- An open embedding is an embedding with open image. -/
-@[mk_iff openEmbedding_iff]
+@[mk_iff]
 structure OpenEmbedding (f : α → β) extends Embedding f : Prop where
   /-- The range of an open embedding is an open set. -/
   open_range : IsOpen <| range f
@@ -677,7 +677,7 @@ section ClosedEmbedding
 variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
 
 /-- A closed embedding is an embedding with closed image. -/
-@[mk_iff closedEmbedding_iff]
+@[mk_iff]
 structure ClosedEmbedding (f : α → β) extends Embedding f : Prop where
   /-- The range of a closed embedding is a closed set. -/
   closed_range : IsClosed <| range f
feat: bijective local homeomorphisms are homeomorphisms (#9247)

Basis for generalising the result for local diffeomorphism to local structomorphisms.

Co-authored-by: grunweg <grunweg@posteo.de>

Diff
@@ -622,6 +622,11 @@ theorem openEmbedding_of_embedding_open {f : α → β} (h₁ : Embedding f) (h
   ⟨h₁, h₂.isOpen_range⟩
 #align open_embedding_of_embedding_open openEmbedding_of_embedding_open
 
+/-- A surjective embedding is an `OpenEmbedding`. -/
+theorem _root_.Embedding.toOpenEmbedding_of_surjective {f : α → β}
+    (hf : Embedding f) (hsurj: f.Surjective) : OpenEmbedding f :=
+  ⟨hf, hsurj.range_eq ▸ isOpen_univ⟩
+
 theorem openEmbedding_iff_embedding_open {f : α → β} :
     OpenEmbedding f ↔ Embedding f ∧ IsOpenMap f :=
   ⟨fun h => ⟨h.1, h.isOpenMap⟩, fun h => openEmbedding_of_embedding_open h.1 h.2⟩
chore: remove uses of cases' (#9171)

I literally went through and regex'd some uses of cases', replacing them with rcases; this is meant to be a low effort PR as I hope that tools can do this in the future.

rcases is an easier replacement than cases, though with better tools we could in future do a second pass converting simple rcases added here (and existing ones) to cases.

Diff
@@ -504,7 +504,7 @@ theorem of_inverse {f : α → β} {f' : β → α} (h : Continuous f') (l_inv :
 
 theorem of_nonempty {f : α → β} (h : ∀ s, IsClosed s → s.Nonempty → IsClosed (f '' s)) :
     IsClosedMap f := by
-  intro s hs; cases' eq_empty_or_nonempty s with h2s h2s
+  intro s hs; rcases eq_empty_or_nonempty s with h2s | h2s
   · simp_rw [h2s, image_empty, isClosed_empty]
   · exact h s hs h2s
 #align is_closed_map.of_nonempty IsClosedMap.of_nonempty
feat: a function with vanishing integral against smooth functions supported in U is ae zero in U (#8805)

A stronger version of #8800, the differences are:

  • assume either IsSigmaCompact U or SigmaCompactSpace M;

  • only need test functions satisfying tsupport g ⊆ U rather than support g ⊆ U;

  • requires LocallyIntegrableOn U rather than LocallyIntegrable on the whole space.

Also fills in some missing APIs around the manifold and measure theory libraries.

Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Junyan Xu <junyanxu.math@gmail.com>

Diff
@@ -603,6 +603,11 @@ theorem OpenEmbedding.tendsto_nhds_iff' {f : α → β} (hf : OpenEmbedding f) {
     {l : Filter γ} {a : α} : Tendsto (g ∘ f) (𝓝 a) l ↔ Tendsto g (𝓝 (f a)) l := by
   rw [Tendsto, ← map_map, hf.map_nhds_eq]; rfl
 
+theorem OpenEmbedding.continuousAt_iff {f : α → β} (hf : OpenEmbedding f) {g : β → γ} {x : α} :
+    ContinuousAt (g ∘ f) x ↔ ContinuousAt g (f x) :=
+  hf.tendsto_nhds_iff'
+#align open_embedding.continuous_at_iff OpenEmbedding.continuousAt_iff
+
 theorem OpenEmbedding.continuous {f : α → β} (hf : OpenEmbedding f) : Continuous f :=
   hf.toEmbedding.continuous
 #align open_embedding.continuous OpenEmbedding.continuous
feat: add DiscreteTopology.of_continuous_injective (#7029)
Diff
@@ -256,13 +256,13 @@ theorem Embedding.closure_eq_preimage_closure_image {e : α → β} (he : Embedd
   he.1.closure_eq_preimage_closure_image s
 #align embedding.closure_eq_preimage_closure_image Embedding.closure_eq_preimage_closure_image
 
-/-- The topology induced under an inclusion `f : X → Y` from the discrete topological space `Y`
-is the discrete topology on `X`. -/
-theorem Embedding.discreteTopology {X Y : Type*} [TopologicalSpace X] [tY : TopologicalSpace Y]
+/-- The topology induced under an inclusion `f : X → Y` from a discrete topological space `Y`
+is the discrete topology on `X`.
+
+See also `DiscreteTopology.of_continuous_injective`. -/
+theorem Embedding.discreteTopology {X Y : Type*} [TopologicalSpace X] [TopologicalSpace Y]
     [DiscreteTopology Y] {f : X → Y} (hf : Embedding f) : DiscreteTopology X :=
-  discreteTopology_iff_nhds.2 fun x => by
-    rw [hf.nhds_eq_comap, nhds_discrete, comap_pure, ← image_singleton, hf.inj.preimage_image,
-      principal_singleton]
+  .of_continuous_injective hf.continuous hf.inj
 #align embedding.discrete_topology Embedding.discreteTopology
 
 end Embedding
chore: more predictable ext lemmas for TopologicalSpace and UniformSpace (#6705)
Diff
@@ -276,7 +276,7 @@ def QuotientMap {α : Type*} {β : Type*} [tα : TopologicalSpace α] [tβ : Top
 
 theorem quotientMap_iff [TopologicalSpace α] [TopologicalSpace β] {f : α → β} :
     QuotientMap f ↔ Surjective f ∧ ∀ s : Set β, IsOpen s ↔ IsOpen (f ⁻¹' s) :=
-  and_congr Iff.rfl topologicalSpace_eq_iff
+  and_congr Iff.rfl TopologicalSpace.ext_iff
 #align quotient_map_iff quotientMap_iff
 
 theorem quotientMap_iff_closed [TopologicalSpace α] [TopologicalSpace β] {f : α → β} :
chore: banish Type _ and Sort _ (#6499)

We remove all possible occurences of Type _ and Sort _ in favor of Type* and Sort*.

This has nice performance benefits.

Diff
@@ -49,7 +49,7 @@ open Set Filter Function
 
 open TopologicalSpace Topology Filter
 
-variable {α : Type _} {β : Type _} {γ : Type _} {δ : Type _}
+variable {α : Type*} {β : Type*} {γ : Type*} {δ : Type*}
 
 section Inducing
 
@@ -118,7 +118,7 @@ theorem Inducing.image_mem_nhdsWithin {f : α → β} (hf : Inducing f) {a : α}
   hf.map_nhds_eq a ▸ image_mem_map hs
 #align inducing.image_mem_nhds_within Inducing.image_mem_nhdsWithin
 
-theorem Inducing.tendsto_nhds_iff {ι : Type _} {f : ι → β} {g : β → γ} {a : Filter ι} {b : β}
+theorem Inducing.tendsto_nhds_iff {ι : Type*} {f : ι → β} {g : β → γ} {a : Filter ι} {b : β}
     (hg : Inducing g) : Tendsto f a (𝓝 b) ↔ Tendsto (g ∘ f) a (𝓝 (g b)) := by
   rw [hg.nhds_eq_comap, tendsto_comap_iff]
 #align inducing.tendsto_nhds_iff Inducing.tendsto_nhds_iff
@@ -237,7 +237,7 @@ theorem Embedding.map_nhds_of_mem {f : α → β} (hf : Embedding f) (a : α) (h
   hf.1.map_nhds_of_mem a h
 #align embedding.map_nhds_of_mem Embedding.map_nhds_of_mem
 
-theorem Embedding.tendsto_nhds_iff {ι : Type _} {f : ι → β} {g : β → γ} {a : Filter ι} {b : β}
+theorem Embedding.tendsto_nhds_iff {ι : Type*} {f : ι → β} {g : β → γ} {a : Filter ι} {b : β}
     (hg : Embedding g) : Tendsto f a (𝓝 b) ↔ Tendsto (g ∘ f) a (𝓝 (g b)) :=
   hg.toInducing.tendsto_nhds_iff
 #align embedding.tendsto_nhds_iff Embedding.tendsto_nhds_iff
@@ -258,7 +258,7 @@ theorem Embedding.closure_eq_preimage_closure_image {e : α → β} (he : Embedd
 
 /-- The topology induced under an inclusion `f : X → Y` from the discrete topological space `Y`
 is the discrete topology on `X`. -/
-theorem Embedding.discreteTopology {X Y : Type _} [TopologicalSpace X] [tY : TopologicalSpace Y]
+theorem Embedding.discreteTopology {X Y : Type*} [TopologicalSpace X] [tY : TopologicalSpace Y]
     [DiscreteTopology Y] {f : X → Y} (hf : Embedding f) : DiscreteTopology X :=
   discreteTopology_iff_nhds.2 fun x => by
     rw [hf.nhds_eq_comap, nhds_discrete, comap_pure, ← image_singleton, hf.inj.preimage_image,
@@ -269,7 +269,7 @@ end Embedding
 
 /-- A function between topological spaces is a quotient map if it is surjective,
   and for all `s : Set β`, `s` is open iff its preimage is an open set. -/
-def QuotientMap {α : Type _} {β : Type _} [tα : TopologicalSpace α] [tβ : TopologicalSpace β]
+def QuotientMap {α : Type*} {β : Type*} [tα : TopologicalSpace α] [tβ : TopologicalSpace β]
     (f : α → β) : Prop :=
   Surjective f ∧ tβ = tα.coinduced f
 #align quotient_map QuotientMap
@@ -594,7 +594,7 @@ theorem OpenEmbedding.open_iff_image_open {f : α → β} (hf : OpenEmbedding f)
     apply preimage_image_eq _ hf.inj⟩
 #align open_embedding.open_iff_image_open OpenEmbedding.open_iff_image_open
 
-theorem OpenEmbedding.tendsto_nhds_iff {ι : Type _} {f : ι → β} {g : β → γ} {a : Filter ι} {b : β}
+theorem OpenEmbedding.tendsto_nhds_iff {ι : Type*} {f : ι → β} {g : β → γ} {a : Filter ι} {b : β}
     (hg : OpenEmbedding g) : Tendsto f a (𝓝 b) ↔ Tendsto (g ∘ f) a (𝓝 (g b)) :=
   hg.toEmbedding.tendsto_nhds_iff
 #align open_embedding.tendsto_nhds_iff OpenEmbedding.tendsto_nhds_iff
@@ -676,7 +676,7 @@ structure ClosedEmbedding (f : α → β) extends Embedding f : Prop where
 
 variable {f : α → β}
 
-theorem ClosedEmbedding.tendsto_nhds_iff {ι : Type _} {g : ι → α} {a : Filter ι} {b : α}
+theorem ClosedEmbedding.tendsto_nhds_iff {ι : Type*} {g : ι → α} {a : Filter ι} {b : α}
     (hf : ClosedEmbedding f) : Tendsto g a (𝓝 b) ↔ Tendsto (f ∘ g) a (𝓝 (f b)) :=
   hf.toEmbedding.tendsto_nhds_iff
 #align closed_embedding.tendsto_nhds_iff ClosedEmbedding.tendsto_nhds_iff
feat(Topology.ProperMap): basic theory of proper maps (#6005)
Diff
@@ -538,11 +538,34 @@ theorem isClosedMap_iff_closure_image [TopologicalSpace α] [TopologicalSpace β
         _ = f '' c := by rw [hc.closure_eq]⟩
 #align is_closed_map_iff_closure_image isClosedMap_iff_closure_image
 
+/-- A map `f : X → Y` is closed if and only if for all sets `s`, any cluster point of `f '' s` is
+the image by `f` of some cluster point of `s`.
+If you require this for all filters instead of just principal filters, and also that `f` is
+continuous, you get the notion of **proper map**. See `isProperMap_iff_clusterPt`. -/
 theorem isClosedMap_iff_clusterPt [TopologicalSpace α] [TopologicalSpace β] {f : α → β} :
     IsClosedMap f ↔ ∀ s y, MapClusterPt y (𝓟 s) f → ∃ x, f x = y ∧ ClusterPt x (𝓟 s) := by
   simp [MapClusterPt, isClosedMap_iff_closure_image, subset_def, mem_closure_iff_clusterPt,
     and_comm]
 
+theorem IsClosedMap.closure_image_eq_of_continuous [TopologicalSpace α] [TopologicalSpace β]
+    {f : α → β} (f_closed : IsClosedMap f) (f_cont : Continuous f) (s : Set α) :
+    closure (f '' s) = f '' closure s :=
+  subset_antisymm (f_closed.closure_image_subset s) (image_closure_subset_closure_image f_cont)
+
+theorem IsClosedMap.lift'_closure_map_eq [TopologicalSpace α] [TopologicalSpace β]
+    {f : α → β} (f_closed : IsClosedMap f) (f_cont : Continuous f) (F : Filter α) :
+    (map f F).lift' closure = map f (F.lift' closure) := by
+  rw [map_lift'_eq2 (monotone_closure β), map_lift'_eq (monotone_closure α)]
+  congr
+  ext s : 1
+  exact f_closed.closure_image_eq_of_continuous f_cont s
+
+theorem IsClosedMap.mapClusterPt_iff_lift'_closure [TopologicalSpace α] [TopologicalSpace β]
+    {F : Filter α} {f : α → β} (f_closed : IsClosedMap f) (f_cont : Continuous f) {y : β} :
+    MapClusterPt y F f ↔ ((F.lift' closure) ⊓ 𝓟 (f ⁻¹' {y})).NeBot := by
+  rw [MapClusterPt, clusterPt_iff_lift'_closure', f_closed.lift'_closure_map_eq f_cont,
+      ← comap_principal, ← map_neBot_iff f, Filter.push_pull, principal_singleton]
+
 section OpenEmbedding
 
 variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
@@ -702,8 +725,7 @@ theorem ClosedEmbedding.comp {g : β → γ} {f : α → β} (hg : ClosedEmbeddi
 
 theorem ClosedEmbedding.closure_image_eq {f : α → β} (hf : ClosedEmbedding f) (s : Set α) :
     closure (f '' s) = f '' closure s :=
-  (hf.isClosedMap.closure_image_subset _).antisymm
-    (image_closure_subset_closure_image hf.continuous)
+  hf.isClosedMap.closure_image_eq_of_continuous hf.continuous s
 #align closed_embedding.closure_image_eq ClosedEmbedding.closure_image_eq
 
 end ClosedEmbedding
feat(Topology.Constructions): restriction of a closed map (#6013)
Diff
@@ -538,6 +538,11 @@ theorem isClosedMap_iff_closure_image [TopologicalSpace α] [TopologicalSpace β
         _ = f '' c := by rw [hc.closure_eq]⟩
 #align is_closed_map_iff_closure_image isClosedMap_iff_closure_image
 
+theorem isClosedMap_iff_clusterPt [TopologicalSpace α] [TopologicalSpace β] {f : α → β} :
+    IsClosedMap f ↔ ∀ s y, MapClusterPt y (𝓟 s) f → ∃ x, f x = y ∧ ClusterPt x (𝓟 s) := by
+  simp [MapClusterPt, isClosedMap_iff_closure_image, subset_def, mem_closure_iff_clusterPt,
+    and_comm]
+
 section OpenEmbedding
 
 variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -2,15 +2,12 @@
 Copyright (c) 2017 Johannes Hölzl. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Mario Carneiro, Patrick Massot
-
-! This file was ported from Lean 3 source module topology.maps
-! leanprover-community/mathlib commit d91e7f7a7f1c7e9f0e18fdb6bde4f652004c735d
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Topology.Order
 import Mathlib.Topology.NhdsSet
 
+#align_import topology.maps from "leanprover-community/mathlib"@"d91e7f7a7f1c7e9f0e18fdb6bde4f652004c735d"
+
 /-!
 # Specific classes of maps between topological spaces
 
chore: cleanup whitespace (#5988)

Grepping for [^ .:{-] [^ :] and reviewing the results. Once I started I couldn't stop. :-)

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -69,7 +69,7 @@ structure Inducing [tα : TopologicalSpace α] [tβ : TopologicalSpace β] (f :
 variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ] [TopologicalSpace δ]
 
 theorem inducing_induced (f : α → β) : @Inducing α β (TopologicalSpace.induced f ‹_›) _ f :=
-  @Inducing.mk  _ _ (TopologicalSpace.induced f ‹_›) _ _ rfl
+  @Inducing.mk _ _ (TopologicalSpace.induced f ‹_›) _ _ rfl
 
 theorem inducing_id : Inducing (@id α) :=
   ⟨induced_id.symm⟩
@@ -551,7 +551,7 @@ structure OpenEmbedding (f : α → β) extends Embedding f : Prop where
   /-- The range of an open embedding is an open set. -/
   open_range : IsOpen <| range f
 #align open_embedding OpenEmbedding
-#align open_embedding_iff  openEmbedding_iff
+#align open_embedding_iff openEmbedding_iff
 
 theorem OpenEmbedding.isOpenMap {f : α → β} (hf : OpenEmbedding f) : IsOpenMap f :=
   hf.toEmbedding.toInducing.isOpenMap hf.open_range
feat: composition of ContinuousMaps is inducing (#5652)

If g : C(β, γ) is inducing, then fun f : C(α, β) ↦ g.comp f is inducing.

Diff
@@ -175,6 +175,10 @@ theorem Inducing.isOpen_iff {f : α → β} (hf : Inducing f) {s : Set α} :
     IsOpen s ↔ ∃ t, IsOpen t ∧ f ⁻¹' t = s := by rw [hf.induced, isOpen_induced_iff]
 #align inducing.is_open_iff Inducing.isOpen_iff
 
+theorem Inducing.setOf_isOpen {f : α → β} (hf : Inducing f) :
+    {s : Set α | IsOpen s} = preimage f '' {t | IsOpen t} :=
+  Set.ext fun _ ↦ hf.isOpen_iff
+
 theorem Inducing.dense_iff {f : α → β} (hf : Inducing f) {s : Set α} :
     Dense s ↔ ∀ x, f x ∈ closure (f '' s) := by
   simp only [Dense, hf.closure_eq_preimage_closure_image, mem_preimage]
feat: add lemmas about closed and quotient maps (#4455)

Forward-port of leanprover-community/mathlib#19071

Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Mario Carneiro, Patrick Massot
 
 ! This file was ported from Lean 3 source module topology.maps
-! leanprover-community/mathlib commit bcfa726826abd57587355b4b5b7e78ad6527b7e4
+! leanprover-community/mathlib commit d91e7f7a7f1c7e9f0e18fdb6bde4f652004c735d
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -273,11 +273,17 @@ def QuotientMap {α : Type _} {β : Type _} [tα : TopologicalSpace α] [tβ : T
   Surjective f ∧ tβ = tα.coinduced f
 #align quotient_map QuotientMap
 
-theorem quotientMap_iff {α β : Type _} [TopologicalSpace α] [TopologicalSpace β] {f : α → β} :
+theorem quotientMap_iff [TopologicalSpace α] [TopologicalSpace β] {f : α → β} :
     QuotientMap f ↔ Surjective f ∧ ∀ s : Set β, IsOpen s ↔ IsOpen (f ⁻¹' s) :=
   and_congr Iff.rfl topologicalSpace_eq_iff
 #align quotient_map_iff quotientMap_iff
 
+theorem quotientMap_iff_closed [TopologicalSpace α] [TopologicalSpace β] {f : α → β} :
+    QuotientMap f ↔ Surjective f ∧ ∀ s : Set β, IsClosed s ↔ IsClosed (f ⁻¹' s) :=
+  quotientMap_iff.trans <| Iff.rfl.and <| compl_surjective.forall.trans <| by
+    simp only [isOpen_compl_iff, preimage_compl]
+#align quotient_map_iff_closed quotientMap_iff_closed
+
 namespace QuotientMap
 
 variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ] [TopologicalSpace δ]
@@ -321,8 +327,8 @@ protected theorem isOpen_preimage (hf : QuotientMap f) {s : Set β} : IsOpen (f
 #align quotient_map.is_open_preimage QuotientMap.isOpen_preimage
 
 protected theorem isClosed_preimage (hf : QuotientMap f) {s : Set β} :
-    IsClosed (f ⁻¹' s) ↔ IsClosed s := by
-  simp only [← isOpen_compl_iff, ← preimage_compl, hf.isOpen_preimage]
+    IsClosed (f ⁻¹' s) ↔ IsClosed s :=
+  ((quotientMap_iff_closed.1 hf).2 s).symm
 #align quotient_map.is_closed_preimage QuotientMap.isClosed_preimage
 
 end QuotientMap
@@ -506,6 +512,12 @@ theorem closed_range {f : α → β} (hf : IsClosedMap f) : IsClosed (range f) :
   @image_univ _ _ f ▸ hf _ isClosed_univ
 #align is_closed_map.closed_range IsClosedMap.closed_range
 
+theorem to_quotientMap {f : α → β} (hcl : IsClosedMap f) (hcont : Continuous f)
+    (hsurj : Surjective f) : QuotientMap f :=
+  quotientMap_iff_closed.2 ⟨hsurj, fun s =>
+    ⟨fun hs => hs.preimage hcont, fun hs => hsurj.image_preimage s ▸ hcl _ hs⟩⟩
+#align is_closed_map.to_quotient_map IsClosedMap.to_quotientMap
+
 end IsClosedMap
 
 theorem Inducing.isClosedMap [TopologicalSpace α] [TopologicalSpace β] {f : α → β} (hf : Inducing f)
chore: fix upper/lowercase in comments (#4360)
  • Run a non-interactive version of fix-comments.py on all files.
  • Go through the diff and manually add/discard/edit chunks.
Diff
@@ -57,8 +57,8 @@ variable {α : Type _} {β : Type _} {γ : Type _} {δ : Type _}
 section Inducing
 
 /-- A function `f : α → β` between topological spaces is inducing if the topology on `α` is induced
-by the topology on `β` through `f`, meaning that a set `s : set α` is open iff it is the preimage
-under `f` of some open set `t : set β`. -/
+by the topology on `β` through `f`, meaning that a set `s : Set α` is open iff it is the preimage
+under `f` of some open set `t : Set β`. -/
 @[mk_iff inducing_iff]
 structure Inducing [tα : TopologicalSpace α] [tβ : TopologicalSpace β] (f : α → β) : Prop where
   /-- The topology on the domain is equal to the induced topology. -/
@@ -185,7 +185,7 @@ end Inducing
 section Embedding
 
 /-- A function between topological spaces is an embedding if it is injective,
-  and for all `s : set α`, `s` is open iff it is the preimage of an open set. -/
+  and for all `s : Set α`, `s` is open iff it is the preimage of an open set. -/
 @[mk_iff embedding_iff]
 structure Embedding [TopologicalSpace α] [TopologicalSpace β] (f : α → β) extends
   Inducing f : Prop where
@@ -267,7 +267,7 @@ theorem Embedding.discreteTopology {X Y : Type _} [TopologicalSpace X] [tY : Top
 end Embedding
 
 /-- A function between topological spaces is a quotient map if it is surjective,
-  and for all `s : set β`, `s` is open iff its preimage is an open set. -/
+  and for all `s : Set β`, `s` is open iff its preimage is an open set. -/
 def QuotientMap {α : Type _} {β : Type _} [tα : TopologicalSpace α] [tβ : TopologicalSpace β]
     (f : α → β) : Prop :=
   Surjective f ∧ tβ = tα.coinduced f
@@ -327,7 +327,7 @@ protected theorem isClosed_preimage (hf : QuotientMap f) {s : Set β} :
 
 end QuotientMap
 
-/-- A map `f : α → β` is said to be an *open map*, if the image of any open `U : set α`
+/-- A map `f : α → β` is said to be an *open map*, if the image of any open `U : Set α`
 is open in `β`. -/
 def IsOpenMap [TopologicalSpace α] [TopologicalSpace β] (f : α → β) :=
   ∀ U : Set α, IsOpen U → IsOpen (f '' U)
@@ -460,7 +460,7 @@ section IsClosedMap
 
 variable [TopologicalSpace α] [TopologicalSpace β]
 
-/-- A map `f : α → β` is said to be a *closed map*, if the image of any closed `U : set α`
+/-- A map `f : α → β` is said to be a *closed map*, if the image of any closed `U : Set α`
 is closed in `β`. -/
 def IsClosedMap (f : α → β) :=
   ∀ U : Set α, IsClosed U → IsClosed (f '' U)
chore: Rename to sSup/iSup (#3938)

As discussed on Zulip

Renames

  • 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>

Diff
@@ -98,7 +98,7 @@ theorem Inducing.nhds_eq_comap {f : α → β} (hf : Inducing f) : ∀ a : α, 
 
 theorem Inducing.nhdsSet_eq_comap {f : α → β} (hf : Inducing f) (s : Set α) :
     𝓝ˢ s = comap f (𝓝ˢ (f '' s)) := by
-  simp only [nhdsSet, supₛ_image, comap_supᵢ, hf.nhds_eq_comap, supᵢ_image]
+  simp only [nhdsSet, sSup_image, comap_iSup, hf.nhds_eq_comap, iSup_image]
 #align inducing.nhds_set_eq_comap Inducing.nhdsSet_eq_comap
 
 theorem Inducing.map_nhds_eq {f : α → β} (hf : Inducing f) (a : α) : (𝓝 a).map f = 𝓝[range f] f a :=
chore: fix #align lines (#3640)

This PR fixes two things:

  • Most align statements for definitions and theorems and instances that are separated by two newlines from the relevant declaration (s/\n\n#align/\n#align). This is often seen in the mathport output after ending calc blocks.
  • All remaining more-than-one-line #align statements. (This was needed for a script I wrote for #3630.)
Diff
@@ -385,7 +385,6 @@ theorem of_sections {f : α → β}
       𝓝 (f x) = map f (map g (𝓝 (f x))) := by rw [map_map, hgf.comp_eq_id, map_id]
       _ ≤ map f (𝓝 (g (f x))) := map_mono hgc
       _ = map f (𝓝 x) := by rw [hgx]
-
 #align is_open_map.of_sections IsOpenMap.of_sections
 
 theorem of_inverse {f : α → β} {f' : β → α} (h : Continuous f') (l_inv : LeftInverse f f')
feat: port Topology.LocalHomeomorph (#2231)
Diff
@@ -385,7 +385,7 @@ theorem of_sections {f : α → β}
       𝓝 (f x) = map f (map g (𝓝 (f x))) := by rw [map_map, hgf.comp_eq_id, map_id]
       _ ≤ map f (𝓝 (g (f x))) := map_mono hgc
       _ = map f (𝓝 x) := by rw [hgx]
-      
+
 #align is_open_map.of_sections IsOpenMap.of_sections
 
 theorem of_inverse {f : α → β} {f' : β → α} (h : Continuous f') (l_inv : LeftInverse f f')
@@ -559,6 +559,10 @@ theorem OpenEmbedding.tendsto_nhds_iff {ι : Type _} {f : ι → β} {g : β →
   hg.toEmbedding.tendsto_nhds_iff
 #align open_embedding.tendsto_nhds_iff OpenEmbedding.tendsto_nhds_iff
 
+theorem OpenEmbedding.tendsto_nhds_iff' {f : α → β} (hf : OpenEmbedding f) {g : β → γ}
+    {l : Filter γ} {a : α} : Tendsto (g ∘ f) (𝓝 a) l ↔ Tendsto g (𝓝 (f a)) l := by
+  rw [Tendsto, ← map_map, hf.map_nhds_eq]; rfl
+
 theorem OpenEmbedding.continuous {f : α → β} (hf : OpenEmbedding f) : Continuous f :=
   hf.toEmbedding.continuous
 #align open_embedding.continuous OpenEmbedding.continuous
feat: port Topology.SubsetProperties (#1913)

Co-authored-by: Johan Commelin <johan@commelin.net>

Diff
@@ -110,6 +110,12 @@ theorem Inducing.map_nhds_of_mem {f : α → β} (hf : Inducing f) (a : α) (h :
   hf.induced.symm ▸ map_nhds_induced_of_mem h
 #align inducing.map_nhds_of_mem Inducing.map_nhds_of_mem
 
+-- porting note: new lemma
+theorem Inducing.mapClusterPt_iff {f : α → β} (hf : Inducing f) {a : α} {l : Filter α} :
+    MapClusterPt (f a) l f ↔ ClusterPt a l := by
+  delta MapClusterPt ClusterPt
+  rw [← Filter.push_pull', ← hf.nhds_eq_comap, map_neBot_iff]
+
 theorem Inducing.image_mem_nhdsWithin {f : α → β} (hf : Inducing f) {a : α} {s : Set α}
     (hs : s ∈ 𝓝 a) : f '' s ∈ 𝓝[range f] f a :=
   hf.map_nhds_eq a ▸ image_mem_map hs
feat: port Topology.Maps (#1873)

Dependencies 7 + 285

286 files ported (97.6%)
122129 lines ported (97.6%)
Show graph

The unported dependencies are