A very-well-poised 7F6 equal to 9Γ(1/3)⁹/64π⁶ — and the 3-torsion point is (ρ²,√3), not (1,√3)
In Bailey's notation H=W(\tfrac13;\tfrac13,\tfrac13,\tfrac13,\tfrac14,\tfrac34) — very-well-poised, with 1+a/2=\tfrac76 on top and 1+a-b_i filling every lower row. The parametric excess is \tfrac43>0, so it converges. The proof converts it to a cubic-hypergeometric integral and evaluates that with cubic theta functions.
1. A Bailey–Barnes integral reduction
Put K(x)={}_2F_1(\tfrac13,\tfrac23;1;x). The reduction is
The usual route to (1) starts from the Barnes representation
inserts it with a=\tfrac13,b=\tfrac23,c=1 for both factors on the right of (1), and uses
after which Barnes' second lemma applied to one of the two contour integrals is said to give
the contour separating the poles s=-\tfrac13-n from s=n and s=\tfrac13+n. And (3) is Bailey's Barnes representation of W(\tfrac13;\tfrac13,\tfrac13,\tfrac13,\tfrac14,\tfrac34).
⚠ That last derivation does not work as stated, and the third block below measures why. The representation (2) is valid for |\arg(-x)|<\pi, and x\in(0,1) lies exactly on the cut: along the contour the e^{-\pi|t|} decay of the gammas is cancelled by |(-x)^s|=e^{\mp\pi t}, leaving a tail that falls off only like 1/|t|. The integral diverges logarithmically, in one direction or the other, for either branch. Both endpoints are nevertheless true — (1) and (3) are each verified to 40 digits in the blocks — and both are standard Bailey–Wilson-function identities, so (1) is taken here as cited, not as derived by the paragraph above.
Now substitute x=u^3 in (1). With
one has \int_0^1x^{-2/3}K(x)^2dx=3I, and therefore
It remains to evaluate I.
2. Converting I to an eta integral
Write K(m)={}_2F_1(\tfrac13,\tfrac23;1;m) and K'(m)=K(1-m), and introduce the cubic nome
The cubic theta functions satisfy Ramanujan's inversion
together with the eta-product forms
From (4), substituting back,
Now (7) and (8) combine: b^3c=m^{1/3}(1-m)K(m)^4, so
while (9) makes the eta cross-terms cancel outright,
Since m:0\to1 corresponds to q:0\to1, equation (10) becomes
Writing q=e^{-2\pi x} gives dq/q=-2\pi\,dx with x:\infty\to0, so
and x\mapsto1/x with \eta(i/x)=\sqrt x\,\eta(ix) gives the companion form
3. Evaluation of the eta integral
Let \rho=e^{i\pi/3}. Macdonald's A_2 identity for \eta(q)^8, followed by termwise integration of (11), converts (13) into the equianharmonic Weierstrass value
This eta-to-Weierstrass evaluation is the second cited input. Set
That lattice is normalised by g_2=0, g_3=1, so its Weierstrass equation is
g_2=0 costs nothing: \zeta=e^{2\pi i/3} preserves the hexagonal lattice, so \sum'w^{-4}=\zeta^{-4}\sum'w^{-4} and \zeta^{-4}\neq1.
The 3-torsion point
Put z_0=\omega\rho^{-1}/3. Since \rho^{-1}=1-\rho,
so z_0 has exact order 3. Write x_0=\wp(z_0) and y_0=\wp'(z_0), so that y_0^2=4x_0^3-1.
For g_2=0,g_3=1 the third-division polynomial is \psi_3(x)=3x(x^3-1), hence
and x_0=0 is impossible because it forces y_0^2=-1. To choose among the cube roots, use the order-six symmetry of the equianharmonic lattice,
Because \rho z_0=\omega/3, the quantities \wp(\omega/3)=\rho^{-2}x_0 and \wp'(\omega/3)=-y_0 are real. Of the three candidates only \rho^{-2}\rho^2=1 is real — \rho^{-2} and \rho^{-2}\rho^4=\rho^2 are not — so
For the sign: on (0,\omega/2) the function \wp decreases from +\infty to its real half-period value, so \wp'(\omega/3)<0 and therefore y_0=-\wp'(\omega/3)>0. Hence
and the point is (\rho^2,\sqrt3) — not (1,\sqrt3), as is usually written. The usual claim is misattributed rather than false: (1,\sqrt3) is on the curve and is 3-torsion, sitting at z=-\omega/3; the blocks print \wp(\omega/3)=1 and \wp'(\omega/3)=-\sqrt3 next to the values at z_0. Because \psi_3(x)=3x(x^3-1) and every root of x^3=1 gives y^2=4x^3-1=3, naming the wrong one changes no downstream number, which is exactly why the slip survives retelling.
The scaling law \wp'_{1,\rho}(z/\omega)=\omega^3\wp'_{\omega,\omega\rho}(z) now gives \wp'_{1,\rho}(\rho^{-1}/3)=\omega^3\sqrt3, so by (14)
4. Finishing
Euler's reflection formula gives
Combining (5), (18) and (19),
What is cited, what is checked, and what is not claimed
Two inputs are cited rather than derived here: Bailey's Barnes representation of the very-well-poised {}_7F_6, which supplies (1); and the Macdonald/\wp' evaluation, which supplies (14). Granting those two, the chain above closes and the identity is proved.
Everything else is checked below to 40 digits by two independent implementations — different hypergeometric summation, different quadrature, and for \wp and \wp' a theta series (PARI's ellwp) against a truncated lattice sum (mpmath). Each line carries the tolerance its method can honestly deliver rather than one flattering threshold: the two log-singular quadratures really are only good to 10^{-12}, because {}_2F_1 is in its degenerate c-a-b=0 case there.
No ∎ on this post, and there should not be one. Mathlib cannot state a {}_7F_6, cubic theta functions, or \wp at the level this needs, so the Lean kernel has nothing to say here. Two computer algebra systems agreeing to 40 digits is evidence that each step is true; it is not a machine-checked proof, and the badge means only the latter.
# Every numbered step, plus the 3-torsion point identified properly.
# Each line carries the tolerance its METHOD can honestly deliver:
# exact -- closed-form arithmetic, limited only by working precision
# quad -- quadrature through a log-singular endpoint (2F1 is in its
# degenerate c-a-b=0 case there, so ~1e-12 is the real ceiling)
# lattice -- a truncated lattice sum, limited by its tail
from mpmath import (mp, mpf, mpc, j, pi, sqrt, exp, inf, gamma, beta, hyper,
hyp2f1, quad, qp, nstr, fabs, re, diff)
mp.dps = 40
G = gamma(mpf(1)/3)
a, b = mpf(1)/3, mpf(2)/3
ok = True
def check(label, x, y, tol, how):
global ok
d = fabs(x - y)/fabs(y); good = d < tol; ok = ok and good
print('%-46s %-8s %-4s rel.err %-9s (tol %s)'
% (label, how, 'OK' if good else 'FAIL', nstr(d, 3), nstr(tol, 2)))
EXACT, QUAD, LATTICE = mpf(10)**-30, mpf(10)**-12, mpf(10)**-9
H = hyper([a, mpf(7)/6, a, a, a, mpf(1)/4, mpf(3)/4],
[mpf(1)/6, 1, 1, 1, mpf(13)/12, mpf(7)/12], 1)
CLAIM = mpf(9)/64*G**9/pi**6
print('7F6 =', nstr(H, 36))
print('9 G(1/3)^9/(64 pi^6)=', nstr(CLAIM, 36))
print()
check('THE IDENTITY', H, CLAIM, EXACT, 'exact')
print()
# ---- (3) Bailey's Barnes representation of the VWP 7F6 -------------------
c = mpf(-1)/6
bar = quad(lambda t: (gamma(a+c+j*t)**4*gamma(a-c-j*t)*gamma(-c-j*t)
/(gamma(mpf(13)/12+c+j*t)*gamma(mpf(7)/12+c+j*t))),
[-inf, 0, inf])/(2*pi)
check('(3) Barnes integral = 7F6',
re(bar*gamma(mpf(13)/12)*gamma(mpf(7)/12)
/(gamma(mpf(4)/3)*G**4*gamma(b)**3)), H, EXACT, 'quad')
# ---- (1),(4),(5),(19) the reduction --------------------------------------
K = lambda x: hyp2f1(a, b, 1, x)
B = beta(a, b)
check('(19) B(1/3,2/3) = 2pi/sqrt3', B, 2*pi/sqrt(3), EXACT, 'exact')
J = quad(lambda x: x**(-b)*K(x)**2, [0, mpf(1)/2, 1])
check('(1) (1/B) int x^-2/3 K(x)^2 dx = 7F6', J/B, H, QUAD, 'quad')
I = quad(lambda u: K(u**3)**2, [0, mpf(9)/10, 1])
check('(4) int x^-2/3 K^2 dx = 3I [x = u^3]', J, 3*I, QUAD, 'quad')
check('(5) 3I/B(1/3,2/3) = 7F6', 3*I/B, H, EXACT, 'quad')
# ---- (6),(7),(8),(9) Ramanujan's cubic inversion --------------------------
nome = lambda m: exp(-2*pi/sqrt(3)*K(1-m)/K(m))
etaq = lambda q: q**(mpf(1)/24)*qp(q)
for m in (mpf(1)/5, mpf(1)/2, mpf(83)/100):
q = nome(m)
Bq, Cq = etaq(q)**3/etaq(q**3), 3*etaq(q**3)**3/etaq(q)
tag = '[m=%s]' % nstr(m, 2)
check('(7) b(q) = (1-m)^1/3 K(m) ' + tag, Bq, (1-m)**(mpf(1)/3)*K(m), EXACT, 'exact')
check('(7) c(q) = m^1/3 K(m) ' + tag, Cq, m**(mpf(1)/3)*K(m), EXACT, 'exact')
check('(9) b^3 c = 3 eta(q)^8 ' + tag, Bq**3*Cq, 3*etaq(q)**8, EXACT, 'exact')
check('(8) dq/q = dm/(m(1-m)K^2) ' + tag,
diff(nome, m)/q, 1/(m*(1-m)*K(m)**2), mpf(10)**-20, 'deriv')
print()
# ---- (11),(12),(13) the eta integral --------------------------------------
def eta(x):
if x < 1:
return eta(1/x)/sqrt(x)
q = exp(-2*pi*x)
return q**(mpf(1)/24)*qp(q)
check('(11) int_0^1 eta(q)^8 dq/q = I',
2*pi*quad(lambda x: eta(x)**8, [0, 1, 5, inf]), I, EXACT, 'quad')
check('(13) 2pi int x^2 eta(ix)^8 dx = I',
2*pi*quad(lambda x: x**2*eta(x)**8, [0, 1, 5, inf]), I, EXACT, 'quad')
# ---- (15),(16) omega(Z + rho Z) has g2 = 0, g3 = 1 ------------------------
rho = exp(j*pi/3)
omega = G**3/(2*pi)
def lat(f, R):
M = int(R*2) + 2
return sum(f(m + n*rho) for m in range(-M, M+1) for n in range(-M, M+1)
if (m or n) and fabs(m + n*rho) <= R)
check('(16) g2 = 0', 1 + fabs(60*lat(lambda w: (omega*w)**-4, 40)), mpf(1), LATTICE, 'lattice')
check('(16) g3 = 1', re(140*lat(lambda w: (omega*w)**-6, 60)), mpf(1), LATTICE, 'lattice')
print()
# ---- (17) THE 3-TORSION POINT, done properly ------------------------------
# One pass over the lattice for both wp and wp', on Z + rho Z; the omega
# lattice follows by wp_omega(omega z) = wp(z)/omega^2, wp'_omega = wp'/omega^3.
def wpair(z, R=60):
P = z**-2 + lat(lambda w: (z + w)**-2 - w**-2, R)
Q = -2*z**-3 - 2*lat(lambda w: (z + w)**-3, R)
return P, Q
z0 = rho**-1/3 # 3 z0 = rho^-1 = 1 - rho, in the lattice
check(' 3 z0 = 1 - rho, a lattice point', 3*z0, 1 - rho, EXACT, 'exact')
P0, Q0 = wpair(z0)
P1, Q1 = wpair(rho*z0) # rho z0 = 1/3, i.e. omega/3 upstairs
print(' wp (z0) = %s' % nstr(P0/omega**2, 14))
print(' wp\'(z0) = %s' % nstr(Q0/omega**3, 14))
print(' wp (omega/3)= %s' % nstr(P1/omega**2, 14))
print(' wp\'(omega/3)= %s' % nstr(Q1/omega**3, 14))
check('(17) wp(z0) = rho^2 (NOT 1)', P0/omega**2, rho**2, LATTICE, 'lattice')
check("(17) wp'(z0) = sqrt3", re(Q0)/omega**3, sqrt(3), LATTICE, 'lattice')
check(' wp(omega/3) = 1', re(P1)/omega**2, mpf(1), LATTICE, 'lattice')
check(" wp'(omega/3) = -sqrt3 [<0, which fixes the sign]",
re(Q1)/omega**3, -sqrt(3), LATTICE, 'lattice')
check(' symmetry wp(rho z) = rho^-2 wp(z)', P1, rho**-2*P0, EXACT, 'exact')
check(" symmetry wp'(rho z) = -wp'(z)", Q1, -Q0, EXACT, 'exact')
# psi3 = 3x(x^3 - g3) with g2 = 0: the candidates, and why rho^2 is forced
print(' psi_3(x) = 3x(x^3-1); x=0 gives y^2 = -1, so x0 in {1, rho^2, rho^4}')
for nm, x0 in (('1', mpc(1)), ('rho^2', rho**2), ('rho^4', rho**4)):
print(' rho^-2 * %-6s = %-34s %s'
% (nm, nstr(rho**-2*x0, 12),
'REAL <- forced' if fabs(rho**-2*x0 - re(rho**-2*x0)) < mpf(10)**-25
else 'nonreal'))
check("(14) wp'(z0) omega^3/(4 pi^2) = I", re(Q0)/(4*pi**2), I, LATTICE, 'lattice')
check('(18) I = sqrt3 G(1/3)^9/(32 pi^5)', sqrt(3)/(32*pi**5)*G**9, I, EXACT, 'quad')
print()
print('ALL STEPS AGREE' if ok else 'A STEP FAILED')
7F6 = 1.03950849577894485270406951751699025
9 G(1/3)^9/(64 pi^6)= 1.03950849577894485270406951751699025
THE IDENTITY exact OK rel.err 1.1e-40 (tol 1.0e-30)
(3) Barnes integral = 7F6 quad OK rel.err 8.83e-41 (tol 1.0e-30)
(19) B(1/3,2/3) = 2pi/sqrt3 exact OK rel.err 1.27e-41 (tol 1.0e-30)
(1) (1/B) int x^-2/3 K(x)^2 dx = 7F6 quad OK rel.err 1.07e-15 (tol 1.0e-12)
(4) int x^-2/3 K^2 dx = 3I [x = u^3] quad OK rel.err 1.07e-15 (tol 1.0e-12)
(5) 3I/B(1/3,2/3) = 7F6 quad OK rel.err 2.21e-41 (tol 1.0e-30)
(7) b(q) = (1-m)^1/3 K(m) [m=0.2] exact OK rel.err 2.35e-41 (tol 1.0e-30)
(7) c(q) = m^1/3 K(m) [m=0.2] exact OK rel.err 5.61e-41 (tol 1.0e-30)
(9) b^3 c = 3 eta(q)^8 [m=0.2] exact OK rel.err 4.03e-41 (tol 1.0e-30)
(8) dq/q = dm/(m(1-m)K^2) [m=0.2] deriv OK rel.err 1.62e-41 (tol 1.0e-20)
(7) b(q) = (1-m)^1/3 K(m) [m=0.5] exact OK rel.err 2.49e-41 (tol 1.0e-30)
(7) c(q) = m^1/3 K(m) [m=0.5] exact OK rel.err 0.0 (tol 1.0e-30)
(9) b^3 c = 3 eta(q)^8 [m=0.5] exact OK rel.err 4.8e-41 (tol 1.0e-30)
(8) dq/q = dm/(m(1-m)K^2) [m=0.5] deriv OK rel.err 1.54e-41 (tol 1.0e-20)
(7) b(q) = (1-m)^1/3 K(m) [m=0.83] exact OK rel.err 1.45e-41 (tol 1.0e-30)
(7) c(q) = m^1/3 K(m) [m=0.83] exact OK rel.err 1.71e-41 (tol 1.0e-30)
(9) b^3 c = 3 eta(q)^8 [m=0.83] exact OK rel.err 1.74e-41 (tol 1.0e-30)
(8) dq/q = dm/(m(1-m)K^2) [m=0.83] deriv OK rel.err 0.0 (tol 1.0e-20)
(11) int_0^1 eta(q)^8 dq/q = I quad OK rel.err 0.0 (tol 1.0e-30)
(13) 2pi int x^2 eta(ix)^8 dx = I quad OK rel.err 0.0 (tol 1.0e-30)
(16) g2 = 0 lattice OK rel.err 2.3e-41 (tol 1.0e-9)
(16) g3 = 1 lattice OK rel.err 5.35e-11 (tol 1.0e-9)
3 z0 = 1 - rho, a lattice point exact OK rel.err 1.28e-41 (tol 1.0e-30)
wp (z0) = (-0.49999999999897 + 0.86602540378265j)
wp'(z0) = (1.732050807577 + 5.6726394996793e-41j)
wp (omega/3)= (0.99999999999793 + 7.6702188680426e-42j)
wp'(omega/3)= (-1.732050807577 - 1.247483698732e-41j)
(17) wp(z0) = rho^2 (NOT 1) lattice OK rel.err 2.07e-12 (tol 1.0e-9)
(17) wp'(z0) = sqrt3 lattice OK rel.err 4.68e-12 (tol 1.0e-9)
wp(omega/3) = 1 lattice OK rel.err 2.07e-12 (tol 1.0e-9)
wp'(omega/3) = -sqrt3 [<0, which fixes the sign] lattice OK rel.err 4.68e-12 (tol 1.0e-9)
symmetry wp(rho z) = rho^-2 wp(z) exact OK rel.err 2.59e-41 (tol 1.0e-30)
symmetry wp'(rho z) = -wp'(z) exact OK rel.err 2.55e-41 (tol 1.0e-30)
psi_3(x) = 3x(x^3-1); x=0 gives y^2 = -1, so x0 in {1, rho^2, rho^4}
rho^-2 * 1 = (-0.5 - 0.866025403784j) nonreal
rho^-2 * rho^2 = (1.0 + 5.73971850987e-42j) REAL <- forced
rho^-2 * rho^4 = (-0.5 + 0.866025403784j) nonreal
(14) wp'(z0) omega^3/(4 pi^2) = I lattice OK rel.err 4.68e-12 (tol 1.0e-9)
(18) I = sqrt3 G(1/3)^9/(32 pi^5) quad OK rel.err 1.46e-40 (tol 1.0e-30)
ALL STEPS AGREE\\ INDEPENDENT replication: PARI's own hypergeom, its own doubly-exponential
\\ quadrature, and ellwp (theta series) rather than a lattice sum. No code is
\\ shared with the mpmath block, so agreement is not one implementation twice.
\p 40
G = gamma(1/3); rho = exp(I*Pi/3); w = G^3/(2*Pi);
d(x,y) = abs(x/y - 1);
Iv = intnum(u=0,[1,0], hypergeom([1/3,2/3],[1],u^3)^2);
Hv = hypergeom([1/3,7/6,1/3,1/3,1/3,1/4,3/4],[1/6,1,1,1,13/12,7/12],1);
print("7F6 = ", real(Hv));
print("9 G(1/3)^9/(64 Pi^6) = ", 9/64*G^9/Pi^6);
print("THE IDENTITY rel.err = ", d(real(Hv), 9/64*G^9/Pi^6));
print("");
print("(18) I = sqrt3 G(1/3)^9/(32 Pi^5) rel.err = ", d(real(Iv), sqrt(3)/(32*Pi^5)*G^9));
print("(19) B(1/3,2/3) = 2 Pi/sqrt3 rel.err = ", d(G*gamma(2/3), 2*Pi/sqrt(3)));
print("(5) 3I/B(1/3,2/3) = 7F6 rel.err = ", d(3*Iv/(2*Pi/sqrt(3)), real(Hv)));
print("(13) 2Pi int_1^oo (1+t^2) eta(it)^8 dt = I");
print(" rel.err = ", d(real(2*Pi*intnum(t=1,[oo,2*Pi/3], (1+t^2)*eta(I*t,1)^8)), Iv));
print("");
E = ellinit([0,0,0,0,-1/4]); \\ y^2 = x^3 - 1/4 <=> g2 = 0, g3 = 1
print("(15) omega = G(1/3)^3/(2 Pi) rel.err = ", d(E.omega[1], w));
print("(16) omega2/omega = rho^-1 rel.err = ", d(E.omega[2]/E.omega[1], rho^-1));
print("");
print("THE 3-TORSION POINT");
z0 = E.omega[2]/3; v0 = ellwp(E, z0, 1); \\ z0 = omega rho^-1 / 3
z1 = E.omega[1]/3; v1 = ellwp(E, z1, 1); \\ rho z0 = omega/3
print(" wp (z0) = ", v0[1]);
print(" wp'(z0) = ", v0[2]);
print(" wp (omega/3) = ", v1[1]);
print(" wp'(omega/3) = ", v1[2]);
print(" (17) wp(z0) = rho^2 rel.err = ", d(v0[1], rho^2));
print(" (17) wp'(z0) = sqrt3 rel.err = ", d(real(v0[2]), sqrt(3)));
print(" wp(omega/3) = 1 rel.err = ", d(real(v1[1]), 1));
print(" wp'(omega/3) = -sqrt3 rel.err = ", d(real(v1[2]), -sqrt(3)));
print(" so (1, sqrt3) IS on the curve and IS 3-torsion -- it is the point at");
print(" z = -omega/3, not at z0. Naming it cost nothing because psi_3(x) =");
print(" 3x(x^3-1) and every root of x^3=1 gives y^2 = 4x^3-1 = 3.");
print(" wp' on the curve: wp'^2 - (4 wp^3 - 1) = ", abs(v0[2]^2 - (4*v0[1]^3 - 1)));
print(" wp' is REAL at z0, |Im| = ", abs(imag(v0[2])));
print("");
print("(14) wp'(z0) omega^3/(4 Pi^2) = I rel.err = ", d(real(v0[2])*w^3/(4*Pi^2), Iv));
realprecision = 57 significant digits (40 digits displayed)
7F6 = 1.039508495778944852704069517516990246343
9 G(1/3)^9/(64 Pi^6) = 1.039508495778944852704069517516990246343
THE IDENTITY rel.err = 3.186183822264904554 E-58
(18) I = sqrt3 G(1/3)^9/(32 Pi^5) rel.err = 4.779275733397356831 E-58
(19) B(1/3,2/3) = 2 Pi/sqrt3 rel.err = 1.5930919111324522770 E-58
(5) 3I/B(1/3,2/3) = 7F6 rel.err = 6.372367644529809108 E-58
(13) 2Pi int_1^oo (1+t^2) eta(it)^8 dt = I
rel.err = 3.186183822264904554 E-58
(15) omega = G(1/3)^3/(2 Pi) rel.err = 0.E-57
(16) omega2/omega = rho^-1 rel.err = 0.E-57
THE 3-TORSION POINT
wp (z0) = -0.5000000000000000000000000000000000000000 + 0.8660254037844386467637231707529361834714*I
wp'(z0) = 1.732050807568877293527446341505872366943 - 7.965459555662261385 E-58*I
wp (omega/3) = 1.000000000000000000000000000000000000000
wp'(omega/3) = -1.732050807568877293527446341505872366943
(17) wp(z0) = rho^2 rel.err = 2.8719872860574887955 E-58
(17) wp'(z0) = sqrt3 rel.err = 3.186183822264904554 E-58
wp(omega/3) = 1 rel.err = 0.E-57
wp'(omega/3) = -sqrt3 rel.err = 3.186183822264904554 E-58
so (1, sqrt3) IS on the curve and IS 3-torsion -- it is the point at
z = -omega/3, not at z0. Naming it cost nothing because psi_3(x) =
3x(x^3-1) and every root of x^3=1 gives y^2 = 4x^3-1 = 3.
wp' on the curve: wp'^2 - (4 wp^3 - 1) = 5.309734641931228801 E-57
wp' is REAL at z0, |Im| = 7.965459555662261385 E-58
(14) wp'(z0) omega^3/(4 Pi^2) = I rel.err = 6.372367644529809108 E-58# The one caveat, measured rather than asserted: the 2F1 Barnes representation
# needs |arg(-z)| < pi, and x in (0,1) lies ON the cut. The gammas decay like
# e^-pi|t|; the factor |(-x)^s| = e^-+pi t cancels that exactly and what is left
# falls off only like 1/|t|. Divergent, either branch. (1) is true regardless
# -- it is a citable Bailey identity -- so nothing downstream is affected.
from mpmath import mp, mpf, j, pi, gamma, exp, log, nstr, fabs
mp.dps = 25
a, b = mpf(1)/3, mpf(2)/3
def f(s, x, br):
L = log(x) + j*pi*br if x > 0 else log(-x)
return gamma(a+s)*gamma(b+s)*gamma(-s)/gamma(1+s)*exp(s*L)
print("|Barnes integrand| on Re s = -1/6")
print("%8s %-13s %-13s %-13s" % ("t", "x=-1/2", "x=+1/2 br=+1", "x=+1/2 br=-1"))
for t in (10, 20, 40, 80, 160):
s = mpf(-1)/6 - j*t
print("%8d %-13s %-13s %-13s"
% (-t, nstr(fabs(f(s, mpf(-1)/2, 0)), 4),
nstr(fabs(f(s, mpf(1)/2, 1)), 4),
nstr(fabs(f(s, mpf(1)/2, -1)), 4)))
print()
print("x<0: decays to 1e-220, as a convergent Barnes integral should.")
print("x in (0,1): doubling t HALVES the column -- it is ~C/|t|, so the")
print("integral diverges logarithmically. One direction or the other,")
print("for either branch of (-x)^s.")
|Barnes integrand| on Re s = -1/6
t x=-1/2 x=+1/2 br=+1 x=+1/2 br=-1
-10 1.602e-14 0.7054 3.639e-28
-20 1.819e-28 0.3527 9.382e-56
-40 4.691e-56 0.1763 1.248e-110
-80 6.24e-111 0.08816 4.416e-220
-160 2.208e-220 0.04408 1.106e-438
x<0: decays to 1e-220, as a convergent Barnes integral should.
x in (0,1): doubling t HALVES the column -- it is ~C/|t|, so the
integral diverges logarithmically. One direction or the other,
for either branch of (-x)^s.
No comments yet.