sorgenfrey_line
⟷
Counterexamples.SorgenfreyLine
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.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(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)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -8,7 +8,7 @@ import Topology.Algebra.Order.Archimedean
import Topology.Compactness.Paracompact
import Topology.Metrizable.Basic
import Topology.EMetricSpace.Paracompact
-import Data.Set.Intervals.Monotone
+import Order.Interval.Set.Monotone
#align_import sorgenfrey_line from "leanprover-community/mathlib"@"08b081ea92d80e3a41f899eea36ef6d56e0f1db0"
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -5,9 +5,9 @@ Authors: Yury Kudryashov
-/
import Topology.Instances.Irrational
import Topology.Algebra.Order.Archimedean
-import Topology.Paracompact
-import Topology.MetricSpace.Metrizable
-import Topology.MetricSpace.EmetricParacompact
+import Topology.Compactness.Paracompact
+import Topology.Metrizable.Basic
+import Topology.EMetricSpace.Paracompact
import Data.Set.Intervals.Monotone
#align_import sorgenfrey_line from "leanprover-community/mathlib"@"08b081ea92d80e3a41f899eea36ef6d56e0f1db0"
@@ -127,7 +127,7 @@ theorem isOpen_iff {s : Set ℝₗ} : IsOpen s ↔ ∀ x ∈ s, ∃ y > x, Ico x
isOpen_iff_mem_nhds.trans <| forall₂_congr fun x hx => (nhds_basis_Ico x).mem_iff
#align counterexample.sorgenfrey_line.is_open_iff Counterexample.SorgenfreyLine.isOpen_iff
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (x «expr ∉ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (x «expr ∉ » s) -/
theorem isClosed_iff {s : Set ℝₗ} : IsClosed s ↔ ∀ (x) (_ : x ∉ s), ∃ y > x, Disjoint (Ico x y) s :=
by simp only [← isOpen_compl_iff, is_open_iff, mem_compl_iff, subset_compl_iff_disjoint_right]
#align counterexample.sorgenfrey_line.is_closed_iff Counterexample.SorgenfreyLine.isClosed_iff
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -105,8 +105,8 @@ theorem nhds_basis_Ico_inv_pNat (a : ℝₗ) :
(nhds_basis_Ico a).to_hasBasis (fun b hb => _) fun n hn =>
⟨_, lt_add_of_pos_right _ (inv_pos.2 <| Nat.cast_pos.2 n.Pos), subset.rfl⟩
rcases exists_nat_one_div_lt (sub_pos.2 hb) with ⟨k, hk⟩
- rw [one_div] at hk
- rw [← Nat.cast_add_one] at hk
+ rw [one_div] at hk
+ rw [← Nat.cast_add_one] at hk
exact ⟨k.succ_pnat, trivial, Ico_subset_Ico_right (le_sub_iff_add_le'.1 hk.le)⟩
#align counterexample.sorgenfrey_line.nhds_basis_Ico_inv_pnat Counterexample.SorgenfreyLine.nhds_basis_Ico_inv_pNat
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -183,8 +183,8 @@ theorem isClopen_Ico (a b : ℝₗ) : IsClopen (Ico a b) :=
instance : TotallyDisconnectedSpace ℝₗ :=
⟨fun s hs' hs x hx y hy =>
- le_antisymm (hs.subset_clopen (isClopen_Ici x) ⟨x, hx, le_rfl⟩ hy)
- (hs.subset_clopen (isClopen_Ici y) ⟨y, hy, le_rfl⟩ hx)⟩
+ le_antisymm (hs.subset_isClopen (isClopen_Ici x) ⟨x, hx, le_rfl⟩ hy)
+ (hs.subset_isClopen (isClopen_Ici y) ⟨y, hy, le_rfl⟩ hx)⟩
instance : FirstCountableTopology ℝₗ :=
⟨fun x => (nhds_basis_Ico_rat x).IsCountablyGenerated⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/3365b20c2ffa7c35e47e5209b89ba9abdddf3ffe
@@ -85,7 +85,7 @@ theorem nhds_basis_Ico (a : ℝₗ) : (𝓝 a).HasBasis (fun b => a < b) fun b =
iInf_inf, this, iInf_subtype]
suffices : (⨅ x ∈ Ioi a, 𝓟 (Iio x)).HasBasis ((· < ·) a) Iio; exact this.principal_inf _
refine' has_basis_binfi_principal _ nonempty_Ioi
- exact directedOn_iff_directed.2 (directed_of_inf fun x y hxy => Iio_subset_Iio hxy)
+ exact directedOn_iff_directed.2 (directed_of_isDirected_ge fun x y hxy => Iio_subset_Iio hxy)
#align counterexample.sorgenfrey_line.nhds_basis_Ico Counterexample.SorgenfreyLine.nhds_basis_Ico
theorem nhds_basis_Ico_rat (a : ℝₗ) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,12 +3,12 @@ Copyright (c) 2022 Yury Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov
-/
-import Mathbin.Topology.Instances.Irrational
-import Mathbin.Topology.Algebra.Order.Archimedean
-import Mathbin.Topology.Paracompact
-import Mathbin.Topology.MetricSpace.Metrizable
-import Mathbin.Topology.MetricSpace.EmetricParacompact
-import Mathbin.Data.Set.Intervals.Monotone
+import Topology.Instances.Irrational
+import Topology.Algebra.Order.Archimedean
+import Topology.Paracompact
+import Topology.MetricSpace.Metrizable
+import Topology.MetricSpace.EmetricParacompact
+import Data.Set.Intervals.Monotone
#align_import sorgenfrey_line from "leanprover-community/mathlib"@"08b081ea92d80e3a41f899eea36ef6d56e0f1db0"
@@ -127,7 +127,7 @@ theorem isOpen_iff {s : Set ℝₗ} : IsOpen s ↔ ∀ x ∈ s, ∃ y > x, Ico x
isOpen_iff_mem_nhds.trans <| forall₂_congr fun x hx => (nhds_basis_Ico x).mem_iff
#align counterexample.sorgenfrey_line.is_open_iff Counterexample.SorgenfreyLine.isOpen_iff
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x «expr ∉ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (x «expr ∉ » s) -/
theorem isClosed_iff {s : Set ℝₗ} : IsClosed s ↔ ∀ (x) (_ : x ∉ s), ∃ y > x, Disjoint (Ico x y) s :=
by simp only [← isOpen_compl_iff, is_open_iff, mem_compl_iff, subset_compl_iff_disjoint_right]
#align counterexample.sorgenfrey_line.is_closed_iff Counterexample.SorgenfreyLine.isClosed_iff
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,11 +2,6 @@
Copyright (c) 2022 Yury Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov
-
-! This file was ported from Lean 3 source module sorgenfrey_line
-! leanprover-community/mathlib commit 08b081ea92d80e3a41f899eea36ef6d56e0f1db0
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Topology.Instances.Irrational
import Mathbin.Topology.Algebra.Order.Archimedean
@@ -15,6 +10,8 @@ import Mathbin.Topology.MetricSpace.Metrizable
import Mathbin.Topology.MetricSpace.EmetricParacompact
import Mathbin.Data.Set.Intervals.Monotone
+#align_import sorgenfrey_line from "leanprover-community/mathlib"@"08b081ea92d80e3a41f899eea36ef6d56e0f1db0"
+
/-!
# Sorgenfrey line
@@ -130,7 +127,7 @@ theorem isOpen_iff {s : Set ℝₗ} : IsOpen s ↔ ∀ x ∈ s, ∃ y > x, Ico x
isOpen_iff_mem_nhds.trans <| forall₂_congr fun x hx => (nhds_basis_Ico x).mem_iff
#align counterexample.sorgenfrey_line.is_open_iff Counterexample.SorgenfreyLine.isOpen_iff
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x «expr ∉ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x «expr ∉ » s) -/
theorem isClosed_iff {s : Set ℝₗ} : IsClosed s ↔ ∀ (x) (_ : x ∉ s), ∃ y > x, Disjoint (Ico x y) s :=
by simp only [← isOpen_compl_iff, is_open_iff, mem_compl_iff, subset_compl_iff_disjoint_right]
#align counterexample.sorgenfrey_line.is_closed_iff Counterexample.SorgenfreyLine.isClosed_iff
mathlib commit https://github.com/leanprover-community/mathlib/commit/bf2428c9486c407ca38b5b3fb10b87dad0bc99fa
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov
! This file was ported from Lean 3 source module sorgenfrey_line
-! leanprover-community/mathlib commit 328375597f2c0dd00522d9c2e5a33b6a6128feeb
+! leanprover-community/mathlib commit 08b081ea92d80e3a41f899eea36ef6d56e0f1db0
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -18,6 +18,9 @@ import Mathbin.Data.Set.Intervals.Monotone
/-!
# Sorgenfrey line
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
In this file we define `sorgenfrey_line` (notation: `ℝₗ`) to be the Sorgenfrey line. It is the real
line with the topology space structure generated by half-open intervals `set.Ico a b`.
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -51,7 +51,6 @@ def SorgenfreyLine : Type :=
deriving ConditionallyCompleteLinearOrder, LinearOrderedField, Archimedean
#align counterexample.sorgenfrey_line Counterexample.SorgenfreyLine
--- mathport name: sorgenfrey_line
scoped[SorgenfreyLine] notation "ℝₗ" => SorgenfreyLine
namespace SorgenfreyLine
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -214,13 +214,11 @@ instance : T5Space ℝₗ :=
min (X x) (Y y) ≤ X x := min_le_left _ _
_ ≤ y := (not_lt.1 fun hyx => (hXd x hx).le_bot ⟨⟨hle, hyx⟩, subset_closure hy⟩)
_ ≤ max x y := le_max_right _ _
-
·
calc
min (X x) (Y y) ≤ Y y := min_le_right _ _
_ ≤ x := (not_lt.1 fun hxy => (hYd y hy).le_bot ⟨⟨hle, hxy⟩, subset_closure hx⟩)
_ ≤ max x y := le_max_left _ _
-
theorem denseRange_coe_rat : DenseRange (coe : ℚ → ℝₗ) :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/31c24aa72e7b3e5ed97a8412470e904f82b81004
@@ -128,7 +128,7 @@ theorem isOpen_iff {s : Set ℝₗ} : IsOpen s ↔ ∀ x ∈ s, ∃ y > x, Ico x
isOpen_iff_mem_nhds.trans <| forall₂_congr fun x hx => (nhds_basis_Ico x).mem_iff
#align counterexample.sorgenfrey_line.is_open_iff Counterexample.SorgenfreyLine.isOpen_iff
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x «expr ∉ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x «expr ∉ » s) -/
theorem isClosed_iff {s : Set ℝₗ} : IsClosed s ↔ ∀ (x) (_ : x ∉ s), ∃ y > x, Disjoint (Ico x y) s :=
by simp only [← isOpen_compl_iff, is_open_iff, mem_compl_iff, subset_compl_iff_disjoint_right]
#align counterexample.sorgenfrey_line.is_closed_iff Counterexample.SorgenfreyLine.isClosed_iff
mathlib commit https://github.com/leanprover-community/mathlib/commit/a3209ddf94136d36e5e5c624b10b2a347cc9d090
Move Set.Ixx
, Finset.Ixx
, Multiset.Ixx
together under two different folders:
Order.Interval
for their definition and basic propertiesAlgebra.Order.Interval
for their algebraic propertiesMove the definitions of Multiset.Ixx
to what is now Order.Interval.Multiset
. I believe we could just delete this file in a later PR as nothing uses it (and I already had doubts when defining Multiset.Ixx
three years ago).
Move the algebraic results out of what is now Order.Interval.Finset.Basic
to a new file Algebra.Order.Interval.Finset.Basic
.
@@ -3,12 +3,12 @@ Copyright (c) 2022 Yury Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov
-/
+import Mathlib.Order.Interval.Set.Monotone
import Mathlib.Topology.Instances.Irrational
import Mathlib.Topology.Algebra.Order.Archimedean
import Mathlib.Topology.Compactness.Paracompact
import Mathlib.Topology.Metrizable.Urysohn
import Mathlib.Topology.EMetricSpace.Paracompact
-import Mathlib.Data.Set.Intervals.Monotone
import Mathlib.Topology.Separation.NotNormal
import Mathlib.Topology.Baire.Lemmas
import Mathlib.Topology.Baire.LocallyCompactRegular
@@ -217,16 +217,16 @@ instance : T5Space ℝₗ := by
_ ≤ x := (not_lt.1 fun hxy => (hYd y hy).le_bot ⟨⟨hle, hxy⟩, subset_closure hx⟩)
_ ≤ max x y := le_max_left _ _
-theorem denseRange_coe_rat : DenseRange ((↑) : ℚ → ℝₗ) := by
+theorem denseRange_ratCast : DenseRange ((↑) : ℚ → ℝₗ) := by
refine' dense_iff_inter_open.2 _
rintro U Uo ⟨x, hx⟩
rcases isOpen_iff.1 Uo _ hx with ⟨y, hxy, hU⟩
rcases exists_rat_btwn hxy with ⟨z, hxz, hzy⟩
exact ⟨z, hU ⟨hxz.le, hzy⟩, mem_range_self _⟩
-#align counterexample.sorgenfrey_line.dense_range_coe_rat Counterexample.SorgenfreyLine.denseRange_coe_rat
+#align counterexample.sorgenfrey_line.dense_range_coe_rat Counterexample.SorgenfreyLine.denseRange_ratCast
instance : SeparableSpace ℝₗ :=
- ⟨⟨_, countable_range _, denseRange_coe_rat⟩⟩
+ ⟨⟨_, countable_range _, denseRange_ratCast⟩⟩
theorem isClosed_antidiagonal (c : ℝₗ) : IsClosed {x : ℝₗ × ℝₗ | x.1 + x.2 = c} :=
isClosed_singleton.preimage continuous_add
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.
@@ -84,7 +84,7 @@ theorem nhds_basis_Ico (a : ℝₗ) : (𝓝 a).HasBasis (a < ·) (Ico a ·) := b
haveI : Nonempty { x // x ≤ a } := Set.nonempty_Iic_subtype
have : (⨅ x : { i // i ≤ a }, 𝓟 (Ici ↑x)) = 𝓟 (Ici a) := by
refine' (IsLeast.isGLB _).iInf_eq
- exact ⟨⟨⟨a, le_rfl⟩, rfl⟩, forall_range_iff.2 fun b => principal_mono.2 <| Ici_subset_Ici.2 b.2⟩
+ exact ⟨⟨⟨a, le_rfl⟩, rfl⟩, forall_mem_range.2 fun b => principal_mono.2 <| Ici_subset_Ici.2 b.2⟩
simp only [mem_setOf_eq, iInf_and, iInf_exists, @iInf_comm _ (_ ∈ _), @iInf_comm _ (Set ℝₗ),
iInf_iInf_eq_right, mem_Ico]
simp_rw [@iInf_comm _ ℝₗ (_ ≤ _), iInf_subtype', ← Ici_inter_Iio, ← inf_principal,
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -47,7 +47,7 @@ noncomputable section
/-- The Sorgenfrey line. It is the real line with the topology space structure generated by
half-open intervals `Set.Ico a b`. -/
def SorgenfreyLine : Type := ℝ
--- porting note: was deriving ConditionallyCompleteLinearOrder, LinearOrderedField, Archimedean
+-- Porting note: was deriving ConditionallyCompleteLinearOrder, LinearOrderedField, Archimedean
#align counterexample.sorgenfrey_line Counterexample.SorgenfreyLine
@[inherit_doc]
MetricSpace/Baire
(#10648)
Topology/Defs/Basic
;Topology/Baire/Lemmas
;Topology/Baire/CompleteMetrizable
and Topology/Baire/LocallyCompactRegular
;[UniformSpace X] [IsCountablyGenerated (𝓤 X)]
instead of [PseudoMetricSpace X]
in the 1st theorem.This way Lemmas
file does not depend on analysis.
@@ -10,7 +10,8 @@ import Mathlib.Topology.Metrizable.Urysohn
import Mathlib.Topology.EMetricSpace.Paracompact
import Mathlib.Data.Set.Intervals.Monotone
import Mathlib.Topology.Separation.NotNormal
-import Mathlib.Topology.MetricSpace.Baire
+import Mathlib.Topology.Baire.Lemmas
+import Mathlib.Topology.Baire.LocallyCompactRegular
#align_import sorgenfrey_line from "leanprover-community/mathlib"@"328375597f2c0dd00522d9c2e5a33b6a6128feeb"
@@ -315,14 +315,14 @@ theorem not_separatedNhds_rat_irrational_antidiag :
have Hd : Dense (⋃ n, interior (C n)) :=
IsGδ.setOf_irrational.dense_iUnion_interior_of_closed dense_irrational
(fun _ => isClosed_closure) H
- obtain ⟨N, hN⟩ : ∃ n : ℕ+, (interior <| C n).Nonempty; exact nonempty_iUnion.mp Hd.nonempty
+ obtain ⟨N, hN⟩ : ∃ n : ℕ+, (interior <| C n).Nonempty := nonempty_iUnion.mp Hd.nonempty
/- Choose a rational number `r` in the interior of the closure of `C N`, then choose `n ≥ N > 0`
such that `Ico r (r + n⁻¹) × Ico (-r) (-r + n⁻¹) ⊆ U`. -/
rcases Rat.denseRange_cast.exists_mem_open isOpen_interior hN with ⟨r, hr⟩
have hrU : ((r, -r) : ℝₗ × ℝₗ) ∈ U := @SU (r, -r) ⟨add_neg_self _, r, rfl⟩
obtain ⟨n, hnN, hn⟩ :
- ∃ n, N ≤ n ∧ Ico (r : ℝₗ) (r + (n : ℝₗ)⁻¹) ×ˢ Ico (-r : ℝₗ) (-r + (n : ℝₗ)⁻¹) ⊆ U
- exact ((nhds_prod_antitone_basis_inv_pnat _ _).hasBasis_ge N).mem_iff.1 (Uo.mem_nhds hrU)
+ ∃ n, N ≤ n ∧ Ico (r : ℝₗ) (r + (n : ℝₗ)⁻¹) ×ˢ Ico (-r : ℝₗ) (-r + (n : ℝₗ)⁻¹) ⊆ U :=
+ ((nhds_prod_antitone_basis_inv_pnat _ _).hasBasis_ge N).mem_iff.1 (Uo.mem_nhds hrU)
/- Finally, choose `x ∈ Ioo (r : ℝ) (r + n⁻¹) ∩ C N`. Then `(x, -r)` belongs both to `U` and `V`,
so they are not disjoint. This contradiction completes the proof. -/
obtain ⟨x, hxn, hx_irr, rfl⟩ :
have
, replace
and suffices
(#10640)
No changes to tactic file, it's just boring fixes throughout the library.
This follows on from #6964.
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -88,8 +88,8 @@ theorem nhds_basis_Ico (a : ℝₗ) : (𝓝 a).HasBasis (a < ·) (Ico a ·) := b
iInf_iInf_eq_right, mem_Ico]
simp_rw [@iInf_comm _ ℝₗ (_ ≤ _), iInf_subtype', ← Ici_inter_Iio, ← inf_principal,
← inf_iInf, ← iInf_inf, this, iInf_subtype]
- suffices : (⨅ x ∈ Ioi a, 𝓟 (Iio x)).HasBasis (a < ·) Iio; exact this.principal_inf _
- refine' hasBasis_biInf_principal _ nonempty_Ioi
+ suffices (⨅ x ∈ Ioi a, 𝓟 (Iio x)).HasBasis (a < ·) Iio from this.principal_inf _
+ refine hasBasis_biInf_principal ?_ nonempty_Ioi
exact directedOn_iff_directed.2 <| Monotone.directed_ge fun x y hxy ↦ Iio_subset_Iio hxy
#align counterexample.sorgenfrey_line.nhds_basis_Ico Counterexample.SorgenfreyLine.nhds_basis_Ico
Rename many isGδ_some
lemmas to IsGδ.some
.
Also resolve a TODO.
@@ -10,6 +10,7 @@ import Mathlib.Topology.Metrizable.Urysohn
import Mathlib.Topology.EMetricSpace.Paracompact
import Mathlib.Data.Set.Intervals.Monotone
import Mathlib.Topology.Separation.NotNormal
+import Mathlib.Topology.MetricSpace.Baire
#align_import sorgenfrey_line from "leanprover-community/mathlib"@"328375597f2c0dd00522d9c2e5a33b6a6128feeb"
@@ -312,7 +313,8 @@ theorem not_separatedNhds_rat_irrational_antidiag :
have H : {x : ℝ | Irrational x} ⊆ ⋃ n, C n := fun x hx =>
mem_iUnion.2 ⟨_, subset_closure ⟨hx, rfl⟩⟩
have Hd : Dense (⋃ n, interior (C n)) :=
- isGδ_irrational.dense_iUnion_interior_of_closed dense_irrational (fun _ => isClosed_closure) H
+ IsGδ.setOf_irrational.dense_iUnion_interior_of_closed dense_irrational
+ (fun _ => isClosed_closure) H
obtain ⟨N, hN⟩ : ∃ n : ℕ+, (interior <| C n).Nonempty; exact nonempty_iUnion.mp Hd.nonempty
/- Choose a rational number `r` in the interior of the closure of `C N`, then choose `n ≥ N > 0`
such that `Ico r (r + n⁻¹) × Ico (-r) (-r + n⁻¹) ⊆ U`. -/
IsSeparable
API (#10286)
isSeparable_iUnion
to an Iff
lemma, restore the original version as IsSeparable.iUnion
;isSeparable_union
and isSeparable_closure
;isSeparable_pi
from [Finite ι]
to [Countable ι]
, add IsSeparable.univ_pi
version;Dense.isSeparable_iff
and isSeparable_range
;isSeparable_of_separableSpace_subtype
to IsSeparable.of_subtype
;isSeparable_of_separableSpace
to IsSeparable.of_separableSpace
.@@ -270,7 +270,7 @@ theorem not_normalSpace_prod : ¬NormalSpace (ℝₗ × ℝₗ) :=
/-- An antidiagonal is a separable set but is not a separable space. -/
theorem isSeparable_antidiagonal (c : ℝₗ) : IsSeparable {x : ℝₗ × ℝₗ | x.1 + x.2 = c} :=
- isSeparable_of_separableSpace _
+ .of_separableSpace _
/-- An antidiagonal is a separable set but is not a separable space. -/
theorem not_separableSpace_antidiagonal (c : ℝₗ) :
@[inherit_doc]
on notations (#9942)
Make all the notations that unambiguously should inherit the docstring of their definition actually inherit it.
Also write a few docstrings by hand. I only wrote the ones I was competent to write and which I was sure of. Some docstrings come from mathlib3 as they were lost during the early port.
This PR is only intended as a first pass There are many more docstrings to add.
@@ -48,6 +48,7 @@ def SorgenfreyLine : Type := ℝ
-- porting note: was deriving ConditionallyCompleteLinearOrder, LinearOrderedField, Archimedean
#align counterexample.sorgenfrey_line Counterexample.SorgenfreyLine
+@[inherit_doc]
scoped[SorgenfreyLine] notation "ℝₗ" => Counterexample.SorgenfreyLine
open scoped SorgenfreyLine
@@ -166,7 +166,7 @@ instance : ContinuousAdd ℝₗ := by
exact (continuous_add.tendsto _).inf (MapsTo.tendsto fun x hx => add_le_add hx.1 hx.2)
theorem isClopen_Ici (a : ℝₗ) : IsClopen (Ici a) :=
- ⟨isOpen_Ici a, isClosed_Ici⟩
+ ⟨isClosed_Ici, isOpen_Ici a⟩
#align counterexample.sorgenfrey_line.is_clopen_Ici Counterexample.SorgenfreyLine.isClopen_Ici
theorem isClopen_Iio (a : ℝₗ) : IsClopen (Iio a) := by
@@ -247,7 +247,7 @@ theorem isClosed_of_subset_antidiagonal {s : Set (ℝₗ × ℝₗ)} {c : ℝₗ
obtain rfl : x + y = c := by
change (x, y) ∈ {p : ℝₗ × ℝₗ | p.1 + p.2 = c}
exact closure_minimal (hs : s ⊆ {x | x.1 + x.2 = c}) (isClosed_antidiagonal c) H
- rcases mem_closure_iff.1 H (Ici (x, y)) (isClopen_Ici_prod _).1 left_mem_Ici with
+ rcases mem_closure_iff.1 H (Ici (x, y)) (isClopen_Ici_prod _).2 left_mem_Ici with
⟨⟨x', y'⟩, ⟨hx : x ≤ x', hy : y ≤ y'⟩, H⟩
convert H
· refine' hx.antisymm _
$
with <|
(#9319)
See Zulip thread for the discussion.
@@ -118,7 +118,7 @@ theorem nhds_antitone_basis_Ico_inv_pnat (a : ℝₗ) :
(𝓝 a).HasAntitoneBasis fun n : ℕ+ => Ico a (a + (n : ℝₗ)⁻¹) :=
⟨nhds_basis_Ico_inv_pnat a, monotone_const.Ico <| Antitone.const_add
(fun k _l hkl => inv_le_inv_of_le (Nat.cast_pos.2 k.2)
- (Nat.mono_cast $ Subtype.coe_le_coe.2 hkl)) _⟩
+ (Nat.mono_cast <| Subtype.coe_le_coe.2 hkl)) _⟩
#align counterexample.sorgenfrey_line.nhds_antitone_basis_Ico_inv_pnat Counterexample.SorgenfreyLine.nhds_antitone_basis_Ico_inv_pnat
theorem isOpen_iff {s : Set ℝₗ} : IsOpen s ↔ ∀ x ∈ s, ∃ y > x, Ico x y ⊆ s :=
cases'
(#9171)
I literally went through and regex'd some uses of cases'
, replacing them with rcases
; this is meant to be a low effort PR as I hope that tools can do this in the future.
rcases
is an easier replacement than cases
, though with better tools we could in future do a second pass converting simple rcases
added here (and existing ones) to cases
.
@@ -204,7 +204,7 @@ instance : T5Space ℝₗ := by
(bUnion_mem_nhdsSet fun y hy => (isOpen_Ico y (Y y)).mem_nhds <| left_mem_Ico.2 (hY y hy))
simp only [disjoint_iUnion_left, disjoint_iUnion_right, Ico_disjoint_Ico]
intro y hy x hx
- cases' le_total x y with hle hle
+ rcases le_total x y with hle | hle
· calc
min (X x) (Y y) ≤ X x := min_le_left _ _
_ ≤ y := (not_lt.1 fun hyx => (hXd x hx).le_bot ⟨⟨hle, hyx⟩, subset_closure hy⟩)
This PR renames the field Clopens.clopen' -> Clopens.isClopen', and the lemmas
as well as: ClopenUpperSet.clopen -> ClopenUpperSet.isClopen connectedComponent_eq_iInter_clopen -> connectedComponent_eq_iInter_isClopen connectedComponent_subset_iInter_clopen -> connectedComponent_subset_iInter_isClopen continuous_boolIndicator_iff_clopen -> continuous_boolIndicator_iff_isClopen continuousOn_boolIndicator_iff_clopen -> continuousOn_boolIndicator_iff_isClopen DiscreteQuotient.ofClopen -> DiscreteQuotient.ofIsClopen disjoint_or_subset_of_clopen -> disjoint_or_subset_of_isClopen exists_clopen_{lower,upper}of_not_le -> exists_isClopen{lower,upper}_of_not_le exists_clopen_of_cofiltered -> exists_isClopen_of_cofiltered exists_clopen_of_totally_separated -> exists_isClopen_of_totally_separated exists_clopen_upper_or_lower_of_ne -> exists_isClopen_upper_or_lower_of_ne IsPreconnected.subset_clopen -> IsPreconnected.subset_isClopen isTotallyDisconnected_of_clopen_set -> isTotallyDisconnected_of_isClopen_set LocallyConstant.ofClopen_fiber_one -> LocallyConstant.ofIsClopen_fiber_one LocallyConstant.ofClopen_fiber_zero -> LocallyConstant.ofIsClopen_fiber_zero LocallyConstant.ofClopen -> LocallyConstant.ofIsClopen preimage_clopen_of_clopen -> preimage_isClopen_of_isClopen TopologicalSpace.Clopens.clopen -> TopologicalSpace.Clopens.isClopen
@@ -179,8 +179,8 @@ theorem isClopen_Ico (a b : ℝₗ) : IsClopen (Ico a b) :=
instance : TotallyDisconnectedSpace ℝₗ :=
⟨fun _ _ hs x hx y hy =>
- le_antisymm (hs.subset_clopen (isClopen_Ici x) ⟨x, hx, left_mem_Ici⟩ hy)
- (hs.subset_clopen (isClopen_Ici y) ⟨y, hy, left_mem_Ici⟩ hx)⟩
+ le_antisymm (hs.subset_isClopen (isClopen_Ici x) ⟨x, hx, left_mem_Ici⟩ hy)
+ (hs.subset_isClopen (isClopen_Ici y) ⟨y, hy, left_mem_Ici⟩ hx)⟩
instance : FirstCountableTopology ℝₗ :=
⟨fun x => (nhds_basis_Ico_rat x).isCountablyGenerated⟩
Topology.MetricSpace.Metrizable*
(#7912)
Move
Topology.Metrizable.Basic
,Topology.Metrizable.Uniform
.The next step is to redefine Metrizable
as "uniformizable with countably generated uniformity"
and make this definition available much earlier.
@@ -6,7 +6,7 @@ Authors: Yury Kudryashov
import Mathlib.Topology.Instances.Irrational
import Mathlib.Topology.Algebra.Order.Archimedean
import Mathlib.Topology.Compactness.Paracompact
-import Mathlib.Topology.MetricSpace.Metrizable
+import Mathlib.Topology.Metrizable.Urysohn
import Mathlib.Topology.EMetricSpace.Paracompact
import Mathlib.Data.Set.Intervals.Monotone
import Mathlib.Topology.Separation.NotNormal
Filter.hasAntitoneBasis_atTop
;Filter.HasAntitoneBasis.iInf_principal
;ProbabilityTheory.measure_eq_zero_or_one_of_indepSetCat_self
->
ProbabilityTheory.measure_eq_zero_or_one_of_indepSet_self
.MeasureTheory.tendsto_measure_iUnion
;MeasureTheory.tendsto_measure_iInter
;Monotone.directed_le
, Monotone.directed_ge
;Antitone.directed_le
, Antitone.directed_ge
;directed_of_sup
, renamed to directed_of_isDirected_le
;directed_of_inf
, renamed to directed_of_isDirected_ge
;tendsto_nat_cast_atTop_atTop
;Filter.Eventually.nat_cast_atTop
;atTop_hasAntitoneBasis_of_archimedean
;@@ -88,7 +88,7 @@ theorem nhds_basis_Ico (a : ℝₗ) : (𝓝 a).HasBasis (a < ·) (Ico a ·) := b
← inf_iInf, ← iInf_inf, this, iInf_subtype]
suffices : (⨅ x ∈ Ioi a, 𝓟 (Iio x)).HasBasis (a < ·) Iio; exact this.principal_inf _
refine' hasBasis_biInf_principal _ nonempty_Ioi
- exact directedOn_iff_directed.2 (directed_of_inf fun x y hxy => Iio_subset_Iio hxy)
+ exact directedOn_iff_directed.2 <| Monotone.directed_ge fun x y hxy ↦ Iio_subset_Iio hxy
#align counterexample.sorgenfrey_line.nhds_basis_Ico Counterexample.SorgenfreyLine.nhds_basis_Ico
theorem nhds_basis_Ico_rat (a : ℝₗ) :
Split up the 2000-line Topology/SubsetProperties.lean
into several smaller files. Not only is it too huge, but the name is very unhelpful, since actually about 90% of the file is about compactness; I've moved this material into various files inside a new subdirectory Topology/Compactness/
.
@@ -5,7 +5,7 @@ Authors: Yury Kudryashov
-/
import Mathlib.Topology.Instances.Irrational
import Mathlib.Topology.Algebra.Order.Archimedean
-import Mathlib.Topology.Paracompact
+import Mathlib.Topology.Compactness.Paracompact
import Mathlib.Topology.MetricSpace.Metrizable
import Mathlib.Topology.EMetricSpace.Paracompact
import Mathlib.Data.Set.Intervals.Monotone
@@ -286,7 +286,7 @@ theorem nhds_prod_antitone_basis_inv_pnat (x y : ℝₗ) :
/-- The sets of rational and irrational points of the antidiagonal `{(x, y) | x + y = 0}` cannot be
separated by open neighborhoods. This implies that `ℝₗ × ℝₗ` is not a normal space. -/
theorem not_separatedNhds_rat_irrational_antidiag :
- ¬SeparatedNhds {x : ℝₗ × ℝₗ | x.1 + x.2 = 0 ∧ ∃ r : ℚ, ↑r = x.1}
+ ¬SeparatedNhds {x : ℝₗ × ℝₗ | x.1 + x.2 = 0 ∧ ∃ r : ℚ, ↑r = x.1}
{x : ℝₗ × ℝₗ | x.1 + x.2 = 0 ∧ Irrational (toReal x.1)} := by
have h₀ : ∀ {n : ℕ+}, 0 < (n : ℝ)⁻¹ := inv_pos.2 (Nat.cast_pos.2 (PNat.pos _))
have h₀' : ∀ {n : ℕ+} {x : ℝ}, x < x + (n : ℝ)⁻¹ := lt_add_of_pos_right _ h₀
Later I'm going to split files like Lipschitz
into 2: one in EMetricSpace/
and one in MetricSpace/
.
@@ -7,7 +7,7 @@ import Mathlib.Topology.Instances.Irrational
import Mathlib.Topology.Algebra.Order.Archimedean
import Mathlib.Topology.Paracompact
import Mathlib.Topology.MetricSpace.Metrizable
-import Mathlib.Topology.MetricSpace.EMetricParacompact
+import Mathlib.Topology.EMetricSpace.Paracompact
import Mathlib.Data.Set.Intervals.Monotone
import Mathlib.Topology.Separation.NotNormal
@@ -2,11 +2,6 @@
Copyright (c) 2022 Yury Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov
-
-! This file was ported from Lean 3 source module sorgenfrey_line
-! leanprover-community/mathlib commit 328375597f2c0dd00522d9c2e5a33b6a6128feeb
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Topology.Instances.Irrational
import Mathlib.Topology.Algebra.Order.Archimedean
@@ -16,6 +11,8 @@ import Mathlib.Topology.MetricSpace.EMetricParacompact
import Mathlib.Data.Set.Intervals.Monotone
import Mathlib.Topology.Separation.NotNormal
+#align_import sorgenfrey_line from "leanprover-community/mathlib"@"328375597f2c0dd00522d9c2e5a33b6a6128feeb"
+
/-!
# Sorgenfrey line
@@ -14,6 +14,7 @@ import Mathlib.Topology.Paracompact
import Mathlib.Topology.MetricSpace.Metrizable
import Mathlib.Topology.MetricSpace.EMetricParacompact
import Mathlib.Data.Set.Intervals.Monotone
+import Mathlib.Topology.Separation.NotNormal
/-!
# Sorgenfrey line
@@ -38,7 +39,7 @@ Prove that the Sorgenfrey line is a paracompact space.
open Set Filter TopologicalSpace
-open scoped Topology Filter
+open scoped Topology Filter Cardinal
namespace Counterexample
@@ -78,7 +79,7 @@ theorem isOpen_Ici (a : ℝₗ) : IsOpen (Ici a) :=
iUnion_Ico_right a ▸ isOpen_iUnion (isOpen_Ico a)
#align counterexample.sorgenfrey_line.is_open_Ici Counterexample.SorgenfreyLine.isOpen_Ici
-theorem nhds_basis_Ico (a : ℝₗ) : (𝓝 a).HasBasis (fun b => a < b) fun b => Ico a b := by
+theorem nhds_basis_Ico (a : ℝₗ) : (𝓝 a).HasBasis (a < ·) (Ico a ·) := by
rw [TopologicalSpace.nhds_generateFrom]
haveI : Nonempty { x // x ≤ a } := Set.nonempty_Iic_subtype
have : (⨅ x : { i // i ≤ a }, 𝓟 (Ici ↑x)) = 𝓟 (Ici a) := by
@@ -235,9 +236,15 @@ theorem isClopen_Ici_prod (x : ℝₗ × ℝₗ) : IsClopen (Ici x) :=
(Ici_prod_eq x).symm ▸ (isClopen_Ici _).prod (isClopen_Ici _)
#align counterexample.sorgenfrey_line.is_clopen_Ici_prod Counterexample.SorgenfreyLine.isClopen_Ici_prod
+theorem cardinal_antidiagonal (c : ℝₗ) : #{x : ℝₗ × ℝₗ | x.1 + x.2 = c} = 𝔠 := by
+ rw [← Cardinal.mk_real]
+ exact Equiv.cardinal_eq ⟨fun x ↦ toReal x.1.1,
+ fun x ↦ ⟨(toReal.symm x, c - toReal.symm x), by simp⟩,
+ fun ⟨x, hx⟩ ↦ by ext <;> simp [← hx.out], fun x ↦ rfl⟩
+
/-- Any subset of an antidiagonal `{(x, y) : ℝₗ × ℝₗ| x + y = c}` is a closed set. -/
-theorem isClosed_of_subset_antidiagonal {s : Set (ℝₗ × ℝₗ)} {c : ℝₗ}
- (hs : ∀ x : ℝₗ × ℝₗ, x ∈ s → x.1 + x.2 = c) : IsClosed s := by
+theorem isClosed_of_subset_antidiagonal {s : Set (ℝₗ × ℝₗ)} {c : ℝₗ} (hs : ∀ x ∈ s, x.1 + x.2 = c) :
+ IsClosed s := by
rw [← closure_subset_iff_isClosed]
rintro ⟨x, y⟩ H
obtain rfl : x + y = c := by
@@ -252,30 +259,47 @@ theorem isClosed_of_subset_antidiagonal {s : Set (ℝₗ × ℝₗ)} {c : ℝₗ
rwa [← add_le_add_iff_left, hs _ H, add_le_add_iff_right]
#align counterexample.sorgenfrey_line.is_closed_of_subset_antidiagonal Counterexample.SorgenfreyLine.isClosed_of_subset_antidiagonal
+open Subtype in
+instance (c : ℝₗ) : DiscreteTopology {x : ℝₗ × ℝₗ | x.1 + x.2 = c} :=
+ forall_open_iff_discrete.1 fun U ↦ isClosed_compl_iff.1 <| isClosed_induced_iff.2
+ ⟨val '' Uᶜ, isClosed_of_subset_antidiagonal <| coe_image_subset _ Uᶜ,
+ preimage_image_eq _ val_injective⟩
+
+/-- The Sorgenfrey plane `ℝₗ × ℝₗ` is not a normal space. -/
+theorem not_normalSpace_prod : ¬NormalSpace (ℝₗ × ℝₗ) :=
+ (isClosed_antidiagonal 0).not_normal_of_continuum_le_mk (cardinal_antidiagonal _).ge
+#align counterexample.sorgenfrey_line.not_normal_space_prod Counterexample.SorgenfreyLine.not_normalSpace_prod
+
+/-- An antidiagonal is a separable set but is not a separable space. -/
+theorem isSeparable_antidiagonal (c : ℝₗ) : IsSeparable {x : ℝₗ × ℝₗ | x.1 + x.2 = c} :=
+ isSeparable_of_separableSpace _
+
+/-- An antidiagonal is a separable set but is not a separable space. -/
+theorem not_separableSpace_antidiagonal (c : ℝₗ) :
+ ¬SeparableSpace {x : ℝₗ × ℝₗ | x.1 + x.2 = c} := by
+ rw [separableSpace_iff_countable, ← Cardinal.mk_le_aleph0_iff, cardinal_antidiagonal, not_le]
+ exact Cardinal.aleph0_lt_continuum
+
theorem nhds_prod_antitone_basis_inv_pnat (x y : ℝₗ) :
(𝓝 (x, y)).HasAntitoneBasis fun n : ℕ+ => Ico x (x + (n : ℝₗ)⁻¹) ×ˢ Ico y (y + (n : ℝₗ)⁻¹) := by
rw [nhds_prod_eq]
exact (nhds_antitone_basis_Ico_inv_pnat x).prod (nhds_antitone_basis_Ico_inv_pnat y)
#align counterexample.sorgenfrey_line.nhds_prod_antitone_basis_inv_pnat Counterexample.SorgenfreyLine.nhds_prod_antitone_basis_inv_pnat
-/-- The product of the Sorgenfrey line and itself is not a normal topological space. -/
-theorem not_normalSpace_prod : ¬NormalSpace (ℝₗ × ℝₗ) := by
+/-- The sets of rational and irrational points of the antidiagonal `{(x, y) | x + y = 0}` cannot be
+separated by open neighborhoods. This implies that `ℝₗ × ℝₗ` is not a normal space. -/
+theorem not_separatedNhds_rat_irrational_antidiag :
+ ¬SeparatedNhds {x : ℝₗ × ℝₗ | x.1 + x.2 = 0 ∧ ∃ r : ℚ, ↑r = x.1}
+ {x : ℝₗ × ℝₗ | x.1 + x.2 = 0 ∧ Irrational (toReal x.1)} := by
have h₀ : ∀ {n : ℕ+}, 0 < (n : ℝ)⁻¹ := inv_pos.2 (Nat.cast_pos.2 (PNat.pos _))
have h₀' : ∀ {n : ℕ+} {x : ℝ}, x < x + (n : ℝ)⁻¹ := lt_add_of_pos_right _ h₀
- intro
/- Let `S` be the set of points `(x, y)` on the line `x + y = 0` such that `x` is rational.
Let `T` be the set of points `(x, y)` on the line `x + y = 0` such that `x` is irrational.
These sets are closed, see `SorgenfreyLine.isClosed_of_subset_antidiagonal`, and disjoint. -/
set S := {x : ℝₗ × ℝₗ | x.1 + x.2 = 0 ∧ ∃ r : ℚ, ↑r = x.1}
set T := {x : ℝₗ × ℝₗ | x.1 + x.2 = 0 ∧ Irrational (toReal x.1)}
- have hSc : IsClosed S := isClosed_of_subset_antidiagonal fun x hx => hx.1
- have hTc : IsClosed T := isClosed_of_subset_antidiagonal fun x hx => hx.1
- have hd : Disjoint S T := by
- rw [disjoint_iff_inf_le]
- rintro ⟨x, y⟩ ⟨⟨-, r, rfl : _ = x⟩, -, hr⟩
- exact r.not_irrational hr
-- Consider disjoint open sets `U ⊇ S` and `V ⊇ T`.
- rcases normal_separation hSc hTc hd with ⟨U, V, Uo, Vo, SU, TV, UV⟩
+ rintro ⟨U, V, Uo, Vo, SU, TV, UV⟩
/- For each point `(x, -x) ∈ T`, choose a neighborhood
`Ico x (x + k⁻¹) ×ˢ Ico (-x) (-x + k⁻¹) ⊆ V`. -/
have : ∀ x : ℝₗ, Irrational (toReal x) →
@@ -316,7 +340,6 @@ theorem not_normalSpace_prod : ¬NormalSpace (ℝₗ × ℝₗ) := by
· refine' (nhds_antitone_basis_Ico_inv_pnat (-x)).2 hnN ⟨neg_le_neg hxn.1.le, _⟩
simp only [add_neg_lt_iff_le_add', lt_neg_add_iff_add_lt]
exact hxn.2
-#align counterexample.sorgenfrey_line.not_normal_space_prod Counterexample.SorgenfreyLine.not_normalSpace_prod
/-- Topology on the Sorgenfrey line is not metrizable. -/
theorem not_metrizableSpace : ¬MetrizableSpace ℝₗ := by
The unported dependencies are
algebra.order.module
init.core
linear_algebra.free_module.finite.rank
algebra.order.monoid.cancel.defs
algebra.abs
algebra.group_power.lemmas
init.data.list.basic
linear_algebra.free_module.rank
algebra.order.monoid.cancel.basic
init.data.list.default
topology.subset_properties
init.logic
The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file