Zulip Chat Archive
Stream: maths
Topic: difficulty with topology lemma and topological bases
Panagiotis Angelinos (Mar 01 2024 at 03:44):
I am trying to prove a little lemma: If X is a compact-open of a quasi-separated space Y and the set of compact-opens (in Y) forms a basis of Y, then the set of compact-opens (in X) forms a basis of X. Here is my code:
import Mathlib.Topology.QuasiSeparated
import Mathlib.Topology.Compactness.Compact
import Mathlib.Topology.ContinuousOn
variable (X Y : Type*) [TopologicalSpace X] [TopologicalSpace Y] (f: X → Y)
theorem topology_lemma (X Y: Type*) [TopologicalSpace X] [TopologicalSpace Y]
(hX : CompactSpace X) (hY : QuasiSeparatedSpace Y) (hf : OpenEmbedding f)
(hYb: TopologicalSpace.IsTopologicalBasis {S : Set Y | IsOpen S ∧ IsCompact S}) :
(TopologicalSpace.IsTopologicalBasis {S : Set X | IsOpen S ∧ IsCompact S}) := by
constructor
sorry
sorry
ext U
constructor
The first constructor turns my goal TopologicalSpace.IsTopologicalBasis {S | IsOpen S ∧ IsCompact S} into three different subgoals exists_subset_inter, sUnion_eq, and eq_generateFrom, as per the definition of IsTopologicalBasis. I can prove the first two subgoals, so I've put in sorrys just to get rid of extraneous information.
The third subgoal turns out to be inst✝¹ = TopologicalSpace.generateFrom {S | IsOpen S ∧ IsCompact S}
which as far as I know means I am in serious trouble because \textdied kills Lean. However, I tried ext U and got a goal of the form IsOpen U ↔ IsOpen U, which seems promising, but both implications seem to lead to dead ends. (You can't tell here, but these IsOpens refer to different topologies, and this is only made clear when you mouse over them in the tactics panel).
Anyway, is there something I can do with the subgoal inst✝¹ = TopologicalSpace.generateFrom {S | IsOpen S ∧ IsCompact S}
that isn't ext? Or is it over once I have a \textdied in the goal? I've tried a few things and didn't manage to get them to work. If it helps, here's the definition of TopologicalSpace.generateFrom:
/-- The open sets of the least topology containing a collection of basic sets. -/
inductive GenerateOpen (g : Set (Set α)) : Set α → Prop
| basic : ∀ s ∈ g, GenerateOpen g s
| univ : GenerateOpen g univ
| inter : ∀ s t, GenerateOpen g s → GenerateOpen g t → GenerateOpen g (s ∩ t)
| sUnion : ∀ S : Set (Set α), (∀ s ∈ S, GenerateOpen g s) → GenerateOpen g (⋃₀ S)
#align topological_space.generate_open TopologicalSpace.GenerateOpen
/-- The smallest topological space containing the collection `g` of basic sets -/
def generateFrom (g : Set (Set α)) : TopologicalSpace α where
IsOpen := GenerateOpen g
isOpen_univ := GenerateOpen.univ
isOpen_inter := GenerateOpen.inter
isOpen_sUnion := GenerateOpen.sUnion
#align topological_space.generate_from TopologicalSpace.generateFrom
Filippo A. E. Nuccio (Mar 01 2024 at 09:04):
Some comments: first, it is nice (both for the style and because it simplifies the infoview) to split your subgoals using dots, obtained by typing \.
. So you would get
theorem topology_lemma (X Y: Type*) [TopologicalSpace X] [TopologicalSpace Y]
(hX : CompactSpace X) (hY : QuasiSeparatedSpace Y) (hf : OpenEmbedding f)
(hYb: TopologicalSpace.IsTopologicalBasis {S : Set Y | IsOpen S ∧ IsCompact S}) :
(TopologicalSpace.IsTopologicalBasis {S : Set X | IsOpen S ∧ IsCompact S}) := by
constructor
· sorry
· sorry
· sorry
In this way, each time you try to solve one goal, you also see this one (and local hypothesis get discharged once this is closed). Secondly, it is often a good idea to avoid using definitions directly: athough this is a normal mathematicians' habit, the way mathlib is constructed is to provide a bunch of theorems that allow to interact with definitions, rather than going back to the basic one. For instance, you can do
theorem topology_lemma (X Y: Type*) [TopologicalSpace X] [TopologicalSpace Y]
(hX : CompactSpace X) (hY : QuasiSeparatedSpace Y) (hf : OpenEmbedding f)
(hYb: TopologicalSpace.IsTopologicalBasis {S : Set Y | IsOpen S ∧ IsCompact S}) :
(TopologicalSpace.IsTopologicalBasis {S : Set X | IsOpen S ∧ IsCompact S}) := by
apply TopologicalSpace.isTopologicalBasis_of_isOpen_of_nhds
· intro U hU
sorry
· intro x S hx hS
sorry
Finally, going back to your original question (which, as explained above, I would discourage to follow) you should first think at what the pen-and-paper proof would be: the isOpen U <-> isOpen U
suggests that you need to show that something that was open in Y
stays open in X
...
Panagiotis Angelinos (Mar 01 2024 at 15:39):
Thanks for the help, I've managed to get this to work. And I've removed some unnecessary assumptions!
Last updated: May 02 2025 at 03:31 UTC