SlideShare una empresa de Scribd logo
5
q
4
q 3
q
2
q
1
q0
q
Verano 2003
q
6
q
AUTOMATAS
Y LENGUAJES
Un enfoque de diseño
Tec de Monterrey
Ramón Brena
7
ba b a b ...
ii
Prefacio
En a˜nos recientes se ha visto la aparici´on de un buen n´umero de textos en el tema de
Lenguajes Formales y Aut´omatas (Ver al final referencias [10], [7], [23], [8], [3], [21], etc.). Por
una parte, esto indica la importancia y riqueza que el tema tiene; por otra, ante tal variedad
de oferta todo nuevo libro en el ´area requiere una justificaci´on que indique su aporte con
respecto a lo existente.
Este texto se sit´ua en una generaci´on de textos que tratan de poner el estudio de los
lenguajes formales y aut´omatas al alcance de estudiantes que no necesariamente son avezados
matem´aticos buscando establecer nuevos teoremas, sino que buscan una iniciaci´on a estos
temas, que adem´as les sirva como un ejercicio en el arte de formalizar, en particular en
nociones relacionadas con la computaci´on. Entre estos textos “accesibles”, encontramos, por
ejemplo, a [23]. Estos nuevos textos han reemplazado en muchas universidades a los “cl´asicos”
[6] y a´un [10] -que ya era m´as accesible-, y han permitido que la teor´ıa de la computaci´on se
estudie a nivel profesional en carreras relacionadas con computaci´on y matem´aticas.
El presente libro es resultado de una experiencia de impartir el curso de Teor´ıa de la
Computaci´on por m´as de 10 semestres en el ITESM, 1
en Monterrey, M´exico. Durante este
lapso, aunque ciertamente se fue enriqueciendo el contenido t´ecnico, el principal refinamiento
consisti´o en ir detectando cuidadosamente las dificultades principales a las que se enfrenta-
ban los estudiantes, para poder estructurar y presentar el material de forma que aquellos
estuvieran en condiciones de comprenderlo de manera eficiente. Aqu´ı el ´enfasis no est´a tanto
en hacer el curso “m´as f´acil” para los estudiantes, sino en asegurarse de que ´estos cuenten
con los elementos para que ellos mismos reconstruyan estos contenidos dentro de su cabeza;
no se trata, pues, simplemente de “vaciar” informaci´on en la cabeza del estudiante. La teor´ıa
educativa que sustenta esta forma de trabajo esta basada en el “aprendizaje por reestruc-
turaci´on” [18].
El texto est´a presentado de manera tal que es posible para el alumno estudiar el material
antes de cubrir el tema en clase; de hecho esta es la forma en que se utiliza en el ITESM,
contrariamente a muchas clases tradicionales, en las que el alumno se presenta a la exposici´on
del profesor y ya luego estudia el texto. En el ITESM la clase no se utiliza principalmente
para exposici´on del profesor, sino que se hacen ejercicios, problemas en equipo, miniex´amenes
semanales, etc. Esta situaci´on exige del texto que sea comprensible sin tener ninguna noci´on
del tema adquirida previamente, por lo que tuvimos que incluir explicaciones claras que
permitan al alumno reconstruir en su mente la idea intuitiva, y -sobre todo- ejemplos. A
lo largo del texto, cada una de las nociones presentadas es seguida inmediatamente por un
ejemplo ilustrativo.
Este texto es aplicable tanto al nivel de maestr´ıa en computaci´on o equivalente, como
a clases de nivel profesional (licenciaturas, ingenier´ıas). De hecho en el ITESM se aplica en
ambos niveles. La diferencia fundamental entre el enfoque del curso de nivel profesional y el
1
Abreviatura de “Instituto Tecnol´ogico y de Estudios Superiores de Monterrey”.
iii
de maestr´ıa estriba en que el curso de nivel ingeniero enfatiza los aspectos de “saber hacer”,
(por ejemplo, saber comparar dos aut´omatas deterministas), mientras que el curso de nivel
maestr´ıa enfatiza el “saber justificar” (por ejemplo, probar por inducci´on que una gram´atica
es correcta).
El material cuyo nivel es propiamente de maestr´ıa es identificado por medio de una
barra vertical al margen, como en el presente p´arrafo. Esto incluye tambi´en las secciones de
ejercicios.
En breve, los puntos que caracterizan a este libro, y que en cierta medida lo hacen
particular, son:
La presentaci´on did´actica ha sido -en nuestra opini´on- m´as pulida que en la mayor´ıa
de textos en Teor´ıa de la Computaci´on. Por ejemplo, primero se presentan las nociones
de manera intuitiva, y solamente despu´es se procede a su formalizaci´on.
Es aplicable tanto al nivel de maestr´ıa como en carreras de ingenier´ıa en computaci´on,
mostrando en forma expl´ıcita y gr´afica qu´e secciones est´an destinadas a cada nivel.
Siendo un libro m´as orientado a estudiantes de ingenier´ıa que de matem´aticas, se
enfatizan los temas que tienen com´unmente aplicaci´on en su campo profesional, como
los aut´omatas finitos. Esta es la raz´on por la que se cubren con mucho m´as detalle estos
temas que otros de inter´es m´as te´orico, como la calculabilidad en m´aquinas de Turing.
Sabemos de alumnos que han conseguido un buen empleo no universitario gracias a su
conocimiento de aut´omatas finitos.
Por la misma raz´on del punto anterior, ciertos temas que tradicionalmente se exponen
con una motivaci´on matem´atica, como las propiedades de los “Lenguajes Regulares”,
en este texto se presentan en el contexto de m´etodos de dise˜no, lo que es consistente
con nuestro enfoque ingenieril. Es este aspecto lo que justifica el subt´ıtulo “un enfoque
de dise˜no” de este texto.
Ofrecemos metodolog´ıas para resolver ciertas clases de problemas, tales como el dise˜no
de expresiones regulares y gram´aticas, que no son presentadas en otros libros de teor´ıa
de aut´omatas, o lo hacen de forma mucho m´as escueta. Inclusive algunos temas, tales
como las propiedades de cerradura de los lenguajes regulares a la uni´on de conjuntos,
se presentan aqu´ı como una herramienta de soluci´on de problemas de dise˜no, y no
simplemente por el inter´es matem´atico del tema.
Presentamos errores frecuentes de los estudiantes de esta materia, permitiendo de este
modo que el lector se beneficie de una extensa experiencia directa en la ense˜nanza de
la materia.
Los algoritmos no se presentan en forma de “pseudoc´odigo”, es decir, usando estruc-
turas de control de lenguajes imperativos (p.ej. while, for, etc.), sino que damos una
iv
interpretaci´on intuitiva de los resultados intermedios obtenidos por los algoritmos. Pen-
samos que este enfoque brinda una mejor comprensi´on de los algoritmos, pues es m´as
f´acil recordar ideas que lineas de c´odigo.
¡El texto est´a en espa˜nol en el original! (es decir, no se trata de una traducci´on de un
texto en ingl´es). Las traducciones son muchas veces desventajosas respecto al original.
El libro, en tanto que libro electr´onico, es un archivo est´andar de tipo PDF, con “hiperli-
gas” que permiten localizar r´apidamente figuras, citas, p´aginas del texto, etc.
¡El libro es gratuito! En efecto, no se distribuye con fines de lucro. Esto no pretende
atentar contra la industria editorial, sino apoyar el aprendizaje del ´area de aut´omatas y
lenguajes en Am´erica Latina, regi´on que no est´a sobrada de recursos como para querer
engrosar los flujos de capital hacia los grandes centros editoriales del mundo.
La estructura de este texto es la siguiente: despu´es de una breve revisi´on de las nociones
preliminares de matem´aticas, en los primeros cap´ıtulos (2-3) veremos la clase m´as simple de
lenguajes, los Lenguajes Regulares, junto con las m´aquinas abstractas que les corresponden
–los Aut´omatas Finitos–, y al mismo tiempo introduciremos una metodolog´ıa de an´alisis de
las m´aquinas abstractas y de los lenguajes, metodolog´ıa que volveremos a utilizar en las
siguientes secciones del curso, para otros tipos de lenguajes y de m´aquinas.
En los cap´ıtulos 4 y 5 veremos los Lenguajes Libres de Contexto y los Aut´omatas de Pila.
Finalmente, a partir del cap´ıtulo 6 estudiaremos el tipo de m´aquinas m´as poderoso, las
M´aquinas de Turing, que son en cierta forma el l´ımite te´orico de lo que es posible de hacer
con m´aquinas procesadoras de informaci´on.
T´ıpicamente, en un curso de nivel profesional se inicia con el cap´ıtulo de preliminares,
y se contin´ua con los cap´ıtulos 2-3. Se enfatizan los cap´ıtulos 4 y 5, as´ı como la teor´ıa de
los compiladores. A continuaci´on se cubren los aspectos b´asicos de las M´aquinas de Turing
(inicio de cap´ıtulo 6).
En el curso de maestr´ıa, la revisi´on de preliminares casi se omite, y se cubren los cap´ıtulos
2-3, s´olo que en un nivel de profundidad mayor que en el caso del nivel profesional. 2
Luego
se procede a estudiar los Aut´omatas de Pila, las M´aquinas de Turing y la Tesis de Church
(cap´ıtulos 4, 5 y 6), con ´enfasis en las pruebas.
Agradezco la colaboraci´on del Dr. Jos´e Luis Aguirre en la correcci´on de los errores en
versiones previas, as´ı como en sugerencias para mejorar la exposici´on de ciertos temas. Tam-
bi´en agradezco al Comit´e del Fondo de Apoyo a Proyectos en Did´actica su apoyo financiero.
Finalmente doy las gracias a muchos alumnos que ayudaron a depurar el escrito mientras
sirvi´o como apuntes de la materia.
2
Recordar que el material de nivel maestr´ıa est´a indicado con una barra vertical en el margen.
´Indice general
1. Preliminares 3
1.1. Conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.1. Operaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.2. Operaciones con conjuntos . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.3. Equivalencias de conjuntos . . . . . . . . . . . . . . . . . . . . . . . . 7
1.1.4. Relaciones y funciones . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.1.5. Conjuntos infinitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.2. Manejo l´ogico de enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.2.1. Tablas de verdad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.3. Pruebas por inducci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.4. Lenguajes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.4.1. Alfabeto, cadena de caracteres . . . . . . . . . . . . . . . . . . . . . . 17
1.4.2. Lenguajes, operaciones con lenguajes . . . . . . . . . . . . . . . . . . 17
1.5. La jerarqu´ıa de Chomsky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.6. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
I Lenguajes regulares y sus m´aquinas 23
2. Aut´omatas finitos 25
v
vi ´INDICE GENERAL
2.1. Modelado de sistemas discretos . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.1.1. Estados finales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.2. M´aquinas de estados finitos . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.2.1. Funcionamiento de los aut´omatas finitos . . . . . . . . . . . . . . . . 31
2.3. Definici´on formal de aut´omatas finitos . . . . . . . . . . . . . . . . . . . . . 32
2.4. M´etodos de dise˜no de AFDs . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.4.1. Dise˜no por conjuntos de estados . . . . . . . . . . . . . . . . . . . . . 39
2.4.2. Dise˜no de AFD por complemento . . . . . . . . . . . . . . . . . . . . 41
2.5. Equivalencia de aut´omatas finitos. . . . . . . . . . . . . . . . . . . . . . . . . 42
2.6. Simplificaci´on de Aut´omatas finitos . . . . . . . . . . . . . . . . . . . . . . . 47
2.6.1. Tabla de estados distinguibles . . . . . . . . . . . . . . . . . . . . . . 48
2.6.2. Simplificaci´on por clases de equivalencia . . . . . . . . . . . . . . . . 50
2.7. Aut´omatas finitos con salida . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
2.7.1. M´aquinas de Moore . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
2.7.2. M´aquinas de Mealy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
2.7.3. Equivalencia de las m´aquinas de Moore y Mealy . . . . . . . . . . . . 56
2.7.4. C´alculo de funciones en AF . . . . . . . . . . . . . . . . . . . . . . . 56
2.8. Aut´omatas finitos no deterministas . . . . . . . . . . . . . . . . . . . . . . . 58
2.8.1. Representaci´on formal de los AFN . . . . . . . . . . . . . . . . . . . . 59
2.8.2. Dise˜no de AFN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
2.8.3. Equivalencia de AFD Y AFN . . . . . . . . . . . . . . . . . . . . . . 64
2.8.4. M´as dise˜no de AFN: Intersecci´on de lenguajes . . . . . . . . . . . . . 72
2.9. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
3. Expresiones Regulares y Gram´aticas Regulares 79
´INDICE GENERAL vii
3.1. Lenguajes Regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
3.1.1. Definici´on formal de Lenguajes Regulares . . . . . . . . . . . . . . . . 80
3.2. Expresiones regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
3.2.1. Significado de las ER . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
3.2.2. Metodolog´ıa de dise˜no de las ER . . . . . . . . . . . . . . . . . . . . 83
3.2.3. Equivalencias de Expresiones Regulares . . . . . . . . . . . . . . . . . 86
3.3. L´ımites de las representaciones textuales . . . . . . . . . . . . . . . . . . . . 88
3.4. Equivalencia de expresiones regulares y aut´omatas finitos . . . . . . . . . . . 89
3.4.1. Conversi´on de ER a AF . . . . . . . . . . . . . . . . . . . . . . . . . 90
3.4.2. Conversi´on de AF a ER . . . . . . . . . . . . . . . . . . . . . . . . . 91
3.5. Gram´aticas regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
3.5.1. Gram´aticas formales . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
3.5.2. Gram´aticas regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
3.5.3. Aut´omatas finitos y gram´aticas regulares . . . . . . . . . . . . . . . . 99
3.6. Limitaciones de los lenguajes regulares . . . . . . . . . . . . . . . . . . . . . 101
3.6.1. El teorema de bombeo . . . . . . . . . . . . . . . . . . . . . . . . . . 101
3.7. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
II Lenguajes libres de contexto y sus m´aquinas 109
4. Gram´aticas y lenguajes libres de contexto 111
4.1. Gram´aticas y la jerarqu´ıa de Chomsky . . . . . . . . . . . . . . . . . . . . . 112
4.2. Lenguajes y gram´aticas libres de contexto (LLC y GLC) . . . . . . . . . . . 113
4.3. Formalizaci´on de las GLC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
4.4. Dise˜no de GLC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
viii ´INDICE GENERAL
4.4.1. Adaptaci´on de GLC . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
4.4.2. GLC para uni´on de lenguajes . . . . . . . . . . . . . . . . . . . . . . 118
4.4.3. Mezcla de gram´aticas . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
4.4.4. GLC para la concatenaci´on de lenguajes . . . . . . . . . . . . . . . . 119
4.5. Arboles de derivaci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
4.5.1. Ambig¨uedad en GLC . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
4.5.2. Derivaciones izquierda y derecha . . . . . . . . . . . . . . . . . . . . . 124
4.6. Pruebas de correcci´on y completez . . . . . . . . . . . . . . . . . . . . . . . . 125
4.7. Gram´aticas libres y sensitivas al contexto . . . . . . . . . . . . . . . . . . . . 127
4.8. Transformaci´on de las GLC y Formas Normales . . . . . . . . . . . . . . . . 128
4.8.1. Eliminaci´on de reglas A → ε . . . . . . . . . . . . . . . . . . . . . . . 129
4.8.2. Eliminaci´on de reglas A → B . . . . . . . . . . . . . . . . . . . . . . 130
4.8.3. Eliminaci´on de reglas inaccesibles . . . . . . . . . . . . . . . . . . . . 131
4.8.4. Formas Normales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
4.9. Limitaciones de los LLC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
4.9.1. Teorema de bombeo para los LLC . . . . . . . . . . . . . . . . . . . . 136
4.10. Propiedades de decidibilidad de los LLC . . . . . . . . . . . . . . . . . . . . 138
4.11. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
5. Aut´omatas de Pila 145
5.1. Funcionamiento de los Aut´omatas de Pila (informal) . . . . . . . . . . . . . 146
5.2. Dise˜no de AP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
5.2.1. Combinaci´on modular de AP . . . . . . . . . . . . . . . . . . . . . . 149
5.3. Formalizaci´on de los AP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
5.4. Relaci´on entre AF y AP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
´INDICE GENERAL ix
5.5. Relaci´on entre AP y LLC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
5.6. Compiladores LL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
5.6.1. Principio de previsi´on . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
5.7. Compiladores LR(0) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
5.8. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
III M´aquinas de Turing y sus lenguajes 167
6. M´aquinas de Turing 169
6.1. Funcionamiento de la m´aquina de Turing . . . . . . . . . . . . . . . . . . . . 169
6.2. Formalizaci´on de la MT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
6.2.1. Configuraci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
6.2.2. Relaci´on entre configuraciones . . . . . . . . . . . . . . . . . . . . . . 177
6.2.3. Configuraci´on “colgada” . . . . . . . . . . . . . . . . . . . . . . . . . 178
6.2.4. C´alculos en MT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
6.2.5. Palabra aceptada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
6.3. MT para c´alculos de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . 179
6.4. Problemas de decisi´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
6.4.1. Relaci´on entre aceptar y decidir . . . . . . . . . . . . . . . . . . . . . 182
6.5. Tesis de Church . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
6.5.1. Comparaci´on de las MT con otras m´aquinas . . . . . . . . . . . . . . 184
6.6. M´aquinas de Post . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
6.6.1. Formalizaci´on de las MP . . . . . . . . . . . . . . . . . . . . . . . . . 187
6.6.2. Equivalencia entre MP y MT . . . . . . . . . . . . . . . . . . . . . . 188
6.7. L´ımites de las MT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
´INDICE GENERAL 1
6.7.1. El problema del paro de MT . . . . . . . . . . . . . . . . . . . . . . . 191
6.8. MT en la jerarqu´ıa de Chomsky . . . . . . . . . . . . . . . . . . . . . . . . . 192
6.9. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
2 ´INDICE GENERAL
Cap´ıtulo 1
Preliminares
En esta parte repasaremos brevemente algunas nociones y notaciones que ser´an necesarias
para comprender adecuadamente el resto del material de este libro. Debe, sin embargo,
quedar claro que este repaso queda fuera del ´area de aut´omatas y lenguajes formales. Por otra
parte, no es nuestra intenci´on hacer una introducci´on para un lector que no tenga ninguna
base en matem´atica, especialmente en teor´ıa de conjuntos, sino que ´unicamente haremos
un repaso, ayudando al lector a detectar sus puntos d´ebiles, adem´as de recordar nociones
que pueden no estar frescas. Un objetivo adicional del presente cap´ıtulo es uniformizar la
notaci´on, que var´ıa bastante de libro a libro. Para los lectores que requieran una introducci´on
m´as exhaustiva a la teor´ıa de conjuntos y temas afines, recomendamos textos como [19].
1.1. Conjuntos
El fundamento m´as importante para el estudio de los lenguajes y aut´omatas es la Teor´ıa
de Conjuntos. En efecto, siempre que hablemos de “formalizar” una noci´on, estaremos di-
ciendo en realidad “expresar en t´erminos de la Teor´ıa de Conjuntos”. Es por esto que en este
cap´ıtulo presentamos los conceptos m´as b´asicos de dicha Teor´ıa de Conjuntos.
La idea de un conjunto como una colecci´on de individuos u objetos no es, para un
verdadero matem´atico, suficientemente precisa, y se parece a la noci´on de clase; sin embargo,
para nuestros prop´ositos es suficiente.
Un conjunto que vamos a utilizar con frecuencia es el de los n´umeros naturales, {1, 2, 3, . . .},
denotado por N.
Los conjuntos pueden expresarse de dos maneras b´asicamente:
En extensi´on, lo cual quiere decir que citamos expl´ıcitamente cada uno de sus elementos,
3
4 CAP´ITULO 1. PRELIMINARES
como en el conjunto {1, 3, 5} que contiene exactamente los n´umeros 1, 3 y 5.
En intenci´on, dando una descripci´on precisa de los elementos que forman parte del
conjunto, en vez de citarlos expl´ıcitamente. Por ejemplo, el conjunto del punto anterior
puede ser visto como {i ∈ N|impar(i), i < 6}, donde se supone que los n´umeros impares
cumplen la condici´on impar(i).
Representamos a los conjuntos con letras may´usculas, como en A = {2, 4}. Los conjuntos
pueden contener conjuntos como elementos, como en B = {{a}, {b, c}}. El conjunto sin
elementos (vac´ıo) se representa por ∅ o bien por {}.
La notaci´on a ∈ B significa que a es elemento o est´a contenido en el conjunto B; por
ejemplo, {2, 3} ∈ {1, {2, 3}, 4}. Para indicar que a no est´a en B se escribe a ∈ B.
El tama˜no de un conjunto es el n´umero de elementos que contiene, y se representa como
|A| para un conjunto A. Por ejemplo, el tama˜no de {a, b, c} es 3, y el tama˜no de ∅ es cero. Por
ejemplo, el tama˜no de {{a}, {b, c}} es 2 y no 3, pues tiene 2 elementos, siendo el primero {a}
y el segundo {b, c}. La definici´on de “tama˜no” parece muy clara, pero hay conjuntos que no
tienen un n´umero determinado de elementos; estos se llaman “infinitos” y ser´an discutidos
m´as adelante.
Dos conjuntos A y B son iguales, A = B, si y s´olo si tienen los mismos elementos, esto
es, x ∈ A ssi x ∈ B. 1
Por ejemplo, {1, {2, 3}} = {{3, 2}, 1}; vemos que en los conjuntos el
orden de los elementos es irrelevante.
Se supone que en los conjuntos no hay repeticiones de elementos, y que cada elemento del
conjunto es distinto de todos los otros elementos. Sin embargo, si decimos, por ejemplo, i ∈ A,
j ∈ A, no estamos suponiendo que i sea distinto de j, pues tanto i como j son elementos
cualquiera de A. Si necesitamos que sean distintos, hay que indicarlo expl´ıcitamente, como
en la expresi´on i, j ∈ A, i = j.
La notaci´on A ⊆ B significa que el conjunto A est´a “contenido” en el conjunto B, o m´as
t´ecnicamente, que A es subconjunto de B. Por ejemplo, el conjunto {a, c} es subconjunto
de {a, b, c}, indicado como {a, c} ⊆ {a, b, c}. En otras palabras, A ⊆ B cuando siempre que
x ∈ A, tenemos tambi´en x ∈ B. Obs´ervese que de acuerdo con esta definici´on, A ⊆ A para
cualquier conjunto A: todo conjunto es subconjunto de s´ı mismo. Un caso extremo es el
conjunto vac´ıo, que es subconjunto de cualquier conjunto.
Para indicar que un subconjunto contiene menos elementos que otro, es decir, que es un
subconjunto propio de ´este, se escribe A ⊂ B. Por ejemplo, {a, c} ⊂ {a, b, c}. Claramente,
A = B ssi A ⊆ B y B ⊆ A. Obs´erverse tambi´en que si A ⊆ B, entonces |A| ≤ |B|, y si
A ⊂ B, entonces |A| < |B|.
Las relaciones de inclusi´on entre conjuntos se acostumbran representar gr´aficamente me-
diante los llamados “diagramas de Venn”, que denotan mediante ´areas cerradas (por ejemplo
1
“A ssi B” se lee “A si y s´olo siB”, y significa que A implica B y tambi´en B implica A.
1.1. CONJUNTOS 5
C BA
Figura 1.1: Diagrama de Venn
elipses) los conjuntos. Por ejemplo, en la figura 1.1 se ilustra la situaci´on donde un conjunto
A es subconjunto de B, y B es subconjunto de C.
En los diagramas de Venn es f´acil visualizar relaciones que de otra forma pueden parecer
complejas; por ejemplo, si un conjunto A es subconjunto de B y ´este es subconjunto de C,
se espera que A ⊆ C, como se aprecia intuitivamente en la figura 1.1, pues el ´area de A
est´a obviamente contenida dentro de la de C.
1.1.1. Operaciones
Llamamos operaciones a formas est´andar de combinar o transformar objetos matem´aticos.
Por ejemplo, una operaci´on habitual es la suma, que en la expresi´on “3 + 7” combina los
objetos 3 y 7 dando como resultado el objeto 10. El 3 y el 7, que son los objetos que se
combinan, son los operandos, el “+” es la operaci´on, y el 10 es el resultado. Una operaci´on
es binaria cuando tiene dos operandos. Es unaria si tiene un s´olo operando, como en la
operaci´on de la ra´ız cuadrada.
Una operaci´on “⊗” es conmutativa si x ⊗ y = y ⊗ x, como es el caso de la suma o la
multiplicaci´on de n´umeros. Se dice que es asociativa si x⊗(y ⊗z) = (x⊗y)⊗z; por ejemplo,
la suma es asociativa, pero no la resta, pues podemos ver que 8 − (4 − 3) = (8 − 4) − 3.
1.1.2. Operaciones con conjuntos
Sean A y B conjuntos. Se definen las siguientes operaciones con los conjuntos:
Uni´on de conjuntos, denotada por A ∪ B, que contiene los elementos del conjunto A y
tambi´en los del conjunto B, es decir, A ∪ B = {x|x ∈ A o x ∈ B}. Por ejemplo,
{1, 2, 3} ∪ {3, 4} = {1, 2, 3, 4}. La uni´on de conjuntos es conmutativa, lo cual se com-
prende f´acilmente visualizando las ´areas correspondientes en el diagrama de Venn de
la figura 1.2. 2
Tambi´en es asociativa.
2
En seguida se presenta una prueba matem´atica de esta propiedad.
6 CAP´ITULO 1. PRELIMINARES
Intersecci´on de conjuntos, escrita A ∩ B, que contiene los elementos que pertenecen si-
mult´aneamente al conjunto A y al conjunto B, es decir, A ∩ B = {x|x ∈ A y x ∈ B}.
Por ejemplo, {1, 2, 3} ∩ {3, 4} = {3}. En un diagrama de Venn la intersecci´on de dos
elipses se ilustra por el ´area que ambas comparten, como es el ´area sombreada de la
figura 1.2. La intersecci´on es conmutativa y asociativa.
Diferencia de conjuntos, A − B, que contiene los elementos de A que no est´an en B, esto
es, A − B = {x|x ∈ A y x ∈ B}. Por ejemplo, {1, 2, 3} − {3, 4} = {1, 2}. La
resta o diferencia de conjuntos no siempre le “quita” elementos al primer conjunto;
por ejemplo {1, 2, 3} − {4, 5} = {1, 2, 3}. La diferencia de conjuntos no es ni asociativa
ni conmutativa, lo cual se puede probar f´acilmente con un ejemplo (ver secci´on de
ejercicios).
Complemento de un conjunto, es un caso particular de la diferencia, cuando el primer
conjunto es considerado como el “universo” que contiene todos los elementos posibles.
Sea U un universo, entonces el complemento del conjunto A, denotada por Ac
contiene
los elementos del universo que no est´an en A. Por ejemplo, si el universo son los
n´umeros naturales {1, 2, 3, . . .}, complemento de los n´umeros pares son los n´umeros
nones: {2, 4, 6, . . .}c
= {1, 3, 5, . . .}. Claramente A ∪ Ac
= U, para todo conjunto A;
adem´as, A ∩ Ac
= ∅.
Potencia de un conjunto A, denotada como 2A
, contiene como elementos a todos los sub-
conjuntos de A, esto es, 2A
= {x|x ⊆ A}. En otras palabras, 2A
es un conjunto de
conjuntos. Por ejemplo, 2{1,2,3}
= {∅, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}}. Re-
cu´erdese que el conjunto vac´ıo siempre forma parte de todo conjunto potencia. La
notaci´on “2A
” recuerda que el tama˜no del conjunto potencia de A es 2 elevado a la
potencia del tama˜no de A, esto es, |2A
| = 2|A|
.
Producto Cartesiano de dos conjuntos, A × B, es el conjunto de pares ordenados (a, b)
tales que a ∈ A y b ∈ B. Por ejemplo,
{1, 2} × {3, 4, 5} = {(1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5)}
El tama˜no de un producto cartesiano A×B es |A| multiplicado por |B|, como se puede
verificar en el ejemplo anterior. El producto cartesiano no es conmutativo, pues no es
lo mismo un par (a, b) que uno (b, a), ni asociativo, pues no es lo mismo (a, (b, c)) que
((a, b), c).
Con ayuda de diagramas de Venn es f´acil comprender las operaciones de conjuntos. Por
ejemplo, usando la figura 1.2 es f´acil verificar una relaci´on tan compleja como A ∩ B =
(Ac
∪Bc
)c
, identificando las dos maneras de obtener el ´area sombreada de la figura, siguiendo
ya sea el lado izquierdo o derecho de la ecuaci´on.
A un elemento (a, b, c) de un producto cartesiano A × B × C se le llama tripleta, y
similarmente a un elemento (a, b, c, d) de un producto cartesiano A × B × C × D se le llama
cu´adruplo, a un elemento (a, b, c, d, e) de un producto cartesiano A × B × C × D × E se le
llama qu´ıntuplo, etc.
1.1. CONJUNTOS 7
BA
Figura 1.2: Intersecci´on de dos conjuntos
Ahora probaremos la conmutatividad de la uni´on de conjuntos. Esto es, queremos probar
que A ∪ B = B ∪ A para conjuntos cualesquiera A y B.
La igualdad A ∪ B = B ∪ A puede descomponerse en A ∪ B ⊆ B ∪ A y B ∪ A ⊆ A ∪ B,
por definiciones que hemos visto antes. Entonces vamos a probar una de ellas, por ejemplo
A ∪ B ⊆ B ∪ A, siendo la otra parte enteramente similar. Hemos visto que A ∪ B ⊆ B ∪ A
es equivalente a decir que si un elemento x es parte de A ∪ B, entonces x tambi´en debe
ser parte de B ∪ A. En consecuencia, lo que tenemos que probar es lo siguiente: suponiendo
que x ∈ (A ∪ B), debemos llegar a concluir que x ∈ (B ∪ A). Vamos a hacer esta prueba
enseguida.
Como x ∈ (A ∪ B), entonces, de acuerdo con la definici´on de uni´on, x ∈ A o bien x ∈ B
(o ambos a la vez). Si x ∈ A, entonces seguramente x ∈ A ∪ B, pues A ∪ B contiene todos
los elementos de A. Similarmente, si x ∈ B tendremos x ∈ A ∪ B. Es decir, en los dos casos
podemos concluir que x ∈ A ∪ B, que era lo que necesit´abamos para nuestra prueba.
1.1.3. Equivalencias de conjuntos
La igualdad A ∪ B = B ∪ A es una de las llamadas “equivalencias de conjuntos”, que son
muy ´utiles para reemplazar una expresi´on con operaciones de conjuntos por otra equivalente
pero m´as conveniente –por ejemplo m´as simple. En la lista siguiente presentamos algunas de
las equivalencias de m´as frecuente uso:
Leyes conmutativas A ∪ B = B ∪ A, A ∩ B = B ∩ A, para los conjuntos A y B.
Leyes distributivas A ∪ (B ∩ C) = (A ∪ B) ∩ (A ∪ C), A ∩ (B ∪ C) = (A ∩ B) ∪ (A ∩ C).
Leyes de De Morgan (A ∪ B)C
= AC
∩ BC
, (A ∩ B)C
= AC
∪ BC
.
Doble complemento (AC
)C
= A.
Ejemplo.- La intersecci´on de conjuntos puede expresarse usando la uni´on y el comple-
mento, de la manera siguiente: A ∩ B = ((A ∩ B)C
)C
= (AC
∪ BC
)C
.
8 CAP´ITULO 1. PRELIMINARES
Las equivalencias de conjuntos pueden verificarse f´acilmente usando los diagramas de
Venn, de la forma que hemos comentado antes, esto es, compaginando el ´area asociada a
cada uno de los lados de la ecuaci´on.
1.1.4. Relaciones y funciones
Las nociones de relaciones y funciones pueden derivarse directamente del producto carte-
siano de conjuntos. En efecto, se llama relaci´on a todo subconjunto de un producto carte-
siano; por ejemplo la relaci´on “≤” contiene los pares de n´umeros naturales tales que el primer
componente es menor o igual al segundo, esto es, ≤ = {(1, 1), (1, 2), (1, 3), (2, 3), . . .}.
Esta definici´on matem´atica de relaci´on no parece tener mucho que ver con la idea intu-
itiva de que una cosa “tiene relaci´on con otra”, pero en realidad ambas nociones s´ı corre-
sponden. Por ejemplo, estamos familiarizados con la familia vista como una relaci´on entre
personas. Consideremos m´as espec´ıficamente la relaci´on “x es padre de y”. Dado un con-
junto de personas, por ejemplo P = {Leonor, El´ıas, Arturo, Marta}, el producto cartesiano
P × P es {(Leonor, Leonor), (Leonor, El´ıas), (Leonor, Arturo), (Leonor, Marta), (Elias,
Leonor), (El´ıas, El´ıas), (El´ıas, Arturo), (El´ıas, Marta), (Arturo, Leonor), (Arturo, El´ıas),
(Arturo, Arturo), (Arturo, Marta), (Marta, Leonor), (Marta, El´ıas), (Marta, Arturo), (Marta,
Marta)}. Un subconjunto de este producto cartesiano es, por ejemplo, {(Leonor, Arturo),
(Leonor, Marta), (El´ıas, Arturo), (El´ıas, Marta)}, cuyos pares (x, y) corresponden, en la fa-
milia del autor, a relaciones “x es padre de y”, pues Leonor y El´ıas son padres de Arturo y
Marta.
Desde luego, en el ejemplo anterior de las relaciones familiares no cualquier subconjunto
del producto cartesiano podr´ıa ser candidato a corresponder a la relaci´on “x es padre de y”.
Por ejemplo, el par (El´ıas, El´ıas) ser´ıa inaceptable, pues nadie puede ser padre de s´ı mismo, ni
siquiera en las liberales familias modernas. Cabr´ıa preguntarnos qu´e caracter´ısticas deber´ıa
tener una relaci´on para ser aceptable como “x es padre de y”. A continuaci´on discutimos
algunas caracter´ısticas que las relaciones pueden tener o no, y que nos permitir´ıan contestar
a esta pregunta (ver secci´on de ejercicios).
Se llama inverso de una relaci´on R, denotado por R−1
, a aquella en donde se invierte el
orden de los pares ordenados, esto es:
R−1
= {(y, x) | (x, y) ∈ R}
Por ejemplo, el inverso de la relaci´on {(1, 2), (2, 3), (1, 3)} es {(2, 1), (3, 2), (3, 1)}.
Se dice que una relaci´on binaria en D ×D es reflexiva cuando contiene todos los pares de
la forma (x, x), para x ∈ D. Por ejemplo, si D = {1, 2, 3}, la relaci´on en {1, 2, 3} × {1, 2, 3}
con los elementos {(2, 2), (2, 3), (3, 3), (1, 2), (1, 1), (1, 3)} es reflexiva, pero {(2, 2), (2, 3),
(1, 2), (1, 1), (1, 3)} no lo es.
1.1. CONJUNTOS 9
Una relaci´on es sim´etrica si y solo si siempre que contiene un par (x, y) tambi´en contiene
(y, x). Por ejemplo, {(2, 2), (1, 2), (1, 1), (2, 1)} es sim´etrica, pero {(2, 2), (2, 3), (3, 3), (1, 2),
(1, 1)} no lo es.
Una relaci´on es transitiva cuando siempre que contiene los pares (x, y) y (y, z) tam-
bi´en contiene (x, z). Por ejemplo, la relaci´on {(2, 3), (1, 2), (1, 1), (1, 3)} es transitiva, pero
{(2, 3), (1, 2), (1, 1)} no lo es.
Llamamos cerradura reflexiva de una relaci´on R, la menor extensi´on de R, es decir, R∪∆,
tal que R ∪ ∆ es reflexiva, aunque inicialmente R no lo haya sido. En otras palabras, a R
se le agregan los pares ordenados que sean necesarios hasta que se vuelva reflexiva. Por
ejemplo, la cerradura reflexiva de R1 = {(2, 3), (1, 2), (1, 1), (1, 3)} es {(2, 3), (1, 2), (1, 1),
(1, 3), (2, 2), (3, 3)}. Decimos que la cerradura reflexiva es la menor extensi´on de la relaci´on
original porque no deben a˜nadirse m´as pares ordenados que los estrictamente necesarios para
volverla reflexiva. Por ejemplo, la relacion {(2, 3), (1, 2), (1, 1), (1, 3), (2, 2), (3, 3), (3,1)},
aunque cumple con ser una extensi´on de R1 y tambien con ser reflexiva, no es la cerradura
reflexiva de R1, porque tiene el par (3, 1) que no era indispensable agregar.
Similarmente definimos la cerradura sim´etrica de una relaci´on, a˜nadiendo los pares es-
trictamente necesarios para que se vuelva sim´etrica. Por ejemplo, la cerradura sim´etrica de
{(2, 3), (1, 2), (1, 1), (1, 3)} es {(2, 3), (1, 2), (1, 1), (1, 3), (3, 2), (2, 1), (3, 1)}.
La cerradura transitiva tambi´en se define de una manera enteramente similar. Por ejem-
plo, la cerradura transitiva de la relaci´on {(1, 2), (3, 1), (2, 1)} es {(1, 2), (3, 1), (2, 1), (1, 1),
(2, 2), (3, 2)}.
Se pueden tener tambi´en combinaciones de varias cerraduras, como la cerradura reflexiva
y transitiva, que en el caso de {(2, 3), (1, 2), (1, 1), (1, 3)} ser´ıa {(2, 3), (1, 2), (1, 1), (1, 3),
(2, 2), (3, 3)}.
Un caso particular de las relaciones son las funciones, que son relaciones en que no hay
dos pares ordenados que tengan el mismo primer componente. Es decir, los pares ordenados
asocian a cada primer componente un ´unico segundo componente. Por ejemplo, la relaci´on
{(1, 2), (2, 3), (1, 3)} no es una funci´on, pero {(1, 2), (2, 3), (3, 3)} s´ı lo es.
Tomando como ejemplo las familias, la relaci´on de hermanos no es una funci´on, pero la
relaci´on de cada quien con su padre s´ı lo es (cada quien tiene a lo m´as un padre).
La notaci´on habitual para las funciones es f(a) = b, en vez de (a, b) ∈ f, para una funci´on
f, pero en realidad ambas notaciones son equivalentes.
Muchas veces consideramos que las funciones “obtienen una salida a partir de una en-
trada”. As´ı, si f(1) = 2, se considera que a partir de la entrada 1 se obtiene la salida 2.
Esta manera de conceptualizar las funciones no se contrapone a la idea de funciones como
relaciones especiales (esto es, conjuntos de pares ordenados), sino que m´as bien en ciertas
situaciones es m´as ´util tomar uno u otro punto de vista.
10 CAP´ITULO 1. PRELIMINARES
Escribimos f : A → B para indicar que si (a, b) ∈ f entonces a ∈ A y b ∈ B; decimos que
A es el dominio de la funci´on y B es el codominio. Una funci´on f : A → B puede verse como
un mapeo que relaciona cada elemento del dominio A con un elemento del codominio B. Por
ejemplo, la funci´on cuadrado : N → N relaciona cada n´umero natural con su cuadrado, es
decir, cuadrado = {(1, 1), (2, 4), (3, 9), . . .}.
Se dice que una funci´on es total cuando est´a definida para todos los elementos del dominio,
como en el ejemplo de la funci´on cuadrado, mientras que una funci´on es parcial cuando no
est´a definida para todos los elementos del dominio, como ser´ıa el caso de la funci´on de resta
en los naturales: resta : N × N → N, pues por ejemplo, resta(3, 5) no tiene un resultado en
los naturales, y por lo tanto el par (3, 5) no forma parte del dominio de la funci´on.
Una funci´on es inyectiva, tambi´en llamada uno a uno, cuando para cada elemento del
codominio hay un ´unico elemento del dominio. Esto es, no se presenta el caso de que
dos pares como (x, z) y (y, z) tengan el mismo segundo elemento. Por ejemplo, la funci´on
{(1, 2), (2, 3), (3, 3)} no es inyectiva, pero {(1, 2), (2, 3), (3, 1)} s´ı lo es.
Siguiendo el ejemplo de las familias, la funci´on que asocia a cada persona con su padre
no es inyectiva, pues varios hermanos comparten un mismo padre.
Una funci´on es sobreyectiva si cada elemento del codominio aparece en alg´un par orde-
nado. Por ejemplo, la funci´on cuadrado que presentamos antes no es sobreyectiva, pues hay
muchos n´umeros, como el 7, que no son el cuadrado de ning´un otro.
Si una funci´on f es a la vez sobreyectiva e inyectiva, entonces su inverso f−1
es tam-
bi´en una funci´on (total). A las funciones que cumplen con ambas propiedades se les llama
biyectivas.
Una secuencia es una sucesi´on ordenada de elementos, como “1, 3, 5, 7, 9”, que es la se-
cuencia de n´umeros naturales impares menores que 10, ordenados de menor a mayor. La
diferencia entre un conjunto y una secuencia es que en una secuencia el orden s´ı importa y
en un conjunto no. As´ı, 1, 2, 3 = 2, 3, 1. Adem´as, en una secuencia s´ı es relevante la repetici´on
de los elementos, por lo que 1, 2, 3 = 1, 2, 2, 3.
1.1.5. Conjuntos infinitos
Adem´as de los conjuntos “finitos” –esto es, con un n´umero de elementos determinado–
tambi´en puede haber conjuntos infinitos, cuyo tama˜no no puede expresarse con un n´umero;
un ejemplo es el conjunto de los n´umeros naturales N = {1, 2, 3, . . .}. A´un a estos conjuntos
pueden aplicarse todas las operaciones antes descritas.
Sin embargo, la comparaci´on de tama˜nos de conjuntos infinitos no es tan simple como
en el caso de los conjuntos finitos, pues no se puede expresar su tama˜no como un n´umero.
En estos casos se aplica lo que se conoce como “el principio del palomar”, que sirve para
1.1. CONJUNTOS 11
comprobar si dos conjuntos tienen o no el mismo tama˜no. Sup´ongase que se quiere comprobar
si en un palomar la cantidad de palomas con que se cuenta es mayor, menor o igual a la
cantidad de lugares disponibles en el palomar. Una manera simple de verificarlo es asignar a
cada una de las palomas un sitio disponible, y si es posible hacerlo para todas las palomas, se
sabe que no hay m´as palomas que lugares. Similarmente se puede ver si no hay m´as lugares
que palomas. As´ı verificamos que el conjunto de palomas tiene el mismo tama˜no que el de
lugares disponibles.
Esta idea tan sencilla puede aplicarse para comparar el tama˜no de conjuntos infinitos.
As´ı se puede verificar, por ejemplo, que el conjunto de los pares tiene el mismo tama˜no
que el de los naturales, un resultado dif´ıcil de aceptar intuitivamente. En efecto, sean N
y P los naturales y los pares, respectivamente. Es f´acil ver que |P| ≤ |N|, pero es mucho
menos evidente que |N| ≤ |P|, cosa que vamos a mostrar usando el principio del palomar. A
cada n´umero natural le debemos poder asignar un n´umero par distinto; esto se puede hacer
de muchas maneras, pero una muy simple consiste en asignar a cada n´umero el doble de
s´ı mismo; por ejemplo, al 7 le asignamos el par 14, etc. Como esto se puede hacer para todos
los n´umeros, y no va a haber dos n´umeros que compartan el mismo par, concluimos que no
hay m´as n´umeros naturales que pares.
Definici´on.- Un conjunto infinito es contable, tambi´en llamado enumerable, cuando sus
elementos pueden ponerse “en una fila”, o dicho de una manera m´as t´ecnica, cuando sus
elementos pueden ponerse en correspondencia uno a uno con los n´umeros naturales. En
otras palabras, los conjuntos contables infinitos tienen el mismo tama˜no que el conjunto de
los n´umeros naturales. Adicionalmente los conjuntos finitos tambi´en son contables.
Otro ejemplo de conjunto infinito contable es el conjunto de pares de n´umeros, esto es,
N × N = {(1, 1), (2, 1), (1, 2), (1, 3), (2, 2), (3, 1), (4, 1), . . .}
(La prueba de que es contable se deja como ejercicio, ver secci´on de ejercicios).
Aunque resulte sorprendente, hay conjuntos infinitos “m´as grandes” que los conjuntos
infinitos contables, en el sentido de que no van a alcanzar los elementos del conjunto contable
para asignar uno a cada elemento del conjunto “grande”. A estos conjuntos se les llama
incontables.
Un ejemplo de conjunto incontable es 2N
, esto es, el conjunto potencia de los naturales;
el llamado “Teorema de Kantor” establece este hecho.
La prueba del Teorema de Kantor es muy simple y se basa en empezar suponiendo que
2N
s´ı es contable, y se llega a una contradicci´on, concluyendo entonces que 2N
en realidad es
incontable.
En efecto, si 2N
es contable, sus elementos pueden ser puestos en una sucesi´on como sigue:
2N
= {S1, S2, S3, . . .}
Sup´ongase ahora el conjunto D = {n ∈ N|n /∈ Sn}, que est´a formado por aquellos n´umeros
12 CAP´ITULO 1. PRELIMINARES
n que no aparecen en el conjunto Sn que les corresponde. Como por hip´otesis todos los sub-
conjuntos de los naturales fueron puestos en la sucesi´on S1, S2, . . ., tenemos que el conjunto
D, –que est´a formado de naturales– debe hallarse en dicha sucesi´on, es decir, debe ser igual
a Sk para una cierta k. Ahora nos preguntamos si k aparece o no en el conjunto D:
Si la respuesta es afirmativa, entonces, por la definici´on de D, tenemos que k /∈ Sk, lo
que es una contradicci´on;
Si la respuesta es negativa, entonces, por la definici´on de D, k ∈ Sk, lo que tambi´en es
una contradicci´on.
Concluimos que 2N
es incontable.
A´un dentro de los conjuntos incontables hay unos conjuntos “m´as grandes” que otros.
En efecto, se sabe que para todo conjunto infinito A, se tiene que |A| < |2A
|, por lo que hay
toda una jerarqu´ıa de “infinitos”:
|N| < |2N
| < |22N
| < . . .
1.2. Manejo l´ogico de enunciados
En el proceso de soluci´on de problemas, un aspecto clave es comprender cabalmente el
enunciado, lo cual en ocasiones no es sencillo, ya sea por la complejidad de aquel, o bien
porque la forma poco rigurosa en que manejamos el lenguaje cotidiano puede provocar errores
de interpretaci´on. M´as a´un, en muchas situaciones es necesario transformar el enunciado en
otro equivalente, de forma que la soluci´on al problema planteado sea m´as sencilla.
Por ejemplo, consideremos el conjunto de n´umeros naturales tales que, si son pares o
terminan en 7, entonces contienen alg´un cero (0). Algunos de estos n´umeros son el 2307, el
400, as´ı como el 1023 y el 175. Hay que comprender, por ejemplo, porqu´e el 175 corresponde
al enunciado. La idea es que un n´umero cumple la condici´on cuando, ya sea contiene alg´un
cero, como el 1023, el 2307 o el 400, o bien ni es par ni termina en 7, como en el caso del
175.
Razonamientos l´ogicos como el anterior pueden sistematizarse haciendo uso de s´ımbolos
que representan afirmaciones, que se llaman proposiciones en el llamado C´alculo proposi-
cional, que es una rama de las matem´aticas. 3
En el ejemplo presentado arriba es crucial comprender el significado l´ogico de la llamada
implicaci´on: Si A es cierto, entonces tambi´en B es cierto. Esto se representa matem´aticamente
3
No estudiaremos aqu´ı el c´alculo proposicional, limit´andonos a revisar los aspectos realmente indispens-
ables para manejar el material de este texto. El lector interesado en estudiar el c´alculo proposicional puede
consultar textos como [19].
1.2. MANEJO L ´OGICO DE ENUNCIADOS 13
usando el s´ımbolo “⇒”, como en “A ⇒ B”. La implicaci´on A ⇒ B es cierta siempre que B
es cierto –independientemente de si A es cierto o no–, y tambi´en cuando A es falso, como
era el caso del n´umero 175 en el ejemplo presentado.
La implicaci´on no es manejada rigurosamente en el lenguaje cotidiano. Por ejemplo, si un
pap´a dice a su ni˜no: “Ir´as al cine si haces tu tarea”, en realidad no est´a dando informaci´on
sobre qu´e pasar´a en caso de que el ni˜no no haga la tarea, a´un cuando ambos interlocutores
sobreentienden que en ese caso el ni˜no no ir´a al cine. Representando “ir al cine con el
s´ımbolo C y hacer la tarea con T, la frase se representar´ıa con la f´ormula T ⇒ C. Si quisiera
el pap´a dar informaci´on para atender el caso en que no se hace la tarea, tendr´ıa que decir
algo como “S´olo si haces tu tarea ir´as al cine”, representado por la implicaci´on C ⇒ T,
aunque en este caso se deja abierta la posibilidad de que el ni˜no no vaya al cine aunque haya
hecho su tarea. . . Si el pap´a quisiera considerar todos los casos posibles, tendr´ıa que decir
algo como “ir´as al cine si y s´olo si haces tu tarea”.
Resumiendo, algunas formas en que se expresa frecuentemente la implicaci´on “A ⇒ B”
son las siguientes:
“Si A entonces B”
“B si A”
“B cuando A”
“B siempre y cuando A”
“A s´olo si B”
Otras frases tales como “Vamos a Yucat´an o a Oaxaca” o “El clima es c´alido y seco”
tambi´en se pueden representar con s´ımbolos matem´aticos, mediante la llamada disyunci´on
(∨), para las frases unidas con “o”, o bien con la conjunci´on (∧), para las frases unidas con
“y”. Por ejemplo, si ir a Yucat´an se representa con Y e ir a Oaxaca con O, la primera frase se
representar´ıa como Y ∨ O. Similarmente se pueden representar frases m´as complejas, como
“Si vamos a Yucat´an el clima ser´a c´alido pero no seco, mientras que si vamos a Oaxaca
ser´a c´alido y seco”, con la f´ormula (Y ⇒ (C ∧ ¬S)) ∧ (O ⇒ (C ∧ S)), donde el s´ımbolo “¬”
representa la negaci´on de lo que sigue a su derecha.
Otro s´ımbolo l´ogico de utilidad es la llamada “doble implicaci´on”, denotado por “⇔”,
que significa que sus dos argumentos son equivalentes l´ogicamente. As´ı, A ⇔ B quiere decir
que A es cierto exactamente en los mismos casos en que B es cierto.
La implicaci´on, la negaci´on, la conjunci´on, etc., son llamados gen´ericamente conectivos
l´ogicos.
14 CAP´ITULO 1. PRELIMINARES
1.2.1. Tablas de verdad
Una herramiente ´util para comprender y utilizar los conectivos l´ogicos son las llamadas
tablas de verdad, que tienen en los renglones cada caso posible de valores “cierto” o “falso”
de las proposiciones elementales, y en las columnas a la derecha aparece el valor correspon-
diente de la proposici´on compuesta. Por ejemplo, en la siguiente tabla de verdad se define el
comportamiento de los conectivos l´ogicos de conjunci´on, disyunci´on, negaci´on e implicaci´on:
A B A ∧ B A ∨ B ¬A A ⇒ B
0 0 0 0 1 1
0 1 0 1 1 1
1 0 0 1 0 0
1 1 1 1 0 1
En esta tabla de verdad el valor “cierto” se representa con 1 y el “falso” con 0. Podemos
ver ahi que, por ejemplo, el conectivo de disyunci´on da “cierto” en todos los casos menos
cuando los dos argumentos son falsos. Por cierto, esto contradice la manera en que a veces
se maneja la disyunci´on en el lenguaje cotidiano; por ejemplo, cuando se dice “O pagas lo
que debes o no te vuelvo a prestar”, se sobreentiende que ambas cosas no pueden ser ciertas
a la vez. Sin embargo, viendo la tabla de verdad en la columna del “A∨B”, vemos que tiene
el valor “cierto” cuando tanto A como B son ciertos.
Es importante entender que los valores que aparecen en la tabla de verdad presentada
arriba son definiciones, que por lo mismo no tienen que probarse. Desde luego que no son
valores arbitrarios, sino que pretenden precisar el significado que tienen intuitivamente la
disyunci´on, la conjunci´on, la negaci´on y la implicaci´on. En esa tabla de verdad tambi´en
podemos ver que la implicaci´on es simplemente un conectivo que tiene valor cierto en todos
los casos menos cuando A es cierto y B falso. Esto es congruente con la interpretaci´on que
dimos de la implicaci´on p´arrafos antes.
Como en el caso de los conjuntos, en las f´ormulas con proposiciones tambi´en hay equi-
valencias muy ´utiles, que nos permiten modificar enunciados, pero teniendo la garant´ıa de
que el enunciado modificado es equivalente al original. Vamos a considerar las siguientes
equivalencias:
Conmutatividad A ∧ B = B ∧ A, A ∨ B = B ∨ A.
Distributividad A ∧ (B ∨ C) = (A ∧ B) ∨ (A ∧ C), A ∨ (B ∧ C) = (A ∨ B) ∧ (A ∨ C).
Implicaci´on A ⇒ B = (¬A) ∨ B.
Leyes de De Morgan ¬(A ∧ B) = ¬A ∨ ¬B, ¬(A ∨ B) = ¬A ∧ ¬B.
Doble negaci´on ¬(¬A) = A.
1.3. PRUEBAS POR INDUCCI ´ON 15
Doble implicaci´on A ⇔ B = (A ⇒ B) ∧ (B ⇒ A)
Ejemplo.- El conjunto de n´umeros naturales tales que, si son pares o terminan en 7,
entonces contienen alg´un cero (0), que presentamos antes, puede ser expresado de una forma
m´as simple usando las equivalencias. Sea P que el n´umero es par, T que termina en 7, C
que contiene alg´un cero. Entonces el enunciado original es:
(P ∨ T) ⇒ C
Usando la equivalencia de la implicaci´on, esta f´ormula es equivalente a:
(¬(P ∨ T)) ∨ C
Aplicando una equivalencia de De Morgan, queda como:
(¬P ∧ ¬T) ∨ C
Esto es, ya sea que el n´umero contiene alg´un cero (proposici´on C), o bien ni es par (¬P) ni
termina en 7 (¬T).
Las equivalencias de conectivos l´ogicos se pueden probar haciendo las tablas de verdad
para las dos f´ormulas que se supone que son equivalentes. Por ejemplo, probamos la equiv-
alencia de la implicaci´on con la siguiente tabla de verdad, en la que se puede observar que
los valores de A ⇒ B y de (¬A) ∨ B son los mismos:
A B ¬A (¬A) ∨ B A ⇒ B
0 0 1 1 1
0 1 1 1 1
1 0 0 0 0
1 1 0 1 1
1.3. Pruebas por inducci´on
Una forma de prueba que utilizaremos repetidamente en este texto es la prueba por in-
ducci´on. Sirve para probar que una cierta propiedad es v´alida para todos los elementos de un
conjunto infinito contable. Hacemos notar que el material indicado como “nivel profesional”
no incluye pruebas por inducci´on a lo largo del libro. Esto es debido al enfoque predominan-
temente ingenieril que se da al material de profesional, dejando las pruebas por inducci´on
para los estudiantes de posgrado.
Supongamos que se quiere probar que una propiedad P es cierta para todos los elementos
de un conjunto infinito contable (C).
16 CAP´ITULO 1. PRELIMINARES
Inicialmente se prueba que es cierta para el primer elemento de (C), sea c0, esto es, se
verifica P(c0). Este paso se llama “base de la inducci´on”.
Despu´es se supone que la propiedad P es cierta para alg´un elemento ci de (C), y con
base en esta suposici´on, llamada “hip´otesis de inducci´on”, se prueba que P tambi´en es cierta
para el siguiente elemento, ci+1.
Con base en los dos pasos anteriores se concluye que la propiedad P es cierta para todos
los elementos del conjunto (C). Esta conclusi´on no es gratuita. En efecto, supongamos un
elemento de (C), por ejemplo c45. Para probar que satisface la propiedad, ya sabemos que se
cumple para c0, y como tenemos que se cumple para el siguiente elemento, entonces tambi´en
se cumple para c1, y como tambi´en se cumple para el siguiente elemento, se cumplir´a para c2,
y as´ı sucesivamente, hasta llegar a c45. Lo mismo se puede hacer con cualquier otro elemento
de (C).
Como un ejemplo simple de la aplicaci´on de la inducci´on matem´atica, supongamos que
queremos probar que todo n´umero natural es menor que el doble de s´ı mismo, esto es,
n < 2n, n ∈ N. Lo hacemos en dos pasos:
(base) Primero comprobamos que para el caso del 1 se cumple, pues 1 < 2.
(inducci´on) Ahora, suponiendo que para un n´umero i la propiedad se cumple, esto es,
i < 2i, debemos comprobar que tambi´en se cumple para el siguiente n´umero, esto es,
i+1 < 2(i+1). En efecto, si i < 2i, entonces i+1 < 2i+1, pero 2i+1 < 2i+2 = 2(i+1),
por lo que i + 1 < 2(i + 1), como deb´ıamos probar.
Las pruebas por inducci´on no siempre son, como en los ejemplos que vimos en esta
secci´on, para probar propiedades de los n´umeros naturales. En nuestro caso, utilizaremos
pruebas por inducci´on para probar, por ejemplo, la correcci´on de gram´aticas. Por otra parte,
existen muchas variantes de la inducci´on, como tener varias “bases”. No entraremos aqu´ı en
detalles de esto, postergando su estudio para las secciones donde se le utiliza directamente.
1.4. Lenguajes
Uno de los conceptos m´as importantes de este texto es el de Lenguaje. Para llegar a este
concepto es necesario definir antes otras nociones m´as elementales. Para todas las definiciones
utilizaremos extensivamente la teor´ıa elemental de conjuntos.
1.4. LENGUAJES 17
1.4.1. Alfabeto, cadena de caracteres
La noci´on m´as primitiva es la de s´ımbolo, que es simplemente una representaci´on distin-
guible de cualquier informaci´on. Los s´ımbolos pueden ser cualesquiera, como w, 9, #, etc.,
pero nosotros vamos a utilizar las letras a,b,c, etc. Un s´ımbolo es una entidad indivisible.
Un alfabeto es un conjunto no vac´ıo de s´ımbolos. As´ı, el alfabeto del idioma espa˜nol,
E = {a, b, c, . . . , z}, es s´olo uno de tantos alfabetos posibles. En general utilizaremos la
notaci´on Σ para representar un alfabeto.
Con los s´ımbolos de un alfabeto es posible formar secuencias o cadenas de caracteres, tales
como mxzxptlk, balks, r, etc. 4
Las cadenas de caracteres son llamadas tambi´en palabras.
Un caso particular de cadena es la palabra vac´ıa, ε, la cual no tiene ninguna letra.
La longitud de una palabra es la cantidad de letras que contiene, contando las repeticiones;
se denota por |w| para una palabra w. Por ejemplo, |perro| es 5.
Cuando escribimos varias palabras o caracteres uno a continuaci´on de otro, se supone que
forman una sola palabra (se concatenan). La notaci´on usada para denotar la concatenaci´on
de dos cadenas α y β es αβ. Por ejemplo, si w = abra y v = cada, entonces wvbra es la
palabra abracadabra.
La concatenaci´on de palabras es asociativa, esto es, (xy)z = x(yz), pero no conmutativa
en el caso general. La longitud de una concatenaci´on cumple la propiedad: |uv| = |u| + |v|. 5
Una palabra v es subcadena de otra w cuando existen cadenas x, y - posiblemente vac´ıas-
tales que xvy = w. Por ejemplo, “bora” es subcadena de “v´ıbora”, y ε es subcadena de toda
palabra.
El conjunto de todas las palabras que se pueden formar con un alfabeto Σ es denotado
convencionalmente por Σ∗
. 6
Por ejemplo, si Σ = {a, b}, Σ∗
= {ε, a, aa, aaa, aaaa, . . . , b, bb,
. . . , ab, aba, abb, . . .}. El conjunto Σ∗
es infinito, pero enumerable. 7
1.4.2. Lenguajes, operaciones con lenguajes
Un lenguaje es simplemente un conjunto de palabras. As´ı, {abracadabra} es un lenguaje
(de una sola palabra), {ali, baba, y, sus, cuarenta, ladrones} es otro, Σ∗
es otro, etc. Puesto
4
Las secuencias fueron definidas en la secci´on de preliminares. Formalmente, la palabra “casa” es la
secuencia de letras c, a, s, a.
5
La prueba de estas propiedades requiere de una definici´on formal de las secuencias de caracteres, lo que
nos desviar´ıa demasiado de nuestros temas.
6
Luego veremos una operaci´on llamada Cerradura de Kleene, que se parece a la notaci´on Σ∗
, aunque hay
peque˜nas diferencias t´ecnicas.
7
Ver secci´on de ejercicios.
18 CAP´ITULO 1. PRELIMINARES
que los lenguajes son conjuntos, podemos efectuar con ellos todas las operaciones de los con-
juntos (uni´on, intersecci´on, diferencia). Definiremos adem´as la operaci´on de concatenaci´on
de lenguajes, escrita como L1 • L2, como una extensi´on de la concatenaci´on de palabras:
L1 • L2 = {w|w = xy, x ∈ L1, y ∈ L2}.
Por ejemplo, dados los lenguajes L1 = {ca, ma} y L2 = {nta, sa}, la concatenaci´on L1L2
ser´ıa {canta, casa, manta, masa}. Como se ve en este ejemplo, para calcular la concatenaci´on
de dos lenguajes hay que concatenar cada palabra del primero de ellos con cada una del
segundo.
Una operaci´on m´as complicada es la llamada “estrella de Kleene” o “cerradura de Kleene”,
en honor al matem´atico norteamericano S. C. Kleene, quien la propuso.
Definici´on.- Si L es un lenguaje, L∗
, llamado “cerradura de Kleene” de L, es el m´as
peque˜no conjunto que contiene:
La palabra vac´ıa, ε
El conjunto L
Todas las palabras formadas por la concatenaci´on de miembros de L∗
Por ejemplo, si L = {abra, cadabra}, L∗
= {ε, abra, abraabra, abracadabra, cadabraabra,
. . .} 8
Obs´ervese que la definici´on de la estrella de Kleene es recursiva, pues en la tercera regla
estamos suponiendo que ya hay palabras en L∗
, las cuales concatenamos para producir una
nueva palabra. Esta noci´on se puede conceptualizar f´acilmente de la siguiente forma: Supong-
amos que inicialmente L∗
contiene s´olo la palabra vac´ıa y los elementos de L. Entonces de
ah´ı tomamos dos elementos cualesquiera, que no necesitan ser distintos, y los concatenamos,
para producir una palabra, la cual a˜nadimos a L∗
si no estaba ya. Continuando indefinida-
mente con esta acci´on, se ir´ıan obteniendo todos los elementos de L∗
. 9
Esta definici´on es congruente con la notaci´on Σ∗
que se utiliz´o para definir el conjunto de
todas las palabras sobre un alfabeto, pues de hecho Σ∗
es la cerradura de Kleene del alfabeto,
tomando los s´ımbolos de ´este como palabras de una letra.
1.5. LA JERARQU´IA DE CHOMSKY 19
LENGUAJES
RECURSIVAMENTE
ENUMERABLES
LENGUAJES
CONTEXTO
LIBRES DE
LENGUAJES
REGULARES
LENGUAJES
Figura 1.3: Los LR en la jerarqu´ıa de Chomsky
1.5. La jerarqu´ıa de Chomsky
Llamamos “clase de lenguajes” a conjuntos de lenguajes que comparten una cierta propiedad
dada. Esta noci´on es muy abstracta, pues ya los lenguajes son en s´ı mismos conjuntos de
secuencias de s´ımbolos, y las clases de lenguajes son entonces conjuntos de conjuntos de
secuencias de s´ımbolos.
La clasificaci´on de lenguajes en clases de lenguajes es debida a N. Chomsky [4], quien
propuso una jerarqu´ıa de lenguajes, donde las clases m´as complejas incluyen a las m´as sim-
ples.
De las clases de lenguajes propuestas en la jerarqu´ıa de Chomsky, nosotros estudiaremos
las que aparecen en la figura 1.3, que son:
Los “Lenguajes Regulares”, que es la clase m´as peque˜na, e incluye a los lenguajes m´as
simples. 10
Un ejemplo de lenguaje regular es el conjunto de todos los n´umero binarios.
Los “Lenguajes Libres de Contexto”, que incluyen a los Lenguajes Regulares. Por ejem-
plo, la mayor´ıa de los lenguajes de programaci´on son Lenguajes Libres de Contexto.
Los “Lenguajes Recursivamente Enumerables”, que incluyen a los Libres de Contexto
(y por lo tanto a los Lenguajes Regulares).
Todas estas clases de lenguajes son representables de manera finita (mediante cadenas
de caracteres que sirven como representaci´on). Ahora bien, como veremos m´as adelante,
8
Debe quedar claro que la descripci´on de L∗
en este ejemplo no es formal, pues los “. . . ” dejan abierta la
puerta a muchas imprecisiones.
9
Claro que este proceso no terminar´ıa nunca, pues L∗
es infinito para cualquier L que tenga al menos un
elemento.
10
Luego veremos en qu´e sentido son m´as simples que las otras clases de lenguajes.
20 CAP´ITULO 1. PRELIMINARES
hay m´as lenguajes que posibles representaciones finitas, por lo que podemos saber que hay
lenguajes m´as all´a de los Recursivamente Enumerables. Sin embargo, desde un punto de
vista pr´actico, los lenguajes m´as ´utiles son aquellos que tienen una representaci´on finita, por
lo que los dem´as lenguajes son s´olo de inter´es te´orico.
En cap´ıtulos posteriores veremos que cada una de estas clases de lenguajes est´a asociada
a un tipo de “aut´omata” capaz de procesar estos lenguajes. Esto ha hecho pensar que las
categor´ıas de lenguajes de Chomsky no son completamente arbitrarias.
1.6. Ejercicios
1. Expresar en extensi´on el conjunto {x|x ∈ N, x < 10}.
2. Expresar en intenci´on el conjunto {4, 6, 8, 12, 14, 16}.
3. ¿Cu´al es el tama˜no del conjunto {∅} (esto es, cu´antos elementos contiene)?
4. Sean los conjuntos A = {a, b}, B = {1, 2, 3}. Calcular las siguientes operaciones:
a) (A ∪ B) − A
b) A ∪ (B − A)
c) 2A∪B
d) A × (A ∪ B)
5. Calcular los conjuntos potencia de los siguientes conjuntos:
a) {a, b, c}
b) {a, {b, c}}
c) {∅}
d) {∅, {∅}}
6. Sea el conjunto A = {a, b, c}. Proponer:
a) Una relaci´on en A × A
b) Una funci´on en A → A
c) Una relaci´on en A × A que no sea funci´on.
7. Proponer las caracter´ısticas, en t´erminos de reflexividad, simetr´ıa y transitividad, que
debe tener la relaci´on “x es padre de y” (se entiende que “padre” incluye tambi´en a
“madre”).
8. Un juego infantil consiste en proponer simult´aneamente ya sea “piedra”, “tijeras” o
“papel”. Se supone que tijera gana sobre papel, piedra sobre tijera, y papel sobre
piedra. Determinar si la relaci´on “gana sobre”, que es un subconjunto de {piedra,
tijeras, papel} × {piedra, tijeras, papel} es:
1.6. EJERCICIOS 21
a) Reflexiva
b) Sim´etrica
c) Transitiva
9. Consid´erese la relaci´on {(a, d), (b, d), (c, a), (d, d), (c, b)}. Calcular su cerradura:
a) Reflexiva
b) Sim´etrica
c) Transitiva
d) Reflexiva y transitiva
e) Transitiva y sim´etrica
f ) Reflexiva, transitiva y sim´etrica (estas son llamadas “relaciones de equivalencia”.
10. Consid´erese la relaci´on {(a, d), (b, d), (d, d), (c, b)}, siendo el dominio y el codominio el
conjunto {a, b, c, d}. Indicar si esta relaci´on es:
a) Una funci´on
b) Funci´on total
c) Funci´on inyectiva
d) Funci´on sobreyectiva
11. Consid´erese la funci´on madre(x), que obtiene la madre (biol´ogica) de cada persona.
Indica para esta funci´on:
a) Cu´ales son el dominio y el codominio
b) Si es una funci´on total
c) Si es una funci´on inyectiva, sobreyectiva o biyectiva
12. Considera el conjunto de n´umeros naturales tales que si son mayores que 5 o bien
terminan en 5, entonces contienen alg´un 1 o 2.
a) Propon 3 n´umeros que cumplan la condici´on y 3 que no la cumplan.
b) Expresa el enunciado como una f´ormula proposicional, donde M significa “mayores
que 5”, T es “terminan en 5”, U es “contienen alg´un 1” y D es “contienen alg´un
2”.
c) Transforma la f´ormula del inciso anterior de manera que no tenga una implicaci´on,
y aplica una ley de De Morgan al resultado.
13. Dar tres ejemplos de lenguajes basados en el alfabeto {a, b, c}.
14. Explicar la diferencia -si la hay- entre un lenguaje vac´ıo y uno que contiene s´olo la
palabra vac´ıa (tomar en cuenta que dos lenguajes son distintos s´olamente cuando uno
de ellos contiene una palabra que el otro no contiene).
22 CAP´ITULO 1. PRELIMINARES
15. ¿La palabra vac´ıa es elemento de cualquier alfabeto? ¿Puede la palabra vac´ıa ε formar
parte de un alfabeto? ¿Puede un alfabeto contener palabras?
16. Calcular la concatenaci´on del lenguaje {ε, aba} con {a, bb, ε}.
17. Obtener {a, bb}∗
(dar los primeros 10 elementos).
18. Mostrar 3 elementos de 2{a,b}∗
.
19. Probar que la resta de conjuntos no es conmutativa ni asociativa.
20. Probar que la intersecci´on de conjuntos es asociativa y tambi´en conmutativa.
21. Probar que la concatenaci´on de lenguajes es asociativa pero no conmutativa.
22. Probar que el conjunto N × N = {(1, 1), (2, 1), (1, 2), (1, 3), (2, 2), (3, 1), (4, 1), . . .} es
contable.
23. Probar que el conjunto Σ∗
es infinito contable.
24. Probar por inducci´on la propiedad de los naturales 1 + 2 + 3 + . . . + n = n(n+1)
2
, para
todo n ∈ N
Parte I
Lenguajes regulares y sus m´aquinas
23
Automatas y lenguajes
Cap´ıtulo 2
Aut´omatas finitos
El t´ermino m´aquina evoca algo hecho en metal, usualmente ruidoso y grasoso, que eje-
cuta tareas repetitivas que requieren de mucha fuerza o velocidad o precisi´on. Ejemplos
de estas m´aquinas son las embotelladoras autom´aticas de refrescos. Su dise˜no requiere de
conocimientos en mec´anica, resistencia de materiales, y hasta din´amica de fluidos. Al dise˜nar
tal m´aquina, el plano en que se le dibuja hace abstracci´on de algunos detalles presentes en
la m´aquina real, tales como el color con que se pinta, o las imperfecciones en la soldadura.
El plano de dise˜no mec´anico de una m´aquina es una abstracci´on de ´esta, que es ´util
para representar su forma f´ısica. Sin embargo, hay otro enfoque con que se puede modelar la
m´aquina embotelladora: c´omo funciona, en el sentido de saber qu´e secuencia de operaciones
ejecuta. As´ı, la parte que introduce el l´ıquido pasa por un ciclo repetitivo en que primero
introduce un tubo en la botella, luego descarga el l´ıquido, y finalmente sale el tubo para
permitir la colocaci´on de la c´apsula (“corcholata”). El orden en que se efect´ua este ciclo es
crucial, pues si se descarga el l´ıquido antes de haber introducido el tubo en la botella, el
resultado no ser´a satisfactorio.
El modelado de una m´aquina en lo relacionado con secuencias o ciclos de acciones se
aproxima m´as al enfoque que adoptaremos en este curso. Las m´aquinas que estudiaremos
son abstracciones matem´aticas que capturan solamente el aspecto referente a las secuencias
de eventos que ocurren, sin tomar en cuenta ni la forma de la m´aquina ni sus dimensiones,
ni tampoco si efect´ua movimientos rectos o curvos, etc.
En esta parte estudiaremos las m´aquinas abstractas m´as simples, los aut´omatas finitos,
las cuales est´an en relaci´on con los lenguajes regulares, como veremos a continuaci´on.
25
26 CAP´ITULO 2. AUT ´OMATAS FINITOS
2.1. Modelado de sistemas discretos
Antes de definir los aut´omatas finitos, empezaremos examinando las situaciones de la
realidad que pueden ser modeladas usando dichos aut´omatas. De esta manera, iremos de lo
m´as concreto a lo m´as abstracto, facilitando la comprensi´on intuitiva del tema.
El modelado de fen´omenos y procesos es una actividad que permite:
Verificar hip´otesis sobre dichos procesos;
Efectuar predicciones sobre el comportamiento futuro;
Hacer simulaciones (eventualmente computarizadas);
Hacer experimentos del tipo “¿qu´e pasar´ıa si. . . ?”, sin tener que actuar sobre el proceso
o fen´omeno f´ısico.
Llamamos eventos discretos a aqu´ellos en los que se considera su estado s´olo en ciertos
momentos, separados por intervalos de tiempo, sin importar lo que ocurre en el sistema
entre estos momentos. Es como si la evoluci´on del sistema fuera descrita por una secuencia
de fotograf´ıas, en vez de un flujo continuo, y se pasa bruscamente de una fotograf´ıa a otra.
Usualmente se considera que la realidad es continua, y por lo tanto los sistemas discretos
son solamente una abstracci´on de ciertos sistemas, de los que nos interesa enfatizar su aspecto
“discreto”. Por ejemplo, en un motor de gasolina se dice que tiene cuatro tiempos: Admisi´on,
Compresi´on, Ignici´on y Escape. Sin embargo, el pist´on en realidad no se limita a pasar por
cuatro posiciones, sino que pasa por todo un rango de posiciones continuas. As´ı, los “cuatro
tiempos” son una abstracci´on de la realidad.
La noci´on m´as b´asica de los modelos de eventos discretos es la de estado. Un estado es
una situaci´on en la que se permanece un cierto lapso de tiempo. Un ejemplo de la vida real es
el de los “estados civiles” en que puede estar una persona: soltera, casada, viuda, divorciada,
etc. De uno de estos estados se puede pasar a otro al ocurrir un evento o acci´on, que es el
segundo concepto b´asico de la modelaci´on discreta. As´ı, por ejemplo, del estado “soltero” se
puede pasar al estado “casado” al ocurrir el evento “boda”. Similarmente, se puede pasar de
“casado” a “divorciado” mediante el evento “divorcio”. En estos modelos se supone que se
permanece en los estados un cierto tiempo, pero por el contrario, los eventos son instant´aneos.
Esto puede ser m´as o menos realista, dependiendo de la situaci´on que se est´a modelando.
Por ejemplo, en el medio rural hay bodas que duran una semana, pero desde el punto de
vista de la duraci´on de una vida humana, este tiempo puede considerarse despreciable. En
el caso del evento “divorcio”, pudiera ser inadecuado considerarlo como instant´aneo, pues
hay divorcios que duran a˜nos. En este caso, el modelo puede refinarse definiendo un nuevo
estado “divorci´andose”, al que se llega desde “casado” mediante el evento “inicio divorcio”.
2.1. MODELADO DE SISTEMAS DISCRETOS 27
soltero casado
divorciado
viudo
boda
muerte
conyuge
bodadivorcio
boda
Figura 2.1: Modelo de estados civiles de una persona
HABLANDO
COLGADO
OTRO
SUENA
OCUPADO
TONO
YD
YC
YM
OD
OC
YD
YC
OM
OC
YM
SONANDO
Figura 2.2: Modelo en eventos discretos de un tel´efono
Es sumamente pr´actico expresar los modelos de estados y eventos de manera gr´afica. Los
estados se representan por ´ovalos, y los eventos por flechas entre los ´ovalos, llamadas transi-
ciones. Dentro de cada estado se escribe su nombre, mientras que al lado de las transiciones
se escribe el nombre del evento asociado, como en la figura 2.1. El estado donde se inicia
tiene una marca “>”, en este caso “soltero”.
En la figura 2.2 se presenta un modelo simplificado del funcionamiento de un aparato
telef´onico. En esta figura los nombres de los estados se refieren al aparato desde donde llamo,
contesto, etc., y en caso contrario se especifica que es el otro (“suena otro”, que se refiere al
aparato telef´onico del interlocutor). En las transiciones, la “Y” inicial se refiere a acciones que
hace uno mismo (por ejemplo, “YD”, que es “yo descuelgo”), mientras que la “O” se refiere
al otro tel´efono. La “C” de “YC” se refiere a “colgar”, mientras que la “M” es “marcar”.
As´ı, el significado de las transiciones YC, OC, YM, OM, YD y OD deben quedar claras.
En este ejemplo suponemos que el estado en que inicia el proceso (que llamaremos estado
inicial) es con el auricular colgado, sin sonar a´un. A partir de esa situaci´on, pueden ocurrir
varios eventos que nos lleven a un nuevo estado, como por ejemplo que empiece a sonar o
bien que alguien descuelgue para marcar un n´umero.
Desde luego, elaborar modelos “adecuados” de un proceso real es un arte que requiere
28 CAP´ITULO 2. AUT ´OMATAS FINITOS
pr´actica, pero en general los siguientes lineamientos pueden ser ´utiles:
1. Diferenciar entre los eventos que se consideran instant´aneos y aquellos que tienen una
duraci´on considerable: estos ´ultimos se asocian a los estados. Los estados son la base
de un dise˜no de los modelos que estamos estudiando, pues “recuerdan” las situaciones
b´asicas por las que pasa el proceso.
2. Las condiciones asociadas a los estados deben ser excluyentes, esto es, no deben veri-
ficarse varias simult´aneamente. Por ejemplo, una persona no es soltera y casada a la
vez.
3. Las condiciones asociadas a los estados de un modelo bien hecho deben ser compren-
sivas, lo que quiere decir que entre todas ellas cubren todos los casos posibles. Por
ejemplo, en el modelo de estados civiles suponemos que una persona es ya sea soltera,
o bien casada, o bien divorciada, sin haber otras opciones. Si necesitamos considerar
el concubinato como otra condici´on, habr´ıa que modificar el modelo.
4. Los eventos instant´aneos son asociados a los eventos. En el ejemplo, el levantar el
auricular (que se supone una acci´on instant´anea) es una transici´on, mientras que se
supone que puede transcurrir un tiempo antes de que el usuario marque un n´umero,
por lo que hay un estado entre estos dos eventos.
En el ejemplo del tel´efono, estamos considerando que al descolgar el auricular, el tono de
marcar est´a inmediatamente disponible, aunque en ciertas ciudades esta suposici´on puede
ser una simplificaci´on inaceptable. En cambio, en el mismo ejemplo consideramos que la
persona que contesta el tel´efono no lo hace inmediatamente, sino que hay un inicio y un fin
del timbre -aunque mi suegra acostumbra contestar el tel´efono antes de que se complete el
primer timbrazo. Para los eventos con duraci´on, es necesario identificar un evento de inicio
y otro de terminaci´on, como en el ejemplo del divorcio que mencionamos antes. Desde luego,
la decisi´on de qu´e eventos son instant´aneos y cuales tienen duraci´on depende enteramente
de qu´e es importante en el problema particular que se desea modelar.
Los errores que m´as frecuentemente se cometen al hacer modelos de estados y eventos
son:
Confundir estados con eventos; por ejemplo, tener un estado “salir de casa”, que ra-
zonablemente corresponde a un evento instant´aneo. 1
Proponer conjuntos de estados no excluyentes, esto es, que se traslapan, como ser´ıa
tener estados “Se encuentra en Acapulco” y “Se encuentra fuera de Guadalajara”, pues
pueden verificarse ambos simult´aneamente, lo que no es posible en los estados.
1
Si no se quiere que “salir de casa” sea un evento instant´aneo, se debe reexpresar de forma que su duraci´on
sea evidente, como en “prepar´andose para salir de casa”.
2.1. MODELADO DE SISTEMAS DISCRETOS 29
1
5
2
3
4
1
2
5
1,2,5
1
2
5
1
2,5
1,2,5
1
2
5
0
Figura 2.3: Modelo con estados finales
Proponer conjuntos de estados no comprensivos, donde falta alg´un caso o situaci´on por
considerar.
En situaciones muy complejas, donde varios procesos evolucionan concurrentemente, el
modelado de eventos discretos por medio de estados y eventos no es adecuado, pues los
diagramas son demasiado grandes. En estos casos se requieren herramientas m´as sofisticadas,
como las llamadas “redes de Petri” [16].
2.1.1. Estados finales
El prop´osito de algunos modelos de estados y eventos es el de reconocer secuencias
de eventos “buenas”, de manera que se les pueda diferencias de las secuencias “malas”.
Sup´ongase, por ejemplo, que se quiere modelar el funcionamiento de una m´aquina autom´atica
vendedora de bebidas enlatadas. Dicha m´aquina acepta monedas de valor 1, 2 y 5, y el precio
de cada lata es de 5. Vamos a considerar que el evento llamado “1” es la introducci´on de
una moneda de valor 1 en la m´aquina, el evento “2” para la moneda de valor 2, etc.
La primera cuesti´on que hay que resolver para dise˜nar nuestro modelo es decidir c´omo son
los estados. Una buena idea ser´ıa que cada estado recordara lo que se lleva acumulado hasta
el momento. El estado inicial, desde luego, recordar´ıa que se lleva acumulado 0. Con estas
ideas podemos hacer un diagrama de estados y eventos como el de la figura 2.3. Muchas
transiciones en dicho diagrama son evidentes, como el paso del estado “1” al “3” tras la
introducci´on de una moneda de valor 2. En otros casos hay que tomar una decisi´on de dise˜no
conflictiva, como en el caso en que en el estado “4” se introduzca una moneda de valor 2. En
el diagrama presentado, se decidi´o que en ese caso se va al estado “5”, lo que en la pr´actica
30 CAP´ITULO 2. AUT ´OMATAS FINITOS
q
q
q
1
0
2
a
a
a
b
b
b
Figura 2.4: Notaci´on gr´afica
puede querer decir que la m´aquina entrega un cambio al usuario, o bien simplemente se
queda con el sobrante.
Un aspecto muy importante del modelo de la figura 2.3 es que el estado “5” es un
estado especial, llamado estado final, e identificado por un ´ovalo de doble trazo. Los estados
finales indican que cuando se llega a ellos, la secuencia de eventos que llev´o hasta ah´ı puede
considerarse como “aceptable”. Por ejemplo, en la m´aquina vendedora de latas, la secuencia
de eventos “meter 2”, “meter 1”, “meter 2” puede considerarse aceptable porque totaliza 5.
En la figura puede observarse que dicha secuencia hace pasar por los estados 0, 2, 3 y 5,
donde este ´ultimo es final. De este modo el diagrama nos permite diferencias las secuencias
aceptables respecto a otras que no lo son, como la secuencia “meter 1”, “meter 2”, “meter
1”, que lleva al estado 4, que no es final. Obs´erverse que la secuencia “meter 5”, “meter 5”,
“meter 5” tambi´en es aceptable –desde luego, desde el punto de vista de la m´aquina, aunque
seguramente no lo sea desde el punto de vista del cliente.
2.2. M´aquinas de estados finitos
A partir de ahora vamos a considerar modelos de estados y eventos un poco m´as ab-
stractos que los que hemos visto antes. Retomemos el ejemplo de la m´aquina vendedora de
latas, que vimos en la secci´on 2.1.1. En ese modelo pudimos reconocer secuencias de eventos
“aceptables”, como la secuencia de monedas 2, 2, 1 con respecto a secuencias no aceptables,
como 1, 1, 1. A partir de ahora los nombres de los eventos van a estar formados por un car-
acter, y les llamaremos transiciones en vez de “eventos”. De este modo, en vez de un evento
“meter 1” vamos a tener una transici´on con el caracter “1”, por ejemplo. Desde luego, la
elecci´on de qu´e caracter tomar como nombre de la transici´on es una decisi´on arbitraria.
Adem´as, las secuencias de eventos van a representarse por concatenaciones de caracteres,
esto es, por palabras. As´ı, en el ejemplo de la m´aquina vendedora la palabra “1121” representa
la secuencia de eventos “meter 1”, “meter 1”, “meter 2”, “meter 1”.
2.2. M ´AQUINAS DE ESTADOS FINITOS 31
 
¡
¢
£
¤
¥
¦
§
Figura 2.5: Componentes de una m´aquina abstracta
Desde el punto de vista abstracto que vamos a adoptar a partir de ahora, nuestras
m´aquinas pueden ser visualizadas como dispositivos con los siguientes componentes: (ver
figura 2.5)
Una cinta de entrada;
Una cabeza de lectura (y eventualmente escritura);
Un control.
La cabeza lectora se coloca en los segmentos de cinta que contienen los caracteres que
componen la palabra de entrada, y al colocarse sobre un caracter lo “lee” y manda esta
informaci´on al control; tambi´en puede recorrerse un lugar a la derecha (o a la izquierda
tambi´en, seg´un el tipo de m´aquina). El control (indicado por una car´atula de reloj en la
figura) le indica a la cabeza lectora cu´ando debe recorrerse a la derecha. Se supone que hay
manera de saber cuando se acaba la entrada (por ejemplo, al llegar al blanco). La “aguja” del
control puede estar cambiando de posici´on, y hay algunas posiciones llamadas finales (como
la indicada por un punto, q3) que son consideradas especiales, por que permiten determinar
si una palabra es aceptada o rechazada, como veremos m´as adelante.
2.2.1. Funcionamiento de los aut´omatas finitos
Como se hab´ıa comentado antes, el funcionamiento de los aut´omatas finitos consiste en
ir pasando de un estado a otro, a medida que va recibiendo los caracteres de la palabra de
entrada. Este proceso puede ser seguido f´acilmente en los diagramas de estados. Simplemente
hay que pasar de estado a estado siguiendo las flechas de las transiciones, para cada caracter
de la palabra de entrada, empezando por el estado inicial. Por ejemplo, sup´ongase que
tenemos el aut´omata de la figura 2.4 y la palabra de entrada “bb”. El aut´omata inicia su
operaci´on en el estado q0 –que es el estado inicial–, y al recibir la primera b pasa al estado
q2, pues en el diagrama hay una flecha de q0 a q2 con la letra b. Luego, al recibir la segunda
32 CAP´ITULO 2. AUT ´OMATAS FINITOS
b de la palabra de entrada, pasar´a del estado q2 a ´el mismo, pues en la figura se puede ver
una flecha que de q2 regresa al mismo estado, con la letra b.
Podemos visualizar el camino recorrido en el diagrama de estados como una “trayecto-
ria” recorrida de estado en estado. Por ejemplo, para el aut´omata finito de la figura 2.4 la
trayectoria seguida para la palabra ab consiste en la secuencia de estados: q0, q1, q1.
Los estados son el ´unico medio de que disponen los AF para recordar los eventos que
ocurren (por ejemplo, qu´e caracteres se han le´ıdo hasta el momento); esto quiere decir que
son m´aquinas de memoria limitada. En ´ultima instancia, las computadoras digitales son
m´aquinas de memoria limitada, aunque la cantidad de estados posibles de su memoria podr´ıa
ser enorme.
2.3. Definici´on formal de aut´omatas finitos
Al describir una m´aquina de estados finitos en particular, debemos incluir las informa-
ciones que var´ıan de un aut´omata a otro; es decir, no tiene sentido incluir descripciones
generales aplicables a todo aut´omata. Estas informaciones son exactamente las que aparecen
en un diagrama de estados y transiciones, como los que hemos presentado antes.
En esta secci´on vamos a presentar un formato matem´atico para representar las mismas
informaciones que contiene un diagrama de estados. Como se utiliza terminolog´ıa matem´atica
en vez de dibujos, decimos que se trata de una notaci´on formal. En particular, utilizamos
nociones de la teor´ıa de conjuntos que fueron ya presentadas en el cap´ıtulo 1.
Definici´on.- Una m´aquina de estados finitos M es un qu´ıntuplo (K, Σ, δ, s, F), donde:
K es un conjunto de identificadores (s´ımbolos) de estados;
Σ es el alfabeto de entrada;
s ∈ K es el estado inicial;
F ⊆ K es un conjunto de estados finales;
δ : K × Σ → K es la funci´on de transici´on, que a partir de un estado y un s´ımbolo del
alfabeto obtiene un nuevo estado. 2
La funci´on de transici´on indica a qu´e estado se va a pasar sabiendo cu´al es el estado actual
y el s´ımbolo que se est´a leyendo. Es importante notar que δ es una funci´on y no simplemente
una relaci´on; esto implica que para un estado y un s´ımbolo del alfabeto dados, habr´a un y
s´olo un estado siguiente. Esta caracter´ıstica, que permite saber siempre cu´al ser´a el siguiente
2
que puede ser el mismo en el que se encontraba.
2.3. DEFINICI ´ON FORMAL DE AUT ´OMATAS FINITOS 33
estado, se llama determinismo. La definici´on dada arriba corresponde a los aut´omatas finitos
determin´ıstas, abreviado “AFD” 3
Ejemplo.- El aut´omata finito determinista de la figura 2.4 puede ser expresado formal-
mente como: M = (K, Σ, δ, q0, F), donde:
K = {q0, q1, q2}
Σ = {a, b}
δ = {((q0, a), q1), ((q0, b), q2), ((q1, a), q1), ((q1, b), q1), ((q2, a), q0), ((q2, b), q2)}
F = {q1, q2}
La funci´on de transici´on δ puede ser expresada mediante una tabla como la siguiente,
para este ejemplo:
q σ δ(q, σ)
q0 a q1
q0 b q2
q1 a q1
q1 b q1
q2 a q0
q2 b q2
Es f´acil ver que la diferencia entre los diagramas de estado y los AFD en notaci´on formal
es solamente de notaci´on, siendo la informaci´on exactamente la misma, por lo que es sencillo
pasar de una representaci´on a la otra.
Tanto en los diagramas de estado como en la representaci´on formal hay que tener cuidado
en respetar las condiciones para que tengamos un aut´omata v´alido; en particular, el n´umero
de transiciones que salen de cada estado debe ser igual a la cantidad de caracteres del
alfabeto, puesto que δ es una funci´on que est´a definida para todas las entradas posibles. 4
Para el ejemplo de la figura 2.4, donde el alfabeto es {a, b}, de cada estado deben salir
exactamente dos transiciones, una con a y otra con b.
Otra condici´on es que debe haber exactamente un estado inicial. En cambio, la cantidad
de estados finales puede ser cualquiera, inclusive cero, hasta un m´aximo de |K| (la cantidad
de estados).
3
Despu´es veremos otros aut´omatas finitos, llamados no determin´ıstas.
4
Recu´erdese que una funci´on no puede tener m´as de un resultado (en este caso, un estado de llegada)
para cada entrada (en este caso, un estado de salida y un caracter consumido).
34 CAP´ITULO 2. AUT ´OMATAS FINITOS
En la notaci´on formal tambi´en hay que seguir las transiciones, que ahora no son represen-
tadas como flechas, sino como elementos del conjunto δ de transiciones. Tomando nuevamente
el aut´omata de la figura 2.4 y la palabra de entrada bb, la operaci´on se inicia en el estado
inicial q0; luego, al recibir la primera b, usando la transici´on ((q0, b), q2) pasa a q2, y luego,
al recibir la segunda b de la palabra de entrada, por medio de la transici´on ((q2, b), q2) pasa
al estado q2 –de hecho permanece en ´el.
De una manera m´as general, si un AFD se encuentra en un estado q y recibe un caracter
σ pasa al estado q ssi δ(q, σ) = q , esto es, si ((q, σ), q ) ∈ δ.
Palabras aceptadas
Los aut´omatas finitos que hemos visto pueden ser utilizados para reconocer ciertas pal-
abras y diferenciarlas de otras palabras.
Decimos que un AFD reconoce o acepta una palabra si se cumplen las siguientes condi-
ciones:
1. Se consumen todos los caracteres de dicha palabra de entrada, siguiendo las transiciones
y pasando en consecuencia de un estado a otro;
2. al terminarse la palabra, el estado al que llega es uno de los estados finales del aut´omata
(los que tienen doble c´ırculo en los diagramas, o que son parte del conjunto F en la
representaci´on formal).
As´ı, en el ejemplo de la figura 2.4, el aut´omata acepta la palabra bb, pues al terminar de
consumirla se encuentra en el estado q2, el cual es final.
El concepto de lenguaje aceptado es una simple extensi´on de aquel de palabra aceptada:
Definici´on.- El lenguaje aceptado por una m´aquina M es el conjunto de palabras acep-
tadas por dicha m´aquina.
Por ejemplo, el aut´omata de la figura 2.4 acepta las palabras que empiezan con a, as´ı como
las palabras que contienen aa, y tambi´en las que terminan en b, como por ejemplo abab,
aaaaa, baaa, etc. En cambio, no acepta baba ni bba, babba, etc. N´otese que tampoco acepta
la palabra vac´ıa ε. Para que un AFD acepte ε se necesita que el estado inicial sea tambi´en
final.
Formalizaci´on del funcionamiento de los AFD
El funcionamiento de los AF lo vamos a definir de manera an´aloga a como se simula el
movimiento en el cine, es decir, mediante una sucesi´on de fotograf´ıas. As´ı, la operaci´on de un
2.3. DEFINICI ´ON FORMAL DE AUT ´OMATAS FINITOS 35
b a a b a b
q0
 
q1
 
q2
 
q3
 
Figura 2.6: La configuraci´on es como una fotograf´ıa de la situaci´on de un aut´omata en medio
de un c´alculo
AF se describir´a en t´erminos de la sucesi´on de situaciones por las que pasa mientras analiza
una palabra de entrada.
El equivalente en los AF de lo que es una fotograf´ıa en el cine es la noci´on de configuraci´on,
como se ilustra en la figura 2.6. La idea b´asica es la de describir completamente la situaci´on
en que se encuentra la m´aquina en un momento dado, incluyendo el contenido de la cinta,
la cabeza lectora y el control.
Las informaciones relevantes para resumir la situaci´on de la m´aquina en un instante son:
1. El contenido de la cinta,
2. la posici´on de la cabeza lectora,
3. el estado en que se encuentra el control.
Una configuraci´on ser´ıa entonces un elemento de Σ∗
× N × K, donde el primer elemento
es el contenido de la cinta, el segundo describe la posici´on de la cabeza, y el tercero es el
estado.
S´olo nos interesar´a incluir en las configuraciones aquellas informaciones que tengan rel-
evancia en cuanto a la aceptaci´on de la palabra al final de su an´alisis. As´ı, por ejemplo, es
evidente que, como la cabeza lectora no puede echar marcha atr´as, los caracteres por los
que ya pas´o no afectar´an m´as el funcionamiento de la m´aquina. Por lo tanto, es suficiente
con considerar lo que falta por leer de la palabra de entrada, en vez de la palabra completa.
Esta soluci´on tiene la ventaja de que entonces no es necesario representar la posici´on de la
cabeza, pues ´esta se encuentra siempre al inicio de lo que falta por leer.
Entonces una configuraci´on ser´a un elemento de K × Σ∗
. Por ejemplo, la configuraci´on
correspondiente a la figura 2.5 ser´ıa: (q1, abab).
36 CAP´ITULO 2. AUT ´OMATAS FINITOS
Para hacer las configuraciones m´as legibles, vamos a utilizar dobles corchetes en vez de
par´entesis, como en [[q1, abab]].
Vamos a definir una relaci´on entre configuraciones, C1 M C2, que significa que de la
configuraci´on C1 la m´aquina M puede pasar en un paso a la configuraci´on C2. Definimos
formalmente esta noci´on:
Definici´on.- [[q1, σw]] M [[q2, w]] para un σ ∈ Σ si y s´olo si existe una transici´on en M
tal que δ(q1, σ) = q2. (σ es el caracter que se ley´o).
La cerradura reflexiva y transitiva de la relaci´on M es denotada por ∗
M . As´ı, la expresi´on
C1
∗
M C2 indica que de la configuraci´on C1 se puede pasar a C2 en alg´un n´umero de pasos
(que puede ser cero, si C1 = C2). Ahora ya tenemos los conceptos necesarios para definir
cuando una palabra es aceptada.
Definici´on.- Una palabra w ∈ Σ∗
es aceptada por una m´aquina M = (K, Σ, δ, s, F) ssi
existe un estado q ∈ F tal que [[s, w]] ∗
M [[q, ε]]. N´otese que no basta con que se llegue a un
estado final q, sino que adem´as ya no deben quedar caracteres por leer (lo que falta por leer
es la palabra vac´ıa).
Ejemplo.- Probar que el AFD de la figura 2.4 acepta la palabra babb.
Soluci´on.- Hay que encontrar una serie de configuraciones tales que se pueda pasar de
una a otra por medio de la relaci´on M . La ´unica forma posible es la siguiente: 5
[[q0, babb]] M [[q2, abb]] M [[q0, bb]]
M [[q2, b]] M [[q2, ε]].
Como q2 ∈ F, la palabra es aceptada.
Definici´on.- Un c´alculo en una m´aquina M es una secuencia de configuraciones C1, C2,
. . . , Cn, tales que Ci Ci+1. Generalmente escribimos los c´alculos como C1 M C2 M . . . M
Cn.
Teorema.- Dados una palabra w ∈ Σ∗
y una m´aquina M = (K, Σ, δ, s, F), s´olo hay un
c´alculo [[s, w]] M . . . M [[q, ε]].
Prueba.- (por contradicci´on): Sean dos c´alculos distintos:
[[s, w]] M . . . M [[p, σw ]] M [[r, w ]] M . . . [[qr, ε]]
[[s, w]] M . . . M [[p, σw ]] M [[s, w ]] M . . . [[qs, ε]]
5
En los AFD’s, para cada palabra de entrada s´olo hay una secuencia posible de configuraciones, precisa-
mente porque son deterministas.
2.4. M´ETODOS DE DISE ˜NO DE AFDS 37
y sean [[r, w ]] y [[s, w ]] las primeras configuraciones distintas en los dos c´alculos. 6
Esto
implica que δ(p, σ) = r y tambi´en δ(p, σ) = s, y como δ es funci´on, se sigue que r = s, lo
que contradice la hip´otesis. QED.
2.4. M´etodos de dise˜no de AFDs
Consid´erese el problema de construir un AFD que acepte exactamente un lenguaje dado.
Este problema es com´unmente llamado “problema de dise˜no”. No es conveniente proceder
por “ensayo y error”, puesto que en general hay que considerar demasiadas posibilidades, y
es muy f´acil equivocarse. M´as a´un, hay dos maneras de equivocarse al dise˜nar un AFD: 7
1. Que “sobren palabras”, esto es, que el aut´omata acepte algunas palabras que no deber´ıa
aceptar. En este caso decimos que la soluci´on es incorrecta.
2. Que “falten palabras”, esto es, que haya palabras en el lenguaje considerado que no
son aceptadas por el AFD, cuando deber´ıan serlo. En este caso decimos que la soluci´on
es incompleta.
Por ejemplo, supongamos que alguien propone el aut´omata de la figura 2.4 para el lengua-
je de las palabras en el alfabeto {a, b} que no tienen varias a’s seguidas. Esta soluci´on es
defectuosa, porque:
1. Hay palabras, como “baa”, que tiene a’s seguidas y sin embargo son aceptadas por el
AFD;
2. Hay palabras, como “ba”, que no tienen a’s seguidas y sin embargo no son aceptadas
por el AFD.
Como se ve, es posible equivocarse de las dos maneras a la vez en un s´olo aut´omata.
La moraleja de estos ejemplos es que es necesario dise˜nar los AFD de una manera m´as
sistem´atica.
El elemento m´as importante en el dise˜no sistem´atico de aut´omatas a partir de un lengua-
je consiste en determinar, de manera expl´ıcita, qu´e condici´on “recuerda” cada uno de los
estados del AFD. El lector debe concientizarse de que este es un principio de dise˜no impor-
tant´ısimo, verdaderamente b´asico para el dise˜no met´odico de aut´omatas.
6
Es decir, los c´alculos son iguales hasta cierto punto, que en el peor caso es la configuraci´on inicial [[s, w]].
7
Estos errores no son excluyentes, y es posible que se presenten ambos a la vez.
38 CAP´ITULO 2. AUT ´OMATAS FINITOS
IP
(a) Dise˜no de estados
P
a
b
ab
I
(b) AFD completo
Figura 2.7: Dise˜no de AFD para palabras con n´umero impar de a’s
Recu´erdese que la ´unica forma de memoria que tienen los AFD es el estado en que
se encuentran. As´ı, el dise˜no del AFD inicia con la propuesta de un conjunto de estados
que “recuerdan” condiciones importantes en el problema considerado. Posteriormente se
proponen las transiciones que permiten pasar de un estado a otro; esta ´ultima parte es
relativamente sencilla una vez que se cuenta con los estados y sus condiciones asociadas.
Ejemplo.- Dise˜nar un AFD que acepte las palabras en el alfabeto {a, b} en que la cantidad
de a’s es impar.
Soluci´on.- Las condiciones relevantes para este problema -que deben ser “recordadas” por
los estados correspondientes- son:
El n´umero de a’s recibidas hasta el momento es par (estado P);
El n´umero de a’s recibidas hasta el momento es impar (estado I);
Al iniciar la operaci´on del aut´omata no se ha recibido a´un ninguna a, por lo que debemos
encontrarnos en el estado P (el cero es un n´umero par), y por lo tanto el estado P es inicial.
Para determinar qu´e estados son finales, debemos fijarnos en cu´ales corresponden con el
enunciado original de las palabras aceptadas. En este caso vemos que el estado I es el que
corresponde, por lo que es final, mientras que P no corresponde y no es final.
Los estados P e I aparecen en la figura 2.7(a). Esta es la primera etapa del dise˜no de un
AFD. En nuestro m´etodo de dise˜no es importante trazar las transiciones ´unicamente despu´es
de haber determinado cu´ales son los estados y sus caracter´ısticas. Ahora ya podemos trazar
las transiciones, lo cual es una tarea relativamente sencilla, si ya tenemos el dise˜no de los
estados. Por ejemplo, si estamos en P y recibimos una a, claramente debemos irnos a I, porque
la cantidad de a’s pasa de ser par a impar. Similarmente se hacen las otras transiciones. El
resultado se muestra en la figura 2.7(b).
Ejemplo.- Dise˜nar un AFD que acepte exactamente el lenguaje en el alfabeto {0, 1} en
que las palabras no comienzan con 00.
2.4. M´ETODOS DE DISE ˜NO DE AFDS 39
1
1
1
0
0
100
q3
q2q1q0
Figura 2.8: AF para palabras que no empiezan en “00”
Soluci´on.- Para emprender el dise˜no en forma met´odica, comenzamos por determinar
las condiciones que es importante recordar, y asociamos un estado a cada una de estas
condiciones, seg´un la tabla siguiente:
Estado Condici´on
q0 No se han recibido caracteres
q1 Se ha recibido un cero al inicio
q2 Se han recibido dos ceros iniciales
q3 Se recibi´o algo que no son dos ceros iniciales
Claramente tanto q0 como q1 deben ser estados finales, mientras que q2 no debe ser final.
Ahora hay que completar el AF, agregando las transiciones que falten. A partir de q0, si
llega un 1 habr´a que ir a un estado final en el que se permanezca en adelante; agregamos al
AF un estado final q3 y la transici´on de q0 a q3 con 1. El estado q3 tiene transiciones hacia
s´ı mismo con 0 y con 1. Finalmente, al estado q1 le falta su transici´on con 1, que obviamente
dirigimos hacia q3, con lo que el AF queda como se ilustra en la figura 2.8.
En este ejemplo se puede apreciar que en ocasiones es necesario completar el conjunto de
estados al momento de hacer las transiciones.
2.4.1. Dise˜no por conjuntos de estados
Es posible llevar un paso m´as all´a el m´etodo de asociar una condici´on a cada estado:
vamos a asociar condiciones a grupos de estados m´as que a estados individuales. De esta
manera aumentaremos el grado de abstracci´on en la etapa inicial de dise˜no, haciendo posible
en consecuencia atacar problemas m´as complejos con menos posibilidades de equivocarse.
Este m´etodo consiste en identificar inicialmente condiciones asociadas al enunciado del
problema, aunque ´estas no sean suficientemente espec´ıficas para asociarse a estados individ-
uales.
Describiremos este m´etodo mediante su aplicaci´on a un ejemplo particular: Dise˜nar un
AFD que acepte las palabras del lenguaje en {0, 1} donde las palabras no contienen la
40 CAP´ITULO 2. AUT ´OMATAS FINITOS
1
0
1
11
Ni 11 ni 00
00 pero no 11
(a) Grupos de estados
A
C
D E
B
F
B
0
0
0
1
1
0,1
1
0
1
0
1
(b) Detalle de estados
Figura 2.9: Dise˜no de AFD por grupos de estados
subcadena 11 pero s´ı 00.
Inmediatamente a partir del enunciado identificamos las siguientes situaciones:
Las letras consumidas hasta el momento no contienen ni 00 ni 11.
Contienen 00 pero no 11
Contienen 11.
Estas condiciones cumplen dos requisitos que siempre se deben cumplir en este tipo de
dise˜nos:
Las condiciones deben ser excluyentes, lo que quiere decir que no deben poder ser
ciertas dos o m´as al mismo tiempo.
Las condiciones deben ser comprensivas, lo que quiere decir que no faltan casos por
considerar.
Los grupos de estados, as´ı como las transiciones que provocan que se pase de uno a
otro, se representan como “nubes” en la figura 2.9(a). En dicha figura tambi´en se ilustran
unas nubes “dobles” para indicar que son condiciones finales –en este ejemplo, la condici´on
“Contienen 00 pero no 11”–, as´ı como la condici´on inicial con un s´ımbolo “>”.
Estos diagramas no son a´un AFD, pero casi. Lo que falta por hacer es refinar cada grupo
de estados, considerando lo que ocurre al recibir cada uno de los posibles caracteres de
entrada. La forma en que se subdivide cada grupo de estados (“nube”) en estados individuales
se detalla a continuaci´on:
2.4. M´ETODOS DE DISE ˜NO DE AFDS 41
Las letras consumidas hasta el momento no contienen ni 00 ni 11.
1. Inicial, no se han recibido caracteres.
2. Se acaba de recibir un 0.
3. Se acaba de recibir un 1.
Contienen 00 pero no 11.
1. Se acaba de recibir un 0.
2. Se acaba de recibir un 1.
Contienen 11 (no hay subcondiciones).
Esto nos da un total de 6 estados, cada uno de los cuales tiene una condici´on muy
espec´ıfica asociada (son los estados “A” a “F” en la figura 2.9(b)). El siguiente paso es
hacer el dise˜no detallado de las transiciones, lo que por experiencia consideramos que es
relativamente f´acil para cualquier alumno. El resultado se muestra en la figura 2.9(b). En
este diagrama se puede notar que los estados de una nube “final” son tambi´en finales; esto
debe verificarse siempre.
Hacemos notar que en este ejemplo en particular, encontrar directamente las condiciones
asociadas a los estados puede ser algo dif´ıcil; por ejemplo, encontrar directamente la condici´on
“Las letras consumidas hasta el momento no contienen ni 00 ni 11 y se ha recibido un 0”
(estado “B” en la figura 2.9(b)) requerir´ıa ciertamente m´as inventiva de la que tenemos
derecho a presuponer en el lector. En este sentido el dise˜nar primero los grupos de estados
permite manejar la complejidad del problema de manera m´as modular y gradual.
En cualquier caso, ya sea que se encuentren directamente las condiciones para cada estado,
o primero para grupos de estados, consideramos importante que primero se determinen los
estados con sus condiciones asociadas, y solamente despu´es se tracen las transiciones, en
vez de ir proponiendo sin ning´un orden los estados y las transiciones a la vez, lo que muy
frecuentemente conduce a errores.
2.4.2. Dise˜no de AFD por complemento
En ocasiones, para un cierto lenguaje L, es m´as sencillo encontrar un AFD para el lenguaje
exactamente contrario –t´ecnicamente hablando, complementario Lc
= Σ∗
−L. En estos casos,
una soluci´on sencilla es hallar primero un AFD para Lc
, y luego hacer una transformaci´on
sencilla para obtener el aut´omata que acepta L.
Si M = (K, Σ, δ, s, F) es un aut´omata determinista que acepta un lenguaje regular L,
para construir un aut´omata Mc
que acepte el lenguaje complemento de L, esto es, Σ∗
− L,
basta con intercambiar los estados finales de M en no finales y viceversa. Formalmente,
42 CAP´ITULO 2. AUT ´OMATAS FINITOS
Mc
= (K, Σ, δ, s, K − F). As´ı, cuando una palabra es rechazada en M, ella es aceptada en
Mc
y viceversa. 8
Ejemplo.- Obtener un AF para el lenguaje en {a, b}∗
de las palabras que no contienen la
cadena “abaab”.
Soluci´on.- Primero obtenemos un AFD M1 para el lenguaje cuyas palabras s´ı contienen
la cadena “abaab”. Dise˜namos M1 sistem´aticamente usando grupos de estados, uno que
recuerda que la palabra no contiene aun abaab y otro que recuerda que ya se reconoci´o dicha
cadena, como aparece en la figura 2.10(a). Luego detallamos cada uno de estos grupos de
estados, introduciendo estados individuales que recuerdan lo que se lleva reconocido de la
cadena abaab, como se muestra en la figura 2.10(b) –el grupo de estados que recuerda que ya
se reconoci´o la cadena abaab tiene un s´olo estado, pues no hay condiciones adicionales que
recordar. Finalmente, la soluci´on ser´a un AFD donde cambiamos los estados finales por no
finales y viceversa en M1, como se muestra en 2.10(c).
Desde luego, el ejemplo descrito es muy sencillo, pero luego veremos otras herramientas
que se pueden usar en combinaci´on con la obtenci´on del complemento de un AF, para resolver
en forma sistem´atica y flexible problemas de dise˜no aparentemente muy dif´ıciles.
2.5. Equivalencia de aut´omatas finitos.
Decimos que dos aut´omatas que aceptan el mismo lenguaje son equivalentes.
Definici´on.- Dos aut´omatas M1 y M2 son equivalentes, M1 ≈ M2, cuando aceptan exac-
tamente el mismo lenguaje.
Pero, ¿puede haber de hecho varios AF distintos9
que acepten un mismo lenguaje? La
respuesta es afirmativa, y una prueba consiste en exhibir un ejemplo.
Por ejemplo, los aut´omatas (a) y (b) de la figura 2.11 aceptan ambos el lenguaje a∗
.
En vista de esta situaci´on, dados dos AF distintos existe la posibilidad de que sean
equivalentes. Pero ¿c´omo saberlo?
De acuerdo con la definici´on que hemos presentado, la demostraci´on de equivalencia de
dos aut´omatas se convierte en la demostraci´on de igualdad de los lenguajes que aceptan. Sin
embargo, demostrar que dos lenguajes son iguales puede complicarse si se trata de lenguajes
infinitos. Es por esto que se prefieren otros m´etodos para probar la equivalencia de aut´omatas.
8
Es muy importante notar que el m´etodo de dise˜no por complemento s´olo se aplica a los aut´omatas
deterministas, y no a los llamados “no deterministas”, que veremos luego.
9
¿Qu´e se quiere decir por “distintos”? ¿Si dos AF s´olo difieren en los nombres de los estados se considerar´an
distintos?
2.5. EQUIVALENCIA DE AUT ´OMATAS FINITOS. 43
a,b
Con "abaab"
Sin "abaab"
b
(a)
abaa
a
b
ba
b
abaab
a,bb
b
a
a
a
a abab^
(b)
abaa
a
b
ba
b
abaab
a,bb
b
a
a
a
a abab^
(c)
Figura 2.10: Dise˜no del AF para palabras sin abaab
44 CAP´ITULO 2. AUT ´OMATAS FINITOS
q0
q1
q2
b
a
ba
a
b
(a)
r0
r1
b
a
a
b
(b)
Figura 2.11: Aut´omatas equivalentes
El m´etodo que aqu´ı propondremos para los AF se basa en el siguiente teorema:
Teorema de Moore.- Existe un algoritmo para decidir si dos aut´omatas finitos son equiv-
alentes o no.
El algoritmo mencionado en el teorema de Moore consiste en la construcci´on de un ´arbol
de comparaci´on de aut´omatas. Este ´arbol permite convertir el problema de la comparaci´on
de los lenguajes aceptados en un problema de comparaci´on de estados de los aut´omatas.
Definici´on.- Decimos que dos estados q y q son compatibles si ambos son finales o ninguno
de los dos es final. En caso contrario, son estados incompatibles.
La idea del algoritmo de comparaci´on de AFD1 y AFD2 consiste en averiguar si existe
alguna secuencia de caracteres w tal que sigui´endola simult´aneamente en AFD1 y AFD2
se llega a estados incompatibles. Si dicha secuencia no existe, entonces los aut´omatas son
equivalentes.
El ´unico problema con esta idea estriba en que hay que garantizar que sean cubiertas
todas las posibles cadenas de caracteres w, las cuales son infinitas en general. Por ello se
pens´o en explorar todas las posibles combinaciones de estados mediante un ´arbol. Dicho ´arbol
de comparaci´on se construye de la manera siguiente, para dos aut´omatas M = (K, Σ, δ, s, F)
y M = (K , Σ , δ , s , F ):
1. Inicialmente la ra´ız del ´arbol es el par ordenado (s, s ) que contiene los estados iniciales
de M y M respectivamente;
2. Si en el ´arbol hay un par (r, r ), para cada caracter en Σ se a˜naden como hijos suyos
los pares (rσ, rσ) donde rσ = δ(r, σ), rσ = δ(r , σ), si no est´en ya.
3. Si aparece en el ´arbol un par (r, r ) de estados incompatibles, se interrumpe la con-
strucci´on del mismo, concluyendo que los dos aut´omatas no son equivalentes. En caso
contrario se contin´ua a partir del paso 2.
2.5. EQUIVALENCIA DE AUT ´OMATAS FINITOS. 45
(q0,r0)
(q2,r0) (q1,r1)
a b
a
b
a,b
Figura 2.12: ´Arbol de comparaci´on de AF
1 2
b
a
a
b
b
a
3
(a)
4 5
b
a
a
b
a,b
6
(b)
1,4
a
2,5
b
a
3,6
b
1,6
a
(c)
Figura 2.13: AFDs no equivalentes
4. Si no aparecen nuevos pares (rσ, rσ) que no est´en ya en el ´arbol, se termina el proceso,
concluyendo que los dos aut´omatas son equivalentes.
Ejemplo.- Sean los aut´omatas M y M de la figuras 2.11(a) y (b) respectivamente. El ´arbol
de comparaci´on se muestra en la figura 2.12. En dicho ´arbol se muestran adicionalmente,
con l´ınea punteada, las ramas que van a nodos ya existentes, como la que va de (q2, r0) a
(q0, r0). Estas ramas con l´ınas punteada no son, estrictamente hablando, parte del ´arbol,
pero pensamos que mejoran la comprensi´on del diagrama.
Se concluye que M y M son equivalentes.
En el caso de que los aut´omatas que se comparan no sean equivalentes, la construcci´on del
´arbol de comparaci´on permite encontrar al menos una palabra en que los lenguajes aceptados
por ellos difieren. Consid´erense, por ejemplo, los aut´omatas de las figuras 2.13 (a) y (b). Una
parte del ´arbol de comparaci´on se muestra en la figura 2.13(c), hasta donde se encuentra el
46 CAP´ITULO 2. AUT ´OMATAS FINITOS
primer par de estados incompatibles.
Analizando el ´arbol de la figura 2.13(c), vemos que para llegar desde la ra´ız del ´arbol
hasta el par incompatible (1,6), hay que gastar los caracteres b, b y a, esto es, la palabra bba.
As´ı llegamos a la conclusi´on de que el aut´omata de la figura 2.13(a) no acepta la palabra
bba, mientras que el de la figura 2.13(b) s´ı la acepta, y por lo tanto sus lenguajes aceptados
difieren al menos en la palabra bba.
Para probar que este m´etodo constituye un algoritmo de decisi´on para verificar la equiv-
alencia de dos aut´omatas, hay que mostrar los puntos siguientes:
1. La construcci´on del ´arbol siempre termina (no se “cicla”)
2. Si en el ´arbol aparecen pares de estados incompatibles (uno final y el otro no final),
entonces los lenguajes aceptados por los aut´omatas son efectivamente distintos.
3. Si se comparan dos aut´omatas que no son equivalentes, entonces en el ´arbol aparecer´an
estados incompatibles.
El punto 1 se prueba f´acilmente porque, los nodos del ´arbol siendo todos distintos, son un
subconjunto de K×K , que es finito, por lo que el ´arbol no puede extenderse indefinidamente.
Para probar el punto 2 basta con recorrer en el ´arbol la trayectoria que lleva al par
de estados incompatibles, (r, r ), r ∈ F, r ∈ F . Simplemente concatenamos los caracteres
de entrada σ en dicha trayectoria, y obtendremos una palabra wtal que si la aplicamos
como entrada al aut´omata M llegaremos al estado r, es decir, w ser´a aceptada. En cambio,
si aplicamos la misma w a M , llegaremos al estado r , que no es final, por lo que w no
ser´a aceptada. Esto muestra que los lenguajes aceptados por M y por M difieren en al
menos una palabra, w.
En cuanto al punto 3, si los lenguajes L(M) y L(M ) son diferentes, entonces existe
al menos una palabra, sea w, tal que es aceptada por uno y rechazada por el otro. En
consecuencia, siguiendo la palabra w en el ´arbol, caracter por caracter, debemos llegar a un
par incompatible. 10
Por otra parte, el punto 3 implica que si no hay pares incompatibles en el ´arbol, entonces
los lenguajes son id´enticos. En efecto, por propiedades de la l´ogica elemental, al negar la
conclusi´on de 3 se obtiene la negaci´on de su premisa. QED.
10
Reflexione porqu´e se est´a seguro de que es posible seguir w sobre el ´arbol, caracter por caracter. ¿No
podr´ıa “atorarse” el proceso?.
2.6. SIMPLIFICACI ´ON DE AUT ´OMATAS FINITOS 47
2.6. Simplificaci´on de Aut´omatas finitos
Una de las mejores cualidades de los AFD es que existen m´etodos mec´anicos para sim-
plificarlos, hasta poder llegar al AFD m´as sencillo posible para un lenguaje dado.
En el caso de los AFD, vamos a entender por simplificaci´on la reducci´on en el n´umero de
estados, pero aceptando el mismo lenguaje que antes de la simplificaci´on. M´as a´un, llamare-
mos minimizaci´on a la obtenci´on de un aut´omata con el menor n´umero posible de estados.
11
Como un primer ejemplo, consid´erense los AFD de las figuras 2.11 (a) y (b). En el AFD de
(a), los estados q0 y q2 son en cierto modo redundantes, porque mientras se est´en recibiendo
a’s, el AFD contin´ua en q0 o en q2, y cuando se recibe una b se pasa a q1. Se puede pensar
entonces en eliminar uno de ellos, por ejemplo q2, y obtener el aut´omata de la figura 2.11(b),
que tiene un estado menos.
Esta idea de “estados redundantes” se formaliza en lo que sigue:
Definici´on.- Dos estados son equivalentes, q1 ≈ q2, ssi intercambiar uno por otro en
cualquier configuraci´on no altera la aceptaci´on o rechazo de toda palabra.
Formalmente escribimos: Dos estados p y q son equivalentes si cuando [[s, uv]] ∗
M [[q, v]]
∗
M [[r, ε]] y [[p, v]] ∗
M [[t, ε]] entonces r y t son estados compatibles.
Esta definici´on quiere decir que, si p ≈ q, al cambiar q por p en la configuraci´on, la
palabra va a ser aceptada (se acaba en el estado final t ) si y s´olo si de todos modos iba a
ser aceptada sin cambiar p por q (se acaba en el estado final r ).
El ´unico problema con esta definici´on es que, para verificar si dos estados dados p y q
son equivalentes, habr´ıa que examinar, para cada palabra posible de entrada, si intercam-
biarlos en las configuraciones altera o no la aceptaci´on de esa palabra. Esto es evidentemente
imposible para un lenguaje infinito. La definici´on nos dice qu´e son los estados equivalentes,
pero no c´omo saber si dos estados son equivalentes. Este aspecto es resuelto por el siguiente
lema:
Lema: Dado un AFD M = (K, Σ, δ, q, F) y dos estados q1, q2 ∈ K, tendremos que q1 ≈ q2
ssi (K, Σ, δ, q1, F) ≈ (K, Σ, δ, q2, F). 12
Es decir, para saber si dos estados q1 y q2 son equivalentes, se les pone a ambos como
estado inicial de sendos aut´omatas M1 y M2, y se procede a comparar dichos aut´omatas.
Si ´estos ´ultimos son equivalentes, quiere decir que los estados q1 y q2 son equivalentes. Por
ejemplo, para el aut´omata de la figura 2.11(a), para verificar si q0 ≈ q2, habr´ıa que comparar
11
El hecho de que para todo lenguaje regular existe un AFD m´ınimo, es un hecho para nada evidente, que
rebasa los alcances de este libro. Esto se discute en la referencia [7].
12
No damos la prueba, ver secci´on de ejercicios.
48 CAP´ITULO 2. AUT ´OMATAS FINITOS
q0
q1
q2
b
a
ba
a
b
Figura 2.14: Cambio de estado inicial
dicho AFD con el de la figura 2.14, en el que se cambi´o el estado inicial por el otro estado
que se quiere comparar. En este ejemplo, dicha comparaci´on de AFDs da un resultado de
equivalencia, por lo que se concluye que los estados son redundantes.
Una vez que se sabe que dos estados son equivalentes, se puede pensar en eliminar uno de
ellos, para evitar redundancias y hacer m´as eficiente al AFD. Sin embargo, la eliminaci´on de
un estado en el AFD plantea el problema de qu´e hacer con las flechas que conectan al estado
eliminado con el resto del aut´omata. Esta cuesti´on se resuelve con los siguientes criterios:
1. Las flechas que salen del estado eliminado son eliminadas;
2. Las flechas que llegan al estado eliminado son redirigidas hacia su estado equivalente.
Por ejemplo, en el aut´omata de la figura 2.11(a), si verificamos que q0 y q2 son equiva-
lentes, y pensamos eliminar q2, hay que redirigir la flecha que va de q0 a q2 para que vaya al
mismo q0 (se vuelve un ciclo). As´ı se llega al aut´omata de la figura 2.11(b).
La eliminaci´on de estados redundantes de un AFD es una manera de simplificar AFDs, y
puede usarse iteradamente para simplificar al m´ınimo. Sin embargo, el trabajo que implica
es mucho, y para AFDs grandes, examinar cada par de estados es poco pr´actico.
Vamos, en consecuencia, a examinar m´etodos m´as organizados para localizar los estados
redundantes y minimizar los AFDs.
2.6.1. Tabla de estados distinguibles
Vamos a definir la noci´on de estados distinguibles, que intuitivamente quiere decir que si
dos estados son distinguibles, ya no pueden ser equivalentes. La definici´on es inductiva:
Los estados p y q son distinguibles si son incompatibles (es decir, uno es final y el otro
no final). Esta es la base de la inducci´on.
2.6. SIMPLIFICACI ´ON DE AUT ´OMATAS FINITOS 49
Figura 2.15: AFD a simplificar
Si tenemos transiciones δ(p0, σ) = p y δ(q0, σ) = q donde p y q son distinguibles,
entonces tambi´en p0 y q0 son distinguibles. Este es el paso inductivo.
Por ejemplo, consid´erese el AFD de la figura 2.15. Claramente los estados 1 y 3 son
distinguibles, porque no son compatibles. Puede ser menos obvio ver que los estados 4 y 3
son distinguibles, pero podemos ver que, aunque ambos son finales, el caracter b nos lleva de
4 a 2, y similarmente de 3 a 1, y vemos que 2 y 1 son distinguibles al no ser compatibles.
En ocasiones se requieren varios pasos intermedios para determinar que un par de estados
es distinguible (esto no ocurre en el ejemplo reci´en visto).
Teorema.- Dos estados son equivalentes (o “redundantes”) ssi no son distinguibles. Este
resultado se prueba en la referencia [7]. Su utilidad estriba en que es relativamente sencillo
verificar si dos estados son distinguibles.
Una manera de organizar el trabajo de verificar qu´e pares de estados de un AFD son
distinguibles, consiste en construir una tabla en que los renglones y las columnas son los
nombres de los estados, y en cada cruce de rengl´on con columna se indica con una × cuando
son distinguibles.
Por ejemplo, para el AFD de la figura 2.15, empezamos con la tabla vac´ıa de la figura
2.16(a). Obs´ervese que en la tabla se omite la diagonal principal, pues no tiene caso confrontar
cada estado contra s´ı mismo. En la tabla 2.16(b) se aprecian signos “×” en las celdas (2,1),
(3,1), (4,1) y (5,1) que se obtienen directamente del hecho de que son pares de estados
incompatibles –por lo tanto distinguibles. En la figura 2.16(c) se ha agregado una marca en
la casilla (4,2), que viene del hecho de que con el caracter b las transiciones nos llevan de
2 a 1, y de 4 a 2, pero el par (2,1) ya estaba marcado como distinguible. Finalmente, en la
tabla 2.16(d) se pusieron marcas en (4,3), (5,2) y (5,3), haciendo an´alisis similares. Es f´acil
convencerse de que no hay forma de hacer distinguibles los pares (3,2) y (5,4), los cuales, de
50 CAP´ITULO 2. AUT ´OMATAS FINITOS
2
3
4
5
1 2 3 4
(a)
2
3
4
5
X
X
X
X
1 2 3 4
(b)
2
3
4
5
X
X
X X
X
1 2 3 4
(c)
2
3
4
5
X
X
X X
X X
X
X
1 2 3 4
(d)
Figura 2.16: Tabla de estados distinguibles
acuerdo con el teorema presentado, son pares de estados equivalentes.
Una vez que detectamos los pares de estados equivalentes, podemos proceder a eliminar
uno de ellos, de la forma que hemos visto. En el ejemplo de la figura 2.16(d), como hay dos
pares de estados redundantes, el AFD m´ınimo tiene 3 estados.
En aut´omatas grandes, el procedimiento puede volverse algo complicado, pues es necesario
examinar repetidamente cada celda de la tabla para verificar que los cuadros a´un no marcados
siguen sin ser distinguibles, hasta que en una de las iteraciones ya no se agregue ninguna
marca a la tabla.
2.6.2. Simplificaci´on por clases de equivalencia
Existe otro m´etodo de simplificaci´on de estados, de hecho m´as com´unmente usado que el
que hemos presentado, debido a que permite organizar m´as sistem´aticamente el trabajo.
Este algoritmo, que llamaremos “simplificaci´on por clases de equivalencia”, sigue un
orden de operaciones inverso a la eliminaci´on gradual de estados redundantes que hemos
visto antes: en vez de ir reduciendo el n´umero de estados, comienza con grupos de estados,
2.6. SIMPLIFICACI ´ON DE AUT ´OMATAS FINITOS 51
o “clases”, que se van dividiendo en clases m´as peque˜nas, hasta que el proceso de divisi´on
ya no pueda continuarse.
La idea es formar clases de estados de un aut´omata que, hasta donde se sabe en ese mo-
mento, podr´ıan ser equivalentes. Sin embargo, al examinar las transiciones de varios estados
de una misma clase, puede a veces inferirse que despu´es de todo no deben permanecer en
la misma clase. En ese momento la clase en consideraci´on se “divide”. Luego se examinan
las transiciones de las clases que se formaron, a ver si es necesario dividirlas nuevamente, y
as´ı en adelante, hasta que no se halle evidencia que obligue a dividir ninguna clase.
Al terminar el proceso de divisi´on de clases, cada una de las clases representa un estado
del aut´omata simplificado. Las transiciones del aut´omata simplificado se forman a partir de
las transiciones de los estados contenidos en cada clase.
Antes de formalizar el proceso, vamos a explicarlo con ayuda de un ejemplo.
(a) AFD a simplificar (b) Clases iniciales
(c) Clases al final (d) AFD simplificado
Figura 2.17: Simplificaci´on por clases de equivalencia
Ejemplo.- Consid´erese el AFD de la figura 2.17(a). Las primeras dos clases de equivalencia
que se forman contienen, respectivamente, a los estados finales y a los estados no finales,
52 CAP´ITULO 2. AUT ´OMATAS FINITOS
los cuales evidentemente no podr´ıan ser equivalentes (esto es, estar en una sola clase de
equivalencia 13
). Estas dos clases se encuentran indicadas en la figura 2.17(b).
Ahora vamos a examinar si todos los estados de cada clase tienen transiciones “similares”,
lo que en nuestro caso quiere decir que van a una misma clase de equivalencia. Por ejemplo,
tomemos los estados 3 y 4 de 2.17(b). Al recibir el s´ımbolo a, desde 3 nos vamos a la
clase {2, 3, 4, 5}, lo que tambi´en ocurre desde el estado 4. Hasta aqu´ı 3 y 4 se comportan
similarmente. Ahora examinamos las transiciones con b: desde 3 nos ir´ıamos a la clase {1},
mientras que desde 4 ir´ıamos a la clase {2, 3, 4, 5}. Conclu´ımos que 3 y 4 no pueden coexistir
en una misma clase de equivalencia, por lo que la clase {2, 3, 4, 5} debe dividirse. Haciendo el
mismo an´alisis con los dem´as estados, dividimos {2, 3, 4, 5} en {2, 3} y {4, 5}, como aparece
en la figura 2.17(c). En este punto ya no es posible dividir alguna de las 3 clases existentes,
pues las transiciones de sus estados son “similares”. Concluimos que estas son las clases de
equivalencia m´as finas que pueden formarse.
Tomando las clases de equivalencia de 2.17(c) como estados, formamos el AFD que
aparece en 2.17(d). Obs´ervese que las transiciones de 2.17(d) son las de cualquiera de los
estados contenidos en cada clase; simplemente registramos a qu´e clase de equivalencia se
llega con cada s´ımbolo de entrada. El estado inicial corresponde a la clase de equivalencia
que contenga el antiguo estado inicial, y los estados finales del nuevo AFD vienen de las
clases de equivalencia que contienen estados finales del antiguo AFD.
Formalmente, el procedimiento es como sigue, para un AFD (K, Σ, δ, s, F):
1. Inicialmente se tienen las clases F y K − F
2. Repetir para cada clase:
Sea q un estado de la clase. Para cada uno de los otros estados, q , verificar si
δ(q, σ) va a dar a la misma clase de equivalencia que δ(q , σ), para cada caracter
σ.
Si la respuesta es s´ı, la clase no necesita dividirse.
Si la respuesta es no, dividir la clase en dos subclases: la que agrupa a los estados
que tuvieron transiciones “similares” a q, y la de los estados con transiciones
“diferentes” a q (que no van a dar a la misma clase de equivalencia con un mismo
s´ımbolo σ).
Por ejemplo, consideremos la clase {2, 3, 4, 5} de la figura 2.17(b). Tomando como refer-
encia al estado 2, nos damos cuenta de que el estado 3 tiene transiciones similares (con a a
la clase {2, 3, 4, 5}, con b a la clase {1}), mientras que los estados 4 y 5 tienen transiciones
diferentes a las de 2 (con a y con b van a la clase {2, 3, 4, 5}); esto ocasiona que la clase
{2, 3, 4, 5} se parta en dos. Luego habr´ıa que examinar las nuevas clases, {1}, {2, 3} y {4, 5};
en este caso sucede que ya no se necesita dividir ninguna de ellas.
13
¿Porqu´e?
2.7. AUT ´OMATAS FINITOS CON SALIDA 53
1, 2, 3, 4, 5
2, 3, 4, 5 1
2, 3 4, 5
b
Figura 2.18: Clases de equivalencia organizadas en ´arbol
En la pr´actica, en vez de trazar l´ıneas sobre el diagrama de estados, es conveniente
organizar la informaci´on de las clases de equivalencia en ´arboles, en donde cada nodo contiene
los estados de una clase de equivalencia. Inicialmente est´an todos los estados del AFD en
una clase, como en la ra´ız del ´arbol en la figura 2.18, para el AFD de la figura 2.17(a), e
inmediatamente se dividen en finales y en no finales, como en el seguiente nivel en esa misma
figura. Luego, para el nodo {2, 3, 4, 5} examinamos si las transiciones con los caracteres de
entrada, en este caso a y b, llevan a las mismas clases, y verificamos que en el caso de
b los estados 2 y 3 van a un no final, mientras que 4 y 5 van a un final, por lo que ese
nodo se divide en dos, como se aprecia en el tercer nivel de la figura. Ah´ı tambi´en se puede
apreciar un s´ımbolo b bajo el nodo {2, 3, 4, 5}, indicando a causa de qu´e caracter la clase de
equivalencia se dividi´o. Examinando las transiciones en las clases de equivalencia que quedan
en las hojas del ´arbol, vemos que ya no hay raz´on para dividirlas m´as. Finalmente, las clases
de equivalencia resultantes son {1}, {2, 3} y {4, 5}, que corresponden a los 3 estados que
tendr´a el AFD minimizado.
2.7. Aut´omatas finitos con salida
Hasta donde hemos visto, la ´unica tarea que han ejecutado los aut´omatas finitos es la
de aceptar o rechazar una palabra, determinando as´ı si pertenece o no a un lenguaje. Sin
embargo, es posible definirlos de manera tal que produzcan una salida diferente de “si”
o “no”. Por ejemplo, en el contexto de una m´aquina controlada por un aut´omata, puede
haber distintas se˜nales de salida que correspondan a los comandos enviados a la m´aquina
para dirigir su acci´on. En los compiladores, 14
el analizador lexicogr´afico es un aut´omata
finito con salida, que recibe como entrada el texto del programa y manda como salida los
elementos lexicogr´aficos reconocidos (“tokens”). Hay dos formas de definir a los aut´omatas
con salida, seg´un si la salida depende de las transiciones o bien del estado en que se encuentra
el aut´omata. En el primer caso, se trata de los aut´omatas de Mealy, y en el segundo, de los
aut´omatas de Moore, propuestos respectivamente por G. Mealy [13] y E. Moore [15].
14
Haremos una breve descripci´on de los compiladores en la secci´on 5.6.
54 CAP´ITULO 2. AUT ´OMATAS FINITOS
q1q0
1
1
0 0
0 1
(a) Moore
q0
1/0
0/1
(b) Mealy
q1q0
1/0
1/0
0/1 0/1
(c) Moore transformado en Mealy
Figura 2.19: Aut´omatas de Moore y Mealy
2.7.1. M´aquinas de Moore
En las m´aquinas de Moore la salida depende del estado en que se encuentra el aut´oma-
ta. Dicha salida es producida una vez, y cuando se llega a otro estado (o al mismo) por
efecto de una transici´on, se produce el s´ımbolo de salida asociado al estado al que se llega.
Algunos estudiantes encuentran ´util la analog´ıa de los aut´omatas de Moore con nociones de
electricidad: es como si cada estado tuviera un “nivel de voltaje” que se produce en la salida
mientras el control se encuentre en dicho estado.
Las m´aquinas de Moore se representan gr´aficamente como cualquier AFD, al que se
a˜nade, al lado de cada estado, la salida asociada, que es una cadena de caracteres. Por
ejemplo, consideremos un aut´omata que invierte la entrada binaria recibida (esto es, cambia
un 1 por 0 y un 0 por 1). Dicho aut´omata se representa gr´aficamente en la figura 2.19(a).
Para formalizar los aut´omatas de Moore una idea sencilla es a˜nadir a un AFD est´andar
una funci´on que asocie a cada estado una palabra de salida; llamaremos λ a esta funci´on.
Tambi´en vamos a agregar un alfabeto de salida Γ, que puede ser distinto al de entrada. Todos
los dem´as aspectos permanecen igual que en un AFD.
Definici´on.- Una m´aquina de Moore es un s´extuplo (K, Σ, Γ, δ, λ, q0), en donde K, Σ y
δ son como en los AFD, y q0 es el estado inicial; adem´as tenemos a Γ que es el alfabeto de
salida, y λ, que es una funci´on de K a Γ∗
, que obtiene la salida asociada a cada estado; la
salida es una cadena de caracteres tomados de Γ.
Ejemplo.- La siguiente m´aquina de Moore formaliza el diagrama de la figura 2.19(a):
2.7. AUT ´OMATAS FINITOS CON SALIDA 55
K = {q0, q1}, Σ = Γ = {0, 1}, λ(q0) = 0, λ(q1) = 1, y δ est´a tabulada como:
q δ(q, 0) δ(q, 1)
q0 q1 q0
q1 q1 q0
La salida de una m´aquina de Moore M ante una entrada a1 . . . an es la concatenaci´on de
λ(q0) λ(q1) . . . λ(qn), donde qi = δ(qi−1, ai), ai ∈ Σ, para 1 ≤ i ≤ n.
2.7.2. M´aquinas de Mealy
En las m´aquinas de Mealy la salida producida depende de la transici´on que se ejecuta, y
no solamente del estado. Por esto, en la notaci´on gr´afica las etiquetas de las flechas son de
la forma σ/w, donde σ es el caracter que se consume de entrada, y w es la palabra que se
produce en la salida. Por ejemplo, el diagrama para el inversor binario, implementado como
m´aquina de Mealy, se presenta en la figura 2.19(b).
Para formalizar las m´aquinas de Mealy, una idea podr´ıa ser aumentarle a las transiciones
la palabra producida en la salida. Sin embargo, por modularidad se prefiere definir una
funci´on de salida λ, pero que, a diferencia de las m´aquinas de Moore, ahora toma como
entrada un estado y un caracter de entrada. En efecto, podemos darnos cuenta de que es lo
mismo que la salida dependa del estado y un caracter, a que dependa de una transici´on. 15
Definici´on.- Una m´aquina de Mealy es un s´extuplo (K, Σ, Γ, δ, λ, q0), en el que todos los
componentes tienen el mismo significado que arriba, a excepci´on de λ, que es una funci´on
λ : K × Σ → Γ∗
, esto es, toma un elemento de K × Σ –que incluye un estado y un caracter
de entrada– y produce una palabra formada por caracteres de Γ.
Ejemplo.- El inversor de Mealy de la figura 2.19(b) se puede representar formalmente de
la siguiente forma:
K = {q0}, Σ = {0, 1}, δ(q0) = q0, y λ(q0, 1) = 0, λ(q0, 0) = 1.
La salida de una m´aquina de Mealy ante una entrada a1 . . . an es λ(q0, a1) λ(q1, a2) . . .
λ(qn−1, an), donde qi = δ(qi−1, ai), para 1 ≤ i ≤ n.
Obs´ervese que, a diferencia de las m´aquinas de Moore, en las m´aquinas de Mealy la salida
depende de la entrada, adem´as de los estados. Podemos imaginar que asociamos la salida a
las transiciones, m´as que a los estados.
Los criterios para dise˜nar tanto m´aquinas de Moore como de Mealy son b´asicamente los
mismos que para cualquier otro AFD, por lo que no presentaremos aqu´ı m´etodos especiales
15
Esto suponiendo que no hay varias transiciones distintas entre dos mismos estados.
56 CAP´ITULO 2. AUT ´OMATAS FINITOS
x f f(x)
Figura 2.20: Funci´on como “caja negra”
de dise˜no.
2.7.3. Equivalencia de las m´aquinas de Moore y Mealy
Aunque muchas veces, para un mismo problema, la m´aquina de Mealy es m´as simple que
la correspondiente de Moore, ambas clases de m´aquinas son equivalentes. Si despreciamos la
salida de las m´aquinas de Moore antes de recibir el primer caracter (o sea, con entrada ε), es
posible encontrar, para una m´aquina de Moore dada, su equivalente de Mealy, en el sentido
de que producen la misma salida, y viceversa.
La transformaci´on de una m´aquina de Moore en m´aquina de Mealy es trivial, pues hace-
mos λMealy(q, a) = λMoore(δMoore(q, a)), es decir, simplemente obtenemos qu´e salida pro-
ducir´a una transici´on de Mealy viendo la salida del estado al que lleva dicha transici´on en
Moore. Por ejemplo, la m´aquina de Mealy de la figura 2.19(b) se puede transformar de esta
manera a la m´aquina de Moore que aparece en la figura 2.19(c).
La transformaci´on de una m´aquina de Mealy en Moore es m´as complicada, pues en
general hay que crear estados adicionales; remitimos al alumno a la referencia [7].
2.7.4. C´alculo de funciones en AF
Ya que las m´aquinas de Mealy y de Moore pueden producir una salida de caracteres dada
una entrada, es natural aplicar dichas m´aquinas al c´alculo de funciones, donde la funci´on es
vista como una forma de relacionar una entrada, que es una palabra de un cierto alfabeto Σ,
con una salida, que es otra palabra formada por caracteres del alfabeto de salida Γ. Podemos
as´ı ver una funci´on como una “caja negra”, como se ilustra en la figura 2.20, que a partir
del argumento x entrega un resultado f(x).
Ejemplo.- Representamos los n´umeros naturales en el sistema unario, es decir, 3 es 111,
5 es 11111, etc. Queremos una m´aquina de Mealy que calcule la funci´on f(x) = x + 3. Esta
m´aquina est´a ilustrada en la figura 2.21(a). En efecto, al recibirse el primer caracter, en la
salida se entregan cuatro caracteres; en lo subsecuente por cada caracter en la entrada se
entrega un caracter en la salida, hasta que se acabe la entrada. Debe quedar claro que los
tres caracteres que le saca de ventaja la salida al primer caracter de entrada se conservan
hasta el final de la entrada; de este modo, la salida tiene siempre tres caracteres m´as que la
entrada, y en consecuencia, si la entrada es x, la salida ser´a x + 3.
2.7. AUT ´OMATAS FINITOS CON SALIDA 57
(a) f(x) = x + 3 (b) Funci´on f(x) = 2x
Figura 2.21: Funciones aritm´eticas en Mealy
(a) f(x) = 2x + 3 (b) f(x) = nx + m
Figura 2.22: Funciones lineales en Mealy
Ser´ıa interesante ver si los AF pueden calcular funciones aritm´eticas m´as complejas que
la simple suma de una constante. Por ejemplo, ¿se podr´a multiplicar la entrada en unario
por una constante?
La respuesta es s´ı. El AF de la figura 2.21(b) entrega una salida que es la entrada
multiplicada por dos. Aun m´as, el AF de la figura 2.22(a) calcula la funci´on f(x) = 2x + 3.
Estos resultados pueden ser generalizados para mostrar que una m´aquina de Mealy puede
calcular cualquier funci´on lineal. En efecto, el esquema de AF de la figura 2.22(b) muestra
c´omo calcular una funci´on f(x) = nx + m.
Cerca del final de este texto veremos que un AF no puede calcular funciones mucho m´as
complejas que las que hemos visto; ni siquiera pueden calcular la funci´on f(x) = x2
.
Formalizaci´on del c´alculo de funciones
Decimos que una m´aquina M calcula una funci´on f : Σ∗
→ Σ∗
si dada una entrada
x ∈ Σ∗
la concatenaci´on de los caracteres que entrega a la salida es y ∈ Σ∗
, donde y = f(x).
La definici´on anterior puede ser formalizada en t´erminos de las configuraciones y del paso
de una configuraci´on a otra. En efecto, la “concatenaci´on de los caracteres a la salida” puede
ser tomada en cuenta en la configuraci´on, a˜nadiendo a ´esta un argumento adicional en el
que se vaya “acumulando” la salida entregada. Esto nos lleva a una definici´on modificada de
configuraci´on.
Definici´on.- Una configuraci´on de una m´aquina de Mealy (K, Σ, Γ, δ, λ, s) es una tripleta
58 CAP´ITULO 2. AUT ´OMATAS FINITOS
abbab
a,ba,b
21
Figura 2.23: AFN para palabras que contienen abbab
[[q, α, β]] ∈ K × Σ∗
× Γ∗
, donde q es el estado en que se encuentra el AF, α es lo que resta
por leer de la palabra, y β es lo que se lleva acumulado a la salida.
De este modo el funcionamiento del aut´omata que permite concatenar caracteres a la sal-
ida se define de una manera muy simple, utilizando la relaci´on del paso de una configuraci´on
a otra, escrita “ ”, como sigue:
Definici´on.- [[p, σu, v]] [[q, u, vξ]] si q = δ(p, σ) y ξ = λ(q, σ).
Por ejemplo, dado el AF de Mealy de la figura 2.19(b), tenemos que [[q0, 101, 0]]
[[q0, 01, 00]].
Utilizando la cerradura transitiva y reflexiva de la relaci´on “ ”, que se denota por “ ∗
”,
podemos definir formalmente la noci´on de funci´on calculada:
Definici´on.- Una m´aquina M = (K, Σ, Γ, δ, λ, s) calcula una funci´on f : Σ∗
→ Σ∗
si dada
una entrada x ∈ Σ∗
, se tiene:
[[s, x, ε]] ∗
[[q, ε, y]]
donde q ∈ K, siempre que y = f(x).
Por ejemplo, para el AF de Mealy de la figura 2.19(b), se pasa de una configuraci´on inicial
[[q0, 1101, ε]] a una configuraci´on final [[q0, ε, 0010]] en cuatro pasos, lo que quiere decir que
la funci´on que calcula –sea f– es tal que f(1101) = 0010.
2.8. Aut´omatas finitos no deterministas
Una extensi´on a los aut´omatas finitos deterministas es la de permitir que de cada nodo
del diagrama de estados salga un n´umero de flechas mayor o menor que |Σ|. As´ı, se puede
permitir que falte la flecha correspondiente a alguno de los s´ımbolos del alfabeto, o bien que
haya varias flechas que salgan de un s´olo nodo con la misma etiqueta. Inclusive se permite
que las transiciones tengan como etiqueta palabras de varias letras o hasta la palabra vac´ıa. A
estos aut´omatas finitos se les llama no determin´ısticos o no deterministas (abreviado AFN),
por razones que luego veremos.
Al retirar algunas de las restricciones que tienen los aut´omatas finitos determin´ısticos, su
dise˜no para un lenguaje dado puede volverse m´as simple. Por ejemplo, un AFN que acepte
2.8. AUT ´OMATAS FINITOS NO DETERMINISTAS 59
las palabras en {a, b} que contienen la subcadena abbab se ilustra en la figura 2.23.
Hacemos notar en este punto que, dado que los AFN tienen menos restricciones que los
AFD, resulta que los AFD son un caso particular de los AFN, por lo que todo AFD es de
hecho un AFN. 16
Hasta aqu´ı s´olo vemos ventajas de los AFN sobre los AFD. Sin embargo, en los aut´omatas
no determin´ısticos se presenta una dificultad para poder saber qu´e camino tomar a partir
de un estado dado cuando se presenta un s´ımbolo, pues puede haber varias opciones. Por
ejemplo, tomando el aut´omata de la figura 2.23, si se nos presenta una palabra como abbaba,
no sabremos si tomar la transici´on del estado 1 al 2, gastando abbab, y ya en 2 gastar a, o
bien gastar en 1 todas las letras de la palabra de entrada, siguiendo las transiciones de 1 a
s´ı mismo. El problema en este ejemplo es particularmente grave porque en uno de los casos
se llega a un estado final y en el otro no. Veremos m´as adelante c´omo enfrentar este tipo de
situaciones.
Adem´as, puede ocurrir que, estando en un nodo n, y habiendo un s´ımbolo de entrada a,
no exista ninguna flecha que salga de n con etiqueta a (esto no ocurre en el ejemplo de la
figura 2.23).
Estas diferencias con los AFD se deben reflejar en la definici´on formal de los AFN, como
se hace en seguida.
2.8.1. Representaci´on formal de los AFN
Definici´on.- Un aut´omata finito no determinista es un qu´ıntuplo (K, Σ, ∆, s, F) donde
K, Σ, s y F tienen el mismo significado que para el caso de los aut´omatas determin´ısticos,
y ∆, llamado la relaci´on de transici´on, es un subconjunto finito de K × Σ∗
× K.
Por ejemplo, el AFN de la figura 2.23 quedar´ıa representado matem´aticamente por el
siguiente qu´ıntuplo:
({1, 2}, {a, b}, {(1, a, 1), (1, b, 1), (1, abbab, 2), (2, a, 2), (2, b, 2)}, 1, {2})
El punto esencial es que ∆ es una relaci´on, no una funci´on. Obs´ervese tambi´en que el
segundo elemento de la relaci´on de transici´on es una palabra, no un caracter del alfabeto.
Esto significa que cada tripleta (q1, w, q2) ∈ ∆, que es una transici´on representada como una
flecha de etiqueta w en el diagrama de estados, permite pasar de q1 a q2 “gastando” en la
entrada una subcadena w. 17
Vamos a definir la noci´on de palabra aceptada en t´erminos de la representaci´on gr´afica
16
Sin embargo, la representaci´on formal de los AFN no es id´entica a la de los AFD.
17
N´otese que w puede ser la palabra vac´ıa.
60 CAP´ITULO 2. AUT ´OMATAS FINITOS
de los aut´omatas no determin´ısticos.
Definici´on.- Una palabra w es aceptada por un aut´omata no determin´ıstico ssi existe una
trayectoria en su diagrama de estados, que parte del estado inicial y llega a un estado final,
tal que la concatenaci´on de las etiquetas de las flechas es igual a w. 18
Ejemplo.- Verificar si la palabra baabbaba es aceptada por el AFN de la figura 2.23.
Soluci´on: La palabra baabbaba puede ser dividida en cuatro pedazos, p1 = b, p2 = a, p3 =
abbab, y p4 = a, cuya concatenaci´on produce la palabra original. Ahora bien, podemos seguir
la siguiente secuencia de estados (trayectoria) en el AFN dado:
Estado Cadena que consume Produce estado
1 b 1
1 a 1
1 abbab 2
2 a 2
As´ı probamos que la cadena baabbaba s´ı es aceptada por el aut´omata. Probar que una ca-
dena no es aceptada por un aut´omata no determin´ıstico es m´as dif´ıcil, pues hay que mostrar
que no existe ninguna trayectoria que satisfaga los requisitos; la cantidad de trayectorias
posibles puede ser muy grande como para examinar una por una. En este ejemplo en partic-
ular es posible ver que la cadena ababab no es aceptada por el aut´omata, pues la transici´on
que liga el estado inicial 1 con el final 2 incluye dos b’s seguidas, que no hay en la palabra
dada, por lo que no es posible llegar al estado final y la palabra no podr´a ser aceptada.
2.8.2. Dise˜no de AFN
Como sugerimos al inicio de esta secci´on, en los AFN es posible aplicar m´etodos modulares
de dise˜no, que permiten manejar mejor la complejidad de los problemas. Son estos m´etodos
modulares los que describiremos en esta secci´on. 19
AFN para la uni´on de lenguajes
Si ya contamos con dos AFN, sean M1 y M2, es posible combinarlos para hacer un nuevo
AFN que acepte la uni´on de los lenguajes que ambos aut´omatas aceptaban.
18
Se puede expresar la definici´on de palabra aceptada en t´erminos de la noci´on de configuraci´on (ver
ejercicios).
19
En muchos libros estos temas se agrupan, desde un punto de vista m´as matem´atico que ingenieril, en una
secci´on de “propiedades de los lenguajes regulares”, pero nosotros hemos preferido aplicarlos directamente
a mejorar las habilidades de dise˜no de AFN de los alumnos de computaci´on.
2.8. AUT ´OMATAS FINITOS NO DETERMINISTAS 61
 
¡
¢
£
¤
¥
ε
ε
Figura 2.24: AFN para la uni´on de dos lenguajes
Sean M1 = (K1, Σ1, ∆1, s1, F1) y M2 = (K2, Σ2, ∆2, s2, F2) dos aut´omatas que aceptan
los lenguajes L1, L2. 20
Podemos entonces construir un AFN M3 que acepte L1 ∪ L2 de la
siguiente manera: Sea q un nuevo estado que no est´a en K1 ni en K2. Entonces hacemos un
aut´omata M3 cuyo estado inicial es q, y que tiene transiciones vac´ıas de q a s1 y a s2. Esta
simple idea le permite escoger en forma no determinista entre irse al aut´omata M1 o a M2,
seg´un el que convenga: si la palabra de entrada w est´a en L1, entonces escogemos irnos a
M1,,,,, y similarmente a M2 para L2.
Formalmente M3 = (K1 ∪ K2 ∪ {q}, Σ1 ∪ Σ2, ∆1 ∪ ∆2 ∪ {(q, ε, s1), (q, ε, s2)}, q, F1 ∪ F2).
En la figura 2.24 se representa gr´aficamente M3.
Ejemplo.- Dise˜nar un aut´omata no determinista que acepte las palabras sobre {a, b} que
tengan un n´umero par de a o que terminen en bb.
Soluci´on.- En la figura 2.25(a) se presenta un AFN que acepta las palabras que con-
tienen un n´umero par de a’s, y en 2.25(b) otro que acepta las palabras que terminan en bb.
Finalmente, en 2.25(c) est´a el AFN que acepta el lenguaje dado.
AFN para la concatenaci´on de lenguajes
Similarmente al caso anterior, sean M1 = (K1, Σ1, ∆1, s1, F1) y M2 = (K2, Σ2, ∆2, s2, F2)
dos aut´omatas que aceptan los lenguajes L1, L2 respectivamente. Podemos entonces construir
un AFN M3 que acepte L1L2 de la siguiente manera: A˜nadimos unas transiciones vac´ıas que
van de cada uno de los estados finales de M1 al estado inicial de M2; tambi´en se requiere
que los estados finales de M1 dejen de serlo.
Formalmente M3 = (K1 ∪ K2, Σ1 ∪ Σ2, ∆1 ∪ ∆2 ∪ {(p, ε, s2)|p ∈ F1}, s1, F2)
El funcionamiento de M3 es como sigue: cuando se recibe una palabra w = w1w2, w1 ∈ L1,
w2 ∈ L2, entonces se empieza procesando w1 exactamente como lo har´ıa M1, hasta llegar
20
Sin p´erdida de generalidad podemos suponer que K1 y K2 son disjuntos.
62 CAP´ITULO 2. AUT ´OMATAS FINITOS
 
¡
(a) N´umero par de a
q3 q4
a,b
bb
(b) Terminan en bb
q3 q4
bb
a,b
q1
q2
b
ba
a
q0
ε
ε
(c) Combinaci´on de los dos
Figura 2.25: Combinaci´on de AFNs
hasta alguno de los antiguos estados finales de M1; entonces se empieza procesando w2 como
lo har´ıa M2; forzosamente debe ser posible llegar a un estado final de M2, ya que por hip´otesis
M2 acepta w2. En la figura 2.26 se representa M3.
Ejemplo.- Construir un AFN que acepte el lenguaje en {a, b} donde las a’s vienen en
grupos de al menos dos seguidas, y los grupos de a’s que son repeticiones de aaa est´an a
la derecha de los que son repeticiones de aa, como en baabaaa, aaa, baab o baaaaa. Esta
condici´on no se cumple, por ejemplo, en bbaaabaa ni en aaabaaaa.
Soluci´on.- Un AFN, ilustrado en la figura 2.27(a), acepta palabras que contienen b’s y
grupos de aa en cualquier orden. Otro AFN –figura 2.27(b)– acepta un lenguaje similar, pero
con grupos de aaa. La soluci´on es su concatenaci´on, que se presenta en la figura 2.27(c).
2.8. AUT ´OMATAS FINITOS NO DETERMINISTAS 63
 
¡
¢
£
¤
¥
ε
ε
Figura 2.26: AFN para la concatenaci´on de dos lenguajes
b
aa
1
(a)
aaa
b
2
(b)
ε
aa
b
aaa
b
1 2
(c)
Figura 2.27: Concatenaci´on de dos AFN
64 CAP´ITULO 2. AUT ´OMATAS FINITOS
q0 q1
a
ε
b b
a
a
a
a
q2 q3
q4
Figura 2.28: AFN a transformar en AFD
2.8.3. Equivalencia de AFD Y AFN
Los aut´omatas finitos determin´ısticos (AFD) son un subconjunto propio de los no deter-
min´ısticos (AFN), lo que quiere decir que todo AFD es un AFN. 21
Podr´ıa entonces pensarse
que los AFN son “m´as poderosos” que los AFD, en el sentido de que habr´ıa algunos lenguajes
aceptados por alg´un AFN para los cuales no habr´ıa ning´un AFD que los acepte. Sin embargo,
en realidad no sucede as´ı.
Teorema.- Para todo AFN N, existe alg´un AFD D tal que L(N) = L(D).
Este resultado, sorprendente, pero muy ´util, puede probarse en forma constructiva, pro-
poniendo para un AFN c´omo construir un AFD que sea equivalente.
El m´etodo que usaremos para pasar de un AFN a un AFD se basa en la idea de considerar
el conjunto de estados en los que podr´ıa encontrarse el AFN al haber consumido una cierta
entrada.
El m´etodo de los conjuntos de estados
Dado un AFN M, consideremos la idea de mantener un conjunto de estados Qi en los que
ser´ıa posible estar en cada momento al ir consumiendo las letras de una palabra de entrada.
Por ejemplo, consid´erese el AFN de la figura 2.28. Queremos analizar qu´e sucede cuando
este AFN recibe la palabra baaaaab. Para ello, vamos llevando registro de los conjuntos de
estados en los que podr´ıa encontrarse el AFN. Inicialmente, podr´ıa encontrarse en el estado
inicial q0, pero sin “gastar” ning´un caracter podr´ıa estar tambi´en en el estado q1, o sea que el
proceso arranca con el conjunto de estados Q0 = {q0, q1}. Al consumirse el primer caracter,
b, se puede pasar de q0 a q0 o bien a q1 (pasando por el ε), mientras que del q1 s´olo se
puede pasar a q1. Entonces, el conjunto de estados en que se puede estar al consumir la b es
Q1 = {q0, q1}. Y as´ı en adelante. La tabla siguiente resume los conjuntos de estados por los
que se va pasando para este ejemplo:
21
Salvo por el hecho de que δ es una funci´on y ∆ una relaci´on.
2.8. AUT ´OMATAS FINITOS NO DETERMINISTAS 65
Entrada Estados
{q0, q1}
b {q0, q1}
a {q2, q4}
a {q0, q1, q3}
a {q1, q2, q4}
a {q0, q1, q3, q4}
a {q1, q2, q3, q4}
b {q1}
Puesto que el ´ultimo conjunto de estados {q1} incluye a un estado final, se concluye que
la palabra de entrada puede ser aceptada. Otra conclusi´on –mucho m´as ´util que la anterior–
es darse cuenta de que si consideramos a los conjuntos de estados Qi como una especie de
“mega-estados” de cierto aut´omata, entonces hemos estado en realidad siguiendo los pasos
de ejecuci´on de un AFD con “mega-estados”.
Una vez que comprendemos lo anterior, nos damos cuenta de que, si en vez de considerar
una palabra en particular, como fue baaaaab, consideramos cada posible caracter que puede
llegar al estar en un “mega-estado”, entonces podremos completar un AFD, que deber´a ser
equivalente al AFN dado. 22
Para poder ser exhaustivos, necesitamos organizar las entradas
posibles de manera sistem´atica.
Vamos a describir inicialmente el m´etodo sobre un ejemplo. Consid´erese el problema de
transformar a AFD el AFN de la figura 2.28. Vamos a considerar el conjunto de estados del
AFN en los que podr´ıa encontrarse ´este en cada momento. El conjunto inicial de estados
estar´a formado por los estados del AFN de la figura 2.28 en los que se pudiera estar antes
de consumir el primer caracter, esto es, q0 y q1. Dicho conjunto aparece en la figura 2.29(a).
A partir de ah´ı, tras recibir un caracter a, el AFN pudiera encontrarse ya sea en q2 o en
q4, los cuales inclu´ımos en un nuevo conjunto de estados, al que se llega con una transici´on
con a, como se ilustra en la figura 2.29(b); similarmente, a partir del conjunto inicial de
estados {q0, q1} con la letra b llegamos al mismo conjunto {q0, q1}, lo cual se representa con
un “lazo” a s´ı mismo en la figura 2.29(b).
Con este mismo procedimiento se siguen formando los conjuntos de estados; por ejemplo,
a partir de {q2, q4}, con una a se pasa a {q3, q0, q1}. Continuando as´ı, al final se llega al
diagrama de la figura 2.29(c).
Un detalle importante a observar en este procedimiento es que en ocasiones no hay estados
adonde ir; por ejemplo, a partir del conjunto de estados {q2, q4}, con b no llegamos a ning´un
estado. En casos como ´este, consideramos que habr´a una transici´on con b a un nuevo conjunto
de estados vac´ıo, esto es {}, como se aprecia en la figura 2.29(c). Por supuesto, este estado
vac´ıo tendr´a transiciones con a y con b a s´ı mismo.
22
La equivalencia formal se discute m´as adelante.
66 CAP´ITULO 2. AUT ´OMATAS FINITOS
Ahora tomemos una pausa y respiremos hondo. Si nos alejamos del dibujo de manera
que no observemos que son conjuntos de estados, sino que vemos los c´ırculos como estados,
nos daremos cuenta de que ¡hemos construido un AFD!. Unicamente falta determinar cu´ales
de los nuevos estados son finales y cu´ales no. Obviamente, si uno de los conjuntos de estados
contiene un estado final del antiguo AFN, esto muestra que es posible que en ese punto el
AFN hubiera aceptado la palabra de entrada, si ´esta se terminara. Por lo tanto, los estados
finales del nuevo aut´omata ser´an aquellos conjuntos de estados que contengan alg´un estado
final. As´ı, en el AFD de la figura 2.29(d) marcamos los estados finales; adem´as borramos los
estados del antiguo AFN de cada uno de los c´ırculos, y bautizamos cada conjunto de estados
como un estado.
Una transformaci´on inofensiva
Cuando queremos aplicar el m´etodo descrito en los p´arrafos precedentes, una dificultad
que puede presentarse es que algunas flechas del aut´omata tienen como etiquetas palabras de
varias letras, y desde luego no podemos tomar “un pedazo” de una transici´on. Esta situaci´on
se aprecia en el AFN de la figura 2.30. En efecto, si a partir del estado inicial intentamos
consumir la entrada “a”, vemos que no hay una transici´on que permita hacerlo, a´un cuando
hay una transici´on (q0, aa, q1) cuya etiquete empieza con a.
Una soluci´on a esta dificultad es normalizar a 1 como m´aximo la longitud de las palabras
que aparecen en las flechas. Esto puede hacerse intercalando |w| − 1 estados intermedios en
cada flecha con etiqueta w. As´ı, por ejemplo, de la transici´on (q1, aaa, q1) de la figura 2.30,
se generan las transiciones siguientes: (q1, a, q2), (q2, a, q3), (q3, a, q1), donde los estados q2 y
q3 son estados nuevos generados para hacer esta transformaci´on.
Con esta transformaci´on se puede pasar de un AFN cualquiera M a un AFN M equiva-
lente cuyas transiciones tienen a lo m´as un caracter. Esta transformaci´on es “inofensiva” en
el sentido de que no altera el lenguaje aceptado por el AFN. 23
Por ejemplo, para el AFN de la figura 2.30 se tiene el AFN transformado de la figura
2.28.
Formalizaci´on del algoritmo de conversi´on
Vamos ahora a precisar el m´etodo de conversi´on de AFN a AFD con suficiente detalle
como para que su programaci´on en computadora sea relativamente sencilla. Sin embargo,
no vamos a describir el algoritmo en t´erminos de ciclos, instrucciones de asignaci´on, condi-
cionales, etc., que son t´ıpicos de los programas imperativos. M´as bien vamos a presentar un
conjunto de definiciones que capturan los resultados intermedios en el proceso de conversi´on
de AFN a AFD. Estas definiciones permiten programar en forma casi directa el algoritmo
23
Probar que esta transformaci´on preserva la equivalencia (ver ejercicios).
2.8. AUT ´OMATAS FINITOS NO DETERMINISTAS 67
q0
q1
(a)
q0
q1
q2
q4a
b
(b)
q0
q1
q2
q4a
b
q0
q1
q3
a
b
q2
q1
q4
a
b
a,b
q0
q1
q4
q3
a
q1 b
b
q4
b
q3
a
a
b
q2
q1
q4
q3
a a
a
bb
(c)
(d)
Figura 2.29: Transformaci´on de AFN a AFD
68 CAP´ITULO 2. AUT ´OMATAS FINITOS
q0 q1
aaaaa
ε
b b
Figura 2.30: AFN con transiciones de varias letras
q0 q1
a
ε
b b
a
a
q2
q3
q4
ε
b
b
b a
Figura 2.31: AFN con transiciones vac´ıas
de conversi´on, si se utiliza un lenguaje de programaci´on adecuado, preferentemente de tipo
funcional, como por ejemplo Scheme [22].
Vamos a ir presentando las definiciones partiendo de la m´as sencilla, hasta llegar a la
m´as compleja.
Primero introducimos una funci´on transicion(q, σ), que a partir de un estado q y un
caracter dado σ obtiene el conjunto de estados a los que se puede llegar desde q directa-
mente gastando el caracter σ. Por ejemplo, tomando el AFN de la figura 2.31, tenemos que
transicion(q0, b) = {q0, q1}. Similarmente, transicion(q1, b) = {q1}, y transicion(q3, a) = {}.
Se puede definir matem´aticamente de la forma siguiente:
transicion(q, σ) = {p | (q, σ, p) ∈ ∆}
Sin embargo, esta definici´on no toma en cuenta el hecho de que a veces es posible tener
transiciones que no gastan ning´un caracter -aquellas marcadas con ε. As´ı, en la figura 2.28,
se puede pasar de q2 a q0 y luego continuar “gratis” de q0 a q1, por lo que en realidad se tiene
que considerar a q1 como uno de los estados a los que se puede llegar desde {q1, q2} gastando
una a. Por lo tanto, hay que modificar la definici´on anterior.
Vamos a definir una funci´on auxiliar cerr-ε(q) que es el conjunto de estados a los que
se puede llegar desde el estado q pasando por transiciones vac´ıas. Adem´as, si con una tran-
sici´on vac´ıa se llega a otro estado que tambi´en tiene transiciones vac´ıas, hay que continuar
a˜nadiendo a cerr-ε(q) los estados a los que se llegue, hasta que no sea posible a˜nadir nuevos
2.8. AUT ´OMATAS FINITOS NO DETERMINISTAS 69
estados. Por ejemplo, en la figura 2.31, cerr-ε(q1) = {q1, q2, q4}, cerr-ε(q2) = {q2, q4}, y
cerr-ε(q0) = {q0}.
cerr-ε(q) se acostumbra llamar cerradura al vac´ıo porque matem´aticamente es la cer-
radura de q con la relaci´on {(x, y) | (x, ε, y) ∈ ∆}. 24
La funci´on cerr-ε(q) se puede definir como sigue:
Definici´on.- La cerradura al vac´ıo cerr-ε(q) de un estado q es el m´as peque˜no conjunto
que contiene:
1. Al estado q;
2. Todo estado r tal que existe una transici´on (p, ε, r) ∈ ∆, con p ∈ cerr-ε(q).
Es f´acil extender la definici´on de cerradura al vac´ıo de un estado para definir la cerradura
al vac´ıo de un conjunto de estados:
Definici´on.- La cerradura al vac´ıo de un conjunto de estados CERR-ε({q1, . . . , qn}) es
igual a cerr-ε(q1)∪, . . . , ∪ cerr-ε(qn).
Ejemplo.- Sea el AFN de la figura 2.31. Entonces CERR-ε({q1, q3}) = {q1, q2, q3, q4}.
Con la funci´on de cerradura al vac´ıo ya estamos en condiciones de proponer una versi´on de
la funci´on transicion que tome en cuenta las transiciones vac´ıas. Llamaremos a esta funci´on
“transicion-ε”, y la definimos de forma que transicion-ε(q, σ) sea el conjunto de estados a
los que se puede llegar desde q gastando σ, inclusive pasando por transiciones vac´ıas. El
algoritmo es como sigue, para un estado q y un caracter σ:
1. Calcular Q0 = cerr-ε(q)
2. Para cada estado de Q0, obtener transicion(q, σ), y unir todos los conjuntos obtenidos,
dando por resultado un conjunto Q1.
3. transicion-ε(q, σ) = CERR-ε(Q1).
Por ejemplo, tomando la figura 2.31, para calcular transicion-ε(q1, a), los pasos ser´ıan
como sigue:
1. Q0 = {q1, q2, q4}
2. transicion(q1, a) = {q1}, transicion(q2, a) = {q2, q3}, y transicion(q4, a) = {}, por lo
que uniendo estos conjuntos, Q1 = {q1, q2, q3}.
24
Consultar la definici´on de cerradura de una relaci´on en el cap´ıtulo de preliminares.
70 CAP´ITULO 2. AUT ´OMATAS FINITOS
3. transicion-ε(q1, a) = CERR-ε({q1, q2, q3}) = {q1, q2, q3, q4}.
Como ´ultima definici´on, es directo extender la funci´on transicion-ε(q, σ), que se apli-
ca a un estado y un caracter, a una funci´on que se aplique a un conjunto de estados y
un caracter; llamamos a esta funci´on TRANSICION -ε(Q, σ), para un conjunto de estados
Q y un caracter σ. Simplemente aplicamos transicion-ε(q, σ) para cada uno de los esta-
dos q ∈ Q, y juntamos los resultados en un solo conjunto. Por ejemplo, en la figura 2.31
TRANSICION -ε({q0, q2}, a) = {q0, q2, q3, q4}.
Finalmente resumimos el proceso global de transformaci´on de un AFN a un AFD en el
siguiente algoritmo.
Algoritmo de transformaci´on AFN – AFD:
Dado un AFN (K, Σ, ∆, s, F), un AFD equivalente se obtiene por los siguientes pasos:
1. El conjunto de estados inicial es cerr-ε(s).
2. El alfabeto del AFD es el mismo del AFN.
3. Para cada conjunto de estados Q ya presente, hacer:
a) A˜nadir el conjunto de estados TRANSICION -ε(Q, σ) para cada caracter σ del
alfabeto, si no ha sido creado a´un.
b) A˜nadir transiciones ((Q, σ), Qσ) para cada conjunto de estados Qσ creado en el
paso anterior.
4. Los conjuntos de estados que contengan un estado en F ser´an finales.
Recu´erdese que lo que llamamos “conjunto de estados” en el algoritmo se refiere a con-
junto de estados del AFN original, pero que ser´an simplemente estados en el AFD que se
est´a creando.
Ahora bien, se supone que el AFD que hemos construido acepta el mismo lenguaje que el
AFN original. Para garantizar la infalibilidad del procedimiento descrito falta a´un justificar
los siguientes puntos:
1. El procedimiento de construcci´on del AFD termina siempre
2. El grafo es un AFD
3. El AFD as´ı construido acepta el mismo lenguaje que el AFN original.
2.8. AUT ´OMATAS FINITOS NO DETERMINISTAS 71
La construcci´on de este grafo tiene que acabarse en alg´un momento, porque la cantidad
de nodos est´a limitada a un m´aximo de 2|K|
, donde K son los estados del AFN (¿Porqu´e?).
El segundo punto se justifica dando la definici´on completa del AFD: (KD, Σ, δD, sD, FD),
donde:
Cada elemento de KD es uno de los conjuntos de estados que aparecen en el grafo;
El alfabeto Σ es el mismo que el del AFN original;
Hay una tripleta (p, σ, q) en δD y s´olo una por cada flecha con etiqueta σ que va del
conjunto de estados p al conjunto q ;
El estado inicial sD del AFD es igual a cerr-ε(s), donde s es el estado inicial del AFN;
FD es el conjunto de conjuntos de estados tales que en ellos aparece al menos un estado
final del AFN.
Finalmente, queda pendiente probar que el AFD (que llamaremos D) acepta el mismo
lenguaje que el AFN original N = (K, Σ, ∆, s, F). 25
Esta prueba se puede dividir en dos
partes:
L(N) ⊆ L(D). Si una palabra w = σ0σ1 . . . σn, σi ∈ Σ ∪{ε}, es aceptada por N, entonces
existe una secuencia estados q0, q1, . . . , qn+1, por los que pasa N en el c´alculo:
[[q0, σ0σ1 . . . σn]] [[q1, σ1 . . . σn]] . . . [[qn, σn]] [[qn+1, ε]]
Esta misma secuencia de estados puede seguirse en D, de la manera siguiente (vamos a
denotar con Q may´usculas los “estados” de D):
Iniciamos el recorrido de N en q0 –su estado inicial– y el recorrido de D en cerr-ε(q0),
que es el estado inicial de D. Hay dos posibilidades:
1. Si en N estamos en un estado q ∈ K –que aparece en Q ∈ KD – y se presenta una
transici´on vac´ıa de q a q , en D vamos a permanecer en Q, que va a contener tanto a
q como a q .
2. Si en N estamos en un estado q ∈ K que aparece en Q ∈ KD, y de q pasamos a qσ con
el caracter σ, entonces en D pasamos a Qσ = TRANSICION -ε(QD, σ), que va a ser
un “estado” de D que va a contener a qσ (¿Porqu´e?).
25
Se supone que N ya sufri´o la “transformaci´on inofensiva” definida el la p´agina 66.
72 CAP´ITULO 2. AUT ´OMATAS FINITOS
Siguiendo este procedimiento, cuando la palabra de entrada se acaba al final del c´alculo,
en una configuraci´on [[qf , ε]], qf ∈ K, habremos llegado en D a un estado Qf ∈ KD que debe
contener a qf , y que por ello es estado final, aceptando as´ı la palabra de entrada.
L(D) ⊆ L(N). Se puede seguir el procedimiento inverso al del punto anterior para re-
construir, a partir de un c´alculo que acepta w en D, la secuencia de estados necesaria en N
para aceptar w. Los detalles se dejan como ejercicio. QED
2.8.4. M´as dise˜no de AFN: Intersecci´on de lenguajes
Los problemas de dise˜no de AFN en que se combinan dos condiciones que se deben cumplir
simult´aneamente son particularmente dif´ıciles de resolver. Un ejemplo de estos problemas
ser´ıa: “obtener un AFN que acepte las palabras que contengan la cadena abb un n´umero
impar de veces y ba un n´umero par de veces”.
En los m´etodos de dise˜no de AFD propusimos trabajar con grupos de estados, y desde
luego esto es aplicable tambi´en a los AFN. Sin embargo, ser´ıa a´un mejor contar con un
m´etodo modular que nos permitiera combinar de una manera sistem´atica las soluciones
parciales para cada una de las condiciones. Ahora bien, esto es posible, si consideramos la
siguiente propiedad de la intersecci´on de conjuntos:
L1 ∩ L2 = (Lc
1 ∪ Lc
2)c
Esta f´ormula sugiere un procedimiento pr´actico para obtener un AFN que acepte la
intersecci´on de dos lenguajes dados. Esto se ilustra en el siguiente ejemplo.
Ejemplo.- Obtener un AF para el lenguaje en el alfabeto {a, b} en que las palabras son de
longitud par y adem´as contienen un n´umero par de a’s. Este problema parece bastante dif´ıcil,
pero se vuelve f´acil utilizando la f´ormula de intersecci´on de lenguajes. En efecto, empezamos
calculando los AFD para los lenguajes que cumplen independientemente las dos condiciones.
El AFD M1 de la figura 2.32(a) acepta las palabras de longitud par, mientras que M2 de
2.32(b) acepta las palabras con un n´umero par de a’s.
Ahora obtenemos los AFD que aceptan el complemento de los lenguajes de M1 y M2,
cambiando los estados finales por no finales y viceversa; sean MC
1 y MC
2 .
Es muy importante notar que s´olo es posible complementar AFD’s y no cualquier AFN.
En efecto, si en un AFN simplemente cambiamos estados finales por no finales y viceversa, en
general llegaremos a un resultado err´oneo (esto es, el aut´omata resultante no es equivalente
al original). 26
26
Verif´ıquese esto tratando de hacer directamente la complementaci´on del AFN
({1}, {a, b}, {(1, a, 1)}, 1, {1}), el cual originalmente acepta las palabras con a’s, pero al cambiar fi-
nales por no finales ya no acepta ninguna palabra, en vez de aceptar las palabras con b’s, como podr´ıamos
2.9. EJERCICIOS 73
q q1
a,b
a,b
0
(a)
q q
a
a
b b
2 3
(b)
q q0 1
a,b
a,b
q
a
a
b b
3
q4
ε
ε
q2
(c)
q q
qq
5 6
7 8
a
a
b b b b
a
a
(d)
Figura 2.32: Intersecci´on de dos AFN
Combinamos estos aut´omatas utilizando el procedimiento para la uni´on de lenguajes,
dando un AFN M3 (figura 2.32(c)), el cual es convertido a un AFD M4. Finalmente, este
AFD es simplificado y “complementado”, dando MC
4 (figura 2.32(d)), que es el aut´omata
buscado.
2.9. Ejercicios
1. Trazar un diagrama de estados y eventos que modele:
a) El paso de una persona de un estado civil a otro: considere al menos los estados
civiles “soltero”, “casado”, “divorciado”, “viudo”. Considere al divorcio como un
proceso con duraci´on (no instant´aneo).
b) El proceso de conexi´on de una terminal a un servidor Unix, desde el punto de
vista del usuario (esto es, recibir mensaje pidiendo nombre de usuario, suministrar
nombre de usuario, recibir petici´on de “password”, etc.).
c) El proceso de retiro de dinero en un cajero autom´atico.
haber supuesto.
74 CAP´ITULO 2. AUT ´OMATAS FINITOS
2. Dise˜nar directamente 27
AFD’s que acepten los siguientes lenguajes; para cada ejemplo,
establecer claramente lo que “recuerda” cada estado antes de trazar las transiciones.
Escribir adem´as cada AFD resultante usando la notaci´on formal.
a) Las palabras en {a, b} que contienen un n´umero par de a.
b) Las palabras del lenguaje en {0, 1} con a lo m´as un par de unos consecutivos.
c) las palabras del lenguaje en {a, b} que tienen un n´umero impar de ocurrencias de
la subcadena ab.
3. Dise˜nar usando el m´etodo del complemento un AFD que acepte las palabras en {a, b}
que no inicien con abab.
4. Utilizar el m´etodo de los grupos de estados (“nubes”) para dise˜nar directamente (sin
pasar por AFN) AFD’s para los siguientes lenguajes:
a) lenguaje en {0, 1} donde las palabras no contienen la subcadena 11 pero s´ı 00.
b) lenguaje en {a, b} donde las palabras son de longitud par y tienen un n´umero par
de a.
c) lenguaje en {a, b} donde las palabras que contienen aba terminan en bb.
5. Minimizar cada uno de los AFD’s del problema anterior:
a) Por eliminaci´on de estados redundantes, usando la tabla.
b) Por clases de equivalencia.
6. Se puede usar el algoritmo de minimizaci´on para comparar dos AFD M1 y M2: dos
AFD son equivalentes ssi sus AFD m´ınimos son iguales. Aqu´ı la igualdad de M1 y
M2 se entiende en cuanto a la estructura de los AFD, pero los nombres de los estados
pueden ser diferentes.
7. Para simplificar un aut´omata M = (K, Σ, δ, s, F), que tiene dos estados equivalentes
qi, qk ∈ K, se quiere eliminar uno de ellos, sea qk. Definir formalmente cada uno de
los componentes del aut´omata M , en que se ha eliminado de M el estado qk. Poner
especial cuidado en definir las transiciones en M .
8. Calcular en detalle los aut´omatas M1, M2 y M3 del ejemplo de la secci´on 2.4.2.
9. En comunicaciones digitales, la derivada de un tren de pulsos, p.ej. “0011100”, es una
se˜nal que tiene “1” en las cifras que cambian, y “0” en las que permanecen constantes,
como “0010010” para el ejemplo. Dise˜ne un aut´omata de Moore para obtener la deriva-
da de la entrada.
10. Dise˜nar un aut´omata de Mealy o de Moore que recibe un flujo de “1” y “0”, y cada
vez que recibe una secuencia “11” la reemplaza por “00”.
27
Aqui “directamente” quiere decir que no se haga por transformaci´on de otro tipo de soluciones, tales
como las AFN.
2.9. EJERCICIOS 75
11. Decimos que los lenguajes de dos AFD son “casi iguales” si difieren ´unicamente en
una palabra. Dados M1 y M2, un procedimiento para decidir si L(M1) es casi igual a
L(M2) consiste en:
a) Hacer la comparaci´on de M1 y M2, y detectar una palabra aceptada por M1 pero
no por M2, sea w.
b) Hacer un AFN que acepte ´unicamente w, sea Mw.
c) Combinar M2 con Mw, dando un AFN M2 que acepta L(M2) ∪ {w}
d) Convertir M2 a AFD, dando M2
e) Comparar M2 con M1.
Pruebe la receta anterior con los AFD siguientes:
a) M1 = ({1, 2}, {a, b}, {((1, a), 2)((1, b), 2), ((2, a), 2), ((2, b), 2)}, 1, {1})
b) M2 = ({3, 4, 5}, {a, b}, {((3, a), 4), ((3, b), 5), ((4, a), 5), ((4, b), 5), ((5, a), 5), ((5, b), 5)},
3, {4})
12. Decimos que dos AFD M1 y M2 son iguales –atenci´on: no “equivalentes”– si s´olo difieren
eventualmente en el nombre de los estados. Definir formalemente la igualdad de AFDs
como una relaci´on de isomorfismo entre los estados de ambos.
13. Definir “lenguaje aceptado” para los AFN en t´erminos de las configuraciones y del
paso de una configuraci´on a otra.
14. Dada la representaci´on formal de un AFD (K, Σ, δ, s, F), obtener la representaci´on
formal de un AFN tal que los diagramas de ambos sean id´enticos (esto es, hacer los
ajustes necesarios para poder considerar al AFD como AFN).
15. Sean dos aut´omatas finitos no deterministas AFN1 y AFN2
a) ¿C´omo es posible determinar si el lenguaje que acepta AFN1 es subconjunto del
que acepta AFN2? Justifique su respuesta. Ayuda: Utilizar la propiedad de los
conjuntos A ⊆ B ssi A ∪ B = B.
b) Aplicar el procedimiento anterior para determinar si los AFN siguientes aceptan
o no lenguajes complementarios:
1) ({1, 2}, {a, b}, {(1, a, 1), (1, b, 1), (1, aa, 2), (2, a, 2), (2, b, 2)}, 1, {2})
2) ({1, 2, 3}, {a, b}, {(1, a, 2), (1, b, 1), (2, a, 3), (2, b, 1), (3, a, 3), (3, b, 3)}, 1, {1, 2})
16. Probar que al reemplazar toda transici´on (p, uv, q) por (p, u, i) y (i, v, q), creando un
nuevo estado no final i, el AFN seguir´a aceptando todas las palabras que aceptaba antes
de hacer la transformaci´on. (Sugerencia: hay que examinar los c´alculos que permit´ıan
aceptar una palabra antes de la transformaci´on, y mostrar que en el AFN transformado
debe haber un c´alculo modificado que permite aceptar la misma palabra).
76 CAP´ITULO 2. AUT ´OMATAS FINITOS
17. Suponga una variante de los aut´omatas finitos, los aut´omatas con aceptaci´on (AA), en
que, adem´as de los estados finales, hay estados de aceptaci´on, tales que si el aut´omata
pasa por uno de ellos, aunque sea una vez, la palabra ser´a aceptada, independiente-
mente del tipo de estado al que se llegue al agotar la palabra.
a) Dibuje un AA que acepte las palabras sobre {a, b} que comienzan por “bb” o
terminan con “aaa”. (Marque los estados de aceptaci´on por nodos ⊕).
b) Defina formalmente los AA, as´ı como la noci´on de lenguaje aceptado por un
AA, usando para ello la relaci´on entre configuraciones C1 C2. (Evite en sus
definiciones el uso de “. . . ”).
c) Pruebe que los AA son equivalentes a los AF, dando un procedimiento para con-
struir un AF a partir de cualquier AA dado.
d) Pruebe su procedimiento del inciso anterior transformando el AA del primer inciso
a AF.
18. Suponga otra variante de los aut´omatas finitos deterministas, los aut´omatas con rec-
hazo (AR), en que, adem´as de los estados finales, hay estados de rechazo, tales que si
el aut´omata pasa por uno de ellos, aunque sea una vez, la palabra es rechazada, inde-
pendientemente de que al final se llegue o no a un estado final o de rechazo. Se supone
que si no se pasa por un estado de rechazo, la aceptaci´on de una palabra depende de
que al final se llegue a un estado final.
a) Dibuje un AR que acepte las palabras sobre {a, b} que no contengan las cadenas
“abaab” ni “abba”. Marque los estados de rechazo por nodos ⊗.
b) Defina formalmente los AR, as´ı como la noci´on de lenguaje aceptado por un
AR, usando para ello la relaci´on entre configuraciones C1 C2. (Evite en sus
definiciones el uso de “. . . ” ).
19. Un aut´omata finito casi determinista (AFCD) es un AFN en el cual nunca hay la posi-
bilidad de elegir entre dos caminos a tomar. Los AFCD son de hecho una abreviatura
de los AFD, donde se omiten los “infiernos”, y se pueden incluir varios caracteres en
un arco. Un ejemplo de AFCD est´a en la siguiente figura 2.33. ¿Es posible probar que
q10q
bab
a b
Figura 2.33: Ejemplo de AFCD
un AFN dado es AFCD? Si es as´ı, proponga un m´etodo sistem´atico para probarlo.
20. Suponga unos aut´omatas no deterministas con salida (AFNDS), en que las flechas son
de la forma “w/y”, donde “w” y “y” son palabras formadas respectivamente con el
alfabeto de entrada y de salida (pueden ser la palabra vac´ıa).
2.9. EJERCICIOS 77
a) Defina formalmente los AFNDS.
b) Defina formalmente la noci´on de funci´on calculada.
c) Se dice que un AFNDS es “confluente” cuando la salida obtenida es la misma
independientemente de qu´e trayectoria se siga cuando haya varias opciones.
1) Pruebe que todo aut´omata de Mealy, visto como AFNDS, es confluente.
2) ¿Es posible decidir si un AFNDS es confluente? Pruebe su respuesta pro-
poniendo un procedimiento para decidir, o mostrando porqu´e es imposible.
21. Un estado “q” de un AFD es “inaccesible” si no hay ninguna trayectoria que, partiendo
del estado inicial, llegue a “q”. Esta, sin embargo, no es una definici´on formal.
a) Definir formalmente cu´ando un estado “q” es inaccesible, utilizando para ello la
relaci´on de paso entre configuraciones.
b) Proponer un procedimiento para obtener el conjunto de los estados accesibles en
un AFD. (Ayuda: considerar c´omo evoluciona el conjunto de “estados accesibles”
ante posibles transiciones).
22. Decimos que un AFN “se traba” cuando no hay una transici´on que indique adonde ir
ante el s´ımbolo de entrada. Pruebe que es posible/no es posible saber, dado un AFN
M en particular, si M podr´ıa o no “trabarse” para alguna palabra w (proponga un
m´etodo de decisi´on).
23. Para una palabra w, un sufijo de w es cualquier subcadena s con que termina w, es
decir zs = w, tal que w, z, s ∈ Σ∗
. Si L es un lenguaje, Sufijo(L) es el conjunto de
sufijos de las palabras de L. Demuestre que si hay un AFN que acepte R, Sufijo(R)
tambi´en es aceptado por alg´un AFN.
24. Hemos visto que es posible dise˜nar modularmente un AFN que acepte la intersecci´on
de los lenguajes aceptados por M1 y M2. ¿Ser´a tambi´en posible combinar M1 y M2 de
manera que obtengamos un AFN que acepte la diferencia L1 − L2 de sus lenguajes?
Proponga un m´etodo para hacerlo.
25. ¿Es regular el reverso de un lenguaje regular? (El reverso de una palabra σ1σ2 . . . σn es
σn . . . σ1).
26. Consideremos el problema de saber si el lenguaje aceptado por un AFD M es vac´ıo o
no lo es.
a) Una primera idea ser´ıa simplemente verificar si el conjunto de estados finales es
vac´ıo ¿Porqu´e no funciona esta idea ?
b) Proponer un procedimiento que permita decidir si L(M) = ∅ (Ayuda: Utilizar la
comparaci´on de aut´omatas).
c) Aplicar el procedimiento de (b) para verificar si el lenguaje del siguiente AFD
M es vac´ıo: ({1, 2, 3}, {a, b}, {((1, a), 2), ((1, b), 1), ((2, a), 2), ((2, b), 1), ((3, a), 2),
((3, b), 1)}, 1, {3})
27. Probar el lema de la secci´on 2.6.
78 CAP´ITULO 2. AUT ´OMATAS FINITOS
Cap´ıtulo 3
Expresiones Regulares y Gram´aticas
Regulares
En este cap´ıtulo estudiaremos la clase de lenguajes aceptados por los AF, la de los
lenguajes regulares, que es al mismo tiempo una de las de mayor utilidad pr´actica. Como se
aprecia en la figura 1.3, los Lenguajes Regulares son los m´as simples y restringidos dentro
de la jerarqu´ıa de Chomsky que presentamos anteriormente. Estos lenguajes pueden adem´as
ser descritos mediante dos representaciones que veremos: las Expresiones Regulares y las
Gram´aticas Regulares.
3.1. Lenguajes Regulares
Los lenguajes regulares se llaman as´ı porque sus palabras contienen “regularidades” o
repeticiones de los mismos componentes, como por ejemplo en el lenguaje L1 siguiente:
L1 = {ab, abab, ababab, abababab, . . .}
En este ejemplo se aprecia que las palabras de L1 son simplemente repeticiones de “ab”
cualquier n´umero de veces. Aqu´ı la “regularidad” consiste en que las palabras contienen “ab”
alg´un n´umero de veces.
Otro ejemplo m´as complicado ser´ıa el lenguaje L2:
L2 = {abc, cc, abab, abccc, ababc, . . .}
La regularidad en L2 consiste en que sus palabras comienzan con repeticiones de “ab”,
79
80 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES
seguidas de repeticiones de “c”. Similarmente es posible definir muchos otros lenguajes basa-
dos en la idea de repetir esquemas simples. Esta es la idea b´asica para formar los lenguajes
Regulares.
Adicionalmente a las repeticiones de esquemas simples, vamos a considerar que los lengua-
jes finitos son tambi´en regulares por definici´on. Por ejemplo, el lenguaje L3 = {anita, lava, la, tina}
es regular.
Finalmente, al combinar lenguajes regulares uni´endolos o concaten´andolos, tambi´en se
obtiene un lenguaje regular. Por ejemplo, L1 ∪ L3 = {anita, lava, la, tina, ab, abab, ababab,
abababab, . . .} es regular. Tambi´en es regular una concatenaci´on como L3L3 = {anitaanita,
anitalava, anitala, anitatina, lavaanita, lavalava, lavala, lavatina, . . .} 1
3.1.1. Definici´on formal de Lenguajes Regulares
Definici´on.- Un lenguaje L es regular si y s´olo si se cumple al menos una de las condiciones
siguientes:
L es finito;
L es la uni´on o la concatenaci´on de otros lenguajes regulares R1 y R2, L = R1 ∪ R2 o
L = R1R2 respectivamente.
L es la cerradura de Kleene de alg´un lenguaje regular, L = R∗
.
Esta definici´on nos permite construir expresiones en la notaci´on de conjuntos que repre-
sentan lenguajes regulares.
Ejemplo.- Sea el lenguaje L de palabras formadas por a y b, pero que empiezan con a,
como aab, ab, a, abaa, etc. Probar que este lenguaje es regular, y dar una expresi´on de
conjuntos que lo represente.
Soluci´on.- El alfabeto es Σ = {a, b}. El lenguaje L puede ser visto como la concatenaci´on
de una a con cadenas cualesquiera de a y b; ahora bien, ´estas ´ultimas son los elementos de
{a, b}∗
, mientras que el lenguaje que s´olo contiene la palabra a es {a}. Ambos lenguajes son
regulares. 2
Entonces su concatenaci´on es {a}{a, b}∗
, que tambi´en es regular.
1
Recu´erdese que la concatenaci´on de dos lenguajes L1 y L2 se define como el conjunto de las palabras
formadas concatenando una de L1 con una de L2, ver secci´on 1.4.2.
2
En efecto, {a} es finito, por lo tanto regular, mientras que {a, b}∗
es la cerradura de {a, b}, que es regular
por ser finito.
3.2. EXPRESIONES REGULARES 81
3.2. Expresiones regulares
La notaci´on de conjuntos nos permite describir los lenguajes regulares, pero nosotros
quisi´eramos una notaci´on en que las representaciones de los lenguajes fueran simplemente
texto (cadenas de caracteres). As´ı las representaciones de los lenguajes regulares ser´ıan sim-
plemente palabras de un lenguaje (el de las representaciones correctamente formadas). Con
estas ideas vamos a definir un lenguaje, el de las expresiones regulares, en que cada palabra
va a denotar un lenguaje regular.
Definici´on.- Sea Σ un alfabeto. El conjunto ER de las expresiones regulares sobre Σ
contiene las cadenas en el alfabeto Σ∪ {“∧”, “+”, “•”, “∗
”, “(”, “)”, “Φ”} que cumplen con
lo siguiente:
1. “∧” y “Φ” ∈ ER
2. Si σ ∈ Σ, entonces σ ∈ ER.
3. Si E1, E2 ∈ ER, entonces “(”E1“+”E2“)” ∈ ER, “(”E1“•”E2“)” ∈ ER, “(”E1“)∗
”
∈ ER.
Las comillas “ ” enfatizan el hecho de que estamos definiendo cadenas de texto, no
expresiones matem´aticas 3
. Es la misma diferencia que hay entre el caracter ASCII “0”, que
se puede teclear en una terminal, y el n´umero 0, que significa que se cuenta un conjunto sin
ning´un elemento.
Ejemplos.- Son ER en {a, b, c} las siguientes: “a”, “((a+b))∗
”, “((a•b)•c)”. No son ER:
“ab”, “((a • b(c)∗
)”.
3.2.1. Significado de las ER
Las ER son simplemente f´ormulas cuyo prop´osito es representar cada una de ellas un
lenguaje. As´ı, el significado de una ER es simplemente el lenguaje que ella representa.
Por ejemplo, la ER “Φ” representa el conjunto vac´ıo {}.
Para comprender intuitivamente la manera en que las ER representan lenguajes, consid-
eremos el proceso de verificar si una palabra dada w pertenece o no al lenguaje representado
por una ER dada. Vamos a decir que una palabra “empata” con una expresi´on regular si es
parte del lenguaje que esta representa.
La palabra vac´ıa ε “empata” con la ER ∧.
3
Este ´ultimo es el caso de las expresiones de conjuntos para describir los conjuntos regulares.
82 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES
Una palabra de una letra como “a” empata con una ER consistente en la misma letra
“a”, “b” empata “b”, etc.
Luego, una palabra w = uv, esto es w est´a formada de dos pedazos u y v, empata con
una expresi´on (U • V ) a condici´on de que u empate con U y v empate con V . Por ejemplo,
abc empata con (a • (b • c)) porque abc puede ser dividida en a y bc, y a empata con a en la
ER, mientras que bc empata con (b • c) separando b y c de la misma manera.
Similarmente, cuando la ER es de la forma (U + V ), puede empatar con una palabra w
cuando esta empata con U o bien cuando empata con V . Por ejemplo, bc empata (a+(b•c)).
Una palabra w empata con una expresi´on U∗
cuando w puede ser partida en pedazos
w = w1w2, . . . de tal manera que cada pedazo wi empata con U. Por ejemplo, caba empata
con (((c + b) • a))∗
porque puede partirse en los pedazos ca y ba, y ambos empatan con
((c + b) • a), lo cual es f´acil de verificar.
A continuaci´on definiremos formalmente la correspondencia entre la representaci´on (una
ER) y el lenguaje representado.
Definici´on.- El significado de una ER es una funci´on L : ER → 2Σ∗
(esto es, una funci´on
que toma como entrada una expresi´on regular y entrega como salida un lenguaje), definida
de la manera siguiente:
1. L(“Φ”) = ∅ (el conjunto vac´ıo)
2. L(“∧”) = {ε}
3. L(“σ”) = {σ}, σ ∈ Σ.
4. L(“(”R“•”S“)” ) = L(R)L(S), R, S ∈ ER
5. L( “(”R“+”S“)” ) = L(R) ∪ L(S), R, S ∈ ER
6. L( “(”R“)∗
” ) = L(R)∗
, R ∈ ER
Para calcular el significado de una ER en particular, se aplica a ella la funci´on L. Las
ecuaciones dadas arriba se aplican repetidamente, hasta que el s´ımbolo L desaparezca.
Ejemplo.- El significado de la ER “(((a + b))∗
• a)” se calcula de la manera siguiente:
L(“(((a + b))∗
• a)”) = L(“((a + b))∗
”)L(“a”) -usando 4,
= L(“(a + b)”)∗
{a} -por 6 y 3,
= (L(“a”) ∪L(“b”))∗
{a} -aplicando 5,
= ({a} ∪ {b})∗
{a} = {a, b}∗
{a} -usando 3 y simplificando.
3.2. EXPRESIONES REGULARES 83
Este es el lenguaje de las palabras sobre {a, b} que terminan en a.
Con objeto de hacer la notaci´on menos pesada, vamos a simplificar las ER de la manera
siguiente:
Omitiremos las comillas “ ”.
Se eliminan los par´entesis innecesarios. Se supone una precedencia de operadores en el
orden siguiente: primero “∗
”, luego “•” y finalmente “+”. Adem´as se supone que los
operadores “•” y “+” son asociativos.
Eventualmente omitiremos el operador “•”, suponiendo que ´este se encuentra impl´ıcito
entre dos subexpresiones contiguas.
Ejemplos.- a, (a + b)∗
, abc, ac∗
son tomados como “a”, “((a + b))∗
”, “((a • b) • c)” y
“(a • (c)∗
)”, respectivamente.
Ejemplo.- Encontrar una expresi´on regular para el lenguaje en {a, b}∗
en el que inmedi-
atamente antes de toda b aparece una a.
Soluci´on.- Una posible ER es (a + ab)∗
Una soluci´on aceptable para este tipo de problemas debe cumplir dos caracter´ısticas:
1. Correcci´on.- Las palabras que represente la ER propuesta deben satisfacer la descrip-
ci´on del problema (por ejemplo, para el problema del ejemplo, la soluci´on a∗
(a + b)∗
no es adecuada porque representa algunas palabras, como abb, que no satisfacen la
condici´on de que toda b est´e inmediatamente precedida por una a;
2. Completez.- La ER propuesta debe representar todas las palabras que satisfagan la
condici´on. As´ı, para el problema del ejemplo, la soluci´on (ab)∗
no es adecuada porque
hay palabras tales como aab, pertenecientes al lenguaje, que no son representadas por
dicha ER.
3.2.2. Metodolog´ıa de dise˜no de las ER
Al tratar de encontrar una ER para un lenguaje dado, mientras m´as complejo sea el
lenguaje es obvio que resulta m´as dif´ıcil encontrar por pura intuici´on dicha ER. En estos casos
puede ser conveniente trabajar en forma met´odica. Una t´ecnica que funciona en muchos casos
consiste en determinar primero la estructura de la ER, dejando unos “huecos” pendientes
para resolverse luego. Estos huecos, que llamaremos contextos, son tambi´en lenguajes para
los que habr´a que encontrar una ER.
84 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES
Ejemplo.- Obtener una ER para el lenguaje en el alfabeto {a, b, c} en que las palabras con-
tienen exactamente una vez dos b contiguas. Por ejemplo, las palabras aabb, babba, pertenecen
al lenguaje, pero no aaba, abbba ni bbabb.
Para resolver este problema, expresamos primero la estructura de la ER de la manera
siguiente:
< contexto1 > bb < contexto2 >
Podemos ver que en esta expresi´on aparecen directamente las bb que deben estar en la ER,
rodeadas por otras dos ER, que son < contexto1 > y < contexto2 >. Ahora el problema es
determinar qu´e ER corresponden a < contexto1 > y < contexto2 >, lo cual es un subproblema
del problema original.
El lenguaje de < contexto1 > comprende a las palabras que no tienen bb y adem´as no
terminan en b. 4
Esto es equivalente a decir que toda b est´a seguida de una a o una c. Esto
quiere decir que la ER de este contexto va ser de la forma:
(. . . b(a + c) . . .)∗
donde los detalles que faltan est´an representados por las “. . .”. Lo que falta por considerar
es que puede haber cualquier cantidad de a’s o c’s en el < contexto1 >, por lo que dicho
contexto queda como:
(b(a + c) + a + c)∗
Similarmente se puede obtener la expresi´on para < contexto2 >, que es (a + c + (a + c)b)∗
,
por lo que finalmente la ER del problema es:
(b(a + c) + a + c)∗
bb(a + c + (a + c)b)∗
Un importante elemento de metodolog´ıa -que se aplic´o en este ejemplo- consiste en trans-
formar los enunciados de lenguajes de manera que sean m´as f´acilmente representables por
ER. En particular, los enunciados “negativos”, del tipo “. . . las palabras que no contengan
bb” son particularmente dif´ıciles, porque en las ER no hay ning´un operador para representar
“lo que no forma parte del lenguajes”, sino que los operadores (como la uni´on o la estrella de
Kleene) tienden a a˜nadir m´as palabras. En consecuencia, es necesario convertir un enunciado
sobre lo que no se permite en otro enunciado sobre lo que s´ı se permite. Por ejemplo, si en un
lenguaje las palabras no deben contener la cadena “bb”, ¿qu´e es lo que s´ı pueden contener?
Aqu´ı podemos hacer un an´alisis por casos, considerando que podemos tener una b sola, o
tambi´en una b seguida de una a. Como hay dos casos, podemos pensar en utilizar el operador
“+” para combinar esos casos, y as´ı en adelante.
Tambi´en puede ser ´util modificar la forma l´ogica en que se enuncian los lenguajes. Por
ejemplo, el enunciado “palabras que si empiezan en 00, terminan en 11”, puede modificarse
de la manera siguiente: “palabras que ya sea no empiezan en 00 o bien terminan en 11”,
utilizando la conocida equivalencia de l´ogica P ⇒ Q ≡ ¬P ∨ Q. Lo que aqu´ı se gana es que
4
Pues si terminaran en b, esta ´ultima b se juntar´ıa a la bb de la mitad, violando la condici´on del problema.
3.2. EXPRESIONES REGULARES 85
hacemos evidente la estructura de casos, que se puede resolver usando el operador “+” de las
ER. Por supuesto, adem´as apareci´o en este enunciado una parte expresada negativamente,
“. . . no empiezan en 00”, pero ´esta es f´acil de transformar en un enunciado positivo, como
por ejemplo “. . . son la palabra vac´ıa, o bien empiezan en 1, o bien empiezan en 01”, el cual
tambi´en se resuelve f´acilmente por casos.
Ejemplo.- Obtener una ER que represente el lenguaje en {a, b} tal que si una palabra
contiene la subcadena aa, entonces no debe contener bb.
Soluci´on: Transformando l´ogicamente el enunciado, representamos la condici´on “contiene
la subcadena aa” por el s´ımbolo Caa, y la condici´on “no contiene bb” por ¬Cbb. Entonces la
condici´on del problema es:
Caa ⇒ ¬Cbb
Por las equivalencias l´ogicas vistas en la secci´on 1.2, esta condici´on es equivalente a:
¬Caa ∨ ¬Cbb
Es decir que las palabras no contienen aa o bien no contienen bb. Esto corresponde a la
estructura:
< sin aa > + < sin bb >
Vamos a resolver la primera parte, siendo la otra enteramente similar. Para que las
palabras no contengan aa, pueden contener cualquier secuencia con b, o bien secuencias
en que toda a est´e separada de otra a por al menos una b. Como la cantidad de a’s es
cualquiera, necesariamente debemos hacer intervenir una estrella de Kleene, como en la
estructura siguiente:
. . . (b + . . . a . . .)∗
. . .
Una idea para precisar m´as esta estructura ser´ıa pensar que antes y despu´es de la a debe
haber una b, como en la expresi´on (b + bab)∗
. Aunque esta ER es correcta, no es completa,
pues hay palabras como ab que no son representadas por ella. Entonces pensaremos que
despu´es de la a est´e la b que la separa de otras eventuales a’s. La estructura as´ı se precisa: 5
. . . (b + ab)∗
. . .
Ahora bien, pensando en qu´e puede aparecer al inicio y al final de una palabra, la subex-
presi´on (b + ab)∗
por s´ı misma es ya capaz de representar palabras que comiencen ya sea con
a o con b, por lo que podemos omitir el contexto del lado izquierdo. En cambio, (b + ab)∗
no
5
Los “contextos” aqu´ı fueron representados simplemente con “. . .”. El uso de puntos suspensivos o de
nombres para representar un contexto es simplemente cuesti´on de conveniencia en cada caso.
86 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES
es capaz de representar palabras terminadas en a, como ba. Habr´ıa que a˜nadir esta posibili-
dad. Pero si hacemos que el contexto derecho sea a, vamos a excluir palabras tales como ab.
Entonces el contexto derecho puede ser a o b, que se resuelve con la expresi´on a + b, dando
como resultado:
(b + ab)∗
(a + b)
Pero a´un esta expresi´on presenta un problema, que es el no poder representar a la palabra
vac´ıa. Esto se puede resolver de dos maneras: la menos elegante, que es simplemente a˜nadir
“+∧” a la ER, quedando como (b+ab)∗
(a+b)+∧, o una soluci´on m´as elegante que consiste
en observar que la expresi´on (b + ab)∗
ya representaba palabras terminadas en b, por lo que
en realidad el contexto derecho consistir´ıa en agregar una a o nada en absoluto, quedando
la ER como (b + ab)∗
(a + ∧). Este es un resultado correcto y completo. Dejamos pendiente
la soluci´on del contexto < sin bb >.
En la secci´on de ejercicios de este cap´ıtulo se proponen muchos problemas de dise˜no
de ER. Es importante emprender estos ejercicios siguiendo los elementos de metodolog´ıa
que hemos presentado (adaptar expresiones conocidas, dise˜nar estructuras con “contextos”,
transformar los enunciados), y no dej´andose llevar por la primera “corazonada genial”, que
generalmente nos lleva a expresiones err´oneas, principalmente por incompletez.
3.2.3. Equivalencias de Expresiones Regulares
Las expresiones regulares no representan en forma ´unica a un lenguaje -esto es, la funci´on
L : ER →2Σ∗
descrita arriba no es inyectiva. Esto quiere decir que puede haber varias ER
para un mismo lenguaje, lo cual desde luego no es conveniente, pues al ver dos ER distintas
no podemos a´un estar seguros de que representan dos lenguajes distintos. Por ejemplo, las
ER (a + b)∗
y (a∗
b∗
)∗
representan el mismo lenguaje.
Peor a´un, a diferencia de los AFD que vimos en el cap´ıtulo 2, no existen procedimientos
algor´ıtmicos para comparar directamente dos ER; la comparaci´on tiene que hacerse pasando
por una conversi´on a AFD que veremos m´as adelante.
Sin embargo, en algunos casos resulta ´util aplicar ecuaciones de equivalencia entre las
ER, que son expresiones de la forma ER1 = ER2, cuyo significado es que el lenguaje de ER1
es el mismo que el de ER2 (contienen las mismas palabras).
Por ejemplo, la equivalencia R + S = S + R quiere decir que la suma de expresiones
regulares es conmutativa, por lo que si tenemos dos ER espec´ıficas, como a∗
y b∗
ab, entonces
la ER a∗
+b∗
ab ser´a equivalente a la ER b∗
ab+a∗
, y ambas representar´an las mismas palabras.
La equivalencia R + S = S + R puede ser muy obvia, pues se basa directamente en la
conmutatividad de la uni´on de conjuntos, pero hay otras como (R∗
S)∗
= ∧ + (R + S)∗
S que
son mucho menos intuitivas.
3.2. EXPRESIONES REGULARES 87
A continuaci´on damos una lista de las principales equivalencias de ER, clasificadas en 9
grupos:
1. R + S = S + R, (R + S) + T = R + (S + T), R + Φ = Φ + R = R, R + R = R
2. R • ∧ = ∧ • R = R, R • Φ = Φ • R = Φ, (R • S) • T = R • (S • T)
3. R • (S + T) = R • S + R • T, (S + T) • R = S • R + T • R
4. R∗
= R∗
• R∗
= (R∗
)∗
= (∧ + R)∗
, Φ∗
= ∧∗
= ε
5. R∗
= ∧ + RR∗
6. (R + S)∗
= (R∗
+ S∗
)∗
= (R∗
S∗
)∗
= (R∗
S)∗
R∗
= R∗
(SR∗
)∗
= R∗
+ S∗
7. R∗
R = RR∗
, R(SR)∗
= (RS)∗
R
8. (R∗
S)∗
= ∧ + (R + S)∗
S, (RS∗
)∗
= ∧ + R(R + S)∗
9. R = SR + T ssi R = S∗
T, R = RS + T ssi R = TS∗
La prueba de varias de estas equivalencias sigue un mismo esquema, que vamos a ejem-
plificar demostrando R(SR)∗
= (RS)∗
R (grupo 7). Esta equivalencia se puede probar en dos
partes: R(SR)∗
⊆ (RS)∗
R y (RS)∗
R ⊆ R(SR)∗
.
1a. parte.- Sea x ∈ R(SR)∗
. Entonces x es de la forma x = r0s1r1s2r2 . . . snrn. Pero
esta misma palabra puede agruparse de otra manera: x = (r0s1)(r1s2) . . . (rn−1sn)rn. Por lo
tanto, x ∈ (RS)∗
R.
2a. parte.- Se prueba similarmente. QED.
Las equivalencias de estos 9 grupos pueden usarse para verificar que dos ER denotan el
mismo lenguaje. La t´ecnica a usar para verificar que P = Q, donde P, Q ∈ ER, es formar
una serie de equivalencias P = R1 = R2 = . . . = Rn = Q, usando las equivalencias dadas
arriba para hacer reemplazamientos.
Ejemplo: Verificar que las ER (ab + a)∗
a y a(ba + a)∗
son equivalentes, usando las equiv-
alencias presentadas arriba.
Soluci´on:
(ab + a)∗
a = (a + ab)∗
a -por (1);
= (a∗
ab)∗
a∗
a -por (6);
= ([a∗
a]b)∗
[a∗
a] -agrupamos t´erminos;
88 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES
∗Σ ∗Σ2
Figura 3.1: Representaciones de lenguajes
= [a∗
a](b[a∗
a])∗
-por (7);
= aa∗
(baa∗
)∗
- aplicando (7) a los t´erminos entre corchetes;
= [a][a∗
(baa∗
)∗
] -agrupando;
= a(a + ba)∗
- por (6);
= a(ba + a)∗
- por (1).
El uso de estas equivalencias para verificar que dos ER denotan el mismo lenguaje en
general no es muy pr´actico, pues en muchos casos es dif´ıcil ver intuitivamente qu´e equivalencia
conviene aplicar, adem´as de que hay el riesgo de que al aplicarla nos alejemos de la soluci´on
en vez de acercarnos a ella. Para empeorar la situaci´on, no hay metodolog´ıas generales que
nos ayuden a dise˜nar estas pruebas. Es por esto que normalmente probaremos la equivalencia
de dos ER usando el procedimiento de conversi´on a AFD que veremos en la secci´on 3.4.
3.3. L´ımites de las representaciones textuales
Nos podemos preguntar qu´e tantos lenguajes se pueden representar con las ER. En otras
secciones mostraremos que dichos lenguajes coinciden con los que pueden ser aceptados por
alg´un aut´omata finito. Por lo pronto, en esta secci´on vamos a establecer un l´ımite que existe
no s´olamente para las ER, sino para cualquier forma de representar lenguajes mediante texto.
En la figura 3.1 se ilustra el mapeo que pretendemos entre los lenguajes, que son elementos
del conjunto 2Σ∗
, y las cadenas de caracteres que los representan, que son elementos de Σ∗
.
Desde luego, quisi´eramos que una cadena de caracteres no pudiera representar a m´as de un
lenguaje, pues de otro modo no sabr´ıamos a cu´al de ellos representa. En cambio, es aceptable
que un lenguaje tenga varios representantes.
Por ejemplo, el conjunto de todas las palabras formadas por a’s y b’s, que es el conjunto
infinito {ε, a, b, ab, ba, aaa, aab, . . .}, puede ser representado mediante la cadena de caracteres
“{a, b}∗”, que es una palabra formada por caracteres del alfabeto {“a”,“b”,“{”,“}”,“∗”, “,”
}. Como vemos en este ejemplo, una cadena de caracteres de 6 caracteres puede representar
3.4. EQUIVALENCIA DE EXPRESIONES REGULARES Y AUT ´OMATAS FINITOS 89
todo un lenguaje infinito.
En vista del ´exito obtenido, quisi´eramos tener, para cada lenguaje posible, ya sea fini-
to o infinito, un representante que fuera una de estas cadenas finitas de caracteres. Existe
sin embargo un problema: para poder hacer lo anterior se necesitar´ıa que hubiera tantos
representantes (cadenas de caracteres) como lenguajes representados. Ahora bien, aunque
parezca sorprendente, ¡hay m´as lenguajes posibles que cadenas de caracteres para represen-
tarlos! Esto se debe a que la cantidad de lenguajes posibles es incontable, mientras que las
representaciones de dichos lenguajes son contables.
Vamos a probar el siguiente
Teorema.- El conjunto de los lenguajes en un alfabeto Σ finito es incontable.
Nos apoyaremos en el c´elebre teorema de Cantor, que establece que el conjunto potencia
de los n´umeros naturales, 2N
, es incontable. En efecto, observamos que el conjunto de todos
los lenguajes, que es 2Σ∗
, tiene el mismo tama˜no que 2N
, pues N y Σ∗
son del mismo tama˜no,
que es lo mismo que decir que Σ∗
es contable, lo cual es sencillo de probar 6
As´ı podemos
concluir que, como 2N
es incontable, 2Σ∗
tambi´en lo es. QED.
Se sabe que los conjuntos incontables son propiamente m´as “grandes” que los contables,
en el sentido de que un conjunto contable no puede ser puesto en correspondencia uno a
uno con uno incontable, pero s´ı con subconjuntos de ´este. As´ı resulta que la cantidad de
lenguajes a representar es mayor que la cantidad de cadenas de caracteres que pudieran
ser representaciones de aquellos. La conclusi´on es que no todos los lenguajes pueden ser
representados en forma finita.
3.4. Equivalencia de expresiones regulares y aut´omatas
finitos
A´un cuando por varios ejemplos hemos visto que lenguajes representados por expre-
siones regulares son aceptados por aut´omatas finitos, no hemos probado que para cualquier
expresi´on regular exista un aut´omata finito equivalente, y viceversa. Esto se establece en el
siguiente
Teorema de Kleene.- Un lenguaje es regular si y s´olo si es aceptado por alg´un aut´omata
finito.
Vamos a presentar una prueba de esta afirmaci´on, no tanto por el inter´es matem´atico que
tiene, sino porque nos brinda procedimientos est´andar extremadamente ´utiles para transfor-
mar una expresi´on regular en aut´omata finito y viceversa.
6
La prueba es uno de los ejercicios al final de esta secci´on.
90 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES
b
(ab) qq0 1
*
a
Figura 3.2: Una gr´afica de transici´on
3.4.1. Conversi´on de ER a AF
La prueba de que si un lenguaje es regular entonces es aceptado por un AF consiste en
dar un procedimiento para transformar en forma sistem´atica una expresi´on regular en un
aut´omata finito que acepte su lenguaje. Dicho procedimiento se describe a continuaci´on:
La idea es hacer una transformaci´on gradual que vaya conviertiendo la ER en AF.
Para hacer la transformaci´on gradual de ER a AFN se requiere utilizar alguna repre-
sentaci´on de los lenguajes regulares que sea intermedia entre las ER y los AFN.
Una posible soluci´on es el uso de las gr´aficas de transici´on. Estas ´ultimas son esencial-
mente AFN en que las etiquetas de las flechas tienen expresiones regulares, en lugar de
palabras. Las gr´aficas de transici´on (GT) son por lo tanto qu´ıntuplos (K, Σ, ∆, s, F) en
donde ∆ ∈ K × ER × K.
En la figura 3.2 se ilustra un ejemplo de GT. En este ejemplo en particular es f´acil ver
que debe aceptar palabras que tienen primero una sucesi´on de a’s, luego repeticiones de ab,
y finalmente repeticiones de b’s. Esta GT se representar´ıa formalmente como el qu´ıntuplo:
({q0, q1}, {a, b}, {(q0, a, q0), (q0, (ab)∗
, q1), (q1, b, q1)}, q0, {q1})
Los AFN son un subconjunto propio de las GT, puesto que las palabras en las etiquetas
de un AFN pueden ser vistas como expresiones regulares que se representan a s´ı mismas.
Ahora procederemos a describir el procedimiento de transformaci´on de ER a AFN.
A partir de una ER es trivial obtener una GT que acepte el mismo lenguaje. En efecto,
sea R una ER; entonces, si
G1 = ({q0, q1}, Σ, {(q0, R, q1)}, q0, {q1})
entonces L(G) = L(R). Por ejemplo, la GT asociada a la ER (a + ba)∗
bb se ilustra en la
figura 3.3(a).
Lo que falta por hacer es transformar gradualmente G1 en G2, luego en G3, etc., hasta
llegar a un Gn tal que en las flechas no haya m´as que caracteres solos (o bien la palabra
3.4. EQUIVALENCIA DE EXPRESIONES REGULARES Y AUT ´OMATAS FINITOS 91
Cuadro 3.1: Eliminaci´on de operadores para pasar de ER a AF
Reemplazar Por
  ¡
  ¡
  ¡
 
¡
 
i j
 
k
¡
εεεε
R
vac´ıa). En efecto, Gn ∈AFN. Este es un proceso de eliminaci´on gradual de los operadores de
las ER.
Para eliminar los operadores de las ER en Gi, aplicamos reemplazamientos de ciertas
transiciones por otras, hasta que no sea posible aplicar ninguno de estos reemplazamientos.
Las transformaciones elementales se ilustran en la Tabla 3.1.
Ejemplo.- Dada la ER (a + ba)∗
bb, obtener el AFN que acepta el lenguaje de dicha ER.
Soluci´on: Aplicamos una sucesi´on de transformaciones, ilustradas en las figuras 3.3(a)-(d).
La equivalencia de G1, G2, . . . , Gn se asegura por el hecho de que cada una de las
transformaciones preserva la equivalencia.
3.4.2. Conversi´on de AF a ER
La prueba de la parte “si” del teorema consiste en dar un procedimiento para trans-
formar en forma sistem´atica un aut´omata finito en una expresi´on regular equivalente. Un
procedimiento para hacerlo consiste en ir eliminando gradualmente nodos de una GT, que
inicialmente es el AFN que se quiere transformar, hasta que ´unicamente queden un nodo
inicial y un nodo final.
Dicho procedimiento comprende los siguientes pasos:
1. El primer paso en este procedimiento consiste en a˜nadir al aut´omata finito un nuevo
estado inicial i, mientras que el antiguo estado inicial q0 deja de ser inicial, y un nuevo
estado final f, mientras que los antiguos estados finales qi ∈ F dejan de ser finales;
adem´as se a˜nade una transici´on vac´ıa del nuevo estado inicial al antiguo, (i, ε, q0), y
92 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES
q 10q
(a+ba) bb
*
(a)
0q q 1
(a+ba)*
bb
k
(b)
0q q 1km
bb
a+ba
ε ε
(c)
0q q 1km
bb
a
ε ε
ba
(d)
Figura 3.3: Transformaci´on ER→AF
3.4. EQUIVALENCIA DE EXPRESIONES REGULARES Y AUT ´OMATAS FINITOS 93
α 1
mγ
 
1γ
 
kβ
1β
α n
p1
qm
q1
q
pn
(a) Nodo a eliminar
np q
11
*
m
1n
*α (β + ... +β ) γ m
α (β + ... +β ) γ mk
k
1p q1
1 11
*α (β + ... +β ) γk
α (β + ... +β ) γ*n 1 k 1
. . .
(b) GT sin el nodo eliminado
R1
R2
Rn
(c) GT tras la eliminaci´on de nodos intermedios
Figura 3.4: Eliminaci´on de nodos
varias transiciones de los antiguos estados finales al nuevo: {(qi, ε, f)|qi ∈ F}. Esta
transformaci´on tiene por objeto que haya un estado inicial al que no llegue ninguna
transici´on, y un solo estado final, del que no salga ninguna transici´on. Esta condici´on
se requiere para llevar a cabo el siguiente paso. 7
Desde luego, hay muchos aut´omatas
que ya cumplen estas condiciones sin necesidad de a˜nadir un nuevo estado inicial o un
nuevo estado final.
2. El segundo paso consiste en eliminar nodos intermedios en la GT. Se llama nodo inter-
medio a aquel que se encuentra en una trayectoria entre el estado inicial y el final. El
procedimiento de eliminaci´on de nodos intermedios es directo. La idea es que al suprim-
ir el nodo en cuesti´on, no se alteren las cadenas que hay que consumir para pasar de
uno a otro de los nodos vecinos. En otras palabras, al suprimir dicho nodo, se deben
reemplazar las transiciones que antes tomaban ese nodo como punto intermedio para
ir de un nodo vecino a otro, por otras transiciones que vayan del nodo vecino origen
al nodo vecino destino, pero ahora sin pasar por el nodo eliminado. Para comprender
cabalmente el procedimiento, hay que seguir el ejemplo dado m´as adelante. En la figura
3.4(a) se representa un nodo q intermedio que se quiere eliminar, y los nodos entre los
que se encuentra. Este esquema se adapta a todos los casos que pueden presentarse. En
dicha figura, αi,βi, γi son expresiones regulares. Para eliminar el nodo q, reemplazamos
la parte de la GT descrita en la figura 3.4(a) por el subgrafo representado en la figura
7
Mas adelante se presenta un ejemplo de cada una de las operaciones involucradas en este procedimiento.
94 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES
3.4(b). Los nodos intermedios se pueden eliminar en cualquier orden.
3. Cuando despu´es de aplicar repetidamente el paso 2 ya no sea posible hacerlo, tendremos
una GT de la forma de la figura 3.4(c). Esta GT se puede transformar en otra con una
sola transici´on, fusionando todas las transiciones en una sola, con etiqueta R1 + R2 +
. . . + Rn. Esta etiqueta ser´a la ER buscada.
Ejemplo.- Obtener una ER para el AFD de la figura siguiente:
Paso 1.- A˜nadir un nuevo estado inicial y uno final
ε
ε
ε
Paso 2.- Eliminaci´on de nodos intermedios. Eliminamos primero el nodo q1. Para ello,
consideramos qu´e trayectorias o “rutas” pasan por el nodo a eliminar. Por ejemplo, en la
figura de arriba vemos solamente una trayectoria que pasa por q1, la cual va de q0 a f. Ahora
nos proponemos eliminar el nodo q1, pero sin modificar “lo que se gasta” para pasar de q0
a f. Es f´acil ver que para pasar de q0 a f se gasta primero una a y luego alg´un n´umero de
repeticiones de a o b (para llegar de q1 a f no se gasta nada). Esto corresponde a la ER
a(a + b)∗
, que ser´a la etiqueta de la nueva “ruta directa” de q0 a f, sin pasar, por q1, como
se aprecia en la siguiente figura:
ε
ε
Paso 3.- Despu´es eliminamos el nodo q2:
3.5. GRAM ´ATICAS REGULARES 95
0qi
ε
f
a(a+b)
bb
*
*
*
bb a
Paso 4.- Eliminamos q0:
i f
(bb a) a(a+b)
(bb a) bb
*
* * *
* *
Paso 5.- Finalmente fusionamos las expresiones que est´an en paralelo:
i f
(bb a) a(a+b) +(bb a) bb* * * * * *
Por lo que finalmente la ER buscada es (bb∗
a)∗
a(a + b)∗
+ (bb∗
a)∗
bb∗
.
La correcci´on de cada paso de transformaci´on se desprende del hecho de que tanto la
eliminaci´on de nodos como la fusi´on de transiciones que se hace al final, preservan ambos la
igualdad del lenguaje aceptado.
Con este resultado establecemos la completa equivalencia entre las ER y los aut´omatas
finitos (no deterministas). Al establecer la equivalencia de los AFN con las ER, autom´ati-
camente queda establecida la equivalencia entre las ER y los AFD. Este es un resultado de
gran trascendencia tanto te´orica como pr´actica, pues por una parte muestra la importancia
de la clase de los lenguajes regulares, y por otra ofrece un grupo de herramientas pr´acticas,
tales como la minimizaci´on de AFD, que pueden ser puestas al servicio de las ER.
3.5. Gram´aticas regulares
En esta secci´on veremos otra manera de representar los lenguajes regulares, adem´as de
las Expresiones Regulares que ya vimos.
96 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES
3.5.1. Gram´aticas formales
La representaci´on de los lenguajes regulares que aqu´ı estudiaremos se fundamenta en la
noci´on de gram´atica formal. Intuitivamente, una gram´atica es un conjunto de reglas para
formar correctamente las frases de un lenguaje; as´ı tenemos la gram´atica del espa˜nol, del
franc´es, etc. La formalizaci´on que presentaremos de la noci´on de gram´atica es debida a N.
Chomsky [4], y est´a basada en las llamadas reglas gramaticales.
Una regla es una expresi´on de la forma α → β, en donde tanto α como β son cadenas
de s´ımbolos en donde pueden aparecer tanto elementos del alfabeto Σ como unos nuevos
s´ımbolos, llamados variables. Los s´ımbolos que no son variables son constantes. 8
Por
ejemplo, una posible regla gramatical es X → aX. La aplicaci´on de una regla α → β a una
palabra uαv produce la palabra uβv. En consecuencia, las reglas de una gram´atica pueden
ser vistas como reglas de reemplazo. Por ejemplo, si tenemos una cadena de s´ımbolos bbXa,
le podemos aplicar la regla X → aX, dando como resultado la nueva cadena bbaXa.
3.5.2. Gram´aticas regulares
Nosotros nos vamos a interesar por el momento en las gram´aticas cuyas reglas son de la
forma A → aB o bien A → a, donde A y B son variables, y a es un caracter terminal. A
estas gram´aticas se les llama regulares.
Ejemplo.- Sea una gram´atica con las siguientes reglas:
1. S → aA
2. S → bA
3. A → aB
4. A → bB
5. A → a
6. B → aA
7. B → bA
La idea para aplicar una gram´atica es que se parte de una variable, llamada s´ımbolo
inicial, y se aplican repetidamente las reglas gramaticales, hasta que ya no haya variables en
la palabra. En ese momento se dice que la palabra resultante es generada por la gram´atica,
o en forma equivalente, que la palabra resultante es parte del lenguaje de esa gram´atica.
8
En la terminolog´ıa de los compiladores, se les llama “terminales” a los elementos de Σ, y “no terminales”
a las variables.
3.5. GRAM ´ATICAS REGULARES 97
Por ejemplo, en la gram´atica que acabamos de presentar, si consideramos que las variables
son S (que ser´a el s´ımbolo inicial), A y B, y las constantes a y b, partiendo de S podemos
producir bA (por la segunda regla), luego de bA podemos pasar a ba (por la quinta regla).
Como ba tiene s´olo constantes, podemos concluir que la palabra ba es parte del lenguaje
generado por la gram´atica dada. De hecho el lenguaje generado por esta gram´atica es el de
las palabras en {a, b} de longitud par terminadas en a. 9
Formalizamos estas nociones con las siguientes definiciones:
Definici´on.- Una gram´atica regular es un cu´adruplo (V, Σ, R, S) en donde:
V es un alfabeto de variables,
Σ es un alfabeto de constantes,
R, el conjunto de reglas, es un subconjunto finito de V × (ΣV ∪ Σ).
S, el s´ımbolo inicial, es un elemento de V .
Por ejemplo, la gram´atica que presentamos arriba se representar´ıa formalmente como:
({S, A, B}, {a, b}, {(S, aA), (S, bA), (A, aB), (A, bB), (A, a), (B, aA), (B, bA)}, S)
Usualmente las reglas no se escriben como pares ordenados (A, aB), como lo requerir´ıa la
definici´on anterior, sino como A → aB; esto es simplemente cuesti´on de facilidad de notaci´on.
La aplicaci´on de una gram´atica se formaliza con las siguientes nociones:
Una cadena uXv deriva en un paso una cadena uαv, escrito como uXv ⇒ uαv, si hay
una regla X → α ∈ R en la gram´atica.
Una cadena w ∈ Σ∗
(esto es, formada exclusivamente por constantes) es derivable a partir
de una gram´atica G si existe una secuencia de pasos de derivaci´on S ⇒ α1 ⇒ α2 ⇒ . . . ⇒
w.
A una secuencia de pasos de derivaci´on le llamamos simplemente derivaci´on.
Dicho de otra manera, una palabra w ∈ Σ∗
es derivable a partir de G ssi S
∗
⇒ w, donde
∗
⇒ denota la cerradura reflexiva y transitiva de ⇒.
Definici´on.- El lenguaje generado por una gram´atica G, L(G), es igual al conjunto de las
palabras derivables a partir de su s´ımbolo inicial.
Esto es, L(G) = {w ∈ Σ∗
|S
∗
⇒ w}.
9
M´as adelante veremos c´omo probar rigurosamente que una gram´atica efectivamente corresponde a un
lenguaje dado.
98 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES
Frecuentemente es f´acil mostrar que una palabra dada w es derivable a partir del s´ımbolo
inicial S; por ejemplo, en la gram´atica presentada arriba, se puede mostrar que S ⇒ . . . ⇒
bababa (esto es, que la palabra bababa puede ser derivada a partir del s´ımbolo inicial S, por
lo que bababa ∈ L(G). Dejamos este ejemplo como ejercicio (ver secci´on de ejercicios).
Ejemplo.- Proponer una gram´atica que genere el lenguaje de las palabras en {a, b} que
contienen la subcadena bb, como abb, ababba, etc.
Vamos a utilizar las variables de una manera similar a como se utilizaban en los AF los
estados, esto es, como memorias para “recordar” situaciones. As´ı tendremos las siguientes
variables:
A, que recuerda que a´un no se produce ninguna b.
B, que recuerda que se produjo una b.
C, que recuerda que ya se produjeron las dos b’s.
Ahora podemos proponer reglas, pregunt´andonos a qu´e situaci´on se llega al producir una
a o b. Por ejemplo, a partir de A, si se produce una a se debe llegar a la misma A, pero si
llega una b se llegar´a a la variable B. Con estas ideas se proponen las siguientes reglas:
1. A → aA
2. A → bB
3. B → aA
4. B → bC
5. C → aC
6. C → bC
Finalmente, para terminar la producci´on de una palabra hecha solamente de constantes
es necesaria al menos una regla que no produzca variables en su lado derecho. Tal regla no
se encuentra a´un en la gram´atica dada. Como las palabras correctas tienen bb, pensamos que
una regla adicional podr´ıa ser C → a y tambi´en C → b. En efecto, con tales reglas podemos
producir, por ejemplo, la palabra abba, mediante la derivaci´on siguiente:
A ⇒ aA ⇒ abB ⇒ abbC ⇒ abba
Sin embargo, tambi´en podemos verificar que la palabra abb, que pertenece al lenguaje,
no puede producirse con las reglas dadas. Hace falta a´un otra regla, B → b, con la que se
completa nuestra gram´atica.
3.5. GRAM ´ATICAS REGULARES 99
Al dise˜nar gram´aticas regulares, podemos incurrir en los mismos errores que en los AF,
es decir, que sean incorrectas (producen palabras que no deber´ıan) o bien incompletas (no
pueden generar palabras que pertenecen al lenguaje), o bien ambas cosas a la vez.
No vamos a examinar m´etodos particulares de dise˜no de gram´aticas regulares; en vez de
ello mejor vamos a examinar m´etodos por los que es muy simple convertir las gram´aticas
regulares a AF y viceversa.
3.5.3. Aut´omatas finitos y gram´aticas regulares
De manera similar a como hicimos en la secci´on anterior, aqu´ı vamos a establecer la
equivalencia entre las gram´aticas regulares y los lenguajes regulares -y por ende los aut´omatas
finitos. Este resultado es establecido por el siguiente
Teorema.- La clase de los lenguajes generados por alguna gram´atica regular es exacta-
mente la de los lenguajes regulares.
La prueba de este teorema consiste en proponer un procedimiento para, a partir de una
gram´atica dada, construir un aut´omata finito, y viceversa.
Dicho procedimiento es directo, y consiste en asociar a los s´ımbolos no terminales de la
gram´atica (las variables) los estados de un aut´omata. As´ı, para cada regla A → bC en la
gram´atica tenemos una transici´on (A, b, C) en el aut´omata.
Sin embargo, queda pendiente el caso de las reglas A → b. Para estos casos, se tienen
transiciones (A, b, Z), donde Z es un nuevo estado para el que no hay un no terminal asociado;
Z es el ´unico estado final del aut´omata.
Ejemplo.- Obtener un aut´omata finito para la gram´atica regular G siguiente:
1. S → aA
2. S → bA
3. A → aB
4. A → bB
5. A → a
6. B → aA
7. B → bA
100 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES
Z
BAS
a a
a
b
bb
a
Figura 3.5: Aut´omata obtenido de la gram´atica
q 10q
b
2q q
b
a, b
a a a
b
3
Figura 3.6: AFD que acepta palabras que no contienen 3 a’s seguidas
Dicho aut´omata aparece en la figura 3.5.
Similarmente, es simple obtener, a partir de un AFD (K, Σ, δ, s, F), la gram´atica regular
correspondiente. Para cada transici´on de la forma ((p, σ), q) ∈ δ, habr´a en la gram´atica una
regla Xp → σXq, donde Xi es la variable en la gram´atica que corresponde al estado i del
AFD. Queda, sin embargo, pendiente c´omo obtener las reglas de la forma Xp → σ, que son
las que permiten terminar una derivaci´on. Nos damos cuenta de que la aplicaci´on de este
tipo de reglas debe corresponder al consumo del ´ultimo caracter de una palabra aceptada
en el AFD. Ahora bien, al terminar una palabra aceptada en un AFD, necesariamente nos
encontraremos en un estado final. De ah´ı conclu´ımos que hay que incorporar a la gram´atica,
por cada transici´on ((p, σ), q), donde q ∈ F, una regla adicional Xp → σ, adem´as de la regla
Xp → σXq que se mencion´o anteriormente.
Ejemplo.- Para el AFD de la figura 3.6, la gram´atica regular correspondiente contiene las
reglas:
1.- Q0 → aQ1 8.- Q3 → bQ3
2.- Q0 → bQ0 9.- Q0 → a
3.- Q1 → aQ2 10.- Q0 → b
4.- Q1 → bQ0 11.- Q1 → a
5.- Q2 → aQ3 12.- Q1 → b
6.- Q2 → bQ0 13.- Q2 → b
7.- Q3 → aQ3
3.6. LIMITACIONES DE LOS LENGUAJES REGULARES 101
N´otese que en este ejemplo el AFD acepta la palabra vac´ıa, mientras que la GR no es
capaz de generarla. De hecho ninguna GR puede generar ε. En estos casos nos tenemos que
contentar con generar un lenguaje igual al aceptado por el AFD excepto por la palabra vac´ıa.
3.6. Limitaciones de los lenguajes regulares
Los AF est´an limitados a los estados de que disponen como ´unico medio para “recordar”
la serie de s´ımbolos recibidos hasta un momento dado. Puesto de otra manera, debemos
considerar que, en un AF, la ´unica traza de los s´ımbolos recibidos es el estado en que se
encuentra. Por lo mismo, varias secuencias distintas de caracteres que llevan a un mismo
estado son consideradas como indistinguibles. Por ejemplo, para el AFD de la figura 2.4, las
secuencias de caracteres bab y bbbbb son indistinguibles, pues ambas llevan al estado q2. Esta
limitaci´on de los AF los hace finalmente incapaces de distinguir las palabras aceptables de
las no aceptables en ciertos lenguajes, m´as complicados que los lenguajes regulares.
Por ejemplo, para el lenguaje {an
bn
} no es posible construir un aut´omata finito que lo
acepte, ni representarlo por una expresi´on regular o gram´atica regular. En efecto, supongamos
que un AFD est´a recorriendo una palabra an
bn
, entonces al terminar el grupo de a’s el
aut´omata debe recordar cu´antas encontr´o, para poder comparar con el n´umero de b’s. Ahora
bien, como la cantidad de a’s que puede haber en la primera mitad de la palabra es arbitraria,
dicha cantidad no puede recordarse con una cantidad de memoria fija, como es la de los
aut´omatas finitos.
3.6.1. El teorema de bombeo
Formalmente, vamos a establecer un teorema que precisa cu´al es la limitaci´on de los
aut´omatas finitos.
Teorema.- Si L es un lenguaje regular infinito, entonces existen cadenas x, y, z tales que
y = ε, y xyn
z ∈ L, para alg´un n ≥ 0. (Teorema de bombeo).
Lo que este resultado establece es que, suponiendo que cierto lenguaje es regular, en-
tonces forzosamente dicho lenguaje debe contener palabras en que una subcadena se repite
cualquier n´umero de veces. Es decir, hay palabras del lenguaje en que podemos insertar
repetidamente (“bombear”) una subcadena (y en el teorema) sin que el aut´omata se d´e cuen-
ta. Esta situaci´on permite hacer pruebas por contradicci´on de que un lenguaje dado no es
regular.
Pero veamos en primer lugar la prueba del teorema de bombeo. Supongamos que L es un
lenguaje regular. Entonces existe un aut´omata M que lo acepta. Sea m el n´umero de estados
de M. Ahora supongamos una palabra en L, w = σ1σ2 . . . σn, σi ∈ Σ, donde n ≥ m. Como
w debe ser aceptada, debe hacer un c´alculo de la forma:
102 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES
[[q1, σ1σ2 . . . σn]] M [[q2, σ2 . . . σn]] ∗
M [[qn+1, ε]]
Como M tiene solamente m estados, y el c´alculo tiene longitud n + 1, por el principio de
correspondencia debe haber algunos estados que se repitan en el c´alculo, es decir, qi = qj,
para 0 ≤ i < j ≤ n + 1. Entonces podemos detallar m´as el calculo anterior, el cual tiene la
forma:
[[q1, σ1σ2 . . . σi . . . σn]] ∗
M [[qi, σi . . . σn]] ∗
M [[qj, σj . . . σn]] ∗
M [[qn+1, ε]]
Como M regresa al mismo estado, la parte de la entrada que se consumi´o entre qi y qj, que
es σi . . . σj−1 puede ser eliminada, y por lo tanto la palabra σ1 . . . σi−1σj . . . σn ser´a aceptada
de todas maneras, mediante el c´alculo siguiente:
[[q1, σ1 . . . σi−1σj . . . σn]] ∗
M [[qj, σj . . . σn]] ∗
M [[qn+1, ε]]
De igual manera, la subcadena σi . . . σj−1 puede ser insertada cualquier n´umero de veces;
entonces el aut´omata aceptar´a las palabras de la forma:
σ1σ2 . . . σi−1(σi . . . σj−1)k
σj . . . σn
Entonces, haciendo x = σ1σ2 . . . σi−1, y = σi . . . σj−1 y z = σj . . . σn tenemos el teorema
de bombeo. Esto termina la prueba. QED.
Ejemplo.- Como un ejemplo de la aplicaci´on de este teorema, probaremos que el lenguaje
{an
bn
} no es regular. En efecto, supongamos que fuera regular. Entonces, por el teorema de
bombeo, debe haber palabras de la forma xyz, a partir de una cierta longitud, en que la
parte y puede repetirse cuantas veces sea. Existen 3 posibilidades:
1. Que y no contenga caracteres distintos a “a”, es decir, y = aa . . . a. En este caso, al
repetir varias veces y, habr´a m´as a’s que b’s y la palabra no tendr´a la forma deseada. Es
decir, suponiendo que {an
bn
} es regular hemos llegado a la conclusi´on de que contiene
palabras con m´as a’s que b’s, lo cual es una contradicci´on.
2. Que y no contenga caracteres distintos de b. Este caso es similar al caso (1).
3. Que y contenga a’s y b’s, es decir, y = aa . . . abb . . . b. Pero en este caso, al repetirse
y, las a’s y b’s quedar´an en desorden en la palabra, la cual no tendr´a la forma an
bn
.
Tambi´en en este caso hay contradicci´on.
3.7. EJERCICIOS 103
Por lo tanto el suponer que {an
bn
} es regular nos lleva a contradicci´on. Se concluye que
{an
bn
} no es regular.
Es muy importante notar que para las pruebas por contradicci´on usando el teorema de
bombeo hay que explorar exhaustivamente todas las posibles maneras de dividir la palabra w
en xyz, y encontrar contradicci´on en cada posible divisi´on. Con una sola divisi´on posible en
que no se encuentre una contradicci´on, la prueba fracasa. Al fracasar la prueba, no se puede
concluir ni que el lenguaje es regular ni que no lo es; simplemente no se llega a ninguna
conclusi´on.
Otros lenguajes que tampoco son regulares son : {ww}, que es el lenguaje cuyas palabras
tienen dos mitades iguales, {wwR
} , que es el lenguaje cuyas palabras tienen dos mitades
sim´etricas 10
; el lenguaje de las palabras pal´ındromas, que se leen igual al derecho y al rev´es,
como por ejemplo ANITALAVALATINA, 11
el lenguaje de los par´entesis bien balanceados,
como ()(()), ()()(), ((())), etc.
3.7. Ejercicios
1. Convertir la ER a∗
ab + b(a + ∧) en notaci´on “f´acil” a ER estricta.
2. Encontrar Expresiones Regulares que representen los siguientes lenguajes (se presentan
en orden de dificultad creciente):
a) Conjunto de palabras en {0, 1} terminadas en 00.
b) Conjunto de palabras en {0, 1} que contengan tres ceros consecutivos, como
“0001000”, “000001”, etc.
c) El lenguaje {101, 1110}.
d) El lenguaje {w ∈ Σ∗
|w = an
bak
, n, k ≥ 0}
e) Conjunto de palabras en {a, b} que no contienen dos b consecutivas, como “ababab”,
“aaaa”, etc.
f ) Conjunto de cadenas en {a, b} que no contienen ni aa ni bb.
g) El lenguaje sobre {0, 1} en que las palabras no vac´ıas empiezan o terminan en
cero.
h) El conjunto de las palabras en {a, b} tales que toda a est´a precedida por alguna
b, como por ejemplo “ε”, “b”, “bba”, “babaa”, etc. 12
i) Conjunto de palabras en {0, 1} con a lo m´as un par de ceros consecutivos y a lo
m´as un par de unos consecutivos.
10
wR
es el reverso de w, es decir, (abaa)R
= aaba
11
¡Atenci´on! este lenguaje no es igual a {wwR
}
12
La b que precede a la a no necesita estar inmediatamente antes.
104 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES
j) El lenguaje sobre {a, b} en que todas las palabras son de longitud impar.
k) Conjunto de cadenas en {a, b} que contienen un n´umero impar de b.
l) El lenguaje en {0, 1} en que las palabras contienen m´as de tres ceros.
m) El lenguaje en {0, 1} en que las palabras no contienen un cero exactamente (pero
pueden contener dos, tres, etc.), como “1111”, “1010”, etc.
n) Conjunto de palabras en {0, 1} tales que no hay ning´un par de ceros consecutivos
despu´es 13
de un par de unos consecutivos, como “0000110”, “0001000”, etc.
˜n) {w ∈ {a, b, c}∗
| |w| = 3}
o) El lenguaje en {0, 1} en que las palabras contienen un n´umero de ceros distinto
de 3, por ejemplo “010”, “1111”, “00100”, etc.
p) {w ∈ {a, b, c}∗
| w = αabcβ}, donde α y β representan cualquier cadena de
caracteres (esto es, las palabras en este lenguaje no deben contener la subcadena
abc).
q) Lenguaje en {a, b} tal que |w| es par, y adem´as la cantidad de a’s que aparecen
en w es par.
r) El lenguaje sobre {a, b} en que las palabras contienen la subcadena “baaab” o
bien la subcadena “abbba”.
s) El lenguaje sobre {a, b} en que las palabras pueden contener pares de a’s con-
secutivas, pero no grupos de 3 a’s consecutivas; por ejemplo, “baabaab”, pero no
“baaaab”.
t) El lenguaje en {a, b} en que toda “b” tiene a su izquierda y a su derecha una “a”
(no necesariamente junto), y adem´as el n´umero de “b” es impar.
u) Lenguaje de las palabras en {a, b} que no contienen la subcadena “abaab”.
3. Demostrar la siguiente equivalencia por identidades de Expresiones Regulares:
(ab∗
)∗
a = a + a(a + b)∗
a
4. Verificar si los siguientes pares de ER son equivalentes, usando equivalencias o bien
encontrando un contraejemplo:
a) a∗
+ b∗
y (a + b)∗
b) a∗
y (aa∗
)∗
a∗
5. Probar que a∗
+ b∗
no es equivalente a (a + b)∗
6. Convertir la ER (a + ab)∗
aba(a + ba)∗
a AFN.
7. Convertir a ER el AFD siguiente: ({1, 2, 3}, {a, b}, {((1, a), 1), ((1, b), 2), ((2, a), 3),
((2, b), 1), ((3, a), 2), ((3, b), 3)}, 1, {1, 3}).
13
En cualquier posici´on a la derecha
3.7. EJERCICIOS 105
8. Demostrar la siguiente equivalencia (ab∗
)∗
a = a + a(a + b)∗
a por equivalencia de
aut´omatas (Primero hay que convertir las ER a AFN, luego estos a AFD, los cuales
pueden ser comparados).
9. Encuentre una Expresi´on Regular que represente las palabras en {a, b}∗
que no con-
tienen ni la subcadena “aaa” ni “bab” y que son de longitud impar, por el m´etodo
siguiente:
a) Encontrar un AF que acepte las palabras que contienen “aaa”
b) Encontrar un AF que acepte las palabras que contienen “bab”
c) Encontrar un AF que acepte las palabras de longitud par
d) Combinar los AF de (a),(b) y (c) en un AF que acepta las palabras que contienen
“aaa” o “bab” o son de longitud par
e) Obtener un AF que acepte el complemento de lo que acepta (d)
f ) Convertir el AF de (e) a ER
10. Para la gram´atica de la p´agina 96, mostrar una derivaci´on de la palabra bababa.
11. Comprobar si la ER (a + ∧)(ba)∗
(b + ∧) es equivalente a la GR cuyas reglas son:
A → bB, B → aA, A → a, B → b, convirtiendo ambas a AFN, luego a AFD, y
comparando.
12. Verificar si es vac´ıa la intersecci´on del lenguaje representado por la ER (∧+b)(a+ab)∗
,
con el lenguaje representado por la GR cuyas reglas son: S → aS, S → bT, T →
aS, T → bU, U → aU, U → bU, U → a, U → b, utilizando el m´etodo siguiente: Primero
se convierten a AFD tanto la ER como la GR. Luego se calcula su intersecci´on, uti-
lizando el m´etodo expuesto en el cap´ıtulo precedente. Finalmente, el resultado del
paso anterior, que es un AFD, se compara con el AFD ({q0}, {a, b}, {((q0, a), q0),
((q0, b), q0)}, q0, {}), que acepta el lenguaje vac´ıo.
13. Probar las equivalencias:
a) R • Φ = Φ • R = Φ, para una ER R
b) Φ∗
= ∧
14. Demostrar que para todo alfabeto Σ, el lenguaje Σ∗
es contable. (Ayuda: Tratar de
ordenar las cadenas de Σ∗
de menor a mayor).
15. Suponer que a˜nadimos a las ER un operador, “−” que significa que R1 −R2 representa
las palabras representadas por R1 pero no por R2.
a) Definir formalmente el significado del operador “−”, usando el mapeo L(ER)
como se hizo con los dem´as operadores de las ER.
b) Usando este operador, proponer una ER para el lenguaje en {a, b} donde las
palabras no contienen la subcadena “abaab” ni la subcadena “bbbab”.
106 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES
c) Probar que el operador “−” no aumenta el poder de las ER, en el sentido de que
para toda ER con operador “−” hay una ER equivalente sin “−”.
16. Lo mismo del problema anterior, con un operador de intersecci´on, “&” tal que R1&R2
representa las palabras representadas simult´aneamente por R1 y por R2. En este caso
proponer una ER para el lenguaje en {a, b} donde las palabras contienen la subcadena
“abaab” y un n´umero impar de b’s.
17. Proponer una definici´on formal de configuraci´on, c´alculo y palabra aceptada para las
GT.
18. Describir formalmente la construcci´on del aut´omata (K, Σ, ∆, s, F) a partir de la
gram´atica regular (V, Σ, R, S).
19. Hacer la prueba de correcci´on de la gram´atica de la p´agina 100. Esto proveer´a una
prueba de correcci´on del AFD de la figura 3.6.
20. Usando el teorema de bombeo pruebe que los lenguajes siguientes no son regulares
a) {an
bm
| m > n} (Ayuda: En alg´un momento se puede necesitar considerar las
palabras de la forma an
bn+1
).
b) {an
bn+m
cm
}.
c) {an
bm
| |n − m| ≤ 3}
d) {a, b}∗
− {an
bn
}
21. Pruebe que los siguientes lenguajes son / no son regulares:
a) A = {w ∈ {a, b}∗
| |w| ≥ 7}
b) {an
bn
} ∩ A
c) {w = an
bn
} (Ayuda: use los m´etodos para combinar AFN’s)
d) {an
bn
| n ≤ 7}
22. Sean dos lenguajes, LA y LB tales que LA es subconjunto de LB.
a) Si LA es regular, ¿tambi´en lo ser´a necesariamente LB? (Probar)
b) Si LB es regular, ¿tambi´en lo ser´a necesariamente LA? (Probar)
23. Sean dos lenguajes no regulares, LA y LB.
a) ¿Su uni´on podr´ıa eventualmente ser regular? (Ayuda: considere dos lenguajes
complementarios).
b) ¿Su intersecci´on podr´ıa eventualmente ser regular? (Ayuda: considere intersec-
ciones finitas).
c) ¿Su concatenaci´on podr´ıa ser regular? (Ayuda: tomar {an
bm
|n ≥ m} como LA, y
buscar un LB “adecuado”).
3.7. EJERCICIOS 107
24. Sup´ongase un tipo de gram´aticas que llamaremos “semirregulares”, por asemejarse a
las gram´aticas regulares, en que las reglas son de alguna de las siguientes formas:
a) A → σB
b) A → Bσ
c) A → σ
donde σ es un terminal, y A y B son no terminales. ¿Ser´an equivalentes a las gram´aticas
regulares? Pruebe su respuesta.
25. Suponga las Expresiones Regulares con Salida (ERS), que son como las ER, pero tienen
asociada una salida a la entrada que representan. Se tiene la siguiente sintaxis: ER/S
significa que cuando se recibe una palabra representada por ER, se produce una salida
S. Las subexpresiones de una ERS se consideran similarmente. Por ejemplo, en la ERS
“(a/1 + b/0)∗
/00”, por cada “a” que se recibe se saca un “1”; por cada “b”, un “0”,
y al terminarse la cadena de entrada se produce un “00”. El operador “/” tiene la
precedencia m´as alta, o sea que la ERS “ab/0” significa que el “0” est´a asociado a
la “b”; puede ser necesario usar parentesis para establecer la precedencia deseada. En
general hay que distinguir entre el alfabeto de entrada ({a, b} en el ejemplo) y el de
salida ({0, 1} en el ejemplo).
a) Defina una ERS que al recibir cada par de “aa” consecutivas emita un “0”, mien-
tras que al recibir un par de “bb” consecutivas emita un “1”. (“aaa” contiene s´olo
un par).
b) Defina formalmente el conjunto de las ERS (Las ERS que se definir´ıan son las
ERS “formales”, con todos los parentesis y operadores necesarios, sin tomar en
cuenta cuestiones de precedencia de operadores, simplificaciones, etc.).
c) Proponga un procedimiento general para pasar de ERS a aut´omatas de Mealy.
d) Muestre su funcionamiento con la ERS del inciso (a).
108 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES
Parte II
Lenguajes libres de contexto y sus
m´aquinas
109
Automatas y lenguajes
Cap´ıtulo 4
Gram´aticas y lenguajes libres de
contexto
Los Lenguajes Libres de Contexto (abreviado LLC) forman una clase de lenguajes m´as
amplia que los Lenguajes Regulares, de acuerdo con la Jerarqu´ıa de Chomsky (ver secci´on
1.5). Estos lenguajes son importantes tanto desde el punto de vista te´orico, por relacionar
las llamadas Gram´aticas Libres de Contexto con los Aut´omatas de Pila, como desde el punto
de vista pr´actico, ya que casi todos los lenguajes de programaci´on est´an basados en los LLC.
En efecto, a partir de los a˜nos 70’s, con lenguajes como Pascal, se hizo com´un la pr´actica
de formalizar la sintaxis de los lenguajes de programaci´on usando herramientas basadas en
las Gram´aticas Libres de Contexto, que representan a los LLC. Por otra parte, el an´alisis
autom´atico de los LLC es computacionalmente mucho m´as eficiente que el de otras clases de
lenguajes m´as generales.
Retomaremos aqu´ı las nociones relacionadas con las gram´aticas, que fueron introducidas
en la secci´on 3.5, pero haciendo las adaptaciones necesarias para los LLC.
Una regla es una expresi´on de la forma α → β, en donde tanto α como β son cadenas
de s´ımbolos en donde pueden aparecer tanto elementos del alfabeto Σ (llamados constantes)
como unos nuevos s´ımbolos, llamados variables. 1
Una gram´atica es b´asicamente un conjunto de reglas. 2
Consideremos, por ejemplo, la siguiente gram´atica para producir un peque˜no subconjunto
del idioma espa˜nol:
1. <frase > → <sujeto > <predicado >
1
Trat´andose de los compiladores, se les llama “terminales” a los elementos de Σ, y “no terminales” a las
variables.
2
Adelante precisaremos las definiciones.
111
112 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO
2. <sujeto > → <articulo > <sustantivo >
3. <articulo > → el | la
4. <sustantivo > → perro | luna
5. <predicado > → <verbo >
6. <verbo > → brilla | corre
donde el s´ımbolo “|” separa varias alternativas. 3
En esta gram´atica se supone que las
variables son <frase >, <sujeto >, <articulo >, <sustantivo >, <predicado > y <verbo >,
mientras que las constantes son el, la, perro y luna. La variable <frase > ser´a considerada
el s´ımbolo inicial.
Como vimos en la secci´on 3.5, la idea para aplicar una gram´atica es que se parte de una
variable, llamada s´ımbolo inicial, y se aplican repetidamente las reglas gramaticales, hasta
que ya no haya variables en la palabra. En ese momento se dice que la palabra resultante
es generada por la gram´atica, o en forma equivalente, que la palabra resultante es parte del
lenguaje de esa gram´atica.
Por ejemplo, podemos usar la gram´atica que acabamos de presentar, para generar la frase
“el perro corre”. En efecto, partiendo del s´ımbolo inicial <frase >, aplicando la primera regla
podemos obtener <sujeto > <predicado >. Luego, reemplazando <sujeto > por medio de la
segunda regla, obtenemos <articulo > <sustantivo > <predicado >; aplicando la tercera
regla, llegamos a el <sustantivo > <predicado >. Por la cuarta regla se llega a el perro
<predicado >; por la quinta a el perro <verbo >, y finalmente, por la sexta, llegamos a el
perro corre.
Desde luego, usando esta misma gram´atica podemos producir frases que tienen menos
sentido, como “la perro brilla”. Para asegurar la coherencia en el uso de art´ıculos, sustantivos
y verbos se requerir´ıa una gram´atica m´as sofisticada, y a´un as´ı ser´ıa posible producir frases
sin sentido. 4
4.1. Gram´aticas y la jerarqu´ıa de Chomsky
Es posible restringir la forma de las reglas gramaticales de manera que se acomoden
a patrones predeterminados. Por ejemplo, se puede imponer que el lado izquierdo de las
reglas sea una variable, en vez de una cadena arbitraria de s´ımbolos. Al restringir las reglas
de la gram´atica se restringen tambi´en las palabras que se pueden generar; no es extra˜no
3
La notaci´on “|” es en realidad una abreviatura; una regla X → α|β es equivalente a las dos reglas X → α
y X → β.
4
Muchos pol´ıticos son versados en estas artes. . .
4.2. LENGUAJES Y GRAM ´ATICAS LIBRES DE CONTEXTO (LLC Y GLC) 113
que las reglas de formas m´as restringidas generan los lenguajes m´as reducidos. N. Chomsky
propuso [4] varias formas est´andares de reglas que se asocian a varias clases de lenguajes, que
orden´o de manera tal que forman una jerarqu´ıa, es decir, los lenguajes m´as primitivos est´an
incluidos en los m´as complejos. 5
As´ı tenemos las siguientes clases de gram´aticas, asociadas
a familias de lenguajes:
1. Gram´aticas regulares, o de tipo 3: las reglas son de la forma A → aB o bien A → a,
donde A y B son variables y a es constante. 6
Estas gram´aticas son capaces de describir
los lenguajes regulares.
2. Gram´aticas Libres de Contexto (GLC), o de tipo 2: las reglas son de la forma X → α,
donde X es una variable y α es una cadena que puede contener variables y constantes.
Estas gram´aticas producen los lenguajes Libres de Contexto (abreviado “LLC”).
3. Gram´aticas sensitivas al contexto o de tipo 1: las reglas son de la forma αAβ → αΓβ,
donde A es una variable y α,β y Γ son cadenas cualesquiera que pueden contener
variables y constantes.
4. Gram´aticas no restringidas, o de tipo 0, con reglas de la forma α → β, donde α no
puede ser vac´ıo, que generan los lenguajes llamados “recursivamente enumerables”. 7
Los lenguajes de tipo 0 incluyen a los de tipo 1, estos a los de tipo 2, etc. En la figura
1.3 ya se hab´ıa presentado la relaci´on entre los lenguajes de tipo 0, 2 y 3.
4.2. Lenguajes y gram´aticas libres de contexto (LLC y
GLC)
Podemos ver que la gram´atica del espa˜nol dada arriba es una GLC, pero no podr´ıa ser
una gram´atica regular, pues hay varias reglas que no corresponden al formato de las reglas
de las gram´aticas regulares. Se ve por lo tanto que el formato de las reglas es menos r´ıgido
en las GLC que en las gram´aticas regulares, y as´ı toda gram´atica regular es GLC pero no
viceversa.
Por ejemplo, el lenguaje {an
bn
} –que no es regular, como vimos en la secci´on 3.6– tiene
la gram´atica libre de contexto con las siguientes reglas:
1. S → aSb
2. S → ab
5
La jerarqu´ıa de Chomsky fue presentada inicialmente en la secci´on 1.5.
6
Estas gram´aticas ya fueron discutidas en el cap´ıtulo 3.5.
7
Las dos ´ultimas clases de lenguajes ser´an discutidas en el cap´ıtulo 6.
114 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO
Como vimos en el caso de las gram´aticas regulares, aplicar una regla X → α de una
gram´atica consiste en reemplazar X por α en una palabra. Por ejemplo, la regla S → aSb
se puede aplicar a una palabra aaSbb para obtener la palabra aaaSbbb, en donde es f´acil ver
que reemplazamos S por aSb.
Al proceso de aplicar una regla se le conoce como “paso de derivaci´on”, y se denota
usando una flecha gruesa “⇒”, como en aaSbb ⇒ aaaSbbb (aplicando una regla S → aSb).
Una secuencia de pasos de derivaci´on a partir de una variable especial de la gram´atica
llamada “s´ımbolo inicial” se llama simplemente derivaci´on. Por ejemplo, una derivaci´on de
la palabra “aaabbb” utilizando la gram´atica de {an
bn
} ser´ıa (suponiendo que S es el s´ımbolo
inicial):
S ⇒ aSb ⇒ aaSbb ⇒ aaabbb
Como un ejemplo adicional, la gram´atica con las reglas siguientes permite generar expre-
siones aritm´eticas con sumas y multiplicaciones de enteros:
1. E → E + T
2. E → T
3. T → T ∗ F
4. T → F
5. F → CF
6. F → C
7. C → 0|1|2|3|4|5|6|7|8|9
El s´ımbolo inicial aqu´ı es E, las constantes son +, ∗ y las cifras 0 . . . 9; E, T, F, C son
variables.
Con esta gram´atica podemos generar, por ejemplo, la expresi´on 25 + 3 ∗ 12 de la manera
siguiente:
4.3. FORMALIZACI ´ON DE LAS GLC 115
EXPRESION JUSTIFICACION
E S´ımbolo inicial, inicia derivaci´on
⇒ E + T Aplicaci´on 1a. regla
⇒ T + T 2a. regla, sobre la E
⇒ F + T 4a. regla, sobre la T izquierda
⇒ CF + T 5a. regla, sobre F
⇒ 2F + T 7a. regla
⇒ 2C + T 6a. regla
⇒ 25 + T 7a. regla
⇒ 25 + T ∗ F 3a. regla
⇒ 25 + F ∗ F 4a. regla
⇒ 25 + C ∗ F 6a. regla, sobre la F izquierda
⇒ 25 + 3 ∗ F 7a. regla
⇒ 25 + 3 ∗ CF 5a. regla
⇒ 25 + 3 ∗ 1F 7a. regla
⇒ 25 + 3 ∗ 1C 6a. regla
⇒ 25 + 3 ∗ 12 7a. regla
M´as adelante veremos una herramienta, los “´arboles de derivaci´on”, que permiten en-
contrar m´as f´acilmente y visualizar mejor la derivaci´on de las palabras a partir del s´ımbolo
inicial, aunque su formalizaci´on es menos directa que la simple derivaci´on paso a paso que
hemos mostrado.
4.3. Formalizaci´on de las GLC
Definici´on.- Una gram´atica libre de contexto es un cu´adruplo (V, Σ, R, S) en donde:
V es un alfabeto de variables, tambi´en llamadas no-terminales.
Σ es un alfabeto de constantes, tambi´en llamadas terminales. Suponemos que V y Σ
son disjuntos, esto es, V ∩ Σ = ∅.
R, el conjunto de reglas, es un subconjunto finito de V × (V ∪ Σ)∗
.
S, el s´ımbolo inicial, es un elemento de V .
Ejemplo.- La gram´atica de {an
bn
} que presentamos antes se representa formalmente como:
({S}, {a, b}, {(S, aSb), (S, ab)}, S)
Usualmente las reglas no se escriben como pares ordenados (X, α), sino como X → α;
esto es simplemente cuesti´on de notaci´on.
116 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO
Definici´on.- Una cadena α ∈ (V ∪ Σ)∗
es derivable a partir de una gram´atica (V, Σ, R, S)
si hay al menos una secuencia de pasos de derivaci´on que la produce a partir del s´ımbolo
inicial S, esto es:
S ⇒ . . . ⇒ α
Definici´on.- El lenguaje L(G) generado por una gram´atica (V, Σ, R, S) es el conjunto de
palabras hechas exclusivamente de constantes, que son derivables a partir del s´ımbolo inicial:
L = {w ∈ Σ∗
|S ⇒ . . . ⇒ w}
Es posible formalizar la definici´on de lenguaje aceptado sin tener que recurrir a los puntos
suspensivos “. . . ”, que son un recurso poco elegante en la formalizaci´on matem´atica desde el
punto de vista de que recurren a la imaginaci´on del lector para reemplazarlos por la sucesi´on
que se representa. A continuaci´on damos esta formalizaci´on alternativa.
Las reglas permiten establecer una relaci´on entre cadenas en (V ∪|Σ)∗
, que es la relaci´on
de derivaci´on, ⇒G para una gram´atica G. Esta relaci´on se define de la siguiente manera:
Definici´on.- α ⇒G β ssi existen cadenas x, y ∈ (V ∪ Σ)∗
, tales que α = xuy, β = xvy, y
existe una regla u → v en R.
La cerradura reflexiva y transitiva de ⇒G se denota por ⇒∗
G. Una palabra w ∈ Σ∗
es
derivable a partir de G si existe una secuencia de derivaci´on S ⇒∗
G w.
Definici´on.- El lenguaje generado por una gram´atica G, esto es, L(G), es igual a {w ∈
Σ∗
| S ⇒∗
G w}.
4.4. Dise˜no de GLC
El problema del dise˜no de GLC consiste en proponer, dado un lenguaje L, una GLC
G tal que su lenguaje generado es exactamente L. Decimos que una GLC G es correcta
con respecto al lenguaje dado L cuando el lenguaje generado por G no contiene palabras
que est´en fuera de L, es decir, L(G) ⊆ L, donde L(G) denota el lenguaje generado por
G. Similarmente, decimos que G es completa cuando G es capaz de generar al menos las
palabras de L, es decir, L ⊆ L(G) Al dise˜nar gram´aticas, es posible cometer las mismas dos
clases de errores que hemos mencionado para el dise˜no de expresiones regulares y aut´omatas
finitos:
1. Que “sobren palabras”, esto es, que la gram´atica genere algunas palabras que no deber´ıa
generar. En este caso, la gram´atica ser´ıa incorrecta.
4.4. DISE ˜NO DE GLC 117
2. Que “falten palabras”, esto es, que haya palabras en el lenguaje considerado para las
que no hay ninguna derivaci´on. En este caso, la gram´atica ser´ıa incompleta.
A´un cuando no hay m´etodos tan sistem´aticos para dise˜nar las GLC como los que vi-
mos para dise˜nar Expresiones Regulares o Aut´omatas Finitos, es posible al menos reutilizar
gram´aticas conocidas, y ya sea modificarlas para ajustar el lenguaje generado, o combinar
varias en una sola. Este ´ultimo es un m´etodo particularmente eficaz, en el que profundizare-
mos en esta secci´on.
4.4.1. Adaptaci´on de GLC
Muchas veces es posible hacer modificaciones sencillas a una gram´atica conocida para
obtener la del lenguaje requerido. Por ejemplo, sup´ongase que queremos obtener una gram´atica
que genere el lenguaje {an
bm
|n > m}. Una buena idea ser´ıa partir de la gram´atica que hemos
visto anteriormente, para el lenguaje similar {an
bn
}, cuya gram´atica tiene las siguientes re-
glas:
1. S → aSb
2. S → ab
Observamos que es necesario prever alguna regla para producir cualquier cantidad de a’s
antes de las b’s, pues hay palabras como aaaab que necesitan ser generadas. Para esto pro-
ponemos una regla S → aS. Aplicando iteradamente esta regla podemos producir palabras
como la mencionada:
S ⇒ aS ⇒ aaS ⇒ aaaS ⇒ aaaab
Sin embargo, a´un a˜nadiendo esta regla subsiste el problema de que podr´ıamos generar
palabras incorrectas, pues cualquier palabra con igual cantidad de a’s y de b’s se genera
utilizando ´unicamente las reglas de la gram´atica para {an
bn
}.
Hay al menos dos maneras de solucionar este problema:
1. Podemos pensar en que la a que asegura que haya m´as a’s que b’s se produzca al inicio
de la derivaci´on, mediante la inclusi´on de un nuevo s´ımbolo inicial, sea S0, que produce
aS, mediante una regla S0 → aS. Por ejemplo, generar´ıamos aaaab del modo siguiente:
S0 ⇒ aS ⇒ aaS ⇒ aaaS ⇒ aaaab
2. Otra manera es producir la a que garantiza m´as a’s que b’s al final de la derivaci´on,
reemplazando la regla S → ab por S → a. La misma palabra se derivar´ıa como:
S ⇒ aS ⇒ aaS ⇒ aaaSb ⇒ aaaab
118 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO
4.4.2. GLC para uni´on de lenguajes
Muchos lenguajes pueden ser expresados en forma ´util como la uni´on de otros dos lengua-
jes, para los cuales conocemos las gram´aticas que los generan. Por ejemplo, el lenguaje
{an
bm
|n = m} se puede expresar como la uni´on de los lenguajes:
{an
bm
|n = m} = {an
bm
|n < m} ∪ {an
bm
|n > m}
Para cada uno de los lenguajes que se unen es f´acil obtener una gram´atica –de hecho ya
hemos dise˜nado aqu´ı gram´aticas para lenguajes como ´estos.
La manera de combinar dos gram´aticas con s´ımbolos iniciales S1 y S2 respectivamente,
para producir la uni´on de los lenguajes originales, consiste en crear un nuevo s´ımbolo inicial
S (S1 y S2 dejan de ser iniciales), tomar las reglas tanto de una gram´atica como de otra,
y a˜nadir dos nuevas reglas, S → S1 y S → S2, para que el nuevo s´ımbolo inicial sea capaz
de generar cualquiera de los dos antiguos s´ımbolos iniciales; a partir del primer paso, se
contin´ua la derivaci´on utilizando alguna de las dos gram´aticas originales, sin utilizar las
reglas de la otra. Para garantizar esto ´ultimo se supone que las dos gram´aticas originales no
tienen ninguna variable en com´un.
Definimos formalmente la gram´atica que genera la uni´on de lenguajes de la manera
siguiente: Sean G1 = (V1, Σ1, R1, S1) y G2 = (V2, Σ2, R2, S2) dos GLC; se puede suponer,
sin p´erdida de generalidad, que las variables de G1 y G2 son disjuntas. La GLC que genera
L(G1) ∪ L(G2) es
G = (V1 ∪ V2 ∪ {S}, Σ1 ∪ Σ2, R1 ∪ R2 ∪ {S → S1, S → S2}, S)
.
En efecto, para una palabra w ∈ L(G1) la derivaci´on comienza aplicando S → S1, y
despu´es se contin´ua con la derivaci´on a partir de S1
8
Similarmente se hace para una palabra
w ∈ L(G2).
Por ejemplo, para el lenguaje {an
bm
|n = m} = {an
bm
|n < m} ∪ {an
bm
|n > m}, las
gram´aticas originales tendr´ıan reglas:
{an
bm
|n > m} {an
bm
|n < m}
1) S1 → aS1b 4) S2 → aS2b
2) S1 → aS1 5) S2 → S2b
3) S1 → a 6) S2 → b
La gram´atica combinada tendr´ıa las reglas 1-6, mas las reglas S → S1 y S → S2. El
s´ımbolo inicial es S. As´ı, por ejemplo, para derivar la palabra aaaab seguimos los pasos:
8
recu´erdese que por hip´otesis w ∈ L(G1).
4.4. DISE ˜NO DE GLC 119
S ⇒ S1 ⇒ aS1 ⇒ aaS1 ⇒ aaaS1 ⇒ aaaaS1 ⇒ aaaab
4.4.3. Mezcla de gram´aticas
En ocasiones es necesario combinar dos gram´aticas, de una manera similar a la uni´on que
acabamos de presentar, pero permitiendo que las gram´aticas a combinar tengan un mismo
s´ımbolo inicial. Llamamos a esto mezcla de gram´aticas.
Ejemplo.- Dise˜nar una GLC para el lenguaje {an
bm
, n ≤ m ≤ 2n}, esto es, donde la
cantidad de b’s est´a entre la cantidad de a’s y el doble de ´esta, como en las palabras aabbb,
aabb y aabbbb. Una soluci´on es “mezclar” una GLC para el lenguaje {an
bn
con otra para el
lenguaje {an
b2n
, cuyas GLC son respectivamente:
{an
bn
} {an
b2n
}
1) S → aSb 3) S → aSbb
2) S → ε 4) S → ε
La GLC “mezclada” contendr´ıa simplemente la uni´on de todas las reglas de las dos
gram´aticas. 9
As´ı, por ejemplo, para generar la palabra aabbb, se tendr´ıa la siguiente derivaci´on:
S ⇒1 aSb ⇒3 aaSbbb ⇒2 aabbb
En esta derivaci´on puede apreciarse que es posible obtener una palabra “intermedia”
entre aabb y aabbbb, como es aabbb simplemente aplicando algunas veces la regla 1, y otras
la regla 3, seg´un se requiera para la palabra que hay que derivar.
4.4.4. GLC para la concatenaci´on de lenguajes
En ocasiones un lenguaje L puede ser expresado como la concatenaci´on de otros dos L1
y L2, esto es, L = L1L2. Por ejemplo, el lenguaje {an
bm
|n > m} puede ser expresado como
la concatenaci´on de ak
con {an
bn
}, y desde luego es f´acil encontrar una gram´atica para ak
,
mientras que la de {an
bn
} ya la conoc´ıamos. 10
Ahora bien, hay una manera de combinar
modularmente las gram´aticas de L1 y L2 para obtener la de L.
9
Desde luego, siendo las reglas 2 y 4 id´enticas, resultan en una s´ola regla al unir las gram´aticas, pues en
los conjuntos no hay repetici´on.
10
Ya hab´ıamos obtenido la gram´atica de {an
bm
|n > m} por modificaci´on de otra gram´atica, pero el m´etodo
aqu´ı mostrado tiene la ventaja de que es modular.
120 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO
En efecto, para obtener las reglas de la nueva gram´atica, simplemente juntamos las reglas
de las originales –las cuales tienen s´ımbolos iniciales S1 y S2– y agregamos una nueva regla
S → S1S2, haciendo adem´as a S el nuevo s´ımbolo inicial.
Ejemplo.- Definimos el lenguaje de los “prefijos pal´ındromos” como aquel formado por
palabras que tienen una parte izquierda de m´as de un caracter que es pal´ındromo (se lee
igual de izquierda a derecha que de derecha a izquierda). Por ejemplo, las palabras aabab,
aba y aabaa 11
son prefijos pal´ındromos, mientras que las palabras baa, a y abbb no lo son.
Proponer una GLC que genere exactamente el lenguaje de los prefijos pal´ındromos en el
alfabeto {a, b}.
El problema parece dif´ıcil, pero podemos considerar cada palabra de este lenguaje como
formada por dos partes: la parte pal´ındroma y el resto de la palabra. Dicho de otra forma, el
lenguaje LPP de los prefijos pal´ındromos es igual a la concatenaci´on de LP y LR, donde LP
es el lenguaje de los pal´ındromos y LR genera la parte restante de las palabras. El lenguaje
de los pal´ındromos en {a, b} tiene una gram´atica muy simple, con las siguientes reglas:
1. S → aSa
2. S → bSb
3. S → a (pal´ındromos impares)
4. S → b (pal´ındromos impares)
5. S → ε (pal´ındromos pares)
Por ejemplo, la palabra aabaa se puede derivar de la siguiente manera:
S ⇒1 aSa ⇒1 aaSaa ⇒4 aabaa
Por otra parte, como la “parte restante” que viene despu´es de la parte pal´ındroma puede
ser cualquier cosa, est´a claro que LR es simplemente {a, b}∗
, que por ser regular es LLC,
y que tiene una GLC con las reglas: T → aT, T → bT, T → ε. La GLC de LPP es la
combinaci´on de ambas gram´aticas, de acuerdo con la f´ormula de concatenaci´on dada m´as
arriba.
Formalmente, si tenemos las gram´aticas G1 = (V1, Σ1, R1, S1) y G2 = (V2, Σ2, R2, S2), el
lenguaje L(G1)L(G2) es generado por la siguiente GLC:
G = (V1 ∪ V2 ∪ {S}, Σ1 ∪ Σ2, R1 ∪ R2 ∪ {S → S1S2}, S)
.
11
Esta ´ultima puede ser vista de dos maneras distintas como prefijo pal´ındromo.
4.5. ARBOLES DE DERIVACI ´ON 121
S
S S
( S ) ( )
S S
( ) ( )
Figura 4.1: Par´entesis bien balanceados
4.5. Arboles de derivaci´on
Las GLC tienen la propiedad de que las derivaciones pueden ser representadas en forma
arborescente. Por ejemplo, consid´erese la gram´atica siguiente para producir el lenguaje de
los par´entesis bien balanceados, que tiene palabras como (()), ()(), (()())(), pero no a (() ni
)(: 12
1. S → SS
2. S → (S)
3. S → ()
Usando esta gram´atica, la palabra (()())() puede ser derivada de la manera que se ilustra
en la figura 4.1. En dicha figura se puede apreciar la estructura que se encuentra impl´ıcita en
la palabra (()())(). A estas estructuras se les llama ´arboles de derivaci´on, o tambi´en ´arboles
de compilaci´on –por usarse extensivamente en los compiladores– y son de vital importancia
para la teor´ıa de los compiladores de los lenguajes de programaci´on.
Se puede considerar que un ´arbol de derivaci´on es m´as abstracto que una derivaci´on
“lineal” –es decir, una sucesi´on S ⇒ . . . ⇒ w– en el sentido de que para un solo ´arbol de
derivaci´on puede haber varias derivaciones lineales, seg´un el orden en que se decida “ex-
pandir” los no terminales. Por ejemplo, para el ´arbol de la figura arriba, hay al menos las
derivaciones siguientes (anotamos como sub´ındice de ⇒ el n´umero de regla aplicado):
1. S ⇒1 SS ⇒2 (S)S ⇒3 (S)() ⇒1 (SS)() ⇒3 (S())() ⇒3 (()())().
2. S ⇒1 SS ⇒3 S() ⇒2 (S)() ⇒1 (SS)() ⇒3 (()S)() ⇒3 (()())().
122 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO
Formalmente, un ´arbol de derivaci´on es un grafo dirigido arborescente 13
definido de la
manera siguiente:
Definici´on.- Sea G = (V, Σ, R, S) una GLC. Entonces un ´arbol de derivaci´on cumple las
siguientes propiedades:
1. Cada nodo tiene una etiqueta 14
2. La ra´ız tiene etiqueta S.
3. La etiqueta de los nodos que no son hojas debe estar en V , y las de las hojas en Σ∪{ε}.
4. Si un nodo n tiene etiqueta A, y los nodos n1, . . . , nm son sus hijos (de izquierda a
derecha), con etiquetas respectivamente A1, . . . , Am, entonces A → A1, . . . , Am ∈ R.
Definici´on.- La cadena de caracteres que resulta de concatenar los caracteres termi-
nales encontrados en las etiquetas de los nodos hoja, en un recorrido en orden del ´arbol
de derivaci´on, se llama el producto del ´arbol.
Es decir, al efectuar un recorrido en orden del ´arbol de derivaci´on recuperamos la cadena
a partir de la cual se construy´o dicho ´arbol. As´ı, el problema de “compilar” una cadena de
caracteres consiste en construir el ´arbol de derivaci´on a partir del producto de ´este.
4.5.1. Ambig¨uedad en GLC
La correspondencia entre los ´arboles de derivaci´on y sus productos no es necesariamente
biun´ıvoca. En efecto, hay GLC en las cuales para ciertas palabras hay m´as de un ´arbol de
derivaci´on. Sea por ejemplo la siguiente GLC, para expresiones aritm´eticas sobre las variables
x y y.
1. E → E + E
2. E → E ∗ E
3. E → x
4. E → y
Con esta gram´atica, para la expresi´on x + y ∗ x existen los dos ´arboles de derivaci´on de
las figuras 4.2(a) y (b).
12
Esta gram´atica puede ser dise˜nada adaptando la de {an
bn
}, reemplazando a por ( y b por ), y agregando
la primera regla, que toma en cuenta la posibilidad de tener varios grupos de par´entesis anidados.
13
Un grafo arborescente se caracteriza por no tener ciclos, y por el hecho de que existe una trayectoria
´unica para llegar de la ra´ız a un nodo cualquiera.
14
Formalmente, una etiqueta es una funci´on que va del conjunto de nodos al conjunto de s´ımbolos de
donde se toman las etiquetas, en este caso V ∪ Σ ∪ {ε}.
4.5. ARBOLES DE DERIVACI ´ON 123
x + y * x
E
E
(a)
x + y * x
E
E
(b)
Figura 4.2: Dos ´arboles para x + y ∗ x
En este ejemplo, el hecho de que existan dos ´arboles de derivaci´on para una misma expre-
si´on es indeseable, pues cada ´arbol indica una manera distinta de estructurar la expresi´on.
En efecto, en el ´arbol de la izquierda, al resultado de la suma (x + y) se multiplica con x,
mientras que en el de la derecha sumamos x al resultado de multiplicar x con y; por lo tanto
el significado que se asocia a ambas expresiones puede ser distinto.
Se dice que una gram´atica es ambigua ssi alguna palabra del lenguaje que genera tiene
m´as de un ´arbol de derivaci´on. N´otese que la ambig¨uedad, como la estamos definiendo, es
una propiedad de la gram´atica, no de su lenguaje generado. Para un mismo lenguaje puede
haber una gram´atica ambigua y una no ambigua.
Existen t´ecnicas para eliminar la ambig¨uedad de una GLC; en general estas t´ecnicas con-
sisten en introducir nuevos no-terminales de modo que se eliminen los ´arboles de derivaci´on
no deseados. Para nuestro ejemplo de los operadores aritm´eticos, es cl´asica la soluci´on que
consiste en introducir, adem´as de la categor´ıa de las Expresiones (no-terminal E), la de los
t´erminos (T) y factores (F), dando la gram´atica con las reglas siguientes:
1. E → E + T
2. E → T
3. T → T ∗ F
4. T → F
5. F → (E)
6. F → x
7. F → y
Con esta nueva GLC, el ´arbol de derivaci´on de la figura 4.2(a) se elimina, quedando
finalmente una adaptaci´on del ´arbol de 4.2(b) a la GLC con t´erminos y factores, lo cual se
deja como ejercicio al lector.
124 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO
Sin embargo, estas t´ecnicas de eliminaci´on de ambig¨uedad no son siempre aplicables, y de
hecho hay algunos LLC para los que es imposible encontrar una gram´atica libre de contexto
no ambigua; estos lenguajes se llaman inherentemente ambiguos. Un ejemplo, dado en [7]
junto con la prueba correspondiente, es el siguiente:
L = {an
bn
cm
dm
} ∪ {an
bm
cm
dm
}, n≥1, m≥1
4.5.2. Derivaciones izquierda y derecha
En una gram´atica no ambigua G, a una palabra w ∈ L(G) corresponde un s´olo ´arbol
de derivaci´on AG; sin embargo, puede haber varias derivaciones para obtener w a partir del
s´ımbolo inicial, S ⇒ . . . ⇒ w. Una manera de hacer ´unica la manera de derivar una palabra
consiste en restringir la elecci´on del s´ımbolo que se va a “expandir” en curso de la derivaci´on.
Por ejemplo, si tenemos en cierto momento de la derivaci´on la palabra (S())(S), en el paso
siguiente podemos aplicar alguna regla de la gram´atica ya sea a la primera o a la segunda de
las S. En cambio, si nos restringimos a aplicar las reglas solo al no terminal que se encuentre
m´as a la izquierda en la palabra, entonces habr´a una sola opci´on posible.
Desde luego, el hecho de elegir el no terminal m´as a la izquierda es arbitrario; igual
podemos elegir el no terminal m´as a la derecha.
Definici´on.- Se llama derivaci´on izquierda de una palabra w a una secuencia S ⇒ w1 ⇒
. . . ⇒ wn ⇒ w en donde, para pasar de wi a wi+1, se aplica una regla al no terminal de wi
que se encuentre m´as a la izquierda. Similarmente se puede definir una derivaci´on derecha.
Ejemplo.- Para la gram´atica no ambigua con reglas S → AB, A → a, B → b, la palabra
ab se produce con la derivaci´on izquierda:
S ⇒ AB ⇒ aB ⇒ ab
mientras que tambi´en se puede producir con la derivaci´on derecha:
S ⇒ AB ⇒ Ab ⇒ ab
Teorema.- Para una gram´atica no ambigua G, y una palabra w ∈ L(G), existe solamente
una derivaci´on izquierda S ⇒∗
w.
Prueba: La derivaci´on izquierda corresponde a un recorrido en preorden del ´arbol de
derivaci´on, expandiendo los no terminales que vamos encontrando en el camino. Ahora bien,
se sabe que existe un solo recorrido en preorden para un ´arbol dado.
4.6. PRUEBAS DE CORRECCI ´ON Y COMPLETEZ 125
4.6. Pruebas de correcci´on y completez
Es posible en general hacer pruebas matem´aticas de que una gram´atica corresponde a
un lenguaje dado. Esto tiene la gran ventaja de que dicha correspondencia ya no es una
simple convicci´on intuitiva, sino que adquiere el rango de certeza matem´atica. En ciertas
aplicaciones, donde es extremadamente importante asegurarse de que no hay errores, las
pruebas que garantizan esta certeza son de un gran valor.
Las pruebas que permiten establecer la correspondencia entre un lenguaje y una gram´atica
dados requieren dos partes:
1. Prueba de correcci´on, que garantiza que todas las palabras que se producen al utilizar
la gram´atica efectivamente corresponden a la descripci´on del lenguaje dado;
2. Prueba de completez, que se asegura de que al producir palabras con la gram´atica, no
falten palabras del lenguaje dado.
En general las pruebas de correcci´on son m´as sencillas y siguen un patr´on m´as predecible
que las de completez, como podremos constatar en los ejemplos que siguen. Las pruebas
de correcci´on se hacen por inducci´on, m´as precisamente por inducci´on en la longitud de la
derivaci´on.
La idea de una prueba por inducci´on basada en la longitud de la derivaci´on es esencial-
mente mostrar que todas las palabras por las que se pasa en medio del proceso de derivaci´on
cumplen una propiedad, que es b´asicamente el enunciado del lenguaje. Dichas pruebas siguen
el siguiente esquema:
1. Lo primero que hay que hacer es establecer un enunciado, relacionado con la definici´on
del lenguaje considerado, pero algo modificado de manera que se pueda aplicar a las
palabras intermedias en el proceso de derivaci´on, las cuales pueden contener variables
tanto como constantes.
2. Luego se prueba, como base de la inducci´on, que para las palabras intermedias de la
derivaci´on producidas en al menos k0 pasos, la propiedad se cumple.
3. A continuaci´on se hace el paso de inducci´on propiamente dicho. Para esto primero se
supone que la propiedad se cumple tras haber hecho i pasos de derivaci´on (esto es la
hip´otesis de inducci´on), y luego se prueba que tambi´en se cumple al hacer un paso m´as
de derivaci´on (esto es, para las palabras derivadas en i+1 pasos). Al concluir este paso,
se ha probado que todas las palabras intermedias en el proceso de derivaci´on cumplen
con la propiedad.
4. Finalmente, hay que particularizar la propiedad para la ´ultima palabra de la derivaci´on,
que es la que s´olo contiene constantes. Con esto se termina la prueba.
126 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO
Ejemplo.- Probar la correcci´on de la gram´atica siguiente que genera el lenguaje P de los
par´entesis bien balanceados (presentamos las reglas):
1. S → (S)
2. S → SS
3. S → ()
Prueba de correcci´on.- Para hacer la prueba por inducci´on en la longitud de la derivaci´on,
necesitamos primero generalizar el enunciado de forma que sea aplicable a las palabras con
variables que aparecen a la mitad de la derivaci´on. Esto es, necesitamos un lenguaje extendido
donde se admita que las palabras contengan variables. Hacemos la siguiente definici´on:
PX = {α ∈ (V ∪ Σ)∗
|elim(S, α) ∈ P}
Es decir, eliminando las “S” de las palabras de PX, obtenemos palabras de par´entesis
bien balanceados.
Base de la inducci´on.- En 0 pasos, se tiene (trivialmente) una palabra en PX.
Hip´otesis de inducci´on.- En k pasos, se generan palabras en PX, de la forma αSβ, con
α, β ∈ V ∗
.
Paso de inducci´on.- A la palabra αSβ, generada en k pasos, se le pueden aplicar las
reglas 1-3. Evidentemente la aplicaci´on de las reglas 2 y 3 genera palabras αSSβ y αβ en
LX. Aunque es menos evidente, la aplicaci´on de la regla 1 produce palabras α(S)β, que
tambi´en est´an en LX.
Finalmente, la ´ultima regla que debe aplicarse es la 3, lo que nos da una palabra con los
par´entesis bien balanceados. QED
Las pruebas de completez muestran que todas las palabras del lenguaje en cuesti´on
pueden efectivamente ser generadas utilizando la gram´atica dada. Esto puede ser en ocasiones
dif´ıcil, y no hay “recetas” tan uniformes como para las pruebas de correcci´on.
N´otese que la completez y la correcci´on de una gram´atica son propiedades independientes,
y una gram´atica dada puede tener una, las dos o ninguna. Por ejemplo, si eliminamos la regla
2 de la gram´atica, de todas maneras la prueba de correcci´on que acabamos de hacer seguir´ıa
funcionando, pero en cambio no habr´a completez, porque algunas palabras, como (())(()) no
pueden ser generadas por la gram´atica.
Vamos a presentar un ejemplo de prueba de completez para la gram´atica de los par´entesis
bien balanceados dada m´as arriba, para mostrar el tipo de consideraciones que hay que hacer
para llevar a t´ermino la prueba.
4.7. GRAM ´ATICAS LIBRES Y SENSITIVAS AL CONTEXTO 127
Prueba de completez.- En el caso que nos ocupa, vamos a hacer una prueba por inducci´on
sobre la longitud de la palabra.
Base de la inducci´on: La gram´atica puede generar todas las palabras de longitud 2 (Por
la regla 3).
Hip´otesis de inducci´on: La gram´atica puede generar todas las palabras de longitud menor
o igual a k. (Claramente k es par).
Paso de inducci´on: Notamos que para una palabra dada w en P (esto es, que tiene los
par´entesis bien balanceados), |w| = k + 2 s´olo hay dos posibilidades: 15
.
1. w se puede partir en w1 y w2, w = w1w2, de forma tal que w1, w2 ∈ P.
2. w no se puede partir en dos partes.
En el caso 1, aplicando inicialmente la regla S → SS, se debe poder generar w1 a partir
de la S de la izquierda, por hip´otesis de inducci´on, ya que |w1|≤k. Similarmente para w2,
con la S de la derecha.
En el caso 2, w = (w ), donde w ∈ P, es decir, al quitar los dos par´entesis m´as externos se
tiene una palabra con par´entesis bien balanceados (¿Porqu´e?). Como |w | = k, por hip´otesis
de inducci´on w se puede generar con la gram´atica. La palabra w se puede entonces generar
aplicando primero la regla S → (S), y luego continuando con la derivaci´on de w que existe
por hip´otesis de inducci´on.
Esto completa la prueba. QED
4.7. Gram´aticas libres y sensitivas al contexto
Las GLC deben su nombre a una comparaci´on con otro tipo de gram´aticas, las llamadas
sensitivas al contexto, definidas arriba, donde para una regla α1Aα2 → α1βα2 , el s´ımbolo
A solo puede generar β cuando se encuentra rodeado por el “contexto” α1 . . . α2. En cambio,
en las GLC no es necesario especificar un contexto, por esto se llaman “libres de contexto”.
Las gram´aticas sensitivas al contexto son estrictamente m´as poderosas que las GLC; un
ejemplo es el lenguaje de las cadenas de la forma an
bn
cn
, para el que no hay ninguna GLC.
En cambio, una gram´atica sensitiva al contexto ser´ıa la siguiente (s´olo damos las reglas): 16
15
El paso de inducci´on se hace en k + 2 y no en k + 1 porque todas las palabras en P tienen longitud par
16
Esta gram´atica produce palabras de al menos 6 caracteres, o sea de el lenguaje {an
bn
cn
|n > 1}.
128 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO
1. S → aBTc 6. Y X → AX
2. T → ABTc 7. AX → AB
3. T → ABc 8. aA → aa
4. BA → BX 9. aB → ab
5. BX → Y X 10. bB → bb
En esta gram´atica, las reglas 1 a 3 generan A, a, B y c no necesariamente en orden (las
A y B van a estar alternadas). Luego las reglas 4 a 7 permiten reordenar las A y B, para que
todas las A queden antes que todas las B, 17
y finalmente las reglas 8 a 10 permiten generar
los terminales solamente cuando las letras est´an en el orden correcto. Como un ejemplo, la
palabra aaabbbccc se puede generar de la forma siguiente:
S ⇒1 aBTc ⇒2 aBABTcc ⇒3 aBABABccc ⇒4 aBXBXBccc ⇒5 aY XY XBccc
⇒6 aAXAXBccc ⇒7 aABABBccc ⇒4 aABXBBccc ⇒5 aAY XBBccc ⇒6 aAAXBBccc
⇒7 aAABBBccc ⇒8 aaABBBccc ⇒8 aaaBBBccc ⇒9 aaabBBccc ⇒10 aaabbBccc ⇒10
aaabbbccc.
4.8. Transformaci´on de las GLC y Formas Normales
En muchas situaciones se considera conveniente modificar las reglas de la gram´atica,
de manera que cumplan las reglas con propiedades tales como no producir la cadena vac´ıa
del lado derecho, o bien simplemente por cuestiones de estandarizaci´on o facilidad de im-
plementaci´on computacional. Desde luego, cuando hablamos de “modificar las reglas de la
gram´atica”, se entiende que esto debe hacerse sin modificar el lenguaje generado.
Por ejemplo, la presencia de reglas que producen vac´ıo en la gram´atica puede ser fuente de
dificultades tales como la ambig¨uedad, o la posibilidad de tener derivaciones arbitrariamente
largas. Tomemos por ejemplo la siguiente gram´atica para los par´entesis bien balanceados
(damos s´olo las reglas):
1. S → SS
2. S → (S)
3. S → ε
Con esta gram´atica es posible hacer derivaciones arbitrariamente largas de una palabra
tan sencilla como “()”(el sub´ındice de las flechas indica la regla utilizada):
17
De hecho bastar´ıa con una regla BA → AB, salvo que ´esta no cumple con el formato de las gram´aticas
sensitivas al contexto.
4.8. TRANSFORMACI ´ON DE LAS GLC Y FORMAS NORMALES 129
S ⇒1 SS ⇒1 SSS ⇒1 . . . ⇒3 SSS ⇒3 SS ⇒3 S ⇒2 (S) ⇒3 ()
Si pudi´eramos tener una gram´atica equivalente, pero sin reglas que produzcan la cadena
vac´ıa, ya no ser´ıa posible hacer derivaciones arbitrariamente largas. Esto puede ser una
ventaja a la hora de determinar si una palabra se deriva o no de una gram´atica (ver secci´on
4.10).
4.8.1. Eliminaci´on de reglas A → ε
Consideremos nuevamente la gram´atica para los par´entesis bien balanceados. Si queremos
una GLC equivalente, pero sin emplear producciones vac´ıas (como S → ε), una idea ser´ıa
analizar “en reversa” la derivaci´on de donde viene la S que queremos cambiar por ε. S´olo
hay otras dos reglas en la gram´atica, de modo que esa S tuvo que ser generada ya sea por
S → (S) o por S → SS. En el caso de S → (S), una soluci´on ser´ıa, en vez de hacer la
derivaci´on
S ⇒ . . . ⇒ αSβ ⇒ α(S)β ⇒ α()β, α ∈ Σ∗
, β ∈ (Σ ∪ V )∗
mejor hacer directamente la derivaci´on
S ⇒ . . . ⇒ αSβ ⇒ α()β
agregando una regla S ⇒ () a la gram´atica. Y en caso de que la S provenga de la regla
S → SS, se puede cambiar la derivaci´on
S ⇒ . . . ⇒ αSβ ⇒ αSSβ ⇒ αSβ
por la derivaci´on
S ⇒ . . . ⇒ αSβ ⇒ αSβ
usando una nueva regla S → S, o mejor a´un, simplemente reemplazarla por
S ⇒ . . . ⇒ αSβ
sin ninguna regla adicional (la parte de la derivaci´on αSβ ⇒ αSSβ ⇒ αSβ desaparece por
completo, pues no sirve de nada).
Resumiendo, la idea que permite eliminar las reglas A → ε es la de irse un paso atr´as,
para examinar de d´onde provino el no-terminal A que queremos eliminar, y por cada regla
B → αAβ de la gram´atica agregar una regla B → αβ , en que directamente ya se reemplaz´o A
130 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO
por ε. Una vez hecho esto, se pueden suprimir todas las reglas de la forma A → ε, pues
resultan redundantes.
Por ejemplo, sea la GLC de los par´entesis bien balanceados:
S → (S), S → SS, S → ε.
Aplicando mec´anicamente la transformaci´on a dicha gram´atica, se tiene:
S → (S), S → SS, S → (), S → S
La regla S → S es evidentemente in´util y se puede eliminar, pero dejemos esto para el
siguiente p´arrafo, en que nos ocuparemos de la eliminaci´on de reglas de esa forma.
Otra cuesti´on m´as importante a´un debe haber saltado a la vista escrutadora del lector
perspicaz: ¡la nueva GLC no es exactamente equivalente a la anterior! En efecto, la GLC
original generaba la palabra vac´ıa ε, mientras que la GLC transformada no la genera. Desde
luego, el hecho de que una GLC contenga reglas de la forma A → ε no significa que el lenguaje
contenga forzosamente a la palabra vac´ıa; consid´erese por ejemplo la siguiente gram´atica:
S → (A), A → (A), A → AA, A → ε
cuyo lenguaje no contiene a la palabra vac´ıa.
En caso de que el lenguaje en cuesti´on realmente contenga a la palabra vac´ıa, no es
posible estrictamente eliminar todas las producciones vac´ıas sin alterar el significado de la
gram´atica. En estos casos vamos a expresar el lenguaje como la uni´on {ε} ∪ L(G ), donde G
es la gram´atica transformada. Este peque˜no ajuste no modifica los resultados que obtuvimos
arriba.
4.8.2. Eliminaci´on de reglas A → B
Supongamos ahora que se tiene la gram´atica con las reglas siguientes:
S → (S), S → BB, S → (), B → S
Claramente esta GLC es equivalente a la gram´atica dada anteriormente para generar los
par´entesis bien balanceados. La ´unica diferencia es que, en vez de utilizar la regla S → SS, se
tiene una regla S → BB, y luego las B se transforman en S por la regla B → S. Pero, ¿para
que usar esos intermediarios, como B en este caso, cuando es posible generar directamente
SS a partir de S? La idea de eliminar las reglas de la forma A → B viene de observar que
dichas reglas no producen nada ´util, simplemente introducen s´ımbolos intermediarios, que
es posible eliminar. A continuaci´on veremos c´omo.
4.8. TRANSFORMACI ´ON DE LAS GLC Y FORMAS NORMALES 131
Supongamos que hay reglas A → B y B → Γi en la gram´atica, entonces es posible a˜nadir
reglas A → Γi sin modificar el lenguaje. Ahora bien, si hacemos esto siempre que sea posible,
las reglas de la forma A → B se vuelven in´utiles, pues toda derivaci´on:
. . . ⇒ αAβ ⇒ αBβ ⇒ αΓiβ ⇒ . . .
puede transformarse en:
. . . ⇒ αAβ ⇒ αΓiβ ⇒ . . .
sin modificar el lenguaje. Esto prueba que la gram´atica modificada es equivalente a la original.
Por ejemplo, aplicando esta transformaci´on a la gram´atica del ejemplo, la regla “in´util”,
que tratamos de eliminar, es B → S. Se producen las nuevas reglas siguientes:
B → (S), al combinar B → S con S → (S)
B → BB, al combinar B → S con S → BB
B → (), al combinar B → S con S → ()
La gram´atica queda entonces con las reglas:
S → (S), S → BB, S → (), B → (S), B → BB, B → ()
4.8.3. Eliminaci´on de reglas inaccesibles
Consid´erese una gram´atica con reglas:
S → aXbb, X → bSa, Y → SX
Es f´acil comprender que la tercera regla es in´util, porque no hay nadie que produzca la
Y necesaria para que dicha regla se aplique. A reglas como ´estas se les llama inaccesibles.
Definici´on.- Una regla X → α de una gram´atica (V, Σ, R, S) es inaccesible si no hay una
derivaci´on S ⇒ α1Xα2, donde α1, α2 ∈ (V ∪ Σ)∗
.
En t´erminos pr´acticos, si vemos que una variable X no aparece en el lado derecho de
ninguna regla de la gram´atica, podemos asegurar sin arriesgarnos que la regla X → α es
inaccesible.
Para eliminar una regla inaccesible no se necesita hacer ninguna otra modificaci´on a
la gram´atica mas que simplemente borrarla. La equivalencia de la gram´atica sin la regla
inaccesible y la original est´a garantizada por el hecho de que dicha regla no participa en
ninguna derivaci´on.
132 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO
4.8.4. Formas Normales
En ocasiones es necesario expresar una GLC siguiendo un formato m´as preciso de las
reglas que la simple forma A → α. Estos “est´andares” reciben el nombre de formas normales.
Vamos a estudiar una de las formas normales m´as conocidas, la forma normal de Chomsky
(FNCH).
La FNCH consiste en que las reglas pueden tener dos formas:
1. A → a, a ∈ Σ
2. A → BC, con B, C ∈ V
Esta forma normal, aparentemente tan arbitraria, tiene por objeto facilitar el an´alisis
sint´actico de una palabra de entrada, siguiendo la estrategia siguiente: Se trata de construir
el ´arbol de derivaci´on de w de arriba hacia abajo (llamada “top-down” en ingl´es), y por
consiguiente se supone inicialmente que el s´ımbolo inicial S puede producir la palabra w. En
seguida se procede a dividir la palabra de entrada w en dos pedazos, w = αβ , para luego
tomar alguna regla S → AB , y tratar de verificar si se puede derivar a a partir de A y b a
partir de B, es decir: S ⇒ . . . ⇒ w ssi:
1. w ∈ Σ, hay una regla S → w
2. w = αβ, hay una regla S → AB, con A ⇒ . . . ⇒ α, y B ⇒ . . . ⇒ β
Por ejemplo, consid´erese la siguiente gram´atica para el lenguaje de los par´entesis bien
balanceados, en forma normal de Chomsky (damos sus reglas): 18
1. S → XY
2. X → (
3. Y → SZ
4. Z →)
5. S → SS
6. S → XZ
Supongamos que tenemos una palabra como (())(), y queremos verificar si se puede derivar
a partir de esta gram´atica. Hay que “partir” dicha palabra en dos pedazos, y escoger alguna
18
Luego veremos c´omo calcular esta forma normal.
4.8. TRANSFORMACI ´ON DE LAS GLC Y FORMAS NORMALES 133
S
S S
X Y
S(
X
(
Z
)
X
(Z
Z
)
)
Figura 4.3: Arbol de la palabra (())()
regla que produzca dos variables. Escogemos la quinta regla, S → SS, y partimos la palabra
en los pedazos (()) y (). Para que SS pueda generar (())() ahora se necesitar´a que la primera
S pueda generar (()), y la segunda pueda generar (). Estos son subproblemas muy similares
al problema inicial. Tomemos el primero, es decir, a partir de S generar (()). Escogemos la
regla S → XY , y partimos la palabra en ( y ()). Ahora X tiene la responsabilidad de generar
( y Y la de generar ()). Por la segunda regla, X genera directamente (. Ahora tomamos el
problema de generar ()) a partir de Y . Escogemos la regla S → SZ, y la separaci´on en los
pedazos () y ). Entonces Z produce directamente ), y queda por resolver c´omo S produce ().
Para ello, escogemos la regla S → XZ, y finalmente X produce ( y Z se encarga de ), con
lo que terminamos el an´alisis. El ´arbol de compilaci´on se presenta en la figura 4.3.
Esta manera de generar dos nuevos problemas similares al problema inicial, pero con
datos m´as peque˜nos, es t´ıpicamente un caso de recursi´on. Este hecho permite pensar en
un sencillo procedimiento recursivo para “compilar” palabras de un LLC. Sea CC(A, u) la
funci´on que verifica si A ⇒ . . . ⇒ u. Entonces un algoritmo de an´alisis sint´actico ser´ıa el
siguiente:
CC(A, w) :
1. Si |w| > 1, dividirla en u y v, w = uv;
Para cada regla de la forma A → UV , intentar CC(U, u) y CC(V, v)
2. Si |w| = 1, buscar una regla A → w.
Si en el punto 1 la divisi´on de la palabra no nos llev´o a una compilaci´on exitosa (es decir,
los llamados recursivos CC(U, u) y CC(V, v) no tuvieron ´exito), puede ser necesario dividir
la palabra de otra manera. Dicho de otra forma, puede ser necesario ensayar todas las formas
134 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO
posibles de dividir una palabra en dos partes, antes de convencerse de que ´esta pertenece o
no a nuestro lenguaje. A´un cuando esto puede ser muy ineficiente computacionalmente, es
innegable que el algoritmo es conceptualmente muy sencillo.
El siguiente problema a examinar es si efectivamente es posible transformar una GLC
cualquiera G en otra GLC G que est´a en la FNCH. Vamos a efectuar esta transformaci´on en
dos etapas: en una primera etapa, llevaremos G a una forma intermedia Gtemp, para pasar
despu´es de Gtemp a G .
En Gtemp las reglas son de las formas:
1. A → a, con a ∈ Σ
2. A → β, con β ∈ V V ∗
En Gtemp, los lados derechos de las reglas son, ya sea un terminal, o una cadena (no vac´ıa)
de no-terminales. La manera de llevar una GLC cualquiera a la forma intermedia consiste en
introducir reglas A → a, B → b, etc., de modo que podamos poner, en vez de un terminal
a, el no-terminal A que le corresponde, con la seguridad de que despu´es ser´a posible obtener
a a partir de A. Por ejemplo, consid´erese la siguiente GLC:
1.- S → aX
2.- S → bY
3.- X → Y a
4.- X → ba
5.- Y → bXX
6.- Y → aba
Como se ve, el obst´aculo para que esta GLC est´e en la forma intermedia es que en los
lados derechos de varias reglas (1, 2, 3, 5) se mezclan los terminales y los no-terminales.
Por otra parte, hay reglas (4, 6) que en el lado derecho tienen varios terminales. Entonces
a˜nadimos las reglas:
7.- A → a
4.8. TRANSFORMACI ´ON DE LAS GLC Y FORMAS NORMALES 135
8.- B → b
y modificamos las reglas (1,2,3,5), reemplazando a por A y b por B:
1 .- S → AX
2 .- S → BY
3 .- X → Y A
4 .- X → BA
5 .- Y → BXX
6 .- Y → ABA
con lo que la gram´atica ya est´a en la forma intermedia. La equivalencia de la nueva
gram´atica con respecto a la original es muy f´acil de probar.
Luego, para pasar de Gtemp a la FNCH, puede ser necesario dividir los lados derechos
de algunas reglas en varias partes. Si tenemos una regla X → X1X2 . . . Xn, la dividimos
en dos reglas, una X → X1W y otra W → X2 . . . Xn, donde W es una nueva variable,
es decir, no debe formar previamente parte de la gram´atica. Cada vez que se aplica esta
transformaci´on, el lado derecho de la regla afectada se reduce en longitud en una unidad,
por lo que, aplic´andola repetidas veces, se debe poder llegar siempre a reglas cuyo lado
derecho tiene exactamente dos no-terminales. Para el ejemplo visto arriba, la regla 5 se
convierte en:
5 .- Y → BW
5 .- W → XX
Similarmente se puede transformar la regla 6 , dejando la gram´atica (reglas 1 , 2 , 3 , 4 ,
5 , 5 , 6 , 6 , 7, 8) en la FNCH.
136 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO
4.9. Limitaciones de los LLC
En esta secci´on veremos c´omo verificar que un lenguaje dado no es LLC. Esto puede ser
muy ´util, para evitarnos el trabajo de tratar in´utilmente de dise˜nar GLCs de lenguajes que
no tienen ninguna. Una herramienta para esto es aplicar el llamado “teorema de bombeo”,
que se presenta enseguida.
4.9.1. Teorema de bombeo para los LLC
Teorema.- Existe para cada G ∈ GLC un n´umero k tal que toda w ∈ L(G), donde |w| > k,
puede ser escrita como w = uvxyz, de tal manera que v y y no son ambas vac´ıas, y que
uvn
xyn
z ∈ L(G) para cualquier n≥0.
Este teorema es similar en esencia al teorema de bombeo para los lenguajes regulares.
Nos dice que siempre hay manera de introducir (“bombear”) subrepticiamente subcadenas
a las palabras de los LLC. Nos sirve para probar que ciertos lenguajes no son LLC.
Prueba.- Basta con probar que hay una derivaci´on
S ⇒∗
uAz ⇒∗
uvAyz ⇒∗
uvxyz = w
pues al aparecer el mismo no-terminal en dos puntos de la derivaci´on, es posible insertar ese
“trozo” de la derivaci´on cuantas veces se quiera (incluyendo cero). Esa parte de la derivaci´on,
que tiene la forma uAz ⇒∗
uvAyz, es una especie de “ciclo” sobre el no-terminal A, que
recuerda lo que ocurr´ıa con el teorema de bombeo para los lenguajes regulares.
Para probar que existen en la derivaci´on ciclos de la forma uAz ⇒∗
uvAyz, la idea
ser´a verificar que el tama˜no vertical del ´arbol (su profundidad) es mayor que la cantidad de
no-terminales disponibles. En consecuencia, alg´un no-terminal debe repetirse.
Primero, la cantidad de no-terminales para una gram´atica (V, Σ, R, S) es |V |.
A continuaci´on examinemos el problema de verificar si los ´arboles de derivaci´on pueden
tener una profundidad mayor que |V |.
Sea m = max({|α| |A → α ∈ R}). Ahora bien, un ´arbol de profundidad p tiene a lo m´as
mp
hojas (¿porqu´e?), y por lo tanto un ´arbol Aw para w, con |w| > mp
tiene profundidad
mayor que p. As´ı, toda palabra de longitud mayor que m|V |
tendr´a necesariamente una
profundidad mayor que |V |, y por lo tanto, alg´un no-terminal estar´a repetido en la derivaci´on;
sea A ese no-terminal. Vamos a representar el ´arbol de derivaci´on en la figura 4.4.
Como se ve, hay un sub´arbol del ´arbol de derivaci´on (el tri´angulo intermedio en la figu-
ra 4.4) en el que el s´ımbolo A es la ra´ız y tambi´en una de las hojas. Est´a claro que ese
4.9. LIMITACIONES DE LOS LLC 137
A
A
S
u
v
x
y
z
Figura 4.4:
sub´arbol puede ser insertado o quitado cuantas veces se quiera, y quedar´a siempre un ´arbol
de derivaci´on v´alido; cada vez que dicho sub´arbol sea insertado, las subcadenas v e y se repe-
tir´an una vez m´as. Esto completa la prueba. En la figura se aprecia porqu´e es importante
que v e y no sean ambas vac´ıas. QED
Ejemplo.- El lenguaje {an
bn
cn
} no es LLC. Esto se prueba por contradicci´on. Sup´ongase
que {an
bn
cn
} es LLC. Entonces, de acuerdo con el teorema de bombeo, para una cierta k,
ak/3
bk/3
ck/3
puede ser escrita como uvxyz, donde v y y no pueden ser ambas vac´ıas. Existen
dos posibilidades:
1. v o y contienen varias letras (combinaciones de a, b o c). Pero, seg´un el teorema, uv2
xy2
z
es de la forma an
bn
cn
, lo cual es imposible, ya que al repetir v o y, forzosamente las
letras quedar´an en desorden;
2. Tanto v como y (el que no sea vac´ıo) contienen un s´olo tipo de letra (repeticiones de a,
b o c). En este caso, si uvxyz es de la forma an
bn
cn
, uv2
xy2
z no puede ser de la misma
forma, pues no hemos incrementado en forma balanceada las tres letras, sino a lo m´as
dos de ellas.
En ambos casos se contradice la hip´otesis de que {an
bn
cn
} es LLC.
Al haberse probado que el lenguaje {an
bn
cn
} no es LLC, podemos probar que la inter-
secci´on de dos LLC no es necesariamente un LLC:
Teorema.- La intersecci´on de dos LLC no es necesariamente LLC.
Prueba.- Los lenguajes L1 y L2 formados por las palabras de la forma an
bn
cm
y am
bn
cn
respectivamente son LLC. Sin embargo, su intersecci´on es el lenguaje {an
bn
cn
}, que acabamos
de probar que no es LLC.
Algo similar ocurre con respecto a la operaci´on de complemento del lenguaje, que si se
recuerda, en el caso de los lenguajes regulares, su complemento daba otro lenguaje regular:
Teorema.- El complemento de un LLC no necesariamente produce otro LLC.
Prueba.- Si el complemento de un LLC fuera tambi´en LLC, lo mismo ocurrir´ıa con la
138 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO
intersecci´on, ya que, de acuerdo con las identidades de la teor´ıa de conjuntos, L1 ∩ L2 =
(Lc
1 ∪ Lc
2)c
. 19
Debe tenerse cuidado al interpretar estos resultados. En efecto, esto no quiere decir, por
ejemplo, que el complemento de un LLC necesariamente no ser´a LLC. En el siguiente ejemplo
se da un caso espec´ıfico.
Ejemplo.- Probar que el complemento del lenguaje {an
bn
} es LLC. Para esto, vamos a
clasificar las palabras de L = {an
bn
}c
en dos categor´ıas:
1. Las que contienen la cadena “ba”, esto es, w = αbaβ
2. Las que no contienen “ba”, esto es, w = αbaβ
Claramente esta clasificaci´on es exhaustiva. El objetivo de esta clasificaci´on es distinguir
las causas por las que una palabra en {a, b}∗
no es de la forma an
bn
: la primera es que tiene
letras en desorden –esto es, contiene la cadena “ba”– como en “abba”; la segunda es que,
no habiendo letras en desorden, la cantidad de a’s y b’s no es la misma, como en “aaaa”,
“abbb”, etc.
El caso (1) es muy simple, pues el lenguaje L1 cuyas palabras contienen la cadena “ba”
es regular y por lo tanto LLC.
Es f´acil ver que el caso (2) corresponde al lenguaje L2 = {an
bm
|n = m}, pues como
no tiene b inmediatamente antes que a, todas las a est´an antes de todas las b. L2 puede
ser expresado como la uni´on de dos lenguajes LLC, como se vio en un ejemplo presentado
anteriormente, y por la cerradura de los LLC a la uni´on, se concluye que L1 es LLC.
Finalmente, {an
bn
}c
= L1 ∪L2, y por la cerradura de los LLC a la uni´on, se concluye que
L es LLC.
4.10. Propiedades de decidibilidad de los LLC
Hay ciertas preguntas sobre los lenguajes libres de contexto y sus gram´aticas que es
posible contestar, mientras que hay otras preguntas que no se pueden contestar en el caso
general. Vamos a examinar primero dos preguntas que s´ı se pueden contestar con seguridad
y en un tiempo finito. Para estas preguntas es posible dar un algoritmo o “receta” tal
que, sigui´endolo paso por paso, se llega a concluir un s´ı o un no. Tales algoritmos se llaman
algoritmos de decisi´on, pues nos permiten decidir la respuesta a una pregunta. Las preguntas
que vamos a contestar son las siguientes:
19
Lc
es una abreviatura para Σ∗
− L.
4.10. PROPIEDADES DE DECIDIBILIDAD DE LOS LLC 139
Teorema.- Dadas una gram´atica G y una palabra w, es posible decidir si w ∈ L(G)
cuando las reglas de G cumplen la propiedad: “Para toda regla A → α, |α| > 1, o bien
α ∈ Σ, es decir, el lado derecho tiene varios s´ımbolos, o si tiene exactamente un s´ımbolo,
´este es terminal.”
Prueba: La idea para probar el teorema es que cada derivaci´on incrementa la longitud de
la palabra, porque el lado derecho de las reglas tiene en general m´as de un s´ımbolo. En vista
de que la longitud de la palabra crece con cada paso de derivaci´on, s´olo hay que examinar
las derivaciones hasta una cierta longitud finita. Por ejemplo, la gram´atica de los par´entesis
bien balanceados cumple con la propiedad requerida:
1. S → ()
2. S → SS
3. S → (S)
Como en esta gram´atica el lado derecho mide 2 o m´as s´ımbolos, la aplicaci´on de cada regla
reemplaza un s´ımbolo por dos o m´as. Por lo tanto, para saber si hay una derivaci´on de la
palabra ()(()), que mide 6 s´ımbolos, s´olo necesitamos examinar las derivaciones (izquierdas)
de 5 pasos a lo m´as -y que terminan en una palabra hecha ´unicamente de terminales. Estas
derivaciones son las siguientes:
1 paso:
S ⇒ ()
2 pasos:
S ⇒ (S) ⇒ (())
3 pasos:
S ⇒ (S) ⇒ ((S)) ⇒ ((()))
S ⇒ SS ⇒ ()S ⇒ ()()
4 pasos:
S ⇒ (S) ⇒ ((S)) ⇒ (((S))) ⇒ (((())))
S ⇒ (S) ⇒ (SS) ⇒ (()S) ⇒ (()())
S ⇒ SS ⇒ ()S ⇒ ()(S) ⇒ ()(())
S ⇒ SS ⇒ (S)S ⇒ (())S ⇒ (())()
5 pasos:
S ⇒ (S) ⇒ ((S)) ⇒ (((S))) ⇒ ((((S)))) ⇒ ((((()))))
S ⇒ (S) ⇒ ((S)) ⇒ ((SS)) ⇒ ((()S)) ⇒ ((()()))
S ⇒ (S) ⇒ (SS) ⇒ (()S) ⇒ (()(S)) ⇒ (()(()))
S ⇒ (S) ⇒ (SS) ⇒ ((S)S) ⇒ ((())S) ⇒ ((())())
S ⇒ SS ⇒ ()S ⇒ ()(S) ⇒ ()((S)) ⇒ ()((()))
140 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO
S ⇒ SS ⇒ ()S ⇒ ()SS ⇒ ()()S ⇒ ()()()
S ⇒ SS ⇒ (S)S ⇒ (())S ⇒ (())(S) ⇒ (())(())
S ⇒ SS ⇒ (S)S ⇒ ((S))S ⇒ ((()))S((()))()
S ⇒ SS ⇒ SSS ⇒ ()SS ⇒ ()()S ⇒ ()()()
Es f´acil ver que ´estas son las ´unicas posibles derivaciones. 20
Con base en este grupo de derivaciones es simple probar que la palabra “(()()(” -de 6
caracteres de longitud- no pertenece al lenguaje generado por la gram´atica, pues si as´ı fuera,
estar´ıa entre alguna de las palabras derivadas en 5 pasos o menos.
En el caso general se incluyen reglas de la forma A → a, con a ∈ Σ. Para empezar
observamos que las reglas de la forma A → a producen exclusivamente un terminal, por lo
que, en el peor caso, se aplicaron tantas veces reglas de este tipo como letras tenga la palabra
generada. Por ejemplo, sea la gram´atica de las expresiones aritm´eticas:
1. E → E + E
2. E → E ∗ E
3. E → x
4. E → y
Esta gram´atica tiene reglas, como E → x y E → y que tienen en su lado derecho un
caracter. Entonces, dada una expresi´on aritm´etica como x ∗ y + x, que tiene 5 s´ımbolos, a
lo m´as se usan ese tipo de reglas en 5 ocasiones (de hecho se ve que en una derivaci´on de
x ∗ y + x ese tipo de reglas se usa exactamente en 3 ocasiones). Ahora bien, para generar 5
terminales con reglas de la forma A → a se requieren 5 no-terminales. Esos 5 no-terminales
se generan con las reglas de la forma A → a, donde |a| > 1. En el peor de los casos, |a| = 2,
por lo que se requerir´an 4 pasos de derivaci´on para llegar a los 5 no-terminales. Eso da un
total de 5+4 = 9 pasos de derivaci´on. As´ı, si queremos determinar en forma segura si la
palabra x ∗ y + x pertenece o no al lenguaje generado por la gram´atica, s´olo tenemos que
examinar las derivaciones de longitud menor o igual a 9.
En general, para una palabra w de longitud l hay que examinar las derivaciones de
longitud hasta 2 ∗ l − 1. Si la palabra se encuentra al final de alguna de esas derivaciones, la
palabra pertenece al lenguaje, y en caso contrario no pertenece al lenguaje. Esto termina la
prueba del teorema. QED
N´otese que en el enunciado del teorema nos estamos restringiendo a las GLC que satis-
facen la condici´on: para toda regla A → α, |α| > 1, o bien α ∈ Σ, es decir, el lado derecho
tiene varios s´ımbolos, o si tiene exactamente un s´ımbolo, ´este es terminal. Cabe preguntarse
20
Ejercicio: hallar el m´etodo que se sigui´o para obtener las derivaciones mostradas, y probar que no se
puede “escapar” ninguna derivaci´on.
4.11. EJERCICIOS 141
si esto constituye una limitaci´on, en el sentido de que hay muchas GLC que no cumplen
dicha condici´on. De hecho la respuesta es no, pues existe un procedimiento para pasar de
una GLC arbitraria a una GLC que satisfaga la condici´on del teorema.
Corolario .- Dada cualquier GLC G, es posible decidir si w ∈ L(G).
La prueba de este corolario consiste en dar un procedimiento para transformar una GLC
cualquiera G en una GLC G que satisface las condiciones del teorema arriba enunciado.
4.11. Ejercicios
1. Proponer una gram´atica libre de contexto que genere las palabras binarias que comien-
zan con 1.
2. Considerar el lenguaje en {a, b} en que las palabras tienen la misma cantidad de a’s
que de b’s. Proponer:
a) Una GLC incorrecta para este lenguaje, esto es, que genere palabras que no de-
ber´ıa;
b) Una GLC incompleta, esto es, que no pueda generar algunas de las palabras de
este lenguaje;
c) Una GLC que sea a la vez incorrecta e incompleta para este lenguaje.
d) Una GLC correcta y completa;
e) Una derivaci´on izquierda de la palabra abaababb usando esta ´ultima gram´atica.
3. Proponer gram´aticas libres de contexto para los siguientes lenguajes:
a) El lenguaje {ai
bj
ck
| ¬(i = j = k)}
b) El lenguaje en {a, b}∗
en que las palabras tienen la misma cantidad de a’s y b’s.
c) Las palabras en {a, b, c} en que hay m´as a’s que c’s (la cantidad de b’s puede ser
cualquiera).
d) Un lenguaje de par´entesis, llaves y corchetes bien balanceados. Por ejemplo, las
palabras “()[]”, “([])” y “()[[]]” son correctas, mientras que “[[]” y “([)]” no lo son.
N´otese que en esta ´ultima palabra los par´entesis solos est´an balanceados, as´ı como
los corchetes solos, pero su combinaci´on no lo est´a.
e) {ai
bj
ck
| i = j − k}
f ) El lenguaje {an
bn+m
cm
} (Ayuda: usar la concatenaci´on de lenguajes).
g) El lenguaje {an
bk
cm
, n ≤ k ≤ n + m} (Ayuda: usar la mezcla de gram´aticas, y la
soluci´on al problema anterior).
4. Transformar las gram´aticas del problema 3 a la forma normal de Chomsky. Para esto,
142 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO
a) Eliminar las producciones vac´ıas,
b) Las reglas “in´utiles”,
c) Las reglas inaccesibles,
d) Poner en la “forma intermedia” (s´olo variables o s´olo constantes en el lado derecho
de las reglas).
e) Limitar a 2 la longitud m´axima del lado derecho de las reglas.
5. Mostrar que la siguiente gram´atica es / no es ambigua: G = (V, Σ, R, S), con:
V = {PROG, IF, STAT}
Σ = {if, then, else, condici´on, stat}
R = {PROG → STAT, STAT → if condici´on then STAT,
STAT → if condici´on then STAT else STAT, STAT → stat}
S = PROG
6. Contestar las siguientes preguntas, justificando la respuesta:
a) ¿La concatenaci´on de un lenguaje regular con uno libre de contexto ser´a necesari-
amente libre de contexto?
b) ¿Todo lenguaje libre de contexto tendr´a alg´un subconjunto que sea regular?
c) ¿Todo lenguaje libre de contexto ser´a subconjunto de alg´un lenguaje regular?
d) Si A ∪ B es libre de contexto, ¿ser´a A libre de contexto?
e) ¿La intersecci´on de un lenguaje regular con un libre de contexto ser´a regular?
f ) ¿La uni´on de un lenguaje libre de contexto con un lenguaje regular es libre de
contexto?
g) ¿La intersecci´on de un lenguaje libre de contexto con un lenguaje regular es reg-
ular?
h) ¿El reverso de un lenguaje libre de contexto es tambi´en libre de contexto? (Ayuda:
considerar una transformaci´on para obtener el reverso del lado derecho de las
reglas).
7. Probar la correcci´on de las gram´aticas propuestas en el ejercicio 3. Poner especial
cuidado al generar el enunciado generalizado, as´ı como al aplicarlo a los casos especiales.
8. Sea L = {an
bm
cp
dq
| n = m = p + q}. ¿Es L libre de contexto? Proponga (y explique)
una GLC o pruebe que no es posible.
9. Probar mediante el teorema de bombeo que el lenguaje {an
bn+m
cn+m+k
, n, m, k =
1, 2, 3, . . .} no es libre de contexto. (Ayuda: las cadenas v e y se pueden repetir 0
veces).
10. Llamamos “´util” a un s´ımbolo no terminal A de una gram´atica libre de contexto que
cumple con dos propiedades:
4.11. EJERCICIOS 143
a) S ⇒∗
aAb, a, b ∈ (V ∪Σ)∗
, donde V es el alfabeto de las variables y Σ (terminales
y no terminales),
b) A ⇒∗
w, w ∈ Σ∗
.
Dada una cierta GLC y un s´ımbolo no terminal A, ¿Es decidible si A es ´util o no lo
es? Pruebe la respuesta, y en caso afirmativo proponga el m´etodo de decisi´on.
11. ¿El lenguaje {w = ai
bm
cn
| i > m > n} es libre de contexto? Probar la respuesta.
144 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO
Cap´ıtulo 5
Aut´omatas de Pila
Puesto que los aut´omatas finitos no son suficientemente poderosos para aceptar los LLC,
1
cabe preguntarnos qu´e tipo de aut´omata se necesitar´ıa para aceptar los LLC.
Una idea es agregar algo a los AF de manera que se incremente su poder de c´alculo.
Para ser m´as concretos, tomemos por ejemplo el lenguaje de los par´entesis bien balancea-
dos, que sabemos que es propiamente LLC. 2
¿Qu´e m´aquina se requiere para distinguir las
palabras de par´entesis bien balanceados de las que tienen los par´entesis desbalanceados?
Una primera idea podr´ıa ser la de una m´aquina que tuviera un registro aritm´etico que le
permitiera contar los par´entesis; dicho registro ser´ıa controlado por el control finito, quien le
mandar´ıa s´ımbolos I para incrementar en uno el contador y D para decrementarlo en uno. A
su vez, el registro mandar´ıa un s´ımbolo Z para indicar que est´a en cero, o bien N para indicar
que no est´a en cero. Entonces para analizar una palabra con par´entesis lo que har´ıamos ser´ıa
llevar la cuenta de cu´antos par´entesis han sido abiertos pero no cerrados; en todo momento
dicha cuenta debe ser positiva o cero, y al final del c´alculo debe ser exactamente cero. Por
ejemplo, para la palabra (())() el registro tomar´ıa sucesivamente los valores 1, 2, 1, 0, 1, 0.
Recomendamos al lector tratar de dise˜nar en detalle la tabla describiendo las transiciones
del aut´omata.
Como un segundo ejemplo, consid´erese el lenguaje de los pal´ındromos (palabras que se
leen igual al derecho y al rev´es, como ANITALAVALATINA). Aqu´ı la m´aquina contadora
no va a funcionar, porque se necesita recordar toda la primera mitad de la palabra para
poder compararla con la segunda mitad. M´as bien pensar´ıamos en una m´aquina que tuviera
la capacidad de recordar cadenas de caracteres arbitrarias, no n´umeros. Siguiendo esta idea,
podr´ıamos pensar en a˜nadir al AF un almacenamiento auxiliar, que llamaremos pila, donde
se podr´an ir depositando caracter por caracter cadenas arbitrariamente grandes, como se
aprecia en la figura 5.1. A estos nuevos aut´omatas con una pila auxiliar los llamaremos
1
¡Cuidado! Esto no impide que un LLC en particular pueda ser aceptado por un AF, cosa trivialmente
cierta si tomamos en cuenta que todo lenguaje regular es a la vez LLC.
2
“Propiamente LLC” quiere decir que el lenguaje en cuesti´on es LLC pero no regular.
145
146 CAP´ITULO 5. AUT ´OMATAS DE PILA
b a a b a b
q0
 
q1
 
q2
 
q3
 
a
a
Figura 5.1: Aut´omata con una pila auxiliar
Aut´omatas de Pila, abreviado AP.
5.1. Funcionamiento de los Aut´omatas de Pila (infor-
mal)
La pila funciona de manera que el ´ultimo caracter que se almacena en ella es el primero
en salir (“LIFO” por las siglas en ingl´es), como si empil´aramos platos uno encima de otro, y
naturalmente el primero que quitaremos es el ´ultimo que hemos colocado. Un aspecto crucial
de la pila es que s´olo podemos modificar su “tope”, que es el extremo por donde entran o
salen los caracteres. Los caracteres a la mitad de la pila no son accesibles sin quitar antes
los que est´an encima de ellos.
La pila tendr´a un alfabeto propio, que puede o no coincidir con el alfabeto de la palabra de
entrada. Esto se justifica porque puede ser necesario introducir en la pila caracteres especiales
usados como separadores, seg´un las necesidades de dise˜no del aut´omata.
Al iniciar la operaci´on de un AP, la pila se encuentra vac´ıa. Durante la operaci´on del
AP, la pila puede ir recibiendo (y almacenando) caracteres, seg´un lo indiquen las transiciones
ejecutadas. Al final de su operaci´on, para aceptar una palabra, la pila debe estar nuevamente
vac´ıa.
En los AP las transiciones de un estado a otro indican, adem´as de los caracteres que se
consumen de la entrada, tambi´en lo que se saca del tope de la pila, asi como tambi´en lo que
se mete a la pila.
Antes de formalizar los AP, vamos a utilizar una notaci´on gr´afica, parecida a la de los
diagramas de los aut´omatas finitos, como en los AP de las figuras 5.2 (a) y (b). Para las
transiciones usaremos la notaci´on “w/α/β”, donde w es la entrada (secuencia de caracteres)
que se consume, α es lo que se saca de la pila, y β lo que se mete a la pila.
Por ejemplo, la transici´on “a/ε/b” indica que se consume de la entrada un caracter a, no
5.2. DISE ˜NO DE AP 147
se saca nada de la pila, y se mete b a la pila. Se supone que primero se ejecuta la operaci´on
de sacar de la pila y luego la de meter.
Al igual que los AF, los AP tienen estados finales, que permiten distinguir cuando una
palabra de entrada es aceptada.
De hecho, para que una palabra de entrada sea aceptada en un AP se deben cumplir
todas las condiciones siguientes:
1. La palabra de entrada se debe haber agotado (consumido totalmente).
2. El AP se debe encontrar en un estado final.
3. La pila debe estar vac´ıa.
5.2. Dise˜no de AP
El problema de dise˜no de los AP consiste en obtener un AP M que acepte exactamente
un lenguaje L dado. Por exactamente queremos decir, como en el caso de los aut´omatas
finitos, que, por una parte, todas las palabras que acepta efectivamente pertenecen a L, y
por otra parte, que M es capaz de aceptar todas las palabras de L.
Aunque en el caso de los AP no hay metodolog´ıas tan generalmente aplicables como era
el caso de los aut´omatas finitos, siguen siendo v´alidas las ideas b´asicas del dise˜no sistem´atico,
en particular establecer claramente qu´e es lo que “recuerda” cada estado del AP antes de
ponerse a trazar transiciones a diestra y siniestra. Para los AP, adicionalmente tenemos que
establecer una estrategia clara para el manejo de la pila.
En resumen, a la hora de dise˜nar un AP tenemos que repartir lo que requiere ser “recor-
dado” entre los estados y la pila. Distintos dise˜nos para un mismo problema pueden tomar
decisiones diferentes en cuanto a qu´e recuerda cada cual.
Ejemplo.- Dise˜nar un AP que acepte exactamente el lenguaje con palabras de la forma
an
bn
, para cualquier n´umero natural n.
Una idea que surge inmediatamente es la de utilizar la pila como “contador” para recordar
la cantidad de a’s que se consumen, y luego confrontar con la cantidad de b’s. Una primera
versi´on de este dise˜no utiliza un s´olo estado q, con transiciones a/ε/a y b/a/ε de q a s´ı mismo,
como en la figura 5.2(a).
Para verificar el funcionamiento del aut´omata, podemos simular su ejecuci´on, listando
las situaciones sucesivas en que se encuentra, mediante una tabla que llamaremos “traza de
ejecuci´on”. Las columnas de una traza de ejecuci´on para un AP son: el estado en que se
148 CAP´ITULO 5. AUT ´OMATAS DE PILA
εa/ /a
εb/a/
q
(a) Incorrecto
b/a/ ε
εa/ /a εb/a/
21
qq
(b) Correcto
Figura 5.2: AP para el lenguaje an
bn
encuentra el aut´omata, lo que falta por leer de la palabra de entrada, y el contenido de la
pila.
Por ejemplo, la traza de ejecuci´on del AP del ´ultimo ejemplo, para la palabra aabb, se
muestra a continuaci´on: 3
Estado Por leer Pila
q aabb ε
q abb a
q bb aa
q b a
q ε ε
Conclu´ımos que el AP efectivamente puede aceptar palabras como an
bn
. Sin embargo, hay
un problema: ¡el AP tambi´en acepta palabras como abab, que no tienen la forma deseada! (es
f´acil construir la traza de ejecuci´on correspondiente para convencerse de ello). El problema
viene de que no hemos recordado cuando se terminan las a y principian las b, por eso ha sido
posible mezclarlas en abab. Una soluci´on es utilizar los estados para memorizar las situaciones
de estar consumiendo a o estar consumiendo b. El diagrama de estados correspondiente se
muestra en la figura 5.2(b).
Ejemplo.- Proponer un AP que acepte el lenguaje de los pal´ındromos con un n´umero
par de s´ımbolos, esto es, palabras que se leen igual de izquierda a derecha y de derecha a
izquierda, y que tienen por tanto la forma wwR
, donde wR
es el reverso de w (esto es, invertir
el orden), en el alfabeto {a, b}. Por ejemplo, las palabras abba, aa y bbbbbb pertenecen a este
lenguaje, mientras que aab y aabaa no.
Una estrategia de soluci´on para dise˜nar este AP ser´ıa almacenar en la pila la primera
mitad de la palabra, y luego irla comparando letra por letra contra la segunda mitad. Ten-
dr´ıamos dos estados s y f, para recordar que estamos en la primera o segunda mitad de la
palabra. En la figura 5.2 se detalla este AP.
3
Suponemos que el tope de la pila est´a del lado izquierdo, aunque en este ejemplo da lo mismo.
5.2. DISE ˜NO DE AP 149
b/ /bε
a/ /aε
ε/ε/ε
a/a/
b/b/ ε
ε
fs
Figura 5.3: AP para el lenguaje {wwR
}
Se puede apreciar en el AP de dicha figura la presencia de una transici´on de s a f, en que
ni se consumen caracteres de la entrada, ni se manipula la pila. Esta transici´on parece muy
peligrosa, porque se puede “disparar” en cualquier momento, y si no lo hace exactamente
cuando hemos recorrido ya la mitad de la palabra, el AP podr´a llegar al final a un estado
que no sea final, rechazando en consecuencia la palabra de entrada. Entonces, ¿c´omo saber
que estamos exactamente a la mitad de la palabra?
Conviene en este punto recordar que en un aut´omata no determinista una palabra es
aceptada cuando existe un c´alculo que permite aceptarla, independientemente de que un
c´alculo en particular se vaya por un camino err´oneo. Lo importante es, pues, que exista un
c´alculo que acepte la palabra en cuesti´on. Por ejemplo, la siguiente tabla muestra un c´alculo
que permite aceptar la palabra w = abba:
Estado Falta leer Pila Transici´on
s abba ε
s bba a 1
s ba ba 2
f ba ba 3
f a a 5
f ε ε 4
5.2.1. Combinaci´on modular de AP
En los AP tambi´en es posible aplicar m´etodos de combinaci´on modular de aut´omatas,
como hicimos con los aut´omatas finitos. En particular, es posible obtener AP que acepten la
uni´on y concatenaci´on de los lenguajes aceptados por dos AP dados.
En el caso de la uni´on, dados dos AP M1 y M2 que aceptan respectivamente los lenguajes
L1 y L2, podemos obtener un AP que acepte la uni´on L1 ∪L2, introduciendo un nuevo estado
inicial s0 con transiciones ε/ε/ε a los dos antiguos estados iniciales s1 y s2, como se ilustra
en la figura 5.4. 4
4
El procedimiento de combinaci´on de AP para obtener la uni´on de aut´omatas puede ser descrito en forma
m´as precisa utilizando la representaci´on formal de los AP, que se estudia en la siguiente secci´on; sin embargo,
hacer esto es directo, y se deja como ejercicio (ver secci´on de ejercicios).
150 CAP´ITULO 5. AUT ´OMATAS DE PILA
 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ 
¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢
£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£
¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤
0
s1
s
s2 2F
F1
ε/ε/ε
ε/ε/ε
Figura 5.4: Uni´on de AP
Ejemplo.- Obtener un AP que acepte el lenguaje {an
bm
|n = m}. Claramente este lenguaje
es la uni´on de {an
bm
|n > m} con {an
bm
|n < m}, por lo que basta obtener los AP de cada
uno de ellos, y combinarlos con el m´etodo descrito.
Ejemplo.- Dise˜nar un AP que acepte el lenguaje L = {ai
bj
ck
|¬(i = j = k)}. Nos damos
cuenta de que L es la uni´on de dos lenguajes, que son:
L = {ai
bj
ck
|i = j} ∪ {ai
bj
ck
|j = k}
Para cada uno de estos dos lenguajes es f´acil obtener su AP. Para el primero de ellos, el AP
almacenar´ıa primero las a’s en la pila, para luego ir descontando una b por cada a de la pila;
las a’s deben acabarse antes de terminar con las b’s o bien deben sobrar a’s al terminar con
las b’s; las c’s no modifican la pila y simplemente se verifica que no haya a o b despu´es de la
primera c. Dejamos los detalles como ejercicio para el lector.
Tambi´en es posible obtener modularmente un AP que acepte la concatenaci´on de los
lenguajes aceptados por dos AP dados. De hecho ya vimos en el cap´ıtulo 4 que la uni´on de
dos lenguajes libres de contexto es tambi´en libre de contexto, pues tiene una gram´atica libre
de contexto.
Sin embargo, la construcci´on de un AP que acepte la concatenaci´on de dos lenguajes a
partir de sus respectivos AP M1 y M2, es ligeramente m´as complicada que para el caso de la
uni´on. La idea b´asica ser´ıa poner transiciones vac´ıas que vayan de los estados finales de M1
al estado inicial de M2. Sin embargo, existe el problema: hay que garantizar que la pila se
encuentre vac´ıa al pasar de M1 a M2, pues de otro modo podr´ıa resultar un AP incorrecto.
Para esto, es posible utilizar un caracter especial, por ejemplo “@”, que se mete a la pila
antes de iniciar la operaci´on de M1, el cual se saca de la pila antes de iniciar la operaci´on de
M2. Los detalles se dejan como ejercicio (ver secci´on de ejercicios).
5.3. FORMALIZACI ´ON DE LOS AP 151
5.3. Formalizaci´on de los AP
Un aut´omata de pila es un s´extuplo (K, Σ, Γ, ∆, s, F), donde:
K es un conjunto de estados
Σ es el alfabeto de entrada
Γ es el alfabeto de la pila
s ∈ K es el estado inicial
F ⊆ K es un conjunto de estados finales,
∆ ⊆ (K × Σ∗
× Γ∗
) × (K × Γ∗
) es la relaci´on de transici´on.
Ahora describiremos el funcionamiento de los AP. Si tenemos una transici´on de la forma
((p, u, β), (q, γ)) ∈ ∆, el AP hace lo siguiente:
Estando en el estado p, consume u de la entrada;
Saca β de la pila;
Llega a un estado q;
Mete γ en la pila
Las operaciones t´ıpicas en las pilas –t´ıpicamente llamadas en ingl´es el “push” y el “pop”–
pueden ser vistas como casos particulares de las transiciones de nuestro AP; en efecto,
si s´olo queremos meter la cadena γ a la pila, se har´ıa con la transici´on ((p, u, ε), (q, γ))
(“push”), mientras que si s´olo queremos sacar caracteres de la pila se har´a con la transici´on
((p, u, β), (q, ε)) (“pop”).
Ahora formalizaremos el funcionamiento de los AP, para llegar a la definici´on del lenguaje
aceptado por un AP. Para ello seguiremos el mismo m´etodo que usamos en el caso de los
AF, m´etodo que reposa completamente en la noci´on de configuraci´on.
Definici´on.- Una configuraci´on es un elemento de K × Σ∗
× Γ∗
.
Por ejemplo, una configuraci´on podr´ıa ser [[q, abbab, ⊗aa#a]] –obs´ervese que seguimos
la misma notaci´on que para representar las configuraciones de los AF. Puede verse que las
transiciones se definen como una relaci´on, no como una funci´on, por lo que de entrada se les
formaliza como aut´omatas no deterministas.
Ahora definimos la relaci´on entre configuraciones de la manera siguiente:
152 CAP´ITULO 5. AUT ´OMATAS DE PILA
Definici´on.- Sea M = (K, Σ, Γ, ∆, s, F) un AP, entonces [[p, ux, βα]]| M [[q, x, γα]] ssi
existe ((p, u, β), (q, γ)) ∈ ∆. En general vamos a omitir el sub´ındice de M , quedando sim-
plemente como . La cerradura reflexiva y transitiva de es ∗
.
Definici´on.- Un AP M = (K, Σ, Γ, ∆, s, F) acepta una palabra w ∈ Σ∗
ssi [[s, w, ε]] ∗
M
[[p, ε, ε]], donde p ∈ F. L(M) es el conjunto de palabras aceptadas por M.
Ejemplo.- Formalizar el AP de la figura 5.2, que acepta el lenguaje {wwR
}, w ∈ {a, b}.
Soluci´on.- El AP es el s´extuplo (K, Σ, Γ, ∆, s, F), donde
K = {s, f}, F = {f}, Σ = {a, b, c}, Γ = {a, b}
∆ est´a representada en la siguiente tabla:
(s, a, ε) (s, a)
(s, b, ε) (s, b)
(s, ε, ε) (f, ε)
(f, a, a) (f, ε)
(f, b, b) (f, ε)
5.4. Relaci´on entre AF y AP
Teorema.- Todo lenguaje aceptado por un AF es tambi´en aceptado por un AP
Este resultado debe quedar intuitivamente claro, puesto que los AP son una extensi´on
de los AF.
Prueba: Sea (K, Σ, ∆, s, F) un AF; el AP (K, Σ, ∅, ∆ , s, F), con ∆ = {((p, u, ε), (q, ε)) |
(p, u, q) ∈ ∆} acepta el mismo lenguaje.
5.5. Relaci´on entre AP y LLC
Ahora vamos a establecer el resultado por el que iniciamos el estudio de los AP, es decir,
verificar si son efectivamente capaces de aceptar los LLC.
Teorema.- Los aut´omatas de pila aceptan exactamente los LLC.
Vamos a examinar la prueba de esta afirmaci´on, no solamente por el inter´es por la rig-
urosidad matem´atica, sino sobre todo porque provee un m´etodo de utilidad pr´actica para
transformar una GLC en un AP. La prueba de este teorema se puede dividir en dos partes:
5.5. RELACI ´ON ENTRE AP Y LLC 153
1. Si M es un AP, entonces L(M) es un LLC
2. Si L es un LLC, entonces hay un AP M tal que L(M) = L
Vamos a presentar ´unicamente la prueba con la parte 2, que consideramos de mayor rele-
vancia pr´actica. La otra parte de la prueba (que tambi´en es un procedimiento de conversi´on)
puede consultarse en la referencia [21].
Sea una gram´atica G = (V, Σ, R, S). Entonces un AP M que acepta exactamente el
lenguaje generado por G se define como sigue:
M = ({p, q}, Σ, V ∪ Σ, ∆, p, {q})
donde ∆ contiene las siguientes transiciones:
1. Una transici´on ((p, ε, ε), (q, S))
2. Una transici´on ((q, ε, A), (q, x)) para cada A → x ∈ R
3. Una transici´on ((q, σ, σ), (q, ε)) para cada σ ∈ Σ
Ejemplo.- Obtener un AP que acepte el LLC generado por la gram´atica con reglas:
1. S → aSa
2. S → bSb
3. S → c
Las transiciones del AP correspondiente est´an dadas en la tabla siguiente:
1 (p, ε, ε) (q, S)
2 (q, ε, S) (q, aSa)
3 (q, ε, S) (q, bSb)
4 (q, ε, S) (q, c)
5 (q, a, a) (q, ε)
6 (q, b, b) (q, ε)
7 (q, c, c) (q, ε)
El funcionamiento de este AP ante la palabra abcba aparece en la siguiente tabla:
154 CAP´ITULO 5. AUT ´OMATAS DE PILA
Estado Falta leer Pila
p abcba ε
q abcba S
q abcba aSa
q bcba Sa
q bcba bSba
q cba Sba
q cba cba
q ba ba
q a a
q ε ε
Vamos a justificar intuitivamente el m´etodo que acabamos de introducir para obtener un
AP equivalente a una gram´atica dada. Si observamos las transiciones del AP, veremos que
solamente tiene dos estados, p y q, y que el primero de ellos desaparece del c´alculo en el primer
paso; de esto conclu´ımos que el AP no utiliza los estados para “recordar” caracter´ısticas de
la entrada, y por lo tanto reposa exclusivamente en el almacenamiento de caracteres en la
pila. En efecto, podemos ver que las transiciones del tipo 2 (transiciones 2-4 del ejemplo),
lo que hacen es reemplazar en la pila una variable por la cadena que aparece en el lado
derecho de la regla correspondiente. Dado que la (´unica) transici´on de tipo 1 (transici´on 1
del ejemplo) coloca el s´ımbolo inicial en la pila, a continuaci´on lo que hacen las reglas de
tipo 2 es realmente efectuar toda la derivaci´on dentro de la pila de la palabra de entrada,
reemplazando un lado izquierdo de una regla por su lado derecho. Una vez hecha la derivaci´on
de la palabra de entrada, –la cual estar´ıa dentro de la pila, sin haber a´un gastado un solo
caracter de la entrada– podemos compararla caracter por caracter con la entrada, por medio
de las transiciones de tipo 3.
Existe sin embargo un problema t´ecnico: si observamos la “corrida” para la palabra abcba,
nos daremos cuenta de que no estamos aplicando las reglas en el orden descrito en el p´arrafo
anterior, esto es, primero la transici´on del grupo 1, luego las del grupo 2 y finalmente las del
grupo 3, sino que m´as bien en la cuarta l´ınea de la tabla se consume un caracter a (aplicaci´on
de una transici´on del grupo 3) seguida de la aplicaci´on de una transici´on del grupo 2. Esto
no es casualidad; lo que ocurre es que las variables no pueden ser reemplazadas por el lado
derecho de una regla si dichas variables no se encuentran en el tope de la pila. En efecto,
recu´erdese que los AP solo pueden accesar el caracter que se encuentra en el tope de la pila.
Por esto, se hace necesario, antes de reemplazar una variable por la cadena del lado derecho
de una regla, “desenterrar” dicha variable hasta que aparezca en el tope de la pila, lo cual
puede hacerse consumiendo caracteres de la pila (y de la entrada, desde luego) mediante la
aplicaci´on de transiciones del tipo 3.
De la construcci´on del AP que hemos descrito, conclu´ımos con la siguiente proposici´on:
S ⇒∗
w ssi [[p, w, ε]] ∗
M(G) [[q, ε, ε]]
5.6. COMPILADORES LL 155
SINTACTICO
ANALIZADOR
LEXICO
SIMBOLOS
TABLA DE
ANALIZADOR
DE CODIGO
GENERADOR
Figura 5.5: Diagrama de un compilador
donde M(G) denota al AP construido a partir de la gram´atica G por el procedimiento
reci´en descrito.
Todav´ıa nos queda por probar que para todo AP hay una gram´atica equivalente. A este
respecto remitimos al lector a la referencia [10].
La equivalencia de los AP y de las GLC permite aplicar todas las propiedades de los LLC
para resolver problemas de dise˜no de AP.
5.6. Compiladores LL
El m´etodo que hemos visto para obtener un AP a partir de una GLC puede ser consid-
erado como una manera de construir un compilador para el lenguaje correspondiente a la
GLC dada.
De una manera muy general, un compilador –como los que se usan para traducir un
lenguaje de programaci´on al lenguaje de m´aquina– est´a compuesto por las partes que se
ilustran en la figura 5.5. Sus principales partes son:
Un analizador l´exico, que recibe los caracteres del archivo de entrada, y entrega los lla-
mados “tokens”, que representan los elementos del lenguaje –tales como las palabras
claves (como “begin”, “integer”, etc.), los operadores (tales como “+”), los identifi-
cadores propuestos por el usuario, y otros elementos. Generalmente varios caracteres
corresponden a un s´olo “token”. As´ı, los dem´as componentes del compilador ya no
consideran la entrada como una secuencia de caracteres, sino como una secuencia de
“tokens”. Un beneficio adicional del analizador l´exico es que “filtra” caracteres in´utiles
desde el punto de vista de la traducci´on que se quiere hacer, como por ejemplo los
comentarios del programador. El analizador l´exico puede ser considerado como un
aut´omata con salida (como los aut´omatas de Moore y de Mealy de la secci´on 2.7), y
son muchas veces construidos a partir de la definici´on de “tokens” mediante Expre-
siones Regulares.
156 CAP´ITULO 5. AUT ´OMATAS DE PILA
Un analizador sint´actico, que toma como entrada los “tokens” y verifica que su secuen-
cia corresponde a la definici´on del lenguaje dada por medio de una gram´atica libre de
contexto. Mediante el uso de herramientas adecuadas, como el generador de compi-
ladores “yacc” [9], es posible producir un analizador sint´actico a partir de la definici´on
del lenguaje mediante una gram´atica.
Un generador de c´odigo, que guiado por el analizador sint´actico, produce realmente
el resultado de la compilaci´on, que es la traducci´on del lenguaje fuente al lenguaje
deseado (generalmente lenguaje ensamblador).
Una tabla de s´ımbolos, que registra las definiciones de identificadores dadas por el
usuario en su programa, y las utiliza posteriormente para resolver las referencias que
se hacen a ellos en el programa a traducir.
Para una descripci´on detallada de los compiladores y de las t´ecnicas usadas para con-
struirlos, v´ease la referencia [1].
5.6.1. Principio de previsi´on
Desde luego, para tener un verdadero compilador se requiere que se trate de un AP
determinista, pues ser´ıa inaceptable que un mismo compilador diera resultados diferentes al
compilar varias veces un mismo programa.
Una manera de forzar a que un AP no determinista se vuelva determinista consiste en
proveer un m´etodo para decidir, cuando hay varias transiciones aplicables, cual de ellas va a
ser efectivamente aplicada. En el caso de los compiladores esto se puede hacer mediante el
llamado principio de previsi´on.
El principio de previsi´on consiste en que podamos “observar” un caracter de la palabra
de entrada que a´un no ha sido le´ıdo (esto es llamado en ingl´es “lookahead”, mirar hacia
adelante). El caracter le´ıdo por adelantado nos permite en algunas ocasiones decidir ade-
cuadamente cual de las transiciones del AP conviene aplicar.
Ejemplo.- Sup´ongase la GLC con reglas S → aSb, S → ε, que representa el lenguaje
{an
bn
}. La construcci´on del AP correspondiente es directa y la dejamos como ejercicio.
Ahora bien, teniendo una palabra de entrada aabb, la traza de ejecuci´on comenzar´ıa de la
manera siguiente:
Estado Falta leer Pila
p aabb ε
q aabb S
En este punto, no se sabe si reemplazar en la pila S por ε o por aSb, al ser transiciones
aplicables tanto ((q, ε, S), (q, ε)) como ((q, ε, S), (q, aSb)). En cambio, si tomamos en cuenta
5.6. COMPILADORES LL 157
que el siguiente caracter en la entrada ser´a a, es evidente que no conviene reemplazar S
por ε, pues entonces la a de entrada no podr´ıa ser cancelada. Entonces hay que aplicar la
transici´on ((q, ε, S), (q, aSb)). Continuamos la ejecuci´on:
Estado Falta leer Pila
. . . . . . . . .
q aabb aSb
q abb Sb
q abb aSbb
q bb Sbb
Al ver que el siguiente caracter de entrada ser´a una b, nos damos cuenta de que no
conviene reemplazar en la pila S por aSb, pues la b de la entrada no podr´a cancelarse contra
la a de la pila. Entonces aplicamos la otra transici´on disponible, que es ((q, ε, S), (q, ε)). La
ejecuci´on contin´ua:
Estado Falta leer Pila
. . . . . . . . .
q bb bb
q b b
q ε ε
con lo cual la palabra de entrada es aceptada. Resumiendo, en este ejemplo la regla para
decidir sobre la transici´on a aplicar, bas´andose en la previsi´on del siguiente caracter a leer,
fue esta: si el siguiente caracter es a, reemplazar en la pila S por aSb, y si es b, reemplazar
S por ε. Esta regla puede ser representada mediante la siguiente tabla:
a b ε
S aSb ε
En esta tabla, las columnas (a partir de la segunda) se refieren al siguiente caracter que
ha de ser le´ıdo (la “previsi´on”), habiendo una columna marcada “ε” por si en vez de haber un
caracter siguiente se encuentra el fin de la palabra. La primera columna contiene la variable
que se va a reemplazar en la pila por lo que indique la celda correspondiente en la tabla. 5
A un AP aumentado con su tabla de previsi´on se le llama “compilador LL” por las siglas
en ingl´es “Left to right Leftmost derivation”, porque efectivamente dentro de la pila se lleva
a cabo una derivaci´on izquierda. El lector puede comprobar esto en el ejemplo anterior. A
un compilador LL que considera una previsi´on de un caracter, como lo que hemos visto, se
5
Ejercicio: hacer nuevamente la traza de ejecuci´on para la palabra abb, utilizando la tabla de previsi´on.
158 CAP´ITULO 5. AUT ´OMATAS DE PILA
le llama “LL(1)”; en general, un compilador de tipo LL que toma en cuenta una previsi´on
de k caracteres es LL(k).
La raz´on por la que es necesario a veces hacer una previsi´on de m´as de un caracter es
porque para ciertas gram´aticas no es suficiente una predicci´on de un solo caracter. Con-
sid´erese, por ejemplo, la gram´atica con reglas S → aSb, S → ab, que tambi´en genera el
lenguaje {an
bn
}. Hacemos el inicio de la ejecuci´on del AP correspondiente:
Estado Falta leer Pila
p aabb ε
q aabb S
En este punto, reemplazando S por aSb o por ab de todos modos se produce la a de la
previsi´on, por lo que dicha predicci´on no establece ninguna diferencia entre las transiciones
((q, ε, S), (q, aSb)) y ((q, ε, S), (q, ab)). Este ejemplo en particular puede sacarse adelante
haciendo una transformaci´on de la gram´atica, conocida como “factorizaci´on izquierda”, que
consiste en a˜nadir a la gram´atica una variable nueva (sea por ejemplo A), que produce “lo
que sigue despu´es del caracter com´un”, en este caso a. As´ı, la gram´atica queda como (sus
reglas):
1. S → aA
2. A → Sb
3. A → b
Con esta gram´atica ya es posible decidir entre las distintas transiciones considerando una
previsi´on de un solo caracter, como se aprecia en la siguiente ejecuci´on del AP correspondi-
ente:
Estado Falta leer Pila Comentario
p aabb ε
q aabb S
q aabb aA
q abb A Se decide reemplazar A por Sb.
q abb Sb
q abb aAb
q bb Ab Se decide reemplazar A por b.
q bb bb
q b b
q ε ε
La tabla de previsi´on entonces debe haber sido:
5.6. COMPILADORES LL 159
a b ε
S aA
A Sb b
Ahora veremos de una manera m´as sistem´atica c´omo construir la tabla de previsi´on.
Supongamos una GLC sin producciones vac´ıas –lo cual pr´acticamente no representa una
p´erdida de generalidad. Necesitamos hacer las siguientes definiciones:
Definici´on.- Supongamos una gram´atica (V, Σ, R, S). El operador first : (V ∪Σ)+
→ 2Σ
,
cuyo argumento es una cadena de s´ımbolos (al menos uno) que puede contener variables y
constantes, y cuyo resultado es un conjunto de caracteres, obtiene todos los caracteres con
los que puede empezar una cadena derivable a partir de su argumento. Por ejemplo, para
la GLC con reglas S → aA, A → Sb, A → b, nos damos cuenta de que las cadenas que se
pueden derivar a partir de S tienen que empezar con a, porque lo ´unico que puede producir
S es aA, que empieza con a. Por ello, first(S) = {a}.
first(α) se calcula sistem´aticamente a partir de las siguientes propiedades:
Si α = σ, σ ∈ Σ, entonces first(α) = {σ}
Si α = xv, x ∈ (V ∪ Σ), v ∈ (V ∪ Σ)∗
, first(α) = first(x)
Si A ∈ V , first(A) = first(α1) ∪ . . . ∪ first(αn), para todas las reglas A → αi, para
i = 1 . . . n.
Ejemplos.- Seguimos utilizando la gram´atica S → aA, A → Sb, A → b.
first(aA) = first(a) = {a}, aplicando la segunda y luego primera regla.
first(Ab) = first(A) por la segunda regla; first(A) = first(b) ∪ first(Sb) por la
tercera regla, y first(Sb) = first(S) = first(aA) = first(a) = {a}, por lo que
finalmente first(Ab) = {a, b}.
Ahora estamos en condiciones de dar un procedimiento para construir la tabla de pre-
visi´on: supongamos que estamos tratando de llenar una celda de la tabla donde el rengl´on
corresponde a la variable X y la columna a la constante σ. Si hay en la gram´atica una regla
X → α donde σ ∈ first(α), el lado derecho α se pone en dicha celda:
. . . σ . . . ε
. . . . . . . . . . . .
X α . . . . . .
160 CAP´ITULO 5. AUT ´OMATAS DE PILA
Por ejemplo, con este procedimiento se obtiene la siguiente tabla de previsi´on para la
gram´atica con reglas S → aA, A → Sb, A → b:
a b ε
S aA
A Sb b
Esta tabla es id´entica a la que hab´ıamos supuesto anteriormente para la misma gram´atica.
Puede ocurrir que en una celda de la tabla de previsi´on queden los lados derechos de
varias reglas; esto es, si la celda corresponde a la columna de la constante σ y al rengl´on
de la variable X, y hay dos reglas distintas X → α y X → β, donde σ ∈ first(α) y
σ ∈ first(β), entonces tanto α como β tendr´ıan derecho a estar en esa celda de la tabla.
Cuando esto ocurre, simplemente se concluye que la tabla no se puede construir y que la
gram´atica no es del tipo LL(1).
5.7. Compiladores LR(0)
Como se puede apreciar en toda la secci´on precedente, los compiladores de tipo LL
son esencialmente “predictores” que tratan de llevar a cabo la derivaci´on en la pila, siempre
reemplazando las variables por lo que ´estas deban producir. Pero a´un en gram´aticas bastante
sencillas, se vuelve demasiado dif´ıcil adivinar, a´un con la ayuda de la previsi´on, qu´e regla de
reemplazo hay que aplicar a una variable en el tope de la pila. Por esto, se han propuesto
otros compiladores, llamados LR (“Left to right Rightmost derivation”), que no tratan de
adivinar una derivaci´on, sino que tratan de ir “reconociendo” cadenas que correspondan
al lado derecho de una regla gramatical, para reemplazar por el lado izquierdo. As´ı, estos
compiladores encuentran la derivaci´on “en reversa”, reemplazando lados derechos de reglas
por lados izquierdos, hasta llegar eventualmente al s´ımbolo inicial. Entonces, los compiladores
LR recorren el ´arbol de derivaci´on de abajo hacia arriba, por lo que se llaman tambi´en
compiladores ascendentes.
De hecho, el reconocimiento del lado derecho de una regla no se hace respecto a la entrada,
sino respecto al tope de la pila, pero para esto se necesita primero haber pasado caracteres
de la entrada a la pila. Las dos operaciones b´asicas de un compilador LR son:
Desplazamiento que consiste en pasar un caracter de la entrada al tope de la pila,
Reducci´on que consiste en reemplazar en el tope de la pila el lado derecho de una regla
gramatical por el lado izquierdo de la misma. 6
6
De hecho se toma el reverso del lado derecho de una regla, ver m´as adelante.
5.7. COMPILADORES LR(0) 161
Estas operaciones se aplican, en un orden “adecuado”, hasta que en la pila quede s´olo
el s´ımbolo inicial. Desde luego, la dificultad est´a en encontrar las secuencias de desplaza-
mientos y reducciones que llevan a la situaci´on final deseada. La idea de c´omo combinar los
desplazamientos con las reducciones se comprende en el siguiente ejemplo: Supongamos la
gram´atica para el lenguaje {an
bn
} con las reglas S → aA, A → Sb, A → b. Dada la palabra
aabb, se tendr´ıa una traza de ejecuci´on como sigue:
Falta leer Pila Acci´on
aabb ε Desplazar
abb a Desplazar
bb aa Desplazar
b baa Reducir por A → b
b Aaa Reducir por S → aA
b Sa Desplazar
ε bSa Reducir por A → Sb
ε Aa Reducir por S → aA
ε S Exito
Obs´erverse, en el quinto rengl´on de la tabla, que en el tope de la pila est´a la cadena Aa,
mientras que el lado derecho de la regla que corresponde es aA. Vemos as´ı que lo que se saca
de la pila es el lado derecho de la regla, pero “volteado” de izquierda a derecha; t´ecnicamente
decimos que el reverso del lado derecho de una regla coincide con el tope de la pila. Esto se
refleja en las definiciones que damos en seguida.
En este ejemplo en particular es relativamente f´acil discernir cuando hacer cada una de las
acciones. Sin embargo, en otros ejemplos es mucho m´as dif´ıcil determinar qu´e acci´on llevar
a cabo; existe un procedimiento para construir una tabla de previsi´on para compiladores
LR(1), que puede ser consultado en la referencia [1].
Ahora formalizaremos el procedimiento para construir el AP de tipo LR a partir de una
GLC (V, Σ, R, S):
Hay 4 estados: i (inicial), f (final), p y q.
Hay una transici´on ((i, ε, ε), (p, #)) ∈ ∆. Esta transici´on coloca un “marcador” # en
el fondo de la pila, para luego reconocer cuando la pila se ha vaciado.
Se tienen transiciones ((p, σ, ε), (p, σ)) ∈ ∆ para cada σ ∈ Σ. Estas transiciones per-
miten hacer la acci´on de desplazar.
Hay transiciones ((p, ε, αR
), (p, A)) ∈ ∆ para cada regla A → α ∈ R, donde αR
es el
reverso de α, esto es, α “volteado” de izquierda a derecha. Estas transiciones efect´uan
las reducciones.
162 CAP´ITULO 5. AUT ´OMATAS DE PILA
e/e/# e/ /e e/#/e
/e/
/e/
e/ / e/ /
e/ /
Aa bS
Figura 5.6: AP de tipo LR
Tenemos una transici´on ((p, ε, S), (q, ε)) ∈ ∆; esta transici´on reconoce cuando se
lleg´o al s´ımbolo inicial.
Finalmente hay una transici´on ((q, ε, #), (f, ε)) ∈ ∆; esta transici´on se asegura de que
se haya vaciado la pila antes de aceptar la palabra.
Este procedimiento es directo. Por ejemplo, en la figura 5.6 se representa el aut´omata
correspondiente a la GLC que hemos estado considerando, esto es, S → aA,A → Sb, A → b.
M´as que en la construcci´on del AP, las dificultades pueden estar en el uso del AP, pues al ser
´este no determinista, en ciertas situaciones puede presentarse un conflicto, en que no se sepa
si desplazar un caracter m´as a la pila o bien reducir por alguna regla. Y a´un en este caso
puede haber varias reducciones posibles. Por ejemplo, sugerimos hacer la traza de ejecuci´on
en el AP de la figura 5.6 de la palabra aabb.
Una posible soluci´on a estos conflictos puede ser adoptar una pol´ıtica en que –por
ejemplo– la reducci´on tenga preferencia sobre el desplazamiento. Esto funciona adecuada-
mente en el ejemplo reci´en presentado, pero no funciona en otros casos. En el caso general,
es necesario usar t´ecnicas m´as complicadas, que incluyen previsi´on de caracteres (esto es,
LR(1), LR(2), etc.); dichas t´ecnicas pueden consultarse en la referencia [1].
5.8. Ejercicios
1. Sea un aut´omata de pila M = (K, Σ, Γ, ∆, s, F) que acepta el lenguaje de par´entesis
bien formados, incluyendo los par´entesis redondos “(”, “)”, as´ı como los par´entesis
cuadrados “[”, “]”, es decir: L(M) = {e, (), [], ()[], [](), (()), ([]), [()], [[]], . . .}.
a) Dibujar el diagrama del AP que acepta el lenguaje descrito.
b) Representar formalmente, dando K, Σ, Γ, ∆, s y F.
c) Dar un c´alculo producido por la palabra err´onea “([]]”, con las columnas “Estado”,
“Por leer” y “pila”, como en los ejemplos dados.
5.8. EJERCICIOS 163
2. Proponga un aut´omata de pila para el lenguaje:
{ai
bj
ck
| i = j − k} 7
3. Considere el lenguaje en {a, b}∗
en que las palabras tienen la misma cantidad de a’s
que de b’s, que es generado por la siguiente gram´atica:
1.- S → aSb
2.- S → bSa
3.- S → SS
4.- S → ε
a) Dise˜nar directamente (sin convertir a partir de una gram´atica) un AP que acepte
dicho lenguaje, usando una pila que almacene el exceso de a’s o de b’s (basta con
dibujar el diagrama de estados).
b) Construir otro AP, convirtiendo la GLC dada a AP de tipo LL.
c) Lo mismo que el anterior, para un AP de tipo LR.
d) Para cada uno de los incisos anteriores, hacer una traza de ejecuci´on para la
palabra “abbaba”, en forma de una tabla, usando las columnas “estado”, “por
leer”, “pila”, y “acci´on aplicada”.
4. Considere el lenguaje {an
bm
cp
dq
| n + m = p + q}
a) Proponga un AP que lo acepte.
b) Suponga la siguiente GLC (sus reglas) que genera dicho lenguaje:
1) <AD> → a <AD> d
2) <AD> → b <BD> d
3) <AD> → e
4) <AD> → a <AC> c
5) <BD> → b <BD> d
6) <BD> → b <BC> c
7) <BD> → e
8) <BC> → b <BC> c
9) <BC> → e
10) <AC> → a <AC> c
11) <AC> → b <BC> c
12) <AC> → e
El s´ımbolo inicial es <AD>. Pruebe la correcci´on de la GLC por inducci´on sobre
la longitud de la derivaci´on.
7
Ayuda: al despejar en la ecuaci´on la j el problema parece ser m´as f´acil, pues permite aplicar un dise˜no
modular.
164 CAP´ITULO 5. AUT ´OMATAS DE PILA
c) Obtenga un AP de tipo LL(1) a partir de esta gram´atica.
d) Lo mismo, para un AP de tipo LR(0).
e) Para los dos incisos anteriores, obtener una traza de ejecuci´on, en forma de tabla
con columnas “estado”, “por leer”, “pila” y “acci´on”, para la palabra de entrada
“aaacdd”.
5. Para el AP de la figura 5.6, y la palabra de entrada aabb:
a) Construir una traza de ejecuci´on, con columnas “estado”, “falta leer”, “pila”, y
“acci´on”.
b) Localizar los renglones de la tabla anterior donde se presenta un conflicto, e indicar
si es de desplazamiento contra reducci´on o bien de una reducci´on contra otra
reducci´on.
6. Considere el lenguaje L = {an
bn+m
cm
}
a) Proponga una GLC que genere L.
b) Elimine de la gram´atica las producciones vac´ıas y las in´utiles, si las hay
c) Pruebe por inducci´on que la gram´atica es correcta.
d) Obtenga el AP correspondiente, del tipo LL.
e) Obtenga la tabla de previsi´on LL(1), calculando primero el “first” de cada vari-
able de la gram´atica.
f ) Obtenga un AP de tipo LR para la gram´atica.
g) Indique si hay o no conflictos “shift-reduce” o “reduce-reduce” en el AP del inciso
anterior, utilizando la traza de ejecuci´on para la palabra de entrada abbbcc. ¿Es
posible escribiendo resolver los conflictos con los criterios de preferir “reduce”
a “shift”, para los conflictos shift-reduce, y en caso de conflicto reduce-reduce
preferir la transici´on que reduzca m´as s´ımbolos?
7. Completar y detallar formalmente el procedimiento de combinaci´on modular de AP
para la concatentaci´on de lenguajes, delineado en la secci´on 5.2.1.
8. Formalice el procedimiento para obtener un AP que acepte la uni´on de los lenguajes
aceptados respectivamente por (K1, Σ1, Γ1, ∆1, s1, F1) y (K2, Σ2, Γ2, ∆2, s2, F2).
9. Considere una variante de los aut´omatas pushdown, que podr´ıamos llamar “aut´omatas
de fila”, en los que en vez de la pila, que se accesa en orden UEPS (“LIFO”), se tiene
una fila que se accesa en orden PEPS (“FIFO”).
a) D´e una definici´on formal de los aut´omatas de fila.
b) Pruebe que el lenguaje {an
bn
} es aceptado por alg´un aut´omata de fila.
c) ¿Piensa que los aut´omatas de pila y de fila son equivalentes? Justifique de manera
informal.
5.8. EJERCICIOS 165
10. Considere una variante de los aut´omatas de pila, los AP “por estado final” (APEF),
en los que para aceptar una palabra basta con que al final de ´esta el aut´omata se
encuentre en un estado final, sin necesidad de que la pila est´e vac´ıa.
a) D´e una definici´on formal de los APEF, incluyendo la definici´on de lenguaje acep-
tado.
b) Proponga un APEF que acepte el lenguaje {an
bn
}.
11. Proponga m´aquinas lo menos poderosas que sea posible para que acepten los siguientes
lenguajes:
a) {(), [], <>, ([]), [< ()(<>) > ()], . . .}
b) {(), (()), ((())), (((()))), . . .}
c) {(), ()(), ()()(), . . .}
12. Las m´aquinas reales tienen siempre l´ımites a su capacidad de almacenamiento. As´ı,
la pila infinita de los aut´omatas de pila puede ser limitada a un cierto tama˜no fijo.
Suponga una variante de los AP, los APn, en que la pila tiene un tama˜no fijo n.
a) Proponga una definici´on de APn y de palabra aceptada por un APn.
b) Pruebe (constructivamente) que los APn son equivalentes a los AF. (Ayuda:
se puede asociar a cada par (q, σ1σ2 . . . σn), donde q es un estado del APn y
σ1σ2 . . . σn es el contenido de la pila, un estado del AF).
c) Pruebe su m´etodo con el APn de pila de tama˜no 2 (caben dos caracteres), con
relaci´on de transici´on como sigue: ∆ = {((q0, a, e), (q0, a)), ((q0, b, a), (q1, e)),
(q1, b, a), (q1, e))}, donde q0 es inicial y q1 es final.
166 CAP´ITULO 5. AUT ´OMATAS DE PILA
Parte III
M´aquinas de Turing y sus lenguajes
167
Automatas y lenguajes
Cap´ıtulo 6
M´aquinas de Turing
As´ı como en secciones anteriores vimos c´omo al a˜nadir al aut´omata finito b´asico una
pila de almacenamiento auxiliar, aumentando con ello su poder de c´alculo, cabr´ıa ahora
preguntarnos qu´e es lo que habr´ıa que a˜nadir a un aut´omata de pila para que pudiera
analizar lenguajes como {an
bn
cn
}. Partiendo del AP b´asico (figura 6.1(a)), algunas ideas
podr´ıan ser:
1. A˜nadir otra pila;
2. Poner varias cabezas lectoras de la entrada;
3. Permitir la escritura en la cinta, adem´as de la lectura de caracteres.
Aunque estas ideas –y otras a´un m´as fantasiosas– pueden ser interesantes, vamos a enfocar
nuestra atenci´on a una propuesta en particular que ha tenido un gran impacto en el desarrollo
te´orico de la computaci´on: la M´aquina de Turing.
A. Turing propuso [24] en los a˜nos 30 un modelo de m´aquina abstracta, como una
extensi´on de los aut´omatas finitos, que result´o ser de una gran simplicidad y poder´ıo a la
vez. La m´aquina de Turing es particularmente importante porque es la m´as poderosa de
todas las m´aquinas abstractas conocidas (esto ´ultimo ser´a discutido en la secci´on 6.5).
6.1. Funcionamiento de la m´aquina de Turing
La m´aquina de Turing (abreviado MT, ver figura 6.1(b)) tiene, como los aut´omatas que
hemos visto antes, un control finito, una cabeza lectora y una cinta donde puede haber
caracteres, y donde eventualmente viene la palabra de entrada. La cinta es de longitud
infinita hacia la derecha, hacia donde se extiende indefinidamente, llen´andose los espacios con
169
170 CAP´ITULO 6. M ´AQUINAS DE TURING
b a a b a b
q0
 
q1
 
q2
 
q3
 
a
a
(a) Aut´omata de pila
b a a b
               
               
               
               
               
               
               
               
               
               
               
               
               
               
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
a
(b) M´aquina de Turing
Figura 6.1:
el caracter blanco (que representaremos con “ ”). La cinta no es infinita hacia la izquierda,
por lo que hay un cuadro de la cinta que es el extremo izquierdo, como en la figura 6.1(b).
En la MT la cabeza lectora es de lectura y escritura, por lo que la cinta puede ser
modificada en curso de ejecuci´on. Adem´as, en la MT la cabeza se mueve bidireccionalmente
(izquierda y derecha), por lo que puede pasar repetidas veces sobre un mismo segmento de
la cinta.
La operaci´on de la MT consta de los siguientes pasos:
1. Lee un caracter en la cinta
2. Efect´ua una transici´on de estado
3. Realiza una acci´on en la cinta
Las acciones que puede ejecutar en la cinta la MT pueden ser:
Escribe un s´ımbolo en la cinta, o
Mueve la cabeza a la izquierda o a la derecha
Estas dos acciones son excluyentes, es decir, se hace una o la otra, pero no ambas a la
vez.
La palabra de entrada en la MT est´a escrita inicialmente en la cinta, como es habitual
en nuestros aut´omatas, pero iniciando a partir de la segunda posici´on de la cinta, siendo el
primer cuadro un caracter blanco. Como la cinta es infinita, inicialmente toda la parte de la
cinta a la derecha de la palabra de entrada est´a llena del caracter blanco ( ).
6.1. FUNCIONAMIENTO DE LA M ´AQUINA DE TURING 171
10
q
a/R
q
b/b
h
/R
Figura 6.2: MT que acepta palabras que empiezan con a
Por definici´on, al iniciar la operaci´on de la MT, la cabeza lectora est´a posicionada en el
caracter blanco a la izquierda de la palabra de entrada, el cual es el cuadro m´as a la izquierda
de la cinta.
Decimos que en la MT se llega al “final de un c´alculo” cuando se alcanza un estado
especial llamado halt en el control finito, como resultado de una transici´on. Representaremos
al halt por “h”. 1
Al llegar al halt, se detiene la operaci´on de la MT, y se acepta la palabra
de entrada. As´ı, en la MT no hay estados finales. En cierto sentido el halt ser´ıa entonces el
´unico estado final, s´olo que adem´as detiene la ejecuci´on.
Cuando queremos que una palabra no sea aceptada, desde luego debemos evitar que la
MT llegue al halt. Podemos asegurarnos de ello haciendo que la MT caiga en un ciclo infinito
(ver ejemplos adelante).
El lenguaje aceptado por una MT es simplemente el conjunto de palabras aceptadas por
ella. 2
Al dise˜nar una MT que acepte un cierto lenguaje, en realidad dise˜namos el aut´omata
finito que controla la cabeza y la cinta, el cual es un aut´omata con salida (de Mealy, ver
secci´on 2.7). As´ı, podemos usar la notaci´on gr´afica utilizada para aquellos aut´omatas para
indicar su funcionamiento. En particular, cuando trazamos una flecha que va de un estado
p a un estado q con etiqueta σ/L, quiere decir que cuando la entrada al control finito (esto
es, el caracter le´ıdo por la cabeza de la MT) es σ, la cabeza lectora hace un movimiento a
la izquierda, indicada por el caracter L (left, en ingl´es); similarmente cuando se tiene una
flecha con σ/R el movimiento es a la derecha. Cuando la flecha tiene la etiqueta σ/ξ, donde
ξ es un caracter, entonces la acci´on al recibir el caracter σ consiste en escribir el caracter ξ
en la cinta. Con estos recursos es suficiente para dise˜nar algunas MT, como en el siguiente
ejemplo.
Ejemplo.- Dise˜nar (el control finito de) una MT que acepte las palabras en {a, b} que
comiencen con a. La soluci´on se muestra en la figura 6.2. Si la primera letra es una “a”, la
palabra se acepta, y en caso contrario se hace que la MT caiga en un ciclo infinito, leyendo y
escribiendo “b”. N´otese que la acci´on inmediatamente antes de caer en el “halt” es irrelevante;
igual se pod´ıa haber puesto “a/a” o “a/R” como etiqueta de la flecha.
1
No traduciremos el t´ermino “halt”, que en ingl´es significa detener, porque es tradicional usar exactamente
este nombre en m´aquinas de Turing.
2
M´as adelante daremos definiciones formales.
172 CAP´ITULO 6. M ´AQUINAS DE TURING
2
q h10
q
a/R
b/R
a/a
b/b
q/R
/L
Figura 6.3: MT que acepta palabras que terminan con a
Ejemplo.- Dise˜nar una MT que acepte las palabras en {a, b} que terminen con a. Aunque
este ejemplo parece bastante similar al precedente, en realidad es m´as complicado, pues para
ver cual es la ´ultima letra, hay que ir hasta el blanco a la derecha de la palabra, luego regresar
a la ´ultima letra y verificar si es una “a”. Una soluci´on se muestra en la figura 6.3.
Ejemplo.- Probar que hay lenguajes que no son libres de contexto, pero que pueden ser
aceptados por una m´aquina de Turing. Proponemos el lenguaje an
bn
cn
, que se sabe que no
es LLC. Ahora construiremos una MT que lo acepte. La estrategia para el funcionamiento
de dicha MT consistir´a en ir haciendo “pasadas” por la palabra, descontando en cada una de
ellas una a, una b y una c; para descontar esos caracteres simplemente los reemplazaremos
por un caracter “∗”. Cuando ya no encontremos ninguna a, b o c en alguna pasada, si queda
alguna de las otras dos letras la palabra no es aceptada; en caso contrario se llega a halt. Es
´util, antes de emprender el dise˜no de una MT, tener una idea muy clara de c´omo se quiere
que funcione. Para eso se puede detallar el funcionamiento con alg´un ejemplo representativo,
como en la tabla siguiente, para la palabra aabbcc. La posici´on de la cabeza se indica por el
s´ımbolo “ ”.
6.2. FORMALIZACI ´ON DE LA MT 173
a a b b c c
a a b b c c
∗ a b b c c
∗ a b b c c
∗ a b b c c
∗ a ∗ b c c
. . . . . . . . .
∗ a ∗ b ∗ c
. . . . . . . . .
∗ a ∗ b ∗ c
∗ a ∗ b ∗ c
. . . . . . . . .
Lo que falta por hacer es dise˜nar los estados de la MT, lo cual es relativamente simple y
que dejamos como ejercicio (ver secci´on de ejercicios).
6.2. Formalizaci´on de la MT
Habiendo en la secci´on precedente hecho un recuento intuitivo de las caracter´ısticas fun-
damentales de la MT, ahora procedemos a su formalizaci´on, esto es, a su modelizaci´on
matem´atica en t´erminos de la teor´ıa de conjuntos.
Una MT es un qu´ıntuplo (K, Σ, Γ, δ, s) donde:
K es un conjunto de estados tal que h ∈ K;
Σ es el alfabeto de entrada, donde /∈ Σ;
Γ es el alfabeto de la cinta, donde ∈ Γ y Σ ⊆ Γ
s ∈ K es el estado inicial;
δ : (K − {h} × Γ) → K × (Γ ∪ {L, R}) es la funci´on de transici´on.
174 CAP´ITULO 6. M ´AQUINAS DE TURING
La expresi´on de la funci´on de transici´on parece algo complicada, pero puede entenderse
de la siguiente manera: la funci´on de transici´on del control finito debe considerar como
entradas el estado actual, que es un elemento de K –pero que no puede ser h– as´ı como el
caracter le´ıdo en la cinta, que es elemento de Γ. Por eso a la izquierda de la flecha aparece
la expresi´on δ : (K − {h} × Γ). Luego, el resultado de la funci´on de transici´on debe incluir
el siguiente estado, que es elemento de K. Otro resultado de la funci´on de transici´on es la
acci´on a ejecutar por la MT, que puede ser una escritura o un movimiento a la izquierda
o a la derecha. La acci´on “mover cabeza a la izquierda” se representa por el s´ımbolo L, y
similarmente R para la derecha. En el caso de la escritura, en vez de usar un s´ımbolo o
comando especial, simplemente se indica el caracter que se escribe, el cual es un elemento de
Γ. Desde luego, para que no haya confusi´on se requiere que ni L ni R est´en en Γ. Resumiendo,
el resultado de la funci´on de transici´on debe ser un elemento de K × (Γ ∪ {L, R}).
As´ı, si δ(q, a) = (p, b), donde b ∈ Γ, esto quiere decir que estando la MT en el estado q
con la cabeza lectora sobre un caracter a, la funci´on de transici´on enviar´a al aut´omata a un
estado p, y adicionalmente escribir´a el caracter b. Similarmente si δ(q, a) = (p, L), la cabeza
de la MT har´a un movimiento a la izquierda adem´as de la transici´on de estado.
Por ejemplo, sea la MT siguiente: K = {s, h}, (s´olo est´a el estado inicial, adem´as del
“halt”), Σ = {a}, Γ = {a, }, δ(s, a) = (s, R), δ(s, ) = (h, R). Puede verse por la funci´on de
transici´on que esta MT ejecuta un ciclo repetitivo en que mueve la cabeza hacia la derecha
en tanto siga leyendo un caracter a, y se detiene (hace halt) en cuanto llega a un blanco.
N´otese que, puesto que δ es una funci´on, en principio debe tenerse por cada estado y
cada caracter una transici´on. Esto quiere decir que cada estado debe tener una cantidad
de flechas de salida igual a |Γ|. Por ejemplo, si Γ = { , a, b}, y K = {q, h}, entonces debe
haber flechas de salida de q con a, de q con b y tambi´en de q con . 3
En la pr´actica, sin
embargo, una gran cantidad de flechas tiende a hacer menos comprensible un diagrama, por
lo que solamente incluiremos las flechas “necesarias”, suponiendo en consecuencia que las
dem´as flechas pueden tener una salida cualquiera, sin afectar esto el funcionamiento de la
MT. Por ejemplo, a partir del estado inicial podemos suponer, sin arriesgarnos, que no es
posible encontrar m´as que el caracter blanco, por lo que no tiene caso dibujar flechas del
estado inicial con a, con b, etc. 4
6.2.1. Configuraci´on
Como en otros aut´omatas que hemos visto en secciones anteriores, en las MT la configu-
raci´on resume la situaci´on en que se encuentra la MT en cualquier punto intermedio de un
c´alculo, de manera tal que con s´olo las informaciones contenidas en la configuraci´on podamos
reconstruir dicha situaci´on y continuar el c´alculo.
3
N´otese que h es una excepci´on, pues no debe tener ninguna flecha de salida.
4
Desde luego, si se regresa al estado inicial despu´es de haber ejecutado otras transiciones, s´ı ser´a posible
encontrar otros caracteres.
6.2. FORMALIZACI ´ON DE LA MT 175
Las informaciones necesarias para resumir la situaci´on de una MT en medio de un c´alculo
son:
Estado en que se encuentra la MT
Contenido de la cinta
Posici´on de la cabeza
Ahora el problema es c´omo representar formalmente cada uno de los tres componentes de
la configuraci´on, tratando de hacerlo en la forma m´as similar posible a como representamos
la configuraci´on para otros tipos de aut´omatas.
No hay problema con el estado en que se encuentra la MT, que es directamente un
elemento de K. Respecto al contenido de la cinta, existe la dificultad de que como es infinita,
no podemos representarla toda por una cadena de caracteres, que siempre ser´a de tama˜no
finito. Vamos a tomar la soluci´on de tomar en cuenta ´unicamente la parte de la cinta hasta
antes de donde empieza la sucesi´on infinita de blancos, pues esta ´ultima realmente no contiene
ninguna informaci´on ´util. Por ejemplo, en la figura 6.4(a) dicha parte de la cinta es “ a
b b a b”.
El siguiente problema es c´omo caracterizar la posici´on de la cabeza lectora. Recordemos
la soluci´on que hab´ıamos adoptado para los AF y AP, en que represent´abamos de una vez
el contenido de la cinta y la posici´on de la cabeza limit´andose a representar con una cadena
lo que falta por leer de la palabra –esto es, tirando a la basura la parte a la izquierda de
la cabeza lectora. El problema es que esta soluci´on no funciona, pues en el caso de las MT
hay movimiento de la cabeza a la izquierda, por lo que los caracteres a la izquierda de la
cabeza podr´ıan eventualmente ser le´ıdos de nuevo o hasta modificados. Otra soluci´on ser´ıa
representar la posici´on por un n´umero entero que indicara la posici´on actual con respecto
a alguna referencia. Sin embargo, adoptaremos la soluci´on consistente en dividir la cinta
dentro de la configuraci´on en tres pedazos:
La parte de la cinta a la izquierda de la cabeza, que es un elemento de Γ∗
.
El cuadro en la posici´on de la cabeza lectora, que es un elemento de Γ.
La parte de la cinta a la derecha de la cabeza lectora, hasta antes de la sucesi´on de
blancos que se extiende indefinidamente a la derecha.
La parte a la derecha de la cabeza lectora es, desde luego, un elemento de Γ∗
, pero
podemos hacer una mejor caracterizaci´on de ella considerando que el ´ultimo caracter de
ella no es blanco. As´ı, ser´ıa un elemento de Γ∗
(Γ − { }). Sin embargo, hay un problema
t´ecnico: esta expresi´on no incluye la cadena vac´ıa, la cual puede producirse cuando todos
los caracteres a la derecha de la cabeza son blancos. La soluci´on es simplemente a˜nadir este
176 CAP´ITULO 6. M ´AQUINAS DE TURING
...babba
(a)
...bb a
(b)
Figura 6.4: Contenido de la cinta en una configuraci´on
Σ∗ Σ
K
...aa
{ε}U
b
Σ∗(Σ − { })
a a b b
Figura 6.5: Configuraci´on en MT
caso, por lo que finalmente la parte a la derecha de la cabeza lectora es un elemento de
Γ∗
(Γ − { }) ∪ {ε}.
Por ejemplo, la cinta de la figura 6.4(a) se representa con las cadenas de caracteres a ,
b y bab (parte izquierda, cuadro bajo la cabeza, y parte derecha, respectivamente), mientras
que la cinta de la figura 6.4(b) ser´ıa representada por ε, y b a b.
Finalmente, la configuraci´on es un elemento de:
K × Γ∗
× Γ × (Γ∗
(Γ − { }) ∪ {ε}
(Ver figura 6.5)
Como en los AF y los AP, en las MT vamos a indicar las configuraciones encerradas entre
dobles corchetes, como en [[q, aa, a, bb]], que indica que la MT en cuesti´on se encuentra en el
estado q, habiendo a la izquierda de la cabeza una cadena “aa”, bajo la cabeza una “a”, y a
su derecha –antes de la secuencia infinita de blancos– una cadena “bb”. Para simplificar a´un
m´as la notaci´on, podemos indicar por un caracter subrayado la posici´on de la cabeza lectora;
as´ı en vez de tener cuatro componentes la configuraci´on tendr´a ´unicamente dos, como por
ejemplo en [[q, aaabb]], que es equivalente al ejemplo que acabamos de dar.
6.2. FORMALIZACI ´ON DE LA MT 177
6.2.2. Relaci´on entre configuraciones
Vamos a definir una relaci´on binaria “C1 C2” que nos indica que la MT puede pasar
de la configuraci´on C1 a la configuraci´on C2.
Definici´on.- La relaci´on en C ×C –donde C es el conjunto de configuraciones– se define
por casos, de la siguiente manera:
Caso escritura:
[[p, w, a, u]] [[q, w, b, u]]
ssi δ(p, a) = (q, b), donde b ∈ Γ
Caso de movimiento a la izquierda, parte derecha no vac´ıa:
[[p, wd, a, u]] [[q, w, d, au]]
ssi δ(p, a) = (q, L), donde a = o bien u = ε
Caso de movimiento a la izquierda, parte derecha vac´ıa:
[[p, wd, , ε]] [[q, w, d, ε]]
ssi δ(p, ) = (q, L)
Caso de movimiento a la derecha, parte derecha no vac´ıa:
[[p, w, a, du]] [[q, wa, d, u]]
ssi δ(p, a) = (q, R)
Caso de movimiento a la derecha, parte derecha vac´ıa:
[[p, w, a, ε]] [[q, wa, , ε]]
ssi δ(p, a) = (q, R)
Ejemplos:
Si δ(q1, a) = (q2, b), [[q1, bba]] [[q2, bbb]]
Si δ(q1, a) = (q2, R), [[q1, bab]] [[q2, bab]]
[[q1, bab]] [[q2, bab ]]
Si δ(q1, a) = (q2, L), [[q1, aabab]] [[q2, aabab]]
[[q1, abb]] [[q2, abb]]
[[q1, ab ]] [[q2, ab ]]
178 CAP´ITULO 6. M ´AQUINAS DE TURING
6.2.3. Configuraci´on “colgada”
En el caso de que la cabeza lectora se encuentre en el cuadro de la cinta m´as a la izquierda,
y se trate de hacer un movimiento a la izquierda, se produce un error llamado “configuraci´on
colgada”, que tiene como consecuencia que la MT no pueda seguir funcionando, y desde
luego no podr´a ser aceptada la palabra de entrada.
Formalmente, si tenemos una configuraci´on de la forma [[p, ε, a, u]] y la transici´on es
δ(p, a) = (q, L), no existe una configuraci´on C tal que [[p, ε, a, u]] C.
En general vamos a evitar el uso intencional de las configuraciones colgadas, de modo
que si no queremos que una palabra sea aceptada, se har´a que la MT se cicle en vez de
“colgarse”.
6.2.4. C´alculos en MT
Igual que en otros tipos de aut´omatas que hemos visto anteriormente, en las MT un
c´alculo es una secuencia C1, C2, . . . , Cn de configuraciones tal que Ci Ci+1. Un c´alculo puede
ser visto en t´erminos computacionales como una “traza de ejecuci´on”, que nos describe de una
manera muy exacta la forma en que una MT responde ante una entrada en particular. Por
ejemplo, sea la MT siguiente (dada ya como ejemplo anteriormente): K = {s}, Σ = {a, },
δ(s, a) = (s, R), δ(s, ) = (h, ). Ante la configuraci´on [[s, a, a, aa]] se presenta el c´alculo
siguiente:
[[s, aaaa]] [[s, aaaa]] [[s, aaaa]] [[s, aaaa ]] [[h, aaaa ]]
Se puede llegar de una configuraci´on Ci a Cj, para i ≤ j en cero o varios pasos; esto
se indica en forma compacta utilizando la cerradura reflexiva y transitiva de la relaci´on ,
denotada por ∗
, quedando Ci
∗
Cj.
6.2.5. Palabra aceptada
Con las definiciones dadas ahora estamos en condiciones de definir formalmente las no-
ciones de palabra aceptada y lenguaje aceptado:
Definici´on.- Una palabra w ∈ Σ∗
, es aceptada por una MT M si
[[s, ε, , w]] ∗
[[h, α, a, β]]
donde a, ∈ Γ, α, β ∈ Γ. Como se ve, el ´unico criterio para que la palabra de entrada w se
acepte es que se llegue a halt en alg´un momento, independientemente del contenido final
6.3. MT PARA C ´ALCULOS DE FUNCIONES 179
de la cinta, el cual es visto como “basura”. Por ejemplo, la MT del ´ultimo ejemplo acepta
cualquier palabra de entrada.
Decimos de que un lenguaje L es Turing-aceptable si hay alguna MT que da halt para
toda entrada w ∈ L.
6.3. MT para c´alculos de funciones
Hasta el momento hemos visto las MT como analizadoras de palabras cuyo fin es deter-
minar si la palabra de entrada pertenece o no al lenguaje aceptado. Sin embargo, las MT
tambi´en pueden ser utilizadas para calcular resultados u operaciones a partir de la entrada.
En vez de considerar como “basura” el contenido de la cinta al llegar al halt, podr´ıamos verlo
como un resultado calculado. Para poder interpretar sin ambig¨uedad el contenido final de la
cinta como resultado, vamos a requerir que cumpla con un formato estricto, caracterizado
por los siguientes puntos:
La palabra de salida no debe contener ning´un caracter blanco ( ).
La palabra de salida comienza en el segundo caracter de la cinta, teniendo a su izquierda
un blanco y a su derecha una infinidad de blancos.
La cabeza estar´a posicionada en el primer blanco a la derecha de la palabra de salida.
Se puede apreciar que el formato para la palabra de salida es muy similar al de la palabra
de entrada, salvo que en la primera, la cabeza est´a posicionada en el caracter a la derecha
de la palabra.
Ejemplo.- Supongamos la funci´on reverse, que invierte el orden en que aparecen las letras
en la palabra de entrada; as´ı, reverse(aabb) = bbaa. Si inicialmente el contenido de la cinta
es de la forma aabb . . ., donde el caracter subrayado indica la posici´on de la cabeza, la
cinta al final debe quedar como: bbaa . . ..
Es muy importante ce˜nirse estrictamente a este formato, y no caer en ninguno de los
siguientes errores (frecuentes, desgraciadamente):
Aparece alg´un espacio blanco dentro del resultado, como en la cinta bbaa ab . . ..
El resultado no est´a posicionado empezando en el segundo cuadro de la cinta, como en
bbaa . . ..
La cabeza no est´a ubicada exactamente en el cuadro a la derecha del resultado, como
en la cinta bbaa . . ..
180 CAP´ITULO 6. M ´AQUINAS DE TURING
Aparece “basura” (caracteres no blancos) en la cinta, a la derecha o izquierda del
resultado, como en la cinta bbaa b . . ..
Para precisar estas nociones, utilizamos la noci´on formal de configuraci´on : Una MT
calcula un resultado u ∈ Σ∗
a partir de una entrada w ∈ Σ∗
si:
[[s, ε, , w]] ∗
[[h, u, , ε]]
Como se sabe, las funciones en matem´aticas sirven precisamente para describir la relaci´on
entre un resultado y una entrada. Podemos relacionar esta noci´on con la definici´on anterior
de la manera siguiente: Una MT M calcula una funci´on f : Σ∗
→ Σ∗
si para toda entrada
w, M calcula un resultado u tal que f(w) = u.
Si hay una MT que calcula una funci´on f, decimos que f es Turing-calculable.
Ejemplo.- Construir una m´aquina de Turing que reste dos n´umeros naturales en unario,
esto es, f(x, y) = x − y. Desde luego, como las MT reciben un solo argumento, para realizar
una funci´on de dos argumentos como la resta en realidad se recibe un solo argumento que
contiene un s´ımbolo para separar dos partes de la entrada. Por ejemplo, la resta de 5 − 3
quedar´ıa indicada por la cadena “11111 − 111”, lo que ser´ıa el argumento de entrada; desde
luego, el resultado en este caso ser´ıa la cadena “11”. La cabeza lectora al final debe estar
posicionada en el blanco a la derecha del residuo. En caso de que el sustraendo sea mayor
que el minuendo, el resultado es cero. A esta forma de resta sin resultados negativos se le
llama a veces “monus” en vez de “menos”.
La estrategia para construir esta MT ser´ıa ir “descontando” cada 1 del minuendo contra
otro 1 del sustraendo, reemplazando ambos por un caracter arbitrario –sea “∗”. Cuando se
termine el sustraendo, se borran los caracteres in´utiles de manera que queden s´olo los restos
del minuendo. Para evitar tener que recorrer el residuo, descontamos caracteres del minuendo
de derecha a izquierda. Resumiendo, tendr´ıamos una secuencia de configuraciones de la cinta
como las siguientes (la ´ultima l´ınea indica la configuraci´on en la que debe dar halt).
6.4. PROBLEMAS DE DECISI ´ON 181
1 1 1 − 1 1
1 1 1 − 1 1
. . . . . . . . .
1 1 1 − 1 1
1 1 1 − 1 1
1 1 1 − 1 ∗
. . . . . . . . .
1 1 ∗ − 1 ∗
. . . . . . . . .
1 ∗ ∗ − ∗ ∗
. . . . . . . . .
1
Dejamos como ejercicio hacer el diagrama de estados del control finito de esta MT (ver
secci´on de ejercicios).
6.4. Problemas de decisi´on
Un caso particular de funciones es aquel en que el resultado s´olo puede ser s´ı o no. Si
representamos el s´ı con 1 y el no con 0, estamos considerando funciones g : Σ∗
→ {1, 0}. En
este caso, la MT sirve para decidir si la entrada tiene una propiedad P o no la tiene.
Por ejemplo, si la propiedad P consiste en que la entrada es de longitud par, para una
palabra de entrada como aaba la salida seria 1, y para bab ser´ıa 0.
La MT correspondiente debe generar los c´alculos siguientes:
[[s, ε, , w]] ∗
[[h, 1, , ε]]
si |w| es par, y
[[s, ε, , w]] ∗
[[h, 0, , ε]]
si |w| es non.
Un dise˜no para la MT que decide si una entrada en el alfabeto Σ = {a, b} es de longitud
par aparece en la figura 6.6. La estrategia en este dise˜no es primero recorrer la cabeza al
182 CAP´ITULO 6. M ´AQUINAS DE TURING
/R
/R
a,b//L
/R
4
1 3 5
6
/L
a,b/
/L
h
0/R
2
a,b/R
8
/1
7
/0
1/R
h
Figura 6.6: MT que decide si la entrada es de longitud par
extremo derecho, y luego ir borrando los caracteres de entrada, de derecha a izquierda, y
“recordando” mediante los estados 3 y 5 si la cantidad de letras es, hasta el momento, par
o impar, respectivamente. Al terminar de borrar la palabra de entrada, seg´un que se haya
terminado en el estado 3 o 5, se escribe 1 o 0 en la cinta, y se llega a halt.
Definici´on.- Decimos que un lenguaje L es Turing-decidible si hay alguna MT que entrega
un resultado 1 si la entrada w est´a en L, y un resultado 0 en caso contrario.
Debe quedar claro que para que una MT entregue como resultado 1 o 0, es condici´on
indispensable que la palabra de entrada haya sido aceptada. Esto tiene la consecuencia
siguiente:
Proposici´on.- Un lenguaje es Turing-decidible solamente si es Turing-aceptable.
Si un lenguaje no es Turing-decidible se dice que es indecidible. M´as adelante veremos
lenguajes indecidibles.
6.4.1. Relaci´on entre aceptar y decidir
Las siguientes propiedades que relacionan “Turing-decidible” con “Turing-aceptable” son
´utiles para comprender mejor ambas nociones:
1. Todo lenguaje Turing-decidible es Turing-aceptable
2. Si L es Turing-decidible, Lc
es Turing-decidible
3. L es decidible ssi L y Lc
son Turing-aceptables
6.5. TESIS DE CHURCH 183
La prueba de 1 es muy sencilla, pues para decidir un lenguaje L, la MT debe primero
que nada llegar al halt para toda palabra de w ∈ L, con lo que necesariamente acepta w.
Tambi´en el punto 2 es sencillo, pues dada una MT M que decide el lenguaje L, producimos
una m´aquina M que decide Lc
cambiando en M el resultado 1 por 0 y viceversa.
La prueba de 3 es m´as complicada. De hecho no probaremos que si L y Lc
son Turing-
aceptables entonces L es decidido por alguna MT, sino m´as bien que hay un procedimiento
mec´anico para decidir L. Se supone que, por la llamada Tesis de Church, que veremos luego,
ambos enunciados son equivalentes. Supongamos que tenemos dos MT, M y Mc
, que aceptan
respectivamente los lenguajes L y Lc
. Ponemos a funcionar ambas m´aquinas “en paralelo”,
analizando ambas la misma palabra w. Ahora bien, si w ∈ L, eventualmente M llegar´a al
halt. Si w /∈ L, entonces w ∈ Lc
, y en alg´un momento Mc
se detendr´a. Ahora consideremos
una MT adicional M∗
, que “observa” a M y a Mc
, y que si M se para, entrega una salida
1, mientras que si Mc
se para, entrega una salida 0. Es evidente que para toda palabra w,
M∗
decidir´a 1 o 0, por lo que el lenguaje es decidible.
6.5. Tesis de Church
Ha habido diversos intentos de encontrar otros modelos de m´aquinas u otros formalismos
que sean m´as poderosos que las MT, en el mismo sentido que las MT son m´as poderosas que
los AF y los AP. (Decimos que una tipo de m´aquina MA es m´as poderoso que un tipo MB
cuando el conjunto de lenguajes aceptados por alguna m´aquina en MB es un subconjunto
propio de los aceptados por MA). Por ejemplo, independientemente de Turing, Emil Post
propuso a´un otro modelo de m´aquina abstracta, basada en la idea de un diagrama de flujo
[12].
Tambi´en se han tratado de hacer “extensiones” a la MT, para hacerla m´as poderosa.
Por ejemplo, se propusieron MT no deterministas. Sin embargo, todos los intentos han sido
infructuosos al encontrarse que dichas extensiones son equivalentes en poder de c´alculo a la
MT original [10].
El mismo A. Turing propuso, en la llamada “Tesis de Turing”, que todo aquello que puede
ser calculado, podr´a ser calculado en una MT, y que no podr´a haber una m´aquina abstracta
que calcule algo que la MT no pueda calcular [11]. M´as a´un, A. Church, a la saz´on inventor
del c´alculo lambda –uno de los sistemas competidores de la MT–, propuso la conjetura de que
en realidad no puede haber ning´un modelo de c´omputo m´as poderoso que los desarrollados
hasta entonces, que inclu´ıan la MT, su c´alculo lambda, as´ı como otras m´aquinas abstractas,
como la m´aquina de Post.
Hasta nuestros d´ıas la llamada “tesis de Church” no ha podido ser probada ni refutada.
La tesis de Church, sin embargo, no se considera un teorema que pudiera ser eventualmente
probado, sino simplemente una hip´otesis de trabajo.
184 CAP´ITULO 6. M ´AQUINAS DE TURING
6.5.1. Comparaci´on de las MT con otras m´aquinas
Podemos considerar comparaciones de la MT con:
1. Extensiones a la MT
a) MT con varias cintas, varias cabezas
b) MT con no determinismo
2. Otras m´aquinas de cinta
3. Otros paradigmas (m´aquinas de Post, Gram´aticas)
De todas estas posibilidades, s´olo consideraremos las m´aquinas de Post. Las compara-
ciones restantes pueden ser encontradas en la referencia [10].
Las pruebas que vamos a considerar se basan en el principio de la simulaci´on. Esta consiste
informalmente en que la m´aquina simuladora act´ua como lo har´ıa la m´aquina simulada.
Formalmente consiste en un mapeo µ que asocia a cada configuraci´on de la m´aquina
simuladora Mora una configuraci´on de la m´aquina simulada Mada, y a cada acci´on de Mora una
acci´on de Mada, de modo tal que se cumpla la correspondencia de los tres puntos se˜nalados
arriba.
6.6. M´aquinas de Post
En esta secci´on presentaremos los elementos de la m´aquina propuesta por E. Post, de
manera similar a como aparecen en [12].
Conceptualmente las m´aquinas de Post tienen poca relaci´on con el modelo b´asico de
m´aquinas que hemos visto hasta el momento –b´asicamente derivaciones de los AF. Las
m´aquinas de Post (MP) est´an basadas en el concepto de diagramas de flujo, tan habituales en
nuestros d´ıas por la ense˜nanza de la programaci´on en lenguajes imperativos (C, Pascal, etc.).
La utilidad pr´actica de los diagramas de flujo es una de las razones para incluir el estudio de
las m´aquinas de Post en este texto, a´un cuando en muchos otros textos se prefiere comparar
a las MT con los “sistemas de reescritura”, con el “c´alculo lambda” y otras alternativas.
En un diagrama de flujo se van siguiendo las flechas que nos llevan de la ejecuci´on de
una acci´on a la siguiente; a este recorrido se le llama “flujo de control”. Algunas acciones
especiales son condicionales, en el sentido de que tienen varias flechas de salida, dependiendo
la que uno tome del cumplimiento de cierta condici´on. 5
5
Pensamos que el lector est´a habituado a los diagramas de flujo, por lo que no abundaremos en ejemplos
y explicaciones.
6.6. M ´AQUINAS DE POST 185
M´as espec´ıficamente, los diagramas de flujo de Post, llamados “M´aquinas de Post” (MP),
consideran unas acciones muy elementales cuyo efecto eventualmente es alterar el valor
de una ´unica variable x. La variable x es capaz de almacenar una cadena de caracteres
arbitrariamente grande.
x ← xa
x ← xb
 
x ← x@
START
REJECT
ACCEPT
x tail(x)←
a b # @ εεεεε
Inicio
Rechazo
Acepta
Condicion
Asignacion
Figura 6.7: Acciones en MP
En la figura 6.7 presentamos un resumen de las acciones de la MP, las cuales son: 6
Inicio. La acci´on START indica el punto en que empieza a recorrerse el diagrama de flujo.
Rechazo. La acci´on REJECT indica que la palabra de entrada no es aceptada (es rechaz-
ada). Adem´as termina la ejecuci´on del diagrama.
Acepta. La acci´on ACCEPT indica que la palabra de entrada es aceptada. Tambi´en ter-
mina la ejecuci´on del diagrama.
Condicional. La acci´on x ← tail(x) tiene el efecto de quitar el primer caracter de la
palabra almacenada en la variable x; la continuaci´on del diagrama depender´a de cu´al
fue el caracter que se quit´o a x, habiendo varias salidas de la condicional, indicadas
con sendos s´ımbolos, que corresponden al caracter que se quit´o a la variable. En otras
palabras, si la palabra de entrada es σ1, σ2, . . . , σn, el camino que tomemos para seguir
el diagrama ser´a el indicado con un s´ımbolo que coincida con σ1. Hay adem´as una
salida marcada con ε, para el caso de que la variable x contenga la palabra vac´ıa (antes
de tratar de quitarle el caracter).
Asignaci´on. Las acciones de la forma x ← xa, donde a ∈ Σ, tienen el efecto de a˜nadir a la
variable x el caracter a por la derecha. As´ı, si x = α antes de la asignaci´on, despu´es de
ella tendremos x = αa. Hay una instrucci´on x ← xa para cada caracter a ∈ Σ.
6
Hemos utilizado los nombres en ingl´es para las acciones de la MP, simplemente por compatibilidad con
la gran mayor´ıa de los textos disponibles.
186 CAP´ITULO 6. M ´AQUINAS DE TURING
x tail(x)←
a
 
b
ε
¡
ε
START
¢
x ← xa
x tail(x)←
REJECT
ACCEPT
x tail(x)←
REJECT
a
 
bε
¡
ε
a
 
ε
¡
ε
b
x x@←
£
←
@
¤
x x@←
£
←
@
¤
@
¤
x←xb
Figura 6.8: MP para {an
bn
}
Ejemplo.- La MP de la figura 6.8 acepta el lenguaje {an
bn
}. En efecto, siguiendo dicha
figura, podemos ver que la variable x toma los siguientes valores al recorrer el diagrama de
flujo:
Acci´on Valor de x
START aabb
x ← x@ aabb@
x ← tail(x) abb@
x ← tail(x) bb@
x ← xa bb@a
x ← tail(x) b@a
x ← tail(x) @a
x ← xb @ab
x ← tail(x) ab
x ← x@ ab@
x ← tail(x) b@
x ← tail(x) @
x ← tail(x) ε
x ← x@ @
x ← tail(x) ε
ACCEPT
Como se puede observar en este listado, las letras a, b y el caracter @ salen de la variable x
por la izquierda, por la acci´on de x ← tail(x), y luego entran por la derecha, como resultado
6.6. M ´AQUINAS DE POST 187
de una acci´on x ← xσ, donde σ es el caracter u se a˜nade a la derecha. En la MP de este
ejemplo, comparando las l´ıneas 2 y 10 del listado podemos ver que en la 10 ya se ha eliminado
una a y una b. Iterando en el diagrama es posible cancelar cada a con cada b hasta que se
agoten las letras.
6.6.1. Formalizaci´on de las MP
Recordemos antes que nada que la formalizaci´on de una m´aquina abstracta reviste dos
aspectos: uno es formalizar los componentes de una m´aquina en particular, esto es, las
informaciones que hacen diferente a una m´aquina de las dem´as de su clase, 7
mientras que
el otro aspecto es el de caracterizar el funcionamiento de las m´aquinas que tratamos de
formalizar. En el primer aspecto, las MP podr´ıan ser caracterizadas como grafos, donde los
nodos ser´ıan las acciones, y los v´ertices ser´ıan las flechas del diagrama de Post. Esto es, una
MP ser´ıa b´asicamente un conjunto de nodos N, clasificados de acuerdo con las acciones que
tienen asociadas, as´ı como una funci´on de transici´on que determine cu´al es el nodo siguiente
en el diagrama. As´ı tendremos:
Definici´on.- Una MP es una tripleta (N, Σ, δ), donde:
N = NA ∪NC ∪{START, ACCEPT, REJECT}, siendo NA el conjunto de nodos de
asignaci´on y NC el conjunto de nodos condicionales. En otras palabras, los nodos est´an
clasificados seg´un la acci´on que tienen asociada. Adicionalmente NA est´a clasificado
seg´un la letra que se a˜nade por la derecha, es decir, NA = NAσ1 ∪ NAσ2 ∪ . . . NAσn
Como de costumbre, Σ es el alfabeto, que no incluye el caracter @.
δ es la funci´on de transici´on que nos indica cu´al es el siguiente nodo al que hay que ir:
δ : N − {ACCEPT, REJECT} × Σ ∪ {@, ε} → N − {START}
Como se ve, el nodo destino de δ depende del nodo anterior y de un caracter (el caracter
suprimido, en el caso de la acci´on condicional –en todas las dem´as acciones el caracter es
irrelevante y el destino debe ser el mismo para todo caracter).
Ahora trataremos de formalizar el funcionamiento de las MP. Como habitualmente, nos
apoyaremos en la noci´on de configuraci´on. En la configuraci´on debemos resumir todas las
informaciones que caracterizan completamente la situaci´on en que se encuentra una MP a
mitad de un c´alculo. En la configuraci´on de una MP vamos a considerar, evidentemente,
el punto en que nos encontramos al recorrer el diagrama de flujo –lo que formalmente se
representar´ıa como un nodo n ∈ N. 8
Adem´as necesitamos considerar el contenido de la
variable, que es una palabra formada por letras del alfabeto, pudiendo aparecer adem´as el
7
Este era el caso de las qu´ıntuplas (K, Σ, δ, s, F) para los AF.
8
Al decir que estamos en un nodo n, significa que a´un no se ejecuta la acci´on del nodo n.
188 CAP´ITULO 6. M ´AQUINAS DE TURING
caracter especial @. Entonces la configuraci´on es un elemento de N ×(Σ∪{@})∗
. Por ejemplo,
una configuraci´on ser´ıa [[n, ab@aa]].
La relaci´on entre dos configuraciones C1 M C2, que significa que se puede pasar en la
MP M de la configuraci´on C1 a C2, se define de la manera siguiente:
Definici´on.- [[m, au]] [[n, bw]], a, b ∈ Σ ∪ {ε, @}, u, w ∈ (Σ ∪ {@})∗
ssi δ(m, a) = n, y
1. Si m ∈ NT , u = bw
2. Si m ∈ NAσ, a = b, w = uσ
3. Si m = s, a = b, u = w
Definici´on.-Una palabra w ∈ Σ∗
es aceptada por una MP M ssi [[START, w]] ∗
M
[[ACCEPT, v]].
Una palabra puede no ser aceptada ya sea porque se cae en un REJECT o bien porque
la MP cae en un ciclo infinito.
Ejercicio.- Definir similarmente a como se hizo con las MT la noci´on de funci´on calculada.
6.6.2. Equivalencia entre MP y MT
El mismo Post comprob´o la equivalencia entre sus diagramas de flujo y las m´aquinas de
Turing, lo que contribuy´o a reforzar la conjetura establecida por A. Church –esto es, que la
MT es la m´as poderosa expresi´on de lo algor´ıtmicamente calculable.
Teorema de Post.- Para toda MT hay una MP que acepta el mismo lenguaje, o que
calcula la misma funci´on, y viceversa.
La prueba del teorema de Post se hace mostrando que una MT puede ser simulada por
una MP, y viceversa. Al simular MT en MP mostramos que estas ´ultimas son al menos
tan poderosas como las primeras (en el sentido de que pueden hacer todo lo que haga MT);
similarmente en el sentido contrario. Al establecer ambas direcciones de la prueba se muestra
la equivalencia MP-MT. Por “simular” entendemos que, por cada acci´on de la MT, la MP
haga una acci´on correspondiente, de manera tal que al final del c´alculo, una palabra sea
aceptada en Post ssi es aceptada tambi´en en Turing; similarmente para el sentido contrario
de la prueba.
La simulaci´on de la MT involucra los siguientes aspectos:
Codificar las configuraciones de la MT en configuraciones de la MP
6.6. M ´AQUINAS DE POST 189
Para cada acci´on de MT, encontrar un diagrama en MP que haga lo mismo.
La codificaci´on de la configuraci´on de la MT en una configuraci´on “equivalente” de la
MP involucra considerar c´omo codificar cada una de las informaciones de la configuraci´on
de MT. En particular, hay que pensar c´omo expresar en MP el contenido de la cinta de MT,
as´ı como la posici´on de la cabeza lectora.
Sea una configuraci´on [[q, w, u, v]] en MT. Entonces en la variable de la MP tendr´ıamos:
uv@w. Como se ve, el primer caracter de la variable es el mismo caracter sobre el que est´a la
cabeza lectora en la MT; luego sigue a la derecha la misma cadena que en la MT. En cambio,
la parte izquierda de la cinta en MT es colocada en la variable de MP separada por el caracter
especial “@”. Por ejemplo, si en MT tenemos una cinta de la forma abaabbb, la variable de
MP contendr´a la cadena abbb@aba.
Ahora hay que considerar c´omo “traducir” las acciones de una MT a acciones correspon-
dientes en una MP. Consideramos los siguientes casos:
Escritura de caracter: Sea una transici´on δ(p, d) = (q, σ), donde σ ∈ Γ. Al paso entre
configuraciones de MT:
[[p, abcdefg]] [[q, abcσefg]]
corresponde el paso de x a x como sigue:
x = defg@abc x = σefg@abc
Para hacer la transformaci´on indicada (de x a x ) en MP, hay que encontrar un dia-
grama que la efect´ue. Un diagrama que cumple con esta funci´on aparece en la figura
6.9.
Movimiento a la derecha: Al paso entre configuraciones de MT:
[[p, abcdefg]] [[q, abcdefg]]
corresponde el paso de x a x :
x = defg@abc x = efg@abcd
Este paso de x a x se puede hacer con el (muy simple) diagrama de MP de la figura
6.10.
Movimiento a la izquierda: A un paso entre configuraciones en MT:
[[p, abcdefg]] [[q, abcdefg]]
corresponde el paso de x a x :
x = defg@abc x = cdefg@ab
El diagrama de la MP que hace dicha operaci´on es dejado como ejercicio (medianamente
dif´ıcil) al lector (ver secci´on de ejercicios).
190 CAP´ITULO 6. M ´AQUINAS DE TURING
x tail(x)
x tail(x)
x tail(x)
{defg@abc}
{efg@abc}
x x@
x x σ
{efg@abc@}
{efg@abc@ }σ
x x u
u=@u = @
x x @
{abc@ efg}σ
{abc@ efg@}σ
x x u
u=@u = @
{ efg@abc}σ
Figura 6.9: Escritura en MP
x x← ζζ
x tail(x)←
ζ
Figura 6.10: Movimiento a la derecha en MP
6.7. L´IMITES DE LAS MT 191
La prueba de equivalencia MT-MP en el otro sentido –esto es, la simulaci´on por parte
de una MT de una MP– es mucho m´as simple. Primero se toma el contenido inicial de la
variable de entrada como palabra de entrada de la MT. Luego cada una de las operaciones
de MP (x ← xσ, x ← tail(x), ACCEPT, REJECT) pueden ser simuladas por la MT
correspondiente. Dejamos nuevamente los detalles de esta prueba al lector (ver secci´on de
ejercicios).
6.7. L´ımites de las MT
Aunque parezca incre´ıble, hay problemas que no se pueden resolver como una secuencia
determinista de operaciones elementales, que es lo esencial de las MT. Estos problemas son
llamados algor´ıtmicamente irresolubles. Vamos a concentrar nuestra atenci´on en problemas
del tipo: dados una palabra w y (la descripci´on de) un lenguaje L, decidir si w ∈ L, que son
llamados “problemas de pertenencia de palabras” (word problems). Decimos que un lenguaje
L es decidible si hay una MT para decidir el problema de la pertenencia de palabras. Muchos
otros problemas que no son del tipo mencionado pueden sin embargo expresarse en t´erminos
de ´estos mediante una transformaci´on adecuada; por ejemplo, el problema de determinar si
dos gram´aticas G1 y G2 son equivalentes, puede expresarse de la manera siguiente: Para toda
w ∈ L(G1), decidir si w ∈ L(G2).
6.7.1. El problema del paro de MT
Ahora vamos a considerar un problema irresoluble que hist´oricamente tuvo mucha im-
portancia porque fue el primer problema que se prob´o irresoluble. Una vez que se cuenta con
un primer problema irresoluble, la prueba de que otros problemas son irresolubles consiste
en probar que ´estos pueden ser reducidos al problema de referencia. Este primer problema
irresoluble es el del paro de la MT.
El problema del paro de la MT consiste en determinar algor´ıtmicamente –esto es, medi-
ante una MT– si una MT dada M va a parar o no cuando analiza la palabra de entrada w.
Desde luego, como una MT analiza el comportamiento de otra, se requiere que esta ´ultima
sea dada como entrada a la primera; esto puede ser hecho mediante una codificaci´on de la
MT que debe analizarse. Una manera simple de codificar una MT es considerando la cade-
na de s´ımbolos de su representaci´on como cu´adruplo (K, Σ, δ, s). Denotaremos con d(M) la
codificaci´on de una MT M. 9
Teorema.- No existe ninguna MT tal que, para cualquier palabra w y cualquier MT M,
decida si w ∈ L(M).
9
Esta soluci´on para codificar una MT no es perfecta, pues el alfabeto usado para codificar una MT
arbitraria no puede determinarse de antemano; no haremos por el momento caso de este detalle t´ecnico.
192 CAP´ITULO 6. M ´AQUINAS DE TURING
d(M)
w
M para con w
M no para con w
1
0
Figura 6.11: El problema del paro de una MT
En la figura 6.11 se muestra c´omo deber´ıa funcionar la MT que resolver´ıa el problema
del paro.
Prueba 10
Por contradicci´on.- Sea A la MT de la figura 6.12(a). Entonces construimos
otra MT B, como se representa en la figura 6.12(b), esto es, se tiene una ´unica entrada con
la codificaci´on d(M) de la MT M, y se pasa esta palabra a una MT copiadora, que duplica la
entrada d(M). La salida de la copiadora ser´a dos veces d(M). Esto es pasado como entrada
a una m´aquina A que es A modificada 11
de la siguiente manera: a la salida 1 de A la
cambiamos de forma que en vez de dar el halt se cicle; debe quedar claro que esto siempre
puede hacerse. Ahora bien, comparando A con A se ve que la salida 1 corresponde al hecho
de que M para con d(M).
Finalmente supongamos que aplicamos la m´aquina B a una entrada formada por la misma
m´aquina codificada, esto es, d(B). Entonces cuando B se cicla, esto corresponde a la salida
que indica que “B se para con d(B)”, lo cual es contradictorio. Similarmente, B entrega un
resultado 0 –esto es, se para– en el caso que corresponde a “B no se para con d(B)”, que
tambi´en es contradictorio. Esto se ilustra en la figura 6.12(c).
Utilizando el problema del paro de la MT como referencia, se ha probado que otros
problemas son tambi´en insolubles. Entre los m´as conocidos, tenemos los siguientes:
El problema de la equivalencia de las gram´aticas libres de contexto.
La ambig¨uedad de las GLC.
El problema de la pertenencia de palabras para gram´aticas sin restricciones.
No haremos la prueba de estos resultados; remitimos al lector a las referencias [10], [7].
6.8. MT en la jerarqu´ıa de Chomsky
En conclusi´on, las MT no son capaces de aceptar todos los lenguajes posibles en 2Σ∗
. Sin
embargo, este hecho puede ser establecido simplemente a partir de la enumerabilidad de las
10
Esta prueba es debida a M. Minsky [14], aunque la primera prueba data de Turing [24].
11
Obs´ervese que la segunda repetici´on de d(M) es de hecho la palabra w que se supone que es sometida a
M.
6.8. MT EN LA JERARQU´IA DE CHOMSKY 193
               
               
               
               
               
               
               
               
               
               
               
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
d(M)
w
M para con w
M no para con w
1
0
A
(a) M´aquina A
             
             
             
             
             
             
             
             
             
             
             
¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡
d(M)d(M)
M para con d(M)
M no para con d(M)
cicla
0
copia
A’
d(M)
B
(b) M´aquina B
             
             
             
             
             
             
             
             
             
             
             
¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡
d(B)d(B)
B para con d(B)
B no para con d(B)
cicla
0
copia
A’
d(B)
B
(c) Contradicci´on
Figura 6.12: Prueba del paro de MT
MT: puesto que las MT son cu´adruplos (K, Σ, δ, s) -y por lo tanto elementos de un producto
cartesiano-, al ser enumerable cada uno de los componentes necesariamente el cu´adruplo es
tambi´en enumerable. En efecto:
Los conjuntos de los estados posibles son enumerables si estandarizamos los nombres
de los estados a q0, q1, q2, etc., lo cual evidentemente no altera ning´un aspecto del
funcionamiento de la MT (ver secci´on de ejercicios).
Similarmente, un alfabeto est´andar σ0, σ1, σ2, etc., puede codificar cualquier alfabeto
en particular. As´ı, tambi´en los alfabetos son enumerables.
La funci´on de transici´on es parte de otros productos cartesianos de estados y caracteres,
por lo que es tambi´en enumerable.
Los estados iniciales trivialmente son enumerables, siguiendo la estandarizaci´on del
primer punto.
194 CAP´ITULO 6. M ´AQUINAS DE TURING
Ahora bien, al ser enumerables las MT, resulta que no puede mapearse un elemento de
2Σ∗
con una MT distinta, y por lo tanto hay lenguajes que no tienen una MT que los acepte.
Desde luego, el resultado anterior no ayuda a localizar exactamente qu´e lenguajes no
son aceptados por ninguna MT; esto ya se hab´ıa hecho para algunos lenguajes en la secci´on
precedente.
Resulta ´util entonces ubicar la parte de los lenguajes que s´ı pueden aceptar las MT con
respecto a otras clases de lenguajes, siguiendo la estructura de clases de lenguajes llamada
“jerarqu´ıa de Chomsky”, que presentamos en las secciones 1.5 y 4.1
Recordando la jerarqu´ıa de Chomsky, que clasifica los lenguajes en categor´ıas, y la forma
en que se asocian distintos tipos de m´aquinas a dichas categor´ıas de lenguajes, ahora estamos
en condiciones de refinar la tabla que fue presentada en la secci´on 4.1, de la manera siguiente
(indicamos entre par´entesis las secciones de este libro donde se presenta cada tema):
Tipo de Lenguaje que Gram´atica que
aut´omata procesa lo genera
Aut´omatas finitos Lenguajes Regulares Gram´aticas regulares
(2.2) (3) (3.5)
Aut´omatas de Pila Lenguajes Libres de Contexto Gram. libres de contexto
(5) (4) (4)
Aut´om. linealmente acotados Leng. Sensitivos al Contexto Gram. sensitivas al contexto
(4.7) (4.7)
M´aq. de Turing decidiendo Lenguajes Recursivos
(6.4)
M´aq. de Turing aceptando Leng.Recursiv. Enumerables Gram. no restringidas
(6.2.5) (4.1)
En esta tabla hemos diferenciado la clase de lenguajes que pueden ser decididos por una
MT, que son llamados “recursivos”, de los lenguajes que pueden ser aceptados por una MT,
que son los “recursivamente enumerables”, aunque no hemos definido ninguno de ellos m´as
que por su relaci´on con las MT. 12
Asimismo hemos mencionado, por completez, la clase de los lenguajes Sensitivos al Con-
texto, que fueron citados en la secci´on 4.7, aunque no hemos estudiado los aut´omatas “lin-
ealmente acotados” en este libro; pueden estudiarse en las referencias [21] o [7].
De acuerdo con la presentaci´on de la jerarqu´ıa de Chomsky que hicimos al estudiar las
gram´aticas en la secci´on 4.1, las MT son equivalentes en poder de c´alculo a las gram´aticas
no restringidas. La prueba de esto puede ser consultada en diversas referencias [10], [7].
12
“Recursivamente enumerables” es solamente otro nombre para “Turing aceptable”, usado en textos como
[7].
6.9. EJERCICIOS 195
As´ı, de acuerdo con la Tesis de Church, los lenguajes recursivamente enumerables son el
m´as extenso conjunto de lenguajes que pueden ser algor´ıtmicamente analizados.
6.9. Ejercicios
1. Dise˜ne un diagrama de estados para la MT del ejemplo de la secci´on 6.2.5, esto es para
aceptar el lenguaje an
bn
cn
. Obtenga tambi´en la representaci´on formal de dicha MT.
2. Dise˜ne un diagrama de m´aquina de Turing para calcular la funci´on |log2n|, usando las
m´aquinas b´asicas vistas. Describa las acciones efectuadas sobre la cinta.
3. Complete el dise˜no de la MT para el ejemplo de la secci´on 6.3, esto es para calcular
restas de n´umeros en unario. Exprese esta MT usando la representaci´on formal.
4. Dise˜nar una MT que decida si la entrada es de longitud par, para palabras en {a, b}∗
.
5. Proponga una MT (o diagrama) que:
a) Acepte las palabras de la forma an
bm
, n, m > 0.
b) Decida si en una palabra an
bm
se cumple m < n.
6. Proponer una MT (su diagrama) que:
a) Acepte el lenguaje vac´ıo (∅)
b) Decida el lenguaje vac´ıo
c) Acepte el lenguaje {ε}
d) Decida el lenguaje {ε}
7. Representar formalmente la MP de la figura 6.8.
8. Probar la enumerabilidad de los conjuntos de estados con nombres uniformizados q0,
q1, q2, etc. Ayuda: Considere una representaci´on binaria de cada conjunto de estados,
tomando 1 si el estado en cuesti´on est´a presente, y 0 si no est´a.
9. Una variante de la MT consiste en hacer que la m´aquina haga un movimiento y tambi´en
escriba en cada acci´on. Dichas m´aquinas son de la forma (K, Σ, δ, s), pero δ es una
funci´on de (K ×S) a (K ∪{h})×Σ×{L, R, S}, donde el “movimiento” S significa que
la cabeza permanece en el lugar en que estaba. D´e la definici´on formal de la relaci´on
(“produce en un paso”).
10. Supongamos unas “MTCE” que son como las MT, pero en vez de tener una cinta
infinita a la derecha, tienen una “cinta estirable”, que inicialmente contiene s´olo cuadros
en la cinta para la palabra de entrada y para un blanco a cada lado de dicha palabra,
y que cuando se se mueve a la derecha fuera de la cinta, autom´aticamente es creado
un nuevo cuadrito, seg´un se va requiriendo. Formalizar las MTCE, en particular la
definici´on de palabra aceptada.
196 CAP´ITULO 6. M ´AQUINAS DE TURING
11. Definir formalmente, en t´erminos de configuraciones de MP y MT, qu´e quiere decir
que una acci´on de MP “hace lo mismo” que la acci´on correspondiente de MT. (Este
problema completa el enunciado del Teorema de Post).
12. Un aut´omata de dos pilas (A2P) es una extensi´on directa de un aut´omata de pila, pero
que tiene dos pilas en vez de una, como en la figura 6.13. Formalice los A2P en la forma
w
Figura 6.13: Autom´ata de dos pilas (A2P)
m´as similar posible a los AP vistos en clase. Defina formalmente las nociones de:
a) Configuraci´on.
b) Palabra aceptada y lenguaje aceptado.
c) Proponga un A2P que acepte el lenguaje {an
bn
cn
}.
d) ¿Tienen los A2P el poder de c´alculo de las MT? (Es decir, ¿todo lenguaje Turing-
aceptable es aceptado por alg´un A2P?). Pruebe su respuesta. Ayuda: mostrar
c´omo simular una MT con A2P.
e) Adapte las definiciones de A2P, configuraci´on y palabra aceptada para A2Pn.
f ) Dos A2Pn son equivalentes ssi aceptan el mismo lenguaje. Demuestre que el prob-
lema de la equivalencia de los A2Pn es / no es decidible.
START
 
REJECT
ACCEPTx tail(x)
¡
←
a b
ε
¢
x tail(x)
¡
←
b
a
ACCEPT
ε
¢
Figura 6.14: M´aquina de Post
13. Suponga un subconjunto MP1 de las m´aquinas de Post, con la restricci´on de que no
tienen las instrucciones x ← xσ. Ahora bien, MP1 es equivalente a AF.
a) Demuestre esta afirmaci´on constructivamente, proponiendo un m´etodo sistem´atico
para pasar de una MP1 a un AF que acepte el mismo lenguaje.
6.9. EJERCICIOS 197
b) Pruebe el m´etodo propuesto en (a) con la MP1 dada en la figura 6.14.
c) Pruebe si la MP1 del inciso anterior acepta o no el lenguaje (abb ∗ a)∗, bas´andose
en alg´un procedimiento sistem´atico (explicar cu´al es dicho procedimiento sis-
tem´atico).
d) Si en una variante MP2 se permiten asignaciones x ← σ, donde σ ∈ Σ∗
, ¿a
qu´e tipo de aut´omata corresponde MP2? ¿Porqu´e?
14. Si a las m´aquinas de Post les cambiamos ligeramente las asignaciones para que sean
de la forma x ← σx , ¿siguen siendo equivalentes a las MT? Pruebe su afirmaci´on; ya
sea:
a) Si son equivalentes, probando que pueden hacer lo mismo (por ejemplo, por sim-
ulaci´on).
b) Si no son equivalentes a Turing, pero son equivalentes a alguna m´aquina inferior,
probando dicha equivalencia.
c) Si no son equivalentes a Turing, encontrando alg´un lenguaje que una s´ı puede
aceptar y la otra no (habr´ıa que probar esto).
15. Suponga una variante de las m´aquinas de Turing, las MT2 en que se tienen dos cintas
(cinta 1 y cinta 2) en vez de una; ambas son infinitas hacia la derecha y tienen sendas
cabezas lectoras. Por cada transici´on, se leen a la vez los caracteres de las dos cintas,
y el control finito determina la acci´on a realizar (simult´aneamente) en las cintas, que
pueden ser movimientos o escrituras, como en una MT normal. Las acciones en las dos
cintas son independientes, esto es, en la cinta 1 puede tener una acci´on L y en la cinta
2 escribir, etc., en un solo movimiento. La palabra de entrada se escribe en la cinta 1.
a) Proponga una definici´on formal de las MT2
b) Defina las nociones de configuraci´on y palabra aceptada.
c) Defina funci´on calculada, suponiendo que el resultado queda en la cinta 2.
16. Suponga una variante de las MT, las MTS en que se puede al mismo tiempo escribir
en la cinta y hacer los movimientos a la izquierda y a la derecha (L y R); cuando se
quiere solamente escribir (sin mover la cabeza) se hace un movimiento nulo (N).
a) Defina las MTS, as´ı como su funcionamiento (hasta definir palabra aceptada).
b) Pruebe que las MTS son tan poderosas como la MT cl´asica (muestre c´omo obtener
a partir de una MT la MTS equivalente).
c) Pruebe ahora lo rec´ıproco, mostrando c´omo obtener una MT cl´asica a partir de
una MTS dada.
17. Conteste las siguientes preguntas, justificando la respuesta:
a) ¿El complemento de un lenguaje Turing-decidible es tambi´en Turing-decidible?
b) ¿El complemento de un lenguaje Turing-decidible es Turing-aceptable?
198 CAP´ITULO 6. M ´AQUINAS DE TURING
c) ¿Todo lenguaje Turing-decidible ser´a subconjunto de alg´un lenguaje libre de con-
texto?
d) ¿La intersecci´on de un Turing-aceptable con un libre de contexto ser´a libre de
contexto?
18. Es sabido que el problema de la equivalencia de MT es indecidible. Sin embargo, para
algunos subconjuntos de las MT s´ı es posible decidir la equivalencia. Para las sigu-
ientes MT (no deterministas), probar rigurosamente su equivalencia / no equivalencia
respecto a la aceptaci´on / rechazo de palabras (es decir, que los lenguajes aceptados
son iguales), describiendo el m´etodo utilizado para esta prueba:
MT1 = ({f, g, j, k, m}, {a, b}, {a, b, }, δ1, f)
f g L
g h
g a L L
g b f L
f a f L
f b f L
j a m L
j b k L
k a m L
k b f L
k h
m a m L
m b k L
MT2 = ({o, q, n, p}, {a, b}, {a, b, }, δ2, q)
q o L
o h
o a n L
o b p L
n a n L
n b o L
p a p L
p b p L
19. Si limitamos el tama˜no de la cinta de una m´aquina de Turing a una cantidad fija k de
cuadros, dando una variante que llamaremos MTk,
a) ¿disminuye por ello el poder de c´alculo? ¿A qu´e tipo de aut´omatas ser´ıan equiv-
alentes las MTk ? Pruebe su respuesta.
b) ¿Es posible decidir si dos MTk son equivalentes? Pruebe su respuesta, y en el caso
afirmativo, proponga el m´etodo de decisi´on correspondiente.
6.9. EJERCICIOS 199
20. Realizar el diagrama de MP que simula el movimiento de la cabeza a la izquierda en
una MT (esto es parte de la prueba de equivalencia de MP y MT).
21. Completar la prueba de equivalencia de las MP y las MT, detallando la simulaci´on de
la MP en una MT, siguiendo las ideas esbozadas en la p´agina 191.
200 CAP´ITULO 6. M ´AQUINAS DE TURING
Bibliograf´ıa
[1] A. Aho, J. Ullman.- Principles of Compiler Design, Addison-Wesley, Reading, Mass.,
1978.
[2] J. Barwise, J. Etchemendy.- Turing’s World 3.0 -An Introduction to Computability The-
ory, CSLI Publications, Stanford, CA, 1993.
[3] G. Brookshear.- Teor´ıa de la Computaci´on, Addison Wesley Iberoamericana, 1993.
[4] N. Chomsky.- Aspects of the Theory of Syntax, Cambridge, MIT Press, 1965.
[5] V. Drobot.- Formal languages and automata theory, Computer Science Press, 1989.
[6] J. Hopcroft, J. Ullman.- Introduction to Automata Theory, Languages and Computation,
Addison Wesley, 1979.
[7] J. Hopcroft, R. Motwani, J. Ullman.- Introduction to Automata Theory, Languages and
Computation, Second Edition, Addison Wesley, 2001.
[8] D. Kelley.- Teor´ıa de Aut´omatas y Lenguajes Formales, Prentice Hall Hispanoamericana,
1995.
[9] J. Levine, T. Mason, D. Brown.- Lex & Yacc, O’Reilly & Associates, 1992.
[10] H.R. Lewis, Ch.H. Papadimitriou.- Elements of the Theory of Computation, Prentice
Hall, 1981.
[11] P. Linz.- An Introduction to Formal Languages and Automata, D. C. Heath and Com-
pany, 1990.
[12] Z. Manna.- Mathematical Theory of Computation, McGraw Hill, 1974.
[13] G. Mealy.- A method for synthesizing sequential circuits, BSTJ n.34, 1955, pp1045-1079.
[14] M. Minsky.- Computation: Finite and Infinite Machines, Prentice Hall, 1967.
[15] E. Moore.- Gedanken-experiments on sequential machines, en “Automata Studies” (C.
Shannon, J. McCarthy eds.), Princeton Univ. Press, 1956.
[16] J.L. Peterson.- Petri Net Theory and the Modeling of Systems, Prentice Hall, 1981.
201
202 BIBLIOGRAF´IA
[17] C. Petri.- Kommunication mit Automaten, Universidad de Bonn, 1962.
[18] J.I.. Pozo.- Teor´ıas cognitivas del aprendizaje, 2da Ed., Morata, Madrid, Espa˜na, 1993.
[19] S. Sahni.- Concepts in Discrete Mathematics, Camelot Publishing Co. 1985.
[20] M. Silva.- Las Redes de Petri en la Autom´atica y la Inform´atica, Editorial AC, 1985.
[21] M. Sipser.- Introduction to the Theory of Computation, PWS Pub. Co., 1997.
[22] G. Springer, D.P. Friedman.- Scheme and the Art of Programming, The MIT Press,
1989.
[23] T. Sudkamp.- LANGUAGES AND MACHINES.- An Introduction to the Theory of
Computer Science, Addison Wesley, 1994.
[24] A. Turing.- On computable numbers with an application to the Entscheidungs-problem,
Proc. London Math. Soc., v.2, n.42, pp230-265.
´Indice alfab´etico
´arbol
de comparaci´on, 44
de compilaci´on, 122
de derivaci´on, 122
AFD, 32
AFN, 58
alfabeto, 17
de constantes, 115
de entrada, 32
de variables, 115
algoritmos de decisi´on, 139
ambig¨uedad, 123
ambigua, 123
analizador l´exico, 155
analizador sint´actico, 156
arboles
de derivaci´on, 115
aut´omata finito determinista, 32
aut´omatas
de Mealy, 53
de Moore, 53
de pila, 146
finitos, 25
no deterministas, 58
aut´omatas equivalentes, 43
Cantor, 89
cerradura
al vac´ıo, 69
de Kleene, 18
reflexiva, 9
sim´etrica, 9
transitiva, 9
Chomsky, 96, 113, 132
Chomsky, N., 19
Church, 183
clases de equivalencia, 50
codominio, 10
compilador
LL, 157
LR, 160
compiladores, 155
completa, 116
completez, 125
concatenaci´on, 17
concatenaci´on de lenguajes, 120
condiciones
comprensivas, 40
excluyentes, 40
conectivos l´ogicos, 13
configuraci´on, 35, 151, 174
configuraci´on colgada, 178
conjunci´on, 13
conjunto
contable, 11
elemento, 4
conjuntos, 3
complemento, 6
diferencia, 6
en extensi´on, 3
en intenci´on, 4
intersecci´on, 6
potencia, 6
producto cartesiano, 6
uni´on, 5
conmutatividad, 14
constantes, 96, 111
correcci´on, 125
correcta, 116
De Morgan, 14
decidible, 191
derivable, 97, 116
derivaci´on
203
204 ´INDICE ALFAB´ETICO
derecha, 124
izquierda, 124
determinismo, 32
diagramas de Venn, 4
distributividad, 14
disyunci´on, 13
dominio, 10
equivalencias
de proposiciones, 14
equivalencias de expresiones regulares, 86
ER, 81
estado, 26
final, 30, 32
inicial, 32
estado inicial, 27
estados
compatibles, 44
incompatibles, 44
estados distinguibles, 48
evento, 26
eventos discretos, 26
expresiones
regulares, 79
FNCH, 132
forma normal de Chomsky, 132
funci´on de transici´on, 32
funciones, 8, 9, 56
inyectivas, 10
sobrelyectivas, 10
totales, 10
generador de c´odigo, 156
gr´aficas de transici´on, 90
gram´atica
ambigua, 123
completa, 116
correcta, 116
incompleta, 117
incorrecta, 117
gram´atica formal, 96
gram´aticas
de tipo 0, 113
de tipo 1, 113
de tipo 2, 113
de tipo 3, 113
libres de contexto, 113
no restringidas, 113
regulares, 79, 96, 113
sensitivas al contexto, 113, 128
GT, 90
halt, 171
implicaci´on, 12
incompleta, 37, 117
incorrecta, 37, 117
inducci´on, 15, 125
jerarqu´ıa de Chomsky, 19, 113, 194
Kantor, teorema, 11
Kleene, 89
lenguaje, 17
aceptado, 34
generado, 97, 116
lenguajes
decidibles, 191
libres de contexto, 19, 111
recursivamente enumerables, 19, 113,
194
regulares, 19, 79
lenguajes recursivos, 194
libres de contexto, 113
LIFO, 146
LL, 157
LLC, 111
lookahead, 156
LR, 160
m´aquina
de Turing, 169
m´aquina de estados finitos, 32
m´aquinas
de Mealy, 55
de Moore, 53
de Post, 185
Mealy, 53
mezcla de gram´aticas, 119
minimizaci´on, 46
modelado, 26
´INDICE ALFAB´ETICO 205
Moore, 53
MP, 185
MT, 169
no restringidas, 113
no terminales, 96
notaci´on formal, 32
nubes, 40
pal´ındromos, 148
palabra, 17
aceptada, 34, 178
generada, 96
palabra vac´ıa, 17
paro de la m´aquina de Turing, 191
pila, 146
Post, 184
principio de previsi´on, 156
problemas irresolubles, 191
proposiciones, 12
recursivamente enumerables, 113, 194
regla, 111
reglas
gramaticales, 96
inaccesibles, 132
regulares, 96, 113
relaci´on
de derivaci´on, 116
inverso, 8
sim´etrica, 9
transitiva, 9
relaciones, 8
reverso, 148
s´ımbolo, 17
s´ımbolo inicial, 96
sensitivas al contexto, 113, 128
simplificaci´on, 46
subcadena, 17
subconjunto, 4
tabla de s´ımbolos, 156
tablas de verdad, 14
teorema
de bombeo, 101
de Cantor, 89
de Kleene, 89
teorema de bombeo, 136
terminales, 96
tesis de Church, 183
tipo 0, 113
tipo 1, 113
tipo 2, 113
tipo 3, 113
tokens, 155
transiciones, 27
Turing, 169
Turing, Alan, 169
Turing-aceptable, 179
Turing-decidible, 182
uni´on de lenguajes, 118
variables, 96, 111

Más contenido relacionado

PDF
Enfoques didácticos para la enseñanza de la expresion escrita
PDF
946024 muestra marco
PDF
Aprender a leer
PDF
Aprender a leer
PDF
Ponencia dificultades de lectoescritura
PPT
Anexos modelos (guía elaboración trabajos escritos
PDF
Tesis Teodoro Álvarez tipologías textuales
PDF
Modulo 3 proyecto_de_mejora_institucional
Enfoques didácticos para la enseñanza de la expresion escrita
946024 muestra marco
Aprender a leer
Aprender a leer
Ponencia dificultades de lectoescritura
Anexos modelos (guía elaboración trabajos escritos
Tesis Teodoro Álvarez tipologías textuales
Modulo 3 proyecto_de_mejora_institucional

La actualidad más candente (9)

PDF
Modulo 1 proyecto_de_mejora_institucional
PDF
Modulo 4
PDF
Modulo 2 proyecto_de_mejora_institucional
PDF
Manual de-estilo-enep-septiembre-2016
DOCX
Octavo tercer periodo (2)
PDF
Informe crítico de lectura
DOCX
Cronograma ceplec 1 viernes
PDF
Redaccion trabajos
PDF
Dialnet el diccionario-5419409
Modulo 1 proyecto_de_mejora_institucional
Modulo 4
Modulo 2 proyecto_de_mejora_institucional
Manual de-estilo-enep-septiembre-2016
Octavo tercer periodo (2)
Informe crítico de lectura
Cronograma ceplec 1 viernes
Redaccion trabajos
Dialnet el diccionario-5419409
Publicidad

Similar a Automatas y lenguajes (20)

PDF
Introducción a la teoría de Autómatas, Lenguajes y Computación..pdf
PDF
2010.029
PDF
Automatas en los lenguajes de programacion y enfocado a la tecnologia entera
PDF
T computacion rodrigo de castro
PDF
Modulo automatas-y-lenguajes-formales
DOC
Programa teoria computacion_2011-1
DOC
Teoría computación
PDF
Autómatas
PDF
Principal
PDF
Apuntes De Matematicas Discretas
PDF
Apuntes De Matematicas Discretas
PDF
Apuntes De Matematicas Discretas
PDF
Apuntes De Matematicas Discretas
PDF
Teoría de lenguajes, gramáticas y autómatas para informáticos.pdf
PDF
Porque estudiar la teoría de autómatas
PDF
Matemáticas discreta y combinatoria, 3ra Edición - Ralph R. Grimaldi-LIBROSVI...
PPTX
Teoría de la computación presentación
PDF
Teoria de automatas y lenguajes formales
PDF
Apuntes de fundamentos de programacion 2
Introducción a la teoría de Autómatas, Lenguajes y Computación..pdf
2010.029
Automatas en los lenguajes de programacion y enfocado a la tecnologia entera
T computacion rodrigo de castro
Modulo automatas-y-lenguajes-formales
Programa teoria computacion_2011-1
Teoría computación
Autómatas
Principal
Apuntes De Matematicas Discretas
Apuntes De Matematicas Discretas
Apuntes De Matematicas Discretas
Apuntes De Matematicas Discretas
Teoría de lenguajes, gramáticas y autómatas para informáticos.pdf
Porque estudiar la teoría de autómatas
Matemáticas discreta y combinatoria, 3ra Edición - Ralph R. Grimaldi-LIBROSVI...
Teoría de la computación presentación
Teoria de automatas y lenguajes formales
Apuntes de fundamentos de programacion 2
Publicidad

Más de Elías Gómez González (20)

PDF
Perspectivalp 11 20
PDF
Sisprod mango re
PDF
PDF
PDF
Iepds salud 2011
PDF
Metodologia aprobacion de_indicadores
PDF
F my e_12_e022
PDF
Carencia a los_servicios_de_salud_2010
PDF
Nota dia-mundial-de-la-salud-2018
PDF
PDF
Documento metodologico proyecciones_mexico_2010_2050
PDF
PDF
Plan conacyt-ciencia-comprometida-con-la-sociedad
Perspectivalp 11 20
Sisprod mango re
Iepds salud 2011
Metodologia aprobacion de_indicadores
F my e_12_e022
Carencia a los_servicios_de_salud_2010
Nota dia-mundial-de-la-salud-2018
Documento metodologico proyecciones_mexico_2010_2050
Plan conacyt-ciencia-comprometida-con-la-sociedad

Último (20)

PDF
manual-sap-gratuito _ para induccion de inicio a SAP
PPTX
clase MICROCONTROLADORES ago-dic 2019.pptx
PPTX
diego universidad convergencia e información
PPTX
Expo petroelo 2do ciclo.psssssssssssssptx
PDF
UD3 -Producción, distribución del aire MA.pdf
PPTX
leyes de los gases Ideales. combustible refinación
PDF
Diseño y Utiliación del HVAC Aire Acondicionado
PPTX
A8B08CED-D3D9-415C-B4A3-2A6CA6409A48.1.1Presentación Dirección 2022 unidade...
PDF
silabos de colegio privado para clases tema2
PDF
Presentación Ejecutiva Minimalista Azul.pdf
PPTX
Riesgo eléctrico 5 REGLAS DE ORO PARA TRABAJOS CON TENSION
PPTX
ARQUITECTURA INTEGRAL EN OBRA, PRINCIPIOS BASICOS Y TERMINOS
PDF
alimentos de bebidas45rtrtytyurrrr 1.pdf
PPTX
Manual ISO9001_2015_IATF_16949_2016.pptx
PPTX
Cómo Elaborar e Implementar el IPERC_ 2023.pptx
PDF
LIBRO UNIVERSITARIO DESARROLLO ORGANIZACIONAL BN.pdf
PDF
Repaso sobre el Gusano_cogollero y como ataca .pdf
PPTX
Curso Corto de PLANTA CONCENTRADORA FREEPORT
PPTX
DEBL Presentación PG 23.pptx [Autoguardado].pptx
PDF
SESION 9 seguridad IZAJE DE CARGAS.pdf ingenieria
manual-sap-gratuito _ para induccion de inicio a SAP
clase MICROCONTROLADORES ago-dic 2019.pptx
diego universidad convergencia e información
Expo petroelo 2do ciclo.psssssssssssssptx
UD3 -Producción, distribución del aire MA.pdf
leyes de los gases Ideales. combustible refinación
Diseño y Utiliación del HVAC Aire Acondicionado
A8B08CED-D3D9-415C-B4A3-2A6CA6409A48.1.1Presentación Dirección 2022 unidade...
silabos de colegio privado para clases tema2
Presentación Ejecutiva Minimalista Azul.pdf
Riesgo eléctrico 5 REGLAS DE ORO PARA TRABAJOS CON TENSION
ARQUITECTURA INTEGRAL EN OBRA, PRINCIPIOS BASICOS Y TERMINOS
alimentos de bebidas45rtrtytyurrrr 1.pdf
Manual ISO9001_2015_IATF_16949_2016.pptx
Cómo Elaborar e Implementar el IPERC_ 2023.pptx
LIBRO UNIVERSITARIO DESARROLLO ORGANIZACIONAL BN.pdf
Repaso sobre el Gusano_cogollero y como ataca .pdf
Curso Corto de PLANTA CONCENTRADORA FREEPORT
DEBL Presentación PG 23.pptx [Autoguardado].pptx
SESION 9 seguridad IZAJE DE CARGAS.pdf ingenieria

Automatas y lenguajes

  • 1. 5 q 4 q 3 q 2 q 1 q0 q Verano 2003 q 6 q AUTOMATAS Y LENGUAJES Un enfoque de diseño Tec de Monterrey Ramón Brena 7 ba b a b ...
  • 2. ii Prefacio En a˜nos recientes se ha visto la aparici´on de un buen n´umero de textos en el tema de Lenguajes Formales y Aut´omatas (Ver al final referencias [10], [7], [23], [8], [3], [21], etc.). Por una parte, esto indica la importancia y riqueza que el tema tiene; por otra, ante tal variedad de oferta todo nuevo libro en el ´area requiere una justificaci´on que indique su aporte con respecto a lo existente. Este texto se sit´ua en una generaci´on de textos que tratan de poner el estudio de los lenguajes formales y aut´omatas al alcance de estudiantes que no necesariamente son avezados matem´aticos buscando establecer nuevos teoremas, sino que buscan una iniciaci´on a estos temas, que adem´as les sirva como un ejercicio en el arte de formalizar, en particular en nociones relacionadas con la computaci´on. Entre estos textos “accesibles”, encontramos, por ejemplo, a [23]. Estos nuevos textos han reemplazado en muchas universidades a los “cl´asicos” [6] y a´un [10] -que ya era m´as accesible-, y han permitido que la teor´ıa de la computaci´on se estudie a nivel profesional en carreras relacionadas con computaci´on y matem´aticas. El presente libro es resultado de una experiencia de impartir el curso de Teor´ıa de la Computaci´on por m´as de 10 semestres en el ITESM, 1 en Monterrey, M´exico. Durante este lapso, aunque ciertamente se fue enriqueciendo el contenido t´ecnico, el principal refinamiento consisti´o en ir detectando cuidadosamente las dificultades principales a las que se enfrenta- ban los estudiantes, para poder estructurar y presentar el material de forma que aquellos estuvieran en condiciones de comprenderlo de manera eficiente. Aqu´ı el ´enfasis no est´a tanto en hacer el curso “m´as f´acil” para los estudiantes, sino en asegurarse de que ´estos cuenten con los elementos para que ellos mismos reconstruyan estos contenidos dentro de su cabeza; no se trata, pues, simplemente de “vaciar” informaci´on en la cabeza del estudiante. La teor´ıa educativa que sustenta esta forma de trabajo esta basada en el “aprendizaje por reestruc- turaci´on” [18]. El texto est´a presentado de manera tal que es posible para el alumno estudiar el material antes de cubrir el tema en clase; de hecho esta es la forma en que se utiliza en el ITESM, contrariamente a muchas clases tradicionales, en las que el alumno se presenta a la exposici´on del profesor y ya luego estudia el texto. En el ITESM la clase no se utiliza principalmente para exposici´on del profesor, sino que se hacen ejercicios, problemas en equipo, miniex´amenes semanales, etc. Esta situaci´on exige del texto que sea comprensible sin tener ninguna noci´on del tema adquirida previamente, por lo que tuvimos que incluir explicaciones claras que permitan al alumno reconstruir en su mente la idea intuitiva, y -sobre todo- ejemplos. A lo largo del texto, cada una de las nociones presentadas es seguida inmediatamente por un ejemplo ilustrativo. Este texto es aplicable tanto al nivel de maestr´ıa en computaci´on o equivalente, como a clases de nivel profesional (licenciaturas, ingenier´ıas). De hecho en el ITESM se aplica en ambos niveles. La diferencia fundamental entre el enfoque del curso de nivel profesional y el 1 Abreviatura de “Instituto Tecnol´ogico y de Estudios Superiores de Monterrey”.
  • 3. iii de maestr´ıa estriba en que el curso de nivel ingeniero enfatiza los aspectos de “saber hacer”, (por ejemplo, saber comparar dos aut´omatas deterministas), mientras que el curso de nivel maestr´ıa enfatiza el “saber justificar” (por ejemplo, probar por inducci´on que una gram´atica es correcta). El material cuyo nivel es propiamente de maestr´ıa es identificado por medio de una barra vertical al margen, como en el presente p´arrafo. Esto incluye tambi´en las secciones de ejercicios. En breve, los puntos que caracterizan a este libro, y que en cierta medida lo hacen particular, son: La presentaci´on did´actica ha sido -en nuestra opini´on- m´as pulida que en la mayor´ıa de textos en Teor´ıa de la Computaci´on. Por ejemplo, primero se presentan las nociones de manera intuitiva, y solamente despu´es se procede a su formalizaci´on. Es aplicable tanto al nivel de maestr´ıa como en carreras de ingenier´ıa en computaci´on, mostrando en forma expl´ıcita y gr´afica qu´e secciones est´an destinadas a cada nivel. Siendo un libro m´as orientado a estudiantes de ingenier´ıa que de matem´aticas, se enfatizan los temas que tienen com´unmente aplicaci´on en su campo profesional, como los aut´omatas finitos. Esta es la raz´on por la que se cubren con mucho m´as detalle estos temas que otros de inter´es m´as te´orico, como la calculabilidad en m´aquinas de Turing. Sabemos de alumnos que han conseguido un buen empleo no universitario gracias a su conocimiento de aut´omatas finitos. Por la misma raz´on del punto anterior, ciertos temas que tradicionalmente se exponen con una motivaci´on matem´atica, como las propiedades de los “Lenguajes Regulares”, en este texto se presentan en el contexto de m´etodos de dise˜no, lo que es consistente con nuestro enfoque ingenieril. Es este aspecto lo que justifica el subt´ıtulo “un enfoque de dise˜no” de este texto. Ofrecemos metodolog´ıas para resolver ciertas clases de problemas, tales como el dise˜no de expresiones regulares y gram´aticas, que no son presentadas en otros libros de teor´ıa de aut´omatas, o lo hacen de forma mucho m´as escueta. Inclusive algunos temas, tales como las propiedades de cerradura de los lenguajes regulares a la uni´on de conjuntos, se presentan aqu´ı como una herramienta de soluci´on de problemas de dise˜no, y no simplemente por el inter´es matem´atico del tema. Presentamos errores frecuentes de los estudiantes de esta materia, permitiendo de este modo que el lector se beneficie de una extensa experiencia directa en la ense˜nanza de la materia. Los algoritmos no se presentan en forma de “pseudoc´odigo”, es decir, usando estruc- turas de control de lenguajes imperativos (p.ej. while, for, etc.), sino que damos una
  • 4. iv interpretaci´on intuitiva de los resultados intermedios obtenidos por los algoritmos. Pen- samos que este enfoque brinda una mejor comprensi´on de los algoritmos, pues es m´as f´acil recordar ideas que lineas de c´odigo. ¡El texto est´a en espa˜nol en el original! (es decir, no se trata de una traducci´on de un texto en ingl´es). Las traducciones son muchas veces desventajosas respecto al original. El libro, en tanto que libro electr´onico, es un archivo est´andar de tipo PDF, con “hiperli- gas” que permiten localizar r´apidamente figuras, citas, p´aginas del texto, etc. ¡El libro es gratuito! En efecto, no se distribuye con fines de lucro. Esto no pretende atentar contra la industria editorial, sino apoyar el aprendizaje del ´area de aut´omatas y lenguajes en Am´erica Latina, regi´on que no est´a sobrada de recursos como para querer engrosar los flujos de capital hacia los grandes centros editoriales del mundo. La estructura de este texto es la siguiente: despu´es de una breve revisi´on de las nociones preliminares de matem´aticas, en los primeros cap´ıtulos (2-3) veremos la clase m´as simple de lenguajes, los Lenguajes Regulares, junto con las m´aquinas abstractas que les corresponden –los Aut´omatas Finitos–, y al mismo tiempo introduciremos una metodolog´ıa de an´alisis de las m´aquinas abstractas y de los lenguajes, metodolog´ıa que volveremos a utilizar en las siguientes secciones del curso, para otros tipos de lenguajes y de m´aquinas. En los cap´ıtulos 4 y 5 veremos los Lenguajes Libres de Contexto y los Aut´omatas de Pila. Finalmente, a partir del cap´ıtulo 6 estudiaremos el tipo de m´aquinas m´as poderoso, las M´aquinas de Turing, que son en cierta forma el l´ımite te´orico de lo que es posible de hacer con m´aquinas procesadoras de informaci´on. T´ıpicamente, en un curso de nivel profesional se inicia con el cap´ıtulo de preliminares, y se contin´ua con los cap´ıtulos 2-3. Se enfatizan los cap´ıtulos 4 y 5, as´ı como la teor´ıa de los compiladores. A continuaci´on se cubren los aspectos b´asicos de las M´aquinas de Turing (inicio de cap´ıtulo 6). En el curso de maestr´ıa, la revisi´on de preliminares casi se omite, y se cubren los cap´ıtulos 2-3, s´olo que en un nivel de profundidad mayor que en el caso del nivel profesional. 2 Luego se procede a estudiar los Aut´omatas de Pila, las M´aquinas de Turing y la Tesis de Church (cap´ıtulos 4, 5 y 6), con ´enfasis en las pruebas. Agradezco la colaboraci´on del Dr. Jos´e Luis Aguirre en la correcci´on de los errores en versiones previas, as´ı como en sugerencias para mejorar la exposici´on de ciertos temas. Tam- bi´en agradezco al Comit´e del Fondo de Apoyo a Proyectos en Did´actica su apoyo financiero. Finalmente doy las gracias a muchos alumnos que ayudaron a depurar el escrito mientras sirvi´o como apuntes de la materia. 2 Recordar que el material de nivel maestr´ıa est´a indicado con una barra vertical en el margen.
  • 5. ´Indice general 1. Preliminares 3 1.1. Conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1.1. Operaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.1.2. Operaciones con conjuntos . . . . . . . . . . . . . . . . . . . . . . . . 5 1.1.3. Equivalencias de conjuntos . . . . . . . . . . . . . . . . . . . . . . . . 7 1.1.4. Relaciones y funciones . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.1.5. Conjuntos infinitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.2. Manejo l´ogico de enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.2.1. Tablas de verdad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.3. Pruebas por inducci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.4. Lenguajes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.4.1. Alfabeto, cadena de caracteres . . . . . . . . . . . . . . . . . . . . . . 17 1.4.2. Lenguajes, operaciones con lenguajes . . . . . . . . . . . . . . . . . . 17 1.5. La jerarqu´ıa de Chomsky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.6. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 I Lenguajes regulares y sus m´aquinas 23 2. Aut´omatas finitos 25 v
  • 6. vi ´INDICE GENERAL 2.1. Modelado de sistemas discretos . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.1.1. Estados finales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.2. M´aquinas de estados finitos . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 2.2.1. Funcionamiento de los aut´omatas finitos . . . . . . . . . . . . . . . . 31 2.3. Definici´on formal de aut´omatas finitos . . . . . . . . . . . . . . . . . . . . . 32 2.4. M´etodos de dise˜no de AFDs . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.4.1. Dise˜no por conjuntos de estados . . . . . . . . . . . . . . . . . . . . . 39 2.4.2. Dise˜no de AFD por complemento . . . . . . . . . . . . . . . . . . . . 41 2.5. Equivalencia de aut´omatas finitos. . . . . . . . . . . . . . . . . . . . . . . . . 42 2.6. Simplificaci´on de Aut´omatas finitos . . . . . . . . . . . . . . . . . . . . . . . 47 2.6.1. Tabla de estados distinguibles . . . . . . . . . . . . . . . . . . . . . . 48 2.6.2. Simplificaci´on por clases de equivalencia . . . . . . . . . . . . . . . . 50 2.7. Aut´omatas finitos con salida . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 2.7.1. M´aquinas de Moore . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 2.7.2. M´aquinas de Mealy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 2.7.3. Equivalencia de las m´aquinas de Moore y Mealy . . . . . . . . . . . . 56 2.7.4. C´alculo de funciones en AF . . . . . . . . . . . . . . . . . . . . . . . 56 2.8. Aut´omatas finitos no deterministas . . . . . . . . . . . . . . . . . . . . . . . 58 2.8.1. Representaci´on formal de los AFN . . . . . . . . . . . . . . . . . . . . 59 2.8.2. Dise˜no de AFN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 2.8.3. Equivalencia de AFD Y AFN . . . . . . . . . . . . . . . . . . . . . . 64 2.8.4. M´as dise˜no de AFN: Intersecci´on de lenguajes . . . . . . . . . . . . . 72 2.9. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 3. Expresiones Regulares y Gram´aticas Regulares 79
  • 7. ´INDICE GENERAL vii 3.1. Lenguajes Regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 3.1.1. Definici´on formal de Lenguajes Regulares . . . . . . . . . . . . . . . . 80 3.2. Expresiones regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 3.2.1. Significado de las ER . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 3.2.2. Metodolog´ıa de dise˜no de las ER . . . . . . . . . . . . . . . . . . . . 83 3.2.3. Equivalencias de Expresiones Regulares . . . . . . . . . . . . . . . . . 86 3.3. L´ımites de las representaciones textuales . . . . . . . . . . . . . . . . . . . . 88 3.4. Equivalencia de expresiones regulares y aut´omatas finitos . . . . . . . . . . . 89 3.4.1. Conversi´on de ER a AF . . . . . . . . . . . . . . . . . . . . . . . . . 90 3.4.2. Conversi´on de AF a ER . . . . . . . . . . . . . . . . . . . . . . . . . 91 3.5. Gram´aticas regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 3.5.1. Gram´aticas formales . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 3.5.2. Gram´aticas regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 3.5.3. Aut´omatas finitos y gram´aticas regulares . . . . . . . . . . . . . . . . 99 3.6. Limitaciones de los lenguajes regulares . . . . . . . . . . . . . . . . . . . . . 101 3.6.1. El teorema de bombeo . . . . . . . . . . . . . . . . . . . . . . . . . . 101 3.7. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 II Lenguajes libres de contexto y sus m´aquinas 109 4. Gram´aticas y lenguajes libres de contexto 111 4.1. Gram´aticas y la jerarqu´ıa de Chomsky . . . . . . . . . . . . . . . . . . . . . 112 4.2. Lenguajes y gram´aticas libres de contexto (LLC y GLC) . . . . . . . . . . . 113 4.3. Formalizaci´on de las GLC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 4.4. Dise˜no de GLC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
  • 8. viii ´INDICE GENERAL 4.4.1. Adaptaci´on de GLC . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 4.4.2. GLC para uni´on de lenguajes . . . . . . . . . . . . . . . . . . . . . . 118 4.4.3. Mezcla de gram´aticas . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 4.4.4. GLC para la concatenaci´on de lenguajes . . . . . . . . . . . . . . . . 119 4.5. Arboles de derivaci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 4.5.1. Ambig¨uedad en GLC . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 4.5.2. Derivaciones izquierda y derecha . . . . . . . . . . . . . . . . . . . . . 124 4.6. Pruebas de correcci´on y completez . . . . . . . . . . . . . . . . . . . . . . . . 125 4.7. Gram´aticas libres y sensitivas al contexto . . . . . . . . . . . . . . . . . . . . 127 4.8. Transformaci´on de las GLC y Formas Normales . . . . . . . . . . . . . . . . 128 4.8.1. Eliminaci´on de reglas A → ε . . . . . . . . . . . . . . . . . . . . . . . 129 4.8.2. Eliminaci´on de reglas A → B . . . . . . . . . . . . . . . . . . . . . . 130 4.8.3. Eliminaci´on de reglas inaccesibles . . . . . . . . . . . . . . . . . . . . 131 4.8.4. Formas Normales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 4.9. Limitaciones de los LLC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 4.9.1. Teorema de bombeo para los LLC . . . . . . . . . . . . . . . . . . . . 136 4.10. Propiedades de decidibilidad de los LLC . . . . . . . . . . . . . . . . . . . . 138 4.11. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 5. Aut´omatas de Pila 145 5.1. Funcionamiento de los Aut´omatas de Pila (informal) . . . . . . . . . . . . . 146 5.2. Dise˜no de AP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 5.2.1. Combinaci´on modular de AP . . . . . . . . . . . . . . . . . . . . . . 149 5.3. Formalizaci´on de los AP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 5.4. Relaci´on entre AF y AP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
  • 9. ´INDICE GENERAL ix 5.5. Relaci´on entre AP y LLC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 5.6. Compiladores LL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 5.6.1. Principio de previsi´on . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 5.7. Compiladores LR(0) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 5.8. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 III M´aquinas de Turing y sus lenguajes 167 6. M´aquinas de Turing 169 6.1. Funcionamiento de la m´aquina de Turing . . . . . . . . . . . . . . . . . . . . 169 6.2. Formalizaci´on de la MT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 6.2.1. Configuraci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 6.2.2. Relaci´on entre configuraciones . . . . . . . . . . . . . . . . . . . . . . 177 6.2.3. Configuraci´on “colgada” . . . . . . . . . . . . . . . . . . . . . . . . . 178 6.2.4. C´alculos en MT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 6.2.5. Palabra aceptada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 6.3. MT para c´alculos de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . 179 6.4. Problemas de decisi´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 6.4.1. Relaci´on entre aceptar y decidir . . . . . . . . . . . . . . . . . . . . . 182 6.5. Tesis de Church . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 6.5.1. Comparaci´on de las MT con otras m´aquinas . . . . . . . . . . . . . . 184 6.6. M´aquinas de Post . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 6.6.1. Formalizaci´on de las MP . . . . . . . . . . . . . . . . . . . . . . . . . 187 6.6.2. Equivalencia entre MP y MT . . . . . . . . . . . . . . . . . . . . . . 188 6.7. L´ımites de las MT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
  • 10. ´INDICE GENERAL 1 6.7.1. El problema del paro de MT . . . . . . . . . . . . . . . . . . . . . . . 191 6.8. MT en la jerarqu´ıa de Chomsky . . . . . . . . . . . . . . . . . . . . . . . . . 192 6.9. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
  • 12. Cap´ıtulo 1 Preliminares En esta parte repasaremos brevemente algunas nociones y notaciones que ser´an necesarias para comprender adecuadamente el resto del material de este libro. Debe, sin embargo, quedar claro que este repaso queda fuera del ´area de aut´omatas y lenguajes formales. Por otra parte, no es nuestra intenci´on hacer una introducci´on para un lector que no tenga ninguna base en matem´atica, especialmente en teor´ıa de conjuntos, sino que ´unicamente haremos un repaso, ayudando al lector a detectar sus puntos d´ebiles, adem´as de recordar nociones que pueden no estar frescas. Un objetivo adicional del presente cap´ıtulo es uniformizar la notaci´on, que var´ıa bastante de libro a libro. Para los lectores que requieran una introducci´on m´as exhaustiva a la teor´ıa de conjuntos y temas afines, recomendamos textos como [19]. 1.1. Conjuntos El fundamento m´as importante para el estudio de los lenguajes y aut´omatas es la Teor´ıa de Conjuntos. En efecto, siempre que hablemos de “formalizar” una noci´on, estaremos di- ciendo en realidad “expresar en t´erminos de la Teor´ıa de Conjuntos”. Es por esto que en este cap´ıtulo presentamos los conceptos m´as b´asicos de dicha Teor´ıa de Conjuntos. La idea de un conjunto como una colecci´on de individuos u objetos no es, para un verdadero matem´atico, suficientemente precisa, y se parece a la noci´on de clase; sin embargo, para nuestros prop´ositos es suficiente. Un conjunto que vamos a utilizar con frecuencia es el de los n´umeros naturales, {1, 2, 3, . . .}, denotado por N. Los conjuntos pueden expresarse de dos maneras b´asicamente: En extensi´on, lo cual quiere decir que citamos expl´ıcitamente cada uno de sus elementos, 3
  • 13. 4 CAP´ITULO 1. PRELIMINARES como en el conjunto {1, 3, 5} que contiene exactamente los n´umeros 1, 3 y 5. En intenci´on, dando una descripci´on precisa de los elementos que forman parte del conjunto, en vez de citarlos expl´ıcitamente. Por ejemplo, el conjunto del punto anterior puede ser visto como {i ∈ N|impar(i), i < 6}, donde se supone que los n´umeros impares cumplen la condici´on impar(i). Representamos a los conjuntos con letras may´usculas, como en A = {2, 4}. Los conjuntos pueden contener conjuntos como elementos, como en B = {{a}, {b, c}}. El conjunto sin elementos (vac´ıo) se representa por ∅ o bien por {}. La notaci´on a ∈ B significa que a es elemento o est´a contenido en el conjunto B; por ejemplo, {2, 3} ∈ {1, {2, 3}, 4}. Para indicar que a no est´a en B se escribe a ∈ B. El tama˜no de un conjunto es el n´umero de elementos que contiene, y se representa como |A| para un conjunto A. Por ejemplo, el tama˜no de {a, b, c} es 3, y el tama˜no de ∅ es cero. Por ejemplo, el tama˜no de {{a}, {b, c}} es 2 y no 3, pues tiene 2 elementos, siendo el primero {a} y el segundo {b, c}. La definici´on de “tama˜no” parece muy clara, pero hay conjuntos que no tienen un n´umero determinado de elementos; estos se llaman “infinitos” y ser´an discutidos m´as adelante. Dos conjuntos A y B son iguales, A = B, si y s´olo si tienen los mismos elementos, esto es, x ∈ A ssi x ∈ B. 1 Por ejemplo, {1, {2, 3}} = {{3, 2}, 1}; vemos que en los conjuntos el orden de los elementos es irrelevante. Se supone que en los conjuntos no hay repeticiones de elementos, y que cada elemento del conjunto es distinto de todos los otros elementos. Sin embargo, si decimos, por ejemplo, i ∈ A, j ∈ A, no estamos suponiendo que i sea distinto de j, pues tanto i como j son elementos cualquiera de A. Si necesitamos que sean distintos, hay que indicarlo expl´ıcitamente, como en la expresi´on i, j ∈ A, i = j. La notaci´on A ⊆ B significa que el conjunto A est´a “contenido” en el conjunto B, o m´as t´ecnicamente, que A es subconjunto de B. Por ejemplo, el conjunto {a, c} es subconjunto de {a, b, c}, indicado como {a, c} ⊆ {a, b, c}. En otras palabras, A ⊆ B cuando siempre que x ∈ A, tenemos tambi´en x ∈ B. Obs´ervese que de acuerdo con esta definici´on, A ⊆ A para cualquier conjunto A: todo conjunto es subconjunto de s´ı mismo. Un caso extremo es el conjunto vac´ıo, que es subconjunto de cualquier conjunto. Para indicar que un subconjunto contiene menos elementos que otro, es decir, que es un subconjunto propio de ´este, se escribe A ⊂ B. Por ejemplo, {a, c} ⊂ {a, b, c}. Claramente, A = B ssi A ⊆ B y B ⊆ A. Obs´erverse tambi´en que si A ⊆ B, entonces |A| ≤ |B|, y si A ⊂ B, entonces |A| < |B|. Las relaciones de inclusi´on entre conjuntos se acostumbran representar gr´aficamente me- diante los llamados “diagramas de Venn”, que denotan mediante ´areas cerradas (por ejemplo 1 “A ssi B” se lee “A si y s´olo siB”, y significa que A implica B y tambi´en B implica A.
  • 14. 1.1. CONJUNTOS 5 C BA Figura 1.1: Diagrama de Venn elipses) los conjuntos. Por ejemplo, en la figura 1.1 se ilustra la situaci´on donde un conjunto A es subconjunto de B, y B es subconjunto de C. En los diagramas de Venn es f´acil visualizar relaciones que de otra forma pueden parecer complejas; por ejemplo, si un conjunto A es subconjunto de B y ´este es subconjunto de C, se espera que A ⊆ C, como se aprecia intuitivamente en la figura 1.1, pues el ´area de A est´a obviamente contenida dentro de la de C. 1.1.1. Operaciones Llamamos operaciones a formas est´andar de combinar o transformar objetos matem´aticos. Por ejemplo, una operaci´on habitual es la suma, que en la expresi´on “3 + 7” combina los objetos 3 y 7 dando como resultado el objeto 10. El 3 y el 7, que son los objetos que se combinan, son los operandos, el “+” es la operaci´on, y el 10 es el resultado. Una operaci´on es binaria cuando tiene dos operandos. Es unaria si tiene un s´olo operando, como en la operaci´on de la ra´ız cuadrada. Una operaci´on “⊗” es conmutativa si x ⊗ y = y ⊗ x, como es el caso de la suma o la multiplicaci´on de n´umeros. Se dice que es asociativa si x⊗(y ⊗z) = (x⊗y)⊗z; por ejemplo, la suma es asociativa, pero no la resta, pues podemos ver que 8 − (4 − 3) = (8 − 4) − 3. 1.1.2. Operaciones con conjuntos Sean A y B conjuntos. Se definen las siguientes operaciones con los conjuntos: Uni´on de conjuntos, denotada por A ∪ B, que contiene los elementos del conjunto A y tambi´en los del conjunto B, es decir, A ∪ B = {x|x ∈ A o x ∈ B}. Por ejemplo, {1, 2, 3} ∪ {3, 4} = {1, 2, 3, 4}. La uni´on de conjuntos es conmutativa, lo cual se com- prende f´acilmente visualizando las ´areas correspondientes en el diagrama de Venn de la figura 1.2. 2 Tambi´en es asociativa. 2 En seguida se presenta una prueba matem´atica de esta propiedad.
  • 15. 6 CAP´ITULO 1. PRELIMINARES Intersecci´on de conjuntos, escrita A ∩ B, que contiene los elementos que pertenecen si- mult´aneamente al conjunto A y al conjunto B, es decir, A ∩ B = {x|x ∈ A y x ∈ B}. Por ejemplo, {1, 2, 3} ∩ {3, 4} = {3}. En un diagrama de Venn la intersecci´on de dos elipses se ilustra por el ´area que ambas comparten, como es el ´area sombreada de la figura 1.2. La intersecci´on es conmutativa y asociativa. Diferencia de conjuntos, A − B, que contiene los elementos de A que no est´an en B, esto es, A − B = {x|x ∈ A y x ∈ B}. Por ejemplo, {1, 2, 3} − {3, 4} = {1, 2}. La resta o diferencia de conjuntos no siempre le “quita” elementos al primer conjunto; por ejemplo {1, 2, 3} − {4, 5} = {1, 2, 3}. La diferencia de conjuntos no es ni asociativa ni conmutativa, lo cual se puede probar f´acilmente con un ejemplo (ver secci´on de ejercicios). Complemento de un conjunto, es un caso particular de la diferencia, cuando el primer conjunto es considerado como el “universo” que contiene todos los elementos posibles. Sea U un universo, entonces el complemento del conjunto A, denotada por Ac contiene los elementos del universo que no est´an en A. Por ejemplo, si el universo son los n´umeros naturales {1, 2, 3, . . .}, complemento de los n´umeros pares son los n´umeros nones: {2, 4, 6, . . .}c = {1, 3, 5, . . .}. Claramente A ∪ Ac = U, para todo conjunto A; adem´as, A ∩ Ac = ∅. Potencia de un conjunto A, denotada como 2A , contiene como elementos a todos los sub- conjuntos de A, esto es, 2A = {x|x ⊆ A}. En otras palabras, 2A es un conjunto de conjuntos. Por ejemplo, 2{1,2,3} = {∅, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}}. Re- cu´erdese que el conjunto vac´ıo siempre forma parte de todo conjunto potencia. La notaci´on “2A ” recuerda que el tama˜no del conjunto potencia de A es 2 elevado a la potencia del tama˜no de A, esto es, |2A | = 2|A| . Producto Cartesiano de dos conjuntos, A × B, es el conjunto de pares ordenados (a, b) tales que a ∈ A y b ∈ B. Por ejemplo, {1, 2} × {3, 4, 5} = {(1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5)} El tama˜no de un producto cartesiano A×B es |A| multiplicado por |B|, como se puede verificar en el ejemplo anterior. El producto cartesiano no es conmutativo, pues no es lo mismo un par (a, b) que uno (b, a), ni asociativo, pues no es lo mismo (a, (b, c)) que ((a, b), c). Con ayuda de diagramas de Venn es f´acil comprender las operaciones de conjuntos. Por ejemplo, usando la figura 1.2 es f´acil verificar una relaci´on tan compleja como A ∩ B = (Ac ∪Bc )c , identificando las dos maneras de obtener el ´area sombreada de la figura, siguiendo ya sea el lado izquierdo o derecho de la ecuaci´on. A un elemento (a, b, c) de un producto cartesiano A × B × C se le llama tripleta, y similarmente a un elemento (a, b, c, d) de un producto cartesiano A × B × C × D se le llama cu´adruplo, a un elemento (a, b, c, d, e) de un producto cartesiano A × B × C × D × E se le llama qu´ıntuplo, etc.
  • 16. 1.1. CONJUNTOS 7 BA Figura 1.2: Intersecci´on de dos conjuntos Ahora probaremos la conmutatividad de la uni´on de conjuntos. Esto es, queremos probar que A ∪ B = B ∪ A para conjuntos cualesquiera A y B. La igualdad A ∪ B = B ∪ A puede descomponerse en A ∪ B ⊆ B ∪ A y B ∪ A ⊆ A ∪ B, por definiciones que hemos visto antes. Entonces vamos a probar una de ellas, por ejemplo A ∪ B ⊆ B ∪ A, siendo la otra parte enteramente similar. Hemos visto que A ∪ B ⊆ B ∪ A es equivalente a decir que si un elemento x es parte de A ∪ B, entonces x tambi´en debe ser parte de B ∪ A. En consecuencia, lo que tenemos que probar es lo siguiente: suponiendo que x ∈ (A ∪ B), debemos llegar a concluir que x ∈ (B ∪ A). Vamos a hacer esta prueba enseguida. Como x ∈ (A ∪ B), entonces, de acuerdo con la definici´on de uni´on, x ∈ A o bien x ∈ B (o ambos a la vez). Si x ∈ A, entonces seguramente x ∈ A ∪ B, pues A ∪ B contiene todos los elementos de A. Similarmente, si x ∈ B tendremos x ∈ A ∪ B. Es decir, en los dos casos podemos concluir que x ∈ A ∪ B, que era lo que necesit´abamos para nuestra prueba. 1.1.3. Equivalencias de conjuntos La igualdad A ∪ B = B ∪ A es una de las llamadas “equivalencias de conjuntos”, que son muy ´utiles para reemplazar una expresi´on con operaciones de conjuntos por otra equivalente pero m´as conveniente –por ejemplo m´as simple. En la lista siguiente presentamos algunas de las equivalencias de m´as frecuente uso: Leyes conmutativas A ∪ B = B ∪ A, A ∩ B = B ∩ A, para los conjuntos A y B. Leyes distributivas A ∪ (B ∩ C) = (A ∪ B) ∩ (A ∪ C), A ∩ (B ∪ C) = (A ∩ B) ∪ (A ∩ C). Leyes de De Morgan (A ∪ B)C = AC ∩ BC , (A ∩ B)C = AC ∪ BC . Doble complemento (AC )C = A. Ejemplo.- La intersecci´on de conjuntos puede expresarse usando la uni´on y el comple- mento, de la manera siguiente: A ∩ B = ((A ∩ B)C )C = (AC ∪ BC )C .
  • 17. 8 CAP´ITULO 1. PRELIMINARES Las equivalencias de conjuntos pueden verificarse f´acilmente usando los diagramas de Venn, de la forma que hemos comentado antes, esto es, compaginando el ´area asociada a cada uno de los lados de la ecuaci´on. 1.1.4. Relaciones y funciones Las nociones de relaciones y funciones pueden derivarse directamente del producto carte- siano de conjuntos. En efecto, se llama relaci´on a todo subconjunto de un producto carte- siano; por ejemplo la relaci´on “≤” contiene los pares de n´umeros naturales tales que el primer componente es menor o igual al segundo, esto es, ≤ = {(1, 1), (1, 2), (1, 3), (2, 3), . . .}. Esta definici´on matem´atica de relaci´on no parece tener mucho que ver con la idea intu- itiva de que una cosa “tiene relaci´on con otra”, pero en realidad ambas nociones s´ı corre- sponden. Por ejemplo, estamos familiarizados con la familia vista como una relaci´on entre personas. Consideremos m´as espec´ıficamente la relaci´on “x es padre de y”. Dado un con- junto de personas, por ejemplo P = {Leonor, El´ıas, Arturo, Marta}, el producto cartesiano P × P es {(Leonor, Leonor), (Leonor, El´ıas), (Leonor, Arturo), (Leonor, Marta), (Elias, Leonor), (El´ıas, El´ıas), (El´ıas, Arturo), (El´ıas, Marta), (Arturo, Leonor), (Arturo, El´ıas), (Arturo, Arturo), (Arturo, Marta), (Marta, Leonor), (Marta, El´ıas), (Marta, Arturo), (Marta, Marta)}. Un subconjunto de este producto cartesiano es, por ejemplo, {(Leonor, Arturo), (Leonor, Marta), (El´ıas, Arturo), (El´ıas, Marta)}, cuyos pares (x, y) corresponden, en la fa- milia del autor, a relaciones “x es padre de y”, pues Leonor y El´ıas son padres de Arturo y Marta. Desde luego, en el ejemplo anterior de las relaciones familiares no cualquier subconjunto del producto cartesiano podr´ıa ser candidato a corresponder a la relaci´on “x es padre de y”. Por ejemplo, el par (El´ıas, El´ıas) ser´ıa inaceptable, pues nadie puede ser padre de s´ı mismo, ni siquiera en las liberales familias modernas. Cabr´ıa preguntarnos qu´e caracter´ısticas deber´ıa tener una relaci´on para ser aceptable como “x es padre de y”. A continuaci´on discutimos algunas caracter´ısticas que las relaciones pueden tener o no, y que nos permitir´ıan contestar a esta pregunta (ver secci´on de ejercicios). Se llama inverso de una relaci´on R, denotado por R−1 , a aquella en donde se invierte el orden de los pares ordenados, esto es: R−1 = {(y, x) | (x, y) ∈ R} Por ejemplo, el inverso de la relaci´on {(1, 2), (2, 3), (1, 3)} es {(2, 1), (3, 2), (3, 1)}. Se dice que una relaci´on binaria en D ×D es reflexiva cuando contiene todos los pares de la forma (x, x), para x ∈ D. Por ejemplo, si D = {1, 2, 3}, la relaci´on en {1, 2, 3} × {1, 2, 3} con los elementos {(2, 2), (2, 3), (3, 3), (1, 2), (1, 1), (1, 3)} es reflexiva, pero {(2, 2), (2, 3), (1, 2), (1, 1), (1, 3)} no lo es.
  • 18. 1.1. CONJUNTOS 9 Una relaci´on es sim´etrica si y solo si siempre que contiene un par (x, y) tambi´en contiene (y, x). Por ejemplo, {(2, 2), (1, 2), (1, 1), (2, 1)} es sim´etrica, pero {(2, 2), (2, 3), (3, 3), (1, 2), (1, 1)} no lo es. Una relaci´on es transitiva cuando siempre que contiene los pares (x, y) y (y, z) tam- bi´en contiene (x, z). Por ejemplo, la relaci´on {(2, 3), (1, 2), (1, 1), (1, 3)} es transitiva, pero {(2, 3), (1, 2), (1, 1)} no lo es. Llamamos cerradura reflexiva de una relaci´on R, la menor extensi´on de R, es decir, R∪∆, tal que R ∪ ∆ es reflexiva, aunque inicialmente R no lo haya sido. En otras palabras, a R se le agregan los pares ordenados que sean necesarios hasta que se vuelva reflexiva. Por ejemplo, la cerradura reflexiva de R1 = {(2, 3), (1, 2), (1, 1), (1, 3)} es {(2, 3), (1, 2), (1, 1), (1, 3), (2, 2), (3, 3)}. Decimos que la cerradura reflexiva es la menor extensi´on de la relaci´on original porque no deben a˜nadirse m´as pares ordenados que los estrictamente necesarios para volverla reflexiva. Por ejemplo, la relacion {(2, 3), (1, 2), (1, 1), (1, 3), (2, 2), (3, 3), (3,1)}, aunque cumple con ser una extensi´on de R1 y tambien con ser reflexiva, no es la cerradura reflexiva de R1, porque tiene el par (3, 1) que no era indispensable agregar. Similarmente definimos la cerradura sim´etrica de una relaci´on, a˜nadiendo los pares es- trictamente necesarios para que se vuelva sim´etrica. Por ejemplo, la cerradura sim´etrica de {(2, 3), (1, 2), (1, 1), (1, 3)} es {(2, 3), (1, 2), (1, 1), (1, 3), (3, 2), (2, 1), (3, 1)}. La cerradura transitiva tambi´en se define de una manera enteramente similar. Por ejem- plo, la cerradura transitiva de la relaci´on {(1, 2), (3, 1), (2, 1)} es {(1, 2), (3, 1), (2, 1), (1, 1), (2, 2), (3, 2)}. Se pueden tener tambi´en combinaciones de varias cerraduras, como la cerradura reflexiva y transitiva, que en el caso de {(2, 3), (1, 2), (1, 1), (1, 3)} ser´ıa {(2, 3), (1, 2), (1, 1), (1, 3), (2, 2), (3, 3)}. Un caso particular de las relaciones son las funciones, que son relaciones en que no hay dos pares ordenados que tengan el mismo primer componente. Es decir, los pares ordenados asocian a cada primer componente un ´unico segundo componente. Por ejemplo, la relaci´on {(1, 2), (2, 3), (1, 3)} no es una funci´on, pero {(1, 2), (2, 3), (3, 3)} s´ı lo es. Tomando como ejemplo las familias, la relaci´on de hermanos no es una funci´on, pero la relaci´on de cada quien con su padre s´ı lo es (cada quien tiene a lo m´as un padre). La notaci´on habitual para las funciones es f(a) = b, en vez de (a, b) ∈ f, para una funci´on f, pero en realidad ambas notaciones son equivalentes. Muchas veces consideramos que las funciones “obtienen una salida a partir de una en- trada”. As´ı, si f(1) = 2, se considera que a partir de la entrada 1 se obtiene la salida 2. Esta manera de conceptualizar las funciones no se contrapone a la idea de funciones como relaciones especiales (esto es, conjuntos de pares ordenados), sino que m´as bien en ciertas situaciones es m´as ´util tomar uno u otro punto de vista.
  • 19. 10 CAP´ITULO 1. PRELIMINARES Escribimos f : A → B para indicar que si (a, b) ∈ f entonces a ∈ A y b ∈ B; decimos que A es el dominio de la funci´on y B es el codominio. Una funci´on f : A → B puede verse como un mapeo que relaciona cada elemento del dominio A con un elemento del codominio B. Por ejemplo, la funci´on cuadrado : N → N relaciona cada n´umero natural con su cuadrado, es decir, cuadrado = {(1, 1), (2, 4), (3, 9), . . .}. Se dice que una funci´on es total cuando est´a definida para todos los elementos del dominio, como en el ejemplo de la funci´on cuadrado, mientras que una funci´on es parcial cuando no est´a definida para todos los elementos del dominio, como ser´ıa el caso de la funci´on de resta en los naturales: resta : N × N → N, pues por ejemplo, resta(3, 5) no tiene un resultado en los naturales, y por lo tanto el par (3, 5) no forma parte del dominio de la funci´on. Una funci´on es inyectiva, tambi´en llamada uno a uno, cuando para cada elemento del codominio hay un ´unico elemento del dominio. Esto es, no se presenta el caso de que dos pares como (x, z) y (y, z) tengan el mismo segundo elemento. Por ejemplo, la funci´on {(1, 2), (2, 3), (3, 3)} no es inyectiva, pero {(1, 2), (2, 3), (3, 1)} s´ı lo es. Siguiendo el ejemplo de las familias, la funci´on que asocia a cada persona con su padre no es inyectiva, pues varios hermanos comparten un mismo padre. Una funci´on es sobreyectiva si cada elemento del codominio aparece en alg´un par orde- nado. Por ejemplo, la funci´on cuadrado que presentamos antes no es sobreyectiva, pues hay muchos n´umeros, como el 7, que no son el cuadrado de ning´un otro. Si una funci´on f es a la vez sobreyectiva e inyectiva, entonces su inverso f−1 es tam- bi´en una funci´on (total). A las funciones que cumplen con ambas propiedades se les llama biyectivas. Una secuencia es una sucesi´on ordenada de elementos, como “1, 3, 5, 7, 9”, que es la se- cuencia de n´umeros naturales impares menores que 10, ordenados de menor a mayor. La diferencia entre un conjunto y una secuencia es que en una secuencia el orden s´ı importa y en un conjunto no. As´ı, 1, 2, 3 = 2, 3, 1. Adem´as, en una secuencia s´ı es relevante la repetici´on de los elementos, por lo que 1, 2, 3 = 1, 2, 2, 3. 1.1.5. Conjuntos infinitos Adem´as de los conjuntos “finitos” –esto es, con un n´umero de elementos determinado– tambi´en puede haber conjuntos infinitos, cuyo tama˜no no puede expresarse con un n´umero; un ejemplo es el conjunto de los n´umeros naturales N = {1, 2, 3, . . .}. A´un a estos conjuntos pueden aplicarse todas las operaciones antes descritas. Sin embargo, la comparaci´on de tama˜nos de conjuntos infinitos no es tan simple como en el caso de los conjuntos finitos, pues no se puede expresar su tama˜no como un n´umero. En estos casos se aplica lo que se conoce como “el principio del palomar”, que sirve para
  • 20. 1.1. CONJUNTOS 11 comprobar si dos conjuntos tienen o no el mismo tama˜no. Sup´ongase que se quiere comprobar si en un palomar la cantidad de palomas con que se cuenta es mayor, menor o igual a la cantidad de lugares disponibles en el palomar. Una manera simple de verificarlo es asignar a cada una de las palomas un sitio disponible, y si es posible hacerlo para todas las palomas, se sabe que no hay m´as palomas que lugares. Similarmente se puede ver si no hay m´as lugares que palomas. As´ı verificamos que el conjunto de palomas tiene el mismo tama˜no que el de lugares disponibles. Esta idea tan sencilla puede aplicarse para comparar el tama˜no de conjuntos infinitos. As´ı se puede verificar, por ejemplo, que el conjunto de los pares tiene el mismo tama˜no que el de los naturales, un resultado dif´ıcil de aceptar intuitivamente. En efecto, sean N y P los naturales y los pares, respectivamente. Es f´acil ver que |P| ≤ |N|, pero es mucho menos evidente que |N| ≤ |P|, cosa que vamos a mostrar usando el principio del palomar. A cada n´umero natural le debemos poder asignar un n´umero par distinto; esto se puede hacer de muchas maneras, pero una muy simple consiste en asignar a cada n´umero el doble de s´ı mismo; por ejemplo, al 7 le asignamos el par 14, etc. Como esto se puede hacer para todos los n´umeros, y no va a haber dos n´umeros que compartan el mismo par, concluimos que no hay m´as n´umeros naturales que pares. Definici´on.- Un conjunto infinito es contable, tambi´en llamado enumerable, cuando sus elementos pueden ponerse “en una fila”, o dicho de una manera m´as t´ecnica, cuando sus elementos pueden ponerse en correspondencia uno a uno con los n´umeros naturales. En otras palabras, los conjuntos contables infinitos tienen el mismo tama˜no que el conjunto de los n´umeros naturales. Adicionalmente los conjuntos finitos tambi´en son contables. Otro ejemplo de conjunto infinito contable es el conjunto de pares de n´umeros, esto es, N × N = {(1, 1), (2, 1), (1, 2), (1, 3), (2, 2), (3, 1), (4, 1), . . .} (La prueba de que es contable se deja como ejercicio, ver secci´on de ejercicios). Aunque resulte sorprendente, hay conjuntos infinitos “m´as grandes” que los conjuntos infinitos contables, en el sentido de que no van a alcanzar los elementos del conjunto contable para asignar uno a cada elemento del conjunto “grande”. A estos conjuntos se les llama incontables. Un ejemplo de conjunto incontable es 2N , esto es, el conjunto potencia de los naturales; el llamado “Teorema de Kantor” establece este hecho. La prueba del Teorema de Kantor es muy simple y se basa en empezar suponiendo que 2N s´ı es contable, y se llega a una contradicci´on, concluyendo entonces que 2N en realidad es incontable. En efecto, si 2N es contable, sus elementos pueden ser puestos en una sucesi´on como sigue: 2N = {S1, S2, S3, . . .} Sup´ongase ahora el conjunto D = {n ∈ N|n /∈ Sn}, que est´a formado por aquellos n´umeros
  • 21. 12 CAP´ITULO 1. PRELIMINARES n que no aparecen en el conjunto Sn que les corresponde. Como por hip´otesis todos los sub- conjuntos de los naturales fueron puestos en la sucesi´on S1, S2, . . ., tenemos que el conjunto D, –que est´a formado de naturales– debe hallarse en dicha sucesi´on, es decir, debe ser igual a Sk para una cierta k. Ahora nos preguntamos si k aparece o no en el conjunto D: Si la respuesta es afirmativa, entonces, por la definici´on de D, tenemos que k /∈ Sk, lo que es una contradicci´on; Si la respuesta es negativa, entonces, por la definici´on de D, k ∈ Sk, lo que tambi´en es una contradicci´on. Concluimos que 2N es incontable. A´un dentro de los conjuntos incontables hay unos conjuntos “m´as grandes” que otros. En efecto, se sabe que para todo conjunto infinito A, se tiene que |A| < |2A |, por lo que hay toda una jerarqu´ıa de “infinitos”: |N| < |2N | < |22N | < . . . 1.2. Manejo l´ogico de enunciados En el proceso de soluci´on de problemas, un aspecto clave es comprender cabalmente el enunciado, lo cual en ocasiones no es sencillo, ya sea por la complejidad de aquel, o bien porque la forma poco rigurosa en que manejamos el lenguaje cotidiano puede provocar errores de interpretaci´on. M´as a´un, en muchas situaciones es necesario transformar el enunciado en otro equivalente, de forma que la soluci´on al problema planteado sea m´as sencilla. Por ejemplo, consideremos el conjunto de n´umeros naturales tales que, si son pares o terminan en 7, entonces contienen alg´un cero (0). Algunos de estos n´umeros son el 2307, el 400, as´ı como el 1023 y el 175. Hay que comprender, por ejemplo, porqu´e el 175 corresponde al enunciado. La idea es que un n´umero cumple la condici´on cuando, ya sea contiene alg´un cero, como el 1023, el 2307 o el 400, o bien ni es par ni termina en 7, como en el caso del 175. Razonamientos l´ogicos como el anterior pueden sistematizarse haciendo uso de s´ımbolos que representan afirmaciones, que se llaman proposiciones en el llamado C´alculo proposi- cional, que es una rama de las matem´aticas. 3 En el ejemplo presentado arriba es crucial comprender el significado l´ogico de la llamada implicaci´on: Si A es cierto, entonces tambi´en B es cierto. Esto se representa matem´aticamente 3 No estudiaremos aqu´ı el c´alculo proposicional, limit´andonos a revisar los aspectos realmente indispens- ables para manejar el material de este texto. El lector interesado en estudiar el c´alculo proposicional puede consultar textos como [19].
  • 22. 1.2. MANEJO L ´OGICO DE ENUNCIADOS 13 usando el s´ımbolo “⇒”, como en “A ⇒ B”. La implicaci´on A ⇒ B es cierta siempre que B es cierto –independientemente de si A es cierto o no–, y tambi´en cuando A es falso, como era el caso del n´umero 175 en el ejemplo presentado. La implicaci´on no es manejada rigurosamente en el lenguaje cotidiano. Por ejemplo, si un pap´a dice a su ni˜no: “Ir´as al cine si haces tu tarea”, en realidad no est´a dando informaci´on sobre qu´e pasar´a en caso de que el ni˜no no haga la tarea, a´un cuando ambos interlocutores sobreentienden que en ese caso el ni˜no no ir´a al cine. Representando “ir al cine con el s´ımbolo C y hacer la tarea con T, la frase se representar´ıa con la f´ormula T ⇒ C. Si quisiera el pap´a dar informaci´on para atender el caso en que no se hace la tarea, tendr´ıa que decir algo como “S´olo si haces tu tarea ir´as al cine”, representado por la implicaci´on C ⇒ T, aunque en este caso se deja abierta la posibilidad de que el ni˜no no vaya al cine aunque haya hecho su tarea. . . Si el pap´a quisiera considerar todos los casos posibles, tendr´ıa que decir algo como “ir´as al cine si y s´olo si haces tu tarea”. Resumiendo, algunas formas en que se expresa frecuentemente la implicaci´on “A ⇒ B” son las siguientes: “Si A entonces B” “B si A” “B cuando A” “B siempre y cuando A” “A s´olo si B” Otras frases tales como “Vamos a Yucat´an o a Oaxaca” o “El clima es c´alido y seco” tambi´en se pueden representar con s´ımbolos matem´aticos, mediante la llamada disyunci´on (∨), para las frases unidas con “o”, o bien con la conjunci´on (∧), para las frases unidas con “y”. Por ejemplo, si ir a Yucat´an se representa con Y e ir a Oaxaca con O, la primera frase se representar´ıa como Y ∨ O. Similarmente se pueden representar frases m´as complejas, como “Si vamos a Yucat´an el clima ser´a c´alido pero no seco, mientras que si vamos a Oaxaca ser´a c´alido y seco”, con la f´ormula (Y ⇒ (C ∧ ¬S)) ∧ (O ⇒ (C ∧ S)), donde el s´ımbolo “¬” representa la negaci´on de lo que sigue a su derecha. Otro s´ımbolo l´ogico de utilidad es la llamada “doble implicaci´on”, denotado por “⇔”, que significa que sus dos argumentos son equivalentes l´ogicamente. As´ı, A ⇔ B quiere decir que A es cierto exactamente en los mismos casos en que B es cierto. La implicaci´on, la negaci´on, la conjunci´on, etc., son llamados gen´ericamente conectivos l´ogicos.
  • 23. 14 CAP´ITULO 1. PRELIMINARES 1.2.1. Tablas de verdad Una herramiente ´util para comprender y utilizar los conectivos l´ogicos son las llamadas tablas de verdad, que tienen en los renglones cada caso posible de valores “cierto” o “falso” de las proposiciones elementales, y en las columnas a la derecha aparece el valor correspon- diente de la proposici´on compuesta. Por ejemplo, en la siguiente tabla de verdad se define el comportamiento de los conectivos l´ogicos de conjunci´on, disyunci´on, negaci´on e implicaci´on: A B A ∧ B A ∨ B ¬A A ⇒ B 0 0 0 0 1 1 0 1 0 1 1 1 1 0 0 1 0 0 1 1 1 1 0 1 En esta tabla de verdad el valor “cierto” se representa con 1 y el “falso” con 0. Podemos ver ahi que, por ejemplo, el conectivo de disyunci´on da “cierto” en todos los casos menos cuando los dos argumentos son falsos. Por cierto, esto contradice la manera en que a veces se maneja la disyunci´on en el lenguaje cotidiano; por ejemplo, cuando se dice “O pagas lo que debes o no te vuelvo a prestar”, se sobreentiende que ambas cosas no pueden ser ciertas a la vez. Sin embargo, viendo la tabla de verdad en la columna del “A∨B”, vemos que tiene el valor “cierto” cuando tanto A como B son ciertos. Es importante entender que los valores que aparecen en la tabla de verdad presentada arriba son definiciones, que por lo mismo no tienen que probarse. Desde luego que no son valores arbitrarios, sino que pretenden precisar el significado que tienen intuitivamente la disyunci´on, la conjunci´on, la negaci´on y la implicaci´on. En esa tabla de verdad tambi´en podemos ver que la implicaci´on es simplemente un conectivo que tiene valor cierto en todos los casos menos cuando A es cierto y B falso. Esto es congruente con la interpretaci´on que dimos de la implicaci´on p´arrafos antes. Como en el caso de los conjuntos, en las f´ormulas con proposiciones tambi´en hay equi- valencias muy ´utiles, que nos permiten modificar enunciados, pero teniendo la garant´ıa de que el enunciado modificado es equivalente al original. Vamos a considerar las siguientes equivalencias: Conmutatividad A ∧ B = B ∧ A, A ∨ B = B ∨ A. Distributividad A ∧ (B ∨ C) = (A ∧ B) ∨ (A ∧ C), A ∨ (B ∧ C) = (A ∨ B) ∧ (A ∨ C). Implicaci´on A ⇒ B = (¬A) ∨ B. Leyes de De Morgan ¬(A ∧ B) = ¬A ∨ ¬B, ¬(A ∨ B) = ¬A ∧ ¬B. Doble negaci´on ¬(¬A) = A.
  • 24. 1.3. PRUEBAS POR INDUCCI ´ON 15 Doble implicaci´on A ⇔ B = (A ⇒ B) ∧ (B ⇒ A) Ejemplo.- El conjunto de n´umeros naturales tales que, si son pares o terminan en 7, entonces contienen alg´un cero (0), que presentamos antes, puede ser expresado de una forma m´as simple usando las equivalencias. Sea P que el n´umero es par, T que termina en 7, C que contiene alg´un cero. Entonces el enunciado original es: (P ∨ T) ⇒ C Usando la equivalencia de la implicaci´on, esta f´ormula es equivalente a: (¬(P ∨ T)) ∨ C Aplicando una equivalencia de De Morgan, queda como: (¬P ∧ ¬T) ∨ C Esto es, ya sea que el n´umero contiene alg´un cero (proposici´on C), o bien ni es par (¬P) ni termina en 7 (¬T). Las equivalencias de conectivos l´ogicos se pueden probar haciendo las tablas de verdad para las dos f´ormulas que se supone que son equivalentes. Por ejemplo, probamos la equiv- alencia de la implicaci´on con la siguiente tabla de verdad, en la que se puede observar que los valores de A ⇒ B y de (¬A) ∨ B son los mismos: A B ¬A (¬A) ∨ B A ⇒ B 0 0 1 1 1 0 1 1 1 1 1 0 0 0 0 1 1 0 1 1 1.3. Pruebas por inducci´on Una forma de prueba que utilizaremos repetidamente en este texto es la prueba por in- ducci´on. Sirve para probar que una cierta propiedad es v´alida para todos los elementos de un conjunto infinito contable. Hacemos notar que el material indicado como “nivel profesional” no incluye pruebas por inducci´on a lo largo del libro. Esto es debido al enfoque predominan- temente ingenieril que se da al material de profesional, dejando las pruebas por inducci´on para los estudiantes de posgrado. Supongamos que se quiere probar que una propiedad P es cierta para todos los elementos de un conjunto infinito contable (C).
  • 25. 16 CAP´ITULO 1. PRELIMINARES Inicialmente se prueba que es cierta para el primer elemento de (C), sea c0, esto es, se verifica P(c0). Este paso se llama “base de la inducci´on”. Despu´es se supone que la propiedad P es cierta para alg´un elemento ci de (C), y con base en esta suposici´on, llamada “hip´otesis de inducci´on”, se prueba que P tambi´en es cierta para el siguiente elemento, ci+1. Con base en los dos pasos anteriores se concluye que la propiedad P es cierta para todos los elementos del conjunto (C). Esta conclusi´on no es gratuita. En efecto, supongamos un elemento de (C), por ejemplo c45. Para probar que satisface la propiedad, ya sabemos que se cumple para c0, y como tenemos que se cumple para el siguiente elemento, entonces tambi´en se cumple para c1, y como tambi´en se cumple para el siguiente elemento, se cumplir´a para c2, y as´ı sucesivamente, hasta llegar a c45. Lo mismo se puede hacer con cualquier otro elemento de (C). Como un ejemplo simple de la aplicaci´on de la inducci´on matem´atica, supongamos que queremos probar que todo n´umero natural es menor que el doble de s´ı mismo, esto es, n < 2n, n ∈ N. Lo hacemos en dos pasos: (base) Primero comprobamos que para el caso del 1 se cumple, pues 1 < 2. (inducci´on) Ahora, suponiendo que para un n´umero i la propiedad se cumple, esto es, i < 2i, debemos comprobar que tambi´en se cumple para el siguiente n´umero, esto es, i+1 < 2(i+1). En efecto, si i < 2i, entonces i+1 < 2i+1, pero 2i+1 < 2i+2 = 2(i+1), por lo que i + 1 < 2(i + 1), como deb´ıamos probar. Las pruebas por inducci´on no siempre son, como en los ejemplos que vimos en esta secci´on, para probar propiedades de los n´umeros naturales. En nuestro caso, utilizaremos pruebas por inducci´on para probar, por ejemplo, la correcci´on de gram´aticas. Por otra parte, existen muchas variantes de la inducci´on, como tener varias “bases”. No entraremos aqu´ı en detalles de esto, postergando su estudio para las secciones donde se le utiliza directamente. 1.4. Lenguajes Uno de los conceptos m´as importantes de este texto es el de Lenguaje. Para llegar a este concepto es necesario definir antes otras nociones m´as elementales. Para todas las definiciones utilizaremos extensivamente la teor´ıa elemental de conjuntos.
  • 26. 1.4. LENGUAJES 17 1.4.1. Alfabeto, cadena de caracteres La noci´on m´as primitiva es la de s´ımbolo, que es simplemente una representaci´on distin- guible de cualquier informaci´on. Los s´ımbolos pueden ser cualesquiera, como w, 9, #, etc., pero nosotros vamos a utilizar las letras a,b,c, etc. Un s´ımbolo es una entidad indivisible. Un alfabeto es un conjunto no vac´ıo de s´ımbolos. As´ı, el alfabeto del idioma espa˜nol, E = {a, b, c, . . . , z}, es s´olo uno de tantos alfabetos posibles. En general utilizaremos la notaci´on Σ para representar un alfabeto. Con los s´ımbolos de un alfabeto es posible formar secuencias o cadenas de caracteres, tales como mxzxptlk, balks, r, etc. 4 Las cadenas de caracteres son llamadas tambi´en palabras. Un caso particular de cadena es la palabra vac´ıa, ε, la cual no tiene ninguna letra. La longitud de una palabra es la cantidad de letras que contiene, contando las repeticiones; se denota por |w| para una palabra w. Por ejemplo, |perro| es 5. Cuando escribimos varias palabras o caracteres uno a continuaci´on de otro, se supone que forman una sola palabra (se concatenan). La notaci´on usada para denotar la concatenaci´on de dos cadenas α y β es αβ. Por ejemplo, si w = abra y v = cada, entonces wvbra es la palabra abracadabra. La concatenaci´on de palabras es asociativa, esto es, (xy)z = x(yz), pero no conmutativa en el caso general. La longitud de una concatenaci´on cumple la propiedad: |uv| = |u| + |v|. 5 Una palabra v es subcadena de otra w cuando existen cadenas x, y - posiblemente vac´ıas- tales que xvy = w. Por ejemplo, “bora” es subcadena de “v´ıbora”, y ε es subcadena de toda palabra. El conjunto de todas las palabras que se pueden formar con un alfabeto Σ es denotado convencionalmente por Σ∗ . 6 Por ejemplo, si Σ = {a, b}, Σ∗ = {ε, a, aa, aaa, aaaa, . . . , b, bb, . . . , ab, aba, abb, . . .}. El conjunto Σ∗ es infinito, pero enumerable. 7 1.4.2. Lenguajes, operaciones con lenguajes Un lenguaje es simplemente un conjunto de palabras. As´ı, {abracadabra} es un lenguaje (de una sola palabra), {ali, baba, y, sus, cuarenta, ladrones} es otro, Σ∗ es otro, etc. Puesto 4 Las secuencias fueron definidas en la secci´on de preliminares. Formalmente, la palabra “casa” es la secuencia de letras c, a, s, a. 5 La prueba de estas propiedades requiere de una definici´on formal de las secuencias de caracteres, lo que nos desviar´ıa demasiado de nuestros temas. 6 Luego veremos una operaci´on llamada Cerradura de Kleene, que se parece a la notaci´on Σ∗ , aunque hay peque˜nas diferencias t´ecnicas. 7 Ver secci´on de ejercicios.
  • 27. 18 CAP´ITULO 1. PRELIMINARES que los lenguajes son conjuntos, podemos efectuar con ellos todas las operaciones de los con- juntos (uni´on, intersecci´on, diferencia). Definiremos adem´as la operaci´on de concatenaci´on de lenguajes, escrita como L1 • L2, como una extensi´on de la concatenaci´on de palabras: L1 • L2 = {w|w = xy, x ∈ L1, y ∈ L2}. Por ejemplo, dados los lenguajes L1 = {ca, ma} y L2 = {nta, sa}, la concatenaci´on L1L2 ser´ıa {canta, casa, manta, masa}. Como se ve en este ejemplo, para calcular la concatenaci´on de dos lenguajes hay que concatenar cada palabra del primero de ellos con cada una del segundo. Una operaci´on m´as complicada es la llamada “estrella de Kleene” o “cerradura de Kleene”, en honor al matem´atico norteamericano S. C. Kleene, quien la propuso. Definici´on.- Si L es un lenguaje, L∗ , llamado “cerradura de Kleene” de L, es el m´as peque˜no conjunto que contiene: La palabra vac´ıa, ε El conjunto L Todas las palabras formadas por la concatenaci´on de miembros de L∗ Por ejemplo, si L = {abra, cadabra}, L∗ = {ε, abra, abraabra, abracadabra, cadabraabra, . . .} 8 Obs´ervese que la definici´on de la estrella de Kleene es recursiva, pues en la tercera regla estamos suponiendo que ya hay palabras en L∗ , las cuales concatenamos para producir una nueva palabra. Esta noci´on se puede conceptualizar f´acilmente de la siguiente forma: Supong- amos que inicialmente L∗ contiene s´olo la palabra vac´ıa y los elementos de L. Entonces de ah´ı tomamos dos elementos cualesquiera, que no necesitan ser distintos, y los concatenamos, para producir una palabra, la cual a˜nadimos a L∗ si no estaba ya. Continuando indefinida- mente con esta acci´on, se ir´ıan obteniendo todos los elementos de L∗ . 9 Esta definici´on es congruente con la notaci´on Σ∗ que se utiliz´o para definir el conjunto de todas las palabras sobre un alfabeto, pues de hecho Σ∗ es la cerradura de Kleene del alfabeto, tomando los s´ımbolos de ´este como palabras de una letra.
  • 28. 1.5. LA JERARQU´IA DE CHOMSKY 19 LENGUAJES RECURSIVAMENTE ENUMERABLES LENGUAJES CONTEXTO LIBRES DE LENGUAJES REGULARES LENGUAJES Figura 1.3: Los LR en la jerarqu´ıa de Chomsky 1.5. La jerarqu´ıa de Chomsky Llamamos “clase de lenguajes” a conjuntos de lenguajes que comparten una cierta propiedad dada. Esta noci´on es muy abstracta, pues ya los lenguajes son en s´ı mismos conjuntos de secuencias de s´ımbolos, y las clases de lenguajes son entonces conjuntos de conjuntos de secuencias de s´ımbolos. La clasificaci´on de lenguajes en clases de lenguajes es debida a N. Chomsky [4], quien propuso una jerarqu´ıa de lenguajes, donde las clases m´as complejas incluyen a las m´as sim- ples. De las clases de lenguajes propuestas en la jerarqu´ıa de Chomsky, nosotros estudiaremos las que aparecen en la figura 1.3, que son: Los “Lenguajes Regulares”, que es la clase m´as peque˜na, e incluye a los lenguajes m´as simples. 10 Un ejemplo de lenguaje regular es el conjunto de todos los n´umero binarios. Los “Lenguajes Libres de Contexto”, que incluyen a los Lenguajes Regulares. Por ejem- plo, la mayor´ıa de los lenguajes de programaci´on son Lenguajes Libres de Contexto. Los “Lenguajes Recursivamente Enumerables”, que incluyen a los Libres de Contexto (y por lo tanto a los Lenguajes Regulares). Todas estas clases de lenguajes son representables de manera finita (mediante cadenas de caracteres que sirven como representaci´on). Ahora bien, como veremos m´as adelante, 8 Debe quedar claro que la descripci´on de L∗ en este ejemplo no es formal, pues los “. . . ” dejan abierta la puerta a muchas imprecisiones. 9 Claro que este proceso no terminar´ıa nunca, pues L∗ es infinito para cualquier L que tenga al menos un elemento. 10 Luego veremos en qu´e sentido son m´as simples que las otras clases de lenguajes.
  • 29. 20 CAP´ITULO 1. PRELIMINARES hay m´as lenguajes que posibles representaciones finitas, por lo que podemos saber que hay lenguajes m´as all´a de los Recursivamente Enumerables. Sin embargo, desde un punto de vista pr´actico, los lenguajes m´as ´utiles son aquellos que tienen una representaci´on finita, por lo que los dem´as lenguajes son s´olo de inter´es te´orico. En cap´ıtulos posteriores veremos que cada una de estas clases de lenguajes est´a asociada a un tipo de “aut´omata” capaz de procesar estos lenguajes. Esto ha hecho pensar que las categor´ıas de lenguajes de Chomsky no son completamente arbitrarias. 1.6. Ejercicios 1. Expresar en extensi´on el conjunto {x|x ∈ N, x < 10}. 2. Expresar en intenci´on el conjunto {4, 6, 8, 12, 14, 16}. 3. ¿Cu´al es el tama˜no del conjunto {∅} (esto es, cu´antos elementos contiene)? 4. Sean los conjuntos A = {a, b}, B = {1, 2, 3}. Calcular las siguientes operaciones: a) (A ∪ B) − A b) A ∪ (B − A) c) 2A∪B d) A × (A ∪ B) 5. Calcular los conjuntos potencia de los siguientes conjuntos: a) {a, b, c} b) {a, {b, c}} c) {∅} d) {∅, {∅}} 6. Sea el conjunto A = {a, b, c}. Proponer: a) Una relaci´on en A × A b) Una funci´on en A → A c) Una relaci´on en A × A que no sea funci´on. 7. Proponer las caracter´ısticas, en t´erminos de reflexividad, simetr´ıa y transitividad, que debe tener la relaci´on “x es padre de y” (se entiende que “padre” incluye tambi´en a “madre”). 8. Un juego infantil consiste en proponer simult´aneamente ya sea “piedra”, “tijeras” o “papel”. Se supone que tijera gana sobre papel, piedra sobre tijera, y papel sobre piedra. Determinar si la relaci´on “gana sobre”, que es un subconjunto de {piedra, tijeras, papel} × {piedra, tijeras, papel} es:
  • 30. 1.6. EJERCICIOS 21 a) Reflexiva b) Sim´etrica c) Transitiva 9. Consid´erese la relaci´on {(a, d), (b, d), (c, a), (d, d), (c, b)}. Calcular su cerradura: a) Reflexiva b) Sim´etrica c) Transitiva d) Reflexiva y transitiva e) Transitiva y sim´etrica f ) Reflexiva, transitiva y sim´etrica (estas son llamadas “relaciones de equivalencia”. 10. Consid´erese la relaci´on {(a, d), (b, d), (d, d), (c, b)}, siendo el dominio y el codominio el conjunto {a, b, c, d}. Indicar si esta relaci´on es: a) Una funci´on b) Funci´on total c) Funci´on inyectiva d) Funci´on sobreyectiva 11. Consid´erese la funci´on madre(x), que obtiene la madre (biol´ogica) de cada persona. Indica para esta funci´on: a) Cu´ales son el dominio y el codominio b) Si es una funci´on total c) Si es una funci´on inyectiva, sobreyectiva o biyectiva 12. Considera el conjunto de n´umeros naturales tales que si son mayores que 5 o bien terminan en 5, entonces contienen alg´un 1 o 2. a) Propon 3 n´umeros que cumplan la condici´on y 3 que no la cumplan. b) Expresa el enunciado como una f´ormula proposicional, donde M significa “mayores que 5”, T es “terminan en 5”, U es “contienen alg´un 1” y D es “contienen alg´un 2”. c) Transforma la f´ormula del inciso anterior de manera que no tenga una implicaci´on, y aplica una ley de De Morgan al resultado. 13. Dar tres ejemplos de lenguajes basados en el alfabeto {a, b, c}. 14. Explicar la diferencia -si la hay- entre un lenguaje vac´ıo y uno que contiene s´olo la palabra vac´ıa (tomar en cuenta que dos lenguajes son distintos s´olamente cuando uno de ellos contiene una palabra que el otro no contiene).
  • 31. 22 CAP´ITULO 1. PRELIMINARES 15. ¿La palabra vac´ıa es elemento de cualquier alfabeto? ¿Puede la palabra vac´ıa ε formar parte de un alfabeto? ¿Puede un alfabeto contener palabras? 16. Calcular la concatenaci´on del lenguaje {ε, aba} con {a, bb, ε}. 17. Obtener {a, bb}∗ (dar los primeros 10 elementos). 18. Mostrar 3 elementos de 2{a,b}∗ . 19. Probar que la resta de conjuntos no es conmutativa ni asociativa. 20. Probar que la intersecci´on de conjuntos es asociativa y tambi´en conmutativa. 21. Probar que la concatenaci´on de lenguajes es asociativa pero no conmutativa. 22. Probar que el conjunto N × N = {(1, 1), (2, 1), (1, 2), (1, 3), (2, 2), (3, 1), (4, 1), . . .} es contable. 23. Probar que el conjunto Σ∗ es infinito contable. 24. Probar por inducci´on la propiedad de los naturales 1 + 2 + 3 + . . . + n = n(n+1) 2 , para todo n ∈ N
  • 32. Parte I Lenguajes regulares y sus m´aquinas 23
  • 34. Cap´ıtulo 2 Aut´omatas finitos El t´ermino m´aquina evoca algo hecho en metal, usualmente ruidoso y grasoso, que eje- cuta tareas repetitivas que requieren de mucha fuerza o velocidad o precisi´on. Ejemplos de estas m´aquinas son las embotelladoras autom´aticas de refrescos. Su dise˜no requiere de conocimientos en mec´anica, resistencia de materiales, y hasta din´amica de fluidos. Al dise˜nar tal m´aquina, el plano en que se le dibuja hace abstracci´on de algunos detalles presentes en la m´aquina real, tales como el color con que se pinta, o las imperfecciones en la soldadura. El plano de dise˜no mec´anico de una m´aquina es una abstracci´on de ´esta, que es ´util para representar su forma f´ısica. Sin embargo, hay otro enfoque con que se puede modelar la m´aquina embotelladora: c´omo funciona, en el sentido de saber qu´e secuencia de operaciones ejecuta. As´ı, la parte que introduce el l´ıquido pasa por un ciclo repetitivo en que primero introduce un tubo en la botella, luego descarga el l´ıquido, y finalmente sale el tubo para permitir la colocaci´on de la c´apsula (“corcholata”). El orden en que se efect´ua este ciclo es crucial, pues si se descarga el l´ıquido antes de haber introducido el tubo en la botella, el resultado no ser´a satisfactorio. El modelado de una m´aquina en lo relacionado con secuencias o ciclos de acciones se aproxima m´as al enfoque que adoptaremos en este curso. Las m´aquinas que estudiaremos son abstracciones matem´aticas que capturan solamente el aspecto referente a las secuencias de eventos que ocurren, sin tomar en cuenta ni la forma de la m´aquina ni sus dimensiones, ni tampoco si efect´ua movimientos rectos o curvos, etc. En esta parte estudiaremos las m´aquinas abstractas m´as simples, los aut´omatas finitos, las cuales est´an en relaci´on con los lenguajes regulares, como veremos a continuaci´on. 25
  • 35. 26 CAP´ITULO 2. AUT ´OMATAS FINITOS 2.1. Modelado de sistemas discretos Antes de definir los aut´omatas finitos, empezaremos examinando las situaciones de la realidad que pueden ser modeladas usando dichos aut´omatas. De esta manera, iremos de lo m´as concreto a lo m´as abstracto, facilitando la comprensi´on intuitiva del tema. El modelado de fen´omenos y procesos es una actividad que permite: Verificar hip´otesis sobre dichos procesos; Efectuar predicciones sobre el comportamiento futuro; Hacer simulaciones (eventualmente computarizadas); Hacer experimentos del tipo “¿qu´e pasar´ıa si. . . ?”, sin tener que actuar sobre el proceso o fen´omeno f´ısico. Llamamos eventos discretos a aqu´ellos en los que se considera su estado s´olo en ciertos momentos, separados por intervalos de tiempo, sin importar lo que ocurre en el sistema entre estos momentos. Es como si la evoluci´on del sistema fuera descrita por una secuencia de fotograf´ıas, en vez de un flujo continuo, y se pasa bruscamente de una fotograf´ıa a otra. Usualmente se considera que la realidad es continua, y por lo tanto los sistemas discretos son solamente una abstracci´on de ciertos sistemas, de los que nos interesa enfatizar su aspecto “discreto”. Por ejemplo, en un motor de gasolina se dice que tiene cuatro tiempos: Admisi´on, Compresi´on, Ignici´on y Escape. Sin embargo, el pist´on en realidad no se limita a pasar por cuatro posiciones, sino que pasa por todo un rango de posiciones continuas. As´ı, los “cuatro tiempos” son una abstracci´on de la realidad. La noci´on m´as b´asica de los modelos de eventos discretos es la de estado. Un estado es una situaci´on en la que se permanece un cierto lapso de tiempo. Un ejemplo de la vida real es el de los “estados civiles” en que puede estar una persona: soltera, casada, viuda, divorciada, etc. De uno de estos estados se puede pasar a otro al ocurrir un evento o acci´on, que es el segundo concepto b´asico de la modelaci´on discreta. As´ı, por ejemplo, del estado “soltero” se puede pasar al estado “casado” al ocurrir el evento “boda”. Similarmente, se puede pasar de “casado” a “divorciado” mediante el evento “divorcio”. En estos modelos se supone que se permanece en los estados un cierto tiempo, pero por el contrario, los eventos son instant´aneos. Esto puede ser m´as o menos realista, dependiendo de la situaci´on que se est´a modelando. Por ejemplo, en el medio rural hay bodas que duran una semana, pero desde el punto de vista de la duraci´on de una vida humana, este tiempo puede considerarse despreciable. En el caso del evento “divorcio”, pudiera ser inadecuado considerarlo como instant´aneo, pues hay divorcios que duran a˜nos. En este caso, el modelo puede refinarse definiendo un nuevo estado “divorci´andose”, al que se llega desde “casado” mediante el evento “inicio divorcio”.
  • 36. 2.1. MODELADO DE SISTEMAS DISCRETOS 27 soltero casado divorciado viudo boda muerte conyuge bodadivorcio boda Figura 2.1: Modelo de estados civiles de una persona HABLANDO COLGADO OTRO SUENA OCUPADO TONO YD YC YM OD OC YD YC OM OC YM SONANDO Figura 2.2: Modelo en eventos discretos de un tel´efono Es sumamente pr´actico expresar los modelos de estados y eventos de manera gr´afica. Los estados se representan por ´ovalos, y los eventos por flechas entre los ´ovalos, llamadas transi- ciones. Dentro de cada estado se escribe su nombre, mientras que al lado de las transiciones se escribe el nombre del evento asociado, como en la figura 2.1. El estado donde se inicia tiene una marca “>”, en este caso “soltero”. En la figura 2.2 se presenta un modelo simplificado del funcionamiento de un aparato telef´onico. En esta figura los nombres de los estados se refieren al aparato desde donde llamo, contesto, etc., y en caso contrario se especifica que es el otro (“suena otro”, que se refiere al aparato telef´onico del interlocutor). En las transiciones, la “Y” inicial se refiere a acciones que hace uno mismo (por ejemplo, “YD”, que es “yo descuelgo”), mientras que la “O” se refiere al otro tel´efono. La “C” de “YC” se refiere a “colgar”, mientras que la “M” es “marcar”. As´ı, el significado de las transiciones YC, OC, YM, OM, YD y OD deben quedar claras. En este ejemplo suponemos que el estado en que inicia el proceso (que llamaremos estado inicial) es con el auricular colgado, sin sonar a´un. A partir de esa situaci´on, pueden ocurrir varios eventos que nos lleven a un nuevo estado, como por ejemplo que empiece a sonar o bien que alguien descuelgue para marcar un n´umero. Desde luego, elaborar modelos “adecuados” de un proceso real es un arte que requiere
  • 37. 28 CAP´ITULO 2. AUT ´OMATAS FINITOS pr´actica, pero en general los siguientes lineamientos pueden ser ´utiles: 1. Diferenciar entre los eventos que se consideran instant´aneos y aquellos que tienen una duraci´on considerable: estos ´ultimos se asocian a los estados. Los estados son la base de un dise˜no de los modelos que estamos estudiando, pues “recuerdan” las situaciones b´asicas por las que pasa el proceso. 2. Las condiciones asociadas a los estados deben ser excluyentes, esto es, no deben veri- ficarse varias simult´aneamente. Por ejemplo, una persona no es soltera y casada a la vez. 3. Las condiciones asociadas a los estados de un modelo bien hecho deben ser compren- sivas, lo que quiere decir que entre todas ellas cubren todos los casos posibles. Por ejemplo, en el modelo de estados civiles suponemos que una persona es ya sea soltera, o bien casada, o bien divorciada, sin haber otras opciones. Si necesitamos considerar el concubinato como otra condici´on, habr´ıa que modificar el modelo. 4. Los eventos instant´aneos son asociados a los eventos. En el ejemplo, el levantar el auricular (que se supone una acci´on instant´anea) es una transici´on, mientras que se supone que puede transcurrir un tiempo antes de que el usuario marque un n´umero, por lo que hay un estado entre estos dos eventos. En el ejemplo del tel´efono, estamos considerando que al descolgar el auricular, el tono de marcar est´a inmediatamente disponible, aunque en ciertas ciudades esta suposici´on puede ser una simplificaci´on inaceptable. En cambio, en el mismo ejemplo consideramos que la persona que contesta el tel´efono no lo hace inmediatamente, sino que hay un inicio y un fin del timbre -aunque mi suegra acostumbra contestar el tel´efono antes de que se complete el primer timbrazo. Para los eventos con duraci´on, es necesario identificar un evento de inicio y otro de terminaci´on, como en el ejemplo del divorcio que mencionamos antes. Desde luego, la decisi´on de qu´e eventos son instant´aneos y cuales tienen duraci´on depende enteramente de qu´e es importante en el problema particular que se desea modelar. Los errores que m´as frecuentemente se cometen al hacer modelos de estados y eventos son: Confundir estados con eventos; por ejemplo, tener un estado “salir de casa”, que ra- zonablemente corresponde a un evento instant´aneo. 1 Proponer conjuntos de estados no excluyentes, esto es, que se traslapan, como ser´ıa tener estados “Se encuentra en Acapulco” y “Se encuentra fuera de Guadalajara”, pues pueden verificarse ambos simult´aneamente, lo que no es posible en los estados. 1 Si no se quiere que “salir de casa” sea un evento instant´aneo, se debe reexpresar de forma que su duraci´on sea evidente, como en “prepar´andose para salir de casa”.
  • 38. 2.1. MODELADO DE SISTEMAS DISCRETOS 29 1 5 2 3 4 1 2 5 1,2,5 1 2 5 1 2,5 1,2,5 1 2 5 0 Figura 2.3: Modelo con estados finales Proponer conjuntos de estados no comprensivos, donde falta alg´un caso o situaci´on por considerar. En situaciones muy complejas, donde varios procesos evolucionan concurrentemente, el modelado de eventos discretos por medio de estados y eventos no es adecuado, pues los diagramas son demasiado grandes. En estos casos se requieren herramientas m´as sofisticadas, como las llamadas “redes de Petri” [16]. 2.1.1. Estados finales El prop´osito de algunos modelos de estados y eventos es el de reconocer secuencias de eventos “buenas”, de manera que se les pueda diferencias de las secuencias “malas”. Sup´ongase, por ejemplo, que se quiere modelar el funcionamiento de una m´aquina autom´atica vendedora de bebidas enlatadas. Dicha m´aquina acepta monedas de valor 1, 2 y 5, y el precio de cada lata es de 5. Vamos a considerar que el evento llamado “1” es la introducci´on de una moneda de valor 1 en la m´aquina, el evento “2” para la moneda de valor 2, etc. La primera cuesti´on que hay que resolver para dise˜nar nuestro modelo es decidir c´omo son los estados. Una buena idea ser´ıa que cada estado recordara lo que se lleva acumulado hasta el momento. El estado inicial, desde luego, recordar´ıa que se lleva acumulado 0. Con estas ideas podemos hacer un diagrama de estados y eventos como el de la figura 2.3. Muchas transiciones en dicho diagrama son evidentes, como el paso del estado “1” al “3” tras la introducci´on de una moneda de valor 2. En otros casos hay que tomar una decisi´on de dise˜no conflictiva, como en el caso en que en el estado “4” se introduzca una moneda de valor 2. En el diagrama presentado, se decidi´o que en ese caso se va al estado “5”, lo que en la pr´actica
  • 39. 30 CAP´ITULO 2. AUT ´OMATAS FINITOS q q q 1 0 2 a a a b b b Figura 2.4: Notaci´on gr´afica puede querer decir que la m´aquina entrega un cambio al usuario, o bien simplemente se queda con el sobrante. Un aspecto muy importante del modelo de la figura 2.3 es que el estado “5” es un estado especial, llamado estado final, e identificado por un ´ovalo de doble trazo. Los estados finales indican que cuando se llega a ellos, la secuencia de eventos que llev´o hasta ah´ı puede considerarse como “aceptable”. Por ejemplo, en la m´aquina vendedora de latas, la secuencia de eventos “meter 2”, “meter 1”, “meter 2” puede considerarse aceptable porque totaliza 5. En la figura puede observarse que dicha secuencia hace pasar por los estados 0, 2, 3 y 5, donde este ´ultimo es final. De este modo el diagrama nos permite diferencias las secuencias aceptables respecto a otras que no lo son, como la secuencia “meter 1”, “meter 2”, “meter 1”, que lleva al estado 4, que no es final. Obs´erverse que la secuencia “meter 5”, “meter 5”, “meter 5” tambi´en es aceptable –desde luego, desde el punto de vista de la m´aquina, aunque seguramente no lo sea desde el punto de vista del cliente. 2.2. M´aquinas de estados finitos A partir de ahora vamos a considerar modelos de estados y eventos un poco m´as ab- stractos que los que hemos visto antes. Retomemos el ejemplo de la m´aquina vendedora de latas, que vimos en la secci´on 2.1.1. En ese modelo pudimos reconocer secuencias de eventos “aceptables”, como la secuencia de monedas 2, 2, 1 con respecto a secuencias no aceptables, como 1, 1, 1. A partir de ahora los nombres de los eventos van a estar formados por un car- acter, y les llamaremos transiciones en vez de “eventos”. De este modo, en vez de un evento “meter 1” vamos a tener una transici´on con el caracter “1”, por ejemplo. Desde luego, la elecci´on de qu´e caracter tomar como nombre de la transici´on es una decisi´on arbitraria. Adem´as, las secuencias de eventos van a representarse por concatenaciones de caracteres, esto es, por palabras. As´ı, en el ejemplo de la m´aquina vendedora la palabra “1121” representa la secuencia de eventos “meter 1”, “meter 1”, “meter 2”, “meter 1”.
  • 40. 2.2. M ´AQUINAS DE ESTADOS FINITOS 31   ¡ ¢ £ ¤ ¥ ¦ § Figura 2.5: Componentes de una m´aquina abstracta Desde el punto de vista abstracto que vamos a adoptar a partir de ahora, nuestras m´aquinas pueden ser visualizadas como dispositivos con los siguientes componentes: (ver figura 2.5) Una cinta de entrada; Una cabeza de lectura (y eventualmente escritura); Un control. La cabeza lectora se coloca en los segmentos de cinta que contienen los caracteres que componen la palabra de entrada, y al colocarse sobre un caracter lo “lee” y manda esta informaci´on al control; tambi´en puede recorrerse un lugar a la derecha (o a la izquierda tambi´en, seg´un el tipo de m´aquina). El control (indicado por una car´atula de reloj en la figura) le indica a la cabeza lectora cu´ando debe recorrerse a la derecha. Se supone que hay manera de saber cuando se acaba la entrada (por ejemplo, al llegar al blanco). La “aguja” del control puede estar cambiando de posici´on, y hay algunas posiciones llamadas finales (como la indicada por un punto, q3) que son consideradas especiales, por que permiten determinar si una palabra es aceptada o rechazada, como veremos m´as adelante. 2.2.1. Funcionamiento de los aut´omatas finitos Como se hab´ıa comentado antes, el funcionamiento de los aut´omatas finitos consiste en ir pasando de un estado a otro, a medida que va recibiendo los caracteres de la palabra de entrada. Este proceso puede ser seguido f´acilmente en los diagramas de estados. Simplemente hay que pasar de estado a estado siguiendo las flechas de las transiciones, para cada caracter de la palabra de entrada, empezando por el estado inicial. Por ejemplo, sup´ongase que tenemos el aut´omata de la figura 2.4 y la palabra de entrada “bb”. El aut´omata inicia su operaci´on en el estado q0 –que es el estado inicial–, y al recibir la primera b pasa al estado q2, pues en el diagrama hay una flecha de q0 a q2 con la letra b. Luego, al recibir la segunda
  • 41. 32 CAP´ITULO 2. AUT ´OMATAS FINITOS b de la palabra de entrada, pasar´a del estado q2 a ´el mismo, pues en la figura se puede ver una flecha que de q2 regresa al mismo estado, con la letra b. Podemos visualizar el camino recorrido en el diagrama de estados como una “trayecto- ria” recorrida de estado en estado. Por ejemplo, para el aut´omata finito de la figura 2.4 la trayectoria seguida para la palabra ab consiste en la secuencia de estados: q0, q1, q1. Los estados son el ´unico medio de que disponen los AF para recordar los eventos que ocurren (por ejemplo, qu´e caracteres se han le´ıdo hasta el momento); esto quiere decir que son m´aquinas de memoria limitada. En ´ultima instancia, las computadoras digitales son m´aquinas de memoria limitada, aunque la cantidad de estados posibles de su memoria podr´ıa ser enorme. 2.3. Definici´on formal de aut´omatas finitos Al describir una m´aquina de estados finitos en particular, debemos incluir las informa- ciones que var´ıan de un aut´omata a otro; es decir, no tiene sentido incluir descripciones generales aplicables a todo aut´omata. Estas informaciones son exactamente las que aparecen en un diagrama de estados y transiciones, como los que hemos presentado antes. En esta secci´on vamos a presentar un formato matem´atico para representar las mismas informaciones que contiene un diagrama de estados. Como se utiliza terminolog´ıa matem´atica en vez de dibujos, decimos que se trata de una notaci´on formal. En particular, utilizamos nociones de la teor´ıa de conjuntos que fueron ya presentadas en el cap´ıtulo 1. Definici´on.- Una m´aquina de estados finitos M es un qu´ıntuplo (K, Σ, δ, s, F), donde: K es un conjunto de identificadores (s´ımbolos) de estados; Σ es el alfabeto de entrada; s ∈ K es el estado inicial; F ⊆ K es un conjunto de estados finales; δ : K × Σ → K es la funci´on de transici´on, que a partir de un estado y un s´ımbolo del alfabeto obtiene un nuevo estado. 2 La funci´on de transici´on indica a qu´e estado se va a pasar sabiendo cu´al es el estado actual y el s´ımbolo que se est´a leyendo. Es importante notar que δ es una funci´on y no simplemente una relaci´on; esto implica que para un estado y un s´ımbolo del alfabeto dados, habr´a un y s´olo un estado siguiente. Esta caracter´ıstica, que permite saber siempre cu´al ser´a el siguiente 2 que puede ser el mismo en el que se encontraba.
  • 42. 2.3. DEFINICI ´ON FORMAL DE AUT ´OMATAS FINITOS 33 estado, se llama determinismo. La definici´on dada arriba corresponde a los aut´omatas finitos determin´ıstas, abreviado “AFD” 3 Ejemplo.- El aut´omata finito determinista de la figura 2.4 puede ser expresado formal- mente como: M = (K, Σ, δ, q0, F), donde: K = {q0, q1, q2} Σ = {a, b} δ = {((q0, a), q1), ((q0, b), q2), ((q1, a), q1), ((q1, b), q1), ((q2, a), q0), ((q2, b), q2)} F = {q1, q2} La funci´on de transici´on δ puede ser expresada mediante una tabla como la siguiente, para este ejemplo: q σ δ(q, σ) q0 a q1 q0 b q2 q1 a q1 q1 b q1 q2 a q0 q2 b q2 Es f´acil ver que la diferencia entre los diagramas de estado y los AFD en notaci´on formal es solamente de notaci´on, siendo la informaci´on exactamente la misma, por lo que es sencillo pasar de una representaci´on a la otra. Tanto en los diagramas de estado como en la representaci´on formal hay que tener cuidado en respetar las condiciones para que tengamos un aut´omata v´alido; en particular, el n´umero de transiciones que salen de cada estado debe ser igual a la cantidad de caracteres del alfabeto, puesto que δ es una funci´on que est´a definida para todas las entradas posibles. 4 Para el ejemplo de la figura 2.4, donde el alfabeto es {a, b}, de cada estado deben salir exactamente dos transiciones, una con a y otra con b. Otra condici´on es que debe haber exactamente un estado inicial. En cambio, la cantidad de estados finales puede ser cualquiera, inclusive cero, hasta un m´aximo de |K| (la cantidad de estados). 3 Despu´es veremos otros aut´omatas finitos, llamados no determin´ıstas. 4 Recu´erdese que una funci´on no puede tener m´as de un resultado (en este caso, un estado de llegada) para cada entrada (en este caso, un estado de salida y un caracter consumido).
  • 43. 34 CAP´ITULO 2. AUT ´OMATAS FINITOS En la notaci´on formal tambi´en hay que seguir las transiciones, que ahora no son represen- tadas como flechas, sino como elementos del conjunto δ de transiciones. Tomando nuevamente el aut´omata de la figura 2.4 y la palabra de entrada bb, la operaci´on se inicia en el estado inicial q0; luego, al recibir la primera b, usando la transici´on ((q0, b), q2) pasa a q2, y luego, al recibir la segunda b de la palabra de entrada, por medio de la transici´on ((q2, b), q2) pasa al estado q2 –de hecho permanece en ´el. De una manera m´as general, si un AFD se encuentra en un estado q y recibe un caracter σ pasa al estado q ssi δ(q, σ) = q , esto es, si ((q, σ), q ) ∈ δ. Palabras aceptadas Los aut´omatas finitos que hemos visto pueden ser utilizados para reconocer ciertas pal- abras y diferenciarlas de otras palabras. Decimos que un AFD reconoce o acepta una palabra si se cumplen las siguientes condi- ciones: 1. Se consumen todos los caracteres de dicha palabra de entrada, siguiendo las transiciones y pasando en consecuencia de un estado a otro; 2. al terminarse la palabra, el estado al que llega es uno de los estados finales del aut´omata (los que tienen doble c´ırculo en los diagramas, o que son parte del conjunto F en la representaci´on formal). As´ı, en el ejemplo de la figura 2.4, el aut´omata acepta la palabra bb, pues al terminar de consumirla se encuentra en el estado q2, el cual es final. El concepto de lenguaje aceptado es una simple extensi´on de aquel de palabra aceptada: Definici´on.- El lenguaje aceptado por una m´aquina M es el conjunto de palabras acep- tadas por dicha m´aquina. Por ejemplo, el aut´omata de la figura 2.4 acepta las palabras que empiezan con a, as´ı como las palabras que contienen aa, y tambi´en las que terminan en b, como por ejemplo abab, aaaaa, baaa, etc. En cambio, no acepta baba ni bba, babba, etc. N´otese que tampoco acepta la palabra vac´ıa ε. Para que un AFD acepte ε se necesita que el estado inicial sea tambi´en final. Formalizaci´on del funcionamiento de los AFD El funcionamiento de los AF lo vamos a definir de manera an´aloga a como se simula el movimiento en el cine, es decir, mediante una sucesi´on de fotograf´ıas. As´ı, la operaci´on de un
  • 44. 2.3. DEFINICI ´ON FORMAL DE AUT ´OMATAS FINITOS 35 b a a b a b q0   q1   q2   q3   Figura 2.6: La configuraci´on es como una fotograf´ıa de la situaci´on de un aut´omata en medio de un c´alculo AF se describir´a en t´erminos de la sucesi´on de situaciones por las que pasa mientras analiza una palabra de entrada. El equivalente en los AF de lo que es una fotograf´ıa en el cine es la noci´on de configuraci´on, como se ilustra en la figura 2.6. La idea b´asica es la de describir completamente la situaci´on en que se encuentra la m´aquina en un momento dado, incluyendo el contenido de la cinta, la cabeza lectora y el control. Las informaciones relevantes para resumir la situaci´on de la m´aquina en un instante son: 1. El contenido de la cinta, 2. la posici´on de la cabeza lectora, 3. el estado en que se encuentra el control. Una configuraci´on ser´ıa entonces un elemento de Σ∗ × N × K, donde el primer elemento es el contenido de la cinta, el segundo describe la posici´on de la cabeza, y el tercero es el estado. S´olo nos interesar´a incluir en las configuraciones aquellas informaciones que tengan rel- evancia en cuanto a la aceptaci´on de la palabra al final de su an´alisis. As´ı, por ejemplo, es evidente que, como la cabeza lectora no puede echar marcha atr´as, los caracteres por los que ya pas´o no afectar´an m´as el funcionamiento de la m´aquina. Por lo tanto, es suficiente con considerar lo que falta por leer de la palabra de entrada, en vez de la palabra completa. Esta soluci´on tiene la ventaja de que entonces no es necesario representar la posici´on de la cabeza, pues ´esta se encuentra siempre al inicio de lo que falta por leer. Entonces una configuraci´on ser´a un elemento de K × Σ∗ . Por ejemplo, la configuraci´on correspondiente a la figura 2.5 ser´ıa: (q1, abab).
  • 45. 36 CAP´ITULO 2. AUT ´OMATAS FINITOS Para hacer las configuraciones m´as legibles, vamos a utilizar dobles corchetes en vez de par´entesis, como en [[q1, abab]]. Vamos a definir una relaci´on entre configuraciones, C1 M C2, que significa que de la configuraci´on C1 la m´aquina M puede pasar en un paso a la configuraci´on C2. Definimos formalmente esta noci´on: Definici´on.- [[q1, σw]] M [[q2, w]] para un σ ∈ Σ si y s´olo si existe una transici´on en M tal que δ(q1, σ) = q2. (σ es el caracter que se ley´o). La cerradura reflexiva y transitiva de la relaci´on M es denotada por ∗ M . As´ı, la expresi´on C1 ∗ M C2 indica que de la configuraci´on C1 se puede pasar a C2 en alg´un n´umero de pasos (que puede ser cero, si C1 = C2). Ahora ya tenemos los conceptos necesarios para definir cuando una palabra es aceptada. Definici´on.- Una palabra w ∈ Σ∗ es aceptada por una m´aquina M = (K, Σ, δ, s, F) ssi existe un estado q ∈ F tal que [[s, w]] ∗ M [[q, ε]]. N´otese que no basta con que se llegue a un estado final q, sino que adem´as ya no deben quedar caracteres por leer (lo que falta por leer es la palabra vac´ıa). Ejemplo.- Probar que el AFD de la figura 2.4 acepta la palabra babb. Soluci´on.- Hay que encontrar una serie de configuraciones tales que se pueda pasar de una a otra por medio de la relaci´on M . La ´unica forma posible es la siguiente: 5 [[q0, babb]] M [[q2, abb]] M [[q0, bb]] M [[q2, b]] M [[q2, ε]]. Como q2 ∈ F, la palabra es aceptada. Definici´on.- Un c´alculo en una m´aquina M es una secuencia de configuraciones C1, C2, . . . , Cn, tales que Ci Ci+1. Generalmente escribimos los c´alculos como C1 M C2 M . . . M Cn. Teorema.- Dados una palabra w ∈ Σ∗ y una m´aquina M = (K, Σ, δ, s, F), s´olo hay un c´alculo [[s, w]] M . . . M [[q, ε]]. Prueba.- (por contradicci´on): Sean dos c´alculos distintos: [[s, w]] M . . . M [[p, σw ]] M [[r, w ]] M . . . [[qr, ε]] [[s, w]] M . . . M [[p, σw ]] M [[s, w ]] M . . . [[qs, ε]] 5 En los AFD’s, para cada palabra de entrada s´olo hay una secuencia posible de configuraciones, precisa- mente porque son deterministas.
  • 46. 2.4. M´ETODOS DE DISE ˜NO DE AFDS 37 y sean [[r, w ]] y [[s, w ]] las primeras configuraciones distintas en los dos c´alculos. 6 Esto implica que δ(p, σ) = r y tambi´en δ(p, σ) = s, y como δ es funci´on, se sigue que r = s, lo que contradice la hip´otesis. QED. 2.4. M´etodos de dise˜no de AFDs Consid´erese el problema de construir un AFD que acepte exactamente un lenguaje dado. Este problema es com´unmente llamado “problema de dise˜no”. No es conveniente proceder por “ensayo y error”, puesto que en general hay que considerar demasiadas posibilidades, y es muy f´acil equivocarse. M´as a´un, hay dos maneras de equivocarse al dise˜nar un AFD: 7 1. Que “sobren palabras”, esto es, que el aut´omata acepte algunas palabras que no deber´ıa aceptar. En este caso decimos que la soluci´on es incorrecta. 2. Que “falten palabras”, esto es, que haya palabras en el lenguaje considerado que no son aceptadas por el AFD, cuando deber´ıan serlo. En este caso decimos que la soluci´on es incompleta. Por ejemplo, supongamos que alguien propone el aut´omata de la figura 2.4 para el lengua- je de las palabras en el alfabeto {a, b} que no tienen varias a’s seguidas. Esta soluci´on es defectuosa, porque: 1. Hay palabras, como “baa”, que tiene a’s seguidas y sin embargo son aceptadas por el AFD; 2. Hay palabras, como “ba”, que no tienen a’s seguidas y sin embargo no son aceptadas por el AFD. Como se ve, es posible equivocarse de las dos maneras a la vez en un s´olo aut´omata. La moraleja de estos ejemplos es que es necesario dise˜nar los AFD de una manera m´as sistem´atica. El elemento m´as importante en el dise˜no sistem´atico de aut´omatas a partir de un lengua- je consiste en determinar, de manera expl´ıcita, qu´e condici´on “recuerda” cada uno de los estados del AFD. El lector debe concientizarse de que este es un principio de dise˜no impor- tant´ısimo, verdaderamente b´asico para el dise˜no met´odico de aut´omatas. 6 Es decir, los c´alculos son iguales hasta cierto punto, que en el peor caso es la configuraci´on inicial [[s, w]]. 7 Estos errores no son excluyentes, y es posible que se presenten ambos a la vez.
  • 47. 38 CAP´ITULO 2. AUT ´OMATAS FINITOS IP (a) Dise˜no de estados P a b ab I (b) AFD completo Figura 2.7: Dise˜no de AFD para palabras con n´umero impar de a’s Recu´erdese que la ´unica forma de memoria que tienen los AFD es el estado en que se encuentran. As´ı, el dise˜no del AFD inicia con la propuesta de un conjunto de estados que “recuerdan” condiciones importantes en el problema considerado. Posteriormente se proponen las transiciones que permiten pasar de un estado a otro; esta ´ultima parte es relativamente sencilla una vez que se cuenta con los estados y sus condiciones asociadas. Ejemplo.- Dise˜nar un AFD que acepte las palabras en el alfabeto {a, b} en que la cantidad de a’s es impar. Soluci´on.- Las condiciones relevantes para este problema -que deben ser “recordadas” por los estados correspondientes- son: El n´umero de a’s recibidas hasta el momento es par (estado P); El n´umero de a’s recibidas hasta el momento es impar (estado I); Al iniciar la operaci´on del aut´omata no se ha recibido a´un ninguna a, por lo que debemos encontrarnos en el estado P (el cero es un n´umero par), y por lo tanto el estado P es inicial. Para determinar qu´e estados son finales, debemos fijarnos en cu´ales corresponden con el enunciado original de las palabras aceptadas. En este caso vemos que el estado I es el que corresponde, por lo que es final, mientras que P no corresponde y no es final. Los estados P e I aparecen en la figura 2.7(a). Esta es la primera etapa del dise˜no de un AFD. En nuestro m´etodo de dise˜no es importante trazar las transiciones ´unicamente despu´es de haber determinado cu´ales son los estados y sus caracter´ısticas. Ahora ya podemos trazar las transiciones, lo cual es una tarea relativamente sencilla, si ya tenemos el dise˜no de los estados. Por ejemplo, si estamos en P y recibimos una a, claramente debemos irnos a I, porque la cantidad de a’s pasa de ser par a impar. Similarmente se hacen las otras transiciones. El resultado se muestra en la figura 2.7(b). Ejemplo.- Dise˜nar un AFD que acepte exactamente el lenguaje en el alfabeto {0, 1} en que las palabras no comienzan con 00.
  • 48. 2.4. M´ETODOS DE DISE ˜NO DE AFDS 39 1 1 1 0 0 100 q3 q2q1q0 Figura 2.8: AF para palabras que no empiezan en “00” Soluci´on.- Para emprender el dise˜no en forma met´odica, comenzamos por determinar las condiciones que es importante recordar, y asociamos un estado a cada una de estas condiciones, seg´un la tabla siguiente: Estado Condici´on q0 No se han recibido caracteres q1 Se ha recibido un cero al inicio q2 Se han recibido dos ceros iniciales q3 Se recibi´o algo que no son dos ceros iniciales Claramente tanto q0 como q1 deben ser estados finales, mientras que q2 no debe ser final. Ahora hay que completar el AF, agregando las transiciones que falten. A partir de q0, si llega un 1 habr´a que ir a un estado final en el que se permanezca en adelante; agregamos al AF un estado final q3 y la transici´on de q0 a q3 con 1. El estado q3 tiene transiciones hacia s´ı mismo con 0 y con 1. Finalmente, al estado q1 le falta su transici´on con 1, que obviamente dirigimos hacia q3, con lo que el AF queda como se ilustra en la figura 2.8. En este ejemplo se puede apreciar que en ocasiones es necesario completar el conjunto de estados al momento de hacer las transiciones. 2.4.1. Dise˜no por conjuntos de estados Es posible llevar un paso m´as all´a el m´etodo de asociar una condici´on a cada estado: vamos a asociar condiciones a grupos de estados m´as que a estados individuales. De esta manera aumentaremos el grado de abstracci´on en la etapa inicial de dise˜no, haciendo posible en consecuencia atacar problemas m´as complejos con menos posibilidades de equivocarse. Este m´etodo consiste en identificar inicialmente condiciones asociadas al enunciado del problema, aunque ´estas no sean suficientemente espec´ıficas para asociarse a estados individ- uales. Describiremos este m´etodo mediante su aplicaci´on a un ejemplo particular: Dise˜nar un AFD que acepte las palabras del lenguaje en {0, 1} donde las palabras no contienen la
  • 49. 40 CAP´ITULO 2. AUT ´OMATAS FINITOS 1 0 1 11 Ni 11 ni 00 00 pero no 11 (a) Grupos de estados A C D E B F B 0 0 0 1 1 0,1 1 0 1 0 1 (b) Detalle de estados Figura 2.9: Dise˜no de AFD por grupos de estados subcadena 11 pero s´ı 00. Inmediatamente a partir del enunciado identificamos las siguientes situaciones: Las letras consumidas hasta el momento no contienen ni 00 ni 11. Contienen 00 pero no 11 Contienen 11. Estas condiciones cumplen dos requisitos que siempre se deben cumplir en este tipo de dise˜nos: Las condiciones deben ser excluyentes, lo que quiere decir que no deben poder ser ciertas dos o m´as al mismo tiempo. Las condiciones deben ser comprensivas, lo que quiere decir que no faltan casos por considerar. Los grupos de estados, as´ı como las transiciones que provocan que se pase de uno a otro, se representan como “nubes” en la figura 2.9(a). En dicha figura tambi´en se ilustran unas nubes “dobles” para indicar que son condiciones finales –en este ejemplo, la condici´on “Contienen 00 pero no 11”–, as´ı como la condici´on inicial con un s´ımbolo “>”. Estos diagramas no son a´un AFD, pero casi. Lo que falta por hacer es refinar cada grupo de estados, considerando lo que ocurre al recibir cada uno de los posibles caracteres de entrada. La forma en que se subdivide cada grupo de estados (“nube”) en estados individuales se detalla a continuaci´on:
  • 50. 2.4. M´ETODOS DE DISE ˜NO DE AFDS 41 Las letras consumidas hasta el momento no contienen ni 00 ni 11. 1. Inicial, no se han recibido caracteres. 2. Se acaba de recibir un 0. 3. Se acaba de recibir un 1. Contienen 00 pero no 11. 1. Se acaba de recibir un 0. 2. Se acaba de recibir un 1. Contienen 11 (no hay subcondiciones). Esto nos da un total de 6 estados, cada uno de los cuales tiene una condici´on muy espec´ıfica asociada (son los estados “A” a “F” en la figura 2.9(b)). El siguiente paso es hacer el dise˜no detallado de las transiciones, lo que por experiencia consideramos que es relativamente f´acil para cualquier alumno. El resultado se muestra en la figura 2.9(b). En este diagrama se puede notar que los estados de una nube “final” son tambi´en finales; esto debe verificarse siempre. Hacemos notar que en este ejemplo en particular, encontrar directamente las condiciones asociadas a los estados puede ser algo dif´ıcil; por ejemplo, encontrar directamente la condici´on “Las letras consumidas hasta el momento no contienen ni 00 ni 11 y se ha recibido un 0” (estado “B” en la figura 2.9(b)) requerir´ıa ciertamente m´as inventiva de la que tenemos derecho a presuponer en el lector. En este sentido el dise˜nar primero los grupos de estados permite manejar la complejidad del problema de manera m´as modular y gradual. En cualquier caso, ya sea que se encuentren directamente las condiciones para cada estado, o primero para grupos de estados, consideramos importante que primero se determinen los estados con sus condiciones asociadas, y solamente despu´es se tracen las transiciones, en vez de ir proponiendo sin ning´un orden los estados y las transiciones a la vez, lo que muy frecuentemente conduce a errores. 2.4.2. Dise˜no de AFD por complemento En ocasiones, para un cierto lenguaje L, es m´as sencillo encontrar un AFD para el lenguaje exactamente contrario –t´ecnicamente hablando, complementario Lc = Σ∗ −L. En estos casos, una soluci´on sencilla es hallar primero un AFD para Lc , y luego hacer una transformaci´on sencilla para obtener el aut´omata que acepta L. Si M = (K, Σ, δ, s, F) es un aut´omata determinista que acepta un lenguaje regular L, para construir un aut´omata Mc que acepte el lenguaje complemento de L, esto es, Σ∗ − L, basta con intercambiar los estados finales de M en no finales y viceversa. Formalmente,
  • 51. 42 CAP´ITULO 2. AUT ´OMATAS FINITOS Mc = (K, Σ, δ, s, K − F). As´ı, cuando una palabra es rechazada en M, ella es aceptada en Mc y viceversa. 8 Ejemplo.- Obtener un AF para el lenguaje en {a, b}∗ de las palabras que no contienen la cadena “abaab”. Soluci´on.- Primero obtenemos un AFD M1 para el lenguaje cuyas palabras s´ı contienen la cadena “abaab”. Dise˜namos M1 sistem´aticamente usando grupos de estados, uno que recuerda que la palabra no contiene aun abaab y otro que recuerda que ya se reconoci´o dicha cadena, como aparece en la figura 2.10(a). Luego detallamos cada uno de estos grupos de estados, introduciendo estados individuales que recuerdan lo que se lleva reconocido de la cadena abaab, como se muestra en la figura 2.10(b) –el grupo de estados que recuerda que ya se reconoci´o la cadena abaab tiene un s´olo estado, pues no hay condiciones adicionales que recordar. Finalmente, la soluci´on ser´a un AFD donde cambiamos los estados finales por no finales y viceversa en M1, como se muestra en 2.10(c). Desde luego, el ejemplo descrito es muy sencillo, pero luego veremos otras herramientas que se pueden usar en combinaci´on con la obtenci´on del complemento de un AF, para resolver en forma sistem´atica y flexible problemas de dise˜no aparentemente muy dif´ıciles. 2.5. Equivalencia de aut´omatas finitos. Decimos que dos aut´omatas que aceptan el mismo lenguaje son equivalentes. Definici´on.- Dos aut´omatas M1 y M2 son equivalentes, M1 ≈ M2, cuando aceptan exac- tamente el mismo lenguaje. Pero, ¿puede haber de hecho varios AF distintos9 que acepten un mismo lenguaje? La respuesta es afirmativa, y una prueba consiste en exhibir un ejemplo. Por ejemplo, los aut´omatas (a) y (b) de la figura 2.11 aceptan ambos el lenguaje a∗ . En vista de esta situaci´on, dados dos AF distintos existe la posibilidad de que sean equivalentes. Pero ¿c´omo saberlo? De acuerdo con la definici´on que hemos presentado, la demostraci´on de equivalencia de dos aut´omatas se convierte en la demostraci´on de igualdad de los lenguajes que aceptan. Sin embargo, demostrar que dos lenguajes son iguales puede complicarse si se trata de lenguajes infinitos. Es por esto que se prefieren otros m´etodos para probar la equivalencia de aut´omatas. 8 Es muy importante notar que el m´etodo de dise˜no por complemento s´olo se aplica a los aut´omatas deterministas, y no a los llamados “no deterministas”, que veremos luego. 9 ¿Qu´e se quiere decir por “distintos”? ¿Si dos AF s´olo difieren en los nombres de los estados se considerar´an distintos?
  • 52. 2.5. EQUIVALENCIA DE AUT ´OMATAS FINITOS. 43 a,b Con "abaab" Sin "abaab" b (a) abaa a b ba b abaab a,bb b a a a a abab^ (b) abaa a b ba b abaab a,bb b a a a a abab^ (c) Figura 2.10: Dise˜no del AF para palabras sin abaab
  • 53. 44 CAP´ITULO 2. AUT ´OMATAS FINITOS q0 q1 q2 b a ba a b (a) r0 r1 b a a b (b) Figura 2.11: Aut´omatas equivalentes El m´etodo que aqu´ı propondremos para los AF se basa en el siguiente teorema: Teorema de Moore.- Existe un algoritmo para decidir si dos aut´omatas finitos son equiv- alentes o no. El algoritmo mencionado en el teorema de Moore consiste en la construcci´on de un ´arbol de comparaci´on de aut´omatas. Este ´arbol permite convertir el problema de la comparaci´on de los lenguajes aceptados en un problema de comparaci´on de estados de los aut´omatas. Definici´on.- Decimos que dos estados q y q son compatibles si ambos son finales o ninguno de los dos es final. En caso contrario, son estados incompatibles. La idea del algoritmo de comparaci´on de AFD1 y AFD2 consiste en averiguar si existe alguna secuencia de caracteres w tal que sigui´endola simult´aneamente en AFD1 y AFD2 se llega a estados incompatibles. Si dicha secuencia no existe, entonces los aut´omatas son equivalentes. El ´unico problema con esta idea estriba en que hay que garantizar que sean cubiertas todas las posibles cadenas de caracteres w, las cuales son infinitas en general. Por ello se pens´o en explorar todas las posibles combinaciones de estados mediante un ´arbol. Dicho ´arbol de comparaci´on se construye de la manera siguiente, para dos aut´omatas M = (K, Σ, δ, s, F) y M = (K , Σ , δ , s , F ): 1. Inicialmente la ra´ız del ´arbol es el par ordenado (s, s ) que contiene los estados iniciales de M y M respectivamente; 2. Si en el ´arbol hay un par (r, r ), para cada caracter en Σ se a˜naden como hijos suyos los pares (rσ, rσ) donde rσ = δ(r, σ), rσ = δ(r , σ), si no est´en ya. 3. Si aparece en el ´arbol un par (r, r ) de estados incompatibles, se interrumpe la con- strucci´on del mismo, concluyendo que los dos aut´omatas no son equivalentes. En caso contrario se contin´ua a partir del paso 2.
  • 54. 2.5. EQUIVALENCIA DE AUT ´OMATAS FINITOS. 45 (q0,r0) (q2,r0) (q1,r1) a b a b a,b Figura 2.12: ´Arbol de comparaci´on de AF 1 2 b a a b b a 3 (a) 4 5 b a a b a,b 6 (b) 1,4 a 2,5 b a 3,6 b 1,6 a (c) Figura 2.13: AFDs no equivalentes 4. Si no aparecen nuevos pares (rσ, rσ) que no est´en ya en el ´arbol, se termina el proceso, concluyendo que los dos aut´omatas son equivalentes. Ejemplo.- Sean los aut´omatas M y M de la figuras 2.11(a) y (b) respectivamente. El ´arbol de comparaci´on se muestra en la figura 2.12. En dicho ´arbol se muestran adicionalmente, con l´ınea punteada, las ramas que van a nodos ya existentes, como la que va de (q2, r0) a (q0, r0). Estas ramas con l´ınas punteada no son, estrictamente hablando, parte del ´arbol, pero pensamos que mejoran la comprensi´on del diagrama. Se concluye que M y M son equivalentes. En el caso de que los aut´omatas que se comparan no sean equivalentes, la construcci´on del ´arbol de comparaci´on permite encontrar al menos una palabra en que los lenguajes aceptados por ellos difieren. Consid´erense, por ejemplo, los aut´omatas de las figuras 2.13 (a) y (b). Una parte del ´arbol de comparaci´on se muestra en la figura 2.13(c), hasta donde se encuentra el
  • 55. 46 CAP´ITULO 2. AUT ´OMATAS FINITOS primer par de estados incompatibles. Analizando el ´arbol de la figura 2.13(c), vemos que para llegar desde la ra´ız del ´arbol hasta el par incompatible (1,6), hay que gastar los caracteres b, b y a, esto es, la palabra bba. As´ı llegamos a la conclusi´on de que el aut´omata de la figura 2.13(a) no acepta la palabra bba, mientras que el de la figura 2.13(b) s´ı la acepta, y por lo tanto sus lenguajes aceptados difieren al menos en la palabra bba. Para probar que este m´etodo constituye un algoritmo de decisi´on para verificar la equiv- alencia de dos aut´omatas, hay que mostrar los puntos siguientes: 1. La construcci´on del ´arbol siempre termina (no se “cicla”) 2. Si en el ´arbol aparecen pares de estados incompatibles (uno final y el otro no final), entonces los lenguajes aceptados por los aut´omatas son efectivamente distintos. 3. Si se comparan dos aut´omatas que no son equivalentes, entonces en el ´arbol aparecer´an estados incompatibles. El punto 1 se prueba f´acilmente porque, los nodos del ´arbol siendo todos distintos, son un subconjunto de K×K , que es finito, por lo que el ´arbol no puede extenderse indefinidamente. Para probar el punto 2 basta con recorrer en el ´arbol la trayectoria que lleva al par de estados incompatibles, (r, r ), r ∈ F, r ∈ F . Simplemente concatenamos los caracteres de entrada σ en dicha trayectoria, y obtendremos una palabra wtal que si la aplicamos como entrada al aut´omata M llegaremos al estado r, es decir, w ser´a aceptada. En cambio, si aplicamos la misma w a M , llegaremos al estado r , que no es final, por lo que w no ser´a aceptada. Esto muestra que los lenguajes aceptados por M y por M difieren en al menos una palabra, w. En cuanto al punto 3, si los lenguajes L(M) y L(M ) son diferentes, entonces existe al menos una palabra, sea w, tal que es aceptada por uno y rechazada por el otro. En consecuencia, siguiendo la palabra w en el ´arbol, caracter por caracter, debemos llegar a un par incompatible. 10 Por otra parte, el punto 3 implica que si no hay pares incompatibles en el ´arbol, entonces los lenguajes son id´enticos. En efecto, por propiedades de la l´ogica elemental, al negar la conclusi´on de 3 se obtiene la negaci´on de su premisa. QED. 10 Reflexione porqu´e se est´a seguro de que es posible seguir w sobre el ´arbol, caracter por caracter. ¿No podr´ıa “atorarse” el proceso?.
  • 56. 2.6. SIMPLIFICACI ´ON DE AUT ´OMATAS FINITOS 47 2.6. Simplificaci´on de Aut´omatas finitos Una de las mejores cualidades de los AFD es que existen m´etodos mec´anicos para sim- plificarlos, hasta poder llegar al AFD m´as sencillo posible para un lenguaje dado. En el caso de los AFD, vamos a entender por simplificaci´on la reducci´on en el n´umero de estados, pero aceptando el mismo lenguaje que antes de la simplificaci´on. M´as a´un, llamare- mos minimizaci´on a la obtenci´on de un aut´omata con el menor n´umero posible de estados. 11 Como un primer ejemplo, consid´erense los AFD de las figuras 2.11 (a) y (b). En el AFD de (a), los estados q0 y q2 son en cierto modo redundantes, porque mientras se est´en recibiendo a’s, el AFD contin´ua en q0 o en q2, y cuando se recibe una b se pasa a q1. Se puede pensar entonces en eliminar uno de ellos, por ejemplo q2, y obtener el aut´omata de la figura 2.11(b), que tiene un estado menos. Esta idea de “estados redundantes” se formaliza en lo que sigue: Definici´on.- Dos estados son equivalentes, q1 ≈ q2, ssi intercambiar uno por otro en cualquier configuraci´on no altera la aceptaci´on o rechazo de toda palabra. Formalmente escribimos: Dos estados p y q son equivalentes si cuando [[s, uv]] ∗ M [[q, v]] ∗ M [[r, ε]] y [[p, v]] ∗ M [[t, ε]] entonces r y t son estados compatibles. Esta definici´on quiere decir que, si p ≈ q, al cambiar q por p en la configuraci´on, la palabra va a ser aceptada (se acaba en el estado final t ) si y s´olo si de todos modos iba a ser aceptada sin cambiar p por q (se acaba en el estado final r ). El ´unico problema con esta definici´on es que, para verificar si dos estados dados p y q son equivalentes, habr´ıa que examinar, para cada palabra posible de entrada, si intercam- biarlos en las configuraciones altera o no la aceptaci´on de esa palabra. Esto es evidentemente imposible para un lenguaje infinito. La definici´on nos dice qu´e son los estados equivalentes, pero no c´omo saber si dos estados son equivalentes. Este aspecto es resuelto por el siguiente lema: Lema: Dado un AFD M = (K, Σ, δ, q, F) y dos estados q1, q2 ∈ K, tendremos que q1 ≈ q2 ssi (K, Σ, δ, q1, F) ≈ (K, Σ, δ, q2, F). 12 Es decir, para saber si dos estados q1 y q2 son equivalentes, se les pone a ambos como estado inicial de sendos aut´omatas M1 y M2, y se procede a comparar dichos aut´omatas. Si ´estos ´ultimos son equivalentes, quiere decir que los estados q1 y q2 son equivalentes. Por ejemplo, para el aut´omata de la figura 2.11(a), para verificar si q0 ≈ q2, habr´ıa que comparar 11 El hecho de que para todo lenguaje regular existe un AFD m´ınimo, es un hecho para nada evidente, que rebasa los alcances de este libro. Esto se discute en la referencia [7]. 12 No damos la prueba, ver secci´on de ejercicios.
  • 57. 48 CAP´ITULO 2. AUT ´OMATAS FINITOS q0 q1 q2 b a ba a b Figura 2.14: Cambio de estado inicial dicho AFD con el de la figura 2.14, en el que se cambi´o el estado inicial por el otro estado que se quiere comparar. En este ejemplo, dicha comparaci´on de AFDs da un resultado de equivalencia, por lo que se concluye que los estados son redundantes. Una vez que se sabe que dos estados son equivalentes, se puede pensar en eliminar uno de ellos, para evitar redundancias y hacer m´as eficiente al AFD. Sin embargo, la eliminaci´on de un estado en el AFD plantea el problema de qu´e hacer con las flechas que conectan al estado eliminado con el resto del aut´omata. Esta cuesti´on se resuelve con los siguientes criterios: 1. Las flechas que salen del estado eliminado son eliminadas; 2. Las flechas que llegan al estado eliminado son redirigidas hacia su estado equivalente. Por ejemplo, en el aut´omata de la figura 2.11(a), si verificamos que q0 y q2 son equiva- lentes, y pensamos eliminar q2, hay que redirigir la flecha que va de q0 a q2 para que vaya al mismo q0 (se vuelve un ciclo). As´ı se llega al aut´omata de la figura 2.11(b). La eliminaci´on de estados redundantes de un AFD es una manera de simplificar AFDs, y puede usarse iteradamente para simplificar al m´ınimo. Sin embargo, el trabajo que implica es mucho, y para AFDs grandes, examinar cada par de estados es poco pr´actico. Vamos, en consecuencia, a examinar m´etodos m´as organizados para localizar los estados redundantes y minimizar los AFDs. 2.6.1. Tabla de estados distinguibles Vamos a definir la noci´on de estados distinguibles, que intuitivamente quiere decir que si dos estados son distinguibles, ya no pueden ser equivalentes. La definici´on es inductiva: Los estados p y q son distinguibles si son incompatibles (es decir, uno es final y el otro no final). Esta es la base de la inducci´on.
  • 58. 2.6. SIMPLIFICACI ´ON DE AUT ´OMATAS FINITOS 49 Figura 2.15: AFD a simplificar Si tenemos transiciones δ(p0, σ) = p y δ(q0, σ) = q donde p y q son distinguibles, entonces tambi´en p0 y q0 son distinguibles. Este es el paso inductivo. Por ejemplo, consid´erese el AFD de la figura 2.15. Claramente los estados 1 y 3 son distinguibles, porque no son compatibles. Puede ser menos obvio ver que los estados 4 y 3 son distinguibles, pero podemos ver que, aunque ambos son finales, el caracter b nos lleva de 4 a 2, y similarmente de 3 a 1, y vemos que 2 y 1 son distinguibles al no ser compatibles. En ocasiones se requieren varios pasos intermedios para determinar que un par de estados es distinguible (esto no ocurre en el ejemplo reci´en visto). Teorema.- Dos estados son equivalentes (o “redundantes”) ssi no son distinguibles. Este resultado se prueba en la referencia [7]. Su utilidad estriba en que es relativamente sencillo verificar si dos estados son distinguibles. Una manera de organizar el trabajo de verificar qu´e pares de estados de un AFD son distinguibles, consiste en construir una tabla en que los renglones y las columnas son los nombres de los estados, y en cada cruce de rengl´on con columna se indica con una × cuando son distinguibles. Por ejemplo, para el AFD de la figura 2.15, empezamos con la tabla vac´ıa de la figura 2.16(a). Obs´ervese que en la tabla se omite la diagonal principal, pues no tiene caso confrontar cada estado contra s´ı mismo. En la tabla 2.16(b) se aprecian signos “×” en las celdas (2,1), (3,1), (4,1) y (5,1) que se obtienen directamente del hecho de que son pares de estados incompatibles –por lo tanto distinguibles. En la figura 2.16(c) se ha agregado una marca en la casilla (4,2), que viene del hecho de que con el caracter b las transiciones nos llevan de 2 a 1, y de 4 a 2, pero el par (2,1) ya estaba marcado como distinguible. Finalmente, en la tabla 2.16(d) se pusieron marcas en (4,3), (5,2) y (5,3), haciendo an´alisis similares. Es f´acil convencerse de que no hay forma de hacer distinguibles los pares (3,2) y (5,4), los cuales, de
  • 59. 50 CAP´ITULO 2. AUT ´OMATAS FINITOS 2 3 4 5 1 2 3 4 (a) 2 3 4 5 X X X X 1 2 3 4 (b) 2 3 4 5 X X X X X 1 2 3 4 (c) 2 3 4 5 X X X X X X X X 1 2 3 4 (d) Figura 2.16: Tabla de estados distinguibles acuerdo con el teorema presentado, son pares de estados equivalentes. Una vez que detectamos los pares de estados equivalentes, podemos proceder a eliminar uno de ellos, de la forma que hemos visto. En el ejemplo de la figura 2.16(d), como hay dos pares de estados redundantes, el AFD m´ınimo tiene 3 estados. En aut´omatas grandes, el procedimiento puede volverse algo complicado, pues es necesario examinar repetidamente cada celda de la tabla para verificar que los cuadros a´un no marcados siguen sin ser distinguibles, hasta que en una de las iteraciones ya no se agregue ninguna marca a la tabla. 2.6.2. Simplificaci´on por clases de equivalencia Existe otro m´etodo de simplificaci´on de estados, de hecho m´as com´unmente usado que el que hemos presentado, debido a que permite organizar m´as sistem´aticamente el trabajo. Este algoritmo, que llamaremos “simplificaci´on por clases de equivalencia”, sigue un orden de operaciones inverso a la eliminaci´on gradual de estados redundantes que hemos visto antes: en vez de ir reduciendo el n´umero de estados, comienza con grupos de estados,
  • 60. 2.6. SIMPLIFICACI ´ON DE AUT ´OMATAS FINITOS 51 o “clases”, que se van dividiendo en clases m´as peque˜nas, hasta que el proceso de divisi´on ya no pueda continuarse. La idea es formar clases de estados de un aut´omata que, hasta donde se sabe en ese mo- mento, podr´ıan ser equivalentes. Sin embargo, al examinar las transiciones de varios estados de una misma clase, puede a veces inferirse que despu´es de todo no deben permanecer en la misma clase. En ese momento la clase en consideraci´on se “divide”. Luego se examinan las transiciones de las clases que se formaron, a ver si es necesario dividirlas nuevamente, y as´ı en adelante, hasta que no se halle evidencia que obligue a dividir ninguna clase. Al terminar el proceso de divisi´on de clases, cada una de las clases representa un estado del aut´omata simplificado. Las transiciones del aut´omata simplificado se forman a partir de las transiciones de los estados contenidos en cada clase. Antes de formalizar el proceso, vamos a explicarlo con ayuda de un ejemplo. (a) AFD a simplificar (b) Clases iniciales (c) Clases al final (d) AFD simplificado Figura 2.17: Simplificaci´on por clases de equivalencia Ejemplo.- Consid´erese el AFD de la figura 2.17(a). Las primeras dos clases de equivalencia que se forman contienen, respectivamente, a los estados finales y a los estados no finales,
  • 61. 52 CAP´ITULO 2. AUT ´OMATAS FINITOS los cuales evidentemente no podr´ıan ser equivalentes (esto es, estar en una sola clase de equivalencia 13 ). Estas dos clases se encuentran indicadas en la figura 2.17(b). Ahora vamos a examinar si todos los estados de cada clase tienen transiciones “similares”, lo que en nuestro caso quiere decir que van a una misma clase de equivalencia. Por ejemplo, tomemos los estados 3 y 4 de 2.17(b). Al recibir el s´ımbolo a, desde 3 nos vamos a la clase {2, 3, 4, 5}, lo que tambi´en ocurre desde el estado 4. Hasta aqu´ı 3 y 4 se comportan similarmente. Ahora examinamos las transiciones con b: desde 3 nos ir´ıamos a la clase {1}, mientras que desde 4 ir´ıamos a la clase {2, 3, 4, 5}. Conclu´ımos que 3 y 4 no pueden coexistir en una misma clase de equivalencia, por lo que la clase {2, 3, 4, 5} debe dividirse. Haciendo el mismo an´alisis con los dem´as estados, dividimos {2, 3, 4, 5} en {2, 3} y {4, 5}, como aparece en la figura 2.17(c). En este punto ya no es posible dividir alguna de las 3 clases existentes, pues las transiciones de sus estados son “similares”. Concluimos que estas son las clases de equivalencia m´as finas que pueden formarse. Tomando las clases de equivalencia de 2.17(c) como estados, formamos el AFD que aparece en 2.17(d). Obs´ervese que las transiciones de 2.17(d) son las de cualquiera de los estados contenidos en cada clase; simplemente registramos a qu´e clase de equivalencia se llega con cada s´ımbolo de entrada. El estado inicial corresponde a la clase de equivalencia que contenga el antiguo estado inicial, y los estados finales del nuevo AFD vienen de las clases de equivalencia que contienen estados finales del antiguo AFD. Formalmente, el procedimiento es como sigue, para un AFD (K, Σ, δ, s, F): 1. Inicialmente se tienen las clases F y K − F 2. Repetir para cada clase: Sea q un estado de la clase. Para cada uno de los otros estados, q , verificar si δ(q, σ) va a dar a la misma clase de equivalencia que δ(q , σ), para cada caracter σ. Si la respuesta es s´ı, la clase no necesita dividirse. Si la respuesta es no, dividir la clase en dos subclases: la que agrupa a los estados que tuvieron transiciones “similares” a q, y la de los estados con transiciones “diferentes” a q (que no van a dar a la misma clase de equivalencia con un mismo s´ımbolo σ). Por ejemplo, consideremos la clase {2, 3, 4, 5} de la figura 2.17(b). Tomando como refer- encia al estado 2, nos damos cuenta de que el estado 3 tiene transiciones similares (con a a la clase {2, 3, 4, 5}, con b a la clase {1}), mientras que los estados 4 y 5 tienen transiciones diferentes a las de 2 (con a y con b van a la clase {2, 3, 4, 5}); esto ocasiona que la clase {2, 3, 4, 5} se parta en dos. Luego habr´ıa que examinar las nuevas clases, {1}, {2, 3} y {4, 5}; en este caso sucede que ya no se necesita dividir ninguna de ellas. 13 ¿Porqu´e?
  • 62. 2.7. AUT ´OMATAS FINITOS CON SALIDA 53 1, 2, 3, 4, 5 2, 3, 4, 5 1 2, 3 4, 5 b Figura 2.18: Clases de equivalencia organizadas en ´arbol En la pr´actica, en vez de trazar l´ıneas sobre el diagrama de estados, es conveniente organizar la informaci´on de las clases de equivalencia en ´arboles, en donde cada nodo contiene los estados de una clase de equivalencia. Inicialmente est´an todos los estados del AFD en una clase, como en la ra´ız del ´arbol en la figura 2.18, para el AFD de la figura 2.17(a), e inmediatamente se dividen en finales y en no finales, como en el seguiente nivel en esa misma figura. Luego, para el nodo {2, 3, 4, 5} examinamos si las transiciones con los caracteres de entrada, en este caso a y b, llevan a las mismas clases, y verificamos que en el caso de b los estados 2 y 3 van a un no final, mientras que 4 y 5 van a un final, por lo que ese nodo se divide en dos, como se aprecia en el tercer nivel de la figura. Ah´ı tambi´en se puede apreciar un s´ımbolo b bajo el nodo {2, 3, 4, 5}, indicando a causa de qu´e caracter la clase de equivalencia se dividi´o. Examinando las transiciones en las clases de equivalencia que quedan en las hojas del ´arbol, vemos que ya no hay raz´on para dividirlas m´as. Finalmente, las clases de equivalencia resultantes son {1}, {2, 3} y {4, 5}, que corresponden a los 3 estados que tendr´a el AFD minimizado. 2.7. Aut´omatas finitos con salida Hasta donde hemos visto, la ´unica tarea que han ejecutado los aut´omatas finitos es la de aceptar o rechazar una palabra, determinando as´ı si pertenece o no a un lenguaje. Sin embargo, es posible definirlos de manera tal que produzcan una salida diferente de “si” o “no”. Por ejemplo, en el contexto de una m´aquina controlada por un aut´omata, puede haber distintas se˜nales de salida que correspondan a los comandos enviados a la m´aquina para dirigir su acci´on. En los compiladores, 14 el analizador lexicogr´afico es un aut´omata finito con salida, que recibe como entrada el texto del programa y manda como salida los elementos lexicogr´aficos reconocidos (“tokens”). Hay dos formas de definir a los aut´omatas con salida, seg´un si la salida depende de las transiciones o bien del estado en que se encuentra el aut´omata. En el primer caso, se trata de los aut´omatas de Mealy, y en el segundo, de los aut´omatas de Moore, propuestos respectivamente por G. Mealy [13] y E. Moore [15]. 14 Haremos una breve descripci´on de los compiladores en la secci´on 5.6.
  • 63. 54 CAP´ITULO 2. AUT ´OMATAS FINITOS q1q0 1 1 0 0 0 1 (a) Moore q0 1/0 0/1 (b) Mealy q1q0 1/0 1/0 0/1 0/1 (c) Moore transformado en Mealy Figura 2.19: Aut´omatas de Moore y Mealy 2.7.1. M´aquinas de Moore En las m´aquinas de Moore la salida depende del estado en que se encuentra el aut´oma- ta. Dicha salida es producida una vez, y cuando se llega a otro estado (o al mismo) por efecto de una transici´on, se produce el s´ımbolo de salida asociado al estado al que se llega. Algunos estudiantes encuentran ´util la analog´ıa de los aut´omatas de Moore con nociones de electricidad: es como si cada estado tuviera un “nivel de voltaje” que se produce en la salida mientras el control se encuentre en dicho estado. Las m´aquinas de Moore se representan gr´aficamente como cualquier AFD, al que se a˜nade, al lado de cada estado, la salida asociada, que es una cadena de caracteres. Por ejemplo, consideremos un aut´omata que invierte la entrada binaria recibida (esto es, cambia un 1 por 0 y un 0 por 1). Dicho aut´omata se representa gr´aficamente en la figura 2.19(a). Para formalizar los aut´omatas de Moore una idea sencilla es a˜nadir a un AFD est´andar una funci´on que asocie a cada estado una palabra de salida; llamaremos λ a esta funci´on. Tambi´en vamos a agregar un alfabeto de salida Γ, que puede ser distinto al de entrada. Todos los dem´as aspectos permanecen igual que en un AFD. Definici´on.- Una m´aquina de Moore es un s´extuplo (K, Σ, Γ, δ, λ, q0), en donde K, Σ y δ son como en los AFD, y q0 es el estado inicial; adem´as tenemos a Γ que es el alfabeto de salida, y λ, que es una funci´on de K a Γ∗ , que obtiene la salida asociada a cada estado; la salida es una cadena de caracteres tomados de Γ. Ejemplo.- La siguiente m´aquina de Moore formaliza el diagrama de la figura 2.19(a):
  • 64. 2.7. AUT ´OMATAS FINITOS CON SALIDA 55 K = {q0, q1}, Σ = Γ = {0, 1}, λ(q0) = 0, λ(q1) = 1, y δ est´a tabulada como: q δ(q, 0) δ(q, 1) q0 q1 q0 q1 q1 q0 La salida de una m´aquina de Moore M ante una entrada a1 . . . an es la concatenaci´on de λ(q0) λ(q1) . . . λ(qn), donde qi = δ(qi−1, ai), ai ∈ Σ, para 1 ≤ i ≤ n. 2.7.2. M´aquinas de Mealy En las m´aquinas de Mealy la salida producida depende de la transici´on que se ejecuta, y no solamente del estado. Por esto, en la notaci´on gr´afica las etiquetas de las flechas son de la forma σ/w, donde σ es el caracter que se consume de entrada, y w es la palabra que se produce en la salida. Por ejemplo, el diagrama para el inversor binario, implementado como m´aquina de Mealy, se presenta en la figura 2.19(b). Para formalizar las m´aquinas de Mealy, una idea podr´ıa ser aumentarle a las transiciones la palabra producida en la salida. Sin embargo, por modularidad se prefiere definir una funci´on de salida λ, pero que, a diferencia de las m´aquinas de Moore, ahora toma como entrada un estado y un caracter de entrada. En efecto, podemos darnos cuenta de que es lo mismo que la salida dependa del estado y un caracter, a que dependa de una transici´on. 15 Definici´on.- Una m´aquina de Mealy es un s´extuplo (K, Σ, Γ, δ, λ, q0), en el que todos los componentes tienen el mismo significado que arriba, a excepci´on de λ, que es una funci´on λ : K × Σ → Γ∗ , esto es, toma un elemento de K × Σ –que incluye un estado y un caracter de entrada– y produce una palabra formada por caracteres de Γ. Ejemplo.- El inversor de Mealy de la figura 2.19(b) se puede representar formalmente de la siguiente forma: K = {q0}, Σ = {0, 1}, δ(q0) = q0, y λ(q0, 1) = 0, λ(q0, 0) = 1. La salida de una m´aquina de Mealy ante una entrada a1 . . . an es λ(q0, a1) λ(q1, a2) . . . λ(qn−1, an), donde qi = δ(qi−1, ai), para 1 ≤ i ≤ n. Obs´ervese que, a diferencia de las m´aquinas de Moore, en las m´aquinas de Mealy la salida depende de la entrada, adem´as de los estados. Podemos imaginar que asociamos la salida a las transiciones, m´as que a los estados. Los criterios para dise˜nar tanto m´aquinas de Moore como de Mealy son b´asicamente los mismos que para cualquier otro AFD, por lo que no presentaremos aqu´ı m´etodos especiales 15 Esto suponiendo que no hay varias transiciones distintas entre dos mismos estados.
  • 65. 56 CAP´ITULO 2. AUT ´OMATAS FINITOS x f f(x) Figura 2.20: Funci´on como “caja negra” de dise˜no. 2.7.3. Equivalencia de las m´aquinas de Moore y Mealy Aunque muchas veces, para un mismo problema, la m´aquina de Mealy es m´as simple que la correspondiente de Moore, ambas clases de m´aquinas son equivalentes. Si despreciamos la salida de las m´aquinas de Moore antes de recibir el primer caracter (o sea, con entrada ε), es posible encontrar, para una m´aquina de Moore dada, su equivalente de Mealy, en el sentido de que producen la misma salida, y viceversa. La transformaci´on de una m´aquina de Moore en m´aquina de Mealy es trivial, pues hace- mos λMealy(q, a) = λMoore(δMoore(q, a)), es decir, simplemente obtenemos qu´e salida pro- ducir´a una transici´on de Mealy viendo la salida del estado al que lleva dicha transici´on en Moore. Por ejemplo, la m´aquina de Mealy de la figura 2.19(b) se puede transformar de esta manera a la m´aquina de Moore que aparece en la figura 2.19(c). La transformaci´on de una m´aquina de Mealy en Moore es m´as complicada, pues en general hay que crear estados adicionales; remitimos al alumno a la referencia [7]. 2.7.4. C´alculo de funciones en AF Ya que las m´aquinas de Mealy y de Moore pueden producir una salida de caracteres dada una entrada, es natural aplicar dichas m´aquinas al c´alculo de funciones, donde la funci´on es vista como una forma de relacionar una entrada, que es una palabra de un cierto alfabeto Σ, con una salida, que es otra palabra formada por caracteres del alfabeto de salida Γ. Podemos as´ı ver una funci´on como una “caja negra”, como se ilustra en la figura 2.20, que a partir del argumento x entrega un resultado f(x). Ejemplo.- Representamos los n´umeros naturales en el sistema unario, es decir, 3 es 111, 5 es 11111, etc. Queremos una m´aquina de Mealy que calcule la funci´on f(x) = x + 3. Esta m´aquina est´a ilustrada en la figura 2.21(a). En efecto, al recibirse el primer caracter, en la salida se entregan cuatro caracteres; en lo subsecuente por cada caracter en la entrada se entrega un caracter en la salida, hasta que se acabe la entrada. Debe quedar claro que los tres caracteres que le saca de ventaja la salida al primer caracter de entrada se conservan hasta el final de la entrada; de este modo, la salida tiene siempre tres caracteres m´as que la entrada, y en consecuencia, si la entrada es x, la salida ser´a x + 3.
  • 66. 2.7. AUT ´OMATAS FINITOS CON SALIDA 57 (a) f(x) = x + 3 (b) Funci´on f(x) = 2x Figura 2.21: Funciones aritm´eticas en Mealy (a) f(x) = 2x + 3 (b) f(x) = nx + m Figura 2.22: Funciones lineales en Mealy Ser´ıa interesante ver si los AF pueden calcular funciones aritm´eticas m´as complejas que la simple suma de una constante. Por ejemplo, ¿se podr´a multiplicar la entrada en unario por una constante? La respuesta es s´ı. El AF de la figura 2.21(b) entrega una salida que es la entrada multiplicada por dos. Aun m´as, el AF de la figura 2.22(a) calcula la funci´on f(x) = 2x + 3. Estos resultados pueden ser generalizados para mostrar que una m´aquina de Mealy puede calcular cualquier funci´on lineal. En efecto, el esquema de AF de la figura 2.22(b) muestra c´omo calcular una funci´on f(x) = nx + m. Cerca del final de este texto veremos que un AF no puede calcular funciones mucho m´as complejas que las que hemos visto; ni siquiera pueden calcular la funci´on f(x) = x2 . Formalizaci´on del c´alculo de funciones Decimos que una m´aquina M calcula una funci´on f : Σ∗ → Σ∗ si dada una entrada x ∈ Σ∗ la concatenaci´on de los caracteres que entrega a la salida es y ∈ Σ∗ , donde y = f(x). La definici´on anterior puede ser formalizada en t´erminos de las configuraciones y del paso de una configuraci´on a otra. En efecto, la “concatenaci´on de los caracteres a la salida” puede ser tomada en cuenta en la configuraci´on, a˜nadiendo a ´esta un argumento adicional en el que se vaya “acumulando” la salida entregada. Esto nos lleva a una definici´on modificada de configuraci´on. Definici´on.- Una configuraci´on de una m´aquina de Mealy (K, Σ, Γ, δ, λ, s) es una tripleta
  • 67. 58 CAP´ITULO 2. AUT ´OMATAS FINITOS abbab a,ba,b 21 Figura 2.23: AFN para palabras que contienen abbab [[q, α, β]] ∈ K × Σ∗ × Γ∗ , donde q es el estado en que se encuentra el AF, α es lo que resta por leer de la palabra, y β es lo que se lleva acumulado a la salida. De este modo el funcionamiento del aut´omata que permite concatenar caracteres a la sal- ida se define de una manera muy simple, utilizando la relaci´on del paso de una configuraci´on a otra, escrita “ ”, como sigue: Definici´on.- [[p, σu, v]] [[q, u, vξ]] si q = δ(p, σ) y ξ = λ(q, σ). Por ejemplo, dado el AF de Mealy de la figura 2.19(b), tenemos que [[q0, 101, 0]] [[q0, 01, 00]]. Utilizando la cerradura transitiva y reflexiva de la relaci´on “ ”, que se denota por “ ∗ ”, podemos definir formalmente la noci´on de funci´on calculada: Definici´on.- Una m´aquina M = (K, Σ, Γ, δ, λ, s) calcula una funci´on f : Σ∗ → Σ∗ si dada una entrada x ∈ Σ∗ , se tiene: [[s, x, ε]] ∗ [[q, ε, y]] donde q ∈ K, siempre que y = f(x). Por ejemplo, para el AF de Mealy de la figura 2.19(b), se pasa de una configuraci´on inicial [[q0, 1101, ε]] a una configuraci´on final [[q0, ε, 0010]] en cuatro pasos, lo que quiere decir que la funci´on que calcula –sea f– es tal que f(1101) = 0010. 2.8. Aut´omatas finitos no deterministas Una extensi´on a los aut´omatas finitos deterministas es la de permitir que de cada nodo del diagrama de estados salga un n´umero de flechas mayor o menor que |Σ|. As´ı, se puede permitir que falte la flecha correspondiente a alguno de los s´ımbolos del alfabeto, o bien que haya varias flechas que salgan de un s´olo nodo con la misma etiqueta. Inclusive se permite que las transiciones tengan como etiqueta palabras de varias letras o hasta la palabra vac´ıa. A estos aut´omatas finitos se les llama no determin´ısticos o no deterministas (abreviado AFN), por razones que luego veremos. Al retirar algunas de las restricciones que tienen los aut´omatas finitos determin´ısticos, su dise˜no para un lenguaje dado puede volverse m´as simple. Por ejemplo, un AFN que acepte
  • 68. 2.8. AUT ´OMATAS FINITOS NO DETERMINISTAS 59 las palabras en {a, b} que contienen la subcadena abbab se ilustra en la figura 2.23. Hacemos notar en este punto que, dado que los AFN tienen menos restricciones que los AFD, resulta que los AFD son un caso particular de los AFN, por lo que todo AFD es de hecho un AFN. 16 Hasta aqu´ı s´olo vemos ventajas de los AFN sobre los AFD. Sin embargo, en los aut´omatas no determin´ısticos se presenta una dificultad para poder saber qu´e camino tomar a partir de un estado dado cuando se presenta un s´ımbolo, pues puede haber varias opciones. Por ejemplo, tomando el aut´omata de la figura 2.23, si se nos presenta una palabra como abbaba, no sabremos si tomar la transici´on del estado 1 al 2, gastando abbab, y ya en 2 gastar a, o bien gastar en 1 todas las letras de la palabra de entrada, siguiendo las transiciones de 1 a s´ı mismo. El problema en este ejemplo es particularmente grave porque en uno de los casos se llega a un estado final y en el otro no. Veremos m´as adelante c´omo enfrentar este tipo de situaciones. Adem´as, puede ocurrir que, estando en un nodo n, y habiendo un s´ımbolo de entrada a, no exista ninguna flecha que salga de n con etiqueta a (esto no ocurre en el ejemplo de la figura 2.23). Estas diferencias con los AFD se deben reflejar en la definici´on formal de los AFN, como se hace en seguida. 2.8.1. Representaci´on formal de los AFN Definici´on.- Un aut´omata finito no determinista es un qu´ıntuplo (K, Σ, ∆, s, F) donde K, Σ, s y F tienen el mismo significado que para el caso de los aut´omatas determin´ısticos, y ∆, llamado la relaci´on de transici´on, es un subconjunto finito de K × Σ∗ × K. Por ejemplo, el AFN de la figura 2.23 quedar´ıa representado matem´aticamente por el siguiente qu´ıntuplo: ({1, 2}, {a, b}, {(1, a, 1), (1, b, 1), (1, abbab, 2), (2, a, 2), (2, b, 2)}, 1, {2}) El punto esencial es que ∆ es una relaci´on, no una funci´on. Obs´ervese tambi´en que el segundo elemento de la relaci´on de transici´on es una palabra, no un caracter del alfabeto. Esto significa que cada tripleta (q1, w, q2) ∈ ∆, que es una transici´on representada como una flecha de etiqueta w en el diagrama de estados, permite pasar de q1 a q2 “gastando” en la entrada una subcadena w. 17 Vamos a definir la noci´on de palabra aceptada en t´erminos de la representaci´on gr´afica 16 Sin embargo, la representaci´on formal de los AFN no es id´entica a la de los AFD. 17 N´otese que w puede ser la palabra vac´ıa.
  • 69. 60 CAP´ITULO 2. AUT ´OMATAS FINITOS de los aut´omatas no determin´ısticos. Definici´on.- Una palabra w es aceptada por un aut´omata no determin´ıstico ssi existe una trayectoria en su diagrama de estados, que parte del estado inicial y llega a un estado final, tal que la concatenaci´on de las etiquetas de las flechas es igual a w. 18 Ejemplo.- Verificar si la palabra baabbaba es aceptada por el AFN de la figura 2.23. Soluci´on: La palabra baabbaba puede ser dividida en cuatro pedazos, p1 = b, p2 = a, p3 = abbab, y p4 = a, cuya concatenaci´on produce la palabra original. Ahora bien, podemos seguir la siguiente secuencia de estados (trayectoria) en el AFN dado: Estado Cadena que consume Produce estado 1 b 1 1 a 1 1 abbab 2 2 a 2 As´ı probamos que la cadena baabbaba s´ı es aceptada por el aut´omata. Probar que una ca- dena no es aceptada por un aut´omata no determin´ıstico es m´as dif´ıcil, pues hay que mostrar que no existe ninguna trayectoria que satisfaga los requisitos; la cantidad de trayectorias posibles puede ser muy grande como para examinar una por una. En este ejemplo en partic- ular es posible ver que la cadena ababab no es aceptada por el aut´omata, pues la transici´on que liga el estado inicial 1 con el final 2 incluye dos b’s seguidas, que no hay en la palabra dada, por lo que no es posible llegar al estado final y la palabra no podr´a ser aceptada. 2.8.2. Dise˜no de AFN Como sugerimos al inicio de esta secci´on, en los AFN es posible aplicar m´etodos modulares de dise˜no, que permiten manejar mejor la complejidad de los problemas. Son estos m´etodos modulares los que describiremos en esta secci´on. 19 AFN para la uni´on de lenguajes Si ya contamos con dos AFN, sean M1 y M2, es posible combinarlos para hacer un nuevo AFN que acepte la uni´on de los lenguajes que ambos aut´omatas aceptaban. 18 Se puede expresar la definici´on de palabra aceptada en t´erminos de la noci´on de configuraci´on (ver ejercicios). 19 En muchos libros estos temas se agrupan, desde un punto de vista m´as matem´atico que ingenieril, en una secci´on de “propiedades de los lenguajes regulares”, pero nosotros hemos preferido aplicarlos directamente a mejorar las habilidades de dise˜no de AFN de los alumnos de computaci´on.
  • 70. 2.8. AUT ´OMATAS FINITOS NO DETERMINISTAS 61   ¡ ¢ £ ¤ ¥ ε ε Figura 2.24: AFN para la uni´on de dos lenguajes Sean M1 = (K1, Σ1, ∆1, s1, F1) y M2 = (K2, Σ2, ∆2, s2, F2) dos aut´omatas que aceptan los lenguajes L1, L2. 20 Podemos entonces construir un AFN M3 que acepte L1 ∪ L2 de la siguiente manera: Sea q un nuevo estado que no est´a en K1 ni en K2. Entonces hacemos un aut´omata M3 cuyo estado inicial es q, y que tiene transiciones vac´ıas de q a s1 y a s2. Esta simple idea le permite escoger en forma no determinista entre irse al aut´omata M1 o a M2, seg´un el que convenga: si la palabra de entrada w est´a en L1, entonces escogemos irnos a M1,,,,, y similarmente a M2 para L2. Formalmente M3 = (K1 ∪ K2 ∪ {q}, Σ1 ∪ Σ2, ∆1 ∪ ∆2 ∪ {(q, ε, s1), (q, ε, s2)}, q, F1 ∪ F2). En la figura 2.24 se representa gr´aficamente M3. Ejemplo.- Dise˜nar un aut´omata no determinista que acepte las palabras sobre {a, b} que tengan un n´umero par de a o que terminen en bb. Soluci´on.- En la figura 2.25(a) se presenta un AFN que acepta las palabras que con- tienen un n´umero par de a’s, y en 2.25(b) otro que acepta las palabras que terminan en bb. Finalmente, en 2.25(c) est´a el AFN que acepta el lenguaje dado. AFN para la concatenaci´on de lenguajes Similarmente al caso anterior, sean M1 = (K1, Σ1, ∆1, s1, F1) y M2 = (K2, Σ2, ∆2, s2, F2) dos aut´omatas que aceptan los lenguajes L1, L2 respectivamente. Podemos entonces construir un AFN M3 que acepte L1L2 de la siguiente manera: A˜nadimos unas transiciones vac´ıas que van de cada uno de los estados finales de M1 al estado inicial de M2; tambi´en se requiere que los estados finales de M1 dejen de serlo. Formalmente M3 = (K1 ∪ K2, Σ1 ∪ Σ2, ∆1 ∪ ∆2 ∪ {(p, ε, s2)|p ∈ F1}, s1, F2) El funcionamiento de M3 es como sigue: cuando se recibe una palabra w = w1w2, w1 ∈ L1, w2 ∈ L2, entonces se empieza procesando w1 exactamente como lo har´ıa M1, hasta llegar 20 Sin p´erdida de generalidad podemos suponer que K1 y K2 son disjuntos.
  • 71. 62 CAP´ITULO 2. AUT ´OMATAS FINITOS   ¡ (a) N´umero par de a q3 q4 a,b bb (b) Terminan en bb q3 q4 bb a,b q1 q2 b ba a q0 ε ε (c) Combinaci´on de los dos Figura 2.25: Combinaci´on de AFNs hasta alguno de los antiguos estados finales de M1; entonces se empieza procesando w2 como lo har´ıa M2; forzosamente debe ser posible llegar a un estado final de M2, ya que por hip´otesis M2 acepta w2. En la figura 2.26 se representa M3. Ejemplo.- Construir un AFN que acepte el lenguaje en {a, b} donde las a’s vienen en grupos de al menos dos seguidas, y los grupos de a’s que son repeticiones de aaa est´an a la derecha de los que son repeticiones de aa, como en baabaaa, aaa, baab o baaaaa. Esta condici´on no se cumple, por ejemplo, en bbaaabaa ni en aaabaaaa. Soluci´on.- Un AFN, ilustrado en la figura 2.27(a), acepta palabras que contienen b’s y grupos de aa en cualquier orden. Otro AFN –figura 2.27(b)– acepta un lenguaje similar, pero con grupos de aaa. La soluci´on es su concatenaci´on, que se presenta en la figura 2.27(c).
  • 72. 2.8. AUT ´OMATAS FINITOS NO DETERMINISTAS 63   ¡ ¢ £ ¤ ¥ ε ε Figura 2.26: AFN para la concatenaci´on de dos lenguajes b aa 1 (a) aaa b 2 (b) ε aa b aaa b 1 2 (c) Figura 2.27: Concatenaci´on de dos AFN
  • 73. 64 CAP´ITULO 2. AUT ´OMATAS FINITOS q0 q1 a ε b b a a a a q2 q3 q4 Figura 2.28: AFN a transformar en AFD 2.8.3. Equivalencia de AFD Y AFN Los aut´omatas finitos determin´ısticos (AFD) son un subconjunto propio de los no deter- min´ısticos (AFN), lo que quiere decir que todo AFD es un AFN. 21 Podr´ıa entonces pensarse que los AFN son “m´as poderosos” que los AFD, en el sentido de que habr´ıa algunos lenguajes aceptados por alg´un AFN para los cuales no habr´ıa ning´un AFD que los acepte. Sin embargo, en realidad no sucede as´ı. Teorema.- Para todo AFN N, existe alg´un AFD D tal que L(N) = L(D). Este resultado, sorprendente, pero muy ´util, puede probarse en forma constructiva, pro- poniendo para un AFN c´omo construir un AFD que sea equivalente. El m´etodo que usaremos para pasar de un AFN a un AFD se basa en la idea de considerar el conjunto de estados en los que podr´ıa encontrarse el AFN al haber consumido una cierta entrada. El m´etodo de los conjuntos de estados Dado un AFN M, consideremos la idea de mantener un conjunto de estados Qi en los que ser´ıa posible estar en cada momento al ir consumiendo las letras de una palabra de entrada. Por ejemplo, consid´erese el AFN de la figura 2.28. Queremos analizar qu´e sucede cuando este AFN recibe la palabra baaaaab. Para ello, vamos llevando registro de los conjuntos de estados en los que podr´ıa encontrarse el AFN. Inicialmente, podr´ıa encontrarse en el estado inicial q0, pero sin “gastar” ning´un caracter podr´ıa estar tambi´en en el estado q1, o sea que el proceso arranca con el conjunto de estados Q0 = {q0, q1}. Al consumirse el primer caracter, b, se puede pasar de q0 a q0 o bien a q1 (pasando por el ε), mientras que del q1 s´olo se puede pasar a q1. Entonces, el conjunto de estados en que se puede estar al consumir la b es Q1 = {q0, q1}. Y as´ı en adelante. La tabla siguiente resume los conjuntos de estados por los que se va pasando para este ejemplo: 21 Salvo por el hecho de que δ es una funci´on y ∆ una relaci´on.
  • 74. 2.8. AUT ´OMATAS FINITOS NO DETERMINISTAS 65 Entrada Estados {q0, q1} b {q0, q1} a {q2, q4} a {q0, q1, q3} a {q1, q2, q4} a {q0, q1, q3, q4} a {q1, q2, q3, q4} b {q1} Puesto que el ´ultimo conjunto de estados {q1} incluye a un estado final, se concluye que la palabra de entrada puede ser aceptada. Otra conclusi´on –mucho m´as ´util que la anterior– es darse cuenta de que si consideramos a los conjuntos de estados Qi como una especie de “mega-estados” de cierto aut´omata, entonces hemos estado en realidad siguiendo los pasos de ejecuci´on de un AFD con “mega-estados”. Una vez que comprendemos lo anterior, nos damos cuenta de que, si en vez de considerar una palabra en particular, como fue baaaaab, consideramos cada posible caracter que puede llegar al estar en un “mega-estado”, entonces podremos completar un AFD, que deber´a ser equivalente al AFN dado. 22 Para poder ser exhaustivos, necesitamos organizar las entradas posibles de manera sistem´atica. Vamos a describir inicialmente el m´etodo sobre un ejemplo. Consid´erese el problema de transformar a AFD el AFN de la figura 2.28. Vamos a considerar el conjunto de estados del AFN en los que podr´ıa encontrarse ´este en cada momento. El conjunto inicial de estados estar´a formado por los estados del AFN de la figura 2.28 en los que se pudiera estar antes de consumir el primer caracter, esto es, q0 y q1. Dicho conjunto aparece en la figura 2.29(a). A partir de ah´ı, tras recibir un caracter a, el AFN pudiera encontrarse ya sea en q2 o en q4, los cuales inclu´ımos en un nuevo conjunto de estados, al que se llega con una transici´on con a, como se ilustra en la figura 2.29(b); similarmente, a partir del conjunto inicial de estados {q0, q1} con la letra b llegamos al mismo conjunto {q0, q1}, lo cual se representa con un “lazo” a s´ı mismo en la figura 2.29(b). Con este mismo procedimiento se siguen formando los conjuntos de estados; por ejemplo, a partir de {q2, q4}, con una a se pasa a {q3, q0, q1}. Continuando as´ı, al final se llega al diagrama de la figura 2.29(c). Un detalle importante a observar en este procedimiento es que en ocasiones no hay estados adonde ir; por ejemplo, a partir del conjunto de estados {q2, q4}, con b no llegamos a ning´un estado. En casos como ´este, consideramos que habr´a una transici´on con b a un nuevo conjunto de estados vac´ıo, esto es {}, como se aprecia en la figura 2.29(c). Por supuesto, este estado vac´ıo tendr´a transiciones con a y con b a s´ı mismo. 22 La equivalencia formal se discute m´as adelante.
  • 75. 66 CAP´ITULO 2. AUT ´OMATAS FINITOS Ahora tomemos una pausa y respiremos hondo. Si nos alejamos del dibujo de manera que no observemos que son conjuntos de estados, sino que vemos los c´ırculos como estados, nos daremos cuenta de que ¡hemos construido un AFD!. Unicamente falta determinar cu´ales de los nuevos estados son finales y cu´ales no. Obviamente, si uno de los conjuntos de estados contiene un estado final del antiguo AFN, esto muestra que es posible que en ese punto el AFN hubiera aceptado la palabra de entrada, si ´esta se terminara. Por lo tanto, los estados finales del nuevo aut´omata ser´an aquellos conjuntos de estados que contengan alg´un estado final. As´ı, en el AFD de la figura 2.29(d) marcamos los estados finales; adem´as borramos los estados del antiguo AFN de cada uno de los c´ırculos, y bautizamos cada conjunto de estados como un estado. Una transformaci´on inofensiva Cuando queremos aplicar el m´etodo descrito en los p´arrafos precedentes, una dificultad que puede presentarse es que algunas flechas del aut´omata tienen como etiquetas palabras de varias letras, y desde luego no podemos tomar “un pedazo” de una transici´on. Esta situaci´on se aprecia en el AFN de la figura 2.30. En efecto, si a partir del estado inicial intentamos consumir la entrada “a”, vemos que no hay una transici´on que permita hacerlo, a´un cuando hay una transici´on (q0, aa, q1) cuya etiquete empieza con a. Una soluci´on a esta dificultad es normalizar a 1 como m´aximo la longitud de las palabras que aparecen en las flechas. Esto puede hacerse intercalando |w| − 1 estados intermedios en cada flecha con etiqueta w. As´ı, por ejemplo, de la transici´on (q1, aaa, q1) de la figura 2.30, se generan las transiciones siguientes: (q1, a, q2), (q2, a, q3), (q3, a, q1), donde los estados q2 y q3 son estados nuevos generados para hacer esta transformaci´on. Con esta transformaci´on se puede pasar de un AFN cualquiera M a un AFN M equiva- lente cuyas transiciones tienen a lo m´as un caracter. Esta transformaci´on es “inofensiva” en el sentido de que no altera el lenguaje aceptado por el AFN. 23 Por ejemplo, para el AFN de la figura 2.30 se tiene el AFN transformado de la figura 2.28. Formalizaci´on del algoritmo de conversi´on Vamos ahora a precisar el m´etodo de conversi´on de AFN a AFD con suficiente detalle como para que su programaci´on en computadora sea relativamente sencilla. Sin embargo, no vamos a describir el algoritmo en t´erminos de ciclos, instrucciones de asignaci´on, condi- cionales, etc., que son t´ıpicos de los programas imperativos. M´as bien vamos a presentar un conjunto de definiciones que capturan los resultados intermedios en el proceso de conversi´on de AFN a AFD. Estas definiciones permiten programar en forma casi directa el algoritmo 23 Probar que esta transformaci´on preserva la equivalencia (ver ejercicios).
  • 76. 2.8. AUT ´OMATAS FINITOS NO DETERMINISTAS 67 q0 q1 (a) q0 q1 q2 q4a b (b) q0 q1 q2 q4a b q0 q1 q3 a b q2 q1 q4 a b a,b q0 q1 q4 q3 a q1 b b q4 b q3 a a b q2 q1 q4 q3 a a a bb (c) (d) Figura 2.29: Transformaci´on de AFN a AFD
  • 77. 68 CAP´ITULO 2. AUT ´OMATAS FINITOS q0 q1 aaaaa ε b b Figura 2.30: AFN con transiciones de varias letras q0 q1 a ε b b a a q2 q3 q4 ε b b b a Figura 2.31: AFN con transiciones vac´ıas de conversi´on, si se utiliza un lenguaje de programaci´on adecuado, preferentemente de tipo funcional, como por ejemplo Scheme [22]. Vamos a ir presentando las definiciones partiendo de la m´as sencilla, hasta llegar a la m´as compleja. Primero introducimos una funci´on transicion(q, σ), que a partir de un estado q y un caracter dado σ obtiene el conjunto de estados a los que se puede llegar desde q directa- mente gastando el caracter σ. Por ejemplo, tomando el AFN de la figura 2.31, tenemos que transicion(q0, b) = {q0, q1}. Similarmente, transicion(q1, b) = {q1}, y transicion(q3, a) = {}. Se puede definir matem´aticamente de la forma siguiente: transicion(q, σ) = {p | (q, σ, p) ∈ ∆} Sin embargo, esta definici´on no toma en cuenta el hecho de que a veces es posible tener transiciones que no gastan ning´un caracter -aquellas marcadas con ε. As´ı, en la figura 2.28, se puede pasar de q2 a q0 y luego continuar “gratis” de q0 a q1, por lo que en realidad se tiene que considerar a q1 como uno de los estados a los que se puede llegar desde {q1, q2} gastando una a. Por lo tanto, hay que modificar la definici´on anterior. Vamos a definir una funci´on auxiliar cerr-ε(q) que es el conjunto de estados a los que se puede llegar desde el estado q pasando por transiciones vac´ıas. Adem´as, si con una tran- sici´on vac´ıa se llega a otro estado que tambi´en tiene transiciones vac´ıas, hay que continuar a˜nadiendo a cerr-ε(q) los estados a los que se llegue, hasta que no sea posible a˜nadir nuevos
  • 78. 2.8. AUT ´OMATAS FINITOS NO DETERMINISTAS 69 estados. Por ejemplo, en la figura 2.31, cerr-ε(q1) = {q1, q2, q4}, cerr-ε(q2) = {q2, q4}, y cerr-ε(q0) = {q0}. cerr-ε(q) se acostumbra llamar cerradura al vac´ıo porque matem´aticamente es la cer- radura de q con la relaci´on {(x, y) | (x, ε, y) ∈ ∆}. 24 La funci´on cerr-ε(q) se puede definir como sigue: Definici´on.- La cerradura al vac´ıo cerr-ε(q) de un estado q es el m´as peque˜no conjunto que contiene: 1. Al estado q; 2. Todo estado r tal que existe una transici´on (p, ε, r) ∈ ∆, con p ∈ cerr-ε(q). Es f´acil extender la definici´on de cerradura al vac´ıo de un estado para definir la cerradura al vac´ıo de un conjunto de estados: Definici´on.- La cerradura al vac´ıo de un conjunto de estados CERR-ε({q1, . . . , qn}) es igual a cerr-ε(q1)∪, . . . , ∪ cerr-ε(qn). Ejemplo.- Sea el AFN de la figura 2.31. Entonces CERR-ε({q1, q3}) = {q1, q2, q3, q4}. Con la funci´on de cerradura al vac´ıo ya estamos en condiciones de proponer una versi´on de la funci´on transicion que tome en cuenta las transiciones vac´ıas. Llamaremos a esta funci´on “transicion-ε”, y la definimos de forma que transicion-ε(q, σ) sea el conjunto de estados a los que se puede llegar desde q gastando σ, inclusive pasando por transiciones vac´ıas. El algoritmo es como sigue, para un estado q y un caracter σ: 1. Calcular Q0 = cerr-ε(q) 2. Para cada estado de Q0, obtener transicion(q, σ), y unir todos los conjuntos obtenidos, dando por resultado un conjunto Q1. 3. transicion-ε(q, σ) = CERR-ε(Q1). Por ejemplo, tomando la figura 2.31, para calcular transicion-ε(q1, a), los pasos ser´ıan como sigue: 1. Q0 = {q1, q2, q4} 2. transicion(q1, a) = {q1}, transicion(q2, a) = {q2, q3}, y transicion(q4, a) = {}, por lo que uniendo estos conjuntos, Q1 = {q1, q2, q3}. 24 Consultar la definici´on de cerradura de una relaci´on en el cap´ıtulo de preliminares.
  • 79. 70 CAP´ITULO 2. AUT ´OMATAS FINITOS 3. transicion-ε(q1, a) = CERR-ε({q1, q2, q3}) = {q1, q2, q3, q4}. Como ´ultima definici´on, es directo extender la funci´on transicion-ε(q, σ), que se apli- ca a un estado y un caracter, a una funci´on que se aplique a un conjunto de estados y un caracter; llamamos a esta funci´on TRANSICION -ε(Q, σ), para un conjunto de estados Q y un caracter σ. Simplemente aplicamos transicion-ε(q, σ) para cada uno de los esta- dos q ∈ Q, y juntamos los resultados en un solo conjunto. Por ejemplo, en la figura 2.31 TRANSICION -ε({q0, q2}, a) = {q0, q2, q3, q4}. Finalmente resumimos el proceso global de transformaci´on de un AFN a un AFD en el siguiente algoritmo. Algoritmo de transformaci´on AFN – AFD: Dado un AFN (K, Σ, ∆, s, F), un AFD equivalente se obtiene por los siguientes pasos: 1. El conjunto de estados inicial es cerr-ε(s). 2. El alfabeto del AFD es el mismo del AFN. 3. Para cada conjunto de estados Q ya presente, hacer: a) A˜nadir el conjunto de estados TRANSICION -ε(Q, σ) para cada caracter σ del alfabeto, si no ha sido creado a´un. b) A˜nadir transiciones ((Q, σ), Qσ) para cada conjunto de estados Qσ creado en el paso anterior. 4. Los conjuntos de estados que contengan un estado en F ser´an finales. Recu´erdese que lo que llamamos “conjunto de estados” en el algoritmo se refiere a con- junto de estados del AFN original, pero que ser´an simplemente estados en el AFD que se est´a creando. Ahora bien, se supone que el AFD que hemos construido acepta el mismo lenguaje que el AFN original. Para garantizar la infalibilidad del procedimiento descrito falta a´un justificar los siguientes puntos: 1. El procedimiento de construcci´on del AFD termina siempre 2. El grafo es un AFD 3. El AFD as´ı construido acepta el mismo lenguaje que el AFN original.
  • 80. 2.8. AUT ´OMATAS FINITOS NO DETERMINISTAS 71 La construcci´on de este grafo tiene que acabarse en alg´un momento, porque la cantidad de nodos est´a limitada a un m´aximo de 2|K| , donde K son los estados del AFN (¿Porqu´e?). El segundo punto se justifica dando la definici´on completa del AFD: (KD, Σ, δD, sD, FD), donde: Cada elemento de KD es uno de los conjuntos de estados que aparecen en el grafo; El alfabeto Σ es el mismo que el del AFN original; Hay una tripleta (p, σ, q) en δD y s´olo una por cada flecha con etiqueta σ que va del conjunto de estados p al conjunto q ; El estado inicial sD del AFD es igual a cerr-ε(s), donde s es el estado inicial del AFN; FD es el conjunto de conjuntos de estados tales que en ellos aparece al menos un estado final del AFN. Finalmente, queda pendiente probar que el AFD (que llamaremos D) acepta el mismo lenguaje que el AFN original N = (K, Σ, ∆, s, F). 25 Esta prueba se puede dividir en dos partes: L(N) ⊆ L(D). Si una palabra w = σ0σ1 . . . σn, σi ∈ Σ ∪{ε}, es aceptada por N, entonces existe una secuencia estados q0, q1, . . . , qn+1, por los que pasa N en el c´alculo: [[q0, σ0σ1 . . . σn]] [[q1, σ1 . . . σn]] . . . [[qn, σn]] [[qn+1, ε]] Esta misma secuencia de estados puede seguirse en D, de la manera siguiente (vamos a denotar con Q may´usculas los “estados” de D): Iniciamos el recorrido de N en q0 –su estado inicial– y el recorrido de D en cerr-ε(q0), que es el estado inicial de D. Hay dos posibilidades: 1. Si en N estamos en un estado q ∈ K –que aparece en Q ∈ KD – y se presenta una transici´on vac´ıa de q a q , en D vamos a permanecer en Q, que va a contener tanto a q como a q . 2. Si en N estamos en un estado q ∈ K que aparece en Q ∈ KD, y de q pasamos a qσ con el caracter σ, entonces en D pasamos a Qσ = TRANSICION -ε(QD, σ), que va a ser un “estado” de D que va a contener a qσ (¿Porqu´e?). 25 Se supone que N ya sufri´o la “transformaci´on inofensiva” definida el la p´agina 66.
  • 81. 72 CAP´ITULO 2. AUT ´OMATAS FINITOS Siguiendo este procedimiento, cuando la palabra de entrada se acaba al final del c´alculo, en una configuraci´on [[qf , ε]], qf ∈ K, habremos llegado en D a un estado Qf ∈ KD que debe contener a qf , y que por ello es estado final, aceptando as´ı la palabra de entrada. L(D) ⊆ L(N). Se puede seguir el procedimiento inverso al del punto anterior para re- construir, a partir de un c´alculo que acepta w en D, la secuencia de estados necesaria en N para aceptar w. Los detalles se dejan como ejercicio. QED 2.8.4. M´as dise˜no de AFN: Intersecci´on de lenguajes Los problemas de dise˜no de AFN en que se combinan dos condiciones que se deben cumplir simult´aneamente son particularmente dif´ıciles de resolver. Un ejemplo de estos problemas ser´ıa: “obtener un AFN que acepte las palabras que contengan la cadena abb un n´umero impar de veces y ba un n´umero par de veces”. En los m´etodos de dise˜no de AFD propusimos trabajar con grupos de estados, y desde luego esto es aplicable tambi´en a los AFN. Sin embargo, ser´ıa a´un mejor contar con un m´etodo modular que nos permitiera combinar de una manera sistem´atica las soluciones parciales para cada una de las condiciones. Ahora bien, esto es posible, si consideramos la siguiente propiedad de la intersecci´on de conjuntos: L1 ∩ L2 = (Lc 1 ∪ Lc 2)c Esta f´ormula sugiere un procedimiento pr´actico para obtener un AFN que acepte la intersecci´on de dos lenguajes dados. Esto se ilustra en el siguiente ejemplo. Ejemplo.- Obtener un AF para el lenguaje en el alfabeto {a, b} en que las palabras son de longitud par y adem´as contienen un n´umero par de a’s. Este problema parece bastante dif´ıcil, pero se vuelve f´acil utilizando la f´ormula de intersecci´on de lenguajes. En efecto, empezamos calculando los AFD para los lenguajes que cumplen independientemente las dos condiciones. El AFD M1 de la figura 2.32(a) acepta las palabras de longitud par, mientras que M2 de 2.32(b) acepta las palabras con un n´umero par de a’s. Ahora obtenemos los AFD que aceptan el complemento de los lenguajes de M1 y M2, cambiando los estados finales por no finales y viceversa; sean MC 1 y MC 2 . Es muy importante notar que s´olo es posible complementar AFD’s y no cualquier AFN. En efecto, si en un AFN simplemente cambiamos estados finales por no finales y viceversa, en general llegaremos a un resultado err´oneo (esto es, el aut´omata resultante no es equivalente al original). 26 26 Verif´ıquese esto tratando de hacer directamente la complementaci´on del AFN ({1}, {a, b}, {(1, a, 1)}, 1, {1}), el cual originalmente acepta las palabras con a’s, pero al cambiar fi- nales por no finales ya no acepta ninguna palabra, en vez de aceptar las palabras con b’s, como podr´ıamos
  • 82. 2.9. EJERCICIOS 73 q q1 a,b a,b 0 (a) q q a a b b 2 3 (b) q q0 1 a,b a,b q a a b b 3 q4 ε ε q2 (c) q q qq 5 6 7 8 a a b b b b a a (d) Figura 2.32: Intersecci´on de dos AFN Combinamos estos aut´omatas utilizando el procedimiento para la uni´on de lenguajes, dando un AFN M3 (figura 2.32(c)), el cual es convertido a un AFD M4. Finalmente, este AFD es simplificado y “complementado”, dando MC 4 (figura 2.32(d)), que es el aut´omata buscado. 2.9. Ejercicios 1. Trazar un diagrama de estados y eventos que modele: a) El paso de una persona de un estado civil a otro: considere al menos los estados civiles “soltero”, “casado”, “divorciado”, “viudo”. Considere al divorcio como un proceso con duraci´on (no instant´aneo). b) El proceso de conexi´on de una terminal a un servidor Unix, desde el punto de vista del usuario (esto es, recibir mensaje pidiendo nombre de usuario, suministrar nombre de usuario, recibir petici´on de “password”, etc.). c) El proceso de retiro de dinero en un cajero autom´atico. haber supuesto.
  • 83. 74 CAP´ITULO 2. AUT ´OMATAS FINITOS 2. Dise˜nar directamente 27 AFD’s que acepten los siguientes lenguajes; para cada ejemplo, establecer claramente lo que “recuerda” cada estado antes de trazar las transiciones. Escribir adem´as cada AFD resultante usando la notaci´on formal. a) Las palabras en {a, b} que contienen un n´umero par de a. b) Las palabras del lenguaje en {0, 1} con a lo m´as un par de unos consecutivos. c) las palabras del lenguaje en {a, b} que tienen un n´umero impar de ocurrencias de la subcadena ab. 3. Dise˜nar usando el m´etodo del complemento un AFD que acepte las palabras en {a, b} que no inicien con abab. 4. Utilizar el m´etodo de los grupos de estados (“nubes”) para dise˜nar directamente (sin pasar por AFN) AFD’s para los siguientes lenguajes: a) lenguaje en {0, 1} donde las palabras no contienen la subcadena 11 pero s´ı 00. b) lenguaje en {a, b} donde las palabras son de longitud par y tienen un n´umero par de a. c) lenguaje en {a, b} donde las palabras que contienen aba terminan en bb. 5. Minimizar cada uno de los AFD’s del problema anterior: a) Por eliminaci´on de estados redundantes, usando la tabla. b) Por clases de equivalencia. 6. Se puede usar el algoritmo de minimizaci´on para comparar dos AFD M1 y M2: dos AFD son equivalentes ssi sus AFD m´ınimos son iguales. Aqu´ı la igualdad de M1 y M2 se entiende en cuanto a la estructura de los AFD, pero los nombres de los estados pueden ser diferentes. 7. Para simplificar un aut´omata M = (K, Σ, δ, s, F), que tiene dos estados equivalentes qi, qk ∈ K, se quiere eliminar uno de ellos, sea qk. Definir formalmente cada uno de los componentes del aut´omata M , en que se ha eliminado de M el estado qk. Poner especial cuidado en definir las transiciones en M . 8. Calcular en detalle los aut´omatas M1, M2 y M3 del ejemplo de la secci´on 2.4.2. 9. En comunicaciones digitales, la derivada de un tren de pulsos, p.ej. “0011100”, es una se˜nal que tiene “1” en las cifras que cambian, y “0” en las que permanecen constantes, como “0010010” para el ejemplo. Dise˜ne un aut´omata de Moore para obtener la deriva- da de la entrada. 10. Dise˜nar un aut´omata de Mealy o de Moore que recibe un flujo de “1” y “0”, y cada vez que recibe una secuencia “11” la reemplaza por “00”. 27 Aqui “directamente” quiere decir que no se haga por transformaci´on de otro tipo de soluciones, tales como las AFN.
  • 84. 2.9. EJERCICIOS 75 11. Decimos que los lenguajes de dos AFD son “casi iguales” si difieren ´unicamente en una palabra. Dados M1 y M2, un procedimiento para decidir si L(M1) es casi igual a L(M2) consiste en: a) Hacer la comparaci´on de M1 y M2, y detectar una palabra aceptada por M1 pero no por M2, sea w. b) Hacer un AFN que acepte ´unicamente w, sea Mw. c) Combinar M2 con Mw, dando un AFN M2 que acepta L(M2) ∪ {w} d) Convertir M2 a AFD, dando M2 e) Comparar M2 con M1. Pruebe la receta anterior con los AFD siguientes: a) M1 = ({1, 2}, {a, b}, {((1, a), 2)((1, b), 2), ((2, a), 2), ((2, b), 2)}, 1, {1}) b) M2 = ({3, 4, 5}, {a, b}, {((3, a), 4), ((3, b), 5), ((4, a), 5), ((4, b), 5), ((5, a), 5), ((5, b), 5)}, 3, {4}) 12. Decimos que dos AFD M1 y M2 son iguales –atenci´on: no “equivalentes”– si s´olo difieren eventualmente en el nombre de los estados. Definir formalemente la igualdad de AFDs como una relaci´on de isomorfismo entre los estados de ambos. 13. Definir “lenguaje aceptado” para los AFN en t´erminos de las configuraciones y del paso de una configuraci´on a otra. 14. Dada la representaci´on formal de un AFD (K, Σ, δ, s, F), obtener la representaci´on formal de un AFN tal que los diagramas de ambos sean id´enticos (esto es, hacer los ajustes necesarios para poder considerar al AFD como AFN). 15. Sean dos aut´omatas finitos no deterministas AFN1 y AFN2 a) ¿C´omo es posible determinar si el lenguaje que acepta AFN1 es subconjunto del que acepta AFN2? Justifique su respuesta. Ayuda: Utilizar la propiedad de los conjuntos A ⊆ B ssi A ∪ B = B. b) Aplicar el procedimiento anterior para determinar si los AFN siguientes aceptan o no lenguajes complementarios: 1) ({1, 2}, {a, b}, {(1, a, 1), (1, b, 1), (1, aa, 2), (2, a, 2), (2, b, 2)}, 1, {2}) 2) ({1, 2, 3}, {a, b}, {(1, a, 2), (1, b, 1), (2, a, 3), (2, b, 1), (3, a, 3), (3, b, 3)}, 1, {1, 2}) 16. Probar que al reemplazar toda transici´on (p, uv, q) por (p, u, i) y (i, v, q), creando un nuevo estado no final i, el AFN seguir´a aceptando todas las palabras que aceptaba antes de hacer la transformaci´on. (Sugerencia: hay que examinar los c´alculos que permit´ıan aceptar una palabra antes de la transformaci´on, y mostrar que en el AFN transformado debe haber un c´alculo modificado que permite aceptar la misma palabra).
  • 85. 76 CAP´ITULO 2. AUT ´OMATAS FINITOS 17. Suponga una variante de los aut´omatas finitos, los aut´omatas con aceptaci´on (AA), en que, adem´as de los estados finales, hay estados de aceptaci´on, tales que si el aut´omata pasa por uno de ellos, aunque sea una vez, la palabra ser´a aceptada, independiente- mente del tipo de estado al que se llegue al agotar la palabra. a) Dibuje un AA que acepte las palabras sobre {a, b} que comienzan por “bb” o terminan con “aaa”. (Marque los estados de aceptaci´on por nodos ⊕). b) Defina formalmente los AA, as´ı como la noci´on de lenguaje aceptado por un AA, usando para ello la relaci´on entre configuraciones C1 C2. (Evite en sus definiciones el uso de “. . . ”). c) Pruebe que los AA son equivalentes a los AF, dando un procedimiento para con- struir un AF a partir de cualquier AA dado. d) Pruebe su procedimiento del inciso anterior transformando el AA del primer inciso a AF. 18. Suponga otra variante de los aut´omatas finitos deterministas, los aut´omatas con rec- hazo (AR), en que, adem´as de los estados finales, hay estados de rechazo, tales que si el aut´omata pasa por uno de ellos, aunque sea una vez, la palabra es rechazada, inde- pendientemente de que al final se llegue o no a un estado final o de rechazo. Se supone que si no se pasa por un estado de rechazo, la aceptaci´on de una palabra depende de que al final se llegue a un estado final. a) Dibuje un AR que acepte las palabras sobre {a, b} que no contengan las cadenas “abaab” ni “abba”. Marque los estados de rechazo por nodos ⊗. b) Defina formalmente los AR, as´ı como la noci´on de lenguaje aceptado por un AR, usando para ello la relaci´on entre configuraciones C1 C2. (Evite en sus definiciones el uso de “. . . ” ). 19. Un aut´omata finito casi determinista (AFCD) es un AFN en el cual nunca hay la posi- bilidad de elegir entre dos caminos a tomar. Los AFCD son de hecho una abreviatura de los AFD, donde se omiten los “infiernos”, y se pueden incluir varios caracteres en un arco. Un ejemplo de AFCD est´a en la siguiente figura 2.33. ¿Es posible probar que q10q bab a b Figura 2.33: Ejemplo de AFCD un AFN dado es AFCD? Si es as´ı, proponga un m´etodo sistem´atico para probarlo. 20. Suponga unos aut´omatas no deterministas con salida (AFNDS), en que las flechas son de la forma “w/y”, donde “w” y “y” son palabras formadas respectivamente con el alfabeto de entrada y de salida (pueden ser la palabra vac´ıa).
  • 86. 2.9. EJERCICIOS 77 a) Defina formalmente los AFNDS. b) Defina formalmente la noci´on de funci´on calculada. c) Se dice que un AFNDS es “confluente” cuando la salida obtenida es la misma independientemente de qu´e trayectoria se siga cuando haya varias opciones. 1) Pruebe que todo aut´omata de Mealy, visto como AFNDS, es confluente. 2) ¿Es posible decidir si un AFNDS es confluente? Pruebe su respuesta pro- poniendo un procedimiento para decidir, o mostrando porqu´e es imposible. 21. Un estado “q” de un AFD es “inaccesible” si no hay ninguna trayectoria que, partiendo del estado inicial, llegue a “q”. Esta, sin embargo, no es una definici´on formal. a) Definir formalmente cu´ando un estado “q” es inaccesible, utilizando para ello la relaci´on de paso entre configuraciones. b) Proponer un procedimiento para obtener el conjunto de los estados accesibles en un AFD. (Ayuda: considerar c´omo evoluciona el conjunto de “estados accesibles” ante posibles transiciones). 22. Decimos que un AFN “se traba” cuando no hay una transici´on que indique adonde ir ante el s´ımbolo de entrada. Pruebe que es posible/no es posible saber, dado un AFN M en particular, si M podr´ıa o no “trabarse” para alguna palabra w (proponga un m´etodo de decisi´on). 23. Para una palabra w, un sufijo de w es cualquier subcadena s con que termina w, es decir zs = w, tal que w, z, s ∈ Σ∗ . Si L es un lenguaje, Sufijo(L) es el conjunto de sufijos de las palabras de L. Demuestre que si hay un AFN que acepte R, Sufijo(R) tambi´en es aceptado por alg´un AFN. 24. Hemos visto que es posible dise˜nar modularmente un AFN que acepte la intersecci´on de los lenguajes aceptados por M1 y M2. ¿Ser´a tambi´en posible combinar M1 y M2 de manera que obtengamos un AFN que acepte la diferencia L1 − L2 de sus lenguajes? Proponga un m´etodo para hacerlo. 25. ¿Es regular el reverso de un lenguaje regular? (El reverso de una palabra σ1σ2 . . . σn es σn . . . σ1). 26. Consideremos el problema de saber si el lenguaje aceptado por un AFD M es vac´ıo o no lo es. a) Una primera idea ser´ıa simplemente verificar si el conjunto de estados finales es vac´ıo ¿Porqu´e no funciona esta idea ? b) Proponer un procedimiento que permita decidir si L(M) = ∅ (Ayuda: Utilizar la comparaci´on de aut´omatas). c) Aplicar el procedimiento de (b) para verificar si el lenguaje del siguiente AFD M es vac´ıo: ({1, 2, 3}, {a, b}, {((1, a), 2), ((1, b), 1), ((2, a), 2), ((2, b), 1), ((3, a), 2), ((3, b), 1)}, 1, {3}) 27. Probar el lema de la secci´on 2.6.
  • 87. 78 CAP´ITULO 2. AUT ´OMATAS FINITOS
  • 88. Cap´ıtulo 3 Expresiones Regulares y Gram´aticas Regulares En este cap´ıtulo estudiaremos la clase de lenguajes aceptados por los AF, la de los lenguajes regulares, que es al mismo tiempo una de las de mayor utilidad pr´actica. Como se aprecia en la figura 1.3, los Lenguajes Regulares son los m´as simples y restringidos dentro de la jerarqu´ıa de Chomsky que presentamos anteriormente. Estos lenguajes pueden adem´as ser descritos mediante dos representaciones que veremos: las Expresiones Regulares y las Gram´aticas Regulares. 3.1. Lenguajes Regulares Los lenguajes regulares se llaman as´ı porque sus palabras contienen “regularidades” o repeticiones de los mismos componentes, como por ejemplo en el lenguaje L1 siguiente: L1 = {ab, abab, ababab, abababab, . . .} En este ejemplo se aprecia que las palabras de L1 son simplemente repeticiones de “ab” cualquier n´umero de veces. Aqu´ı la “regularidad” consiste en que las palabras contienen “ab” alg´un n´umero de veces. Otro ejemplo m´as complicado ser´ıa el lenguaje L2: L2 = {abc, cc, abab, abccc, ababc, . . .} La regularidad en L2 consiste en que sus palabras comienzan con repeticiones de “ab”, 79
  • 89. 80 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES seguidas de repeticiones de “c”. Similarmente es posible definir muchos otros lenguajes basa- dos en la idea de repetir esquemas simples. Esta es la idea b´asica para formar los lenguajes Regulares. Adicionalmente a las repeticiones de esquemas simples, vamos a considerar que los lengua- jes finitos son tambi´en regulares por definici´on. Por ejemplo, el lenguaje L3 = {anita, lava, la, tina} es regular. Finalmente, al combinar lenguajes regulares uni´endolos o concaten´andolos, tambi´en se obtiene un lenguaje regular. Por ejemplo, L1 ∪ L3 = {anita, lava, la, tina, ab, abab, ababab, abababab, . . .} es regular. Tambi´en es regular una concatenaci´on como L3L3 = {anitaanita, anitalava, anitala, anitatina, lavaanita, lavalava, lavala, lavatina, . . .} 1 3.1.1. Definici´on formal de Lenguajes Regulares Definici´on.- Un lenguaje L es regular si y s´olo si se cumple al menos una de las condiciones siguientes: L es finito; L es la uni´on o la concatenaci´on de otros lenguajes regulares R1 y R2, L = R1 ∪ R2 o L = R1R2 respectivamente. L es la cerradura de Kleene de alg´un lenguaje regular, L = R∗ . Esta definici´on nos permite construir expresiones en la notaci´on de conjuntos que repre- sentan lenguajes regulares. Ejemplo.- Sea el lenguaje L de palabras formadas por a y b, pero que empiezan con a, como aab, ab, a, abaa, etc. Probar que este lenguaje es regular, y dar una expresi´on de conjuntos que lo represente. Soluci´on.- El alfabeto es Σ = {a, b}. El lenguaje L puede ser visto como la concatenaci´on de una a con cadenas cualesquiera de a y b; ahora bien, ´estas ´ultimas son los elementos de {a, b}∗ , mientras que el lenguaje que s´olo contiene la palabra a es {a}. Ambos lenguajes son regulares. 2 Entonces su concatenaci´on es {a}{a, b}∗ , que tambi´en es regular. 1 Recu´erdese que la concatenaci´on de dos lenguajes L1 y L2 se define como el conjunto de las palabras formadas concatenando una de L1 con una de L2, ver secci´on 1.4.2. 2 En efecto, {a} es finito, por lo tanto regular, mientras que {a, b}∗ es la cerradura de {a, b}, que es regular por ser finito.
  • 90. 3.2. EXPRESIONES REGULARES 81 3.2. Expresiones regulares La notaci´on de conjuntos nos permite describir los lenguajes regulares, pero nosotros quisi´eramos una notaci´on en que las representaciones de los lenguajes fueran simplemente texto (cadenas de caracteres). As´ı las representaciones de los lenguajes regulares ser´ıan sim- plemente palabras de un lenguaje (el de las representaciones correctamente formadas). Con estas ideas vamos a definir un lenguaje, el de las expresiones regulares, en que cada palabra va a denotar un lenguaje regular. Definici´on.- Sea Σ un alfabeto. El conjunto ER de las expresiones regulares sobre Σ contiene las cadenas en el alfabeto Σ∪ {“∧”, “+”, “•”, “∗ ”, “(”, “)”, “Φ”} que cumplen con lo siguiente: 1. “∧” y “Φ” ∈ ER 2. Si σ ∈ Σ, entonces σ ∈ ER. 3. Si E1, E2 ∈ ER, entonces “(”E1“+”E2“)” ∈ ER, “(”E1“•”E2“)” ∈ ER, “(”E1“)∗ ” ∈ ER. Las comillas “ ” enfatizan el hecho de que estamos definiendo cadenas de texto, no expresiones matem´aticas 3 . Es la misma diferencia que hay entre el caracter ASCII “0”, que se puede teclear en una terminal, y el n´umero 0, que significa que se cuenta un conjunto sin ning´un elemento. Ejemplos.- Son ER en {a, b, c} las siguientes: “a”, “((a+b))∗ ”, “((a•b)•c)”. No son ER: “ab”, “((a • b(c)∗ )”. 3.2.1. Significado de las ER Las ER son simplemente f´ormulas cuyo prop´osito es representar cada una de ellas un lenguaje. As´ı, el significado de una ER es simplemente el lenguaje que ella representa. Por ejemplo, la ER “Φ” representa el conjunto vac´ıo {}. Para comprender intuitivamente la manera en que las ER representan lenguajes, consid- eremos el proceso de verificar si una palabra dada w pertenece o no al lenguaje representado por una ER dada. Vamos a decir que una palabra “empata” con una expresi´on regular si es parte del lenguaje que esta representa. La palabra vac´ıa ε “empata” con la ER ∧. 3 Este ´ultimo es el caso de las expresiones de conjuntos para describir los conjuntos regulares.
  • 91. 82 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES Una palabra de una letra como “a” empata con una ER consistente en la misma letra “a”, “b” empata “b”, etc. Luego, una palabra w = uv, esto es w est´a formada de dos pedazos u y v, empata con una expresi´on (U • V ) a condici´on de que u empate con U y v empate con V . Por ejemplo, abc empata con (a • (b • c)) porque abc puede ser dividida en a y bc, y a empata con a en la ER, mientras que bc empata con (b • c) separando b y c de la misma manera. Similarmente, cuando la ER es de la forma (U + V ), puede empatar con una palabra w cuando esta empata con U o bien cuando empata con V . Por ejemplo, bc empata (a+(b•c)). Una palabra w empata con una expresi´on U∗ cuando w puede ser partida en pedazos w = w1w2, . . . de tal manera que cada pedazo wi empata con U. Por ejemplo, caba empata con (((c + b) • a))∗ porque puede partirse en los pedazos ca y ba, y ambos empatan con ((c + b) • a), lo cual es f´acil de verificar. A continuaci´on definiremos formalmente la correspondencia entre la representaci´on (una ER) y el lenguaje representado. Definici´on.- El significado de una ER es una funci´on L : ER → 2Σ∗ (esto es, una funci´on que toma como entrada una expresi´on regular y entrega como salida un lenguaje), definida de la manera siguiente: 1. L(“Φ”) = ∅ (el conjunto vac´ıo) 2. L(“∧”) = {ε} 3. L(“σ”) = {σ}, σ ∈ Σ. 4. L(“(”R“•”S“)” ) = L(R)L(S), R, S ∈ ER 5. L( “(”R“+”S“)” ) = L(R) ∪ L(S), R, S ∈ ER 6. L( “(”R“)∗ ” ) = L(R)∗ , R ∈ ER Para calcular el significado de una ER en particular, se aplica a ella la funci´on L. Las ecuaciones dadas arriba se aplican repetidamente, hasta que el s´ımbolo L desaparezca. Ejemplo.- El significado de la ER “(((a + b))∗ • a)” se calcula de la manera siguiente: L(“(((a + b))∗ • a)”) = L(“((a + b))∗ ”)L(“a”) -usando 4, = L(“(a + b)”)∗ {a} -por 6 y 3, = (L(“a”) ∪L(“b”))∗ {a} -aplicando 5, = ({a} ∪ {b})∗ {a} = {a, b}∗ {a} -usando 3 y simplificando.
  • 92. 3.2. EXPRESIONES REGULARES 83 Este es el lenguaje de las palabras sobre {a, b} que terminan en a. Con objeto de hacer la notaci´on menos pesada, vamos a simplificar las ER de la manera siguiente: Omitiremos las comillas “ ”. Se eliminan los par´entesis innecesarios. Se supone una precedencia de operadores en el orden siguiente: primero “∗ ”, luego “•” y finalmente “+”. Adem´as se supone que los operadores “•” y “+” son asociativos. Eventualmente omitiremos el operador “•”, suponiendo que ´este se encuentra impl´ıcito entre dos subexpresiones contiguas. Ejemplos.- a, (a + b)∗ , abc, ac∗ son tomados como “a”, “((a + b))∗ ”, “((a • b) • c)” y “(a • (c)∗ )”, respectivamente. Ejemplo.- Encontrar una expresi´on regular para el lenguaje en {a, b}∗ en el que inmedi- atamente antes de toda b aparece una a. Soluci´on.- Una posible ER es (a + ab)∗ Una soluci´on aceptable para este tipo de problemas debe cumplir dos caracter´ısticas: 1. Correcci´on.- Las palabras que represente la ER propuesta deben satisfacer la descrip- ci´on del problema (por ejemplo, para el problema del ejemplo, la soluci´on a∗ (a + b)∗ no es adecuada porque representa algunas palabras, como abb, que no satisfacen la condici´on de que toda b est´e inmediatamente precedida por una a; 2. Completez.- La ER propuesta debe representar todas las palabras que satisfagan la condici´on. As´ı, para el problema del ejemplo, la soluci´on (ab)∗ no es adecuada porque hay palabras tales como aab, pertenecientes al lenguaje, que no son representadas por dicha ER. 3.2.2. Metodolog´ıa de dise˜no de las ER Al tratar de encontrar una ER para un lenguaje dado, mientras m´as complejo sea el lenguaje es obvio que resulta m´as dif´ıcil encontrar por pura intuici´on dicha ER. En estos casos puede ser conveniente trabajar en forma met´odica. Una t´ecnica que funciona en muchos casos consiste en determinar primero la estructura de la ER, dejando unos “huecos” pendientes para resolverse luego. Estos huecos, que llamaremos contextos, son tambi´en lenguajes para los que habr´a que encontrar una ER.
  • 93. 84 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES Ejemplo.- Obtener una ER para el lenguaje en el alfabeto {a, b, c} en que las palabras con- tienen exactamente una vez dos b contiguas. Por ejemplo, las palabras aabb, babba, pertenecen al lenguaje, pero no aaba, abbba ni bbabb. Para resolver este problema, expresamos primero la estructura de la ER de la manera siguiente: < contexto1 > bb < contexto2 > Podemos ver que en esta expresi´on aparecen directamente las bb que deben estar en la ER, rodeadas por otras dos ER, que son < contexto1 > y < contexto2 >. Ahora el problema es determinar qu´e ER corresponden a < contexto1 > y < contexto2 >, lo cual es un subproblema del problema original. El lenguaje de < contexto1 > comprende a las palabras que no tienen bb y adem´as no terminan en b. 4 Esto es equivalente a decir que toda b est´a seguida de una a o una c. Esto quiere decir que la ER de este contexto va ser de la forma: (. . . b(a + c) . . .)∗ donde los detalles que faltan est´an representados por las “. . .”. Lo que falta por considerar es que puede haber cualquier cantidad de a’s o c’s en el < contexto1 >, por lo que dicho contexto queda como: (b(a + c) + a + c)∗ Similarmente se puede obtener la expresi´on para < contexto2 >, que es (a + c + (a + c)b)∗ , por lo que finalmente la ER del problema es: (b(a + c) + a + c)∗ bb(a + c + (a + c)b)∗ Un importante elemento de metodolog´ıa -que se aplic´o en este ejemplo- consiste en trans- formar los enunciados de lenguajes de manera que sean m´as f´acilmente representables por ER. En particular, los enunciados “negativos”, del tipo “. . . las palabras que no contengan bb” son particularmente dif´ıciles, porque en las ER no hay ning´un operador para representar “lo que no forma parte del lenguajes”, sino que los operadores (como la uni´on o la estrella de Kleene) tienden a a˜nadir m´as palabras. En consecuencia, es necesario convertir un enunciado sobre lo que no se permite en otro enunciado sobre lo que s´ı se permite. Por ejemplo, si en un lenguaje las palabras no deben contener la cadena “bb”, ¿qu´e es lo que s´ı pueden contener? Aqu´ı podemos hacer un an´alisis por casos, considerando que podemos tener una b sola, o tambi´en una b seguida de una a. Como hay dos casos, podemos pensar en utilizar el operador “+” para combinar esos casos, y as´ı en adelante. Tambi´en puede ser ´util modificar la forma l´ogica en que se enuncian los lenguajes. Por ejemplo, el enunciado “palabras que si empiezan en 00, terminan en 11”, puede modificarse de la manera siguiente: “palabras que ya sea no empiezan en 00 o bien terminan en 11”, utilizando la conocida equivalencia de l´ogica P ⇒ Q ≡ ¬P ∨ Q. Lo que aqu´ı se gana es que 4 Pues si terminaran en b, esta ´ultima b se juntar´ıa a la bb de la mitad, violando la condici´on del problema.
  • 94. 3.2. EXPRESIONES REGULARES 85 hacemos evidente la estructura de casos, que se puede resolver usando el operador “+” de las ER. Por supuesto, adem´as apareci´o en este enunciado una parte expresada negativamente, “. . . no empiezan en 00”, pero ´esta es f´acil de transformar en un enunciado positivo, como por ejemplo “. . . son la palabra vac´ıa, o bien empiezan en 1, o bien empiezan en 01”, el cual tambi´en se resuelve f´acilmente por casos. Ejemplo.- Obtener una ER que represente el lenguaje en {a, b} tal que si una palabra contiene la subcadena aa, entonces no debe contener bb. Soluci´on: Transformando l´ogicamente el enunciado, representamos la condici´on “contiene la subcadena aa” por el s´ımbolo Caa, y la condici´on “no contiene bb” por ¬Cbb. Entonces la condici´on del problema es: Caa ⇒ ¬Cbb Por las equivalencias l´ogicas vistas en la secci´on 1.2, esta condici´on es equivalente a: ¬Caa ∨ ¬Cbb Es decir que las palabras no contienen aa o bien no contienen bb. Esto corresponde a la estructura: < sin aa > + < sin bb > Vamos a resolver la primera parte, siendo la otra enteramente similar. Para que las palabras no contengan aa, pueden contener cualquier secuencia con b, o bien secuencias en que toda a est´e separada de otra a por al menos una b. Como la cantidad de a’s es cualquiera, necesariamente debemos hacer intervenir una estrella de Kleene, como en la estructura siguiente: . . . (b + . . . a . . .)∗ . . . Una idea para precisar m´as esta estructura ser´ıa pensar que antes y despu´es de la a debe haber una b, como en la expresi´on (b + bab)∗ . Aunque esta ER es correcta, no es completa, pues hay palabras como ab que no son representadas por ella. Entonces pensaremos que despu´es de la a est´e la b que la separa de otras eventuales a’s. La estructura as´ı se precisa: 5 . . . (b + ab)∗ . . . Ahora bien, pensando en qu´e puede aparecer al inicio y al final de una palabra, la subex- presi´on (b + ab)∗ por s´ı misma es ya capaz de representar palabras que comiencen ya sea con a o con b, por lo que podemos omitir el contexto del lado izquierdo. En cambio, (b + ab)∗ no 5 Los “contextos” aqu´ı fueron representados simplemente con “. . .”. El uso de puntos suspensivos o de nombres para representar un contexto es simplemente cuesti´on de conveniencia en cada caso.
  • 95. 86 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES es capaz de representar palabras terminadas en a, como ba. Habr´ıa que a˜nadir esta posibili- dad. Pero si hacemos que el contexto derecho sea a, vamos a excluir palabras tales como ab. Entonces el contexto derecho puede ser a o b, que se resuelve con la expresi´on a + b, dando como resultado: (b + ab)∗ (a + b) Pero a´un esta expresi´on presenta un problema, que es el no poder representar a la palabra vac´ıa. Esto se puede resolver de dos maneras: la menos elegante, que es simplemente a˜nadir “+∧” a la ER, quedando como (b+ab)∗ (a+b)+∧, o una soluci´on m´as elegante que consiste en observar que la expresi´on (b + ab)∗ ya representaba palabras terminadas en b, por lo que en realidad el contexto derecho consistir´ıa en agregar una a o nada en absoluto, quedando la ER como (b + ab)∗ (a + ∧). Este es un resultado correcto y completo. Dejamos pendiente la soluci´on del contexto < sin bb >. En la secci´on de ejercicios de este cap´ıtulo se proponen muchos problemas de dise˜no de ER. Es importante emprender estos ejercicios siguiendo los elementos de metodolog´ıa que hemos presentado (adaptar expresiones conocidas, dise˜nar estructuras con “contextos”, transformar los enunciados), y no dej´andose llevar por la primera “corazonada genial”, que generalmente nos lleva a expresiones err´oneas, principalmente por incompletez. 3.2.3. Equivalencias de Expresiones Regulares Las expresiones regulares no representan en forma ´unica a un lenguaje -esto es, la funci´on L : ER →2Σ∗ descrita arriba no es inyectiva. Esto quiere decir que puede haber varias ER para un mismo lenguaje, lo cual desde luego no es conveniente, pues al ver dos ER distintas no podemos a´un estar seguros de que representan dos lenguajes distintos. Por ejemplo, las ER (a + b)∗ y (a∗ b∗ )∗ representan el mismo lenguaje. Peor a´un, a diferencia de los AFD que vimos en el cap´ıtulo 2, no existen procedimientos algor´ıtmicos para comparar directamente dos ER; la comparaci´on tiene que hacerse pasando por una conversi´on a AFD que veremos m´as adelante. Sin embargo, en algunos casos resulta ´util aplicar ecuaciones de equivalencia entre las ER, que son expresiones de la forma ER1 = ER2, cuyo significado es que el lenguaje de ER1 es el mismo que el de ER2 (contienen las mismas palabras). Por ejemplo, la equivalencia R + S = S + R quiere decir que la suma de expresiones regulares es conmutativa, por lo que si tenemos dos ER espec´ıficas, como a∗ y b∗ ab, entonces la ER a∗ +b∗ ab ser´a equivalente a la ER b∗ ab+a∗ , y ambas representar´an las mismas palabras. La equivalencia R + S = S + R puede ser muy obvia, pues se basa directamente en la conmutatividad de la uni´on de conjuntos, pero hay otras como (R∗ S)∗ = ∧ + (R + S)∗ S que son mucho menos intuitivas.
  • 96. 3.2. EXPRESIONES REGULARES 87 A continuaci´on damos una lista de las principales equivalencias de ER, clasificadas en 9 grupos: 1. R + S = S + R, (R + S) + T = R + (S + T), R + Φ = Φ + R = R, R + R = R 2. R • ∧ = ∧ • R = R, R • Φ = Φ • R = Φ, (R • S) • T = R • (S • T) 3. R • (S + T) = R • S + R • T, (S + T) • R = S • R + T • R 4. R∗ = R∗ • R∗ = (R∗ )∗ = (∧ + R)∗ , Φ∗ = ∧∗ = ε 5. R∗ = ∧ + RR∗ 6. (R + S)∗ = (R∗ + S∗ )∗ = (R∗ S∗ )∗ = (R∗ S)∗ R∗ = R∗ (SR∗ )∗ = R∗ + S∗ 7. R∗ R = RR∗ , R(SR)∗ = (RS)∗ R 8. (R∗ S)∗ = ∧ + (R + S)∗ S, (RS∗ )∗ = ∧ + R(R + S)∗ 9. R = SR + T ssi R = S∗ T, R = RS + T ssi R = TS∗ La prueba de varias de estas equivalencias sigue un mismo esquema, que vamos a ejem- plificar demostrando R(SR)∗ = (RS)∗ R (grupo 7). Esta equivalencia se puede probar en dos partes: R(SR)∗ ⊆ (RS)∗ R y (RS)∗ R ⊆ R(SR)∗ . 1a. parte.- Sea x ∈ R(SR)∗ . Entonces x es de la forma x = r0s1r1s2r2 . . . snrn. Pero esta misma palabra puede agruparse de otra manera: x = (r0s1)(r1s2) . . . (rn−1sn)rn. Por lo tanto, x ∈ (RS)∗ R. 2a. parte.- Se prueba similarmente. QED. Las equivalencias de estos 9 grupos pueden usarse para verificar que dos ER denotan el mismo lenguaje. La t´ecnica a usar para verificar que P = Q, donde P, Q ∈ ER, es formar una serie de equivalencias P = R1 = R2 = . . . = Rn = Q, usando las equivalencias dadas arriba para hacer reemplazamientos. Ejemplo: Verificar que las ER (ab + a)∗ a y a(ba + a)∗ son equivalentes, usando las equiv- alencias presentadas arriba. Soluci´on: (ab + a)∗ a = (a + ab)∗ a -por (1); = (a∗ ab)∗ a∗ a -por (6); = ([a∗ a]b)∗ [a∗ a] -agrupamos t´erminos;
  • 97. 88 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES ∗Σ ∗Σ2 Figura 3.1: Representaciones de lenguajes = [a∗ a](b[a∗ a])∗ -por (7); = aa∗ (baa∗ )∗ - aplicando (7) a los t´erminos entre corchetes; = [a][a∗ (baa∗ )∗ ] -agrupando; = a(a + ba)∗ - por (6); = a(ba + a)∗ - por (1). El uso de estas equivalencias para verificar que dos ER denotan el mismo lenguaje en general no es muy pr´actico, pues en muchos casos es dif´ıcil ver intuitivamente qu´e equivalencia conviene aplicar, adem´as de que hay el riesgo de que al aplicarla nos alejemos de la soluci´on en vez de acercarnos a ella. Para empeorar la situaci´on, no hay metodolog´ıas generales que nos ayuden a dise˜nar estas pruebas. Es por esto que normalmente probaremos la equivalencia de dos ER usando el procedimiento de conversi´on a AFD que veremos en la secci´on 3.4. 3.3. L´ımites de las representaciones textuales Nos podemos preguntar qu´e tantos lenguajes se pueden representar con las ER. En otras secciones mostraremos que dichos lenguajes coinciden con los que pueden ser aceptados por alg´un aut´omata finito. Por lo pronto, en esta secci´on vamos a establecer un l´ımite que existe no s´olamente para las ER, sino para cualquier forma de representar lenguajes mediante texto. En la figura 3.1 se ilustra el mapeo que pretendemos entre los lenguajes, que son elementos del conjunto 2Σ∗ , y las cadenas de caracteres que los representan, que son elementos de Σ∗ . Desde luego, quisi´eramos que una cadena de caracteres no pudiera representar a m´as de un lenguaje, pues de otro modo no sabr´ıamos a cu´al de ellos representa. En cambio, es aceptable que un lenguaje tenga varios representantes. Por ejemplo, el conjunto de todas las palabras formadas por a’s y b’s, que es el conjunto infinito {ε, a, b, ab, ba, aaa, aab, . . .}, puede ser representado mediante la cadena de caracteres “{a, b}∗”, que es una palabra formada por caracteres del alfabeto {“a”,“b”,“{”,“}”,“∗”, “,” }. Como vemos en este ejemplo, una cadena de caracteres de 6 caracteres puede representar
  • 98. 3.4. EQUIVALENCIA DE EXPRESIONES REGULARES Y AUT ´OMATAS FINITOS 89 todo un lenguaje infinito. En vista del ´exito obtenido, quisi´eramos tener, para cada lenguaje posible, ya sea fini- to o infinito, un representante que fuera una de estas cadenas finitas de caracteres. Existe sin embargo un problema: para poder hacer lo anterior se necesitar´ıa que hubiera tantos representantes (cadenas de caracteres) como lenguajes representados. Ahora bien, aunque parezca sorprendente, ¡hay m´as lenguajes posibles que cadenas de caracteres para represen- tarlos! Esto se debe a que la cantidad de lenguajes posibles es incontable, mientras que las representaciones de dichos lenguajes son contables. Vamos a probar el siguiente Teorema.- El conjunto de los lenguajes en un alfabeto Σ finito es incontable. Nos apoyaremos en el c´elebre teorema de Cantor, que establece que el conjunto potencia de los n´umeros naturales, 2N , es incontable. En efecto, observamos que el conjunto de todos los lenguajes, que es 2Σ∗ , tiene el mismo tama˜no que 2N , pues N y Σ∗ son del mismo tama˜no, que es lo mismo que decir que Σ∗ es contable, lo cual es sencillo de probar 6 As´ı podemos concluir que, como 2N es incontable, 2Σ∗ tambi´en lo es. QED. Se sabe que los conjuntos incontables son propiamente m´as “grandes” que los contables, en el sentido de que un conjunto contable no puede ser puesto en correspondencia uno a uno con uno incontable, pero s´ı con subconjuntos de ´este. As´ı resulta que la cantidad de lenguajes a representar es mayor que la cantidad de cadenas de caracteres que pudieran ser representaciones de aquellos. La conclusi´on es que no todos los lenguajes pueden ser representados en forma finita. 3.4. Equivalencia de expresiones regulares y aut´omatas finitos A´un cuando por varios ejemplos hemos visto que lenguajes representados por expre- siones regulares son aceptados por aut´omatas finitos, no hemos probado que para cualquier expresi´on regular exista un aut´omata finito equivalente, y viceversa. Esto se establece en el siguiente Teorema de Kleene.- Un lenguaje es regular si y s´olo si es aceptado por alg´un aut´omata finito. Vamos a presentar una prueba de esta afirmaci´on, no tanto por el inter´es matem´atico que tiene, sino porque nos brinda procedimientos est´andar extremadamente ´utiles para transfor- mar una expresi´on regular en aut´omata finito y viceversa. 6 La prueba es uno de los ejercicios al final de esta secci´on.
  • 99. 90 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES b (ab) qq0 1 * a Figura 3.2: Una gr´afica de transici´on 3.4.1. Conversi´on de ER a AF La prueba de que si un lenguaje es regular entonces es aceptado por un AF consiste en dar un procedimiento para transformar en forma sistem´atica una expresi´on regular en un aut´omata finito que acepte su lenguaje. Dicho procedimiento se describe a continuaci´on: La idea es hacer una transformaci´on gradual que vaya conviertiendo la ER en AF. Para hacer la transformaci´on gradual de ER a AFN se requiere utilizar alguna repre- sentaci´on de los lenguajes regulares que sea intermedia entre las ER y los AFN. Una posible soluci´on es el uso de las gr´aficas de transici´on. Estas ´ultimas son esencial- mente AFN en que las etiquetas de las flechas tienen expresiones regulares, en lugar de palabras. Las gr´aficas de transici´on (GT) son por lo tanto qu´ıntuplos (K, Σ, ∆, s, F) en donde ∆ ∈ K × ER × K. En la figura 3.2 se ilustra un ejemplo de GT. En este ejemplo en particular es f´acil ver que debe aceptar palabras que tienen primero una sucesi´on de a’s, luego repeticiones de ab, y finalmente repeticiones de b’s. Esta GT se representar´ıa formalmente como el qu´ıntuplo: ({q0, q1}, {a, b}, {(q0, a, q0), (q0, (ab)∗ , q1), (q1, b, q1)}, q0, {q1}) Los AFN son un subconjunto propio de las GT, puesto que las palabras en las etiquetas de un AFN pueden ser vistas como expresiones regulares que se representan a s´ı mismas. Ahora procederemos a describir el procedimiento de transformaci´on de ER a AFN. A partir de una ER es trivial obtener una GT que acepte el mismo lenguaje. En efecto, sea R una ER; entonces, si G1 = ({q0, q1}, Σ, {(q0, R, q1)}, q0, {q1}) entonces L(G) = L(R). Por ejemplo, la GT asociada a la ER (a + ba)∗ bb se ilustra en la figura 3.3(a). Lo que falta por hacer es transformar gradualmente G1 en G2, luego en G3, etc., hasta llegar a un Gn tal que en las flechas no haya m´as que caracteres solos (o bien la palabra
  • 100. 3.4. EQUIVALENCIA DE EXPRESIONES REGULARES Y AUT ´OMATAS FINITOS 91 Cuadro 3.1: Eliminaci´on de operadores para pasar de ER a AF Reemplazar Por   ¡   ¡   ¡   ¡   i j   k ¡ εεεε R vac´ıa). En efecto, Gn ∈AFN. Este es un proceso de eliminaci´on gradual de los operadores de las ER. Para eliminar los operadores de las ER en Gi, aplicamos reemplazamientos de ciertas transiciones por otras, hasta que no sea posible aplicar ninguno de estos reemplazamientos. Las transformaciones elementales se ilustran en la Tabla 3.1. Ejemplo.- Dada la ER (a + ba)∗ bb, obtener el AFN que acepta el lenguaje de dicha ER. Soluci´on: Aplicamos una sucesi´on de transformaciones, ilustradas en las figuras 3.3(a)-(d). La equivalencia de G1, G2, . . . , Gn se asegura por el hecho de que cada una de las transformaciones preserva la equivalencia. 3.4.2. Conversi´on de AF a ER La prueba de la parte “si” del teorema consiste en dar un procedimiento para trans- formar en forma sistem´atica un aut´omata finito en una expresi´on regular equivalente. Un procedimiento para hacerlo consiste en ir eliminando gradualmente nodos de una GT, que inicialmente es el AFN que se quiere transformar, hasta que ´unicamente queden un nodo inicial y un nodo final. Dicho procedimiento comprende los siguientes pasos: 1. El primer paso en este procedimiento consiste en a˜nadir al aut´omata finito un nuevo estado inicial i, mientras que el antiguo estado inicial q0 deja de ser inicial, y un nuevo estado final f, mientras que los antiguos estados finales qi ∈ F dejan de ser finales; adem´as se a˜nade una transici´on vac´ıa del nuevo estado inicial al antiguo, (i, ε, q0), y
  • 101. 92 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES q 10q (a+ba) bb * (a) 0q q 1 (a+ba)* bb k (b) 0q q 1km bb a+ba ε ε (c) 0q q 1km bb a ε ε ba (d) Figura 3.3: Transformaci´on ER→AF
  • 102. 3.4. EQUIVALENCIA DE EXPRESIONES REGULARES Y AUT ´OMATAS FINITOS 93 α 1 mγ   1γ   kβ 1β α n p1 qm q1 q pn (a) Nodo a eliminar np q 11 * m 1n *α (β + ... +β ) γ m α (β + ... +β ) γ mk k 1p q1 1 11 *α (β + ... +β ) γk α (β + ... +β ) γ*n 1 k 1 . . . (b) GT sin el nodo eliminado R1 R2 Rn (c) GT tras la eliminaci´on de nodos intermedios Figura 3.4: Eliminaci´on de nodos varias transiciones de los antiguos estados finales al nuevo: {(qi, ε, f)|qi ∈ F}. Esta transformaci´on tiene por objeto que haya un estado inicial al que no llegue ninguna transici´on, y un solo estado final, del que no salga ninguna transici´on. Esta condici´on se requiere para llevar a cabo el siguiente paso. 7 Desde luego, hay muchos aut´omatas que ya cumplen estas condiciones sin necesidad de a˜nadir un nuevo estado inicial o un nuevo estado final. 2. El segundo paso consiste en eliminar nodos intermedios en la GT. Se llama nodo inter- medio a aquel que se encuentra en una trayectoria entre el estado inicial y el final. El procedimiento de eliminaci´on de nodos intermedios es directo. La idea es que al suprim- ir el nodo en cuesti´on, no se alteren las cadenas que hay que consumir para pasar de uno a otro de los nodos vecinos. En otras palabras, al suprimir dicho nodo, se deben reemplazar las transiciones que antes tomaban ese nodo como punto intermedio para ir de un nodo vecino a otro, por otras transiciones que vayan del nodo vecino origen al nodo vecino destino, pero ahora sin pasar por el nodo eliminado. Para comprender cabalmente el procedimiento, hay que seguir el ejemplo dado m´as adelante. En la figura 3.4(a) se representa un nodo q intermedio que se quiere eliminar, y los nodos entre los que se encuentra. Este esquema se adapta a todos los casos que pueden presentarse. En dicha figura, αi,βi, γi son expresiones regulares. Para eliminar el nodo q, reemplazamos la parte de la GT descrita en la figura 3.4(a) por el subgrafo representado en la figura 7 Mas adelante se presenta un ejemplo de cada una de las operaciones involucradas en este procedimiento.
  • 103. 94 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES 3.4(b). Los nodos intermedios se pueden eliminar en cualquier orden. 3. Cuando despu´es de aplicar repetidamente el paso 2 ya no sea posible hacerlo, tendremos una GT de la forma de la figura 3.4(c). Esta GT se puede transformar en otra con una sola transici´on, fusionando todas las transiciones en una sola, con etiqueta R1 + R2 + . . . + Rn. Esta etiqueta ser´a la ER buscada. Ejemplo.- Obtener una ER para el AFD de la figura siguiente: Paso 1.- A˜nadir un nuevo estado inicial y uno final ε ε ε Paso 2.- Eliminaci´on de nodos intermedios. Eliminamos primero el nodo q1. Para ello, consideramos qu´e trayectorias o “rutas” pasan por el nodo a eliminar. Por ejemplo, en la figura de arriba vemos solamente una trayectoria que pasa por q1, la cual va de q0 a f. Ahora nos proponemos eliminar el nodo q1, pero sin modificar “lo que se gasta” para pasar de q0 a f. Es f´acil ver que para pasar de q0 a f se gasta primero una a y luego alg´un n´umero de repeticiones de a o b (para llegar de q1 a f no se gasta nada). Esto corresponde a la ER a(a + b)∗ , que ser´a la etiqueta de la nueva “ruta directa” de q0 a f, sin pasar, por q1, como se aprecia en la siguiente figura: ε ε Paso 3.- Despu´es eliminamos el nodo q2:
  • 104. 3.5. GRAM ´ATICAS REGULARES 95 0qi ε f a(a+b) bb * * * bb a Paso 4.- Eliminamos q0: i f (bb a) a(a+b) (bb a) bb * * * * * * Paso 5.- Finalmente fusionamos las expresiones que est´an en paralelo: i f (bb a) a(a+b) +(bb a) bb* * * * * * Por lo que finalmente la ER buscada es (bb∗ a)∗ a(a + b)∗ + (bb∗ a)∗ bb∗ . La correcci´on de cada paso de transformaci´on se desprende del hecho de que tanto la eliminaci´on de nodos como la fusi´on de transiciones que se hace al final, preservan ambos la igualdad del lenguaje aceptado. Con este resultado establecemos la completa equivalencia entre las ER y los aut´omatas finitos (no deterministas). Al establecer la equivalencia de los AFN con las ER, autom´ati- camente queda establecida la equivalencia entre las ER y los AFD. Este es un resultado de gran trascendencia tanto te´orica como pr´actica, pues por una parte muestra la importancia de la clase de los lenguajes regulares, y por otra ofrece un grupo de herramientas pr´acticas, tales como la minimizaci´on de AFD, que pueden ser puestas al servicio de las ER. 3.5. Gram´aticas regulares En esta secci´on veremos otra manera de representar los lenguajes regulares, adem´as de las Expresiones Regulares que ya vimos.
  • 105. 96 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES 3.5.1. Gram´aticas formales La representaci´on de los lenguajes regulares que aqu´ı estudiaremos se fundamenta en la noci´on de gram´atica formal. Intuitivamente, una gram´atica es un conjunto de reglas para formar correctamente las frases de un lenguaje; as´ı tenemos la gram´atica del espa˜nol, del franc´es, etc. La formalizaci´on que presentaremos de la noci´on de gram´atica es debida a N. Chomsky [4], y est´a basada en las llamadas reglas gramaticales. Una regla es una expresi´on de la forma α → β, en donde tanto α como β son cadenas de s´ımbolos en donde pueden aparecer tanto elementos del alfabeto Σ como unos nuevos s´ımbolos, llamados variables. Los s´ımbolos que no son variables son constantes. 8 Por ejemplo, una posible regla gramatical es X → aX. La aplicaci´on de una regla α → β a una palabra uαv produce la palabra uβv. En consecuencia, las reglas de una gram´atica pueden ser vistas como reglas de reemplazo. Por ejemplo, si tenemos una cadena de s´ımbolos bbXa, le podemos aplicar la regla X → aX, dando como resultado la nueva cadena bbaXa. 3.5.2. Gram´aticas regulares Nosotros nos vamos a interesar por el momento en las gram´aticas cuyas reglas son de la forma A → aB o bien A → a, donde A y B son variables, y a es un caracter terminal. A estas gram´aticas se les llama regulares. Ejemplo.- Sea una gram´atica con las siguientes reglas: 1. S → aA 2. S → bA 3. A → aB 4. A → bB 5. A → a 6. B → aA 7. B → bA La idea para aplicar una gram´atica es que se parte de una variable, llamada s´ımbolo inicial, y se aplican repetidamente las reglas gramaticales, hasta que ya no haya variables en la palabra. En ese momento se dice que la palabra resultante es generada por la gram´atica, o en forma equivalente, que la palabra resultante es parte del lenguaje de esa gram´atica. 8 En la terminolog´ıa de los compiladores, se les llama “terminales” a los elementos de Σ, y “no terminales” a las variables.
  • 106. 3.5. GRAM ´ATICAS REGULARES 97 Por ejemplo, en la gram´atica que acabamos de presentar, si consideramos que las variables son S (que ser´a el s´ımbolo inicial), A y B, y las constantes a y b, partiendo de S podemos producir bA (por la segunda regla), luego de bA podemos pasar a ba (por la quinta regla). Como ba tiene s´olo constantes, podemos concluir que la palabra ba es parte del lenguaje generado por la gram´atica dada. De hecho el lenguaje generado por esta gram´atica es el de las palabras en {a, b} de longitud par terminadas en a. 9 Formalizamos estas nociones con las siguientes definiciones: Definici´on.- Una gram´atica regular es un cu´adruplo (V, Σ, R, S) en donde: V es un alfabeto de variables, Σ es un alfabeto de constantes, R, el conjunto de reglas, es un subconjunto finito de V × (ΣV ∪ Σ). S, el s´ımbolo inicial, es un elemento de V . Por ejemplo, la gram´atica que presentamos arriba se representar´ıa formalmente como: ({S, A, B}, {a, b}, {(S, aA), (S, bA), (A, aB), (A, bB), (A, a), (B, aA), (B, bA)}, S) Usualmente las reglas no se escriben como pares ordenados (A, aB), como lo requerir´ıa la definici´on anterior, sino como A → aB; esto es simplemente cuesti´on de facilidad de notaci´on. La aplicaci´on de una gram´atica se formaliza con las siguientes nociones: Una cadena uXv deriva en un paso una cadena uαv, escrito como uXv ⇒ uαv, si hay una regla X → α ∈ R en la gram´atica. Una cadena w ∈ Σ∗ (esto es, formada exclusivamente por constantes) es derivable a partir de una gram´atica G si existe una secuencia de pasos de derivaci´on S ⇒ α1 ⇒ α2 ⇒ . . . ⇒ w. A una secuencia de pasos de derivaci´on le llamamos simplemente derivaci´on. Dicho de otra manera, una palabra w ∈ Σ∗ es derivable a partir de G ssi S ∗ ⇒ w, donde ∗ ⇒ denota la cerradura reflexiva y transitiva de ⇒. Definici´on.- El lenguaje generado por una gram´atica G, L(G), es igual al conjunto de las palabras derivables a partir de su s´ımbolo inicial. Esto es, L(G) = {w ∈ Σ∗ |S ∗ ⇒ w}. 9 M´as adelante veremos c´omo probar rigurosamente que una gram´atica efectivamente corresponde a un lenguaje dado.
  • 107. 98 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES Frecuentemente es f´acil mostrar que una palabra dada w es derivable a partir del s´ımbolo inicial S; por ejemplo, en la gram´atica presentada arriba, se puede mostrar que S ⇒ . . . ⇒ bababa (esto es, que la palabra bababa puede ser derivada a partir del s´ımbolo inicial S, por lo que bababa ∈ L(G). Dejamos este ejemplo como ejercicio (ver secci´on de ejercicios). Ejemplo.- Proponer una gram´atica que genere el lenguaje de las palabras en {a, b} que contienen la subcadena bb, como abb, ababba, etc. Vamos a utilizar las variables de una manera similar a como se utilizaban en los AF los estados, esto es, como memorias para “recordar” situaciones. As´ı tendremos las siguientes variables: A, que recuerda que a´un no se produce ninguna b. B, que recuerda que se produjo una b. C, que recuerda que ya se produjeron las dos b’s. Ahora podemos proponer reglas, pregunt´andonos a qu´e situaci´on se llega al producir una a o b. Por ejemplo, a partir de A, si se produce una a se debe llegar a la misma A, pero si llega una b se llegar´a a la variable B. Con estas ideas se proponen las siguientes reglas: 1. A → aA 2. A → bB 3. B → aA 4. B → bC 5. C → aC 6. C → bC Finalmente, para terminar la producci´on de una palabra hecha solamente de constantes es necesaria al menos una regla que no produzca variables en su lado derecho. Tal regla no se encuentra a´un en la gram´atica dada. Como las palabras correctas tienen bb, pensamos que una regla adicional podr´ıa ser C → a y tambi´en C → b. En efecto, con tales reglas podemos producir, por ejemplo, la palabra abba, mediante la derivaci´on siguiente: A ⇒ aA ⇒ abB ⇒ abbC ⇒ abba Sin embargo, tambi´en podemos verificar que la palabra abb, que pertenece al lenguaje, no puede producirse con las reglas dadas. Hace falta a´un otra regla, B → b, con la que se completa nuestra gram´atica.
  • 108. 3.5. GRAM ´ATICAS REGULARES 99 Al dise˜nar gram´aticas regulares, podemos incurrir en los mismos errores que en los AF, es decir, que sean incorrectas (producen palabras que no deber´ıan) o bien incompletas (no pueden generar palabras que pertenecen al lenguaje), o bien ambas cosas a la vez. No vamos a examinar m´etodos particulares de dise˜no de gram´aticas regulares; en vez de ello mejor vamos a examinar m´etodos por los que es muy simple convertir las gram´aticas regulares a AF y viceversa. 3.5.3. Aut´omatas finitos y gram´aticas regulares De manera similar a como hicimos en la secci´on anterior, aqu´ı vamos a establecer la equivalencia entre las gram´aticas regulares y los lenguajes regulares -y por ende los aut´omatas finitos. Este resultado es establecido por el siguiente Teorema.- La clase de los lenguajes generados por alguna gram´atica regular es exacta- mente la de los lenguajes regulares. La prueba de este teorema consiste en proponer un procedimiento para, a partir de una gram´atica dada, construir un aut´omata finito, y viceversa. Dicho procedimiento es directo, y consiste en asociar a los s´ımbolos no terminales de la gram´atica (las variables) los estados de un aut´omata. As´ı, para cada regla A → bC en la gram´atica tenemos una transici´on (A, b, C) en el aut´omata. Sin embargo, queda pendiente el caso de las reglas A → b. Para estos casos, se tienen transiciones (A, b, Z), donde Z es un nuevo estado para el que no hay un no terminal asociado; Z es el ´unico estado final del aut´omata. Ejemplo.- Obtener un aut´omata finito para la gram´atica regular G siguiente: 1. S → aA 2. S → bA 3. A → aB 4. A → bB 5. A → a 6. B → aA 7. B → bA
  • 109. 100 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES Z BAS a a a b bb a Figura 3.5: Aut´omata obtenido de la gram´atica q 10q b 2q q b a, b a a a b 3 Figura 3.6: AFD que acepta palabras que no contienen 3 a’s seguidas Dicho aut´omata aparece en la figura 3.5. Similarmente, es simple obtener, a partir de un AFD (K, Σ, δ, s, F), la gram´atica regular correspondiente. Para cada transici´on de la forma ((p, σ), q) ∈ δ, habr´a en la gram´atica una regla Xp → σXq, donde Xi es la variable en la gram´atica que corresponde al estado i del AFD. Queda, sin embargo, pendiente c´omo obtener las reglas de la forma Xp → σ, que son las que permiten terminar una derivaci´on. Nos damos cuenta de que la aplicaci´on de este tipo de reglas debe corresponder al consumo del ´ultimo caracter de una palabra aceptada en el AFD. Ahora bien, al terminar una palabra aceptada en un AFD, necesariamente nos encontraremos en un estado final. De ah´ı conclu´ımos que hay que incorporar a la gram´atica, por cada transici´on ((p, σ), q), donde q ∈ F, una regla adicional Xp → σ, adem´as de la regla Xp → σXq que se mencion´o anteriormente. Ejemplo.- Para el AFD de la figura 3.6, la gram´atica regular correspondiente contiene las reglas: 1.- Q0 → aQ1 8.- Q3 → bQ3 2.- Q0 → bQ0 9.- Q0 → a 3.- Q1 → aQ2 10.- Q0 → b 4.- Q1 → bQ0 11.- Q1 → a 5.- Q2 → aQ3 12.- Q1 → b 6.- Q2 → bQ0 13.- Q2 → b 7.- Q3 → aQ3
  • 110. 3.6. LIMITACIONES DE LOS LENGUAJES REGULARES 101 N´otese que en este ejemplo el AFD acepta la palabra vac´ıa, mientras que la GR no es capaz de generarla. De hecho ninguna GR puede generar ε. En estos casos nos tenemos que contentar con generar un lenguaje igual al aceptado por el AFD excepto por la palabra vac´ıa. 3.6. Limitaciones de los lenguajes regulares Los AF est´an limitados a los estados de que disponen como ´unico medio para “recordar” la serie de s´ımbolos recibidos hasta un momento dado. Puesto de otra manera, debemos considerar que, en un AF, la ´unica traza de los s´ımbolos recibidos es el estado en que se encuentra. Por lo mismo, varias secuencias distintas de caracteres que llevan a un mismo estado son consideradas como indistinguibles. Por ejemplo, para el AFD de la figura 2.4, las secuencias de caracteres bab y bbbbb son indistinguibles, pues ambas llevan al estado q2. Esta limitaci´on de los AF los hace finalmente incapaces de distinguir las palabras aceptables de las no aceptables en ciertos lenguajes, m´as complicados que los lenguajes regulares. Por ejemplo, para el lenguaje {an bn } no es posible construir un aut´omata finito que lo acepte, ni representarlo por una expresi´on regular o gram´atica regular. En efecto, supongamos que un AFD est´a recorriendo una palabra an bn , entonces al terminar el grupo de a’s el aut´omata debe recordar cu´antas encontr´o, para poder comparar con el n´umero de b’s. Ahora bien, como la cantidad de a’s que puede haber en la primera mitad de la palabra es arbitraria, dicha cantidad no puede recordarse con una cantidad de memoria fija, como es la de los aut´omatas finitos. 3.6.1. El teorema de bombeo Formalmente, vamos a establecer un teorema que precisa cu´al es la limitaci´on de los aut´omatas finitos. Teorema.- Si L es un lenguaje regular infinito, entonces existen cadenas x, y, z tales que y = ε, y xyn z ∈ L, para alg´un n ≥ 0. (Teorema de bombeo). Lo que este resultado establece es que, suponiendo que cierto lenguaje es regular, en- tonces forzosamente dicho lenguaje debe contener palabras en que una subcadena se repite cualquier n´umero de veces. Es decir, hay palabras del lenguaje en que podemos insertar repetidamente (“bombear”) una subcadena (y en el teorema) sin que el aut´omata se d´e cuen- ta. Esta situaci´on permite hacer pruebas por contradicci´on de que un lenguaje dado no es regular. Pero veamos en primer lugar la prueba del teorema de bombeo. Supongamos que L es un lenguaje regular. Entonces existe un aut´omata M que lo acepta. Sea m el n´umero de estados de M. Ahora supongamos una palabra en L, w = σ1σ2 . . . σn, σi ∈ Σ, donde n ≥ m. Como w debe ser aceptada, debe hacer un c´alculo de la forma:
  • 111. 102 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES [[q1, σ1σ2 . . . σn]] M [[q2, σ2 . . . σn]] ∗ M [[qn+1, ε]] Como M tiene solamente m estados, y el c´alculo tiene longitud n + 1, por el principio de correspondencia debe haber algunos estados que se repitan en el c´alculo, es decir, qi = qj, para 0 ≤ i < j ≤ n + 1. Entonces podemos detallar m´as el calculo anterior, el cual tiene la forma: [[q1, σ1σ2 . . . σi . . . σn]] ∗ M [[qi, σi . . . σn]] ∗ M [[qj, σj . . . σn]] ∗ M [[qn+1, ε]] Como M regresa al mismo estado, la parte de la entrada que se consumi´o entre qi y qj, que es σi . . . σj−1 puede ser eliminada, y por lo tanto la palabra σ1 . . . σi−1σj . . . σn ser´a aceptada de todas maneras, mediante el c´alculo siguiente: [[q1, σ1 . . . σi−1σj . . . σn]] ∗ M [[qj, σj . . . σn]] ∗ M [[qn+1, ε]] De igual manera, la subcadena σi . . . σj−1 puede ser insertada cualquier n´umero de veces; entonces el aut´omata aceptar´a las palabras de la forma: σ1σ2 . . . σi−1(σi . . . σj−1)k σj . . . σn Entonces, haciendo x = σ1σ2 . . . σi−1, y = σi . . . σj−1 y z = σj . . . σn tenemos el teorema de bombeo. Esto termina la prueba. QED. Ejemplo.- Como un ejemplo de la aplicaci´on de este teorema, probaremos que el lenguaje {an bn } no es regular. En efecto, supongamos que fuera regular. Entonces, por el teorema de bombeo, debe haber palabras de la forma xyz, a partir de una cierta longitud, en que la parte y puede repetirse cuantas veces sea. Existen 3 posibilidades: 1. Que y no contenga caracteres distintos a “a”, es decir, y = aa . . . a. En este caso, al repetir varias veces y, habr´a m´as a’s que b’s y la palabra no tendr´a la forma deseada. Es decir, suponiendo que {an bn } es regular hemos llegado a la conclusi´on de que contiene palabras con m´as a’s que b’s, lo cual es una contradicci´on. 2. Que y no contenga caracteres distintos de b. Este caso es similar al caso (1). 3. Que y contenga a’s y b’s, es decir, y = aa . . . abb . . . b. Pero en este caso, al repetirse y, las a’s y b’s quedar´an en desorden en la palabra, la cual no tendr´a la forma an bn . Tambi´en en este caso hay contradicci´on.
  • 112. 3.7. EJERCICIOS 103 Por lo tanto el suponer que {an bn } es regular nos lleva a contradicci´on. Se concluye que {an bn } no es regular. Es muy importante notar que para las pruebas por contradicci´on usando el teorema de bombeo hay que explorar exhaustivamente todas las posibles maneras de dividir la palabra w en xyz, y encontrar contradicci´on en cada posible divisi´on. Con una sola divisi´on posible en que no se encuentre una contradicci´on, la prueba fracasa. Al fracasar la prueba, no se puede concluir ni que el lenguaje es regular ni que no lo es; simplemente no se llega a ninguna conclusi´on. Otros lenguajes que tampoco son regulares son : {ww}, que es el lenguaje cuyas palabras tienen dos mitades iguales, {wwR } , que es el lenguaje cuyas palabras tienen dos mitades sim´etricas 10 ; el lenguaje de las palabras pal´ındromas, que se leen igual al derecho y al rev´es, como por ejemplo ANITALAVALATINA, 11 el lenguaje de los par´entesis bien balanceados, como ()(()), ()()(), ((())), etc. 3.7. Ejercicios 1. Convertir la ER a∗ ab + b(a + ∧) en notaci´on “f´acil” a ER estricta. 2. Encontrar Expresiones Regulares que representen los siguientes lenguajes (se presentan en orden de dificultad creciente): a) Conjunto de palabras en {0, 1} terminadas en 00. b) Conjunto de palabras en {0, 1} que contengan tres ceros consecutivos, como “0001000”, “000001”, etc. c) El lenguaje {101, 1110}. d) El lenguaje {w ∈ Σ∗ |w = an bak , n, k ≥ 0} e) Conjunto de palabras en {a, b} que no contienen dos b consecutivas, como “ababab”, “aaaa”, etc. f ) Conjunto de cadenas en {a, b} que no contienen ni aa ni bb. g) El lenguaje sobre {0, 1} en que las palabras no vac´ıas empiezan o terminan en cero. h) El conjunto de las palabras en {a, b} tales que toda a est´a precedida por alguna b, como por ejemplo “ε”, “b”, “bba”, “babaa”, etc. 12 i) Conjunto de palabras en {0, 1} con a lo m´as un par de ceros consecutivos y a lo m´as un par de unos consecutivos. 10 wR es el reverso de w, es decir, (abaa)R = aaba 11 ¡Atenci´on! este lenguaje no es igual a {wwR } 12 La b que precede a la a no necesita estar inmediatamente antes.
  • 113. 104 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES j) El lenguaje sobre {a, b} en que todas las palabras son de longitud impar. k) Conjunto de cadenas en {a, b} que contienen un n´umero impar de b. l) El lenguaje en {0, 1} en que las palabras contienen m´as de tres ceros. m) El lenguaje en {0, 1} en que las palabras no contienen un cero exactamente (pero pueden contener dos, tres, etc.), como “1111”, “1010”, etc. n) Conjunto de palabras en {0, 1} tales que no hay ning´un par de ceros consecutivos despu´es 13 de un par de unos consecutivos, como “0000110”, “0001000”, etc. ˜n) {w ∈ {a, b, c}∗ | |w| = 3} o) El lenguaje en {0, 1} en que las palabras contienen un n´umero de ceros distinto de 3, por ejemplo “010”, “1111”, “00100”, etc. p) {w ∈ {a, b, c}∗ | w = αabcβ}, donde α y β representan cualquier cadena de caracteres (esto es, las palabras en este lenguaje no deben contener la subcadena abc). q) Lenguaje en {a, b} tal que |w| es par, y adem´as la cantidad de a’s que aparecen en w es par. r) El lenguaje sobre {a, b} en que las palabras contienen la subcadena “baaab” o bien la subcadena “abbba”. s) El lenguaje sobre {a, b} en que las palabras pueden contener pares de a’s con- secutivas, pero no grupos de 3 a’s consecutivas; por ejemplo, “baabaab”, pero no “baaaab”. t) El lenguaje en {a, b} en que toda “b” tiene a su izquierda y a su derecha una “a” (no necesariamente junto), y adem´as el n´umero de “b” es impar. u) Lenguaje de las palabras en {a, b} que no contienen la subcadena “abaab”. 3. Demostrar la siguiente equivalencia por identidades de Expresiones Regulares: (ab∗ )∗ a = a + a(a + b)∗ a 4. Verificar si los siguientes pares de ER son equivalentes, usando equivalencias o bien encontrando un contraejemplo: a) a∗ + b∗ y (a + b)∗ b) a∗ y (aa∗ )∗ a∗ 5. Probar que a∗ + b∗ no es equivalente a (a + b)∗ 6. Convertir la ER (a + ab)∗ aba(a + ba)∗ a AFN. 7. Convertir a ER el AFD siguiente: ({1, 2, 3}, {a, b}, {((1, a), 1), ((1, b), 2), ((2, a), 3), ((2, b), 1), ((3, a), 2), ((3, b), 3)}, 1, {1, 3}). 13 En cualquier posici´on a la derecha
  • 114. 3.7. EJERCICIOS 105 8. Demostrar la siguiente equivalencia (ab∗ )∗ a = a + a(a + b)∗ a por equivalencia de aut´omatas (Primero hay que convertir las ER a AFN, luego estos a AFD, los cuales pueden ser comparados). 9. Encuentre una Expresi´on Regular que represente las palabras en {a, b}∗ que no con- tienen ni la subcadena “aaa” ni “bab” y que son de longitud impar, por el m´etodo siguiente: a) Encontrar un AF que acepte las palabras que contienen “aaa” b) Encontrar un AF que acepte las palabras que contienen “bab” c) Encontrar un AF que acepte las palabras de longitud par d) Combinar los AF de (a),(b) y (c) en un AF que acepta las palabras que contienen “aaa” o “bab” o son de longitud par e) Obtener un AF que acepte el complemento de lo que acepta (d) f ) Convertir el AF de (e) a ER 10. Para la gram´atica de la p´agina 96, mostrar una derivaci´on de la palabra bababa. 11. Comprobar si la ER (a + ∧)(ba)∗ (b + ∧) es equivalente a la GR cuyas reglas son: A → bB, B → aA, A → a, B → b, convirtiendo ambas a AFN, luego a AFD, y comparando. 12. Verificar si es vac´ıa la intersecci´on del lenguaje representado por la ER (∧+b)(a+ab)∗ , con el lenguaje representado por la GR cuyas reglas son: S → aS, S → bT, T → aS, T → bU, U → aU, U → bU, U → a, U → b, utilizando el m´etodo siguiente: Primero se convierten a AFD tanto la ER como la GR. Luego se calcula su intersecci´on, uti- lizando el m´etodo expuesto en el cap´ıtulo precedente. Finalmente, el resultado del paso anterior, que es un AFD, se compara con el AFD ({q0}, {a, b}, {((q0, a), q0), ((q0, b), q0)}, q0, {}), que acepta el lenguaje vac´ıo. 13. Probar las equivalencias: a) R • Φ = Φ • R = Φ, para una ER R b) Φ∗ = ∧ 14. Demostrar que para todo alfabeto Σ, el lenguaje Σ∗ es contable. (Ayuda: Tratar de ordenar las cadenas de Σ∗ de menor a mayor). 15. Suponer que a˜nadimos a las ER un operador, “−” que significa que R1 −R2 representa las palabras representadas por R1 pero no por R2. a) Definir formalmente el significado del operador “−”, usando el mapeo L(ER) como se hizo con los dem´as operadores de las ER. b) Usando este operador, proponer una ER para el lenguaje en {a, b} donde las palabras no contienen la subcadena “abaab” ni la subcadena “bbbab”.
  • 115. 106 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES c) Probar que el operador “−” no aumenta el poder de las ER, en el sentido de que para toda ER con operador “−” hay una ER equivalente sin “−”. 16. Lo mismo del problema anterior, con un operador de intersecci´on, “&” tal que R1&R2 representa las palabras representadas simult´aneamente por R1 y por R2. En este caso proponer una ER para el lenguaje en {a, b} donde las palabras contienen la subcadena “abaab” y un n´umero impar de b’s. 17. Proponer una definici´on formal de configuraci´on, c´alculo y palabra aceptada para las GT. 18. Describir formalmente la construcci´on del aut´omata (K, Σ, ∆, s, F) a partir de la gram´atica regular (V, Σ, R, S). 19. Hacer la prueba de correcci´on de la gram´atica de la p´agina 100. Esto proveer´a una prueba de correcci´on del AFD de la figura 3.6. 20. Usando el teorema de bombeo pruebe que los lenguajes siguientes no son regulares a) {an bm | m > n} (Ayuda: En alg´un momento se puede necesitar considerar las palabras de la forma an bn+1 ). b) {an bn+m cm }. c) {an bm | |n − m| ≤ 3} d) {a, b}∗ − {an bn } 21. Pruebe que los siguientes lenguajes son / no son regulares: a) A = {w ∈ {a, b}∗ | |w| ≥ 7} b) {an bn } ∩ A c) {w = an bn } (Ayuda: use los m´etodos para combinar AFN’s) d) {an bn | n ≤ 7} 22. Sean dos lenguajes, LA y LB tales que LA es subconjunto de LB. a) Si LA es regular, ¿tambi´en lo ser´a necesariamente LB? (Probar) b) Si LB es regular, ¿tambi´en lo ser´a necesariamente LA? (Probar) 23. Sean dos lenguajes no regulares, LA y LB. a) ¿Su uni´on podr´ıa eventualmente ser regular? (Ayuda: considere dos lenguajes complementarios). b) ¿Su intersecci´on podr´ıa eventualmente ser regular? (Ayuda: considere intersec- ciones finitas). c) ¿Su concatenaci´on podr´ıa ser regular? (Ayuda: tomar {an bm |n ≥ m} como LA, y buscar un LB “adecuado”).
  • 116. 3.7. EJERCICIOS 107 24. Sup´ongase un tipo de gram´aticas que llamaremos “semirregulares”, por asemejarse a las gram´aticas regulares, en que las reglas son de alguna de las siguientes formas: a) A → σB b) A → Bσ c) A → σ donde σ es un terminal, y A y B son no terminales. ¿Ser´an equivalentes a las gram´aticas regulares? Pruebe su respuesta. 25. Suponga las Expresiones Regulares con Salida (ERS), que son como las ER, pero tienen asociada una salida a la entrada que representan. Se tiene la siguiente sintaxis: ER/S significa que cuando se recibe una palabra representada por ER, se produce una salida S. Las subexpresiones de una ERS se consideran similarmente. Por ejemplo, en la ERS “(a/1 + b/0)∗ /00”, por cada “a” que se recibe se saca un “1”; por cada “b”, un “0”, y al terminarse la cadena de entrada se produce un “00”. El operador “/” tiene la precedencia m´as alta, o sea que la ERS “ab/0” significa que el “0” est´a asociado a la “b”; puede ser necesario usar parentesis para establecer la precedencia deseada. En general hay que distinguir entre el alfabeto de entrada ({a, b} en el ejemplo) y el de salida ({0, 1} en el ejemplo). a) Defina una ERS que al recibir cada par de “aa” consecutivas emita un “0”, mien- tras que al recibir un par de “bb” consecutivas emita un “1”. (“aaa” contiene s´olo un par). b) Defina formalmente el conjunto de las ERS (Las ERS que se definir´ıan son las ERS “formales”, con todos los parentesis y operadores necesarios, sin tomar en cuenta cuestiones de precedencia de operadores, simplificaciones, etc.). c) Proponga un procedimiento general para pasar de ERS a aut´omatas de Mealy. d) Muestre su funcionamiento con la ERS del inciso (a).
  • 117. 108 CAP´ITULO 3. EXPRESIONES REGULARES Y GRAM ´ATICAS REGULARES
  • 118. Parte II Lenguajes libres de contexto y sus m´aquinas 109
  • 120. Cap´ıtulo 4 Gram´aticas y lenguajes libres de contexto Los Lenguajes Libres de Contexto (abreviado LLC) forman una clase de lenguajes m´as amplia que los Lenguajes Regulares, de acuerdo con la Jerarqu´ıa de Chomsky (ver secci´on 1.5). Estos lenguajes son importantes tanto desde el punto de vista te´orico, por relacionar las llamadas Gram´aticas Libres de Contexto con los Aut´omatas de Pila, como desde el punto de vista pr´actico, ya que casi todos los lenguajes de programaci´on est´an basados en los LLC. En efecto, a partir de los a˜nos 70’s, con lenguajes como Pascal, se hizo com´un la pr´actica de formalizar la sintaxis de los lenguajes de programaci´on usando herramientas basadas en las Gram´aticas Libres de Contexto, que representan a los LLC. Por otra parte, el an´alisis autom´atico de los LLC es computacionalmente mucho m´as eficiente que el de otras clases de lenguajes m´as generales. Retomaremos aqu´ı las nociones relacionadas con las gram´aticas, que fueron introducidas en la secci´on 3.5, pero haciendo las adaptaciones necesarias para los LLC. Una regla es una expresi´on de la forma α → β, en donde tanto α como β son cadenas de s´ımbolos en donde pueden aparecer tanto elementos del alfabeto Σ (llamados constantes) como unos nuevos s´ımbolos, llamados variables. 1 Una gram´atica es b´asicamente un conjunto de reglas. 2 Consideremos, por ejemplo, la siguiente gram´atica para producir un peque˜no subconjunto del idioma espa˜nol: 1. <frase > → <sujeto > <predicado > 1 Trat´andose de los compiladores, se les llama “terminales” a los elementos de Σ, y “no terminales” a las variables. 2 Adelante precisaremos las definiciones. 111
  • 121. 112 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO 2. <sujeto > → <articulo > <sustantivo > 3. <articulo > → el | la 4. <sustantivo > → perro | luna 5. <predicado > → <verbo > 6. <verbo > → brilla | corre donde el s´ımbolo “|” separa varias alternativas. 3 En esta gram´atica se supone que las variables son <frase >, <sujeto >, <articulo >, <sustantivo >, <predicado > y <verbo >, mientras que las constantes son el, la, perro y luna. La variable <frase > ser´a considerada el s´ımbolo inicial. Como vimos en la secci´on 3.5, la idea para aplicar una gram´atica es que se parte de una variable, llamada s´ımbolo inicial, y se aplican repetidamente las reglas gramaticales, hasta que ya no haya variables en la palabra. En ese momento se dice que la palabra resultante es generada por la gram´atica, o en forma equivalente, que la palabra resultante es parte del lenguaje de esa gram´atica. Por ejemplo, podemos usar la gram´atica que acabamos de presentar, para generar la frase “el perro corre”. En efecto, partiendo del s´ımbolo inicial <frase >, aplicando la primera regla podemos obtener <sujeto > <predicado >. Luego, reemplazando <sujeto > por medio de la segunda regla, obtenemos <articulo > <sustantivo > <predicado >; aplicando la tercera regla, llegamos a el <sustantivo > <predicado >. Por la cuarta regla se llega a el perro <predicado >; por la quinta a el perro <verbo >, y finalmente, por la sexta, llegamos a el perro corre. Desde luego, usando esta misma gram´atica podemos producir frases que tienen menos sentido, como “la perro brilla”. Para asegurar la coherencia en el uso de art´ıculos, sustantivos y verbos se requerir´ıa una gram´atica m´as sofisticada, y a´un as´ı ser´ıa posible producir frases sin sentido. 4 4.1. Gram´aticas y la jerarqu´ıa de Chomsky Es posible restringir la forma de las reglas gramaticales de manera que se acomoden a patrones predeterminados. Por ejemplo, se puede imponer que el lado izquierdo de las reglas sea una variable, en vez de una cadena arbitraria de s´ımbolos. Al restringir las reglas de la gram´atica se restringen tambi´en las palabras que se pueden generar; no es extra˜no 3 La notaci´on “|” es en realidad una abreviatura; una regla X → α|β es equivalente a las dos reglas X → α y X → β. 4 Muchos pol´ıticos son versados en estas artes. . .
  • 122. 4.2. LENGUAJES Y GRAM ´ATICAS LIBRES DE CONTEXTO (LLC Y GLC) 113 que las reglas de formas m´as restringidas generan los lenguajes m´as reducidos. N. Chomsky propuso [4] varias formas est´andares de reglas que se asocian a varias clases de lenguajes, que orden´o de manera tal que forman una jerarqu´ıa, es decir, los lenguajes m´as primitivos est´an incluidos en los m´as complejos. 5 As´ı tenemos las siguientes clases de gram´aticas, asociadas a familias de lenguajes: 1. Gram´aticas regulares, o de tipo 3: las reglas son de la forma A → aB o bien A → a, donde A y B son variables y a es constante. 6 Estas gram´aticas son capaces de describir los lenguajes regulares. 2. Gram´aticas Libres de Contexto (GLC), o de tipo 2: las reglas son de la forma X → α, donde X es una variable y α es una cadena que puede contener variables y constantes. Estas gram´aticas producen los lenguajes Libres de Contexto (abreviado “LLC”). 3. Gram´aticas sensitivas al contexto o de tipo 1: las reglas son de la forma αAβ → αΓβ, donde A es una variable y α,β y Γ son cadenas cualesquiera que pueden contener variables y constantes. 4. Gram´aticas no restringidas, o de tipo 0, con reglas de la forma α → β, donde α no puede ser vac´ıo, que generan los lenguajes llamados “recursivamente enumerables”. 7 Los lenguajes de tipo 0 incluyen a los de tipo 1, estos a los de tipo 2, etc. En la figura 1.3 ya se hab´ıa presentado la relaci´on entre los lenguajes de tipo 0, 2 y 3. 4.2. Lenguajes y gram´aticas libres de contexto (LLC y GLC) Podemos ver que la gram´atica del espa˜nol dada arriba es una GLC, pero no podr´ıa ser una gram´atica regular, pues hay varias reglas que no corresponden al formato de las reglas de las gram´aticas regulares. Se ve por lo tanto que el formato de las reglas es menos r´ıgido en las GLC que en las gram´aticas regulares, y as´ı toda gram´atica regular es GLC pero no viceversa. Por ejemplo, el lenguaje {an bn } –que no es regular, como vimos en la secci´on 3.6– tiene la gram´atica libre de contexto con las siguientes reglas: 1. S → aSb 2. S → ab 5 La jerarqu´ıa de Chomsky fue presentada inicialmente en la secci´on 1.5. 6 Estas gram´aticas ya fueron discutidas en el cap´ıtulo 3.5. 7 Las dos ´ultimas clases de lenguajes ser´an discutidas en el cap´ıtulo 6.
  • 123. 114 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO Como vimos en el caso de las gram´aticas regulares, aplicar una regla X → α de una gram´atica consiste en reemplazar X por α en una palabra. Por ejemplo, la regla S → aSb se puede aplicar a una palabra aaSbb para obtener la palabra aaaSbbb, en donde es f´acil ver que reemplazamos S por aSb. Al proceso de aplicar una regla se le conoce como “paso de derivaci´on”, y se denota usando una flecha gruesa “⇒”, como en aaSbb ⇒ aaaSbbb (aplicando una regla S → aSb). Una secuencia de pasos de derivaci´on a partir de una variable especial de la gram´atica llamada “s´ımbolo inicial” se llama simplemente derivaci´on. Por ejemplo, una derivaci´on de la palabra “aaabbb” utilizando la gram´atica de {an bn } ser´ıa (suponiendo que S es el s´ımbolo inicial): S ⇒ aSb ⇒ aaSbb ⇒ aaabbb Como un ejemplo adicional, la gram´atica con las reglas siguientes permite generar expre- siones aritm´eticas con sumas y multiplicaciones de enteros: 1. E → E + T 2. E → T 3. T → T ∗ F 4. T → F 5. F → CF 6. F → C 7. C → 0|1|2|3|4|5|6|7|8|9 El s´ımbolo inicial aqu´ı es E, las constantes son +, ∗ y las cifras 0 . . . 9; E, T, F, C son variables. Con esta gram´atica podemos generar, por ejemplo, la expresi´on 25 + 3 ∗ 12 de la manera siguiente:
  • 124. 4.3. FORMALIZACI ´ON DE LAS GLC 115 EXPRESION JUSTIFICACION E S´ımbolo inicial, inicia derivaci´on ⇒ E + T Aplicaci´on 1a. regla ⇒ T + T 2a. regla, sobre la E ⇒ F + T 4a. regla, sobre la T izquierda ⇒ CF + T 5a. regla, sobre F ⇒ 2F + T 7a. regla ⇒ 2C + T 6a. regla ⇒ 25 + T 7a. regla ⇒ 25 + T ∗ F 3a. regla ⇒ 25 + F ∗ F 4a. regla ⇒ 25 + C ∗ F 6a. regla, sobre la F izquierda ⇒ 25 + 3 ∗ F 7a. regla ⇒ 25 + 3 ∗ CF 5a. regla ⇒ 25 + 3 ∗ 1F 7a. regla ⇒ 25 + 3 ∗ 1C 6a. regla ⇒ 25 + 3 ∗ 12 7a. regla M´as adelante veremos una herramienta, los “´arboles de derivaci´on”, que permiten en- contrar m´as f´acilmente y visualizar mejor la derivaci´on de las palabras a partir del s´ımbolo inicial, aunque su formalizaci´on es menos directa que la simple derivaci´on paso a paso que hemos mostrado. 4.3. Formalizaci´on de las GLC Definici´on.- Una gram´atica libre de contexto es un cu´adruplo (V, Σ, R, S) en donde: V es un alfabeto de variables, tambi´en llamadas no-terminales. Σ es un alfabeto de constantes, tambi´en llamadas terminales. Suponemos que V y Σ son disjuntos, esto es, V ∩ Σ = ∅. R, el conjunto de reglas, es un subconjunto finito de V × (V ∪ Σ)∗ . S, el s´ımbolo inicial, es un elemento de V . Ejemplo.- La gram´atica de {an bn } que presentamos antes se representa formalmente como: ({S}, {a, b}, {(S, aSb), (S, ab)}, S) Usualmente las reglas no se escriben como pares ordenados (X, α), sino como X → α; esto es simplemente cuesti´on de notaci´on.
  • 125. 116 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO Definici´on.- Una cadena α ∈ (V ∪ Σ)∗ es derivable a partir de una gram´atica (V, Σ, R, S) si hay al menos una secuencia de pasos de derivaci´on que la produce a partir del s´ımbolo inicial S, esto es: S ⇒ . . . ⇒ α Definici´on.- El lenguaje L(G) generado por una gram´atica (V, Σ, R, S) es el conjunto de palabras hechas exclusivamente de constantes, que son derivables a partir del s´ımbolo inicial: L = {w ∈ Σ∗ |S ⇒ . . . ⇒ w} Es posible formalizar la definici´on de lenguaje aceptado sin tener que recurrir a los puntos suspensivos “. . . ”, que son un recurso poco elegante en la formalizaci´on matem´atica desde el punto de vista de que recurren a la imaginaci´on del lector para reemplazarlos por la sucesi´on que se representa. A continuaci´on damos esta formalizaci´on alternativa. Las reglas permiten establecer una relaci´on entre cadenas en (V ∪|Σ)∗ , que es la relaci´on de derivaci´on, ⇒G para una gram´atica G. Esta relaci´on se define de la siguiente manera: Definici´on.- α ⇒G β ssi existen cadenas x, y ∈ (V ∪ Σ)∗ , tales que α = xuy, β = xvy, y existe una regla u → v en R. La cerradura reflexiva y transitiva de ⇒G se denota por ⇒∗ G. Una palabra w ∈ Σ∗ es derivable a partir de G si existe una secuencia de derivaci´on S ⇒∗ G w. Definici´on.- El lenguaje generado por una gram´atica G, esto es, L(G), es igual a {w ∈ Σ∗ | S ⇒∗ G w}. 4.4. Dise˜no de GLC El problema del dise˜no de GLC consiste en proponer, dado un lenguaje L, una GLC G tal que su lenguaje generado es exactamente L. Decimos que una GLC G es correcta con respecto al lenguaje dado L cuando el lenguaje generado por G no contiene palabras que est´en fuera de L, es decir, L(G) ⊆ L, donde L(G) denota el lenguaje generado por G. Similarmente, decimos que G es completa cuando G es capaz de generar al menos las palabras de L, es decir, L ⊆ L(G) Al dise˜nar gram´aticas, es posible cometer las mismas dos clases de errores que hemos mencionado para el dise˜no de expresiones regulares y aut´omatas finitos: 1. Que “sobren palabras”, esto es, que la gram´atica genere algunas palabras que no deber´ıa generar. En este caso, la gram´atica ser´ıa incorrecta.
  • 126. 4.4. DISE ˜NO DE GLC 117 2. Que “falten palabras”, esto es, que haya palabras en el lenguaje considerado para las que no hay ninguna derivaci´on. En este caso, la gram´atica ser´ıa incompleta. A´un cuando no hay m´etodos tan sistem´aticos para dise˜nar las GLC como los que vi- mos para dise˜nar Expresiones Regulares o Aut´omatas Finitos, es posible al menos reutilizar gram´aticas conocidas, y ya sea modificarlas para ajustar el lenguaje generado, o combinar varias en una sola. Este ´ultimo es un m´etodo particularmente eficaz, en el que profundizare- mos en esta secci´on. 4.4.1. Adaptaci´on de GLC Muchas veces es posible hacer modificaciones sencillas a una gram´atica conocida para obtener la del lenguaje requerido. Por ejemplo, sup´ongase que queremos obtener una gram´atica que genere el lenguaje {an bm |n > m}. Una buena idea ser´ıa partir de la gram´atica que hemos visto anteriormente, para el lenguaje similar {an bn }, cuya gram´atica tiene las siguientes re- glas: 1. S → aSb 2. S → ab Observamos que es necesario prever alguna regla para producir cualquier cantidad de a’s antes de las b’s, pues hay palabras como aaaab que necesitan ser generadas. Para esto pro- ponemos una regla S → aS. Aplicando iteradamente esta regla podemos producir palabras como la mencionada: S ⇒ aS ⇒ aaS ⇒ aaaS ⇒ aaaab Sin embargo, a´un a˜nadiendo esta regla subsiste el problema de que podr´ıamos generar palabras incorrectas, pues cualquier palabra con igual cantidad de a’s y de b’s se genera utilizando ´unicamente las reglas de la gram´atica para {an bn }. Hay al menos dos maneras de solucionar este problema: 1. Podemos pensar en que la a que asegura que haya m´as a’s que b’s se produzca al inicio de la derivaci´on, mediante la inclusi´on de un nuevo s´ımbolo inicial, sea S0, que produce aS, mediante una regla S0 → aS. Por ejemplo, generar´ıamos aaaab del modo siguiente: S0 ⇒ aS ⇒ aaS ⇒ aaaS ⇒ aaaab 2. Otra manera es producir la a que garantiza m´as a’s que b’s al final de la derivaci´on, reemplazando la regla S → ab por S → a. La misma palabra se derivar´ıa como: S ⇒ aS ⇒ aaS ⇒ aaaSb ⇒ aaaab
  • 127. 118 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO 4.4.2. GLC para uni´on de lenguajes Muchos lenguajes pueden ser expresados en forma ´util como la uni´on de otros dos lengua- jes, para los cuales conocemos las gram´aticas que los generan. Por ejemplo, el lenguaje {an bm |n = m} se puede expresar como la uni´on de los lenguajes: {an bm |n = m} = {an bm |n < m} ∪ {an bm |n > m} Para cada uno de los lenguajes que se unen es f´acil obtener una gram´atica –de hecho ya hemos dise˜nado aqu´ı gram´aticas para lenguajes como ´estos. La manera de combinar dos gram´aticas con s´ımbolos iniciales S1 y S2 respectivamente, para producir la uni´on de los lenguajes originales, consiste en crear un nuevo s´ımbolo inicial S (S1 y S2 dejan de ser iniciales), tomar las reglas tanto de una gram´atica como de otra, y a˜nadir dos nuevas reglas, S → S1 y S → S2, para que el nuevo s´ımbolo inicial sea capaz de generar cualquiera de los dos antiguos s´ımbolos iniciales; a partir del primer paso, se contin´ua la derivaci´on utilizando alguna de las dos gram´aticas originales, sin utilizar las reglas de la otra. Para garantizar esto ´ultimo se supone que las dos gram´aticas originales no tienen ninguna variable en com´un. Definimos formalmente la gram´atica que genera la uni´on de lenguajes de la manera siguiente: Sean G1 = (V1, Σ1, R1, S1) y G2 = (V2, Σ2, R2, S2) dos GLC; se puede suponer, sin p´erdida de generalidad, que las variables de G1 y G2 son disjuntas. La GLC que genera L(G1) ∪ L(G2) es G = (V1 ∪ V2 ∪ {S}, Σ1 ∪ Σ2, R1 ∪ R2 ∪ {S → S1, S → S2}, S) . En efecto, para una palabra w ∈ L(G1) la derivaci´on comienza aplicando S → S1, y despu´es se contin´ua con la derivaci´on a partir de S1 8 Similarmente se hace para una palabra w ∈ L(G2). Por ejemplo, para el lenguaje {an bm |n = m} = {an bm |n < m} ∪ {an bm |n > m}, las gram´aticas originales tendr´ıan reglas: {an bm |n > m} {an bm |n < m} 1) S1 → aS1b 4) S2 → aS2b 2) S1 → aS1 5) S2 → S2b 3) S1 → a 6) S2 → b La gram´atica combinada tendr´ıa las reglas 1-6, mas las reglas S → S1 y S → S2. El s´ımbolo inicial es S. As´ı, por ejemplo, para derivar la palabra aaaab seguimos los pasos: 8 recu´erdese que por hip´otesis w ∈ L(G1).
  • 128. 4.4. DISE ˜NO DE GLC 119 S ⇒ S1 ⇒ aS1 ⇒ aaS1 ⇒ aaaS1 ⇒ aaaaS1 ⇒ aaaab 4.4.3. Mezcla de gram´aticas En ocasiones es necesario combinar dos gram´aticas, de una manera similar a la uni´on que acabamos de presentar, pero permitiendo que las gram´aticas a combinar tengan un mismo s´ımbolo inicial. Llamamos a esto mezcla de gram´aticas. Ejemplo.- Dise˜nar una GLC para el lenguaje {an bm , n ≤ m ≤ 2n}, esto es, donde la cantidad de b’s est´a entre la cantidad de a’s y el doble de ´esta, como en las palabras aabbb, aabb y aabbbb. Una soluci´on es “mezclar” una GLC para el lenguaje {an bn con otra para el lenguaje {an b2n , cuyas GLC son respectivamente: {an bn } {an b2n } 1) S → aSb 3) S → aSbb 2) S → ε 4) S → ε La GLC “mezclada” contendr´ıa simplemente la uni´on de todas las reglas de las dos gram´aticas. 9 As´ı, por ejemplo, para generar la palabra aabbb, se tendr´ıa la siguiente derivaci´on: S ⇒1 aSb ⇒3 aaSbbb ⇒2 aabbb En esta derivaci´on puede apreciarse que es posible obtener una palabra “intermedia” entre aabb y aabbbb, como es aabbb simplemente aplicando algunas veces la regla 1, y otras la regla 3, seg´un se requiera para la palabra que hay que derivar. 4.4.4. GLC para la concatenaci´on de lenguajes En ocasiones un lenguaje L puede ser expresado como la concatenaci´on de otros dos L1 y L2, esto es, L = L1L2. Por ejemplo, el lenguaje {an bm |n > m} puede ser expresado como la concatenaci´on de ak con {an bn }, y desde luego es f´acil encontrar una gram´atica para ak , mientras que la de {an bn } ya la conoc´ıamos. 10 Ahora bien, hay una manera de combinar modularmente las gram´aticas de L1 y L2 para obtener la de L. 9 Desde luego, siendo las reglas 2 y 4 id´enticas, resultan en una s´ola regla al unir las gram´aticas, pues en los conjuntos no hay repetici´on. 10 Ya hab´ıamos obtenido la gram´atica de {an bm |n > m} por modificaci´on de otra gram´atica, pero el m´etodo aqu´ı mostrado tiene la ventaja de que es modular.
  • 129. 120 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO En efecto, para obtener las reglas de la nueva gram´atica, simplemente juntamos las reglas de las originales –las cuales tienen s´ımbolos iniciales S1 y S2– y agregamos una nueva regla S → S1S2, haciendo adem´as a S el nuevo s´ımbolo inicial. Ejemplo.- Definimos el lenguaje de los “prefijos pal´ındromos” como aquel formado por palabras que tienen una parte izquierda de m´as de un caracter que es pal´ındromo (se lee igual de izquierda a derecha que de derecha a izquierda). Por ejemplo, las palabras aabab, aba y aabaa 11 son prefijos pal´ındromos, mientras que las palabras baa, a y abbb no lo son. Proponer una GLC que genere exactamente el lenguaje de los prefijos pal´ındromos en el alfabeto {a, b}. El problema parece dif´ıcil, pero podemos considerar cada palabra de este lenguaje como formada por dos partes: la parte pal´ındroma y el resto de la palabra. Dicho de otra forma, el lenguaje LPP de los prefijos pal´ındromos es igual a la concatenaci´on de LP y LR, donde LP es el lenguaje de los pal´ındromos y LR genera la parte restante de las palabras. El lenguaje de los pal´ındromos en {a, b} tiene una gram´atica muy simple, con las siguientes reglas: 1. S → aSa 2. S → bSb 3. S → a (pal´ındromos impares) 4. S → b (pal´ındromos impares) 5. S → ε (pal´ındromos pares) Por ejemplo, la palabra aabaa se puede derivar de la siguiente manera: S ⇒1 aSa ⇒1 aaSaa ⇒4 aabaa Por otra parte, como la “parte restante” que viene despu´es de la parte pal´ındroma puede ser cualquier cosa, est´a claro que LR es simplemente {a, b}∗ , que por ser regular es LLC, y que tiene una GLC con las reglas: T → aT, T → bT, T → ε. La GLC de LPP es la combinaci´on de ambas gram´aticas, de acuerdo con la f´ormula de concatenaci´on dada m´as arriba. Formalmente, si tenemos las gram´aticas G1 = (V1, Σ1, R1, S1) y G2 = (V2, Σ2, R2, S2), el lenguaje L(G1)L(G2) es generado por la siguiente GLC: G = (V1 ∪ V2 ∪ {S}, Σ1 ∪ Σ2, R1 ∪ R2 ∪ {S → S1S2}, S) . 11 Esta ´ultima puede ser vista de dos maneras distintas como prefijo pal´ındromo.
  • 130. 4.5. ARBOLES DE DERIVACI ´ON 121 S S S ( S ) ( ) S S ( ) ( ) Figura 4.1: Par´entesis bien balanceados 4.5. Arboles de derivaci´on Las GLC tienen la propiedad de que las derivaciones pueden ser representadas en forma arborescente. Por ejemplo, consid´erese la gram´atica siguiente para producir el lenguaje de los par´entesis bien balanceados, que tiene palabras como (()), ()(), (()())(), pero no a (() ni )(: 12 1. S → SS 2. S → (S) 3. S → () Usando esta gram´atica, la palabra (()())() puede ser derivada de la manera que se ilustra en la figura 4.1. En dicha figura se puede apreciar la estructura que se encuentra impl´ıcita en la palabra (()())(). A estas estructuras se les llama ´arboles de derivaci´on, o tambi´en ´arboles de compilaci´on –por usarse extensivamente en los compiladores– y son de vital importancia para la teor´ıa de los compiladores de los lenguajes de programaci´on. Se puede considerar que un ´arbol de derivaci´on es m´as abstracto que una derivaci´on “lineal” –es decir, una sucesi´on S ⇒ . . . ⇒ w– en el sentido de que para un solo ´arbol de derivaci´on puede haber varias derivaciones lineales, seg´un el orden en que se decida “ex- pandir” los no terminales. Por ejemplo, para el ´arbol de la figura arriba, hay al menos las derivaciones siguientes (anotamos como sub´ındice de ⇒ el n´umero de regla aplicado): 1. S ⇒1 SS ⇒2 (S)S ⇒3 (S)() ⇒1 (SS)() ⇒3 (S())() ⇒3 (()())(). 2. S ⇒1 SS ⇒3 S() ⇒2 (S)() ⇒1 (SS)() ⇒3 (()S)() ⇒3 (()())().
  • 131. 122 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO Formalmente, un ´arbol de derivaci´on es un grafo dirigido arborescente 13 definido de la manera siguiente: Definici´on.- Sea G = (V, Σ, R, S) una GLC. Entonces un ´arbol de derivaci´on cumple las siguientes propiedades: 1. Cada nodo tiene una etiqueta 14 2. La ra´ız tiene etiqueta S. 3. La etiqueta de los nodos que no son hojas debe estar en V , y las de las hojas en Σ∪{ε}. 4. Si un nodo n tiene etiqueta A, y los nodos n1, . . . , nm son sus hijos (de izquierda a derecha), con etiquetas respectivamente A1, . . . , Am, entonces A → A1, . . . , Am ∈ R. Definici´on.- La cadena de caracteres que resulta de concatenar los caracteres termi- nales encontrados en las etiquetas de los nodos hoja, en un recorrido en orden del ´arbol de derivaci´on, se llama el producto del ´arbol. Es decir, al efectuar un recorrido en orden del ´arbol de derivaci´on recuperamos la cadena a partir de la cual se construy´o dicho ´arbol. As´ı, el problema de “compilar” una cadena de caracteres consiste en construir el ´arbol de derivaci´on a partir del producto de ´este. 4.5.1. Ambig¨uedad en GLC La correspondencia entre los ´arboles de derivaci´on y sus productos no es necesariamente biun´ıvoca. En efecto, hay GLC en las cuales para ciertas palabras hay m´as de un ´arbol de derivaci´on. Sea por ejemplo la siguiente GLC, para expresiones aritm´eticas sobre las variables x y y. 1. E → E + E 2. E → E ∗ E 3. E → x 4. E → y Con esta gram´atica, para la expresi´on x + y ∗ x existen los dos ´arboles de derivaci´on de las figuras 4.2(a) y (b). 12 Esta gram´atica puede ser dise˜nada adaptando la de {an bn }, reemplazando a por ( y b por ), y agregando la primera regla, que toma en cuenta la posibilidad de tener varios grupos de par´entesis anidados. 13 Un grafo arborescente se caracteriza por no tener ciclos, y por el hecho de que existe una trayectoria ´unica para llegar de la ra´ız a un nodo cualquiera. 14 Formalmente, una etiqueta es una funci´on que va del conjunto de nodos al conjunto de s´ımbolos de donde se toman las etiquetas, en este caso V ∪ Σ ∪ {ε}.
  • 132. 4.5. ARBOLES DE DERIVACI ´ON 123 x + y * x E E (a) x + y * x E E (b) Figura 4.2: Dos ´arboles para x + y ∗ x En este ejemplo, el hecho de que existan dos ´arboles de derivaci´on para una misma expre- si´on es indeseable, pues cada ´arbol indica una manera distinta de estructurar la expresi´on. En efecto, en el ´arbol de la izquierda, al resultado de la suma (x + y) se multiplica con x, mientras que en el de la derecha sumamos x al resultado de multiplicar x con y; por lo tanto el significado que se asocia a ambas expresiones puede ser distinto. Se dice que una gram´atica es ambigua ssi alguna palabra del lenguaje que genera tiene m´as de un ´arbol de derivaci´on. N´otese que la ambig¨uedad, como la estamos definiendo, es una propiedad de la gram´atica, no de su lenguaje generado. Para un mismo lenguaje puede haber una gram´atica ambigua y una no ambigua. Existen t´ecnicas para eliminar la ambig¨uedad de una GLC; en general estas t´ecnicas con- sisten en introducir nuevos no-terminales de modo que se eliminen los ´arboles de derivaci´on no deseados. Para nuestro ejemplo de los operadores aritm´eticos, es cl´asica la soluci´on que consiste en introducir, adem´as de la categor´ıa de las Expresiones (no-terminal E), la de los t´erminos (T) y factores (F), dando la gram´atica con las reglas siguientes: 1. E → E + T 2. E → T 3. T → T ∗ F 4. T → F 5. F → (E) 6. F → x 7. F → y Con esta nueva GLC, el ´arbol de derivaci´on de la figura 4.2(a) se elimina, quedando finalmente una adaptaci´on del ´arbol de 4.2(b) a la GLC con t´erminos y factores, lo cual se deja como ejercicio al lector.
  • 133. 124 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO Sin embargo, estas t´ecnicas de eliminaci´on de ambig¨uedad no son siempre aplicables, y de hecho hay algunos LLC para los que es imposible encontrar una gram´atica libre de contexto no ambigua; estos lenguajes se llaman inherentemente ambiguos. Un ejemplo, dado en [7] junto con la prueba correspondiente, es el siguiente: L = {an bn cm dm } ∪ {an bm cm dm }, n≥1, m≥1 4.5.2. Derivaciones izquierda y derecha En una gram´atica no ambigua G, a una palabra w ∈ L(G) corresponde un s´olo ´arbol de derivaci´on AG; sin embargo, puede haber varias derivaciones para obtener w a partir del s´ımbolo inicial, S ⇒ . . . ⇒ w. Una manera de hacer ´unica la manera de derivar una palabra consiste en restringir la elecci´on del s´ımbolo que se va a “expandir” en curso de la derivaci´on. Por ejemplo, si tenemos en cierto momento de la derivaci´on la palabra (S())(S), en el paso siguiente podemos aplicar alguna regla de la gram´atica ya sea a la primera o a la segunda de las S. En cambio, si nos restringimos a aplicar las reglas solo al no terminal que se encuentre m´as a la izquierda en la palabra, entonces habr´a una sola opci´on posible. Desde luego, el hecho de elegir el no terminal m´as a la izquierda es arbitrario; igual podemos elegir el no terminal m´as a la derecha. Definici´on.- Se llama derivaci´on izquierda de una palabra w a una secuencia S ⇒ w1 ⇒ . . . ⇒ wn ⇒ w en donde, para pasar de wi a wi+1, se aplica una regla al no terminal de wi que se encuentre m´as a la izquierda. Similarmente se puede definir una derivaci´on derecha. Ejemplo.- Para la gram´atica no ambigua con reglas S → AB, A → a, B → b, la palabra ab se produce con la derivaci´on izquierda: S ⇒ AB ⇒ aB ⇒ ab mientras que tambi´en se puede producir con la derivaci´on derecha: S ⇒ AB ⇒ Ab ⇒ ab Teorema.- Para una gram´atica no ambigua G, y una palabra w ∈ L(G), existe solamente una derivaci´on izquierda S ⇒∗ w. Prueba: La derivaci´on izquierda corresponde a un recorrido en preorden del ´arbol de derivaci´on, expandiendo los no terminales que vamos encontrando en el camino. Ahora bien, se sabe que existe un solo recorrido en preorden para un ´arbol dado.
  • 134. 4.6. PRUEBAS DE CORRECCI ´ON Y COMPLETEZ 125 4.6. Pruebas de correcci´on y completez Es posible en general hacer pruebas matem´aticas de que una gram´atica corresponde a un lenguaje dado. Esto tiene la gran ventaja de que dicha correspondencia ya no es una simple convicci´on intuitiva, sino que adquiere el rango de certeza matem´atica. En ciertas aplicaciones, donde es extremadamente importante asegurarse de que no hay errores, las pruebas que garantizan esta certeza son de un gran valor. Las pruebas que permiten establecer la correspondencia entre un lenguaje y una gram´atica dados requieren dos partes: 1. Prueba de correcci´on, que garantiza que todas las palabras que se producen al utilizar la gram´atica efectivamente corresponden a la descripci´on del lenguaje dado; 2. Prueba de completez, que se asegura de que al producir palabras con la gram´atica, no falten palabras del lenguaje dado. En general las pruebas de correcci´on son m´as sencillas y siguen un patr´on m´as predecible que las de completez, como podremos constatar en los ejemplos que siguen. Las pruebas de correcci´on se hacen por inducci´on, m´as precisamente por inducci´on en la longitud de la derivaci´on. La idea de una prueba por inducci´on basada en la longitud de la derivaci´on es esencial- mente mostrar que todas las palabras por las que se pasa en medio del proceso de derivaci´on cumplen una propiedad, que es b´asicamente el enunciado del lenguaje. Dichas pruebas siguen el siguiente esquema: 1. Lo primero que hay que hacer es establecer un enunciado, relacionado con la definici´on del lenguaje considerado, pero algo modificado de manera que se pueda aplicar a las palabras intermedias en el proceso de derivaci´on, las cuales pueden contener variables tanto como constantes. 2. Luego se prueba, como base de la inducci´on, que para las palabras intermedias de la derivaci´on producidas en al menos k0 pasos, la propiedad se cumple. 3. A continuaci´on se hace el paso de inducci´on propiamente dicho. Para esto primero se supone que la propiedad se cumple tras haber hecho i pasos de derivaci´on (esto es la hip´otesis de inducci´on), y luego se prueba que tambi´en se cumple al hacer un paso m´as de derivaci´on (esto es, para las palabras derivadas en i+1 pasos). Al concluir este paso, se ha probado que todas las palabras intermedias en el proceso de derivaci´on cumplen con la propiedad. 4. Finalmente, hay que particularizar la propiedad para la ´ultima palabra de la derivaci´on, que es la que s´olo contiene constantes. Con esto se termina la prueba.
  • 135. 126 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO Ejemplo.- Probar la correcci´on de la gram´atica siguiente que genera el lenguaje P de los par´entesis bien balanceados (presentamos las reglas): 1. S → (S) 2. S → SS 3. S → () Prueba de correcci´on.- Para hacer la prueba por inducci´on en la longitud de la derivaci´on, necesitamos primero generalizar el enunciado de forma que sea aplicable a las palabras con variables que aparecen a la mitad de la derivaci´on. Esto es, necesitamos un lenguaje extendido donde se admita que las palabras contengan variables. Hacemos la siguiente definici´on: PX = {α ∈ (V ∪ Σ)∗ |elim(S, α) ∈ P} Es decir, eliminando las “S” de las palabras de PX, obtenemos palabras de par´entesis bien balanceados. Base de la inducci´on.- En 0 pasos, se tiene (trivialmente) una palabra en PX. Hip´otesis de inducci´on.- En k pasos, se generan palabras en PX, de la forma αSβ, con α, β ∈ V ∗ . Paso de inducci´on.- A la palabra αSβ, generada en k pasos, se le pueden aplicar las reglas 1-3. Evidentemente la aplicaci´on de las reglas 2 y 3 genera palabras αSSβ y αβ en LX. Aunque es menos evidente, la aplicaci´on de la regla 1 produce palabras α(S)β, que tambi´en est´an en LX. Finalmente, la ´ultima regla que debe aplicarse es la 3, lo que nos da una palabra con los par´entesis bien balanceados. QED Las pruebas de completez muestran que todas las palabras del lenguaje en cuesti´on pueden efectivamente ser generadas utilizando la gram´atica dada. Esto puede ser en ocasiones dif´ıcil, y no hay “recetas” tan uniformes como para las pruebas de correcci´on. N´otese que la completez y la correcci´on de una gram´atica son propiedades independientes, y una gram´atica dada puede tener una, las dos o ninguna. Por ejemplo, si eliminamos la regla 2 de la gram´atica, de todas maneras la prueba de correcci´on que acabamos de hacer seguir´ıa funcionando, pero en cambio no habr´a completez, porque algunas palabras, como (())(()) no pueden ser generadas por la gram´atica. Vamos a presentar un ejemplo de prueba de completez para la gram´atica de los par´entesis bien balanceados dada m´as arriba, para mostrar el tipo de consideraciones que hay que hacer para llevar a t´ermino la prueba.
  • 136. 4.7. GRAM ´ATICAS LIBRES Y SENSITIVAS AL CONTEXTO 127 Prueba de completez.- En el caso que nos ocupa, vamos a hacer una prueba por inducci´on sobre la longitud de la palabra. Base de la inducci´on: La gram´atica puede generar todas las palabras de longitud 2 (Por la regla 3). Hip´otesis de inducci´on: La gram´atica puede generar todas las palabras de longitud menor o igual a k. (Claramente k es par). Paso de inducci´on: Notamos que para una palabra dada w en P (esto es, que tiene los par´entesis bien balanceados), |w| = k + 2 s´olo hay dos posibilidades: 15 . 1. w se puede partir en w1 y w2, w = w1w2, de forma tal que w1, w2 ∈ P. 2. w no se puede partir en dos partes. En el caso 1, aplicando inicialmente la regla S → SS, se debe poder generar w1 a partir de la S de la izquierda, por hip´otesis de inducci´on, ya que |w1|≤k. Similarmente para w2, con la S de la derecha. En el caso 2, w = (w ), donde w ∈ P, es decir, al quitar los dos par´entesis m´as externos se tiene una palabra con par´entesis bien balanceados (¿Porqu´e?). Como |w | = k, por hip´otesis de inducci´on w se puede generar con la gram´atica. La palabra w se puede entonces generar aplicando primero la regla S → (S), y luego continuando con la derivaci´on de w que existe por hip´otesis de inducci´on. Esto completa la prueba. QED 4.7. Gram´aticas libres y sensitivas al contexto Las GLC deben su nombre a una comparaci´on con otro tipo de gram´aticas, las llamadas sensitivas al contexto, definidas arriba, donde para una regla α1Aα2 → α1βα2 , el s´ımbolo A solo puede generar β cuando se encuentra rodeado por el “contexto” α1 . . . α2. En cambio, en las GLC no es necesario especificar un contexto, por esto se llaman “libres de contexto”. Las gram´aticas sensitivas al contexto son estrictamente m´as poderosas que las GLC; un ejemplo es el lenguaje de las cadenas de la forma an bn cn , para el que no hay ninguna GLC. En cambio, una gram´atica sensitiva al contexto ser´ıa la siguiente (s´olo damos las reglas): 16 15 El paso de inducci´on se hace en k + 2 y no en k + 1 porque todas las palabras en P tienen longitud par 16 Esta gram´atica produce palabras de al menos 6 caracteres, o sea de el lenguaje {an bn cn |n > 1}.
  • 137. 128 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO 1. S → aBTc 6. Y X → AX 2. T → ABTc 7. AX → AB 3. T → ABc 8. aA → aa 4. BA → BX 9. aB → ab 5. BX → Y X 10. bB → bb En esta gram´atica, las reglas 1 a 3 generan A, a, B y c no necesariamente en orden (las A y B van a estar alternadas). Luego las reglas 4 a 7 permiten reordenar las A y B, para que todas las A queden antes que todas las B, 17 y finalmente las reglas 8 a 10 permiten generar los terminales solamente cuando las letras est´an en el orden correcto. Como un ejemplo, la palabra aaabbbccc se puede generar de la forma siguiente: S ⇒1 aBTc ⇒2 aBABTcc ⇒3 aBABABccc ⇒4 aBXBXBccc ⇒5 aY XY XBccc ⇒6 aAXAXBccc ⇒7 aABABBccc ⇒4 aABXBBccc ⇒5 aAY XBBccc ⇒6 aAAXBBccc ⇒7 aAABBBccc ⇒8 aaABBBccc ⇒8 aaaBBBccc ⇒9 aaabBBccc ⇒10 aaabbBccc ⇒10 aaabbbccc. 4.8. Transformaci´on de las GLC y Formas Normales En muchas situaciones se considera conveniente modificar las reglas de la gram´atica, de manera que cumplan las reglas con propiedades tales como no producir la cadena vac´ıa del lado derecho, o bien simplemente por cuestiones de estandarizaci´on o facilidad de im- plementaci´on computacional. Desde luego, cuando hablamos de “modificar las reglas de la gram´atica”, se entiende que esto debe hacerse sin modificar el lenguaje generado. Por ejemplo, la presencia de reglas que producen vac´ıo en la gram´atica puede ser fuente de dificultades tales como la ambig¨uedad, o la posibilidad de tener derivaciones arbitrariamente largas. Tomemos por ejemplo la siguiente gram´atica para los par´entesis bien balanceados (damos s´olo las reglas): 1. S → SS 2. S → (S) 3. S → ε Con esta gram´atica es posible hacer derivaciones arbitrariamente largas de una palabra tan sencilla como “()”(el sub´ındice de las flechas indica la regla utilizada): 17 De hecho bastar´ıa con una regla BA → AB, salvo que ´esta no cumple con el formato de las gram´aticas sensitivas al contexto.
  • 138. 4.8. TRANSFORMACI ´ON DE LAS GLC Y FORMAS NORMALES 129 S ⇒1 SS ⇒1 SSS ⇒1 . . . ⇒3 SSS ⇒3 SS ⇒3 S ⇒2 (S) ⇒3 () Si pudi´eramos tener una gram´atica equivalente, pero sin reglas que produzcan la cadena vac´ıa, ya no ser´ıa posible hacer derivaciones arbitrariamente largas. Esto puede ser una ventaja a la hora de determinar si una palabra se deriva o no de una gram´atica (ver secci´on 4.10). 4.8.1. Eliminaci´on de reglas A → ε Consideremos nuevamente la gram´atica para los par´entesis bien balanceados. Si queremos una GLC equivalente, pero sin emplear producciones vac´ıas (como S → ε), una idea ser´ıa analizar “en reversa” la derivaci´on de donde viene la S que queremos cambiar por ε. S´olo hay otras dos reglas en la gram´atica, de modo que esa S tuvo que ser generada ya sea por S → (S) o por S → SS. En el caso de S → (S), una soluci´on ser´ıa, en vez de hacer la derivaci´on S ⇒ . . . ⇒ αSβ ⇒ α(S)β ⇒ α()β, α ∈ Σ∗ , β ∈ (Σ ∪ V )∗ mejor hacer directamente la derivaci´on S ⇒ . . . ⇒ αSβ ⇒ α()β agregando una regla S ⇒ () a la gram´atica. Y en caso de que la S provenga de la regla S → SS, se puede cambiar la derivaci´on S ⇒ . . . ⇒ αSβ ⇒ αSSβ ⇒ αSβ por la derivaci´on S ⇒ . . . ⇒ αSβ ⇒ αSβ usando una nueva regla S → S, o mejor a´un, simplemente reemplazarla por S ⇒ . . . ⇒ αSβ sin ninguna regla adicional (la parte de la derivaci´on αSβ ⇒ αSSβ ⇒ αSβ desaparece por completo, pues no sirve de nada). Resumiendo, la idea que permite eliminar las reglas A → ε es la de irse un paso atr´as, para examinar de d´onde provino el no-terminal A que queremos eliminar, y por cada regla B → αAβ de la gram´atica agregar una regla B → αβ , en que directamente ya se reemplaz´o A
  • 139. 130 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO por ε. Una vez hecho esto, se pueden suprimir todas las reglas de la forma A → ε, pues resultan redundantes. Por ejemplo, sea la GLC de los par´entesis bien balanceados: S → (S), S → SS, S → ε. Aplicando mec´anicamente la transformaci´on a dicha gram´atica, se tiene: S → (S), S → SS, S → (), S → S La regla S → S es evidentemente in´util y se puede eliminar, pero dejemos esto para el siguiente p´arrafo, en que nos ocuparemos de la eliminaci´on de reglas de esa forma. Otra cuesti´on m´as importante a´un debe haber saltado a la vista escrutadora del lector perspicaz: ¡la nueva GLC no es exactamente equivalente a la anterior! En efecto, la GLC original generaba la palabra vac´ıa ε, mientras que la GLC transformada no la genera. Desde luego, el hecho de que una GLC contenga reglas de la forma A → ε no significa que el lenguaje contenga forzosamente a la palabra vac´ıa; consid´erese por ejemplo la siguiente gram´atica: S → (A), A → (A), A → AA, A → ε cuyo lenguaje no contiene a la palabra vac´ıa. En caso de que el lenguaje en cuesti´on realmente contenga a la palabra vac´ıa, no es posible estrictamente eliminar todas las producciones vac´ıas sin alterar el significado de la gram´atica. En estos casos vamos a expresar el lenguaje como la uni´on {ε} ∪ L(G ), donde G es la gram´atica transformada. Este peque˜no ajuste no modifica los resultados que obtuvimos arriba. 4.8.2. Eliminaci´on de reglas A → B Supongamos ahora que se tiene la gram´atica con las reglas siguientes: S → (S), S → BB, S → (), B → S Claramente esta GLC es equivalente a la gram´atica dada anteriormente para generar los par´entesis bien balanceados. La ´unica diferencia es que, en vez de utilizar la regla S → SS, se tiene una regla S → BB, y luego las B se transforman en S por la regla B → S. Pero, ¿para que usar esos intermediarios, como B en este caso, cuando es posible generar directamente SS a partir de S? La idea de eliminar las reglas de la forma A → B viene de observar que dichas reglas no producen nada ´util, simplemente introducen s´ımbolos intermediarios, que es posible eliminar. A continuaci´on veremos c´omo.
  • 140. 4.8. TRANSFORMACI ´ON DE LAS GLC Y FORMAS NORMALES 131 Supongamos que hay reglas A → B y B → Γi en la gram´atica, entonces es posible a˜nadir reglas A → Γi sin modificar el lenguaje. Ahora bien, si hacemos esto siempre que sea posible, las reglas de la forma A → B se vuelven in´utiles, pues toda derivaci´on: . . . ⇒ αAβ ⇒ αBβ ⇒ αΓiβ ⇒ . . . puede transformarse en: . . . ⇒ αAβ ⇒ αΓiβ ⇒ . . . sin modificar el lenguaje. Esto prueba que la gram´atica modificada es equivalente a la original. Por ejemplo, aplicando esta transformaci´on a la gram´atica del ejemplo, la regla “in´util”, que tratamos de eliminar, es B → S. Se producen las nuevas reglas siguientes: B → (S), al combinar B → S con S → (S) B → BB, al combinar B → S con S → BB B → (), al combinar B → S con S → () La gram´atica queda entonces con las reglas: S → (S), S → BB, S → (), B → (S), B → BB, B → () 4.8.3. Eliminaci´on de reglas inaccesibles Consid´erese una gram´atica con reglas: S → aXbb, X → bSa, Y → SX Es f´acil comprender que la tercera regla es in´util, porque no hay nadie que produzca la Y necesaria para que dicha regla se aplique. A reglas como ´estas se les llama inaccesibles. Definici´on.- Una regla X → α de una gram´atica (V, Σ, R, S) es inaccesible si no hay una derivaci´on S ⇒ α1Xα2, donde α1, α2 ∈ (V ∪ Σ)∗ . En t´erminos pr´acticos, si vemos que una variable X no aparece en el lado derecho de ninguna regla de la gram´atica, podemos asegurar sin arriesgarnos que la regla X → α es inaccesible. Para eliminar una regla inaccesible no se necesita hacer ninguna otra modificaci´on a la gram´atica mas que simplemente borrarla. La equivalencia de la gram´atica sin la regla inaccesible y la original est´a garantizada por el hecho de que dicha regla no participa en ninguna derivaci´on.
  • 141. 132 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO 4.8.4. Formas Normales En ocasiones es necesario expresar una GLC siguiendo un formato m´as preciso de las reglas que la simple forma A → α. Estos “est´andares” reciben el nombre de formas normales. Vamos a estudiar una de las formas normales m´as conocidas, la forma normal de Chomsky (FNCH). La FNCH consiste en que las reglas pueden tener dos formas: 1. A → a, a ∈ Σ 2. A → BC, con B, C ∈ V Esta forma normal, aparentemente tan arbitraria, tiene por objeto facilitar el an´alisis sint´actico de una palabra de entrada, siguiendo la estrategia siguiente: Se trata de construir el ´arbol de derivaci´on de w de arriba hacia abajo (llamada “top-down” en ingl´es), y por consiguiente se supone inicialmente que el s´ımbolo inicial S puede producir la palabra w. En seguida se procede a dividir la palabra de entrada w en dos pedazos, w = αβ , para luego tomar alguna regla S → AB , y tratar de verificar si se puede derivar a a partir de A y b a partir de B, es decir: S ⇒ . . . ⇒ w ssi: 1. w ∈ Σ, hay una regla S → w 2. w = αβ, hay una regla S → AB, con A ⇒ . . . ⇒ α, y B ⇒ . . . ⇒ β Por ejemplo, consid´erese la siguiente gram´atica para el lenguaje de los par´entesis bien balanceados, en forma normal de Chomsky (damos sus reglas): 18 1. S → XY 2. X → ( 3. Y → SZ 4. Z →) 5. S → SS 6. S → XZ Supongamos que tenemos una palabra como (())(), y queremos verificar si se puede derivar a partir de esta gram´atica. Hay que “partir” dicha palabra en dos pedazos, y escoger alguna 18 Luego veremos c´omo calcular esta forma normal.
  • 142. 4.8. TRANSFORMACI ´ON DE LAS GLC Y FORMAS NORMALES 133 S S S X Y S( X ( Z ) X (Z Z ) ) Figura 4.3: Arbol de la palabra (())() regla que produzca dos variables. Escogemos la quinta regla, S → SS, y partimos la palabra en los pedazos (()) y (). Para que SS pueda generar (())() ahora se necesitar´a que la primera S pueda generar (()), y la segunda pueda generar (). Estos son subproblemas muy similares al problema inicial. Tomemos el primero, es decir, a partir de S generar (()). Escogemos la regla S → XY , y partimos la palabra en ( y ()). Ahora X tiene la responsabilidad de generar ( y Y la de generar ()). Por la segunda regla, X genera directamente (. Ahora tomamos el problema de generar ()) a partir de Y . Escogemos la regla S → SZ, y la separaci´on en los pedazos () y ). Entonces Z produce directamente ), y queda por resolver c´omo S produce (). Para ello, escogemos la regla S → XZ, y finalmente X produce ( y Z se encarga de ), con lo que terminamos el an´alisis. El ´arbol de compilaci´on se presenta en la figura 4.3. Esta manera de generar dos nuevos problemas similares al problema inicial, pero con datos m´as peque˜nos, es t´ıpicamente un caso de recursi´on. Este hecho permite pensar en un sencillo procedimiento recursivo para “compilar” palabras de un LLC. Sea CC(A, u) la funci´on que verifica si A ⇒ . . . ⇒ u. Entonces un algoritmo de an´alisis sint´actico ser´ıa el siguiente: CC(A, w) : 1. Si |w| > 1, dividirla en u y v, w = uv; Para cada regla de la forma A → UV , intentar CC(U, u) y CC(V, v) 2. Si |w| = 1, buscar una regla A → w. Si en el punto 1 la divisi´on de la palabra no nos llev´o a una compilaci´on exitosa (es decir, los llamados recursivos CC(U, u) y CC(V, v) no tuvieron ´exito), puede ser necesario dividir la palabra de otra manera. Dicho de otra forma, puede ser necesario ensayar todas las formas
  • 143. 134 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO posibles de dividir una palabra en dos partes, antes de convencerse de que ´esta pertenece o no a nuestro lenguaje. A´un cuando esto puede ser muy ineficiente computacionalmente, es innegable que el algoritmo es conceptualmente muy sencillo. El siguiente problema a examinar es si efectivamente es posible transformar una GLC cualquiera G en otra GLC G que est´a en la FNCH. Vamos a efectuar esta transformaci´on en dos etapas: en una primera etapa, llevaremos G a una forma intermedia Gtemp, para pasar despu´es de Gtemp a G . En Gtemp las reglas son de las formas: 1. A → a, con a ∈ Σ 2. A → β, con β ∈ V V ∗ En Gtemp, los lados derechos de las reglas son, ya sea un terminal, o una cadena (no vac´ıa) de no-terminales. La manera de llevar una GLC cualquiera a la forma intermedia consiste en introducir reglas A → a, B → b, etc., de modo que podamos poner, en vez de un terminal a, el no-terminal A que le corresponde, con la seguridad de que despu´es ser´a posible obtener a a partir de A. Por ejemplo, consid´erese la siguiente GLC: 1.- S → aX 2.- S → bY 3.- X → Y a 4.- X → ba 5.- Y → bXX 6.- Y → aba Como se ve, el obst´aculo para que esta GLC est´e en la forma intermedia es que en los lados derechos de varias reglas (1, 2, 3, 5) se mezclan los terminales y los no-terminales. Por otra parte, hay reglas (4, 6) que en el lado derecho tienen varios terminales. Entonces a˜nadimos las reglas: 7.- A → a
  • 144. 4.8. TRANSFORMACI ´ON DE LAS GLC Y FORMAS NORMALES 135 8.- B → b y modificamos las reglas (1,2,3,5), reemplazando a por A y b por B: 1 .- S → AX 2 .- S → BY 3 .- X → Y A 4 .- X → BA 5 .- Y → BXX 6 .- Y → ABA con lo que la gram´atica ya est´a en la forma intermedia. La equivalencia de la nueva gram´atica con respecto a la original es muy f´acil de probar. Luego, para pasar de Gtemp a la FNCH, puede ser necesario dividir los lados derechos de algunas reglas en varias partes. Si tenemos una regla X → X1X2 . . . Xn, la dividimos en dos reglas, una X → X1W y otra W → X2 . . . Xn, donde W es una nueva variable, es decir, no debe formar previamente parte de la gram´atica. Cada vez que se aplica esta transformaci´on, el lado derecho de la regla afectada se reduce en longitud en una unidad, por lo que, aplic´andola repetidas veces, se debe poder llegar siempre a reglas cuyo lado derecho tiene exactamente dos no-terminales. Para el ejemplo visto arriba, la regla 5 se convierte en: 5 .- Y → BW 5 .- W → XX Similarmente se puede transformar la regla 6 , dejando la gram´atica (reglas 1 , 2 , 3 , 4 , 5 , 5 , 6 , 6 , 7, 8) en la FNCH.
  • 145. 136 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO 4.9. Limitaciones de los LLC En esta secci´on veremos c´omo verificar que un lenguaje dado no es LLC. Esto puede ser muy ´util, para evitarnos el trabajo de tratar in´utilmente de dise˜nar GLCs de lenguajes que no tienen ninguna. Una herramienta para esto es aplicar el llamado “teorema de bombeo”, que se presenta enseguida. 4.9.1. Teorema de bombeo para los LLC Teorema.- Existe para cada G ∈ GLC un n´umero k tal que toda w ∈ L(G), donde |w| > k, puede ser escrita como w = uvxyz, de tal manera que v y y no son ambas vac´ıas, y que uvn xyn z ∈ L(G) para cualquier n≥0. Este teorema es similar en esencia al teorema de bombeo para los lenguajes regulares. Nos dice que siempre hay manera de introducir (“bombear”) subrepticiamente subcadenas a las palabras de los LLC. Nos sirve para probar que ciertos lenguajes no son LLC. Prueba.- Basta con probar que hay una derivaci´on S ⇒∗ uAz ⇒∗ uvAyz ⇒∗ uvxyz = w pues al aparecer el mismo no-terminal en dos puntos de la derivaci´on, es posible insertar ese “trozo” de la derivaci´on cuantas veces se quiera (incluyendo cero). Esa parte de la derivaci´on, que tiene la forma uAz ⇒∗ uvAyz, es una especie de “ciclo” sobre el no-terminal A, que recuerda lo que ocurr´ıa con el teorema de bombeo para los lenguajes regulares. Para probar que existen en la derivaci´on ciclos de la forma uAz ⇒∗ uvAyz, la idea ser´a verificar que el tama˜no vertical del ´arbol (su profundidad) es mayor que la cantidad de no-terminales disponibles. En consecuencia, alg´un no-terminal debe repetirse. Primero, la cantidad de no-terminales para una gram´atica (V, Σ, R, S) es |V |. A continuaci´on examinemos el problema de verificar si los ´arboles de derivaci´on pueden tener una profundidad mayor que |V |. Sea m = max({|α| |A → α ∈ R}). Ahora bien, un ´arbol de profundidad p tiene a lo m´as mp hojas (¿porqu´e?), y por lo tanto un ´arbol Aw para w, con |w| > mp tiene profundidad mayor que p. As´ı, toda palabra de longitud mayor que m|V | tendr´a necesariamente una profundidad mayor que |V |, y por lo tanto, alg´un no-terminal estar´a repetido en la derivaci´on; sea A ese no-terminal. Vamos a representar el ´arbol de derivaci´on en la figura 4.4. Como se ve, hay un sub´arbol del ´arbol de derivaci´on (el tri´angulo intermedio en la figu- ra 4.4) en el que el s´ımbolo A es la ra´ız y tambi´en una de las hojas. Est´a claro que ese
  • 146. 4.9. LIMITACIONES DE LOS LLC 137 A A S u v x y z Figura 4.4: sub´arbol puede ser insertado o quitado cuantas veces se quiera, y quedar´a siempre un ´arbol de derivaci´on v´alido; cada vez que dicho sub´arbol sea insertado, las subcadenas v e y se repe- tir´an una vez m´as. Esto completa la prueba. En la figura se aprecia porqu´e es importante que v e y no sean ambas vac´ıas. QED Ejemplo.- El lenguaje {an bn cn } no es LLC. Esto se prueba por contradicci´on. Sup´ongase que {an bn cn } es LLC. Entonces, de acuerdo con el teorema de bombeo, para una cierta k, ak/3 bk/3 ck/3 puede ser escrita como uvxyz, donde v y y no pueden ser ambas vac´ıas. Existen dos posibilidades: 1. v o y contienen varias letras (combinaciones de a, b o c). Pero, seg´un el teorema, uv2 xy2 z es de la forma an bn cn , lo cual es imposible, ya que al repetir v o y, forzosamente las letras quedar´an en desorden; 2. Tanto v como y (el que no sea vac´ıo) contienen un s´olo tipo de letra (repeticiones de a, b o c). En este caso, si uvxyz es de la forma an bn cn , uv2 xy2 z no puede ser de la misma forma, pues no hemos incrementado en forma balanceada las tres letras, sino a lo m´as dos de ellas. En ambos casos se contradice la hip´otesis de que {an bn cn } es LLC. Al haberse probado que el lenguaje {an bn cn } no es LLC, podemos probar que la inter- secci´on de dos LLC no es necesariamente un LLC: Teorema.- La intersecci´on de dos LLC no es necesariamente LLC. Prueba.- Los lenguajes L1 y L2 formados por las palabras de la forma an bn cm y am bn cn respectivamente son LLC. Sin embargo, su intersecci´on es el lenguaje {an bn cn }, que acabamos de probar que no es LLC. Algo similar ocurre con respecto a la operaci´on de complemento del lenguaje, que si se recuerda, en el caso de los lenguajes regulares, su complemento daba otro lenguaje regular: Teorema.- El complemento de un LLC no necesariamente produce otro LLC. Prueba.- Si el complemento de un LLC fuera tambi´en LLC, lo mismo ocurrir´ıa con la
  • 147. 138 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO intersecci´on, ya que, de acuerdo con las identidades de la teor´ıa de conjuntos, L1 ∩ L2 = (Lc 1 ∪ Lc 2)c . 19 Debe tenerse cuidado al interpretar estos resultados. En efecto, esto no quiere decir, por ejemplo, que el complemento de un LLC necesariamente no ser´a LLC. En el siguiente ejemplo se da un caso espec´ıfico. Ejemplo.- Probar que el complemento del lenguaje {an bn } es LLC. Para esto, vamos a clasificar las palabras de L = {an bn }c en dos categor´ıas: 1. Las que contienen la cadena “ba”, esto es, w = αbaβ 2. Las que no contienen “ba”, esto es, w = αbaβ Claramente esta clasificaci´on es exhaustiva. El objetivo de esta clasificaci´on es distinguir las causas por las que una palabra en {a, b}∗ no es de la forma an bn : la primera es que tiene letras en desorden –esto es, contiene la cadena “ba”– como en “abba”; la segunda es que, no habiendo letras en desorden, la cantidad de a’s y b’s no es la misma, como en “aaaa”, “abbb”, etc. El caso (1) es muy simple, pues el lenguaje L1 cuyas palabras contienen la cadena “ba” es regular y por lo tanto LLC. Es f´acil ver que el caso (2) corresponde al lenguaje L2 = {an bm |n = m}, pues como no tiene b inmediatamente antes que a, todas las a est´an antes de todas las b. L2 puede ser expresado como la uni´on de dos lenguajes LLC, como se vio en un ejemplo presentado anteriormente, y por la cerradura de los LLC a la uni´on, se concluye que L1 es LLC. Finalmente, {an bn }c = L1 ∪L2, y por la cerradura de los LLC a la uni´on, se concluye que L es LLC. 4.10. Propiedades de decidibilidad de los LLC Hay ciertas preguntas sobre los lenguajes libres de contexto y sus gram´aticas que es posible contestar, mientras que hay otras preguntas que no se pueden contestar en el caso general. Vamos a examinar primero dos preguntas que s´ı se pueden contestar con seguridad y en un tiempo finito. Para estas preguntas es posible dar un algoritmo o “receta” tal que, sigui´endolo paso por paso, se llega a concluir un s´ı o un no. Tales algoritmos se llaman algoritmos de decisi´on, pues nos permiten decidir la respuesta a una pregunta. Las preguntas que vamos a contestar son las siguientes: 19 Lc es una abreviatura para Σ∗ − L.
  • 148. 4.10. PROPIEDADES DE DECIDIBILIDAD DE LOS LLC 139 Teorema.- Dadas una gram´atica G y una palabra w, es posible decidir si w ∈ L(G) cuando las reglas de G cumplen la propiedad: “Para toda regla A → α, |α| > 1, o bien α ∈ Σ, es decir, el lado derecho tiene varios s´ımbolos, o si tiene exactamente un s´ımbolo, ´este es terminal.” Prueba: La idea para probar el teorema es que cada derivaci´on incrementa la longitud de la palabra, porque el lado derecho de las reglas tiene en general m´as de un s´ımbolo. En vista de que la longitud de la palabra crece con cada paso de derivaci´on, s´olo hay que examinar las derivaciones hasta una cierta longitud finita. Por ejemplo, la gram´atica de los par´entesis bien balanceados cumple con la propiedad requerida: 1. S → () 2. S → SS 3. S → (S) Como en esta gram´atica el lado derecho mide 2 o m´as s´ımbolos, la aplicaci´on de cada regla reemplaza un s´ımbolo por dos o m´as. Por lo tanto, para saber si hay una derivaci´on de la palabra ()(()), que mide 6 s´ımbolos, s´olo necesitamos examinar las derivaciones (izquierdas) de 5 pasos a lo m´as -y que terminan en una palabra hecha ´unicamente de terminales. Estas derivaciones son las siguientes: 1 paso: S ⇒ () 2 pasos: S ⇒ (S) ⇒ (()) 3 pasos: S ⇒ (S) ⇒ ((S)) ⇒ ((())) S ⇒ SS ⇒ ()S ⇒ ()() 4 pasos: S ⇒ (S) ⇒ ((S)) ⇒ (((S))) ⇒ (((()))) S ⇒ (S) ⇒ (SS) ⇒ (()S) ⇒ (()()) S ⇒ SS ⇒ ()S ⇒ ()(S) ⇒ ()(()) S ⇒ SS ⇒ (S)S ⇒ (())S ⇒ (())() 5 pasos: S ⇒ (S) ⇒ ((S)) ⇒ (((S))) ⇒ ((((S)))) ⇒ ((((())))) S ⇒ (S) ⇒ ((S)) ⇒ ((SS)) ⇒ ((()S)) ⇒ ((()())) S ⇒ (S) ⇒ (SS) ⇒ (()S) ⇒ (()(S)) ⇒ (()(())) S ⇒ (S) ⇒ (SS) ⇒ ((S)S) ⇒ ((())S) ⇒ ((())()) S ⇒ SS ⇒ ()S ⇒ ()(S) ⇒ ()((S)) ⇒ ()((()))
  • 149. 140 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO S ⇒ SS ⇒ ()S ⇒ ()SS ⇒ ()()S ⇒ ()()() S ⇒ SS ⇒ (S)S ⇒ (())S ⇒ (())(S) ⇒ (())(()) S ⇒ SS ⇒ (S)S ⇒ ((S))S ⇒ ((()))S((()))() S ⇒ SS ⇒ SSS ⇒ ()SS ⇒ ()()S ⇒ ()()() Es f´acil ver que ´estas son las ´unicas posibles derivaciones. 20 Con base en este grupo de derivaciones es simple probar que la palabra “(()()(” -de 6 caracteres de longitud- no pertenece al lenguaje generado por la gram´atica, pues si as´ı fuera, estar´ıa entre alguna de las palabras derivadas en 5 pasos o menos. En el caso general se incluyen reglas de la forma A → a, con a ∈ Σ. Para empezar observamos que las reglas de la forma A → a producen exclusivamente un terminal, por lo que, en el peor caso, se aplicaron tantas veces reglas de este tipo como letras tenga la palabra generada. Por ejemplo, sea la gram´atica de las expresiones aritm´eticas: 1. E → E + E 2. E → E ∗ E 3. E → x 4. E → y Esta gram´atica tiene reglas, como E → x y E → y que tienen en su lado derecho un caracter. Entonces, dada una expresi´on aritm´etica como x ∗ y + x, que tiene 5 s´ımbolos, a lo m´as se usan ese tipo de reglas en 5 ocasiones (de hecho se ve que en una derivaci´on de x ∗ y + x ese tipo de reglas se usa exactamente en 3 ocasiones). Ahora bien, para generar 5 terminales con reglas de la forma A → a se requieren 5 no-terminales. Esos 5 no-terminales se generan con las reglas de la forma A → a, donde |a| > 1. En el peor de los casos, |a| = 2, por lo que se requerir´an 4 pasos de derivaci´on para llegar a los 5 no-terminales. Eso da un total de 5+4 = 9 pasos de derivaci´on. As´ı, si queremos determinar en forma segura si la palabra x ∗ y + x pertenece o no al lenguaje generado por la gram´atica, s´olo tenemos que examinar las derivaciones de longitud menor o igual a 9. En general, para una palabra w de longitud l hay que examinar las derivaciones de longitud hasta 2 ∗ l − 1. Si la palabra se encuentra al final de alguna de esas derivaciones, la palabra pertenece al lenguaje, y en caso contrario no pertenece al lenguaje. Esto termina la prueba del teorema. QED N´otese que en el enunciado del teorema nos estamos restringiendo a las GLC que satis- facen la condici´on: para toda regla A → α, |α| > 1, o bien α ∈ Σ, es decir, el lado derecho tiene varios s´ımbolos, o si tiene exactamente un s´ımbolo, ´este es terminal. Cabe preguntarse 20 Ejercicio: hallar el m´etodo que se sigui´o para obtener las derivaciones mostradas, y probar que no se puede “escapar” ninguna derivaci´on.
  • 150. 4.11. EJERCICIOS 141 si esto constituye una limitaci´on, en el sentido de que hay muchas GLC que no cumplen dicha condici´on. De hecho la respuesta es no, pues existe un procedimiento para pasar de una GLC arbitraria a una GLC que satisfaga la condici´on del teorema. Corolario .- Dada cualquier GLC G, es posible decidir si w ∈ L(G). La prueba de este corolario consiste en dar un procedimiento para transformar una GLC cualquiera G en una GLC G que satisface las condiciones del teorema arriba enunciado. 4.11. Ejercicios 1. Proponer una gram´atica libre de contexto que genere las palabras binarias que comien- zan con 1. 2. Considerar el lenguaje en {a, b} en que las palabras tienen la misma cantidad de a’s que de b’s. Proponer: a) Una GLC incorrecta para este lenguaje, esto es, que genere palabras que no de- ber´ıa; b) Una GLC incompleta, esto es, que no pueda generar algunas de las palabras de este lenguaje; c) Una GLC que sea a la vez incorrecta e incompleta para este lenguaje. d) Una GLC correcta y completa; e) Una derivaci´on izquierda de la palabra abaababb usando esta ´ultima gram´atica. 3. Proponer gram´aticas libres de contexto para los siguientes lenguajes: a) El lenguaje {ai bj ck | ¬(i = j = k)} b) El lenguaje en {a, b}∗ en que las palabras tienen la misma cantidad de a’s y b’s. c) Las palabras en {a, b, c} en que hay m´as a’s que c’s (la cantidad de b’s puede ser cualquiera). d) Un lenguaje de par´entesis, llaves y corchetes bien balanceados. Por ejemplo, las palabras “()[]”, “([])” y “()[[]]” son correctas, mientras que “[[]” y “([)]” no lo son. N´otese que en esta ´ultima palabra los par´entesis solos est´an balanceados, as´ı como los corchetes solos, pero su combinaci´on no lo est´a. e) {ai bj ck | i = j − k} f ) El lenguaje {an bn+m cm } (Ayuda: usar la concatenaci´on de lenguajes). g) El lenguaje {an bk cm , n ≤ k ≤ n + m} (Ayuda: usar la mezcla de gram´aticas, y la soluci´on al problema anterior). 4. Transformar las gram´aticas del problema 3 a la forma normal de Chomsky. Para esto,
  • 151. 142 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO a) Eliminar las producciones vac´ıas, b) Las reglas “in´utiles”, c) Las reglas inaccesibles, d) Poner en la “forma intermedia” (s´olo variables o s´olo constantes en el lado derecho de las reglas). e) Limitar a 2 la longitud m´axima del lado derecho de las reglas. 5. Mostrar que la siguiente gram´atica es / no es ambigua: G = (V, Σ, R, S), con: V = {PROG, IF, STAT} Σ = {if, then, else, condici´on, stat} R = {PROG → STAT, STAT → if condici´on then STAT, STAT → if condici´on then STAT else STAT, STAT → stat} S = PROG 6. Contestar las siguientes preguntas, justificando la respuesta: a) ¿La concatenaci´on de un lenguaje regular con uno libre de contexto ser´a necesari- amente libre de contexto? b) ¿Todo lenguaje libre de contexto tendr´a alg´un subconjunto que sea regular? c) ¿Todo lenguaje libre de contexto ser´a subconjunto de alg´un lenguaje regular? d) Si A ∪ B es libre de contexto, ¿ser´a A libre de contexto? e) ¿La intersecci´on de un lenguaje regular con un libre de contexto ser´a regular? f ) ¿La uni´on de un lenguaje libre de contexto con un lenguaje regular es libre de contexto? g) ¿La intersecci´on de un lenguaje libre de contexto con un lenguaje regular es reg- ular? h) ¿El reverso de un lenguaje libre de contexto es tambi´en libre de contexto? (Ayuda: considerar una transformaci´on para obtener el reverso del lado derecho de las reglas). 7. Probar la correcci´on de las gram´aticas propuestas en el ejercicio 3. Poner especial cuidado al generar el enunciado generalizado, as´ı como al aplicarlo a los casos especiales. 8. Sea L = {an bm cp dq | n = m = p + q}. ¿Es L libre de contexto? Proponga (y explique) una GLC o pruebe que no es posible. 9. Probar mediante el teorema de bombeo que el lenguaje {an bn+m cn+m+k , n, m, k = 1, 2, 3, . . .} no es libre de contexto. (Ayuda: las cadenas v e y se pueden repetir 0 veces). 10. Llamamos “´util” a un s´ımbolo no terminal A de una gram´atica libre de contexto que cumple con dos propiedades:
  • 152. 4.11. EJERCICIOS 143 a) S ⇒∗ aAb, a, b ∈ (V ∪Σ)∗ , donde V es el alfabeto de las variables y Σ (terminales y no terminales), b) A ⇒∗ w, w ∈ Σ∗ . Dada una cierta GLC y un s´ımbolo no terminal A, ¿Es decidible si A es ´util o no lo es? Pruebe la respuesta, y en caso afirmativo proponga el m´etodo de decisi´on. 11. ¿El lenguaje {w = ai bm cn | i > m > n} es libre de contexto? Probar la respuesta.
  • 153. 144 CAP´ITULO 4. GRAM ´ATICAS Y LENGUAJES LIBRES DE CONTEXTO
  • 154. Cap´ıtulo 5 Aut´omatas de Pila Puesto que los aut´omatas finitos no son suficientemente poderosos para aceptar los LLC, 1 cabe preguntarnos qu´e tipo de aut´omata se necesitar´ıa para aceptar los LLC. Una idea es agregar algo a los AF de manera que se incremente su poder de c´alculo. Para ser m´as concretos, tomemos por ejemplo el lenguaje de los par´entesis bien balancea- dos, que sabemos que es propiamente LLC. 2 ¿Qu´e m´aquina se requiere para distinguir las palabras de par´entesis bien balanceados de las que tienen los par´entesis desbalanceados? Una primera idea podr´ıa ser la de una m´aquina que tuviera un registro aritm´etico que le permitiera contar los par´entesis; dicho registro ser´ıa controlado por el control finito, quien le mandar´ıa s´ımbolos I para incrementar en uno el contador y D para decrementarlo en uno. A su vez, el registro mandar´ıa un s´ımbolo Z para indicar que est´a en cero, o bien N para indicar que no est´a en cero. Entonces para analizar una palabra con par´entesis lo que har´ıamos ser´ıa llevar la cuenta de cu´antos par´entesis han sido abiertos pero no cerrados; en todo momento dicha cuenta debe ser positiva o cero, y al final del c´alculo debe ser exactamente cero. Por ejemplo, para la palabra (())() el registro tomar´ıa sucesivamente los valores 1, 2, 1, 0, 1, 0. Recomendamos al lector tratar de dise˜nar en detalle la tabla describiendo las transiciones del aut´omata. Como un segundo ejemplo, consid´erese el lenguaje de los pal´ındromos (palabras que se leen igual al derecho y al rev´es, como ANITALAVALATINA). Aqu´ı la m´aquina contadora no va a funcionar, porque se necesita recordar toda la primera mitad de la palabra para poder compararla con la segunda mitad. M´as bien pensar´ıamos en una m´aquina que tuviera la capacidad de recordar cadenas de caracteres arbitrarias, no n´umeros. Siguiendo esta idea, podr´ıamos pensar en a˜nadir al AF un almacenamiento auxiliar, que llamaremos pila, donde se podr´an ir depositando caracter por caracter cadenas arbitrariamente grandes, como se aprecia en la figura 5.1. A estos nuevos aut´omatas con una pila auxiliar los llamaremos 1 ¡Cuidado! Esto no impide que un LLC en particular pueda ser aceptado por un AF, cosa trivialmente cierta si tomamos en cuenta que todo lenguaje regular es a la vez LLC. 2 “Propiamente LLC” quiere decir que el lenguaje en cuesti´on es LLC pero no regular. 145
  • 155. 146 CAP´ITULO 5. AUT ´OMATAS DE PILA b a a b a b q0   q1   q2   q3   a a Figura 5.1: Aut´omata con una pila auxiliar Aut´omatas de Pila, abreviado AP. 5.1. Funcionamiento de los Aut´omatas de Pila (infor- mal) La pila funciona de manera que el ´ultimo caracter que se almacena en ella es el primero en salir (“LIFO” por las siglas en ingl´es), como si empil´aramos platos uno encima de otro, y naturalmente el primero que quitaremos es el ´ultimo que hemos colocado. Un aspecto crucial de la pila es que s´olo podemos modificar su “tope”, que es el extremo por donde entran o salen los caracteres. Los caracteres a la mitad de la pila no son accesibles sin quitar antes los que est´an encima de ellos. La pila tendr´a un alfabeto propio, que puede o no coincidir con el alfabeto de la palabra de entrada. Esto se justifica porque puede ser necesario introducir en la pila caracteres especiales usados como separadores, seg´un las necesidades de dise˜no del aut´omata. Al iniciar la operaci´on de un AP, la pila se encuentra vac´ıa. Durante la operaci´on del AP, la pila puede ir recibiendo (y almacenando) caracteres, seg´un lo indiquen las transiciones ejecutadas. Al final de su operaci´on, para aceptar una palabra, la pila debe estar nuevamente vac´ıa. En los AP las transiciones de un estado a otro indican, adem´as de los caracteres que se consumen de la entrada, tambi´en lo que se saca del tope de la pila, asi como tambi´en lo que se mete a la pila. Antes de formalizar los AP, vamos a utilizar una notaci´on gr´afica, parecida a la de los diagramas de los aut´omatas finitos, como en los AP de las figuras 5.2 (a) y (b). Para las transiciones usaremos la notaci´on “w/α/β”, donde w es la entrada (secuencia de caracteres) que se consume, α es lo que se saca de la pila, y β lo que se mete a la pila. Por ejemplo, la transici´on “a/ε/b” indica que se consume de la entrada un caracter a, no
  • 156. 5.2. DISE ˜NO DE AP 147 se saca nada de la pila, y se mete b a la pila. Se supone que primero se ejecuta la operaci´on de sacar de la pila y luego la de meter. Al igual que los AF, los AP tienen estados finales, que permiten distinguir cuando una palabra de entrada es aceptada. De hecho, para que una palabra de entrada sea aceptada en un AP se deben cumplir todas las condiciones siguientes: 1. La palabra de entrada se debe haber agotado (consumido totalmente). 2. El AP se debe encontrar en un estado final. 3. La pila debe estar vac´ıa. 5.2. Dise˜no de AP El problema de dise˜no de los AP consiste en obtener un AP M que acepte exactamente un lenguaje L dado. Por exactamente queremos decir, como en el caso de los aut´omatas finitos, que, por una parte, todas las palabras que acepta efectivamente pertenecen a L, y por otra parte, que M es capaz de aceptar todas las palabras de L. Aunque en el caso de los AP no hay metodolog´ıas tan generalmente aplicables como era el caso de los aut´omatas finitos, siguen siendo v´alidas las ideas b´asicas del dise˜no sistem´atico, en particular establecer claramente qu´e es lo que “recuerda” cada estado del AP antes de ponerse a trazar transiciones a diestra y siniestra. Para los AP, adicionalmente tenemos que establecer una estrategia clara para el manejo de la pila. En resumen, a la hora de dise˜nar un AP tenemos que repartir lo que requiere ser “recor- dado” entre los estados y la pila. Distintos dise˜nos para un mismo problema pueden tomar decisiones diferentes en cuanto a qu´e recuerda cada cual. Ejemplo.- Dise˜nar un AP que acepte exactamente el lenguaje con palabras de la forma an bn , para cualquier n´umero natural n. Una idea que surge inmediatamente es la de utilizar la pila como “contador” para recordar la cantidad de a’s que se consumen, y luego confrontar con la cantidad de b’s. Una primera versi´on de este dise˜no utiliza un s´olo estado q, con transiciones a/ε/a y b/a/ε de q a s´ı mismo, como en la figura 5.2(a). Para verificar el funcionamiento del aut´omata, podemos simular su ejecuci´on, listando las situaciones sucesivas en que se encuentra, mediante una tabla que llamaremos “traza de ejecuci´on”. Las columnas de una traza de ejecuci´on para un AP son: el estado en que se
  • 157. 148 CAP´ITULO 5. AUT ´OMATAS DE PILA εa/ /a εb/a/ q (a) Incorrecto b/a/ ε εa/ /a εb/a/ 21 qq (b) Correcto Figura 5.2: AP para el lenguaje an bn encuentra el aut´omata, lo que falta por leer de la palabra de entrada, y el contenido de la pila. Por ejemplo, la traza de ejecuci´on del AP del ´ultimo ejemplo, para la palabra aabb, se muestra a continuaci´on: 3 Estado Por leer Pila q aabb ε q abb a q bb aa q b a q ε ε Conclu´ımos que el AP efectivamente puede aceptar palabras como an bn . Sin embargo, hay un problema: ¡el AP tambi´en acepta palabras como abab, que no tienen la forma deseada! (es f´acil construir la traza de ejecuci´on correspondiente para convencerse de ello). El problema viene de que no hemos recordado cuando se terminan las a y principian las b, por eso ha sido posible mezclarlas en abab. Una soluci´on es utilizar los estados para memorizar las situaciones de estar consumiendo a o estar consumiendo b. El diagrama de estados correspondiente se muestra en la figura 5.2(b). Ejemplo.- Proponer un AP que acepte el lenguaje de los pal´ındromos con un n´umero par de s´ımbolos, esto es, palabras que se leen igual de izquierda a derecha y de derecha a izquierda, y que tienen por tanto la forma wwR , donde wR es el reverso de w (esto es, invertir el orden), en el alfabeto {a, b}. Por ejemplo, las palabras abba, aa y bbbbbb pertenecen a este lenguaje, mientras que aab y aabaa no. Una estrategia de soluci´on para dise˜nar este AP ser´ıa almacenar en la pila la primera mitad de la palabra, y luego irla comparando letra por letra contra la segunda mitad. Ten- dr´ıamos dos estados s y f, para recordar que estamos en la primera o segunda mitad de la palabra. En la figura 5.2 se detalla este AP. 3 Suponemos que el tope de la pila est´a del lado izquierdo, aunque en este ejemplo da lo mismo.
  • 158. 5.2. DISE ˜NO DE AP 149 b/ /bε a/ /aε ε/ε/ε a/a/ b/b/ ε ε fs Figura 5.3: AP para el lenguaje {wwR } Se puede apreciar en el AP de dicha figura la presencia de una transici´on de s a f, en que ni se consumen caracteres de la entrada, ni se manipula la pila. Esta transici´on parece muy peligrosa, porque se puede “disparar” en cualquier momento, y si no lo hace exactamente cuando hemos recorrido ya la mitad de la palabra, el AP podr´a llegar al final a un estado que no sea final, rechazando en consecuencia la palabra de entrada. Entonces, ¿c´omo saber que estamos exactamente a la mitad de la palabra? Conviene en este punto recordar que en un aut´omata no determinista una palabra es aceptada cuando existe un c´alculo que permite aceptarla, independientemente de que un c´alculo en particular se vaya por un camino err´oneo. Lo importante es, pues, que exista un c´alculo que acepte la palabra en cuesti´on. Por ejemplo, la siguiente tabla muestra un c´alculo que permite aceptar la palabra w = abba: Estado Falta leer Pila Transici´on s abba ε s bba a 1 s ba ba 2 f ba ba 3 f a a 5 f ε ε 4 5.2.1. Combinaci´on modular de AP En los AP tambi´en es posible aplicar m´etodos de combinaci´on modular de aut´omatas, como hicimos con los aut´omatas finitos. En particular, es posible obtener AP que acepten la uni´on y concatenaci´on de los lenguajes aceptados por dos AP dados. En el caso de la uni´on, dados dos AP M1 y M2 que aceptan respectivamente los lenguajes L1 y L2, podemos obtener un AP que acepte la uni´on L1 ∪L2, introduciendo un nuevo estado inicial s0 con transiciones ε/ε/ε a los dos antiguos estados iniciales s1 y s2, como se ilustra en la figura 5.4. 4 4 El procedimiento de combinaci´on de AP para obtener la uni´on de aut´omatas puede ser descrito en forma m´as precisa utilizando la representaci´on formal de los AP, que se estudia en la siguiente secci´on; sin embargo, hacer esto es directo, y se deja como ejercicio (ver secci´on de ejercicios).
  • 159. 150 CAP´ITULO 5. AUT ´OMATAS DE PILA  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢ £¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡££¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£ ¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤ 0 s1 s s2 2F F1 ε/ε/ε ε/ε/ε Figura 5.4: Uni´on de AP Ejemplo.- Obtener un AP que acepte el lenguaje {an bm |n = m}. Claramente este lenguaje es la uni´on de {an bm |n > m} con {an bm |n < m}, por lo que basta obtener los AP de cada uno de ellos, y combinarlos con el m´etodo descrito. Ejemplo.- Dise˜nar un AP que acepte el lenguaje L = {ai bj ck |¬(i = j = k)}. Nos damos cuenta de que L es la uni´on de dos lenguajes, que son: L = {ai bj ck |i = j} ∪ {ai bj ck |j = k} Para cada uno de estos dos lenguajes es f´acil obtener su AP. Para el primero de ellos, el AP almacenar´ıa primero las a’s en la pila, para luego ir descontando una b por cada a de la pila; las a’s deben acabarse antes de terminar con las b’s o bien deben sobrar a’s al terminar con las b’s; las c’s no modifican la pila y simplemente se verifica que no haya a o b despu´es de la primera c. Dejamos los detalles como ejercicio para el lector. Tambi´en es posible obtener modularmente un AP que acepte la concatenaci´on de los lenguajes aceptados por dos AP dados. De hecho ya vimos en el cap´ıtulo 4 que la uni´on de dos lenguajes libres de contexto es tambi´en libre de contexto, pues tiene una gram´atica libre de contexto. Sin embargo, la construcci´on de un AP que acepte la concatenaci´on de dos lenguajes a partir de sus respectivos AP M1 y M2, es ligeramente m´as complicada que para el caso de la uni´on. La idea b´asica ser´ıa poner transiciones vac´ıas que vayan de los estados finales de M1 al estado inicial de M2. Sin embargo, existe el problema: hay que garantizar que la pila se encuentre vac´ıa al pasar de M1 a M2, pues de otro modo podr´ıa resultar un AP incorrecto. Para esto, es posible utilizar un caracter especial, por ejemplo “@”, que se mete a la pila antes de iniciar la operaci´on de M1, el cual se saca de la pila antes de iniciar la operaci´on de M2. Los detalles se dejan como ejercicio (ver secci´on de ejercicios).
  • 160. 5.3. FORMALIZACI ´ON DE LOS AP 151 5.3. Formalizaci´on de los AP Un aut´omata de pila es un s´extuplo (K, Σ, Γ, ∆, s, F), donde: K es un conjunto de estados Σ es el alfabeto de entrada Γ es el alfabeto de la pila s ∈ K es el estado inicial F ⊆ K es un conjunto de estados finales, ∆ ⊆ (K × Σ∗ × Γ∗ ) × (K × Γ∗ ) es la relaci´on de transici´on. Ahora describiremos el funcionamiento de los AP. Si tenemos una transici´on de la forma ((p, u, β), (q, γ)) ∈ ∆, el AP hace lo siguiente: Estando en el estado p, consume u de la entrada; Saca β de la pila; Llega a un estado q; Mete γ en la pila Las operaciones t´ıpicas en las pilas –t´ıpicamente llamadas en ingl´es el “push” y el “pop”– pueden ser vistas como casos particulares de las transiciones de nuestro AP; en efecto, si s´olo queremos meter la cadena γ a la pila, se har´ıa con la transici´on ((p, u, ε), (q, γ)) (“push”), mientras que si s´olo queremos sacar caracteres de la pila se har´a con la transici´on ((p, u, β), (q, ε)) (“pop”). Ahora formalizaremos el funcionamiento de los AP, para llegar a la definici´on del lenguaje aceptado por un AP. Para ello seguiremos el mismo m´etodo que usamos en el caso de los AF, m´etodo que reposa completamente en la noci´on de configuraci´on. Definici´on.- Una configuraci´on es un elemento de K × Σ∗ × Γ∗ . Por ejemplo, una configuraci´on podr´ıa ser [[q, abbab, ⊗aa#a]] –obs´ervese que seguimos la misma notaci´on que para representar las configuraciones de los AF. Puede verse que las transiciones se definen como una relaci´on, no como una funci´on, por lo que de entrada se les formaliza como aut´omatas no deterministas. Ahora definimos la relaci´on entre configuraciones de la manera siguiente:
  • 161. 152 CAP´ITULO 5. AUT ´OMATAS DE PILA Definici´on.- Sea M = (K, Σ, Γ, ∆, s, F) un AP, entonces [[p, ux, βα]]| M [[q, x, γα]] ssi existe ((p, u, β), (q, γ)) ∈ ∆. En general vamos a omitir el sub´ındice de M , quedando sim- plemente como . La cerradura reflexiva y transitiva de es ∗ . Definici´on.- Un AP M = (K, Σ, Γ, ∆, s, F) acepta una palabra w ∈ Σ∗ ssi [[s, w, ε]] ∗ M [[p, ε, ε]], donde p ∈ F. L(M) es el conjunto de palabras aceptadas por M. Ejemplo.- Formalizar el AP de la figura 5.2, que acepta el lenguaje {wwR }, w ∈ {a, b}. Soluci´on.- El AP es el s´extuplo (K, Σ, Γ, ∆, s, F), donde K = {s, f}, F = {f}, Σ = {a, b, c}, Γ = {a, b} ∆ est´a representada en la siguiente tabla: (s, a, ε) (s, a) (s, b, ε) (s, b) (s, ε, ε) (f, ε) (f, a, a) (f, ε) (f, b, b) (f, ε) 5.4. Relaci´on entre AF y AP Teorema.- Todo lenguaje aceptado por un AF es tambi´en aceptado por un AP Este resultado debe quedar intuitivamente claro, puesto que los AP son una extensi´on de los AF. Prueba: Sea (K, Σ, ∆, s, F) un AF; el AP (K, Σ, ∅, ∆ , s, F), con ∆ = {((p, u, ε), (q, ε)) | (p, u, q) ∈ ∆} acepta el mismo lenguaje. 5.5. Relaci´on entre AP y LLC Ahora vamos a establecer el resultado por el que iniciamos el estudio de los AP, es decir, verificar si son efectivamente capaces de aceptar los LLC. Teorema.- Los aut´omatas de pila aceptan exactamente los LLC. Vamos a examinar la prueba de esta afirmaci´on, no solamente por el inter´es por la rig- urosidad matem´atica, sino sobre todo porque provee un m´etodo de utilidad pr´actica para transformar una GLC en un AP. La prueba de este teorema se puede dividir en dos partes:
  • 162. 5.5. RELACI ´ON ENTRE AP Y LLC 153 1. Si M es un AP, entonces L(M) es un LLC 2. Si L es un LLC, entonces hay un AP M tal que L(M) = L Vamos a presentar ´unicamente la prueba con la parte 2, que consideramos de mayor rele- vancia pr´actica. La otra parte de la prueba (que tambi´en es un procedimiento de conversi´on) puede consultarse en la referencia [21]. Sea una gram´atica G = (V, Σ, R, S). Entonces un AP M que acepta exactamente el lenguaje generado por G se define como sigue: M = ({p, q}, Σ, V ∪ Σ, ∆, p, {q}) donde ∆ contiene las siguientes transiciones: 1. Una transici´on ((p, ε, ε), (q, S)) 2. Una transici´on ((q, ε, A), (q, x)) para cada A → x ∈ R 3. Una transici´on ((q, σ, σ), (q, ε)) para cada σ ∈ Σ Ejemplo.- Obtener un AP que acepte el LLC generado por la gram´atica con reglas: 1. S → aSa 2. S → bSb 3. S → c Las transiciones del AP correspondiente est´an dadas en la tabla siguiente: 1 (p, ε, ε) (q, S) 2 (q, ε, S) (q, aSa) 3 (q, ε, S) (q, bSb) 4 (q, ε, S) (q, c) 5 (q, a, a) (q, ε) 6 (q, b, b) (q, ε) 7 (q, c, c) (q, ε) El funcionamiento de este AP ante la palabra abcba aparece en la siguiente tabla:
  • 163. 154 CAP´ITULO 5. AUT ´OMATAS DE PILA Estado Falta leer Pila p abcba ε q abcba S q abcba aSa q bcba Sa q bcba bSba q cba Sba q cba cba q ba ba q a a q ε ε Vamos a justificar intuitivamente el m´etodo que acabamos de introducir para obtener un AP equivalente a una gram´atica dada. Si observamos las transiciones del AP, veremos que solamente tiene dos estados, p y q, y que el primero de ellos desaparece del c´alculo en el primer paso; de esto conclu´ımos que el AP no utiliza los estados para “recordar” caracter´ısticas de la entrada, y por lo tanto reposa exclusivamente en el almacenamiento de caracteres en la pila. En efecto, podemos ver que las transiciones del tipo 2 (transiciones 2-4 del ejemplo), lo que hacen es reemplazar en la pila una variable por la cadena que aparece en el lado derecho de la regla correspondiente. Dado que la (´unica) transici´on de tipo 1 (transici´on 1 del ejemplo) coloca el s´ımbolo inicial en la pila, a continuaci´on lo que hacen las reglas de tipo 2 es realmente efectuar toda la derivaci´on dentro de la pila de la palabra de entrada, reemplazando un lado izquierdo de una regla por su lado derecho. Una vez hecha la derivaci´on de la palabra de entrada, –la cual estar´ıa dentro de la pila, sin haber a´un gastado un solo caracter de la entrada– podemos compararla caracter por caracter con la entrada, por medio de las transiciones de tipo 3. Existe sin embargo un problema t´ecnico: si observamos la “corrida” para la palabra abcba, nos daremos cuenta de que no estamos aplicando las reglas en el orden descrito en el p´arrafo anterior, esto es, primero la transici´on del grupo 1, luego las del grupo 2 y finalmente las del grupo 3, sino que m´as bien en la cuarta l´ınea de la tabla se consume un caracter a (aplicaci´on de una transici´on del grupo 3) seguida de la aplicaci´on de una transici´on del grupo 2. Esto no es casualidad; lo que ocurre es que las variables no pueden ser reemplazadas por el lado derecho de una regla si dichas variables no se encuentran en el tope de la pila. En efecto, recu´erdese que los AP solo pueden accesar el caracter que se encuentra en el tope de la pila. Por esto, se hace necesario, antes de reemplazar una variable por la cadena del lado derecho de una regla, “desenterrar” dicha variable hasta que aparezca en el tope de la pila, lo cual puede hacerse consumiendo caracteres de la pila (y de la entrada, desde luego) mediante la aplicaci´on de transiciones del tipo 3. De la construcci´on del AP que hemos descrito, conclu´ımos con la siguiente proposici´on: S ⇒∗ w ssi [[p, w, ε]] ∗ M(G) [[q, ε, ε]]
  • 164. 5.6. COMPILADORES LL 155 SINTACTICO ANALIZADOR LEXICO SIMBOLOS TABLA DE ANALIZADOR DE CODIGO GENERADOR Figura 5.5: Diagrama de un compilador donde M(G) denota al AP construido a partir de la gram´atica G por el procedimiento reci´en descrito. Todav´ıa nos queda por probar que para todo AP hay una gram´atica equivalente. A este respecto remitimos al lector a la referencia [10]. La equivalencia de los AP y de las GLC permite aplicar todas las propiedades de los LLC para resolver problemas de dise˜no de AP. 5.6. Compiladores LL El m´etodo que hemos visto para obtener un AP a partir de una GLC puede ser consid- erado como una manera de construir un compilador para el lenguaje correspondiente a la GLC dada. De una manera muy general, un compilador –como los que se usan para traducir un lenguaje de programaci´on al lenguaje de m´aquina– est´a compuesto por las partes que se ilustran en la figura 5.5. Sus principales partes son: Un analizador l´exico, que recibe los caracteres del archivo de entrada, y entrega los lla- mados “tokens”, que representan los elementos del lenguaje –tales como las palabras claves (como “begin”, “integer”, etc.), los operadores (tales como “+”), los identifi- cadores propuestos por el usuario, y otros elementos. Generalmente varios caracteres corresponden a un s´olo “token”. As´ı, los dem´as componentes del compilador ya no consideran la entrada como una secuencia de caracteres, sino como una secuencia de “tokens”. Un beneficio adicional del analizador l´exico es que “filtra” caracteres in´utiles desde el punto de vista de la traducci´on que se quiere hacer, como por ejemplo los comentarios del programador. El analizador l´exico puede ser considerado como un aut´omata con salida (como los aut´omatas de Moore y de Mealy de la secci´on 2.7), y son muchas veces construidos a partir de la definici´on de “tokens” mediante Expre- siones Regulares.
  • 165. 156 CAP´ITULO 5. AUT ´OMATAS DE PILA Un analizador sint´actico, que toma como entrada los “tokens” y verifica que su secuen- cia corresponde a la definici´on del lenguaje dada por medio de una gram´atica libre de contexto. Mediante el uso de herramientas adecuadas, como el generador de compi- ladores “yacc” [9], es posible producir un analizador sint´actico a partir de la definici´on del lenguaje mediante una gram´atica. Un generador de c´odigo, que guiado por el analizador sint´actico, produce realmente el resultado de la compilaci´on, que es la traducci´on del lenguaje fuente al lenguaje deseado (generalmente lenguaje ensamblador). Una tabla de s´ımbolos, que registra las definiciones de identificadores dadas por el usuario en su programa, y las utiliza posteriormente para resolver las referencias que se hacen a ellos en el programa a traducir. Para una descripci´on detallada de los compiladores y de las t´ecnicas usadas para con- struirlos, v´ease la referencia [1]. 5.6.1. Principio de previsi´on Desde luego, para tener un verdadero compilador se requiere que se trate de un AP determinista, pues ser´ıa inaceptable que un mismo compilador diera resultados diferentes al compilar varias veces un mismo programa. Una manera de forzar a que un AP no determinista se vuelva determinista consiste en proveer un m´etodo para decidir, cuando hay varias transiciones aplicables, cual de ellas va a ser efectivamente aplicada. En el caso de los compiladores esto se puede hacer mediante el llamado principio de previsi´on. El principio de previsi´on consiste en que podamos “observar” un caracter de la palabra de entrada que a´un no ha sido le´ıdo (esto es llamado en ingl´es “lookahead”, mirar hacia adelante). El caracter le´ıdo por adelantado nos permite en algunas ocasiones decidir ade- cuadamente cual de las transiciones del AP conviene aplicar. Ejemplo.- Sup´ongase la GLC con reglas S → aSb, S → ε, que representa el lenguaje {an bn }. La construcci´on del AP correspondiente es directa y la dejamos como ejercicio. Ahora bien, teniendo una palabra de entrada aabb, la traza de ejecuci´on comenzar´ıa de la manera siguiente: Estado Falta leer Pila p aabb ε q aabb S En este punto, no se sabe si reemplazar en la pila S por ε o por aSb, al ser transiciones aplicables tanto ((q, ε, S), (q, ε)) como ((q, ε, S), (q, aSb)). En cambio, si tomamos en cuenta
  • 166. 5.6. COMPILADORES LL 157 que el siguiente caracter en la entrada ser´a a, es evidente que no conviene reemplazar S por ε, pues entonces la a de entrada no podr´ıa ser cancelada. Entonces hay que aplicar la transici´on ((q, ε, S), (q, aSb)). Continuamos la ejecuci´on: Estado Falta leer Pila . . . . . . . . . q aabb aSb q abb Sb q abb aSbb q bb Sbb Al ver que el siguiente caracter de entrada ser´a una b, nos damos cuenta de que no conviene reemplazar en la pila S por aSb, pues la b de la entrada no podr´a cancelarse contra la a de la pila. Entonces aplicamos la otra transici´on disponible, que es ((q, ε, S), (q, ε)). La ejecuci´on contin´ua: Estado Falta leer Pila . . . . . . . . . q bb bb q b b q ε ε con lo cual la palabra de entrada es aceptada. Resumiendo, en este ejemplo la regla para decidir sobre la transici´on a aplicar, bas´andose en la previsi´on del siguiente caracter a leer, fue esta: si el siguiente caracter es a, reemplazar en la pila S por aSb, y si es b, reemplazar S por ε. Esta regla puede ser representada mediante la siguiente tabla: a b ε S aSb ε En esta tabla, las columnas (a partir de la segunda) se refieren al siguiente caracter que ha de ser le´ıdo (la “previsi´on”), habiendo una columna marcada “ε” por si en vez de haber un caracter siguiente se encuentra el fin de la palabra. La primera columna contiene la variable que se va a reemplazar en la pila por lo que indique la celda correspondiente en la tabla. 5 A un AP aumentado con su tabla de previsi´on se le llama “compilador LL” por las siglas en ingl´es “Left to right Leftmost derivation”, porque efectivamente dentro de la pila se lleva a cabo una derivaci´on izquierda. El lector puede comprobar esto en el ejemplo anterior. A un compilador LL que considera una previsi´on de un caracter, como lo que hemos visto, se 5 Ejercicio: hacer nuevamente la traza de ejecuci´on para la palabra abb, utilizando la tabla de previsi´on.
  • 167. 158 CAP´ITULO 5. AUT ´OMATAS DE PILA le llama “LL(1)”; en general, un compilador de tipo LL que toma en cuenta una previsi´on de k caracteres es LL(k). La raz´on por la que es necesario a veces hacer una previsi´on de m´as de un caracter es porque para ciertas gram´aticas no es suficiente una predicci´on de un solo caracter. Con- sid´erese, por ejemplo, la gram´atica con reglas S → aSb, S → ab, que tambi´en genera el lenguaje {an bn }. Hacemos el inicio de la ejecuci´on del AP correspondiente: Estado Falta leer Pila p aabb ε q aabb S En este punto, reemplazando S por aSb o por ab de todos modos se produce la a de la previsi´on, por lo que dicha predicci´on no establece ninguna diferencia entre las transiciones ((q, ε, S), (q, aSb)) y ((q, ε, S), (q, ab)). Este ejemplo en particular puede sacarse adelante haciendo una transformaci´on de la gram´atica, conocida como “factorizaci´on izquierda”, que consiste en a˜nadir a la gram´atica una variable nueva (sea por ejemplo A), que produce “lo que sigue despu´es del caracter com´un”, en este caso a. As´ı, la gram´atica queda como (sus reglas): 1. S → aA 2. A → Sb 3. A → b Con esta gram´atica ya es posible decidir entre las distintas transiciones considerando una previsi´on de un solo caracter, como se aprecia en la siguiente ejecuci´on del AP correspondi- ente: Estado Falta leer Pila Comentario p aabb ε q aabb S q aabb aA q abb A Se decide reemplazar A por Sb. q abb Sb q abb aAb q bb Ab Se decide reemplazar A por b. q bb bb q b b q ε ε La tabla de previsi´on entonces debe haber sido:
  • 168. 5.6. COMPILADORES LL 159 a b ε S aA A Sb b Ahora veremos de una manera m´as sistem´atica c´omo construir la tabla de previsi´on. Supongamos una GLC sin producciones vac´ıas –lo cual pr´acticamente no representa una p´erdida de generalidad. Necesitamos hacer las siguientes definiciones: Definici´on.- Supongamos una gram´atica (V, Σ, R, S). El operador first : (V ∪Σ)+ → 2Σ , cuyo argumento es una cadena de s´ımbolos (al menos uno) que puede contener variables y constantes, y cuyo resultado es un conjunto de caracteres, obtiene todos los caracteres con los que puede empezar una cadena derivable a partir de su argumento. Por ejemplo, para la GLC con reglas S → aA, A → Sb, A → b, nos damos cuenta de que las cadenas que se pueden derivar a partir de S tienen que empezar con a, porque lo ´unico que puede producir S es aA, que empieza con a. Por ello, first(S) = {a}. first(α) se calcula sistem´aticamente a partir de las siguientes propiedades: Si α = σ, σ ∈ Σ, entonces first(α) = {σ} Si α = xv, x ∈ (V ∪ Σ), v ∈ (V ∪ Σ)∗ , first(α) = first(x) Si A ∈ V , first(A) = first(α1) ∪ . . . ∪ first(αn), para todas las reglas A → αi, para i = 1 . . . n. Ejemplos.- Seguimos utilizando la gram´atica S → aA, A → Sb, A → b. first(aA) = first(a) = {a}, aplicando la segunda y luego primera regla. first(Ab) = first(A) por la segunda regla; first(A) = first(b) ∪ first(Sb) por la tercera regla, y first(Sb) = first(S) = first(aA) = first(a) = {a}, por lo que finalmente first(Ab) = {a, b}. Ahora estamos en condiciones de dar un procedimiento para construir la tabla de pre- visi´on: supongamos que estamos tratando de llenar una celda de la tabla donde el rengl´on corresponde a la variable X y la columna a la constante σ. Si hay en la gram´atica una regla X → α donde σ ∈ first(α), el lado derecho α se pone en dicha celda: . . . σ . . . ε . . . . . . . . . . . . X α . . . . . .
  • 169. 160 CAP´ITULO 5. AUT ´OMATAS DE PILA Por ejemplo, con este procedimiento se obtiene la siguiente tabla de previsi´on para la gram´atica con reglas S → aA, A → Sb, A → b: a b ε S aA A Sb b Esta tabla es id´entica a la que hab´ıamos supuesto anteriormente para la misma gram´atica. Puede ocurrir que en una celda de la tabla de previsi´on queden los lados derechos de varias reglas; esto es, si la celda corresponde a la columna de la constante σ y al rengl´on de la variable X, y hay dos reglas distintas X → α y X → β, donde σ ∈ first(α) y σ ∈ first(β), entonces tanto α como β tendr´ıan derecho a estar en esa celda de la tabla. Cuando esto ocurre, simplemente se concluye que la tabla no se puede construir y que la gram´atica no es del tipo LL(1). 5.7. Compiladores LR(0) Como se puede apreciar en toda la secci´on precedente, los compiladores de tipo LL son esencialmente “predictores” que tratan de llevar a cabo la derivaci´on en la pila, siempre reemplazando las variables por lo que ´estas deban producir. Pero a´un en gram´aticas bastante sencillas, se vuelve demasiado dif´ıcil adivinar, a´un con la ayuda de la previsi´on, qu´e regla de reemplazo hay que aplicar a una variable en el tope de la pila. Por esto, se han propuesto otros compiladores, llamados LR (“Left to right Rightmost derivation”), que no tratan de adivinar una derivaci´on, sino que tratan de ir “reconociendo” cadenas que correspondan al lado derecho de una regla gramatical, para reemplazar por el lado izquierdo. As´ı, estos compiladores encuentran la derivaci´on “en reversa”, reemplazando lados derechos de reglas por lados izquierdos, hasta llegar eventualmente al s´ımbolo inicial. Entonces, los compiladores LR recorren el ´arbol de derivaci´on de abajo hacia arriba, por lo que se llaman tambi´en compiladores ascendentes. De hecho, el reconocimiento del lado derecho de una regla no se hace respecto a la entrada, sino respecto al tope de la pila, pero para esto se necesita primero haber pasado caracteres de la entrada a la pila. Las dos operaciones b´asicas de un compilador LR son: Desplazamiento que consiste en pasar un caracter de la entrada al tope de la pila, Reducci´on que consiste en reemplazar en el tope de la pila el lado derecho de una regla gramatical por el lado izquierdo de la misma. 6 6 De hecho se toma el reverso del lado derecho de una regla, ver m´as adelante.
  • 170. 5.7. COMPILADORES LR(0) 161 Estas operaciones se aplican, en un orden “adecuado”, hasta que en la pila quede s´olo el s´ımbolo inicial. Desde luego, la dificultad est´a en encontrar las secuencias de desplaza- mientos y reducciones que llevan a la situaci´on final deseada. La idea de c´omo combinar los desplazamientos con las reducciones se comprende en el siguiente ejemplo: Supongamos la gram´atica para el lenguaje {an bn } con las reglas S → aA, A → Sb, A → b. Dada la palabra aabb, se tendr´ıa una traza de ejecuci´on como sigue: Falta leer Pila Acci´on aabb ε Desplazar abb a Desplazar bb aa Desplazar b baa Reducir por A → b b Aaa Reducir por S → aA b Sa Desplazar ε bSa Reducir por A → Sb ε Aa Reducir por S → aA ε S Exito Obs´erverse, en el quinto rengl´on de la tabla, que en el tope de la pila est´a la cadena Aa, mientras que el lado derecho de la regla que corresponde es aA. Vemos as´ı que lo que se saca de la pila es el lado derecho de la regla, pero “volteado” de izquierda a derecha; t´ecnicamente decimos que el reverso del lado derecho de una regla coincide con el tope de la pila. Esto se refleja en las definiciones que damos en seguida. En este ejemplo en particular es relativamente f´acil discernir cuando hacer cada una de las acciones. Sin embargo, en otros ejemplos es mucho m´as dif´ıcil determinar qu´e acci´on llevar a cabo; existe un procedimiento para construir una tabla de previsi´on para compiladores LR(1), que puede ser consultado en la referencia [1]. Ahora formalizaremos el procedimiento para construir el AP de tipo LR a partir de una GLC (V, Σ, R, S): Hay 4 estados: i (inicial), f (final), p y q. Hay una transici´on ((i, ε, ε), (p, #)) ∈ ∆. Esta transici´on coloca un “marcador” # en el fondo de la pila, para luego reconocer cuando la pila se ha vaciado. Se tienen transiciones ((p, σ, ε), (p, σ)) ∈ ∆ para cada σ ∈ Σ. Estas transiciones per- miten hacer la acci´on de desplazar. Hay transiciones ((p, ε, αR ), (p, A)) ∈ ∆ para cada regla A → α ∈ R, donde αR es el reverso de α, esto es, α “volteado” de izquierda a derecha. Estas transiciones efect´uan las reducciones.
  • 171. 162 CAP´ITULO 5. AUT ´OMATAS DE PILA e/e/# e/ /e e/#/e /e/ /e/ e/ / e/ / e/ / Aa bS Figura 5.6: AP de tipo LR Tenemos una transici´on ((p, ε, S), (q, ε)) ∈ ∆; esta transici´on reconoce cuando se lleg´o al s´ımbolo inicial. Finalmente hay una transici´on ((q, ε, #), (f, ε)) ∈ ∆; esta transici´on se asegura de que se haya vaciado la pila antes de aceptar la palabra. Este procedimiento es directo. Por ejemplo, en la figura 5.6 se representa el aut´omata correspondiente a la GLC que hemos estado considerando, esto es, S → aA,A → Sb, A → b. M´as que en la construcci´on del AP, las dificultades pueden estar en el uso del AP, pues al ser ´este no determinista, en ciertas situaciones puede presentarse un conflicto, en que no se sepa si desplazar un caracter m´as a la pila o bien reducir por alguna regla. Y a´un en este caso puede haber varias reducciones posibles. Por ejemplo, sugerimos hacer la traza de ejecuci´on en el AP de la figura 5.6 de la palabra aabb. Una posible soluci´on a estos conflictos puede ser adoptar una pol´ıtica en que –por ejemplo– la reducci´on tenga preferencia sobre el desplazamiento. Esto funciona adecuada- mente en el ejemplo reci´en presentado, pero no funciona en otros casos. En el caso general, es necesario usar t´ecnicas m´as complicadas, que incluyen previsi´on de caracteres (esto es, LR(1), LR(2), etc.); dichas t´ecnicas pueden consultarse en la referencia [1]. 5.8. Ejercicios 1. Sea un aut´omata de pila M = (K, Σ, Γ, ∆, s, F) que acepta el lenguaje de par´entesis bien formados, incluyendo los par´entesis redondos “(”, “)”, as´ı como los par´entesis cuadrados “[”, “]”, es decir: L(M) = {e, (), [], ()[], [](), (()), ([]), [()], [[]], . . .}. a) Dibujar el diagrama del AP que acepta el lenguaje descrito. b) Representar formalmente, dando K, Σ, Γ, ∆, s y F. c) Dar un c´alculo producido por la palabra err´onea “([]]”, con las columnas “Estado”, “Por leer” y “pila”, como en los ejemplos dados.
  • 172. 5.8. EJERCICIOS 163 2. Proponga un aut´omata de pila para el lenguaje: {ai bj ck | i = j − k} 7 3. Considere el lenguaje en {a, b}∗ en que las palabras tienen la misma cantidad de a’s que de b’s, que es generado por la siguiente gram´atica: 1.- S → aSb 2.- S → bSa 3.- S → SS 4.- S → ε a) Dise˜nar directamente (sin convertir a partir de una gram´atica) un AP que acepte dicho lenguaje, usando una pila que almacene el exceso de a’s o de b’s (basta con dibujar el diagrama de estados). b) Construir otro AP, convirtiendo la GLC dada a AP de tipo LL. c) Lo mismo que el anterior, para un AP de tipo LR. d) Para cada uno de los incisos anteriores, hacer una traza de ejecuci´on para la palabra “abbaba”, en forma de una tabla, usando las columnas “estado”, “por leer”, “pila”, y “acci´on aplicada”. 4. Considere el lenguaje {an bm cp dq | n + m = p + q} a) Proponga un AP que lo acepte. b) Suponga la siguiente GLC (sus reglas) que genera dicho lenguaje: 1) <AD> → a <AD> d 2) <AD> → b <BD> d 3) <AD> → e 4) <AD> → a <AC> c 5) <BD> → b <BD> d 6) <BD> → b <BC> c 7) <BD> → e 8) <BC> → b <BC> c 9) <BC> → e 10) <AC> → a <AC> c 11) <AC> → b <BC> c 12) <AC> → e El s´ımbolo inicial es <AD>. Pruebe la correcci´on de la GLC por inducci´on sobre la longitud de la derivaci´on. 7 Ayuda: al despejar en la ecuaci´on la j el problema parece ser m´as f´acil, pues permite aplicar un dise˜no modular.
  • 173. 164 CAP´ITULO 5. AUT ´OMATAS DE PILA c) Obtenga un AP de tipo LL(1) a partir de esta gram´atica. d) Lo mismo, para un AP de tipo LR(0). e) Para los dos incisos anteriores, obtener una traza de ejecuci´on, en forma de tabla con columnas “estado”, “por leer”, “pila” y “acci´on”, para la palabra de entrada “aaacdd”. 5. Para el AP de la figura 5.6, y la palabra de entrada aabb: a) Construir una traza de ejecuci´on, con columnas “estado”, “falta leer”, “pila”, y “acci´on”. b) Localizar los renglones de la tabla anterior donde se presenta un conflicto, e indicar si es de desplazamiento contra reducci´on o bien de una reducci´on contra otra reducci´on. 6. Considere el lenguaje L = {an bn+m cm } a) Proponga una GLC que genere L. b) Elimine de la gram´atica las producciones vac´ıas y las in´utiles, si las hay c) Pruebe por inducci´on que la gram´atica es correcta. d) Obtenga el AP correspondiente, del tipo LL. e) Obtenga la tabla de previsi´on LL(1), calculando primero el “first” de cada vari- able de la gram´atica. f ) Obtenga un AP de tipo LR para la gram´atica. g) Indique si hay o no conflictos “shift-reduce” o “reduce-reduce” en el AP del inciso anterior, utilizando la traza de ejecuci´on para la palabra de entrada abbbcc. ¿Es posible escribiendo resolver los conflictos con los criterios de preferir “reduce” a “shift”, para los conflictos shift-reduce, y en caso de conflicto reduce-reduce preferir la transici´on que reduzca m´as s´ımbolos? 7. Completar y detallar formalmente el procedimiento de combinaci´on modular de AP para la concatentaci´on de lenguajes, delineado en la secci´on 5.2.1. 8. Formalice el procedimiento para obtener un AP que acepte la uni´on de los lenguajes aceptados respectivamente por (K1, Σ1, Γ1, ∆1, s1, F1) y (K2, Σ2, Γ2, ∆2, s2, F2). 9. Considere una variante de los aut´omatas pushdown, que podr´ıamos llamar “aut´omatas de fila”, en los que en vez de la pila, que se accesa en orden UEPS (“LIFO”), se tiene una fila que se accesa en orden PEPS (“FIFO”). a) D´e una definici´on formal de los aut´omatas de fila. b) Pruebe que el lenguaje {an bn } es aceptado por alg´un aut´omata de fila. c) ¿Piensa que los aut´omatas de pila y de fila son equivalentes? Justifique de manera informal.
  • 174. 5.8. EJERCICIOS 165 10. Considere una variante de los aut´omatas de pila, los AP “por estado final” (APEF), en los que para aceptar una palabra basta con que al final de ´esta el aut´omata se encuentre en un estado final, sin necesidad de que la pila est´e vac´ıa. a) D´e una definici´on formal de los APEF, incluyendo la definici´on de lenguaje acep- tado. b) Proponga un APEF que acepte el lenguaje {an bn }. 11. Proponga m´aquinas lo menos poderosas que sea posible para que acepten los siguientes lenguajes: a) {(), [], <>, ([]), [< ()(<>) > ()], . . .} b) {(), (()), ((())), (((()))), . . .} c) {(), ()(), ()()(), . . .} 12. Las m´aquinas reales tienen siempre l´ımites a su capacidad de almacenamiento. As´ı, la pila infinita de los aut´omatas de pila puede ser limitada a un cierto tama˜no fijo. Suponga una variante de los AP, los APn, en que la pila tiene un tama˜no fijo n. a) Proponga una definici´on de APn y de palabra aceptada por un APn. b) Pruebe (constructivamente) que los APn son equivalentes a los AF. (Ayuda: se puede asociar a cada par (q, σ1σ2 . . . σn), donde q es un estado del APn y σ1σ2 . . . σn es el contenido de la pila, un estado del AF). c) Pruebe su m´etodo con el APn de pila de tama˜no 2 (caben dos caracteres), con relaci´on de transici´on como sigue: ∆ = {((q0, a, e), (q0, a)), ((q0, b, a), (q1, e)), (q1, b, a), (q1, e))}, donde q0 es inicial y q1 es final.
  • 175. 166 CAP´ITULO 5. AUT ´OMATAS DE PILA
  • 176. Parte III M´aquinas de Turing y sus lenguajes 167
  • 178. Cap´ıtulo 6 M´aquinas de Turing As´ı como en secciones anteriores vimos c´omo al a˜nadir al aut´omata finito b´asico una pila de almacenamiento auxiliar, aumentando con ello su poder de c´alculo, cabr´ıa ahora preguntarnos qu´e es lo que habr´ıa que a˜nadir a un aut´omata de pila para que pudiera analizar lenguajes como {an bn cn }. Partiendo del AP b´asico (figura 6.1(a)), algunas ideas podr´ıan ser: 1. A˜nadir otra pila; 2. Poner varias cabezas lectoras de la entrada; 3. Permitir la escritura en la cinta, adem´as de la lectura de caracteres. Aunque estas ideas –y otras a´un m´as fantasiosas– pueden ser interesantes, vamos a enfocar nuestra atenci´on a una propuesta en particular que ha tenido un gran impacto en el desarrollo te´orico de la computaci´on: la M´aquina de Turing. A. Turing propuso [24] en los a˜nos 30 un modelo de m´aquina abstracta, como una extensi´on de los aut´omatas finitos, que result´o ser de una gran simplicidad y poder´ıo a la vez. La m´aquina de Turing es particularmente importante porque es la m´as poderosa de todas las m´aquinas abstractas conocidas (esto ´ultimo ser´a discutido en la secci´on 6.5). 6.1. Funcionamiento de la m´aquina de Turing La m´aquina de Turing (abreviado MT, ver figura 6.1(b)) tiene, como los aut´omatas que hemos visto antes, un control finito, una cabeza lectora y una cinta donde puede haber caracteres, y donde eventualmente viene la palabra de entrada. La cinta es de longitud infinita hacia la derecha, hacia donde se extiende indefinidamente, llen´andose los espacios con 169
  • 179. 170 CAP´ITULO 6. M ´AQUINAS DE TURING b a a b a b q0   q1   q2   q3   a a (a) Aut´omata de pila b a a b                                                                                                                                                                                                                                 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ a (b) M´aquina de Turing Figura 6.1: el caracter blanco (que representaremos con “ ”). La cinta no es infinita hacia la izquierda, por lo que hay un cuadro de la cinta que es el extremo izquierdo, como en la figura 6.1(b). En la MT la cabeza lectora es de lectura y escritura, por lo que la cinta puede ser modificada en curso de ejecuci´on. Adem´as, en la MT la cabeza se mueve bidireccionalmente (izquierda y derecha), por lo que puede pasar repetidas veces sobre un mismo segmento de la cinta. La operaci´on de la MT consta de los siguientes pasos: 1. Lee un caracter en la cinta 2. Efect´ua una transici´on de estado 3. Realiza una acci´on en la cinta Las acciones que puede ejecutar en la cinta la MT pueden ser: Escribe un s´ımbolo en la cinta, o Mueve la cabeza a la izquierda o a la derecha Estas dos acciones son excluyentes, es decir, se hace una o la otra, pero no ambas a la vez. La palabra de entrada en la MT est´a escrita inicialmente en la cinta, como es habitual en nuestros aut´omatas, pero iniciando a partir de la segunda posici´on de la cinta, siendo el primer cuadro un caracter blanco. Como la cinta es infinita, inicialmente toda la parte de la cinta a la derecha de la palabra de entrada est´a llena del caracter blanco ( ).
  • 180. 6.1. FUNCIONAMIENTO DE LA M ´AQUINA DE TURING 171 10 q a/R q b/b h /R Figura 6.2: MT que acepta palabras que empiezan con a Por definici´on, al iniciar la operaci´on de la MT, la cabeza lectora est´a posicionada en el caracter blanco a la izquierda de la palabra de entrada, el cual es el cuadro m´as a la izquierda de la cinta. Decimos que en la MT se llega al “final de un c´alculo” cuando se alcanza un estado especial llamado halt en el control finito, como resultado de una transici´on. Representaremos al halt por “h”. 1 Al llegar al halt, se detiene la operaci´on de la MT, y se acepta la palabra de entrada. As´ı, en la MT no hay estados finales. En cierto sentido el halt ser´ıa entonces el ´unico estado final, s´olo que adem´as detiene la ejecuci´on. Cuando queremos que una palabra no sea aceptada, desde luego debemos evitar que la MT llegue al halt. Podemos asegurarnos de ello haciendo que la MT caiga en un ciclo infinito (ver ejemplos adelante). El lenguaje aceptado por una MT es simplemente el conjunto de palabras aceptadas por ella. 2 Al dise˜nar una MT que acepte un cierto lenguaje, en realidad dise˜namos el aut´omata finito que controla la cabeza y la cinta, el cual es un aut´omata con salida (de Mealy, ver secci´on 2.7). As´ı, podemos usar la notaci´on gr´afica utilizada para aquellos aut´omatas para indicar su funcionamiento. En particular, cuando trazamos una flecha que va de un estado p a un estado q con etiqueta σ/L, quiere decir que cuando la entrada al control finito (esto es, el caracter le´ıdo por la cabeza de la MT) es σ, la cabeza lectora hace un movimiento a la izquierda, indicada por el caracter L (left, en ingl´es); similarmente cuando se tiene una flecha con σ/R el movimiento es a la derecha. Cuando la flecha tiene la etiqueta σ/ξ, donde ξ es un caracter, entonces la acci´on al recibir el caracter σ consiste en escribir el caracter ξ en la cinta. Con estos recursos es suficiente para dise˜nar algunas MT, como en el siguiente ejemplo. Ejemplo.- Dise˜nar (el control finito de) una MT que acepte las palabras en {a, b} que comiencen con a. La soluci´on se muestra en la figura 6.2. Si la primera letra es una “a”, la palabra se acepta, y en caso contrario se hace que la MT caiga en un ciclo infinito, leyendo y escribiendo “b”. N´otese que la acci´on inmediatamente antes de caer en el “halt” es irrelevante; igual se pod´ıa haber puesto “a/a” o “a/R” como etiqueta de la flecha. 1 No traduciremos el t´ermino “halt”, que en ingl´es significa detener, porque es tradicional usar exactamente este nombre en m´aquinas de Turing. 2 M´as adelante daremos definiciones formales.
  • 181. 172 CAP´ITULO 6. M ´AQUINAS DE TURING 2 q h10 q a/R b/R a/a b/b q/R /L Figura 6.3: MT que acepta palabras que terminan con a Ejemplo.- Dise˜nar una MT que acepte las palabras en {a, b} que terminen con a. Aunque este ejemplo parece bastante similar al precedente, en realidad es m´as complicado, pues para ver cual es la ´ultima letra, hay que ir hasta el blanco a la derecha de la palabra, luego regresar a la ´ultima letra y verificar si es una “a”. Una soluci´on se muestra en la figura 6.3. Ejemplo.- Probar que hay lenguajes que no son libres de contexto, pero que pueden ser aceptados por una m´aquina de Turing. Proponemos el lenguaje an bn cn , que se sabe que no es LLC. Ahora construiremos una MT que lo acepte. La estrategia para el funcionamiento de dicha MT consistir´a en ir haciendo “pasadas” por la palabra, descontando en cada una de ellas una a, una b y una c; para descontar esos caracteres simplemente los reemplazaremos por un caracter “∗”. Cuando ya no encontremos ninguna a, b o c en alguna pasada, si queda alguna de las otras dos letras la palabra no es aceptada; en caso contrario se llega a halt. Es ´util, antes de emprender el dise˜no de una MT, tener una idea muy clara de c´omo se quiere que funcione. Para eso se puede detallar el funcionamiento con alg´un ejemplo representativo, como en la tabla siguiente, para la palabra aabbcc. La posici´on de la cabeza se indica por el s´ımbolo “ ”.
  • 182. 6.2. FORMALIZACI ´ON DE LA MT 173 a a b b c c a a b b c c ∗ a b b c c ∗ a b b c c ∗ a b b c c ∗ a ∗ b c c . . . . . . . . . ∗ a ∗ b ∗ c . . . . . . . . . ∗ a ∗ b ∗ c ∗ a ∗ b ∗ c . . . . . . . . . Lo que falta por hacer es dise˜nar los estados de la MT, lo cual es relativamente simple y que dejamos como ejercicio (ver secci´on de ejercicios). 6.2. Formalizaci´on de la MT Habiendo en la secci´on precedente hecho un recuento intuitivo de las caracter´ısticas fun- damentales de la MT, ahora procedemos a su formalizaci´on, esto es, a su modelizaci´on matem´atica en t´erminos de la teor´ıa de conjuntos. Una MT es un qu´ıntuplo (K, Σ, Γ, δ, s) donde: K es un conjunto de estados tal que h ∈ K; Σ es el alfabeto de entrada, donde /∈ Σ; Γ es el alfabeto de la cinta, donde ∈ Γ y Σ ⊆ Γ s ∈ K es el estado inicial; δ : (K − {h} × Γ) → K × (Γ ∪ {L, R}) es la funci´on de transici´on.
  • 183. 174 CAP´ITULO 6. M ´AQUINAS DE TURING La expresi´on de la funci´on de transici´on parece algo complicada, pero puede entenderse de la siguiente manera: la funci´on de transici´on del control finito debe considerar como entradas el estado actual, que es un elemento de K –pero que no puede ser h– as´ı como el caracter le´ıdo en la cinta, que es elemento de Γ. Por eso a la izquierda de la flecha aparece la expresi´on δ : (K − {h} × Γ). Luego, el resultado de la funci´on de transici´on debe incluir el siguiente estado, que es elemento de K. Otro resultado de la funci´on de transici´on es la acci´on a ejecutar por la MT, que puede ser una escritura o un movimiento a la izquierda o a la derecha. La acci´on “mover cabeza a la izquierda” se representa por el s´ımbolo L, y similarmente R para la derecha. En el caso de la escritura, en vez de usar un s´ımbolo o comando especial, simplemente se indica el caracter que se escribe, el cual es un elemento de Γ. Desde luego, para que no haya confusi´on se requiere que ni L ni R est´en en Γ. Resumiendo, el resultado de la funci´on de transici´on debe ser un elemento de K × (Γ ∪ {L, R}). As´ı, si δ(q, a) = (p, b), donde b ∈ Γ, esto quiere decir que estando la MT en el estado q con la cabeza lectora sobre un caracter a, la funci´on de transici´on enviar´a al aut´omata a un estado p, y adicionalmente escribir´a el caracter b. Similarmente si δ(q, a) = (p, L), la cabeza de la MT har´a un movimiento a la izquierda adem´as de la transici´on de estado. Por ejemplo, sea la MT siguiente: K = {s, h}, (s´olo est´a el estado inicial, adem´as del “halt”), Σ = {a}, Γ = {a, }, δ(s, a) = (s, R), δ(s, ) = (h, R). Puede verse por la funci´on de transici´on que esta MT ejecuta un ciclo repetitivo en que mueve la cabeza hacia la derecha en tanto siga leyendo un caracter a, y se detiene (hace halt) en cuanto llega a un blanco. N´otese que, puesto que δ es una funci´on, en principio debe tenerse por cada estado y cada caracter una transici´on. Esto quiere decir que cada estado debe tener una cantidad de flechas de salida igual a |Γ|. Por ejemplo, si Γ = { , a, b}, y K = {q, h}, entonces debe haber flechas de salida de q con a, de q con b y tambi´en de q con . 3 En la pr´actica, sin embargo, una gran cantidad de flechas tiende a hacer menos comprensible un diagrama, por lo que solamente incluiremos las flechas “necesarias”, suponiendo en consecuencia que las dem´as flechas pueden tener una salida cualquiera, sin afectar esto el funcionamiento de la MT. Por ejemplo, a partir del estado inicial podemos suponer, sin arriesgarnos, que no es posible encontrar m´as que el caracter blanco, por lo que no tiene caso dibujar flechas del estado inicial con a, con b, etc. 4 6.2.1. Configuraci´on Como en otros aut´omatas que hemos visto en secciones anteriores, en las MT la configu- raci´on resume la situaci´on en que se encuentra la MT en cualquier punto intermedio de un c´alculo, de manera tal que con s´olo las informaciones contenidas en la configuraci´on podamos reconstruir dicha situaci´on y continuar el c´alculo. 3 N´otese que h es una excepci´on, pues no debe tener ninguna flecha de salida. 4 Desde luego, si se regresa al estado inicial despu´es de haber ejecutado otras transiciones, s´ı ser´a posible encontrar otros caracteres.
  • 184. 6.2. FORMALIZACI ´ON DE LA MT 175 Las informaciones necesarias para resumir la situaci´on de una MT en medio de un c´alculo son: Estado en que se encuentra la MT Contenido de la cinta Posici´on de la cabeza Ahora el problema es c´omo representar formalmente cada uno de los tres componentes de la configuraci´on, tratando de hacerlo en la forma m´as similar posible a como representamos la configuraci´on para otros tipos de aut´omatas. No hay problema con el estado en que se encuentra la MT, que es directamente un elemento de K. Respecto al contenido de la cinta, existe la dificultad de que como es infinita, no podemos representarla toda por una cadena de caracteres, que siempre ser´a de tama˜no finito. Vamos a tomar la soluci´on de tomar en cuenta ´unicamente la parte de la cinta hasta antes de donde empieza la sucesi´on infinita de blancos, pues esta ´ultima realmente no contiene ninguna informaci´on ´util. Por ejemplo, en la figura 6.4(a) dicha parte de la cinta es “ a b b a b”. El siguiente problema es c´omo caracterizar la posici´on de la cabeza lectora. Recordemos la soluci´on que hab´ıamos adoptado para los AF y AP, en que represent´abamos de una vez el contenido de la cinta y la posici´on de la cabeza limit´andose a representar con una cadena lo que falta por leer de la palabra –esto es, tirando a la basura la parte a la izquierda de la cabeza lectora. El problema es que esta soluci´on no funciona, pues en el caso de las MT hay movimiento de la cabeza a la izquierda, por lo que los caracteres a la izquierda de la cabeza podr´ıan eventualmente ser le´ıdos de nuevo o hasta modificados. Otra soluci´on ser´ıa representar la posici´on por un n´umero entero que indicara la posici´on actual con respecto a alguna referencia. Sin embargo, adoptaremos la soluci´on consistente en dividir la cinta dentro de la configuraci´on en tres pedazos: La parte de la cinta a la izquierda de la cabeza, que es un elemento de Γ∗ . El cuadro en la posici´on de la cabeza lectora, que es un elemento de Γ. La parte de la cinta a la derecha de la cabeza lectora, hasta antes de la sucesi´on de blancos que se extiende indefinidamente a la derecha. La parte a la derecha de la cabeza lectora es, desde luego, un elemento de Γ∗ , pero podemos hacer una mejor caracterizaci´on de ella considerando que el ´ultimo caracter de ella no es blanco. As´ı, ser´ıa un elemento de Γ∗ (Γ − { }). Sin embargo, hay un problema t´ecnico: esta expresi´on no incluye la cadena vac´ıa, la cual puede producirse cuando todos los caracteres a la derecha de la cabeza son blancos. La soluci´on es simplemente a˜nadir este
  • 185. 176 CAP´ITULO 6. M ´AQUINAS DE TURING ...babba (a) ...bb a (b) Figura 6.4: Contenido de la cinta en una configuraci´on Σ∗ Σ K ...aa {ε}U b Σ∗(Σ − { }) a a b b Figura 6.5: Configuraci´on en MT caso, por lo que finalmente la parte a la derecha de la cabeza lectora es un elemento de Γ∗ (Γ − { }) ∪ {ε}. Por ejemplo, la cinta de la figura 6.4(a) se representa con las cadenas de caracteres a , b y bab (parte izquierda, cuadro bajo la cabeza, y parte derecha, respectivamente), mientras que la cinta de la figura 6.4(b) ser´ıa representada por ε, y b a b. Finalmente, la configuraci´on es un elemento de: K × Γ∗ × Γ × (Γ∗ (Γ − { }) ∪ {ε} (Ver figura 6.5) Como en los AF y los AP, en las MT vamos a indicar las configuraciones encerradas entre dobles corchetes, como en [[q, aa, a, bb]], que indica que la MT en cuesti´on se encuentra en el estado q, habiendo a la izquierda de la cabeza una cadena “aa”, bajo la cabeza una “a”, y a su derecha –antes de la secuencia infinita de blancos– una cadena “bb”. Para simplificar a´un m´as la notaci´on, podemos indicar por un caracter subrayado la posici´on de la cabeza lectora; as´ı en vez de tener cuatro componentes la configuraci´on tendr´a ´unicamente dos, como por ejemplo en [[q, aaabb]], que es equivalente al ejemplo que acabamos de dar.
  • 186. 6.2. FORMALIZACI ´ON DE LA MT 177 6.2.2. Relaci´on entre configuraciones Vamos a definir una relaci´on binaria “C1 C2” que nos indica que la MT puede pasar de la configuraci´on C1 a la configuraci´on C2. Definici´on.- La relaci´on en C ×C –donde C es el conjunto de configuraciones– se define por casos, de la siguiente manera: Caso escritura: [[p, w, a, u]] [[q, w, b, u]] ssi δ(p, a) = (q, b), donde b ∈ Γ Caso de movimiento a la izquierda, parte derecha no vac´ıa: [[p, wd, a, u]] [[q, w, d, au]] ssi δ(p, a) = (q, L), donde a = o bien u = ε Caso de movimiento a la izquierda, parte derecha vac´ıa: [[p, wd, , ε]] [[q, w, d, ε]] ssi δ(p, ) = (q, L) Caso de movimiento a la derecha, parte derecha no vac´ıa: [[p, w, a, du]] [[q, wa, d, u]] ssi δ(p, a) = (q, R) Caso de movimiento a la derecha, parte derecha vac´ıa: [[p, w, a, ε]] [[q, wa, , ε]] ssi δ(p, a) = (q, R) Ejemplos: Si δ(q1, a) = (q2, b), [[q1, bba]] [[q2, bbb]] Si δ(q1, a) = (q2, R), [[q1, bab]] [[q2, bab]] [[q1, bab]] [[q2, bab ]] Si δ(q1, a) = (q2, L), [[q1, aabab]] [[q2, aabab]] [[q1, abb]] [[q2, abb]] [[q1, ab ]] [[q2, ab ]]
  • 187. 178 CAP´ITULO 6. M ´AQUINAS DE TURING 6.2.3. Configuraci´on “colgada” En el caso de que la cabeza lectora se encuentre en el cuadro de la cinta m´as a la izquierda, y se trate de hacer un movimiento a la izquierda, se produce un error llamado “configuraci´on colgada”, que tiene como consecuencia que la MT no pueda seguir funcionando, y desde luego no podr´a ser aceptada la palabra de entrada. Formalmente, si tenemos una configuraci´on de la forma [[p, ε, a, u]] y la transici´on es δ(p, a) = (q, L), no existe una configuraci´on C tal que [[p, ε, a, u]] C. En general vamos a evitar el uso intencional de las configuraciones colgadas, de modo que si no queremos que una palabra sea aceptada, se har´a que la MT se cicle en vez de “colgarse”. 6.2.4. C´alculos en MT Igual que en otros tipos de aut´omatas que hemos visto anteriormente, en las MT un c´alculo es una secuencia C1, C2, . . . , Cn de configuraciones tal que Ci Ci+1. Un c´alculo puede ser visto en t´erminos computacionales como una “traza de ejecuci´on”, que nos describe de una manera muy exacta la forma en que una MT responde ante una entrada en particular. Por ejemplo, sea la MT siguiente (dada ya como ejemplo anteriormente): K = {s}, Σ = {a, }, δ(s, a) = (s, R), δ(s, ) = (h, ). Ante la configuraci´on [[s, a, a, aa]] se presenta el c´alculo siguiente: [[s, aaaa]] [[s, aaaa]] [[s, aaaa]] [[s, aaaa ]] [[h, aaaa ]] Se puede llegar de una configuraci´on Ci a Cj, para i ≤ j en cero o varios pasos; esto se indica en forma compacta utilizando la cerradura reflexiva y transitiva de la relaci´on , denotada por ∗ , quedando Ci ∗ Cj. 6.2.5. Palabra aceptada Con las definiciones dadas ahora estamos en condiciones de definir formalmente las no- ciones de palabra aceptada y lenguaje aceptado: Definici´on.- Una palabra w ∈ Σ∗ , es aceptada por una MT M si [[s, ε, , w]] ∗ [[h, α, a, β]] donde a, ∈ Γ, α, β ∈ Γ. Como se ve, el ´unico criterio para que la palabra de entrada w se acepte es que se llegue a halt en alg´un momento, independientemente del contenido final
  • 188. 6.3. MT PARA C ´ALCULOS DE FUNCIONES 179 de la cinta, el cual es visto como “basura”. Por ejemplo, la MT del ´ultimo ejemplo acepta cualquier palabra de entrada. Decimos de que un lenguaje L es Turing-aceptable si hay alguna MT que da halt para toda entrada w ∈ L. 6.3. MT para c´alculos de funciones Hasta el momento hemos visto las MT como analizadoras de palabras cuyo fin es deter- minar si la palabra de entrada pertenece o no al lenguaje aceptado. Sin embargo, las MT tambi´en pueden ser utilizadas para calcular resultados u operaciones a partir de la entrada. En vez de considerar como “basura” el contenido de la cinta al llegar al halt, podr´ıamos verlo como un resultado calculado. Para poder interpretar sin ambig¨uedad el contenido final de la cinta como resultado, vamos a requerir que cumpla con un formato estricto, caracterizado por los siguientes puntos: La palabra de salida no debe contener ning´un caracter blanco ( ). La palabra de salida comienza en el segundo caracter de la cinta, teniendo a su izquierda un blanco y a su derecha una infinidad de blancos. La cabeza estar´a posicionada en el primer blanco a la derecha de la palabra de salida. Se puede apreciar que el formato para la palabra de salida es muy similar al de la palabra de entrada, salvo que en la primera, la cabeza est´a posicionada en el caracter a la derecha de la palabra. Ejemplo.- Supongamos la funci´on reverse, que invierte el orden en que aparecen las letras en la palabra de entrada; as´ı, reverse(aabb) = bbaa. Si inicialmente el contenido de la cinta es de la forma aabb . . ., donde el caracter subrayado indica la posici´on de la cabeza, la cinta al final debe quedar como: bbaa . . .. Es muy importante ce˜nirse estrictamente a este formato, y no caer en ninguno de los siguientes errores (frecuentes, desgraciadamente): Aparece alg´un espacio blanco dentro del resultado, como en la cinta bbaa ab . . .. El resultado no est´a posicionado empezando en el segundo cuadro de la cinta, como en bbaa . . .. La cabeza no est´a ubicada exactamente en el cuadro a la derecha del resultado, como en la cinta bbaa . . ..
  • 189. 180 CAP´ITULO 6. M ´AQUINAS DE TURING Aparece “basura” (caracteres no blancos) en la cinta, a la derecha o izquierda del resultado, como en la cinta bbaa b . . .. Para precisar estas nociones, utilizamos la noci´on formal de configuraci´on : Una MT calcula un resultado u ∈ Σ∗ a partir de una entrada w ∈ Σ∗ si: [[s, ε, , w]] ∗ [[h, u, , ε]] Como se sabe, las funciones en matem´aticas sirven precisamente para describir la relaci´on entre un resultado y una entrada. Podemos relacionar esta noci´on con la definici´on anterior de la manera siguiente: Una MT M calcula una funci´on f : Σ∗ → Σ∗ si para toda entrada w, M calcula un resultado u tal que f(w) = u. Si hay una MT que calcula una funci´on f, decimos que f es Turing-calculable. Ejemplo.- Construir una m´aquina de Turing que reste dos n´umeros naturales en unario, esto es, f(x, y) = x − y. Desde luego, como las MT reciben un solo argumento, para realizar una funci´on de dos argumentos como la resta en realidad se recibe un solo argumento que contiene un s´ımbolo para separar dos partes de la entrada. Por ejemplo, la resta de 5 − 3 quedar´ıa indicada por la cadena “11111 − 111”, lo que ser´ıa el argumento de entrada; desde luego, el resultado en este caso ser´ıa la cadena “11”. La cabeza lectora al final debe estar posicionada en el blanco a la derecha del residuo. En caso de que el sustraendo sea mayor que el minuendo, el resultado es cero. A esta forma de resta sin resultados negativos se le llama a veces “monus” en vez de “menos”. La estrategia para construir esta MT ser´ıa ir “descontando” cada 1 del minuendo contra otro 1 del sustraendo, reemplazando ambos por un caracter arbitrario –sea “∗”. Cuando se termine el sustraendo, se borran los caracteres in´utiles de manera que queden s´olo los restos del minuendo. Para evitar tener que recorrer el residuo, descontamos caracteres del minuendo de derecha a izquierda. Resumiendo, tendr´ıamos una secuencia de configuraciones de la cinta como las siguientes (la ´ultima l´ınea indica la configuraci´on en la que debe dar halt).
  • 190. 6.4. PROBLEMAS DE DECISI ´ON 181 1 1 1 − 1 1 1 1 1 − 1 1 . . . . . . . . . 1 1 1 − 1 1 1 1 1 − 1 1 1 1 1 − 1 ∗ . . . . . . . . . 1 1 ∗ − 1 ∗ . . . . . . . . . 1 ∗ ∗ − ∗ ∗ . . . . . . . . . 1 Dejamos como ejercicio hacer el diagrama de estados del control finito de esta MT (ver secci´on de ejercicios). 6.4. Problemas de decisi´on Un caso particular de funciones es aquel en que el resultado s´olo puede ser s´ı o no. Si representamos el s´ı con 1 y el no con 0, estamos considerando funciones g : Σ∗ → {1, 0}. En este caso, la MT sirve para decidir si la entrada tiene una propiedad P o no la tiene. Por ejemplo, si la propiedad P consiste en que la entrada es de longitud par, para una palabra de entrada como aaba la salida seria 1, y para bab ser´ıa 0. La MT correspondiente debe generar los c´alculos siguientes: [[s, ε, , w]] ∗ [[h, 1, , ε]] si |w| es par, y [[s, ε, , w]] ∗ [[h, 0, , ε]] si |w| es non. Un dise˜no para la MT que decide si una entrada en el alfabeto Σ = {a, b} es de longitud par aparece en la figura 6.6. La estrategia en este dise˜no es primero recorrer la cabeza al
  • 191. 182 CAP´ITULO 6. M ´AQUINAS DE TURING /R /R a,b//L /R 4 1 3 5 6 /L a,b/ /L h 0/R 2 a,b/R 8 /1 7 /0 1/R h Figura 6.6: MT que decide si la entrada es de longitud par extremo derecho, y luego ir borrando los caracteres de entrada, de derecha a izquierda, y “recordando” mediante los estados 3 y 5 si la cantidad de letras es, hasta el momento, par o impar, respectivamente. Al terminar de borrar la palabra de entrada, seg´un que se haya terminado en el estado 3 o 5, se escribe 1 o 0 en la cinta, y se llega a halt. Definici´on.- Decimos que un lenguaje L es Turing-decidible si hay alguna MT que entrega un resultado 1 si la entrada w est´a en L, y un resultado 0 en caso contrario. Debe quedar claro que para que una MT entregue como resultado 1 o 0, es condici´on indispensable que la palabra de entrada haya sido aceptada. Esto tiene la consecuencia siguiente: Proposici´on.- Un lenguaje es Turing-decidible solamente si es Turing-aceptable. Si un lenguaje no es Turing-decidible se dice que es indecidible. M´as adelante veremos lenguajes indecidibles. 6.4.1. Relaci´on entre aceptar y decidir Las siguientes propiedades que relacionan “Turing-decidible” con “Turing-aceptable” son ´utiles para comprender mejor ambas nociones: 1. Todo lenguaje Turing-decidible es Turing-aceptable 2. Si L es Turing-decidible, Lc es Turing-decidible 3. L es decidible ssi L y Lc son Turing-aceptables
  • 192. 6.5. TESIS DE CHURCH 183 La prueba de 1 es muy sencilla, pues para decidir un lenguaje L, la MT debe primero que nada llegar al halt para toda palabra de w ∈ L, con lo que necesariamente acepta w. Tambi´en el punto 2 es sencillo, pues dada una MT M que decide el lenguaje L, producimos una m´aquina M que decide Lc cambiando en M el resultado 1 por 0 y viceversa. La prueba de 3 es m´as complicada. De hecho no probaremos que si L y Lc son Turing- aceptables entonces L es decidido por alguna MT, sino m´as bien que hay un procedimiento mec´anico para decidir L. Se supone que, por la llamada Tesis de Church, que veremos luego, ambos enunciados son equivalentes. Supongamos que tenemos dos MT, M y Mc , que aceptan respectivamente los lenguajes L y Lc . Ponemos a funcionar ambas m´aquinas “en paralelo”, analizando ambas la misma palabra w. Ahora bien, si w ∈ L, eventualmente M llegar´a al halt. Si w /∈ L, entonces w ∈ Lc , y en alg´un momento Mc se detendr´a. Ahora consideremos una MT adicional M∗ , que “observa” a M y a Mc , y que si M se para, entrega una salida 1, mientras que si Mc se para, entrega una salida 0. Es evidente que para toda palabra w, M∗ decidir´a 1 o 0, por lo que el lenguaje es decidible. 6.5. Tesis de Church Ha habido diversos intentos de encontrar otros modelos de m´aquinas u otros formalismos que sean m´as poderosos que las MT, en el mismo sentido que las MT son m´as poderosas que los AF y los AP. (Decimos que una tipo de m´aquina MA es m´as poderoso que un tipo MB cuando el conjunto de lenguajes aceptados por alguna m´aquina en MB es un subconjunto propio de los aceptados por MA). Por ejemplo, independientemente de Turing, Emil Post propuso a´un otro modelo de m´aquina abstracta, basada en la idea de un diagrama de flujo [12]. Tambi´en se han tratado de hacer “extensiones” a la MT, para hacerla m´as poderosa. Por ejemplo, se propusieron MT no deterministas. Sin embargo, todos los intentos han sido infructuosos al encontrarse que dichas extensiones son equivalentes en poder de c´alculo a la MT original [10]. El mismo A. Turing propuso, en la llamada “Tesis de Turing”, que todo aquello que puede ser calculado, podr´a ser calculado en una MT, y que no podr´a haber una m´aquina abstracta que calcule algo que la MT no pueda calcular [11]. M´as a´un, A. Church, a la saz´on inventor del c´alculo lambda –uno de los sistemas competidores de la MT–, propuso la conjetura de que en realidad no puede haber ning´un modelo de c´omputo m´as poderoso que los desarrollados hasta entonces, que inclu´ıan la MT, su c´alculo lambda, as´ı como otras m´aquinas abstractas, como la m´aquina de Post. Hasta nuestros d´ıas la llamada “tesis de Church” no ha podido ser probada ni refutada. La tesis de Church, sin embargo, no se considera un teorema que pudiera ser eventualmente probado, sino simplemente una hip´otesis de trabajo.
  • 193. 184 CAP´ITULO 6. M ´AQUINAS DE TURING 6.5.1. Comparaci´on de las MT con otras m´aquinas Podemos considerar comparaciones de la MT con: 1. Extensiones a la MT a) MT con varias cintas, varias cabezas b) MT con no determinismo 2. Otras m´aquinas de cinta 3. Otros paradigmas (m´aquinas de Post, Gram´aticas) De todas estas posibilidades, s´olo consideraremos las m´aquinas de Post. Las compara- ciones restantes pueden ser encontradas en la referencia [10]. Las pruebas que vamos a considerar se basan en el principio de la simulaci´on. Esta consiste informalmente en que la m´aquina simuladora act´ua como lo har´ıa la m´aquina simulada. Formalmente consiste en un mapeo µ que asocia a cada configuraci´on de la m´aquina simuladora Mora una configuraci´on de la m´aquina simulada Mada, y a cada acci´on de Mora una acci´on de Mada, de modo tal que se cumpla la correspondencia de los tres puntos se˜nalados arriba. 6.6. M´aquinas de Post En esta secci´on presentaremos los elementos de la m´aquina propuesta por E. Post, de manera similar a como aparecen en [12]. Conceptualmente las m´aquinas de Post tienen poca relaci´on con el modelo b´asico de m´aquinas que hemos visto hasta el momento –b´asicamente derivaciones de los AF. Las m´aquinas de Post (MP) est´an basadas en el concepto de diagramas de flujo, tan habituales en nuestros d´ıas por la ense˜nanza de la programaci´on en lenguajes imperativos (C, Pascal, etc.). La utilidad pr´actica de los diagramas de flujo es una de las razones para incluir el estudio de las m´aquinas de Post en este texto, a´un cuando en muchos otros textos se prefiere comparar a las MT con los “sistemas de reescritura”, con el “c´alculo lambda” y otras alternativas. En un diagrama de flujo se van siguiendo las flechas que nos llevan de la ejecuci´on de una acci´on a la siguiente; a este recorrido se le llama “flujo de control”. Algunas acciones especiales son condicionales, en el sentido de que tienen varias flechas de salida, dependiendo la que uno tome del cumplimiento de cierta condici´on. 5 5 Pensamos que el lector est´a habituado a los diagramas de flujo, por lo que no abundaremos en ejemplos y explicaciones.
  • 194. 6.6. M ´AQUINAS DE POST 185 M´as espec´ıficamente, los diagramas de flujo de Post, llamados “M´aquinas de Post” (MP), consideran unas acciones muy elementales cuyo efecto eventualmente es alterar el valor de una ´unica variable x. La variable x es capaz de almacenar una cadena de caracteres arbitrariamente grande. x ← xa x ← xb   x ← x@ START REJECT ACCEPT x tail(x)← a b # @ εεεεε Inicio Rechazo Acepta Condicion Asignacion Figura 6.7: Acciones en MP En la figura 6.7 presentamos un resumen de las acciones de la MP, las cuales son: 6 Inicio. La acci´on START indica el punto en que empieza a recorrerse el diagrama de flujo. Rechazo. La acci´on REJECT indica que la palabra de entrada no es aceptada (es rechaz- ada). Adem´as termina la ejecuci´on del diagrama. Acepta. La acci´on ACCEPT indica que la palabra de entrada es aceptada. Tambi´en ter- mina la ejecuci´on del diagrama. Condicional. La acci´on x ← tail(x) tiene el efecto de quitar el primer caracter de la palabra almacenada en la variable x; la continuaci´on del diagrama depender´a de cu´al fue el caracter que se quit´o a x, habiendo varias salidas de la condicional, indicadas con sendos s´ımbolos, que corresponden al caracter que se quit´o a la variable. En otras palabras, si la palabra de entrada es σ1, σ2, . . . , σn, el camino que tomemos para seguir el diagrama ser´a el indicado con un s´ımbolo que coincida con σ1. Hay adem´as una salida marcada con ε, para el caso de que la variable x contenga la palabra vac´ıa (antes de tratar de quitarle el caracter). Asignaci´on. Las acciones de la forma x ← xa, donde a ∈ Σ, tienen el efecto de a˜nadir a la variable x el caracter a por la derecha. As´ı, si x = α antes de la asignaci´on, despu´es de ella tendremos x = αa. Hay una instrucci´on x ← xa para cada caracter a ∈ Σ. 6 Hemos utilizado los nombres en ingl´es para las acciones de la MP, simplemente por compatibilidad con la gran mayor´ıa de los textos disponibles.
  • 195. 186 CAP´ITULO 6. M ´AQUINAS DE TURING x tail(x)← a   b ε ¡ ε START ¢ x ← xa x tail(x)← REJECT ACCEPT x tail(x)← REJECT a   bε ¡ ε a   ε ¡ ε b x x@← £ ← @ ¤ x x@← £ ← @ ¤ @ ¤ x←xb Figura 6.8: MP para {an bn } Ejemplo.- La MP de la figura 6.8 acepta el lenguaje {an bn }. En efecto, siguiendo dicha figura, podemos ver que la variable x toma los siguientes valores al recorrer el diagrama de flujo: Acci´on Valor de x START aabb x ← x@ aabb@ x ← tail(x) abb@ x ← tail(x) bb@ x ← xa bb@a x ← tail(x) b@a x ← tail(x) @a x ← xb @ab x ← tail(x) ab x ← x@ ab@ x ← tail(x) b@ x ← tail(x) @ x ← tail(x) ε x ← x@ @ x ← tail(x) ε ACCEPT Como se puede observar en este listado, las letras a, b y el caracter @ salen de la variable x por la izquierda, por la acci´on de x ← tail(x), y luego entran por la derecha, como resultado
  • 196. 6.6. M ´AQUINAS DE POST 187 de una acci´on x ← xσ, donde σ es el caracter u se a˜nade a la derecha. En la MP de este ejemplo, comparando las l´ıneas 2 y 10 del listado podemos ver que en la 10 ya se ha eliminado una a y una b. Iterando en el diagrama es posible cancelar cada a con cada b hasta que se agoten las letras. 6.6.1. Formalizaci´on de las MP Recordemos antes que nada que la formalizaci´on de una m´aquina abstracta reviste dos aspectos: uno es formalizar los componentes de una m´aquina en particular, esto es, las informaciones que hacen diferente a una m´aquina de las dem´as de su clase, 7 mientras que el otro aspecto es el de caracterizar el funcionamiento de las m´aquinas que tratamos de formalizar. En el primer aspecto, las MP podr´ıan ser caracterizadas como grafos, donde los nodos ser´ıan las acciones, y los v´ertices ser´ıan las flechas del diagrama de Post. Esto es, una MP ser´ıa b´asicamente un conjunto de nodos N, clasificados de acuerdo con las acciones que tienen asociadas, as´ı como una funci´on de transici´on que determine cu´al es el nodo siguiente en el diagrama. As´ı tendremos: Definici´on.- Una MP es una tripleta (N, Σ, δ), donde: N = NA ∪NC ∪{START, ACCEPT, REJECT}, siendo NA el conjunto de nodos de asignaci´on y NC el conjunto de nodos condicionales. En otras palabras, los nodos est´an clasificados seg´un la acci´on que tienen asociada. Adicionalmente NA est´a clasificado seg´un la letra que se a˜nade por la derecha, es decir, NA = NAσ1 ∪ NAσ2 ∪ . . . NAσn Como de costumbre, Σ es el alfabeto, que no incluye el caracter @. δ es la funci´on de transici´on que nos indica cu´al es el siguiente nodo al que hay que ir: δ : N − {ACCEPT, REJECT} × Σ ∪ {@, ε} → N − {START} Como se ve, el nodo destino de δ depende del nodo anterior y de un caracter (el caracter suprimido, en el caso de la acci´on condicional –en todas las dem´as acciones el caracter es irrelevante y el destino debe ser el mismo para todo caracter). Ahora trataremos de formalizar el funcionamiento de las MP. Como habitualmente, nos apoyaremos en la noci´on de configuraci´on. En la configuraci´on debemos resumir todas las informaciones que caracterizan completamente la situaci´on en que se encuentra una MP a mitad de un c´alculo. En la configuraci´on de una MP vamos a considerar, evidentemente, el punto en que nos encontramos al recorrer el diagrama de flujo –lo que formalmente se representar´ıa como un nodo n ∈ N. 8 Adem´as necesitamos considerar el contenido de la variable, que es una palabra formada por letras del alfabeto, pudiendo aparecer adem´as el 7 Este era el caso de las qu´ıntuplas (K, Σ, δ, s, F) para los AF. 8 Al decir que estamos en un nodo n, significa que a´un no se ejecuta la acci´on del nodo n.
  • 197. 188 CAP´ITULO 6. M ´AQUINAS DE TURING caracter especial @. Entonces la configuraci´on es un elemento de N ×(Σ∪{@})∗ . Por ejemplo, una configuraci´on ser´ıa [[n, ab@aa]]. La relaci´on entre dos configuraciones C1 M C2, que significa que se puede pasar en la MP M de la configuraci´on C1 a C2, se define de la manera siguiente: Definici´on.- [[m, au]] [[n, bw]], a, b ∈ Σ ∪ {ε, @}, u, w ∈ (Σ ∪ {@})∗ ssi δ(m, a) = n, y 1. Si m ∈ NT , u = bw 2. Si m ∈ NAσ, a = b, w = uσ 3. Si m = s, a = b, u = w Definici´on.-Una palabra w ∈ Σ∗ es aceptada por una MP M ssi [[START, w]] ∗ M [[ACCEPT, v]]. Una palabra puede no ser aceptada ya sea porque se cae en un REJECT o bien porque la MP cae en un ciclo infinito. Ejercicio.- Definir similarmente a como se hizo con las MT la noci´on de funci´on calculada. 6.6.2. Equivalencia entre MP y MT El mismo Post comprob´o la equivalencia entre sus diagramas de flujo y las m´aquinas de Turing, lo que contribuy´o a reforzar la conjetura establecida por A. Church –esto es, que la MT es la m´as poderosa expresi´on de lo algor´ıtmicamente calculable. Teorema de Post.- Para toda MT hay una MP que acepta el mismo lenguaje, o que calcula la misma funci´on, y viceversa. La prueba del teorema de Post se hace mostrando que una MT puede ser simulada por una MP, y viceversa. Al simular MT en MP mostramos que estas ´ultimas son al menos tan poderosas como las primeras (en el sentido de que pueden hacer todo lo que haga MT); similarmente en el sentido contrario. Al establecer ambas direcciones de la prueba se muestra la equivalencia MP-MT. Por “simular” entendemos que, por cada acci´on de la MT, la MP haga una acci´on correspondiente, de manera tal que al final del c´alculo, una palabra sea aceptada en Post ssi es aceptada tambi´en en Turing; similarmente para el sentido contrario de la prueba. La simulaci´on de la MT involucra los siguientes aspectos: Codificar las configuraciones de la MT en configuraciones de la MP
  • 198. 6.6. M ´AQUINAS DE POST 189 Para cada acci´on de MT, encontrar un diagrama en MP que haga lo mismo. La codificaci´on de la configuraci´on de la MT en una configuraci´on “equivalente” de la MP involucra considerar c´omo codificar cada una de las informaciones de la configuraci´on de MT. En particular, hay que pensar c´omo expresar en MP el contenido de la cinta de MT, as´ı como la posici´on de la cabeza lectora. Sea una configuraci´on [[q, w, u, v]] en MT. Entonces en la variable de la MP tendr´ıamos: uv@w. Como se ve, el primer caracter de la variable es el mismo caracter sobre el que est´a la cabeza lectora en la MT; luego sigue a la derecha la misma cadena que en la MT. En cambio, la parte izquierda de la cinta en MT es colocada en la variable de MP separada por el caracter especial “@”. Por ejemplo, si en MT tenemos una cinta de la forma abaabbb, la variable de MP contendr´a la cadena abbb@aba. Ahora hay que considerar c´omo “traducir” las acciones de una MT a acciones correspon- dientes en una MP. Consideramos los siguientes casos: Escritura de caracter: Sea una transici´on δ(p, d) = (q, σ), donde σ ∈ Γ. Al paso entre configuraciones de MT: [[p, abcdefg]] [[q, abcσefg]] corresponde el paso de x a x como sigue: x = defg@abc x = σefg@abc Para hacer la transformaci´on indicada (de x a x ) en MP, hay que encontrar un dia- grama que la efect´ue. Un diagrama que cumple con esta funci´on aparece en la figura 6.9. Movimiento a la derecha: Al paso entre configuraciones de MT: [[p, abcdefg]] [[q, abcdefg]] corresponde el paso de x a x : x = defg@abc x = efg@abcd Este paso de x a x se puede hacer con el (muy simple) diagrama de MP de la figura 6.10. Movimiento a la izquierda: A un paso entre configuraciones en MT: [[p, abcdefg]] [[q, abcdefg]] corresponde el paso de x a x : x = defg@abc x = cdefg@ab El diagrama de la MP que hace dicha operaci´on es dejado como ejercicio (medianamente dif´ıcil) al lector (ver secci´on de ejercicios).
  • 199. 190 CAP´ITULO 6. M ´AQUINAS DE TURING x tail(x) x tail(x) x tail(x) {defg@abc} {efg@abc} x x@ x x σ {efg@abc@} {efg@abc@ }σ x x u u=@u = @ x x @ {abc@ efg}σ {abc@ efg@}σ x x u u=@u = @ { efg@abc}σ Figura 6.9: Escritura en MP x x← ζζ x tail(x)← ζ Figura 6.10: Movimiento a la derecha en MP
  • 200. 6.7. L´IMITES DE LAS MT 191 La prueba de equivalencia MT-MP en el otro sentido –esto es, la simulaci´on por parte de una MT de una MP– es mucho m´as simple. Primero se toma el contenido inicial de la variable de entrada como palabra de entrada de la MT. Luego cada una de las operaciones de MP (x ← xσ, x ← tail(x), ACCEPT, REJECT) pueden ser simuladas por la MT correspondiente. Dejamos nuevamente los detalles de esta prueba al lector (ver secci´on de ejercicios). 6.7. L´ımites de las MT Aunque parezca incre´ıble, hay problemas que no se pueden resolver como una secuencia determinista de operaciones elementales, que es lo esencial de las MT. Estos problemas son llamados algor´ıtmicamente irresolubles. Vamos a concentrar nuestra atenci´on en problemas del tipo: dados una palabra w y (la descripci´on de) un lenguaje L, decidir si w ∈ L, que son llamados “problemas de pertenencia de palabras” (word problems). Decimos que un lenguaje L es decidible si hay una MT para decidir el problema de la pertenencia de palabras. Muchos otros problemas que no son del tipo mencionado pueden sin embargo expresarse en t´erminos de ´estos mediante una transformaci´on adecuada; por ejemplo, el problema de determinar si dos gram´aticas G1 y G2 son equivalentes, puede expresarse de la manera siguiente: Para toda w ∈ L(G1), decidir si w ∈ L(G2). 6.7.1. El problema del paro de MT Ahora vamos a considerar un problema irresoluble que hist´oricamente tuvo mucha im- portancia porque fue el primer problema que se prob´o irresoluble. Una vez que se cuenta con un primer problema irresoluble, la prueba de que otros problemas son irresolubles consiste en probar que ´estos pueden ser reducidos al problema de referencia. Este primer problema irresoluble es el del paro de la MT. El problema del paro de la MT consiste en determinar algor´ıtmicamente –esto es, medi- ante una MT– si una MT dada M va a parar o no cuando analiza la palabra de entrada w. Desde luego, como una MT analiza el comportamiento de otra, se requiere que esta ´ultima sea dada como entrada a la primera; esto puede ser hecho mediante una codificaci´on de la MT que debe analizarse. Una manera simple de codificar una MT es considerando la cade- na de s´ımbolos de su representaci´on como cu´adruplo (K, Σ, δ, s). Denotaremos con d(M) la codificaci´on de una MT M. 9 Teorema.- No existe ninguna MT tal que, para cualquier palabra w y cualquier MT M, decida si w ∈ L(M). 9 Esta soluci´on para codificar una MT no es perfecta, pues el alfabeto usado para codificar una MT arbitraria no puede determinarse de antemano; no haremos por el momento caso de este detalle t´ecnico.
  • 201. 192 CAP´ITULO 6. M ´AQUINAS DE TURING d(M) w M para con w M no para con w 1 0 Figura 6.11: El problema del paro de una MT En la figura 6.11 se muestra c´omo deber´ıa funcionar la MT que resolver´ıa el problema del paro. Prueba 10 Por contradicci´on.- Sea A la MT de la figura 6.12(a). Entonces construimos otra MT B, como se representa en la figura 6.12(b), esto es, se tiene una ´unica entrada con la codificaci´on d(M) de la MT M, y se pasa esta palabra a una MT copiadora, que duplica la entrada d(M). La salida de la copiadora ser´a dos veces d(M). Esto es pasado como entrada a una m´aquina A que es A modificada 11 de la siguiente manera: a la salida 1 de A la cambiamos de forma que en vez de dar el halt se cicle; debe quedar claro que esto siempre puede hacerse. Ahora bien, comparando A con A se ve que la salida 1 corresponde al hecho de que M para con d(M). Finalmente supongamos que aplicamos la m´aquina B a una entrada formada por la misma m´aquina codificada, esto es, d(B). Entonces cuando B se cicla, esto corresponde a la salida que indica que “B se para con d(B)”, lo cual es contradictorio. Similarmente, B entrega un resultado 0 –esto es, se para– en el caso que corresponde a “B no se para con d(B)”, que tambi´en es contradictorio. Esto se ilustra en la figura 6.12(c). Utilizando el problema del paro de la MT como referencia, se ha probado que otros problemas son tambi´en insolubles. Entre los m´as conocidos, tenemos los siguientes: El problema de la equivalencia de las gram´aticas libres de contexto. La ambig¨uedad de las GLC. El problema de la pertenencia de palabras para gram´aticas sin restricciones. No haremos la prueba de estos resultados; remitimos al lector a las referencias [10], [7]. 6.8. MT en la jerarqu´ıa de Chomsky En conclusi´on, las MT no son capaces de aceptar todos los lenguajes posibles en 2Σ∗ . Sin embargo, este hecho puede ser establecido simplemente a partir de la enumerabilidad de las 10 Esta prueba es debida a M. Minsky [14], aunque la primera prueba data de Turing [24]. 11 Obs´ervese que la segunda repetici´on de d(M) es de hecho la palabra w que se supone que es sometida a M.
  • 202. 6.8. MT EN LA JERARQU´IA DE CHOMSKY 193                                                                                                                                                                                 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ d(M) w M para con w M no para con w 1 0 A (a) M´aquina A                                                                                                                                                           ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ d(M)d(M) M para con d(M) M no para con d(M) cicla 0 copia A’ d(M) B (b) M´aquina B                                                                                                                                                           ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ d(B)d(B) B para con d(B) B no para con d(B) cicla 0 copia A’ d(B) B (c) Contradicci´on Figura 6.12: Prueba del paro de MT MT: puesto que las MT son cu´adruplos (K, Σ, δ, s) -y por lo tanto elementos de un producto cartesiano-, al ser enumerable cada uno de los componentes necesariamente el cu´adruplo es tambi´en enumerable. En efecto: Los conjuntos de los estados posibles son enumerables si estandarizamos los nombres de los estados a q0, q1, q2, etc., lo cual evidentemente no altera ning´un aspecto del funcionamiento de la MT (ver secci´on de ejercicios). Similarmente, un alfabeto est´andar σ0, σ1, σ2, etc., puede codificar cualquier alfabeto en particular. As´ı, tambi´en los alfabetos son enumerables. La funci´on de transici´on es parte de otros productos cartesianos de estados y caracteres, por lo que es tambi´en enumerable. Los estados iniciales trivialmente son enumerables, siguiendo la estandarizaci´on del primer punto.
  • 203. 194 CAP´ITULO 6. M ´AQUINAS DE TURING Ahora bien, al ser enumerables las MT, resulta que no puede mapearse un elemento de 2Σ∗ con una MT distinta, y por lo tanto hay lenguajes que no tienen una MT que los acepte. Desde luego, el resultado anterior no ayuda a localizar exactamente qu´e lenguajes no son aceptados por ninguna MT; esto ya se hab´ıa hecho para algunos lenguajes en la secci´on precedente. Resulta ´util entonces ubicar la parte de los lenguajes que s´ı pueden aceptar las MT con respecto a otras clases de lenguajes, siguiendo la estructura de clases de lenguajes llamada “jerarqu´ıa de Chomsky”, que presentamos en las secciones 1.5 y 4.1 Recordando la jerarqu´ıa de Chomsky, que clasifica los lenguajes en categor´ıas, y la forma en que se asocian distintos tipos de m´aquinas a dichas categor´ıas de lenguajes, ahora estamos en condiciones de refinar la tabla que fue presentada en la secci´on 4.1, de la manera siguiente (indicamos entre par´entesis las secciones de este libro donde se presenta cada tema): Tipo de Lenguaje que Gram´atica que aut´omata procesa lo genera Aut´omatas finitos Lenguajes Regulares Gram´aticas regulares (2.2) (3) (3.5) Aut´omatas de Pila Lenguajes Libres de Contexto Gram. libres de contexto (5) (4) (4) Aut´om. linealmente acotados Leng. Sensitivos al Contexto Gram. sensitivas al contexto (4.7) (4.7) M´aq. de Turing decidiendo Lenguajes Recursivos (6.4) M´aq. de Turing aceptando Leng.Recursiv. Enumerables Gram. no restringidas (6.2.5) (4.1) En esta tabla hemos diferenciado la clase de lenguajes que pueden ser decididos por una MT, que son llamados “recursivos”, de los lenguajes que pueden ser aceptados por una MT, que son los “recursivamente enumerables”, aunque no hemos definido ninguno de ellos m´as que por su relaci´on con las MT. 12 Asimismo hemos mencionado, por completez, la clase de los lenguajes Sensitivos al Con- texto, que fueron citados en la secci´on 4.7, aunque no hemos estudiado los aut´omatas “lin- ealmente acotados” en este libro; pueden estudiarse en las referencias [21] o [7]. De acuerdo con la presentaci´on de la jerarqu´ıa de Chomsky que hicimos al estudiar las gram´aticas en la secci´on 4.1, las MT son equivalentes en poder de c´alculo a las gram´aticas no restringidas. La prueba de esto puede ser consultada en diversas referencias [10], [7]. 12 “Recursivamente enumerables” es solamente otro nombre para “Turing aceptable”, usado en textos como [7].
  • 204. 6.9. EJERCICIOS 195 As´ı, de acuerdo con la Tesis de Church, los lenguajes recursivamente enumerables son el m´as extenso conjunto de lenguajes que pueden ser algor´ıtmicamente analizados. 6.9. Ejercicios 1. Dise˜ne un diagrama de estados para la MT del ejemplo de la secci´on 6.2.5, esto es para aceptar el lenguaje an bn cn . Obtenga tambi´en la representaci´on formal de dicha MT. 2. Dise˜ne un diagrama de m´aquina de Turing para calcular la funci´on |log2n|, usando las m´aquinas b´asicas vistas. Describa las acciones efectuadas sobre la cinta. 3. Complete el dise˜no de la MT para el ejemplo de la secci´on 6.3, esto es para calcular restas de n´umeros en unario. Exprese esta MT usando la representaci´on formal. 4. Dise˜nar una MT que decida si la entrada es de longitud par, para palabras en {a, b}∗ . 5. Proponga una MT (o diagrama) que: a) Acepte las palabras de la forma an bm , n, m > 0. b) Decida si en una palabra an bm se cumple m < n. 6. Proponer una MT (su diagrama) que: a) Acepte el lenguaje vac´ıo (∅) b) Decida el lenguaje vac´ıo c) Acepte el lenguaje {ε} d) Decida el lenguaje {ε} 7. Representar formalmente la MP de la figura 6.8. 8. Probar la enumerabilidad de los conjuntos de estados con nombres uniformizados q0, q1, q2, etc. Ayuda: Considere una representaci´on binaria de cada conjunto de estados, tomando 1 si el estado en cuesti´on est´a presente, y 0 si no est´a. 9. Una variante de la MT consiste en hacer que la m´aquina haga un movimiento y tambi´en escriba en cada acci´on. Dichas m´aquinas son de la forma (K, Σ, δ, s), pero δ es una funci´on de (K ×S) a (K ∪{h})×Σ×{L, R, S}, donde el “movimiento” S significa que la cabeza permanece en el lugar en que estaba. D´e la definici´on formal de la relaci´on (“produce en un paso”). 10. Supongamos unas “MTCE” que son como las MT, pero en vez de tener una cinta infinita a la derecha, tienen una “cinta estirable”, que inicialmente contiene s´olo cuadros en la cinta para la palabra de entrada y para un blanco a cada lado de dicha palabra, y que cuando se se mueve a la derecha fuera de la cinta, autom´aticamente es creado un nuevo cuadrito, seg´un se va requiriendo. Formalizar las MTCE, en particular la definici´on de palabra aceptada.
  • 205. 196 CAP´ITULO 6. M ´AQUINAS DE TURING 11. Definir formalmente, en t´erminos de configuraciones de MP y MT, qu´e quiere decir que una acci´on de MP “hace lo mismo” que la acci´on correspondiente de MT. (Este problema completa el enunciado del Teorema de Post). 12. Un aut´omata de dos pilas (A2P) es una extensi´on directa de un aut´omata de pila, pero que tiene dos pilas en vez de una, como en la figura 6.13. Formalice los A2P en la forma w Figura 6.13: Autom´ata de dos pilas (A2P) m´as similar posible a los AP vistos en clase. Defina formalmente las nociones de: a) Configuraci´on. b) Palabra aceptada y lenguaje aceptado. c) Proponga un A2P que acepte el lenguaje {an bn cn }. d) ¿Tienen los A2P el poder de c´alculo de las MT? (Es decir, ¿todo lenguaje Turing- aceptable es aceptado por alg´un A2P?). Pruebe su respuesta. Ayuda: mostrar c´omo simular una MT con A2P. e) Adapte las definiciones de A2P, configuraci´on y palabra aceptada para A2Pn. f ) Dos A2Pn son equivalentes ssi aceptan el mismo lenguaje. Demuestre que el prob- lema de la equivalencia de los A2Pn es / no es decidible. START   REJECT ACCEPTx tail(x) ¡ ← a b ε ¢ x tail(x) ¡ ← b a ACCEPT ε ¢ Figura 6.14: M´aquina de Post 13. Suponga un subconjunto MP1 de las m´aquinas de Post, con la restricci´on de que no tienen las instrucciones x ← xσ. Ahora bien, MP1 es equivalente a AF. a) Demuestre esta afirmaci´on constructivamente, proponiendo un m´etodo sistem´atico para pasar de una MP1 a un AF que acepte el mismo lenguaje.
  • 206. 6.9. EJERCICIOS 197 b) Pruebe el m´etodo propuesto en (a) con la MP1 dada en la figura 6.14. c) Pruebe si la MP1 del inciso anterior acepta o no el lenguaje (abb ∗ a)∗, bas´andose en alg´un procedimiento sistem´atico (explicar cu´al es dicho procedimiento sis- tem´atico). d) Si en una variante MP2 se permiten asignaciones x ← σ, donde σ ∈ Σ∗ , ¿a qu´e tipo de aut´omata corresponde MP2? ¿Porqu´e? 14. Si a las m´aquinas de Post les cambiamos ligeramente las asignaciones para que sean de la forma x ← σx , ¿siguen siendo equivalentes a las MT? Pruebe su afirmaci´on; ya sea: a) Si son equivalentes, probando que pueden hacer lo mismo (por ejemplo, por sim- ulaci´on). b) Si no son equivalentes a Turing, pero son equivalentes a alguna m´aquina inferior, probando dicha equivalencia. c) Si no son equivalentes a Turing, encontrando alg´un lenguaje que una s´ı puede aceptar y la otra no (habr´ıa que probar esto). 15. Suponga una variante de las m´aquinas de Turing, las MT2 en que se tienen dos cintas (cinta 1 y cinta 2) en vez de una; ambas son infinitas hacia la derecha y tienen sendas cabezas lectoras. Por cada transici´on, se leen a la vez los caracteres de las dos cintas, y el control finito determina la acci´on a realizar (simult´aneamente) en las cintas, que pueden ser movimientos o escrituras, como en una MT normal. Las acciones en las dos cintas son independientes, esto es, en la cinta 1 puede tener una acci´on L y en la cinta 2 escribir, etc., en un solo movimiento. La palabra de entrada se escribe en la cinta 1. a) Proponga una definici´on formal de las MT2 b) Defina las nociones de configuraci´on y palabra aceptada. c) Defina funci´on calculada, suponiendo que el resultado queda en la cinta 2. 16. Suponga una variante de las MT, las MTS en que se puede al mismo tiempo escribir en la cinta y hacer los movimientos a la izquierda y a la derecha (L y R); cuando se quiere solamente escribir (sin mover la cabeza) se hace un movimiento nulo (N). a) Defina las MTS, as´ı como su funcionamiento (hasta definir palabra aceptada). b) Pruebe que las MTS son tan poderosas como la MT cl´asica (muestre c´omo obtener a partir de una MT la MTS equivalente). c) Pruebe ahora lo rec´ıproco, mostrando c´omo obtener una MT cl´asica a partir de una MTS dada. 17. Conteste las siguientes preguntas, justificando la respuesta: a) ¿El complemento de un lenguaje Turing-decidible es tambi´en Turing-decidible? b) ¿El complemento de un lenguaje Turing-decidible es Turing-aceptable?
  • 207. 198 CAP´ITULO 6. M ´AQUINAS DE TURING c) ¿Todo lenguaje Turing-decidible ser´a subconjunto de alg´un lenguaje libre de con- texto? d) ¿La intersecci´on de un Turing-aceptable con un libre de contexto ser´a libre de contexto? 18. Es sabido que el problema de la equivalencia de MT es indecidible. Sin embargo, para algunos subconjuntos de las MT s´ı es posible decidir la equivalencia. Para las sigu- ientes MT (no deterministas), probar rigurosamente su equivalencia / no equivalencia respecto a la aceptaci´on / rechazo de palabras (es decir, que los lenguajes aceptados son iguales), describiendo el m´etodo utilizado para esta prueba: MT1 = ({f, g, j, k, m}, {a, b}, {a, b, }, δ1, f) f g L g h g a L L g b f L f a f L f b f L j a m L j b k L k a m L k b f L k h m a m L m b k L MT2 = ({o, q, n, p}, {a, b}, {a, b, }, δ2, q) q o L o h o a n L o b p L n a n L n b o L p a p L p b p L 19. Si limitamos el tama˜no de la cinta de una m´aquina de Turing a una cantidad fija k de cuadros, dando una variante que llamaremos MTk, a) ¿disminuye por ello el poder de c´alculo? ¿A qu´e tipo de aut´omatas ser´ıan equiv- alentes las MTk ? Pruebe su respuesta. b) ¿Es posible decidir si dos MTk son equivalentes? Pruebe su respuesta, y en el caso afirmativo, proponga el m´etodo de decisi´on correspondiente.
  • 208. 6.9. EJERCICIOS 199 20. Realizar el diagrama de MP que simula el movimiento de la cabeza a la izquierda en una MT (esto es parte de la prueba de equivalencia de MP y MT). 21. Completar la prueba de equivalencia de las MP y las MT, detallando la simulaci´on de la MP en una MT, siguiendo las ideas esbozadas en la p´agina 191.
  • 209. 200 CAP´ITULO 6. M ´AQUINAS DE TURING
  • 210. Bibliograf´ıa [1] A. Aho, J. Ullman.- Principles of Compiler Design, Addison-Wesley, Reading, Mass., 1978. [2] J. Barwise, J. Etchemendy.- Turing’s World 3.0 -An Introduction to Computability The- ory, CSLI Publications, Stanford, CA, 1993. [3] G. Brookshear.- Teor´ıa de la Computaci´on, Addison Wesley Iberoamericana, 1993. [4] N. Chomsky.- Aspects of the Theory of Syntax, Cambridge, MIT Press, 1965. [5] V. Drobot.- Formal languages and automata theory, Computer Science Press, 1989. [6] J. Hopcroft, J. Ullman.- Introduction to Automata Theory, Languages and Computation, Addison Wesley, 1979. [7] J. Hopcroft, R. Motwani, J. Ullman.- Introduction to Automata Theory, Languages and Computation, Second Edition, Addison Wesley, 2001. [8] D. Kelley.- Teor´ıa de Aut´omatas y Lenguajes Formales, Prentice Hall Hispanoamericana, 1995. [9] J. Levine, T. Mason, D. Brown.- Lex & Yacc, O’Reilly & Associates, 1992. [10] H.R. Lewis, Ch.H. Papadimitriou.- Elements of the Theory of Computation, Prentice Hall, 1981. [11] P. Linz.- An Introduction to Formal Languages and Automata, D. C. Heath and Com- pany, 1990. [12] Z. Manna.- Mathematical Theory of Computation, McGraw Hill, 1974. [13] G. Mealy.- A method for synthesizing sequential circuits, BSTJ n.34, 1955, pp1045-1079. [14] M. Minsky.- Computation: Finite and Infinite Machines, Prentice Hall, 1967. [15] E. Moore.- Gedanken-experiments on sequential machines, en “Automata Studies” (C. Shannon, J. McCarthy eds.), Princeton Univ. Press, 1956. [16] J.L. Peterson.- Petri Net Theory and the Modeling of Systems, Prentice Hall, 1981. 201
  • 211. 202 BIBLIOGRAF´IA [17] C. Petri.- Kommunication mit Automaten, Universidad de Bonn, 1962. [18] J.I.. Pozo.- Teor´ıas cognitivas del aprendizaje, 2da Ed., Morata, Madrid, Espa˜na, 1993. [19] S. Sahni.- Concepts in Discrete Mathematics, Camelot Publishing Co. 1985. [20] M. Silva.- Las Redes de Petri en la Autom´atica y la Inform´atica, Editorial AC, 1985. [21] M. Sipser.- Introduction to the Theory of Computation, PWS Pub. Co., 1997. [22] G. Springer, D.P. Friedman.- Scheme and the Art of Programming, The MIT Press, 1989. [23] T. Sudkamp.- LANGUAGES AND MACHINES.- An Introduction to the Theory of Computer Science, Addison Wesley, 1994. [24] A. Turing.- On computable numbers with an application to the Entscheidungs-problem, Proc. London Math. Soc., v.2, n.42, pp230-265.
  • 212. ´Indice alfab´etico ´arbol de comparaci´on, 44 de compilaci´on, 122 de derivaci´on, 122 AFD, 32 AFN, 58 alfabeto, 17 de constantes, 115 de entrada, 32 de variables, 115 algoritmos de decisi´on, 139 ambig¨uedad, 123 ambigua, 123 analizador l´exico, 155 analizador sint´actico, 156 arboles de derivaci´on, 115 aut´omata finito determinista, 32 aut´omatas de Mealy, 53 de Moore, 53 de pila, 146 finitos, 25 no deterministas, 58 aut´omatas equivalentes, 43 Cantor, 89 cerradura al vac´ıo, 69 de Kleene, 18 reflexiva, 9 sim´etrica, 9 transitiva, 9 Chomsky, 96, 113, 132 Chomsky, N., 19 Church, 183 clases de equivalencia, 50 codominio, 10 compilador LL, 157 LR, 160 compiladores, 155 completa, 116 completez, 125 concatenaci´on, 17 concatenaci´on de lenguajes, 120 condiciones comprensivas, 40 excluyentes, 40 conectivos l´ogicos, 13 configuraci´on, 35, 151, 174 configuraci´on colgada, 178 conjunci´on, 13 conjunto contable, 11 elemento, 4 conjuntos, 3 complemento, 6 diferencia, 6 en extensi´on, 3 en intenci´on, 4 intersecci´on, 6 potencia, 6 producto cartesiano, 6 uni´on, 5 conmutatividad, 14 constantes, 96, 111 correcci´on, 125 correcta, 116 De Morgan, 14 decidible, 191 derivable, 97, 116 derivaci´on 203
  • 213. 204 ´INDICE ALFAB´ETICO derecha, 124 izquierda, 124 determinismo, 32 diagramas de Venn, 4 distributividad, 14 disyunci´on, 13 dominio, 10 equivalencias de proposiciones, 14 equivalencias de expresiones regulares, 86 ER, 81 estado, 26 final, 30, 32 inicial, 32 estado inicial, 27 estados compatibles, 44 incompatibles, 44 estados distinguibles, 48 evento, 26 eventos discretos, 26 expresiones regulares, 79 FNCH, 132 forma normal de Chomsky, 132 funci´on de transici´on, 32 funciones, 8, 9, 56 inyectivas, 10 sobrelyectivas, 10 totales, 10 generador de c´odigo, 156 gr´aficas de transici´on, 90 gram´atica ambigua, 123 completa, 116 correcta, 116 incompleta, 117 incorrecta, 117 gram´atica formal, 96 gram´aticas de tipo 0, 113 de tipo 1, 113 de tipo 2, 113 de tipo 3, 113 libres de contexto, 113 no restringidas, 113 regulares, 79, 96, 113 sensitivas al contexto, 113, 128 GT, 90 halt, 171 implicaci´on, 12 incompleta, 37, 117 incorrecta, 37, 117 inducci´on, 15, 125 jerarqu´ıa de Chomsky, 19, 113, 194 Kantor, teorema, 11 Kleene, 89 lenguaje, 17 aceptado, 34 generado, 97, 116 lenguajes decidibles, 191 libres de contexto, 19, 111 recursivamente enumerables, 19, 113, 194 regulares, 19, 79 lenguajes recursivos, 194 libres de contexto, 113 LIFO, 146 LL, 157 LLC, 111 lookahead, 156 LR, 160 m´aquina de Turing, 169 m´aquina de estados finitos, 32 m´aquinas de Mealy, 55 de Moore, 53 de Post, 185 Mealy, 53 mezcla de gram´aticas, 119 minimizaci´on, 46 modelado, 26
  • 214. ´INDICE ALFAB´ETICO 205 Moore, 53 MP, 185 MT, 169 no restringidas, 113 no terminales, 96 notaci´on formal, 32 nubes, 40 pal´ındromos, 148 palabra, 17 aceptada, 34, 178 generada, 96 palabra vac´ıa, 17 paro de la m´aquina de Turing, 191 pila, 146 Post, 184 principio de previsi´on, 156 problemas irresolubles, 191 proposiciones, 12 recursivamente enumerables, 113, 194 regla, 111 reglas gramaticales, 96 inaccesibles, 132 regulares, 96, 113 relaci´on de derivaci´on, 116 inverso, 8 sim´etrica, 9 transitiva, 9 relaciones, 8 reverso, 148 s´ımbolo, 17 s´ımbolo inicial, 96 sensitivas al contexto, 113, 128 simplificaci´on, 46 subcadena, 17 subconjunto, 4 tabla de s´ımbolos, 156 tablas de verdad, 14 teorema de bombeo, 101 de Cantor, 89 de Kleene, 89 teorema de bombeo, 136 terminales, 96 tesis de Church, 183 tipo 0, 113 tipo 1, 113 tipo 2, 113 tipo 3, 113 tokens, 155 transiciones, 27 Turing, 169 Turing, Alan, 169 Turing-aceptable, 179 Turing-decidible, 182 uni´on de lenguajes, 118 variables, 96, 111