Zulip Chat Archive

Stream: new members

Topic: convergence in norm/WeakSpace


Yoh Tanimoto (Mar 08 2024 at 15:02):

Hello!
I would like to prove that a convergent sequence in normed space is convergent in the weak topology as well. Could someone help me state it in Lean?

I tried Tendsto (fun n ↦ (x n : (WeakSpace π•œ E))) atTop (nhds (p : (WeakSpace π•œ E))), thinking that I were casting x n to Weakspace π•œ E, but actually it remains in E:

import Mathlib

variable {π•œ : Type*} [NontriviallyNormedField π•œ]
variable {E : Type*} [SeminormedAddCommGroup E] [NormedSpace π•œ E]

open NormedSpace Filter Set

theorem weak_convergence_of_norm_convergence
 (x : β„• β†’ E) (p : E) (hx : Tendsto x atTop (nhds p)) :
 Tendsto (fun n ↦ (x n : (WeakSpace π•œ E))) atTop (nhds (p : (WeakSpace π•œ E))) := by
 exact hx

Yoh Tanimoto (Mar 11 2024 at 17:00):

Let me ask in a different way.
For a variable p : E, is it possible to take a variable q : WeakSpace π•œ E such that p = q?

import Mathlib

variable {π•œ : Type*} [NontriviallyNormedField π•œ]
variable {E : Type*} [SeminormedAddCommGroup E] [NormedSpace π•œ E]

variable (p : E)
variable (q : WeakSpace π•œ E)
#check p = q  -- : Prop

Kalle KytΓΆlΓ€ (Mar 11 2024 at 22:50):

I thought the coercions should work as you thought, too, with explicit type ascriptions...

Adding the id-trick, this seems to work:

import Mathlib

variable {π•œ : Type*} [NontriviallyNormedField π•œ]
variable {E : Type*} [SeminormedAddCommGroup E] [NormedSpace π•œ E]
variable (p : E)

#check (p : WeakSpace π•œ E)   -- p : E -- :(
#check (id p : WeakSpace π•œ E)   -- id p : WeakSpace π•œ E -- :)

Eric Wieser (Mar 11 2024 at 23:39):

I think this is the wrong question; you should be asking if there is an equivalence such that p : E but e p : WeakSpace k E

Eric Wieser (Mar 11 2024 at 23:39):

I would expect to find one right next to docs#WeakSpace

Eric Wieser (Mar 11 2024 at 23:41):

... though it does look like it's missing

Eric Wieser (Mar 11 2024 at 23:41):

See docs#WithLp.equiv for an example of what I mean

Yoh Tanimoto (Mar 12 2024 at 04:59):

OK, so id with explicit type ascription works, thanks!

import Mathlib

variable {π•œ : Type*} [NontriviallyNormedField π•œ]
variable {E : Type*} [SeminormedAddCommGroup E] [NormedSpace π•œ E]


open NormedSpace Filter Set

theorem norm_topology_le_weak_topology :
 (UniformSpace.toTopologicalSpace : TopologicalSpace E) ≀
  (WeakSpace.instTopologicalSpace : TopologicalSpace (WeakSpace π•œ E)) := by
  apply Continuous.le_induced
  refine continuous_pi ?h.h
  intro y
  simp
  have : (fun x => ((topDualPairing π•œ E) y) x) = (fun x => y x) := by
   ext x
   exact topDualPairing_apply y x
  rw [this]
  exact ContinuousLinearMap.continuous y

theorem weak_convergence_of_norm_convergence
 (x : β„• β†’ E) (p : E) (hx : Tendsto x atTop (nhds p)) :
 Tendsto (fun n ↦ (id (x n) : (WeakSpace π•œ E))) atTop (nhds (p : (WeakSpace π•œ E))) := by
 refine tendsto_atTop_nhds.mpr ?_
 intro U hpU hU
 have hUnorm : IsOpen (id U : Set E) := by
  exact norm_topology_le_weak_topology (id U : Set E) hU
 rw [tendsto_atTop_nhds] at hx
 exact hx (id U : Set E) hpU hUnorm

What is the convention of mathlib for different topologies on the same set?
Should there be a canonical map E β†’ WeakSpace π•œ E as you say, or a coercion?
I see the notation IsOpen[s] at docs#TopologicalSpace.le_def but if I just write #check IsOpen[UniformSpace.toTopologicalSpace : TopologicalSpace E], I get an error.

Yoh Tanimoto (Mar 18 2024 at 09:20):

I made a PR #11472 (from a fork) proving some basic relations between the weak and the original topology. May I have a write access to non-master branches of the mathlib repo?

I am a mathematical physicist, here is my website https://www.mat.uniroma2.it/~tanimoto/
I organized a workshop on Lean in Rome in January https://www.mat.uniroma2.it/butterley/formalisation/

Riccardo Brasca (Mar 18 2024 at 09:22):

Invitation sent!

Yoh Tanimoto (Mar 18 2024 at 09:24):

thank you!

Moritz Doll (Mar 18 2024 at 10:23):

I would guess that we are missing something like this:

def foo : E β†’L[π•œ] WeakSpace π•œ E where
  toFun x := x
  map_add' := sorry
  map_smul' := sorry
  cont := by
    apply WeakBilin.continuous_of_continuous_eval
    exact ContinuousLinearMap.continuous

and the convergence statement should be a very easy consequence of this definition.

Yoh Tanimoto (Mar 18 2024 at 10:33):

I agree that it would be nice to have such functions! I asked above which was the convention of mathlib for different topologies on a set.

So should there be a canonical map for any combination of two topologies on the same set? Or is there a way to solve this by, say, coercion? I wanted to know this because in von Neumann algebras one puts 7 topologies on B(H)...

Moritz Doll (Mar 18 2024 at 10:39):

The convention is that we mainly use type synonyms such as WeakSpace k E and then have mappings such as WithLp.equiv or the one I sketched out above to go between the different types

Yoh Tanimoto (Mar 18 2024 at 10:39):

ok!

Moritz Doll (Mar 18 2024 at 10:51):

There might be quite a bit of API missing for WeakSpace, as far as I know nobody really used it


Last updated: May 02 2025 at 03:31 UTC