README.md

7.8 kB · markdown

radix-census

  • Classifies every twisted radix design at the seven bases of the radix dial, 2, 1+i, 2+i in Z[i] and 2, 1+w, 3, 2+w in Z[w], as having unit steps, being a curve, being one piece and being plane-filling, each decided at every level and not at a cut level.
  • Every element prints with w = e^(i pi/3), the toolpath note's letter, so the radix dial's 2+omega and 3+omega print as 1+w and 2+w; a twist vector prints as the exponents of w or i, 0150 for 1, w, w^5, 1.
  • Objects: a design is a base b, digits d_0, ..., d_(k-1), a unit twist u_a per digit and place maps phi_a(x) = (u_a x + d_a)/b; its level-L points are the scaled words of mrlyrs::num::radix::Radix::words, first digit slowest, in exact ring arithmetic. A pair is a code over the canonical residues of Base::residues, read in canonical order, with a twist vector.
  • Unit steps: consecutive points differ by a unit. Curve: unit steps and no two words on one point. One piece: the level set connected under unit adjacency. Plane-filling: k = N(b) and no two words of one length with one place map, which is positive area. Distinct: k = N(b) and no two words on one point.
  • The step law decides unit steps from level-1 data: consecutive words that first differ at digits a, a+1 with l levels to go step by a unit times J_a(l) = A_a b^(l-1) - u_(a+1) z_0 u_0^(l-1) + u_a z_e u_(k-1)^(l-1), with z_0, z_e the fixed points of the first and last maps and A_a = b (phi_(a+1)(z_0) - phi_a(z_e)); unit steps at every level hold exactly when every A_a = 0 and J_a(l) is a unit for l up to the number of units. Then, unless every map fixes one point, the twists sum to the base and the design is conjugate, map for map, to the walk of its twists, whose word order it shares up to a translate at each level exactly when d_0 = 0 or the twists are all equal; the sum is asserted on every canonical pair with unit steps.
  • The difference automaton decides the rest: the state is the difference delta of two words over the turn of the first and the relative turn r; appending digits e, e' sends delta -> (b delta + d_e - r d_(e'))/u_e, r -> r u_(e')/u_e; states with abs(delta) >= 2M/(abs(b) - 1) and abs(delta) > 1 never return and are pruned. Breadth-first search to delta = 0 gives the first level with two words on one point, to delta = 0, r = 1 the first shared place map; the states that reach abs(delta) <= 1 in exactly n steps, iterated until they cycle, give the copy graph of every level and so one piece at every level.
  • census: every canonical pair with k >= 2 at each base, per k and in total: pairs, orbits under the stabiliser of the canonical residues, unit steps, curves, one piece, plane-filling and distinct, the set properties counted on orbit representatives and weighted by orbit size; the deepest level at which a pair outside the step law keeps unit steps, the deepest first split and the deepest first shared map, each with its witness; every pair with unit steps, with its first level of two words on one point; the stabiliser, the orbit count of the radix dial's code action for contrast, and at the five bases of norm at most 5 a pair that code action moves out of its class.
  • The stabiliser is the unit maps x -> v x and, where conj(b) = eps b, the mirror maps x -> v conj(x), that fix the canonical residues; a unit carries the twist with its digit unchanged and a mirror sends a twist u to eps^(-1) conj(u). Orbits are counted twice, by choosing the least key in each orbit and by Burnside over the stabiliser, and must agree; the pair count must be sum_(k>=2) binom(q, k) n^k.
  • curves: every walk of k unit steps from 0 to the base for k = 2 to N(b), the designs with unit steps up to similarity; per k the walks, the radix walks with pairwise incongruent partial sums, the arcs whose k^L + 1 vertices, end included, are distinct at every level, their classes up to reversal and mirror, the plane-filling radix walks, the plane-filling arcs, the radix walks a turn makes canonical, and the deepest first revisit with its witness; then every arc class.
  • junction: the step law and the automaton against brute force over the words of each level, for every canonical pair at the five small bases, every 13451st pair at 3 and every 274th at 2+w with every pair that has unit steps, and every radix walk: per level up to k^L <= 4096, unit steps, one piece, two words on one point, a shared place map and, for walks, the arc; it also checks Radix::words against the lab's own word list at level 3 and the stabiliser images at level 3 up to a unit, asserts zero misses, and prints the deep witnesses level by level, among them the design at 2+i with digits i, 1+i, 1+2i and twists 1, i, -1, which has unit steps at every level while its twists sum to i, every map fixing (1+i)/2, the pair at 1+w with digits 1, w and twists 1, w, which meets the junction identity and has a step of norm 3 at level 2, and the design at 1+w with digits -1, 0, 1 and twists 1, w^2, 1, decided by the automaton at every level and by brute force to level 8: unit steps, no shared map, no split, no two words on one point.
  • named: the designs koch, terdragon, twindragon and flowsnake of mrlyrs::num::radix located in the census, with an assertion for each of the four that it equals the entry it names, the walk 0150, the pair code 7 twisted 020, code 3 untwisted at 1+i and code 127 untwisted at 2+w; the Gosper copies that are turns of the generator and the units that carry Hilbert's level 1 to the first quarter of its level 2; and the walks of the Hilbert and flowsnake generators with every flag F.
  • Domain: every code with k >= 2 among the 16, 4, 32, 16, 8, 512, 128 codes of the seven bases, with every twist, for census, 40353552 pairs at 3; all walks of 2 to N(b) steps for curves, 116214 of nine steps at 3.

RUN

bash scripts/cargo.sh cargo run --release -p radix-census -- census curves junction named
  • Run from mrlyprod/. Verbs may be given in any combination and run in order in one process; no argument runs census.
  • Measured on all cores, wall clock: census 26 s, nearly all of it at base 3; curves 1.6 s; junction 15 s; named under 0.01 s; all four in one process 43 s.

WITNESSES

  • toolpaths, The radix census, The step law - unit steps at every level are the identity phi_a(z_e) = phi_(a+1)(z_0) plus a periodic check that the identity does not imply, the twists then sum to the base unless the attractor is one point, and at the seven bases a pair outside the law keeps unit steps through level 3 at most, the witness 1+i, digits 0, 1, twists 1, -1: census, junction.
  • toolpaths, The radix census, Glue and area - the automaton decides glue, shared maps and one piece at every level; no fixed depth decides them: first revisit at level 5 for the walk 1, w at 1+w, first shared map at level 7 at 2 on Z[w], first split at level 13 at 3: census, junction.
  • toolpaths, The radix census, The census - the per-base table, the stabiliser orders 2, 2, 4, 2, 2, 2, 6, the cut 40353552 to 20181403, and the code action moving the untwisted digits 1, w at 2 on Z[w] from one piece to apart: census.
  • toolpaths, The radix census, The walks - no walk of order N(b) is an arc at the seven chords, the deepest first revisit at level 4, and the arcs below dimension 2: curves; the plane-filling curve at 1+w with digits -1, 0, 1 and twists 1, w^2, 1: junction.
  • toolpaths, The radix census, The named curves - Koch, the terdragon, the twindragon and the flowsnake located, Hilbert and Gosper outside the word orders: named.