Está en la página 1de 130

Modelos de Computacin I

Serafn Moral
Departamento de Ciencias de la Computacin e I.A.
ETSI Informtica
Universidad de Granada

Modelos de Computacin I

ndice general
1. Introduccin
1.1. Introduccin Histrica . . . . . . . . . . . . . . .
1.2. Diferentes Modelos de Computacin . . . . . . . .
1.2.1. Autmatas y Lenguajes . . . . . . . . . . .
1.3. Lenguajes y Gramticas. Aspectos de su traduccin
1.3.1. Alfabetos y Palabras . . . . . . . . . . . .
1.3.2. Lenguajes . . . . . . . . . . . . . . . . . .
1.3.3. Gramticas Generativas . . . . . . . . . .
1.3.4. Jerarqua de Chomsky . . . . . . . . . . .

.
.
.
.
.
.
.
.

5
7
11
15
17
17
19
22
27

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

33
34
37
39
42
44
45
48
52
53
54
61
65
65
67
68

3. Propiedades de los Conjuntos Regulares


3.1. Lema de Bombeo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

71
72

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

2. Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3


2.1. Autmatas Finitos Determinsticos . . . . . . . . . . . . . . . . . . . . .
2.1.1. Proceso de c lculo asociado a un Autmata de Estado Finito . . .
2.1.2. Lenguaje aceptado por un Autmata de Estado Finito . . . . . . .
2.2. Autmatas Finitos No-Determinsticos (AFND) . . . . . . . . . . . . . .
2.2.1. Diagramas de Transicin . . . . . . . . . . . . . . . . . . . . .
2.2.2. Equivalencia de Autmatas Determinsticos y No-Determinsticos
2.3. Autmatas Finitos No Deterministicos con transiciones nulas . . . . . .
2.4. Expresiones Regulares . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4.1. Propiedades de las Expresiones Regulares . . . . . . . . . . . . .
2.4.2. Expresiones Regulares y Autmatas Finitos . . . . . . . . . . . .
2.5. Gramticas Regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6. Mquinas de Estado Finito . . . . . . . . . . . . . . . . . . . . . . . . .
2.6.1. Mquinas de Moore . . . . . . . . . . . . . . . . . . . . . . . .
2.6.2. Mquinas de Mealy . . . . . . . . . . . . . . . . . . . . . . . . .
2.6.3. Equivalencia de Mquinas de Mealy y Mquinas de Moore . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

Modelos de Computacin I
3.2. Operaciones con Conjuntos Regulares . . . . . . . . . .
3.3. Algoritmos de Decision para Autmatas Finitos . . . . .
3.4. Teorema de Myhill-Nerode. Minimizacin de Autmatas
3.4.1. Minimizacin de Autmatas . . . . . . . . . . .

4. Gramticas Libres de Contexto


4.1. Arbol de Derivacin y Ambigedad . . . . . . . . . . .
4.2. Simplificacin De Las Gramticas Libres De Contexto .
4.2.1. Eliminacin de Smbolos y Producciones Intiles
4.2.2. Producciones Nulas . . . . . . . . . . . . . . . .
4.2.3. Producciones Unitarias . . . . . . . . . . . . . .
4.3. Formas Normales . . . . . . . . . . . . . . . . . . . . .
4.3.1. Forma Normal de Chomsky . . . . . . . . . . .
4.3.2. Forma Normal de Greibach . . . . . . . . . . .
5. Autmatas con Pila
5.1. Definicin de Autmata con Pila . . . . . . . . . . .
5.1.1. Lenguaje aceptado por un autmata con pila .
5.2. Autmatas con Pila y Lenguajes Libres de Contexto .
5.3. Lenguajes Independientes del Contexto Deterministas

.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

6. Propiedades de los Lenguajes Libres del Contexto


6.1. Lema de Bombeo . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2. Propiedades de Clausura de los Lenguajes Libres de Contexto . .
6.3. Algoritmos de Decisin para los Lenguajes Libres de Contexto . .
6.3.1. Algoritmos de Pertenencia . . . . . . . . . . . . . . . . .
6.3.2. Problemas Indecidibles para Lenguajes Libres de Contexto

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

76
78
79
83

.
.
.
.
.
.
.
.

89
90
93
94
97
99
101
101
102

.
.
.
.

107
108
109
111
113

.
.
.
.
.

117
118
120
121
122
127

Captulo 1
Introduccin

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 mquinas 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 procedimiento general para poder resolver cualquier problema (matemtico) claramente formulado. Es
lo que podramos llamar El problema de la computacin terica. El avance de la tecnologa 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

Entonces nos preguntamos cosas como:


Para qu problemas no podemos escribir un programa ?
Podremos resolver algunos de estos problemas con otro lenguaje de programacin y/o con
otros computadores ?.
Adems, para los problemas que si tienen un programa asociado,
Se podr ejecutar el programa en un ordenador actual en un tiempo razonable ? (p.e., antes
de que llegue nuestra jubilacin).
Los ordenadores futuros podrn hacerlo ?
Trataremos de dar respuestas a algunas de estas cuestiones, a lo largo del desarrollo de la
asignatura.

1.1. Introduccin Histrica


Uno de los principales factores determinantes de la profunda revolucin experimentada en
el mbito de la ciencia, la tcnica y la cultura de nuestros das es el desarrollo de la informtica.
La palabra informtica (Informacin automtica), es un nombre colectivo que designa un
vasto conjunto de teoras y tcnicas cientficas -desde la matemtica abstracta hasta la ingeniera y la gestin administrativa- cuyo objeto es el diseo y el uso de los ordenadores. Pero
el ncleo terico ms slido y fundamental de todo ese conjunto de doctrinas y prcticas es la
llamada Teora de la Computabilidad, formalmente elaborada en los aos 30 y 40 gracias a los
descubrimientos de lgicos matemticos como Gdel, Turing, Post, Church, y Kleene, aunque
sus orgenes ms remotos datan de antiguo, con el planteamiento de la cuestin de saber si, al
cabo de cierto esfuerzo, el hombre podra llegar a un extremo en la investigacin en que, eventualmente, toda clase de problemas pudiera ser atacado por un procedimiento general de forma
que no requiriera el ms leve esfuerzo de imaginacin creadora para llevarlo a cabo. Si todo
queda determinado as en detalle, entonces sera obviamente posible abandonar la ejecucin del
mtodo a una mquina, mxime si la mquina en cuestin es totalmente automtica. Esta dea,
ambiciosa sin duda, ha influido poderosamente en diferentes pocas el desarrollo de la ciencia.
El propsito inicial es hacer precisa la nocin intuitiva de funcin calculable; esto es, una
funcin cuyos valores pueden ser calculados de forma automtica o efectiva mediante un algoritmo, y construir modelos tericos para ello (de computacin). As podemos obtener una
comprensin ms clara de esta idea intuitiva; y solo de esta forma podemos explorar matemticamente el concepto de computabilidad y los conceptos relacionadas con ella, tales como
decibilidad, etc...
La teora de la computabilidad puede caracterizarse, desde el punto de vista de las C.C.,
como la bsqueda de respuestas para las siguientes preguntas:
1)Qu pueden hacer los ordenadores (sin restricciones de ningn tipo )?
2) Cuales son las limitaciones inherentes a los mtodos automticos de clculo?.

Modelos de Computacin I

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 desarrollo 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
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 codificacin. 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 positivos, pueden considerarse como enunciados referentes a nmeros de cdigo de expresiones, o
2

Cap. 1

Introduccin

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 caracterizaciones independientes de la nocin de calculabilidad efectiva, en los trabajos de Church,
Kleene, Turing y Post. Los tres primeros mostraban problemas que eran efectivamente indecidibles; Church y Turing probaron adems que el Entscheidungsproblem era un problema indecidible.
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 funciones -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 Entscheidungsproblem 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 propiedad, 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 funcin -definible y funcin calculable por medio de una mquina de Turing coinciden. Naturalmente 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 procedimiento efectivo a travs de los llamados sistemas deductivos normales. Estos son sistemas
puramente formales en los que puede deducirse sucesiones finitas de smbolos como consecuencia 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 algoritmos 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 funciones 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 problemas 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 mediante 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 posibilidad 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 numerosos 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 funciones 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 Ackermann :
(0, y) = y + 1;
(x + 1, 0) = (x, 1);
(x + 1, y + 1) = (x, (x + 1, y)).

1.2. Diferentes Modelos de Computacin


Consideraremos las Ciencias de la Computacin como un cuerpo de conocimiento cuyo
principal objetivo es la resolucin de problemas por medio de un ordenador. Podemos citar las
siguientes definiciones:
a) La ACM (Asociation Computing Machinering):
la disciplina Ciencias de la Computacin es el estudio sistemtico de los procesos algortmicos que describen y transforman informacin: teora, anlisis, diseo, eficiencia, implementacin, y aplicacin.
b) Norman E. Gibbs y Allen B. Tucker (1986)indican que: no debemos entender que el objetivo
de las Ciencias de la Computacin sea la construccin de programas sino el estudio sistemtico
de los algoritmos y estructura de datos, especficamente de sus propiedades formales.
Para ser ms concretos (A. Berztiss 1987), vamos a considerar a las C.C. como un cuerpo de
conocimiento cuyo objetivo es obtener respuestas para las siguientes cuestiones:

12

Modelos de Computacin I

A) Qu problemas se pueden resolver mediante un ordenador?.


B) Cmo puede construirse un programa para resolver un problema?.
C) Resuelve realmente nuestro programa el problema?.
D) Cuanto tiempo y espacio consume nuestro problema?.
Analizando en profundidad los 4 puntos anteriores llegaremos a descubrir explcitamente los
diferentes contenidos abarcados por las C.C.
El planteamiento de la primera cuestin nos conduce a precisar el concepto de problema y
de lo que un ordenador es capaz de realizar.
Durante muchos aos se crey que si un problema poda enunciarse de manera precisa,
entonces con suficiente esfuerzo y tiempo sera posible encontrar un algoritmo o mtodo para
encontrar una solucin (o tal vez podra proporcionarse una prueba de que tal solucin no existe).
En otras palabras, se crea que no haba problema que fuera tan intrnsecamente difcil que en
principio nunca pudiera resolverse.
Uno de los grandes promotores de esta creencia fu el matemtico David Hilbert (18621943), quien en un congreso mundial afirm:
"Todo problema matemtico bien definido debe ser necesariamente susceptible de un planteamiento exacto, ya sea en forma de una respuesta real a la pregunta planteada o debido a la
constatacin de la imposibilidad de resolverlo, a lo que se debera el necesario fallo de todos los
intentos... "
El principal obstculo que los matemticos de principios de siglo encontraban al plantearse
estas cuestiones era concretar con exactitud lo que significa la palabra algoritmo como sinnimo
de mtodo para encontrar una solucin. La nocin de algoritmo era intuitiva y no matemticamente precisa.
Las descripciones dadas por los primeros investigadores tomaron diferentes formas, que pueden clasificarse ampliamente del siguiente modo:
(a) mquinas computadoras abstractas (definidas de modo preciso),
(b) construcciones formales de procedimientos de cmputo, y
(c) construcciones formales productoras de clases de funciones.
Las dos primeras caracterizaciones se refieren a la propia nocin de algoritmo (en principio no hay gran diferencia entre ambas ). La ltima d descripciones de la clase de funciones
computables mediante un algoritmo.
Ejemplos de (a) son los Autmatas y las mquinas de Turing, (diseadas por Turing en los
aos 30). Un ejemplo de (b) son los sistemas de Thue. Por ltimo, las funciones recursivas
constituyen el ejemplo clsico de (c).
El resultado crucial es que las diversas caracterizaciones de las funciones (parciales) computables mediante un algoritmo condujeron todas a una misma clase, a saber, la clase de las
funciones parciales recursivas. Esto es algo suceptible de demostracin, y que ha sido demostrado. Lo que no es suceptible de demostracin es que la clase de las funciones parciales recursivas
coincida con la clase de las funciones computables mediante un algoritmo. No obstante, a la luz

Cap. 1

Introduccin

13

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 especificado 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 utilizado, pues se expresaban en lenguaje mquina, directamente interpretable por el ordenador.
Surgi entonces la necesidad de idear otros mecanismos para construir y expresar los programas. El hilo conductor de tales mecanismos fu la abstraccin: separar el programa del ordenador 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 completamente 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

Alcanzado este punto, ya tenemos un programa que en principio es solucin de un problema.


Se plantea entonces la duda de que hacer en caso de que para el mismo problema seamos capaces
de construir otro programa que tambin lo resuelva. Cmo decidirnos por una u otra solucin?
o ms an, qu ocurre si el programa an siendo correcto consume demasiados recursos y es
inaceptable?. La respuesta viene dada a travs del punto D) en nuestro recorrido: el anlisis del
tiempo y espacio que necesita una solucin concreta; en definitiva, el estudio de la eficiencia de
los programas, midiendo la complejidad en espacio, por el nmero de variables y el nmero y
tamao de las estructuras de datos que se usan, y la complejidad en tiempo por el nmero de
acciones elementales llevadas a cabo en la ejecucin del programa.
Los problemas computables fueron entonces clasificados en dos tipos: problemas eficientemente computables, para los que exista un algoritmo eficiente; y problemas intratables, para los
que no existen algoritmos eficientes. La existencia de problemas intratables no ha sido probada,
si bin se han encontrado muchas evidencias a su favor.
Otra clase de problemas a considerar es la clase NP de los problemas para los que existia un algoritmo no determinstico en tiempo polinomial, y dentro de ella, los problemas NPcompletos.
Los intentos (desde los aos 40) de construir mquinas para modelizar algunas de las funciones del cerebro biolgico, ha permitido desarrollar mquinas capaces de aprender (y reproducir) funciones (o sistemas) cuya forma (o comportamiento) se desconoce, pero s conocemos una
serie de ejemplos que reflejan esta forma (o comportamiento). Estas mquinas llamadas Redes
Neuronales Artificiales tambin aportan su granito de arena al desarrollo de la computacin.
A menudo se utiliza la tcnica de reducir un problema a otro para comprobar si tiene o no
solucin efectiva. La estratgia en el caso de la respuesta negativa es la siguiente, si se reduce de
forma efectiva un problema sin solucin efectiva a otro problema (mediante una funcin calculable), entonces este nuevo problema tampoco tendr solucin efectiva. La razn es muy simple,
si tuviese solucin efectiva, componiendo el algoritmo solucin con el algoritmo de transformacin obtendramos una solucin para el problema efectivamente irresoluble. En sentido inverso,
si se reduce un problema a otro para el que se conoce una solucin efectiva, entonces componiendo se obtiene una solucin para el primer problema. Esta tcnica es muy til y se utiliza
a menudo. Por otro lado, esta msma tcnica es muy empleada en el campo de la complejidad
algortmica.
La Complejidad Algortmica trata de estudiar la relativa dificultad computacional de las
funciones computables. Rabin (1960) fu de los primeros en plantear la cuestin Qu quiere
decir que f sea ms difcil de computar que g?
J. Hartmanis and R.E. Stearns, en On the computational complexity of algorithms (1965)
introducen la nocin fundamental de medida de complejidad definida como el tiempo de computacin sobre una mquina de Turing multicinta.
Despus surge la definicin de funciones computables en tiempo polinomial, y se establece
una jerarqua de complejidad, los problemas NP, NP-duros y NP-completos. De todas formas, el

Cap. 1

Introduccin

15

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.

1.2.1. Autmatas y Lenguajes


El desarrollo de los ordenadores en la dcada de los 40, con la introduccin de los programas en la memoria principal, y posteriormente con los lenguajes de programacin de alto nivel,
propician la distincin entre lenguajes formales, con reglas sintcticas y semnticas rgidas, concretas y bin definidas, de los lenguajes naturales como el ingls, donde la sintaxis y la semntica
no se pueden controlar fcilmente. Los intentos de formalizar los lenguajes naturales, lleva a la
construccin de gramticas, como una forma de describir estos lenguajes, utilizando para ello
reglas de produccin para construir las frases del lenguaje. Se puede entonces caracterizar un
Lenguaje, mediante las reglas de una gramtica adecuada.
Los trabajos de McCulloch y Pitts (1943) describen los clculos lgicos inmersos en un
dispositivo (neurona artificial) que haban diseado para simular la actividad de una neurona
biolgica. El dispositivo reciba o no, una serie de impulsos elctricos por sus entradas que se
ponderaban, y produca una salida binaria (existe pulso elctrico o no). Las entradas y salidas se
podan considerar como cadenas de 0 y 1, indicando entonces la forma de combinar la cadena de
entrada para producir la salida. La notacin utilizada es la base para el desarrollo de expresiones
regulares en la descripcin de conjuntos de cadenas de caracteres.
C. Shannon (1948) define los fundamentos de la teora de la informacin, y utiliza esquemas
para poder definir sistemas discretos, parecidos a los autmatas finitos, relacionndoloss con
cadenas de Markov, para realizar aproximaciones a los lenguajes naturales.
J. Von Neumann (1948) introduce el termino de teora de autmatas, y dice sobre los trabajos de McCulloch-Pitts: .. el resultado ms importante de McCulloch-Pitts, es que cualquier
funcionamiento en este sentido, que pueda ser definido en todo, lgicamente, estrctamente y
sin ambiguedad, en un nmero finito de palabras, puede ser realizado tambin por una tal red
neuronal formal
La necesidad de traducir los algortmos escritos en lenguajes de alto nivel al lenguaje mquina, propicia la utilizacin de mquinas como los autmatas de estados finitos, para reconocer
si una cadena determinada pertenece (es una frase de) a un lenguaje concreto, usando para ello
la funcin de transicin de estados, mediante un diagrama de transicin o una tabla adecuada.
Tenemos as otra forma de caracterizar los lenguajes, de acuerdo con mquinas automticas que
permitan reconocer sus frases.
S.C. Kleene, en 1951, realiza un informe (solicitado por la RAND Corporation) sobre los
trabajos de McCulloch-Pitts, que se publica en 1956. En este informe, Kleene demuestra la
equivalencia entre lo que l llama "dos formas de definir una misma cosa", que son los sucesos
regulares (que se pueden describir a partir de sucesos bases y los operadores unin, concatenacin e iteracin (*) ), es decir, expresiones regulares, y sucesos especificados por un autmata

16

Modelos de Computacin I

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 construir 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 calculables 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 lenguajes 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 lenguajes 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 clasificarse 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, establecidas 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 gramticas 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

puede ser analizado mediante alguna mquina de las citadas anteriormente.


Los temas sobre autmatas, computabilidad, e incluso la complejidad algortmica fueron
incorporndose a los curriculum de ciencias de la computacin de diferentes universidades, mediada la dcada de los 60. Esta incorporacin puso de manifiesto que las ciencias de la computacin haban usado gran cantidad de ideas de muy diferentes campos para su desarrollo, y que la
investigacin sobre aspectos bsicos poda cooperar y aumentar los avances de la computacin.

1.3. Lenguajes y Gramticas. Aspectos de su traduccin


Una idea bsica en programacin es la enorme diferencia entre los lenguajes naturales (LN)
y los lenguajes de programacin (LP), fundamentalmente porque los LP tienen unas reglas de
sintxis y de semntica mucho ms rgidas, lo que les hace manejables en los computadores.
En los LN, las reglas gramaticales se desarrollan para reglamentar"de alguna forma la propia
evolucin del lenguaje. Se trata pues de "explicar"la estructura del lenguaje, y no delimitarla.
Esto obliga a reglas muy complejas y que se quedan obsoletas rpidamente.
Los lenguajes ms formalizados (LF) como los lengujaes de progrmacin o el lenguaje matemtico, tienen unas estructuras claramente definidas y determinadas por sus reglas gramaticales
(sintcticas y semnticas). Esto ha posibilitado y propiciado la construccin de traductores automticos para estos lenguajes.
En el proceso de traduccin que realizan los compiladores, la primera tarea que se realiza, es
la identificacin de tokens como bloques u objetos individuales contenidos en el "diccionario"del
lenguaje (p.e., identificadores, palabras claves, operadores, .... ). Esto lo realiza un mdulo del
compilador que es el analizador de lxico, que transforma el programa fuente, en una secuencia
de tokens representando cada uno un solo objeto.
El siguiente paso, realizado por el analizador sintctico, es identificar los tokens que forman
parte de cada instruccin y ver que estas estn correctamente escritas. El tercer paso es generar
el cdigo con el generador de cdigo.
Los dos primeros pasos requieren imperiosamente unas reglas gramaticaleslaramente definidas, en las que apoyarse para la automatizacin del proceso de traduccin. Generalmente
se utilizan en estas tares, mquinas (o algoritmos) como los autmatas, que estudiaremos ms
adelante.
Vamos a precisar previamente, los conceptos bsicos relativos a Lenguajes y Gramticas
formales.

1.3.1. Alfabetos y Palabras


Los dispositivos que vamos a estudiar trabajan con smbolos y cadenas (o palabras) fundamentalmente. En este apartado vamos a definir de forma precisa estos conceptos.

18

Modelos de Computacin I

Definicin 1 Un alfabeto es un conjunto finito A. Sus elementos se llamarn smbolos o letras.


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 minsculas: 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.
Ejemplo 1 A = {0, 1} es un alfabeto con smbolos 0 y 1.
Tambin es un alfabeto B = {< 0, 0 >, < 0, 1 >, < 1, 0 >, < 1, 1 >} con smbolos < 0, 0 >
, < 0, 1 >, < 1, 0 > y < 1, 1 >. En este caso no hay que confundir los smbolos del alfabeto
B con los simbolos del lenguaje (o ms precisamente meta-lenguaje) que usamos para expresarnos todos los das. Son dos cosas totalmente distintas. Nosotros para comunicarnos usamos
un lenguaje que tiene unos smbolos que son las letras del alfabeto latino, los nmeros, las letras del alfabeto griego, y una serie de smbolos especiales propios del lenguaje matemtico
(el meta-lenguaje). Con este lenguaje tambin definimos los conceptos de alfabeto y smbolo.
Ahora bin, los smbolos de un lenguaje no tienen que ser algunos de los usados en el metalenguaje, sino que cada uno puede estar formado por 0, 1 o ms smbolos del metalenguaje. De
hecho como en este ltimo caso (lenguaje B), un smbolo del alfabeto definido est formado por
varios smbolos del metalenguaje. Para que esto no de lugar a confusin, siempre que ocurra
una situacin similar, encerraremos los smbolos entre ngulos < . . . >. Esto indicar que todo
lo que aparece es un nico smbolo.
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 3 Si u A , entonces la logitud de la palabra u es el nmero de smbolos de A que
contiene. La longitud de u se nota como |u|. Es decir si u = a1 . . . an , entonce |u| = n.
Definicin 4 La palabra vaca es la palabra de longitud cero. Es la misma para todos los alfabetos, y se nota como .
El conjunto de cadenas sobre un alfabeto A excluyendo la cadena vaca se nota como A + .
Usaremos indistintamente palabra o cadena. Si no hay confusin, la palabra formada por un
solo smbolo se representa por el propio smbolo.
La operacin fundamental en el conjunto de las cadenas A es la concatenacin.

Cap. 1

Introduccin

19

Definicin 5 Si u, v A , u = a1 . . . an , v = b1 . . . bn , se llama concatenacin de u y v a la cadena


u.v (o simplemente uv) dada por a1 . . . an b1 . . . bm .
La concatenacin tiene las siguientes propiedades:
1. |u.v| = |u| + |v|, u, v A
2. Asociativa.- u.(v.w) = (u.v).w, u, v, w A
3. Elemento Neutro.- u. = .u = u, u A
Los propiedades asociativa y elemento neutro dotan al conjunto de las cadenas con la operacin 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
Definicin 7 Si u = a1 . . . an A , entonces la cadena inversa de u
es la cadena u1 = an . . . a1 A .

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:
L1 = {a, b, }, smbolos a, b y la cadena vaca
L2 = {ai bi | i = 0, 1, 2, . . .}, palabras formadas de una sucesin de smbolos a, seguida de
la misma cantidad de smbolos b.
L3 = {uu1 | u A }, palabras formadas con smbolos del alfabeto A y que consisten de
una palabra, seguida de la misma palabra escrita en orden inverso.

20

Modelos de Computacin I
2

L4 = {an | n = 1, 2, 3, . . .}, palabras que tienen un nmero de smbolos a que sea cuadrado
perfecto, pero nunca nulo.
Aparte de las operaciones de unin e interseccin de lenguajes, dada su condicin de conjuntos existe la operacin de concatenacin.
Definicin 9 If L1 , L2 son dos lenguajes sobre el alfabeto A, la concatenacin de estos dos
lenguajes es el que se obtiene de acuerdo con la siguiente expresin,
L1 L2 = {u1 u2 | u1 L1 , u2 L2 }
Ejemplo 3 Si L1 = {0i 1i : i 0},

L2 = {1i 0i : i 0} entonces,
L1 L2 = {0i 1i 1 j 0 j : i, j 0}

Propiedades:
/ = 0/ (0/ es el Lenguaje que contiene 0 palabras)
L0/ = 0L
Elemento Neutro.- {}L = L{} = L
Asociativa.- L1 (L2 L3 ) = (L1 L2 )L3
La iteracin de lenguajes se define como en las palabras, de forma recursiva:
Definicin 10 Si L es un lenguaje sobre el alfabeto A, entonces la iteracin de este lenguaje se
define de acuerdo con las siguientes expresiones recursivas,
L0 = {}
Li+1 = Li L
Definicin 11 Si L es un lenguaje sobre el alfabeto A, la clausura de Kleene de L es el lenguaje
obtenido de acuerdo con la siguiente expresin:
L =

Li

i0

Definicin 12 Si L es un lenguaje sobre el alfabeto A, entoces L+ es el lenguaje dado por:


L+ =

i1

Li

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 precedido de un cero y distintas de la palabra vaca.
Definicin 13 Si L es un lenguaje, el lenguaje inverso de L es el lenguaje dado por:
L1 = {u | u1 L}
Definicin 14 Si L es un lenguaje sobre el alfabeto A, entonces la cabecera de L es el lenguaje
dado por
CAB(L) = {u | u A y v A tal que uv L}
Es decir, la CAB(L) contiene todas las palabras del lenguaje y aquellas otras que tengan
como primeros caracteres, alguna palabra del mismo.
Ejemplo 5 Si L = {0i 1i : i 0}, entonces CAB(L) = {0i 1 j : i j 0} .
Definicin 15 Si A1 y A2 son dos alfabetos, una aplicacin
h : A1 A2
se dice que es un homomorfismo si y solo si
h(uv) = h(u)h(v)
Consecuencias:
h() =
h(a1 . . . an ) = h(a1 ) . . . h(an )
Ejemplo 6 Si A1 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, A2 = {0, 1}
la siguiente aplicacin es un homorfismo

22

Modelos de Computacin I
h(0) = 0000,
h(4) = 0100,
h(8) = 1000

h(1) = 0001,
h(5) = 0101,
h(9) = 1001

h(2) = 0010,
h(6) = 0110,

h(3) = 0011
h(7) = 0111

Ejemplo 7
Si A es un afabeto, la aplicacin que transforma cada palabra u A en su
inversa no es un homomorfismo de A en A , ya que la transformacin no se hace smbolo
a smbolo.
La transformacin que a cada palabra sobre {0, 1} le aade 00 al principio y 11 al
final no es un homomorfismo. Si 0 se transforma en 00011, entonces 00 se debera de
transformar en 0001100011 si fuese un homomorfismo, y en realidad se transforma en
000011.

1.3.3. Gramticas Generativas


Desde un punto de vista matemtico una gramtica se define de la siguiente forma:
Definicin 16 Una gramtica generativa es un cuadrupla (V, T, P, S) en la que
V es un alfabeto, llamado de variables o smbolos no terminales. Sus elementos se suelen
representar con letras maysculas.
T es un alfabeto, llamado de smbolos terminales. Sus elementos se suelen representar
con letras minsculas.
P es un conjunto de pares (, ), llamados reglas de produccin, donde , (V T ) y
contiene, al menos un smbolo de V .
El par (, ) se suele representar como .
S es un elemento de V , llamado smbolo de partida.
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 . . ..
Ejemplo 8 Sea la gramtica (V, T, P, S) dada por los siguientes elementos,
V = {E}
T = {+, , (, ), a, b, c}

Cap. 1

Introduccin

23

P est compuesto por las siguientes reglas de produccin


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.
Definicin 17 Dada una gramtica G = (V, T, P, S) y dos palabras , (V T ) , decimos que
es derivable a partir de en un paso ( = ) si y solo si existe una produccin tal
que
es una subcadena de .
se puede obtener a partir de , cambiando la subcadena for .
Ejemplo 9 Haciendo referencia a la gramtica del ejemplo anterior, tenemos las siguientes
derivaciones,
E = E + E = (E) + E = (E) + (E) = (E E) + (E) = (E E) + (E E)
Definicin 18 Dada una gramtica G = (V, T, P, S) y dos palabras , (V T ) , decimos que

es derivable de ( = ), si y solo si existe una sucesin de palabras 1 , . . ., n (n 1)


tales que
= 1 = 2 = . . . = n =
Ejemplo 10 En el caso anterior podemos decir que (E E) + (E E) es derivable a partir de
E:

E = (E E) + (E E)
.
Definicin 19 Se llama lenguaje generado por una gramtica G = (V, T, P, S) al conjunto de
cadenas formadas por smbolos terminales y que son derivables a partir del smbolo de partida.
Es decir,

L(G) = {u T | S = u}

24

Modelos de Computacin I

Ejemplo 11 En el caso de la gramtica de los ejemplos anteriores (E E) + (E E) no pertenece al lenguaje generado por G, ya que hay smbolos que no son terminales. Sin embargo,
(a + c) (a + b) si pertenece a L(G), ya que se puede comprobar que es derivable a partir de E
(smbolo de partida) y solo tiene smbolos terminales.
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 produccin, 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,
A bAA,

S bA,
B b,

A a,
B bS,

A aS,
B aBB

y el smbolo de partida es S.
Esta gramtica genera el lenguaje
L(G) = {u | u {a, b}+ y Na (u) = Nb (u)}
donde Na (u) y Nb (u) son el nmero de apariciones de smbolos a y b, en u, respectivamente.
Esto es fcil de ver interpretando que,
S genera (o produce) palabras con igual nmero de a que de b.
A genera palabras con una a de ms.
B produce palabras con una b de ms.
S genera palabras con igual nmero de a que de b.
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

Cuando se empieza a generar una palabra, comenzamos con S y tenemos la igualdad


Na+A (S) = Nb+B (S) = 0.
Tambin se puede comprobar que si 0 se obtiene de en un paso de derivacin y
Na+A () = Nb+B (), entonces Na+A (0 ) = Nb+B (0 )
Si la condicin de igualdad de Na+A y Nb+B se verifica al principio y, si se verifica antes
de un paso, entonces se verifica despus de aplicarlo, necesariamente se verifica al final
de la derivacin. Si hemos derivado u, entonces Na+A (u) = Nb+B (u).
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 algoritmo genera las palabras por la izquierda obteniendo, en cada paso, un nuevo smbolo de la
palabra a generar.

Para generar una a


Si a ltimo smbolo de la palabra, aplicar A a
Si no es el ltimo smbolo
Si la primera variable es S aplicar S aB
Si la primera variable es B aplicar B aBB
Si la primera variable es A
 Si haya ms variables aplicar A a
 Si no hay ms, aplicar A aS
Para generar una b
Si b ltimo smbolo de la palabra, aplicar B b
Si no es el ltimo smbolo
Si la primera variable es S aplicar S bA
Si la primera variable es A aplicar A bAA
Si la primera variable es B
 Si haya ms variables aplicar B b
 Si no hay ms, aplicar B bS

26

Modelos de Computacin I

Las condiciones que garantizan que todas las palabras son generadas mediante este algoritmo son las siguientes:
Las palabras generadas tienen primero smbolos terminales y despus variables.
Se genera un smbolo de la palabra en cada paso de derivacin
Las variables que aparecen en la palabra pueden ser:
Una cadena de A (si hemos generado ms b que a)
Una cadena de B (si hemos generado ms a que b)
Una S si hemos generado las mismas a que b
Antes de generar el ltimo smbolo tendremos como variables:
Una A si tenemos que generar a
Una B si tenemos que generar b
Entonces aplicamos la primera opcin para generar los smbolos y la palabra queda
generada.
Ejemplo 13 Sea G = ({S, X ,Y }, {a, b, c}, P, S) donde P tiene las reglas,
S abc
bY Y b

S aX bc
aY aaX

X b bX
aY aa

X c Y bcc

Esta gramtica genera el lenguaje: {an bn cn | n = 1, 2, . . .}.


Para ver esto observemos que S en un paso, puede generar abc aX bc. As que abc L(G).
A partir de aX bc solo se puede relizar la siguiente sucesin de derivaciones,
aX bc = abX c = abY bcc = aY bbcc
En este momento podemos aplicar dos reglas:
aY aa, en cuyo caso producimos aabbcc = a2 b2 c2 L(G)
aY aaX , en cuyo caso producimos aaX bbcc
A partir de aaX bbcc, se puede comprobar que necesariamente llegamos a a 2Y b3 c3 . Aqu
podemos aplicar otra vez las dos reglas de antes, produciendo a 3 b3 c3 a3 X b3 c3 . As, mediante
un proceso de induccin, se puede llegar a demostrar que las nicas palabras de smbolos
terminales que se pueden llegar a demostrar son an bn cn , n 1.

Cap. 1

Introduccin

27

1.3.4. Jerarqua de Chomsky


De acuerdo con lo que hemos visto, toda gramtica genera un nico lenguaje, pero distintas
gramticas pueden generar el mismo lenguaje. Podramos pensar en clasificar las gramticas por
el lenguaje que generan, por este motivo hacemos la siguiente definicin.
Definicin 20 Dos gramticas se dicen debilmente equivalentes si generan el mismo lenguaje.
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.
Definicin 21 Una gramtica se dice que es de
Tipo 0 Cualquier gramtica. Sin restricciones.
Tipo 1 Si todas las producciones tienen la forma
1 A2 1 2
donde 1 , 2 , (V T ) , A V, y 6= , excepto posiblemente la regla S , en cuyo
caso S no aparece a la derecha de las reglas.
Tipo 2 Si cualquier produccin tiene la forma
A
dode A V, (V T ) .
Tipo 3 Si toda regla tiene la forma
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

Figura 1.1: Estructura de las clases de lenguajes


Se puede demostar que L3 L2 L1 L0 .
Las gramticas de tipo 0 se llaman tambin gramticas con estructura de frase, por su origen lingustico. Los lenguajes aceptados por las gramticas de tipo 0 son los recursivamente
enumerables.
Las gramticas de tipo 1 se denominan dependientes del contexto. Los lenguajes aceptados
por estas gramticas son los lenguajes dependientes del contexto.
Las gramticas de tipo 2, as como los lenguajes generados, se llaman independientes del
contexto.
Las gramticas de tipo 3 se denominan regulares o de estado finito. Los lenguajes aceptados
por estas gramticas se denominan conjuntos regulares.
Los homorfismos son tiles para demostrar teoremas.
Teorema 1 Para toda gramtica G = (V, T, P, S) podemos dar otra gramtica G 0 = (V 0 , T, P0 , S)
que genere el mismo lenguaje y tal que en la parte izquierda de las reglas solo aparezcan variables.
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 , entonces 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
G = ({S}, {a, b}, {S , S aSb}, S)
genera el lenguaje
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
Aa SaB

bB a
B SA

Ab SBb
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 lenguajes
a) L = {ai b j | i, j IN , i j}
Solucin:
S aSb
S
S Sb

b) L = {ai b j a j bi | i, j IN }
Solucin:
S aSb
S B,

B bBa,

c) L = {ai bi a j b j | i, j IN }
Solucin:
Podemos generar {ai bi | i IN } con:
S1 aS1 b,

S1

El lenguaje L se puede generar aadiendo:


S S 1 S1
siendo S el smbolo inicial.

Cap. 1

Introduccin

31

d) L = {ai bi | i IN } {bi ai | i IN }
Solucin:
Podemos generar {ai bi | i IN } con:
S1 aS1 b,

S1

S2 bS2 a,

S2

y {bi ai | i IN } con
El lenguaje L se puede generar aadiendo:
S S1 ,

S S2

siendo S el smbolo inicial.


e) L = {uu1 | u {a, b} }
Solucin:
S aSa,

S bSb,

f) L = {ai b j ci+ j | i, j IN }
Solucin:
S aSc,

S B,

B bBc,

donde N es el conjunto de los nmeros naturales incluyendo el 0.


4. Determinar si la gramtica G = ({S, A, B}, {a, b, c, d}, P, S) donde P es el conjunto de
reglas de produccin
S AB
B cB

A Ab
Bd

Aa

32

Modelos de Computacin I
genera un lenguaje de tipo 3.
Solucin:
Esta gramtica genera el lenguaje: {abi c j d : i, j IN }, y este lenguaje se puede generar
mediante la gramtica:
S aB,

B bB,

B C,

C cC,

Cd

Como esta gramtica es de tipo 3, el lenguaje lo es.

Captulo 2
Autmatas Finitos, Expresiones Regulares
y Gramticas de tipo 3

33

34

Modelos de Computacin I

Los autmatas finitos son capaces de reconocer solamente, un determinado tipo de lenguajes, llamados Lenguajes Regulares, que pueden ser caracterizados tambin, mediante un tipo de
gramticas llamadas tambin regulares. Una forma adicional de caracterizar los lenguajes regulares, 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.

2.1. Autmatas Finitos Determinsticos


Antes de dar una definicin formal de lo que es un autmata vamos a dar una descripcin
intuitiva mediante un ejemplo.
Ejemplo 14 Vamos a disear un autmata que reconozca el paso de un alumno por una asignatura, 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 convocatorias por ao y se termina cuando se aprueba la asignatura.
Habr un alfabeto de entrada contendr los siguientes elementos:
P: El alumno se presenta a un examen.
N: El alumno no se presenta a un examen.
A: El alumno aprueba un examen.
S: El alumno suspende un examen.

Cap. 2

Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3


S

Sept1.

Inicio

Febr.

Fin2

Dec1

A
N

35

Fin1
N

Dec2

Sept2.

Dec3

N
P

Dic.

Fin3

Figura 2.1: Paso de un alumno por una asignatura


La secuencia se ilustra en la figura 2.1. Comenzamos en un estado, Inicio. A continuacin
decidimos si presentarnos en Febrero o no. Si nos presentamos y aprobamos, terminamos. Si no
nos presentamos o suspendemos, tenemos que decidir si nos presentamos en septiembre, pero
como hay que controlar que un estudiante no se presente a tres convocatorias en un ao, los
estados son distintos en ambos casos. Si en septiembre aprobamos, terminamos. Si suspendemos y ya nos habamos presentado en febrero, comenzamos de nuevo. En otro caso, podemos
decidir si presentarnos en diciembre. Si aprobamos, terminamos y si suspendemos, empezamos
de nuevo.
Este esquema corresponde a un autmada finito. Se caracteriza por una estructura de control que depende de un conjunto finito de estados. Se pasa de unos a otros leyendo smbolos del
alfabeto de entrada. Este autmata representa una versin simplificada del problema real, ya
que no controla el nmero total de convocatorias. Un autmata para todas las asignaturas se
podra construir uniendo autmatas para cada una de las asignaturas, pero teniendo en cuenta
relaciones como requisitos entre las mismas.
Definicin 23 Un autmata finito es una quintupla M = (Q, A, , q0 , F) en que
Q es un conjunto finito llamado conjunto de estados

36

Modelos de Computacin I
1 0 0
q0

q1

Figura 2.2: Autmata de Estado Finito


A es un alfabeto llamado alfabeto de entrada
es una aplicacin llamada funcin de transicin
: QA Q
q0 es un elemento de Q, llamado estado inicial
F es un subconjunto de Q, llamado conjunto de estado finales.
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.
Definicin 24 El diagrama de transicin de un Autmata de Estado Finito es un grafo en el que
los vrtices representan los distintos estados y los arcos las transiciones entre los estados. Cada
arco va etiquetado con el smbolo que corresponde a dicha transicin. El estado inicial y los
finales vienen sealados de forma especial (por ejemplo, con un ngulo el estado inicial y con
un doble crculo los finales).
Ejemplo 15 Supongamos el autmata M = (Q, A, q0 , , F) donde
Q = {q0 , q1 , q2 }
A = {a, b}

Cap. 2

Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3

37

a
a

q0

q1
b

b
q2

Figura 2.3: Diagrama de Transicin Asociado a un Autmata de Estado Finito


La funcin de transicin est definida por las siguientes igualdades:
(q0 , a) = q1
(q1 , a) = q1
(q2 , a) = q1

(q0 , b) = q2
(q1 , b) = q2
(q2 , b) = q0

F = {q1 }
El diagrama de transicin viene expresado en la Figura 2.3.

2.1.1. Proceso de c lculo asociado a un Autmata de Estado Finito


Para describir formalmente el comportamiento de un autmata de estado finito, vamos a
introducir el concepto de configuracin y paso de clculo.
Definicin 25 Si M = (Q, A, , q0 , F) es un autmata de estado finito una configuracin es un
elemento del producto cartesiano Q A .
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.
Definicin 26 Si M = (Q, A, , q0 , F) es una autmata finito determinista y u A es una palabra, entonces se llama configuracin inicial asociada a esa palabra a la configuracin (q 0 , u).

38

Modelos de Computacin I

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.
Finalmente, definimos la relacin de clculo entre dos configuraciones.
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
Definicin 29 Si M = (Q, A, , q0 , F) es un autmata de estado finito se define la funcin de
transicin asociada a palabras, como la funcin
0 : Q A Q
dada por
0 (q, ) = q
0 (q, aw) = 0 ((q, a), w),

w A , a A

Ejemplo 16 En el caso del autmata del ejemplo 15, tenemos que


0 (q0 , aba) = 0 ((q0 , a), ba) = 0 (q1 , ba) = 0 ((q1 , b), a) =
0 (q2 , b) = 0 ((q2 , b), ) = 0 (q1 , ) = q1
Desde el punto de vista intuitivo, representa el comportamiento del autmata en un paso
de clculo, ante la lectura de un carcter. Esto viene dado por el estado al que evoluciona el
autmata. La cabeza de lectura siempre se mueve a la derecha. 0 representa una sucesin de
clculos del autmata: a qu estado evoluciona despus de haber ledo una cadena de caracteres.

La relacin entre 0 y ` es la siguiente: 0 (p, u) = q si y slo si (p, u) ` (q, ).

Cap. 2

Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3


0
q0

39

q1

1
Figura 2.4: Autmata que acepta el lenguaje de palabras con un nmero impar de unos

2.1.2. Lenguaje aceptado por un Autmata de Estado Finito


Definicin 30 Una palabra u A se dice aceptada por un autmata M = (Q, A, , q0 , F) si

y solo si existe un q F tal que (q0 , u) ` (q, ). En caso contrario, se dice que la palabra es
rechazada por el autmata.
Es decir, una palabra es aceptada por un autmata si comenzando a calcular en el estado q 0
y leyendo los distintos smbolos de la palabra llega a un estado final.
En el caso del autmata del ejemplo 15, la palabra aba es aceptada por el autmata. La
palabra aab es rechazada.
Definicin 31 Dado un autmata M = (Q, A, , q0 , F) se llama lenguaje aceptado o reconocido
por dicho autmata al conjunto de las palabras de A que acepta:

L(M) = {u A : (q0 , u) ` (q, ), q F}


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.
Ejemplo 18 Los autmatas suelen servir para reconocer constantes o identificadores de un
lenguaje de programacin. Supongamos, por ejemplo, que los reales vienen definidos por la
gramtica G = (V, T, P, S) en la que
T = {+, , E, 0, 1, . . .., 9, .}
V = {< Signo >, < Digito >, < Natural >, < Entero >, < Real >}
S =< Real >
P contiene las siguientes producciones
< Signo > +|
< Digito > 0|1|2|3|4|5|6|7|8|9

40

Modelos de Computacin I

E, +,

q2
0, . . . , 9

q0

q8

0, . . . , 9
0, . . . , 9

0, . . . , 9
E, +, , .

0, . . . , 9

q4
E, +, , .

+,

q5

0, . . . , 9

q3

0, . . . , 9

+, , .

q7

0, . . . , 9

+,
E, +, , .

q1

E, +, , .

q6
E, .

E, .

Figura 2.5: Autmata Finito Determinista que acepta constantes reales


<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}.
Si un lenguaje es aceptado por un autmata de estado finito, tenemos un procedimiento algortmico sencillo que nos permite decir qu palabras pertenecen al lenguaje y qu palabras no
pertenecen. Es mucho ms cmodo que la gramtica inicial, aunque la gramtica es ms expresiva. No todos los lenguajes pueden describirse mediante autmatas de estado finito. Los ms
importantes son los identificadores y constantes de los lenguajes. Sin embargo, es importante sealar que a partir de una gramtica de tipo 3 podemos construir de forma algortmica un
autmata que acepta el mismo lenguaje que el generado por la gramtica.

Cap. 2

Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3


S

41

RF
B

B, D, Z, H

E
B, D, Z, H, S

S, Z, D

B, H, S

RD
D

Figura 2.6: Recepcin de Ficheros en el protocolo Kermit

Ejemplo 19 Comunicaciones. Protocolo Kermit.- Los autmatas finitos proporcionan modelos


de programacin para numerosas aplicaciones. El protocolo Kermit se puede implementar como
un control de estado finito. Vamos a fijarnos en una pequea parte del mismo: la transferencia
de ficheros entre micros y mainframes y, ms concretamente en la recepcin de estos ficheros.
El esquema del programa de recepcin de datos corresponde al de una mquina de estado
finito (ver Figura 2.6). Inicialmente, la mquina est en un estado de espera, R. En este estado
est preparado para recibir una cabecera de transmisin (smbolo de entrada S), en cuyo caso
pasa al estado RF, en el que espera la recepcin de una cabecera de fichero (smbolo de entrada
H). En ese momento pasa al estado RD, en el que procesa una serie de datos correspodientes
al fichero (smbolos D). Si, en un momento dado, recibe un fin de fichero (smbolo Z) pasa al
estado RF, donde puede recibir otra cabecera de fichero. Si estando en el estado RF se recibe
un cdigo de fin de la transmisin el autmata pasa al estado inicial R. El estado final es R: Una
transmisin es aceptada si, al final de cada fichero se produce un fin de fichero y al final de todos
los ficheros un fin de transmisin que le permite volver a R. Si, en un momento dado se produce
una entrada inesperada (por ejemplo, un fin de la transmisin cuando se estn recibiendo datos
de un fichero en particular) se pasa a un estado de error, E. Este estado es absorvente: cualquier
otra entrada le hace quedar en el mismo estado.
El esquema del emisor es mas complicado. Tambin sto es solo un esquema del comportamiento del receptor. En realidad, ste no solo determina si la transmisin se ha realizado con
xito, sino que ejecuta acciones cada vez que recibe datos. Esto no lo puede hacer un autmata
de estado finito, pero s otro tipo de mquinas un poco ms sofisticadas que estudiaremos ms
adelante. De todas formas, lo importante es advertir como el modelo de computacin de los
autmatas finitos sirve para expresar de forma elegante el mecanismo de control de muchos
programas.

42

Modelos de Computacin I

2.2. Autmatas Finitos No-Determinsticos (AFND)


En este apartado vamos a introducir el concepto de autmatas finitos no determinsticos
(AFND) y veremos que aceptan exactamente los mismos lenguajes que los autmatas determinsticos. Sin embargo, sern importantes para demostrar teoremas y por su ms alto poder
expresivo.
En la definicin de autmata no-determinstico lo nico que cambia, respecto a la definicin
de autmata determinstico es la funcin de transicin. Antes estaba definida
: QA Q
y ahora ser una aplicacin de Q A en (Q) (subconjuntos de Q):
: Q A (Q)
La definicin completa quedara comos sigue.
Definicin 32 Un autmata finito no-determinstico es una quintupla M = (Q, A, , q 0 , F) en
que
Q es un conjunto finito llamado conjunto de estados
A es un alfabeto llamado alfabeto de entrada
es una aplicacin llamada funcin de transicin
: Q A (Q)
q0 es un elemento de Q, llamado estado inicial
F es un subconjunto de Q, llamado conjunto de estado finales.
La interpretacin intuitiva es que ahora el autmata, ante una entrada y un estado dado, puede
/ Es
evolucionar a varios estados posibles (incluyendo un solo estado o ninguno si (q, a) = 0).
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

Si P Q y u A, (P, a) =

43

(q, a)

qP

Esta funcin se puede extender para aplicarse tambin a palabras de la siguiente forma:
Si B Q,
(B, ) = B
(B, au) = ( (B, a), u)
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 nodeterminstico.
Definicin 33 Sea M = (Q, A, , q0 , F) un autmata finito no-determinstico y u A . Se dice
que la palabra u es aceptada por M si y solo si 0 (q0 , u) F 6= 0/ .
Definicin 34 Sea M = (Q, A, , q0 , F) un AFND, se llama lenguaje aceptado por el autmata
al conjunto de palabras de A que acepta, es decir
/
L(M) = {u A | 0 (q0 , u) F 6= 0}
Cuando no haya lugar a confusin, ser representadas como , simplemente.
En clase, el lenguaje aceptado por un autmata no determinista se ha definido de forma distinta, pero ambas definiciones son totalmente equivalentes. Se define en funcin de la definicin
de la relacin de proceso de clculo entre dos configuraciones que, anlogamente como se hizo
con los autmatas deterministas, se basa en definir los siguientes elementos:
Descripcin Instantnea o Configuracin:
Un elemento de Q A : (q, u).
Configuracin Inicial para u A : (q0 , u)
Relacin paso de clculo entre dos configuraciones:
((q, au) ` (p, v)) p (q, a))
Aqu, al contrario de lo que ocurra en los autmatas deterministas, desdee una configuracin se puede pasar a varias configuraciones distintas en un paso de clculo, e incluso a
ninguna.

44

Modelos de Computacin I

r0

r1

r2

Figura 2.7: Autmata Finito No-Determinstico


b

r0

r1

b, c

r3

r2

a, b, c
a, b, c

Figura 2.8: Autmata Finito Determinista


Relacin de clculo entre dos configuraciones:

((q, u) ` (p, v)) si y solo si existe una sucesin de configuraciones C0 , . . . ,Cn tales que
C0 = (q, u),Cn = (p, v) y i n 1,Ci ` Ci+1 .
Finalmente, el lenguaje aceptado por un AF no-determinista es

L(M) = {u A : q F, (q0 , u) ` (q, )}

2.2.1.

Diagramas de Transicin

Los diagramas de transicin de los AFND son totalmente anlogos a los de los autmatas
determinsticos. Solo que ahora no tiene que salir de cada vrtice un y solo un arco para cada
smbolo del alfabeto de entrada. En un autmata no determinstico, de un vrtice pueden salir
ninguna, una o varias flechas con la misma etiqueta.
Ejemplo 20 Un AFND que acepta el lenguaje
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

q1

q2

q3

q4

q5

q6

Figura 2.9: Autmata No-Determinista que reconoce la cadena 010010.


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 21 (Reconocimiento de Patrones).- Supongamos un ejemplo de tranmisin de datos
entre barcos. El receptor de un barco debe de estar siempre esperando la trasmisin de datos
que puede llegar en cualquier momento. Cuando no hay trasmisin de datos hay un rudo de
fondo (sucesin aleatoria de 0, 1). Para comenzar la trasmisin se manda una cadena de aviso,
p.e. 010010. Si esa cadena se reconoce hay que registrar los datos que siguen.
El programa que reconoce esta cadena puede estar basado en un autmata finito. La idea
es que este no pueda llegar a un estado no final mientras no se reciba la cadena inicial. En ese
momento el autmata pasa a un estado final. A partir de ah todo lo que llegue se registra. Nuestro propsito es hacer un autmata que llegue a un estado final tan pronto como se reconozca
010010. Intentar hacer un autmata finito determinstico directamente puede ser complicado,
pero es muy fcil el hacer un AFND, como el de la Figura 2.9.
Hay que sealar que esto sera solamente el esquema de una sola parte de la trasmisin. Se
podra complicar incluyendo tambin una cadena para el fin de la trasmisin.
Ejemplo 22 Autmata no-determinstico que acepta constantes reales Ver Figura 2.10

2.2.2. Equivalencia de Autmatas Determinsticos y No-Determinsticos


La siguiente definicin muestra como construir a partir de un autmata finito no-determinstico
otro determinstico que acepte el mismo lenguaje.
Definicin 35 Dado un AFND M = (Q, A, , q0 , F) se llama autmata determinstico asociado
q0 , F)
A, ,
dado por
a M, al autmata M = (Q,
Q = P (Q)
q0 = {q0 }
a) = (A, a)
(A,

46

Modelos de Computacin I

q2
0, . . . , 9

0, . . . , 9

q0

0, . . . , 9

0, . . . , 9

q8

q5

0, . . . , 9

q3

0, . . . , 9

0, . . . , 9

q4

0, . . . , 9
+,

+,

q1

q6

Figura 2.10: Autmata No-Determinstico que reconoce constantes reales.


/
F = {A P (Q) | A F 6= 0}
Dado un autmata no determinstico se le hace corresponder uno determinstico que recorre
todos los caminos al mismo tiempo.
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.
Teorema 2 Un AFND M y su correspondiente Autmata determinstico M aceptan el mismo
lenguaje.
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

0, 1

0, 1
0

q0

q1

1
0

{q0 }

q2

q3

q4

{q0 , q1 }

{q0 , q2 }

{q0 , q1 , q6 }
0
{q0 , q6 }
1

0
0 1

{q0 , q2 , q5 }

0
0
1

1
0

{q0 , q1 , q4 , q6 }
1
{q0 , q2 , q5 , q6 }

q5

47

q6

{q0 , q1 , q3 }
0
{q0 , q1 , q4 }
{q0 , q1 , q3 , q6 }
0 1
{q0 , q2 , q6 }

Figura 2.11: Automata Finito No-Determinstico y Autmata Finito Determinstico asociado

48

Modelos de Computacin I

El teorema inverso es evidente: dado un autmata determinstico M = (Q, A, , q 0 , F) pode q0 , F) que acepta el mismo lenguaje. Solo hay
mos construir uno no-determinista M = (Q, A, ,
0 , a) = {(q0 , a)}: En cada situacin solo hay un camino posible, el dado
que considerar que (q
por .

2.3.

Autmatas Finitos No Deterministicos con transiciones


nulas

Son autmatas que pueden relizar una transicin sin consumir entrada. Estas transiciones se
etiquetan con en el diagrama asociado.
En la definicin, lo nico que hay que cambiar es la funcin de transicin que ahora est definida de Q (A {}) en P (Q).
Las transiciones nulas dan una nueva capacidad al autmata. Si se tiene una transicin nula,
el autmata puede quedarse donde est o cambiar de estado sin consumir ningn smbolo de la
palabra de entrada. Como en los AFND, una palabra ser aceptada si se llega a un estado final
con alguna de las elecciones posibles.
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

q0

q1

q2

Ejemplo 25 El autmata dado por el siguiente diagrama,


q0

a,

c,

q1
b

q2

q3
el lenguaje

{b2 i : i

0} {ab2 i : i

0} {b2 ic : i

0} {ab2 ic : i

acepta
0}

Definicin 36 Se llama clausura de un estado al conjunto de estados a los que puede evolucionar 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

Definicin 37 Si P Q se llama clausura de P a


CL(P) =

CL(p)

pP

Ejemplo 26 En el ejemplo anterior tenemos que


CL(q1 ) = {q1 , q2 }
CL(q0 , q1 ) = {q0 , q1 , q2 }
La funcin de transicin se extiende a conjuntos de estados de la siguiente forma:
(R, u) =

(q, u)

qR

A continuacin vamos a determinar la funcin 0 que asocia a un estado y a una palabra de


entrada el conjunto de los estados posibles.
0 (q, ) = CL(q)
0 (q, au) =

0 (r, u)

r(CL(q),a)

Es conveniente extender la funcin 0 a conjuntos de estados,


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/
El lenguaje aceptado por el autmata, L(M), es el conjunto de palabras de A que acepta.
Las transiciones nulas son muy tiles para modificar autmatas o para construir autmatas mas
complejos partiendo de varios autmatas.

50

Modelos de Computacin I

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

q2

q3

q4
0,1

0,1
p0 1

p1

p2

p3

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.

r0

0, 1
q0 0
0, 1
p0 1

0, 1
1

q1

q2

q3

q4
0, 1

p1

p2

p3

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
b
q
q
0

c
q2

a,c

Si L es el lenguaje que acepta el autmata anterior modifiqumoslo para que acepte cualquier 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

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 determinstico que acepta el mismo lenguaje.
Demostracin.- Si M = (Q, A, , q0 , F) es un AFND con transiciones nulas, basta construir un
AFND sin transiciones nulas M = (Q, A, , q0 , F). A partir de ste se puede construir uno determinstico.
El autmata M se define de la siguiente forma
F=

F
F {q0 }

if CL(q0 ) F = 0/
en caso contrario

(q, a) = 0 (q, a)

(2.1)
(2.2)

El resto de los elementos se definen igual que en M.


Para demostrar que ambos autmatas aceptan el mismo lenguaje basta con probar que
0

(q, u) = 0 (q, u) si u 6=

(2.3)

y que se acepta de igual forma en las dos mquinas.

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
{q0 , q1 , q2 }
2

1
1

2
0, 1

{q2 }

{q1 , q2 }
0
0/

0, 1, 2

2.4. Expresiones Regulares


Una expresin regular es una forma de representar cierto tipo de lenguajes sobre un determinado alfabeto. Veremos que son exactamente los aceptados por los autmatas de estado finito.
Definicin 38 Si A es un alfabeto, una expresin regular sobre este alfabeto se define de la
siguiente forma:
0/ es una expresin regular que denota el lenguaje vaco.
es una expresin regular que denota el lenguaje {}
Si a A, a es una expresin regular que denota el lenguaje {a}
Si r y s son expresiones regulares denotando los lenguajes R y S entonces definimos las
siguientes operaciones:
Unin: (r + s) es una expresin regular que denota el lenguaje R S
Concatenacin: (rs) es una expresin regular que denota el lenguaje RS
Clausura: r es una expresin regular que denota el lenguaje R .
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 operaciones 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}
00 es una expresin regular con lenguaje asociado {00}.
01 + 0 es una expresin regular que denota el lenguaje {01 i : i 0}.
(1 + 10) representa el lenguaje de las cadenas que comienzan por 1 y no tienen dos ceros
consecutivos.
(0 + 1) 011 representa el lenguaje de las cadenas que terminan en 011.
0 1 representa el lenguaje de las cadenas que no tienen un 1 antes de un 0
00 11 representa un subconjunto del lenguaje anterior formado por cadenas que al menos tienen un 1 y un 0. Si la expresin regular rr se representa como r + , 00 11 se puede
reprensentar como 0+ 1+ .

2.4.1. Propiedades de las Expresiones Regulares


Dos expresiones regulares se consideran iguales si representan el mismo lenguaje. Teniendo
esto en cuenta, se puede comprobar que siempre se verifican las siguientes igualdades.
1. r1 + r2 = r2 + r1
2. r1 + (r2 + r3 ) = (r1 + r2 ) + r3
3. 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 )

2.4.2. Expresiones Regulares y Autmatas Finitos


A continuacin vamos a relacionar los lenguajes representados por las expresiones regulares
con los aceptados por los autmatas finitos. Demostraremos dos teoremas. El primero nos dice
que todo lenguaje asociado por una expresin regular puede ser aceptado por un autmata de
estado finito. El segundo la relacin recproca. Dado un autmata de estado finito, veremos como
se puede construir una expresin regular que denote el lenguaje aceptado por dicho autmata.
Teorema 4 Dada una expresin regular existe un autmata finito que acepta el lenguaje asociado 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

q1

Cap. 2

Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3

55

Ahora veremos como se pueden construir autmatas para las expresiones regulares compuestas 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

El autmata que acepta que mismo lenguaje que el asociado a (r 1 + r2 ) es


q11

q0

M1

q01
qi1

q12

M2

q02
q j2

El autmata para la expresin (r1 r2 ) es

q11
q01

q12

q02
q j2

qi1

M1

El autmata para

r1

es

M2

56

Modelos de Computacin I

q11

q0

q01
qi1

M1

Se puede comprobar que efectivamente estos autmatas verifican las condiciones pedidas y
que el procedimiento de construccin siempre acaba.

Ejemplo 31 Construyamos un autmata que acepta el mismo lenguaje que el asociado a la


expresin regular r = (0 + 10) 011
Autmata correspondiente a 1
q1

q2

Autmatas correspondientes a 1 y 0
q1

q2

q3

q4

El autmata asociado a 10 es
q1

q2

q3

Autmatas asociado a 10 y 0

q4

Cap. 2

Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3


0

q5

q1

q2

q6

q3

q4

Autmata asociado a 10 + 0
0

q5

q6

q7

q1

q2

q3

q4

Autmata asociado a (10 + 0)

q8

q5

q6

q7

q1

q2

q3

Autmatas asociado a (10 + 0) y 011

q4

57

58

Modelos de Computacin I

q8

q5

q6

q7

q9

q1

q2

q3

q10

q11

q12

q13

q14

q4

Autmatas asociado a (10 + 0) y 011

q8

q5

q6

q7

q9

q1

q2

q3

q10

q11

q12

q13

q14

q4

Teorema 5 Si L es aceptado por un autmata finito determinstico, entonces puede venir expresado 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:

k1
k1
k1
k1
Rkij = Ri(k1)
(R(k1)(k1)
) R(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
a1 + . . . + a l +

si i 6= j
si i = j

donde {a1 , . . ., al } es el conjunto {a : (qi , a) = q j }. Si este conjunto es vaco la expresin regular sera:
0/

si i 6= j
si i = j

Es claro que estas expresiones regulares representan los conjuntos R 0i j .


Supongamos ahora que es cierto para k 1. Entonces sabemos que
Rkij

k1
= Ri(k1)

k1
R(k1)(k1)

k1
k1
R(k1)
j Ri 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 lenguajes 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) =

q j F

Rn1 j

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 expresin regular que representa el lenguaje aceptado por este autmata.

60

Modelos de Computacin I
1
q1

0
0

q2

q3

0, 1

Figura 2.12: Autmata Finito Determinstico


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
/ + 0()
/ = 0/
r31
31
31 11
11
1 = r0 + r0 (r0 ) r0 = 0 + 1 + 0()
/ 0 = 0 + 1
r32
32
31 11
12
1 = r0 + r0 (r0 ) r0 = + 0()
/ 1 =
r33
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
/ + (0 + 1)( + 00)0 = (0 + 1)(00)0
r31
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

0(00) + 0 1( + (0 + 1)0 1) (0 + 1)(00) + 0 1 + 0 1( + (0 + 1)0 1) ( + (0 + 1)0 1) =


0(00) + 0 1((0 + 1)0 1) (0 + 1)(00) + 0 1 + 0 1((0 + 1)01)
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.

2.5. Gramticas Regulares


Estas son las gramticas de tipo 3. Pueden ser de dos formas
Lineales por la derecha.- Cuando todas las producciones tienen la forma
A uB
Au
Lineales por la izquierda.- Cuando todas las producciones tienen la forma
A Bu
Au
Ejemplo 33 La gramtica dada por V = {S, A}, T = {0, 1} y las producciones
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 autmata 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) = []
La aceptacin de una palabra en este autmata simula la aplicacin de reglas de derivacin
en la gramtica original. La demostracin formal de que esto es as no la vamos a considerar.
En el caso de una gramtica lineal por la izquierda, G = (V, T, P, S), consideraremos la gramtica G0 = (V, T, P0, S) donde P0 = {A : A P}. Es decir que invertimos la parte
derecha de las producciones. La gramtica resultante G0 es lineal por la derecha y el lenguaje
que genera es L(G0 ) = L(G)1 .
Ahora, podemos construr un autmata que acepte el lenguaje L(G 0 ), siguiendo el procedimiento anterior. El autmata no determinstico correspondiente se puede transformar en uno
equivalente con un solo estado final. Para ello basta con aadir un nuevo estado final, pasar a
no-finales los estados finales originales y unir estos mediante una transicin nula con el nuevo
estado final.
El siguiente paso es invertir el autmata ya con un solo estado final, para que pase de aceptar
el lenguaje L(G0 ) = L(G)1 al lenguaje L(G0 )1 = L(G) . Para ello los pasos son:
Invertir las transiciones
Intercambiar el estado inicial y el final.
A partir de este autmata se podra construir un autmata determinstico, con lo que termina la
demostracin.

Cap. 2

Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3

63

Ejemplo 34 De la gramtica S 0A, A 10A, A se obtiene el autmata,

[S]

[0A]
1

[A]

[10A]

[]

Ejemplo 35 La gramtica lineal por la izquierda que genera el lenguaje 0(01) tiene las siguientes producciones
S S10
S0
Para construir un AFND con transiciones nulas qque acepte este lenguaje se dan los siguientes pasos:
1. Invertir la parte derecha de las producciones
S 01S
S0
2. Construir el AFND con transiciones nulas asociado
[S]

[0]

[]

1
[1S]

[01S]

3. Invertimos las transiciones


[S]

1
[1S]

[0]

[01S]

[]

64

Modelos de Computacin I

Teorema 7 Si L es aceptado por un Autmata Finito Determinstico entonces L puede generarse


mediante una gramtica lineal por la derecha y por una lineal por la izquierda.
Demostracin.- Sea L = L(M) donde M = (Q, A, , q, F) es un autmata finito determinstico.
Construiremos, en primer lugar, una gramtica lineal por la derecha.
La gramtica que construimos es G = (Q, A, P, q0) donde las variables son los estados, la
variable inicial es q0 y P contiene las producciones,
si (p, a) = q

p aq,
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.

Ejemplo 36 Consideremos el autmata:


0

q0
1

q1
1
0, 1

q2
La gramtica lineal por la derecha es (variable inicial q0 ):
q0 0q1 ,

q0 1q2 ,

q2 0q0 ,

q1 0q2 ,

q1 1q2

q2

q2 1q1 ,

Si lo que queremos es una gramtica lineal por la izquierda, entonces invertimos el autmata:
0

q0
1

q1

1
0, 1

q0

q2
La gramtica asociada es (variable inicial q2 ):

q1
1
0, 1

q2

Cap. 2

Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3

q1 0q0 ,

q2 1q0 ,

q0 0q2 ,

q2 0q1 ,

q1 1q2 ,

65

q2 1q1

q0

Invertimos la parte derecha de las producciones, para obtener la gramtica lineal por la
izquierda asociada:
q1 q0 0,

q2 q0 1,

q0 q2 0,

q2 q1 0,

q1 q2 1,

q2 q1 1

q0

2.6. Mquinas de Estado Finito


Las mquinas de estado finito son autmatas finitos con salida. Veremos dos tipos de mquinas:
M quinas de Moore: con salida asociada al estado
M quinas de Mealy: con salida asociada a la transicin
Sin embargo, ambas mquinas son equivalentes, en el sentido de que calculan las mismas
funciones.

2.6.1. Mquinas de Moore


Una mquina de Moore es una sextupla
{(Q, A, B, , , q0)} donde todos los elementos son como en los autmatas finitos determinsticos, excepto
B alfabeto de salida
: Q B que es una aplicacin que hace corresponder a cada estado su salida correspondiente.
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





(0, 0)

(0, 1), (1, 1)

(0, 1), (1, 1)


q0
q1
(V, R,V, R)
(A, R, A, R)
(1, 0)
A

q2
(R, R, R,V )

(0, 0), (0, 1)

q3
(V, R, A, R)

q5
(R, R, R, A)
A

q6
(V, A, R, R)

(0, 0)

(0, 0), (1, 0)


A

(1, 0), (1, 1)


q4
(V,V, R, R)

(0, 1)

(1, 0), (1, 1)

q7
(A, A, R, R)

Cap. 2

Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3

67

Ejemplo 37 Control de semforos en un cruce. Consideremos un cruce de carreteras, cuya


estructura viene dada por la figura 37
El trfico importante va a estar en la carretera horizontal. La otra direccin es menos densa. Por eso se han puesto dos sensores, y , que mandan informacin sobre si hay coches
esperando en las colas de los sem foros 2 y 4 respectivamente: 1 si hay coches esperando y 0
si no hay coches. Estos semforos solo se abrirn en el caso de que hay coches esperando en la
cola. En caso contrario permanecer n cerrados.
Este cruce va a ser controlado por una Mquina de Moore que lee los datos de los sensores:
pares (a, b) donde a es la informacin del sensor y b la informacin del sensor . Las salidas
ser n cuadruplas (a1 , a2 , a3 , a4 ) donde ai {R, A,V } indicando como se colocan los sem foros.
El esquema de una mquina de Moore que controla el trfico es el de la figura anterior.
Junto a cada estado se especifica la salida correspondiente a dicho estado.

2.6.2. Mquinas de Mealy


Una Mquina de Mealy es tambin una sextupla M = (Q, A, B, , , q0) donde todo es igual
que en las mquinas de Moore, excepto que es una aplicacin de Q A en B,
: QA B
es decir, que la salida depende del estado en el que est el autmata y del smbolo leido.
Si la entrada es a1 . . . an y pasa por los estados q0 , q1 , . . ., qn , la salida es
(q0 , a1 )(q1 , a2 ) . . . (qn1 , an )
Si se le suministra como entrada produce como salida.
Ejemplo 38 Supongamos una mquina codificadora que acta de la siguiente forma:
El alfabeto de entrada es {0, 1} y el de salida {0, 1}. La traduccin viene dada por las
siguientes reglas,
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

Figura 2.13: Mquina de Mealy que realiza la divisin entera por 3


Si el anterior es un 1
01
10
La mquina de Mealy que realiza esta codificacin es la siguiente

0/0

1/0

1/1

q0

0/1

q1

si lee 0101, la salida correspondiente es 0111.


Ejemplo 39 Una mquina de Mealy que realiza la divisin entera por 3 es el de la figura 2.13.

2.6.3. Equivalencia de Mquinas de Mealy y Mquinas de Moore


Una mquina de Mealy y una mquina de Moore calculan funciones an logas. Sea M una
mquina de Moore y M una mquina de Mealy. Si notamos como TM (u)yTM0 (u) las salidas que
producen ante una entrada u, entonces se puede comprobar que siempre, |TM (u)| = |TM0 (u)| + 1.
Luego, en sentido estricto, nunca pueden ser iguales las funciones que calculan una mquina
de Mealy y una mquina de Moore. Sin embargo, la primera salida de una mquina de Moore
es siempre la misma: la correspondiente al estado inicial. Si despreciamos esta salida, que es
siempre la misma, entonces si podemos comparar las funciones calculadas por las mquinas de
Mealy y de Moore.

Cap. 2

Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3

69

Definicin 39 Una mquina de Moore, M, y una mquina de Mealy, M, se dicen equivalentes


sii paratodo u A TM (u) = bTM 0 (u) donde b es la salida correspondiente al estado inicial de
la mquina de Moore M.
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 equivalente ser M 0 = (Q, A, B, , 0, q0 ), donde
0 (q, a) = ((q, a))
Es decir se le asigna a cada transicin la salida del estado de llegada en la mquina de Moore.
Es inmediato comprobar que ambas mquinas son equivalentes.

Teorema 9 Dada una mquina de Mealy, existe una mquina de Moore equivalente
Demostracin.- Sea M = (Q, A, B, , , q0) una mquina de Mealy.
La mquina de Moore ser: M = (Q0 , A, B, 0, 0 , q00 ) donde
Q0 = Q B
0 ((q, b), a) = ((q, a), (q, a))
0 (q, b) = b
q00 = (q0 , b), donde b B, cualquiera.

Ejemplo 40 Dada la mquina de Mealy de la figura 2.13, aplicando el procedimiento del teorema anterior, obtenemos la mquina de Moore equivalente de la figura 2.14.

70

Modelos de Computacin I

(q0 , 0)
0

(q1 , 0)
0

(q2 , 0)
0

0
0

1
0

1
0

(q0 , 1)
1

(q1 , 1)
1

(q2 , 1)
1

Figura 2.14: Mquina de Moore que realiza la divisin entera por 3

Captulo 3
Propiedades de los Conjuntos Regulares

71

72

Modelos de Computacin I

3.1. Lema de Bombeo


A los lenguajes aceptados por un AFD se les llama tambin conjuntos regulares. El lema
de bombeo se usa para demostrar que un determinado conjunto no es regular, es decir, no puede
llegar a ser aceptado por un autmata finito determinstico.
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:
Sea u la parte de la palabra z0 que lleva al autmata desde q0 a la primera aparicin de ql .
Sea v la parte de la palabra de z0 , que lleva el autmata de la primera aparicin de ql a la
segunda aparicin de ql .
Sea w lo que le falta a uv para completar la palabra z.
Con esta particin se puede probar:
1. z = uvw

Cap. 3

Propiedades de los Conjuntos Regulares

73

2. |uv| n, porque uv forman parte de z0 que slo tiene n smbolos.


3. |v| 1, porque para pasar de la primera aparicin de ql a la segunda, hay que leer al menos
un smbolo.
4. uvi w L, i IN . En efecto, esta palabra es aceptada por el autmata, porque u lleva al
autmata del estado inicial q0 al estado ql . Cada aparicin de v mantiene al autmata en
el mismo estado ql . Por ltimo, w lleva al autmata desde ql al estado final qm . Como
despus de leer uvi w llegamos a un estado final, entonces la palabra es aceptada por el
autmata y pertenece al lenguaje L.
Con esto queda demostrado el lema.
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:
1. Suponer un n IN arbitrario que se suponga cumpla las condiciones del lema.
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:
a) Suponer una particin arbitraria de z, z = uvw, tal que |uv| n, |v| 1.
b) Encontrar un i IN tal que uvi w 6 L.
Ejemplo 41 Demostrar que el lenguaje L = {0k 1k : k 0} no es regular.
1. Supongamos un n cualquiera
2. Sea la palabra 0n 1n que es de longitud mayor o igual que n
3. Demostremos que 0n 1n no se puede descomponer de acuerdo con las condiciones del
lema:
a) Supongamos una particin arbitraria de 0n 1n = uvw. con |uv| n y |v| 1.
Como |uv| n resulta que v est formada de 0 solamente y como |v| 1, v tiene, al
menos un cero.

74

Modelos de Computacin I
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.
Ejemplo 43 El lenguaje {u {0, 1} : u = u1 } no es regular.
Sea un n IN cualquiera. Consideremos la palabra z = 0n 10n L y que tiene longitud
2n + 1 n.
Supongamos una descomposicin cualquiera: z = uvw.
Si se verifica
|uv| n
|v| 1
entonces tenemos que u = 0k , v = 0l , w = 0nkl 1n 0n , con l 1.
Haciendo i = 2, uv2 w = 0k 02l 0nkl 1n 0n = 0n+l 1n 0n 6 L.
Como hemos encontrado un i tal que uvi w 6 L, tenemos que el lenguaje no verifica la condicin que aparece en el lema de bombeo y 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.
Ejemplo 44 Sea L = {ai b j ck : (i = 0) ( j = k)} un lenguaje sobre el alfabeto A = {a, b, c}.
Vamos a demostrar que se verifica la condicin del lema de bombeo para n = 2.
En efecto si z L y |z| 2 entonces z = ai b j zk con i = 0 o j = k. Caben dos posibilidades:

Cap. 3

Propiedades de los Conjuntos Regulares

75

a) i = 0. En este caso z = b j ck una descomposicin de z se puede obtener de la siguiente


forma:
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.
b) i 0. En ese caso z = ab j c j , y una particin de esta palabra se obtiene de acuerdo con lo
siguiente:
u=
v = a es el primer smbolo de z
w es z menos su primer smbolo
Tambin aqu se verifican las tres condiciones:
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

3.2. Operaciones con Conjuntos Regulares


Ya conocemos las siguientes propiedades,
Unin: Si L1 y L2 son conjuntos regulares, entonces L1 L2 es regular.
Concatenacin: Si L1 y L2 son regulares, entonces L1 L2 es regular.
Clausura de Kleene: Si L es regular, entonces L es regular.
Adicionalmente, vamos a demostrar las siguientes propiedades.
Proposicin 1 Si L A es un lenguaje regular entonces L = A L es regular.
Demostracin.- Basta con considerar que si M = (Q, A, , q0 , F) es un autmata finito determinstico que acepta el lenguaje L, entonces M 0 = (Q, A, , q0 , Q F) acepta el lenguaje complementario A L.

Proposicin 2 Si L1 y L2 son dos lenguajes regulares sobre el alfabeto A, entonces L1 L2 es


regular.
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 .

Proposicin 3 Si A y B son alfabetos y f : A B un homomorfismo entre ellos, entonces


si L A es un lenguaje regular, f (L) = {u B : v A verificando f (v) = u} es tambin un
lenguaje regular.
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

Ejemplo 45 Si A = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} y B = {0, 1} y f es el homomorfismo dado por


f (0) = 0000, f (1) = 0001, f (2) = 0010, f (3) = 0011
f (4) = 0100, f (5) = 0101, f (6) = 0110, f (7) = 0111
f (8) = 1000, f (9) = 1001
Entonces si L A es el lenguaje regular dado por la expresin regular (1 + 2) 9, entonces
el lenguaje f (L) tambin es regular y viene dado por la expresin regular (0001 + 0010) 1001.
Proposicin 4 Si A y B son alfabetos y f : A B es un homomorfismo, entonces si L B
es un conjunto regular, tambin lo es f 1 (L) = {u A : f (u) L}.
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
(q, a) = 0 (q, f (a)),
acepta el lenguaje f 1 (L).

Ejemplo 46 Si A = B = {0, 1} y f es el homomorfismo dado por


f (0) = 00,

f (1) = 11

entonces el lenguaje L = {02k 12k : k 0} no es regular, porque si lo fuese su imagen inversa,


f 1 (L) = {0k 1k : k 0} sera tambin regular y no lo es.
Proposicin 5 Si R es un conjunto regular y L un lenguaje culaquiera, entonces el cociente de
lenguajes R/L = {u : v L verificando uv R} es un conjunto regular.
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

3.3. Algoritmos de Decision para Autmatas Finitos


El lema de bombeo sirve para encontrar algoritmos de decisin para los autmatas finitos,
por ejemplo, para saber si el lenguaje que acepta un determinado autmata es vaco o no.
Teorema 10 El conjunto de palabras aceptado por un autmata finito con n estados es
1. No vaco si y solo si existe una palabra de longitud menor que n que es aceptada por el
autmata.
2. Infinito si y solo si acepta una palabra de longitud l, donde n l < 2n.
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.

Este teorema se puede aplicar a la construccin de algoritmos que determinen si el lenguaje


aceptado por un autmata es vaco o no, y para ver si es o no finito. Para lo primero se tiene
que comprobar si el autmata acepta alguna palabra de longitud menor o igual que n. Para lo
segundo si acepta una palabra de longitud mayor o igual que n y menor que 2n. Como en ambos

Cap. 3

Propiedades de los Conjuntos Regulares

79

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 autmata 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 estado 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 autmata 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 aceptan 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
L(M) = (L(M1 ) L(M2 )) (L(M1 ) L(M2 ))
/ lo cual
Entonces el comprobar si L(M1 ) = L(M2 ) es equivalente a comprobar si L(M) 6= 0,
se puede hacer tambin de forma algortmica.

3.4. Teorema de Myhill-Nerode. Minimizacin de Autmatas


Sea L A un lenguaje arbitrario. Asociado a este lenguaje L podemos definir una relacin
de equivalencia RL en el conjunto A, de la siguiente forma:
Si x, y A , entonces (xRL y) si y solo si (z A , (xz L yz L))
Esta relacin de equivalencia dividir el conjunto A en clases de equivalencia.
El nmero de clases de equivalencia se llama ndice de la relacin.
Ejemplo 47 Sea L = 0 10 , entonces tenemos que
00RL 000

80

Modelos de Computacin I
1

a
0

0
b

e
1

0
1

Figura 3.1: Autmata que acepta el lenguaje L

001RL 1
01 6 RL 0
11RL 101
Tambin se puede definir una relacin de equivalencia, RM , en A asociada a un autmata
finito determinstico M = (Q, A, , q0 , F) cualquiera de la siguiente forma,
Si u, v A , entonces uRM v si y solo si (0 (q0 , u) = 0 (q0 , v))
Esta relacin de equivalencia divide tambin el lenguaje A en clases de equivalencia.
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.
El ndice (n. de clases de equivalencia) de R ser a lo ms el nmero de estados del autmata
finito que sean accesibles desde el estado inicial. En efecto, si q Q, y este estado es accesible,
entonces definir una clase de equivalencia:
[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 ).
Definicin 40 Una relacin de equivalencia R en A se dice que es invariante por la derecha
para la concatenacin si y solo si ((uRv) (z A , xzRyz)).
Proposicin 6

Sea L A , entonces RL es invariante por la derecha.

Si M es un autmata finito, entonces RM es invariante por la derecha.


El siguiente teorema es la base para la construccin de autmatas finitos minimales.
Teorema 12 (Teorema de Myhill-Nerode) Si L A entonces las tres siguientes afirmaciones
son equivalentes
1. L es aceptado por un autmata finito
2. L es la unin de algunas de las clases de equivalencia de una relacin de equivalencia en
A de ndice finito que sea invariante por la derecha.
3. La relacin de equivalencia RL es de ndice finito.
Demostracin.Demostraremos 1 2 3 1.
1 2 Si M es un autmata finito determinstico que acepta el lenguaje L. Entonces la
relacin de equivalencia RM tiene un nmero finito de clases de equivalencia (tantos como
estados accesibles desde el estado inicial tenga M) y adems es invariante por la derecha.
Solo hay que probar que siendo [x]M la clase de equivalencia asociada a x ( [x]M =
{y : xRM y} entonces
L=

(q0 ,x)F

[x]M

82

Modelos de Computacin I

2 3 Sea R la relacin de equivalencia que verifica 2. Vamos a probar que


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.
3 1 Construiremos un autmata a partir de la relacin RL .
El autmata ser M = (Q, A, , q0 , F), donde
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

[]L

0
1

[1]L

83

[11]L

Figura 3.2: Autmata asociado a la relacin RL


Ejemplo 49 Si consideramos el lenguaje L dado por la expresin regular 0 10 , entonces la
relacin RL divide al conjunto de las cadenas en tres clases de equivalencia:
[]L = C1 , [1]L = C2 , [11]L = C3
Si consideramos el autmata asociado a este lenguaje (ver Fig. 3.1), este autmata divide
A en seis clases de equivalencia.
Ca = (00)
Cb = 0(00) Cc = (00) 1

Cd = (00) 01 Ce = 0 100 C f = 0 10 1(0 + 1)


L = Cc Cd Ce , la unin de las tres clases correspondientes a los estados finales.
De acuerdo con el teorema anterior, con la relacin de equivalencia R L podemos construr
un autmata finito que acepta el mismo lenguaje L. Este autmata viene dado por el diagrama
de transicin de la figura 3.2,

3.4.1. Minimizacin de Autmatas


Definicin 41 Un autmata finito determinstico se dice minimal si no hay otro autmata finito
determinstico que acepte el mismo lenguaje y tenga menos estados que el.
En el ejemplo que vimos despues del teorema de Myhill-Nerode, a partir de la relacin
RL asociada a un lenguaje L, construmos un autmata que aceptaba ese lenguaje y que tena
pocos estados. En particular tena menos estados que el autmata original. El siguiente teorema
demuestra que es precisamente un autmata minimal.
Teorema 13 Si L es un conjunto regular y RL la relacin de equivalencia asociada, entonces el
autmata construido en el teorema anterior es minimal y nico salvo isomorfismos.
Demostracin.Comprobaremos unicamente que es minimal.
En efecto, si M 0 es el autmata construdo segn el teorema anterior y M un autmata cualquiera que acepta el lenguaje L entonces tenemos que se verifica
xRM y xRy

84

Modelos de Computacin I
Por tanto RL tiene menos clases que RM .
El teorema queda demostrado si tenemos en cuenta que:
N. de estados de M N. de clases de RM N. de clases de RL = N. de estados de M 0

El teorema anterior nos permite encontrar el autmata minimal asociado a un lenguaje, partiendo de la relacin de equivalencia de dicho lenguaje. El problema fundamental es que normalmente 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 transformarlo 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.
Definicin 42 Si M = (Q, A, , q0 , F) es un autmata finito determinstico y qi , q j son dos estados de Q, se dice que qi y q j son indistinguibles si y solo si u A , 0 (qi , u) F 0 (q j , u) F.
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,
1. Eliminar estados inaccesibles.
2. Para cada pareja de estados accesibles {qi , q j }
3. Si uno de ellos es final y el otro no, hacer la variable booleana
asociada igual a true.
4. Para cada pareja de estados accesibles {qi , q j }
5. Para cada smbolo a del alfabeto de entrada
6. Calcular los estados qk y ql a los que evoluciona el
autmata desde qi y q j leyendo a
7. Si qk 6= ql entonces
8. Si la pareja {qk , ql } est marcada entonces se
marca la pareja {qi , q j } y recursivamente se marcan tambin todas
las parejas en la lista asociada.
9. Si la pareja {qk , ql } no est marcada, se aade la pareja

Cap. 3

Propiedades de los Conjuntos Regulares


0

1
1

85

1
1

Figura 3.3: Autmata para minimizar


{qi , q j } a la lista asociada a la pareja {qk , ql }.
Al final del algoritmo, todas las parejas de estados marcados son distinguibles y los no marcados 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 ]
Se puede demostrar el siguiente teorema.
Teorema 14 Si M es un autmata finito determinstico sin estados inaccesibles, el autmata
Mm construido anteriormente es minimal.
Ejemplo 50 Minimizar el autmata de la Figura 3.3.
Primero eliminamos el estado inaccesible d y obtenemos el autmata de la figura ??. A
continuacin organizamos los datos del algoritmo en una tabla triangular como la de la Figura
3.5. En las casillas vamos anotando la lista asociada a cada pareja y si estn o no marcadas.
El resultado se puede ver en la tabla 3.6. Esta nos indica que los estados a y e son equivalentes, as como los estados b y h: a e, b h. Identificando estos estados, obtenemos el autmata
de la figura 3.7.

86

Modelos de Computacin I

0
0

1
1

1
1

Figura 3.4: Autmata para minimizar, despus de eliminar estados inaccesibles.

b
c
e
f
g
h
a

Figura 3.5: Tabla de minimizacin de autmata

Cap. 3

Propiedades de los Conjuntos Regulares

+ ++
+++
++
+

b
c
e

(g,a)

b h,

ae

(h,a)
(g,a)

+
+
+
+
+

(e,a)

(h,e)

+
+
+
+
+

Figura 3.6: Estado final de la tabla de minimizacin de autmata

0
1

{a, e}

{b, h}

0
1

Figura 3.7: Autmata minimal

87

88

Modelos de Computacin I

Captulo 4
Gramticas Libres de Contexto

89

90

Modelos de Computacin I
S

S
)

Figura 4.1: Arbol de Derivacin

4.1. Arbol de Derivacin y Ambigedad


/ , (, ), , +} y
Consideremos una gramtica G = (V, T, P, S) donde V = {S}, T = {a, b, c, 0,
las producciones son
/
S a|b|c|0|
S (S + S)
S (S S)
Esta es una gramtica libre de contexto: En la parte izquierda de las producciones solo aparece una variable. Al lenguage generado por esta gramtica pertenece la palabra ((a + b) c).
Solo hay que aplicar la siguiente cadena de producciones
S (S S) ((S + S) S) ((a + S) S) ((a + b) S) ((a + b) c)
Una palabra nos puede ayudar a determinar si una palabra pertenece a un determinado lenguaje, pero tambin a algo ms: a determinar la estructura sintctica de la misma. Esta viene
dada por lo que llamaremos rbol de derivacin. Este se construye a partir de la cadena de derivaciones de la siguiente forma. Cada nodo del rbol va a contener un smbolo. En el nodo raz
se pone el smbolo inicial S.
Entonces, si a este nodo se le aplica una determinada regla S , entonces para cada
smbolo que aparezca en se aade un hijo con el smbolo correspondiente, situados en el orden
de izquierda a derecha. Este proceso se repite para todo paso de la derivacin. Si la derivacin se
aplica a una variable que aparece en un nodo, entonces se le aaden tantos hijos como smbolos
tenga la parte derecha de la produccin. Si la parte derecha es una cadena vaca, entonces se
aade un solo hijo, etiquetado con . En cada momento, leyendo los nodos de izquierda a derecha
se lee la palabra generada.
En nuestro caso tenemos el rbol de derivacin de la Figura 4.1.
Un rbol se dice completo cuando todas las etiquetas de los nodos hojas son smbolos
terminales o bien la cadena vaca.

Cap. 4

Gramticas Libres de Contexto

91

S
a

S
A
b

a
a

Figura 4.2: Arbol de Derivacin de aabbaa


Ejemplo 51 Consideremos la gramtica
S aAS, S a, A SbA, A SS, A ba
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 siguientes:
Derivacin por la izquierda.- Cuando en cada paso siempre se sustituye primero la primera 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.
Ejemplo 52 Al rbol de derivacin de la palabra aabbaa, le corresponden las siguientes derivaciones:
Derivacin por la izquierda:
S aAS aSbAS aabAS aabbaS aabbaa
Derivacin por la derecha:
S aAS aAa aSbAa aSbbaa aabbaa

92

Modelos de Computacin I
S

Figura 4.3: Dos rboles de derivacin para a5


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 gramtica 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
S aa, S aaU, U aaaU, U aaa
Aqu a solo tiene un rbol de derivacin asociado (ver Fig. 4.4).
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

S
a

Figura 4.4: Arbol de derivacin para a5


E

Figura 4.5: Dos rboles de derivacin para a b c


Existen lenguajes inherentemente ambiguos, como es el siguiente
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.

4.2. Simplificacin De Las Gramticas Libres De Contexto


Para un mismo lenguage de tipo 2 existen muchas gramticas libres de contexto que lo
generan. Estas ser n de formas muy diversas por lo que, en general se hace muy difcil trabajar

94

Modelos de Computacin I
S

A
a

A
a

b
b

B
c

d
d

Figura 4.6: Dos rboles de derivacin para aabbccdd


con ellas. Por este motivo interesa simplificarlas lo mas posible y definir unas formas normales
para las gramticas que las hagan mas homogneas.

4.2.1. Eliminacin de Smbolos y Producciones Intiles


Un smbolo X (V T ) se dice til si y solo si existe una cadena de derivaciones en G tal
que
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 fundamentales:
1. Eliminar las variables desde las que no se puede llegar a una palabra de T y las producciones en las que aparezcan.
2. Eliminar aquellos smbolos que no sean alcanzables desde el estado inicial, S, y las producciones en las que estos aparezcan.
El primer paso se realiza con el siguiente algoritmo (V es un conjunto de variables):

Cap. 4

Gramticas Libres de Contexto

95

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
El segundo paso se realiza con el siguiente algoritmo:
V 00 y J son conjuntos de variables. J son las variables por analizar.
T 0 es un conjunto de smbolos terminales
1. J = {S}
V 00 = {S}
T 0 = 0/
2. Mientras J 6= 0/
3. Extraer un elemento de J : A, (J = J {A}).
4. Para cada produccion de la forma A
5.Para cada variable B en
6. Si B no est en V 00 aadir B a J y a V 00
7. Poner todos los simbolos terminales de en T 0
8. Eliminar todas las variables que no esten en V 00
y todos los simbolos terminales que no esten en T 0 .
9. Eliminar todas las producciones donde aparezca
un simbolo o variable de los eliminado
Ejemplo 55 Es importante aplicar los algoritmos anteriores en el orden especificado para que
se garantice que se eliminan todos los smbolos y variables intiles. Como ejemplo de lo anterior, supongamos que tenemos la gramtica dada por
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.
Ejemplo 56 Eliminar smbolos y producciones intiles de la gramtica
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 .
0
V queda igual a {B, D,C,W, A,U }.
En la siguiente V 0 = {B, D,C,W, A,U, S}.
En la siguiente V 0 = {B, D,C,W, A,U, S}.
Como V 0 no cambia ya se ha terminado el ciclo. Estas son las variables desde las que se
alcanza una cadena de smbolos terminales. El restos de las variables: X ,Y,V, son intiles y se
pueden eliminar. Tambin se eliminan las producciones asociadas. La gramtica resultante es:
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.
Ejemplo 57 eliminar smbolos y producciones intiles de la gramtica
S aSb, S ab, S bcD,
S cSE, E aDb, F abc, E abF

4.2.2. Producciones Nulas


Las producciones nulas son las de la forma A . Vamos a tratar de eliminarlas sin que
cambie el lenguaje generado por la gramtica ni la estructura de los rboles de derivacin.
Evidentemente si L(G) no vamos a poder eliminarlas todas sin que la palabra nula deje de
generarse. As vamos a dar un algoritmo que dada una gramtica G, construye una gramtica
G0 equivalente a la anterior sin producciones nulas y tal que L(G0 ) = L(G) {}. Es decir, si
la palabra nula era generada en la gramtica original entonces no puede generarse en la nueva
gramtica. Primero se calcula el conjunto de las variables anulables:
H es el conjunto de las variables anulables
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}
Una vez calculado el conjunto, H, de las variables anulables, se hace lo siguiente:
1. Se eliminan todas las producciones nulas de la gramatica
2. Para cada produccion de la gramatica de la forma
A 1 . . . n , donde i V T .
3. Se elimina la produccion A 1 . . . n
4. Se aaden todas las producciones de la forma A 1 . . . n

98

Modelos de Computacin I
donde i = i si i 6 H
(i = i ) (i = ) si H
y no todos los i puedan ser nulos al mismo tiempo

G0 es la gramtica resultante despus de aplicar estos dos algoritmos.


Si G generaba inicialmente la palabra nula, entonces, a partir de G 0 , podemos construir una
gramtica G00 con una sola produccin nula y que genera el mismo lenguaje que G. para ello
se aade una nueva variable, S0 , que pasa a ser el smbolo inicial de la nueva gramtica, G00 .
Tambin se aaden dos producciones:
S0 S,

S0

Ejemplo 58 Eliminar las producciones nulas de la siguiente gramtica:


S ABb, S ABC,C abC,
B bB, B , A aA,
A ,C AB
Las variables anulables despues de ejecutar el paso 2 del primer algoritmo son B y A. Al
ejecutar el paso 3, resulta que C y S son tambin anulables, es decir H = {A, B,C, S}. Al ser
S anulable la palabra vaca puede generarse mediante esta gramtica. En la gramtica que se
construye con el segundo algoritmo esta palabra ya no se podr generar. Al ejecutar los pasos
3 y 4 del segundo algoritmo para las distintas producciones no nulas de la gramtica resulta
3. Se elimina la produccin S ABb
4. Se aade S ABb, S Ab, S Bb
3. Se elimina S ABC
4. Se aade S ABC, S AB, S AC,
S BC, S A, S B, S C
3. Se elimina C abC
4. Se aade C abC,C ab
3. Se elimina B bB
4. Se aade B bB, B b
3. Se elimina A aA
4. Se aade A aA, A a
3. Se elimina C AB

Cap. 4

Gramticas Libres de Contexto

99

4. Se aade C AB,C A,C B


En definitiva, la gramtica resultante tiene las siguientes producciones:
S ABb, S Ab, S Bb, S ABC, S AB,
S AC, S BC, S A, S B, S C,
C abC, C ab, B bB, B b, A aA,
A a, C AB, C A, C B
Ejemplo 59 Sea la gramtica
S aHb, H aHb, H
La nica variable anulable es H. Y la gramtica equivalente, que resulta de aplicar el algoritmo 2 es:
S aHb, H aHb, S ab, H ab

4.2.3. Producciones Unitarias


Las producciones unitarias son las que tienen la forma
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

8. Para cada pareja (B, A) H


9. Se aade una produccion B

Ejemplo 60 Consideremos la gramtica resultante en el ejemplo 58 del apartado anterior


S ABb, S Ab, S Bb, S ABC, S AB,
S AC, S BC, S A, S B, S C,
C abC, C ab, B bB, B b, A aA,
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

Se aaden a continuacion las producciones (no se consideran las repetidas)


S a,

S aA,

S ab,

S bB,

C aA,

S b,

C a,

S abC,

C bB,

Cb

Ejemplo 61 El lenguaje L = {an bn : n 1} {an ban : n 1} viene generado por la siguiente


gramtica de tipo 2:
S A,
H ab,

S B,

A ab,

H aHb,

A aHb

B aBa, B b

Las parejas resultantes en el conjunto H son {(S, A), (S, B)}. La gramtica sin producciones
unitarias equivalente es:
A ab,
B b,

A aHb,
S ab,

H ab,

H aHb,

S aHb,

S aBa,

B aBa,
S b.

Cap. 4

Gramticas Libres de Contexto

101

4.3. Formas Normales


4.3.1. Forma Normal de Chomsky
Una gramtica de tipo 2 se dice que est en forma normal de Chomsky si y solo si todas las
producciones tienen la forma
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:
1. Para cada produccion de la forma A 1 . . . n , i (V T ), n 2
2. Para cada i , si i es terminal: i = a T
3. Se aade la produccion Ca a
4. Se cambia i por Ca en A 1 . . . n
5. Para cada produccion de la forma A B1 , . . . Bm , m 3
6. Se aaden (m 2) variables D1 , D2 , . . . , Dm2 (distintas para cada produccion)
7. La produccion A B1 . . . Bm se reemplaza por
A B1 D1 , D1 B2 D2 , . . . , Dm2 Bm1 Bm
Ejemplo 62 Sea la Gramtica G = ({S, A, B}, {a, b}, P, S) dada por las producciones
S bA | aB,

A bAA | AS | a,

B aBB | bS | b

Para pasarla a forma normal de Chomsky, en el ciclo asociado al paso 1 se aaden 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,

B Ca E1 | Cb S | b,

E1 B,

D1 AA,

Ca a,

Con esto la gramtica ya est en forma normal de Chomsky.

Cb b

102

Modelos de Computacin I

4.3.2. Forma Normal de Greibach


Una gramtica se dice que est en forma normal de Greibach si y solo si todas las producciones tienen la forma
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 ,

a T, V .
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
La idea bsica de esta operacin es la siguiente. Si aplicamos A B, entonces, despus
tenemos que realizar una sustitucin de B, mediante una produccin B . Uniendo las dos
sustituciones, obtenemos A B . Es decir, A se puede sustituir por . Si eliminamos
A B, esta sustitucin ya no se puede hacer, por lo que si no queremos perder la posibilidad
de eliminar ninguna palabra despus de esta eliminacin, tenemos que aadir producciones que
nos permitan hacer esta sustitucin. Por ese motivo aadimos A , que permite realizar los
dos pasos de antes en uno slo.
La otra operacin bsica consiste en eliminar todas las producciones del tipo A A donde
V . Esto se hace siguiendo los siguiente pasos:
1. Aadir una nueva variable BA
2. Para cada produccion A A
3. Aadir BA y BA BA

Cap. 4
4. Eliminar A A
5. Para cada produccion A
6. Aadir A BA

Gramticas Libres de Contexto

103

no empieza pro A

Llamemos ELIMINA1 (A B) a la funcin que reliza el primer paso y ELIMINA2 (A) a la


funcin que reliza el segundo paso. Si si llama a ELIMINA2 (A j ), la variable que aadimos la
notaremos como B j .
En estas condiciones vamos a realizar un algoritmo, al final del cual todas las producciones
tengan una forma que corresponda a alguno de los patrones siguientes:
A a,

a T, V .

Ai A j ,

j > i, V .

B j Ai ,

El algoritmo es como sigue:


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 )
A continuacin se puede eliminar definitivamente la recursividad por la izquierda con el
siguiente algoritmo pasando a forma normal de Greibach
1. Para cada i = m 1, . . ., 1
2. Para cada produccion de la forma Ai A j ,
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 )

j>i

El resultado del segundo algoritmo es ya una gramtica en forma


normal de Greibach.

104

Modelos de Computacin I

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 ,
Queda:
A1 A 2 A3 ,
A3 a,

A2 A 3 A1 ,

A 3 A 3 A1 A3 A2 ,

A3 bA3 A2

A2 b,
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:
A2 aA1 ,

A2 aB3 A1 ,

A2 bA3 A2 B3 A1 ,

A2 bA3 A2 A1

Queda:
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

A1 bA3 ,

A1 aA1 A3 ,

A1 bA3 A2 B3 A1 A3 ,

Gramticas Libres de Contexto

A1 aB3 A1 A3 ,

A1 bA3 A2 A1 A3

Queda:
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:
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 ,
Queda:
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 bA3 A2 B3 A1 ,
A3 bA3 A2 ,
A1 bA3 ,
A1 bA3 A2 B3 A1 A3 ,
B3 aA1 A3 A3 A2 ,
B3 aB3 A1 A3 A3 A2 ,
B3 aB3 A1 A3 A3 A2 B3 ,

A2 aA1 ,
A2 bA3 A2 A1
A3 aB3 ,
A1 aA1 A3 ,
A1 bA3 A2 A1 A3 ,
B3 aB3 A1 A3 A3 A2 ,
B3 bA3 A3 A2 B3 ,
B3 bA3 A2 B3 A1 A3 A3 A2 B3 ,

A2 aB3 A1 ,
A3 a,
A3 bA3 A2 B3 ,
A1 aB3 A1 A3 ,
B3 bA3 A3 A2 ,
B3 bA3 A2 B3 A1 A3 A3 A2 ,
B3 aA1 A3 A3 A2 B3 ,
B3 aB3 A1 A3 A3 A2 B3

105

106

Modelos de Computacin I

Captulo 5
Autmatas con Pila

107

108

Modelos de Computacin I

5.1. Definicin de Autmata con Pila


Los lenguajes generados por las gramticas libres de contexto tambin tienen un autmata
asociado que es capaz de reconocerlos. Estos autmatas son parecidos a los autmatas finitos determinsticos, solo que ahora tendrn un dispositivo de memoria de capacidad ilimitada:
una pila. A contincuacin daremos la definicin formal de autmata con pila no determinstico
(APND). Al contrario que en los autmatas finitos, los autmatas con pila no detrminsticos y
determinsticos no aceptan las mismas familias de lenguajes. Precisamente son los no determsticos los asociados con los lenguajes libres de contexto. Los determinsticos aceptan una familia
mas restringida de lenguajes.
Definicin 43 Un autmata con pila no determinstico (APND) es una septupla (Q, A, B, , q 0 , Z0 , F)
en la que
Q es un conjunto finito de estados
A es un alfabeto de entrada
B es un alfabeto para la pila
es la funcin de transicin
: Q (A {}) B (Q B )
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 , 0, B) = {(q1 , BB)}
(q1 , 0, G) = {(q1 , BG)}
(q1 , c, R) = {(q2 , R)}
(q1 , c, G) = {(q2 , G)}
(q2 , 1, G) = {(q2 , )}

(q1 , 1, R) = {(q1 , GR)}


(q1 , 1, B) = {(q1 , GB)}
(q1 , 1, G) = {(q1 , GG)}
(q1 , c, B) = {(q2 , B)}
(q2 , 0, B) = {(q2 , )}
(q2 , , R) = {(q2 , )}

Cap. 5

Autmatas con Pila

109

La interpretacin es que si el autmata est en el estado q1 y lee un 0 entonces permanece


en el mismo estado y aade una B a la pila; si lo que lee es un 1, entonces aade una G; si lee
una c pasa a q2 . En q2 se saca una B por cada 0, y una G por cada 1.
Se llama descripcin instant nea o configuracin de un autmata con pila a una tripleta
(q, u, ) Q A B
en la que q es el estado en el se encuentra el autmata, u es la parte de la cadena de entrada que
queda por leer y el contenido de la pila (el primer smbolo es el tope de la pila).
Definicin 44 Se dice que de la configuracin (q, au, Z) se puede llegar a la configuracin
(p, u, ) y se escribe (q, au, Z) ` (p, u, ) si y solo si
(p, ) (q, a, Z)
donde a puede ser cualquier smbolo de entrada o la cadena vaca.
Definicin 45 Si C1 y C2 son dos configuraciones, se dice que se puede llegar de C1 a C2 me

diante una sucesin de pasos de c lculo y se escribe C1 ` C2 si y solo si exite una sucesin de
configuraciones T1 , . . . , Tn tales que
C1 = T1 ` T ` Tn1 ` Tn = C2
Definicin 46 Si M es un APND y u A , se llama configuracin inicial correspondiente a esta
entrada, u, a (q0 , u, Z0 ) donde q0 es el estado inicial y Z0 el smbolo inicial de la pila.
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 , , )

5.1.1. Lenguaje aceptado por un autmata con pila


Existen dos criterios para determinar el lenguaje aceptado por un APND:
a) Lenguaje aceptado por estados finales:

L(M) = {w A : (q0 , w, Z0 ) ` (p, , ), p F, B }

110

Modelos de Computacin I

b) Lenguaje aceptado por pila vaca:

N(M) = {w A : (q0 , w, Z0 ) ` (p, , ), p Q}


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
/ ya que al no haber estados finales, nunca se puede verificar la condicin de
autmata L(M) = 0,
aceptacin. Una pequea modificacin del APND, lo tranformara en una autmata que aceptase 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
(q1 , 0, R) = {(q1 , BR)}
(q1 , 0, B) = {(q1 , BB)}
(q1 , 0, G) = {(q1 , BG)}
(q1 , c, R) = {(q2 , R)}
(q1 , c, G) = {(q2 , G)}
(q2 , 1, G) = {(q2 , )}
Teorema 15

(q1 , 1, R) = {(q1 , GR)}


(q1 , 1, B) = {(q1 , GB)}
(q1 , 1, G) = {(q1 , GG)}
(q1 , c, B) = {(q2 , B)}
(q2 , 0, B) = {(q2 , )}
(q2 , , R) = {(q3 , R)}

a) Si M es un APND entonces existe otro autmata M 0 , tal que N(M) = L(M 0 )

b) Si M es un APND entonces existe otro autmata M 0 , tal que L(M) = N(M 0 ).


Demostracin.a) Si M = (Q, A, B, , q0, Z0 , F), entonces el autmata M 0 se construye a partir de M siguiendo
los siguientes pasos:
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

b) Si M = (Q, A, B, , q0, Z0 , F), entonces el autmata M 0 se construye a partir de M siguiendo


los siguientes pasos:
Se aaden dos estados nuevos, q00 y qs . El estado incial de M 0 ser q00 .
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, , H) = {(qs , H)}, q F, H B {Z00 }
(qs , , H) = {(qs , )}, H B {Z00 }

5.2. Autmatas con Pila y Lenguajes Libres de Contexto


Teorema 16 Si un lenguaje es generado por una gramtica libre del contexto, entonces es aceptado por un Autmata con Pila No-Determinstico.
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.

Ejemplo 67 Para la gramtica en forma normal de Greibach:


S aAA
A aS | bS | a
el autmata es
donde

/
M = ({q}, {a, b}, {A, S}, , q, S, 0)
(q, a, S) = {(q, AA)}

112

Modelos de Computacin I
(q, a, A) = {(q, S), (q, )}
(q, b, A) = {(q, S)}

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:
V ser el conjunto de los objetos de la forma [q,C, p], donde p, q Q y C B, adems de
la variable S que ser la variable inicial.
P ser el conjunto de las producciones de la forma
1. S [q0 , Z, q] para cada q Q.
2. [q,C, qm ] a[p, D1 , q1 ][q1 , D2 , q2 ] . . .[qm1 , Dm , qm ]
donde a A , y C, D1 , . . . , Dm B tales que
(p, D1 D2 ...Dm ) (q, a,C)
(si m = 0, entonces la produccin es [q, A, p] a).
Esta gramtica genera precisamente el lenguaje N(M). La idea de la demostracin es que la
generacin de una palabra en esta gramtica simula el funcionamiento del autmata no determinstico. En particular, se verificar que [q,C, p] generar la palabra x si y solo si el autmata
partiendo del estado q y llegando al estado p, puede leer la palabra x eliminando el smbolo C
de la pila.

/ donde
Ejemplo 68 Si partimos del autmata M = ({q0 , q1 }, {0, 1}, {X , Z}, , q0 , Z0 , 0),
(q0 , 0, Z0 ) = {(q0 , X Z0 )}, (q1 , 1, X ) = {(q1 , )}
(q0 , 0, X ) = {(q0 , X X )}, (q1 , , X ) = {(q1 , )}
(q0 , 1, X ) = {(q1 , )},
(q1 , , Z0 ) = {(q1 , )}
las producciones de la gramtica asociada son

Cap. 5

Autmatas con Pila

113

S [q0 , Z0 , q0 ]
S [q0 , Z0 , q1 ]
[q0 , Z0 , q0 ] 0[q0 , X , q0 ][q0 , Z0 , q0 ]
[q0 , Z0 , q1 ] 0[q0 , X , q0 ][q0 , Z0 , q1 ]
[q0 , Z0 , q0 ] 0[q0 , X , q1 ][q1 , Z0 , q0 ]
[q0 , Z0 , q1 ] 0[q0 , X , q1 ][q1 , Z0 , q1 ]
[q0 , X , q0 ] 0[q0 , X , q0 ][q0 , X , q0]
[q0 , X , q1 ] 0[q0 , X , q0 ][q0 , X , q1]
[q0 , X , q0 ] 0[q0 , X , q1 ][q1 , X , q0]
[q0 , X , q1 ] 0[q0 , X , q1 ][q1 , X , 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 indistintamente como aquel que es generado por una gramtica de tipo 2 o bien como aquel que es
aceptado por un autmata con pila.

5.3. Lenguajes Independientes del Contexto Deterministas


Definicin 47 Un autmata con pila se dice que es determinista (APD) si y solo si se verifican
las dos condiciones siguientes
/ a A.
1. q Q, Z B, si (q, , Z) 6= 0/ entonces (q, a, Z) = 0,
2. a A , z B, q F,

(q, a, Z) nunca contiene ms de un elemento.

114

Modelos de Computacin I

El autmata del Ejemplo 64 es un autmata determinista.


La clase de lenguajes aceptados por un autmata con pila determinista es ms reducida que
la clase de los lenguajes aceptados por los autmatas con pila genricos. Adems, en el caso
de los autmatas con pila deterministas, los dos criterios (pila vaca y estados finales) no son
equivalentes.
Definicin 48 Un lenguaje L se dice que es independiente del contextos determinista si y
solo si es aceptado por un autmata con pila determinista por el criterio de estados finales.
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
(q1 , 0, R) = {(q1 , BR)}
(q1 , 0, B) = {(q1 , BB)}
(q1 , 0, G) = {(q1 , BG)}
(q1 , c, R) = {(q2 , R)}
(q1 , c, G) = {(q2 , G)}
(q2 , 1, G) = {(q2 , )}

(q1 , 1, R) = {(q1 , GR)}


(q1 , 1, B) = {(q1 , GB)}
(q1 , 1, G) = {(q1 , GG)}
(q1 , c, B) = {(q2 , B)}
(q2 , 0, B) = {(q2 , )}
(q2 , , R) = {(q3 , )}

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.
Lo que hemos hecho en el ejemplo anterior es siempre posible y se puede demostrar el
siguiente resultado.
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 lenguaje 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.
(q1 , 0, X ) = {(q1 , X X )} (q1 , 1,Y ) = {(q1 ,YY )}
(q1 , 1, X ) = {(q1 , )}
(q1 , 0,Y ) = {(q1 , )}
(q1 , , R) = {(q2 , R)}
(q2 , 0, R) = {(q1 , X R)}
(q2 , 1, R) = {(q1 ,Y R)}
Sin embargo, no puede ser aceptado por un autmata determinista por el criterio de pila
vaca. El problema es el siguiente: si fuese posible, despus de leer 0011 se quedara la pila
vaca, pero entonces la palabra formada por 001101 no podra ser aceptada, porque al ser el
autmata determinista, despus de leer la primera parte de la parte, 0011, la pila se quedara
vaca y como un autmata no puede seguir funcionando con la pila vaca, la palabra completa
001101 no podra ser leida y, por tanto no es aceptada.
El razonamiento del ejemplo anterior se puede generalizar a cualquier lenguaje en el que se
de la misma situacin: dos palabras u y v del lenguaje distintas tal que una es un prefijo de la
otra (una subcadena del principio de la palabra). De hecho esta propiedad es fundamental para
caracterizar a los lenguajes aceptados por un autmata con pila deterministas por el criterio de
estados finales que lo son tambin por el criterio de pila vaca. En lo que sigue, formalizamos lo
que que acabamos de decir.
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.
Si tenemos un lenguaje, L, independiente del contexto determinista que no cumple la propiedad prefijo es fcil tranformarlo en otro lenguaje muy similar que cumple la propiedad prefijo y
puede ser aceptado por un autmata con pila determinista por el criterio de pila vaca. Basta con
considerar un smbolo $ 6 L y entonces el lenguaje viene dado por
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
Propiedades de los Lenguajes Libres del
Contexto

117

118

Modelos de Computacin I

6.1. Lema de Bombeo


Comenzamos esta seccin con un lema que nos da una condicin necesaria que deben de
cumplir todos los lenguajes libres de contexto. Nos sirve para demostrar que un lenguaje dado
no es libre de contexto, comprobando que no cumple esta condicin necesaria.
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.

Ejemplo 71 Vamos a utilizar el lema de bombeo para probar que el lenguaje L = {a i bi ci | i 1}


no es libre de contexto.
Supongamos que L fuese libre de contexto y sea n la constante especificada en el Lema
de Bombeo. Consideremos la palabra z = an bn cn L, que tiene una longitud mayor que n.
Consideremos que z se puede descomponer de la forma z = uvxy, verificando las condiciones
del lema de bombeo.
Como |vwx| n, no es posible para vx tener smbolos a y c al mismo tiempo: entre la ltima
a y la primera c hay n smbolos. En estas condiciones se pueden dar los siguientes casos:
|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

S
...

...

u
...

...
y
...

...

...

...

v
...

x
...

...

...

Figura 6.1: Arbol de Derivacin en el Lema de Bombeo


|vx| contiene solamente smbolos b. Se llega a una contradiccin por un procedimiento
similar al anterior.
|vx| contiene solamente smbolos c. Se llega a una contradiccin por un procedimiento
similar.
|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 necesaria. 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
L = {ai b j ck d l |(i = 0) ( j = k = l)}
Ejemplo 72 Demostrar que el lenguaje L = {ai b j ci d j : i, j 0} no es libre de contexto.
Ejemplo 73 Demostrar que el lenguaje L = {ai b j ck : i j k 0} no es libre de contexto.

120

Modelos de Computacin I

6.2. Propiedades de Clausura de los Lenguajes Libres de Contexto


Teorema 20 Los lengaujes libres de contexto son cerrados para las operaciones:
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. Demostraremos que los lenguajes L1 L2 , L1 L2 y L1 son libres de contexto, encontrando gramticas de
tipo 2 que los generen.
L1 L2 . Una gramtica que genera este lenguaje es G3 = (V1 V2 {S3 }, T1 T2 , P3 , S3 ),
donde S3 es una nueva variable, y P3 = P1 P2 ms las producciones S3 S1 y S3 S2 .
L1 L2 . Una gramtica que genera este lenguaje es G4 = (V1 V2 {S4 }, T1 T2 , P4 , S4 ),
donde S4 es una nueva variable, y P4 = P1 P2 ms la produccin S4 S1 S2 .
L1 . Una gramtica que genera este lenguaje es G5 = (V1 {S5 }, T1 , P5 , S5 ), donde P5 es P1
ms las producciones S5 S1 S5 y S5 .

Algunas propiedades de clausura de los lenguajes regulares no se verifican en la clase de los


lenguajes libres de contexto, como las que expresan el siguiente teorema y corolario.
Teorema 21 La clase de los lenguajes libres de contexto no es cerrada para la interseccin.
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

y el segundo, por la gramtica:


S CD
C aC|a
D bDc|bc
Como L2 L3 = L1 , se deduce que la clase de lenguajes libres de contexto no es cerrada para
la interseccin.

Corolario 1 La clase de lenguajes libres de contexto no es cerrada para el complementario.


Demostracin.Es inmediato, ya que como la clase es cerrada para la unin, si lo fuese para el complementario, se podra demostrar, usando las leyes DeMorgan que lo es tambin para la interseccin.

6.3. Algoritmos de Decisin para los Lenguajes Libres de Contexto


Existen una serie de problemas interesantes que se pueden resolver en la clase de los lenguajes libres de contexto. Por ejemplo, existen algoritmos que nos dicen si un Lenguaje Libre de
Contexto (dado por una gramtica de tipo 2 o un autmata con pila no determinstico) es vaco,
finito o infinito. Sin embargo, en la clase de lenguajes libres de contexto comienzan a aparecer algunas propiedades indecidibles. A continuacin, veremos algoritmos para las propiedades
decidibles y mencionaremos algunas propiedades indecidibles importantes.
Teorema 22 Existen algoritmos para determinar si un lenguaje libre de contexto es
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.

Ejemplo 74 Consideremos la gramtica con producciones,


S AB
A BC|a
B CC|b
Ca
El grafo asociado es el de la figura 6.2. No tiene ciclos y el lenguaje es finito. Si aadimos
la produccin C AB, el grafo tiene ciclos (figura 6.3) y el lenguaje generado es infinito.

6.3.1. Algoritmos de Pertenencia


Estos algoritmos tratan de resolver el siguiente problema: dada una gramtica de tipo 2,
G = (V, T, P, S) y una palabra u T , determinar si la palabra puede ser generada por la gramtica. Esta propiedad es indecidible en la clase de lenguajes recursivamente enumerables, pero es
posible encontrar algoritmos para la clase de lenguajes libres de contexto.

Cap. 6

Propiedades de los Lenguajes Libres del Contexto

123

Figura 6.2: grafo asociado a una gramtica de tipo 2 con lenguaje finito
S

Figura 6.3: grafo asociado a una gramtica de tipo 2 con lenguaje infinito
Un algoritmo simple, pero ineficiente se aplica a gramticas en forma normal de Greibach
(si una gramtica no est en esta forma se pasa, teniendo en cuenta que hemos podido dejar
de aceptar la palabra vaca). La pertencencia de una palabra no vaca se puede comprobar en
esta forma normal de Greibach de la siguiente forma: Como cada produccin aade un smbolo
terminal a la palabra generada, sabemos que una palabra, u, de longitud |u| ha de generarse
en |u| pasos. El algoritmo consistira en enumerar todas las generaciones por la izquierda de
longitud |u|, tales que los smbolos que se vayan generando coincidan con los de la palabra u, y
comprobar si alguna de ellas llega a generar la palabra u en su totalidad. Este algoritmo para, ya
que el nmero de derivaciones por la izquierda de una longitud dada es finito. Sin embargo puede
ser muy ineficiente ( exponencial en la longitud de la palabra). Para comprobar la pertenencia
de la palabra vaca se puede seguir el siguiente procedimiento:
Si no hay producciones nulas, la palabra vaca no pertence.
Si hay producciones nulas, la palabra vaca pertenece si y solo si al aplicar el algoritmo
que elimina las producciones nulas, en algn momento hay qhe eliminar la produccin
S .
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

de Cocke-Younger-Kasami (CYK). Este algoritmo se aplica a palabras en forma normal de


Chomsky. Este consta de los siguientes pasos (n es la longitud de la palabra).
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

V11

V21

V31

V41

V51

V12

V22

V32

V42

V13

V23

V33

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

V51

V21
V22
V23

u51

V42
V33

V24

Ejemplo 75 Consideremos la gramtica libre de contexto dada por las producciones


S AB|BC
A BA|a
B CC|b
C AB|a
Comprobar la pertenencia de las palabras baaba, aaaaa, aaaaaa al lenguaje generado por la
gramtica.
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
REGIST ROS[0] = {(0, 0, S, , ) : S es una produccin}
REGIST ROS[ j] = 0/ para j = 1, . . ., n.
j=0
P2 Clausura.- Para cada registro (i, j, A, , B) en REGIST ROS[ j] y cada produccin B ,
crear el registro ( j, j, B, , ) e insertarlo en REGIST ROS[ j]. Repetir la operacin recursivamente para los nuevos registros insertados.
P3 Avance.- Para cada registro (i, j, A, , c) en REGIST ROS[ j], donde c es un smbolo terminal 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.
P4 Terminacin.- Para cada par de registros de la forma (i, j, A, , ) en REGIST ROS[ j]
y (h, i, B, A, ) en REGIST ROS[i], crear el nuevo registro (h, j, B, A, ) e insertarlo en
REGIST ROS[ j].
P5 Si j < n ir a P2.
P6 Si en REGIST ROS[n] hay un registro de la forma (0, n, S, , ), entonces u es generada.
En caso contrario no es generada.
Ejemplo 76 Comprobar mediante el algoritmo de Early si la palabra baa es generada por la
gramtica con producciones:
S AB,
B CC,

S BC,
B b,

A BA,
C AB,

A a,
Ca

Despus de aplicar el paso de inicializacin, el contenido de REGIST ROS[0] es:


REGIST ROS[0] :(0, 0, S, , AB), (0, 0, S, , BC)

Cap. 6

Propiedades de los Lenguajes Libres del Contexto

127

(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.

6.3.2. Problemas Indecidibles para Lenguajes Libres de Contexto


Para terminar el apartado de algoritmos de decisin para gramticas libres de contexto daremos algunos problemas que son indecidibles, es decir, no hay ningn algoritmo que los resuelva.
En ellos se supone qhe G, G1 y G2 son gramticas libres de contexto dadas y R es un lenguaje
regular.
/
Saber si L(G1 ) L(G2 ) = 0.
Determinar si L(G) = T , donde T es el conjunto de smbolos terminales.
Comprobar si L(G1 ) = L(G2 ).
Determinar si L(G1 ) L(G2 ).
Determinar si L(G1 ) = R.

128

Modelos de Computacin I

Comprobar si L(G) es regular.


Determinar si G es ambigua.
Conocer si L(G) es inherentemente ambiguo.
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).
[3] J.G. Brookshear, Teora de la Computacin. Lenguajes formales, autmatas y complejidad.
Addison Wesley Iberoamericana (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).
[9] M. Harrison, Introduction to Formal Language Theory. Addison-Wesley (1978)
[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 Computation. 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)

También podría gustarte