Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Version 2
Dr. Arno Formella
Universidad de Vigo
Departamento de Informtica
rea de Lenguajes y Sistemas Informticos
E-32004 Ourense
http://www.ei.uvigo.es/formella
formella@ei.uvigo.es
11 de junio de 2006
ndice
1. Curso
4
5
3. Introduccin
4. Conceptos bsicos
4.1. Alfabetos . . . . . . . . . . . . . . .
4.2. Palabras . . . . . . . . . . . . . . . .
4.3. Lenguajes . . . . . . . . . . . . . . .
4.4. Producciones y Derivaciones . . . . .
4.5. Relaciones de equivalencia . . . . . .
4.6. Relacin de equivalencia de lenguajes
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8
9
9
12
14
15
17
5. Gramticas generativas
5.1. Ejemplos . . . . . . . . .
5.2. Abreviacin de Backus . .
5.3. rbol de derivacin . . . .
5.4. Jerarquia de Chomsky . . .
5.5. Equivalencia y ambigedad
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
17
18
21
22
22
23
6. Autmatas finitos
6.1. Autmatas finitos deterministas (AFD) . . . . . . . . . . . . . .
6.2. Autmatas finitos nodeterministas (AFND) . . . . . . . . . . .
6.3. Equivalencia entre AFD y AFND . . . . . . . . . . . . . . . . .
6.4. Autmatas finitos nodeterministas con transiciones (AFND)
6.5. Equivalencia entre AFND y AFND . . . . . . . . . . . . . .
6.6. Existencia de autmatas finitos mnimos . . . . . . . . . . . . .
6.7. Ejemplos de uso del teorema de Myhill y Nerode . . . . . . . .
6.8. Algoritmo de minimizacin . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
25
25
28
29
34
37
39
41
42
.
.
.
.
44
45
46
50
51
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7. Expresiones regulares
7.1. Sntaxis y semntica . . . . . . . . . . . . . . . . . . . . .
7.2. Equivalencia entre autmatas finitos y expresiones regulares
7.3. Abreviaciones para el uso de expresiones regulares . . . . .
7.4. Smbolos y metasmbolos . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8. Lenguajes regulares
51
8.1. Equivalencia entre gramticas lineales por la derecha y autmatas finitos . . . . . 51
8.2. Equivalencia entre gramticas lineales por la derecha y lineales por la izquierda . 53
60
60
62
63
76
76
77
81
83
86
89
14. Resumen
89
15. Bibliografa
90
15.1. Bibliografa bsica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
15.2. Bibliografa usada para la preparacin . . . . . . . . . . . . . . . . . . . . . . . 90
1.
Curso
Asignaturas vecinas:
Prerrequisitos:
Evaluacin:
Crditos:
Bibliografa:
2.
2.1.
3.
Introduccin
Porqu 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 ninguno
se puede aprender cualquier lenguaje (por lo menos si se ha nacido en un entorno adecuado)
A esos
D EF
H IJ
F en informatica
A
B CD
E GH G mis
I clases J favoritas
F
AB
esosB
esosCD
esos sonD
esos sonEF
esos sonGHF
esos sonHF
esos sonH
esos sonIJ
esos son clasesJ
esos 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
4.
Conceptos bsicos
4.1.
Alfabetos
1
2
3
4
5
6
=
=
=
=
=
=
{0, 1}
{a, b}
{na, pa, bra, la}
{<HTML>, </HTML>, <BODY>, </BODY>, . . .}
{|}
{a, ab, aab}
Usamos metasmbolos (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 metasmbolo.
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, || <
4.2.
Palabras
Una secuencia finita de smbolos de un alfabeto es una palabra sobre dicho alfabeto.
1
2
3
6
:
:
:
:
Escribimos la palabra vaca, es decir, la palabra que no contiene ningn smbolo, como .
Usamos normalmente letras minsculas para anotar palabras, preferiblemente desde el final del alfabeto.
El smbolo no pertenece a ningn alfabeto,
/
10
1
2
3
6
:
:
:
:
w
w
w
w
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.
|w.v| = |w| + |v|
11
v = dec
wv = abcdec 6= decabc = vw
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
12
4.3.
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
L 1 L2 = L2 L 1
(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 :
L 1 L2 = L2 L 1
(L1 L2 ) L3 = L1 (L2 L3 )
LL=L
L = = L1
L = L = L
13
L1 L 2 = L 1 L 2
L1 L 2 = L 1 L 2
Potencia:
Li = L
. . L}
| .{z
i-veces
i IN
L =
Li = L 1 L 2 L3 . . .
i=1
L =
[
i=0
Li = L0 L 1 L 2 . . .
14
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 (b) = 1 (c) =
(abcd) = 0010110
(d) = 0110
4.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 tupla 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 tuplas 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.
15
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.
4.5.
Relaciones de equivalencia
R+ =
[
n1
Rn
16
17
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.
4.6.
5.
Gramticas generativas
18
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 noterminal
P N
es decir, se sustitue solamente smbolos (palabras) noterminales
P N (N T )
es decir, se sustitue solamente smbolos (palabras) noterminales, pero por smbolos
(palabras) o bien terminales o bien noterminales
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
noterminal, 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.
5.1.
Ejemplos
19
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.
20
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 noterminales 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}
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 noterminal menos y tambin una produccin menos:
P = {
21
,
aXbc,
bX,
Y bcc,
Y b,
aaX,
aa
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
5.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,
Definimos una gramtica que genere lo que se usa en programas, por ejemplo:
((a + b) (c + d)) (e + f )
22
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
5.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.
5.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:
Tipo 0: gramticas generales sin restricciones
P .N .
es decir, se sustituye por lo menos un smbolo noterminal.
23
5.5.
Equivalencia y ambigedad
24
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 de 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 indeterminismo 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
noambigua es un problema nocomputable.)
Investigamos de nuevo las expresiones aritmticas:
sabemos que tanto la adicin como la multuplicacin 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):
E
T
F
V
E+T |T
T F |F
(E) | V
a | b | ... | z
25
6.
Autmatas finitos
Describimos autmatas finitos con unas definiciones matemticas. Nos limitamos al principio a
autmatas solamente con entrada.
6.1.
26
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.
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.
El lenguaje aceptado por un autmata finito determinista M es el conjunto de palabras aceptadas por M :
L(M ) = {w | w , M acepta w}
27
28
6.2.
Ampliamos un poco las posibilidades de las transiciones de un autmata finito, es decir, cambiamos la funcin .
Un autmata finito nodeterminista (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 y 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:
29
= q0
q1
q2
q3
q4
0
{q0 , q3 }
{q2 }
{q4 }
{q4 }
1
{q0 , q1 }
{q2 }
{q2 }
{q4 }
6.3.
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:
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.
30
i
p
q
i
P
Q
q1
xn1
xn1
qn
qn+1
q2
n
0
1
2
Q0
Q1
Q2
Qn
Qn+1 F 0
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 .
31
i
P
Q
3
x
i
p
q
xn1
xn1
n
0
1
2
Qn+1 F 0
Q0
Q1
Q2
Qn
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:
Existen AFNDs que producen un AFD de tal tamao grande?
Son necesarios tantos estados (o existe una mejor forma de realizar la conversin)?
Un ejemplo para una respuesta a la segunda:
Usamos = {a, b} como alfabeto. Definimos los siguientes lenguajes (que dependen del nmero
n IN):
32
33
|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: 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.
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:
Sea w = xn xn1 . . . x2 x1 {0, 1} .
34
6.4.
35
i1
[
j=0
Tj y (q, p)
/
i1
[
j=0
Tj }
36
T = T0 T1 T2 . . . =
Ti
i=0
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
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
37
6.5.
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
Q0 = Q
0 (q, ) =
rcl(q)
q00 = q0
F =
F
F q0
si
si
F cl(q0 ) =
F cl(q0 ) 6=
es decir, aadimos q0 como estado final, si algn estado final del AFND pertenece a la
clausura del estado inicial.
38
q0
q1
q2
a
{q0 }
{q1 }
{q2 }
{q1 }
{q2 }
cl
{q0 , q1 , q2 }
{q1 , q2 }
{q2 }
cl(q1 )
cl(q2 )
b
{q1 }
{q1 }
c
{q2 }
{q2 }
{q2 }
cl
{q0 , q1 , q2 }
{q1 , q2 }
{q2 }
q00
q10
q20
a
{q0 , q1 , q2 }
b
c
{q1 , q2 } {q2 }
{q1 , q2 } {q2 }
{q2 }
39
6.6.
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.
Sea M = (, Q, , q0 , F ) un AFD con L(M ) = L.
Definimos una relacin de equivalencia sobre M :
xRM y
si
(q0 , x) = (q0 , y)
40
(q0 , xz) F
( (q0 , x), z) F
( (q0 , y), z) F
(q0 , yz) F
yz L
<
Indice(RM )
nmero de estados acesibles desde q0
|Q|
(q0 , x) F
([], x) F
[x] F
xL
41
6.7.
= 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}
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
1
= [] [0] []
[0] [00] []
?[00] [00] []
o como diagrama:
equiafd
6.8.
42
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 nofinal.
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.
Decimos que dos estados p y q son distinguibles (o noequivalentes) 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 noequivalencia) 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 (tuplas) no marcadas se une en un slo estado.
43
a
b
c
d
e
a
-
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):
4.
a
b
c
d
e
a
-
a
b
c
d
e
a
-
b
2
-
e
1
1
1
1
-
d e
3 1
4
1
- 5 1
- - 1
- - -
44
7.
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 metalenguaje que nos permitiese describir fcilmente lenguajes (por
lo menos de cierto tipo).
45
7.1.
Sntaxis y semntica
Sea un alfabeto. Una expresin regular sobre se define con las siguientes reglas (inductivas):
1.
Con eso hemos definido una sntaxis 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() = {}
46
7.2.
47
a) =
regexprafnde1
b) =
regexprafnde2
c) = a
regexprafnde3
2.
a) =
regexprafnde4
b) = ( + )
regexprafnde5
3.
a) = ()
regexprafnde6
b) = ()
regexprafnde7
48
49
Elementos neutros:
( + )
(.)
( + )
(.)
Eliminacin:
(.) (.)
Distributividad:
.( + ) (. + .)
( + ). (. + .)
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.
XXX
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 un algoritmo determinista
que resuelve el problema necesita un tiempo que crece ms que exponencial en la longitud de la
expresin regular.
7.3.
50
51
7.4.
Smbolos y metasmbolos
= [a zA Z][a zA Z0 9\ _]
= (\.) @(\.)+ [a zA Z]{2,4}
donde unimos adicionalmente varios rangos en uno.
8.
Lenguajes regulares
8.1.
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 noterminales 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
52
= ?q0
?q1
?q2
a
q0
b
q1
q1
c
q2
q2
q2
53
?f
b
c
{A}
{B, f }
{A, f } {B, f }
{B, f }
graafd
8.2.
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 noterminal $0 , es decir, 0N = N {$0 }.
54
55
8.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
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
56
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
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.
57
58
59
<
=
|xyz| porque es w
|xy 2 z| porque es 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.
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.
60
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 .
9.
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.
9.1.
61
9.2.
62
63
9.3.
10.
Lo que ya visto:
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
64
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 no
terminal 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.
10.1.
65
66
bDD | Ca | bc
B | aCC | baD
cBD | | AC
bD | aBA
CD | a | EF
Eb
a
bDD | Ca | bc
B | aCC | baD
cBD | | AC
bD | aBA
CD | a
a
67
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 acesibles). Dicho algoritmo es
una exploracin de un grafo de dependencia parecido al algoritmo que vimos para
detectar estados no-acesibles en un autmata finito.
Se observa que solamente F es un smbolo inacesible, es decir, I = {F }, P1 entonces
es:
$
A
B
C
D
bDD | Ca | bc
B | aCC | baD
cBD | | AC
bD | aBA
CD | a
Wb DD | CWa | Wb Wc
B | Wa CC | Wb Wa D
Wc BD | | AC
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
68
Wb $1 | CWa | Wb Wc
DD
B | W a A 1 | W b 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.
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 nogenerativas.
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 .
69
Wb $1 | CWa | Wb Wc
DD
B | W a A 1 | W b A2
CC
Wa D
Wc B1 | AC | C
BD | D
Wb D | Wa C1 | Wa
BA | A | B
CD | Wa
a
b
c
[
U=
Ui
i=1
70
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.
$
$1
A
A1
A2
B
B1
C
C1
D
Wa
Wb
Wc
Wb $1 | CWa | Wb Wc
DD
B | W a A 1 | W b A2
CC
Wa D
Wc B1 | AC | C
BD | D
Wb D | Wa C1 | Wa
BA | A | B
CD | Wa
a
b
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 )}
Wb $1 | CWa | Wb Wc
DD
Wc B1 | AC | Wa A1 | Wb A2 | Wb D | Wa C1 | a
CC
Wa D
71
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.
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.
72
10.2.
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.
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
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 Y con i < j, Y 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 , $)
73
bDD | Ca | bc
B | aCC | baD
cBD | | AC
bD | aBA
CD | a | EF
Eb
a
CWa | Wb $1 | Wb Wc
DD
AC | Wc B1 | Wa A1 | Wb A2 | Wb D | Wa C1 | a
CC
Wa D
AC | Wc B1 | Wb D | Wa C1 | a
BD | CD | a
Wb D | Wa 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
74
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.
10.3.
Igual como lo hemos visto para lenguajes regulares existe una propiedad que todos los lenguajes
libres de contexto cumplen:
75
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
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.)
76
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.
11.
11.1.
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 | }
77
Si vemos una parentesis 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 nodeterminista (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);
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.
11.2.
78
=
=
=
=
=
=
=
{(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,
79
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 (nodeterminismo) dnde acaba v.
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 , , #)
afpvv
=
=
=
=
=
=
{(q0 , 0)}
{(q0 , 1)}
{(q1 , )}
{(q1 , )}
{(q1 , )}
{(q2 , )}
80
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, , ).
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 .
81
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)
11.3.
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
82
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:
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)
83
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
/ Q, es decir, son nuevos estados
q00 , q 0
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
11.4.
Para cada gramtica libre de contexto G existe un autmata finito con pila nodeterminista 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)
84
=
=
=
=
=
{(q, BBC)}
{(q, AA)}
{(q, )}
{(q, BAC), (q, )}
{(q, )}
Para cada autmata finito con pila nodeterminista 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
85
(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]
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.
86
Juntas ambas direcciones nos proporcionen la equivalencia entre las gramticas libres de
contexto y los autmatas finitos con pila nodeterministas.
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 noterminales
en sus partes derechas (es decir, tambin en la FNG los rboles de derivacin pueden ser
rboles binarios como en la FNC).
11.5.
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
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 .
87
Para AFPDs los dos criterios de parada no son equivalentes que se entiende analizando las comprobaciones donde era escencial disponer de transiciones nodeterministas 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 nodeterminismo
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.
12.
12.1.
88
12.2.
89
12.3.
13.
(por incluir)
14.
Resumen
(por incluir)
15.
90
Bibliografa
15.1.
Bibliografa bsica
15.2.
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