A dart thrown into the dark abstract landed on the machine a biologist built in 1968 to grow plants out of pure symbols: start from an axiom, replace every letter at once by a rule, and read the final string as turtle moves. We show the technique live, credit who actually made it, and ask what I-13 should learn from a language whose whole job is rewriting strings. Three prongs, one dart.
THE TECHNIQUE axiom · parallel rewrite · turtle
An L-system is parallel string rewriting. Every symbol is replaced simultaneously each generation by its rule; the string explodes; a turtle then walks it — F draw forward, +/− turn, [/] push/pop a branch. Move the slider to grow it. live demo
turtle render · TRON canvas
HISTORY & CREDIT credit where it is due
L-systems get filed under “fractals” and vaguely credited to graphics people. They were not born in graphics at all — they were born in developmental biology, as a model of how cells divide. cited
1968 · Aristid Lindenmayer (1925–1989), a Hungarian theoretical biologist & botanist at Utrecht University — invents the L-system to model cellular development, in “Mathematical models for cellular interactions in development, I & II,” Journal of Theoretical Biology. No turtle yet: the strings modelled dividing filaments of cells. ~1967 · Seymour Papert (MIT) — turtle graphics (in Logo), the drawing metaphor that L-systems would later borrow. 1984–86 · Alvy Ray Smith and then Przemysław Prusinkiewicz — connect the turtle to the string, giving L-systems their graphical interpretation; Prusinkiewicz adds bracketed [ ] systems for branching plants. 1990 · Prusinkiewicz & Lindenmayer — The Algorithmic Beauty of Plants, the canonical text (free online).
Attribution is not disputed: Lindenmayer is the sole, undisputed inventor of the rewriting system. What is worth saying plainly — and often flattened online — is that the string-rewriting model (Lindenmayer, biology) and the turtle interpretation (Papert → Prusinkiewicz, graphics) are two different inventions bolted together. The pretty plant is the composite. the two halves are separately credited
RECOMMEND FOR I-13 what the galaxy should learn
An L-system is a string: an axiom of symbols, expanded by rules, walked as a sequence. That is the one shape I-13 has no room for — no string type, no array to hold the growing word. I asked the real compiler. It cannot even lex the axiom:
$ i13 check axiom.i13 // I s <- "F"
axiom.i13:1:8 E0001 unexpected character `"` (no string literal)
$ i13 check seq.i13 // I c <- seq[0]
seq.i13:2:11 E0001 unexpected character `[` (no array / index)
seq.i13:2:13 E0001 unexpected character `]`
But here is the honest parallel. L-system rewriting is exactly what a compiler already does: I-13 lowers source → AST → IVM-13 — rule-driven symbol expansion. So the concept is native; only the runtime string value is walled. To prove it isn’t a total wall, I had I-13 compute the very thing the Koch rewrite produces — the segment count 5gen — recursively, in pure f64:
Recommend — ADD: a string / sequence type (an ordered run of symbols, with concat and index). That single addition turns I-13 from a calculator of the rewrite’s count into a machine that can hold the rewrite’s word — and an L-system is then ~10 lines. Because the alphabet is counted, this is a genuine cost: strings are the largest thing the Python census excluded, and admitting them re-opens the “is the alphabet general or Python-shaped” question (brief §10.3). Credit the language already owns the idea: don’t sell this as importing something foreign. Rule-driven symbol expansion is I-13’s own lowering pipeline; a sequence type just lets a program do at runtime what the compiler does at build time. Cheapest honest framing: one new value kind, zero new alphabet verbs (a sequence is data, not a 13th verb) — the counted-13 identity survives, the f64-only Constant does not.