LeanFun RevOLVER

4.4 From exact operators to convergent solvers

For convergence of truncated solves, we precondition the bordered operator to obtain a compact perturbation of the identity \(I+K\). Stable finite sections then converge, with error controlled by the projection error of the solution. For first-order problems \(u'+pu\) with polynomial \(p\), the preconditioner is \(R=\operatorname {diag}(1,1,1/2,1/3,\ldots )\). Its decreasing diagonal compensates for the growing differentiation entries, giving a bounded operator on coefficient space.

If the infinite preconditioned operator is invertible, large finite sections are uniquely solvable, and convergence of the preconditioned coefficients in \(\ell ^2\) implies uniform convergence of the reconstructed function, including the endpoints. For \(p=0\) we prove invertibility.

Reference details: Inversion on invertible indices and related results
Definition 4.4.1 Inversion on invertible indices
✓ 🤖
#

For a family \(A:I\to R\) in a monoid, let \(I_A=\{ i\in I:A_i\text{ is invertible}\} \). For \(i\in I_A\), define \(A_i^{-1}\) by inversion in the group of units of \(R\). There is no inverse value at an index outside \(I_A\).

Lean Formalisation
def Ring.InvertibleIndex.{u_1, u_2} {ι : Type u_1} {R : Type u_2} [Monoid R] (A : ι → R) : Type u_1
Lean definition
/-- Indices at which a family has a two-sided inverse. -/
abbrev InvertibleIndex (A : ι → R) := {i : ι // IsUnit (A i)}
source
Theorem 4.4.2 Indexed inverse identities
✓ 🤖
#

For each \(i\in I_A\), the indexed inverse satisfies \(A_i^{-1}A_i=A_iA_i^{-1}=1\).

Lean Formalisation
theorem Ring.inverseAt_mul.{u_1, u_2} {ι : Type u_1} {R : Type u_2} [Monoid R] (A : ι → R) (i : Ring.InvertibleIndex A) :
  Ring.inverseAt A i * A ↑i = 1 ∧ A ↑i * Ring.inverseAt A i = 1
Lean proof
/-- The inverse has the two defining identities. -/
theorem inverseAt_mul (A : ι → R) (i : InvertibleIndex A) :
    inverseAt A i * A i = 1 ∧ A i * inverseAt A i = 1 := by
  exact ⟨by simpa only [inverseAt, IsUnit.unit_spec] using Units.inv_mul i.property.unit,
    by simpa only [inverseAt, IsUnit.unit_spec] using Units.mul_inv i.property.unit⟩
source
Definition 4.4.3 Limiting filter on invertible indices
✓ 🤖
#

For a filter \(\mathcal F\) on \(I\), the induced filter on \(I_A\) is its pullback along the inclusion \(I_A\hookrightarrow I\). For \(I=\mathbb N\) and \(\mathcal F\) the filter of tails, this means tending to infinity through invertible indices.

Lean Formalisation
def Ring.invertibleIndexFilter.{u_1, u_2} {ι : Type u_1} {R : Type u_2} [Monoid R] (A : ι → R) (l : Filter ι) :
  Filter (Ring.InvertibleIndex A)
Lean definition
/-- Restrict a limiting process to the indices where inversion exists. -/
def invertibleIndexFilter (A : ι → R) (l : Filter ι) : Filter (InvertibleIndex A) :=
  Filter.comap Subtype.val l
source
Theorem 4.4.4 Preservation of the limiting process
✓ 🤖

If \(A_i\) is invertible eventually along \(\mathcal F\), pushing the induced filter forward to \(I\) recovers \(\mathcal F\). If \(\mathcal F\) is nontrivial, its induced filter on \(I_A\) is also nontrivial. In particular, an eventually invertible sequence has a cofinal domain of invertible indices.

Lean Formalisation
theorem Ring.map_invertibleIndexFilter.{u_1, u_2} {ι : Type u_1} {R : Type u_2} [Monoid R] (A : ι → R) (l : Filter ι)
  (hA : ∀ᶠ (i : ι) in l, IsUnit (A i)) : Filter.map Subtype.val (Ring.invertibleIndexFilter A l) = l
Lean proof
/-- Eventual invertibility preserves the original limiting filter exactly. -/
theorem map_invertibleIndexFilter (A : ι → R) (l : Filter ι)
    (hA : ∀ᶠ i in l, IsUnit (A i)) :
    Filter.map Subtype.val (invertibleIndexFilter A l) = l := by
  apply Filter.map_comap_of_mem
  exact hA.mono (fun i hi ↦ ⟨⟨i, hi⟩, rfl⟩)
source
Theorem 4.4.5 Continuity of indexed inverses
✓ 🤖
#

In a complete normed ring, if \(A_i\to U\) along \(\mathcal F\) and \(U\) is a unit, then \(A_i^{-1}\to U^{-1}\) along the induced filter on invertible indices.

Lean Formalisation
theorem Ring.tendsto_inverseAt.{u_1, u_2} {ι : Type u_1} {R : Type u_2} [NormedRing R] [CompleteSpace R] {A : ι → R}
  {l : Filter ι} (u : Rˣ) (hA : Filter.Tendsto A l (nhds ↑u)) :
  Filter.Tendsto (Ring.inverseAt A) (Ring.invertibleIndexFilter A l) (nhds ↑u⁻¹)
Lean proof
/-- Inverse continuity restricted to genuine inverses. -/
theorem tendsto_inverseAt {A : ι → R} {l : Filter ι} (u : Rˣ)
    (hA : Tendsto A l (𝓝 (u : R))) :
    Tendsto (inverseAt A) (invertibleIndexFilter A l) (𝓝 (↑(u⁻¹) : R)) := by
  have h := (NormedRing.inverse_continuousAt u).tendsto.comp hA
  have hh := h.comp (Filter.tendsto_comap :
    Tendsto (Subtype.val : InvertibleIndex A → ι) (Filter.comap Subtype.val l) l)
  change Tendsto (fun i ↦ inverseAt A i) (Filter.comap Subtype.val l) _
  simpa only [Function.comp_def, inverseAt_eq_ringInverse, Ring.inverse_unit] using hh
source

Let \(E\) be a real or complex Banach space, \(K\) compact, and \(T=I+K\) invertible. Let uniformly bounded projections \(P_n\) converge strongly to \(I\). For sufficiently large \(n\), \(A_n=I+P_nK\) is invertible with uniformly bounded inverses. For \(f=Tx\), the unique projected solution \(x_n\in \operatorname {ran}P_n\) of \(P_nTx_n=P_nf\) is \(A_n^{-1}P_nf\) and satisfies \(\| x_n-x\| \le (\| T^{-1}\| +1)\| P_nx-x\| \). The solution \(x_n\) is defined for every index \(n\) at which \(A_n\) is invertible. These indices include every sufficiently large \(n\), and \(x_n\to x\) as \(n\to \infty \) through them.

Reference: [OT13, Section 4].

Lean Formalisation
theorem ContinuousLinearMap.invertible_liftedFiniteSection_filter_neBot.{u_1, u_2} {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜]
  [NormedAddCommGroup E] [NormedSpace 𝕜 E] [CompleteSpace E] (P : ℕ → E →L[𝕜] E) {C : ℝ} (hC : ∀ (n : ℕ), ‖P n‖ ≤ C)
  (hP : ∀ (x : E), Filter.Tendsto (fun n => (P n) x) Filter.atTop (nhds x)) (K : E →L[𝕜] E) (hK : IsCompactOperator ⇑K)
  (hT : IsUnit (1 + K)) : (Ring.invertibleIndexFilter (fun n => (P n).liftedFiniteSection K) Filter.atTop).NeBot
Lean proof
/-- The invertible-cutoff filter of compact perturbations is nontrivial. -/
theorem invertible_liftedFiniteSection_filter_neBot
    (P : ℕ → E →L[𝕜] E) {C : ℝ} (hC : ∀ n, ‖P n‖ ≤ C)
    (hP : ∀ x, Tendsto (fun n ↦ P n x) atTop (𝓝 x))
    (K : E →L[𝕜] E) (hK : IsCompactOperator K) (hT : IsUnit (1 + K)) :
    NeBot (Ring.invertibleIndexFilter (fun n ↦ liftedFiniteSection (P n) K) atTop) := by
  exact Ring.invertibleIndexFilter_neBot _ _
    (eventually_isUnit_of_tendsto (tendsto_liftedFiniteSection P hC hP K hK) hT)
source

Let \(R=\operatorname {diag}(1,1,1/2,1/3,\ldots )\) and \(Bv=\sum _j(-1)^j(Rv)_j\). The endpoint functional \(B\) is bounded and \(R\) is compact. For any bounded lower-order map \(A\), the bordered operator has row zero \(Bv\) and rows \(v_{j+1}+(ARv)_j\). It is \(I+K\) with \(K\) compact.

Reference: [OT13, Section 4.1, Lemma 4.3].

Lean Formalisation
theorem Polynomial.Chebyshev.isCompactOperator_firstOrderPreconditioner :
  IsCompactOperator ⇑Polynomial.Chebyshev.firstOrderPreconditioner
Lean proof
/-- Diagonal decay makes the first-order preconditioner compact. -/
theorem isCompactOperator_firstOrderPreconditioner : IsCompactOperator firstOrderPreconditioner :=
  lp.isCompactOperator_coefficientDiagonal firstOrderDiagonal zero_le_one
    norm_firstOrderDiagonal_le tendsto_firstOrderDiagonal
source

Every \(v\in \ell ^2\) gives absolutely summable coefficients \(Rv\). The Chebyshev series with coefficients \(Rv\) takes the value \(Bv\) at \(-1\). Reconstruction errors are bounded uniformly by \(\| ((-1)^jR_{jj})_j\| _2\| v-w\| _2\). Thus convergence in the preconditioned coefficient norm implies uniform convergence including endpoints.

Lean Formalisation
theorem Polynomial.Chebyshev.hasSum_firstOrderBoundary (x : ↥(lp (fun x => ℂ) 2)) :
  HasSum (fun n => (-1) ^ n * ↑(Polynomial.Chebyshev.firstOrderPreconditioner x) n)
    (Polynomial.Chebyshev.firstOrderBoundary x)
Lean proof
/-- The preconditioned endpoint functional is its actual convergent series. -/
theorem hasSum_firstOrderBoundary (x : lp (fun _ : ℕ ↦ ℂ) 2) :
    HasSum (fun n ↦ (-1 : ℂ) ^ n * (firstOrderPreconditioner x) n) (firstOrderBoundary x) := by
  have h := lp.hasSum_inner (𝕜 := ℂ) firstOrderBoundaryVector x
  convert h using 1
  · funext n
    rw [RCLike.inner_apply']
    change (-1 : ℂ) ^ n * (firstOrderDiagonal n * x n) =
      star ((-1 : ℂ) ^ n * firstOrderDiagonal n) * x n
    simp [firstOrderDiagonal, mul_assoc]
  · rfl
source

The reconstructed series is continuous on \([-1,1]\), as a uniform limit of polynomials; this is not stated as a separate formal result.

For real polynomial \(p\), take \(A=S p(J)\) in the bordered assembly for \(u\mapsto (u(-1),u\prime +pu)\). This extends exactly the existing polynomial lower-order map. If the infinite preconditioned bordered operator is invertible, sufficiently large finite systems are uniquely solvable. Indexed by the invertible finite sections tending to infinity, their actual solutions reconstruct functions converging uniformly on \([-1,1]\).

Reference: [OT13, Section 4.2].

Lean Formalisation
theorem Polynomial.Chebyshev.firstOrderPolynomialTerm_coefficientLp (p q : Polynomial ℝ) :
  (Polynomial.Chebyshev.firstOrderPolynomialTerm p) (Polynomial.chebyshevBasis.coefficientLp q) =
    (Polynomial.ultrasphericalBasis 1).coefficientLp (p * q)
Lean proof
/-- This bounded operator extends exactly the existing polynomial basis map. -/
theorem firstOrderPolynomialTerm_coefficientLp (p q : ℝ[X]) :
    firstOrderPolynomialTerm p (chebyshevBasis.coefficientLp q) =
      (ultrasphericalBasis 1).coefficientLp (p * q) := by
  change boundedConversion (boundedPolynomialMultiplier p (chebyshevBasis.coefficientLp q)) = _
  rw [boundedPolynomialMultiplier_coefficientLp, boundedConversion_coefficientLp]
source

This is a first-order specialization; higher-order solver convergence is not asserted here.

Reference details: Invertibility of the bordered derivative and related results
Theorem 4.4.10 Invertibility of the bordered derivative
✓ 🤖

The boundary correction \(K_B\) satisfies \(K_B^2=0\), and hence the bordered derivative \(I+K_B\) is invertible with inverse \(I-K_B\).

Lean Formalisation
theorem Polynomial.Chebyshev.firstOrderBoundaryCorrection_sq : Polynomial.Chebyshev.firstOrderBoundaryCorrection ^ 2 = 0
Lean proof
/-- The pure-derivative boundary correction squares to zero. -/
theorem firstOrderBoundaryCorrection_sq : firstOrderBoundaryCorrection ^ 2 = 0 := by
  ext x i
  have he : firstOrderBoundaryCorrection (lp.single (E := fun _ : ℕ ↦ ℂ) 2 0 (1 : ℂ)) = 0 := by
    ext j
    simp [firstOrderBoundary_single_zero]
  rw [pow_two, mul_apply_eq_comp]
  change firstOrderBoundaryCorrection (firstOrderBoundaryCorrection x) i = 0
  change firstOrderBoundaryCorrection
    ((firstOrderBoundary x - x 0) • lp.single (E := fun _ : ℕ ↦ ℂ) 2 0 (1 : ℂ)) i = 0
  rw [map_smul, he, smul_zero]
  rfl
source
Definition 4.4.11 Solution of the bordered derivative system
✓ 🤖

For endpoint value \(c\in \mathbb C\) and derivative coordinates \(f\in \ell ^2\), define \(v=(I+K_B)^{-1}(c,f_0,f_1,\ldots )\), using the inverse of the invertible bordered derivative. The reconstructed solution has coefficients \(Rv\).

Lean Formalisation
def Polynomial.Chebyshev.firstOrderDerivativeSolution (c : ℂ) (f : ↥(lp (fun x => ℂ) 2)) : ↥(lp (fun x => ℂ) 2)
Lean definition
/-- An actual solution for prescribed derivative coefficients and left endpoint.
The inverse exists by the nilpotent boundary correction, not by a hypothesis. -/
noncomputable def firstOrderDerivativeSolution (c : ℂ) (f : lp (fun _ : ℕ ↦ ℂ) 2) :
    lp (fun _ : ℕ ↦ ℂ) 2 :=
  Ring.inverseAt (fun _ : Unit ↦ 1 + firstOrderBoundaryCorrection) ⟨(), isUnit_firstOrderDerivative⟩
    (lp.single 2 0 c + lp.coefficientShiftRight f)
source

For \(p=0\), the boundary correction \(K_B\) satisfies \(K_B^2=0\), so the bordered derivative has explicit inverse \(I-K_B\). Given endpoint \(c\) and \(U\) coefficients \(f\in \ell ^2\), its solution has \(u(-1)=c\) and preconditioned coordinates \(v_{j+1}=f_j\). The actual finite solves, indexed by invertible sections tending to infinity, converge uniformly to the reconstructed function without an additional invertibility assumption. If the actual solution coefficients \(Rv\) satisfy a geometric bound with \(\rho {\gt}1\), the classical derivative on \(E_\rho \) is \(u\prime (z)=\sum _j f_jU_j(z)\).

Lean Formalisation
theorem Polynomial.Chebyshev.firstOrderDerivativeSolution_equation (c : ℂ) (f : ↥(lp (fun x => ℂ) 2)) :
  (1 + Polynomial.Chebyshev.firstOrderBoundaryCorrection) (Polynomial.Chebyshev.firstOrderDerivativeSolution c f) =
    lp.single 2 0 c + lp.coefficientShiftRight f
Lean proof
/-- The explicit inverse solves all bordered coefficient equations. -/
theorem firstOrderDerivativeSolution_equation (c : ℂ) (f : lp (fun _ : ℕ ↦ ℂ) 2) :
    (1 + firstOrderBoundaryCorrection) (firstOrderDerivativeSolution c f) =
      lp.single 2 0 c + lp.coefficientShiftRight f := by
  have h := Ring.mul_inverse_cancel (1 + firstOrderBoundaryCorrection) isUnit_firstOrderDerivative
  simpa only [firstOrderDerivativeSolution, Ring.inverseAt_eq_ringInverse,
    mul_apply_eq_comp, one_apply_eq_self] using
    congrArg (fun L : lp (fun _ : ℕ ↦ ℂ) 2 →L[ℂ] lp (fun _ : ℕ ↦ ℂ) 2 ↦
    L (lp.single 2 0 c + lp.coefficientShiftRight f)) h
source
Supporting results: coordinate projections, compact diagonals, bounded operators

On real or complex \(\ell ^2\), \(P_n\) retains precisely coordinates \(0,\ldots ,n-1\). It is an idempotent compact operator of norm at most one, and \(P_nx\to x\) for every \(x\).

Lean Formalisation
theorem lp.coefficientProjection_apply.{u_1} {𝕜 : Type u_1} [RCLike 𝕜] (n : ℕ) (x : ↥(lp (fun x => 𝕜) 2)) (i : ℕ) :
  ↑((lp.coefficientProjection n) x) i = if i < n then ↑x i else 0
Lean proof
/-- Coordinate truncation has the expected entries. -/
@[simp] theorem coefficientProjection_apply (n : ℕ) (x : lp (fun _ : ℕ ↦ 𝕜) 2) (i : ℕ) :
    coefficientProjection n x i = if i < n then x i else 0 := by
  classical
  simp only [coefficientProjection, sum_apply, ContinuousLinearMap.comp_apply,
    singleContinuousLinearMap_apply, evalCLM_scalar_apply, coeFn_sum, lp.coeFn_single,
    Finset.sum_apply, Finset.sum_pi_single, Finset.mem_range]
source

A bounded real or complex scalar sequence \(d_j\to 0\) defines a compact diagonal operator \(D\), with \(\| D\| \le C\) whenever \(|d_j|\le C\). The finite diagonal sections converge to \(D\) in operator norm. If \(|d_j|\le \varepsilon \) for \(j\ge n\), then \(\| D-P_nD\| \le \varepsilon \).

Lean Formalisation
theorem lp.coefficientDiagonal_apply.{u_1} {𝕜 : Type u_1} [RCLike 𝕜] (d : ℕ → 𝕜) {C : ℝ} (hC : 0 ≤ C)
  (hd : ∀ (i : ℕ), ‖d i‖ ≤ C) (x : ↥(lp (fun x => 𝕜) 2)) (i : ℕ) : ↑((lp.coefficientDiagonal d hC hd) x) i = d i * ↑x i
Lean proof
/-- A diagonal multiplier acts coordinatewise. -/
@[simp] theorem coefficientDiagonal_apply (d : ℕ → 𝕜) {C : ℝ} (hC : 0 ≤ C)
    (hd : ∀ i, ‖d i‖ ≤ C) (x : lp (fun _ : ℕ ↦ 𝕜) 2) (i : ℕ) :
    coefficientDiagonal d hC hd x i = d i * x i := rfl
source
Theorem 4.4.15 Strong projections approximate compact operators
✓ 🤖

On a real or complex normed space, uniformly bounded continuous linear maps \(P_n\) converging strongly to the identity converge uniformly on compact sets. For compact \(K\), \(P_nK\to K\) in operator norm.

Lean Formalisation
theorem ContinuousLinearMap.tendstoUniformlyOn_of_strongly_tendsto_id.{u_1, u_2} {𝕜 : Type u_1} [RCLike 𝕜] {E : Type u_2}
  [NormedAddCommGroup E] [NormedSpace 𝕜 E] (P : ℕ → E →L[𝕜] E) {C : ℝ} (hC : ∀ (n : ℕ), ‖P n‖ ≤ C)
  (hP : ∀ (x : E), Filter.Tendsto (fun n => (P n) x) Filter.atTop (nhds x)) {S : Set E} (hS : IsCompact S) :
  TendstoUniformlyOn (fun n x => (P n) x) id Filter.atTop S
Lean proof
/-- Uniformly bounded operators converging strongly to the identity converge
uniformly on compact sets. -/
theorem tendstoUniformlyOn_of_strongly_tendsto_id
    (P : ℕ → E →L[𝕜] E) {C : ℝ} (hC : ∀ n, ‖P n‖ ≤ C)
    (hP : ∀ x, Tendsto (fun n ↦ P n x) atTop (𝓝 x))
    {S : Set E} (hS : IsCompact S) :
    TendstoUniformlyOn (fun n x ↦ P n x) id atTop S := by
  have he : UniformEquicontinuous (fun n x ↦ P n x) :=
    Metric.uniformEquicontinuous_of_continuity_modulus (fun t ↦ C * t)
      (by simpa using (tendsto_id : Tendsto (id : ℝ → ℝ) (𝓝 0) (𝓝 0)).const_mul C) _ (fun x y n ↦ by
        simpa only [dist_eq_norm, ← map_sub] using
          (P n).le_opNorm (x - y) |>.trans
            (mul_le_mul_of_nonneg_right (hC n) (norm_nonneg _)))
  let : CompactSpace S := isCompact_iff_compactSpace.mp hS
  rw [tendstoUniformlyOn_iff_tendstoUniformly_comp_coe]
  apply UniformFun.tendsto_iff_tendstoUniformly.mp
  apply (((equicontinuous_restrict_iff _).mpr (he.equicontinuous.equicontinuousOn S)).tendsto_uniformFun_iff_pi
    atTop (fun x : S ↦ (x : E))).2
  exact tendsto_pi_nhds.mpr (fun x ↦ hP x)
source

On complex \(\ell ^2\), \(P_nx=x\) exactly when \(x_j=0\) for \(j\ge n\), and \(P_nx=P_ny\) exactly when the first \(n\) coordinates agree. For compact \(K\) on \(\ell ^2\) with \(I+K\) invertible, the first \(n\) equations of \((I+K)x_n=f\) with \(x_{n,j}=0\) for \(j\ge n\) have a unique solution for every sufficiently large \(n\). For every sufficiently large \(n\), the lifted finite section has an actual inverse and its solution obeys the preceding tail error bound. The inverse norm constant is \(\| (I+K)^{-1}\| +1\). On the cofinal set of invertible cutoffs, these actual solves converge in \(\ell ^2\); the corresponding limit filter is nontrivial. No inverse is evaluated at a singular cutoff.

Reference: [OT13, Section 4.2].

Lean Formalisation
theorem lp.coefficientProjection_eq_self_iff (n : ℕ) (x : ↥(lp (fun x => ℂ) 2)) :
  (lp.coefficientProjection n) x = x ↔ ∀ (i : ℕ), n ≤ i → ↑x i = 0
Lean proof
/-- Fixed points of the coordinate projection are exactly the supported vectors. -/
theorem coefficientProjection_eq_self_iff (n : ℕ) (x : lp (fun _ : ℕ ↦ ℂ) 2) :
    coefficientProjection n x = x ↔ ∀ i, n ≤ i → x i = 0 := by
  constructor
  · intro h i hi
    have he := congrArg (fun v : lp (fun _ : ℕ ↦ ℂ) 2 ↦ v i) h
    simpa [coefficientProjection_apply, Nat.not_lt.mpr hi] using he.symm
  · intro h
    ext i
    by_cases hi : i < n
    · simp [hi]
    · simp [hi, h i (by omega)]
source

The full-constant Chebyshev multiplication matrix extends to a bounded operator \(J\) on complex \(\ell ^2\). For a real polynomial \(p\), \(p(J)\) agrees with multiplication by \(p\) on finite polynomial coordinates. The bounded map \(S\) with \((Sa)_0=a_0-a_2/2\) and \((Sa)_j=(a_j-a_{j+2})/2\) for \(j{\gt}0\) agrees with conversion from \(T\) to \(U=C^{(1)}\).

Lean Formalisation
theorem Polynomial.Chebyshev.boundedMulX_coefficientLp (p : Polynomial ℝ) :
  Polynomial.Chebyshev.boundedMulX (Polynomial.chebyshevBasis.coefficientLp p) =
    Polynomial.chebyshevBasis.coefficientLp (Polynomial.X * p)
Lean proof
/-- The bounded coordinate operator agrees with the original polynomial coordinates. -/
theorem boundedMulX_coefficientLp (p : ℝ[X]) :
    boundedMulX (chebyshevBasis.coefficientLp p) = chebyshevBasis.coefficientLp (X * p) := by
  have h : (boundedMulX.restrictScalars ℝ).toLinearMap.comp chebyshevBasis.coefficientLp =
      chebyshevBasis.coefficientLp.comp (LinearMap.mulLeft ℝ X) := by
    apply chebyshevBasis.ext
    intro j
    change boundedMulX (chebyshevBasis.coefficientLp (chebyshevBasis j)) =
      chebyshevBasis.coefficientLp (X * chebyshevBasis j)
    rw [Module.Basis.coefficientLp_basis]
    cases j with
    | zero =>
      rw [boundedMulX_single_zero]
      have he : X * chebyshevBasis 0 = chebyshevBasis 1 := by
        simp [chebyshevBasis_apply, T_zero, T_one]
      rw [he, Module.Basis.coefficientLp_basis]
    | succ j =>
      rw [boundedMulX_single_succ]
      have he : X * chebyshevBasis (j + 1) =
          (1 / 2 : ℝ) • (chebyshevBasis j + chebyshevBasis (j + 2)) := by
        simp only [chebyshevBasis_apply, Nat.cast_add, Nat.cast_one, Nat.cast_ofNat]
        rw [T_add_two]
        have h : (2 : ℝ) • (X * T ℝ (↑j + 1)) =
            T ℝ ↑j + (2 * X * T ℝ (↑j + 1) - T ℝ ↑j) := by
          simp only [smul_eq_C_mul, map_ofNat]
          ring
        linear_combination (norm := module) (1 / 2 : ℝ) • h
      rw [he, map_smul, map_add, Module.Basis.coefficientLp_basis,
        Module.Basis.coefficientLp_basis]
      ext i
      change (1 / 2 : ℂ) * _ = ((1 / 2 : ℝ) : ℂ) * _
      push_cast
      rfl
  exact congrArg (fun L : ℝ[X] →ₗ[ℝ] lp (fun _ : ℕ ↦ ℂ) 2 ↦ L p) h
source
Theorem 4.4.18 First-order ultraspherical residual
✓ 🤖

For arbitrary real polynomial coefficients \(a_0,a_1\), represent \(Lu=a_0u+a_1u'\) with Chebyshev input and \(C^{(1)}\) output. Put \(d_j=\operatorname {natDegree}a_j\). The residual matrix has bandwidths

\[ \bigl(\max (d_0,d_1),\ \max (d_0+2,d_1+1)\bigr). \]

The constant column follows the full-constant convention. Boundary constraints and invertibility are not included in this residual operator.

Reference: [OT13, Section 2].

Lean Formalisation
theorem Polynomial.chebyshev_firstOrder_isBanded (a : ℕ → Polynomial ℝ) :
  ((Polynomial.gegenbauerBasis Polynomial.chebyshev_firstOrder_isBanded._proof_1
            Polynomial.chebyshev_firstOrder_isBanded._proof_2).toMatrix
        fun j => (Polynomial.differentialOperator a 1) (Polynomial.chebyshevBasis j)).IsBanded
    (max (a 0).natDegree (a 1).natDegree) (max ((a 0).natDegree + 2) ((a 1).natDegree + 1))
Lean proof
/-- The first-order ultraspherical residual has explicit lower and upper
bandwidths, including the conversion term and full-constant column. -/
theorem chebyshev_firstOrder_isBanded (a : ℕ → ℝ[X]) :
    ((gegenbauerBasis (by norm_num : -(1 / 2 : ℝ) < 1) (by norm_num : (1 : ℝ) ≠ 0)).toMatrix
      (fun j ↦ differentialOperator a 1 (chebyshevBasis j))).IsBanded
        (max (a 0).natDegree (a 1).natDegree)
        (max ((a 0).natDegree + 2) ((a 1).natDegree + 1)) := by
  let b := chebyshevBasis
  let c := gegenbauerBasis (by norm_num : -(1 / 2 : ℝ) < 1) (by norm_num : (1 : ℝ) ≠ 0)
  have hm (p : ℝ[X]) : (c.toMatrix (fun j ↦ p * c j)).IsBanded p.natDegree p.natDegree :=
    gegenbauerBasis_polynomial_mul_isBanded _ _ p
  have hc : (c.toMatrix (fun j ↦ (LinearMap.id : Module.End ℝ ℝ[X]) (b j))).IsBanded 0 2 :=
    chebyshevBasis_conversion_isBanded
  have hd : (c.toMatrix (fun j ↦ derivative (b j))).IsBanded 0 1 := by
    simpa only [Nat.cast_zero, zero_add, Nat.zero_add, Function.iterate_one] using
      chebyshevBasis_iterate_derivative_isBanded 0
  have h₀ := b.toMatrix_comp_isBanded c c LinearMap.id (LinearMap.mulLeft ℝ (a 0)) hc (hm _)
  have h₁ := b.toMatrix_comp_isBanded c c derivative (LinearMap.mulLeft ℝ (a 1)) hd (hm _)
  have h₀' := h₀.mono (show 0 + (a 0).natDegree ≤ max (a 0).natDegree (a 1).natDegree by omega)
    (show 2 + (a 0).natDegree ≤ max ((a 0).natDegree + 2) ((a 1).natDegree + 1) by omega)
  have h₁' := h₁.mono (show 0 + (a 1).natDegree ≤ max (a 0).natDegree (a 1).natDegree by omega)
    (show 1 + (a 1).natDegree ≤ max ((a 0).natDegree + 2) ((a 1).natDegree + 1) by omega)
  intro i j hij
  change c.repr (differentialOperator a 1 (b j)) i = 0
  rw [differentialOperator_one_apply, map_add, Finsupp.add_apply]
  have hz₀ : c.repr (a 0 * b j) i = 0 := h₀' i j hij
  have hz₁ : c.repr (a 1 * derivative (b j)) i = 0 := h₁' i j hij
  rw [hz₀, hz₁, add_zero]
source

4.4.1 Higher-order ultraspherical convergence

For a normalized differential equation of order \(N\), differentiation is sparse when its output is expressed in \(C^{(N)}\). Polynomial multiplication is bounded, and conversion from a lower positive ultraspherical level is compact. These facts give a compact remainder after right preconditioning. Boundary rows must be bounded in the chosen coefficient norm; invertibility of the infinite bordered operator remains an assumption.

Weighted spaces and coefficient operators
Definition 4.4.19 Degree-weighted coefficient space
✓ 🤖

For \(s\in \mathbb N\), let \(W_s\) consist of complex sequences \(v\) for which \(((n+1)^s v_n)_{n\ge 0}\in \ell ^2\), with norm \(\| v\| _s=\| ((n+1)^s v_n)_n\| _{\ell ^2}\). Write \(U_sv=((n+1)^sv_n)_n\).

Lean Formalisation
def lp.degreeWeightedL2Submodule (s : ℕ) : Submodule ℂ (ℕ → ℂ)
Lean definition
/-- Complex sequences whose degree-weighted coefficients are square summable. -/
def degreeWeightedL2Submodule : Submodule ℂ (ℕ → ℂ) where
  carrier := {u | Memℓp (fun n : ℕ ↦ ((n : ℂ)+1)^s*u n) 2}
  zero_mem' := by
    change Memℓp (fun n : ℕ ↦ ((n : ℂ)+1)^s*0) 2
    simpa only [Pi.zero_apply, mul_zero] using (zero_mem_ℓp' : Memℓp (fun _ : ℕ ↦ (0 : ℂ)) 2)
  add_mem' {u v} hu hv := by
    change Memℓp (fun n : ℕ ↦ ((n : ℂ)+1)^s*(u n+v n)) 2
    simpa only [Pi.add_def, mul_add] using hu.add hv
  smul_mem' c u hu := by
    change Memℓp (fun n : ℕ ↦ ((n : ℂ)+1)^s*(c*u n)) 2
    simpa only [Pi.smul_def, smul_eq_mul, mul_left_comm] using hu.const_smul c
source
Theorem 4.4.20 Weighted coefficient-space structure
✓ 🤖

The map \(U_s:W_s\to \ell ^2\) is a linear isometric equivalence, with \((U_s^{-1}w)_n=w_n/(n+1)^s\). In particular \(W_s\) is a complex Banach space.

Lean Formalisation
theorem lp.norm_degreeWeightedL2 (s : ℕ) (u : lp.DegreeWeightedL2 s) : ‖u‖ = ‖⟨fun n => (↑n + 1) ^ s * ↑u n, ⋯⟩‖
Lean proof
/-- Weighted coefficient norm, expressed using Mathlib's existing ℓ² norm. -/
theorem norm_degreeWeightedL2 (u : DegreeWeightedL2 s) :
    ‖u‖ = ‖(⟨fun n : ℕ ↦ ((n : ℂ)+1)^s*u.1 n, u.2⟩ : lp (fun _ : ℕ ↦ ℂ) 2)‖ := rfl
source

On \(W_s\), define the diagonal \(D_dv=(d_nv_n)_n\) for a bounded sequence \(d\), the shifts \((Lv)_n=v_{n+1}\) and \((Rv)_0=0\), \((Rv)_{n+1}=v_n\), and the truncation \((P_mv)_n=v_n\) for \(n{\lt}m\) and \(0\) otherwise. Let \(\iota _s:W_s\to \ell ^2\) be the coordinate inclusion. For a bounded linear operator \(A\) on \(\ell ^2\), its weighted transport is \(U_s^{-1}AU_s\).

Lean Formalisation
def lp.degreeWeightedTransport (s : ℕ) (A : ↥(lp (fun x => ℂ) 2) →L[ℂ] ↥(lp (fun x => ℂ) 2)) :
  lp.DegreeWeightedL2 s →L[ℂ] lp.DegreeWeightedL2 s
Lean definition
/-- Conjugation of an operator by degree weighting. -/
def degreeWeightedTransport (s : ℕ)
    (A : lp (fun _ : ℕ ↦ ℂ) 2 →L[ℂ] lp (fun _ : ℕ ↦ ℂ) 2) :
    DegreeWeightedL2 s →L[ℂ] DegreeWeightedL2 s :=
  (degreeWeightedL2Isometry s).symm.toContinuousLinearEquiv.toContinuousLinearMap.comp
    (A.comp (degreeWeightedL2Isometry s).toContinuousLinearEquiv.toContinuousLinearMap)
source

These operators are bounded. The inclusion is injective; \(\| P_m\| \le 1\), \(P_mv\to v\) in \(W_s\), and \(P_m\) is compact. A bounded diagonal tending to zero is compact on \(W_s\). Moreover \((L^Nv)_n=v_{n+N}\) and \(R^NL^N=I-P_N\).

Lean Formalisation
theorem lp.degreeWeightedDiagonal_apply (s : ℕ) (d : ℕ → ℂ) {C : ℝ} (hC : 0 ≤ C) (hd : ∀ (n : ℕ), ‖d n‖ ≤ C)
  (x : lp.DegreeWeightedL2 s) (n : ℕ) : ↑((lp.degreeWeightedDiagonal s d hC hd) x) n = d n * ↑x n
Lean proof
/-- Diagonal transport preserves the coordinatewise multiplier. -/
theorem degreeWeightedDiagonal_apply (s : ℕ) (d : ℕ → ℂ) {C : ℝ}
    (hC : 0 ≤ C) (hd : ∀ n, ‖d n‖ ≤ C) (x : DegreeWeightedL2 s) (n : ℕ) :
    (degreeWeightedDiagonal s d hC hd x).1 n = d n * x.1 n := by
  change (d n * (((n : ℂ) + 1)^s * x.1 n)) / ((n : ℂ) + 1)^s = _
  field_simp
source

For \(k\in \mathbb N\) and \(\lambda =k+1\), define \(d_n=\lambda /(n+\lambda )\), \(u_n=(n+1)/(2(n+\lambda ))\), and \(\ell _n=(n+2\lambda -1)/(2(n+\lambda ))\). On complex \(\ell ^2\) set \(S_\lambda =(I-L^2)D_d\), \(J_\lambda =RD_u+LD_\ell \), and \(M_\lambda [a]=a(J_\lambda )\) for \(a\in \mathbb R[x]\).

Lean Formalisation
def Polynomial.Chebyshev.positiveConversionDiagonal (k n : ℕ) : ℂ
Lean definition
/-- Diagonal coefficient (k+1)/(n+k+1) for positive-level conversion. -/
def positiveConversionDiagonal (k n : ℕ) : ℂ :=
  (((k : ℝ) + 1) / ((n : ℝ) + k + 1) : ℝ)
source

The map \(S_\lambda \) is compact on \(\ell ^2\) and converts polynomial \(C^{(\lambda )}\) coordinates to \(C^{(\lambda +1)}\) coordinates. The bounded maps \(J_\lambda \) and \(M_\lambda [a]\) represent multiplication by \(x\) and \(a(x)\), respectively, in the \(C^{(\lambda )}\) basis.

Lean Formalisation
theorem Polynomial.Chebyshev.isCompactOperator_boundedPositiveConversion (k : ℕ) :
  IsCompactOperator ⇑(Polynomial.Chebyshev.boundedPositiveConversion k)
Lean proof
/-- Every positive-level conversion is compact on raw coefficient space. -/
theorem isCompactOperator_boundedPositiveConversion (k : ℕ) :
    IsCompactOperator (boundedPositiveConversion k) := by
  unfold boundedPositiveConversion positiveConversionScaling
  exact (lp.isCompactOperator_coefficientDiagonal (positiveConversionDiagonal k) zero_le_one
    (norm_positiveConversionDiagonal_le k) (tendsto_positiveConversionDiagonal k)).clm_comp
      (1 - lp.coefficientShiftLeft.comp lp.coefficientShiftLeft)
source
Definition 4.4.25 Weighted polynomial coordinates
✓ 🤖

For a real polynomial basis \(b=(b_n)\) and \(p\in \mathbb R[x]\), let \(c_b(p)\in W_s\) be its finite coordinate sequence, regarded as complex coefficients.

Lean Formalisation
def Module.Basis.degreeWeightedCoefficient (b : Module.Basis ℕ ℝ (Polynomial ℝ)) (s : ℕ) (p : Polynomial ℝ) :
  lp.DegreeWeightedL2 s
Lean definition
/-- Finite polynomial coordinates in a degree-weighted sequence space. -/
def degreeWeightedCoefficient (b : Basis ℕ ℝ ℝ[X]) (s : ℕ) (p : ℝ[X]) : lp.DegreeWeightedL2 s :=
  ⟨fun i ↦ (b.repr p i : ℂ), by
    apply Memℓp.of_exponent_ge (p := 2) (q := 0) _ (by norm_num)
    apply memℓp_zero_iff.mpr
    apply (b.repr p).support.finite_toSet.subset
    intro i hi
    simp only [Finset.mem_coe, Finsupp.mem_support_iff]
    exact fun hz ↦ hi (by simp [hz])⟩
source

Weighted polynomial coordinates preserve addition and real scalar multiplication. Their inclusion into \(\ell ^2\) is the ordinary finite polynomial coefficient sequence.

Lean Formalisation
theorem Module.Basis.degreeWeightedCoefficient_inclusion (b : Module.Basis ℕ ℝ (Polynomial ℝ)) (s : ℕ) (p : Polynomial ℝ) :
  (lp.degreeWeightedInclusion s) (b.degreeWeightedCoefficient s p) = b.coefficientLp p
Lean proof
/-- Weighted coordinates include into the usual polynomial coefficient sequence. -/
theorem degreeWeightedCoefficient_inclusion (b : Basis ℕ ℝ ℝ[X]) (s : ℕ) (p : ℝ[X]) :
    lp.degreeWeightedInclusion s (b.degreeWeightedCoefficient s p) = b.coefficientLp p := by
  ext i
  rw [lp.degreeWeightedInclusion_apply]
  rfl
source

On \(W_s\), use the same coordinate formulas for \(S_\lambda \), \(J_\lambda \) and \(M_\lambda [a]\) at integer levels \(\lambda \ge 1\). At level zero set \(S_0=\tfrac 12(I-L^2+P_1)\), \(J_0=\tfrac 12(R(I+P_1)+L)\) and \(M_0[a]=a(J_0)\). Write \(S_{j\to N}=S_{N-1}\cdots S_j\) for successive conversion, with \(S_{j\to j}=I\).

Lean Formalisation
def Polynomial.Chebyshev.weightedChebyshevConversion (s : ℕ) : lp.DegreeWeightedL2 s →L[ℂ] lp.DegreeWeightedL2 s
Lean definition
/-- The bounded T-to-U conversion on weighted coefficients. -/
def weightedChebyshevConversion (s : ℕ) : lp.DegreeWeightedL2 s →L[ℂ] lp.DegreeWeightedL2 s :=
  (1 / 2 : ℂ) • (1 - (lp.degreeWeightedShiftLeft s).comp (lp.degreeWeightedShiftLeft s)) +
    (1 / 2 : ℂ) • lp.degreeWeightedProjection s 1
source

On \(W_s\), multiplication by \(x\) and by a polynomial, conversion from the Chebyshev basis to the first ultraspherical basis, and conversion between positive ultraspherical parameters are bounded operators. On finite polynomial coefficient vectors, their coordinates equal those of the polynomial multiplication and conversion maps in Definition 4.4.27. Every conversion \(S_{j\to N}\) with \(1\le j{\lt}N\) is compact on \(W_s\).

Lean Formalisation
theorem Polynomial.Chebyshev.weightedChebyshevConversion_coefficient (s : ℕ) (p : Polynomial ℝ) :
  (Polynomial.Chebyshev.weightedChebyshevConversion s) (Polynomial.chebyshevBasis.degreeWeightedCoefficient s p) =
    (Polynomial.ultrasphericalBasis 1).degreeWeightedCoefficient s p
Lean proof
/-- Weighted T-to-U conversion agrees with polynomial basis conversion. -/
theorem weightedChebyshevConversion_coefficient (s : ℕ) (p : ℝ[X]) :
    weightedChebyshevConversion s (chebyshevBasis.degreeWeightedCoefficient s p) =
      (ultrasphericalBasis 1).degreeWeightedCoefficient s p := by
  apply lp.degreeWeightedInclusion_injective s
  rw [weightedChebyshevConversion_inclusion, Module.Basis.degreeWeightedCoefficient_inclusion,
    Module.Basis.degreeWeightedCoefficient_inclusion, boundedConversion_coefficientLp]
source

Let \(N=k+1\) and \(c_k=2^k k!\). Define \(\mathcal R_N=c_k^{-1}\operatorname {diag}(1,1,1/2,1/3,\ldots )\) on \(W_s\). For \(j\ge 0\), define the preconditioned order-\((j+1)\) derivative by \(E_{N,j+1}=(c_j/c_k)L^{j+1}\).

Lean Formalisation
def Polynomial.Chebyshev.weightedFirstOrderPreconditioner (s : ℕ) : lp.DegreeWeightedL2 s →L[ℂ] lp.DegreeWeightedL2 s
Lean definition
/-- Reciprocal-degree preconditioning in the weighted coefficient norm. -/
def weightedFirstOrderPreconditioner (s : ℕ) : lp.DegreeWeightedL2 s →L[ℂ] lp.DegreeWeightedL2 s :=
  lp.degreeWeightedDiagonal s firstOrderDiagonal zero_le_one norm_firstOrderDiagonal_le
source

The map \(\mathcal R_N\) is compact and \(E_{N,N}=L^N\). If \(\mathcal R_Nv=c_T(p)\) for a polynomial \(p\), then \(E_{N,j+1}v=c_{C^{(j+1)}}(p^{(j+1)})\) for every \(j\ge 0\).

Lean Formalisation
theorem Polynomial.Chebyshev.ultrasphericalDerivativeScale_ne_zero (k : ℕ) :
  Polynomial.Chebyshev.ultrasphericalDerivativeScale k ≠ 0
Lean proof
/-- The derivative normalization factor is nonzero. -/
theorem ultrasphericalDerivativeScale_ne_zero (k : ℕ) : ultrasphericalDerivativeScale k ≠ 0 := by
  unfold ultrasphericalDerivativeScale
  exact mul_ne_zero (pow_ne_zero _ (by norm_num)) (by exact_mod_cast Nat.factorial_ne_zero k)
source

The diagonal above differs from the usual order-\(N\) preconditioner only in finitely many modes below degree \(N\). These modes are annihilated by the highest derivative; the chosen normalization also makes every positive lower derivative a scalar multiple of a shift.

Definition 4.4.31 Bounded boundary rows
✓ 🤖

For bounded maps \(B,A:W_s\to W_s\), define \(K_{N,B,A}=P_N(B-I)+R^N A\). The first \(N\) coordinates of \(Bv\) specify the boundary data; coordinates of \(Bv\) with index at least \(N\) are unused.

Lean Formalisation
def lp.degreeWeightedBoundaryCorrection (s N : ℕ) (B : lp.DegreeWeightedL2 s →L[ℂ] lp.DegreeWeightedL2 s) :
  lp.DegreeWeightedL2 s →L[ℂ] lp.DegreeWeightedL2 s
Lean definition
/-- Replace the first N identity rows by the bounded rows of B. -/
def degreeWeightedBoundaryCorrection (s N : ℕ)
    (B : DegreeWeightedL2 s →L[ℂ] DegreeWeightedL2 s) :
    DegreeWeightedL2 s →L[ℂ] DegreeWeightedL2 s :=
  (degreeWeightedProjection s N).comp (B - 1)
source

If \(A\) is compact, so is \(K_{N,B,A}\). The first \(N\) rows of \(I+K_{N,B,A}\) are \(B\), and its row \(N+i\) is \(v_{N+i}+(Av)_i\).

Lean Formalisation
theorem lp.isCompactOperator_degreeWeightedBoundaryCorrection (s N : ℕ)
  (B : lp.DegreeWeightedL2 s →L[ℂ] lp.DegreeWeightedL2 s) :
  IsCompactOperator ⇑(lp.degreeWeightedBoundaryCorrection s N B)
Lean proof
/-- A finite collection of bounded boundary rows gives a compact correction. -/
theorem isCompactOperator_degreeWeightedBoundaryCorrection (s N : ℕ)
    (B : DegreeWeightedL2 s →L[ℂ] DegreeWeightedL2 s) :
    IsCompactOperator (degreeWeightedBoundaryCorrection s N B) :=
  (isCompactOperator_degreeWeightedProjection s N).comp_clm (B - 1)
source

Let \(N=k+1\), \(a_0,\ldots ,a_k\in \mathbb R[x]\), and \(B:W_s\to W_s\) be bounded. Set

\[ A=S_{0\to N}M_0[a_0]\mathcal R_N+ \sum _{j=1}^{N-1}S_{j\to N}M_j[a_j]E_{N,j},\qquad K=P_N(B-I)+R^N A,\qquad T=I+K. \]
Lean Formalisation
def Polynomial.Chebyshev.weightedUltrasphericalZeroTerm (s k : ℕ) (a : Polynomial ℝ) :
  lp.DegreeWeightedL2 s →L[ℂ] lp.DegreeWeightedL2 s
Lean definition
/-- The zeroth-order term raised to the final ultraspherical level. -/
def weightedUltrasphericalZeroTerm (s k : ℕ) (a : ℝ[X]) :
    lp.DegreeWeightedL2 s →L[ℂ] lp.DegreeWeightedL2 s :=
  (weightedPositiveRaise s 0 k).comp ((weightedChebyshevConversion s).comp
    ((weightedChebyshevPolynomialMultiplier s a).comp (weightedUltrasphericalPreconditioner s k)))
source

The operators \(A\) and \(K\) are compact on \(W_s\). If \(\mathcal R_Nv=c_T(p)\) for a polynomial \(p\), the first \(N\) rows of \(Tv\) are \(Bv\), and the remaining rows are the \(C^{(N)}\) coordinates of

\[ p^{(N)}+\sum _{j=0}^{N-1}a_jp^{(j)}. \]

Reference: [OT13, Section 4.1].

Lean Formalisation
theorem Polynomial.Chebyshev.isCompactOperator_weightedUltrasphericalZeroTerm (s k : ℕ) (a : Polynomial ℝ) :
  IsCompactOperator ⇑(Polynomial.Chebyshev.weightedUltrasphericalZeroTerm s k a)
Lean proof
/-- The zeroth-order term is compact through right preconditioning. -/
theorem isCompactOperator_weightedUltrasphericalZeroTerm (s k : ℕ) (a : ℝ[X]) :
    IsCompactOperator (weightedUltrasphericalZeroTerm s k a) :=
  (((isCompactOperator_weightedUltrasphericalPreconditioner s k).clm_comp
    (weightedChebyshevPolynomialMultiplier s a)).clm_comp
      (weightedChebyshevConversion s)).clm_comp (weightedPositiveRaise s 0 k)
source
Finite-section estimates and reconstruction

Let \(K\) be compact on \(W_s\) and \(T=I+K\) invertible. For all sufficiently large \(n\), the equations \(P_nTx_n=P_nf\), \(P_nx_n=x_n\) have a unique solution. For \(f=Tx\), along the cofinal set of invertible lifted sections, \(x_n\to x\) and, eventually,

\[ \| x_n-x\| _s\le (\| T^{-1}\| +1)\| P_nx-x\| _s. \]
Lean Formalisation
theorem lp.degreeWeightedProjection_idempotent (s n : ℕ) :
  lp.degreeWeightedProjection s n ∘SL lp.degreeWeightedProjection s n = lp.degreeWeightedProjection s n
Lean proof
/-- Weighted truncation is idempotent. -/
theorem degreeWeightedProjection_idempotent (n : ℕ) :
    (degreeWeightedProjection s n).comp (degreeWeightedProjection s n) =
      degreeWeightedProjection s n := by
  apply ContinuousLinearMap.ext
  intro x
  apply Subtype.ext
  funext i
  simp only [comp_apply, degreeWeightedProjection_apply]
  split_ifs <;> rfl
source
Definition 4.4.36 Reconstruction after right preconditioning
✓ 🤖

Let \(\widehat{\mathcal R}_N:W_s\to W_{s+1}\) have the same coordinate formula as \(\mathcal R_N\). For \(x\in [-1,1]\), define \(\mathcal F_N(v)(x)=\sum _{n\ge 0}(\mathcal R_Nv)_nT_n(x)\) using the convergent Chebyshev series.

Lean Formalisation
def Polynomial.Chebyshev.weightedUltrasphericalReconstruction (s k : ℕ) :
  lp.DegreeWeightedL2 s →L[ℂ] lp.DegreeWeightedL2 (s + 1)
Lean definition
/-- Right preconditioning gains one degree weight. -/
def weightedUltrasphericalReconstruction (s k : ℕ) :
    lp.DegreeWeightedL2 s →L[ℂ] lp.DegreeWeightedL2 (s + 1) :=
  (ultrasphericalDerivativeScale k)⁻¹ •
    (lp.degreeWeightedL2Isometry (s + 1)).symm.toContinuousLinearEquiv.toContinuousLinearMap.comp
      ((lp.coefficientDiagonal degreeGainDiagonal (by norm_num) norm_degreeGainDiagonal_le).comp
        (lp.degreeWeightedL2Isometry s).toContinuousLinearEquiv.toContinuousLinearMap)
source

The map \(\widehat{\mathcal R}_N\) is bounded and has precisely the right-preconditioned coefficients. If \(v_m\to v\) in \(W_s\), then \(\widehat{\mathcal R}_Nv_m\to \widehat{\mathcal R}_Nv\) in \(W_{s+1}\) and \(\mathcal F_N(v_m)\to \mathcal F_N(v)\) uniformly on \([-1,1]\).

Lean Formalisation
theorem Polynomial.Chebyshev.hasSum_weightedUltrasphericalFunction (s k : ℕ) (x : lp.DegreeWeightedL2 s)
  (t : ↑(Set.Icc (-1) 1)) :
  HasSum
    (fun n =>
      ↑((Polynomial.Chebyshev.weightedUltrasphericalPreconditioner s k) x) n *
        Polynomial.eval (↑↑t) (Polynomial.Chebyshev.T ℂ ↑n))
    (Polynomial.Chebyshev.weightedUltrasphericalFunction s k x t)
Lean proof
/-- The reconstructed function is the sum of the right-preconditioned Chebyshev series. -/
theorem hasSum_weightedUltrasphericalFunction (s k : ℕ) (x : lp.DegreeWeightedL2 s)
    (t : Set.Icc (-1 : ℝ) 1) :
    HasSum (fun n ↦ (weightedUltrasphericalPreconditioner s k x).1 n *
      (T ℂ n).eval (t.val : ℂ)) (weightedUltrasphericalFunction s k x t) := by
  let y := (ultrasphericalDerivativeScale k)⁻¹ • lp.degreeWeightedInclusion s x
  have hs := summable_chebyshevSeries_of_absolute
    (summable_norm_firstOrderPreconditioner y).1 t
  have he (n : ℕ) : firstOrderPreconditioner y n =
      (weightedUltrasphericalPreconditioner s k x).1 n := by
    rw [firstOrderPreconditioner_apply]
    change firstOrderDiagonal n * ((ultrasphericalDerivativeScale k)⁻¹ *
      lp.degreeWeightedInclusion s x n) =
      (ultrasphericalDerivativeScale k)⁻¹ * (weightedFirstOrderPreconditioner s x).1 n
    rw [lp.degreeWeightedInclusion_apply, weightedFirstOrderPreconditioner_apply]
    ring
  change HasSum _ (complexChebyshevSeries (firstOrderPreconditioner y) (.ofFirstOrder y t))
  rw [complexChebyshevSeries_eq_tsum (.ofFirstOrder y t) hs]
  simpa only [he, ComplexChebyshevSeriesPoint.ofFirstOrder_val] using hs.hasSum
source

For the preceding polynomial differential system, let \(T_n=I+P_nK\). At a cutoff \(n\) for which \(T_n\) is invertible, define \(v_n=T_n^{-1}P_nf\).

Lean Formalisation
def Polynomial.Chebyshev.weightedUltrasphericalFiniteSection (s k : ℕ)
  (B : lp.DegreeWeightedL2 s →L[ℂ] lp.DegreeWeightedL2 s) (a₀ : Polynomial ℝ) (a : Fin k → Polynomial ℝ) (n : ℕ) :
  lp.DegreeWeightedL2 s →L[ℂ] lp.DegreeWeightedL2 s
Lean definition
/-- The lifted finite section of a preconditioned polynomial differential system. -/
def weightedUltrasphericalFiniteSection (s k : ℕ)
    (B : lp.DegreeWeightedL2 s →L[ℂ] lp.DegreeWeightedL2 s) (a₀ : ℝ[X]) (a : Fin k → ℝ[X])
    (n : ℕ) : lp.DegreeWeightedL2 s →L[ℂ] lp.DegreeWeightedL2 s :=
  liftedFiniteSection (lp.degreeWeightedProjection s n) (weightedUltrasphericalRemainder s k B a₀ a)
source

Let \(s\in \mathbb N\), \(N\ge 1\), and let \(T\) be the preconditioned polynomial differential system above, with bounded boundary rows on \(W_s\). Assume \(T\) is invertible. For all sufficiently large cutoffs the finite systems are uniquely solvable. For \(f=Tv\), their solutions satisfy

\[ \| v_n-v\| _s\le (\| T^{-1}\| +1)\| P_nv-v\| _s. \]

Writing \(u_n=\widehat{\mathcal R}_Nv_n\) and \(u=\widehat{\mathcal R}_Nv\), the original coefficients also satisfy

\[ \| u_n-u\| _{s+1}\le \| \widehat{\mathcal R}_N\| (\| T^{-1}\| +1)\| P_nv-v\| _s. \]

Thus \(v_n\to v\) in \(W_s\), \(u_n\to u\) in \(W_{s+1}\), and the reconstructed functions converge uniformly on \([-1,1]\). All limits are through the cofinal set of invertible cutoffs.

Reference: [OT13, Section 4.1].

Lean Formalisation
theorem Polynomial.Chebyshev.eventually_existsUnique_weightedUltraspherical_system (s k : ℕ)
  (B : lp.DegreeWeightedL2 s →L[ℂ] lp.DegreeWeightedL2 s) (a₀ : Polynomial ℝ) (a : Fin k → Polynomial ℝ)
  (hT : IsUnit (1 + Polynomial.Chebyshev.weightedUltrasphericalRemainder s k B a₀ a)) :
  ∀ᶠ (n : ℕ) in Filter.atTop,
    ∀ (f : lp.DegreeWeightedL2 s),
      ∃! x,
        (∀ (i : ℕ), n ≤ i → ↑x i = 0) ∧
          ∀ i < n, ↑((1 + Polynomial.Chebyshev.weightedUltrasphericalRemainder s k B a₀ a) x) i = ↑f i
Lean proof
/-- Invertibility of the infinite system gives unique sufficiently large finite solves. -/
theorem eventually_existsUnique_weightedUltraspherical_system (s k : ℕ)
    (B : lp.DegreeWeightedL2 s →L[ℂ] lp.DegreeWeightedL2 s) (a₀ : ℝ[X]) (a : Fin k → ℝ[X])
    (hT : IsUnit (1 + weightedUltrasphericalRemainder s k B a₀ a)) :
    ∀ᶠ n in atTop, ∀ f : lp.DegreeWeightedL2 s, ∃! x : lp.DegreeWeightedL2 s,
      (∀ i, n ≤ i → x.1 i = 0) ∧
      (∀ i < n, ((1 + weightedUltrasphericalRemainder s k B a₀ a) x).1 i = f.1 i) :=
  lp.eventually_existsUnique_degreeWeighted_system s _
    (isCompactOperator_weightedUltrasphericalRemainder s k B a₀ a) hT
source

Part 5 treats measure modification and several variables.