You are on page 1of 127

Teora de Autmatas y Lenguajes Formales

Versin 12
Dr. Arno Formella
Universidade de Vigo
Escola Superior de Enxeara Informtica
Departamento de Informtica
rea de Linguaxes e Sistemas Informticos
E-32004 Ourense
http://trevinca.ei.uvigo.es/%7Eformella
formella@uvigo.es

Junio 2014

Dr. Arno Formella

ndice
1. Sobre este documento
1.1. Versiones y lista de correcciones . . . . . . . . . . . . . . . . . . . . . . . . . .
2. Introduccin
2.1. Reglas de sustitucin para formar secuencias
2.2. Autmatas que aceptan secuencias . . . . . .
2.3. Lenguajes y autmatas . . . . . . . . . . . .
2.4. Mquinas de Turing universales . . . . . . .

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

5
5

.
.
.
.

8
9
10
11
11

3. Conceptos bsicos
3.1. Alfabetos . . . . . . . . . . . . . . .
3.2. Palabras . . . . . . . . . . . . . . . .
3.3. Lenguajes . . . . . . . . . . . . . . .
3.4. Producciones y Derivaciones . . . . .
3.5. Relaciones de equivalencia . . . . . .
3.6. Relacin de equivalencia de lenguajes

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

13
13
13
16
18
19
21

4. Gramticas generativas
4.1. Ejemplos . . . . . . . . .
4.2. Abreviacin de Backus . .
4.3. rbol de derivacin . . . .
4.4. Jerarquia de Chomsky . . .
4.5. Equivalencia y ambigedad

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

22
23
25
26
26
28

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

5. Autmatas finitos
5.1. Autmatas finitos deterministas (AFD) . . . . . . . .
5.2. Autmatas finitos no-deterministas (AFND) . . . . .
5.3. Equivalencia entre AFD y AFND . . . . . . . . . . .
5.4. Autmatas finitos no-deterministas con transiciones
(AFND-) . . . . . . . . . . . . . . . . . . . . . . .
5.5. Equivalencia entre AFND y AFND- . . . . . . . . .
5.6. Existencia de autmatas finitos mnimos . . . . . . .
5.7. Ejemplos de uso del teorema de Myhill y Nerode . .
5.8. Algoritmo de minimizacin . . . . . . . . . . . . . .

30
. . . . . . . . . . . . . . . 30
. . . . . . . . . . . . . . . 33
. . . . . . . . . . . . . . . 34
.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

6. Expresiones regulares
6.1. Sintaxis y semntica . . . . . . . . . . . . . . . . . . . . .
6.2. Equivalencia entre autmatas finitos y expresiones regulares
6.3. Abreviaciones para el uso de expresiones regulares . . . . .
6.4. Smbolos y meta-smbolos . . . . . . . . . . . . . . . . . .

.
.
.
.
.

.
.
.
.

.
.
.
.
.

.
.
.
.

.
.
.
.
.

.
.
.
.

.
.
.
.
.

.
.
.
.

.
.
.
.
.

.
.
.
.

.
.
.
.
.

.
.
.
.

.
.
.
.
.

.
.
.
.

.
.
.
.
.

.
.
.
.

.
.
.
.
.

.
.
.
.

.
.
.
.
.

.
.
.
.

.
.
.
.
.

39
42
44
46
47

.
.
.
.

50
50
52
55
56

Dr. Arno Formella

7. Lenguajes regulares
57
7.1. Equivalencia entre gramticas lineales por la derecha y autmatas finitos . . . . . 57
7.2. Equivalencia entre gramticas lineales por la derecha y lineales por la izquierda . 59
7.3. Lema de bombeo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
8. Propiedades, algoritmos de decisin,
y aplicaciones para lenguajes regulares
8.1. Propiedades de lenguajes regulares . . . . . . . . . . . . . . . . . . . . . . . . .
8.2. Algoritmos de decisin de lenguages regulares . . . . . . . . . . . . . . . . . . .
8.3. Aplicaciones para lenguajes regulares . . . . . . . . . . . . . . . . . . . . . . .

65
65
67
68

9. Lenguajes libres de contexto


69
9.1. Forma Normal de Chomsky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
9.2. Forma Normal de Greibach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
9.3. Lema de bombeo para lenguajes libres de contexto . . . . . . . . . . . . . . . . 80
10. Autmatas finitos con pila (AFP)
10.1. Motivacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.2. Autmatas finitos con pila no-deterministas (AFPND) . . . . . . . . . . . . . . .
10.3. Equivalencia entre AFPNDs aceptando con pila vaca y aceptando en estado final
10.4. Equivalencia entre AFPNDs y gramticas libres de contexto . . . . . . . . . . .
10.5. Autmatas finitos con pila deterministas (AFPD) . . . . . . . . . . . . . . . . .

81
82
83
87
89
91

11. Propiedades, algoritmos de decisin,


y aplicaciones para lenguajes libres de contexto
92
11.1. Propiedades de lenguajes libre de contexto . . . . . . . . . . . . . . . . . . . . . 93
11.2. Algoritmos de decisin de lenguages libres de contexto . . . . . . . . . . . . . . 93
11.3. Aplicaciones para lenguajes libres de contexto . . . . . . . . . . . . . . . . . . . 94
12. Hojas de ejercicios (con respuestas)
12.1. Hoja 1 (23 de Febrero de 2010) .
12.2. Hoja 2 (2 de Marzo de 2010) . .
12.3. Hoja 3 (9 de Marzo de 2010) . .
12.4. Hoja 4 (16 de Marzo de 2010) .
12.5. Hoja 5 (23 de Marzo de 2010) .
12.6. Hoja 6 (6 de Abril de 2010) . . .
12.7. Hoja 7 (13 de Abril de 2010) . .
12.8. Hoja 8 (20 de Abril de 2010) . .
12.9. Hoja 9 (27 de Abril de 2010) . .
12.10.Hoja 10 (4 de Mayo de 2010) . .
12.11.Hoja 11 (11 de Mayo de 2010) .
12.12.Hoja 12 (18 de Mayo de 2010) .
12.13.Hoja 13 (1 de Junio de 2010) . .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

95
95
96
97
99
100
102
103
105
107
110
112
113
115

Dr. Arno Formella


12.14.Hoja 14 (10 de Marzo de 2009)
12.15.Hoja 15 (17 de Marzo de 2009)
12.16.Hoja 16 (24 de Marzo de 2009)
12.17.Hoja 17 (31 de Marzo de 2009)
12.18.Hoja 18 (05 de Mayo de 2009)
12.19.Hoja 19 (12 de Mayo de 2009)
12.20.Hoja 20 (19 de Mayo de 2009)
12.21.Hoja 21 (26 de Mayo de 2009)

4
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

116
117
118
119
120
121
122
125

13. Bibliografa
127
13.1. Bibliografa bsica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
13.2. Bibliografa, enlaces en la red . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
13.3. Bibliografa usada para la preparacin de las clases . . . . . . . . . . . . . . . . 127

Dr. Arno Formella

1.

Sobre este documento


Este documento es un servicio adicional del profesor para los estudiantes. Los apuntes se han
elaborado para impartir las clases de Teora de Autmatas y Lenguajes Formales (TALF) durante
los aos 2004/05 hasta 2012/2013. El mtodo de enseanza fueren clases maestrales con pizarra
(sin transparencias, ni can de proyeccin) para clases presenciales.
Observa los siguientes comentarios importantes:
Los apuntes
no necesariamente estn completos. El contenido de la asignatura se define por lo que
se expone durante las clases presenciales en congruencia con el programa oficial de la
asignatura.
no necesariamente son correctos. Intento lo mejor. Siempre existe la posibilidad de que
haya fallos ortogrficos o de redaccin. Adems, como en todos los campos de la informtica, lo correcto no es lo que diga el profesor, lo correcto es, lo que es correcto.
no necesariamente siguen el orden de las clases presenciales. Es posible que el orden
de los apartados no es exactamente igual que el orden presentado en clases.
contienen apartados que no se han dado en todos los cursos. Siendo clases presenciales,
los estudiantes ya sabrn distinguir.
todava estn sin grficos.
Los apuntes se han escrito sin el uso de una enumeracin explcita de las definiciones, lemas,
y teoremas, como se suele usar en tal contexto. Se anima al lector que estructure su novela
individual con annotaciones en los mrgenes para enumerar las definiciones, lemas, y teoremas
y relacionar as de mejor manera las diferentes partes.

1.1.

Versiones y lista de correcciones

A parte de algunas correcciones de ortografa y de correcciones menores se han realizado los


siguientes cambios de versin en versin:
Versin 12
Se han quitado los apartados relacionados con la organizacin de clases.

Dr. Arno Formella

Se han incluido directamente en el documento los boletines de cuestiones con respuestas.


Versin 11
Se ha modificado ligeramente la seccin de las relaciones de equivalencia (pgina
19).
Se ha revisado la definicin de la Mquina de Turing (pgina 11) que tena el error
de B
/ , pero la B tiene que pertenecer a sino la mquina se quedara atrapada
una vez visitando tal casilla.
Se ha aadido enlaces en red en la bibliografa.
Versin 10
Faltaba un en la definition de una gramtica (pgina 22).
Por problemas de notacin de nmeros flotantes, aparecieron comas en vez de puntos
en los ejemplos de expresiones regulares (pgina 51).
Versin 9
En el quinto paso de la transformacin a FNC (pgina 75) se ha olvidado eliminar
variables que puedan ser inacesibles despus de haber eliminado las reglas unitarias.
En el primer paso de la transformacin de gramtica lineal por la derecha a gramtica
lineal por la izquierda (pgina 59) estaban la variables a la izquierda en vez a la
derecha.
Versin 8
Como siempre, ms errores menores corregidos.
Est incorporado la gua docente (pgina ??).
Se actualiz la bibliografa bsica.
Versin 7
Se han corregido unos errores menores de uso de smbolos y faltas de parntesis.
Haba un fallo en el tercer paso de la construccin de una gramtica en forma normal
de Greibach (pgina 77), dado que en el segundo paso se pueden generer reglas largas,
entonces, Y puede ser una palabra sobre las variables (se usa ahora).
Versin 6
Se cambi ligeramente la introduccin aadiendo sobre todo un apartado sobre el
concepto de la mquina de turing y su universalidad.
Versin 5

Dr. Arno Formella

Se ha movido la definicin de equivalencia entre autmatas al comienzo de la seccin


5.3.
Haba un fallo en la definicin del lenguaje Ldos (pgina 33).
Se ha aumentado la definicin de para AFND con otra equacin a lo mejor ms
sencillo de entender (pgina 33).
Versin 4
Haba un fallo en las propiedades de la concatenacin de lenguajes: L1 . = (y no
= L1 ) (pgina 17).
Versin 3
Se ha modificada ligeramente la introduccin.
Versin 2
(Seccin 3.6) mejorado la precisin de la observacin
(Seccin 7) Si (q, ) = p es una transicin del AFD, con q Q, p F y ,
entonces aadimos a P la produccin q .
(Seccin 7) Entonces el sistema de producciones P de la gramtica ser:
P = {q0 aq0 |a|bq1 |b|cq2 |c|, q1 bq1 |b|cq2 |c, q2 cq2 |c}
(Seccin 9.1) Si el lenguaje de partida L contiene la palabra vaca ( L) entonces
se detecta en el paso 4 que el smbolo inicial pertenece a E (o incluso a E ), en este
caso eliminamos con un nuevo smbolo, por ejemplo $0 , la aparencia de $ en los lados
derechos y aadimos la regla $ . Tal gramtica sigue estando en forma normal
de Chomsky y genera L.
(Seccin 9.2) Obviamente cualquier gramtica en forma normal de Greibach es una
gramtica libre de contexto que se verifica directamente analizando la forma de producciones permitidas.

Dr. Arno Formella

2.

Introduccin
Por qu es importante la teora de lenguajes formales y autmatas?
Bueno, aclaramos primero un poco las palabras usadas.
Qu es un lenguaje formal?
Conocemos lenguajes naturales.
espaol, alemn, ingls, chino, rabe...
cuando nacemos no sabemos ningn lenguaje
se puede aprender cualquier lenguaje natural (por lo menos si se ha nacido en un entorno
adecuado, y no hay obstculos orgnicos)
el lenguaje es una secuencia de fonemas o smbolos
que forman slabas, palabras, frases, prrafos, captulos, novelas, libros, bibliotecas
etc.
que tiene una sintaxis (fontica o ortografa)
que tiene una gramtica (reglas de concatenacin y construccin de palabras para
formar frases)
(que tiene un estilo (forma de unir frases para generar textos))
Hoy en da aparecen cada vez ms smbolos (llamados iconos) con el propsito de simplificar
sobre todo las interfaces al usuario, es decir, se quiere transmitir una semntica a partir de un
smbolo. Como ejercicio para reflexionar y criticar el uso excesivo de tal moda, se pide: intenta
averiguar el significado de los siguientes smbolos (relacionados semnticamente entre si) que
estn en uso desde hace cientos de aos por una gran parte de la humanidad:

En el contexto de esta asignatura lenguajes formales sern meramente conjuntos de secuencias


de smbolos (cuya construccin se consigue con una gramtica formal).
Qu es un autmata?

Dr. Arno Formella

dispositivo mecnico o electrnico o biolgico


que en un punto de tiempo est en un estado
que dado una razn (por ejemplo una seal de entrada) cambia de estado
ejemplos son: reloj mecnico o electrnico, mquina para lavar, todo un ordenador, el
cerebro?
ya se han construido relojes biolgicos con trozos de DNA artificial y sntesis de protenas
que visualizan su cambio de estado con luz fluorescente
En el contexto de esta asignatura autmatas sern mquinas matemticas con estados y funciones
de transicin (donde se puede aadir entrada, salida, memoria interna modificable, etc.).
Los conceptos de gramticas (formales) y de los autmatas describen el mismo fenmeno
y estn muy relacionados con los algoritmos.
Se distingue la Teora de Computabilidad y la Teora de Complejidad, es decir, la bsqueda
de respuestas a preguntas como: Qu es computable? y Cuntos recursos (memoria,
espacio, tiempo, transiciones) se necesitan?
Es decir, la Teora de los Lenguajes Formales (y de los Autmatas) permite responder a preguntas
escenciales de la Informtica. Dos observaciones importantes:
Tesis de Church: Todo lo que es computable se puede calcular con una Mquina de Turing.
Existen problemas que no son computables.
Resumen: Sin TALF no hay lenguajes, no hay compiladores, no hay programas, no hay ordenadores, no hay red, no hay nada.

2.1.

Reglas de sustitucin para formar secuencias

favoritas
Con este diagrama podemos formar unas reglas para sustituir smbolos:
$ AB
C son
G
J

A esas
D EF
H IJ
F en informatica

donde usamos para decir que no escribimos nada.

A
B CD
E GH G mis
I clases J favoritas
F

Dr. Arno Formella

10

Con dichas reglas podemos derivar diferentes frases, por ejemplo:


$

AB
esasB
esasCD
esas sonD
esas sonEF
esas sonGHF
esas sonHF
esas sonH
esas sonIJ
esas son clasesJ
esas son clases

donde siempre hemos usado una regla adecuada para sustituir smbolos hasta llegar a tal punto
que ya no se puede aplicar ninguna regla ms.
Y con pequeos arreglos podemos traducirlo al alemn:
$ AB
C sind
G
J

A dies
B CD
D EF
E GH
G meine
H JI
I Vorlesungen J liebsten
F in Informatik F

es decir, hemos quitado la regla A y hemos cambiado la regla de H IJ a H JI.


Otro ejemplo ms sencillo.
Usamos las reglas $ ab$ y $ para generar palabras del tipo ab, abab, ababab etc.
Podemos derivar una palabra:
$ ab$ abab$ ababab$ ababab
siempre aplicando alguna de las reglas hasta tal punto que ya no se puede aplicar ninguna regla.
Hemos usado el smbolo para decir que no sustituimos por nada (juega el mismo papel que el
0 para nmeros).

2.2.

Autmatas que aceptan secuencias

Construimos un autmata que acepta una palabra del tipo mencionado anteriormente. Entendemos por aceptar que el autmata llega a un estado final. Consumimos para cada transicin de
estado una letra de la palabra. Podemos dibujar un autmata:

Dr. Arno Formella

11

automata
donde el estado inicial (o de comienzo) est marcado con una flecha, el estado final est marcado
con un doble crculo. Las transiciones estn visualizadas con flechas entre los estados que a su
vez estn marcados con sus smbolos correspondientes. Si empezamos en el estado inicial, y si
leemos la palabra por aceptar desde la izquierda hacia la derecha, podemos saltar de estado a
estado siguiendo los arcos adecuados.
Observamos que llegamos solamente al estado final si la palabra por aceptar es una palabra vlida
del lenguaje.

2.3.

Lenguajes y autmatas

Vemos y veremos
que las gramticas sirven para generar palabras (y con eso lenguajes) y
que los autmatas sirven para aceptar palabras (y con eso lenguajes).
Hacia el final del curso tendremos algunos conocimientos sobre una jerarqua de lenguajes y las
equivalencias entre:
Lenguajes Tipo 3, Gramticas Regulares y Autmatas Finitos,
Lenguajes Tipo 2, Gramticas Libres de Contexto y Autmatas Finitos con Pila,
Lenguajes Tipo 1, Gramticas Sensitivos al Contexto y Autmatas Linealmente Acotados,
Lenguajes Tipo 0, Gramticas Generales y Mquinas de Turing.
Dicha clasificacn es algo gruesa considerando avances modernas en la teora de lenguajes formales: los lenguajes tipo 2 se dividen en dos: deterministas y no-deterministas que se aceptan
con autmatas de pila deterministas y no-deterministas respectivamente. Luego, los lenguages
Tipo 1 ya se dividen en tres subclases que se aceptan con autmatas con cierto tipo de multi-pila.

2.4.

Mquinas de Turing universales

Observamos la siguiente mquina muy simple:


mturing
Como mquina matemtica se suele describir con siete componentes
M = (, , Q, , B, q0 , F )
con (mucho de las notaciones siguientes se entiende ms tarde)

Dr. Arno Formella

12

1. es un conjunto finito de smbolos (alfabeto) para escribir la entrada


2. es un conjunto finito de smbolos (alfabeto) para escribir sobre la cinta ( , || < )
3. Q es un conjunto finito de estados (|Q| < )
4. es la funcin de transicin
: Q W< (Q {L, R, N }); (q, ) = (p, 0 , m)
donde L significa que la cabeza de lectura va una posicin a la izquierda, R que va a la
derecha, y N que no se mueve (este ltimo se puede obviar).
5. q0 es el estado inicial (q0 Q)
6. F es un conjunto de estados finales (F Q)
7. B es un smbolo que se usa para marcar una casilla vaca en la cinta (B )
donde se asumen ciertas cosas implcitamente
la salida es el contenido de la cinta una vez haber llegado a un estado final
la cinta al comienzo contiene a parte de la entrada solamente casillas con el smbolo del
blanco (un nmero infinito)
la entrada se presenta de forma consecutiva en la cinta
la cabeza est situada al principio a la izquierda de la entrada
Dada una entrada la mquina realiza transiciones hasta que llegue a un estado final.
Con el concepto de simulacin, es decir, una mquina M simula otra mquina M 0 reproduciendo la misma salida con la misma entrada se puede construir una mquina de Turing universal.
Dicha mquina, que aparte de la entrada tambin dispone de la descripcin (en una codificacin
adecuada) de la mquina M a simular en la cinta, es capaz de simular cualquier otro mquina.
Con unos arreglos tcnicos se puede construir tal mquina de Turing universal (MTU) con solo
2 smbolos de cinta y 7 estados, o con 5 smbolos de cinta y 2 estados. Es decir, pueden ser
sorprendentemente pequeos teniendo en cuenta que sirven para simular cualquier otra mquina.
(En 2007 se comprob que tambin existe una MTU con solo 3 smbolos de cinta y 2 estados,
pero la comprobacin todava est discutida.)
Ms informacin sobre mquinas de Turing pequeas, por ejemplo, en
http://www.mathrix.org/experimentalAIT/TuringMachine.html
donde hay una MTU en C/C++ con 285 characteres de cdigo fuente.

Dr. Arno Formella

3.

13

Conceptos bsicos

3.1.

Alfabetos

Un alfabeto es un conjunto finito no vaco de smbolos.

1
2
3
4
5
6

=
=
=
=
=
=

{0, 1}
{a, b}
{na, pa, bra, la}
{<HTML>, </HTML>, <BODY>, </BODY>, . . .}
{|}
{a, ab, aab}

Usamos meta-smbolos (tal como {, }, =, y la coma) para escribir sobre lo que hablamos.
Desde el contexto siempre ser claro, si se trata de un smbolo del alfabeto o si se trata de
un meta-smbolo.
Usamos subndices para distinguir diferentes alfabetos.
Usamos normalmente las minsculas como alfabeto = {a, . . . , z}, en los ejemplos normalmente letras desde el principio del alfabeto.
Cardinalidad del alfabeto (nmero de elementos del alfabeto): || > 0, || <

3.2.

Palabras

Una secuencia finita de smbolos de un alfabeto es una palabra sobre dicho alfabeto.

1
2
3
6

:
:
:
:

0, 1, 00, 01, 11, 000, 1001101


a, aa, abb, ababa
napa, palabra
a, ab, aab, aaab, abab

Escribimos la palabra vaca, es decir, la palabra que no contiene ningn smbolo, como .

Dr. Arno Formella

14

Usamos normalmente letras minsculas para anotar palabras, preferiblemente desde el final del alfabeto.
El smbolo no pertenece a ningn alfabeto,
/
La longitud de una palabra sobre un alfabeto es el nmero de smbolos que contiene.

1
2
3
6

:
:
:
:

w
w
w
w

= 0 = |w| = 1, w = 1001101 = |w| = 7


= a = |w| = 1, w = ababa = |w| = 5
= napa = |w| = 2, w = palabra = |w| = 3
= ab = |w| = 2, w = aab = |w| = 1 o |w| = 2 ??

Dependiendo del alfabeto puede resultar difcil dividir una palabra en sus smbolos.
Si se puede dividir todas las palabras sobre un alfabeto solamente de una manera en sus
smbolos, se llama tal alfabeto libre.
Solemos usar solamente alfabetos libres.
|| = 0
El conjunto de todas las palabras que se pueden formar sobre un alfabeto ms la palabra vaca
se llama el universo del alfabeto W ().
W () = {} {w | w es palabra sobre }
W ()
es palabra de cualquier universo, W ().
La cardinalidad del universo es infinito (pero contable o enumerable, vemos ms adelante
lo que significa).
Si el alfabeto es libre (o mejor decir, un generador libre), escribimos por W ().
Podemos concatenar palabras, entonces sean w, v y u palabras en .
w.v = wv, es decir, usamos el . como smbolo de concatenacin, pero muchas veces
obviamos de l (igual como se suele hacer con el de la multiplicacin).
w = w = w, es decir, se comporta como el elemento neutro (o elemento de intentidad)
respecto a la concatenacin.

Dr. Arno Formella

15

|w.v| = |w| + |v|


w.v 6= v.w para cualquier w y v, por ejemplo:
w = abc

v = dec

wv = abcdec 6= decabc = vw

es decir, la concatenacin no es conmutativa.


(w.v).u = w.(v.u) para cualquier palabras w, v y u, por ejemplo:
w = abc v = dec u = f ad
(wv)u = (abcdec)f ad = abcdecf ad = abc(decf ad) = w(vu)
es decir, la concatenacin es asociativa (usamos arriba las parntesis como metasmbolos).
Con dichas propiedades la estructura algebrica ( , . ) forma un monoide libre (es decir,
un semigrupo con elemento de intentidad).
Si xy = w, llamamos x prefijo de w e y sufijo de w.
Por w = w y w = w, es por lo tanto prefijo y sufijo (trivial) de cualquier palabra, y w es
prefijo y sufijo trivial de si mismo. (Normalmente no consideramos estos casos triviales.)
Si x es prefijo de w entonces |x| |w|.
Si y es sufijo de w entonces |y| |w|.
Si x es prefijo de w, e y es sufijo de w y x = y, entonces x = y = w, es verdad?
Si concatenamos siempre la misma palabra w, obtenemos potencias de w.
ww = w2 ,

www = w3 ,

w
. . w} = wi , i IN = {0, 1, 2, }
| .{z
i-veces

w1 = w,

w0 =

|wi | = i |w|
|w0 | = || = 0 = 0 |w| = |w0 |
wm+n = wm .wn
|wm+n | = (m + n) |w| = m |w| + n |w| = |wm | + |wn |
La reflexin de una palabra w (o la palabra reversa) anotamos como wR .
|w| = |wR |
= R

Dr. Arno Formella

3.3.

16

Lenguajes

Un lenguaje es cualquier subconjunto del universo sobre algn alfabeto, es decir, L W (), o
tambin L .
Ejemplo:
Lenguajes triviales
L = es el lenguaje vacio (que no contiene ninguna palabra), |L| = 0
L = {} es el lenguaje que solamente contiene la palabra vacio, |L| = 1
son independientes del alfabeto y por eso son lenguajes sobre cualquier alfabeto.
sea = {a, b}
L1 = {, a, b}
Lab = {an bn | n IN} es decir, el lenguaje que contiene todas las palabras con un
nmero de as seguidos por el mismo nmero de bs.
Lpal = {wwR | w } es decir, palndromos
2

Lquad = {an | n IN>0 }


Si |L| < para un lenguaje L , entonces se llama L lenguaje finito.
Operaciones sobre/con lenguajes, sean L, L1 , L2 , L3 lenguajes (igual para W ()):
Unin:
L1 L2 = {w | w L1 o w L2 }
Propiedades (unos ejemplos):
Conmutatividad:
Asociatividad:
Idempotencia:
Operacin con :
Operacin con :

L1 L2 = L2 L1
(L1 L2 ) L3 = L1 (L2 L3 )
LL=L
L=L=L
L = = L

Interseccin:
L1 L2 = {w | w L1 y w L2 }
Propiedades (unos ejemplos):
Conmutatividad:
Asociatividad:
Idempotencia:
Operacin con :
Operacin con :

L1 L2 = L2 L1
(L1 L2 ) L3 = L1 (L2 L3 )
LL=L
L = = L1
L = L = L

Dr. Arno Formella

17

Complemento:
L = {w | w y w
/ L}
Propiedades (unos ejemplos):
Reglas de DeMorgan: L1 L2 = L1 L2
L1 L2 = L1 L2
Con estas tres operaciones la estructura ( , , , ) forma un lgebra booleana.
Diferencia:
L1 L2 = {w | w L1 pero w
/ L2 }
Propiedades (unos ejemplos):
L1 = L1
L1 L2 = L1 L2
Concatenacin:
L1 .L2 = {w | w = w1 .w2 y w1 L1 y w2 L2 }
Propiedades (unos ejemplos):
No-Conmutatividad: L1 .L2 6= L2 .L1 (en general)
Operacin con :
L1 . = = .L1
Operacin con {}: L1 .{} = L1 = {}.L1
Potencia:
Li = L
. . L}
| .{z
i-veces

i IN

Propiedades (unos ejemplos):


Cero-Potencia: L0 = {}
Induccin:
Li .L = Li+1 = L.Li
Clausura positiva:
+

L =

Li = L1 L2 L3 . . .

i=1

Clausura (de Kleene):

L =

[
i=0

Propiedades (unos ejemplos):

Li = L0 L1 L2 . . .

Dr. Arno Formella

18

Reflexin (o inverso):
L = {w | wR L}
Homomorfismo: Sean , dos alfabetos. Sea : una funcin que asigna a cada
smbolo de una palabra sobre . Podemos ampliar la funcin a un homomorfismo
: , es decir, una funcin que asigna a cada palabra sobre una palabra sobre
, con
() =
(w) = (w)()
Ejemplo:
= {a, b, c, d}
= {0, 1}
(a) = 00
(abcd) = 0010110

(b) = 1 (c) =

(d) = 0110

Entonces si L es un lenguaje sobre


(L) = {(w) | w L}
es un lenguaje sobre y si L es un lenguaje sobre , entonces
1 (L) = {w | 1 (w) L}
es un lenguaje sobre .
Cul es el orden de prioridad de estos operadores?

3.4.

Producciones y Derivaciones

Definimos algunas notaciones para describir reglas de sustitucin, es decir, como derivar una
palabra con las producciones de la gramtica:
Una produccin p es una dupla (pareja) de un conjunto cartesiano sobre dos universos (que
pueden ser el mismo), es decir, p = (A, B) 1 2 .
Sea (A, B) una produccin, en vez de duplas tambin escribimos: A B.
Un conjunto de producciones se llama sistema de producciones (o sistema de reglas). A este
nivel todava no decimos mucho sobre los alfabetos involucrados, ms adelante concretaremos.

Dr. Arno Formella

19

Una derivacin directa v w es una conversin de una palabra en otra aplicando una produccin, es decir, sea por ejemplo v = aAb una palabra, y sea A B una produccin, entonces
se puede derivar la palabra w = aBb directamente desde v sustituyendo la subpalabra A por la
palabra B como indica la produccin.
Ejemplo: Sean 000 010 y 10 01 dos producciones. Desde v = 1000 se puede derivar
w1 = 1010 aplicando la primera produccin, y w2 = 0100 aplicando la segunda.
Una derivacin v w es una secuencia de derivaciones directa aplicando sucesivamente
producciones de un sistema. La longitud de una derivacin es el nmero de producciones aplicadas.
Ejemplo: Sean 000 010 y 10 01 dos producciones. Desde v = 1000 se puede derivar
w1 = 0011, es decir, v w1 aplicando v = 1000 1010 0110 0101 0011 =
w1 , o tambin w2 = 0001 aplicando v = 1000 0100 0010 0001 = w2 . En el primer
caso la longitud de la derivacin es 4, en el segundo caso 3.
Comentario importante: muchas de las comprobaciones en el mbito de la teora de los lenguajes formales se realiza mediante induccin sobre: longitud de la palabra, longitud de la derivacin, (o luego tambin longitud del clculo).
Dado un sistema de producciones, si sustituimos siempre la primera posibilidad a la izquierda de
la palabra de partida, se llama una derivacin ms a la izquierda, e igual, si sustituimos siempre
la primera posibilidad a la derecha de la palabra de partida, se llama una derivacin ms a la
derecha.

3.5.

Relaciones de equivalencia

Un conjunto R es una relacin (binaria sobre ).


Escribimos los pares siendo elementos de R como (x, y), o como x y, o como xRy. Esta
ltima notacin es aquella a la cual estamos acostumbrados, por ejemplo, con relaciones como
>, <, , etc. en situaciones como 5 > 3, o x y.
Sean R y S dos relaciones. Definimos
R0 = {(x, x) | x }
RS = {(x, y) | z : xRz y zSy}
Rn+1 = RRn
es decir, R0 es la relacin de identidad, y la operacin nos permite crear nuevas relaciones a
partir de dos relaciones dadas, y Rn+1 es una relacin construida de tal manera recursivamente.
Con eso definimos:
[
R =
Rn
n0

Dr. Arno Formella

20
R+ =

Rn

n1

es decir, xR y (o en otra notacin x y, o con palabras: la pareja (x, y) est en la clausura transitiva de la relacin R) si x = y o si existe una secuencia z1 , z2 , . . . , zn con n 1 y
xRz1 , z1 Rz2 , . . . , zn Ry.
Una relacin R es
reflexiva, si x : xRx, es decir, la relacin de identidad R0 es subrelacin de R,
transitiva, si xRy, yRz = xRz, es decir, si los pares (x, y) y (y, z) son elementos de R
entonces (x, z) tambin lo es,
simtrica, si x, y : xRy yRx, es decir, con (x, y) tambin (y, x) es elemento de la
relacin.
Observamos que para R
R es una relacin reflexiva y transitiva, llamada la clausura reflexiva y transitiva de R
(porque es la relacin ms pequea con tal propiedad).
R+ es una relacin transitiva, llamada la clausura transitiva de R (porque es la relacin
ms pequea con tal propiedad).
R+ es tambin reflexiva si R ya lo es.
R y R+ son simtricas si R ya lo es.
Una relacion R es una relacin de equivalencia si R es reflexiva, simtrica, y transitiva.
Sea R una relacin de equivalencia sobre . A cada elemento de podemos asignar el conjunto
de los elementos que son equivalentes a l. Basta con anotar un representente de dicho conjunto
y escribimos
[x]R = {y | yRx} = {y | xRy}
(si desde el contexto ya conocemos R, obviamos del subndice R).
Si xRy entonces [x] = [y] porque ambos caen en la misma clase de equivalencia. Se suele usar
como representante una de las palabras ms cortas de la clase.
Si x, y [z] escribimos tambin x y que significa que xRy e yRx.
Una relacin de equivalencia divide en clases, es decir,
= [x1 ] [x2 ] . . . [xk ] . . .

Dr. Arno Formella

21

cuyo nmero es finito o infinito. La interseccin de dos clases es vaca, es decir, [xi ] [xj ] =
si i 6= j porque si tuviesen un elemento en comn, ambas clases seran iguales.
Ejemplo: Sea = {1 , . . . , k } un alfabeto (por ejemplo el alfabeto de toda la vida).
La relacin
R = {(x, y) | x comienza con el mismo smbolo que y}
es una relacin de equivalencia y nos divide en
= [1 ] [2 ] . . . [k ] []
es decir, en todas las clases de palabras que empiezan con la misma letra ms la clase para la
palabra vaca (que no empieza con ninguna letra).
Entonces hay tantas clases como smbolos en ms una clase.
Llamamos el nmero de clases que produce una relacin de equivalencia el ndice de la relacin
Indice(R).
En el ejemplo tenemos Indice(R) = k + 1 = || + 1, es decir, un ndice finito.

3.6.

Relacin de equivalencia de lenguajes

Para cada lenguaje L podemos construir una relacin de equivalencia sobre :


xRL y (z : xz L yz L)
es decir, x es equivalente a y, si, aadiendo cualquier sufijo, ambas palabras resultantes o bien
estn en L o bien no estn en L.
Observa: z =  : x L y L, es decir, o bien todas las palabras de una clase estn en L
o bien ninguna palabra de una clase est en L.
Ejercicio:Verifica que RL es una relacin de equivalencia!

Dr. Arno Formella

4.

22

Gramticas generativas

Una gramtica es una cudrupla


G = (N , T , P, $)
donde
N es un alfabeto de smbolos no-terminales.
T es un alfabeto de smbolos terminales.
Se exige N T = y se suele usar = N T .
P es un sistema de producciones finitos, donde se distingue varios casos, ejemplos son:
P (N T ) (N T )
caso muy general, (as no hara falta distinguir los dos alfabetos a la primera vista, es
decir, P )

P .+
N .
es decir, a la derecha existe por lo menos un smbolo no-terminal

P N
es decir, se sustitue solamente smbolos (palabras) no-terminales
P N (N T )
es decir, se sustitue solamente smbolos (palabras) no-terminales, pero por smbolos
(palabras) o bien terminales o bien no-terminales
Repetimos: se exige que |P | < , es decir, el conjunto de reglas es finito.
Ms adelante vemos en detalle qu tipos de sistemas de producciones se suele usar!
$ es el smbolo inicial (o de partida, o de comienzo, o axioma) que pertenece al alfabeto
no-terminal, es decir, $ N .
El lenguaje generado por una gramtica es
L(G) = {w | w T y $ w}
es decir, se puede derivar la palabra w T desde el smbolo inicial aplicando las reglas del
sistema de producciones. Dichas palabras derivables que consisten solamente de smbolos terminales se llaman sentencias.

Dr. Arno Formella

4.1.

23

Ejemplos

Es posible derivar lenguajes infinitos con sistemas de producciones finito?


S, por ejemplo, es posible generar el lenguaje L(G) = T con un sistema de producciones
finitos:
G = ({$}, {a, b}, {$ , $ a$, $ b$}, $)

L1 = {, a, b}
G1 = ({$}, {a, b}, {$ , $ a, $ b}, $)
obviamente L(G1 ) = L1
para lenguajes finitos es fcil generar una gramtica, basta con derivar directamente cada
palabra desde el smbolo inicial (aunque se puede usar un sistema de producciones ms
sofisticado)
Una gramtica recursiva sobre la palabra v es una gramtica donde se puede derivar
desde v una palabra que contiene v de nuevo, es decir, existe la posibilidad de una derivacin:
v uvw (con |v| < |uvw|).
El lenguaje generado por una gramtica es infinito, si la gramtica es recursiva sobre una palabra
v y que a su vez es derivable desde el smbolo inicial.

Lab = {an bn | n IN}


Gab = ({a, b}, {$}, {$ a$b, $ }, $)

Labc = {an bn cn | n IN}


, abc, aabbcc, aaabbbccc, . . . Labc
Gabc = ({$, . . .}, {a, b, c}, P, $)
Cules son las producciones necesarias?
Una vez sabiendo eso, podemos completar el alfabeto no-terminal N

Dr. Arno Formella

24

Una primera idea:


P = {$ , $ ABC, A , A aA,
B , B bB, C , C cC}
N = {$, A, B, C}
Obviamente podemos derivar cualquier elemento de Labc con esa gramtica, por ejemplo:
$ ABC aABC aaABC aaBC aabBC aabbBC
aabbC aabbcC aabbccC aabbcc
Pero tambin podemos derivar palabras como aaabcccc, es decir, el lenguaje es
L(GTest ) = {ai bj ck | i, j, k IN} Labc
Parece que la gramtica GTest es demasiado amplia. De alguna manera deberamos construir un sistema de producciones que permite mantener un nmero igual de letras a, b y c
(o en otras palabras, necesitamos contar)...
Idea 1: Si somos capaz de derivar desde ak Xbk ck la secuencia ak+1 Xbk+1 ck+1 , hemos
ganado.
Idea 2: Tenemos que pasar la informacin que hemos aadido por ejemplo un ab en un
lado hacia el otro lado donde tenemos que aadir entonces una c (o en un lado la a y en el
otro lado un bc).
El truco consiste en usar unos smbolos no-terminales cuales se van a sustituir dependiendo
del contexto en el cual se encuentran.
Entonces, construimos P y N :

P = {
$
$
Xb
Yb
Yc
bZ
aZ
X
}

,
aXbc,
bY,
bY,
Zcc,
Zb,
aaXb,


N = {$, X, Y, Z}

para obtener la palabra vaca


para iniciar la construccin
para empezar ir hacia las cs
para ir hacia las cs
para aadir una c y empezar volver
para volver hacia las as
para aadir una a y una b
para terminar

Dr. Arno Formella

25

Se puede comprobar formalmente con induccin sobre k que la gramtica dada genera
exactamente el lenguaje deseado, es decir L(Gabc ) = Labc .
La comprobacin sigue la construccin y se observa que no hay ambigedad en el momento de elegir una produccin.
Existe tambin una gramtica que usa un smbolo no-terminal menos y tambin una produccin menos:

P = {
$
$
Xb
Xc
bY
aY
aY
}

,
aXbc,
bX,
Y bcc,
Y b,
aaX,
aa

para obtener la palabra vaca


para iniciar la construccin
para ir hacia las cs
para aadir una b y una c
para volver hacia las as
para aadir una a
para terminar

N = {$, X, Y }
Se observa:
tenemos ambigedad en elegir producciones para sustituir y dnde aplicarlas
aqu hemos decidido aadir a la derecha una b y una c
generalmente se nota que hay muchas gramticas que generan el mismo lenguaje

4.2.

Abreviacin de Backus

Para abreviar la notacin de las producciones usamos la forma normal de Backus (BNF). Agrupamos las producciones cuyas partes izquierdas coincidan, escribiendo las partes derechas separadas por |, por ejemplo:

P = {
$
Xb
Xc
bY
aY
}

 | aXbc,
bX,
Y bcc,
Y b,
aaX | aa,

Dr. Arno Formella

26

Definimos una gramtica que genere lo que se usa en programas, por ejemplo:
((a + b) (c + d)) (e + f )

Lexpr = {w | w es expresin algebrica}


donde nos limitamos a variables que consisten de una sola letra. Entonces

T = {(, ), +, , a, . . . , z}
P = $ E, E E E | (E E) | (E + E) | a | . . . | z
Gexpr = ({$, E}, T , P, $)
se puede ampliar la gramtica que incluye tambin y /
se puede ampliar la gramtica que genere tambin expresiones con variables de ms de una
letra, por ejemplo: ancho altura
ms tarde veremos como se define las expresiones de tal estilo un poco ms completo

4.3.

rbol de derivacin

Para las gramticas podemos visualizar la aplicacin de las producciones que derivan desde el
smbolo inicial una palabra como un rbol, el rbol de derivacin:
arbol
El lugar con el smbolo inicial se llama raz del rbol (aunque se suele dibujarlo arriba de todo).
Como se ve, cada smbolo es la raz de un subrbol.
La palabra que se puede leer desde la izquierda hacia la derecha en las hojas del rbol y solamente
consiste de smbolos terminales ser una sentencia.

4.4.

Jerarquia de Chomsky

Segn Chomsky se clasifica las gramticas en cuatro tipos (cuales son, como vemos ms adelante,
entre si verdaderamente diferentes).
Entonces sea G = (N , T , P, $) una gramtica (y = N T ). Las gramticas se destinguen
solamente en el sistema de producciones que siempre ser un conjunto finito y que se clasifica
en los siguientes tipos:

Dr. Arno Formella

27

Tipo 0: gramticas generales sin restricciones


P .N .
es decir, se sustituye por lo menos un smbolo no-terminal.
Tipo 1: gramticas sensibles al contexto
P {xAy xvy | x, y , A N , v + } {$ }
es decir, se sustituye un smbolo no-terminal por algo manteniendo el contexto; entonces
una derivacin siempre produce palabras ms largas o igual de larga (u v = |u|
|v|)
Tipo 2: gramticas libres de contexto
P N + {$ }
es decir, se sustituye solo smbolos no-terminales por palabras no vacas
Tipo 3: gramticas regulares (o lineales)
P N (N .T T ) {$ }
es decir, lineales a la izquierda (porque los smbolos no-terminales aparecen en una derivacin siempre a la izquierda de la palabra)
P N (T .N T ) {$ }
es decir, lineales a la derecha (porque los smbolos no-terminales aparecen en una derivacin siempre a la derecha de la palabra)
Se ha introducido explcitamente la regla $  en las gramticas de tipos 1, 2, y 3
para permitir que el lenguaje {} puede ser generado dado que las regls solo permiten un
crecimiento de la longitud de las palabras a lo largo de las derivaciones.
Retomamos la clasificacin de las gramticas hacia final del curso (por ejemplo, respondemos a la pregunta si son de verdad clases separadas).
Observacin: si permitimos para las gramticas de libre contexto reglas del tipo N ,
es decir, permitimos reglas como A , podemos sustituir todas las reglas que tengan una A
a la derecha, por ejemplo B xAy por B xy, y conseguir as una eliminacin de las
producciones compresoras.

Dr. Arno Formella

4.5.

28

Equivalencia y ambigedad

Dos gramticas son equivalentes si generan el mismo lenguaje, es decir, G1 G2 si L(G1 ) =


L(G2 ).
(Adelanto: averiguar en general si dos gramticas son equivalentes es un problema no computable.)
Sea G = ({$, A}, {1}, {$ 1A, $ 11, A 1}, $) una gramtica. Tanto $ 11 como
$ 1A 11 es una derivacin para la palabra 11.
Una sentencia es ambigua si existen ms que una derivacin para ella en una gramtica.
Una gramtica es ambigua si su lenguaje contiene una sentencia ambigua, es decir, se puede
derivar la misma sentencia con dos (o ms) derivaciones distintas.
Un lenguaje es ambiguo (o incluso se dice inherentemente ambiguo) si todas las gramticas que
generan el lenguaje son ambiguas.
Ejemplo: G = ({$}, {1}, {$ 11}, $) no es ambigua, entonces L(G) no es ambiguo.
Si una sentencia es ambigua (en el caso de las gramticas libres de contexto) tenemos dos rboles
de derivacin para la misma sentencia.
Ejemplo:
E E + E | E E | (E) | a | . . . | z, $ E
ambitree
La ambigedad introduce cierto grado de no-determinismo para derivar palabras, por eso, en la
prctica se intenta evitar gramticas ambiguas.
(Pero: el problema de decisin, si existe para una gramtica ambigua una gramtica equivalente
no-ambigua es un problema no-computable.)
Investigamos de nuevo las expresiones aritmticas:
sabemos que tanto la adicin como la multiplicacin son asociativas, entonces podemos
acordar generar siempre con derivaciones ms a la izquierda
sabemos que hay prioridades (acordadas) entre las operaciones: () antes que antes que
+, entonces podemos acordar generar primero las operaciones con menos prioridad
podemos introducir varables adicionales que nos garantizan una derivacin nica
Usamos E para expresiones (va a ser tambin el smbolo inicial), T para termios (con prioridad
asociado a +), F para factores (con prioridad asociado a , y V para variables (que ya no tendrn
operaciones):

Dr. Arno Formella

29

E
T
F
V

E+T |T
T F |F
(E) | V
a | b | ... | z

La gramtica con este sistema de producciones no es ambigua.


exprnoamb

Dr. Arno Formella

5.

30

Autmatas finitos
Describimos autmatas finitos con unas definiciones matemticas. Nos limitamos al principio a
autmatas solamente con entrada.

5.1.

Autmatas finitos deterministas (AFD)

Un autmata finito determinista (AFD) es una quntupla


M = (, Q, , q0 , F )
donde
es un alfabeto (sabemos
/ )
Q es un conjunto finito no vaco de estados, es decir, 0 < |Q| < .
es una funcin de transicin:
: Q Q ; (q, ) = p
es decir, si el autmata se encuentra en el estado q y lee el smbolo va al estado p.
q0 Q es el estado inicial.
F Q es el conjunto de estados finales.
Podemos pensar de un autmata como un dispositivo que lee desde una cinta con smbolos y que
realiza cambios de estados internamente:
auto
Dibujamos los autmatas como grafos dirigidos (no introducimos el concepto matemtico de
grafos formalmente), los estados representan los nodos del grafo, y dibujamos una arista atribuida
con un smbolo entre dos nodos si existe una transisin correspondiente:
compauto
es decir, el estado inicial est marcado por una flecha y los estados finales estn marcados con
doble crculo.
Ejemplo: Un AFD que acepta las cadena de 0s y 1s donde los nmeros de ceros y unos es par:
zeroonepar

Dr. Arno Formella

31

entonces
M = ({0, 1}, {q0 , q1 , q2 , q3 }, , q0 , {q0 })
Cmo describimos cmodamente ?
Observamos: |Q| < y || < , entonces podemos hacer una tabla con los estados como filas
y con los smbolos como columnas:
(q0 , 0) = q3 , (q0 , 1) = q1 , (q1 , 0) = . . .
o ms breve una tabla:

= ?q0
q1
q2
q3

0
q3
q2
q1
q0

1
q1
q0
q3
q2

Determinista significa que no tenemos opcin ninguna para eligir, es una funcin.
Si es una funcin total llamamos el autmata completo, es decir, existe para cada estado
y cada smbolo una transicin.
Abreviamos los dibujos para reducir el nmero de aristas:
aristas
es decir, permitimos escribir ms de un smbolo por arista, pero el cambio de estado se
realiza con leer solo uno de la lista.
Para definir el lenguaje aceptado por un AFD ampliamos la funcin a una funcin para que
trabaja sobre palabras:
: Q Q
(q, ) = q
(q, w) = ((q, ), w) , w
es decir, refleja el movimiento de la cabeza de lectura del autmata, o en otras palabras,
marca el camino que se est yiendo en el autmata para aceptar la palabra (hilo rojo).
Un autmata finito determinista M = (, Q, , q0 , F ) acepta una palabra w si (q0 , w)
F donde es la ampliacin de la funcion de transicin .
O en otras palabras, M acepta w, si (q0 , w) es un estado final del autmata.

Dr. Arno Formella

32

El lenguaje aceptado por un autmata finito determinista M es el conjunto de palabras aceptadas por M :
L(M ) = {w | w , M acepta w}
En el grafo podemos observar: si w L(M ) entonces existe un camino en el grafo desde el
estado inicial q0 hasta algn estado final de tal manera que podemos leer la palabra w a lo largo
de las aristas visitadas.
Ejemplo: Un autmata que acepta nmeros reales (en Pascal):
afdreal
Curiosidades de C/C++:
Comprueba con un compilador de C/C++ (o de Java) si a=000; o a=0011.0; son
sentencias correctas, sino lo son, modifica el autmata adecuadamente (Qu pasa con
a=009 o a=007?).
Comprueba con un compilador de C/C++ (o de Java) si a=3E000; es una sentencia correcta, sino no lo es, modifica el autmata adecuadamente.
a=.1+ +1.; es una sentencia correcta en C/C++ (se asigna a a el valor 1.1 siendo la
suma de dos constantes flotantes), pero importante es el espacio entre los dos +
Vemos que estmos confrontados con diferentes problemas:
deberamos saber antemano: Qu es una constante flotante?
deberamos traducir dicho conocimiento en un autmata
deberamos comprobar si dicho autmata de verdad acepta lo que debe aceptar
si implementsemos tal autmata de forma real, deberamos comprobar adicionalmente si
la implementacin refleja la descripcin matemtica
Observamos, cada AFD se puede completar:
aadimos un estado e a Q (pero e
/ F)
aadimos las transiciones que faltan, es decir, (q, ) = e para todos los q Q (incluyendo
e) y
con eso se convierte en una funcin total
Observamos:
si q0 F entonces L(M ) y al revs, si L(M ) entonces q0 F .
puede ocurrir que hay estados no accesibles desde q0 , incluso pueden ser aislados, es decir,
no existe un camino desde q0 hacia tal estado.

Dr. Arno Formella

5.2.

33

Autmatas finitos no-deterministas (AFND)

Ampliamos un poco las posibilidades de las transiciones de un autmata finito, es decir, cambiamos la funcin .
Un autmata finito no-determinista (AFND) es una quntupla
M = (, Q, , q0 , F )
donde
es un alfabeto.
Q es un conjunto finito no vaco de estados, es decir, 0 < |Q| < .
es (una de las dos definiciones, que entre si son equivalentes)
una relacin, es decir (Q ) Q
o una funcin, es decir, : Q P(Q) siendo P(Q) el conjunto de las partes
de Q
q0 Q es el estado inicial.
F Q es el conjunto de estados finales.
Ejemplo: un AFND para el lenguaje
Ldos = {w | w {0, 1} , w contiene dos 0s dos 1s}
afnd
Representamos la funcin tambin con una tabla, solo que ahora aparece ms de un estado en
cada celda de la tabla, por eso usamos la notacin de conjuntos:

= q0
q1
q2
q3
q4

0
{q0 , q3 }

{q2 }
{q4 }
{q4 }

1
{q0 , q1 }
{q2 }
{q2 }

{q4 }

Dr. Arno Formella

34

Ampliamos de nuevo para definir el lenguaje aceptado por un AFND


: Q P(Q)
(q, ) = {q}
(q, w) = {p | p Q, r (q, ) : p (r, w)}
, w
[
=
(r, w)
r(q,)

es decir, coincide con para smbolos del alfabeto y en general enumera los estados alcanzables con la palabra.
Un autmata finito no-determinista M = (, Q, , q0 , F ) acepta una palabra w si (q0 , w)
F 6= donde es la ampliacin de la relacin de transicin .
O en otras palabras, M acepta w, si (q0 , w) contiene un estado final del autmata.
El lenguaje aceptado por un autmata finito no-determinista M es el conjunto de palabras
aceptadas por M :
L(M ) = {w | w , M acepta w}

5.3.

Equivalencia entre AFD y AFND

Dos autmatas M1 y M2 son equivalentes si aceptan el mismo lenguaje, M1 M2 si L(M1 ) =


L(M2 ).
Si eliminamos todos los estados no accesibles (o aislados) de un autmata, obtenemos un
autmata equivalente al autmata original.
Obviamente tal autmata se representa con un grafo conexo.
Dos estados q1 y q2 de dos autmatas M1 y M2 son equivalentes, es decir, q1 q2 , si para
q1 Q1 y q2 Q2 (q1 , w) F1 (q2 , w) F2 .
Entonces dos autmatas son equivalentes si sus estados iniciales son equivalentes.
Est claro que cualquier AFD tambin es un AFND, es decir, si L es un lenguaje aceptado por un
AFD, tambin est aceptado por un AFND. Simplemente existe como mucho una sola transicin
para cada smbolo del alfabeta y para cada estado.
Pero tambin podemos construir para cada AFND un AFD equivalente, es decir, un autmata
determinsta que acepta el mismo lenguaje.
Ejemplo: convertimos el AFND que acepta Ldos en un AFD equivalente:

Dr. Arno Formella

35

afndafd
Para el caso general tenemos:
Sea M = (, Q, , q0 , F ) un AFND, construimos un AFD M 0 = (, Q0 , 0 , q00 , F 0 ) con
Q0 P(Q), es decir, escomo muchoel conjunto de todos los subconjuntos de Q.
q00 = {q0 }, es decir, es el conjunto que contiene el estado inicial del AFND.
0 (Qi , ) = Pj p Pj q Qi con (q, ) = p, (por incluir, escribe texto)
F 0 P(Q) con si f F 0 entonces existe un q f con q F , es decir, el conjunto de
estados finales son todos aquellos estados del AFD que contienen por lo menos un estado
final del AFND.
Se suelen construir los estados necesarios del AFD a lo largo de la construccin en vez de coger
por defecto todos los posibles subconjuntos, para evitaren caso que sea posiblela construccin de muchos estados que finalmente no se alcanzan desde el estado inicial.
Por qu es correcta la construccin?
Tenemos que comprobar formalmente que si M (siendo un AFND) acepta w, entonces M 0 (siendo el AFD construido) tambin lo acepta; y si M 0 acepta w, entonces M tambin lo hace, es
decir, que L(M ) = L(M 0 ).
Pues, sea M un AFND y M 0 el AFD correspondiente.
Sea w = x0 x1 x2 . . . xn L(M ) cualquier palabra aceptada por M .
Comprobamos que w L(M 0 ), es decir, L(M ) L(M 0 ):
Definimos los siguientes diagramas
x

i
q
p

i
P
Q

es decir, si hacemos la transicin en M desde p a q leyendo xi , en otras palabras, usamos


(p, xi ) = q, entonces existe (segn construccin) una transicin en M 0 de P (con p P ) a
Q (con q Q) leyendo xi , en otras palabras, existe (P, xi ) = Q.
Para la palabra w obtenemos:
q0

q1

xn1

xn1

qn

qn+1

q2

n
0
1
2
Q0
Q1
Q2
Qn
Qn+1 F 0

Dr. Arno Formella

36

donde la construccin va desde la izquierda, es decir, del estado inicial, hacia la derecha, es decir,
a un estado final. Dado que M acepta w, qn+1 es un estado final y siendo miembro de un conjunto
Qn+1 , este ser un estado final de M 0 .
Entonces hemos comprobado que M 0 acepta w, y por eso L(M ) L(M 0 ).
Ahora, sea w = x0 x1 x2 . . . xn L(M 0 ) cualquier palabra aceptada por M 0 .
Comprobamos que w L(M ), es decir, L(M ) L(M 0 ):
Definimos los siguientes diagramas
x

i
P
Q

3
x

i
p
q

es decir, si hacemos la transicin en M 0 desde P leyendo xi a Q, en otras palabras, usamos


(P, xi ) = Q, entonces existe (segn construccin) una transicin en M de algn p (con p P )
leyendo xi a algn q (con q Q), en otras palabras, existe (p, xi ) = q.
Para la palabra w obtenemos:
x

xn1

xn1

n
0
1
2
Q0
Q1
Q2
Qn
Qn+1 F 0

q2

qn

q1

3
q0

qn+1

donde la construccin va ahora desde la derecha, es decir, un estado final, hacia la izquierda,
es decir, al estado inicial. Dado que M 0 acepta w, Qn+1 es un estado final y un conjunto no
vaco, entonces existe un miembro qn+1 que tambin es elemento de F y por consecuencia un qn
aplicando el diagrama y asi succesivamente hasta llegar a q0 .
Entonces hemos comprobado que M acepta w, y por eso L(M ) L(M 0 ).
Finalmente tenemos L(M ) L(M 0 ) y L(M ) L(M 0 ) y por eso L(M ) = L(M 0 ).
Como se observa en la construccin puede ser que se usa 2|Q| estados en el autmata determinista
si el autmata no-determinista tena |Q| estados, es decir, el crecimiento del nmero de estados
puede ser exponencial.
Surgen dos preguntas:
1. Existen AFNDs que producen un AFD de tal tamao grande?
2. Son necesarios tantos estados (o existe una mejor forma de realizar la conversin)?

Dr. Arno Formella

37

Un ejemplo para una respuesta a la segunda:


Usamos = {a, b} como alfabeto. Definimos los siguientes lenguajes (que dependen del nmero
n IN):
Ln = {w | w , w = w1 w2 , w1 6= w2 , |w1 | = |w2 | = n, n IN}
es decir, todas las palabras con 2n letras donde la primera mitad se distingue de la segunda.
Es bastante claro que para cualquier n existe un autmata que acepta Ln porque el lenguaje es
finito (|Ln | = 22n 2n ).
En un libro (HotzEstenfeld) se encuentra el siguiente AFND que acepta L3 (dejan la comprobacin al lector)
afndln
Bueno, con un poco de trabajo se puede comprobar (enumerando todos los caminos desde el
estado inicial hasta el estado final) que en cada uno de los caminos siempre existe en la primera
parte una arista con una a (o una b) donde en la misma posicin de la segunda parte hay una b (o
una a).
El AFND dado tiene 22 estados que (sin que ellos lo dicen) est en el orden de n2 (si inspeccionamos la construccin vemos la suma de 1 hasta 2n).
Tambin construyeron un AFD para L3 :
afdln
Manifestan que dicho autmata es mnimo, y teniendo ms de 2n estados, concluyen que la
construccin de un AFND a un AFD puede incrementar el nmero de estados exponencialmente.
Veremos: Ambas construcciones tienen sus deficiencias, aunque el hecho en si es correcto!
Primero, no dan un esquema cmo construir un autmata que reconozca Ln para cualquier n
(puede ser que hay buena suerte en el caso de L3 ).
Segundo, el AFD dado no es mnimo, una simplificacin sera:
afdlns
Pero, el nuevo autmata sigue necesitando un nmero exponencial de estados, porque se tiene
que construir en el lado izquierdo todas las posibles palabras w1 .
Entonces: Creemos o sabemos?, si no lo hemos comprobado o si no hemos entendido una comprobacin presentada, entonces solamente creemos. El saber va ms all. Hay que mantenerse
crtico, siempre.
Construimos un AFND para Ln sistemticamente.

Dr. Arno Formella

38

Idea: En cada uno de los caminos reconociendo w1 siempre tiene que existir una arista con una
a (o una b) donde en la misma posicin para reconocer w2 hay una b (o una a).
Este principio nos lleva a una construccin inductiva:
afdln1
afdln2
afdln3
afdlnn
El nmero de estados entonces es:

|Q| = 1 + 2 + 4 + 6 + . . . + 2n + (2n 2) + . . . + 4 + 2 + 1
n
n1
X
X
= 1+2
i+1+2
i
i=1

i=1

= 1 + n(n + 1) + 1 + (n 1)n
= 2(n2 + 1)
Como vemos, incluso hemos reducido el nmero de estados comparando con el autmata del
libro: el AFND para aceptar L3 tiene solamente 20 estados.
La construccin de un AFD sigue el mismo argumento dado arriba: se necesita construir todas
las posibles palabras w1 en el lado izquierdo y por eso el AFD tiene por lo menos 2n estados
(los 2n 1 para enumerar los w1 y por lo menos un estado final en el lado derecho.
Hasta ahora slo hemos comprobado la explosin del nmero de estados para lenguajes finitos.
Existe tal crecimiento exponencial tambin para lenguajes infinitos?
Otro ejemplo para mostrar las capacidades de un AFND (y el crecemiento exponencial necesario
del AFD equivalente):
Usamos = {0, 1} como alfabeto. Definimos los siguientes lenguajes (que dependen del nmero n IN):
Ln = {w | w , w contiene un 1 en la n-nsima posicin desde la derecha}
Es bastante fcil construir un AFND que acepte Ln :
afndlr
No es tan obvio como construir directamente un AFD. Pero es posible con la construccin (Hazlo!).
Observamos en la construccin:

Dr. Arno Formella

39

Sea w = xn xn1 . . . x2 x1 {0, 1} .


Para todos los i {1, . . . , n} tenemos:
qi (q0 , w) = xi = 1
es decir:
Si xi = 1 (el i-simo smbolo desde la derecha es un 1), entonces existe un camino
desde q0 a qi (es decir, qi (q0 , w)) porque podemos usar dicho xi para pasar el
puente y
si existe un camino desde q0 a qi leyendo w (qi (q0 , w)), entonces w tiene un 1
como i-simo smbolo desde la derecha (es decir, xi = 1) porque hemos pasado el
puente.
Entonces, existe en la construccin para cada subconjunto P P(Q) con q0 P una
palabra w tal que tenemos que construir un camino desde Q0 = {q0 } hacia P .
Entones el AFD contiene por lo menos 2|Q|1 = 2n estados (todos aquellos que codifican
subconjuntos conteniendo q0 ).
Construimos un AFD directamente:
afdlr
Este autmata (y siguiendo el esquema de la construccin) contiene 2n estados.
En ambos ejemplos parece que el nmero de estados necesarios en un AFD tenga algo que ver
con la capacidad de contar o enumerar hasta cierto nmero.

5.4.

Autmatas finitos no-deterministas con transiciones


(AFND-)

Queremos construir un autmata que acepta el lenguaje


L = {ai bj ck | i, j, k IN}
Si fuesemos capaz de saltar mgicamente, es decir, sin consumir una letra de la entrada, de un
estado a otro, sera fcil la construccin:
AUTaibjckeps
Es decir, hemos introducido aristas marcados con la palabra vaca .
Un autmata finito no-determinista con transiciones (AFND-) es una quntupla

Dr. Arno Formella

40

M = (, Q, , q0 , F )
donde
Q, , q0 , y F estn definidos igual como en el caso de un AFND
es
una relacin, es decir (Q ( {})) Q
o una funcin, es decir, : Q ( {}) P(Q) siendo P(Q) el conjunto de
las partes de Q
Observamos que aadir ms aristas con obviamente no cambia el comportamiento del autmata:
AUTaibjckepstrans
Podemos tratar las transiciones con como una relacin T sobre el conjunto de estados, es decir
T = T1 = {(q, p) | (q, ) = p} Q Q
En el ejemplo tenemos
T1 = {(q0 , q1 ), (q1 , q2 )}
Esta relacin podemos ampliar para que sea reflexiva, es decir, que todas las parejas (q, q) con
q Q formen parte de la relacin, es decir, formamos
T0 = {(q, q) | q Q}
y con eso
T = T0 T1
entonces T por construccin es una relacin reflexiva. En el ejemplo tenemos
T0 = {(q0 , q0 ), (q1 , q1 ), (q2 , q2 )}
y con eso
T = {(q0 , q0 ), (q0 , q1 ), (q1 , q1 ), (q1 , q2 ), (q2 , q2 )}
Podemos ampliar la relacin aun ms considerando el efecto transitivo de las transiciones , es
decir, formamos en un primer paso
T2 = {(q, p) | r Q : (q, r), (r, p) T0 T1 y (q, p)
/ T0 T1 }

Dr. Arno Formella

41

y con eso
T = T0 T1 T2
en el ejemplo tenemos
T2 = {(q0 , q2 )}
y as sucesivamente
Ti = {(q, p) | r Q : (q, r), (r, p)

i1
[

Tj y (q, p)
/

j=0

Finalmente definimos

T = T0 T1 T2 . . . =

i1
[

Tj }

j=0

Ti

i=0

como clausura (o cierre, o cerradura) transitiva de la relacin de las transiciones o ms


breve clausura-.
El proceso termina en nuestro caso de autmatas finitos, es decir, la unin va solamente sobre un
nmero finito de is, porque T sigue siendo un subconjunto del conjunto finito Q Q (es decir,
T Q Q).
Con la clausura- podemos definir la clausura- de un estado, como todos aquellos estados que
se puede alcanzar con caminos de transisiones , es decir
cl(q) = {p | (q, p) T }
En el ejemplo:

cl(q0 ) = {q0 , q1 , q2 }
cl(q1 ) = {q1 , q2 }
cl(q2 ) = {q2 }
AUTaibjckafnd
hemos aadido q0 a los estados finales F porque existe un estado final que pertenece a la
clausura- de q0 , es decir, L
hemos marcado las aristas de la clausura- con smbolos del alfabeto

Dr. Arno Formella

42

Entonces podemos formalizar el lenguaje aceptado por un AFND- (parecido a lo que hicimos
para un AFND).
Primero definimos la ampliacin de para autmatas con transiciones . (q, w) va a ser el
conjunto de estados (igual como en el caso de para AFNDs) que podemos alcanzar desde q
leyendo la palabra. Entonces:
: Q P(Q)
1.
(q, ) = cl(q)
es decir, nos quedamos en la clausura- si hemos alcanzado el final de la palabra
2.
(q, w) = {p | p Q y r (q, w) tal que p cl((r, ))}
[
=
cl((r, ))
r (q,w)

es decir, (q, w) es el conjunto de estados alcanzables desde un estado r siendo miembro


de la clausura- de un estado alcanzable desde q sin haber ledo el ltimo smbolo .
(q0 , w) enumera entonces todos los estados alcanzables desde q0 leyendo la palabra w.
Observa: Hemos dado una definicin recursiva desde la izquierda, es decir, aadimos un smbolo
a la derecha. Hubiese sido posible definir para un AFND de la misma manera.
Un autmata no-determinista con transiciones M acepta una palabra w sobre el alfabeto
, es decir, w , si
(q0 , w) F 6=
donde sea la ampliacin de la funcin dada arriba.
El lenguaje aceptado por M es (como siempre)
L(M ) = {w | M acepta w}

5.5.

Equivalencia entre AFND y AFND-

Primero observamos que cualquier AFND es obviamente tambin un AFND- (pues uno que,
por casualidad, no tenga transiciones ).
Luego podemos construir a partir de un AFND- un AFND equivalente.
Entonces, sea M = (, Q, , q0 , F ) un AFND-.
Un AFND equivalente es el autmata M 0 = (, Q0 , 0 , q00 , F 0 ) donde

Dr. Arno Formella

43

Q0 = Q
0 (q, ) =

cl((r, )) (podemos escribir solo q porque Q0 = Q)

rcl(q)

q00 = q0

F
si F cl(q0 ) =
0
F =
F q0 si F cl(q0 ) 6=
es decir, aadimos q0 como estado final, si algn estado final del AFND- pertenece a la
clausura- del estado inicial.
Convertimos el ejemplo:
La tabla de transiciones para M con las transiciones de la clausura- es:

q0
q1
q2

a
b
c

{q0 }

{q1 }

{q1 }

{q2 }

{q2 }

cl
{q0 , q1 , q2 }
{q1 , q2 }
{q2 }

entonces la tabla con transiciones desde la claurura- es


a
b
c
cl(q0 ) {q0 } {q1 } {q2 }
cl(q1 )

{q1 } {q2 }
cl(q2 )

{q2 }

cl
{q0 , q1 , q2 }
{q1 , q2 }
{q2 }

y con eso la tabla final del AFND es

q00
q10
q20

a
{q0 , q1 , q2 }

b
c
{q1 , q2 } {q2 }
{q1 , q2 } {q2 }

{q2 }

Adems tenemos F cl(q0 ) 6= y por eso F 0 = F {q0 } = {q0 , q2 }.


Finalmente resulta el siguiente grafo:
afnde
Por qu es correcto la construccin?
Pues los argumentos (y la comprobacin) siguen los mismos pasos como lo vimos en el caso de
AFND y AFD. Siempre cuando hay una transicin en el AFND- leyendo un smbolo encontramos (segn construccin) una transicin en el AFND correspondiente porque consideramos

Dr. Arno Formella

44

toda la clausura-, y vice versa, si hay una transicin en el AFND, tiene que haber existido una
transicin en el AFND- o bien con o bien sin una secuencia de transiciones .
Cunto ha crecido esta vez el autmata?
El nmero de estados queda igual, solo se amplia (si hace falta) F por un estado. Pero ha crecido el nmero de aristas (es decir, transisiones). Dicho crecimiento puede llegar como mucho a
|||Q|2 porque como mucho tantas aristas se pueden incorporar entre los nodos del grafo.
Finalmente hemos comprobado la equivalencia entre autmatas no-deterministas y autmatas
no-deterministas con transiciones .

5.6.

Existencia de autmatas finitos mnimos

Ya vimos que hay varias posibilidades para construir un autmata finito determinista que acepte
un lenguaje (regular), por ejemplo, por construccin directa, o por el paso de un AFND a un
AFD.
Surge la pregunta: existe un autmata finito determinista (AFD) mnimo que acepta tal lenguaje?
Nos referimos al nmero de estados que tiene el AFD, es decir |Q|, dado que el nmero de
transiciones por estado est determinado por el nmero de smbolos en multiplicado por |Q| si
el AFD es completo.
La respuesta es: por supuesto que s!
Con el siguiente argumento: cada subconjunto de los nmeros enteros IN tiene un mnimo, y los
nmeros de estados de todos los posibles AFDs que aceptan L forman tal subconjunto.
Para la construccin del autmata mnimo necesitamos el formalismo de las relaciones de equivalencia.
Ya vimos que para cada lenguaje L podemos construir una relacin de equivalencia sobre
:
xRL y (z : xz L yz L)
es decir, x es equivalente a y, si, aadiendo cualquier sufijo, ambas palabras resultantes o bien
estn en L o bien no estn en L.
Un lenguaje L es regular, si y solo si el ndice de la relacin RL es finito, es decir, la relacin
tiene solamente un nmero finito de clases de equivalencia (Teorema de Myhill y Nerode).
Comprobamos primero la direccin =, es decir, si el lenguaje es regular, entonces el ndice
de la relacin es finito:
L es regular, entonces existe un AFD que acepta L.

Dr. Arno Formella

45

Sea M = (, Q, , q0 , F ) un AFD con L(M ) = L.


Definimos una relacin de equivalencia sobre M :
si (q0 , x) = (q0 , y)

xRM y

es decir, llegamos al mismo estado leyendo x o y empezando en el estado inicial.


Veremos a continuacin que RM RL , es decir, que RM es un refinamiento de RL , o en otras
palabras, si dos elementos caen en una misma clase de equivalencia respecto a la relacin RM ,
tambin caen en una misma clase respecto a RL .
Entonces, sea xRM y, es decir (q0 , x) = (q0 , y).
Sea z cualquier palabra. Miramos:
xz L

(q0 , xz) F
( (q0 , x), z) F
( (q0 , y), z) F
(q0 , yz) F
yz L

es decir, si xRM y entonces tambin xRL y, y por eso:


Indice(RL )
=

<

Indice(RM )
nmero de estados acesibles desde q0
|Q|

Comprobamos ahora la direccin =, es decir, si el ndice de la relacin es finito, entonces el


languaje es regular. Dicha comprobacin va a ser una comprobacin constructiva muy til:
Sea RL la relacin de equivalencia de L con Indice(RL ) < .
Entonces hay palabras x1 , x2 , . . . , xk con k < , es decir k es finito, cuyas clases cubren
:
= [x1 ] [x2 ] . . . [xk ]
Construimos un AFD que contiene justamente tantos estados como hay clases:
M = (, Q, , q0 , F )
donde
Q = {[x1 ], [x2 ], . . . , [xk ]}

Dr. Arno Formella

46

([x], ) = [x], es decir, se hace la transicin de la clase a la cual pertenece x leyendo


a la clase a la cual pertenece x
q0 = [], es decir, el estado inicial es la clase a la cual pertenece la palabra vaca
F = {[x] | x L}, es decir, existen tantos estados finales como hay clases de equivalencia
perteneciendo a L.
Entonces: ([], x) = (q0 , x) = [x] y vemos
x L(M )

5.7.

(q0 , x) F
([], x) F
[x] F
xL

Ejemplos de uso del teorema de Myhill y Nerode

Investigamos de nuevo el lenguaje


L = {an bn | n IN, n > 0}
anotamos unas clases de equivalencia de L:
[ab]
[a2 b]

= L
= {a2 b, a3 b2 , a4 b3 , . . .}
...
k
[a b] = {ak+i1 bi | i 1}
verificamos que son clases de equivalencia, porque si ak+j1 bj [ak b] y ak+l1 bl [ak b] entonces o bien ak+j1 bj z, ak+l1 bl z L (si z = bk1 ) o bien ak+j1 bj z, ak+l1 bl z
/ L (si z 6= bk1 ).
Por eso el nmero de clases de RL es infinito, es decir, Indice(RL ) = .
Observa que no hemos clasificado todas las palabras de , sino solamente algunas palabras
posibles:
= L [a2 b] . . . [ak b] . . .
. . . las dems clases
|
{z
} |{z}
ya son un nmero infinito
es decir, para comprobar que un lenguaje no es regular basta con encontrar un nmero infinito de
clases de equivalencia (respecto a la relacin RL ).
Investigamos el lenguaje
L = {w | w {0, 1} y w termina con 00}

Dr. Arno Formella

47

Pensamos en las posibles clases de equivalencia. Obviamente hay tres, o bien una palabra no
termina en 0, o bien termina en un 0, o bien termina por lo menos en dos 0, es decir:
[] = {w | w no termina en 0}
[0] = {w | w termina en un solo 0}
[00] = {w | w termina en 00}
Con = [] [0] [00] seguimos la construccin de arriba y obtenemos la tabla de transiciones
para el autmata:
0
= [] [0]
[0] [00]
?[00] [00]

1
[]
[]
[]

o como diagrama:
equiafd

5.8.

Algoritmo de minimizacin

La comprobacin del teorema de Myhill y Nerode nos proporciona un hecho muy importante:
el autmata basado en las clases de equivalencia es el autmata mnimo dentro de todos los
posibles autmatas finitos deterministas y completos que aceptan el mismo lenguaje, porque un
tal autmata M 0 definira un refinamiento de RM 0 RL , es decir, Indice(RM 0 ) Indice(RL )
y el AFD de las clases de equivalencia M representa las mismas clases RL = RM , entonces
Indice(RM 0 ) Indice(RL ) = Indice(RM ).
Una pregunta surge: Cmo sabemos si un AFD M ya es mnimo?
Pues, M no es mnimo, si
w p, q Q, p 6= q : (p, w) F (q, w) F
es decir, llegamos con alguna palabra w desde ambos estados siempre o bien a un estado final, o
bien a un estado no-final.
En tal caso, podemos unir los dos estados en un nico estado.
Basta con realizar las pruebas con todas las palabras w con |w| < |Q| porque no hace falta
visitar un estado dos veces.
Con dicho argumento describimos el algoritmo de minimizacin (sin comprobacin) a continuacin.

Dr. Arno Formella

48

Decimos que dos estados p y q son distinguibles (o no-equivalentes) si existe una palabra w que
nos lleva desde p a un estado final pero no desde q, o al revs, es decir:
p 6 q ( (p, w) F y (q, w)
/ F ) o ( (p, w)
/ F y (q, w) F )
El algoritmo calcular la relacin de distinguibilidad (o no-equivalencia) entre los estados y
contiene 5 pasos.
1. Se elimina todos los estados no acesibles desde el estado inicial.
2. Se forma una tabla de todas las parejas de estados (p, q) con p 6= q.
3. Se marca en la tabla todas las parejas (p, q) con p F, q
/ F op
/ F, q F (porque
dichos estados seguro son distinguibles).
4. Mientras haya cambio en la tabla:
para cada pareja (p, q) no marcada y para cada smbolo
si ((p, ), (q, )) est marcada, tambin se marca (p, q).
5. Las parejas (duplas) no marcadas se une en un slo estado.
Ejemplo: partimos del siguiente AFD completo:
afdc
1. Todos los estados son acesibles desde a, por eso, no hay que eliminar nada.
2. La tabla es:
a
a b c d e -

3. Las marcas iniciales son (en vez de simple marcas, usamos nmeros para visualizar en el
siguiente apartado los cambios en la tabla en cada paso):
a
b
c
d
e

a
-

e
1
1
1
1
-

Dr. Arno Formella

49
a b
a - 2
b - 4.
c - d - e - -

c
4
-

d
3
5
-

e
1
1
1
1
-

5. El autmata mnimo es:


afdcmin
Observa que en la construccn del autmata podemos comprobar de cierta manera la correccin de la tabla: cuando recorremos todas las aristas del autmata original, tenemos
que o bien aadir o bien encontrar su homloga en el autmata en construccin.
El paso 4 se puede implementar ms eficiente. En vez de mirar tantas veces las parejas no marcados, se mantiene listas de espera que se marcan recursivamente. Observamos:
Si tenemos que marcar (p, q), es porque (r, s) = ((p, ), (q, )) ya est marcado.
Entonces de alguna manera la pareja (p, q) depende de la pareja (r, s).
Es decir, si en un futuro marcamos en algun momento (r, s), directamente podemos marcar
(p, q) tambin.
Para llevar eso a cabo, aadimos a cada celda una lista de parejas que dependen de la la pareja
en cuestin. Si se marca una pareja, recursivamente se marcan tambin todas las entradas en las
listas.
Con est mejora el algoritmo tiene complejidad O(|Q|2 ||).

Dr. Arno Formella

6.

50

Expresiones regulares

Hasta ahora era difcil describir lenguajes aceptados por autmatas. Siempre tenamos que aprovechar de una notacin como
L(M ) = {w | alguna propiedad de w}
Por ejemplo, si queramos desarrollar un autmata que comprobase que una cadena codificase
una direccin de correo electrnico vlida tendramos como propiedades:
1. los smbolos permitidos son: a-z, A-Z, 0-9, @ . - _
2. debe contener exactamente una @
3. por lo menos un . detrs de la @
4. detrs del ltimo . deben venir entre 2 y 4 letras
5. detrs de cada . y de la @ debe venir por lo menos una letra
6. delante de la @ por lo menos una palabra que empieza con una letra,
es decir, L(M ) = {w | w cumple las condiciones de arriba }.
Ejercicio: Intenta construir un autmata!
Sera conveniente tener un meta-lenguaje que nos permitiese describir fcilmente lenguajes (por
lo menos de cierto tipo).

6.1.

Sintaxis y semntica

Sea un alfabeto. Una expresin regular sobre se define con las siguientes reglas (inductivas):
1.

a) es una expresin regular


b) es una expresin regular
c) si , entonces es una expresin regular

2. si y son expresiones regulares, entonces tambin


a) . es una expresin regular (obviamos del punto muchas veces)

Dr. Arno Formella

51

b) ( + ) es una expresin regular


3. si es una expresin regular, entonces tambin
a) () es una expresin regular
b) () es una expresin regular
Como observamos: hemos introducido meta-smbolos ((,), ,+,.,). Si alguno de ellos
aparece en tenemos un problema (Houston) que resolveremos al final de esta seccin.
Ejemplos:
Sea = {a, b, c}. Posibles expresiones regulares son:
((a.b) + b.c.(a) )

((a.a.a + b.c) + (c.b) .(b) )

Con eso hemos definido una sintaxis de expresiones regulares, pero cul ser su semntica?
Para cada expresin regular definimos un lenguaje correspondiente (basado en las reglas).
El lenguaje L() definido por una expresin regular se define:
1.

a) L() =
b) L() = {}
c) si , entonces L() = {}

2. si y son expresiones regulares, entonces


a) L(.) = L().L()
b) L(( + )) = L() L()
3. si es una expresin regular
a) L(()) = L()
b) L(() ) = (L())
Ejemplos: sobre = {0, 1}:
el lenguaje que contiene una subcadena 11:
((0 + 1)) .1.1.((0 + 1))
todas las cadenas que alternan 0 y 1:
(((0.1) + (0.1) .0) + ((1.0) + (1.0) .1))
o tambin con la expresin
(1 + ).(0.1) .(0 + )

Dr. Arno Formella

6.2.

52

Equivalencia entre autmatas finitos y expresiones regulares

La semntica de una expresin regular define un lenguaje.


Dado una expresin regular (sobre un alfabeto ). Qu tiene que ver el lenguaje L() con un
lenguaje L(M ) aceptado por un autmata finito M ?
Veremos: para cada expresin regular existe un autmata no-determinista con transiciones
M , o sea un AFND-, que acepta el mismo lenguaje (es decir, L() = L(M )).
Ya sabemos: entonces tambin existe un autmata finito determinista, o sea un AFD, aceptando
el mismo lenguaje.
De hecho, comprobaremos algo ms: para cada sobre existe un AFND- M = (, Q, , q0 , F )
con L() = L(M ) y
no existe ninguna transicin hacia el estado inicial, es decir
q Q, : q0
/ (q, ) (q, )
M tiene exactamente un estado final del cual no sale ninguna transicin, es decir,
|F | = 1 y , f F : (f, ) (f, ) =
La comprobacin sigue la definicin inductiva de la expresin regular, lo describimos solamente
con los grafos de los autmatas. Entonces, sean , , y expresiones regulares sobre algn
alfabeto .
1.

a) =
regexprafnde1
b) =
regexprafnde2
c) = a
regexprafnde3

2.

a) =
regexprafnde4
b) = ( + )
regexprafnde5

3.

a) = ()
regexprafnde6

Dr. Arno Formella

53

b) = ()
regexprafnde7
Ejemplo: construimos el AFND- para = (((a.b) + a) + b.b)
regexprafndeej
La otra direccin, es decir, comprobando que para cada autmata finito existe una expresin
regular que describe el mismo lenguaje, nos costar un poco ms de trabajo.
Sea M = (, Q, , q0 , F ) un AFD (sabemos que cualquier AFND o AFND- se puede convertir
en un AFD).
Describimos un algoritmo que sucesivamente construye la clausura transitiva del autmata dado y as construye finalmentecomo atributos de las aristas entre q0 y un nuevo estado f la
expresin regular.
Por eso permitimos que se pueden escribir expresiones regulares a las aristas de un autmata, es
decir, para (p, ) = q escribimos (p, , q) (pues, la arista del estado p al estado q con atributo a),
o teniendo expresiones regulares (p, , q) (pues, una arista de p a q con atributo ), o con dibujo:
aristaexpr
1. aadimos un nuevo estado f y conectamos todos los estados en F con transiciones a f ,
es decir, cambiamos M por M 0 = (Q {f }, , 0 , q0 , {f }) donde 0 = para estados en
Q y adems q F : 0 (q, ) = f . As no hemos cambiado el lenguaje aceptado por M .
(Pero siguimos escribiendo abajo simplemente M , , y Q para simplificar la notacin.)
2. para todos los estados q 6= q0 y q 6= f
a) para cada pareja de aristas (p, , q) y (q, , r) y arista reflexiva (q, , q) (nota, puede
ser p = r)
aade arista (p, , r)
b) elimina q con todas sus aristas adyacentes
pqr
c) agrupa las aristas construidas (p, 1 , r), . . . , (p, k , r) escribiendo (p, 1 +. . .+k , r)
3. cuando termina el proceso, es decir, solamente existen aristas entre q0 y f , precisamente
(q0 , , q0 ) y/o (q0 , , f ), la expresin regular final es .
(Observa: si q0 F entonces existe una arista con entre q0 y f , por eso, L(), y entonces
no hay que considerar un caso especial para contemplar lazos reflexivos en q0 porque + =
.)

Dr. Arno Formella

54

Una comprobacin formal de la correccin del algoritmo es bastante tcnica. Principalmente


hay que realizar una induccin estructural con propiedades de dichos autmatas extendidos (que
tienen expresiones regulares en sus aristas). No lo detallamos aqu, cae en la categora: lo creemos
(en estos momentos).
Como vimos en el ejemplo, hemos construido una expresin regular totalmente diferente a la de
partida. Debemos transformar dicha expresin regular sin cambiar el lenguaje que define para
conseguir finalmente una expresin regular igual a la de partida. Por eso:
Dos expresiones regulares y son equivalentes ( ) si definen el mismo lenguaje, es
decir, si L() = L().
Obviamente hay operaciones con expresiones regulares que mantienen la equivalencia, por ejemplo:
Asociatividad:
( + ( + )) (( + ) + )
.(.) (.).

Conmutatividad:
( + ) ( + )

Elementos neutros:
( + )

(.)

( + )

(.)

Eliminacin:
(.) (.)

Distributividad:
.( + ) (. + .)
( + ). (. + .)

Dr. Arno Formella

55

Simplificacin:
(() ) ()
()
()

Con eso y un poco de mpetu podemos transformar sucesivamente la expresin regular obtenida
para obtener al final la expresin regular que era la base para el autmata finito inicial.
El problema de comprobar en general si dos expresiones regulares son equivalentes no es nada
fcil. Dicho problema cae en la clase de los problemas PSPACE que contiene problemas an ms
complejos que los problemas de la clase NP que (a lo mejor) veremos hacia el final del curso (un
problema NP es el problema del viajante). Aqu nos basta constatar que existen EE.RR. tal que
un algoritmo determinista que resuelve el problema necesita un tiempo que crece por lo menos
exponencial en la longitud de las expresiones regulares.

6.3.

Abreviaciones para el uso de expresiones regulares

Para simplificar ms el uso de expresiones regulares, introducimos prioridades para eliminar


parentesis, atorgamos
a la operacin asterisco de Kleene mxima prioridad (parecido a la exponenciacin en
expresiones algebraicas)
a la operacin concatenacin segunda prioridad (parecido a la multiplicacin en expresiones algebraicas) y
a la operacin adicin la mnima prioridad (parecido a la adicin en expresiones algebraicas)
Adicionalmente describimos algunos ejemplos de abreviaciones de uso comn para expresiones
regulares (puede ser que dicha notacin describe lenguajes que ya no son lenguajes regulares!):
Sea = {0 , 1 , . . . , n } un alfabeto, donde los smbolos implcitamente estn ordenados, es
decir, si i < j para i, j {1, . . . , n} entonces i viene antes en el orden de todos los smbolos
que j (pues, entonces es tal cual como estamos acostrumbados de tratar nuestro alfabeto del
lenguaje natural).
[i j ] : i + . . . + j , es decir, todo el rango de smbolos entre (y incluyendo) i y j .
Si j < i, [i j ] = .

Dr. Arno Formella

56

? : ( + ), es decir, una o ninguna vez .


., cualquier smbolo del alfabeto
+ : , es decir, por lo menos una vez .
n :
. . }
| .{z

nveces

(usando tales ns en varias posiciones y exigiendo que tenga en todos los sitios el mismo
valor se pueden describir lenguajes ya no regulares)
{m,n} por lo menos m veces, pero como mucho n veces .
(igual como arriba, usando tales ns y ms en varias posiciones y exigiendo que tengan en
todos los sitios los mismos valores se pueden describir lenguajes ya no regulares)

6.4.

Smbolos y meta-smbolos

Resolvemos el problema de tener smbolos iguales en y en el meta-alfabeto:


Se suele usar un smbolo de escape en el meta-lenguaje, normalmente el smbolo \. Si \ aparece
delante de un meta-smbolo, entonces se considera un smbolo de , y al revs, si \ aparece
delante de un smbolo, se considera un meta-smbolo. (Entonces, si \ debe estar en , se anotara
como \\.)
Entonces podemos escribir la expresin regular que define una direccin de correo electrnico
sintcticamente correta como:

= [a zA Z][a zA Z0 9\ _]
= (\.) @(\.)+ [a zA Z]{2,4}
donde hemos unido adicionalmente varios rangos en uno.

Dr. Arno Formella

7.

57

Lenguajes regulares

7.1.

Equivalencia entre gramticas lineales por la derecha y autmatas finitos

Sea M = (, Q, , q0 , F ) un AFD.
Construimos una gramtica lineal por la derecha G con L(G) = L(M ), es decir, genera el mismo
lenguaje que el AFD acepta.
G = (N , T , P, $) = (Q, , P, q0 )
es decir
N = Q, los estados del autmata determinan los smbolos no-terminales de la gramtica
T = , los smbolos del autmata determinan los smbolos terminales de la gramtica
$ = q0 , el estado inicial del autmata determina el smbolo inicial de la gramtica
El sistema de producciones P est dado por:
Si (q, ) = p es una transicin del AFD, con p, q Q y , entonces aadimos a P
la produccin q p.
Si (q, ) = p es una transicin del AFD, con q Q, p F y , entonces aadimos
a P la produccin q .
Si q0 F , entonces aadimos a P la produccin q0 .
Ejemplo:
afdabc

= ?q0
?q1
?q2

a
q0

b
q1
q1

c
q2
q2
q2

Dr. Arno Formella

58

Entonces el sistema de producciones P de la gramtica ser:


P = {q0 aq0 |a|bq1 |b|cq2 |c|, q1 bq1 |b|cq2 |c, q2 cq2 |c}
Sea G = (N , T , P, $) una gramtica lineal por la derecha, es decir, P N (T .N
T ) {$ }.
Construimos una autmata finito M con L(M ) = L(G), es decir, el autmata acepta el mismo
lenguaje que la gramtica genera.
M = (, Q, , q0 , F ) = (T , N {f }, , $, {f })
es decir,
T = , los smbolos terminales de la gramtica determinan los smbolos del autmata
Q = N {f }, los smbolos no-terminales de la gramtica determinan los estados del
autmata, y aadimos un nuevo estado f , es decir, f
/ N
q0 = $, el smbolo inicial de la gramtica determina el estado inicial del autmata
Las transiciones estn dadas por:
Si A B es una produccin de G, con A, B N y T , entonces aadimos la
transicin (A, ) = B.
Si A es una produccin de G, con A N y T , entonces aadimos la
transicin (A, ) = f .
Si $  es una produccin de G, entonces aadimos la transicin ($, ) = f .
Observamos que el autmata construido es un autmata finito no-determinista (AFND) que podemos convertir en un AFD si hace falta.
Ejemplo:
Para la gramtica de arribarenombrando los smbolosconvertimos
P = {$ a$|a|bA|cB|c|, A bA|b|cB|c, B cB|c}
a la tabla de transiciones
a
= $ {$, f }
A

?f
graafd

b
c
{A}
{B, f }
{A, f } {B, f }

{B, f }

Dr. Arno Formella

7.2.

59

Equivalencia entre gramticas lineales por la derecha y lineales por la izquierda

Como era de esperar, gramticas lineales por la derecha y gramticas lineales por la izquierda
describen el mismo fenmeno, es decir, generan los lenguajes regulares.
Sea G = (N , T , P, $) una gramtica lineal por la derecha, es decir, P N (N .T
T ) {$ }.
Construimos una gramtica G0 = (0N , T , P 0 , $) lineal por la izquierda con el siguiente algoritmo en cuatro pasos:
1. Si el smbolo inicial $ de G aparece a la derecha en una produccin de P , se sustitue $ en
dichas reglas de la siguiente manera:
Se introduce un nuevo smbolo no-terminal $0 , es decir, 0N = N {$0 }.
Por cada regla de forma $ con T .N T se crea una nueva regla
$0 .
Cada regla de forma X $ (X N , T ) se sustitue por X $0 .
Si $  P , se aade para cada regla X $ (X N , T ) la regla
X .
Con esas modificaciones obtenemos un nuevo sistema de producciones P y un alfabeto de
variables o bien 0N = N o bien 0N = N {$0 }.
2. Se crea un grafo dirigido con las siguientes propiedades:
El conjunto de nodos es 0N {}.
Se aade una arista entre los nodes A y B con atributo , si existe una regla A B
en P .
Se aade una arista entre los nodes A y  con atributo , si existe una regla A
en P .
Se aade una arista entre los nodes $ y  con atributo , si existe la regla $  en
P.
3. Se inverte el grafo, ms preciso:
Se intercambian los nodos $ y .
Se invierte la direccin de todas las aristas.
4. Se transforma el grafo obtenido en el conjunto de reglas P 0 :
Para cada arista entre A y B con atributo se crea una regla A B (A
0N , B 0N {} y T {}).

Dr. Arno Formella

60

Ejemplo: Partimos de la gramtica


G = ({$, A}, {0, 1}, {$ |1A, A 0$|0}, $)
1. el smbolo inicial $ aparece a la derecha entonces:
Introducimos un nuevo smbolo no-terminal $0 .
Aadimos la regla $0 1A.
Sustituimos la regla A 0$ por A 0$0
siendo $  P , aadimos la regla A 0 (pero que ya est en P )
Queda el sistema de producciones intermedio como
P = {$ |1A, A 0$0 |0, $0 1A}
2. El grafo reflejando dichas reglas es:
graphldli
3. Y el grafo invertido es:
igraphldli
4. con lo cual obtenemos el conjunto de reglas:
P 0 = {$ |A0, A $0 1|1, $0 A0}

7.3.

Lema de bombeo

Siendo a b una expresin regular, podemos construir un autmata finito que acepta el lenguaje
as definido, tambin podemos construir para cualquier n IN fijo un autmata finito adecuado
(an bn sera una expresin regular extendida que define el lenguaje correspondiente que contiene
una sola palabra).
Pero no podemos construir un autmata finito que acepte el lenguaje:
Lab = {an bn | n IN} = {, ab, aabb, aaabbb, . . .}
donde el parmetro n no es fijo, sino se quiere que haya tantas as como bs.
Por qu no podemos construir tal autmata?
asumimos que tengamos un autmata finito M con k estados que acepta Lab

Dr. Arno Formella

61

anotamos los estados de M despus de haber ledo las palabras ai para i = 0, . . . , k (son
k + 1 palabras)
pues sern (usando la ampliacin de la funcin ):
(q0 , ), (q0 , a), (q0 , aa), (q0 , aaa), . . . , (q0 , ak )
Entonces, un estado tiene que aparecer por lo menos dos veces (se llama principio de los
cajones (pigeonhole principle): si se quiere poner ms calcetines que hay cajones en los
cajones, por lo menos en un cajn acaban por lo menos dos calcetines)
es decir: (q0 , ai ) = (q0 , aj ) para algunos i 6= j
Entonces:
(q0 , ai bj ) = ( (q0 , ai ), bj )
= ( (q0 , aj ), bj )
= (q0 , aj bj ) F
pues, el autmata tambin acepta ai bj , i 6= j que no debe hacer. Una contradiccin!
Entonces asumimos mal, es decir, no existe un autmata que acepte Lab , o en otras palabras, Lab no es regular.
Observamos el comportamiento del siguiente autmata:
afdcpl
w0
w1
w2
w3
wk

=
=
=
=
...
=

110
110
010
110
010010
110 010010010
x

yk

10
10
10
10
z

Lema (de bombeo para lenguajes regulares): Sea L un lenguaje regular (infinito). Entonces
existe un n IN de tal manera que cada palabra w L con |w| n se puede dividir en tres
partes, w = xyz cumplindose las tres propiedades:
1. y 6= 
2. |xy| n
3. para todos los k 0 : xy k z L

Dr. Arno Formella

62

Comprobacin (ideas principales):


Sea L un lenguaje regular (infinito).
Entonces existe un autmata finito determinista M que acepta L.
Sea n el nmero de estados de M (n = |Q|).
Sea w una palabra con |w| n (tal palabra existe porque L es infinito).
Entonces se visita un estado de M por lo menos dos veces.
Escogemos el estado que se visita la primera vez dos veces, le llamamos q.
La parte de w que se lee hasta llegar la primera vez a q llamamos x (puede ser que x = ).
La parte de w que se lee hasta llegar la segunda vez a q llamamos y (y 6=  porque un bucle
en un AFD tiene aristas con smbolos).
La longitud |xy| n porque hemos recorrido un camino dondo solo un estado aparece dos
veces.
La parte que sobra para terminar aceptando w llamamos z.
Entonces dividimos w en tres partes, es decir, w = xyz.
M acepta tanto xz, como xyz, como cualquier xy k z para todos los k 0 porque podemos
recorrer el bucle de y tantas veces como queremos (esto se debe comprobar formalmente
con induccin).
Entonces, comprobamos de nuevo que Lab no es regular, ahora usando el lema de bombeo:
Asumimos que Lab sea regular.
El lema de bombeo nos garantiza la existencia de un n tal que se cumplen las propiedades
para palabras w con |w| n.
(Pensamos...): Elegimos w = an bn . Obviamente w Lab y |w| = 2n n.
El lema de bombeo nos garantiza la existencia de una particin w = xyz con y 6= ,
|xy| n, y k 0 : xy k z Lab . (No conocemos la particin en concreto, pero sus
propiedades.)
Porque |xy| n el prefijo xy no contiene ninguna b.
Porque y 6=  la subpalabra y contiene por lo menos una a.

Dr. Arno Formella

63

Todos las bs estn en z.


Tanto xz = xy 0 z Lab como xy 1 z Lab pero xz contiene por lo menos una a menos que
xyz (hemos quitado y).
Eso es una contradiccin porque xz no debe estar dentro Lab .
Entonces Lab no puede ser regular.
Receta para el uso del lema de bombeo:
Dado un lenguaje L.
Queremos comprobar que L no es regular.
Comprobacin con contradiccin.
Asumimos que L sea regular.
El lema de bombeo garantiza la existencia de un n (pero no lo conocemos).
Buscamos w L (con un poco de sabidura) que depende de n, tal que |w| n
El lema de bombeo garantiza la existencia de la particin de w = xyz cumpliendo las 3
propiedades.
Comprobamos (con un poco de sabidura) que, independiente de la particin de w en concreto (en los lmites de las primeras dos propiedades), se produce una contradiccin con la
tercera propiedad.
Podemos describir dicha receta tambin como un juego para dos personas:
Juego para un lenguaje L.
Jugador 1 selecciona n.
Jugador 2 selecciona w L con |w| n.
Jugador 1 selecciona particin w = xyz con y 6=  y |xy| n.
Jugador 2 selecciona k.
si xy k z
/ L gana jugador 2, sino gana jugador 1.
si jugador 2 puede ganar siempre, entonces L no es regular.

Dr. Arno Formella

64

El lema de bombeo es el jugador 1, quin es el jugador 2?


Otro Ejemplo:
Lquad = {0m | m es nmero cuadrado}
es decir, todas las cadenas de ceros que tienen un nmero cuadrado de smbolos.
Asumimos que Lquad sea regular.
El lema de bombeo nos garantiza la existencia de un n tal que se cumplen las propiedades
para palabras w con |w| n.
2

(Pensamos...): Elegimos w = 0n . Obviamente w Lquad y |w| = n2 n.


El lema de bombeo nos garantiza la existencia de una particin w = xyz con y 6= ,
|xy| n, y k 0 : xy k z Lquad . (No conocemos la particin en concreto, pero sus
propiedades.)
Tanto xyz Lquad como xy 2 z Lquad con y 6= .
Tenemos entonces:
n2 =
<
=

<
=

|xyz| porque es w
|xy 2 z| porque y tiene una longitud > 0
|xyz| + |y|
n2 + n porque si |xy| n tambin |y| n
n2 + 2n + 1
(n + 1)2

Eso es una contradiccin porque xy 2 z no puede ser una palabra cuya longitud es un nmero
cuadrado entre dos nmeros cuadrados consecutivos.
Entonces Lquad no puede ser regular.
Dos comentarios ms:
Este lema de bombeo solo garantiza una propiedad para lenguajes regulares, es decir, todos
los lenguajes regulares (infinitos) la tienen, pero pueden existir ms lenguajes que la tengan, o en otras palabras, pueden existir lenguajes L donde encontramos tal n y la divisin
de w en xyz con todas las propiedades, pero L no es regular.

Dr. Arno Formella

65

Con el lema de bombeo tambin se puede derivar: si tal w


/ L entonces xy k z
/ L (el
argumento es fcil: no hace falta que lleguemos a una estado final en la comprobacin, lo
importante eran los caminos recorridos).
Reglas de mano:
Un lenguaje es regular si independientemente de la longitud de la palabra de entrada, hay
que memorizar solamente una cantidad constante de informacin (en el caso de Lab deberamos memorizar el nmero de as que no es constante).
La comprobacin formal se realiza con el lema de bombeo.
El lema de bombeo se usa para comprobar que un lenguaje no es regular, para comprobar
que es regular, por ejemplo, se construye un autmata finito, una expresin regular, o una
grmatica de tipo 3.
Pero ojo, existen lenguajes regulares que tienen que ver con nmeros:
Ltres = {w | w es codificacin de un nmero divisible por 3}
Ejercicio: contruye un autmata finito que acepte Ltres .

8.

Propiedades, algoritmos de decisin,


y aplicaciones para lenguajes regulares

La clase de los lenguajes regulares es una clase de alguna manera muy robusta: hay muchas
posibilidades de describir los lenguajes y exhiben un gran nmero de propiedades de clausura,
como vemos ahora.

8.1.

Propiedades de lenguajes regulares

Sean L1 y L2 dos lenguajes regulares.


Unin: L = L1 L2 es regular, porque podemos construir una expresin regular para L, teniendo
las expresiones regulares para L1 y L2 , ms preciso: con L1 = L() y L2 = L() tenemos
L = L(( + ))

Dr. Arno Formella

66

Concatencin: L = L1 .L2 es regular, porque podemos construir una expresin regular para L,
teniendo las expresiones regulares para L1 y L2 , ms preciso: con L1 = L() y L2 = L()
tenemos L = L()
Clausura: L = L1 es regular, porque podemos construir una expresin regular para L, teniendo
la expresin regular para L1 , ms preciso: con L1 = L() tenemos L = L(() )
Complemento: L = L1 = L1 es regular, porque podemos construir, dado un AFD completo M1 que acepta L1 , un AFD M que acepta L simplemente invertiendo sus estados finales, es decir, los estados no finales de M1 sern los estados finales de M y los
finales se convierten en los no finales, entonces, si M1 = (, Q, , q0 , F ) construimos
M = (, Q, , q0 , Q F ).
Interseccin: L = L1 L2 es regular, porque con las reglas de DeMorgan obtenemos L =
L1 L2 = L1 L2 . Complemento y unin producen lenguajes regulares, como visto
antes. Dicha construccin es bastante laborosa, abajo vemos una construccin directa y
simple.
Diferencia: L = L1 L2 es regular, porque se puede expresar la diferencia como L = L1 L2 =
L1 L2 = L1 ( L2 ) y las operaciones usadas mantienen la regularidad.
En vez de usar la lgica booleana, es decir, aplicando las reglas de DeMorgan, se puede construir
directamente un autmata que acepta el lenguaje L = L1 L2 .
La idea principal es, simular en paralelo en un solo autmata (digamos autmata de producto)
las transiciones de los dos autmatas (por ejemplo finitos deterministas y completas) para L1 y
L2 .
Entonces sean M1 = (1 , Q1 , 1 , q1 , F1 ) y M2 = (2 , Q2 , 2 , q2 , F2 ) los dos AFDs completos
que aceptan L1 y L2 , es decir, L1 = L(M1 ) y L2 = L(M2 ).
Construimos el AFD completo M que acepta L = L1 L2 = L(M ) como
M = (, Q, , q0 , F )
donde
asumimos que = 1 = 2 , es decir, usamos solamente los smbolos comunes. Es fcil
eliminar en M1 y en M2 todas las dependencias de smbolos superflues antemano en caso
que haya.
Q = Q1 Q2 , es decir, el producto cartesiano de los estados de M1 y M2 .
es la funcin de transicin con
((p, q), ) = (1 (p, ), 2 (q, ))
para p Q1 , q Q2 y .

Dr. Arno Formella

67

q0 = (q1 , q2 ), es decir, la pareja de los dos estados iniciales


F = F1 F2 , es decir, todas las parejas donde ambos estados son estados finales de ambos
autmatas.
Ejemplo:
afdprod
Obviamente la construccin funciona igual con autmatas finitos nodeterministas (AFND).
Homomorfismo: a lo mejor lo incluyo.

8.2.

Algoritmos de decisin de lenguages regulares

Pertenencia: w L? s, se puede contestar la pregunta (es decir, es un problema computable),


porque
construimos un AFD M que acepte L
simulamos su comportamiento leyendo la palabra w
si acabamos en un estado final, w est en L, sino w no est en L
Vaciedad: L = ? s, se puede contestar la pregunta (es decir, es un problema computable)
porque
construimos un autmata que acepte L
analizamos el grafo del autmata para averiguar si existe un camino desde el estado
incial hacia un estado final (dicho proceso resulta ms fcil, si se aade un estado y
se conecta todos los estados finales a este estado, as basta buscar un camino entre el
estado inicial y el estado aadido)
si existe tal camino, entonces L no es vaco, sino L es vaco lrempty
Cardinalidad: |L| < ? s, se puede contestar la pregunta (es decir, es un problema computable) porque
construimos un autmata que acepte L
analizamos el grafo del autmata para averiguar si existe un ciclo en un camino entre
el estado inicial y algn estado final
si existe tal ciclo, entonces L es infinito, sino L es finito
Igualidad: L1 = L2 ? s, se puede contestar la pregunta (es decir, es un problema computable)
porque

Dr. Arno Formella

68

construimos los autmatas finitos deterministas y mnimos que acepten L1 y L2


comparamos la estructura de los grafos de ambos autmatas
si son iguales, entonces ambos lenguajes son iguales, sino son diferentes
(Nota: comparar dos grafos generales y decidir si son iguales ,es decir, el problema de
isomorfa de grafos, es un problema que se puede calcular, pero todava no se conoce
el algoritmo ptimo. Para los AFD mnimos se reduce la complejidad porque las
aristas llevan atributos y se conoce ambos estados iniciales que tengan que coincidir.
)

8.3.

Aplicaciones para lenguajes regulares

Anlisis sintctico: El trabajo de un compilador es la traduccin de algn cdigo fuente (escrito


en un lenguaje de programacn, es decir, el cdigo fuente no es nada ms que una palabra
(larga) sobre el alfabeto de los smbolos permitidos) en una serie de instrucciones para un
procesador.
En la primera fase, el compilar analiza lexicogrficamente el texto, es decir, transforma con
la ayuda de autmatas finitos, el texto continuo en una secuencia de entidades, llamadas
token, por ejemplo, palabras claves, valores numricos, operadores, comentarios, etc.
Existen herramientas para el desarrollador que ayudan en la construccin de dichos autmatas, cuyas entradas suelen ser expresiones regulares y cdigo de accin y cuyas salidas
son programas que realizan la tarea del anlisis lexicogrfico. Un ejemplo es lex para un
sistema Unix.
Bsqueda de palabras en texto: Existen herramientas para el desarrollador que ayudan en la
bsqueda de secuencias de texto descritas por expresiones regulares. Un ejemplo es grep
para un sistema Unix o comandos internos a editores como el vi o emacs.
Diagramas de estados en UML: El lenguaje UML (unified modeling language) se usa para la
descripcin durante el proceso de desarrollo de software. El lenguaje grfico usa diferentes
tipos de diagramas para este fin. Uno de ellos son los diagramas de estados que visualizan
el cambio de estados de los objetos debido al paso de mensajes entre ellos.

Dr. Arno Formella

9.

69

Lenguajes libres de contexto

Ya hemos visto los siguientes lenguajes:

Lab
Labc
Lpal
Ldup

=
=
=
=

{an bn | n 0}
{an bn cn | n 0}
{w | w {0, 1} , w = vv R }
{w | w {0, 1} , w = vv}
2

Lquad = {0n | n nmero cuadrado}


Lprim = {0n | n nmero primo}
L() = {w | w {(, )} , w correcto}

Una gramtica libre de contexto es una cudrupla


G = (N , T , P, $)
donde
N es un alfabeto de smbolos no-terminales (o variables)
T es un alfabeto de smbolos terminales (o constantes)
P N (N T )+ {$ } es un sistema de producciones (o reglas)
$ N es el smbolo inicial
Es decir, la definicin de las gramticas libres de contexto nos da mucha libertad para el sistema
de producciones.
Por eso (y tambin para otros objetivos como por ejemplo mostrar que existe un tipo de autmata
que justamente acepta lenguajes libres de contexto como veremos en adelante) se ha desarrollado
formas normales de la representacin de gramticas libres de contexto, es decir, se transforma el
sistema de producciones de la gramtica de tal manera que no se vara el lenguaje generado pero
las reglas tengan cierta propiedad.
Especialmente la definicin arriba exluye reglas de forma X  siendo X un smbolo noterminal diferente a $, sin embargo, si permitesemos tales producciones, es decir, permitir P
N (N T ) , obtendramos los mismos lenguajes, porque, como veremos a continuacin,
dichas producciones se pueden eliminar sin cambiar el lenguaje que genera la gramtica.

Dr. Arno Formella

9.1.

70

Forma Normal de Chomsky

Sea G = (N , T , P, $) una gramtica con P N (N T ) y X N un smbolo


no-terminal (o una variable). Podemos clasificar tales smbolos X en tres clases:
variables accesibles: si existe una derivacin desde el smbolo inicial que contiene X, es decir,
existe $ X donde , .
variables generativas: si existe una derivacin desde el la variable que produce una sentencia
w, es decir, existe X w donde w T .
variables tiles: si existe una derivacin desde el smbolo inicial usando X que produce una
sentencia w, es decir, existe $ X w donde , y w T .
Una gramtica est en forma normal de Chomsky (FNC)
si G (es decir, su N ) solamente contiene variables tiles y
si todas las producciones de G (es decir, en su P ) son
o bien de la forma X Y Z con X, Y, Z N
o bien de la forma X con X N y T
si $ (es decir, el smbolo inicial de G) no aparece al lado derecho de ninguna produccin,
tambin est permitido que $  P .
La tercera condicin es necesaria para poder derivar . Si $ aparece a la derecha, primero habr
que sustituir las producciones implicadas adecuadamente como lo vimos en la conversin de una
gramtica lineal por la derecha a una gramtica lineal por la izquierda.
Observamos:
la primera condicin garantiza que todas las variables son necesarias para derivar por lo
menos una sentencia.
la segunda condicin garantiza que un rbol de derivacin es un rbol binario.
Obviamente cualquier gramtica en forma normal de Chomsky es una gramtica libre de contexto
que se verifica directamente analizando la forma de producciones permitidas.
Pero tambin es valido la otra direccin: para cualquier lenguaje libre de contexto existe una
gramtica en forma normal de Chomsky, que genera el mismo lenguaje.
La comprobacin de este hecho detallamos con la siguiente construccin donde a partir de una
gramtica libre de contexto dada, elaboramos una nueva gramtica en forma normal de Chomsky.

Dr. Arno Formella

71

Sea L un lenguaje libre de contexto y G = (N , T , P, $) una gramtica que genere L (es decir
L = L(G)).
La construccin sigue 5 pasos (asumimos que 
/ L, eso remediamos al final):
1. eliminamos las variables intiles
2. modificamos las reglas para que no haya mezcla de variables y constantes en las partes
derechas de las producciones y para que todas las reglas con constantes tengan la forma
X
3. sustituimos las reglas cuya longitud de su parte derecha es > 2
4. sustituimos las reglas de tipo X 
5. sustituimos las reglas de tipo X Y , las reglas unitarias.
Las gramticas despus de cada paso llamamos G = G0 , G1 , G2 , . . . , G5 = GF N C respectivamente.
Usamos la siguiente gramtica inicial
G0 = ({$, A, B, C, D, E, F }, {a, b, c}, P0 , $)
donde P0 contenga las siguientes producciones:
$
A
B
C
D
E
F

bDD | Ca | bc
B | aCC | baD
cBD |  | AC
bD | aBA
CD | a | EF
Eb
a

como ejemplo para realizar todos los pasos.


1. Sabiendo que una variable es intil si es no-generativa o inaccesible realizamos dos subpasos:
a) eliminamos primero las variables no-generativas N (y todas las reglas con ellas) llamando a la gramtica resultante G01 ,
b) eliminamos despus las variables inaccesibles I (y todas las reglas con ellas).
Para ello recorremos en forma estructurada las variables y reglas:

Dr. Arno Formella

72

a) para calcular N empezamos con aquellas variables que producen directamente sentencias (incluyendo ) y seguimos el uso de reglas con dichas variables para producir
as sucesivamente sentencias (o en otras palabras: seguimos las reglas desde el lado
derecho hacia el lado izquierdo para obtener as la informacin sobre las variables).
Una forma de realizar dicho recorrido es empezar con N = N y borrar del conjunto
todas aquellas variables que o bien directamente deriven una sentencia o bien lo hacen
indirectamente.
Se observa que solamente E es un smbolo no-generativo, es decir, N = {E}, P10
entonces es:
$
A
B
C
D
F

bDD | Ca | bc
B | aCC | baD
cBD |  | AC
bD | aBA
CD | a
a

b) para calcular I empezamos con el smbolo inicial y veremos a cuales de las variables
se puede llegar directamente y seguimos el uso de reglas con dichas variables para
llegar as sucesivamente a nuevas variables (o en otras palabras: seguimos las reglas
para obtener as la informacin sobre las variables accesibles). Dicho algoritmo es
una exploracin de un grafo de dependencia parecido al algoritmo que vimos para
detectar estados no-accesibles en un autmata finito.
Se observa que solamente F es un smbolo inaccesible, es decir, I = {F }, P1 entonces es:
$
A
B
C
D

bDD | Ca | bc
B | aCC | baD
cBD |  | AC
bD | aBA
CD | a

Entonces G1 no contiene smbolos intiles.


2. Aadimos para cada smbolo terminal una regla W y sustituimos en todas las reglas
de P1 , P2 entonces es:
$ Wb DD | CWa | Wb Wc
A B | Wa CC | Wb Wa D
B Wc BD |  | AC

Dr. Arno Formella

73
C
D
Wa
Wb
Wc

Wb D | Wa BA
CD | Wa
a
b
c

Entonces P2 solamente contiene reglas con partes derechas siendo , un smbolo terminal,
o una palabra de variables.
3. Sustituimos cada regla del tipo X Y1 Y1 . . . Yk con k > 2 por las reglas:
X Y1 X1
X1 Y2 X2
..
.
. ..
Xk3 Yk2 Xk2
Xk2 Yk1 Yk

donde las Xi son nuevas variables, P3 entonces es:


$
$1
A
A1
A2
B
B1
C
C1
D
Wa
Wb
Wc

Wb $1 | CWa | Wb Wc
DD
B | Wa A1 | Wb A2
CC
Wa D
Wc B1 |  | AC
BD
Wb D | Wa C1
BA
CD | Wa
a
b
c

Entonces P3 solamente contiene reglas con partes derechas siendo , un smbolo terminal,
o una palabra de una o dos variables.

Dr. Arno Formella

74

4. Eliminamos las reglas que producen , ojo! tenemos que distinguir entre variables que
solamente producen  y aquellas que tambin producen .
Entonces, el paso se realiza en 3 partes:
Calculamos los conjuntos de variables
E = {V | V } (las variables que posiblemente producen ) y
E = {V | V  y no existe V w con w 6= } E (las variables que solo
producen ).
Se calculan los conjuntos aplicando el mismo algoritmo que usamos en el primer
paso para detectar variables no-generativas.
Aadimos para cada regla del tipo X Y Z
X Y si Y
/ E y Z E
X Z si Y E y Z
/ E .
Eliminamos
todas las reglas de tipo X ,
todas las reglas de tipo X Y con Y E , y
todas las reglas de tipo X Y Z con Y, Z E .
En el ejemplo tenemos: E = {A, B, C1 }, E = , y por eso P4 es:
$
$1
A
A1
A2
B
B1
C
C1
D
Wa
Wb
Wc

Wb $1 | CWa | Wb Wc
DD
B | Wa A1 | Wb A2
CC
Wa D
Wc B1 | AC | C
BD | D
Wb D | Wa C1 | Wa
BA | A | B
CD | Wa
a
b
c

5. Para eliminar las reglas unitarias, es decir, reglas de tipo X Y procedemos:


Calculamos el conjunto de las reglas unitarias U = {(X, Y ) | X Y } (ojo! no
basta con (X, Y ) U si X Y , hay que calcular la clausura transitiva). Dicho

Dr. Arno Formella

75

clculo se realiza de forma parecida como lo vimos para el clculo de la clausura


transitiva de las transiciones  en los AFND-.
Partimos del conjunto que contiene todas las reglas unitarias del sistema de producciones, es decir
U1 = {(X, Y )|X Y P }
Despus construimos U2 insertando para cada par de parejas (X, Y ), (Y, Z) U1
la pareja (X, Z), S
o en general, construimos Ui insertando para cada par de parejas
(X, Y ), (Y, Z) j<i Uj la pareja (X, Z).
Seguimos con el procedimiento hasta que encontramos Ui vaca para cierto i, es decir,
no se ha aadido nada ms. (El ndice i de Ui nos indica con cuantos saltos como
mucho podemos llegar.) El algoritmo termina (porque el nmero de producciones es
finito) y finalmente obtenemos

[
U=
Ui
i=1

Nota: El clculo de la clausura transitiva en un grafo dirigido es una operacin que se


necesita en muchos mbitos de la informtica (por ejemplo en bases de datos relacionadas). Nosotros ya lo usamos en el contexto de los autmatas finitos. El algoritmo
especificado arriba tiene un tiempo de ejecucin cuadrtico en el nmero de producciones iniciales. Los mejores algoritmos tienen un comportamiento de O(ne + n + e)
en tiempo de ejecucin (donde n es el nmero de nodos y e el nmero de aristas en
el grafo), pero algunos de ellos se comportan en casos prcticos linealmente respecto
al tamao de entrada (nmero de arista).
Para cada (X, Y ) U y para cada regla Y que no es regla unitaria, aadimos
una regla X .
Eliminamos todas las reglas unitarias y controlamos que aquellas variables que aparecen a la derecha de las parejas siguen siendo accesibles.

$
$1
A
A1
A2
B
B1
C
C1
D

Wb $1 | CWa | Wb Wc
DD
B | Wa A1 | Wb A2
CC
Wa D
Wc B1 | AC | C
BD | D
Wb D | Wa C1 | Wa
BA | A | B
CD | Wa

Dr. Arno Formella

76
Wa a
Wb b
Wc c

En el ejemplo tenemos:
U1
U2
U3
U4

=
=
=
=

{(A, B), (B, C), (B1 , D), (C, Wa ), (C1 , A), (C1 , B), (D, Wa )}
{(A, C), (B, Wa ), (B1 , Wa ), (C1 , C)}
{(A, Wa ), (C1 , Wa )}

y por eso P5 , el sistema de producciones final, queda en:


$
$1
A
A1
A2
B
B1
C
C1
D
Wa
Wb
Wc

Wb $1 | CWa | Wb Wc
DD
Wc B1 | AC | Wa A1 | Wb A2 | Wb D | Wa C1 | a
CC
Wa D
Wc B1 | AC | Wb D | Wa C1 | a
BD | CD | a
Wb D | Wa C1 | a
BA | Wa A1 | Wb A2 | Wc B1 | AC | Wb D | Wa C1 | a
CD | a
a
b
c

Observamos en la construccin:
En ningn paso hemos aadido variables intiles.
Si hemos borrado reglas, hemos asegurado que todas las variables siguen siendo tiles.
Despus de cada paso la gramtica resultante genera el mismo lenguaje, es decir, L(G0 ) =
L(G1 ) = . . . = L(G5 ).
Como se observa, la gramtica G5 es en forma normal de Chomsky.

Dr. Arno Formella

77

Si el lenguaje de partida L contiene la palabra vaca ( L) entonces se detecta en el pasa 4


que el smbolo inicial pertenece a E (o incluso a E ), en este caso eliminamos con un nuevo
smbolo, por ejemplo $0 , la aparencia de $ en los lados derechos y aadimos la regla $ . Tal
gramtica sigue estando en forma normal de Chomsky y genera L.
Notas:
El clculo de los conjuntos N , I, E, E , y U que se necesitan para sucesivamente modificar
los sistemas de producciones se realiza con un recorrido estructurado sobre las variables y
producciones.
Dado que durante el proceso hemos eliminado producciones, puede ser que tambin en
el alfabeto de los smbolos terminales T hay smbolos superfluos, es decir, que no se
pueden producir con las producciones restantes. Dichos smbolos se pueden borrar de T
sin que se cambie el lenguaje generado.
Cuando eliminamos las reglas unitarias hemos eliminado implctamente las reglas innecesarias de tipo X X que tambin se podra borrar ya antemano en un paso previo.
Existen otras fuentes que primero realizan la eliminacin de las reglas nulas y de las reglas
unitarias antes de demezclar y reducir las partes derechas de las reglas. Eso es posible
pero el clculo de E y E es ms complejo y las reglas de ampliacin y eliminacin no se
limitan a dos, respectivamente tres, casos simples como descritos arriba en el paso 4.

9.2.

Forma Normal de Greibach

Veremos otra posible normalizacin de gramticas que nos sirve ms adelante para construir
cierto tipo de autmatas.
Una gramtica es en forma normal de Greibach (FNG) si
G (es decir, su N ) solamente contiene variables tiles
todas las producciones de G (es decir, en su P ) son de la forma X donde T
y N , es decir, todas las reglas tienen como primer smbolo en sus partes derechas un
smbolo terminal que es seguido por una palabra de variables.
(porque as no se podra derivar ) si $ (es decir, el smbolo inicial de G) no aparece al lado
derecho de una produccin, tambin est permitido que $  P
Obviamente cualquier gramtica en forma normal de Greibach es una gramtica libre de contexto
que se verifica directamente analizando la forma de producciones permitidas.
Una interesante propiedad es: para cualquier lenguaje libre de contexto existe una gramtica en
forma normal de Greibach, que genera el lenguaje.

Dr. Arno Formella

78

La comprobacin de este hecho detallamos con la siguiente construccin, donde a partir de una
gramtica libre de contexto dada elaboramos una nueva gramtica en forma normal de Greibach.
Sea L un lenguaje libre de contexto y G = (N , T , P, $) una gramtica que genere L (es decir
L = L(G)).
La construccin sigue 4 pasos (asumimos que 
/ L, eso remediamos al final):
1. construimos una gramtica equivalente en forma normal de Chomsky
2. sustituimos las reglas recursivas a la izquierda, es decir, reglas de tipo X XY ; eso
puede generar reglas con lados derechos mas
largos que dos
3. establecemos un orden en las variables, es decir N = {X1 , X2 , . . . , Xn } de tal manera
que todas las reglas sern de tipo Xi Xj con i < j, +
N
4. sustituimos las reglas que no tengan un smbolo terminal como primer smbolo en su parte
derecha.
Las gramticas despus de cada paso llamamos G = G0 , G1 , G2 , . . . , G4 = GF N G respectivamente.
Usamos la misma gramtica inicial como en el apartado anterior
G0 = ({$, A, B, C, D, E, F }, {a, b, c}, P0 , $)
donde P0 contenga las siguientes producciones:
$
A
B
C
D
E
F

bDD | Ca | bc
B | aCC | baD
cBD |  | AC
bD | aBA
CD | a | EF
Eb
a

como ejemplo para realizar todos los pasos.


1. La transformacin a FNC hicimos arriba. Entonces ya tenemos P1 como
$
$1
A
A1

CWa | Wb $1 | Wb Wc
DD
AC | Wc B1 | Wa A1 | Wb A2 | Wb D | Wa C1 | a
CC

Dr. Arno Formella

79
A2
B
B1
C
C1
D
Wa
Wb
Wc

Wa D
AC | Wc B1 | Wb D | Wa C1 | a
BD | CD | a
W b D | W a C1 | a
AC | BA | Wa A1 | Wb A2 | Wc B1 | Wb D | Wa C1 | a
CD | a
a
b
c

solo reordenado, para que aparezcan las partes derechas con variables al principio al comienzo de las listas.
2. Para cada produccin recursiva a la izquierda, es decir, regla de tipo X X con
X N y se realiza los siguientes 3 pasos:
se sustitue X X por X Y siendo Y una nueva variable
se aade las reglas Y Y |
para cada regla X se aade X Y si no comienza con X
En P1 hay una regla recursiva a la izquierda: A AC. Entonces, la sustituimos por
A CA3 , aadimos A3 CA3 | C y aadimos las dems reglas para A, y resulta el
conjunto P2 :
$ CWa | Wb $1 | Wb Wc
$1 DD
A CA3 | Wc B1 | Wa A1 | Wb A2 | Wb D | Wa C1 | a |
Wc B1 A3 | Wa A1 A3 | Wb A2 A3 | Wb DA3 | Wa C1 A3 | aA3
A1 CC
A2 Wa D
A3 CA3 | C
B AC | Wc B1 | Wb D | Wa C1 | a
B1 BD | CD | a
C Wb D | Wa C1 | a
C1 AC | BA | Wa A1 | Wb A2 | Wc B1 | Wb D | Wa C1 | a
D CD | a
Wa a
Wb b

Dr. Arno Formella

80

Wc c

Entonces las reglas en P2 tienen de nuevo diferentes longitudes en sus partes derechas
(incluso puede ser que haya reglas unitarias).
3. (por incluir)
4. (por incluir)
Dado que con una gramtica en forma normal de Greibach se genera con cada produccin exactamente un smbolo terminal, cada palabra derivable con tal gramtica tiene una derivacin igual
a la longitud de la palabra.
Ojo, eso no significa que se puede encontrar una derivacin en tiempo lineal, porque es posible
que en un momento se puede aplicar ms de una regla.

9.3.

Lema de bombeo para lenguajes libres de contexto

Igual como lo hemos visto para lenguajes regulares existe una propiedad que todos los lenguajes
libres de contexto cumplen:
Lema (de bombeo para lenguajes libres de contexto): Sea L un lenguaje libre de contexto
(infinito). Entonces existe un n IN de tal manera que cada palabra z L con |z| n se puede
dividir en cinco partes, z = uvwxy cumplindose las tres propiedades:
1. |vx| 1
2. |vwx| n
3. para todos los k 0 : uv k wxk y L
Idea de la comprobacin:
partimos de la FNC de la gramtica, es decir, las reglas son de las formas X Y Z o
X
el rbol para una palabra (suficientemente larga) ser un rbol binario
si |z| 2k+1 entonces el rbol tiene una altura por lo menos de k+1, es decir, se encuentran
k + 1 variables en un camino desde la raz hacia alguna hoja
entonces, si hay solamente k variables en el alfabeto N , se tiene que repetir una variable,
sea X, en un camino desde la raz hasta una hoja

Dr. Arno Formella

81

observamos los dos subrboles con dicha variable desde abajo


lblibre0
vemos: |vx| 1 porque se tiene que derivar algo desde X dado que tenemos una FNC y
el rbol se bifurca en X
vemos: |vwx| n porque la altura del subrbol hacia el segundo X es como mucho k
vemos: para todos los k 0 : uv k wxk y L porque podemos eliminar v y x o sustituir
cuantas veces como queremos el subrbol debajo de X adecuadamente
lblibre1
El uso del lema de bombeo es parecido a su uso en el caso de los lenguajes regulares, se puede
comprobar que ciertos lenguajes no son libres de contexto.
Ejemplo: Investigamos Labc = {an bn cn | n 1}.
Asumimos que Labc sea libre de contexto.
El lema de bombeo nos garantiza la existencia de un n tal que se cumplen las propiedades
para palabras z con |z| n. (No conocemos n en concreto, solo su existencia.)
(Pensamos...): Elegimos z = an bn cn . Obviamente z Labc y |z| = 3n n.
El lema de bombeo nos garantiza la existencia de una particin z = uvwxy con |vx| 1,
|vwx| n, y k 0 : uv k wxk y Labc . (No conocemos la particin en concreto, pero sus
propiedades.)
(Pensamos...): Porque |vwx| n el vwx no puede contener as, bs, y cs al mismo tiempo.
Entonces vx tampoco, es decir, vx contiene como mucho dos smbolos diferentes.
Porque |vx| 1 la subpalabra vx contiene por lo menos un smbolo.
uv 0 wx0 y = uwy Labc pero hemos borrado como mucho dos tipos de smbolos.
Eso es una contradiccin.
Entonces Labc no puede ser libre de contexto.

10.

Autmatas finitos con pila (AFP)

Dr. Arno Formella

10.1.

82

Motivacin

Ya sabemos Lab = {an bn | n IN} no es regular (comprobamos con el lema de bombeo o con
el teorema de MyhillNerode).
Pero Lab es libre de contexto con la siguiente gramtica:
G = (N , T , P, $)
= ({$}, {a, b}, {$ a$b|}, $)

Otro ejemplo parecido es: expresiones matemticamente correctas de diferentes tipos de parntesis T = {[, ], h, i, (, )}, por ejemplo, ( ( ] ] ) i ) es incorrecto y [ ( [ ] ) h ( ) i ] es correcto.
L() = {w | w T , w es correcto}
es libre de contexto, con el sistema de producciones
P = {$ $$ | ($) | [$] | h$i | }
L() no es regular, porque ya [n ]n no es regular.
Podemos construir un tipo de autmata que acepta una palabra de L() ?
Idea: usamos una pila para memorizar lo que se ha ledo:
Las parntesis que abren ponemos en la pila.
Si vemos una parntesis que cierre la cima de la pila tiene que ser su homloga y la quitamos de la pila.
Al final, la pila tiene que estar vaca.
Eso era bastante fcil, ampliamos las posibilidades algo ms, permitimos
que el autmata pueda tener varios (nmero finito) estados (parecido a los AFD, pero
veremos que basta con un estado);
que el autmata sea no-determinista (veremos que habr una diferencia entre AFPDs y
AFPNDs);
que exista la posibilidad de transiciones ;
que acepte con pila vaca o con estados finales (veremos que ambas formas son equivalentes);

Dr. Arno Formella

83

que existan ms smbolos para la pila;


que se apile ms de un smbolo a la vez;
que se disponga de un smbolo inicial en la pila.

10.2.

Autmatas finitos con pila no-deterministas (AFPND)

Un autmata finito con pila no-determinista (AFPND) es una sptupla


M = (, , Q, , q0 , c0 , F )
donde
es un alfabeto de entrada.
es un alfabeto de pila ( = es posible).
Q es un conjunto de estados, |Q| < .
q0 Q es el estado inicial.
c0 es el smbolo inicial de la pila.
F es el conjunto de estados finales (puede ser el conjunto vaca).
es la funcin de transicin
: Q ( {} W< (Q )
donde W< sea el conjunto de subconjuntos finitos.
Es decir, el comportamiento del autmata depende en cada transicin
del estado actual
posiblemente del siguiente smbolo de la entrada
del smbolo en la cima de la pila
y se modifica el autmata en el sentido que
se cambia (posiblemente) del estado
se consume (posiblemente) el siguiente smbolo de la entrada
se modifica (posiblemente) el contenido de la cima de la pila.

Dr. Arno Formella

84

Para el ejemplo de arriba obtenemos el autmata


M() = ({(, ), h, i, [, ]}, {(, h, [, #}, {q0 , q1 }, , q0 , #, )
con
(q0 , (, )
(q0 , h, )
(q0 , [, )
(q0 , ), ()
(q0 , i, h)
(q0 , ], [)
(q0 , , #)

=
=
=
=
=
=
=

{(q0 , ()}
{(q0 , h)}
{(q0 , [)}
{(q0 , )}
{(q0 , )}
{(q0 , )}
{(q1 , )}

Observa
que escribimos en las expresiones arriba el contenido de la pila como los rabes: desde la
derecha hacia la izquierda,
que el autmata no est completo, pero se podra completar aadiendo transiciones adecuados en un estado sin salida que ya no vara la pila.
Tambin podemos dibujar autmatas con pila, por ejemplo de la siguiente manera:
afp
Es decir, dibujamos el grafo parecido como lo hemos hecho para los AFND-: los vrtices del
grafo representan los estados del autmata y las aristas representan las transiciones. Ampliamos
las etiquetas de las aristas con los cambios en la cima de la pila.
Podemos pensar de un autmata con pila como un dispositivo que lee desde una cinta con smbolos, realiza cambios de estados internamente, y maneja una pila de la forma descrita:
autopila
Otro ejemplo; construimos un AFP para el lenguaje
LvvR = {w | w {0, 1} , w = vv R }
es decir, los palndromos con longitud par.
Idea:
Adivinamos (no-determinismo) dnde acaba v.

Dr. Arno Formella

85

Copiamos toda la palabra v a la pila.


Verificamos el resto de w, que debe ser v R , con el contenido de la pila, es decir, la pila
debe estar vaca una vez haber ledo toda la palabra w.
Un AFPND ser el siguiente:
MvvR = ({0, 1}, {0, 1, #}, {q0 , q1 , q2 }, , q0 , #, )
con
(q0 , 0, )
(q0 , 1, )
(q0 , , )
(q1 , 0, 0)
(q1 , 1, 1)
(q1 , , #)

=
=
=
=
=
=

{(q0 , 0)}
{(q0 , 1)}
{(q1 , )}
{(q1 , )}
{(q1 , )}
{(q2 , )}

afpvv
Cmo comprobamos que es correcto?
Dado que el contenido de la pila influye en el comportamiento del autmata necesitamos una
notacin para describir los clculos del autmata.
La configuracin (o descripcin instantnea) C de un AFP M = (, , Q, , q0 , c0 , F ) es la
tripla (q, u, v) donde
q Q es el estado actual
u es lo que queda por leer de la entrada
v es el contenido actual de la pila
La configuracin inicial C0 entonces es (q0 , w, c0 ).
Si el autmata est en configuracin C podemos definir que es una posible siguiente configuracin, es decir, despus de haber realizado un paso en el clculo.
C 0 = (q 0 , u, zv) es configuracin sucesora de C = (q, u, v) (es decir, es el siguiente
smbolo de la entrada y la cima de la pila), si (q 0 , z) (q, , ) y, para las transiciones ,
C 0 = (q 0 , u, zv) es configuracin sucesora de C = (q, u, v) (es decir, no se lee un smbolo de
la entrada y la cima de la pila), si (q 0 , z) (q, , ).

Dr. Arno Formella

86

Observa, si la pila est vaca, no existe configuracin sucesora ninguna.


Escribimos C p C 0 si C 0 es configuracin sucesora de C. Si existe una secuencia de configuraciones sucesoras de C hasta C 0 , es decir,
C = C0 p C1 p C2 p . . . p Cn = C 0
llamamos la secuencia un clculo del autmata y abreviamos con C p C 0 .
Un AFPND acepta una palabra w de entrada segn modus:
F = , es decir, acepta con pila vaca
M acepta w (q0 , w, c0 ) p (q, , )
para cualquier estado q Q
F 6= , es decir, acepta en estado final
M acepta w (q0 , w, c0 ) p (f, , v)
con v y f F .
El lenguaje aceptado por un autmata AFPND M es
L(M ) = {w | M acepta w}
En la siguiente seccin comprobamos que ambos mtodos de aceptacin son equivalentes para
los AFPND (pero no ser el caso de ls AFPD, los autmatas finitos con pila deterministas, que
veremos ms adelante).
Comprobamos ahora que el MvvR es correcto, es decir, tenemos que comprobar que L(MvvR ) =
LvvR .
Primero verificamos que MvvR acepta para cualquier palabra v {0, 1} la palabra w = vv R :
(q0 , vv R , #)

(q0 , v R , v R #)
(q1 , v R , v R #)
(q1 , , #)
(q2 , , )

es decir, hemos encontrado un clculo y con eso sabemos que LvvR L(MvvR ).
Luego comprobamos que MvvR solamente acepta palabras en LvvR .
(por incluir)

Dr. Arno Formella

10.3.

87

Equivalencia entre AFPNDs aceptando con pila vaca y aceptando en estado final

Para cada AFPND M que acepta con pila vaca existe un AFPND M 0 que acepta en estado final.
Idea de la comprobacin:
M 0 simula M
M 0 usa un nuevo smbolo c00 como smbolo inicial de la pila
si despus de la simulacin de M dicho c00 est en la cima de la pila, M 0 sabe que M
hubiese aceptado, es decir, M 0 acepta tambin yiendo a un estado final.
Para el ejemplo de antes
LvvR = {w | w {0, 1} , w = vv R }
con el siguiente autmata que acepta con pila vaca
afpndpv
obtenemos el nuevo autmata que acepta en estado final
afpndefpv
En general:
M = (, , Q, , q0 , c0 , )
M 0 = (, {c00 }, Q {q00 , f }, 0 , q00 , c00 , {f })
con
q00 , f
/ Q, es decir, son nuevos estados
c00
/ , es decir, es un nuevo smbolo inicial
0 (q00 , , c00 ) = {(q0 , c0 c00 )}, es decir, la primera transicin apila el antiguo smbolo inicial y
se va al antiguo estado inicial sin leer nada de la entrada
q Q, , : 0 (q, , ) = (q, , ), 0 (q, , ) = (q, , ), es decir, se simula
M
q Q : 0 (q, , c00 ) = {(f, c00 )}, es decir, si la pila solamente contiene el nuevo smbolo
inicial se va al estado final.
Para cada AFPND M que acepta en estado final existe un AFPND M 0 que acepta con pila vaca.
Idea de la comprobacin:

Dr. Arno Formella

88

M 0 simula M
M 0 vaca desde cualquier estado final de M su pila
tenemos que tener cuidado si M no termina en estado final, pero su pila est vaca: colocamos antes de la simulacin un nuevo smbolo c00 como smbolo inicial en la pila que no
se toca durante la simulacin de M .
Para el ejemplo
L = {ai bj | j i}
con el siguiente autmata que acepta en estado final
afpndef
(Primero observamos la consecuencia de la definicin de un clculo:
M acepta w (q0 , w, c0 ) p (f, , v)
entonces, si sobran bs la pila estar vaca y no habr transicin ninguna, y por eso no llegamos a
 con la entrada.)
Siguiendo la idea, obtenemos el nuevo autmata que acepta con pila vaca
afpndpvef
En general:
M = (, , Q, , q0 , c0 , )
M 0 = (, {c00 }, Q {q00 , q 0 }, 0 , q00 , c00 , )
con
q00 , q 0
/ Q, es decir, son nuevos estados
c00
/ , es decir, es un nuevo smbolo inicial
0 (q00 , , c00 ) = {(q0 , c0 c00 )}, es decir, la primera transicin apila el antiguo smbolo inicial y
se va al antiguo estado inicial sin leer nada de la entrada
{c00 } : 0 (q 0 , , ) = {(q 0 , )}, es decir, una vez en estado q 0 se vaca la pila sin
modificar la entrada
q Q, , : 0 (q, , ) = (q, , ), es decir, pasos normales de la simulacin
q Q F, : 0 (q, , ) = (q, , ), es decir, se simula tambin las transiciones 
mientras M no est en estado final
q F, : 0 (q, , ) = (q, , ) {(q 0 , )}, es decir, saltamos al estado que vaca la
pila si ya estamos en estado final

Dr. Arno Formella

10.4.

89

Equivalencia entre AFPNDs y gramticas libres de contexto

Para cada gramtica libre de contexto G existe un autmata finito con pila no-determinista M
que acepta el mismo lenguaje, es decir, L(M ) = L(G).
La comprobacin es constructiva.
Sea G = (T , N , P, $) una gramtica libre de contexto.
Podemos convertir la gramtica en su forma normal de Greibach (FNG), es decir todas las producciones son del tipo: A con T y N o la produccin es $  si
 L(G).
Construimos un AFPND M = (T , N , {q}, , q, $, ), (es decir, con un slo estado) que acepta
con pila vaca, donde
(q, ) (q, , A)
siempre que A sea una produccin en P y
(q, $) (q, , )
siempre que $  sea una produccin en P .
Entonces, el autmata simula en un clculo la aplicacin de las reglas de la gramtica siempre
siguiendo la derivacin ms a la izquierda para la palabra en cuestin.
Ejemplo:
G = ({a, b}, {$, A, B, C}, P, $)
con
P = {$ aBBC, A aAA|b, B bBAC|b, C b}
que ya est en forma formal de Greibach, entonces el AFPND es:
M = ({a, b}, {$, A, B, C}, {q}, , q, $, )
con
(q, a, $)
(q, a, A)
(q, b, A)
(q, b, B)
(q, b, C)

=
=
=
=
=

{(q, BBC)}
{(q, AA)}
{(q, )}
{(q, BAC), (q, )}
{(q, )}

Dr. Arno Formella

90

Para cada autmata finito con pila no-determinista M existe una gramtica libre de contexto G
que genera el mismo lenguaje, es decir, L(G) = L(M ).
La comprobacin es constructiva.
Sea M = (, , Q, , q0 , c0 , F ) un AFPND.
Si F 6= podemos convertir el autmata en un AFPND que acepte con pila vaca.
Luego podemos asumir que todas las transiciones del autmata como mucho apilan dos smbolos a la pila, porque podemos introducir estados intermedios que apilan poco a poco todos los
smbolos necesarios sin leer ms de la entrada, en concreto,
sea (q, v) (p, , ) con v = 1 2 . . . k , , y k > 2 una transicin de tal tipo
aadimos los nuevos estados q1 , q2 , . . . , qk2 a Q y sustituimos la transicin por
(p, , )
(q1 , , k1 )
...
(q, 1 2 ) (qk2 , , 2 )

(q1 , k1 k )
(q2 , k2 k1 )

Observa que podemos realizar tal sustitucin igual en caso que el autmata ejecute una
transicin- (es decir, arriba no se lee de la entrada sino ); entonces, para simplificar
escribimos 0 si leemos o bien un smbolo o bien .
Entonces, asumimos que tengamos un AFPND que acepta con pila vaca y que apile en una
transicin como mucho dos smbolos a la vez.
Construimos una gramtica libre de contexto G = (, N , P, $), es decir, con los mismos smbolos de entrada, y donde
N est formado por las triplas [p, A, q] siendo p, q Q y A , y el smbolo $.
P es el conjunto de producciones donde aadimos
para cada estado q Q las reglas $ [q0 , c0 , q]
para cada transicin (q, ) (p, 0 , ) la regla [p, , q] 0
para cada transicin (q, 1 ) (p, 0 , ) y cada estado r Q las reglas [p, , r]
0 [q, 1 , r]
para cada transicin (q, 1 2 ) (p, 0 , ) y cada par de estados r, s Q las reglas
[p, , r] 0 [q, 1 , s][s, 2 , r]

Dr. Arno Formella

91

observa que pueden existir reglas nulas en caso que 0 = 


Entonces, la gramtica simula un clculo del autmata con una derivacin ms a la izquierda
para la palabra en cuestin.
Formalmente hay que comprobar la equivalencia
$ w (q0 , w, c0 ) p (q, , )
es decir, si existe una derivacin tambin existe un clculo y al revs.
La comprobacin del lado izquierdo al lado derecho se realice mediante una induccin sobre la
longitud de una derivacin ms a la izquierda y la otra direccin mediante una induccin sobre la
longitud del clculo. El caso inicial, es decir, se aplica solamente una regla o se calcula solamente
una configuracin siguiente, se verifica directamente a partir de la construccin.
Juntas ambas direcciones nos proporcionen la equivalencia entre las gramticas libres de
contexto y los autmatas finitos con pila no-deterministas.
En la primera parte de la comprobacin observamos que basta un solo estado en un AFPND
(si un AFPND tiene ms estados, podemos construir una gramtica equivalente, y despus
un AFPND con un solo estado).
En la segunda parte de la comprobacin observamos que basta con una gramtica en forma
normal de Greibach donde las producciones tengan como mucho 2 smbolos no-terminales
en sus partes derechas (es decir, tambin en la FNG los rboles de derivacin pueden ser
rboles binarios como en la FNC).

10.5.

Autmatas finitos con pila deterministas (AFPD)

Los AFPND, como el propio nombre ya dice, no son deterministas, es decir, pueden existir varias posibles configuraciones siguientes, o en otras palabras, (q, , ) o (q, , ) son conjuntos
conposiblementems de un elemento.
Para que un AFPND acepte una palabra de entrada w se ha exigido solamente la existencia de un
clculo que lee toda la palabra w y termina con pila vaca o en un estado final.
Este hecho no es adecuado en la prctica, porque de alguna manera hay que comprobar todos
los posibles clculos para ver si existe uno que acepta. Por eso limitamos los autmatas para que
sean deterministas.
Podemos definir un autmata finito con pila determinista AFPD
M = (, , Q, , q0 , c0 , F )
igual que un AFPND introduciendo las siguientes restricciones

Dr. Arno Formella

92

1. para cada q Q, , y permitimos como mucho una transicin, es decir:


|(q, , )| + |(q, , )| 1
Entonces, permitimos transiciones- que son deterministas si consideramos la pila.
2. F 6= , es decir, el AFND acepta con estado final.
Dado que para un AFPD existe como mucho una configuracin siguiente, es decir p es una
funcin, los clculos se convierten en cadenas deterministas, y decimos, que el AFPD acepta una
palabra w si existe el clculo (q0 , w, c0 ) p (f, , v) con f F .
Para AFPDs los dos criterios de parada no son equivalentes que se entiende analizando las comprobaciones donde era escencial disponer de transiciones no-deterministas para saltar a un estado adicional con el fin de vaciar la pila.
Llamamos un lenguaje L libre de contexto determinista si L es aceptado por un autmata finito
con pila determinista.
Los lenguajes libres de contexto deterministas son un verdadero subconjunto de los lenguajes
libres de contexto, es decir, existen lenguajes que son libres de contexto pero no libres de contexto
determinista.
Ejemplo:
El lenguaje L = {w | w {0, 1, #}, w = v#v R y v no contiene # es libre de contexto determinista, porque se apila hasta encontrar el centro (que hemos marcado con #) y despus se verifica
el resto de w con el contenido de la pila.
El lenguaje L = {w | w {0, 1}, w = vv R } es libre de contexto, como ya vimos, pero no es libre
de contexto determinista, porque, para decirlo de alguna manera, se necesita el no-determinismo
para encontrar el centro, o en otras palabras, hay que comprobar todos los posibles clculos
verificando si uno de ellos llega a una aceptacin.
Obviamente los lenguajes regulares tambin son libres de contexto deterministas, porque si no
usamos la pila justamente un AFP es un AFD.

11.

Propiedades, algoritmos de decisin,


y aplicaciones para lenguajes libres de contexto

Dr. Arno Formella

11.1.

93

Propiedades de lenguajes libre de contexto

Sean L1 y L2 dos lenguajes libres de contexto.


Unin: L = L1 L2 es libre de contexto, porque podemos construir a partir de las gramticas
G1 = (1T , 1N , P 1 , $1 ) y G2 = (2T , 2N , P 2 , $2 ) con L1 = L(G1 ) y L2 = L(G2 ) la
gramtica G = (1T 2T , 1N 2N , P 1 P 2 {$ $1 , $ $2 }, $) que es una
gramtica libre de contexto y obviamente genera todas las palabras tanto en L1 como en
L2 .
Eso no es el caso si nos limitamos a los lenguajes libres de contexto deterministas.
Concatencin: L = L1 .L2 es libre de contexto, porque podemos construir a partir de las gramticas G1 = (1T , 1N , P 1 , $1 ) y G2 = (2T , 2N , P 2 , $2 ) con L1 = L(G1 ) y L2 = L(G2 )
la gramtica G = (1T 2T , 1N 2N , P 1 P 2 {$ $1 $2 }, $) que es una gramtica
libre de contexto y obviamente genera todas las palabras en L.
Eso no es el caso si nos limitamos a los lenguajes libres de contexto deterministas.
Clausura: L = L1 es libre de contexto, porque podemos construir una gramtica libre de contexto a partir de la gramtica para L1 , simplemente aadimos las producciones {$0
$0 $0 , $0 $} siendo $ el nuevo smbolo inicial.
Interseccin: L = L1 L2 no es libre de contexto (en general), como demuestra el ejemplo:
L1 = {ai bi cj | i, j > 0} y L2 = {ai bj cj | i, j > 0} nos lleva a L = L1 L2 = {ai bi ci | i >
0} que no es libre de contexto como ya vimos.
Si confinamos L2 a lenguajes regulares, entonces la interseccin produce lenguajes libres
de contexto. El argumento es igual de constructivo como en el caso de dos lenguajes regulares.
Complemento: L = L1 = L1 no es libre de contexto (en general), porque si asumimos
que lo fuera y sabiendo que la unin lo es podramos derivar L1 L2 = L1 L2 como
libre de contexto, pero ya sabemos que la interseccin no genera siempre tal lenguajes.
Para los lenguajes libres de contexto determinista, el complemento genera un lenguaje libre
de contexto determinista, porque es fcil invertir un autmata determinista.
Diferencia: L = L1 L2 no es libre de contexto (en general), porque L = L2 = L2 no es
libre de contexto.

11.2.

Algoritmos de decisin de lenguages libres de contexto

Pertenencia: w L? s, se puede contestar la pregunta (es decir, es un problema computable)


porque

Dr. Arno Formella

94

construimos un autmata que acepte L (por ejemplo en estado final)


simulamos su comportamiento leyendo la palabra w
si acabamos en un estado final, w est en L, sino w no est en L
dicha simulacin puede tener tiempo de clculo exponential, otra posibilidad es
construimos una gramtica en forma normal de Chomsky
aplicamos el algoritmo de Cocke-Younger-Kasami que resuelve el problema en tiempo de orden O(n3 ).
Vaciedad: L = ? s, se puede contestar la pregunta (es decir, es un problema computable)
porque
construimos una gramtica que genere L
analizamos si el smbolo inicial es til, si es til, entonces L no es vaco, sino L es
vaco
Cardinalidad: |L| < ? s, se puede contestar la pregunta (es decir, es un problema computable) porque
construimos una gramtica que genere L en su forma normal de Chomsky
analizamos el grafo de posisibles sustituciones de smbolos para averigar si existe
un ciclo
si existe tal ciclo, entonces L es infinito, sino L es finito
Igualidad: L1 = L2 ? no, no se puede contestar la pregunta (es decir, es un problema no computable).
antes de entender dicha respuesta negativa, hay que estudiar ms a fondo la teora de
las Mquinas de Turing.

11.3.

Aplicaciones para lenguajes libres de contexto

Anlisis semntico (basado en bloques estructurados): La aplicacin ms importante de los


lenguajes libres de contexto es claramente la definicin y el anlisis de informacin estructurado en bloques anidados como suele ocurrir en los lenguajes de programacin (recuerda los bloques beginend en PASCAL) o las marcas en un fichero XML (extended
markup language).

Dr. Arno Formella

12.

95

Hojas de ejercicios (con respuestas)

12.1.

Hoja 1 (23 de Febrero de 2010)

P1: Busca y describe el significado de la siguiente secuencia de smbolos. Describe tambin


como lo has conseguido.

R1: Quadrado.
P2: Enumera y comenta brevemente 3 situaciones en el contexto de la informtica dnde el uso
de lenguajes formales y sus autmatas correspondientes es til.
R2:
Verificacin de la sintaxis correcta de cadenas de smbolos (p.ej.: direcciones de correo
electrnico, nmeros reales en programas, ficheros HTML o XML).
Desarrollo de algoritmos (p.ej.: algoritmo para la bsqueda de una palabra (con o sin comodines) en un texto)
Especificaciones de entradas/ficheros vlidas.
Comprobacin si un problema es computable o no lo es.
Verificacin de sistemas basados en estados (p.ej.: un semforo en un cruce). Ojo, aqu hay
que trabajar con palabras de longitud posiblemente infinita.
Compilacin de programas.
Diagramas de estados en lenguajes de modelado (por ejemplo UML).
y mucho, mucho ms...

Dr. Arno Formella

12.2.

96

Hoja 2 (2 de Marzo de 2010)

P1: Dado dos lenguajes L1 y L2 sobre el alfabeto = {a, b, c}. Anotamos con L1 L2 la unin,
con L1 L2 la interseccin, con L1 el complemento, y con L1 L2 la diferencia. Verifica o
contradice:
L1 = L1
L1 L2 = L1 L2
L1 L2 = L1 L2
L1 .L2 = L2 .L1
R1: Si L1 y L2 son lenguajes sobre un alfabeto , entonces L1 y L2 (por definicin).
Adems sabemos por definicin:
L1 L2 = {w | w L1 y w L2 }
L1 L2 = {w | w L1 o w L2 }
L1 = {w | w
/ L1 }
L1 L2 = {w | w L1 y w
/ L2 }
Entonces si usamos la definicin de la diferencia con L1 como y L2 como L1 , tenemos
L1 = {w | w y w
/ L1 } = {w | w
/ L1 } = L1 . Usamos una tabla de pertenencia para
alguna palabra w para comprobar la segunda y tercera equacin (Leyes de De Morgan):
L1

L2

L1

L2

L1 L2

L1 L2

L1 L2

L1 L2

L1 L2

L1 L2

Y vemos que las columnas correspondientes son iguales. Para la ltima construimos un contraejemplo: Sea L1 = {a} y L2 = {b}, entonces L1 .L2 = {ab} y L2 .L1 = {ba} y dichos conjuntos
no son iguales, entonces la equacin es incorrecta.
P2: Construye un autmata finito determinista que acepta el lenguaje L que contiene todas las
palabras (finitas) sobre el alfabeto {0, 1} con un nmero par de 0s y un nmero impar de 1s.
R2: M = ({0, 1}, {a, b, c, d}, , a, {b}) con segn el grafo:

0
a
0

1
1

b 0

1
1

Dr. Arno Formella

12.3.

97

Hoja 3 (9 de Marzo de 2010)

P1: Calcula, paso a paso, el resultado de la funcin para el autmata de la hoja anterior y la
palabra de entrada w = 0100110, es decir, (a, w).
R1:
(a, 0100110) =
=
=
=
=
=
=

((a, 0), 100110) = (d, 100110)


((d, 1), 00110) = (c, 00110)
((c, 0), 0110) = (b, 0110)
((b, 0), 110) = (c, 110)
((c, 1), 10) = (d, 10)
((d, 1), 0) = (c, 0)
((c, 0), ) = (b, ) = b

es decir, el AFD acepta la palabra, dado que b es un estado final del AFD.
P2: Escribe la tabla para la funcin de transicin del AFND con el siguiente grafo:

0,1
1

0,1

0,1
c

d
0

Calcula, paso a paso, el resultado de la funcin para este autmata y la palabra de entrada
w = 0100110, es decir, (a, w). Averigua una palabra sobre {0, 1} que el autmata no acepta.
R2:
0
1

= a {a} {a, b}
b {c, d} {c}
c {d}
{d}
?d

(a, 0100110) =

(r, 100110) =

r(a,0)

[
r(a,1)

=
=

r{a}

(r, 00110) = (a, 00110) (c, 00110)

r{a,b}

(r, 0110)

r(a,0)

(r, 100110) = (a, 100110)

r{a}

(r, 00110) =

(r, 0110)

(r, 0110)

r(c,0)

[
r{d}

(r, 0110)

Dr. Arno Formella

98

= (a, 0110) (d, 0110)


[
[
=
(r, 110)
(r, 110)
r(a,0)

r(d,0)

(r, 110)

r{a}

(r, 10) =

(r, 0)

(r, 0)

r(c,1)

(r, 0)

r{a,b}

(r, 10) = (a, 10) (c, 10)

r{a,b}

r(a,1)

(r, 110) = (a, 110)

[
r(a,1)

(r, 0)

r{d}

= (a, 0) (b, 0) (d, 0)


[
[
[
=
(r, )
(r, )
(r, )
r(a,0)

[
r{a}

r(b,0)

(r, )

(r, )

r{c,d}

r(d,0)

(r, )

= (a, ) (c, ) (d, )


= {a, c, d}
es decir, el AFND acepta la palabra, dado que en el conjunto calculado se encuentra un estado
final del AFND.
No acepta , dado que (a, ) = {a} y {a} {d} = .

Dr. Arno Formella

12.4.

99

Hoja 4 (16 de Marzo de 2010)

P1: Convierte el AFND de la hoja anterior en un autmata finito determinista. Incluye en tu solucin la tabla de conversin tal como lo vimos en clase, la quntupla del AFD obtenido finalmente,
y su grafo.
R1: La tabla del AFND es:
0
1

= a {a} {a, b}
b {c, d} {c}
{d}
c {d}
?d

Convertimos a AFD (obviando de las llaves para los conjuntos):

= a
a, b
? a, c, d
a, b, c
? a, d
? a, b, d
? a, b, c, d

0
a
a, c, d
a, d
a, c, d
a
a, c, d
a, c, d

1
0
a, b
= A A
a, b, c
B C
a, b, d
?C E
y con estados renombrados
a, b, c, d
D C
a, b
?E A
a, b, c
?F C
a, b, c, d
?G C

1
B
D
F
G
B
D
G

La quntupla es MAF D = ({0, 1}, {A, B, C, D, E, F, G}, , A, {C, E, F, G}) con segn la tabla
arriba y el grafo (sin estado inicial marcado, se ha hecho con la herramienta graphviz):

Dr. Arno Formella

12.5.

100

Hoja 5 (23 de Marzo de 2010)

P1: Convierte el siguiente AFND- en un AFND (incluye todas las tablas, grafos, quntuplas, y
el clculo de la clausura transitiva necesario). El estado inicial es el estado 1.

R1: Quntupla del AFND-: M = ({a, b}, {1, 2, 3, 4, 5, 6}, , 1, {2, 4}), con segn tabla:

= 1
?2
3
?4
5
6

a
{6}
{3}
{4}

{3}

{2}
{2}

{6}
{3, 5}

{5} {4}

Clculo de la clausura-:
T0
T1
T2
T3

=
=
=
=

T? =

{(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6)}
{(1, 2), (3, 6), (6, 4)}
{(3, 4)}

Ti = {(1, 1), (1, 2), (2, 2), (3, 3), (3, 4), (3, 6), (4, 4), (5, 5), (6, 4), (6, 6)}

i=0

Con eso las tablas (concatenadas) de transformacin a AFND:

1
2
3
4
5
6

a
{6}
{3}
{4}

{3}

{2}
{2}

{6}
{3, 5}

{5} {4}

cl
{1, 2}
{2}
{3, 4, 6}
{4}
{5}
{4, 6}

a
b
{3, 6} {2}
{3}
{2}
{4} {3, 5}

{3, 5}
{3}

{3, 5}

a
b
{3, 4, 6}
{2}
{3, 4, 6}
{2}
{4}
{3, 4, 5, 6}

{3, 4, 5, 6}
{3, 4, 6}

{3, 4, 5, 6}

Se observa que hay un estado final de M en la clausura- del estado inicial, por eso hay que
aumentar el conjunto de estados finales!

Dr. Arno Formella

101

Resulta la quntupla del AFND: M 0 = ({a, b}, {1, 2, 3, 4, 5, 6}, , 1, {1, 2, 4}), con segn tabla:

a
b
= ? 1 {3, 4, 6}
{2}
{2}
? 2 {3, 4, 6}
{4}
{3, 4, 5, 6}
3
?4

{3, 4, 5, 6}

5 {3, 4, 6}
6

{3, 4, 5, 6}
y el grafo:

Dr. Arno Formella

12.6.

102

Hoja 6 (6 de Abril de 2010)

P1: Qu lenguajes definen las siguientes expresiones regulares?


1. (((0.1) + (0.1) .0) + ((1.0) + (1.0) .1))
2. (1 + ).(0.1) .(0 + )
3. (0.1 + ((() + (.0) ) + 0.1) .1)
R1:
1. La E.R. define todas las palabras donde se alternan 0s y 1s incluyendo la palabra .
2. La E.R. define todas las palabras donde se alternan 0s y 1s incluyendo la palabra .
3. La E.R. define todas las palabras del conjunto: L = {1, 01, 011, 01011, 0101011, 010101011, . . .}
dado que
(0.1 + ((() + (.0) ) + 0.1) .1)
= (0.1 + (( + ) + 0.1) .1)
= (0.1 + (0.1) .1)
P2: Escribe una expresin regular sobre el alfabeto {a, b, c} que define todas las palabras que
tengan dos as consecutivas o dos bs consecutivas.
R2: Si interpretamos como por lo menos dos as consecutivas o por lo menos dos bs consecutivas, una E.R. es: (((a + b) + c)) .(a.a + b.b).(((a + b) + c)) que se puede escribir tambin como
(a + b + c) (aa + bb)(a + b + c) (obviando de los puntos y de algunas parntesis).
P3: Construye segn procedimiento visto en clase un AFND- que acepta las mismas palabras
que define la expresin regular de P1 apartado 2.
R3: El autmata segn las reglas vistas en clase es:

Como se ve sin grandes dificultades, se puede unir los estados del mismo color en uno (eliminando as muchas de las transiciones ):

Dr. Arno Formella

12.7.

103

Hoja 7 (13 de Abril de 2010)

P1: Determina una expresin regular que define el mismo lenguaje aceptado por el autmata de
la Hoja 5, digamos M , es decir, se tiene que cumplir L() = L(M ). Documenta tu construccin
suficientemente (tienes dos lados de una hoja).
R1: Primero tenemos que construir un AFD a partir del AFND (usamos para la contruccin de
la tabla del AFD como nombres de los estados la concatenacin de cifras correspondientes y
renombramos despus convenientemente):
AFND
a
b

= ? 1 {3, 4, 6}
{2}
{2}
? 2 {3, 4, 6}
3
{4}
{3, 4, 5, 6}

{3, 4, 5, 6}
?4
5 {3, 4, 6}

{3, 4, 5, 6}

AFD

a
b
= ? 1 346
2
? 346 4 3456
? 2 346
2
? 4 3456
? 3456 346 3456

Se obtiene el grafo ya aadido el nuevo estado


final f y modificados los estados finales originales (siendo 0 el estado inicial):

AFD (renombrado)
a
b
= ? 0 1
2
4
?1 3
?2 1
2
4
?3 5
?4 1
4
5 5
5

Ya eliminado estado 5 porque no tiene arista


saliente a otro estado y aadido las aristas para
eliminar estado 3, se obtiene:

Dr. Arno Formella

104

Eliminado estado 3, unidas las aristas paralelas, y aadido las aristas para eliminar estado
2, se obtiene:

Eliminado estado 2, unidas las aristas paralelas, y aadidos las aristas para eliminar estado
4, se obtiene:

Eliminado estado 4, unidas las aristas paralelas, y aadido las aristas para eliminar estado 1, se
obtiene:

Eliminado estado 1, unidas las aristas paralelas, se obtiene la expresin regular:

bb + + (a + bb a)((ab + b)b a) (a + + (ab + b)b )

Dr. Arno Formella

12.8.

105

Hoja 8 (20 de Abril de 2010)

P1: Sea C = {a, b, c, d, e, f, g, h} un conjunto (de letras), y sea


R = {(a, d), (b, e), (c, a), (d, b), (e, c), (f, g), (g, h)} C C
una relacin sobre C.
Construye las relaciones Ri para todos los i = 0, . . . , .
Construye la relacion R .
Argumenta si R es reflexiva, simtrica, y/o transitiva.
Cul pareja (o parejas) deberamos aadir a la relacin R para que R sea simtrica (si
piensas que R no es simtrica en el apartado anterior)?
R1:
Los conjuntos Ri son:
R0
R1
R2
R3
R4
R5
R6
R7

=
=
=
=
=
=
=
=

R8
R9
R10
R11
R12

=
=
=
=
=

Rn =

{(a, a), (b, b), (c, c), (d, d), (e, e), (f, f ), (g, g), (h, h)}
{(a, d), (b, e), (c, a), (d, b), (e, c), (f, g), (g, h)}
{(a, b), (b, c), (c, d), (d, e), (e, a), (f, h)}
{(a, e), (b, a), (c, b), (d, c), (e, d)}
{(a, c), (b, d), (c, e), (d, a), (e, b)}
{(a, a), (b, b), (c, c), (d, d), (e, e)}
{(a, d), (b, e), (c, a), (d, b), (e, c)}
{(a, b), (b, c), (c, d), (d, e), (e, a)}
para n > 7
R3
R4
R5
R6
R7
es decir
R(n3) mod 5+3

(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)

Dr. Arno Formella

106

El conjunto R es (basta con unir hasta R7 ):


R = {(a, a), (a, b), (a, c), (a, d), (a, e),
(b, a), (b, b), (b, c), (b, d), (b, e),
(c, a), (c, b), (c, c), (c, d), (c, e),
(d, a), (d, b), (d, c), (d, d), (d, e),
(e, a), (e, b), (e, c), (e, d), (e, e),
(f, f ), (f, g), (f, h), (g, g), (g, h), (h, h)}

(15)

reflexiva: s, dado que R0 R


simtrica: no, dado que (f, h) R pero (h, f )
/ R
transitiva: s, por construccin.
Se aade (h, f ) y se verifica fcilmente que R es simtrica:
R = {(a, a), (a, b), (a, c), (a, d), (a, e),
(b, a), (b, b), (b, c), (b, d), (b, e),
(c, a), (c, b), (c, c), (c, d), (c, e),
(d, a), (d, b), (d, c), (d, d), (d, e),
(e, a), (e, b), (e, c), (e, d), (e, e),
(f, f ), (f, g), (f, h),
(g, f ), (g, g), (g, h),
(h, f ), (h, g), (h, h)}

(16)

Dr. Arno Formella

12.9.

107

Hoja 9 (27 de Abril de 2010)

P1: Minimiza el siguiente autmata finito determinista. El estado inicial es el estado a.

R1: Los estados i y d no son alcanzables desde el estado inicial a, se eliminan. Se observa que
el autmata restanto est completo y conexo. La tabla de minimizacin se desarrolla como sigue
con los siguientes comentarios i) los ndices indican en que paso se ha marcado la casilla, ii) en la
segunda tabla se resume el anlisis de las parejas, las parejas en negritas son aquellas que ya han
sido marcados, iii) la columna de marca indica la marca puesta para la pareja correspondiente,
iv) la columna de lista contiene las entradas pendientes cuando en algn caso no se marca nada:

a
b
?c
e
f
g
h

a b
- X1
-

?c
X0
X0
-

e
X7
X4
X0
-

f
X2
X5
X0
X8
-

g
X6
X6
X0
X9
X11
-

h
X3
X7
X0
X10
X12
-

pareja
(a, b)
(a, e)
(a, f )
(a, g)
(a, h)
(b, e)
(b, f )
(b, g)
(b, h)
(e, f )
(e, g)
(e, h)
(f, g)
(f, h)
(g, h)

0
1
(b, g) (f , c)
(b, h) (f, f )
(b, c) (f, g)
(b, g) (f, e)
(b, c) (f, g)
(g, h) (c, f )
(g, c) (c, g)
(g, g) (c, e)
(g, c) (c, g)
(h, c) (f, g)
(h, g) (f , e)
(h, c) (f, g)
(c, g) (g, e)
(c, c) (g, g)
(g, c) (e, g)

marca
X1
X7
X2
X6
X3
X4
X5
X6
X7
X8
X9
X10
X11
X12

lista

(a, g)
(a, e)
(a, g)

Dr. Arno Formella

108

Entonces la pareja (f, h) marca dos estados equivalentes y el AFD mnimo es (con estado inicial
a):

P2: Determina el Indice(RL ) del lenguaje definido por una expresin regular sobre el alfabeto
{a, b, c} que define todas las palabras que tengan por lo menos dos as consecutivas o por lo
menos dos bs consecutivas (mira hoja 6 si quieres).
R2: Para hallar dicho Indice(RL ) construimos un AFD mnimo equivalente a la expresin regular (a + b + c) (aa + bb)(a + b + c) (cual define el lenguaje). Se observa que se pueden construir
fcilmente automtas para las tres partes de la E.R. siendo 0 el estado inicial (la primera es igual
a la tercera):

(a + b + c)

aa + bb

Concatenando los tres autmatas correspondientes y uniendo ya los estados unidos por transiciones tal como visto en la hoja 6, se obtiene un AFND equivalente a la E.R.:

Un AFD equivalente obtenemos con la construccin (obviando de las llaves):

a
b
c
a
= 0 0, 1
0, 2
0
= A B
0
0, 1 0, 1, 3 0, 2
B D
0, 2 0, 1 0, 2, 3 0 y con estados renombrados
C B
? 0, 1, 3 0, 1, 3 0, 3 0, 3
?D D
? 0, 2, 3 0, 3 0, 2, 3 0, 3
?E F
0, 3 0, 3
? 0, 3 0, 3
?F F

b
C
C
E
F
E
F

c
A
A
A
F
F
F

Dr. Arno Formella

109

cuyo grafo (segn construccin conexo y todo accesible) es

la tabla de minimizacin se obtiene


A
B
C
?D
?E
?F

A B
- X1
-

pareja
(A, B)
(A, C)
(B, C)
(D, E)
(D, F )
(E, F )

C
X2
X3
-

a
(B, D)
(B, B)
(D, B)
(D, F )
(D, F )
(F, F )

?D
X0
X0
X0
-

?E
X0
X0
X0

?F
X0
X0
X0 con la siguiente anlisis de parejas

b
c
(C, C) (A, A)
(C, E) (A, A)
(C, E) (A, A)
(F, E) (F, F )
(F, F ) (F, F )
(E, F ) (F, F )

marca lista
X1
X2
X3
(D, E)
(D, E)

Se observa que los estados D, E, y F son equivalentes entre si, y el AFD mnimo es:

y concluimos que el Indice(RL ) es 4.

Dr. Arno Formella

12.10.

110

Hoja 10 (4 de Mayo de 2010)

P1: Construye una gramtica lineal por la izquierda que genera el mismo lenguaje que define la
expresin regular (a + b + c) (aa + bb)(a + b + c) . (Ayuda: puedes aprovechar de resultados de
la hoja 9).
R1: Usamos el AFD de la hoja 9 (con el estado DEF renombrado y usando un hexgono para
marcar el estado inicial):

De ah leemos directamente una gramtica lineal por la derecha:

G = (N , T , P, $)
= ({A, B, C, D}, {a, b, c}, P, A)
P = {A aB | bC | cA, B aD | a | bC | cA, C aB | bD | b | cA,
D aD | a | bD | b | cD | c}
Observamos que el smbolo inicial A aparece a la derecha de algunas producciones, por eso
aadimos un nuevo smbolo E para sustituirlo:

G = (N , T , P, $)
= ({A, B, C, D, E}, {a, b, c}, P, A)
P = {A aB | bC | cE, B aD | a | bC | cE, C aB | bD | b | cE,
D aD | a | bD | b | cD | c, E aB | bC | cE, }
Construimos a partir de la gramtica el grafo correspondiente:

Dr. Arno Formella

Invertimos el grafo:

Y leemos la gramtica lineal por la izquierda resultante:

G = ({A, B, C, D, E}, {a, b, c}, P, A)


P = {A Ba | Cb | Da | Db | Dc, B Ca | Ea | a, C Bb | Eb | b
D Ba | Cb | Da | Db | Dc, E Bc | Cc | Ec | c}

111

Dr. Arno Formella

12.11.

112

Hoja 11 (11 de Mayo de 2010)

P1: Construye una gramtica libre de contexto G que genera todas las palabras sobre el alfabeto
{a, b} que tienen el mismo nmero de as y bs, es decir,
L(G) = {, ab, ba, aabb, abab, baab, abba, baba, bbaa, aaabbb, aababb, . . .}
R1: Usamos un argumento recursivo para encontrar la gramtica. Si w = , entonces tiene cero
as y cero bs (entonces usamos la produccin $ ). Sea w una palabra con tantas as como
bs y |w| > 0. Entonces podemos subdividir w en cuatro partes: o bien en w = axby o bien en
w = bxay donde tanto x como y son palabras (ms cortas que w) que tienen tantas as como bs.
Nota que x y/o y pueden ser .
Eso nos lleva a la siguiente gramtica:

G = ({$}, {a, b}, P, $)


P = {$ a$b$ | b$a$ | }
P2: Construye una gramtica libre de contexto G que genera todas las palabras sobre el alfabeto
{a, b} que tienen un nmero diferente de as y bs (ayuda: ampla la gramtica del primer punto).
R2: Ya sabemos como generar palabras con tantas as como bs. Usamos de nuevo un argumento
recursivo.
Si el nmero debe ser diferente, entonces la palabra tendr o bien ms as o bien ms bs. Miramos
el primer caso: sea w una palabra que tiene ms as que bs. Entonces podemos subdivir w en tres
partes: w = xay donde x es una palabra con un nmero igual de as y bs y y es una palabra o
bien con un nmero igual de as y bs o bien con ms as que bs. En el segundo caso es lo mismo
con b: sea w una palabra que tiene ms bs que as. Entonces podemos subdivir w en tres partes:
w = xby donde x es una palabra con un nmero igual de as y bs y y es una palabra o bien con
un nmero igual de as y bs o bien con ms bs que as. Nota que tanto x como y son ms cortas
que w en ambos casos.
Entonces usamos tres variables: una variable I para producir palabras con un nmero igual de
as y bs (tal como en R1 con $) y una variable A para el primer caso y otra variable B para el
segundo caso, es decir, la gramtica es:

G = ({$, A, B, I}, {a, b}, P, $)


P = {$ A | B, A IaI | IaA, B IbI | IbB, I aIbI | bIaI | }

Dr. Arno Formella

12.12.

113

Hoja 12 (18 de Mayo de 2010)

P1: Construye un autmata finito de pila no-determinista (AFPND) que acepta las mismas palabras que genera la gramtica de la hoja 11, apartado 2.
R1: Construimos un AFPND que acepta en estado final. La idea principal es: usamos la pila para
contar la diferencia entre el nmero de as y bs. Para distinguir los casos de tener ms as que
bs o, al revs, ms bs que as usamos los estados.
Entonces necesitamos 4 estados que llamamos A, B, 0, y f :
Si estamos en el estado A (contando las as dems):
apilamos cada a en la pila, y
para cada b quitamos una a de la pila, si hay tal a, y
si encontramos una b sin a en la pila, apilamos la b y vamos al estado B (ya que
tenemos una b dems).
Si estamos en el estado B (contando las bs dems):
apilamos cada b en la pila, y
para cada a quitamos una b de la pila, si hay tal b, y
si encontramos una a sin b en la pila, apilamos la a y vamos al estado A (ya que
tenemos una b dems).
Usamos el estado 0 como estado inicial para realizar una transicin a A o a B dependiendo
si el primer smbolo es una a o una b.
Si estamos en A y hay una a en la pila hacemos una transicin al estado final.
Si estamos en B y hay una b en la pila hacemos una transicin al estado final.
Con estos argumentos el AFPND ser:
M = ({a, b}, {#, a, b}, {0, A, B, f }, , 0, #, {f })
(0, a, #) = (A, a#)
(0, b, #) = (B, b#)
(A, a, #) = (A, a#)
(A, a, a) = (A, aa)
(A, b, #) = (B, b#)

Dr. Arno Formella

114
(A, b, a) = (A, )
(A, , a) = (f, a)

(B, b, #)
(B, b, b)
(B, a, #)
(B, a, b)
(B, , b)

=
=
=
=
=

(B, b#)
(B, bb)
(A, a#)
(B, )
(f, b)

Hemos usado la barra vertical para separar las diferentes transciones posibles entre parejas de
estados. El hexgono marca el estado inicial.
Observa: al final, la pila contiene justamente la diferencia de smbolos, es decir, o bien las as o
bien las bs que sobran.
Este AFPND es una posibilidad, hay muchsimas ms posibilidades incluso transformaciones
algortmicas de gramtica libre de contexto a autmata de pila.

Dr. Arno Formella

12.13.

Hoja 13 (1 de Junio de 2010)

P1: Transforma la gramtica de la hoja 11, apartado 2, en forma normal de Chomsky.


Esta hoja no hay que entregar.

115

Dr. Arno Formella

12.14.

116

Hoja 14 (10 de Marzo de 2009)

P1: Construye una gramtica G que genera el lenguaje


L = {ai bj ck dl | (i = j y k = l) (i = l y j = k); i, j, k, l 0}
ejemplos de palabra que pertenecen a L:
aabbcccddd, abcd, aaabbccddd, aaaabbbb, cccddd
R1: una posible solucin

G = ({$, A, B, C, D}, {a, b, c, d},


{$  | AB | aCd | bDc,
A  | aAb, B  | cBd,
C  | aCd | bDc, D  | bDc}, $)

Dr. Arno Formella

12.15.

117

Hoja 15 (17 de Marzo de 2009)

P1: Si un autmata acepta la palabra , entonces el estado inicial es un estado final. Es verdad?
R1: Depende: para los AFD y AFND, vistos hasta ahora en clase, es verdad; si permitimos
transiciones  no lo es. Miramos los AFD y los AFND: obviamente si el estado inicial es un
estado final, tal autmata acepta , y al revs, si el estado inicial no es un estado final, entonces
no acepta , dado que (q0 , ) = q0 .
P2: Construye un autmata finito que acepta un texto (que no es nada ms que una palabra larga
sobre algn alfabeto) si en l aparece tu nombre.
R2: Asumimos un alfabeto adecuado, p.ej. los caracteres imprimibles de la tabla del cdigo
ASCII. Un AFND que acepta el nombre Arno sera:

todos los simbolos

todos los simbolos

Dr. Arno Formella

12.16.

118

Hoja 16 (24 de Marzo de 2009)

P1: Construye un autmata finito determinista (AFD) que acepta todas las palabras w sobre el
alfabeto {0, 1, 2} que son divisibles por 5 si se interpreta w como un nmero en la base 3.
R1:
2
1

1
1
0

2
0

2
1

1
0

Dr. Arno Formella

12.17.

119

Hoja 17 (31 de Marzo de 2009)

P1: Convierte el autmata del examen de TALF de Junio 2008 en su pregunta 1 en un autmata
finito determinista. Incluye en tu solucin las tablas tal como lo vimos en clase.
(Sugerencia: aprovecha de la Semana Santa para realizar ms ejercicios de antiguos exmenes.)
R1:

a b 
0 2 - 1
1 4 1 2 - 3 5
3 4,5 - 4 5 - 2
5 - 4 -

cl-
0,1
1
2,5
3
2,4,5
5

a
b
2,4 1
4
1
- 3,4
4,5 5 3,4
4

a
2,4,5
2,4,5
2,4,5
5
-

b
1
1
2,3,4,5
2,3,4,5
2,4,5

Dado que 1 (siendo estado final) est en la clausura- del estado inicial, el estado inicial tambin
se convierte en estado final.

a
0
2,4,5
5
2,4,5
1
2,4,5
5

2,3,4,5 2,4,5

b
1
2,3,4,5
1
2,4,5
2,3,4,5

Dr. Arno Formella

12.18.

120

Hoja 18 (05 de Mayo de 2009)

P1: Construye un AFD mnimo para la siguiente expresin regular: (a(ba) (a + b) + c(ab) )
que define un lenguaje sobre {a, b, c}.
Hay diferentes formas de contestar:
1. Se construye un AFND- succesivamente segn visto en la comprobacin que EE.RR.
definen lenguajes regulares. Dicho autmata grande se convierte en AFND, luego en AFD,
(luego en AFD completom sino ya est), y se minimiza.
2. Se construye un AFND- succesivamente segn visto en la comprobacin que EE.RR.
definen lenguajes regulares. Antes de la conversin a AFND, se unifica estados que obviamente son equivalentes. As el AFND- se reduce considerablemente.
3. Se observa: (ba) (a + b) (a + b) . Con eso: (a(ba) (a + b) + c(ab) ) (a(a + b) +
c(ab) ). Y luego se puede construir directamente (en este caso fcil) un AFD completo
a,b

b,c

a,c
4

del cual se notar que ya es mnimo.

a,b,c

Dr. Arno Formella

12.19.

121

Hoja 19 (12 de Mayo de 2009)

P1: Transforma la siguiente gramtica lineal por la derecha en una gramtica lineal por la izquierda:
G = ( {$, A, B, C}, {a, b, c},
{$ aA | bB, A a$ | cC | a, B bB | c, C cC | c$ | b}, $
Sustituimos primero $ a la derecha:
G = ( {$, $0 , A, B, C}, {a, b, c},
{$ aA | bB, $0 aA | bB,
A a$0 | cC | a, B bB | c, C cC | c$0 | b}, $

Generamos los grafos:


$
c

b
a

a
C

b
a
c
$

b
a

a
C

b
a
c
$

Leemos la gramtica:
G = ( {$, $0 , A, B, C}, {a, b, c},
{$ Aa | Bc | Cb, $0 Cc | Aa,
A $0 a | a, B Bb | b | $0 b, C Cc | Ac}, $

Dr. Arno Formella

12.20.

122

Hoja 20 (19 de Mayo de 2009)

P1: Transforma la siguiente gramtica libre de contexto en forma normal de Chomsky:


G = ( {$, A, B, C, D, E, F }, {a, b, c},
{$ aAb | bB | DD,
A a$ | cC | a,
B bBB | c | A,
C cC | c$ | b | DDCa,
D  | Eb,
E Eba | F a,
F AEb}
,$ )
Paso 1: Eliminar smbolos intiles: iteramos sobre el conjunto de variables para encontrar las
variables generativas. Las detectamos en el siguiente orden: A, B, C, D, $. Entonces N =
{E, F } es el conjunto de variables no-generativas que eliminamos, queda P10 :

$
A
B
C
D

aAb | bB | DD
a$ | cC | a
bBB | c | A
cC | c$ | b | DDCa


Todas las restantes variables son accesibles.


Paso 2: Sustituir las constantes para obtener P20 :

$
A
B
C
D
Wa
Wb
Wc

Wa AWb | Wb B | DD
Wa $ | Wc C | Wa
Wb BB | Wc | A
Wc C | Wc $ | Wb | DDCWa

a
b
c

Dr. Arno Formella

123

Paso 3: Confinar a longitud dos para obtener P30 :


$
$1
A
B
B1
C
C1
C2
D
Wa
Wb
Wc

Wa $1 | Wb B | DD
AWb
Wa $ | Wc C | Wa
Wb B1 | Wc | A
BB
Wc C | Wc $ | Wb | C1 C2
DD
CWa

a
b
c

Paso 4: Eliminar producciones nulas: iteramos sobre las variables para detectar aquellas que
posiblemente producen . Las detectamos en el orden reflejado en el conjunto: E = {D, $, C1 }
de las cuales D y C1 solamente generan , entonces E = {D, C1 }. Notamos que $ E, por eso
habr paso 6. Obtenemos P40 :
$
$1
A
B
B1
C
C2
Wa
Wb
Wc

Wa $1 | Wb B
AWb
Wa $ | Wc C | Wa
Wb B1 | Wc | A
BB
Wc C | Wc $ | Wb | Wc | C2
CWa
a
b
c

Paso 5: Eliminar producciones unitarias: calculamos la clausura:

U1 = {(A, Wa ), (B, Wc ), (B, A), (C, Wb ), (C, Wc ), (C, C2 )}


U2 = {(B, Wa )}
U3 = {}

Dr. Arno Formella

124

Obtenemos P50 (observa que hay que eliminar la variable C2 que ya no es accesible):

$
$1
A
B
B1
C
Wa
Wb
Wc

Wa $1 | Wb B
AWb
Wa $ | Wc C | a
Wb B1 | c | Wa $ | Wc C | a
BB
Wc C | Wc $ | b | c | CWa
a
b
c

Wa $1 | Wb B | 
Wa $1 | Wb B
AWb
Wa $0 | Wc C | a
Wb B1 | c | Wa $0 | Wc C | a
BB
Wc C | Wc $0 | b | c | CWa
a
b
c

Paso 6: Permitir que se genera :

$
$0
$1
A
B
B1
C
Wa
Wb
Wc

La gramtica final es (siendo P el sistema de producciones anterior):


G = ({$, $0 , A, B, B1 , C, Wa , Wb , Wc }, {a, b, c}, P, $)

Dr. Arno Formella

12.21.

125

Hoja 21 (26 de Mayo de 2009)

P1: Dada la siguiente gramtica en forma normal de Greibach:


G = ( {$, A, B, C, D, E}, {a, b, c, d},
{$  | aABB | aABBC | aB | aBC | cDEE | cE,
A aAB | a,
B b,
C cDEE | cE,
D cDE | c,
E d}
,$ )
1. Construye un autmata finito con pila M que acepta el lenguaje generado por G, es decir,
L(M ) = L(G).
2. Realiza un clculo del autmata que acepta la palabra aaabbbccdd y argumenta por qu el
autmata no acepta abc.
3. Qu lenguaje genera G?
1. El autmata finito con pila es:
M = ({a, b, c, d}, {$, A, B, C, D, E}, {q}, , q, $, )
: (q, , $) = {(q, )}
(q, a, $) = {(q, ABB), (q, ABBC), (q, B), (q, BC)}
(q, c, $) = {(q, DEE), (q, E))}
(q, a, A) = {(q, AB), (q, ))}
(q, b, B) = {(q, ))}
(q, c, C) = {(q, DEE), (q, E))}
(q, c, D) = {(q, DE), (q, ))}
(q, d, E) = {(q, ))}
2.
(q, aaabbbccdd, $) p
p
p
p

(q, aabbbccdd, ABBC)


(q, abbbccdd, ABBBC)
(q, bbbccdd, BBBC)
(q, bbccdd, BBC)

Dr. Arno Formella

126
p
p
p
p
p
p

(q, bccdd, BC)


(q, ccdd, C)
(q, cdd, DEE)
(q, dd, EE)
(q, d, E)
(q, , )

Observamos porque no existe clculo para abc:


La produccin $  no genera abc, obviamente.
Si generamos una vez una B, tal variable tenemos que sustituir por una b; entonces
$ aABB y $ aABBC nos producen dos bs, y $ aB como mucho ab.
Si generamos una vez una E, tal variable tenemos que sustituir por una d; entonces
las producciones $ cDEE y $ cE nos generan por lo menos una d, y
$ aBC nos genera via C por lo menos una d.
Es decir, empezamos como queramos desde $, siempre llegamos a una contradiccin.
3.
L(G) = {ai bi cj dj | i, j 0}

Dr. Arno Formella

13.

127

Bibliografa

13.1.

Bibliografa bsica

1. J.E. Hopcroft, R. Motwani, J.D. Ullman: Introduccin a la teora de autmatas, lenguajes


y computacin, Segunda edicin, AddisonWesley, 2002. (Signatura: OUR 681.34/46)
2. P. Isasi, P. Martnez, D. Borrajo. Lenguajes, Gramticas y Autmatas. Un enfoque prctico.
Addison-Wesley, ISBN 84-7829-014-1, 1997-2001. (Signatura: OUR 681.34/13)
3. M. Alfonseca, J. Sancho, M. Martnez Orga. Teora de Lenguajes, Gramticas y Autmatas. Universidad y Cultura, ISBN 84-7832-201-9, 1997. (Signatura: OUR 681.34/31)

13.2.

Bibliografa, enlaces en la red

1. http://es.wikipedia.org/wiki/Teor%C3%ADa_de_aut%C3%B3matas

13.3.

Bibliografa usada para la preparacin de las clases

1. A. Snchez Lpez. Teora de Autmatas y Lenguajes Formales. Apuntes de clase, comunicacin personal, 2004.
2. R. Fernndez Muoz. Teora de Autmatas y Lenguajes Formales. Proyecto fin de carrera,
INX-380, Biblioteca de la Universidad de Vigo, Campus Ourense, 2003.
3. G. Hotz, K. Estenfeld. Formale Sprachen. B.I. Wissenschaftsverlag, ISBN 3-411-01626,
1981.
4. Th. Schwentick. Theoretische Informatik. Vorlesungsfolien, Internet, comunicacin personal, 2004.
5. Uwe Schnfeld. Theoretische Informatik kurz gefasst. B.I. Wissenschaftsverlag, ISBN 3411-15641-4, 1992.

You might also like