topology.order.lower_topology
⟷
Mathlib.Topology.Order.LowerUpperTopology
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)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(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
@@ -238,7 +238,7 @@ theorem Topology.IsLower.isClosed_upperClosure (h : s.Finite) : IsClosed (upperC
/-- Every set open in the lower topology is a lower set. -/
theorem Topology.IsLower.isLowerSet_of_isOpen (h : IsOpen s) : IsLowerSet s :=
by
- rw [is_open_iff_generate_Ici_compl] at h
+ rw [is_open_iff_generate_Ici_compl] at h
induction h
case basic u h => obtain ⟨a, rfl⟩ := h; exact (isUpperSet_Ici a).compl
case univ => exact isLowerSet_univ
@@ -278,7 +278,7 @@ protected theorem Topology.IsLower.isTopologicalBasis :
rw [sInter_image]
· rintro ⟨F, ⟨hF, hs⟩, rfl⟩
haveI := hF.to_subtype
- rw [subset_def, Subtype.forall'] at hs
+ rw [subset_def, Subtype.forall'] at hs
choose f hf using hs
exact ⟨_, finite_range f, by simp_rw [bInter_range, hf, sInter_eq_Inter]⟩
#align lower_topology.is_topological_basis Topology.IsLower.isTopologicalBasis
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -198,15 +198,15 @@ section Preorder
variable [Preorder α] [TopologicalSpace α] [Topology.IsLower α] {s : Set α}
-#print Topology.IsLower.WithLowerHomeomorph /-
+#print Topology.IsLower.withLowerHomeomorph /-
/-- If `α` is equipped with the lower topology, then it is homeomorphic to `with_lower_topology α`.
-/
-def Topology.IsLower.WithLowerHomeomorph : Topology.WithLower α ≃ₜ α :=
+def Topology.IsLower.withLowerHomeomorph : Topology.WithLower α ≃ₜ α :=
{
Topology.WithLower.ofLower with
continuous_toFun := by convert continuous_id; apply topology_eq_lower_topology
continuous_invFun := by convert ← continuous_id; apply topology_eq_lower_topology }
-#align lower_topology.with_lower_topology_homeomorph Topology.IsLower.WithLowerHomeomorph
+#align lower_topology.with_lower_topology_homeomorph Topology.IsLower.withLowerHomeomorph
-/
#print Topology.IsLower.isOpen_iff_generate_Ici_compl /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -172,7 +172,7 @@ theorem Topology.WithLower.isOpen_def (T : Set (Topology.WithLower α)) :
end Topology.WithLower
#print Topology.IsLower /-
-/- ./././Mathport/Syntax/Translate/Command.lean:404:30: infer kinds are unsupported in Lean 4: #[`topology_eq_isLower] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:400:30: infer kinds are unsupported in Lean 4: #[`topology_eq_isLower] [] -/
/--
The lower topology is the topology generated by the complements of the closed intervals to infinity.
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -172,7 +172,7 @@ theorem Topology.WithLower.isOpen_def (T : Set (Topology.WithLower α)) :
end Topology.WithLower
#print Topology.IsLower /-
-/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`topology_eq_isLower] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:404:30: infer kinds are unsupported in Lean 4: #[`topology_eq_isLower] [] -/
/--
The lower topology is the topology generated by the complements of the closed intervals to infinity.
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -55,157 +55,164 @@ variable (α β : Type _)
open Set TopologicalSpace
-#print WithLowerTopology /-
+#print Topology.WithLower /-
/-- Type synonym for a preorder equipped with the lower topology
-/
-def WithLowerTopology :=
+def Topology.WithLower :=
α
-#align with_lower_topology WithLowerTopology
+#align with_lower_topology Topology.WithLower
-/
variable {α β}
-namespace WithLowerTopology
+namespace Topology.WithLower
-#print WithLowerTopology.toLower /-
+#print Topology.WithLower.toLower /-
/-- `to_lower` is the identity function to the `with_lower_topology` of a type. -/
@[match_pattern]
-def toLower : α ≃ WithLowerTopology α :=
+def Topology.WithLower.toLower : α ≃ Topology.WithLower α :=
Equiv.refl _
-#align with_lower_topology.to_lower WithLowerTopology.toLower
+#align with_lower_topology.to_lower Topology.WithLower.toLower
-/
-#print WithLowerTopology.ofLower /-
+#print Topology.WithLower.ofLower /-
/-- `of_lower` is the identity function from the `with_lower_topology` of a type. -/
@[match_pattern]
-def ofLower : WithLowerTopology α ≃ α :=
+def Topology.WithLower.ofLower : Topology.WithLower α ≃ α :=
Equiv.refl _
-#align with_lower_topology.of_lower WithLowerTopology.ofLower
+#align with_lower_topology.of_lower Topology.WithLower.ofLower
-/
-#print WithLowerTopology.to_withLowerTopology_symm_eq /-
+#print Topology.WithLower.to_WithLower_symm_eq /-
@[simp]
-theorem to_withLowerTopology_symm_eq : (@toLower α).symm = ofLower :=
+theorem Topology.WithLower.to_WithLower_symm_eq :
+ (@Topology.WithLower.toLower α).symm = Topology.WithLower.ofLower :=
rfl
-#align with_lower_topology.to_with_lower_topology_symm_eq WithLowerTopology.to_withLowerTopology_symm_eq
+#align with_lower_topology.to_with_lower_topology_symm_eq Topology.WithLower.to_WithLower_symm_eq
-/
-#print WithLowerTopology.of_withLowerTopology_symm_eq /-
+#print Topology.WithLower.of_WithLower_symm_eq /-
@[simp]
-theorem of_withLowerTopology_symm_eq : (@ofLower α).symm = toLower :=
+theorem Topology.WithLower.of_WithLower_symm_eq :
+ (@Topology.WithLower.ofLower α).symm = Topology.WithLower.toLower :=
rfl
-#align with_lower_topology.of_with_lower_topology_symm_eq WithLowerTopology.of_withLowerTopology_symm_eq
+#align with_lower_topology.of_with_lower_topology_symm_eq Topology.WithLower.of_WithLower_symm_eq
-/
-#print WithLowerTopology.toLower_ofLower /-
+#print Topology.WithLower.toLower_ofLower /-
@[simp]
-theorem toLower_ofLower (a : WithLowerTopology α) : toLower (ofLower a) = a :=
+theorem Topology.WithLower.toLower_ofLower (a : Topology.WithLower α) :
+ Topology.WithLower.toLower (Topology.WithLower.ofLower a) = a :=
rfl
-#align with_lower_topology.to_lower_of_lower WithLowerTopology.toLower_ofLower
+#align with_lower_topology.to_lower_of_lower Topology.WithLower.toLower_ofLower
-/
-#print WithLowerTopology.ofLower_toLower /-
+#print Topology.WithLower.ofLower_toLower /-
@[simp]
-theorem ofLower_toLower (a : α) : ofLower (toLower a) = a :=
+theorem Topology.WithLower.ofLower_toLower (a : α) :
+ Topology.WithLower.ofLower (Topology.WithLower.toLower a) = a :=
rfl
-#align with_lower_topology.of_lower_to_lower WithLowerTopology.ofLower_toLower
+#align with_lower_topology.of_lower_to_lower Topology.WithLower.ofLower_toLower
-/
-#print WithLowerTopology.toLower_inj /-
+#print Topology.WithLower.toLower_inj /-
@[simp]
-theorem toLower_inj {a b : α} : toLower a = toLower b ↔ a = b :=
+theorem Topology.WithLower.toLower_inj {a b : α} :
+ Topology.WithLower.toLower a = Topology.WithLower.toLower b ↔ a = b :=
Iff.rfl
-#align with_lower_topology.to_lower_inj WithLowerTopology.toLower_inj
+#align with_lower_topology.to_lower_inj Topology.WithLower.toLower_inj
-/
-#print WithLowerTopology.ofLower_inj /-
+#print Topology.WithLower.ofLower_inj /-
@[simp]
-theorem ofLower_inj {a b : WithLowerTopology α} : ofLower a = ofLower b ↔ a = b :=
+theorem Topology.WithLower.ofLower_inj {a b : Topology.WithLower α} :
+ Topology.WithLower.ofLower a = Topology.WithLower.ofLower b ↔ a = b :=
Iff.rfl
-#align with_lower_topology.of_lower_inj WithLowerTopology.ofLower_inj
+#align with_lower_topology.of_lower_inj Topology.WithLower.ofLower_inj
-/
-#print WithLowerTopology.rec /-
+#print Topology.WithLower.rec /-
/-- A recursor for `with_lower_topology`. Use as `induction x using with_lower_topology.rec`. -/
-protected def rec {β : WithLowerTopology α → Sort _} (h : ∀ a, β (toLower a)) : ∀ a, β a := fun a =>
- h (ofLower a)
-#align with_lower_topology.rec WithLowerTopology.rec
+protected def Topology.WithLower.rec {β : Topology.WithLower α → Sort _}
+ (h : ∀ a, β (Topology.WithLower.toLower a)) : ∀ a, β a := fun a =>
+ h (Topology.WithLower.ofLower a)
+#align with_lower_topology.rec Topology.WithLower.rec
-/
-instance [Nonempty α] : Nonempty (WithLowerTopology α) :=
+instance [Nonempty α] : Nonempty (Topology.WithLower α) :=
‹Nonempty α›
-instance [Inhabited α] : Inhabited (WithLowerTopology α) :=
+instance [Inhabited α] : Inhabited (Topology.WithLower α) :=
‹Inhabited α›
variable [Preorder α]
-instance : Preorder (WithLowerTopology α) :=
+instance : Preorder (Topology.WithLower α) :=
‹Preorder α›
-instance : TopologicalSpace (WithLowerTopology α) :=
+instance : TopologicalSpace (Topology.WithLower α) :=
generateFrom {s | ∃ a, Ici aᶜ = s}
-#print WithLowerTopology.isOpen_preimage_ofLower /-
-theorem isOpen_preimage_ofLower (S : Set α) :
- IsOpen (WithLowerTopology.ofLower ⁻¹' S) ↔
+#print Topology.WithLower.isOpen_preimage_ofLower /-
+theorem Topology.WithLower.isOpen_preimage_ofLower (S : Set α) :
+ IsOpen (Topology.WithLower.ofLower ⁻¹' S) ↔
(generateFrom {s : Set α | ∃ a : α, Ici aᶜ = s}).IsOpen S :=
Iff.rfl
-#align with_lower_topology.is_open_preimage_of_lower WithLowerTopology.isOpen_preimage_ofLower
+#align with_lower_topology.is_open_preimage_of_lower Topology.WithLower.isOpen_preimage_ofLower
-/
-#print WithLowerTopology.isOpen_def /-
-theorem isOpen_def (T : Set (WithLowerTopology α)) :
+#print Topology.WithLower.isOpen_def /-
+theorem Topology.WithLower.isOpen_def (T : Set (Topology.WithLower α)) :
IsOpen T ↔
- (generateFrom {s : Set α | ∃ a : α, Ici aᶜ = s}).IsOpen (WithLowerTopology.toLower ⁻¹' T) :=
+ (generateFrom {s : Set α | ∃ a : α, Ici aᶜ = s}).IsOpen (Topology.WithLower.toLower ⁻¹' T) :=
Iff.rfl
-#align with_lower_topology.is_open_def WithLowerTopology.isOpen_def
+#align with_lower_topology.is_open_def Topology.WithLower.isOpen_def
-/
-end WithLowerTopology
+end Topology.WithLower
-#print LowerTopology /-
-/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`topology_eq_lowerTopology] [] -/
+#print Topology.IsLower /-
+/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`topology_eq_isLower] [] -/
/--
The lower topology is the topology generated by the complements of the closed intervals to infinity.
-/
-class LowerTopology (α : Type _) [t : TopologicalSpace α] [Preorder α] : Prop where
- topology_eq_lowerTopology : t = generateFrom {s | ∃ a, Ici aᶜ = s}
-#align lower_topology LowerTopology
+class Topology.IsLower (α : Type _) [t : TopologicalSpace α] [Preorder α] : Prop where
+ topology_eq_isLower : t = generateFrom {s | ∃ a, Ici aᶜ = s}
+#align lower_topology Topology.IsLower
-/
-instance [Preorder α] : LowerTopology (WithLowerTopology α) :=
+instance [Preorder α] : Topology.IsLower (Topology.WithLower α) :=
⟨rfl⟩
-namespace LowerTopology
+namespace Topology.IsLower
-#print LowerTopology.lowerBasis /-
+#print Topology.IsLower.lowerBasis /-
/-- The complements of the upper closures of finite sets are a collection of lower sets
which form a basis for the lower topology. -/
-def lowerBasis (α : Type _) [Preorder α] :=
+def Topology.IsLower.lowerBasis (α : Type _) [Preorder α] :=
{s : Set α | ∃ t : Set α, t.Finite ∧ (upperClosure t : Set α)ᶜ = s}
-#align lower_topology.lower_basis LowerTopology.lowerBasis
+#align lower_topology.lower_basis Topology.IsLower.lowerBasis
-/
section Preorder
-variable [Preorder α] [TopologicalSpace α] [LowerTopology α] {s : Set α}
+variable [Preorder α] [TopologicalSpace α] [Topology.IsLower α] {s : Set α}
-#print LowerTopology.withLowerTopologyHomeomorph /-
+#print Topology.IsLower.WithLowerHomeomorph /-
/-- If `α` is equipped with the lower topology, then it is homeomorphic to `with_lower_topology α`.
-/
-def withLowerTopologyHomeomorph : WithLowerTopology α ≃ₜ α :=
+def Topology.IsLower.WithLowerHomeomorph : Topology.WithLower α ≃ₜ α :=
{
- WithLowerTopology.ofLower with
+ Topology.WithLower.ofLower with
continuous_toFun := by convert continuous_id; apply topology_eq_lower_topology
continuous_invFun := by convert ← continuous_id; apply topology_eq_lower_topology }
-#align lower_topology.with_lower_topology_homeomorph LowerTopology.withLowerTopologyHomeomorph
+#align lower_topology.with_lower_topology_homeomorph Topology.IsLower.WithLowerHomeomorph
-/
-#print LowerTopology.isOpen_iff_generate_Ici_compl /-
-theorem isOpen_iff_generate_Ici_compl : IsOpen s ↔ GenerateOpen {t | ∃ a, Ici aᶜ = t} s := by
- rw [topology_eq_lower_topology α] <;> rfl
-#align lower_topology.is_open_iff_generate_Ici_compl LowerTopology.isOpen_iff_generate_Ici_compl
+#print Topology.IsLower.isOpen_iff_generate_Ici_compl /-
+theorem Topology.IsLower.isOpen_iff_generate_Ici_compl :
+ IsOpen s ↔ GenerateOpen {t | ∃ a, Ici aᶜ = t} s := by rw [topology_eq_lower_topology α] <;> rfl
+#align lower_topology.is_open_iff_generate_Ici_compl Topology.IsLower.isOpen_iff_generate_Ici_compl
-/
/- warning: lower_topology.is_closed_Ici clashes with is_closed_Ici -> isClosed_Ici
@@ -213,22 +220,23 @@ Case conversion may be inaccurate. Consider using '#align lower_topology.is_clos
#print isClosed_Ici /-
/-- Left-closed right-infinite intervals [a, ∞) are closed in the lower topology. -/
theorem isClosed_Ici (a : α) : IsClosed (Ici a) :=
- isOpen_compl_iff.1 <| isOpen_iff_generate_Ici_compl.2 <| GenerateOpen.basic _ ⟨a, rfl⟩
+ isOpen_compl_iff.1 <|
+ Topology.IsLower.isOpen_iff_generate_Ici_compl.2 <| GenerateOpen.basic _ ⟨a, rfl⟩
#align lower_topology.is_closed_Ici isClosed_Ici
-/
-#print LowerTopology.isClosed_upperClosure /-
+#print Topology.IsLower.isClosed_upperClosure /-
/-- The upper closure of a finite set is closed in the lower topology. -/
-theorem isClosed_upperClosure (h : s.Finite) : IsClosed (upperClosure s : Set α) :=
+theorem Topology.IsLower.isClosed_upperClosure (h : s.Finite) : IsClosed (upperClosure s : Set α) :=
by
simp only [← UpperSet.iInf_Ici, UpperSet.coe_iInf]
exact Set.Finite.isClosed_biUnion h fun a h₁ => isClosed_Ici a
-#align lower_topology.is_closed_upper_closure LowerTopology.isClosed_upperClosure
+#align lower_topology.is_closed_upper_closure Topology.IsLower.isClosed_upperClosure
-/
-#print LowerTopology.isLowerSet_of_isOpen /-
+#print Topology.IsLower.isLowerSet_of_isOpen /-
/-- Every set open in the lower topology is a lower set. -/
-theorem isLowerSet_of_isOpen (h : IsOpen s) : IsLowerSet s :=
+theorem Topology.IsLower.isLowerSet_of_isOpen (h : IsOpen s) : IsLowerSet s :=
by
rw [is_open_iff_generate_Ici_compl] at h
induction h
@@ -236,29 +244,30 @@ theorem isLowerSet_of_isOpen (h : IsOpen s) : IsLowerSet s :=
case univ => exact isLowerSet_univ
case inter u v hu1 hv1 hu2 hv2 => exact hu2.inter hv2
case sUnion _ _ ih => exact isLowerSet_sUnion ih
-#align lower_topology.is_lower_set_of_is_open LowerTopology.isLowerSet_of_isOpen
+#align lower_topology.is_lower_set_of_is_open Topology.IsLower.isLowerSet_of_isOpen
-/
-#print LowerTopology.isUpperSet_of_isClosed /-
-theorem isUpperSet_of_isClosed (h : IsClosed s) : IsUpperSet s :=
- isLowerSet_compl.1 <| isLowerSet_of_isOpen h.isOpen_compl
-#align lower_topology.is_upper_set_of_is_closed LowerTopology.isUpperSet_of_isClosed
+#print Topology.IsLower.isUpperSet_of_isClosed /-
+theorem Topology.IsLower.isUpperSet_of_isClosed (h : IsClosed s) : IsUpperSet s :=
+ isLowerSet_compl.1 <| Topology.IsLower.isLowerSet_of_isOpen h.isOpen_compl
+#align lower_topology.is_upper_set_of_is_closed Topology.IsLower.isUpperSet_of_isClosed
-/
-#print LowerTopology.closure_singleton /-
+#print Topology.IsLower.closure_singleton /-
/--
The closure of a singleton `{a}` in the lower topology is the left-closed right-infinite interval
[a, ∞).
-/
@[simp]
-theorem closure_singleton (a : α) : closure {a} = Ici a :=
+theorem Topology.IsLower.closure_singleton (a : α) : closure {a} = Ici a :=
subset_antisymm ((closure_minimal fun b h => h.ge) <| isClosed_Ici a) <|
- (isUpperSet_of_isClosed isClosed_closure).Ici_subset <| subset_closure rfl
-#align lower_topology.closure_singleton LowerTopology.closure_singleton
+ (Topology.IsLower.isUpperSet_of_isClosed isClosed_closure).Ici_subset <| subset_closure rfl
+#align lower_topology.closure_singleton Topology.IsLower.closure_singleton
-/
-#print LowerTopology.isTopologicalBasis /-
-protected theorem isTopologicalBasis : IsTopologicalBasis (lowerBasis α) :=
+#print Topology.IsLower.isTopologicalBasis /-
+protected theorem Topology.IsLower.isTopologicalBasis :
+ IsTopologicalBasis (Topology.IsLower.lowerBasis α) :=
by
convert is_topological_basis_of_subbasis (topology_eq_lower_topology α)
simp_rw [lower_basis, coe_upperClosure, compl_Union]
@@ -272,14 +281,14 @@ protected theorem isTopologicalBasis : IsTopologicalBasis (lowerBasis α) :=
rw [subset_def, Subtype.forall'] at hs
choose f hf using hs
exact ⟨_, finite_range f, by simp_rw [bInter_range, hf, sInter_eq_Inter]⟩
-#align lower_topology.is_topological_basis LowerTopology.isTopologicalBasis
+#align lower_topology.is_topological_basis Topology.IsLower.isTopologicalBasis
-/
end Preorder
section PartialOrder
-variable [PartialOrder α] [TopologicalSpace α] [LowerTopology α]
+variable [PartialOrder α] [TopologicalSpace α] [Topology.IsLower α]
-- see Note [lower instance priority]
/-- The lower topology on a partial order is T₀.
@@ -290,16 +299,17 @@ instance (priority := 90) : T0Space α :=
end PartialOrder
-end LowerTopology
+end Topology.IsLower
-instance [Preorder α] [TopologicalSpace α] [LowerTopology α] [OrderBot α] [Preorder β]
- [TopologicalSpace β] [LowerTopology β] [OrderBot β] : LowerTopology (α × β)
- where topology_eq_lowerTopology :=
+instance [Preorder α] [TopologicalSpace α] [Topology.IsLower α] [OrderBot α] [Preorder β]
+ [TopologicalSpace β] [Topology.IsLower β] [OrderBot β] : Topology.IsLower (α × β)
+ where topology_eq_isLower :=
by
refine' le_antisymm (le_generateFrom _) _
· rintro _ ⟨x, rfl⟩
exact ((isClosed_Ici _).Prod <| isClosed_Ici _).isOpen_compl
- rw [(lower_topology.is_topological_basis.prod LowerTopology.isTopologicalBasis).eq_generateFrom,
+ rw [(lower_topology.is_topological_basis.prod
+ Topology.IsLower.isTopologicalBasis).eq_generateFrom,
le_generate_from_iff_subset_is_open, image2_subset_iff]
rintro _ ⟨s, hs, rfl⟩ _ ⟨t, ht, rfl⟩
dsimp
@@ -313,14 +323,14 @@ instance [Preorder α] [TopologicalSpace α] [LowerTopology α] [OrderBot α] [P
section CompleteLattice
-variable [CompleteLattice α] [CompleteLattice β] [TopologicalSpace α] [LowerTopology α]
- [TopologicalSpace β] [LowerTopology β]
+variable [CompleteLattice α] [CompleteLattice β] [TopologicalSpace α] [Topology.IsLower α]
+ [TopologicalSpace β] [Topology.IsLower β]
#print sInfHom.continuous /-
theorem sInfHom.continuous (f : sInfHom α β) : Continuous f :=
by
convert continuous_generateFrom _
- · exact LowerTopology.topology_eq_lowerTopology β
+ · exact Topology.IsLower.topology_eq_isLower β
rintro _ ⟨b, rfl⟩
rw [preimage_compl, isOpen_compl_iff]
convert isClosed_Ici (Inf <| f ⁻¹' Ici b)
@@ -329,11 +339,11 @@ theorem sInfHom.continuous (f : sInfHom α β) : Continuous f :=
#align Inf_hom.continuous sInfHom.continuous
-/
-#print LowerTopology.continuousInf /-
+#print Topology.IsLower.toContinuousInf /-
-- see Note [lower instance priority]
-instance (priority := 90) LowerTopology.continuousInf : ContinuousInf α :=
+instance (priority := 90) Topology.IsLower.toContinuousInf : ContinuousInf α :=
⟨(infsInfHom : sInfHom (α × α) α).Continuous⟩
-#align lower_topology.to_has_continuous_inf LowerTopology.continuousInf
+#align lower_topology.to_has_continuous_inf Topology.IsLower.toContinuousInf
-/
end CompleteLattice
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,9 +3,9 @@ Copyright (c) 2023 Christopher Hoskin. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Christopher Hoskin
-/
-import Mathbin.Topology.Homeomorph
-import Mathbin.Topology.Order.Lattice
-import Mathbin.Order.Hom.CompleteLattice
+import Topology.Homeomorph
+import Topology.Order.Lattice
+import Order.Hom.CompleteLattice
#align_import topology.order.lower_topology from "leanprover-community/mathlib"@"34ee86e6a59d911a8e4f89b68793ee7577ae79c7"
@@ -165,7 +165,7 @@ theorem isOpen_def (T : Set (WithLowerTopology α)) :
end WithLowerTopology
#print LowerTopology /-
-/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`topology_eq_lowerTopology] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`topology_eq_lowerTopology] [] -/
/--
The lower topology is the topology generated by the complements of the closed intervals to infinity.
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/442a83d738cb208d3600056c489be16900ba701d
@@ -222,7 +222,7 @@ theorem isClosed_Ici (a : α) : IsClosed (Ici a) :=
theorem isClosed_upperClosure (h : s.Finite) : IsClosed (upperClosure s : Set α) :=
by
simp only [← UpperSet.iInf_Ici, UpperSet.coe_iInf]
- exact isClosed_biUnion h fun a h₁ => isClosed_Ici a
+ exact Set.Finite.isClosed_biUnion h fun a h₁ => isClosed_Ici a
#align lower_topology.is_closed_upper_closure LowerTopology.isClosed_upperClosure
-/
@@ -305,7 +305,8 @@ instance [Preorder α] [TopologicalSpace α] [LowerTopology α] [OrderBot α] [P
dsimp
simp_rw [coe_upperClosure, compl_Union, prod_eq, preimage_Inter, preimage_compl]
-- Note: `refine` doesn't work here because it tries using `prod.topological_space`.
- apply (isOpen_biInter hs fun a _ => _).inter (isOpen_biInter ht fun b _ => _)
+ apply
+ (Set.Finite.isOpen_biInter hs fun a _ => _).inter (Set.Finite.isOpen_biInter ht fun b _ => _)
· exact generate_open.basic _ ⟨(a, ⊥), by simp [Ici_prod_eq, prod_univ]⟩
· exact generate_open.basic _ ⟨(⊥, b), by simp [Ici_prod_eq, univ_prod]⟩
all_goals infer_instance
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -208,11 +208,13 @@ theorem isOpen_iff_generate_Ici_compl : IsOpen s ↔ GenerateOpen {t | ∃ a, Ic
#align lower_topology.is_open_iff_generate_Ici_compl LowerTopology.isOpen_iff_generate_Ici_compl
-/
-#print LowerTopology.isClosed_Ici /-
+/- warning: lower_topology.is_closed_Ici clashes with is_closed_Ici -> isClosed_Ici
+Case conversion may be inaccurate. Consider using '#align lower_topology.is_closed_Ici isClosed_Iciₓ'. -/
+#print isClosed_Ici /-
/-- Left-closed right-infinite intervals [a, ∞) are closed in the lower topology. -/
theorem isClosed_Ici (a : α) : IsClosed (Ici a) :=
isOpen_compl_iff.1 <| isOpen_iff_generate_Ici_compl.2 <| GenerateOpen.basic _ ⟨a, rfl⟩
-#align lower_topology.is_closed_Ici LowerTopology.isClosed_Ici
+#align lower_topology.is_closed_Ici isClosed_Ici
-/
#print LowerTopology.isClosed_upperClosure /-
@@ -296,7 +298,7 @@ instance [Preorder α] [TopologicalSpace α] [LowerTopology α] [OrderBot α] [P
by
refine' le_antisymm (le_generateFrom _) _
· rintro _ ⟨x, rfl⟩
- exact ((LowerTopology.isClosed_Ici _).Prod <| LowerTopology.isClosed_Ici _).isOpen_compl
+ exact ((isClosed_Ici _).Prod <| isClosed_Ici _).isOpen_compl
rw [(lower_topology.is_topological_basis.prod LowerTopology.isTopologicalBasis).eq_generateFrom,
le_generate_from_iff_subset_is_open, image2_subset_iff]
rintro _ ⟨s, hs, rfl⟩ _ ⟨t, ht, rfl⟩
@@ -320,7 +322,7 @@ theorem sInfHom.continuous (f : sInfHom α β) : Continuous f :=
· exact LowerTopology.topology_eq_lowerTopology β
rintro _ ⟨b, rfl⟩
rw [preimage_compl, isOpen_compl_iff]
- convert LowerTopology.isClosed_Ici (Inf <| f ⁻¹' Ici b)
+ convert isClosed_Ici (Inf <| f ⁻¹' Ici b)
refine' subset_antisymm (fun a => sInf_le) fun a ha => le_trans _ <| OrderHomClass.mono f ha
simp [map_Inf]
#align Inf_hom.continuous sInfHom.continuous
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,16 +2,13 @@
Copyright (c) 2023 Christopher Hoskin. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Christopher Hoskin
-
-! This file was ported from Lean 3 source module topology.order.lower_topology
-! leanprover-community/mathlib commit 34ee86e6a59d911a8e4f89b68793ee7577ae79c7
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Topology.Homeomorph
import Mathbin.Topology.Order.Lattice
import Mathbin.Order.Hom.CompleteLattice
+#align_import topology.order.lower_topology from "leanprover-community/mathlib"@"34ee86e6a59d911a8e4f89b68793ee7577ae79c7"
+
/-!
# Lower topology
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -157,16 +157,18 @@ theorem isOpen_preimage_ofLower (S : Set α) :
#align with_lower_topology.is_open_preimage_of_lower WithLowerTopology.isOpen_preimage_ofLower
-/
+#print WithLowerTopology.isOpen_def /-
theorem isOpen_def (T : Set (WithLowerTopology α)) :
IsOpen T ↔
(generateFrom {s : Set α | ∃ a : α, Ici aᶜ = s}).IsOpen (WithLowerTopology.toLower ⁻¹' T) :=
Iff.rfl
#align with_lower_topology.is_open_def WithLowerTopology.isOpen_def
+-/
end WithLowerTopology
#print LowerTopology /-
-/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`topology_eq_lowerTopology] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`topology_eq_lowerTopology] [] -/
/--
The lower topology is the topology generated by the complements of the closed intervals to infinity.
-/
@@ -192,6 +194,7 @@ section Preorder
variable [Preorder α] [TopologicalSpace α] [LowerTopology α] {s : Set α}
+#print LowerTopology.withLowerTopologyHomeomorph /-
/-- If `α` is equipped with the lower topology, then it is homeomorphic to `with_lower_topology α`.
-/
def withLowerTopologyHomeomorph : WithLowerTopology α ≃ₜ α :=
@@ -200,10 +203,13 @@ def withLowerTopologyHomeomorph : WithLowerTopology α ≃ₜ α :=
continuous_toFun := by convert continuous_id; apply topology_eq_lower_topology
continuous_invFun := by convert ← continuous_id; apply topology_eq_lower_topology }
#align lower_topology.with_lower_topology_homeomorph LowerTopology.withLowerTopologyHomeomorph
+-/
+#print LowerTopology.isOpen_iff_generate_Ici_compl /-
theorem isOpen_iff_generate_Ici_compl : IsOpen s ↔ GenerateOpen {t | ∃ a, Ici aᶜ = t} s := by
rw [topology_eq_lower_topology α] <;> rfl
#align lower_topology.is_open_iff_generate_Ici_compl LowerTopology.isOpen_iff_generate_Ici_compl
+-/
#print LowerTopology.isClosed_Ici /-
/-- Left-closed right-infinite intervals [a, ∞) are closed in the lower topology. -/
@@ -310,6 +316,7 @@ section CompleteLattice
variable [CompleteLattice α] [CompleteLattice β] [TopologicalSpace α] [LowerTopology α]
[TopologicalSpace β] [LowerTopology β]
+#print sInfHom.continuous /-
theorem sInfHom.continuous (f : sInfHom α β) : Continuous f :=
by
convert continuous_generateFrom _
@@ -320,11 +327,14 @@ theorem sInfHom.continuous (f : sInfHom α β) : Continuous f :=
refine' subset_antisymm (fun a => sInf_le) fun a ha => le_trans _ <| OrderHomClass.mono f ha
simp [map_Inf]
#align Inf_hom.continuous sInfHom.continuous
+-/
+#print LowerTopology.continuousInf /-
-- see Note [lower instance priority]
instance (priority := 90) LowerTopology.continuousInf : ContinuousInf α :=
⟨(infsInfHom : sInfHom (α × α) α).Continuous⟩
#align lower_topology.to_has_continuous_inf LowerTopology.continuousInf
+-/
end CompleteLattice
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -147,31 +147,31 @@ instance : Preorder (WithLowerTopology α) :=
‹Preorder α›
instance : TopologicalSpace (WithLowerTopology α) :=
- generateFrom { s | ∃ a, Ici aᶜ = s }
+ generateFrom {s | ∃ a, Ici aᶜ = s}
#print WithLowerTopology.isOpen_preimage_ofLower /-
theorem isOpen_preimage_ofLower (S : Set α) :
IsOpen (WithLowerTopology.ofLower ⁻¹' S) ↔
- (generateFrom { s : Set α | ∃ a : α, Ici aᶜ = s }).IsOpen S :=
+ (generateFrom {s : Set α | ∃ a : α, Ici aᶜ = s}).IsOpen S :=
Iff.rfl
#align with_lower_topology.is_open_preimage_of_lower WithLowerTopology.isOpen_preimage_ofLower
-/
theorem isOpen_def (T : Set (WithLowerTopology α)) :
IsOpen T ↔
- (generateFrom { s : Set α | ∃ a : α, Ici aᶜ = s }).IsOpen (WithLowerTopology.toLower ⁻¹' T) :=
+ (generateFrom {s : Set α | ∃ a : α, Ici aᶜ = s}).IsOpen (WithLowerTopology.toLower ⁻¹' T) :=
Iff.rfl
#align with_lower_topology.is_open_def WithLowerTopology.isOpen_def
end WithLowerTopology
#print LowerTopology /-
-/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`topology_eq_lowerTopology] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`topology_eq_lowerTopology] [] -/
/--
The lower topology is the topology generated by the complements of the closed intervals to infinity.
-/
class LowerTopology (α : Type _) [t : TopologicalSpace α] [Preorder α] : Prop where
- topology_eq_lowerTopology : t = generateFrom { s | ∃ a, Ici aᶜ = s }
+ topology_eq_lowerTopology : t = generateFrom {s | ∃ a, Ici aᶜ = s}
#align lower_topology LowerTopology
-/
@@ -184,7 +184,7 @@ namespace LowerTopology
/-- The complements of the upper closures of finite sets are a collection of lower sets
which form a basis for the lower topology. -/
def lowerBasis (α : Type _) [Preorder α] :=
- { s : Set α | ∃ t : Set α, t.Finite ∧ (upperClosure t : Set α)ᶜ = s }
+ {s : Set α | ∃ t : Set α, t.Finite ∧ (upperClosure t : Set α)ᶜ = s}
#align lower_topology.lower_basis LowerTopology.lowerBasis
-/
@@ -198,10 +198,10 @@ def withLowerTopologyHomeomorph : WithLowerTopology α ≃ₜ α :=
{
WithLowerTopology.ofLower with
continuous_toFun := by convert continuous_id; apply topology_eq_lower_topology
- continuous_invFun := by convert← continuous_id; apply topology_eq_lower_topology }
+ continuous_invFun := by convert ← continuous_id; apply topology_eq_lower_topology }
#align lower_topology.with_lower_topology_homeomorph LowerTopology.withLowerTopologyHomeomorph
-theorem isOpen_iff_generate_Ici_compl : IsOpen s ↔ GenerateOpen { t | ∃ a, Ici aᶜ = t } s := by
+theorem isOpen_iff_generate_Ici_compl : IsOpen s ↔ GenerateOpen {t | ∃ a, Ici aᶜ = t} s := by
rw [topology_eq_lower_topology α] <;> rfl
#align lower_topology.is_open_iff_generate_Ici_compl LowerTopology.isOpen_iff_generate_Ici_compl
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -225,7 +225,7 @@ theorem isClosed_upperClosure (h : s.Finite) : IsClosed (upperClosure s : Set α
/-- Every set open in the lower topology is a lower set. -/
theorem isLowerSet_of_isOpen (h : IsOpen s) : IsLowerSet s :=
by
- rw [is_open_iff_generate_Ici_compl] at h
+ rw [is_open_iff_generate_Ici_compl] at h
induction h
case basic u h => obtain ⟨a, rfl⟩ := h; exact (isUpperSet_Ici a).compl
case univ => exact isLowerSet_univ
@@ -264,7 +264,7 @@ protected theorem isTopologicalBasis : IsTopologicalBasis (lowerBasis α) :=
rw [sInter_image]
· rintro ⟨F, ⟨hF, hs⟩, rfl⟩
haveI := hF.to_subtype
- rw [subset_def, Subtype.forall'] at hs
+ rw [subset_def, Subtype.forall'] at hs
choose f hf using hs
exact ⟨_, finite_range f, by simp_rw [bInter_range, hf, sInter_eq_Inter]⟩
#align lower_topology.is_topological_basis LowerTopology.isTopologicalBasis
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -221,6 +221,7 @@ theorem isClosed_upperClosure (h : s.Finite) : IsClosed (upperClosure s : Set α
#align lower_topology.is_closed_upper_closure LowerTopology.isClosed_upperClosure
-/
+#print LowerTopology.isLowerSet_of_isOpen /-
/-- Every set open in the lower topology is a lower set. -/
theorem isLowerSet_of_isOpen (h : IsOpen s) : IsLowerSet s :=
by
@@ -231,10 +232,13 @@ theorem isLowerSet_of_isOpen (h : IsOpen s) : IsLowerSet s :=
case inter u v hu1 hv1 hu2 hv2 => exact hu2.inter hv2
case sUnion _ _ ih => exact isLowerSet_sUnion ih
#align lower_topology.is_lower_set_of_is_open LowerTopology.isLowerSet_of_isOpen
+-/
+#print LowerTopology.isUpperSet_of_isClosed /-
theorem isUpperSet_of_isClosed (h : IsClosed s) : IsUpperSet s :=
isLowerSet_compl.1 <| isLowerSet_of_isOpen h.isOpen_compl
#align lower_topology.is_upper_set_of_is_closed LowerTopology.isUpperSet_of_isClosed
+-/
#print LowerTopology.closure_singleton /-
/--
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -157,12 +157,6 @@ theorem isOpen_preimage_ofLower (S : Set α) :
#align with_lower_topology.is_open_preimage_of_lower WithLowerTopology.isOpen_preimage_ofLower
-/
-/- warning: with_lower_topology.is_open_def -> WithLowerTopology.isOpen_def is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] (T : Set.{u1} (WithLowerTopology.{u1} α)), Iff (IsOpen.{u1} (WithLowerTopology.{u1} α) (WithLowerTopology.topologicalSpace.{u1} α _inst_1) T) (TopologicalSpace.IsOpen.{u1} α (TopologicalSpace.generateFrom.{u1} α (setOf.{u1} (Set.{u1} α) (fun (s : Set.{u1} α) => Exists.{succ u1} α (fun (a : α) => Eq.{succ u1} (Set.{u1} α) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) (Set.Ici.{u1} α _inst_1 a)) s)))) (Set.preimage.{u1, u1} α (WithLowerTopology.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (WithLowerTopology.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (WithLowerTopology.{u1} α)) => α -> (WithLowerTopology.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (WithLowerTopology.{u1} α)) (WithLowerTopology.toLower.{u1} α)) T))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] (T : Set.{u1} (WithLowerTopology.{u1} α)), Iff (IsOpen.{u1} (WithLowerTopology.{u1} α) (WithLowerTopology.instTopologicalSpaceWithLowerTopology.{u1} α _inst_1) T) (TopologicalSpace.IsOpen.{u1} α (TopologicalSpace.generateFrom.{u1} α (setOf.{u1} (Set.{u1} α) (fun (s : Set.{u1} α) => Exists.{succ u1} α (fun (a : α) => Eq.{succ u1} (Set.{u1} α) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) (Set.Ici.{u1} α _inst_1 a)) s)))) (Set.preimage.{u1, u1} α (WithLowerTopology.{u1} α) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} α (WithLowerTopology.{u1} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => WithLowerTopology.{u1} α) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} α (WithLowerTopology.{u1} α)) (WithLowerTopology.toLower.{u1} α)) T))
-Case conversion may be inaccurate. Consider using '#align with_lower_topology.is_open_def WithLowerTopology.isOpen_defₓ'. -/
theorem isOpen_def (T : Set (WithLowerTopology α)) :
IsOpen T ↔
(generateFrom { s : Set α | ∃ a : α, Ici aᶜ = s }).IsOpen (WithLowerTopology.toLower ⁻¹' T) :=
@@ -198,12 +192,6 @@ section Preorder
variable [Preorder α] [TopologicalSpace α] [LowerTopology α] {s : Set α}
-/- warning: lower_topology.with_lower_topology_homeomorph -> LowerTopology.withLowerTopologyHomeomorph is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] [_inst_2 : TopologicalSpace.{u1} α] [_inst_3 : LowerTopology.{u1} α _inst_2 _inst_1], Homeomorph.{u1, u1} (WithLowerTopology.{u1} α) α (WithLowerTopology.topologicalSpace.{u1} α _inst_1) _inst_2
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] [_inst_2 : TopologicalSpace.{u1} α] [_inst_3 : LowerTopology.{u1} α _inst_2 _inst_1], Homeomorph.{u1, u1} (WithLowerTopology.{u1} α) α (WithLowerTopology.instTopologicalSpaceWithLowerTopology.{u1} α _inst_1) _inst_2
-Case conversion may be inaccurate. Consider using '#align lower_topology.with_lower_topology_homeomorph LowerTopology.withLowerTopologyHomeomorphₓ'. -/
/-- If `α` is equipped with the lower topology, then it is homeomorphic to `with_lower_topology α`.
-/
def withLowerTopologyHomeomorph : WithLowerTopology α ≃ₜ α :=
@@ -213,12 +201,6 @@ def withLowerTopologyHomeomorph : WithLowerTopology α ≃ₜ α :=
continuous_invFun := by convert← continuous_id; apply topology_eq_lower_topology }
#align lower_topology.with_lower_topology_homeomorph LowerTopology.withLowerTopologyHomeomorph
-/- warning: lower_topology.is_open_iff_generate_Ici_compl -> LowerTopology.isOpen_iff_generate_Ici_compl is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] [_inst_2 : TopologicalSpace.{u1} α] [_inst_3 : LowerTopology.{u1} α _inst_2 _inst_1] {s : Set.{u1} α}, Iff (IsOpen.{u1} α _inst_2 s) (TopologicalSpace.GenerateOpen.{u1} α (setOf.{u1} (Set.{u1} α) (fun (t : Set.{u1} α) => Exists.{succ u1} α (fun (a : α) => Eq.{succ u1} (Set.{u1} α) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) (Set.Ici.{u1} α _inst_1 a)) t))) s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] [_inst_2 : TopologicalSpace.{u1} α] [_inst_3 : LowerTopology.{u1} α _inst_2 _inst_1] {s : Set.{u1} α}, Iff (IsOpen.{u1} α _inst_2 s) (TopologicalSpace.GenerateOpen.{u1} α (setOf.{u1} (Set.{u1} α) (fun (t : Set.{u1} α) => Exists.{succ u1} α (fun (a : α) => Eq.{succ u1} (Set.{u1} α) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) (Set.Ici.{u1} α _inst_1 a)) t))) s)
-Case conversion may be inaccurate. Consider using '#align lower_topology.is_open_iff_generate_Ici_compl LowerTopology.isOpen_iff_generate_Ici_complₓ'. -/
theorem isOpen_iff_generate_Ici_compl : IsOpen s ↔ GenerateOpen { t | ∃ a, Ici aᶜ = t } s := by
rw [topology_eq_lower_topology α] <;> rfl
#align lower_topology.is_open_iff_generate_Ici_compl LowerTopology.isOpen_iff_generate_Ici_compl
@@ -239,12 +221,6 @@ theorem isClosed_upperClosure (h : s.Finite) : IsClosed (upperClosure s : Set α
#align lower_topology.is_closed_upper_closure LowerTopology.isClosed_upperClosure
-/
-/- warning: lower_topology.is_lower_set_of_is_open -> LowerTopology.isLowerSet_of_isOpen is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] [_inst_2 : TopologicalSpace.{u1} α] [_inst_3 : LowerTopology.{u1} α _inst_2 _inst_1] {s : Set.{u1} α}, (IsOpen.{u1} α _inst_2 s) -> (IsLowerSet.{u1} α (Preorder.toHasLe.{u1} α _inst_1) s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] [_inst_2 : TopologicalSpace.{u1} α] [_inst_3 : LowerTopology.{u1} α _inst_2 _inst_1] {s : Set.{u1} α}, (IsOpen.{u1} α _inst_2 s) -> (IsLowerSet.{u1} α (Preorder.toLE.{u1} α _inst_1) s)
-Case conversion may be inaccurate. Consider using '#align lower_topology.is_lower_set_of_is_open LowerTopology.isLowerSet_of_isOpenₓ'. -/
/-- Every set open in the lower topology is a lower set. -/
theorem isLowerSet_of_isOpen (h : IsOpen s) : IsLowerSet s :=
by
@@ -256,12 +232,6 @@ theorem isLowerSet_of_isOpen (h : IsOpen s) : IsLowerSet s :=
case sUnion _ _ ih => exact isLowerSet_sUnion ih
#align lower_topology.is_lower_set_of_is_open LowerTopology.isLowerSet_of_isOpen
-/- warning: lower_topology.is_upper_set_of_is_closed -> LowerTopology.isUpperSet_of_isClosed is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] [_inst_2 : TopologicalSpace.{u1} α] [_inst_3 : LowerTopology.{u1} α _inst_2 _inst_1] {s : Set.{u1} α}, (IsClosed.{u1} α _inst_2 s) -> (IsUpperSet.{u1} α (Preorder.toHasLe.{u1} α _inst_1) s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] [_inst_2 : TopologicalSpace.{u1} α] [_inst_3 : LowerTopology.{u1} α _inst_2 _inst_1] {s : Set.{u1} α}, (IsClosed.{u1} α _inst_2 s) -> (IsUpperSet.{u1} α (Preorder.toLE.{u1} α _inst_1) s)
-Case conversion may be inaccurate. Consider using '#align lower_topology.is_upper_set_of_is_closed LowerTopology.isUpperSet_of_isClosedₓ'. -/
theorem isUpperSet_of_isClosed (h : IsClosed s) : IsUpperSet s :=
isLowerSet_compl.1 <| isLowerSet_of_isOpen h.isOpen_compl
#align lower_topology.is_upper_set_of_is_closed LowerTopology.isUpperSet_of_isClosed
@@ -336,12 +306,6 @@ section CompleteLattice
variable [CompleteLattice α] [CompleteLattice β] [TopologicalSpace α] [LowerTopology α]
[TopologicalSpace β] [LowerTopology β]
-/- warning: Inf_hom.continuous -> sInfHom.continuous is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u1} α] [_inst_2 : CompleteLattice.{u2} β] [_inst_3 : TopologicalSpace.{u1} α] [_inst_4 : LowerTopology.{u1} α _inst_3 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)))] [_inst_5 : TopologicalSpace.{u2} β] [_inst_6 : LowerTopology.{u2} β _inst_5 (PartialOrder.toPreorder.{u2} β (CompleteSemilatticeInf.toPartialOrder.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_2)))] (f : sInfHom.{u1, u2} α β (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) (ConditionallyCompleteLattice.toHasInf.{u2} β (CompleteLattice.toConditionallyCompleteLattice.{u2} β _inst_2))), Continuous.{u1, u2} α β _inst_3 _inst_5 (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (sInfHom.{u1, u2} α β (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) (ConditionallyCompleteLattice.toHasInf.{u2} β (CompleteLattice.toConditionallyCompleteLattice.{u2} β _inst_2))) (fun (_x : sInfHom.{u1, u2} α β (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) (ConditionallyCompleteLattice.toHasInf.{u2} β (CompleteLattice.toConditionallyCompleteLattice.{u2} β _inst_2))) => α -> β) (sInfHom.hasCoeToFun.{u1, u2} α β (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) (ConditionallyCompleteLattice.toHasInf.{u2} β (CompleteLattice.toConditionallyCompleteLattice.{u2} β _inst_2))) f)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u2} α] [_inst_2 : CompleteLattice.{u1} β] [_inst_3 : TopologicalSpace.{u2} α] [_inst_4 : LowerTopology.{u2} α _inst_3 (PartialOrder.toPreorder.{u2} α (CompleteSemilatticeInf.toPartialOrder.{u2} α (CompleteLattice.toCompleteSemilatticeInf.{u2} α _inst_1)))] [_inst_5 : TopologicalSpace.{u1} β] [_inst_6 : LowerTopology.{u1} β _inst_5 (PartialOrder.toPreorder.{u1} β (CompleteSemilatticeInf.toPartialOrder.{u1} β (CompleteLattice.toCompleteSemilatticeInf.{u1} β _inst_2)))] (f : sInfHom.{u2, u1} α β (ConditionallyCompleteLattice.toInfSet.{u2} α (CompleteLattice.toConditionallyCompleteLattice.{u2} α _inst_1)) (ConditionallyCompleteLattice.toInfSet.{u1} β (CompleteLattice.toConditionallyCompleteLattice.{u1} β _inst_2))), Continuous.{u2, u1} α β _inst_3 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (sInfHom.{u2, u1} α β (ConditionallyCompleteLattice.toInfSet.{u2} α (CompleteLattice.toConditionallyCompleteLattice.{u2} α _inst_1)) (ConditionallyCompleteLattice.toInfSet.{u1} β (CompleteLattice.toConditionallyCompleteLattice.{u1} β _inst_2))) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.CompleteLattice._hyg.374 : α) => β) _x) (sInfHomClass.toFunLike.{max u2 u1, u2, u1} (sInfHom.{u2, u1} α β (ConditionallyCompleteLattice.toInfSet.{u2} α (CompleteLattice.toConditionallyCompleteLattice.{u2} α _inst_1)) (ConditionallyCompleteLattice.toInfSet.{u1} β (CompleteLattice.toConditionallyCompleteLattice.{u1} β _inst_2))) α β (ConditionallyCompleteLattice.toInfSet.{u2} α (CompleteLattice.toConditionallyCompleteLattice.{u2} α _inst_1)) (ConditionallyCompleteLattice.toInfSet.{u1} β (CompleteLattice.toConditionallyCompleteLattice.{u1} β _inst_2)) (sInfHom.instSInfHomClassSInfHom.{u2, u1} α β (ConditionallyCompleteLattice.toInfSet.{u2} α (CompleteLattice.toConditionallyCompleteLattice.{u2} α _inst_1)) (ConditionallyCompleteLattice.toInfSet.{u1} β (CompleteLattice.toConditionallyCompleteLattice.{u1} β _inst_2)))) f)
-Case conversion may be inaccurate. Consider using '#align Inf_hom.continuous sInfHom.continuousₓ'. -/
theorem sInfHom.continuous (f : sInfHom α β) : Continuous f :=
by
convert continuous_generateFrom _
@@ -353,12 +317,6 @@ theorem sInfHom.continuous (f : sInfHom α β) : Continuous f :=
simp [map_Inf]
#align Inf_hom.continuous sInfHom.continuous
-/- warning: lower_topology.to_has_continuous_inf -> LowerTopology.continuousInf is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : CompleteLattice.{u1} α] [_inst_3 : TopologicalSpace.{u1} α] [_inst_4 : LowerTopology.{u1} α _inst_3 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)))], ContinuousInf.{u1} α _inst_3 (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (ConditionallyCompleteLattice.toLattice.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CompleteLattice.{u1} α] [_inst_3 : TopologicalSpace.{u1} α] [_inst_4 : LowerTopology.{u1} α _inst_3 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)))], ContinuousInf.{u1} α _inst_3 (Lattice.toInf.{u1} α (ConditionallyCompleteLattice.toLattice.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)))
-Case conversion may be inaccurate. Consider using '#align lower_topology.to_has_continuous_inf LowerTopology.continuousInfₓ'. -/
-- see Note [lower instance priority]
instance (priority := 90) LowerTopology.continuousInf : ContinuousInf α :=
⟨(infsInfHom : sInfHom (α × α) α).Continuous⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -209,12 +209,8 @@ Case conversion may be inaccurate. Consider using '#align lower_topology.with_lo
def withLowerTopologyHomeomorph : WithLowerTopology α ≃ₜ α :=
{
WithLowerTopology.ofLower with
- continuous_toFun := by
- convert continuous_id
- apply topology_eq_lower_topology
- continuous_invFun := by
- convert← continuous_id
- apply topology_eq_lower_topology }
+ continuous_toFun := by convert continuous_id; apply topology_eq_lower_topology
+ continuous_invFun := by convert← continuous_id; apply topology_eq_lower_topology }
#align lower_topology.with_lower_topology_homeomorph LowerTopology.withLowerTopologyHomeomorph
/- warning: lower_topology.is_open_iff_generate_Ici_compl -> LowerTopology.isOpen_iff_generate_Ici_compl is a dubious translation:
mathlib commit https://github.com/leanprover-community/mathlib/commit/95a87616d63b3cb49d3fe678d416fbe9c4217bf4
@@ -161,7 +161,7 @@ theorem isOpen_preimage_ofLower (S : Set α) :
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] (T : Set.{u1} (WithLowerTopology.{u1} α)), Iff (IsOpen.{u1} (WithLowerTopology.{u1} α) (WithLowerTopology.topologicalSpace.{u1} α _inst_1) T) (TopologicalSpace.IsOpen.{u1} α (TopologicalSpace.generateFrom.{u1} α (setOf.{u1} (Set.{u1} α) (fun (s : Set.{u1} α) => Exists.{succ u1} α (fun (a : α) => Eq.{succ u1} (Set.{u1} α) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) (Set.Ici.{u1} α _inst_1 a)) s)))) (Set.preimage.{u1, u1} α (WithLowerTopology.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (WithLowerTopology.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (WithLowerTopology.{u1} α)) => α -> (WithLowerTopology.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (WithLowerTopology.{u1} α)) (WithLowerTopology.toLower.{u1} α)) T))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] (T : Set.{u1} (WithLowerTopology.{u1} α)), Iff (IsOpen.{u1} (WithLowerTopology.{u1} α) (WithLowerTopology.instTopologicalSpaceWithLowerTopology.{u1} α _inst_1) T) (TopologicalSpace.IsOpen.{u1} α (TopologicalSpace.generateFrom.{u1} α (setOf.{u1} (Set.{u1} α) (fun (s : Set.{u1} α) => Exists.{succ u1} α (fun (a : α) => Eq.{succ u1} (Set.{u1} α) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) (Set.Ici.{u1} α _inst_1 a)) s)))) (Set.preimage.{u1, u1} α (WithLowerTopology.{u1} α) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} α (WithLowerTopology.{u1} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => WithLowerTopology.{u1} α) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} α (WithLowerTopology.{u1} α)) (WithLowerTopology.toLower.{u1} α)) T))
+ forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] (T : Set.{u1} (WithLowerTopology.{u1} α)), Iff (IsOpen.{u1} (WithLowerTopology.{u1} α) (WithLowerTopology.instTopologicalSpaceWithLowerTopology.{u1} α _inst_1) T) (TopologicalSpace.IsOpen.{u1} α (TopologicalSpace.generateFrom.{u1} α (setOf.{u1} (Set.{u1} α) (fun (s : Set.{u1} α) => Exists.{succ u1} α (fun (a : α) => Eq.{succ u1} (Set.{u1} α) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) (Set.Ici.{u1} α _inst_1 a)) s)))) (Set.preimage.{u1, u1} α (WithLowerTopology.{u1} α) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} α (WithLowerTopology.{u1} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => WithLowerTopology.{u1} α) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} α (WithLowerTopology.{u1} α)) (WithLowerTopology.toLower.{u1} α)) T))
Case conversion may be inaccurate. Consider using '#align with_lower_topology.is_open_def WithLowerTopology.isOpen_defₓ'. -/
theorem isOpen_def (T : Set (WithLowerTopology α)) :
IsOpen T ↔
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -243,7 +243,12 @@ theorem isClosed_upperClosure (h : s.Finite) : IsClosed (upperClosure s : Set α
#align lower_topology.is_closed_upper_closure LowerTopology.isClosed_upperClosure
-/
-#print LowerTopology.isLowerSet_of_isOpen /-
+/- warning: lower_topology.is_lower_set_of_is_open -> LowerTopology.isLowerSet_of_isOpen is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] [_inst_2 : TopologicalSpace.{u1} α] [_inst_3 : LowerTopology.{u1} α _inst_2 _inst_1] {s : Set.{u1} α}, (IsOpen.{u1} α _inst_2 s) -> (IsLowerSet.{u1} α (Preorder.toHasLe.{u1} α _inst_1) s)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] [_inst_2 : TopologicalSpace.{u1} α] [_inst_3 : LowerTopology.{u1} α _inst_2 _inst_1] {s : Set.{u1} α}, (IsOpen.{u1} α _inst_2 s) -> (IsLowerSet.{u1} α (Preorder.toLE.{u1} α _inst_1) s)
+Case conversion may be inaccurate. Consider using '#align lower_topology.is_lower_set_of_is_open LowerTopology.isLowerSet_of_isOpenₓ'. -/
/-- Every set open in the lower topology is a lower set. -/
theorem isLowerSet_of_isOpen (h : IsOpen s) : IsLowerSet s :=
by
@@ -254,13 +259,16 @@ theorem isLowerSet_of_isOpen (h : IsOpen s) : IsLowerSet s :=
case inter u v hu1 hv1 hu2 hv2 => exact hu2.inter hv2
case sUnion _ _ ih => exact isLowerSet_sUnion ih
#align lower_topology.is_lower_set_of_is_open LowerTopology.isLowerSet_of_isOpen
--/
-#print LowerTopology.isUpperSet_of_isClosed /-
+/- warning: lower_topology.is_upper_set_of_is_closed -> LowerTopology.isUpperSet_of_isClosed is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] [_inst_2 : TopologicalSpace.{u1} α] [_inst_3 : LowerTopology.{u1} α _inst_2 _inst_1] {s : Set.{u1} α}, (IsClosed.{u1} α _inst_2 s) -> (IsUpperSet.{u1} α (Preorder.toHasLe.{u1} α _inst_1) s)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] [_inst_2 : TopologicalSpace.{u1} α] [_inst_3 : LowerTopology.{u1} α _inst_2 _inst_1] {s : Set.{u1} α}, (IsClosed.{u1} α _inst_2 s) -> (IsUpperSet.{u1} α (Preorder.toLE.{u1} α _inst_1) s)
+Case conversion may be inaccurate. Consider using '#align lower_topology.is_upper_set_of_is_closed LowerTopology.isUpperSet_of_isClosedₓ'. -/
theorem isUpperSet_of_isClosed (h : IsClosed s) : IsUpperSet s :=
isLowerSet_compl.1 <| isLowerSet_of_isOpen h.isOpen_compl
#align lower_topology.is_upper_set_of_is_closed LowerTopology.isUpperSet_of_isClosed
--/
#print LowerTopology.closure_singleton /-
/--
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -238,8 +238,8 @@ theorem isClosed_Ici (a : α) : IsClosed (Ici a) :=
/-- The upper closure of a finite set is closed in the lower topology. -/
theorem isClosed_upperClosure (h : s.Finite) : IsClosed (upperClosure s : Set α) :=
by
- simp only [← UpperSet.infᵢ_Ici, UpperSet.coe_infᵢ]
- exact isClosed_bunionᵢ h fun a h₁ => isClosed_Ici a
+ simp only [← UpperSet.iInf_Ici, UpperSet.coe_iInf]
+ exact isClosed_biUnion h fun a h₁ => isClosed_Ici a
#align lower_topology.is_closed_upper_closure LowerTopology.isClosed_upperClosure
-/
@@ -252,7 +252,7 @@ theorem isLowerSet_of_isOpen (h : IsOpen s) : IsLowerSet s :=
case basic u h => obtain ⟨a, rfl⟩ := h; exact (isUpperSet_Ici a).compl
case univ => exact isLowerSet_univ
case inter u v hu1 hv1 hu2 hv2 => exact hu2.inter hv2
- case sUnion _ _ ih => exact isLowerSet_unionₛ ih
+ case sUnion _ _ ih => exact isLowerSet_sUnion ih
#align lower_topology.is_lower_set_of_is_open LowerTopology.isLowerSet_of_isOpen
-/
@@ -322,7 +322,7 @@ instance [Preorder α] [TopologicalSpace α] [LowerTopology α] [OrderBot α] [P
dsimp
simp_rw [coe_upperClosure, compl_Union, prod_eq, preimage_Inter, preimage_compl]
-- Note: `refine` doesn't work here because it tries using `prod.topological_space`.
- apply (isOpen_binterᵢ hs fun a _ => _).inter (isOpen_binterᵢ ht fun b _ => _)
+ apply (isOpen_biInter hs fun a _ => _).inter (isOpen_biInter ht fun b _ => _)
· exact generate_open.basic _ ⟨(a, ⊥), by simp [Ici_prod_eq, prod_univ]⟩
· exact generate_open.basic _ ⟨(⊥, b), by simp [Ici_prod_eq, univ_prod]⟩
all_goals infer_instance
@@ -332,22 +332,22 @@ section CompleteLattice
variable [CompleteLattice α] [CompleteLattice β] [TopologicalSpace α] [LowerTopology α]
[TopologicalSpace β] [LowerTopology β]
-/- warning: Inf_hom.continuous -> InfₛHom.continuous is a dubious translation:
+/- warning: Inf_hom.continuous -> sInfHom.continuous is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u1} α] [_inst_2 : CompleteLattice.{u2} β] [_inst_3 : TopologicalSpace.{u1} α] [_inst_4 : LowerTopology.{u1} α _inst_3 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)))] [_inst_5 : TopologicalSpace.{u2} β] [_inst_6 : LowerTopology.{u2} β _inst_5 (PartialOrder.toPreorder.{u2} β (CompleteSemilatticeInf.toPartialOrder.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_2)))] (f : InfₛHom.{u1, u2} α β (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) (ConditionallyCompleteLattice.toHasInf.{u2} β (CompleteLattice.toConditionallyCompleteLattice.{u2} β _inst_2))), Continuous.{u1, u2} α β _inst_3 _inst_5 (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (InfₛHom.{u1, u2} α β (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) (ConditionallyCompleteLattice.toHasInf.{u2} β (CompleteLattice.toConditionallyCompleteLattice.{u2} β _inst_2))) (fun (_x : InfₛHom.{u1, u2} α β (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) (ConditionallyCompleteLattice.toHasInf.{u2} β (CompleteLattice.toConditionallyCompleteLattice.{u2} β _inst_2))) => α -> β) (InfₛHom.hasCoeToFun.{u1, u2} α β (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) (ConditionallyCompleteLattice.toHasInf.{u2} β (CompleteLattice.toConditionallyCompleteLattice.{u2} β _inst_2))) f)
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u1} α] [_inst_2 : CompleteLattice.{u2} β] [_inst_3 : TopologicalSpace.{u1} α] [_inst_4 : LowerTopology.{u1} α _inst_3 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)))] [_inst_5 : TopologicalSpace.{u2} β] [_inst_6 : LowerTopology.{u2} β _inst_5 (PartialOrder.toPreorder.{u2} β (CompleteSemilatticeInf.toPartialOrder.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_2)))] (f : sInfHom.{u1, u2} α β (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) (ConditionallyCompleteLattice.toHasInf.{u2} β (CompleteLattice.toConditionallyCompleteLattice.{u2} β _inst_2))), Continuous.{u1, u2} α β _inst_3 _inst_5 (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (sInfHom.{u1, u2} α β (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) (ConditionallyCompleteLattice.toHasInf.{u2} β (CompleteLattice.toConditionallyCompleteLattice.{u2} β _inst_2))) (fun (_x : sInfHom.{u1, u2} α β (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) (ConditionallyCompleteLattice.toHasInf.{u2} β (CompleteLattice.toConditionallyCompleteLattice.{u2} β _inst_2))) => α -> β) (sInfHom.hasCoeToFun.{u1, u2} α β (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) (ConditionallyCompleteLattice.toHasInf.{u2} β (CompleteLattice.toConditionallyCompleteLattice.{u2} β _inst_2))) f)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u2} α] [_inst_2 : CompleteLattice.{u1} β] [_inst_3 : TopologicalSpace.{u2} α] [_inst_4 : LowerTopology.{u2} α _inst_3 (PartialOrder.toPreorder.{u2} α (CompleteSemilatticeInf.toPartialOrder.{u2} α (CompleteLattice.toCompleteSemilatticeInf.{u2} α _inst_1)))] [_inst_5 : TopologicalSpace.{u1} β] [_inst_6 : LowerTopology.{u1} β _inst_5 (PartialOrder.toPreorder.{u1} β (CompleteSemilatticeInf.toPartialOrder.{u1} β (CompleteLattice.toCompleteSemilatticeInf.{u1} β _inst_2)))] (f : InfₛHom.{u2, u1} α β (ConditionallyCompleteLattice.toInfSet.{u2} α (CompleteLattice.toConditionallyCompleteLattice.{u2} α _inst_1)) (ConditionallyCompleteLattice.toInfSet.{u1} β (CompleteLattice.toConditionallyCompleteLattice.{u1} β _inst_2))), Continuous.{u2, u1} α β _inst_3 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (InfₛHom.{u2, u1} α β (ConditionallyCompleteLattice.toInfSet.{u2} α (CompleteLattice.toConditionallyCompleteLattice.{u2} α _inst_1)) (ConditionallyCompleteLattice.toInfSet.{u1} β (CompleteLattice.toConditionallyCompleteLattice.{u1} β _inst_2))) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.CompleteLattice._hyg.374 : α) => β) _x) (InfₛHomClass.toFunLike.{max u2 u1, u2, u1} (InfₛHom.{u2, u1} α β (ConditionallyCompleteLattice.toInfSet.{u2} α (CompleteLattice.toConditionallyCompleteLattice.{u2} α _inst_1)) (ConditionallyCompleteLattice.toInfSet.{u1} β (CompleteLattice.toConditionallyCompleteLattice.{u1} β _inst_2))) α β (ConditionallyCompleteLattice.toInfSet.{u2} α (CompleteLattice.toConditionallyCompleteLattice.{u2} α _inst_1)) (ConditionallyCompleteLattice.toInfSet.{u1} β (CompleteLattice.toConditionallyCompleteLattice.{u1} β _inst_2)) (InfₛHom.instInfₛHomClassInfₛHom.{u2, u1} α β (ConditionallyCompleteLattice.toInfSet.{u2} α (CompleteLattice.toConditionallyCompleteLattice.{u2} α _inst_1)) (ConditionallyCompleteLattice.toInfSet.{u1} β (CompleteLattice.toConditionallyCompleteLattice.{u1} β _inst_2)))) f)
-Case conversion may be inaccurate. Consider using '#align Inf_hom.continuous InfₛHom.continuousₓ'. -/
-theorem InfₛHom.continuous (f : InfₛHom α β) : Continuous f :=
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u2} α] [_inst_2 : CompleteLattice.{u1} β] [_inst_3 : TopologicalSpace.{u2} α] [_inst_4 : LowerTopology.{u2} α _inst_3 (PartialOrder.toPreorder.{u2} α (CompleteSemilatticeInf.toPartialOrder.{u2} α (CompleteLattice.toCompleteSemilatticeInf.{u2} α _inst_1)))] [_inst_5 : TopologicalSpace.{u1} β] [_inst_6 : LowerTopology.{u1} β _inst_5 (PartialOrder.toPreorder.{u1} β (CompleteSemilatticeInf.toPartialOrder.{u1} β (CompleteLattice.toCompleteSemilatticeInf.{u1} β _inst_2)))] (f : sInfHom.{u2, u1} α β (ConditionallyCompleteLattice.toInfSet.{u2} α (CompleteLattice.toConditionallyCompleteLattice.{u2} α _inst_1)) (ConditionallyCompleteLattice.toInfSet.{u1} β (CompleteLattice.toConditionallyCompleteLattice.{u1} β _inst_2))), Continuous.{u2, u1} α β _inst_3 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (sInfHom.{u2, u1} α β (ConditionallyCompleteLattice.toInfSet.{u2} α (CompleteLattice.toConditionallyCompleteLattice.{u2} α _inst_1)) (ConditionallyCompleteLattice.toInfSet.{u1} β (CompleteLattice.toConditionallyCompleteLattice.{u1} β _inst_2))) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.CompleteLattice._hyg.374 : α) => β) _x) (sInfHomClass.toFunLike.{max u2 u1, u2, u1} (sInfHom.{u2, u1} α β (ConditionallyCompleteLattice.toInfSet.{u2} α (CompleteLattice.toConditionallyCompleteLattice.{u2} α _inst_1)) (ConditionallyCompleteLattice.toInfSet.{u1} β (CompleteLattice.toConditionallyCompleteLattice.{u1} β _inst_2))) α β (ConditionallyCompleteLattice.toInfSet.{u2} α (CompleteLattice.toConditionallyCompleteLattice.{u2} α _inst_1)) (ConditionallyCompleteLattice.toInfSet.{u1} β (CompleteLattice.toConditionallyCompleteLattice.{u1} β _inst_2)) (sInfHom.instSInfHomClassSInfHom.{u2, u1} α β (ConditionallyCompleteLattice.toInfSet.{u2} α (CompleteLattice.toConditionallyCompleteLattice.{u2} α _inst_1)) (ConditionallyCompleteLattice.toInfSet.{u1} β (CompleteLattice.toConditionallyCompleteLattice.{u1} β _inst_2)))) f)
+Case conversion may be inaccurate. Consider using '#align Inf_hom.continuous sInfHom.continuousₓ'. -/
+theorem sInfHom.continuous (f : sInfHom α β) : Continuous f :=
by
convert continuous_generateFrom _
· exact LowerTopology.topology_eq_lowerTopology β
rintro _ ⟨b, rfl⟩
rw [preimage_compl, isOpen_compl_iff]
convert LowerTopology.isClosed_Ici (Inf <| f ⁻¹' Ici b)
- refine' subset_antisymm (fun a => infₛ_le) fun a ha => le_trans _ <| OrderHomClass.mono f ha
+ refine' subset_antisymm (fun a => sInf_le) fun a ha => le_trans _ <| OrderHomClass.mono f ha
simp [map_Inf]
-#align Inf_hom.continuous InfₛHom.continuous
+#align Inf_hom.continuous sInfHom.continuous
/- warning: lower_topology.to_has_continuous_inf -> LowerTopology.continuousInf is a dubious translation:
lean 3 declaration is
@@ -357,7 +357,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align lower_topology.to_has_continuous_inf LowerTopology.continuousInfₓ'. -/
-- see Note [lower instance priority]
instance (priority := 90) LowerTopology.continuousInf : ContinuousInf α :=
- ⟨(infInfₛHom : InfₛHom (α × α) α).Continuous⟩
+ ⟨(infsInfHom : sInfHom (α × α) α).Continuous⟩
#align lower_topology.to_has_continuous_inf LowerTopology.continuousInf
end CompleteLattice
mathlib commit https://github.com/leanprover-community/mathlib/commit/09079525fd01b3dda35e96adaa08d2f943e1648c
@@ -172,7 +172,7 @@ theorem isOpen_def (T : Set (WithLowerTopology α)) :
end WithLowerTopology
#print LowerTopology /-
-/- ./././Mathport/Syntax/Translate/Command.lean:388:30: infer kinds are unsupported in Lean 4: #[`topology_eq_lowerTopology] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`topology_eq_lowerTopology] [] -/
/--
The lower topology is the topology generated by the complements of the closed intervals to infinity.
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -213,7 +213,7 @@ def withLowerTopologyHomeomorph : WithLowerTopology α ≃ₜ α :=
convert continuous_id
apply topology_eq_lower_topology
continuous_invFun := by
- convert ← continuous_id
+ convert← continuous_id
apply topology_eq_lower_topology }
#align lower_topology.with_lower_topology_homeomorph LowerTopology.withLowerTopologyHomeomorph
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -161,7 +161,7 @@ theorem isOpen_preimage_ofLower (S : Set α) :
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] (T : Set.{u1} (WithLowerTopology.{u1} α)), Iff (IsOpen.{u1} (WithLowerTopology.{u1} α) (WithLowerTopology.topologicalSpace.{u1} α _inst_1) T) (TopologicalSpace.IsOpen.{u1} α (TopologicalSpace.generateFrom.{u1} α (setOf.{u1} (Set.{u1} α) (fun (s : Set.{u1} α) => Exists.{succ u1} α (fun (a : α) => Eq.{succ u1} (Set.{u1} α) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) (Set.Ici.{u1} α _inst_1 a)) s)))) (Set.preimage.{u1, u1} α (WithLowerTopology.{u1} α) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (WithLowerTopology.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (WithLowerTopology.{u1} α)) => α -> (WithLowerTopology.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (WithLowerTopology.{u1} α)) (WithLowerTopology.toLower.{u1} α)) T))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] (T : Set.{u1} (WithLowerTopology.{u1} α)), Iff (IsOpen.{u1} (WithLowerTopology.{u1} α) (WithLowerTopology.instTopologicalSpaceWithLowerTopology.{u1} α _inst_1) T) (TopologicalSpace.IsOpen.{u1} α (TopologicalSpace.generateFrom.{u1} α (setOf.{u1} (Set.{u1} α) (fun (s : Set.{u1} α) => Exists.{succ u1} α (fun (a : α) => Eq.{succ u1} (Set.{u1} α) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) (Set.Ici.{u1} α _inst_1 a)) s)))) (Set.preimage.{u1, u1} α (WithLowerTopology.{u1} α) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} α (WithLowerTopology.{u1} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α) => WithLowerTopology.{u1} α) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} α (WithLowerTopology.{u1} α)) (WithLowerTopology.toLower.{u1} α)) T))
+ forall {α : Type.{u1}} [_inst_1 : Preorder.{u1} α] (T : Set.{u1} (WithLowerTopology.{u1} α)), Iff (IsOpen.{u1} (WithLowerTopology.{u1} α) (WithLowerTopology.instTopologicalSpaceWithLowerTopology.{u1} α _inst_1) T) (TopologicalSpace.IsOpen.{u1} α (TopologicalSpace.generateFrom.{u1} α (setOf.{u1} (Set.{u1} α) (fun (s : Set.{u1} α) => Exists.{succ u1} α (fun (a : α) => Eq.{succ u1} (Set.{u1} α) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) (Set.Ici.{u1} α _inst_1 a)) s)))) (Set.preimage.{u1, u1} α (WithLowerTopology.{u1} α) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} α (WithLowerTopology.{u1} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => WithLowerTopology.{u1} α) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} α (WithLowerTopology.{u1} α)) (WithLowerTopology.toLower.{u1} α)) T))
Case conversion may be inaccurate. Consider using '#align with_lower_topology.is_open_def WithLowerTopology.isOpen_defₓ'. -/
theorem isOpen_def (T : Set (WithLowerTopology α)) :
IsOpen T ↔
@@ -336,7 +336,7 @@ variable [CompleteLattice α] [CompleteLattice β] [TopologicalSpace α] [LowerT
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CompleteLattice.{u1} α] [_inst_2 : CompleteLattice.{u2} β] [_inst_3 : TopologicalSpace.{u1} α] [_inst_4 : LowerTopology.{u1} α _inst_3 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)))] [_inst_5 : TopologicalSpace.{u2} β] [_inst_6 : LowerTopology.{u2} β _inst_5 (PartialOrder.toPreorder.{u2} β (CompleteSemilatticeInf.toPartialOrder.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_2)))] (f : InfₛHom.{u1, u2} α β (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) (ConditionallyCompleteLattice.toHasInf.{u2} β (CompleteLattice.toConditionallyCompleteLattice.{u2} β _inst_2))), Continuous.{u1, u2} α β _inst_3 _inst_5 (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (InfₛHom.{u1, u2} α β (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) (ConditionallyCompleteLattice.toHasInf.{u2} β (CompleteLattice.toConditionallyCompleteLattice.{u2} β _inst_2))) (fun (_x : InfₛHom.{u1, u2} α β (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) (ConditionallyCompleteLattice.toHasInf.{u2} β (CompleteLattice.toConditionallyCompleteLattice.{u2} β _inst_2))) => α -> β) (InfₛHom.hasCoeToFun.{u1, u2} α β (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) (ConditionallyCompleteLattice.toHasInf.{u2} β (CompleteLattice.toConditionallyCompleteLattice.{u2} β _inst_2))) f)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u2} α] [_inst_2 : CompleteLattice.{u1} β] [_inst_3 : TopologicalSpace.{u2} α] [_inst_4 : LowerTopology.{u2} α _inst_3 (PartialOrder.toPreorder.{u2} α (CompleteSemilatticeInf.toPartialOrder.{u2} α (CompleteLattice.toCompleteSemilatticeInf.{u2} α _inst_1)))] [_inst_5 : TopologicalSpace.{u1} β] [_inst_6 : LowerTopology.{u1} β _inst_5 (PartialOrder.toPreorder.{u1} β (CompleteSemilatticeInf.toPartialOrder.{u1} β (CompleteLattice.toCompleteSemilatticeInf.{u1} β _inst_2)))] (f : InfₛHom.{u2, u1} α β (ConditionallyCompleteLattice.toInfSet.{u2} α (CompleteLattice.toConditionallyCompleteLattice.{u2} α _inst_1)) (ConditionallyCompleteLattice.toInfSet.{u1} β (CompleteLattice.toConditionallyCompleteLattice.{u1} β _inst_2))), Continuous.{u2, u1} α β _inst_3 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (InfₛHom.{u2, u1} α β (ConditionallyCompleteLattice.toInfSet.{u2} α (CompleteLattice.toConditionallyCompleteLattice.{u2} α _inst_1)) (ConditionallyCompleteLattice.toInfSet.{u1} β (CompleteLattice.toConditionallyCompleteLattice.{u1} β _inst_2))) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.CompleteLattice._hyg.372 : α) => β) _x) (InfₛHomClass.toFunLike.{max u2 u1, u2, u1} (InfₛHom.{u2, u1} α β (ConditionallyCompleteLattice.toInfSet.{u2} α (CompleteLattice.toConditionallyCompleteLattice.{u2} α _inst_1)) (ConditionallyCompleteLattice.toInfSet.{u1} β (CompleteLattice.toConditionallyCompleteLattice.{u1} β _inst_2))) α β (ConditionallyCompleteLattice.toInfSet.{u2} α (CompleteLattice.toConditionallyCompleteLattice.{u2} α _inst_1)) (ConditionallyCompleteLattice.toInfSet.{u1} β (CompleteLattice.toConditionallyCompleteLattice.{u1} β _inst_2)) (InfₛHom.instInfₛHomClassInfₛHom.{u2, u1} α β (ConditionallyCompleteLattice.toInfSet.{u2} α (CompleteLattice.toConditionallyCompleteLattice.{u2} α _inst_1)) (ConditionallyCompleteLattice.toInfSet.{u1} β (CompleteLattice.toConditionallyCompleteLattice.{u1} β _inst_2)))) f)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CompleteLattice.{u2} α] [_inst_2 : CompleteLattice.{u1} β] [_inst_3 : TopologicalSpace.{u2} α] [_inst_4 : LowerTopology.{u2} α _inst_3 (PartialOrder.toPreorder.{u2} α (CompleteSemilatticeInf.toPartialOrder.{u2} α (CompleteLattice.toCompleteSemilatticeInf.{u2} α _inst_1)))] [_inst_5 : TopologicalSpace.{u1} β] [_inst_6 : LowerTopology.{u1} β _inst_5 (PartialOrder.toPreorder.{u1} β (CompleteSemilatticeInf.toPartialOrder.{u1} β (CompleteLattice.toCompleteSemilatticeInf.{u1} β _inst_2)))] (f : InfₛHom.{u2, u1} α β (ConditionallyCompleteLattice.toInfSet.{u2} α (CompleteLattice.toConditionallyCompleteLattice.{u2} α _inst_1)) (ConditionallyCompleteLattice.toInfSet.{u1} β (CompleteLattice.toConditionallyCompleteLattice.{u1} β _inst_2))), Continuous.{u2, u1} α β _inst_3 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (InfₛHom.{u2, u1} α β (ConditionallyCompleteLattice.toInfSet.{u2} α (CompleteLattice.toConditionallyCompleteLattice.{u2} α _inst_1)) (ConditionallyCompleteLattice.toInfSet.{u1} β (CompleteLattice.toConditionallyCompleteLattice.{u1} β _inst_2))) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.CompleteLattice._hyg.374 : α) => β) _x) (InfₛHomClass.toFunLike.{max u2 u1, u2, u1} (InfₛHom.{u2, u1} α β (ConditionallyCompleteLattice.toInfSet.{u2} α (CompleteLattice.toConditionallyCompleteLattice.{u2} α _inst_1)) (ConditionallyCompleteLattice.toInfSet.{u1} β (CompleteLattice.toConditionallyCompleteLattice.{u1} β _inst_2))) α β (ConditionallyCompleteLattice.toInfSet.{u2} α (CompleteLattice.toConditionallyCompleteLattice.{u2} α _inst_1)) (ConditionallyCompleteLattice.toInfSet.{u1} β (CompleteLattice.toConditionallyCompleteLattice.{u1} β _inst_2)) (InfₛHom.instInfₛHomClassInfₛHom.{u2, u1} α β (ConditionallyCompleteLattice.toInfSet.{u2} α (CompleteLattice.toConditionallyCompleteLattice.{u2} α _inst_1)) (ConditionallyCompleteLattice.toInfSet.{u1} β (CompleteLattice.toConditionallyCompleteLattice.{u1} β _inst_2)))) f)
Case conversion may be inaccurate. Consider using '#align Inf_hom.continuous InfₛHom.continuousₓ'. -/
theorem InfₛHom.continuous (f : InfₛHom α β) : Continuous f :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/9da1b3534b65d9661eb8f42443598a92bbb49211
@@ -349,12 +349,16 @@ theorem InfₛHom.continuous (f : InfₛHom α β) : Continuous f :=
simp [map_Inf]
#align Inf_hom.continuous InfₛHom.continuous
-#print LowerTopology.continuousInf /-
+/- warning: lower_topology.to_has_continuous_inf -> LowerTopology.continuousInf is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : CompleteLattice.{u1} α] [_inst_3 : TopologicalSpace.{u1} α] [_inst_4 : LowerTopology.{u1} α _inst_3 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)))], ContinuousInf.{u1} α _inst_3 (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (ConditionallyCompleteLattice.toLattice.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : CompleteLattice.{u1} α] [_inst_3 : TopologicalSpace.{u1} α] [_inst_4 : LowerTopology.{u1} α _inst_3 (PartialOrder.toPreorder.{u1} α (CompleteSemilatticeInf.toPartialOrder.{u1} α (CompleteLattice.toCompleteSemilatticeInf.{u1} α _inst_1)))], ContinuousInf.{u1} α _inst_3 (Lattice.toInf.{u1} α (ConditionallyCompleteLattice.toLattice.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)))
+Case conversion may be inaccurate. Consider using '#align lower_topology.to_has_continuous_inf LowerTopology.continuousInfₓ'. -/
-- see Note [lower instance priority]
instance (priority := 90) LowerTopology.continuousInf : ContinuousInf α :=
⟨(infInfₛHom : InfₛHom (α × α) α).Continuous⟩
#align lower_topology.to_has_continuous_inf LowerTopology.continuousInf
--/
end CompleteLattice
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -98,7 +98,7 @@ namespace WithLower
lemma toLower_inj {a b : α} : toLower a = toLower b ↔ a = b := Iff.rfl
#align with_lower_topology.to_lower_inj Topology.WithLower.toLower_inj
--- porting note: removed @[simp] to make linter happy
+-- Porting note: removed @[simp] to make linter happy
theorem ofLower_inj {a b : WithLower α} : ofLower a = ofLower b ↔ a = b :=
Iff.rfl
#align with_lower_topology.of_lower_inj Topology.WithLower.ofLower_inj
@@ -239,7 +239,7 @@ theorem isClosed_upperClosure (h : s.Finite) : IsClosed (upperClosure s : Set α
/-- Every set open in the lower topology is a lower set. -/
theorem isLowerSet_of_isOpen (h : IsOpen s) : IsLowerSet s := by
- -- porting note: `rw` leaves a shadowed assumption
+ -- Porting note: `rw` leaves a shadowed assumption
replace h := isOpen_iff_generate_Ici_compl.1 h
induction h with
| basic u h' => obtain ⟨a, rfl⟩ := h'; exact (isUpperSet_Ici a).compl
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>
@@ -412,8 +412,7 @@ instance instIsUpperProd [Preorder α] [TopologicalSpace α] [IsUpper α]
[OrderTop α] [Preorder β] [TopologicalSpace β] [IsUpper β] [OrderTop β] :
IsUpper (α × β) where
topology_eq_upperTopology := by
- suffices : IsLower (α × β)ᵒᵈ
- · exact IsLower.topology_eq_lowerTopology (α := (α × β)ᵒᵈ)
+ suffices IsLower (α × β)ᵒᵈ from IsLower.topology_eq_lowerTopology (α := (α × β)ᵒᵈ)
exact instIsLowerProd (α := αᵒᵈ) (β := βᵒᵈ)
section CompleteLattice_IsLower
@@ -211,9 +211,9 @@ variable {α}
/-- If `α` is equipped with the lower topology, then it is homeomorphic to `WithLower α`.
-/
-def WithLowerHomeomorph : WithLower α ≃ₜ α :=
+def withLowerHomeomorph : WithLower α ≃ₜ α :=
WithLower.ofLower.toHomeomorphOfInducing ⟨by erw [topology_eq α, induced_id]; rfl⟩
-#align lower_topology.with_lower_topology_homeomorph Topology.IsLower.WithLowerHomeomorph
+#align lower_topology.with_lower_topology_homeomorph Topology.IsLower.withLowerHomeomorph
theorem isOpen_iff_generate_Ici_compl : IsOpen s ↔ GenerateOpen { t | ∃ a, (Ici a)ᶜ = t } s := by
rw [topology_eq α]; rfl
@@ -324,7 +324,7 @@ variable {α}
/-- If `α` is equipped with the upper topology, then it is homeomorphic to `WithUpper α`.
-/
-def WithUpperHomeomorph : WithUpper α ≃ₜ α :=
+def withUpperHomeomorph : WithUpper α ≃ₜ α :=
WithUpper.ofUpper.toHomeomorphOfInducing ⟨by erw [topology_eq α, induced_id]; rfl⟩
theorem isOpen_iff_generate_Iic_compl : IsOpen s ↔ GenerateOpen { t | ∃ a, (Iic a)ᶜ = t } s := by
cases x with | ...
instead of cases x; case => ...
(#9321)
This converts usages of the pattern
cases h
case inl h' => ...
case inr h' => ...
which derive from mathported code, to the "structured cases
" syntax:
cases h with
| inl h' => ...
| inr h' => ...
The case where the subgoals are handled with ·
instead of case
is more contentious (and much more numerous) so I left those alone. This pattern also appears with cases'
, induction
, induction'
, and rcases
. Furthermore, there is a similar transformation for by_cases
:
by_cases h : cond
case pos => ...
case neg => ...
is replaced by:
if h : cond then
...
else
...
Co-authored-by: Mario Carneiro <di.gama@gmail.com>
@@ -241,11 +241,11 @@ theorem isClosed_upperClosure (h : s.Finite) : IsClosed (upperClosure s : Set α
theorem isLowerSet_of_isOpen (h : IsOpen s) : IsLowerSet s := by
-- porting note: `rw` leaves a shadowed assumption
replace h := isOpen_iff_generate_Ici_compl.1 h
- induction h
- case basic u h' => obtain ⟨a, rfl⟩ := h'; exact (isUpperSet_Ici a).compl
- case univ => exact isLowerSet_univ
- case inter u v _ _ hu2 hv2 => exact hu2.inter hv2
- case sUnion _ _ ih => exact isLowerSet_sUnion ih
+ induction h with
+ | basic u h' => obtain ⟨a, rfl⟩ := h'; exact (isUpperSet_Ici a).compl
+ | univ => exact isLowerSet_univ
+ | inter u v _ _ hu2 hv2 => exact hu2.inter hv2
+ | sUnion _ _ ih => exact isLowerSet_sUnion ih
#align lower_topology.is_lower_set_of_is_open Topology.IsLower.isLowerSet_of_isOpen
theorem isUpperSet_of_isClosed (h : IsClosed s) : IsUpperSet s :=
continuous_generateFrom
to an iff
(#9259)
Similarly, upgrade tendsto_nhds_generateFrom
, IsTopologicalBasis.continuous
, Topology.IsLower.continuous_of_Ici
, and Topology.IsUpper.continuous_iff_Iic
.
The old lemmas are now deprecated, and the new ones have _iff
in their names.
Once we remove the old lemmas, we can drop the _iff
suffixes.
@@ -277,16 +277,17 @@ protected theorem isTopologicalBasis : IsTopologicalBasis (lowerBasis α) := by
exact ⟨_, finite_range f, by simp_rw [biInter_range, hf, sInter_eq_iInter]⟩
#align lower_topology.is_topological_basis Topology.IsLower.isTopologicalBasis
-/-- A function `f : β → α` with lower topology in the codomain is continuous provided that the
-preimage of every interval `Set.Ici a` is a closed set.
-
-TODO: upgrade to an `iff`. -/
-lemma continuous_of_Ici [TopologicalSpace β] {f : β → α} (h : ∀ a, IsClosed (f ⁻¹' (Ici a))) :
- Continuous f := by
+/-- A function `f : β → α` with lower topology in the codomain is continuous
+if and only if the preimage of every interval `Set.Ici a` is a closed set.
+-/
+lemma continuous_iff_Ici [TopologicalSpace β] {f : β → α} :
+ Continuous f ↔ ∀ a, IsClosed (f ⁻¹' (Ici a)) := by
obtain rfl := IsLower.topology_eq α
- refine continuous_generateFrom ?_
- rintro _ ⟨a, rfl⟩
- exact (h a).isOpen_compl
+ simp [continuous_generateFrom_iff]
+
+/-- A function `f : β → α` with lower topology in the codomain is continuous provided that the
+preimage of every interval `Set.Ici a` is a closed set. -/
+@[deprecated] alias ⟨_, continuous_of_Ici⟩ := continuous_iff_Ici
end Preorder
@@ -359,13 +360,18 @@ theorem closure_singleton (a : α) : closure {a} = Iic a :=
protected theorem isTopologicalBasis : IsTopologicalBasis (upperBasis α) :=
IsLower.isTopologicalBasis (α := αᵒᵈ)
-/-- A function `f : β → α` with upper topology in the codomain is continuous provided that the
-preimage of every interval `Set.Iic a` is a closed set.
+/-- A function `f : β → α` with upper topology in the codomain is continuous
+if and only if the preimage of every interval `Set.Iic a` is a closed set. -/
+lemma continuous_iff_Iic [TopologicalSpace β] {f : β → α} :
+ Continuous f ↔ ∀ a, IsClosed (f ⁻¹' (Iic a)) :=
+ IsLower.continuous_iff_Ici (α := αᵒᵈ)
-TODO: upgrade to an `iff`. -/
+/-- A function `f : β → α` with upper topology in the codomain is continuous
+provided that the preimage of every interval `Set.Iic a` is a closed set. -/
+@[deprecated]
lemma continuous_of_Iic [TopologicalSpace β] {f : β → α} (h : ∀ a, IsClosed (f ⁻¹' (Iic a))) :
Continuous f :=
- IsLower.continuous_of_Ici (α := αᵒᵈ) h
+ continuous_iff_Iic.2 h
end Preorder
@@ -416,7 +422,7 @@ variable [CompleteLattice α] [CompleteLattice β] [TopologicalSpace α] [IsLowe
[TopologicalSpace β] [IsLower β]
protected lemma _root_.sInfHom.continuous (f : sInfHom α β) : Continuous f := by
- refine IsLower.continuous_of_Ici fun b => ?_
+ refine IsLower.continuous_iff_Ici.2 fun b => ?_
convert isClosed_Ici (a := sInf <| f ⁻¹' Ici b)
refine' Subset.antisymm (fun a => sInf_le) fun a ha => le_trans _ <|
OrderHomClass.mono (f : α →o β) ha
Rename the Upper/Lower UpperSet/LowerSet topologies to the conventions suggested by @YaelDillies in https://github.com/leanprover-community/mathlib4/pull/2508#discussion_r1306711450
Co-authored-by: Yaël Dillies <yael.dillies@gmail.com>
@@ -3,9 +3,9 @@ Copyright (c) 2023 Christopher Hoskin. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Christopher Hoskin
-/
+import Mathlib.Order.Hom.CompleteLattice
import Mathlib.Topology.Homeomorph
import Mathlib.Topology.Order.Lattice
-import Mathlib.Order.Hom.CompleteLattice
#align_import topology.order.lower_topology from "leanprover-community/mathlib"@"98e83c3d541c77cdb7da20d79611a780ff8e7d90"
@@ -20,20 +20,20 @@ right-closed left-infinite intervals.
## Main statements
-- `LowerTopology.t0Space` - the lower topology on a partial order is T₀
-- `LowerTopology.isTopologicalBasis` - the complements of the upper closures of finite
+- `IsLower.t0Space` - the lower topology on a partial order is T₀
+- `IsLower.isTopologicalBasis` - the complements of the upper closures of finite
subsets form a basis for the lower topology
-- `LowerTopology.continuousInf` - the inf map is continuous with respect to the lower topology
+- `IsLower.continuousInf` - the inf map is continuous with respect to the lower topology
## Implementation notes
-A type synonym `WithLowerTopology` is introduced and for a preorder `α`, `WithLowerTopology α`
+A type synonym `WithLower` is introduced and for a preorder `α`, `WithLower α`
is made an instance of `TopologicalSpace` by the topology generated by the complements of the
closed intervals to infinity.
-We define a mixin class `LowerTopology` for the class of types which are both a preorder and a
+We define a mixin class `IsLower` for the class of types which are both a preorder and a
topology and where the topology is generated by the complements of the closed intervals to infinity.
-It is shown that `WithLowerTopology α` is an instance of `LowerTopology`.
+It is shown that `WithLower α` is an instance of `IsLower`.
Similarly for the upper topology.
@@ -51,196 +51,140 @@ of the lower topology to the spectrum of a complete lattice coincides with the h
lower topology, upper topology, preorder
-/
-set_option autoImplicit true
+open Set TopologicalSpace Topology
-open Set TopologicalSpace
+namespace Topology
-section WithLowerTopology
+/--
+The lower topology is the topology generated by the complements of the left-closed right-infinite
+intervals.
+-/
+def lower (α : Type*) [Preorder α] : TopologicalSpace α := generateFrom {s | ∃ a, (Ici a)ᶜ = s}
-variable (α β : Type*)
+/--
+The upper topology is the topology generated by the complements of the right-closed left-infinite
+intervals.
+-/
+def upper (α : Type*) [Preorder α] : TopologicalSpace α := generateFrom {s | ∃ a, (Iic a)ᶜ = s}
-/-- Type synonym for a preorder equipped with the lower topology. -/
-def WithLowerTopology := α
-#align with_lower_topology WithLowerTopology
+/-- Type synonym for a preorder equipped with the lower set topology. -/
+def WithLower (α : Type*) := α
+#align with_lower_topology Topology.WithLower
variable {α β}
-namespace WithLowerTopology
+namespace WithLower
-/-- `toLower` is the identity function to the `WithLowerTopology` of a type. -/
-@[match_pattern]
-def toLower : α ≃ WithLowerTopology α := Equiv.refl _
-#align with_lower_topology.to_lower WithLowerTopology.toLower
+/-- `toLower` is the identity function to the `WithLower` of a type. -/
+@[match_pattern] def toLower : α ≃ WithLower α := Equiv.refl _
+#align with_lower_topology.to_lower Topology.WithLower.toLower
-/-- `ofLower` is the identity function from the `WithLowerTopology` of a type. -/
-@[match_pattern]
-def ofLower : WithLowerTopology α ≃ α := Equiv.refl _
-#align with_lower_topology.of_lower WithLowerTopology.ofLower
+/-- `ofLower` is the identity function from the `WithLower` of a type. -/
+@[match_pattern] def ofLower : WithLower α ≃ α := Equiv.refl _
+#align with_lower_topology.of_lower Topology.WithLower.ofLower
-@[simp]
-theorem to_withLowerTopology_symm_eq : (@toLower α).symm = ofLower :=
- rfl
-#align with_lower_topology.to_with_lower_topology_symm_eq WithLowerTopology.to_withLowerTopology_symm_eq
+@[simp] lemma to_WithLower_symm_eq : (@toLower α).symm = ofLower := rfl
+#align with_lower_topology.to_with_lower_topology_symm_eq Topology.WithLower.to_WithLower_symm_eq
-@[simp]
-theorem of_withLowerTopology_symm_eq : (@ofLower α).symm = toLower :=
- rfl
-#align with_lower_topology.of_with_lower_topology_symm_eq WithLowerTopology.of_withLowerTopology_symm_eq
+@[simp] lemma of_WithLower_symm_eq : (@ofLower α).symm = toLower := rfl
+#align with_lower_topology.of_with_lower_topology_symm_eq Topology.WithLower.of_WithLower_symm_eq
-@[simp]
-theorem toLower_ofLower (a : WithLowerTopology α) : toLower (ofLower a) = a :=
- rfl
-#align with_lower_topology.to_lower_of_lower WithLowerTopology.toLower_ofLower
+@[simp] lemma toLower_ofLower (a : WithLower α) : toLower (ofLower a) = a := rfl
+#align with_lower_topology.to_lower_of_lower Topology.WithLower.toLower_ofLower
-@[simp]
-theorem ofLower_toLower (a : α) : ofLower (toLower a) = a :=
- rfl
-#align with_lower_topology.of_lower_to_lower WithLowerTopology.ofLower_toLower
+@[simp] lemma ofLower_toLower (a : α) : ofLower (toLower a) = a := rfl
+#align with_lower_topology.of_lower_to_lower Topology.WithLower.ofLower_toLower
--- porting note: removed @[simp] to make linter happy
-theorem toLower_inj {a b : α} : toLower a = toLower b ↔ a = b :=
- Iff.rfl
-#align with_lower_topology.to_lower_inj WithLowerTopology.toLower_inj
+lemma toLower_inj {a b : α} : toLower a = toLower b ↔ a = b := Iff.rfl
+#align with_lower_topology.to_lower_inj Topology.WithLower.toLower_inj
-- porting note: removed @[simp] to make linter happy
-theorem ofLower_inj {a b : WithLowerTopology α} : ofLower a = ofLower b ↔ a = b :=
+theorem ofLower_inj {a b : WithLower α} : ofLower a = ofLower b ↔ a = b :=
Iff.rfl
-#align with_lower_topology.of_lower_inj WithLowerTopology.ofLower_inj
+#align with_lower_topology.of_lower_inj Topology.WithLower.ofLower_inj
-/-- A recursor for `WithLowerTopology`. Use as `induction x using WithLowerTopology.rec`. -/
-protected def rec {β : WithLowerTopology α → Sort*} (h : ∀ a, β (toLower a)) : ∀ a, β a := fun a =>
+/-- A recursor for `WithLower`. Use as `induction x using WithLower.rec`. -/
+protected def rec {β : WithLower α → Sort*} (h : ∀ a, β (toLower a)) : ∀ a, β a := fun a =>
h (ofLower a)
-#align with_lower_topology.rec WithLowerTopology.rec
-
-instance [Nonempty α] : Nonempty (WithLowerTopology α) :=
- ‹Nonempty α›
+#align with_lower_topology.rec Topology.WithLower.rec
-instance [Inhabited α] : Inhabited (WithLowerTopology α) :=
- ‹Inhabited α›
+instance [Nonempty α] : Nonempty (WithLower α) := ‹Nonempty α›
+instance [Inhabited α] : Inhabited (WithLower α) := ‹Inhabited α›
-variable [Preorder α]
+variable [Preorder α] {s : Set α}
-instance : Preorder (WithLowerTopology α) :=
- ‹Preorder α›
+instance : Preorder (WithLower α) := ‹Preorder α›
+instance : TopologicalSpace (WithLower α) := lower α
-instance : TopologicalSpace (WithLowerTopology α) :=
- generateFrom { s | ∃ a, (Ici a)ᶜ = s }
+lemma isOpen_preimage_ofLower : IsOpen (ofLower ⁻¹' s) ↔ (lower α).IsOpen s := Iff.rfl
+#align with_lower_topology.is_open_preimage_of_lower Topology.WithLower.isOpen_preimage_ofLower
-theorem isOpen_preimage_ofLower (S : Set α) :
- IsOpen (WithLowerTopology.ofLower ⁻¹' S) ↔
- (generateFrom { s : Set α | ∃ a : α, (Ici a)ᶜ = s }).IsOpen S :=
+lemma isOpen_def (T : Set (WithLower α)) : IsOpen T ↔ (lower α).IsOpen (WithLower.toLower ⁻¹' T) :=
Iff.rfl
-#align with_lower_topology.is_open_preimage_of_lower WithLowerTopology.isOpen_preimage_ofLower
+#align with_lower_topology.is_open_def Topology.WithLower.isOpen_def
-theorem isOpen_def (T : Set (WithLowerTopology α)) :
- IsOpen T ↔ (generateFrom { s : Set α | ∃ a : α, (Ici a)ᶜ = s }).IsOpen
- (WithLowerTopology.toLower ⁻¹' T) :=
- Iff.rfl
-#align with_lower_topology.is_open_def WithLowerTopology.isOpen_def
-
-end WithLowerTopology
-
-end WithLowerTopology
-
-section WithUpperTopology
-
-variable (α β : Type*)
+end WithLower
/-- Type synonym for a preorder equipped with the upper topology. -/
-def WithUpperTopology := α
+def WithUpper (α : Type*) := α
+namespace WithUpper
-variable {α β}
+/-- `toUpper` is the identity function to the `WithUpper` of a type. -/
+@[match_pattern] def toUpper : α ≃ WithUpper α := Equiv.refl _
-namespace WithUpperTopology
+/-- `ofUpper` is the identity function from the `WithUpper` of a type. -/
+@[match_pattern] def ofUpper : WithUpper α ≃ α := Equiv.refl _
-/-- `toUpper` is the identity function to the `WithUpperTopology` of a type. -/
-@[match_pattern]
-def toUpper : α ≃ WithUpperTopology α := Equiv.refl _
+@[simp] lemma to_WithUpper_symm_eq {α} : (@toUpper α).symm = ofUpper := rfl
+@[simp] lemma of_WithUpper_symm_eq : (@ofUpper α).symm = toUpper := rfl
+@[simp] lemma toUpper_ofUpper (a : WithUpper α) : toUpper (ofUpper a) = a := rfl
+@[simp] lemma ofUpper_toUpper (a : α) : ofUpper (toUpper a) = a := rfl
+lemma toUpper_inj {a b : α} : toUpper a = toUpper b ↔ a = b := Iff.rfl
+lemma ofUpper_inj {a b : WithUpper α} : ofUpper a = ofUpper b ↔ a = b := Iff.rfl
-/-- `ofUpper` is the identity function from the `WithUpperTopology` of a type. -/
-@[match_pattern]
-def ofUpper : WithUpperTopology α ≃ α := Equiv.refl _
-
-@[simp]
-theorem to_withUpperTopology_symm_eq {α} : (@toUpper α).symm = ofUpper :=
- rfl
-
-@[simp]
-theorem of_withUpperTopology_symm_eq : (@ofUpper α).symm = toUpper :=
- rfl
-
-@[simp]
-theorem toUpper_ofUpper (a : WithUpperTopology α) : toUpper (ofUpper a) = a :=
- rfl
-
-@[simp]
-theorem ofUpper_toUpper (a : α) : ofUpper (toUpper a) = a :=
- rfl
-
-theorem toUpper_inj {a b : α} : toUpper a = toUpper b ↔ a = b :=
- Iff.rfl
-
-theorem ofUpper_inj {a b : WithUpperTopology α} : ofUpper a = ofUpper b ↔ a = b :=
- Iff.rfl
-
-/-- A recursor for `WithUpperTopology`. Use as `induction x using WithUpperTopology.rec`. -/
-protected def rec {β : WithUpperTopology α → Sort*} (h : ∀ a, β (toUpper a)) : ∀ a, β a := fun a =>
+/-- A recursor for `WithUpper`. Use as `induction x using WithUpper.rec`. -/
+protected def rec {β : WithUpper α → Sort*} (h : ∀ a, β (toUpper a)) : ∀ a, β a := fun a =>
h (ofUpper a)
-instance [Nonempty α] : Nonempty (WithUpperTopology α) :=
- ‹Nonempty α›
-
-instance [Inhabited α] : Inhabited (WithUpperTopology α) :=
- ‹Inhabited α›
+instance [Nonempty α] : Nonempty (WithUpper α) := ‹Nonempty α›
+instance [Inhabited α] : Inhabited (WithUpper α) := ‹Inhabited α›
-variable [Preorder α]
+variable [Preorder α] {s : Set α}
-instance : Preorder (WithUpperTopology α) :=
- ‹Preorder α›
+instance : Preorder (WithUpper α) := ‹Preorder α›
+instance : TopologicalSpace (WithUpper α) := upper α
-instance : TopologicalSpace (WithUpperTopology α) :=
- generateFrom { s | ∃ a, (Iic a)ᶜ = s }
+lemma isOpen_preimage_ofUpper : IsOpen (ofUpper ⁻¹' s) ↔ (upper α).IsOpen s := Iff.rfl
-theorem isOpen_preimage_ofUpper (S : Set α) :
- IsOpen (WithUpperTopology.ofUpper ⁻¹' S) ↔
- (generateFrom { s : Set α | ∃ a : α, (Iic a)ᶜ = s }).IsOpen S :=
- Iff.rfl
-
-theorem isOpen_def (T : Set (WithUpperTopology α)) :
- IsOpen T ↔ (generateFrom { s : Set α | ∃ a : α, (Iic a)ᶜ = s }).IsOpen
- (WithUpperTopology.toUpper ⁻¹' T) :=
- Iff.rfl
+lemma isOpen_def {s : Set (WithUpper α)} : IsOpen s ↔ (upper α).IsOpen (toUpper ⁻¹' s) := Iff.rfl
-end WithUpperTopology
-
-end WithUpperTopology
+end WithUpper
/--
The lower topology is the topology generated by the complements of the left-closed right-infinite
intervals.
-/
-class LowerTopology (α : Type*) [t : TopologicalSpace α] [Preorder α] : Prop where
- topology_eq_lowerTopology : t = generateFrom { s | ∃ a, (Ici a)ᶜ = s }
-#align lower_topology LowerTopology
+class IsLower (α : Type*) [t : TopologicalSpace α] [Preorder α] : Prop where
+ topology_eq_lowerTopology : t = lower α
+#align lower_topology Topology.IsLower
+
+attribute [nolint docBlame] IsLower.topology_eq_lowerTopology
/--
The upper topology is the topology generated by the complements of the right-closed left-infinite
intervals.
-/
-class UpperTopology (α : Type*) [t : TopologicalSpace α] [Preorder α] : Prop where
- topology_eq_upperTopology : t = generateFrom { s | ∃ a, (Iic a)ᶜ = s }
-
-instance [Preorder α] : LowerTopology (WithLowerTopology α) :=
- ⟨rfl⟩
+class IsUpper (α : Type*) [t : TopologicalSpace α] [Preorder α] : Prop where
+ topology_eq_upperTopology : t = upper α
+attribute [nolint docBlame] IsUpper.topology_eq_upperTopology
-instance [Preorder α] : UpperTopology (WithUpperTopology α) :=
- ⟨rfl⟩
+instance [Preorder α] : IsLower (WithLower α) := ⟨rfl⟩
+instance [Preorder α] : IsUpper (WithUpper α) := ⟨rfl⟩
/--
The lower topology is homeomorphic to the upper topology on the dual order
-/
-def WithLowerTopology.toDualHomeomorph [Preorder α] : WithLowerTopology α ≃ₜ WithUpperTopology αᵒᵈ
- where
+def WithLower.toDualHomeomorph [Preorder α] : WithLower α ≃ₜ WithUpper αᵒᵈ where
toFun := OrderDual.toDual
invFun := OrderDual.ofDual
left_inv := OrderDual.toDual_ofDual
@@ -248,42 +192,42 @@ def WithLowerTopology.toDualHomeomorph [Preorder α] : WithLowerTopology α ≃
continuous_toFun := continuous_coinduced_rng
continuous_invFun := continuous_coinduced_rng
-namespace LowerTopology
+namespace IsLower
/-- The complements of the upper closures of finite sets are a collection of lower sets
which form a basis for the lower topology. -/
def lowerBasis (α : Type*) [Preorder α] :=
{ s : Set α | ∃ t : Set α, t.Finite ∧ (upperClosure t : Set α)ᶜ = s }
-#align lower_topology.lower_basis LowerTopology.lowerBasis
+#align lower_topology.lower_basis Topology.IsLower.lowerBasis
section Preorder
variable (α)
-variable [Preorder α] [TopologicalSpace α] [LowerTopology α] {s : Set α}
+variable [Preorder α] [TopologicalSpace α] [IsLower α] {s : Set α}
-lemma topology_eq : ‹_› = generateFrom { s | ∃ a : α, (Ici a)ᶜ = s } := topology_eq_lowerTopology
+lemma topology_eq : ‹_› = lower α := topology_eq_lowerTopology
variable {α}
-/-- If `α` is equipped with the lower topology, then it is homeomorphic to `WithLowerTopology α`.
+/-- If `α` is equipped with the lower topology, then it is homeomorphic to `WithLower α`.
-/
-def withLowerTopologyHomeomorph : WithLowerTopology α ≃ₜ α :=
- WithLowerTopology.ofLower.toHomeomorphOfInducing ⟨by erw [topology_eq α, induced_id]; rfl⟩
-#align lower_topology.with_lower_topology_homeomorph LowerTopology.withLowerTopologyHomeomorph
+def WithLowerHomeomorph : WithLower α ≃ₜ α :=
+ WithLower.ofLower.toHomeomorphOfInducing ⟨by erw [topology_eq α, induced_id]; rfl⟩
+#align lower_topology.with_lower_topology_homeomorph Topology.IsLower.WithLowerHomeomorph
theorem isOpen_iff_generate_Ici_compl : IsOpen s ↔ GenerateOpen { t | ∃ a, (Ici a)ᶜ = t } s := by
rw [topology_eq α]; rfl
-#align lower_topology.is_open_iff_generate_Ici_compl LowerTopology.isOpen_iff_generate_Ici_compl
+#align lower_topology.is_open_iff_generate_Ici_compl Topology.IsLower.isOpen_iff_generate_Ici_compl
-instance instUpperTopologyDual [Preorder α] [TopologicalSpace α] [LowerTopology α] :
- UpperTopology (αᵒᵈ) where
+instance _root_.OrderDual.instIsUpper [Preorder α] [TopologicalSpace α] [IsLower α] :
+ IsUpper αᵒᵈ where
topology_eq_upperTopology := topology_eq_lowerTopology (α := α)
/-- Left-closed right-infinite intervals [a, ∞) are closed in the lower topology. -/
instance : ClosedIciTopology α :=
⟨fun a ↦ isOpen_compl_iff.1 <| isOpen_iff_generate_Ici_compl.2 <| GenerateOpen.basic _ ⟨a, rfl⟩⟩
--- Porting note: The old `LowerTopology.isClosed_Ici` was removed, since one can now use
+-- Porting note: The old `IsLower.isClosed_Ici` was removed, since one can now use
-- the general `isClosed_Ici` lemma thanks to the instance above.
#align lower_topology.is_closed_Ici isClosed_Ici
@@ -291,7 +235,7 @@ instance : ClosedIciTopology α :=
theorem isClosed_upperClosure (h : s.Finite) : IsClosed (upperClosure s : Set α) := by
simp only [← UpperSet.iInf_Ici, UpperSet.coe_iInf]
exact h.isClosed_biUnion fun _ _ => isClosed_Ici
-#align lower_topology.is_closed_upper_closure LowerTopology.isClosed_upperClosure
+#align lower_topology.is_closed_upper_closure Topology.IsLower.isClosed_upperClosure
/-- Every set open in the lower topology is a lower set. -/
theorem isLowerSet_of_isOpen (h : IsOpen s) : IsLowerSet s := by
@@ -302,11 +246,11 @@ theorem isLowerSet_of_isOpen (h : IsOpen s) : IsLowerSet s := by
case univ => exact isLowerSet_univ
case inter u v _ _ hu2 hv2 => exact hu2.inter hv2
case sUnion _ _ ih => exact isLowerSet_sUnion ih
-#align lower_topology.is_lower_set_of_is_open LowerTopology.isLowerSet_of_isOpen
+#align lower_topology.is_lower_set_of_is_open Topology.IsLower.isLowerSet_of_isOpen
theorem isUpperSet_of_isClosed (h : IsClosed s) : IsUpperSet s :=
isLowerSet_compl.1 <| isLowerSet_of_isOpen h.isOpen_compl
-#align lower_topology.is_upper_set_of_is_closed LowerTopology.isUpperSet_of_isClosed
+#align lower_topology.is_upper_set_of_is_closed Topology.IsLower.isUpperSet_of_isClosed
/--
The closure of a singleton `{a}` in the lower topology is the left-closed right-infinite interval
@@ -316,7 +260,7 @@ The closure of a singleton `{a}` in the lower topology is the left-closed right-
theorem closure_singleton (a : α) : closure {a} = Ici a :=
Subset.antisymm ((closure_minimal fun _ h => h.ge) <| isClosed_Ici) <|
(isUpperSet_of_isClosed isClosed_closure).Ici_subset <| subset_closure rfl
-#align lower_topology.closure_singleton LowerTopology.closure_singleton
+#align lower_topology.closure_singleton Topology.IsLower.closure_singleton
protected theorem isTopologicalBasis : IsTopologicalBasis (lowerBasis α) := by
convert isTopologicalBasis_of_subbasis (topology_eq α)
@@ -331,7 +275,7 @@ protected theorem isTopologicalBasis : IsTopologicalBasis (lowerBasis α) := by
rw [subset_def, Subtype.forall'] at hs
choose f hf using hs
exact ⟨_, finite_range f, by simp_rw [biInter_range, hf, sInter_eq_iInter]⟩
-#align lower_topology.is_topological_basis LowerTopology.isTopologicalBasis
+#align lower_topology.is_topological_basis Topology.IsLower.isTopologicalBasis
/-- A function `f : β → α` with lower topology in the codomain is continuous provided that the
preimage of every interval `Set.Ici a` is a closed set.
@@ -339,7 +283,7 @@ preimage of every interval `Set.Ici a` is a closed set.
TODO: upgrade to an `iff`. -/
lemma continuous_of_Ici [TopologicalSpace β] {f : β → α} (h : ∀ a, IsClosed (f ⁻¹' (Ici a))) :
Continuous f := by
- obtain rfl := LowerTopology.topology_eq α
+ obtain rfl := IsLower.topology_eq α
refine continuous_generateFrom ?_
rintro _ ⟨a, rfl⟩
exact (h a).isOpen_compl
@@ -348,7 +292,7 @@ end Preorder
section PartialOrder
-variable [PartialOrder α] [TopologicalSpace α] [LowerTopology α]
+variable [PartialOrder α] [TopologicalSpace α] [IsLower α]
-- see Note [lower instance priority]
/-- The lower topology on a partial order is T₀. -/
@@ -358,10 +302,10 @@ instance (priority := 90) t0Space : T0Space α :=
end PartialOrder
-end LowerTopology
+end IsLower
-namespace UpperTopology
+namespace IsUpper
/-- The complements of the lower closures of finite sets are a collection of upper sets
which form a basis for the upper topology. -/
@@ -371,22 +315,22 @@ def upperBasis (α : Type*) [Preorder α] :=
section Preorder
variable (α)
-variable [Preorder α] [TopologicalSpace α] [UpperTopology α] {s : Set α}
+variable [Preorder α] [TopologicalSpace α] [IsUpper α] {s : Set α}
-lemma topology_eq : ‹_› = generateFrom { s | ∃ a : α, (Iic a)ᶜ = s } := topology_eq_upperTopology
+lemma topology_eq : ‹_› = upper α := topology_eq_upperTopology
variable {α}
-/-- If `α` is equipped with the upper topology, then it is homeomorphic to `WithUpperTopology α`.
+/-- If `α` is equipped with the upper topology, then it is homeomorphic to `WithUpper α`.
-/
-def withUpperTopologyHomeomorph : WithUpperTopology α ≃ₜ α :=
- WithUpperTopology.ofUpper.toHomeomorphOfInducing ⟨by erw [topology_eq α, induced_id]; rfl⟩
+def WithUpperHomeomorph : WithUpper α ≃ₜ α :=
+ WithUpper.ofUpper.toHomeomorphOfInducing ⟨by erw [topology_eq α, induced_id]; rfl⟩
theorem isOpen_iff_generate_Iic_compl : IsOpen s ↔ GenerateOpen { t | ∃ a, (Iic a)ᶜ = t } s := by
rw [topology_eq α]; rfl
-instance instLowerTopologyDual [Preorder α] [TopologicalSpace α] [UpperTopology α] :
- LowerTopology (αᵒᵈ) where
+instance _root_.OrderDual.instIsLower [Preorder α] [TopologicalSpace α] [IsUpper α] :
+ IsLower αᵒᵈ where
topology_eq_lowerTopology := topology_eq_upperTopology (α := α)
/-- Left-infinite right-closed intervals (-∞,a] are closed in the upper topology. -/
@@ -395,11 +339,11 @@ instance : ClosedIicTopology α :=
/-- The lower closure of a finite set is closed in the upper topology. -/
theorem isClosed_lowerClosure (h : s.Finite) : IsClosed (lowerClosure s : Set α) :=
- LowerTopology.isClosed_upperClosure (α := αᵒᵈ) h
+ IsLower.isClosed_upperClosure (α := αᵒᵈ) h
/-- Every set open in the upper topology is a upper set. -/
theorem isUpperSet_of_isOpen (h : IsOpen s) : IsUpperSet s :=
- LowerTopology.isLowerSet_of_isOpen (α := αᵒᵈ) h
+ IsLower.isLowerSet_of_isOpen (α := αᵒᵈ) h
theorem isLowerSet_of_isClosed (h : IsClosed s) : IsLowerSet s :=
isUpperSet_compl.1 <| isUpperSet_of_isOpen h.isOpen_compl
@@ -410,10 +354,10 @@ The closure of a singleton `{a}` in the upper topology is the left-infinite righ
-/
@[simp]
theorem closure_singleton (a : α) : closure {a} = Iic a :=
- LowerTopology.closure_singleton (α := αᵒᵈ) _
+ IsLower.closure_singleton (α := αᵒᵈ) _
protected theorem isTopologicalBasis : IsTopologicalBasis (upperBasis α) :=
- LowerTopology.isTopologicalBasis (α := αᵒᵈ)
+ IsLower.isTopologicalBasis (α := αᵒᵈ)
/-- A function `f : β → α` with upper topology in the codomain is continuous provided that the
preimage of every interval `Set.Iic a` is a closed set.
@@ -421,55 +365,58 @@ preimage of every interval `Set.Iic a` is a closed set.
TODO: upgrade to an `iff`. -/
lemma continuous_of_Iic [TopologicalSpace β] {f : β → α} (h : ∀ a, IsClosed (f ⁻¹' (Iic a))) :
Continuous f :=
- LowerTopology.continuous_of_Ici (α := αᵒᵈ) h
+ IsLower.continuous_of_Ici (α := αᵒᵈ) h
end Preorder
section PartialOrder
-variable [PartialOrder α] [TopologicalSpace α] [UpperTopology α]
+variable [PartialOrder α] [TopologicalSpace α] [IsUpper α]
-- see Note [lower instance priority]
/-- The upper topology on a partial order is T₀. -/
instance (priority := 90) t0Space : T0Space α :=
- LowerTopology.t0Space (α := αᵒᵈ)
+ IsLower.t0Space (α := αᵒᵈ)
end PartialOrder
-end UpperTopology
+end IsUpper
-instance instLowerTopologyProd [Preorder α] [TopologicalSpace α] [LowerTopology α] [OrderBot α]
- [Preorder β] [TopologicalSpace β] [LowerTopology β] [OrderBot β] : LowerTopology (α × β) where
+instance instIsLowerProd [Preorder α] [TopologicalSpace α] [IsLower α]
+ [OrderBot α] [Preorder β] [TopologicalSpace β] [IsLower β] [OrderBot β] :
+ IsLower (α × β) where
topology_eq_lowerTopology := by
refine' le_antisymm (le_generateFrom _) _
· rintro _ ⟨x, rfl⟩
exact (isClosed_Ici.prod isClosed_Ici).isOpen_compl
- rw [(LowerTopology.isTopologicalBasis.prod LowerTopology.isTopologicalBasis).eq_generateFrom,
- le_generateFrom_iff_subset_isOpen, image2_subset_iff]
+ rw [(IsLower.isTopologicalBasis.prod
+ IsLower.isTopologicalBasis).eq_generateFrom, le_generateFrom_iff_subset_isOpen,
+ image2_subset_iff]
rintro _ ⟨s, hs, rfl⟩ _ ⟨t, ht, rfl⟩
dsimp
simp_rw [coe_upperClosure, compl_iUnion, prod_eq, preimage_iInter, preimage_compl]
-- without `let`, `refine` tries to use the product topology and fails
- let _ : TopologicalSpace (α × β) := generateFrom { s | ∃ a, (Ici a)ᶜ = s }
+ let _ : TopologicalSpace (α × β) := lower (α × β)
refine (hs.isOpen_biInter fun a _ => ?_).inter (ht.isOpen_biInter fun b _ => ?_)
· exact GenerateOpen.basic _ ⟨(a, ⊥), by simp [Ici_prod_eq, prod_univ]⟩
· exact GenerateOpen.basic _ ⟨(⊥, b), by simp [Ici_prod_eq, univ_prod]⟩
-instance instUpperTopologyProd [Preorder α] [TopologicalSpace α] [UpperTopology α] [OrderTop α]
- [Preorder β] [TopologicalSpace β] [UpperTopology β] [OrderTop β] : UpperTopology (α × β) where
+instance instIsUpperProd [Preorder α] [TopologicalSpace α] [IsUpper α]
+ [OrderTop α] [Preorder β] [TopologicalSpace β] [IsUpper β] [OrderTop β] :
+ IsUpper (α × β) where
topology_eq_upperTopology := by
- suffices : LowerTopology (α × β)ᵒᵈ
- · exact LowerTopology.topology_eq_lowerTopology (α := (α × β)ᵒᵈ)
- exact instLowerTopologyProd (α := αᵒᵈ) (β := βᵒᵈ)
+ suffices : IsLower (α × β)ᵒᵈ
+ · exact IsLower.topology_eq_lowerTopology (α := (α × β)ᵒᵈ)
+ exact instIsLowerProd (α := αᵒᵈ) (β := βᵒᵈ)
-section CompleteLattice_LowerTopology
+section CompleteLattice_IsLower
-variable [CompleteLattice α] [CompleteLattice β] [TopologicalSpace α] [LowerTopology α]
- [TopologicalSpace β] [LowerTopology β]
+variable [CompleteLattice α] [CompleteLattice β] [TopologicalSpace α] [IsLower α]
+ [TopologicalSpace β] [IsLower β]
-protected theorem sInfHom.continuous (f : sInfHom α β) : Continuous f := by
- refine LowerTopology.continuous_of_Ici fun b => ?_
+protected lemma _root_.sInfHom.continuous (f : sInfHom α β) : Continuous f := by
+ refine IsLower.continuous_of_Ici fun b => ?_
convert isClosed_Ici (a := sInf <| f ⁻¹' Ici b)
refine' Subset.antisymm (fun a => sInf_le) fun a ha => le_trans _ <|
OrderHomClass.mono (f : α →o β) ha
@@ -478,34 +425,32 @@ protected theorem sInfHom.continuous (f : sInfHom α β) : Continuous f := by
#align Inf_hom.continuous sInfHom.continuous
-- see Note [lower instance priority]
-instance (priority := 90) LowerTopology.continuousInf : ContinuousInf α :=
+instance (priority := 90) IsLower.toContinuousInf : ContinuousInf α :=
⟨(infsInfHom : sInfHom (α × α) α).continuous⟩
-#align lower_topology.to_has_continuous_inf LowerTopology.continuousInf
+#align lower_topology.to_has_continuous_inf Topology.IsLower.toContinuousInf
-end CompleteLattice_LowerTopology
+end CompleteLattice_IsLower
-section CompleteLattice_UpperTopology
+section CompleteLattice_IsUpper
-variable [CompleteLattice α] [CompleteLattice β] [TopologicalSpace α] [UpperTopology α]
- [TopologicalSpace β] [UpperTopology β]
+variable [CompleteLattice α] [CompleteLattice β] [TopologicalSpace α] [IsUpper α]
+ [TopologicalSpace β] [IsUpper β]
-protected theorem sSupHom.continuous (f : sSupHom α β) : Continuous f :=
+protected lemma _root_.sSupHom.continuous (f : sSupHom α β) : Continuous f :=
sInfHom.continuous (α := αᵒᵈ) (β := βᵒᵈ) (sSupHom.dual.toFun f)
-- see Note [lower instance priority]
-instance (priority := 90) UpperTopology.continuousInf : ContinuousSup α :=
+instance (priority := 90) IsUpper.toContinuousInf : ContinuousSup α :=
⟨(supsSupHom : sSupHom (α × α) α).continuous⟩
-end CompleteLattice_UpperTopology
+end CompleteLattice_IsUpper
-lemma upper_dual_iff_lower [Preorder α] [TopologicalSpace α] :
- UpperTopology αᵒᵈ ↔ LowerTopology α := by
+lemma isUpper_orderDual [Preorder α] [TopologicalSpace α] : IsUpper αᵒᵈ ↔ IsLower α := by
constructor
- · apply UpperTopology.instLowerTopologyDual
- · apply LowerTopology.instUpperTopologyDual
+ · apply OrderDual.instIsLower
+ · apply OrderDual.instIsUpper
-lemma lower_dual_iff_upper [Preorder α] [TopologicalSpace α] :
- LowerTopology αᵒᵈ ↔ UpperTopology α := by
- constructor
- · apply LowerTopology.instUpperTopologyDual
- · apply UpperTopology.instLowerTopologyDual
+lemma isLower_orderDual [Preorder α] [TopologicalSpace α] : IsLower αᵒᵈ ↔ IsUpper α :=
+ isUpper_orderDual.symm
+
+end Topology
@@ -236,7 +236,11 @@ instance [Preorder α] : LowerTopology (WithLowerTopology α) :=
instance [Preorder α] : UpperTopology (WithUpperTopology α) :=
⟨rfl⟩
-def toOrderDualHomeomorph [Preorder α] : WithLowerTopology α ≃ₜ WithUpperTopology αᵒᵈ where
+/--
+The lower topology is homeomorphic to the upper topology on the dual order
+-/
+def WithLowerTopology.toDualHomeomorph [Preorder α] : WithLowerTopology α ≃ₜ WithUpperTopology αᵒᵈ
+ where
toFun := OrderDual.toDual
invFun := OrderDual.ofDual
left_inv := OrderDual.toDual_ofDual
We define Alexandrov-discrete spaces as topological spaces where the intersection of a family of open sets is open.
This PR only gives a minimal API because the goal is to ensure that lemma names like isOpen_sInter
are free to use for AlexandrovDiscrete
. The existing lemmas are getting prefixed by Set.Finite
or suffixed by _of_finite
.
@@ -286,7 +286,7 @@ instance : ClosedIciTopology α :=
/-- The upper closure of a finite set is closed in the lower topology. -/
theorem isClosed_upperClosure (h : s.Finite) : IsClosed (upperClosure s : Set α) := by
simp only [← UpperSet.iInf_Ici, UpperSet.coe_iInf]
- exact isClosed_biUnion h fun _ _ => isClosed_Ici
+ exact h.isClosed_biUnion fun _ _ => isClosed_Ici
#align lower_topology.is_closed_upper_closure LowerTopology.isClosed_upperClosure
/-- Every set open in the lower topology is a lower set. -/
@@ -448,7 +448,7 @@ instance instLowerTopologyProd [Preorder α] [TopologicalSpace α] [LowerTopolog
simp_rw [coe_upperClosure, compl_iUnion, prod_eq, preimage_iInter, preimage_compl]
-- without `let`, `refine` tries to use the product topology and fails
let _ : TopologicalSpace (α × β) := generateFrom { s | ∃ a, (Ici a)ᶜ = s }
- refine (isOpen_biInter hs fun a _ => ?_).inter (isOpen_biInter ht fun b _ => ?_)
+ refine (hs.isOpen_biInter fun a _ => ?_).inter (ht.isOpen_biInter fun b _ => ?_)
· exact GenerateOpen.basic _ ⟨(a, ⊥), by simp [Ici_prod_eq, prod_univ]⟩
· exact GenerateOpen.basic _ ⟨(⊥, b), by simp [Ici_prod_eq, univ_prod]⟩
@@ -494,13 +494,13 @@ instance (priority := 90) UpperTopology.continuousInf : ContinuousSup α :=
end CompleteLattice_UpperTopology
-lemma UpperDual_iff_Lower [Preorder α] [TopologicalSpace α] :
+lemma upper_dual_iff_lower [Preorder α] [TopologicalSpace α] :
UpperTopology αᵒᵈ ↔ LowerTopology α := by
constructor
· apply UpperTopology.instLowerTopologyDual
· apply LowerTopology.instUpperTopologyDual
-lemma LowerDual_iff_Upper [Preorder α] [TopologicalSpace α] :
+lemma lower_dual_iff_upper [Preorder α] [TopologicalSpace α] :
LowerTopology αᵒᵈ ↔ UpperTopology α := by
constructor
· apply LowerTopology.instUpperTopologyDual
IsCompact.existsIsLeast
and all of its variations (#6345)
As discussed a while ago on Zulip, we introduce classes expressing that a certain topology has closed Ici
s/Iic
s, which is sufficient to get boundedness of compacts on the desired side. The main application is that these now apply to types satisfying UpperTopology/LowerTopology, which will allow us to apply these compactness results to semicontinuous functions.
The naming was discussed here
@@ -276,14 +276,17 @@ instance instUpperTopologyDual [Preorder α] [TopologicalSpace α] [LowerTopolog
topology_eq_upperTopology := topology_eq_lowerTopology (α := α)
/-- Left-closed right-infinite intervals [a, ∞) are closed in the lower topology. -/
-theorem isClosed_Ici (a : α) : IsClosed (Ici a) :=
- isOpen_compl_iff.1 <| isOpen_iff_generate_Ici_compl.2 <| GenerateOpen.basic _ ⟨a, rfl⟩
-#align lower_topology.is_closed_Ici LowerTopology.isClosed_Ici
+instance : ClosedIciTopology α :=
+ ⟨fun a ↦ isOpen_compl_iff.1 <| isOpen_iff_generate_Ici_compl.2 <| GenerateOpen.basic _ ⟨a, rfl⟩⟩
+
+-- Porting note: The old `LowerTopology.isClosed_Ici` was removed, since one can now use
+-- the general `isClosed_Ici` lemma thanks to the instance above.
+#align lower_topology.is_closed_Ici isClosed_Ici
/-- The upper closure of a finite set is closed in the lower topology. -/
theorem isClosed_upperClosure (h : s.Finite) : IsClosed (upperClosure s : Set α) := by
simp only [← UpperSet.iInf_Ici, UpperSet.coe_iInf]
- exact isClosed_biUnion h fun a _ => isClosed_Ici a
+ exact isClosed_biUnion h fun _ _ => isClosed_Ici
#align lower_topology.is_closed_upper_closure LowerTopology.isClosed_upperClosure
/-- Every set open in the lower topology is a lower set. -/
@@ -307,7 +310,7 @@ The closure of a singleton `{a}` in the lower topology is the left-closed right-
-/
@[simp]
theorem closure_singleton (a : α) : closure {a} = Ici a :=
- Subset.antisymm ((closure_minimal fun _ h => h.ge) <| isClosed_Ici a) <|
+ Subset.antisymm ((closure_minimal fun _ h => h.ge) <| isClosed_Ici) <|
(isUpperSet_of_isClosed isClosed_closure).Ici_subset <| subset_closure rfl
#align lower_topology.closure_singleton LowerTopology.closure_singleton
@@ -383,8 +386,8 @@ instance instLowerTopologyDual [Preorder α] [TopologicalSpace α] [UpperTopolog
topology_eq_lowerTopology := topology_eq_upperTopology (α := α)
/-- Left-infinite right-closed intervals (-∞,a] are closed in the upper topology. -/
-theorem isClosed_Iic (a : α) : IsClosed (Iic a) :=
- isOpen_compl_iff.1 <| isOpen_iff_generate_Iic_compl.2 <| GenerateOpen.basic _ ⟨a, rfl⟩
+instance : ClosedIicTopology α :=
+ ⟨fun a ↦ isOpen_compl_iff.1 <| isOpen_iff_generate_Iic_compl.2 <| GenerateOpen.basic _ ⟨a, rfl⟩⟩
/-- The lower closure of a finite set is closed in the upper topology. -/
theorem isClosed_lowerClosure (h : s.Finite) : IsClosed (lowerClosure s : Set α) :=
@@ -437,7 +440,7 @@ instance instLowerTopologyProd [Preorder α] [TopologicalSpace α] [LowerTopolog
topology_eq_lowerTopology := by
refine' le_antisymm (le_generateFrom _) _
· rintro _ ⟨x, rfl⟩
- exact ((LowerTopology.isClosed_Ici _).prod <| LowerTopology.isClosed_Ici _).isOpen_compl
+ exact (isClosed_Ici.prod isClosed_Ici).isOpen_compl
rw [(LowerTopology.isTopologicalBasis.prod LowerTopology.isTopologicalBasis).eq_generateFrom,
le_generateFrom_iff_subset_isOpen, image2_subset_iff]
rintro _ ⟨s, hs, rfl⟩ _ ⟨t, ht, rfl⟩
@@ -463,7 +466,7 @@ variable [CompleteLattice α] [CompleteLattice β] [TopologicalSpace α] [LowerT
protected theorem sInfHom.continuous (f : sInfHom α β) : Continuous f := by
refine LowerTopology.continuous_of_Ici fun b => ?_
- convert LowerTopology.isClosed_Ici (sInf <| f ⁻¹' Ici b)
+ convert isClosed_Ici (a := sInf <| f ⁻¹' Ici b)
refine' Subset.antisymm (fun a => sInf_le) fun a ha => le_trans _ <|
OrderHomClass.mono (f : α →o β) ha
refine' LE.le.trans _ (map_sInf f _).ge
Autoimplicits are highly controversial and also defeat the performance-improving work in #6474.
The intent of this PR is to make autoImplicit
opt-in on a per-file basis, by disabling it in the lakefile and enabling it again with set_option autoImplicit true
in the few files that rely on it.
That also keeps this PR small, as opposed to attempting to "fix" files to not need it any more.
I claim that many of the uses of autoImplicit
in these files are accidental; situations such as:
variables
are in scope, but pasting the lemma in the wrong sectionHaving set_option autoImplicit false
as the default prevents these types of mistake being made in the 90% of files where autoImplicit
s are not used at all, and causes them to be caught by CI during review.
I think there were various points during the port where we encouraged porters to delete the universes u v
lines; I think having autoparams for universe variables only would cover a lot of the cases we actually use them, while avoiding any real shortcomings.
A Zulip poll (after combining overlapping votes accordingly) was in favor of this change with 5:5:18
as the no:dontcare:yes
vote ratio.
While this PR was being reviewed, a handful of files gained some more likely-accidental autoImplicits. In these places, set_option autoImplicit true
has been placed locally within a section, rather than at the top of the file.
@@ -51,6 +51,8 @@ of the lower topology to the spectrum of a complete lattice coincides with the h
lower topology, upper topology, preorder
-/
+set_option autoImplicit true
+
open Set TopologicalSpace
section WithLowerTopology
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -55,7 +55,7 @@ open Set TopologicalSpace
section WithLowerTopology
-variable (α β : Type _)
+variable (α β : Type*)
/-- Type synonym for a preorder equipped with the lower topology. -/
def WithLowerTopology := α
@@ -106,7 +106,7 @@ theorem ofLower_inj {a b : WithLowerTopology α} : ofLower a = ofLower b ↔ a =
#align with_lower_topology.of_lower_inj WithLowerTopology.ofLower_inj
/-- A recursor for `WithLowerTopology`. Use as `induction x using WithLowerTopology.rec`. -/
-protected def rec {β : WithLowerTopology α → Sort _} (h : ∀ a, β (toLower a)) : ∀ a, β a := fun a =>
+protected def rec {β : WithLowerTopology α → Sort*} (h : ∀ a, β (toLower a)) : ∀ a, β a := fun a =>
h (ofLower a)
#align with_lower_topology.rec WithLowerTopology.rec
@@ -142,7 +142,7 @@ end WithLowerTopology
section WithUpperTopology
-variable (α β : Type _)
+variable (α β : Type*)
/-- Type synonym for a preorder equipped with the upper topology. -/
def WithUpperTopology := α
@@ -182,7 +182,7 @@ theorem ofUpper_inj {a b : WithUpperTopology α} : ofUpper a = ofUpper b ↔ a =
Iff.rfl
/-- A recursor for `WithUpperTopology`. Use as `induction x using WithUpperTopology.rec`. -/
-protected def rec {β : WithUpperTopology α → Sort _} (h : ∀ a, β (toUpper a)) : ∀ a, β a := fun a =>
+protected def rec {β : WithUpperTopology α → Sort*} (h : ∀ a, β (toUpper a)) : ∀ a, β a := fun a =>
h (ofUpper a)
instance [Nonempty α] : Nonempty (WithUpperTopology α) :=
@@ -217,7 +217,7 @@ end WithUpperTopology
The lower topology is the topology generated by the complements of the left-closed right-infinite
intervals.
-/
-class LowerTopology (α : Type _) [t : TopologicalSpace α] [Preorder α] : Prop where
+class LowerTopology (α : Type*) [t : TopologicalSpace α] [Preorder α] : Prop where
topology_eq_lowerTopology : t = generateFrom { s | ∃ a, (Ici a)ᶜ = s }
#align lower_topology LowerTopology
@@ -225,7 +225,7 @@ class LowerTopology (α : Type _) [t : TopologicalSpace α] [Preorder α] : Prop
The upper topology is the topology generated by the complements of the right-closed left-infinite
intervals.
-/
-class UpperTopology (α : Type _) [t : TopologicalSpace α] [Preorder α] : Prop where
+class UpperTopology (α : Type*) [t : TopologicalSpace α] [Preorder α] : Prop where
topology_eq_upperTopology : t = generateFrom { s | ∃ a, (Iic a)ᶜ = s }
instance [Preorder α] : LowerTopology (WithLowerTopology α) :=
@@ -246,7 +246,7 @@ namespace LowerTopology
/-- The complements of the upper closures of finite sets are a collection of lower sets
which form a basis for the lower topology. -/
-def lowerBasis (α : Type _) [Preorder α] :=
+def lowerBasis (α : Type*) [Preorder α] :=
{ s : Set α | ∃ t : Set α, t.Finite ∧ (upperClosure t : Set α)ᶜ = s }
#align lower_topology.lower_basis LowerTopology.lowerBasis
@@ -356,7 +356,7 @@ namespace UpperTopology
/-- The complements of the lower closures of finite sets are a collection of upper sets
which form a basis for the upper topology. -/
-def upperBasis (α : Type _) [Preorder α] :=
+def upperBasis (α : Type*) [Preorder α] :=
{ s : Set α | ∃ t : Set α, t.Finite ∧ (lowerClosure t : Set α)ᶜ = s }
section Preorder
@@ -10,10 +10,13 @@ import Mathlib.Order.Hom.CompleteLattice
#align_import topology.order.lower_topology from "leanprover-community/mathlib"@"98e83c3d541c77cdb7da20d79611a780ff8e7d90"
/-!
-# Lower topology
+# Lower and Upper topology
This file introduces the lower topology on a preorder as the topology generated by the complements
-of the closed intervals to infinity.
+of the left-closed right-infinite intervals.
+
+For completeness we also introduce the dual upper topology, generated by the complements of the
+right-closed left-infinite intervals.
## Main statements
@@ -32,6 +35,8 @@ We define a mixin class `LowerTopology` for the class of types which are both a
topology and where the topology is generated by the complements of the closed intervals to infinity.
It is shown that `WithLowerTopology α` is an instance of `LowerTopology`.
+Similarly for the upper topology.
+
## Motivation
The lower topology is used with the `Scott` topology to define the Lawson topology. The restriction
@@ -43,13 +48,14 @@ of the lower topology to the spectrum of a complete lattice coincides with the h
## Tags
-lower topology, preorder
+lower topology, upper topology, preorder
-/
+open Set TopologicalSpace
-variable (α β : Type _)
+section WithLowerTopology
-open Set TopologicalSpace
+variable (α β : Type _)
/-- Type synonym for a preorder equipped with the lower topology. -/
def WithLowerTopology := α
@@ -132,16 +138,110 @@ theorem isOpen_def (T : Set (WithLowerTopology α)) :
end WithLowerTopology
+end WithLowerTopology
+
+section WithUpperTopology
+
+variable (α β : Type _)
+
+/-- Type synonym for a preorder equipped with the upper topology. -/
+def WithUpperTopology := α
+
+variable {α β}
+
+namespace WithUpperTopology
+
+/-- `toUpper` is the identity function to the `WithUpperTopology` of a type. -/
+@[match_pattern]
+def toUpper : α ≃ WithUpperTopology α := Equiv.refl _
+
+/-- `ofUpper` is the identity function from the `WithUpperTopology` of a type. -/
+@[match_pattern]
+def ofUpper : WithUpperTopology α ≃ α := Equiv.refl _
+
+@[simp]
+theorem to_withUpperTopology_symm_eq {α} : (@toUpper α).symm = ofUpper :=
+ rfl
+
+@[simp]
+theorem of_withUpperTopology_symm_eq : (@ofUpper α).symm = toUpper :=
+ rfl
+
+@[simp]
+theorem toUpper_ofUpper (a : WithUpperTopology α) : toUpper (ofUpper a) = a :=
+ rfl
+
+@[simp]
+theorem ofUpper_toUpper (a : α) : ofUpper (toUpper a) = a :=
+ rfl
+
+theorem toUpper_inj {a b : α} : toUpper a = toUpper b ↔ a = b :=
+ Iff.rfl
+
+theorem ofUpper_inj {a b : WithUpperTopology α} : ofUpper a = ofUpper b ↔ a = b :=
+ Iff.rfl
+
+/-- A recursor for `WithUpperTopology`. Use as `induction x using WithUpperTopology.rec`. -/
+protected def rec {β : WithUpperTopology α → Sort _} (h : ∀ a, β (toUpper a)) : ∀ a, β a := fun a =>
+ h (ofUpper a)
+
+instance [Nonempty α] : Nonempty (WithUpperTopology α) :=
+ ‹Nonempty α›
+
+instance [Inhabited α] : Inhabited (WithUpperTopology α) :=
+ ‹Inhabited α›
+
+variable [Preorder α]
+
+instance : Preorder (WithUpperTopology α) :=
+ ‹Preorder α›
+
+instance : TopologicalSpace (WithUpperTopology α) :=
+ generateFrom { s | ∃ a, (Iic a)ᶜ = s }
+
+theorem isOpen_preimage_ofUpper (S : Set α) :
+ IsOpen (WithUpperTopology.ofUpper ⁻¹' S) ↔
+ (generateFrom { s : Set α | ∃ a : α, (Iic a)ᶜ = s }).IsOpen S :=
+ Iff.rfl
+
+theorem isOpen_def (T : Set (WithUpperTopology α)) :
+ IsOpen T ↔ (generateFrom { s : Set α | ∃ a : α, (Iic a)ᶜ = s }).IsOpen
+ (WithUpperTopology.toUpper ⁻¹' T) :=
+ Iff.rfl
+
+end WithUpperTopology
+
+end WithUpperTopology
+
/--
-The lower topology is the topology generated by the complements of the closed intervals to infinity.
+The lower topology is the topology generated by the complements of the left-closed right-infinite
+intervals.
-/
class LowerTopology (α : Type _) [t : TopologicalSpace α] [Preorder α] : Prop where
topology_eq_lowerTopology : t = generateFrom { s | ∃ a, (Ici a)ᶜ = s }
#align lower_topology LowerTopology
+/--
+The upper topology is the topology generated by the complements of the right-closed left-infinite
+intervals.
+-/
+class UpperTopology (α : Type _) [t : TopologicalSpace α] [Preorder α] : Prop where
+ topology_eq_upperTopology : t = generateFrom { s | ∃ a, (Iic a)ᶜ = s }
+
instance [Preorder α] : LowerTopology (WithLowerTopology α) :=
⟨rfl⟩
+instance [Preorder α] : UpperTopology (WithUpperTopology α) :=
+ ⟨rfl⟩
+
+def toOrderDualHomeomorph [Preorder α] : WithLowerTopology α ≃ₜ WithUpperTopology αᵒᵈ where
+ toFun := OrderDual.toDual
+ invFun := OrderDual.ofDual
+ left_inv := OrderDual.toDual_ofDual
+ right_inv := OrderDual.ofDual_toDual
+ continuous_toFun := continuous_coinduced_rng
+ continuous_invFun := continuous_coinduced_rng
+
namespace LowerTopology
/-- The complements of the upper closures of finite sets are a collection of lower sets
@@ -169,6 +269,10 @@ theorem isOpen_iff_generate_Ici_compl : IsOpen s ↔ GenerateOpen { t | ∃ a, (
rw [topology_eq α]; rfl
#align lower_topology.is_open_iff_generate_Ici_compl LowerTopology.isOpen_iff_generate_Ici_compl
+instance instUpperTopologyDual [Preorder α] [TopologicalSpace α] [LowerTopology α] :
+ UpperTopology (αᵒᵈ) where
+ topology_eq_upperTopology := topology_eq_lowerTopology (α := α)
+
/-- Left-closed right-infinite intervals [a, ∞) are closed in the lower topology. -/
theorem isClosed_Ici (a : α) : IsClosed (Ici a) :=
isOpen_compl_iff.1 <| isOpen_iff_generate_Ici_compl.2 <| GenerateOpen.basic _ ⟨a, rfl⟩
@@ -247,8 +351,87 @@ end PartialOrder
end LowerTopology
-instance [Preorder α] [TopologicalSpace α] [LowerTopology α] [OrderBot α] [Preorder β]
- [TopologicalSpace β] [LowerTopology β] [OrderBot β] : LowerTopology (α × β) where
+
+namespace UpperTopology
+
+/-- The complements of the lower closures of finite sets are a collection of upper sets
+which form a basis for the upper topology. -/
+def upperBasis (α : Type _) [Preorder α] :=
+ { s : Set α | ∃ t : Set α, t.Finite ∧ (lowerClosure t : Set α)ᶜ = s }
+
+section Preorder
+
+variable (α)
+variable [Preorder α] [TopologicalSpace α] [UpperTopology α] {s : Set α}
+
+lemma topology_eq : ‹_› = generateFrom { s | ∃ a : α, (Iic a)ᶜ = s } := topology_eq_upperTopology
+
+variable {α}
+
+/-- If `α` is equipped with the upper topology, then it is homeomorphic to `WithUpperTopology α`.
+-/
+def withUpperTopologyHomeomorph : WithUpperTopology α ≃ₜ α :=
+ WithUpperTopology.ofUpper.toHomeomorphOfInducing ⟨by erw [topology_eq α, induced_id]; rfl⟩
+
+theorem isOpen_iff_generate_Iic_compl : IsOpen s ↔ GenerateOpen { t | ∃ a, (Iic a)ᶜ = t } s := by
+ rw [topology_eq α]; rfl
+
+instance instLowerTopologyDual [Preorder α] [TopologicalSpace α] [UpperTopology α] :
+ LowerTopology (αᵒᵈ) where
+ topology_eq_lowerTopology := topology_eq_upperTopology (α := α)
+
+/-- Left-infinite right-closed intervals (-∞,a] are closed in the upper topology. -/
+theorem isClosed_Iic (a : α) : IsClosed (Iic a) :=
+ isOpen_compl_iff.1 <| isOpen_iff_generate_Iic_compl.2 <| GenerateOpen.basic _ ⟨a, rfl⟩
+
+/-- The lower closure of a finite set is closed in the upper topology. -/
+theorem isClosed_lowerClosure (h : s.Finite) : IsClosed (lowerClosure s : Set α) :=
+ LowerTopology.isClosed_upperClosure (α := αᵒᵈ) h
+
+/-- Every set open in the upper topology is a upper set. -/
+theorem isUpperSet_of_isOpen (h : IsOpen s) : IsUpperSet s :=
+ LowerTopology.isLowerSet_of_isOpen (α := αᵒᵈ) h
+
+theorem isLowerSet_of_isClosed (h : IsClosed s) : IsLowerSet s :=
+ isUpperSet_compl.1 <| isUpperSet_of_isOpen h.isOpen_compl
+
+/--
+The closure of a singleton `{a}` in the upper topology is the left-infinite right-closed interval
+(-∞,a].
+-/
+@[simp]
+theorem closure_singleton (a : α) : closure {a} = Iic a :=
+ LowerTopology.closure_singleton (α := αᵒᵈ) _
+
+protected theorem isTopologicalBasis : IsTopologicalBasis (upperBasis α) :=
+ LowerTopology.isTopologicalBasis (α := αᵒᵈ)
+
+/-- A function `f : β → α` with upper topology in the codomain is continuous provided that the
+preimage of every interval `Set.Iic a` is a closed set.
+
+TODO: upgrade to an `iff`. -/
+lemma continuous_of_Iic [TopologicalSpace β] {f : β → α} (h : ∀ a, IsClosed (f ⁻¹' (Iic a))) :
+ Continuous f :=
+ LowerTopology.continuous_of_Ici (α := αᵒᵈ) h
+
+end Preorder
+
+
+section PartialOrder
+
+variable [PartialOrder α] [TopologicalSpace α] [UpperTopology α]
+
+-- see Note [lower instance priority]
+/-- The upper topology on a partial order is T₀. -/
+instance (priority := 90) t0Space : T0Space α :=
+ LowerTopology.t0Space (α := αᵒᵈ)
+
+end PartialOrder
+
+end UpperTopology
+
+instance instLowerTopologyProd [Preorder α] [TopologicalSpace α] [LowerTopology α] [OrderBot α]
+ [Preorder β] [TopologicalSpace β] [LowerTopology β] [OrderBot β] : LowerTopology (α × β) where
topology_eq_lowerTopology := by
refine' le_antisymm (le_generateFrom _) _
· rintro _ ⟨x, rfl⟩
@@ -264,7 +447,14 @@ instance [Preorder α] [TopologicalSpace α] [LowerTopology α] [OrderBot α] [P
· exact GenerateOpen.basic _ ⟨(a, ⊥), by simp [Ici_prod_eq, prod_univ]⟩
· exact GenerateOpen.basic _ ⟨(⊥, b), by simp [Ici_prod_eq, univ_prod]⟩
-section CompleteLattice
+instance instUpperTopologyProd [Preorder α] [TopologicalSpace α] [UpperTopology α] [OrderTop α]
+ [Preorder β] [TopologicalSpace β] [UpperTopology β] [OrderTop β] : UpperTopology (α × β) where
+ topology_eq_upperTopology := by
+ suffices : LowerTopology (α × β)ᵒᵈ
+ · exact LowerTopology.topology_eq_lowerTopology (α := (α × β)ᵒᵈ)
+ exact instLowerTopologyProd (α := αᵒᵈ) (β := βᵒᵈ)
+
+section CompleteLattice_LowerTopology
variable [CompleteLattice α] [CompleteLattice β] [TopologicalSpace α] [LowerTopology α]
[TopologicalSpace β] [LowerTopology β]
@@ -283,4 +473,30 @@ instance (priority := 90) LowerTopology.continuousInf : ContinuousInf α :=
⟨(infsInfHom : sInfHom (α × α) α).continuous⟩
#align lower_topology.to_has_continuous_inf LowerTopology.continuousInf
-end CompleteLattice
+end CompleteLattice_LowerTopology
+
+section CompleteLattice_UpperTopology
+
+variable [CompleteLattice α] [CompleteLattice β] [TopologicalSpace α] [UpperTopology α]
+ [TopologicalSpace β] [UpperTopology β]
+
+protected theorem sSupHom.continuous (f : sSupHom α β) : Continuous f :=
+ sInfHom.continuous (α := αᵒᵈ) (β := βᵒᵈ) (sSupHom.dual.toFun f)
+
+-- see Note [lower instance priority]
+instance (priority := 90) UpperTopology.continuousInf : ContinuousSup α :=
+ ⟨(supsSupHom : sSupHom (α × α) α).continuous⟩
+
+end CompleteLattice_UpperTopology
+
+lemma UpperDual_iff_Lower [Preorder α] [TopologicalSpace α] :
+ UpperTopology αᵒᵈ ↔ LowerTopology α := by
+ constructor
+ · apply UpperTopology.instLowerTopologyDual
+ · apply LowerTopology.instUpperTopologyDual
+
+lemma LowerDual_iff_Upper [Preorder α] [TopologicalSpace α] :
+ LowerTopology αᵒᵈ ↔ UpperTopology α := by
+ constructor
+ · apply LowerTopology.instUpperTopologyDual
+ · apply UpperTopology.instLowerTopologyDual
@@ -2,16 +2,13 @@
Copyright (c) 2023 Christopher Hoskin. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Christopher Hoskin
-
-! This file was ported from Lean 3 source module topology.order.lower_topology
-! leanprover-community/mathlib commit 98e83c3d541c77cdb7da20d79611a780ff8e7d90
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Topology.Homeomorph
import Mathlib.Topology.Order.Lattice
import Mathlib.Order.Hom.CompleteLattice
+#align_import topology.order.lower_topology from "leanprover-community/mathlib"@"98e83c3d541c77cdb7da20d79611a780ff8e7d90"
+
/-!
# Lower topology
@@ -119,17 +119,17 @@ instance : Preorder (WithLowerTopology α) :=
‹Preorder α›
instance : TopologicalSpace (WithLowerTopology α) :=
- generateFrom { s | ∃ a, Ici aᶜ = s }
+ generateFrom { s | ∃ a, (Ici a)ᶜ = s }
theorem isOpen_preimage_ofLower (S : Set α) :
IsOpen (WithLowerTopology.ofLower ⁻¹' S) ↔
- (generateFrom { s : Set α | ∃ a : α, Ici aᶜ = s }).IsOpen S :=
+ (generateFrom { s : Set α | ∃ a : α, (Ici a)ᶜ = s }).IsOpen S :=
Iff.rfl
#align with_lower_topology.is_open_preimage_of_lower WithLowerTopology.isOpen_preimage_ofLower
theorem isOpen_def (T : Set (WithLowerTopology α)) :
- IsOpen T ↔
- (generateFrom { s : Set α | ∃ a : α, Ici aᶜ = s }).IsOpen (WithLowerTopology.toLower ⁻¹' T) :=
+ IsOpen T ↔ (generateFrom { s : Set α | ∃ a : α, (Ici a)ᶜ = s }).IsOpen
+ (WithLowerTopology.toLower ⁻¹' T) :=
Iff.rfl
#align with_lower_topology.is_open_def WithLowerTopology.isOpen_def
@@ -139,7 +139,7 @@ end WithLowerTopology
The lower topology is the topology generated by the complements of the closed intervals to infinity.
-/
class LowerTopology (α : Type _) [t : TopologicalSpace α] [Preorder α] : Prop where
- topology_eq_lowerTopology : t = generateFrom { s | ∃ a, Ici aᶜ = s }
+ topology_eq_lowerTopology : t = generateFrom { s | ∃ a, (Ici a)ᶜ = s }
#align lower_topology LowerTopology
instance [Preorder α] : LowerTopology (WithLowerTopology α) :=
@@ -168,7 +168,7 @@ def withLowerTopologyHomeomorph : WithLowerTopology α ≃ₜ α :=
WithLowerTopology.ofLower.toHomeomorphOfInducing ⟨by erw [topology_eq α, induced_id]; rfl⟩
#align lower_topology.with_lower_topology_homeomorph LowerTopology.withLowerTopologyHomeomorph
-theorem isOpen_iff_generate_Ici_compl : IsOpen s ↔ GenerateOpen { t | ∃ a, Ici aᶜ = t } s := by
+theorem isOpen_iff_generate_Ici_compl : IsOpen s ↔ GenerateOpen { t | ∃ a, (Ici a)ᶜ = t } s := by
rw [topology_eq α]; rfl
#align lower_topology.is_open_iff_generate_Ici_compl LowerTopology.isOpen_iff_generate_Ici_compl
@@ -214,7 +214,7 @@ protected theorem isTopologicalBasis : IsTopologicalBasis (lowerBasis α) := by
ext s
constructor
· rintro ⟨F, hF, rfl⟩
- refine' ⟨(fun a => Ici aᶜ) '' F, ⟨hF.image _, image_subset_iff.2 fun _ _ => ⟨_, rfl⟩⟩, _⟩
+ refine' ⟨(fun a => (Ici a)ᶜ) '' F, ⟨hF.image _, image_subset_iff.2 fun _ _ => ⟨_, rfl⟩⟩, _⟩
simp only [sInter_image]
· rintro ⟨F, ⟨hF, hs⟩, rfl⟩
haveI := hF.to_subtype
@@ -262,7 +262,7 @@ instance [Preorder α] [TopologicalSpace α] [LowerTopology α] [OrderBot α] [P
dsimp
simp_rw [coe_upperClosure, compl_iUnion, prod_eq, preimage_iInter, preimage_compl]
-- without `let`, `refine` tries to use the product topology and fails
- let _ : TopologicalSpace (α × β) := generateFrom { s | ∃ a, Ici aᶜ = s }
+ let _ : TopologicalSpace (α × β) := generateFrom { s | ∃ a, (Ici a)ᶜ = s }
refine (isOpen_biInter hs fun a _ => ?_).inter (isOpen_biInter ht fun b _ => ?_)
· exact GenerateOpen.basic _ ⟨(a, ⊥), by simp [Ici_prod_eq, prod_univ]⟩
· exact GenerateOpen.basic _ ⟨(⊥, b), by simp [Ici_prod_eq, univ_prod]⟩
sSup
/iSup
(#3938)
As discussed on Zulip
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>
@@ -179,8 +179,8 @@ theorem isClosed_Ici (a : α) : IsClosed (Ici a) :=
/-- The upper closure of a finite set is closed in the lower topology. -/
theorem isClosed_upperClosure (h : s.Finite) : IsClosed (upperClosure s : Set α) := by
- simp only [← UpperSet.infᵢ_Ici, UpperSet.coe_infᵢ]
- exact isClosed_bunionᵢ h fun a _ => isClosed_Ici a
+ simp only [← UpperSet.iInf_Ici, UpperSet.coe_iInf]
+ exact isClosed_biUnion h fun a _ => isClosed_Ici a
#align lower_topology.is_closed_upper_closure LowerTopology.isClosed_upperClosure
/-- Every set open in the lower topology is a lower set. -/
@@ -191,7 +191,7 @@ theorem isLowerSet_of_isOpen (h : IsOpen s) : IsLowerSet s := by
case basic u h' => obtain ⟨a, rfl⟩ := h'; exact (isUpperSet_Ici a).compl
case univ => exact isLowerSet_univ
case inter u v _ _ hu2 hv2 => exact hu2.inter hv2
- case unionₛ _ _ ih => exact isLowerSet_unionₛ ih
+ case sUnion _ _ ih => exact isLowerSet_sUnion ih
#align lower_topology.is_lower_set_of_is_open LowerTopology.isLowerSet_of_isOpen
theorem isUpperSet_of_isClosed (h : IsClosed s) : IsUpperSet s :=
@@ -210,17 +210,17 @@ theorem closure_singleton (a : α) : closure {a} = Ici a :=
protected theorem isTopologicalBasis : IsTopologicalBasis (lowerBasis α) := by
convert isTopologicalBasis_of_subbasis (topology_eq α)
- simp_rw [lowerBasis, coe_upperClosure, compl_unionᵢ]
+ simp_rw [lowerBasis, coe_upperClosure, compl_iUnion]
ext s
constructor
· rintro ⟨F, hF, rfl⟩
refine' ⟨(fun a => Ici aᶜ) '' F, ⟨hF.image _, image_subset_iff.2 fun _ _ => ⟨_, rfl⟩⟩, _⟩
- simp only [interₛ_image]
+ simp only [sInter_image]
· rintro ⟨F, ⟨hF, hs⟩, rfl⟩
haveI := hF.to_subtype
rw [subset_def, Subtype.forall'] at hs
choose f hf using hs
- exact ⟨_, finite_range f, by simp_rw [binterᵢ_range, hf, interₛ_eq_interᵢ]⟩
+ exact ⟨_, finite_range f, by simp_rw [biInter_range, hf, sInter_eq_iInter]⟩
#align lower_topology.is_topological_basis LowerTopology.isTopologicalBasis
/-- A function `f : β → α` with lower topology in the codomain is continuous provided that the
@@ -260,10 +260,10 @@ instance [Preorder α] [TopologicalSpace α] [LowerTopology α] [OrderBot α] [P
le_generateFrom_iff_subset_isOpen, image2_subset_iff]
rintro _ ⟨s, hs, rfl⟩ _ ⟨t, ht, rfl⟩
dsimp
- simp_rw [coe_upperClosure, compl_unionᵢ, prod_eq, preimage_interᵢ, preimage_compl]
+ simp_rw [coe_upperClosure, compl_iUnion, prod_eq, preimage_iInter, preimage_compl]
-- without `let`, `refine` tries to use the product topology and fails
let _ : TopologicalSpace (α × β) := generateFrom { s | ∃ a, Ici aᶜ = s }
- refine (isOpen_binterᵢ hs fun a _ => ?_).inter (isOpen_binterᵢ ht fun b _ => ?_)
+ refine (isOpen_biInter hs fun a _ => ?_).inter (isOpen_biInter ht fun b _ => ?_)
· exact GenerateOpen.basic _ ⟨(a, ⊥), by simp [Ici_prod_eq, prod_univ]⟩
· exact GenerateOpen.basic _ ⟨(⊥, b), by simp [Ici_prod_eq, univ_prod]⟩
@@ -272,19 +272,18 @@ section CompleteLattice
variable [CompleteLattice α] [CompleteLattice β] [TopologicalSpace α] [LowerTopology α]
[TopologicalSpace β] [LowerTopology β]
-protected theorem InfₛHom.continuous (f : InfₛHom α β) : Continuous f := by
+protected theorem sInfHom.continuous (f : sInfHom α β) : Continuous f := by
refine LowerTopology.continuous_of_Ici fun b => ?_
- convert LowerTopology.isClosed_Ici (infₛ <| f ⁻¹' Ici b)
- refine' Subset.antisymm (fun a => infₛ_le) fun a ha => le_trans _ <|
+ convert LowerTopology.isClosed_Ici (sInf <| f ⁻¹' Ici b)
+ refine' Subset.antisymm (fun a => sInf_le) fun a ha => le_trans _ <|
OrderHomClass.mono (f : α →o β) ha
- refine' LE.le.trans _ (map_infₛ f _).ge
+ refine' LE.le.trans _ (map_sInf f _).ge
simp
-#align Inf_hom.continuous InfₛHom.continuous
+#align Inf_hom.continuous sInfHom.continuous
-- see Note [lower instance priority]
instance (priority := 90) LowerTopology.continuousInf : ContinuousInf α :=
- ⟨(infInfₛHom : InfₛHom (α × α) α).continuous⟩
+ ⟨(infsInfHom : sInfHom (α × α) α).continuous⟩
#align lower_topology.to_has_continuous_inf LowerTopology.continuousInf
end CompleteLattice
-
The unported dependencies are