# On Lindenmayer Systems

Yesterday I learned about Lindenmayer Systems (**L-System**) through Gil Durão talk at Flutter Talk Porto 2023. It’s a formal specification of a grammar primarly used to model bacteria, algae, plants and tree growth, as originally proposed by Aristid Lindenmayer.

At its core there are three components:

- An
**alphabet**, which is a list of symbols that can be combined to create strings (e.g.,`ABC`

,`+-*/`

), denoted as`V`

. - An
**axiom**, which defines the starting point of the L-System (e.g.,`BC`

), denoted as`ω`

. - A set of
**production rules**, which determine how each symbol of the alphabet is transformed into other symbols (e.g.,`A -> AB, B -> AC, C -> CB`

), denoted as`P`

.

`G=⟨V,ω,P⟩`

The goal behind these systems is to specify **finite** or **infinite** strings, which are constructed iteratively by applying the production rules to the symbols from the previous iteration. Using the example above:

`BC`

(Axiom - Iteration 0)`ACCB`

(Iteration 1)`ABCBCBAC`

(Iteration 2)- …

Production rules specify the class/type of L-Systems, with the simplest one being `D0L-system`

(deterministic and context-free L-System), which are represented by functions that take symbols as input and deterministically map them to other symbols as output. You can learn more about different classes on this article.

## Okay, but what exactly can we use L-Systems for?

While many people use them to generate fractals (because fractals are cool), you can also use L-Systems to leverage your **procedural generation game**:

- Video-game Maps and Entities (objects)
- Road Networks
- Music
~~Maybe even creating pixel art as part of your NFT project?~~Art

Gil prepared a demo of using L-Systems to generate fractals with Flutter. You can check it out here. Also, his presentation is free, so be sure to grab it!