/- Copyright (c) 2026 Joris Roos. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Codex -/ /- This file was automatically generated by Codex. -/ module public import Mathlib.Algebra.Group.ForwardDiff public import Mathlib.LinearAlgebra.Lagrange public import LeanSpherical.Auto.Spherical.AHRS.TheoremOne public import LeanSpherical.Auto.Spherical.SWW public import LeanSpherical.Auto.Spherical.PowerWeights.PlanarClosure public import LeanSpherical.Auto.Spherical.BRRS.TheoremOne public import LeanSpherical.Auto.Spherical.RS.LowerBounds public import LeanSpherical.Auto.Spherical.BRSRadial.PlanarDecomposition public import LeanSpherical.Auto.MarcinkiewiczInterpolation /-! # BRS: the planar resolution of the identity Part of the formalization of Beltran--Roos--Seeger (BRS) on spherical maximal functions of radial functions: the telescoping resolution (5.7) and the Littlewood--Paley profiles with vanishing moments. -/ @[expose] public section namespace Auto.Spherical.BRSRadial open Auto.MarcinkiewiczInterpolation open Filter MeasureTheory Set Topology ENNReal open _root_.Spherical _root_.Spherical.RestrictedDilations open Auto.Spherical.SurfaceMeasureDecay open Auto.Spherical.SphericalMaximal open Auto.Spherical.BRRS open Auto.Spherical.AHRS open scoped Spherical ENNReal NNReal Topology Convolution noncomputable section section Prop46 open Auto.FractalDimensions /-! ## (5.7): a telescoping resolution of the identity The `L¹`-normalized dilates of a fixed profile give an approximate identity, and their consecutive differences are the Littlewood--Paley pieces: each has vanishing integral, and the dilates telescope into the low-frequency piece plus the sum of the differences. This is the elementary half of BRS (5.7). -/ /-- The `L¹`-normalized dilate `φ_j(x) = 2^j φ(2^j x)`. -/ def brsDilate (φ : ℝ → ℝ) (j : ℕ) (x : ℝ) : ℝ := 2 ^ j * φ (2 ^ j * x) theorem brsDilate_zero (φ : ℝ → ℝ) (x : ℝ) : brsDilate φ 0 x = φ x := by simp [brsDilate] theorem continuous_brsDilate {φ : ℝ → ℝ} (hφ : Continuous φ) (j : ℕ) : Continuous (brsDilate φ j) := by change Continuous fun x : ℝ => 2 ^ j * φ (2 ^ j * x) exact continuous_const.mul (hφ.comp (continuous_const.mul continuous_id)) theorem hasCompactSupport_brsDilate {φ : ℝ → ℝ} (hφ : HasCompactSupport φ) (j : ℕ) : HasCompactSupport (brsDilate φ j) := by have hne : (2 : ℝ) ^ j ≠ 0 := by positivity have hcomp : HasCompactSupport (fun x : ℝ => φ (2 ^ j * x)) := by have hhom : HasCompactSupport (φ ∘ fun x : ℝ => (2 : ℝ) ^ j * x) := by refine hφ.comp_homeomorph (Homeomorph.mulLeft₀ ((2 : ℝ) ^ j) hne) exact hhom exact hcomp.mul_left /-- Dilation preserves the integral. -/ theorem integral_brsDilate (φ : ℝ → ℝ) (j : ℕ) : (∫ x, brsDilate φ j x) = ∫ x, φ x := by have hne : (2 : ℝ) ^ j ≠ 0 := by positivity change (∫ x : ℝ, 2 ^ j * φ (2 ^ j * x)) = ∫ x, φ x rw [integral_const_mul] rw [MeasureTheory.Measure.integral_comp_mul_left (fun y => φ y) ((2 : ℝ) ^ j)] rw [smul_eq_mul, ← mul_assoc] have habs : |((2 : ℝ) ^ j)⁻¹| = ((2 : ℝ) ^ j)⁻¹ := abs_of_pos (by positivity) rw [habs, mul_inv_cancel₀ hne, one_mul] /-- The Littlewood--Paley piece `ψ_j = φ_j - φ_{j-1}`. -/ def brsLPKernel (φ : ℝ → ℝ) (j : ℕ) (x : ℝ) : ℝ := brsDilate φ (j + 1) x - brsDilate φ j x theorem continuous_brsLPKernel {φ : ℝ → ℝ} (hφ : Continuous φ) (j : ℕ) : Continuous (brsLPKernel φ j) := (continuous_brsDilate hφ (j + 1)).sub (continuous_brsDilate hφ j) theorem hasCompactSupport_brsLPKernel {φ : ℝ → ℝ} (hφ : HasCompactSupport φ) (j : ℕ) : HasCompactSupport (brsLPKernel φ j) := (hasCompactSupport_brsDilate hφ (j + 1)).sub (hasCompactSupport_brsDilate hφ j) /-- **The vanishing moment of a Littlewood--Paley piece.** -/ theorem integral_brsLPKernel_eq_zero {φ : ℝ → ℝ} (hφ : Continuous φ) (hsupp : HasCompactSupport φ) (j : ℕ) : (∫ x, brsLPKernel φ j x) = 0 := by have h1 : Integrable (brsDilate φ (j + 1)) := (continuous_brsDilate hφ (j + 1)).integrable_of_hasCompactSupport (hasCompactSupport_brsDilate hsupp (j + 1)) have h2 : Integrable (brsDilate φ j) := (continuous_brsDilate hφ j).integrable_of_hasCompactSupport (hasCompactSupport_brsDilate hsupp j) change (∫ x, brsDilate φ (j + 1) x - brsDilate φ j x) = 0 rw [integral_sub h1 h2, integral_brsDilate, integral_brsDilate, sub_self] /-- **The telescoping identity for the dilates.** -/ theorem brsDilate_eq_add_sum (φ : ℝ → ℝ) (J : ℕ) (x : ℝ) : brsDilate φ J x = brsDilate φ 0 x + ∑ j ∈ Finset.range J, brsLPKernel φ j x := by induction J with | zero => simp | succ J ih => rw [Finset.sum_range_succ, ← add_assoc, ← ih] change brsDilate φ (J + 1) x = brsDilate φ J x + (brsDilate φ (J + 1) x - brsDilate φ J x) ring /-- **(5.7) of BRS, in telescoping form.** Against any bounded continuous function, the dilate at scale `2^J` splits into the low-frequency piece and the sum of the Littlewood--Paley pieces. -/ theorem brs_lp_resolution {φ : ℝ → ℝ} (hφ : Continuous φ) (hsupp : HasCompactSupport φ) {g : ℝ → ℂ} (hg : Continuous g) (J : ℕ) (x : ℝ) : (∫ y, (brsDilate φ J y : ℂ) * g (x - y)) = (∫ y, (brsDilate φ 0 y : ℂ) * g (x - y)) + ∑ j ∈ Finset.range J, ∫ y, (brsLPKernel φ j y : ℂ) * g (x - y) := by have hgc : Continuous fun y : ℝ => g (x - y) := hg.comp (continuous_const.sub continuous_id) have hint : ∀ (ψ : ℝ → ℝ), Continuous ψ → HasCompactSupport ψ → Integrable (fun y => (ψ y : ℂ) * g (x - y)) := by intro ψ hψ hψs have hcont : Continuous fun y : ℝ => (ψ y : ℂ) * g (x - y) := (Complex.continuous_ofReal.comp hψ).mul hgc refine hcont.integrable_of_hasCompactSupport ?_ have : HasCompactSupport fun y : ℝ => (ψ y : ℂ) := hψs.comp_left (g := fun z : ℝ => (z : ℂ)) (by simp) exact this.mul_right have hsum : ∀ y : ℝ, (brsDilate φ J y : ℂ) * g (x - y) = (brsDilate φ 0 y : ℂ) * g (x - y) + ∑ j ∈ Finset.range J, (brsLPKernel φ j y : ℂ) * g (x - y) := by intro y rw [← Finset.sum_mul, ← Complex.ofReal_sum, ← add_mul, ← Complex.ofReal_add, ← brsDilate_eq_add_sum φ J y] rw [show (∫ y, (brsDilate φ J y : ℂ) * g (x - y)) = ∫ y, ((brsDilate φ 0 y : ℂ) * g (x - y) + ∑ j ∈ Finset.range J, (brsLPKernel φ j y : ℂ) * g (x - y)) from integral_congr_ae (Filter.Eventually.of_forall hsum)] rw [integral_add (hint _ (continuous_brsDilate hφ 0) (hasCompactSupport_brsDilate hsupp 0)) (integrable_finsetSum _ fun j _ => hint _ (continuous_brsLPKernel hφ j) (hasCompactSupport_brsLPKernel hsupp j))] congr 1 exact integral_finsetSum _ fun j _ => hint _ (continuous_brsLPKernel hφ j) (hasCompactSupport_brsLPKernel hsupp j) /-! ## The dilates form an approximate identity -/ theorem abs_brsDilate (φ : ℝ → ℝ) (j : ℕ) (y : ℝ) : |brsDilate φ j y| = brsDilate (fun x => |φ x|) j y := by change |2 ^ j * φ (2 ^ j * y)| = 2 ^ j * |φ (2 ^ j * y)| rw [abs_mul, abs_of_pos (by positivity : (0 : ℝ) < 2 ^ j)] theorem integral_abs_brsDilate {φ : ℝ → ℝ} (j : ℕ) : (∫ y, |brsDilate φ j y|) = ∫ x, |φ x| := by simp_rw [abs_brsDilate] exact integral_brsDilate (fun x => |φ x|) j /-- Outside a shrinking neighbourhood of the origin the dilates vanish. -/ theorem brsDilate_eq_zero_of_lt {φ : ℝ → ℝ} {R : ℝ} (hR : tsupport φ ⊆ Metric.closedBall 0 R) (j : ℕ) {y : ℝ} (hy : R / 2 ^ j < |y|) : brsDilate φ j y = 0 := by have h2 : (0 : ℝ) < 2 ^ j := by positivity have hball : (2 : ℝ) ^ j * y ∉ Metric.closedBall (0 : ℝ) R := by simp only [Metric.mem_closedBall, dist_zero_right, Real.norm_eq_abs, not_le, abs_mul, abs_of_pos h2] rw [div_lt_iff₀ h2] at hy linarith [hy] have hsupp : (2 : ℝ) ^ j * y ∉ tsupport φ := fun hc => hball (hR hc) have : φ ((2 : ℝ) ^ j * y) = 0 := image_eq_zero_of_notMem_tsupport hsupp change 2 ^ j * φ (2 ^ j * y) = 0 rw [this, mul_zero] /-- **The dilates form an approximate identity.** For a compactly supported continuous profile of total integral one, the smoothed values converge to the value of a continuous function. -/ theorem tendsto_brsDilate_convolution {φ : ℝ → ℝ} (hφ : Continuous φ) (hsupp : HasCompactSupport φ) (hnorm : (∫ x, φ x) = 1) {g : ℝ → ℂ} (hg : Continuous g) (x : ℝ) : Tendsto (fun J : ℕ => ∫ y, (brsDilate φ J y : ℂ) * g (x - y)) atTop (𝓝 (g x)) := by obtain ⟨R, hR0, hR⟩ : ∃ R : ℝ, 0 < R ∧ tsupport φ ⊆ Metric.closedBall 0 R := by obtain ⟨R, hR⟩ := (hsupp.isCompact.isBounded).subset_closedBall (0 : ℝ) exact ⟨max R 1, lt_of_lt_of_le zero_lt_one (le_max_right _ _), hR.trans (Metric.closedBall_subset_closedBall (le_max_left _ _))⟩ set L : ℝ := ∫ x, |φ x| with hL have hLnn : 0 ≤ L := by rw [hL] exact integral_nonneg fun x => abs_nonneg _ have hgc : ∀ z : ℝ, Continuous fun y : ℝ => g (z - y) := fun z => hg.comp (continuous_const.sub continuous_id) -- integrability of the smoothed integrands have hint : ∀ (ψ : ℝ → ℝ), Continuous ψ → HasCompactSupport ψ → ∀ h : ℝ → ℂ, Continuous h → Integrable (fun y => (ψ y : ℂ) * h y) := by intro ψ hψ hψs h hh have hcont : Continuous fun y : ℝ => (ψ y : ℂ) * h y := (Complex.continuous_ofReal.comp hψ).mul hh refine hcont.integrable_of_hasCompactSupport ?_ have hcs : HasCompactSupport fun y : ℝ => (ψ y : ℂ) := hψs.comp_left (g := fun z : ℝ => (z : ℂ)) (by simp) exact hcs.mul_right have hintAbs : ∀ (ψ : ℝ → ℝ), Continuous ψ → HasCompactSupport ψ → Integrable fun y => |ψ y| := by intro ψ hψ hψs exact (hψ.abs).integrable_of_hasCompactSupport hψs.abs -- the normalization have hone : ∀ J : ℕ, (∫ y, (brsDilate φ J y : ℂ)) = 1 := by intro J rw [integral_complex_ofReal, integral_brsDilate, hnorm] simp refine Metric.tendsto_atTop.mpr fun ε hε => ?_ set ε' : ℝ := ε / (2 * (L + 1)) with hε' have hε'pos : 0 < ε' := by rw [hε'] positivity obtain ⟨δ, hδ0, hδ⟩ : ∃ δ : ℝ, 0 < δ ∧ ∀ y : ℝ, |y| ≤ δ → ‖g (x - y) - g x‖ ≤ ε' := by have hcont : ContinuousAt (fun y : ℝ => g (x - y)) 0 := (hgc x).continuousAt have : ∀ᶠ y : ℝ in 𝓝 (0 : ℝ), ‖g (x - y) - g x‖ < ε' := by have htend := hcont.tendsto simp only [sub_zero] at htend have hmem := htend (Metric.ball_mem_nhds (g x) hε'pos) rw [Filter.mem_map] at hmem filter_upwards [hmem] with y hy rw [← dist_eq_norm] exact hy obtain ⟨δ, hδ0, hδball⟩ := Metric.eventually_nhds_iff.mp this refine ⟨δ / 2, by positivity, fun y hy => ?_⟩ refine le_of_lt (hδball ?_) rw [Real.dist_eq, sub_zero] linarith obtain ⟨N, hN⟩ : ∃ N : ℕ, R / 2 ^ N ≤ δ := by obtain ⟨N, hNlt⟩ := pow_unbounded_of_one_lt (R / δ) (by norm_num : (1 : ℝ) < 2) refine ⟨N, ?_⟩ rw [div_le_iff₀ (by positivity : (0 : ℝ) < 2 ^ N)] rw [div_lt_iff₀ hδ0] at hNlt linarith refine ⟨N, fun J hJ => ?_⟩ have hRJ : R / 2 ^ J ≤ δ := by refine le_trans ?_ hN refine div_le_div_of_nonneg_left hR0.le (by positivity) ?_ exact pow_le_pow_right₀ (by norm_num) hJ -- rewrite the difference have hdiff : (∫ y, (brsDilate φ J y : ℂ) * g (x - y)) - g x = ∫ y, (brsDilate φ J y : ℂ) * (g (x - y) - g x) := by have h1 : Integrable fun y => (brsDilate φ J y : ℂ) * g (x - y) := hint _ (continuous_brsDilate hφ J) (hasCompactSupport_brsDilate hsupp J) _ (hgc x) have h2 : Integrable fun y => (brsDilate φ J y : ℂ) * g x := hint _ (continuous_brsDilate hφ J) (hasCompactSupport_brsDilate hsupp J) _ continuous_const have h3 : (∫ y, (brsDilate φ J y : ℂ) * g x) = g x := by rw [integral_mul_const, hone J, one_mul] rw [show (fun y => (brsDilate φ J y : ℂ) * (g (x - y) - g x)) = (fun y => (brsDilate φ J y : ℂ) * g (x - y) - (brsDilate φ J y : ℂ) * g x) from by funext y ring] rw [integral_sub h1 h2, h3] -- the pointwise bound have hptbound : ∀ y : ℝ, ‖(brsDilate φ J y : ℂ) * (g (x - y) - g x)‖ ≤ |brsDilate φ J y| * ε' := by intro y rcases le_or_gt |y| (R / 2 ^ J) with hy | hy · rw [norm_mul, Complex.norm_real, Real.norm_eq_abs] exact mul_le_mul_of_nonneg_left (hδ y (le_trans hy hRJ)) (abs_nonneg _) · rw [brsDilate_eq_zero_of_lt hR J hy] simp have hnormle : ‖∫ y, (brsDilate φ J y : ℂ) * (g (x - y) - g x)‖ ≤ L * ε' := by refine le_trans (norm_integral_le_integral_norm _) ?_ have hint1 : Integrable fun y => ‖(brsDilate φ J y : ℂ) * (g (x - y) - g x)‖ := (hint _ (continuous_brsDilate hφ J) (hasCompactSupport_brsDilate hsupp J) _ ((hgc x).sub continuous_const)).norm have hint2 : Integrable fun y => |brsDilate φ J y| * ε' := (hintAbs _ (continuous_brsDilate hφ J) (hasCompactSupport_brsDilate hsupp J)).mul_const _ refine le_trans (integral_mono hint1 hint2 hptbound) (le_of_eq ?_) rw [integral_mul_const, integral_abs_brsDilate] rw [dist_eq_norm, hdiff] have hLL : L / (L + 1) ≤ 1 := by rw [div_le_one (by linarith)] linarith have hsplit : L * ε' = (L / (L + 1)) * (ε / 2) := by rw [hε'] field_simp calc ‖∫ y, (brsDilate φ J y : ℂ) * (g (x - y) - g x)‖ ≤ L * ε' := hnormle _ = (L / (L + 1)) * (ε / 2) := hsplit _ ≤ 1 * (ε / 2) := mul_le_mul_of_nonneg_right hLL (by positivity) _ = ε / 2 := one_mul _ _ < ε := by linarith /-- **(5.7) of BRS, in limit form.** The low-frequency piece together with the Littlewood--Paley pieces resolves the identity: the partial sums converge to the value of the function. -/ theorem brs_lp_resolution_tendsto {φ : ℝ → ℝ} (hφ : Continuous φ) (hsupp : HasCompactSupport φ) (hnorm : (∫ x, φ x) = 1) {g : ℝ → ℂ} (hg : Continuous g) (x : ℝ) : Tendsto (fun J : ℕ => (∫ y, (brsDilate φ 0 y : ℂ) * g (x - y)) + ∑ j ∈ Finset.range J, ∫ y, (brsLPKernel φ j y : ℂ) * g (x - y)) atTop (𝓝 (g x)) := by have h := tendsto_brsDilate_convolution hφ hsupp hnorm hg x refine h.congr fun J => ?_ exact brs_lp_resolution hφ hsupp hg J x /-! ## Kernels with vanishing moments of higher order An `N`-fold difference of a compactly supported profile has vanishing moments of every order below `N`. This is the ingredient BRS use through the factorization in (5.7), and it is what powers the kernel estimates (5.11). -/ /-- The alternating binomial sum against a power vanishes below the order. -/ theorem brs_alternating_sum_pow_eq_zero {N j : ℕ} (hj : j < N) : ∑ k ∈ Finset.range (N + 1), (-1 : ℝ) ^ k * (N.choose k) * (k : ℝ) ^ j = 0 := by have hzero : (fwdDiff (1 : ℝ))^[N] (fun r : ℝ => r ^ j) = 0 := fwdDiff_iter_pow_eq_zero_of_lt hj have hsum := fwdDiff_iter_eq_sum_shift (h := (1 : ℝ)) (fun r : ℝ => r ^ j) N 0 rw [hzero] at hsum have hsum' : (0 : ℝ) = ∑ k ∈ Finset.range (N + 1), ((-1 : ℤ) ^ (N - k) * (N.choose k) : ℤ) • ((k : ℝ) ^ j) := by simpa using hsum have hfac : ∀ k ∈ Finset.range (N + 1), ((-1 : ℤ) ^ (N - k) * (N.choose k) : ℤ) • ((k : ℝ) ^ j) = (-1 : ℝ) ^ N * ((-1 : ℝ) ^ k * (N.choose k) * (k : ℝ) ^ j) := by intro k hk have hkN : k ≤ N := Nat.lt_succ_iff.mp (Finset.mem_range.mp hk) have hpow : ((-1 : ℝ)) ^ (N - k) = (-1 : ℝ) ^ N * (-1 : ℝ) ^ k := by have : (-1 : ℝ) ^ N = (-1 : ℝ) ^ (N - k) * (-1 : ℝ) ^ k := by rw [← pow_add] congr 1 omega rw [this] rw [mul_assoc, ← pow_add] have h2 : k + k = 2 * k := by ring rw [h2, pow_mul] norm_num rw [zsmul_eq_mul] push_cast rw [hpow] ring rw [Finset.sum_congr rfl hfac, ← Finset.mul_sum] at hsum' have hne : ((-1 : ℝ) ^ N) ≠ 0 := pow_ne_zero N (by norm_num) exact (mul_eq_zero.mp hsum'.symm).resolve_left hne /-- The `N`-fold difference of a profile, at spacing `h`. -/ def brsMomentKernel (χ : ℝ → ℝ) (N : ℕ) (h : ℝ) (x : ℝ) : ℝ := ∑ k ∈ Finset.range (N + 1), (-1 : ℝ) ^ k * (N.choose k) * χ (x - k * h) theorem continuous_brsMomentKernel {χ : ℝ → ℝ} (hχ : Continuous χ) (N : ℕ) (h : ℝ) : Continuous (brsMomentKernel χ N h) := by refine continuous_finsetSum _ fun k _ => ?_ exact continuous_const.mul (hχ.comp (continuous_id.sub continuous_const)) theorem hasCompactSupport_finsetSum {ι : Type*} {s : Finset ι} {f : ι → ℝ → ℝ} (hf : ∀ i ∈ s, HasCompactSupport (f i)) : HasCompactSupport (fun x => ∑ i ∈ s, f i x) := by classical induction s using Finset.induction with | empty => have hz : HasCompactSupport (fun _ : ℝ => (0 : ℝ)) := by rw [hasCompactSupport_def] simp simpa using hz | insert a s ha ih => have hmem : ∀ i ∈ s, HasCompactSupport (f i) := fun i hi => hf i (Finset.mem_insert_of_mem hi) have hsum := ih hmem have hfa := hf a (Finset.mem_insert_self a s) have : (fun x => ∑ i ∈ insert a s, f i x) = fun x => f a x + ∑ i ∈ s, f i x := by funext x rw [Finset.sum_insert ha] rw [this] exact hfa.add hsum theorem hasCompactSupport_brsMomentKernel {χ : ℝ → ℝ} (hχ : HasCompactSupport χ) (N : ℕ) (h : ℝ) : HasCompactSupport (brsMomentKernel χ N h) := by refine hasCompactSupport_finsetSum fun k _ => ?_ refine HasCompactSupport.mul_left ?_ exact hχ.comp_homeomorph (Homeomorph.subRight ((k : ℝ) * h)) /-- **Vanishing moments of the difference kernel.** -/ theorem integral_pow_mul_brsMomentKernel {χ : ℝ → ℝ} (hχ : Continuous χ) (hsupp : HasCompactSupport χ) {N j : ℕ} (hj : j < N) (h : ℝ) : (∫ x, x ^ j * brsMomentKernel χ N h x) = 0 := by -- the moments of the profile set m : ℕ → ℝ := fun i => ∫ y, y ^ i * χ y with hm have hintPow : ∀ (i : ℕ) (c : ℝ), Integrable fun x : ℝ => x ^ i * χ (x - c) := by intro i c have hcont : Continuous fun x : ℝ => x ^ i * χ (x - c) := (continuous_pow i).mul (hχ.comp (continuous_id.sub continuous_const)) refine hcont.integrable_of_hasCompactSupport ?_ exact HasCompactSupport.mul_left (hsupp.comp_homeomorph (Homeomorph.subRight c)) have hintPow0 : ∀ i : ℕ, Integrable fun y : ℝ => y ^ i * χ y := by intro i have := hintPow i 0 simpa using this -- the shifted moment expansion have hshift : ∀ c : ℝ, (∫ x, x ^ j * χ (x - c)) = ∑ i ∈ Finset.range (j + 1), (j.choose i : ℝ) * c ^ (j - i) * m i := by intro c have hsub : (∫ x, ((x - c) + c) ^ j * χ (x - c)) = ∫ y, (y + c) ^ j * χ y := integral_sub_right_eq_self (fun y => (y + c) ^ j * χ y) c have hlhs : (∫ x, x ^ j * χ (x - c)) = ∫ x, ((x - c) + c) ^ j * χ (x - c) := by refine integral_congr_ae (Filter.Eventually.of_forall fun x => ?_) change x ^ j * χ (x - c) = (x - c + c) ^ j * χ (x - c) rw [sub_add_cancel] rw [hlhs, hsub] have hexp : ∀ y : ℝ, (y + c) ^ j * χ y = ∑ i ∈ Finset.range (j + 1), (j.choose i : ℝ) * c ^ (j - i) * (y ^ i * χ y) := by intro y rw [add_pow] rw [Finset.sum_mul] refine Finset.sum_congr rfl fun i _ => ?_ ring refine Eq.trans (integral_congr_ae (Filter.Eventually.of_forall hexp)) ?_ refine Eq.trans (integral_finsetSum _ fun i _ => ((hintPow0 i).const_mul _)) ?_ refine Finset.sum_congr rfl fun i _ => ?_ rw [integral_const_mul, hm] -- expand the kernel have hexpand : (∫ x, x ^ j * brsMomentKernel χ N h x) = ∑ k ∈ Finset.range (N + 1), (-1 : ℝ) ^ k * (N.choose k) * ∫ x, x ^ j * χ (x - k * h) := by have hpt : ∀ x : ℝ, x ^ j * brsMomentKernel χ N h x = ∑ k ∈ Finset.range (N + 1), (-1 : ℝ) ^ k * (N.choose k) * (x ^ j * χ (x - k * h)) := by intro x rw [brsMomentKernel, Finset.mul_sum] refine Finset.sum_congr rfl fun k _ => ?_ ring refine Eq.trans (integral_congr_ae (Filter.Eventually.of_forall hpt)) ?_ refine Eq.trans (integral_finsetSum _ fun k _ => ((hintPow j ((k : ℝ) * h)).const_mul _)) ?_ refine Finset.sum_congr rfl fun k _ => ?_ rw [integral_const_mul] rw [hexpand] -- swap the two sums and use the alternating identity have hswap : ∑ k ∈ Finset.range (N + 1), (-1 : ℝ) ^ k * (N.choose k) * (∫ x, x ^ j * χ (x - k * h)) = ∑ k ∈ Finset.range (N + 1), ∑ i ∈ Finset.range (j + 1), ((-1 : ℝ) ^ k * (N.choose k)) * ((j.choose i : ℝ) * ((k : ℝ) * h) ^ (j - i) * m i) := by refine Finset.sum_congr rfl fun k _ => ?_ rw [hshift ((k : ℝ) * h), Finset.mul_sum] rw [hswap, Finset.sum_comm] refine Finset.sum_eq_zero fun i hi => ?_ have hji : j - i < N := lt_of_le_of_lt (Nat.sub_le j i) hj have hterm : ∀ k ∈ Finset.range (N + 1), ((-1 : ℝ) ^ k * (N.choose k)) * ((j.choose i : ℝ) * ((k : ℝ) * h) ^ (j - i) * m i) = ((j.choose i : ℝ) * h ^ (j - i) * m i) * ((-1 : ℝ) ^ k * (N.choose k) * (k : ℝ) ^ (j - i)) := by intro k _ rw [mul_pow] ring rw [Finset.sum_congr rfl hterm, ← Finset.mul_sum, brs_alternating_sum_pow_eq_zero hji, mul_zero] /-! ## Littlewood--Paley pieces with vanishing moments If the profile itself has vanishing moments of orders `1, …, N-1` and total mass one, then every Littlewood--Paley piece has vanishing moments of all orders below `N`, while the dilates still resolve the identity. -/ /-- The moments of a dilate scale by the expected power. -/ theorem integral_pow_mul_brsDilate {φ : ℝ → ℝ} (_hφ : Continuous φ) (_hsupp : HasCompactSupport φ) (i j : ℕ) : (∫ x, x ^ i * brsDilate φ j x) = ((2 : ℝ) ^ j) ^ (-(i : ℤ)) * ∫ y, y ^ i * φ y := by have ha : (0 : ℝ) < 2 ^ j := by positivity have hane : ((2 : ℝ) ^ j) ≠ 0 := ne_of_gt ha have hstep : (∫ x, x ^ i * φ (2 ^ j * x)) = |((2 : ℝ) ^ j)⁻¹| * ∫ y, (y / 2 ^ j) ^ i * φ y := by have hg := MeasureTheory.Measure.integral_comp_mul_left (fun y : ℝ => (y / 2 ^ j) ^ i * φ y) ((2 : ℝ) ^ j) have hlhs : (∫ x, ((2 : ℝ) ^ j * x / 2 ^ j) ^ i * φ (2 ^ j * x)) = ∫ x, x ^ i * φ (2 ^ j * x) := by refine integral_congr_ae (Filter.Eventually.of_forall fun x => ?_) change ((2 : ℝ) ^ j * x / 2 ^ j) ^ i * φ (2 ^ j * x) = x ^ i * φ (2 ^ j * x) congr 2 field_simp rw [hlhs] at hg rw [hg, smul_eq_mul] have hdiv : (∫ y, (y / 2 ^ j) ^ i * φ y) = ((2 : ℝ) ^ j) ^ (-(i : ℤ)) * ∫ y, y ^ i * φ y := by have hpt : ∀ y : ℝ, (y / 2 ^ j) ^ i * φ y = ((2 : ℝ) ^ j) ^ (-(i : ℤ)) * (y ^ i * φ y) := by intro y rw [div_pow, zpow_neg, zpow_natCast] field_simp rw [show (∫ y, (y / 2 ^ j) ^ i * φ y) = ∫ y, ((2 : ℝ) ^ j) ^ (-(i : ℤ)) * (y ^ i * φ y) from integral_congr_ae (Filter.Eventually.of_forall hpt)] rw [integral_const_mul] have hfinal : (∫ x, x ^ i * brsDilate φ j x) = 2 ^ j * ∫ x, x ^ i * φ (2 ^ j * x) := by have hpt : ∀ x : ℝ, x ^ i * brsDilate φ j x = 2 ^ j * (x ^ i * φ (2 ^ j * x)) := by intro x change x ^ i * (2 ^ j * φ (2 ^ j * x)) = 2 ^ j * (x ^ i * φ (2 ^ j * x)) ring rw [show (∫ x, x ^ i * brsDilate φ j x) = ∫ x, 2 ^ j * (x ^ i * φ (2 ^ j * x)) from integral_congr_ae (Filter.Eventually.of_forall hpt)] rw [integral_const_mul] rw [hfinal, hstep, hdiv, abs_of_pos (by positivity : (0 : ℝ) < ((2 : ℝ) ^ j)⁻¹)] field_simp /-- A BRS profile of order `N`: an `L¹`-normalized compactly supported continuous bump whose moments of orders `1, …, N-1` vanish. -/ structure IsBRSProfile (N : ℕ) (φ : ℝ → ℝ) : Prop where cont : Continuous φ supp : HasCompactSupport φ mass : (∫ x, φ x) = 1 moments : ∀ i : ℕ, 1 ≤ i → i < N → (∫ x, x ^ i * φ x) = 0 /-- **The Littlewood--Paley pieces of a BRS profile have vanishing moments of every order below `N`.** -/ theorem integral_pow_mul_brsLPKernel_eq_zero {N : ℕ} {φ : ℝ → ℝ} (hprof : IsBRSProfile N φ) {i : ℕ} (hi : i < N) (j : ℕ) : (∫ x, x ^ i * brsLPKernel φ j x) = 0 := by have hint : ∀ l : ℕ, Integrable fun x : ℝ => x ^ i * brsDilate φ l x := by intro l have hcont : Continuous fun x : ℝ => x ^ i * brsDilate φ l x := (continuous_pow i).mul (continuous_brsDilate hprof.cont l) exact hcont.integrable_of_hasCompactSupport (HasCompactSupport.mul_left (hasCompactSupport_brsDilate hprof.supp l)) have hsplit : (∫ x, x ^ i * brsLPKernel φ j x) = (∫ x, x ^ i * brsDilate φ (j + 1) x) - ∫ x, x ^ i * brsDilate φ j x := by have hpt : ∀ x : ℝ, x ^ i * brsLPKernel φ j x = x ^ i * brsDilate φ (j + 1) x - x ^ i * brsDilate φ j x := by intro x change x ^ i * (brsDilate φ (j + 1) x - brsDilate φ j x) = x ^ i * brsDilate φ (j + 1) x - x ^ i * brsDilate φ j x ring rw [show (∫ x, x ^ i * brsLPKernel φ j x) = ∫ x, (x ^ i * brsDilate φ (j + 1) x - x ^ i * brsDilate φ j x) from integral_congr_ae (Filter.Eventually.of_forall hpt)] exact integral_sub (hint (j + 1)) (hint j) rw [hsplit, integral_pow_mul_brsDilate hprof.cont hprof.supp, integral_pow_mul_brsDilate hprof.cont hprof.supp] rcases Nat.eq_zero_or_pos i with hi0 | hipos · subst hi0 simp · rw [hprof.moments i hipos hi] ring /-- A combination of dilates of a normalized bump is a BRS profile as soon as its coefficients satisfy the Vandermonde conditions at the nodes `2^{-l}`. -/ theorem isBRSProfile_of_coeffs {N : ℕ} {χ : ℝ → ℝ} (hχ : Continuous χ) (hsupp : HasCompactSupport χ) (hmass : (∫ x, χ x) = 1) (a : ℕ → ℝ) (h0 : ∑ l ∈ Finset.range N, a l = 1) (hvan : ∀ i : ℕ, 1 ≤ i → i < N → ∑ l ∈ Finset.range N, a l * ((2 : ℝ) ^ l) ^ (-(i : ℤ)) = 0) : IsBRSProfile N (fun x => ∑ l ∈ Finset.range N, a l * brsDilate χ l x) := by have hcontDil : ∀ l : ℕ, Continuous fun x : ℝ => a l * brsDilate χ l x := fun l => continuous_const.mul (continuous_brsDilate hχ l) have hsuppDil : ∀ l : ℕ, HasCompactSupport fun x : ℝ => a l * brsDilate χ l x := fun l => HasCompactSupport.mul_left (hasCompactSupport_brsDilate hsupp l) have hintDil : ∀ (i l : ℕ), Integrable fun x : ℝ => x ^ i * (a l * brsDilate χ l x) := by intro i l have hcont : Continuous fun x : ℝ => x ^ i * (a l * brsDilate χ l x) := (continuous_pow i).mul (hcontDil l) exact hcont.integrable_of_hasCompactSupport (HasCompactSupport.mul_left (hsuppDil l)) refine ⟨?_, ?_, ?_, ?_⟩ · exact continuous_finsetSum _ fun l _ => hcontDil l · exact hasCompactSupport_finsetSum fun l _ => hsuppDil l · -- total mass have hint : ∀ l : ℕ, Integrable fun x : ℝ => a l * brsDilate χ l x := by intro l exact (hcontDil l).integrable_of_hasCompactSupport (hsuppDil l) rw [integral_finsetSum _ fun l _ => hint l] have : ∀ l ∈ Finset.range N, (∫ x, a l * brsDilate χ l x) = a l := by intro l _ rw [integral_const_mul, integral_brsDilate, hmass, mul_one] rw [Finset.sum_congr rfl this, h0] · -- vanishing moments intro i hi1 hiN have hpt : ∀ x : ℝ, x ^ i * ∑ l ∈ Finset.range N, a l * brsDilate χ l x = ∑ l ∈ Finset.range N, x ^ i * (a l * brsDilate χ l x) := by intro x rw [Finset.mul_sum] rw [show (∫ x, x ^ i * ∑ l ∈ Finset.range N, a l * brsDilate χ l x) = ∫ x, ∑ l ∈ Finset.range N, x ^ i * (a l * brsDilate χ l x) from integral_congr_ae (Filter.Eventually.of_forall hpt)] rw [integral_finsetSum _ fun l _ => hintDil i l] have hterm : ∀ l ∈ Finset.range N, (∫ x, x ^ i * (a l * brsDilate χ l x)) = (a l * ((2 : ℝ) ^ l) ^ (-(i : ℤ))) * ∫ y, y ^ i * χ y := by intro l _ have hrw : ∀ x : ℝ, x ^ i * (a l * brsDilate χ l x) = a l * (x ^ i * brsDilate χ l x) := by intro x ring rw [show (∫ x, x ^ i * (a l * brsDilate χ l x)) = ∫ x, a l * (x ^ i * brsDilate χ l x) from integral_congr_ae (Filter.Eventually.of_forall hrw)] rw [integral_const_mul, integral_pow_mul_brsDilate hχ hsupp] ring rw [Finset.sum_congr rfl hterm, ← Finset.sum_mul, hvan i hi1 hiN, zero_mul] /-! ## Existence of BRS profiles of every order -/ /-- The dyadic nodes `2^{-l}`. -/ def brsNode (l : ℕ) : ℝ := ((2 : ℝ) ^ l)⁻¹ theorem brsNode_pos (l : ℕ) : 0 < brsNode l := by rw [brsNode] positivity theorem brsNode_injOn (N : ℕ) : Set.InjOn brsNode (Finset.range N : Finset ℕ) := by intro l hl k hk hlk rw [brsNode, brsNode] at hlk have h2 : ((2 : ℝ) ^ l) = ((2 : ℝ) ^ k) := by have hl0 : ((2 : ℝ) ^ l) ≠ 0 := by positivity have hk0 : ((2 : ℝ) ^ k) ≠ 0 := by positivity field_simp at hlk linarith [hlk] exact Nat.pow_right_injective (le_refl 2) (by exact_mod_cast h2 : (2 : ℕ) ^ l = (2 : ℕ) ^ k) theorem brsNode_pow (l i : ℕ) : brsNode l ^ i = ((2 : ℝ) ^ l) ^ (-(i : ℤ)) := by rw [brsNode, zpow_neg, zpow_natCast, inv_pow] /-- **The Vandermonde coefficients exist**: the Lagrange weights at the origin for the dyadic nodes reproduce the value at zero of every polynomial of degree below `N`. -/ theorem exists_brs_coeffs (N : ℕ) (hN : 0 < N) : ∃ a : ℕ → ℝ, (∑ l ∈ Finset.range N, a l = 1) ∧ ∀ i : ℕ, 1 ≤ i → i < N → ∑ l ∈ Finset.range N, a l * ((2 : ℝ) ^ l) ^ (-(i : ℤ)) = 0 := by classical set a : ℕ → ℝ := fun l => (Lagrange.basis (Finset.range N) brsNode l).eval 0 with ha have hkey : ∀ i : ℕ, i < N → ∑ l ∈ Finset.range N, brsNode l ^ i * a l = (0 : ℝ) ^ i := by intro i hi have hdeg : (Polynomial.X ^ i : Polynomial ℝ).degree < (Finset.range N).card := by rw [Finset.card_range] refine lt_of_le_of_lt (Polynomial.degree_X_pow_le i) ?_ exact_mod_cast Nat.cast_lt.mpr hi have heq := Lagrange.eq_interpolate (v := brsNode) (s := Finset.range N) (f := (Polynomial.X ^ i : Polynomial ℝ)) (brsNode_injOn N) hdeg rw [Lagrange.interpolate_apply] at heq have h1 := congrArg (fun p : Polynomial ℝ => p.eval 0) heq simp only [Polynomial.eval_pow, Polynomial.eval_X, Polynomial.eval_finsetSum, Polynomial.eval_mul, Polynomial.eval_C] at h1 rw [ha] exact h1.symm refine ⟨a, ?_, ?_⟩ · have h := hkey 0 hN simpa using h · intro i hi1 hiN have h := hkey i hiN rw [zero_pow (by omega : i ≠ 0)] at h rw [← h] refine Finset.sum_congr rfl fun l _ => ?_ rw [brsNode_pow] ring /-- **BRS profiles of every order exist.** -/ theorem exists_isBRSProfile (N : ℕ) (hN : 0 < N) : ∃ φ : ℝ → ℝ, IsBRSProfile N φ := by obtain ⟨a, h0, hvan⟩ := exists_brs_coeffs N hN let f : ContDiffBump (0 : ℝ) := ⟨1, 2, one_pos, by norm_num⟩ set χ : ℝ → ℝ := f.normed volume with hχ have hχcont : Continuous χ := f.continuous_normed have hχsupp : HasCompactSupport χ := f.hasCompactSupport_normed have hχmass : (∫ x, χ x) = 1 := f.integral_normed exact ⟨_, isBRSProfile_of_coeffs hχcont hχsupp hχmass a h0 hvan⟩ /-! ## The smoothed profile: Hölder's inequality for a convolution This is the sup bound behind the low-frequency estimate (5.8) of BRS: the smoothing of `f₀` at a dyadic scale is bounded by the `L^{q}` norm of the kernel times the `L^p` norm of `f₀`. -/ /-- **Hölder for the smoothed function.** -/ theorem enorm_smoothed_le {p q : ℝ} (hpq : p.HolderConjugate q) {ψ : ℝ → ℝ} (hψ : Measurable ψ) {f₀ : ℝ → ℂ} (hf : Measurable f₀) (s : ℝ) : ‖∫ y, (ψ y : ℂ) * f₀ (s - y)‖ₑ ≤ (∫⁻ y, ‖ψ y‖ₑ ^ q) ^ (1 / q) * (∫⁻ z, ‖f₀ z‖ₑ ^ p) ^ (1 / p) := by have hstep1 : ‖∫ y, (ψ y : ℂ) * f₀ (s - y)‖ₑ ≤ ∫⁻ y, ‖(ψ y : ℂ) * f₀ (s - y)‖ₑ := enorm_integral_le_lintegral_enorm _ have hprod : ∀ y : ℝ, ‖(ψ y : ℂ) * f₀ (s - y)‖ₑ = ‖ψ y‖ₑ * ‖f₀ (s - y)‖ₑ := by intro y rw [enorm_mul, ← ofReal_norm, Complex.norm_real, ofReal_norm] have hmeasψ : AEMeasurable (fun y : ℝ => ‖ψ y‖ₑ) volume := hψ.enorm.aemeasurable have hmeasf : AEMeasurable (fun y : ℝ => ‖f₀ (s - y)‖ₑ) volume := ((hf.comp (measurable_const.sub measurable_id)).enorm).aemeasurable have hholder := ENNReal.lintegral_mul_le_Lp_mul_Lq (volume : Measure ℝ) hpq.symm hmeasψ hmeasf have htrans : (∫⁻ y, ‖f₀ (s - y)‖ₑ ^ p) = ∫⁻ z, ‖f₀ z‖ₑ ^ p := lintegral_sub_left_eq_self (fun z => ‖f₀ z‖ₑ ^ p) s calc ‖∫ y, (ψ y : ℂ) * f₀ (s - y)‖ₑ ≤ ∫⁻ y, ‖(ψ y : ℂ) * f₀ (s - y)‖ₑ := hstep1 _ = ∫⁻ y, ‖ψ y‖ₑ * ‖f₀ (s - y)‖ₑ := lintegral_congr hprod _ ≤ (∫⁻ y, ‖ψ y‖ₑ ^ q) ^ (1 / q) * (∫⁻ y, ‖f₀ (s - y)‖ₑ ^ p) ^ (1 / p) := hholder _ = (∫⁻ y, ‖ψ y‖ₑ ^ q) ^ (1 / q) * (∫⁻ z, ‖f₀ z‖ₑ ^ p) ^ (1 / p) := by rw [htrans] /-- The `L^q` norm of a dilate scales by `2^{k(1 - 1/q)}`. -/ theorem lintegral_enorm_brsDilate_rpow {φ : ℝ → ℝ} (hφ : Continuous φ) (hsupp : HasCompactSupport φ) {q : ℝ} (hq : 0 < q) (k : ℕ) : (∫⁻ y, ‖brsDilate φ k y‖ₑ ^ q) = ENNReal.ofReal (((2 : ℝ) ^ k) ^ (q - 1)) * ∫⁻ y, ‖φ y‖ₑ ^ q := by have hkpos : (0 : ℝ) < 2 ^ k := by positivity have hkne : ((2 : ℝ) ^ k) ≠ 0 := ne_of_gt hkpos -- rewrite both sides as `ofReal` of real integrals have hreal : ∀ ψ : ℝ → ℝ, Continuous ψ → HasCompactSupport ψ → (∫⁻ y, ‖ψ y‖ₑ ^ q) = ENNReal.ofReal (∫ y, |ψ y| ^ q) := by intro ψ hψ hψs have hcont : Continuous fun y : ℝ => |ψ y| ^ q := (continuous_rpow_const_of_nonneg hq.le).comp hψ.abs have hint : Integrable fun y : ℝ => |ψ y| ^ q := by refine hcont.integrable_of_hasCompactSupport ?_ have hzero : ∀ y : ℝ, ψ y = 0 → |ψ y| ^ q = 0 := by intro y hy rw [hy, abs_zero, Real.zero_rpow (ne_of_gt hq)] refine HasCompactSupport.intro hψs.isCompact ?_ intro y hy exact hzero y (image_eq_zero_of_notMem_tsupport hy) rw [ofReal_integral_eq_lintegral_ofReal hint (Filter.Eventually.of_forall fun y => Real.rpow_nonneg (abs_nonneg _) _)] refine lintegral_congr fun y => ?_ rw [← ofReal_norm, Real.norm_eq_abs, ENNReal.ofReal_rpow_of_nonneg (abs_nonneg _) hq.le] have hcontDil : Continuous (brsDilate φ k) := continuous_brsDilate hφ k have hsuppDil : HasCompactSupport (brsDilate φ k) := hasCompactSupport_brsDilate hsupp k rw [hreal _ hcontDil hsuppDil, hreal _ hφ hsupp] -- the real scaling computation have hscale : (∫ y, |brsDilate φ k y| ^ q) = ((2 : ℝ) ^ k) ^ (q - 1) * ∫ y, |φ y| ^ q := by have hpt : ∀ y : ℝ, |brsDilate φ k y| ^ q = ((2 : ℝ) ^ k) ^ q * |φ (2 ^ k * y)| ^ q := by intro y change |2 ^ k * φ (2 ^ k * y)| ^ q = ((2 : ℝ) ^ k) ^ q * |φ (2 ^ k * y)| ^ q rw [abs_mul, abs_of_pos hkpos, Real.mul_rpow (le_of_lt hkpos) (abs_nonneg _)] rw [show (∫ y, |brsDilate φ k y| ^ q) = ∫ y, ((2 : ℝ) ^ k) ^ q * |φ (2 ^ k * y)| ^ q from integral_congr_ae (Filter.Eventually.of_forall hpt)] rw [integral_const_mul, MeasureTheory.Measure.integral_comp_mul_left (fun y => |φ y| ^ q) ((2 : ℝ) ^ k), smul_eq_mul, abs_of_pos (by positivity : (0 : ℝ) < ((2 : ℝ) ^ k)⁻¹)] rw [← mul_assoc] congr 1 rw [Real.rpow_sub hkpos, Real.rpow_one] field_simp rw [hscale, ENNReal.ofReal_mul (by positivity)] /-! ## Cancellation: vanishing moments against a Taylor remainder This is the mechanism behind the kernel estimate (5.11) of BRS. A kernel with vanishing moments of order `< N`, supported at scale `δ`, sees only the `N`-th order Taylor remainder of the function it is tested against. -/ /-- A function vanishing off `[-δ, δ]` has compact support. -/ theorem hasCompactSupport_of_vanishing {ψ : ℝ → ℝ} {δ : ℝ} (hzero : ∀ y : ℝ, δ < |y| → ψ y = 0) : HasCompactSupport ψ := by refine HasCompactSupport.intro (isCompact_Icc (a := -δ) (b := δ)) ?_ intro y hy refine hzero y ?_ by_contra hcon push Not at hcon exact hy (Set.mem_Icc.mpr ⟨by linarith [neg_abs_le y], by linarith [le_abs_self y]⟩) /-- The product of a kernel with a compactly supported factor is continuous as soon as the kernel is continuous on the relevant window. -/ theorem continuous_kernel_mul_of_vanishing {ψ : ℝ → ℝ} (hψ : Continuous ψ) {δ x : ℝ} (hzero : ∀ y : ℝ, δ < |y| → ψ y = 0) {h : ℝ → ℂ} (hcontAt : ∀ u : ℝ, |u - x| ≤ δ → ContinuousAt h u) : Continuous fun y : ℝ => h (x - y) * (ψ y : ℂ) := by rw [continuous_iff_continuousAt] intro y₀ rcases le_or_gt |y₀| δ with hy | hy · have hu : |(x - y₀) - x| ≤ δ := by rw [show x - y₀ - x = -y₀ by ring, abs_neg] exact hy have h1 : ContinuousAt (fun y : ℝ => h (x - y)) y₀ := (hcontAt _ hu).comp (by fun_prop) exact h1.mul (Complex.continuous_ofReal.comp hψ).continuousAt · have hopen : IsOpen {y : ℝ | δ < |y|} := isOpen_lt continuous_const continuous_abs have hev : (fun y : ℝ => h (x - y) * (ψ y : ℂ)) =ᶠ[nhds y₀] fun _ => 0 := by refine Filter.eventuallyEq_of_mem (hopen.mem_nhds hy) fun y hy' => ?_ rw [hzero y hy'] simp exact ContinuousAt.congr continuousAt_const hev.symm /-- **The cancellation estimate.** If `ψ` has vanishing moments below `N` and lives at scale `δ`, then testing it against `h` only sees the Taylor remainder of `h`. -/ theorem brs_cancellation_of_taylor {ψ : ℝ → ℝ} (hψ : Continuous ψ) {δ : ℝ} (hδ : 0 ≤ δ) (hzero : ∀ y : ℝ, δ < |y| → ψ y = 0) {N : ℕ} (hmom : ∀ i : ℕ, i < N → (∫ y : ℝ, y ^ i * ψ y) = 0) {h : ℝ → ℂ} {x M : ℝ} (hcontAt : ∀ u : ℝ, |u - x| ≤ δ → ContinuousAt h u) (hM : 0 ≤ M) (c : ℕ → ℂ) (htaylor : ∀ y : ℝ, |y| ≤ δ → ‖h (x - y) - ∑ i ∈ Finset.range N, c i * (y : ℂ) ^ i‖ ≤ M * |y| ^ N) : ‖∫ y : ℝ, h (x - y) * (ψ y : ℂ)‖ ≤ M * δ ^ N * ∫ y : ℝ, |ψ y| := by have hcs : HasCompactSupport ψ := hasCompactSupport_of_vanishing hzero have hcsC : HasCompactSupport fun y : ℝ => (ψ y : ℂ) := hcs.comp_left (g := fun z : ℝ => (z : ℂ)) (by simp) have hcontC : Continuous fun y : ℝ => (ψ y : ℂ) := Complex.continuous_ofReal.comp hψ have hprod : Continuous fun y : ℝ => h (x - y) * (ψ y : ℂ) := continuous_kernel_mul_of_vanishing hψ hzero hcontAt -- integrability have hint : ∀ F : ℝ → ℂ, Continuous F → Integrable fun y => F y * (ψ y : ℂ) := by intro F hF exact (hF.mul hcontC).integrable_of_hasCompactSupport hcsC.mul_left have hintPoly : Integrable fun y : ℝ => (∑ i ∈ Finset.range N, c i * (y : ℂ) ^ i) * (ψ y : ℂ) := by refine hint _ ?_ refine continuous_finsetSum _ fun i _ => ?_ exact continuous_const.mul ((Complex.continuous_ofReal.comp continuous_id).pow i) -- the polynomial part integrates to zero have hpolyzero : (∫ y : ℝ, (∑ i ∈ Finset.range N, c i * (y : ℂ) ^ i) * (ψ y : ℂ)) = 0 := by have hpt : ∀ y : ℝ, (∑ i ∈ Finset.range N, c i * (y : ℂ) ^ i) * (ψ y : ℂ) = ∑ i ∈ Finset.range N, c i * ((y ^ i * ψ y : ℝ) : ℂ) := by intro y rw [Finset.sum_mul] refine Finset.sum_congr rfl fun i _ => ?_ push_cast ring rw [show (∫ y : ℝ, (∑ i ∈ Finset.range N, c i * (y : ℂ) ^ i) * (ψ y : ℂ)) = ∫ y : ℝ, ∑ i ∈ Finset.range N, c i * ((y ^ i * ψ y : ℝ) : ℂ) from integral_congr_ae (Filter.Eventually.of_forall hpt)] have hintTerm : ∀ i : ℕ, Integrable fun y : ℝ => c i * ((y ^ i * ψ y : ℝ) : ℂ) := by intro i have hcont : Continuous fun y : ℝ => c i * ((y ^ i * ψ y : ℝ) : ℂ) := continuous_const.mul (Complex.continuous_ofReal.comp ((continuous_pow i).mul hψ)) refine hcont.integrable_of_hasCompactSupport ?_ have hreal : HasCompactSupport fun y : ℝ => y ^ i * ψ y := HasCompactSupport.mul_left hcs have hcast : HasCompactSupport fun y : ℝ => ((y ^ i * ψ y : ℝ) : ℂ) := hreal.comp_left (g := fun z : ℝ => (z : ℂ)) (by simp) exact HasCompactSupport.mul_left hcast rw [integral_finsetSum _ fun i _ => hintTerm i] refine Finset.sum_eq_zero fun i hi => ?_ rw [integral_const_mul, integral_complex_ofReal, hmom i (Finset.mem_range.mp hi)] simp -- reduce to the remainder have hsplit : (∫ y : ℝ, h (x - y) * (ψ y : ℂ)) = ∫ y : ℝ, (h (x - y) - ∑ i ∈ Finset.range N, c i * (y : ℂ) ^ i) * (ψ y : ℂ) := by have hpt : ∀ y : ℝ, (h (x - y) - ∑ i ∈ Finset.range N, c i * (y : ℂ) ^ i) * (ψ y : ℂ) = h (x - y) * (ψ y : ℂ) - (∑ i ∈ Finset.range N, c i * (y : ℂ) ^ i) * (ψ y : ℂ) := by intro y ring rw [show (∫ y : ℝ, (h (x - y) - ∑ i ∈ Finset.range N, c i * (y : ℂ) ^ i) * (ψ y : ℂ)) = ∫ y : ℝ, (h (x - y) * (ψ y : ℂ) - (∑ i ∈ Finset.range N, c i * (y : ℂ) ^ i) * (ψ y : ℂ)) from integral_congr_ae (Filter.Eventually.of_forall hpt)] rw [integral_sub (hprod.integrable_of_hasCompactSupport hcsC.mul_left) hintPoly, hpolyzero, sub_zero] rw [hsplit] -- the pointwise remainder bound have hptbound : ∀ y : ℝ, ‖(h (x - y) - ∑ i ∈ Finset.range N, c i * (y : ℂ) ^ i) * (ψ y : ℂ)‖ ≤ M * δ ^ N * |ψ y| := by intro y rcases le_or_gt |y| δ with hy | hy · rw [norm_mul, Complex.norm_real, Real.norm_eq_abs] refine mul_le_mul ?_ le_rfl (abs_nonneg _) (by positivity) refine le_trans (htaylor y hy) ?_ refine mul_le_mul_of_nonneg_left ?_ hM exact pow_le_pow_left₀ (abs_nonneg _) hy N · rw [hzero y hy] simp have hintNorm : Integrable fun y : ℝ => M * δ ^ N * |ψ y| := ((hψ.abs).integrable_of_hasCompactSupport hcs.abs).const_mul _ calc ‖∫ y : ℝ, (h (x - y) - ∑ i ∈ Finset.range N, c i * (y : ℂ) ^ i) * (ψ y : ℂ)‖ ≤ ∫ y : ℝ, ‖(h (x - y) - ∑ i ∈ Finset.range N, c i * (y : ℂ) ^ i) * (ψ y : ℂ)‖ := norm_integral_le_integral_norm _ _ ≤ ∫ y : ℝ, M * δ ^ N * |ψ y| := by refine integral_mono ?_ hintNorm hptbound have hdiff : Continuous fun y : ℝ => (h (x - y) - ∑ i ∈ Finset.range N, c i * (y : ℂ) ^ i) * (ψ y : ℂ) := by have hpt : (fun y : ℝ => (h (x - y) - ∑ i ∈ Finset.range N, c i * (y : ℂ) ^ i) * (ψ y : ℂ)) = fun y : ℝ => h (x - y) * (ψ y : ℂ) - (∑ i ∈ Finset.range N, c i * (y : ℂ) ^ i) * (ψ y : ℂ) := by funext y ring rw [hpt] refine hprod.sub ?_ exact ((continuous_finsetSum _ fun i _ => continuous_const.mul ((Complex.continuous_ofReal.comp continuous_id).pow i)).mul (Complex.continuous_ofReal.comp hψ)) exact (hdiff.integrable_of_hasCompactSupport hcsC.mul_left).norm _ = M * δ ^ N * ∫ y : ℝ, |ψ y| := integral_const_mul _ _ /-! ## First-order cancellation for the singular kernel -/ /-- The first-order instance of the cancellation estimate. -/ theorem brs_cancellation_lipschitz {ψ : ℝ → ℝ} (hψ : Continuous ψ) {δ : ℝ} (hδ : 0 ≤ δ) (hzero : ∀ y : ℝ, δ < |y| → ψ y = 0) (hmom : (∫ y : ℝ, ψ y) = 0) {h : ℝ → ℂ} (hh : Continuous h) {x M : ℝ} (hM : 0 ≤ M) (hlip : ∀ y : ℝ, |y| ≤ δ → ‖h (x - y) - h x‖ ≤ M * |y|) : ‖∫ y : ℝ, h (x - y) * (ψ y : ℂ)‖ ≤ M * δ * ∫ y : ℝ, |ψ y| := by have hmom' : ∀ i : ℕ, i < 1 → (∫ y : ℝ, y ^ i * ψ y) = 0 := by intro i hi interval_cases i simpa using hmom have htaylor : ∀ y : ℝ, |y| ≤ δ → ‖h (x - y) - ∑ i ∈ Finset.range 1, (fun _ : ℕ => h x) i * (y : ℂ) ^ i‖ ≤ M * |y| ^ 1 := by intro y hy simpa using hlip y hy have := brs_cancellation_of_taylor hψ hδ hzero hmom' (fun u _ => hh.continuousAt) hM (fun _ : ℕ => h x) htaylor simpa using this /-- The derivative of the inverse square root. -/ theorem hasDerivAt_rpow_neg_half {u : ℝ} (hu : 0 < u) : HasDerivAt (fun t : ℝ => t ^ (-(1 / 2) : ℝ)) (-(1 / 2) * u ^ (-(1 / 2) - 1 : ℝ)) u := Real.hasDerivAt_rpow_const (p := (-(1 / 2) : ℝ)) (Or.inl (ne_of_gt hu)) /-- **A Lipschitz bound for the inverse square root away from the origin.** -/ theorem norm_sub_rpow_neg_half_le {a u v : ℝ} (ha : 0 < a) (hu : a ≤ u) (hv : a ≤ v) : |u ^ (-(1 / 2) : ℝ) - v ^ (-(1 / 2) : ℝ)| ≤ (1 / 2) * a ^ (-(3 / 2) : ℝ) * |u - v| := by have hconv : Convex ℝ (Ici a) := convex_Ici a have hderiv : ∀ t ∈ Ici a, HasDerivAt (fun s : ℝ => s ^ (-(1 / 2) : ℝ)) (-(1 / 2) * t ^ (-(1 / 2) - 1 : ℝ)) t := by intro t ht exact hasDerivAt_rpow_neg_half (lt_of_lt_of_le ha ht) have hbound : ∀ t ∈ Ici a, ‖-(1 / 2) * t ^ (-(1 / 2) - 1 : ℝ)‖ ≤ (1 / 2) * a ^ (-(3 / 2) : ℝ) := by intro t ht have hta : a ≤ t := ht have htpos : 0 < t := lt_of_lt_of_le ha hta have hexp : (-(1 / 2) - 1 : ℝ) = -(3 / 2) := by norm_num rw [hexp, norm_mul, norm_neg] have h1 : ‖(1 / 2 : ℝ)‖ = 1 / 2 := by rw [Real.norm_eq_abs, abs_of_pos (by norm_num)] have h2 : ‖t ^ (-(3 / 2) : ℝ)‖ = t ^ (-(3 / 2) : ℝ) := by rw [Real.norm_eq_abs, abs_of_pos (Real.rpow_pos_of_pos htpos _)] rw [h1, h2] refine mul_le_mul_of_nonneg_left ?_ (by norm_num) exact Real.rpow_le_rpow_of_nonpos ha hta (by norm_num) have hmvt := hconv.norm_image_sub_le_of_norm_hasDerivWithin_le (f := fun s : ℝ => s ^ (-(1 / 2) : ℝ)) (f' := fun t => -(1 / 2) * t ^ (-(1 / 2) - 1 : ℝ)) (fun t ht => (hderiv t ht).hasDerivWithinAt) hbound hu hv rw [Real.norm_eq_abs, Real.norm_eq_abs] at hmvt rw [abs_sub_comm u v, abs_sub_comm (u ^ (-(1 / 2) : ℝ)) (v ^ (-(1 / 2) : ℝ))] exact hmvt /-! ## Iterated derivatives of a power -/ /-- On the positive half-line the iterated derivatives of `t ^ p` are the expected ones. -/ theorem iteratedDeriv_rpow_eqOn (p : ℝ) (n : ℕ) : Set.EqOn (iteratedDeriv n fun t : ℝ => t ^ p) (fun t : ℝ => (∏ i ∈ Finset.range n, (p - i)) * t ^ (p - n)) (Ioi (0 : ℝ)) := by induction n with | zero => intro x hx simp | succ n ih => intro x hx have hxpos : (0 : ℝ) < x := hx have hev : (iteratedDeriv n fun t : ℝ => t ^ p) =ᶠ[𝓝 x] fun t : ℝ => (∏ i ∈ Finset.range n, (p - i)) * t ^ (p - n) := Filter.eventuallyEq_of_mem (isOpen_Ioi.mem_nhds hx) ih have hd : HasDerivAt (fun t : ℝ => (∏ i ∈ Finset.range n, (p - i)) * t ^ (p - n)) ((∏ i ∈ Finset.range n, (p - i)) * ((p - n) * x ^ (p - n - 1))) x := (Real.hasDerivAt_rpow_const (p := (p - n : ℝ)) (Or.inl (ne_of_gt hxpos))).const_mul _ rw [iteratedDeriv_succ, hev.deriv_eq, hd.deriv] change (∏ i ∈ Finset.range n, (p - i)) * ((p - n) * x ^ (p - n - 1)) = (∏ i ∈ Finset.range (n + 1), (p - i)) * x ^ (p - (n + 1 : ℕ)) rw [Finset.prod_range_succ] have hexp : p - ((n : ℝ) + 1) = p - n - 1 := by ring push_cast rw [hexp] ring /-- The size of the iterated derivatives of the inverse square root. -/ theorem abs_iteratedDeriv_rpow_neg_half_le {u : ℝ} (hu : 0 < u) (N : ℕ) : |iteratedDeriv N (fun t : ℝ => t ^ (-(1 / 2) : ℝ)) u| ≤ (∏ i ∈ Finset.range N, ((1 : ℝ) / 2 + (i : ℝ))) * u ^ (-(1 / 2) - N : ℝ) := by have heq := iteratedDeriv_rpow_eqOn (-(1 / 2) : ℝ) N hu rw [heq] have habs : |(∏ i ∈ Finset.range N, (-(1 / 2) - (i : ℝ)))| = ∏ i ∈ Finset.range N, (1 / 2 + (i : ℝ)) := by rw [Finset.abs_prod] refine Finset.prod_congr rfl fun i _ => ?_ have hi : (0 : ℝ) ≤ (i : ℝ) := Nat.cast_nonneg i rw [abs_of_nonpos (by linarith : (-(1 / 2) - (i : ℝ)) ≤ 0)] ring have hpow : |u ^ (-(1 / 2) - (N : ℝ))| = u ^ (-(1 / 2) - (N : ℝ)) := abs_of_pos (Real.rpow_pos_of_pos hu _) rw [abs_mul, habs, hpow] /-! ## The Taylor remainder of the inverse square root -/ /-- The inverse square root is smooth away from the origin. -/ theorem contDiffOn_rpow_neg_half {a b : ℝ} (ha : 0 < a) (n : ℕ) : ContDiffOn ℝ n (fun t : ℝ => t ^ (-(1 / 2) : ℝ)) (Icc a b) := by intro x hx have hxne : x ≠ 0 := by have : a ≤ x := hx.1 exact ne_of_gt (lt_of_lt_of_le ha this) exact (Real.contDiffAt_rpow_const_of_ne (n := n) (p := (-(1 / 2) : ℝ)) hxne).contDiffWithinAt /-- The iterated derivatives within an interval agree with the global ones. -/ theorem iteratedDerivWithin_rpow_neg_half {a b : ℝ} (ha : 0 < a) (hab : a < b) (n : ℕ) {y : ℝ} (hy : y ∈ Icc a b) : iteratedDerivWithin n (fun t : ℝ => t ^ (-(1 / 2) : ℝ)) (Icc a b) y = iteratedDeriv n (fun t : ℝ => t ^ (-(1 / 2) : ℝ)) y := by have hyne : y ≠ 0 := ne_of_gt (lt_of_lt_of_le ha hy.1) exact iteratedDerivWithin_eq_iteratedDeriv (uniqueDiffOn_Icc hab) (Real.contDiffAt_rpow_const_of_ne (n := n) (p := (-(1 / 2) : ℝ)) hyne) hy /-- **The Taylor remainder bound for the inverse square root.** -/ theorem taylor_bound_rpow_neg_half {a b : ℝ} (ha : 0 < a) (hab : a < b) (N : ℕ) {x : ℝ} (hx : x ∈ Icc a b) : |x ^ (-(1 / 2) : ℝ) - taylorWithinEval (fun t : ℝ => t ^ (-(1 / 2) : ℝ)) N (Icc a b) a x| ≤ ((∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ))) * a ^ (-(1 / 2) - ((N : ℝ) + 1))) * (x - a) ^ (N + 1) / (Nat.factorial N : ℝ) := by set C : ℝ := (∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ))) * a ^ (-(1 / 2) - ((N : ℝ) + 1)) with hC have hbound : ∀ y ∈ Icc a b, ‖iteratedDerivWithin (N + 1) (fun t : ℝ => t ^ (-(1 / 2) : ℝ)) (Icc a b) y‖ ≤ C := by intro y hy have hypos : 0 < y := lt_of_lt_of_le ha hy.1 rw [iteratedDerivWithin_rpow_neg_half ha hab (N + 1) hy, Real.norm_eq_abs] refine le_trans (abs_iteratedDeriv_rpow_neg_half_le hypos (N + 1)) ?_ rw [hC] refine mul_le_mul_of_nonneg_left ?_ ?_ · have hexp : (-(1 / 2) - ((N : ℝ) + 1)) ≤ 0 := by have : (0 : ℝ) ≤ (N : ℝ) := Nat.cast_nonneg N linarith have hcast : ((N : ℝ) + 1) = (((N + 1 : ℕ) : ℝ)) := by push_cast; ring rw [hcast] exact Real.rpow_le_rpow_of_nonpos ha hy.1 (by have : (0 : ℝ) ≤ ((N + 1 : ℕ) : ℝ) := Nat.cast_nonneg _ linarith) · refine Finset.prod_nonneg fun i _ => ?_ have : (0 : ℝ) ≤ (i : ℝ) := Nat.cast_nonneg i linarith have hcd : ContDiffOn ℝ (N + 1) (fun t : ℝ => t ^ (-(1 / 2) : ℝ)) (Icc a b) := contDiffOn_rpow_neg_half ha (N + 1) have h := taylor_mean_remainder_bound (f := fun t : ℝ => t ^ (-(1 / 2) : ℝ)) (a := a) (b := b) (C := C) (x := x) (n := N) (le_of_lt hab) hcd hx hbound rw [Real.norm_eq_abs] at h exact h /-! ## A two-sided Taylor bound around an interior point -/ /-- **Taylor's theorem around an interior point**, in the form needed by the cancellation estimate: the coefficients are the global iterated derivatives at the centre, so they do not depend on the increment. -/ theorem taylor_two_sided_bound {h : ℝ → ℝ} {x δ C : ℝ} (hδ : 0 < δ) (hC0 : 0 ≤ C) {N : ℕ} (hcd : ∀ z ∈ Icc (x - δ) (x + δ), ContDiffAt ℝ (N + 1) h z) (hCb : ∀ u ∈ Icc (x - δ) (x + δ), |iteratedDeriv (N + 1) h u| ≤ C) {y : ℝ} (hy : |y| ≤ δ) : |h (x - y) - ∑ i ∈ Finset.range (N + 1), (iteratedDeriv i h x / (Nat.factorial i : ℝ)) * (-y) ^ i| ≤ C * |y| ^ (N + 1) / (Nat.factorial (N + 1) : ℝ) := by rcases eq_or_ne y 0 with hy0 | hy0 · subst hy0 have hsum : ∑ i ∈ Finset.range (N + 1), (iteratedDeriv i h x / (Nat.factorial i : ℝ)) * (-(0 : ℝ)) ^ i = h x := by rw [Finset.sum_eq_single 0] · simp · intro i _ hi rw [neg_zero, zero_pow hi, mul_zero] · intro hcon exact absurd (Finset.mem_range.mpr (Nat.succ_pos N)) hcon rw [sub_zero, hsum, sub_self, abs_zero] positivity · set z : ℝ := x - y with hz have hzx : x ≠ z := by rw [hz] intro hcon apply hy0 linarith [hcon] have habs : |z - x| ≤ δ := by rw [hz, show x - y - x = -y by ring, abs_neg] exact hy have hzmem : z ∈ Icc (x - δ) (x + δ) := by have := abs_le.mp habs exact ⟨by linarith [this.1], by linarith [this.2]⟩ have hxmem0 : x ∈ Icc (x - δ) (x + δ) := ⟨by linarith, by linarith⟩ have hsub : uIcc x z ⊆ Icc (x - δ) (x + δ) := uIcc_subset_Icc hxmem0 hzmem have hcdOn : ContDiffOn ℝ (N + 1) h (uIcc x z) := by intro w hw exact (hcd w (hsub hw)).contDiffWithinAt obtain ⟨x', hx', hxeq⟩ := taylor_mean_remainder_lagrange_iteratedDeriv hzx hcdOn -- identify the Taylor polynomial have huniq : UniqueDiffOn ℝ (uIcc x z) := by refine uniqueDiffOn_Icc ?_ rcases lt_or_gt_of_ne hzx with hlt | hlt · rw [min_eq_left (le_of_lt hlt), max_eq_right (le_of_lt hlt)] exact hlt · rw [min_eq_right (le_of_lt hlt), max_eq_left (le_of_lt hlt)] exact hlt have hxmem : x ∈ uIcc x z := left_mem_uIcc have hpoly : taylorWithinEval h N (uIcc x z) x z = ∑ i ∈ Finset.range (N + 1), (iteratedDeriv i h x / (Nat.factorial i : ℝ)) * (-y) ^ i := by rw [taylor_within_apply] refine Finset.sum_congr rfl fun i hi => ?_ have hiw : iteratedDerivWithin i h (uIcc x z) x = iteratedDeriv i h x := by refine iteratedDerivWithin_eq_iteratedDeriv huniq ?_ hxmem have hxmem' : x ∈ Icc (x - δ) (x + δ) := hxmem0 have hiN : i ≤ N + 1 := Nat.le_succ_of_le (Nat.lt_succ_iff.mp (Finset.mem_range.mp hi)) exact (hcd x hxmem').of_le (by exact_mod_cast hiN) rw [hiw, smul_eq_mul, hz] have : x - y - x = -y := by ring rw [this] ring rw [hpoly] at hxeq have hx'mem : x' ∈ Icc (x - δ) (x + δ) := hsub (Set.mem_of_mem_of_subset hx' uIoo_subset_uIcc_self) have hzxy : z - x = -y := by rw [hz] ring have hfac : |((Nat.factorial (N + 1) : ℝ))| = (Nat.factorial (N + 1) : ℝ) := abs_of_pos (by positivity) rw [hxeq, hzxy, abs_div, abs_mul, abs_pow, abs_neg, hfac] have hb := hCb x' hx'mem gcongr /-! ## (5.11): the kernel estimate for the inverse square root -/ /-- **The cancellation estimate for the singular kernel.** A bump at scale `δ` with vanishing moments below `N + 1`, tested against `u ↦ u^{-1/2}` at distance at least `x - δ` from the singularity, gains a factor `δ^{N+1}`. -/ theorem brs_kernel_cancellation {ψ : ℝ → ℝ} (hψ : Continuous ψ) {δ x : ℝ} (hδ : 0 < δ) (hxδ : δ < x) (hzero : ∀ y : ℝ, δ < |y| → ψ y = 0) {N : ℕ} (hmom : ∀ i : ℕ, i < N + 1 → (∫ y : ℝ, y ^ i * ψ y) = 0) : ‖∫ y : ℝ, (((x - y) ^ (-(1 / 2) : ℝ) : ℝ) : ℂ) * (ψ y : ℂ)‖ ≤ ((∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ))) * (x - δ) ^ (-(1 / 2) - ((N : ℝ) + 1)) / (Nat.factorial (N + 1) : ℝ)) * δ ^ (N + 1) * ∫ y : ℝ, |ψ y| := by set h₀ : ℝ → ℝ := fun t : ℝ => t ^ (-(1 / 2) : ℝ) with hh₀ set C : ℝ := (∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ))) * (x - δ) ^ (-(1 / 2) - ((N : ℝ) + 1)) with hC have hxδpos : 0 < x - δ := by linarith have hCnn : 0 ≤ C := by rw [hC] have h1 : (0 : ℝ) ≤ ∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ)) := by refine Finset.prod_nonneg fun i _ => ?_ have : (0 : ℝ) ≤ (i : ℝ) := Nat.cast_nonneg i linarith have h2 : (0 : ℝ) ≤ (x - δ) ^ (-(1 / 2) - ((N : ℝ) + 1)) := Real.rpow_nonneg hxδpos.le _ positivity -- the window avoids the singularity have hwin : ∀ u : ℝ, u ∈ Icc (x - δ) (x + δ) → 0 < u := fun u hu => lt_of_lt_of_le hxδpos hu.1 have hcd : ∀ z ∈ Icc (x - δ) (x + δ), ContDiffAt ℝ (N + 1) h₀ z := by intro z hz exact Real.contDiffAt_rpow_const_of_ne (n := (N + 1 : ℕ)) (p := (-(1 / 2) : ℝ)) (ne_of_gt (hwin z hz)) have hCb : ∀ u ∈ Icc (x - δ) (x + δ), |iteratedDeriv (N + 1) h₀ u| ≤ C := by intro u hu refine le_trans (abs_iteratedDeriv_rpow_neg_half_le (hwin u hu) (N + 1)) ?_ rw [hC] refine mul_le_mul_of_nonneg_left ?_ ?_ · have hcast : (((N + 1 : ℕ) : ℝ)) = ((N : ℝ) + 1) := by push_cast; ring rw [hcast] refine Real.rpow_le_rpow_of_nonpos hxδpos hu.1 ?_ have : (0 : ℝ) ≤ (N : ℝ) := Nat.cast_nonneg N linarith · refine Finset.prod_nonneg fun i _ => ?_ have : (0 : ℝ) ≤ (i : ℝ) := Nat.cast_nonneg i linarith -- the Taylor bound, transported to the complex-valued kernel set c : ℕ → ℂ := fun i => (((-1 : ℝ) ^ i * (iteratedDeriv i h₀ x / (Nat.factorial i : ℝ)) : ℝ) : ℂ) with hc have htaylor : ∀ y : ℝ, |y| ≤ δ → ‖(((x - y) ^ (-(1 / 2) : ℝ) : ℝ) : ℂ) - ∑ i ∈ Finset.range (N + 1), c i * (y : ℂ) ^ i‖ ≤ (C / (Nat.factorial (N + 1) : ℝ)) * |y| ^ (N + 1) := by intro y hy have hreal := taylor_two_sided_bound (h := h₀) (x := x) (δ := δ) (C := C) hδ hCnn hcd hCb hy have hcast : (∑ i ∈ Finset.range (N + 1), c i * (y : ℂ) ^ i) = ((∑ i ∈ Finset.range (N + 1), (iteratedDeriv i h₀ x / (Nat.factorial i : ℝ)) * (-y) ^ i : ℝ) : ℂ) := by push_cast refine Finset.sum_congr rfl fun i _ => ?_ rw [hc] push_cast rw [neg_pow] ring rw [hcast, ← Complex.ofReal_sub, Complex.norm_real, Real.norm_eq_abs] calc |h₀ (x - y) - ∑ i ∈ Finset.range (N + 1), (iteratedDeriv i h₀ x / (Nat.factorial i : ℝ)) * (-y) ^ i| ≤ C * |y| ^ (N + 1) / (Nat.factorial (N + 1) : ℝ) := hreal _ = (C / (Nat.factorial (N + 1) : ℝ)) * |y| ^ (N + 1) := by ring -- continuity of the kernel on the window have hcontAt : ∀ u : ℝ, |u - x| ≤ δ → ContinuousAt (fun t : ℝ => ((t ^ (-(1 / 2) : ℝ) : ℝ) : ℂ)) u := by intro u hu have hupos : 0 < u := by have := abs_le.mp hu linarith [this.1] exact Complex.continuous_ofReal.continuousAt.comp (Real.continuousAt_rpow_const u (-(1 / 2) : ℝ) (Or.inl (ne_of_gt hupos))) have hMnn : 0 ≤ C / (Nat.factorial (N + 1) : ℝ) := by positivity have hmain := brs_cancellation_of_taylor hψ hδ.le hzero hmom hcontAt hMnn c htaylor calc ‖∫ y : ℝ, (((x - y) ^ (-(1 / 2) : ℝ) : ℝ) : ℂ) * (ψ y : ℂ)‖ ≤ (C / (Nat.factorial (N + 1) : ℝ)) * δ ^ (N + 1) * ∫ y : ℝ, |ψ y| := hmain _ = ((∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ))) * (x - δ) ^ (-(1 / 2) - ((N : ℝ) + 1)) / (Nat.factorial (N + 1) : ℝ)) * δ ^ (N + 1) * ∫ y : ℝ, |ψ y| := by rw [hC] /-! ## (5.12): Young's inequality for an `L¹` kernel -/ /-- Tonelli for a convolution-type double integral. -/ theorem lintegral_convolution_swap {p : ℝ} {K : ℝ → ℝ} (hK : Measurable K) {g : ℝ → ℂ} (hg : Measurable g) : (∫⁻ x : ℝ, ∫⁻ y : ℝ, ‖K y‖ₑ * ‖g (x - y)‖ₑ ^ p) = (∫⁻ y : ℝ, ‖K y‖ₑ) * ∫⁻ z : ℝ, ‖g z‖ₑ ^ p := by have hjoint : Measurable fun z : ℝ × ℝ => ‖K z.2‖ₑ * ‖g (z.1 - z.2)‖ₑ ^ p := by have h1 : Measurable fun z : ℝ × ℝ => ‖K z.2‖ₑ := (hK.comp measurable_snd).enorm have h2 : Measurable fun z : ℝ × ℝ => ‖g (z.1 - z.2)‖ₑ ^ p := ((hg.comp (measurable_fst.sub measurable_snd)).enorm).pow_const p exact h1.mul h2 rw [lintegral_lintegral_swap hjoint.aemeasurable] have hinner : ∀ y : ℝ, (∫⁻ x : ℝ, ‖K y‖ₑ * ‖g (x - y)‖ₑ ^ p) = ‖K y‖ₑ * ∫⁻ z : ℝ, ‖g z‖ₑ ^ p := by intro y rw [lintegral_const_mul' _ _ (enorm_ne_top (x := K y))] congr 1 exact lintegral_sub_right_eq_self (fun z => ‖g z‖ₑ ^ p) y rw [lintegral_congr hinner] exact lintegral_mul_const _ hK.enorm /-- **Young's inequality** for an `L¹` kernel. -/ theorem lintegral_convolution_rpow_le {p : ℝ} (hp : 1 ≤ p) {K : ℝ → ℝ} (hK : Measurable K) (hA : (∫⁻ y : ℝ, ‖K y‖ₑ) ≠ ⊤) {g : ℝ → ℂ} (hg : Measurable g) : (∫⁻ x : ℝ, ‖∫ y : ℝ, (K y : ℂ) * g (x - y)‖ₑ ^ p) ≤ (∫⁻ y : ℝ, ‖K y‖ₑ) ^ p * ∫⁻ z : ℝ, ‖g z‖ₑ ^ p := by have hp0 : (0 : ℝ) < p := lt_of_lt_of_le zero_lt_one hp set A : ENNReal := ∫⁻ y : ℝ, ‖K y‖ₑ with hAdef set G : ENNReal := ∫⁻ z : ℝ, ‖g z‖ₑ ^ p with hGdef -- the pointwise estimate have hpt : ∀ x : ℝ, ‖∫ y : ℝ, (K y : ℂ) * g (x - y)‖ₑ ^ p ≤ A ^ (p - 1) * ∫⁻ y : ℝ, ‖K y‖ₑ * ‖g (x - y)‖ₑ ^ p := by intro x have hbase : ‖∫ y : ℝ, (K y : ℂ) * g (x - y)‖ₑ ≤ ∫⁻ y : ℝ, ‖K y‖ₑ * ‖g (x - y)‖ₑ := by refine le_trans (enorm_integral_le_lintegral_enorm _) (le_of_eq ?_) refine lintegral_congr fun y => ?_ rw [enorm_mul, ← ofReal_norm, Complex.norm_real, ofReal_norm] rcases eq_or_lt_of_le hp with hp1 | hp1 · rw [← hp1] simpa using hbase · -- Hölder with the conjugate exponent set q : ℝ := Real.conjExponent p with hq have hconj : q.HolderConjugate p := (Real.HolderConjugate.conjExponent hp1).symm have hq0 : (0 : ℝ) < q := hconj.pos have hqinv : 1 / q + 1 / p = 1 := by have h1 := hconj.one_div_add_one_div simpa using h1 have hsplit : ∀ y : ℝ, ‖K y‖ₑ * ‖g (x - y)‖ₑ = (‖K y‖ₑ ^ (1 / q)) * ((‖K y‖ₑ ^ (1 / p)) * ‖g (x - y)‖ₑ) := by intro y rw [← mul_assoc, ← ENNReal.rpow_add_of_nonneg _ _ (by positivity) (by positivity), hqinv, ENNReal.rpow_one] have hmeas1 : AEMeasurable (fun y : ℝ => ‖K y‖ₑ ^ (1 / q)) volume := (hK.enorm.pow_const _).aemeasurable have hmeas2 : AEMeasurable (fun y : ℝ => (‖K y‖ₑ ^ (1 / p)) * ‖g (x - y)‖ₑ) volume := ((hK.enorm.pow_const _).mul ((hg.comp (measurable_const.sub measurable_id)).enorm)).aemeasurable have hholder := ENNReal.lintegral_mul_le_Lp_mul_Lq (volume : Measure ℝ) hconj hmeas1 hmeas2 simp only [Pi.mul_apply] at hholder have hfirst : (∫⁻ y : ℝ, (‖K y‖ₑ ^ (1 / q)) ^ q) = A := by refine lintegral_congr fun y => ?_ rw [← ENNReal.rpow_mul, one_div, inv_mul_cancel₀ hq0.ne', ENNReal.rpow_one] have hsecond : (∫⁻ y : ℝ, ((‖K y‖ₑ ^ (1 / p)) * ‖g (x - y)‖ₑ) ^ p) = ∫⁻ y : ℝ, ‖K y‖ₑ * ‖g (x - y)‖ₑ ^ p := by refine lintegral_congr fun y => ?_ rw [ENNReal.mul_rpow_of_nonneg _ _ hp0.le, ← ENNReal.rpow_mul, one_div, inv_mul_cancel₀ hp0.ne', ENNReal.rpow_one] rw [hfirst, hsecond] at hholder have hbase' : ‖∫ y : ℝ, (K y : ℂ) * g (x - y)‖ₑ ≤ A ^ (1 / q) * (∫⁻ y : ℝ, ‖K y‖ₑ * ‖g (x - y)‖ₑ ^ p) ^ (1 / p) := by refine le_trans hbase ?_ rw [lintegral_congr hsplit] exact hholder calc ‖∫ y : ℝ, (K y : ℂ) * g (x - y)‖ₑ ^ p ≤ (A ^ (1 / q) * (∫⁻ y : ℝ, ‖K y‖ₑ * ‖g (x - y)‖ₑ ^ p) ^ (1 / p)) ^ p := ENNReal.rpow_le_rpow hbase' hp0.le _ = A ^ (p / q) * ∫⁻ y : ℝ, ‖K y‖ₑ * ‖g (x - y)‖ₑ ^ p := by rw [ENNReal.mul_rpow_of_nonneg _ _ hp0.le, ← ENNReal.rpow_mul, ← ENNReal.rpow_mul] rw [show (1 : ℝ) / p * p = 1 by field_simp, ENNReal.rpow_one] congr 2 rw [one_div] ring _ = A ^ (p - 1) * ∫⁻ y : ℝ, ‖K y‖ₑ * ‖g (x - y)‖ₑ ^ p := by congr 2 have h1 : 1 / q = 1 - 1 / p := by linarith [hqinv] have h2 : p / q = p * (1 / q) := by ring rw [h2, h1] field_simp -- integrate and swap calc (∫⁻ x : ℝ, ‖∫ y : ℝ, (K y : ℂ) * g (x - y)‖ₑ ^ p) ≤ ∫⁻ x : ℝ, A ^ (p - 1) * ∫⁻ y : ℝ, ‖K y‖ₑ * ‖g (x - y)‖ₑ ^ p := lintegral_mono hpt _ = A ^ (p - 1) * ∫⁻ x : ℝ, ∫⁻ y : ℝ, ‖K y‖ₑ * ‖g (x - y)‖ₑ ^ p := lintegral_const_mul' _ _ (ENNReal.rpow_ne_top_of_nonneg (by linarith) hA) _ = A ^ (p - 1) * (A * G) := by rw [lintegral_convolution_swap hK hg] _ = A ^ (p - 1) * A * G := by ring _ ≤ A ^ p * G := by refine mul_le_mul' ?_ le_rfl exact ennreal_rpow_sub_one_mul_le hp /-! ## (5.13): the maximal estimate on an interval A differentiable function on an interval is controlled by its average plus the total variation of its derivative. This is the elementary Sobolev bound that converts the fixed-scale estimates into maximal ones. -/ /-- The derivative integral over a subinterval is dominated by the total. -/ theorem abs_integral_deriv_le {F' : ℝ → ℝ} {a b s t : ℝ} (hint : IntervalIntegrable F' volume a b) (hs : s ∈ Icc a b) (ht : t ∈ Icc a b) : |∫ y in s..t, F' y| ≤ ∫ y in a..b, |F' y| := by have habs : IntervalIntegrable (fun y => |F' y|) volume a b := hint.abs have hsub : ∀ {u v : ℝ}, u ∈ Icc a b → v ∈ Icc a b → u ≤ v → (∫ y in u..v, |F' y|) ≤ ∫ y in a..b, |F' y| := by intro u v hu hv huv exact intervalIntegral.integral_mono_interval hu.1 huv hv.2 (Filter.Eventually.of_forall fun y => abs_nonneg _) habs rcases le_total s t with hst | hst · calc |∫ y in s..t, F' y| ≤ ∫ y in s..t, |F' y| := intervalIntegral.abs_integral_le_integral_abs hst _ ≤ ∫ y in a..b, |F' y| := hsub hs ht hst · have hswap : (∫ y in s..t, F' y) = -(∫ y in t..s, F' y) := intervalIntegral.integral_symm _ _ rw [hswap, abs_neg] calc |∫ y in t..s, F' y| ≤ ∫ y in t..s, |F' y| := intervalIntegral.abs_integral_le_integral_abs hst _ ≤ ∫ y in a..b, |F' y| := hsub ht hs hst /-- **The maximal estimate on an interval.** -/ theorem abs_le_average_add_integral_deriv {F F' : ℝ → ℝ} {a b : ℝ} (hab : a < b) (hderiv : ∀ x ∈ uIcc a b, HasDerivAt F (F' x) x) (hint : IntervalIntegrable F' volume a b) (hFint : IntervalIntegrable F volume a b) {t : ℝ} (ht : t ∈ Icc a b) : |F t| ≤ (1 / (b - a)) * (∫ s in a..b, |F s|) + ∫ s in a..b, |F' s| := by have hlen : 0 < b - a := by linarith set D : ℝ := ∫ y in a..b, |F' y| with hD have hDnn : 0 ≤ D := by rw [hD] exact intervalIntegral.integral_nonneg (le_of_lt hab) (fun y _ => abs_nonneg _) -- pointwise comparison with any other point have hcomp : ∀ s ∈ Icc a b, |F t| ≤ |F s| + D := by intro s hs have huIcc : ∀ x ∈ uIcc s t, HasDerivAt F (F' x) x := by intro x hx refine hderiv x ?_ have hsub : uIcc s t ⊆ uIcc a b := by rw [uIcc_of_le (le_of_lt hab)] exact uIcc_subset_Icc hs ht exact hsub hx have hintst : IntervalIntegrable F' volume s t := by refine hint.mono_set ?_ rw [uIcc_of_le (le_of_lt hab)] exact uIcc_subset_Icc hs ht have hftc : (∫ y in s..t, F' y) = F t - F s := intervalIntegral.integral_eq_sub_of_hasDerivAt huIcc hintst have hbound := abs_integral_deriv_le hint hs ht rw [hftc] at hbound have htri : |F t| - |F s| ≤ |F t - F s| := abs_sub_abs_le_abs_sub (F t) (F s) linarith [hbound, htri] -- average over the interval have haverage : (b - a) * |F t| ≤ (∫ s in a..b, |F s|) + (b - a) * D := by have h1 : (∫ s in a..b, |F t|) ≤ ∫ s in a..b, (|F s| + D) := by refine intervalIntegral.integral_mono_on (le_of_lt hab) (intervalIntegrable_const) (hFint.abs.add intervalIntegrable_const) ?_ intro s hs exact hcomp s hs rw [intervalIntegral.integral_const, smul_eq_mul, intervalIntegral.integral_add hFint.abs intervalIntegrable_const, intervalIntegral.integral_const, smul_eq_mul] at h1 linarith [h1] have h2 : |F t| ≤ ((∫ s in a..b, |F s|) + (b - a) * D) / (b - a) := by rw [le_div_iff₀ hlen] linarith [haverage] calc |F t| ≤ ((∫ s in a..b, |F s|) + (b - a) * D) / (b - a) := h2 _ = (1 / (b - a)) * (∫ s in a..b, |F s|) + D := by field_simp /-! ## Localizing a supremum over a covered set Combining the maximal estimate on an interval with a covering of `E` bounds a supremum over `E` by a sum over the covering intervals. This is the localization step of BRS (5.9). -/ /-- **The localized maximal bound.** -/ theorem iSup_enorm_le_of_cover {E : Set ℝ} {δ : ℝ} (hδ : 0 < δ) {ι : Finset ℝ} (hcov : IsIntervalCover E δ ι) {F F' : ℝ → ℝ} (hderiv : ∀ x : ℝ, HasDerivAt F (F' x) x) (hint : ∀ a : ℝ, IntervalIntegrable F' volume (a - δ / 2) (a + δ / 2)) (hFint : ∀ a : ℝ, IntervalIntegrable F volume (a - δ / 2) (a + δ / 2)) : (⨆ t ∈ E, ENNReal.ofReal |F t|) ≤ ∑ a ∈ ι, ENNReal.ofReal ((1 / δ) * (∫ s in (a - δ / 2)..(a + δ / 2), |F s|) + ∫ s in (a - δ / 2)..(a + δ / 2), |F' s|) := by refine iSup₂_le fun t ht => ?_ obtain ⟨a, ha, hmem⟩ := Set.mem_iUnion₂.mp (hcov ht) have hlt : a - δ / 2 < a + δ / 2 := by linarith have hlen : (a + δ / 2) - (a - δ / 2) = δ := by ring have hmax := abs_le_average_add_integral_deriv hlt (fun x _ => hderiv x) (hint a) (hFint a) hmem rw [hlen] at hmax have hterm : ENNReal.ofReal |F t| ≤ ENNReal.ofReal ((1 / δ) * (∫ s in (a - δ / 2)..(a + δ / 2), |F s|) + ∫ s in (a - δ / 2)..(a + δ / 2), |F' s|) := ENNReal.ofReal_le_ofReal hmax refine le_trans hterm ?_ exact Finset.single_le_sum (f := fun a : ℝ => ENNReal.ofReal ((1 / δ) * (∫ s in (a - δ / 2)..(a + δ / 2), |F s|) + ∫ s in (a - δ / 2)..(a + δ / 2), |F' s|)) (fun _ _ => zero_le) ha /-! ## Differentiating the smoothed operator The `t`-derivative of a convolution falls on the kernel, which is what lets the maximal estimate be applied to the smoothed operators of (5.9). -/ /-- The convolution against a real kernel, in the form used here, is Mathlib's convolution for the scalar multiplication pairing. -/ theorem convolution_eq_integral {K : ℝ → ℝ} {g : ℝ → ℂ} (x : ℝ) : (K ⋆[(ContinuousLinearMap.lsmul ℝ ℝ : ℝ →L[ℝ] ℂ →L[ℝ] ℂ), volume] g) x = ∫ y : ℝ, (K y : ℂ) * g (x - y) := by refine integral_congr_ae (Filter.Eventually.of_forall fun y => ?_) simp [ContinuousLinearMap.lsmul_apply, Complex.real_smul] /-- **The derivative of the smoothed operator.** -/ theorem hasDerivAt_kernel_convolution {K : ℝ → ℝ} (hcs : HasCompactSupport K) (hK : ContDiff ℝ 1 K) {g : ℝ → ℂ} (hg : Continuous g) (x : ℝ) : HasDerivAt (fun s : ℝ => ∫ y : ℝ, (K y : ℂ) * g (s - y)) (∫ y : ℝ, ((deriv K y : ℝ) : ℂ) * g (x - y)) x := by have hloc : LocallyIntegrable g volume := hg.locallyIntegrable have hmain := HasCompactSupport.hasDerivAt_convolution_left (L := (ContinuousLinearMap.lsmul ℝ ℝ : ℝ →L[ℝ] ℂ →L[ℝ] ℂ)) (μ := (volume : Measure ℝ)) hcs hK hloc x have hfun : (K ⋆[(ContinuousLinearMap.lsmul ℝ ℝ : ℝ →L[ℝ] ℂ →L[ℝ] ℂ), volume] g) = fun s : ℝ => ∫ y : ℝ, (K y : ℂ) * g (s - y) := by funext s exact convolution_eq_integral s have hval : (deriv K ⋆[(ContinuousLinearMap.lsmul ℝ ℝ : ℝ →L[ℝ] ℂ →L[ℝ] ℂ), volume] g) x = ∫ y : ℝ, ((deriv K y : ℝ) : ℂ) * g (x - y) := convolution_eq_integral x rw [hfun, hval] at hmain exact hmain /-! ## The maximal estimate for complex-valued functions -/ /-- The derivative integral over a subinterval is dominated by the total. -/ theorem norm_integral_deriv_le {F' : ℝ → ℂ} {a b s t : ℝ} (hint : IntervalIntegrable F' volume a b) (hs : s ∈ Icc a b) (ht : t ∈ Icc a b) : ‖∫ y in s..t, F' y‖ ≤ ∫ y in a..b, ‖F' y‖ := by have hnorm : IntervalIntegrable (fun y => ‖F' y‖) volume a b := hint.norm have hsub : ∀ {u v : ℝ}, u ∈ Icc a b → v ∈ Icc a b → u ≤ v → (∫ y in u..v, ‖F' y‖) ≤ ∫ y in a..b, ‖F' y‖ := by intro u v hu hv huv exact intervalIntegral.integral_mono_interval hu.1 huv hv.2 (Filter.Eventually.of_forall fun y => norm_nonneg _) hnorm rcases le_total s t with hst | hst · calc ‖∫ y in s..t, F' y‖ ≤ ∫ y in s..t, ‖F' y‖ := intervalIntegral.norm_integral_le_integral_norm hst _ ≤ ∫ y in a..b, ‖F' y‖ := hsub hs ht hst · have hswap : (∫ y in s..t, F' y) = -(∫ y in t..s, F' y) := intervalIntegral.integral_symm _ _ rw [hswap, norm_neg] calc ‖∫ y in t..s, F' y‖ ≤ ∫ y in t..s, ‖F' y‖ := intervalIntegral.norm_integral_le_integral_norm hst _ ≤ ∫ y in a..b, ‖F' y‖ := hsub ht hs hst /-- **The maximal estimate on an interval**, for complex-valued functions. -/ theorem norm_le_average_add_integral_deriv {F F' : ℝ → ℂ} {a b : ℝ} (hab : a < b) (hderiv : ∀ x ∈ uIcc a b, HasDerivAt F (F' x) x) (hint : IntervalIntegrable F' volume a b) (hFint : IntervalIntegrable F volume a b) {t : ℝ} (ht : t ∈ Icc a b) : ‖F t‖ ≤ (1 / (b - a)) * (∫ s in a..b, ‖F s‖) + ∫ s in a..b, ‖F' s‖ := by have hlen : 0 < b - a := by linarith set D : ℝ := ∫ y in a..b, ‖F' y‖ with hD have hDnn : 0 ≤ D := by rw [hD] exact intervalIntegral.integral_nonneg (le_of_lt hab) (fun y _ => norm_nonneg _) have hcomp : ∀ s ∈ Icc a b, ‖F t‖ ≤ ‖F s‖ + D := by intro s hs have huIcc : ∀ x ∈ uIcc s t, HasDerivAt F (F' x) x := by intro x hx refine hderiv x ?_ have hsub : uIcc s t ⊆ uIcc a b := by rw [uIcc_of_le (le_of_lt hab)] exact uIcc_subset_Icc hs ht exact hsub hx have hintst : IntervalIntegrable F' volume s t := by refine hint.mono_set ?_ rw [uIcc_of_le (le_of_lt hab)] exact uIcc_subset_Icc hs ht have hftc : (∫ y in s..t, F' y) = F t - F s := intervalIntegral.integral_eq_sub_of_hasDerivAt huIcc hintst have hbound := norm_integral_deriv_le hint hs ht rw [hftc] at hbound have htri : ‖F t‖ - ‖F s‖ ≤ ‖F t - F s‖ := norm_sub_norm_le (F t) (F s) linarith [hbound, htri] have haverage : (b - a) * ‖F t‖ ≤ (∫ s in a..b, ‖F s‖) + (b - a) * D := by have h1 : (∫ _s in a..b, ‖F t‖) ≤ ∫ s in a..b, (‖F s‖ + D) := by refine intervalIntegral.integral_mono_on (le_of_lt hab) (intervalIntegrable_const) (hFint.norm.add intervalIntegrable_const) ?_ intro s hs exact hcomp s hs rw [intervalIntegral.integral_const, smul_eq_mul, intervalIntegral.integral_add hFint.norm intervalIntegrable_const, intervalIntegral.integral_const, smul_eq_mul] at h1 linarith [h1] have h2 : ‖F t‖ ≤ ((∫ s in a..b, ‖F s‖) + (b - a) * D) / (b - a) := by rw [le_div_iff₀ hlen] linarith [haverage] calc ‖F t‖ ≤ ((∫ s in a..b, ‖F s‖) + (b - a) * D) / (b - a) := h2 _ = (1 / (b - a)) * (∫ s in a..b, ‖F s‖) + D := by field_simp /-- **The localized maximal bound**, for complex-valued functions. -/ theorem iSup_enorm_le_of_cover_complex {E : Set ℝ} {δ : ℝ} (hδ : 0 < δ) {ι : Finset ℝ} (hcov : IsIntervalCover E δ ι) {F F' : ℝ → ℂ} (hderiv : ∀ x : ℝ, HasDerivAt F (F' x) x) (hint : ∀ a : ℝ, IntervalIntegrable F' volume (a - δ / 2) (a + δ / 2)) (hFint : ∀ a : ℝ, IntervalIntegrable F volume (a - δ / 2) (a + δ / 2)) : (⨆ t ∈ E, ‖F t‖ₑ) ≤ ∑ a ∈ ι, ENNReal.ofReal ((1 / δ) * (∫ s in (a - δ / 2)..(a + δ / 2), ‖F s‖) + ∫ s in (a - δ / 2)..(a + δ / 2), ‖F' s‖) := by refine iSup₂_le fun t ht => ?_ obtain ⟨a, ha, hmem⟩ := Set.mem_iUnion₂.mp (hcov ht) have hlt : a - δ / 2 < a + δ / 2 := by linarith have hlen : (a + δ / 2) - (a - δ / 2) = δ := by ring have hmax := norm_le_average_add_integral_deriv hlt (fun x _ => hderiv x) (hint a) (hFint a) hmem rw [hlen] at hmax have hterm : ‖F t‖ₑ ≤ ENNReal.ofReal ((1 / δ) * (∫ s in (a - δ / 2)..(a + δ / 2), ‖F s‖) + ∫ s in (a - δ / 2)..(a + δ / 2), ‖F' s‖) := by rw [← ofReal_norm] exact ENNReal.ofReal_le_ofReal hmax refine le_trans hterm ?_ exact Finset.single_le_sum (f := fun a : ℝ => ENNReal.ofReal ((1 / δ) * (∫ s in (a - δ / 2)..(a + δ / 2), ‖F s‖) + ∫ s in (a - δ / 2)..(a + δ / 2), ‖F' s‖)) (fun _ _ => zero_le) ha /-! ## The two elementary level integrals The Marcinkiewicz computation integrates the level variable against a power, once over a finite window and once over a tail. -/ /-- The level integral over a finite window. -/ theorem lintegral_Ioo_rpow {e a : ℝ} (he : -1 < e) (ha : 0 < a) : (∫⁻ s in Ioo (0 : ℝ) a, ENNReal.ofReal (s ^ e)) = ENNReal.ofReal (a ^ (e + 1) / (e + 1)) := by have he1 : (0 : ℝ) < e + 1 := by linarith have hint : IntervalIntegrable (fun s : ℝ => s ^ e) volume 0 a := intervalIntegral.intervalIntegrable_rpow' he rw [lintegral_Ioo_eq_ofReal_intervalIntegral ha.le hint (fun s hs => Real.rpow_nonneg (le_of_lt hs.1) _)] congr 1 rw [integral_rpow (Or.inl he), Real.zero_rpow he1.ne'] simp /-- The level integral over a tail. -/ theorem lintegral_Ioi_rpow {e a : ℝ} (he : e < -1) (ha : 0 < a) : (∫⁻ s in Ioi a, ENNReal.ofReal (s ^ e)) = ENNReal.ofReal (-a ^ (e + 1) / (e + 1)) := by have hint : IntegrableOn (fun s : ℝ => s ^ e) (Ioi a) volume := integrableOn_Ioi_rpow_of_lt he ha have hnn : 0 ≤ᵐ[volume.restrict (Ioi a)] fun s : ℝ => s ^ e := by filter_upwards [self_mem_ae_restrict measurableSet_Ioi] with s hs exact Real.rpow_nonneg (le_of_lt (lt_trans ha hs)) _ rw [← ofReal_integral_eq_lintegral_ofReal hint hnn, integral_Ioi_rpow_of_lt he ha] /-! ## Minkowski's integral inequality Mathlib has the two-term version (`ENNReal.lintegral_Lp_add_le`) but not the continuous one, which is what off-diagonal interpolation needs. -/ /-- **Minkowski's integral inequality** in `ℝ≥0∞`. -/ theorem lintegral_rpow_lintegral_le {α β : Type*} [MeasurableSpace α] [MeasurableSpace β] {μ : Measure α} {ν : Measure β} [SFinite μ] [SFinite ν] {r : ℝ} (hr : 1 ≤ r) {F : α → β → ENNReal} (hF : Measurable (Function.uncurry F)) (hfin : (∫⁻ x, (∫⁻ y, F x y ∂ν) ^ r ∂μ) ≠ ⊤) : (∫⁻ x, (∫⁻ y, F x y ∂ν) ^ r ∂μ) ^ (1 / r) ≤ ∫⁻ y, (∫⁻ x, F x y ^ r ∂μ) ^ (1 / r) ∂ν := by have hr0 : (0 : ℝ) < r := lt_of_lt_of_le zero_lt_one hr rcases eq_or_lt_of_le hr with hr1 | hr1 · -- `r = 1` is Tonelli have hrr : r = 1 := hr1.symm subst hrr simp only [ENNReal.rpow_one, div_one] exact le_of_eq (lintegral_lintegral_swap hF.aemeasurable) set G : α → ENNReal := fun x => ∫⁻ y, F x y ∂ν with hGdef have hGmeas : Measurable G := hF.lintegral_prod_right' set I : ENNReal := ∫⁻ x, G x ^ r ∂μ with hIdef set J : ENNReal := ∫⁻ y, (∫⁻ x, F x y ^ r ∂μ) ^ (1 / r) ∂ν with hJdef rcases eq_or_ne I 0 with hI0 | hIne · rw [hI0, ENNReal.zero_rpow_of_pos (by positivity)] simp · have hIpos : 0 < I := pos_iff_ne_zero.mpr hIne -- `r > 1` have hq : r.HolderConjugate (Real.conjExponent r) := Real.HolderConjugate.conjExponent hr1 set q : ℝ := Real.conjExponent r with hqdef have hq0 : (0 : ℝ) < q := hq.symm.pos have hinvsum : 1 / r + 1 / q = 1 := by have h1 := hq.one_div_add_one_div simpa using h1 have hqr : (r - 1) * q = r := by have hr' : (1 : ℝ) / r = 1 - 1 / q := by linarith field_simp at hr' ⊢ nlinarith [hr', hq0, hr0] -- almost every `G x` is finite have hGfin : ∀ᵐ x ∂μ, G x ≠ ⊤ := by have hlt := ae_lt_top (hGmeas.pow_const r) hfin filter_upwards [hlt] with x hx intro hcon rw [hcon, ENNReal.top_rpow_of_pos hr0] at hx exact absurd hx (by simp) -- split the power and move the constant inside have hstep1 : I = ∫⁻ x, ∫⁻ y, F x y * G x ^ (r - 1) ∂ν ∂μ := by rw [hIdef] refine lintegral_congr_ae ?_ filter_upwards [hGfin] with x hx have hconst : (∫⁻ y, F x y * G x ^ (r - 1) ∂ν) = G x * G x ^ (r - 1) := by rw [lintegral_mul_const' _ _ (ENNReal.rpow_ne_top_of_nonneg (by linarith) hx), hGdef] rw [hconst] rcases eq_or_ne (G x) 0 with hz | hz · rw [hz, ENNReal.zero_rpow_of_pos hr0, ENNReal.zero_rpow_of_pos (by linarith : (0:ℝ) < r - 1), mul_zero] · calc G x ^ r = G x ^ (1 + (r - 1)) := by congr 1 ring _ = G x ^ (1 : ℝ) * G x ^ (r - 1) := ENNReal.rpow_add _ _ hz hx _ = G x * G x ^ (r - 1) := by rw [ENNReal.rpow_one] -- Tonelli have hjoint : Measurable fun z : α × β => F z.1 z.2 * G z.1 ^ (r - 1) := by exact hF.mul ((hGmeas.comp measurable_fst).pow_const _) have hstep2 : (∫⁻ x, ∫⁻ y, F x y * G x ^ (r - 1) ∂ν ∂μ) = ∫⁻ y, ∫⁻ x, F x y * G x ^ (r - 1) ∂μ ∂ν := lintegral_lintegral_swap hjoint.aemeasurable -- Hölder in `x`, for each `y` have hstep3 : ∀ y : β, (∫⁻ x, F x y * G x ^ (r - 1) ∂μ) ≤ (∫⁻ x, F x y ^ r ∂μ) ^ (1 / r) * I ^ (1 / q) := by intro y have hmeas1 : AEMeasurable (fun x => F x y) μ := (hF.comp (measurable_id.prodMk measurable_const)).aemeasurable have hmeas2 : AEMeasurable (fun x => G x ^ (r - 1)) μ := (hGmeas.pow_const _).aemeasurable have hholder := ENNReal.lintegral_mul_le_Lp_mul_Lq μ hq hmeas1 hmeas2 simp only [Pi.mul_apply] at hholder refine le_trans hholder (mul_le_mul' le_rfl (le_of_eq ?_)) congr 1 rw [hIdef] refine lintegral_congr fun x => ?_ rw [← ENNReal.rpow_mul, hqr] -- assemble have hIle : I ≤ J * I ^ (1 / q) := by conv_lhs => rw [hstep1, hstep2] rw [hJdef, ← lintegral_mul_const' _ _ (ENNReal.rpow_ne_top_of_nonneg (by positivity) hfin)] exact lintegral_mono hstep3 -- cancel the common factor have hIfin : I ≠ ⊤ := hfin have hIq : I ^ (1 / q) ≠ 0 := by simp only [ne_eq, ENNReal.rpow_eq_zero_iff, not_or] refine ⟨fun h => absurd h.1 (ne_of_gt hIpos), fun h => ?_⟩ exact absurd h.1 hIfin have hIqtop : I ^ (1 / q) ≠ ⊤ := ENNReal.rpow_ne_top_of_nonneg (by positivity) hIfin have hsplitI : I = I ^ (1 / r) * I ^ (1 / q) := by rw [← ENNReal.rpow_add _ _ (ne_of_gt hIpos) hIfin, hinvsum, ENNReal.rpow_one] refine (ENNReal.mul_le_mul_iff_left hIq hIqtop).mp ?_ rw [← hsplitI] exact hIle /-! ## The truncated singular kernel `h_k` BRS write the near part of `R_2^±` as a convolution against the kernel `|y|^{-1/2}` truncated to the scale `2^{-k}` of the radius. All that is needed of it downstream is the size of its `L^a` norms. -/ /-- The kernel `h_k(y) = y^{-1/2}` truncated to `(0, 2^{-k}]`. -/ def brsTruncKernel (k : ℕ) (y : ℝ) : ℝ := (Ioc (0 : ℝ) (2 ^ (-(k : ℝ)))).indicator (fun y => y ^ (-(1 / 2) : ℝ)) y theorem brsTruncKernel_nonneg (k : ℕ) (y : ℝ) : 0 ≤ brsTruncKernel k y := by rw [brsTruncKernel] by_cases hy : y ∈ Ioc (0 : ℝ) (2 ^ (-(k : ℝ))) · rw [Set.indicator_of_mem hy] exact Real.rpow_nonneg hy.1.le _ · rw [Set.indicator_of_notMem hy] theorem measurable_brsTruncKernel (k : ℕ) : Measurable (brsTruncKernel k) := by refine Measurable.indicator ?_ measurableSet_Ioc fun_prop /-- **The `L^a` norm of the truncated kernel.** It is finite exactly when `a < 2`, and then it is comparable to `2^{-k(1/a - 1/2)}` raised to `a`. -/ theorem lintegral_brsTruncKernel_rpow (k : ℕ) {a : ℝ} (ha : 0 < a) (ha2 : a < 2) : (∫⁻ y, ENNReal.ofReal (brsTruncKernel k y) ^ a) = ENNReal.ofReal ((2 ^ (-(k : ℝ)) : ℝ) ^ (1 - a / 2) / (1 - a / 2)) := by set T : ℝ := (2 : ℝ) ^ (-(k : ℝ)) with hT have hTpos : 0 < T := Real.rpow_pos_of_pos (by norm_num) _ have he : (-1 : ℝ) < -(a / 2) := by linarith have hstep : ∀ y : ℝ, ENNReal.ofReal (brsTruncKernel k y) ^ a = (Ioc (0 : ℝ) T).indicator (fun y => ENNReal.ofReal (y ^ (-(a / 2) : ℝ))) y := by intro y by_cases hy : y ∈ Ioc (0 : ℝ) T · rw [Set.indicator_of_mem hy] have hval : brsTruncKernel k y = y ^ (-(1 / 2) : ℝ) := by rw [brsTruncKernel, Set.indicator_of_mem hy] rw [hval, ENNReal.ofReal_rpow_of_pos (Real.rpow_pos_of_pos hy.1 _), ← Real.rpow_mul hy.1.le] congr 2 ring · rw [Set.indicator_of_notMem hy] have hval : brsTruncKernel k y = 0 := by rw [brsTruncKernel, Set.indicator_of_notMem hy] rw [hval, ENNReal.ofReal_zero, ENNReal.zero_rpow_of_pos ha] rw [lintegral_congr hstep, lintegral_indicator measurableSet_Ioc] rw [← setLIntegral_congr (Ioo_ae_eq_Ioc (a := (0 : ℝ)) (b := T))] rw [lintegral_Ioo_rpow he hTpos] congr 2 · ring · ring /-- The `L¹` norm of the truncated kernel is `2 · 2^{-k/2}`. -/ theorem lintegral_brsTruncKernel (k : ℕ) : (∫⁻ y, ENNReal.ofReal (brsTruncKernel k y)) = ENNReal.ofReal (2 * (2 : ℝ) ^ (-(k : ℝ) / 2)) := by have h := lintegral_brsTruncKernel_rpow k (a := 1) one_pos (by norm_num) simp only [ENNReal.rpow_one] at h rw [h] congr 1 rw [show (1 : ℝ) - 1 / 2 = 1 / 2 by norm_num, ← Real.rpow_mul (by norm_num : (0:ℝ) ≤ 2), show -(k : ℝ) * (1 / 2) = -(k : ℝ) / 2 by ring] ring /-! ## Hölder for a convolution against an `L^a` kernel The `m = 0` term of the BRS decomposition is a convolution against the truncated singular kernel, and there the whole `t`-supremum is controlled by a single Hölder estimate, uniformly in the translation. -/ /-- **Hölder's inequality for a convolution.** The bound is uniform in the translation, so it also bounds the supremum over `t`. -/ theorem enorm_convolution_le_holder {a p : ℝ} (hconj : a.HolderConjugate p) {h : ℝ → ℝ} (hh : Measurable h) {G : ℝ → ℂ} (hG : Measurable G) (x : ℝ) : ‖∫ y : ℝ, (h y : ℂ) * G (x - y)‖ₑ ≤ (∫⁻ y : ℝ, ‖h y‖ₑ ^ a) ^ (1 / a) * (∫⁻ z : ℝ, ‖G z‖ₑ ^ p) ^ (1 / p) := by have hbase : ‖∫ y : ℝ, (h y : ℂ) * G (x - y)‖ₑ ≤ ∫⁻ y : ℝ, ‖h y‖ₑ * ‖G (x - y)‖ₑ := by refine le_trans (enorm_integral_le_lintegral_enorm _) (le_of_eq ?_) refine lintegral_congr fun y => ?_ rw [enorm_mul, ← ofReal_norm, Complex.norm_real, ofReal_norm] refine le_trans hbase ?_ have hmeas1 : AEMeasurable (fun y : ℝ => ‖h y‖ₑ) volume := hh.enorm.aemeasurable have hmeas2 : AEMeasurable (fun y : ℝ => ‖G (x - y)‖ₑ) volume := ((hG.comp (measurable_const.sub measurable_id)).enorm).aemeasurable have hholder := ENNReal.lintegral_mul_le_Lp_mul_Lq (volume : Measure ℝ) hconj hmeas1 hmeas2 simp only [Pi.mul_apply] at hholder refine le_trans hholder (le_of_eq ?_) congr 2 exact lintegral_sub_left_eq_self (fun z => ‖G z‖ₑ ^ p) x /-- The same bound for the supremum over a set of translations. -/ theorem iSup_enorm_convolution_le_holder {a p : ℝ} (hconj : a.HolderConjugate p) {h : ℝ → ℝ} (hh : Measurable h) {G : ℝ → ℂ} (hG : Measurable G) (S : Set ℝ) : (⨆ x ∈ S, ‖∫ y : ℝ, (h y : ℂ) * G (x - y)‖ₑ) ≤ (∫⁻ y : ℝ, ‖h y‖ₑ ^ a) ^ (1 / a) * (∫⁻ z : ℝ, ‖G z‖ₑ ^ p) ^ (1 / p) := iSup₂_le fun x _ => enorm_convolution_le_holder hconj hh hG x /-! ## The dyadic radius windows `I_k` BRS localize the radius to `I_0 = [1/2, 4/3]` and `I_k = [2^{-k-1}, 2^{-k}]`. Only the dyadic shape matters downstream, so we use the half-open windows, which are pairwise disjoint. -/ /-- The dyadic radius window `I_k = (2^{-k-1}, 2^{-k}]`. -/ def brsRadiusWindow (k : ℕ) : Set ℝ := Ioc ((2 : ℝ) ^ (-(k : ℝ) - 1)) ((2 : ℝ) ^ (-(k : ℝ))) theorem measurableSet_brsRadiusWindow (k : ℕ) : MeasurableSet (brsRadiusWindow k) := measurableSet_Ioc theorem brsRadiusWindow_pos {k : ℕ} {r : ℝ} (hr : r ∈ brsRadiusWindow k) : 0 < r := lt_of_lt_of_le (Real.rpow_pos_of_pos (by norm_num) _) hr.1.le theorem brsRadiusWindow_le_one {k : ℕ} {r : ℝ} (hr : r ∈ brsRadiusWindow k) : r ≤ 1 := by refine le_trans hr.2 ?_ rw [show (1 : ℝ) = (2 : ℝ) ^ (0 : ℝ) by norm_num] exact Real.rpow_le_rpow_of_exponent_le (by norm_num) (neg_nonpos.mpr (Nat.cast_nonneg k)) /-- The windows are pairwise disjoint. -/ theorem brsRadiusWindow_disjoint {k l : ℕ} (hkl : k ≠ l) : Disjoint (brsRadiusWindow k) (brsRadiusWindow l) := by -- it suffices to treat `k < l` have key : ∀ m n : ℕ, m < n → Disjoint (brsRadiusWindow m) (brsRadiusWindow n) := by intro m n hmn refine Set.disjoint_left.mpr fun r hrm hrn => ?_ have h1 : r ≤ (2 : ℝ) ^ (-(n : ℝ)) := hrn.2 have h2 : (2 : ℝ) ^ (-(m : ℝ) - 1) < r := hrm.1 have h3 : (2 : ℝ) ^ (-(n : ℝ)) ≤ (2 : ℝ) ^ (-(m : ℝ) - 1) := by refine Real.rpow_le_rpow_of_exponent_le (by norm_num) ?_ have : (m : ℝ) + 1 ≤ (n : ℝ) := by exact_mod_cast hmn linarith linarith rcases lt_or_gt_of_ne hkl with h | h · exact key k l h · exact (key l k h).symm /-! ## A crude bound for a power integral away from the origin -/ /-- On an interval bounded away from `0` the integral of `r ^ e` is at most the length times the larger endpoint value. -/ theorem lintegral_Ioc_rpow_le {A B e : ℝ} (hA : 0 < A) : (∫⁻ r in Ioc A B, ENNReal.ofReal (r ^ e)) ≤ ENNReal.ofReal (max (A ^ e) (B ^ e)) * ENNReal.ofReal (B - A) := by have hbd : ∀ r ∈ Ioc A B, ENNReal.ofReal (r ^ e) ≤ ENNReal.ofReal (max (A ^ e) (B ^ e)) := by intro r hr refine ENNReal.ofReal_le_ofReal ?_ rcases le_or_gt 0 e with he | he · exact le_trans (Real.rpow_le_rpow (hA.trans hr.1).le hr.2 he) (le_max_right _ _) · exact le_trans (Real.rpow_le_rpow_of_nonpos hA hr.1.le he.le) (le_max_left _ _) calc (∫⁻ r in Ioc A B, ENNReal.ofReal (r ^ e)) ≤ ∫⁻ _ in Ioc A B, ENNReal.ofReal (max (A ^ e) (B ^ e)) := setLIntegral_mono' measurableSet_Ioc hbd _ = ENNReal.ofReal (max (A ^ e) (B ^ e)) * volume (Ioc A B) := setLIntegral_const _ _ _ = ENNReal.ofReal (max (A ^ e) (B ^ e)) * ENNReal.ofReal (B - A) := by rw [Real.volume_Ioc] /-! ## (5.8): the terms `𝒜_{k,0}` BRS set `𝒜_{k,0} f₀(r,t) = r^{-1/2} 1_{I_k}(r) (h_k * u_k * f₀)(t - r)`. The low-frequency factor `u_k` is an `L¹`-normalised dilate, so `‖u_k * f₀‖_p ≤ ‖f₀‖_p` by Young's inequality (`lintegral_convolution_rpow_le`); everything after that depends on `u_k * f₀` only through its `L^p` norm, so we carry it as a single function `G`. -/ /-- `𝒜_{k,0}`, as a function of the radius, with the low-frequency factor already absorbed into `G`. -/ def brsAZero (k : ℕ) (G : ℝ → ℂ) (r : ℝ) : ENNReal := (brsRadiusWindow k).indicator (fun r => ENNReal.ofReal (r ^ (-(1 / 2) : ℝ)) * ⨆ t ∈ Icc (1 : ℝ) 2, ‖∫ y : ℝ, (brsTruncKernel k y : ℂ) * G (t - r - y)‖ₑ) r theorem enorm_brsTruncKernel (k : ℕ) (y : ℝ) : ‖brsTruncKernel k y‖ₑ = ENNReal.ofReal (brsTruncKernel k y) := by rw [← ofReal_norm, Real.norm_of_nonneg (brsTruncKernel_nonneg k y)] /-- The `L^a` norm of `h_k`, as it appears in the `m = 0` estimate. -/ def brsTruncNorm (k : ℕ) (a : ℝ) : ENNReal := ENNReal.ofReal ((((2 : ℝ) ^ (-(k : ℝ))) ^ (1 - a / 2)) / (1 - a / 2)) ^ (1 / a) /-- **The pointwise bound for `𝒜_{k,0}`.** Hölder against the truncated kernel is uniform in `t`, so it also bounds the maximal function. -/ theorem brsAZero_le {k : ℕ} {a p : ℝ} (hconj : a.HolderConjugate p) (ha2 : a < 2) {G : ℝ → ℂ} (hG : Measurable G) (r : ℝ) : brsAZero k G r ≤ (brsRadiusWindow k).indicator (fun r => ENNReal.ofReal (r ^ (-(1 / 2) : ℝ))) r * (brsTruncNorm k a * (∫⁻ z : ℝ, ‖G z‖ₑ ^ p) ^ (1 / p)) := by have ha0 : (0 : ℝ) < a := hconj.pos have hnorm : (∫⁻ y : ℝ, ‖brsTruncKernel k y‖ₑ ^ a) = ENNReal.ofReal ((((2 : ℝ) ^ (-(k : ℝ))) ^ (1 - a / 2)) / (1 - a / 2)) := by rw [← lintegral_brsTruncKernel_rpow k ha0 ha2] exact lintegral_congr fun y => by rw [enorm_brsTruncKernel] by_cases hr : r ∈ brsRadiusWindow k · rw [brsAZero, Set.indicator_of_mem hr, Set.indicator_of_mem hr] refine mul_le_mul' le_rfl ?_ refine iSup₂_le fun t _ => ?_ have h := enorm_convolution_le_holder hconj (measurable_brsTruncKernel k) hG (t - r) rw [hnorm] at h exact h · rw [brsAZero, Set.indicator_of_notMem hr, Set.indicator_of_notMem hr, zero_mul] /-! ## The radial `L^q(r dr)` norm of a single `𝒜_{k,0}` -/ /-- The radial integral of the `q`-th power of `𝒜_{k,0}`. -/ theorem lintegral_brsAZero_rpow_le {k : ℕ} {a p q : ℝ} (hconj : a.HolderConjugate p) (ha2 : a < 2) (hq : 0 < q) {G : ℝ → ℂ} (hG : Measurable G) : (∫⁻ r : ℝ, brsAZero k G r ^ q * ENNReal.ofReal r) ≤ (brsTruncNorm k a * (∫⁻ z : ℝ, ‖G z‖ₑ ^ p) ^ (1 / p)) ^ q * ∫⁻ r in brsRadiusWindow k, ENNReal.ofReal (r ^ (1 - q / 2)) := by set M : ENNReal := brsTruncNorm k a * (∫⁻ z : ℝ, ‖G z‖ₑ ^ p) ^ (1 / p) with hM have hmeas : Measurable fun r : ℝ => (brsRadiusWindow k).indicator (fun r => ENNReal.ofReal (r ^ (1 - q / 2))) r := by refine Measurable.indicator ?_ (measurableSet_brsRadiusWindow k) fun_prop have hpt : ∀ r : ℝ, brsAZero k G r ^ q * ENNReal.ofReal r ≤ M ^ q * (brsRadiusWindow k).indicator (fun r => ENNReal.ofReal (r ^ (1 - q / 2))) r := by intro r by_cases hr : r ∈ brsRadiusWindow k · have hrpos : 0 < r := brsRadiusWindow_pos hr have hb := brsAZero_le (k := k) hconj ha2 hG r rw [Set.indicator_of_mem hr] at hb have hstep : brsAZero k G r ^ q ≤ (ENNReal.ofReal (r ^ (-(1 / 2) : ℝ)) * M) ^ q := ENNReal.rpow_le_rpow hb hq.le have hexp : (ENNReal.ofReal (r ^ (-(1 / 2) : ℝ)) * M) ^ q * ENNReal.ofReal r = M ^ q * ENNReal.ofReal (r ^ (1 - q / 2)) := by rw [ENNReal.mul_rpow_of_nonneg _ _ hq.le, ENNReal.ofReal_rpow_of_pos (Real.rpow_pos_of_pos hrpos _), ← Real.rpow_mul hrpos.le] rw [mul_comm (ENNReal.ofReal (r ^ (-(1 / 2) * q))) (M ^ q), mul_assoc] congr 1 rw [← ENNReal.ofReal_mul (Real.rpow_nonneg hrpos.le _)] congr 1 calc r ^ (-(1 / 2) * q) * r = r ^ (-(1 / 2) * q) * r ^ (1 : ℝ) := by rw [Real.rpow_one] _ = r ^ (-(1 / 2) * q + 1) := (Real.rpow_add hrpos _ _).symm _ = r ^ (1 - q / 2) := by congr 1 ring rw [Set.indicator_of_mem hr, ← hexp] exact mul_le_mul' hstep le_rfl · rw [brsAZero, Set.indicator_of_notMem hr, ENNReal.zero_rpow_of_pos hq, zero_mul] exact zero_le calc (∫⁻ r : ℝ, brsAZero k G r ^ q * ENNReal.ofReal r) ≤ ∫⁻ r : ℝ, M ^ q * (brsRadiusWindow k).indicator (fun r => ENNReal.ofReal (r ^ (1 - q / 2))) r := lintegral_mono hpt _ = M ^ q * ∫⁻ r : ℝ, (brsRadiusWindow k).indicator (fun r => ENNReal.ofReal (r ^ (1 - q / 2))) r := lintegral_const_mul _ hmeas _ = M ^ q * ∫⁻ r in brsRadiusWindow k, ENNReal.ofReal (r ^ (1 - q / 2)) := by rw [lintegral_indicator (measurableSet_brsRadiusWindow k)] /-! ## The dyadic size of the two factors in the `m = 0` estimate -/ /-- The weight integral over a dyadic radius window. -/ theorem lintegral_brsRadiusWindow_rpow_le (k : ℕ) (e : ℝ) : (∫⁻ r in brsRadiusWindow k, ENNReal.ofReal (r ^ e)) ≤ ENNReal.ofReal ((2 : ℝ) ^ |e| * ((2 : ℝ) ^ (-(k : ℝ))) ^ (e + 1)) := by set B : ℝ := (2 : ℝ) ^ (-(k : ℝ)) with hB set A : ℝ := (2 : ℝ) ^ (-(k : ℝ) - 1) with hA have hBpos : 0 < B := Real.rpow_pos_of_pos (by norm_num) _ have hApos : 0 < A := Real.rpow_pos_of_pos (by norm_num) _ have hunfold : brsRadiusWindow k = Ioc A B := by rw [brsRadiusWindow, hA, hB] have hhalf : A = B * (2 : ℝ) ^ (-1 : ℝ) := by rw [hA, hB, ← Real.rpow_add (by norm_num), show -(k : ℝ) + (-1 : ℝ) = -(k : ℝ) - 1 by ring] have habsnn : (0 : ℝ) ≤ (2 : ℝ) ^ |e| := (Real.rpow_pos_of_pos (by norm_num) _).le have h1e : (1 : ℝ) ≤ (2 : ℝ) ^ |e| := by rw [show (1 : ℝ) = (2 : ℝ) ^ (0 : ℝ) by norm_num] exact Real.rpow_le_rpow_of_exponent_le (by norm_num) (abs_nonneg e) have hBenn : (0 : ℝ) ≤ B ^ e := Real.rpow_nonneg hBpos.le e have hAe : A ^ e ≤ (2 : ℝ) ^ |e| * B ^ e := by have hx : A ^ e = B ^ e * (2 : ℝ) ^ (-e) := by rw [hhalf, Real.mul_rpow hBpos.le (Real.rpow_pos_of_pos (by norm_num : (0 : ℝ) < 2) _).le, ← Real.rpow_mul (by norm_num : (0 : ℝ) ≤ 2) (-1 : ℝ) e, show (-1 : ℝ) * e = -e by ring] rw [hx, mul_comm] refine mul_le_mul_of_nonneg_right ?_ hBenn exact Real.rpow_le_rpow_of_exponent_le (by norm_num) (neg_le_abs e) have hBe : B ^ e ≤ (2 : ℝ) ^ |e| * B ^ e := by nlinarith have hAhalf : A ≤ B := by rw [hA, hB] exact Real.rpow_le_rpow_of_exponent_le (by norm_num) (by linarith) calc (∫⁻ r in brsRadiusWindow k, ENNReal.ofReal (r ^ e)) = ∫⁻ r in Ioc A B, ENNReal.ofReal (r ^ e) := by rw [hunfold] _ ≤ ENNReal.ofReal (max (A ^ e) (B ^ e)) * ENNReal.ofReal (B - A) := lintegral_Ioc_rpow_le hApos _ ≤ ENNReal.ofReal ((2 : ℝ) ^ |e| * B ^ e) * ENNReal.ofReal B := mul_le_mul' (ENNReal.ofReal_le_ofReal (max_le hAe hBe)) (ENNReal.ofReal_le_ofReal (by linarith)) _ = ENNReal.ofReal ((2 : ℝ) ^ |e| * B ^ (e + 1)) := by rw [← ENNReal.ofReal_mul (mul_nonneg habsnn hBenn)] congr 1 rw [Real.rpow_add hBpos, Real.rpow_one] ring /-- The `q`-th power of the kernel norm. -/ theorem brsTruncNorm_rpow (k : ℕ) {a q : ℝ} (ha : 0 < a) : brsTruncNorm k a ^ q = ENNReal.ofReal ((((2 : ℝ) ^ (-(k : ℝ))) ^ (1 - a / 2)) / (1 - a / 2)) ^ (q / a) := by rw [brsTruncNorm, ← ENNReal.rpow_mul] congr 1 field_simp /-! ## The dyadic gain of the `m = 0` terms -/ /-- The constant of the `m = 0` estimate. -/ def brsAZeroConst (a q : ℝ) : ℝ := (1 - a / 2) ^ (-(q / a)) * (2 : ℝ) ^ |1 - q / 2| theorem brsAZeroConst_pos {a q : ℝ} (ha2 : a < 2) : 0 < brsAZeroConst a q := by have h1 : (0 : ℝ) < 1 - a / 2 := by linarith rw [brsAZeroConst] exact mul_pos (Real.rpow_pos_of_pos h1 _) (Real.rpow_pos_of_pos (by norm_num) _) /-- **The `m = 0` estimate at a single scale.** The gain is `2^{-k(2 - q/p)}`, which is summable exactly when `q < 2p`. -/ theorem lintegral_brsAZero_rpow_le' {k : ℕ} {a p q : ℝ} (hconj : a.HolderConjugate p) (ha2 : a < 2) (hq : 0 < q) {G : ℝ → ℂ} (hG : Measurable G) : (∫⁻ r : ℝ, brsAZero k G r ^ q * ENNReal.ofReal r) ≤ ENNReal.ofReal (brsAZeroConst a q * ((2 : ℝ) ^ (-(k : ℝ))) ^ (2 - q / p)) * (∫⁻ z : ℝ, ‖G z‖ₑ ^ p) ^ (q / p) := by have ha0 : (0 : ℝ) < a := hconj.pos have hp0 : (0 : ℝ) < p := hconj.symm.pos have hinv : 1 / a + 1 / p = 1 := by have h := hconj.one_div_add_one_div simpa using h have h1a : 1 / a = 1 - 1 / p := by linarith have hqa : q / a = q - q / p := by have h : q / a = q * (1 / a) := by ring rw [h, h1a] ring have hhalfa : (0 : ℝ) < 1 - a / 2 := by linarith set T : ℝ := (2 : ℝ) ^ (-(k : ℝ)) with hT have hTpos : 0 < T := Real.rpow_pos_of_pos (by norm_num) _ set Np : ENNReal := (∫⁻ z : ℝ, ‖G z‖ₑ ^ p) ^ (1 / p) with hNp -- the two factors have hfactor : brsTruncNorm k a ^ q = ENNReal.ofReal ((T ^ (1 - a / 2) / (1 - a / 2)) ^ (q / a)) := by rw [brsTruncNorm_rpow k ha0, ENNReal.ofReal_rpow_of_pos (by positivity)] have hNpq : Np ^ q = (∫⁻ z : ℝ, ‖G z‖ₑ ^ p) ^ (q / p) := by rw [hNp, ← ENNReal.rpow_mul] congr 1 field_simp -- the arithmetic of the exponents have hconstid : (T ^ (1 - a / 2) / (1 - a / 2)) ^ (q / a) * ((2 : ℝ) ^ |1 - q / 2| * T ^ (1 - q / 2 + 1)) = brsAZeroConst a q * T ^ (2 - q / p) := by have hsplit : (T ^ (1 - a / 2) / (1 - a / 2)) ^ (q / a) = T ^ ((1 - a / 2) * (q / a)) * (1 - a / 2) ^ (-(q / a)) := by rw [Real.div_rpow (Real.rpow_nonneg hTpos.le _) hhalfa.le, ← Real.rpow_mul hTpos.le, Real.rpow_neg hhalfa.le, div_eq_mul_inv] have hexp : (1 - a / 2) * (q / a) + (1 - q / 2 + 1) = 2 - q / p := by have hstep : (1 - a / 2) * (q / a) = q / a - q / 2 := by field_simp rw [hstep, hqa] ring rw [hsplit, brsAZeroConst] calc T ^ ((1 - a / 2) * (q / a)) * (1 - a / 2) ^ (-(q / a)) * ((2 : ℝ) ^ |1 - q / 2| * T ^ (1 - q / 2 + 1)) = (1 - a / 2) ^ (-(q / a)) * (2 : ℝ) ^ |1 - q / 2| * (T ^ ((1 - a / 2) * (q / a)) * T ^ (1 - q / 2 + 1)) := by ring _ = (1 - a / 2) ^ (-(q / a)) * (2 : ℝ) ^ |1 - q / 2| * T ^ (2 - q / p) := by rw [← Real.rpow_add hTpos, hexp] calc (∫⁻ r : ℝ, brsAZero k G r ^ q * ENNReal.ofReal r) ≤ (brsTruncNorm k a * Np) ^ q * ∫⁻ r in brsRadiusWindow k, ENNReal.ofReal (r ^ (1 - q / 2)) := lintegral_brsAZero_rpow_le hconj ha2 hq hG _ = brsTruncNorm k a ^ q * (∫⁻ r in brsRadiusWindow k, ENNReal.ofReal (r ^ (1 - q / 2))) * Np ^ q := by rw [ENNReal.mul_rpow_of_nonneg _ _ hq.le] ring _ ≤ brsTruncNorm k a ^ q * ENNReal.ofReal ((2 : ℝ) ^ |1 - q / 2| * T ^ (1 - q / 2 + 1)) * Np ^ q := by refine mul_le_mul' (mul_le_mul' le_rfl ?_) le_rfl exact lintegral_brsRadiusWindow_rpow_le k (1 - q / 2) _ = ENNReal.ofReal (brsAZeroConst a q * T ^ (2 - q / p)) * (∫⁻ z : ℝ, ‖G z‖ₑ ^ p) ^ (q / p) := by rw [hfactor, hNpq, ← ENNReal.ofReal_mul (by positivity), hconstid] /-! ## The `m = 0` terms have disjoint radial supports Each `𝒜_{k,0}` lives on the dyadic window `I_k`, so summing in `k` costs nothing pointwise: at every radius at most one term is nonzero. -/ theorem brsAZero_eq_zero_of_notMem {k : ℕ} {G : ℝ → ℂ} {r : ℝ} (hr : r ∉ brsRadiusWindow k) : brsAZero k G r = 0 := by rw [brsAZero, Set.indicator_of_notMem hr] /-- The `q`-th power of the sum is the sum of the `q`-th powers. -/ theorem tsum_brsAZero_rpow {G : ℝ → ℂ} {q : ℝ} (hq : 0 < q) (r : ℝ) : (∑' k : ℕ, brsAZero k G r) ^ q = ∑' k : ℕ, brsAZero k G r ^ q := by by_cases h : ∃ k : ℕ, r ∈ brsRadiusWindow k · obtain ⟨k₀, hk₀⟩ := h have hzero : ∀ k : ℕ, k ≠ k₀ → brsAZero k G r = 0 := by intro k hk refine brsAZero_eq_zero_of_notMem fun hr => ?_ exact Set.disjoint_left.mp (brsRadiusWindow_disjoint hk) hr hk₀ rw [tsum_eq_single k₀ hzero, tsum_eq_single k₀ fun k hk => by rw [hzero k hk, ENNReal.zero_rpow_of_pos hq]] · simp only [not_exists] at h have hall : ∀ k : ℕ, brsAZero k G r = 0 := fun k => brsAZero_eq_zero_of_notMem (h k) simp only [hall, tsum_zero, ENNReal.zero_rpow_of_pos hq] /-- **The pointwise bound behind the `m = 0` estimate**, in the form needed for the sum over `k`. -/ theorem brsAZero_rpow_mul_le {k : ℕ} {a p q : ℝ} (hconj : a.HolderConjugate p) (ha2 : a < 2) (hq : 0 < q) {G : ℝ → ℂ} (hG : Measurable G) (r : ℝ) : brsAZero k G r ^ q * ENNReal.ofReal r ≤ (brsTruncNorm k a * (∫⁻ z : ℝ, ‖G z‖ₑ ^ p) ^ (1 / p)) ^ q * (brsRadiusWindow k).indicator (fun r => ENNReal.ofReal (r ^ (1 - q / 2))) r := by set M : ENNReal := brsTruncNorm k a * (∫⁻ z : ℝ, ‖G z‖ₑ ^ p) ^ (1 / p) with hM by_cases hr : r ∈ brsRadiusWindow k · have hrpos : 0 < r := brsRadiusWindow_pos hr have hb := brsAZero_le (k := k) hconj ha2 hG r rw [Set.indicator_of_mem hr] at hb have hstep : brsAZero k G r ^ q ≤ (ENNReal.ofReal (r ^ (-(1 / 2) : ℝ)) * M) ^ q := ENNReal.rpow_le_rpow hb hq.le have hexp : (ENNReal.ofReal (r ^ (-(1 / 2) : ℝ)) * M) ^ q * ENNReal.ofReal r = M ^ q * ENNReal.ofReal (r ^ (1 - q / 2)) := by rw [ENNReal.mul_rpow_of_nonneg _ _ hq.le, ENNReal.ofReal_rpow_of_pos (Real.rpow_pos_of_pos hrpos _), ← Real.rpow_mul hrpos.le] rw [mul_comm (ENNReal.ofReal (r ^ (-(1 / 2) * q))) (M ^ q), mul_assoc] congr 1 rw [← ENNReal.ofReal_mul (Real.rpow_nonneg hrpos.le _)] congr 1 calc r ^ (-(1 / 2) * q) * r = r ^ (-(1 / 2) * q) * r ^ (1 : ℝ) := by rw [Real.rpow_one] _ = r ^ (-(1 / 2) * q + 1) := (Real.rpow_add hrpos _ _).symm _ = r ^ (1 - q / 2) := by congr 1 ring rw [Set.indicator_of_mem hr, ← hexp] exact mul_le_mul' hstep le_rfl · rw [brsAZero, Set.indicator_of_notMem hr, ENNReal.zero_rpow_of_pos hq, zero_mul] exact zero_le /-! ## (5.8): summing the `m = 0` terms -/ /-- The single-scale estimate, phrased through the `L^p` norm alone. -/ theorem brsAZero_scale_bound {k : ℕ} {a p q : ℝ} (hconj : a.HolderConjugate p) (ha2 : a < 2) (hq : 0 < q) (X : ENNReal) : (brsTruncNorm k a * X ^ (1 / p)) ^ q * (∫⁻ r in brsRadiusWindow k, ENNReal.ofReal (r ^ (1 - q / 2))) ≤ ENNReal.ofReal (brsAZeroConst a q * ((2 : ℝ) ^ (-(k : ℝ))) ^ (2 - q / p)) * X ^ (q / p) := by have ha0 : (0 : ℝ) < a := hconj.pos have hp0 : (0 : ℝ) < p := hconj.symm.pos have hinv : 1 / a + 1 / p = 1 := by have h := hconj.one_div_add_one_div simpa using h have h1a : 1 / a = 1 - 1 / p := by linarith have hqa : q / a = q - q / p := by have h : q / a = q * (1 / a) := by ring rw [h, h1a] ring have hhalfa : (0 : ℝ) < 1 - a / 2 := by linarith set T : ℝ := (2 : ℝ) ^ (-(k : ℝ)) with hT have hTpos : 0 < T := Real.rpow_pos_of_pos (by norm_num) _ have hfactor : brsTruncNorm k a ^ q = ENNReal.ofReal ((T ^ (1 - a / 2) / (1 - a / 2)) ^ (q / a)) := by rw [brsTruncNorm_rpow k ha0, ENNReal.ofReal_rpow_of_pos (by positivity)] have hNpq : (X ^ (1 / p)) ^ q = X ^ (q / p) := by rw [← ENNReal.rpow_mul] congr 1 field_simp have hconstid : (T ^ (1 - a / 2) / (1 - a / 2)) ^ (q / a) * ((2 : ℝ) ^ |1 - q / 2| * T ^ (1 - q / 2 + 1)) = brsAZeroConst a q * T ^ (2 - q / p) := by have hsplit : (T ^ (1 - a / 2) / (1 - a / 2)) ^ (q / a) = T ^ ((1 - a / 2) * (q / a)) * (1 - a / 2) ^ (-(q / a)) := by rw [Real.div_rpow (Real.rpow_nonneg hTpos.le _) hhalfa.le, ← Real.rpow_mul hTpos.le, Real.rpow_neg hhalfa.le, div_eq_mul_inv] have hexp : (1 - a / 2) * (q / a) + (1 - q / 2 + 1) = 2 - q / p := by have hstep : (1 - a / 2) * (q / a) = q / a - q / 2 := by field_simp rw [hstep, hqa] ring rw [hsplit, brsAZeroConst] calc T ^ ((1 - a / 2) * (q / a)) * (1 - a / 2) ^ (-(q / a)) * ((2 : ℝ) ^ |1 - q / 2| * T ^ (1 - q / 2 + 1)) = (1 - a / 2) ^ (-(q / a)) * (2 : ℝ) ^ |1 - q / 2| * (T ^ ((1 - a / 2) * (q / a)) * T ^ (1 - q / 2 + 1)) := by ring _ = (1 - a / 2) ^ (-(q / a)) * (2 : ℝ) ^ |1 - q / 2| * T ^ (2 - q / p) := by rw [← Real.rpow_add hTpos, hexp] calc (brsTruncNorm k a * X ^ (1 / p)) ^ q * (∫⁻ r in brsRadiusWindow k, ENNReal.ofReal (r ^ (1 - q / 2))) = brsTruncNorm k a ^ q * (∫⁻ r in brsRadiusWindow k, ENNReal.ofReal (r ^ (1 - q / 2))) * (X ^ (1 / p)) ^ q := by rw [ENNReal.mul_rpow_of_nonneg _ _ hq.le] ring _ ≤ brsTruncNorm k a ^ q * ENNReal.ofReal ((2 : ℝ) ^ |1 - q / 2| * T ^ (1 - q / 2 + 1)) * (X ^ (1 / p)) ^ q := mul_le_mul' (mul_le_mul' le_rfl (lintegral_brsRadiusWindow_rpow_le k (1 - q / 2))) le_rfl _ = ENNReal.ofReal (brsAZeroConst a q * T ^ (2 - q / p)) * X ^ (q / p) := by rw [hfactor, hNpq, ← ENNReal.ofReal_mul (by positivity), hconstid] /-- **(5.8) of BRS.** The `m = 0` terms of the near part sum to a bounded map into `L^q(r dr)`, provided `p > 2` (so that the truncated kernel is in `L^{p'}`) and `q < 2p` (so that the dyadic series converges). -/ theorem brs_5_8 {a p q : ℝ} (hconj : a.HolderConjugate p) (ha2 : a < 2) (hq : 0 < q) (hq2p : q < 2 * p) {G : ℝ → ℂ} (hG : Measurable G) : (∫⁻ r : ℝ, (∑' k : ℕ, brsAZero k G r) ^ q * ENNReal.ofReal r) ≤ ENNReal.ofReal (brsAZeroConst a q / (1 - (2 : ℝ) ^ (-(2 - q / p)))) * (∫⁻ z : ℝ, ‖G z‖ₑ ^ p) ^ (q / p) := by have hp0 : (0 : ℝ) < p := hconj.symm.pos set θ : ℝ := 2 - q / p with hθdef have hθ : 0 < θ := by have hqp : q / p < 2 := by rw [div_lt_iff₀ hp0] linarith rw [hθdef] linarith set x : ℝ := (2 : ℝ) ^ (-θ) with hx have hxpos : 0 < x := Real.rpow_pos_of_pos (by norm_num) _ have hx1 : x < 1 := by rw [hx, show (1 : ℝ) = (2 : ℝ) ^ (0 : ℝ) by norm_num] exact Real.rpow_lt_rpow_of_exponent_lt (by norm_num) (by linarith) set X : ENNReal := ∫⁻ z : ℝ, ‖G z‖ₑ ^ p with hX have hmeasind : ∀ k : ℕ, Measurable fun r : ℝ => (brsRadiusWindow k).indicator (fun r => ENNReal.ofReal (r ^ (1 - q / 2))) r := by intro k refine Measurable.indicator ?_ (measurableSet_brsRadiusWindow k) fun_prop have hpt : ∀ r : ℝ, (∑' k : ℕ, brsAZero k G r) ^ q * ENNReal.ofReal r ≤ ∑' k : ℕ, ((brsTruncNorm k a * X ^ (1 / p)) ^ q * (brsRadiusWindow k).indicator (fun r => ENNReal.ofReal (r ^ (1 - q / 2))) r) := by intro r rw [tsum_brsAZero_rpow hq, ← ENNReal.tsum_mul_right] exact ENNReal.tsum_le_tsum fun k => brsAZero_rpow_mul_le hconj ha2 hq hG r have hgeom : (∑' k : ℕ, ENNReal.ofReal (brsAZeroConst a q * ((2 : ℝ) ^ (-(k : ℝ))) ^ θ)) ≤ ENNReal.ofReal (brsAZeroConst a q / (1 - x)) := by have hterm : ∀ k : ℕ, ENNReal.ofReal (brsAZeroConst a q * ((2 : ℝ) ^ (-(k : ℝ))) ^ θ) = ENNReal.ofReal (brsAZeroConst a q) * ENNReal.ofReal x ^ k := by intro k rw [ENNReal.ofReal_mul (brsAZeroConst_pos ha2).le] congr 1 rw [← ENNReal.ofReal_pow hxpos.le] congr 1 rw [hx, ← Real.rpow_natCast ((2 : ℝ) ^ (-θ)) k, ← Real.rpow_mul (by norm_num : (0 : ℝ) ≤ 2), ← Real.rpow_mul (by norm_num : (0 : ℝ) ≤ 2)] congr 1 ring rw [tsum_congr hterm, ENNReal.tsum_mul_left, tsum_geometric] have hsub : (1 : ENNReal) - ENNReal.ofReal x = ENNReal.ofReal (1 - x) := by rw [ENNReal.ofReal_sub _ hxpos.le, ENNReal.ofReal_one] rw [hsub, ← ENNReal.ofReal_inv_of_pos (by linarith), ← ENNReal.ofReal_mul (brsAZeroConst_pos ha2).le] rw [div_eq_mul_inv] calc (∫⁻ r : ℝ, (∑' k : ℕ, brsAZero k G r) ^ q * ENNReal.ofReal r) ≤ ∫⁻ r : ℝ, ∑' k : ℕ, ((brsTruncNorm k a * X ^ (1 / p)) ^ q * (brsRadiusWindow k).indicator (fun r => ENNReal.ofReal (r ^ (1 - q / 2))) r) := lintegral_mono hpt _ = ∑' k : ℕ, ∫⁻ r : ℝ, ((brsTruncNorm k a * X ^ (1 / p)) ^ q * (brsRadiusWindow k).indicator (fun r => ENNReal.ofReal (r ^ (1 - q / 2))) r) := lintegral_tsum fun k => ((hmeasind k).const_mul _).aemeasurable _ = ∑' k : ℕ, ((brsTruncNorm k a * X ^ (1 / p)) ^ q * ∫⁻ r in brsRadiusWindow k, ENNReal.ofReal (r ^ (1 - q / 2))) := by refine tsum_congr fun k => ?_ rw [lintegral_const_mul _ (hmeasind k), lintegral_indicator (measurableSet_brsRadiusWindow k)] _ ≤ ∑' k : ℕ, (ENNReal.ofReal (brsAZeroConst a q * ((2 : ℝ) ^ (-(k : ℝ))) ^ θ) * X ^ (q / p)) := ENNReal.tsum_le_tsum fun k => brsAZero_scale_bound hconj ha2 hq X _ = (∑' k : ℕ, ENNReal.ofReal (brsAZeroConst a q * ((2 : ℝ) ^ (-(k : ℝ))) ^ θ)) * X ^ (q / p) := ENNReal.tsum_mul_right _ ≤ ENNReal.ofReal (brsAZeroConst a q / (1 - x)) * X ^ (q / p) := mul_le_mul' hgeom le_rfl /-! ## The truncated kernel near its singularity For the terms `𝒜_{k,m}` with `m ≥ 1` the bump `υ_{k+m}` lives at the scale `δ = 2^{-k-m}`, which is much smaller than the truncation scale `2^{-k}`. Near the singularity there is no cancellation to exploit and the only bound is the local `L¹` norm of the kernel, which is `2√δ`. -/ /-- The local `L¹` norm of the truncated kernel. The worst case is an interval starting at the singularity. -/ theorem lintegral_brsTruncKernel_Ioc_le (k : ℕ) (a : ℝ) {b : ℝ} (hb : 0 < b) : (∫⁻ u in Ioc a b, ENNReal.ofReal (brsTruncKernel k u)) ≤ ENNReal.ofReal (2 * Real.sqrt b) := by have hpt : ∀ u : ℝ, (Ioc a b).indicator (fun u => ENNReal.ofReal (brsTruncKernel k u)) u ≤ (Ioc (0 : ℝ) b).indicator (fun u => ENNReal.ofReal (u ^ (-(1 / 2) : ℝ))) u := by intro u by_cases hu : u ∈ Ioc a b · rw [Set.indicator_of_mem hu] by_cases hupos : 0 < u · rw [Set.indicator_of_mem (show u ∈ Ioc (0 : ℝ) b from ⟨hupos, hu.2⟩)] refine ENNReal.ofReal_le_ofReal ?_ rw [brsTruncKernel] by_cases hw : u ∈ Ioc (0 : ℝ) ((2 : ℝ) ^ (-(k : ℝ))) · rw [Set.indicator_of_mem hw] · rw [Set.indicator_of_notMem hw] exact Real.rpow_nonneg hupos.le _ · have hzero : brsTruncKernel k u = 0 := by rw [brsTruncKernel] refine Set.indicator_of_notMem ?_ _ exact fun hc => hupos hc.1 rw [hzero, ENNReal.ofReal_zero] exact zero_le · rw [Set.indicator_of_notMem hu] exact zero_le calc (∫⁻ u in Ioc a b, ENNReal.ofReal (brsTruncKernel k u)) = ∫⁻ u : ℝ, (Ioc a b).indicator (fun u => ENNReal.ofReal (brsTruncKernel k u)) u := (lintegral_indicator measurableSet_Ioc _).symm _ ≤ ∫⁻ u : ℝ, (Ioc (0 : ℝ) b).indicator (fun u => ENNReal.ofReal (u ^ (-(1 / 2) : ℝ))) u := lintegral_mono hpt _ = ∫⁻ u in Ioc (0 : ℝ) b, ENNReal.ofReal (u ^ (-(1 / 2) : ℝ)) := lintegral_indicator measurableSet_Ioc _ _ = ∫⁻ u in Ioo (0 : ℝ) b, ENNReal.ofReal (u ^ (-(1 / 2) : ℝ)) := (setLIntegral_congr (Ioo_ae_eq_Ioc (a := (0 : ℝ)) (b := b))).symm _ = ENNReal.ofReal (b ^ (-(1 / 2) + 1 : ℝ) / (-(1 / 2) + 1 : ℝ)) := lintegral_Ioo_rpow (by norm_num) hb _ = ENNReal.ofReal (2 * Real.sqrt b) := by congr 1 rw [Real.sqrt_eq_rpow, show (-(1 / 2) + 1 : ℝ) = 1 / 2 by norm_num] ring /-- **The crude bound near the singularity.** A bump of height `M` supported in `[-δ, δ]` tested against the truncated kernel is controlled by the local `L¹` norm of the kernel. -/ theorem enorm_integral_brsTruncKernel_mul_le {k : ℕ} {δ M : ℝ} {ψ : ℝ → ℝ} (hsupp : ∀ y : ℝ, δ < |y| → ψ y = 0) (hbd : ∀ y : ℝ, |ψ y| ≤ M) (x : ℝ) : ‖∫ y : ℝ, ((brsTruncKernel k (x - y) : ℝ) : ℂ) * (ψ y : ℂ)‖ₑ ≤ ENNReal.ofReal M * ∫⁻ u in Icc (x - δ) (x + δ), ENNReal.ofReal (brsTruncKernel k u) := by set F : ℝ → ENNReal := fun u => (Icc (x - δ) (x + δ)).indicator (fun u => ENNReal.ofReal (brsTruncKernel k u)) u with hF have hMnn : 0 ≤ M := le_trans (abs_nonneg (ψ 0)) (hbd 0) have hpt : ∀ y : ℝ, ‖((brsTruncKernel k (x - y) : ℝ) : ℂ) * (ψ y : ℂ)‖ₑ ≤ ENNReal.ofReal M * F (x - y) := by intro y have hnorm : ‖((brsTruncKernel k (x - y) : ℝ) : ℂ) * (ψ y : ℂ)‖ₑ = ENNReal.ofReal (brsTruncKernel k (x - y)) * ENNReal.ofReal |ψ y| := by rw [enorm_mul, ← ofReal_norm, Complex.norm_real, Real.norm_of_nonneg (brsTruncKernel_nonneg k (x - y)), ← ofReal_norm, Complex.norm_real, Real.norm_eq_abs] rw [hnorm] by_cases hy : |y| ≤ δ · have hmem : x - y ∈ Icc (x - δ) (x + δ) := by have := abs_le.mp hy exact ⟨by linarith [this.2], by linarith [this.1]⟩ rw [hF] simp only rw [Set.indicator_of_mem hmem, mul_comm (ENNReal.ofReal M)] exact mul_le_mul' le_rfl (ENNReal.ofReal_le_ofReal (hbd y)) · have hzero : ψ y = 0 := hsupp y (lt_of_not_ge hy) rw [hzero, abs_zero, ENNReal.ofReal_zero, mul_zero] exact zero_le calc ‖∫ y : ℝ, ((brsTruncKernel k (x - y) : ℝ) : ℂ) * (ψ y : ℂ)‖ₑ ≤ ∫⁻ y : ℝ, ‖((brsTruncKernel k (x - y) : ℝ) : ℂ) * (ψ y : ℂ)‖ₑ := enorm_integral_le_lintegral_enorm _ _ ≤ ∫⁻ y : ℝ, ENNReal.ofReal M * F (x - y) := lintegral_mono hpt _ = ENNReal.ofReal M * ∫⁻ y : ℝ, F (x - y) := by rw [lintegral_const_mul' _ _ ENNReal.ofReal_ne_top] _ = ENNReal.ofReal M * ∫⁻ u : ℝ, F u := by rw [lintegral_sub_left_eq_self F x] _ = ENNReal.ofReal M * ∫⁻ u in Icc (x - δ) (x + δ), ENNReal.ofReal (brsTruncKernel k u) := by rw [hF, lintegral_indicator measurableSet_Icc] /-! ## The two regimes of the kernel `h_k * υ` -/ /-- **The bound near the singularity.** On `x ≤ δ` there is no cancellation to exploit and the size of the kernel is `δ^{-1/2}` times the `L¹` mass of the bump: the height `M` of a bump at scale `δ` is `δ^{-1}`, and the local `L¹` norm of the kernel is `2√(2δ)`. -/ theorem enorm_integral_brsTruncKernel_mul_le_near {k : ℕ} {δ M : ℝ} {ψ : ℝ → ℝ} (hsupp : ∀ y : ℝ, δ < |y| → ψ y = 0) (hbd : ∀ y : ℝ, |ψ y| ≤ M) {x : ℝ} (hx0 : 0 < x + δ) (hx : x ≤ δ) : ‖∫ y : ℝ, ((brsTruncKernel k (x - y) : ℝ) : ℂ) * (ψ y : ℂ)‖ₑ ≤ ENNReal.ofReal (M * (2 * Real.sqrt (2 * δ))) := by have hMnn : 0 ≤ M := le_trans (abs_nonneg (ψ 0)) (hbd 0) have hloc : (∫⁻ u in Icc (x - δ) (x + δ), ENNReal.ofReal (brsTruncKernel k u)) ≤ ENNReal.ofReal (2 * Real.sqrt (2 * δ)) := by calc (∫⁻ u in Icc (x - δ) (x + δ), ENNReal.ofReal (brsTruncKernel k u)) = ∫⁻ u in Ioc (x - δ) (x + δ), ENNReal.ofReal (brsTruncKernel k u) := (setLIntegral_congr (Ioc_ae_eq_Icc (a := x - δ) (b := x + δ))).symm _ ≤ ENNReal.ofReal (2 * Real.sqrt (x + δ)) := lintegral_brsTruncKernel_Ioc_le k _ hx0 _ ≤ ENNReal.ofReal (2 * Real.sqrt (2 * δ)) := by refine ENNReal.ofReal_le_ofReal ?_ have : Real.sqrt (x + δ) ≤ Real.sqrt (2 * δ) := Real.sqrt_le_sqrt (by linarith) linarith calc ‖∫ y : ℝ, ((brsTruncKernel k (x - y) : ℝ) : ℂ) * (ψ y : ℂ)‖ₑ ≤ ENNReal.ofReal M * ∫⁻ u in Icc (x - δ) (x + δ), ENNReal.ofReal (brsTruncKernel k u) := enorm_integral_brsTruncKernel_mul_le hsupp hbd x _ ≤ ENNReal.ofReal M * ENNReal.ofReal (2 * Real.sqrt (2 * δ)) := mul_le_mul' le_rfl hloc _ = ENNReal.ofReal (M * (2 * Real.sqrt (2 * δ))) := (ENNReal.ofReal_mul hMnn).symm /-- **Removing the truncation in the bulk.** If the window `[x-δ, x+δ]` lies inside `(0, 2^{-k}]`, the truncated kernel agrees with `u^{-1/2}` there, so the cancellation estimate `brs_kernel_cancellation` applies verbatim. -/ theorem integral_brsTruncKernel_mul_eq {k : ℕ} {δ : ℝ} {ψ : ℝ → ℝ} (hsupp : ∀ y : ℝ, δ < |y| → ψ y = 0) {x : ℝ} (h1 : δ < x) (h2 : x + δ ≤ (2 : ℝ) ^ (-(k : ℝ))) : (∫ y : ℝ, ((brsTruncKernel k (x - y) : ℝ) : ℂ) * (ψ y : ℂ)) = ∫ y : ℝ, (((x - y) ^ (-(1 / 2) : ℝ) : ℝ) : ℂ) * (ψ y : ℂ) := by congr 1 funext y by_cases hy : |y| ≤ δ · have hyb := abs_le.mp hy have hmem : x - y ∈ Ioc (0 : ℝ) ((2 : ℝ) ^ (-(k : ℝ))) := by refine ⟨by linarith [hyb.2], by linarith [hyb.1]⟩ have hval : brsTruncKernel k (x - y) = (x - y) ^ (-(1 / 2) : ℝ) := by rw [brsTruncKernel, Set.indicator_of_mem hmem] rw [hval] · have hzero : ψ y = 0 := hsupp y (lt_of_not_ge hy) rw [hzero] simp /-! ## The bulk and the far edge -/ /-- Away from the singularity the truncated kernel is bounded. -/ theorem brsTruncKernel_le_of_ge {k : ℕ} {c u : ℝ} (hc : 0 < c) (hu : c ≤ u) : brsTruncKernel k u ≤ c ^ (-(1 / 2) : ℝ) := by rw [brsTruncKernel] by_cases hw : u ∈ Ioc (0 : ℝ) ((2 : ℝ) ^ (-(k : ℝ))) · rw [Set.indicator_of_mem hw] exact Real.rpow_le_rpow_of_nonpos hc hu (by norm_num) · rw [Set.indicator_of_notMem hw] exact Real.rpow_nonneg hc.le _ /-- **The bound by the sup of the kernel.** Useful at the far edge of the truncation, where the kernel is bounded but the bump has no cancellation to exploit against a smooth factor. -/ theorem enorm_integral_brsTruncKernel_mul_le_sup {k : ℕ} {δ S : ℝ} {x : ℝ} {ψ : ℝ → ℝ} (hsupp : ∀ y : ℝ, δ < |y| → ψ y = 0) (hS : ∀ u ∈ Icc (x - δ) (x + δ), brsTruncKernel k u ≤ S) : ‖∫ y : ℝ, ((brsTruncKernel k (x - y) : ℝ) : ℂ) * (ψ y : ℂ)‖ₑ ≤ ENNReal.ofReal S * ∫⁻ y : ℝ, ENNReal.ofReal |ψ y| := by have hpt : ∀ y : ℝ, ‖((brsTruncKernel k (x - y) : ℝ) : ℂ) * (ψ y : ℂ)‖ₑ ≤ ENNReal.ofReal S * ENNReal.ofReal |ψ y| := by intro y have hnorm : ‖((brsTruncKernel k (x - y) : ℝ) : ℂ) * (ψ y : ℂ)‖ₑ = ENNReal.ofReal (brsTruncKernel k (x - y)) * ENNReal.ofReal |ψ y| := by rw [enorm_mul, ← ofReal_norm, Complex.norm_real, Real.norm_of_nonneg (brsTruncKernel_nonneg k (x - y)), ← ofReal_norm, Complex.norm_real, Real.norm_eq_abs] rw [hnorm] by_cases hy : |y| ≤ δ · have hyb := abs_le.mp hy have hmem : x - y ∈ Icc (x - δ) (x + δ) := ⟨by linarith [hyb.2], by linarith [hyb.1]⟩ exact mul_le_mul' (ENNReal.ofReal_le_ofReal (hS _ hmem)) le_rfl · have hzero : ψ y = 0 := hsupp y (lt_of_not_ge hy) rw [hzero, abs_zero, ENNReal.ofReal_zero, mul_zero] exact zero_le calc ‖∫ y : ℝ, ((brsTruncKernel k (x - y) : ℝ) : ℂ) * (ψ y : ℂ)‖ₑ ≤ ∫⁻ y : ℝ, ‖((brsTruncKernel k (x - y) : ℝ) : ℂ) * (ψ y : ℂ)‖ₑ := enorm_integral_le_lintegral_enorm _ _ ≤ ∫⁻ y : ℝ, ENNReal.ofReal S * ENNReal.ofReal |ψ y| := lintegral_mono hpt _ = ENNReal.ofReal S * ∫⁻ y : ℝ, ENNReal.ofReal |ψ y| := lintegral_const_mul' _ _ ENNReal.ofReal_ne_top /-- **The bulk bound.** Inside the truncation window the vanishing moments of the bump gain a factor `δ^{N+1}` against the singular kernel. -/ theorem norm_integral_brsTruncKernel_mul_le_bulk {k : ℕ} {δ : ℝ} {ψ : ℝ → ℝ} (hψ : Continuous ψ) (hδ : 0 < δ) (hsupp : ∀ y : ℝ, δ < |y| → ψ y = 0) {N : ℕ} (hmom : ∀ i : ℕ, i < N + 1 → (∫ y : ℝ, y ^ i * ψ y) = 0) {x : ℝ} (h1 : δ < x) (h2 : x + δ ≤ (2 : ℝ) ^ (-(k : ℝ))) : ‖∫ y : ℝ, ((brsTruncKernel k (x - y) : ℝ) : ℂ) * (ψ y : ℂ)‖ ≤ ((∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ))) * (x - δ) ^ (-(1 / 2) - ((N : ℝ) + 1)) / (Nat.factorial (N + 1) : ℝ)) * δ ^ (N + 1) * ∫ y : ℝ, |ψ y| := by rw [integral_brsTruncKernel_mul_eq hsupp h1 h2] exact brs_kernel_cancellation hψ hδ h1 hsupp hmom /-! ## The support of the kernel, and a shifted tail integral -/ /-- The kernel `h_k * ψ` is supported in `(-δ, 2^{-k} + δ]`. -/ theorem integral_brsTruncKernel_mul_eq_zero {k : ℕ} {δ : ℝ} {ψ : ℝ → ℝ} (hsupp : ∀ y : ℝ, δ < |y| → ψ y = 0) {x : ℝ} (hx : x ∉ Ioc (-δ) ((2 : ℝ) ^ (-(k : ℝ)) + δ)) : (∫ y : ℝ, ((brsTruncKernel k (x - y) : ℝ) : ℂ) * (ψ y : ℂ)) = 0 := by have hcase : x ≤ -δ ∨ (2 : ℝ) ^ (-(k : ℝ)) + δ < x := by by_contra hc simp only [not_or, not_le, not_lt] at hc exact hx ⟨hc.1, hc.2⟩ have hzero : ∀ y : ℝ, ((brsTruncKernel k (x - y) : ℝ) : ℂ) * (ψ y : ℂ) = 0 := by intro y by_cases hy : δ < |y| · rw [hsupp y hy] simp · have hyb := abs_le.mp (not_lt.mp hy) have hk : brsTruncKernel k (x - y) = 0 := by rw [brsTruncKernel] refine Set.indicator_of_notMem ?_ _ rcases hcase with h | h · exact fun hc => absurd hc.1 (by simp only [not_lt]; linarith [hyb.1]) · exact fun hc => absurd hc.2 (by simp only [not_le]; linarith [hyb.2]) rw [hk] simp rw [integral_congr_ae (Filter.Eventually.of_forall hzero), integral_zero] /-- The tail integral of a shifted power. -/ theorem lintegral_Ioi_shift_rpow {c e t : ℝ} (hce : e < c) (ht : t < -1) : (∫⁻ x in Ioi c, ENNReal.ofReal ((x - e) ^ t)) = ENNReal.ofReal (-(c - e) ^ (t + 1) / (t + 1)) := by set F : ℝ → ENNReal := fun u => (Ioi (c - e)).indicator (fun u => ENNReal.ofReal (u ^ t)) u with hF have hshift : ∀ x : ℝ, (Ioi c).indicator (fun x => ENNReal.ofReal ((x - e) ^ t)) x = F (x - e) := by intro x by_cases hx : x ∈ Ioi c · have hx' : c < x := hx rw [Set.indicator_of_mem hx, hF] simp only rw [Set.indicator_of_mem (show x - e ∈ Ioi (c - e) by simp only [mem_Ioi]; linarith)] · have hx' : x ≤ c := by simp only [mem_Ioi, not_lt] at hx exact hx rw [Set.indicator_of_notMem hx, hF] simp only rw [Set.indicator_of_notMem (show x - e ∉ Ioi (c - e) by simp only [mem_Ioi, not_lt]; linarith)] calc (∫⁻ x in Ioi c, ENNReal.ofReal ((x - e) ^ t)) = ∫⁻ x : ℝ, (Ioi c).indicator (fun x => ENNReal.ofReal ((x - e) ^ t)) x := (lintegral_indicator measurableSet_Ioi _).symm _ = ∫⁻ x : ℝ, F (x - e) := lintegral_congr hshift _ = ∫⁻ u : ℝ, F u := lintegral_sub_right_eq_self F e _ = ∫⁻ u in Ioi (c - e), ENNReal.ofReal (u ^ t) := by rw [hF, lintegral_indicator measurableSet_Ioi] _ = ENNReal.ofReal (-(c - e) ^ (t + 1) / (t + 1)) := lintegral_Ioi_rpow ht (by linarith) /-! ## Splitting a compactly supported integral into three windows -/ /-- A function vanishing outside `(a, d]` has its integral bounded by the sum of the integrals over three consecutive windows. -/ theorem lintegral_le_three_regions {F : ℝ → ENNReal} {a b c d : ℝ} (hab : a ≤ b) (hbc : b ≤ c) (hcd : c ≤ d) (hzero : ∀ x : ℝ, x ∉ Ioc a d → F x = 0) : (∫⁻ x : ℝ, F x) ≤ (∫⁻ x in Ioc a b, F x) + (∫⁻ x in Ioc b c, F x) + ∫⁻ x in Ioc c d, F x := by have hfull : (∫⁻ x : ℝ, F x) = ∫⁻ x in Ioc a d, F x := by rw [← lintegral_indicator measurableSet_Ioc] refine lintegral_congr fun x => ?_ by_cases hx : x ∈ Ioc a d · rw [Set.indicator_of_mem hx] · rw [Set.indicator_of_notMem hx, hzero x hx] have hsplit : Ioc a d = (Ioc a b ∪ Ioc b c) ∪ Ioc c d := by rw [Ioc_union_Ioc_eq_Ioc hab hbc, Ioc_union_Ioc_eq_Ioc (hab.trans hbc) hcd] rw [hfull, hsplit] refine le_trans (lintegral_union_le F _ _) ?_ exact add_le_add (lintegral_union_le F _ _) le_rfl /-- The kernel `h_k * ψ` of BRS (5.11). -/ def brsTruncConv (k : ℕ) (ψ : ℝ → ℝ) (x : ℝ) : ℂ := ∫ y : ℝ, ((brsTruncKernel k (x - y) : ℝ) : ℂ) * (ψ y : ℂ) theorem brsTruncConv_eq_zero {k : ℕ} {δ : ℝ} {ψ : ℝ → ℝ} (hsupp : ∀ y : ℝ, δ < |y| → ψ y = 0) {x : ℝ} (hx : x ∉ Ioc (-δ) ((2 : ℝ) ^ (-(k : ℝ)) + δ)) : brsTruncConv k ψ x = 0 := integral_brsTruncKernel_mul_eq_zero hsupp hx /-! ## The three pointwise regimes of `h_k * ψ` -/ /-- Near the singularity: the local `L¹` norm of the kernel on a window of length `B` starting at the singularity is `2√B`. -/ theorem enorm_brsTruncConv_le_near {k : ℕ} {δ M B : ℝ} {ψ : ℝ → ℝ} (hsupp : ∀ y : ℝ, δ < |y| → ψ y = 0) (hbd : ∀ y : ℝ, |ψ y| ≤ M) {x : ℝ} (hx0 : 0 < x + δ) (hxB : x + δ ≤ B) : ‖brsTruncConv k ψ x‖ₑ ≤ ENNReal.ofReal (M * (2 * Real.sqrt B)) := by have hMnn : 0 ≤ M := le_trans (abs_nonneg (ψ 0)) (hbd 0) have hloc : (∫⁻ u in Icc (x - δ) (x + δ), ENNReal.ofReal (brsTruncKernel k u)) ≤ ENNReal.ofReal (2 * Real.sqrt B) := by calc (∫⁻ u in Icc (x - δ) (x + δ), ENNReal.ofReal (brsTruncKernel k u)) = ∫⁻ u in Ioc (x - δ) (x + δ), ENNReal.ofReal (brsTruncKernel k u) := (setLIntegral_congr (Ioc_ae_eq_Icc (a := x - δ) (b := x + δ))).symm _ ≤ ENNReal.ofReal (2 * Real.sqrt (x + δ)) := lintegral_brsTruncKernel_Ioc_le k _ hx0 _ ≤ ENNReal.ofReal (2 * Real.sqrt B) := by refine ENNReal.ofReal_le_ofReal ?_ have : Real.sqrt (x + δ) ≤ Real.sqrt B := Real.sqrt_le_sqrt hxB linarith calc ‖brsTruncConv k ψ x‖ₑ ≤ ENNReal.ofReal M * ∫⁻ u in Icc (x - δ) (x + δ), ENNReal.ofReal (brsTruncKernel k u) := enorm_integral_brsTruncKernel_mul_le hsupp hbd x _ ≤ ENNReal.ofReal M * ENNReal.ofReal (2 * Real.sqrt B) := mul_le_mul' le_rfl hloc _ = ENNReal.ofReal (M * (2 * Real.sqrt B)) := (ENNReal.ofReal_mul hMnn).symm /-- In the bulk: the vanishing moments give the factor `δ^{N+1}`. -/ theorem enorm_brsTruncConv_le_bulk {k : ℕ} {δ A : ℝ} {ψ : ℝ → ℝ} (hψ : Continuous ψ) (hδ : 0 < δ) (hsupp : ∀ y : ℝ, δ < |y| → ψ y = 0) (hA : (∫ y : ℝ, |ψ y|) ≤ A) {N : ℕ} (hmom : ∀ i : ℕ, i < N + 1 → (∫ y : ℝ, y ^ i * ψ y) = 0) {x : ℝ} (h1 : δ < x) (h2 : x + δ ≤ (2 : ℝ) ^ (-(k : ℝ))) : ‖brsTruncConv k ψ x‖ₑ ≤ ENNReal.ofReal ((∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ))) / (Nat.factorial (N + 1) : ℝ) * δ ^ (N + 1) * A * (x - δ) ^ (-(1 / 2) - ((N : ℝ) + 1))) := by have hxδ : 0 < x - δ := by linarith have hPnn : (0 : ℝ) ≤ ∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ)) := by refine Finset.prod_nonneg fun i _ => ?_ have : (0 : ℝ) ≤ (i : ℝ) := Nat.cast_nonneg i linarith have hIntnn : (0 : ℝ) ≤ ∫ y : ℝ, |ψ y| := by refine integral_nonneg fun y => abs_nonneg _ have hbase := norm_integral_brsTruncKernel_mul_le_bulk hψ hδ hsupp hmom h1 h2 rw [← ofReal_norm] refine ENNReal.ofReal_le_ofReal (le_trans hbase ?_) have hfac : (0 : ℝ) ≤ (∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ))) * (x - δ) ^ (-(1 / 2) - ((N : ℝ) + 1)) / (Nat.factorial (N + 1) : ℝ) * δ ^ (N + 1) := by have h1' : (0 : ℝ) ≤ (x - δ) ^ (-(1 / 2) - ((N : ℝ) + 1)) := Real.rpow_nonneg hxδ.le _ have h2' : (0 : ℝ) ≤ δ ^ (N + 1) := by positivity have h3' : (0 : ℝ) < (Nat.factorial (N + 1) : ℝ) := by exact_mod_cast Nat.factorial_pos (N + 1) positivity calc (∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ))) * (x - δ) ^ (-(1 / 2) - ((N : ℝ) + 1)) / (Nat.factorial (N + 1) : ℝ) * δ ^ (N + 1) * ∫ y : ℝ, |ψ y| ≤ (∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ))) * (x - δ) ^ (-(1 / 2) - ((N : ℝ) + 1)) / (Nat.factorial (N + 1) : ℝ) * δ ^ (N + 1) * A := mul_le_mul_of_nonneg_left hA hfac _ = (∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ))) / (Nat.factorial (N + 1) : ℝ) * δ ^ (N + 1) * A * (x - δ) ^ (-(1 / 2) - ((N : ℝ) + 1)) := by ring /-- At the far edge of the truncation the kernel is bounded by `S`. -/ theorem enorm_brsTruncConv_le_far {k : ℕ} {δ S A : ℝ} {x : ℝ} {ψ : ℝ → ℝ} (hsupp : ∀ y : ℝ, δ < |y| → ψ y = 0) (hSnn : 0 ≤ S) (hS : ∀ u ∈ Icc (x - δ) (x + δ), brsTruncKernel k u ≤ S) (hA : (∫⁻ y : ℝ, ENNReal.ofReal |ψ y|) ≤ ENNReal.ofReal A) : ‖brsTruncConv k ψ x‖ₑ ≤ ENNReal.ofReal (S * A) := by calc ‖brsTruncConv k ψ x‖ₑ ≤ ENNReal.ofReal S * ∫⁻ y : ℝ, ENNReal.ofReal |ψ y| := enorm_integral_brsTruncKernel_mul_le_sup hsupp hS _ ≤ ENNReal.ofReal S * ENNReal.ofReal A := mul_le_mul' le_rfl hA _ = ENNReal.ofReal (S * A) := (ENNReal.ofReal_mul hSnn).symm /-! ## The `L^r` mass of `h_k * ψ` on each of the three windows -/ /-- The constant of the bulk estimate. -/ def brsBulkConst (δ A : ℝ) (N : ℕ) : ℝ := (∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ))) / (Nat.factorial (N + 1) : ℝ) * δ ^ (N + 1) * A theorem brsBulkConst_nonneg {δ A : ℝ} (hδ : 0 ≤ δ) (hA : 0 ≤ A) (N : ℕ) : 0 ≤ brsBulkConst δ A N := by rw [brsBulkConst] have h1 : (0 : ℝ) ≤ ∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ)) := by refine Finset.prod_nonneg fun i _ => ?_ have : (0 : ℝ) ≤ (i : ℝ) := Nat.cast_nonneg i linarith have h2 : (0 : ℝ) < (Nat.factorial (N + 1) : ℝ) := by exact_mod_cast Nat.factorial_pos (N + 1) positivity /-- Window one: `(-δ, 4δ]`, next to the singularity. -/ theorem lintegral_brsTruncConv_region_one_le {k : ℕ} {δ M r : ℝ} {ψ : ℝ → ℝ} (_hδ : 0 < δ) (hsupp : ∀ y : ℝ, δ < |y| → ψ y = 0) (hbd : ∀ y : ℝ, |ψ y| ≤ M) (hr : 0 < r) : (∫⁻ x in Ioc (-δ) (4 * δ), ‖brsTruncConv k ψ x‖ₑ ^ r) ≤ ENNReal.ofReal (M * (2 * Real.sqrt (5 * δ))) ^ r * ENNReal.ofReal (5 * δ) := by have hpt : ∀ x ∈ Ioc (-δ) (4 * δ), ‖brsTruncConv k ψ x‖ₑ ^ r ≤ ENNReal.ofReal (M * (2 * Real.sqrt (5 * δ))) ^ r := by intro x hx refine ENNReal.rpow_le_rpow ?_ hr.le exact enorm_brsTruncConv_le_near hsupp hbd (by linarith [hx.1]) (by linarith [hx.2]) calc (∫⁻ x in Ioc (-δ) (4 * δ), ‖brsTruncConv k ψ x‖ₑ ^ r) ≤ ∫⁻ _ in Ioc (-δ) (4 * δ), ENNReal.ofReal (M * (2 * Real.sqrt (5 * δ))) ^ r := setLIntegral_mono' measurableSet_Ioc hpt _ = ENNReal.ofReal (M * (2 * Real.sqrt (5 * δ))) ^ r * volume (Ioc (-δ) (4 * δ)) := setLIntegral_const _ _ _ = ENNReal.ofReal (M * (2 * Real.sqrt (5 * δ))) ^ r * ENNReal.ofReal (5 * δ) := by rw [Real.volume_Ioc, show (4 : ℝ) * δ - -δ = 5 * δ by ring] /-- Window two: the bulk `(4δ, 2^{-k} - δ]`. -/ theorem lintegral_brsTruncConv_region_two_le {k : ℕ} {δ A r : ℝ} {ψ : ℝ → ℝ} (hψ : Continuous ψ) (hδ : 0 < δ) (hsupp : ∀ y : ℝ, δ < |y| → ψ y = 0) (hA : (∫ y : ℝ, |ψ y|) ≤ A) (hAnn : 0 ≤ A) {N : ℕ} (hmom : ∀ i : ℕ, i < N + 1 → (∫ y : ℝ, y ^ i * ψ y) = 0) (hr : 1 ≤ r) : (∫⁻ x in Ioc (4 * δ) ((2 : ℝ) ^ (-(k : ℝ)) - δ), ‖brsTruncConv k ψ x‖ₑ ^ r) ≤ ENNReal.ofReal (brsBulkConst δ A N) ^ r * ENNReal.ofReal (-(3 * δ) ^ ((-(1 / 2) - ((N : ℝ) + 1)) * r + 1) / ((-(1 / 2) - ((N : ℝ) + 1)) * r + 1)) := by have hr0 : (0 : ℝ) < r := lt_of_lt_of_le zero_lt_one hr have hKnn : 0 ≤ brsBulkConst δ A N := brsBulkConst_nonneg hδ.le hAnn N have hNnn : (0 : ℝ) ≤ (N : ℝ) := Nat.cast_nonneg N have ht : (-(1 / 2) - ((N : ℝ) + 1)) * r < -1 := by nlinarith have hpt : ∀ x ∈ Ioc (4 * δ) ((2 : ℝ) ^ (-(k : ℝ)) - δ), ‖brsTruncConv k ψ x‖ₑ ^ r ≤ ENNReal.ofReal (brsBulkConst δ A N) ^ r * ENNReal.ofReal ((x - δ) ^ ((-(1 / 2) - ((N : ℝ) + 1)) * r)) := by intro x hx have hxδ : 0 < x - δ := by linarith [hx.1] have hb := enorm_brsTruncConv_le_bulk hψ hδ hsupp hA hmom (by linarith [hx.1] : δ < x) (by linarith [hx.2]) rw [show ((∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ))) / (Nat.factorial (N + 1) : ℝ) * δ ^ (N + 1) * A * (x - δ) ^ (-(1 / 2) - ((N : ℝ) + 1))) = brsBulkConst δ A N * (x - δ) ^ (-(1 / 2) - ((N : ℝ) + 1)) by rw [brsBulkConst], ENNReal.ofReal_mul hKnn] at hb calc ‖brsTruncConv k ψ x‖ₑ ^ r ≤ (ENNReal.ofReal (brsBulkConst δ A N) * ENNReal.ofReal ((x - δ) ^ (-(1 / 2) - ((N : ℝ) + 1)))) ^ r := ENNReal.rpow_le_rpow hb hr0.le _ = ENNReal.ofReal (brsBulkConst δ A N) ^ r * ENNReal.ofReal ((x - δ) ^ ((-(1 / 2) - ((N : ℝ) + 1)) * r)) := by rw [ENNReal.mul_rpow_of_nonneg _ _ hr0.le, ENNReal.ofReal_rpow_of_pos (Real.rpow_pos_of_pos hxδ _), ← Real.rpow_mul hxδ.le] calc (∫⁻ x in Ioc (4 * δ) ((2 : ℝ) ^ (-(k : ℝ)) - δ), ‖brsTruncConv k ψ x‖ₑ ^ r) ≤ ∫⁻ x in Ioc (4 * δ) ((2 : ℝ) ^ (-(k : ℝ)) - δ), ENNReal.ofReal (brsBulkConst δ A N) ^ r * ENNReal.ofReal ((x - δ) ^ ((-(1 / 2) - ((N : ℝ) + 1)) * r)) := setLIntegral_mono' measurableSet_Ioc hpt _ ≤ ∫⁻ x in Ioi (4 * δ), ENNReal.ofReal (brsBulkConst δ A N) ^ r * ENNReal.ofReal ((x - δ) ^ ((-(1 / 2) - ((N : ℝ) + 1)) * r)) := lintegral_mono_set Ioc_subset_Ioi_self _ = ENNReal.ofReal (brsBulkConst δ A N) ^ r * ∫⁻ x in Ioi (4 * δ), ENNReal.ofReal ((x - δ) ^ ((-(1 / 2) - ((N : ℝ) + 1)) * r)) := by rw [lintegral_const_mul' _ _ (ENNReal.rpow_ne_top_of_nonneg hr0.le ENNReal.ofReal_ne_top)] _ = ENNReal.ofReal (brsBulkConst δ A N) ^ r * ENNReal.ofReal (-(3 * δ) ^ ((-(1 / 2) - ((N : ℝ) + 1)) * r + 1) / ((-(1 / 2) - ((N : ℝ) + 1)) * r + 1)) := by rw [lintegral_Ioi_shift_rpow (by linarith) ht, show (4 : ℝ) * δ - δ = 3 * δ by ring] /-- Window three: the far edge `(2^{-k} - δ, 2^{-k} + δ]`. -/ theorem lintegral_brsTruncConv_region_three_le {k : ℕ} {δ A r : ℝ} {ψ : ℝ → ℝ} (hδ : 0 < δ) (h4δ : 4 * δ ≤ (2 : ℝ) ^ (-(k : ℝ))) (hsupp : ∀ y : ℝ, δ < |y| → ψ y = 0) (hAe : (∫⁻ y : ℝ, ENNReal.ofReal |ψ y|) ≤ ENNReal.ofReal A) (hr : 0 < r) : (∫⁻ x in Ioc ((2 : ℝ) ^ (-(k : ℝ)) - δ) ((2 : ℝ) ^ (-(k : ℝ)) + δ), ‖brsTruncConv k ψ x‖ₑ ^ r) ≤ ENNReal.ofReal ((2 * δ) ^ (-(1 / 2) : ℝ) * A) ^ r * ENNReal.ofReal (2 * δ) := by have hSnn : (0 : ℝ) ≤ (2 * δ) ^ (-(1 / 2) : ℝ) := Real.rpow_nonneg (by linarith) _ have hpt : ∀ x ∈ Ioc ((2 : ℝ) ^ (-(k : ℝ)) - δ) ((2 : ℝ) ^ (-(k : ℝ)) + δ), ‖brsTruncConv k ψ x‖ₑ ^ r ≤ ENNReal.ofReal ((2 * δ) ^ (-(1 / 2) : ℝ) * A) ^ r := by intro x hx refine ENNReal.rpow_le_rpow ?_ hr.le refine enorm_brsTruncConv_le_far hsupp hSnn ?_ hAe intro u hu exact brsTruncKernel_le_of_ge (by linarith) (by linarith [hu.1, hx.1]) calc (∫⁻ x in Ioc ((2 : ℝ) ^ (-(k : ℝ)) - δ) ((2 : ℝ) ^ (-(k : ℝ)) + δ), ‖brsTruncConv k ψ x‖ₑ ^ r) ≤ ∫⁻ _ in Ioc ((2 : ℝ) ^ (-(k : ℝ)) - δ) ((2 : ℝ) ^ (-(k : ℝ)) + δ), ENNReal.ofReal ((2 * δ) ^ (-(1 / 2) : ℝ) * A) ^ r := setLIntegral_mono' measurableSet_Ioc hpt _ = ENNReal.ofReal ((2 * δ) ^ (-(1 / 2) : ℝ) * A) ^ r * volume (Ioc ((2 : ℝ) ^ (-(k : ℝ)) - δ) ((2 : ℝ) ^ (-(k : ℝ)) + δ)) := setLIntegral_const _ _ _ = ENNReal.ofReal ((2 * δ) ^ (-(1 / 2) : ℝ) * A) ^ r * ENNReal.ofReal (2 * δ) := by rw [Real.volume_Ioc, show (2 : ℝ) ^ (-(k : ℝ)) + δ - ((2 : ℝ) ^ (-(k : ℝ)) - δ) = 2 * δ by ring] /-! ## (5.11): the `L^r` norm of the kernel `h_k * ψ` Assembling the three windows. All three contributions are of size `δ^{1 - r/2}` once `M` is the height `≈ δ^{-1}` of an `L¹`-normalised bump, so `‖h_k * ψ‖_r ≈ δ^{1/r - 1/2}`, which is BRS (5.12). -/ /-- **The `L^r` bound for `h_k * ψ`.** Here `δ` is the scale of the bump `ψ`, `M` bounds its height, `A` bounds its `L¹` norm, and `N + 1` is the number of vanishing moments. -/ theorem lintegral_enorm_brsTruncConv_rpow_le {k : ℕ} {δ M A r : ℝ} {ψ : ℝ → ℝ} (hψ : Continuous ψ) (hδ : 0 < δ) (h5δ : 5 * δ ≤ (2 : ℝ) ^ (-(k : ℝ))) (hsupp : ∀ y : ℝ, δ < |y| → ψ y = 0) (hbd : ∀ y : ℝ, |ψ y| ≤ M) (hA : (∫ y : ℝ, |ψ y|) ≤ A) (hAnn : 0 ≤ A) (hAe : (∫⁻ y : ℝ, ENNReal.ofReal |ψ y|) ≤ ENNReal.ofReal A) {N : ℕ} (hmom : ∀ i : ℕ, i < N + 1 → (∫ y : ℝ, y ^ i * ψ y) = 0) (hr : 1 ≤ r) : (∫⁻ x : ℝ, ‖brsTruncConv k ψ x‖ₑ ^ r) ≤ ENNReal.ofReal (M * (2 * Real.sqrt (5 * δ))) ^ r * ENNReal.ofReal (5 * δ) + ENNReal.ofReal (brsBulkConst δ A N) ^ r * ENNReal.ofReal (-(3 * δ) ^ ((-(1 / 2) - ((N : ℝ) + 1)) * r + 1) / ((-(1 / 2) - ((N : ℝ) + 1)) * r + 1)) + ENNReal.ofReal ((2 * δ) ^ (-(1 / 2) : ℝ) * A) ^ r * ENNReal.ofReal (2 * δ) := by have hr0 : (0 : ℝ) < r := lt_of_lt_of_le zero_lt_one hr have hzero : ∀ x : ℝ, x ∉ Ioc (-δ) ((2 : ℝ) ^ (-(k : ℝ)) + δ) → ‖brsTruncConv k ψ x‖ₑ ^ r = 0 := by intro x hx rw [brsTruncConv_eq_zero hsupp hx, enorm_zero, ENNReal.zero_rpow_of_pos hr0] refine le_trans (lintegral_le_three_regions (a := -δ) (b := 4 * δ) (c := (2 : ℝ) ^ (-(k : ℝ)) - δ) (d := (2 : ℝ) ^ (-(k : ℝ)) + δ) (by linarith) (by linarith) (by linarith) hzero) ?_ refine add_le_add (add_le_add ?_ ?_) ?_ · exact lintegral_brsTruncConv_region_one_le hδ hsupp hbd hr0 · exact lintegral_brsTruncConv_region_two_le hψ hδ hsupp hA hAnn hmom hr · exact lintegral_brsTruncConv_region_three_le hδ (by linarith) hsupp hAe hr0 /-! ## Normalising the three windows to a single power of `δ` -/ /-- The algebraic identity behind each of the three windows. -/ theorem rpow_mul_rpow_scale {δ c d β γ r : ℝ} (hδ : 0 < δ) (hc : 0 ≤ c) : (c * δ ^ β) ^ r * (d * δ ^ γ) = c ^ r * d * δ ^ (β * r + γ) := by rw [Real.mul_rpow hc (Real.rpow_nonneg hδ.le _), ← Real.rpow_mul hδ.le] rw [show c ^ r * δ ^ (β * r) * (d * δ ^ γ) = c ^ r * d * (δ ^ (β * r) * δ ^ γ) by ring, ← Real.rpow_add hδ] /-- Window one, normalised. -/ theorem brsTruncConv_window_one_le {δ M Mu r : ℝ} (hδ : 0 < δ) (hMnn : 0 ≤ M) (hMu : M * δ ≤ Mu) (hr : 0 < r) : ENNReal.ofReal (M * (2 * Real.sqrt (5 * δ))) ^ r * ENNReal.ofReal (5 * δ) ≤ ENNReal.ofReal (5 * (2 * Real.sqrt 5 * Mu) ^ r * δ ^ (1 - r / 2)) := by have hznn : 0 ≤ M * (2 * Real.sqrt (5 * δ)) := by positivity have hMunn : 0 ≤ Mu := le_trans (by positivity) hMu -- rewrite the window-one factor as `c * δ ^ (-1/2)` have hsq : Real.sqrt (5 * δ) = Real.sqrt 5 * δ ^ ((1 : ℝ) / 2) := by rw [Real.sqrt_mul (by norm_num), Real.sqrt_eq_rpow δ] have hhalf : δ ^ ((1 : ℝ) / 2) = δ ^ (-(1 / 2) : ℝ) * δ := by have h := Real.rpow_add hδ (-(1 / 2) : ℝ) 1 rw [Real.rpow_one] at h rw [← h] congr 1 norm_num have hz : M * (2 * Real.sqrt (5 * δ)) ≤ (2 * Real.sqrt 5 * Mu) * δ ^ (-(1 / 2) : ℝ) := by rw [hsq, hhalf] have hpos : (0 : ℝ) ≤ 2 * Real.sqrt 5 * δ ^ (-(1 / 2) : ℝ) := by have := Real.rpow_nonneg hδ.le (-(1 / 2) : ℝ) have h5 : (0 : ℝ) ≤ Real.sqrt 5 := Real.sqrt_nonneg 5 positivity calc M * (2 * (Real.sqrt 5 * (δ ^ (-(1 / 2) : ℝ) * δ))) = (2 * Real.sqrt 5 * δ ^ (-(1 / 2) : ℝ)) * (M * δ) := by ring _ ≤ (2 * Real.sqrt 5 * δ ^ (-(1 / 2) : ℝ)) * Mu := mul_le_mul_of_nonneg_left hMu hpos _ = 2 * Real.sqrt 5 * Mu * δ ^ (-(1 / 2) : ℝ) := by ring have hkey : (M * (2 * Real.sqrt (5 * δ))) ^ r * (5 * δ) ≤ 5 * (2 * Real.sqrt 5 * Mu) ^ r * δ ^ (1 - r / 2) := by have hstep : (M * (2 * Real.sqrt (5 * δ))) ^ r ≤ ((2 * Real.sqrt 5 * Mu) * δ ^ (-(1 / 2) : ℝ)) ^ r := Real.rpow_le_rpow hznn hz hr.le have hid : ((2 * Real.sqrt 5 * Mu) * δ ^ (-(1 / 2) : ℝ)) ^ r * (5 * δ ^ (1 : ℝ)) = (2 * Real.sqrt 5 * Mu) ^ r * 5 * δ ^ ((-(1 / 2) : ℝ) * r + 1) := rpow_mul_rpow_scale hδ (by positivity) rw [Real.rpow_one] at hid calc (M * (2 * Real.sqrt (5 * δ))) ^ r * (5 * δ) ≤ ((2 * Real.sqrt 5 * Mu) * δ ^ (-(1 / 2) : ℝ)) ^ r * (5 * δ) := mul_le_mul_of_nonneg_right hstep (by linarith) _ = (2 * Real.sqrt 5 * Mu) ^ r * 5 * δ ^ ((-(1 / 2) : ℝ) * r + 1) := hid _ = 5 * (2 * Real.sqrt 5 * Mu) ^ r * δ ^ (1 - r / 2) := by rw [show (-(1 / 2) : ℝ) * r + 1 = 1 - r / 2 by ring] ring calc ENNReal.ofReal (M * (2 * Real.sqrt (5 * δ))) ^ r * ENNReal.ofReal (5 * δ) = ENNReal.ofReal ((M * (2 * Real.sqrt (5 * δ))) ^ r * (5 * δ)) := by rw [ENNReal.ofReal_rpow_of_nonneg hznn hr.le, ← ENNReal.ofReal_mul (Real.rpow_nonneg hznn r)] _ ≤ ENNReal.ofReal (5 * (2 * Real.sqrt 5 * Mu) ^ r * δ ^ (1 - r / 2)) := ENNReal.ofReal_le_ofReal hkey /-- Window three, normalised. -/ theorem brsTruncConv_window_three_le {δ A r : ℝ} (hδ : 0 < δ) (hAnn : 0 ≤ A) (hr : 0 < r) : ENNReal.ofReal ((2 * δ) ^ (-(1 / 2) : ℝ) * A) ^ r * ENNReal.ofReal (2 * δ) = ENNReal.ofReal (2 * (A * (2 : ℝ) ^ (-(1 / 2) : ℝ)) ^ r * δ ^ (1 - r / 2)) := by have hcnn : (0 : ℝ) ≤ A * (2 : ℝ) ^ (-(1 / 2) : ℝ) := by have := Real.rpow_nonneg (by norm_num : (0 : ℝ) ≤ 2) (-(1 / 2) : ℝ) positivity have hsplit : (2 * δ) ^ (-(1 / 2) : ℝ) * A = (A * (2 : ℝ) ^ (-(1 / 2) : ℝ)) * δ ^ (-(1 / 2) : ℝ) := by rw [Real.mul_rpow (by norm_num) hδ.le] ring have hznn : (0 : ℝ) ≤ (2 * δ) ^ (-(1 / 2) : ℝ) * A := by have := Real.rpow_nonneg (by linarith : (0 : ℝ) ≤ 2 * δ) (-(1 / 2) : ℝ) positivity have hid : ((A * (2 : ℝ) ^ (-(1 / 2) : ℝ)) * δ ^ (-(1 / 2) : ℝ)) ^ r * (2 * δ ^ (1 : ℝ)) = (A * (2 : ℝ) ^ (-(1 / 2) : ℝ)) ^ r * 2 * δ ^ ((-(1 / 2) : ℝ) * r + 1) := rpow_mul_rpow_scale hδ hcnn rw [Real.rpow_one] at hid rw [ENNReal.ofReal_rpow_of_nonneg hznn hr.le, ← ENNReal.ofReal_mul (Real.rpow_nonneg hznn r)] congr 1 rw [hsplit, hid, show (-(1 / 2) : ℝ) * r + 1 = 1 - r / 2 by ring] ring /-- Window two, normalised. -/ theorem brsTruncConv_window_two_le {δ A r : ℝ} (hδ : 0 < δ) (hAnn : 0 ≤ A) (hr : 1 ≤ r) (N : ℕ) : ENNReal.ofReal (brsBulkConst δ A N) ^ r * ENNReal.ofReal (-(3 * δ) ^ ((-(1 / 2) - ((N : ℝ) + 1)) * r + 1) / ((-(1 / 2) - ((N : ℝ) + 1)) * r + 1)) = ENNReal.ofReal (((∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ))) / (Nat.factorial (N + 1) : ℝ) * A) ^ r * ((3 : ℝ) ^ ((-(1 / 2) - ((N : ℝ) + 1)) * r + 1) / -((-(1 / 2) - ((N : ℝ) + 1)) * r + 1)) * δ ^ (1 - r / 2)) := by have hr0 : (0 : ℝ) < r := lt_of_lt_of_le zero_lt_one hr have hNnn : (0 : ℝ) ≤ (N : ℝ) := Nat.cast_nonneg N set w : ℝ := (-(1 / 2) - ((N : ℝ) + 1)) * r + 1 with hw have hwneg : w < 0 := by rw [hw] nlinarith have hPnn : (0 : ℝ) ≤ ∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ)) := by refine Finset.prod_nonneg fun i _ => ?_ have : (0 : ℝ) ≤ (i : ℝ) := Nat.cast_nonneg i linarith have hfacpos : (0 : ℝ) < (Nat.factorial (N + 1) : ℝ) := by exact_mod_cast Nat.factorial_pos (N + 1) set c : ℝ := (∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ))) / (Nat.factorial (N + 1) : ℝ) * A with hc have hcnn : 0 ≤ c := by rw [hc] positivity have hKnn : 0 ≤ brsBulkConst δ A N := brsBulkConst_nonneg hδ.le hAnn N have hKform : brsBulkConst δ A N = c * δ ^ ((N : ℝ) + 1) := by rw [brsBulkConst, hc, show ((N : ℝ) + 1) = ((N + 1 : ℕ) : ℝ) by push_cast; ring, Real.rpow_natCast] ring have hdform : -(3 * δ) ^ w / w = ((3 : ℝ) ^ w / -w) * δ ^ w := by rw [Real.mul_rpow (by norm_num) hδ.le] field_simp have hid : (c * δ ^ ((N : ℝ) + 1)) ^ r * (((3 : ℝ) ^ w / -w) * δ ^ w) = c ^ r * ((3 : ℝ) ^ w / -w) * δ ^ (((N : ℝ) + 1) * r + w) := rpow_mul_rpow_scale hδ hcnn have hexp : ((N : ℝ) + 1) * r + w = 1 - r / 2 := by rw [hw] ring rw [ENNReal.ofReal_rpow_of_nonneg hKnn hr0.le, ← ENNReal.ofReal_mul (Real.rpow_nonneg hKnn r)] congr 1 rw [hKform, hdform, hid, hexp] /-! ## (5.12): the `L^r` norm of `h_k * ψ` is `δ^{1/r - 1/2}` -/ /-- The constant of BRS (5.12). Here `Mu` bounds `δ` times the height of the bump, `A` bounds its `L¹` norm, and `N + 1` is its number of vanishing moments. -/ def brsKernelConst (Mu A : ℝ) (N : ℕ) (r : ℝ) : ℝ := 5 * (2 * Real.sqrt 5 * Mu) ^ r + ((∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ))) / (Nat.factorial (N + 1) : ℝ) * A) ^ r * ((3 : ℝ) ^ ((-(1 / 2) - ((N : ℝ) + 1)) * r + 1) / -((-(1 / 2) - ((N : ℝ) + 1)) * r + 1)) + 2 * (A * (2 : ℝ) ^ (-(1 / 2) : ℝ)) ^ r /-- **BRS (5.12).** The `L^r` norm of `h_k * ψ` for a bump `ψ` at scale `δ` with `N + 1` vanishing moments is `δ^{1/r - 1/2}`, provided `5δ ≤ 2^{-k}`. -/ theorem lintegral_enorm_brsTruncConv_rpow_le_scale {k : ℕ} {δ M Mu A r : ℝ} {ψ : ℝ → ℝ} (hψ : Continuous ψ) (hδ : 0 < δ) (h5δ : 5 * δ ≤ (2 : ℝ) ^ (-(k : ℝ))) (hsupp : ∀ y : ℝ, δ < |y| → ψ y = 0) (hbd : ∀ y : ℝ, |ψ y| ≤ M) (hMnn : 0 ≤ M) (hMu : M * δ ≤ Mu) (hA : (∫ y : ℝ, |ψ y|) ≤ A) (hAnn : 0 ≤ A) (hAe : (∫⁻ y : ℝ, ENNReal.ofReal |ψ y|) ≤ ENNReal.ofReal A) {N : ℕ} (hmom : ∀ i : ℕ, i < N + 1 → (∫ y : ℝ, y ^ i * ψ y) = 0) (hr : 1 ≤ r) : (∫⁻ x : ℝ, ‖brsTruncConv k ψ x‖ₑ ^ r) ≤ ENNReal.ofReal (brsKernelConst Mu A N r * δ ^ (1 - r / 2)) := by have hr0 : (0 : ℝ) < r := lt_of_lt_of_le zero_lt_one hr have hMunn : 0 ≤ Mu := le_trans (by positivity) hMu have hNnn : (0 : ℝ) ≤ (N : ℝ) := Nat.cast_nonneg N have hδs : (0 : ℝ) ≤ δ ^ (1 - r / 2) := Real.rpow_nonneg hδ.le _ set w : ℝ := (-(1 / 2) - ((N : ℝ) + 1)) * r + 1 with hw have hwneg : w < 0 := by rw [hw] nlinarith have hPnn : (0 : ℝ) ≤ ∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ)) := by refine Finset.prod_nonneg fun i _ => ?_ have : (0 : ℝ) ≤ (i : ℝ) := Nat.cast_nonneg i linarith have hfacpos : (0 : ℝ) < (Nat.factorial (N + 1) : ℝ) := by exact_mod_cast Nat.factorial_pos (N + 1) set C₁ : ℝ := 5 * (2 * Real.sqrt 5 * Mu) ^ r with hC₁ set C₂ : ℝ := ((∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ))) / (Nat.factorial (N + 1) : ℝ) * A) ^ r * ((3 : ℝ) ^ w / -w) with hC₂ set C₃ : ℝ := 2 * (A * (2 : ℝ) ^ (-(1 / 2) : ℝ)) ^ r with hC₃ have hC₁nn : 0 ≤ C₁ := by rw [hC₁] have : (0 : ℝ) ≤ (2 * Real.sqrt 5 * Mu) ^ r := Real.rpow_nonneg (by positivity) _ linarith have hC₂nn : 0 ≤ C₂ := by rw [hC₂] have h1 : (0 : ℝ) ≤ ((∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ))) / (Nat.factorial (N + 1) : ℝ) * A) ^ r := Real.rpow_nonneg (by positivity) _ have h2 : (0 : ℝ) < (3 : ℝ) ^ w := Real.rpow_pos_of_pos (by norm_num) _ have h3 : (0 : ℝ) < -w := by linarith positivity have hC₃nn : 0 ≤ C₃ := by rw [hC₃] have h2 : (0 : ℝ) ≤ (2 : ℝ) ^ (-(1 / 2) : ℝ) := Real.rpow_nonneg (by norm_num) _ have : (0 : ℝ) ≤ (A * (2 : ℝ) ^ (-(1 / 2) : ℝ)) ^ r := Real.rpow_nonneg (by positivity) _ linarith refine le_trans (lintegral_enorm_brsTruncConv_rpow_le hψ hδ h5δ hsupp hbd hA hAnn hAe hmom hr) ?_ refine le_trans (add_le_add (add_le_add (brsTruncConv_window_one_le hδ hMnn hMu hr0) (le_of_eq (brsTruncConv_window_two_le hδ hAnn hr N))) (le_of_eq (brsTruncConv_window_three_le hδ hAnn hr0))) ?_ rw [← ENNReal.ofReal_add (by positivity) (by positivity), ← ENNReal.ofReal_add (by positivity) (by positivity)] refine ENNReal.ofReal_le_ofReal (le_of_eq ?_) rw [brsKernelConst, ← hC₁, ← hC₂, ← hC₃] ring /-! ## Hölder's inequality for three factors Young's convolution inequality with three different exponents needs the three-factor form of Hölder, which Mathlib does not carry. -/ /-- **Hölder's inequality for three factors** in `ℝ≥0∞`. -/ theorem lintegral_mul_mul_le_Lp_Lq_Lr {α : Type*} [MeasurableSpace α] (μ : Measure α) {a b c : ℝ} (ha : 1 < a) (hb : 1 < b) (hc : 1 < c) (habc : a⁻¹ + b⁻¹ + c⁻¹ = 1) {f g h : α → ENNReal} (hf : AEMeasurable f μ) (hg : AEMeasurable g μ) (hh : AEMeasurable h μ) : (∫⁻ x, f x * g x * h x ∂μ) ≤ (∫⁻ x, f x ^ a ∂μ) ^ (1 / a) * (∫⁻ x, g x ^ b ∂μ) ^ (1 / b) * (∫⁻ x, h x ^ c ∂μ) ^ (1 / c) := by have ha0 : (0 : ℝ) < a := lt_trans zero_lt_one ha have hb0 : (0 : ℝ) < b := lt_trans zero_lt_one hb have hc0 : (0 : ℝ) < c := lt_trans zero_lt_one hc set a' : ℝ := a.conjExponent with ha'def have hconj : a.HolderConjugate a' := Real.HolderConjugate.conjExponent ha have ha'1 : 1 < a' := (Real.holderConjugate_iff.mp hconj.symm).1 have ha'0 : (0 : ℝ) < a' := lt_trans zero_lt_one ha'1 have hsum : a⁻¹ + a'⁻¹ = 1 := (Real.holderConjugate_iff.mp hconj).2 have hbc : b⁻¹ + c⁻¹ = a'⁻¹ := by linarith -- the second pair of exponents have hB1 : 1 < b / a' := by have hcinv : (0 : ℝ) < c⁻¹ := by positivity have hlt : b⁻¹ < a'⁻¹ := by linarith have h1 : a' * b⁻¹ < 1 := by have h := mul_lt_mul_of_pos_left hlt ha'0 rwa [mul_inv_cancel₀ (ne_of_gt ha'0)] at h have h2 : a' < b := by have h := mul_lt_mul_of_pos_right h1 hb0 rwa [mul_assoc, inv_mul_cancel₀ (ne_of_gt hb0), mul_one, one_mul] at h exact (one_lt_div ha'0).mpr h2 have hconj2 : (b / a').HolderConjugate (c / a') := by refine Real.holderConjugate_iff.mpr ⟨hB1, ?_⟩ rw [inv_div, inv_div] field_simp field_simp at hbc linarith [hbc] -- first Hölder have hstep1 : (∫⁻ x, f x * (g x * h x) ∂μ) ≤ (∫⁻ x, f x ^ a ∂μ) ^ (1 / a) * (∫⁻ x, (g x * h x) ^ a' ∂μ) ^ (1 / a') := by have := ENNReal.lintegral_mul_le_Lp_mul_Lq μ hconj hf (hg.mul hh) simpa only [Pi.mul_apply] using this -- second Hölder have hstep2 : (∫⁻ x, (g x * h x) ^ a' ∂μ) ≤ (∫⁻ x, g x ^ b ∂μ) ^ (a' / b) * (∫⁻ x, h x ^ c ∂μ) ^ (a' / c) := by have hmul : ∀ x : α, (g x * h x) ^ a' = g x ^ a' * h x ^ a' := fun x => ENNReal.mul_rpow_of_nonneg _ _ ha'0.le have hh1 : AEMeasurable (fun x => g x ^ a') μ := hg.pow_const _ have hh2 : AEMeasurable (fun x => h x ^ a') μ := hh.pow_const _ have hol := ENNReal.lintegral_mul_le_Lp_mul_Lq μ hconj2 hh1 hh2 simp only [Pi.mul_apply] at hol have hgb : (∫⁻ x, (g x ^ a') ^ (b / a') ∂μ) = ∫⁻ x, g x ^ b ∂μ := by refine lintegral_congr fun x => ?_ rw [← ENNReal.rpow_mul] congr 1 field_simp have hhc : (∫⁻ x, (h x ^ a') ^ (c / a') ∂μ) = ∫⁻ x, h x ^ c ∂μ := by refine lintegral_congr fun x => ?_ rw [← ENNReal.rpow_mul] congr 1 field_simp rw [hgb, hhc] at hol calc (∫⁻ x, (g x * h x) ^ a' ∂μ) = ∫⁻ x, g x ^ a' * h x ^ a' ∂μ := lintegral_congr hmul _ ≤ (∫⁻ x, g x ^ b ∂μ) ^ (1 / (b / a')) * (∫⁻ x, h x ^ c ∂μ) ^ (1 / (c / a')) := hol _ = (∫⁻ x, g x ^ b ∂μ) ^ (a' / b) * (∫⁻ x, h x ^ c ∂μ) ^ (a' / c) := by rw [one_div_div, one_div_div] -- combine have hpow : ((∫⁻ x, g x ^ b ∂μ) ^ (a' / b) * (∫⁻ x, h x ^ c ∂μ) ^ (a' / c)) ^ (1 / a') = (∫⁻ x, g x ^ b ∂μ) ^ (1 / b) * (∫⁻ x, h x ^ c ∂μ) ^ (1 / c) := by rw [ENNReal.mul_rpow_of_nonneg _ _ (by positivity), ← ENNReal.rpow_mul, ← ENNReal.rpow_mul] congr 2 <;> field_simp calc (∫⁻ x, f x * g x * h x ∂μ) = ∫⁻ x, f x * (g x * h x) ∂μ := by refine lintegral_congr fun x => ?_ rw [mul_assoc] _ ≤ (∫⁻ x, f x ^ a ∂μ) ^ (1 / a) * (∫⁻ x, (g x * h x) ^ a' ∂μ) ^ (1 / a') := hstep1 _ ≤ (∫⁻ x, f x ^ a ∂μ) ^ (1 / a) * ((∫⁻ x, g x ^ b ∂μ) ^ (a' / b) * (∫⁻ x, h x ^ c ∂μ) ^ (a' / c)) ^ (1 / a') := mul_le_mul' le_rfl (ENNReal.rpow_le_rpow hstep2 (by positivity)) _ = (∫⁻ x, f x ^ a ∂μ) ^ (1 / a) * (∫⁻ x, g x ^ b ∂μ) ^ (1 / b) * (∫⁻ x, h x ^ c ∂μ) ^ (1 / c) := by rw [hpow, mul_assoc] /-! ## Tonelli for a convolution with both factors raised to a power -/ /-- Tonelli for the double integral appearing in Young's inequality. -/ theorem lintegral_convolution_swap' {p r : ℝ} (hr : 0 ≤ r) {K : ℝ → ℝ} (hK : Measurable K) {g : ℝ → ℂ} (hg : Measurable g) : (∫⁻ x : ℝ, ∫⁻ y : ℝ, ‖K y‖ₑ ^ r * ‖g (x - y)‖ₑ ^ p) = (∫⁻ y : ℝ, ‖K y‖ₑ ^ r) * ∫⁻ z : ℝ, ‖g z‖ₑ ^ p := by have hjoint : Measurable fun z : ℝ × ℝ => ‖K z.2‖ₑ ^ r * ‖g (z.1 - z.2)‖ₑ ^ p := by have h1 : Measurable fun z : ℝ × ℝ => ‖K z.2‖ₑ ^ r := ((hK.comp measurable_snd).enorm).pow_const r have h2 : Measurable fun z : ℝ × ℝ => ‖g (z.1 - z.2)‖ₑ ^ p := ((hg.comp (measurable_fst.sub measurable_snd)).enorm).pow_const p exact h1.mul h2 rw [lintegral_lintegral_swap hjoint.aemeasurable] have hinner : ∀ y : ℝ, (∫⁻ x : ℝ, ‖K y‖ₑ ^ r * ‖g (x - y)‖ₑ ^ p) = ‖K y‖ₑ ^ r * ∫⁻ z : ℝ, ‖g z‖ₑ ^ p := by intro y rw [lintegral_const_mul' _ _ (ENNReal.rpow_ne_top_of_nonneg hr (enorm_ne_top (x := K y)))] congr 1 exact lintegral_sub_right_eq_self (fun z => ‖g z‖ₑ ^ p) y rw [lintegral_congr hinner] exact lintegral_mul_const _ (hK.enorm.pow_const r) /-! ## (5.12): Young's convolution inequality with three exponents `‖K * g‖_q ≤ ‖K‖_r ‖g‖_p` when `1/p + 1/r = 1 + 1/q`. The `r = 1` case is `lintegral_convolution_rpow_le`; the general case needs the three-factor Hölder inequality. -/ /-- **Young's convolution inequality.** -/ theorem lintegral_convolution_rpow_le_young {p q r : ℝ} (hp : 1 ≤ p) (hr : 1 < r) (hrq : r < q) (hpq : p < q) (hrel : 1 / p + 1 / r = 1 + 1 / q) {K : ℝ → ℝ} (hK : Measurable K) {g : ℝ → ℂ} (hg : Measurable g) : (∫⁻ x : ℝ, ‖∫ y : ℝ, (K y : ℂ) * g (x - y)‖ₑ ^ q) ≤ (∫⁻ y : ℝ, ‖K y‖ₑ ^ r) ^ (q / r) * (∫⁻ z : ℝ, ‖g z‖ₑ ^ p) ^ (q / p) := by have hp0 : (0 : ℝ) < p := lt_of_lt_of_le zero_lt_one hp have hr0 : (0 : ℝ) < r := lt_trans zero_lt_one hr have hq1 : (1 : ℝ) < q := lt_trans hr hrq have hq0 : (0 : ℝ) < q := lt_trans zero_lt_one hq1 have hqr : (0 : ℝ) < q - r := by linarith have hqp : (0 : ℝ) < q - p := by linarith set R : ENNReal := ∫⁻ y : ℝ, ‖K y‖ₑ ^ r with hRdef set P : ENNReal := ∫⁻ z : ℝ, ‖g z‖ₑ ^ p with hPdef set s : ℝ := r * q / (q - r) with hsdef set t : ℝ := p * q / (q - p) with htdef have hs1 : (1 : ℝ) < s := by rw [hsdef, lt_div_iff₀ hqr, one_mul] nlinarith have ht1 : (1 : ℝ) < t := by rw [htdef, lt_div_iff₀ hqp, one_mul] nlinarith have hs0 : (0 : ℝ) < s := lt_trans zero_lt_one hs1 have ht0 : (0 : ℝ) < t := lt_trans zero_lt_one ht1 have hsinv : 1 / s = 1 / r - 1 / q := by rw [hsdef] field_simp have htinv : 1 / t = 1 / p - 1 / q := by rw [htdef] field_simp have hsum : q⁻¹ + s⁻¹ + t⁻¹ = 1 := by simp only [← one_div] rw [hsinv, htinv] linarith -- the two exponent identities used in the pointwise splitting have hKexp : r / q + r / s = 1 := by rw [div_eq_mul_one_div r q, div_eq_mul_one_div r s, hsinv] field_simp ring have hgexp : p / q + p / t = 1 := by rw [div_eq_mul_one_div p q, div_eq_mul_one_div p t, htinv] field_simp ring -- the pointwise estimate have hpt : ∀ x : ℝ, ‖∫ y : ℝ, (K y : ℂ) * g (x - y)‖ₑ ^ q ≤ (∫⁻ y : ℝ, ‖K y‖ₑ ^ r * ‖g (x - y)‖ₑ ^ p) * (R ^ (q / s) * P ^ (q / t)) := by intro x have hbase : ‖∫ y : ℝ, (K y : ℂ) * g (x - y)‖ₑ ≤ ∫⁻ y : ℝ, ‖K y‖ₑ * ‖g (x - y)‖ₑ := by refine le_trans (enorm_integral_le_lintegral_enorm _) (le_of_eq ?_) refine lintegral_congr fun y => ?_ rw [enorm_mul, ← ofReal_norm, Complex.norm_real, ofReal_norm] -- the triple splitting have hsplit : ∀ y : ℝ, ‖K y‖ₑ * ‖g (x - y)‖ₑ = (‖K y‖ₑ ^ r * ‖g (x - y)‖ₑ ^ p) ^ (1 / q) * ‖K y‖ₑ ^ (r / s) * ‖g (x - y)‖ₑ ^ (p / t) := by intro y have hA : ‖K y‖ₑ ^ (r / q) * ‖K y‖ₑ ^ (r / s) = ‖K y‖ₑ := by rw [← ENNReal.rpow_add_of_nonneg (r / q) (r / s) (by positivity) (by positivity), hKexp, ENNReal.rpow_one] have hB : ‖g (x - y)‖ₑ ^ (p / q) * ‖g (x - y)‖ₑ ^ (p / t) = ‖g (x - y)‖ₑ := by rw [← ENNReal.rpow_add_of_nonneg (p / q) (p / t) (by positivity) (by positivity), hgexp, ENNReal.rpow_one] have hC : (‖K y‖ₑ ^ r * ‖g (x - y)‖ₑ ^ p) ^ (1 / q) = ‖K y‖ₑ ^ (r / q) * ‖g (x - y)‖ₑ ^ (p / q) := by rw [ENNReal.mul_rpow_of_nonneg _ _ (by positivity : (0 : ℝ) ≤ 1 / q), ← ENNReal.rpow_mul, ← ENNReal.rpow_mul, show r * (1 / q) = r / q by ring, show p * (1 / q) = p / q by ring] calc ‖K y‖ₑ * ‖g (x - y)‖ₑ = (‖K y‖ₑ ^ (r / q) * ‖K y‖ₑ ^ (r / s)) * (‖g (x - y)‖ₑ ^ (p / q) * ‖g (x - y)‖ₑ ^ (p / t)) := by rw [hA, hB] _ = (‖K y‖ₑ ^ (r / q) * ‖g (x - y)‖ₑ ^ (p / q)) * ‖K y‖ₑ ^ (r / s) * ‖g (x - y)‖ₑ ^ (p / t) := by ring _ = (‖K y‖ₑ ^ r * ‖g (x - y)‖ₑ ^ p) ^ (1 / q) * ‖K y‖ₑ ^ (r / s) * ‖g (x - y)‖ₑ ^ (p / t) := by rw [hC] -- three-factor Hölder have hm1 : AEMeasurable (fun y : ℝ => (‖K y‖ₑ ^ r * ‖g (x - y)‖ₑ ^ p) ^ (1 / q)) volume := (((hK.enorm.pow_const r).mul (((hg.comp (measurable_const.sub measurable_id)).enorm).pow_const p)).pow_const _).aemeasurable have hm2 : AEMeasurable (fun y : ℝ => ‖K y‖ₑ ^ (r / s)) volume := (hK.enorm.pow_const _).aemeasurable have hm3 : AEMeasurable (fun y : ℝ => ‖g (x - y)‖ₑ ^ (p / t)) volume := (((hg.comp (measurable_const.sub measurable_id)).enorm).pow_const _).aemeasurable have hol := lintegral_mul_mul_le_Lp_Lq_Lr (volume : Measure ℝ) hq1 hs1 ht1 hsum hm1 hm2 hm3 -- identify the three integrals have hI1 : (∫⁻ y : ℝ, ((‖K y‖ₑ ^ r * ‖g (x - y)‖ₑ ^ p) ^ (1 / q)) ^ q) = ∫⁻ y : ℝ, ‖K y‖ₑ ^ r * ‖g (x - y)‖ₑ ^ p := by refine lintegral_congr fun y => ?_ rw [← ENNReal.rpow_mul, one_div, inv_mul_cancel₀ hq0.ne', ENNReal.rpow_one] have hI2 : (∫⁻ y : ℝ, (‖K y‖ₑ ^ (r / s)) ^ s) = R := by rw [hRdef] refine lintegral_congr fun y => ?_ rw [← ENNReal.rpow_mul, div_mul_cancel₀ _ hs0.ne'] have hI3 : (∫⁻ y : ℝ, (‖g (x - y)‖ₑ ^ (p / t)) ^ t) = P := by rw [hPdef, ← lintegral_sub_left_eq_self (fun z => ‖g z‖ₑ ^ p) x] refine lintegral_congr fun y => ?_ rw [← ENNReal.rpow_mul, div_mul_cancel₀ _ ht0.ne'] rw [hI1, hI2, hI3] at hol have hchain : ‖∫ y : ℝ, (K y : ℂ) * g (x - y)‖ₑ ≤ (∫⁻ y : ℝ, ‖K y‖ₑ ^ r * ‖g (x - y)‖ₑ ^ p) ^ (1 / q) * R ^ (1 / s) * P ^ (1 / t) := by refine le_trans hbase (le_trans (le_of_eq (lintegral_congr hsplit)) hol) calc ‖∫ y : ℝ, (K y : ℂ) * g (x - y)‖ₑ ^ q ≤ ((∫⁻ y : ℝ, ‖K y‖ₑ ^ r * ‖g (x - y)‖ₑ ^ p) ^ (1 / q) * R ^ (1 / s) * P ^ (1 / t)) ^ q := ENNReal.rpow_le_rpow hchain hq0.le _ = (∫⁻ y : ℝ, ‖K y‖ₑ ^ r * ‖g (x - y)‖ₑ ^ p) * (R ^ (q / s) * P ^ (q / t)) := by rw [ENNReal.mul_rpow_of_nonneg _ _ hq0.le, ENNReal.mul_rpow_of_nonneg _ _ hq0.le, ← ENNReal.rpow_mul, ← ENNReal.rpow_mul, ← ENNReal.rpow_mul, one_div, inv_mul_cancel₀ hq0.ne', ENNReal.rpow_one] rw [show 1 / s * q = q / s by ring, show 1 / t * q = q / t by ring, mul_assoc] -- the degenerate cases by_cases hR0 : R = 0 · have hz : ∀ x : ℝ, ‖∫ y : ℝ, (K y : ℂ) * g (x - y)‖ₑ ^ q = 0 := by intro x refine le_antisymm ?_ zero_le have h := hpt x rwa [hR0, ENNReal.zero_rpow_of_pos (by positivity), zero_mul, mul_zero] at h rw [lintegral_congr hz, lintegral_zero] exact zero_le by_cases hP0 : P = 0 · have hz : ∀ x : ℝ, ‖∫ y : ℝ, (K y : ℂ) * g (x - y)‖ₑ ^ q = 0 := by intro x refine le_antisymm ?_ zero_le have h := hpt x rwa [hP0, ENNReal.zero_rpow_of_pos (by positivity), mul_zero, mul_zero] at h rw [lintegral_congr hz, lintegral_zero] exact zero_le have hPne : P ^ (q / p) ≠ 0 := by simp only [ne_eq, ENNReal.rpow_eq_zero_iff, not_or] exact ⟨fun h => hP0 h.1, fun h => absurd h.2 (not_lt.mpr (by positivity : (0 : ℝ) ≤ q / p))⟩ have hRne : R ^ (q / r) ≠ 0 := by simp only [ne_eq, ENNReal.rpow_eq_zero_iff, not_or] exact ⟨fun h => hR0 h.1, fun h => absurd h.2 (not_lt.mpr (by positivity : (0 : ℝ) ≤ q / r))⟩ by_cases hRtop : R = ⊤ · rw [hRtop, ENNReal.top_rpow_of_pos (by positivity), ENNReal.top_mul hPne] exact le_top by_cases hPtop : P = ⊤ · rw [hPtop, ENNReal.top_rpow_of_pos (by positivity), ENNReal.mul_top hRne] exact le_top -- the main case have hCtop : R ^ (q / s) * P ^ (q / t) ≠ ⊤ := by refine ENNReal.mul_ne_top ?_ ?_ · exact ENNReal.rpow_ne_top_of_nonneg (by positivity) hRtop · exact ENNReal.rpow_ne_top_of_nonneg (by positivity) hPtop have hRsplit : R * R ^ (q / s) = R ^ (q / r) := by have hadd : R ^ ((1 : ℝ) + q / s) = R ^ (1 : ℝ) * R ^ (q / s) := ENNReal.rpow_add_of_nonneg (1 : ℝ) (q / s) (by norm_num) (by positivity) rw [ENNReal.rpow_one] at hadd rw [← hadd] congr 1 rw [show q / s = q * (1 / s) by ring, hsinv] field_simp ring have hPsplit : P * P ^ (q / t) = P ^ (q / p) := by have hadd : P ^ ((1 : ℝ) + q / t) = P ^ (1 : ℝ) * P ^ (q / t) := ENNReal.rpow_add_of_nonneg (1 : ℝ) (q / t) (by norm_num) (by positivity) rw [ENNReal.rpow_one] at hadd rw [← hadd] congr 1 rw [show q / t = q * (1 / t) by ring, htinv] field_simp ring calc (∫⁻ x : ℝ, ‖∫ y : ℝ, (K y : ℂ) * g (x - y)‖ₑ ^ q) ≤ ∫⁻ x : ℝ, (∫⁻ y : ℝ, ‖K y‖ₑ ^ r * ‖g (x - y)‖ₑ ^ p) * (R ^ (q / s) * P ^ (q / t)) := lintegral_mono hpt _ = (∫⁻ x : ℝ, ∫⁻ y : ℝ, ‖K y‖ₑ ^ r * ‖g (x - y)‖ₑ ^ p) * (R ^ (q / s) * P ^ (q / t)) := lintegral_mul_const' _ _ hCtop _ = R * P * (R ^ (q / s) * P ^ (q / t)) := by rw [lintegral_convolution_swap' hr0.le hK hg, hRdef, hPdef] _ = (R * R ^ (q / s)) * (P * P ^ (q / t)) := by ring _ = R ^ (q / r) * P ^ (q / p) := by rw [hRsplit, hPsplit] /-! ## Averaging over a window, measured in `L^q` of the translation The maximal estimate on an interval bounds `|F(t - r)|` for `t` in a window of length `δ` by two window averages of translates of `F` and `F'`. Taking `L^q` in `r` costs only `δ`, by Hölder on the window followed by Tonelli. -/ /-- **Hölder on the window, then Tonelli.** The `L^q(dr)` norm of the window integral of a translate is at most `δ` times the `L^q` norm. -/ theorem lintegral_setLIntegral_translate_rpow_le {q δ : ℝ} (hq : 1 ≤ q) (hδ : 0 < δ) (a : ℝ) {H : ℝ → ℂ} (hH : Measurable H) : (∫⁻ r : ℝ, (∫⁻ s in Icc (a - δ / 2) (a + δ / 2), ‖H (s - r)‖ₑ) ^ q) ≤ ENNReal.ofReal (δ ^ q) * ∫⁻ z : ℝ, ‖H z‖ₑ ^ q := by have hq0 : (0 : ℝ) < q := lt_of_lt_of_le zero_lt_one hq set I : Set ℝ := Icc (a - δ / 2) (a + δ / 2) with hIdef have hImeas : MeasurableSet I := measurableSet_Icc have hIvol : volume I = ENNReal.ofReal δ := by rw [hIdef, Real.volume_Icc] congr 1 ring set Q : ENNReal := ∫⁻ z : ℝ, ‖H z‖ₑ ^ q with hQdef -- Tonelli for the `q`-th powers have hjoint : Measurable fun z : ℝ × ℝ => {w : ℝ × ℝ | w.2 ∈ I}.indicator (fun w : ℝ × ℝ => ‖H (w.2 - w.1)‖ₑ ^ q) z := by refine Measurable.indicator ?_ (measurable_snd hImeas) exact ((hH.comp (measurable_snd.sub measurable_fst)).enorm).pow_const q have hswap : (∫⁻ r : ℝ, ∫⁻ s in I, ‖H (s - r)‖ₑ ^ q) = ENNReal.ofReal δ * Q := by have hL : ∀ r : ℝ, (∫⁻ s in I, ‖H (s - r)‖ₑ ^ q) = ∫⁻ s : ℝ, {w : ℝ × ℝ | w.2 ∈ I}.indicator (fun w : ℝ × ℝ => ‖H (w.2 - w.1)‖ₑ ^ q) (r, s) := by intro r rw [← lintegral_indicator hImeas] refine lintegral_congr fun s => ?_ by_cases hs : s ∈ I · rw [Set.indicator_of_mem hs, Set.indicator_of_mem (show (r, s) ∈ {w : ℝ × ℝ | w.2 ∈ I} from hs)] · rw [Set.indicator_of_notMem hs, Set.indicator_of_notMem (show (r, s) ∉ {w : ℝ × ℝ | w.2 ∈ I} from hs)] rw [lintegral_congr hL, lintegral_lintegral_swap hjoint.aemeasurable] have hR : ∀ s : ℝ, (∫⁻ r : ℝ, {w : ℝ × ℝ | w.2 ∈ I}.indicator (fun w : ℝ × ℝ => ‖H (w.2 - w.1)‖ₑ ^ q) (r, s)) = I.indicator (fun _ => Q) s := by intro s by_cases hs : s ∈ I · rw [Set.indicator_of_mem hs, hQdef] rw [lintegral_congr fun r => Set.indicator_of_mem (show (r, s) ∈ {w : ℝ × ℝ | w.2 ∈ I} from hs) _] exact lintegral_sub_left_eq_self (fun z => ‖H z‖ₑ ^ q) s · rw [Set.indicator_of_notMem hs] rw [lintegral_congr fun r => Set.indicator_of_notMem (show (r, s) ∉ {w : ℝ × ℝ | w.2 ∈ I} from hs) _] exact lintegral_zero rw [lintegral_congr hR, lintegral_indicator hImeas, setLIntegral_const, hIvol, mul_comm] -- Hölder on the window have hholder : ∀ r : ℝ, (∫⁻ s in I, ‖H (s - r)‖ₑ) ^ q ≤ ENNReal.ofReal (δ ^ (q - 1)) * ∫⁻ s in I, ‖H (s - r)‖ₑ ^ q := by intro r rcases eq_or_lt_of_le hq with hq1 | hq1 · rw [← hq1] simp only [ENNReal.rpow_one, sub_self] rw [Real.rpow_zero, ENNReal.ofReal_one, one_mul] · set q' : ℝ := q.conjExponent with hq'def have hconj : q.HolderConjugate q' := Real.HolderConjugate.conjExponent hq1 have hq'1 : 1 < q' := (Real.holderConjugate_iff.mp hconj.symm).1 have hq'0 : (0 : ℝ) < q' := lt_trans zero_lt_one hq'1 have hinv : q⁻¹ + q'⁻¹ = 1 := (Real.holderConjugate_iff.mp hconj).2 have hmeas : AEMeasurable (fun s : ℝ => ‖H (s - r)‖ₑ) (volume.restrict I) := ((hH.comp (measurable_id.sub measurable_const)).enorm).aemeasurable have hol := ENNReal.lintegral_mul_le_Lp_mul_Lq (volume.restrict I) hconj.symm (aemeasurable_const (b := (1 : ENNReal))) hmeas simp only [Pi.mul_apply, one_mul, ENNReal.one_rpow] at hol rw [setLIntegral_const, hIvol, one_mul] at hol -- raise to the power `q` have hstep : (∫⁻ s in I, ‖H (s - r)‖ₑ) ^ q ≤ ((ENNReal.ofReal δ) ^ (1 / q') * (∫⁻ s in I, ‖H (s - r)‖ₑ ^ q) ^ (1 / q)) ^ q := ENNReal.rpow_le_rpow hol hq0.le refine le_trans hstep (le_of_eq ?_) have hexp : (1 : ℝ) / q' * q = q - 1 := by have hq'inv : (1 : ℝ) / q' = 1 - 1 / q := by simp only [one_div] linarith rw [hq'inv] field_simp rw [ENNReal.mul_rpow_of_nonneg _ _ hq0.le, ← ENNReal.rpow_mul, ← ENNReal.rpow_mul, show (1 : ℝ) / q * q = 1 by field_simp, ENNReal.rpow_one, hexp, ← ENNReal.ofReal_rpow_of_pos hδ] calc (∫⁻ r : ℝ, (∫⁻ s in I, ‖H (s - r)‖ₑ) ^ q) ≤ ∫⁻ r : ℝ, ENNReal.ofReal (δ ^ (q - 1)) * ∫⁻ s in I, ‖H (s - r)‖ₑ ^ q := lintegral_mono hholder _ = ENNReal.ofReal (δ ^ (q - 1)) * ∫⁻ r : ℝ, ∫⁻ s in I, ‖H (s - r)‖ₑ ^ q := lintegral_const_mul' _ _ ENNReal.ofReal_ne_top _ = ENNReal.ofReal (δ ^ (q - 1)) * (ENNReal.ofReal δ * Q) := by rw [hswap] _ = ENNReal.ofReal (δ ^ q) * Q := by rw [← mul_assoc, ← ENNReal.ofReal_mul (Real.rpow_nonneg hδ.le _)] congr 2 have h := Real.rpow_add hδ (q - 1) 1 rw [Real.rpow_one] at h rw [← h] congr 1 ring /-! ## (5.13): the window maximal function and its `L^q` norm -/ /-- The measurable majorant of `sup_{t ∈ J} |F(t - r)|` for a window `J` of length `δ` centred at `a`. -/ def brsWindowMax (F F' : ℝ → ℂ) (a δ : ℝ) (r : ℝ) : ENNReal := ENNReal.ofReal (1 / δ) * (∫⁻ s in Icc (a - δ / 2) (a + δ / 2), ‖F (s - r)‖ₑ) + ∫⁻ s in Icc (a - δ / 2) (a + δ / 2), ‖F' (s - r)‖ₑ theorem measurable_setLIntegral_translate {H : ℝ → ℂ} (hH : Measurable H) (a δ : ℝ) : Measurable fun r : ℝ => ∫⁻ s in Icc (a - δ / 2) (a + δ / 2), ‖H (s - r)‖ₑ := by have hjoint : Measurable fun w : ℝ × ℝ => {w : ℝ × ℝ | w.2 ∈ Icc (a - δ / 2) (a + δ / 2)}.indicator (fun w : ℝ × ℝ => ‖H (w.2 - w.1)‖ₑ) w := by refine Measurable.indicator ?_ (measurable_snd measurableSet_Icc) exact (hH.comp (measurable_snd.sub measurable_fst)).enorm have hkey := hjoint.lintegral_prod_right' (ν := (volume : Measure ℝ)) have heq : (fun r : ℝ => ∫⁻ y : ℝ, {w : ℝ × ℝ | w.2 ∈ Icc (a - δ / 2) (a + δ / 2)}.indicator (fun w : ℝ × ℝ => ‖H (w.2 - w.1)‖ₑ) (r, y)) = fun r : ℝ => ∫⁻ s in Icc (a - δ / 2) (a + δ / 2), ‖H (s - r)‖ₑ := by funext r rw [← lintegral_indicator measurableSet_Icc] refine lintegral_congr fun s => ?_ by_cases hs : s ∈ Icc (a - δ / 2) (a + δ / 2) · rw [Set.indicator_of_mem hs, Set.indicator_of_mem (show (r, s) ∈ {w : ℝ × ℝ | w.2 ∈ Icc (a - δ / 2) (a + δ / 2)} from hs)] · rw [Set.indicator_of_notMem hs, Set.indicator_of_notMem (show (r, s) ∉ {w : ℝ × ℝ | w.2 ∈ Icc (a - δ / 2) (a + δ / 2)} from hs)] rw [← heq] exact hkey theorem measurable_brsWindowMax {F F' : ℝ → ℂ} (hF : Measurable F) (hF' : Measurable F') (a δ : ℝ) : Measurable (brsWindowMax F F' a δ) := by refine Measurable.add ?_ (measurable_setLIntegral_translate hF' a δ) exact (measurable_setLIntegral_translate hF a δ).const_mul _ /-- **The window maximal bound.** The supremum over a window of length `δ` is dominated by the window averages of `F` and `F'`. -/ theorem iSup_enorm_translate_le_brsWindowMax {F F' : ℝ → ℂ} (hF : Continuous F) (hF' : Continuous F') (hderiv : ∀ x : ℝ, HasDerivAt F (F' x) x) {a δ : ℝ} (hδ : 0 < δ) (r : ℝ) : (⨆ t ∈ Icc (a - δ / 2) (a + δ / 2), ‖F (t - r)‖ₑ) ≤ brsWindowMax F F' a δ r := by set G : ℝ → ℂ := fun t => F (t - r) with hG set G' : ℝ → ℂ := fun t => F' (t - r) with hG' have hGd : ∀ x : ℝ, HasDerivAt G (G' x) x := fun x => HasDerivAt.comp_sub_const x r (hderiv (x - r)) have hGc : Continuous G := hF.comp (continuous_id.sub continuous_const) have hG'c : Continuous G' := hF'.comp (continuous_id.sub continuous_const) have hlt : a - δ / 2 < a + δ / 2 := by linarith have hlen : a + δ / 2 - (a - δ / 2) = δ := by ring refine iSup₂_le fun t ht => ?_ have hmax := norm_le_average_add_integral_deriv hlt (fun x _ => hGd x) (hG'c.intervalIntegrable _ _) (hGc.intervalIntegrable _ _) ht rw [hlen] at hmax -- transfer the two Bochner integrals to lower integrals have htrans : ∀ H : ℝ → ℂ, Continuous H → ENNReal.ofReal (∫ s in (a - δ / 2)..(a + δ / 2), ‖H s‖) ≤ ∫⁻ s in Icc (a - δ / 2) (a + δ / 2), ‖H s‖ₑ := by intro H hHc rw [intervalIntegral.integral_of_le hlt.le] have hint : IntegrableOn (fun s => ‖H s‖) (Ioc (a - δ / 2) (a + δ / 2)) volume := (hHc.norm.integrableOn_Icc).mono_set Ioc_subset_Icc_self have hnn : 0 ≤ᵐ[volume.restrict (Ioc (a - δ / 2) (a + δ / 2))] fun s => ‖H s‖ := Filter.Eventually.of_forall fun s => norm_nonneg _ calc ENNReal.ofReal (∫ s in Ioc (a - δ / 2) (a + δ / 2), ‖H s‖) = ∫⁻ s in Ioc (a - δ / 2) (a + δ / 2), ENNReal.ofReal ‖H s‖ := ofReal_integral_eq_lintegral_ofReal hint hnn _ = ∫⁻ s in Ioc (a - δ / 2) (a + δ / 2), ‖H s‖ₑ := by simp only [ofReal_norm] _ ≤ ∫⁻ s in Icc (a - δ / 2) (a + δ / 2), ‖H s‖ₑ := lintegral_mono_set Ioc_subset_Icc_self have h1 := htrans G hGc have h2 := htrans G' hG'c have hstep : ‖F (t - r)‖ₑ ≤ ENNReal.ofReal ((1 / δ) * (∫ s in (a - δ / 2)..(a + δ / 2), ‖G s‖)) + ENNReal.ofReal (∫ s in (a - δ / 2)..(a + δ / 2), ‖G' s‖) := by have : ‖F (t - r)‖ₑ = ENNReal.ofReal ‖G t‖ := by rw [hG, ← ofReal_norm] rw [this] exact le_trans (ENNReal.ofReal_le_ofReal hmax) ENNReal.ofReal_add_le refine le_trans hstep ?_ rw [brsWindowMax] refine add_le_add ?_ h2 rw [ENNReal.ofReal_mul (by positivity)] exact mul_le_mul' le_rfl h1 /-- **The `L^q` norm of the window maximal function.** -/ theorem lintegral_brsWindowMax_rpow_le {F F' : ℝ → ℂ} (hF : Measurable F) (hF' : Measurable F') {a δ q : ℝ} (hδ : 0 < δ) (hq : 1 ≤ q) : (∫⁻ r : ℝ, brsWindowMax F F' a δ r ^ q) ^ (1 / q) ≤ (∫⁻ z : ℝ, ‖F z‖ₑ ^ q) ^ (1 / q) + ENNReal.ofReal δ * (∫⁻ z : ℝ, ‖F' z‖ₑ ^ q) ^ (1 / q) := by have hq0 : (0 : ℝ) < q := lt_of_lt_of_le zero_lt_one hq set A : ℝ → ENNReal := fun r => ENNReal.ofReal (1 / δ) * ∫⁻ s in Icc (a - δ / 2) (a + δ / 2), ‖F (s - r)‖ₑ with hA set B : ℝ → ENNReal := fun r => ∫⁻ s in Icc (a - δ / 2) (a + δ / 2), ‖F' (s - r)‖ₑ with hB have hAm : AEMeasurable A volume := ((measurable_setLIntegral_translate hF a δ).const_mul _).aemeasurable have hBm : AEMeasurable B volume := (measurable_setLIntegral_translate hF' a δ).aemeasurable have hsum : (∫⁻ r : ℝ, brsWindowMax F F' a δ r ^ q) ^ (1 / q) ≤ (∫⁻ r : ℝ, A r ^ q) ^ (1 / q) + (∫⁻ r : ℝ, B r ^ q) ^ (1 / q) := by have h := ENNReal.lintegral_Lp_add_le hAm hBm hq simpa only [Pi.add_apply, hA, hB, brsWindowMax] using h refine le_trans hsum (add_le_add ?_ ?_) · -- the `F` term have hbound : (∫⁻ r : ℝ, A r ^ q) ≤ ENNReal.ofReal ((1 / δ) ^ q) * (ENNReal.ofReal (δ ^ q) * ∫⁻ z : ℝ, ‖F z‖ₑ ^ q) := by have hsplit : ∀ r : ℝ, A r ^ q = ENNReal.ofReal ((1 / δ) ^ q) * (∫⁻ s in Icc (a - δ / 2) (a + δ / 2), ‖F (s - r)‖ₑ) ^ q := by intro r rw [hA] simp only rw [ENNReal.mul_rpow_of_nonneg _ _ hq0.le, ENNReal.ofReal_rpow_of_pos (by positivity)] rw [lintegral_congr hsplit, lintegral_const_mul' _ _ ENNReal.ofReal_ne_top] exact mul_le_mul' le_rfl (lintegral_setLIntegral_translate_rpow_le hq hδ a hF) refine le_trans (ENNReal.rpow_le_rpow hbound (by positivity)) (le_of_eq ?_) rw [← mul_assoc, ← ENNReal.ofReal_mul (by positivity), show ((1 / δ) ^ q * δ ^ q : ℝ) = 1 by rw [← Real.mul_rpow (by positivity) hδ.le] rw [one_div, inv_mul_cancel₀ hδ.ne', Real.one_rpow], ENNReal.ofReal_one, one_mul] · -- the `F'` term refine le_trans (ENNReal.rpow_le_rpow (lintegral_setLIntegral_translate_rpow_le hq hδ a hF') (by positivity)) (le_of_eq ?_) rw [ENNReal.mul_rpow_of_nonneg _ _ (by positivity)] congr 1 rw [ENNReal.ofReal_rpow_of_pos (by positivity : (0 : ℝ) < δ ^ q), ← Real.rpow_mul hδ.le, mul_one_div, div_self hq0.ne', Real.rpow_one] /-! ## (5.13) with the covering: the localized maximal function in `L^q` Combining the window maximal bound with an interval cover of `E` of mesh `δ` gives the `L^q(dr)` bound for `sup_{t ∈ E} |F(t - r)|`, with the covering number entering as `N^{1/q}`. -/ /-- **The localized maximal estimate in `L^q`.** -/ theorem lintegral_iSup_enorm_translate_rpow_le {E : Set ℝ} {δ : ℝ} (hδ : 0 < δ) {ι : Finset ℝ} (hcov : IsIntervalCover E δ ι) {F F' : ℝ → ℂ} (hF : Continuous F) (hF' : Continuous F') (hderiv : ∀ x : ℝ, HasDerivAt F (F' x) x) {q : ℝ} (hq : 1 ≤ q) : (∫⁻ r : ℝ, (⨆ t ∈ E, ‖F (t - r)‖ₑ) ^ q) ≤ (ι.card : ENNReal) * ((∫⁻ z : ℝ, ‖F z‖ₑ ^ q) ^ (1 / q) + ENNReal.ofReal δ * (∫⁻ z : ℝ, ‖F' z‖ₑ ^ q) ^ (1 / q)) ^ q := by have hq0 : (0 : ℝ) < q := lt_of_lt_of_le zero_lt_one hq set S : ENNReal := (∫⁻ z : ℝ, ‖F z‖ₑ ^ q) ^ (1 / q) + ENNReal.ofReal δ * (∫⁻ z : ℝ, ‖F' z‖ₑ ^ q) ^ (1 / q) with hS -- the pointwise majorant have hpt : ∀ r : ℝ, (⨆ t ∈ E, ‖F (t - r)‖ₑ) ^ q ≤ ∑ a ∈ ι, brsWindowMax F F' a δ r ^ q := by intro r have hcover : (⨆ t ∈ E, ‖F (t - r)‖ₑ) ≤ ⨆ a ∈ ι, brsWindowMax F F' a δ r := by refine iSup₂_le fun t ht => ?_ obtain ⟨a, ha, hmem⟩ := Set.mem_iUnion₂.mp (hcov ht) refine le_trans ?_ (le_iSup₂ (f := fun a (_ : a ∈ ι) => brsWindowMax F F' a δ r) a ha) refine le_trans ?_ (iSup_enorm_translate_le_brsWindowMax hF hF' hderiv hδ r) exact le_iSup₂ (f := fun t (_ : t ∈ Icc (a - δ / 2) (a + δ / 2)) => ‖F (t - r)‖ₑ) t hmem refine le_trans (ENNReal.rpow_le_rpow hcover hq0.le) ?_ exact iSup_rpow_le_sum hq0 ι (fun a => brsWindowMax F F' a δ r) -- integrate have hmeas : ∀ a ∈ ι, AEMeasurable (fun r : ℝ => brsWindowMax F F' a δ r ^ q) volume := fun a _ => ((measurable_brsWindowMax hF.measurable hF'.measurable a δ).pow_const q).aemeasurable have hterm : ∀ a : ℝ, (∫⁻ r : ℝ, brsWindowMax F F' a δ r ^ q) ≤ S ^ q := by intro a have h := lintegral_brsWindowMax_rpow_le hF.measurable hF'.measurable (a := a) hδ hq have h2 := ENNReal.rpow_le_rpow h hq0.le rw [← ENNReal.rpow_mul, show (1 : ℝ) / q * q = 1 by field_simp, ENNReal.rpow_one] at h2 rw [hS] exact h2 calc (∫⁻ r : ℝ, (⨆ t ∈ E, ‖F (t - r)‖ₑ) ^ q) ≤ ∫⁻ r : ℝ, ∑ a ∈ ι, brsWindowMax F F' a δ r ^ q := lintegral_mono hpt _ = ∑ a ∈ ι, ∫⁻ r : ℝ, brsWindowMax F F' a δ r ^ q := lintegral_finsetSum' ι hmeas _ ≤ ∑ _a ∈ ι, S ^ q := Finset.sum_le_sum fun a _ => hterm a _ = (ι.card : ENNReal) * S ^ q := by rw [Finset.sum_const, nsmul_eq_mul] /-! ## The truncated kernel is integrable, and `h_k * ψ` is as smooth as `ψ` -/ theorem integrable_brsTruncKernel (k : ℕ) : Integrable (brsTruncKernel k) volume := by refine ⟨(measurable_brsTruncKernel k).aestronglyMeasurable, ?_⟩ rw [hasFiniteIntegral_iff_enorm] have hval : (∫⁻ y : ℝ, ‖brsTruncKernel k y‖ₑ) = ENNReal.ofReal (2 * (2 : ℝ) ^ (-(k : ℝ) / 2)) := by rw [← lintegral_brsTruncKernel k] exact lintegral_congr fun y => enorm_brsTruncKernel k y rw [hval] exact ENNReal.ofReal_lt_top theorem locallyIntegrable_brsTruncKernel (k : ℕ) : LocallyIntegrable (brsTruncKernel k) volume := (integrable_brsTruncKernel k).locallyIntegrable /-- The real-valued form of the kernel `h_k * ψ`. -/ def brsTruncConvReal (k : ℕ) (ψ : ℝ → ℝ) (x : ℝ) : ℝ := ∫ y : ℝ, brsTruncKernel k (x - y) * ψ y theorem brsTruncConv_eq_ofReal (k : ℕ) (ψ : ℝ → ℝ) (x : ℝ) : brsTruncConv k ψ x = ((brsTruncConvReal k ψ x : ℝ) : ℂ) := by have h : ∀ y : ℝ, ((brsTruncKernel k (x - y) : ℝ) : ℂ) * (ψ y : ℂ) = ((brsTruncKernel k (x - y) * ψ y : ℝ) : ℂ) := fun y => by rw [Complex.ofReal_mul] rw [brsTruncConv, brsTruncConvReal, integral_congr_ae (Filter.Eventually.of_forall h)] exact integral_ofReal theorem enorm_brsTruncConv (k : ℕ) (ψ : ℝ → ℝ) (x : ℝ) : ‖brsTruncConv k ψ x‖ₑ = ‖brsTruncConvReal k ψ x‖ₑ := by rw [brsTruncConv_eq_ofReal, ← ofReal_norm, Complex.norm_real, ofReal_norm] /-- `h_k * ψ` is Mathlib's convolution `ψ ⋆ h_k`. -/ theorem brsTruncConvReal_eq_convolution (k : ℕ) (ψ : ℝ → ℝ) : brsTruncConvReal k ψ = (ψ ⋆[(ContinuousLinearMap.mul ℝ ℝ : ℝ →L[ℝ] ℝ →L[ℝ] ℝ), volume] brsTruncKernel k) := by funext x rw [brsTruncConvReal, convolution] simp only [ContinuousLinearMap.mul_apply'] have hswap : (∫ y : ℝ, brsTruncKernel k (x - y) * ψ y) = ∫ y : ℝ, ψ y * brsTruncKernel k (x - y) := by refine integral_congr_ae (Filter.Eventually.of_forall fun y => ?_) ring rw [hswap] /-- **`h_k * ψ` inherits the smoothness of `ψ`.** -/ theorem contDiff_brsTruncConvReal (k : ℕ) {ψ : ℝ → ℝ} {n : ℕ} (hψ : ContDiff ℝ n ψ) (hcs : HasCompactSupport ψ) : ContDiff ℝ n (brsTruncConvReal k ψ) := by rw [brsTruncConvReal_eq_convolution k ψ] exact HasCompactSupport.contDiff_convolution_left (ContinuousLinearMap.mul ℝ ℝ : ℝ →L[ℝ] ℝ →L[ℝ] ℝ) hcs hψ (locallyIntegrable_brsTruncKernel k) /-! ## Support and derivative of the kernel `h_k * ψ` -/ theorem hasCompactSupport_brsTruncKernel (k : ℕ) : HasCompactSupport (brsTruncKernel k) := by refine HasCompactSupport.intro (isCompact_Icc (a := (0 : ℝ)) (b := (2 : ℝ) ^ (-(k : ℝ)))) ?_ intro x hx rw [brsTruncKernel] refine Set.indicator_of_notMem ?_ _ intro hc exact hx ⟨hc.1.le, hc.2⟩ theorem hasCompactSupport_brsTruncConvReal (k : ℕ) {ψ : ℝ → ℝ} (hcs : HasCompactSupport ψ) : HasCompactSupport (brsTruncConvReal k ψ) := by rw [brsTruncConvReal_eq_convolution k ψ] exact HasCompactSupport.convolution (ContinuousLinearMap.mul ℝ ℝ : ℝ →L[ℝ] ℝ →L[ℝ] ℝ) hcs (hasCompactSupport_brsTruncKernel k) /-- **The derivative of `h_k * ψ` falls on `ψ`.** -/ theorem hasDerivAt_brsTruncConvReal (k : ℕ) {ψ : ℝ → ℝ} (hcs : HasCompactSupport ψ) (hψ : ContDiff ℝ 1 ψ) (x : ℝ) : HasDerivAt (brsTruncConvReal k ψ) (brsTruncConvReal k (deriv ψ) x) x := by have h := HasCompactSupport.hasDerivAt_convolution_left (L := (ContinuousLinearMap.mul ℝ ℝ : ℝ →L[ℝ] ℝ →L[ℝ] ℝ)) (μ := (volume : Measure ℝ)) hcs hψ (locallyIntegrable_brsTruncKernel k) x rw [← brsTruncConvReal_eq_convolution k (deriv ψ), ← brsTruncConvReal_eq_convolution k ψ] at h exact h theorem continuous_brsTruncConvReal (k : ℕ) {ψ : ℝ → ℝ} (hcs : HasCompactSupport ψ) (hψ : ContDiff ℝ 1 ψ) : Continuous (brsTruncConvReal k ψ) := (contDiff_brsTruncConvReal k (n := 1) hψ hcs).continuous /-! ## (5.9): the analytic core The maximal function of `𝒜_{k,m}` over `E`, measured in `L^q` of the radius, is controlled by the covering number of `E` at the scale `δ = 2^{-k-m}` of the bump together with the `L^r` norms of the kernels `h_k * υ` and `h_k * υ'`. The exponents are those of Young's inequality, `1/p + 1/r = 1 + 1/q`. -/ /-- Rewriting the `L^q` bound coming out of Young's inequality. -/ theorem young_rpow_inv {A B : ENNReal} {p q r : ℝ} (hp : 0 < p) (hq : 0 < q) (hr : 0 < r) : (A ^ (q / r) * B ^ (q / p)) ^ (1 / q) = A ^ (1 / r) * B ^ (1 / p) := by rw [ENNReal.mul_rpow_of_nonneg _ _ (by positivity), ← ENNReal.rpow_mul, ← ENNReal.rpow_mul, show q / r * (1 / q) = 1 / r by field_simp, show q / p * (1 / q) = 1 / p by field_simp] /-- **The core of BRS (5.9).** -/ theorem brs_5_9_core {E : Set ℝ} {δ : ℝ} (hδ : 0 < δ) {ι : Finset ℝ} (hcov : IsIntervalCover E δ ι) (k : ℕ) {υ : ℝ → ℝ} (hcs : HasCompactSupport υ) (hυ : ContDiff ℝ 1 υ) (hcs' : HasCompactSupport (deriv υ)) (hυ' : ContDiff ℝ 1 (deriv υ)) {g : ℝ → ℂ} (hg : Continuous g) {p q r : ℝ} (hp : 1 ≤ p) (hr : 1 < r) (hrq : r < q) (hpq : p < q) (hrel : 1 / p + 1 / r = 1 + 1 / q) : (∫⁻ x : ℝ, (⨆ t ∈ E, ‖∫ y : ℝ, ((brsTruncConvReal k υ y : ℝ) : ℂ) * g (t - x - y)‖ₑ) ^ q) ≤ (ι.card : ENNReal) * ((∫⁻ y : ℝ, ‖brsTruncConvReal k υ y‖ₑ ^ r) ^ (1 / r) * (∫⁻ z : ℝ, ‖g z‖ₑ ^ p) ^ (1 / p) + ENNReal.ofReal δ * ((∫⁻ y : ℝ, ‖brsTruncConvReal k (deriv υ) y‖ₑ ^ r) ^ (1 / r) * (∫⁻ z : ℝ, ‖g z‖ₑ ^ p) ^ (1 / p))) ^ q := by have hp0 : (0 : ℝ) < p := lt_of_lt_of_le zero_lt_one hp have hr0 : (0 : ℝ) < r := lt_trans zero_lt_one hr have hq1 : (1 : ℝ) < q := lt_trans hr hrq have hq0 : (0 : ℝ) < q := lt_trans zero_lt_one hq1 set K : ℝ → ℝ := brsTruncConvReal k υ with hKdef set K' : ℝ → ℝ := brsTruncConvReal k (deriv υ) with hK'def have hKcs : HasCompactSupport K := hasCompactSupport_brsTruncConvReal k hcs have hKcd : ContDiff ℝ 1 K := contDiff_brsTruncConvReal k (n := 1) hυ hcs have hK'cs : HasCompactSupport K' := hasCompactSupport_brsTruncConvReal k hcs' have hK'cd : ContDiff ℝ 1 K' := contDiff_brsTruncConvReal k (n := 1) hυ' hcs' have hKm : Measurable K := hKcd.continuous.measurable have hK'm : Measurable K' := hK'cd.continuous.measurable have hderivK : deriv K = K' := by funext x exact (hasDerivAt_brsTruncConvReal k hcs hυ x).deriv set F : ℝ → ℂ := fun x => ∫ y : ℝ, (K y : ℂ) * g (x - y) with hFdef set F' : ℝ → ℂ := fun x => ∫ y : ℝ, (K' y : ℂ) * g (x - y) with hF'def have hderiv : ∀ x : ℝ, HasDerivAt F (F' x) x := by intro x have h := hasDerivAt_kernel_convolution hKcs hKcd hg x rw [hderivK] at h exact h have hFdiff : Differentiable ℝ F := fun x => (hderiv x).differentiableAt have hFcont : Continuous F := hFdiff.continuous have hF'cont : Continuous F' := by have hd2 : ∀ x : ℝ, HasDerivAt F' (∫ y : ℝ, ((deriv K' y : ℝ) : ℂ) * g (x - y)) x := fun x => hasDerivAt_kernel_convolution hK'cs hK'cd hg x have hF'diff : Differentiable ℝ F' := fun x => (hd2 x).differentiableAt exact hF'diff.continuous -- the two Young bounds have hyoung : ∀ H : ℝ → ℝ, Measurable H → (∫⁻ z : ℝ, ‖∫ y : ℝ, (H y : ℂ) * g (z - y)‖ₑ ^ q) ^ (1 / q) ≤ (∫⁻ y : ℝ, ‖H y‖ₑ ^ r) ^ (1 / r) * (∫⁻ z : ℝ, ‖g z‖ₑ ^ p) ^ (1 / p) := by intro H hH have h := lintegral_convolution_rpow_le_young hp hr hrq hpq hrel hH hg.measurable refine le_trans (ENNReal.rpow_le_rpow h (by positivity)) (le_of_eq ?_) exact young_rpow_inv hp0 hq0 hr0 refine le_trans (lintegral_iSup_enorm_translate_rpow_le hδ hcov hFcont hF'cont hderiv hq1.le) ?_ refine mul_le_mul' le_rfl (ENNReal.rpow_le_rpow ?_ hq0.le) exact add_le_add (hyoung K hKm) (mul_le_mul' le_rfl (hyoung K' hK'm)) /-! ## The dilated bump, and the kernel bound in real form -/ /-- BRS (5.12) for the real-valued kernel. -/ theorem lintegral_enorm_brsTruncConvReal_rpow_le_scale {k : ℕ} {δ M Mu A r : ℝ} {ψ : ℝ → ℝ} (hψ : Continuous ψ) (hδ : 0 < δ) (h5δ : 5 * δ ≤ (2 : ℝ) ^ (-(k : ℝ))) (hsupp : ∀ y : ℝ, δ < |y| → ψ y = 0) (hbd : ∀ y : ℝ, |ψ y| ≤ M) (hMnn : 0 ≤ M) (hMu : M * δ ≤ Mu) (hA : (∫ y : ℝ, |ψ y|) ≤ A) (hAnn : 0 ≤ A) (hAe : (∫⁻ y : ℝ, ENNReal.ofReal |ψ y|) ≤ ENNReal.ofReal A) {N : ℕ} (hmom : ∀ i : ℕ, i < N + 1 → (∫ y : ℝ, y ^ i * ψ y) = 0) (hr : 1 ≤ r) : (∫⁻ x : ℝ, ‖brsTruncConvReal k ψ x‖ₑ ^ r) ≤ ENNReal.ofReal (brsKernelConst Mu A N r * δ ^ (1 - r / 2)) := by have heq : (∫⁻ x : ℝ, ‖brsTruncConvReal k ψ x‖ₑ ^ r) = ∫⁻ x : ℝ, ‖brsTruncConv k ψ x‖ₑ ^ r := lintegral_congr fun x => by rw [enorm_brsTruncConv k ψ x] rw [heq] exact lintegral_enorm_brsTruncConv_rpow_le_scale hψ hδ h5δ hsupp hbd hMnn hMu hA hAnn hAe hmom hr /-- The height of a dilate. -/ theorem abs_brsDilate_le {φ : ℝ → ℝ} {M : ℝ} (hbd : ∀ x : ℝ, |φ x| ≤ M) (j : ℕ) (y : ℝ) : |brsDilate φ j y| ≤ (2 : ℝ) ^ j * M := by change |(2 : ℝ) ^ j * φ ((2 : ℝ) ^ j * y)| ≤ (2 : ℝ) ^ j * M rw [abs_mul, abs_of_pos (by positivity : (0 : ℝ) < (2 : ℝ) ^ j)] exact mul_le_mul_of_nonneg_left (hbd _) (by positivity) /-- The support of a dilate, in the form used downstream. -/ theorem brsDilate_eq_zero_of_abs_gt {φ : ℝ → ℝ} {R : ℝ} (hR : tsupport φ ⊆ Metric.closedBall 0 R) (j : ℕ) {y : ℝ} (hy : R / 2 ^ j < |y|) : brsDilate φ j y = 0 := brsDilate_eq_zero_of_lt hR j hy /-- **The derivative of a dilate.** -/ theorem deriv_brsDilate {φ : ℝ → ℝ} (hφ : ContDiff ℝ 1 φ) (j : ℕ) : deriv (brsDilate φ j) = fun y : ℝ => (2 : ℝ) ^ j * brsDilate (deriv φ) j y := by have hdiff : Differentiable ℝ φ := hφ.differentiable (by norm_num) funext y have h1 : HasDerivAt (fun z : ℝ => (2 : ℝ) ^ j * z) ((2 : ℝ) ^ j) y := by simpa using (hasDerivAt_id y).const_mul ((2 : ℝ) ^ j) have h2 : HasDerivAt φ (deriv φ ((2 : ℝ) ^ j * y)) ((2 : ℝ) ^ j * y) := (hdiff ((2 : ℝ) ^ j * y)).hasDerivAt have h3 : HasDerivAt (fun z : ℝ => φ ((2 : ℝ) ^ j * z)) (deriv φ ((2 : ℝ) ^ j * y) * (2 : ℝ) ^ j) y := h2.comp y h1 have h4 : HasDerivAt (brsDilate φ j) ((2 : ℝ) ^ j * (deriv φ ((2 : ℝ) ^ j * y) * (2 : ℝ) ^ j)) y := h3.const_mul ((2 : ℝ) ^ j) rw [h4.deriv] change (2 : ℝ) ^ j * (deriv φ ((2 : ℝ) ^ j * y) * (2 : ℝ) ^ j) = (2 : ℝ) ^ j * ((2 : ℝ) ^ j * deriv φ ((2 : ℝ) ^ j * y)) ring /-! ## The kernel bound for a dilated bump -/ theorem rpow_neg_natCast_two (j : ℕ) : (2 : ℝ) ^ (-(j : ℝ)) = ((2 : ℝ) ^ j)⁻¹ := by rw [Real.rpow_neg (by norm_num), Real.rpow_natCast] theorem lintegral_ofReal_abs_le_of_integrable {ψ : ℝ → ℝ} (h : Integrable ψ volume) {A : ℝ} (hA : (∫ y : ℝ, |ψ y|) ≤ A) : (∫⁻ y : ℝ, ENNReal.ofReal |ψ y|) ≤ ENNReal.ofReal A := by have hnn : 0 ≤ᵐ[volume] fun y : ℝ => |ψ y| := Filter.Eventually.of_forall fun y => abs_nonneg _ rw [← ofReal_integral_eq_lintegral_ofReal h.abs hnn] exact ENNReal.ofReal_le_ofReal hA /-- The derivative of a dilate is again a dilate. -/ theorem deriv_brsDilate_eq {φ : ℝ → ℝ} (hφ : ContDiff ℝ 1 φ) (j : ℕ) : deriv (brsDilate φ j) = brsDilate (fun x : ℝ => (2 : ℝ) ^ j * deriv φ x) j := by rw [deriv_brsDilate hφ] funext y change (2 : ℝ) ^ j * ((2 : ℝ) ^ j * deriv φ ((2 : ℝ) ^ j * y)) = (2 : ℝ) ^ j * ((2 : ℝ) ^ j * deriv φ ((2 : ℝ) ^ j * y)) rfl /-- **BRS (5.12) for a dilated bump.** The `L^r` norm of `h_k * υ_j` is `(2^{-j})^{1/r - 1/2}`. -/ theorem lintegral_enorm_brsTruncConvReal_dilate_le {k j : ℕ} {υ : ℝ → ℝ} {Mu A r : ℝ} (hυc : Continuous υ) (hcs : HasCompactSupport υ) (hR : tsupport υ ⊆ Metric.closedBall 0 1) (hbd : ∀ x : ℝ, |υ x| ≤ Mu) (hA : (∫ y : ℝ, |υ y|) ≤ A) (hAnn : 0 ≤ A) {N : ℕ} (hmom : ∀ i : ℕ, i < N + 1 → (∫ y : ℝ, y ^ i * υ y) = 0) (hr : 1 ≤ r) (hkj : 5 * (2 : ℝ) ^ (-(j : ℝ)) ≤ (2 : ℝ) ^ (-(k : ℝ))) : (∫⁻ x : ℝ, ‖brsTruncConvReal k (brsDilate υ j) x‖ₑ ^ r) ≤ ENNReal.ofReal (brsKernelConst Mu A N r * ((2 : ℝ) ^ (-(j : ℝ))) ^ (1 - r / 2)) := by have h2j : (0 : ℝ) < (2 : ℝ) ^ j := by positivity have hδ : (0 : ℝ) < (2 : ℝ) ^ (-(j : ℝ)) := Real.rpow_pos_of_pos (by norm_num) _ have hMunn : 0 ≤ Mu := le_trans (abs_nonneg (υ 0)) (hbd 0) have hinv : (2 : ℝ) ^ (-(j : ℝ)) = ((2 : ℝ) ^ j)⁻¹ := rpow_neg_natCast_two j refine lintegral_enorm_brsTruncConvReal_rpow_le_scale (continuous_brsDilate hυc j) hδ hkj ?_ (abs_brsDilate_le hbd j) (by positivity) ?_ ?_ hAnn ?_ ?_ hr · -- the support intro y hy refine brsDilate_eq_zero_of_lt hR j ?_ rwa [show (1 : ℝ) / 2 ^ j = (2 : ℝ) ^ (-(j : ℝ)) by rw [hinv, one_div]] · -- `M · δ ≤ Mu` rw [hinv] exact le_of_eq (by field_simp) · -- the `L¹` norm rw [integral_abs_brsDilate] exact hA · -- the `L¹` norm, in `ℝ≥0∞` refine lintegral_ofReal_abs_le_of_integrable ?_ ?_ · exact (continuous_brsDilate hυc j).integrable_of_hasCompactSupport (hasCompactSupport_brsDilate hcs j) · rw [integral_abs_brsDilate] exact hA · -- the vanishing moments intro i hi rw [integral_pow_mul_brsDilate hυc hcs i j, hmom i hi, mul_zero] /-! ## Homogeneity of the kernel constant, and taking the `r`-th root -/ /-- The kernel constant is homogeneous of degree `r` in the size of the bump. -/ theorem brsKernelConst_smul {Mu A lam r : ℝ} (hlam : 0 ≤ lam) (hMu : 0 ≤ Mu) (hA : 0 ≤ A) (N : ℕ) : brsKernelConst (lam * Mu) (lam * A) N r = lam ^ r * brsKernelConst Mu A N r := by have hPnn : (0 : ℝ) ≤ ∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ)) := by refine Finset.prod_nonneg fun i _ => ?_ have : (0 : ℝ) ≤ (i : ℝ) := Nat.cast_nonneg i linarith have hfacpos : (0 : ℝ) < (Nat.factorial (N + 1) : ℝ) := by exact_mod_cast Nat.factorial_pos (N + 1) have h2nn : (0 : ℝ) ≤ (2 : ℝ) ^ (-(1 / 2) : ℝ) := Real.rpow_nonneg (by norm_num) _ have e1 : (2 * Real.sqrt 5 * (lam * Mu)) ^ r = lam ^ r * (2 * Real.sqrt 5 * Mu) ^ r := by rw [show 2 * Real.sqrt 5 * (lam * Mu) = lam * (2 * Real.sqrt 5 * Mu) by ring, Real.mul_rpow hlam (by positivity)] have e2 : ((∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ))) / (Nat.factorial (N + 1) : ℝ) * (lam * A)) ^ r = lam ^ r * ((∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ))) / (Nat.factorial (N + 1) : ℝ) * A) ^ r := by rw [show (∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ))) / (Nat.factorial (N + 1) : ℝ) * (lam * A) = lam * ((∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ))) / (Nat.factorial (N + 1) : ℝ) * A) by ring, Real.mul_rpow hlam (by positivity)] have e3 : ((lam * A) * (2 : ℝ) ^ (-(1 / 2) : ℝ)) ^ r = lam ^ r * (A * (2 : ℝ) ^ (-(1 / 2) : ℝ)) ^ r := by rw [show lam * A * (2 : ℝ) ^ (-(1 / 2) : ℝ) = lam * (A * (2 : ℝ) ^ (-(1 / 2) : ℝ)) by ring, Real.mul_rpow hlam (by positivity)] rw [brsKernelConst, brsKernelConst, e1, e2, e3] ring /-- Taking the `r`-th root of the kernel bound. -/ theorem kernel_scale_rpow {C δ r : ℝ} (hC : 0 ≤ C) (hδ : 0 < δ) (hr : 0 < r) : (C * δ ^ (1 - r / 2)) ^ (1 / r) = C ^ (1 / r) * δ ^ (1 / r - 1 / 2) := by rw [Real.mul_rpow hC (Real.rpow_nonneg hδ.le _), ← Real.rpow_mul hδ.le] congr 2 field_simp theorem rpow_inv_of_le_ofReal {X : ENNReal} {C : ℝ} (hC : 0 ≤ C) {r : ℝ} (hr : 0 < r) (h : X ≤ ENNReal.ofReal C) : X ^ (1 / r) ≤ ENNReal.ofReal (C ^ (1 / r)) := by refine le_trans (ENNReal.rpow_le_rpow h (by positivity)) (le_of_eq ?_) rw [ENNReal.ofReal_rpow_of_nonneg hC (by positivity)] /-! ## Elementary properties of a rescaled bump -/ theorem contDiff_brsDilate {φ : ℝ → ℝ} {n : ℕ} (hφ : ContDiff ℝ n φ) (j : ℕ) : ContDiff ℝ n (brsDilate φ j) := by change ContDiff ℝ n fun x : ℝ => (2 : ℝ) ^ j * φ ((2 : ℝ) ^ j * x) exact contDiff_const.mul (hφ.comp (contDiff_const.mul contDiff_id)) theorem support_const_mul_eq {φ : ℝ → ℝ} {c : ℝ} (hc : c ≠ 0) : Function.support (fun x : ℝ => c * φ x) = Function.support φ := by ext x simp only [Function.mem_support, ne_eq, mul_eq_zero, not_or] constructor · intro h exact h.2 · intro h exact ⟨hc, h⟩ theorem tsupport_const_mul_eq {φ : ℝ → ℝ} {c : ℝ} (hc : c ≠ 0) : tsupport (fun x : ℝ => c * φ x) = tsupport φ := by rw [tsupport, tsupport, support_const_mul_eq hc] theorem hasCompactSupport_const_mul {φ : ℝ → ℝ} {c : ℝ} (hc : c ≠ 0) (h : HasCompactSupport φ) : HasCompactSupport (fun x : ℝ => c * φ x) := by rw [HasCompactSupport, tsupport_const_mul_eq hc] exact h theorem integral_abs_const_mul {φ : ℝ → ℝ} {c : ℝ} (hc : 0 ≤ c) : (∫ y : ℝ, |c * φ y|) = c * ∫ y : ℝ, |φ y| := by rw [← integral_const_mul] refine integral_congr_ae (Filter.Eventually.of_forall fun y => ?_) change |c * φ y| = c * |φ y| rw [abs_mul, abs_of_nonneg hc] /-! ## (5.9) for a dilated bump -/ theorem brsKernelConst_nonneg {Mu A : ℝ} (hMu : 0 ≤ Mu) (hA : 0 ≤ A) (N : ℕ) {r : ℝ} (hr : 1 ≤ r) : 0 ≤ brsKernelConst Mu A N r := by have hNnn : (0 : ℝ) ≤ (N : ℝ) := Nat.cast_nonneg N have hwneg : (-(1 / 2) - ((N : ℝ) + 1)) * r + 1 < 0 := by nlinarith have hPnn : (0 : ℝ) ≤ ∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ)) := by refine Finset.prod_nonneg fun i _ => ?_ have : (0 : ℝ) ≤ (i : ℝ) := Nat.cast_nonneg i linarith have hfacpos : (0 : ℝ) < (Nat.factorial (N + 1) : ℝ) := by exact_mod_cast Nat.factorial_pos (N + 1) have h1 : (0 : ℝ) ≤ 5 * (2 * Real.sqrt 5 * Mu) ^ r := by have : (0 : ℝ) ≤ (2 * Real.sqrt 5 * Mu) ^ r := Real.rpow_nonneg (by positivity) _ linarith have h2 : (0 : ℝ) ≤ ((∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ))) / (Nat.factorial (N + 1) : ℝ) * A) ^ r * ((3 : ℝ) ^ ((-(1 / 2) - ((N : ℝ) + 1)) * r + 1) / -((-(1 / 2) - ((N : ℝ) + 1)) * r + 1)) := by have ha : (0 : ℝ) ≤ ((∏ i ∈ Finset.range (N + 1), ((1 : ℝ) / 2 + (i : ℝ))) / (Nat.factorial (N + 1) : ℝ) * A) ^ r := Real.rpow_nonneg (by positivity) _ have hb : (0 : ℝ) < (3 : ℝ) ^ ((-(1 / 2) - ((N : ℝ) + 1)) * r + 1) := Real.rpow_pos_of_pos (by norm_num) _ have hc : (0 : ℝ) < -((-(1 / 2) - ((N : ℝ) + 1)) * r + 1) := by linarith positivity have h3 : (0 : ℝ) ≤ 2 * (A * (2 : ℝ) ^ (-(1 / 2) : ℝ)) ^ r := by have h2' : (0 : ℝ) ≤ (2 : ℝ) ^ (-(1 / 2) : ℝ) := Real.rpow_nonneg (by norm_num) _ have : (0 : ℝ) ≤ (A * (2 : ℝ) ^ (-(1 / 2) : ℝ)) ^ r := Real.rpow_nonneg (by positivity) _ linarith rw [brsKernelConst] linarith /-- **BRS (5.9) for a dilated bump.** The maximal function over `E` of the smoothed operator at scale `2^{-j}` obeys the `L^q` bound with the covering number of `E` at that scale, and the gain `(2^{-j})^{1/r - 1/2}`. -/ theorem brs_5_9_dilate {E : Set ℝ} {ι : Finset ℝ} {k j : ℕ} (hcov : IsIntervalCover E ((2 : ℝ) ^ (-(j : ℝ))) ι) {υ : ℝ → ℝ} (hυ : ContDiff ℝ 1 υ) (hcs : HasCompactSupport υ) (hR : tsupport υ ⊆ Metric.closedBall 0 1) (hυ' : ContDiff ℝ 1 (deriv υ)) (hcs' : HasCompactSupport (deriv υ)) (hR' : tsupport (deriv υ) ⊆ Metric.closedBall 0 1) {Mu A Mu' A' : ℝ} (hbd : ∀ x : ℝ, |υ x| ≤ Mu) (hA : (∫ y : ℝ, |υ y|) ≤ A) (hAnn : 0 ≤ A) (hbd' : ∀ x : ℝ, |deriv υ x| ≤ Mu') (hA' : (∫ y : ℝ, |deriv υ y|) ≤ A') (hA'nn : 0 ≤ A') {N : ℕ} (hmom : ∀ i : ℕ, i < N + 1 → (∫ y : ℝ, y ^ i * υ y) = 0) (hmom' : ∀ i : ℕ, i < N + 1 → (∫ y : ℝ, y ^ i * deriv υ y) = 0) {g : ℝ → ℂ} (hg : Continuous g) {p q r : ℝ} (hp : 1 ≤ p) (hr : 1 < r) (hrq : r < q) (hpq : p < q) (hrel : 1 / p + 1 / r = 1 + 1 / q) (hkj : 5 * (2 : ℝ) ^ (-(j : ℝ)) ≤ (2 : ℝ) ^ (-(k : ℝ))) : (∫⁻ x : ℝ, (⨆ t ∈ E, ‖∫ y : ℝ, ((brsTruncConvReal k (brsDilate υ j) y : ℝ) : ℂ) * g (t - x - y)‖ₑ) ^ q) ≤ (ι.card : ENNReal) * (ENNReal.ofReal ((brsKernelConst Mu A N r ^ (1 / r) + brsKernelConst Mu' A' N r ^ (1 / r)) * ((2 : ℝ) ^ (-(j : ℝ))) ^ (1 / r - 1 / 2)) * (∫⁻ z : ℝ, ‖g z‖ₑ ^ p) ^ (1 / p)) ^ q := by have hr0 : (0 : ℝ) < r := lt_trans zero_lt_one hr have hq0 : (0 : ℝ) < q := lt_trans (lt_trans zero_lt_one hr) hrq have hMunn : 0 ≤ Mu := le_trans (abs_nonneg (υ 0)) (hbd 0) have hMu'nn : 0 ≤ Mu' := le_trans (abs_nonneg (deriv υ 0)) (hbd' 0) have h2j : (0 : ℝ) < (2 : ℝ) ^ j := by positivity set δ : ℝ := (2 : ℝ) ^ (-(j : ℝ)) with hδdef have hδ : (0 : ℝ) < δ := Real.rpow_pos_of_pos (by norm_num) _ have hδinv : δ = ((2 : ℝ) ^ j)⁻¹ := rpow_neg_natCast_two j have hδ2j : δ * (2 : ℝ) ^ j = 1 := by rw [hδinv] field_simp -- properties of the dilated bump and of its derivative have hcsD : HasCompactSupport (brsDilate υ j) := hasCompactSupport_brsDilate hcs j have hυD : ContDiff ℝ 1 (brsDilate υ j) := contDiff_brsDilate hυ j have hderivD : deriv (brsDilate υ j) = brsDilate (fun x : ℝ => (2 : ℝ) ^ j * deriv υ x) j := deriv_brsDilate_eq hυ j have hcs2 : HasCompactSupport (fun x : ℝ => (2 : ℝ) ^ j * deriv υ x) := hasCompactSupport_const_mul (ne_of_gt h2j) hcs' have hυ2 : ContDiff ℝ 1 (fun x : ℝ => (2 : ℝ) ^ j * deriv υ x) := contDiff_const.mul hυ' have hR2 : tsupport (fun x : ℝ => (2 : ℝ) ^ j * deriv υ x) ⊆ Metric.closedBall 0 1 := by rw [tsupport_const_mul_eq (ne_of_gt h2j)] exact hR' have hcsD' : HasCompactSupport (deriv (brsDilate υ j)) := by rw [hderivD] exact hasCompactSupport_brsDilate hcs2 j have hυD' : ContDiff ℝ 1 (deriv (brsDilate υ j)) := by rw [hderivD] exact contDiff_brsDilate hυ2 j -- the core estimate refine le_trans (brs_5_9_core hδ hcov k hcsD hυD hcsD' hυD' hg hp hr hrq hpq hrel) ?_ refine mul_le_mul' le_rfl (ENNReal.rpow_le_rpow ?_ hq0.le) -- the two kernel norms have hCnn : 0 ≤ brsKernelConst Mu A N r := brsKernelConst_nonneg hMunn hAnn N hr.le have hC'nn : 0 ≤ brsKernelConst Mu' A' N r := brsKernelConst_nonneg hMu'nn hA'nn N hr.le have hK : (∫⁻ y : ℝ, ‖brsTruncConvReal k (brsDilate υ j) y‖ₑ ^ r) ^ (1 / r) ≤ ENNReal.ofReal (brsKernelConst Mu A N r ^ (1 / r) * δ ^ (1 / r - 1 / 2)) := by have hbase := lintegral_enorm_brsTruncConvReal_dilate_le hυ.continuous hcs hR hbd hA hAnn hmom hr.le hkj refine le_trans (rpow_inv_of_le_ofReal (by positivity) hr0 hbase) (le_of_eq ?_) rw [kernel_scale_rpow hCnn hδ hr0] have hK' : (∫⁻ y : ℝ, ‖brsTruncConvReal k (deriv (brsDilate υ j)) y‖ₑ ^ r) ^ (1 / r) ≤ ENNReal.ofReal ((2 : ℝ) ^ j * brsKernelConst Mu' A' N r ^ (1 / r) * δ ^ (1 / r - 1 / 2)) := by have hbd2 : ∀ x : ℝ, |(2 : ℝ) ^ j * deriv υ x| ≤ (2 : ℝ) ^ j * Mu' := by intro x rw [abs_mul, abs_of_pos h2j] exact mul_le_mul_of_nonneg_left (hbd' x) h2j.le have hA2 : (∫ y : ℝ, |(2 : ℝ) ^ j * deriv υ y|) ≤ (2 : ℝ) ^ j * A' := by rw [integral_abs_const_mul h2j.le] exact mul_le_mul_of_nonneg_left hA' h2j.le have hmom2 : ∀ i : ℕ, i < N + 1 → (∫ y : ℝ, y ^ i * ((2 : ℝ) ^ j * deriv υ y)) = 0 := by intro i hi have hre : (∫ y : ℝ, y ^ i * ((2 : ℝ) ^ j * deriv υ y)) = (2 : ℝ) ^ j * ∫ y : ℝ, y ^ i * deriv υ y := by rw [← integral_const_mul] refine integral_congr_ae (Filter.Eventually.of_forall fun y => ?_) change y ^ i * ((2 : ℝ) ^ j * deriv υ y) = (2 : ℝ) ^ j * (y ^ i * deriv υ y) ring rw [hre, hmom' i hi, mul_zero] have hbase := lintegral_enorm_brsTruncConvReal_dilate_le hυ2.continuous hcs2 hR2 hbd2 hA2 (by positivity) hmom2 hr.le hkj rw [hderivD] rw [brsKernelConst_smul h2j.le hMu'nn hA'nn N] at hbase refine le_trans (rpow_inv_of_le_ofReal (by positivity) hr0 hbase) (le_of_eq ?_) rw [kernel_scale_rpow (by positivity) hδ hr0] congr 2 rw [Real.mul_rpow (Real.rpow_nonneg h2j.le _) hC'nn, ← Real.rpow_mul h2j.le, mul_one_div, div_self hr0.ne', Real.rpow_one] -- combine set G : ENNReal := (∫⁻ z : ℝ, ‖g z‖ₑ ^ p) ^ (1 / p) with hG have hstep : (∫⁻ y : ℝ, ‖brsTruncConvReal k (brsDilate υ j) y‖ₑ ^ r) ^ (1 / r) * G + ENNReal.ofReal δ * ((∫⁻ y : ℝ, ‖brsTruncConvReal k (deriv (brsDilate υ j)) y‖ₑ ^ r) ^ (1 / r) * G) ≤ ENNReal.ofReal (brsKernelConst Mu A N r ^ (1 / r) * δ ^ (1 / r - 1 / 2)) * G + ENNReal.ofReal (brsKernelConst Mu' A' N r ^ (1 / r) * δ ^ (1 / r - 1 / 2)) * G := by refine add_le_add (mul_le_mul' hK le_rfl) ?_ calc ENNReal.ofReal δ * ((∫⁻ y : ℝ, ‖brsTruncConvReal k (deriv (brsDilate υ j)) y‖ₑ ^ r) ^ (1 / r) * G) ≤ ENNReal.ofReal δ * (ENNReal.ofReal ((2 : ℝ) ^ j * brsKernelConst Mu' A' N r ^ (1 / r) * δ ^ (1 / r - 1 / 2)) * G) := mul_le_mul' le_rfl (mul_le_mul' hK' le_rfl) _ = ENNReal.ofReal (brsKernelConst Mu' A' N r ^ (1 / r) * δ ^ (1 / r - 1 / 2)) * G := by rw [← mul_assoc, ← ENNReal.ofReal_mul hδ.le] congr 2 calc δ * ((2 : ℝ) ^ j * brsKernelConst Mu' A' N r ^ (1 / r) * δ ^ (1 / r - 1 / 2)) = (δ * (2 : ℝ) ^ j) * (brsKernelConst Mu' A' N r ^ (1 / r) * δ ^ (1 / r - 1 / 2)) := by ring _ = brsKernelConst Mu' A' N r ^ (1 / r) * δ ^ (1 / r - 1 / 2) := by rw [hδ2j, one_mul] refine le_trans hstep (le_of_eq ?_) rw [← add_mul, ← ENNReal.ofReal_add (by positivity) (by positivity)] congr 2 ring /-! ## The radial weight on a dyadic window -/ /-- On the window `I_k` every power of the radius is comparable to the same power of `2^{-k}`. -/ theorem rpow_le_of_mem_brsRadiusWindow {k : ℕ} {r : ℝ} (hr : r ∈ brsRadiusWindow k) (e : ℝ) : r ^ e ≤ (2 : ℝ) ^ |e| * ((2 : ℝ) ^ (-(k : ℝ))) ^ e := by have hApos : (0 : ℝ) < (2 : ℝ) ^ (-(k : ℝ) - 1) := Real.rpow_pos_of_pos (by norm_num) _ have hBpos : (0 : ℝ) < (2 : ℝ) ^ (-(k : ℝ)) := Real.rpow_pos_of_pos (by norm_num) _ have hrpos : 0 < r := brsRadiusWindow_pos hr have hBenn : (0 : ℝ) ≤ ((2 : ℝ) ^ (-(k : ℝ))) ^ e := Real.rpow_nonneg hBpos.le e have h1e : (1 : ℝ) ≤ (2 : ℝ) ^ |e| := by rw [show (1 : ℝ) = (2 : ℝ) ^ (0 : ℝ) by norm_num] exact Real.rpow_le_rpow_of_exponent_le (by norm_num) (abs_nonneg e) have hhalf : (2 : ℝ) ^ (-(k : ℝ) - 1) = (2 : ℝ) ^ (-(k : ℝ)) * (2 : ℝ) ^ (-1 : ℝ) := by rw [← Real.rpow_add (by norm_num), show -(k : ℝ) + (-1 : ℝ) = -(k : ℝ) - 1 by ring] rcases le_or_gt 0 e with he | he · calc r ^ e ≤ ((2 : ℝ) ^ (-(k : ℝ))) ^ e := Real.rpow_le_rpow hrpos.le hr.2 he _ ≤ (2 : ℝ) ^ |e| * ((2 : ℝ) ^ (-(k : ℝ))) ^ e := by nlinarith · have hstep : r ^ e ≤ ((2 : ℝ) ^ (-(k : ℝ) - 1)) ^ e := Real.rpow_le_rpow_of_nonpos hApos hr.1.le he.le have hval : ((2 : ℝ) ^ (-(k : ℝ) - 1)) ^ e = ((2 : ℝ) ^ (-(k : ℝ))) ^ e * (2 : ℝ) ^ (-e) := by rw [hhalf, Real.mul_rpow hBpos.le (Real.rpow_pos_of_pos (by norm_num : (0 : ℝ) < 2) _).le, ← Real.rpow_mul (by norm_num : (0 : ℝ) ≤ 2) (-1 : ℝ) e, show (-1 : ℝ) * e = -e by ring] refine le_trans hstep (le_of_eq hval |>.trans ?_) rw [mul_comm] refine mul_le_mul_of_nonneg_right ?_ hBenn exact Real.rpow_le_rpow_of_exponent_le (by norm_num) (neg_le_abs e) /-- `𝒜_{k,m}`, as a maximal function of the radius. -/ def brsAmMax (k j : ℕ) (υ : ℝ → ℝ) (g : ℝ → ℂ) (E : Set ℝ) (r : ℝ) : ENNReal := (brsRadiusWindow k).indicator (fun r => ENNReal.ofReal (r ^ (-(1 / 2) : ℝ)) * ⨆ t ∈ E, ‖∫ y : ℝ, ((brsTruncConvReal k (brsDilate υ j) y : ℝ) : ℂ) * g (t - r - y)‖ₑ) r /-- **The radial weight costs `(2^{-k})^{1 - q/2}`.** -/ theorem lintegral_brsAmMax_rpow_le (k j : ℕ) (υ : ℝ → ℝ) (g : ℝ → ℂ) (E : Set ℝ) {q : ℝ} (hq : 0 < q) : (∫⁻ r : ℝ, brsAmMax k j υ g E r ^ q * ENNReal.ofReal r) ≤ ENNReal.ofReal ((2 : ℝ) ^ |1 - q / 2| * ((2 : ℝ) ^ (-(k : ℝ))) ^ (1 - q / 2)) * ∫⁻ r : ℝ, (⨆ t ∈ E, ‖∫ y : ℝ, ((brsTruncConvReal k (brsDilate υ j) y : ℝ) : ℂ) * g (t - r - y)‖ₑ) ^ q := by set C : ℝ := (2 : ℝ) ^ |1 - q / 2| * ((2 : ℝ) ^ (-(k : ℝ))) ^ (1 - q / 2) with hC have hCnn : 0 ≤ C := by rw [hC] have h1 : (0 : ℝ) ≤ (2 : ℝ) ^ |1 - q / 2| := (Real.rpow_pos_of_pos (by norm_num) _).le have h2 : (0 : ℝ) ≤ ((2 : ℝ) ^ (-(k : ℝ))) ^ (1 - q / 2) := Real.rpow_nonneg (Real.rpow_pos_of_pos (by norm_num) _).le _ positivity have hpt : ∀ r : ℝ, brsAmMax k j υ g E r ^ q * ENNReal.ofReal r ≤ ENNReal.ofReal C * (⨆ t ∈ E, ‖∫ y : ℝ, ((brsTruncConvReal k (brsDilate υ j) y : ℝ) : ℂ) * g (t - r - y)‖ₑ) ^ q := by intro r by_cases hr : r ∈ brsRadiusWindow k · have hrpos : 0 < r := brsRadiusWindow_pos hr set S : ENNReal := ⨆ t ∈ E, ‖∫ y : ℝ, ((brsTruncConvReal k (brsDilate υ j) y : ℝ) : ℂ) * g (t - r - y)‖ₑ with hS have hval : brsAmMax k j υ g E r ^ q * ENNReal.ofReal r = ENNReal.ofReal (r ^ (1 - q / 2)) * S ^ q := by rw [brsAmMax, Set.indicator_of_mem hr] rw [ENNReal.mul_rpow_of_nonneg _ _ hq.le, ENNReal.ofReal_rpow_of_pos (Real.rpow_pos_of_pos hrpos _), ← Real.rpow_mul hrpos.le] rw [mul_comm (ENNReal.ofReal (r ^ (-(1 / 2) * q))) (S ^ q), mul_assoc] rw [mul_comm (ENNReal.ofReal (r ^ (1 - q / 2))) (S ^ q)] congr 1 rw [← ENNReal.ofReal_mul (Real.rpow_nonneg hrpos.le _)] congr 1 calc r ^ (-(1 / 2) * q) * r = r ^ (-(1 / 2) * q) * r ^ (1 : ℝ) := by rw [Real.rpow_one] _ = r ^ (-(1 / 2) * q + 1) := (Real.rpow_add hrpos _ _).symm _ = r ^ (1 - q / 2) := by congr 1 ring rw [hval] exact mul_le_mul' (ENNReal.ofReal_le_ofReal (rpow_le_of_mem_brsRadiusWindow hr (1 - q / 2))) le_rfl · rw [brsAmMax, Set.indicator_of_notMem hr, ENNReal.zero_rpow_of_pos hq, zero_mul] exact zero_le calc (∫⁻ r : ℝ, brsAmMax k j υ g E r ^ q * ENNReal.ofReal r) ≤ ∫⁻ r : ℝ, ENNReal.ofReal C * (⨆ t ∈ E, ‖∫ y : ℝ, ((brsTruncConvReal k (brsDilate υ j) y : ℝ) : ℂ) * g (t - r - y)‖ₑ) ^ q := lintegral_mono hpt _ = ENNReal.ofReal C * ∫⁻ r : ℝ, (⨆ t ∈ E, ‖∫ y : ℝ, ((brsTruncConvReal k (brsDilate υ j) y : ℝ) : ℂ) * g (t - r - y)‖ₑ) ^ q := lintegral_const_mul' _ _ ENNReal.ofReal_ne_top /-! ## (5.9) of BRS Putting the radial weight together with the maximal estimate. Writing `j = k + m`, `δ = 2^{-j}` and `1/r = 1 + 1/q - 1/p`, the two dyadic factors are `(2^{-k})^{1 - q/2}` from the weight `r^{-1/2} r dr` on `I_k` and `(2^{-j})^{1/r - 1/2}` from the kernel; after taking the `q`-th root they combine into `2^{k(1/p - 2/q)} 2^{-m(1/2 + 1/q - 1/p)}`, which is exactly the gain claimed in BRS (5.9). -/ /-- **BRS (5.9).** -/ theorem brs_5_9 {E : Set ℝ} {ι : Finset ℝ} {k j : ℕ} (hcov : IsIntervalCover E ((2 : ℝ) ^ (-(j : ℝ))) ι) {υ : ℝ → ℝ} (hυ : ContDiff ℝ 1 υ) (hcs : HasCompactSupport υ) (hR : tsupport υ ⊆ Metric.closedBall 0 1) (hυ' : ContDiff ℝ 1 (deriv υ)) (hcs' : HasCompactSupport (deriv υ)) (hR' : tsupport (deriv υ) ⊆ Metric.closedBall 0 1) {Mu A Mu' A' : ℝ} (hbd : ∀ x : ℝ, |υ x| ≤ Mu) (hA : (∫ y : ℝ, |υ y|) ≤ A) (hAnn : 0 ≤ A) (hbd' : ∀ x : ℝ, |deriv υ x| ≤ Mu') (hA' : (∫ y : ℝ, |deriv υ y|) ≤ A') (hA'nn : 0 ≤ A') {N : ℕ} (hmom : ∀ i : ℕ, i < N + 1 → (∫ y : ℝ, y ^ i * υ y) = 0) (hmom' : ∀ i : ℕ, i < N + 1 → (∫ y : ℝ, y ^ i * deriv υ y) = 0) {g : ℝ → ℂ} (hg : Continuous g) {p q r : ℝ} (hp : 1 ≤ p) (hr : 1 < r) (hrq : r < q) (hpq : p < q) (hrel : 1 / p + 1 / r = 1 + 1 / q) (hkj : 5 * (2 : ℝ) ^ (-(j : ℝ)) ≤ (2 : ℝ) ^ (-(k : ℝ))) : (∫⁻ x : ℝ, brsAmMax k j υ g E x ^ q * ENNReal.ofReal x) ≤ ENNReal.ofReal ((2 : ℝ) ^ |1 - q / 2| * ((2 : ℝ) ^ (-(k : ℝ))) ^ (1 - q / 2)) * ((ι.card : ENNReal) * (ENNReal.ofReal ((brsKernelConst Mu A N r ^ (1 / r) + brsKernelConst Mu' A' N r ^ (1 / r)) * ((2 : ℝ) ^ (-(j : ℝ))) ^ (1 / r - 1 / 2)) * (∫⁻ z : ℝ, ‖g z‖ₑ ^ p) ^ (1 / p)) ^ q) := by have hq0 : (0 : ℝ) < q := lt_trans (lt_trans zero_lt_one hr) hrq refine le_trans (lintegral_brsAmMax_rpow_le k j υ g E hq0) ?_ exact mul_le_mul' le_rfl (brs_5_9_dilate hcov hυ hcs hR hυ' hcs' hR' hbd hA hAnn hbd' hA' hA'nn hmom hmom' hg hp hr hrq hpq hrel hkj) /-- **BRS (5.9) with the covering number.** Taking a minimal cover turns the cardinality into `N(E, 2^{-k-m})`, which is the quantity appearing in `ω_m^{p,q}(E,k)`. -/ theorem brs_5_9_covering {E : Set ℝ} (hE : E ⊆ Icc (1 : ℝ) 2) {k j : ℕ} {υ : ℝ → ℝ} (hυ : ContDiff ℝ 1 υ) (hcs : HasCompactSupport υ) (hR : tsupport υ ⊆ Metric.closedBall 0 1) (hυ' : ContDiff ℝ 1 (deriv υ)) (hcs' : HasCompactSupport (deriv υ)) (hR' : tsupport (deriv υ) ⊆ Metric.closedBall 0 1) {Mu A Mu' A' : ℝ} (hbd : ∀ x : ℝ, |υ x| ≤ Mu) (hA : (∫ y : ℝ, |υ y|) ≤ A) (hAnn : 0 ≤ A) (hbd' : ∀ x : ℝ, |deriv υ x| ≤ Mu') (hA' : (∫ y : ℝ, |deriv υ y|) ≤ A') (hA'nn : 0 ≤ A') {N : ℕ} (hmom : ∀ i : ℕ, i < N + 1 → (∫ y : ℝ, y ^ i * υ y) = 0) (hmom' : ∀ i : ℕ, i < N + 1 → (∫ y : ℝ, y ^ i * deriv υ y) = 0) {g : ℝ → ℂ} (hg : Continuous g) {p q r : ℝ} (hp : 1 ≤ p) (hr : 1 < r) (hrq : r < q) (hpq : p < q) (hrel : 1 / p + 1 / r = 1 + 1 / q) (hkj : 5 * (2 : ℝ) ^ (-(j : ℝ)) ≤ (2 : ℝ) ^ (-(k : ℝ))) : (∫⁻ x : ℝ, brsAmMax k j υ g E x ^ q * ENNReal.ofReal x) ≤ ENNReal.ofReal ((2 : ℝ) ^ |1 - q / 2| * ((2 : ℝ) ^ (-(k : ℝ))) ^ (1 - q / 2)) * ((intervalCoveringNumber E ((2 : ℝ) ^ (-(j : ℝ))) : ENNReal) * (ENNReal.ofReal ((brsKernelConst Mu A N r ^ (1 / r) + brsKernelConst Mu' A' N r ^ (1 / r)) * ((2 : ℝ) ^ (-(j : ℝ))) ^ (1 / r - 1 / 2)) * (∫⁻ z : ℝ, ‖g z‖ₑ ^ p) ^ (1 / p)) ^ q) := by obtain ⟨ι, hcov, hcard⟩ := exists_intervalCover_card_eq_intervalCoveringNumber hE (Real.rpow_pos_of_pos (by norm_num : (0 : ℝ) < 2) (-(j : ℝ))) have h := brs_5_9 hcov hυ hcs hR hυ' hcs' hR' hbd hA hAnn hbd' hA' hA'nn hmom hmom' hg hp hr hrq hpq hrel hkj rwa [hcard] at h /-! ## Measurability of the maximal function A supremum of continuous functions is lower semicontinuous, hence measurable — no separability argument is needed, and the index set `E` may be arbitrary. -/ theorem measurable_iSup_enorm_translate {F : ℝ → ℂ} (hF : Continuous F) (E : Set ℝ) : Measurable fun r : ℝ => ⨆ t ∈ E, ‖F (t - r)‖ₑ := by have hlsc : LowerSemicontinuous fun r : ℝ => ⨆ t ∈ E, ‖F (t - r)‖ₑ := by refine lowerSemicontinuous_iSup fun t => ?_ refine lowerSemicontinuous_iSup fun _ => ?_ refine Continuous.lowerSemicontinuous ?_ exact continuous_enorm.comp (hF.comp (continuous_const.sub continuous_id)) exact hlsc.measurable theorem measurable_brsAmMax (k j : ℕ) {υ : ℝ → ℝ} (hυ : ContDiff ℝ 1 υ) (hcs : HasCompactSupport υ) {g : ℝ → ℂ} (hg : Continuous g) (E : Set ℝ) : Measurable (brsAmMax k j υ g E) := by have hK : Continuous (brsTruncConvReal k (brsDilate υ j)) := continuous_brsTruncConvReal k (hasCompactSupport_brsDilate hcs j) (contDiff_brsDilate hυ j) have hFcont : Continuous fun x : ℝ => ∫ y : ℝ, ((brsTruncConvReal k (brsDilate υ j) y : ℝ) : ℂ) * g (x - y) := by have hderiv := fun x : ℝ => hasDerivAt_kernel_convolution (hasCompactSupport_brsTruncConvReal k (hasCompactSupport_brsDilate hcs j)) (contDiff_brsTruncConvReal k (n := 1) (contDiff_brsDilate hυ j) (hasCompactSupport_brsDilate hcs j)) hg x have hdiff : Differentiable ℝ fun x : ℝ => ∫ y : ℝ, ((brsTruncConvReal k (brsDilate υ j) y : ℝ) : ℂ) * g (x - y) := fun x => (hderiv x).differentiableAt exact hdiff.continuous refine Measurable.indicator ?_ (measurableSet_brsRadiusWindow k) refine Measurable.mul ?_ (measurable_iSup_enorm_translate hFcont E) fun_prop /-! ## Minkowski's inequality for a countable sum Mathlib has the two-term triangle inequality in `L^p`; the sum over the Littlewood--Paley index needs the countable one. -/ /-- The triangle inequality in `L^q` for a finite sum. -/ theorem lintegral_Lp_finset_sum_le {α : Type*} [MeasurableSpace α] {μ : Measure α} {q : ℝ} (hq : 1 ≤ q) {f : ℕ → α → ENNReal} (hf : ∀ n, AEMeasurable (f n) μ) (s : Finset ℕ) : (∫⁻ a, (∑ n ∈ s, f n a) ^ q ∂μ) ^ (1 / q) ≤ ∑ n ∈ s, (∫⁻ a, f n a ^ q ∂μ) ^ (1 / q) := by have hq0 : (0 : ℝ) < q := lt_of_lt_of_le zero_lt_one hq induction s using Finset.induction with | empty => simp only [Finset.sum_empty, ENNReal.zero_rpow_of_pos hq0, lintegral_zero, ENNReal.zero_rpow_of_pos (by positivity : (0 : ℝ) < 1 / q)] exact le_rfl | insert n s hn ih => have hSm : AEMeasurable (fun a => ∑ m ∈ s, f m a) μ := by have h := Finset.aemeasurable_sum (μ := μ) s fun i _ => hf i have heq : (∑ i ∈ s, f i) = fun a => ∑ m ∈ s, f m a := by funext a rw [Finset.sum_apply] rwa [heq] at h have hadd := ENNReal.lintegral_Lp_add_le (μ := μ) (p := q) (hf n) hSm hq simp only [Pi.add_apply] at hadd calc (∫⁻ a, (∑ m ∈ insert n s, f m a) ^ q ∂μ) ^ (1 / q) = (∫⁻ a, (f n a + ∑ m ∈ s, f m a) ^ q ∂μ) ^ (1 / q) := by refine congrArg (fun z : ENNReal => z ^ (1 / q)) ?_ refine lintegral_congr fun a => ?_ rw [Finset.sum_insert hn] _ ≤ (∫⁻ a, f n a ^ q ∂μ) ^ (1 / q) + (∫⁻ a, (∑ m ∈ s, f m a) ^ q ∂μ) ^ (1 / q) := hadd _ ≤ (∫⁻ a, f n a ^ q ∂μ) ^ (1 / q) + ∑ m ∈ s, (∫⁻ a, f m a ^ q ∂μ) ^ (1 / q) := add_le_add le_rfl ih _ = ∑ m ∈ insert n s, (∫⁻ a, f m a ^ q ∂μ) ^ (1 / q) := by rw [Finset.sum_insert hn] /-- **Minkowski's inequality for a countable sum.** -/ theorem lintegral_Lp_tsum_le {α : Type*} [MeasurableSpace α] {μ : Measure α} {q : ℝ} (hq : 1 ≤ q) {f : ℕ → α → ENNReal} (hf : ∀ n, Measurable (f n)) : (∫⁻ a, (∑' n : ℕ, f n a) ^ q ∂μ) ^ (1 / q) ≤ ∑' n : ℕ, (∫⁻ a, f n a ^ q ∂μ) ^ (1 / q) := by have hq0 : (0 : ℝ) < q := lt_of_lt_of_le zero_lt_one hq set T : ENNReal := ∑' n : ℕ, (∫⁻ a, f n a ^ q ∂μ) ^ (1 / q) with hT set S : ℕ → α → ENNReal := fun M a => ∑ n ∈ Finset.range M, f n a with hS have hSmeas : ∀ M, Measurable fun a => S M a ^ q := by intro M refine Measurable.pow_const ?_ q exact Finset.measurable_sum _ fun i _ => hf i have hSmono : Monotone fun M a => S M a ^ q := by intro M M' hMM' a refine ENNReal.rpow_le_rpow ?_ hq0.le have hsub : Finset.range M ⊆ Finset.range M' := by intro x hx simp only [Finset.mem_range] at hx ⊢ omega exact Finset.sum_le_sum_of_subset hsub have hrp : ∀ a, (∑' n : ℕ, f n a) ^ q = ⨆ M : ℕ, S M a ^ q := by intro a rw [ENNReal.tsum_eq_iSup_nat] exact ennreal_iSup_rpow hq0 fun M => S M a rw [lintegral_congr hrp, lintegral_iSup hSmeas hSmono] have hbound : ∀ M : ℕ, (∫⁻ a, S M a ^ q ∂μ) ≤ T ^ q := by intro M have h1 : (∫⁻ a, S M a ^ q ∂μ) ^ (1 / q) ≤ T := by refine le_trans (lintegral_Lp_finset_sum_le hq (fun n => (hf n).aemeasurable) (Finset.range M)) ?_ exact ENNReal.sum_le_tsum _ have h2 := ENNReal.rpow_le_rpow h1 hq0.le rwa [← ENNReal.rpow_mul, show (1 : ℝ) / q * q = 1 by field_simp, ENNReal.rpow_one] at h2 have hsup : (⨆ M : ℕ, ∫⁻ a, S M a ^ q ∂μ) ≤ T ^ q := iSup_le hbound refine le_trans (ENNReal.rpow_le_rpow hsup (by positivity)) (le_of_eq ?_) rw [← ENNReal.rpow_mul, show q * (1 / q) = 1 by field_simp, ENNReal.rpow_one] /-! ## (5.10): the summation in `m` The radial measure `r dr` of the planar problem, and the triangle inequality in `L^q(r dr)` for the sum over the Littlewood--Paley index. -/ /-- The planar radial measure `r dr`. -/ def brsRadialMeasure : Measure ℝ := volume.withDensity fun r => ENNReal.ofReal r theorem lintegral_brsRadialMeasure {F : ℝ → ENNReal} (hF : Measurable F) : (∫⁻ r : ℝ, F r ∂brsRadialMeasure) = ∫⁻ r : ℝ, F r * ENNReal.ofReal r := by rw [brsRadialMeasure, lintegral_withDensity_eq_lintegral_mul _ ENNReal.measurable_ofReal hF] refine lintegral_congr fun r => ?_ change ENNReal.ofReal r * F r = F r * ENNReal.ofReal r ring /-- **BRS (5.10).** The triangle inequality in `L^q(r dr)` for the sum over the Littlewood--Paley index. -/ theorem lintegral_radial_Lp_tsum_le {q : ℝ} (hq : 1 ≤ q) {G : ℕ → ℝ → ENNReal} (hG : ∀ m, Measurable (G m)) : (∫⁻ r : ℝ, (∑' m : ℕ, G m r) ^ q * ENNReal.ofReal r) ^ (1 / q) ≤ ∑' m : ℕ, (∫⁻ r : ℝ, G m r ^ q * ENNReal.ofReal r) ^ (1 / q) := by have hsum : Measurable fun r : ℝ => (∑' m : ℕ, G m r) ^ q := by refine Measurable.pow_const ?_ q exact Measurable.tsum hG have h := lintegral_Lp_tsum_le (μ := brsRadialMeasure) hq hG rw [lintegral_brsRadialMeasure hsum] at h refine le_trans h (le_of_eq ?_) refine tsum_congr fun m => ?_ rw [lintegral_brsRadialMeasure ((hG m).pow_const q)] /-- **(5.10) for the terms `𝒜_{k,m}`.** -/ theorem brs_5_10 {E : Set ℝ} (k : ℕ) {υ : ℝ → ℝ} (hυ : ContDiff ℝ 1 υ) (hcs : HasCompactSupport υ) {g : ℕ → ℝ → ℂ} (hg : ∀ m, Continuous (g m)) {q : ℝ} (hq : 1 ≤ q) : (∫⁻ r : ℝ, (∑' m : ℕ, brsAmMax k (k + m) υ (g m) E r) ^ q * ENNReal.ofReal r) ^ (1 / q) ≤ ∑' m : ℕ, (∫⁻ r : ℝ, brsAmMax k (k + m) υ (g m) E r ^ q * ENNReal.ofReal r) ^ (1 / q) := lintegral_radial_Lp_tsum_le hq fun m => measurable_brsAmMax k (k + m) hυ hcs (hg m) E /-! ## (5.14): localization by support The kernel `h_k * υ_{k+m}` is supported in an interval of length comparable to `2^{-k}`, so the smoothed operator at the point `x` only sees `g` on the enlarged interval around `x`. -/ theorem brsTruncConvReal_eq_zero {k : ℕ} {δ : ℝ} {ψ : ℝ → ℝ} (hsupp : ∀ y : ℝ, δ < |y| → ψ y = 0) {x : ℝ} (hx : x ∉ Ioc (-δ) ((2 : ℝ) ^ (-(k : ℝ)) + δ)) : brsTruncConvReal k ψ x = 0 := by have h := brsTruncConv_eq_zero hsupp hx rw [brsTruncConv_eq_ofReal] at h exact_mod_cast h /-- The support of the kernel built from a dilated bump. -/ theorem brsTruncConvReal_dilate_eq_zero {k j : ℕ} {υ : ℝ → ℝ} (hR : tsupport υ ⊆ Metric.closedBall 0 1) {x : ℝ} (hx : (2 : ℝ) ^ (-(k : ℝ)) + (2 : ℝ) ^ (-(j : ℝ)) < |x|) : brsTruncConvReal k (brsDilate υ j) x = 0 := by have hδpos : (0 : ℝ) < (2 : ℝ) ^ (-(j : ℝ)) := Real.rpow_pos_of_pos (by norm_num) _ have hkpos : (0 : ℝ) < (2 : ℝ) ^ (-(k : ℝ)) := Real.rpow_pos_of_pos (by norm_num) _ have hinv : (2 : ℝ) ^ (-(j : ℝ)) = ((2 : ℝ) ^ j)⁻¹ := rpow_neg_natCast_two j refine brsTruncConvReal_eq_zero (δ := (2 : ℝ) ^ (-(j : ℝ))) ?_ ?_ · intro y hy refine brsDilate_eq_zero_of_lt hR j ?_ rwa [show (1 : ℝ) / 2 ^ j = (2 : ℝ) ^ (-(j : ℝ)) by rw [hinv, one_div]] · intro hc have h1 : -((2 : ℝ) ^ (-(k : ℝ)) + (2 : ℝ) ^ (-(j : ℝ))) < x := by have := hc.1 linarith have h2 : x ≤ (2 : ℝ) ^ (-(k : ℝ)) + (2 : ℝ) ^ (-(j : ℝ)) := hc.2 have habs : |x| ≤ (2 : ℝ) ^ (-(k : ℝ)) + (2 : ℝ) ^ (-(j : ℝ)) := abs_le.mpr ⟨h1.le, h2⟩ linarith /-- **BRS (5.14).** Only the values of `g` on the enlarged interval matter. -/ theorem brs_5_14 {k j : ℕ} {υ : ℝ → ℝ} (hR : tsupport υ ⊆ Metric.closedBall 0 1) {g : ℝ → ℂ} {S : Set ℝ} {x : ℝ} (hS : Icc (x - ((2 : ℝ) ^ (-(k : ℝ)) + (2 : ℝ) ^ (-(j : ℝ)))) (x + ((2 : ℝ) ^ (-(k : ℝ)) + (2 : ℝ) ^ (-(j : ℝ)))) ⊆ S) : (∫ y : ℝ, ((brsTruncConvReal k (brsDilate υ j) y : ℝ) : ℂ) * g (x - y)) = ∫ y : ℝ, ((brsTruncConvReal k (brsDilate υ j) y : ℝ) : ℂ) * (S.indicator g) (x - y) := by set c : ℝ := (2 : ℝ) ^ (-(k : ℝ)) + (2 : ℝ) ^ (-(j : ℝ)) with hc refine integral_congr_ae (Filter.Eventually.of_forall fun y => ?_) change ((brsTruncConvReal k (brsDilate υ j) y : ℝ) : ℂ) * g (x - y) = ((brsTruncConvReal k (brsDilate υ j) y : ℝ) : ℂ) * (S.indicator g) (x - y) by_cases hy : |y| ≤ c · have hyb := abs_le.mp hy have hmem : x - y ∈ S := hS ⟨by linarith [hyb.2], by linarith [hyb.1]⟩ rw [Set.indicator_of_mem hmem] · have hz : brsTruncConvReal k (brsDilate υ j) y = 0 := brsTruncConvReal_dilate_eq_zero hR (lt_of_not_ge hy) rw [hz] simp /-! ## Superadditivity of `t ↦ t^r`, and the embedding `ℓ^2 ⊆ ℓ^p` For `p ≥ 2` the Littlewood--Paley square function dominates the `ℓ^p` sum of the pieces, which is the form in which the square-function theorem enters Proposition 5.4. -/ /-- For `r ≥ 1` the map `t ↦ t^r` is superadditive on a finite sum. -/ theorem ennreal_finset_rpow_sum_le {ι : Type*} (K : Finset ι) (b : ι → ENNReal) {r : ℝ} (hr : 1 ≤ r) : (∑ k ∈ K, b k ^ r) ≤ (∑ k ∈ K, b k) ^ r := by set S : ENNReal := ∑ k ∈ K, b k with hS have hstep : ∀ k ∈ K, b k ^ r ≤ b k * S ^ (r - 1) := by intro k hk have hle : b k ≤ S := Finset.single_le_sum (f := b) (fun _ _ => zero_le) hk calc b k ^ r = b k ^ ((1 : ℝ) + (r - 1)) := by congr 1 ring _ = b k ^ (1 : ℝ) * b k ^ (r - 1) := ENNReal.rpow_add_of_nonneg (1 : ℝ) (r - 1) (by norm_num) (by linarith) _ = b k * b k ^ (r - 1) := by rw [ENNReal.rpow_one] _ ≤ b k * S ^ (r - 1) := mul_le_mul' le_rfl (ENNReal.rpow_le_rpow hle (by linarith)) calc (∑ k ∈ K, b k ^ r) ≤ ∑ k ∈ K, b k * S ^ (r - 1) := Finset.sum_le_sum hstep _ = S * S ^ (r - 1) := by rw [← Finset.sum_mul] _ = S ^ r := by have hadd : S ^ ((1 : ℝ) + (r - 1)) = S ^ (1 : ℝ) * S ^ (r - 1) := ENNReal.rpow_add_of_nonneg (1 : ℝ) (r - 1) (by norm_num) (by linarith) rw [ENNReal.rpow_one] at hadd rw [← hadd] congr 1 ring /-- **`ℓ^2 ⊆ ℓ^p` for `p ≥ 2`.** This is the step that converts the square function into the `ℓ^p` sum of the Littlewood--Paley pieces. -/ theorem ennreal_finset_rpow_sum_le_sq {ι : Type*} (K : Finset ι) (a : ι → ENNReal) {p : ℝ} (hp : 2 ≤ p) : (∑ k ∈ K, a k ^ p) ≤ (∑ k ∈ K, a k ^ (2 : ℝ)) ^ (p / 2) := by have hr : (1 : ℝ) ≤ p / 2 := by linarith have hterm : ∀ k : ι, a k ^ p = (a k ^ (2 : ℝ)) ^ (p / 2) := by intro k rw [← ENNReal.rpow_mul] congr 1 ring calc (∑ k ∈ K, a k ^ p) = ∑ k ∈ K, (a k ^ (2 : ℝ)) ^ (p / 2) := by exact Finset.sum_congr rfl fun k _ => hterm k _ ≤ (∑ k ∈ K, a k ^ (2 : ℝ)) ^ (p / 2) := ennreal_finset_rpow_sum_le K (fun k => a k ^ (2 : ℝ)) hr /-! ## The square function dominates the `ℓ^p` sum, `p ≥ 2` The real-valued form of `ennreal_finset_rpow_sum_le`, matching the `finiteSquareEnergy` of `LeanSpherical/Auto/LittlewoodPaley.lean`. -/ /-- Superadditivity of `t ↦ t^r` on a finite sum of nonnegative reals. -/ theorem real_finset_rpow_sum_le {ι : Type*} (s : Finset ι) {b : ι → ℝ} (hb : ∀ i ∈ s, 0 ≤ b i) {r : ℝ} (hr : 1 ≤ r) : (∑ i ∈ s, b i ^ r) ≤ (∑ i ∈ s, b i) ^ r := by have hr0 : (0 : ℝ) < r := lt_of_lt_of_le zero_lt_one hr set S : ℝ := ∑ i ∈ s, b i with hS have hSnn : 0 ≤ S := Finset.sum_nonneg hb rcases eq_or_lt_of_le hSnn with hS0 | hSpos · -- `S = 0` forces every term to vanish have hzero : ∀ i ∈ s, b i = 0 := by intro i hi have hle : b i ≤ S := Finset.single_le_sum hb hi have := hb i hi linarith [hS0 ▸ hle] have hL : (∑ i ∈ s, b i ^ r) = 0 := by refine Finset.sum_eq_zero fun i hi => ?_ rw [hzero i hi, Real.zero_rpow hr0.ne'] rw [hL, ← hS0, Real.zero_rpow hr0.ne'] · have hstep : ∀ i ∈ s, b i ^ r ≤ b i * S ^ (r - 1) := by intro i hi have hbi := hb i hi have hle : b i ≤ S := Finset.single_le_sum hb hi rcases eq_or_lt_of_le hbi with hb0 | hbpos · rw [← hb0, Real.zero_rpow hr0.ne', zero_mul] · have hsplit : b i ^ r = b i * b i ^ (r - 1) := by have h := Real.rpow_add hbpos 1 (r - 1) rw [Real.rpow_one, show (1 : ℝ) + (r - 1) = r by ring] at h exact h rw [hsplit] refine mul_le_mul_of_nonneg_left ?_ hbi exact Real.rpow_le_rpow hbi hle (by linarith) calc (∑ i ∈ s, b i ^ r) ≤ ∑ i ∈ s, b i * S ^ (r - 1) := Finset.sum_le_sum hstep _ = S * S ^ (r - 1) := by rw [← Finset.sum_mul] _ = S ^ r := by have h := Real.rpow_add hSpos 1 (r - 1) rw [Real.rpow_one, show (1 : ℝ) + (r - 1) = r by ring] at h exact h.symm /-- **The square function dominates the `ℓ^p` sum for `p ≥ 2`.** This is the step that lets `Auto.MikhlinHormander.littlewoodPaley_of_mikhlin` be applied to the `ℓ^p` sums appearing after BRS (5.10). -/ theorem finset_sum_norm_rpow_le_squareEnergy {ι X : Type*} (s : Finset ι) (g : ι → X → ℂ) (x : X) {p : ℝ} (hp : 2 ≤ p) : (∑ i ∈ s, ‖g i x‖ ^ p) ≤ Auto.LittlewoodPaley.finiteSquareEnergy s g x ^ (p / 2) := by have hr : (1 : ℝ) ≤ p / 2 := by linarith have hterm : ∀ i : ι, ‖g i x‖ ^ p = (‖g i x‖ ^ (2 : ℕ)) ^ (p / 2) := by intro i rw [← Real.rpow_natCast ‖g i x‖ 2, ← Real.rpow_mul (norm_nonneg _)] congr 1 push_cast ring have hb : ∀ i ∈ s, (0 : ℝ) ≤ ‖g i x‖ ^ (2 : ℕ) := fun i _ => by positivity calc (∑ i ∈ s, ‖g i x‖ ^ p) = ∑ i ∈ s, (‖g i x‖ ^ (2 : ℕ)) ^ (p / 2) := Finset.sum_congr rfl fun i _ => hterm i _ ≤ (∑ i ∈ s, ‖g i x‖ ^ (2 : ℕ)) ^ (p / 2) := real_finset_rpow_sum_le s hb hr _ = Auto.LittlewoodPaley.finiteSquareEnergy s g x ^ (p / 2) := rfl /-! ## The dyadic Littlewood--Paley pieces as Schwartz functions `Auto.LittlewoodPaley.integerDyadicProjection` is defined as a raw function; it is in fact Schwartz, which is what makes every power of its norm integrable and so lets the square-function theorem be used quantitatively. -/ open scoped FourierTransform in /-- The dyadic projection, packaged as a Schwartz map. -/ def brsDyadicSchwartz {d : ℕ} (C : Auto.LittlewoodPaley.lpCutoffs d) (n : ℤ) (f : SchwartzMap (Euclidean d) ℂ) : SchwartzMap (Euclidean d) ℂ := 𝓕⁻ (SchwartzMap.smulLeftCLM ℂ (Auto.LittlewoodPaley.intDyadicBandpassMultiplier C.cutoff n : Euclidean d → ℂ) (𝓕 f)) open scoped FourierTransform in theorem brsDyadicSchwartz_apply {d : ℕ} (C : Auto.LittlewoodPaley.lpCutoffs d) (n : ℤ) (f : SchwartzMap (Euclidean d) ℂ) (x : Euclidean d) : brsDyadicSchwartz C n f x = Auto.LittlewoodPaley.integerDyadicProjection C.cutoff n f x := by rw [brsDyadicSchwartz, Auto.LittlewoodPaley.integerDyadicProjection, SchwartzMap.fourierInv_coe] refine congrArg (fun h : Euclidean d → ℂ => 𝓕⁻ h x) ?_ funext xi rw [SchwartzMap.smulLeftCLM_apply (Auto.LittlewoodPaley.intDyadicBandpassMultiplier C.cutoff n).hasTemperateGrowth] rfl /-- Every positive power of the norm of a dyadic projection is integrable. -/ theorem integrable_norm_rpow_integerDyadicProjection {d : ℕ} (C : Auto.LittlewoodPaley.lpCutoffs d) (n : ℤ) (f : SchwartzMap (Euclidean d) ℂ) {p : ℝ} (hp : 0 < p) : Integrable (fun x : Euclidean d => ‖Auto.LittlewoodPaley.integerDyadicProjection C.cutoff n f x‖ ^ p) volume := by have hmem := (brsDyadicSchwartz C n f).memLp (ENNReal.ofReal p) (volume : Measure (Euclidean d)) have hne : ENNReal.ofReal p ≠ 0 := by simp only [ne_eq, ENNReal.ofReal_eq_zero, not_le] exact hp have h := hmem.integrable_norm_rpow hne ENNReal.ofReal_ne_top rw [ENNReal.toReal_ofReal hp.le] at h refine h.congr ?_ filter_upwards with x rw [brsDyadicSchwartz_apply] /-! ## The `ℓ^p` form of the Littlewood--Paley theorem, `p ≥ 2` -/ /-- The reverse power-mean inequality: `(∑ b)^r ≤ card^{r-1} ∑ b^r`. -/ theorem real_finset_rpow_sum_ge {ι : Type*} (s : Finset ι) {b : ι → ℝ} (hb : ∀ i ∈ s, 0 ≤ b i) {r : ℝ} (hr : 1 ≤ r) : (∑ i ∈ s, b i) ^ r ≤ (s.card : ℝ) ^ (r - 1) * ∑ i ∈ s, b i ^ r := by have hr0 : (0 : ℝ) < r := lt_of_lt_of_le zero_lt_one hr rcases Finset.eq_empty_or_nonempty s with hs | hs · subst hs simp only [Finset.sum_empty, Real.zero_rpow hr0.ne', mul_zero] exact le_rfl · have hcard : (0 : ℝ) < (s.card : ℝ) := by exact_mod_cast Finset.card_pos.mpr hs have hcardr : (0 : ℝ) < (s.card : ℝ) ^ r := Real.rpow_pos_of_pos hcard r have hcardrne : ((s.card : ℝ) ^ r) ≠ 0 := ne_of_gt hcardr have hw : ∀ i ∈ s, (0 : ℝ) ≤ ((s.card : ℝ))⁻¹ := fun _ _ => by positivity have hw1 : (∑ _i ∈ s, ((s.card : ℝ))⁻¹) = 1 := by rw [Finset.sum_const, nsmul_eq_mul] field_simp have hmean := Real.rpow_arith_mean_le_arith_mean_rpow s (fun _ => ((s.card : ℝ))⁻¹) b hw hw1 hb hr rw [← Finset.mul_sum, ← Finset.mul_sum, Real.mul_rpow (by positivity) (Finset.sum_nonneg hb), Real.inv_rpow hcard.le] at hmean have hstep : (∑ i ∈ s, b i) ^ r ≤ (s.card : ℝ) ^ r * (((s.card : ℝ))⁻¹ * ∑ i ∈ s, b i ^ r) := by have h := mul_le_mul_of_nonneg_left hmean (le_of_lt hcardr) calc (∑ i ∈ s, b i) ^ r = (s.card : ℝ) ^ r * (((s.card : ℝ) ^ r)⁻¹ * (∑ i ∈ s, b i) ^ r) := by field_simp _ ≤ (s.card : ℝ) ^ r * (((s.card : ℝ))⁻¹ * ∑ i ∈ s, b i ^ r) := h have hneg1 : ((s.card : ℝ))⁻¹ = (s.card : ℝ) ^ (-1 : ℝ) := by rw [Real.rpow_neg hcard.le, Real.rpow_one] have hcc : (s.card : ℝ) ^ r * ((s.card : ℝ))⁻¹ = (s.card : ℝ) ^ (r - 1) := by rw [hneg1, ← Real.rpow_add hcard, show r + (-1 : ℝ) = r - 1 by ring] refine le_trans hstep (le_of_eq ?_) rw [← mul_assoc, hcc] /-- Integrability of the `p/2`-power of the dyadic square function. -/ theorem integrable_squareEnergy_rpow {d : ℕ} (C : Auto.LittlewoodPaley.lpCutoffs d) (K : Finset ℤ) (f : SchwartzMap (Euclidean d) ℂ) {p : ℝ} (hp : 2 ≤ p) : Integrable (fun x : Euclidean d => Auto.LittlewoodPaley.finiteIntegerDyadicSquareEnergy C K f x ^ (p / 2)) volume := by have hp0 : (0 : ℝ) < p := by linarith have hr : (1 : ℝ) ≤ p / 2 := by linarith set Δ : ℤ → Euclidean d → ℂ := fun k => Auto.LittlewoodPaley.integerDyadicProjection C.cutoff k f with hΔ have hcont : ∀ k : ℤ, Continuous (Δ k) := by intro k have h : Continuous (brsDyadicSchwartz C k f) := (brsDyadicSchwartz C k f).continuous refine h.congr fun x => ?_ rw [hΔ] exact brsDyadicSchwartz_apply C k f x -- the majorant have hmajint : Integrable (fun x : Euclidean d => (K.card : ℝ) ^ (p / 2 - 1) * ∑ k ∈ K, ‖Δ k x‖ ^ p) volume := by refine Integrable.const_mul ?_ _ exact integrable_finsetSum K fun k _ => integrable_norm_rpow_integerDyadicProjection C k f hp0 have hmeas : AEStronglyMeasurable (fun x : Euclidean d => Auto.LittlewoodPaley.finiteIntegerDyadicSquareEnergy C K f x ^ (p / 2)) volume := by refine Continuous.aestronglyMeasurable ?_ refine Continuous.rpow_const ?_ (fun _ => Or.inr (by linarith)) refine continuous_finsetSum K fun k _ => ?_ exact ((hcont k).norm).pow 2 refine hmajint.mono' hmeas ?_ filter_upwards with x have hsq : Auto.LittlewoodPaley.finiteIntegerDyadicSquareEnergy C K f x = ∑ k ∈ K, ‖Δ k x‖ ^ (2 : ℕ) := rfl have hnn : (0 : ℝ) ≤ Auto.LittlewoodPaley.finiteIntegerDyadicSquareEnergy C K f x := by rw [hsq] exact Finset.sum_nonneg fun k _ => by positivity rw [Real.norm_of_nonneg (Real.rpow_nonneg hnn _), hsq] refine le_trans (real_finset_rpow_sum_ge K (fun k _ => (by positivity : (0 : ℝ) ≤ ‖Δ k x‖ ^ (2 : ℕ))) hr) ?_ refine mul_le_mul_of_nonneg_left (le_of_eq ?_) (by positivity) refine Finset.sum_congr rfl fun k _ => ?_ rw [← Real.rpow_natCast ‖Δ k x‖ 2, ← Real.rpow_mul (norm_nonneg _)] congr 1 push_cast ring /-- **The `ℓ^p` Littlewood--Paley bound for `p ≥ 2`.** The sum of the `L^p` norms of the dyadic pieces is controlled by the `L^p` norm, uniformly in the finite set of scales. -/ theorem sum_integral_norm_rpow_dyadic_le {d : ℕ} [NeZero d] (C : Auto.LittlewoodPaley.lpCutoffs d) {p : ℝ} (hp : 2 ≤ p) : ∃ A : ℝ, 0 < A ∧ ∀ (K : Finset ℤ) (f : SchwartzMap (Euclidean d) ℂ), (∑ k ∈ K, ∫ x : Euclidean d, ‖Auto.LittlewoodPaley.integerDyadicProjection C.cutoff k f x‖ ^ p) ≤ A * ∫ x : Euclidean d, ‖f x‖ ^ p := by have hp0 : (0 : ℝ) < p := by linarith obtain ⟨A, hA, hLP⟩ := Auto.MikhlinHormander.littlewoodPaley_of_mikhlin C p (by linarith) refine ⟨A, hA, fun K f => ?_⟩ have hswap : (∑ k ∈ K, ∫ x : Euclidean d, ‖Auto.LittlewoodPaley.integerDyadicProjection C.cutoff k f x‖ ^ p) = ∫ x : Euclidean d, ∑ k ∈ K, ‖Auto.LittlewoodPaley.integerDyadicProjection C.cutoff k f x‖ ^ p := (integral_finsetSum K fun k _ => integrable_norm_rpow_integerDyadicProjection C k f hp0).symm rw [hswap] refine le_trans (integral_mono_of_nonneg ?_ (integrable_squareEnergy_rpow C K f hp) ?_) (hLP K f) · filter_upwards with x exact Finset.sum_nonneg fun k _ => Real.rpow_nonneg (norm_nonneg _) _ · filter_upwards with x exact finset_sum_norm_rpow_le_squareEnergy K (fun k => Auto.LittlewoodPaley.integerDyadicProjection C.cutoff k f) x hp /-! ## Identifying `Euclidean 1` with the line The Littlewood--Paley machinery of the repository lives on `Euclidean d`; the BRS radial reduction lives on `ℝ`. In dimension one the two are identified by a volume-preserving measurable equivalence. -/ /-- The volume-preserving identification `Euclidean 1 ≃ ℝ`. -/ def brsLineEquiv : Euclidean 1 ≃ᵐ ℝ := (MeasurableEquiv.toLp 2 (Fin 1 → ℝ)).symm.trans (MeasurableEquiv.funUnique (Fin 1) ℝ) theorem measurePreserving_brsLineEquiv : MeasurePreserving brsLineEquiv (volume : Measure (Euclidean 1)) (volume : Measure ℝ) := by have h1 : MeasurePreserving ((MeasurableEquiv.toLp 2 (Fin 1 → ℝ)).symm : Euclidean 1 → (Fin 1 → ℝ)) volume volume := EuclideanSpace.volume_preserving_symm_measurableEquiv_toLp (Fin 1) have h2 : MeasurePreserving ((MeasurableEquiv.funUnique (Fin 1) ℝ) : (Fin 1 → ℝ) → ℝ) volume volume := volume_preserving_funUnique (Fin 1) ℝ exact h2.comp h1 theorem lintegral_brsLineEquiv (F : ℝ → ENNReal) : (∫⁻ x : Euclidean 1, F (brsLineEquiv x)) = ∫⁻ y : ℝ, F y := measurePreserving_brsLineEquiv.lintegral_comp_emb brsLineEquiv.measurableEmbedding F theorem integral_brsLineEquiv (F : ℝ → ℝ) : (∫ x : Euclidean 1, F (brsLineEquiv x)) = ∫ y : ℝ, F y := measurePreserving_brsLineEquiv.integral_comp brsLineEquiv.measurableEmbedding F theorem lintegral_brsLineEquiv_symm (F : Euclidean 1 → ENNReal) : (∫⁻ y : ℝ, F (brsLineEquiv.symm y)) = ∫⁻ x : Euclidean 1, F x := measurePreserving_brsLineEquiv.symm.lintegral_comp_emb brsLineEquiv.symm.measurableEmbedding F theorem integral_brsLineEquiv_symm (F : Euclidean 1 → ℝ) : (∫ y : ℝ, F (brsLineEquiv.symm y)) = ∫ x : Euclidean 1, F x := measurePreserving_brsLineEquiv.symm.integral_comp brsLineEquiv.symm.measurableEmbedding F /-! ## The `ℓ^p` Littlewood--Paley bound on the line -/ /-- **The `ℓ^p` Littlewood--Paley bound, transported to `ℝ`.** This is the form in which the square-function theorem is available to the BRS radial reduction. -/ theorem sum_integral_norm_rpow_dyadic_le_line (C : Auto.LittlewoodPaley.lpCutoffs 1) {p : ℝ} (hp : 2 ≤ p) : ∃ A : ℝ, 0 < A ∧ ∀ (K : Finset ℤ) (f : SchwartzMap (Euclidean 1) ℂ), (∑ k ∈ K, ∫ y : ℝ, ‖Auto.LittlewoodPaley.integerDyadicProjection C.cutoff k f (brsLineEquiv.symm y)‖ ^ p) ≤ A * ∫ y : ℝ, ‖f (brsLineEquiv.symm y)‖ ^ p := by obtain ⟨A, hA, hbound⟩ := sum_integral_norm_rpow_dyadic_le C hp refine ⟨A, hA, fun K f => ?_⟩ have hleft : (∑ k ∈ K, ∫ y : ℝ, ‖Auto.LittlewoodPaley.integerDyadicProjection C.cutoff k f (brsLineEquiv.symm y)‖ ^ p) = ∑ k ∈ K, ∫ x : Euclidean 1, ‖Auto.LittlewoodPaley.integerDyadicProjection C.cutoff k f x‖ ^ p := by refine Finset.sum_congr rfl fun k _ => ?_ exact integral_brsLineEquiv_symm (fun x : Euclidean 1 => ‖Auto.LittlewoodPaley.integerDyadicProjection C.cutoff k f x‖ ^ p) have hright : (∫ y : ℝ, ‖f (brsLineEquiv.symm y)‖ ^ p) = ∫ x : Euclidean 1, ‖f x‖ ^ p := integral_brsLineEquiv_symm (fun x : Euclidean 1 => ‖f x‖ ^ p) rw [hleft, hright] exact hbound K f /-! ## Existence of the bump required by (5.9) `brs_5_9` needs a smooth bump supported in the unit ball whose moments of every order `≤ N` vanish. Such a bump exists: take the Littlewood--Paley piece of a BRS profile built from a `ContDiffBump` of outer radius one. -/ theorem tsupport_subset_closedBall_of_vanishing {f : ℝ → ℝ} {R : ℝ} (h : ∀ x : ℝ, R < |x| → f x = 0) : tsupport f ⊆ Metric.closedBall 0 R := by refine closure_minimal ?_ Metric.isClosed_closedBall intro x hx by_contra hc refine hx (h x ?_) simpa [Metric.mem_closedBall, Real.dist_eq] using hc /-- Smoothness of a dilate, for any order. -/ theorem contDiff_brsDilate' {φ : ℝ → ℝ} {n : ℕ∞} (hφ : ContDiff ℝ (n : ℕ∞) φ) (j : ℕ) : ContDiff ℝ (n : ℕ∞) (brsDilate φ j) := by change ContDiff ℝ (n : ℕ∞) fun x : ℝ => (2 : ℝ) ^ j * φ ((2 : ℝ) ^ j * x) exact contDiff_const.mul (hφ.comp (contDiff_const.mul contDiff_id)) /-- **A smooth bump in the unit ball with vanishing moments of every order at most `N`.** -/ theorem exists_brsBump (N : ℕ) : ∃ υ : ℝ → ℝ, ContDiff ℝ (⊤ : ℕ∞) υ ∧ HasCompactSupport υ ∧ tsupport υ ⊆ Metric.closedBall 0 1 ∧ ∀ i : ℕ, i < N + 1 → (∫ y : ℝ, y ^ i * υ y) = 0 := by obtain ⟨a, h0, hvan⟩ := exists_brs_coeffs (N + 1) (Nat.succ_pos N) let fb : ContDiffBump (0 : ℝ) := ⟨1 / 2, 1, by norm_num, by norm_num⟩ set χ : ℝ → ℝ := fb.normed volume with hχdef have hχsmooth : ContDiff ℝ (⊤ : ℕ∞) χ := fb.contDiff_normed have hχcont : Continuous χ := hχsmooth.continuous have hχsupp : HasCompactSupport χ := fb.hasCompactSupport_normed have hχmass : (∫ x, χ x) = 1 := fb.integral_normed have hχzero : ∀ x : ℝ, 1 < |x| → χ x = 0 := by intro x hx have hns : x ∉ Function.support χ := by rw [hχdef, ContDiffBump.support_normed_eq] simp only [Metric.mem_ball, Real.dist_eq, sub_zero, not_lt] exact hx.le exact Function.notMem_support.mp hns -- the profile set φ : ℝ → ℝ := fun x => ∑ l ∈ Finset.range (N + 1), a l * brsDilate χ l x with hφdef have hprof : IsBRSProfile (N + 1) φ := isBRSProfile_of_coeffs hχcont hχsupp hχmass a h0 hvan have hφsmooth : ContDiff ℝ (⊤ : ℕ∞) φ := by rw [hφdef] exact ContDiff.sum fun l _ => contDiff_const.mul (contDiff_brsDilate' hχsmooth l) have hφzero : ∀ x : ℝ, 1 < |x| → φ x = 0 := by intro x hx rw [hφdef] refine Finset.sum_eq_zero fun l _ => ?_ have hdil : brsDilate χ l x = 0 := by change (2 : ℝ) ^ l * χ ((2 : ℝ) ^ l * x) = 0 have h2 : (1 : ℝ) ≤ (2 : ℝ) ^ l := one_le_pow₀ (by norm_num) have habs : (1 : ℝ) < |(2 : ℝ) ^ l * x| := by rw [abs_mul, abs_of_pos (by positivity : (0 : ℝ) < (2 : ℝ) ^ l)] nlinarith [abs_nonneg x] rw [hχzero _ habs, mul_zero] rw [hdil, mul_zero] -- the Littlewood--Paley piece refine ⟨brsLPKernel φ 0, ?_, hasCompactSupport_brsLPKernel hprof.supp 0, ?_, fun i hi => integral_pow_mul_brsLPKernel_eq_zero hprof hi 0⟩ · exact (contDiff_brsDilate' hφsmooth 1).sub (contDiff_brsDilate' hφsmooth 0) · refine tsupport_subset_closedBall_of_vanishing fun x hx => ?_ have h1 : brsDilate φ 1 x = 0 := by change (2 : ℝ) ^ (1 : ℕ) * φ ((2 : ℝ) ^ (1 : ℕ) * x) = 0 have habs : (1 : ℝ) < |(2 : ℝ) ^ (1 : ℕ) * x| := by rw [abs_mul, abs_of_pos (by positivity : (0 : ℝ) < (2 : ℝ) ^ (1 : ℕ))] nlinarith [abs_nonneg x] rw [hφzero _ habs, mul_zero] have h0' : brsDilate φ 0 x = 0 := by rw [brsDilate_zero] exact hφzero x hx change brsDilate φ 1 x - brsDilate φ 0 x = 0 rw [h1, h0', sub_zero] /-! ## Integration by parts for a compactly supported `C¹` function -/ theorem deriv_eq_zero_of_vanishing {f : ℝ → ℝ} {R : ℝ} (hzero : ∀ x : ℝ, R < |x| → f x = 0) {x : ℝ} (hx : R < |x|) : deriv f x = 0 := by have hopen : IsOpen {y : ℝ | R < |y|} := isOpen_lt continuous_const continuous_abs have hev : f =ᶠ[nhds x] fun _ => (0 : ℝ) := by filter_upwards [hopen.mem_nhds hx] with y hy exact hzero y hy rw [hev.deriv_eq] simp /-- The integral of the derivative of a compactly supported `C¹` function vanishes. -/ theorem integral_deriv_eq_zero_of_hasCompactSupport {f : ℝ → ℝ} (hf : ContDiff ℝ 1 f) (hcs : HasCompactSupport f) : (∫ y : ℝ, deriv f y) = 0 := by obtain ⟨R0, hR0⟩ := (hcs.isCompact.isBounded).subset_closedBall (0 : ℝ) set R : ℝ := max R0 0 with hRdef have hRnn : 0 ≤ R := le_max_right _ _ have hzero : ∀ x : ℝ, R < |x| → f x = 0 := by intro x hx refine image_eq_zero_of_notMem_tsupport fun hc => ?_ have h1 := hR0 hc rw [Metric.mem_closedBall, Real.dist_eq, sub_zero] at h1 have h2 : |x| ≤ R := le_trans h1 (le_max_left _ _) linarith have hdzero : ∀ x : ℝ, R < |x| → deriv f x = 0 := fun x hx => deriv_eq_zero_of_vanishing hzero hx set R' : ℝ := R + 1 with hR' have hlt : -R' < R' := by rw [hR'] linarith have hdcont : Continuous (deriv f) := hf.continuous_deriv le_rfl have hcompl : ∀ x : ℝ, x ∉ Ioc (-R') R' → deriv f x = 0 := by intro x hx refine hdzero x ?_ simp only [mem_Ioc, not_and_or, not_lt, not_le] at hx rcases hx with h | h · rw [abs_of_nonpos (by linarith : x ≤ 0)] linarith · rw [abs_of_pos (by linarith : (0 : ℝ) < x)] linarith have hset : (∫ y in Ioc (-R') R', deriv f y) = ∫ y : ℝ, deriv f y := setIntegral_eq_integral_of_forall_compl_eq_zero hcompl rw [← hset, ← intervalIntegral.integral_of_le hlt.le] rw [intervalIntegral.integral_deriv_eq_sub (fun x _ => (hf.differentiable (by norm_num)) x) (hdcont.intervalIntegrable _ _)] have h1 : f R' = 0 := by refine hzero R' ?_ rw [abs_of_pos (by rw [hR']; linarith)] rw [hR'] linarith have h2 : f (-R') = 0 := by refine hzero (-R') ?_ rw [abs_of_neg (by rw [hR']; linarith)] rw [hR'] linarith rw [h1, h2, sub_zero] /-- **Integration by parts against a monomial.** -/ theorem integral_pow_mul_deriv_eq {f : ℝ → ℝ} (hf : ContDiff ℝ 1 f) (hcs : HasCompactSupport f) (i : ℕ) : (∫ y : ℝ, y ^ i * deriv f y) = -(i : ℝ) * ∫ y : ℝ, y ^ (i - 1) * f y := by have hdcont : Continuous (deriv f) := hf.continuous_deriv le_rfl have hfcont : Continuous f := hf.continuous set g : ℝ → ℝ := fun y => y ^ i * f y with hg have hgcs : HasCompactSupport g := HasCompactSupport.mul_left hcs have hgcd : ContDiff ℝ 1 g := (contDiff_id.pow i).mul hf have hgderiv : ∀ y : ℝ, deriv g y = (i : ℝ) * y ^ (i - 1) * f y + y ^ i * deriv f y := by intro y have h1 : HasDerivAt (fun z : ℝ => z ^ i) ((i : ℝ) * y ^ (i - 1)) y := hasDerivAt_pow i y have h2 : HasDerivAt f (deriv f y) y := ((hf.differentiable (by norm_num)) y).hasDerivAt exact (h1.mul h2).deriv have hint1 : Integrable fun y : ℝ => (i : ℝ) * y ^ (i - 1) * f y := by refine Continuous.integrable_of_hasCompactSupport ?_ ?_ · exact (continuous_const.mul (continuous_pow (i - 1))).mul hfcont · exact HasCompactSupport.mul_left hcs have hint2 : Integrable fun y : ℝ => y ^ i * deriv f y := by refine Continuous.integrable_of_hasCompactSupport ?_ ?_ · exact (continuous_pow i).mul hdcont · exact HasCompactSupport.mul_left hcs.deriv have hzero := integral_deriv_eq_zero_of_hasCompactSupport hgcd hgcs rw [integral_congr_ae (Filter.Eventually.of_forall hgderiv), integral_add hint1 hint2] at hzero have hconst : (∫ y : ℝ, (i : ℝ) * y ^ (i - 1) * f y) = (i : ℝ) * ∫ y : ℝ, y ^ (i - 1) * f y := by rw [← integral_const_mul] refine integral_congr_ae (Filter.Eventually.of_forall fun y => ?_) change (i : ℝ) * y ^ (i - 1) * f y = (i : ℝ) * (y ^ (i - 1) * f y) ring rw [hconst] at hzero linarith /-! ## The hypotheses of (5.9) are satisfiable `brs_5_9_dilate` takes a long list of hypotheses on the bump `υ` and on `deriv υ`. All of them hold simultaneously, so the estimate is not vacuous. -/ /-- **Every hypothesis of `brs_5_9_dilate` can be met.** -/ theorem exists_brsBumpFull (N : ℕ) : ∃ (υ : ℝ → ℝ) (Mu A Mu' A' : ℝ), ContDiff ℝ 1 υ ∧ HasCompactSupport υ ∧ tsupport υ ⊆ Metric.closedBall 0 1 ∧ ContDiff ℝ 1 (deriv υ) ∧ HasCompactSupport (deriv υ) ∧ tsupport (deriv υ) ⊆ Metric.closedBall 0 1 ∧ (∀ x : ℝ, |υ x| ≤ Mu) ∧ (∫ y : ℝ, |υ y|) ≤ A ∧ 0 ≤ A ∧ (∀ x : ℝ, |deriv υ x| ≤ Mu') ∧ (∫ y : ℝ, |deriv υ y|) ≤ A' ∧ 0 ≤ A' ∧ (∀ i : ℕ, i < N + 1 → (∫ y : ℝ, y ^ i * υ y) = 0) ∧ ∀ i : ℕ, i < N + 1 → (∫ y : ℝ, y ^ i * deriv υ y) = 0 := by obtain ⟨υ, hsmooth, hcs, hR, hmom⟩ := exists_brsBump (N + 1) have hcd1 : ContDiff ℝ 1 υ := hsmooth.of_le ENat.LEInfty.out have hcd2 : ContDiff ℝ 2 υ := hsmooth.of_le ENat.LEInfty.out have hcont : Continuous υ := hcd1.continuous have hderivcd : ContDiff ℝ 1 (deriv υ) := by have h : ContDiff ℝ (1 + 1) υ := by rw [show ((1 : WithTop ℕ∞) + 1) = 2 by norm_num] exact hcd2 exact (contDiff_succ_iff_deriv.mp h).2.2 have hderivcs : HasCompactSupport (deriv υ) := hcs.deriv have hderivcont : Continuous (deriv υ) := hderivcd.continuous have hvanish : ∀ x : ℝ, 1 < |x| → υ x = 0 := by intro x hx refine image_eq_zero_of_notMem_tsupport fun hc => ?_ have h1 := hR hc rw [Metric.mem_closedBall, Real.dist_eq, sub_zero] at h1 linarith have hderivR : tsupport (deriv υ) ⊆ Metric.closedBall 0 1 := tsupport_subset_closedBall_of_vanishing fun x hx => deriv_eq_zero_of_vanishing hvanish hx obtain ⟨Mu, hMu⟩ := hcont.bounded_above_of_compact_support hcs obtain ⟨Mu', hMu'⟩ := hderivcont.bounded_above_of_compact_support hderivcs refine ⟨υ, Mu, ∫ y : ℝ, |υ y|, Mu', ∫ y : ℝ, |deriv υ y|, hcd1, hcs, hR, hderivcd, hderivcs, hderivR, ?_, le_rfl, ?_, ?_, le_rfl, ?_, ?_, ?_⟩ · intro x simpa only [Real.norm_eq_abs] using hMu x · exact integral_nonneg fun y => abs_nonneg _ · intro x simpa only [Real.norm_eq_abs] using hMu' x · exact integral_nonneg fun y => abs_nonneg _ · intro i hi exact hmom i (by omega) · intro i hi rw [integral_pow_mul_deriv_eq hcd1 hcs i, hmom (i - 1) (by omega), mul_zero] /-! ## (5.7) based at the scale `k` BRS write the resolution as `δ = u_k + ∑_{m ≥ 1} υ_{k+m} * ψ_{k+m}`, with the low-frequency piece `u_k` at the scale of the truncation. In the telescoping form used here the same statement reads `δ = φ_k + ∑_{m ≥ 0} Ψ_{k+m}`, where `Ψ_j = φ_{j+1} - φ_j` is compactly supported and has vanishing moments — no factorisation of `Ψ` is needed. -/ /-- The telescoping identity based at the scale `k`. -/ theorem brsDilate_eq_add_sum_shift (φ : ℝ → ℝ) (k M : ℕ) (x : ℝ) : brsDilate φ (k + M) x = brsDilate φ k x + ∑ m ∈ Finset.range M, brsLPKernel φ (k + m) x := by induction M with | zero => simp | succ M ih => have h : brsDilate φ k x + (∑ m ∈ Finset.range M, brsLPKernel φ (k + m) x + brsLPKernel φ (k + M) x) = brsDilate φ (k + M) x + brsLPKernel φ (k + M) x := by rw [ih] ring rw [Finset.sum_range_succ, h] change brsDilate φ (k + (M + 1)) x = brsDilate φ (k + M) x + (brsDilate φ (k + M + 1) x - brsDilate φ (k + M) x) rw [show k + (M + 1) = k + M + 1 by ring] ring /-- **(5.7) based at the scale `k`**, in telescoping form. -/ theorem brs_lp_resolution_shift {φ : ℝ → ℝ} (hφ : Continuous φ) (hsupp : HasCompactSupport φ) {g : ℝ → ℂ} (hg : Continuous g) (k M : ℕ) (x : ℝ) : (∫ y, (brsDilate φ (k + M) y : ℂ) * g (x - y)) = (∫ y, (brsDilate φ k y : ℂ) * g (x - y)) + ∑ m ∈ Finset.range M, ∫ y, (brsLPKernel φ (k + m) y : ℂ) * g (x - y) := by have hgc : Continuous fun y : ℝ => g (x - y) := hg.comp (continuous_const.sub continuous_id) have hint : ∀ ψ : ℝ → ℝ, Continuous ψ → HasCompactSupport ψ → Integrable fun y => (ψ y : ℂ) * g (x - y) := by intro ψ hψ hψs have hcont : Continuous fun y : ℝ => (ψ y : ℂ) * g (x - y) := (Complex.continuous_ofReal.comp hψ).mul hgc refine hcont.integrable_of_hasCompactSupport ?_ have hc : HasCompactSupport fun y : ℝ => (ψ y : ℂ) := hψs.comp_left (g := fun z : ℝ => (z : ℂ)) (by simp) exact hc.mul_right have hsum : ∀ y : ℝ, (brsDilate φ (k + M) y : ℂ) * g (x - y) = (brsDilate φ k y : ℂ) * g (x - y) + ∑ m ∈ Finset.range M, (brsLPKernel φ (k + m) y : ℂ) * g (x - y) := by intro y rw [← Finset.sum_mul, ← Complex.ofReal_sum, ← add_mul, ← Complex.ofReal_add, ← brsDilate_eq_add_sum_shift φ k M y] rw [show (∫ y, (brsDilate φ (k + M) y : ℂ) * g (x - y)) = ∫ y, ((brsDilate φ k y : ℂ) * g (x - y) + ∑ m ∈ Finset.range M, (brsLPKernel φ (k + m) y : ℂ) * g (x - y)) from integral_congr_ae (Filter.Eventually.of_forall hsum)] rw [integral_add (hint _ (continuous_brsDilate hφ k) (hasCompactSupport_brsDilate hsupp k)) (integrable_finsetSum _ fun m _ => hint _ (continuous_brsLPKernel hφ (k + m)) (hasCompactSupport_brsLPKernel hsupp (k + m)))] congr 1 exact integral_finsetSum _ fun m _ => hint _ (continuous_brsLPKernel hφ (k + m)) (hasCompactSupport_brsLPKernel hsupp (k + m)) /-- **The resolution converges**: the low-frequency piece at scale `k` plus the high-frequency pieces above it recover `g`. -/ theorem brs_lp_resolution_shift_tendsto {φ : ℝ → ℝ} (hφ : Continuous φ) (hsupp : HasCompactSupport φ) (hnorm : (∫ x, φ x) = 1) {g : ℝ → ℂ} (hg : Continuous g) (k : ℕ) (x : ℝ) : Tendsto (fun M : ℕ => (∫ y, (brsDilate φ k y : ℂ) * g (x - y)) + ∑ m ∈ Finset.range M, ∫ y, (brsLPKernel φ (k + m) y : ℂ) * g (x - y)) atTop (𝓝 (g x)) := by have h := tendsto_brsDilate_convolution hφ hsupp hnorm hg x have hcomp : Tendsto (fun M : ℕ => k + M) atTop atTop := tendsto_atTop_mono (fun M => Nat.le_add_left M k) tendsto_id refine (h.comp hcomp).congr fun M => ?_ exact brs_lp_resolution_shift hφ hsupp hg k M x /-! ## Summing the terms `𝒜_{k,m}` over `k` For a fixed `m` the terms `𝒜_{k,m}` live on the pairwise disjoint dyadic windows `I_k`, so the sum over `k` costs nothing: the `L^q(r dr)` norm of the sum is the `ℓ^q` sum of the norms. -/ theorem brsAmMax_eq_zero_of_notMem {k j : ℕ} {υ : ℝ → ℝ} {g : ℝ → ℂ} {E : Set ℝ} {r : ℝ} (hr : r ∉ brsRadiusWindow k) : brsAmMax k j υ g E r = 0 := by rw [brsAmMax, Set.indicator_of_notMem hr] /-- The `q`-th power of the sum over `k` is the sum of the `q`-th powers. -/ theorem tsum_brsAmMax_rpow (m : ℕ) {υ : ℝ → ℝ} {g : ℝ → ℂ} {E : Set ℝ} {q : ℝ} (hq : 0 < q) (r : ℝ) : (∑' k : ℕ, brsAmMax k (k + m) υ g E r) ^ q = ∑' k : ℕ, brsAmMax k (k + m) υ g E r ^ q := by by_cases h : ∃ k : ℕ, r ∈ brsRadiusWindow k · obtain ⟨k₀, hk₀⟩ := h have hzero : ∀ k : ℕ, k ≠ k₀ → brsAmMax k (k + m) υ g E r = 0 := by intro k hk refine brsAmMax_eq_zero_of_notMem fun hr => ?_ exact Set.disjoint_left.mp (brsRadiusWindow_disjoint hk) hr hk₀ rw [tsum_eq_single k₀ hzero, tsum_eq_single k₀ fun k hk => by rw [hzero k hk, ENNReal.zero_rpow_of_pos hq]] · simp only [not_exists] at h have hall : ∀ k : ℕ, brsAmMax k (k + m) υ g E r = 0 := fun k => brsAmMax_eq_zero_of_notMem (h k) simp only [hall, tsum_zero, ENNReal.zero_rpow_of_pos hq] /-- **The `k`-aggregation for a fixed `m`.** Because the windows `I_k` are disjoint, the radial `L^q` norm of the sum is exactly the `ℓ^q` sum. -/ theorem lintegral_tsum_brsAmMax_rpow (m : ℕ) {υ : ℝ → ℝ} (hυ : ContDiff ℝ 1 υ) (hcs : HasCompactSupport υ) {g : ℝ → ℂ} (hg : Continuous g) (E : Set ℝ) {q : ℝ} (hq : 0 < q) : (∫⁻ r : ℝ, (∑' k : ℕ, brsAmMax k (k + m) υ g E r) ^ q * ENNReal.ofReal r) = ∑' k : ℕ, ∫⁻ r : ℝ, brsAmMax k (k + m) υ g E r ^ q * ENNReal.ofReal r := by have hmeas : ∀ k : ℕ, AEMeasurable (fun r : ℝ => brsAmMax k (k + m) υ g E r ^ q * ENNReal.ofReal r) volume := by intro k exact (((measurable_brsAmMax k (k + m) hυ hcs hg E).pow_const q).mul ENNReal.measurable_ofReal).aemeasurable have hpt : ∀ r : ℝ, (∑' k : ℕ, brsAmMax k (k + m) υ g E r) ^ q * ENNReal.ofReal r = ∑' k : ℕ, brsAmMax k (k + m) υ g E r ^ q * ENNReal.ofReal r := by intro r rw [tsum_brsAmMax_rpow m hq r, ← ENNReal.tsum_mul_right] rw [lintegral_congr hpt] exact lintegral_tsum hmeas /-! ## The double sum of the terms `𝒜_{k,m}` Combining the `m`-summation (5.10) with the `k`-aggregation reduces the full double sum to the individual estimates (5.9). -/ /-- **The reduction of Proposition 5.4 to the estimates (5.9).** -/ theorem brs_5_4_core {υ : ℝ → ℝ} (hυ : ContDiff ℝ 1 υ) (hcs : HasCompactSupport υ) {g : ℝ → ℂ} (hg : Continuous g) (E : Set ℝ) {q : ℝ} (hq : 1 ≤ q) : (∫⁻ r : ℝ, (∑' m : ℕ, ∑' k : ℕ, brsAmMax k (k + m) υ g E r) ^ q * ENNReal.ofReal r) ^ (1 / q) ≤ ∑' m : ℕ, (∑' k : ℕ, ∫⁻ r : ℝ, brsAmMax k (k + m) υ g E r ^ q * ENNReal.ofReal r) ^ (1 / q) := by have hq0 : (0 : ℝ) < q := lt_of_lt_of_le zero_lt_one hq have hGmeas : ∀ m : ℕ, Measurable fun r : ℝ => ∑' k : ℕ, brsAmMax k (k + m) υ g E r := fun m => Measurable.tsum fun k => measurable_brsAmMax k (k + m) hυ hcs hg E refine le_trans (lintegral_radial_Lp_tsum_le hq hGmeas) (le_of_eq ?_) refine tsum_congr fun m => ?_ rw [lintegral_tsum_brsAmMax_rpow m hυ hcs hg E hq0] /-! ## Basing the resolution three scales below the truncation The three-window kernel analysis needs `5 · 2^{-j} ≤ 2^{-k}`, i.e. the bump must be at least three dyadic scales finer than the truncation. Basing the resolution at `k + 3` instead of `k` arranges this for every `m ≥ 0`; the low-frequency remainder is then `φ_{k+3}` instead of `φ_k`, which changes nothing downstream. -/ /-- The scale gap needed by `brs_5_9`. -/ theorem brs_scale_gap (k m : ℕ) : 5 * (2 : ℝ) ^ (-((k + (m + 3) : ℕ) : ℝ)) ≤ (2 : ℝ) ^ (-(k : ℝ)) := by have hsplit : (2 : ℝ) ^ (-((k + (m + 3) : ℕ) : ℝ)) = (2 : ℝ) ^ (-(k : ℝ)) * (2 : ℝ) ^ (-((m : ℝ) + 3)) := by rw [← Real.rpow_add (by norm_num)] congr 1 push_cast ring have hkpos : (0 : ℝ) < (2 : ℝ) ^ (-(k : ℝ)) := Real.rpow_pos_of_pos (by norm_num) _ have hsmall : 5 * (2 : ℝ) ^ (-((m : ℝ) + 3)) ≤ 1 := by have hm : (2 : ℝ) ^ (-((m : ℝ) + 3)) ≤ (2 : ℝ) ^ (-(3 : ℝ)) := by refine Real.rpow_le_rpow_of_exponent_le (by norm_num) ?_ have : (0 : ℝ) ≤ (m : ℝ) := Nat.cast_nonneg m linarith have h3 : (2 : ℝ) ^ (-(3 : ℝ)) = 1 / 8 := by rw [show (-(3 : ℝ)) = ((-3 : ℤ) : ℝ) by norm_num, Real.rpow_intCast] norm_num rw [h3] at hm linarith calc 5 * (2 : ℝ) ^ (-((k + (m + 3) : ℕ) : ℝ)) = (2 : ℝ) ^ (-(k : ℝ)) * (5 * (2 : ℝ) ^ (-((m : ℝ) + 3))) := by rw [hsplit] ring _ ≤ (2 : ℝ) ^ (-(k : ℝ)) * 1 := mul_le_mul_of_nonneg_left hsmall hkpos.le _ = (2 : ℝ) ^ (-(k : ℝ)) := mul_one _ /-- **The reduction of Proposition 5.4 to (5.9)**, with the resolution based `s` scales below the truncation. -/ theorem brs_5_4_shift_core (s : ℕ) {υ : ℝ → ℝ} (hυ : ContDiff ℝ 1 υ) (hcs : HasCompactSupport υ) {g : ℝ → ℂ} (hg : Continuous g) (E : Set ℝ) {q : ℝ} (hq : 1 ≤ q) : (∫⁻ r : ℝ, (∑' m : ℕ, ∑' k : ℕ, brsAmMax k (k + (m + s)) υ g E r) ^ q * ENNReal.ofReal r) ^ (1 / q) ≤ ∑' m : ℕ, (∑' k : ℕ, ∫⁻ r : ℝ, brsAmMax k (k + (m + s)) υ g E r ^ q * ENNReal.ofReal r) ^ (1 / q) := by have hq0 : (0 : ℝ) < q := lt_of_lt_of_le zero_lt_one hq have hGmeas : ∀ m : ℕ, Measurable fun r : ℝ => ∑' k : ℕ, brsAmMax k (k + (m + s)) υ g E r := fun m => Measurable.tsum fun k => measurable_brsAmMax k (k + (m + s)) hυ hcs hg E refine le_trans (lintegral_radial_Lp_tsum_le hq hGmeas) (le_of_eq ?_) refine tsum_congr fun m => ?_ rw [lintegral_tsum_brsAmMax_rpow (m + s) hυ hcs hg E hq0] /-! ## The full double sum, bounded by covering numbers Combining `brs_5_4_shift_core` with `brs_5_9_covering` bounds the whole `(k, m)` sum by the dyadic covering numbers of `E`. This is the estimate Proposition 5.4 is assembled from; the `k`-sum here is left as an `ℓ^q` sum rather than being replaced by a supremum, which is what makes the argument independent of the Littlewood--Paley theorem on the open range `q < 2p`. -/ /-- **The `(k, m)` aggregate bound.** -/ theorem brs_5_4_aggregate {E : Set ℝ} (hE : E ⊆ Icc (1 : ℝ) 2) {υ : ℝ → ℝ} (hυ : ContDiff ℝ 1 υ) (hcs : HasCompactSupport υ) (hR : tsupport υ ⊆ Metric.closedBall 0 1) (hυ' : ContDiff ℝ 1 (deriv υ)) (hcs' : HasCompactSupport (deriv υ)) (hR' : tsupport (deriv υ) ⊆ Metric.closedBall 0 1) {Mu A Mu' A' : ℝ} (hbd : ∀ x : ℝ, |υ x| ≤ Mu) (hA : (∫ y : ℝ, |υ y|) ≤ A) (hAnn : 0 ≤ A) (hbd' : ∀ x : ℝ, |deriv υ x| ≤ Mu') (hA' : (∫ y : ℝ, |deriv υ y|) ≤ A') (hA'nn : 0 ≤ A') {N : ℕ} (hmom : ∀ i : ℕ, i < N + 1 → (∫ y : ℝ, y ^ i * υ y) = 0) (hmom' : ∀ i : ℕ, i < N + 1 → (∫ y : ℝ, y ^ i * deriv υ y) = 0) {g : ℝ → ℂ} (hg : Continuous g) {p q r : ℝ} (hp : 1 ≤ p) (hr : 1 < r) (hrq : r < q) (hpq : p < q) (hrel : 1 / p + 1 / r = 1 + 1 / q) : (∫⁻ x : ℝ, (∑' m : ℕ, ∑' k : ℕ, brsAmMax k (k + (m + 3)) υ g E x) ^ q * ENNReal.ofReal x) ^ (1 / q) ≤ ∑' m : ℕ, (∑' k : ℕ, ENNReal.ofReal ((2 : ℝ) ^ |1 - q / 2| * ((2 : ℝ) ^ (-(k : ℝ))) ^ (1 - q / 2)) * ((intervalCoveringNumber E ((2 : ℝ) ^ (-((k + (m + 3) : ℕ) : ℝ))) : ENNReal) * (ENNReal.ofReal ((brsKernelConst Mu A N r ^ (1 / r) + brsKernelConst Mu' A' N r ^ (1 / r)) * ((2 : ℝ) ^ (-((k + (m + 3) : ℕ) : ℝ))) ^ (1 / r - 1 / 2)) * (∫⁻ z : ℝ, ‖g z‖ₑ ^ p) ^ (1 / p)) ^ q)) ^ (1 / q) := by have hq1 : (1 : ℝ) ≤ q := le_of_lt (lt_trans hr hrq) have hq0 : (0 : ℝ) < q := lt_of_lt_of_le zero_lt_one hq1 refine le_trans (brs_5_4_shift_core 3 hυ hcs hg E hq1) ?_ refine ENNReal.tsum_le_tsum fun m => ?_ refine ENNReal.rpow_le_rpow (ENNReal.tsum_le_tsum fun k => ?_) (by positivity) exact brs_5_9_covering hE hυ hcs hR hυ' hcs' hR' hbd hA hAnn hbd' hA' hA'nn hmom hmom' hg hp hr hrq hpq hrel (brs_scale_gap k m) /-! ## Dyadic geometric series The `(k, m)` sum of Proposition 5.4 is a double geometric series; both ratios are `2` to a negative power exactly in the interior of the type region. -/ /-- A dyadic geometric series in `ℝ≥0∞`. -/ theorem tsum_ofReal_geometric {c a : ℝ} (hc : 0 ≤ c) (ha : a < 0) : (∑' k : ℕ, ENNReal.ofReal (c * (2 : ℝ) ^ (a * (k : ℝ)))) = ENNReal.ofReal (c / (1 - (2 : ℝ) ^ a)) := by set x : ℝ := (2 : ℝ) ^ a with hx have hxpos : 0 < x := Real.rpow_pos_of_pos (by norm_num) _ have hx1 : x < 1 := by rw [hx, show (1 : ℝ) = (2 : ℝ) ^ (0 : ℝ) by norm_num] exact Real.rpow_lt_rpow_of_exponent_lt (by norm_num) ha have hterm : ∀ k : ℕ, ENNReal.ofReal (c * (2 : ℝ) ^ (a * (k : ℝ))) = ENNReal.ofReal c * ENNReal.ofReal x ^ k := by intro k rw [ENNReal.ofReal_mul hc] congr 1 rw [← ENNReal.ofReal_pow hxpos.le] congr 1 rw [hx, ← Real.rpow_natCast ((2 : ℝ) ^ a) k, ← Real.rpow_mul (by norm_num : (0 : ℝ) ≤ 2)] rw [tsum_congr hterm, ENNReal.tsum_mul_left, tsum_geometric] have hsub : (1 : ENNReal) - ENNReal.ofReal x = ENNReal.ofReal (1 - x) := by rw [ENNReal.ofReal_sub _ hxpos.le, ENNReal.ofReal_one] rw [hsub, ← ENNReal.ofReal_inv_of_pos (by linarith), ← ENNReal.ofReal_mul hc, div_eq_mul_inv] /-- The double dyadic geometric series, with the inner sum raised to the power `1/q`. -/ theorem tsum_tsum_ofReal_geometric_rpow {c a b q : ℝ} (hc : 0 ≤ c) (ha : a < 0) (hb : b < 0) (hq : 0 < q) : (∑' m : ℕ, (∑' k : ℕ, ENNReal.ofReal (c * (2 : ℝ) ^ (a * (k : ℝ) + b * (m : ℝ)))) ^ (1 / q)) = ENNReal.ofReal ((c / (1 - (2 : ℝ) ^ a)) ^ (1 / q) / (1 - (2 : ℝ) ^ (b / q))) := by have hapos : (0 : ℝ) < 1 - (2 : ℝ) ^ a := by have : (2 : ℝ) ^ a < 1 := by rw [show (1 : ℝ) = (2 : ℝ) ^ (0 : ℝ) by norm_num] exact Real.rpow_lt_rpow_of_exponent_lt (by norm_num) ha linarith have hbq : b / q < 0 := div_neg_of_neg_of_pos hb hq -- the inner sum have hinner : ∀ m : ℕ, (∑' k : ℕ, ENNReal.ofReal (c * (2 : ℝ) ^ (a * (k : ℝ) + b * (m : ℝ)))) = ENNReal.ofReal ((c * (2 : ℝ) ^ (b * (m : ℝ))) / (1 - (2 : ℝ) ^ a)) := by intro m have hsplit : ∀ k : ℕ, c * (2 : ℝ) ^ (a * (k : ℝ) + b * (m : ℝ)) = (c * (2 : ℝ) ^ (b * (m : ℝ))) * (2 : ℝ) ^ (a * (k : ℝ)) := by intro k rw [Real.rpow_add (by norm_num)] ring rw [tsum_congr fun k => by rw [hsplit k]] exact tsum_ofReal_geometric (by positivity) ha -- the outer sum have houter : ∀ m : ℕ, (ENNReal.ofReal ((c * (2 : ℝ) ^ (b * (m : ℝ))) / (1 - (2 : ℝ) ^ a))) ^ (1 / q) = ENNReal.ofReal ((c / (1 - (2 : ℝ) ^ a)) ^ (1 / q) * (2 : ℝ) ^ ((b / q) * (m : ℝ))) := by intro m rw [ENNReal.ofReal_rpow_of_nonneg (by positivity) (by positivity)] congr 1 rw [show (c * (2 : ℝ) ^ (b * (m : ℝ))) / (1 - (2 : ℝ) ^ a) = (c / (1 - (2 : ℝ) ^ a)) * (2 : ℝ) ^ (b * (m : ℝ)) by ring, Real.mul_rpow (by positivity) (by positivity), ← Real.rpow_mul (by norm_num : (0 : ℝ) ≤ 2)] congr 2 field_simp have hcomb : ∀ m : ℕ, (∑' k : ℕ, ENNReal.ofReal (c * (2 : ℝ) ^ (a * (k : ℝ) + b * (m : ℝ)))) ^ (1 / q) = ENNReal.ofReal ((c / (1 - (2 : ℝ) ^ a)) ^ (1 / q) * (2 : ℝ) ^ ((b / q) * (m : ℝ))) := by intro m rw [hinner m] exact houter m rw [tsum_congr hcomb] exact tsum_ofReal_geometric (by positivity) hbq /-! ## The exponent bookkeeping of the `(k, m)` sum Collecting the three dyadic factors of a term of `brs_5_4_aggregate` — the radial weight `(2^{-k})^{1 - q/2}`, the covering number `2^{βj}` and the kernel gain `(2^{-j})^{sq}` — into a single power of `2`. -/ /-- The exponent in `k`. -/ def brsSumExpK (β s q : ℝ) : ℝ := q / 2 - 1 + β - s * q /-- The exponent in `m`. -/ def brsSumExpM (β s q : ℝ) : ℝ := β - s * q /-- **Collecting the dyadic factors of one term.** -/ theorem brs_term_exponent_identity (K₁ Cβ Cs β s q : ℝ) (k m : ℕ) : K₁ * ((2 : ℝ) ^ (-(k : ℝ))) ^ (1 - q / 2) * (Cβ * (2 : ℝ) ^ (β * ((k + (m + 3) : ℕ) : ℝ))) * (Cs * ((2 : ℝ) ^ (-((k + (m + 3) : ℕ) : ℝ))) ^ (s * q)) = (K₁ * Cβ * Cs * (2 : ℝ) ^ (brsSumExpM β s q * 3)) * (2 : ℝ) ^ (brsSumExpK β s q * (k : ℝ) + brsSumExpM β s q * (m : ℝ)) := by have h2 : (0 : ℝ) < 2 := by norm_num have hjcast : ((k + (m + 3) : ℕ) : ℝ) = (k : ℝ) + (m : ℝ) + 3 := by push_cast ring have e1 : ((2 : ℝ) ^ (-(k : ℝ))) ^ (1 - q / 2) = (2 : ℝ) ^ (-(k : ℝ) * (1 - q / 2)) := by rw [← Real.rpow_mul h2.le] have e2 : ((2 : ℝ) ^ (-((k + (m + 3) : ℕ) : ℝ))) ^ (s * q) = (2 : ℝ) ^ (-((k : ℝ) + (m : ℝ) + 3) * (s * q)) := by rw [← Real.rpow_mul h2.le, hjcast] have e3 : (2 : ℝ) ^ (β * ((k + (m + 3) : ℕ) : ℝ)) = (2 : ℝ) ^ (β * ((k : ℝ) + (m : ℝ) + 3)) := by rw [hjcast] rw [e1, e2, e3] have hcomb : (2 : ℝ) ^ (-(k : ℝ) * (1 - q / 2)) * (2 : ℝ) ^ (β * ((k : ℝ) + (m : ℝ) + 3)) * (2 : ℝ) ^ (-((k : ℝ) + (m : ℝ) + 3) * (s * q)) = (2 : ℝ) ^ (brsSumExpM β s q * 3) * (2 : ℝ) ^ (brsSumExpK β s q * (k : ℝ) + brsSumExpM β s q * (m : ℝ)) := by rw [← Real.rpow_add h2, ← Real.rpow_add h2, ← Real.rpow_add h2] congr 1 rw [brsSumExpK, brsSumExpM] ring calc K₁ * (2 : ℝ) ^ (-(k : ℝ) * (1 - q / 2)) * (Cβ * (2 : ℝ) ^ (β * ((k : ℝ) + (m : ℝ) + 3))) * (Cs * (2 : ℝ) ^ (-((k : ℝ) + (m : ℝ) + 3) * (s * q))) = K₁ * Cβ * Cs * ((2 : ℝ) ^ (-(k : ℝ) * (1 - q / 2)) * (2 : ℝ) ^ (β * ((k : ℝ) + (m : ℝ) + 3)) * (2 : ℝ) ^ (-((k : ℝ) + (m : ℝ) + 3) * (s * q))) := by ring _ = K₁ * Cβ * Cs * ((2 : ℝ) ^ (brsSumExpM β s q * 3) * (2 : ℝ) ^ (brsSumExpK β s q * (k : ℝ) + brsSumExpM β s q * (m : ℝ))) := by rw [hcomb] _ = (K₁ * Cβ * Cs * (2 : ℝ) ^ (brsSumExpM β s q * 3)) * (2 : ℝ) ^ (brsSumExpK β s q * (k : ℝ) + brsSumExpM β s q * (m : ℝ)) := by ring /-! ## One term of the `(k, m)` sum, in geometric form -/ /-- **A single term of `brs_5_4_aggregate` is a dyadic geometric term.** -/ theorem brs_5_4_term_le {E : Set ℝ} {Cβ β : ℝ} (hCβ : 0 ≤ Cβ) (hN : ∀ j : ℕ, (intervalCoveringNumber E ((2 : ℝ) ^ (-(j : ℝ))) : ENNReal) ≤ ENNReal.ofReal (Cβ * (2 : ℝ) ^ (β * (j : ℝ)))) {Cs : ℝ} (hCs : 0 ≤ Cs) {q s : ℝ} (hq : 0 < q) (k m : ℕ) (G : ENNReal) : ENNReal.ofReal ((2 : ℝ) ^ |1 - q / 2| * ((2 : ℝ) ^ (-(k : ℝ))) ^ (1 - q / 2)) * ((intervalCoveringNumber E ((2 : ℝ) ^ (-((k + (m + 3) : ℕ) : ℝ))) : ENNReal) * (ENNReal.ofReal (Cs * ((2 : ℝ) ^ (-((k + (m + 3) : ℕ) : ℝ))) ^ s) * G) ^ q) ≤ ENNReal.ofReal (((2 : ℝ) ^ |1 - q / 2| * Cβ * Cs ^ q * (2 : ℝ) ^ (brsSumExpM β s q * 3)) * (2 : ℝ) ^ (brsSumExpK β s q * (k : ℝ) + brsSumExpM β s q * (m : ℝ))) * G ^ q := by have h2 : (0 : ℝ) < 2 := by norm_num set j : ℕ := k + (m + 3) with hj have hdyad : (0 : ℝ) < (2 : ℝ) ^ (-(j : ℝ)) := Real.rpow_pos_of_pos h2 _ have hK₁ : (0 : ℝ) < (2 : ℝ) ^ |1 - q / 2| := Real.rpow_pos_of_pos h2 _ have hwt : (0 : ℝ) ≤ ((2 : ℝ) ^ (-(k : ℝ))) ^ (1 - q / 2) := Real.rpow_nonneg (Real.rpow_pos_of_pos h2 _).le _ -- the `q`-th power of the kernel factor have hpow : (ENNReal.ofReal (Cs * ((2 : ℝ) ^ (-(j : ℝ))) ^ s) * G) ^ q = ENNReal.ofReal (Cs ^ q * ((2 : ℝ) ^ (-(j : ℝ))) ^ (s * q)) * G ^ q := by rw [ENNReal.mul_rpow_of_nonneg _ _ hq.le, ENNReal.ofReal_rpow_of_nonneg (by positivity) hq.le] congr 2 rw [Real.mul_rpow hCs (Real.rpow_nonneg hdyad.le _), ← Real.rpow_mul hdyad.le] rw [hpow] -- bound the covering number have hstep : ENNReal.ofReal ((2 : ℝ) ^ |1 - q / 2| * ((2 : ℝ) ^ (-(k : ℝ))) ^ (1 - q / 2)) * ((intervalCoveringNumber E ((2 : ℝ) ^ (-(j : ℝ))) : ENNReal) * (ENNReal.ofReal (Cs ^ q * ((2 : ℝ) ^ (-(j : ℝ))) ^ (s * q)) * G ^ q)) ≤ ENNReal.ofReal ((2 : ℝ) ^ |1 - q / 2| * ((2 : ℝ) ^ (-(k : ℝ))) ^ (1 - q / 2)) * (ENNReal.ofReal (Cβ * (2 : ℝ) ^ (β * (j : ℝ))) * (ENNReal.ofReal (Cs ^ q * ((2 : ℝ) ^ (-(j : ℝ))) ^ (s * q)) * G ^ q)) := mul_le_mul' le_rfl (mul_le_mul' (hN j) le_rfl) refine le_trans hstep (le_of_eq ?_) -- merge the three constants rw [show ENNReal.ofReal ((2 : ℝ) ^ |1 - q / 2| * ((2 : ℝ) ^ (-(k : ℝ))) ^ (1 - q / 2)) * (ENNReal.ofReal (Cβ * (2 : ℝ) ^ (β * (j : ℝ))) * (ENNReal.ofReal (Cs ^ q * ((2 : ℝ) ^ (-(j : ℝ))) ^ (s * q)) * G ^ q)) = (ENNReal.ofReal ((2 : ℝ) ^ |1 - q / 2| * ((2 : ℝ) ^ (-(k : ℝ))) ^ (1 - q / 2)) * ENNReal.ofReal (Cβ * (2 : ℝ) ^ (β * (j : ℝ))) * ENNReal.ofReal (Cs ^ q * ((2 : ℝ) ^ (-(j : ℝ))) ^ (s * q))) * G ^ q by ring] congr 1 rw [← ENNReal.ofReal_mul (by positivity), ← ENNReal.ofReal_mul (by positivity)] congr 1 rw [hj] exact brs_term_exponent_identity ((2 : ℝ) ^ |1 - q / 2|) Cβ (Cs ^ q) β s q k m end Prop46 end end Auto.Spherical.BRSRadial