from collections import defaultdict,deque def run(load,read,check): arrows=load('C451_DATA.json')['arrows'];ops=sorted({(a['operator'],a['anchor']) for a in arrows});X=sorted({r['center'] for r in load('C286_DATA.json')['target_register']});seeds=[(p['lower'],p['upper']) for p in load('C454_DATA.json')['K_pairs']];rows=[] for removed in [None]+ops: kept=[a for a in arrows if (a['operator'],a['anchor'])!=removed];maps=defaultdict(dict);adj={x:set() for x in X} for a in kept:maps[(a['operator'],a['anchor'])][a['input']]=a['output'];adj[a['input']].add(a['output']) seen=set(seeds);q=deque(seeds);ee=[] while q: x=q.popleft() for op,m in sorted(maps.items()): if all(t in m for t in x): y=tuple(sorted(m[t] for t in x));ee.append({'input_pair':list(x),'output_pair':list(y),'operator':list(op)}) if y not in seen:seen.add(y);q.append(y) reach={} for x in X: done={x};q=deque([x]) while q: y=q.popleft() for z in adj[y]: if z not in done:done.add(z);q.append(z) reach[x]=done remaining=set(X);scc=[] while remaining: x=min(remaining);cc={y for y in reach[x] if x in reach[y]};remaining-=cc;scc.append(cc) main=all(op in maps for op in [('E',3620),('E',2756)]);simple=all(('R',c) in maps for c in [3188,3190,3248,3250]);mixed=all(op in maps for op in [('R',3248),('R',3250),('E',2758),('E',2756)]) check('K_no_reach_'+str(removed),all((y-x)%529 for x in X for y in reach[x] if x!=y)) rows.append({'removed_operator':list(removed) if removed else None,'retained_arrows':len(kept),'pair_edges':ee,'reached_pairs':len(seen),'complete_two_E_ladder':main,'ordinary_cycle_word':simple,'mixed_cycle_word':mixed,'strong_components':len(scc),'largest_strong_component':max(map(len,scc))}) return {'step':'C467','deletion_controls':rows,'minimal_declared_support':{'complete_two_E_ladder':[['E',3620],['E',2756]],'ordinary_cycle':[['R',3188],['R',3248],['R',3250],['R',3190]],'mixed_cycle':[['R',3248],['R',3250],['E',2758],['E',2756]]},'counts':{'operators':len(ops),'scenarios_including_baseline':len(rows)},'limits':'Single-operator sensitivity holds the source register fixed; this does not remove source records or alter the active result.'}