feat(MagicFunction): shared integrable majorants for contour integrands - #463
cameronfreer wants to merge 32 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
There was a problem hiding this comment.
(
Pulled the branch and reviewed locally. Everything in the PR description checks out:
- Full
lake buildis clean (3546 jobs);Majorants.leanitself emits zero warnings; projectsorrycount drops 72 → 66. #print axiomsconfirms the verification claims:Φ₂/Φ₄_integrableOnare sorry-free, andΦ₁/Φ₃/Φ₅/Φ₆_integrableOndepend only on the pre-existingsorryAxfromPolyFourierCoeffBound.norm_φ₀_le, untouched here. No new axioms.- Cross-checked the stacked branches (#464–#468): the inline findings below are all stack-safe (no downstream uses of the flagged declarations), while #464's
Fourier/Fubini.leangenuinely consumesnorm_φ₀''_I_mul_le,norm_φ₀''_neg_inv_I_mul_le,cexp_pi_I_mul_I, and both phase identities — so the shared-infrastructure design pays off downstream.
Inline comments below. I applied all of them (plus the norm_cexp_pi_I_mul inlining already raised) on top of this branch and the build stays green, net −21 lines.
There was a problem hiding this comment.
Golf/cleanup pass, complementing the earlier correctness review. Every suggestion below is compile-verified twice: first individually against this branch, then all of them applied together (along with the deletions from the earlier review) — full lake build green, no new warnings, all lines ≤ 100 chars. Net effect of the combined set: Majorants.lean 279 → 199 lines (−80), Integrability.lean 95 → 86 (−9), with no statement changes anywhere, so I1–I6 and the stacked PRs (#464, #468) are unaffected.
A few notes that span multiple suggestions:
- The
norm_Φ₁_le/norm_Φ₃_lesuggestions stop using the privatenorm_cexp_pi_I_mul, so together with the earlier thread on it, that wrapper ends up with zero callers — deletable. neg_one_div_I_mulbecomes dead onceim_neg_one_div_I_mulis proved directly; those two suggestions should be applied together.- Recurring wins worth knowing about:
Exists.impabsorbs theobtain/refine-existential boilerplate in five lemmas; the phase-identity twins need noI² = −1at all (the exponent split is a pure ring identity); andhneinim_neg_one_div_add_Iwas never used (complex division is total). - Cosmetic, not suggested inline:
Φ₂/Φ₄_integrableOnsignatures also fit on one line, and mathlib style would prefer0 ≤ roverr ≥ 0in the six integrability signatures — but those signatures pre-date this PR. - Side note for a follow-up, not this PR: with
Φ₆_eq_I₆_g+Φ₆_integrableOnin place,I6.lean's header TODO "Integrability ofg" is oneIntegrableOn.congr_funaway.
…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
|
@CBirkbeck @seewoo5 Thanks for these reviews. Not sure why there were so many silly issues this time. I think I've addressed all of them. |
|
@cameronfreer can you please mark resolved conversations as resolved? Thank you |
The six contour-integrand integrability proofs now use shared bounds for the cusp segments, compact top edges, and vertical tail. This fills the six
Φⱼ_integrableOnplaceholders and removes repeated estimates fromI1.lean–I6.lean.Stack and merge order
mainbefore merging feat(MagicFunction): shared integrable majorants for contour integrands #463.PolyFourierCoeffBound.norm_φ₀_le.RealDecay.leanor feat: improving bounds and restating things in the language of radial Schwartz functions #460'sDecay.lean.Integrability.leanportion of feat(Integrability): add Φⱼ integrability proofs #261.While #460 is unmerged, review the changes relative to its
boundingbranch; the GitHub diff againstmainalso contains #460.Changes
Majorants.leancentralizes theφ₀''norm estimate, its ray specializations, two integrability lemmas, and the phase identities relatingΦ₁,Φ₃, andΦ₅.Integrability.leanproves integrability by contour type.I1.lean–I6.leanuse the shared estimates directly.setIntegral_mono_of_nonneg, eliminating the duplicated nonintegrable-case arguments.decay'₀/decay'placeholders fromI2.lean,I4.lean, andI6.lean, together with their empty and commented scaffolding. The nonnegative-input decay goals live in feat: improving bounds and restating things in the language of radial Schwartz functions #460'sSchwartz.lean.The earlier review suggestions from @CBirkbeck and @seewoo5 are incorporated, including removal of the unused specializations and four
Bound_integrableOnaliases.Verification
Full
lake buildandlake exe mk_all --check --modulepass on the combined #460/#463 stack. No newsorrydeclarations.Φ₂_integrableOnandΦ₄_integrableOnare axiom-clean; the other four still inherit the pre-existingsorryinPolyFourierCoeffBound.norm_φ₀_le, addressed separately by #468.