5.4 The annulus: Zernike-type bases and a convergent solver
On the annulus \(q{\lt}x^2+y^2{\lt}1\) the radial factor of a Zernike-type basis is a semiclassical Jacobi polynomial in \(t(1-r^2)\), with \(t=(1-q)^{-1}\). The radial family is the one from Chapter 5.2. Conversion preserves each angular mode. The Laplacian becomes banded in the radial index within each mode. A boundary-vanishing basis turns Dirichlet problems into symmetric tridiagonal systems.
We first construct the radial basis and sparse operators, then the finite Galerkin systems and their energy spaces. We prove convergence as both angular and radial resolution increase, and identify the completed space with physical functions and Cartesian gradient classes on the annulus.
5.4.1 Geometry, measure and bases
Reference details: Nondegenerate annular parameter and related results
For \(q\ge 0\), \(q\ne 1\), and real \(a,b\), define \(\omega ^{\rm aux}_{q,a,b}\) as the pushforward by \(\Psi _q\) of the semiclassical measure with parameters \((2,a,b,0)\), regarded as a measure on \([0,1]\), times angular Lebesgue measure on \((-\pi ,\pi )\).
For \(0{\lt}q{\lt}1\) and \(a,b{\gt}-1\), every continuous real-valued function on \(\mathbb R^2\) is integrable for \(\omega ^{\rm aux}_{q,a,b}\), and all polynomial moments are finite.
Lean Formalisation
theorem MvPolynomial.integrable_zernikeAnnulusProductMeasure {q a b : ℝ} (hq : q ∈ Set.Ioo 0 1) (ha : -1 < a) (hb : -1 < b)
{f : (Fin 2 → ℝ) → ℝ} (hf : Continuous f) :
MeasureTheory.Integrable f (MvPolynomial.zernikeAnnulusProductMeasure ⟨q, ⋯⟩ a b)
Lean proof
/-- Continuous functions are integrable on the compact annular parameter support. -/
theorem integrable_zernikeAnnulusProductMeasure {q a b : ℝ} (hq : q ∈ Ioo (0 : ℝ) 1)
(ha : -1<a) (hb : -1<b) {f : (Fin 2 → ℝ) → ℝ} (hf : Continuous f) :
Integrable f (zernikeAnnulusProductMeasure ⟨q,hq.1.le,ne_of_lt hq.2⟩ a b) := by
let := isFiniteMeasure_semiclassicalJacobiMeasure (t := 2) (γ := 0) (by norm_num) ha hb
let C : Icc (0 : ℝ) 1 × ℝ → Fin 2 → ℝ := fun v ↦
zernikeAnnulusCoordinates ⟨q,ne_of_lt hq.2⟩
⟨((v.1 : ℝ),v.2),zernikeAnnulusCoordinates_radical_nonneg
⟨q,hq.1.le,ne_of_lt hq.2⟩ v.1⟩
have hC : Continuous C := continuous_zernikeAnnulusCoordinates _ |>.comp (by fun_prop)
change Integrable f (Measure.map C ((Measure.comap
(Subtype.val : Icc (0 : ℝ) 1 → ℝ)
(semiclassicalJacobiMeasure ⟨2,by norm_num⟩ a b 0)).prod
(volume.restrict (Ioo (-Real.pi) Real.pi))))
rw [integrable_map_measure hf.aestronglyMeasurable hC.measurable.aemeasurable]
have hi := (hf.comp hC).continuousOn.integrableOn_compact
(μ := (Measure.comap (Subtype.val : Icc (0 : ℝ) 1 → ℝ)
(semiclassicalJacobiMeasure ⟨2,by norm_num⟩ a b 0)).prod
(volume.restrict (Ioo (-Real.pi) Real.pi)))
(isCompact_univ.prod isCompact_Icc :
IsCompact (univ ×ˢ Icc (-Real.pi) Real.pi : Set (Icc (0 : ℝ) 1 × ℝ)))
have hs : ∀ᵐ v ∂(Measure.comap (Subtype.val : Icc (0 : ℝ) 1 → ℝ)
(semiclassicalJacobiMeasure ⟨2,by norm_num⟩ a b 0)).prod
(volume.restrict (Ioo (-Real.pi) Real.pi)),
v ∈ (univ ×ˢ Icc (-Real.pi) Real.pi : Set (Icc (0 : ℝ) 1 × ℝ)) := by
filter_upwards [Measure.quasiMeasurePreserving_snd.ae
(ae_restrict_mem measurableSet_Ioo)] with v hθ
exact ⟨mem_univ _,hθ.1.le,hθ.2.le⟩
rwa [IntegrableOn, Measure.restrict_eq_self_of_ae_mem hs] at hi
For \(0\le q{\lt}1\) and real \(a,b\), define \(\omega _{q,a,b}=\frac12t(q)^{-(a+b+1)}\omega ^{\rm aux}_{q,a,b}\). The value \(q=0\) includes the disk endpoint.
Lean Formalisation
def MvPolynomial.zernikeAnnulusMeasure (q : ↑(Set.Ico 0 1)) (a b : ℝ) : MeasureTheory.Measure (Fin 2 → ℝ)
Lean definition
/-- The standard interior annular measure, including the disk endpoint q=0. -/
noncomputable def zernikeAnnulusMeasure (q : Ico (0 : ℝ) 1) (a b : ℝ) : Measure (Fin 2 → ℝ) :=
ENNReal.ofReal ((1/2 : ℝ)*((annulusParameter ⟨q,ne_of_lt q.property.2⟩)^(a+b+1))⁻¹) •
zernikeAnnulusProductMeasure ⟨q, q.property.1, ne_of_lt q.property.2⟩ a b
Let \(q=\rho ^2\in (0,1)\), \(t=(1-q)^{-1}\), \(a,b{\gt}-1\), and let \(Q_k\) denote the positive orthonormal semiclassical family with parameters \((t,a,b,m)\). The radial annular polynomials \(A_{k,m}(s)=Q_k(t(1-s))\) satisfy
Thus the angular frequency is the third semiclassical parameter. Here \(s=r^2\); the full planar pairing additionally has the area factor \(1/2\) and the angular pairing. The exact change-of-variables theorem also applies to every integrable real input for the semiclassical measure. The transported weighted integrand is integrable on \((q,1)\), and its integral is multiplied by \(t^{a+b+m+1}\). This includes integrable endpoint singularities, separately from the polynomial orthogonality specialization.
theorem Polynomial.integrable_semiclassicalJacobiMeasure_annulus (q : ↑(Set.Ioo 0 1)) (a b : ℝ) (m : ℕ)
(f :
MeasureTheory.IntegrableInput
(Polynomial.semiclassicalJacobiMeasure ⟨Polynomial.annulusParameter ⟨↑q, ⋯⟩, ⋯⟩ a b ↑m)) :
MeasureTheory.Integrable
(fun s => (1 - ↑s) ^ a * (↑s - ↑q) ^ b * ↑s ^ m * ↑f (Polynomial.annulusParameter ⟨↑q, ⋯⟩ * (1 - ↑s)))
MeasureTheory.volume
Lean proof
/-- Every integrable semiclassical input remains integrable under the annular
change of variables, including integrable endpoint singularities (PGSO Section 4). -/
theorem integrable_semiclassicalJacobiMeasure_annulus (q : Ioo (0 : ℝ) 1)
(a b : ℝ) (m : ℕ)
(f : IntegrableInput (semiclassicalJacobiMeasure
⟨annulusParameter ⟨q, ne_of_lt q.property.2⟩, one_lt_annulusParameter q.property⟩ a b m)) :
Integrable (fun s : Ioo (q : ℝ) 1 ↦ (1 - (s : ℝ)) ^ a * ((s : ℝ) - q) ^ b *
(s : ℝ) ^ m * f.val (annulusParameter ⟨q, ne_of_lt q.property.2⟩ * (1 - (s : ℝ)))) volume := by
let t := annulusParameter ⟨q, ne_of_lt q.property.2⟩
have ht : 0 < t := lt_trans zero_lt_one (one_lt_annulusParameter q.property)
have he := annulusParameter_mul q (ne_of_lt q.property.2)
have hq : (t - 1) / t = (q : ℝ) := by
apply (div_eq_iff ht.ne').2
dsimp [t]
nlinarith [he]
have hs := (integrable_semiclassicalJacobiMeasure_iff
⟨t, one_lt_annulusParameter q.property⟩ a b m f.val).1 f.property
let G : ℝ → ℝ := fun x ↦ if h : x ∈ Ioo (0 : ℝ) 1 then
(semiclassicalJacobiWeight ⟨t, one_lt_annulusParameter q.property⟩ a b m ⟨x,h⟩ : ℝ) * f.val x
else 0
have hi : IntervalIntegrable G volume 0 1 := by
rw [intervalIntegrable_iff, uIoc_of_le (by norm_num : (0 : ℝ) ≤ 1),
IntegrableOn, ← restrict_Ioo_eq_restrict_Ioc]
apply (integrableOn_iff_comap_subtypeVal measurableSet_Ioo).2
convert hs using 1
funext x
exact dite_eq_left x.property
have hc := ((hi.comp_sub_left t).comp_mul_left (c := t)).symm
simp only [sub_zero, div_self ht.ne', hq] at hc
rw [intervalIntegrable_iff, uIoc_of_le q.property.2.le,
IntegrableOn, ← restrict_Ioo_eq_restrict_Ioc] at hc
have hj := (integrableOn_iff_comap_subtypeVal measurableSet_Ioo).1 hc
have heq (s : Ioo (q : ℝ) 1) : G (t - t * (s : ℝ)) =
t ^ (a+b+(m : ℝ)) * ((1-(s : ℝ))^a*((s : ℝ)-q)^b*(s : ℝ)^m *
f.val (t*(1-(s : ℝ)))) := by
have hx : t*(1-(s : ℝ)) ∈ Ioo (0 : ℝ) 1 := by
constructor
· exact mul_pos ht (sub_pos.mpr s.property.2)
· dsimp [t] at *
nlinarith [mul_pos ht (sub_pos.mpr s.property.1)]
rw [show t-t*(s : ℝ)=t*(1-(s : ℝ)) by ring]
simp only [G, dite_eq_left hx]
rw [semiclassicalJacobiWeight_annulus q a b m s]
ring
change Integrable (fun s : Ioo (q : ℝ) 1 ↦ G (t-t*(s : ℝ))) volume at hj
convert hj.const_mul (t ^ (a+b+(m : ℝ)))⁻¹ using 1
funext s
rw [heq, ← mul_assoc, inv_mul_cancel₀ (rpow_pos_of_pos ht _).ne', one_mul]
theorem Polynomial.eval_zernikeAnnulusRadial {q a b : ℝ} (hq : q ∈ Set.Ioo 0 1) (ha : -1 < a) (hb : -1 < b) (k m : ℕ) (s : ℝ) :
Polynomial.eval s (Polynomial.zernikeAnnulusRadial hq ha hb k m) =
Polynomial.eval (Polynomial.annulusParameter ⟨q, ⋯⟩ * (1 - s))
(↑(Polynomial.semiclassicalJacobiSequence ⋯ ha hb ↑m) k)
Lean proof
/-- Evaluation uses precisely the annular squared-radius coordinate. -/
theorem eval_zernikeAnnulusRadial {q a b : ℝ} (hq : q ∈ Ioo (0 : ℝ) 1)
(ha : -1<a) (hb : -1<b) (k m : ℕ) (s : ℝ) :
(zernikeAnnulusRadial hq ha hb k m).eval s =
(semiclassicalJacobiSequence (one_lt_annulusParameter hq) ha hb m k).eval
(annulusParameter ⟨q, ne_of_lt hq.2⟩*(1-s)) := by
simp [zernikeAnnulusRadial, eval_comp]
theorem Polynomial.integral_zernikeAnnulusRadial_mul {q a b : ℝ} (hq : q ∈ Set.Ioo 0 1) (ha : -1 < a) (hb : -1 < b)
(k l m : ℕ) :
∫ (s : ↑(Set.Ioo q 1)),
(1 - ↑s) ^ a * (↑s - q) ^ b * ↑s ^ m *
(Polynomial.eval (↑s) (Polynomial.zernikeAnnulusRadial hq ha hb k m) *
Polynomial.eval (↑s) (Polynomial.zernikeAnnulusRadial hq ha hb l m)) =
(Polynomial.annulusParameter ⟨q, ⋯⟩ ^ (a + b + ↑m + 1))⁻¹ * if k = l then 1 else 0
Lean proof
/-- Exact annular radial orthogonality and norms, with the full geometric scale. -/
theorem integral_zernikeAnnulusRadial_mul {q a b : ℝ} (hq : q ∈ Ioo (0 : ℝ) 1)
(ha : -1<a) (hb : -1<b) (k l m : ℕ) :
∫ s : Ioo q 1, (1-(s : ℝ))^a*((s : ℝ)-q)^b*(s : ℝ)^m*
((zernikeAnnulusRadial hq ha hb k m).eval (s : ℝ) *
(zernikeAnnulusRadial hq ha hb l m).eval (s : ℝ)) =
((annulusParameter ⟨q, ne_of_lt hq.2⟩)^(a+b+(m : ℝ)+1))⁻¹ * (if k=l then 1 else 0) := by
let Q := semiclassicalJacobiSequence (one_lt_annulusParameter hq) ha hb (m : ℝ)
have hQ := semiclassicalJacobiSequence_spec (one_lt_annulusParameter hq) ha hb (m : ℝ)
have ho : (∫ x, (Q k).eval x*(Q l).eval x
∂semiclassicalJacobiMeasure ⟨annulusParameter ⟨q, ne_of_lt hq.2⟩, one_lt_annulusParameter hq⟩ a b m) = if k=l then 1 else 0 := by
by_cases h : k=l
· subst l
simpa only [↓reduceIte, ← pow_two] using hQ.2.2 k
· simpa only [ite_eq_right h] using hQ.1.orthogonal k l h
have hi := (hasFiniteMoments_semiclassicalJacobiMeasure
(γ := (m : ℝ)) (one_lt_annulusParameter hq) ha hb).integrable_mul (Q k) (Q l)
rw [integral_semiclassicalJacobiMeasure_annulus ⟨q,hq⟩ a b m ⟨_,hi⟩] at ho
simp only [eval_zernikeAnnulusRadial]
change (∫ s : Ioo q 1, (1-(s : ℝ))^a*((s : ℝ)-q)^b*(s : ℝ)^m*
((Q k).eval (annulusParameter ⟨q, ne_of_lt hq.2⟩*(1-(s : ℝ)))*(Q l).eval (annulusParameter ⟨q, ne_of_lt hq.2⟩*(1-(s : ℝ))))) = _
have ht : 0 < annulusParameter ⟨q, ne_of_lt hq.2⟩ := lt_trans zero_lt_one (one_lt_annulusParameter hq)
rw [← ho, ← mul_assoc, inv_mul_cancel₀ (by positivity), one_mul]
The real modes \(Q_k^{(t,a,b,m)}(t(1-r^2))H_m\), with \(t=(1-q)^{-1}\) and \(H_m=r^m\cos (m\theta )\) or \(r^m\sin (m\theta )\), are mutually orthogonal. Exclude the zero sine mode. Their squared norms are \(\frac12t^{-(a+b+m+1)}c_m\), with \(c_0=2\pi \) and \(c_m=\pi \) for \(m{\gt}0\). In the established disk ordering, modes of total degree at most \(N\) form a complete basis of that polynomial space. Positive normalization gives identity Gram matrices.
Reference: [PGSO24, Definition 4.1 and Proposition 4.2].
Lean Formalisation
theorem MvPolynomial.integral_zernikeAnnulusMeasure_squaredRadius {q a b : ℝ} (hq : q ∈ Set.Ioo 0 1) (ha : -1 < a) (hb : -1 < b)
(p : MvPolynomial (Fin 2) ℝ) :
∫ (v : Fin 2 → ℝ), (MvPolynomial.eval v) p ∂MvPolynomial.zernikeAnnulusMeasure ⟨q, ⋯⟩ a b =
1 / 2 * ∫ (s : ↑(Set.Ioo q 1)), ↑(MvPolynomial.zernikeAnnulusSquaredRadiusInput ⟨q, hq⟩ ⟨a, ha⟩ ⟨b, hb⟩ p) s
Lean proof
/-- The classical annular density formula, including admissible endpoint singularities. -/
theorem integral_zernikeAnnulusMeasure_squaredRadius {q a b : ℝ} (hq : q ∈ Ioo (0 : ℝ) 1)
(ha : -1 < a) (hb : -1 < b) (p : MvPolynomial (Fin 2) ℝ) :
∫ v, eval v p ∂zernikeAnnulusMeasure ⟨q,hq.1.le,hq.2⟩ a b =
(1/2 : ℝ)*∫ s : Ioo q 1,
(zernikeAnnulusSquaredRadiusInput ⟨q,hq⟩ ⟨a,ha⟩ ⟨b,hb⟩ p).val s := by
obtain ⟨f,hf,hM⟩ := annulusProduct_classical_input ⟨q,hq⟩ ⟨a,ha⟩ ⟨b,hb⟩ p
have ht : 0 < annulusParameter ⟨q,ne_of_lt hq.2⟩ :=
lt_trans zero_lt_one (one_lt_annulusParameter hq)
have he := annulusParameter_mul q (ne_of_lt hq.2)
have hi := integral_semiclassicalJacobiMeasure_annulus ⟨q,hq⟩ a b 0
⟨f.val,by simpa only [Nat.cast_zero] using f.property⟩
simp only [Nat.cast_zero, add_zero, pow_zero, mul_one] at hi
rw [zernikeAnnulusMeasure, integral_smul_measure,
ENNReal.toReal_ofReal (by positivity), smul_eq_mul, hM, hi,
← mul_assoc, mul_assoc (1/2 : ℝ), inv_mul_cancel₀ (by positivity), mul_one]
congr 1
apply integral_congr_ae
filter_upwards [] with s
have hx : annulusParameter ⟨q,ne_of_lt hq.2⟩*(1-(s : ℝ)) ∈ Ioo (0 : ℝ) 1 := by
constructor
· exact mul_pos ht (sub_pos.mpr s.property.2)
· nlinarith [mul_pos ht (sub_pos.mpr s.property.1)]
have hv := hf ⟨_,hx⟩
simp only [mul_div_cancel_left₀ _ ht.ne', sub_sub_cancel] at hv
rw [hv]
rfl
def MvPolynomial.zernikeAnnulusMode {q a b : ℝ} (hq : q ∈ Set.Ioo 0 1) (ha : -1 < a) (hb : -1 < b) (u : Bool) (k m : ℕ) :
MvPolynomial (Fin 2) ℝ
Lean definition
/-- A Cartesian polynomial annular mode, built from the established radial family. -/
noncomputable def zernikeAnnulusMode {q a b : ℝ} (hq : q ∈ Ioo (0 : ℝ) 1)
(ha : -1<a) (hb : -1<b) (u : Bool) (k m : ℕ) : MvPolynomial (Fin 2) ℝ :=
diskRadialLift u (zernikeAnnulusRadial hq ha hb k m) m
theorem MvPolynomial.integralInner_zernikeAnnulusMode_same_angular {q a b : ℝ} (hq : q ∈ Set.Ioo 0 1) (ha : -1 < a)
(hb : -1 < b) (u : Bool) (k l m : ℕ) :
MvPolynomial.integralInner (MvPolynomial.zernikeAnnulusMeasure ⟨q, ⋯⟩ a b)
(MvPolynomial.IntegrablePair.of (MvPolynomial.zernikeAnnulusMeasure ⟨q, ⋯⟩ a b)
(MvPolynomial.zernikeAnnulusMode hq ha hb u k m) (MvPolynomial.zernikeAnnulusMode hq ha hb u l m) ⋯) =
1 / 2 * ((Polynomial.annulusParameter ⟨q, ⋯⟩ ^ (a + b + ↑m + 1))⁻¹ * if k = l then 1 else 0) *
MvPolynomial.zernikeAngularNormSq u m
Lean proof
/-- Exact same-sector annular pairings, including their geometric scale. -/
theorem integralInner_zernikeAnnulusMode_same_angular {q a b : ℝ}
(hq : q ∈ Ioo (0 : ℝ) 1) (ha : -1<a) (hb : -1<b) (u : Bool) (k l m : ℕ) :
integralInner (zernikeAnnulusMeasure ⟨q,hq.1.le,hq.2⟩ a b) (IntegrablePair.of (zernikeAnnulusMeasure ⟨q,hq.1.le,hq.2⟩ a b) (zernikeAnnulusMode hq ha hb u k m) (zernikeAnnulusMode hq ha hb u l m)) =
(1/2 : ℝ)*(((annulusParameter ⟨q,ne_of_lt hq.2⟩)^(a+b+(m : ℝ)+1))⁻¹*(if k=l then 1 else 0))*
zernikeAngularNormSq u m := by
dsimp only [zernikeAnnulusMode]
rw [integralInner_annulusRadialLift_same_angular hq ha hb, integral_zernikeAnnulusRadial_mul]
theorem MvPolynomial.integralInner_zernikeAnnulusMode_eq_zero {q a b : ℝ} (hq : q ∈ Set.Ioo 0 1) (ha : -1 < a) (hb : -1 < b)
{u v : Bool} {k m l n : ℕ} (hne : (u, k, m) ≠ (v, l, n)) :
MvPolynomial.integralInner (MvPolynomial.zernikeAnnulusMeasure ⟨q, ⋯⟩ a b)
(MvPolynomial.IntegrablePair.of (MvPolynomial.zernikeAnnulusMeasure ⟨q, ⋯⟩ a b)
(MvPolynomial.zernikeAnnulusMode hq ha hb u k m) (MvPolynomial.zernikeAnnulusMode hq ha hb v l n) ⋯) =
0
Lean proof
/-- Distinct annular modes are orthogonal in the standard weighted planar measure. -/
theorem integralInner_zernikeAnnulusMode_eq_zero {q a b : ℝ}
(hq : q ∈ Ioo (0 : ℝ) 1) (ha : -1<a) (hb : -1<b)
{u v : Bool} {k m l n : ℕ} (hne : (u,k,m)≠(v,l,n)) :
integralInner (zernikeAnnulusMeasure ⟨q,hq.1.le,hq.2⟩ a b) (IntegrablePair.of (zernikeAnnulusMeasure ⟨q,hq.1.le,hq.2⟩ a b) (zernikeAnnulusMode hq ha hb u k m) (zernikeAnnulusMode hq ha hb v l n))=0 := by
by_cases hu : u=v
· subst v
by_cases hm : m=n
· subst n
rw [integralInner_zernikeAnnulusMode_same_angular hq ha hb]
have hk : k≠l := by aesop
simp [hk]
· exact integralInner_annulusRadialLift_eq_zero_of_angular hq ha hb _ _ (Or.inr hm)
· exact integralInner_annulusRadialLift_eq_zero_of_angular hq ha hb _ _ (Or.inl hu)
theorem MvPolynomial.integral_sq_zernikeAnnulusMode_pos {q a b : ℝ} (hq : q ∈ Set.Ioo 0 1) (ha : -1 < a) (hb : -1 < b)
(u : Bool) (k m : ℕ) (hm : u = true → m ≠ 0) :
0 <
∫ (v : Fin 2 → ℝ),
(MvPolynomial.eval v) (MvPolynomial.zernikeAnnulusMode hq ha hb u k m) ^
2 ∂MvPolynomial.zernikeAnnulusMeasure ⟨q, ⋯⟩ a b
Lean proof
/-- Every retained real annular mode has a strictly positive squared norm. -/
theorem integral_sq_zernikeAnnulusMode_pos {q a b : ℝ}
(hq : q ∈ Ioo (0 : ℝ) 1) (ha : -1<a) (hb : -1<b)
(u : Bool) (k m : ℕ) (hm : u=true → m≠0) :
0 < ∫ v, (eval v (zernikeAnnulusMode hq ha hb u k m))^2 ∂zernikeAnnulusMeasure ⟨q,hq.1.le,hq.2⟩ a b := by
rw [← integralInner_self _ _ (h := (hasFiniteMoments_zernikeAnnulusMeasure hq ha hb).integrable_mul _ _), integralInner_zernikeAnnulusMode_same_angular hq ha hb]
have ht : 0<annulusParameter ⟨q,ne_of_lt hq.2⟩ := lt_trans zero_lt_one (one_lt_annulusParameter hq)
have hang : 0<zernikeAngularNormSq u m := by
cases u <;> simp only [zernikeAngularNormSq, Bool.false_eq_true, ↓reduceIte] at *
· split <;> positivity
· simp [hm, Real.pi_pos]
simp only [↓reduceIte, mul_one]
positivity
For \(0{\lt}q{\lt}1\), let \(\Omega _q=\{ (x,y):q{\lt}x^2+y^2{\lt}1\} \). The unweighted annular measure is exactly planar Lebesgue measure restricted to \(\Omega _q\):
/-- Lift a semiclassical polynomial through the annular affine coordinate and angular harmonic. -/
noncomputable def annulusLift (q : {q : ℝ // q ≠ 1}) (u : Bool) (m : ℕ) :
Polynomial ℝ →ₗ[ℝ] MvPolynomial (Fin 2) ℝ where
toFun p := diskRadialLift u (p.comp (Polynomial.C (annulusParameter q)*(1-Polynomial.X))) m
map_add' p z := by
cases u <;> simp [diskRadialLift, Polynomial.add_comp, Polynomial.eval₂_add, add_mul]
map_smul' c p := by
cases u <;> simp [diskRadialLift, Polynomial.smul_eq_C_mul, Polynomial.mul_comp,
Polynomial.eval₂_mul, MvPolynomial.smul_eq_C_mul, mul_assoc]
Let \(0{\lt}q{\lt}1\), \(a,b{\gt}-1\), and let \(p_n\) be the semiclassical basis polynomial with parameters \((t(q),a,b,m)\). For either the cosine or sine angular harmonic \(H_m\), its lift is
which is the annular mode with radial index \(n\) and angular harmonic \(H_m\).
Lean Formalisation
theorem MvPolynomial.annulusLift_basis {q a b : ℝ} (hq : q ∈ Set.Ioo 0 1) (ha : -1 < a) (hb : -1 < b) (u : Bool) (k m : ℕ) :
(MvPolynomial.annulusLift ⟨q, ⋯⟩ u m) ((Polynomial.semiclassicalJacobiBasis ⋯ ha hb ↑m) k) =
MvPolynomial.zernikeAnnulusMode hq ha hb u k m
Lean proof
/-- The established annular modes are the images of the semiclassical basis. -/
theorem annulusLift_basis {q a b : ℝ} (hq : q ∈ Ioo (0 : ℝ) 1)
(ha : -1<a) (hb : -1<b) (u : Bool) (k m : ℕ) :
annulusLift ⟨q,ne_of_lt hq.2⟩ u m (semiclassicalJacobiBasis (one_lt_annulusParameter hq) ha hb m k) =
zernikeAnnulusMode hq ha hb u k m := by
simp [annulusLift, semiclassicalJacobiBasis_apply, zernikeAnnulusMode, zernikeAnnulusRadial]
Within any fixed real angular sector, the semiclassical connection from \((a,b,m)\) to \((a',b',m)\) reconstructs exactly the same Cartesian annular polynomial from finite radial coefficients. Thus conversion preserves angular phase and frequency. For nonnegative integer endpoint shifts \((r,s)\), its entry in radial row \(\ell \) and column \(k\) vanishes unless \(\ell \le k\le \ell +r+s\). The modes use the raw annular normalization with orthonormal semiclassical radial factors.
theorem MvPolynomial.annulus_conversion_eq_zero {q a b : ℝ} (hq : q ∈ Set.Ioo 0 1) (ha : -1 < a) (hb : -1 < b) (r s m : ℕ)
(har : -1 < a + ↑r) (hbs : -1 < b + ↑s) (k l : ℕ) (hgap : k < l ∨ l + (r + s) < k) :
Polynomial.semiclassicalJacobiConnection ⋯ ha hb (↑m) har hbs (↑m) l k = 0
Lean proof
/-- Integer endpoint raising has radial bandwidth at most the sum of the shifts. -/
theorem annulus_conversion_eq_zero {q a b : ℝ} (hq : q ∈ Ioo (0 : ℝ) 1)
(ha : -1<a) (hb : -1<b) (r s m : ℕ)
(har : -1<a+r) (hbs : -1<b+s) (k l : ℕ) (hgap : k<l ∨ l+(r+s)<k) :
semiclassicalJacobiConnection (one_lt_annulusParameter hq) ha hb m har hbs m l k = 0 := by
simpa only [Nat.cast_zero, add_zero] using
semiclassicalJacobiConnection_eq_zero (γ := (m : ℝ)) (one_lt_annulusParameter hq)
ha hb r s 0 har hbs k l (by simpa only [add_zero] using hgap)
from radial parameters \((a,b,m)\) to \((a+2,b+2,m)\). It preserves angular phase and frequency. Column \(k\) has support only in radial rows \(k-1,k-2,k-3\); negative rows are absent. Acting on finite coefficients and then reconstructing the Cartesian polynomial agrees exactly with applying the Cartesian Laplacian.
theorem MvPolynomial.diskLaplacian_zernikeAnnulusMode {q a b : ℝ} (hq : q ∈ Set.Ioo 0 1) (ha : -1 < a) (hb : -1 < b) (u : Bool)
(k m : ℕ) :
(MvPolynomial.zernikeAnnulusMode hq ha hb u k m).diskLaplacian =
MvPolynomial.diskRadialLift u
(((Polynomial.semiclassicalJacobiAnnularLaplacianMap (Polynomial.annulusParameter ⟨q, ⋯⟩) ↑m)
(↑(Polynomial.semiclassicalJacobiSequence ⋯ ha hb ↑m) k)).comp
(Polynomial.C (Polynomial.annulusParameter ⟨q, ⋯⟩) * (1 - Polynomial.X)))
m
Lean proof
/-- The Cartesian annular Laplacian preserves angular frequency and phase, with factor 4t. -/
theorem diskLaplacian_zernikeAnnulusMode {q a b : ℝ} (hq : q ∈ Ioo (0 : ℝ) 1)
(ha : -1<a) (hb : -1<b) (u : Bool) (k m : ℕ) :
diskLaplacian (zernikeAnnulusMode hq ha hb u k m) =
diskRadialLift u
((semiclassicalJacobiAnnularLaplacianMap (annulusParameter ⟨q,ne_of_lt hq.2⟩) m
(semiclassicalJacobiSequence (one_lt_annulusParameter hq) ha hb m k)).comp
(Polynomial.C (annulusParameter ⟨q,ne_of_lt hq.2⟩)*(1-Polynomial.X))) m := by
rw [zernikeAnnulusMode, diskLaplacian_diskRadialLift, zernikeAnnulusRadial,
annularLaplacian_comp]
theorem MvPolynomial.diskLaplacian_annulusLift (q : { q // q ≠ 1 }) (u : Bool) (m : ℕ) (p : Polynomial ℝ) :
((MvPolynomial.annulusLift q u m) p).diskLaplacian =
(MvPolynomial.annulusLift q u m)
((Polynomial.semiclassicalJacobiAnnularLaplacianMap (Polynomial.annulusParameter q) ↑m) p)
Lean proof
/-- The banded radial Laplacian is the Cartesian Laplacian of every lifted polynomial. -/
theorem diskLaplacian_annulusLift (q : {q : ℝ // q ≠ 1}) (u : Bool) (m : ℕ) (p : Polynomial ℝ) :
diskLaplacian (annulusLift q u m p) =
annulusLift q u m (semiclassicalJacobiAnnularLaplacianMap (annulusParameter q) m p) := by
change diskLaplacian (diskRadialLift u _ m) = diskRadialLift u _ m
rw [diskLaplacian_diskRadialLift, annularLaplacian_comp]
This is an algebraic operator identity; no boundary-value well-posedness or solver convergence is asserted here.
For the Dirichlet problem, the finite systems are Galerkin systems for an energy inner product. They are definite, hence uniquely solvable at every size, and they give the best approximation in energy. Completing the polynomials in that energy turns this into convergence of the actual coefficient solves, within each angular sector.
Reference details: Nondegenerate annular Dirichlet weight and related results
For \(t\in \mathbb R\setminus \{ 0\} \) and \(\gamma \in \mathbb R\), set \(Ep=(X(1-X)p)'\) and \(A_{t,\gamma }p=(4/t)((t-X)(Ep)'-(\gamma +1)Ep)\). These are linear maps on real polynomials.
/-- In particular the weighted radial Laplacian has no polynomial kernel. -/
theorem semiclassicalJacobiDirichletMap_injective {t : ℝ} (ht : 1<t) (γ : ℝ) :
Function.Injective (semiclassicalJacobiDirichletMap ⟨t,ne_of_gt (lt_trans zero_lt_one ht)⟩ γ) := by
apply LinearMap.ker_eq_bot.mp
rw [LinearMap.ker_eq_bot']
intro p hp
by_contra hne
have h := integralInner_semiclassicalJacobi_dirichlet_neg ht γ hne
simp only [integralInner, hp, eval_zero, zero_mul, MeasureTheory.integral_zero] at h
exact (lt_irrefl 0) h
In the positive orthonormal semiclassical basis with parameters \((t,1,1,\gamma )\), the actual coefficient matrix of \(A\) is symmetric and tridiagonal: entry \((i,j)\) vanishes if \(j+1{\lt}i\) or \(i+1{\lt}j\). Its coefficient action is exact on finite expansions. Multiplication by the physical boundary factor \(t^{-2}x(1-x)\) has a symmetric pentadiagonal coefficient matrix: entry \((i,j)\) vanishes if \(j+2{\lt}i\) or \(i+2{\lt}j\). The mass pairing is strictly positive on nonzero polynomials.
Lean Formalisation
theorem Polynomial.semiclassicalJacobiDirichletMatrix_symm {t : ℝ} (ht : 1 < t) (γ : ℝ) (i j : ℕ) :
Polynomial.semiclassicalJacobiDirichletMatrix ht γ i j = Polynomial.semiclassicalJacobiDirichletMatrix ht γ j i
Lean proof
/-- The actual coefficient entries are symmetric. -/
theorem semiclassicalJacobiDirichletMatrix_symm {t : ℝ} (ht : 1<t) (γ : ℝ) (i j : ℕ) :
semiclassicalJacobiDirichletMatrix ht γ i j =
semiclassicalJacobiDirichletMatrix ht γ j i := by
simp only [semiclassicalJacobiDirichletMatrix, Basis.toMatrix_apply,
semiclassicalJacobiBasis_repr]
exact integralInner_semiclassicalJacobi_dirichlet_symm ht γ _ _
theorem Polynomial.semiclassicalJacobiDirichletMass_eq_zero {t : ℝ} (ht : 1 < t) (γ : ℝ) (i j : ℕ)
(hgap : j + 2 < i ∨ i + 2 < j) : Polynomial.semiclassicalJacobiDirichletMass ht γ i j = 0
Lean proof
/-- The mass matrix has only the main diagonal and its first two neighbors on each side. -/
theorem semiclassicalJacobiDirichletMass_eq_zero {t : ℝ} (ht : 1<t) (γ : ℝ)
(i j : ℕ) (hgap : j+2 < i ∨ i+2 < j) :
semiclassicalJacobiDirichletMass ht γ i j=0 := by
have hu (i j : ℕ) (h : j+2 < i) : semiclassicalJacobiDirichletMass ht γ i j=0 := by
rw [semiclassicalJacobiDirichletMass, Basis.toMatrix_apply, semiclassicalJacobiBasis_repr]
apply (semiclassicalJacobiSequence_spec ht (by norm_num : (-1 : ℝ)<1)
(by norm_num : (-1 : ℝ) < 1) γ).1.integralInner_eq_zero_of_degree_lt
(hasFiniteMoments_semiclassicalJacobiMeasure ht (by norm_num : (-1 : ℝ) < 1) (by norm_num : (-1 : ℝ) < 1))
apply degree_le_natDegree.trans_lt
have hd : (annularDirichletWeight ⟨t,ne_of_gt (lt_trans zero_lt_one ht)⟩).natDegree ≤ 2 := by
unfold annularDirichletWeight
compute_degree
have hp := natDegree_mul_le (p := annularDirichletWeight ⟨t,ne_of_gt (lt_trans zero_lt_one ht)⟩)
(q := semiclassicalJacobiSequence ht (by norm_num : (-1 : ℝ)<1) (by norm_num : (-1 : ℝ) < 1) γ j)
rw [Sequence.natDegree_eq] at hp
exact_mod_cast hp.trans_lt (by omega)
rcases hgap with h | h
· exact hu i j h
· rw [semiclassicalJacobiDirichletMass_symm]
exact hu j i h
Every lifted polynomial \(B_qL_mp\) vanishes at each real point satisfying \(x^2+y^2=q\) or \(x^2+y^2=1\).
Lean Formalisation
theorem MvPolynomial.eval_annulusDirichletLift_eq_zero (q : { q // q ≠ 1 }) (u : Bool) (m : ℕ) (p : Polynomial ℝ)
(v : Fin 2 → ℝ) (hv : v 0 ^ 2 + v 1 ^ 2 = ↑q ∨ v 0 ^ 2 + v 1 ^ 2 = 1) :
(MvPolynomial.eval v) ((MvPolynomial.annulusDirichletLift ⟨↑q, ⋯⟩ u m) p) = 0
Lean proof
/-- Every polynomial synthesized with the boundary factor satisfies both Dirichlet conditions. -/
theorem eval_annulusDirichletLift_eq_zero (q : {q : ℝ // q ≠ 1}) (u : Bool) (m : ℕ) (p : Polynomial ℝ)
(v : Fin 2 → ℝ) (hv : v 0^2+v 1^2=q ∨ v 0^2+v 1^2=1) :
eval v (annulusDirichletLift ⟨q,q.property⟩ u m p)=0 := by
change eval v (annulusBoundaryWeight q * annulusLift ⟨q,q.property⟩ u m p)=0
rw [map_mul, eval_annulusBoundaryWeight_eq_zero q v hv, zero_mul]
Hence each angular sector has the symmetric tridiagonal Dirichlet block and pentadiagonal mass block above. The corresponding finite-coefficient operations reconstruct these Cartesian polynomial identities exactly, with no coupling of angular frequency or phase.
For \(t{\gt}1\), real \(\gamma \), and every \(N\ge 0\), the leading \(N\times N\) Dirichlet section \(A_N\) is negative definite, meaning \(-A_N\) is positive definite. The corresponding mass section is positive definite. Both are invertible; in particular, \(A_Nv=g\) has exactly one solution for every finite right-hand side.
theorem Polynomial.existsUnique_semiclassicalJacobiDirichletSection {t : ℝ} (ht : 1 < t) (γ : ℝ) (N : ℕ) (f : Fin N → ℝ) :
∃! v, (Polynomial.semiclassicalJacobiDirichletSection ht γ N).mulVec v = f
Lean proof
/-- Every finite right-hand side has exactly one coefficient solution. -/
theorem existsUnique_semiclassicalJacobiDirichletSection {t : ℝ} (ht : 1<t)
(γ : ℝ) (N : ℕ) (f : Fin N → ℝ) :
∃! v : Fin N → ℝ, semiclassicalJacobiDirichletSection ht γ N *ᵥ v=f := by
have hu := isUnit_semiclassicalJacobiDirichletSection ht γ N
exact (Function.bijective_iff_existsUnique _).mp
⟨Matrix.mulVec_injective_iff_isUnit.mpr hu, Matrix.mulVec_surjective_iff_isUnit.mpr hu⟩ f
For \(t=2\), that is \(q=1/2\), and angular mode \(\gamma =3\), generate the orthonormal family for \(x(1-x)(t-x)^3\) on \((0,1)\) by the Stieltjes procedure on Gauss–Legendre nodes, together with its first two derivatives. The \(10\times 10\) matrix of \(A\) is symmetric and tridiagonal up to rounding, and negative definite, as Theorems 5.4.23 and 5.4.27 state.
using LinearAlgebra
t, g, N = 2.0, 3.0, 10 # annulus q = 1/2, angular mode 3
n = 120 # Gauss-Legendre nodes on (0,1)
E = eigen(SymTridiagonal(zeros(n), [k/sqrt(4k^2 - 1) for k in 1:n-1]))
x = (E.values .+ 1) ./ 2
w = E.vectors[1, :].^2 .* x .* (1 .- x) .* (t .- x).^g
# Stieltjes: orthonormal Q_k for x(1-x)(t-x)^g dx, with Q_k', Q_k''
Q, D1, D2, beta = [ones(n) / sqrt(sum(w))], [zeros(n)], [zeros(n)], [0.0]
for k in 0:N
a = dot(w, x .* Q[end].^2)
r = (x .- a) .* Q[end]
r1 = Q[end] .+ (x .- a) .* D1[end]
r2 = 2 .* D1[end] .+ (x .- a) .* D2[end]
if k > 0
r -= beta[end] .* Q[end-1]
r1 -= beta[end] .* D1[end-1]
r2 -= beta[end] .* D2[end-1]
end
push!(beta, sqrt(dot(w, r.^2)))
push!(Q, r / beta[end])
push!(D1, r1 / beta[end])
push!(D2, r2 / beta[end])
end
S, S1 = x .* (1 .- x), 1 .- 2x # S = x(1-x), S'' = -2
E1(j) = S1 .* Q[j] .+ S .* D1[j] # Ep = (Sp)'
E2(j) = -2 .* Q[j] .+ 2 .* S1 .* D1[j] .+ S .* D2[j] # (Ep)'
Ap(j) = (4/t) .* ((t .- x) .* E2(j) .- (g + 1) .* E1(j))
A = [dot(w, Ap(j) .* Q[i]) for i in 1:N, j in 1:N]
off = maximum(abs(A[i, j]) for i in 1:N, j in 1:N if abs(i - j) > 1)
(norm(A - A') / norm(A), off / norm(A), maximum(eigvals(Symmetric(A))))
# (~1e-14, ~1e-15, negative)
Theorem
5.4.28Polynomial Galerkin interpretation of annular sections
Let \(V_N\) be the span of the first \(N\) semiclassical polynomials with parameters \((t,1,1,\gamma )\). For polynomial forcing \(f\), the square-section system is exactly
There is exactly one coefficient vector solving these equations. If the exact radial solution already belongs to \(V_N\), the finite system recovers its coefficients. This is residual orthogonality, not an assertion that the full polynomial residual vanishes for arbitrary forcing.
Lean Formalisation
theorem Polynomial.semiclassicalJacobiDirichletSection_eq_iff_galerkin {t : ℝ} (ht : 1 < t) (γ : ℝ) (N : ℕ) (f : Polynomial ℝ)
(v : Fin N → ℝ) :
(Polynomial.semiclassicalJacobiDirichletSection ht γ N).mulVec v =
Polynomial.semiclassicalJacobiDirichletLoad ht γ N f ↔
∀ (w : Fin N → ℝ),
Polynomial.integralInner (Polynomial.semiclassicalJacobiMeasure ⟨t, ht⟩ 1 1 γ)
(Polynomial.IntegrablePair.of (Polynomial.semiclassicalJacobiMeasure ⟨t, ht⟩ 1 1 γ)
((Polynomial.semiclassicalJacobiDirichletMap ⟨t, ⋯⟩ γ)
(Polynomial.semiclassicalJacobiDirichletTrial ht γ N v) -
f)
(Polynomial.semiclassicalJacobiDirichletTrial ht γ N w) ⋯) =
0
Lean proof
/-- Solving the coefficient system is equivalent to orthogonality of the residual
against every polynomial in the finite trial space. -/
theorem semiclassicalJacobiDirichletSection_eq_iff_galerkin {t : ℝ} (ht : 1<t)
(γ : ℝ) (N : ℕ) (f : ℝ[X]) (v : Fin N → ℝ) :
semiclassicalJacobiDirichletSection ht γ N *ᵥ v =
semiclassicalJacobiDirichletLoad ht γ N f ↔
∀ w : Fin N → ℝ, integralInner (semiclassicalJacobiMeasure ⟨t, by assumption⟩ 1 1 γ) (IntegrablePair.of (semiclassicalJacobiMeasure ⟨t, by assumption⟩ 1 1 γ) (semiclassicalJacobiDirichletMap ⟨t,ne_of_gt (lt_trans zero_lt_one ht)⟩ γ (semiclassicalJacobiDirichletTrial ht γ N v)-f) (semiclassicalJacobiDirichletTrial ht γ N w)) = 0 := by
have hμ := hasFiniteMoments_semiclassicalJacobiMeasure (γ := γ) ht
(by norm_num : (-1 : ℝ)<1) (by norm_num : (-1 : ℝ)<1)
have hsmul (p q : ℝ[X]) (a : ℝ) := integralInner_smul_left _ p q a
(h := hμ.integrable_mul _ _)
constructor
· intro h w
rw [integralInner_comm]
dsimp only [semiclassicalJacobiDirichletTrial]
rw [integralInner_sum_left hμ]
apply Finset.sum_eq_zero
intro i hi
have hrow := semiclassicalJacobiDirichletSection_mulVec ht γ N v i
dsimp only [semiclassicalJacobiDirichletTrial] at hrow
rw [hsmul, integralInner_comm, integralInner_sub_left hμ,
← hrow, congrFun h i]
simp [semiclassicalJacobiDirichletLoad]
· intro h
funext i
have hi := h (Pi.single i 1)
simp only [semiclassicalJacobiDirichletTrial_single] at hi
rw [integralInner_sub_left hμ, ← semiclassicalJacobiDirichletSection_mulVec] at hi
exact sub_eq_zero.mp hi
theorem Polynomial.semiclassicalJacobiDirichletGalerkin_exact_on_trial {t : ℝ} (ht : 1 < t) (γ : ℝ) (N : ℕ) (v w : Fin N → ℝ)
(hv :
(Polynomial.semiclassicalJacobiDirichletSection ht γ N).mulVec v =
Polynomial.semiclassicalJacobiDirichletLoad ht γ N
((Polynomial.semiclassicalJacobiDirichletMap ⟨t, ⋯⟩ γ)
(Polynomial.semiclassicalJacobiDirichletTrial ht γ N w))) :
v = w
Lean proof
/-- If the exact radial solution is already in the trial space, the finite solve recovers it. -/
theorem semiclassicalJacobiDirichletGalerkin_exact_on_trial {t : ℝ} (ht : 1<t)
(γ : ℝ) (N : ℕ) (v w : Fin N → ℝ)
(hv : semiclassicalJacobiDirichletSection ht γ N *ᵥ v =
semiclassicalJacobiDirichletLoad ht γ N
(semiclassicalJacobiDirichletMap ⟨t,ne_of_gt (lt_trans zero_lt_one ht)⟩ γ (semiclassicalJacobiDirichletTrial ht γ N w))) :
v=w := by
apply (Matrix.mulVec_injective_iff_isUnit.mpr
(isUnit_semiclassicalJacobiDirichletSection ht γ N))
rw [hv]
funext i
exact (semiclassicalJacobiDirichletSection_mulVec ht γ N w i).symm
For \(t{\gt}1\) and real \(\gamma \), write \(E(p)=-\langle Ap,p\rangle _{1,1,\gamma }\); finite moments ensure this pairing exists. If \(u\) is a polynomial and \(u_N\in V_N\) solves the Galerkin system with forcing \(Au\), then
\[ E(u-u_N)\le E(u-z)\qquad (z\in V_N). \]
Energy-orthogonal polynomial vectors satisfy the exact Pythagorean identity.
theorem Polynomial.semiclassicalJacobiDirichletGalerkin_bestApproximation {t : ℝ} (ht : 1 < t) (γ : ℝ) (N : ℕ)
(u : Polynomial ℝ) (v : Fin N → ℝ)
(hv :
(Polynomial.semiclassicalJacobiDirichletSection ht γ N).mulVec v =
Polynomial.semiclassicalJacobiDirichletLoad ht γ N ((Polynomial.semiclassicalJacobiDirichletMap ⟨t, ⋯⟩ γ) u))
(w : Fin N → ℝ) :
Polynomial.semiclassicalJacobiDirichletEnergy ⟨t, ht⟩ γ (u - Polynomial.semiclassicalJacobiDirichletTrial ht γ N v) ≤
Polynomial.semiclassicalJacobiDirichletEnergy ⟨t, ht⟩ γ (u - Polynomial.semiclassicalJacobiDirichletTrial ht γ N w)
Lean proof
/-- Galerkin orthogonality makes the discrete polynomial solution energy-optimal. -/
theorem semiclassicalJacobiDirichletGalerkin_bestApproximation {t : ℝ} (ht : 1<t)
(γ : ℝ) (N : ℕ) (u : ℝ[X]) (v : Fin N → ℝ)
(hv : semiclassicalJacobiDirichletSection ht γ N *ᵥ v =
semiclassicalJacobiDirichletLoad ht γ N (semiclassicalJacobiDirichletMap ⟨t,ne_of_gt (lt_trans zero_lt_one ht)⟩ γ u))
(w : Fin N → ℝ) :
semiclassicalJacobiDirichletEnergy ⟨t, ht⟩ γ (u-semiclassicalJacobiDirichletTrial ht γ N v) ≤
semiclassicalJacobiDirichletEnergy ⟨t, ht⟩ γ (u-semiclassicalJacobiDirichletTrial ht γ N w) := by
let vP := semiclassicalJacobiDirichletTrial ht γ N v
let wP := semiclassicalJacobiDirichletTrial ht γ N w
have h := (semiclassicalJacobiDirichletSection_eq_iff_galerkin ht γ N _ v).mp hv (v-w)
have he : semiclassicalJacobiDirichletTrial ht γ N (v-w)=vP-wP := by
simp [semiclassicalJacobiDirichletTrial, vP, wP, sub_smul, Finset.sum_sub_distrib]
simp only [he, ← map_sub] at h
have ho : integralInner (semiclassicalJacobiMeasure ⟨t, by assumption⟩ 1 1 γ) (IntegrablePair.of (semiclassicalJacobiMeasure ⟨t, by assumption⟩ 1 1 γ) (semiclassicalJacobiDirichletMap ⟨t,ne_of_gt (lt_trans zero_lt_one ht)⟩ γ (u-vP)) (vP-wP) (h := (hasFiniteMoments_semiclassicalJacobiMeasure_one_one (γ := γ) ht).integrable_mul _ _))=0 := by
have hm : u-vP=-(vP-u) := by abel
simp only [hm, map_neg, ← neg_one_smul ℝ
(semiclassicalJacobiDirichletMap ⟨t,ne_of_gt (lt_trans zero_lt_one ht)⟩ γ (vP-u))]
rw [integralInner_smul_left (h := (hasFiniteMoments_semiclassicalJacobiMeasure_one_one (γ := γ) ht).integrable_mul _ _), h, mul_zero]
have hp := semiclassicalJacobiDirichletEnergy_pythagoras ht γ (u-vP) (vP-wP) ho
have hsum : (u-vP)+(vP-wP)=u-wP := by abel
simp only [hsum] at hp
have hn := semiclassicalJacobiDirichletEnergy_nonneg ht γ (vP-wP)
change semiclassicalJacobiDirichletEnergy ⟨t, ht⟩ γ (u-vP) ≤
semiclassicalJacobiDirichletEnergy ⟨t, ht⟩ γ (u-wP)
linarith
For fixed \(t{\gt}1\) and real \(\gamma \), equip radial polynomials with the inner product \((p,z)_E=-\langle Ap,z\rangle _{1,1,\gamma }\) of Theorem 5.4.22, and let \(H_{t,\gamma }\) be its Hilbert completion, with the canonical isometric polynomial embedding \(\iota \). For an annular angular sector, set \(\gamma =m\).
/-- The Hilbert space obtained by completing radial polynomials in Dirichlet energy. -/
abbrev Space (t : Set.Ioi (1 : ℝ)) (γ : ℝ) := UniformSpace.Completion (PolynomialSpace t γ)
The energy norm satisfies \(\| p\| _E^2=E(p)\). The embedding satisfies \((\iota p,\iota z)=-\langle Ap,z\rangle _{1,1,\gamma }\), and its range is dense in \(H_{t,\gamma }\).
Lean Formalisation
theorem Polynomial.SemiclassicalJacobiEnergy.norm_sq_eq_energy (t : ↑(Set.Ioi 1)) (γ : ℝ)
(p : Polynomial.SemiclassicalJacobiEnergy.PolynomialSpace t γ) :
‖p‖ ^ 2 =
Polynomial.semiclassicalJacobiDirichletEnergy t γ ((Polynomial.SemiclassicalJacobiEnergy.polynomialEquiv t γ) p)
Lean proof
/-- The norm squared is the proved polynomial Dirichlet energy. -/
theorem norm_sq_eq_energy (t : Set.Ioi (1 : ℝ)) (γ : ℝ) (p : PolynomialSpace t γ) :
‖p‖^2 = semiclassicalJacobiDirichletEnergy t γ (polynomialEquiv t γ p) := by
rw [← real_inner_self_eq_norm_sq]
rfl
Let \(\ell \) be any continuous linear functional on \(H_{t,\gamma }\), and let \(u\) be the unique energy solution \((u,z)_E=\ell (z)\) for every \(z\in H_{t,\gamma }\). Let \(Q_j\) denote the embedded \((t,1,1,\gamma )\) semiclassical trial polynomials. Solve the actual finite Dirichlet system
theorem Polynomial.SemiclassicalJacobiEnergy.trialSpace_closure_iSup (t : ↑(Set.Ioi 1)) (γ : ℝ) :
(⨆ N, Polynomial.SemiclassicalJacobiEnergy.trialSpace t γ N).topologicalClosure = ⊤
Lean proof
/-- The union of finite trial spaces is dense in the chosen energy completion. -/
theorem trialSpace_closure_iSup (t : Set.Ioi (1 : ℝ)) (γ : ℝ) :
(⨆ N, trialSpace t γ N).topologicalClosure=⊤ := by
apply le_antisymm le_top
intro x hx
rw [← SetLike.mem_coe, Submodule.topologicalClosure_coe]
apply closure_mono (s := Set.range (embed t γ)) ?_ (denseRange_embed t γ x)
rintro y ⟨p, rfl⟩
have hp := polynomialEmbed_mem_trialSpace t γ (polynomialEquiv t γ p)
simp only [polynomialEmbed, LinearMap.comp_apply, LinearEquiv.coe_coe,
LinearEquiv.symm_apply_apply, LinearIsometry.coe_toLinearMap] at hp
exact (le_iSup (trialSpace t γ) _) hp
def Polynomial.SemiclassicalJacobiEnergy.solution (t : ↑(Set.Ioi 1)) (γ : ℝ)
(ℓ : Polynomial.SemiclassicalJacobiEnergy.Space t γ →L[ℝ] ℝ) : Polynomial.SemiclassicalJacobiEnergy.Space t γ
Lean definition
/-- The unique energy weak solution for a continuous load. -/
def solution (t : Set.Ioi (1 : ℝ)) (γ : ℝ) (ℓ : Space t γ →L[ℝ] ℝ) : Space t γ :=
(InnerProductSpace.toDual ℝ (Space t γ)).symm ℓ
theorem Polynomial.SemiclassicalJacobiEnergy.existsUnique_solution (t : ↑(Set.Ioi 1)) (γ : ℝ)
(ℓ : Polynomial.SemiclassicalJacobiEnergy.Space t γ →L[ℝ] ℝ) :
∃! x, ∀ (z : Polynomial.SemiclassicalJacobiEnergy.Space t γ), inner ℝ x z = ℓ z
Lean proof
/-- The energy weak solution is unique. -/
theorem existsUnique_solution (t : Set.Ioi (1 : ℝ)) (γ : ℝ) (ℓ : Space t γ →L[ℝ] ℝ) :
∃! x : Space t γ, ∀ z : Space t γ, inner ℝ x z = ℓ z := by
refine ⟨solution t γ ℓ, solution_weak t γ ℓ, ?_⟩
intro y hy
apply (InnerProductSpace.toDual ℝ (Space t γ)).injective
ext z
change inner ℝ y z = inner ℝ (solution t γ ℓ) z
rw [hy, solution_weak]
def Polynomial.SemiclassicalJacobiEnergy.coefficients (t : ↑(Set.Ioi 1)) (γ : ℝ) (N : ℕ)
(ℓ : Polynomial.SemiclassicalJacobiEnergy.Space t γ →L[ℝ] ℝ) : Fin N → ℝ
Lean definition
/-- The unique solution of the already-defined finite Dirichlet matrix system. -/
def coefficients (t : Set.Ioi (1 : ℝ)) (γ : ℝ) (N : ℕ)
(ℓ : Space t γ →L[ℝ] ℝ) : Fin N → ℝ :=
Classical.choose (existsUnique_semiclassicalJacobiDirichletSection (gt_one t) γ N (load t γ N ℓ))
theorem Polynomial.SemiclassicalJacobiEnergy.coefficients_spec (t : ↑(Set.Ioi 1)) (γ : ℝ) (N : ℕ)
(ℓ : Polynomial.SemiclassicalJacobiEnergy.Space t γ →L[ℝ] ℝ) :
(Polynomial.semiclassicalJacobiDirichletSection ⋯ γ N).mulVec
(Polynomial.SemiclassicalJacobiEnergy.coefficients t γ N ℓ) =
Polynomial.SemiclassicalJacobiEnergy.load t γ N ℓ
Lean proof
/-- The chosen coefficients solve the actual square-section system. -/
theorem coefficients_spec (t : Set.Ioi (1 : ℝ)) (γ : ℝ) (N : ℕ)
(ℓ : Space t γ →L[ℝ] ℝ) :
semiclassicalJacobiDirichletSection (gt_one t) γ N *ᵥ coefficients t γ N ℓ = load t γ N ℓ :=
(Classical.choose_spec
(existsUnique_semiclassicalJacobiDirichletSection (gt_one t) γ N (load t γ N ℓ))).1
theorem Polynomial.SemiclassicalJacobiEnergy.trialEmbed_coefficients_eq_projection (t : ↑(Set.Ioi 1)) (γ : ℝ) (N : ℕ)
(ℓ : Polynomial.SemiclassicalJacobiEnergy.Space t γ →L[ℝ] ℝ) :
Polynomial.SemiclassicalJacobiEnergy.trialEmbed t γ N (Polynomial.SemiclassicalJacobiEnergy.coefficients t γ N ℓ) =
(Polynomial.SemiclassicalJacobiEnergy.projection t γ N) (Polynomial.SemiclassicalJacobiEnergy.solution t γ ℓ)
Lean proof
/-- The actual finite coefficient solution equals the energy orthogonal projection. -/
theorem trialEmbed_coefficients_eq_projection (t : Set.Ioi (1 : ℝ)) (γ : ℝ) (N : ℕ)
(ℓ : Space t γ →L[ℝ] ℝ) :
trialEmbed t γ N (coefficients t γ N ℓ) = projection t γ N (solution t γ ℓ) := by
symm
apply Submodule.eq_starProjection_of_mem_of_inner_eq_zero (trialEmbed_mem t γ N _)
intro z hz
rw [trialSpace_eq_span] at hz
induction hz using Submodule.span_induction with
| mem z hz =>
obtain ⟨i, rfl⟩ := hz
rw [inner_sub_left, solution_weak, inner_trialEmbed_basisVector, coefficients_spec]
simp [load]
| zero => simp
| add x y hx hy hx' hy' => simp [inner_add_right, hx', hy']
| smul a x hx hx' => simp [inner_smul_right, hx']
theorem Polynomial.SemiclassicalJacobiEnergy.coefficients_bestApproximation (t : ↑(Set.Ioi 1)) (γ : ℝ) (N : ℕ)
(ℓ : Polynomial.SemiclassicalJacobiEnergy.Space t γ →L[ℝ] ℝ) (y : Polynomial.SemiclassicalJacobiEnergy.Space t γ)
(hy : y ∈ Polynomial.SemiclassicalJacobiEnergy.trialSpace t γ N) :
‖Polynomial.SemiclassicalJacobiEnergy.solution t γ ℓ -
Polynomial.SemiclassicalJacobiEnergy.trialEmbed t γ N
(Polynomial.SemiclassicalJacobiEnergy.coefficients t γ N ℓ)‖ ≤
‖Polynomial.SemiclassicalJacobiEnergy.solution t γ ℓ - y‖
Lean proof
/-- The finite coefficient solution has the best possible energy error in its trial space. -/
theorem coefficients_bestApproximation (t : Set.Ioi (1 : ℝ)) (γ : ℝ) (N : ℕ)
(ℓ : Space t γ →L[ℝ] ℝ) (y : Space t γ) (hy : y ∈ trialSpace t γ N) :
‖solution t γ ℓ-trialEmbed t γ N (coefficients t γ N ℓ)‖ ≤ ‖solution t γ ℓ-y‖ := by
rw [trialEmbed_coefficients_eq_projection]
exact projection_bestApproximation t γ N _ y hy
theorem Polynomial.SemiclassicalJacobiEnergy.norm_trialEmbed_coefficients_le (t : ↑(Set.Ioi 1)) (γ : ℝ) (N : ℕ)
(ℓ : Polynomial.SemiclassicalJacobiEnergy.Space t γ →L[ℝ] ℝ) :
‖Polynomial.SemiclassicalJacobiEnergy.trialEmbed t γ N (Polynomial.SemiclassicalJacobiEnergy.coefficients t γ N ℓ)‖ ≤
‖ℓ‖
Lean proof
/-- The reconstructed solutions are uniformly stable in the energy norm. -/
theorem norm_trialEmbed_coefficients_le (t : Set.Ioi (1 : ℝ)) (γ : ℝ) (N : ℕ)
(ℓ : Space t γ →L[ℝ] ℝ) : ‖trialEmbed t γ N (coefficients t γ N ℓ)‖ ≤ ‖ℓ‖ := by
rw [trialEmbed_coefficients_eq_projection]
exact ((trialSpace t γ N).norm_starProjection_apply_le (solution t γ ℓ)).trans_eq
((InnerProductSpace.toDual ℝ (Space t γ)).symm.norm_map ℓ)
theorem Polynomial.SemiclassicalJacobiEnergy.tendsto_trialEmbed_coefficients (t : ↑(Set.Ioi 1)) (γ : ℝ)
(ℓ : Polynomial.SemiclassicalJacobiEnergy.Space t γ →L[ℝ] ℝ) :
Filter.Tendsto
(fun N =>
Polynomial.SemiclassicalJacobiEnergy.trialEmbed t γ N (Polynomial.SemiclassicalJacobiEnergy.coefficients t γ N ℓ))
Filter.atTop (nhds (Polynomial.SemiclassicalJacobiEnergy.solution t γ ℓ))
Lean proof
/-- As radial degree grows, the actual finite coefficient solves converge in energy. -/
theorem tendsto_trialEmbed_coefficients (t : Set.Ioi (1 : ℝ)) (γ : ℝ)
(ℓ : Space t γ →L[ℝ] ℝ) :
Tendsto (fun N ↦ trialEmbed t γ N (coefficients t γ N ℓ)) atTop (𝓝 (solution t γ ℓ)) := by
simp only [trialEmbed_coefficients_eq_projection]
exact tendsto_projection t γ _
No regularity-dependent convergence rate is asserted here.
Distinct angular sectors are orthogonal in the physical energy, so the sector problems combine. Summing the sector energy spaces gives a completed planar energy space. In it, solving the tridiagonal radial system of Theorem 5.4.23 in each retained sector yields the orthogonal projection onto the joint trial space, and these solves converge as the retained sectors and radial degrees grow together.
Reference details: Annular sector energy scale and related results
For \(q\ne 1\) and an angular mode, set \(\kappa _m=c_m/(2t(q)^{m+3})\), using the natural-number power. Here \(c_m\) is the squared angular norm, with \(c_m=0\) for the zero sine mode.
Let \(0{\lt}q{\lt}1\), \(t=(1-q)^{-1}\), and \(B=(1-r^2)(r^2-q)\). For a valid real angular harmonic \(H_m\) (excluding the zero sine mode), set \(L_m p=p(t(1-r^2))H_m\) and
\[ \kappa _m=\frac{c_m}{2t^{m+3}}{\gt}0, \qquad c_0=2\pi \text{ for the constant cosine mode},\quad c_m=\pi \text{ otherwise}. \]
With the unweighted annular measure \(\mu _{q,0,0}\),
Let \(\mathcal H_q=\bigoplus _{s}^{\ell ^2}H_{t,m(s)}\), indexed by all real cosine and nonzero sine sectors \(s\). A physical polynomial \(BL_{m(s)}p\) embeds into sector \(s\) as \(\sqrt{\kappa _{m(s)}}\, p\).
Lean Formalisation
def MvPolynomial.AnnularEnergy.Sector : Type
Lean definition
/-- Valid real harmonics: all cosine modes and the nonzero sine modes. -/
abbrev Sector := {s : Bool × ℕ // s.1 = true → s.2 ≠ 0}
Write \(U_p=BL_{m(s)}p\). The embedding of sector \(s\) preserves the planar negative-Laplacian pairing, \((\iota _sp,\iota _sz)=-\int \Delta U_p\, U_z\, d\mu \), where \(\mu \) is the annular measure with \(a=b=0\). Embeddings of distinct sectors are orthogonal. The finite angular and radial trial spaces have dense union in \(\mathcal H_q\).
For any continuous real linear load \(\ell \) on \(\mathcal H_q\), there is a unique \(u\) satisfying \((u,z)=\ell (z)\) for all \(z\in \mathcal H_q\). Restrict the load to each normalized sector and solve its existing tridiagonal radial Dirichlet system. The sum \(u_{S,N}\) of the retained sector reconstructions is exactly the orthogonal projection of \(u\) onto \(V_{S,N}\). Hence
In particular, taking every valid angular frequency \(m{\lt}N\) and radial degree below \(N\) gives convergence as \(N\to \infty \). The coordinates use the normalization in Definition 5.4.36.
Lean Formalisation
theorem MvPolynomial.AnnularEnergy.existsUnique_solution (q : ↑(Set.Ioo 0 1))
(ℓ : ↥(MvPolynomial.AnnularEnergy.Space q) →L[ℝ] ℝ) :
∃! x, ∀ (z : ↥(MvPolynomial.AnnularEnergy.Space q)), inner ℝ x z = ℓ z
Lean proof
/-- There is exactly one completed energy solution for every continuous load. -/
theorem existsUnique_solution (q : Set.Ioo (0 : ℝ) 1) (ℓ : Space q →L[ℝ] ℝ) :
∃! x : Space q, ∀ z : Space q, inner ℝ x z = ℓ z := by
refine ⟨solution q ℓ, solution_weak q ℓ, ?_⟩
intro y hy
apply ext_inner_right ℝ
intro z
rw [hy, solution_weak]
theorem MvPolynomial.AnnularEnergy.mem_frequencyCutoff (N : ℕ) (s : MvPolynomial.AnnularEnergy.Sector) :
s ∈ MvPolynomial.AnnularEnergy.frequencyCutoff N ↔ (↑s).2 < N
Lean proof
/-- The angular cutoff has exactly the intended frequency bound. -/
theorem mem_frequencyCutoff (N : ℕ) (s : Sector) :
s ∈ frequencyCutoff N ↔ s.val.2 < N := by
simp [frequencyCutoff]
No regularity rate or boundedness of arbitrary physical forcing as an energy load is asserted.
Green’s identity identifies the energy with the Cartesian Dirichlet integral \(\int \nabla U\cdot \nabla V\, dA\) of boundary-weighted lifts, sector by sector. A weighted derivative embeds the completed radial energy isometrically into an \(L^2\) space, where the derivatives of the computed solutions converge. Theorem 5.4.57 below identifies the completed planar space with physical \(H^1_0\) functions.
Reference details: Polynomial boundary flux and Green identity on an annulus and related results
Theorem
5.4.39Polynomial boundary flux and Green identity on an annulus
Let \(0{\lt}q{\lt}1\), let \(dA\) be the unweighted annular measure, and put \(B_q=(1-x^2-y^2)(x^2+y^2-q)\). For arbitrary Cartesian polynomials \(p,z\),
\[ \int \Delta (B_q^2p)\, dA=0,\qquad \int \nabla (B_qp)\cdot \nabla (B_qz)\, dA =-\int \Delta (B_qp)\, B_qz\, dA. \]
The Laplacian pairing on this boundary-weighted polynomial space is symmetric. More explicitly, the integrated Laplacian of a radial lift with radial polynomial \(F(s)\) is zero in every nonconstant angular sector, and is \(4\pi (F'(1)-qF'(q))\) in the constant sector.
Lean Formalisation
theorem MvPolynomial.eq_top_of_annulusLift_mem {q : ℝ} (hq : q ∈ Set.Ioo 0 1) (K : Submodule ℝ (MvPolynomial (Fin 2) ℝ))
(hK : ∀ (u : Bool) (m : ℕ) (p : Polynomial ℝ), (MvPolynomial.annulusLift ⟨q, ⋯⟩ u m) p ∈ K) : K = ⊤
Lean proof
/-- A submodule containing every annular radial lift contains every Cartesian polynomial. -/
theorem eq_top_of_annulusLift_mem {q : ℝ} (hq : q ∈ Ioo (0 : ℝ) 1)
(K : Submodule ℝ (MvPolynomial (Fin 2) ℝ))
(hK : ∀ u m p, annulusLift ⟨q,ne_of_lt hq.2⟩ u m p ∈ K) : K = ⊤ := by
classical
apply top_unique
intro p hp
let v : restrictTotalDegree (Fin 2) ℝ p.totalDegree :=
⟨p, (mem_restrictTotalDegree (Fin 2) _ _).mpr le_rfl⟩
let b := zernikeAnnulusDegreeBasis hq (by norm_num : (-1 : ℝ) < 0)
(by norm_num : (-1 : ℝ) < 0) p.totalDegree
have he := congrArg (fun w : restrictTotalDegree (Fin 2) ℝ p.totalDegree ↦
(w : MvPolynomial (Fin 2) ℝ)) (b.linearCombination_repr v)
change ((∑ i ∈ (b.repr v).support, (b.repr v) i • b i :
restrictTotalDegree (Fin 2) ℝ p.totalDegree) : MvPolynomial (Fin 2) ℝ) = p at he
simp only [Submodule.coe_sum, Submodule.coe_smul] at he
rw [← he]
apply K.sum_mem
intro i hi
apply K.smul_mem
simp only [b, zernikeAnnulusDegreeBasis_apply, zernikeAnnulus]
rw [← annulusLift_basis]
exact hK _ _ _
theorem MvPolynomial.diskLaplacian_mul (p z : MvPolynomial (Fin 2) ℝ) :
(p * z).diskLaplacian = p.diskLaplacian * z + p * z.diskLaplacian + 2 * p.diskGradientProduct z
Lean proof
/-- The Cartesian Laplacian product rule, with its cross-gradient term explicit. -/
theorem diskLaplacian_mul (p z : MvPolynomial (Fin 2) ℝ) :
diskLaplacian (p*z) = diskLaplacian p*z + p*diskLaplacian z + 2*diskGradientProduct p z := by
simp only [diskLaplacian, diskGradientProduct, pderiv_mul, map_add]
ring
from radial energy polynomials to \(L^2(\mu _{t,0,0,\gamma +1})\) extends to a linear isometry \(D:H_{t,\gamma }\to L^2(\mu _{t,0,0,\gamma +1})\). Its range is exactly the closed \(L^2\) closure of these polynomial derivative classes; no surjectivity onto all of \(L^2\) is claimed. For every \(g\) in this \(L^2\) space, \(\ell _g(u)=\langle g,Du\rangle \) is a continuous energy load of norm at most \(\| g\| _{L^2}\), and its finite coefficient reconstructions are uniformly bounded by this norm. The existing energy convergence also gives strong \(L^2\) convergence of the realized derivatives.
Lean Formalisation
theorem Polynomial.SemiclassicalJacobiEnergy.inner_polynomialDerivative (t : ↑(Set.Ioi 1)) (γ : ℝ)
(p z : Polynomial.SemiclassicalJacobiEnergy.PolynomialSpace t γ) :
inner ℝ ((Polynomial.SemiclassicalJacobiEnergy.polynomialDerivative t γ) p)
((Polynomial.SemiclassicalJacobiEnergy.polynomialDerivative t γ) z) =
inner ℝ p z
Lean proof
/-- The concrete derivative pairing equals the polynomial energy pairing. -/
theorem inner_polynomialDerivative (t : Set.Ioi (1 : ℝ)) (γ : ℝ)
(p z : PolynomialSpace t γ) :
inner ℝ (polynomialDerivative t γ p) (polynomialDerivative t γ z) = inner ℝ p z := by
simp only [polynomialDerivative, LinearMap.smul_apply, LinearMap.comp_apply,
LinearEquiv.coe_coe, real_inner_smul_left, inner_smul_right, inner_polynomialToL2]
rw [← mul_assoc, ← pow_two, Real.sq_sqrt (by have := gt_one t; positivity)]
change (4 / (t : ℝ)) * integralInner _ (IntegrablePair.of _ _ _) =
-integralInner _ (IntegrablePair.of _ (semiclassicalJacobiDirichletMap ⟨t,ne_of_gt (lt_trans zero_lt_one t.property)⟩ γ (polynomialEquiv t γ p)) (polynomialEquiv t γ z))
rw [integralInner_semiclassicalJacobi_dirichlet (gt_one t)]
ring
def Polynomial.SemiclassicalJacobiEnergy.derivativeRealization (t : ↑(Set.Ioi 1)) (γ : ℝ) :
Polynomial.SemiclassicalJacobiEnergy.Space t γ →ₗᵢ[ℝ] ↥(Polynomial.SemiclassicalJacobiEnergy.DerivativeSpace t γ)
Lean definition
/-- The completed energy space embeds isometrically into concrete weighted L² derivatives. -/
def derivativeRealization (t : Set.Ioi (1 : ℝ)) (γ : ℝ) :
Space t γ →ₗᵢ[ℝ] DerivativeSpace t γ := (polynomialDerivativeIsometry t γ).fromCompletion
theorem Polynomial.SemiclassicalJacobiEnergy.derivativeRealization_embed (t : ↑(Set.Ioi 1)) (γ : ℝ)
(p : Polynomial.SemiclassicalJacobiEnergy.PolynomialSpace t γ) :
(Polynomial.SemiclassicalJacobiEnergy.derivativeRealization t γ)
((Polynomial.SemiclassicalJacobiEnergy.embed t γ) p) =
(Polynomial.SemiclassicalJacobiEnergy.polynomialDerivative t γ) p
Lean proof
/-- The completed realization has the prescribed value on polynomial vectors. -/
theorem derivativeRealization_embed (t : Set.Ioi (1 : ℝ)) (γ : ℝ)
(p : PolynomialSpace t γ) :
derivativeRealization t γ (embed t γ p) = polynomialDerivative t γ p :=
(polynomialDerivativeIsometry t γ).fromCompletion_apply_coe p
/-- The realization is faithful: no two completed energy vectors have the same derivative class. -/
theorem derivativeRealization_injective (t : Set.Ioi (1 : ℝ)) (γ : ℝ) :
Function.Injective (derivativeRealization t γ) := (derivativeRealization t γ).injective
theorem Polynomial.SemiclassicalJacobiEnergy.range_derivativeRealization (t : ↑(Set.Ioi 1)) (γ : ℝ) :
Set.range ⇑(Polynomial.SemiclassicalJacobiEnergy.derivativeRealization t γ) =
closure (Set.range ⇑(Polynomial.SemiclassicalJacobiEnergy.polynomialDerivative t γ))
Lean proof
/-- The realized space is exactly the L² closure of the scaled polynomial derivatives. -/
theorem range_derivativeRealization (t : Set.Ioi (1 : ℝ)) (γ : ℝ) :
Set.range (derivativeRealization t γ) = closure (Set.range (polynomialDerivative t γ)) := by
have he : derivativeRealization t γ '' Set.range (embed t γ) =
Set.range (polynomialDerivative t γ) := by
rw [← Set.range_comp]
congr 1
funext p
exact derivativeRealization_embed t γ p
apply Set.Subset.antisymm
· have h := (derivativeRealization t γ).continuous.range_subset_closure_image_dense
(denseRange_embed t γ)
rwa [he] at h
· apply closure_minimal _ (isClosed_range_derivativeRealization t γ)
rintro y ⟨p, rfl⟩
exact ⟨embed t γ p, derivativeRealization_embed t γ p⟩
theorem Polynomial.SemiclassicalJacobiEnergy.inner_derivativeRealization (t : ↑(Set.Ioi 1)) (γ : ℝ)
(x y : Polynomial.SemiclassicalJacobiEnergy.Space t γ) :
inner ℝ ((Polynomial.SemiclassicalJacobiEnergy.derivativeRealization t γ) x)
((Polynomial.SemiclassicalJacobiEnergy.derivativeRealization t γ) y) =
inner ℝ x y
Lean proof
/-- The realization preserves the completed energy inner product. -/
theorem inner_derivativeRealization (t : Set.Ioi (1 : ℝ)) (γ : ℝ) (x y : Space t γ) :
inner ℝ (derivativeRealization t γ x) (derivativeRealization t γ y) = inner ℝ x y :=
(derivativeRealization t γ).inner_map_map x y
theorem Polynomial.SemiclassicalJacobiEnergy.derivativeLoad_apply (t : ↑(Set.Ioi 1)) (γ : ℝ)
(g : ↥(Polynomial.SemiclassicalJacobiEnergy.DerivativeSpace t γ))
(x : Polynomial.SemiclassicalJacobiEnergy.Space t γ) :
(Polynomial.SemiclassicalJacobiEnergy.derivativeLoad t γ g) x =
inner ℝ g ((Polynomial.SemiclassicalJacobiEnergy.derivativeRealization t γ) x)
Lean proof
/-- The derivative-data load is the concrete weighted L² pairing. -/
theorem derivativeLoad_apply (t : Set.Ioi (1 : ℝ)) (γ : ℝ)
(g : DerivativeSpace t γ) (x : Space t γ) :
derivativeLoad t γ g x = inner ℝ g (derivativeRealization t γ x) := rfl
/-- The derivative-data load is bounded by the L² norm of its data. -/
theorem norm_derivativeLoad_le (t : Set.Ioi (1 : ℝ)) (γ : ℝ) (g : DerivativeSpace t γ) :
‖derivativeLoad t γ g‖ ≤ ‖g‖ := by
apply ContinuousLinearMap.opNorm_le_bound _ (norm_nonneg g)
intro x
rw [derivativeLoad_apply]
exact (norm_inner_le_norm g _).trans_eq (by rw [(derivativeRealization t γ).norm_map])
theorem Polynomial.SemiclassicalJacobiEnergy.norm_coefficients_derivativeLoad_le (t : ↑(Set.Ioi 1)) (γ : ℝ) (N : ℕ)
(g : ↥(Polynomial.SemiclassicalJacobiEnergy.DerivativeSpace t γ)) :
‖Polynomial.SemiclassicalJacobiEnergy.trialEmbed t γ N
(Polynomial.SemiclassicalJacobiEnergy.coefficients t γ N
(Polynomial.SemiclassicalJacobiEnergy.derivativeLoad t γ g))‖ ≤
‖g‖
Lean proof
/-- The finite solves are uniformly bounded for every square-integrable derivative datum. -/
theorem norm_coefficients_derivativeLoad_le (t : Set.Ioi (1 : ℝ)) (γ : ℝ) (N : ℕ)
(g : DerivativeSpace t γ) :
‖trialEmbed t γ N (coefficients t γ N (derivativeLoad t γ g))‖ ≤ ‖g‖ :=
(norm_trialEmbed_coefficients_le t γ N _).trans (norm_derivativeLoad_le t γ g)
theorem Polynomial.SemiclassicalJacobiEnergy.tendsto_derivativeRealization_coefficients (t : ↑(Set.Ioi 1)) (γ : ℝ)
(ℓ : Polynomial.SemiclassicalJacobiEnergy.Space t γ →L[ℝ] ℝ) :
Filter.Tendsto
(fun N =>
(Polynomial.SemiclassicalJacobiEnergy.derivativeRealization t γ)
(Polynomial.SemiclassicalJacobiEnergy.trialEmbed t γ N
(Polynomial.SemiclassicalJacobiEnergy.coefficients t γ N ℓ)))
Filter.atTop
(nhds
((Polynomial.SemiclassicalJacobiEnergy.derivativeRealization t γ)
(Polynomial.SemiclassicalJacobiEnergy.solution t γ ℓ)))
Lean proof
/-- The finite coefficient solves converge as concrete weighted L² derivative classes. -/
theorem tendsto_derivativeRealization_coefficients (t : Set.Ioi (1 : ℝ)) (γ : ℝ)
(ℓ : Space t γ →L[ℝ] ℝ) :
Tendsto (fun N ↦ derivativeRealization t γ
(trialEmbed t γ N (coefficients t γ N ℓ))) atTop
(𝓝 (derivativeRealization t γ (solution t γ ℓ))) :=
(derivativeRealization t γ).continuous.tendsto _ |>.comp (tendsto_trialEmbed_coefficients t γ ℓ)
Applying \(D\) in each normalized real angular sector embeds \(\mathcal H_q\) isometrically into the Hilbert sum of the sector derivative \(L^2\) spaces, with closed range. The error of an actual finite annular solve in this concrete space equals its energy error. Thus the frequency/radial-degree truncations converge strongly as radial derivative classes as well.
/-- Completed annular energy has a faithful realization in the Hilbert sum of derivative classes. -/
theorem derivativeRealization_injective (q : Set.Ioo (0 : ℝ) 1) :
Function.Injective (derivativeRealization q) := (derivativeRealization q).injective
To apply a forcing function \(g\in L^2(dA)\), we reconstruct a function class on the annulus from each abstract energy vector. The following maps give this reconstruction and the load functional. Injectivity ensures that distinct energy vectors represent distinct function classes.
Theorem
5.4.43Physical \(L^2\) realization and body forcing in a completed sector
Fix a valid real angular sector \(s=(u,m)\) and let \(\kappa _s\) be its physical energy scale. Polynomial lifting extends to a continuous linear map \(T_s:H_{t,m}\to L^2(dA)\) with
Every \(g\in L^2(dA)\) defines a body load \(b_g(v)=\langle g,T_sv\rangle _{L^2}\), of norm at most \(\sqrt{\kappa _s}\| g\| _{L^2}\). On polynomial trials this is the physical integral \(\int gU_p\, dA\). Feeding the unscaled radial solver the load \(\kappa _s^{-1}b_g\) gives a solution satisfying
For a valid sector \(s=(u,m)\), the completed map \(T_s:H_{t,m}\to L^2(dA)\) is injective. More precisely, for every completed energy vector \(x\) and radial polynomial \(p\),
/-- A radial energy vector whose physical L² class vanishes is zero. -/
theorem radialL2_injective (q : Set.Ioo (0 : ℝ) 1) (s : Sector) :
Function.Injective (radialL2 q s) := by
apply (LinearMap.ker_eq_bot (f := (radialL2 q s).toLinearMap)).mp
rw [LinearMap.ker_eq_bot']
intro x hx
apply ext_inner_right ℝ
intro y
simp only [inner_zero_left]
refine (SemiclassicalJacobiEnergy.denseRange_polynomialEmbed (parameter q) s.val.2).induction
?_ (isClosed_eq (by fun_prop) continuous_const) y
rintro _ ⟨p, rfl⟩
have he := inner_radialL2_polynomialLaplacian q s x p
change radialL2 q s x = 0 at hx
rw [hx, inner_zero_left, neg_zero] at he
exact (mul_eq_zero.mp he).resolve_left
(annulusEnergyScale_pos q.property s.val.1 s.val.2 s.property).ne'
The series converges unconditionally in physical \(L^2\). Each physically scaled polynomial energy vector realizes exactly its boundary-weighted polynomial \(U_p\).
/-- The global Poincaré bound persists on the full angular energy completion. -/
theorem norm_physicalL2_le (q : Set.Ioo (0 : ℝ) 1) (x : Space q) :
‖physicalL2 q x‖ ≤ ‖x‖ := lp.norm_orthogonalSynthesis_le _ _ _ x
A physical \(L^2\) body force determines a unique solution in the energy completion. The finite reconstructions converge to it in physical \(L^2\), as the following theorem shows.
Theorem
5.4.46Physical body forcing and convergence of assembled annular solves
Every physical datum \(g\in L^2(dA)\) gives a continuous energy load \(\ell _g(x)=\langle g,Tx\rangle _{L^2}\) with \(\| \ell _g\| \leq \| g\| _{L^2}\). Its value on a polynomial trial is \(\int gU_p\, dA\). There is a unique \(x\in \mathcal H_q\) satisfying
The full solution and every assembled finite coefficient solve have energy norm at most \(\| g\| _{L^2}\); the finite physical realizations have the same bound. The physical reconstruction is precisely the finite sum of computed radial reconstructions with their inverse square-root sector scales. For any continuous energy load, these reconstructions converge to \(Tx\) in physical \(L^2\) as both cutoffs increase, also for the common frequency/radial-degree cutoff. Their physical error is bounded by the best energy approximation error in the finite trial space.
/-- Against a physical polynomial trial, the load is its ordinary area integral. -/
theorem bodyLoad_polynomialEmbed (q : Set.Ioo (0 : ℝ) 1) (g : PhysicalL2 q)
(s : Sector) (p : Polynomial ℝ) :
bodyLoad q g (polynomialEmbed q s p) =
∫ v, g v * eval v (annulusDirichletLift ⟨q,ne_of_lt q.property.2⟩ s.val.1 s.val.2 p)
∂zernikeAnnulusMeasure ⟨q,q.property.1.le,q.property.2⟩ 0 0 := by
rw [bodyLoad_apply, physicalL2_polynomialEmbed]
rw [← radialBodyLoad_polynomialEmbed q s g p, radialBodyLoad_apply, radialL2_polynomialEmbed]
theorem MvPolynomial.AnnularEnergy.existsUnique_body_solution (q : ↑(Set.Ioo 0 1))
(g : ↥(MvPolynomial.AnnularEnergy.PhysicalL2 q)) :
∃! x,
∀ (z : ↥(MvPolynomial.AnnularEnergy.Space q)), inner ℝ x z = inner ℝ g ((MvPolynomial.AnnularEnergy.physicalL2 q) z)
Lean proof
/-- The physical body-force problem has a unique solution in the chosen energy completion. -/
theorem existsUnique_body_solution (q : Set.Ioo (0 : ℝ) 1) (g : PhysicalL2 q) :
∃! x : Space q, ∀ z : Space q, inner ℝ x z = inner ℝ g (physicalL2 q z) :=
existsUnique_solution q (bodyLoad q g)
Let \(\mathcal G_q=L^2(dA)\oplus ^{\ell ^2}L^2(dA)\) be the physical space of two Cartesian gradient components. Polynomial differentiation defines \(\nabla p=(\partial _xp,\partial _yp)\) in this space. For each valid angular sector \(s\), the map
extends to a linear isometry \(G_s:H_{t,m}\to \mathcal G_q\). Its two components on polynomial inputs are exactly the corresponding partial-derivative \(L^2\) classes, with this scale.
Lean Formalisation
theorem MvPolynomial.AnnularEnergy.polynomialGradient_apply (q : ↑(Set.Ioo 0 1)) (p : MvPolynomial (Fin 2) ℝ) (i : Fin 2) :
↑((MvPolynomial.AnnularEnergy.polynomialGradient q) p) i = (MvPolynomial.polynomialToL2 ⋯) ((MvPolynomial.pderiv i) p)
Lean proof
/-- Each coordinate is exactly its Cartesian partial derivative class. -/
theorem polynomialGradient_apply (q : Set.Ioo (0 : ℝ) 1) (p : MvPolynomial (Fin 2) ℝ)
(i : Fin 2) : polynomialGradient q p i =
MvPolynomial.polynomialToL2 (physicalMeasure_moments q) (pderiv i p) := by
fin_cases i <;> simp [polynomialGradient, lp.single_apply]
The next result controls the function and both Cartesian gradient components simultaneously. Gradient error is exactly energy error. The following density results identify this closed image with the zero-boundary Sobolev graph.
Theorem
5.4.48Full Cartesian gradient realization and simultaneous convergence
The completed Cartesian gradient sectors are mutually orthogonal. Their synthesis gives a linear isometry \(G:\mathcal H_q\to \mathcal G_q\) with unconditionally convergent sector series and closed range. On physically scaled polynomial energy vectors it is exactly \(\nabla U_p\). The simultaneous map
The Cartesian-gradient error of every actual finite solve equals its energy error. The common angular/radial cutoff reconstructions converge simultaneously as physical functions and Cartesian gradient classes.
/-- The full annular energy norm is the norm of its physical Cartesian gradient classes. -/
def gradientL2 (q : Set.Ioo (0 : ℝ) 1) : Space q →ₗᵢ[ℝ] GradientL2 q :=
(orthogonalFamily_sectorGradient q).linearIsometry
/-- Cartesian gradients are the unconditionally convergent sum of their normalized sectors. -/
theorem hasSum_gradientL2 (q : Set.Ioo (0 : ℝ) 1) (x : Space q) :
HasSum (fun s ↦ sectorGradient q s (x s)) (gradientL2 q x) :=
(orthogonalFamily_sectorGradient q).hasSum_linearIsometry x
theorem MvPolynomial.AnnularEnergy.inner_gradientL2 (q : ↑(Set.Ioo 0 1)) (x y : ↥(MvPolynomial.AnnularEnergy.Space q)) :
inner ℝ ((MvPolynomial.AnnularEnergy.gradientL2 q) x) ((MvPolynomial.AnnularEnergy.gradientL2 q) y) = inner ℝ x y
Lean proof
/-- The gradient realization preserves the full energy inner product. -/
theorem inner_gradientL2 (q : Set.Ioo (0 : ℝ) 1) (x y : Space q) :
inner ℝ (gradientL2 q x) (gradientL2 q y) = inner ℝ x y :=
(gradientL2 q).inner_map_map x y
/-- No completed energy vector is lost in the Cartesian gradient realization. -/
theorem gradientL2_injective (q : Set.Ioo (0 : ℝ) 1) :
Function.Injective (gradientL2 q) := (gradientL2 q).injective
/-- The simultaneous function and gradient realization is an isometry for the product max norm. -/
def functionGradient (q : Set.Ioo (0 : ℝ) 1) :
Space q →ₗᵢ[ℝ] PhysicalL2 q × GradientL2 q where
__ := (physicalL2 q).toLinearMap.prod (gradientL2 q).toLinearMap
norm_map' x := by
change max ‖physicalL2 q x‖ ‖gradientL2 q x‖ = ‖x‖
rw [LinearIsometry.norm_map, max_eq_right (norm_physicalL2_le q x)]
For \(0{\lt}q{\lt}1\), the open annular domain is \(\Omega _q=\{ (x,y):q{\lt}x^2+y^2{\lt}1\} \). A test \(\phi \in C_c^\infty (\Omega _q)\) determines its almost-everywhere class in the physical \(L^2(dA_q)\) space.
/-- The open annulus with squared inner radius q and outer radius one. -/
def domain (q : Ioo (0 : ℝ) 1) : TopologicalSpace.Opens (Fin 2 → ℝ) where
carrier := {x | (q : ℝ) < x 0^2+x 1^2 ∧ x 0^2+x 1^2 < 1}
is_open' := by
have h : Continuous (fun x : Fin 2 → ℝ ↦ x 0^2+x 1^2) := by fun_prop
exact (isOpen_lt continuous_const h).inter (isOpen_lt h continuous_const)
/-- Every completed annular energy vector has the prescribed Cartesian weak derivatives. -/
theorem gradientL2_weakDerivative (q : Ioo (0 : ℝ) 1) (x : Space q)
(φ : TestFunction (domain q) ℝ ⊤) (i : Fin 2) :
inner ℝ (physicalL2 q x)
(physicalTestL2 q (DirichletSpace.testDerivative (domain q) i φ)) =
-inner ℝ (gradientL2 q x i) (physicalTestL2 q φ) := by
let L : Space q →L[ℝ] ℝ :=
(innerSLFlip ℝ (physicalTestL2 q (DirichletSpace.testDerivative (domain q) i φ))).comp
(physicalL2 q)
let R : Space q →L[ℝ] ℝ :=
-((innerSLFlip ℝ (physicalTestL2 q φ)).comp
((lp.evalCLM ℝ (fun _ : Fin 2 ↦ PhysicalL2 q) 2 i).comp
(gradientL2 q).toContinuousLinearMap))
have hp (s : Sector) (p : Polynomial ℝ) :
L (polynomialEmbed q s p) = R (polynomialEmbed q s p) := by
have h := polynomial_weakDerivative q (annulusDirichletLift ⟨q,ne_of_lt q.property.2⟩ s.val.1 s.val.2 p) φ i
simpa only [L, R, ContinuousLinearMap.comp_apply, innerSLFlip_apply_apply,
neg_apply, lp.evalCLM, lp.evalₗ_apply, LinearMap.mkContinuous_apply,
LinearIsometry.coe_toContinuousLinearMap, physicalL2_polynomialEmbed,
gradientL2_polynomialEmbed, radialPolynomialL2, LinearMap.comp_apply] using h
have hLR : L = R := by
apply lp.ext_continuousLinearMap (by norm_num : (2 : ENNReal) ≠ ⊤)
intro s
apply ContinuousLinearMap.ext
intro y
change L (sectorEmbed q s y) = R (sectorEmbed q s y)
refine (SemiclassicalJacobiEnergy.denseRange_polynomialEmbed (parameter q) s.val.2).induction
?_ (isClosed_eq (by fun_prop) (by fun_prop)) y
rintro _ ⟨p, rfl⟩
have h := hp s p
simp only [polynomialEmbed, LinearMap.smul_apply, LinearMap.comp_apply,
ContinuousLinearMap.coe_coe, map_smul, smul_eq_mul] at h
exact mul_left_cancel₀
(Real.sqrt_pos.mpr (annulusEnergyScale_pos q.property s.val.1 s.val.2 s.property)).ne' h
have h := congrArg (fun T : Space q →L[ℝ] ℝ ↦ T x) hLR
simpa only [L, R, ContinuousLinearMap.comp_apply, innerSLFlip_apply_apply,
neg_apply, lp.evalCLM, lp.evalₗ_apply, LinearMap.mkContinuous_apply,
LinearIsometry.coe_toContinuousLinearMap] using h
/-- Positive cutoff scales give compact support strictly inside the annulus. -/
theorem cutoffTrial_support (q : Ioo (0 : ℝ) 1) {a : ℝ} (ha : 0 < a)
(p : MvPolynomial (Fin 2) ℝ) :
HasCompactSupport (cutoffTrial q a p) ∧ tsupport (cutoffTrial q a p) ⊆ domain q := by
let K : Set E := {x | (q : ℝ)+1/a ≤ x 0^2+x 1^2 ∧ x 0^2+x 1^2 ≤ 1-1/a}
have hc : IsClosed K := by
have hr : Continuous (fun x : E ↦ x 0^2+x 1^2) := by fun_prop
exact (isClosed_le continuous_const hr).inter (isClosed_le hr continuous_const)
have hs : tsupport (cutoffTrial q a p) ⊆ K := closure_minimal (cutoff_support ha p) hc
have hk : K ⊆ box := by
intro x hx
apply radius_mem_box
have h := hx.2
have : 0 < 1/a := by positivity
linarith
refine ⟨(isCompact_Icc.of_isClosed_subset (isClosed_tsupport _) (hs.trans hk)), ?_⟩
intro x hx
have h := hs hx
change (q : ℝ) < x 0^2+x 1^2 ∧ x 0^2+x 1^2 < 1
have : 0 < 1/a := by positivity
constructor <;> linarith [h.1,h.2]
For \(0{\lt}q{\lt}1\) and a real Cartesian polynomial \(p\), Every \(u_a\) is smooth; for \(a{\gt}0\) it has compact support contained in \(\Omega _q\). At each point of \(\Omega _q\), the functions \(\phi _n\) eventually agree on a neighbourhood with \(B_qp\), where \(B_q=(1-r^2)(r^2-q)\).
Lean Formalisation
theorem MvPolynomial.AnnularEnergy.cutoffTrial_contDiff (q a : ℝ) (p : MvPolynomial (Fin 2) ℝ) :
ContDiff ℝ (↑⊤) (MvPolynomial.AnnularEnergy.cutoffTrial q a p)
Lean proof
/-- The cutoff trial is smooth on the entire Cartesian plane. -/
theorem cutoffTrial_contDiff (q a : ℝ) (p : MvPolynomial (Fin 2) ℝ) :
ContDiff ℝ ∞ (cutoffTrial q a p) := by
unfold cutoffTrial
exact (((boundaryFactor_contDiff a).comp (by fun_prop)).mul
((boundaryFactor_contDiff a).comp (by fun_prop))).mul (p.contDiff_eval.of_le (by simp))
/-- Positive cutoff scales give compact support strictly inside the annulus. -/
theorem cutoffTrial_support (q : Ioo (0 : ℝ) 1) {a : ℝ} (ha : 0 < a)
(p : MvPolynomial (Fin 2) ℝ) :
HasCompactSupport (cutoffTrial q a p) ∧ tsupport (cutoffTrial q a p) ⊆ domain q := by
let K : Set E := {x | (q : ℝ)+1/a ≤ x 0^2+x 1^2 ∧ x 0^2+x 1^2 ≤ 1-1/a}
have hc : IsClosed K := by
have hr : Continuous (fun x : E ↦ x 0^2+x 1^2) := by fun_prop
exact (isClosed_le continuous_const hr).inter (isClosed_le hr continuous_const)
have hs : tsupport (cutoffTrial q a p) ⊆ K := closure_minimal (cutoff_support ha p) hc
have hk : K ⊆ box := by
intro x hx
apply radius_mem_box
have h := hx.2
have : 0 < 1/a := by positivity
linarith
refine ⟨(isCompact_Icc.of_isClosed_subset (isClosed_tsupport _) (hs.trans hk)), ?_⟩
intro x hx
have h := hs hx
change (q : ℝ) < x 0^2+x 1^2 ∧ x 0^2+x 1^2 < 1
have : 0 < 1/a := by positivity
constructor <;> linarith [h.1,h.2]
theorem MvPolynomial.AnnularEnergy.cutoffTest_eventuallyEq (q : ↑(Set.Ioo 0 1)) (p : MvPolynomial (Fin 2) ℝ) {x : Fin 2 → ℝ}
(hx : x ∈ MvPolynomial.AnnularEnergy.domain q) :
∀ᶠ (n : ℕ) in Filter.atTop,
⇑(MvPolynomial.AnnularEnergy.cutoffTest q p n) =ᶠ[nhds x] fun y =>
(MvPolynomial.eval y) (MvPolynomial.annulusBoundaryWeight ↑q * p)
Lean proof
/-- At every interior point the approximants eventually agree locally with the trial. -/
theorem cutoffTest_eventuallyEq (q : Ioo (0 : ℝ) 1) (p : MvPolynomial (Fin 2) ℝ)
{x : E} (hx : x ∈ domain q) :
∀ᶠ n : ℕ in atTop,
(cutoffTest q p n : E → ℝ) =ᶠ[𝓝 x] (fun y ↦ eval y (annulusBoundaryWeight q*p)) := by
have h0 : 0 < x 0^2+x 1^2-(q : ℝ) := sub_pos.mpr hx.1
have h1 : 0 < 1-(x 0^2+x 1^2) := sub_pos.mpr hx.2
filter_upwards [eventually_scaled_gt h0,eventually_scaled_gt h1] with n hn0 hn1
have hc0 : Continuous (fun y : E ↦ ((n : ℝ)+1)*(y 0^2+y 1^2-(q : ℝ))) := by fun_prop
have hc1 : Continuous (fun y : E ↦ ((n : ℝ)+1)*(1-(y 0^2+y 1^2))) := by fun_prop
filter_upwards [hc0.continuousAt.eventually (eventually_gt_nhds hn0),
hc1.continuousAt.eventually (eventually_gt_nhds hn1)] with y hy0 hy1
change cutoffTrial q ((n : ℝ)+1) p y = _
simp only [cutoffTrial,boundaryFactor_eq hy0.le,boundaryFactor_eq hy1.le,
annulusBoundaryWeight,eval_mul,eval_sub,map_one,eval_add,eval_pow,eval_X,eval_C]
ring
/-- Each Cartesian first derivative converges in L² to the polynomial derivative. -/
theorem tendsto_cutoffTest_derivative_L2 (q : Ioo (0 : ℝ) 1)
(p : MvPolynomial (Fin 2) ℝ) (i : Fin 2) :
Tendsto (fun n ↦ physicalTestL2 q (DirichletSpace.testDerivative (domain q) i
(cutoffTest q p n))) atTop
(𝓝 (polynomialToL2 (physicalMeasure_moments q) (pderiv i (annulusBoundaryWeight q*p)))) := by
obtain ⟨C,_,hC⟩ := cutoffTrial_uniform_bound q p
apply tendsto_testL2_of_bound q
(fun n ↦ DirichletSpace.testDerivative (domain q) i (cutoffTest q p n))
(pderiv i (annulusBoundaryWeight q*p)) (C := C)
· intro n x hx
rw [DirichletSpace.testDerivative_apply]
have h := (fderiv ℝ (cutoffTest q p n) x).le_opNorm (Pi.single i 1)
simp only [Pi.norm_single, norm_one, mul_one] at h
exact h.trans (hC n x (radius_mem_box hx.2.le)).2
· intro x hx
apply (tendsto_congr' ?_).mpr tendsto_const_nhds
filter_upwards [cutoffTest_eventuallyEq q p hx] with n hn
rw [DirichletSpace.testDerivative_apply, hn.fderiv_eq, fderiv_eval_single]
The equality of polar and area measures induces an isometric identification \(A_q\) of their function/gradient product spaces. For a smooth test \(\phi \), its physical gradient has coordinates \([D_i\phi ]\), and \(A_q\) carries its physical function/gradient pair to its ordinary area-measure graph pair. The cutoff gradients converge in the finite Hilbert sum. Consequently,
/-- The full Cartesian gradient of the smooth cutoffs converges in the Hilbert sum. -/
theorem tendsto_cutoffTest_gradient_L2 (q : Ioo (0 : ℝ) 1)
(p : MvPolynomial (Fin 2) ℝ) :
Tendsto (fun n ↦ physicalTestGradient q (cutoffTest q p n)) atTop
(𝓝 (polynomialGradient q (annulusBoundaryWeight q*p))) := by
have h : Tendsto (fun n ↦ ∑ i : Fin 2, lp.single 2 i
(physicalTestL2 q (DirichletSpace.testDerivative (domain q) i (cutoffTest q p n)))) atTop
(𝓝 (∑ i : Fin 2, lp.single 2 i
(polynomialToL2 (physicalMeasure_moments q) (pderiv i (annulusBoundaryWeight q*p))))) := by
apply tendsto_finsetSum
intro i _
exact (lp.singleContinuousLinearMap ℝ (fun _ : Fin 2 ↦ PhysicalL2 q) 2 i).continuous.tendsto _
|>.comp (tendsto_cutoffTest_derivative_L2 q p i)
simpa [physicalTestGradient, polynomialGradient, Fin.sum_univ_two] using h
/-- Every completed annular energy vector belongs to the zero-boundary Sobolev graph. -/
theorem functionGradient_mem_dirichlet (q : Ioo (0 : ℝ) 1) (x : Space q) :
areaGraphEquiv q (functionGradient q x) ∈ DirichletSpace.graph (domain q) := by
let S : Submodule ℝ (Space q) := (DirichletSpace.graph (domain q)).comap
((areaGraphEquiv q).toLinearMap.comp (functionGradient q).toLinearMap)
have hS : IsClosed (S : Set (Space q)) :=
(DirichletSpace.graph_isClosed (domain q)).preimage
((areaGraphEquiv q).continuous.comp (functionGradient q).continuous)
have hp (s : Sector) (p : Polynomial ℝ) : polynomialEmbed q s p ∈ S := by
have h := polynomialGraph_mem_dirichlet q (annulusLift ⟨q,ne_of_lt q.property.2⟩ s.val.1 s.val.2 p)
change areaGraphEquiv q (physicalL2 q (polynomialEmbed q s p),
gradientL2 q (polynomialEmbed q s p)) ∈ DirichletSpace.graph (domain q)
rw [physicalL2_polynomialEmbed, gradientL2_polynomialEmbed]
exact h
have hs (s : Sector) (y : RadialSpace q s) : sectorEmbed q s y ∈ S := by
refine (Polynomial.SemiclassicalJacobiEnergy.denseRange_polynomialEmbed
(parameter q) s.val.2).induction ?_ (hS.preimage (sectorEmbed q s).continuous) y
rintro _ ⟨p, rfl⟩
have h := hp s p
simp only [polynomialEmbed, LinearMap.smul_apply, LinearMap.comp_apply,
ContinuousLinearMap.coe_coe] at h
exact (S.smul_mem_iff
(Real.sqrt_pos.mpr (annulusEnergyScale_pos q.property s.val.1 s.val.2 s.property)).ne').mp h
apply hS.mem_of_tendsto (lp.hasSum_single (by norm_num : (2 : ENNReal) ≠ ⊤) x)
exact Filter.Eventually.of_forall (fun t ↦ S.sum_mem (fun i _ ↦ hs i (x i)))
/-- Every boundary-weighted Cartesian polynomial has an exact energy-space realization. -/
theorem exists_functionGradient_polynomial (q : Ioo (0 : ℝ) 1)
(p : MvPolynomial (Fin 2) ℝ) :
∃ x : Space q, functionGradient q x =
(polynomialToL2 (physicalMeasure_moments q) (annulusBoundaryWeight q*p),
polynomialGradient q (annulusBoundaryWeight q*p)) := by
let F := (polynomialToL2 (physicalMeasure_moments q)).prod (polynomialGradient q)
let B := LinearMap.mulLeft ℝ (annulusBoundaryWeight q)
let K := (functionGradient q).toLinearMap.range.comap (F.comp B)
have hK : K = ⊤ := eq_top_of_annulusLift_mem q.property K (by
intro u m z
by_cases h : u = true → m ≠ 0
· let s : Sector := ⟨(u,m),h⟩
refine ⟨polynomialEmbed q s z, ?_⟩
change (physicalL2 q (polynomialEmbed q s z),gradientL2 q (polynomialEmbed q s z)) = _
rw [physicalL2_polynomialEmbed, gradientL2_polynomialEmbed]
rfl
· push Not at h
obtain ⟨rfl,rfl⟩ := h
have hz : annulusLift ⟨q,ne_of_lt q.property.2⟩ true 0 z = 0 := by
simp [annulusLift,diskRadialLift,diskHarmonics]
rw [hz]
exact K.zero_mem)
have hp : p ∈ K := by rw [hK]; trivial
exact hp
Every \(\phi \in C_c^\infty (\Omega _q)\), viewed globally, has a smooth factorisation \(\phi =B_qg\) with \(g\in C^\infty (\mathbb R^2)\). There is a sequence of real Cartesian polynomials \(p_n\) such that
In particular, the physical function/gradient pair of every such test belongs to the image of \(x\mapsto (Tx,Gx)\) on \(\mathcal H_q\).
Lean Formalisation
theorem MvPolynomial.AnnularEnergy.exists_smooth_boundary_quotient (q : ↑(Set.Ioo 0 1))
(φ : TestFunction (MvPolynomial.AnnularEnergy.domain q) ℝ ⊤) :
∃ g, ContDiff ℝ (↑⊤) g ∧ ∀ (x : Fin 2 → ℝ), (MvPolynomial.eval x) (MvPolynomial.annulusBoundaryWeight ↑q) * g x = φ x
Lean proof
/-- A smooth compactly supported annular test has a globally smooth boundary quotient. -/
theorem exists_smooth_boundary_quotient (q : Ioo (0 : ℝ) 1)
(φ : TestFunction (domain q) ℝ ⊤) :
∃ g : E → ℝ, ContDiff ℝ ∞ g ∧ ∀ x, eval x (annulusBoundaryWeight q) * g x = φ x := by
have hb : ∀ x ∈ tsupport φ, eval x (annulusBoundaryWeight q) ≠ 0 := by
intro x hx
have hx' := φ.tsupport_subset hx
have hp := mul_pos (sub_pos.mpr hx'.2) (sub_pos.mpr hx'.1)
simpa only [annulusBoundaryWeight,eval_mul,eval_sub,map_one,eval_add,eval_pow,eval_X,eval_C]
using hp.ne'
refine ⟨fun x ↦ φ x / eval x (annulusBoundaryWeight q),
smooth_supported_division φ.contDiff
((annulusBoundaryWeight (q : ℝ)).contDiff_eval.of_le (by simp)) hb, ?_⟩
intro x
by_cases hx : x ∈ tsupport φ
· exact mul_div_cancel₀ _ (hb x hx)
· simp [image_eq_zero_of_notMem_tsupport hx]
is a surjective linear isometry, where the Sobolev graph carries the function/ gradient product maximum norm. Subscripts \(f\) and \(\nabla \) denote the function and gradient components. Moreover,
/-- The physical energy graph as an element of the zero-boundary Sobolev graph. -/
def dirichletEmbedding (q : Ioo (0 : ℝ) 1) :
Space q →ₗᵢ[ℝ] DirichletSpace.Space (domain q) where
__ := ((areaGraphEquiv q).toLinearMap.comp (functionGradient q).toLinearMap).codRestrict
(DirichletSpace.graph (domain q)) (functionGradient_mem_dirichlet q)
norm_map' x := by
change ‖areaGraphEquiv q (functionGradient q x)‖ = ‖x‖
simp
Let \(L\) be a continuous real linear functional on \(\mathcal H_0^1(\Omega _q)\), and put \(\ell =L\circ E_q\). There is exactly one \(u_L\in \mathcal H_0^1(\Omega _q)\) such that
It is the image under \(E_q\) of the energy Riesz solution for \(\ell \). The finite annular solves with all valid angular frequencies \(m{\lt}N\) and radial degree below \(N\), transported by \(E_q\), converge to \(u_L\) in the Sobolev graph norm as \(N\to \infty \).
Lean Formalisation
theorem MvPolynomial.AnnularEnergy.dirichletSolution_weak (q : ↑(Set.Ioo 0 1))
(L : ↥(MeasureTheory.DirichletSpace.Space (MvPolynomial.AnnularEnergy.domain q)) →L[ℝ] ℝ)
(v : ↥(MeasureTheory.DirichletSpace.Space (MvPolynomial.AnnularEnergy.domain q))) :
inner ℝ (↑(MvPolynomial.AnnularEnergy.dirichletSolution q L)).2 (↑v).2 = L v
Lean proof
/-- The transported solution satisfies the weak Dirichlet equation against every Sobolev test. -/
theorem dirichletSolution_weak (q : Ioo (0 : ℝ) 1)
(L : DirichletSpace.Space (domain q) →L[ℝ] ℝ) (v : DirichletSpace.Space (domain q)) :
inner ℝ (dirichletSolution q L).val.2 v.val.2 = L v := by
obtain ⟨z,rfl⟩ := (dirichletEquiv q).surjective v
let ℓ := L.comp (dirichletEquiv q).toLinearIsometry.toContinuousLinearMap
have h := (inner_dirichletEquiv_gradient q (solution q ℓ) z).trans (solution_weak q ℓ z)
simpa only [dirichletSolution, ℓ, ContinuousLinearMap.comp_apply,
LinearIsometry.coe_toContinuousLinearMap, LinearIsometryEquiv.coe_toLinearIsometry] using h
theorem MvPolynomial.AnnularEnergy.dirichletBodyLoad_apply (q : ↑(Set.Ioo 0 1))
(g : ↥(MeasureTheory.DirichletSpace.FunctionL2 (MvPolynomial.AnnularEnergy.domain q)))
(v : ↥(MeasureTheory.DirichletSpace.Space (MvPolynomial.AnnularEnergy.domain q))) :
(MvPolynomial.AnnularEnergy.dirichletBodyLoad q g) v = inner ℝ g (↑v).1
Lean proof
/-- The body load is precisely its area-L² pairing with the function component. -/
theorem dirichletBodyLoad_apply (q : Ioo (0 : ℝ) 1)
(g : DirichletSpace.FunctionL2 (domain q)) (v : DirichletSpace.Space (domain q)) :
dirichletBodyLoad q g v = inner ℝ g v.val.1 := rfl
For every compact \(K\subseteq \mathbb R^2\), every continuous real function \(f\) on \(K\), and every \(\varepsilon {\gt}0\), there is a real bivariate polynomial \(p\) such that \(|p(x)-f(x)|{\lt}\varepsilon \) for every \(x\in K\).
Lean Formalisation
theorem MvPolynomial.exists_polynomial_near_on_compact {S : Set (Fin 2 → ℝ)} (hS : IsCompact S) {f : (Fin 2 → ℝ) → ℝ}
(hf : ContinuousOn f S) {ε : ℝ} (hε : 0 < ε) : ∃ p, ∀ z ∈ S, |(MvPolynomial.eval z) p - f z| < ε
Lean proof
/-- Polynomial functions uniformly approximate a continuous function on a compact set. -/
theorem exists_polynomial_near_on_compact {S : Set (Fin 2 → ℝ)} (hS : IsCompact S)
{f : (Fin 2 → ℝ) → ℝ} (hf : ContinuousOn f S) {ε : ℝ} (hε : 0 < ε) :
∃ p : MvPolynomial (Fin 2) ℝ, ∀ z ∈ S, |eval z p-f z| < ε := by
let : CompactSpace S := isCompact_iff_compactSpace.mp hS
let A : MvPolynomial (Fin 2) ℝ →ₐ[ℝ] C(S, ℝ) :=
{ toFun := fun p ↦ ⟨fun z ↦ eval z.1 p, p.continuous_eval.comp continuous_subtype_val⟩
map_one' := by ext; simp
map_mul' := by intros; ext; simp
map_zero' := by ext; simp
map_add' := by intros; ext; simp
commutes' := by intro r; ext; simp }
have hs : A.range.SeparatesPoints := by
intro x y hxy
have hne : x.1 ≠ y.1 := fun h ↦ hxy (Subtype.ext h)
obtain ⟨i, hi⟩ := Function.ne_iff.mp hne
refine ⟨A (X i), ⟨A (X i), ⟨X i, rfl⟩, rfl⟩, ?_⟩
simpa [A] using hi
obtain ⟨g, hg⟩ := ContinuousMap.exists_mem_subalgebra_near_continuous_of_separatesPoints
A.range hs (fun z : S ↦ f z.1) (continuousOn_iff_continuous_domRestrict.mp hf) ε hε
obtain ⟨p, hp⟩ := g.property
refine ⟨p, fun z hz ↦ ?_⟩
have h := hg ⟨z,hz⟩
rw [← hp] at h
simpa [A, Real.norm_eq_abs] using h
Let \(f:\mathbb R^2\to \mathbb R\) be smooth. For every \(\varepsilon {\gt}0\) there is a real bivariate polynomial \(p\) such that, for all \(x\in [-1,1]^2\),
theorem MvPolynomial.exists_polynomial_C1_near_on_square {f : (Fin 2 → ℝ) → ℝ} (hf : ContDiff ℝ (↑⊤) f) {ε : ℝ} (hε : 0 < ε) :
∃ p,
∀ x ∈ Set.Icc (fun x => -1) fun x => 1,
|(MvPolynomial.eval x) p - f x| < ε ∧
∀ (i : Fin 2), |(MvPolynomial.eval x) ((MvPolynomial.pderiv i) p) - (fderiv ℝ f x) (Pi.single i 1)| < ε
Lean proof
/-- Smooth functions admit polynomial approximation of values and Cartesian first
derivatives on the square, as used in the standard Sobolev density argument. -/
theorem exists_polynomial_C1_near_on_square {f : (Fin 2 → ℝ) → ℝ}
(hf : ContDiff ℝ ∞ f) {ε : ℝ} (hε : 0 < ε) :
∃ p : MvPolynomial (Fin 2) ℝ,
∀ x ∈ Set.Icc (fun _ : Fin 2 ↦ (-1 : ℝ)) (fun _ ↦ 1),
|eval x p-f x| < ε ∧ ∀ i : Fin 2,
|eval x (pderiv i p)-fderiv ℝ f x (Pi.single i 1)| < ε :=
CartesianApproximation.exists_polynomial_C1_near hf hε
Let \(\eta \) be the smooth transition from \(0\) to \(1\), with \(0\leq \eta \leq 1\), \(\eta (t)=0\) for \(t\leq 0\), and \(\eta (t)=1\) for \(t\geq 1\). There is \(M\geq 0\) such that \(|\eta '(t)|\leq M\) and \(|t\eta '(t-1)|\leq 2M\) for all real \(t\). Define
theorem Real.hasDerivAt_boundaryFactor (a r : ℝ) :
HasDerivAt a.boundaryFactor ((a * r - 1).smoothTransition + a * r * deriv Real.smoothTransition (a * r - 1)) r
Lean proof
/-- The derivative of the cutoff boundary factor. -/
theorem hasDerivAt_boundaryFactor (a r : ℝ) : HasDerivAt (boundaryFactor a)
(smoothTransition (a*r-1) + (a*r)*deriv smoothTransition (a*r-1)) r := by
have ht : HasDerivAt smoothTransition (deriv smoothTransition (a*r-1)) (a*r-1) := ((smoothTransition.contDiff (n := 1)).differentiable (by norm_num)).differentiableAt.hasDerivAt
unfold boundaryFactor
convert (hasDerivAt_id r).mul
(ht.comp r (((hasDerivAt_id r).const_mul a).sub_const 1)) using 1
· rfl
· simp only [one_mul, mul_one, Function.comp_apply, id_eq]
ring
theorem Real.abs_boundaryFactor_le (a r : ℝ) : |a.boundaryFactor r| ≤ |r|
Lean proof
/-- Cutting off does not increase the absolute value of the boundary factor. -/
theorem abs_boundaryFactor_le (a r : ℝ) : |boundaryFactor a r| ≤ |r| := by
rw [boundaryFactor, abs_mul, abs_of_nonneg (smoothTransition.nonneg _)]
exact mul_le_of_le_one_right (abs_nonneg _) (smoothTransition.le_one _)
theorem Real.boundaryFactor_zero {a r : ℝ} (h : a * r ≤ 1) : a.boundaryFactor r = 0
Lean proof
/-- The cutoff factor vanishes in the boundary layer. -/
theorem boundaryFactor_zero {a r : ℝ} (h : a*r ≤ 1) : boundaryFactor a r = 0 := by
rw [boundaryFactor, smoothTransition.zero_of_nonpos (by linarith), mul_zero]
theorem Real.boundaryFactor_eq {a r : ℝ} (h : 2 ≤ a * r) : a.boundaryFactor r = r
Lean proof
/-- Outside the transition layer the cutoff equals the original factor. -/
theorem boundaryFactor_eq {a r : ℝ} (h : 2 ≤ a*r) : boundaryFactor a r = r := by
rw [boundaryFactor, smoothTransition.one_of_one_le (by linarith), mul_one]
isometrically and linearly. This identification preserves the classes of a function and of any finite list of square-integrable component functions. Scalar and gradient inner products are preserved separately.
Lean Formalisation
theorem MeasureTheory.L2.graphMeasureCongr_toLp.{u_1} {X : Type u_1} [MeasurableSpace X] {μ ν : MeasureTheory.Measure X} (n : ℕ)
(h : μ = ν) (f : X → ℝ) (g : Fin n → X → ℝ) (hfμ : MeasureTheory.MemLp f 2 μ) (hfν : MeasureTheory.MemLp f 2 ν)
(hgμ : ∀ (i : Fin n), MeasureTheory.MemLp (g i) 2 μ) (hgν : ∀ (i : Fin n), MeasureTheory.MemLp (g i) 2 ν) :
(MeasureTheory.L2.graphMeasureCongr n h)
(MeasureTheory.MemLp.toLp f hfμ, ∑ i, lp.single 2 i (MeasureTheory.MemLp.toLp (g i) ⋯)) =
(MeasureTheory.MemLp.toLp f hfν, ∑ i, lp.single 2 i (MeasureTheory.MemLp.toLp (g i) ⋯))
Lean proof
/-- Transport preserves the classes of a function and its gradient components. -/
theorem graphMeasureCongr_toLp (n : ℕ) (h : μ = ν) (f : X → ℝ) (g : Fin n → X → ℝ)
(hfμ : MemLp f 2 μ) (hfν : MemLp f 2 ν)
(hgμ : ∀ i, MemLp (g i) 2 μ) (hgν : ∀ i, MemLp (g i) 2 ν) :
graphMeasureCongr n h (hfμ.toLp f, ∑ i, lp.single 2 i ((hgμ i).toLp (g i))) =
(hfν.toLp f, ∑ i, lp.single 2 i ((hgν i).toLp (g i))) := by
subst ν
rfl
For an open set \(\Omega \subseteq \mathbb R^n\), let \(L=L^2(\Omega )\) and \(\mathcal G=\bigoplus _{i=1}^n{}^{\ell ^2}L\). Write \(D_i\phi \) for the Cartesian derivative of \(\phi \in C_c^\infty (\Omega )\), viewed globally with support compactly contained in \(\Omega \). The zero-boundary Sobolev graph is
/-- A smooth compactly supported test function as an L² class. -/
noncomputable def testL2 : TestFunction Ω ℝ ⊤ →ₗ[ℝ] FunctionL2 Ω where
toFun f := (f.continuous.memLp_of_hasCompactSupport f.hasCompactSupport).toLp f
map_add' _ _ := rfl
map_smul' _ _ := rfl
def MeasureTheory.DirichletSpace.testDerivative {n : ℕ} (Ω : TopologicalSpace.Opens (Fin n → ℝ)) (i : Fin n) :
TestFunction Ω ℝ ⊤ →L[ℝ] TestFunction Ω ℝ ⊤
Lean definition
/-- The Cartesian derivative of a test function, with the same support constraint. -/
noncomputable def testDerivative (i : Fin n) :
TestFunction Ω ℝ ⊤ →L[ℝ] TestFunction Ω ℝ ⊤ :=
TestFunction.lineDerivCLM ℝ (Pi.single i 1)
/-- The Cartesian gradient of a test function as L² classes. -/
noncomputable def testGradient : TestFunction Ω ℝ ⊤ →ₗ[ℝ] GradientL2 Ω :=
∑ i : Fin n, (lp.singleContinuousLinearMap ℝ (fun _ : Fin n ↦ FunctionL2 Ω) 2 i).toLinearMap.comp
((testL2 Ω).comp (testDerivative Ω i).toLinearMap)
Real multivariate polynomial evaluation is smooth. Its Fréchet derivative in coordinate direction \(e_i\) is the evaluation of its algebraic partial derivative \(\partial _i p\). For every \(\phi \in C_c^\infty (\Omega )\),
theorem MvPolynomial.contDiff_eval {n : ℕ} (p : MvPolynomial (Fin n) ℝ) : ContDiff ℝ ⊤ fun x => (MvPolynomial.eval x) p
Lean proof
/-- Real multivariate polynomial evaluation is smooth. -/
theorem contDiff_eval (p : MvPolynomial (Fin n) ℝ) :
ContDiff ℝ ⊤ (fun x : Fin n → ℝ ↦ eval x p) := by
induction p using MvPolynomial.induction_on with
| C c => simpa using (contDiff_const : ContDiff ℝ ⊤ (fun _ : Fin n → ℝ ↦ c))
| add p q hp hq => simpa only [eval_add] using hp.add hq
| mul_X p j hp =>
simpa only [eval_mul, eval_X] using
hp.mul (by fun_prop : ContDiff ℝ ⊤ (fun x : Fin n → ℝ ↦ x j))
theorem MvPolynomial.fderiv_eval_single {n : ℕ} (p : MvPolynomial (Fin n) ℝ) (i : Fin n) (x : Fin n → ℝ) :
(fderiv ℝ (fun y => (MvPolynomial.eval y) p) x) (Pi.single i 1) = (MvPolynomial.eval x) ((MvPolynomial.pderiv i) p)
Lean proof
/-- The algebraic partial derivative equals the Cartesian Fréchet derivative. -/
theorem fderiv_eval_single (p : MvPolynomial (Fin n) ℝ) (i : Fin n) (x : Fin n → ℝ) :
fderiv ℝ (fun y : Fin n → ℝ ↦ eval y p) x (Pi.single i 1) = eval x (pderiv i p) := by
induction p using MvPolynomial.induction_on with
| C c => simp
| add p q hp hq =>
simp only [eval_add]
rw [fderiv_fun_add (p.contDiff_eval.differentiable (by simp)).differentiableAt
(q.contDiff_eval.differentiable (by simp)).differentiableAt]
simp [hp, hq]
| mul_X p j hp =>
simp only [eval_mul, eval_X]
rw [fderiv_fun_mul (p.contDiff_eval.differentiable (by simp)).differentiableAt
(differentiableAt_apply j x)]
rw [(hasFDerivAt_apply j x).fderiv]
by_cases h : j = i <;> simp [hp, pderiv_X, h]
theorem MvPolynomial.integral_eval_mul_testDerivative {n : ℕ} (Ω : TopologicalSpace.Opens (Fin n → ℝ))
(p : MvPolynomial (Fin n) ℝ) (φ : TestFunction Ω ℝ ⊤) (i : Fin n) :
∫ (x : Fin n → ℝ), (MvPolynomial.eval x) p * ((MeasureTheory.DirichletSpace.testDerivative Ω i) φ) x =
-∫ (x : Fin n → ℝ), (MvPolynomial.eval x) ((MvPolynomial.pderiv i) p) * φ x
Lean proof
/-- Polynomial evaluation satisfies integration by parts against compactly supported smooth tests. -/
theorem integral_eval_mul_testDerivative (p : MvPolynomial (Fin n) ℝ)
(φ : TestFunction Ω ℝ ⊤) (i : Fin n) :
(∫ x, eval x p * testDerivative Ω i φ x) =
-(∫ x, eval x (pderiv i p) * φ x) := by
have hi (p : MvPolynomial (Fin n) ℝ) (φ : TestFunction Ω ℝ ⊤) :
Integrable (fun x ↦ eval x p * φ x) :=
(p.continuous_eval.mul φ.continuous).integrable_of_hasCompactSupport
φ.hasCompactSupport.mul_left
have h := integral_mul_fderiv_eq_neg_fderiv_mul_of_integrable
(μ := volume) (f := fun x ↦ eval x p) (g := fun x ↦ φ x) (v := Pi.single i 1)
(by simpa only [fderiv_eval_single] using hi (pderiv i p) φ)
(by simpa only [testDerivative_apply] using hi p (testDerivative Ω i φ))
(hi p φ)
(fun x _ ↦ (p.contDiff_eval.differentiable (by simp)).differentiableAt)
(fun x _ ↦ (φ.contDiff.differentiable (by simp)).differentiableAt)
simpa only [testDerivative_apply, fderiv_eval_single] using h
Thus its gradient coordinates are weak derivatives. On smooth test functions, the coordinates agree almost everywhere with their classical derivatives, and their \(L^2\) pairings are the ordinary integrals of products.
Lean Formalisation
theorem MeasureTheory.DirichletSpace.testGradient_apply {n : ℕ} (Ω : TopologicalSpace.Opens (Fin n → ℝ))
(f : TestFunction Ω ℝ ⊤) (i : Fin n) :
↑((MeasureTheory.DirichletSpace.testGradient Ω) f) i =
(MeasureTheory.DirichletSpace.testL2 Ω) ((MeasureTheory.DirichletSpace.testDerivative Ω i) f)
Lean proof
/-- Each gradient coordinate is the corresponding derivative class. -/
@[simp] theorem testGradient_apply (f : TestFunction Ω ℝ ⊤) (i : Fin n) :
testGradient Ω f i = testL2 Ω (testDerivative Ω i f) := by
simp only [testGradient, LinearMap.sum_apply, LinearMap.comp_apply,
ContinuousLinearMap.coe_coe, lp.singleContinuousLinearMap_apply, lp.coeFn_sum]
simp only [lp.coeFn_single]
rw [Finset.sum_apply]
simp [Pi.single_apply]
/-- The L² representative agrees almost everywhere with the test function. -/
theorem coe_testL2 (f : TestFunction Ω ℝ ⊤) :
(testL2 Ω f : (Fin n → ℝ) → ℝ) =ᵐ[volume.restrict (Ω : Set (Fin n → ℝ))] f :=
(f.continuous.memLp_of_hasCompactSupport f.hasCompactSupport).coeFn_toLp
theorem MeasureTheory.DirichletSpace.testDerivative_apply {n : ℕ} (Ω : TopologicalSpace.Opens (Fin n → ℝ))
(f : TestFunction Ω ℝ ⊤) (i : Fin n) (x : Fin n → ℝ) :
((MeasureTheory.DirichletSpace.testDerivative Ω i) f) x = (fderiv ℝ (⇑f) x) (Pi.single i 1)
Lean proof
/-- Test-function differentiation is Cartesian Fréchet differentiation. -/
theorem testDerivative_apply (f : TestFunction Ω ℝ ⊤) (i : Fin n) (x : Fin n → ℝ) :
testDerivative Ω i f x = fderiv ℝ f x (Pi.single i 1) := by
rw [testDerivative, TestFunction.lineDerivCLM_apply_of_le (by simp)]
exact (f.contDiff.differentiable (by simp)).differentiableAt.lineDeriv_eq_fderiv
theorem MeasureTheory.DirichletSpace.inner_testL2 {n : ℕ} (Ω : TopologicalSpace.Opens (Fin n → ℝ)) (f g : TestFunction Ω ℝ ⊤) :
inner ℝ ((MeasureTheory.DirichletSpace.testL2 Ω) f) ((MeasureTheory.DirichletSpace.testL2 Ω) g) =
∫ (x : Fin n → ℝ), f x * g x
Lean proof
/-- The L² pairing of tests is their ordinary Lebesgue integral on coordinate space. -/
theorem inner_testL2 (f g : TestFunction Ω ℝ ⊤) :
inner ℝ (testL2 Ω f) (testL2 Ω g) = ∫ x, f x*g x := by
rw [L2.inner_def]
calc
_ = ∫ x in (Ω : Set (Fin n → ℝ)), f x*g x := by
apply integral_congr_ae
filter_upwards [coe_testL2 Ω f, coe_testL2 Ω g] with x hf hg
simp [hf, hg, mul_comm]
_ = _ := setIntegral_eq_integral_of_forall_compl_eq_zero (fun x hx ↦ by
have hf : f x = 0 := by
by_contra hn
exact hx (f.tsupport_subset (subset_tsupport f (Function.mem_support.mpr hn)))
rw [hf, zero_mul])
/-- Compactly supported smooth tests satisfy integration by parts. -/
theorem inner_testDerivative (f g : TestFunction Ω ℝ ⊤) (i : Fin n) :
inner ℝ (testL2 Ω f) (testL2 Ω (testDerivative Ω i g)) =
-inner ℝ (testL2 Ω (testDerivative Ω i f)) (testL2 Ω g) := by
rw [inner_testL2, inner_testL2]
have hi (a b : TestFunction Ω ℝ ⊤) : Integrable (fun x ↦ a x*b x) :=
(a.continuous.mul b.continuous).integrable_of_hasCompactSupport
a.hasCompactSupport.mul_right
simp_rw [testDerivative_apply]
apply integral_mul_fderiv_eq_neg_fderiv_mul_of_integrable
· simpa only [testDerivative_apply] using hi (testDerivative Ω i f) g
· simpa only [testDerivative_apply] using hi f (testDerivative Ω i g)
· exact hi f g
· exact fun x _ ↦ (f.contDiff.differentiable (by simp)).differentiableAt
· exact fun x _ ↦ (g.contDiff.differentiable (by simp)).differentiableAt
For \(0{\lt}q{\lt}1\) and every Cartesian polynomial \(p\), put \(u=B_qp\), where \(B_q=(1-x^2-y^2)(x^2+y^2-q)\). Then
\[ \int u^2\, dA\leq \int |\nabla u|^2\, dA =-\int u\Delta u\, dA. \]
The constant is independent of degree, angular frequency, and \(q\). Writing \(Eu=x\partial _xu+y\partial _yu\), the auxiliary identity is \(\int uEu\, dA=-\int u^2\, dA\).
Lean Formalisation
theorem MvPolynomial.ae_sq_radius_le_one_zernikeAnnulusMeasure {q : ℝ} (hq : q ∈ Set.Ioo 0 1) (a b : ℝ) :
∀ᵐ (v : Fin 2 → ℝ) ∂MvPolynomial.zernikeAnnulusMeasure ⟨q, ⋯⟩ a b, v 0 ^ 2 + v 1 ^ 2 ≤ 1
Lean proof
/-- Annular measures are supported in the closed unit disk. -/
theorem ae_sq_radius_le_one_zernikeAnnulusMeasure {q : ℝ} (hq : q ∈ Ioo (0 : ℝ) 1)
(a b : ℝ) : ∀ᵐ v ∂zernikeAnnulusMeasure ⟨q,hq.1.le,hq.2⟩ a b, v 0^2+v 1^2 ≤ 1 := by
apply Measure.ae_smul_measure (μ := zernikeAnnulusProductMeasure ⟨q,hq.1.le,ne_of_lt hq.2⟩ a b)
let C : Icc (0 : ℝ) 1 × ℝ → Fin 2 → ℝ := fun v ↦
zernikeAnnulusCoordinates ⟨q,ne_of_lt hq.2⟩
⟨((v.1 : ℝ),v.2),zernikeAnnulusCoordinates_radical_nonneg
⟨q,hq.1.le,ne_of_lt hq.2⟩ v.1⟩
have hC : Continuous C := continuous_zernikeAnnulusCoordinates _ |>.comp (by fun_prop)
change ∀ᵐ v ∂Measure.map C _, v 0^2+v 1^2 ≤ 1
rw [ae_map_iff hC.measurable.aemeasurable
((isClosed_le (by fun_prop : Continuous (fun v : Fin 2 → ℝ ↦ v 0^2+v 1^2))
continuous_const).measurableSet)]
filter_upwards [] with v
have hr := zernikeAnnulusCoordinates_radical_nonneg ⟨q,hq.1.le,ne_of_lt hq.2⟩ v.1
change (Real.sqrt (1-(v.1 : ℝ)/annulusParameter ⟨q,ne_of_lt hq.2⟩)*Real.cos v.2)^2 +
(Real.sqrt (1-(v.1 : ℝ)/annulusParameter ⟨q,ne_of_lt hq.2⟩)*Real.sin v.2)^2 ≤ 1
simp only [mul_pow]
rw [← mul_add, Real.cos_sq_add_sin_sq, mul_one, Real.sq_sqrt hr]
have ht : 0 < annulusParameter ⟨q,ne_of_lt hq.2⟩ :=
lt_trans zero_lt_one (one_lt_annulusParameter hq)
have := div_nonneg v.1.property.1 ht.le
linarith
theorem MvPolynomial.diskEuler_diskRadialLift (u : Bool) (p : Polynomial ℝ) (m : ℕ) :
MvPolynomial.diskEuler (MvPolynomial.diskRadialLift u p m) =
MvPolynomial.diskRadialLift u (2 * Polynomial.X * Polynomial.derivative p + ↑m * p) m
Lean proof
/-- Euler differentiation preserves radial angular sectors. -/
theorem diskEuler_diskRadialLift (u : Bool) (p : Polynomial ℝ) (m : ℕ) :
diskEuler (diskRadialLift u p m) =
diskRadialLift u (2*Polynomial.X*p.derivative+(m : Polynomial ℝ)*p) m := by
have h (z : MvPolynomial (Fin 2) ℝ)
(hz : X 0*pderiv 0 z+X 1*pderiv 1 z = (m : MvPolynomial (Fin 2) ℝ)*z) :
diskEuler (p.eval₂ C (X 0^2+X 1^2)*z) =
(2*Polynomial.X*p.derivative+(m : Polynomial ℝ)*p).eval₂ C (X 0^2+X 1^2)*z := by
change X 0*pderiv 0 (p.eval₂ C (X 0^2+X 1^2)*z) +
X 1*pderiv 1 (p.eval₂ C (X 0^2+X 1^2)*z) = _
simp only [pderiv_mul, pderiv_zero_radial, pderiv_one_radial]
simp only [Polynomial.eval₂_add, Polynomial.eval₂_mul, Polynomial.eval₂_X,
Polynomial.eval₂_ofNat, Polynomial.eval₂_natCast]
linear_combination p.eval₂ C (X 0^2+X 1^2)*hz
cases u <;> simp only [diskRadialLift, Bool.false_eq_true, ↓reduceIte]
· exact h _ (euler_diskHarmonics m).1
· exact h _ (euler_diskHarmonics m).2
For finitely many variables and a measure with finite polynomial moments, polynomial evaluation defines a linear map to \(L^2\). Its representatives agree almost everywhere with evaluation, and its inner product equals the polynomial integral pairing.
theorem MvPolynomial.coe_polynomialToL2.{u_1} {σ : Type u_1} [Fintype σ] {μ : MeasureTheory.Measure (σ → ℝ)}
(hμ : MvPolynomial.HasFiniteMoments μ) (p : MvPolynomial σ ℝ) :
↑↑((MvPolynomial.polynomialToL2 hμ) p) =ᵐ[μ] fun x => (MvPolynomial.eval x) p
Lean proof
/-- An almost-everywhere representative of polynomial evaluation (Dunkl–Xu, Chapter 3). -/
theorem coe_polynomialToL2 (p : MvPolynomial σ ℝ) : polynomialToL2 hμ p =ᵐ[μ] fun x ↦ eval x p :=
(memLp_eval_of_hasFiniteMoments hμ p).coeFn_toLp
A family of linear isometries into a complete inner-product space, with mutually orthogonal images, induces a linear isometry from the corresponding Hilbert sum. Its value is the unconditionally convergent sum of the coordinate images.
Lean Formalisation
theorem OrthogonalFamily.hasSum_linearIsometry.{u_1, u_2, u_3, u_4} {ι : Type u_1} {𝕜 : Type u_2} [RCLike 𝕜] {E : Type u_3}
[NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {G : ι → Type u_4} [(i : ι) → NormedAddCommGroup (G i)]
[(i : ι) → InnerProductSpace 𝕜 (G i)] [CompleteSpace E] {V : (i : ι) → G i →ₗᵢ[𝕜] E} (hV : OrthogonalFamily 𝕜 G V)
(f : ↥(lp G 2)) : HasSum (fun i => (V i) (↑f i)) (hV.linearIsometry f)
is a continuous linear contraction, and this series converges unconditionally. It agrees with \(T_s\) on each single-coordinate input. If each \(T_s\) is injective, then \(T\) is injective. Closedness of the individual ranges is not required.
Lean Formalisation
theorem lp.orthogonalFamily_range.{u_1, u_2, u_3} {ι : Type u_1} {G : ι → Type u_2} {E : Type u_3}
[(i : ι) → NormedAddCommGroup (G i)] [(i : ι) → InnerProductSpace ℝ (G i)] [NormedAddCommGroup E]
[InnerProductSpace ℝ E] (T : (i : ι) → G i →L[ℝ] E)
(horth : ∀ (i j : ι), i ≠ j → ∀ (x : G i) (y : G j), inner ℝ ((T i) x) ((T j) y) = 0) :
OrthogonalFamily ℝ (fun i => ↥(↑(T i)).range) fun i => (↑(T i)).range.subtypeₗᵢ
Lean proof
/-- The images of mutually orthogonal operators form an orthogonal family of subspaces. -/
theorem orthogonalFamily_range :
OrthogonalFamily ℝ (fun i ↦ LinearMap.range (T i).toLinearMap)
(fun i ↦ (LinearMap.range (T i).toLinearMap).subtypeₗᵢ) := by
intro i j hij x y
obtain ⟨a, ha⟩ := x.property
obtain ⟨b, hb⟩ := y.property
change inner ℝ (x : E) (y : E) = 0
rw [← ha, ← hb]
exact horth i j hij a b
def lp.rangeCoordinates.{u_1, u_2, u_3} {ι : Type u_1} {G : ι → Type u_2} {E : Type u_3}
[(i : ι) → NormedAddCommGroup (G i)] [(i : ι) → InnerProductSpace ℝ (G i)] [NormedAddCommGroup E]
[InnerProductSpace ℝ E] (T : (i : ι) → G i →L[ℝ] E) (hT : ∀ (i : ι) (x : G i), ‖(T i) x‖ ≤ ‖x‖) :
↥(lp G 2) →L[ℝ] ↥(lp (fun i => ↥(↑(T i)).range) 2)
Lean definition
/-- Apply the contractions coordinatewise, retaining their range subspaces. -/
def rangeCoordinates : lp G 2 →L[ℝ] lp (fun i ↦ LinearMap.range (T i).toLinearMap) 2 :=
LinearMap.mkContinuous
{ toFun := fun x ↦ ⟨fun i ↦ ⟨T i (x i), LinearMap.mem_range_self _ _⟩,
(lp.memℓp x).mono' (fun i ↦ hT i (x i))⟩
map_add' := by
intro x y
apply lp.ext
funext i
apply Subtype.ext
exact map_add (T i) _ _
map_smul' := by
intro c x
apply lp.ext
funext i
apply Subtype.ext
exact map_smul (T i) c _ }
1 (by
intro x
simpa only [one_mul] using
(lp.norm_mono (by norm_num : (2 : ENNReal) ≠ 0) (fun i ↦ hT i (x i))))
def lp.orthogonalSynthesis.{u_1, u_2, u_3} {ι : Type u_1} {G : ι → Type u_2} {E : Type u_3}
[(i : ι) → NormedAddCommGroup (G i)] [(i : ι) → InnerProductSpace ℝ (G i)] [NormedAddCommGroup E]
[InnerProductSpace ℝ E] [CompleteSpace E] (T : (i : ι) → G i →L[ℝ] E) (hT : ∀ (i : ι) (x : G i), ‖(T i) x‖ ≤ ‖x‖)
(horth : ∀ (i j : ι), i ≠ j → ∀ (x : G i) (y : G j), inner ℝ ((T i) x) ((T j) y) = 0) : ↥(lp G 2) →L[ℝ] E
Lean definition
/-- Orthogonal contractions synthesize to a continuous map from the full Hilbert sum. -/
def orthogonalSynthesis : lp G 2 →L[ℝ] E :=
(orthogonalFamily_range T horth).linearIsometry.toContinuousLinearMap.comp (rangeCoordinates T hT)
theorem lp.hasSum_orthogonalSynthesis.{u_1, u_2, u_3} {ι : Type u_1} {G : ι → Type u_2} {E : Type u_3}
[(i : ι) → NormedAddCommGroup (G i)] [(i : ι) → InnerProductSpace ℝ (G i)] [NormedAddCommGroup E]
[InnerProductSpace ℝ E] [CompleteSpace E] (T : (i : ι) → G i →L[ℝ] E) (hT : ∀ (i : ι) (x : G i), ‖(T i) x‖ ≤ ‖x‖)
(horth : ∀ (i j : ι), i ≠ j → ∀ (x : G i) (y : G j), inner ℝ ((T i) x) ((T j) y) = 0) (x : ↥(lp G 2)) :
HasSum (fun i => (T i) (↑x i)) ((lp.orthogonalSynthesis T hT horth) x)
Lean proof
/-- Synthesis is the unconditionally convergent sum of the coordinate images. -/
theorem hasSum_orthogonalSynthesis (x : lp G 2) :
HasSum (fun i ↦ T i (x i)) (orthogonalSynthesis T hT horth x) :=
(orthogonalFamily_range T horth).hasSum_linearIsometry (rangeCoordinates T hT x)
theorem lp.norm_orthogonalSynthesis_le.{u_1, u_2, u_3} {ι : Type u_1} {G : ι → Type u_2} {E : Type u_3}
[(i : ι) → NormedAddCommGroup (G i)] [(i : ι) → InnerProductSpace ℝ (G i)] [NormedAddCommGroup E]
[InnerProductSpace ℝ E] [CompleteSpace E] (T : (i : ι) → G i →L[ℝ] E) (hT : ∀ (i : ι) (x : G i), ‖(T i) x‖ ≤ ‖x‖)
(horth : ∀ (i j : ι), i ≠ j → ∀ (x : G i) (y : G j), inner ℝ ((T i) x) ((T j) y) = 0) (x : ↥(lp G 2)) :
‖(lp.orthogonalSynthesis T hT horth) x‖ ≤ ‖x‖
Lean proof
/-- Orthogonal synthesis does not increase the Hilbert-sum norm. -/
theorem norm_orthogonalSynthesis_le (x : lp G 2) :
‖orthogonalSynthesis T hT horth x‖ ≤ ‖x‖ := by
change ‖(orthogonalFamily_range T horth).linearIsometry (rangeCoordinates T hT x)‖ ≤ _
rw [LinearIsometry.norm_map]
exact lp.norm_mono (by norm_num) (fun i ↦ hT i (x i))
theorem lp.orthogonalSynthesis_single.{u_1, u_2, u_3} {ι : Type u_1} {G : ι → Type u_2} {E : Type u_3}
[(i : ι) → NormedAddCommGroup (G i)] [(i : ι) → InnerProductSpace ℝ (G i)] [NormedAddCommGroup E]
[InnerProductSpace ℝ E] [CompleteSpace E] (T : (i : ι) → G i →L[ℝ] E) (hT : ∀ (i : ι) (x : G i), ‖(T i) x‖ ≤ ‖x‖)
(horth : ∀ (i j : ι), i ≠ j → ∀ (x : G i) (y : G j), inner ℝ ((T i) x) ((T j) y) = 0) [DecidableEq ι] (i : ι)
(x : G i) : (lp.orthogonalSynthesis T hT horth) (lp.single 2 i x) = (T i) x
Lean proof
/-- A single nonzero coordinate synthesizes to precisely its operator image. -/
theorem orthogonalSynthesis_single [DecidableEq ι] (i : ι) (x : G i) :
orthogonalSynthesis T hT horth (lp.single 2 i x) = T i x := by
rw [orthogonalSynthesis_apply, tsum_eq_single i]
· simp [lp.single_apply]
· intro j hj
simp [lp.single_apply, hj]
theorem lp.orthogonalSynthesis_injective.{u_1, u_2, u_3} {ι : Type u_1} {G : ι → Type u_2} {E : Type u_3}
[(i : ι) → NormedAddCommGroup (G i)] [(i : ι) → InnerProductSpace ℝ (G i)] [NormedAddCommGroup E]
[InnerProductSpace ℝ E] [CompleteSpace E] (T : (i : ι) → G i →L[ℝ] E) (hT : ∀ (i : ι) (x : G i), ‖(T i) x‖ ≤ ‖x‖)
(horth : ∀ (i j : ι), i ≠ j → ∀ (x : G i) (y : G j), inner ℝ ((T i) x) ((T j) y) = 0)
(hi : ∀ (i : ι), Function.Injective ⇑(T i)) : Function.Injective ⇑(lp.orthogonalSynthesis T hT horth)
Lean proof
/-- Synthesis is faithful when each coordinate operator is faithful. -/
theorem orthogonalSynthesis_injective (hi : ∀ i, Function.Injective (T i)) :
Function.Injective (orthogonalSynthesis T hT horth) := by
intro x y h
have he := (orthogonalFamily_range T horth).linearIsometry.injective h
apply lp.ext
funext i
apply hi i
exact congrArg (fun z : lp (fun i ↦ LinearMap.range (T i).toLinearMap) 2 ↦ (z i : E)) he
The \(\ell ^2\) sum of real Hilbert spaces has the sum inner product. Single-sector injections preserve their inner products, and the finite sums of the coordinates of any vector converge in the Hilbert-sum norm to that vector.
Lean Formalisation
theorem lp.inner_eq_tsum.{u_1, u_2, u_4} {ι : Type u_1} {𝕜 : Type u_2} [RCLike 𝕜] {G : ι → Type u_4}
[(i : ι) → NormedAddCommGroup (G i)] [(i : ι) → InnerProductSpace 𝕜 (G i)] (f g : ↥(lp G 2)) :
inner 𝕜 f g = ∑' (i : ι), inner 𝕜 (↑f i) (↑g i)
In each real Hilbert sector \(E_s\), let \(W_{s,N}\) be increasing finite-dimensional subspaces with dense union. For a finite sector set \(S\) define \(V_{S,N}=\bigoplus _{s\in S}W_{s,N}\) inside \(\bigoplus _s^{\ell ^2}E_s\). Its orthogonal projection is the sum of the retained sector projections. As \((S,N)\) grows in the product order (set inclusion and integer order), these projections converge strongly to the identity.
Lean Formalisation
theorem lp.HilbertSumGalerkin.trialSpace_mono.{u_1, u_2} {ι : Type u_1} [DecidableEq ι] {E : ι → Type u_2}
[(i : ι) → NormedAddCommGroup (E i)] [(i : ι) → InnerProductSpace ℝ (E i)] (W : (i : ι) → ℕ → Submodule ℝ (E i))
(hW : ∀ (i : ι), Monotone (W i)) : Monotone (lp.HilbertSumGalerkin.trialSpace W)
Lean proof
/-- Enlarging both cutoffs enlarges the trial space. -/
theorem trialSpace_mono (hW : ∀ i, Monotone (W i)) : Monotone (trialSpace W) := by
intro c d h
apply iSup_le
intro i
rintro x ⟨y, hy, rfl⟩
exact single_mem_trialSpace W d (h.1 i.property) (hW i h.2 hy)
def lp.HilbertSumGalerkin.trialSpace.{u_1, u_2} {ι : Type u_1} [DecidableEq ι] {E : ι → Type u_2}
[(i : ι) → NormedAddCommGroup (E i)] [(i : ι) → InnerProductSpace ℝ (E i)] (W : (i : ι) → ℕ → Submodule ℝ (E i))
(c : Finset ι × ℕ) : Submodule ℝ ↥(lp E 2)
Lean definition
/-- Trial vectors have finitely many sectors and a finite trial vector in each sector. -/
def trialSpace (c : Finset ι × ℕ) : Submodule ℝ (lp E 2) :=
⨆ i : c.1, (W i c.2).map (lp.lsingle (𝕜 := ℝ) (E := E) 2 (i : ι))
theorem lp.HilbertSumGalerkin.trialSpace_closure_iSup.{u_1, u_2} {ι : Type u_1} [DecidableEq ι] {E : ι → Type u_2}
[(i : ι) → NormedAddCommGroup (E i)] [(i : ι) → InnerProductSpace ℝ (E i)] (W : (i : ι) → ℕ → Submodule ℝ (E i))
[∀ (i : ι) (N : ℕ), FiniteDimensional ℝ ↥(W i N)] (hW : ∀ (i : ι), Monotone (W i))
(hd : ∀ (i : ι), (⨆ N, W i N).topologicalClosure = ⊤) :
(⨆ c, lp.HilbertSumGalerkin.trialSpace W c).topologicalClosure = ⊤
Lean proof
/-- Dense radial trial spaces give a dense union of combined finite trial spaces. -/
theorem trialSpace_closure_iSup (hW : ∀ i, Monotone (W i))
(hd : ∀ i, (⨆ N, W i N).topologicalClosure = ⊤) :
(⨆ c, trialSpace W c).topologicalClosure = ⊤ := by
let K := (⨆ c, trialSpace W c).topologicalClosure
have hK : IsClosed (K : Set (lp E 2)) := Submodule.isClosed_topologicalClosure _
have hs (i : ι) (y : E i) : lp.single 2 i y ∈ K := by
have ht := (lp.singleContinuousLinearMap ℝ E 2 i).continuous.tendsto y |>.comp
(Submodule.starProjection_tendsto_self (W i) (hW i) y (by rw [hd i]))
apply hK.mem_of_tendsto ht
apply Eventually.of_forall
intro N
apply Submodule.le_topologicalClosure
apply (le_iSup (trialSpace W) ({i}, N))
exact single_mem_trialSpace W ({i}, N) (Finset.mem_singleton_self i)
((W i N).starProjection_apply_mem _)
apply le_antisymm le_top
intro x hx
apply hK.mem_of_tendsto (lp.hasSum_single (by norm_num) x)
exact Eventually.of_forall fun S ↦ Submodule.sum_mem _ fun i hi ↦ hs i (x i)
theorem lp.HilbertSumGalerkin.tendsto_sum_projection.{u_1, u_2} {ι : Type u_1} [DecidableEq ι] {E : ι → Type u_2}
[(i : ι) → NormedAddCommGroup (E i)] [(i : ι) → InnerProductSpace ℝ (E i)] (W : (i : ι) → ℕ → Submodule ℝ (E i))
[∀ (i : ι) (N : ℕ), FiniteDimensional ℝ ↥(W i N)] (hW : ∀ (i : ι), Monotone (W i))
(hd : ∀ (i : ι), (⨆ N, W i N).topologicalClosure = ⊤) (x : ↥(lp E 2)) :
Filter.Tendsto (fun c => ∑ i ∈ c.1, lp.single 2 i ((W i c.2).starProjection (↑x i))) Filter.atTop (nhds x)
Lean proof
/-- Actual sector projections converge jointly as the finite sector set and radial degree grow. -/
theorem tendsto_sum_projection (hW : ∀ i, Monotone (W i))
(hd : ∀ i, (⨆ N, W i N).topologicalClosure = ⊤) (x : lp E 2) :
Tendsto (fun c : Finset ι × ℕ ↦
∑ i ∈ c.1, lp.single 2 i ((W i c.2).starProjection (x i))) atTop (𝓝 x) := by
simp only [sum_projection_eq]
exact Submodule.starProjection_tendsto_self (trialSpace W) (trialSpace_mono W hW) x
(by rw [trialSpace_closure_iSup W hW hd])
Let \(\mu \) have finite polynomial moments, let \(L\) be a real linear polynomial operator symmetric in the integral pairing, and suppose \(\langle Lp,p\rangle _\mu {\gt}0\) for every nonzero polynomial \(p\). For any finite linearly independent trial family \(f_i\), the matrix \(M_{ij}=\langle Lf_j,f_i\rangle _\mu \) is positive definite. Its quadratic form is exactly the energy of \(\sum _i v_i f_i\), and its rows are the corresponding tested operator values.
Lean Formalisation
theorem Polynomial.integralInner_operator_sum.{u_1} {ι : Type u_1} [Fintype ι] {μ : MeasureTheory.Measure ℝ}
(hμ : Polynomial.HasFiniteMoments μ) (L : Polynomial ℝ →ₗ[ℝ] Polynomial ℝ) (f : ι → Polynomial ℝ) (v : ι → ℝ) :
Polynomial.integralInner μ (Polynomial.IntegrablePair.of μ (L (∑ i, v i • f i)) (∑ i, v i • f i) ⋯) =
v ⬝ᵥ (Matrix.of fun i j => Polynomial.integralInner μ (Polynomial.IntegrablePair.of μ (L (f j)) (f i) ⋯)).mulVec v
Lean proof
/-- The finite coefficient quadratic form is exactly the polynomial energy. -/
theorem integralInner_operator_sum (hμ : HasFiniteMoments μ)
(L : ℝ[X] →ₗ[ℝ] ℝ[X]) (f : ι → ℝ[X]) (v : ι → ℝ) :
integralInner μ (IntegrablePair.of μ (L (∑ i, v i • f i)) (∑ i, v i • f i)) =
v ⬝ᵥ ((Matrix.of (fun i j ↦ integralInner μ (IntegrablePair.of μ (L (f j)) (f i)))) *ᵥ v) := by
have hsmul (p q : ℝ[X]) (a : ℝ) :=
integralInner_smul_left μ p q a (h := hμ.integrable_mul p q)
have hr (p : ℝ[X]) : integralInner μ (IntegrablePair.of μ p (∑ i, v i • f i)) =
∑ i, v i*integralInner μ (IntegrablePair.of μ p (f i)) := by
rw [integralInner_comm, integralInner_sum_left hμ]
simp only [hsmul]
congr 1
funext i
rw [integralInner_comm]
rw [hr]
simp only [map_sum, map_smul, integralInner_sum_left hμ, hsmul,
dotProduct, mulVec, Matrix.of_apply]
apply Finset.sum_congr rfl
intro i hi
congr 1
apply Finset.sum_congr rfl
intro j hj
ring
Every continuous real linear functional on a real Hilbert space has a unique inner-product representative. Orthogonal projections onto increasing closed subspaces with dense union converge strongly to the identity and are norm non-increasing.
Lean Formalisation
theorem InnerProductSpace.toDual_symm_apply.{u_1, u_2} {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E]
[InnerProductSpace 𝕜 E] [CompleteSpace E] {x : E} {y : StrongDual 𝕜 E} :
inner 𝕜 ((InnerProductSpace.toDual 𝕜 E).symm y) x = y x