Skip to content

Commit 891dd96

Browse files
committed
feat(ContinuousMultilinearMap): generalize some definitions (leanprover-community#34491)
... from normes spaces to topological vector spaces
1 parent 5c17a4f commit 891dd96

File tree

5 files changed

+203
-112
lines changed

5 files changed

+203
-112
lines changed

Mathlib/Analysis/Normed/Module/Multilinear/Basic.lean

Lines changed: 3 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -929,50 +929,6 @@ theorem norm_compContinuousMultilinearMap_le (g : G →L[𝕜] G') (f : Continuo
929929
‖g (f m)‖ ≤ ‖g‖ * (‖f‖ * ∏ i, ‖m i‖) := g.le_opNorm_of_le <| f.le_opNorm _
930930
_ = _ := (mul_assoc _ _ _).symm
931931

932-
variable (𝕜 E G G')
933-
934-
/-- `ContinuousLinearMap.compContinuousMultilinearMap` as a bundled continuous bilinear map. -/
935-
def compContinuousMultilinearMapL :
936-
(G →L[𝕜] G') →L[𝕜] ContinuousMultilinearMap 𝕜 E G →L[𝕜] ContinuousMultilinearMap 𝕜 E G' :=
937-
LinearMap.mkContinuous₂
938-
(LinearMap.mk₂ 𝕜 compContinuousMultilinearMap (fun _ _ _ => rfl) (fun _ _ _ => rfl)
939-
(fun f g₁ g₂ => by ext1; apply f.map_add)
940-
(fun c f g => by ext1; simp))
941-
1
942-
fun f g => by rw [one_mul]; exact f.norm_compContinuousMultilinearMap_le g
943-
944-
variable {𝕜 G G'}
945-
946-
/-- `ContinuousLinearMap.compContinuousMultilinearMap` as a bundled
947-
continuous linear equiv. -/
948-
def _root_.ContinuousLinearEquiv.continuousMultilinearMapCongrRight (g : G ≃L[𝕜] G') :
949-
ContinuousMultilinearMap 𝕜 E G ≃L[𝕜] ContinuousMultilinearMap 𝕜 E G' :=
950-
{ compContinuousMultilinearMapL 𝕜 E G G' g.toContinuousLinearMap with
951-
invFun := compContinuousMultilinearMapL 𝕜 E G' G g.symm.toContinuousLinearMap
952-
left_inv := by
953-
intro f
954-
ext1 m
955-
simp [compContinuousMultilinearMapL]
956-
right_inv := by
957-
intro f
958-
ext1 m
959-
simp [compContinuousMultilinearMapL]
960-
continuous_invFun :=
961-
(compContinuousMultilinearMapL 𝕜 E G' G g.symm.toContinuousLinearMap).continuous }
962-
963-
@[simp]
964-
theorem _root_.ContinuousLinearEquiv.continuousMultilinearMapCongrRight_symm (g : G ≃L[𝕜] G') :
965-
(g.continuousMultilinearMapCongrRight E).symm = g.symm.continuousMultilinearMapCongrRight E :=
966-
rfl
967-
968-
variable {E}
969-
970-
@[simp]
971-
theorem _root_.ContinuousLinearEquiv.continuousMultilinearMapCongrRight_apply (g : G ≃L[𝕜] G')
972-
(f : ContinuousMultilinearMap 𝕜 E G) :
973-
g.continuousMultilinearMapCongrRight E f = (g : G →L[𝕜] G').compContinuousMultilinearMap f :=
974-
rfl
975-
976932
/-- Flip arguments in `f : G →L[𝕜] ContinuousMultilinearMap 𝕜 E G'` to get
977933
`ContinuousMultilinearMap 𝕜 E (G →L[𝕜] G')` -/
978934
@[simps! apply_apply]
@@ -1099,31 +1055,12 @@ theorem norm_compContinuous_linearIsometryEquiv (g : ContinuousMultilinearMap
10991055
(f i : E i →L[𝕜] E₁ i)).norm_compContinuous_linearIsometry_le
11001056
fun i => (f i).symm.toLinearIsometry
11011057

1102-
/-- `ContinuousMultilinearMap.compContinuousLinearMap` as a bundled continuous linear map.
1103-
This implementation fixes `f : Π i, E i →L[𝕜] E₁ i`.
1104-
1105-
Actually, the map is multilinear in `f`,
1106-
see `ContinuousMultilinearMap.compContinuousLinearMapContinuousMultilinear`.
1107-
1108-
For a version fixing `g` and varying `f`, see `compContinuousLinearMapLRight`. -/
1109-
def compContinuousLinearMapL (f : ∀ i, E i →L[𝕜] E₁ i) :
1110-
ContinuousMultilinearMap 𝕜 E₁ G →L[𝕜] ContinuousMultilinearMap 𝕜 E G :=
1111-
LinearMap.mkContinuous
1112-
{ toFun := fun g => g.compContinuousLinearMap f
1113-
map_add' := fun _ _ => rfl
1114-
map_smul' := fun _ _ => rfl }
1115-
(∏ i, ‖f i‖)
1116-
fun _ => (norm_compContinuousLinearMap_le _ _).trans_eq (mul_comm _ _)
1117-
1118-
@[simp]
1119-
theorem compContinuousLinearMapL_apply (g : ContinuousMultilinearMap 𝕜 E₁ G)
1120-
(f : ∀ i, E i →L[𝕜] E₁ i) : compContinuousLinearMapL f g = g.compContinuousLinearMap f :=
1121-
rfl
11221058

11231059
variable (G) in
11241060
theorem norm_compContinuousLinearMapL_le (f : ∀ i, E i →L[𝕜] E₁ i) :
1125-
‖compContinuousLinearMapL (G := G) f‖ ≤ ∏ i, ‖f i‖ :=
1126-
LinearMap.mkContinuous_norm_le _ (by positivity) _
1061+
‖compContinuousLinearMapL (F := G) f‖ ≤ ∏ i, ‖f i‖ :=
1062+
ContinuousLinearMap.opNorm_le_bound _ (by positivity) fun g ↦
1063+
norm_compContinuousLinearMap_le _ _ |>.trans_eq <| mul_comm _ _
11271064

11281065
/-- `ContinuousMultilinearMap.compContinuousLinearMap` as a bundled continuous linear map.
11291066
This implementation fixes `g : ContinuousMultilinearMap 𝕜 E₁ G`.
@@ -1215,46 +1152,6 @@ lemma fderivCompContinuousLinearMap_apply [DecidableEq ι]
12151152
f.fderivCompContinuousLinearMap g dg v = ∑ i, f fun j ↦ (update g i (dg i) j) (v j) := by
12161153
simp [fderivCompContinuousLinearMap]
12171154

1218-
variable (G)
1219-
1220-
/-- `ContinuousMultilinearMap.compContinuousLinearMap` as a bundled continuous linear equiv,
1221-
given `f : Π i, E i ≃L[𝕜] E₁ i`. -/
1222-
def _root_.ContinuousLinearEquiv.continuousMultilinearMapCongrLeft (f : ∀ i, E i ≃L[𝕜] E₁ i) :
1223-
ContinuousMultilinearMap 𝕜 E₁ G ≃L[𝕜] ContinuousMultilinearMap 𝕜 E G :=
1224-
{ compContinuousLinearMapL fun i => (f i : E i →L[𝕜] E₁ i) with
1225-
invFun := compContinuousLinearMapL fun i => ((f i).symm : E₁ i →L[𝕜] E i)
1226-
continuous_toFun := (compContinuousLinearMapL fun i => (f i : E i →L[𝕜] E₁ i)).continuous
1227-
continuous_invFun :=
1228-
(compContinuousLinearMapL fun i => ((f i).symm : E₁ i →L[𝕜] E i)).continuous
1229-
left_inv := by
1230-
intro g
1231-
ext1 m
1232-
simp only [LinearMap.toFun_eq_coe, ContinuousLinearMap.coe_coe,
1233-
compContinuousLinearMapL_apply, compContinuousLinearMap_apply,
1234-
ContinuousLinearEquiv.coe_coe, ContinuousLinearEquiv.apply_symm_apply]
1235-
right_inv := by
1236-
intro g
1237-
ext1 m
1238-
simp only [compContinuousLinearMapL_apply, LinearMap.toFun_eq_coe,
1239-
ContinuousLinearMap.coe_coe, compContinuousLinearMap_apply, ContinuousLinearEquiv.coe_coe,
1240-
ContinuousLinearEquiv.symm_apply_apply] }
1241-
1242-
@[simp]
1243-
theorem _root_.ContinuousLinearEquiv.continuousMultilinearMapCongrLeft_symm
1244-
(f : ∀ i, E i ≃L[𝕜] E₁ i) :
1245-
(ContinuousLinearEquiv.continuousMultilinearMapCongrLeft G f).symm =
1246-
.continuousMultilinearMapCongrLeft G fun i : ι => (f i).symm :=
1247-
rfl
1248-
1249-
variable {G}
1250-
1251-
@[simp]
1252-
theorem _root_.ContinuousLinearEquiv.continuousMultilinearMapCongrLeft_apply
1253-
(g : ContinuousMultilinearMap 𝕜 E₁ G) (f : ∀ i, E i ≃L[𝕜] E₁ i) :
1254-
ContinuousLinearEquiv.continuousMultilinearMapCongrLeft G f g =
1255-
g.compContinuousLinearMap fun i => (f i : E i →L[𝕜] E₁ i) :=
1256-
rfl
1257-
12581155
/-- One of the components of the iterated derivative of a continuous multilinear map. Given a
12591156
bijection `e` between a type `α` (typically `Fin k`) and a subset `s` of `ι`, this component is a
12601157
continuous multilinear map of `k` vectors `v₁, ..., vₖ`, mapping them

Mathlib/Analysis/Normed/Operator/BoundedLinearMaps.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,7 @@ continuous multilinear map `f (g m₁, ..., g mₙ)` is a bounded linear operati
336336
theorem isBoundedLinearMap_continuousMultilinearMap_comp_linear (g : G →L[𝕜] E) :
337337
IsBoundedLinearMap 𝕜 fun f : ContinuousMultilinearMap 𝕜 (fun _ : ι => E) F =>
338338
f.compContinuousLinearMap fun _ => g :=
339-
(ContinuousMultilinearMap.compContinuousLinearMapL (ι := ι) (G := F) (fun _ ↦ g))
339+
(ContinuousMultilinearMap.compContinuousLinearMapL (ι := ι) (F := F) (fun _ ↦ g))
340340
|>.isBoundedLinearMap
341341

342342
end

Mathlib/Topology/Algebra/Group/Basic.lean

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -790,6 +790,29 @@ theorem mem_closure_iff_nhds_one {x : G} {s : Set G} :
790790
rw [mem_closure_iff_nhds_basis ((𝓝 1 : Filter G).basis_sets.nhds_of_one x)]
791791
simp_rw [Set.mem_setOf, id]
792792

793+
/-- A monoid homomorphism (a bundled morphism of a type that implements `MonoidHomClass`)
794+
from a topological group to a topological monoid is continuous
795+
provided that it is continuous at one.
796+
797+
This version assumes that `f x → 1` as `x → 1`,
798+
saving a rewrite of `f 1 = 1` compared to `continuous_of_continuousAt_one` in some cases.
799+
See also `uniformContinuous_of_continuousAt_one`. -/
800+
@[to_additive
801+
/-- An additive monoid homomorphism (a bundled morphism of a type that implements
802+
`AddMonoidHomClass`) from an additive topological group to an additive topological monoid is
803+
continuous provided that it is continuous at zero.
804+
805+
This version assumes that `f x → 0` as `x → 0`,
806+
saving a rewrite of `f 0 = 0` compared to `continuous_of_continuousAt_zero` in some cases.
807+
See also `uniformContinuous_of_continuousAt_zero`. -/]
808+
theorem continuous_of_tendsto_nhds_one {M hom : Type*} [MulOneClass M] [TopologicalSpace M]
809+
[ContinuousMul M] [FunLike hom G M] [MonoidHomClass hom G M] (f : hom)
810+
(hf : Tendsto f (𝓝 1) (𝓝 1)) :
811+
Continuous f :=
812+
continuous_iff_continuousAt.2 fun x ↦ by
813+
simpa only [ContinuousAt, ← map_mul_left_nhds_one x, tendsto_map'_iff, Function.comp_def,
814+
map_mul, mul_one] using hf.const_mul (f x)
815+
793816
/-- A monoid homomorphism (a bundled morphism of a type that implements `MonoidHomClass`) from a
794817
topological group to a topological monoid is continuous provided that it is continuous at one. See
795818
also `uniformContinuous_of_continuousAt_one`. -/
@@ -802,9 +825,7 @@ theorem continuous_of_continuousAt_one {M hom : Type*} [MulOneClass M] [Topologi
802825
[ContinuousMul M] [FunLike hom G M] [MonoidHomClass hom G M] (f : hom)
803826
(hf : ContinuousAt f 1) :
804827
Continuous f :=
805-
continuous_iff_continuousAt.2 fun x => by
806-
simpa only [ContinuousAt, ← map_mul_left_nhds_one x, tendsto_map'_iff, Function.comp_def,
807-
map_mul, map_one, mul_one] using hf.tendsto.const_mul (f x)
828+
continuous_of_tendsto_nhds_one f <| by simpa using hf.tendsto
808829

809830
@[to_additive continuous_of_continuousAt_zero₂]
810831
theorem continuous_of_continuousAt_one₂ {H M : Type*} [CommMonoid M] [TopologicalSpace M]

Mathlib/Topology/Algebra/Module/Multilinear/Topology.lean

Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ Authors: Yury Kudryashov
55
-/
66
module
77

8+
public import Mathlib.Topology.Algebra.Module.Equiv
89
public import Mathlib.Topology.Algebra.Module.Multilinear.Bounded
10+
public import Mathlib.Topology.Algebra.Module.StrongTopology
911
public import Mathlib.Topology.Algebra.Module.UniformConvergence
1012
public import Mathlib.Topology.Algebra.SeparationQuotient.Section
1113
public import Mathlib.Topology.Hom.ContinuousEvalConst
@@ -212,6 +214,53 @@ theorem hasBasis_nhds_zero :
212214
{ f | MapsTo f SV.1 SV.2 } :=
213215
hasBasis_nhds_zero_of_basis (Filter.basis_sets _)
214216

217+
theorem eventually_nhds_zero_mapsTo {s : Set (∀ i, E i)} (hs : IsVonNBounded 𝕜 s)
218+
{U : Set F} (hu : U ∈ 𝓝 0) :
219+
∀ᶠ f : ContinuousMultilinearMap 𝕜 E F in 𝓝 0, MapsTo f s U :=
220+
hasBasis_nhds_zero.mem_of_mem (i := (s, U)) ⟨hs, hu⟩
221+
222+
theorem isVonNBounded_image2_apply [ContinuousConstSMul 𝕜 F]
223+
{S : Set (ContinuousMultilinearMap 𝕜 E F)} (hS : IsVonNBounded 𝕜 S)
224+
{s : Set (∀ i, E i)} (hs : IsVonNBounded 𝕜 s) :
225+
IsVonNBounded 𝕜 (Set.image2 (fun f x ↦ f x) S s) := by
226+
intro U hU
227+
filter_upwards [hS (eventually_nhds_zero_mapsTo hs hU)] with c hc
228+
rw [image2_subset_iff]
229+
intro f hf x hx
230+
rcases hc hf with ⟨g, hg, rfl⟩
231+
exact smul_mem_smul_set (hg hx)
232+
233+
section CompContinuousLinearMap
234+
variable {E₁ : ι → Type*} [∀ i, TopologicalSpace (E₁ i)] [ContinuousConstSMul 𝕜 F]
235+
[∀ i, AddCommGroup (E₁ i)] [∀ i, Module 𝕜 (E₁ i)]
236+
237+
/-- `ContinuousMultilinearMap.compContinuousLinearMap` as a bundled continuous linear map.
238+
Given a family of continuous linear maps `f : Π i, E i →L[𝕜] E₁ i`,
239+
this function returns a continuous linear maps between the spaces of continuous multilinear maps
240+
on `Π i, E₁ i` and on `Π i, E i`.
241+
The map sends `g` to the map given by `v ↦ g (fun i ↦ f i (v i))`.
242+
243+
Actually, the map is multilinear in `f`,
244+
see `ContinuousMultilinearMap.compContinuousLinearMapContinuousMultilinear`.
245+
246+
For a version fixing `g` and varying `f`, see `compContinuousLinearMapLRight`. -/
247+
@[simps! apply]
248+
def compContinuousLinearMapL (f : ∀ i, E i →L[𝕜] E₁ i) :
249+
ContinuousMultilinearMap 𝕜 E₁ F →L[𝕜] ContinuousMultilinearMap 𝕜 E F :=
250+
letI aux : ContinuousMultilinearMap 𝕜 E₁ F →ₗ[𝕜] ContinuousMultilinearMap 𝕜 E F :=
251+
{ toFun g := g.compContinuousLinearMap f
252+
map_add' _ _ := by ext; simp
253+
map_smul' _ _ := by ext; simp }
254+
{ toLinearMap := aux
255+
cont := by
256+
apply continuous_of_tendsto_nhds_zero aux
257+
rw [hasBasis_nhds_zero.tendsto_iff hasBasis_nhds_zero]
258+
rintro ⟨U, V⟩ ⟨hU, hV⟩
259+
set φ : (∀ i, E i) →L[𝕜] (∀ i, E₁ i) := .piMap f
260+
exact ⟨(φ '' U, V), ⟨hU.image φ, hV⟩, fun g hg ↦ hg.comp (mapsTo_image _ _)⟩ }
261+
262+
end CompContinuousLinearMap
263+
215264
variable [∀ i, ContinuousSMul 𝕜 (E i)]
216265

217266
instance : ContinuousEvalConst (ContinuousMultilinearMap 𝕜 E F) (Π i, E i) F where
@@ -280,3 +329,127 @@ theorem tsum_eval [T2Space F] {α : Type*} {p : α → ContinuousMultilinearMap
280329
(hasSum_eval hp.hasSum m).tsum_eq.symm
281330

282331
end ContinuousMultilinearMap
332+
333+
namespace ContinuousLinearMap
334+
335+
variable {𝕜 ι : Type*} {E : ι → Type*} {F G : Type*} [NormedField 𝕜] [∀ i, TopologicalSpace (E i)]
336+
[∀ i, AddCommGroup (E i)] [∀ i, Module 𝕜 (E i)]
337+
[AddCommGroup F] [Module 𝕜 F] [TopologicalSpace F] [IsTopologicalAddGroup F]
338+
[ContinuousConstSMul 𝕜 F]
339+
[AddCommGroup G] [Module 𝕜 G] [TopologicalSpace G] [IsTopologicalAddGroup G]
340+
[ContinuousConstSMul 𝕜 G]
341+
342+
variable (𝕜 E F G) in
343+
/-- `ContinuousLinearMap.compContinuousMultilinearMap` as a bundled continuous bilinear map.
344+
345+
Given a continuous linear map `f : F →L[𝕜] G`
346+
and a continuous multilinear map `g` from `Π i, E i` to `F`,
347+
this function returns `f ∘ g` as a continuous multilinear map.
348+
349+
With this order of arguments, the function is continuous in `g` (for each fixed `f`)
350+
and is continuous in `f` (as a function to the space of continuous linear maps).
351+
Note that for general topological vector spaces, it is not guaranteed to be continuous in `(g, f)`.
352+
-/
353+
def compContinuousMultilinearMapL :
354+
(F →L[𝕜] G) →L[𝕜] ContinuousMultilinearMap 𝕜 E F →L[𝕜] ContinuousMultilinearMap 𝕜 E G :=
355+
letI aux : (F →L[𝕜] G) →ₗ[𝕜]
356+
ContinuousMultilinearMap 𝕜 E F →L[𝕜] ContinuousMultilinearMap 𝕜 E G :=
357+
{ toFun g :=
358+
letI aux₁ : ContinuousMultilinearMap 𝕜 E F →ₗ[𝕜] ContinuousMultilinearMap 𝕜 E G :=
359+
{ toFun := g.compContinuousMultilinearMap
360+
map_add' _ _ := by ext; simp
361+
map_smul' _ _ := by ext; simp }
362+
{ toLinearMap := aux₁
363+
cont := by
364+
apply continuous_of_tendsto_nhds_zero aux₁
365+
rw [ContinuousMultilinearMap.hasBasis_nhds_zero.tendsto_iff
366+
ContinuousMultilinearMap.hasBasis_nhds_zero]
367+
rintro ⟨U, V⟩ ⟨hU, hV⟩
368+
refine ⟨(U, g ⁻¹' V), ⟨hU, ?_⟩, ?_⟩
369+
· exact (map_continuous g).tendsto 0 <| by simpa
370+
· exact fun f hf ↦ hf
371+
}
372+
map_add' _ _ := by ext; simp
373+
map_smul' _ _ := by ext; simp }
374+
{ toLinearMap := aux
375+
cont := by
376+
apply continuous_of_tendsto_nhds_zero aux
377+
rw [ContinuousLinearMap.hasBasis_nhds_zero.tendsto_iff <|
378+
ContinuousLinearMap.hasBasis_nhds_zero_of_basis <|
379+
ContinuousMultilinearMap.hasBasis_nhds_zero]
380+
rintro ⟨U, V, W⟩ ⟨hU, hV, hW⟩
381+
refine ⟨(.image2 (fun f v ↦ f v) U V, W), ⟨?_, hW⟩, ?_⟩
382+
· exact ContinuousMultilinearMap.isVonNBounded_image2_apply hU hV
383+
· exact fun g hg f hf m hm ↦ hg _ <| mem_image2_of_mem hf hm }
384+
385+
@[simp]
386+
theorem compContinuousMultilinearMapL_apply (g : F →L[𝕜] G) (f : ContinuousMultilinearMap 𝕜 E F) :
387+
compContinuousMultilinearMapL 𝕜 E F G g f = g.compContinuousMultilinearMap f :=
388+
rfl
389+
390+
end ContinuousLinearMap
391+
392+
namespace ContinuousLinearEquiv
393+
394+
variable {𝕜 ι : Type*} {E E₁ : ι → Type*} {F G : Type*} [NormedField 𝕜]
395+
[∀ i, TopologicalSpace (E i)] [∀ i, AddCommGroup (E i)] [∀ i, Module 𝕜 (E i)]
396+
[∀ i, TopologicalSpace (E₁ i)] [∀ i, AddCommGroup (E₁ i)] [∀ i, Module 𝕜 (E₁ i)]
397+
[AddCommGroup F] [Module 𝕜 F] [TopologicalSpace F] [IsTopologicalAddGroup F]
398+
[ContinuousConstSMul 𝕜 F]
399+
[AddCommGroup G] [Module 𝕜 G] [TopologicalSpace G] [IsTopologicalAddGroup G]
400+
[ContinuousConstSMul 𝕜 G]
401+
402+
variable (F) in
403+
/-- `ContinuousMultilinearMap.compContinuousLinearMap` as a bundled continuous linear equiv.
404+
Given a family of continuous linear equivalences `f : Π i, E i ≃L[𝕜] E₁ i`,
405+
this function returns a continuous linear equivalence
406+
between the space of continuous multilinear maps with domain `Π i, E i` and codomain `F`
407+
and the space of multilinear maps with domain `Π i, E₁ i` and the same codomain,
408+
by composing the multilinear maps with `f`. -/
409+
def continuousMultilinearMapCongrLeft (f : ∀ i, E i ≃L[𝕜] E₁ i) :
410+
ContinuousMultilinearMap 𝕜 E₁ F ≃L[𝕜] ContinuousMultilinearMap 𝕜 E F where
411+
__ := ContinuousMultilinearMap.compContinuousLinearMapL fun i ↦ ↑(f i)
412+
invFun := ContinuousMultilinearMap.compContinuousLinearMapL fun i ↦ ↑(f i).symm
413+
left_inv g := by ext; simp
414+
right_inv g := by ext; simp
415+
416+
@[simp]
417+
theorem continuousMultilinearMapCongrLeft_symm
418+
(f : ∀ i, E i ≃L[𝕜] E₁ i) :
419+
(ContinuousLinearEquiv.continuousMultilinearMapCongrLeft F f).symm =
420+
.continuousMultilinearMapCongrLeft F fun i : ι ↦ (f i).symm :=
421+
rfl
422+
423+
@[simp]
424+
theorem continuousMultilinearMapCongrLeft_apply
425+
(g : ContinuousMultilinearMap 𝕜 E₁ F) (f : ∀ i, E i ≃L[𝕜] E₁ i) :
426+
ContinuousLinearEquiv.continuousMultilinearMapCongrLeft F f g =
427+
g.compContinuousLinearMap fun i ↦ (f i : E i →L[𝕜] E₁ i) :=
428+
rfl
429+
430+
variable (E) in
431+
/-- `ContinuousLinearMap.compContinuousMultilinearMap` as a bundled continuous linear equiv.
432+
Given a continuous linear equivalence `g : F ≃L[𝕜] G`,
433+
this function builds a continuous linear equivalence
434+
between the space of continuous multilinear maps with codomain `F`
435+
and the space of continuous multilinear maps with codomain `G`,
436+
by composing these maps with `g` or `g.symm`. -/
437+
def continuousMultilinearMapCongrRight (g : F ≃L[𝕜] G) :
438+
ContinuousMultilinearMap 𝕜 E F ≃L[𝕜] ContinuousMultilinearMap 𝕜 E G where
439+
__ := ContinuousLinearMap.compContinuousMultilinearMapL _ _ _ _ g
440+
invFun := ContinuousLinearMap.compContinuousMultilinearMapL _ _ _ _ g.symm
441+
left_inv _ := by ext; simp
442+
right_inv _ := by ext; simp
443+
444+
@[simp]
445+
theorem continuousMultilinearMapCongrRight_symm (g : F ≃L[𝕜] G) :
446+
(g.continuousMultilinearMapCongrRight E).symm = g.symm.continuousMultilinearMapCongrRight E :=
447+
rfl
448+
449+
@[simp]
450+
theorem continuousMultilinearMapCongrRight_apply (g : F ≃L[𝕜] G)
451+
(f : ContinuousMultilinearMap 𝕜 E F) :
452+
g.continuousMultilinearMapCongrRight E f = (g : F →L[𝕜] G).compContinuousMultilinearMap f :=
453+
rfl
454+
455+
end ContinuousLinearEquiv

Mathlib/Topology/Algebra/Module/StrongTopology.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -831,9 +831,9 @@ variable {𝕜 E : Type*} [NontriviallyNormedField 𝕜] [AddCommGroup E] [Modul
831831
def toSpanSingletonCLE : E ≃L[𝕜] (𝕜 →L[𝕜] E) where
832832
toLinearEquiv := toSpanSingletonLE ..
833833
continuous_toFun := by
834-
apply continuous_of_continuousAt_zero (toSpanSingletonLE _ _ _)
834+
apply continuous_of_tendsto_nhds_zero (toSpanSingletonLE _ _ _)
835835
suffices ∀ s : Set 𝕜, IsVonNBounded 𝕜 s → ∀ U ∈ 𝓝 0, ∀ᶠ (a : E) in 𝓝 0, ∀ x ∈ s, x • a ∈ U by
836-
simpa [ContinuousAt, ContinuousLinearMap.nhds_zero_eq, MapsTo]
836+
simpa [ContinuousLinearMap.nhds_zero_eq, MapsTo]
837837
intro s hsb U hU
838838
rcases mem_nhds_prod_iff.mp <| continuous_smul.tendsto' (0 : 𝕜 × E) 0 (by simp) hU
839839
with ⟨V, hV, W, hW, hVW⟩

0 commit comments

Comments
 (0)