back to table · edit · history · where entries came from · files · download
2507 bytes, as of the version from 2026-11-02 15:29 (current). Recorded here, not run.
"""Exact coefficient and enumeration checks for T680. Run: sage -python exact_checks.py."""
import math,json
import numberdb.sage as numberdb
from sage.rings.rational_field import QQ
from sage.rings.integer_ring import ZZ
from generate import TEMPLATES,upper_parameters,scale,CanonicalCoordinates
from checks import ALPHA,SCALES
def product(values):
result=QQ(1)
for v in values:result*=v
return result
def harmonic(n):return sum((QQ(1)/k for k in range(1,n+1)),QQ(0))
def main():
N=40;results=[]
for template in TEMPLATES:
a=upper_parameters(template); C=scale(template)
assert sorted(a)==sorted(QQ(s) for s in ALPHA[template])
assert len(a)==4 and sum(a)==2 and C==SCALES[template]
c=[QQ(1)];h=[QQ(0)];g=[QQ(0)]
for n in range(1,N+1):
p=product(v+n-1 for v in a)
dp=sum(product(a[k]+n-1 for k in range(4) if k!=j) for j in range(4))
c.append(c[-1]*p/QQ(n)**4)
h.append(h[-1]+sum(QQ(1)/(v+n-1) for v in a)-QQ(4)/n)
g.append(c[n]*h[n])
assert n**4*c[n]==p*c[n-1]
assert n**4*g[n]-p*g[n-1]+4*n**3*c[n]-dp*c[n-1]==0
if template=='5':
assert c[n]*C**n==QQ(math.factorial(5*n))/QQ(math.factorial(n))**5
assert h[n]==5*(harmonic(5*n)-harmonic(n))
if template=='2.2.2.2':
assert c[n]*C**n==QQ(math.factorial(2*n))**4/QQ(math.factorial(n))**8
assert h[n]==8*(harmonic(2*n)-harmonic(n))
F=[v*C**n for n,v in enumerate(c)];G=[v*C**n for n,v in enumerate(g)]
R=[QQ(0)];E=[QQ(1)]
for n in range(1,N+1):
R.append(G[n]-sum(F[k]*R[n-k] for k in range(1,n+1)))
E.append(sum(k*R[k]*E[n-k] for k in range(1,n+1))/QQ(n))
assert all(e.denominator()==1 for e in E)
if template=='5':assert E[:3]==[1,770,1014275]
results.append({'template':template,'scale':C,'q_coefficients_checked_through_degree':N+1})
params=list(CanonicalCoordinates().enumerate())
assert len(params)==112 and len({tuple(p.values()) for p in params})==112
for z in (QQ(-1),QQ(1)/2,QQ(2)):
for x in (z,1-z):
assert all(p==2 for p in (abs(x.numerator())*x.denominator()).prime_divisors())
print(json.dumps({'passed':True,'templates':results,'entry_count':len(params),'coefficient_checks':'exact rational recurrence, first logarithmic solution, scaling and integrality'},indent=2))
if __name__=='__main__':main()