GCTS I / cyclotomic tiling laboratory

Penrose tiling

Choose Penrose tiles in ℤ[ζ₅]. Explore local edge rules and extended Ammann markings.

Prototiles & window reference ↗Learn point markings ↗
Explicit Penrose edge-arrow matchinginitializing

One thick-rhomb seed

0tiles placed
0largest patch
0proposals
0backtracks
0edge-arrow prunes
0.00 sworker compute

No proposals yet

Tiles, matching, and search

The base tiler maintains a bipartite graph of every unfinished vertex and every legal candidate placement incident there. Candidates are shared between points. Adding a tile updates affected candidates and incidences; rollback restores the graph. A point with no candidates kills the branch immediately. One-candidate points force their tile, anywhere on the frontier. Only after forced moves are exhausted does the solver branch at a minimum-degree point, with generation and distance breaking ties. Markings filter candidates on top of this base; RL is not used in this demo.

The three classical sets are P1 (three decorated pentagons, diamond, boat, star), P2 (kite and dart), and P3 (thick and thin rhombs). Each tile carries a fixed marking template. Selecting a tile permits it; it does not require it to occur. Rotations and reflections are explored. Changing the selection starts a new search.

P1 and P2 markings were transferred from a consistently marked P3 patch using the published local hexagon–boat–star construction. All vertices remain in ℤ[ζ₅]. We retain the shared construction scale: P3 edges have length 1, P2 edges 1 and φ, and P1 edges √(7 − 4φ). Partial edge contacts are excluded, so P1 cannot share a whole edge with P2/P3 at that scale. P1 can be explored on its own; mixed P2/P3 placements can be attempted. Mixing carries no guarantee of a Penrose tiling or an infinite extension.

For P1, P2, or a custom selection, unmarked mode explicitly compares the complete colored edge ports (position and direction). Marked mode learns point/value constraints from the precise bars, without invoking the edge-port predicate. The standard two-rhomb preset uses the independent single/double-arrow predicate on the same point–candidate graph. The colored dots in edge view show the transferred edge decorations.

Run pauses at frontier corona 3, then continues the same search to 5, 7, and onward. As in the turtle demo, a tile’s generation is one plus the earliest generation incident at its vertices (the seed is 0); the displayed corona is the minimum generation at an unfinished point with 0 < t < 1. Branch ordering is reproducible and continues unchanged between milestones. Internal safety limits prevent unbounded runs.

Marked search starts with empty point tables. Existing points reject familiar conflicts. Unresolved pairs are checked against the precise bars and their verdicts cached. At each chosen frontier, the learner takes at most one rejection that existing points cannot explain and adds its shared witness point to the two prototiles, with conflicting values 1 and 0. The learner prefers witnesses needing the fewest new entries and includes the decorated tile’s symmetry copies. Both compatible and incompatible relative placements are cached. Learning survives backtracking and Continue; Reset, a new tile selection, or a changed enforced extent starts a new learner.

In marked mode, dots show the actual learned support, including interior zeros and points on extensions. Hover reports its exact coordinates and partial values. Red dots identify conflicts with current candidates. Unmarked mode retains the geometric contact illustration. “Integer points” only filters the drawing. There is no evenly spaced sampling or precomputed union of point sets across extent settings.

The bar teacher remains active for unresolved pairs. This is incremental learning with exact verification, not a claim that the learned points alone classify every future placement. Every legal graph candidate has passed that teacher, so new sound lessons cannot invalidate an existing legal candidate, including one restored by backtracking. The graph uses a fixed bounding region covering all possible bar witnesses.

Extent adds the selected multiple of each stripe’s original length at both ends. Dashed lines show extensions. At zero, the teacher uses the unextended bars. In Ammann mode, changing extent restarts the search. In edge-arrow mode it changes only the drawing.

For each direction, learned bar points carry m = 1, learned exclusion points carry m = 0, and unassigned components are undefined. The bar teacher requires extensions to agree with neighboring bars, including contacts without a shared edge. Different directions are separate components. The inspector uses — for undefined components. The t-value remains the summed corner weights divided by ten; stripe and extension endpoints outside vertex support have t = 0.

With “Enforce Ammann bars” off, the search explicitly checks the Penrose edge arrows: single/double arrow type and direction must agree along each shared edge. With it on, the search checks only the complete Ammann markings, without calling the edge-arrow predicate. Matching bars enforce the same local edge compatibility.

“Show edge arrows” / “Show Ammann bars,” direction highlighting, colors and line weight change only the drawing. All five Ammann directions are always enforced in bar mode, including gray directions. The 1- and 3-direction options highlight those families in the fixed cyclotomic frame; they do not weaken the rule.

All searches check exact polygon non-overlap and corner capacity, with genuine backtracking and no window oracle. Every unfinished vertex is a frontier obligation, including inside pockets; the frontier is not restricted to a single outer boundary. The same base algorithm runs with either matching predicate. Positive extent adds overlap constraints that can prune earlier; geometric checking costs may offset the reduction in proposals. A finite patch or a budget stop does not establish infinite extendibility.

The thick and thin rhombs each carry a fixed arrow template and a complete fixed five-stripe template. Each candidate is a fixed rigid decorated placement. Its orientation changes only by undoing that placement and choosing another candidate. Neither mode accepts arbitrary unmarked rhomb tilings.