feat(MagicFunction): joint integrability and Fubini for the contour integrals Iⱼ - #464
Draft
cameronfreer wants to merge 41 commits into
Draft
cameronfreer wants to merge 41 commits into
cameronfreer wants to merge 41 commits into
Conversation
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The sorry as stated (`∃ C, x ^ k * rexp (-r * x) ≤ C` with `x` bound outside the existential) was vacuous — dischargeable by `⟨_, le_refl _⟩` with every hypothesis unused. Restated with the explicit constant `(k / r) ^ k`, which is uniform in `x`, and strengthened `0 ≤ r` to `0 < r` (no uniform bound exists at `r = 0` for `k > 0`). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Bhavik Mehta <bhavikmehta8@gmail.com>
…rability The six segments of the contour defining `a` fall into three classes, and within each class the analytic estimate is the same; only the parametrisation and a unit-modulus phase differ. Previously that argument was written out separately in each of I1.lean-I6.lean. Add `a/IntegralEstimates/Majorants.lean` collecting the shared ingredients: * `norm_φ₀''_le`, the `PolyFourierCoeffBound` for φ₀ transported to φ₀'' on `Im w > 1/2` once and for all, plus its three specialisations along the vertical ray, the cusp ray and the top edge; * `integrableOn_majorant_cusp` / `integrableOn_majorant_vertical`, the two majorant-integrability lemmas that were duplicated four times; * `Φ₁_eq_Φ₅_mul_phase` / `Φ₃_eq_Φ₅_mul_phase` and the resulting uniform bounds `norm_Φ₁_le`, `norm_Φ₃_le`, `norm_Φ₅_le` on (0, 1]; * `integrableOn_of_norm_le_const`. This fills the six `sorry`s in `Integrability.lean` (`Φⱼ_integrableOn`) and turns I1.lean-I6.lean into thin specialisations, net -133 lines there. Claude-Session: https://claude.ai/code/session_01FvNZchX49fvqUanJQhxpx4
Rebuild of the product-integrability work as a Fourier-only module, from
current main, with no dependency on any double-zero material and without
`Iⱼ_integrable`/`a_integrable` (those come from the Schwartz structure).
New `a/Fourier/Fubini.lean`:
* `I₁_integrand`-`I₆_integrand`: the integrands as maps `ℝ⁸ × ℝ → ℂ`;
* `Φ₁_prod_integrable`-`Φ₆_prod_integrable`, proved by contour class:
- `prod_integrable_of_gaussian_majorant` handles the compact top edge
(I₂, I₄) and the vertical tail (I₆) in one lemma, splitting the
majorant `exp(-π‖x‖²) * w t` into its x- and t-factors;
- the cusp class needs the scaled Gaussian, whose x-integral is t⁻⁴;
`exp(-2π/t) t²` beats it, leaving the bounded `exp(-2π/t) t⁻²`
(`integral_norm_I₅_le`), and I₁, I₃ follow from I₅ by
`prod_integrable_of_mul_unit_phase`;
* `Iⱼ_eq_integral` and `Iⱼ_integral_swap`, the Fubini exchanges.
Supporting additions: `continuous_z₂'`/`z₄'`/`z₅'`/`z₆'` in
IntegralParametrisations, `exp_neg_div_mul_inv_sq_le` in RealDecay and its
cusp specialisation in Majorants.
Claude-Session: https://claude.ai/code/session_01FvNZchX49fvqUanJQhxpx4
cameronfreer
requested review from
CBirkbeck,
b-mehta,
seewoo5 and
thefundamentaltheor3m
as code owners
September 1, 2026 05:58
cameronfreer
requested review from
pitmonticone and
viazovska
as code owners
September 1, 2026 05:58
…e proofs Applies the review suggestions on thefundamentaltheor3m#463: - delete unused norm_φ₀''_neg_inv_add_I_le, im_I_mul, neg_one_div_I_mul, and the private norm_cexp_pi_I_mul wrapper - drop the duplicate Bound_integrableOn aliases in I1/I3/I5/I6 in favour of the shared integrableOn_majorant_cusp/vertical - Exists.imp/term-mode golf throughout Majorants.lean and Integrability.lean Claude-Session: https://claude.ai/code/session_01FvNZchX49fvqUanJQhxpx4
This was referenced Sep 1, 2026
norm_cexp_pi_I_norm_sq_mul computes ‖cexp (π I ‖x‖² z)‖ once; the Φ₂/Φ₄/Φ₅/Φ₆ bounds specialise it, retiring norm_cexp_neg_pi_norm_sq_mul. Claude-Session: https://claude.ai/code/session_01FvNZchX49fvqUanJQhxpx4
3 tasks done
cameronfreer
marked this pull request as draft
September 8, 2026 16:27
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Joint integrability of the two-variable integrands and the justified interchanges of integration needed to compute the Fourier transform of each
Iⱼ.Where this sits
Depends on: #463 (integrable majorants for the contour integrands), whose pointwise estimates and phase identities this PR consumes. The branch has been refreshed onto #463, including its #460 prerequisite. Review the Fubini module and its supporting additions relative to #463; the diff against
mainincludes the parent stack. After #463 is merged, merge updatedmaininto this branch; the diff will then reduce to this PR's own changes.Merge order: #460 → #463 → #464, refreshing from
mainafter parent merges.Depended on by: nothing yet. This is the Fourier-side sibling of the eigenfunction work; the double-zeroes chain (#465 → #466) is independent of it.
Supersedes: #260, and the joint-integrability half of #261. Those branches had accumulated the same stacked history despite addressing different parts of the argument; this replaces them with one focused module.
What changed relative to #260
main, so it picks up thea/Integrability/reorganisation instead of the pre-reorg file layout.ContourEndpoints.leanandVerticalVanishing.leanare not part of this PR; that material now lives in feat(MagicFunction): estimates for the double-zero contour deformation #466.Iⱼ_integrableanda_integrabledropped. Integrability of eachIⱼoverℝ⁸belongs with the Schwartz structure (feat: improving bounds and restating things in the language of radial Schwartz functions #460's radial Schwartz maps), not here.Majorants.lean(feat(MagicFunction): shared integrable majorants for contour integrands #463), which is what makes the class-level refactor below possible.Contents
New
SpherePacking/MagicFunction/a/Fourier/Fubini.lean:The integrands.
I₁_integrand–I₆_integrand : ℝ⁸ × ℝ → ℂ, defined from the canonicalΦⱼ.Joint integrability on the product space, by contour type. Two generic routes replace six bespoke proofs:
prod_integrable_of_gaussian_majorant— if‖f (x, t)‖ ≤ exp(-π‖x‖²) · w twithwintegrable on the segment, the majorant splits andfis integrable on the product space. This settles the compact top edge (I₂,I₄,wconstant) and the vertical tail (I₆,w t = C exp(-2πt)).prod_integrable_of_mul_unit_phase— transfer along a continuous unit-modulus phase, which is howΦ₁andΦ₃inherit fromΦ₅.The cusp class is the one that genuinely differs: the Gaussian there is scaled,
exp(-π t ‖x‖²), and itsℝ⁸-integral ist⁻⁴, blowing up ast → 0⁺. The cusp boundexp(-2π/t) · t²beats it, leaving the boundedexp(-2π/t) · t⁻²(integral_norm_I₅_le, resting on the newexp_neg_div_mul_inv_sq_le).Order of integration.
Iⱼ_eq_integralexpresses eachIⱼas a set integral of its integrand, andIⱼ_integral_swapjustifies interchanging∫_{ℝ⁸}and∫_{segment}.Supporting additions
IntegralParametrisations.lean:continuous_z₂',continuous_z₄',continuous_z₅',continuous_z₆'.RealDecay.lean:exp_neg_div_mul_inv_sq_le(exp(-c/t) · t⁻² ≤ exp(-c)fort ∈ (0,1],c ≥ 2).Majorants.lean: its cusp specialisation atc = 2π.Latest cleanup
integral_norm_I₅_lenow usesintegral_mono_of_nonneg: the left-hand integrand is a norm, so the comparison needs only the Gaussian majorant's integrability, not a separate integrability proof for the norm.Verification
Full
lake buildis clean, no newsorrys.