@@ -5,7 +5,7 @@ Authors: Frédéric Dupuis
55-/
66module
77
8- public import Mathlib.Algebra.Ring .TransferInstance
8+ public import Mathlib.Algebra.Algebra .TransferInstance
99public import Mathlib.Analysis.LocallyConvex.WithSeminorms
1010public import Mathlib.Analysis.LocallyConvex.SeparatingDual
1111public import Mathlib.Topology.Algebra.Module.Spaces.ContinuousLinearMap
@@ -162,6 +162,11 @@ instance instIsCentralScalar {S : Type*} [Semiring S] [Module S F] [SMulCommClas
162162instance instRing [IsTopologicalAddGroup E] : Ring (E →WOT[𝕜₁] E) :=
163163 equiv.ring
164164
165+ instance instAlgebra {S : Type *} [CommSemiring S] [Module S E] [SMulCommClass 𝕜₁ S E] [SMul S 𝕜₁]
166+ [IsScalarTower S 𝕜₁ E] [ContinuousConstSMul S E] [IsTopologicalAddGroup E] :
167+ Algebra S (E →WOT[𝕜₁] E) :=
168+ equiv.algebra S
169+
165170/-- The additive group equivalence between `ContinuousLinearMapWOT` and `ContinuousLinearMap`. -/
166171@[simps!]
167172def addEquiv [IsTopologicalAddGroup F] : (E →SWOT[σ] F) ≃+ (E →SL[σ] F) :=
@@ -179,6 +184,13 @@ def linearEquiv (S : Type*) [Semiring S] [Module S F] [SMulCommClass 𝕜₂ S F
179184def ringEquiv [IsTopologicalAddGroup E] : (E →WOT[𝕜₁] E) ≃+* (E →L[𝕜₁] E) :=
180185 equiv.ringEquiv
181186
187+ /-- The algebra equivalence between `ContinuousLinearMapWOT` and `ContinuousLinearMap`. -/
188+ @[simps!]
189+ def algEquiv (S : Type *) [CommSemiring S] [Module S E] [SMulCommClass 𝕜₁ S E] [SMul S 𝕜₁]
190+ [IsScalarTower S 𝕜₁ E] [ContinuousConstSMul S E] [IsTopologicalAddGroup E] :
191+ (E →WOT[𝕜₁] E) ≃ₐ[S] (E →L[𝕜₁] E) :=
192+ equiv.algEquiv S
193+
182194instance instFunLike : FunLike (E →SWOT[σ] F) E F where
183195 coe f := toCLM f
184196 coe_injective' := DFunLike.coe_injective.comp toCLM_injective
@@ -197,7 +209,7 @@ instance instContinuousLinearMapClass : ContinuousSemilinearMapClass (E →SWOT[
197209@[simp]
198210lemma ofCLM_toCLM (A : E →SWOT[σ] F) : ofCLM (toCLM A) = A := rfl
199211
200- @[ simp]
212+ -- not marked ` simp` because Lean just sees `A` on the left-hand side
201213lemma toCLM_ofCLM (A : E →SL[σ] F) : toCLM (ofCLM A) = A := rfl
202214
203215@[simp]
@@ -223,74 +235,65 @@ lemma ext_dual [H : SeparatingDual 𝕜₂ F] {A B : E →SWOT[σ] F}
223235 simp_rw [ext_iff, ← (separatingDual_iff_injective.mp H).eq_iff, LinearMap.ext_iff]
224236 exact h
225237
226- @[simp] lemma ofCLM_smul {S : Type *} [DistribSMul S F] [SMulCommClass 𝕜₂ S F]
227- [ContinuousConstSMul S F] {c : S} {f : E →SL[σ] F} : ofCLM (c • f) = c • ofCLM f :=
228- toCLM_injective rfl
229-
230- @[simp] lemma toCLM_smul {S : Type *} [DistribSMul S F] [SMulCommClass 𝕜₂ S F]
231- [ContinuousConstSMul S F] {c : S} {f : E →SWOT[σ] F} : toCLM (c • f) = c • toCLM f :=
232- ofCLM_injective rfl
233-
234- @[simp] lemma smul_apply {S : Type *} [DistribSMul S F] [SMulCommClass 𝕜₂ S F]
235- [ContinuousConstSMul S F] {f : E →SWOT[σ] F} (c : S) (x : E) : (c • f) x = c • (f x) := by
236- simp only [DFunLike.coe]; rfl
237-
238- variable [IsTopologicalAddGroup F]
239-
240- @[simp] lemma ofCLM_zero : ofCLM (0 : E →SL[σ] F) = 0 :=
241- toCLM_injective rfl
242-
243- @[simp] lemma ofCLM_add {f g : E →SL[σ] F} : ofCLM (f + g) = ofCLM f + ofCLM g :=
244- toCLM_injective rfl
245-
246- @[simp] lemma ofCLM_sub {f g : E →SL[σ] F} : ofCLM (f - g) = ofCLM f - ofCLM g :=
247- toCLM_injective rfl
248-
249- @[simp] lemma ofCLM_neg {f : E →SL[σ] F} : ofCLM (-f) = -ofCLM f :=
250- toCLM_injective rfl
251-
252- @[simp] lemma ofCLM_mul (f g : F →L[𝕜₂] F) : ofCLM (f * g) = ofCLM f * ofCLM g :=
253- toCLM_injective rfl
238+ section SMul
254239
255- @[simp] lemma ofCLM_one : ofCLM (1 : F →L[𝕜₂] F) = 1 :=
256- toCLM_injective rfl
240+ variable {S : Type *} [DistribSMul S F] [SMulCommClass 𝕜₂ S F] [ContinuousConstSMul S F]
257241
258- @[simp] lemma toCLM_zero : toCLM (0 : E →SWOT[σ] F) = 0 :=
259- ofCLM_injective rfl
242+ @[simp] lemma ofCLM_smul {c : S} {f : E →SL[σ] F} : ofCLM (c • f) = c • ofCLM f := rfl
243+ @[simp] lemma toCLM_smul {c : S} {f : E →SWOT[σ] F} : toCLM (c • f) = c • toCLM f := rfl
244+ @[simp] lemma smul_apply {f : E →SWOT[σ] F} (c : S) (x : E) : (c • f) x = c • (f x) := rfl
260245
261- @[simp] lemma toCLM_add {f g : E →SWOT[σ] F} : toCLM (f + g) = toCLM f + toCLM g :=
262- ofCLM_injective rfl
246+ end SMul
263247
264- @[simp] lemma toCLM_sub {f g : E →SWOT[σ] F} : toCLM (f - g) = toCLM f - toCLM g :=
265- ofCLM_injective rfl
248+ section Algebra
266249
267- @[simp] lemma toCLM_neg {f : E →SWOT[σ] F} : toCLM (-f) = -toCLM f :=
268- ofCLM_injective rfl
250+ variable {S : Type *} [CommSemiring S] [Module S E] [SMulCommClass 𝕜₁ S E] [SMul S 𝕜₁]
251+ [IsScalarTower S 𝕜₁ E] [ContinuousConstSMul S E] [IsTopologicalAddGroup E]
269252
270- @[simp] lemma toCLM_mul (f g : F →WOT[𝕜₂] F) : toCLM (f * g) = toCLM f * toCLM g :=
271- ofCLM_injective rfl
272-
273- @[simp] lemma toCLM_one : toCLM (1 : F →WOT[𝕜₂] F) = 1 :=
274- ofCLM_injective rfl
275-
276- @[simp] lemma zero_apply (x : E) : (0 : E →SWOT[σ] F) x = 0 := by
277- simp [← coe_toCLM, ← addEquiv_apply]
253+ @[simp] lemma toCLM_algebraMap (c : S) :
254+ toCLM (algebraMap S (E →WOT[𝕜₁] E) c) = algebraMap S (E →L[𝕜₁] E) c :=
255+ rfl
278256
279- @[simp] lemma add_apply {f g : E →SWOT[σ] F} (x : E) : (f + g) x = f x + g x := by
280- simp [← coe_toCLM, ← addEquiv_apply]
257+ @[simp] lemma ofCLM_algebraMap (c : S) :
258+ ofCLM (algebraMap S (E →L[𝕜₁] E) c) = algebraMap S (E →WOT[𝕜₁] E) c :=
259+ rfl
281260
282- @[simp] lemma sub_apply {f g : E →SWOT[σ] F} (x : E) : (f - g) x = f x - g x := by
283- simp [← coe_toCLM, ← addEquiv_apply]
261+ @[simp] lemma algebraMapCLM_apply (c : S) (x : E) :
262+ (algebraMap S (E →WOT[𝕜₁] E) c) x = c • x :=
263+ rfl
284264
285- @[simp] lemma neg_apply {f : E →SWOT[σ] F} (x : E) : (-f) x = -(f x) := by
286- simp [← coe_toCLM, ← addEquiv_apply]
265+ end Algebra
287266
288- @[simp] lemma mul_apply (f g : F →WOT[𝕜₂] F) (x : F) :
289- (f * g) x = f (g x) := by
290- rfl
267+ variable [IsTopologicalAddGroup F]
291268
292- @[simp] lemma one_apply (x : F) : (1 : F →WOT[𝕜₂] F) x = x := by
293- rfl
269+ @[simp] lemma ofCLM_zero : ofCLM (0 : E →SL[σ] F) = 0 := rfl
270+ @[simp] lemma ofCLM_add {f g : E →SL[σ] F} : ofCLM (f + g) = ofCLM f + ofCLM g := rfl
271+ @[simp] lemma ofCLM_sub {f g : E →SL[σ] F} : ofCLM (f - g) = ofCLM f - ofCLM g := rfl
272+ @[simp] lemma ofCLM_neg {f : E →SL[σ] F} : ofCLM (-f) = -ofCLM f := rfl
273+ @[simp] lemma ofCLM_mul (f g : F →L[𝕜₂] F) : ofCLM (f * g) = ofCLM f * ofCLM g := rfl
274+ @[simp] lemma ofCLM_one : ofCLM (1 : F →L[𝕜₂] F) = 1 := rfl
275+ @[simp] lemma ofCLM_pow (f : F →L[𝕜₂] F) (n : ℕ) : ofCLM (f ^ n) = ofCLM f ^ n := rfl
276+ @[simp] lemma ofCLM_natCast (n : ℕ) : ofCLM (n : F →L[𝕜₂] F) = n := rfl
277+ @[simp] lemma ofCLM_intCast (n : ℤ) : ofCLM (n : F →L[𝕜₂] F) = n := rfl
278+
279+ @[simp] lemma toCLM_zero : toCLM (0 : E →SWOT[σ] F) = 0 := rfl
280+ @[simp] lemma toCLM_add {f g : E →SWOT[σ] F} : toCLM (f + g) = toCLM f + toCLM g := rfl
281+ @[simp] lemma toCLM_sub {f g : E →SWOT[σ] F} : toCLM (f - g) = toCLM f - toCLM g := rfl
282+ @[simp] lemma toCLM_neg {f : E →SWOT[σ] F} : toCLM (-f) = -toCLM f := rfl
283+ @[simp] lemma toCLM_mul (f g : F →WOT[𝕜₂] F) : toCLM (f * g) = toCLM f * toCLM g := rfl
284+ @[simp] lemma toCLM_one : toCLM (1 : F →WOT[𝕜₂] F) = 1 := rfl
285+ @[simp] lemma toCLM_pow (f : F →WOT[𝕜₂] F) (n : ℕ) : (f ^ n).toCLM = f.toCLM ^ n := rfl
286+ @[simp] lemma toCLM_natCast (n : ℕ) : (n : F →WOT[𝕜₂] F).toCLM = n := rfl
287+ @[simp] lemma toCLM_intCast (n : ℤ) : (n : F →WOT[𝕜₂] F).toCLM = n := rfl
288+
289+ @[simp] lemma zero_apply (x : E) : (0 : E →SWOT[σ] F) x = 0 := rfl
290+ @[simp] lemma add_apply {f g : E →SWOT[σ] F} (x : E) : (f + g) x = f x + g x := rfl
291+ @[simp] lemma sub_apply {f g : E →SWOT[σ] F} (x : E) : (f - g) x = f x - g x := rfl
292+ @[simp] lemma neg_apply {f : E →SWOT[σ] F} (x : E) : (-f) x = -(f x) := rfl
293+ @[simp] lemma mul_apply (f g : F →WOT[𝕜₂] F) (x : F) : (f * g) x = f (g x) := rfl
294+ @[simp] lemma one_apply (x : F) : (1 : F →WOT[𝕜₂] F) x = x := rfl
295+ @[simp] lemma natCast_apply (n : ℕ) (x : F) : (n : F →WOT[𝕜₂] F) x = n • x := rfl
296+ @[simp] lemma intCast_apply (n : ℤ) (x : F) : (n : F →WOT[𝕜₂] F) x = n • x := rfl
294297
295298end Basic
296299
@@ -359,7 +362,18 @@ lemma le_nhds_iff_forall_dual_apply_le_nhds {l : Filter (E →SWOT[σ] F)} {A :
359362instance instT3Space [SeparatingDual 𝕜₂ F] : T3Space (E →SWOT[σ] F) :=
360363 isEmbedding_inducingFn.t3Space
361364
362- instance instContinuousSMul : ContinuousSMul 𝕜₂ (E →SWOT[σ] F) := .induced (inducingFn σ E F)
365+ instance {S : Type*} [DistribSMul S F] [SMulCommClass 𝕜₂ S F] [ContinuousConstSMul S F]
366+ [SMul S 𝕜₂] [IsScalarTower S 𝕜₂ 𝕜₂] [IsScalarTower S 𝕜₂ F] :
367+ ContinuousConstSMul S (F →WOT[𝕜₂] F) where
368+ continuous_const_smul c := by
369+ apply continuous_of_dual_apply_continuous fun _ _ ↦ ?_
370+ simp only [smul_apply, ContinuousLinearMap.map_smul_of_tower]
371+ exact continuous_const_smul c |>.comp <| continuous_dual_apply ..
372+
373+ instance instContinuousSMul {S : Type *} [Semiring S] [Module S F] [SMulCommClass 𝕜₂ S F]
374+ [Module S 𝕜₂] [IsScalarTower S 𝕜₂ F] [IsScalarTower S 𝕜₂ 𝕜₂] [ContinuousConstSMul S F]
375+ [TopologicalSpace S] [ContinuousSMul S 𝕜₂] :
376+ ContinuousSMul S (E →SWOT[σ] F) := .induced <| (inducingFn σ E F).restrictScalars S
363377
364378instance instIsTopologicalAddGroup : IsTopologicalAddGroup (E →SWOT[σ] F) where
365379 toContinuousAdd := .induced (inducingFn σ E F)
@@ -419,11 +433,113 @@ lemma continuous_ofCLM :
419433 ContinuousLinearMapWOT.continuous_of_dual_apply_continuous fun x y ↦
420434 y.cont.comp <| continuous_eval_const x
421435
436+ @ [deprecated (since := "2026-04-10" )] alias ContinuousLinearMap.continuous_toWOT := continuous_ofCLM
437+
422438/-- The inclusion map from `E →[𝕜] F` to `E →WOT[𝕜] F`, bundled as a continuous linear map. -/
423439def _root_.ContinuousLinearMap.WOTofCLM : (E →SL[σ] F) →L[𝕜₂] (E →SWOT[σ] F) where
424440 toLinearMap := linearEquiv 𝕜₂ |>.symm.toLinearMap
425441 cont := continuous_ofCLM
426442
443+ @ [deprecated (since := "2026-04-10" )]
444+ alias ContinuousLinearMap.toWOTCLM := ContinuousLinearMap.WOTofCLM
445+
427446end toWOT_continuous
428447
448+
449+ section Comp
450+
451+ variable {𝕜₁ 𝕜₂ 𝕜₃ 𝕜₄ : Type *} {E F G H : Type *}
452+ [NormedField 𝕜₁] [NormedField 𝕜₂] [NormedField 𝕜₃] [NormedField 𝕜₄]
453+ {σ₁₂ : 𝕜₁ →+* 𝕜₂} {σ₁₃ : 𝕜₁ →+* 𝕜₃} {σ₁₄ : 𝕜₁ →+* 𝕜₄}
454+ {σ₂₃ : 𝕜₂ →+* 𝕜₃} {σ₂₄ : 𝕜₂ →+* 𝕜₄} {σ₃₄ : 𝕜₃ →+* 𝕜₄}
455+ [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] [RingHomCompTriple σ₁₃ σ₃₄ σ₁₄]
456+ [RingHomCompTriple σ₁₂ σ₂₄ σ₁₄] [RingHomCompTriple σ₂₃ σ₃₄ σ₂₄]
457+ [AddCommGroup E] [TopologicalSpace E] [Module 𝕜₁ E]
458+ [AddCommGroup F] [TopologicalSpace F] [Module 𝕜₂ F]
459+ [AddCommGroup G] [TopologicalSpace G] [Module 𝕜₃ G]
460+ [AddCommGroup H] [TopologicalSpace H] [Module 𝕜₄ H]
461+
462+ variable (𝕜₂ F) in
463+ /-- The identity as a continuous linear map on the type synonym equipped with the weak operator
464+ topology -/
465+ protected def id : F →WOT[𝕜₂] F := ofCLM <| .id 𝕜₂ F
466+
467+ @[simp]
468+ lemma toCLM_id : (.id 𝕜₂ F : F →WOT[𝕜₂] F).toCLM = .id 𝕜₂ F := rfl
469+
470+ /-- Composition of continuous linear maps on the type synonym equipped with the weak operator
471+ topology. -/
472+ def comp (g : F →SWOT[σ₂₃] G) (f : E →SWOT[σ₁₂] F) : E →SWOT[σ₁₃] G :=
473+ ofCLM <| g.toCLM.comp f.toCLM
474+
475+ @[simp]
476+ lemma comp_apply (g : F →SWOT[σ₂₃] G) (f : E →SWOT[σ₁₂] F) (x : E) :
477+ g.comp f x = g (f x) := by
478+ simp [comp]
479+
480+ @[simp] lemma toCLM_comp (g : F →SWOT[σ₂₃] G) (f : E →SWOT[σ₁₂] F) :
481+ (g.comp f).toCLM = g.toCLM.comp f.toCLM :=
482+ rfl
483+
484+ @[simp] lemma comp_id (f : E →SWOT[σ₁₂] F) : comp (.id 𝕜₂ F) f = f := by simp [comp]
485+ @[simp] lemma id_comp (g : F →SWOT[σ₂₃] G) : comp g (.id 𝕜₂ F) = g := by simp [comp]
486+
487+ lemma comp_assoc (g₃₄ : G →SWOT[σ₃₄] H) (g₂₃ : F →SWOT[σ₂₃] G) (g₁₂ : E →SWOT[σ₁₂] F) :
488+ (g₃₄.comp g₂₃).comp g₁₂ = g₃₄.comp (g₂₃.comp g₁₂) := by
489+ simp only [comp, ContinuousLinearMap.comp_assoc]
490+
491+ lemma mul_eq_comp [IsTopologicalAddGroup F] (f g : F →WOT[𝕜₂] F) : f * g = f.comp g := rfl
492+
493+ @[fun_prop]
494+ lemma continuous_precomp [IsTopologicalAddGroup G] [ContinuousConstSMul 𝕜₃ G] (f : E →SWOT[σ₁₂] F) :
495+ Continuous (fun g : F →SWOT[σ₂₃] G ↦ g.comp f) :=
496+ continuous_of_dual_apply_continuous fun _ _ ↦ continuous_dual_apply ..
497+
498+ variable [IsTopologicalAddGroup F] [ContinuousConstSMul 𝕜₂ F]
499+ variable [IsTopologicalAddGroup G] [ContinuousConstSMul 𝕜₃ G]
500+
501+ /-- While `RingHomSurjective σ₂₃` is not a strict requirement, there are obstructions to
502+ this without any assumption on `σ₂₃` (in particular, on the dimension of the extension of `𝕜₃` over
503+ `σ₂₃(𝕜₂)`), and in the only common case, which is when `σ₂₃` is conjugation, this type class is
504+ guaranteed. Likewise, it would suffice if `RingHomIsometric` were replaced with the weaker
505+ `Continuous σ₂₃`, but we opt for this because we have these type classes available. -/
506+ @[fun_prop]
507+ lemma continuous_postcomp [RingHomSurjective σ₂₃] [RingHomIsometric σ₂₃] (g : F →SWOT[σ₂₃] G) :
508+ Continuous (fun f : E →SWOT[σ₁₂] F ↦ g.comp f) := by
509+ refine continuous_of_dual_apply_continuous fun x z ↦ ?_
510+ have σ_bij : Function.Bijective σ₂₃ := ⟨σ₂₃.injective, RingHomSurjective.is_surjective⟩
511+ let σ_equiv : 𝕜₂ ≃+* 𝕜₃ := RingEquiv.ofBijective σ₂₃ σ_bij
512+ let invPair : RingHomInvPair σ₂₃ σ_equiv.symm := RingHomInvPair.of_ringEquiv σ_equiv
513+ let invPair_symm := invPair.symm
514+ let σ_li : 𝕜₂ ≃ₛₗᵢ[σ₂₃] 𝕜₃ :=
515+ { toLinearEquiv := .ofBijective σ₂₃.toSemilinearMap σ_bij
516+ norm_map' _ := RingHomIsometric.norm_map }
517+ conv => enter [1 , a]; rw [← σ_li.apply_symm_apply (z _), comp_apply, ← toCLM_apply]
518+ apply σ_li.continuous.comp
519+ exact continuous_dual_apply x <| σ_li.symm.toLinearIsometry.toContinuousLinearMap.comp <|
520+ z.comp g.toCLM
521+
522+ /-- Precomposition by a fixed continuous linear map, as a continuous linear map when all spaces
523+ of continuous linear maps are equipped with the weak operator topology. -/
524+ @[simps]
525+ def precompCLM (f : E →SWOT[σ₁₂] F) : (F →SWOT[σ₂₃] G) →L[𝕜₃] (E →SWOT[σ₁₃] G) where
526+ toFun g := g.comp f
527+ map_add' := by simp [comp]
528+ map_smul' := by simp [comp]
529+
530+ /-- Precomposition by a fixed continuous linear map, as a continuous linear map when all spaces
531+ of continuous linear maps are equipped with the weak operator topology. -/
532+ @[simps]
533+ def postcompCLM [RingHomSurjective σ₂₃] [RingHomIsometric σ₂₃] (g : F →SWOT[σ₂₃] G) :
534+ (E →SWOT[σ₁₂] F) →SL[σ₂₃] (E →SWOT[σ₁₃] G) where
535+ toFun f := g.comp f
536+ map_add' := by simp [comp]
537+ map_smul' := by simp [comp]
538+
539+ instance : IsSemitopologicalRing (F →WOT[𝕜₂] F) where
540+ continuous_const_mul {_} := by simp_rw [mul_eq_comp]; fun_prop
541+ continuous_mul_const {_} := by simp_rw [mul_eq_comp]; fun_prop
542+
543+ end Comp
544+
429545end ContinuousLinearMapWOT
0 commit comments