I know this is old stuff, but I've been playing with what happens when you use an L-system to generate a binary sequence and then interpret that sequence as the directions for making left and right turns in a path through a grid. That is, we start with a simple seed string, such as "0", and strings \( x_0 \) and \( x_1, \) generate longer strings by simultaneously replacing every 0 in the shorter string by \( x_0 \) and every one by \( x_1, \) and use the expanded string to generate a sequence of turns.

These strings can generate several different types of shape:

  • Often (especially when the numbers of 0 and 1 digits in \( x_0 \) or \( x_1 \) differ by more than one from each other) the resulting path curls up on itself to fill a small region of the plane.

  • The Thue–Morse sequence generated by the expansions 0 → 01 and 1 → 10 produces a path that mostly follows a straight line, but with little bumps up and down. The pattern of the little bumps is itself a Thue–Morse sequence, reduced by a factor of four: each bump comes from four bits in the binary sequence.

    Thue–Morse turn sequence fractal, 8-level expansion

    Similar straight patterns tend to be generated when both \( x_0 \) and \( x_1 \) both have equal numbers of 0's and 1's.

  • It's possible that the expansion generates a simple curve. An easily-checked necessary (but not sufficient!) condition for this is that no concatenation of \( x_0 \) and \( x_1 \) should have more than two consecutive equal digits. The example below is generated by the expansions 0 → 010 and 1 → 011:

    Turn sequence fractal 010-011, 9-level expansion

  • It may be the case that the finite strings generated at each stage of expansion generate simple curves but that the fractal limit of the curves is no longer simple, as in the two examples below generated by the expansions 0 → 001, 1 → 0011011 and 0 → 1001001, 1 → 0110110 respectively.

    Turn sequence fractal 001-0011011, 6-level expansion

    Turn sequence fractal 1001001-0110110, 5-level expansion

  • It's also possible, but rarer, to have self-intersections in the finite expansions that go away in the limit, leaving a simple curve. Here's one generated by the expansions 0 → 1 and 1 → 00110.

    Turn sequence fractal 1-00110, 9-level expansion

  • Strings whose expansions have three (but not four) consecutive equal digits may lead to curves that repeatedly touch themselves at vertices but do not cross themselves. The fractal tree pattern filling the triangle below is an example; it has the expansion rules 0 → 01100 and 1 → 011.

    Turn sequence fractal 01100-011, 6-level expansion

  • Similarly, the paperfolding sequence is generated by an expansion rule of a more complicated type, 11 → 1101, 01 → 1001, 10 → 1100, and 00 → 1000. As is well known, it generates the dragon curve, which completely fills a region of the plane with a fractal boundary.

    12-level dragon curve, generated as a turn sequence fractal from the paperfolding sequence

  • And then, of course, there are plenty more that neither curl up on themselves nor make nice curves, instead producing some kind of self-intersecting fractal mess.

    Turn sequence fractal 1101100-0, 6-level expansion

    Turn sequence fractal 01001-11010, 6-level expansion

It makes me wonder how easy it is to predict from \( x_0 \) and \( x_1 \) what the behavior of the curve you get from them will be. In these examples, it seems one can get a clear idea of the behavior of the curve by making only a constant number of expansions. Is that true in general? Or does the number of expansions that are needed to detect a self-intersection at least grow slowly as a function of the lengths of \( x_0 \) and \( x_1 \)? And is it possible for a curve formed in this way to avoid any self-intersection and still fill a full-dimensional region of the plane?