Skip to content

Commit 50f0559

Browse files
committed
feat: generalize Submodule.ClosedComplemented.of_quotient_finiteDimensional (leanprover-community#38579)
`Submodule.ClosedComplemented.of_quotient_finiteDimensional` currently says that any finite codimension *closed* subspace of a Banach space is topologically complemented. The current proof uses the Banach open mapping theorem. In fact the result holds for any TVS over a nontrivially normed field, and we have the stronger result that any algebraic complement of a finite codimension closed subspace is in fact a topological complement.
1 parent 090daf0 commit 50f0559

2 files changed

Lines changed: 43 additions & 19 deletions

File tree

Mathlib/Analysis/Normed/Module/Complemented.lean

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -35,19 +35,6 @@ open LinearMap (ker range)
3535

3636
namespace ContinuousLinearMap
3737

38-
section
39-
40-
variable [CompleteSpace 𝕜]
41-
42-
theorem ker_closedComplemented_of_finiteDimensional_range (f : E →L[𝕜] F)
43-
[FiniteDimensional 𝕜 f.range] : f.ker.ClosedComplemented := by
44-
set f' : E →L[𝕜] f.range := f.codRestrict _ (LinearMap.mem_range_self (f : E →ₗ[𝕜] F))
45-
rcases f'.exists_rightInverse_of_surjective (f : E →ₗ[𝕜] F).range_rangeRestrict with ⟨g, hg⟩
46-
simpa only [f', ker_codRestrict]
47-
using f'.closedComplemented_ker_of_rightInverse g (ContinuousLinearMap.ext_iff.1 hg)
48-
49-
end
50-
5138
variable [CompleteSpace E] [CompleteSpace (F × G)]
5239

5340
/-- If `f : E →L[R] F` and `g : E →L[R] G` are two surjective linear maps and
@@ -127,10 +114,4 @@ theorem closedComplemented_iff_isClosed_exists_isClosed_isCompl :
127114
fun h => ⟨h.isClosed, h.exists_isClosed_isCompl⟩,
128115
fun ⟨hp, ⟨_, hq, hpq⟩⟩ => .of_isCompl_isClosed hpq hp hq⟩
129116

130-
theorem ClosedComplemented.of_quotient_finiteDimensional [CompleteSpace 𝕜]
131-
[FiniteDimensional 𝕜 (E ⧸ p)] (hp : IsClosed (p : Set E)) : p.ClosedComplemented := by
132-
obtain ⟨q, hq⟩ : ∃ q, IsCompl p q := p.exists_isCompl
133-
haveI : FiniteDimensional 𝕜 q := (p.quotientEquivOfIsCompl q hq).finiteDimensional
134-
exact .of_isCompl_isClosed hq hp q.closed_of_finiteDimensional
135-
136117
end Submodule

Mathlib/Topology/Algebra/Module/FiniteDimension.lean

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public import Mathlib.RingTheory.LocalRing.Basic
1414
public import Mathlib.Topology.Algebra.Module.Determinant
1515
public import Mathlib.Topology.Algebra.Module.ModuleTopology
1616
public import Mathlib.Topology.Algebra.Module.Simple
17+
public import Mathlib.Topology.Algebra.Module.Complement
1718
public import Mathlib.Topology.Algebra.SeparationQuotient.FiniteDimensional
1819
public import Mathlib.Topology.Maps.Strict.Basic
1920

@@ -704,3 +705,45 @@ theorem HasCompactMulSupport.eq_one_or_finiteDimensional {X : Type*} [Topologica
704705
HasCompactSupport.eq_zero_or_finiteDimensional 𝕜 (X := Additive X) hf h'f
705706

706707
end Riesz
708+
709+
section Compl
710+
711+
open Submodule
712+
713+
/-- If `p` is a closed subspace with finite codimension, then any algebraic complement `q` to `p`
714+
is a topological complement. -/
715+
theorem Submodule.IsCompl.isTopCompl_of_finiteDimensional_quotient {p q : Submodule 𝕜 E}
716+
(h : IsCompl p q) (hp : IsClosed (p : Set E)) [FiniteDimensional 𝕜 (E ⧸ p)] :
717+
IsTopCompl p q := by
718+
let φ : E ⧸ p →L[𝕜] q := (p.quotientEquivOfIsCompl q h).toLinearMap.toContinuousLinearMap
719+
have := (φ ∘L p.mkQL).isTopCompl_of_proj fun x ↦ by simp [φ]
720+
simpa [φ] using this.symm
721+
722+
/-- Assume that `p q : Submodule 𝕜 E` are algebraic complements. If `p` is closed and `q`
723+
has finite dimension, then they are in fact topological complements.
724+
725+
Note that this theorem does not help you to build a closed complement to a finite dimensional
726+
subspace. That requires the Hahn-Banach theorem, and you don't get much control over what the
727+
complement is. See `Submodule.ClosedComplemented.of_finiteDimensional`. -/
728+
theorem Submodule.IsCompl.isTopCompl_of_isClosed_of_finiteDimensional {p q : Submodule 𝕜 E}
729+
(h : IsCompl p q) (hp : IsClosed (p : Set E)) [hq : FiniteDimensional 𝕜 q] :
730+
IsTopCompl p q := by
731+
suffices FiniteDimensional 𝕜 (E ⧸ p) from h.isTopCompl_of_finiteDimensional_quotient hp
732+
exact (p.quotientEquivOfIsCompl q h).symm.finiteDimensional
733+
734+
theorem Submodule.ClosedComplemented.of_finiteDimensional_quotient {p : Submodule 𝕜 E}
735+
(hp : IsClosed (p : Set E)) [hq : FiniteDimensional 𝕜 (E ⧸ p)] : p.ClosedComplemented := by
736+
obtain ⟨q, hq⟩ : ∃ q, IsCompl p q := p.exists_isCompl
737+
exact hq.isTopCompl_of_finiteDimensional_quotient hp |>.closedComplemented
738+
739+
@[deprecated (since := "2026-05-09")]
740+
alias Submodule.ClosedComplemented.of_quotient_finiteDimensional :=
741+
Submodule.ClosedComplemented.of_finiteDimensional_quotient
742+
743+
omit [IsTopologicalAddGroup F] [ContinuousSMul 𝕜 F] in
744+
theorem ContinuousLinearMap.ker_closedComplemented_of_finiteDimensional_range [T2Space F]
745+
(f : E →L[𝕜] F) [FiniteDimensional 𝕜 f.range] : f.ker.ClosedComplemented := by
746+
suffices FiniteDimensional 𝕜 (E ⧸ f.ker) from .of_finiteDimensional_quotient f.isClosed_ker
747+
exact f.toLinearMap.quotKerEquivRange.symm.finiteDimensional
748+
749+
end Compl

0 commit comments

Comments
 (0)