Skip to main content

Module aniso

Module aniso 

Source
Expand description

Anisohedral periodicity: the monotile tiles by a multi-tile cluster.

A k-anisohedral tiling uses k symmetry-inequivalent copies of the SAME tile per fundamental domain. Equivalently: glue k copies into a connected cluster (still the one shape, rotations only) and that cluster tiles the plane as a composite. So we enumerate k-tile clusters by edge-gluing (reusing BasicPatch), dedup by lex-min-rotation boundary (rotation-only, no reflection – single chirality), and test each cluster’s boundary with the Conway check, then verify by minting a certificate. Acceptance is sound only through that cert: mint gates it on PeriodicCert::verify, which re-checks exact surroundedness at one tile PER TRANSLATION CLASS (all_exactly_surrounded) plus exact multiplicity gates – necessary because a k-cluster tiling has k>1 translation classes, so the center-only verify_tiling pre-filter is not sufficient here. A verified cert proves the monotile tiles periodically.

Structs§

ClusterWitness
A found anisohedral witness: k copies of the base tile glue into a connected cluster – build is the assembly recipe (for the cert’s meta-tile) and tiling the cluster’s own verified periodic tiling (in the canonical-rotation frame of the cluster boundary, which is tiling.seq), proving the base tiles anisohedrally.

Functions§

tiles_anisohedral_restart
Seeded restarts over the anisohedral search: try seeds 1..=restarts, each a fresh search bounded by per_budget clusters, returning the first witness. The search is strongly HEAVY-TAILED – a tiling cluster’s position in the exploration order varies wildly with the seed (measured 2k..26k for one n=11 tile), so a good cluster almost always surfaces early under SOME seed. A handful of small-budget restarts therefore certifies a hard tile far faster, and bounded (restarts * per_budget), than one large deterministic pass – and it is reproducible (fixed seed sequence). restarts <= 1 is the plain deterministic search (seed 0), so it changes nothing unless opted in.
tiles_anisohedral_seeded
The anisohedral search with an explicit exploration-order seed (0 = the original deterministic order). A nonzero seed shuffles which frontier clusters are extended first, in which match order, and thus which survive the per-level cluster_cap truncation – see tiles_anisohedral_restart. cluster_cap bounds the breadth kept per cluster size; budget is a DETERMINISTIC ceiling on distinct clusters tested (0 = unlimited) – the same budget gives the same verdict every run, and exhausting any bound returns None (undecided), never a false accept.