|
| 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 1 → 4 := IsFredholm.nonempty_fredholmPackage |
| 343 | + tfae_have 4 → 2 := by |
| 344 | + rintro ⟨dec⟩ |
| 345 | + exact ⟨dec.quasiInverse, dec.isQuasiInverse⟩ |
| 346 | + tfae_have 2 → 3 := by |
| 347 | + rintro ⟨v, huv⟩ |
| 348 | + exact exists_restrict_isInvertible_of_isQuasiInverse huv |
| 349 | + tfae_have 3 → 1 := 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