back to table · edit · history · where entries came from · files · download
2531 bytes, as of the version from 2026-10-30 08:21 (current). Recorded here, not run.
"""Family ingredient and scaling checks for numberdb.org/T621.
sage -python family_checks.py
Requires generate.py and checks.py. Authenticated access is optional except for
private companion tables; NUMBERDB_KEY_FROM_STDIN=1 reads a key from stdin.
Uses the live area, conformal-radius, eta and Neumann-spectrum documents.
"""
import json
import numberdb.sage as numberdb
from sage.rings.real_arb import RealBallField
from sage.rings.rational_field import QQ
import generate
from checks import decimal_interval, bounded
def interval(text, R):
if isinstance(text,dict): text=text['number']
if '.' not in str(text) and 'e' not in str(text): return R(QQ(text))
lo,hi,_=decimal_interval(text)
return R((lo+hi)/2,(hi-lo)/2)
def main():
client=generate.authenticated_client()
docs={tid:numberdb.table(tid,client=client) for tid in ['T17','T554','T506','T485']}
R=RealBallField(750)
for n in range(3,31):
a=QQ(n-2)/n
c=QQ(n)/24*(1/a-a)
assert c==QQ(n-1)/(6*(n-2))
A=QQ(n)/2*(2*R.pi()/n).sin()
logR=R(1+QQ(1)/n).log_gamma()+R(a).log_gamma()-R(1-QQ(1)/n).log_gamma()
assert A.overlaps(interval(docs['T17']['Numbers']['unit-R'][str(n)],R))
assert (-logR).exp().overlaps(interval(docs['T554']['Numbers']['euclidean'][str(n)],R))
# Two independent substitutions into the exact dilation relation:
# scale the Dirichlet expression + area versus scale the Neumann one.
LD=generate.dirichlet_logdet(n,750); LN=generate.polygon_logdet(n,750)
for t in [R(2), 1/(2*(R.pi()/n).sin()), 1/A.sqrt()]:
from_D=LD-2*c*t.log()+(A*t*t).log()-QQ(n)/2*R(a).log()
from_N=LN-2*(c-1)*t.log()
bounded(from_D); bounded(from_N)
assert from_D.overlaps(from_N)
eta=interval(docs['T506']['Numbers']['1'],R)
assert (R(2)**(QQ(9)/4)*eta).overlaps(generate.polygon_logdet(4,750).exp())
for name,scale2,k in [('unit-square',QQ(2),R.pi()**2/2),
('equilateral-triangle',QQ(3),16*R.pi()**2/27)]:
assert interval(docs['T485']['Numbers'][name]['1'],R).is_zero()
assert (interval(docs['T485']['Numbers'][name]['2'],R)/scale2).overlaps(k)
print(json.dumps({'table':'T621','area_checks':28,'conformal_radius_checks':28,
'dilation_checks':84,'eta_checks':1,'spectrum_normalization_checks':2,
'skill_manifest':'../20261030T080603Z-build-skills/manifest.json'},indent=2))
if __name__=='__main__': main()