Zulip Chat Archive
Stream: Is there code for X?
Topic: Continuous linear maps with closed range
Michael Rothgang (Mar 20 2025 at 12:51):
It seems we really don't have this - or am I missing something?
Michael Rothgang (Mar 20 2025 at 12:51):
@loogle ContinuousLinearMap, IsClosedMap
loogle (Mar 20 2025 at 12:52):
:shrug: nothing found
Michael Rothgang (Mar 20 2025 at 12:52):
@loogle ContinuousLinearMap, "IsClosed" also yields nothing relevant
loogle (Mar 20 2025 at 12:52):
:exclamation:
function expected at
"IsClosed"
term has type
String
Yury G. Kudryashov (Mar 20 2025 at 12:53):
What assumptions on the spaces do you have in mind?
Michael Rothgang (Mar 20 2025 at 12:53):
General normed spaces - assuming Banach is fine for my setting.
SΓ©bastien GouΓ«zel (Mar 20 2025 at 12:56):
That's just not true. Consider the inclusion of functions in functions. It is a continuous linear maps, but the range is not closed.
Michael Rothgang (Mar 20 2025 at 12:56):
Never mind: I need further conditions, see https://math.stackexchange.com/questions/26071/when-is-the-image-of-a-linear-operator-closed?noredirect=1.
Michael Rothgang (Mar 20 2025 at 12:56):
Indeed - thanks.
Notification Bot (Mar 20 2025 at 12:56):
Michael Rothgang has marked this topic as resolved.
Jireh Loreaux (Mar 20 2025 at 20:11):
Note, we have docs#AntilipschitzWith.isClosed_range, and docs#ContinuousLinearMap.antilipschitz_of_bound, and docs#ContinuousLinearMap.antilipschitz_of_forall_le_inner_map which may help you out.
Michael Rothgang (Mar 21 2025 at 12:52):
I have now opened #23175 with the result I need: there is one open sorry that eludes me, though. MWE is the following:
import Mathlib.Analysis.Normed.Operator.Banach
variable {π π' : Type*} [NontriviallyNormedField π] [NontriviallyNormedField π']
{E : Type*} [NormedAddCommGroup E] [NormedSpace π E]
{F : Type*} [NormedAddCommGroup F] [NormedSpace π' F]
[CompleteSpace E] [CompleteSpace F]
variable {Ο : π β+* π'} {Ο' : π' β+* π} [RingHomInvPair Ο Ο'] [RingHomIsometric Ο] [RingHomIsometric Ο'] [RingHomInvPair Ο' Ο]
@[simp]
lemma ContinuousLinearMap.equivRange_symm (f : E βSL[Ο] F) (hinj : Function.Injective f) (hclo : IsClosed (Set.range f)) :
(f.equivRange hinj hclo).symm.toLinearEquiv =
(LinearEquiv.ofInjective f.toLinearMap hinj).symm := by
rfl
@[simp]
lemma ContinuousLinearMap.equivRange_symm_apply (f : E βSL[Ο] F) (hinj : Function.Injective f) (hclo : IsClosed (Set.range f))
(x : E) : (f.equivRange hinj hclo).symm β¨f x, by simpβ© = x := by
suffices f ((f.equivRange hinj hclo).symm β¨f x, by simpβ©) = f x from hinj this
trans f ((f.equivRange hinj hclo).symm.toLinearEquiv β¨f x, by simpβ©)
Β· rfl -- is there an API lemma for this already?
dsimp only [equivRange_symm]
--apply LinearEquiv.ofInjective_symm_apply hinj
set x' : LinearMap.range f := β¨f x, by simpβ©
-- rw [LinearEquiv.ofInjective_symm_apply f (h := hinj) x']
-- #check LinearEquiv.ofInjective_symm_apply f (h := hinj) x'
-- goal state: f ((LinearEquiv.ofInjective (βf) hinj).symm x') = f x
sorry
Michael Rothgang (Mar 21 2025 at 12:53):
LinearEquiv.ofInjective_symm_apply
looks like it should help, but trying to apply it makes the kernel think for a long time, and produce an error I don't the reason of. It's probably something relatively simple...
Notification Bot (Mar 21 2025 at 12:54):
Michael Rothgang has marked this topic as unresolved.
Ruben Van de Velde (Mar 21 2025 at 13:02):
Nasty, but works:
import Mathlib.Analysis.Normed.Operator.Banach
variable {π π' : Type*} [NontriviallyNormedField π] [NontriviallyNormedField π']
{E : Type*} [NormedAddCommGroup E] [NormedSpace π E]
{F : Type*} [NormedAddCommGroup F] [NormedSpace π' F]
[CompleteSpace E] [CompleteSpace F]
variable {Ο : π β+* π'} {Ο' : π' β+* π} [RingHomInvPair Ο Ο'] [RingHomIsometric Ο] [RingHomIsometric Ο'] [RingHomInvPair Ο' Ο]
@[simp]
lemma ContinuousLinearMap.equivRange_symm (f : E βSL[Ο] F) (hinj : Function.Injective f) (hclo : IsClosed (Set.range f)) :
(f.equivRange hinj hclo).symm.toLinearEquiv =
(LinearEquiv.ofInjective f.toLinearMap hinj).symm := by
rfl
@[simp]
lemma ContinuousLinearMap.equivRange_symm_apply (f : E βSL[Ο] F) (hinj : Function.Injective f) (hclo : IsClosed (Set.range f))
(x : E) : (f.equivRange hinj hclo).symm β¨f x, by simpβ© = x := by
suffices f ((f.equivRange hinj hclo).symm β¨f x, by simpβ©) = f x from hinj this
trans f ((f.equivRange hinj hclo).symm.toLinearEquiv β¨f x, by simpβ©)
Β· rfl -- is there an API lemma for this already?
dsimp only [equivRange_symm]
--apply LinearEquiv.ofInjective_symm_apply hinj
set x' : LinearMap.range f := β¨f x, by simpβ©
set f' : E βββ[Ο] F := βf
replace hinj : Function.Injective f' := hinj
change f' ((LinearEquiv.ofInjective (f') hinj).symm x') = _
rw [LinearEquiv.ofInjective_symm_apply (f := f') (h := hinj) x']
Michael Rothgang (Mar 21 2025 at 13:21):
Thanks a lot! I've pushed your fix, slightly edited to the PR - which is now ready for review.
Last updated: May 02 2025 at 03:31 UTC