from research import *
s=begin(1060,'Integral numerical coarsening of the four paths','Which existing cuts survive if every converted block must be integral?',{},['C1059','C993'])
rows=json.loads((ROOT/'model/completed_path_prefix_field.json').read_text());cuts={r['path']:[i+1 for i,x in enumerate(r['prefixes']) if x%23==0] for r in rows}
finish(s,{'admissible_prefix_cuts':cuts,'criterion':'With an integral held anchor, all cuts must have prefix sum divisible by23.','qualification':'Numerical coarsening only; source event boundaries remain in the retained record.'},'Only the final cut qualifies in every path. Uniform E still commutes with summation over rational values; the added integer-grid demand is what removes internal numerical cuts.','Compare the two cumulative inverse branches under the same completed-path condition.',{'whole_path_only':all(cuts[r['path']]==[len(r['prefixes'])] for r in rows),'rational_additivity':all(sum(E*x for x in r['one_pass_parts'])==E*r['prefixes'][-1] for r in rows)})
