back to table · edit · history · where entries came from · files · download
1308 bytes, as of the version from 2026-11-02 11:01 (current). Recorded here, not run.
"""Check selection and CM identities independently in exact arithmetic."""
import numberdb.sage as numberdb
from sage.rings.rational_field import QQ
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
from sage.schemes.elliptic_curves.cm import hilbert_class_polynomial
import json
from catalogue import candidates,selected,algebraic,label
R=PolynomialRing(QQ,'t');t=R.gen()
a2=-27*t**2;a4=216*t**3*(t-27);a6=-432*t**4*(t-27)**2
b2=4*a2;b4=2*a4;b6=4*a6;b8=4*a2*a6-a4**2
c4=b2**2-24*b4;disc=-b2**2*b8-8*b4**3-27*b6**2+9*b2*b4*b6
assert c4**3*(t-27)**3==disc*t*(t+216)**3
corpus=numberdb.table('T129')['Numbers']
rows=[]
for item in candidates():
v=algebraic(item);j=v*(v+216)**3/(v-27)**3
H=hilbert_class_polynomial(item['D'])
assert H(j)==0,(item['key'],item['D'])
corpus_entry=corpus[str(item['D'])]
corpus_polynomial=corpus_entry.get('number') if isinstance(corpus_entry,dict) else corpus_entry
assert H.parent()(corpus_polynomial)==H
rows.append({'t':item['key'],'D':item['D'],'row':item['row'],'interior':bool(-1<v<27),'positive':bool(v>0),'label':label(item),'hilbert_polynomial':str(H)})
assert len(selected())==10
print(json.dumps({'symbolic_j_invariant':True,'hilbert_polynomials_match_T129':True,'cm_checks':rows,'selected':[x['key'] for x in selected()]},indent=2))