File: Mathlib/Analysis/Normed/Operator/Banach.lean

full_name: ContinuousLinearMap.NonlinearRightInverse.toFun
code: /-- A (possibly nonlinear) right inverse to a continuous linear map, which doesn't have to be
linear itself but which satisfies a bound `‖inverse x‖ ≤ C * ‖x‖`. A surjective continuous linear
map doesn't always have a continuous linear right inverse, but it always has a nonlinear inverse
in this sense, by Banach's open mapping theorem. -/
structure NonlinearRightInverse where
  toFun : F → E
  nnnorm : ℝ≥0
  bound' : ∀ y, ‖toFun y‖ ≤ nnnorm * ‖y‖
  right_inv' : ∀ y, f (toFun y) = y
goal: F → E

full_name: ContinuousLinearMap.NonlinearRightInverse.nnnorm
code: /-- A (possibly nonlinear) right inverse to a continuous linear map, which doesn't have to be
linear itself but which satisfies a bound `‖inverse x‖ ≤ C * ‖x‖`. A surjective continuous linear
map doesn't always have a continuous linear right inverse, but it always has a nonlinear inverse
in this sense, by Banach's open mapping theorem. -/
structure NonlinearRightInverse where
  toFun : F → E
  nnnorm : ℝ≥0
  bound' : ∀ y, ‖toFun y‖ ≤ nnnorm * ‖y‖
  right_inv' : ∀ y, f (toFun y) = y
goal: ℝ≥0

full_name: ContinuousLinearMap.NonlinearRightInverse.bound'
code: /-- A (possibly nonlinear) right inverse to a continuous linear map, which doesn't have to be
linear itself but which satisfies a bound `‖inverse x‖ ≤ C * ‖x‖`. A surjective continuous linear
map doesn't always have a continuous linear right inverse, but it always has a nonlinear inverse
in this sense, by Banach's open mapping theorem. -/
structure NonlinearRightInverse where
  toFun : F → E
  nnnorm : ℝ≥0
  bound' : ∀ y, ‖toFun y‖ ≤ nnnorm * ‖y‖
  right_inv' : ∀ y, f (toFun y) = y
goal: ‖self.toFun y‖ ≤ ↑self.nnnorm * ‖y‖

full_name: ContinuousLinearMap.NonlinearRightInverse
code: /-- A (possibly nonlinear) right inverse to a continuous linear map, which doesn't have to be
linear itself but which satisfies a bound `‖inverse x‖ ≤ C * ‖x‖`. A surjective continuous linear
map doesn't always have a continuous linear right inverse, but it always has a nonlinear inverse
in this sense, by Banach's open mapping theorem. -/
structure NonlinearRightInverse where
  toFun : F → E
  nnnorm : ℝ≥0
  bound' : ∀ y, ‖toFun y‖ ≤ nnnorm * ‖y‖
  right_inv' : ∀ y, f (toFun y) = y
goal: Type (max u_3 u_4)

full_name: ContinuousLinearMap.NonlinearRightInverse.right_inv'
code: /-- A (possibly nonlinear) right inverse to a continuous linear map, which doesn't have to be
linear itself but which satisfies a bound `‖inverse x‖ ≤ C * ‖x‖`. A surjective continuous linear
map doesn't always have a continuous linear right inverse, but it always has a nonlinear inverse
in this sense, by Banach's open mapping theorem. -/
structure NonlinearRightInverse where
  toFun : F → E
  nnnorm : ℝ≥0
  bound' : ∀ y, ‖toFun y‖ ≤ nnnorm * ‖y‖
  right_inv' : ∀ y, f (toFun y) = y
goal: f (self.toFun y) = y

full_name: ContinuousLinearMap.instCoeFunNonlinearRightInverseForall
code: instance : CoeFun (NonlinearRightInverse f) fun _ => F → E 
goal: CoeFun f.NonlinearRightInverse fun x => F → E

full_name: ContinuousLinearMap.NonlinearRightInverse.right_inv
code: @[simp]
theorem NonlinearRightInverse.right_inv {f : E →SL[σ] F} (fsymm : NonlinearRightInverse f) (y : F) :
    f (fsymm y) = y 
goal: f (fsymm.toFun y) = y

full_name: ContinuousLinearMap.NonlinearRightInverse.bound
code: theorem NonlinearRightInverse.bound {f : E →SL[σ] F} (fsymm : NonlinearRightInverse f) (y : F) :
    ‖fsymm y‖ ≤ fsymm.nnnorm * ‖y‖ 
goal: ‖fsymm.toFun y‖ ≤ ↑fsymm.nnnorm * ‖y‖

full_name: ContinuousLinearEquiv.toNonlinearRightInverse
code: /-- Given a continuous linear equivalence, the inverse is in particular an instance of
`ContinuousLinearMap.NonlinearRightInverse` (which turns out to be linear). -/
noncomputable def ContinuousLinearEquiv.toNonlinearRightInverse (f : E ≃SL[σ] F) :
    ContinuousLinearMap.NonlinearRightInverse (f : E →SL[σ] F) 
goal: (↑f).NonlinearRightInverse

full_name: instInhabitedNonlinearRightInverseToContinuousLinearMap
code: noncomputable instance (f : E ≃SL[σ] F) :
    Inhabited (ContinuousLinearMap.NonlinearRightInverse (f : E →SL[σ] F)) 
goal: Inhabited (↑f).NonlinearRightInverse

full_name: ContinuousLinearMap.exists_approx_preimage_norm_le
code: /-- First step of the proof of the Banach open mapping theorem (using completeness of `F`):
by Baire's theorem, there exists a ball in `E` whose image closure has nonempty interior.
Rescaling everything, it follows that any `y ∈ F` is arbitrarily well approached by
images of elements of norm at most `C * ‖y‖`.
For further use, we will only need such an element whose image
is within distance `‖y‖/2` of `y`, to apply an iterative process. -/
theorem exists_approx_preimage_norm_le (surj : Surjective f) :
    ∃ C ≥ 0, ∀ y, ∃ x, dist (f x) y ≤ 1 / 2 * ‖y‖ ∧ ‖x‖ ≤ C * ‖y‖ 
goal: ∃ C ≥ 0, ∀ (y : F), ∃ x, dist (f x) y ≤ 1 / 2 * ‖y‖ ∧ ‖x‖ ≤ C * ‖y‖

full_name: ContinuousLinearMap.exists_preimage_norm_le
code: /-- The Banach open mapping theorem: if a bounded linear map between Banach spaces is onto, then
any point has a preimage with controlled norm. -/
theorem exists_preimage_norm_le (surj : Surjective f) :
    ∃ C > 0, ∀ y, ∃ x, f x = y ∧ ‖x‖ ≤ C * ‖y‖ 
goal: ∃ C > 0, ∀ (y : F), ∃ x, f x = y ∧ ‖x‖ ≤ C * ‖y‖

full_name: ContinuousLinearMap.isOpenMap
code: /-- The Banach open mapping theorem: a surjective bounded linear map between Banach spaces is
open. -/
protected theorem isOpenMap (surj : Surjective f) : IsOpenMap f 
goal: IsOpenMap ⇑f

full_name: ContinuousLinearMap.quotientMap
code: protected theorem quotientMap (surj : Surjective f) : QuotientMap f 
goal: QuotientMap ⇑f

full_name: AffineMap.isOpenMap
code: theorem _root_.AffineMap.isOpenMap {F : Type*} [NormedAddCommGroup F] [NormedSpace 𝕜 F]
    [CompleteSpace F] {P Q : Type*} [MetricSpace P] [NormedAddTorsor E P] [MetricSpace Q]
    [NormedAddTorsor F Q] (f : P →ᵃ[𝕜] Q) (hf : Continuous f) (surj : Surjective f) :
    IsOpenMap f 
goal: IsOpenMap ⇑f

full_name: ContinuousLinearMap.interior_preimage
code: theorem interior_preimage (hsurj : Surjective f) (s : Set F) :
    interior (f ⁻¹' s) = f ⁻¹' interior s 
goal: interior (⇑f ⁻¹' s) = ⇑f ⁻¹' interior s

full_name: ContinuousLinearMap.closure_preimage
code: theorem closure_preimage (hsurj : Surjective f) (s : Set F) : closure (f ⁻¹' s) = f ⁻¹' closure s 
goal: closure (⇑f ⁻¹' s) = ⇑f ⁻¹' closure s

full_name: ContinuousLinearMap.frontier_preimage
code: theorem frontier_preimage (hsurj : Surjective f) (s : Set F) :
    frontier (f ⁻¹' s) = f ⁻¹' frontier s 
goal: frontier (⇑f ⁻¹' s) = ⇑f ⁻¹' frontier s

full_name: ContinuousLinearMap.exists_nonlinearRightInverse_of_surjective
code: theorem exists_nonlinearRightInverse_of_surjective (f : E →SL[σ] F)
    (hsurj : LinearMap.range f = ⊤) :
    ∃ fsymm : NonlinearRightInverse f, 0 < fsymm.nnnorm 
goal: ∃ fsymm, 0 < fsymm.nnnorm

full_name: ContinuousLinearMap.definition._@.Mathlib.Analysis.Normed.Operator.Banach._hyg.5011
code: /-- A surjective continuous linear map between Banach spaces admits a (possibly nonlinear)
controlled right inverse. In general, it is not possible to ensure that such a right inverse
is linear (take for instance the map from `E` to `E/F` where `F` is a closed subspace of `E`
without a closed complement. Then it doesn't have a continuous linear right inverse.) -/
noncomputable irreducible_def nonlinearRightInverseOfSurjective (f : E →SL[σ] F)
  (hsurj : LinearMap.range f = ⊤) : NonlinearRightInverse f 
goal: f.NonlinearRightInverse

full_name: ContinuousLinearMap.nonlinearRightInverseOfSurjective_def
code: /-- A surjective continuous linear map between Banach spaces admits a (possibly nonlinear)
controlled right inverse. In general, it is not possible to ensure that such a right inverse
is linear (take for instance the map from `E` to `E/F` where `F` is a closed subspace of `E`
without a closed complement. Then it doesn't have a continuous linear right inverse.) -/
noncomputable irreducible_def nonlinearRightInverseOfSurjective (f : E →SL[σ] F)
  (hsurj : LinearMap.range f = ⊤) : NonlinearRightInverse f 
goal: f.nonlinearRightInverseOfSurjective hsurj = Classical.choose ⋯

full_name: ContinuousLinearMap.nonlinearRightInverseOfSurjective
code: /-- A surjective continuous linear map between Banach spaces admits a (possibly nonlinear)
controlled right inverse. In general, it is not possible to ensure that such a right inverse
is linear (take for instance the map from `E` to `E/F` where `F` is a closed subspace of `E`
without a closed complement. Then it doesn't have a continuous linear right inverse.) -/
noncomputable irreducible_def nonlinearRightInverseOfSurjective (f : E →SL[σ] F)
  (hsurj : LinearMap.range f = ⊤) : NonlinearRightInverse f 
goal: f.NonlinearRightInverse

full_name: ContinuousLinearMap.wrapped._@.Mathlib.Analysis.Normed.Operator.Banach._hyg.5011
code: /-- A surjective continuous linear map between Banach spaces admits a (possibly nonlinear)
controlled right inverse. In general, it is not possible to ensure that such a right inverse
is linear (take for instance the map from `E` to `E/F` where `F` is a closed subspace of `E`
without a closed complement. Then it doesn't have a continuous linear right inverse.) -/
noncomputable irreducible_def nonlinearRightInverseOfSurjective (f : E →SL[σ] F)
  (hsurj : LinearMap.range f = ⊤) : NonlinearRightInverse f 
goal: Subtype (Eq @ContinuousLinearMap.definition✝)

full_name: ContinuousLinearMap.nonlinearRightInverseOfSurjective_nnnorm_pos
code: theorem nonlinearRightInverseOfSurjective_nnnorm_pos (f : E →SL[σ] F)
    (hsurj : LinearMap.range f = ⊤) : 0 < (nonlinearRightInverseOfSurjective f hsurj).nnnorm 
goal: 0 < (f.nonlinearRightInverseOfSurjective hsurj).nnnorm

full_name: LinearEquiv.continuous_symm
code: /-- If a bounded linear map is a bijection, then its inverse is also a bounded linear map. -/
@[continuity]
theorem continuous_symm (e : E ≃ₛₗ[σ] F) (h : Continuous e) : Continuous e.symm 
goal: Continuous ⇑e.symm

full_name: LinearEquiv.toContinuousLinearEquivOfContinuous
code: /-- Associating to a linear equivalence between Banach spaces a continuous linear equivalence when
the direct map is continuous, thanks to the Banach open mapping theorem that ensures that the
inverse map is also continuous. -/
def toContinuousLinearEquivOfContinuous (e : E ≃ₛₗ[σ] F) (h : Continuous e) : E ≃SL[σ] F 
goal: E ≃SL[σ] F

full_name: LinearEquiv.coeFn_toContinuousLinearEquivOfContinuous
code: @[simp]
theorem coeFn_toContinuousLinearEquivOfContinuous (e : E ≃ₛₗ[σ] F) (h : Continuous e) :
    ⇑(e.toContinuousLinearEquivOfContinuous h) = e 
goal: ⇑(e.toContinuousLinearEquivOfContinuous h) = ⇑e

full_name: LinearEquiv.coeFn_toContinuousLinearEquivOfContinuous_symm
code: @[simp]
theorem coeFn_toContinuousLinearEquivOfContinuous_symm (e : E ≃ₛₗ[σ] F) (h : Continuous e) :
    ⇑(e.toContinuousLinearEquivOfContinuous h).symm = e.symm 
goal: ⇑(e.toContinuousLinearEquivOfContinuous h).symm = ⇑e.symm

full_name: ContinuousLinearMap.equivRange
code: /-- An injective continuous linear map with a closed range defines a continuous linear equivalence
between its domain and its range. -/
noncomputable def equivRange (f : E →SL[σ] F) (hinj : Injective f) (hclo : IsClosed (range f)) :
    E ≃SL[σ] LinearMap.range f 
goal: E ≃SL[σ] ↥(LinearMap.range f)

full_name: ContinuousLinearMap.coe_linearMap_equivRange
code: @[simp]
theorem coe_linearMap_equivRange (f : E →SL[σ] F) (hinj : Injective f) (hclo : IsClosed (range f)) :
    f.equivRange hinj hclo = f.rangeRestrict 
goal: ↑(f.equivRange hinj hclo) = f.rangeRestrict

full_name: ContinuousLinearMap.coe_equivRange
code: @[simp]
theorem coe_equivRange (f : E →SL[σ] F) (hinj : Injective f) (hclo : IsClosed (range f)) :
    (f.equivRange hinj hclo : E → LinearMap.range f) = f.rangeRestrict 
goal: ⇑(f.equivRange hinj hclo) = ⇑f.rangeRestrict

full_name: ContinuousLinearEquiv.ofBijective
code: /-- Convert a bijective continuous linear map `f : E →SL[σ] F` from a Banach space to a normed space
to a continuous linear equivalence. -/
noncomputable def ofBijective (f : E →SL[σ] F) (hinj : ker f = ⊥) (hsurj : LinearMap.range f = ⊤) :
    E ≃SL[σ] F 
goal: E ≃SL[σ] F

full_name: ContinuousLinearEquiv.coeFn_ofBijective
code: @[simp]
theorem coeFn_ofBijective (f : E →SL[σ] F) (hinj : ker f = ⊥) (hsurj : LinearMap.range f = ⊤) :
    ⇑(ofBijective f hinj hsurj) = f 
goal: ⇑(ContinuousLinearEquiv.ofBijective f hinj hsurj) = ⇑f

full_name: ContinuousLinearEquiv.coe_ofBijective
code: theorem coe_ofBijective (f : E →SL[σ] F) (hinj : ker f = ⊥) (hsurj : LinearMap.range f = ⊤) :
    ↑(ofBijective f hinj hsurj) = f 
goal: ↑(ContinuousLinearEquiv.ofBijective f hinj hsurj) = f

full_name: ContinuousLinearEquiv.ofBijective_symm_apply_apply
code: @[simp]
theorem ofBijective_symm_apply_apply (f : E →SL[σ] F) (hinj : ker f = ⊥)
    (hsurj : LinearMap.range f = ⊤) (x : E) : (ofBijective f hinj hsurj).symm (f x) = x 
goal: (ContinuousLinearEquiv.ofBijective f hinj hsurj).symm (f x) = x

full_name: ContinuousLinearEquiv.ofBijective_apply_symm_apply
code: @[simp]
theorem ofBijective_apply_symm_apply (f : E →SL[σ] F) (hinj : ker f = ⊥)
    (hsurj : LinearMap.range f = ⊤) (y : F) : f ((ofBijective f hinj hsurj).symm y) = y 
goal: f ((ContinuousLinearEquiv.ofBijective f hinj hsurj).symm y) = y

full_name: ContinuousLinearMap.isUnit_iff_bijective
code: lemma _root_.ContinuousLinearMap.isUnit_iff_bijective {f : E →L[𝕜] E} :
    IsUnit f ↔ Bijective f 
goal: IsUnit f ↔ Function.Bijective ⇑f

full_name: ContinuousLinearMap.coprodSubtypeLEquivOfIsCompl
code: /-- Intermediate definition used to show
`ContinuousLinearMap.closed_complemented_range_of_isCompl_of_ker_eq_bot`.

This is `f.coprod G.subtypeL` as a `ContinuousLinearEquiv`. -/
noncomputable def coprodSubtypeLEquivOfIsCompl {F : Type*} [NormedAddCommGroup F] [NormedSpace 𝕜 F]
    [CompleteSpace F] (f : E →L[𝕜] F) {G : Submodule 𝕜 F}
    (h : IsCompl (LinearMap.range f) G) [CompleteSpace G] (hker : ker f = ⊥) : (E × G) ≃L[𝕜] F 
goal: (E × ↥G) ≃L[𝕜] F

full_name: ContinuousLinearMap.range_eq_map_coprodSubtypeLEquivOfIsCompl
code: theorem range_eq_map_coprodSubtypeLEquivOfIsCompl {F : Type*} [NormedAddCommGroup F]
    [NormedSpace 𝕜 F] [CompleteSpace F] (f : E →L[𝕜] F) {G : Submodule 𝕜 F}
    (h : IsCompl (LinearMap.range f) G) [CompleteSpace G] (hker : ker f = ⊥) :
    LinearMap.range f =
      ((⊤ : Submodule 𝕜 E).prod (⊥ : Submodule 𝕜 G)).map
        (f.coprodSubtypeLEquivOfIsCompl h hker : E × G →ₗ[𝕜] F) 
goal: LinearMap.range f = Submodule.map (↑↑(f.coprodSubtypeLEquivOfIsCompl h hker)) (⊤.prod ⊥)

full_name: ContinuousLinearMap.closed_complemented_range_of_isCompl_of_ker_eq_bot
code: theorem closed_complemented_range_of_isCompl_of_ker_eq_bot {F : Type*} [NormedAddCommGroup F]
    [NormedSpace 𝕜 F] [CompleteSpace F] (f : E →L[𝕜] F) (G : Submodule 𝕜 F)
    (h : IsCompl (LinearMap.range f) G) (hG : IsClosed (G : Set F)) (hker : ker f = ⊥) :
    IsClosed (LinearMap.range f : Set F) 
goal: IsClosed ↑(LinearMap.range f)

full_name: LinearMap.continuous_of_isClosed_graph
code: /-- The **closed graph theorem** : a linear map between two Banach spaces whose graph is closed
is continuous. -/
theorem LinearMap.continuous_of_isClosed_graph (hg : IsClosed (g.graph : Set <| E × F)) :
    Continuous g 
goal: Continuous ⇑g

full_name: LinearMap.continuous_of_seq_closed_graph
code: /-- A useful form of the **closed graph theorem** : let `f` be a linear map between two Banach
spaces. To show that `f` is continuous, it suffices to show that for any convergent sequence
`uₙ ⟶ x`, if `f(uₙ) ⟶ y` then `y = f(x)`. -/
theorem LinearMap.continuous_of_seq_closed_graph
    (hg : ∀ (u : ℕ → E) (x y), Tendsto u atTop (𝓝 x) → Tendsto (g ∘ u) atTop (𝓝 y) → y = g x) :
    Continuous g 
goal: Continuous ⇑g

full_name: ContinuousLinearMap.ofIsClosedGraph
code: /-- Upgrade a `LinearMap` to a `ContinuousLinearMap` using the **closed graph theorem**. -/
def ofIsClosedGraph (hg : IsClosed (g.graph : Set <| E × F)) : E →L[𝕜] F 
goal: E →L[𝕜] F

full_name: ContinuousLinearMap.coeFn_ofIsClosedGraph
code: @[simp]
theorem coeFn_ofIsClosedGraph (hg : IsClosed (g.graph : Set <| E × F)) :
    ⇑(ContinuousLinearMap.ofIsClosedGraph hg) = g 
goal: ⇑(ContinuousLinearMap.ofIsClosedGraph hg) = ⇑g

full_name: ContinuousLinearMap.coe_ofIsClosedGraph
code: theorem coe_ofIsClosedGraph (hg : IsClosed (g.graph : Set <| E × F)) :
    ↑(ContinuousLinearMap.ofIsClosedGraph hg) = g 
goal: ↑(ContinuousLinearMap.ofIsClosedGraph hg) = g

full_name: ContinuousLinearMap.ofSeqClosedGraph
code: /-- Upgrade a `LinearMap` to a `ContinuousLinearMap` using a variation on the
**closed graph theorem**. -/
def ofSeqClosedGraph
    (hg : ∀ (u : ℕ → E) (x y), Tendsto u atTop (𝓝 x) → Tendsto (g ∘ u) atTop (𝓝 y) → y = g x) :
    E →L[𝕜] F 
goal: E →L[𝕜] F

full_name: ContinuousLinearMap.coeFn_ofSeqClosedGraph
code: @[simp]
theorem coeFn_ofSeqClosedGraph
    (hg : ∀ (u : ℕ → E) (x y), Tendsto u atTop (𝓝 x) → Tendsto (g ∘ u) atTop (𝓝 y) → y = g x) :
    ⇑(ContinuousLinearMap.ofSeqClosedGraph hg) = g 
goal: ⇑(ContinuousLinearMap.ofSeqClosedGraph hg) = ⇑g

full_name: ContinuousLinearMap.coe_ofSeqClosedGraph
code: theorem coe_ofSeqClosedGraph
    (hg : ∀ (u : ℕ → E) (x y), Tendsto u atTop (𝓝 x) → Tendsto (g ∘ u) atTop (𝓝 y) → y = g x) :
    ↑(ContinuousLinearMap.ofSeqClosedGraph hg) = g 
goal: ↑(ContinuousLinearMap.ofSeqClosedGraph hg) = g

full_name: ContinuousLinearMap.closed_range_of_antilipschitz
code: lemma closed_range_of_antilipschitz {f : E →SL[σ] F} {c : ℝ≥0} (hf : AntilipschitzWith c f) :
    (LinearMap.range f).topologicalClosure = LinearMap.range f 
goal: (LinearMap.range f).topologicalClosure = LinearMap.range f

full_name: ContinuousLinearMap.bijective_iff_dense_range_and_antilipschitz
code: lemma bijective_iff_dense_range_and_antilipschitz (f : E →SL[σ] F) :
    Bijective f ↔ (LinearMap.range f).topologicalClosure = ⊤ ∧ ∃ c, AntilipschitzWith c f 
goal: Function.Bijective ⇑f ↔ (LinearMap.range f).topologicalClosure = ⊤ ∧ ∃ c, AntilipschitzWith c ⇑f

full_name: AntilipschitzWith.completeSpace_range_clm
code: lemma _root_.AntilipschitzWith.completeSpace_range_clm {f : E →SL[σ] F} {c : ℝ≥0}
    (hf : AntilipschitzWith c f) : CompleteSpace (LinearMap.range f) 
goal: CompleteSpace ↥(LinearMap.range f)