back to table · edit · history · where entries came from · files · download
2560 bytes, as of the version from 2026-11-11 00:55 (current). Recorded here, not run.
"""T712: verify constraint correction and constructive comparisons.
Run: sage -python relations_check.py with generate.py beside it.
These checks share the generating kernel; the periodic checker is independent.
"""
import generate,json
from sage.rings.rational_field import QQ
from sage.rings.integer_ring import ZZ
from sage.arith.misc import moebius
from sage.rings.real_arb import RealBallField
from sage.matrix.constructor import matrix
R=RealBallField(640);out=[]
for N in range(2,31):
S=tuple(range(2,N+1));K,b,a,D=generate.system(S,640)
G=matrix(R,[[generate.gram(j,k,640) for k in range(1,N+1)] for j in range(1,N+1)])
h=matrix(R,N,1,[(R(k).log()+1-R.euler_constant())/k for k in range(1,N+1)])
v=matrix(R,N,1,[R(QQ(1)/k) for k in range(1,N+1)])
c=G.solve_right(h);z=G.solve_right(v)
unrestricted=1-(h.transpose()*c)[0,0]
penalty=(v.transpose()*c)[0,0]**2/(v.transpose()*z)[0,0]
corrected=unrestricted+penalty
assert corrected.is_finite() and R(corrected.rad())<R(QQ(1)/10**110)
assert corrected.overlaps(D) and penalty>0
mu=[moebius(ZZ(k)) for k in range(1,N+1)]
gn=sum((QQ(mu[k-1])/k for k in range(1,N+1)),QQ(0))
B=list(mu);B[-1]-=N*gn
V=list(mu);V[0]-=gn
assert sum((QQ(B[k-1])/k for k in range(1,N+1)),QQ(0))==0
assert sum((QQ(V[k-1])/k for k in range(1,N+1)),QQ(0))==0
assert all(V[k-1]==0 for k in range(2,N+1) if not ZZ(k).is_squarefree())
def norm(w):
w=matrix(R,N,1,w)
return 1+2*(h.transpose()*w)[0,0]+(w.transpose()*G*w)[0,0]
EB=norm(B);EV=norm(V)
Ssf=generate.support_indices('squarefree',N);Dsf=generate.system(Ssf,640)[3]
if N==2:assert EB.overlaps(D)
else:assert EB-D>0
assert EV-Dsf>0
out.append({'N':N,'all_distance':str(D),'unrestricted_distance':str(unrestricted),'penalty':str(penalty),'B_error':str(EB),'V_error':str(EV)})
# Direct finite weighted sums with an explicit positive remainder bound.
# This is a low-precision normalization check independent of cotangent identities.
finite=[]
for support,N in [('all',2),('all',10),('all',30),('squarefree',30)]:
S=generate.support_indices(support,N);K,b,a,D=generate.system(S,640)
M=10000
total=sum(((1-sum((a[i,0]*R(QQ(m % k)/k) for i,k in enumerate(S)),R(0)))**2/(m*(m+1)) for m in range(1,M+1)),R(0))
bound=(1+sum((abs(x) for x in a.list()),R(0)))**2/(M+1)
assert D-total>0 and total+bound-D>0
finite.append({'support':support,'N':N,'M':M,'finite_sum':str(total),'tail_bound':str(bound),'distance':str(D)})
print('RESULT_JSON '+json.dumps({'table':'T712','constraint_and_constructive_checks':out,'finite_residual_checks':finite,'failures':[]}))