Requisito previo: introducción a los autómatas finitos
Todos los lenguajes de programación se pueden representar como autómatas finitos. C, Paskal, Haskell, C++, todos tienen una estructura específica, gramática, que se puede representar mediante un gráfico simple. La mayoría de los gráficos son NFA o DFA. Pero NFA y DFA determinan el grupo de idiomas más simple posible: grupo de idiomas regulares [ jerarquía de Chomsky ]. Esto nos deja con una pregunta: ¿qué pasa con todos los demás tipos de lenguajes? Una de las respuestas es la máquina de Turing , pero una máquina de Turing es difícil de visualizar. Es por eso que en este artículo te hablaré de un tipo de autómata finito llamado L-grafo.
Para entender cómo funcionan los L-graphs necesitamos saber qué tipo de lenguajes determinan los L-graphs. En pocas palabras, los gráficos L representan tipos de lenguajes sensibles al contexto [y cualquier otro tipo que contenga el grupo sensible al contexto]. Si no sabe lo que significa «sensible al contexto», permítame mostrarle un ejemplo de un lenguaje que se puede representar mediante un gráfico en L y no mediante un tipo más sencillo de autómatas finitos.
Este lenguaje es . El gráfico L correspondiente se ve así:
Como puede ver los corchetes después del símbolo ‘|’ controlar el número de símbolos que vienen después de los símbolos ‘a’. Esto nos lleva a las dos características que poseen todos los gráficos L: todos los gráficos L tienen hasta dos grupos de paréntesis independientes entre sí y de los símbolos de entrada, ambos grupos de paréntesis tienen que ser correctos [string de un lenguaje Dyck] para que la string de símbolos de entrada que aceptará el L-graph dado.
Puede ver que un L-graph es solo una versión de autómatas finitos con un par de grupos de corchetes adicionales. Para ayudarlo a comprender por qué los idiomas determinados por los gráficos L son sensibles al contexto, verifique qué strings debe aceptar el gráfico L que se muestra arriba.
Para concluir, me gustaría agregar otras tres definiciones que usaré en el futuro. Estas definiciones son muy importantes para la hipótesis [y su futura prueba o refutación]. Referir – Hipótesis (regularidad del lenguaje) y algoritmo (L-graph a NFA)
Llamaremos neutral a un camino en el L-graph, si ambas strings de paréntesis son correctas. Si un camino neutral T se puede representar así, T = , donde
y
son ciclos y
es un camino neutral (
,
o
puede estar vacío), T se llama nido. También podemos decir que el tres (
,
,
) es un nido o que
y
forman un nido en el camino T.
( , d)-núcleo en un L-grafo G, definido como Core(G,
, d), es un conjunto de (
, d)-cánones. (
, d)-canon, donde
y d son números enteros positivos, es un camino que contiene como máximo m,
, ciclos neutros y como máximo k, k
d, nidos que se pueden representar de esta manera:
es parte del camino T,
, i = 1 o 3,
, son ciclos, cada camino
es un nido, donde
=
,
.
La última definición se trata de un gráfico L libre de contexto. Un L-grafo G se llama libre de contexto si G tiene solo un grupo de corchetes (todas las reglas en el L-grafo tienen solo un aspecto de estos dos: [‘símbolo’ | ‘corchete’, ?] o [‘símbolo’ | ? , ‘soporte’]).
[Definición de una lengua de Dyck. y
son alfabetos disjuntos. Existe una biyección (función que para cada elemento del 1er conjunto coincide con uno y solo un elemento del 2do conjunto)
. Entonces el lenguaje definido por la gramática
,
lo llamaremos lenguaje de Dyck.]