Fundamentos de la ciencia de la computación

download Fundamentos de la ciencia de la computación

of 178

description

Fundamentos de la Ciencia de la Computaci´n o(Lenguajes Formales, Computabilidad y Complejidad)Apuntes y EjerciciosGonzalo NavarroDepartamento de Ciencias de la Computaci´n o Universidad de Chile [email protected] 30 de octubre de 20082Licencia de uso: Esta obra est´ bajo una licencia de a Creative Commons (ver http://creativecommons.org/licenses/bync-nd/2.5/). Esencialmente, usted puede distribuir y comunicar p´blicamente la obra, siempre que (1) d´ cr´dito al autor de la obra,

Transcript of Fundamentos de la ciencia de la computación

Fundamentos de la Ciencia de la Computacin o(Lenguajes Formales, Computabilidad y Complejidad)

Apuntes y Ejercicios

Gonzalo NavarroDepartamento de Ciencias de la Computacin o Universidad de Chile [email protected] 30 de octubre de 2008

2

Licencia de uso: Esta obra est bajo una licencia de a Creative Commons (ver http://creativecommons.org/licenses/bync-nd/2.5/). Esencialmente, usted puede distribuir y comunicar pblicamente la obra, siempre que (1) d crdito al autor de la obra, u e e (2) no la use para nes comerciales, (3) no la altere, transforme, o genere una obra derivada de ella. Al reutilizar o distribuir la obra, debe dejar bien claro los trminos de la licencia de esta obra. Estas e condiciones pueden modicarse con permiso escrito del autor.

Asimismo, agradecer enviar un email al autor, e [email protected], si utiliza esta obra fuera del Departamento de Ciencias de la Computacin de la Universidad de Chile, para mis o registros. Finalmente, toda sugerencia sobre el contenido, errores, omisiones, etc. es bienvenida al mismo email.

Indice General1 Conceptos Bsicos a 1.1 Induccin Estructural . . . . . . . . o 1.2 Conjuntos, Relaciones y Funciones 1.3 Cardinalidad . . . . . . . . . . . . 1.4 Alfabetos, Cadenas y Lenguajes . . 1.5 Especicacin Finita de Lenguajes o 5 5 6 7 10 11 13 13 15 20 22 24 26 28 29 31 32 35 40 43 43 48 49 53 54 57 59 59 61

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2 Lenguajes Regulares 2.1 Expresiones Regulares (ERs) . . . . . . . . . . . . 2.2 Autmatas Finitos Determin o sticos (AFDs) . . . . 2.3 Autmatas Finitos No Determin o sticos (AFNDs) . 2.4 Conversin de ER a AFND . . . . . . . . . . . . o 2.5 Conversin de AFND a AFD . . . . . . . . . . . . o 2.6 Conversin de AFD a ER . . . . . . . . . . . . . o 2.7 Propiedades de Clausura . . . . . . . . . . . . . . 2.8 Lema de Bombeo . . . . . . . . . . . . . . . . . . 2.9 Propiedades Algor tmicas de Lenguajes Regulares 2.10 Ejercicios . . . . . . . . . . . . . . . . . . . . . . 2.11 Preguntas de Controles . . . . . . . . . . . . . . . 2.12 Proyectos . . . . . . . . . . . . . . . . . . . . . . 3 Lenguajes Libres del Contexto 3.1 Gramticas Libres del Contexto (GLCs) . . . a 3.2 Todo Lenguaje Regular es Libre del Contexto 3.3 Autmatas de Pila (AP) . . . . . . . . . . . . o 3.4 Conversin de GLC a AP . . . . . . . . . . . o 3.5 Conversin a AP a GLC . . . . . . . . . . . . o 3.6 Teorema de Bombeo . . . . . . . . . . . . . . 3.7 Propiedades de Clausura . . . . . . . . . . . . 3.8 Propiedades Algor tmicas . . . . . . . . . . . . 3.9 Determinismo y Parsing . . . . . . . . . . . . 3 . . . . . . . . . . . . . . . . . .

4

INDICE GENERAL 3.10 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.11 Preguntas de Controles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.12 Proyectos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 69 72 75 75 78 81 85 90 96 100 103 107 108 111 113 113 119 120 123 129 130 135 137 137 139 141 143 147 161 165 167 169

4 Mquinas de Turing y la Tesis de Church a 4.1 La Mquina de Turing (MT) . . . . . . . . . . a 4.2 Protocolos para Usar MTs . . . . . . . . . . . 4.3 Notacin Modular . . . . . . . . . . . . . . . . o 4.4 MTs de k Cintas y Otras Extensiones . . . . . 4.5 MTs no Determin sticas (MTNDs) . . . . . . 4.6 La Mquina Universal de Turing (MUT) . . . a 4.7 La Tesis de Church . . . . . . . . . . . . . . . 4.8 Gramticas Dependientes del Contexto (GDC) a 4.9 Ejercicios . . . . . . . . . . . . . . . . . . . . 4.10 Preguntas de Controles . . . . . . . . . . . . . 4.11 Proyectos . . . . . . . . . . . . . . . . . . . . 5 Computabilidad 5.1 El Problema de la Detencin . . . . . . . . . o 5.2 Decidir, Aceptar, Enumerar . . . . . . . . . 5.3 Demostrando Indecidibilidad por Reduccin o 5.4 Otros Problemas Indecidibles . . . . . . . . 5.5 Ejercicios . . . . . . . . . . . . . . . . . . . 5.6 Preguntas de Controles . . . . . . . . . . . . 5.7 Proyectos . . . . . . . . . . . . . . . . . . . 6 Complejidad Computacional 6.1 Tiempo de Computacin . . . . . . . o 6.2 Modelos de Computacin y Tiempos o 6.3 Las Clases P y N P . . . . . . . . . . 6.4 SAT es NP-completo . . . . . . . . . 6.5 Otros Problemas NP-Completos . . . 6.6 La Jerarqu de Complejidad . . . . . a 6.7 Ejercicios . . . . . . . . . . . . . . . 6.8 Preguntas de Controles . . . . . . . . 6.9 Proyectos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Cap tulo 1 Conceptos Bsicos a[LP81, cap 1] En este cap tulo repasaremos brevemente conceptos elementales que el lector ya debiera conocer, y luego introduciremos elementos ms relacionados con la materia. La mayor de a a las deniciones, lemas, etc. de este cap tulo no estn indexados en el Indice de Materias a al nal del apunte, pues son demasiado bsicos. Indexamos slo lo que se reere al tema a o espec co de lenguajes formales, complejidad, y computabilidad. No repasaremos el lenguaje de la lgica de predicados de primer orden, que usaremos o directamente, ni nada sobre n meros. u

1.1

Induccin Estructural o

En muchas demostraciones del curso haremos induccin sobre estructuras denidas o recursivamente. La induccin natural que se supone que el lector ya conoce, (P (0)(P (n) o P (n + 1)) n 0, P (n)), puede extenderse a estas estructuras recursivas. Esencialmente lo que se hace es aplicar induccin natural sobre alguna propiedad de la estructura (como su o tama o), de modo que pueda suponerse que la propiedad vale para todas sus subestructuras. n Veamos un ejemplo. Un rbol binario es o bien un nodo hoja o bien un nodo interno del a que cuelgan dos rboles binarios. Llamemos i(A) y h(A) a la cantidad de nodos internos y a nodos hojas, respectivamente, de un rbol binario A. Demostremos por induccin estructural a o que, para todo rbol binario A, i(A) = h(A) 1. a Caso base: Si el rbol A es un nodo hoja, entonces tiene cero nodos internos y una hoja, a y la proposicin vale pues i(A) = 0 y h(A) = 1. o Caso inductivo: Si el rbol A es un nodo interno del que cuelgan subrboles A1 y A2 , a a tenemos por hiptesis inductiva que i(A1 ) = h(A1 ) 1 y i(A2 ) = h(A2 ) 1. Ahora bien, o los nodos de A son los de A1 , los de A2 , y un nuevo nodo interno. De modo que i(A) = i(A1 ) + i(A2 ) + 1 y h(A) = h(A1 ) + h(A2 ). De aqu que i(A) = h(A1 ) 1 + h(A2 ) 1 + 1 = h(A1 ) + h(A2 ) 1 = h(A) 1 y hemos terminado. 5

6

CAP ITULO 1. CONCEPTOS BASICOS

1.2

Conjuntos, Relaciones y Funciones

Denicin 1.1 Un conjunto A es una coleccin nita o innita de objetos. Se dice que esos o o objetos pertenecen al conjunto, x A. Una condicin lgica equivalente a x A dene el o o conjunto A. Denicin 1.2 El conjunto vac denotado , es un conjunto sin elementos. o o, Denicin 1.3 Un conjunto B es subconjunto de un conjunto A, B A, si x B x o A. Si adems B = A, se puede decir B A. a Denicin 1.4 Algunas operaciones posibles sobre dos conjuntos A y B son: o 1. Unin: x A B sii x A x B. o 2. Interseccin: x A B sii x A x B. o 3. Diferencia: x A B sii x A x B. 4. Producto: (x, y) A B sii x A y B. Denicin 1.5 Una particin de un conjunto A es un conjunto de conjuntos B1 , . . . Bn tal o o que A = 1in Bi y Bi Bj = para todo i = j. Denicin 1.6 Una relacin R entre dos conjuntos A y B, es un subconjunto de A B. o o Si (a, b) R se dice tambin aRb. e Denicin 1.7 Algunas propiedades que puede tener una relacin R A A son: o o Reexividad: a A, aRa. Simetr a, b A, aRb bRa. a: Transitividad: a, b, c A, aRb bRc aRc. Antisimetr a = b A, aRb bRa. a: Denicin 1.8 Algunos tipos de relaciones, segn las propiedades que cumplen, son: o u de Equivalencia: Reexiva, simtrica y transitiva. e de Preorden: Reexiva y transitiva. de Orden: Reexiva, antisimtrica y transitiva. e

1.3. CARDINALIDAD

7

Denicin 1.9 Una relacin de equivalencia en A (o sea A A) particiona A en o o clases de equivalencia, de modo que a, a A estn en la misma clase sii a a . Al conjunto a de las clases de equivalencia, A/ , se lo llama conjunto cuociente. Denicin 1.10 Clausurar una relacin R A A es agregarle la m o o nima cantidad de elementos necesaria para que cumpla una cierta propiedad. Clausura reexiva: es la menor relacin reexiva que contiene R (menor en sentido o de que no contiene otra, vista como conjunto). Para obtenerla basta incluir todos los pares (a, a), a A, en R. Clausura transitiva: es la menor relacin transitiva que contiene R. Para obtenerla o deben incluirse todos los pares (a, c) tales que (a, b) R y (b, c) R. Deben considerarsetambin los nuevos pares que se van agregando! e

Denicin 1.11 Una funcin f : A B es una relacin en A B que cumple que a o o o A, ! b B, af b. A ese unico b se lo llama f (a). A se llama el dominio y {f (a), a A} B la imagen de f . Denicin 1.12 Una funcin f : A B es: o o inyectiva si a = a f (a) = f (a ). sobreyectiva si b B, a A, f (a) = b. biyectiva si es inyectiva y sobreyectiva.

1.3

Cardinalidad

La cardinalidad de un conjunto nito es simplemente la cantidad de elementos que tiene. Esto es ms complejo para conjuntos innitos. Deben darse nombres especiales a estas a cardinalidades, y no todas las cardinalidades innitas son iguales. Denicin 1.13 La cardinalidad de un conjunto A se escribe |A|. Si A es nito, entonces o |A| es un nmero natural igual a la cantidad de elementos que pertenecen a A. u Denicin 1.14 o Se dice que |A| |B| si existe una funcin f : A B inyectiva. o Se dice que |A| |B| si existe una funcin f : A B sobreyectiva. o Se dice que |A| = |B| si existe una funcin f : A B biyectiva. o Se dice |A| < |B| si |A| |B| y no vale |A| = |B|; similarmente con |A| > |B|.

8

CAP ITULO 1. CONCEPTOS BASICOS

Denicin 1.15 A la cardinalidad de N se la llama |N| = 0 (alef sub cero). A todo o conjunto de cardinal 0 se le dice numerable. Observacin 1.1 Un conjunto numerable A, por denicin, admite una sobreyeccin f : o o o N A, o lo que es lo mismo, es posible listar los elementos de A en orden f (0), f (1), f (2), . . . de manera que todo elemento de A se mencione alguna vez. De modo que para demostrar que A es numerable basta exhibir una forma de listar sus elementos y mostrar que todo elemento ser listado en algn momento. a u Teorema 1.1 0 es el menor cardinal innito. Ms precisamente, todo A tal que |A| 0 a cumple que |A| es nito o |A| = 0 .

Prueba: Si A es innito, entonces |A| > n para cualquier n 0. Es decir, podemos denir subconjuntos An A, |An | = n, para cada n 0, de modo que An1 An . Sea an el unico elemento de An An1 . Entonces todos los an son distintos y podemos hacer una sobreyeccin de o {a1 , a2 , . . .} en N. P

Observacin 1.2 El que A B no implica que |A| < |B| en conjuntos innitos. Por o ejemplo el conjunto de los pares es del mismo cardinal que el de los naturales, mediante la biyeccin f (n) = 2n. o Denicin 1.16 Si |A| = i , se llama i+1 = |(A)|. o Denicin 1.17 La hiptesis del continuo establece que no existe ningn conjunto cuyo o o u cardinal est entre i y i+1 , es decir, si i |A| i+1 , entonces |A| = i o |A| = i+1 . e Se ha probado que esta hiptesis no se puede probar ni refutar con los axiomas usuales de la o teor de conjuntos, sino que debe introducirse (ella o su negacin) como axioma. a o Teorema 1.2 El cardinal de (N) es estrictamente mayor que el de N, o en otras palabras, 0 < 1 . Esto puede probarse en general, i < i+1 .Prueba: Es fcil ver, mediante biyecciones, que los siguientes conjuntos tienen el mismo cardinal a que (N): 1. Las secuencias innitas de bits, haciendo la biyeccin con (N) dada por: el i-simo bit es 1 o e sii i 1 pertenece al subconjunto. 2. Las funciones f : N {0, 1}, haciendo la biyeccin con el punto 1; F (f ) = f (0)f (1)f (2) . . . o es una secuencia innita de bits que describe un vocamente a f . 3. Los nmeros reales 0 x < 1: basta escribirlos en binario de la forma 0.01101 . . ., para tener u la biyeccin con las secuencias innitas de bits. Hay algunas sutilezas debido a que 0.0011111 . . . = o0.0100000 . . ., pero pueden remediarse.

4. Los reales mismos, R, mediante alguna funcin biyectiva con [0, 1) (punto 3). Hay varias o funciones trigonomtricas, como la tangente, que sirven fcilmente a este propsito. e a o

1.3. CARDINALIDAD

9

Utilizaremos el mtodo de diagonalizacin de Kantor para demostrar que las secuencias innitas e o de bits no son numerables. Supondremos, por contradiccin, que podemos hacer una lista de todas o las secuencias de bits, B1 , B2 , B3 , . . ., donde Bi es la i-sima secuencia y Bi (j) es el j-simo bit e e de Bi . Denamos ahora la secuencia de bits X = B1 (1) B2 (2) . . ., donde 0 = 1 y 1 = 0. Como X(i) = Bi (i) = Bi (i), se deduce que X = Bi para todo Bi . Entonces X es una secuencia de bits que no aparece en la lista. Para cualquier listado, podemos generar un elemento que no aparece, por lo cual no puede existir un listado exhaustivo de todas las secuencias innitas de bits. P

Lema 1.1 Sean A y B numerables. Los siguientes conjuntos son numerables: 1. A B. 2. A B. 4.

3. Ak , donde A1 = A y Ak = A Ak1 . Ai , donde todos los Ai son numerables. 5. A+ = A1 A2 A3 . . .Prueba: Sean a1 , a2 , . . . y b1 , b2 , . . . listados que mencionan todos los elementos de A y B, respectivamente. 1. a1 , b1 , a2 , b2 , . . . lista A B y todo elemento aparece en la lista alguna vez. Si A B = esta lista puede tener repeticiones, pero eso est permitido. a

2. No podemos listar (a1 , b1 ), (a1 , b2 ), (a1 , b3 ), . . . porque por ejemplo nunca llegar amos a listar (a2 , b1 ). Debemos aplicar un recorrido sobre la matriz de ndices de modo que a toda celda (ai , bj ) le llegue su turno. Por ejemplo, por diagonales (i + j creciente): (a1 , b1 ), luego (a2 , b1 ), (a1 , b2 ), luego (a3 , b1 ), (a2 , b2 ), (a1 , b3 ), y as sucesivamente. 3. Por induccin sobre k y usando el punto 2. o 4. Sea ai (j) el j-simo elemento de lista que numera Ai . Nuevamente se trata de recorrer una e matriz para que le llegue el turno a todo ai (j), y se resuelve como el punto 2. 5. Es una unin de una cantidad numerable de conjuntos, donde cada uno de ellos es numerable o por el punto 3, de modo que se puede aplicar el punto 4. Si esto parece demasiado esotrico, e podemos expresar la solucin concretamente: listemos el elemento 1 de A1 ; luego el 2 de A1 o y el 1 de A2 ; luego el 3 de A1 , el 2 de A2 y el 1 de A3 ; etc. Est claro que a cada elemento a de cada conjunto le llegar su turno. a P

Observacin 1.3 El ultimo punto del Lema 1.1 se reere al conjunto de todas las secuencias o nitas donde los elementos pertenecen a un conjunto numerable. Si esto es numerable, est claro que las secuencias nitas de elementos de un conjunto nito tambin lo son. a e Curiosamente, las secuencias innitas no son numerables, ni siquiera sobre conjuntos nitos, como se vi para el caso de bits en el Teo. 1.2. o

10

CAP ITULO 1. CONCEPTOS BASICOS

Notablemente, a n sin haber visto casi nada de computabilidad, podemos establecer un u resultado que nos plantea un desaf para el resto del curso: o Teorema 1.3 Dado cualquier lenguaje de programacin, existen funciones de los enteros o que no se pueden calcular con ningn programa escrito en ese lenguaje. uPrueba: Incluso restringindonos a las funciones que dado un entero deben responder s o e no (por ejemplo, es n primo?), hay una cantidad no numerable de funciones f : N {0, 1}. Todos los programas que se pueden escribir en su lenguaje de programacin favorito, en cambio, son o secuencias nitas de s mbolos (ASCII, por ejemplo). Por lo tanto hay slo una cantidad numerable o de programas posibles. P

Mucho ms dif ser exhibir una funcin que no se pueda calcular, pero es interesante a cil a o que la inmensa mayor efectivamente no se puede calcular. En realidad esto es un hecho ms a absico an, por ejemplo la inmensa mayora de los nmeros reales no puede escribirse en ningn formalismo a u u u que consista de secuencias de smbolos sobre un alfabeto numerable.

1.4

Alfabetos, Cadenas y Lenguajes

En esta seccin introducimos notacin ms espec o o a ca del curso. Comezaremos por denir lo que es un alfabeto. Denicin 1.18 Llamaremos alfabeto a cualquier conjunto nito no vac Usualmente lo o o. denotaremos como . Los elementos de se llamarn s a mbolos o caracteres. Si bien normalmente usaremos alfabetos intuitivos como {0, 1}, {a, b}, {a . . . z}, {0 . . . 9}, etc., algunas veces usaremos conjuntos ms sosticados como alfabetos. a Denicin 1.19 Llamaremos cadena a una secuencia nita de s o mbolos de un alfabeto , es decir, a un elemento de = 0 1 2 . . .

donde 1 = y k = k1 . denota, entonces, el conjunto de todas las secuencias nitas de s mbolos de . El conjunto 0 es especial, tiene un slo elemento llamado , que o k corresponde a la cadena vac Si una cadena x entonces decimos que su largo es a. |x| = k (por ello || = 0). Otro conjunto que usaremos es + = {}. Observacin 1.4 Es fcil confundir entre una cadena de largo 1, x = (a), y un carcter a. o a a Normalmente nos permitiremos identicar ambas cosas.

1.5. ESPECIFICACION FINITA DE LENGUAJES

11

Denicin 1.20 Una cadena x sobre se escribir juxtaponiendo sus caracteres uno o a luego del otro, es decir (a1 , a2 , . . . , a|x| ), ai , se escribir como x = a1 a2 . . . a|x| . a La concatenacin de dos cadenas x = a1 a2 . . . an e y = b1 b2 . . . bm , se escribe o xy = a1 a2 . . . an b1 b2 . . . bm , |xy| = |x| + |y|. Finalmente usaremos xk para denotar k concatenaciones sucesivas de x, es decir x0 = y xk = xxk1 . Denicin 1.21 Dadas cadenas x, y, z, diremos que x es un prejo de xy, un sujo de yx, o y una subcadena o substring de yxz. Denicin 1.22 Un lenguaje sobre un alfabeto es cualquier subconjunto de . o Observacin 1.5 El conjunto de todas las cadenas sobre cualquier alfabeto es numerable, o | | = 0 , y por lo tanto todo lenguaje sobre un alfabeto nito (e incluso numerable) es numerable. Sin embargo, la cantidad de lenguajes distintos es no numerable, pues es |( )| = 1 . Cualquier operacin sobre conjuntos puede realizarse sobre lenguajes tambin. Denamos o e ahora algunas operaciones espec cas sobre lenguajes. Denicin 1.23 Algunas operaciones aplicables a lenguajes sobre un alfabeto son: o 1. Concatenacin: L1 L2 = {xy, x L1 , y L2 }. o 2. Potencia: L0 = {}, Lk = L Lk1 . 3. Clausura de Kleene: L =k k0 L .

4. Complemento: Lc = L.

1.5

Especicacin Finita de Lenguajes o

Si un lenguaje L es nito, se puede especicar por extensin, como L1 = {aba, bbbbb, aa}. o Si es innito, se puede especicar mediante predicados, por ejemplo L2 = {ap , p es primo}. Este mecanismo es poderoso, pero no permite tener una idea de la complejidad del lenguaje, en el sentido de cun dif es determinar si una cadena pertenece o no a L, o de enumerar a cil las cadenas de L. Con L1 esto es trivial, y con L2 perfectamente factible. Pero ahora consideremos L3 = {an , n 0, x, y, z N {0}, xn + y n = z n }. L3 est correctamente a especicado, pero aaa L3 ? Recin con la demostracin del ultimo Teorema de Fermat e o en 1995 (luego de ms de 3 siglos de esfuerzos), se puede establecer que L3 = {a, aa}. a Similarmente, se puede especicar L4 = {w, w es un teorema de la teor de n meros}, y a u responder si w L4 equivale a demostrar un teorema. El tema central de este curso se puede ver como la b squeda de descripciones nitas u para lenguajes innitos, de modo que sea posible determinar mecnicamente si una cadena a

12

CAP ITULO 1. CONCEPTOS BASICOS

est en el lenguaje. Qu inters tiene esto? No es dif identicar lenguajes con problemas a e e cil de decisin. Por ejemplo, la pregunta el grafo G es bipartito? se puede traducir a una o pregunta de tipo w L?, donde L es el conjunto de cadenas que representan los grafos bipartitos (representados como una secuencia de alguna manera, nalmente todo son secuencias de bits en el computador!), y w es la representacin de G. Determinar que ciertos lenguajes no pueden o decidirse mecnicamente equivale a determinar que ciertos problemas no pueden resolverse a por computador. El siguiente teorema, nuevamente, nos dice que la mayor de los lenguajes no puede a decidirse, en el sentido de poder decir si una cadena dada le pertenece o no. Nuevamente, es un desaf encontrar un ejemplo. o Teorema 1.4 Dado cualquier lenguaje de programacin, existen lenguajes que no pueden o decidirse con ningn programa. uPrueba: Nuevamente, la cantidad de lenguajes es no numerable y la de programas que se pueden escribir es numerable. P

En el curso veremos mecanismos progresivamente ms potentes para describir lenguajes a cada vez ms sosticados y encontraremos los l a mites de lo que puede resolverse por computador. Varias de las cosas que veremos en el camino tienen adems muchas aplicaciones a prcticas. a

Cap tulo 2 Lenguajes Regulares[LP81, sec 1.9 y cap 2] En este cap tulo estudiaremos una forma particularmente popular de representacin o nita de lenguajes. Los lenguajes regulares son interesantes por su simplicidad, la que permite manipularlos fcilmente, y a la vez porque incluyen muchos lenguajes relevantes en a la prctica. Los mecanismos de b squeda provistos por varios editores de texto (vi, emacs), a u as como por el shell de Unix y todas las herramientas asociadas para procesamiento de texto (sed, awk, perl), se basan en lenguajes regulares. Los lenguajes regulares tambin se usan e en biolog computacional para b squeda en secuencias de ADN o prote a u nas (por ejemplo patrones PROSITE). Los lenguajes regulares se pueden describir usando tres mecanismos distintos: expresiones regulares (ERs), autmatas nitos determin o sticos (AFDs) y no determin sticos (AFNDs). Algunos de los mecanismos son buenos para describir lenguajes, y otros para implementar reconocedores ecientes.

2.1

Expresiones Regulares (ERs)

[LP81, sec 1.9]

Denicin 2.1 Una expresin regular (ER) sobre un alfabeto nito se dene o o recursivamente como sigue: 1. Para todo c , c es una ER. 2. es una ER. 3. Si E1 y E2 son ERs, E1 | E2 es una ER. 4. Si E1 y E2 son ERs, E1 E2 es una ER. 5. Si E1 es una ER, E1 es una ER. 6. Si E1 es una ER, (E1 ) es una ER. 13

14

CAP ITULO 2. LENGUAJES REGULARES

Cuando se lee una expresin regular, hay que saber qu operador debe leerse primero. o e Esto se llama precedencia. Por ejemplo, la expresin a | b c , debe entenderse como (1) o la aplicada al resto? (2) la | aplicada al resto? (3) la aplicada al resto? La respuesta es que, primero que nada se aplican los , segundo los , y nalmente los |. Esto se expresa diciendo que el orden de precedencia es , , |. Los parntesis sirven para e alterar la precedencia. Por ejemplo, la expresin anterior, dado el orden de precedencia que o establecimos, es equivalente a a | (b (c )). Se puede forzar otro orden de lectura de la ER cambiando los parntesis, por ejemplo (a | b) c . e Asimismo, debe aclararse cmo se lee algo como a|b|c, es decir cul de los dos | se o a lee primero? Convengamos que en ambos operadores binarios se lee primero el de ms a la a izquierda (se dice que el operador asocia a la izquierda), pero realmente no es importante, por razones que veremos enseguida. Observar que a n no hemos dicho qu signica una ER, slo hemos dado su sintaxis pero u e o no su semntica. De esto nos encargamos a continuacin. a o Denicin 2.2 El lenguaje descrito por una ER E, L(E), se dene recursivamente como o sigue: 1. Si c , L(c) = {c}. Esto es un conjunto de una sola cadena de una sola letra. 2. L() = . 3. L(E1 | E2 ) = L(E1 ) L(E2 ). 4. L(E1 E2 ) = L(E1 ) L(E2 ). 5. L(E1 ) = L(E1 ) .

Notar que L(abcd) = {abcd}, por lo cual es com n ignorar el s u mbolo y simplemente yuxtaponer los s mbolos uno despus del otro. Notar tambin que, dado que | y se e e mapean a operadores asociativos, no es relevante si asocian a izquierda o a derecha. Observacin 2.1 Por denicin de clausura de Kleene, L() = {}. Por ello, a pesar de o o no estar formalmente en la denicin, permitiremos escribir como una expresin regular. o o Denicin 2.3 Un lenguaje L es regular si existe una ER E tal que L = L(E). o Ejemplo 2.1 Cmo se podr escribir una ER para las cadenas de as y bs que contuvieran una o acantidad impar de bs? Una solucin es a (ba ba) ba, donde lo ms importante es la clausura o a de Kleene mayor, que encierra secuencias donde nos aseguramos que las bs vienen de a pares, separadas por cuantas as se quieran. La primera clausura (a) permite que la secuencia empiece con as y la ultima agrega la b que hace que el total sea impar y adems permite que haya as al a nal. Es un buen ejercicio jugar con otras soluciones y comentarlas, por ejemplo (a ba ba) ba. Es fcil ver cmo generalizar este ejemplo para que la cantidad de bs mdulo k sea r. a o o

2.2. AUTOMATAS FINITOS DETERMIN ISTICOS (AFDS)

15

Algo importante en el Ej. 2.1 es cmo asegurarnos de que la ER realmente representa o el lenguaje L que creemos. La tcnica para esto tiene dos partes: (i) ver que toda cadena e generada est en L; (ii) ver que toda cadena de L se puede generar con la ER. En el Ej. 2.1 eso a podr hacerse de la siguiente manera: Para (i) basta ver que la clausura de Kleene introduce a las bs de a dos, de modo que toda cadena generada por la ER tendr una cantidad impar a de bs. Para (ii), se debe tomar una cadena cualquiera x con una cantidad impar de bs y ver que la ER puede generarla. Esto no es dif si consideramos las subcadenas de x que cil van desde una b impar (1era, 3era, ...) hasta la siguiente, y mostramos que cada una de esas subcadenas se pueden generar con ba ba. El resto es sencillo. Un ejemplo un poco ms a complicado es el siguiente. Ejemplo 2.2 Cmo se podr escribir una ER para las cadenas de as y bs que nunca contuvieran o atres bs seguidas? Una solucin parece ser (a | ba | bba), pero est correcta? Si se analiza o a rigurosamente, se notar que esta ER no permite que las cadenas terminen con b, por lo cual a deberemos corregirla a (a | ba | bba) ( | b | bb). las cadenas que se pueden descomponer en secuencias ab o aba. Describir con palabras el lenguaje denotado por una ER es un arte. En el Ej. 2.1, que empieza con una bonita descripcin concisa, o uno podr caer en una descripcin larga y mecnica de lo que signica la ER, como primero a o a viene una secuencia de as; despus, varias veces, viene una b y una secuencia de as, dos veces; e despus.... En general una descripcin ms concisa es mejor. e o a

Ejemplo 2.3 Cmo se describir el lenguaje denotado por la expresin regular (ab | aba)? Son o a o

Ejemplo 2.4 Se podr escribir una ER que denotara los nmeros decimales que son mltiplos a u ude 7? (es decir 7, 14, 21, ...) S pero intentarlo directamente es una empresa temeraria. Veremos , ms adelante cmo lograrlo. a o

Observacin 2.2 Deber ser evidente que no todos los lenguajes que se me ocurran pueden o a ser descritos con ERs, pues la cantidad de lenguajes distintos sobre un alfabeto nito es no numerable, mientras que la cantidad de ERs es numerable. Otra cosa es encontrar lenguajes concretos no expresables con ERs y poder demostrar que no lo son. Ejemplo 2.5 Se podr escribir una ER que denotara las cadenas de as cuyo largo es un nmero a uprimo? No, no se puede. Veremos ms adelante cmo demostrar que no se puede. a o

Ejemplo 2.6 Algunas aplicaciones prcticas donde se usan ERs es en la especicacin de fechas, a o direcciones IP, tags XML, nombres de variables en Java, nmeros en notacin otante, direcciones u o de email, etc. Son ejercicios interesantes, aunque algunos son algo tediosos.

2.2

Autmatas Finitos Determin o sticos (AFDs)

[LP81, sec 2.1] Un AFD es otro mecanismo para describir lenguajes. En vez de pensar en generar las cadenas (como las ERs), un AFD describe un lenguaje mediante reconocer las cadenas del lenguaje, y ninguna otra. El siguiente ejemplo ilustra un AFD.

16

CAP ITULO 2. LENGUAJES REGULARES

Ejemplo 2.7 El AFD que reconoce el mismo lenguaje del Ej. 2.1 se puede gracar de la siguienteforma.a b 0 b 1 a

El AFD que hemos dibujado se interpreta de la siguiente manera. Los nodos del grafo son estados. El apuntado con un ngulo es el estado inicial, en el que empieza la computacin. a o Estando en un estado, el AFD lee una letra de la entrada y, segn indique la echa (llamada u transicin), pasa a otro estado (siempre debe haber exactamente una echa saliendo de cada o estado por cada letra). Cuando se lee toda la cadena, el AFD la acepta o no seg n el estado u al que haya llegado sea nal o no. Los estados nales se dibujan con doble c rculo. En este AFD pasa algo que, ms o menos expl a citamente, siempre ocurre. Cada estado se puede asociar a un invariante, es decir, una armacin sobre la cadena le hasta ese o da momento. En nuestro caso el estado inicial corresponde al invariante se ha visto una cantidad par de bs hasta ahora, mientras que el estado nal corresponde a se ha visto una cantidad impar de bs hasta ahora. El siguiente ejemplo muestra la utilidad de esta visin. La correctitud de un AFD con o respecto a un cierto lenguaje L que se pretende representar se puede demostrar a partir de establecer los invariantes, ver que los estados nales, unidos (pues puede haber ms de uno), a describen L, y que las echas pasan correctamente de un invariante a otro. Ejemplo 2.8 El AFD que reconoce el mismo lenguaje del Ej. 2.2 se puede gracar de la siguiente forma. Es un buen ejercicio describir el invariante que le corresponde a cada estado. Se ve adems a que puede haber varios estados nales. El estado 3 se llama sumidero, porque una vez ca en l, do e el AFD no puede salir y no puede aceptar la cadena.a a 0 b 1 b b 3 a 2

a,b

Es hora de denir formalmente lo que es un AFD.

2.2. AUTOMATAS FINITOS DETERMIN ISTICOS (AFDS)

17

Denicin 2.4 Un autmata nito determin o o stico (AFD) es una tupla M = (K, , , s, F ), tal que K es un conjunto nito de estados. es un alfabeto nito. s K es el estado inicial. F K son los estados nales. : K K es la funcin de transicin. o o Ejemplo 2.9 El AFD del Ej. 2.7 se describe formalmente como M = (K, , , s, F ), donde K ={0, 1}, = {a, b}, s = 0, F = {1}, y la funcin como sigue: o a b 0 0 1 1 1 0

No hemos descrito a n formalmente cmo funciona un AFD. Para ello necesitamos la u o nocin de conguracin, que contiene la informacin necesaria para completar el cmputo o o o o de un AFD. Denicin 2.5 Una conguracin de un AFD M = (K, , , s, F ) es un elemento de CM = o o K . La idea es que la conguracin (q, x) indica que M est en el estado q y le falta leer la o a cadena x de la entrada. Esta es informacin suciente para predecir lo que ocurrir en el o a futuro. Lo siguiente es describir cmo el AFD nos lleva de una conguracin a la siguiente. o o Denicin 2.6 La relacin lleva en un paso, M CM CM se dene de la siguiente manera: o o (q, ax) M (q , x), donde a , sii (q, a) = q . Escribiremos simplemente en vez de M cuando quede claro de qu M estamos e hablando. Denicin 2.7 La relacin lleva en cero o ms pasos es la clausura reexiva y transitiva o o a M de M . Ya estamos en condiciones de denir el lenguaje aceptado por un AFD. La idea es que si el AFD es llevado del estado inicial a uno nal por la cadena x, entonces la reconoce.

18

CAP ITULO 2. LENGUAJES REGULARES

Denicin 2.8 El lenguaje aceptado por un AFD M = (K, , , s, F ) se dene como o L(M) = {x , f F, (s, x) (f, )}. M

Ejemplo 2.10 Tomemos el AFD del Ej. 2.8, el que se describe formalmente como M =(K, , , s, F ), donde K = {0, 1, 2, 3}, = {a, b}, s = 0, F = {0, 1, 2}, y la funcin como o sigue:

a b

0 0 1

1 0 2

2 0 3

3 3 3

Ahora consideremos la cadena de entrada x = abbababb y escribamos las conguraciones por las que pasa M al recibir x como entrada:

(0, babb) (1, abb) (0, bb) (1, b) (2, ). Por lo tanto (s, x) (2, ), y como 2 F , tenemos que x L(M ).

(0, abbababb) (0, bbababb) (1, bababb) (2, ababb)

Vamos al desaf del Ej. 2.4, el cual resolveremos con un AFD. La visin de invariantes o o es especialmente util en este caso.

Ejemplo 2.11 El AFD que reconoce el mismo lenguaje del Ej. 2.4 se puede gracar de la siguienteforma. Para no enredar el grco de ms, slo se incluyen las echas que salen de los estados 0, 1 a a o y 2.

2.2. AUTOMATAS FINITOS DETERMIN ISTICOS (AFDS)5 3

19

6

14 0,7 1,8 2,9 3

2,9 0,7 1,8 0,7

24 6 5

1,8 2,9

33 4 5 6

0

4 6 5El razonamiento es el siguiente. Cada estado representa el resto del nmero le hasta ahora, u do mdulo 7. El estado inicial (y nal) representa el cero. Si estoy en el estado 2 y viene un 4, o signica que el nmero que le hasta ahora era n 2 (mod 7) y ahora el nuevo nmero le es u u do 10 n + 4 10 2 + 4 24 3 (mod 7). Por ello se pasa al estado 3. El lector puede completar las echas que faltan en el diagrama.

Hemos resuelto usando AFDs un problema que es bastante ms complicado usando a ERs. El siguiente ejemplo ilustra el caso contrario: el Ej. 2.3, sumamente fcil con ERs, a es relativamente complejo con AFDs, y de hecho no es fcil convencerse de su correctitud. a El principal problema es, cuando se ha le ab, determinar si una a que sigue inicia una do nueva cadena (pues hemos le la cadena ab) o es el ultimo carcter de aba. do a Ejemplo 2.12 El lenguaje descrito en el Ej. 2.3 se puede reconocer con el siguiente AFD.

a 0 a b 1 a b b 2 a b 3

4

a,b

20

CAP ITULO 2. LENGUAJES REGULARES

2.3

Autmatas Finitos No Determin o sticos (AFNDs)

[LP81, sec 2.2] Dado el estado actual y el siguiente carcter, el AFD pasa exactamente a un siguiente a estado. Por eso se lo llama determin stico. Una versin en principio ms potente es un o a AFND, donde frente a un estado actual y un siguiente carcter, es posible tener cero, uno o a ms estados siguientes. a Hay dos formas posibles de entender cmo funciona un AFND. La primera es pensar o que, cuando hay varias alternativas, el AFND elige alguna de ellas. Si existe una forma de elegir el siguiente estado que me lleve nalmente a aceptar la cadena, entonces el AFND la aceptar. La segunda forma es imaginarse que el AFND est en varios estados a la vez (en a a todos en los que puede estar de acuerdo a la primera visin). Si luego de leer la cadena o puede estar en un estado nal, acepta la cadena. En cualquier caso, es bueno por un rato no pensar en cmo implementar un AFND. o Una libertad adicional que permitiremos en los AFNDs es la de rotular las transiciones con cadenas, no slo con caracteres. Tal transicin se puede seguir cuando los caracteres de o o la entrada calzan con la cadena que rotula la transicin, consumiendo los caracteres de la o entrada. Un caso particularmente relevante es el de las llamadas transiciones-, rotuladas por la cadena vac Una transicin- de un estado p a uno q permite activar q siempre que a. o se active p, sin necesidad de leer ning n carcter de la entrada. u a Ejemplo 2.13 Segn la descripcin, es muy fcil denir un AFND que acepte el lenguaje del u o aEj. 2.3. Se presentan varias alternativas, donde en la (2) y la (3) se hace uso de cadenas rotulando transiciones.

a b

1

(1)

0 a 2 a

a

b

3

ab

(3)b 2

0

(2)

0

a

1

aba

El Ej. 2.13 ilustra en el AFND (3) un punto interesante. Este AFND tiene slo un estado o y ste es nal. Cmo puede no aceptar una cadena? Supongamos que recibe como entrada e o

2.3. AUTOMATAS FINITOS NO DETERMIN ISTICOS (AFNDS)

21

bb. Parte del estado inicial (y nal), y no tiene transiciones para moverse. Queda, pues, en ese estado. Acepta la cadena? No, pues no ha logrado consumirla. Un AFND acepta una cadena cuando tiene una forma de consumirla y llegar a un estado nal. Es hora de formalizar. Denicin 2.9 Un autmata nito no determin o o stico (AFND) es una tupla M (K, , , s, F ), tal que K es un conjunto nito de estados. es un alfabeto nito. s K es el estado inicial. F K son los estados nales. F K K es la relacin de transicin, nita. o o Ejemplo 2.14 El AFND (2) del Ej. 2.13 se describe formalmente como M = (K, , , s, F ), donde K = {0, 1, 2}, = {a, b}, s = 0, F = {0}, y la relacin = o {(0, a, 1), (1, b, 2), (2, a, 0), (2, , 0)}. Para describir la semntica de un AFND reutilizaremos la nocin de conguracin a o o (Def. 2.5). Redeniremos la relacin M para el caso de AFNDs. o Denicin 2.10 La relacin lleva en un paso, M CM CM , donde M = (K, , , s, F ) o o es un AFND, se dene de la siguiente manera: (q, zx) M (q , x), donde z , sii (q, z, q ) . Ntese que ahora, a partir de una cierta conguracin, la relacin M nos puede llevar o o o a varias conguraciones distintas, o incluso a ninguna. La clausura reexiva y transitiva de M se llama, nuevamente, lleva en cero o ms pasos, . Finalmente, denimos casi a M idnticamente al caso de AFDs el lenguaje aceptado por un AFND. e Denicin 2.11 El lenguaje aceptado por un AFND M = (K, , , s, F ) se dene como o L(M) = {x , f F, (s, x) (f, )}. M =

A diferencia del caso de AFDs, dada una cadena x, es posible llegar a varios estados distintos (o a ninguno) luego de haberla consumido. La cadena se declara aceptada si alguno de los estados a los que se llega es nal.

22

CAP ITULO 2. LENGUAJES REGULARES

Ejemplo 2.15 Consideremos la cadena de entrada x = ababaababa y escribamos lasconguraciones por las que pasa el AFND (3) del Ej. 2.13 al recibir x como entrada. En un primer intento: (0, ababaababa) (0, abaababa) (0, aababa) no logramos consumir la cadena (por haber tomado las transiciones incorrectas). Pero si elegimos otras transiciones: (0, ababaababa) (0, abaababa) (0, ababa) (0, ba) (0, ). Por lo tanto (s, x) (0, ), y como 0 F , tenemos que x L(M ). Esto es vlido a pesar de a que existe otro camino por el que (s, x) (0, aababa), de donde no es posible seguir avanzando.

Terminaremos con una nota acerca de cmo simular un AFND. En las siguientes secciones o veremos que de hecho los AFNDs pueden convertirse a AFDs, donde es evidente cmo o simularlos ecientemente. Observacin 2.3 Un AFND con n estados y m transiciones puede simularse en un o computador en tiempo O(n + m) por cada s mbolo de la cadena de entrada. Es un buen ejercicio pensar cmo (tiene que ver con recorrido de grafos, especialmente por las o transiciones-).

2.4

Conversin de ER a AFND o

[LP81, sec 2.5]

Como adelantamos, ERs, AFDs y AFNDs son mecanismos equivalentes para denotar los lenguajes regulares. En estas tres secciones demostraremos esto mediante convertir ER AFND AFD ER. Las dos primeras conversiones son muy relevantes en la prctica, a pues permiten construir vericadores o buscadores ecientes a partir de ERs. Hay distintas formas de convertir una ER E a un AFND M, de modo que L(E) = L(M). Veremos el mtodo de Thompson, que es de los ms sencillos. e a Denicin 2.12 La funcin T h convierte ERs en AFNDs segn las siguientes reglas. o o u 1. Para c , T h(c) =c

2. T h() =

S el grafo puede no ser conexo! ,

2.4. CONVERSION DE ER A AFND 3. T h(E1 | E2 ) =

23

Th(E1 )

Th(E2 )4. T h(E1 E2 ) =Th(E1 ) Th(E2 )

5. T h(E1 ) =

Th(E1 )

6. T h((E1 )) = T h(E1 ). Observacin 2.4 Es fcil, y un buen ejercicio, demostrar varias propiedades de T h(E) por o a induccin estructural: (i) T h(E) tiene un slo estado nal, distinto del inicial; (ii) T h(E) o o tiene a lo sumo 2e estados y 4e aristas, donde e es el nmero de caracteres en E; (iii) La u cantidad de transiciones que llegan y salen de cualquier nodo en T h(E) no supera 2 en cada caso; (iv) al estado inicial de T h(E) no llegan transiciones, y del nal no salen transiciones.

Por simplicidad nos hemos conformado con denir T h usando dibujos esquemticos. a Realmente T h debe denirse formalmente, lo cual el lector puede hacer como ejercicio. Por ejemplo, si T h(E1 ) = (K1 , , 1 , s1 , {f1 }) y T h(E2 ) = (K2 , , 2 , s2 , {f2 }), entonces T h(E1 | E2 ) = (K1 K2 {s, f }, , 1 2 {(s, , s1 ), (s, , s2), (f1 , , f ), (f2, , f )}, s, {f }). El siguiente teorema indica que T h convierte correctamente ERs en AFNDs, de modo que el AFND reconoce las mismas cadenas que la ER genera. Teorema 2.1 Sea E una ER, entonces L(T h(E)) = L(E).

24

CAP ITULO 2. LENGUAJES REGULARES

Prueba: Es fcil vericarlo por inspeccin y aplicando induccin estructural. La unica parte que a o o puede causar problemas es la clausura de Kleene, donde otros esquemas alternativos que podr an sugerirse (por ejemplo M = (K1 , , 1 {(f1 , , s1 ), (s1 , , f1 )}, s1 , {f1 }) tienen el problema de permitir terminar un recorrido de T h(E1 ) antes de tiempo. Por ejemplo el ejemplo que acabamos de dar, aplicado sobre E1 = a b, reconocer la cadena x = aa. a P

Ejemplo 2.16 Si aplicamos el mtodo de Thompson para convertir la ER del Ej. 2.3 a AFND, eel resultado es distinto de las tres variantes dadas en el Ej. 2.13. a b

1 0 5

2

3

4

9

a

6

b

7

a

8

10

2.5

Conversin de AFND a AFD o

[LP81, sec 2.3]

Si bien los AFNDs tienen en principio ms exibilidad que los AFDs, es posible construir a siempre un AFD equivalente a un AFND dado. La razn fundamental, y la idea de la o conversin, es que el conjunto de estados del AFND que pueden estar activos despus de o e haber le una cadena x es una funcin unicamente de x. Por ello, puede dise arse un AFD do o n basado en los conjuntos de estados del AFND. Lo primero que necesitamos es describir, a partir de un estado q del AFND, a qu estados e q podemos llegar sin consumir caracteres de la entrada. Denicin 2.13 Dado un AFND M = (K, , , s, F ), la clausura- de un estado q K se o dene como E(q) = {q K, (q, ) (q , )}. M Ya estamos en condiciones de denir la conversin de un AFND a un AFD. Para ello o supondremos que las transiciones del AFND estn rotuladas o bien por o bien por una sla a o letra. Es muy fcil adaptar cualquier AFND para que cumpla esto. a Denicin 2.14 Dado un AFND M = (K, , , s, F ) que cumple (q, x, q ) |x| 1, o se dene un AFD det(M) = (K , , , s , F ) de la siguiente manera:

2.5. CONVERSION DE AFND A AFD 1. K = (K). Es decir los subconjuntos de K, o conjuntos de estados de M . 2. s = E(s). Es decir la clausura- del estado inicial de M .

25

3. F = K (K F ). Es decir todos los conjuntos de estados de M que contengan algn estado u de F . 4. Para todo Q K (o sea Q K) y c , (Q, c) =qQ,(q,c,q )

E(q ).

Esta ultima ecuacin es la que preserva la semntica que buscamos para el AFD. o a

Ejemplo 2.17 Si calculamos det sobre el AFND del Ej. 2.16 obtenemos el siguiente resultado.Observar que se trata del mismo AFD que presentamos en el Ej. 2.12. Lo que era un desaf hacer o directamente, ahora lo podemos hacer mecnicamente mediante convertir ER AFND AFD. aa0,1,2,5,10

a b

3,6

b b

4,7,9,1,2,5,10

a b

8,3,6,9,1,2,5,10

a

a,b

En el Ej. 2.17 slo hemos gracado algunos de los estados de K , ms precisamente o a aquellos alcanzables desde el estado inicial. Los dems son irrelevantes. La forma de a determinizar un AFND en la prctica es calcular s = E(s), luego calcular (s , c) para a cada c , y recursivamente calcular las transiciones que salen de estos nuevos estados, hasta que todos los estados nuevos producidos sean ya conocidos. De este modo se calculan solamente los estados necesarios de K . Observacin 2.5 No hay garant de que el mtodo visto genere el menor AFD que reconoce o a e el mismo lenguaje que el AFND. Existen, sin embargo, tcnicas para minimizar AFDs, que e no veremos aqu . El siguiente teorema establece la equivalencia entre un AFND y el AFD que se obtiene con la tcnica expuesta. e

26

CAP ITULO 2. LENGUAJES REGULARES

Prueba: Demostraremos que toda cadena reconocida por el AFD M = det(M ) tambin es e reconocida por el AFND M , y viceversa. En cada caso, se procede por induccin sobre la longitud o de la cadena. Lo que se demuestra es algo un poco ms fuerte, para que la induccin funcione: (i) a o = E(s) a alg n Q tal que q Q en el AFD; si x lleva de s a q en el AFND, entonces lleva de s u (ii) si x lleva de E(s) a Q en el AFD, entonces lleva de s a cualquier q Q en el AFND. De esto se deduce inmediatamente que x L(M ) x L(M ). Primero demostremos (i) y (ii) para el caso base x = . Es fcil ver que (, s) (, q) sii a M stico. Se deducen q E(s). Por otro lado (, E(s)) (, Q) sii Q = E(s) pues M es determin M (i) y (ii) inmediatamente. Veamos ahora el caso inductivo x = ya, a , para (i). Si (s, ya) (q, ), como M consume M las letras de a una, existe un camino de la forma (s, ya) (q , a) M (q , ) (q, ). M M Notar que esto implica que (q , a, q ) y q E(q ). Por hiptesis inductiva, adems, tenemos o a u (E(s), ya) (Q , a) para algn Q que contiene q . Ahora bien, (Q , a) M (Q, ), donde M Q = (Q , a) incluye, por la Def. 2.14, a E(q ), pues q Q y (q , a, q ) . Finalmente, como q E(q ), tenemos q Q y terminamos. Veamos ahora el caso inductivo x = ya, a , para (ii). Si (E(s), ya) (Q, ) M debemos tener un camino de la forma (E(s), ya) (Q , a) M (Q, ), donde Q = (Q , a). M Por hiptesis inductiva, esto implica (s, ya) o (q , a) para todo q Q . Asimismo, M , a) , ) , a, q ) , y q E(q ). De la Def. 2.14 se deduce (q M (q M (q, ), para todo (q que cualquier q Q pertenece a algn E(q ) donde (q , a, q ) y q Q . Hemos visto que M u puede llevar a cualquiera de esos estados. P

Teorema 2.2 Sea M un AFND, entonces L(det(M)) = L(M).

La siguiente observacin indica cmo buscar las ocurrencias de una ER en un texto. o o Observacin 2.6 Supongamos que queremos buscar las ocurrencias en un texto T de una o ER E. Si calculamos det(T h( E)), obtenemos un AFD que reconoce cadenas terminadas en E. Si alimentamos este AFD con el texto T , llegar al estado nal en todas las posiciones a de T que terminan una ocurrencia de una cadena de E. El algoritmo resultante es muy eciente en trminos del largo de T , si bien la conversin de AFND a AFD puede tomar e o tiempo exponencial en el largo de E.

2.6

Conversin de AFD a ER o

[LP81, sec 2.5]

Finalmente, cerraremos el tringulo mostrando que los AFDs se pueden convertir a ERs a que generen el mismo lenguaje. Esta conversin tiene poco inters prctico, pero es esencial o e a para mostrar que los tres mecanismos de especicar lenguajes son equivalentes. La idea es numerar los estados de K de cero en adelante, y denir ERs de la forma R(i, j, k), que denotarn las cadenas que llevan al AFD del estado i al estado j utilizando en el a camino solamente estados numerados < k. Notar que los caminos pueden ser arbitrariamente largos, pues la limitacin est dada por los estados intermedios que se pueden usar. Asimismo o a la limitacin no vale (obviamente) para los extremos i y j. o

2.6. CONVERSION DE AFD A ER

27

Denicin 2.15 Dado un AFD M = (K, , , s, F ) con K = {0, 1, . . . , n 1} denimos o expresiones regulares R(i, j, k) para todo 0 i, j < n, 0 k n, inductivamente sobre k como sigue. 1. R(i, j, 0) = | c1 | c2 | . . . | cl si {c1 , c2 , . . . , cl } = {c , (i, c) = j} e i = j | c1 | c2 | . . . | cl si {c1 , c2 , . . . , cl } = {c , (i, c) = j} e i = j

2. R(i, j, k + 1) = R(i, j, k) | R(i, k, k) R(k, k, k) R(k, j, k). Notar que el se usa para el caso en que l = 0. En el siguiente lema establecemos que la denicin de las R hace lo que esperamos de o ellas. Lema 2.1 R(i, j, k) es el conjunto de cadenas que reconoce M al pasar del estado i al estado j usando como nodos intermedios solamente nodos numerados < k.Prueba: Para el caso base, la unica forma de ir de i a j es mediante transiciones directas entre los nodos, pues no est permitido usar ningn nodo intermedio. Por lo tanto slamente podemos a u o reconocer cadenas de un carcter. Si i = j entonces tambin la cadena vac nos lleva de i a i. Para a e a el caso inductivo, tenemos que ir de i a j pasando por nodos numerados hasta k. Una posibilidad es slo usar nodos < k en el camino, y las cadenas resultantes son R(i, j, k). La otra es usar el o nodo k una ms veces. Entre dos pasadas consecutivas por el nodo k, no se pasa por el nodo o a k. De modo que partimos el camino entre: lo que se reconoce antes de llegar a k por primera vez (R(i, k, k)), lo que se reconoce al ir (dando cero ms vueltas) de k a k (R(k, k, k)), y lo que se o a reconoce al partir de k por ultima vez y llegar a j (R(k, j, k)). P

Del Lema 2.1 es bastante evidente lo apropiado de la siguiente denicin. Indica que el o lenguaje reconocido por el AFD es la unin de las R desde el estado inicial hasta los distintos o estados nales, usando cualquier nodo posible en el camino intermedio. Denicin 2.16 Sea M = (K, , , s, F ) con K = {0, 1, . . . , n 1} un AFD, y F = o {f1 , f2 , . . . , fm }. Entonces denimos la ER er(M) = R(s, f1 , n) | R(s, f2 , n) | . . . | R(s, fm , n).

De lo anterior se deduce que es posible generar una ER para cualquier AFD, manteniendo el mismo lenguaje. Teorema 2.3 Sea M un AFD, entonces L(er(M)) = L(M).

Prueba: Es evidente a partir del Lema 2.1 y del hecho de que las cadenas que acepta un AFD son aquellas que lo llevan del estado inicial a algn estado nal, pasando por cualquier estado u intermedio. P

28

CAP ITULO 2. LENGUAJES REGULARES

Ejemplo 2.18 Consideremos el AFD del Ej. 2.7 y generemos er(M ).er(M ) = R(0, 1, 2) R(0, 1, 2) = R(0, 1, 1) | R(0, 1, 1) R(1, 1, 1) R(1, 1, 1) R(0, 1, 1) = R(0, 1, 0) | R(0, 0, 0) R(0, 0, 0) R(0, 1, 0) R(0, 1, 0) = b

R(1, 1, 1) = R(1, 1, 0) | R(1, 0, 0) R(0, 0, 0) R(0, 1, 0) R(0, 0, 0) = a |

R(1, 0, 0) = b

R(1, 1, 0) = a |

R(1, 1, 1) = a | | b (a | ) b R(0, 1, 1) = b | (a | ) (a | ) b = a b R(0, 1, 2) = a b | a b (a | | ba b) (a | | ba b) er(M ) = a b (a | ba b) Notar que nos hemos permitido algunas simplicaciones en las ERs antes de utilizarlas para Rs superiores. El resultado no es el mismo que el que obtuvimos a mano en el Ej. 2.1, y de hecho toma algo de tiempo convencerse de que es correcto. = a | | b a b

Como puede verse, no es necesario en la prctica calcular todas las R(i, j, k), sino que a basta partir de las que solicita er(M) e ir produciendo recursivamente las que se van necesitando. Por ultimo, habiendo cerrado el tringulo, podemos establecer el siguiente teorema a fundamental de los lenguajes regulares. Teorema 2.4 Todo lenguaje regular puede ser especicado con una ER, o bien con un AFND, o bien con un AFD.Prueba: Inmediato a partir de los Teos. 2.1, 2.2 y 2.3. P

De ahora en adelante, cada vez que se hable de un lenguaje regular, se puede suponer que se lo tiene descrito con una ER, AFND o AFD, seg n resulte ms conveniente. u a Ejemplo 2.19 El desaf del Ej. 2.4 ahora es viable en forma mecnica, aplicando er al AFD del o aEj. 2.11. Toma trabajo pero puede hacerse automticamente. a

2.7

Propiedades de Clausura

[LP81, sec 2.4 y 2.6]

Las propiedades de clausura se reeren a qu operaciones podemos hacer sobre lenguajes e regulares de modo que el resultado siga siendo un lenguaje regular. Primero demostraremos algunas propiedades sencillas de clausura.

2.8. LEMA DE BOMBEO Lema 2.2 La unin, concatenacin y clausura de lenguajes regulares es regular. o o

29

Prueba: Basta considerar ERs E1 y E2 , de modo que los lenguajes L1 = L(E1 ) y L2 = L(E2 ). Entonces L1 L2 = L(E1 | E2 ), L1 L2 = L(E1 E2 ) y L1 = L(E1 ) son regulares. P

Una pregunta un poco menos evidente se reere a la complementacin e interseccin de o o lenguajes regulares. Lema 2.3 El complemento de un lenguaje regular es regular , y la interseccin y diferencia o de dos lenguajes regulares es regular.Prueba: Para el complemento basta considerar el AFD M = (K, , , s, F ) que reconoce L, y ver que M = (K, , , s, K F ) reconoce Lc = L. La interseccin es inmediata a partir de la o P unin y el complemento, L1 L2 = (Lc Lc )c . La diferencia es L1 L2 = L1 Lc . o 2 2 1

Observacin 2.7 Es posible obtener la interseccin en forma ms directa, considerando un o o a AFD con estados K = K1 K2 . Es un ejercicio interesante imaginar cmo opera este AFD o y denirlo formalmente. Ejemplo 2.20 Es un desaf obtener directamente la ER de la diferencia de dos ERs. Ahora otenemos que esto puede hacerse mecnicamente. Es un ejercicio interesante, para apreciar la a sosticacin obtenida, indicar paso a paso cmo se har para obtener la ER de L1 L2 a partir o o a de las ERs de L1 y L2 .

Ejemplo 2.21 Las operaciones sobre lenguajes regulares permiten demostrar que ciertoslenguajes son regulares con ms herramientas que las provistas por ERs o autmatas. Por ejemplo, a o se puede demostrar que los nmeros decimales correctamente escritos (sin ceros delante) que son u mltiplos de 7 pero no mltiplos de 11, y que adems tienen una cantidad impar de d u u a gitos 4, forman un lenguaje regular. Llamando D = 0 | 1 | . . . | 9, M7 al AFD del Ej. 2.11, M11 a uno similar para los mltiplos de 11, y E4 a una ER similar a la del Ej. 2.1 pero que cuenta 4s, el u lenguaje que queremos es ((L(M7 ) L(M11 )) L(E4 )) L(0 D). Se atreve a dar una ER o AFND para el resultado? (no es en serio, puede llevarle mucho tiempo).

2.8

Lema de Bombeo

[LP81, sec 2.6]

Hasta ahora hemos visto diversas formas de mostrar que un lenguaje es regular, pero ninguna (aparte de que no nos funcione nada de lo que sabemos hacer) para mostrar que no lo es. Veremos ahora una herramienta para demostrar que un cierto L no es regular. Observacin 2.8 Pregunta capciosa: Esta herramienta que veremos, funciona para o todos los lenguajes no regulares? Imposible, pues hay ms lenguajes no regulares que a demostraciones!

30

CAP ITULO 2. LENGUAJES REGULARES

La idea esencial es que un lenguaje regular debe tener cierta repetitividad, producto de la capacidad limitada del AFD que lo reconoce. Ms precisamente, todo lo que el AFD a recuerda sobre la cadena ya le se condensa en su estado actual, para el cual hay slo una da o cantidad nita de posibilidades. El siguiente teorema (que por alguna razn se llama Lema o de Bombeo) explota precisamente este hecho, aunque a primera vista no se note, ni tampoco se vea cmo usarlo para probar que un lenguaje no es regular. o Teorema 2.5 (Lema de Bombeo) Sea L un lenguaje regular. Entonces existe un nmero N > 0 tal que toda cadena w L u de largo |w| > N se puede escribir como w = xyz de modo que y = , |xy| N, y n 0, xy n z L.Prueba: Sea M = (K, , , s, F ) un AFD que reconoce L. Deniremos N = |K|. Al leer w, M pasa por distintas conguraciones hasta llegar a un estado nal. Consideremos los primeros N caracteres de w en este camino, llamndole qi al estado al que se llega luego de consumir w1 w2 . . . wi : a

(q0 , w1 w2 . . .) (q1 , w2 . . .) . . . (qi , wi+1 . . .) . . . (qj , wj+1 . . .) . . . (qN , wN +1 . . .) . . . Los estados q0 , q1 , . . . , qN no pueden ser todos distintos, pues M tiene slo N estados. De modo o que en algn punto del camino se repite algn estado. Digamos qi = qj , i < j. Eso signica que, si u u eliminamos y = wi+1 wi+2 . . . wj de w, M llegar exactamente al mismo estado nal al que llegaba a antes: (q0 , w1 w2 . . .) (q1 , w2 . . .) . . . (qi1 , wi . . .) (qi = qj , wj+1 . . .) . . . (qN , wN +1 . . .) . . . y, similarmente, podemos duplicar y en w tantas veces como queramos y el resultado ser el mismo. a Llamando x = w1 . . . wi , y = wi+1 . . . wj , y z = wj+1 . . . w|w| , tenemos entonces el teorema. Es fcil a vericar que todas las condiciones valen. P

Cmo utilizar el Lema de Bombeo para demostrar que un lenguaje no es regular? La o idea es negar las condiciones del Teo. 2.5. 1. Para cualquier longitud N, 2. debemos ser capaces de elegir alguna w L, |w| > N, 3. de modo que para cualquier forma de partir w = xyz, y = , |xy| N, 4. podamos encontrar alguna n 0 tal que xy n z L. Una buena forma de pensar en este proceso es en que se juega contra un adversario. El elige N, nosotros w, l la particiona en xyz, nosotros elegimos n. Si somos capaces de ganarle e haga lo que haga, hemos demostrado que L no es regular. Ejemplo 2.22 Demostremos que L = {an bn , n 0} no es regular. Dado N , elegimos w = aN bN .Ahora, se elija como se elija y dentro de w, sta constar de puras as, es decir, x = ar , y = as , e a z = aN rs bN , r+s N , s > 0. Ahora basta mostrar que xy 0 z = xz = ar aN rs bN = aN s bN L pues s > 0.

2.9. PROPIEDADES ALGOR ITMICAS DE LENGUAJES REGULARES Un ejemplo que requiere algo ms de inspiracin es el siguiente. a o

31

primo p > N + 1, w = ap . Ahora, para toda eleccin x = ar , y = as , z = at , r + s + t = p, debemos o encontrar algn n 0 tal que ar+ns+t L, es decir, r + ns + t no es primo. Pero esto siempre es u posible, basta con elegir n = r + t para tener r + ns + t = (r + t)(s + 1) compuesto. Ambos factores son mayores que 1 porque s > 0 y r + t = p s > (N + 1) N .

Ejemplo 2.23 Demostremos que L = {ap , p es primo} no es regular. Dado N , elegimos un

2.9

Propiedades Algor tmicas de Lenguajes Regulares

[LP81, sec 2.4] Antes de terminar con lenguajes regulares, examinemos algunas propiedades llamadas algor tmicas, que tienen relacin con qu tipo de preguntas pueden hacerse sobre lenguajes o e regulares y responderse en forma mecnica. Si bien a esta altura pueden parecer algo a esotricas, estas preguntas adquieren sentido ms adelante. e a Lema 2.4 Dados lenguajes regulares L, L1 , L2 (descritos mediante ERs o autmatas), las o siguientes preguntas tienen respuesta algor tmica: 1. Dada w , es w L? 2. Es L = ? 3. Es L = ? 4. Es L1 L2 ? 5. Es L1 = L2 ?Prueba: Para (1) tomamos el AFD que reconoce L y lo alimentamos con w, viendo si llega a un estado nal o no. Para eso son los AFDs!. Para (2), vemos si en el AFD existe un camino del estado inicial a un estado nal. Esto se resuelve fcilmente con algoritmos de grafos. Para (3), a complementamos el AFD de L y reducimos la pregunta a (2). Para (4), calculamos L = L1 L2 y reducimos la pregunta a (2) con respecto a L. Para (5), reducimos la pregunta a (4), L1 L2 y L2 L1 . P

Observacin 2.9 En estas demostraciones hemos utilizado por primera vez el concepto de o reduccin de problemas: se reduce un problema que no se sabe resolver a uno que s se sabe. o Ms adelante usaremos esta idea al revs: reduciremos un problema que sabemos que no se a e puede resolver a uno que queremos demostrar que no se puede resolver.

32

CAP ITULO 2. LENGUAJES REGULARES

2.10

Ejercicios

Expresiones Regulares1. Qu lenguaje representa la expresin ((a a) b) | b ? e o 2. Reescriba las siguientes expresiones regulares de una forma ms simple a (a) | a | b | (a | b) (c) (a b) | (b a)

(b) ((a b) (b a)) (d) (a | b) a (a | b)

3. Sea = {a, b}. Escriba expresiones regulares para los siguientes conjuntos (a) Las cadenas en con no ms de 3 as. a (b) Las cadenas en con una cantidad de as divisible por 3. (c) Las cadenas en con exactamente una ocurrencia de la subcadena aaa. 4. Pruebe que si L es regular, tambin lo es L = {uw, u , w L}, mediante hallar e una expresin regular para L . o 5. Cules de las siguientes armaciones son verdaderas? Explique. (Abusaremos de la a notacin escribiendo c para {c} ). o (b) b a a b = a b (d) abcd (a(cd) b) (c) a b c d = (a) baa a b a b

AFDs, AFNDs y Conversiones1. Dibuje los siguientes AFDs y describa informalmente el lenguaje que aceptan. Hemos escrito la funcin como un conjunto. o (a) K = {q0 , q1 , q2 , q3 }, = {a, b}, s = q0 , F = {q1 }, = {(q0 , a, q1 ), (q0 , b, q2 ), (q1 , a, q3 ), (q1 , b, q0 ), (q2 , a, q2 ), (q2 , b, q2 ), (q3 , a, q2 ), (q3 , b, q2 )}.

(b) K = {q0 , q1 , q2 , q3 , q4 }, = {a, b}, s = q0 , F = {q2 , q3 }, = {(q0 , a, q1 ), (q0 , b, q3 ), (q1 , a, q1 ), (q1 , b, q2 ), (q2 , a, q4 ), (q2 , b, q4 ), (q3 , a, q4 ), (q3 , b, q4 ), (q4 , a, q4 ), (q4 , b, q4 )}.

2.10. EJERCICIOS

33

(d) Idem al anterior pero s = q1 , F = {q1 }.

(c) K = {q0 , q1 , q2 , q3 }, = {a, b}, s = q0 , F = {q0 }, = {(q0 , a, q1 ), (q0 , b, q3 ), (q1 , a, q2 ), (q1 , b, q0 ), (q2 , a, q3 ), (q2 , b, q1 ), (q3 , a, q3 ), (q3 , b, q3 )}. Escr balos

2. Construya AFDs que acepten cada uno de los siguientes lenguajes. formalmente y dib jelos. u (b) {w {a, b} , w tiene abab como subcadena} (a) {w {a, b} , cada a en w est precedido y seguido por una b} a (c) {w {a, b} , w no tiene aa ni bb como subcadena}

(d) {w {a, b} , w tiene una cantidad impar de as y una cantidad par de bs}. (e) {w {a, b} , w tiene ab y ba como subcadenas}. 3. Cules de las siguientes cadenas son aceptadas por los siguientes autmatas? a o (a) aa, aba, abb, ab, abab. a a b (b) ba, ab, bb, b, bba. b b a b 4. Dibuje AFNDs que acepten los siguientes lenguajes. Luego convirtalos a AFDs. e (b) ((ab aab) a ) (c) ((a b a ) b) (d) (ba b) (bb a) 5. Escriba expresiones regulares para los lenguajes aceptados por los siguientes AFNDs. (a) (ab) (ba) aa b b b b a

34

CAP ITULO 2. LENGUAJES REGULARES (a) K = {q0 , q1 }, = {a, b}, s = q0 , F = {q0 }, = {(q0 , ab, q0 ), (q0 , a, q1 ), (q1 , bb, q1 )}

(b) K = {q0 , q1 , q2 , q3 }, = {a, b}, s = q0 , F = {q0 , q2 }, = {(q0 , a, q1 ), (q1 , b, q2 ), (q2 , a, q1 ), (q1 , b, q3 ), (q3 , a, q2 )}

(c) K = {q0 , q1 , q2 , q3 , q4 , q5 }, = {a, b}, s = q0 , F = {q1 , q5 }, = {(q0 , , q1 ), (q0 , a, q4 ), (q1 , a, q2 ), (q2 , a, q3 ), (q3 , a, q1 ), (q4 , a, q5 ), (q5 , a, q4 )}

6. (a) Encuentre un AFND simple para (aa | aab | aba).

(b) Convirtalo en un autmata determin e o stico usando el algoritmo visto. (c) Trate de entender el funcionamiento del autmata. Puede hallar uno con menos o estados que reconozca el mismo lenguaje?

(d) Repita los mismos pasos para (a | b) aabab.

Propiedades de Clausura y Algor tmicas1. Pruebe que si L es regular, entonces los siguientes conjuntos tambin lo son e (a) P ref (L) = {x, y, xy L} (c) Subs(L) = {y, x, z, xyz L}

(b) Suf (L) = {y, x, xy L}

(d) Max(L) = {w L, x = wx L}

(e) LR = {w R , w L} (w R es w le al revs). do e

2. Muestre que hay algoritmos para responder las siguientes preguntas, donde L1 y L2 son lenguajes regulares (a) No hay una sla cadena w en com n entre L1 y L2 . o u (b) L1 y L2 son uno el complemento del otro (c) L = L2 1 (d) L1 = P ref (L2 )

Lenguajes Regulares y No Regulares1. Demuestre que cada uno de los siguientes conjuntos es o no es regular. (a) {a10 , n 0}n

(b) {w {0..9} , w representa 10n para alg n n 0} u

2.11. PREGUNTAS DE CONTROLES

35

(c) {w {0..9} , w es una secuencia de d gitos que aparece en la expansin decimal o de 1/7 = 0.142857 142857 142857...} 2. Demuestre que el conjunto {an bam ban+m , n, m 0} no es regular. operacionalmente, esto implica que los autmatas nitos no saben sumar. o 3. Pruebe que los siguientes conjuntos no son regulares. (b) {ww, w {a, b} } (a) {ww R , w {a, b} } (c) {ww, w {a, b} }. w es w donde cada a se cambia por una b y viceversa. Visto

4. Cierto o falso? Demuestre o d contraejemplos. e (a) Todo subconjunto de un lenguaje regular es regular (b) Todo lenguaje regular tiene un subconjunto propio regular (d) Si L es regular, tambin lo es {w L, ning n prejo propio de w pertenece a e u L}. (e) {w, w = w R } es regular (f) Si L es regular, tambin lo es {w, w L, w R L} e (c) Si L es regular tambin lo es {xy, x L, y L} e

(g) Si {L1 , L2 , ...} es un conjunto innito de lenguajes regulares, tambin lo es e o sea la unin de todos ellos. Y si el conjunto es nito? o (h) {xyxR , x, y } es regular.

Li ,

2.11

Preguntas de Controles

A continuacin se muestran algunos ejercicios de controles de a os pasados, para dar una o n idea de lo que se puede esperar en los prximos. Hemos omitido (i) (casi) repeticiones, (ii) o cosas que ahora no se ven, (iii) cosas que ahora se dan como parte de la materia y/o estn a en los ejercicios anteriores. Por lo mismo a veces los ejercicios se han alterado un poco o se presenta slo parte de ellos, o se mezclan versiones de ejercicios de distintos a os para que o n no sea repetitivo. C1 1996, 1997 Responda verdadero o falso y justique brevemente (mximo 5 l a neas). Una respuesta sin jusiticacin no vale nada aunque est correcta, una respuesta incorrecta o e puede tener alg n valor por la justicacin. u o a) Si un autmata nito pudiera tener innitos estados, podr reconocer cualquier o a lenguaje.

36

CAP ITULO 2. LENGUAJES REGULARES b) No hay algoritmo para saber si un autmata nito reconoce un lenguaje nito o o innito. c) La unin o interseccin de dos lenguajes no regulares no puede ser regular. o o d) Si la aplicacin del Lema del Bombeo para lenguajes regulares falla, entonces el o lenguaje es regular. e) Dados dos lenguajes regulares L1 y L2 , existe algoritmo para determinar si el conjunto de prejos de L1 es igual al conjunto de sujos de L2 .Hemos unido ejercicios similares de esos aos. n

C1 1996 Suponga que tiene que buscar un patrn p en un texto, ejemplo "lolo". Queremos o construir un autmata nito que acepte un texto si y slo si ste contiene el patrn p. o o e o a) Escriba la expresin regular que corresponde a los textos que desea aceptar. o b) Dibuje un autmata nito equivalente a la expresin regular. o o c) Para el ejemplo de p ="lolo", convierta el autmata a determin o stico. Observe que no vale la pena generar ms de un estado nal, son todos equivalentes. a ER 1996 Un autmata de mltiple entrada es igual a los normales, excepto porque puede o u tener varios estados iniciales. El autmata acepta x si comenzando de algn estado o u inicial se acepta x. a) Use un autmata de dos entradas para reconocer el lenguaje de todas las cadenas o de ceros y unos sin dos s mbolos iguales consecutivos. b) Describa formalmente un autmata de m ltiple entrada, en su versin o u o determin stica y no determin stica. Describa formalmente el conjunto de cadenas aceptadas por tales autmatas. o c) Los autmatas de m ltiple entrada son ms potentes que los normales o no? o u a Demustrelo. e C1 1997 Dado el lenguaje de las cadenas binarias donde nunca aparece un cero aislado: D una expresin regular que lo genere. e o

Convirtala a un autmata no determin e o stico con el mtodo visto. Simplique el e autmata. o Convierta este autmata simplicado a determin o stico con el mtodo visto. e Simplique el autmata obtenido. o C1 1998, 1999

2.11. PREGUNTAS DE CONTROLES

37

a) Utilice los mtodos vistos para determinar si los siguientes autmatas son o no e o equivalentes. b) Exprese el lenguaje aceptado por el autmata de la izquierda como una expresin o o regular. c) Convierta el autmata de la derecha en un autmata nito determin o o stico. b q0 b a q1 a q2 a, b p0 a b bb p3Se unieron distintas preguntas sobre los mismos autmatas en esos aos. o n

p1 a

a

p2

a, b

C1 1998 Dada la expresin regular a(a | ba) b : o a) Indique todas las palabras de largo 4 que pertenecen al lenguaje representado por esta expresin regular. o b) Construya un autmata nito no determin o stico que reconozca este lenguaje. C1 1998 Es fcil determinar si una palabra pertenece o no a un lenguaje usando un a autmata nito determ o nistico. Sin embargo, al pasar de un AFND a un AFD el n mero de estados puede aumentar exponencialmente, lo que aumenta el espacio u necesario. Una solucin alternativa es simular un autmata nito no determin o o stico. Escriba en pseudo-lenguaje una funcin Acepta(M, w) que dado un AFND M = o (K, , , s, F ) y una palabra w, retorne V o F , si pertenece o no al lenguaje que acepta M. Puede usar la notacin M.K, M.s, etc., para obtener cada elemento del o autmata y suponer que todas las operaciones bsicas que necesite ya existen (por o a ejemplo, operaciones de conjuntos). Ex 1999, C1 2002 Demuestre que los siguientes lenguajes no son regulares. a) {an bm , n > m}.

b) {an bm ar , r n}.

C1 2000 Un transductor es una tupla M = (K, , , s), donde K es un conjunto nito de estados, es un alfabeto nito, s K es el estado inicial y : K K La idea es que un transductor lee una cadena de entrada y produce una cadena de salida. Si estamos en el estado q y leemos el carcter a, y (q, a) = (q , x) entonces el a

38

CAP ITULO 2. LENGUAJES REGULARES transductor pasa al estado q y produce la cadena x. En la representacin grca se o a pone a/x sobre la echa que va de q a q . Por ejemplo, el transductor izquierdo de la gura elimina todos los ceros de la entrada y a los unos restantes los convierte en ceros. El de la derecha considera las secuencias seguidas de ceros o unos y las trunca para que sus longitudes sean m ltiplos de 3 (ej. u 0000111000001111 000111000111).1/ 0/ 1/ 1/0 0/ 0/000 1/ 0/ 1/ 0/

1/111 0/

(a) Dibuje un transductor que tome las secuencias seguidas de ceros o unos de la entrada y slo deje un representante de cada secuencia, por ejemplo o 001110011001000111 01010101.

(b) Dena formalmente la funcin salida (S) de un transductor, que recibe la cadena o de entrada y entrega la salida que producir el transductor. Ayuda: dena a S(w) = T (s, w), donde T (q, w) depende del estado actual del transductor, y luego considere los casos w = y w = a w , es decir la letra a concatenada con el resto de la cadena, w .

(c) El lenguaje de salida de un transductor es el conjunto de cadenas que puede producir (es decir {S(w), w }). Demuestre que el lenguaje de salida de un transductor es regular. Ayuda: dado un transductor, muestre cmo obtener el o AFND que reconozca lo que el transductor podr generar. a C1 2001 Demuestre que si L es un lenguaje regular entonces el lenguaje de los prejos reversos de cadenas de L tambin es regular. Formalmente, demuestre que L = e R {x , y, xy L} es regular. C1 2001 Intente usar el Lema de Bombeo sin la restriccin |xy| N para probar que o R L = {w {a, b} , w = w } no es regular. Por qu falla? Hgalo ahora con el Lema e a con la restriccin. o

2.11. PREGUNTAS DE CONTROLES

39

C1 2002 Dada la expresin regular (AA|AT)((AG|AAA)*), realice lo siguiente usando los o mtodos vistos: e (a) Construya el autmata nito no determin o stico que la reconoce. (b) Convierta el autmata obtenido a determin o stico. C1 2004 Considere la expresin regular (AB|CD)*AFF*. o (a) Construya el AFND correspondiente. (b) Convierta el AFND en AFD. Omita el estado sumidero y las aristas que llevan a l. El resultado tiene 7 estados. e (c) Minimice el AFD, usando la regla siguiente: si dos estados q y q son ambos nales o ambos no nales, de ellos salen aristas por las mismas letras, y las aristas que salen de ellos por cada letra llevan a los mismos estados, entonces q y q se pueden unir en un mismo estado. Reduzca el AFD a 5 estados usando esta regla. (d) Convierta el AFD nuevamente en expresin regular. o C1 2004 Demuestre que: 1. Si L es regular, nosubstr(L) es regular (nosubstr(L) es el conjunto de cadenas que no son substrings de alguna cadena en L). 2. Si L es regular, Ext(L) es regular (Ext(L) es el conjunto de cadenas con alg n u prejo en L, Ext(L) = {xy, x L}). Ex 2005 Un Autmata Finito de Doble Direccin (AFDD) se comporta similarmente a un o o Autmata Finito Determin o stico (AFD), excepto porque tiene la posibilidad de volver hacia atrs en la lectura de la cadena. Es decir, junto con indicar a qu estado pasa a e al leer un carcter, indica si se mueve hacia atrs o hacia adelante. El autmata a a o termina su procesamiento cuando se mueve hacia adelante del ultimo carcter. En este a momento, acepta la cadena sii a la vez pasa a un estado nal. Si nunca pasa del ultimo carcter de la cadena, el AFDD no la acepta. Si el AFDD trata de moverse hacia atrs a a del primer carcter, este comando se ignora y permanece en el primer carcter. a a Dena formalmente los AFDDs como una tupla de componentes; luego dena lo que es una conguracin; cmo es una transicin entre conguraciones; el concepto de aceptar o o o o no una cadena; y nalmente dena el lenguaje aceptado por un AFDD. C1 2006 Sean L1 y L2 lenguajes regulares. Se dene alt(x1 x2 . . . xn , y1 y2 . . . yn ) = x1 y1 x2 y2 . . . xn yn

40 y se dene el lenguaje

CAP ITULO 2. LENGUAJES REGULARES

L = {alt(x, y), x L1 , y L2 , |x| = |y|} Demuestre que L es regular. C1 2006 Sea L {a, b} el lenguaje de las cadenas donde todos los bloques de as tienen el mismo largo (un bloque es una secuencia de as consecutivas). Por ejemplo bbbaabaabbaa L, abbabababba L, aaaabbaaaabaaaa L, baabbbaba L. Demuestre que L no es regular.

2.12

Proyectos

1. Investigue sobre minimizacin de AFDs. Una posible fuente es [ASU86], desde pgina o a 135. Otra es [HMU01], seccin 4.4, desde pgina 154. o a 2. Investigue sobre mtodos alternativos a Thompson para convertir una ER en AFND. e Por ejemplo, el mtodo de Glushkov se describe en [NR02], seccin 5.2.2, desde pgina e o a 105. 3. Investigue una forma alternativa de convertir AFDs en ERs, donde los estados se van eliminando y se van poniendo ERs cada vez ms complejas en las aristas del autmata. a o Se describe por ejemplo en [HMU01], seccin 3.2.2, desde pgina 96. o a 4. Investigue sobre implementacin eciente de autmatas. Algunas fuentes son [NR02], o o seccin 5.4, desde pgina 117; y [ASU86], seccin 3.9, desde pgina 134. Tambin o a o a e puede investigar la implementacin de las herramientas grep de Gnu y lex de Unix. o 5. Programe el ciclo completo de conversin ER AFND AFD ER. o 6. Programe un buscador eciente de ERs en texto, de modo que reciba una ER y lea la entrada estndar, enviando a la salida estndar las l a a neas que contienen una ocurrencia de la ER.

Referencias[ASU86 ] A. Aho, R. Sethi, J. Ullman. Compilers: Principles, Techniques, and Tools. Addison-Wesley, 1986. [HMU01] J. Hopcroft, R. Motwani, J. Ullman. Introduction to Automata Theory, Languages, and Computation. 2nd Edition. Pearson Education, 2001.

2.12. PROYECTOS

41

[LP81] H. Lewis, C. Papadimitriou. Elements of the Theory of Computation. Prentice-Hall, 1981. Existe una segunda edicin, bastante parecida, de 1998. o [NR02 ] G. Navarro, M. Ranot. University Press, 2002. Flexible Pattern Matching in Strings. Cambridge

42

CAP ITULO 2. LENGUAJES REGULARES

Cap tulo 3 Lenguajes Libres del Contexto[LP81, cap 3] En este cap tulo estudiaremos una forma de representacin de lenguajes ms potentes o a que los regulares. Los lenguajes libres del contexto (LC) son importantes porque sirven como mecanismo formal para expresar la gramtica de lenguajes de programacin o los a o semiestructurados. Por ejemplo la popular Backus-Naur form es esencialmente una gramtica libre del contexto. Similarmente, los DTDs usados para indicar el formato a permitido en documentos XML son esencialmente gramticas que describen lenguajes LC. a Los lenguajes LC tambin se usan en biolog computacional para modelar las propiedades e a que se buscan en secuencias de ADN o prote nas. El estudio de este tipo de lenguajes deriva en la construccin semiautomtica de parsers (reconocedores) ecientes, los cuales son o a esenciales en la construccin de compiladores e intrpretes, as como para procesar textos o e semiestructurados. Una herramienta conocida para esta construccin semiautomtica es o a lex/yacc en C/Unix, y sus distintas versiones para otros ambientes. Estas herramientas reciben esencialmente una especicacin de un lenguaje LC y producen un programa que o parsea tal lenguaje. En trminos tericos, los lenguajes LC son interesantes porque van ms all de la memoria e o a a nita sobre el pasado permitida a los regulares, pudiendo almacenar una cantidad arbitraria de informacin sobre el pasado, siempre que esta informacin se acceda en forma de pila. Es o o interesante ver los lenguajes que resultan de esta restriccin. o

3.1

Gramticas Libres del Contexto (GLCs) a

[LP81, sec 3.1]

Una gramtica libre del contexto (GLC) es una serie de reglas de derivacin, produccin o a o o reescritura que indican que un cierto s mbolo puede convertirse en (o reescribirse como) una secuencia de otros s mbolos, los cuales a su vez pueden convertirse en otros, hasta obtener una cadena del lenguaje. Es una forma particular de sistema de reescritura, restringida a que las reglas aplicables para reescribir un s mbolo son independientes de lo que tiene alrededor 43

44

CAP ITULO 3. LENGUAJES LIBRES DEL CONTEXTO

en la cadena que se est generando (de all el nombre libre del contexto). a Distinguiremos entre los s mbolos terminales (los del alfabeto que formarn la cadena a nal) y los s mbolos no terminales (los que deben reescribirse como otros y no pueden aparecer en la cadena nal). Una GLC tiene un s mbolo inicial del que parten todas las derivaciones, y se dice que genera cualquier secuencia de s mbolos terminales que se puedan obtener desde el inicial mediante reescrituras. Ejemplo 3.1 Consideremos las siguientes reglas de reescritura:S aSb S donde S es el s mbolo (no terminal) inicial, y {a, b} son los s mbolos terminales. Las cadenas que se pueden generar con esta GLC forman precisamente el conjunto {an bn , n 0}, que en el Ej. 2.22 vimos que no era regular. De modo que este mecanismo permite expresar lenguajes no regulares.

Formalicemos ahora lo que es una GLC y el lenguaje que describe. Denicin 3.1 Una gramtica libre del contexto (GLC) es una tupla G = (V, , R, S), o a donde 1. V es un conjunto nito de s mbolos no terminales. 2. es un conjunto nito de s mbolos terminales, V = . 3. S V es el s mbolo inicial. 4. R F V (V ) son las reglas de derivacin (conjunto nito). o Escribiremos las reglas de R como A G z o simplemente A z en vez de (A, z). Ahora deniremos formalmente el lenguaje descrito por una GLC. Denicin 3.2 Dada una GLC G = (V, , R, S), la relacin lleva en un paso =G (V o o ) (V ) se dene como x, y, A z R, xAy =G xzy. Denicin 3.3 Denimos la relacin lleva en cero o ms pasos, = , como la clausura o o a G reexiva y transitiva de =G . Escribiremos simplemente = y = cuando G sea evidente. Notamos que se puede llevar en cero o ms pasos a una secuencia que a n contiene no a u terminales. Las derivaciones que nos interesan nalmente son las que llevan del s mbolo inicial a secuencias de terminales.

3.1. GRAMATICAS LIBRES DEL CONTEXTO (GLCS)

45

Denicin 3.4 Dada una GLC G = (V, , R, S), denimos el lenguaje generado por G, o L(G), como L(G) = {w , S = w}. G Finalmente denimos los lenguajes libres del contexto como los expresables con una GLC. Denicin 3.5 Un lenguaje L es libre del contexto (LC) si existe una GLC G tal que o L = L(G). Ejemplo 3.2 Cmo podr describirse las secuencias de parntesis bien balanceados? (donde o an enunca se han cerrado ms parntesis de los que se han abierto, y al nal los nmeros coinciden). a e u Una GLC que lo describa es sumamente simple: S (S)S S la que formalmente se escribe como V = {S}, = {(, )}, R = {(S, (S)S), (S, )}. Una derivacin o de la cadena (())() a partir de S podr ser como sigue: a S = (S)S = ((S)S)S = (()S)S = (())S = (())(S)S = (())()S = (())(), y otra podr ser como sigue: a S = (S)S = (S)(S)S = (S)()S = (S)() = ((S)S)() = (()S)() = (())(). Esto ilustra un hecho interesante: existen distintas derivaciones para una misma cadena, producto de aplicar las reglas en distinto orden.

Observacin 3.1 Puede el lenguaje del Ej. 3.2 ser regular? No, pues entonces su o interseccin con ( ) tambin lo ser pero esa interseccin es {(n )n , n 0}, que ya sabemos o e a, o que no es regular. Una herramienta muy util para visualizar derivaciones, y que se independiza del orden en que se aplican las reglas, es el rbol de derivacin. a o Denicin 3.6 Un rbol de derivacin para una gramtica G = (V, , R, S) es un rbol o a o a a donde los hijos tienen orden y los nodos estn rotulados con elementos de V . La a o o ra est rotulada con S, y los nodos internos deben estar rotulados con elementos de V . Si z a los rtulos de los hijos de un nodo interno rotulado A son a1 . . . ak , k 1 y ai V , debe o existir una regla A a1 . . . ak R. Si un nodo interno rotulado A tiene un unico hijo rotulado , debe haber una regla A R. Diremos que el rbol genera la cadena que a resulta de concatenar todos los s mbolos de sus hojas, de izquierda a derecha, vistos como cadenas de largo 1 (o cero para ).

46

CAP ITULO 3. LENGUAJES LIBRES DEL CONTEXTO

Observar que la denicin permite que un rbol de derivacin tenga s o a o mbolos no terminales en sus hojas, es decir, puede representar una derivacin parcial. El siguiente o lema es inmediato. Lema 3.1 Si un rbol de derivacin para G genera x (V ) , entonces S = x. Si a o G S =G x, existe un rbol de derivacin que genera x. a oPrueba: Muy fcil por induccin estructural sobre el rbol o por induccin sobre la longitud de a o a o la derivacin, segn el caso. o u P

Ejemplo 3.3 El rbol de derivacin para la cadena del Ej. 3.2 es como sigue: a oS

(

S

)

S

(

S

)

S

(

S

)

S

y abstrae de ambos rdenes de derivacin. o o

Sin embargo, los distintos rdenes de derivacin no son los unicos responsables de que o o existan distintas formas de derivar una misma cadena. Es posible que una misma cadena tenga dos rboles de derivacin distintos. a o Denicin 3.7 Una GLC G es ambigua si existen dos rboles de derivacin distintos para o a o G que generan una misma cadena w L(G). Generalmente ser ambigua es una propiedad indeseable para una GLC. Veamos un ejemplo de una GLC ambigua. Ejemplo 3.4 La siguiente GLC describe un subconjunto de expresiones aritmticas correctas. eE E E E E +E E E (E) N N N D D D D DN 0 ... 9

3.1. GRAMATICAS LIBRES DEL CONTEXTO (GLCS)

47

donde V = {E, N, D}, E es el s mbolo inicial, y todos los dems son terminales. a Por ejemplo, 2 + 3 5 pertenece al lenguaje generado por esta GLC, pero tiene dos rboles de a derivacin distintos: oE E

E

+

E

E

*

E

N

E

*

E

E

+

E

N

D

N

N

N

N

D

2

D

D

D

D

5

3

5

2

3

Dado que lo normal es asignar semntica a una expresin a partir de su rbol de derivacin, el a o a o valor en este ejemplo puede ser 25 17 segn qu arbol utilicemos para generarla. o u e

Cuando se tiene una gramtica ambigua, podemos intentar desambiguarla, mediante a escribir otra que genere el mismo lenguaje pero que no sea ambigua. Ejemplo 3.5 La siguiente GLC genera el mismo lenguaje que la del Ej. 3.4, pero no es ambigua.La tcnica usada ha sido distinguir lo que son sumandos (o trminos T ) de factores (F ), de modo e e de forzar la precedencia , +. E E T T F F E+T T T F F (E) N N N D D D D DN 0 ... 9

Ahora el lector puede vericar que 2+ 35 slo permite la derivacin que queremos, pues hemos o o obligado a que primero se consideren los sumandos y luego los factores.

48

CAP ITULO 3. LENGUAJES LIBRES DEL CONTEXTO

3.2

Todo Lenguaje Regular es Libre del Contexto[LP81, sec 3.2]

Hemos ya mostrado (Ej. 3.1) que existen lenguajes LC que no son regulares. Vamos ahora a completar esta observacin con algo ms profundo: el conjunto de los lenguajes LC o a incluye al de los regulares. Teorema 3.1 Si L es un lenguaje regular, entonces L es LC.Prueba: Lo demostramos por induccin estructural sobre la ER que genera L. Ser ms fcil o a a a usando autmatas nitos y de pila (que veremos enseguida), pero esta demostracin ilustra otros o o hechos utiles para ms adelante. a 1. Si L = , la GLC G = ({S}, , , S) genera L. Esta es una GLC sin reglas! 2. Si L = {a}, la GLC G = ({S}, , {S a}, S) genera L. 3. Si L = L1 L2 y tenemos (por hiptesis inductiva) GLCs G1 = (V1 , , R1 , S1 ) y G2 = o (V2 , , R2 , S2 ) que generan L1 y L2 respectivamente, entonces la GLC G = (V1 V2 {S}, , R1 R2 {S S1 , S S2 }, S) genera L. 4. Si L = L1 L2 y tenemos GLCs G1 = (V1 , , R1 , S1 ) y G2 = (V2 , , R2 , S2 ) que generan L1 y L2 respectivamente, entonces la GLC G = (V1 V2 {S}, , R1 R2 {S S1 S2 }, S) genera L. 5. Si L = L y tenemos una GLC G1 = (V1 , , R1 , S1 ) que genera L1 , entonces la GLC G = 1 (V1 {S}, , R1 {S S1 S, S }, S) genera L. P

Ejemplo 3.6 Si derivamos una GLC para (a | b) a obtendremosS S1 S1 S3 S3 S1 S2 S3 S1 S4 S5 S4 S4 S6 S5 S2

S6 S4 a b a

El Teo. 3.1 nos muestra cmo convertir cualquier ER en una GLC. Con esto a mano, nos o permitiremos escribir ERs en los lados derechos de las reglas de una GLC. Ejemplo 3.7 La GLC del Ej. 3.5 se puede escribir de la siguiente forma.E E + T | T T F (E) | DD T F | F

D 0 | . . . | 9

si bien, para cualquier propsito formal, deberemos antes convertirla a la forma bsica. o a

3.3. AUTOMATAS DE PILA (AP)

49

Ejemplo 3.8 Tal como con ERs, no siempre es fcil disear una GLC que genere cierto lenguaje. a nUn ejercicio interesante es {w {a, b} , w tiene la misma cantidad de as y bs }. Una respuesta sorprendentemente sencilla es S | aSbS | bSaS. Es fcil ver por induccin que genera a o solamente cadenas correctas, pero es un buen ejercicio convencerse de que genera todas las cadenas correctas.

3.3

Autmatas de Pila (AP) o

[LP81, sec 3.3]

Tal como en el Cap tulo 2, donde ten amos un mecanismo para generar lenguajes regulares (las ERs) y otro para reconocerlos (AFDs y AFNDs), tendremos mecanismos para generar lenguajes LC (las GLCs) y para reconocerlos. Estos ultimos son una extensin de los o AFNDs, donde adems de utilizar el estado del autmata como memoria del pasado, es a o posible almacenar una cantidad arbitraria de s mbolos en una pila. Un autmata de pila (AP) se diferencia de un AFND en que las transiciones involucran o condiciones no slo sobre la cadena de entrada sino tambin sobre los s o e mbolos que hay en el tope de la pila. Asimismo la transicin puede involucrar realizar cambios en el tope de la o pila. Ejemplo 3.9 Consideremos el siguiente AP:a,_,# b,#,_ b,#,_

0

1

Las transiciones se leen de la siguiente manera: (a, , #) signica que, al leerse una a, a mbolo independientemente de los caracteres que haya en el tope de la pila ( ), se apilar un s # y se seguir la transicin; (b, #, ) signica que, al leerse una b, si hay un s a o mbolo # en el tope de a la pila, se desapilar (es decir, se reemplazar por , que denota la cadena vac en los dibujos). El a a AP acepta la cadena slo si es posible llegar a un estado nal habiendo consumido toda la entrada o y quedando con la pila vac Es fcil ver que el AP del ejemplo acepta las cadenas del lenguaje a. a {an bn , n 0}. Notar que el estado 0 es nal para poder aceptar la cadena vac a.

Observacin 3.2 Notar que una condicin sobre la pila no quiere decir que la pila debe o o estar vac Eso no se puede expresar directamente. Lo que se puede expresar es en el tope a. a de la pila deben estar estos caracteres. Cuando esa condicin es lo que se est diciendo o es que no hay ninguna condicin sobre el tope de la pila, es decir, que los cero caracteres del o tope de la pila deb