Zulip Chat Archive
Stream: new members
Topic: Show that the discrete topology is t2
Saul Glasman (Oct 10 2020 at 21:38):
Hi all,
This is one of the exercises from the "topological spaces" section of the LFTCM workshop, solution not provided, and I think I'm missing something about how to use typeclasses. In the exercises file, the t2 typeclass is defined the same way as in mathlib
class t2_space (X : Type) [topological_space X] := ...
(why not class t2_space (X: Type) extends topological_space X
?)
but the discrete topology is defined as an explicit term of toplogical_space X
rather than its own typeclass as in mathlib:
def discrete (X : Type) : topological_space X :=
{ is_open := λ U, true, -- everything is open
univ_mem := trivial,
union := begin intros B h, trivial, end,
inter := begin intros A hA B hB, trivial, end }
To show that the discrete topology is t2, I want to start with
instance t2_discrete (X: Type): @t2_space X (discrete X) := {
t2 := by {
intros x y hxy,
use [{x}, {y}],
simp,
???
}
}
and the next thing I have to prove is is_open {x}
. I feel like Lean should already know this, since the underlying topological space is discrete, but I don't know how to say that - can anyone help?
Kevin Buzzard (Oct 10 2020 at 21:40):
Do you understand how to unfold a definition?
Kevin Buzzard (Oct 10 2020 at 21:40):
Try unfold is_open
and you'll replace the is_open
function by its definition
Kevin Buzzard (Oct 10 2020 at 21:40):
and it seems to me that is_open {x}
is by definition equal to true
Kenny Lau (Oct 10 2020 at 21:41):
don't unfold definitions!
Kevin Buzzard (Oct 10 2020 at 21:41):
and the tactic which proves true
is trivial
Patrick Massot (Oct 10 2020 at 21:41):
Note that this file is about rebuilding the theory from scratch, not about using mathlib.
Kevin Buzzard (Oct 10 2020 at 21:41):
If you know all about topological spaces and are asking intelligent questions about how to do stuff like that in Lean Kenny, then you are me 3 years ago
Saul Glasman (Oct 10 2020 at 21:42):
Right, I'm really just justifying my question by saying I can't just look at how mathlib does it to find the answer
Kevin Buzzard (Oct 10 2020 at 21:42):
and when I started to understand that I could unfold everything, this whole Lean business started making a lot more sense to me
Kenny Lau (Oct 10 2020 at 21:42):
oh sorry I missed the part where you defined discrete
Saul Glasman (Oct 10 2020 at 21:42):
That doesn't seem to unfold... I have seen the unfold tactic in use but I don't think I really understand what Lean considers "unfoldable"
Kevin Buzzard (Oct 10 2020 at 21:42):
Does "trivial" work anyway?
Kevin Buzzard (Oct 10 2020 at 21:43):
I mean, I unfolded it in my head :-)
Saul Glasman (Oct 10 2020 at 21:43):
Ah, trivial does work! Thank you
Kevin Buzzard (Oct 10 2020 at 21:44):
This idea of what is true by definition and what is true because of a theorem is completely alien to mathematicians. For example, in the natural number game, n+0=n is true by definition, but 0+n=n is true because of a theorem (induction on n).
Kevin Buzzard (Oct 10 2020 at 21:45):
So it's a weird implemention-dependent notion, right? Mathematicians can't see any difference between 0+n=n and n+0=n
Kenny Lau (Oct 10 2020 at 21:45):
yes, and I think the Lean term "definition" should be translated as the mathematical term "implementation"
Kevin Buzzard (Oct 10 2020 at 21:45):
Right
Kenny Lau (Oct 10 2020 at 21:45):
because in maths has 5 definitions
Patrick Massot (Oct 10 2020 at 21:45):
Where do you see that exercise?
Kevin Buzzard (Oct 10 2020 at 21:46):
So you want to prove is_open {x}
but you can trace the definition of is_open
back and see that it's lambda U, trivial
-- this could have been done in all manner of ways but it was done in this way
Kevin Buzzard (Oct 10 2020 at 21:46):
so you know that you're trying to prove trivial
Patrick Massot (Oct 10 2020 at 21:46):
I found it, it's a "bonus exercise".
Saul Glasman (Oct 10 2020 at 21:48):
Yeah sorry, it's not explicitly sketched out but it's mentioned in a comment
Patrick Massot (Oct 10 2020 at 21:49):
This somehow explain why it's not really properly laid out. The surrounding setup makes it painful.
Patrick Massot (Oct 10 2020 at 21:51):
Oh wow, the definition of T2 is not correct in this file!
Saul Glasman (Oct 10 2020 at 21:53):
It doesn't have x \ne y
, right?
Patrick Massot (Oct 10 2020 at 21:55):
But again the main problem is the setup mixing classes and this definition of discrete as a def
. The definition itself is fine as an example of a topological structure, but not for serious use later.
Patrick Massot (Oct 10 2020 at 21:57):
So the right setup is to have, either as a def or a class:
def discrete {X : Type*} [topological_space X] : Prop := ∀ U : set X, is_open U
and then use that as your assumption in t2_discrete {X : Type} [topological_space X] (hX : ∀ U : set X, is_open U) : t2_space X :=
(which can be an instance if you made discrete
a class, or a lemma in any case)
Patrick Massot (Oct 10 2020 at 21:58):
In the proof you'll probably want to use singleton_inter_eq_empty
.
Alex J. Best (Oct 10 2020 at 21:58):
Patrick Massot said:
Oh wow, the definition of T2 is not correct in this file!
:flushed:
Patrick Massot (Oct 10 2020 at 21:59):
Could you open an issue at the LFTCM repository? I need to go to bed now, but I'll fix that tomorrow if Alex doesn't beat me to it.
Alex J. Best (Oct 10 2020 at 22:03):
Fixed :grinning: sorry!
Patrick Massot (Oct 10 2020 at 22:06):
I think we also need a fix addressing the issue that the file doesn't really setups things in a way that makes this bonus exercise nice. The easy fix is to remove the exercise. Another fix is to define discrete
as I explained above.
Last updated: Dec 20 2023 at 11:08 UTC