Zulip Chat Archive
Stream: maths
Topic: Locally convex spaces
Moritz (Dec 02 2021 at 17:55):
Hi, I looked a bit at the seminorm stuff and it seems to me that there should be all the ingredients needed to define lcs and prove that the geometric definition is equivalent to the analytic (seminorms) one. Is there anyone actively working on this or are there any known issues with implementing this?
Yaël Dillies (Dec 02 2021 at 18:06):
This is on my todo list. @Bhavik Mehta and I defined the Minkowski functional recently, I'm currently defining several kinds of convexity (star, strict), I'll be refactoring affine spaces over December, and at some point between all this I was planning to do locally convex spaces.
Yaël Dillies (Dec 02 2021 at 18:07):
But you're welcome to try it if you want. There's no obstruction in view.
Moritz (Dec 03 2021 at 17:54):
I would like to implement the seminorms -> locally convex space direction, this should be quite easy (mathematically its trivial), but I have to find my way around the topology part of mathlib, so it might take me some time.
Yaël Dillies (Dec 03 2021 at 20:02):
Okay! I will let you do it then. Please tell me which branch you're working on and feel free to ask for help.
Moritz (Dec 05 2021 at 13:45):
Should I create a new structure for spaces with a family of seminorms? It looks a bit weird, because I have only one field seminorms : ι → seminorm 𝕜 E
.
Moritz (Dec 05 2021 at 13:48):
I haven't pushed my branch to github yet, because it is extremely messy and probably nothing in it is of any use (except for me learning lean)
Yaël Dillies (Dec 05 2021 at 14:54):
This is a bad definition because several indexed families can correspond to the same space.
Yaël Dillies (Dec 05 2021 at 14:56):
This characterization as a family of seminorms should rather be a constructor + eventually a definition (a destructor)
Moritz (Dec 05 2021 at 16:05):
I know the choice of seminorms is not unique, the issue I have is that I have no idea for what I have to write the instance of has_continuous_add
. I have
def seminorm_subbasis (P : ι → seminorm 𝕜 E) : set (set E)
:= Union $ λ x, Union $ λ i, Union $ λ r, set_of (λ y, y = ball (P i) x r)
def seminorm_topology (P : ι → seminorm 𝕜 E) : topological_space E
:= topological_space.generate_from (seminorm_subbasis P)
and I wanted to write something like
instance : has_continuous_add (seminorm_topology P) := sorry
but that does not work.
Adam Topaz (Dec 05 2021 at 16:10):
What's the error?
Moritz (Dec 05 2021 at 16:13):
type mismatch at application
has_continuous_add (seminorm_topology P)
term
seminorm_topology P
has type
topological_space E : Type u_2
but is expected to have type
Type ? : Type (?+1)
and something about failing to synthesizing topological_space ?m_1
Adam Topaz (Dec 05 2021 at 16:15):
Right, so that's telling you that has_cpntinuous_add
is expecting a type, which probably needs to have a topological space and has_add instance, and instead you have it a term of type topological_space E
Moritz (Dec 05 2021 at 16:20):
So should I do this?
instance : topological_space (E) := seminorm_topology P
instance : has_continuous_add (E) := sorry
This type-checks, but I am not sure whether it is the right thing
Adam Topaz (Dec 05 2021 at 16:21):
I think you probably would need an alias for E which has P as a variable. Otherwise typeclass search wouldn't be able to know about P just from E
Adam Topaz (Dec 05 2021 at 16:22):
Also I would recommend using the Inf of topological spaces in your def
Adam Topaz (Dec 05 2021 at 16:23):
Let me sketch some code for you...
Adam Topaz (Dec 05 2021 at 16:29):
import analysis.seminorm
variables {k E : Type*} [normed_field k] [add_comm_group E] [module k E]
def seminorm.topological_space (e : seminorm k E) : topological_space E := sorry
@[derive [add_comm_group]]
def name_me {ι} (P : ι → seminorm k E) : Type* := E
instance {ι} (P : ι → seminorm k E) : module k (name_me P) := by { delta name_me, apply_instance }
instance {ι} {P : ι → seminorm k E} : topological_space (name_me P) :=
⨅ i, (P i).topological_space
instance {ι} {P : ι → seminorm k E} : has_continuous_add (name_me P) := sorry
Adam Topaz (Dec 05 2021 at 16:30):
We may even have seminorm.topological_space
in mathlib, I'm not sure.
Reid Barton (Dec 05 2021 at 16:32):
It might be confusing that the thing mathlib calls a topological_space
is actually a topology (and likewise what it calls a group
is actually a group structure, etc.)
Adam Topaz (Dec 05 2021 at 16:33):
(I am assuming that the infimum of the topologies is what you intend in your definition, but I'm not completely sure.)
Adam Topaz (Dec 05 2021 at 16:36):
Actually, I think it should be okay, given what you wrote for seminorm_subbasis
above.
Yaël Dillies (Dec 05 2021 at 16:40):
I think locally_convex_space
should carry a topology and a proof it agrees with the seminorms-induced one, simiar to how metric_space
works.
Adam Topaz (Dec 05 2021 at 16:44):
Yeah, that's probably the best approach
Yury G. Kudryashov (Dec 06 2021 at 04:46):
I think that locally_convex_space E
should be either a Prop
-valued mixin nhds_basis_convex : ∀ (x : E), (𝓝 x).has_basis (λ s, s ∈ 𝓝 x ∧ convex ℝ s)
, or extend topological_space E
, module ℝ E
, topological_group E
, has_continuous_smul ℝ E
, and add nhds_basis_convex
to the list of axioms.
Yury G. Kudryashov (Dec 06 2021 at 04:48):
There should be a type tag as proposed by @Adam Topaz above for a space with topology generated by a family of seminorms.
Yury G. Kudryashov (Dec 06 2021 at 04:49):
But the main definition should be "geometric" and should not carry additional data.
Moritz (Dec 06 2021 at 06:57):
Is there a way to do Adam's approach, but using the seminormed spaces from analysis/normed_space
in a way that we get the tvs structure for free? It seems to me that all the abstract topological stuff is already in there.
Yury G. Kudryashov (Dec 06 2021 at 09:17):
Currently we have 2 unrelated formalizations of a seminorm: docs#semi_normed_space and docs#seminorm.
Yury G. Kudryashov (Dec 06 2021 at 09:18):
The former version assumes that the topological space structure is exactly the one generated by the seminorm.
Yury G. Kudryashov (Dec 06 2021 at 09:20):
There is docs#semi_normed_group.of_core that constructs a semi_normed_group
from semi_normed_group.core
.
Yury G. Kudryashov (Dec 06 2021 at 09:23):
Given a family of seminorms, you can define a toplogical_space
structure for each seminorm
using something like by letI := seminormed_group.of_core S.to_core; apply_instance
, where seminorm.to_core
converts a seminorm
to a semi_normed_group.core
.
Yury G. Kudryashov (Dec 06 2021 at 09:25):
This way you get seminorm.topological_space
in Adam's code above.
Yury G. Kudryashov (Dec 06 2021 at 09:28):
I think that we should have 2 type tags:
def seminorm.domain {X : Type*} (s : seminorm 𝕜 X) := X
instance (s : seminorm 𝕜 X) : semi_normed_group s.domain :=
semi_normed_group.of_core s.to_core
protected def seminorm.uniform_space (s : seminorm 𝕜 X) :
uniform_space X :=
(by apply_instance : uniform_space s.domain)
instance (s : seminorm 𝕜 X) : semi_normed_space 𝕜 s.domain :=
sorry
Yury G. Kudryashov (Dec 06 2021 at 09:29):
Then we should have another type tag for a group with a family of seminorms.
Yury G. Kudryashov (Dec 06 2021 at 09:34):
def with_seminorms (s : ι → seminorm 𝕜 X) := X
instance (s : ι → seminorm 𝕜 X) : uniform_space (with_seminorms s) :=
⨅ i, (s i).uniform_space
Yury G. Kudryashov (Dec 06 2021 at 09:35):
Due to docs#uniform_space.to_topological_space_infi, you'll get (with_seminorms.uniform_space s).to_topological_space = ⨅ i, (s i).uniform_space.to_topological_space
.
Yaël Dillies (Dec 06 2021 at 09:35):
with_seminorms s
, you mean?
Moritz (Dec 10 2021 at 16:36):
I have lots of other (math) stuff to do, so I cannot do any lean until christmas. so if anyone wants to do what Yury has written, feel free.
Yaël Dillies (Dec 10 2021 at 18:13):
I'll tell you if ever I take over
Moritz (Dec 20 2021 at 21:40):
(deleted, I am too stupid to tell {} from () )
Moritz (Dec 20 2021 at 22:56):
Does this look sensible? https://github.com/leanprover-community/mathlib/blob/mcdoll/lcspaces/src/analysis/locally_convex.lean
Moritz (Dec 20 2021 at 23:05):
oh I don't need the instance for module
Heather Macbeth (Dec 20 2021 at 23:12):
You can also cut the add_comm_group
instance by using derive
:
@[derive add_comm_group] def seminorm.domain (s : seminorm 𝕜 E) := E
Heather Macbeth (Dec 20 2021 at 23:17):
In fact, you can equip it with the module instance at the same time:
@[derive [add_comm_group, module 𝕜]] def seminorm.domain (s : seminorm 𝕜 E) := E
and then when the time comes to put the seminormed space instance on, you don't need to mention the module structure at all:
instance (s : seminorm 𝕜 E) : semi_normed_space 𝕜 s.domain :=
{ norm_smul_le := s.smul_le }
Moritz (Dec 21 2021 at 12:48):
Yury G. Kudryashov said:
Due to docs#uniform_space.to_topological_space_infi, you'll get
(with_seminorms.uniform_space s).to_topological_space = ⨅ i, (s i).uniform_space.to_topological_space
.
The link is dead and I could not find the correct lemma.
Moritz (Dec 21 2021 at 12:50):
ah it is this https://leanprover-community.github.io/mathlib_docs/topology/uniform_space/basic.html#to_topological_space_infi
Yury G. Kudryashov (Dec 21 2021 at 15:30):
We should move this lemma to the uniform_space
namespace.
Moritz (Dec 21 2021 at 23:55):
I made a little bit of progress: I got everything from the discussion above to work, but now I am failing at showing that addition is continuous. I guess that I am not supposed to prove this by hand, but use some very general statement using the infinimum of the topologies. The only helpful thing I found was the stuff in topology.algebra.filter_basis
, but I guess this would create a second topology which is not defeq to the one we already have.
Moritz (Dec 28 2021 at 12:15):
I managed to define the topological group structure for with_seminorms s
: https://github.com/leanprover-community/mathlib/blob/mcdoll/lcspaces/src/analysis/locally_convex.lean maybe someone can take a look and tell me whether this is reasonable.
Yaël Dillies (Jan 15 2022 at 10:10):
@Moritz Doll, do have a look at #7288 so that we don't duplicate work.
Last updated: Dec 20 2023 at 11:08 UTC