# Sistema-L

Un sistema-L o un sistema de Lindenmayer es una gramática formal (un conjunto de reglas y símbolos) principalmente utilizados para modelar el proceso de crecimiento de las plantas; puede modelar también la morfología de una variedad de organismos. Los sistemas-L también pueden utilizarse para generar fractales autosimilares como los sistemas de función iterada. Los sistemas-L fueron introducidos y desarrollados en 1968 por el biólogo y botánico teórico húngaro Aristid Lindenmayer de la Universidad de Utrecht (1925-1989).

## Orígenes

Como biólogo, Lindenmayer trabajó con levadura y filamentous fungi y estudió los patrones de crecimiento de varios tipos de algas tales como la bacteria azul-verdosa Anabaena catenula. Originalmente los sistemas-L fueron diseñados para proveer una descripción formal del desarrollo de organismos multicelulares e ilustrar la relación de vecindad entre células de plantas. Más adelante, el sistema fue extendido para describir patrones de crecimiento de plantas más complejas.

## Estructura de un sistema-L

La naturaleza recursiva de las reglas de los sistemas-L conduce a la autosemejanza y por tanto facilita la descripción de formas tipo fractales. Los modelos de plantas y formas orgánicas de aspecto natural son fáciles de definir: al incrementarse el nivel de recursión la forma crece lentamente y se vuelve más compleja. Los sistemas de Lindenmayer también son populares en la generación de vida artificial.
Las gramáticas de los sistemas-L son muy similares a las gramática semi-Thue (véase la Jerarquía de Chomsky). Los sistemas-L son también conocidos con el nombre de sistemas L paramétricos, definidos como un conjunto
    G = {V, S, ω, P},
donde
* V (el alfabeto) es un conjunto de símbolos que contiene elementos que pueden ser remplazados (variables)
* S es un conjunto de símbolos que contiene elementos que se mantiene fijos (constantes)
* ω es una cadena de símbolos de V que definen el estado inicial del sistema (inicio o axioma)
* P es un conjunto de reglas o producciones que definen la forma en la que las variables pueden ser remplazadas por combinaciones de constantes y otras variables. Una producción está formada por dos cadenas — el predecesor y el sucesor.
Las reglas gramaticales de los sistemas-L se aplican iterativamente a partir de un estado inicial.
Un sistema-L es libre de contexto si cada producción se refiere sólo a un símbolo individual y no a sus vecinos. Cuando la aplicación de una regla depende también de sus vecinos, se dice que el sistema-L es sensitivo al contexto.
El sistema es determinista si existe exactamente una producción para cada símbolo. Un sistema-L determinista y libre de contexto es generalmente denominado un sistema-L0D. Cuando hay varias producciones y cada una de ellas es escogida con una probabilidad determinada entonces es un sistema-L estocástico.
Para utilizar los sistemas-L para generar imágenes se requiere que los símbolos en el modelo hagan referencia a elementos de un dibujo. Por ejemplo, el programa FractInt (véase el enlace externo más abajo) utiliza operaciones de dibujo al estilo del lenguaje Logo para producir dibujos interpretando cada constante en el sistema-L como una operación de dibujo.

## Ejemplos de sistemas-L
### Ejemplo 1: Algas

El sistema-L de Lindenmayer para modelar el crecimiento de algas.
    variables : A B
    constantes : ninguna
    inicio : A
    reglas : (A → AB), (B → A)
el cual produce:
    n=0 : A
    n=1 : A → AB
    n=2 : AB → ABA
    n=3 : ABA → ABAAB
    n=4 : ABAAB → ABAABABA

### Ejemplo 2: Números de Fibonacci

Se definen con la siguiente gramática sencilla:
    variables : A B
    constantes : ninguna
    inicio : A
    reglas : (A → B), (B → AB)
el cual produce la siguiente secuencia de cadenas:
    n=0 : A
    n=1 : B
    n=2 : AB
    n=3 : BAB
    n=4 : ABBAB
    n=5 : BABABBAB
    n=6 : ABBABBABABBAB
    n=7 : BABABBABABBABBABABBAB
Cuando se mide la longitud de cada cadena, se obtiene la famosa secuencia de los números de Fibonacci:
    1 1 2 3 5 8 13 21 34 55 89 ...
Este ejemplo produce el mismo resultado (en términos de la longitud, no de la secuencia de letras en la cadena) cuando la regla (B → AB) se remplaza por (B → BA).

### Ejemplo 3: Polvo de Cantor

    variables : A B
    constantes : ninguna
    inicio : A {cadena de inicio}
    reglas : (A → ABA), (B → BBB)
Si se interpreta A como "dibujar hacia adelante" y B como "desplazar hacia adelante", este sistema produce el famoso conjunto fractal de Cantor sobre una línea recta.

### Ejemplo 4: Curva de Koch

Una variante de la curva de Koch que utiliza sólo ángulos rectos.
    variables : F
    constantes : + −
    inicio : F
    reglas : (F → F+F−F−F+F)
Aquí, F significa "dibujar hacia adelante", + significa "vuelta de 90° hacia la izquierda", y - significa "vuelta de 90° hacia la derecha".
    n=0:
    n=1:
    n=2:
    n=3:

### Ejemplo 5: Teselación de Penrose

Se pueden generar figuras estilo mosaico de Penrose interpretando un sistema-L, inventadas por Roger Penrose.

## Problemas abiertos

Hay muchos problemas abiertos relacionados con los sistemas-L, por ejemplo:
* La caracterización de todos los sistemas-L deterministas y libres de contexto que son concatenables localmente. (Sólo se conoce una solución en el caso donde hay dos variables).