topology.inseparableMathlib.Topology.Inseparable

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)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

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

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -369,7 +369,7 @@ theorem inseparable_iff_forall_closed : (x ~ y) ↔ ∀ s : Set X, IsClosed s 
 #print inseparable_iff_mem_closure /-
 theorem inseparable_iff_mem_closure :
     (x ~ y) ↔ x ∈ closure ({y} : Set X) ∧ y ∈ closure ({x} : Set X) :=
-  inseparable_iff_specializes_and.trans <| by simp only [specializes_iff_mem_closure, and_comm']
+  inseparable_iff_specializes_and.trans <| by simp only [specializes_iff_mem_closure, and_comm]
 #align inseparable_iff_mem_closure inseparable_iff_mem_closure
 -/
 
Diff
@@ -3,9 +3,9 @@ Copyright (c) 2021 Andrew Yang. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Andrew Yang, Yury G. Kudryashov
 -/
-import Mathbin.Topology.ContinuousOn
-import Mathbin.Data.Setoid.Basic
-import Mathbin.Tactic.Tfae
+import Topology.ContinuousOn
+import Data.Setoid.Basic
+import Tactic.Tfae
 
 #align_import topology.inseparable from "leanprover-community/mathlib"@"e46da4e335b8671848ac711ccb34b42538c0d800"
 
Diff
@@ -109,10 +109,10 @@ theorem specializes_iff_pure : x ⤳ y ↔ pure x ≤ 𝓝 y :=
 #align specializes_iff_pure specializes_iff_pure
 -/
 
-alias specializes_iff_nhds ↔ Specializes.nhds_le_nhds _
+alias ⟨Specializes.nhds_le_nhds, _⟩ := specializes_iff_nhds
 #align specializes.nhds_le_nhds Specializes.nhds_le_nhds
 
-alias specializes_iff_pure ↔ Specializes.pure_le_nhds _
+alias ⟨Specializes.pure_le_nhds, _⟩ := specializes_iff_pure
 #align specializes.pure_le_nhds Specializes.pure_le_nhds
 
 #print specializes_iff_forall_open /-
@@ -157,7 +157,7 @@ theorem specializes_iff_mem_closure : x ⤳ y ↔ y ∈ closure ({x} : Set X) :=
 #align specializes_iff_mem_closure specializes_iff_mem_closure
 -/
 
-alias specializes_iff_mem_closure ↔ Specializes.mem_closure _
+alias ⟨Specializes.mem_closure, _⟩ := specializes_iff_mem_closure
 #align specializes.mem_closure Specializes.mem_closure
 
 #print specializes_iff_closure_subset /-
@@ -166,7 +166,7 @@ theorem specializes_iff_closure_subset : x ⤳ y ↔ closure ({y} : Set X) ⊆ c
 #align specializes_iff_closure_subset specializes_iff_closure_subset
 -/
 
-alias specializes_iff_closure_subset ↔ Specializes.closure_subset _
+alias ⟨Specializes.closure_subset, _⟩ := specializes_iff_closure_subset
 #align specializes.closure_subset Specializes.closure_subset
 
 #print Filter.HasBasis.specializes_iff /-
Diff
@@ -2,16 +2,13 @@
 Copyright (c) 2021 Andrew Yang. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Andrew Yang, Yury G. Kudryashov
-
-! This file was ported from Lean 3 source module topology.inseparable
-! leanprover-community/mathlib commit e46da4e335b8671848ac711ccb34b42538c0d800
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Topology.ContinuousOn
 import Mathbin.Data.Setoid.Basic
 import Mathbin.Tactic.Tfae
 
+#align_import topology.inseparable from "leanprover-community/mathlib"@"e46da4e335b8671848ac711ccb34b42538c0d800"
+
 /-!
 # Inseparable points in a topological space
 
Diff
@@ -74,9 +74,9 @@ def Specializes (x y : X) : Prop :=
 #align specializes Specializes
 -/
 
--- mathport name: «expr ⤳ »
 infixl:300 " ⤳ " => Specializes
 
+#print specializes_TFAE /-
 /-- A collection of equivalent definitions of `x ⤳ y`. The public API is given by `iff` lemmas
 below. -/
 theorem specializes_TFAE (x y : X) :
@@ -98,14 +98,19 @@ theorem specializes_TFAE (x y : X) :
     exact ho.mem_nhds hxs
   tfae_finish
 #align specializes_tfae specializes_TFAE
+-/
 
+#print specializes_iff_nhds /-
 theorem specializes_iff_nhds : x ⤳ y ↔ 𝓝 x ≤ 𝓝 y :=
   Iff.rfl
 #align specializes_iff_nhds specializes_iff_nhds
+-/
 
+#print specializes_iff_pure /-
 theorem specializes_iff_pure : x ⤳ y ↔ pure x ≤ 𝓝 y :=
   (specializes_TFAE x y).out 0 1
 #align specializes_iff_pure specializes_iff_pure
+-/
 
 alias specializes_iff_nhds ↔ Specializes.nhds_le_nhds _
 #align specializes.nhds_le_nhds Specializes.nhds_le_nhds
@@ -200,6 +205,7 @@ theorem specializes_of_eq (e : x = y) : x ⤳ y :=
 #align specializes_of_eq specializes_of_eq
 -/
 
+#print specializes_of_nhdsWithin /-
 theorem specializes_of_nhdsWithin (h₁ : 𝓝[s] x ≤ 𝓝[s] y) (h₂ : x ∈ s) : x ⤳ y :=
   specializes_iff_pure.2 <|
     calc
@@ -207,20 +213,27 @@ theorem specializes_of_nhdsWithin (h₁ : 𝓝[s] x ≤ 𝓝[s] y) (h₂ : x ∈
       _ ≤ 𝓝[s] y := h₁
       _ ≤ 𝓝 y := inf_le_left
 #align specializes_of_nhds_within specializes_of_nhdsWithin
+-/
 
+#print Specializes.map_of_continuousAt /-
 theorem Specializes.map_of_continuousAt (h : x ⤳ y) (hy : ContinuousAt f y) : f x ⤳ f y :=
   specializes_iff_pure.2 fun s hs =>
     mem_pure.2 <| mem_preimage.1 <| mem_of_mem_nhds <| hy.mono_left h hs
 #align specializes.map_of_continuous_at Specializes.map_of_continuousAt
+-/
 
+#print Specializes.map /-
 theorem Specializes.map (h : x ⤳ y) (hf : Continuous f) : f x ⤳ f y :=
   h.map_of_continuousAt hf.ContinuousAt
 #align specializes.map Specializes.map
+-/
 
+#print Inducing.specializes_iff /-
 theorem Inducing.specializes_iff (hf : Inducing f) : f x ⤳ f y ↔ x ⤳ y := by
   simp only [specializes_iff_mem_closure, hf.closure_eq_preimage_closure_image, image_singleton,
     mem_preimage]
 #align inducing.specializes_iff Inducing.specializes_iff
+-/
 
 #print subtype_specializes_iff /-
 theorem subtype_specializes_iff {p : X → Prop} (x y : Subtype p) : x ⤳ y ↔ (x : X) ⤳ y :=
@@ -228,20 +241,26 @@ theorem subtype_specializes_iff {p : X → Prop} (x y : Subtype p) : x ⤳ y ↔
 #align subtype_specializes_iff subtype_specializes_iff
 -/
 
+#print specializes_prod /-
 @[simp]
 theorem specializes_prod {x₁ x₂ : X} {y₁ y₂ : Y} : (x₁, y₁) ⤳ (x₂, y₂) ↔ x₁ ⤳ x₂ ∧ y₁ ⤳ y₂ := by
   simp only [Specializes, nhds_prod_eq, prod_le_prod]
 #align specializes_prod specializes_prod
+-/
 
+#print Specializes.prod /-
 theorem Specializes.prod {x₁ x₂ : X} {y₁ y₂ : Y} (hx : x₁ ⤳ x₂) (hy : y₁ ⤳ y₂) :
     (x₁, y₁) ⤳ (x₂, y₂) :=
   specializes_prod.2 ⟨hx, hy⟩
 #align specializes.prod Specializes.prod
+-/
 
+#print specializes_pi /-
 @[simp]
 theorem specializes_pi {f g : ∀ i, π i} : f ⤳ g ↔ ∀ i, f i ⤳ g i := by
   simp only [Specializes, nhds_pi, pi_le_pi]
 #align specializes_pi specializes_pi
+-/
 
 #print not_specializes_iff_exists_open /-
 theorem not_specializes_iff_exists_open : ¬x ⤳ y ↔ ∃ S : Set X, IsOpen S ∧ y ∈ S ∧ x ∉ S := by
@@ -270,11 +289,13 @@ def specializationPreorder : Preorder X :=
 
 variable {X}
 
+#print Continuous.specialization_monotone /-
 /-- A continuous function is monotone with respect to the specialization preorders on the domain and
 the codomain. -/
 theorem Continuous.specialization_monotone (hf : Continuous f) :
     @Monotone _ _ (specializationPreorder X) (specializationPreorder Y) f := fun x y h => h.map hf
 #align continuous.specialization_monotone Continuous.specialization_monotone
+-/
 
 /-!
 ### `inseparable` relation
@@ -296,7 +317,6 @@ def Inseparable (x y : X) : Prop :=
 #align inseparable Inseparable
 -/
 
--- mathport name: «expr ~ »
 local infixl:0 " ~ " => Inseparable
 
 #print inseparable_def /-
@@ -369,9 +389,11 @@ theorem inseparable_of_nhdsWithin_eq (hx : x ∈ s) (hy : y ∈ s) (h : 𝓝[s]
 #align inseparable_of_nhds_within_eq inseparable_of_nhdsWithin_eq
 -/
 
+#print Inducing.inseparable_iff /-
 theorem Inducing.inseparable_iff (hf : Inducing f) : (f x ~ f y) ↔ (x ~ y) := by
   simp only [inseparable_iff_specializes_and, hf.specializes_iff]
 #align inducing.inseparable_iff Inducing.inseparable_iff
+-/
 
 #print subtype_inseparable_iff /-
 theorem subtype_inseparable_iff {p : X → Prop} (x y : Subtype p) : (x ~ y) ↔ ((x : X) ~ y) :=
@@ -379,20 +401,26 @@ theorem subtype_inseparable_iff {p : X → Prop} (x y : Subtype p) : (x ~ y) ↔
 #align subtype_inseparable_iff subtype_inseparable_iff
 -/
 
+#print inseparable_prod /-
 @[simp]
 theorem inseparable_prod {x₁ x₂ : X} {y₁ y₂ : Y} : ((x₁, y₁) ~ (x₂, y₂)) ↔ (x₁ ~ x₂) ∧ (y₁ ~ y₂) :=
   by simp only [Inseparable, nhds_prod_eq, prod_inj]
 #align inseparable_prod inseparable_prod
+-/
 
+#print Inseparable.prod /-
 theorem Inseparable.prod {x₁ x₂ : X} {y₁ y₂ : Y} (hx : x₁ ~ x₂) (hy : y₁ ~ y₂) :
     (x₁, y₁) ~ (x₂, y₂) :=
   inseparable_prod.2 ⟨hx, hy⟩
 #align inseparable.prod Inseparable.prod
+-/
 
+#print inseparable_pi /-
 @[simp]
 theorem inseparable_pi {f g : ∀ i, π i} : (f ~ g) ↔ ∀ i, f i ~ g i := by
   simp only [Inseparable, nhds_pi, funext_iff, pi_inj]
 #align inseparable_pi inseparable_pi
+-/
 
 namespace Inseparable
 
@@ -447,14 +475,18 @@ theorem mem_closed_iff (h : x ~ y) (hs : IsClosed s) : x ∈ s ↔ y ∈ s :=
 #align inseparable.mem_closed_iff Inseparable.mem_closed_iff
 -/
 
+#print Inseparable.map_of_continuousAt /-
 theorem map_of_continuousAt (h : x ~ y) (hx : ContinuousAt f x) (hy : ContinuousAt f y) :
     f x ~ f y :=
   (h.Specializes.map_of_continuousAt hy).antisymm (h.specializes'.map_of_continuousAt hx)
 #align inseparable.map_of_continuous_at Inseparable.map_of_continuousAt
+-/
 
+#print Inseparable.map /-
 theorem map (h : x ~ y) (hf : Continuous f) : f x ~ f y :=
   h.map_of_continuousAt hf.ContinuousAt hf.ContinuousAt
 #align inseparable.map Inseparable.map
+-/
 
 end Inseparable
 
@@ -641,9 +673,11 @@ theorem image_mk_closure : mk '' closure s = closure (mk '' s) :=
 #align separation_quotient.image_mk_closure SeparationQuotient.image_mk_closure
 -/
 
+#print SeparationQuotient.map_prod_map_mk_nhds /-
 theorem map_prod_map_mk_nhds (x : X) (y : Y) : map (Prod.map mk mk) (𝓝 (x, y)) = 𝓝 (mk x, mk y) :=
   by rw [nhds_prod_eq, ← prod_map_map_eq', map_mk_nhds, map_mk_nhds, nhds_prod_eq]
 #align separation_quotient.map_prod_map_mk_nhds SeparationQuotient.map_prod_map_mk_nhds
+-/
 
 #print SeparationQuotient.map_mk_nhdsWithin_preimage /-
 theorem map_mk_nhdsWithin_preimage (s : Set (SeparationQuotient X)) (x : X) :
@@ -660,53 +694,69 @@ def lift (f : X → α) (hf : ∀ x y, (x ~ y) → f x = f y) : SeparationQuotie
 #align separation_quotient.lift SeparationQuotient.lift
 -/
 
+#print SeparationQuotient.lift_mk /-
 @[simp]
 theorem lift_mk {f : X → α} (hf : ∀ x y, (x ~ y) → f x = f y) (x : X) : lift f hf (mk x) = f x :=
   rfl
 #align separation_quotient.lift_mk SeparationQuotient.lift_mk
+-/
 
+#print SeparationQuotient.lift_comp_mk /-
 @[simp]
 theorem lift_comp_mk {f : X → α} (hf : ∀ x y, (x ~ y) → f x = f y) : lift f hf ∘ mk = f :=
   rfl
 #align separation_quotient.lift_comp_mk SeparationQuotient.lift_comp_mk
+-/
 
+#print SeparationQuotient.tendsto_lift_nhds_mk /-
 @[simp]
 theorem tendsto_lift_nhds_mk {f : X → α} {hf : ∀ x y, (x ~ y) → f x = f y} {x : X} {l : Filter α} :
     Tendsto (lift f hf) (𝓝 <| mk x) l ↔ Tendsto f (𝓝 x) l := by
   simp only [← map_mk_nhds, tendsto_map'_iff, lift_comp_mk]
 #align separation_quotient.tendsto_lift_nhds_mk SeparationQuotient.tendsto_lift_nhds_mk
+-/
 
+#print SeparationQuotient.tendsto_lift_nhdsWithin_mk /-
 @[simp]
 theorem tendsto_lift_nhdsWithin_mk {f : X → α} {hf : ∀ x y, (x ~ y) → f x = f y} {x : X}
     {s : Set (SeparationQuotient X)} {l : Filter α} :
     Tendsto (lift f hf) (𝓝[s] mk x) l ↔ Tendsto f (𝓝[mk ⁻¹' s] x) l := by
   simp only [← map_mk_nhds_within_preimage, tendsto_map'_iff, lift_comp_mk]
 #align separation_quotient.tendsto_lift_nhds_within_mk SeparationQuotient.tendsto_lift_nhdsWithin_mk
+-/
 
+#print SeparationQuotient.continuousAt_lift /-
 @[simp]
 theorem continuousAt_lift {f : X → Y} {hf : ∀ x y, (x ~ y) → f x = f y} {x : X} :
     ContinuousAt (lift f hf) (mk x) ↔ ContinuousAt f x :=
   tendsto_lift_nhds_mk
 #align separation_quotient.continuous_at_lift SeparationQuotient.continuousAt_lift
+-/
 
+#print SeparationQuotient.continuousWithinAt_lift /-
 @[simp]
 theorem continuousWithinAt_lift {f : X → Y} {hf : ∀ x y, (x ~ y) → f x = f y}
     {s : Set (SeparationQuotient X)} {x : X} :
     ContinuousWithinAt (lift f hf) s (mk x) ↔ ContinuousWithinAt f (mk ⁻¹' s) x :=
   tendsto_lift_nhdsWithin_mk
 #align separation_quotient.continuous_within_at_lift SeparationQuotient.continuousWithinAt_lift
+-/
 
+#print SeparationQuotient.continuousOn_lift /-
 @[simp]
 theorem continuousOn_lift {f : X → Y} {hf : ∀ x y, (x ~ y) → f x = f y}
     {s : Set (SeparationQuotient X)} : ContinuousOn (lift f hf) s ↔ ContinuousOn f (mk ⁻¹' s) := by
   simp only [ContinuousOn, surjective_mk.forall, continuous_within_at_lift, mem_preimage]
 #align separation_quotient.continuous_on_lift SeparationQuotient.continuousOn_lift
+-/
 
+#print SeparationQuotient.continuous_lift /-
 @[simp]
 theorem continuous_lift {f : X → Y} {hf : ∀ x y, (x ~ y) → f x = f y} :
     Continuous (lift f hf) ↔ Continuous f := by
   simp only [continuous_iff_continuousOn_univ, continuous_on_lift, preimage_univ]
 #align separation_quotient.continuous_lift SeparationQuotient.continuous_lift
+-/
 
 #print SeparationQuotient.lift₂ /-
 /-- Lift a map `f : X → Y → α` such that `inseparable a b → inseparable c d → f a c = f b d` to a
@@ -716,19 +766,24 @@ def lift₂ (f : X → Y → α) (hf : ∀ a b c d, (a ~ c) → (b ~ d) → f a
 #align separation_quotient.lift₂ SeparationQuotient.lift₂
 -/
 
+#print SeparationQuotient.lift₂_mk /-
 @[simp]
 theorem lift₂_mk {f : X → Y → α} (hf : ∀ a b c d, (a ~ c) → (b ~ d) → f a b = f c d) (x : X)
     (y : Y) : lift₂ f hf (mk x) (mk y) = f x y :=
   rfl
 #align separation_quotient.lift₂_mk SeparationQuotient.lift₂_mk
+-/
 
+#print SeparationQuotient.tendsto_lift₂_nhds /-
 @[simp]
 theorem tendsto_lift₂_nhds {f : X → Y → α} {hf : ∀ a b c d, (a ~ c) → (b ~ d) → f a b = f c d}
     {x : X} {y : Y} {l : Filter α} :
     Tendsto (uncurry <| lift₂ f hf) (𝓝 (mk x, mk y)) l ↔ Tendsto (uncurry f) (𝓝 (x, y)) l := by
   rw [← map_prod_map_mk_nhds, tendsto_map'_iff]; rfl
 #align separation_quotient.tendsto_lift₂_nhds SeparationQuotient.tendsto_lift₂_nhds
+-/
 
+#print SeparationQuotient.tendsto_lift₂_nhdsWithin /-
 @[simp]
 theorem tendsto_lift₂_nhdsWithin {f : X → Y → α} {hf : ∀ a b c d, (a ~ c) → (b ~ d) → f a b = f c d}
     {x : X} {y : Y} {s : Set (SeparationQuotient X × SeparationQuotient Y)} {l : Filter α} :
@@ -736,14 +791,18 @@ theorem tendsto_lift₂_nhdsWithin {f : X → Y → α} {hf : ∀ a b c d, (a ~
       Tendsto (uncurry f) (𝓝[Prod.map mk mk ⁻¹' s] (x, y)) l :=
   by rw [nhdsWithin, ← map_prod_map_mk_nhds, ← Filter.push_pull, comap_principal]; rfl
 #align separation_quotient.tendsto_lift₂_nhds_within SeparationQuotient.tendsto_lift₂_nhdsWithin
+-/
 
+#print SeparationQuotient.continuousAt_lift₂ /-
 @[simp]
 theorem continuousAt_lift₂ {f : X → Y → Z} {hf : ∀ a b c d, (a ~ c) → (b ~ d) → f a b = f c d}
     {x : X} {y : Y} :
     ContinuousAt (uncurry <| lift₂ f hf) (mk x, mk y) ↔ ContinuousAt (uncurry f) (x, y) :=
   tendsto_lift₂_nhds
 #align separation_quotient.continuous_at_lift₂ SeparationQuotient.continuousAt_lift₂
+-/
 
+#print SeparationQuotient.continuousWithinAt_lift₂ /-
 @[simp]
 theorem continuousWithinAt_lift₂ {f : X → Y → Z} {hf : ∀ a b c d, (a ~ c) → (b ~ d) → f a b = f c d}
     {s : Set (SeparationQuotient X × SeparationQuotient Y)} {x : X} {y : Y} :
@@ -751,7 +810,9 @@ theorem continuousWithinAt_lift₂ {f : X → Y → Z} {hf : ∀ a b c d, (a ~ c
       ContinuousWithinAt (uncurry f) (Prod.map mk mk ⁻¹' s) (x, y) :=
   tendsto_lift₂_nhdsWithin
 #align separation_quotient.continuous_within_at_lift₂ SeparationQuotient.continuousWithinAt_lift₂
+-/
 
+#print SeparationQuotient.continuousOn_lift₂ /-
 @[simp]
 theorem continuousOn_lift₂ {f : X → Y → Z} {hf : ∀ a b c d, (a ~ c) → (b ~ d) → f a b = f c d}
     {s : Set (SeparationQuotient X × SeparationQuotient Y)} :
@@ -761,12 +822,15 @@ theorem continuousOn_lift₂ {f : X → Y → Z} {hf : ∀ a b c d, (a ~ c) →
     continuous_within_at_lift₂]
   rfl
 #align separation_quotient.continuous_on_lift₂ SeparationQuotient.continuousOn_lift₂
+-/
 
+#print SeparationQuotient.continuous_lift₂ /-
 @[simp]
 theorem continuous_lift₂ {f : X → Y → Z} {hf : ∀ a b c d, (a ~ c) → (b ~ d) → f a b = f c d} :
     Continuous (uncurry <| lift₂ f hf) ↔ Continuous (uncurry f) := by
   simp only [continuous_iff_continuousOn_univ, continuous_on_lift₂, preimage_univ]
 #align separation_quotient.continuous_lift₂ SeparationQuotient.continuous_lift₂
+-/
 
 end SeparationQuotient
 
Diff
@@ -206,7 +206,6 @@ theorem specializes_of_nhdsWithin (h₁ : 𝓝[s] x ≤ 𝓝[s] y) (h₂ : x ∈
       pure x ≤ 𝓝[s] x := le_inf (pure_le_nhds _) (le_principal_iff.2 h₂)
       _ ≤ 𝓝[s] y := h₁
       _ ≤ 𝓝 y := inf_le_left
-      
 #align specializes_of_nhds_within specializes_of_nhdsWithin
 
 theorem Specializes.map_of_continuousAt (h : x ⤳ y) (hy : ContinuousAt f y) : f x ⤳ f y :=
Diff
@@ -491,7 +491,8 @@ def inseparableSetoid : Setoid X :=
 /-- The quotient of a topological space by its `inseparable_setoid`. This quotient is guaranteed to
 be a T₀ space. -/
 def SeparationQuotient :=
-  Quotient (inseparableSetoid X)deriving TopologicalSpace
+  Quotient (inseparableSetoid X)
+deriving TopologicalSpace
 #align separation_quotient SeparationQuotient
 -/
 
Diff
@@ -45,7 +45,7 @@ topological space, separation setoid
 
 open Set Filter Function
 
-open Topology Filter
+open scoped Topology Filter
 
 variable {X Y Z α ι : Type _} {π : ι → Type _} [TopologicalSpace X] [TopologicalSpace Y]
   [TopologicalSpace Z] [∀ i, TopologicalSpace (π i)] {x y z : X} {s : Set X} {f : X → Y}
Diff
@@ -77,12 +77,6 @@ def Specializes (x y : X) : Prop :=
 -- mathport name: «expr ⤳ »
 infixl:300 " ⤳ " => Specializes
 
-/- warning: specializes_tfae -> specializes_TFAE is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] (x : X) (y : X), List.TFAE (List.cons.{0} Prop (Specializes.{u1} X _inst_1 x y) (List.cons.{0} Prop (LE.le.{u1} (Filter.{u1} X) (Preorder.toHasLe.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.partialOrder.{u1} X))) (Pure.pure.{u1, u1} Filter.{u1} Filter.hasPure.{u1} X x) (nhds.{u1} X _inst_1 y)) (List.cons.{0} Prop (forall (s : Set.{u1} X), (IsOpen.{u1} X _inst_1 s) -> (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) y s) -> (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) x s)) (List.cons.{0} Prop (forall (s : Set.{u1} X), (IsClosed.{u1} X _inst_1 s) -> (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) x s) -> (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) y s)) (List.cons.{0} Prop (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) y (closure.{u1} X _inst_1 (Singleton.singleton.{u1, u1} X (Set.{u1} X) (Set.hasSingleton.{u1} X) x))) (List.cons.{0} Prop (HasSubset.Subset.{u1} (Set.{u1} X) (Set.hasSubset.{u1} X) (closure.{u1} X _inst_1 (Singleton.singleton.{u1, u1} X (Set.{u1} X) (Set.hasSingleton.{u1} X) y)) (closure.{u1} X _inst_1 (Singleton.singleton.{u1, u1} X (Set.{u1} X) (Set.hasSingleton.{u1} X) x))) (List.cons.{0} Prop (ClusterPt.{u1} X _inst_1 y (Pure.pure.{u1, u1} Filter.{u1} Filter.hasPure.{u1} X x)) (List.nil.{0} Prop))))))))
-but is expected to have type
-  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] (x : X) (y : X), List.TFAE (List.cons.{0} Prop (Specializes.{u1} X _inst_1 x y) (List.cons.{0} Prop (LE.le.{u1} (Filter.{u1} X) (Preorder.toLE.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.instPartialOrderFilter.{u1} X))) (Pure.pure.{u1, u1} Filter.{u1} Filter.instPureFilter.{u1} X x) (nhds.{u1} X _inst_1 y)) (List.cons.{0} Prop (forall (s : Set.{u1} X), (IsOpen.{u1} X _inst_1 s) -> (Membership.mem.{u1, u1} X (Set.{u1} X) (Set.instMembershipSet.{u1} X) y s) -> (Membership.mem.{u1, u1} X (Set.{u1} X) (Set.instMembershipSet.{u1} X) x s)) (List.cons.{0} Prop (forall (s : Set.{u1} X), (IsClosed.{u1} X _inst_1 s) -> (Membership.mem.{u1, u1} X (Set.{u1} X) (Set.instMembershipSet.{u1} X) x s) -> (Membership.mem.{u1, u1} X (Set.{u1} X) (Set.instMembershipSet.{u1} X) y s)) (List.cons.{0} Prop (Membership.mem.{u1, u1} X (Set.{u1} X) (Set.instMembershipSet.{u1} X) y (closure.{u1} X _inst_1 (Singleton.singleton.{u1, u1} X (Set.{u1} X) (Set.instSingletonSet.{u1} X) x))) (List.cons.{0} Prop (HasSubset.Subset.{u1} (Set.{u1} X) (Set.instHasSubsetSet.{u1} X) (closure.{u1} X _inst_1 (Singleton.singleton.{u1, u1} X (Set.{u1} X) (Set.instSingletonSet.{u1} X) y)) (closure.{u1} X _inst_1 (Singleton.singleton.{u1, u1} X (Set.{u1} X) (Set.instSingletonSet.{u1} X) x))) (List.cons.{0} Prop (ClusterPt.{u1} X _inst_1 y (Pure.pure.{u1, u1} Filter.{u1} Filter.instPureFilter.{u1} X x)) (List.nil.{0} Prop))))))))
-Case conversion may be inaccurate. Consider using '#align specializes_tfae specializes_TFAEₓ'. -/
 /-- A collection of equivalent definitions of `x ⤳ y`. The public API is given by `iff` lemmas
 below. -/
 theorem specializes_TFAE (x y : X) :
@@ -105,41 +99,17 @@ theorem specializes_TFAE (x y : X) :
   tfae_finish
 #align specializes_tfae specializes_TFAE
 
-/- warning: specializes_iff_nhds -> specializes_iff_nhds is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] {x : X} {y : X}, Iff (Specializes.{u1} X _inst_1 x y) (LE.le.{u1} (Filter.{u1} X) (Preorder.toHasLe.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.partialOrder.{u1} X))) (nhds.{u1} X _inst_1 x) (nhds.{u1} X _inst_1 y))
-but is expected to have type
-  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] {x : X} {y : X}, Iff (Specializes.{u1} X _inst_1 x y) (LE.le.{u1} (Filter.{u1} X) (Preorder.toLE.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.instPartialOrderFilter.{u1} X))) (nhds.{u1} X _inst_1 x) (nhds.{u1} X _inst_1 y))
-Case conversion may be inaccurate. Consider using '#align specializes_iff_nhds specializes_iff_nhdsₓ'. -/
 theorem specializes_iff_nhds : x ⤳ y ↔ 𝓝 x ≤ 𝓝 y :=
   Iff.rfl
 #align specializes_iff_nhds specializes_iff_nhds
 
-/- warning: specializes_iff_pure -> specializes_iff_pure is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] {x : X} {y : X}, Iff (Specializes.{u1} X _inst_1 x y) (LE.le.{u1} (Filter.{u1} X) (Preorder.toHasLe.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.partialOrder.{u1} X))) (Pure.pure.{u1, u1} Filter.{u1} Filter.hasPure.{u1} X x) (nhds.{u1} X _inst_1 y))
-but is expected to have type
-  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] {x : X} {y : X}, Iff (Specializes.{u1} X _inst_1 x y) (LE.le.{u1} (Filter.{u1} X) (Preorder.toLE.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.instPartialOrderFilter.{u1} X))) (Pure.pure.{u1, u1} Filter.{u1} Filter.instPureFilter.{u1} X x) (nhds.{u1} X _inst_1 y))
-Case conversion may be inaccurate. Consider using '#align specializes_iff_pure specializes_iff_pureₓ'. -/
 theorem specializes_iff_pure : x ⤳ y ↔ pure x ≤ 𝓝 y :=
   (specializes_TFAE x y).out 0 1
 #align specializes_iff_pure specializes_iff_pure
 
-/- warning: specializes.nhds_le_nhds -> Specializes.nhds_le_nhds is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] {x : X} {y : X}, (Specializes.{u1} X _inst_1 x y) -> (LE.le.{u1} (Filter.{u1} X) (Preorder.toHasLe.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.partialOrder.{u1} X))) (nhds.{u1} X _inst_1 x) (nhds.{u1} X _inst_1 y))
-but is expected to have type
-  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] {x : X} {y : X}, (Specializes.{u1} X _inst_1 x y) -> (LE.le.{u1} (Filter.{u1} X) (Preorder.toLE.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.instPartialOrderFilter.{u1} X))) (nhds.{u1} X _inst_1 x) (nhds.{u1} X _inst_1 y))
-Case conversion may be inaccurate. Consider using '#align specializes.nhds_le_nhds Specializes.nhds_le_nhdsₓ'. -/
 alias specializes_iff_nhds ↔ Specializes.nhds_le_nhds _
 #align specializes.nhds_le_nhds Specializes.nhds_le_nhds
 
-/- warning: specializes.pure_le_nhds -> Specializes.pure_le_nhds is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] {x : X} {y : X}, (Specializes.{u1} X _inst_1 x y) -> (LE.le.{u1} (Filter.{u1} X) (Preorder.toHasLe.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.partialOrder.{u1} X))) (Pure.pure.{u1, u1} Filter.{u1} Filter.hasPure.{u1} X x) (nhds.{u1} X _inst_1 y))
-but is expected to have type
-  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] {x : X} {y : X}, (Specializes.{u1} X _inst_1 x y) -> (LE.le.{u1} (Filter.{u1} X) (Preorder.toLE.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.instPartialOrderFilter.{u1} X))) (Pure.pure.{u1, u1} Filter.{u1} Filter.instPureFilter.{u1} X x) (nhds.{u1} X _inst_1 y))
-Case conversion may be inaccurate. Consider using '#align specializes.pure_le_nhds Specializes.pure_le_nhdsₓ'. -/
 alias specializes_iff_pure ↔ Specializes.pure_le_nhds _
 #align specializes.pure_le_nhds Specializes.pure_le_nhds
 
@@ -230,12 +200,6 @@ theorem specializes_of_eq (e : x = y) : x ⤳ y :=
 #align specializes_of_eq specializes_of_eq
 -/
 
-/- warning: specializes_of_nhds_within -> specializes_of_nhdsWithin is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] {x : X} {y : X} {s : Set.{u1} X}, (LE.le.{u1} (Filter.{u1} X) (Preorder.toHasLe.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.partialOrder.{u1} X))) (nhdsWithin.{u1} X _inst_1 x s) (nhdsWithin.{u1} X _inst_1 y s)) -> (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) x s) -> (Specializes.{u1} X _inst_1 x y)
-but is expected to have type
-  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] {x : X} {y : X} {s : Set.{u1} X}, (LE.le.{u1} (Filter.{u1} X) (Preorder.toLE.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.instPartialOrderFilter.{u1} X))) (nhdsWithin.{u1} X _inst_1 x s) (nhdsWithin.{u1} X _inst_1 y s)) -> (Membership.mem.{u1, u1} X (Set.{u1} X) (Set.instMembershipSet.{u1} X) x s) -> (Specializes.{u1} X _inst_1 x y)
-Case conversion may be inaccurate. Consider using '#align specializes_of_nhds_within specializes_of_nhdsWithinₓ'. -/
 theorem specializes_of_nhdsWithin (h₁ : 𝓝[s] x ≤ 𝓝[s] y) (h₂ : x ∈ s) : x ⤳ y :=
   specializes_iff_pure.2 <|
     calc
@@ -245,33 +209,15 @@ theorem specializes_of_nhdsWithin (h₁ : 𝓝[s] x ≤ 𝓝[s] y) (h₂ : x ∈
       
 #align specializes_of_nhds_within specializes_of_nhdsWithin
 
-/- warning: specializes.map_of_continuous_at -> Specializes.map_of_continuousAt is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] {x : X} {y : X} {f : X -> Y}, (Specializes.{u1} X _inst_1 x y) -> (ContinuousAt.{u1, u2} X Y _inst_1 _inst_2 f y) -> (Specializes.{u2} Y _inst_2 (f x) (f y))
-but is expected to have type
-  forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} Y] {x : X} {y : X} {f : X -> Y}, (Specializes.{u2} X _inst_1 x y) -> (ContinuousAt.{u2, u1} X Y _inst_1 _inst_2 f y) -> (Specializes.{u1} Y _inst_2 (f x) (f y))
-Case conversion may be inaccurate. Consider using '#align specializes.map_of_continuous_at Specializes.map_of_continuousAtₓ'. -/
 theorem Specializes.map_of_continuousAt (h : x ⤳ y) (hy : ContinuousAt f y) : f x ⤳ f y :=
   specializes_iff_pure.2 fun s hs =>
     mem_pure.2 <| mem_preimage.1 <| mem_of_mem_nhds <| hy.mono_left h hs
 #align specializes.map_of_continuous_at Specializes.map_of_continuousAt
 
-/- warning: specializes.map -> Specializes.map is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] {x : X} {y : X} {f : X -> Y}, (Specializes.{u1} X _inst_1 x y) -> (Continuous.{u1, u2} X Y _inst_1 _inst_2 f) -> (Specializes.{u2} Y _inst_2 (f x) (f y))
-but is expected to have type
-  forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} Y] {x : X} {y : X} {f : X -> Y}, (Specializes.{u2} X _inst_1 x y) -> (Continuous.{u2, u1} X Y _inst_1 _inst_2 f) -> (Specializes.{u1} Y _inst_2 (f x) (f y))
-Case conversion may be inaccurate. Consider using '#align specializes.map Specializes.mapₓ'. -/
 theorem Specializes.map (h : x ⤳ y) (hf : Continuous f) : f x ⤳ f y :=
   h.map_of_continuousAt hf.ContinuousAt
 #align specializes.map Specializes.map
 
-/- warning: inducing.specializes_iff -> Inducing.specializes_iff is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] {x : X} {y : X} {f : X -> Y}, (Inducing.{u1, u2} X Y _inst_1 _inst_2 f) -> (Iff (Specializes.{u2} Y _inst_2 (f x) (f y)) (Specializes.{u1} X _inst_1 x y))
-but is expected to have type
-  forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} Y] {x : X} {y : X} {f : X -> Y}, (Inducing.{u2, u1} X Y _inst_1 _inst_2 f) -> (Iff (Specializes.{u1} Y _inst_2 (f x) (f y)) (Specializes.{u2} X _inst_1 x y))
-Case conversion may be inaccurate. Consider using '#align inducing.specializes_iff Inducing.specializes_iffₓ'. -/
 theorem Inducing.specializes_iff (hf : Inducing f) : f x ⤳ f y ↔ x ⤳ y := by
   simp only [specializes_iff_mem_closure, hf.closure_eq_preimage_closure_image, image_singleton,
     mem_preimage]
@@ -283,34 +229,16 @@ theorem subtype_specializes_iff {p : X → Prop} (x y : Subtype p) : x ⤳ y ↔
 #align subtype_specializes_iff subtype_specializes_iff
 -/
 
-/- warning: specializes_prod -> specializes_prod is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] {x₁ : X} {x₂ : X} {y₁ : Y} {y₂ : Y}, Iff (Specializes.{max u1 u2} (Prod.{u1, u2} X Y) (Prod.topologicalSpace.{u1, u2} X Y _inst_1 _inst_2) (Prod.mk.{u1, u2} X Y x₁ y₁) (Prod.mk.{u1, u2} X Y x₂ y₂)) (And (Specializes.{u1} X _inst_1 x₁ x₂) (Specializes.{u2} Y _inst_2 y₁ y₂))
-but is expected to have type
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] {x₁ : X} {x₂ : X} {y₁ : Y} {y₂ : Y}, Iff (Specializes.{max u2 u1} (Prod.{u1, u2} X Y) (instTopologicalSpaceProd.{u1, u2} X Y _inst_1 _inst_2) (Prod.mk.{u1, u2} X Y x₁ y₁) (Prod.mk.{u1, u2} X Y x₂ y₂)) (And (Specializes.{u1} X _inst_1 x₁ x₂) (Specializes.{u2} Y _inst_2 y₁ y₂))
-Case conversion may be inaccurate. Consider using '#align specializes_prod specializes_prodₓ'. -/
 @[simp]
 theorem specializes_prod {x₁ x₂ : X} {y₁ y₂ : Y} : (x₁, y₁) ⤳ (x₂, y₂) ↔ x₁ ⤳ x₂ ∧ y₁ ⤳ y₂ := by
   simp only [Specializes, nhds_prod_eq, prod_le_prod]
 #align specializes_prod specializes_prod
 
-/- warning: specializes.prod -> Specializes.prod is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] {x₁ : X} {x₂ : X} {y₁ : Y} {y₂ : Y}, (Specializes.{u1} X _inst_1 x₁ x₂) -> (Specializes.{u2} Y _inst_2 y₁ y₂) -> (Specializes.{max u1 u2} (Prod.{u1, u2} X Y) (Prod.topologicalSpace.{u1, u2} X Y _inst_1 _inst_2) (Prod.mk.{u1, u2} X Y x₁ y₁) (Prod.mk.{u1, u2} X Y x₂ y₂))
-but is expected to have type
-  forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} Y] {x₁ : X} {x₂ : X} {y₁ : Y} {y₂ : Y}, (Specializes.{u2} X _inst_1 x₁ x₂) -> (Specializes.{u1} Y _inst_2 y₁ y₂) -> (Specializes.{max u1 u2} (Prod.{u2, u1} X Y) (instTopologicalSpaceProd.{u2, u1} X Y _inst_1 _inst_2) (Prod.mk.{u2, u1} X Y x₁ y₁) (Prod.mk.{u2, u1} X Y x₂ y₂))
-Case conversion may be inaccurate. Consider using '#align specializes.prod Specializes.prodₓ'. -/
 theorem Specializes.prod {x₁ x₂ : X} {y₁ y₂ : Y} (hx : x₁ ⤳ x₂) (hy : y₁ ⤳ y₂) :
     (x₁, y₁) ⤳ (x₂, y₂) :=
   specializes_prod.2 ⟨hx, hy⟩
 #align specializes.prod Specializes.prod
 
-/- warning: specializes_pi -> specializes_pi is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {π : ι -> Type.{u2}} [_inst_4 : forall (i : ι), TopologicalSpace.{u2} (π i)] {f : forall (i : ι), π i} {g : forall (i : ι), π i}, Iff (Specializes.{max u1 u2} (forall (i : ι), π i) (Pi.topologicalSpace.{u1, u2} ι (fun (i : ι) => π i) (fun (a : ι) => _inst_4 a)) f g) (forall (i : ι), Specializes.{u2} (π i) (_inst_4 i) (f i) (g i))
-but is expected to have type
-  forall {ι : Type.{u2}} {π : ι -> Type.{u1}} [_inst_4 : forall (i : ι), TopologicalSpace.{u1} (π i)] {f : forall (i : ι), π i} {g : forall (i : ι), π i}, Iff (Specializes.{max u2 u1} (forall (i : ι), π i) (Pi.topologicalSpace.{u2, u1} ι (fun (i : ι) => π i) (fun (a : ι) => _inst_4 a)) f g) (forall (i : ι), Specializes.{u1} (π i) (_inst_4 i) (f i) (g i))
-Case conversion may be inaccurate. Consider using '#align specializes_pi specializes_piₓ'. -/
 @[simp]
 theorem specializes_pi {f g : ∀ i, π i} : f ⤳ g ↔ ∀ i, f i ⤳ g i := by
   simp only [Specializes, nhds_pi, pi_le_pi]
@@ -343,12 +271,6 @@ def specializationPreorder : Preorder X :=
 
 variable {X}
 
-/- warning: continuous.specialization_monotone -> Continuous.specialization_monotone is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] {f : X -> Y}, (Continuous.{u1, u2} X Y _inst_1 _inst_2 f) -> (Monotone.{u1, u2} X Y (specializationPreorder.{u1} X _inst_1) (specializationPreorder.{u2} Y _inst_2) f)
-but is expected to have type
-  forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} Y] {f : X -> Y}, (Continuous.{u2, u1} X Y _inst_1 _inst_2 f) -> (Monotone.{u2, u1} X Y (specializationPreorder.{u2} X _inst_1) (specializationPreorder.{u1} Y _inst_2) f)
-Case conversion may be inaccurate. Consider using '#align continuous.specialization_monotone Continuous.specialization_monotoneₓ'. -/
 /-- A continuous function is monotone with respect to the specialization preorders on the domain and
 the codomain. -/
 theorem Continuous.specialization_monotone (hf : Continuous f) :
@@ -448,12 +370,6 @@ theorem inseparable_of_nhdsWithin_eq (hx : x ∈ s) (hy : y ∈ s) (h : 𝓝[s]
 #align inseparable_of_nhds_within_eq inseparable_of_nhdsWithin_eq
 -/
 
-/- warning: inducing.inseparable_iff -> Inducing.inseparable_iff is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] {x : X} {y : X} {f : X -> Y}, (Inducing.{u1, u2} X Y _inst_1 _inst_2 f) -> (Iff (Inseparable.{u2} Y _inst_2 (f x) (f y)) (Inseparable.{u1} X _inst_1 x y))
-but is expected to have type
-  forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} Y] {x : X} {y : X} {f : X -> Y}, (Inducing.{u2, u1} X Y _inst_1 _inst_2 f) -> (Iff (Inseparable.{u1} Y _inst_2 (f x) (f y)) (Inseparable.{u2} X _inst_1 x y))
-Case conversion may be inaccurate. Consider using '#align inducing.inseparable_iff Inducing.inseparable_iffₓ'. -/
 theorem Inducing.inseparable_iff (hf : Inducing f) : (f x ~ f y) ↔ (x ~ y) := by
   simp only [inseparable_iff_specializes_and, hf.specializes_iff]
 #align inducing.inseparable_iff Inducing.inseparable_iff
@@ -464,34 +380,16 @@ theorem subtype_inseparable_iff {p : X → Prop} (x y : Subtype p) : (x ~ y) ↔
 #align subtype_inseparable_iff subtype_inseparable_iff
 -/
 
-/- warning: inseparable_prod -> inseparable_prod is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] {x₁ : X} {x₂ : X} {y₁ : Y} {y₂ : Y}, Iff (Inseparable.{max u1 u2} (Prod.{u1, u2} X Y) (Prod.topologicalSpace.{u1, u2} X Y _inst_1 _inst_2) (Prod.mk.{u1, u2} X Y x₁ y₁) (Prod.mk.{u1, u2} X Y x₂ y₂)) (And (Inseparable.{u1} X _inst_1 x₁ x₂) (Inseparable.{u2} Y _inst_2 y₁ y₂))
-but is expected to have type
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] {x₁ : X} {x₂ : X} {y₁ : Y} {y₂ : Y}, Iff (Inseparable.{max u2 u1} (Prod.{u1, u2} X Y) (instTopologicalSpaceProd.{u1, u2} X Y _inst_1 _inst_2) (Prod.mk.{u1, u2} X Y x₁ y₁) (Prod.mk.{u1, u2} X Y x₂ y₂)) (And (Inseparable.{u1} X _inst_1 x₁ x₂) (Inseparable.{u2} Y _inst_2 y₁ y₂))
-Case conversion may be inaccurate. Consider using '#align inseparable_prod inseparable_prodₓ'. -/
 @[simp]
 theorem inseparable_prod {x₁ x₂ : X} {y₁ y₂ : Y} : ((x₁, y₁) ~ (x₂, y₂)) ↔ (x₁ ~ x₂) ∧ (y₁ ~ y₂) :=
   by simp only [Inseparable, nhds_prod_eq, prod_inj]
 #align inseparable_prod inseparable_prod
 
-/- warning: inseparable.prod -> Inseparable.prod is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] {x₁ : X} {x₂ : X} {y₁ : Y} {y₂ : Y}, (Inseparable.{u1} X _inst_1 x₁ x₂) -> (Inseparable.{u2} Y _inst_2 y₁ y₂) -> (Inseparable.{max u1 u2} (Prod.{u1, u2} X Y) (Prod.topologicalSpace.{u1, u2} X Y _inst_1 _inst_2) (Prod.mk.{u1, u2} X Y x₁ y₁) (Prod.mk.{u1, u2} X Y x₂ y₂))
-but is expected to have type
-  forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} Y] {x₁ : X} {x₂ : X} {y₁ : Y} {y₂ : Y}, (Inseparable.{u2} X _inst_1 x₁ x₂) -> (Inseparable.{u1} Y _inst_2 y₁ y₂) -> (Inseparable.{max u1 u2} (Prod.{u2, u1} X Y) (instTopologicalSpaceProd.{u2, u1} X Y _inst_1 _inst_2) (Prod.mk.{u2, u1} X Y x₁ y₁) (Prod.mk.{u2, u1} X Y x₂ y₂))
-Case conversion may be inaccurate. Consider using '#align inseparable.prod Inseparable.prodₓ'. -/
 theorem Inseparable.prod {x₁ x₂ : X} {y₁ y₂ : Y} (hx : x₁ ~ x₂) (hy : y₁ ~ y₂) :
     (x₁, y₁) ~ (x₂, y₂) :=
   inseparable_prod.2 ⟨hx, hy⟩
 #align inseparable.prod Inseparable.prod
 
-/- warning: inseparable_pi -> inseparable_pi is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {π : ι -> Type.{u2}} [_inst_4 : forall (i : ι), TopologicalSpace.{u2} (π i)] {f : forall (i : ι), π i} {g : forall (i : ι), π i}, Iff (Inseparable.{max u1 u2} (forall (i : ι), π i) (Pi.topologicalSpace.{u1, u2} ι (fun (i : ι) => π i) (fun (a : ι) => _inst_4 a)) f g) (forall (i : ι), Inseparable.{u2} (π i) (_inst_4 i) (f i) (g i))
-but is expected to have type
-  forall {ι : Type.{u2}} {π : ι -> Type.{u1}} [_inst_4 : forall (i : ι), TopologicalSpace.{u1} (π i)] {f : forall (i : ι), π i} {g : forall (i : ι), π i}, Iff (Inseparable.{max u2 u1} (forall (i : ι), π i) (Pi.topologicalSpace.{u2, u1} ι (fun (i : ι) => π i) (fun (a : ι) => _inst_4 a)) f g) (forall (i : ι), Inseparable.{u1} (π i) (_inst_4 i) (f i) (g i))
-Case conversion may be inaccurate. Consider using '#align inseparable_pi inseparable_piₓ'. -/
 @[simp]
 theorem inseparable_pi {f g : ∀ i, π i} : (f ~ g) ↔ ∀ i, f i ~ g i := by
   simp only [Inseparable, nhds_pi, funext_iff, pi_inj]
@@ -550,23 +448,11 @@ theorem mem_closed_iff (h : x ~ y) (hs : IsClosed s) : x ∈ s ↔ y ∈ s :=
 #align inseparable.mem_closed_iff Inseparable.mem_closed_iff
 -/
 
-/- warning: inseparable.map_of_continuous_at -> Inseparable.map_of_continuousAt is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] {x : X} {y : X} {f : X -> Y}, (Inseparable.{u1} X _inst_1 x y) -> (ContinuousAt.{u1, u2} X Y _inst_1 _inst_2 f x) -> (ContinuousAt.{u1, u2} X Y _inst_1 _inst_2 f y) -> (Inseparable.{u2} Y _inst_2 (f x) (f y))
-but is expected to have type
-  forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} Y] {x : X} {y : X} {f : X -> Y}, (Inseparable.{u2} X _inst_1 x y) -> (ContinuousAt.{u2, u1} X Y _inst_1 _inst_2 f x) -> (ContinuousAt.{u2, u1} X Y _inst_1 _inst_2 f y) -> (Inseparable.{u1} Y _inst_2 (f x) (f y))
-Case conversion may be inaccurate. Consider using '#align inseparable.map_of_continuous_at Inseparable.map_of_continuousAtₓ'. -/
 theorem map_of_continuousAt (h : x ~ y) (hx : ContinuousAt f x) (hy : ContinuousAt f y) :
     f x ~ f y :=
   (h.Specializes.map_of_continuousAt hy).antisymm (h.specializes'.map_of_continuousAt hx)
 #align inseparable.map_of_continuous_at Inseparable.map_of_continuousAt
 
-/- warning: inseparable.map -> Inseparable.map is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] {x : X} {y : X} {f : X -> Y}, (Inseparable.{u1} X _inst_1 x y) -> (Continuous.{u1, u2} X Y _inst_1 _inst_2 f) -> (Inseparable.{u2} Y _inst_2 (f x) (f y))
-but is expected to have type
-  forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} Y] {x : X} {y : X} {f : X -> Y}, (Inseparable.{u2} X _inst_1 x y) -> (Continuous.{u2, u1} X Y _inst_1 _inst_2 f) -> (Inseparable.{u1} Y _inst_2 (f x) (f y))
-Case conversion may be inaccurate. Consider using '#align inseparable.map Inseparable.mapₓ'. -/
 theorem map (h : x ~ y) (hf : Continuous f) : f x ~ f y :=
   h.map_of_continuousAt hf.ContinuousAt hf.ContinuousAt
 #align inseparable.map Inseparable.map
@@ -755,12 +641,6 @@ theorem image_mk_closure : mk '' closure s = closure (mk '' s) :=
 #align separation_quotient.image_mk_closure SeparationQuotient.image_mk_closure
 -/
 
-/- warning: separation_quotient.map_prod_map_mk_nhds -> SeparationQuotient.map_prod_map_mk_nhds is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] (x : X) (y : Y), Eq.{succ (max u1 u2)} (Filter.{max u1 u2} (Prod.{u1, u2} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2))) (Filter.map.{max u1 u2, max u1 u2} (Prod.{u1, u2} X Y) (Prod.{u1, u2} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2)) (Prod.map.{u1, u1, u2, u2} X (SeparationQuotient.{u1} X _inst_1) Y (SeparationQuotient.{u2} Y _inst_2) (SeparationQuotient.mk.{u1} X _inst_1) (SeparationQuotient.mk.{u2} Y _inst_2)) (nhds.{max u1 u2} (Prod.{u1, u2} X Y) (Prod.topologicalSpace.{u1, u2} X Y _inst_1 _inst_2) (Prod.mk.{u1, u2} X Y x y))) (nhds.{max u1 u2} (Prod.{u1, u2} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2)) (Prod.topologicalSpace.{u1, u2} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) (SeparationQuotient.topologicalSpace.{u1} X _inst_1) (SeparationQuotient.topologicalSpace.{u2} Y _inst_2)) (Prod.mk.{u1, u2} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) (SeparationQuotient.mk.{u1} X _inst_1 x) (SeparationQuotient.mk.{u2} Y _inst_2 y)))
-but is expected to have type
-  forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} Y] (x : X) (y : Y), Eq.{max (succ u2) (succ u1)} (Filter.{max u1 u2} (Prod.{u2, u1} (SeparationQuotient.{u2} X _inst_1) (SeparationQuotient.{u1} Y _inst_2))) (Filter.map.{max u1 u2, max u1 u2} (Prod.{u2, u1} X Y) (Prod.{u2, u1} (SeparationQuotient.{u2} X _inst_1) (SeparationQuotient.{u1} Y _inst_2)) (Prod.map.{u2, u2, u1, u1} X (SeparationQuotient.{u2} X _inst_1) Y (SeparationQuotient.{u1} Y _inst_2) (SeparationQuotient.mk.{u2} X _inst_1) (SeparationQuotient.mk.{u1} Y _inst_2)) (nhds.{max u2 u1} (Prod.{u2, u1} X Y) (instTopologicalSpaceProd.{u2, u1} X Y _inst_1 _inst_2) (Prod.mk.{u2, u1} X Y x y))) (nhds.{max u1 u2} (Prod.{u2, u1} (SeparationQuotient.{u2} X _inst_1) (SeparationQuotient.{u1} Y _inst_2)) (instTopologicalSpaceProd.{u2, u1} (SeparationQuotient.{u2} X _inst_1) (SeparationQuotient.{u1} Y _inst_2) (instTopologicalSpaceSeparationQuotient.{u2} X _inst_1) (instTopologicalSpaceSeparationQuotient.{u1} Y _inst_2)) (Prod.mk.{u2, u1} (SeparationQuotient.{u2} X _inst_1) (SeparationQuotient.{u1} Y _inst_2) (SeparationQuotient.mk.{u2} X _inst_1 x) (SeparationQuotient.mk.{u1} Y _inst_2 y)))
-Case conversion may be inaccurate. Consider using '#align separation_quotient.map_prod_map_mk_nhds SeparationQuotient.map_prod_map_mk_nhdsₓ'. -/
 theorem map_prod_map_mk_nhds (x : X) (y : Y) : map (Prod.map mk mk) (𝓝 (x, y)) = 𝓝 (mk x, mk y) :=
   by rw [nhds_prod_eq, ← prod_map_map_eq', map_mk_nhds, map_mk_nhds, nhds_prod_eq]
 #align separation_quotient.map_prod_map_mk_nhds SeparationQuotient.map_prod_map_mk_nhds
@@ -780,46 +660,22 @@ def lift (f : X → α) (hf : ∀ x y, (x ~ y) → f x = f y) : SeparationQuotie
 #align separation_quotient.lift SeparationQuotient.lift
 -/
 
-/- warning: separation_quotient.lift_mk -> SeparationQuotient.lift_mk is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] {f : X -> α} (hf : forall (x : X) (y : X), (Inseparable.{u1} X _inst_1 x y) -> (Eq.{succ u2} α (f x) (f y))) (x : X), Eq.{succ u2} α (SeparationQuotient.lift.{u1, u2} X α _inst_1 f hf (SeparationQuotient.mk.{u1} X _inst_1 x)) (f x)
-but is expected to have type
-  forall {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] {f : X -> α} (hf : forall (x : X) (y : X), (Inseparable.{u2} X _inst_1 x y) -> (Eq.{succ u1} α (f x) (f y))) (x : X), Eq.{succ u1} α (SeparationQuotient.lift.{u2, u1} X α _inst_1 f hf (SeparationQuotient.mk.{u2} X _inst_1 x)) (f x)
-Case conversion may be inaccurate. Consider using '#align separation_quotient.lift_mk SeparationQuotient.lift_mkₓ'. -/
 @[simp]
 theorem lift_mk {f : X → α} (hf : ∀ x y, (x ~ y) → f x = f y) (x : X) : lift f hf (mk x) = f x :=
   rfl
 #align separation_quotient.lift_mk SeparationQuotient.lift_mk
 
-/- warning: separation_quotient.lift_comp_mk -> SeparationQuotient.lift_comp_mk is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] {f : X -> α} (hf : forall (x : X) (y : X), (Inseparable.{u1} X _inst_1 x y) -> (Eq.{succ u2} α (f x) (f y))), Eq.{max (succ u1) (succ u2)} (X -> α) (Function.comp.{succ u1, succ u1, succ u2} X (SeparationQuotient.{u1} X _inst_1) α (SeparationQuotient.lift.{u1, u2} X α _inst_1 f hf) (SeparationQuotient.mk.{u1} X _inst_1)) f
-but is expected to have type
-  forall {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] {f : X -> α} (hf : forall (x : X) (y : X), (Inseparable.{u2} X _inst_1 x y) -> (Eq.{succ u1} α (f x) (f y))), Eq.{max (succ u2) (succ u1)} (X -> α) (Function.comp.{succ u2, succ u2, succ u1} X (SeparationQuotient.{u2} X _inst_1) α (SeparationQuotient.lift.{u2, u1} X α _inst_1 f hf) (SeparationQuotient.mk.{u2} X _inst_1)) f
-Case conversion may be inaccurate. Consider using '#align separation_quotient.lift_comp_mk SeparationQuotient.lift_comp_mkₓ'. -/
 @[simp]
 theorem lift_comp_mk {f : X → α} (hf : ∀ x y, (x ~ y) → f x = f y) : lift f hf ∘ mk = f :=
   rfl
 #align separation_quotient.lift_comp_mk SeparationQuotient.lift_comp_mk
 
-/- warning: separation_quotient.tendsto_lift_nhds_mk -> SeparationQuotient.tendsto_lift_nhds_mk is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] {f : X -> α} {hf : forall (x : X) (y : X), (Inseparable.{u1} X _inst_1 x y) -> (Eq.{succ u2} α (f x) (f y))} {x : X} {l : Filter.{u2} α}, Iff (Filter.Tendsto.{u1, u2} (SeparationQuotient.{u1} X _inst_1) α (SeparationQuotient.lift.{u1, u2} X α _inst_1 f hf) (nhds.{u1} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.topologicalSpace.{u1} X _inst_1) (SeparationQuotient.mk.{u1} X _inst_1 x)) l) (Filter.Tendsto.{u1, u2} X α f (nhds.{u1} X _inst_1 x) l)
-but is expected to have type
-  forall {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] {f : X -> α} {hf : forall (x : X) (y : X), (Inseparable.{u2} X _inst_1 x y) -> (Eq.{succ u1} α (f x) (f y))} {x : X} {l : Filter.{u1} α}, Iff (Filter.Tendsto.{u2, u1} (SeparationQuotient.{u2} X _inst_1) α (SeparationQuotient.lift.{u2, u1} X α _inst_1 f hf) (nhds.{u2} (SeparationQuotient.{u2} X _inst_1) (instTopologicalSpaceSeparationQuotient.{u2} X _inst_1) (SeparationQuotient.mk.{u2} X _inst_1 x)) l) (Filter.Tendsto.{u2, u1} X α f (nhds.{u2} X _inst_1 x) l)
-Case conversion may be inaccurate. Consider using '#align separation_quotient.tendsto_lift_nhds_mk SeparationQuotient.tendsto_lift_nhds_mkₓ'. -/
 @[simp]
 theorem tendsto_lift_nhds_mk {f : X → α} {hf : ∀ x y, (x ~ y) → f x = f y} {x : X} {l : Filter α} :
     Tendsto (lift f hf) (𝓝 <| mk x) l ↔ Tendsto f (𝓝 x) l := by
   simp only [← map_mk_nhds, tendsto_map'_iff, lift_comp_mk]
 #align separation_quotient.tendsto_lift_nhds_mk SeparationQuotient.tendsto_lift_nhds_mk
 
-/- warning: separation_quotient.tendsto_lift_nhds_within_mk -> SeparationQuotient.tendsto_lift_nhdsWithin_mk is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] {f : X -> α} {hf : forall (x : X) (y : X), (Inseparable.{u1} X _inst_1 x y) -> (Eq.{succ u2} α (f x) (f y))} {x : X} {s : Set.{u1} (SeparationQuotient.{u1} X _inst_1)} {l : Filter.{u2} α}, Iff (Filter.Tendsto.{u1, u2} (SeparationQuotient.{u1} X _inst_1) α (SeparationQuotient.lift.{u1, u2} X α _inst_1 f hf) (nhdsWithin.{u1} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.topologicalSpace.{u1} X _inst_1) (SeparationQuotient.mk.{u1} X _inst_1 x) s) l) (Filter.Tendsto.{u1, u2} X α f (nhdsWithin.{u1} X _inst_1 x (Set.preimage.{u1, u1} X (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.mk.{u1} X _inst_1) s)) l)
-but is expected to have type
-  forall {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] {f : X -> α} {hf : forall (x : X) (y : X), (Inseparable.{u2} X _inst_1 x y) -> (Eq.{succ u1} α (f x) (f y))} {x : X} {s : Set.{u2} (SeparationQuotient.{u2} X _inst_1)} {l : Filter.{u1} α}, Iff (Filter.Tendsto.{u2, u1} (SeparationQuotient.{u2} X _inst_1) α (SeparationQuotient.lift.{u2, u1} X α _inst_1 f hf) (nhdsWithin.{u2} (SeparationQuotient.{u2} X _inst_1) (instTopologicalSpaceSeparationQuotient.{u2} X _inst_1) (SeparationQuotient.mk.{u2} X _inst_1 x) s) l) (Filter.Tendsto.{u2, u1} X α f (nhdsWithin.{u2} X _inst_1 x (Set.preimage.{u2, u2} X (SeparationQuotient.{u2} X _inst_1) (SeparationQuotient.mk.{u2} X _inst_1) s)) l)
-Case conversion may be inaccurate. Consider using '#align separation_quotient.tendsto_lift_nhds_within_mk SeparationQuotient.tendsto_lift_nhdsWithin_mkₓ'. -/
 @[simp]
 theorem tendsto_lift_nhdsWithin_mk {f : X → α} {hf : ∀ x y, (x ~ y) → f x = f y} {x : X}
     {s : Set (SeparationQuotient X)} {l : Filter α} :
@@ -827,24 +683,12 @@ theorem tendsto_lift_nhdsWithin_mk {f : X → α} {hf : ∀ x y, (x ~ y) → f x
   simp only [← map_mk_nhds_within_preimage, tendsto_map'_iff, lift_comp_mk]
 #align separation_quotient.tendsto_lift_nhds_within_mk SeparationQuotient.tendsto_lift_nhdsWithin_mk
 
-/- warning: separation_quotient.continuous_at_lift -> SeparationQuotient.continuousAt_lift is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] {f : X -> Y} {hf : forall (x : X) (y : X), (Inseparable.{u1} X _inst_1 x y) -> (Eq.{succ u2} Y (f x) (f y))} {x : X}, Iff (ContinuousAt.{u1, u2} (SeparationQuotient.{u1} X _inst_1) Y (SeparationQuotient.topologicalSpace.{u1} X _inst_1) _inst_2 (SeparationQuotient.lift.{u1, u2} X Y _inst_1 f hf) (SeparationQuotient.mk.{u1} X _inst_1 x)) (ContinuousAt.{u1, u2} X Y _inst_1 _inst_2 f x)
-but is expected to have type
-  forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} Y] {f : X -> Y} {hf : forall (x : X) (y : X), (Inseparable.{u2} X _inst_1 x y) -> (Eq.{succ u1} Y (f x) (f y))} {x : X}, Iff (ContinuousAt.{u2, u1} (SeparationQuotient.{u2} X _inst_1) Y (instTopologicalSpaceSeparationQuotient.{u2} X _inst_1) _inst_2 (SeparationQuotient.lift.{u2, u1} X Y _inst_1 f hf) (SeparationQuotient.mk.{u2} X _inst_1 x)) (ContinuousAt.{u2, u1} X Y _inst_1 _inst_2 f x)
-Case conversion may be inaccurate. Consider using '#align separation_quotient.continuous_at_lift SeparationQuotient.continuousAt_liftₓ'. -/
 @[simp]
 theorem continuousAt_lift {f : X → Y} {hf : ∀ x y, (x ~ y) → f x = f y} {x : X} :
     ContinuousAt (lift f hf) (mk x) ↔ ContinuousAt f x :=
   tendsto_lift_nhds_mk
 #align separation_quotient.continuous_at_lift SeparationQuotient.continuousAt_lift
 
-/- warning: separation_quotient.continuous_within_at_lift -> SeparationQuotient.continuousWithinAt_lift is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] {f : X -> Y} {hf : forall (x : X) (y : X), (Inseparable.{u1} X _inst_1 x y) -> (Eq.{succ u2} Y (f x) (f y))} {s : Set.{u1} (SeparationQuotient.{u1} X _inst_1)} {x : X}, Iff (ContinuousWithinAt.{u1, u2} (SeparationQuotient.{u1} X _inst_1) Y (SeparationQuotient.topologicalSpace.{u1} X _inst_1) _inst_2 (SeparationQuotient.lift.{u1, u2} X Y _inst_1 f hf) s (SeparationQuotient.mk.{u1} X _inst_1 x)) (ContinuousWithinAt.{u1, u2} X Y _inst_1 _inst_2 f (Set.preimage.{u1, u1} X (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.mk.{u1} X _inst_1) s) x)
-but is expected to have type
-  forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} Y] {f : X -> Y} {hf : forall (x : X) (y : X), (Inseparable.{u2} X _inst_1 x y) -> (Eq.{succ u1} Y (f x) (f y))} {s : Set.{u2} (SeparationQuotient.{u2} X _inst_1)} {x : X}, Iff (ContinuousWithinAt.{u2, u1} (SeparationQuotient.{u2} X _inst_1) Y (instTopologicalSpaceSeparationQuotient.{u2} X _inst_1) _inst_2 (SeparationQuotient.lift.{u2, u1} X Y _inst_1 f hf) s (SeparationQuotient.mk.{u2} X _inst_1 x)) (ContinuousWithinAt.{u2, u1} X Y _inst_1 _inst_2 f (Set.preimage.{u2, u2} X (SeparationQuotient.{u2} X _inst_1) (SeparationQuotient.mk.{u2} X _inst_1) s) x)
-Case conversion may be inaccurate. Consider using '#align separation_quotient.continuous_within_at_lift SeparationQuotient.continuousWithinAt_liftₓ'. -/
 @[simp]
 theorem continuousWithinAt_lift {f : X → Y} {hf : ∀ x y, (x ~ y) → f x = f y}
     {s : Set (SeparationQuotient X)} {x : X} :
@@ -852,24 +696,12 @@ theorem continuousWithinAt_lift {f : X → Y} {hf : ∀ x y, (x ~ y) → f x = f
   tendsto_lift_nhdsWithin_mk
 #align separation_quotient.continuous_within_at_lift SeparationQuotient.continuousWithinAt_lift
 
-/- warning: separation_quotient.continuous_on_lift -> SeparationQuotient.continuousOn_lift is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] {f : X -> Y} {hf : forall (x : X) (y : X), (Inseparable.{u1} X _inst_1 x y) -> (Eq.{succ u2} Y (f x) (f y))} {s : Set.{u1} (SeparationQuotient.{u1} X _inst_1)}, Iff (ContinuousOn.{u1, u2} (SeparationQuotient.{u1} X _inst_1) Y (SeparationQuotient.topologicalSpace.{u1} X _inst_1) _inst_2 (SeparationQuotient.lift.{u1, u2} X Y _inst_1 f hf) s) (ContinuousOn.{u1, u2} X Y _inst_1 _inst_2 f (Set.preimage.{u1, u1} X (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.mk.{u1} X _inst_1) s))
-but is expected to have type
-  forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} Y] {f : X -> Y} {hf : forall (x : X) (y : X), (Inseparable.{u2} X _inst_1 x y) -> (Eq.{succ u1} Y (f x) (f y))} {s : Set.{u2} (SeparationQuotient.{u2} X _inst_1)}, Iff (ContinuousOn.{u2, u1} (SeparationQuotient.{u2} X _inst_1) Y (instTopologicalSpaceSeparationQuotient.{u2} X _inst_1) _inst_2 (SeparationQuotient.lift.{u2, u1} X Y _inst_1 f hf) s) (ContinuousOn.{u2, u1} X Y _inst_1 _inst_2 f (Set.preimage.{u2, u2} X (SeparationQuotient.{u2} X _inst_1) (SeparationQuotient.mk.{u2} X _inst_1) s))
-Case conversion may be inaccurate. Consider using '#align separation_quotient.continuous_on_lift SeparationQuotient.continuousOn_liftₓ'. -/
 @[simp]
 theorem continuousOn_lift {f : X → Y} {hf : ∀ x y, (x ~ y) → f x = f y}
     {s : Set (SeparationQuotient X)} : ContinuousOn (lift f hf) s ↔ ContinuousOn f (mk ⁻¹' s) := by
   simp only [ContinuousOn, surjective_mk.forall, continuous_within_at_lift, mem_preimage]
 #align separation_quotient.continuous_on_lift SeparationQuotient.continuousOn_lift
 
-/- warning: separation_quotient.continuous_lift -> SeparationQuotient.continuous_lift is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] {f : X -> Y} {hf : forall (x : X) (y : X), (Inseparable.{u1} X _inst_1 x y) -> (Eq.{succ u2} Y (f x) (f y))}, Iff (Continuous.{u1, u2} (SeparationQuotient.{u1} X _inst_1) Y (SeparationQuotient.topologicalSpace.{u1} X _inst_1) _inst_2 (SeparationQuotient.lift.{u1, u2} X Y _inst_1 f hf)) (Continuous.{u1, u2} X Y _inst_1 _inst_2 f)
-but is expected to have type
-  forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} Y] {f : X -> Y} {hf : forall (x : X) (y : X), (Inseparable.{u2} X _inst_1 x y) -> (Eq.{succ u1} Y (f x) (f y))}, Iff (Continuous.{u2, u1} (SeparationQuotient.{u2} X _inst_1) Y (instTopologicalSpaceSeparationQuotient.{u2} X _inst_1) _inst_2 (SeparationQuotient.lift.{u2, u1} X Y _inst_1 f hf)) (Continuous.{u2, u1} X Y _inst_1 _inst_2 f)
-Case conversion may be inaccurate. Consider using '#align separation_quotient.continuous_lift SeparationQuotient.continuous_liftₓ'. -/
 @[simp]
 theorem continuous_lift {f : X → Y} {hf : ∀ x y, (x ~ y) → f x = f y} :
     Continuous (lift f hf) ↔ Continuous f := by
@@ -884,24 +716,12 @@ def lift₂ (f : X → Y → α) (hf : ∀ a b c d, (a ~ c) → (b ~ d) → f a
 #align separation_quotient.lift₂ SeparationQuotient.lift₂
 -/
 
-/- warning: separation_quotient.lift₂_mk -> SeparationQuotient.lift₂_mk is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] {f : X -> Y -> α} (hf : forall (a : X) (b : Y) (c : X) (d : Y), (Inseparable.{u1} X _inst_1 a c) -> (Inseparable.{u2} Y _inst_2 b d) -> (Eq.{succ u3} α (f a b) (f c d))) (x : X) (y : Y), Eq.{succ u3} α (SeparationQuotient.lift₂.{u1, u2, u3} X Y α _inst_1 _inst_2 f hf (SeparationQuotient.mk.{u1} X _inst_1 x) (SeparationQuotient.mk.{u2} Y _inst_2 y)) (f x y)
-but is expected to have type
-  forall {X : Type.{u3}} {Y : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u3} X] [_inst_2 : TopologicalSpace.{u2} Y] {f : X -> Y -> α} (hf : forall (a : X) (b : Y) (c : X) (d : Y), (Inseparable.{u3} X _inst_1 a c) -> (Inseparable.{u2} Y _inst_2 b d) -> (Eq.{succ u1} α (f a b) (f c d))) (x : X) (y : Y), Eq.{succ u1} α (SeparationQuotient.lift₂.{u3, u2, u1} X Y α _inst_1 _inst_2 f hf (SeparationQuotient.mk.{u3} X _inst_1 x) (SeparationQuotient.mk.{u2} Y _inst_2 y)) (f x y)
-Case conversion may be inaccurate. Consider using '#align separation_quotient.lift₂_mk SeparationQuotient.lift₂_mkₓ'. -/
 @[simp]
 theorem lift₂_mk {f : X → Y → α} (hf : ∀ a b c d, (a ~ c) → (b ~ d) → f a b = f c d) (x : X)
     (y : Y) : lift₂ f hf (mk x) (mk y) = f x y :=
   rfl
 #align separation_quotient.lift₂_mk SeparationQuotient.lift₂_mk
 
-/- warning: separation_quotient.tendsto_lift₂_nhds -> SeparationQuotient.tendsto_lift₂_nhds is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] {f : X -> Y -> α} {hf : forall (a : X) (b : Y) (c : X) (d : Y), (Inseparable.{u1} X _inst_1 a c) -> (Inseparable.{u2} Y _inst_2 b d) -> (Eq.{succ u3} α (f a b) (f c d))} {x : X} {y : Y} {l : Filter.{u3} α}, Iff (Filter.Tendsto.{max u1 u2, u3} (Prod.{u1, u2} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2)) α (Function.uncurry.{u1, u2, u3} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) α (SeparationQuotient.lift₂.{u1, u2, u3} X Y α _inst_1 _inst_2 f hf)) (nhds.{max u1 u2} (Prod.{u1, u2} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2)) (Prod.topologicalSpace.{u1, u2} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) (SeparationQuotient.topologicalSpace.{u1} X _inst_1) (SeparationQuotient.topologicalSpace.{u2} Y _inst_2)) (Prod.mk.{u1, u2} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) (SeparationQuotient.mk.{u1} X _inst_1 x) (SeparationQuotient.mk.{u2} Y _inst_2 y))) l) (Filter.Tendsto.{max u1 u2, u3} (Prod.{u1, u2} X Y) α (Function.uncurry.{u1, u2, u3} X Y α f) (nhds.{max u1 u2} (Prod.{u1, u2} X Y) (Prod.topologicalSpace.{u1, u2} X Y _inst_1 _inst_2) (Prod.mk.{u1, u2} X Y x y)) l)
-but is expected to have type
-  forall {X : Type.{u3}} {Y : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u3} X] [_inst_2 : TopologicalSpace.{u2} Y] {f : X -> Y -> α} {hf : forall (a : X) (b : Y) (c : X) (d : Y), (Inseparable.{u3} X _inst_1 a c) -> (Inseparable.{u2} Y _inst_2 b d) -> (Eq.{succ u1} α (f a b) (f c d))} {x : X} {y : Y} {l : Filter.{u1} α}, Iff (Filter.Tendsto.{max u2 u3, u1} (Prod.{u3, u2} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2)) α (Function.uncurry.{u3, u2, u1} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) α (SeparationQuotient.lift₂.{u3, u2, u1} X Y α _inst_1 _inst_2 f hf)) (nhds.{max u3 u2} (Prod.{u3, u2} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2)) (instTopologicalSpaceProd.{u3, u2} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) (instTopologicalSpaceSeparationQuotient.{u3} X _inst_1) (instTopologicalSpaceSeparationQuotient.{u2} Y _inst_2)) (Prod.mk.{u3, u2} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) (SeparationQuotient.mk.{u3} X _inst_1 x) (SeparationQuotient.mk.{u2} Y _inst_2 y))) l) (Filter.Tendsto.{max u2 u3, u1} (Prod.{u3, u2} X Y) α (Function.uncurry.{u3, u2, u1} X Y α f) (nhds.{max u3 u2} (Prod.{u3, u2} X Y) (instTopologicalSpaceProd.{u3, u2} X Y _inst_1 _inst_2) (Prod.mk.{u3, u2} X Y x y)) l)
-Case conversion may be inaccurate. Consider using '#align separation_quotient.tendsto_lift₂_nhds SeparationQuotient.tendsto_lift₂_nhdsₓ'. -/
 @[simp]
 theorem tendsto_lift₂_nhds {f : X → Y → α} {hf : ∀ a b c d, (a ~ c) → (b ~ d) → f a b = f c d}
     {x : X} {y : Y} {l : Filter α} :
@@ -909,12 +729,6 @@ theorem tendsto_lift₂_nhds {f : X → Y → α} {hf : ∀ a b c d, (a ~ c) →
   rw [← map_prod_map_mk_nhds, tendsto_map'_iff]; rfl
 #align separation_quotient.tendsto_lift₂_nhds SeparationQuotient.tendsto_lift₂_nhds
 
-/- warning: separation_quotient.tendsto_lift₂_nhds_within -> SeparationQuotient.tendsto_lift₂_nhdsWithin is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] {f : X -> Y -> α} {hf : forall (a : X) (b : Y) (c : X) (d : Y), (Inseparable.{u1} X _inst_1 a c) -> (Inseparable.{u2} Y _inst_2 b d) -> (Eq.{succ u3} α (f a b) (f c d))} {x : X} {y : Y} {s : Set.{max u1 u2} (Prod.{u1, u2} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2))} {l : Filter.{u3} α}, Iff (Filter.Tendsto.{max u1 u2, u3} (Prod.{u1, u2} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2)) α (Function.uncurry.{u1, u2, u3} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) α (SeparationQuotient.lift₂.{u1, u2, u3} X Y α _inst_1 _inst_2 f hf)) (nhdsWithin.{max u1 u2} (Prod.{u1, u2} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2)) (Prod.topologicalSpace.{u1, u2} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) (SeparationQuotient.topologicalSpace.{u1} X _inst_1) (SeparationQuotient.topologicalSpace.{u2} Y _inst_2)) (Prod.mk.{u1, u2} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) (SeparationQuotient.mk.{u1} X _inst_1 x) (SeparationQuotient.mk.{u2} Y _inst_2 y)) s) l) (Filter.Tendsto.{max u1 u2, u3} (Prod.{u1, u2} X Y) α (Function.uncurry.{u1, u2, u3} X Y α f) (nhdsWithin.{max u1 u2} (Prod.{u1, u2} X Y) (Prod.topologicalSpace.{u1, u2} X Y _inst_1 _inst_2) (Prod.mk.{u1, u2} X Y x y) (Set.preimage.{max u1 u2, max u1 u2} (Prod.{u1, u2} X Y) (Prod.{u1, u2} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2)) (Prod.map.{u1, u1, u2, u2} X (SeparationQuotient.{u1} X _inst_1) Y (SeparationQuotient.{u2} Y _inst_2) (SeparationQuotient.mk.{u1} X _inst_1) (SeparationQuotient.mk.{u2} Y _inst_2)) s)) l)
-but is expected to have type
-  forall {X : Type.{u3}} {Y : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u3} X] [_inst_2 : TopologicalSpace.{u2} Y] {f : X -> Y -> α} {hf : forall (a : X) (b : Y) (c : X) (d : Y), (Inseparable.{u3} X _inst_1 a c) -> (Inseparable.{u2} Y _inst_2 b d) -> (Eq.{succ u1} α (f a b) (f c d))} {x : X} {y : Y} {s : Set.{max u2 u3} (Prod.{u3, u2} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2))} {l : Filter.{u1} α}, Iff (Filter.Tendsto.{max u2 u3, u1} (Prod.{u3, u2} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2)) α (Function.uncurry.{u3, u2, u1} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) α (SeparationQuotient.lift₂.{u3, u2, u1} X Y α _inst_1 _inst_2 f hf)) (nhdsWithin.{max u3 u2} (Prod.{u3, u2} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2)) (instTopologicalSpaceProd.{u3, u2} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) (instTopologicalSpaceSeparationQuotient.{u3} X _inst_1) (instTopologicalSpaceSeparationQuotient.{u2} Y _inst_2)) (Prod.mk.{u3, u2} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) (SeparationQuotient.mk.{u3} X _inst_1 x) (SeparationQuotient.mk.{u2} Y _inst_2 y)) s) l) (Filter.Tendsto.{max u2 u3, u1} (Prod.{u3, u2} X Y) α (Function.uncurry.{u3, u2, u1} X Y α f) (nhdsWithin.{max u3 u2} (Prod.{u3, u2} X Y) (instTopologicalSpaceProd.{u3, u2} X Y _inst_1 _inst_2) (Prod.mk.{u3, u2} X Y x y) (Set.preimage.{max u3 u2, max u2 u3} (Prod.{u3, u2} X Y) (Prod.{u3, u2} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2)) (Prod.map.{u3, u3, u2, u2} X (SeparationQuotient.{u3} X _inst_1) Y (SeparationQuotient.{u2} Y _inst_2) (SeparationQuotient.mk.{u3} X _inst_1) (SeparationQuotient.mk.{u2} Y _inst_2)) s)) l)
-Case conversion may be inaccurate. Consider using '#align separation_quotient.tendsto_lift₂_nhds_within SeparationQuotient.tendsto_lift₂_nhdsWithinₓ'. -/
 @[simp]
 theorem tendsto_lift₂_nhdsWithin {f : X → Y → α} {hf : ∀ a b c d, (a ~ c) → (b ~ d) → f a b = f c d}
     {x : X} {y : Y} {s : Set (SeparationQuotient X × SeparationQuotient Y)} {l : Filter α} :
@@ -923,12 +737,6 @@ theorem tendsto_lift₂_nhdsWithin {f : X → Y → α} {hf : ∀ a b c d, (a ~
   by rw [nhdsWithin, ← map_prod_map_mk_nhds, ← Filter.push_pull, comap_principal]; rfl
 #align separation_quotient.tendsto_lift₂_nhds_within SeparationQuotient.tendsto_lift₂_nhdsWithin
 
-/- warning: separation_quotient.continuous_at_lift₂ -> SeparationQuotient.continuousAt_lift₂ is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} {Z : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] [_inst_3 : TopologicalSpace.{u3} Z] {f : X -> Y -> Z} {hf : forall (a : X) (b : Y) (c : X) (d : Y), (Inseparable.{u1} X _inst_1 a c) -> (Inseparable.{u2} Y _inst_2 b d) -> (Eq.{succ u3} Z (f a b) (f c d))} {x : X} {y : Y}, Iff (ContinuousAt.{max u1 u2, u3} (Prod.{u1, u2} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2)) Z (Prod.topologicalSpace.{u1, u2} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) (SeparationQuotient.topologicalSpace.{u1} X _inst_1) (SeparationQuotient.topologicalSpace.{u2} Y _inst_2)) _inst_3 (Function.uncurry.{u1, u2, u3} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) Z (SeparationQuotient.lift₂.{u1, u2, u3} X Y Z _inst_1 _inst_2 f hf)) (Prod.mk.{u1, u2} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) (SeparationQuotient.mk.{u1} X _inst_1 x) (SeparationQuotient.mk.{u2} Y _inst_2 y))) (ContinuousAt.{max u1 u2, u3} (Prod.{u1, u2} X Y) Z (Prod.topologicalSpace.{u1, u2} X Y _inst_1 _inst_2) _inst_3 (Function.uncurry.{u1, u2, u3} X Y Z f) (Prod.mk.{u1, u2} X Y x y))
-but is expected to have type
-  forall {X : Type.{u3}} {Y : Type.{u2}} {Z : Type.{u1}} [_inst_1 : TopologicalSpace.{u3} X] [_inst_2 : TopologicalSpace.{u2} Y] [_inst_3 : TopologicalSpace.{u1} Z] {f : X -> Y -> Z} {hf : forall (a : X) (b : Y) (c : X) (d : Y), (Inseparable.{u3} X _inst_1 a c) -> (Inseparable.{u2} Y _inst_2 b d) -> (Eq.{succ u1} Z (f a b) (f c d))} {x : X} {y : Y}, Iff (ContinuousAt.{max u2 u3, u1} (Prod.{u3, u2} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2)) Z (instTopologicalSpaceProd.{u3, u2} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) (instTopologicalSpaceSeparationQuotient.{u3} X _inst_1) (instTopologicalSpaceSeparationQuotient.{u2} Y _inst_2)) _inst_3 (Function.uncurry.{u3, u2, u1} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) Z (SeparationQuotient.lift₂.{u3, u2, u1} X Y Z _inst_1 _inst_2 f hf)) (Prod.mk.{u3, u2} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) (SeparationQuotient.mk.{u3} X _inst_1 x) (SeparationQuotient.mk.{u2} Y _inst_2 y))) (ContinuousAt.{max u2 u3, u1} (Prod.{u3, u2} X Y) Z (instTopologicalSpaceProd.{u3, u2} X Y _inst_1 _inst_2) _inst_3 (Function.uncurry.{u3, u2, u1} X Y Z f) (Prod.mk.{u3, u2} X Y x y))
-Case conversion may be inaccurate. Consider using '#align separation_quotient.continuous_at_lift₂ SeparationQuotient.continuousAt_lift₂ₓ'. -/
 @[simp]
 theorem continuousAt_lift₂ {f : X → Y → Z} {hf : ∀ a b c d, (a ~ c) → (b ~ d) → f a b = f c d}
     {x : X} {y : Y} :
@@ -936,12 +744,6 @@ theorem continuousAt_lift₂ {f : X → Y → Z} {hf : ∀ a b c d, (a ~ c) →
   tendsto_lift₂_nhds
 #align separation_quotient.continuous_at_lift₂ SeparationQuotient.continuousAt_lift₂
 
-/- warning: separation_quotient.continuous_within_at_lift₂ -> SeparationQuotient.continuousWithinAt_lift₂ is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} {Z : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] [_inst_3 : TopologicalSpace.{u3} Z] {f : X -> Y -> Z} {hf : forall (a : X) (b : Y) (c : X) (d : Y), (Inseparable.{u1} X _inst_1 a c) -> (Inseparable.{u2} Y _inst_2 b d) -> (Eq.{succ u3} Z (f a b) (f c d))} {s : Set.{max u1 u2} (Prod.{u1, u2} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2))} {x : X} {y : Y}, Iff (ContinuousWithinAt.{max u1 u2, u3} (Prod.{u1, u2} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2)) Z (Prod.topologicalSpace.{u1, u2} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) (SeparationQuotient.topologicalSpace.{u1} X _inst_1) (SeparationQuotient.topologicalSpace.{u2} Y _inst_2)) _inst_3 (Function.uncurry.{u1, u2, u3} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) Z (SeparationQuotient.lift₂.{u1, u2, u3} X Y Z _inst_1 _inst_2 f hf)) s (Prod.mk.{u1, u2} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) (SeparationQuotient.mk.{u1} X _inst_1 x) (SeparationQuotient.mk.{u2} Y _inst_2 y))) (ContinuousWithinAt.{max u1 u2, u3} (Prod.{u1, u2} X Y) Z (Prod.topologicalSpace.{u1, u2} X Y _inst_1 _inst_2) _inst_3 (Function.uncurry.{u1, u2, u3} X Y Z f) (Set.preimage.{max u1 u2, max u1 u2} (Prod.{u1, u2} X Y) (Prod.{u1, u2} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2)) (Prod.map.{u1, u1, u2, u2} X (SeparationQuotient.{u1} X _inst_1) Y (SeparationQuotient.{u2} Y _inst_2) (SeparationQuotient.mk.{u1} X _inst_1) (SeparationQuotient.mk.{u2} Y _inst_2)) s) (Prod.mk.{u1, u2} X Y x y))
-but is expected to have type
-  forall {X : Type.{u3}} {Y : Type.{u2}} {Z : Type.{u1}} [_inst_1 : TopologicalSpace.{u3} X] [_inst_2 : TopologicalSpace.{u2} Y] [_inst_3 : TopologicalSpace.{u1} Z] {f : X -> Y -> Z} {hf : forall (a : X) (b : Y) (c : X) (d : Y), (Inseparable.{u3} X _inst_1 a c) -> (Inseparable.{u2} Y _inst_2 b d) -> (Eq.{succ u1} Z (f a b) (f c d))} {s : Set.{max u2 u3} (Prod.{u3, u2} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2))} {x : X} {y : Y}, Iff (ContinuousWithinAt.{max u2 u3, u1} (Prod.{u3, u2} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2)) Z (instTopologicalSpaceProd.{u3, u2} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) (instTopologicalSpaceSeparationQuotient.{u3} X _inst_1) (instTopologicalSpaceSeparationQuotient.{u2} Y _inst_2)) _inst_3 (Function.uncurry.{u3, u2, u1} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) Z (SeparationQuotient.lift₂.{u3, u2, u1} X Y Z _inst_1 _inst_2 f hf)) s (Prod.mk.{u3, u2} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) (SeparationQuotient.mk.{u3} X _inst_1 x) (SeparationQuotient.mk.{u2} Y _inst_2 y))) (ContinuousWithinAt.{max u2 u3, u1} (Prod.{u3, u2} X Y) Z (instTopologicalSpaceProd.{u3, u2} X Y _inst_1 _inst_2) _inst_3 (Function.uncurry.{u3, u2, u1} X Y Z f) (Set.preimage.{max u3 u2, max u2 u3} (Prod.{u3, u2} X Y) (Prod.{u3, u2} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2)) (Prod.map.{u3, u3, u2, u2} X (SeparationQuotient.{u3} X _inst_1) Y (SeparationQuotient.{u2} Y _inst_2) (SeparationQuotient.mk.{u3} X _inst_1) (SeparationQuotient.mk.{u2} Y _inst_2)) s) (Prod.mk.{u3, u2} X Y x y))
-Case conversion may be inaccurate. Consider using '#align separation_quotient.continuous_within_at_lift₂ SeparationQuotient.continuousWithinAt_lift₂ₓ'. -/
 @[simp]
 theorem continuousWithinAt_lift₂ {f : X → Y → Z} {hf : ∀ a b c d, (a ~ c) → (b ~ d) → f a b = f c d}
     {s : Set (SeparationQuotient X × SeparationQuotient Y)} {x : X} {y : Y} :
@@ -950,12 +752,6 @@ theorem continuousWithinAt_lift₂ {f : X → Y → Z} {hf : ∀ a b c d, (a ~ c
   tendsto_lift₂_nhdsWithin
 #align separation_quotient.continuous_within_at_lift₂ SeparationQuotient.continuousWithinAt_lift₂
 
-/- warning: separation_quotient.continuous_on_lift₂ -> SeparationQuotient.continuousOn_lift₂ is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} {Z : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] [_inst_3 : TopologicalSpace.{u3} Z] {f : X -> Y -> Z} {hf : forall (a : X) (b : Y) (c : X) (d : Y), (Inseparable.{u1} X _inst_1 a c) -> (Inseparable.{u2} Y _inst_2 b d) -> (Eq.{succ u3} Z (f a b) (f c d))} {s : Set.{max u1 u2} (Prod.{u1, u2} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2))}, Iff (ContinuousOn.{max u1 u2, u3} (Prod.{u1, u2} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2)) Z (Prod.topologicalSpace.{u1, u2} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) (SeparationQuotient.topologicalSpace.{u1} X _inst_1) (SeparationQuotient.topologicalSpace.{u2} Y _inst_2)) _inst_3 (Function.uncurry.{u1, u2, u3} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) Z (SeparationQuotient.lift₂.{u1, u2, u3} X Y Z _inst_1 _inst_2 f hf)) s) (ContinuousOn.{max u1 u2, u3} (Prod.{u1, u2} X Y) Z (Prod.topologicalSpace.{u1, u2} X Y _inst_1 _inst_2) _inst_3 (Function.uncurry.{u1, u2, u3} X Y Z f) (Set.preimage.{max u1 u2, max u1 u2} (Prod.{u1, u2} X Y) (Prod.{u1, u2} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2)) (Prod.map.{u1, u1, u2, u2} X (SeparationQuotient.{u1} X _inst_1) Y (SeparationQuotient.{u2} Y _inst_2) (SeparationQuotient.mk.{u1} X _inst_1) (SeparationQuotient.mk.{u2} Y _inst_2)) s))
-but is expected to have type
-  forall {X : Type.{u3}} {Y : Type.{u2}} {Z : Type.{u1}} [_inst_1 : TopologicalSpace.{u3} X] [_inst_2 : TopologicalSpace.{u2} Y] [_inst_3 : TopologicalSpace.{u1} Z] {f : X -> Y -> Z} {hf : forall (a : X) (b : Y) (c : X) (d : Y), (Inseparable.{u3} X _inst_1 a c) -> (Inseparable.{u2} Y _inst_2 b d) -> (Eq.{succ u1} Z (f a b) (f c d))} {s : Set.{max u2 u3} (Prod.{u3, u2} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2))}, Iff (ContinuousOn.{max u2 u3, u1} (Prod.{u3, u2} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2)) Z (instTopologicalSpaceProd.{u3, u2} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) (instTopologicalSpaceSeparationQuotient.{u3} X _inst_1) (instTopologicalSpaceSeparationQuotient.{u2} Y _inst_2)) _inst_3 (Function.uncurry.{u3, u2, u1} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) Z (SeparationQuotient.lift₂.{u3, u2, u1} X Y Z _inst_1 _inst_2 f hf)) s) (ContinuousOn.{max u2 u3, u1} (Prod.{u3, u2} X Y) Z (instTopologicalSpaceProd.{u3, u2} X Y _inst_1 _inst_2) _inst_3 (Function.uncurry.{u3, u2, u1} X Y Z f) (Set.preimage.{max u3 u2, max u2 u3} (Prod.{u3, u2} X Y) (Prod.{u3, u2} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2)) (Prod.map.{u3, u3, u2, u2} X (SeparationQuotient.{u3} X _inst_1) Y (SeparationQuotient.{u2} Y _inst_2) (SeparationQuotient.mk.{u3} X _inst_1) (SeparationQuotient.mk.{u2} Y _inst_2)) s))
-Case conversion may be inaccurate. Consider using '#align separation_quotient.continuous_on_lift₂ SeparationQuotient.continuousOn_lift₂ₓ'. -/
 @[simp]
 theorem continuousOn_lift₂ {f : X → Y → Z} {hf : ∀ a b c d, (a ~ c) → (b ~ d) → f a b = f c d}
     {s : Set (SeparationQuotient X × SeparationQuotient Y)} :
@@ -966,12 +762,6 @@ theorem continuousOn_lift₂ {f : X → Y → Z} {hf : ∀ a b c d, (a ~ c) →
   rfl
 #align separation_quotient.continuous_on_lift₂ SeparationQuotient.continuousOn_lift₂
 
-/- warning: separation_quotient.continuous_lift₂ -> SeparationQuotient.continuous_lift₂ is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} {Z : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] [_inst_3 : TopologicalSpace.{u3} Z] {f : X -> Y -> Z} {hf : forall (a : X) (b : Y) (c : X) (d : Y), (Inseparable.{u1} X _inst_1 a c) -> (Inseparable.{u2} Y _inst_2 b d) -> (Eq.{succ u3} Z (f a b) (f c d))}, Iff (Continuous.{max u1 u2, u3} (Prod.{u1, u2} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2)) Z (Prod.topologicalSpace.{u1, u2} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) (SeparationQuotient.topologicalSpace.{u1} X _inst_1) (SeparationQuotient.topologicalSpace.{u2} Y _inst_2)) _inst_3 (Function.uncurry.{u1, u2, u3} (SeparationQuotient.{u1} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) Z (SeparationQuotient.lift₂.{u1, u2, u3} X Y Z _inst_1 _inst_2 f hf))) (Continuous.{max u1 u2, u3} (Prod.{u1, u2} X Y) Z (Prod.topologicalSpace.{u1, u2} X Y _inst_1 _inst_2) _inst_3 (Function.uncurry.{u1, u2, u3} X Y Z f))
-but is expected to have type
-  forall {X : Type.{u3}} {Y : Type.{u2}} {Z : Type.{u1}} [_inst_1 : TopologicalSpace.{u3} X] [_inst_2 : TopologicalSpace.{u2} Y] [_inst_3 : TopologicalSpace.{u1} Z] {f : X -> Y -> Z} {hf : forall (a : X) (b : Y) (c : X) (d : Y), (Inseparable.{u3} X _inst_1 a c) -> (Inseparable.{u2} Y _inst_2 b d) -> (Eq.{succ u1} Z (f a b) (f c d))}, Iff (Continuous.{max u2 u3, u1} (Prod.{u3, u2} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2)) Z (instTopologicalSpaceProd.{u3, u2} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) (instTopologicalSpaceSeparationQuotient.{u3} X _inst_1) (instTopologicalSpaceSeparationQuotient.{u2} Y _inst_2)) _inst_3 (Function.uncurry.{u3, u2, u1} (SeparationQuotient.{u3} X _inst_1) (SeparationQuotient.{u2} Y _inst_2) Z (SeparationQuotient.lift₂.{u3, u2, u1} X Y Z _inst_1 _inst_2 f hf))) (Continuous.{max u2 u3, u1} (Prod.{u3, u2} X Y) Z (instTopologicalSpaceProd.{u3, u2} X Y _inst_1 _inst_2) _inst_3 (Function.uncurry.{u3, u2, u1} X Y Z f))
-Case conversion may be inaccurate. Consider using '#align separation_quotient.continuous_lift₂ SeparationQuotient.continuous_lift₂ₓ'. -/
 @[simp]
 theorem continuous_lift₂ {f : X → Y → Z} {hf : ∀ a b c d, (a ~ c) → (b ~ d) → f a b = f c d} :
     Continuous (uncurry <| lift₂ f hf) ↔ Continuous (uncurry f) := by
Diff
@@ -317,20 +317,14 @@ theorem specializes_pi {f g : ∀ i, π i} : f ⤳ g ↔ ∀ i, f i ⤳ g i := b
 #align specializes_pi specializes_pi
 
 #print not_specializes_iff_exists_open /-
-theorem not_specializes_iff_exists_open : ¬x ⤳ y ↔ ∃ S : Set X, IsOpen S ∧ y ∈ S ∧ x ∉ S :=
-  by
-  rw [specializes_iff_forall_open]
-  push_neg
-  rfl
+theorem not_specializes_iff_exists_open : ¬x ⤳ y ↔ ∃ S : Set X, IsOpen S ∧ y ∈ S ∧ x ∉ S := by
+  rw [specializes_iff_forall_open]; push_neg; rfl
 #align not_specializes_iff_exists_open not_specializes_iff_exists_open
 -/
 
 #print not_specializes_iff_exists_closed /-
-theorem not_specializes_iff_exists_closed : ¬x ⤳ y ↔ ∃ S : Set X, IsClosed S ∧ x ∈ S ∧ y ∉ S :=
-  by
-  rw [specializes_iff_forall_closed]
-  push_neg
-  rfl
+theorem not_specializes_iff_exists_closed : ¬x ⤳ y ↔ ∃ S : Set X, IsClosed S ∧ x ∈ S ∧ y ∉ S := by
+  rw [specializes_iff_forall_closed]; push_neg; rfl
 #align not_specializes_iff_exists_closed not_specializes_iff_exists_closed
 -/
 
@@ -700,9 +694,7 @@ theorem inducing_mk : Inducing (mk : X → SeparationQuotient X) :=
 
 #print SeparationQuotient.isClosedMap_mk /-
 theorem isClosedMap_mk : IsClosedMap (mk : X → SeparationQuotient X) :=
-  inducing_mk.IsClosedMap <| by
-    rw [range_mk]
-    exact isClosed_univ
+  inducing_mk.IsClosedMap <| by rw [range_mk]; exact isClosed_univ
 #align separation_quotient.is_closed_map_mk SeparationQuotient.isClosedMap_mk
 -/
 
@@ -913,10 +905,8 @@ Case conversion may be inaccurate. Consider using '#align separation_quotient.te
 @[simp]
 theorem tendsto_lift₂_nhds {f : X → Y → α} {hf : ∀ a b c d, (a ~ c) → (b ~ d) → f a b = f c d}
     {x : X} {y : Y} {l : Filter α} :
-    Tendsto (uncurry <| lift₂ f hf) (𝓝 (mk x, mk y)) l ↔ Tendsto (uncurry f) (𝓝 (x, y)) l :=
-  by
-  rw [← map_prod_map_mk_nhds, tendsto_map'_iff]
-  rfl
+    Tendsto (uncurry <| lift₂ f hf) (𝓝 (mk x, mk y)) l ↔ Tendsto (uncurry f) (𝓝 (x, y)) l := by
+  rw [← map_prod_map_mk_nhds, tendsto_map'_iff]; rfl
 #align separation_quotient.tendsto_lift₂_nhds SeparationQuotient.tendsto_lift₂_nhds
 
 /- warning: separation_quotient.tendsto_lift₂_nhds_within -> SeparationQuotient.tendsto_lift₂_nhdsWithin is a dubious translation:
@@ -930,9 +920,7 @@ theorem tendsto_lift₂_nhdsWithin {f : X → Y → α} {hf : ∀ a b c d, (a ~
     {x : X} {y : Y} {s : Set (SeparationQuotient X × SeparationQuotient Y)} {l : Filter α} :
     Tendsto (uncurry <| lift₂ f hf) (𝓝[s] (mk x, mk y)) l ↔
       Tendsto (uncurry f) (𝓝[Prod.map mk mk ⁻¹' s] (x, y)) l :=
-  by
-  rw [nhdsWithin, ← map_prod_map_mk_nhds, ← Filter.push_pull, comap_principal]
-  rfl
+  by rw [nhdsWithin, ← map_prod_map_mk_nhds, ← Filter.push_pull, comap_principal]; rfl
 #align separation_quotient.tendsto_lift₂_nhds_within SeparationQuotient.tendsto_lift₂_nhdsWithin
 
 /- warning: separation_quotient.continuous_at_lift₂ -> SeparationQuotient.continuousAt_lift₂ is a dubious translation:
Diff
@@ -79,7 +79,7 @@ infixl:300 " ⤳ " => Specializes
 
 /- warning: specializes_tfae -> specializes_TFAE is a dubious translation:
 lean 3 declaration is
-  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] (x : X) (y : X), List.TFAE (List.cons.{0} Prop (Specializes.{u1} X _inst_1 x y) (List.cons.{0} Prop (LE.le.{u1} (Filter.{u1} X) (Preorder.toLE.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.partialOrder.{u1} X))) (Pure.pure.{u1, u1} Filter.{u1} Filter.hasPure.{u1} X x) (nhds.{u1} X _inst_1 y)) (List.cons.{0} Prop (forall (s : Set.{u1} X), (IsOpen.{u1} X _inst_1 s) -> (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) y s) -> (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) x s)) (List.cons.{0} Prop (forall (s : Set.{u1} X), (IsClosed.{u1} X _inst_1 s) -> (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) x s) -> (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) y s)) (List.cons.{0} Prop (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) y (closure.{u1} X _inst_1 (Singleton.singleton.{u1, u1} X (Set.{u1} X) (Set.hasSingleton.{u1} X) x))) (List.cons.{0} Prop (HasSubset.Subset.{u1} (Set.{u1} X) (Set.hasSubset.{u1} X) (closure.{u1} X _inst_1 (Singleton.singleton.{u1, u1} X (Set.{u1} X) (Set.hasSingleton.{u1} X) y)) (closure.{u1} X _inst_1 (Singleton.singleton.{u1, u1} X (Set.{u1} X) (Set.hasSingleton.{u1} X) x))) (List.cons.{0} Prop (ClusterPt.{u1} X _inst_1 y (Pure.pure.{u1, u1} Filter.{u1} Filter.hasPure.{u1} X x)) (List.nil.{0} Prop))))))))
+  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] (x : X) (y : X), List.TFAE (List.cons.{0} Prop (Specializes.{u1} X _inst_1 x y) (List.cons.{0} Prop (LE.le.{u1} (Filter.{u1} X) (Preorder.toHasLe.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.partialOrder.{u1} X))) (Pure.pure.{u1, u1} Filter.{u1} Filter.hasPure.{u1} X x) (nhds.{u1} X _inst_1 y)) (List.cons.{0} Prop (forall (s : Set.{u1} X), (IsOpen.{u1} X _inst_1 s) -> (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) y s) -> (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) x s)) (List.cons.{0} Prop (forall (s : Set.{u1} X), (IsClosed.{u1} X _inst_1 s) -> (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) x s) -> (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) y s)) (List.cons.{0} Prop (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) y (closure.{u1} X _inst_1 (Singleton.singleton.{u1, u1} X (Set.{u1} X) (Set.hasSingleton.{u1} X) x))) (List.cons.{0} Prop (HasSubset.Subset.{u1} (Set.{u1} X) (Set.hasSubset.{u1} X) (closure.{u1} X _inst_1 (Singleton.singleton.{u1, u1} X (Set.{u1} X) (Set.hasSingleton.{u1} X) y)) (closure.{u1} X _inst_1 (Singleton.singleton.{u1, u1} X (Set.{u1} X) (Set.hasSingleton.{u1} X) x))) (List.cons.{0} Prop (ClusterPt.{u1} X _inst_1 y (Pure.pure.{u1, u1} Filter.{u1} Filter.hasPure.{u1} X x)) (List.nil.{0} Prop))))))))
 but is expected to have type
   forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] (x : X) (y : X), List.TFAE (List.cons.{0} Prop (Specializes.{u1} X _inst_1 x y) (List.cons.{0} Prop (LE.le.{u1} (Filter.{u1} X) (Preorder.toLE.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.instPartialOrderFilter.{u1} X))) (Pure.pure.{u1, u1} Filter.{u1} Filter.instPureFilter.{u1} X x) (nhds.{u1} X _inst_1 y)) (List.cons.{0} Prop (forall (s : Set.{u1} X), (IsOpen.{u1} X _inst_1 s) -> (Membership.mem.{u1, u1} X (Set.{u1} X) (Set.instMembershipSet.{u1} X) y s) -> (Membership.mem.{u1, u1} X (Set.{u1} X) (Set.instMembershipSet.{u1} X) x s)) (List.cons.{0} Prop (forall (s : Set.{u1} X), (IsClosed.{u1} X _inst_1 s) -> (Membership.mem.{u1, u1} X (Set.{u1} X) (Set.instMembershipSet.{u1} X) x s) -> (Membership.mem.{u1, u1} X (Set.{u1} X) (Set.instMembershipSet.{u1} X) y s)) (List.cons.{0} Prop (Membership.mem.{u1, u1} X (Set.{u1} X) (Set.instMembershipSet.{u1} X) y (closure.{u1} X _inst_1 (Singleton.singleton.{u1, u1} X (Set.{u1} X) (Set.instSingletonSet.{u1} X) x))) (List.cons.{0} Prop (HasSubset.Subset.{u1} (Set.{u1} X) (Set.instHasSubsetSet.{u1} X) (closure.{u1} X _inst_1 (Singleton.singleton.{u1, u1} X (Set.{u1} X) (Set.instSingletonSet.{u1} X) y)) (closure.{u1} X _inst_1 (Singleton.singleton.{u1, u1} X (Set.{u1} X) (Set.instSingletonSet.{u1} X) x))) (List.cons.{0} Prop (ClusterPt.{u1} X _inst_1 y (Pure.pure.{u1, u1} Filter.{u1} Filter.instPureFilter.{u1} X x)) (List.nil.{0} Prop))))))))
 Case conversion may be inaccurate. Consider using '#align specializes_tfae specializes_TFAEₓ'. -/
@@ -107,7 +107,7 @@ theorem specializes_TFAE (x y : X) :
 
 /- warning: specializes_iff_nhds -> specializes_iff_nhds is a dubious translation:
 lean 3 declaration is
-  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] {x : X} {y : X}, Iff (Specializes.{u1} X _inst_1 x y) (LE.le.{u1} (Filter.{u1} X) (Preorder.toLE.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.partialOrder.{u1} X))) (nhds.{u1} X _inst_1 x) (nhds.{u1} X _inst_1 y))
+  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] {x : X} {y : X}, Iff (Specializes.{u1} X _inst_1 x y) (LE.le.{u1} (Filter.{u1} X) (Preorder.toHasLe.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.partialOrder.{u1} X))) (nhds.{u1} X _inst_1 x) (nhds.{u1} X _inst_1 y))
 but is expected to have type
   forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] {x : X} {y : X}, Iff (Specializes.{u1} X _inst_1 x y) (LE.le.{u1} (Filter.{u1} X) (Preorder.toLE.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.instPartialOrderFilter.{u1} X))) (nhds.{u1} X _inst_1 x) (nhds.{u1} X _inst_1 y))
 Case conversion may be inaccurate. Consider using '#align specializes_iff_nhds specializes_iff_nhdsₓ'. -/
@@ -117,7 +117,7 @@ theorem specializes_iff_nhds : x ⤳ y ↔ 𝓝 x ≤ 𝓝 y :=
 
 /- warning: specializes_iff_pure -> specializes_iff_pure is a dubious translation:
 lean 3 declaration is
-  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] {x : X} {y : X}, Iff (Specializes.{u1} X _inst_1 x y) (LE.le.{u1} (Filter.{u1} X) (Preorder.toLE.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.partialOrder.{u1} X))) (Pure.pure.{u1, u1} Filter.{u1} Filter.hasPure.{u1} X x) (nhds.{u1} X _inst_1 y))
+  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] {x : X} {y : X}, Iff (Specializes.{u1} X _inst_1 x y) (LE.le.{u1} (Filter.{u1} X) (Preorder.toHasLe.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.partialOrder.{u1} X))) (Pure.pure.{u1, u1} Filter.{u1} Filter.hasPure.{u1} X x) (nhds.{u1} X _inst_1 y))
 but is expected to have type
   forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] {x : X} {y : X}, Iff (Specializes.{u1} X _inst_1 x y) (LE.le.{u1} (Filter.{u1} X) (Preorder.toLE.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.instPartialOrderFilter.{u1} X))) (Pure.pure.{u1, u1} Filter.{u1} Filter.instPureFilter.{u1} X x) (nhds.{u1} X _inst_1 y))
 Case conversion may be inaccurate. Consider using '#align specializes_iff_pure specializes_iff_pureₓ'. -/
@@ -127,7 +127,7 @@ theorem specializes_iff_pure : x ⤳ y ↔ pure x ≤ 𝓝 y :=
 
 /- warning: specializes.nhds_le_nhds -> Specializes.nhds_le_nhds is a dubious translation:
 lean 3 declaration is
-  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] {x : X} {y : X}, (Specializes.{u1} X _inst_1 x y) -> (LE.le.{u1} (Filter.{u1} X) (Preorder.toLE.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.partialOrder.{u1} X))) (nhds.{u1} X _inst_1 x) (nhds.{u1} X _inst_1 y))
+  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] {x : X} {y : X}, (Specializes.{u1} X _inst_1 x y) -> (LE.le.{u1} (Filter.{u1} X) (Preorder.toHasLe.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.partialOrder.{u1} X))) (nhds.{u1} X _inst_1 x) (nhds.{u1} X _inst_1 y))
 but is expected to have type
   forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] {x : X} {y : X}, (Specializes.{u1} X _inst_1 x y) -> (LE.le.{u1} (Filter.{u1} X) (Preorder.toLE.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.instPartialOrderFilter.{u1} X))) (nhds.{u1} X _inst_1 x) (nhds.{u1} X _inst_1 y))
 Case conversion may be inaccurate. Consider using '#align specializes.nhds_le_nhds Specializes.nhds_le_nhdsₓ'. -/
@@ -136,7 +136,7 @@ alias specializes_iff_nhds ↔ Specializes.nhds_le_nhds _
 
 /- warning: specializes.pure_le_nhds -> Specializes.pure_le_nhds is a dubious translation:
 lean 3 declaration is
-  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] {x : X} {y : X}, (Specializes.{u1} X _inst_1 x y) -> (LE.le.{u1} (Filter.{u1} X) (Preorder.toLE.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.partialOrder.{u1} X))) (Pure.pure.{u1, u1} Filter.{u1} Filter.hasPure.{u1} X x) (nhds.{u1} X _inst_1 y))
+  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] {x : X} {y : X}, (Specializes.{u1} X _inst_1 x y) -> (LE.le.{u1} (Filter.{u1} X) (Preorder.toHasLe.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.partialOrder.{u1} X))) (Pure.pure.{u1, u1} Filter.{u1} Filter.hasPure.{u1} X x) (nhds.{u1} X _inst_1 y))
 but is expected to have type
   forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] {x : X} {y : X}, (Specializes.{u1} X _inst_1 x y) -> (LE.le.{u1} (Filter.{u1} X) (Preorder.toLE.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.instPartialOrderFilter.{u1} X))) (Pure.pure.{u1, u1} Filter.{u1} Filter.instPureFilter.{u1} X x) (nhds.{u1} X _inst_1 y))
 Case conversion may be inaccurate. Consider using '#align specializes.pure_le_nhds Specializes.pure_le_nhdsₓ'. -/
@@ -232,7 +232,7 @@ theorem specializes_of_eq (e : x = y) : x ⤳ y :=
 
 /- warning: specializes_of_nhds_within -> specializes_of_nhdsWithin is a dubious translation:
 lean 3 declaration is
-  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] {x : X} {y : X} {s : Set.{u1} X}, (LE.le.{u1} (Filter.{u1} X) (Preorder.toLE.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.partialOrder.{u1} X))) (nhdsWithin.{u1} X _inst_1 x s) (nhdsWithin.{u1} X _inst_1 y s)) -> (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) x s) -> (Specializes.{u1} X _inst_1 x y)
+  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] {x : X} {y : X} {s : Set.{u1} X}, (LE.le.{u1} (Filter.{u1} X) (Preorder.toHasLe.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.partialOrder.{u1} X))) (nhdsWithin.{u1} X _inst_1 x s) (nhdsWithin.{u1} X _inst_1 y s)) -> (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) x s) -> (Specializes.{u1} X _inst_1 x y)
 but is expected to have type
   forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] {x : X} {y : X} {s : Set.{u1} X}, (LE.le.{u1} (Filter.{u1} X) (Preorder.toLE.{u1} (Filter.{u1} X) (PartialOrder.toPreorder.{u1} (Filter.{u1} X) (Filter.instPartialOrderFilter.{u1} X))) (nhdsWithin.{u1} X _inst_1 x s) (nhdsWithin.{u1} X _inst_1 y s)) -> (Membership.mem.{u1, u1} X (Set.{u1} X) (Set.instMembershipSet.{u1} X) x s) -> (Specializes.{u1} X _inst_1 x y)
 Case conversion may be inaccurate. Consider using '#align specializes_of_nhds_within specializes_of_nhdsWithinₓ'. -/

Changes in mathlib4

mathlib3
mathlib4
feat(Inseparable): Prod.map mk mk is a quotient map (#12327)

This is needed to prove continuity of binary arithmetic operations on the separation quotient.

Diff
@@ -489,6 +489,16 @@ theorem map_mk_nhdsWithin_preimage (s : Set (SeparationQuotient X)) (x : X) :
   rw [nhdsWithin, ← comap_principal, Filter.push_pull, nhdsWithin, map_mk_nhds]
 #align separation_quotient.map_mk_nhds_within_preimage SeparationQuotient.map_mk_nhdsWithin_preimage
 
+/-- The map `(x, y) ↦ (mk x, mk y)` is a quotient map. -/
+theorem quotientMap_prodMap_mk : QuotientMap (Prod.map mk mk : X × Y → _) := by
+  have hsurj : Surjective (Prod.map mk mk : X × Y → _) := surjective_mk.Prod_map surjective_mk
+  refine quotientMap_iff.2 ⟨hsurj, fun s ↦ ?_⟩
+  refine ⟨fun hs ↦ hs.preimage (continuous_mk.prod_map continuous_mk), fun hs ↦ ?_⟩
+  refine isOpen_iff_mem_nhds.2 <| hsurj.forall.2 fun (x, y) h ↦ ?_
+  rw [Prod.map_mk, nhds_prod_eq, ← map_mk_nhds, ← map_mk_nhds, Filter.prod_map_map_eq',
+    ← nhds_prod_eq, Filter.mem_map]
+  exact hs.mem_nhds h
+
 /-- Lift a map `f : X → α` such that `Inseparable x y → f x = f y` to a map
 `SeparationQuotient X → α`. -/
 def lift (f : X → α) (hf : ∀ x y, (x ~ᵢ y) → f x = f y) : SeparationQuotient X → α := fun x =>
feat(Separation): define R0 spaces (#10621)

Generalize coclosedCompact_eq_cocompact and relativelyCompact.

Diff
@@ -195,6 +195,9 @@ theorem Specializes.prod {x₁ x₂ : X} {y₁ y₂ : Y} (hx : x₁ ⤳ x₂) (h
   specializes_prod.2 ⟨hx, hy⟩
 #align specializes.prod Specializes.prod
 
+theorem Specializes.fst {a b : X × Y} (h : a ⤳ b) : a.1 ⤳ b.1 := (specializes_prod.1 h).1
+theorem Specializes.snd {a b : X × Y} (h : a ⤳ b) : a.2 ⤳ b.2 := (specializes_prod.1 h).2
+
 @[simp]
 theorem specializes_pi {f g : ∀ i, π i} : f ⤳ g ↔ ∀ i, f i ⤳ g i := by
   simp only [Specializes, nhds_pi, pi_le_pi]
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
@@ -133,7 +133,7 @@ theorem specializes_iff_closure_subset : x ⤳ y ↔ closure ({y} : Set X) ⊆ c
 alias ⟨Specializes.closure_subset, _⟩ := specializes_iff_closure_subset
 #align specializes.closure_subset Specializes.closure_subset
 
--- Porting note: new lemma
+-- Porting note (#10756): new lemma
 theorem specializes_iff_clusterPt : x ⤳ y ↔ ClusterPt y (pure x) :=
   (specializes_TFAE x y).out 0 6
 
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
@@ -133,7 +133,7 @@ theorem specializes_iff_closure_subset : x ⤳ y ↔ closure ({y} : Set X) ⊆ c
 alias ⟨Specializes.closure_subset, _⟩ := specializes_iff_closure_subset
 #align specializes.closure_subset Specializes.closure_subset
 
--- porting note: new lemma
+-- Porting note: new lemma
 theorem specializes_iff_clusterPt : x ⤳ y ↔ ClusterPt y (pure x) :=
   (specializes_TFAE x y).out 0 6
 
chore(Topology): move more definitions to Defs (#10623)
Diff
@@ -11,7 +11,7 @@ import Mathlib.Topology.ContinuousOn
 /-!
 # Inseparable points in a topological space
 
-In this file we define
+In this file we prove basic properties of the following notions defined elsewhere.
 
 * `Specializes` (notation: `x ⤳ y`) : a relation saying that `𝓝 x ≤ 𝓝 y`;
 
@@ -45,25 +45,6 @@ variable {X Y Z α ι : Type*} {π : ι → Type*} [TopologicalSpace X] [Topolog
 ### `Specializes` relation
 -/
 
-/-- `x` specializes to `y` (notation: `x ⤳ y`) if either of the following equivalent properties
-hold:
-
-* `𝓝 x ≤ 𝓝 y`; this property is used as the definition;
-* `pure x ≤ 𝓝 y`; in other words, any neighbourhood of `y` contains `x`;
-* `y ∈ closure {x}`;
-* `closure {y} ⊆ closure {x}`;
-* for any closed set `s` we have `x ∈ s → y ∈ s`;
-* for any open set `s` we have `y ∈ s → x ∈ s`;
-* `y` is a cluster point of the filter `pure x = 𝓟 {x}`.
-
-This relation defines a `Preorder` on `X`. If `X` is a T₀ space, then this preorder is a partial
-order. If `X` is a T₁ space, then this partial order is trivial : `x ⤳ y ↔ x = y`. -/
-def Specializes (x y : X) : Prop := 𝓝 x ≤ 𝓝 y
-#align specializes Specializes
-
-@[inherit_doc]
-infixl:300 " ⤳ " => Specializes
-
 /-- A collection of equivalent definitions of `x ⤳ y`. The public API is given by `iff` lemmas
 below. -/
 theorem specializes_TFAE (x y : X) :
@@ -245,17 +226,6 @@ theorem IsClosed.continuous_piecewise_of_specializes [DecidablePred (· ∈ s)]
     Continuous (s.piecewise f g) := by
   simpa only [piecewise_compl] using hs.isOpen_compl.continuous_piecewise_of_specializes hg hf hspec
 
-variable (X)
-
-/-- Specialization forms a preorder on the topological space. -/
-def specializationPreorder : Preorder X :=
-  { Preorder.lift (OrderDual.toDual ∘ 𝓝) with
-    le := fun x y => y ⤳ x
-    lt := fun x y => y ⤳ x ∧ ¬x ⤳ y }
-#align specialization_preorder specializationPreorder
-
-variable {X}
-
 /-- A continuous function is monotone with respect to the specialization preorders on the domain and
 the codomain. -/
 theorem Continuous.specialization_monotone (hf : Continuous f) :
@@ -266,19 +236,6 @@ theorem Continuous.specialization_monotone (hf : Continuous f) :
 ### `Inseparable` relation
 -/
 
-/-- Two points `x` and `y` in a topological space are `Inseparable` if any of the following
-equivalent properties hold:
-
-- `𝓝 x = 𝓝 y`; we use this property as the definition;
-- for any open set `s`, `x ∈ s ↔ y ∈ s`, see `inseparable_iff_open`;
-- for any closed set `s`, `x ∈ s ↔ y ∈ s`, see `inseparable_iff_closed`;
-- `x ∈ closure {y}` and `y ∈ closure {x}`, see `inseparable_iff_mem_closure`;
-- `closure {x} = closure {y}`, see `inseparable_iff_closure_eq`.
--/
-def Inseparable (x y : X) : Prop :=
-  𝓝 x = 𝓝 y
-#align inseparable Inseparable
-
 local infixl:0 " ~ᵢ " => Inseparable
 
 theorem inseparable_def : (x ~ᵢ y) ↔ 𝓝 x = 𝓝 y :=
@@ -413,15 +370,6 @@ In this section we define the quotient of a topological space by the `Inseparabl
 
 variable (X)
 
-/-- A `setoid` version of `Inseparable`, used to define the `SeparationQuotient`. -/
-def inseparableSetoid : Setoid X := { Setoid.comap 𝓝 ⊥ with r := Inseparable }
-#align inseparable_setoid inseparableSetoid
-
-/-- The quotient of a topological space by its `inseparableSetoid`. This quotient is guaranteed to
-be a T₀ space. -/
-def SeparationQuotient := Quotient (inseparableSetoid X)
-#align separation_quotient SeparationQuotient
-
 instance : TopologicalSpace (SeparationQuotient X) := instTopologicalSpaceQuotient
 
 variable {X}
feat(Topology/Separation): define R₁ spaces, review API (#10085)

Main API changes

  • Define R1Space, a.k.a. preregular space.
  • Drop T2OrLocallyCompactRegularSpace.
  • Generalize all existing theorems about T2OrLocallyCompactRegularSpace to R1Space.
  • Drop the [T2OrLocallyCompactRegularSpace _] assumption if the space is known to be regular for other reason (e.g., because it's a topological group).

New theorems

  • Specializes.not_disjoint: if x ⤳ y, then 𝓝 x and 𝓝 y aren't disjoint;
  • specializes_iff_not_disjoint, Specializes.inseparable, disjoint_nhds_nhds_iff_not_inseparable, r1Space_iff_inseparable_or_disjoint_nhds: basic API about R1Spaces;
  • Inducing.r1Space, R1Space.induced, R1Space.sInf, R1Space.iInf, R1Space.inf, instances for Subtype _, X × Y, and ∀ i, X i: basic instances for R1Space;
  • IsCompact.mem_closure_iff_exists_inseparable, IsCompact.closure_eq_biUnion_inseparable: characterizations of the closure of a compact set in a preregular space;
  • Inseparable.mem_measurableSet_iff: topologically inseparable points can't be separated by a Borel measurable set;
  • IsCompact.closure_subset_measurableSet, IsCompact.measure_closure: in a preregular space, a measurable superset of a compact set includes its closure as well; as a corollary, closure K has the same measure as K.
  • exists_mem_nhds_isCompact_mapsTo_of_isCompact_mem_nhds: an auxiliary lemma extracted from a LocallyCompactPair instance;
  • IsCompact.isCompact_isClosed_basis_nhds: if x admits a compact neighborhood, then it admits a basis of compact closed neighborhoods; in particular, a weakly locally compact preregular space is a locally compact regular space;
  • isCompact_isClosed_basis_nhds: a version of the previous theorem for weakly locally compact spaces;
  • exists_mem_nhds_isCompact_isClosed: in a locally compact regular space, each point admits a compact closed neighborhood.

Deprecated theorems

Some theorems about topological groups are true for any (pre)regular space, so we deprecate the special cases.

  • exists_isCompact_isClosed_subset_isCompact_nhds_one: use new IsCompact.isCompact_isClosed_basis_nhds instead;
  • instLocallyCompactSpaceOfWeaklyOfGroup, instLocallyCompactSpaceOfWeaklyOfAddGroup: are now implied by WeaklyLocallyCompactSpace.locallyCompactSpace;
  • local_isCompact_isClosed_nhds_of_group, local_isCompact_isClosed_nhds_of_addGroup: use isCompact_isClosed_basis_nhds instead;
  • exists_isCompact_isClosed_nhds_one, exists_isCompact_isClosed_nhds_zero: use exists_mem_nhds_isCompact_isClosed instead.

Renamed/moved theorems

For each renamed theorem, the old theorem is redefined as a deprecated alias.

  • isOpen_setOf_disjoint_nhds_nhds: moved to Constructions;
  • isCompact_closure_of_subset_compact -> IsCompact.closure_of_subset;
  • IsCompact.measure_eq_infi_isOpen -> IsCompact.measure_eq_iInf_isOpen;
  • exists_compact_superset_iff -> exists_isCompact_superset_iff;
  • separatedNhds_of_isCompact_isCompact_isClosed -> SeparatedNhds.of_isCompact_isCompact_isClosed;
  • separatedNhds_of_isCompact_isCompact -> SeparatedNhds.of_isCompact_isCompact;
  • separatedNhds_of_finset_finset -> SeparatedNhds.of_finset_finset;
  • point_disjoint_finset_opens_of_t2 -> SeparatedNhds.of_singleton_finset;
  • separatedNhds_of_isCompact_isClosed -> SeparatedNhds.of_isCompact_isClosed;
  • exists_open_superset_and_isCompact_closure -> exists_isOpen_superset_and_isCompact_closure;
  • exists_open_with_compact_closure -> exists_isOpen_mem_isCompact_closure;
Diff
@@ -98,6 +98,9 @@ theorem specializes_iff_nhds : x ⤳ y ↔ 𝓝 x ≤ 𝓝 y :=
   Iff.rfl
 #align specializes_iff_nhds specializes_iff_nhds
 
+theorem Specializes.not_disjoint (h : x ⤳ y) : ¬Disjoint (𝓝 x) (𝓝 y) := fun hd ↦
+  absurd (hd.mono_right h) <| by simp [NeBot.ne']
+
 theorem specializes_iff_pure : x ⤳ y ↔ pure x ≤ 𝓝 y :=
   (specializes_TFAE x y).out 0 1
 #align specializes_iff_pure specializes_iff_pure
chore(Topology/Inseparable): re-use some variables (#9808)

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

Diff
@@ -552,39 +552,39 @@ theorem lift_comp_mk {f : X → α} (hf : ∀ x y, (x ~ᵢ y) → f x = f y) : l
 #align separation_quotient.lift_comp_mk SeparationQuotient.lift_comp_mk
 
 @[simp]
-theorem tendsto_lift_nhds_mk {f : X → α} {hf : ∀ x y, (x ~ᵢ y) → f x = f y} {x : X} {l : Filter α} :
+theorem tendsto_lift_nhds_mk {f : X → α} {hf : ∀ x y, (x ~ᵢ y) → f x = f y} {l : Filter α} :
     Tendsto (lift f hf) (𝓝 <| mk x) l ↔ Tendsto f (𝓝 x) l := by
   simp only [← map_mk_nhds, tendsto_map'_iff, lift_comp_mk]
 #align separation_quotient.tendsto_lift_nhds_mk SeparationQuotient.tendsto_lift_nhds_mk
 
 @[simp]
-theorem tendsto_lift_nhdsWithin_mk {f : X → α} {hf : ∀ x y, (x ~ᵢ y) → f x = f y} {x : X}
+theorem tendsto_lift_nhdsWithin_mk {f : X → α} {hf : ∀ x y, (x ~ᵢ y) → f x = f y}
     {s : Set (SeparationQuotient X)} {l : Filter α} :
     Tendsto (lift f hf) (𝓝[s] mk x) l ↔ Tendsto f (𝓝[mk ⁻¹' s] x) l := by
   simp only [← map_mk_nhdsWithin_preimage, tendsto_map'_iff, lift_comp_mk]
 #align separation_quotient.tendsto_lift_nhds_within_mk SeparationQuotient.tendsto_lift_nhdsWithin_mk
 
 @[simp]
-theorem continuousAt_lift {f : X → Y} {hf : ∀ x y, (x ~ᵢ y) → f x = f y} {x : X} :
+theorem continuousAt_lift {hf : ∀ x y, (x ~ᵢ y) → f x = f y}:
     ContinuousAt (lift f hf) (mk x) ↔ ContinuousAt f x :=
   tendsto_lift_nhds_mk
 #align separation_quotient.continuous_at_lift SeparationQuotient.continuousAt_lift
 
 @[simp]
-theorem continuousWithinAt_lift {f : X → Y} {hf : ∀ x y, (x ~ᵢ y) → f x = f y}
-    {s : Set (SeparationQuotient X)} {x : X} :
+theorem continuousWithinAt_lift {hf : ∀ x y, (x ~ᵢ y) → f x = f y}
+    {s : Set (SeparationQuotient X)}:
     ContinuousWithinAt (lift f hf) s (mk x) ↔ ContinuousWithinAt f (mk ⁻¹' s) x :=
   tendsto_lift_nhdsWithin_mk
 #align separation_quotient.continuous_within_at_lift SeparationQuotient.continuousWithinAt_lift
 
 @[simp]
-theorem continuousOn_lift {f : X → Y} {hf : ∀ x y, (x ~ᵢ y) → f x = f y}
-    {s : Set (SeparationQuotient X)} : ContinuousOn (lift f hf) s ↔ ContinuousOn f (mk ⁻¹' s) := by
+theorem continuousOn_lift {hf : ∀ x y, (x ~ᵢ y) → f x = f y} {s : Set (SeparationQuotient X)} :
+    ContinuousOn (lift f hf) s ↔ ContinuousOn f (mk ⁻¹' s) := by
   simp only [ContinuousOn, surjective_mk.forall, continuousWithinAt_lift, mem_preimage]
 #align separation_quotient.continuous_on_lift SeparationQuotient.continuousOn_lift
 
 @[simp]
-theorem continuous_lift {f : X → Y} {hf : ∀ x y, (x ~ᵢ y) → f x = f y} :
+theorem continuous_lift {hf : ∀ x y, (x ~ᵢ y) → f x = f y} :
     Continuous (lift f hf) ↔ Continuous f := by
   simp only [continuous_iff_continuousOn_univ, continuousOn_lift, preimage_univ]
 #align separation_quotient.continuous_lift SeparationQuotient.continuous_lift
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
@@ -652,5 +652,5 @@ end SeparationQuotient
 
 theorem continuous_congr_of_inseparable (h : ∀ x, f x ~ᵢ g x) :
     Continuous f ↔ Continuous g := by
-  simp_rw [SeparationQuotient.inducing_mk.continuous_iff (β := Y)]
+  simp_rw [SeparationQuotient.inducing_mk.continuous_iff (Y := Y)]
   exact continuous_congr fun x ↦ SeparationQuotient.mk_eq_mk.mpr (h x)
style: cleanup by putting by on the same line as := (#8407)

Co-authored-by: Eric Wieser <wieser.eric@gmail.com>

Diff
@@ -302,8 +302,8 @@ theorem inseparable_iff_forall_open : (x ~ᵢ y) ↔ ∀ s : Set X, IsOpen s →
 #align inseparable_iff_forall_open inseparable_iff_forall_open
 
 theorem not_inseparable_iff_exists_open :
-    ¬(x ~ᵢ y) ↔ ∃ s : Set X, IsOpen s ∧ Xor' (x ∈ s) (y ∈ s) :=
-  by simp [inseparable_iff_forall_open, ← xor_iff_not_iff]
+    ¬(x ~ᵢ y) ↔ ∃ s : Set X, IsOpen s ∧ Xor' (x ∈ s) (y ∈ s) := by
+  simp [inseparable_iff_forall_open, ← xor_iff_not_iff]
 #align not_inseparable_iff_exists_open not_inseparable_iff_exists_open
 
 theorem inseparable_iff_forall_closed : (x ~ᵢ y) ↔ ∀ s : Set X, IsClosed s → (x ∈ s ↔ y ∈ s) := by
@@ -334,8 +334,8 @@ theorem subtype_inseparable_iff {p : X → Prop} (x y : Subtype p) : (x ~ᵢ y)
 #align subtype_inseparable_iff subtype_inseparable_iff
 
 @[simp] theorem inseparable_prod {x₁ x₂ : X} {y₁ y₂ : Y} :
-    ((x₁, y₁) ~ᵢ (x₂, y₂)) ↔ (x₁ ~ᵢ x₂) ∧ (y₁ ~ᵢ y₂) :=
-  by simp only [Inseparable, nhds_prod_eq, prod_inj]
+    ((x₁, y₁) ~ᵢ (x₂, y₂)) ↔ (x₁ ~ᵢ x₂) ∧ (y₁ ~ᵢ y₂) := by
+  simp only [Inseparable, nhds_prod_eq, prod_inj]
 #align inseparable_prod inseparable_prod
 
 theorem Inseparable.prod {x₁ x₂ : X} {y₁ y₂ : Y} (hx : x₁ ~ᵢ x₂) (hy : y₁ ~ᵢ y₂) :
@@ -525,8 +525,9 @@ theorem image_mk_closure : mk '' closure s = closure (mk '' s) :=
     isClosedMap_mk.closure_image_subset _
 #align separation_quotient.image_mk_closure SeparationQuotient.image_mk_closure
 
-theorem map_prod_map_mk_nhds (x : X) (y : Y) : map (Prod.map mk mk) (𝓝 (x, y)) = 𝓝 (mk x, mk y) :=
-  by rw [nhds_prod_eq, ← prod_map_map_eq', map_mk_nhds, map_mk_nhds, nhds_prod_eq]
+theorem map_prod_map_mk_nhds (x : X) (y : Y) :
+    map (Prod.map mk mk) (𝓝 (x, y)) = 𝓝 (mk x, mk y) := by
+  rw [nhds_prod_eq, ← prod_map_map_eq', map_mk_nhds, map_mk_nhds, nhds_prod_eq]
 #align separation_quotient.map_prod_map_mk_nhds SeparationQuotient.map_prod_map_mk_nhds
 
 theorem map_mk_nhdsWithin_preimage (s : Set (SeparationQuotient X)) (x : X) :
Misc lemmas about Specializes, Inseparable and path-connectedness (#7970)

Generalizing one of the proofs introduced in #7878

Diff
@@ -18,7 +18,7 @@ In this file we define
 * `Inseparable`: a relation saying that two points in a topological space have the same
   neighbourhoods; equivalently, they can't be separated by an open set;
 
-* `InseparableSetoid X`: same relation, as a `setoid`;
+* `InseparableSetoid X`: same relation, as a `Setoid`;
 
 * `SeparationQuotient X`: the quotient of `X` by its `InseparableSetoid`.
 
@@ -39,7 +39,7 @@ topological space, separation setoid
 open Set Filter Function Topology List
 
 variable {X Y Z α ι : Type*} {π : ι → Type*} [TopologicalSpace X] [TopologicalSpace Y]
-  [TopologicalSpace Z] [∀ i, TopologicalSpace (π i)] {x y z : X} {s : Set X} {f : X → Y}
+  [TopologicalSpace Z] [∀ i, TopologicalSpace (π i)] {x y z : X} {s : Set X} {f g : X → Y}
 
 /-!
 ### `Specializes` relation
@@ -228,6 +228,20 @@ theorem not_specializes_iff_exists_closed : ¬x ⤳ y ↔ ∃ S : Set X, IsClose
   rfl
 #align not_specializes_iff_exists_closed not_specializes_iff_exists_closed
 
+theorem IsOpen.continuous_piecewise_of_specializes [DecidablePred (· ∈ s)] (hs : IsOpen s)
+    (hf : Continuous f) (hg : Continuous g) (hspec : ∀ x, f x ⤳ g x) :
+    Continuous (s.piecewise f g) := by
+  have : ∀ U, IsOpen U → g ⁻¹' U ⊆ f ⁻¹' U := fun U hU x hx ↦ (hspec x).mem_open hU hx
+  rw [continuous_def]
+  intro U hU
+  rw [piecewise_preimage, ite_eq_of_subset_right _ (this U hU)]
+  exact hU.preimage hf |>.inter hs |>.union (hU.preimage hg)
+
+theorem IsClosed.continuous_piecewise_of_specializes [DecidablePred (· ∈ s)] (hs : IsClosed s)
+    (hf : Continuous f) (hg : Continuous g) (hspec : ∀ x, g x ⤳ f x) :
+    Continuous (s.piecewise f g) := by
+  simpa only [piecewise_compl] using hs.isOpen_compl.continuous_piecewise_of_specializes hg hf hspec
+
 variable (X)
 
 /-- Specialization forms a preorder on the topological space. -/
@@ -634,3 +648,8 @@ theorem continuous_lift₂ {f : X → Y → Z} {hf : ∀ a b c d, (a ~ᵢ c) →
 #align separation_quotient.continuous_lift₂ SeparationQuotient.continuous_lift₂
 
 end SeparationQuotient
+
+theorem continuous_congr_of_inseparable (h : ∀ x, f x ~ᵢ g x) :
+    Continuous f ↔ Continuous g := by
+  simp_rw [SeparationQuotient.inducing_mk.continuous_iff (β := Y)]
+  exact continuous_congr fun x ↦ SeparationQuotient.mk_eq_mk.mpr (h x)
chore(Topology): minimize some imports (#7775)

For faster build times and clearer dependencies. No attempt at being exhaustive.

The new import in Clopen.lean had been transitively imported before.

Diff
@@ -3,7 +3,6 @@ Copyright (c) 2021 Andrew Yang. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Andrew Yang, Yury G. Kudryashov
 -/
-import Mathlib.Data.Setoid.Basic
 import Mathlib.Tactic.TFAE
 import Mathlib.Topology.ContinuousOn
 
feat: Exterior of a set (#6982)

In an Alexandrov-discrete space, every set has a smallest neighborhood. We call this neighborhood the exterior of the set. It is completely analogous to the interior, except that all inclusions are reversed.

Diff
@@ -109,8 +109,8 @@ alias ⟨Specializes.nhds_le_nhds, _⟩ := specializes_iff_nhds
 alias ⟨Specializes.pure_le_nhds, _⟩ := specializes_iff_pure
 #align specializes.pure_le_nhds Specializes.pure_le_nhds
 
-theorem sInter_nhds_sets_eq_specializes : ⋂₀ (𝓝 x).sets = {y | y ⤳ x} :=
-  Set.ext fun _ ↦ specializes_iff_pure.symm
+theorem ker_nhds_eq_specializes : (𝓝 x).ker = {y | y ⤳ x} := by
+  ext; simp [specializes_iff_pure, le_def]
 
 theorem specializes_iff_forall_open : x ⤳ y ↔ ∀ s : Set X, IsOpen s → y ∈ s → x ∈ s :=
   (specializes_TFAE x y).out 0 2
feat: patch for new alias command (#6172)
Diff
@@ -103,10 +103,10 @@ theorem specializes_iff_pure : x ⤳ y ↔ pure x ≤ 𝓝 y :=
   (specializes_TFAE x y).out 0 1
 #align specializes_iff_pure specializes_iff_pure
 
-alias specializes_iff_nhds ↔ Specializes.nhds_le_nhds _
+alias ⟨Specializes.nhds_le_nhds, _⟩ := specializes_iff_nhds
 #align specializes.nhds_le_nhds Specializes.nhds_le_nhds
 
-alias specializes_iff_pure ↔ Specializes.pure_le_nhds _
+alias ⟨Specializes.pure_le_nhds, _⟩ := specializes_iff_pure
 #align specializes.pure_le_nhds Specializes.pure_le_nhds
 
 theorem sInter_nhds_sets_eq_specializes : ⋂₀ (𝓝 x).sets = {y | y ⤳ x} :=
@@ -140,14 +140,14 @@ theorem specializes_iff_mem_closure : x ⤳ y ↔ y ∈ closure ({x} : Set X) :=
   (specializes_TFAE x y).out 0 4
 #align specializes_iff_mem_closure specializes_iff_mem_closure
 
-alias specializes_iff_mem_closure ↔ Specializes.mem_closure _
+alias ⟨Specializes.mem_closure, _⟩ := specializes_iff_mem_closure
 #align specializes.mem_closure Specializes.mem_closure
 
 theorem specializes_iff_closure_subset : x ⤳ y ↔ closure ({y} : Set X) ⊆ closure {x} :=
   (specializes_TFAE x y).out 0 5
 #align specializes_iff_closure_subset specializes_iff_closure_subset
 
-alias specializes_iff_closure_subset ↔ Specializes.closure_subset _
+alias ⟨Specializes.closure_subset, _⟩ := specializes_iff_closure_subset
 #align specializes.closure_subset Specializes.closure_subset
 
 -- porting note: new lemma
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
@@ -39,7 +39,7 @@ topological space, separation setoid
 
 open Set Filter Function Topology List
 
-variable {X Y Z α ι : Type _} {π : ι → Type _} [TopologicalSpace X] [TopologicalSpace Y]
+variable {X Y Z α ι : Type*} {π : ι → Type*} [TopologicalSpace X] [TopologicalSpace Y]
   [TopologicalSpace Z] [∀ i, TopologicalSpace (π i)] {x y z : X} {s : Set X} {f : X → Y}
 
 /-!
feat: Summable.countable_support (#6473)

A step towards showing that Pmfs have countable support.

Thanks Eric Rodriguez and Kevin Buzzard for helping on zulip.

Co-authored-by: Yury G. Kudryashov <urkud@urkud.name>

Diff
@@ -109,6 +109,9 @@ alias specializes_iff_nhds ↔ Specializes.nhds_le_nhds _
 alias specializes_iff_pure ↔ Specializes.pure_le_nhds _
 #align specializes.pure_le_nhds Specializes.pure_le_nhds
 
+theorem sInter_nhds_sets_eq_specializes : ⋂₀ (𝓝 x).sets = {y | y ⤳ x} :=
+  Set.ext fun _ ↦ specializes_iff_pure.symm
+
 theorem specializes_iff_forall_open : x ⤳ y ↔ ∀ s : Set X, IsOpen s → y ∈ s → x ∈ s :=
   (specializes_TFAE x y).out 0 2
 #align specializes_iff_forall_open specializes_iff_forall_open
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,16 +2,13 @@
 Copyright (c) 2021 Andrew Yang. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Andrew Yang, Yury G. Kudryashov
-
-! This file was ported from Lean 3 source module topology.inseparable
-! leanprover-community/mathlib commit bcfa726826abd57587355b4b5b7e78ad6527b7e4
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Data.Setoid.Basic
 import Mathlib.Tactic.TFAE
 import Mathlib.Topology.ContinuousOn
 
+#align_import topology.inseparable from "leanprover-community/mathlib"@"bcfa726826abd57587355b4b5b7e78ad6527b7e4"
+
 /-!
 # Inseparable points in a topological space
 
fix: change compl precedence (#5586)

Co-authored-by: Yury G. Kudryashov <urkud@urkud.name>

Diff
@@ -83,7 +83,7 @@ theorem specializes_TFAE (x y : X) :
   tfae_have 2 → 3
   · exact fun h s hso hy => h (hso.mem_nhds hy)
   tfae_have 3 → 4
-  · exact fun h s hsc hx => of_not_not fun hy => h (sᶜ) hsc.isOpen_compl hy hx
+  · exact fun h s hsc hx => of_not_not fun hy => h sᶜ hsc.isOpen_compl hy hx
   tfae_have 4 → 5
   · exact fun h => h _ isClosed_closure (subset_closure <| mem_singleton _)
   tfae_have 6 ↔ 5
chore: restore tfae proofs (#4493)
Diff
@@ -8,9 +8,9 @@ Authors: Andrew Yang, Yury G. Kudryashov
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
-import Mathlib.Topology.ContinuousOn
 import Mathlib.Data.Setoid.Basic
-import Mathlib.Data.List.TFAE
+import Mathlib.Tactic.TFAE
+import Mathlib.Topology.ContinuousOn
 
 /-!
 # Inseparable points in a topological space
@@ -70,7 +70,7 @@ infixl:300 " ⤳ " => Specializes
 
 /-- A collection of equivalent definitions of `x ⤳ y`. The public API is given by `iff` lemmas
 below. -/
-theorem specializes_TFAE ( x y : X ) :
+theorem specializes_TFAE (x y : X) :
     TFAE [x ⤳ y,
       pure x ≤ 𝓝 y,
       ∀ s : Set X , IsOpen s → y ∈ s → x ∈ s,
@@ -78,30 +78,24 @@ theorem specializes_TFAE ( x y : X ) :
       y ∈ closure ({ x } : Set X),
       closure ({ y } : Set X) ⊆ closure { x },
       ClusterPt y (pure x)] := by
-  -- todo: rewrite using `tfae_have` etc
-  apply_rules [tfae_of_cycle, Chain.cons, Chain.nil] <;> dsimp only [ilast']
-  · exact le_trans (pure_le_nhds _)
+  tfae_have 1 → 2
+  · exact (pure_le_nhds _).trans
+  tfae_have 2 → 3
   · exact fun h s hso hy => h (hso.mem_nhds hy)
+  tfae_have 3 → 4
   · exact fun h s hsc hx => of_not_not fun hy => h (sᶜ) hsc.isOpen_compl hy hx
-  · exact fun h => h _ isClosed_closure (subset_closure rfl)
-  · exact fun h => closure_minimal (singleton_subset_iff.2 h) isClosed_closure
-  · rw [← principal_singleton, ← mem_closure_iff_clusterPt]
-    exact fun h => h (subset_closure rfl)
-  · refine fun h => (nhds_basis_opens _).ge_iff.2 fun U ⟨hyU, hUo⟩ => ?_
-    rw [← Ultrafilter.coe_pure, Ultrafilter.clusterPt_iff] at h
-    exact hUo.mem_nhds (h <| hUo.mem_nhds hyU)
-  -- tfae_have 1 → 2; exact pure_le_nhds _ . trans
-  -- tfae_have 2 → 3; exact fun h s hso hy => h hso . mem_nhds hy
-  -- tfae_have 3 → 4; exact fun h s hsc hx => of_not_not fun hy => h s ᶜ hsc . is_open_compl hy hx
-  -- tfae_have 4 → 5; exact fun h => h _ isClosed_closure subset_closure <| mem_singleton _
-  -- tfae_have 6 ↔ 5; exact is_closed_closure.closure_subset_iff.trans singleton_subset_iff
-  -- tfae_have 5 ↔ 7; rw [ mem_closure_iff_clusterPt, principal_singleton ]
-  -- tfae_have 5 → 1
-  -- · refine' fun h => nhds_basis_opens _ . ge_iff . 2 _
-  --   rintro s ⟨ hy , ho ⟩
-  --   rcases mem_closure_iff . 1 h s ho hy with ⟨ z , hxs , rfl : z = x ⟩
-  --   exact ho.mem_nhds hxs
-  -- tfae_finish
+  tfae_have 4 → 5
+  · exact fun h => h _ isClosed_closure (subset_closure <| mem_singleton _)
+  tfae_have 6 ↔ 5
+  · exact isClosed_closure.closure_subset_iff.trans singleton_subset_iff
+  tfae_have 5 ↔ 7
+  · rw [mem_closure_iff_clusterPt, principal_singleton]
+  tfae_have 5 → 1
+  · refine' fun h => (nhds_basis_opens _).ge_iff.2 _
+    rintro s ⟨hy, ho⟩
+    rcases mem_closure_iff.1 h s ho hy with ⟨z, hxs, rfl : z = x⟩
+    exact ho.mem_nhds hxs
+  tfae_finish
 #align specializes_tfae specializes_TFAE
 
 theorem specializes_iff_nhds : x ⤳ y ↔ 𝓝 x ≤ 𝓝 y :=
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
@@ -60,7 +60,7 @@ hold:
 * for any open set `s` we have `y ∈ s → x ∈ s`;
 * `y` is a cluster point of the filter `pure x = 𝓟 {x}`.
 
-This relation defines a `preorder` on `X`. If `X` is a T₀ space, then this preorder is a partial
+This relation defines a `Preorder` on `X`. If `X` is a T₀ space, then this preorder is a partial
 order. If `X` is a T₁ space, then this partial order is trivial : `x ⤳ y ↔ x = y`. -/
 def Specializes (x y : X) : Prop := 𝓝 x ≤ 𝓝 y
 #align specializes Specializes
feat: port Topology.Separation (#1940)

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

Diff
@@ -156,6 +156,10 @@ theorem specializes_iff_closure_subset : x ⤳ y ↔ closure ({y} : Set X) ⊆ c
 alias specializes_iff_closure_subset ↔ Specializes.closure_subset _
 #align specializes.closure_subset Specializes.closure_subset
 
+-- porting note: new lemma
+theorem specializes_iff_clusterPt : x ⤳ y ↔ ClusterPt y (pure x) :=
+  (specializes_TFAE x y).out 0 6
+
 theorem Filter.HasBasis.specializes_iff {ι} {p : ι → Prop} {s : ι → Set X}
     (h : (𝓝 y).HasBasis p s) : x ⤳ y ↔ ∀ i, p i → x ∈ s i :=
   specializes_iff_pure.trans h.ge_iff
feat: port Topology.Inseparable (#1908)

Dependencies 7 + 288

289 files ported (97.6%)
125138 lines ported (97.6%)
Show graph

The unported dependencies are