mrly.net

Slices

Cut the solid cube of odd side n = 2k-1 through its centre, perpendicular to the main diagonal, and the section is a regular hexagon tiled by 6*n^2 unit equilateral triangles. This page is the census of that mesh — triangles, edges, vertices, an Euler characteristic that never moves — and of what the parity designs do to it: which fills partition it, which fall into many pieces, and which pierce it with holes. The mesh itself is classical lattice geometry and no novelty is claimed for it; the designs are where the specific content lives. The back half leaves the slice for the surface census of the same designs in 3D.

Every claim carries a tag. Proved means a proof is given or restated here; Verified means recomputed from scratch for this page; Conjecture means neither. The scripts are in lab/slices/, with every command, comparison and retraction recorded in that directory's RUN.txt; the slice mesh alone has three independent builds there that agree on every count below.

One boundary first. The cuts page also slices a solid along x + y + z = s and also finds a hexagon, but everything else differs: there the solid is mrly_126 at base 2, fractal from the start, and the result — every slice a Sierpinski gasket, scheduled by the binary digits of the height — comes from a digit argument, with no mesh and no census. Here the solid is the plain filled cube at odd side n, the cut is the single middle plane, and the result is a triangular mesh counted directly. The two pages share a plane and a hexagon and not one number.

The solid slice, counted

Take the plane x + y + z = 3*n/2 through the centre of [0,n]^3. It crosses the cells of the three middle diagonal layers, meeting each crossed cell in a triangle or a hexagon; cutting the hexagons into six from their centres leaves pieces that are all equilateral triangles of one size, tiling the section — a regular hexagon whose area is 6*n^2 triangles. The rim contributes 6*n triangle sides, and the piece vertices are exactly the triangular-lattice points of the closed hexagon, 3*n^2 + 3*n + 1 of them. Every interior side is shared by exactly two triangles, so counting sides two ways gives 3*F = 2*I + B, which fixes the edge count, and the whole census follows. (Proved; each step is also asserted numerically in the builds, not waved through.)

countin kfactoredat n = 3
triangles24*k^2 - 24*k + 66n * n54
boundary edges12*k - 66n18
edges36*k^2 - 30*k + 66n * (3k-1)90
interior edges36*k^2 - 42*k + 126n * (3k-2)72
vertices12*k^2 - 6*k + 13*n^2 + 3*n + 137

Every count in the table carries the factor 6n except the last: the vertex count is odd and carries none. Two consequences are exact, not asymptotic. The slice's own surface-to-volume ratio — boundary edges over triangles — is 6n / 6n^2 = 1/n at every size, and V - E + F = 1 identically — the slice is a topological disk at every k. (Proved; Verified with the Euler characteristic counted directly, never from the algebra, at every size built.) The polynomials were confirmed by direct census at k = 1..8, by a blind quadratic fit through k = 1..3 that reproduces k = 4..8 with zero residual, and by fresh builds at k = 12, 16, 20 — at n = 39: 9126 triangles, 13806 edges, 4681 vertices, 234 boundary edges. (Verified.)

One lemma serves every fill census below. Lemma (Proved). For any set of triangles of the mesh, the adjacency graph on them — one node per triangle, one edge per shared side — has exactly E' - B' edges, where E' and B' are the edge and boundary-edge counts of the sub-mesh those triangles span: every interior edge of the sub-mesh joins exactly two of its triangles, every boundary edge one, and no lattice edge lies in three. Verified by direct enumeration on twenty meshes — the solid and four design fills at base-3 levels one to four, sides 3 to 81 — with the adjacency count and the interior-edge count collected from different maps; the carpet's fill at side 81 reads E' = 28188, B' = 6642, adjacencies 21546. The sub-mesh is the load-bearing word: read against the full hexagon mesh the identity is false — a fill-void edge is interior to the hexagon but joins no two fill triangles — and at side 27 the carpet's adjacency count is 2880 against the full mesh's E - B = 6480.

The vertex count is centered hexagonal

The closed hexagon of side n holds CH(n+1) lattice points, where CH(m) = 3*m^2 - 3*m + 1 is the centered hexagonal sequence 1, 7, 19, 37, 61, ... (OEIS A003215). With n = 2k-1 that is CH(2k): the slice vertex count is the centered hexagonal number at even index. (Proved.)

The arithmetic attached is short and mostly classical. 12*k^2 and 6*k are both divisible by 3, so the vertex count is 1 mod 3 for every integer k. (Proved.) And CH(m) = m^3 - (m-1)^3 = m^2 + m*(m-1) + (m-1)^2, a difference of consecutive cubes, so the centered hexagonal numbers that are prime are exactly the cuban primes, OEIS A002407 — a classical family, not a discovery of this page. What the slice adds is only the specialisation: its vertex counts walk the even-index half of that sequence.

The same form places the counts in the Eisenstein integers Z[omega], the ring behind the hexagonal lattice on the bases page. A rational prime splits in Z[omega] exactly when it is 1 mod 3, stays inert when it is 2 mod 3, and 3 alone ramifies — standard algebraic number theory, cited rather than re-derived. Since every vertex count is 1 mod 3, a prime vertex count is always a splitting prime, never inert and never the ramified 3, and it arrives with its own witness: CH(m) is already a value of the norm form at (m, m-1). One convention note: the bases page writes the norm as N(a + b*omega) = a^2 - a*b + b^2; the two forms trade under b -> -b, so in that convention CH(m) = N(m + (1-m)*omega).

The list itself. For k = 1..20 the prime vertex counts are 7, 37, 271, 397, 547, 919, 1657, 1951, 2269, 4219, at k = 1, 2, 5, 6, 7, 9, 12, 13, 14, 19; the other ten values, 91, 169, 721, 1141, 1387, 2611, 2977, 3367, 3781, 4681, are composite. Continuing to k = 40 adds 5167, 6211, 7351, 9241, 12097, 13669. All sixteen primes are 1 mod 3. (Verified, with a norm-form witness exhibited for each — 4219 = 37^2 + 37*38 + 38^2.) The research notes' list stopped one short: it skipped k = 19, whose value 4219 is prime, an omission caught in re-verification.

Four fills on one hexagon

The rest of the slice story needs the four historical families, and their naming needs care. The slice statements below are about the level-1 fill at odd side n: the design's parity rule applied to the n^3 grid directly. A triangle of the mesh belongs to a design when the cell it was cut from is filled.

name hereruledesignclassslice fill at n = 3
carpetat most one odd coordinatemrly_023mrly_02342
netat least two odd coordinatesmrly_232mrly_02312
treex and y both evenmrly_003mrly_00318
antipodalall coordinates one paritymrly_129mrly_02412

Carpet and net are one self-complementary class — that is why the core page aliases both names to mrly_023 — and mrly_232 is its complement member, a different truncation of the same class, not a second design; its fill polynomial 4*k^3 - 9*k^2 + 6*k - 1 is the worked corollary on the method page. The research notes call the fourth family void, and this page does not, because the core page's alias void is the canonical mrly_024, which fills 2*k^3 - 3*k^2 + k, while mrly_129 fills 2*k^3 - 3*k^2 + 3*k - 1 = k^3 + (k-1)^3, the centered cube numbers (OEIS A005898) — same class, different truncation, different polynomial. Nor is it the checkerboard: fill where i + j + l is even is mrly_105, a different design again. This page calls it the antipodal design, after its two corners (0,0,0) and (1,1,1). (Verified: orbit walks over the 48 signed permutations and cell-by-cell counts, lab/slices/.)

Carpet and net partition the hexagon. Their corner rules partition {0,1}^3 outright — every parity vector has popcount at most 1 or at least 2 — so every cell of any grid is filled by exactly one of the two, and in particular every crossed cell hands its whole section to exactly one. The two slice fills therefore partition the solid hexagon cell for cell:

carpet(n) + net(n) = 6*n^2

(Proved by the corner partition; Verified at every odd n = 1..31, with disjointness and covering tested triangle by triangle: 42 + 12, 72 + 78, 204 + 90, 210 + 276, 486 + 240 at n = 3, 5, 7, 9, 11, up to 3696 + 2070 = 5766 at n = 31.) Two cautions. This does not follow from the 3D complement identity — a volume identity says nothing about how a section decomposes; the extra fact, tested directly, is that the section decomposes along the same cells. And the research notes attributed the split to the parity of i + j + l, which does not survive: the crossed cells lie in three consecutive diagonal layers and every layer splits between the two families — at n = 5 the three layers split 15/3, 7/12, 15/3 — so the partition is by popcount, not by parity. Measured by section area instead of by triangle, the same identity extends to even n, where the split is exactly half and half. (Verified at n = 1..16.)

Components and holes

The carpet's slice fill runs two regimes in alternation, both governed by the same centered hexagonal numbers as the vertex count. At odd k it falls into CH((k+1)/2) disjoint pieces with no holes; at even k it is one connected piece pierced by CH(k/2) holes. Over k = 1..14 the component counts run 1, 1, 7, 1, 19, 1, 37, 1, 61, 1, 91, 1, 127, 1 and the hole counts 0, 1, 0, 7, 0, 19, 0, 37, 0, 61, 0, 91, 0, 127. (Verified at k = 1..14, every count taken twice by routes sharing nothing: components by triangle adjacency and again by point connectivity of the closed complex — so the odd-k pieces are separated outright, not pinched at a vertex — and holes as b0 - chi per component and again as complement components that never reach the rim. The rows k = 11..14 run past the previously recorded terms: CH(6) = 91 and CH(7) = 127 were predicted before being built and came out right in both regimes.)

The other families sort cleanly. The tree's and the antipodal's slices are hole-free at every k checked (1..10), and the net's carries the same sequence shifted by one in k — holes 1, 7, 19, 37 at odd k = 3, 5, 7, 9 — so carpet and net are the two families that puncture the hexagon, in opposite phase. (Verified.) CH is a classical sequence; its double occurrence in this slice — once as the vertex count, once as the component-and-hole law — is the fact.

Surface: the face-count recurrence

Now the 3D families, no slice. Substitute a tile of side n to level i and count unit faces: V(i) visible, H(i) hidden between two filled cubes. Cells are multiplicative, cells(i) = fc^i with fc the tile's fill, so V(i) + H(i) = 6*fc^i at every level.

The recurrence (Proved). Substitution creates no new contacts inside a copy; the only new hidden faces arise across an interface where two filled cells of the tile meet face to face. Opposite faces of a copy carry the same fill pattern — checked as arrays, not merely as counts — and face fills are multiplicative, so an interface along axis a contributes p_a^i contacts at level i, with p_a the tile's face fill on that axis, and each contact hides two faces. Writing adj_a for the tile's face-adjacent filled pairs along axis a:

V(i+1) = fc*V(i) - 2 * sum_a adj_a * p_a^i
H(i+1) = fc*H(i) + 2 * sum_a adj_a * p_a^i

When every adjacency-carrying axis shares one face fill l2, the source term collapses to 2*W*l2^i with W = sum_a adj_a, and the system closes: H(i) = 2*W*(fc^i - l2^i)/(fc - l2), V(i) = 6*fc^i - H(i). Both counts then live in the span of fc^i and l2^i — exactly the statement that (V, H) evolves by one fixed 2x2 matrix with eigenvalues (fc, l2), unique whenever W > 0 and l2 != fc.

familyfc at n = 3Wl2V(i)
carpet202482*20^i + 4*8^i
net7614*7^i + 2
tree12844*12^i + 2*4^i
antipodal90none6*9^i

(Verified against brute-force face counts at n = 3 to level 4, n = 5 to level 3, n = 7 to level 2; the carpet at n = 3 reads visible 72, 1056, 18048, 336384 against hidden 48, 1344, 29952, 623616. Matrices fitted exactly over the rationals from levels 1..3 predict the next level, and trace and determinant give (fc, l2) in all six fitted cases — e.g. carpet n = 3: [[12, 4], [8, 16]], trace 28 = 20 + 8, determinant 160 = 20 * 8.) Across bases the second eigenvalue is a face count of the family: n^2 - floor(n/2)^2 for the carpet, floor(n/2)^2 for the net, ceil(n/2)^2 for the tree — 8, 1, 4 at n = 3, 21, 4, 9 at n = 5, 40, 9, 16 at n = 7, nine of nine. (Verified.) The tree is the case that makes the rule bite: its copies touch only along one axis, and it is that axis's face fill, 4 rather than 6, that drives the recurrence.

The antipodal row is the degenerate case, and the second eigenvalue of 0 once recorded for it does not survive as stated. With no face-adjacent pair, W = 0, the hidden channel is never fed, and the substitution step is literally fc times the identity — eigenvalues (fc, fc) — while the face data sits on a single ray, so no 2x2 matrix is determined by it at all. The honest law for that family is the next section's, with no second eigenvalue to quote.

This matrix shares nothing but a name with the transfer matrix on the Euler page: that one is an 8-state digit-borrow automaton bounding the recurrence order of an Euler characteristic, this one is a 2x2 face ledger. Two arguments, one word.

No hidden faces

(Proved.) Two cells share a unit face exactly when they differ by 1 in one coordinate — which flips exactly one bit of the parity vector. So a design ever hides a face if and only if two of its filled corners sit at Hamming distance 1. The antipodal design's corners are at distance 3, so no two of its filled cubes ever meet face to face, at any side and any level: every face is exposed, and

surface(k) = 6 * cells(k),    cells(k) = 2*k^3 - 3*k^2 + 3*k - 1 = k^3 + (k-1)^3

with surface(L) = 6 * 9^L across fractal levels at base 3 — no hidden-face correction term, ever. (Proved; Verified by direct face counts at k = 1..12, in 2D as edges = perimeter, and at levels 1..4.) Hamming distance is preserved by cube symmetry, so total exposure is a class property. The test is also exhaustive: sweeping all 256 designs at n = 3, 5, 7, surface = 6 * cells holds for exactly the 35 designs whose filled corners are pairwise at Hamming distance at least 2 — the independent sets of the cube graph — and they form whole classes: mrly_000, mrly_001, mrly_006, mrly_022, mrly_024, mrly_105. (Verified.)

Corners

A last piece of 3D background, because it explains an asymmetry the complement identity leaves open. (Proved.) At odd n = 2k-1 a grid-corner coordinate a sees the cell indices a-1 and a, clipped to the grid: the boundary values 0 and n see only an even index, the 2k-2 interior values see one of each parity. So a design touches every one of the (n+1)^3 grid corners if and only if its rule contains the all-even corner — the grid corner at the origin can be touched by no other cell. Carpet, tree and the antipodal design all contain it, so their solids touch the whole grid, 8*k^3 corners. The net does not — it needs two odd coordinates — so a grid corner is touched exactly when at least two of its coordinates are interior:

net vertices = m^3 + 6*m^2 = 8*k^3 - 24*k + 16 = 8*(k-1)^2*(k+2),    m = 2k-2

short of the full grid by 24*k - 16. (Proved; Verified by brute force at k = 1..20 in 3D and k = 1..24 in 2D, where the same argument gives 4*k^2 - 4, and the all-even criterion swept over all 256 designs at k = 1..3: exactly the 128 rules containing the all-even corner touch every corner.) Two footnotes. Odd side is load-bearing: at even n the boundary coordinate sees an odd index and every family loses corners. And this is the geometric half of the complement story on the method page: the carpet and its complement trade cells exactly, but not vertices, because complementing the rule loses the all-even corner that every boundary grid corner depends on.

Where the numbers live

Everything above is recomputed by the scripts in lab/slices/ — the census and its extrapolations in recheck_census.py and recheck_mesh.py, the lemma in recheck_lemma.py, the prime list in recheck_eisen.py, the partition in recheck_partition.py, components and holes in recheck_holes.py, the face recurrence in recheck_surface.py, total exposure in recheck_expose.py, corners in recheck_vertex.py, and the complement polynomials in recheck_dual3d.py — alongside earlier builds of the same objects (slice.py, lemma.py, duality.py, surface.py and their companions) that share no code with them. The directory's RUN.txt records every command, every comparison, and the statements that did not survive. Sequences that come out of this construction are held to the standard in the sequence ledger; the lab index is lab.