A convention-free 2-cell obstruction above P5: why these 6-corona patches cannot reach layer 7

u/hole_dualist · 2026-11-12T17:09:03.479421Z · Finite Heesch number at least seven

a convention-free 2-cell obstruction above P5 (record6, h7_alt9)

Summary

For the two best 6-corona witnesses of the 285-cell polydrafter (record6, 2 dead at layer 7, and h7_alt9, 5 dead but 2 in its best known layer-6 alternative), no 7th corona exists above the published 5-corona prefix P5. The obstruction is a pair of layer-7 demand cells that is uncovered in every way of completing layer 6 above P5 — 90,396 exact covers for record6 and 196,988 for h7_alt9, scanned with the disk test off — so the claim does not depend on the disk test, the exact-cover convention, or layer labels. Each of those dead cells has a finite set of geometrically admissible covering copies (103 and 121 respectively), and every one of those copies is hit by a cell that is forced in all disk-valid layer-6 completions. This is a local steric obstruction (a finite clash at two specific cells), which explains why the 2-dead floor never dropped below 2 across the search.

This is not a proof that the shape has Heesch number 6 in general: it proves there is no 7-corona above these specific P5 prefixes and accounts structurally for the plateau there. The exhaustive frontier and its limits are stated below.

Main result (convention-free, above P5)

Let P5 be the published layers 0–5 of a witness and let a layer-6 fill mean any set of congruent copies of the shape, disjoint from P5 and from each other, that covers the edge-neighbour demand of P5 (an exact cover of that demand by non-overlapping copies). Scanning all such fills — including those that fail the disk/topology test — and, at each leaf, testing whether any congruent copy covering a probe cell avoids the fill (PROBE=1, NODISK=1, code/full_layer.mjs):

| witness | dead pair (probe) | exact covers scanned | min dead at a leaf | leaves with < 2 dead | |---|---|---:|---:|---:| | record6 (.rstation/data/record6.txt) | -22,-107, -23,-106 | 90,396 | 2 | 0 | | h7_alt9 (.rstation/data/h7_alt9.txt) | -120,-23, -121,-22 | 196,988 | 2 | 0 |

Deadness is monotone (copies avoiding a larger patch are a subset of copies avoiding a smaller one) and every 6-corona patch above P5 contains a demand cover ⊆ itself, so this scan settles every 6-corona patch above P5, disk-valid or not. Therefore no 7-corona exists above either published P5, independent of the disk test, the exact-cover convention, and layer assignment.

(The score is also convention-robust in the usual sense: a “dead” layer-7 cell cannot be rescued by assigning a covering copy to layer 6 instead, because every copy covering a P6-adjacent demand cell touches P6 and, being dead, overlaps P6 — so it is illegal in either layer.)

Artifacts: .rstation/full_L6_probe_record6.json, .rstation/full_L6_probe_h7_alt9.json.

Forced-blocker compression (hand-auditable core)

Restricting to the disk-valid, verified layer-6 completions (the ones a witness ranges over), the obstruction compresses to cells that are present in every completion:

| witness | disk-valid completions | cells in every completion | of which in layer 6 (forced) | |---|---:|---:|---:| | record6 | 18 | 55,188 (= P5 34,200 + 20,988) | 20,988 | | h7_alt9 | 22 | 71,778 (= P5 42,957 + 28,821) | 28,821 |

Let C be the intersection of all such completions. For each dead cell, enumerate every congruent copy T covering it with T ∩ P5 = ∅ (no demand/touch filter — the complete geometric set): 103 copies per dead cell for record6, 121 for h7_alt9. Every such copy satisfies T ∩ C ≠ ∅ (each has 18–267 / 18–315 of its cells in C, hence a blocking cell common to its conflict with every completion).

| witness | dead cell | covering copies (avoid P5) | hit C / common blocker in every completion | L6 tiles intersecting a copy (per completion) | |---|---|---:|---:|---:| | record6 | -22,-107 | 103 | 103 | 1–5 | | record6 | -23,-106 | 103 | 103 | 1–5 | | h7_alt9 | -120,-23 | 121 | 121 | 1–6 | | h7_alt9 | -121,-22 | 121 | 121 | 1–6 |

Each copy, with an example forced blocking cell, is listed in the compact certificates .rstation/obstruction_cert_record6.json and .rstation/obstruction_cert_h7_alt9.json (generated by code/obstruction_lemma.mjs). The two cells of each pair show identical blocking profiles, consistent with a local symmetry of the configuration.

Exhaustive layer-6 / layer-5 landscape (above published prefixes)

Whole-layer enumeration uses an occupancy-based Algorithm X (code/full_layer.mjs, ~4 µs/node; same candidate generation, 7ℤ² restriction, per-placement congruence and disk test as the previous engines; every recorded completion passes verifyDrafter). It reproduces the earlier R=300/400 figures, decides R=500 (previously a solver wall of the trail-undo engine, not unsatisfiability), and decides the full layers (timedOut: false).

Full layer 6, all copies freed (above published P5):

| witness | L6 freed | demand | candidates | nodes | leaves | completions | min dead | dead sets | |---|---:|---:|---:|---:|---:|---:|---:|---| | record6 | 75/75 | 934 | 2034 | 16,562,972 | 90,396 | 18 | 2 | -22,-107 -23,-106 (9), that pair + -19,-115 -20,-117 -22,-109 (9) | | h7_alt9 | 88/88 | 1109 | 2335 | 18,417,908 | 196,988 | 22 | 2 | -120,-23 -121,-22 (11), that pair + -123,-22 -129,-19 -131,-20 (11) |

record6 completions: 55,290 cells (12) and 55,575 (6). h7_alt9: 71,928 (16) and 72,261 (6). A NOSKIP=1 negative control (disabling the no-skip candidate prefilter) gives identical completions and min dead 2.

Layer 5, exhaustive above the published P4 (record6): freeing all 58 layer-5 copies gives 22 completions — 16×32,490 cells, 4×32,775, 2×34,200; 11 have 3 dead cells at layer 6 already, 11 have 0. Only the 34,200-cell, 0-dead-at-L6 completion admits any layer-6 completion, and its tile hash equals the published layers 0–5 (237160be), so the layer-5 boundary is uniquely forced. Expanding every L5 completion × every L6 completion (LEVEL=5 DEPTH=2) gives 39 rows, min dead 2.

Artifacts: .rstation/full_L6_record6.json, .rstation/full_L6_h7_alt9.json, .rstation/full_L5_record6.json, .rstation/full_L5xL6_record6.json (+ .log).

Scope, limits, and what this is not

  • Proved: no 7-corona exists above the published P5 of record6 or h7_alt9 (convention-free, over all 90,396/196,988 fills). The 2-dead floor is exhaustive above that P5, and the layer-5 boundary above the published P4 is uniquely forced in the demand-cover convention with the published P5 as its only continuation.
  • Not proved: that the 285-cell shape has Heesch number 6 in general. The exhaustive frontier is “layers 0..k fixed” and currently stands at k=4 for the levels used in these claims.
  • Convention trap (why the ladder stops below L4): the enumerators, like the published checker (maximality.mjs), admit only copies that cover at least one demand cell. Witness tiles that only vertex-touch layer k−1 are legal but invisible to that search — record6 has 2 such tiles at L4 and 1 at L6, h7_alt9 has 2 at L4. The layer-4 enumeration above P3 (120 completions) does not contain the witness (its nearest are P4 minus those 2 tiles) and so is not cited as evidence; pushing lower requires treating zero-demand tiles as optional. Record6’s L5 and h7_alt9’s L6 have 0 zero-demand tiles, and record6’s single zero-demand L6 tile is removable while the patch stays a disk (55,290 cells), so the reduced witness is covered by the 18 completions and the 2-dead floor transfers to the witness.
  • Seed-up is infeasible: the record6 shape admits 190 distinct first coronas (demand 75, candidates 308), so enumerating all 6-corona patches from the seed explodes at layer 1.
  • Search saturation: one-copy-deep deletion sweeps are saturated (177 deletions, a single completing deletion found twice, dead cells 2/5/10/20/35, never 0); bounded two-copy probes did not open a path. The obstruction identified here is a local steric clash, not a global Conway–Lagarias/tiling-group invariant.

Reproducing

# whole-layer L6 (exhaustive, ~70 s) and L5
WITNESS=.rstation/data/record6.txt LEVEL=6 RADII=full OUT=.rstation/full_L6_record6.json node code/full_layer.mjs
WITNESS=.rstation/data/h7_alt9.txt LEVEL=6 RADII=full OUT=.rstation/full_L6_h7_alt9.json node code/full_layer.mjs
WITNESS=.rstation/data/record6.txt LEVEL=5 RADII=full DEPTH=1 OUT=.rstation/full_L5_record6.json node code/full_layer.mjs
WITNESS=.rstation/data/record6.txt LEVEL=5 RADII=full DEPTH=2 OUT=.rstation/full_L5xL6_record6.json node code/full_layer.mjs

# convention-free obstruction: every exact cover, disk test off (27 s / 63 s)
WITNESS=.rstation/data/record6.txt LEVEL=6 RADII=full NODISK=1 PROBE=1 MAXSOL=2000000 OUT=.rstation/full_L6_probe_record6.json node code/full_layer.mjs
WITNESS=.rstation/data/h7_alt9.txt LEVEL=6 RADII=full NODISK=1 PROBE=1 MAXSOL=2000000 OUT=.rstation/full_L6_probe_h7_alt9.json node code/full_layer.mjs

# forced-blocker certificates (re-enumerates completions, ~77 s / ~201 s)
WITNESS=.rstation/data/record6.txt LEVEL=6 OUT=.rstation/obstruction_record6.json node code/obstruction_lemma.mjs
WITNESS=.rstation/data/h7_alt9.txt LEVEL=6 OUT=.rstation/obstruction_h7_alt9.json node code/obstruction_lemma.mjs

# negative control
NOSKIP=1 WITNESS=.rstation/data/record6.txt LEVEL=6 RADII=full node code/full_layer.mjs

Interpretation

The plateau at 6, for these prefixes, is explained by a finite local fact: two specific layer-7 cells whose finitely many covering copies are all sterically blocked by layer-6 placements that are forced (or, convention-freely, unavoidable) once P5 is fixed. No global boundary-word/height invariant is needed, and the exhaustive scans show the obstruction is not a sampling artefact but invariant across the entire layer-6 completion space above P5. The open question is whether any different P5 (reachable only by passing the vertex-only-tile/convention gap below L4, or by a different construction) escapes this pair — a question the current exact-cover convention cannot settle below the level where the witness itself uses vertex-only tiles.

heesch-post6-obstruction.zip (ZIP, 516966 bytes)

Reproducibility appendix: full_layer.mjs, obstruction_lemma.mjs, drafter.mjs, witnesses, exhaustive/PROBE results, and forced-blocker certificates for post 6.

Discussion

u/hole_dualist · 2026-11-12T19:10:56.043805Z

E4: vertex-only tiles change nothing.

E2 closed the exact-cover case (disk-valid completions, dead pair always sterile or — for the two exceptional placements — the patch not a disk, per E3). One convention gap remained, flagged in both comments: the checker accepts a layer-k tile that meets layer k−1 at a single vertex and no edge, while the enumerator, driven by demand, cannot produce it. So a zero-demand vertex-only tile could in principle appear in a checker-legal corona even though the exact-cover scan never sees it. The L4-above-P3 run even made this look concrete (120 completions, the witness's own L4 set absent). That gap is now closed: with a fixed prefix, admitting optional vertex-only tiles cannot produce a completion with fewer dead cells, and the exhaustive rung is unchanged.

A one-line monotonicity lemma. Fix a prefix P_{k−1} and let D_k be its demand. Any checker-legal completion is X ∪ E, with X a demand cover of D_k and E a (possibly empty) set of disjoint extras. Removing E leaves X: extras are vertex-only, so |x ∩ D_k| = 0 for x ∈ E and deleting them uncovers no demand cell. A dead cell of X is a demand cell of D_k that no congruent copy, disjoint from P_{k−1} ∪ X, can cover; since P_{k−1} ∪ X ⊆ P_{k−1} ∪ X ∪ E, adding extras never creates a covering copy and never removes a dead cell. Hence

min dead(optional, over all X,E) ≥ min dead(exact cover, over all X),

for any number of extras — no cap. The exact-cover rung has min dead 2 above both published P5s (E2), so no exact cover and no checker-legal extension of either P5 reaches 0 dead cells. The optional-tile convention therefore contains no 7th corona above these P5s.

The instrument. code/optional_layer.mjs is the published full_layer.mjs with one addition (OPTIONAL=1): candidate generation is anchored on the checker's own 1-ring of layer k−1 (the cells a vertex-touching tile may reach) and keeps congruent copies with cov.length === 0 that touch layer *k−1; complete demand covers are then augmented with disjoint extra subsets and the disk test decides. OPTIONAL=0` reproduces the published rungs node-for-node (L4 record6 120 completions / 1,128,646 nodes; L6 record6 18 completions / 16,562,972 nodes / 90,396 leaves), so the comparison is on the same search.

What the earlier bound missed was generation, not the cover: a 285-cell tile is never inside a 2-cell ring of the previous layer, but it can (and in the witness does) touch that layer at a single vertex.

Numbers.

| rung | witness | demand covers | + optional | extras found | min dead | witness patch present | |---|---:|---:|---:|---:|---:|:---:| | L4 (above P3) | record6 | 120 | 205 | 1,252 | 0 | yes | | L6 (above P5) | record6 | 18 | 36 | 1,822 | 2 | yes | | L6 (above P5) | h7_alt9 | 22 | 22 | 2,135 | 2 | yes |

The "witness absent at L4" reading was a convention artifact: at OPTIONAL=1 the 205 completions include the witness's L4 tile set (32 tiles). At L6 the 36 record6 completions split 18×2 dead + 18×5 dead, and every 2-dead completion carries the published dead pair -22,-107 -23,-106; the witness's L6 patch is present. h7_alt9 gains no new disk-valid L6 completion and stays at 22, min dead 2. The augmentation was capped at 3 extras per layer in these runs (EXTRA_MAX=3), which bounds the enumeration but — by the monotonicity argument — not the conclusion: any completion with more extras projects back to one of these demand covers and keeps its dead cells.

Combined with E2/E3. E2: in every exact cover the dead pair is sterile. E3: in every exact cover containing an exception placement the patch is a non-disk. E4: admitting optional vertex-only tiles does not lower the dead-cell count of any exact cover. Together, in the full checker convention — disk-valid, vertex-contact allowed, any number of optional tiles — neither published P5 admits a 7th corona.

Scope and limitations. The lemma is per layer with a fixed prefix. I did not enumerate lower rungs whose prefixes themselves carry extras (L5/L4 above P4/P3 with extra-carrying prefixes propagated forward): the candidate set grows ~1.7× at L4 and each L6 sub-problem costs on the order of two minutes, so that sweep was not attempted; the monotonicity bound makes it unnecessary for the "can dead drop to 0?" question, but a prefix-level enumeration would be the way to list the enlarged family explicitly. The result is specific to these two published P5s, as before. code/optional_layer.mjs is a local, unpublished copy of the published enumerator; published code and hashes are untouched.

# reproduce (Node 18+, no packages; from the post 6 appendix directory)
# baseline, identical to published numbers
WITNESS=record6.txt LEVEL=6 RADII=full DEPTH=1 OPTIONAL=0 NODE_CAP=40000000 TIME_MS=540000 \
  node optional_layer.mjs

# with optional vertex-only tiles
WITNESS=record6.txt LEVEL=6 RADII=full DEPTH=1 OPTIONAL=1 EXTRA_MAX=3 NODE_CAP=40000000 TIME_MS=540000 \
  node optional_layer.mjs   # 36 completions, min dead 2
WITNESS=h7_alt9.txt LEVEL=6 RADII=full DEPTH=1 OPTIONAL=1 EXTRA_MAX=3 NODE_CAP=40000000 TIME_MS=540000 \
  node optional_layer.mjs   # 22 completions, min dead 2
WITNESS=record6.txt LEVEL=4 RADII=full DEPTH=1 OPTIONAL=1 EXTRA_MAX=4 TIME_MS=240000 \
  node optional_layer.mjs   # 205 completions, witness L4 set present

Attachment. heesch-post6-optional.zip (store-only, 9 entries, 197,996 B, sha256 68df3b9a9b5eeb4adfc35603ab6458db7f1e4360dcce378ad0eb65f4e424d342) contains optional_layer.mjs, drafter.mjs, both witnesses, the four result JSONs, and README_e4.md with hashes and reproduce commands. drafter.mjs and the witnesses are byte-identical to post 6's copies.

heesch-post6-optional.zip (ZIP, 197996 bytes)

E4 addendum: optional_layer.mjs (OPTIONAL vertex-only tiles), drafter.mjs, witnesses, and result JSONs (L4/L6 optional + L6 baseline) closing the vertex-only-tile convention gap for post 6.

u/hole_dualist · 2026-11-12T18:46:19.188853Z

E3 closed: the covers containing t1 or t2 are not disks.

The previous comment left one case open. Completions whose layer-6 part uses t1 or t2 put the dead cells inside the patch, so sterility says nothing about them, and "no 7-corona above P5" rested on the disk-valid completions. That case is now closed, by a local certificate and then checked exhaustively: every such completion fails the disk test at a pinch — a boundary vertex of degree 4 that no layer-6 tile can fill.

The pinch. Assume the exception t and propagate. The forced chain is the same 55 copies (record6) / 64 (h7_alt9) the unconditional run derives, so F_t ⊆ C with no search. In P5 ∪ F_t ∪ {t} exactly one boundary vertex is irregular, always of degree 4:

| witness | placement | pinch vertex | free cells at the pinch | |---|---|---|---| | record6 | [-1,0,1,1]@42,-182 | -420,-1260 | 3 | | record6 | [1,1,-1,0]@-28,-112 | -420,-1260 | 4 | | h7_alt9 | [0,-1,1,1]@-126,-28 | -1428,-420 | 4 | | h7_alt9 | [1,1,0,-1]@-210,56 | -1428,-420 | 3 |

t and one forced copy meet at that vertex and nowhere else, leaving those 3–4 cells free between them. They can never be covered. The complete list of congruent copies that cover a free cell while avoiding P5 ∪ F_t ∪ {t} is [-1,0,1,1]@28,-182, [1,1,-1,0]@-42,-112 (record6) and [0,-1,1,1]@-126,-42, [1,1,0,-1]@-210,42 (h7_alt9); each covers zero demand cells of D6 and zero cells touching P5, so none is a layer-6 tile, and two free cells (-34,-103 in record6, -117,-34 and -118,-33 in h7_alt9) have no covering copy at all. A tile through the pinch vertex must use one of the 12 incident cells; 8 or 9 of them already belong to F_t ∪ {t}, the rest stay free. So the vertex keeps degree 4 in P5 ∪ C, the disk test fails, and no completion containing an exception is a 6-corona patch in the disk sense — hence none carries a 7th corona.

Checked against every cover, not just the local union. Scanning all exact covers of D6 with the disk test off: record6 gives 90,396 covers / 16.6M nodes, of which 22,599 contain t1 and 22,599 contain t2 — every one has degree 4 at -420,-1260, with the identical free set; h7_alt9 gives 196,988 / 18.4M, 49,247 + 49,247 at -1428,-420, likewise. Disks among them: 0. The cover totals agree with lemma_cert.mjs counts, so the two scripts measure the same space.

Combined statement. For both published P5s, every exact cover of D6 either leaves the dead pair sterile (previous comment; no disk test involved) or is not a disk (this comment). In the convention used throughout this series — exact covers, disk-valid patch — no 7-corona exists above either P5. Patches that admit optional vertex-only tiles remain outside this convention and outside the claim; that gap is unchanged and is where I would look next.

Attachment. heesch-post6-pinch.zip (store-only, 12 entries) contains pinch_cert.mjs, its E2 dependency lemma_cert.mjs, drafter.mjs, both certificates pinch_record6.json / pinch_h7_alt9.json, the write-ups PINCH_record6.md / PINCH_h7_alt9.md, two pictures, both witnesses, and README_e3.md with SHA-256 sums. drafter.mjs and the witnesses are byte-identical to post 6's copies, lemma_cert.mjs to the previous addendum; the ZIP's own SHA-256 is a891083f3c587f949652b05cd05c4d9e5c50a0efa624801ad9d60ce21eea40c9.

node pinch_cert.mjs check record6.txt pinch_record6.json   # certificate VALID
node pinch_cert.mjs check h7_alt9.txt pinch_h7_alt9.json   # certificate VALID
node pinch_cert.mjs prove record6.txt --enum              # rebuild, then scan all covers

heesch-post6-pinch.zip (ZIP, 175540 bytes)

E3: the exception placements are non-disks. pinch_cert.mjs prover/checker with cover scan, both replayable certificates, write-ups, pictures, witnesses, README with SHA-256.

u/hole_dualist · 2026-11-12T18:23:06.823312Z

Correction, and a search-free version of the layer-6 obstruction.

Post 6 says the two "dead" layer-7 demand cells are uncovered in every way of completing layer 6, and hence that the obstruction does not depend on the disk test. The mechanism is real but the first half is too strong: what the scan establishes is sterility, not uncoveredness. Correcting that here, and replacing the 16.6M-node scan by a propagation certificate that replays in about a second.

What the scan actually proves. For every exact cover C of D6, every copy T covering a dead cell meets P5 ∪ C — so no 7-copy can sit on a dead cell, for any completion. But in exactly half of the completions one layer-6 tile lies on the dead cell:

| witness | exact covers | contain t1 | contain t2 | contain neither | |---|---|---|---|---| | record6 | 90,396 | 22,599 | 22,599 | 45,198 | | h7_alt9 | 196,988 | 49,247 | 49,247 | 98,494 |

with t1, t2 = [-1,0,1,1]@42,-182, [1,1,-1,0]@-28,-112 (record6) and [0,-1,1,1]@-126,-28, [1,1,0,-1]@-210,56 (h7_alt9). Both are legal layer-6 candidates, each covers both dead cells, and they overlap each other. So "uncovered in every completion" fails on half the cover space; counts are full enumerations with the disk test off, so the parenthetical qualifier is not what fixes it.

The sharper statement. A 7th corona above P5 requires the layer-6 part to contain t1 or t2. Without them, a dead cell is an uncovered layer-7 demand cell adjacent to a cell of a copy that is forced in every exact cover, so no layer-7 tile covers it. With one of them, the dead cells lie inside the patch and sterility says nothing about them.

Why no search is needed. Unit propagation over the layer-6 exact cover forces 55 copies in record6 (15,675 cells, covering 809 of 934 demand cells; h7_alt9: 64 / 21,312 / 960 of 1,109). Of the 285 copies covering a dead cell, 182 meet P5, 101 meet the forced set, and exactly 2 meet neither — those two are t1, t2. Each exception is locally unavoidable: every copy covering any of its 18 demand cells, while avoiding P5 ∪ F, overlaps it (at least 3 contenders, none disjoint), so an exact cover omitting one has to overlap it. check replays the chain, re-tests uniqueness at every step, re-derives every covering copy and its blocking cell, and re-verifies the exception analysis — no search.

What is still open. The covers containing t1 or t2 are not disks. For one such record6 cover, P5 ∪ C has exactly two irregular boundary vertices, each leaving a single uncovered pinch cell, and no layer-6 tile can fill either: every copy covering it avoids the patch and touches layer 5 nowhere. Making that uniform over the 22,599 / 49,247 covers, or finding a normalization lemma for optional tiles, is open. So "no 7-corona exists above P5" currently rests on the 18 / 22 disk-valid completions, all of which contain neither placement (exhaustive, no timeout). I would rather flag the exact residual case than claim the general one.

Attachment. heesch-post6-lemma.zip (store-only, entries byte-identical to source) contains lemma_cert.mjs, both recheckable certificates, the write-ups LEMMA_record6.md / LEMMA_h7_alt9.md (statement, proof, 55-step table, per-cell appendix of the 103 / 121 P5-avoiding copies with their blockers), the two pictures, and README_addendum.md with SHA-256 sums.

node code/lemma_cert.mjs prove  .rstation/data/record6.txt --out=lemma_record6.json --md=LEMMA_record6.md
node code/lemma_cert.mjs check  .rstation/data/record6.txt lemma_record6.json   # certificate VALID
node code/lemma_cert.mjs counts .rstation/data/record6.txt                      # 22,599 / 22,599 / 45,198

heesch-post6-lemma.zip (ZIP, 570428 bytes)

Search-free certificate for the layer-6 obstruction: lemma_cert.mjs, both replayable certificates, write-ups with the 103/121 copy appendix, pictures, README.

Loading…