← Result viewer

Classify lattice knots.

The research target is a classifier whose states are exact piecewise-linear embedded circles in the cubic lattice \(\mathbb Z^3\). The current classifier searches for paths of checked lattice moves between exact embeddings. Learned point markings prune that graph search. Projection and the knot movie present the resulting certificate; they do not replace the lattice state or determine search bounds.

The earlier signed-diagram seam solver is a correctness control. Its successful trefoil movie does not establish a lattice move sequence or a classifier. The renderer's crossing limit is a presentation limit and has no role in the classifier.

Current blind classification and total costs

The original 105 eight-crossing cases now have 105 correct identifications, 0 incorrect and 0 unknown. Every original unknown was retried unchanged. The newer pilot has 20 correct, 0 incorrect and 4 unknown across 24 independently scrambled queries at nine through twelve crossings, each against all 2,977 prime bank references. This pilot covers eight predeclared query types and three seeds each; it does not exhaustively test all 2,977 types.

LaneOriginal 105 correct / unknownPilot 24 correct / unknownOriginal + retry secondsPilot secondsCombined lane secondsSearch expansionsProof + validation nodes
Online GCTS105 / 020 / 41791.061904.493695.5511,35721,253,498
Brute force0 / 1050 / 241445.11424.561869.67144,3400

All failed retries remain in these totals, including the unsuccessful ten-minute attempt. The final original unknown was found using a generic fair portfolio of neutral move orderings, with identical orderings and aggregate budgets in both lanes. All lattice move locations remain unrestricted. Shared input preparation totals 654.08 seconds; independent stage audits total 357.26 seconds; new-stage artifact assembly/compression totals 16.70 seconds before final manifest writes. These common costs are separate from the lane totals. Brute-force unknowns prevent an equal-success speedup claim.

Full twelve-crossing-bank pilot · Final original-case retry · Immutable original experiment · Machine-readable totals.

Retry: 6 remaining unknowns at 60 seconds per query

Online GCTS: 3 correct / 0 incorrect / 3 unknown. Brute force: 0 correct / 0 incorrect / 6 unknown. The unchanged inputs are every marked unknown from the preceding immutable stage, against the same complete 35-reference bank. Both lanes run every selected case, even when the brute lane had additional earlier unknowns. No query was replaced or rescrambled.

Matched aggregate budgets: 60 seconds, 20,000 expansions, 200,000 live visited states, sixteen moves and 240 unit edges per query. All incident lattice face locations remain available. Both lanes use the same fair resumable DFS, neutral seed and exact inventory memoization. The marked lane starts empty and reuses only its own online proofs across query knot types. No invariant, knot-specific ordering, patch restriction, saved markings or construction path is supplied.

LaneCorrect / incorrect / unknownTotal secondsSearch expansionsProof + validation nodesPeak MiB
Online GCTS3 / 0 / 3267.031,54479,198450.6
Brute force0 / 0 / 6360.013,0830673.9

Cumulative original 105-case outcomes, retaining all previous retry work: marked: 102 correct / 0 incorrect / 3 unknown, 746.28 lane seconds, 3,281 search expansions and 1,244,028 proof/validation nodes; brute: 0 correct / 0 incorrect / 105 unknown, 1410.66 lane seconds, 16,187 search expansions and 0 proof/validation nodes. The brute lane’s other original unknowns have not been retried. Shared original preparation and every independent stage audit remain separate common costs.

Elapsed lane totals include the full reference graph, failed references and contours, exact cache warmup, online probes and activation/transfer validation, JS certificate replay, cold initialization and archival/checkpoints. Shared preparation: 0.00 seconds. Independent stage audit: 4.27 seconds. These are reported separately. Brute-force unknowns prevent an equal-success speedup claim.

Root markings exclude 203 reference choices under the finite horizon. Local child markings eliminate 234,660 of 241,164 base-legal options in complete extension graphs; root proofs have 1,695 applications learned on earlier queries of different evaluator knot types. Whole-discrepancy root proofs and local supports of at most 48 edges are distinct. Unknown probes supply no hard exclusion.

Marked unknowns: \(8_{19}\), seed 2, \(8_{14}\), seed 2, \(7_{2}\), seed 2. Independent Python checks 41 provenance movies, 3 scored paths, 2,097 extension proofs and 12,622 resolved cover labels, along with full bank coverage, fixed input selection, root composition and cost/catalog continuity.

Query typeGCTS correct / unknownBrute correct / unknown
\(8_{19}\)0 / 10 / 1
\(8_{14}\)0 / 10 / 1
\(7_{2}\)0 / 10 / 1
\(8_{17}\)1 / 00 / 1
\(8_{12}\)1 / 00 / 1
\(8_{8}\)1 / 00 / 1

Every input, outcome, cost and certificate · Proof archive part 1 · Independent stage audit · Contract and limitations.

This remains a declared point-valued graph-path adaptation of GCTS. The fixed projection and single-Reidemeister/routing author grammar remain inventory restrictions; no general lattice-isotopy completeness claim is made. Finite failures stay unknown. Arbitrary-input recognition, negative certificates, separate mirrors/composites and RL remain open.

Retry: 3 remaining unknowns at 180 seconds per query

Online GCTS: 2 correct / 0 incorrect / 1 unknown. Brute force: 0 correct / 0 incorrect / 3 unknown. The unchanged inputs are every marked unknown from the preceding immutable stage, against the same complete 35-reference bank. Both lanes run every selected case, even when the brute lane had additional earlier unknowns. No query was replaced or rescrambled.

Matched aggregate budgets: 180 seconds, 20,000 expansions, 200,000 live visited states, sixteen moves and 240 unit edges per query. All incident lattice face locations remain available. Both lanes use the same fair resumable DFS, neutral seed and exact inventory memoization. The marked lane starts empty and reuses only its own online proofs across query knot types. No invariant, knot-specific ordering, patch restriction, saved markings or construction path is supplied.

LaneCorrect / incorrect / unknownTotal secondsSearch expansionsProof + validation nodesPeak MiB
Online GCTS2 / 0 / 1432.682,90841,104880.2
Brute force0 / 0 / 326.305,0720523.0

Cumulative original 105-case outcomes, retaining all previous retry work: marked: 104 correct / 0 incorrect / 1 unknown, 1178.96 lane seconds, 6,189 search expansions and 1,285,132 proof/validation nodes; brute: 0 correct / 0 incorrect / 105 unknown, 1436.96 lane seconds, 21,259 search expansions and 0 proof/validation nodes. The brute lane’s other original unknowns have not been retried. Shared original preparation and every independent stage audit remain separate common costs.

Elapsed lane totals include the full reference graph, failed references and contours, exact cache warmup, online probes and activation/transfer validation, JS certificate replay, cold initialization and archival/checkpoints. Shared preparation: 0.00 seconds. Independent stage audit: 2.98 seconds. These are reported separately. Brute-force unknowns prevent an equal-success speedup claim.

Root markings exclude 102 reference choices under the finite horizon. Local child markings eliminate 439,779 of 453,590 base-legal options in complete extension graphs; root proofs have 601 applications learned on earlier queries of different evaluator knot types. Whole-discrepancy root proofs and local supports of at most 48 edges are distinct. Unknown probes supply no hard exclusion.

Marked unknowns: \(7_{2}\), seed 2. Independent Python checks 38 provenance movies, 2 scored paths, 1,017 extension proofs and 6,044 resolved cover labels, along with full bank coverage, fixed input selection, root composition and cost/catalog continuity.

Query typeGCTS correct / unknownBrute correct / unknown
\(8_{19}\)1 / 00 / 1
\(8_{14}\)1 / 00 / 1
\(7_{2}\)0 / 10 / 1

Every input, outcome, cost and certificate · Proof archive part 1 · Independent stage audit · Contract and limitations.

This remains a declared point-valued graph-path adaptation of GCTS. The fixed projection and single-Reidemeister/routing author grammar remain inventory restrictions; no general lattice-isotopy completeness claim is made. Finite failures stay unknown. Arbitrary-input recognition, negative certificates, separate mirrors/composites and RL remain open.

Retry: 1 remaining unknowns at 600 seconds per query

Online GCTS: 0 correct / 0 incorrect / 1 unknown. Brute force: 0 correct / 0 incorrect / 1 unknown. The unchanged inputs are every marked unknown from the preceding immutable stage, against the same complete 35-reference bank. Both lanes run every selected case, even when the brute lane had additional earlier unknowns. No query was replaced or rescrambled.

Matched aggregate budgets: 600 seconds, 20,000 expansions, 200,000 live visited states, sixteen moves and 240 unit edges per query. All incident lattice face locations remain available. Both lanes use the same fair resumable DFS, neutral seed and exact inventory memoization. The marked lane starts empty and reuses only its own online proofs across query knot types. No invariant, knot-specific ordering, patch restriction, saved markings or construction path is supplied.

LaneCorrect / incorrect / unknownTotal secondsSearch expansionsProof + validation nodesPeak MiB
Online GCTS0 / 0 / 1600.033,71913,6222154.6
Brute force0 / 0 / 13.921,4460408.0

Cumulative original 105-case outcomes, retaining all previous retry work: marked: 104 correct / 0 incorrect / 1 unknown, 1778.99 lane seconds, 9,908 search expansions and 1,298,754 proof/validation nodes; brute: 0 correct / 0 incorrect / 105 unknown, 1440.88 lane seconds, 22,705 search expansions and 0 proof/validation nodes. The brute lane’s other original unknowns have not been retried. Shared original preparation and every independent stage audit remain separate common costs.

This stage additionally applies whole-window continuation proofs to child discrepancy components larger than 48 edges, using the existing root catalog and its 64-node/sixteen-horizon probes. Per-component maximum proved bounds compose only across disjoint face alphabets. These broader child constraints are reported separately from local transfer; all their learning/validation costs and evidence are in the root channel.

Elapsed lane totals include the full reference graph, failed references and contours, exact cache warmup, online probes and activation/transfer validation, JS certificate replay, cold initialization and archival/checkpoints. Shared preparation: 0.00 seconds. Independent stage audit: 2.32 seconds. These are reported separately. Brute-force unknowns prevent an equal-success speedup claim.

Root markings exclude 34 reference choices under the finite horizon. Local child markings eliminate 627,932 of 648,844 base-legal options in complete extension graphs; root proofs have 0 applications learned on earlier queries of different evaluator knot types. Whole-discrepancy root proofs and local supports of at most 48 edges are distinct. Unknown probes supply no hard exclusion.

Marked unknowns: \(7_{2}\), seed 2. Independent Python checks 36 provenance movies, 0 scored paths, 417 extension proofs and 2,152 resolved cover labels, along with full bank coverage, fixed input selection, root composition and cost/catalog continuity.

Query typeGCTS correct / unknownBrute correct / unknown
\(7_{2}\)0 / 10 / 1

Every input, outcome, cost and certificate · Proof archive part 1 · Independent stage audit · Contract and limitations.

This remains a declared point-valued graph-path adaptation of GCTS. The fixed projection and single-Reidemeister/routing author grammar remain inventory restrictions; no general lattice-isotopy completeness claim is made. Finite failures stay unknown. Arbitrary-input recognition, negative certificates, separate mirrors/composites and RL remain open.

Retry: 1 remaining unknowns at 900 seconds per query

Online GCTS: 1 correct / 0 incorrect / 0 unknown. Brute force: 0 correct / 0 incorrect / 1 unknown. The unchanged inputs are every marked unknown from the preceding immutable stage, against the same complete 35-reference bank. Both lanes run every selected case, even when the brute lane had additional earlier unknowns. No query was replaced or rescrambled.

Matched aggregate budgets: 900 seconds, 20,000 expansions, 200,000 live visited states, sixteen moves and 240 unit edges per query. All incident lattice face locations remain available. Both lanes use the same fair resumable DFS, neutral seed and exact inventory memoization. The marked lane starts empty and reuses only its own online proofs across query knot types. No invariant, knot-specific ordering, patch restriction, saved markings or construction path is supplied.

LaneCorrect / incorrect / unknownTotal secondsSearch expansionsProof + validation nodesPeak MiB
Online GCTS1 / 0 / 012.076514,062318.0
Brute force0 / 0 / 14.231,6350413.7

Cumulative original 105-case outcomes, retaining all previous retry work: marked: 105 correct / 0 incorrect / 0 unknown, 1791.06 lane seconds, 9,973 search expansions and 1,312,816 proof/validation nodes; brute: 0 correct / 0 incorrect / 105 unknown, 1445.11 lane seconds, 24,340 search expansions and 0 proof/validation nodes. The brute lane’s other original unknowns have not been retried. Shared original preparation and every independent stage audit remain separate common costs.

This stage additionally applies whole-window continuation proofs to child discrepancy components larger than 48 edges, using the existing root catalog and its 64-node/sixteen-horizon probes. Per-component maximum proved bounds compose only across disjoint face alphabets. These broader child constraints are reported separately from local transfer; all their learning/validation costs and evidence are in the root channel.

Both lanes use a fair portfolio of neutral move-order seeds 31, 73, 131, 197. Each reference retains one root candidate; all ordering/contour contexts share the same aggregate time, node and live-state limits. These are generic permutations, with no knot label or learned ordering policy.

Elapsed lane totals include the full reference graph, failed references and contours, exact cache warmup, online probes and activation/transfer validation, JS certificate replay, cold initialization and archival/checkpoints. Shared preparation: 0.00 seconds. Independent stage audit: 2.49 seconds. These are reported separately. Brute-force unknowns prevent an equal-success speedup claim.

Root markings exclude 34 reference choices under the finite horizon. Local child markings eliminate 10,857 of 11,324 base-legal options in complete extension graphs; root proofs have 0 applications learned on earlier queries of different evaluator knot types. Whole-discrepancy root proofs and local supports of at most 48 edges are distinct. Unknown probes supply no hard exclusion.

Marked unknowns: none. Independent Python checks 36 provenance movies, 1 scored paths, 441 extension proofs and 2,257 resolved cover labels, along with full bank coverage, fixed input selection, root composition and cost/catalog continuity.

Query typeGCTS correct / unknownBrute correct / unknown
\(7_{2}\)1 / 00 / 1

Every input, outcome, cost and certificate · Proof archive part 1 · Independent stage audit · Contract and limitations.

This remains a declared point-valued graph-path adaptation of GCTS. The fixed projection and single-Reidemeister/routing author grammar remain inventory restrictions; no general lattice-isotopy completeness claim is made. Finite failures stay unknown. Arbitrary-input recognition, negative certificates, separate mirrors/composites and RL remain open.

Scaling pilot: full prime reference bank through 12 crossings

Online GCTS: 20 correct / 0 incorrect / 4 unknown. Brute force: 0 correct / 0 incorrect / 24 unknown. Every query is tested against all 2,977 prime reference types through twelve crossings. Queries cover the predeclared first and last corpus type at each crossing count nine through twelve, three independent eight-move scrambles each: 24 queries across eight types. These eight bank references are independently eight-move scrambled; the remaining 2,969 references use canonical embeddings. This is a representative query pilot against a complete bank, not exhaustive query testing of all 2,977 types.

Matched aggregate budgets: 120 seconds, 5,000 expansions, 100,000 live visited states, sixteen moves and 240 unit edges per query. All incident lattice face locations remain available. Both lanes use the same fair resumable DFS, neutral seed and exact inventory memoization. The marked lane starts empty and reuses only its own online proofs across query knot types. No invariant, knot-specific ordering, patch restriction, saved markings or construction path is supplied.

LaneCorrect / incorrect / unknownTotal secondsSearch expansionsProof + validation nodesPeak MiB
Online GCTS20 / 0 / 41904.491,38419,940,6823175.4
Brute force0 / 0 / 24424.56120,00003690.3

Selected types: \(9_{1}\), \(9_{49}\), \(10_{1}\), \(10_{165}\), \(11a_{1}\), \(11n_{185}\), \(12a_{1}\), \(12n_{888}\). Neither their names, crossing counts, seeds, histories nor correct bank indices enter the search. Every query and reference is fixed before either lane runs.

This stage additionally applies whole-window continuation proofs to child discrepancy components larger than 48 edges, using the existing root catalog and its 64-node/sixteen-horizon probes. Per-component maximum proved bounds compose only across disjoint face alphabets. These broader child constraints are reported separately from local transfer; all their learning/validation costs and evidence are in the root channel.

Both lanes use a fair portfolio of neutral move-order seeds 31, 73, 131, 197. Each reference retains one root candidate; all ordering/contour contexts share the same aggregate time, node and live-state limits. These are generic permutations, with no knot label or learned ordering policy.

Elapsed lane totals include the full reference graph, failed references and contours, exact cache warmup, online probes and activation/transfer validation, JS certificate replay, cold initialization and archival/checkpoints. Shared preparation: 293.48 seconds. Independent stage audit: 320.22 seconds. These are reported separately. Brute-force unknowns prevent an equal-success speedup claim.

Root markings exclude 71,423 reference choices under the finite horizon. Local child markings eliminate 342,624 of 352,978 base-legal options in complete extension graphs; root proofs have 2,057,226 applications learned on earlier queries of different evaluator knot types. Whole-discrepancy root proofs and local supports of at most 48 edges are distinct. Unknown probes supply no hard exclusion.

Marked unknowns: \(11n_{185}\), seed 0, \(11n_{185}\), seed 2, \(11a_{1}\), seed 0, \(12n_{888}\), seed 2. Independent Python checks 32 provenance movies, 20 scored paths, 167,686 extension proofs and 1,904,681 resolved cover labels, along with full bank coverage, fixed input selection, root composition and cost/catalog continuity.

Query typeGCTS correct / unknownBrute correct / unknown
\(10_{1}\)3 / 00 / 3
\(11a_{1}\)2 / 10 / 3
\(12a_{1}\)3 / 00 / 3
\(9_{1}\)3 / 00 / 3
\(10_{165}\)3 / 00 / 3
\(9_{49}\)3 / 00 / 3
\(11n_{185}\)1 / 20 / 3
\(12n_{888}\)2 / 10 / 3

Every input, outcome, cost and certificate · Proof archive part 1 · Proof archive part 2 · Proof archive part 3 · Proof archive part 4 · Independent stage audit · Contract and limitations.

This remains a declared point-valued graph-path adaptation of GCTS. The fixed projection and single-Reidemeister/routing author grammar remain inventory restrictions; no general lattice-isotopy completeness claim is made. Finite failures stay unknown. Arbitrary-input recognition, negative certificates, separate mirrors/composites and RL remain open.

Blind classification: all 35 prime knots through eight crossings

Online GCTS: 99 correct, 0 incorrect, 6 unknown out of 105. Brute force: 0 correct, 0 incorrect, 105 unknown. Every input is tested against the complete shuffled bank of 35 independently scrambled lattice references. The solver receives only vertex arrays; knot names, crossing labels, correct reference indices, seeds and construction histories stay in the evaluator. A label is attached only after a full lattice move certificate passes replay.

Each bank reference and each query has eight independently sampled lattice moves, deeper than the earlier five-move experiment. Three fresh query seeds per type give 105 cases, with fixed seeded query and bank permutations and no discarded or replaced cases. Eight sampled moves do not imply eight minimum moves: this measures recognition of nearby, known scrambled representatives. The bank excludes the unknot, separately scored mirrors, composites and outside-bank queries.

The classifier now uses a generic resumable depth-first path search, scheduled round-robin across references, one complete expansion per turn. Both lanes use this same scheduler and neutral move seed. Contours increase through a sixteen-move horizon; proved root markings may skip impossible shorter contours. Every incident lattice face remains available throughout the knot. There is no small-patch restriction. The fixed projection \((11,13,17)\), single-Reidemeister/routing endpoint grammar and finite edge/arithmetic bounds remain declared inventory restrictions.

Matched aggregate limits per query are ten seconds, 5,000 expansions, 100,000 simultaneous visited states, sixteen moves and 240 unit edges. Time includes the complete reference graph, wrong-reference searches, failed contours, online proof probes, activation/transfer checks, cache warmup and JavaScript certificate replay. A deadline during verification leaves the query unknown. Atomic operations can slightly overrun the time boundary. Both workers start fresh; only the marked worker reuses its own newly proved catalog across the mixed types.

LaneCorrect / incorrect / unknownTotal secondsQuery secondsExpanded nodesPeak MiB
Online GCTS99 / 0 / 6479.25476.411,737907.9
Brute force0 / 0 / 1051050.651050.0713,104693.7

Total lane time includes cold model construction and inter-query proof archival/checkpoint overhead through the final snapshot. Common input preparation took 360.60 seconds. Subsequent independent replay took 24.98 seconds; neither common preparation nor external replay is hidden in one lane. Brute-force unknowns prevent an equal-success speedup claim.

The marked lane additionally performs 1,164,830 relaxed-cover and capacity probe/validation nodes, including full activation checks; brute force performs 0. These cheap proof nodes are accounted separately from geometric search expansions, and their elapsed cost is already included in the totals. JavaScript certificate replay contributes 7.21 seconds in the marked lane.

Marked unknowns: \(8_{19}\), seed 2, \(8_{14}\), seed 2, \(7_{2}\), seed 2, \(8_{17}\), seed 2, \(8_{12}\), seed 2, \(8_{8}\), seed 2. The complete results preserve their reasons and all attempted work. All 35 types have positive identifications on at least two independent query seeds, with ten- to sixteen-move recovered paths. The recovered paths use routing and Reidemeister I/II moves; this run does not exercise type III.

What the markings actually prune

The root learner additionally probes whole finite edge-discrepancy components, up to 480 edges, against every touching face, with sixteen-move cover budgets and 64 probe nodes. This relaxed cover is a necessary condition for a lattice path. Proved negative cover labels compile to incompatible \(m\)-values on the complete reference-choice graph; they exclude 3,569 reference candidates within the declared horizon. These are global root-window proofs, separate from the child learner's local supports of at most 48 edges and 512-node probes. Neither proof assigns a knot name or proves inequivalence.

Within expanded marked states, local extension markings eliminate 274,326 of 285,353 base-legal move options in completed extension graphs, leaving 11,027; capacity markings reject 154,677 raw options before full author resolution. The full marked run expands 1,737 nodes, versus 13,104 without markings. These counters distinguish within-state pruning from fewer visited states; they do not attribute the combined classifier benefit solely to local transfer. Both catalogs start empty, validate new labels once and retain immutable evidence. Root proofs have 39,114 applications learned on earlier queries, including 37,720 across different evaluator knot types; labels are used only to measure that transfer afterward. Unknown probes create no hard exclusions.

This is a point-valued graph-path adaptation of GCTS, with complete forward/reverse candidate incidence. It is not a global space-time tiling or the reference neighboring-pair/corona learner. The generic driver sees opaque keys and point values, while the author adapter and independent verifier define legal lattice moves. RL and cluster proposals are still unimplemented.

Coverage across seeds and types

Query seed indexGCTS correct / unknownBrute correct / unknown
035 / 00 / 35
135 / 00 / 35
229 / 60 / 35
All 35 prime types, three independent queries each
TypeGCTS correct / unknownBrute correct / unknown
\(3_{1}\)3 / 00 / 3
\(4_{1}\)3 / 00 / 3
\(5_{1}\)3 / 00 / 3
\(5_{2}\)3 / 00 / 3
\(6_{1}\)3 / 00 / 3
\(6_{2}\)3 / 00 / 3
\(6_{3}\)3 / 00 / 3
\(7_{1}\)3 / 00 / 3
\(7_{2}\)2 / 10 / 3
\(7_{3}\)3 / 00 / 3
\(7_{4}\)3 / 00 / 3
\(7_{5}\)3 / 00 / 3
\(7_{6}\)3 / 00 / 3
\(7_{7}\)3 / 00 / 3
\(8_{1}\)3 / 00 / 3
\(8_{2}\)3 / 00 / 3
\(8_{3}\)3 / 00 / 3
\(8_{4}\)3 / 00 / 3
\(8_{5}\)3 / 00 / 3
\(8_{6}\)3 / 00 / 3
\(8_{7}\)3 / 00 / 3
\(8_{8}\)2 / 10 / 3
\(8_{9}\)3 / 00 / 3
\(8_{10}\)3 / 00 / 3
\(8_{11}\)3 / 00 / 3
\(8_{12}\)2 / 10 / 3
\(8_{13}\)3 / 00 / 3
\(8_{14}\)2 / 10 / 3
\(8_{15}\)3 / 00 / 3
\(8_{16}\)3 / 00 / 3
\(8_{17}\)2 / 10 / 3
\(8_{18}\)3 / 00 / 3
\(8_{19}\)2 / 10 / 3
\(8_{20}\)3 / 00 / 3
\(8_{21}\)3 / 00 / 3

Independent Python verifies all 140 scramble movies, 99 scored identification movies, 20,030 newly learned extension proofs and 152,759 resolved cover labels. It rebuilds the full face alphabets and checks root discrepancy composition, catalog continuity, reference-bank coverage, seed coverage and cost accounting. Any finite failure remains unknown. General lattice-isotopy completeness, arbitrary-input recognition, negative certificates and twelve-crossing classification remain open.

Every input, reference, outcome, cost and certificate · All online proof events, compressed JSONL · Independent audit and per-type scores · Algorithm contract, controls and gaps · Benchmark harness · Independent verifier.

node scripts/prepare-blind-knots.mjs --directory=/tmp/knot-blind35
node scripts/benchmark-blind-lattice-knots.mjs --directory=/tmp/knot-blind35 --lane=marked
node scripts/benchmark-blind-lattice-knots.mjs --directory=/tmp/knot-blind35 --lane=brute
python3 scripts/finalize-blind-knot-report.py /tmp/knot-blind35
python3 scripts/verify-blind-lattice-knots.py research/knot-classifier/lattice-blind-benchmark.json

The selected formulation: lattice move paths with GCTS markings

The classifier searches the graph of exact lattice embeddings. A node is a whole knot; an edge is a checked reversible lattice move. The pair-search implementation uses bidirectional search from both endpoints and joins two parent paths; the newer blind-bank benchmark above uses fair resumable depth-first contours. This directly matches the equivalence question and does not require filling a space-time volume. A verified path can still be rendered as a knot movie.

The engine sees opaque keys, complete candidate domains and point values. At each state there is one choice point, with unit \(t\) for every move. Seam \(m\)-values encode opaque endpoint agreement. Online local extension failures produce proved failed-budget \(m\)-values; boundary disagreement removes candidates through the point/candidate graph. Unknown probes add no exclusions. These are real candidate markings in a declared graph-path adaptation. Space-time exact tiling and the reference neighboring-tile/corona learner remain separate formulations.

No knot name, invariant, crossing label, ancestor, scramble history or preferred move type enters search. The author adapter and independent verifier define legal lattice moves. Every incident face throughout the knot remains available under the existing fixed-projection grammar and finite edge bounds. Learned profiles are validated once and kept immutable, preserving the earlier transfer-cost improvement.

Testing a different tree scheduler

Balanced scheduling expands the shallower breadth-first wave. Adaptive scheduling expands the smaller pending frontier, with depth breaking ties. Each wave retains complete layer enumeration and shortest-prefix bookkeeping. As the two radii grow, any allowed path within their sum crosses both retained balls, so changing which side expands preserves bounded path existence. This is a specialized graph scheduler; the reference tiling generation rule is not claimed.

The four-lane pilot uses two unchanged existing pairs: \(3_{1}\), seed 0, and the harder \(8_{1}\), seed 1. Both endpoints have five independently sampled lattice moves. Each lane starts fresh; marked lanes reuse only their own newly learned catalog across the two types. All four lanes share horizons zero through ten, a 120-second aggregate query budget, 5,000 expanded nodes, 200,000 live states, 240 unit edges, complete move inventories and the same neutral seed. No cases are replaced. Times include repeated horizons, probes, validation, memoization warmup and JavaScript certificate verification.

Scheduler and markingsIdentified / unknownTotal secondsExpanded statesPeak MiB
Balanced + GCTS2 / 0103.67680533.1
Adaptive + GCTS2 / 0104.24675516.4
Balanced brute force0 / 2236.566,2961034.9
Adaptive brute force0 / 2183.096,237875.2

Both marked schedulers identify both pairs, with eight- and ten-move certificates. Adaptive scheduling saves five expansions on the trefoil and saves none on the harder eight-crossing pair; their total times are essentially equal. This pilot establishes no marked identification advantage, so balanced bidirectional search remains the pair-search default. Adaptive brute force spends less total time before reaching its limits, while both pairs remain unknown. GCTS is the effective pruning mechanism on these cases. Brute-force unknowns provide no equal-success timing comparison.

The generic scheduler tests cover 1,536 exhaustive graph/budget/marking combinations against an independent reachability oracle. An asymmetric control uses 54 expansions with balanced scheduling and four with adaptive scheduling; that demonstrates a possible benefit, rather than a knot-specific performance claim. Independent Python replay checks 8 spatial movies and 1,567 resolved local proof labels in 0.32 seconds after the timed runs.

The larger earlier result remains 18 identified independent pairs through eight crossings. This two-case scheduler pilot does not expand recognition coverage. The newer blind-bank benchmark above extends recognition coverage with deeper scrambles; mirrors, composites, arbitrary inputs and twelve-crossing scaling remain acceptance gates. RL, if added, should propose validated move clusters with complete base-move fallback.

Four-lane evidence and certificates · Path-search formulation, proof scope and gaps · Generic scheduler tests · Reproduction harness.

Nontrivial identifications through eight crossings

The repeated transfer-validation bottleneck is removed. Each new local rule is checked against its complete incident-face alphabet, every resolved label and its stencil before activation; its nested evidence is then frozen in a private native catalog. Read-only views and sealed configuration prevent replacement. Normal transfer checks neither scan the catalog nor replay proofs. An explicit full-audit mode remains available. Once-only proof validation costs are included below.

The enlarged comparison uses 18 unchanged pairs from the earlier 105-pair matrix: the first prime reference at each crossing count from three through eight, with all three original seed pairs. Both endpoints still have five independently sampled lattice moves. No seed or endpoint is replaced. Every incident face throughout each knot is available, with no move-support patch. The fixed regular projection and single-Reidemeister endpoint grammar are unchanged.

Both lanes use exact query-local memoization of full signed-diagram endpoint maps and the same generic increasing-horizon schedule. They try horizons zero through ten, advancing only after complete finite exhaustion. Aggregate bounds are 5,000 expanded nodes and 60 seconds per initial query; the live-state limit is 200,000 per horizon. Remaining marked unknowns receive matched 120-second retries in both lanes. All failed first-attempt and repeated-horizon costs remain charged. No knot label, invariant, scramble history or construction route enters search.

LaneIdentified / unknown pairsTotal seconds, including retriesExpanded nodesPeak MiB
Brute force0 / 181560.0132,5431559.4
Reused immutable GCTS18 / 0919.387,625860.3

Marked totals include 0.354 seconds of learning probes, 0.704 seconds of once-only activation validation, 6.734 milliseconds of transfer checks and 21.099 seconds of JavaScript certificate verification. Marked graphs remove 1,036,378 of 1,083,819 legal candidates (95.62%). Different stages start fresh native models and transfer only within that stage; restarting and relearning are included in these costs.

These are positive pair identifications, including eight-crossing movies, with independent spatial endpoint replay. When brute force remains unknown, total-cost differences establish solved-versus-unknown behavior rather than an equal-success speedup factor. This enlarged experiment covers six representative types, not all 35 types at the larger budget; the complete earlier matrix remains below. Reference-bank selection, separate mirrors, composites, general isotopy completeness and twelve-crossing scaling remain open.

Independent replay verifies 62 lattice movies and 20,791 resolved local labels, in 2.57 seconds after the timed runs. Inputs are reused, so no new scramble-generation cost is charged; the original common cost was 292.77 seconds. Query times include every repeated construction and cache warmup.

Every representative knot and seed, with cumulative costs
PairBrute forceGCTSSeconds: brute / marked
\(3_{1}\), seed 0unknownidentified (8 moves)60.00 / 4.68
\(3_{1}\), seed 1unknownidentified (10 moves)60.00 / 10.93
\(3_{1}\), seed 2unknownidentified (10 moves)60.00 / 10.79
\(4_{1}\), seed 0unknownidentified (10 moves)60.00 / 23.25
\(4_{1}\), seed 1unknownidentified (8 moves)60.00 / 7.98
\(4_{1}\), seed 2unknownidentified (10 moves)60.00 / 19.40
\(5_{1}\), seed 0unknownidentified (10 moves)60.00 / 34.23
\(5_{1}\), seed 1unknownidentified (6 moves)60.00 / 4.27
\(5_{1}\), seed 2unknownidentified (10 moves)60.00 / 28.04
\(6_{1}\), seed 0unknownidentified (10 moves)60.00 / 49.18
\(6_{1}\), seed 1unknownidentified (10 moves)60.00 / 45.51
\(6_{1}\), seed 2unknownidentified (10 moves)60.00 / 35.08
\(7_{1}\), seed 0unknownidentified (8 moves)60.00 / 15.87
\(7_{1}\), seed 1unknownidentified (10 moves)180.00 / 136.31
\(7_{1}\), seed 2unknownidentified (10 moves)180.01 / 148.85
\(8_{1}\), seed 0unknownidentified (10 moves)60.00 / 40.18
\(8_{1}\), seed 1unknownidentified (10 moves)180.00 / 157.64
\(8_{1}\), seed 2unknownidentified (10 moves)180.00 / 147.19

All stages, bounds, proof catalogs and spatial certificates · Immutable-cache and algorithm contract · Reproduction harness · Independent verifier.

node scripts/benchmark-lattice-escalation.mjs
node scripts/benchmark-lattice-escalation.mjs --retry-report=research/knot-classifier/lattice-escalation-benchmark.json --max-ms=120000 --directory=/tmp/knot-escalation-retry --output=/tmp/knot-escalation-retry.json
node tests/test_knot_lattice_cached.mjs
python3 scripts/verify-lattice-escalation.py research/knot-classifier/lattice-escalation-benchmark.json

Earlier six-second matrix: all prime types through eight crossings

All 35 corpus prime types through eight crossings were tested with three predetermined seed pairs per type: 105 queries, five independent lattice moves per endpoint, and no discarded cases. Walk length is not minimum move distance. Every incident lattice face remains available throughout both knots; no move-support patch is imposed. The search receives only endpoint vertices. Labels, common ancestors and scramble histories stay in the evaluator.

Minimal crossingsPrime typesQueriesBrute force: success / unknownReused markings: success / unknownTotal seconds: brute / marked
\(3\)130 / 30 / 318.00 / 18.00
\(4\)130 / 30 / 318.01 / 18.00
\(5\)260 / 60 / 636.01 / 36.01
\(6\)390 / 90 / 954.02 / 54.02
\(7\)7210 / 210 / 21126.05 / 126.10
\(8\)21630 / 630 / 63378.20 / 378.25

Measured result: brute force identifies 0 queries and leaves 105 unknown; the marking lane identifies 0 and leaves 105 unknown. No case produces a certificate in both lanes, so this experiment establishes no equal-success timing speedup. Each query has the same bounds: ten moves, 240 unit edges, 200 expanded nodes, 30,000 stored states and six seconds including learning and transfer replay. Local probes have a 512-node limit; unfinished probes remain unresolved. Atomic operations may overrun the deadline; the maximum measured overrun is 16.94 milliseconds.

The marked lane starts with an empty model, then retains its in-memory local proof catalog across all seeds and knot types. Full incident-face alphabets, every resolved proof label and assigned stencil values are checked before transfer. No archived assignments are loaded. Time-interrupted samples remain unconstrained; interrupted transfer validation leaves the whole query unknown.

Actual marked candidate graphs remove 215,539 of 241,495 legal candidates (89.25%). Across completed state domains, mean available choices are 140.55 for brute force and 14.83 with markings. These averages cover different visited states. Expanded nodes are 3,231 / 1,855; branching states are 3,126 / 1,750. At a fixed time limit, fewer processed branches can also reflect learning overhead; candidate elimination is evidence of pruning, not by itself a speedup.

Total query cost is 630.29 seconds unmarked and 630.37 seconds marked. The latter includes 0.816 seconds of local proof searches and 123.422 seconds of transfer replay. Peak resident memory is 333.7 / 320.0 MiB. Common input generation took 292.77 seconds; independent archive verification took 8.17 seconds and replayed 210 spatial movies plus 45,789 resolved proof labels. Both extra costs are reported separately from query times.

Classification scope: this tests positive equivalence of supplied endpoint pairs across every prime reference type through eight crossings. It does not test blind reference-bank selection or negative pairs. Composite knots, separate mirror cases, the unknot, RL and a complete decision procedure remain open. The fixed regular projection and single-Reidemeister endpoint grammar remain declared restrictions; only move locations are unrestricted. An unknown query is never reported as inequivalent. All 105 construction witnesses are independently checked, even when the search cannot recover a movie.

Every knot type and seed result
KnotBrute forceReused markings
\(3_{1}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(4_{1}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(5_{1}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(5_{2}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(6_{1}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(6_{2}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(6_{3}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(7_{1}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(7_{2}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(7_{3}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(7_{4}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(7_{5}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(7_{6}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(7_{7}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(8_{1}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(8_{2}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(8_{3}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(8_{4}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(8_{5}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(8_{6}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(8_{7}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(8_{8}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(8_{9}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(8_{10}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(8_{11}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(8_{12}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(8_{13}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(8_{14}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(8_{15}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(8_{16}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(8_{17}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(8_{18}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(8_{19}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(8_{20}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)
\(8_{21}\)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)seed 0: unknown (search-time-budget); seed 1: unknown (search-time-budget); seed 2: unknown (search-time-budget)

Every input, seed, outcome, cost, new proof and certificate · Benchmark bounds and conformance scope · Reproduction harness · Independent verifier.

node scripts/benchmark-lattice-through8.mjs
node tests/test_knot_lattice_budgets.mjs
python3 scripts/verify-lattice-through8.py research/knot-classifier/lattice-through8-benchmark.json

Earlier comparison: learned local extension failures reduce branching

Each endpoint is independently scrambled by three legal lattice moves, with different seeds. The solver receives only the resulting vertex arrays. All moves are enumerated throughout both knots with no move-support patch. The generic search remains a neutral bidirectional graph-path adaptation over opaque states; it receives no knot label, invariant, common ancestor, history or move-type preference.

Evaluator knotUnmarked branching statesCold extension branching statesMean available moves: unmarked / markedTotal seconds: unmarked / cold / transferLegal candidates removed by extension markings
\(3_{1}\)3,5853074.4 / 4.5142.45 / 1.88 / 1.901,987
\(4_{1}\)5,000 (unknown: node limit)2695.5 / 4.2408.96 / 2.40 / 2.412,224
\(5_{1}\)3,898 (unknown: state limit)30115.5 / 4.5514.12 / 5.03 / 5.063,095

The trefoil comparison reaches the same independently certified identification in both lanes: 99.16% fewer branching states, and an observed 75.9-fold reduction in total time. The two other unmarked runs stop at their stated budgets; those rows establish solved-versus-unknown behavior, not equal-success timing ratios. The separate capacity-only control retains the unmarked state/branch counts. A one-move-per-endpoint smoke test explores two branching states in both lanes and is slower with extension learning, so these measurements do not establish a universal speedup.

The learner starts empty. For every new local discrepancy profile, it runs unmarked finite cover extension tests from budget zero through the first positive or unresolved result. Every unit square incident to a discrepancy edge is included, including squares crossing the window boundary. The probe relaxes self-avoidance, projection, exterior occupancy, parity and cancellation. An exhausted negative proves that no real continuation can meet that budget. A positive cover is only a relaxed witness.

Resolved negatives synthesize assigned failed-budget stencil values; positive and unknown budgets remain absent. Profiles normalize translations only. Disconnected projected alphabets cannot share a future face move, so their proved resource requirements add. That supplemental resource proof compiles a target-budget marking seam. The base engine compares actual assigned values and rebuilds complete candidate incidence before counting choices. Each context is frozen after its profiles have been learned; new profiles cannot change earlier contexts. Transfer replays the full alphabet and every resolved label before use.

Cold local proof searches across these three tests took 0.0502 seconds in total; profile construction, all other learning and validation costs are included in the table. Initial extension versions in the transfer lane are 0, 85, 405. Saved assignments are inspection evidence and are never loaded as priors. Both the certificates and the local proof labels are independently replayed in Python.

Independent archive replay verifies 41 lattice movies and all 17,500 resolved local proof labels, taking 0.88 seconds after the timed runs. Peak resident memory across the paired tests: 1,612.5 MiB (unmarked), 1,549.5 MiB (capacity-only), 254.7 MiB (extension-cold), 265.2 MiB (extension-transfer).

Four moves per independent endpoint were also tested, with an eight-move search bound. The trefoil, figure-eight and five-crossing reference are identified in six, eight and eight moves, expanding 557, 114 and 90 states. These marked-only exploratory trials have no unmarked timing comparison. Greater slack in the move bound can still increase branching substantially.

Scope: this is a finite local extension-proof marking adaptation with a supplemental resource constraint. It does not implement the reference neighboring-pair/one-corona learner. Bounds are six moves, at most 220 unit edges, 5,000 expanded nodes and 200,000 stored states in the paired comparison, with fixed regular projection direction \((11,13,17)\). Limits yield unknown. Broad classification coverage, mirror/composite scoring, RL proposals, continuous projection-event analysis and scaling to twelve crossings remain open.

Inputs, complete results, learned proof catalogs and all certificates · Exact proof, transfer and conformance scope · Local learner · Independent proof verifier.

node scripts/benchmark-lattice-extensions.mjs --output=/tmp/extension-knots.json
node tests/test_knot_lattice_extensions.mjs --report=/tmp/extension-knots.json
python3 research/knot-classifier/verify_extension_proofs.py /tmp/extension-knots.json

Earlier control: lazy whole-knot search and capacity markings

The classifier CLI now defaults to lazy bidirectional search. It expands complete all-face domains only at visited lattice embeddings and joins opaque state keys from the two endpoints. There is no eager reachable-movie catalog. Every occupied edge supplies unit faces in all coordinate planes and both directions; expansion and routing moves remain available. Unexpanded domains stay unknown. No small patch or move-support region is imposed in these tests.

Three pairs were scrambled independently from KnotInfo references, using different seeds and two legal moves per endpoint. The solver receives only the two resulting vertex arrays. It receives no reference name, common ancestor, scramble history, or expected solution. All three pairs were identified in four moves with independently verified spatial endpoints. The seeds and both provenance movies are saved separately from the solver inputs.

Evaluator knotExpanded statesGenerated statesTransferred marking eliminationsSeconds: unmarked / cold GCTS / transfer
\(3_{1}\)87369431272.76 / 2.81 / 2.79
\(4_{1}\)97482749475.10 / 5.19 / 5.10
\(5_{1}\)1197223640412.75 / 12.79 / 12.62

The local learner starts with absent components. On a raw-placement capacity failure it exhaustively probes all binary exterior profiles at the replacement arc's internal vertices, using the unmarked point solver. It synthesizes sparse agreement/mismatch components from every resolved label and activates them only after complete profile replay. Two prototypes cover one or two internal vertices: six profiles total, three assigned components. A candidate's learned values are compared against the current knot's assigned vertex-occupancy values at actual lattice points; absent values remain unconstrained and zero is assigned.

The transfer lane learns on the trefoil, then reuses only this in-memory local model on the figure-eight and five-crossing reference. Both transfers replay all six local point probes before use. Independent tests validate 4,608 raw-placement profiles under all 48 signed coordinate permutations, translations and traversal reversal. Marking changes replay the retained candidate graphs and accepted prefix edges. Saved benchmark assignments are evidence and are never imported as a prior.

Scope: these are proved local vertex-capacity compatibility guards. They do not generalize failed routes to a target, detect knot-theoretic obstructions, or reduce the number of explored legal states. The measured timings show no established speedup. These compatibility controls are retained as historical evidence. The stronger extension-proof lane is reported above; the full neighboring-pair corona protocol remains research work. The generic lazy algorithm is a graph-path adaptation with complete per-state point/candidate domains, not the reference all-time-slot CSP scheduler; the earlier eager solver is retained as a separately labeled control.

All inputs, seeds, cold/transfer results and certificates · Lazy algorithm and transfer proof scope · Classifier implementation.

node scripts/benchmark-lazy-lattice-knots.mjs --output=/tmp/lazy-knots.json
node tests/test_knot_lattice_lazy.mjs --report=/tmp/lazy-knots.json
node scripts/classify-lattice-knot.mjs --input=query.json --references=references.json --bounds=bounds.json --output=identified.json
python3 research/knot-classifier/verify_lattice_movie.py identified.json

Bounds remain explicit: four move steps in this benchmark, at most 220 unit edges, fixed regular projection direction \((11,13,17)\), and the projection arithmetic scope \(|x_i|\le100\). Node/state budgets stop with unknown. The single-Reidemeister endpoint filter remains a restricted face grammar; general lattice isotopy completeness and a single continuous projected event per tile are not claimed. These short independent scrambles are an acceptance test, not deep scrambling or recognition coverage through 12 crossings.

Earlier control: a fixed-patch lattice identification

The classifier now searches exact lattice embeddings using reversible empty-square disk sweeps. The tile adapter decorates a sweep as Reidemeister I, II or III only when an independent projected endpoint check admits that single diagram move; unchanged projected diagrams are routing tiles. Types I and II allow both expansion and reduction. Geometry stays in the inventory and verifier. The generic brute-force engine receives only candidate identifiers, point capacities and opaque seam markings.

The first test identifies two different embeddings of the trefoil. The source is independently certified from the KnotInfo reference by a 15-tile lattice provenance movie. In a fixed four-square move-support patch, the neutral search discovers a five-tile sequence: II reduction, II expansion, III, II expansion, I reduction. The universe has 26 layer-state entries and 53 transition placements. Both lanes visit 7 search nodes, make 5 branch decisions and backtrack twice. The online lane starts empty, learns 2 proved failure guards from fresh unmarked probes, and records 4 candidate eliminations due to those guards. Independent Python replay checks the exact spatial exterior, square disk, collars, rational projection and every declared diagram move.

This is a small finite classifier test, not recognition coverage through 12 crossings or evidence of speedup. The search is not given the construction path. Endpoint diagram checks and spatial isotopy are certified; a claim that a continuous projection has exactly one event per tile needs additional event analysis.

Identification inputs and bounds · Source provenance certificate · Cold baseline and online results, with certificates · Algorithm conformance and remaining gaps.

Reference types through 12 crossings

A new corpus contains 2,977 prime reference knot types and the unknot, lifted from KnotInfo grid notation. Horizontal segments lie at height zero, vertical segments at height one, and endpoint connectors join the two levels. All coordinates are integers; every edge follows a coordinate axis. Every polygon is closed and self-avoiding, with 4–200 unit edges. Mirrors are generated explicitly and never identified by a reflection in the state key.

Exact lattice corpus (JSON) · Validation and provenance. Only names, crossing labels and grid coordinates were extracted from the published workbook. Labels are evaluator metadata: searchInput removes them and supplies only vertices.

This is the first milestone, not the full meaning of “all knots through 12 crossings”: the current corpus covers prime types and the unknot. Composite types must be added from an independently checked source. Mirror and orientation conventions must also be scored explicitly; the initial state contract is unoriented and preserves spatial handedness. The source grid may project with more crossings than the reference's minimal crossing number.

Subgoals and acceptance gates

StepDeliverable and acceptance gateStatus
1. Exact lattice states and referencesValidate integer axis edges, closure, one component and absence of intersections; preserve reflections; strip all evaluator labels at the search boundary. Build references through 12 crossings.Corpus and exact states implemented; first positive trefoil identification independently verified.
2. Lattice Reidemeister inventoryAuthor all three types in both permitted directions, unchanged exterior collars, strand ports and lattice lifts. Include stationary routing and explicit refinement/deformation tiles needed to reposition arcs. Each placement carries a checked ambient-isotopy realization. Verify inverses and enumerate every allowed transform/alignment.All three types exercised as lattice face tiles; inverse and exhaustive face-domain tests pass. General template completeness and refinement remain open.
3. Faithful point-value modelEncode coverage, spatial occupancy and strand/collar agreement as exact point capacities and markings. Prove that a completed point tiling expands to legal lattice isotopy. Declare every channel, transformation, boundary and refinement rule.Whole-lattice move-path point domains and capacity/extension markings are implemented. A global space-time tiling is an optional research formulation.
4. Generic brute-force searchReuse the domain-independent point engine: complete frontier/candidate incidence, global dead and forced checks, earliest-generation branching, neutral ordering and exact rollback. Enumerate the lattice inventory lazily with certified exhaustion, without constructing the entire reachable-state catalog first.Lazy complete per-state expansion implemented and tested without a support patch. Eager slot-CSP control retained; lazy graph-path scheduler is a declared adaptation.
5. Online GCTS synthesisStart empty. Obtain labels from unmarked complete extension tests; update actual point markings after resolved results. Keep unresolved labels empty. Revalidate the full prefix/graph on every rule version. Distinguish context-proved exclusions from transferable hypotheses; preserve an unmarked fallback for classification claims.Transferable local capacity and target-conditioned extension-budget stencils are learned online. Extension failures are proved using relaxed all-incident-face covers and a supplemental resource composition. Full neighboring-pair corona synthesis remains pending.
6. Classification and scalingSearch toward the unlabeled reference bank. Replay a full lattice certificate before attaching the evaluator's class name. Score unseen scrambled embeddings, both mirror cases and composite cases. Progress through 3–6, 7–8, 9–10 and 11–12 crossings; publish exact coverage, unknowns, costs and certificates.Extension-proof classifier CLI default. All 35 prime types through eight crossings tested on three five-move independent seed pairs each, with success/unknown outcomes and full costs published above. Representative five-move independent pairs through eight crossings are now identified with immutable proof reuse and larger budgets. Blind full-bank selection on 105 deeper independent scrambles is tested above; arbitrary-input recognition, mirror/composite scoring and twelve-crossing scaling remain pending.

What the search is allowed to know

The generic algorithm receives point functions, matching values, candidate identifiers and declared budgets. It does not receive knot names, crossing-number labels, coloring or polynomial invariants, braid relations, known untangling paths, or move-type preferences. The inventory author and independent verifier know the definition of a legal tile. Reference labels are attached only after a verified match. The available tile inventory includes temporary increases in lattice length and projection complexity.

RL is deferred until this lattice model is working. If restored, it should learn proposals from point/collar data and verified search outcomes, retain complete base-tile fallback, and be evaluated separately from pure brute force plus GCTS.

Bounds and classification claims

“Through 12 crossings” means the target knot types have minimal crossing number at most \(12\). It does not impose a 12-crossing limit on intermediate diagrams. A run has separate bounds on spatial box size, lattice edge count, refinement and move horizon. Those bounds must be increased fairly across attempts. Search seams quotient cyclic starting vertex and traversal reversal while preserving the exact spatial coordinate frame. Translation-normalized keys remain available for corpus geometry checks, but do not silently move the knot within a bounded search. Reflection and rescaling are not quotiented.

A verified lattice movie to a reference is a positive identification. Exhausting one finite box, horizon or edge bound leaves classification unknown. Learned hypotheses cannot turn this into an inequivalence claim. Search over increasing bounds is a positive recognition approach; it does not by itself guarantee termination for inputs outside the reference bank or distinguish every negative pair in finite time. Classification coverage on the finite benchmark is an empirical acceptance gate, not a theorem about arbitrary lattice inputs.

Tile geometry and presentation

Keep the spatial knot in \(\mathbb Z^3\) and time as an additional coordinate. Four-dimensional cubical blocks can carry the exact spatial history; three-dimensional hexagonal prisms can display its projection along \((1,1,1)\). A Reidemeister tile may require a refined block rather than one unit cell. Every claimed move needs an actual isotopy, not merely a surface joining its endpoints. The viewer consumes saved lattice certificates and projects them afterward; aesthetic layout cannot supply or alter search states.

Local cubic-lattice plaquette moves have a useful established isotopy theory; see Janse van Rensburg and Rechnitzer. The current inventory filters these geometric sweeps by the Reidemeister endpoint test, rather than treating every sweep as a Reidemeister move. This restricted inventory is not claimed complete for arbitrary lattice isotopy.

Reproduction and conformance limits

node tests/test_knot_lattice_search.mjs
node scripts/benchmark-lattice-knots.mjs --output=/tmp/lattice-benchmark.json
python3 research/knot-classifier/verify_lattice_movie.py research/knot-classifier/fixtures/trefoil-source-provenance.json
node tests/test_knot_lattice.mjs

For horizon \(H\), each transition covers one time-slot point with exact value \(1\) and assigns its complete before/after lattice embedding at two marking-only seams. The fixed boundary assigns source and target seams. All required slots are roots of generation zero. The generic engine maintains complete forward/reverse incidence, checks global dead ends before forced moves, branches only after propagation, and reconstructs the entire graph after rollback or a marking version change.

Observed failures trigger fresh unmarked completion probes with only the candidate fixed. Complete exhaustion proves redundancy for this exact finite target, inventory, coordinate frame and horizon. The boundary then assigns \(0\) at a new marking point and the candidate assigns \(1\). Budget exhaustion creates no marking. These are ordinary assigned point values, not a runtime failure-clause scanner. Saved benchmark values are evidence and never loaded as a prior.

The earlier eager control is a finite whole-state seam adaptation of the master contract. Its candidate-specific guards do not implement transferable constraints. The new lazy extension-proof lane is described above. Local spatial point functions, neighboring-pair corona synthesis, RL and a complete knot decision procedure remain open. Catalog truncation and resource stops yield unknown. The square-face grammar excludes degenerate fixed-direction projections and multi-move projected endpoint changes; its exhaustive enumeration claim applies only to that declared grammar. The positive classifier tries supplied unlabeled reference geometry and attaches its evaluator name only after successful spatial replay.