Research notes on every problem, and a library of the papers behind them. Built from the open erdos repository.
Updated
Record identity and current filing
This is the filed page of the completed whole-claim report (working storage). It retains the report's mathematical assessment and limitations. It does not claim byte identity with that working report or constitute another review. The original working report remains preserved separately from this filing.
Documentary source-locator wording is normalized. The review and its distinct grading concern the exact assessed subjects identified below; they do not certify these locator labels or report fresh checks of the current pages.
Commissioning attribution: independent review by separate fresh-context reviewers, commissioned and read by the commissioning role. The distinct roles were blind reviewer, first-cycle grader, report writer, and second-cycle grader of the completed record. The commissioning role selected the subjects, wrote the instructions and read the outputs. This supplied attribution identifies the review roles; it is not a new mathematical verdict. The preparation of this page and the shared-harness adaptation is by the filing author, who was exposed to all those records, not an independent reviewer.
Within the retained assessment below, verify_quartic.py means the exact
reviewer's checker.
The current checker is a separately identified
shared-harness adaptation. Its current review and execution standing is recorded
in the verification index; the earlier mathematical verdict does
not certify that adaptation.
References to RUN_RECORD.txt mean the complete reported record retained in
the "Reported execution record" section below.
The two documentary qualifications are explicit. First, the result page is the filed page for the exact reviewed proposal; the proposal was not filed unchanged. Second, seeds, C1, relation pairings, identifying box and cyclic order have input fields compared with reviewer-side constants. The row profile is tested directly against code constants, with no corresponding profile field in the input. Neither qualification changes the accepted nine-point mathematical subject.
The exact reviewed context remains available as the
result, the source
digest, the evidence
account, the source
transcription, and the proposed problem
account. Except for the source transcription's
disclosed provenance-only redaction and the identity edits of 2026-10-02 to the
transcription and the evidence index (hash values replaced by paths, dates and
removal markers), those snapshots keep original bytes and original link
context. The verification index identifies both
transcription versions; use the live owner pages for navigation. The author
../main.py and ../assets/witness.json as committed on the date named
below are the files named in the subject list; the witness is unchanged since,
and the live checker's later edit is stated on the owning evidence page. The
earlier canonical E0097 context is
wiki/problems/distance_problems/E0097/_index.md as it stood at
2026-09-09T21:17:39Z.
The review's post7604 reading depth stays unread. The subsequently filed mysticflounder transcription supports the current problem-page wording; it does not retrospectively extend this review. No numerical tier or catalog status is created by retaining these records.
Subject and independence
Reviewed with this repository as it stood at the filing of these paths on
2026-09-10; evidence/main.py and evidence/assets/witness.json carried their
reviewed bytes then. The reviewed checker bytes are not retained (the evidence
index states how today's file differs); the witness is unchanged since.
Frozen subject. Three files, named by path as they stood on 2026-09-10 and
matched by the reviewer and again by the grader before any of this text was
written. Paths are the canonical destinations under
library/distance_problems/sallerk_2026_convex_nonagon_relations/; the
reviewed bytes were a frozen proposal copy of those pages. The exact result is
now retained as evidence/assets/reviewed_result.md; the current result page
has documentary profile and standing corrections. The witness retains its exact
reviewed bytes; the reviewed checker is evidence/main.py as committed on
2026-09-10 (the live file was edited after the review and the reviewed bytes
are not retained; see the evidence index).
library/distance_problems/sallerk_2026_convex_nonagon_relations/evidence/assets/reviewed_result.mdlibrary/distance_problems/sallerk_2026_convex_nonagon_relations/evidence/main.pylibrary/distance_problems/sallerk_2026_convex_nonagon_relations/evidence/assets/witness.json
Context read alongside the subject, not part of the claim under review:
_index.md, retained as reviewed_source_index.mdsallerk_2026_convex_nonagon_relations.md; the original is not retained, its provenance-redacted derivative is reviewed_source.mdevidence/_index.md, retained as reviewed_evidence_index.mdwiki/problems/distance_problems/E0097/_index.md(proposal), retained as reviewed_problem.md
Also read: the current corpus page wiki/problems/distance_problems/E0097/_index.md
(as it stood at 2026-09-09T21:17:39Z) and
the canonical source PDF
library/discrete_geometry/erdos_1987_combinatorial_metric_problems_geometry/erdos_1987_combinatorial_metric_problems_geometry.pdf,
printed pp. 175-176, rendered at 150 dpi and read visually.
At the reviewed state, two internal pins in the subject were self-consistent:
_INPUT_SHA256 at evidence/main.py:38 equals the actual witness.json hash,
and the "executed checker SHA-256" recorded in evidence/_index.md equals the
actual main.py hash.
Independence. The reviewer is distinct from the author and from every
collaborator who constructed the subject, and worked in a fresh context that had
not built on it. The reviewer did not read the author's handoff, replay record,
staged check directory, or any earlier snapshot of the subject, opened no URLs,
and did not execute the author's evidence/main.py (it was read, for the code
review below). A grader distinct from both author and reviewer recorded the
findings in the "Grader findings" section, having independently recomputed the
seven SHA-256 values the report originally listed and found them matching,
including both internal pins.
Standing-text exposure. The frozen subject
library/distance_problems/sallerk_2026_convex_nonagon_relations/evidence/assets/reviewed_result.md
as it stood on 2026-09-10 carried the author's standing section "Current
verification record" (lines 177-188), and the commissioned context carried the
author's execution record in evidence/assets/reviewed_evidence_index.md (lines
67-83) and one author-standing sentence each in
evidence/assets/reviewed_problem.md (line 42) and
evidence/assets/reviewed_source_index.md (line 22); a materiality grader
(Claude Fable 5.1), distinct from the reviewer and both earlier graders, ruled
this exposure immaterial under the content test on 2026-09-18: every passage
says the standing is undetermined and awaiting review, none states or implies
the verdict, and the review's reasoning rests on the reviewer's and grader's
structurally independent reproductions rather than on the author's recorded run.
Independent code and rerun commands. The exact reviewer source is
evidence/assets/reviewed_quartic.py. At this same directory depth its
original default still resolves to evidence/assets/witness.json. The
commands below name that exact input explicitly. From an ordinary clone:
uv run --no-sync python library/distance_problems/sallerk_2026_convex_nonagon_relations/evidence/assets/reviewed_quartic.py --input library/distance_problems/sallerk_2026_convex_nonagon_relations/evidence/assets/witness.json
uv run --no-sync python -O library/distance_problems/sallerk_2026_convex_nonagon_relations/evidence/assets/reviewed_quartic.py --input library/distance_problems/sallerk_2026_convex_nonagon_relations/evidence/assets/witness.jsonThese commands reproduce the original program, not the current evidence entry point. The complete historical record below reports exit zero in both modes and one summary line. Those are reviewer-reported executions; no fresh native run is asserted here. The exact snapshot needs the standard library only, performs no network access and writes no files. The current shared-harness entry point and its pending checks are documented in the evidence account.
Restatement
In the reviewer's own words, with every quantifier, hypothesis and scope qualification.
Definitions used. A finite set P of points in the plane is in strict
convex position when every point of P is an extreme point of its convex hull
and no point of P lies in the relative interior of a hull edge; equivalently,
no redundant collinear boundary points. For v in P,
mu_P(v) = max over d > 0 of #{ w in P \ {v} : ||w - v||^2 = d },the largest number of other points of P at one common distance from v.
Property E_k means mu_P(v) >= k at every vertex, with the repeated distance
allowed to depend on the vertex.
The objects. Let s = sqrt(3) > 0 and u = sqrt(5s - 8) > 0; both
radicands are positive, since 3 > 64/25 gives 5s - 8 > 0. Let R be the
counterclockwise rotation by 120 degrees,
R = [ -1/2 -s/2 ]
[ s/2 -1/2 ]and set, for i = 1, 2, 3,
A_i = R^(i-1) (1, 0),
B_i = R^(i-1) (s - 1/2, s/2),
C_i = R^(i-1) (x, y), where
x = (8s - 11 + (s + 6) u) / 10,
y = (12 - s + (3 - 2s) u) / 10.The nine points are P = {A_1, A_2, A_3, B_1, B_2, B_3, C_1, C_2, C_3}. The two
coordinate denominators are the nonzero rationals 2 and 10. The branch taken is
the one with +u, identified by the rational box 91/100 < x < 92/100,
98/100 < y < 1.
The assertion. For this one fixed P:
-
the nine points are pairwise distinct and lie in strict convex position, and the printed cycle
A1, B1, C1, A2, B2, C2, A3, B3, C3is their hull boundary traversed counterclockwise; -
mu_P(v) = 3at every one of the nine vertices — not merely at least three: exactly one distance value is attained three times from each vertex and no value is attained four or more times; and -
Prealizes the three distance relations printed in Er87b p. 175, in that printed order and with those printed pairings:textA1A2 = A1A3 = A1B3, B1B2 = B1C2 = B1B3, C1C2 = C1A3 = C1C3.
Consequently P is a strictly convex E_3 witness of nine points, and, having
multiplicity exactly three everywhere, it is emphatically not a
counterexample to Problem 97, which asks for a vertex with no four other
vertices equidistant from it.
Explicitly outside the claim. None of the following is asserted, and none is reviewed here:
- uniqueness of the completion
(x, y)in the normalized labeled family; - nonconvexity, or any other property, of the alternate
-ubranch; - the degree-four assertion for the third orbit, or any minimal polynomial;
- the forum's mirror-symmetry exclusion theorem for
D_msymmetry; - the lower bound
n_3 >= 7and the resulting set{7, 8, 9}; - identification of these coordinates as Danzer's original choice, or a reconstruction of the printed Reuleaux-triangle existence construction;
- any resolution of Problem 97 or change to its imported status.
One wording note, not overreach. The page defines E_k with >= k, while
its actual conclusion is the sharper mu_P(v) = 3. The certificate and both
independent reproductions establish the sharper statement.
Checklist
An explicit verdict for every item of the audit checklist. Silence is not a verdict, so items that do not apply say why.
-
Quantifiers and scope — passes. The claim is a single existential statement about one fixed nine-point set, with no "almost all", no eventual or all-order distinction, no limit inferior or superior, and no exceptional set. The one quantifier that matters is "for every vertex", and it is discharged by enumerating all nine rows rather than by symmetry. The page's
E_kdefinition uses>= kwhile the conclusion proves= 3; the stronger reading is the one certified. Nothing in the claim is stated for a family or a limit. -
Circularity — passes. Nothing assumes the conclusion. The two completion equations are derived from the distance requirements on formal unknowns and are then checked on the resulting explicit coordinates; the convexity and multiplicity conclusions come from exhaustive exact comparison, not from the symmetry that motivated the construction. In particular the row maxima are established by comparing all eight distances at each vertex, not inferred from the advertised triples. There is no induction.
-
Model and convention changes — passes. The objects are the actual planar points; nothing is relaxed, averaged or abstracted. The one representation change is arithmetic: exact algebraic numbers are carried as coefficient tuples. The owner's checker verifies
s^2 = 3andu^2 = 5s - 8inside its own model (main.py:236-239) and never assumes{1, s, u, su}is a linearly independent basis, using a zero tuple only in the sound direction (zero tuple implies zero value) and certifying every inequality by interval sign. The reviewer's model is a different one — a single-generator quartic field — and agrees term for term. The 120-degree rotation is the stated matrix, and the convention that indices run modulo three is used consistently. -
Finite and statistical overreach — passes. The claim is finite and is proved finitely; no finite computation is extended to a universal statement. Nothing is sampled, averaged or estimated, so there is no question of correlated samples. The page states in its own words that the witness bears on Problem 97 only as an
E_3example, and both index pages and the problem proposal repeat that it establishes no lower bound, no counterexample and no status change. -
Uniformity — inapplicable, because the claim contains no asymptotics, no error terms, no interchange of limits or sums, and no parameter family. Every quantity is a single algebraic number in a fixed field; there is no constant whose dependence could be misstated. For completeness, the only numerical parameters in either checker are refinement budgets (precision levels in the owner's
main.py:37, a bisection cap in the reviewer's check), and both fail closed when exhausted rather than widening a claim. -
Extremal conclusions — passes, in the narrow sense in which the claim makes one. The only extremal quantity is
mu_P(v), the maximum multiplicity at a vertex, and it is taken in the proposition's own units (squared Euclidean distance) over a finite attained set, so existence and boundedness are automatic. The maximum is certified as exactly three at every vertex by comparing all 28 pairs in each row. No infimum, supremum or sharpness claim over a family is made — in particular the page does not claim nine is the least possible size, and holdsn_3 >= 7out as an unaccepted report. -
Consequences and composition — passes, with one provenance qualification. Each "hence" was checked separately. The rotation identity
||v - Rv||^2 = ||v - R^2 v||^2 = 3||v||^2makes the A-A, B-B and C-C legs automatic, so relation 1 reduces to the seed obligationA1B3^2 = 3, relation 2 toB1C2^2 = 3||B1||^2, and relation 3 toC1A3^2 = 3||C1||^2; the page is right that the first printed relation is an independent obligation on the six seeds and not a consequence of the two completion equations, and it is discharged exactly (A1 - B3 = (s/2, 3/2), squared norm3/4 + 9/4 = 3). The elimination step is an equivalence, not just an implication, and uses division only by the nonzero rational 2. The bridge from 63 strictly positive supporting determinants to "nine distinct extreme vertices with no redundant collinear boundary points" is valid and is spelled out under Weakest steps. The qualification: the page's sentences "The unique triple in each row is as follows" and "Every other neighbor belongs to a singleton distance class" are true, but the owner's checker names only the row maximum as a check; see finding N1. -
Computation — passes. Inputs are exact and pinned:
witness.jsonis byte-pinned by SHA-256 in the checker (main.py:38, verified atmain.py:210-214) and coordinates are parsed only as rational coefficient strings throughfractions.Fraction(main.py:43), never evaluated as code. Arithmetic is exact; equality is a zero reduction and every strict sign is a certified rational interval, with no floating-point tolerance anywhere. Coverage is complete for the stated domain: 36 unordered distances, 63 supporting-edge signs, 252 within-row comparisons, nine rows, three named source relations. Failure cases are meaningful and exits are nonzero: the sign routine raises after its last precision level (main.py:111-121), the divider rejects a zero denominator (main.py:124-128), the radicand enclosure rejects a non-positive or misordered interval (main.py:79-80), andmain.py:342-354converts any of these into a recorded failed check and a nonzero exit, including underpython -O, since no bareassertcarries a theorem check. Exhausted numerical limits are never presented as certified enclosures. The reviewer's own check behaves the same way and was shown to do so by mutation (seeRUN_RECORD.txt). -
Reproduction — passes. The stated rerun commands in
evidence/_index.mdwere checked for resolvability from an ordinary clone (input resolved relative to the script atmain.py:210; dependencies are the standard library and the installed roottoolspackage). The required computations were rerun rather than inferred from cached success — but by the reviewer's own structurally different check, not by replaying the author's script, which the reviewer deliberately did not execute. The retained reproduction isevidence/assets/reviewed_quartic.pywithRUN_RECORD.txt; the reviewer's and grader's exploratory scripts in temporary storage are not the warrant and are not retained. -
Source and verdict fidelity — passes. Er87b pp. 175-176 were read visually and print exactly the three relations with exactly those mixed terms
A1B3,B1C2,C1A3, in that order, for the nonagon written in the cyclic orderA1B1C1A2B2C2A3B3C3, and print no coordinates. The page's account of the printed existence construction, of the three-neighbor conjecture Danzer disproved, and of the separate four-neighbor question on p. 176 is faithful. The six A/B coordinates are attributed to the forum post and the third orbit to this compilation; Danzer's authorship of these particular coordinates is explicitly declined; the post's AI-assistance disclosure is preserved with the source. No source finding is strengthened anywhere in the three subject files, and the four separate forum claims are held out with their actual limits on the result page, the source index and the problem proposal.
Weakest steps
Three steps carry the argument. Each was rederived independently, in the
reviewer's own field model, without substituting the page's answer and checking
it. How they compose: step 1 turns the two distance requirements into a line;
step 2 intersects that line with the circle and picks the branch, producing the
coordinates; step 3 turns the resulting explicit algebraic numbers into the
geometric conclusions. A failure in step 1 or 2 would mean the page's (x, y)
does not satisfy the relations; a failure in step 3 would mean the point set,
even if it satisfies the relations, is not a strictly convex nine-gon with
multiplicity three. Steps 1 and 2 are also not load-bearing on their own: they
motivate the coordinates, and the actual warrant is the direct exact
verification of the defining equations and the relations on the fixed
coordinates, which is what both checkers do.
Step 1 — elimination to the line. Writing q = x^2 + y^2, the C/A condition
||C1 - A3||^2 = ||C1 - C2||^2 expands to q + x + sy + 1 = 3q, i.e. 2q = x + sy + 1, which is the circle with centre h = (1/4, s/4) and squared radius
3/4 (completing the square: 1/2 + 1/16 + 3/16 = 3/4). The B/C condition
||B1 - C2||^2 = 12 - 3s expands to q + 4 - s + (s-2)x + 3y = 12 - 3s, using
(2s-1)s = 6 - s, i.e. q + (s-2)x + 3y + 2s - 8 = 0. The reviewer set C1 = (X, Y) as formal symbols over the field, built C2 = R C1 symbolically, and
formed both relations from scratch; both came out with monomial support {1, X, Y, X^2, Y^2} and matched the page's expansions. Eliminating the quadratic part
gives a purely linear relation which is exactly one half of the page's line
(2s - 3)x + (s + 6)y + 4s - 15 = 0,with coefficients x: s - 3/2, y: (s+6)/2, constant (4s-15)/2. (The
reviewer's first write-up said one tenth; that was a prose slip in the reported
scalar, corrected here — see grader correction (b). The line itself, and every
downstream conclusion, is unaffected, since the two differ by a nonzero rational
factor.) The converse direction holds too: the circle equation is an equivalence
with the C/A condition, and the line is exactly twice the B/C expression after
substituting q = (x + sy + 1)/2, so the pair is equivalent to the two distance
conditions. Only division by the nonzero rational 2 is used; there is no hidden
division by a possibly-zero quantity.
Step 2 — the quadratic and the branch choice. The page's route is the
perpendicular foot H = h + ((15-6s)/60)(a, b) with a = 2s-3, b = s+6; the
reviewer confirmed a^2 + b^2 = (21-12s) + (39+12s) = 60, `(a,b) . h = (2s-3)/4
-
s(s+6)/4 = 2s
,H_x = (48s-66)/60 = (8s-11)/10,H_y = (72-6s)/60 = (12-s)/10, and the substitution60t^2 = 3/4 - (15-6s)^2/60with(15-6s)^2 = 333 - 180s, giving3600t^2 = 180s - 288, i.e.100t^2 = 5s - 8. Independently, the reviewer inverted the line'sx-coefficient in the field by 4x4 rational linear algebra, solved forxin terms ofy, substituted into the circle, and obtained a quadratic inywhose coefficients lie inQ(sqrt 3)`, namely, up to an overall sign,A = -280 - 160 s, B = 576 + 328 s, C = -306 - 162 s,
with discriminant D = B^2 - 4AC = 768 + 576 s, certified strictly positive.
(The reviewer's first write-up rendered this quadratic with garbled rational
coefficients; corrected here — see grader correction (c). The quadratic itself
and its roots were right.) The page's y is an exact root of it, the line then
recovers the page's x exactly, and the second root is the other branch. So the
third orbit's coordinates are exactly the printed ones. The branch choice t = u/10 > 0 is a choice, not a uniqueness claim, and the page says so; the
rational identifying box does separate the branches, since the chosen branch has
x = 0.913916..., y = 0.989083... (truncated, not rounded) while the other
has x' ~ -0.3426, y' ~ 1.0645, far outside the box. Since the page asserts
only the existence of one witness and defers uniqueness and the other branch to
separate unaccepted reports, the branch choice creates no gap.
Step 3 — the sign certification of convexity and distinctness. The bridge
is: for each directed edge P_i P_{i+1} of the printed cycle, the determinant
with each of the other seven vertices is strictly positive; hence the line
through P_i and P_{i+1} is a supporting line meeting the set exactly in
{P_i, P_{i+1}}, so that edge is exposed; the nine exposed edges close up into
a strictly convex nine-gon; and strictness excludes any third point on an edge
line, so there are no redundant collinear boundary points. Combined with all 36
squared distances strictly positive, the nine points are distinct and all nine
are extreme. This inference is valid, and the reviewer confirmed the same
conclusion by a structurally different route: an exact convex hull computed by
Andrew's monotone chain, with lexicographic comparisons done in the field
(needed, since A2 and A3 share x = -1/2) and collinear points dropped by
popping on non-positive cross products. The hull came back with exactly nine
vertices which, rotated to start at A1, are A1, B1, C1, A2, B2, C2, A3, B3, C3 — the page's order, not its reverse. Margins are comfortable: the smallest
of the 63 determinants is about 0.213 and the smallest squared distance about
0.116, so nothing is near-degenerate and no sign is decided at the edge of the
certification budget.
Strongest attack
The strongest available refutation was an attack on the third orbit itself: if
the page's (x, y) were a mis-simplified or wrong-branch root — the most likely
way a two-radical hand derivation goes wrong — then either a relation would
fail, or the point would fall outside convex position, or a fourth equidistant
neighbor would appear somewhere, and the author's checker could still pass if
it shared the derivation's error. The attack was mounted in three ways.
First, derive the third orbit from scratch and compare, rather than
substituting the page's formula. Setting C1 = (X, Y) formally and carrying the
elimination, the quadratic in Y and the branch selection through
independently, the reviewer obtained the page's (x, y) character for
character, and obtained the other root explicitly. The attack failed: there is
no third possibility, and the printed branch is the one inside the printed box.
Second, look for a fourth equidistant neighbor. If the construction were an
E_4 counterexample in disguise, or if some row had two triples, the page's
"unique triple" sentence and the "not a counterexample to Problem 97" sentence
would both be wrong. All 36 squared distances were computed exactly and every
row of eight was partitioned into exact equality classes with every cross-class
inequality certified. Every row has profile [1,1,1,1,1,3]: one triple, five
singletons, no quadruple anywhere. The attack failed, and in the direction that
strengthens the page rather than weakening it.
Third, attack the arithmetic rather than the mathematics: if the author's
reduction table for s^2 = 3 and u^2 = 5s - 8, or his square-root interval
endpoints, were wrong, every conclusion would be suspect. The reviewer verified
the reduction table term by term against the expansion of `(a + bs + cu + dsu)(e
- fs + gu + hsu)` and both directions of the integer square-root bounds (see the code review), and then, more decisively, redid every computation in an arithmetic model with a different reduction rule and a different sign oracle, obtaining the same answers. The attack failed.
Two smaller probes also failed to find anything. Checking whether the page
overstates its own source: it does not — the reviewer independently computed the
minimal polynomial of y and found the page's caution about the reported
degree-four polynomial to be conservative rather than mistaken. And checking
whether the identifying box could admit the wrong branch: it cannot, as the
second root's coordinates lie well outside it.
No refutation succeeded, and no material defect was found.
Independent reproduction
The retained reproduction is evidence/assets/reviewed_quartic.py, 199 lines of
standard-library Python. Its runs are recorded in RUN_RECORD.txt.
The structurally different primitive. The author models every quantity as a
4-tuple of rationals over the two radicals (1, s, u, s*u), reduces products by
the two rules s^2 = 3 and u^2 = 5s - 8, and certifies strict signs by
outward interval arithmetic built from nested integer-square-root enclosures of
s and then of 5s - 8. The reviewer instead observed that u^2 = 5s - 8
gives (u^2 + 8)^2 = 75, so u is a root of m(t) = t^4 + 16t^2 - 11 and s = (u^2 + 8)/5; the whole configuration therefore lives in the single-generator
quartic field K = Q[t]/(m). Elements are degree-at-most-three rational
polynomials in t with the single reduction rule t^4 = 11 - 16t^2 (hence
t^5 = 11t - 16t^3, t^6 = 267t^2 - 176), and s is recovered as (t^2 + 8)/5. Every strict sign is certified by exact bisection of an isolating
interval for the real root of m: m(0) = -11 < 0, m(1) = 6 > 0, and m'(t) = 4t^3 + 32t > 0 for t > 0, so the positive root is unique and lies in (0, 1); candidate expressions are bounded by monomial interval evaluation on the
current interval and the interval is halved until the bound is strictly
one-sided, under a hard cap that raises rather than accepting.
Why it is structurally different, and why a shared bug is implausible. The
two models differ in their generators (two radicals versus one), in their
reduction rules (two rules versus one), in the shape of their canonical forms,
and — most importantly — in their sign oracles: square-root enclosures of two
correlated radicals versus bisection of a single polynomial's root interval. A
transposed coefficient in the author's mul table, or an endpoint-rounding
error in his root_bounds, has no counterpart in a model that never extracts a
square root and never multiplies two independently enclosed radicals. Conversely
a reduction error in t^4 = 11 - 16t^2 would produce different numbers, not the
same ones. Soundness of the reviewer's model needs no irreducibility assumption:
each element is a rational polynomial evaluated at a real number, so a zero
coefficient tuple proves the real value is zero, and a nonzero value is accepted
only against a strictly one-sided rational enclosure. (For the record m is
irreducible over Q: no rational root among the divisors of 11, and a
factorization (t^2 + at + b)(t^2 - at + c) forces either a = 0 with b + c = 16, bc = -11 and discriminant 300, not a square, or c = b with b^2 = -11.)
What the reproduction established. Working in K:
s^2 = 3andu^2 = 5s - 8hold exactly in the model, with both radicals certified positive.- The six A/B seeds reproduce, character for character, the six coordinates the
forum post prints, and
R^3 = Iholds on each orbit;A2 = (-1/2, s/2),A3 = (-1/2, -s/2),B2 = (-s/2 - 1/2, 3/2 - s/2),B3 = (1 - s/2, -3/2). - The third orbit was derived, not substituted, as described under Weakest
steps, and equals the page's
(x, y); the page's coordinates are exact roots of both the circle and the line, and lie in the identifying box91/100 < x < 92/100,98/100 < y < 1, certified with strict signs. - The first Er87b relation is a pure seed identity,
A1A2^2 = A1A3^2 = A1B3^2 = 3;||B1||^2 = 4 - s, so the B-orbit sides are12 - 3s; and, with the derivedC1,C1C2^2 = C1A3^2 = C1C3^2 = 3qandB1B2^2 = B1C2^2 = B1B3^2 = 12 - 3s. All three printed relations reduce to exact zeros in the printed order and with the printed pairings. - All 36 unordered squared distances are strictly positive, so the nine points are distinct; all 63 supporting-edge determinants of the printed cycle are strictly positive, so the cycle is a strictly convex nonagon with no redundant collinear boundary point; and an exact monotone-chain hull returns exactly nine vertices in exactly the printed counterclockwise order.
- Every row of eight distances has profile
[1,1,1,1,1,3]. The triples areA_i : {A_{i+1}, A_{i+2}, B_{i+2}}at squared distance 3;B_i : {B_{i+1}, B_{i+2}, C_{i+1}}at12 - 3s; andC_i : {C_{i+1}, C_{i+2}, A_{i+2}}at3q = -3/5 + 3s + 3su/5, confirmed as an exact identity. This matches the page's table under its stated modulo-three convention, including the C-row value. - Margins: smallest supporting determinant about 0.213, smallest squared distance about 0.116. The retained check needs only 8 bisection refinements in total against a cap of 400, so no sign is decided near the budget.
Adversarial cross-check, recorded but not part of the claim. The reviewer
computed the minimal polynomial of y over Q by exact linear algebra on 1, y, ..., y^4: 200y^4 - 960y^3 + 3108y^2 - 4212y + 1863 = 0, with no relation
of degree 1, 2 or 3. The forum's reported `1600y^4 - 7680y^3 + 24864y^2 - 33696y
- 14904
is exactly eight times that and does annihilatey. So the page's transcription of the reported polynomial is accurate and the degree-four assertion is in fact true; the page's refusal to accept it without a discriminant and field-degree argument is conservative, not wrong. For completeness,xsatisfies200x^4 + 880x^3 + 1212x^2 - 1364x - 577 = 0`. None of this is part of the accepted claim.
Coverage and failure behavior of the retained check. verify_quartic.py
records 21 named obligations covering the seeds and C1 against the expected
rational 4-tuples, the radical identities, the rotation orbits with R^3 = I,
the circle and line equations, the identifying box, the three source relations,
the 36 distances, the 63 supporting determinants and the nine row profiles. Two
deliberate design choices answer findings below. First, every value that fixes
what is being asserted is a reviewer-side constant written into the check
itself, not a value read from the input: the six seeds and C1, the printed
cyclic order, the three Er87b pairings, the identifying box 91/100 < x < 92/100, 98/100 < y < 1, and the required row profile [1,1,1,1,1,3]. The
input's seeds, C1, cyclic order, relation pairings and identifying box are
read and must equal the corresponding constants. The full row profile is
asserted directly against code constants; there is no corresponding profile
field in the input. The geometry is checked against those fixed obligations,
so the checked property is the printed finite theorem. (An earlier
revision of this check read the pairings and the box from the input; the grader
showed that two mutations then passed — repeating one pair inside each relation
triple, and widening the box to [-100, 100]^2 — and both now exit 1.) Second,
the row obligation asserts the full profile, not merely the maximum.
Negative controls recorded in RUN_RECORD.txt confirm real failure modes.
Perturbing the u-part of C1's y, corrupting a seed coefficient, reversing
the cyclic-order field, repointing a relation pair, shifting the identifying
box, repeating a pair inside each relation triple, and widening the box to
[-100, 100]^2 each fail with exit code 1, in plain and optimized Python alike.
Transposing two labels in the reviewer-side cycle makes the supporting-edge
obligation fail, so the convexity check has a real failure mode. Lowering the
bisection cap to zero raises "bisection cap exhausted; no sign accepted" and
exits 1, so exhausted refinement never masquerades as a certified enclosure.
Code and input review
Overall. evidence/main.py checks exactly the stated obligations with exact
arithmetic, fails closed on unresolved signs and zero denominators, uses no
numeric tolerance and no search, resolves its input relative to itself, and uses
the shared harness correctly. No defect was found that could let a false claim
pass.
-
Exact arithmetic, no tolerance. Values are 4-tuples of
fractions.Fractionover(1, s, u, su); the only non-rational primitive ismath.isqrt. The reduction table inmul(main.py:56-67) was verified term by term against the expansion of(a + bs + cu + dsu)(e + fs + gu + hsu)withs^2 = 3,u^2 = 5s - 8: constant `ae + 3bf - 8cg + 15ch + 15dg- 24dh
,s-coefficientaf + be + 5cg - 8ch - 8dg + 15dh,u-coefficientag + 3bh + ce + 3df,su-coefficientah + bg + cf + de. All match. Equality is certified only by a zero tuple, and a nonzero tuple is never treated as an inequality certificate; the comment atmain.py:33and the contract atmain.py:112` are honest about this.
- 24dh
-
Enclosures are outward and sound.
root_bounds(main.py:76-86) is correct in both directions: the lower endpoint isisqrt(floor(r * 2^(2b))) / 2^b <= sqrt(r), and the upper is(isqrt(floor(R * 2^(2b))) + 1) / 2^b >= sqrt(R)because(h+1)^2 > Mimplies(h+1)^2 >= M + 1 >= R * 2^(2b). It raises on a non-positive or misordered radicand (main.py:79-80).basis_bounds(main.py:89-97) propagates thesenclosure into5s - 8before taking the second root, andinterval_multakes min and max over all four endpoint products, so negative coefficients are handled.enclosure(main.py:100-108) ignores thes/ucorrelation, which only widens intervals. -
Fail closed on unresolved signs.
sign(main.py:111-121) accepts only a strictly one-sided interval and raisesArithmeticErrorafter the 256-bit level; there is no "assume zero" or "assume positive" fallback.main(main.py:342-354) catchesArithmeticError,KeyError,OSError,TypeErrorandValueErrorand records a FAILED named check, so an exhausted refinement produces a nonzero exit rather than silent success; any other exception propagates and also exits nonzero. The measured margins show 16 bits already suffice here, so the cap is nowhere near binding. -
Fail closed on denominators and malformed input.
divide_rational(main.py:124-128) rejects a zero denominator. The input is byte-pinned by SHA-256 (main.py:38,main.py:210-214) and the run returns early with a recorded failure on mismatch. Missing or misnamed JSON keys reach theKeyErrorhandler. Coordinates are parsed only as rational coefficient strings throughFraction(main.py:43), never evaluated as code. -
No tolerance-based acceptance and no search. Confirmed: no float comparison, no epsilon, no root finding, no candidate enumeration.
evidence_parser(..., quick=False)(main.py:344-346) exposes no reduced mode, matching the "default to the full check" requirement. -
Input resolution and determinism.
pathlib.Path(__file__).parent / 'assets' / 'witness.json'(main.py:210) resolves relative to the script, so the documented repository-root command and any other working directory both work.functools.cacheonbasis_boundsis keyed only on the bit count, so runs are deterministic. Nothing is written to disk. -
Harness contract.
tools.Checkerplussys.exit(main())withmainreturningchecker.finish()(main.py:348,main.py:354,main.py:357-358) is the prescribed pattern. No bareassertcarries a theorem check anywhere in the file, sopython -Obehaves identically. -
Coverage matches the page. A static count gives 7 controls + 1 input hash
- 1 label set + 1 radicand positivity + 1 radical squares + 2 denominators +
9 rotations + 1 chosen coordinates + 2 box bounds + 2 defining equations + 36
positive distances + 1 count + 3 source relations + 63 supporting signs + 1
count + 9 row maxima + 1 count = 141 named checks, matching the page and the
evidence index. The three
source_relationsinwitness.jsonare, in order,[A1A2, A1A3, A1B3],[B1B2, B1C2, B1B3],[C1C2, C1A3, C1C3]— exactly the printed Er87b relations in the printed order — andmain.py:295-302labels them 'A/B first', 'B/C second', 'C/A third' consistently.
- 1 label set + 1 radicand positivity + 1 radical squares + 2 denominators +
9 rotations + 1 chosen coordinates + 2 box bounds + 2 defining equations + 36
positive distances + 1 count + 3 source relations + 63 supporting signs + 1
count + 9 row maxima + 1 count = 141 named checks, matching the page and the
evidence index. The three
-
Row grouping is computed correctly, but only its maximum is asserted.
main.py:320-339compares all 28 pairs per row; because exact distance equality is a genuine equivalence relation and every pair is compared,groups[name]ends up as the full equivalence class, so the set of sorted tuples atmain.py:332is the exact class partition andmain.py:333takes the true multiplicity.comparison_count == 252(main.py:339) confirms the coverage, and a genuine equality that failed to reduce to a zero tuple would raise insignrather than be silently misclassified. What is checked, however, is onlymaximum == data['required_row_maximum'](main.py:334-337); the partition itself is only printed (main.py:338). See finding N1. -
The controls exercise real failure paths. The 8-bit exhaustion control (
main.py:196-204) buildssminus the 16-bit lower endpoint ofs, a positive quantity whose 8-bit interval straddles zero, so the control genuinely reaches the raise. The zero-denominator and negative-radicand controls likewise reach their raises.
Input. evidence/assets/witness.json is a single small JSON file,
byte-pinned by SHA-256 in both main.py:38 and evidence/_index.md; the hash
was recomputed and both pins are correct. Its six seeds entries are exactly
the six coordinates printed in the forum post, expressed as rational 4-tuples
over (1, s, u, su); C1 = [(-11/10, 4/5, 3/5, 1/10), (6/5, -1/10, 3/10, -1/5)] expands to exactly (8s - 11 + (s+6)u)/10 and (12 - s + (3-2s)u)/10,
matching both the page's displayed radical and the checker's hard-coded
reconstruction. source_relations lists the three relations in the printed page
order with the printed pairs; counterclockwise_order is the printed cycle;
identifying_box is the box certified above, which also excludes the other
branch; required_row_maximum is 3. The input is a fixed finite witness with
its role and provenance stated in evidence/_index.md and the source
_index.md — the six A/B coordinates from the pinned forum capture, the third
orbit supplied by the compilation — not a discovery log. There is no
produce.py, no cached success file, no reviewer JSON, no external checkout
dependency and no network input. Everything the checker needs resolves from an
ordinary clone once the proposal is filed at its intended path. Repository
hygiene: witness.json sits under evidence/assets/, which the corpus settings
exclude from page naming and navigation and which the whitespace and end-of-file
fixers skip, so the pinned bytes cannot drift under automatic formatting.
Layout. The folder follows author_year_slug one level under a taxonomy
category matching the problem's folder. No PDF exists, and the rule for that
case is met by sallerk_2026_convex_nonagon_relations.md, which is named after
the folder and records the URL, account, date and pinned capture. _index.md
carries the catalog desc in frontmatter and the digest below the separator,
ending with the "Bears on" line the incoming-library generator reads.
nonagon_from_relations.md is a descriptive result-page name, correct since the
source gives its coordinate claim no label, and carries statement, derivation,
certificate description, source scope, verification record and "Bears on" list.
evidence/ follows the prescribed layout with main.py and assets/ only, and
evidence/_index.md states domain, full command, dependencies, arithmetic
model, fail-closed behavior, controls, author-execution record and
outstanding-review limits. All wikilink targets resolve, and the relative PDF
link with #page=9 resolves from the result page's directory.
Nonmaterial findings
No material finding was recorded: nothing found affects the truth of the claim. The following are non-material. N1 is the one that touches warrant provenance.
- N1 — the page's unique-triple sentence outruns its named checks.
nonagon_from_relations.mdstates "The unique triple in each row is as follows" and "Every other neighbor belongs to a singleton distance class", butmain.py:332-337asserts only that the row maximum equalsdata['required_row_maximum']; the class partition is printed atmain.py:338and is never a named check. A configuration with two triples in one row would pass all 141 checks. The stronger statement is nonetheless true: every one of the nine rows has profile[1,1,1,1,1,3], confirmed independently by both the reviewer and the grader, and asserted as a named obligation by the retainedevidence/assets/reviewed_quartic.py. The page needs either a sentence saying this is read off the printed transcript, or a named check in a separately identified checker successor. main.py:240-244— the two "coordinate denominator N nonzero" checks test only that the literals 2 and 10 are nonzero rationals. They have no failure mode tied to the witness and duplicate the guard already insidedivide_rational; two of the 141 named checks are content-free.main.py:220-221withmain.py:247-253—points['C2']andpoints['C3']are defined asrotate(C1)androtate(C2), so the loop's "rotation C1 to C2" and "rotation C2 to C3" checks are tautologies that can never fail. Only "rotation C3 to C1", i.e.R^3 C1 = C1, has content there. Two more of the 141 checks have no failure mode. The six A/B rotation checks are genuine, sinceA2,A3,B2,B3come from JSON literals.main.py:254-264andmain.py:277-280versusevidence/assets/witness.json— the chosen-branch formula and both defining equations are hard-coded in the script, whilewitness.jsonseparately carrieschosen_formulaanddefining_equations(andbasis,positive_radicals,subject) thatmain.pynever reads. Nothing cross-checks the two, so those input fields are documentation that could silently diverge from the checked mathematics. They are accurate as currently written; each string was checked against the code and the page. The SHA pin freezes the bytes but does not tie them to the mathematics.main.py:336— the row maximum is compared againstdata['required_row_maximum']rather than the literal 3 of the stated theorem, so the checked property is parameterised by the input file. Harmless given the hash pin and the printed transcript, but it slightly weakens "the check tests the stated property".main.py:134— the local namehalf = fractions.Fraction(2)is misleading; the value is the denominator two, not one half.main.py:332—{tuple(sorted(group)) for _, group in groups.items()}discards the key;groups.values()is the idiomatic form. Cosmetic.main.py:293andmain.py:338— forty-five extra print lines are emitted alongside the 141 transcript lines. Declared inevidence/_index.mdand harmless, but verbose.nonagon_from_relations.md, "Derivation of the chosen completion" — the derivation is presented as motivation for the coordinates, and the actual warrant is the direct exact verification of the two relations on the fixed coordinates. That is sound, but the page could say so once, so a reader does not treat the perpendicular-foot construction as load-bearing.nonagon_from_relations.md, degree-four bullet — the reported polynomial1600y^4 - 7680y^3 + 24864y^2 - 33696y + 14904is exactly eight times the true minimal polynomial ofy, andyreally does have degree four overQ. The page's refusal to accept it without a discriminant argument is conservative rather than wrong; nothing needs correcting, but the caution could be relaxed if a short argument is ever supplied.evidence/_index.md— records author wall-clock timings ("0.06 and 0.07 seconds", "under a hard 30-second timeout"), which belong in working storage rather than corpus material. Harmless.- Pre-integration mechanics — the three proposal pages lack the tool-owned
frontmatter
name:and H1, the E0097 proposal has no generated problem-library links block, andlibrary/distance_problems/_index.mdis not included in the proposal.scripts/build_library_subjects.py,wiki updateandwiki lintmust run on both roots at integration. The reviewer could not runwiki lintagainst a proposal outside the corpus. - Er87b's own digest still lists
section_8_danzer_nonagonunder "Results to transcribe", so the canonical Er87b result page for the nonagon does not exist and the proposal cites the digest_indexand the PDF page directly. Legitimate today, but the one-canonical-page rule points toward transcribing that section and linking it from here. wiki/problems/distance_problems/E0097/_index.md(proposal) — asserts that an older forum announcement (post 7604) was withdrawn with the author marking the gist out of date, but no transcription or capture of post 7604 is filed with this proposal; the claim rests on the same local forum capture that is identified only in the post-8669 transcription's provenance block. That page is outside the frozen subject, but the supporting record should be filed with it.- The result page and both index pages omit the post's opening context line
(AlphaEvolve reached
k = 3but notk = 4, Problem 6.53 of arXiv:2511.02864). The transcription retains it verbatim so nothing is lost, but it is arguably the most decision-relevant external lead in the post for E0097's progress account.
Premises
Consumed local claims: none. This is a library result page, not a native L-claim, and it consumes no native L-claim as an established premise. There is therefore no premise standing to check, no staleness question, and no batch acceptance order. The page states explicitly that no external code, hidden six-point result, minimal-polynomial claim or independent tier is a premise of the finite reconstruction, and the review confirms that.
External source interfaces. Three, each with its reading depth.
-
Er87b — P. Erdős, "Some combinatorial and metric problems in geometry", Intuitive geometry (Siófok, 1985), 1987, pp. 167-177, cited at printed pp. 175-176 (physical PDF pp. 9-10), Fig. 5, via the canonical copy in
library/discrete_geometry/erdos_1987_combinatorial_metric_problems_geometry/named above. Exact statement used: the figure is "a convex nonagonA1B1C1A2B2C2A3B3C3of threefold rotational symmetry, satisfyingA1A2 = A1A3 = A1B3,B1B2 = B1C2 = B1B3,C1C2 = C1A3 = C1C3", with the accompanying Reuleaux-triangle and intermediate-value existence construction, and, separately on p. 176, the four-neighbor question that is Problem 97. Interface: the three relations and the cyclic order are the target the local witness is built to realize; nothing else from the paper is used, and Er87b's existence proof is not a premise of the local claim, which exhibits its own explicit set. Reading depth: claims checked (visually, at 150 dpi), coordinates not printed in the source. The pages contain no numerical coordinates, so the local coordinates cannot be, and are not, attributed to that source. The printed existence construction was read and its description on the page checked for fidelity; it was not independently reconstructed, and no such reconstruction is claimed. -
The forum post 8669 by account sallerk, Erdős Problem 97 thread, 31 August 2026, 19:37 (no timezone in the preserved record), as pinned in the local forum capture identified in the transcription page by the public post anchor and the date it was read. Exact statement used: the six A/B coordinates
(1,0),(-1/2, sqrt3/2),(-1/2, -sqrt3/2),(-1/2 + sqrt3, sqrt3/2), `(-sqrt3/2- 1/2, 3/2 - sqrt3/2)
,(1 - sqrt3/2, -3/2)`. Interface: these are the seeds of the two rotation orbits; the third orbit and its derivation are supplied by the compilation, not by the post. Reading depth: claims checked against the pinned transcription; the post's external repository and arXiv lead were not acquired or inspected, and the post's own degree-four, mirror-exclusion and minimality assertions are not consumed — they are held out as separate unaccepted reports. The post's AI-assistance disclosure belongs to the source and is preserved with it.
- 1/2, 3/2 - sqrt3/2)
-
The forum post 7604 in the same thread, cited only by the E0097 problem proposal for the fact that an older proof announcement was withdrawn. Interface: none to the finite claim; it supports a progress sentence on a page outside the frozen subject. Reading depth: unread by this review — no transcription or capture of that post is filed with the proposal, so the sentence rests on an unfiled record. Recorded as a gap on that page, not on the claim.
Explicit assumptions. None beyond the definitions restated above. The claim
is unconditional: there is no antecedent left open, and no quoted terminology
carries an unproved assertion — strict convex position and mu_P(v) are
defined outright on the page and were checked to be meaningful without appeal to
any unproved statement.
Grader findings
A grader distinct from both author and reviewer assessed the report contract and independence. Grader verdict: accept with corrections. Reviewer independence confirmed; the seven SHA-256 values the report originally listed were recomputed by the grader and match, including both internal pins. The grader's findings are recorded here and, where they correct the reviewer, the corrected statement — not the slip — is what stands in the body above.
Reviewer prose errors, corrected above; none reached the verdict.
- (a) The reviewer's decimal enclosures for the chosen branch were wrong. The
certified rational box
91/100 < x < 92/100,98/100 < y < 1is correct, and the other branchx' ~ -0.3426,y' ~ 1.0645is correct. The chosen branch isx = 0.9139163...,y = 0.9890838..., both truncated rather than rounded. (Record note: the grader quoted these as0.9139164...and0.9890835...; an independent 40-digit evaluation while preparing this record givesx = 0.913916301713...andy = 0.989083870286..., agreeing with the grader to six and five decimal places. The discrepancy is confined to quoted decimal digits. Nothing in the claim rests on a decimal expansion: the certified statement is the rational box, and the exact statement is the radical.) - (b) The reviewer's eliminated linear relation is one half of the page's
line (2), not one tenth: its coefficients are
x: s - 3/2,y: (s+6)/2, constant(4s-15)/2. - (c) The reviewer's sentence about "the rational quadratic
335y^2 - 688y + 353.25" was garbled. The quadratic's coefficients lie inQ(sqrt 3), namely, up to sign,A = -280 - 160 s,B = 576 + 328 s,C = -306 - 162 s, with discriminantD = 768 + 576 s. The quadratic itself is correct.
A gap the reviewer missed — non-material, warrant provenance. Recorded as
finding N1 above and reflected in the checklist item on consequences and
composition and in Weakest steps: the page's "unique triple" and "singleton
distance class" sentences are backed only by a row-maximum check in the owner's
script, with the class partition merely printed. The grader verified that the
stronger statement is true — every one of the nine rows has distance-class
profile [1,1,1,1,1,3] — and required that the retained review-side check
assert the full profile rather than the maximum. It does.
The grader's own third reproduction, independent of author and reviewer.
Canonical arithmetic in K = Q[t]/(t^4 + 16t^2 - 11) with a bisection sign
oracle (200 bisections), after proving m irreducible over Q — no rational
root among the divisors of 11; no factorization (t^2 + at + b)(t^2 - at + c),
since a = 0 forces b + c = 16, bc = -11 with discriminant 300, not a
square, and c = b forces b^2 = -11. A from-scratch elimination over Q(sqrt 3) with formal C1 = (X, Y) gave eqA = -2X^2 - 2Y^2 + X + sY + 1 = 0 and
eqB = X^2 + Y^2 + (s-2)X + 3Y + 2s - 8 = 0, then the quadratic above, then an
exact square-in-the-field test sqrt(768 + 576 s) = (24 + 16 s) u with alpha = 24, beta = 16, giving Y = (6/5 - s/10) +/- (3/10 - s/5) u and `X = (-11/10
- 4s/5) +/- (3/5 + s/10) u
, the plus branch being the page's coordinates character for character. An exact gift-wrapping (Jarvis march) hull with hard failure on any collinear triple returned hull size 9 in exactly the page's counterclockwise orderA1 B1 C1 A2 B2 C2 A3 B3 C3, with no collinear triple anywhere — stronger than the page's "no redundant collinear boundary points". All 63 supporting determinants were strictly positive (minimum about 0.21314) and all 36 squared distances strictly positive (minimum about 0.11635). A finite-field homomorphism cross-check modulo 1000000007, withr^2 = 3andw^2 = 5r - 8, reproduced the orbits, distances, relations and row profiles by integer arithmetic. Exact values: A rows 3, B rows12 - 3s, C rows3qwith3q = -3/5 + 3s + 3su/5, and||B1||^2 = 4 - s. The page's derivation was re-verified line by line, including(15-6s)(2s-3) = 48s - 81and(15-6s)(s+6) = 72 - 21s. Minimal polynomials:yhas degree 4 with200y^4 - 960y^3 + 3108y^2 - 4212y + 1863(the forum's polynomial is exactly eight times it), andxsatisfies200x^4 + 880x^3 + 1212x^2 - 1364x - 577. Er87b pp. 175-176 were read visually at 150 dpi, confirming the relations, the mixed terms, the cyclic order, the absence of coordinates, that the disproved conjecture is the three-neighbor one, and that the four-neighbor question is asked separately. The harness contract was confirmed:Checker.finish` returns nonzero on any failure and on zero checks.
Second-cycle grading. A distinct grader re-graded the completed record in a
second cycle, using a third arithmetic model — neither the author's two-radical
tuples over (1, s, u, s*u) nor the reviewer's single-generator quartic field,
but a two-level tower Q(s)[u]/(u^2 - (5s - 8)) with an exact
repeated-squaring sign oracle. Fifty facts of the record were confirmed.
Seventeen mutations were run against the retained check; fifteen failed closed
as they should, and two passed, both because the check was still reading a
value from the input that fixes what is asserted: repeating one pair inside
each Er87b relation triple, and widening the identifying box to
[-100, 100]^2. Both are now closed — the pairings and the box are
reviewer-side constants that the input must match, and both mutations exit 1 in
plain and optimized Python. The second-cycle verdict is pass, subject to
three non-blocking corrections, all applied here: the input-parameterization
just described; two over-wide transcript lines in RUN_RECORD.txt, now inside
a fenced block; and two decimal figures quoted round-to-nearest, now stated as
truncations.
Corrections that gate the standing.
- Durability. The reviewer's and grader's exploratory scripts in temporary
storage are not a warrant. The retained script
evidence/assets/reviewed_quartic.pyand this report resolve from an ordinary clone. The exact original program is retained separately from its current shared-harness adaptation, and the reported runs are retained below. - The owning page's record. The page's verification record must become an independently reviewed record naming both lanes, the exact mathematics checked, the verdict and the limits. The unique-triple and singleton sentence must be either marked as read off the printed transcript or backed by a named check in a separately identified checker successor.
Non-blocking cleanups. The two literal-denominator checks and the two
tautological C-orbit rotation checks; the unread witness.json fields (read and
cross-check them, or delete them); the literal 3 instead of
data['required_row_maximum']; renaming half at main.py:134; moving
wall-clock timings out of evidence/_index.md; running
scripts/build_library_subjects.py, wiki update and wiki lint on both roots
at integration; and filing a transcription for forum post 7604 before the E0097
page's withdrawal sentence stands.
Verdict and grading
Mathematical verdict: refutation-failed. The proof survives the commissioned attacks under the full contract. No counterexample, no real error and no unsupported essential step was found, and every finite fact was reproduced by two further structurally independent exact computations.
Standing, at exactly the frozen finite scope. Established: the nine points
are distinct and in strict convex position, with hull cycle A1 B1 C1 A2 B2 C2 A3 B3 C3 and no three collinear; the maximum distance multiplicity is exactly
three at every vertex; and the three Er87b p. 175 relations hold in the printed
order and pairing. Hence the set is a strictly convex E_3 witness and is not
an E_4 counterexample.
Not covered. No resolution of Problem 97 and no change to its imported
status; no uniqueness of the completion; no nonconvexity of the alternate
branch; no degree-four or minimal-polynomial claim (true, but unaccepted here);
no mirror exclusion; no n_3 >= 7 or {7, 8, 9} conclusion; no identification
of the coordinates as Danzer's; and no reconstruction of the printed Er87b
construction.
Tier and obligations. No numerical tier is created: this is a library result page, not a native L-claim, and the tier contracts do not apply to it. The outstanding obligation to transcribe Er87b section 8 as the canonical result page for the nonagon is untouched by this review.
Grading. The grader, distinct from both author and reviewer, recorded accept with corrections for the report contract and independence, with the corrections folded in above. Attribution on the claim names the reviewer for the mathematical verdict and the grader for the contract and independence assessment.
Reported execution record
The following is the complete supplied run record. Its original checker name refers to the exact snapshot identified above. The 21-obligation runs concern that program, not the shared-harness successor. The mutation copies and precise recipes were not retained. In particular, the nine listed successor controls below and the completed-record grader's 17-control account are different records, not a single reproduced control set.
Run record: independent review check of the exact E3 nonagon realizing the
Er87b distance relations.
Checker evidence/verify/verify_quartic.py, run as the bytes retained at
evidence/assets/reviewed_quartic.py
Input evidence/assets/witness.json
--input pointed at the frozen copy of that exact file, which
is what the default ../assets/witness.json resolves to once
the check is filed at its canonical path. Resolution from a
different working directory was confirmed separately.
Interpreter CPython 3.13.12 on Darwin arm64
Environment standard library only; no network, no files written
Transcripts (fenced; the summary lines run past 80 columns):
```
$ python3 verify_quartic.py --input <frozen evidence/assets/witness.json>
verify_quartic: PASS, 21 obligations re-checked in K = Q[t]/(t^4+16t^2-11), 8 bisections, cap 400
```
exit code 0; elapsed 0.064 s
```
$ python3 -O verify_quartic.py --input <frozen evidence/assets/witness.json>
verify_quartic: PASS, 21 obligations re-checked in K = Q[t]/(t^4+16t^2-11), 8 bisections, cap 400
```
exit code 0; elapsed 0.068 s
Both runs exit 0 and print the same summary line. The optimized run is
identical to the plain run, as required: no obligation is carried by a bare
assert.
Negative controls, run against mutated copies of the input and of the
checker held in the reviewer's working storage and not filed. Every one
exits 1 in plain and in optimized Python:
perturb the u-part of C1.y 12 of 21 obligations fail
corrupt one B2 seed coefficient 2 of 21 fail
reverse the cyclic-order field the input-pin obligation fails
repoint one Er87b relation pair the input-pin obligation fails
shift the identifying box the input-pin obligation fails
repeat one pair inside each Er87b the input-pin obligation fails
relation triple (this mutation passed an earlier
revision that read the pairings
from the input; it no longer does)
widen the identifying box to the input-pin obligation fails
[-100, 100]^2 (likewise a former pass, now
closed by pinning the box)
transpose B1 and C1 in the checker the supporting-edge obligation
cyclic-order constant fails, so the convexity check has
a real failure mode
set the bisection cap to zero "bisection cap exhausted; no sign
accepted": exhausted refinement
fails closed instead of accepting
an uncertified signCompleted-record grading
The following preserves the supplied distinct completed-record grading, with heading levels adapted for this page. It assessed the program before the final relation/box pinning corrections; its two unexpected passing mutations therefore refer to that earlier program. The completed successor report and its supplied index record those corrections and reported new runs. This confirmation does not independently assess the new shared-harness code.
Verdict on the completed record: pass-with-corrections; a pass for the report contract and independence, with three non-blocking corrections and two page-side integration actions. The mathematical verdict refutation-failed stands at the frozen finite scope.
Subject identity
nonagon_from_relations.md (retained as ../assets/reviewed_result.md), evidence/main.py and evidence/assets/witness.json as committed on 2026-09-10, and the cited Er87b PDF, recomputed and matched; main.py's internal input pin equals the witness hash; INDEX.md self-hashes match the record files.
Required corrections: all present
Durability (Subject and independence, "Independent code and rerun commands"; checklist item 9 states the temporary scripts are not the warrant); page verification-record and unique-triple corrections recorded as gating (Corrections that gate the standing, item 2; finding N1, checklist item 7, code review item 9); the retained check asserts the full row profile as a named obligation; ten checklist items with bolded verdicts, Uniformity inapplicable with a correct justification; Weakest steps, Strongest attack, Premises present; the three reviewer slips corrected in the body (decimals; the eliminated relation is exactly one half of the page's line (2); the quadratic's coefficients -280 - 160 s, 576 + 328 s, -306 - 162 s up to sign, discriminant 768 + 576 s, square root (24 + 16 s) u).
Independent mathematics
Third arithmetic model: a two-level tower Q(s)[u]/(u^2 - (5s - 8)) with an exact repeated-squaring sign oracle (no enclosures, no bisection). Confirmed: rotation identity; C/A condition equals -1 times the circle (1), B/C condition equals q + (s - 2) x + 3 y + 2 s - 8, monomial support {1, X, Y, X^2, Y^2}, elimination an equivalence; quadratic, discriminant and square-in-the-field test; page y is the plus branch and the line recovers page x; the other root lies outside the box; 36 squared distances strictly positive (minimum about 0.11635); 63 supporting determinants strictly positive (minimum about 0.21314); no three points collinear; nine consecutive left turns; the bridge from 63 positive determinants to strict convex position valid; every row profile [1,1,1,1,1,3] with the page's triples under its mod-3 convention; all page derivation identities; minimal polynomials 200y^4 - 960y^3 + 3108y^2 - 4212y + 1863 (forum polynomial exactly 8 times it) and 200x^4 + 880x^3 + 1212x^2 - 1364x - 577; irreducibility of t^4 + 16t^2 - 11; the structural difference between the single-generator quartic model and the author's two-radical 4-tuples with isqrt enclosures (author's mul table verified term by term); every main.py line citation accurate; the 141-check tally exact; finding N1 confirmed (main.py:334-337 checks only the row maximum; the partition is printed); the five unread witness.json fields confirmed. Decimals: x = 0.913916301713657..., y = 0.989083870286031..., x' = -0.342635009603454..., y' = 1.064505968200193...
Independent runs and controls
Plain and -O runs of verify_quartic.py against the frozen input: exit 0, 0.04 s, output identical to RUN_RECORD.txt. Seventeen mutations exercised; fifteen exit nonzero in both modes (perturbed C1; swapped cyclic order; repointed relation; shifted box; perturbed seed; missing box field; missing input; truncated JSON; extra relation; consistent minus-u branch; bisection cap zero; transposed reviewer-side cycle; C1 nudged by 1/1000 with six row-profile failures; corrupted t^4 reduction; alternate pairing B1C3). Two mutations passed when they should not: source_relations rewritten with a repeated pair, and identifying_box widened to [-100, 100]^2, because both are read from the input rather than fixed in the check.
Remaining corrections
C1 (non-blocking, retained check lines 155-168 and report lines 471-474): promote source_relations and identifying_box to module-level constants, or narrow the sentence claiming the checked property is the stated theorem rather than the input's request. The nine points, the boundary cycle and the row profile are fixed independently of the input, so the verified statement is intact. C2 (trivial): RUN_RECORD.txt lines 16 and 20 are 97-column transcript lines outside a fence. C3 (trivial): the quoted decimals 0.989084 and 0.9890839 are round-to-nearest rather than truncations; the exact 12-digit values are correct. Integration actions (page side, correctly handed off): rewrite the page's verification record as independently reviewed with the limits; fix the unique-triple sentence; file the three record files under the owner's evidence/verify/.
Grading note (quotable)
A grader distinct from both the author and the reviewer assessed the completed independent review record against the whole-claim report contract and recorded pass, with three non-blocking corrections. The frozen subject's three file identities and the cited source-PDF hash were recomputed and match, as did the checker's internal input pin. Every required part of the contract is present, each audit-checklist item carries an explicit verdict, and the one inapplicable item is correctly justified. The grader re-derived the mathematics in a third arithmetic model, a two-level radical tower with an exact repeated-squaring sign oracle using neither square-root enclosures nor bisection, and reproduced every asserted fact: the rotation identity, the equivalence of the two completion conditions with the circle and the line, the eliminated relation as exactly one half of the printed line, the quadratic and its discriminant, both branches and the separating rational box, thirty-six strictly positive squared distances, sixty-three strictly positive supporting determinants with no collinear triple, and the distance-class profile of one triple and five singletons in all nine rows. Both minimal polynomials and the quartic's irreducibility were confirmed independently. The retained review-side check was rerun in plain and optimized Python with results identical to the recorded run, and seventeen grader-devised mutations were exercised; all failures exit nonzero in both modes, an exhausted refinement budget raises rather than accepting a sign, and no obligation is carried by a bare assertion. Two residual mutations showed that the relation pairings and the identifying box were read from the input rather than fixed in the check, which narrowed one coverage sentence but left the verified statement intact, since the nine points, the boundary cycle and the required row profile are all fixed independently of the input. The mathematical verdict of refutation-failed stands at exactly the frozen finite scope, and the record creates no tier, no uniqueness, no degree claim, and no change to the catalog problem's status.