from research import *
s=begin(800,'Localize the surface-spine residuals','Which adjacent intervals account for the complete displacement vector?',{},['C799; File20 surface prose and dates'])
p=json.loads((ROOT/'model/BJ_spine_residuals.json').read_text());gaps=lambda a:[a[i+1]-a[i] for i in range(len(a)-1)]
r=gaps(p['reconstructed_AM']);u=gaps(p['surface_AM']);delta=[b-a for a,b in zip(r,u)]
finish(s,{'reconstructed_gaps':r,'surface_gaps':u,'changes':delta,'source_tension':'prose says Isaac→Jacob60 became70, but displayed1987→2046 gives59'},'The changes+11,−1,−5 explain the residual field and total+5 exactly. The displayed59 is retained; the source’s60→70 prose is not silently harmonized.','Close both paths at Conquest to test whole-path conservation.',{'gaps':r==[100,60,130] and u==[111,59,125],'finite_difference':delta==gaps(p['offset_AM']),'total':sum(delta)==5})
Evidence
s800.py
Linked sources and evidence
Edition and provenance
s800.py
SHA-256 4de7a0ac8bf87bc7d17f3bbd183cf872b0cbd0ebdac52328490045211f86aa95
C480–C1634/Research_Cycles/C0732_C0831/evidence/s800.py