11/-
22Copyright (c) 2026 Anatole Dedecker. All rights reserved.
33Released under Apache 2.0 license as described in the file LICENSE.
4- Authors: Anatole Dedecker
4+ Authors: Anatole Dedecker, Sharvil Kesarwani
55-/
66module
77
@@ -29,14 +29,20 @@ change to something less misleading.
2929 to the definition given above.
3030* `Submodule.ClosedComplemented`: we say that a submodule is (topologically) *complemented* if
3131 there exists a continuous projection `M →ₗ[R] p`.
32- * `Submodule.IsTopCompl.projectionOnto `: if `h : IsTopCompl p q`, `h.projectionOnto ` is the
32+ * `Submodule.projectionOntoL `: if `h : IsTopCompl p q`, `p.projectionOntoL q h ` is the
3333 continuous linear projection `M →L[R] p` along `q`. This is the continuous version of
34- `Submodule.linearProjOfIsCompl `.
35- * `Submodule.IsTopCompl.projection `: if `h : IsTopCompl p q`, `h.projection ` is the continuous
34+ `Submodule.projectionOnto `.
35+ * `Submodule.projectionL `: if `h : IsTopCompl p q`, `p.projectionL q h ` is the continuous
3636 linear projection `M →L[R] M` onto `p` along `q`. This is the continuous version of
3737 `Submodule.IsCompl.projection`.
3838* `Submodule.ClosedComplemented.complement`: an arbitrary topological complement of a topologically
3939 complemented submodule.
40+ * `Submodule.prodEquivOfIsTopCompl`: the bundled continuous linear equivalence `p × q ≃L[R] M`
41+ arising from a topological complement pair.
42+ * `Submodule.quotientEquivOfIsTopCompl`: the bundled continuous linear equivalence `M ⧸ p ≃L[R] q`
43+ arising from a topological complement pair.
44+ * `ContinuousLinearMap.ofIsTopCompl`: the continuous linear map induced by maps on a topological
45+ complement pair.
4046
4147 ## Main statements
4248
@@ -55,18 +61,6 @@ Because the condition is symmetric, a lot of lemmas could have a left and a righ
5561In general we only include the left version, the right one being accessible through
5662`Submodule.IsTopCompl.symm`.
5763
58- ## TODO
59-
60- There is still a significant part of the algebraic API which should be ported to the
61- topological setting. Notably, we should:
62- * show that `Submodule.prodEquivOfIsCompl` is a homeomorphism if and only if
63- the two subspaces are topological complements, and bundle it as a `ContinuousLinearEquiv` when
64- this is the case. (See the existing `ClosedComplemented.exists_submodule_equiv_prod`).
65- * show that `Submodule.quotientEquivOfIsCompl` is a homeomorphism if and only if
66- the two subspaces are topological complements, and bundle it as a `ContinuousLinearEquiv` when
67- this is the case.
68- * define `ContinuousLinearMap.ofIsTopCompl`, analogous to `LinearMap.ofIsCompl`.
69-
7064-/
7165
7266@[expose] public section
@@ -121,6 +115,9 @@ protected theorem IsTopCompl.symm [ContinuousSub M] (h : IsTopCompl p q) : IsTop
121115 rw [projection_eq_id_sub_projection h.isCompl]
122116 exact continuous_id.sub h.continuous_projection
123117
118+ theorem isTopCompl_comm [ContinuousSub M] : IsTopCompl p q ↔ IsTopCompl q p :=
119+ ⟨IsTopCompl.symm, IsTopCompl.symm⟩
120+
124121open LinearMap in
125122theorem _root_.ContinuousLinearMap.IsIdempotentElem.isTopCompl {f : M →L[R] M}
126123 (hf : IsIdempotentElem f) : IsTopCompl f.range f.ker where
@@ -399,4 +396,145 @@ lemma ClosedComplemented.exists_submodule_equiv_prod [IsTopologicalAddGroup M]
399396
400397end ClosedComplemented
401398
399+ section ContinuousLinearEquiv
400+
401+ variable [IsTopologicalAddGroup M]
402+
403+ /-- Two complementary submodules are topological complements if and only if the linear equivalence
404+ `Submodule.prodEquivOfIsCompl` is continuous in the inverse direction. -/
405+ theorem IsCompl.isTopCompl_iff_continuous_symm_prodEquivOfIsCompl (h : IsCompl p q) :
406+ IsTopCompl p q ↔ Continuous (p.prodEquivOfIsCompl q h).symm :=
407+ ⟨fun hTop ↦ ((p.projectionOntoL q hTop).prod (q.projectionOntoL p hTop.symm)).continuous.congr
408+ fun x ↦ (prodEquivOfIsCompl_symm_apply h x).symm,
409+ fun hCont ↦ ⟨h, continuous_subtype_val.comp <| continuous_fst.comp hCont⟩⟩
410+
411+ /-- The linear equivalence `Submodule.prodEquivOfIsCompl` from a pair of complementary submodules is
412+ always continuous. -/
413+ theorem continuous_prodEquivOfIsCompl (h : IsCompl p q) : Continuous (p.prodEquivOfIsCompl q h) :=
414+ (continuous_subtype_val.comp continuous_fst).add (continuous_subtype_val.comp continuous_snd)
415+
416+ /-- Two complementary submodules are topological complements if and only if the linear equivalence
417+ `Submodule.prodEquivOfIsCompl` is a homeomorphism. -/
418+ theorem IsCompl.isTopCompl_iff_isHomeomorph_prodEquivOfIsCompl (h : IsCompl p q) :
419+ IsTopCompl p q ↔ IsHomeomorph (p.prodEquivOfIsCompl q h) := by
420+ rw [(p.prodEquivOfIsCompl q h).isHomeomorph_iff,
421+ isTopCompl_iff_continuous_symm_prodEquivOfIsCompl, and_iff_right]
422+ exact continuous_prodEquivOfIsCompl h
423+
424+ variable (p q) in
425+ /-- If two submodules are topological complements, then the linear equivalence
426+ `Submodule.prodEquivOfIsCompl` is a homeomorphism, bundled as a continuous linear equivalence. -/
427+ noncomputable def prodEquivOfIsTopCompl (h : IsTopCompl p q) : (p × q) ≃L[R] M :=
428+ { p.prodEquivOfIsCompl q h.isCompl with
429+ continuous_toFun := continuous_prodEquivOfIsCompl h.isCompl
430+ continuous_invFun := h.isCompl.isTopCompl_iff_continuous_symm_prodEquivOfIsCompl.mp h }
431+
432+ @[simp]
433+ theorem toLinearEquiv_prodEquivOfIsTopCompl (h : IsTopCompl p q) :
434+ (prodEquivOfIsTopCompl p q h : (p × q) ≃ₗ[R] M) = p.prodEquivOfIsCompl q h.isCompl :=
435+ rfl
436+
437+ @[simp]
438+ theorem prodEquivOfIsTopCompl_apply (h : IsTopCompl p q) (x : p × q) :
439+ prodEquivOfIsTopCompl p q h x = (x.1 : M) + x.2 :=
440+ rfl
441+
442+ @[simp]
443+ theorem prodEquivOfIsTopCompl_symm_apply (h : IsTopCompl p q) (x : M) :
444+ (prodEquivOfIsTopCompl p q h).symm x =
445+ ((p.projectionOntoL q h x, q.projectionOntoL p h.symm x) : p × q) :=
446+ prodEquivOfIsCompl_symm_apply h.isCompl x
447+
448+ /-- Two complementary submodules are topological complements if and only if the linear equivalence
449+ `Submodule.quotientEquivOfIsCompl` is continuous. -/
450+ theorem IsCompl.isTopCompl_iff_continuous_quotientEquivOfIsCompl (h : IsCompl p q) :
451+ IsTopCompl p q ↔ Continuous (p.quotientEquivOfIsCompl q h) := by
452+ have hproj : ⇑(p.quotientEquivOfIsCompl q h) ∘ ⇑p.mkQ = ⇑(q.projectionOnto p h.symm) := by
453+ funext; simp
454+ rw [p.isQuotientMap_mkQL.continuous_iff, coe_mkQL, hproj, ← h.symm.isTopCompl_iff_projectionOnto,
455+ isTopCompl_comm]
456+
457+ variable (p q) in
458+ /-- If two submodules are topological complements, then the linear equivalence
459+ `Submodule.quotientEquivOfIsCompl` is a homeomorphism, bundled as a continuous linear
460+ equivalence. -/
461+ noncomputable def quotientEquivOfIsTopCompl (h : IsTopCompl p q) : (M ⧸ p) ≃L[R] q :=
462+ { p.quotientEquivOfIsCompl q h.isCompl with
463+ continuous_toFun := h.isCompl.isTopCompl_iff_continuous_quotientEquivOfIsCompl.mp h
464+ continuous_invFun := (p.mkQL.comp q.subtypeL).continuous }
465+
466+ @[simp]
467+ theorem toLinearEquiv_quotientEquivOfIsTopCompl (h : IsTopCompl p q) :
468+ (quotientEquivOfIsTopCompl p q h : (M ⧸ p) ≃ₗ[R] q) = p.quotientEquivOfIsCompl q h.isCompl :=
469+ rfl
470+
471+ @[simp]
472+ theorem quotientEquivOfIsTopCompl_apply (h : IsTopCompl p q) (x : M ⧸ p) :
473+ quotientEquivOfIsTopCompl p q h x = p.quotientEquivOfIsCompl q h.isCompl x :=
474+ rfl
475+
476+ @[simp]
477+ theorem quotientEquivOfIsTopCompl_symm_apply (h : IsTopCompl p q) (y : q) :
478+ (quotientEquivOfIsTopCompl p q h).symm y = p.mkQ y :=
479+ rfl
480+
481+ theorem quotientEquivOfIsTopCompl_apply_mk (h : IsTopCompl p q) (x : M) :
482+ quotientEquivOfIsTopCompl p q h (Quotient.mk x) = q.projectionOnto p h.isCompl.symm x :=
483+ quotientEquivOfIsCompl_apply_mk h.isCompl x
484+
485+ end ContinuousLinearEquiv
486+
402487end Submodule
488+
489+ namespace ContinuousLinearMap
490+
491+ variable {R : Type *} [Ring R] {E F : Type *}
492+ [TopologicalSpace E] [AddCommGroup E] [Module R E] [IsTopologicalAddGroup E]
493+ [TopologicalSpace F] [AddCommGroup F] [Module R F] [ContinuousAdd F]
494+ {p q : Submodule R E}
495+
496+ /-- Given continuous linear maps `φ : p →L[R] F` and `ψ : q →L[R] F` from topological complement
497+ submodules `p` and `q` of `E`, `ContinuousLinearMap.ofIsCompl` is the induced continuous linear map
498+ `E →L[R] F` over the entire module.
499+
500+ This is the continuous version of `LinearMap.ofIsCompl`. -/
501+ noncomputable def ofIsTopCompl (h : IsTopCompl p q) (φ : p →L[R] F) (ψ : q →L[R] F) : E →L[R] F :=
502+ φ.coprod ψ ∘L ↑(prodEquivOfIsTopCompl p q h).symm
503+
504+ theorem ofIsTopCompl_eq_add (h : IsTopCompl p q) (φ : p →L[R] F) (ψ : q →L[R] F) :
505+ ofIsTopCompl h φ ψ = φ ∘L p.projectionOntoL q h + ψ ∘L q.projectionOntoL p h.symm := by
506+ ext; simp [ofIsTopCompl]
507+
508+ @[simp]
509+ theorem toLinearMap_ofIsTopCompl (h : IsTopCompl p q) (φ : p →L[R] F) (ψ : q →L[R] F) :
510+ (ofIsTopCompl h φ ψ : E →ₗ[R] F) = LinearMap.ofIsCompl h.isCompl φ ψ :=
511+ rfl
512+
513+ @[simp]
514+ theorem ofIsTopCompl_apply (h : IsTopCompl p q) (φ : p →L[R] F) (ψ : q →L[R] F) (x : E) :
515+ ofIsTopCompl h φ ψ (x : E) = LinearMap.ofIsCompl h.isCompl φ ψ x :=
516+ rfl
517+
518+ theorem ofIsTopCompl_apply_left (h : IsTopCompl p q) (φ : p →L[R] F) (ψ : q →L[R] F) (x : p) :
519+ ofIsTopCompl h φ ψ (x : E) = φ x := by simp
520+
521+ theorem ofIsTopCompl_apply_right (h : IsTopCompl p q) (φ : p →L[R] F) (ψ : q →L[R] F) (x : q) :
522+ ofIsTopCompl h φ ψ (x : E) = ψ x := by simp
523+
524+ theorem ofIsTopCompl_eq (h : IsTopCompl p q) {φ : p →L[R] F} {ψ : q →L[R] F} {χ : E →L[R] F}
525+ (hφ : ∀ u : p, φ u = χ u) (hψ : ∀ u : q, ψ u = χ u) : ofIsTopCompl h φ ψ = χ := by
526+ ext; simp [LinearMap.ofIsCompl_eq h.isCompl hφ, hψ]
527+
528+ @[simp]
529+ theorem ofIsTopCompl_zero (h : IsTopCompl p q) : (ofIsTopCompl h 0 0 : E →L[R] F) = 0 := by
530+ ext; simp
531+
532+ @[simp]
533+ theorem ofIsTopCompl_add (h : IsTopCompl p q) (φ₁ φ₂ : p →L[R] F) (ψ₁ ψ₂ : q →L[R] F) :
534+ ofIsTopCompl h (φ₁ + φ₂) (ψ₁ + ψ₂) = ofIsTopCompl h φ₁ ψ₁ + ofIsTopCompl h φ₂ ψ₂ := by
535+ ext; simp
536+
537+ theorem range_ofIsTopCompl (h : IsTopCompl p q) (φ : p →L[R] F) (ψ : q →L[R] F) :
538+ LinearMap.range (ofIsTopCompl h φ ψ : E →ₗ[R] F) = φ.range ⊔ ψ.range := by simp
539+
540+ end ContinuousLinearMap
0 commit comments