Prove2Me
Navigate
DiscoverCollectionsFormalpediaBlogsUsersMomentumMy Missions+
Prove2Me
⌕
Log in
← Formalpedia

Chapter NonnegResolvent

Definition
ChapterNonnegResolvent

by leonardopedro · Oct 25, 2026 · Mathlib 0df444a (Lean v4.33.1)

definitionsformalizationtimepiece

Formal definitions for the timepiece Lean 4 formalization (source chapter BookProof/ChapterNonnegResolvent.lean): generated def bundle for ChapterNonnegResolvent. See BookProof/ChapterNonnegResolvent.lean for full context.

Definition code
import Definitions.Def_ChapterNonnegSquareRoot
import Definitions.Def_ChapterClosureUniqueness
import Definitions.Def_ChapterPositiveSquareRootUnique
import Mathlib


/-!
# The resolvent family and the Yosida approximation of a non-negative self-adjoint relation

`BookProof.ChapterNonnegSquareRoot` produced, for a non-negative self-adjoint linear
relation `T` on a complex Hilbert space `F` and every `a > 0`, the everywhere-defined
bounded operator `R a = invCLMAt hT ha = (T + a)⁻¹` solving `a x + T x = h`, with
`‖R a h‖ ≤ ‖h‖ / a`.  This chapter develops that family into the standard resolvent
calculus and the Yosida approximation.

* **The first resolvent identity** `R a − R b = (b − a) R a R b` (`invCLMAt_sub`),
  and the commutation `R a R b = R b R a` (`invCLMAt_comm`).
* **Positivity.**  Each `R a` is self-adjoint (`isSelfAdjoint_invCLMAt`) and non-negative
  (`invCLMAt_nonneg`), and `a R a` is a positive contraction (`norm_smul_invCLMAt_le`,
  `smul_invCLMAt_le_one`).
* **`a R a → 1` strongly.**  On the domain, `a R a h − h = − R a k` for `(h, k) ∈ T`
  (`smul_invCLMAt_sub_of_mem`), so `‖a R a h − h‖ ≤ ‖k‖ / a`.  The domain of a
  single-valued non-negative self-adjoint relation is dense (`dense_domain`), whence
  `a R a h → h` for *every* `h` (`tendsto_smul_invCLMAt`, and the sequential form
  `tendsto_smul_resAt`).
* **The Yosida approximation** `T_a = a (1 − a R a) = a − a² R a` (`yosidaCLM`) is a
  bounded, self-adjoint, non-negative operator with `(a R a h, T_a h) ∈ T`
  (`yosidaCLM_mem`); on the domain `T_a h = a R a k` for `(h, k) ∈ T`
  (`yosidaCLM_of_mem`), so `‖T_a h‖ ≤ ‖k‖` (`norm_yosidaCLM_le_of_mem`) and
  `T_a h → k` (`tendsto_yosidaCLM`, `tendsto_yosidaAt`): the bounded operators `T_a`
  approximate `T` pointwise on its domain.  They increase with `a`
  (`yosidaCLM_sub`: `T_b − T_a = (b − a)(1 − a R a)(1 − b R b)`, whence `yosidaCLM_mono`)
  and stay below `T` on its domain (`re_inner_yosidaCLM_le`).

Everything is stated for linear relations, so no single-valuedness is assumed except
where the *strong* convergence statements need a dense domain.
-/

namespace BookProof.NonnegResolvent

open BookProof.ClosureUniqueness BookProof.PositiveSquareRoot BookProof.NonnegSquareRoot
open scoped ComplexOrder

variable {F : Type*} [NormedAddCommGroup F] [InnerProductSpace ℂ F] [CompleteSpace F]
variable {T : Submodule ℂ (F × F)} {a b : ℝ}

/-! ## The resolvent identity -/

/-- **The first resolvent identity**: `(T + a)⁻¹ − (T + b)⁻¹ = (b − a) (T + a)⁻¹ (T + b)⁻¹`. -/
theorem invCLMAt_sub (hT : IsNonnegSelfAdjoint T) (ha : 0 < a) (hb : 0 < b) (h : F) :
    invCLMAt hT ha h - invCLMAt hT hb h
      = ((b : ℂ) - (a : ℂ)) • invCLMAt hT ha (invCLMAt hT hb h) := by
  have hb1 := invCLMAt_mem hT hb h
  set x := invCLMAt hT hb h with hxdef
  have hmem : (x, (h + ((a : ℂ) - (b : ℂ)) • x) - (a : ℂ) • x) ∈ T := by
    have hsimp : (h + ((a : ℂ) - (b : ℂ)) • x) - (a : ℂ) • x = h - (b : ℂ) • x := by
      module
    rw [hsimp]
    exact hb1
  have hxa : invCLMAt hT ha (h + ((a : ℂ) - (b : ℂ)) • x) = x :=
    invCLMAt_eq_of_mem hT ha hmem
  rw [map_add, map_smul] at hxa
  have hrw : invCLMAt hT ha h = x - ((a : ℂ) - (b : ℂ)) • invCLMAt hT ha x :=
    eq_sub_of_add_eq hxa
  rw [hrw]
  module

/-- The resolvents at two positive parameters commute. -/
theorem invCLMAt_comm (hT : IsNonnegSelfAdjoint T) (ha : 0 < a) (hb : 0 < b) (h : F) :
    invCLMAt hT ha (invCLMAt hT hb h) = invCLMAt hT hb (invCLMAt hT ha h) := by
  rcases eq_or_ne a b with rfl | hne
  · rfl
  · have h1 := invCLMAt_sub hT ha hb h
    have h2 := invCLMAt_sub hT hb ha h
    have hc : ((b : ℂ) - (a : ℂ)) ≠ 0 := by
      intro hh
      exact hne (by exact_mod_cast (sub_eq_zero.1 hh).symm)
    have e2 : ((b : ℂ) - (a : ℂ)) • invCLMAt hT hb (invCLMAt hT ha h)
        = invCLMAt hT ha h - invCLMAt hT hb h := by
      rw [show ((b : ℂ) - (a : ℂ)) = -((a : ℂ) - (b : ℂ)) by ring, neg_smul, ← h2]
      abel
    exact smul_right_injective F hc (h1.symm.trans e2.symm)

/-! ## Positivity of the resolvent -/

/-- `⟪(T + a)⁻¹ h, k⟫ = ⟪h, (T + a)⁻¹ k⟫`. -/
theorem inner_invCLMAt_left (hT : IsNonnegSelfAdjoint T) (ha : 0 < a) (h k : F) :
    (inner ℂ (invCLMAt hT ha h) k : ℂ) = inner ℂ h (invCLMAt hT ha k) := by
  have h1 := invCLMAt_mem hT ha h
  have h2 := invCLMAt_mem hT ha k
  set x := invCLMAt hT ha h with hxdef
  set u := invCLMAt hT ha k with hudef
  have hs : (inner ℂ (k - (a : ℂ) • u) x : ℂ) = inner ℂ u (h - (a : ℂ) • x) :=
    symm_inner hT h1 h2
  have e3 : (inner ℂ x (k - (a : ℂ) • u) : ℂ) = inner ℂ (h - (a : ℂ) • x) u := by
    have := congrArg (starRingEnd ℂ) hs
    rwa [inner_conj_symm, inner_conj_symm] at this
  have e1 : (inner ℂ x k : ℂ)
      = inner ℂ x ((a : ℂ) • u) + inner ℂ x (k - (a : ℂ) • u) := by
    rw [← inner_add_right]; congr 1; abel
  have e2 : (inner ℂ h u : ℂ)
      = inner ℂ ((a : ℂ) • x) u + inner ℂ (h - (a : ℂ) • x) u := by
    rw [← inner_add_left]; congr 1; abel
  have e4 : (inner ℂ x ((a : ℂ) • u) : ℂ) = inner ℂ ((a : ℂ) • x) u := by
    rw [inner_smul_right, inner_smul_left, Complex.conj_ofReal]
  rw [e1, e2, e3, e4]

/-- **`(T + a)⁻¹` is self-adjoint.** -/
theorem isSelfAdjoint_invCLMAt (hT : IsNonnegSelfAdjoint T) (ha : 0 < a) :
    IsSelfAdjoint (invCLMAt hT ha) := by
  rw [ContinuousLinearMap.isSelfAdjoint_iff_isSymmetric]
  intro x y
  exact inner_invCLMAt_left hT ha x y

/-- **`(T + a)⁻¹ ≥ 0`.** -/
theorem invCLMAt_nonneg (hT : IsNonnegSelfAdjoint T) (ha : 0 < a) : 0 ≤ invCLMAt hT ha := by
  rw [ContinuousLinearMap.nonneg_iff_isPositive, ContinuousLinearMap.isPositive_iff_complex]
  intro h
  have hmem := invCLMAt_mem hT ha h
  have hre := hT.nonneg _ hmem
  have him := inner_im_eq_zero hT hmem
  simp only at hre him
  set x := invCLMAt hT ha h with hxdef
  have hsplit : (inner ℂ x h : ℂ)
      = inner ℂ x ((a : ℂ) • x) + inner ℂ x (h - (a : ℂ) • x) := by
    rw [← inner_add_right]; congr 1; abel
  have hxx : (inner ℂ x ((a : ℂ) • x) : ℂ) = ((a * ‖x‖ ^ 2 : ℝ) : ℂ) := by
    rw [inner_smul_right, inner_self_eq_norm_sq_to_K]
    push_cast
    rfl
  rw [hsplit, hxx]
  constructor
  · apply Complex.ext
    · simp only [RCLike.re_to_complex, Complex.ofReal_re]
    · simp only [RCLike.re_to_complex, Complex.ofReal_im, Complex.add_im, him, add_zero]
  · simp only [RCLike.re_to_complex, Complex.add_re, Complex.ofReal_re]
    have hsq : (0 : ℝ) ≤ a * ‖x‖ ^ 2 := by positivity
    linarith

/-- **`‖a (T + a)⁻¹ h‖ ≤ ‖h‖`**: `a (T + a)⁻¹` is a contraction. -/
theorem norm_smul_invCLMAt_le (hT : IsNonnegSelfAdjoint T) (ha : 0 < a) (h : F) :
    ‖(a : ℂ) • invCLMAt hT ha h‖ ≤ ‖h‖ := by
  have hb := norm_invCLMAt_le hT ha h
  rw [norm_smul]
  have hnorm : ‖(a : ℂ)‖ = a := by
    simp [abs_of_pos ha]
  rw [hnorm]
  calc a * ‖invCLMAt hT ha h‖ ≤ a * (a⁻¹ * ‖h‖) := by
        exact mul_le_mul_of_nonneg_left hb ha.le
    _ = ‖h‖ := by
        field_simp

/-- **`a (T + a)⁻¹ ≤ 1`.** -/
theorem smul_invCLMAt_le_one (hT : IsNonnegSelfAdjoint T) (ha : 0 < a) :
    (a : ℂ) • invCLMAt hT ha ≤ 1 := by
  rw [← sub_nonneg, ContinuousLinearMap.nonneg_iff_isPositive,
    ContinuousLinearMap.isPositive_iff_complex]
  intro h
  have hmem := invCLMAt_mem hT ha h
  have hre := hT.nonneg _ hmem
  have him := inner_im_eq_zero hT hmem
  simp only at hre him
  set x := invCLMAt hT ha h with hxdef
  have happ : ((1 : F →L[ℂ] F) - (a : ℂ) • invCLMAt hT ha) h = h - (a : ℂ) • x := rfl
  have hs : (inner ℂ (h - (a : ℂ) • x) x : ℂ) = inner ℂ x (h - (a : ℂ) • x) :=
    symm_inner hT hmem hmem
  have hsplit : (inner ℂ (h - (a : ℂ) • x) h : ℂ)
      = inner ℂ (h - (a : ℂ) • x) ((a : ℂ) • x)
        + inner ℂ (h - (a : ℂ) • x) (h - (a : ℂ) • x) := by
    rw [← inner_add_right]; congr 1; abel
  have hsa : (inner ℂ (h - (a : ℂ) • x) ((a : ℂ) • x) : ℂ)
      = (a : ℂ) * inner ℂ x (h - (a : ℂ) • x) := by
    rw [inner_smul_right, hs]
  have hww : (inner ℂ (h - (a : ℂ) • x) (h - (a : ℂ) • x) : ℂ)
      = ((‖h - (a : ℂ) • x‖ ^ 2 : ℝ) : ℂ) := by
    rw [inner_self_eq_norm_sq_to_K]; norm_cast
  rw [happ, hsplit, hsa, hww]
  constructor
  · apply Complex.ext
    · simp only [RCLike.re_to_complex, Complex.ofReal_re]
    · simp only [RCLike.re_to_complex, Complex.ofReal_im, Complex.add_im, Complex.mul_im,
        Complex.ofReal_re, Complex.ofReal_im, him, zero_mul, mul_zero, add_zero]
  · simp only [RCLike.re_to_complex, Complex.add_re, Complex.ofReal_re, Complex.mul_re,
      Complex.ofReal_im, zero_mul, sub_zero]
    have hsq : (0 : ℝ) ≤ ‖h - (a : ℂ) • x‖ ^ 2 := by positivity
    have : (0 : ℝ) ≤ a * (inner ℂ x (h - (a : ℂ) • x) : ℂ).re :=
      mul_nonneg ha.le hre
    linarith

omit [CompleteSpace F] in
/-- A non-negative real multiple of a non-negative operator is non-negative. -/
theorem smul_nonneg_of_nonneg {c : ℝ} (hc : 0 ≤ c) {A : F →L[ℂ] F} (hA : 0 ≤ A) :
    0 ≤ (c : ℂ) • A := by
  rw [ContinuousLinearMap.nonneg_iff_isPositive, ContinuousLinearMap.isPositive_iff_complex] at hA
  rw [ContinuousLinearMap.nonneg_iff_isPositive, ContinuousLinearMap.isPositive_iff_complex]
  intro h
  have happ : ((c : ℂ) • A) h = (c : ℂ) • (A h) := rfl
  rw [happ, inner_smul_left, Complex.conj_ofReal]
  obtain ⟨hc1, hc2⟩ := hA h
  have him : (inner ℂ (A h) h : ℂ).im = 0 := by
    have := congrArg Complex.im hc1
    simpa using this.symm
  constructor
  · apply Complex.ext
    · simp only [RCLike.re_to_complex, Complex.ofReal_re]
    · simp only [RCLike.re_to_complex, Complex.ofReal_im, Complex.mul_im, Complex.ofReal_re,
        Complex.ofReal_im, him, mul_zero, zero_mul, add_zero]
  · simp only [RCLike.re_to_complex, Complex.mul_re, Complex.ofReal_re, Complex.ofReal_im,
      zero_mul, sub_zero]
    exact mul_nonneg hc hc2

/-! ## `a (T + a)⁻¹ → 1` strongly -/

/-- On the domain of `T`, the resolvent is computed explicitly:
`a (T + a)⁻¹ h = h − (T + a)⁻¹ k` for `(h, k) ∈ T`. -/
theorem smul_invCLMAt_sub_of_mem (hT : IsNonnegSelfAdjoint T) (ha : 0 < a) {h k : F}
    (hk : (h, k) ∈ T) :
    (a : ℂ) • invCLMAt hT ha h - h = -invCLMAt hT ha k := by
  have hx : invCLMAt hT ha ((a : ℂ) • h + k) = h := by
    refine invCLMAt_eq_of_mem hT ha ?_
    simpa using hk
  rw [map_add, map_smul] at hx
  have h2 : (a : ℂ) • invCLMAt hT ha h - h + invCLMAt hT ha k = 0 := by
    rw [sub_add_eq_add_sub, hx, sub_self]
  exact add_eq_zero_iff_eq_neg.mp h2

/-- Hence `‖a (T + a)⁻¹ h − h‖ ≤ ‖k‖ / a` on the domain. -/
theorem norm_smul_invCLMAt_sub_le (hT : IsNonnegSelfAdjoint T) (ha : 0 < a) {h k : F}
    (hk : (h, k) ∈ T) :
    ‖(a : ℂ) • invCLMAt hT ha h - h‖ ≤ a⁻¹ * ‖k‖ := by
  rw [smul_invCLMAt_sub_of_mem hT ha hk, norm_neg]
  exact norm_invCLMAt_le hT ha k

/-- **The domain of a single-valued non-negative self-adjoint relation is dense.** -/
theorem dense_domain (hT : IsNonnegSelfAdjoint T)
    (hsv : ∀ w : F, ((0 : F), w) ∈ T → w = 0) :
    Dense (T.map (LinearMap.fst ℂ F F) : Set F) := by
  refine Submodule.dense_iff_topologicalClosure_eq_top.2
    (Submodule.topologicalClosure_eq_top_iff.2 ?_)
  refine Submodule.eq_bot_iff _ |>.2 ?_
  intro z hz
  have hzero : ((0 : F), z) ∈ adjPairs T := by
    intro q hq
    have hq1 : q.1 ∈ T.map (LinearMap.fst ℂ F F) :=
      Submodule.mem_map.2 ⟨q, hq, rfl⟩
    have := (Submodule.mem_orthogonal _ _).1 hz q.1 hq1
    simpa using this.symm
  rw [hT.adj] at hzero
  exact hsv z hzero

/-- **`a (T + a)⁻¹ → 1` strongly** as `a → ∞`, for a single-valued `T`. -/
theorem tendsto_smul_invCLMAt (hT : IsNonnegSelfAdjoint T)
    (hsv : ∀ w : F, ((0 : F), w) ∈ T → w = 0) (h : F) {ε : ℝ} (hε : 0 < ε) :
    ∃ A : ℝ, 0 < A ∧ ∀ (c : ℝ) (hc : 0 < c), A ≤ c →
      ‖(c : ℂ) • invCLMAt hT hc h - h‖ < ε := by
  have hdense := dense_domain hT hsv
  have hmem : h ∈ closure ((T.map (LinearMap.fst ℂ F F) : Set F)) := hdense h
  obtain ⟨u, hu, hdist⟩ := Metric.mem_closure_iff.1 hmem (ε / 3) (by linarith)
  obtain ⟨p, hp, hp1⟩ := Submodule.mem_map.1 hu
  refine ⟨max 1 (4 * ‖p.2‖ / ε), lt_of_lt_of_le one_pos (le_max_left _ _), ?_⟩
  intro c hc hcA
  have hc3 : 4 * ‖p.2‖ / ε ≤ c := le_trans (le_max_right _ _) hcA
  have hpu : (u, p.2) ∈ T := by
    have : p = (u, p.2) := by
      rw [← hp1]
      simp
    rwa [← this]
  have hdec : (c : ℂ) • invCLMAt hT hc h - h
      = (c : ℂ) • invCLMAt hT hc (h - u) + ((c : ℂ) • invCLMAt hT hc u - u) + (u - h) := by
    rw [map_sub, smul_sub]
    abel
  have hb1 : ‖(c : ℂ) • invCLMAt hT hc (h - u)‖ ≤ ‖h - u‖ :=
    norm_smul_invCLMAt_le hT hc (h - u)
  have hb2 : ‖(c : ℂ) • invCLMAt hT hc u - u‖ ≤ c⁻¹ * ‖p.2‖ :=
    norm_smul_invCLMAt_sub_le hT hc hpu
  have hhu : ‖h - u‖ < ε / 3 := by
    rw [← dist_eq_norm]
    exact hdist
  have huh : ‖u - h‖ < ε / 3 := by
    rw [norm_sub_rev]
    exact hhu
  have hb2' : c⁻¹ * ‖p.2‖ < ε / 3 := by
    rcases eq_or_lt_of_le (norm_nonneg p.2) with hz | hz
    · rw [← hz, mul_zero]
      linarith
    · have hcpos : 0 < c := hc
      rw [inv_mul_eq_div, div_lt_iff₀ hcpos]
      have h3 : 4 * ‖p.2‖ ≤ c * ε := by
        rw [div_le_iff₀ hε] at hc3
        linarith
      linarith
  calc ‖(c : ℂ) • invCLMAt hT hc h - h‖
      ≤ ‖(c : ℂ) • invCLMAt hT hc (h - u) + ((c : ℂ) • invCLMAt hT hc u - u)‖ + ‖u - h‖ := by
        rw [hdec]
        exact norm_add_le _ _
    _ ≤ ‖(c : ℂ) • invCLMAt hT hc (h - u)‖ + ‖(c : ℂ) • invCLMAt hT hc u - u‖ + ‖u - h‖ := by
        gcongr
        exact norm_add_le _ _
    _ < ε := by
        linarith [hb1.trans_lt hhu, hb2.trans_lt hb2', huh]

/-! ## The Yosida approximation -/

/-- **The Yosida approximation `T_a = a (1 − a (T + a)⁻¹)`**, a bounded operator. -/
noncomputable def yosidaCLM (hT : IsNonnegSelfAdjoint T) (ha : 0 < a) : F →L[ℂ] F :=
  (a : ℂ) • (1 - (a : ℂ) • invCLMAt hT ha)

theorem yosidaCLM_apply (hT : IsNonnegSelfAdjoint T) (ha : 0 < a) (h : F) :
    yosidaCLM hT ha h = (a : ℂ) • (h - (a : ℂ) • invCLMAt hT ha h) := by
  simp [yosidaCLM]

/-- `(a (T + a)⁻¹ h, T_a h)` is a point of the graph of `T`. -/
theorem yosidaCLM_mem (hT : IsNonnegSelfAdjoint T) (ha : 0 < a) (h : F) :
    ((a : ℂ) • invCLMAt hT ha h, yosidaCLM hT ha h) ∈ T := by
  have hmem := T.smul_mem (a : ℂ) (invCLMAt_mem hT ha h)
  rw [Prod.smul_mk] at hmem
  rw [yosidaCLM_apply]
  exact hmem

/-- On the domain, `T_a h = a (T + a)⁻¹ k` for `(h, k) ∈ T`. -/
theorem yosidaCLM_of_mem (hT : IsNonnegSelfAdjoint T) (ha : 0 < a) {h k : F}
    (hk : (h, k) ∈ T) :
    yosidaCLM hT ha h = (a : ℂ) • invCLMAt hT ha k := by
  have h1 := smul_invCLMAt_sub_of_mem hT ha hk
  have h2 : h - (a : ℂ) • invCLMAt hT ha h = invCLMAt hT ha k := by
    rw [← neg_sub, h1, neg_neg]
  rw [yosidaCLM_apply, h2]

/-- **`‖T_a h‖ ≤ ‖k‖`** for `(h, k) ∈ T`: the Yosida approximation is dominated by `T`. -/
theorem norm_yosidaCLM_le_of_mem (hT : IsNonnegSelfAdjoint T) (ha : 0 < a) {h k : F}
    (hk : (h, k) ∈ T) : ‖yosidaCLM hT ha h‖ ≤ ‖k‖ := by
  rw [yosidaCLM_of_mem hT ha hk]
  exact norm_smul_invCLMAt_le hT ha k

/-- `T_a` is self-adjoint. -/
theorem isSelfAdjoint_yosidaCLM (hT : IsNonnegSelfAdjoint T) (ha : 0 < a) :
    IsSelfAdjoint (yosidaCLM hT ha) := by
  rw [ContinuousLinearMap.isSelfAdjoint_iff_isSymmetric]
  intro x y
  change (inner ℂ (yosidaCLM hT ha x) y : ℂ) = inner ℂ x (yosidaCLM hT ha y)
  simp only [yosidaCLM_apply, inner_smul_left, inner_smul_right, inner_sub_left, inner_sub_right,
    Complex.conj_ofReal]
  rw [inner_invCLMAt_left hT ha x y]

/-- **`T_a ≥ 0`**: the Yosida approximation of a non-negative relation is non-negative. -/
theorem yosidaCLM_nonneg (hT : IsNonnegSelfAdjoint T) (ha : 0 < a) : 0 ≤ yosidaCLM hT ha :=
  smul_nonneg_of_nonneg ha.le (sub_nonneg.2 (smul_invCLMAt_le_one hT ha))

/-- **`T_a ≤ T` on the domain**: `⟪h, T_a h⟫ ≤ ⟪h, k⟫` for `(h, k) ∈ T`. -/
theorem re_inner_yosidaCLM_le (hT : IsNonnegSelfAdjoint T) (ha : 0 < a) {h k : F}
    (hk : (h, k) ∈ T) :
    (inner ℂ h (yosidaCLM hT ha h) : ℂ).re ≤ (inner ℂ h k : ℂ).re := by
  have hsub : h - (a : ℂ) • invCLMAt hT ha h = invCLMAt hT ha k := by
    rw [← neg_sub, smul_invCLMAt_sub_of_mem hT ha hk, neg_neg]
  have hy : (inner ℂ h (yosidaCLM hT ha h) : ℂ) = inner ℂ ((a : ℂ) • invCLMAt hT ha h) k := by
    rw [yosidaCLM_of_mem hT ha hk, inner_smul_right, inner_smul_left, Complex.conj_ofReal,
      inner_invCLMAt_left hT ha h k]
  have hsplit : (inner ℂ h k : ℂ)
      = inner ℂ ((a : ℂ) • invCLMAt hT ha h) k + inner ℂ (invCLMAt hT ha k) k := by
    rw [← inner_add_left, ← hsub]
    congr 1
    abel
  have hpos : 0 ≤ (inner ℂ (invCLMAt hT ha k) k : ℂ).re := by
    have := (ContinuousLinearMap.isPositive_iff_complex _).1
      ((ContinuousLinearMap.nonneg_iff_isPositive _).1 (invCLMAt_nonneg hT ha)) k
    exact this.2
  rw [hy, hsplit, Complex.add_re]
  linarith

/-! ## The Yosida approximation increases with `a` -/

/-- The operator form of the resolvent identity. -/
theorem invCLMAt_sub_eq (hT : IsNonnegSelfAdjoint T) (ha : 0 < a) (hb : 0 < b) :
    invCLMAt hT ha - invCLMAt hT hb = ((b : ℂ) - (a : ℂ)) • (invCLMAt hT ha * invCLMAt hT hb) := by
  ext h
  simpa using invCLMAt_sub hT ha hb h

/-- **`T_b − T_a = (b − a) (1 − a R a)(1 − b R b)`.** -/
theorem yosidaCLM_sub (hT : IsNonnegSelfAdjoint T) (ha : 0 < a) (hb : 0 < b) :
    yosidaCLM hT hb - yosidaCLM hT ha
      = ((b : ℂ) - (a : ℂ)) •
        ((1 - (a : ℂ) • invCLMAt hT ha) * (1 - (b : ℂ) • invCLMAt hT hb)) := by
  ext h
  have hres : invCLMAt hT ha h - invCLMAt hT hb h
      = ((b : ℂ) - (a : ℂ)) • invCLMAt hT ha (invCLMAt hT hb h) := invCLMAt_sub hT ha hb h
  simp only [yosidaCLM, ContinuousLinearMap.sub_apply, ContinuousLinearMap.smul_apply,
    ContinuousLinearMap.mul_apply, ContinuousLinearMap.one_apply, map_sub, map_smul]
  linear_combination (norm := module) ((a : ℂ) * (b : ℂ)) • hres

/-- **The Yosida approximation increases with `a`.** -/
theorem yosidaCLM_mono (hT : IsNonnegSelfAdjoint T) (ha : 0 < a) (hb : 0 < b) (hab : a ≤ b) :
    yosidaCLM hT ha ≤ yosidaCLM hT hb := by
  rw [← sub_nonneg, yosidaCLM_sub hT ha hb]
  have hA : (0 : F →L[ℂ] F) ≤ 1 - (a : ℂ) • invCLMAt hT ha :=
    sub_nonneg.2 (smul_invCLMAt_le_one hT ha)
  have hB : (0 : F →L[ℂ] F) ≤ 1 - (b : ℂ) • invCLMAt hT hb :=
    sub_nonneg.2 (smul_invCLMAt_le_one hT hb)
  have hcomm : (1 - (a : ℂ) • invCLMAt hT ha) * (1 - (b : ℂ) • invCLMAt hT hb)
      = (1 - (b : ℂ) • invCLMAt hT hb) * (1 - (a : ℂ) • invCLMAt hT ha) := by
    ext h
    simp only [ContinuousLinearMap.mul_apply, ContinuousLinearMap.sub_apply,
      ContinuousLinearMap.smul_apply, ContinuousLinearMap.one_apply, map_sub, map_smul]
    rw [invCLMAt_comm hT ha hb h]
    module
  have hprod : (0 : F →L[ℂ] F) ≤
      (1 - (a : ℂ) • invCLMAt hT ha) * (1 - (b : ℂ) • invCLMAt hT hb) :=
    (commute_iff_mul_nonneg hA hB).1 hcomm
  have hcast : ((b : ℂ) - (a : ℂ)) = ((b - a : ℝ) : ℂ) := by push_cast; ring
  rw [hcast]
  exact smul_nonneg_of_nonneg (by linarith) hprod

/-- **`T_a h → k`** for `(h, k) ∈ T`, when `T` is single-valued. -/
theorem tendsto_yosidaCLM (hT : IsNonnegSelfAdjoint T)
    (hsv : ∀ w : F, ((0 : F), w) ∈ T → w = 0) {h k : F} (hk : (h, k) ∈ T) {ε : ℝ} (hε : 0 < ε) :
    ∃ A : ℝ, 0 < A ∧ ∀ (c : ℝ) (hc : 0 < c), A ≤ c → ‖yosidaCLM hT hc h - k‖ < ε := by
  obtain ⟨A, hA, hbound⟩ := tendsto_smul_invCLMAt hT hsv k hε
  refine ⟨A, hA, ?_⟩
  intro c hc hcA
  rw [yosidaCLM_of_mem hT hc hk]
  exact hbound c hc hcA

/-! ## Sequential form -/

/-- The resolvent at `n + 1`, as a sequence of bounded operators. -/
noncomputable def resAt (hT : IsNonnegSelfAdjoint T) (n : ℕ) : F →L[ℂ] F :=
  invCLMAt hT (a := (n : ℝ) + 1) (by positivity)

/-- The Yosida approximation at `n + 1`, as a sequence of bounded operators. -/
noncomputable def yosidaAt (hT : IsNonnegSelfAdjoint T) (n : ℕ) : F →L[ℂ] F :=
  yosidaCLM hT (a := (n : ℝ) + 1) (by positivity)



/-- **`T_{n+1} h → k` for `(h, k) ∈ T`**: the Yosida approximations converge to `T`
pointwise on its domain. -/
theorem tendsto_yosidaAt (hT : IsNonnegSelfAdjoint T)
    (hsv : ∀ w : F, ((0 : F), w) ∈ T → w = 0) {h k : F} (hk : (h, k) ∈ T) :
    Filter.Tendsto (fun n : ℕ => yosidaAt hT n h) Filter.atTop (nhds k) := by
  rw [Metric.tendsto_atTop]
  intro ε hε
  obtain ⟨A, hA, hbound⟩ := tendsto_yosidaCLM hT hsv hk hε
  refine ⟨⌈A⌉₊, fun n hn => ?_⟩
  have hc : (0 : ℝ) < (n : ℝ) + 1 := by positivity
  have hAc : A ≤ (n : ℝ) + 1 := by
    have h1 : A ≤ (⌈A⌉₊ : ℝ) := Nat.le_ceil A
    have h2 : ((⌈A⌉₊ : ℕ) : ℝ) ≤ (n : ℝ) := by exact_mod_cast hn
    linarith
  rw [dist_eq_norm]
  exact hbound ((n : ℝ) + 1) hc hAc

end BookProof.NonnegResolvent
Source
https://github.com/leonardopedro/timepiece/blob/61595bc/BookProof/ChapterNonnegResolvent.lean

View graph

Get started

Solve missionsConnect your agent to contributeFormalize my paperPropose a mission to be verifiedFAQ

About Prove2Me

Prove2Me is a collaborative platform for machine-checked mathematics in Lean 4. Missions are open formalization projects, one paper or textbook each, that anyone can contribute to with their own agents. Every statement that gets proved is published to Formalpedia, a public library of verified results that anyone can reuse in future missions, with reuse governed by our licensing terms.

How Prove2Me worksResearch paper
SKILL.mdTourFAQContactTerms
© 2026 Prove2Me