Skip to content

Commit c7202db

Browse files
ADedeckerJonBannonCoolRmalPatrickMassotocfnash
committed
feat: define Fredholm operators between TVSs (leanprover-community#41189)
Project started during the May 2026 workshop "Techniques and Tools for the Formalization of Analysis" at ICERM. Co-authored-by: Jon Bannon <jbannon@siena.edu> Co-authored-by: Yongxi (Aaron) Lin <aaronlin@andrew.cmu.edu> Co-authored-by: Patrick Massot <patrickmassot@free.fr> Co-authored-by: Oliver Nash <github@olivernash.org> Co-authored-by: Filippo A. E. Nuccio <filippo.nuccio@univ-st-etienne.fr> Co-authored-by: Oliver Nash <github@olivernash.org> Co-authored-by: Oliver Nash <7734364+ocfnash@users.noreply.github.com>
1 parent b56bbad commit c7202db

3 files changed

Lines changed: 379 additions & 0 deletions

File tree

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2256,6 +2256,7 @@ public import Mathlib.Analysis.Normed.Operator.Conformal
22562256
public import Mathlib.Analysis.Normed.Operator.ContinuousAlgEquiv
22572257
public import Mathlib.Analysis.Normed.Operator.ContinuousLinearMap
22582258
public import Mathlib.Analysis.Normed.Operator.Extend
2259+
public import Mathlib.Analysis.Normed.Operator.Fredholm.Basic
22592260
public import Mathlib.Analysis.Normed.Operator.FredholmAlternative
22602261
public import Mathlib.Analysis.Normed.Operator.LinearIsometry
22612262
public import Mathlib.Analysis.Normed.Operator.Mul

Mathlib/Algebra/Module/LinearMap/FiniteRange.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,10 @@ lemma IsLeftQuasiInverse.equiv {u : V₃ →ₗ[K] V₂} {v : V₂ →ₗ[K] V
336336
lemma IsRightQuasiInverse.equiv {u : V₃ →ₗ[K] V₂} {v : V₂ →ₗ[K] V₃}
337337
(h : u.IsRightQuasiInverse v) : v ∘ₗ u ≈ .id := h
338338

339+
lemma _root_.LinearEquiv.isQuasiInverse (e : V ≃ₗ[K] V₂) :
340+
e.symm.IsQuasiInverse e := by
341+
simp [IsQuasiInverse, IsLeftQuasiInverse, IsRightQuasiInverse]
342+
339343
@[symm]
340344
lemma IsQuasiInverse.symm {u : V₃ →ₗ[K] V₂} {v : V₂ →ₗ[K] V₃}
341345
(h : u.IsQuasiInverse v) : v.IsQuasiInverse u :=
Lines changed: 374 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,374 @@
1+
/-
2+
Copyright (c) 2026 Anatole Dedecker. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Jon Bannon, Anatole Dedecker, Yongxi Lin, Patrick Massot, Oliver Nash, Filippo A. E. Nuccio
5+
-/
6+
module
7+
8+
public import Mathlib.Analysis.Normed.Operator.Perturbation.StrictByFinite
9+
10+
/-!
11+
# Fredholm operators between topological vector spaces
12+
13+
Fix `𝕜` a complete `NontriviallyNormedField`, and let `E`, `F` be two Hausdorff topological vector
14+
spaces over `𝕜`.
15+
16+
We say that a continuous linear map `T : E →L[𝕜] F` is a **Fredholm operator** if it satisfies
17+
the following four equivalent conditions:
18+
19+
1. `T` is strict, its range is closed and has finite codimension, and its kernel is (topologically)
20+
complemented and has finite dimension. This is chosen as the definition, see `IsFredholm`.
21+
2. `T` admits a continuous **quasi-inverse**, in the sense of `LinearMap.IsQuasiInverse`.
22+
3. There are closed finite-codimension subspaces `E₁` and `F₁` of `E` and `F` between which `T`
23+
induces an isomorphism.
24+
4. `T` admits a `FredholmPackage`: there are topological decompositions `E = E₁ ⊕ E₀`,
25+
`F = F₁ ⊕ F₀`, where `E₀` and `F₀` are finite dimensional, and an isomorphism `Φ : E₁ ≃L[𝕜] F₁`
26+
such that `T` is zero on `E₀` and coincides with `Φ` on `E₁`; in other words, in these
27+
decompositions, `T` is given by the matrix $\begin{pmatrix} Φ & 0 \cr 0 & 0 \end{pmatrix}$.
28+
29+
## Main definitions
30+
31+
* `ContinuousLinearMap.IsFredholm`: a continuous linear map `u : E →L[𝕜] F` is a
32+
**Fredholm operator** if it is strict, its range is closed and has finite codimension, and its
33+
kernel is (topologically) complemented and has finite dimension.
34+
* `FredholmDecomposition`: a **Fredholm decomposition** of a topological vector space `E` is the
35+
data of two subspaces `X₀` and `X₁` which are topological complements, and where `X₀` is finite
36+
dimensional.
37+
* `ContinuousLinearMap.FredholmPackage`: a **Fredholm package** for `u : E →L[𝕜] F` is the data of
38+
Fredholm decompositions `decDom` and `decCodom` of `E` and `F` respectively, together with
39+
a continuous linear equivalence `equiv : decDom.X₁ ≃L[𝕜] decCodom.X₁` between the "essential"
40+
(i.e. finite codimension) parts of these decompositions, such that `u` equals the composition
41+
`decCodom.X₁.subtypeL ∘L equiv ∘L decDom.proj`.
42+
43+
Note that the data of a `FredholmPackage` for an operator is morally the strongest of the
44+
equivalent ways to assume that `u` is Fredholm (for example, it is clear how to build a canonical
45+
continuous quasi-inverse of `u` from such a package).
46+
47+
Hence, you should not typically prove that an operator is Fredholm by building a Fredholm package
48+
(consider using `IsFredholm.of_isInvertible_restrict`); instead, when you know that an operator is
49+
Fredholm, you can obtain a `FredholmPackage` from `IsFredholm.nonempty_fredholmPackage`
50+
in order to conveniently use the full strength of Fredholmness.
51+
52+
## Main statements
53+
54+
### Equivalent criteria
55+
56+
* `ContinuousLinearMap.isFredholm_tfae`: the equivalence between conditions 1, 2, 3 and 4 above.
57+
In practice, most of the interesting directions should be covered by specific API lemmas.
58+
* `ContinuousLinearMap.FredholmPackage.isQuasiInverse`: given a `FredholmPackage` for `u`,
59+
one can build a canonical continuous quasi-inverse of `u`.
60+
* `ContinuousLinearMap.IsFredholm.of_isInvertible_restrict`: if a continuous linear map induces
61+
an isomorphism between finite codimension subspaces, then it is Fredholm.
62+
* `ContinuousLinearMap.IsFredholm.of_restrict` (not in Mathlib yet) is a generalization
63+
of the above: if a continuous linear map induces a Fredholm operator between finite codimension
64+
subspaces, then the original map is Fredholm as well.
65+
* `IsFredholm.nonempty_fredholmPackage`: every Fredholm operator admits a Fredholm package.
66+
This is the primary way to obtain Fredholm packages.
67+
68+
## Implementation details
69+
70+
We largely follow [N. Bourbaki, *Théories Spectrales*, Chapitre III, § 3, n° 2][bourbaki2023],
71+
in particular for the proof of equivalence of the four conditions above.
72+
Here are some notable changes:
73+
74+
* Bourbaki restricts itself to locally convex spaces over `ℝ` or `ℂ`. Yet, under close inspection,
75+
this assumption plays very little role in the beginning of the theory. In fact, at the very mild
76+
cost of assuming that the kernel is complemented in the definition of `IsFredholm` (which follows
77+
from the finiteness assumption if Hahn-Banach is available), we generalize the beginning of the
78+
theory to topological vector spaces over any complete nontrivially normed field. In particular,
79+
our theory naturally captures p-adic Fredholm operators.
80+
* Bourbaki chooses the existence of a continuous quasi-inverse as the definition of being Fredholm.
81+
Our choice differs for a very practical reason: it is much simpler to spell out formally
82+
"`u` has a continuous quasi-inverse" than "`u` is strict, its range is closed and has finite
83+
codimension, and its kernel is complemented and has finite dimension". Hence we prefer to give
84+
a name to the latter.
85+
86+
## References
87+
88+
* [N. Bourbaki, *Théories Spectrales*, Chapitre III, § 3, n° 2][bourbaki2023]
89+
-/
90+
91+
@[expose] public noncomputable section
92+
93+
open Topology Submodule LinearMap
94+
open Set (MapsTo)
95+
open LinearMap.FiniteRangeSetoid
96+
97+
namespace ContinuousLinearMap
98+
section TVS
99+
100+
variable {𝕜 E F : Type*} [NontriviallyNormedField 𝕜] [AddCommGroup E] [AddCommGroup F]
101+
[Module 𝕜 E] [Module 𝕜 F] [TopologicalSpace E] [TopologicalSpace F]
102+
103+
/-!
104+
## Definition and equivalent conditions
105+
-/
106+
107+
section DefTFAE
108+
109+
section IsFredholm
110+
111+
/-- A continuous linear map `u : E →L[𝕜] F` is a **Fredholm operator** if it is strict,
112+
its range is closed and has finite codimension, and its kernel is (topologically) complemented and
113+
has finite dimension.
114+
115+
See also `isFredholm_tfae` for other equivalent characterizations.
116+
We will also prove later (not in Mathlib yet) that for maps between Banach (or even Fréchet)
117+
spaces over `ℝ` or `ℂ`, all the conditions follow from the kernel and cokernel having finite
118+
dimension. -/
119+
structure IsFredholm (u : E →L[𝕜] F) : Prop where
120+
isStrictMap : IsStrictMap u
121+
isClosed_range : IsClosed (u.range : Set F)
122+
finite_ker : FiniteDimensional 𝕜 u.ker
123+
finite_coker : u.range.CoFG
124+
closedComplemented_ker : u.ker.ClosedComplemented
125+
126+
variable [CompleteSpace 𝕜] [IsTopologicalAddGroup F] [ContinuousSMul 𝕜 F] in
127+
/-- A Fredholm operator has (topologically) complemented range. -/
128+
lemma IsFredholm.closedComplemented_range {u : E →L[𝕜] F} (u_fred : IsFredholm u) :
129+
u.range.ClosedComplemented :=
130+
have := u_fred.finite_coker
131+
ClosedComplemented.of_finiteDimensional_quotient u_fred.isClosed_range
132+
133+
end IsFredholm
134+
135+
section FredholmPackage
136+
137+
variable (𝕜 E) in
138+
/-- A **Fredholm decomposition** of a topological vector space `E` is the data of two subspaces
139+
`X₀` and `X₁` which are topological complements, and where `X₀` is finite dimensional.
140+
141+
Note that we purposefully use the index `₀` for the "inessential" (i.e. finite dimensional)
142+
part of the decomposition. -/
143+
structure _root_.FredholmDecomposition where
144+
/-- The inessential (i.e. finite dimensional) part of a Fredholm decomposition. -/
145+
X₀ : Submodule 𝕜 E
146+
/-- The essential (i.e. finite codimensional) part of a Fredholm decomposition. -/
147+
X₁ : Submodule 𝕜 E
148+
isTopCompl : IsTopCompl X₁ X₀
149+
finite_X₀ : FiniteDimensional 𝕜 X₀
150+
151+
/-- Given a Fredholm decomposition `dec` of the space `E`, `dec.proj` is the (continuous linear)
152+
projection onto the "essential part" `dec.X₁` along the "inessential part" `dec.X₀`.
153+
This is a Fredholm operator. -/
154+
abbrev _root_.FredholmDecomposition.proj (dec : FredholmDecomposition 𝕜 E) :
155+
E →L[𝕜] dec.X₁ := dec.X₁.projectionOntoL dec.X₀ dec.isTopCompl
156+
157+
/-- Let `u : E →L[𝕜] F` be a continuous linear map. A **Fredholm package** for `u` is the data of
158+
Fredholm decompositions `decDom` and `decCodom` of `E` and `F` respectively, together with
159+
a continuous linear equivalence `equiv : decDom.X₁ ≃L[𝕜] decCodom.X₁` between the "essential"
160+
(i.e. finite codimension) parts of these decompositions, such that `u` equals the composition
161+
`decCodom.X₁.subtypeL ∘L equiv ∘L decDom.proj`. In other words, in these
162+
"essential ⊕ inessential" decompositions, the matrix of `u` is
163+
$\begin{pmatrix} \texttt{equiv} & 0 \cr 0 & 0 \end{pmatrix}$.
164+
165+
We will show in `isFredholm_tfae` that an operator is Fredholm if and only if it admits
166+
a Fredholm package. In practice, the condition that `u` is Fredholm (`IsFredholm`) is always easier
167+
to prove, so if you need a Fredholm package you should probably get it from
168+
`IsFredholm.nonempty_fredholmPackage` or `IsFredholm.fredholmPackage`. -/
169+
structure FredholmPackage (u : E →L[𝕜] F) where
170+
/-- A `FredholmDecomposition` of the domain. -/
171+
decDom : FredholmDecomposition 𝕜 E
172+
/-- A `FredholmDecomposition` of the codomain. -/
173+
decCodom : FredholmDecomposition 𝕜 F
174+
/-- An isomorphism between the essential parts of `decDom` and `decCodom`. -/
175+
equiv : decDom.X₁ ≃L[𝕜] decCodom.X₁
176+
eq_equiv : u = decCodom.X₁.subtypeL ∘L equiv ∘L decDom.proj
177+
178+
lemma FredholmPackage.ker_eq {u : E →L[𝕜] F} (pkg : FredholmPackage u) :
179+
u.ker = pkg.decDom.X₀ := by simp [pkg.eq_equiv, ker_comp]
180+
181+
lemma FredholmPackage.range_eq {u : E →L[𝕜] F} (pkg : FredholmPackage u) :
182+
u.range = pkg.decCodom.X₁ := by
183+
simp [pkg.eq_equiv, range_comp]
184+
185+
lemma FredholmPackage.mapsTo {u : E →L[𝕜] F} (pkg : FredholmPackage u) :
186+
MapsTo u pkg.decDom.X₁ pkg.decCodom.X₁ := by
187+
simpa [← FredholmPackage.range_eq, LinearMap.coe_range] using Set.mapsTo_range _ _
188+
189+
lemma FredholmPackage.equiv_eq_restrict {u : E →L[𝕜] F} (pkg : FredholmPackage u) :
190+
pkg.equiv = u.restrict pkg.mapsTo := by
191+
ext x
192+
simp [pkg.eq_equiv]
193+
194+
lemma FredholmPackage.isInvertible_restrict {u : E →L[𝕜] F} (pkg : FredholmPackage u) :
195+
u.restrict pkg.mapsTo |>.IsInvertible :=
196+
⟨pkg.equiv, pkg.equiv_eq_restrict⟩
197+
198+
/-- The data of a Fredholm package for `u` determines a canonical quasi-inverse of `u`. -/
199+
def FredholmPackage.quasiInverse {u : E →L[𝕜] F} (pkg : FredholmPackage u) :
200+
F →L[𝕜] E :=
201+
pkg.decDom.X₁.subtypeL ∘L pkg.equiv.symm ∘L pkg.decCodom.proj
202+
203+
/-- The data of a Fredholm package for `u` determines a canonical quasi-inverse of `u`. -/
204+
lemma FredholmPackage.isQuasiInverse {u : E →L[𝕜] F} (pkg : FredholmPackage u) :
205+
pkg.quasiInverse.IsQuasiInverse u := by
206+
nth_rw 2 [pkg.eq_equiv]
207+
have hdom : IsQuasiInverse pkg.decDom.X₁.subtype pkg.decDom.proj :=
208+
have := pkg.decDom.finite_X₀
209+
isQuasiInverse_subtype_projectionOnto _
210+
have hcodom : IsQuasiInverse pkg.decCodom.X₁.subtype pkg.decCodom.proj :=
211+
have := pkg.decCodom.finite_X₀
212+
isQuasiInverse_subtype_projectionOnto _
213+
-- For some reason `exact` and `refine` are slow here!
214+
apply hdom.comp (pkg.equiv.isQuasiInverse.comp hcodom.symm)
215+
216+
end FredholmPackage
217+
218+
variable [T2Space E] [T2Space F] in
219+
/-- Assume that `u : E →L[𝕜] F` has a continuous quasi-inverse. Then there are closed
220+
subspaces of finite codimensions `E₁` and `F₁` between which `u` induces an isomorphism.
221+
222+
This statement is private because it is superseded by later results: using `isFredholm_tfae`,
223+
you can build a `FredholmPackage` for `u`, and then apply `FredholmPackage.isInvertible_restrict`.
224+
-/
225+
private theorem exists_restrict_isInvertible_of_isQuasiInverse {u : E →L[𝕜] F}
226+
{v : F →L[𝕜] E} (hvu : v.IsQuasiInverse u) :
227+
∃ (E₁ : Submodule 𝕜 E) (F₁ : Submodule 𝕜 F),
228+
IsClosed (E₁ : Set E) ∧ IsClosed (F₁ : Set F) ∧
229+
E₁.CoFG ∧ F₁.CoFG ∧
230+
∃ h : MapsTo u E₁ F₁, (u.restrict h).IsInvertible := by
231+
obtain ⟨hvu, huv⟩ := hvu
232+
rw [IsRightQuasiInverse, Setoid.comm, equiv_iff_eqLocus_coFG] at huv
233+
rw [IsLeftQuasiInverse, Setoid.comm, equiv_iff_eqLocus_coFG] at hvu
234+
set E₁ := (ContinuousLinearMap.id 𝕜 E).eqLocus (v ∘L u)
235+
set F₁ := (ContinuousLinearMap.id 𝕜 F).eqLocus (u ∘L v)
236+
have u_mapsto : MapsTo u E₁ F₁ := fun x hx ↦ congr(u $hx)
237+
have v_mapsto : MapsTo v F₁ E₁ := fun x hx ↦ congr(v $hx)
238+
refine ⟨E₁, F₁, isClosed_eqLocus _ _, isClosed_eqLocus _ _, hvu, huv, u_mapsto, ?_⟩
239+
refine .of_inverse (g := v.restrict v_mapsto) ?_ ?_
240+
· ext ⟨x, hx : x = u (v x)⟩
241+
simp [coe_restrict_apply u_mapsto, coe_restrict_apply v_mapsto, ← hx]
242+
· ext ⟨x, hx : x = v (u x)⟩
243+
simp [coe_restrict_apply u_mapsto, coe_restrict_apply v_mapsto, ← hx]
244+
245+
variable [CompleteSpace 𝕜]
246+
[IsTopologicalAddGroup E] [ContinuousSMul 𝕜 E]
247+
[IsTopologicalAddGroup F] [ContinuousSMul 𝕜 F]
248+
249+
/-- Assume that `u : E →L[𝕜] F` restricts to an isomorphism between closed finite codimension
250+
subspaces `E₁` and `F₁`. Then `u` is Fredholm.
251+
252+
In fact it is enough to assume that the restriction `E₁ →L[𝕜] F₁` is Fredholm, see
253+
`IsFredholm.of_restrict` (not in Mathlib yet). -/
254+
theorem IsFredholm.of_isInvertible_restrict {u : E →L[𝕜] F}
255+
{E₁ : Submodule 𝕜 E} (E₁_closed : IsClosed (E₁ : Set E)) [E₁_coFG : E₁.CoFG]
256+
{F₁ : Submodule 𝕜 F} (F₁_closed : IsClosed (F₁ : Set F)) [F₁_coFG : F₁.CoFG]
257+
(h_mapsto : MapsTo u E₁ F₁) (h_inv : (u.restrict h_mapsto).IsInvertible) :
258+
IsFredholm u := by
259+
obtain ⟨e, he⟩ := h_inv
260+
have eqL : u.domRestrict E₁ = F₁.subtypeL ∘L e := congr(F₁.subtypeL ∘L $he).symm
261+
have eqₗ : u.toLinearMap.domRestrict E₁ = F₁.subtype ∘ₗ e := congr(($eqL).toLinearMap)
262+
have h : Topology.IsStrictMap u ∧ IsClosed (u.range : Set F) := by
263+
rw [u.isStrictMap_isClosed_range_iff_restrict E₁ E₁_closed, eqL]
264+
exact ⟨F₁.isEmbedding_subtype.comp e.isHomeomorph.isEmbedding |>.isStrictMap, by simpa⟩
265+
have disj : Disjoint E₁ u.ker := by
266+
rw [disjoint_iff_comap_eq_bot, ← LinearMap.ker_domRestrict, eqₗ,
267+
LinearMap.ker_comp, ker_subtype, comap_bot, LinearEquiv.ker]
268+
refine ⟨h.1, h.2, ?_, ?_, ?_⟩
269+
· rw [← Submodule.fg_iff_finiteDimensional]
270+
exact E₁_coFG.fg_of_disjoint disj.symm
271+
· refine F₁_coFG.of_le (le_trans ?_ (u.range_domRestrict_le_range E₁))
272+
rw [eqₗ, LinearMap.range_comp, LinearEquiv.range, Submodule.map_top, range_subtype]
273+
· exact .of_disjoint_of_finiteDimensional_quotient E₁_closed disj.symm
274+
275+
omit [ContinuousSMul 𝕜 E] in
276+
/-- Let `u : E →L[𝕜] F` be a Fredholm operator. Given `dom₁` (resp. `codom₀`) an arbitrary
277+
topological complement of `u.ker` (resp. `u.range`), we get a `FredholmPackage` for `u`
278+
by considering the decompositions `E = dom₁ ⊕ u.ker`, `F = u.range ⊕ codom₀`, and the isomorphism
279+
`dom₁ ≃L[𝕜] u.range` induced by `u`.
280+
281+
If you need control over the decompositions, this is the primary way to get a `FredholmPackage`.
282+
Otherwise, see `IsFredholm.nonempty_fredholmPackage`. -/
283+
def IsFredholm.fredholmPackage {u : E →L[𝕜] F}
284+
(u_fred : IsFredholm u) {dom₁ : Submodule 𝕜 E} {codom₀ : Submodule 𝕜 F}
285+
(h_dom : IsTopCompl u.ker dom₁) (h_codom : IsTopCompl u.range codom₀) :
286+
FredholmPackage u where
287+
decDom :=
288+
{ X₀ := u.ker
289+
X₁ := dom₁
290+
isTopCompl := h_dom.symm
291+
finite_X₀ := u_fred.finite_ker }
292+
decCodom :=
293+
{ X₀ := codom₀
294+
X₁ := u.range
295+
isTopCompl := h_codom
296+
finite_X₀ := .of_fg <| u_fred.finite_coker.fg_of_isCompl h_codom.isCompl }
297+
equiv :=
298+
letI Φ : dom₁ ≃L[𝕜] E ⧸ u.ker := u.ker.quotientEquivOfIsTopCompl dom₁ h_dom |>.symm
299+
letI Ψ : (E ⧸ u.ker) ≃L[𝕜] u.range := .quotKerEquivRange u_fred.isStrictMap
300+
Φ.trans Ψ
301+
eq_equiv := by
302+
refine LinearMap.ext_on_codisjoint h_dom.isCompl.codisjoint ?_ ?_
303+
· intro x (hx : u x = 0)
304+
simp [hx, projection_apply_of_mem_right]
305+
· intro x (hx : x ∈ dom₁)
306+
simp [hx, projection_apply_of_mem_left, ContinuousLinearEquiv.quotKerEquivRange]
307+
308+
omit [ContinuousSMul 𝕜 E] in
309+
/-- Every Fredholm operator admits a `FredholmPackage`.
310+
311+
This is the primary way to get a `FredholmPackage` if you don't need control of the decompositions.
312+
If you do, see `IsFredholm.fredholmPackage`. -/
313+
theorem IsFredholm.nonempty_fredholmPackage {u : E →L[𝕜] F}
314+
(u_fred : IsFredholm u) : Nonempty (FredholmPackage u) := by
315+
obtain ⟨codom₀, h_codom⟩ := u_fred.closedComplemented_range.exists_isTopCompl
316+
obtain ⟨dom₁, h_dom⟩ := u_fred.closedComplemented_ker.exists_isTopCompl
317+
exact ⟨u_fred.fredholmPackage h_dom h_codom⟩
318+
319+
variable [T2Space E] [T2Space F]
320+
321+
/--
322+
Let `E`, `F` be two Hausdorff topological vector spaces over a complete `NontriviallyNormedField`
323+
denoted `𝕜`, and `u : E →L[𝕜] F` a continuous linear map. The following conditions are equivalent:
324+
325+
1. `u` is a **Fredholm operator**, in the sense of `ContinuousLinearMap.IsFredholm`.
326+
2. `u` admits a continuous **quasi-inverse**, in the sense of `LinearMap.IsQuasiInverse`.
327+
3. There are closed finite-codimension subspaces `E₁` and `F₁` of `E` and `F` between which `u`
328+
induces an isomorphism.
329+
4. `u` admits a `FredholmPackage`.
330+
331+
In practice, condition `4` is the "strongest", so you should probably not use it to *prove* that an
332+
operator is Fredholm.
333+
-/
334+
theorem isFredholm_tfae (u : E →L[𝕜] F) :
335+
[ IsFredholm u,
336+
∃ v : F →L[𝕜] E, v.IsQuasiInverse u,
337+
∃ (E₁ : Submodule 𝕜 E) (F₁ : Submodule 𝕜 F),
338+
IsClosed (E₁ : Set E) ∧ IsClosed (F₁ : Set F) ∧
339+
E₁.CoFG ∧ F₁.CoFG ∧
340+
∃ h : MapsTo u E₁ F₁, (u.restrict h).IsInvertible,
341+
Nonempty (FredholmPackage u) ].TFAE := by
342+
tfae_have 14 := IsFredholm.nonempty_fredholmPackage
343+
tfae_have 42 := by
344+
rintro ⟨dec⟩
345+
exact ⟨dec.quasiInverse, dec.isQuasiInverse⟩
346+
tfae_have 23 := by
347+
rintro ⟨v, huv⟩
348+
exact exists_restrict_isInvertible_of_isQuasiInverse huv
349+
tfae_have 31 := by
350+
rintro ⟨E₁, F₁, E₁_closed, F₁_closed, E₁_coFG, F₁_coFG, u_mapsto, u_invertible⟩
351+
exact .of_isInvertible_restrict E₁_closed F₁_closed u_mapsto u_invertible
352+
tfae_finish
353+
354+
/-- If `u` has a Fredholm package, it is Fredholm. -/
355+
theorem FredholmPackage.isFredholm {u : E →L[𝕜] F} (pkg : FredholmPackage u) :
356+
IsFredholm u :=
357+
isFredholm_tfae u |>.out 3 0 |>.mp (Nonempty.intro pkg)
358+
359+
theorem isFredholm_iff_exists_isQuasiInverse {u : E →L[𝕜] F} :
360+
IsFredholm u ↔ ∃ v : F →L[𝕜] E, v.IsQuasiInverse u :=
361+
isFredholm_tfae u |>.out 0 1
362+
363+
alias ⟨IsFredholm.exists_isQuasiInverse, _⟩ := isFredholm_iff_exists_isQuasiInverse
364+
365+
theorem IsFredholm.of_isQuasiInverse {u : E →L[𝕜] F} {v : F →L[𝕜] E} (h : v.IsQuasiInverse u) :
366+
IsFredholm u :=
367+
isFredholm_iff_exists_isQuasiInverse.mpr ⟨v, h⟩
368+
369+
end DefTFAE
370+
371+
end TVS
372+
end ContinuousLinearMap
373+
374+
end

0 commit comments

Comments
 (0)