back to table · edit · history · where entries came from · files · download
3812 bytes, as of the version from 2026-10-29 01:41 (current). Recorded here, not run.
"""Check preserved T596 values and precision during the prose-only repair.
Run: sage -python repair_checks.py, beside generate.py and before.json.
Policy: agents/runs/20261029T013520Z-repair-skills/manifest.json.
Both archived skill SHA-256 values:
28ecbeeccb0c5e5d6eb541b5a5b0f88aec47b154374d909085116d34f5629199.
"""
import hashlib, json
from pathlib import Path
from importlib.metadata import version
from decimal import Decimal
import numberdb.sage as numberdb
from sage.rings.rational_field import QQ
from sage.rings.real_arb import RealBallField
from sage.rings.real_mpfi import RealIntervalField
import mpmath as mp
from generate import SquareLatticeResistance, certified_value
root=Path(__file__).resolve().parent
doc=json.loads((root/'before.json').read_text())
generator=SquareLatticeResistance()
identities=[f"{p['m']},{p['n']}" for p in generator.enumerate()]
assert identities==list(doc['Numbers'])
assert generator.digits==100
independent=[f'{d-n},{n}' for d in range(1,21) for n in range(d//2+1)]
assert identities==independent
def stored_interval(key):
raw=doc['Numbers'][key]
s=raw['number'] if isinstance(raw,dict) else raw
if '/' in s:
q=QQ(s)
return s,q,q
x=Decimal(s)
a,b=x.as_integer_ratio()
center=QQ(a)/QQ(b)
ulp=QQ(10)**x.as_tuple().exponent
return s,center-ulp,center+ulp
results=[]
for key in identities:
m,n=map(int,key.split(','))
value=certified_value(m,n,100)
s,lo,hi=stored_interval(key)
if key=='1,0':
assert value==lo==hi==QQ(1)/2
results.append({'identity':key,'exact':True})
else:
assert value.is_finite()
low,high=(v.exact_rational() for v in RealIntervalField(600)(value).endpoints())
assert lo<=low<=high<=hi
assert high-low<=low*QQ(10)**(-120)
results.append({'identity':key,'ball_contained':True,'relative_width_below_1e_minus_120':True})
# Independent controls and the published one-more-value snippet.
mp.mp.dps=140
controls={'1,0':mp.mpf(1)/2,'1,1':2/mp.pi,'2,0':2-4/mp.pi,'2,1':4/mp.pi-mp.mpf(1)/2}
controls.update({f'{k},{k}':2/mp.pi*sum(mp.mpf(1)/(2*j-1) for j in range(1,k+1)) for k in range(1,11)})
control_results=[]
for key,val in controls.items():
s,lo,hi=stored_interval(key)
lower=mp.mpf(int(lo.numerator()))/int(lo.denominator())
upper=mp.mpf(int(hi.numerator()))/int(hi.denominator())
assert lower<=val<=upper
control_results.append({'identity':key,'within_stored_interval':True})
namespace={}
exec(doc['Programs']['program-mpmath']['code'],namespace)
val=namespace['resistance'](2,1)
s,lo,hi=stored_interval('2,1')
assert mp.mpf(int(lo.numerator()))/int(lo.denominator())<=val<=mp.mpf(int(hi.numerator()))/int(hi.denominator())
assert abs(val-(4/mp.pi-mp.mpf(1)/2))<mp.mpf('1e-115')
result={'table':'T596','skill_manifest':'agents/runs/20261029T013520Z-repair-skills/manifest.json','skill_sha256':{'local':'28ecbeeccb0c5e5d6eb541b5a5b0f88aec47b154374d909085116d34f5629199','live':'28ecbeeccb0c5e5d6eb541b5a5b0f88aec47b154374d909085116d34f5629199'},'entry_count':len(identities),'enumeration_unchanged':True,'generator_digits':generator.digits,'generator_sha256':hashlib.sha256((root/'generate.py').read_bytes()).hexdigest(),'document_sha256':hashlib.sha256((root/'before.json').read_bytes()).hexdigest(),'checks_sha256':hashlib.sha256(Path(__file__).read_bytes()).hexdigest(),'versions':{'numberdb':version('numberdb'),'mpmath':version('mpmath')},'checks':results,'independent_controls':control_results,'program_matches_stored_interval':True,'scope':'All stored values recomputed using the unchanged generator; independent closed forms at 13 distinct entries and the Programs quadrature checked. No new values, altered inputs, or new certification claims.'}
print('REPAIR_EVIDENCE_JSON='+json.dumps(result))