topology.nhds_set ⟷ Mathlib.Topology.NhdsSet

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)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(last sync)

chore(*): rename locale topological_space to topology (#18293)
Diff
@@ -24,7 +24,7 @@ Furthermore, we have the following results:
 -/
 
 open set filter
-open_locale topological_space filter
+open_locale topology filter
 
 variables {Ξ± Ξ² : Type*} [topological_space Ξ±] [topological_space Ξ²]
   {s t s₁ sβ‚‚ t₁ tβ‚‚ : set Ξ±} {x : Ξ±}
@@ -33,7 +33,7 @@ variables {Ξ± Ξ² : Type*} [topological_space Ξ±] [topological_space Ξ²]
 def nhds_set (s : set Ξ±) : filter Ξ± :=
 Sup (nhds '' s)
 
-localized "notation (name := nhds_set) `𝓝˒` := nhds_set" in topological_space
+localized "notation (name := nhds_set) `𝓝˒` := nhds_set" in topology
 
 lemma nhds_set_diagonal (Ξ±) [topological_space (Ξ± Γ— Ξ±)] : 𝓝˒ (diagonal Ξ±) = ⨆ x, 𝓝 (x, x) :=
 by { rw [nhds_set, ← range_diag, ← range_comp], refl }

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(first ported)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -77,7 +77,7 @@ theorem mem_nhdsSet_iff_exists : s ∈ 𝓝˒ t ↔ βˆƒ U : Set Ξ±, IsOpen U ∧
 
 #print hasBasis_nhdsSet /-
 theorem hasBasis_nhdsSet (s : Set Ξ±) : (𝓝˒ s).HasBasis (fun U => IsOpen U ∧ s βŠ† U) fun U => U :=
-  ⟨fun t => by simp [mem_nhdsSet_iff_exists, and_assoc']⟩
+  ⟨fun t => by simp [mem_nhdsSet_iff_exists, and_assoc]⟩
 #align has_basis_nhds_set hasBasis_nhdsSet
 -/
 
Diff
@@ -3,7 +3,7 @@ Copyright (c) 2022 Floris van Doorn. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Floris van Doorn, Patrick Massot
 -/
-import Topology.Basic
+import Topology.Defs.Basic
 
 #align_import topology.nhds_set from "leanprover-community/mathlib"@"fac369018417f980cec5fcdafc766a69f88d8cfe"
 
Diff
@@ -3,7 +3,7 @@ Copyright (c) 2022 Floris van Doorn. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Floris van Doorn, Patrick Massot
 -/
-import Mathbin.Topology.Basic
+import Topology.Basic
 
 #align_import topology.nhds_set from "leanprover-community/mathlib"@"fac369018417f980cec5fcdafc766a69f88d8cfe"
 
Diff
@@ -101,7 +101,7 @@ theorem nhdsSet_eq_principal_iff : 𝓝˒ s = π“Ÿ s ↔ IsOpen s := by
 #align nhds_set_eq_principal_iff nhdsSet_eq_principal_iff
 -/
 
-alias nhdsSet_eq_principal_iff ↔ _ IsOpen.nhdsSet_eq
+alias ⟨_, IsOpen.nhdsSet_eq⟩ := nhdsSet_eq_principal_iff
 #align is_open.nhds_set_eq IsOpen.nhdsSet_eq
 
 #print nhdsSet_interior /-
Diff
@@ -2,14 +2,11 @@
 Copyright (c) 2022 Floris van Doorn. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Floris van Doorn, Patrick Massot
-
-! This file was ported from Lean 3 source module topology.nhds_set
-! leanprover-community/mathlib commit fac369018417f980cec5fcdafc766a69f88d8cfe
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Topology.Basic
 
+#align_import topology.nhds_set from "leanprover-community/mathlib"@"fac369018417f980cec5fcdafc766a69f88d8cfe"
+
 /-!
 # Neighborhoods of a set
 
Diff
@@ -46,12 +46,13 @@ def nhdsSet (s : Set Ξ±) : Filter Ξ± :=
 #align nhds_set nhdsSet
 -/
 
--- mathport name: nhds_set
 scoped[Topology] notation "𝓝˒" => nhdsSet
 
+#print nhdsSet_diagonal /-
 theorem nhdsSet_diagonal (Ξ±) [TopologicalSpace (Ξ± Γ— Ξ±)] : 𝓝˒ (diagonal Ξ±) = ⨆ x, 𝓝 (x, x) := by
   rw [nhdsSet, ← range_diag, ← range_comp]; rfl
 #align nhds_set_diagonal nhdsSet_diagonal
+-/
 
 #print mem_nhdsSet_iff_forall /-
 theorem mem_nhdsSet_iff_forall : s ∈ 𝓝˒ t ↔ βˆ€ x : Ξ±, x ∈ t β†’ s ∈ 𝓝 x := by
@@ -89,9 +90,11 @@ theorem IsOpen.mem_nhdsSet (hU : IsOpen s) : s ∈ 𝓝˒ t ↔ t βŠ† s := by
 #align is_open.mem_nhds_set IsOpen.mem_nhdsSet
 -/
 
+#print principal_le_nhdsSet /-
 theorem principal_le_nhdsSet : π“Ÿ s ≀ 𝓝˒ s := fun s hs =>
   (subset_interior_iff_mem_nhdsSet.mpr hs).trans interior_subset
 #align principal_le_nhds_set principal_le_nhdsSet
+-/
 
 #print nhdsSet_eq_principal_iff /-
 @[simp]
@@ -125,39 +128,53 @@ theorem mem_nhdsSet_interior : s ∈ 𝓝˒ (interior s) :=
 #align mem_nhds_set_interior mem_nhdsSet_interior
 -/
 
+#print nhdsSet_empty /-
 @[simp]
 theorem nhdsSet_empty : 𝓝˒ (βˆ… : Set Ξ±) = βŠ₯ := by rw [is_open_empty.nhds_set_eq, principal_empty]
 #align nhds_set_empty nhdsSet_empty
+-/
 
 #print mem_nhdsSet_empty /-
 theorem mem_nhdsSet_empty : s ∈ 𝓝˒ (βˆ… : Set Ξ±) := by simp
 #align mem_nhds_set_empty mem_nhdsSet_empty
 -/
 
+#print nhdsSet_univ /-
 @[simp]
 theorem nhdsSet_univ : 𝓝˒ (univ : Set Ξ±) = ⊀ := by rw [is_open_univ.nhds_set_eq, principal_univ]
 #align nhds_set_univ nhdsSet_univ
+-/
 
+#print nhdsSet_mono /-
 @[mono]
 theorem nhdsSet_mono (h : s βŠ† t) : 𝓝˒ s ≀ 𝓝˒ t :=
   sSup_le_sSup <| image_subset _ h
 #align nhds_set_mono nhdsSet_mono
+-/
 
+#print monotone_nhdsSet /-
 theorem monotone_nhdsSet : Monotone (𝓝˒ : Set Ξ± β†’ Filter Ξ±) := fun s t => nhdsSet_mono
 #align monotone_nhds_set monotone_nhdsSet
+-/
 
+#print nhds_le_nhdsSet /-
 theorem nhds_le_nhdsSet (h : x ∈ s) : 𝓝 x ≀ 𝓝˒ s :=
   le_sSup <| mem_image_of_mem _ h
 #align nhds_le_nhds_set nhds_le_nhdsSet
+-/
 
+#print nhdsSet_union /-
 @[simp]
 theorem nhdsSet_union (s t : Set Ξ±) : 𝓝˒ (s βˆͺ t) = 𝓝˒ s βŠ” 𝓝˒ t := by
   simp only [nhdsSet, image_union, sSup_union]
 #align nhds_set_union nhdsSet_union
+-/
 
+#print union_mem_nhdsSet /-
 theorem union_mem_nhdsSet (h₁ : s₁ ∈ 𝓝˒ t₁) (hβ‚‚ : sβ‚‚ ∈ 𝓝˒ tβ‚‚) : s₁ βˆͺ sβ‚‚ ∈ 𝓝˒ (t₁ βˆͺ tβ‚‚) := by
   rw [nhdsSet_union]; exact union_mem_sup h₁ hβ‚‚
 #align union_mem_nhds_set union_mem_nhdsSet
+-/
 
 #print Continuous.tendsto_nhdsSet /-
 /-- Preimage of a set neighborhood of `t` under a continuous map `f` is a set neighborhood of `s`
Diff
@@ -35,7 +35,7 @@ Furthermore, we have the following results:
 
 open Set Filter
 
-open Topology Filter
+open scoped Topology Filter
 
 variable {Ξ± Ξ² : Type _} [TopologicalSpace Ξ±] [TopologicalSpace Ξ²] {s t s₁ sβ‚‚ t₁ tβ‚‚ : Set Ξ±} {x : Ξ±}
 
Diff
@@ -49,12 +49,6 @@ def nhdsSet (s : Set Ξ±) : Filter Ξ± :=
 -- mathport name: nhds_set
 scoped[Topology] notation "𝓝˒" => nhdsSet
 
-/- warning: nhds_set_diagonal -> nhdsSet_diagonal is a dubious translation:
-lean 3 declaration is
-  forall (Ξ± : Type.{u1}) [_inst_3 : TopologicalSpace.{u1} (Prod.{u1, u1} Ξ± Ξ±)], Eq.{succ u1} (Filter.{u1} (Prod.{u1, u1} Ξ± Ξ±)) (nhdsSet.{u1} (Prod.{u1, u1} Ξ± Ξ±) _inst_3 (Set.diagonal.{u1} Ξ±)) (iSup.{u1, succ u1} (Filter.{u1} (Prod.{u1, u1} Ξ± Ξ±)) (ConditionallyCompleteLattice.toHasSup.{u1} (Filter.{u1} (Prod.{u1, u1} Ξ± Ξ±)) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} (Prod.{u1, u1} Ξ± Ξ±)) (Filter.completeLattice.{u1} (Prod.{u1, u1} Ξ± Ξ±)))) Ξ± (fun (x : Ξ±) => nhds.{u1} (Prod.{u1, u1} Ξ± Ξ±) _inst_3 (Prod.mk.{u1, u1} Ξ± Ξ± x x)))
-but is expected to have type
-  forall (Ξ± : Type.{u1}) [_inst_3 : TopologicalSpace.{u1} (Prod.{u1, u1} Ξ± Ξ±)], Eq.{succ u1} (Filter.{u1} (Prod.{u1, u1} Ξ± Ξ±)) (nhdsSet.{u1} (Prod.{u1, u1} Ξ± Ξ±) _inst_3 (Set.diagonal.{u1} Ξ±)) (iSup.{u1, succ u1} (Filter.{u1} (Prod.{u1, u1} Ξ± Ξ±)) (ConditionallyCompleteLattice.toSupSet.{u1} (Filter.{u1} (Prod.{u1, u1} Ξ± Ξ±)) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} (Prod.{u1, u1} Ξ± Ξ±)) (Filter.instCompleteLatticeFilter.{u1} (Prod.{u1, u1} Ξ± Ξ±)))) Ξ± (fun (x : Ξ±) => nhds.{u1} (Prod.{u1, u1} Ξ± Ξ±) _inst_3 (Prod.mk.{u1, u1} Ξ± Ξ± x x)))
-Case conversion may be inaccurate. Consider using '#align nhds_set_diagonal nhdsSet_diagonalβ‚“'. -/
 theorem nhdsSet_diagonal (Ξ±) [TopologicalSpace (Ξ± Γ— Ξ±)] : 𝓝˒ (diagonal Ξ±) = ⨆ x, 𝓝 (x, x) := by
   rw [nhdsSet, ← range_diag, ← range_comp]; rfl
 #align nhds_set_diagonal nhdsSet_diagonal
@@ -95,12 +89,6 @@ theorem IsOpen.mem_nhdsSet (hU : IsOpen s) : s ∈ 𝓝˒ t ↔ t βŠ† s := by
 #align is_open.mem_nhds_set IsOpen.mem_nhdsSet
 -/
 
-/- warning: principal_le_nhds_set -> principal_le_nhdsSet is a dubious translation:
-lean 3 declaration is
-  forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {s : Set.{u1} Ξ±}, LE.le.{u1} (Filter.{u1} Ξ±) (Preorder.toHasLe.{u1} (Filter.{u1} Ξ±) (PartialOrder.toPreorder.{u1} (Filter.{u1} Ξ±) (Filter.partialOrder.{u1} Ξ±))) (Filter.principal.{u1} Ξ± s) (nhdsSet.{u1} Ξ± _inst_1 s)
-but is expected to have type
-  forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {s : Set.{u1} Ξ±}, LE.le.{u1} (Filter.{u1} Ξ±) (Preorder.toLE.{u1} (Filter.{u1} Ξ±) (PartialOrder.toPreorder.{u1} (Filter.{u1} Ξ±) (Filter.instPartialOrderFilter.{u1} Ξ±))) (Filter.principal.{u1} Ξ± s) (nhdsSet.{u1} Ξ± _inst_1 s)
-Case conversion may be inaccurate. Consider using '#align principal_le_nhds_set principal_le_nhdsSetβ‚“'. -/
 theorem principal_le_nhdsSet : π“Ÿ s ≀ 𝓝˒ s := fun s hs =>
   (subset_interior_iff_mem_nhdsSet.mpr hs).trans interior_subset
 #align principal_le_nhds_set principal_le_nhdsSet
@@ -137,12 +125,6 @@ theorem mem_nhdsSet_interior : s ∈ 𝓝˒ (interior s) :=
 #align mem_nhds_set_interior mem_nhdsSet_interior
 -/
 
-/- warning: nhds_set_empty -> nhdsSet_empty is a dubious translation:
-lean 3 declaration is
-  forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±], Eq.{succ u1} (Filter.{u1} Ξ±) (nhdsSet.{u1} Ξ± _inst_1 (EmptyCollection.emptyCollection.{u1} (Set.{u1} Ξ±) (Set.hasEmptyc.{u1} Ξ±))) (Bot.bot.{u1} (Filter.{u1} Ξ±) (CompleteLattice.toHasBot.{u1} (Filter.{u1} Ξ±) (Filter.completeLattice.{u1} Ξ±)))
-but is expected to have type
-  forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±], Eq.{succ u1} (Filter.{u1} Ξ±) (nhdsSet.{u1} Ξ± _inst_1 (EmptyCollection.emptyCollection.{u1} (Set.{u1} Ξ±) (Set.instEmptyCollectionSet.{u1} Ξ±))) (Bot.bot.{u1} (Filter.{u1} Ξ±) (CompleteLattice.toBot.{u1} (Filter.{u1} Ξ±) (Filter.instCompleteLatticeFilter.{u1} Ξ±)))
-Case conversion may be inaccurate. Consider using '#align nhds_set_empty nhdsSet_emptyβ‚“'. -/
 @[simp]
 theorem nhdsSet_empty : 𝓝˒ (βˆ… : Set Ξ±) = βŠ₯ := by rw [is_open_empty.nhds_set_eq, principal_empty]
 #align nhds_set_empty nhdsSet_empty
@@ -152,63 +134,27 @@ theorem mem_nhdsSet_empty : s ∈ 𝓝˒ (βˆ… : Set Ξ±) := by simp
 #align mem_nhds_set_empty mem_nhdsSet_empty
 -/
 
-/- warning: nhds_set_univ -> nhdsSet_univ is a dubious translation:
-lean 3 declaration is
-  forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±], Eq.{succ u1} (Filter.{u1} Ξ±) (nhdsSet.{u1} Ξ± _inst_1 (Set.univ.{u1} Ξ±)) (Top.top.{u1} (Filter.{u1} Ξ±) (Filter.hasTop.{u1} Ξ±))
-but is expected to have type
-  forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±], Eq.{succ u1} (Filter.{u1} Ξ±) (nhdsSet.{u1} Ξ± _inst_1 (Set.univ.{u1} Ξ±)) (Top.top.{u1} (Filter.{u1} Ξ±) (Filter.instTopFilter.{u1} Ξ±))
-Case conversion may be inaccurate. Consider using '#align nhds_set_univ nhdsSet_univβ‚“'. -/
 @[simp]
 theorem nhdsSet_univ : 𝓝˒ (univ : Set Ξ±) = ⊀ := by rw [is_open_univ.nhds_set_eq, principal_univ]
 #align nhds_set_univ nhdsSet_univ
 
-/- warning: nhds_set_mono -> nhdsSet_mono is a dubious translation:
-lean 3 declaration is
-  forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {s : Set.{u1} Ξ±} {t : Set.{u1} Ξ±}, (HasSubset.Subset.{u1} (Set.{u1} Ξ±) (Set.hasSubset.{u1} Ξ±) s t) -> (LE.le.{u1} (Filter.{u1} Ξ±) (Preorder.toHasLe.{u1} (Filter.{u1} Ξ±) (PartialOrder.toPreorder.{u1} (Filter.{u1} Ξ±) (Filter.partialOrder.{u1} Ξ±))) (nhdsSet.{u1} Ξ± _inst_1 s) (nhdsSet.{u1} Ξ± _inst_1 t))
-but is expected to have type
-  forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {s : Set.{u1} Ξ±} {t : Set.{u1} Ξ±}, (HasSubset.Subset.{u1} (Set.{u1} Ξ±) (Set.instHasSubsetSet.{u1} Ξ±) s t) -> (LE.le.{u1} (Filter.{u1} Ξ±) (Preorder.toLE.{u1} (Filter.{u1} Ξ±) (PartialOrder.toPreorder.{u1} (Filter.{u1} Ξ±) (Filter.instPartialOrderFilter.{u1} Ξ±))) (nhdsSet.{u1} Ξ± _inst_1 s) (nhdsSet.{u1} Ξ± _inst_1 t))
-Case conversion may be inaccurate. Consider using '#align nhds_set_mono nhdsSet_monoβ‚“'. -/
 @[mono]
 theorem nhdsSet_mono (h : s βŠ† t) : 𝓝˒ s ≀ 𝓝˒ t :=
   sSup_le_sSup <| image_subset _ h
 #align nhds_set_mono nhdsSet_mono
 
-/- warning: monotone_nhds_set -> monotone_nhdsSet is a dubious translation:
-lean 3 declaration is
-  forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±], Monotone.{u1, u1} (Set.{u1} Ξ±) (Filter.{u1} Ξ±) (PartialOrder.toPreorder.{u1} (Set.{u1} Ξ±) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} Ξ±) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} Ξ±) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} Ξ±) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} Ξ±) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} Ξ±) (Set.completeBooleanAlgebra.{u1} Ξ±))))))) (PartialOrder.toPreorder.{u1} (Filter.{u1} Ξ±) (Filter.partialOrder.{u1} Ξ±)) (nhdsSet.{u1} Ξ± _inst_1)
-but is expected to have type
-  forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±], Monotone.{u1, u1} (Set.{u1} Ξ±) (Filter.{u1} Ξ±) (PartialOrder.toPreorder.{u1} (Set.{u1} Ξ±) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} Ξ±) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} Ξ±) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} Ξ±) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} Ξ±) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} Ξ±) (Set.instCompleteBooleanAlgebraSet.{u1} Ξ±))))))) (PartialOrder.toPreorder.{u1} (Filter.{u1} Ξ±) (Filter.instPartialOrderFilter.{u1} Ξ±)) (nhdsSet.{u1} Ξ± _inst_1)
-Case conversion may be inaccurate. Consider using '#align monotone_nhds_set monotone_nhdsSetβ‚“'. -/
 theorem monotone_nhdsSet : Monotone (𝓝˒ : Set Ξ± β†’ Filter Ξ±) := fun s t => nhdsSet_mono
 #align monotone_nhds_set monotone_nhdsSet
 
-/- warning: nhds_le_nhds_set -> nhds_le_nhdsSet is a dubious translation:
-lean 3 declaration is
-  forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {s : Set.{u1} Ξ±} {x : Ξ±}, (Membership.Mem.{u1, u1} Ξ± (Set.{u1} Ξ±) (Set.hasMem.{u1} Ξ±) x s) -> (LE.le.{u1} (Filter.{u1} Ξ±) (Preorder.toHasLe.{u1} (Filter.{u1} Ξ±) (PartialOrder.toPreorder.{u1} (Filter.{u1} Ξ±) (Filter.partialOrder.{u1} Ξ±))) (nhds.{u1} Ξ± _inst_1 x) (nhdsSet.{u1} Ξ± _inst_1 s))
-but is expected to have type
-  forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {s : Set.{u1} Ξ±} {x : Ξ±}, (Membership.mem.{u1, u1} Ξ± (Set.{u1} Ξ±) (Set.instMembershipSet.{u1} Ξ±) x s) -> (LE.le.{u1} (Filter.{u1} Ξ±) (Preorder.toLE.{u1} (Filter.{u1} Ξ±) (PartialOrder.toPreorder.{u1} (Filter.{u1} Ξ±) (Filter.instPartialOrderFilter.{u1} Ξ±))) (nhds.{u1} Ξ± _inst_1 x) (nhdsSet.{u1} Ξ± _inst_1 s))
-Case conversion may be inaccurate. Consider using '#align nhds_le_nhds_set nhds_le_nhdsSetβ‚“'. -/
 theorem nhds_le_nhdsSet (h : x ∈ s) : 𝓝 x ≀ 𝓝˒ s :=
   le_sSup <| mem_image_of_mem _ h
 #align nhds_le_nhds_set nhds_le_nhdsSet
 
-/- warning: nhds_set_union -> nhdsSet_union is a dubious translation:
-lean 3 declaration is
-  forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] (s : Set.{u1} Ξ±) (t : Set.{u1} Ξ±), Eq.{succ u1} (Filter.{u1} Ξ±) (nhdsSet.{u1} Ξ± _inst_1 (Union.union.{u1} (Set.{u1} Ξ±) (Set.hasUnion.{u1} Ξ±) s t)) (Sup.sup.{u1} (Filter.{u1} Ξ±) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} Ξ±) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} Ξ±) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} Ξ±) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} Ξ±) (Filter.completeLattice.{u1} Ξ±))))) (nhdsSet.{u1} Ξ± _inst_1 s) (nhdsSet.{u1} Ξ± _inst_1 t))
-but is expected to have type
-  forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] (s : Set.{u1} Ξ±) (t : Set.{u1} Ξ±), Eq.{succ u1} (Filter.{u1} Ξ±) (nhdsSet.{u1} Ξ± _inst_1 (Union.union.{u1} (Set.{u1} Ξ±) (Set.instUnionSet.{u1} Ξ±) s t)) (Sup.sup.{u1} (Filter.{u1} Ξ±) (SemilatticeSup.toSup.{u1} (Filter.{u1} Ξ±) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} Ξ±) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} Ξ±) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} Ξ±) (Filter.instCompleteLatticeFilter.{u1} Ξ±))))) (nhdsSet.{u1} Ξ± _inst_1 s) (nhdsSet.{u1} Ξ± _inst_1 t))
-Case conversion may be inaccurate. Consider using '#align nhds_set_union nhdsSet_unionβ‚“'. -/
 @[simp]
 theorem nhdsSet_union (s t : Set Ξ±) : 𝓝˒ (s βˆͺ t) = 𝓝˒ s βŠ” 𝓝˒ t := by
   simp only [nhdsSet, image_union, sSup_union]
 #align nhds_set_union nhdsSet_union
 
-/- warning: union_mem_nhds_set -> union_mem_nhdsSet is a dubious translation:
-lean 3 declaration is
-  forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {s₁ : Set.{u1} Ξ±} {sβ‚‚ : Set.{u1} Ξ±} {t₁ : Set.{u1} Ξ±} {tβ‚‚ : Set.{u1} Ξ±}, (Membership.Mem.{u1, u1} (Set.{u1} Ξ±) (Filter.{u1} Ξ±) (Filter.hasMem.{u1} Ξ±) s₁ (nhdsSet.{u1} Ξ± _inst_1 t₁)) -> (Membership.Mem.{u1, u1} (Set.{u1} Ξ±) (Filter.{u1} Ξ±) (Filter.hasMem.{u1} Ξ±) sβ‚‚ (nhdsSet.{u1} Ξ± _inst_1 tβ‚‚)) -> (Membership.Mem.{u1, u1} (Set.{u1} Ξ±) (Filter.{u1} Ξ±) (Filter.hasMem.{u1} Ξ±) (Union.union.{u1} (Set.{u1} Ξ±) (Set.hasUnion.{u1} Ξ±) s₁ sβ‚‚) (nhdsSet.{u1} Ξ± _inst_1 (Union.union.{u1} (Set.{u1} Ξ±) (Set.hasUnion.{u1} Ξ±) t₁ tβ‚‚)))
-but is expected to have type
-  forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {s₁ : Set.{u1} Ξ±} {sβ‚‚ : Set.{u1} Ξ±} {t₁ : Set.{u1} Ξ±} {tβ‚‚ : Set.{u1} Ξ±}, (Membership.mem.{u1, u1} (Set.{u1} Ξ±) (Filter.{u1} Ξ±) (instMembershipSetFilter.{u1} Ξ±) s₁ (nhdsSet.{u1} Ξ± _inst_1 t₁)) -> (Membership.mem.{u1, u1} (Set.{u1} Ξ±) (Filter.{u1} Ξ±) (instMembershipSetFilter.{u1} Ξ±) sβ‚‚ (nhdsSet.{u1} Ξ± _inst_1 tβ‚‚)) -> (Membership.mem.{u1, u1} (Set.{u1} Ξ±) (Filter.{u1} Ξ±) (instMembershipSetFilter.{u1} Ξ±) (Union.union.{u1} (Set.{u1} Ξ±) (Set.instUnionSet.{u1} Ξ±) s₁ sβ‚‚) (nhdsSet.{u1} Ξ± _inst_1 (Union.union.{u1} (Set.{u1} Ξ±) (Set.instUnionSet.{u1} Ξ±) t₁ tβ‚‚)))
-Case conversion may be inaccurate. Consider using '#align union_mem_nhds_set union_mem_nhdsSetβ‚“'. -/
 theorem union_mem_nhdsSet (h₁ : s₁ ∈ 𝓝˒ t₁) (hβ‚‚ : sβ‚‚ ∈ 𝓝˒ tβ‚‚) : s₁ βˆͺ sβ‚‚ ∈ 𝓝˒ (t₁ βˆͺ tβ‚‚) := by
   rw [nhdsSet_union]; exact union_mem_sup h₁ hβ‚‚
 #align union_mem_nhds_set union_mem_nhdsSet
Diff
@@ -55,10 +55,8 @@ lean 3 declaration is
 but is expected to have type
   forall (Ξ± : Type.{u1}) [_inst_3 : TopologicalSpace.{u1} (Prod.{u1, u1} Ξ± Ξ±)], Eq.{succ u1} (Filter.{u1} (Prod.{u1, u1} Ξ± Ξ±)) (nhdsSet.{u1} (Prod.{u1, u1} Ξ± Ξ±) _inst_3 (Set.diagonal.{u1} Ξ±)) (iSup.{u1, succ u1} (Filter.{u1} (Prod.{u1, u1} Ξ± Ξ±)) (ConditionallyCompleteLattice.toSupSet.{u1} (Filter.{u1} (Prod.{u1, u1} Ξ± Ξ±)) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} (Prod.{u1, u1} Ξ± Ξ±)) (Filter.instCompleteLatticeFilter.{u1} (Prod.{u1, u1} Ξ± Ξ±)))) Ξ± (fun (x : Ξ±) => nhds.{u1} (Prod.{u1, u1} Ξ± Ξ±) _inst_3 (Prod.mk.{u1, u1} Ξ± Ξ± x x)))
 Case conversion may be inaccurate. Consider using '#align nhds_set_diagonal nhdsSet_diagonalβ‚“'. -/
-theorem nhdsSet_diagonal (Ξ±) [TopologicalSpace (Ξ± Γ— Ξ±)] : 𝓝˒ (diagonal Ξ±) = ⨆ x, 𝓝 (x, x) :=
-  by
-  rw [nhdsSet, ← range_diag, ← range_comp]
-  rfl
+theorem nhdsSet_diagonal (Ξ±) [TopologicalSpace (Ξ± Γ— Ξ±)] : 𝓝˒ (diagonal Ξ±) = ⨆ x, 𝓝 (x, x) := by
+  rw [nhdsSet, ← range_diag, ← range_comp]; rfl
 #align nhds_set_diagonal nhdsSet_diagonal
 
 #print mem_nhdsSet_iff_forall /-
@@ -211,10 +209,8 @@ lean 3 declaration is
 but is expected to have type
   forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {s₁ : Set.{u1} Ξ±} {sβ‚‚ : Set.{u1} Ξ±} {t₁ : Set.{u1} Ξ±} {tβ‚‚ : Set.{u1} Ξ±}, (Membership.mem.{u1, u1} (Set.{u1} Ξ±) (Filter.{u1} Ξ±) (instMembershipSetFilter.{u1} Ξ±) s₁ (nhdsSet.{u1} Ξ± _inst_1 t₁)) -> (Membership.mem.{u1, u1} (Set.{u1} Ξ±) (Filter.{u1} Ξ±) (instMembershipSetFilter.{u1} Ξ±) sβ‚‚ (nhdsSet.{u1} Ξ± _inst_1 tβ‚‚)) -> (Membership.mem.{u1, u1} (Set.{u1} Ξ±) (Filter.{u1} Ξ±) (instMembershipSetFilter.{u1} Ξ±) (Union.union.{u1} (Set.{u1} Ξ±) (Set.instUnionSet.{u1} Ξ±) s₁ sβ‚‚) (nhdsSet.{u1} Ξ± _inst_1 (Union.union.{u1} (Set.{u1} Ξ±) (Set.instUnionSet.{u1} Ξ±) t₁ tβ‚‚)))
 Case conversion may be inaccurate. Consider using '#align union_mem_nhds_set union_mem_nhdsSetβ‚“'. -/
-theorem union_mem_nhdsSet (h₁ : s₁ ∈ 𝓝˒ t₁) (hβ‚‚ : sβ‚‚ ∈ 𝓝˒ tβ‚‚) : s₁ βˆͺ sβ‚‚ ∈ 𝓝˒ (t₁ βˆͺ tβ‚‚) :=
-  by
-  rw [nhdsSet_union]
-  exact union_mem_sup h₁ hβ‚‚
+theorem union_mem_nhdsSet (h₁ : s₁ ∈ 𝓝˒ t₁) (hβ‚‚ : sβ‚‚ ∈ 𝓝˒ tβ‚‚) : s₁ βˆͺ sβ‚‚ ∈ 𝓝˒ (t₁ βˆͺ tβ‚‚) := by
+  rw [nhdsSet_union]; exact union_mem_sup h₁ hβ‚‚
 #align union_mem_nhds_set union_mem_nhdsSet
 
 #print Continuous.tendsto_nhdsSet /-
Diff
@@ -99,7 +99,7 @@ theorem IsOpen.mem_nhdsSet (hU : IsOpen s) : s ∈ 𝓝˒ t ↔ t βŠ† s := by
 
 /- warning: principal_le_nhds_set -> principal_le_nhdsSet is a dubious translation:
 lean 3 declaration is
-  forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {s : Set.{u1} Ξ±}, LE.le.{u1} (Filter.{u1} Ξ±) (Preorder.toLE.{u1} (Filter.{u1} Ξ±) (PartialOrder.toPreorder.{u1} (Filter.{u1} Ξ±) (Filter.partialOrder.{u1} Ξ±))) (Filter.principal.{u1} Ξ± s) (nhdsSet.{u1} Ξ± _inst_1 s)
+  forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {s : Set.{u1} Ξ±}, LE.le.{u1} (Filter.{u1} Ξ±) (Preorder.toHasLe.{u1} (Filter.{u1} Ξ±) (PartialOrder.toPreorder.{u1} (Filter.{u1} Ξ±) (Filter.partialOrder.{u1} Ξ±))) (Filter.principal.{u1} Ξ± s) (nhdsSet.{u1} Ξ± _inst_1 s)
 but is expected to have type
   forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {s : Set.{u1} Ξ±}, LE.le.{u1} (Filter.{u1} Ξ±) (Preorder.toLE.{u1} (Filter.{u1} Ξ±) (PartialOrder.toPreorder.{u1} (Filter.{u1} Ξ±) (Filter.instPartialOrderFilter.{u1} Ξ±))) (Filter.principal.{u1} Ξ± s) (nhdsSet.{u1} Ξ± _inst_1 s)
 Case conversion may be inaccurate. Consider using '#align principal_le_nhds_set principal_le_nhdsSetβ‚“'. -/
@@ -166,7 +166,7 @@ theorem nhdsSet_univ : 𝓝˒ (univ : Set Ξ±) = ⊀ := by rw [is_open_univ.nhds_
 
 /- warning: nhds_set_mono -> nhdsSet_mono is a dubious translation:
 lean 3 declaration is
-  forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {s : Set.{u1} Ξ±} {t : Set.{u1} Ξ±}, (HasSubset.Subset.{u1} (Set.{u1} Ξ±) (Set.hasSubset.{u1} Ξ±) s t) -> (LE.le.{u1} (Filter.{u1} Ξ±) (Preorder.toLE.{u1} (Filter.{u1} Ξ±) (PartialOrder.toPreorder.{u1} (Filter.{u1} Ξ±) (Filter.partialOrder.{u1} Ξ±))) (nhdsSet.{u1} Ξ± _inst_1 s) (nhdsSet.{u1} Ξ± _inst_1 t))
+  forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {s : Set.{u1} Ξ±} {t : Set.{u1} Ξ±}, (HasSubset.Subset.{u1} (Set.{u1} Ξ±) (Set.hasSubset.{u1} Ξ±) s t) -> (LE.le.{u1} (Filter.{u1} Ξ±) (Preorder.toHasLe.{u1} (Filter.{u1} Ξ±) (PartialOrder.toPreorder.{u1} (Filter.{u1} Ξ±) (Filter.partialOrder.{u1} Ξ±))) (nhdsSet.{u1} Ξ± _inst_1 s) (nhdsSet.{u1} Ξ± _inst_1 t))
 but is expected to have type
   forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {s : Set.{u1} Ξ±} {t : Set.{u1} Ξ±}, (HasSubset.Subset.{u1} (Set.{u1} Ξ±) (Set.instHasSubsetSet.{u1} Ξ±) s t) -> (LE.le.{u1} (Filter.{u1} Ξ±) (Preorder.toLE.{u1} (Filter.{u1} Ξ±) (PartialOrder.toPreorder.{u1} (Filter.{u1} Ξ±) (Filter.instPartialOrderFilter.{u1} Ξ±))) (nhdsSet.{u1} Ξ± _inst_1 s) (nhdsSet.{u1} Ξ± _inst_1 t))
 Case conversion may be inaccurate. Consider using '#align nhds_set_mono nhdsSet_monoβ‚“'. -/
@@ -186,7 +186,7 @@ theorem monotone_nhdsSet : Monotone (𝓝˒ : Set Ξ± β†’ Filter Ξ±) := fun s t =
 
 /- warning: nhds_le_nhds_set -> nhds_le_nhdsSet is a dubious translation:
 lean 3 declaration is
-  forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {s : Set.{u1} Ξ±} {x : Ξ±}, (Membership.Mem.{u1, u1} Ξ± (Set.{u1} Ξ±) (Set.hasMem.{u1} Ξ±) x s) -> (LE.le.{u1} (Filter.{u1} Ξ±) (Preorder.toLE.{u1} (Filter.{u1} Ξ±) (PartialOrder.toPreorder.{u1} (Filter.{u1} Ξ±) (Filter.partialOrder.{u1} Ξ±))) (nhds.{u1} Ξ± _inst_1 x) (nhdsSet.{u1} Ξ± _inst_1 s))
+  forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {s : Set.{u1} Ξ±} {x : Ξ±}, (Membership.Mem.{u1, u1} Ξ± (Set.{u1} Ξ±) (Set.hasMem.{u1} Ξ±) x s) -> (LE.le.{u1} (Filter.{u1} Ξ±) (Preorder.toHasLe.{u1} (Filter.{u1} Ξ±) (PartialOrder.toPreorder.{u1} (Filter.{u1} Ξ±) (Filter.partialOrder.{u1} Ξ±))) (nhds.{u1} Ξ± _inst_1 x) (nhdsSet.{u1} Ξ± _inst_1 s))
 but is expected to have type
   forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {s : Set.{u1} Ξ±} {x : Ξ±}, (Membership.mem.{u1, u1} Ξ± (Set.{u1} Ξ±) (Set.instMembershipSet.{u1} Ξ±) x s) -> (LE.le.{u1} (Filter.{u1} Ξ±) (Preorder.toLE.{u1} (Filter.{u1} Ξ±) (PartialOrder.toPreorder.{u1} (Filter.{u1} Ξ±) (Filter.instPartialOrderFilter.{u1} Ξ±))) (nhds.{u1} Ξ± _inst_1 x) (nhdsSet.{u1} Ξ± _inst_1 s))
 Case conversion may be inaccurate. Consider using '#align nhds_le_nhds_set nhds_le_nhdsSetβ‚“'. -/
Diff
@@ -42,7 +42,7 @@ variable {Ξ± Ξ² : Type _} [TopologicalSpace Ξ±] [TopologicalSpace Ξ²] {s t s₁
 #print nhdsSet /-
 /-- The filter of neighborhoods of a set in a topological space. -/
 def nhdsSet (s : Set Ξ±) : Filter Ξ± :=
-  supβ‚› (nhds '' s)
+  sSup (nhds '' s)
 #align nhds_set nhdsSet
 -/
 
@@ -51,9 +51,9 @@ scoped[Topology] notation "𝓝˒" => nhdsSet
 
 /- warning: nhds_set_diagonal -> nhdsSet_diagonal is a dubious translation:
 lean 3 declaration is
-  forall (Ξ± : Type.{u1}) [_inst_3 : TopologicalSpace.{u1} (Prod.{u1, u1} Ξ± Ξ±)], Eq.{succ u1} (Filter.{u1} (Prod.{u1, u1} Ξ± Ξ±)) (nhdsSet.{u1} (Prod.{u1, u1} Ξ± Ξ±) _inst_3 (Set.diagonal.{u1} Ξ±)) (supα΅’.{u1, succ u1} (Filter.{u1} (Prod.{u1, u1} Ξ± Ξ±)) (ConditionallyCompleteLattice.toHasSup.{u1} (Filter.{u1} (Prod.{u1, u1} Ξ± Ξ±)) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} (Prod.{u1, u1} Ξ± Ξ±)) (Filter.completeLattice.{u1} (Prod.{u1, u1} Ξ± Ξ±)))) Ξ± (fun (x : Ξ±) => nhds.{u1} (Prod.{u1, u1} Ξ± Ξ±) _inst_3 (Prod.mk.{u1, u1} Ξ± Ξ± x x)))
+  forall (Ξ± : Type.{u1}) [_inst_3 : TopologicalSpace.{u1} (Prod.{u1, u1} Ξ± Ξ±)], Eq.{succ u1} (Filter.{u1} (Prod.{u1, u1} Ξ± Ξ±)) (nhdsSet.{u1} (Prod.{u1, u1} Ξ± Ξ±) _inst_3 (Set.diagonal.{u1} Ξ±)) (iSup.{u1, succ u1} (Filter.{u1} (Prod.{u1, u1} Ξ± Ξ±)) (ConditionallyCompleteLattice.toHasSup.{u1} (Filter.{u1} (Prod.{u1, u1} Ξ± Ξ±)) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} (Prod.{u1, u1} Ξ± Ξ±)) (Filter.completeLattice.{u1} (Prod.{u1, u1} Ξ± Ξ±)))) Ξ± (fun (x : Ξ±) => nhds.{u1} (Prod.{u1, u1} Ξ± Ξ±) _inst_3 (Prod.mk.{u1, u1} Ξ± Ξ± x x)))
 but is expected to have type
-  forall (Ξ± : Type.{u1}) [_inst_3 : TopologicalSpace.{u1} (Prod.{u1, u1} Ξ± Ξ±)], Eq.{succ u1} (Filter.{u1} (Prod.{u1, u1} Ξ± Ξ±)) (nhdsSet.{u1} (Prod.{u1, u1} Ξ± Ξ±) _inst_3 (Set.diagonal.{u1} Ξ±)) (supα΅’.{u1, succ u1} (Filter.{u1} (Prod.{u1, u1} Ξ± Ξ±)) (ConditionallyCompleteLattice.toSupSet.{u1} (Filter.{u1} (Prod.{u1, u1} Ξ± Ξ±)) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} (Prod.{u1, u1} Ξ± Ξ±)) (Filter.instCompleteLatticeFilter.{u1} (Prod.{u1, u1} Ξ± Ξ±)))) Ξ± (fun (x : Ξ±) => nhds.{u1} (Prod.{u1, u1} Ξ± Ξ±) _inst_3 (Prod.mk.{u1, u1} Ξ± Ξ± x x)))
+  forall (Ξ± : Type.{u1}) [_inst_3 : TopologicalSpace.{u1} (Prod.{u1, u1} Ξ± Ξ±)], Eq.{succ u1} (Filter.{u1} (Prod.{u1, u1} Ξ± Ξ±)) (nhdsSet.{u1} (Prod.{u1, u1} Ξ± Ξ±) _inst_3 (Set.diagonal.{u1} Ξ±)) (iSup.{u1, succ u1} (Filter.{u1} (Prod.{u1, u1} Ξ± Ξ±)) (ConditionallyCompleteLattice.toSupSet.{u1} (Filter.{u1} (Prod.{u1, u1} Ξ± Ξ±)) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} (Prod.{u1, u1} Ξ± Ξ±)) (Filter.instCompleteLatticeFilter.{u1} (Prod.{u1, u1} Ξ± Ξ±)))) Ξ± (fun (x : Ξ±) => nhds.{u1} (Prod.{u1, u1} Ξ± Ξ±) _inst_3 (Prod.mk.{u1, u1} Ξ± Ξ± x x)))
 Case conversion may be inaccurate. Consider using '#align nhds_set_diagonal nhdsSet_diagonalβ‚“'. -/
 theorem nhdsSet_diagonal (Ξ±) [TopologicalSpace (Ξ± Γ— Ξ±)] : 𝓝˒ (diagonal Ξ±) = ⨆ x, 𝓝 (x, x) :=
   by
@@ -63,13 +63,13 @@ theorem nhdsSet_diagonal (Ξ±) [TopologicalSpace (Ξ± Γ— Ξ±)] : 𝓝˒ (diagonal 
 
 #print mem_nhdsSet_iff_forall /-
 theorem mem_nhdsSet_iff_forall : s ∈ 𝓝˒ t ↔ βˆ€ x : Ξ±, x ∈ t β†’ s ∈ 𝓝 x := by
-  simp_rw [nhdsSet, Filter.mem_supβ‚›, ball_image_iff]
+  simp_rw [nhdsSet, Filter.mem_sSup, ball_image_iff]
 #align mem_nhds_set_iff_forall mem_nhdsSet_iff_forall
 -/
 
 #print bUnion_mem_nhdsSet /-
 theorem bUnion_mem_nhdsSet {t : Ξ± β†’ Set Ξ±} (h : βˆ€ x ∈ s, t x ∈ 𝓝 x) : (⋃ x ∈ s, t x) ∈ 𝓝˒ s :=
-  mem_nhdsSet_iff_forall.2 fun x hx => mem_of_superset (h x hx) (subset_unionα΅’β‚‚ x hx)
+  mem_nhdsSet_iff_forall.2 fun x hx => mem_of_superset (h x hx) (subset_iUnionβ‚‚ x hx)
 #align bUnion_mem_nhds_set bUnion_mem_nhdsSet
 -/
 
@@ -172,7 +172,7 @@ but is expected to have type
 Case conversion may be inaccurate. Consider using '#align nhds_set_mono nhdsSet_monoβ‚“'. -/
 @[mono]
 theorem nhdsSet_mono (h : s βŠ† t) : 𝓝˒ s ≀ 𝓝˒ t :=
-  supβ‚›_le_supβ‚› <| image_subset _ h
+  sSup_le_sSup <| image_subset _ h
 #align nhds_set_mono nhdsSet_mono
 
 /- warning: monotone_nhds_set -> monotone_nhdsSet is a dubious translation:
@@ -191,7 +191,7 @@ but is expected to have type
   forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {s : Set.{u1} Ξ±} {x : Ξ±}, (Membership.mem.{u1, u1} Ξ± (Set.{u1} Ξ±) (Set.instMembershipSet.{u1} Ξ±) x s) -> (LE.le.{u1} (Filter.{u1} Ξ±) (Preorder.toLE.{u1} (Filter.{u1} Ξ±) (PartialOrder.toPreorder.{u1} (Filter.{u1} Ξ±) (Filter.instPartialOrderFilter.{u1} Ξ±))) (nhds.{u1} Ξ± _inst_1 x) (nhdsSet.{u1} Ξ± _inst_1 s))
 Case conversion may be inaccurate. Consider using '#align nhds_le_nhds_set nhds_le_nhdsSetβ‚“'. -/
 theorem nhds_le_nhdsSet (h : x ∈ s) : 𝓝 x ≀ 𝓝˒ s :=
-  le_supβ‚› <| mem_image_of_mem _ h
+  le_sSup <| mem_image_of_mem _ h
 #align nhds_le_nhds_set nhds_le_nhdsSet
 
 /- warning: nhds_set_union -> nhdsSet_union is a dubious translation:
@@ -202,7 +202,7 @@ but is expected to have type
 Case conversion may be inaccurate. Consider using '#align nhds_set_union nhdsSet_unionβ‚“'. -/
 @[simp]
 theorem nhdsSet_union (s t : Set Ξ±) : 𝓝˒ (s βˆͺ t) = 𝓝˒ s βŠ” 𝓝˒ t := by
-  simp only [nhdsSet, image_union, supβ‚›_union]
+  simp only [nhdsSet, image_union, sSup_union]
 #align nhds_set_union nhdsSet_union
 
 /- warning: union_mem_nhds_set -> union_mem_nhdsSet is a dubious translation:
Diff
@@ -196,9 +196,9 @@ theorem nhds_le_nhdsSet (h : x ∈ s) : 𝓝 x ≀ 𝓝˒ s :=
 
 /- warning: nhds_set_union -> nhdsSet_union is a dubious translation:
 lean 3 declaration is
-  forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] (s : Set.{u1} Ξ±) (t : Set.{u1} Ξ±), Eq.{succ u1} (Filter.{u1} Ξ±) (nhdsSet.{u1} Ξ± _inst_1 (Union.union.{u1} (Set.{u1} Ξ±) (Set.hasUnion.{u1} Ξ±) s t)) (HasSup.sup.{u1} (Filter.{u1} Ξ±) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} Ξ±) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} Ξ±) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} Ξ±) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} Ξ±) (Filter.completeLattice.{u1} Ξ±))))) (nhdsSet.{u1} Ξ± _inst_1 s) (nhdsSet.{u1} Ξ± _inst_1 t))
+  forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] (s : Set.{u1} Ξ±) (t : Set.{u1} Ξ±), Eq.{succ u1} (Filter.{u1} Ξ±) (nhdsSet.{u1} Ξ± _inst_1 (Union.union.{u1} (Set.{u1} Ξ±) (Set.hasUnion.{u1} Ξ±) s t)) (Sup.sup.{u1} (Filter.{u1} Ξ±) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} Ξ±) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} Ξ±) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} Ξ±) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} Ξ±) (Filter.completeLattice.{u1} Ξ±))))) (nhdsSet.{u1} Ξ± _inst_1 s) (nhdsSet.{u1} Ξ± _inst_1 t))
 but is expected to have type
-  forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] (s : Set.{u1} Ξ±) (t : Set.{u1} Ξ±), Eq.{succ u1} (Filter.{u1} Ξ±) (nhdsSet.{u1} Ξ± _inst_1 (Union.union.{u1} (Set.{u1} Ξ±) (Set.instUnionSet.{u1} Ξ±) s t)) (HasSup.sup.{u1} (Filter.{u1} Ξ±) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} Ξ±) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} Ξ±) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} Ξ±) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} Ξ±) (Filter.instCompleteLatticeFilter.{u1} Ξ±))))) (nhdsSet.{u1} Ξ± _inst_1 s) (nhdsSet.{u1} Ξ± _inst_1 t))
+  forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] (s : Set.{u1} Ξ±) (t : Set.{u1} Ξ±), Eq.{succ u1} (Filter.{u1} Ξ±) (nhdsSet.{u1} Ξ± _inst_1 (Union.union.{u1} (Set.{u1} Ξ±) (Set.instUnionSet.{u1} Ξ±) s t)) (Sup.sup.{u1} (Filter.{u1} Ξ±) (SemilatticeSup.toSup.{u1} (Filter.{u1} Ξ±) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} Ξ±) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} Ξ±) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} Ξ±) (Filter.instCompleteLatticeFilter.{u1} Ξ±))))) (nhdsSet.{u1} Ξ± _inst_1 s) (nhdsSet.{u1} Ξ± _inst_1 t))
 Case conversion may be inaccurate. Consider using '#align nhds_set_union nhdsSet_unionβ‚“'. -/
 @[simp]
 theorem nhdsSet_union (s t : Set Ξ±) : 𝓝˒ (s βˆͺ t) = 𝓝˒ s βŠ” 𝓝˒ t := by

Changes in mathlib4

mathlib3
mathlib4
chore: Remove ball and bex from lemma names (#10816)

ball for "bounded forall" and bex for "bounded exists" are from experience very confusing abbreviations. This PR renames them to forall_mem and exists_mem in the few Set lemma names that mention them.

Also deprecate ball_image_of_ball, mem_image_elim, mem_image_elim_on since those lemmas are duplicates of the renamed lemmas (apart from argument order and implicitness, which I am also fixing by making the binder in the RHS of forall_mem_image semi-implicit), have obscure names and are completely unused.

Diff
@@ -39,7 +39,7 @@ theorem nhdsSet_diagonal (X) [TopologicalSpace (X Γ— X)] :
 #align nhds_set_diagonal nhdsSet_diagonal
 
 theorem mem_nhdsSet_iff_forall : s ∈ 𝓝˒ t ↔ βˆ€ x : X, x ∈ t β†’ s ∈ 𝓝 x := by
-  simp_rw [nhdsSet, Filter.mem_sSup, ball_image_iff]
+  simp_rw [nhdsSet, Filter.mem_sSup, forall_mem_image]
 #align mem_nhds_set_iff_forall mem_nhdsSet_iff_forall
 
 lemma nhdsSet_le : 𝓝˒ s ≀ f ↔ βˆ€ x ∈ s, 𝓝 x ≀ f := by simp [nhdsSet]
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
@@ -46,7 +46,7 @@ lemma nhdsSet_le : 𝓝˒ s ≀ f ↔ βˆ€ x ∈ s, 𝓝 x ≀ f := by simp [nhds
 
 theorem bUnion_mem_nhdsSet {t : X β†’ Set X} (h : βˆ€ x ∈ s, t x ∈ 𝓝 x) : (⋃ x ∈ s, t x) ∈ 𝓝˒ s :=
   mem_nhdsSet_iff_forall.2 fun x hx => mem_of_superset (h x hx) <|
-    subset_iUnionβ‚‚ (s := fun x _ => t x) x hx -- porting note: fails to find `s`
+    subset_iUnionβ‚‚ (s := fun x _ => t x) x hx -- Porting note: fails to find `s`
 #align bUnion_mem_nhds_set bUnion_mem_nhdsSet
 
 theorem subset_interior_iff_mem_nhdsSet : s βŠ† interior t ↔ t ∈ 𝓝˒ s := by
chore(Topology): move some definitions to new files (#10151)

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

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

Diff
@@ -32,13 +32,6 @@ open Set Filter Topology
 variable {X Y : Type*} [TopologicalSpace X] [TopologicalSpace Y] {f : Filter X}
   {s t s₁ sβ‚‚ t₁ tβ‚‚ : Set X} {x : X}
 
-/-- The filter of neighborhoods of a set in a topological space. -/
-def nhdsSet (s : Set X) : Filter X :=
-  sSup (nhds '' s)
-#align nhds_set nhdsSet
-
-@[inherit_doc] scoped[Topology] notation "𝓝˒" => nhdsSet
-
 theorem nhdsSet_diagonal (X) [TopologicalSpace (X Γ— X)] :
     𝓝˒ (diagonal X) = ⨆ (x : X), 𝓝 (x, x) := by
   rw [nhdsSet, ← range_diag, ← range_comp]
feat(Topology): add lift'_nhds_interior etc (#10175)
Diff
@@ -86,6 +86,14 @@ theorem hasBasis_nhdsSet (s : Set X) : (𝓝˒ s).HasBasis (fun U => IsOpen U 
   ⟨fun t => by simp [mem_nhdsSet_iff_exists, and_assoc]⟩
 #align has_basis_nhds_set hasBasis_nhdsSet
 
+@[simp]
+lemma lift'_nhdsSet_interior (s : Set X) : (𝓝˒ s).lift' interior = 𝓝˒ s :=
+  (hasBasis_nhdsSet s).lift'_interior_eq_self fun _ ↦ And.left
+
+lemma Filter.HasBasis.nhdsSet_interior {ΞΉ : Sort*} {p : ΞΉ β†’ Prop} {s : ΞΉ β†’ Set X} {t : Set X}
+    (h : (𝓝˒ t).HasBasis p s) : (𝓝˒ t).HasBasis p (interior <| s Β·) :=
+  lift'_nhdsSet_interior t β–Έ h.lift'_interior
+
 theorem IsOpen.mem_nhdsSet (hU : IsOpen s) : s ∈ 𝓝˒ t ↔ t βŠ† s := by
   rw [← subset_interior_iff_mem_nhdsSet, hU.interior_eq]
 #align is_open.mem_nhds_set IsOpen.mem_nhdsSet
feat: lemmas about NhdsSet (#9674)

From sphere-eversion; I'm just submitting these. Thanks to @urkud for some review suggestions.

Diff
@@ -177,3 +177,45 @@ lemma Continuous.tendsto_nhdsSet_nhds
     Tendsto f (𝓝˒ s) (𝓝 y) := by
   rw [← nhdsSet_singleton]
   exact h.tendsto_nhdsSet h'
+
+/- This inequality cannot be improved to an equality. For instance,
+if `X` has two elements and the coarse topology and `s` and `t` are distinct singletons then
+`𝓝˒ (s ∩ t) = βŠ₯` while `𝓝˒ s βŠ“ 𝓝˒ t = ⊀` and those are different. -/
+theorem nhdsSet_inter_le (s t : Set X) : 𝓝˒ (s ∩ t) ≀ 𝓝˒ s βŠ“ 𝓝˒ t :=
+  (monotone_nhdsSet (X := X)).map_inf_le s t
+
+variable (s) in
+theorem IsClosed.nhdsSet_le_sup (h : IsClosed t) : 𝓝˒ s ≀ 𝓝˒ (s ∩ t) βŠ” π“Ÿ (tᢜ) :=
+  calc
+    𝓝˒ s = 𝓝˒ (s ∩ t βˆͺ s ∩ tᢜ) := by rw [Set.inter_union_compl s t]
+    _ = 𝓝˒ (s ∩ t) βŠ” 𝓝˒ (s ∩ tᢜ) := by rw [nhdsSet_union]
+    _ ≀ 𝓝˒ (s ∩ t) βŠ” 𝓝˒ (tᢜ) := (sup_le_sup_left (monotone_nhdsSet (s.inter_subset_right (tᢜ))) _)
+    _ = 𝓝˒ (s ∩ t) βŠ” π“Ÿ (tᢜ) := by rw [h.isOpen_compl.nhdsSet_eq]
+
+variable (s) in
+theorem IsClosed.nhdsSet_le_sup' (h : IsClosed t) :
+    𝓝˒ s ≀ 𝓝˒ (t ∩ s) βŠ” π“Ÿ (tᢜ) := by rw [Set.inter_comm]; exact h.nhdsSet_le_sup s
+
+theorem Filter.Eventually.eventually_nhdsSet {p : X β†’ Prop} (h : βˆ€αΆ  y in 𝓝˒ s, p y) :
+    βˆ€αΆ  y in 𝓝˒ s, βˆ€αΆ  x in 𝓝 y, p x :=
+  eventually_nhdsSet_iff_forall.mpr fun x x_in ↦
+    (eventually_nhdsSet_iff_forall.mp h x x_in).eventually_nhds
+
+theorem Filter.Eventually.union_nhdsSet {p : X β†’ Prop} :
+    (βˆ€αΆ  x in 𝓝˒ (s βˆͺ t), p x) ↔ (βˆ€αΆ  x in 𝓝˒ s, p x) ∧ βˆ€αΆ  x in 𝓝˒ t, p x := by
+  rw [nhdsSet_union, eventually_sup]
+
+theorem Filter.Eventually.union {p : X β†’ Prop} (hs : βˆ€αΆ  x in 𝓝˒ s, p x) (ht : βˆ€αΆ  x in 𝓝˒ t, p x) :
+    βˆ€αΆ  x in 𝓝˒ (s βˆͺ t), p x :=
+  Filter.Eventually.union_nhdsSet.mpr ⟨hs, ht⟩
+
+theorem nhdsSet_iUnion {ΞΉ : Sort*} (s : ΞΉ β†’ Set X) : 𝓝˒ (⋃ i, s i) = ⨆ i, 𝓝˒ (s i) := by
+  simp only [nhdsSet, image_iUnion, sSup_iUnion (Ξ² := Filter X)]
+
+theorem eventually_nhdsSet_iUnionβ‚‚ {ΞΉ : Sort*} {p : ΞΉ β†’ Prop} {s : ΞΉ β†’ Set X} {P : X β†’ Prop} :
+    (βˆ€αΆ  x in 𝓝˒ (⋃ (i) (_ : p i), s i), P x) ↔ βˆ€ i, p i β†’ βˆ€αΆ  x in 𝓝˒ (s i), P x := by
+  simp only [nhdsSet_iUnion, eventually_iSup]
+
+theorem eventually_nhdsSet_iUnion {ΞΉ : Sort*} {s : ΞΉ β†’ Set X} {P : X β†’ Prop} :
+    (βˆ€αΆ  x in 𝓝˒ (⋃ i, s i), P x) ↔ βˆ€ i, βˆ€αΆ  x in 𝓝˒ (s i), P x := by
+  simp only [nhdsSet_iUnion, eventually_iSup]
chore(Topology/NhdsSet): rename type variables (#9673)

Now we use letters X and Y for topological spaces, not Greek letters.

Diff
@@ -17,8 +17,8 @@ In this file we define the filter `𝓝˒ s` or `nhdsSet s` consisting of all ne
 
 There are a couple different notions equivalent to `s ∈ 𝓝˒ t`:
 * `s βŠ† interior t` using `subset_interior_iff_mem_nhdsSet`
-* `βˆ€ x : Ξ±, x ∈ t β†’ s ∈ 𝓝 x` using `mem_nhdsSet_iff_forall`
-* `βˆƒ U : Set Ξ±, IsOpen U ∧ t βŠ† U ∧ U βŠ† s` using `mem_nhdsSet_iff_exists`
+* `βˆ€ x : X, x ∈ t β†’ s ∈ 𝓝 x` using `mem_nhdsSet_iff_forall`
+* `βˆƒ U : Set X, IsOpen U ∧ t βŠ† U ∧ U βŠ† s` using `mem_nhdsSet_iff_exists`
 
 Furthermore, we have the following results:
 * `monotone_nhdsSet`: `𝓝˒` is monotone
@@ -29,29 +29,29 @@ Furthermore, we have the following results:
 
 open Set Filter Topology
 
-variable {Ξ± Ξ² : Type*} [TopologicalSpace Ξ±] [TopologicalSpace Ξ²] {f : Filter Ξ±}
-  {s t s₁ sβ‚‚ t₁ tβ‚‚ : Set Ξ±} {x : Ξ±}
+variable {X Y : Type*} [TopologicalSpace X] [TopologicalSpace Y] {f : Filter X}
+  {s t s₁ sβ‚‚ t₁ tβ‚‚ : Set X} {x : X}
 
 /-- The filter of neighborhoods of a set in a topological space. -/
-def nhdsSet (s : Set Ξ±) : Filter Ξ± :=
+def nhdsSet (s : Set X) : Filter X :=
   sSup (nhds '' s)
 #align nhds_set nhdsSet
 
 @[inherit_doc] scoped[Topology] notation "𝓝˒" => nhdsSet
 
-theorem nhdsSet_diagonal (Ξ±) [TopologicalSpace (Ξ± Γ— Ξ±)] :
-    𝓝˒ (diagonal Ξ±) = ⨆ (x : Ξ±), 𝓝 (x, x) := by
+theorem nhdsSet_diagonal (X) [TopologicalSpace (X Γ— X)] :
+    𝓝˒ (diagonal X) = ⨆ (x : X), 𝓝 (x, x) := by
   rw [nhdsSet, ← range_diag, ← range_comp]
   rfl
 #align nhds_set_diagonal nhdsSet_diagonal
 
-theorem mem_nhdsSet_iff_forall : s ∈ 𝓝˒ t ↔ βˆ€ x : Ξ±, x ∈ t β†’ s ∈ 𝓝 x := by
+theorem mem_nhdsSet_iff_forall : s ∈ 𝓝˒ t ↔ βˆ€ x : X, x ∈ t β†’ s ∈ 𝓝 x := by
   simp_rw [nhdsSet, Filter.mem_sSup, ball_image_iff]
 #align mem_nhds_set_iff_forall mem_nhdsSet_iff_forall
 
-lemma nhdsSet_le : 𝓝˒ s ≀ f ↔ βˆ€ a ∈ s, 𝓝 a ≀ f := by simp [nhdsSet]
+lemma nhdsSet_le : 𝓝˒ s ≀ f ↔ βˆ€ x ∈ s, 𝓝 x ≀ f := by simp [nhdsSet]
 
-theorem bUnion_mem_nhdsSet {t : Ξ± β†’ Set Ξ±} (h : βˆ€ x ∈ s, t x ∈ 𝓝 x) : (⋃ x ∈ s, t x) ∈ 𝓝˒ s :=
+theorem bUnion_mem_nhdsSet {t : X β†’ Set X} (h : βˆ€ x ∈ s, t x ∈ 𝓝 x) : (⋃ x ∈ s, t x) ∈ 𝓝˒ s :=
   mem_nhdsSet_iff_forall.2 fun x hx => mem_of_superset (h x hx) <|
     subset_iUnionβ‚‚ (s := fun x _ => t x) x hx -- porting note: fails to find `s`
 #align bUnion_mem_nhds_set bUnion_mem_nhdsSet
@@ -67,22 +67,22 @@ theorem disjoint_principal_nhdsSet : Disjoint (π“Ÿ s) (𝓝˒ t) ↔ Disjoint (
 theorem disjoint_nhdsSet_principal : Disjoint (𝓝˒ s) (π“Ÿ t) ↔ Disjoint s (closure t) := by
   rw [disjoint_comm, disjoint_principal_nhdsSet, disjoint_comm]
 
-theorem mem_nhdsSet_iff_exists : s ∈ 𝓝˒ t ↔ βˆƒ U : Set Ξ±, IsOpen U ∧ t βŠ† U ∧ U βŠ† s := by
+theorem mem_nhdsSet_iff_exists : s ∈ 𝓝˒ t ↔ βˆƒ U : Set X, IsOpen U ∧ t βŠ† U ∧ U βŠ† s := by
   rw [← subset_interior_iff_mem_nhdsSet, subset_interior_iff]
 #align mem_nhds_set_iff_exists mem_nhdsSet_iff_exists
 
 /-- A proposition is true on a set neighborhood of `s` iff it is true on a larger open set -/
-theorem eventually_nhdsSet_iff_exists {p : Ξ± β†’ Prop} :
+theorem eventually_nhdsSet_iff_exists {p : X β†’ Prop} :
     (βˆ€αΆ  x in 𝓝˒ s, p x) ↔ βˆƒ t, IsOpen t ∧ s βŠ† t ∧ βˆ€ x, x ∈ t β†’ p x :=
   mem_nhdsSet_iff_exists
 
 /-- A proposition is true on a set neighborhood of `s`
 iff it is eventually true near each point in the set. -/
-theorem eventually_nhdsSet_iff_forall {p : Ξ± β†’ Prop} :
+theorem eventually_nhdsSet_iff_forall {p : X β†’ Prop} :
     (βˆ€αΆ  x in 𝓝˒ s, p x) ↔ βˆ€ x, x ∈ s β†’ βˆ€αΆ  y in 𝓝 x, p y :=
   mem_nhdsSet_iff_forall
 
-theorem hasBasis_nhdsSet (s : Set Ξ±) : (𝓝˒ s).HasBasis (fun U => IsOpen U ∧ s βŠ† U) fun U => U :=
+theorem hasBasis_nhdsSet (s : Set X) : (𝓝˒ s).HasBasis (fun U => IsOpen U ∧ s βŠ† U) fun U => U :=
   ⟨fun t => by simp [mem_nhdsSet_iff_exists, and_assoc]⟩
 #align has_basis_nhds_set hasBasis_nhdsSet
 
@@ -99,10 +99,10 @@ theorem principal_le_nhdsSet : π“Ÿ s ≀ 𝓝˒ s := fun _s hs =>
 
 theorem subset_of_mem_nhdsSet (h : t ∈ 𝓝˒ s) : s βŠ† t := principal_le_nhdsSet h
 
-theorem Filter.Eventually.self_of_nhdsSet {p : Ξ± β†’ Prop} (h : βˆ€αΆ  x in 𝓝˒ s, p x) : βˆ€ x ∈ s, p x :=
+theorem Filter.Eventually.self_of_nhdsSet {p : X β†’ Prop} (h : βˆ€αΆ  x in 𝓝˒ s, p x) : βˆ€ x ∈ s, p x :=
   principal_le_nhdsSet h
 
-nonrec theorem Filter.EventuallyEq.self_of_nhdsSet {f g : Ξ± β†’ Ξ²} (h : f =αΆ [𝓝˒ s] g) : EqOn f g s :=
+nonrec theorem Filter.EventuallyEq.self_of_nhdsSet {f g : X β†’ Y} (h : f =αΆ [𝓝˒ s] g) : EqOn f g s :=
   h.self_of_nhdsSet
 
 @[simp]
@@ -128,14 +128,14 @@ theorem mem_nhdsSet_interior : s ∈ 𝓝˒ (interior s) :=
 #align mem_nhds_set_interior mem_nhdsSet_interior
 
 @[simp]
-theorem nhdsSet_empty : 𝓝˒ (βˆ… : Set Ξ±) = βŠ₯ := by rw [isOpen_empty.nhdsSet_eq, principal_empty]
+theorem nhdsSet_empty : 𝓝˒ (βˆ… : Set X) = βŠ₯ := by rw [isOpen_empty.nhdsSet_eq, principal_empty]
 #align nhds_set_empty nhdsSet_empty
 
-theorem mem_nhdsSet_empty : s ∈ 𝓝˒ (βˆ… : Set Ξ±) := by simp
+theorem mem_nhdsSet_empty : s ∈ 𝓝˒ (βˆ… : Set X) := by simp
 #align mem_nhds_set_empty mem_nhdsSet_empty
 
 @[simp]
-theorem nhdsSet_univ : 𝓝˒ (univ : Set Ξ±) = ⊀ := by rw [isOpen_univ.nhdsSet_eq, principal_univ]
+theorem nhdsSet_univ : 𝓝˒ (univ : Set X) = ⊀ := by rw [isOpen_univ.nhdsSet_eq, principal_univ]
 #align nhds_set_univ nhdsSet_univ
 
 @[mono]
@@ -143,7 +143,7 @@ theorem nhdsSet_mono (h : s βŠ† t) : 𝓝˒ s ≀ 𝓝˒ t :=
   sSup_le_sSup <| image_subset _ h
 #align nhds_set_mono nhdsSet_mono
 
-theorem monotone_nhdsSet : Monotone (𝓝˒ : Set Ξ± β†’ Filter Ξ±) := fun _ _ => nhdsSet_mono
+theorem monotone_nhdsSet : Monotone (𝓝˒ : Set X β†’ Filter X) := fun _ _ => nhdsSet_mono
 #align monotone_nhds_set monotone_nhdsSet
 
 theorem nhds_le_nhdsSet (h : x ∈ s) : 𝓝 x ≀ 𝓝˒ s :=
@@ -151,7 +151,7 @@ theorem nhds_le_nhdsSet (h : x ∈ s) : 𝓝 x ≀ 𝓝˒ s :=
 #align nhds_le_nhds_set nhds_le_nhdsSet
 
 @[simp]
-theorem nhdsSet_union (s t : Set Ξ±) : 𝓝˒ (s βˆͺ t) = 𝓝˒ s βŠ” 𝓝˒ t := by
+theorem nhdsSet_union (s t : Set X) : 𝓝˒ (s βˆͺ t) = 𝓝˒ s βŠ” 𝓝˒ t := by
   simp only [nhdsSet, image_union, sSup_union]
 #align nhds_set_union nhdsSet_union
 
@@ -161,19 +161,19 @@ theorem union_mem_nhdsSet (h₁ : s₁ ∈ 𝓝˒ t₁) (hβ‚‚ : sβ‚‚ ∈ 𝓝˒
 #align union_mem_nhds_set union_mem_nhdsSet
 
 @[simp]
-theorem nhdsSet_insert (x : Ξ±) (s : Set Ξ±) : 𝓝˒ (insert x s) = 𝓝 x βŠ” 𝓝˒ s := by
+theorem nhdsSet_insert (x : X) (s : Set X) : 𝓝˒ (insert x s) = 𝓝 x βŠ” 𝓝˒ s := by
   rw [insert_eq, nhdsSet_union, nhdsSet_singleton]
 
 /-- Preimage of a set neighborhood of `t` under a continuous map `f` is a set neighborhood of `s`
 provided that `f` maps `s` to `t`.  -/
-theorem Continuous.tendsto_nhdsSet {f : Ξ± β†’ Ξ²} {t : Set Ξ²} (hf : Continuous f)
+theorem Continuous.tendsto_nhdsSet {f : X β†’ Y} {t : Set Y} (hf : Continuous f)
     (hst : MapsTo f s t) : Tendsto f (𝓝˒ s) (𝓝˒ t) :=
   ((hasBasis_nhdsSet s).tendsto_iff (hasBasis_nhdsSet t)).mpr fun U hU =>
     ⟨f ⁻¹' U, ⟨hU.1.preimage hf, hst.mono Subset.rfl hU.2⟩, fun _ => id⟩
 #align continuous.tendsto_nhds_set Continuous.tendsto_nhdsSet
 
-lemma Continuous.tendsto_nhdsSet_nhds {X Y : Type*} [TopologicalSpace X] [TopologicalSpace Y]
-    {s : Set X} {y : Y} {f : X β†’ Y} (h : Continuous f) (h' : EqOn f (fun _ ↦ y) s) :
+lemma Continuous.tendsto_nhdsSet_nhds
+    {y : Y} {f : X β†’ Y} (h : Continuous f) (h' : EqOn f (fun _ ↦ y) s) :
     Tendsto f (𝓝˒ s) (𝓝 y) := by
   rw [← nhdsSet_singleton]
   exact h.tendsto_nhdsSet h'
chore: space after ← (#8178)

Co-authored-by: Moritz Firsching <firsching@google.com>

Diff
@@ -175,5 +175,5 @@ theorem Continuous.tendsto_nhdsSet {f : Ξ± β†’ Ξ²} {t : Set Ξ²} (hf : Continuous
 lemma Continuous.tendsto_nhdsSet_nhds {X Y : Type*} [TopologicalSpace X] [TopologicalSpace Y]
     {s : Set X} {y : Y} {f : X β†’ Y} (h : Continuous f) (h' : EqOn f (fun _ ↦ y) s) :
     Tendsto f (𝓝˒ s) (𝓝 y) := by
-  rw [←nhdsSet_singleton]
+  rw [← nhdsSet_singleton]
   exact h.tendsto_nhdsSet h'
feat(Topology/CompletelyRegular): Add definition CompletelyRegularSpace (#7926)

Add definitions CompletelyRegularSpace and T35Space.

Diff
@@ -171,3 +171,9 @@ theorem Continuous.tendsto_nhdsSet {f : Ξ± β†’ Ξ²} {t : Set Ξ²} (hf : Continuous
   ((hasBasis_nhdsSet s).tendsto_iff (hasBasis_nhdsSet t)).mpr fun U hU =>
     ⟨f ⁻¹' U, ⟨hU.1.preimage hf, hst.mono Subset.rfl hU.2⟩, fun _ => id⟩
 #align continuous.tendsto_nhds_set Continuous.tendsto_nhdsSet
+
+lemma Continuous.tendsto_nhdsSet_nhds {X Y : Type*} [TopologicalSpace X] [TopologicalSpace Y]
+    {s : Set X} {y : Y} {f : X β†’ Y} (h : Continuous f) (h' : EqOn f (fun _ ↦ y) s) :
+    Tendsto f (𝓝˒ s) (𝓝 y) := by
+  rw [←nhdsSet_singleton]
+  exact h.tendsto_nhdsSet h'
feat(NhdsSet): lemmas from the Mandelbrot set connectedness project (#7914)

Add eventually_nhdsSet_iff_exists, eventually_nhdsSet_iff_forall, and IsOpen.mem_nhdsSet_self.

Co-authored-by: @girving

Diff
@@ -71,6 +71,17 @@ theorem mem_nhdsSet_iff_exists : s ∈ 𝓝˒ t ↔ βˆƒ U : Set Ξ±, IsOpen U ∧
   rw [← subset_interior_iff_mem_nhdsSet, subset_interior_iff]
 #align mem_nhds_set_iff_exists mem_nhdsSet_iff_exists
 
+/-- A proposition is true on a set neighborhood of `s` iff it is true on a larger open set -/
+theorem eventually_nhdsSet_iff_exists {p : Ξ± β†’ Prop} :
+    (βˆ€αΆ  x in 𝓝˒ s, p x) ↔ βˆƒ t, IsOpen t ∧ s βŠ† t ∧ βˆ€ x, x ∈ t β†’ p x :=
+  mem_nhdsSet_iff_exists
+
+/-- A proposition is true on a set neighborhood of `s`
+iff it is eventually true near each point in the set. -/
+theorem eventually_nhdsSet_iff_forall {p : Ξ± β†’ Prop} :
+    (βˆ€αΆ  x in 𝓝˒ s, p x) ↔ βˆ€ x, x ∈ s β†’ βˆ€αΆ  y in 𝓝 x, p y :=
+  mem_nhdsSet_iff_forall
+
 theorem hasBasis_nhdsSet (s : Set Ξ±) : (𝓝˒ s).HasBasis (fun U => IsOpen U ∧ s βŠ† U) fun U => U :=
   ⟨fun t => by simp [mem_nhdsSet_iff_exists, and_assoc]⟩
 #align has_basis_nhds_set hasBasis_nhdsSet
@@ -79,6 +90,9 @@ theorem IsOpen.mem_nhdsSet (hU : IsOpen s) : s ∈ 𝓝˒ t ↔ t βŠ† s := by
   rw [← subset_interior_iff_mem_nhdsSet, hU.interior_eq]
 #align is_open.mem_nhds_set IsOpen.mem_nhdsSet
 
+/-- An open set belongs to its own set neighborhoods filter. -/
+theorem IsOpen.mem_nhdsSet_self (ho : IsOpen s) : s ∈ 𝓝˒ s := ho.mem_nhdsSet.mpr Subset.rfl
+
 theorem principal_le_nhdsSet : π“Ÿ s ≀ 𝓝˒ s := fun _s hs =>
   (subset_interior_iff_mem_nhdsSet.mpr hs).trans interior_subset
 #align principal_le_nhds_set principal_le_nhdsSet
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
@@ -29,7 +29,8 @@ Furthermore, we have the following results:
 
 open Set Filter Topology
 
-variable {Ξ± Ξ² : Type*} [TopologicalSpace Ξ±] [TopologicalSpace Ξ²] {s t s₁ sβ‚‚ t₁ tβ‚‚ : Set Ξ±} {x : Ξ±}
+variable {Ξ± Ξ² : Type*} [TopologicalSpace Ξ±] [TopologicalSpace Ξ²] {f : Filter Ξ±}
+  {s t s₁ sβ‚‚ t₁ tβ‚‚ : Set Ξ±} {x : Ξ±}
 
 /-- The filter of neighborhoods of a set in a topological space. -/
 def nhdsSet (s : Set Ξ±) : Filter Ξ± :=
@@ -48,6 +49,8 @@ theorem mem_nhdsSet_iff_forall : s ∈ 𝓝˒ t ↔ βˆ€ x : Ξ±, x ∈ t β†’ s 
   simp_rw [nhdsSet, Filter.mem_sSup, ball_image_iff]
 #align mem_nhds_set_iff_forall mem_nhdsSet_iff_forall
 
+lemma nhdsSet_le : 𝓝˒ s ≀ f ↔ βˆ€ a ∈ s, 𝓝 a ≀ f := by simp [nhdsSet]
+
 theorem bUnion_mem_nhdsSet {t : Ξ± β†’ Set Ξ±} (h : βˆ€ x ∈ s, t x ∈ 𝓝 x) : (⋃ x ∈ s, t x) ∈ 𝓝˒ s :=
   mem_nhdsSet_iff_forall.2 fun x hx => mem_of_superset (h x hx) <|
     subset_iUnionβ‚‚ (s := fun x _ => t x) x hx -- porting note: fails to find `s`
feat: patch for new alias command (#6172)
Diff
@@ -94,7 +94,7 @@ theorem nhdsSet_eq_principal_iff : 𝓝˒ s = π“Ÿ s ↔ IsOpen s := by
     isOpen_iff_mem_nhds]
 #align nhds_set_eq_principal_iff nhdsSet_eq_principal_iff
 
-alias nhdsSet_eq_principal_iff ↔ _ IsOpen.nhdsSet_eq
+alias ⟨_, IsOpen.nhdsSet_eq⟩ := nhdsSet_eq_principal_iff
 #align is_open.nhds_set_eq IsOpen.nhdsSet_eq
 
 @[simp]
feat: add Filter.Eventually.self_of_nhdsSet (#6497)

Also add subset_of_mem_nhdsSet. From the Sphere Eversion Project.

Diff
@@ -80,6 +80,14 @@ theorem principal_le_nhdsSet : π“Ÿ s ≀ 𝓝˒ s := fun _s hs =>
   (subset_interior_iff_mem_nhdsSet.mpr hs).trans interior_subset
 #align principal_le_nhds_set principal_le_nhdsSet
 
+theorem subset_of_mem_nhdsSet (h : t ∈ 𝓝˒ s) : s βŠ† t := principal_le_nhdsSet h
+
+theorem Filter.Eventually.self_of_nhdsSet {p : Ξ± β†’ Prop} (h : βˆ€αΆ  x in 𝓝˒ s, p x) : βˆ€ x ∈ s, p x :=
+  principal_le_nhdsSet h
+
+nonrec theorem Filter.EventuallyEq.self_of_nhdsSet {f g : Ξ± β†’ Ξ²} (h : f =αΆ [𝓝˒ s] g) : EqOn f g s :=
+  h.self_of_nhdsSet
+
 @[simp]
 theorem nhdsSet_eq_principal_iff : 𝓝˒ s = π“Ÿ s ↔ IsOpen s := by
   rw [← principal_le_nhdsSet.le_iff_eq, le_principal_iff, mem_nhdsSet_iff_forall,
@@ -95,9 +103,7 @@ theorem nhdsSet_interior : 𝓝˒ (interior s) = π“Ÿ (interior s) :=
 #align nhds_set_interior nhdsSet_interior
 
 @[simp]
-theorem nhdsSet_singleton : 𝓝˒ {x} = 𝓝 x := by
-  ext
-  rw [← subset_interior_iff_mem_nhdsSet, ← mem_interior_iff_mem_nhds, singleton_subset_iff]
+theorem nhdsSet_singleton : 𝓝˒ {x} = 𝓝 x := by simp [nhdsSet]
 #align nhds_set_singleton nhdsSet_singleton
 
 theorem mem_nhdsSet_interior : s ∈ 𝓝˒ (interior s) :=
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
@@ -29,7 +29,7 @@ Furthermore, we have the following results:
 
 open Set Filter Topology
 
-variable {Ξ± Ξ² : Type _} [TopologicalSpace Ξ±] [TopologicalSpace Ξ²] {s t s₁ sβ‚‚ t₁ tβ‚‚ : Set Ξ±} {x : Ξ±}
+variable {Ξ± Ξ² : Type*} [TopologicalSpace Ξ±] [TopologicalSpace Ξ²] {s t s₁ sβ‚‚ t₁ tβ‚‚ : Set Ξ±} {x : Ξ±}
 
 /-- The filter of neighborhoods of a set in a topological space. -/
 def nhdsSet (s : Set Ξ±) : Filter Ξ± :=
feat(Topology/Order/NhdsSet): new file (#6161)

Prove lemmas about neighborhoods of intervals.

Some lemmas are TC-generalizations of lemmas from the Sphere Eversion Project.

Diff
@@ -137,6 +137,10 @@ theorem union_mem_nhdsSet (h₁ : s₁ ∈ 𝓝˒ t₁) (hβ‚‚ : sβ‚‚ ∈ 𝓝˒
   exact union_mem_sup h₁ hβ‚‚
 #align union_mem_nhds_set union_mem_nhdsSet
 
+@[simp]
+theorem nhdsSet_insert (x : Ξ±) (s : Set Ξ±) : 𝓝˒ (insert x s) = 𝓝 x βŠ” 𝓝˒ s := by
+  rw [insert_eq, nhdsSet_union, nhdsSet_singleton]
+
 /-- Preimage of a set neighborhood of `t` under a continuous map `f` is a set neighborhood of `s`
 provided that `f` maps `s` to `t`.  -/
 theorem Continuous.tendsto_nhdsSet {f : Ξ± β†’ Ξ²} {t : Set Ξ²} (hf : Continuous f)
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,14 +2,11 @@
 Copyright (c) 2022 Floris van Doorn. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Floris van Doorn, Patrick Massot
-
-! This file was ported from Lean 3 source module topology.nhds_set
-! leanprover-community/mathlib commit f2ce6086713c78a7f880485f7917ea547a215982
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Topology.Basic
 
+#align_import topology.nhds_set from "leanprover-community/mathlib"@"f2ce6086713c78a7f880485f7917ea547a215982"
+
 /-!
 # Neighborhoods of a set
 
chore: Rename to sSup/iSup (#3938)

As discussed on Zulip

Renames

  • supβ‚› β†’ sSup
  • infβ‚› β†’ sInf
  • supα΅’ β†’ iSup
  • infα΅’ β†’ iInf
  • bsupβ‚› β†’ bsSup
  • binfβ‚› β†’ bsInf
  • bsupα΅’ β†’ biSup
  • binfα΅’ β†’ biInf
  • csupβ‚› β†’ csSup
  • cinfβ‚› β†’ csInf
  • csupα΅’ β†’ ciSup
  • cinfα΅’ β†’ ciInf
  • unionβ‚› β†’ sUnion
  • interβ‚› β†’ sInter
  • unionα΅’ β†’ iUnion
  • interα΅’ β†’ iInter
  • bunionβ‚› β†’ bsUnion
  • binterβ‚› β†’ bsInter
  • bunionα΅’ β†’ biUnion
  • binterα΅’ β†’ biInter

Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>

Diff
@@ -36,7 +36,7 @@ variable {Ξ± Ξ² : Type _} [TopologicalSpace Ξ±] [TopologicalSpace Ξ²] {s t s₁
 
 /-- The filter of neighborhoods of a set in a topological space. -/
 def nhdsSet (s : Set Ξ±) : Filter Ξ± :=
-  supβ‚› (nhds '' s)
+  sSup (nhds '' s)
 #align nhds_set nhdsSet
 
 @[inherit_doc] scoped[Topology] notation "𝓝˒" => nhdsSet
@@ -48,12 +48,12 @@ theorem nhdsSet_diagonal (Ξ±) [TopologicalSpace (Ξ± Γ— Ξ±)] :
 #align nhds_set_diagonal nhdsSet_diagonal
 
 theorem mem_nhdsSet_iff_forall : s ∈ 𝓝˒ t ↔ βˆ€ x : Ξ±, x ∈ t β†’ s ∈ 𝓝 x := by
-  simp_rw [nhdsSet, Filter.mem_supβ‚›, ball_image_iff]
+  simp_rw [nhdsSet, Filter.mem_sSup, ball_image_iff]
 #align mem_nhds_set_iff_forall mem_nhdsSet_iff_forall
 
 theorem bUnion_mem_nhdsSet {t : Ξ± β†’ Set Ξ±} (h : βˆ€ x ∈ s, t x ∈ 𝓝 x) : (⋃ x ∈ s, t x) ∈ 𝓝˒ s :=
   mem_nhdsSet_iff_forall.2 fun x hx => mem_of_superset (h x hx) <|
-    subset_unionα΅’β‚‚ (s := fun x _ => t x) x hx -- porting note: fails to find `s`
+    subset_iUnionβ‚‚ (s := fun x _ => t x) x hx -- porting note: fails to find `s`
 #align bUnion_mem_nhds_set bUnion_mem_nhdsSet
 
 theorem subset_interior_iff_mem_nhdsSet : s βŠ† interior t ↔ t ∈ 𝓝˒ s := by
@@ -120,19 +120,19 @@ theorem nhdsSet_univ : 𝓝˒ (univ : Set Ξ±) = ⊀ := by rw [isOpen_univ.nhdsSe
 
 @[mono]
 theorem nhdsSet_mono (h : s βŠ† t) : 𝓝˒ s ≀ 𝓝˒ t :=
-  supβ‚›_le_supβ‚› <| image_subset _ h
+  sSup_le_sSup <| image_subset _ h
 #align nhds_set_mono nhdsSet_mono
 
 theorem monotone_nhdsSet : Monotone (𝓝˒ : Set Ξ± β†’ Filter Ξ±) := fun _ _ => nhdsSet_mono
 #align monotone_nhds_set monotone_nhdsSet
 
 theorem nhds_le_nhdsSet (h : x ∈ s) : 𝓝 x ≀ 𝓝˒ s :=
-  le_supβ‚› <| mem_image_of_mem _ h
+  le_sSup <| mem_image_of_mem _ h
 #align nhds_le_nhds_set nhds_le_nhdsSet
 
 @[simp]
 theorem nhdsSet_union (s t : Set Ξ±) : 𝓝˒ (s βˆͺ t) = 𝓝˒ s βŠ” 𝓝˒ t := by
-  simp only [nhdsSet, image_union, supβ‚›_union]
+  simp only [nhdsSet, image_union, sSup_union]
 #align nhds_set_union nhdsSet_union
 
 theorem union_mem_nhdsSet (h₁ : s₁ ∈ 𝓝˒ t₁) (hβ‚‚ : sβ‚‚ ∈ 𝓝˒ tβ‚‚) : s₁ βˆͺ sβ‚‚ ∈ 𝓝˒ (t₁ βˆͺ tβ‚‚) := by
@@ -147,4 +147,3 @@ theorem Continuous.tendsto_nhdsSet {f : Ξ± β†’ Ξ²} {t : Set Ξ²} (hf : Continuous
   ((hasBasis_nhdsSet s).tendsto_iff (hasBasis_nhdsSet t)).mpr fun U hU =>
     ⟨f ⁻¹' U, ⟨hU.1.preimage hf, hst.mono Subset.rfl hU.2⟩, fun _ => id⟩
 #align continuous.tendsto_nhds_set Continuous.tendsto_nhdsSet
-
feat: port Topology.Algebra.WithZeroTopology (#2703)
Diff
@@ -60,6 +60,13 @@ theorem subset_interior_iff_mem_nhdsSet : s βŠ† interior t ↔ t ∈ 𝓝˒ s :=
   simp_rw [mem_nhdsSet_iff_forall, subset_interior_iff_nhds]
 #align subset_interior_iff_mem_nhds_set subset_interior_iff_mem_nhdsSet
 
+theorem disjoint_principal_nhdsSet : Disjoint (π“Ÿ s) (𝓝˒ t) ↔ Disjoint (closure s) t := by
+  rw [disjoint_principal_left, ← subset_interior_iff_mem_nhdsSet, interior_compl,
+    subset_compl_iff_disjoint_left]
+
+theorem disjoint_nhdsSet_principal : Disjoint (𝓝˒ s) (π“Ÿ t) ↔ Disjoint s (closure t) := by
+  rw [disjoint_comm, disjoint_principal_nhdsSet, disjoint_comm]
+
 theorem mem_nhdsSet_iff_exists : s ∈ 𝓝˒ t ↔ βˆƒ U : Set Ξ±, IsOpen U ∧ t βŠ† U ∧ U βŠ† s := by
   rw [← subset_interior_iff_mem_nhdsSet, subset_interior_iff]
 #align mem_nhds_set_iff_exists mem_nhdsSet_iff_exists
chore: Restore most of the mono attribute (#2491)

Restore most of the mono attribute now that #1740 is merged.

I think I got all of the monos.

Diff
@@ -111,7 +111,7 @@ theorem mem_nhdsSet_empty : s ∈ 𝓝˒ (βˆ… : Set Ξ±) := by simp
 theorem nhdsSet_univ : 𝓝˒ (univ : Set Ξ±) = ⊀ := by rw [isOpen_univ.nhdsSet_eq, principal_univ]
 #align nhds_set_univ nhdsSet_univ
 
--- porting note: todo: restore @[mono]
+@[mono]
 theorem nhdsSet_mono (h : s βŠ† t) : 𝓝˒ s ≀ 𝓝˒ t :=
   supβ‚›_le_supβ‚› <| image_subset _ h
 #align nhds_set_mono nhdsSet_mono
chore: resync ported files (#2135)

This PR resyncs the first 28 entries of https://leanprover-community.github.io/mathlib-port-status/out-of-sync.html after sorting by diff size.

  • resync Mathlib/Data/Bool/Count
  • resync Mathlib/Order/Max
  • resync Mathlib/Algebra/EuclideanDomain/Instances
  • resync Mathlib/Data/List/Duplicate
  • resync Mathlib/Data/Multiset/Nodup
  • resync Mathlib/Data/Set/Pointwise/ListOfFn
  • resync Mathlib/Dynamics/FixedPoints/Basic
  • resync Mathlib/Order/OmegaCompletePartialOrder
  • resync Mathlib/Order/PropInstances
  • resync Mathlib/Topology/LocallyFinite
  • resync Mathlib/Data/Bool/Set
  • resync Mathlib/Data/Fintype/Card
  • resync Mathlib/Data/Multiset/Bind
  • resync Mathlib/Data/Rat/Floor
  • resync Mathlib/Algebra/Order/Floor
  • resync Mathlib/Data/Int/Basic
  • resync Mathlib/Data/Int/Dvd/Basic
  • resync Mathlib/Data/List/Sort
  • resync Mathlib/Data/Nat/GCD/Basic
  • resync Mathlib/Data/Set/Enumerate
  • resync Mathlib/Data/Set/Intervals/OrdConnectedComponent
  • resync Mathlib/GroupTheory/Subsemigroup/Basic
  • resync Mathlib/Topology/Connected
  • resync Mathlib/Topology/NhdsSet
  • resync Mathlib/Algebra/BigOperators/Multiset/Lemmas
  • resync Mathlib/Algebra/CharZero/Infinite
  • resync Mathlib/Data/Multiset/Range
  • resync Mathlib/Data/Set/Pointwise/Finite
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Floris van Doorn, Patrick Massot
 
 ! This file was ported from Lean 3 source module topology.nhds_set
-! leanprover-community/mathlib commit f7fc89d5d5ff1db2d1242c7bb0e9062ce47ef47c
+! leanprover-community/mathlib commit f2ce6086713c78a7f880485f7917ea547a215982
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
feat: port Topology.NhdsSet (#1875)

Co-authored-by: ChrisHughes24 <chrishughes24@gmail.com>

Dependencies 7 + 282

283 files ported (97.6%)
120526 lines ported (97.5%)
Show graph

The unported dependencies are