Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Automata PDF
Automata PDF
Serafn Moral
Departamento de Ciencias de la Computacin e I.A.
ETSI Informtica
Universidad de Granada
2 Modelos de Computacin I
ndice general
1. Introduccin 5
1.1. Introduccin Histrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2. Diferentes Modelos de Computacin . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.1. Autmatas y Lenguajes . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.3. Lenguajes y Gramticas. Aspectos de su traduccin . . . . . . . . . . . . . . . 17
1.3.1. Alfabetos y Palabras . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.3.2. Lenguajes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.3.3. Gramticas Generativas . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.3.4. Jerarqua de Chomsky . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3
4 Modelos de Computacin I
Introduccin
5
6 Modelos de Computacin I
Hoy en da parece que no existe ningn lmite a lo que un ordenador puede llegar a hacer, y
da la impresin de que cada vez se pueden resolver nuevos y ms difciles problemas.
Casi desde que aparece sobre La Tierra, el hombre ha tratado de buscar procedimientos y m-
quinas que le facilitasen la realizacin de clculos (aritmticos primero, y otros ms complejos
posteriormente).
El avance tecnolgico para representar datos y/o informacin por un lado, y el diseo de
nuevas formas de manejarlos, propicia el desarrollo de dispositivos y mquinas de calcular.
Un aspecto importante en el desarrollo de los ordenadores, es sin duda, su aplicacin para
resolver problemas cientficos y empresariales. Esta aplicacin hubiese resultado muy difcil sin
la utilizacin de procedimientos que permiten resolver estos problemas mediante una sucesin
de pasos claros, concretos y sencillos, es decir algortmos. El avance de las matemticas permite
la utilizacin de nuevas metodologas para la representacin y manejo de la informacin.
Por otro lado, aparece el intento de los matemticos y cientficos para obtener un procedi-
miento general para poder resolver cualquier problema (matemtico) claramente formulado. Es
lo que podramos llamar El problema de la computacin terica. El avance de la tecnolo-
ga y de las matemticas, y ms en concreto de la teora de conjuntos y de la lgica, permiten
plantearse aspectos de la computacin en 3 caminos.
a) Computacin terica. Autmatas, Funciones Recursivas, ...
b) Ordenadores digitales. Nuevas tecnologas, nuevos lenguajes, ....
c) Intentos de modelizar el cerebro biolgico
1. Redes Neuronales (intentan modelizar el "procesador")
2. Conjuntos y Lgica Difusa (representar y manejar la informacin)
En este texto veremos aspectos relativos a a) y c.1).
Considermos el problema general, bajo un planteamiento de Programacin.
Desde un punto de vista global, un programa (traducido a lenguaje mquina) se puede ver
como una sucesin de ceros y unos, cuya ejecucin produce una salida, que es otra serie de
ceros y unos. Si aadimos un 1 al inicio de cada cadena binaria (programa y salida), podemos
entender los programas como aplicaciones concretas de una funcin entre nmeros naturales en
binario. El argumento (variable independiente) sera el programa y la funcin (var. dependiente)
la salida del programa.
Obviamente, el nmero de funciones posibles de N en N es nonumerable, mientras que el
nmero de posibles programas que podemos escribir con un Lenguaje de Programacin, que
tiene un nmero finito de smbolos, es numerable.
Esto significa (cada programa puede calcular una sola funcin como las indicadas antes) que
existen muchas funciones para las que no podemos escribir un programa en nuestro L. de Alto
Nivel, aunque seguramente estamos interesados en resolver el problema asociado a la funcin.
Cap. 1 Introduccin 7
El primer paso en la bsqueda de las respuestas a estas preguntas est en el estudio de los
modelos de computacin.
Los comienzos de la Teora. La Tesis de Church-Turing
Los modelos abstractos de computacin tienen su origen en los aos 30, bastante antes de
que existieran los ordenadores modernos, en el trabajo de los lgicos Church, Gdel, Kleene,
Post, y Turing. Estos primeros trabajos han tenido una profunda influencia no solo en el des-
arrollo terico de las C.C., sino que muchos aspectos de la prctica de la computacin que son
ahora lugar comn de los informticos, fueron presagiados por ellos; incluyendo la existencia
de ordenadores de propsito general, la posibilidad de interpretar programas, la dualidad entre
software y hardware, y la representacin de lenguajes por estructuras formales basados en reglas
de produccin.
El punto de partida de estos primeros trabajos fueron las cuestiones fundamentales que D.
Hilbert formul en 1928, durante el transcurso de un congreso internacional:
1.- Son completas las matemticas, en el sentido de que pueda probarse o no cada aseveracin
matemtica?
2.- Son las matemticas consistentes, en el sentido de que no pueda probarse simultaneamente
una aseveracin y su negacin ?
3.- Son las matemticas decidibles, en el sentido de que exista un mtodo definido que se pueda
aplicar a cualquier aseveracin matemtica, y que determine si dicha aseveracin es cierta?.
La meta de Hilbert era crear un sistema matemtico formal ompleto onsistente", en el que
2
todas las aseveraciones pudieran plantearse con precisin. Su idea era encontrar un algoritmo que
determinara la verdad o falsedad de cualquier proposicin en el sistema formal. A este problema
le llam el Entscheidungsproblem.
Por desgracia para Hilbert, en la dcada de 1930 se produjeron una serie de investigaciones
que mostraron que esto no era posible. Las primeras noticias en contra surgen en 1931 con K.
Gdel y su Teorema de Incompletitud: "Todo sistema de primer orden consistente que contenga
los teoremas de la aritmtica y cuyo conjunto de (nmeros de Gdel de) axiomas sea recursivo
no es completo."
Como consecuencia no ser posible encontrar el sistema formal deseado por Hilbert en el
marco de la lgica de primer orden, a no ser que se tome un conjunto no recursivo de axiomas,
hecho que escapaba a la mente de los matemticos. Una versin posterior y ms general del
teorema de Gdel elimina la posibilidad de considerar sistemas deductivos ms potentes que los
sistemas de primer orden, demostrando que no pueden ser consistentes y completos a la vez.
Un aspecto a destacar dentro del teorema de incompletitud de Gdel, fu la idea de codifi-
cacin. Se indica un mtodo (numeracin de Gdel) mediante el cual se asigna un nmero de
cdigo (entero positivo) a cada frmula bien formada del sistema (fbf) y a cada sucesin finita
de frmulas bien formadas, de tal modo que la fbf o sucesin finita de fbf se recupera fcilmente
a partir de su nmero de cdigo. A travs de este cdigo, los enunciados referentes a enteros po-
sitivos, pueden considerarse como enunciados referentes a nmeros de cdigo de expresiones, o
Cap. 1 Introduccin 9
incluso referentes a las propias expresiones. Esta misma idea fu posteriormente utilizada para
codificar algoritmos como enteros positivos, y as poder considerar un algoritmo, cuyas entradas
fuesen enteros positivos, como un algoritmo cuyas entradas fuesen algoritmos.
El siguiente paso importante lo constituye la aparicin casi simultanea en 1936 de varias ca-
racterizaciones independientes de la nocin de calculabilidad efectiva, en los trabajos de Church,
Kleene, Turing y Post. Los tres primeros mostraban problemas que eran efectivamente indecidi-
bles; Church y Turing probaron adems que el Entscheidungsproblem era un problema indeci-
dible.
Church propuso la nocin de funcin -definible como funcin efectivamente calculable. La
demostracin de teoremas se convierte en una transformacin de una cadena de smbolos en otra,
en clculo lambda, segn un conjunto de reglas formales. Este sistema result ser inconsistente,
pero la capacidad para expresar-calcular funciones numricas como trminos del sistema llam
pronto la atencin de l y sus colaboradores.
Gdel habia recogido la idea de Herbrand de que una funcin f podra definirse por un
conjunto de ecuaciones entre trminos que incluian a la funcin f y a smbolos para funciones
previamente definidas, y precis esta idea requiriendo que cada valor de f se obtenga de las
ecuaciones por sustitucin de las variables por nmeros y los trminos libres de variables por
los valores que ya se habian probado que designaban. Esto define la clase de las funciones
recursivas de Herbrand-Gdel.
En 1936, Church hace un esquema de la demostracin de la equivalencia entre las funcio-
nes -definibles y las funciones recursivas de Herbrand-Gdel (esta equivalencia tambin haba
sido probada por Kleene ); y aventura que estas iban a ser las nicas funciones calculables por
medio de un algoritmo a travs de la tesis que lleva su nombre, y utilizando la nocin de funcin
-definible, di ejemplos de problemas de decisin irresolubles, y demostr que el Entschei-
dungsproblem era uno de esos problemas.
Por otra parte Kleene, pocos meses despues, demuestra formalmente la equivalencia entre
funciones -definible y funciones recursivas de Herbrand-Gdel, y d ejemplos de problemas
irresolubles utilizando la nocin de funcin recursiva.
La tercera nocin de funcin calculable proviene del matemtico ingls A. Turing, quin
argument que la tercera cuestin de Hilbert (el Entscheidungsproblem) poda atacarse con la
ayuda de una mquina, al menos con el concepto abstracto de mquina.
Turing seal que haba tenido xito en caracterizar de un modo matemticamente preciso,
por medio de sus mquinas, la clase de las funciones calculables mediante un algoritmo, lo que
se conoce hoy como Tesis de Turing.
Aunque no se puede dar ninguna prueba formal de que una mquina pueda tener esa pro-
piedad, Turing di un elevado nmero de argumentos a su favor, en base a lo cual present la
tesis como un teorema demostrado. Adems, utiliz su concepto de mquina para demostrar
que existen funciones que no son calculables por un mtodo definido y en particular, que el
Entscheidungsproblem era uno de esos problemas.
10 Modelos de Computacin I
Cuando Turing conoci los trabajos de Church-Kleene, demostr que los conceptos de fun-
cin -definible y funcin calculable por medio de una mquina de Turing coinciden. Natural-
mente a la luz de esto la Tesis de Turing resulta ser equivalente a la de Church.
Finalmente, cabe resear el trabajo de E. Post. Este estaba interesado en marcar la frontera
entre lo que se puede hacer en matemticas simplemente por procedimientos formales y lo que
depende de la comprensin y el entendimiento. De esta forma, Post formula un modelo de pro-
cedimiento efectivo a travs de los llamados sistemas deductivos normales. Estos son sistemas
puramente formales en los que puede deducirse sucesiones finitas de smbolos como conse-
cuencia de otras sucesiones finitas de smbolos por medio de un tipo normalizado de reglas y a
partir de un conjunto de axiomas. As pues, dada una sucesin finita de smbolos como entrada,
las reglas permiten convertirla en una sucesin finita de salida. En su artculo, Post demostr
resultados de incompletitud e indecibilidad en estos sistemas.
Los resultados hasta ahora citados, se refieren a funciones totales. La existencia de algo-
ritmos que con determinadas entradas nunca terminan, condujo de forma natural a considerar
funciones parciales. Kleene fu el primero en hacer tal consideracin en 1938. El estudio de
estas funciones ha mostrado la posibilidad de generalizar todos los resultados anteriores a fun-
ciones parciales. Por otro lado, el estudio de las funciones parciales calculables ha resultado
esencial para el posterior desarrollo de la materia.
Posteriormente, se demostr la equivalencia entre lo que se poda calcular mediante una
mquina de Turing y lo que se poda calcular mediante un sistema formal en general.
A la vista de estos resultados, la Tesis de Church-Turing es aceptada como un axioma en la
teora de la computacin, y ha servido como punto de partida en la investigacin de los proble-
mas que se pueden resolver mediante un algoritmo.
Problemas no computables
Usando la codificacin de Gdel, se demostr que era posible construir una mquina de
propsito general, es decir, capaz de resolver cualquier problema que se pudiese resolver me-
diante un algoritmo. Dicha mquina tendra como entrada el entero que codificara el algoritmo
solucin del problema y la propia entrada del problema, de tal forma, que la mquina aplicara
el algoritmo codificado a la entrada del problema. Esta hipottica mquina puede considerarse
como el padre de los actuales ordenadores de proposito general.
Una de las cuestiones ms estudiadas en la teora de la computabilidad ha sido la posibi-
lidad de construir algoritmos que nos determinen si un determinado algoritmo posee o no una
determinada propiedad. As, sera interesante responder de forma automtica a cuestiones como:
- Calculan los algoritmos A y B la misma funcin? (Problema de la equivalencia)
- Parar el algoritmo A para una de sus entradas? (Problema de la parada)
- Parar el algoritmo A para todas sus entradas? (Problema de la totalidad)
- Calcula el algoritmo A la funcin f? (Problema de la verificacin?)
etc . . .
En un principio se fueron obteniendo demostraciones individuales de la no computabilidad
Cap. 1 Introduccin 11
de cada una de estas cuestiones, de forma que se tena la sensacin de que casi cualquier pregunta
interesante acerca de algoritmos era no computable.
A pesar de esto, y como consecuencia de la existencia de un programa universal hay otras
muchas cuestiones interesantes que se han demostrado computables.
El identificar los problemas que son computables y los que no lo son tiene un considerable
inters, pues indica el alcance y los lmites de la computabilidad, y as demuestra los lmites
tericos de los ordenadores. Adems de las cuestiones sobre algoritmos, se han encontrado nu-
merosos problemas menos "generales"que han resultado ser no computables. Como ejemplo
citamos:
- Dcimo problema de Hilbert. Una ecuacin diofntica es la ecuacin de los ceros enteros de un
polinomio con coeficientes enteros. Se pregunta si hay un procedimiento efectivo que determine
si una ecuacin diofntica tiene o no solucin.
Por otro lado, son muchos los problemas interesantes que se han demostrado computables.
Todas las funciones construidas por recursividad primitiva o minimalizacin a partir de funcio-
nes calculables resultan ser calculables como consecuencia de los trabajos de Church y Turing.
Pero adems, otras funciones ms complejamente definidas tambin son computables. Como
ejemplo ms interesante de aplicacin de este tipo de recursin tenemos la funcin de Acker-
mann :
(0, y) = y + 1;
(x + 1, 0) = (x, 1);
(x + 1, y + 1) = (x, (x + 1, y)).
de las evidencias a favor y de la falta de evidencias en contra, aceptamos la Tesis de Church que
afirma la equivalencia de ambas clases.
Se clasifican los problemas segn que siempre sea posible encontrar la solucin por medio
de un algoritmo (problemas computables) que no existan algoritmos que siempre produzcan
una solucin (problemas no computables).
Surge de modo inmediato la cuestin B) de como disear un programa (algoritmo especifi-
cado para poder ser ejecutado por un ordenador) que resuelva un problema dado. En la primera
poca del desarrollo informtico los programas dependan intrnsecamente del ordenador utili-
zado, pues se expresaban en lenguaje mquina, directamente interpretable por el ordenador.
Surgi entonces la necesidad de idear otros mecanismos para construir y expresar los pro-
gramas. El hilo conductor de tales mecanismos fu la abstraccin: separar el programa del orde-
nador y acercarlo cada vez ms al problema.
Los subprogramas empezaron ya a usarse a principios de los 50, dando lugar posteriormente
al primer tipo de abstraccin, la procedimental. A principios de los 60, se empezaron a entender
los conceptos abstractos asociados a estructuras de datos bsicas pero an no se separaban los
conceptos de las implementaciones. Con el nacimiento en esta poca de los primeros lenguajes
de alto nivel, Fortran p.ej., se lleg a la abstraccin sintctica, al abstraerse la semntica de las
expresiones matemticas y encapsular el acceso a ellas a travs de la sintaxis propia del lenguaje.
En cualquier caso con el desarrollo de estos lenguajes de alto nivel se solventaron los problemas
de flexibilidad en la comunicacin con el ordenador, y se empezaron a estudiar los algoritmos
de forma independiente del ordenador concreto en que se probaran y del lenguaje concreto en
que se expresaran.
Aparece la necesidad de traducir los programas escritos en lenguajes de alto nivel al lenguaje
mquina, de forma automtica, y se buscan mquinas o procedimientos que puedan reconer el
lxico y la sintxis de dichos lenguajes.
Hay que comentar que no hay un algoritmo para ensear a disear algoritmos, y que muchas
veces el proceso de construccin puede llegar a ser muy poco disciplinado. No obstante, existen
tcnicas de diseo de algoritmos, que vienen a ser modelos abstractos de los mismos aplicables
a gran variedad de problemas reales.
Una vez construido un programa para un problema, surge la cuestin C) de si lo resuelve
realmente. Normalmente los programadores prueban sus programas sobre una gran cantidad de
datos de entrada para descubrir la mayoria de los errores lgicos presentes, aunque con este
mtodo (al que suele denominarse de prueba y depuracin) no se puede estar completamen-
te seguro de que el programa no contiene errores. Necesitaramos para realizar la verificacin
formal, reglas que describan de forma precisa el efecto que cada instruccin tiene en el estado
actual del programa, para, aplicando dichas reglas demostrar rigurosamente que lo que hace el
programa coincide con sus especificaciones. En cualquier caso y cuando la prueba formal resulte
muy complicada, podemos aumentar la confianza en nuestro programa realizando en el mismo
los "testuidadosos de que hablbamos al principio.
14 Modelos de Computacin I
perfil de la plaza no se ocupa directamente de este problema que adems se estudia ampliamente
en otras materias y asignaturas del curriculum de Informtica.
finito.
Rabin y Scott (1960) obtienen un modelo de computador con una cantidad finita de memoria,
al que llamaron autmata de estados finitos. Demostraron que su comportamiento posible, era
bsicamente el mismo que el descrito mediante expresiones regulares, desarrolladas a partir de
los trabajos de McCulloch y Pitts.
No obstante lo dicho, para un alfabeto concreto, no todos los lenguajes que se pueden cons-
truir son regulares. Ni siquiera todos los interesantes desde el punto de vista de la construccin
de algortmos para resolver problemas. Hay entonces muchos problemas que no son calcula-
bles con estos lenguajes. Esto pone de manifiesto las limitaciones de los autmatas finitos y
las gramticas regulares, y propicia el desarrollo de mquinas reconocedoras de otros tipos de
lenguajes y de las gramticas correspondientes, asociadas a los mismos.
En 1956, la Princenton Univ. Press publica el libro Automata Studies, editado por C. Shannon
y J. McCarthy, donde se recogen una serie de trabajos sobre autmatas y lenguajes formales. D.
A. Huffman (1954) ya utiliza conceptos como estado de un autmata y tabla de transiciones.
N. Chomsky (1956) propone tres modelos para la descripcin de lenguajes, que son la base
de su futura jerarqua de los tipos de lenguajes, que ayud tambin en el desarrollo de los lengua-
jes de programacin. Para ello intent utilizar autmatas para extraer estructuras sintcticas (...
el ingls no es un lenguaje de estados finitos) y dirige sus estudios a las gramticas, indicando
que la diferencia esencial entre autmatas y gramticas es que la lgica asociada a los autmatas
(p.e., para ver la equivalencia entre dos de ellos) es Decidible, mientras que la asociada a las
gramticas no lo es.
Desarrolla el concepto de gramtica libre del contexto, en el transcurso de sus investigaciones
sobre la sintxis de los lenguajes naturales.
Backus y Naur desarrollaron una notacin formal para describir la sintxis de algunos len-
guajes de programacin, que bsicamente se sigue utilizando todava, y que poda considerarse
equivalente a las gramticas libres del contexto.
Consideramos entonces los lenguajes libres (independientes) del contexto, y las gramticas
libres del contexto y los autmatas con pila, como forma de caracterizarlos y manejarlos. Los
distintos lenguajes formales que se pueden construir sobre un alfabeto concreto pueden clasifi-
carse en clases cada vez ms amplias que incluyen como subconjunto a las anteriores, de acuerdo
con la jerarqua establecida por Chomsky en los aos 50.
Se puede llegar as, de una forma casi natural a considerar las mquinas de Turing, estable-
cidas casi 20 aos antes, como mquinas reconocedoras de los lenguajes formales dependientes
del contexto o estructurados por frases, e incluso a interpretar la Tesis de Turing como que n
sistema computacional nunca podr efectuar un anlisis sintctico de aquellos lenguajes que
estn por encima de los lenguajes estructurados por frases, segn la jerarqua de Chomsky".
En consecuencia, podemos utilizar la teora de autmatas y los conceptos relativos a gram-
ticas sobre distintos tipos de lenguajes, para decidir (si se puede) si una funcin (o problema)
es calculable, en base a que podamos construir un algoritmo solucin mediante un lenguaje que
Cap. 1 Introduccin 17
Para notar los alfabetos, en general, usaremos siempre que sea posible las primeras letras en
maysculas: A, B,C, . . .. Para los smbolos trataremos de emplear las primeras letras en mins-
culas: a, b, c, . . . o nmeros.
Las siguientes son algunas normas de notacin que respetaremos en lo posible a lo largo del
curso. En casos particulares en los que sea imposible seguirlas lo indicaremos explicitamente.
Definicin 2 Una palabra sobre el alfabeto A es una sucesin finita de elementos de A. Es decir
u es una palabra sobre A, si y solo si U = a1 . . . an donde ai A, i = 1, . . ., n.
Por ejemplo, si A = {0, 1} entonces 0111 es una palabra sobre este alfabeto.
El conjunto de todas las palabras sobre un alfabeto A se nota como A .
Para las palabras usaremos, en lo posible, las ltimas letras del alfabeto latino en minsculas:
u, v, x, y, z, . . ..
Definicin 4 La palabra vaca es la palabra de longitud cero. Es la misma para todos los alfa-
betos, y se nota como .
3. Elemento Neutro.- u. = .u = u, u A
Los propiedades asociativa y elemento neutro dotan al conjunto de las cadenas con la opera-
cin de concatenacin de la estructura de monoide. La propiedad conmutativa no se verifica.
Consideramos la iteracin n-sima de una cadena como la concatenacin con ella misma n
veces, y se define de forma recursiva:
Definicin 6 Si u A entonce
u0 =
ui+1 = ui .u, i 0
1.3.2. Lenguajes
Definicin 8 Un lenguaje sobre el alfabeto A es un subconjunto del conjunto de las cadenas
sobre A: L A .
Los lenguajes los notaremos con las letras intermedias del alfabeto latino en maysculas.
Ejemplo 2 Los siguientes son lenguajes sobre un alfabeto A, cuyo contenido asumimos conocer
claramente:
2
L4 = {an | n = 1, 2, 3, . . .}, palabras que tienen un nmero de smbolos a que sea cuadrado
perfecto, pero nunca nulo.
L1 L2 = {u1 u2 | u1 L1 , u2 L2 }
L1 L2 = {0i 1i 1 j 0 j : i, j 0}
Propiedades:
L0/ = 0L
/ = 0/ (0/ es el Lenguaje que contiene 0 palabras)
L0 = {}
Li+1 = Li L
L = Li
[
i0
L+ = Li
[
i1
Cap. 1 Introduccin 21
Propiedades:
L+ = L si L
L+ = L {} si 6 L
Ejemplo 4 Si L = {0, 01}, entonces, L = Conjunto de palabras sobre {0, 1} en las que un uno
va siempre precedido de un cero.
Por otra parte, L+ = Conjunto de palabras sobre {0, 1} en las que un uno va siempre pre-
cedido de un cero y distintas de la palabra vaca.
L1 = {u | u1 L}
Es decir, la CAB(L) contiene todas las palabras del lenguaje y aquellas otras que tengan
como primeros caracteres, alguna palabra del mismo.
h : A1 A2
se dice que es un homomorfismo si y solo si
h(uv) = h(u)h(v)
Consecuencias:
h() =
La razn de notar los elementos del alfabeto V con letras maysculas es para no confundirlos
con los smbolos terminales. Las cadenas del alfabeto (V T ) se notan con letras griegas para
no confundirlas con las cadenas del alfabeto T , que seguirn notndose como de costumbre:
u, v, x . . ..
V = {E}
T = {+, , (, ), a, b, c}
Cap. 1 Introduccin 23
E E + E, E E E, E (E),
E a, E b, E c
S=E
Una gramtica se usa para generar las distintas palabras de un determinado lenguaje. Esta
generacin se hace mediante una aplicacin sucesiva de reglas de produccin comenzando por
el smbolo de partida S. Las siguientes definiciones expresan esta idea de forma ms rigurosa.
es una subcadena de .
Ejemplo 9 Haciendo referencia a la gramtica del ejemplo anterior, tenemos las siguientes
derivaciones,
Si en una gramtica comenzamos a hacer derivaciones a partir del smbolo original S, dicha
derivacin acabar cuando solo queden smbolos terminales, en cuyo caso la palabra resultante
pertenece a L(G), o cuando queden variables pero no se pueda aplicar ninguna regla de pro-
duccin, en cuyo caso dicha derivacin no puede llevar a ninguna palabra de L(G). En general,
cuando estemos haciendo una derivacin puede haber ms de una regla de produccin aplicable
en cada momento.
Cuando no sea importante distinguir si la derivacin de una palabra en una gramtica se
haya realizado en uno o varios pasos, entonces eliminaremos la del smbolo de derivacin.
As, escribiremos = , en lugar de = .
Ejemplo 12 Sea G = (V, T, P, S) una gramtica, donde V = {S, A, B}, T = {a, b}, las reglas de
produccin son
S aB, S bA, A a, A aS,
A bAA, B b, B bS, B aBB
y el smbolo de partida es S.
Esta gramtica genera el lenguaje
Hay que demostrar que todas las palabras del lenguaje tienen el mismo nmero de a que
de b, hay que probar que todas las palabras generadas cumplen esta condicin y que todas las
palabras que cumplen esta condicin son generadas.
Para lo primero basta con considerar el siguiente razonamiento. Supongamos Na+A () y
Nb+B () que son el nmero de a + el nmero de A en y el nmero de b + el nmero de B en
, respectivamente. Entonces,
Cap. 1 Introduccin 25
Como u no tiene variables, entonces Na+A (u) = Na (u) y Nb+B (u) = Nb (u), por lo tanto,
Na (u) = Nb (u), es decir si u es generada contiene el mismo nmero de a que de b.
Para demostrar que todas las palabras del lenguaje son generadas por la gramtica, damos
el siguiente algoritmo que en n pasos es capaz de generar una palabra de n smbolos. El algo-
ritmo genera las palabras por la izquierda obteniendo, en cada paso, un nuevo smbolo de la
palabra a generar.
Las condiciones que garantizan que todas las palabras son generadas mediante este algo-
ritmo son las siguientes:
Entonces aplicamos la primera opcin para generar los smbolos y la palabra queda
generada.
S abc S aX bc X b bX X c Y bcc
bY Y b aY aaX aY aa
Sin embargo, al hacer esta clasificacin nos encontramos con que el problema de saber si dos
gramticas generan el mismo lenguaje es indecidible. No existe ningn algoritmo que acepte
como entrada dos gramticas y nos diga (la salida del algoritmo) si generan o no el mismo
lenguaje.
De esta forma, tenemos que pensar en clasificaciones basadas en la forma de la gramtica,
ms que en la naturaleza del lenguaje que generan. La siguiente clasificacin se conoce como
jerarqua de Chomsky y sigue esta direccin.
1 A2 1 2
dode A V, (V T ) .
A uB A u
donde u T y A, B V
Definicin 22 Un lenguaje se dice que es de tipo i(i = 0, 1, 2, 3) si y solo si es generado por una
gramtica de tipo i. La clase o familia de lenguajes de tipo i se denota por L i .
28 Modelos de Computacin I
L3 L2 L1 L0
Demostracin
Si la gramtica es de tipo 3 2 no hay nada que demostrar.
Si la gramtica es de tipo 0 1, entonces para cada ai T introducimos una variable Ai 6 V .
Entonces hacemos V 0 = V {A1 , . . . , Ak }, donde k es el nmero de smbolos terminales.
Ahora P0 estar formado por las reglas de P donde, en todas ellas, se cambia a i por Ai . Aparte
de ello aadimos una regla Ai ai para cada ai T.
Podemos ver que L(G) L(G0 ). En efecto, si derivamos u = ai1 . . . ain L(G), entonces
usando las reglas correspondientes, podemos derivar Ai1 . . . Ain en G0 . Como en G0 tenemos las
reglas Ai ai , entonces podemos derivar u L(G0 ).
Para demostrar la inclusin inversa: L(G0 ) L(G), definimos un homomorfismo h de (V 0
T ) en (V T ) de la siguiente forma,
Cap. 1 Introduccin 29
1. h(Ai ) = ai , i = 1, . . ., k
2. h(x) = x, x V T
Ahora se puede demostrar que este homorfismo transforma las reglas: si P 0 , enton-
ces h() h() es una produccin de P h() = h().
Partiendo de esto se puede demostrar que si = entonces h() = h(). En particular,
como consecuencia, si S = u, u T , entonces h(S) = S = h(u) = u. Es decir, si u L(G0 )
entonces u L(G). Con lo que definitivamente L(G) = L(G0 ).
Ejercicios
1. Demostrar que la gramtica
L = {ai bi | i = 0, 1, 2}
Solucin:
Si seguimos este procedimiento, nos encontramos que podemos ir generando todas las
palabras de la forma ai bi , y siempre nos queda la palabra ai Sbi para seguir generando
las palabras de mayor longitud.
Por otra parte, estas son las nicas palabras que se pueden generar.
2. Encontrar el lenguaje generado por la gramtica G = ({A, B, S}, {a, b}, P, S) donde P
contiene las siguientes producciones
S aAB bB a Ab SBb
Aa SaB B SA B ab
Solucin:
El resultado es el Lenguaje vaco: nunca se puede llegar a generar una palabra con
smbolos terminales. Siempre que se sustituye S aparece A, y siempre que se sustituye A
aparece S.
30 Modelos de Computacin I
3. Encontrar una gramtica libre del contexto para generar cada uno de los siguientes len-
guajes
a) L = {ai b j | i, j IN , i j}
Solucin:
S aSb
S Sb
b) L = {ai b j a j bi | i, j IN }
Solucin:
S aSb
S B, B bBa, B
c) L = {ai bi a j b j | i, j IN }
Solucin:
Podemos generar {ai bi | i IN } con:
S1 aS1 b, S1
S S 1 S1
d) L = {ai bi | i IN } {bi ai | i IN }
Solucin:
Podemos generar {ai bi | i IN } con:
S1 aS1 b, S1
y {bi ai | i IN } con
S2 bS2 a, S2
S S1 , S S2
e) L = {uu1 | u {a, b} }
Solucin:
S aSa, S bSb, S
f) L = {ai b j ci+ j | i, j IN }
Solucin:
S aSc, S B,
B bBc, B
S AB A Ab Aa
B cB Bd
32 Modelos de Computacin I
33
34 Modelos de Computacin I
Los autmatas finitos son capaces de reconocer solamente, un determinado tipo de lengua-
jes, llamados Lenguajes Regulares, que pueden ser caracterizados tambin, mediante un tipo de
gramticas llamadas tambin regulares. Una forma adicional de caracterizar los lenguajes regu-
lares, es mediante las llamadas expresiones regulares, que son las frases del lenguaje, construidas
mediante operadores sobre el alfabeto del mismo y otras expresiones regulares, incluyendo el
lenguaje vaco.
Estas caracterizaciones de los lenguajes regulares se utilizan en la prctica, segn que la
situacin concreta est favorecida por la forma de describir el lenguaje de cada una de ellas. Los
autmatas finitos se utilizan generalmente para verificar que las cadenas pertenecen al lenguaje,
y como un analizador en la traduccin de algortmos al ordenador.
Las gramticas y sus reglas de produccin se usan frecuentemente en la descripcin de la
sintaxis de los lenguajes de programacin que se suele incluir en los manuales correspondientes.
Por otro lado, las expresiones regulares proporcionan una forma concisa y relativamente sencilla
(aunque menos intuitiva) para describir los lenguajes regulares, poniendo de manifiesto algunos
detalles de su estructura que no quedan tan claros en las otras caracterizaciones. Su uso es
habitual en editores de texto, para bsqueda y sustitucin de cadenas.
En definitiva, las caracterizaciones sealadas de los lenguajes (formales) regulares, y por
tanto ellos mismos, tienen un uso habitual en la computacin prctica actual. Esto por s mismo
justificara su inclusin en un curriculum de computacin terica.
Ejemplo 14 Vamos a disear un autmata que reconozca el paso de un alumno por una asig-
natura, por ejemplo, Modelos de Computacin I. Representar las distintas decisiones que se
realizan y si se aprueba o suspende la asignatura. Se controla que no haya ms de dos convo-
catorias por ao y se termina cuando se aprueba la asignatura.
Habr un alfabeto de entrada contendr los siguientes elementos:
S A
Sept1. Fin2
P
P S
Inicio Febr. Dec1
A A
N
Fin1
N
P
Dec2 Sept2.
N S
N Dec3
S
A
Dic. Fin3
1 0 0
q0 q1
: QA Q
Desde el punto de vista intuitivo, podemos ver un autmata finito como una caja negra de
control (ver Figura 2.2), que va leyendo smbolos de una cadena escrita en una cinta, que se
puede considerar ilimitada por la derecha. Existe una cabeza de lectura que en cada momento
es situada en una casilla de la cinta. Inicialmente, esta se sita en la casilla de ms a la izquierda.
El autmata en cada momento est en uno de los estado de Q. Inicialmente se encuentra en q 0 .
En cada paso, el autmata lee un smbolo y segn el estado en que se encuentre, cambia de
estado y pasa a leer el siguiente smbolo. As sucesivamente hasta que termine de leer todos los
smbolos de la cadena. Si en ese momento la mquina est en un estado final, se dice que el
autmata acepta la cadena. Si no est en un estado final, la rechaza.
Q = {q0 , q1 , q2 }
A = {a, b}
Cap. 2 Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3 37
a
q0 a q1
b
a b
b
q2
(q0 , a) = q1 (q0 , b) = q2
(q1 , a) = q1 (q1 , b) = q2
(q2 , a) = q1 (q2 , b) = q0
F = {q1 }
Una configuracin es un par (q, u) donde q es un estado y u una palabra. Intuitivamente una
configuracin contiene los elementos que determinan la evolucin futura del autmata. En este
sentido, q ser el estado en el que se encuentra el autmata y u lo que queda por leer en un
momento dado.
Inicialmente, autmata est en el estado inicial q0 y nos queda por leer toda la palabra de
entrada. El siguiente concepto recoge esta idea.
Intuitivamente, la configuracin inicial indica que estamos en el estado inicial y nos queda
por leer toda la palabra u.
A continuacin definimos la relacin paso de clculo entre dos configuraciones.
Definicin 27 Si M = (Q, A, , q0 , F) es una autmata finito determinista y (p, u), (q, v) son dos
configuraciones, decimos que se puede pasar de (p, u) a (q, v) en un paso de clculo, lo que se
nota como (p, u) ` (q, v) si y slo si u = av, donde a A y (p, a) = q.
Definicin 28 Si M = (Q, A, , q0 , F) es una autmata finito determinista y (p, u), (q, v) son
dos configuraciones, decimos que puede pasar de (p, u) a (q, v) en una secuencia de clcu-
lo, lo que se nota como (p, u) ` (q, v) si y solo si existe una sucesin de configuraciones:
(p0 , u0 ), . . . (pn , un ) donde n 1, de tal forma que (p0 , u0 ) = (p, u), (pn , un ) = (q, v) y (pi , ui ) `
(pi+1 , ui+1 ), i < n.
Existe otro enfoque alternativo para definir formalmente el clculo asociado a un autmata
de estado finito y consiste en definir la funcin de transicin de un autmata aplicada a una
palabra. Esta funcin que llamaremos 0 se define de forma recursiva
0 : Q A Q
dada por
0 (q, ) = q
0 (q, aw) = 0 ((q, a), w), w A , a A
0 0
1
q0 q1
1
Figura 2.4: Autmata que acepta el lenguaje de palabras con un nmero impar de unos
Ejemplo 17 El autmata dado por el diagrama de transicin de la Figura 2.4 acepta el lenguaje
formado por aquellas cadenas con un nmero impar de unos.
T = {+, , E, 0, 1, . . .., 9, .}
V = {< Signo >, < Digito >, < Natural >, < Entero >, < Real >}
E, +,
+, , .
q2 0, . . . , 9
q8 0, . . . , 9
q5 0, . . . , 9
0, . . . , 9 0, . . . , 9 0, . . . , 9 E, +, , .
. E
q0 0, . . . , 9 q3 q4 0, . . . , 9 q7 T
+, E, +, , . +,
E, +, , .
q1 q6
E, +, , .
E, .
E, .
<Natural><Digito> | <Digito><Natural>
<Entero><Natural>
<Entero><Signo><Natural>
<Real><Entero>
<Real><Entero>.
<Real><Entero> . <Natural>
<Real><Entero> . <Natural> E <Entero>
Este lenguaje puede ser descrito tambin por un autmata de estado finito, como el de la
Figura 18, en el que el alfabeto es A = {0, 1, 2, . . .., 9, +, , E}.
E B, H, S RD
B, D, Z, H, S D
: QA Q
y ahora ser una aplicacin de Q A en (Q) (subconjuntos de Q):
: Q A (Q)
La definicin completa quedara comos sigue.
: Q A (Q)
La interpretacin intuitiva es que ahora el autmata, ante una entrada y un estado dado, puede
evolucionar a varios estados posibles (incluyendo un solo estado o ninguno si (q, a) = 0). / Es
decir es como un algoritmo que en un momento dado nos deja varias opciones posibles o incluso
puede no dejarnos ninguna.
Una palabra se dice aceptada por un AFND si, siguiendo en cada momento alguna de las
opciones posibles, llegamos a un estado final.
A continuacin, vamos a extender definida en Q A a una funcin definida en (Q) A,
es decir, para que se pueda aplicar a conjuntos de estados, no slo a un estado dado. se define
de la siguiente forma,
Cap. 2 Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3 43
Si P Q y u A, (P, a) = (q, a)
[
qP
Esta funcin se puede extender para aplicarse tambin a palabras de la siguiente forma:
Si B Q,
(B, ) = B
se puede aplicar tambin a un slo estado de acuerdo con la siguiente expresin: (q, u) =
({q}, u)
Con estos elementos podemos definir cuando una palabra es aceptada por un autmata no-
determinstico.
/
L(M) = {u A | 0 (q0 , u) F 6= 0}
Aqu, al contrario de lo que ocurra en los autmatas deterministas, desdee una configu-
racin se puede pasar a varias configuraciones distintas en un paso de clculo, e incluso a
ninguna.
44 Modelos de Computacin I
b
r0 a r1 c r2
b
r0 a r1 c r2
b, c
a
a, b, c
r3 a, b, c
L = {u {a, b, c} | u = abi c, i 0}
es el de la Figura 2.7.
Este es un autmata no-determinista ya que hay transiciones no definidas.
Cap. 2 Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3 45
0, 1 0, 1
q0 0 q1 1 q2 0 q3 0 q4 1 q5 0 q6
En general, los autmatas no-determinsticos son ms simples que los determinsticos. Por
ejemplo, un autmata determinstico que acepta el mismo lenguaje que el anterior es el que
viene dado por la Figura 2.8
Ejemplo 22 Autmata no-determinstico que acepta constantes reales Ver Figura 2.10
Q = P (Q)
q0 = {q0 }
(A, a) = (A, a)
46 Modelos de Computacin I
q2 0, . . . , 9
q8 0, . . . , 9
q5 0, . . . , 9
0, . . . , 9 0, . . . , 9 0, . . . , 9
. E
q0 0, . . . , 9 q3 q4 0, . . . , 9
+, +,
q1 q6
/
F = {A P (Q) | A F 6= 0}
Ejemplo 23 En la Figura 2.11 podemos ver un autmata finito no-determinista del ejemplo 21
(figura 2.9) y su autmata determinstico asociado.
Demostracin
La demostracin se basa en probar que
(q0 , u) = (q0 , u)
Es decir, que el conjunto de estados en los que puede estar el autmata no determinista
coincide con el estado en el que est el autmata determinista que hemos construido. Ambos
aceptan una palabra si al final de su lectura uno de estos estados es final.
Cap. 2 Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3 47
0, 1 0, 1
q0 0 q1 1 q2 0 q3 0 q4 1 q5 0 q6
1
1 0
0
0 1
{q0 } {q0 , q1 } {q0 , q2 } {q0 , q1 , q3 }
1 0 1 0
{q0 , q2 , q5 } {q0 , q1 , q4 }
1
0
0
{q0 , q1 , q6 } {q0 , q1 , q4 , q6 } {q0 , q1 , q3 , q6 }
0 0
0 1 0 0 1
1 {q0 , q6 } {q0 , q2 , q5 , q6 } {q0 , q2 , q6 }
1
1 1
Ejemplo 24 El autmata siguiente acepta las palabras que son una sucesin de ceros, seguida
de una sucesin de 1, seguida de una sucesin de 2.
0 1 2
q0 q1 q2
a, c,
q0 q1 q2
b b
q3
acepta
el lenguaje {b2 i : i 0} {ab2 i : i 0} {b2 ic : i 0} {ab2 ic : i 0}
Definicin 36 Se llama clausura de un estado al conjunto de estados a los que puede evolucio-
nar sin consumir ninguna entrada,
CL(p) = {q Q : q1 , . . . , qk tal que p = q1 , q = qk , qi (qi1 , ), i 2}
Cap. 2 Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3 49
CL(P) = CL(p)
[
pP
CL(q1 ) = {q1 , q2 }
CL(q0 , q1 ) = {q0 , q1 , q2 }
(R, u) = (q, u)
[
qR
0 (q, ) = CL(q)
r(CL(q),a)
0 (R, u) = 0 (q, u)
[
qR
Notemos que 0 (q, a) no es lo mismo que (q, a) por lo que distinguiremos entre las dos
funciones.
Una palabra, u A , se dice aceptada por un AFND con transiciones nulas M = (Q, A, , q 0 , F)
si y solo si
0 (q, u) F 6= 0/
Ejemplo 27 Los siguientes dos autmatas aceptan las palabras que contienen en su interior la
subcadena 0110 y 1000 respectivamente
0,1 0,1
q0 0 q1 1 q2 1 q3 0 q4
0,1 0,1
p0 1 p1 0 p2 0 p3 0 p4
Para construir un autmata que acepte las palabras aceptadas por uno cualquiera de estos
dos autmatas, es decir, las palabras con una subcadena 0110 una subcadena 1000 se pone
un nuevo estado inicial que se une con los antiguos mediante transiciones nulas.
0, 1 0, 1
q0 0 q1 1 q2 1 q3 0 q4
r0
0, 1 0, 1
p0 1 p1 0 p2 0 p3 0 p4
Ejemplo 28 Consideremos el siguiente autmata que acepta las palabras del alfabeto {a, b, c}
que tienen una sola b y sta va seguida de una c.
a,c
q b q
0 1
q2 a,c
Si L es el lenguaje que acepta el autmata anterior modifiqumoslo para que acepte cual-
quier sucesin no nula de palabras de L: cualquier palabra de L + . Para ello se unen los estados
finales del autmata con el estado inicial mediante una transicin nula:
Cap. 2 Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3 51
a, c
q0 b q1
c
q2 a, c
Las transiciones nulas, como vemos dan ms capacidad de expresividad a los autmatas, pero
el conjunto de lenguajes aceptados es el mismo que para los autmatas finitos determinsticos,
como queda expresado en el siguiente teorema.
Teorema 3 Para todo autmata AFND con transiciones nulas existe un autmata finito deter-
minstico que acepta el mismo lenguaje.
F if CL(q0 ) F = 0/
F= (2.1)
F {q0 } en caso contrario
0
(q, u) = 0 (q, u) si u 6= (2.3)
Ejemplo 29 El AFND correspondiente al autmata con transiciones nulas del ejemplo 19,
acepta el mismo lenguaje que el siguiente autmata determinista:
52 Modelos de Computacin I
0 1
{q0 , q1 , q2 } 1 {q1 , q2 }
2 0
2
0, 1
{q2 } 0/
0, 1, 2
2
De acuerdo con la definicin anterior, se puede determinar no solo cuales son las expresiones
regulares sobre un determinado alfabeto, sino tambin cuales son los lenguajes que denotan o
lenguajes asociados. Los lenguajes que pueden representarse mediante una expresin regular se
llaman lenguajes regulares. Estos coinciden con los aceptados por los autmatas finitos, como
veremos mas adelante.
Los parntesis se pueden eliminar siempre que no haya dudas. La precedencia de las opera-
ciones es
Clausura
Cap. 2 Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3 53
Concatenacin
Unin
Ejemplo 30 Si A = {a, b, c}
(a + )b es una expresin regular que denotal el lenguaje {ai b j : i = 0, 1; j 0}
Si A = {0, 1}
(1 + 10) representa el lenguaje de las cadenas que comienzan por 1 y no tienen dos ceros
consecutivos.
00 11 representa un subconjunto del lenguaje anterior formado por cadenas que al me-
nos tienen un 1 y un 0. Si la expresin regular rr se representa como r + , 00 11 se puede
reprensentar como 0+ 1+ .
1. r1 + r2 = r2 + r1
2. r1 + (r2 + r3 ) = (r1 + r2 ) + r3
4. r = r
5. r0/ = 0/
6. r + 0/ = r
7. =
8. r1 (r2 + r3 ) = r1 r2 + r1 r3
54 Modelos de Computacin I
9. (r1 + r2 )r3 = r1 r3 + r2 r3
10. r+ + = r
11. r + = r
12. (r + ) = r
13. (r + )+ = r
14. r1 + r2 = (r1 + r2 )
15. r1 r2 = (r1 + r2 )
Teorema 4 Dada una expresin regular existe un autmata finito que acepta el lenguaje aso-
ciado a esta expresin regular.
Demostracin.- Vamos a demostrar que existe un AFND con transiciones nulas. A partir de l
se podra construir el autmata determinstico asociado.
La construccin del autmata va a ser recursiva. No vamos a expresar como son los estados y
las transiciones matemticamente, sino que los autmatas vendrn expresados de forma grfica.
Para las expresiones regulares iniciales tenemos los siguiente autmatas:
0/
q0
q0
a
q0 a q1
Cap. 2 Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3 55
Ahora veremos como se pueden construir autmatas para las expresiones regulares com-
puestas a partir de los autmatas que aceptan cada una de sus componentes.
Si M1 es el autmata que acepta el mismo lenguaje que el representado por r 1 y M2 el que
acepta el mismo lenguaje que el de r2 , entonces
q11
q01 M1
qi1
q0
q12
q02 M2
q j2
q11 q12
q01 q02
qi1 q j2
M1 M2
El autmata para r1 es
56 Modelos de Computacin I
q11
q0 q01 M1
qi1
Se puede comprobar que efectivamente estos autmatas verifican las condiciones pedidas y
que el procedimiento de construccin siempre acaba.
Autmata correspondiente a 1
1
q1 q2
Autmatas correspondientes a 1 y 0
1 0
q1 q2 q3 q4
El autmata asociado a 10 es
1 0
q1 q2 q3 q4
Autmatas asociado a 10 y 0
Cap. 2 Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3 57
0
q5 q6
1 0
q1 q2 q3 q4
Autmata asociado a 10 + 0
0
q5 q6
q7
1 0
q1 q2 q3 q4
0
q5 q6
q8 q7
1 0
q1 q2 q3 q4
0
q5 q6
0 1 1
q8 q7 q9 q10 q11 q12 q13 q14
1 0
q1 q2 q3 q4
0
q5 q6
0 1 1
q8 q7 q9 q10 q11 q12 q13 q14
1 0
q1 q2 q3 q4
Teorema 5 Si L es aceptado por un autmata finito determinstico, entonces puede venir expre-
sado mediante una expresin regular.
Demostracin.-
Sea el autmata M = (Q, A, , q1 , F) donde Q = {q1 , . . . , qn } y q1 es el estado inicial.
Sea Rkij el conjunto de las cadenas de A que premiten pasar del estado qi al estado q j y
no pasa por ningn estado intermedio de numeracin mayor que k (q i y q j si pueden tener
numeracin mayor que k).
Rkij se puede definir de forma recursiva:
{a : (qi , a) = q j } si i 6= j
0
Ri j =
{a : (qi , a) = qi } {} si i = j
Para k 1, tenemos la siguiente ecuacin:
Rkij = Ri(k1)
k1 k1
(R(k1)(k1) k1
) R(k1) k1
j Ri j
Cap. 2 Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3 59
Vamos a demostrar que para todos los lenguajes Rkij existe una expresin regular rkij que lo
representa. Lo vamos a demostrar por induccin sobre k.
Para k = 0 es inmediato. La expresin regular rkij puede escribirse como
a1 + . . . + a l si i 6= j
a1 + . . . + a l + si i = j
0/ si i 6= j
si i = j
k1
Por la hiptesis de induccin, existen expresiones regulares para los lenguajes R lm , que se
k1 k1
denotan como rlm De aqu se deduce que una expresin regular para Rk j viene dada por
k1 k1
k1
ri(k1) (r(k1)(k1) ) r(k1)j + rijk1
con lo que concluye la demostracin de que existen expresiones regulares para los lengua-
jes Rkij . Adems esta demostracin nos proporciona un mtodo recursivo para calcular estas
expresiones regulares.
Finalmente, para demostrar que el lenguaje aceptado por el autmata puede venir expresado
mediante una expresin regular, solo hay que observar que
L(M) = Rn1 j
[
q j F
Por tanto, L(M) viene denotado por la expresin regular rj1 + . . . + rjk donde F = {q j1 , . . ., q jk }.
Ejemplo 32 Sea el Autmata Finito Determinstico de la Figura 32. Vamos a construir la ex-
presin regular que representa el lenguaje aceptado por este autmata.
60 Modelos de Computacin I
1
q1 0 q2 1 q3
0 0, 1
0 =
r11
0 =0
r12
0 =1
r13
0 =0
r21
0 =
r22
0 =1
r23
0 =0
r31 /
0
r32 = 0 + 1
0 =
r33
1 = r0 + r0 (r0 ) r0 = + () =
r11 11 11 11 11
1 = r0 + r0 (r0 ) r0 = 0 + () 0 = 0
r12 12 11 11 12
1 = r0 + r0 (r0 ) r0 = 1 + () 1 = 1
r13 13 11 11 13
1 = r0 + r0 (r0 ) r0 = 0 + 0() = 0
r21 21 21 11 11
1 = r0 + r0 (r0 ) r0 = + 0() 0 = + 00
r22 22 21 11 12
1 = r0 + r0 (r0 ) r0 = 1 + 0() 1 = 1 + 01
r23 23 21 11 13
1 = r0 + r0 (r0 ) r0 = 0
r31 / + 0()
/ = 0/
31 31 11 11
1 = r0 + r0 (r0 ) r0 = 0 + 1 + 0()
r32 / 0 = 0 + 1
32 31 11 12
1 = r0 + r0 (r0 ) r0 = + 0()
r33 / 1 =
33 31 11 13
2 = r1 + r1 (r1 ) r1 = + 0( + 00) 0 = (00)
r11 11 12 22 21
2 = r1 + r1 (r1 ) r1 = 0 + 0( + 00) ( + 00) = 0(00)
r12 12 12 22 22
2 = r1 + r1 (r1 ) r1 = 1 + 0( + 00) (1 + 01) = 0 1
r13 13 12 22 23
2 = r1 + r1 (r1 ) r1 = 0 + ( + 00)( + 00)0 = (00) 0
r21 21 22 22 21
2 = r1 + r1 (r1 ) r1 = + 00 + ( + 00)( + 00)( + 00) = (00)
r22 22 22 22 22
2 = r1 + r1 (r1 ) r1 = 1 + 01 + ( + 00)( + 00)(1 + 01) = 0 1
r23 23 22 22 23
2 = r1 + r1 (r1 ) r1 = 0
r31 / + (0 + 1)( + 00)0 = (0 + 1)(00)0
31 32 22 21
2 = r1 + r1 (r1 ) r1 = 0 + 1 + (0 + 1)( + 00)( + 00) = (0 + 1)(00)
r32 32 32 22 22
2 = r1 + r1 (r1 ) r1 = + (0 + 1)( + 00)(1 + 01) = + (0 + 1)0 1
r33 33 32 22 23
Finalmente la expresin regular para el lenguaje aceptado es:
3 3 2 2 2 2 2 2 2 2
r12 + r13 = r12 + r13 (r33 ) r32 + r13 + r13 (r33 ) r33 =
Cap. 2 Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3 61
Por ltimo sealaremos que, por abuso del lenguaje, se suele identificar una expresin regular
con el lenguaje asociado. Es decir, diremos el lenguaje (00 + 11) , cuando, en realidad, nos
estaremos refiriendo al lenguaje asociado a esta expresin regular.
A uB
Au
A Bu
Au
S 0A
A 10A
A
es lineal por la derecha. Genera el lenguaje 0(01) .
El mismo lenguaje es generado por la siguiente gramtica lineal por la izquierda
S S10
S0
62 Modelos de Computacin I
Teorema 6 Si L es un lenguaje generado por una gramtica regular, entonces existe un aut-
mata finito determinstico que lo reconoce.
Demostracin.- Supongamos que L es un lenguaje generado por la gramtica G = (V, T, P, S)
que es lineal por la derecha. Vamos a construir un AFND con movimientos nulos que acepta L.
Este autmata ser M = (Q, T, , q, F) donde
Q = {[] : ( = S) (A V, u T, tales que A u P)}
q0 = [S]
F = {[]}
viene definida por
Si A es una variable
([A], ) = {[] : (A ) P}
Si a T y (T V ), entonces
([a], a) = []
[10A] []
Ejemplo 35 La gramtica lineal por la izquierda que genera el lenguaje 0(01) tiene las si-
guientes producciones
S S10
S0
Para construir un AFND con transiciones nulas qque acepte este lenguaje se dan los si-
guientes pasos:
0
[S] [0] []
1
[1S] [01S]
0
0
[S] [0] []
1
[1S] [01S]
0
64 Modelos de Computacin I
p aq, si (p, a) = q
p , si p F
Para el caso de una gramtica lineal por la izquierda, invertimos el autmata, construmos la
gramtica lineal por la derecha asociada e invertimos la parte derecha de las producciones.
q0 0 q1
1
1
0 0, 1
q2
q0 0 q1 q0 0 q1
1 1
1 1
0 0, 1 0 0, 1
q2 q2
q1 q0 0, q2 q0 1, q2 q1 0, q2 q1 1
q0 q2 0, q1 q2 1, q0
Sin embargo, ambas mquinas son equivalentes, en el sentido de que calculan las mismas
funciones.
B alfabeto de salida
: Q B que es una aplicacin que hace corresponder a cada estado su salida correspon-
diente.
No hay estados finales, porque ahora la respuesta no es acepta o no acepta sino que es
una cadena formada por los smbolos de salida correspondientes a los estados por los que pasa
el autmata.
Si el autmata lee la cadena u y pasa por los estados q0 q1 ...qn entonces produce la salida
(q0 )(q1 ) . . . (qn )
Es conveniente sealar que produce una salida para la cadena vaca: (q 0 ).
66 Modelos de Computacin I
1
2
4
q6 q4 (0, 1) q7
(V, A, R, R) (0, 0) (V,V, R, R) (A, A, R, R)
Primer smbolo
00
11
Siguientes smbolos
Si el anterior es un 0
00
11
68 Modelos de Computacin I
0/0 1/0
q0 q1
1/1
0/1 0/0
q2
1/1
Si el anterior es un 1
01
10
Ejemplo 39 Una mquina de Mealy que realiza la divisin entera por 3 es el de la figura 2.13.
Teorema 8 Dada una mquina de Moore, existe una mquina de Mealy equivalente.
Demostracin.- Sea M = (Q, A, B, , , q0) una mquina de Moore, la mquina de Mealy equi-
valente ser M 0 = (Q, A, B, , 0, q0 ), donde
Teorema 9 Dada una mquina de Mealy, existe una mquina de Moore equivalente
Q0 = Q B
0 (q, b) = b
Ejemplo 40 Dada la mquina de Mealy de la figura 2.13, aplicando el procedimiento del teo-
rema anterior, obtenemos la mquina de Moore equivalente de la figura 2.14.
70 Modelos de Computacin I
71
72 Modelos de Computacin I
Lema 1 (Lema de Bombeo) Sea L un conjunto regular, entonces existe un n IN tal que z L,
si |z| n, entonces z se puede expresar de la forma z = uvw donde
1. |uv| n
2. |v| 1
3. (i 0)uvi w L
adems n puede ser el nmero de estados de cualquier autmata que acepte el lenguaje L.
Demostracin.-
Sea M un autmata finito determinstico que acepta el lenguaje L.
Supongamos que el conjunto de estados es Q = {q0 , q1 , . . . , qk }.
Hagamos n = k + 1.
Entonces si z L y |z| n = k +1 resulta que z tiene, al menos, tantos smbolos como estados
tiene el autmata.
Cuando el autmata lee la palabra z, realiza un cambio de estado por cada smbolo de dicha
palabra, empezando en q0 y terminando en un estado final qm .
Sea z0 la parte de z constituida por los n primeros smbolos de z. Consideremos el vector de
los estados por los que (qi0 , qi1 , . . . , qin ) donde qi0 es el estado inicial, q0 , y qi j = (qi j1 , a j ).
Como el vector (qi0 , qi1 , . . ., qin ) tiene n + 1 estados y slo hay n estados distintos, tiene que
haber necesariamente un estado que se repita. Sea ql el primer estado que se repite en este vector.
Entonces consideramos:
1. z = uvw
Cap. 3 Propiedades de los Conjuntos Regulares 73
3. |v| 1, porque para pasar de la primera aparicin de ql a la segunda, hay que leer al menos
un smbolo.
Para demostrar que un determinado lenguaje no es regular, basta probar que no se verifica la
condicin que aparece en el lema de bombeo. Para ello hay que dar los siguiente pasos:
2. Encontrar una palabra, z (que puede depender de n) de longitud mayor o igual que n para
la que sea imposible encontrar una particin como la del lema.
3. Demostrar que una palabra z no cumple las condiciones del lema, para lo que hay que
hacer:
1. Supongamos un n cualquiera
b) Basta considerar i = 2 y
uv2 w = uvvw = 0n v1n y esta no es una palabra de L, ya que si v tiene solo ceros, no
hay el mismo nmero de ceros que de unos, y si v tiene ceros y unos, z tendr unos
antes de algn cero.
Con esto es suficiente para probar que L no es regular. Un resultado mucho mas difcil de
encontrar directamente.
2
Ejemplo 42 Demostrar que el lenguaje L = {0 j : j 0} no es regular.
2
Sea un n IN , consideremos la palabra z = 0n L y de longitud mayor o igual a n.
Supongamos una descomposicin cualquiera z = uvw. Si se verifica
|uv| n
|v| 1
2
entonces tenemos que u = 0k , v = 0l , w = 0n lk , con l 1, l n.
2 2
Haciendo i = 2, uv2 w = 0k 02l 0n lk = 0n +l .
Como (n + 1)2 n2 = n2 + 2n + 1 n2 = 2n + 1 > n l, tenemos que n2 < n2 + l < (n + 1)2
2
y uv2 w = 0n +l 6 L.
Con esto el lenguaje no puede ser regular.
Hay lenguajes que no son regulares y sin embargo verifican la condicin que aparece en el
lema de bombeo. A continuacin se da un ejemplo de este caso.
u=
v es el primer smbolo de z
w es z menos su primer smbolo
Est claro que se verifican las tres condiciones exigidas en el lema de bombeo.
1. |uv| = 1 n = 2
2. |v| = 1 0
3. Si l 0 entonces uvl w sigue siendo una sucesin de b seguida de una sucesin de c
y por tanto una palabra de L.
u=
v = a es el primer smbolo de z
w es z menos su primer smbolo
1. |uv| = 1 n = 2
2. |v| = 1 0
3. Si l 0 entonces uvl w sigue siendo una sucesin de a seguida de una sucesin de b
y otra de c, en la que la cantidad de b es igual que la cantidad de c, y por tanto, una
palabra de L.
Es fcil intuir que este lenguaje no es regular, ya que el nmero de estados necesarios para tener
en cuenta el nmero de a y de b puede hacerse ilimitado (y no sera finito).
76 Modelos de Computacin I
Demostracin.-
Es inmediato ya que L1 L2 = (L1 L2 ).
Existe tambin una demostracin constructiva. Si M1 = (Q1 , A, 1 , q10 , F1 ) es un autmata
finito determinstico que acepta L1 , y M2 = (Q2 , A, 2 , q20 , F2 ) es un autmata que acepta L2 ,
entonces
M = (Q1 Q2 , A, , (q10 , q20 ), F1 F2 )
donde ((qi , q j ), a) = ((qi , a), (q j , a)), acepta el lenguaje L1 L2 .
Demostracin.-
Basta con comprobar que se puede conseguir una expresin regular para f (L) partiendo de
una expresin regular para L: Basta con substituir cada smbolo, a, de L, por la correspondiente
palabra f (a).
Cap. 3 Propiedades de los Conjuntos Regulares 77
Demostracin.-
Supongamos que M = (Q, B, , q0 , F) es un autmata que acepta el lenguaje L, entonces el
autmata M = (Q, A, , q0 , F) donde
Demostracin.-
Sea M = (Q, A, , q0 , F) un autmata finito determinstico que acepta el lenguaje R.
Entonces R/L es aceptado por el autmata
M 0 = (Q, A, , q0 , F 0 )
donde F 0 = {q Q : y L tal que 0 (q, y) F}
Esta demostracin no es constructiva, en el sentido de que puede que no exista un algoritmo
tal que dado un estado q Q nos diga si existe una palabra y L tal que (q, y) L. Si L es
regular, se puede asegurar que dicho algoritmo existe.
78 Modelos de Computacin I
1. No vaco si y solo si existe una palabra de longitud menor que n que es aceptada por el
autmata.
Demostracin.-
1. La parte si es evidente: si acepta una palabra de longitud menor o igual que n, el lenguaje
que acepta no es vaco.
Para la parte solo si, supongamos que el lenguaje aceptado por un autmata es no vaco.
Consideremos una palabra, u, de longitud mnima aceptada por el autmata. En dicho
caso, |u| < n, porque si |u| n, entonces por el lema de bombeo u = xyz, donde |y| 1
y xz es aceptada por el autmata, siendo |xz| < |u|, en contra de que u sea de longitud
mnima.
2. Si u L(M) y n |u| < 2n, entonces por el lema de bombeo se pueden obtener infinitas
palabras aceptadas por el autmata y L(M) es infinito.
Reciprocamente, si L(M) es infinito, habr infinitas palabras de longitud mayor o igual
que n. Sea u una palabra de longitud mnima de todas aquellas que tienen de longitud
mayor o igual que n.
Entonces, u ha de tener una longitud menor de 2n, porque si no es as, por el lema
de bombeo, u se puede descomponer u = xyz, donde 1 |y| n, y xz L(M). Por tanto, xz
sera aceptada por el autmata, tendra una longitud mayor o igual que n, y tendra menos
longitud que u. En contra de que u sea de longitud mnima.
casos, el nmero de palabras que hay que comprobar es finito, estos algoritmos siempre paran.
Sin embargo, en general ser n ineficientes.
Existe otro procedimiento ms eficiente para determinar si el lenguaje asociado a un autma-
ta finito determinstico es o no finito. Lo vamos a explicar en funcin del diagrama de transicin
asociado. Consiste en eliminar previamente todos los estados que son inaccesibles desde el esta-
do inicial (un estado es inaccesible desde el estado inicial si no existe un camino dirigido entre
el estado inicial y dicho estado). Despus de eliminar los estado inaccesibles se obtiene un aut-
mata finito determinstico que acepta el mismo lenguaje que el inicial. Si en dicho autmata
queda algn estado final, el lenguaje aceptado por el autmata no es vaco. Es vaco si no queda
ningn estado final.
Para comprobar si es o no finito, se eliminan adems los estados desde los que no se puede
acceder a un estado final y las transiciones asociadas. Se obtiene as un autmata finito que
puede ser no determinstico y que acepta el mismo lenguaje que el original. El lenguaje aceptado
ser infinito si y solo si existe un ciclo en el diagrama de transicin del nuevo autmata.
Teorema 11 Existe un algoritmo para determinar si dos autmatas finitos determinsticos acep-
tan el mismo lenguaje.
Demostracin.-
Sean M1 y M2 dos autmatas finitos determinsticos. Entonces de forma algortmica se puede
construir un autmata, M, que acepte el lenguaje
00RL 000
80 Modelos de Computacin I
a 1 c 0 e 0
1
0 0 1
0
1 f
b d 1
1
001RL 1
01 6 RL 0
11RL 101
Ejemplo 48 Consideremos el autmata de la Figura 3.1, que acepta el mismo lenguaje, L, del
ejemplo anterior. Ahora tenemos que
00RM 0000
0010RM 00010
00RM 0000
0010RM 00010
pero RL y RM no son exactamente la misma relacin de equivalencia.
Por ejemplo, 000RL 00 pero 000 6 RM 00.
En general, esto se va a verificar siempre. Si tenemos un lenguaje regular L y un autmata
finito determinstico M que acepta este lenguaje entonces,
uRM v uRL v
Cap. 3 Propiedades de los Conjuntos Regulares 81
pero la implicacin inversa no se va a verificar siempre. Solo, como veremos ms adelante, para
los autmatas minimales.
[q] = {x A : 0 (q0 , x) = q}
Esta clase es no vaca ya que x A tal que 0 (q0 , x) = q ( q es accesible desde q0 ).
Demostracin.-
Demostraremos 1 2 3 1.
L=
[
[x]M
(q0 ,x)F
82 Modelos de Computacin I
xRy xRL y
En efecto, si xRy, entonces si z A , por ser R invariante por la derecha, tenemos que
xzRyz. Es decir, xz, yz pertenecen a la misma clase de equivalencia. Como L es la unin de
ciertas clases de equivalencia de la relacin R, entonces todos los elementos de una misma
clase pertenecen o no pertenecen al mismo tiempo al lenguaje L. De esto se deduce que
xz L yz L.
En conclusin, si xRy, entonces para todo z A , se tiene que xz L yz L. Por tanto
xRL y.
Una vez demostrado esto, veremos que RL tiene memos clases de equivalencia que R. Ms
concretamente, veremos que si [x]R = [y]R entonces [x]L = [y]L . Pero esto es inmediato, ya
que si [x]R = [y]R , entonces xRy. Y acabamos de demostrar que de aqu se deduce que
xRL y. Y por tanto, [x]L = [y]L .
Por ltimo, como R es de ndice finito y RL tiene menos clases que R, se deduce que RL es
de ndice finito.
Q = {[x] : x A }
([x]L , a) = [xa]L
Esta definicin es consistente ya que, siendo RL invariante por la derecha, si [x]L =
[y]L entonces [xa]L = [ya]L .
q0 = []L ,
F = {[x]L : x L}.
F est bien definido, ya que si [x]L = [y]L , entonces xRL y, y por tanto, x L y
L, es decir, x L y L.
Este autmata acepta el lenguaje L. En efecto, (q0 , x) = [x]L y [x]L F x L. Por tanto
una palabra x A es aceptada cuando x L.
Cap. 3 Propiedades de los Conjuntos Regulares 83
0 0 0
Demostracin.-
Comprobaremos unicamente que es minimal.
En efecto, si M 0 es el autmata construdo segn el teorema anterior y M un autmata cual-
quiera que acepta el lenguaje L entonces tenemos que se verifica
xRM y xRy
84 Modelos de Computacin I
El teorema anterior nos permite encontrar el autmata minimal asociado a un lenguaje, par-
tiendo de la relacin de equivalencia de dicho lenguaje. El problema fundamental es que normal-
mente no tenemos dicha relacin y normalmente no es fcil de calcular. Lo que solemos tener
es un autmata finito determinstico que acepta el lenguaje L y lo que nos interesa es transfor-
marlo en un autmata minimal. Esto se puede hacer de forma algortmica. El procedimiento de
minimizacin est basado en el hecho de que los estados del autmata minimal construdo a
partir de la relacin RL estn formados por uniones de estados de un autmata M cualquiera que
acepte el mismo lenguaje. Los estados que se pueden identificar y unir en un solo estado son los
llamado estados indistinguibles, que se definen a continuacin.
Es decir, es indiferente estar en dos estados indistinguibles para el nico objetivo que nos
interesa: saber si vamos a llegar a un estado final o no.
El siguiente algoritmo identifica las parejas de estados indistinguibles. Supone que no hay
estados inaccesibles.
Para el algoritmo, asociaremos a cada pareja de estados accesibles del autmata una variable
booleana: marcado, y una lista de parejas. Al principio todas las variables booleanas estn a
falso y las listas vacas. Los pasos del algoritmo son como siguen,
0
1
0 1 0
a b c d
0 1
1 0
0 1
e 1
f 1
g 0 h
1 0
Al final del algoritmo, todas las parejas de estados marcados son distinguibles y los no mar-
cados indistinguibles.
Una vez identificados los estados indistinguibles, el autmata minimal se puede construir
identificando los estados indistinguibles. Ms concretamente, si el autmata original es M =
(Q, A, , q0 , F), R es la relacin de equivalencia de indistinguibilidad entre estados y [q] la clase
de equivalencia asociada al estado q, entonces el nuevo autmata, M m = (Qm , A, m , qm 0 , Fm ) tiene
los siguientes elementos,
Qm = {[q] : q es accesible desde q0 }
Fm = {[q] : q F}
m ([q], a) = [(q, a)]
qm
0 = [q0 ]
0
1
0 1
a b c
0
1 0
0 1
1 g
e f 1 0 h
1 0
a b c e f g
+ ++
c
+++e
++ f
(g,a)
b h, ae
+ g
(h,a)
(g,a)
+
+
+
+
+ h
(e,a) (h,e)
+
+
+
+
+
a b c e f g
0
1
0 1
{a, e} {b, h} c
0
1
0 0
f 1
g
89
90 Modelos de Computacin I
( S S )
( S + S ) c
a b
a A S
S b A a
a b a
y la palabra aabbaa. Esta palabra tiene una derivacin que tiene asociado el rbol de la Figura
4.2
Aunque toda cadena de derivaciones lleva asociado un solo rbol, ste puede provenir de
varias cadenas de derivaciones distintas. Sin embargo, siempre se pueden distinguir las siguien-
tes:
Derivacin por la izquierda.- Cuando en cada paso siempre se sustituye primero la prime-
ra variable (ms a la izquierda) de la palabra que tenemos.
Derivacin por la derecha.- Cuando en cada paso siempre se sustituye primero la ltima
variable (ms a la derecha) de la palabra que tenemos.
S S
A A A A
a a S a a S a a
A A A A
a a a a
La existencia en una gramtica de varias derivaciones para una misma palabra no produce
ningn problema, siempre que den lugar al mismo rbol. Sin embargo, existe otro problema que
si puede ser ms grave: la ambigedad. Una gramtica se dice ambigua si existen dos rboles
de derivacin distintos para una misma palabra. Esto es un problema, ya que la gramtica no
determina la estructura sintctica de los elementos de la palabra, no determina como se agrupan
los distintos elementos para formar la palabra completa.
Ejemplo 53 La gramtica,
S AA, A aSa, A a
es ambigua: la palabra a5 tiene dos rboles de derivacin distintos (ver Fig. 4.3).
Es suficiente que haya una palabra con dos rboles de derivacin distintos para que la gra-
mtica sea ambigua.
El lenguaje generado por esta gramtica no es inherentemente ambiguo. Esto quiere decir
que existe otra gramtica de tipo 2 no ambigua y que genera el mismo lenguaje. El lenguaje
generado es {a2+3i : i 0} y otra gramtica no ambigua que tambin geneta este lenguaje es
Ejemplo 54 La gramtica
E I, E I E, E E I, I a|b|c|d
es ambigua. La palabra a b c admite dos rboles de derivacin (ver Fig. 4.5).
Se puede eliminar la ambigedad eliminando la produccin E I E.
Cap. 4 Gramticas Libres de Contexto 93
a a U
a a a
E E
I E E I
a I E E I c
b I I b
c a
L = {an bn cm d m : n 1, m 1} {an bm cm d n : n 1, m 1}
Este lenguaje es de tipo 2 o libre del contexto, ya que puede puede generarse por la gramtica
S AB, A ab, A aAb,
B cd, B cBd,
S aCd, C aCd, C bDc,
C bc, D bDc, D bc
Entonces la palabra aabbccdd puede tener dos derivaciones (ver Fig. 4.6).
Aunque no lo demostraremos aqu esta ambigedad no se puede eliminar. Pueden existir
otras gramticas de tipo 2 que generen el mismo lenguaje, pero todas ser n ambiguas.
S S
A B a C d
a A b c B d a C d
a b c d b C c
b c
con ellas. Por este motivo interesa simplificarlas lo mas posible y definir unas formas normales
para las gramticas que las hagan mas homogneas.
S X w T
es decir si interviene en la derivacin de alguna palabra del lenguaje generado por la gramtica.
Una produccin se dice til si y solo si todos sus smbolos son tiles. Esto es equivalente a que
pueda usarse en la derivacin de alguna palabra del lenguaje asociado a la gramtica. Esta claro
que eliminando todos los smbolos y producciones intiles el lenguaje generado por la gramtica
no cambia.
El algoritmo para eliminar los smbolos y producciones intiles consta de dos pasos funda-
mentales:
1. Eliminar las variables desde las que no se puede llegar a una palabra de T y las produc-
ciones en las que aparezcan.
2. Eliminar aquellos smbolos que no sean alcanzables desde el estado inicial, S, y las pro-
ducciones en las que estos aparezcan.
1. V 0 = 0/
2. Para cada produccin de la forma A w, A se introduce en V 0 .
3. Mientras V 0 cambie
4. Para cada produccin B
5. Si todas las variables de pertenecen a V 0 ,
B se introduce en V 0
6. Eliminar las variables que esten en V y no en V
7. Eliminar todas las producciones donde aparezca una
variable de las eliminadas en el paso anterior
S AB, S a, A a
En el primer algoritmo se elimina B y la produccin S AB.
Entonces en el segundo se elimina la variable A y la produccin A a.
Sin embargo, si aplicamos primero el segundo algoritmo, entonces no se elimina nada. Al
aplicar despues el primero de los algoritmos se elimina B y la produccin S AB. En definitiva,
nos queda la gramtica
96 Modelos de Computacin I
S a, A a
donde todava nos queda la variable intil A.
S gAe, S aY B, S cY,
A bBY, A ooC, B dd,
B D, C jV B, C gi,
D n, U kW, V baX X X ,
V oV, W c, X fV, Y Y hm
Primero se aplica el algoritmo primero.
Inicialmente V 0 tiene las variables V 0 = {B, D,C,W }.
En la siguiente iteracin aadimos a V 0 las variables que se alcanzan desde estas: A y W .
V queda igual a {B, D,C,W, A,U }.
0
S gAe, A ooC,
B dd, B D, C gi,
D n, U kW, W c
A esta gramtica le aplicamos el segundo algoritmo
J = {S},V 00 = {S}, T 0 = 0/
Tomando S de J y ejecutando las instrucciones del ciclo principal nos queda
J = {A},V 00 = {S, A}, T 0 = {g, e}
Tomando A de J, tenemos
J = {C},V 00 = {S, A,C}, T 0 = {g, e, o}
Sacando C de J, obtenemos
/ 00 = {S, A,C}, T 0 = {g, e, o, i}
J = 0,V
Como J = 0/ se acaba el ciclo. Solo nos queda eliminar las variables intiles: B, D,U,W, los
smbolos terminales intiles: n, k, c, d, y las producciones donde estos aparecen. La gramtica
queda
Cap. 4 Gramticas Libres de Contexto 97
S gAe, A ooC, C gi
En esta gramtica solo se puede generar una palabra: googige.
Si el lenguaje generado por una gramtica es vaco, esto se detecta en que la variable S
resulta intil en el primer algoritmo. En ese caso se pueden eliminar directamente todas las
producciones, pero no el smbolo S.
1. H = 0/
2. Para cada produccion A , se hace H = H {A}
3. Mientras H cambie
4. Para cada produccion B A1 A2 . . . An ,
donde Ai H para todo i = 1, . . ., n, se hace H = H {B}
donde i = i si i 6 H
(i = i ) (i = ) si H
y no todos los i puedan ser nulos al mismo tiempo
S0 S, S0
S aHb, H aHb, H
AB
donde A, B V .
Veamos como se puede transformar una gramtica G, en la que 6 L(G), en otra gramtica
equivalente en la que no existen producciones unitarias.
Para ello, hay que partir de una gramtica sin producciones nulas.
Entonces, se calcula el conjunto H de parejas (A, B) tales que B se puede derivar a partir de
A: A B. Eso se hace con el siguiente algoritmo
1. H = 0/
2. Para toda produccion de la forma A B,
la pareja (A, B) se introduce en H.
3. Mientras H cambie
4. Para cada dos parejas (A, B), (B,C)
5. Si la pareja (A,C) no est en H
(A,C) se introduce en H
6. Se eliman las producciones unitarias
7. Para cada produccion A
100 Modelos de Computacin I
S AC, S BC, S A, S B, S C,
A a, C AB, C A, C B
El conjunto H est formado por las parejas {(S, A), (S, B), (S,C), (C, A), (C, B)}.
Entonces se eliminan las producciones
S A, S B, S C, C A, CB
S A, S B, A ab, A aHb
Las parejas resultantes en el conjunto H son {(S, A), (S, B)}. La gramtica sin producciones
unitarias equivalente es:
A BC, A a,
donde A, B,C V , a T .
Toda gram tica de tipo 2 que no acepte la palabra vaca se puede poner en forma normal de
Chomsky. Para ello lo primero que hay que hacer es suprimir las producciones nulas y unitarias.
Acontinuacin se puede ejecutar el siguiente algoritmo:
Ejemplo 62 Sea la Gramtica G = ({S, A, B}, {a, b}, P, S) dada por las producciones
Ca a, Cb b
y las anteriores se transforman en
S Cb A | Ca B, A Cb AA | AS | Ca , B Ca BB | Cb S | Cb b
Al aplicar el paso asociado al paso 5, la gramtica queda
S Cb A | Cb B, A Cb D1 | AS | a, D1 AA,
B Ca E1 | Cb S | b, E1 B, Ca a, Cb b
Con esto la gramtica ya est en forma normal de Chomsky.
102 Modelos de Computacin I
A a
donde a T , V . Toda gramtica de tipo 2 que no acepte la palabra vaca se puede poner
en forma normal de Greibach. Para ello hay que partir de una gramtica en forma normal de
Chomsky y aplicarle el siguiente algoritmo. En realidad no es necesario que la gramtica est en
forma normal de Chomsky. Basta que todas las producciones sean de uno de los tipos siguientes:
A a, a T, V .
A , V .
Claro est, en una gramtica en forma normal de Chomsky, todas las producciones son de
alguno de estos dos tipos.
En este algoritmo se supone que el conjunto de variables de la gramtica est numerado:
V = {A1 , . . . , Am }.
El algoritmo se basa en dos operaciones bsicas. La primera es eliminar una produccin,
A B de la gramtica G, donde A 6= B. Esto se hace con los siguientes pasos:
1. Eliminar A B
2. Para cada produccion B
3. Aadir A
4. Eliminar A A
5. Para cada produccion A no empieza pro A
6. Aadir A BA
A a, a T, V .
Ai A j , j > i, V .
B j Ai , V
1. Para cada k = 1, . . ., m
2. Para cada j = 1, . . ., k 1
3. Para cada produccion Ak A j
4. ELIMINA1 (Ak A j )
5. Si existe alguna produccion de la forma Ak Ak
6. ELIMINA2 (Ak )
1. Para cada i = m 1, . . ., 1
2. Para cada produccion de la forma Ai A j , j>i
3. ELIMINA1 (Ai A j )
4. Para cada i = 1, 2, . . ., m
5. Para cada produccion de la forma B j Ai .
6. ELIMINA1 (B j Ai )
Ejemplo 63 Pasar a forma normal de Greibach la gramtica dada por las producciones
A1 A 2 A3 , A2 A 3 A1 , A2 b, A 3 A 1 A2 , A3 a
Aplicamos ELIMINA1 a A3 A1 A2 .
Se elimina esta produccin y se aade: A3 A2 A3 A2
Queda:
A1 A2 A3 , A2 A3 A1 , A2 b,
A3 a, A 3 A 2 A3 A2
Aplicamos ELIMINA1 a A3 A2 A3 A2
Se elimina esta produccin y se aaden: A3 A3 A1 A3 A2 , A3 bA3 A2
Queda:
A1 A 2 A3 , A2 A 3 A1 , A2 b,
A3 a, A 3 A 3 A1 A3 A2 , A3 bA3 A2
Aplicamos ELIMINA2 a A3
Se aade B3 y las producciones B3 A1 A3 A2 , B3 A1 A3 A2 B3
Se elimina A3 A3 A1 A3 A2 .
Se aaden las producciones: A3 aB3 , A3 bA3 A2 B3
Queda:
A1 A 2 A3 , A2 A 3 A1 , A2 b, A3 a,
A3 bA3 A2 B3 A1 A3 A2 , B3 A1 A3 A2 B3 A3 aB3 ,
A3 bA3 A2 B3
Se aplica ELIMINA1 a A2 A3 A1 .
Se elimina esta produccin y se aaden:
A1 A 2 A3 , A2 b, A2 aA1 , A2 aB3 A1 ,
A2 bA3 A2 B3 A1 , A2 bA3 A2 A1 , A3 a, A3 bA3 A2 ,
B3 A 1 A3 A2 , B3 A1 A3 A2 B3 A3 aB3 , A3 bA3 A2 B3
Se aplica ELIMINA1 a A1 A2 A3 .
Se elimina esta produccin y se aaden:
Cap. 4 Gramticas Libres de Contexto 105
A2 b, A2 aA1 A2 aB3 A1 ,
A2 bA3 A2 B3 A1 , A2 bA3 A2 A1 , A3 a,
A3 bA3 A2 , B3 A 1 A3 A2 , B3 A 1 A3 A2 B3 ,
A3 aB3 , A3 bA3 A2 B3 , A1 bA3 ,
A1 aA1 A3 , A1 aB3 A1 A3 , A1 bA3 A2 B3 A1 A3 ,
A1 bA3 A2 A1 A3
Se aplica ELIMINA1 a B3 A1 A3 A2 Se elimina esta produccin y se aaden:
A2 b, A2 aA1 A2 aB3 A1 ,
A2 bA3 A2 B3 A1 , A2 bA3 A2 A1 A3 a,
A3 bA3 A2 , B3 A 1 A3 A2 B3 , A3 aB3 ,
A3 bA3 A2 B3 , A1 bA3 , A1 aA1 A3 ,
A1 aB3 A1 A3 , A1 bA3 A2 B3 A1 A3 , A1 bA3 A2 A1 A3
B3 bA3 A3 A2 , B3 aA1 A3 A3 A2 , B3 aB3 A1 A3 A3 A2 ,
B3 bA3 A2 B3 A1 A3 A3 A2 , B3 aB3 A1 A3 A3 A2 ,
Se aplica ELIMINA1 a B3 A1 A3 A2 B3 . Se elimina esta produccin y se aaden:
B3 bA3 A3 A2 B3 , B3 aA1 A3 A3 A2 B3 , B3 aB3 A1 A3 A3 A2 B3 ,
B3 bA3 A2 B3 A1 A3 A3 A2 B3 , B3 aB3 A1 A3 A3 A2 B3 ,
Resultado:
A2 b, A2 aA1 , A2 aB3 A1 ,
A2 bA3 A2 B3 A1 , A2 bA3 A2 A1 A3 a,
A3 bA3 A2 , A3 aB3 , A3 bA3 A2 B3 ,
A1 bA3 , A1 aA1 A3 , A1 aB3 A1 A3 ,
A1 bA3 A2 B3 A1 A3 , A1 bA3 A2 A1 A3 , B3 bA3 A3 A2 ,
B3 aA1 A3 A3 A2 , B3 aB3 A1 A3 A3 A2 , B3 bA3 A2 B3 A1 A3 A3 A2 ,
B3 aB3 A1 A3 A3 A2 , B3 bA3 A3 A2 B3 , B3 aA1 A3 A3 A2 B3 ,
B3 aB3 A1 A3 A3 A2 B3 , B3 bA3 A2 B3 A1 A3 A3 A2 B3 , B3 aB3 A1 A3 A3 A2 B3
106 Modelos de Computacin I
Captulo 5
107
108 Modelos de Computacin I
q0 es el estado inicial
Z0 es el smbolo inicial de la pila
F es el conjunto de estados finales
La funcin de transicin aplica cada estado, cada smbolo de entrada (incluyendo la cadena
vaca) y cada smbolo tope de la pila en un conjunto de posibles movimientos. Cada movimiento
parte de un estado, un smbolo de la cinta de entrada y un smbolo tope de la pila. El movimento
en s consiste en un cambio de estado, en la lectura del smbolo de entrada y en la subtitucin
del smbolo tope de la pila por una cadena de smbolos.
/ donde
Ejemplo 64 Sea el autmata M = ({q1 , q2 }, {0, 1, c}, {R, B, G}, , q1 , R, 0)
(q1 , 0, R) = {(q1 , BR)} (q1 , 1, R) = {(q1 , GR)}
(q1 , 0, B) = {(q1 , BB)} (q1 , 1, B) = {(q1 , GB)}
(q1 , 0, G) = {(q1 , BG)} (q1 , 1, G) = {(q1 , GG)}
(q1 , c, R) = {(q2 , R)} (q1 , c, B) = {(q2 , B)}
(q1 , c, G) = {(q2 , G)} (q2 , 0, B) = {(q2 , )}
(q2 , 1, G) = {(q2 , )} (q2 , , R) = {(q2 , )}
Cap. 5 Autmatas con Pila 109
Se llama descripcin instant nea o configuracin de un autmata con pila a una tripleta
(q, u, ) Q A B
(p, ) (q, a, Z)
C1 = T1 ` T ` Tn1 ` Tn = C2
Ejemplo 65 En el caso del autmata con pila del ejemplo anterior tenemos
(q1 , 011c110, R) ` (q1 , 11c110, BR) ` (q1 , 1c110, GBR) ` (q1 , c110, GGBR) `
(q2 , 110, GGBR) ` (q2 , 10, GBR) ` (q2 , 0, BR) ` (q2 , , R) ` (q2 , , )
En el primer caso, una palabra es aceptada, si se puede llegar a un estado final despues de
consumir la entrada. En el segundo criterio, los estados finales no tienen ningn significado, y
una palabra se acepta si cuando se termina de leer la entrada la pila se queda vaca.
Ejemplo 66 En el caso del ejemplo 64, la palabra 011c110 es aceptada por el autmata por el
criterio de pila de vaca. Es decir, 011c110 N(M). De hecho, el lenguaje aceptado por el este
autmata, segn el criterio de la pila vaca es N(M) = {wcw : w {0, 1} }. Para este mismo
autmata L(M) = 0, / ya que al no haber estados finales, nunca se puede verificar la condicin de
aceptacin. Una pequea modificacin del APND, lo tranformara en una autmata que acep-
tase el mismo lenguaje, pero ahora por el criterio de estados finales. Solo hay que considerar
M = ({q1 , q2 , q3 }, {0, 1, c}, {R, B, G}, , q1 , R, {q3 }) donde
Teorema 15 a) Si M es un APND entonces existe otro autmata M 0 , tal que N(M) = L(M 0 )
Demostracin.-
Se aaden dos estados nuevos, q00 y q f . El estado inicial de M 0 ser q00 y q f ser
estado final de M 0 .
Se aade un nuevo smbolo a B: Z00 . Este ser el nuevo smbolo inicial de la pila.
Se mantienen todas las transiciones de M, aadindose las siguientes:
(q00 , , Z00 ) = {(q0 , Z0 Z00 )}
(q, , Z00 ) = {(q f , Z00 )}, q Q
Cap. 5 Autmatas con Pila 111
Demostracin.- Supongamos que la gramtica no acepta la palabra vaca. En caso de que acepte
la palabra vaca se le eliminara y despues se podra transformar el autmata para aadir la
palabra vaca al lenguaje aceptado por el autmata.
Transformemos entonces la gramtica a forma normal de Greibach. El autmata con pila
/ donde la funcin de transicin viene dada por
correspondiente es M = ({q}, T,V, , q, S, 0)
(q, ) (q, a, A) A a P
Este autmata acepta por pila vaca el mismo lenguaje que genera la gramtica.
S aAA
A aS | bS | a
el autmata es
/
M = ({q}, {a, b}, {A, S}, , q, S, 0)
donde
(q, a, S) = {(q, AA)}
112 Modelos de Computacin I
Teorema 17 Si L = N(M) donde M es un APND, existe una gramtica libre del contexto G, tal
que L(G) = L.
Demostracin.-
/ tal que L = N(M). La gramtica G = (V, A, P, S) se construye
Sea M = (Q, A, B, , q0, Z0 , 0),
de la siguiente forma:
/ donde
Ejemplo 68 Si partimos del autmata M = ({q0 , q1 }, {0, 1}, {X , Z}, , q0 , Z0 , 0),
S [q0 , Z0 , q0 ]
S [q0 , Z0 , q1 ]
[q0 , X , q1 ] 1
[q1 , X , q1 ] 1
[q1 , X , q1 ]
[q1 , Z0 , q1 ]
Elimando smbolos y producciones intiles queda
S [q0 , Z0 , q1 ]
[q0 , Z0 , q1 ] 0[q0 , X , q1 ][q1 , Z0 , q1 ]
[q0 , X , q1 ] 0[q0 , X , q1 ][q1 , X , q1]
[q1 , X , q1 ] 1
[q1 , X , q1 ]
[q1 , Z0 , q1 ]
Despus de esta equivalencia un lenguaje independiente del contexto puede definirse indis-
tintamente como aquel que es generado por una gramtica de tipo 2 o bien como aquel que es
aceptado por un autmata con pila.
Ejemplo 69 El lenguaje aceptado por el autmata del Ejemplo 64 era L = {wcw 1 : w {0, 1} }.
El autmata era determinista, pero el criterio usado era el de estados finales. Sin embargo, el
autmata se puede convertir en otro tambin determinista y que acepte L por el criterio de
estados finales.
Sea el autmata M = ({q1 , q2 }, {0, 1, c}, {R, B, G}, , q1 , R, {q3 }) donde
El autmata tiene un slo estado final y lo que hemos hecho es que, al mismo tiempo que
dejamos la pila vaca, pasamos a ese estado final.
Teorema 18 Si L es aceptado por un autmata con pila determinista M por el criterio de pila
vaca, entonces existe otro autmata con pila determinista M 0 que acepta el mismo lenguaje por
el criterio de estados finales.
Demostracin.- La demostracin es la misma que la del apartado a) del Teorema 15. Slo hay
que tener en cuenta que en la transformacin que se realiza, si partimos de un autmata con pila
determinista M, entonces el autmata con pila que se obtiene, M 0 es tambin determinista.
El resultado inverso no es cierto. Hay lenguajes que son aceptados por autmatas con pila
por el criterio de estados finales, que no pueden ser aceptados por el criterio de pila vaca.
Cap. 5 Autmatas con Pila 115
Ejemplo 70 El siguiente autmata determinista acepta por el criterio de estados finales el len-
guaje de las palabras del lenguaje sobre {0, 1} con la misma cantidad de ceros que de unos,
donde q2 es el estado final y R el smbolo inicial de la pila.
Definicin 49 Un lenguaje L se dice que tiene la propiedad prefijo si no existen dos palabras
u, v L tales que u 6= v y una es un prefijo de la otra.
El siguiente teorema (que enunciamos sin demostracin) establece la relacin entre los dos
criterios de aceptacin en autmatas con pila deterministas.
Teorema 19 Un lenguaje L puede ser acepatado por un autmata con pila determinista por el
criterio de pila vaca si y solo si puede ser aceptado por un autmata con pila determinista por
el criterio de estados finales y tiene la propiedad prefijo.
L{$} = {u$ : u L}
Es como aadirle un smbolo de fin de palabra ($) a todas las palabras de L.
116 Modelos de Computacin I
Finalmente, es importante que quede claro que hay lenguajes que son independientes del
contexto, pero no deterministas. Como ejemplo, podemos considerar L = {u {0, 1} : u = u1 }.
No vamos a demostrar formalmente que este lenguaje no es deterministas. Intuitivamente, las
palabras de este lenguaje se reconocen metiendo smbolos en la pila hasta la mitad de la palabra
(primera fase), y despus de la mitad se sacan smbolos de la pila (segunda fase). Si aparece
el smbolo inicial de la pila se pasa a un estado final y la palabra es aceptada. El problema es
que cuando se est leyendo la palabra smbolo a smbolo no se sabe cuando estamos en la mitad
de la palabra y cuando hay que pasar de meter smbolos a sacar. Si perminitimos que haya no
determinismo esto se resuelve dando, en todo momento de la primera fase, la opcin de cambiar
de la primera a la segunda fase.
Captulo 6
117
118 Modelos de Computacin I
Lema 2 (Lema de Bombeo para lenguajes libres de contexto) Sea L un lenguaje libre de
contexto. Entonces, existe una constante n, que depende solo de L, tal que si z L y |z| n, z se
puede escribir de la forma z = uvwxy de forma que
1. |vx| 1
2. |vwx| n, y
3. i 0, uvi wxi y L
Demostracin.-
Slo vamos a indicar una idea de cmo es la demostracin. Supongamos que la gramtica
no tiene producciones nulas ni unitarias (si existieses siempre se podran eliminar).
Supongamos un rbol de derivacin de una palabra u generada por la gramtica. Es fcil
ver que si la longitud de u es suficientemente grande, en su rbol de derivacin debe de existir
un camino de longitud mayor que el nmero de variables. Sea N un nmero que garantice que
se verifica esta propiedad. En dicho camino, al menos debe de haber una variable repetida.
Supongamos que esta variable es A, y que la figura 6.1 representa el rbol de derivacin y dos
apariciones consecutivas de A.
|vx| contiene solamente smbolos a. En este caso para i = 0, uv 0 wx0 y = uwy debera
de pertenecer a L por el lema de bombeo. Pero uwy contiene n smbolos b, n smbolos c,
menos de n smbolos a, con lo que no podra pertenecer a L y se obtiene una contradiccin.
Cap. 6 Propiedades de los Lenguajes Libres del Contexto 119
... ...
w
|vx| contiene smbolos a y b. En este caso, uwy tendra ms smbolos c que a o b, con lo
que se llegara de nuevo a una contradiccin.
|vx| contiene smbolos b y c. En este caso, uwy tendra ms smbolos a que b o c, con lo
que se llegara tambin a una contradiccin.
En todo caso se llega a una contradiccin y el lema de bombeo no puede cumplirse, con lo
que L no puede ser libre de contexto.
Es importante sealar que el lema de bombeo no es una condicin suficiente. Es solo nece-
saria. As si un lenguaje verifica la condicin del lema de bombeo no podemos garantizar que
sea libre de contexto. Un ejemplo de uno de estos lenguajes es
Unin
Concatenacin
Clausura
Demostracin.-
Sean G1 = (V1 , T1 , P1 , S1 ) y G2 = (V2 , T2 , P2 , S2 ) dos gramticas libres de contexto y L1 y L2
los lenguajes que generan. Supongamos que los conjuntos de variables son disjuntos. Demos-
traremos que los lenguajes L1 L2 , L1 L2 y L1 son libres de contexto, encontrando gramticas de
tipo 2 que los generen.
Demostracin.- Sabemos que el lenguaje L = {ai bi ci |i 1} no es libre de contexto. Por otra parte
los lenguajes L2 = {ai bi c j |i 1 y j 1} y L3 = {ai b j c j |i 1 y j 1} si lo son. El primero de
ellos es generado por la gramtica:
S AB
A aAb|ab
B cB|c
Cap. 6 Propiedades de los Lenguajes Libres del Contexto 121
Demostracin.-
Es inmediato, ya que como la clase es cerrada para la unin, si lo fuese para el complemen-
tario, se podra demostrar, usando las leyes DeMorgan que lo es tambin para la interseccin.
a) vaco
b) finito
c) infinito
Demostracin.-
122 Modelos de Computacin I
a) De hecho, ya hemos visto un algoritmo para determinar si el lenguaje generado por una
gramtica de tipo 2 es vaco. En el la primera parte del algoritmo para eliminar smbolos y
producciones intiles de una gramtica, se determinaban las variables que podan generar
una cadena fromada exclusivamente por smbolos terminales. El lenguaje generado es
vaco si y solo si la variable inicial S es eliminada: no puede generar una palabra de
smbolos terminales.
b) y c) Para determinar si el lenguaje generado por una gramtica de tipo 2 es finito o infinito
pasamos la gramtica a forma normal de Chomsky, sin smbolos ni producciones intiles.
En estas condiciones todas las producciones son de la forma:
A BC, A a
Se construye entonces un grafo dirigido en el que los vrtices son las variables y en el
que para cada produccin de la forma A BC se consideran dos arcos: uno de A a B y
otro de A a C. Se puede comprobar que el lenguaje generado es finito si y solo si el grafo
construido de esta forma no tiene ciclos dirigidos.
S AB
A BC|a
B CC|b
Ca
S A
B C
Figura 6.2: grafo asociado a una gramtica de tipo 2 con lenguaje finito
S A
B C
Figura 6.3: grafo asociado a una gramtica de tipo 2 con lenguaje infinito
El Algoritmo de Cocke-Younger-Kasami
Existen algoritmos de pertenencia con una complejidad O(n3 ), donde n es la longitud de
la palabra de la que se quiere comprobar la pertenencia. Nosotros vamos a ver el algoritmo
124 Modelos de Computacin I
1. Para i = 1 hasta n
2. Calcular Vi1 = {A | A a es una produccion y el simbolo i-esimo de u es a}
3. Para j = 2 hasta n
4. Para i = 1 hasta n j + 1
5. Vi j = 0/
6. Para k = 1 hasta j 1
Vi j = Vi j {A | A BC es una produccion, B Vik y C Vi+k, jk }
Este algoritmo calcula para todo i, j(i {1, . . ., n}, j n j + 1), el conjunto de variables
Vi j que generan ui j , donde ui j es la subcadena de u que comienza en el smbolo que ocupa la
posicin i y que contiene j smbolos. La palabra u ser generada por la gramtica si la variable
inicial S pertenece al conjunto V1n .
Los clculos se pueden organizar en una tabla como la de la siguiente figura (para una palabra
de longitud 5):
u11 u21 u31 u41 u51
V14 V24
V15
En ella, cada Vi, j se coloca en una casilla de la tabla. En la parte superior se ponen los
smbolos de la palabra para la que queremos comprobar la pertenencia. La ventaja es que es fcil
localizar los emparejamientos de variables que hay que comprobar para calcular cada conjunto
Vi j . Se comienza en la casilla que ocupa la misma columna y est en la parte superior de la
tabla, y la casilla que est en la esquina superior derecha, emparejando todas las variables de
estas dos casillas. A continuacin elegimos como primera casilla la que est justo debajo de la
Cap. 6 Propiedades de los Lenguajes Libres del Contexto 125
primera anterior, y como segunda casilla la que ocupa la esquina superior derecha de la segunda
anterior. Este proceso se contina hasta que se eligen como primera casilla todas las que estn
encima de la que se est calculando. La siguiente figura ilustra el proceso que se sigue en las
emparejamientos (para un elemento de la cuarta fila, en una palabra de longitud 5).
u11 u21 u31 u41 u51
V21 V51
V22 V42
V23 V33
V24
El Algoritmo de Early
El algoritmo de Early es tambin de complejidad O(n3 ) en el caso general, pero es lineal
para gramticas LR(1), que son las que habitualmente se emplean para especificar la sintaxis de
las lenguajes de programacin.
Al contrario que el algoritmo de Cocke-Younger-Kasami que trata de obtener las palabras
de abajo hacia arriba (desde los smbolos terminales al smbolo inicial, el algoritmo de Early
comenzar en el smbolo inicial (funciona de arriba hacia abajo).
126 Modelos de Computacin I
Sea G una gramtica con smbolo inicial S y que no tenga producciones nulas ni unitarias.
Supondremos que u[i.. j] es la subcadena de u que va de la posicin i a la posicin j. El
algoritmo producir registros de la forma (i, j, A, , ), donde i y j son enteros y A es
una produccin de la gramtica. La existencia de un registro indicar un hecho y un objetivo. El
hecho es que u[i + 1.. j] es derivable a partir de y el objetivo es encontrar todos los k takes que
deriva a u[ j + 1..k]. Si encontramos uno de estos k sabemos que A deriva u[i + 1..k].
Para cada j, REGIST ROS[ j] contendr todos los registros existentes de la forma (i, j, A, , ).
El algoritmos consta de los siguiente pasos:
P1 Inicializacin.- Sea
P3 Avance.- Para cada registro (i, j, A, , c) en REGIST ROS[ j], donde c es un smbolo termi-
nal que aparece en la posicin j +1 de u, crear (i, j +1, A, c, ) e insertarlo en REGIST ROS[ j +
1].
Hacer j = j + 1.
P5 Si j < n ir a P2.
(0, 0, A, , BA),
(0, 0, A, , a), (0, 0, B, ,CC), (0, 0, B, , b), (0, 0,C, , AB), (0, 0,C, , a),
REGIST ROS[1] :(0, 1, B, b, ), (0, 1, S, B,C), (0, 1, A, B, A), (1, 1,C, , AB),
(1, 1,C, , a), (1, 1, A, , BA), (1, 1, A, , a), (1, 1, B, ,CC), (1, 1, B, , b)
REGIST ROS[2] :(1, 2,C, a, ), (1, 2, A, a, ), (0, 2, S, BC, ), (0, 2, A, BA, ),
(1, 2,C, A, B), (1, 2, B,C,C), (0, 2, S, A, B), (0, 2,C, A, B), (2, 2, B, ,CC),
(2, 2, B, , b), (2, 2,C, , AB), (2, 2,C, , a), (2, 2, A, , BA), (2, 2, A, , a)
REGIST ROS[3] :(2, 3,C, a, ), (2, 3, A, a, ), (1, 3, B,CC, ), (2, 3, B,C,C)
(2, 3,C, A, B), (1, 3, A, B, A)
Como (0, 3, S, , ) no est en REGIST ROS[3], la palabra baa no es generada
S T, S S + T, T F, T T F, F a, F b, F (S)
Palabra: (a + b) a
REGIST ROS[0] :(0, 0, S, , T ), (0, 0, S, , S+T ), (0, 0, T, , F), (0, 0, T, , T F), (0, 0, F, , a), (0, 0, F, , b), (
REGIST ROS[1] :(0, 1, F, (, S)), (1, 1, S, , T ), (1, 1, S, , S + T ), (1, 1, T, , F),
(1, 1, T, , T F), (1, 1, F, , a), (1, 1, F, , b), (1, 1, F, , (S)),
REGIST ROS[2] :(1, 2, F, a, ), (1, 2, T, F, ), (1, 2, S, T, ), (0, 2, F, (S, )), (1, 2, S, S, +T)
REGIST ROS[3] :(1, 3, S, S+, T ), (3, 3, T, , F), (3, 3, T, , T F), (3, 3, F, , a), (3, 3, F, , b), (3, 3, F, , (S))
REGIST ROS[4] :(3, 4, F, b, ), (3, 4, T, F, ), (1, 4, S, S+T, ), (3, 4, T, T, F), (0, 4, F, (S, )), (1, 4, S, S, +T)
REGIST ROS[5] :(0, 5, F, (S), ), (0, 5, T, F, ), (0, 5, S, T, ), (0, 5, T, T, F), (0, 5, S, S, +T ),
REGIST ROS[6] :(0, 6, T, T , F), (6, 6, F, , a), (6, 6, F, , b), (6, 6, F, , (S)),
REGIST ROS[7] :(6, 7, F, a, ), (0, 7, T, T F, ), (0, 7, S, T, ), (0, 7, T, T, F), (0, 7, S, S, +T )
Como tenemos (0, 7, S, T, ), entonces la palabra (a + b) c es generada.
Determinar si L(G1 ) = R.
128 Modelos de Computacin I
Determinar si G es ambigua.
Comprobar si L(G) puede ser aceptado por una autmata determinstico con pila.
Bibliografa
129
130 Modelos de Computacin I
[1] A.V. Aho, J.D. Ullman, Foundations of Computer Science. W.H. Freeman and Company,
New York (1992).
[2] R.V. Book, F. Otto, String rewriting systems. Springer-Verlag, Nueva York (1993).
[4] J. Carrol, D. Long, Theory of Finite Automata with an Introduction to Formal Languages.
Prentice Hall (1989)
[5] D.I. Cohen, Introduction to Computer Theory. John Wiley, Nueva York (1991).
[6] M.D. Davis, E.J. Weyuker, Computability, Complexity, and Languages. Academic Press
(1983)
[7] M.D. Davis, R. Sigal, E.J. Weyuker, Computability, Complexity, and Languages, 2 Edic..
Academic Press (1994)
[8] D. Grune, C.J. Ceriel, Parsing techniques: a practical guide. Ellis Horwood, Chichester
(1990).
[10] J.E. Hopcroft, R. Motwani, J.D. Ullman, Introduccin a la Teora de Autmatas, Lenguajes
y Programacin, 2a Ed. Addison Wesley (2002).
[11] J.E. Hopcroft, J.D. Ullman, Introduction to Automata Theory, Languages and Computa-
tion. Addison-Wesley (1979)
[12] J.M. Howie, Automata and Languages. Oxford University Press, Oxford (1991)
[13] H.R. Lewis, C.H. Papadimitriou, Elements of the Theory of Computation. Prentice Hall
(1981)
[14] B.I. Plotkin, J.L. Greenglaz, A.A. Gvarami, Algebraic structures in automata and database
theory World Scientific, River Edge (1992).
[15] G.E. Revesz, Introduction to Formal Laguages. Dover Publications, Nueva York (1991)
[16] T.A. Sudkamp, Languages and Machines. Addison Wesley, Reading (1988)