Vous êtes sur la page 1sur 130

Modelos de Computacin I

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

Modelos de Computacin I

ndice general
1. Introduccin 1.1. Introduccin Histrica . . . . . . . . . . . . . . . 1.2. Diferentes Modelos de Computacin . . . . . . . . 1.2.1. Autmatas y Lenguajes . . . . . . . . . . . 1.3. Lenguajes y Gramticas. Aspectos de su traduccin 1.3.1. Alfabetos y Palabras . . . . . . . . . . . . 1.3.2. Lenguajes . . . . . . . . . . . . . . . . . . 1.3.3. Gramticas Generativas . . . . . . . . . . 1.3.4. Jerarqua de Chomsky . . . . . . . . . . . 5 7 11 15 17 17 19 22 27 33 34 37 39 42 44 45 48 52 53 54 61 65 65 67 68 71 72

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

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

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

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

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

3. Propiedades de los Conjuntos Regulares 3.1. Lema de Bombeo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

Modelos de Computacin I 3.2. Operaciones con Conjuntos Regulares . . . . . . . . . . 3.3. Algoritmos de Decision para Autmatas Finitos . . . . . 3.4. Teorema de Myhill-Nerode. Minimizacin de Autmatas 3.4.1. Minimizacin de Autmatas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 78 79 83 89 90 93 94 97 99 101 101 102 107 108 109 111 113 117 118 120 121 122 127

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

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

Captulo 1 Introduccin

Modelos de Computacin I

Hoy en da parece que no existe ningn lmite a lo que un ordenador puede llegar a hacer, y da la impresin de que cada vez se pueden resolver nuevos y ms difciles problemas. Casi desde que aparece sobre La Tierra, el hombre ha tratado de buscar procedimientos y mquinas que le facilitasen la realizacin de clculos (aritmticos primero, y otros ms complejos posteriormente). El avance tecnolgico para representar datos y/o informacin por un lado, y el diseo de nuevas formas de manejarlos, propicia el desarrollo de dispositivos y mquinas de calcular. Un aspecto importante en el desarrollo de los ordenadores, es sin duda, su aplicacin para resolver problemas cientcos y empresariales. Esta aplicacin hubiese resultado muy difcil sin la utilizacin de procedimientos que permiten resolver estos problemas mediante una sucesin de pasos claros, concretos y sencillos, es decir algortmos. El avance de las matemticas permite la utilizacin de nuevas metodologas para la representacin y manejo de la informacin. Por otro lado, aparece el intento de los matemticos y cientcos para obtener un procedimiento general para poder resolver cualquier problema (matemtico) claramente formulado. Es lo que podramos llamar El problema de la computacin terica. El avance de la tecnologa y de las matemticas, y ms en concreto de la teora de conjuntos y de la lgica, permiten plantearse aspectos de la computacin en 3 caminos. a) Computacin terica. Autmatas, Funciones Recursivas, ... b) Ordenadores digitales. Nuevas tecnologas, nuevos lenguajes, .... c) Intentos de modelizar el cerebro biolgico 1. Redes Neuronales (intentan modelizar el "procesador") 2. Conjuntos y Lgica Difusa (representar y manejar la informacin) En este texto veremos aspectos relativos a a) y c.1). Considermos el problema general, bajo un planteamiento de Programacin. Desde un punto de vista global, un programa (traducido a lenguaje mquina) se puede ver como una sucesin de ceros y unos, cuya ejecucin produce una salida, que es otra serie de ceros y unos. Si aadimos un 1 al inicio de cada cadena binaria (programa y salida), podemos entender los programas como aplicaciones concretas de una funcin entre nmeros naturales en binario. El argumento (variable independiente) sera el programa y la funcin (var. dependiente) la salida del programa. Obviamente, el nmero de funciones posibles de N en N es nonumerable, mientras que el nmero de posibles programas que podemos escribir con un Lenguaje de Programacin, que tiene un nmero nito de smbolos, es numerable. Esto signica (cada programa puede calcular una sola funcin como las indicadas antes) que existen muchas funciones para las que no podemos escribir un programa en nuestro L. de Alto Nivel, aunque seguramente estamos interesados en resolver el problema asociado a la funcin.

Cap. 1

Introduccin

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

1.1. Introduccin Histrica


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

Modelos de Computacin I

El primer paso en la bsqueda de las respuestas a estas preguntas est en el estudio de los modelos de computacin. Los comienzos de la Teora. La Tesis de Church-Turing Los modelos abstractos de computacin tienen su origen en los aos 30, bastante antes de que existieran los ordenadores modernos, en el trabajo de los lgicos Church, Gdel, Kleene, Post, y Turing. Estos primeros trabajos han tenido una profunda inuencia no solo en el desarrollo terico de las C.C., sino que muchos aspectos de la prctica de la computacin que son ahora lugar comn de los informticos, fueron presagiados por ellos; incluyendo la existencia de ordenadores de propsito general, la posibilidad de interpretar programas, la dualidad entre software y hardware, y la representacin de lenguajes por estructuras formales basados en reglas de produccin. El punto de partida de estos primeros trabajos fueron las cuestiones fundamentales que D. Hilbert formul en 1928, durante el transcurso de un congreso internacional: 1.- Son completas las matemticas, en el sentido de que pueda probarse o no cada aseveracin matemtica? 2.- Son las matemticas consistentes, en el sentido de que no pueda probarse simultaneamente una aseveracin y su negacin ? 3.- Son las matemticas decidibles, en el sentido de que exista un mtodo denido que se pueda aplicar a cualquier aseveracin matemtica, y que determine si dicha aseveracin es cierta?. La meta de Hilbert era crear un sistema matemtico formal ompleto onsistente", en el que todas las aseveraciones pudieran plantearse con precisin. Su idea era encontrar un algoritmo que determinara la verdad o falsedad de cualquier proposicin en el sistema formal. A este problema le llam el Entscheidungsproblem. Por desgracia para Hilbert, en la dcada de 1930 se produjeron una serie de investigaciones que mostraron que esto no era posible. Las primeras noticias en contra surgen en 1931 con K. Gdel y su Teorema de Incompletitud: "Todo sistema de primer orden consistente que contenga los teoremas de la aritmtica y cuyo conjunto de (nmeros de Gdel de) axiomas sea recursivo no es completo." Como consecuencia no ser posible encontrar el sistema formal deseado por Hilbert en el marco de la lgica de primer orden, a no ser que se tome un conjunto no recursivo de axiomas, hecho que escapaba a la mente de los matemticos. Una versin posterior y ms general del teorema de Gdel elimina la posibilidad de considerar sistemas deductivos ms potentes que los sistemas de primer orden, demostrando que no pueden ser consistentes y completos a la vez. Un aspecto a destacar dentro del teorema de incompletitud de Gdel, fu la idea de codicacin. Se indica un mtodo (numeracin de Gdel) mediante el cual se asigna un nmero de cdigo (entero positivo) a cada frmula bien formada del sistema (fbf) y a cada sucesin nita de frmulas bien formadas, de tal modo que la fbf o sucesin nita de fbf se recupera fcilmente a partir de su nmero de cdigo. A travs de este cdigo, los enunciados referentes a enteros positivos, pueden considerarse como enunciados referentes a nmeros de cdigo de expresiones, o
2

Cap. 1

Introduccin

incluso referentes a las propias expresiones. Esta misma idea fu posteriormente utilizada para codicar algoritmos como enteros positivos, y as poder considerar un algoritmo, cuyas entradas fuesen enteros positivos, como un algoritmo cuyas entradas fuesen algoritmos. El siguiente paso importante lo constituye la aparicin casi simultanea en 1936 de varias caracterizaciones independientes de la nocin de calculabilidad efectiva, en los trabajos de Church, Kleene, Turing y Post. Los tres primeros mostraban problemas que eran efectivamente indecidibles; Church y Turing probaron adems que el Entscheidungsproblem era un problema indecidible. Church propuso la nocin de funcin -denible como funcin efectivamente calculable. La demostracin de teoremas se convierte en una transformacin de una cadena de smbolos en otra, en clculo lambda, segn un conjunto de reglas formales. Este sistema result ser inconsistente, pero la capacidad para expresar-calcular funciones numricas como trminos del sistema llam pronto la atencin de l y sus colaboradores. Gdel habia recogido la idea de Herbrand de que una funcin f podra denirse por un conjunto de ecuaciones entre trminos que incluian a la funcin f y a smbolos para funciones previamente denidas, y precis esta idea requiriendo que cada valor de f se obtenga de las ecuaciones por sustitucin de las variables por nmeros y los trminos libres de variables por los valores que ya se habian probado que designaban. Esto dene la clase de las funciones recursivas de Herbrand-Gdel. En 1936, Church hace un esquema de la demostracin de la equivalencia entre las funciones -denibles y las funciones recursivas de Herbrand-Gdel (esta equivalencia tambin haba sido probada por Kleene ); y aventura que estas iban a ser las nicas funciones calculables por medio de un algoritmo a travs de la tesis que lleva su nombre, y utilizando la nocin de funcin -denible, di ejemplos de problemas de decisin irresolubles, y demostr que el Entscheidungsproblem era uno de esos problemas. Por otra parte Kleene, pocos meses despues, demuestra formalmente la equivalencia entre funciones -denible y funciones recursivas de Herbrand-Gdel, y d ejemplos de problemas irresolubles utilizando la nocin de funcin recursiva. La tercera nocin de funcin calculable proviene del matemtico ingls A. Turing, quin argument que la tercera cuestin de Hilbert (el Entscheidungsproblem) poda atacarse con la ayuda de una mquina, al menos con el concepto abstracto de mquina. Turing seal que haba tenido xito en caracterizar de un modo matemticamente preciso, por medio de sus mquinas, la clase de las funciones calculables mediante un algoritmo, lo que se conoce hoy como Tesis de Turing. Aunque no se puede dar ninguna prueba formal de que una mquina pueda tener esa propiedad, Turing di un elevado nmero de argumentos a su favor, en base a lo cual present la tesis como un teorema demostrado. Adems, utiliz su concepto de mquina para demostrar que existen funciones que no son calculables por un mtodo denido y en particular, que el Entscheidungsproblem era uno de esos problemas.

10

Modelos de Computacin I

Cuando Turing conoci los trabajos de Church-Kleene, demostr que los conceptos de funcin -denible y funcin calculable por medio de una mquina de Turing coinciden. Naturalmente a la luz de esto la Tesis de Turing resulta ser equivalente a la de Church. Finalmente, cabe resear el trabajo de E. Post. Este estaba interesado en marcar la frontera entre lo que se puede hacer en matemticas simplemente por procedimientos formales y lo que depende de la comprensin y el entendimiento. De esta forma, Post formula un modelo de procedimiento efectivo a travs de los llamados sistemas deductivos normales. Estos son sistemas puramente formales en los que puede deducirse sucesiones nitas de smbolos como consecuencia de otras sucesiones nitas de smbolos por medio de un tipo normalizado de reglas y a partir de un conjunto de axiomas. As pues, dada una sucesin nita de smbolos como entrada, las reglas permiten convertirla en una sucesin nita de salida. En su artculo, Post demostr resultados de incompletitud e indecibilidad en estos sistemas. Los resultados hasta ahora citados, se reeren a funciones totales. La existencia de algoritmos que con determinadas entradas nunca terminan, condujo de forma natural a considerar funciones parciales. Kleene fu el primero en hacer tal consideracin en 1938. El estudio de estas funciones ha mostrado la posibilidad de generalizar todos los resultados anteriores a funciones parciales. Por otro lado, el estudio de las funciones parciales calculables ha resultado esencial para el posterior desarrollo de la materia. Posteriormente, se demostr la equivalencia entre lo que se poda calcular mediante una mquina de Turing y lo que se poda calcular mediante un sistema formal en general. A la vista de estos resultados, la Tesis de Church-Turing es aceptada como un axioma en la teora de la computacin, y ha servido como punto de partida en la investigacin de los problemas que se pueden resolver mediante un algoritmo. Problemas no computables Usando la codicacin de Gdel, se demostr que era posible construir una mquina de propsito general, es decir, capaz de resolver cualquier problema que se pudiese resolver mediante un algoritmo. Dicha mquina tendra como entrada el entero que codicara el algoritmo solucin del problema y la propia entrada del problema, de tal forma, que la mquina aplicara el algoritmo codicado a la entrada del problema. Esta hipottica mquina puede considerarse como el padre de los actuales ordenadores de proposito general. Una de las cuestiones ms estudiadas en la teora de la computabilidad ha sido la posibilidad de construir algoritmos que nos determinen si un determinado algoritmo posee o no una determinada propiedad. As, sera interesante responder de forma automtica a cuestiones como: - Calculan los algoritmos A y B la misma funcin? (Problema de la equivalencia) - Parar el algoritmo A para una de sus entradas? (Problema de la parada) - Parar el algoritmo A para todas sus entradas? (Problema de la totalidad) - Calcula el algoritmo A la funcin f? (Problema de la vericacin?) etc . . . En un principio se fueron obteniendo demostraciones individuales de la no computabilidad

Cap. 1

Introduccin

11

de cada una de estas cuestiones, de forma que se tena la sensacin de que casi cualquier pregunta interesante acerca de algoritmos era no computable. A pesar de esto, y como consecuencia de la existencia de un programa universal hay otras muchas cuestiones interesantes que se han demostrado computables. El identicar los problemas que son computables y los que no lo son tiene un considerable inters, pues indica el alcance y los lmites de la computabilidad, y as demuestra los lmites tericos de los ordenadores. Adems de las cuestiones sobre algoritmos, se han encontrado numerosos problemas menos "generales"que han resultado ser no computables. Como ejemplo citamos: - Dcimo problema de Hilbert. Una ecuacin diofntica es la ecuacin de los ceros enteros de un polinomio con coecientes enteros. Se pregunta si hay un procedimiento efectivo que determine si una ecuacin diofntica tiene o no solucin. Por otro lado, son muchos los problemas interesantes que se han demostrado computables. Todas las funciones construidas por recursividad primitiva o minimalizacin a partir de funciones calculables resultan ser calculables como consecuencia de los trabajos de Church y Turing. Pero adems, otras funciones ms complejamente denidas tambin son computables. Como ejemplo ms interesante de aplicacin de este tipo de recursin tenemos la funcin de Ackermann : (0, y) = y + 1; (x + 1, 0) = (x, 1); (x + 1, y + 1) = (x, (x + 1, y)).

1.2. Diferentes Modelos de Computacin


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

12

Modelos de Computacin I

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

Cap. 1

Introduccin

13

de las evidencias a favor y de la falta de evidencias en contra, aceptamos la Tesis de Church que arma la equivalencia de ambas clases. Se clasican los problemas segn que siempre sea posible encontrar la solucin por medio de un algoritmo (problemas computables) que no existan algoritmos que siempre produzcan una solucin (problemas no computables). Surge de modo inmediato la cuestin B) de como disear un programa (algoritmo especicado para poder ser ejecutado por un ordenador) que resuelva un problema dado. En la primera poca del desarrollo informtico los programas dependan intrnsecamente del ordenador utilizado, pues se expresaban en lenguaje mquina, directamente interpretable por el ordenador. Surgi entonces la necesidad de idear otros mecanismos para construir y expresar los programas. El hilo conductor de tales mecanismos fu la abstraccin: separar el programa del ordenador y acercarlo cada vez ms al problema. Los subprogramas empezaron ya a usarse a principios de los 50, dando lugar posteriormente al primer tipo de abstraccin, la procedimental. A principios de los 60, se empezaron a entender los conceptos abstractos asociados a estructuras de datos bsicas pero an no se separaban los conceptos de las implementaciones. Con el nacimiento en esta poca de los primeros lenguajes de alto nivel, Fortran p.ej., se lleg a la abstraccin sintctica, al abstraerse la semntica de las expresiones matemticas y encapsular el acceso a ellas a travs de la sintaxis propia del lenguaje. En cualquier caso con el desarrollo de estos lenguajes de alto nivel se solventaron los problemas de exibilidad en la comunicacin con el ordenador, y se empezaron a estudiar los algoritmos de forma independiente del ordenador concreto en que se probaran y del lenguaje concreto en que se expresaran. Aparece la necesidad de traducir los programas escritos en lenguajes de alto nivel al lenguaje mquina, de forma automtica, y se buscan mquinas o procedimientos que puedan reconer el lxico y la sintxis de dichos lenguajes. Hay que comentar que no hay un algoritmo para ensear a disear algoritmos, y que muchas veces el proceso de construccin puede llegar a ser muy poco disciplinado. No obstante, existen tcnicas de diseo de algoritmos, que vienen a ser modelos abstractos de los mismos aplicables a gran variedad de problemas reales. Una vez construido un programa para un problema, surge la cuestin C) de si lo resuelve realmente. Normalmente los programadores prueban sus programas sobre una gran cantidad de datos de entrada para descubrir la mayoria de los errores lgicos presentes, aunque con este mtodo (al que suele denominarse de prueba y depuracin) no se puede estar completamente seguro de que el programa no contiene errores. Necesitaramos para realizar la vericacin formal, reglas que describan de forma precisa el efecto que cada instruccin tiene en el estado actual del programa, para, aplicando dichas reglas demostrar rigurosamente que lo que hace el programa coincide con sus especicaciones. En cualquier caso y cuando la prueba formal resulte muy complicada, podemos aumentar la conanza en nuestro programa realizando en el mismo los "testuidadosos de que hablbamos al principio.

14

Modelos de Computacin I

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

Cap. 1

Introduccin

15

perl de la plaza no se ocupa directamente de este problema que adems se estudia ampliamente en otras materias y asignaturas del curriculum de Informtica.

1.2.1. Autmatas y Lenguajes


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

16

Modelos de Computacin I

nito. Rabin y Scott (1960) obtienen un modelo de computador con una cantidad nita de memoria, al que llamaron autmata de estados nitos. Demostraron que su comportamiento posible, era bsicamente el mismo que el descrito mediante expresiones regulares, desarrolladas a partir de los trabajos de McCulloch y Pitts. No obstante lo dicho, para un alfabeto concreto, no todos los lenguajes que se pueden construir son regulares. Ni siquiera todos los interesantes desde el punto de vista de la construccin de algortmos para resolver problemas. Hay entonces muchos problemas que no son calculables con estos lenguajes. Esto pone de maniesto las limitaciones de los autmatas nitos y las gramticas regulares, y propicia el desarrollo de mquinas reconocedoras de otros tipos de lenguajes y de las gramticas correspondientes, asociadas a los mismos. En 1956, la Princenton Univ. Press publica el libro Automata Studies, editado por C. Shannon y J. McCarthy, donde se recogen una serie de trabajos sobre autmatas y lenguajes formales. D. A. Huffman (1954) ya utiliza conceptos como estado de un autmata y tabla de transiciones. N. Chomsky (1956) propone tres modelos para la descripcin de lenguajes, que son la base de su futura jerarqua de los tipos de lenguajes, que ayud tambin en el desarrollo de los lenguajes de programacin. Para ello intent utilizar autmatas para extraer estructuras sintcticas (... el ingls no es un lenguaje de estados nitos) y dirige sus estudios a las gramticas, indicando que la diferencia esencial entre autmatas y gramticas es que la lgica asociada a los autmatas (p.e., para ver la equivalencia entre dos de ellos) es Decidible, mientras que la asociada a las gramticas no lo es. Desarrolla el concepto de gramtica libre del contexto, en el transcurso de sus investigaciones sobre la sintxis de los lenguajes naturales. Backus y Naur desarrollaron una notacin formal para describir la sintxis de algunos lenguajes de programacin, que bsicamente se sigue utilizando todava, y que poda considerarse equivalente a las gramticas libres del contexto. Consideramos entonces los lenguajes libres (independientes) del contexto, y las gramticas libres del contexto y los autmatas con pila, como forma de caracterizarlos y manejarlos. Los distintos lenguajes formales que se pueden construir sobre un alfabeto concreto pueden clasicarse en clases cada vez ms amplias que incluyen como subconjunto a las anteriores, de acuerdo con la jerarqua establecida por Chomsky en los aos 50. Se puede llegar as, de una forma casi natural a considerar las mquinas de Turing, establecidas casi 20 aos antes, como mquinas reconocedoras de los lenguajes formales dependientes del contexto o estructurados por frases, e incluso a interpretar la Tesis de Turing como que n sistema computacional nunca podr efectuar un anlisis sintctico de aquellos lenguajes que estn por encima de los lenguajes estructurados por frases, segn la jerarqua de Chomsky". En consecuencia, podemos utilizar la teora de autmatas y los conceptos relativos a gramticas sobre distintos tipos de lenguajes, para decidir (si se puede) si una funcin (o problema) es calculable, en base a que podamos construir un algoritmo solucin mediante un lenguaje que

Cap. 1

Introduccin

17

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

1.3. Lenguajes y Gramticas. Aspectos de su traduccin


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

1.3.1. Alfabetos y Palabras


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

18

Modelos de Computacin I

Denicin 1 Un alfabeto es un conjunto nito A. Sus elementos se llamarn smbolos o letras. Para notar los alfabetos, en general, usaremos siempre que sea posible las primeras letras en maysculas: A, B, C , . . .. Para los smbolos trataremos de emplear las primeras letras en minsculas: a, b, c, . . . o nmeros. Las siguientes son algunas normas de notacin que respetaremos en lo posible a lo largo del curso. En casos particulares en los que sea imposible seguirlas lo indicaremos explicitamente. Ejemplo 1 A = {0, 1} es un alfabeto con smbolos 0 y 1. Tambin es un alfabeto B = {< 0, 0 >, < 0, 1 >, < 1, 0 >, < 1, 1 >} con smbolos < 0, 0 > , < 0, 1 >, < 1, 0 > y < 1, 1 >. En este caso no hay que confundir los smbolos del alfabeto B con los simbolos del lenguaje (o ms precisamente meta-lenguaje) que usamos para expresarnos todos los das. Son dos cosas totalmente distintas. Nosotros para comunicarnos usamos un lenguaje que tiene unos smbolos que son las letras del alfabeto latino, los nmeros, las letras del alfabeto griego, y una serie de smbolos especiales propios del lenguaje matemtico (el meta-lenguaje). Con este lenguaje tambin denimos los conceptos de alfabeto y smbolo. Ahora bin, los smbolos de un lenguaje no tienen que ser algunos de los usados en el metalenguaje, sino que cada uno puede estar formado por 0, 1 o ms smbolos del metalenguaje. De hecho como en este ltimo caso (lenguaje B), un smbolo del alfabeto denido est formado por varios smbolos del metalenguaje. Para que esto no de lugar a confusin, siempre que ocurra una situacin similar, encerraremos los smbolos entre ngulos < . . . >. Esto indicar que todo lo que aparece es un nico smbolo. Denicin 2 Una palabra sobre el alfabeto A es una sucesin nita de elementos de A. Es decir u es una palabra sobre A, si y solo si U = a1 . . . an donde ai A, i = 1, . . ., n. Por ejemplo, si A = {0, 1} entonces 0111 es una palabra sobre este alfabeto. El conjunto de todas las palabras sobre un alfabeto A se nota como A . Para las palabras usaremos, en lo posible, las ltimas letras del alfabeto latino en minsculas: u, v, x, y, z, . . .. Denicin 3 Si u A , entonces la logitud de la palabra u es el nmero de smbolos de A que contiene. La longitud de u se nota como |u|. Es decir si u = a1 . . . an , entonce |u| = n. Denicin 4 La palabra vaca es la palabra de longitud cero. Es la misma para todos los alfabetos, y se nota como . El conjunto de cadenas sobre un alfabeto A excluyendo la cadena vaca se nota como A + . Usaremos indistintamente palabra o cadena. Si no hay confusin, la palabra formada por un solo smbolo se representa por el propio smbolo. La operacin fundamental en el conjunto de las cadenas A es la concatenacin.

Cap. 1

Introduccin

19

Denicin 5 Si u, v A , u = a1 . . . an , v = b1 . . . bn , se llama concatenacin de u y v a la cadena u.v (o simplemente uv) dada por a1 . . . an b1 . . . bm . La concatenacin tiene las siguientes propiedades: 1. |u.v| = |u| + |v|, u, v A 2. Asociativa.- u.(v.w) = (u.v).w, u, v, w A 3. Elemento Neutro.- u. = .u = u, u A Los propiedades asociativa y elemento neutro dotan al conjunto de las cadenas con la operacin de concatenacin de la estructura de monoide. La propiedad conmutativa no se verica. Consideramos la iteracin n-sima de una cadena como la concatenacin con ella misma n veces, y se dene de forma recursiva: Denicin 6 Si u A entonce u0 = ui+1 = ui .u, i 0 Denicin 7 Si u = a1 . . . an A , entonces la cadena inversa de u es la cadena u1 = an . . . a1 A .

1.3.2. Lenguajes
Denicin 8 Un lenguaje sobre el alfabeto A es un subconjunto del conjunto de las cadenas sobre A: L A . Los lenguajes los notaremos con las letras intermedias del alfabeto latino en maysculas. Ejemplo 2 Los siguientes son lenguajes sobre un alfabeto A, cuyo contenido asumimos conocer claramente: L1 = {a, b, }, smbolos a, b y la cadena vaca L2 = {ai bi | i = 0, 1, 2, . . .}, palabras formadas de una sucesin de smbolos a, seguida de la misma cantidad de smbolos b. L3 = {uu1 | u A }, palabras formadas con smbolos del alfabeto A y que consisten de una palabra, seguida de la misma palabra escrita en orden inverso.

20

Modelos de Computacin I L4 = {an | n = 1, 2, 3, . . .}, palabras que tienen un nmero de smbolos a que sea cuadrado perfecto, pero nunca nulo.
2

Aparte de las operaciones de unin e interseccin de lenguajes, dada su condicin de conjuntos existe la operacin de concatenacin. Denicin 9 If L1 , L2 son dos lenguajes sobre el alfabeto A, la concatenacin de estos dos lenguajes es el que se obtiene de acuerdo con la siguiente expresin, L1 L2 = {u1 u2 | u1 L1 , u2 L2 } Ejemplo 3 Si L1 = {0i 1i : i 0}, L2 = {1i 0i : i 0} entonces, L1 L2 = {0i 1i 1 j 0 j : i, j 0}

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

Li

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


i1

Li

Cap. 1

Introduccin

21

Propiedades:
L+ = L si L L+ = L {} si L Ejemplo 4 Si L = {0, 01}, entonces, L = Conjunto de palabras sobre {0, 1} en las que un uno va siempre precedido de un cero. Por otra parte, L+ = Conjunto de palabras sobre {0, 1} en las que un uno va siempre precedido de un cero y distintas de la palabra vaca. Denicin 13 Si L es un lenguaje, el lenguaje inverso de L es el lenguaje dado por: L1 = {u | u1 L} Denicin 14 Si L es un lenguaje sobre el alfabeto A, entonces la cabecera de L es el lenguaje dado por CAB(L) = {u | u A y v A tal que uv L} Es decir, la CAB(L) contiene todas las palabras del lenguaje y aquellas otras que tengan como primeros caracteres, alguna palabra del mismo. Ejemplo 5 Si L = {0i 1i : i 0}, entonces CAB(L) = {0i 1 j : i j 0} . Denicin 15 Si A1 y A2 son dos alfabetos, una aplicacin
h : A 1 A2

se dice que es un homomorsmo si y solo si h(uv) = h(u)h(v) Consecuencias: h() = h(a1 . . . an ) = h(a1 ) . . . h(an ) Ejemplo 6 Si A1 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, A2 = {0, 1} la siguiente aplicacin es un homorsmo

22

Modelos de Computacin I h(0) = 0000, h(4) = 0100, h(8) = 1000 h(1) = 0001, h(5) = 0101, h(9) = 1001 h(2) = 0010, h(6) = 0110, h(3) = 0011 h(7) = 0111

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

1.3.3. Gramticas Generativas


Desde un punto de vista matemtico una gramtica se dene de la siguiente forma: Denicin 16 Una gramtica generativa es un cuadrupla (V, T , P, S) en la que V es un alfabeto, llamado de variables o smbolos no terminales. Sus elementos se suelen representar con letras maysculas. T es un alfabeto, llamado de smbolos terminales. Sus elementos se suelen representar con letras minsculas. P es un conjunto de pares (, ), llamados reglas de produccin, donde , (V T ) y contiene, al menos un smbolo de V . El par (, ) se suele representar como . S es un elemento de V , llamado smbolo de partida. La razn de notar los elementos del alfabeto V con letras maysculas es para no confundirlos con los smbolos terminales. Las cadenas del alfabeto (V T ) se notan con letras griegas para no confundirlas con las cadenas del alfabeto T , que seguirn notndose como de costumbre: u, v, x . . .. Ejemplo 8 Sea la gramtica (V, T , P, S) dada por los siguientes elementos, V = {E } T = {+, , (, ), a, b, c}

Cap. 1 P est compuesto por las siguientes reglas de produccin E E + E , E E E , E (E ), E a, E b, E c S=E

Introduccin

23

Una gramtica se usa para generar las distintas palabras de un determinado lenguaje. Esta generacin se hace mediante una aplicacin sucesiva de reglas de produccin comenzando por el smbolo de partida S. Las siguientes deniciones expresan esta idea de forma ms rigurosa. Denicin 17 Dada una gramtica G = (V, T , P, S) y dos palabras , (V T ) , decimos que es derivable a partir de en un paso ( = ) si y solo si existe una produccin tal que es una subcadena de . se puede obtener a partir de , cambiando la subcadena for . Ejemplo 9 Haciendo referencia a la gramtica del ejemplo anterior, tenemos las siguientes derivaciones, E = E + E = (E ) + E = (E ) + (E ) = (E E ) + (E ) = (E E ) + (E E ) Denicin 18 Dada una gramtica G = (V, T , P, S) y dos palabras , (V T ) , decimos que es derivable de ( = ), si y solo si existe una sucesin de palabras 1 , . . ., n (n 1) tales que = 1 = 2 = . . . = n = Ejemplo 10 En el caso anterior podemos decir que (E E ) + (E E ) es derivable a partir de E: E = (E E ) + (E E ) . Denicin 19 Se llama lenguaje generado por una gramtica G = (V, T , P, S) al conjunto de cadenas formadas por smbolos terminales y que son derivables a partir del smbolo de partida. Es decir, L(G) = {u T | S = u}

24

Modelos de Computacin I

Ejemplo 11 En el caso de la gramtica de los ejemplos anteriores (E E ) + (E E ) no pertenece al lenguaje generado por G, ya que hay smbolos que no son terminales. Sin embargo, (a + c) (a + b) si pertenece a L(G), ya que se puede comprobar que es derivable a partir de E (smbolo de partida) y solo tiene smbolos terminales. Si en una gramtica comenzamos a hacer derivaciones a partir del smbolo original S, dicha derivacin acabar cuando solo queden smbolos terminales, en cuyo caso la palabra resultante pertenece a L(G), o cuando queden variables pero no se pueda aplicar ninguna regla de produccin, en cuyo caso dicha derivacin no puede llevar a ninguna palabra de L(G). En general, cuando estemos haciendo una derivacin puede haber ms de una regla de produccin aplicable en cada momento. Cuando no sea importante distinguir si la derivacin de una palabra en una gramtica se haya realizado en uno o varios pasos, entonces eliminaremos la del smbolo de derivacin. As, escribiremos = , en lugar de = . Ejemplo 12 Sea G = (V, T , P, S) una gramtica, donde V = {S, A, B}, T = {a, b}, las reglas de produccin son S aB, A bAA, S bA, B b, A a, B bS, A aS, B aBB

y el smbolo de partida es S. Esta gramtica genera el lenguaje L(G) = {u | u {a, b}+ y Na (u) = Nb (u)} donde Na (u) y Nb (u) son el nmero de apariciones de smbolos a y b, en u, respectivamente. Esto es fcil de ver interpretando que, S genera (o produce) palabras con igual nmero de a que de b. A genera palabras con una a de ms. B produce palabras con una b de ms. S genera palabras con igual nmero de a que de b. Hay que demostrar que todas las palabras del lenguaje tienen el mismo nmero de a que de b, hay que probar que todas las palabras generadas cumplen esta condicin y que todas las palabras que cumplen esta condicin son generadas. Para lo primero basta con considerar el siguiente razonamiento. Supongamos Na+A () y Nb+B () que son el nmero de a + el nmero de A en y el nmero de b + el nmero de B en , respectivamente. Entonces,

Cap. 1

Introduccin

25

Cuando se empieza a generar una palabra, comenzamos con S y tenemos la igualdad Na+A (S) = Nb+B (S) = 0. Tambin se puede comprobar que si se obtiene de en un paso de derivacin y Na+A () = Nb+B (), entonces Na+A ( ) = Nb+B ( ) Si la condicin de igualdad de Na+A y Nb+B se verica al principio y, si se verica antes de un paso, entonces se verica despus de aplicarlo, necesariamente se verica al nal de la derivacin. Si hemos derivado u, entonces Na+A (u) = Nb+B (u). Como u no tiene variables, entonces Na+A (u) = Na (u) y Nb+B (u) = Nb (u), por lo tanto, Na (u) = Nb (u), es decir si u es generada contiene el mismo nmero de a que de b. Para demostrar que todas las palabras del lenguaje son generadas por la gramtica, damos el siguiente algoritmo que en n pasos es capaz de generar una palabra de n smbolos. El algoritmo genera las palabras por la izquierda obteniendo, en cada paso, un nuevo smbolo de la palabra a generar.

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

26

Modelos de Computacin I

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

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

Cap. 1

Introduccin

27

1.3.4. Jerarqua de Chomsky


De acuerdo con lo que hemos visto, toda gramtica genera un nico lenguaje, pero distintas gramticas pueden generar el mismo lenguaje. Podramos pensar en clasicar las gramticas por el lenguaje que generan, por este motivo hacemos la siguiente denicin. Denicin 20 Dos gramticas se dicen debilmente equivalentes si generan el mismo lenguaje. Sin embargo, al hacer esta clasicacin nos encontramos con que el problema de saber si dos gramticas generan el mismo lenguaje es indecidible. No existe ningn algoritmo que acepte como entrada dos gramticas y nos diga (la salida del algoritmo) si generan o no el mismo lenguaje. De esta forma, tenemos que pensar en clasicaciones basadas en la forma de la gramtica, ms que en la naturaleza del lenguaje que generan. La siguiente clasicacin se conoce como jerarqua de Chomsky y sigue esta direccin. Denicin 21 Una gramtica se dice que es de Tipo 0 Cualquier gramtica. Sin restricciones. Tipo 1 Si todas las producciones tienen la forma 1 A2 1 2 donde 1 , 2 , (V T ) , A V, y = , excepto posiblemente la regla S , en cuyo caso S no aparece a la derecha de las reglas. Tipo 2 Si cualquier produccin tiene la forma A dode A V, (V T ) . Tipo 3 Si toda regla tiene la forma A uB A u donde u T y A, B V Denicin 22 Un lenguaje se dice que es de tipo i(i = 0, 1, 2, 3) si y solo si es generado por una gramtica de tipo i. La clase o familia de lenguajes de tipo i se denota por L i .

28

Modelos de Computacin I

L3 L2 L1 L0

Figura 1.1: Estructura de las clases de lenguajes Se puede demostar que L3 L2 L1 L0 . Las gramticas de tipo 0 se llaman tambin gramticas con estructura de frase, por su origen lingustico. Los lenguajes aceptados por las gramticas de tipo 0 son los recursivamente enumerables. Las gramticas de tipo 1 se denominan dependientes del contexto. Los lenguajes aceptados por estas gramticas son los lenguajes dependientes del contexto. Las gramticas de tipo 2, as como los lenguajes generados, se llaman independientes del contexto. Las gramticas de tipo 3 se denominan regulares o de estado nito. Los lenguajes aceptados por estas gramticas se denominan conjuntos regulares. Los homorsmos son tiles para demostrar teoremas. Teorema 1 Para toda gramtica G = (V, T , P, S) podemos dar otra gramtica G = (V , T , P , S) que genere el mismo lenguaje y tal que en la parte izquierda de las reglas solo aparezcan variables. Demostracin Si la gramtica es de tipo 3 2 no hay nada que demostrar. Si la gramtica es de tipo 0 1, entonces para cada ai T introducimos una variable Ai V . Entonces hacemos V = V {A1 , . . . , Ak }, donde k es el nmero de smbolos terminales. Ahora P estar formado por las reglas de P donde, en todas ellas, se cambia a i por Ai . Aparte de ello aadimos una regla Ai ai para cada ai T. Podemos ver que L(G) L(G ). En efecto, si derivamos u = ai1 . . . ain L(G), entonces usando las reglas correspondientes, podemos derivar Ai1 . . . Ain en G . Como en G tenemos las reglas Ai ai , entonces podemos derivar u L(G ). Para demostrar la inclusin inversa: L(G ) L(G), denimos un homomorsmo h de (V T ) en (V T ) de la siguiente forma,

Cap. 1 1. h(Ai ) = ai , i = 1, . . ., k 2. h(x) = x, x V T

Introduccin

29

Ahora se puede demostrar que este homorsmo transforma las reglas: si P , entonces h() h() es una produccin de P h() = h(). Partiendo de esto se puede demostrar que si = entonces h() = h(). En particular, como consecuencia, si S = u, u T , entonces h(S) = S = h(u) = u. Es decir, si u L(G ) entonces u L(G). Con lo que denitivamente L(G) = L(G ).

Ejercicios
1. Demostrar que la gramtica G = ({S}, {a, b}, {S , S aSb}, S) genera el lenguaje L = {ai bi | i = 0, 1, 2} Solucin: Si seguimos este procedimiento, nos encontramos que podemos ir generando todas las palabras de la forma ai bi , y siempre nos queda la palabra ai Sbi para seguir generando las palabras de mayor longitud. Por otra parte, estas son las nicas palabras que se pueden generar. 2. Encontrar el lenguaje generado por la gramtica G = ({A, B, S}, {a, b}, P, S) donde P contiene las siguientes producciones S aAB Aa SaB bB a B SA Ab SBb B ab

Solucin: El resultado es el Lenguaje vaco: nunca se puede llegar a generar una palabra con smbolos terminales. Siempre que se sustituye S aparece A, y siempre que se sustituye A aparece S.

30

Modelos de Computacin I

3. Encontrar una gramtica libre del contexto para generar cada uno de los siguientes lenguajes a) L = {ai b j | i, j I N , i j} Solucin: S aSb S S Sb

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

c) L = {ai bi a j b j | i, j I N} Solucin: Podemos generar {ai bi | i I N } con: S1 aS1 b, El lenguaje L se puede generar aadiendo: S S 1 S1 siendo S el smbolo inicial. S1

Cap. 1 d) L = {ai bi | i I N } {bi ai | i I N} Solucin: Podemos generar {ai bi | i I N } con: S1 aS1 b, y {bi ai | i I N } con S2 bS2 a, El lenguaje L se puede generar aadiendo: S S1 , siendo S el smbolo inicial. e) L = {uu1 | u {a, b} } Solucin: S aSa, S bSb, S S S2 S1 S2

Introduccin

31

f) L = {ai b j ci+ j | i, j I N} Solucin: S aSc, B bBc, S B, B

donde N es el conjunto de los nmeros naturales incluyendo el 0. 4. Determinar si la gramtica G = ({S, A, B}, {a, b, c, d }, P, S) donde P es el conjunto de reglas de produccin S AB B cB A Ab Bd Aa

32

Modelos de Computacin I genera un lenguaje de tipo 3. Solucin: Esta gramtica genera el lenguaje: {abi c j d : i, j I N }, y este lenguaje se puede generar mediante la gramtica: S aB, B bB, B C, C cC , Cd Como esta gramtica es de tipo 3, el lenguaje lo es.

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

33

34

Modelos de Computacin I

Los autmatas nitos son capaces de reconocer solamente, un determinado tipo de lenguajes, llamados Lenguajes Regulares, que pueden ser caracterizados tambin, mediante un tipo de gramticas llamadas tambin regulares. Una forma adicional de caracterizar los lenguajes regulares, es mediante las llamadas expresiones regulares, que son las frases del lenguaje, construidas mediante operadores sobre el alfabeto del mismo y otras expresiones regulares, incluyendo el lenguaje vaco. Estas caracterizaciones de los lenguajes regulares se utilizan en la prctica, segn que la situacin concreta est favorecida por la forma de describir el lenguaje de cada una de ellas. Los autmatas nitos se utilizan generalmente para vericar que las cadenas pertenecen al lenguaje, y como un analizador en la traduccin de algortmos al ordenador. Las gramticas y sus reglas de produccin se usan frecuentemente en la descripcin de la sintaxis de los lenguajes de programacin que se suele incluir en los manuales correspondientes. Por otro lado, las expresiones regulares proporcionan una forma concisa y relativamente sencilla (aunque menos intuitiva) para describir los lenguajes regulares, poniendo de maniesto algunos detalles de su estructura que no quedan tan claros en las otras caracterizaciones. Su uso es habitual en editores de texto, para bsqueda y sustitucin de cadenas. En denitiva, las caracterizaciones sealadas de los lenguajes (formales) regulares, y por tanto ellos mismos, tienen un uso habitual en la computacin prctica actual. Esto por s mismo justicara su inclusin en un curriculum de computacin terica.

2.1. Autmatas Finitos Determinsticos


Antes de dar una denicin formal de lo que es un autmata vamos a dar una descripcin intuitiva mediante un ejemplo. Ejemplo 14 Vamos a disear un autmata que reconozca el paso de un alumno por una asignatura, por ejemplo, Modelos de Computacin I. Representar las distintas decisiones que se realizan y si se aprueba o suspende la asignatura. Se controla que no haya ms de dos convocatorias por ao y se termina cuando se aprueba la asignatura. Habr un alfabeto de entrada contendr los siguientes elementos: P: El alumno se presenta a un examen. N: El alumno no se presenta a un examen. A: El alumno aprueba un examen. S: El alumno suspende un examen.

Cap. 2

Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3


S P P S

35

Sept1.

Fin2

Inicio
N

Febr.
A

Dec1
A

Fin1
P N

Dec2
N N

Sept2.
S

Dec3
P

Dic.

Fin3

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

36

Modelos de Computacin I 1 0 0 q0

q1

Figura 2.2: Autmata de Estado Finito A es un alfabeto llamado alfabeto de entrada es una aplicacin llamada funcin de transicin : QA Q q0 es un elemento de Q, llamado estado inicial F es un subconjunto de Q, llamado conjunto de estado nales. Desde el punto de vista intuitivo, podemos ver un autmata nito como una caja negra de control (ver Figura 2.2), que va leyendo smbolos de una cadena escrita en una cinta, que se puede considerar ilimitada por la derecha. Existe una cabeza de lectura que en cada momento es situada en una casilla de la cinta. Inicialmente, esta se sita en la casilla de ms a la izquierda. El autmata en cada momento est en uno de los estado de Q. Inicialmente se encuentra en q 0 . En cada paso, el autmata lee un smbolo y segn el estado en que se encuentre, cambia de estado y pasa a leer el siguiente smbolo. As sucesivamente hasta que termine de leer todos los smbolos de la cadena. Si en ese momento la mquina est en un estado nal, se dice que el autmata acepta la cadena. Si no est en un estado nal, la rechaza. Denicin 24 El diagrama de transicin de un Autmata de Estado Finito es un grafo en el que los vrtices representan los distintos estados y los arcos las transiciones entre los estados. Cada arco va etiquetado con el smbolo que corresponde a dicha transicin. El estado inicial y los nales vienen sealados de forma especial (por ejemplo, con un ngulo el estado inicial y con un doble crculo los nales). Ejemplo 15 Supongamos el autmata M = (Q, A, q0 , , F ) donde Q = {q0 , q1 , q2 } A = {a, b}

Cap. 2

Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3 a q0 a b b a q2 q1 b

37

Figura 2.3: Diagrama de Transicin Asociado a un Autmata de Estado Finito La funcin de transicin est denida por las siguientes igualdades: (q0 , a) = q1 (q1 , a) = q1 (q2 , a) = q1 F = {q1 } El diagrama de transicin viene expresado en la Figura 2.3. (q0 , b) = q2 (q1 , b) = q2 (q2 , b) = q0

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


Para describir formalmente el comportamiento de un autmata de estado nito, vamos a introducir el concepto de conguracin y paso de clculo. Denicin 25 Si M = (Q, A, , q0 , F ) es un autmata de estado nito una conguracin es un elemento del producto cartesiano Q A . Una conguracin es un par (q, u) donde q es un estado y u una palabra. Intuitivamente una conguracin contiene los elementos que determinan la evolucin futura del autmata. En este sentido, q ser el estado en el que se encuentra el autmata y u lo que queda por leer en un momento dado. Inicialmente, autmata est en el estado inicial q0 y nos queda por leer toda la palabra de entrada. El siguiente concepto recoge esta idea. Denicin 26 Si M = (Q, A, , q0 , F ) es una autmata nito determinista y u A es una palabra, entonces se llama conguracin inicial asociada a esa palabra a la conguracin (q 0 , u).

38

Modelos de Computacin I

Intuitivamente, la conguracin inicial indica que estamos en el estado inicial y nos queda por leer toda la palabra u. A continuacin denimos la relacin paso de clculo entre dos conguraciones. Denicin 27 Si M = (Q, A, , q0 , F ) es una autmata nito determinista y ( p, u), (q, v) son dos conguraciones, decimos que se puede pasar de ( p, u) a (q, v) en un paso de clculo, lo que se nota como ( p, u) (q, v) si y slo si u = av, donde a A y ( p, a) = q. Finalmente, denimos la relacin de clculo entre dos conguraciones. Denicin 28 Si M = (Q, A, , q0 , F ) es una autmata nito determinista y ( p, u), (q, v) son dos conguraciones, decimos que puede pasar de ( p, u) a (q, v) en una secuencia de clculo, lo que se nota como ( p, u) (q, v) si y solo si existe una sucesin de conguraciones: ( p0 , u0 ), . . . ( pn , un ) donde n 1, de tal forma que ( p0 , u0 ) = ( p, u), ( pn , un ) = (q, v) y ( pi , ui ) ( pi+1 , ui+1 ), i < n. Existe otro enfoque alternativo para denir formalmente el clculo asociado a un autmata de estado nito y consiste en denir la funcin de transicin de un autmata aplicada a una palabra. Esta funcin que llamaremos se dene de forma recursiva Denicin 29 Si M = (Q, A, , q0 , F ) es un autmata de estado nito se dene la funcin de transicin asociada a palabras, como la funcin : Q A Q dada por (q, ) = q (q, aw) = ((q, a), w), w A , a A

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

es la siguiente: ( p, u) = q si y slo si ( p, u)

(q, ).

Cap. 2

Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3 0 q0 1 1 0 q1

39

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

2.1.2. Lenguaje aceptado por un Autmata de Estado Finito


Denicin 30 Una palabra u A se dice aceptada por un autmata M = (Q, A, , q0 , F ) si y solo si existe un q F tal que (q0 , u) rechazada por el autmata.

(q, ). En caso contrario, se dice que la palabra es

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

(q, ), q F }

Ejemplo 17 El autmata dado por el diagrama de transicin de la Figura 2.4 acepta el lenguaje formado por aquellas cadenas con un nmero impar de unos. Ejemplo 18 Los autmatas suelen servir para reconocer constantes o identicadores de un lenguaje de programacin. Supongamos, por ejemplo, que los reales vienen denidos por la gramtica G = (V, T , P, S) en la que T = {+, , E , 0, 1, . . .., 9, .} V = {< Signo >, < Digito >, < Natural >, < Entero >, < Real >} S =< Real > P contiene las siguientes producciones < Signo > +| < Digito > 0|1|2|3|4|5|6|7|8|9

40

Modelos de Computacin I

E , +,

+, , .

q2
0, . . . , 9

0, . . . , 9

q8
E

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

q5

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

.
0, . . . , 9 +,

0, . . . , 9

q0

q3
E , +, , .

q4

0, . . . , 9 +,

q7
E , +, , .

q1
E, .

E , +, , .

q6
E, .

Figura 2.5: Autmata Finito Determinista que acepta constantes reales <Natural><Digito> | <Digito><Natural> <Entero><Natural> <Entero><Signo><Natural> <Real><Entero> <Real><Entero>. <Real><Entero> . <Natural> <Real><Entero> . <Natural> E <Entero> Este lenguaje puede ser descrito tambin por un autmata de estado nito, como el de la Figura 18, en el que el alfabeto es A = {0, 1, 2, . . .., 9, +, , E }. Si un lenguaje es aceptado por un autmata de estado nito, tenemos un procedimiento algortmico sencillo que nos permite decir qu palabras pertenecen al lenguaje y qu palabras no pertenecen. Es mucho ms cmodo que la gramtica inicial, aunque la gramtica es ms expresiva. No todos los lenguajes pueden describirse mediante autmatas de estado nito. Los ms importantes son los identicadores y constantes de los lenguajes. Sin embargo, es importante sealar que a partir de una gramtica de tipo 3 podemos construir de forma algortmica un autmata que acepta el mismo lenguaje que el generado por la gramtica.

Cap. 2

Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3


S

41

R
B B, D, Z , H S, Z , D Z

RF
H

E
B, D, Z , H , S

B, H , S

RD
D

Figura 2.6: Recepcin de Ficheros en el protocolo Kermit

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

42

Modelos de Computacin I

2.2. Autmatas Finitos No-Determinsticos (AFND)


En este apartado vamos a introducir el concepto de autmatas nitos no determinsticos (AFND) y veremos que aceptan exactamente los mismos lenguajes que los autmatas determinsticos. Sin embargo, sern importantes para demostrar teoremas y por su ms alto poder expresivo. En la denicin de autmata no-determinstico lo nico que cambia, respecto a la denicin de autmata determinstico es la funcin de transicin. Antes estaba denida : QA Q y ahora ser una aplicacin de Q A en (Q) (subconjuntos de Q): : Q A (Q) La denicin completa quedara comos sigue. Denicin 32 Un autmata nito no-determinstico es una quintupla M = (Q, A, , q 0 , F ) en que Q es un conjunto nito llamado conjunto de estados A es un alfabeto llamado alfabeto de entrada es una aplicacin llamada funcin de transicin : Q A (Q) q0 es un elemento de Q, llamado estado inicial F es un subconjunto de Q, llamado conjunto de estado nales. La interpretacin intuitiva es que ahora el autmata, ante una entrada y un estado dado, puede / ). Es evolucionar a varios estados posibles (incluyendo un solo estado o ninguno si (q, a) = 0 decir es como un algoritmo que en un momento dado nos deja varias opciones posibles o incluso puede no dejarnos ninguna. Una palabra se dice aceptada por un AFND si, siguiendo en cada momento alguna de las opciones posibles, llegamos a un estado nal. A continuacin, vamos a extender denida en Q A a una funcin denida en (Q) A, es decir, para que se pueda aplicar a conjuntos de estados, no slo a un estado dado. se dene de la siguiente forma,

Cap. 2

Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3

43

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

(q, a)

Esta funcin se puede extender para aplicarse tambin a palabras de la siguiente forma: Si B Q, (B, ) = B (B, au) = ( (B, a), u) se puede aplicar tambin a un slo estado de acuerdo con la siguiente expresin: (q, u) = ({q}, u) Con estos elementos podemos denir cuando una palabra es aceptada por un autmata nodeterminstico. Denicin 33 Sea M = (Q, A, , q0 , F ) un autmata nito no-determinstico y u A . Se dice /. que la palabra u es aceptada por M si y solo si (q0 , u) F = 0 Denicin 34 Sea M = (Q, A, , q0 , F ) un AFND, se llama lenguaje aceptado por el autmata al conjunto de palabras de A que acepta, es decir /} L(M ) = {u A | (q0 , u) F = 0 Cuando no haya lugar a confusin, ser representadas como , simplemente. En clase, el lenguaje aceptado por un autmata no determinista se ha denido de forma distinta, pero ambas deniciones son totalmente equivalentes. Se dene en funcin de la denicin de la relacin de proceso de clculo entre dos conguraciones que, anlogamente como se hizo con los autmatas deterministas, se basa en denir los siguientes elementos: Descripcin Instantnea o Conguracin: Un elemento de Q A : (q, u). Conguracin Inicial para u A : (q0 , u) Relacin paso de clculo entre dos conguraciones: ((q, au) ( p, v)) p (q, a))

Aqu, al contrario de lo que ocurra en los autmatas deterministas, desdee una conguracin se puede pasar a varias conguraciones distintas en un paso de clculo, e incluso a ninguna.

44

Modelos de Computacin I

r0

r1

r2

Figura 2.7: Autmata Finito No-Determinstico


b

r0

a b, c

r1
a

r2

a, b, c a, b, c

r3

Figura 2.8: Autmata Finito Determinista Relacin de clculo entre dos conguraciones: ((q, u) ( p, v)) si y solo si existe una sucesin de conguraciones C0 , . . . , Cn tales que C0 = (q, u), Cn = ( p, v) y i n 1, Ci Ci+1 . Finalmente, el lenguaje aceptado por un AF no-determinista es L(M ) = {u A : q F, (q0 , u)

(q, )}

2.2.1.

Diagramas de Transicin

Los diagramas de transicin de los AFND son totalmente anlogos a los de los autmatas determinsticos. Solo que ahora no tiene que salir de cada vrtice un y solo un arco para cada smbolo del alfabeto de entrada. En un autmata no determinstico, de un vrtice pueden salir ninguna, una o varias echas con la misma etiqueta. Ejemplo 20 Un AFND que acepta el lenguaje L = {u {a, b, c} | u = abi c, i 0} es el de la Figura 2.7. Este es un autmata no-determinista ya que hay transiciones no denidas.

Cap. 2

Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3

45

0, 1

0, 1 0

q0

q1

q2

q3

q4

q5

q6

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

2.2.2. Equivalencia de Autmatas Determinsticos y No-Determinsticos


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

46

Modelos de Computacin I

q2
0, . . . , 9

0, . . . , 9

q8
E

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

q5

0, . . . , 9

.
0, . . . , 9 +,

0, . . . , 9

q0

q3

q4

0, . . . , 9 +,

q1

q6

Figura 2.10: Autmata No-Determinstico que reconoce constantes reales. = {A P (Q) | A F = 0 /} F Dado un autmata no determinstico se le hace corresponder uno determinstico que recorre todos los caminos al mismo tiempo. Ejemplo 23 En la Figura 2.11 podemos ver un autmata nito no-determinista del ejemplo 21 (gura 2.9) y su autmata determinstico asociado. aceptan el mismo Teorema 2 Un AFND M y su correspondiente Autmata determinstico M lenguaje. Demostracin La demostracin se basa en probar que (q 0 , u) = (q0 , u)

Es decir, que el conjunto de estados en los que puede estar el autmata no determinista coincide con el estado en el que est el autmata determinista que hemos construido. Ambos aceptan una palabra si al nal de su lectura uno de estos estados es nal.

Cap. 2

Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3

47

0, 1

0, 1

q0 1 {q0 }

q1

q2 0

q3

q4

q5

q6

1 0

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

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

0 0 1 1 0 0 0

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

0 1

{q0 , q6 } 1

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

48

Modelos de Computacin I

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

2.3.

Autmatas Finitos No Deterministicos con transiciones nulas

Son autmatas que pueden relizar una transicin sin consumir entrada. Estas transiciones se etiquetan con en el diagrama asociado. En la denicin, lo nico que hay que cambiar es la funcin de transicin que ahora est denida de Q (A {}) en P (Q). Las transiciones nulas dan una nueva capacidad al autmata. Si se tiene una transicin nula, el autmata puede quedarse donde est o cambiar de estado sin consumir ningn smbolo de la palabra de entrada. Como en los AFND, una palabra ser aceptada si se llega a un estado nal con alguna de las elecciones posibles. Ejemplo 24 El autmata siguiente acepta las palabras que son una sucesin de ceros, seguida de una sucesin de 1, seguida de una sucesin de 2.
0 1 2

q0

q1

q2

Ejemplo 25 El autmata dado por el siguiente diagrama, q0


a, b

q1
b

c,

q2

q3 el lenguaje {b2 i : i 0} {ab2 i : i 0} {b2 ic : i 0} {ab2 ic : i acepta 0}

Denicin 36 Se llama clausura de un estado al conjunto de estados a los que puede evolucionar sin consumir ninguna entrada, CL( p) = {q Q : q1 , . . . , qk tal que p = q1 , q = qk , qi (qi1 , ), i 2}

Cap. 2

Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3

49

Denicin 37 Si P Q se llama clausura de P a CL(P) =


pP

CL( p)

Ejemplo 26 En el ejemplo anterior tenemos que CL(q1 ) = {q1 , q2 } CL(q0 , q1 ) = {q0 , q1 , q2 } La funcin de transicin se extiende a conjuntos de estados de la siguiente forma: (R, u) =
qR

(q, u)

A continuacin vamos a determinar la funcin que asocia a un estado y a una palabra de entrada el conjunto de los estados posibles. (q, ) = CL(q) (q, au) =
r(CL(q),a)

(r, u)

Es conveniente extender la funcin a conjuntos de estados, (R, u) =


qR

(q, u)

Notemos que (q, a) no es lo mismo que (q, a) por lo que distinguiremos entre las dos funciones. Una palabra, u A , se dice aceptada por un AFND con transiciones nulas M = (Q, A, , q 0 , F ) si y solo si / (q, u) F = 0 El lenguaje aceptado por el autmata, L(M ), es el conjunto de palabras de A que acepta. Las transiciones nulas son muy tiles para modicar autmatas o para construir autmatas mas complejos partiendo de varios autmatas.

50

Modelos de Computacin I

Ejemplo 27 Los siguientes dos autmatas aceptan las palabras que contienen en su interior la subcadena 0110 y 1000 respectivamente 0,1 q0 0 0,1 p0 1 0,1 q1 1 q2 1 q3 0 q4 0,1 p1 0 p2 0 p3 0 p4

Para construir un autmata que acepte las palabras aceptadas por uno cualquiera de estos dos autmatas, es decir, las palabras con una subcadena 0110 una subcadena 1000 se pone un nuevo estado inicial que se une con los antiguos mediante transiciones nulas. 0, 1 q0 0 0, 1 p0 1 0, 1 q1 1 q2 1 q3 0 q4 0, 1 p1 0 p2 0 p3 0 p4

r0

Ejemplo 28 Consideremos el siguiente autmata que acepta las palabras del alfabeto {a, b, c} que tienen una sola b y sta va seguida de una c. a,c b q q
0 1

c q2 a,c

Si L es el lenguaje que acepta el autmata anterior modiqumoslo para que acepte cualquier sucesin no nula de palabras de L: cualquier palabra de L + . Para ello se unen los estados nales del autmata con el estado inicial mediante una transicin nula:

Cap. 2

Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3 a, c q0 b q1 c q2 a, c

51

Las transiciones nulas, como vemos dan ms capacidad de expresividad a los autmatas, pero el conjunto de lenguajes aceptados es el mismo que para los autmatas nitos determinsticos, como queda expresado en el siguiente teorema. Teorema 3 Para todo autmata AFND con transiciones nulas existe un autmata nito determinstico que acepta el mismo lenguaje. Demostracin.- Si M = (Q, A, , q0 , F ) es un AFND con transiciones nulas, basta construir un AFND sin transiciones nulas M = (Q, A, , q0 , F ). A partir de ste se puede construir uno determinstico. El autmata M se dene de la siguiente forma F= F F {q0 } / if CL(q0 ) F = 0 en caso contrario (2.1) (2.2)

(q, a) = (q, a) El resto de los elementos se denen igual que en M . Para demostrar que ambos autmatas aceptan el mismo lenguaje basta con probar que (q, u) = (q, u) si u = y que se acepta de igual forma en las dos mquinas.

(2.3)

Ejemplo 29 El AFND correspondiente al autmata con transiciones nulas del ejemplo 19, acepta el mismo lenguaje que el siguiente autmata determinista:

52

Modelos de Computacin I 0 {q0 , q1 , q2 } 2 {q2 } 2 1 1 {q1 , q2 } 0 / 0 0, 1, 2

2 0, 1

2.4. Expresiones Regulares


Una expresin regular es una forma de representar cierto tipo de lenguajes sobre un determinado alfabeto. Veremos que son exactamente los aceptados por los autmatas de estado nito. Denicin 38 Si A es un alfabeto, una expresin regular sobre este alfabeto se dene de la siguiente forma: / es una expresin regular que denota el lenguaje vaco. 0 es una expresin regular que denota el lenguaje {} Si a A, a es una expresin regular que denota el lenguaje {a} Si r y s son expresiones regulares denotando los lenguajes R y S entonces denimos las siguientes operaciones: Unin: (r + s) es una expresin regular que denota el lenguaje R S Concatenacin: (rs) es una expresin regular que denota el lenguaje RS Clausura: r es una expresin regular que denota el lenguaje R . De acuerdo con la denicin anterior, se puede determinar no solo cuales son las expresiones regulares sobre un determinado alfabeto, sino tambin cuales son los lenguajes que denotan o lenguajes asociados. Los lenguajes que pueden representarse mediante una expresin regular se llaman lenguajes regulares. Estos coinciden con los aceptados por los autmatas nitos, como veremos mas adelante. Los parntesis se pueden eliminar siempre que no haya dudas. La precedencia de las operaciones es Clausura

Cap. 2 Concatenacin Unin

Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3

53

Ejemplo 30 Si A = {a, b, c} (a + )b es una expresin regular que denotal el lenguaje {ai b j : i = 0, 1; j 0} Si A = {0, 1} 00 es una expresin regular con lenguaje asociado {00}. 01 + 0 es una expresin regular que denota el lenguaje {01 i : i 0}. (1 + 10) representa el lenguaje de las cadenas que comienzan por 1 y no tienen dos ceros consecutivos. (0 + 1) 011 representa el lenguaje de las cadenas que terminan en 011. 0 1 representa el lenguaje de las cadenas que no tienen un 1 antes de un 0 00 11 representa un subconjunto del lenguaje anterior formado por cadenas que al menos tienen un 1 y un 0. Si la expresin regular rr se representa como r + , 00 11 se puede reprensentar como 0+ 1+ .

2.4.1. Propiedades de las Expresiones Regulares


Dos expresiones regulares se consideran iguales si representan el mismo lenguaje. Teniendo esto en cuenta, se puede comprobar que siempre se verican las siguientes igualdades. 1. r1 + r2 = r2 + r1 2. r1 + (r2 + r3 ) = (r1 + r2 ) + r3 3. r1 (r2 r3 ) = (r1 r2 )r3 4. r = r / =0 / 5. r0 / =r 6. r + 0 7. = 8. r1 (r2 + r3 ) = r1 r2 + r1 r3

54

Modelos de Computacin I

9. (r1 + r2 )r3 = r1 r3 + r2 r3 10. r+ + = r 11. r + = r 12. (r + ) = r 13. (r + )+ = r 14. 15.


r 1 + r2 r 1 r2

= (r1 + r2 )

= (r1 + r2 )

2.4.2. Expresiones Regulares y Autmatas Finitos


A continuacin vamos a relacionar los lenguajes representados por las expresiones regulares con los aceptados por los autmatas nitos. Demostraremos dos teoremas. El primero nos dice que todo lenguaje asociado por una expresin regular puede ser aceptado por un autmata de estado nito. El segundo la relacin recproca. Dado un autmata de estado nito, veremos como se puede construir una expresin regular que denote el lenguaje aceptado por dicho autmata. Teorema 4 Dada una expresin regular existe un autmata nito que acepta el lenguaje asociado a esta expresin regular. Demostracin.- Vamos a demostrar que existe un AFND con transiciones nulas. A partir de l se podra construir el autmata determinstico asociado. La construccin del autmata va a ser recursiva. No vamos a expresar como son los estados y las transiciones matemticamente, sino que los autmatas vendrn expresados de forma grca. Para las expresiones regulares iniciales tenemos los siguiente autmatas: / 0 q0 q0 a q0 a

q1

Cap. 2

Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3

55

Ahora veremos como se pueden construir autmatas para las expresiones regulares compuestas a partir de los autmatas que aceptan cada una de sus componentes. Si M1 es el autmata que acepta el mismo lenguaje que el representado por r 1 y M2 el que acepta el mismo lenguaje que el de r2 , entonces

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

q01 qi1

M1 M2

q0

q12 q02 q j2

El autmata para la expresin (r1 r2 ) es

q11 q01 qi1

q02

q12 q j2

El autmata para

M1

r 1

es

M2

56

Modelos de Computacin I

q11 q01 qi1 Se puede comprobar que efectivamente estos autmatas verican las condiciones pedidas y que el procedimiento de construccin siempre acaba.

q0

M1

Ejemplo 31 Construyamos un autmata que acepta el mismo lenguaje que el asociado a la expresin regular r = (0 + 10) 011 Autmata correspondiente a 1 q1 1 q2

Autmatas correspondientes a 1 y 0 q1 1 q2 q3 0 q4

El autmata asociado a 10 es q1
1

q2

q3

q4

Autmatas asociado a 10 y 0

Cap. 2 q5

Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3 0 q6

57

q1

q2

q3

q4

Autmata asociado a 10 + 0 q5
0

q6

q7

q1

q2

q3

q4

Autmata asociado a (10 + 0) q8 q7 q1 1 q2 q3 0 q4 q5

q6

Autmatas asociado a (10 + 0) y 011

58

Modelos de Computacin I q8 q7 q1 1 q2 Autmatas asociado a (10 + 0) y 011 q8 q7 q1 1 q2 q3 0 q5 q3 0 q5

q6 q9 q4 0 q10 q11 1 q12 q13 1 q14

q6

q9 q4 0 q10

q11

q12

q13

q14

Teorema 5 Si L es aceptado por un autmata nito determinstico, entonces puede venir expresado mediante una expresin regular. Demostracin.Sea el autmata M = (Q, A, , q1 , F ) donde Q = {q1 , . . . , qn } y q1 es el estado inicial. Sea Rk i j el conjunto de las cadenas de A que premiten pasar del estado qi al estado q j y no pasa por ningn estado intermedio de numeracin mayor que k (q i y q j si pueden tener numeracin mayor que k). Rk i j se puede denir de forma recursiva: R0 ij = {a : (qi , a) = q j } {a : (qi , a) = qi } {}

si i = j si i = j

Para k 1, tenemos la siguiente ecuacin:


k1 k1 k1 k1 Rk i j = Ri(k1) (R(k1)(k1) ) R(k1) j Ri j

Cap. 2

Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3

59

k Vamos a demostrar que para todos los lenguajes Rk i j existe una expresin regular rij que lo representa. Lo vamos a demostrar por induccin sobre k. Para k = 0 es inmediato. La expresin regular rk ij puede escribirse como

a1 + . . . + a l a1 + . . . + a l +

si i = j si i = j

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

Es claro que estas expresiones regulares representan los conjuntos R 0 i j. Supongamos ahora que es cierto para k 1. Entonces sabemos que
k1 k1 Rk i j = Ri(k1) R(k1)(k1) k1 k1 R( k1) j Ri j

k1 Por la hiptesis de induccin, existen expresiones regulares para los lenguajes R lm , que se k1 k1 denotan como rlm De aqu se deduce que una expresin regular para Rk j viene dada por k1 k1 k1 k1 ri (k1) (r(k1)(k1) ) r(k1)j + rij

con lo que concluye la demostracin de que existen expresiones regulares para los lenguajes Rk i j . Adems esta demostracin nos proporciona un mtodo recursivo para calcular estas expresiones regulares. Finalmente, para demostrar que el lenguaje aceptado por el autmata puede venir expresado mediante una expresin regular, solo hay que observar que L(M ) =
q j F

Rn 1j

Por tanto, L(M ) viene denotado por la expresin regular rj1 + . . . + rjk donde F = {q j1 , . . ., q jk }.

Ejemplo 32 Sea el Autmata Finito Determinstico de la Figura 32. Vamos a construir la expresin regular que representa el lenguaje aceptado por este autmata.

60

Modelos de Computacin I 1 q1 0 0 q2 1 0, 1 q3

Figura 2.12: Autmata Finito Determinstico


0 = r11 0 =0 r12 0 =1 r13 0 =0 r21 0 = r22 0 =1 r23 0 =0 / r31 0 r32 = 0 + 1 0 = r33

2 = r1 + r1 (r1 ) r1 = + 0( + 00) 0 = (00) r11 11 12 22 21 2 = r1 + r1 (r1 ) r1 = 0 + 0( + 00) ( + 00) = 0(00) r12 12 12 22 22 2 = r1 + r1 (r1 ) r1 = 1 + 0( + 00) (1 + 01) = 0 1 r13 13 12 22 23 2 = r1 + r1 (r1 ) r1 = 0 + ( + 00)( + 00)0 = (00) 0 r21 21 22 22 21 2 = r1 + r1 (r1 ) r1 = + 00 + ( + 00)( + 00)( + 00) = (00) r22 22 22 22 22 2 = r1 + r1 (r1 ) r1 = 1 + 01 + ( + 00)( + 00)(1 + 01) = 0 1 r23 23 22 22 23 2 = r1 + r1 (r1 ) r1 = 0 / + (0 + 1)( + 00)0 = (0 + 1)(00)0 r31 31 32 22 21 2 = r1 + r1 (r1 ) r1 = 0 + 1 + (0 + 1)( + 00)( + 00) = (0 + 1)(00) r32 32 32 22 22 2 = r1 + r1 (r1 ) r1 = + (0 + 1)( + 00)(1 + 01) = + (0 + 1)0 1 r33 33 32 22 23 Finalmente la expresin regular para el lenguaje aceptado es:

1 = r0 + r0 (r0 ) r0 = + () = r11 11 11 11 11 1 = r0 + r0 (r0 ) r0 = 0 + () 0 = 0 r12 12 11 11 12 1 = r0 + r0 (r0 ) r0 = 1 + () 1 = 1 r13 13 11 11 13 1 = r0 + r0 (r0 ) r0 = 0 + 0() = 0 r21 21 21 11 11 1 = r0 + r0 (r0 ) r0 = + 0() 0 = + 00 r22 22 21 11 12 1 = r0 + r0 (r0 ) r0 = 1 + 0() 1 = 1 + 01 r23 23 21 11 13 1 = r0 + r0 (r0 ) r0 = 0 / +0 / () = 0 / r31 31 31 11 11 1 0 0 0 0 / () 0 = 0 + 1 r32 = r32 + r31 (r11 ) r12 = 0 + 1 + 0 1 0 0 0 0 / () 1 = r33 = r33 + r31 (r11 ) r13 = + 0

3 3 2 2 2 2 2 2 2 2 r12 + r13 = r12 + r13 (r33 ) r32 + r13 + r13 (r33 ) r33 =

Cap. 2

Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3

61

0(00) + 0 1( + (0 + 1)0 1) (0 + 1)(00) + 0 1 + 0 1( + (0 + 1)0 1) ( + (0 + 1)0 1) = 0(00) + 0 1((0 + 1)0 1) (0 + 1)(00) + 0 1 + 0 1((0 + 1)01) Por ltimo sealaremos que, por abuso del lenguaje, se suele identicar una expresin regular con el lenguaje asociado. Es decir, diremos el lenguaje (00 + 11) , cuando, en realidad, nos estaremos reriendo al lenguaje asociado a esta expresin regular.

2.5. Gramticas Regulares


Estas son las gramticas de tipo 3. Pueden ser de dos formas Lineales por la derecha.- Cuando todas las producciones tienen la forma A uB Au Lineales por la izquierda.- Cuando todas las producciones tienen la forma A Bu Au Ejemplo 33 La gramtica dada por V = {S, A}, T = {0, 1} y las producciones S 0A A 10A A es lineal por la derecha. Genera el lenguaje 0(01) . El mismo lenguaje es generado por la siguiente gramtica lineal por la izquierda S S10 S0

62

Modelos de Computacin I

Teorema 6 Si L es un lenguaje generado por una gramtica regular, entonces existe un autmata nito determinstico que lo reconoce. Demostracin.- Supongamos que L es un lenguaje generado por la gramtica G = (V, T , P, S) que es lineal por la derecha. Vamos a construir un AFND con movimientos nulos que acepta L. Este autmata ser M = (Q, T , , q, F ) donde Q = {[] : ( = S) (A V, u T , tales que A u P)} q0 = [S] F = {[]} viene denida por Si A es una variable ([A], ) = {[] : (A ) P} ([a], a) = [] La aceptacin de una palabra en este autmata simula la aplicacin de reglas de derivacin en la gramtica original. La demostracin formal de que esto es as no la vamos a considerar. En el caso de una gramtica lineal por la izquierda, G = (V, T , P, S), consideraremos la gramtica G = (V, T , P , S) donde P = {A : A P}. Es decir que invertimos la parte derecha de las producciones. La gramtica resultante G es lineal por la derecha y el lenguaje que genera es L(G ) = L(G)1 . Ahora, podemos construr un autmata que acepte el lenguaje L(G ), siguiendo el procedimiento anterior. El autmata no determinstico correspondiente se puede transformar en uno equivalente con un solo estado nal. Para ello basta con aadir un nuevo estado nal, pasar a no-nales los estados nales originales y unir estos mediante una transicin nula con el nuevo estado nal. El siguiente paso es invertir el autmata ya con un solo estado nal, para que pase de aceptar el lenguaje L(G ) = L(G)1 al lenguaje L(G )1 = L(G) . Para ello los pasos son: Invertir las transiciones Intercambiar el estado inicial y el nal. A partir de este autmata se podra construir un autmata determinstico, con lo que termina la demostracin.

Si a T y (T V ), entonces

Cap. 2

Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3

63

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

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

64

Modelos de Computacin I

Teorema 7 Si L es aceptado por un Autmata Finito Determinstico entonces L puede generarse mediante una gramtica lineal por la derecha y por una lineal por la izquierda. Demostracin.- Sea L = L(M ) donde M = (Q, A, , q, F ) es un autmata nito determinstico. Construiremos, en primer lugar, una gramtica lineal por la derecha. La gramtica que construimos es G = (Q, A, P, q0) donde las variables son los estados, la variable inicial es q0 y P contiene las producciones, p aq, p , si ( p, a) = q si p F

Para el caso de una gramtica lineal por la izquierda, invertimos el autmata, construmos la gramtica lineal por la derecha asociada e invertimos la parte derecha de las producciones.

Ejemplo 36 Consideremos el autmata: q0


1 0 0 1 0, 1

q1

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

q2 0q0 , ta: q0
1 0 0 1 0, 1

q2 1q1 ,

q2

Si lo que queremos es una gramtica lineal por la izquierda, entonces invertimos el autma-

q1

q0
1 0

0 1

q1
0, 1

q2 La gramtica asociada es (variable inicial q2 ):

q2

Cap. 2

Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3

65

q1 0q0 ,

q2 1q0 ,

q2 0q1 ,

q2 1q1

q0 0q2 ,

q1 1q2 ,

q0

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

q0 q2 0,

q1 q2 1,

q0

2.6. Mquinas de Estado Finito


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

2.6.1. Mquinas de Moore


Una mquina de Moore es una sextupla {(Q, A, B, , , q0)} donde todos los elementos son como en los autmatas nitos determinsticos, excepto B alfabeto de salida : Q B que es una aplicacin que hace corresponder a cada estado su salida correspondiente. No hay estados nales, porque ahora la respuesta no es acepta o no acepta sino que es una cadena formada por los smbolos de salida correspondientes a los estados por los que pasa el autmata. Si el autmata lee la cadena u y pasa por los estados q0 q1 ...qn entonces produce la salida (q0 )(q1 ) . . . (qn ) Es conveniente sealar que produce una salida para la cadena vaca: (q 0 ).

66

Modelos de Computacin I

(0, 0) (0, 1), (1, 1) q0 q1 (V, R, V, R) (A, R, A, R) (1, 0) A q3 (V, R, A, R) A q6 (V, A, R, R) (0, 0), (0, 1) q5 (R, R, R, A) (0, 0), (1, 0) A A

(0, 1), (1, 1) q2 (R, R, R, V )

(1, 0), (1, 1) q4 (V, V, R, R) (0, 1) q7 (A, A, R, R)

(0, 0)

(1, 0), (1, 1)

Cap. 2

Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3

67

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

2.6.2. Mquinas de Mealy


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

68

Modelos de Computacin I
0/0 1/0

q0

1/1 0/1

q1
0/0

q2

1/1

Figura 2.13: Mquina de Mealy que realiza la divisin entera por 3 Si el anterior es un 1 01 10 La mquina de Mealy que realiza esta codicacin es la siguiente

0/0

1/1

1/0

q0

0/1

q1

si lee 0101, la salida correspondiente es 0111. Ejemplo 39 Una mquina de Mealy que realiza la divisin entera por 3 es el de la gura 2.13.

2.6.3. Equivalencia de Mquinas de Mealy y Mquinas de Moore


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

Cap. 2

Autmatas Finitos, Expresiones Regulares y Gramticas de tipo 3

69

Denicin 39 Una mquina de Moore, M, y una mquina de Mealy, M, se dicen equivalentes sii paratodo u A TM (u) = bTM (u) donde b es la salida correspondiente al estado inicial de la mquina de Moore M. Teorema 8 Dada una mquina de Moore, existe una mquina de Mealy equivalente. Demostracin.- Sea M = (Q, A, B, , , q0) una mquina de Moore, la mquina de Mealy equivalente ser M = (Q, A, B, , , q0 ), donde (q, a) = ((q, a)) Es decir se le asigna a cada transicin la salida del estado de llegada en la mquina de Moore. Es inmediato comprobar que ambas mquinas son equivalentes.

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

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

70

Modelos de Computacin I

(q0 , 0) 0
1 0

(q1 , 0) 0
0 1

(q2 , 0) 0
1 0

(q0 , 1) 1

(q1 , 1) 1

(q2 , 1) 1

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

Captulo 3 Propiedades de los Conjuntos Regulares

71

72

Modelos de Computacin I

3.1. Lema de Bombeo


A los lenguajes aceptados por un AFD se les llama tambin conjuntos regulares. El lema de bombeo se usa para demostrar que un determinado conjunto no es regular, es decir, no puede llegar a ser aceptado por un autmata nito determinstico. Lema 1 (Lema de Bombeo) Sea L un conjunto regular, entonces existe un n I N tal que z L, si |z| n, entonces z se puede expresar de la forma z = uvw donde 1. |uv| n 2. |v| 1 3. (i 0)uvi w L adems n puede ser el nmero de estados de cualquier autmata que acepte el lenguaje L. Demostracin.Sea M un autmata nito determinstico que acepta el lenguaje L. Supongamos que el conjunto de estados es Q = {q0 , q1 , . . . , qk }. Hagamos n = k + 1. Entonces si z L y |z| n = k + 1 resulta que z tiene, al menos, tantos smbolos como estados tiene el autmata. Cuando el autmata lee la palabra z, realiza un cambio de estado por cada smbolo de dicha palabra, empezando en q0 y terminando en un estado nal qm . Sea z la parte de z constituida por los n primeros smbolos de z. Consideremos el vector de los estados por los que (qi0 , qi1 , . . . , qin ) donde qi0 es el estado inicial, q0 , y qi j = (qi j1 , a j ). Como el vector (qi0 , qi1 , . . ., qin ) tiene n + 1 estados y slo hay n estados distintos, tiene que haber necesariamente un estado que se repita. Sea ql el primer estado que se repite en este vector. Entonces consideramos: Sea u la parte de la palabra z que lleva al autmata desde q0 a la primera aparicin de ql . Sea v la parte de la palabra de z , que lleva el autmata de la primera aparicin de ql a la segunda aparicin de ql . Sea w lo que le falta a uv para completar la palabra z. Con esta particin se puede probar: 1. z = uvw

Cap. 3

Propiedades de los Conjuntos Regulares

73

2. |uv| n, porque uv forman parte de z que slo tiene n smbolos. 3. |v| 1, porque para pasar de la primera aparicin de ql a la segunda, hay que leer al menos un smbolo. 4. uvi w L, i I N . En efecto, esta palabra es aceptada por el autmata, porque u lleva al autmata del estado inicial q0 al estado ql . Cada aparicin de v mantiene al autmata en el mismo estado ql . Por ltimo, w lleva al autmata desde ql al estado nal qm . Como despus de leer uvi w llegamos a un estado nal, entonces la palabra es aceptada por el autmata y pertenece al lenguaje L. Con esto queda demostrado el lema. Para demostrar que un determinado lenguaje no es regular, basta probar que no se verica la condicin que aparece en el lema de bombeo. Para ello hay que dar los siguiente pasos: 1. Suponer un n I N arbitrario que se suponga cumpla las condiciones del lema. 2. Encontrar una palabra, z (que puede depender de n) de longitud mayor o igual que n para la que sea imposible encontrar una particin como la del lema. 3. Demostrar que una palabra z no cumple las condiciones del lema, para lo que hay que hacer: a) Suponer una particin arbitraria de z, z = uvw, tal que |uv| n, |v| 1. b) Encontrar un i I N tal que uvi w L. Ejemplo 41 Demostrar que el lenguaje L = {0k 1k : k 0} no es regular. 1. Supongamos un n cualquiera 2. Sea la palabra 0n 1n que es de longitud mayor o igual que n 3. Demostremos que 0n 1n no se puede descomponer de acuerdo con las condiciones del lema: a) Supongamos una particin arbitraria de 0n 1n = uvw. con |uv| n y |v| 1. Como |uv| n resulta que v est formada de 0 solamente y como |v| 1, v tiene, al menos un cero.

74

Modelos de Computacin I b) Basta considerar i = 2 y uv2 w = uvvw = 0n v1n y esta no es una palabra de L, ya que si v tiene solo ceros, no hay el mismo nmero de ceros que de unos, y si v tiene ceros y unos, z tendr unos antes de algn cero.

Con esto es suciente para probar que L no es regular. Un resultado mucho mas difcil de encontrar directamente. Ejemplo 42 Demostrar que el lenguaje L = {0 j : j 0} no es regular. 2 Sea un n I N , consideremos la palabra z = 0n L y de longitud mayor o igual a n. Supongamos una descomposicin cualquiera z = uvw. Si se verica |uv| n |v| 1 entonces tenemos que u = 0k , v = 0l , w = 0n l k , con l 1, l n. 2 2 Haciendo i = 2, uv2 w = 0k 02l 0n l k = 0n +l . Como (n + 1)2 n2 = n2 + 2n + 1 n2 = 2n + 1 > n l, tenemos que n2 < n2 + l < (n + 1)2 2 y uv2 w = 0n +l L. Con esto el lenguaje no puede ser regular. Ejemplo 43 El lenguaje {u {0, 1} : u = u1 } no es regular. Sea un n I N cualquiera. Consideremos la palabra z = 0n 10n L y que tiene longitud 2n + 1 n. Supongamos una descomposicin cualquiera: z = uvw. Si se verica |uv| n |v| 1 entonces tenemos que u = 0k , v = 0l , w = 0nkl 1n 0n , con l 1. Haciendo i = 2, uv2 w = 0k 02l 0nkl 1n 0n = 0n+l 1n 0n L. Como hemos encontrado un i tal que uvi w L, tenemos que el lenguaje no verica la condicin que aparece en el lema de bombeo y no puede ser regular. Hay lenguajes que no son regulares y sin embargo verican la condicin que aparece en el lema de bombeo. A continuacin se da un ejemplo de este caso. Ejemplo 44 Sea L = {ai b j ck : (i = 0) ( j = k)} un lenguaje sobre el alfabeto A = {a, b, c}. Vamos a demostrar que se verica la condicin del lema de bombeo para n = 2. En efecto si z L y |z| 2 entonces z = ai b j zk con i = 0 o j = k. Caben dos posibilidades:
2 2

Cap. 3

Propiedades de los Conjuntos Regulares

75

a) i = 0. En este caso z = b j ck una descomposicin de z se puede obtener de la siguiente forma: u= v es el primer smbolo de z w es z menos su primer smbolo Est claro que se verican las tres condiciones exigidas en el lema de bombeo. 1. |uv| = 1 n = 2 2. |v| = 1 0 3. Si l 0 entonces uvl w sigue siendo una sucesin de b seguida de una sucesin de c y por tanto una palabra de L. b) i 0. En ese caso z = ab j c j , y una particin de esta palabra se obtiene de acuerdo con lo siguiente: u= v = a es el primer smbolo de z w es z menos su primer smbolo Tambin aqu se verican las tres condiciones: 1. |uv| = 1 n = 2 2. |v| = 1 0 3. Si l 0 entonces uvl w sigue siendo una sucesin de a seguida de una sucesin de b y otra de c, en la que la cantidad de b es igual que la cantidad de c, y por tanto, una palabra de L. Es fcil intuir que este lenguaje no es regular, ya que el nmero de estados necesarios para tener en cuenta el nmero de a y de b puede hacerse ilimitado (y no sera nito).

76

Modelos de Computacin I

3.2. Operaciones con Conjuntos Regulares


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

Proposicin 2 Si L1 y L2 son dos lenguajes regulares sobre el alfabeto A, entonces L1 L2 es regular. Demostracin.Es inmediato ya que L1 L2 = (L1 L2 ). Existe tambin una demostracin constructiva. Si M1 = (Q1 , A, 1 , q1 0 , F1 ) es un autmata 2 nito determinstico que acepta L1 , y M2 = (Q2 , A, 2 , q0 , F2 ) es un autmata que acepta L2 , entonces 2 M = (Q1 Q2 , A, , (q1 0 , q0 ), F1 F2 ) donde ((qi , q j ), a) = ((qi , a), (q j , a)), acepta el lenguaje L1 L2 .

Proposicin 3 Si A y B son alfabetos y f : A B un homomorsmo entre ellos, entonces si L A es un lenguaje regular, f (L) = {u B : v A vericando f (v) = u} es tambin un lenguaje regular. Demostracin.Basta con comprobar que se puede conseguir una expresin regular para f (L) partiendo de una expresin regular para L: Basta con substituir cada smbolo, a, de L, por la correspondiente palabra f (a).

Cap. 3

Propiedades de los Conjuntos Regulares

77

Ejemplo 45 Si A = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} y B = {0, 1} y f es el homomorsmo dado por f (0) = 0000, f (1) = 0001, f (2) = 0010, f (3) = 0011 f (4) = 0100, f (5) = 0101, f (6) = 0110, f (7) = 0111 f (8) = 1000, f (9) = 1001 Entonces si L A es el lenguaje regular dado por la expresin regular (1 + 2) 9, entonces el lenguaje f (L) tambin es regular y viene dado por la expresin regular (0001 + 0010) 1001. Proposicin 4 Si A y B son alfabetos y f : A B es un homomorsmo, entonces si L B es un conjunto regular, tambin lo es f 1 (L) = {u A : f (u) L}. Demostracin.Supongamos que M = (Q, B, , q0 , F ) es un autmata que acepta el lenguaje L, entonces el autmata M = (Q, A, , q0 , F ) donde (q, a) = (q, f (a)), acepta el lenguaje f 1 (L).

Ejemplo 46 Si A = B = {0, 1} y f es el homomorsmo dado por f (0) = 00, f (1) = 11

entonces el lenguaje L = {02k 12k : k 0} no es regular, porque si lo fuese su imagen inversa, f 1 (L) = {0k 1k : k 0} sera tambin regular y no lo es. Proposicin 5 Si R es un conjunto regular y L un lenguaje culaquiera, entonces el cociente de lenguajes R/L = {u : v L vericando uv R} es un conjunto regular. Demostracin.Sea M = (Q, A, , q0 , F ) un autmata nito determinstico que acepta el lenguaje R. Entonces R/L es aceptado por el autmata M = (Q, A, , q0 , F ) donde F = {q Q : y L tal que (q, y) F } Esta demostracin no es constructiva, en el sentido de que puede que no exista un algoritmo tal que dado un estado q Q nos diga si existe una palabra y L tal que (q, y) L. Si L es regular, se puede asegurar que dicho algoritmo existe.

78

Modelos de Computacin I

3.3. Algoritmos de Decision para Autmatas Finitos


El lema de bombeo sirve para encontrar algoritmos de decisin para los autmatas nitos, por ejemplo, para saber si el lenguaje que acepta un determinado autmata es vaco o no. Teorema 10 El conjunto de palabras aceptado por un autmata nito con n estados es 1. No vaco si y solo si existe una palabra de longitud menor que n que es aceptada por el autmata. 2. Innito si y solo si acepta una palabra de longitud l, donde n l < 2n. Demostracin.1. La parte si es evidente: si acepta una palabra de longitud menor o igual que n, el lenguaje que acepta no es vaco. Para la parte solo si, supongamos que el lenguaje aceptado por un autmata es no vaco. Consideremos una palabra, u, de longitud mnima aceptada por el autmata. En dicho caso, |u| < n, porque si |u| n, entonces por el lema de bombeo u = xyz, donde |y| 1 y xz es aceptada por el autmata, siendo |xz| < |u|, en contra de que u sea de longitud mnima. 2. Si u L(M ) y n |u| < 2n, entonces por el lema de bombeo se pueden obtener innitas palabras aceptadas por el autmata y L(M ) es innito. Reciprocamente, si L(M ) es innito, habr innitas palabras de longitud mayor o igual que n. Sea u una palabra de longitud mnima de todas aquellas que tienen de longitud mayor o igual que n. Entonces, u ha de tener una longitud menor de 2n, porque si no es as, por el lema de bombeo, u se puede descomponer u = xyz, donde 1 |y| n, y xz L(M ). Por tanto, xz sera aceptada por el autmata, tendra una longitud mayor o igual que n, y tendra menos longitud que u. En contra de que u sea de longitud mnima.

Este teorema se puede aplicar a la construccin de algoritmos que determinen si el lenguaje aceptado por un autmata es vaco o no, y para ver si es o no nito. Para lo primero se tiene que comprobar si el autmata acepta alguna palabra de longitud menor o igual que n. Para lo segundo si acepta una palabra de longitud mayor o igual que n y menor que 2n. Como en ambos

Cap. 3

Propiedades de los Conjuntos Regulares

79

casos, el nmero de palabras que hay que comprobar es nito, estos algoritmos siempre paran. Sin embargo, en general ser n inecientes. Existe otro procedimiento ms eciente para determinar si el lenguaje asociado a un autmata nito determinstico es o no nito. Lo vamos a explicar en funcin del diagrama de transicin asociado. Consiste en eliminar previamente todos los estados que son inaccesibles desde el estado inicial (un estado es inaccesible desde el estado inicial si no existe un camino dirigido entre el estado inicial y dicho estado). Despus de eliminar los estado inaccesibles se obtiene un autmata nito determinstico que acepta el mismo lenguaje que el inicial. Si en dicho autmata queda algn estado nal, el lenguaje aceptado por el autmata no es vaco. Es vaco si no queda ningn estado nal. Para comprobar si es o no nito, se eliminan adems los estados desde los que no se puede acceder a un estado nal y las transiciones asociadas. Se obtiene as un autmata nito que puede ser no determinstico y que acepta el mismo lenguaje que el original. El lenguaje aceptado ser innito si y solo si existe un ciclo en el diagrama de transicin del nuevo autmata. Teorema 11 Existe un algoritmo para determinar si dos autmatas nitos determinsticos aceptan el mismo lenguaje. Demostracin.Sean M1 y M2 dos autmatas nitos determinsticos. Entonces de forma algortmica se puede construir un autmata, M , que acepte el lenguaje L(M ) = (L(M1 ) L(M2 )) (L(M1 ) L(M2 )) / , lo cual Entonces el comprobar si L(M1 ) = L(M2 ) es equivalente a comprobar si L(M ) = 0 se puede hacer tambin de forma algortmica.

3.4. Teorema de Myhill-Nerode. Minimizacin de Autmatas


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

80

Modelos de Computacin I a 0 b 0 1 d 1 c 0 1 0 1 f e 1 1 0

Figura 3.1: Autmata que acepta el lenguaje L

001RL 1 01 RL 0 11RL 101 Tambin se puede denir una relacin de equivalencia, RM , en A asociada a un autmata nito determinstico M = (Q, A, , q0 , F ) cualquiera de la siguiente forma, Si u, v A , entonces uRM v si y solo si ( (q0 , u) = (q0 , v)) Esta relacin de equivalencia divide tambin el lenguaje A en clases de equivalencia. Ejemplo 48 Consideremos el autmata de la Figura 3.1, que acepta el mismo lenguaje, L, del ejemplo anterior. Ahora tenemos que 00RM 0000 0010RM 00010 00RM 0000 0010RM 00010 pero RL y RM no son exactamente la misma relacin de equivalencia. Por ejemplo, 000RL 00 pero 000 RM 00. En general, esto se va a vericar siempre. Si tenemos un lenguaje regular L y un autmata nito determinstico M que acepta este lenguaje entonces, uRM v uRL v

Cap. 3

Propiedades de los Conjuntos Regulares

81

pero la implicacin inversa no se va a vericar siempre. Solo, como veremos ms adelante, para los autmatas minimales. El ndice (n. de clases de equivalencia) de R ser a lo ms el nmero de estados del autmata nito que sean accesibles desde el estado inicial. En efecto, si q Q, y este estado es accesible, entonces denir una clase de equivalencia: [q] = {x A : (q0 , x) = q} Esta clase es no vaca ya que x A tal que (q0 , x) = q ( q es accesible desde q0 ). Denicin 40 Una relacin de equivalencia R en A se dice que es invariante por la derecha para la concatenacin si y solo si ((uRv) (z A , xzRyz)). Proposicin 6 Sea L A , entonces RL es invariante por la derecha.

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

[x]M

82

Modelos de Computacin I

2 3 Sea R la relacin de equivalencia que verica 2. Vamos a probar que xRy xRL y En efecto, si xRy, entonces si z A , por ser R invariante por la derecha, tenemos que xzRyz. Es decir, xz, yz pertenecen a la misma clase de equivalencia. Como L es la unin de ciertas clases de equivalencia de la relacin R, entonces todos los elementos de una misma clase pertenecen o no pertenecen al mismo tiempo al lenguaje L. De esto se deduce que xz L yz L. En conclusin, si xRy, entonces para todo z A , se tiene que xz L yz L. Por tanto xRL y. Una vez demostrado esto, veremos que RL tiene memos clases de equivalencia que R. Ms concretamente, veremos que si [x]R = [y]R entonces [x]L = [y]L . Pero esto es inmediato, ya que si [x]R = [y]R , entonces xRy. Y acabamos de demostrar que de aqu se deduce que xRL y. Y por tanto, [x]L = [y]L . Por ltimo, como R es de ndice nito y RL tiene menos clases que R, se deduce que RL es de ndice nito. 3 1 Construiremos un autmata a partir de la relacin RL . El autmata ser M = (Q, A, , q0 , F ), donde Q = {[x] : x A } ([x]L , a) = [xa]L Esta denicin es consistente ya que, siendo RL invariante por la derecha, si [x]L = [y]L entonces [xa]L = [ya]L . q0 = []L , F = {[x]L : x L}. F est bien denido, ya que si [x]L = [y]L , entonces xRL y, y por tanto, x L y L, es decir, x L y L. Este autmata acepta el lenguaje L. En efecto, (q0 , x) = [x]L y [x]L F x L. Por tanto una palabra x A es aceptada cuando x L.

Cap. 3 0 []L 1

Propiedades de los Conjuntos Regulares 0 [1]L 1 [11]L 0

83

Figura 3.2: Autmata asociado a la relacin RL Ejemplo 49 Si consideramos el lenguaje L dado por la expresin regular 0 10 , entonces la relacin RL divide al conjunto de las cadenas en tres clases de equivalencia: []L = C1 , [1]L = C2 , [11]L = C3 Si consideramos el autmata asociado a este lenguaje (ver Fig. 3.1), este autmata divide A en seis clases de equivalencia. Ca = (00) Cb = 0(00) Cc = (00) 1 Cd = (00) 01 Ce = 0 100 C f = 0 10 1(0 + 1) L = Cc Cd Ce , la unin de las tres clases correspondientes a los estados nales. De acuerdo con el teorema anterior, con la relacin de equivalencia R L podemos construr un autmata nito que acepta el mismo lenguaje L. Este autmata viene dado por el diagrama de transicin de la gura 3.2,

3.4.1. Minimizacin de Autmatas


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

84

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

El teorema anterior nos permite encontrar el autmata minimal asociado a un lenguaje, partiendo de la relacin de equivalencia de dicho lenguaje. El problema fundamental es que normalmente no tenemos dicha relacin y normalmente no es fcil de calcular. Lo que solemos tener es un autmata nito determinstico que acepta el lenguaje L y lo que nos interesa es transformarlo en un autmata minimal. Esto se puede hacer de forma algortmica. El procedimiento de minimizacin est basado en el hecho de que los estados del autmata minimal construdo a partir de la relacin RL estn formados por uniones de estados de un autmata M cualquiera que acepte el mismo lenguaje. Los estados que se pueden identicar y unir en un solo estado son los llamado estados indistinguibles, que se denen a continuacin. Denicin 42 Si M = (Q, A, , q0 , F ) es un autmata nito determinstico y qi , q j son dos estados de Q, se dice que qi y q j son indistinguibles si y solo si u A , (qi , u) F (q j , u) F. Es decir, es indiferente estar en dos estados indistinguibles para el nico objetivo que nos interesa: saber si vamos a llegar a un estado nal o no. El siguiente algoritmo identica las parejas de estados indistinguibles. Supone que no hay estados inaccesibles. Para el algoritmo, asociaremos a cada pareja de estados accesibles del autmata una variable booleana: marcado, y una lista de parejas. Al principio todas las variables booleanas estn a falso y las listas vacas. Los pasos del algoritmo son como siguen, 1. Eliminar estados inaccesibles. 2. Para cada pareja de estados accesibles {qi , q j } 3. Si uno de ellos es nal y el otro no, hacer la variable booleana asociada igual a true. 4. Para cada pareja de estados accesibles {qi , q j } 5. Para cada smbolo a del alfabeto de entrada 6. Calcular los estados qk y ql a los que evoluciona el autmata desde qi y q j leyendo a 7. Si qk = ql entonces 8. Si la pareja {qk , ql } est marcada entonces se marca la pareja {qi , q j } y recursivamente se marcan tambin todas las parejas en la lista asociada. 9. Si la pareja {qk , ql } no est marcada, se aade la pareja

Cap. 3
0

Propiedades de los Conjuntos Regulares


1 1 0 0

85

0 1

c
0

0 1 1

f
1

g
0

Figura 3.3: Autmata para minimizar {qi , q j } a la lista asociada a la pareja {qk , ql }. Al nal del algoritmo, todas las parejas de estados marcados son distinguibles y los no marcados indistinguibles. Una vez identicados los estados indistinguibles, el autmata minimal se puede construir identicando los estados indistinguibles. Ms concretamente, si el autmata original es M = (Q, A, , q0 , F ), R es la relacin de equivalencia de indistinguibilidad entre estados y [q] la clase de equivalencia asociada al estado q, entonces el nuevo autmata, M m = (Qm , A, m , qm 0 , Fm ) tiene los siguientes elementos, Qm = {[q] : q es accesible desde q0 } Fm = {[q] : q F } m ([q], a) = [(q, a)] qm 0 = [q0 ] Se puede demostrar el siguiente teorema. Teorema 14 Si M es un autmata nito determinstico sin estados inaccesibles, el autmata Mm construido anteriormente es minimal. Ejemplo 50 Minimizar el autmata de la Figura 3.3. Primero eliminamos el estado inaccesible d y obtenemos el autmata de la gura ??. A continuacin organizamos los datos del algoritmo en una tabla triangular como la de la Figura 3.5. En las casillas vamos anotando la lista asociada a cada pareja y si estn o no marcadas. El resultado se puede ver en la tabla 3.6. Esta nos indica que los estados a y e son equivalentes, as como los estados b y h: a e, b h. Identicando estos estados, obtenemos el autmata de la gura 3.7.

86

Modelos de Computacin I

1 1 0 0

0 1

c
0 1

f
1

g
0

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

b c e f g h a b c e f g

Figura 3.5: Tabla de minimizacin de autmata

Cap. 3

Propiedades de los Conjuntos Regulares

87

+ ++ +++ ++ +
c e f (g,a)

b h,

ae

+ + + + +
Figura 3.6: Estado nal de la tabla de minimizacin de autmata

g h

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

(h,e) c e f g

+ + + + +
a b
0 1

{a, e}

0 1

{b, h}
0 0

c
0

Figura 3.7: Autmata minimal

88

Modelos de Computacin I

Captulo 4 Gramticas Libres de Contexto

89

90

Modelos de Computacin I S ( ( S a S + S b ) S c )

Figura 4.1: Arbol de Derivacin

4.1. Arbol de Derivacin y Ambigedad


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

Cap. 4 S a S a A b b A a

Gramticas Libres de Contexto

91

S a

Figura 4.2: Arbol de Derivacin de aabbaa Ejemplo 51 Consideremos la gramtica S aAS, S a, A SbA, A SS, A ba y la palabra aabbaa. Esta palabra tiene una derivacin que tiene asociado el rbol de la Figura 4.2 Aunque toda cadena de derivaciones lleva asociado un solo rbol, ste puede provenir de varias cadenas de derivaciones distintas. Sin embargo, siempre se pueden distinguir las siguientes: Derivacin por la izquierda.- Cuando en cada paso siempre se sustituye primero la primera variable (ms a la izquierda) de la palabra que tenemos. Derivacin por la derecha.- Cuando en cada paso siempre se sustituye primero la ltima variable (ms a la derecha) de la palabra que tenemos. Ejemplo 52 Al rbol de derivacin de la palabra aabbaa, le corresponden las siguientes derivaciones: Derivacin por la izquierda: S aAS aSbAS aabAS aabbaS aabbaa Derivacin por la derecha: S aAS aAa aSbAa aSbbaa aabbaa

92

Modelos de Computacin I S A a a A a A S A a a a A a A S A a a S A a

Figura 4.3: Dos rboles de derivacin para a5 La existencia en una gramtica de varias derivaciones para una misma palabra no produce ningn problema, siempre que den lugar al mismo rbol. Sin embargo, existe otro problema que si puede ser ms grave: la ambigedad. Una gramtica se dice ambigua si existen dos rboles de derivacin distintos para una misma palabra. Esto es un problema, ya que la gramtica no determina la estructura sintctica de los elementos de la palabra, no determina como se agrupan los distintos elementos para formar la palabra completa. Ejemplo 53 La gramtica, S AA, A aSa, A a es ambigua: la palabra a5 tiene dos rboles de derivacin distintos (ver Fig. 4.3). Es suciente que haya una palabra con dos rboles de derivacin distintos para que la gramtica sea ambigua. El lenguaje generado por esta gramtica no es inherentemente ambiguo. Esto quiere decir que existe otra gramtica de tipo 2 no ambigua y que genera el mismo lenguaje. El lenguaje generado es {a2+3i : i 0} y otra gramtica no ambigua que tambin geneta este lenguaje es S aa, S aaU , U aaaU , U aaa Aqu a solo tiene un rbol de derivacin asociado (ver Fig. 4.4). Ejemplo 54 La gramtica E I , E I E , E E I , I a|b|c|d es ambigua. La palabra a b c admite dos rboles de derivacin (ver Fig. 4.5). Se puede eliminar la ambigedad eliminando la produccin E I E.

Cap. 4 S a a a U a

Gramticas Libres de Contexto

93

Figura 4.4: Arbol de derivacin para a5 E I a I b E E I c E I a E E I b I c

Figura 4.5: Dos rboles de derivacin para a b c Existen lenguajes inherentemente ambiguos, como es el siguiente L = {an bn cm d m : n 1, m 1} {an bm cm d n : n 1, m 1} Este lenguaje es de tipo 2 o libre del contexto, ya que puede puede generarse por la gramtica S AB, A ab, A aAb, B cd , B cBd , S aCd , C aCd , C bDc, C bc, D bDc, D bc Entonces la palabra aabbccdd puede tener dos derivaciones (ver Fig. 4.6). Aunque no lo demostraremos aqu esta ambigedad no se puede eliminar. Pueden existir otras gramticas de tipo 2 que generen el mismo lenguaje, pero todas ser n ambiguas.

4.2. Simplicacin De Las Gramticas Libres De Contexto


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

94

Modelos de Computacin I S A a a A b b c c B B d d a a b b S C C C c d d c

Figura 4.6: Dos rboles de derivacin para aabbccdd con ellas. Por este motivo interesa simplicarlas lo mas posible y denir unas formas normales para las gramticas que las hagan mas homogneas.

4.2.1. Eliminacin de Smbolos y Producciones Intiles


Un smbolo X (V T ) se dice til si y solo si existe una cadena de derivaciones en G tal que S X w T es decir si interviene en la derivacin de alguna palabra del lenguaje generado por la gramtica. Una produccin se dice til si y solo si todos sus smbolos son tiles. Esto es equivalente a que pueda usarse en la derivacin de alguna palabra del lenguaje asociado a la gramtica. Esta claro que eliminando todos los smbolos y producciones intiles el lenguaje generado por la gramtica no cambia. El algoritmo para eliminar los smbolos y producciones intiles consta de dos pasos fundamentales: 1. Eliminar las variables desde las que no se puede llegar a una palabra de T y las producciones en las que aparezcan. 2. Eliminar aquellos smbolos que no sean alcanzables desde el estado inicial, S, y las producciones en las que estos aparezcan. El primer paso se realiza con el siguiente algoritmo (V es un conjunto de variables):

Cap. 4

Gramticas Libres de Contexto

95

/ 1. V = 0 2. Para cada produccin de la forma A w, A se introduce en V . 3. Mientras V cambie 4. Para cada produccin B 5. Si todas las variables de pertenecen a V , B se introduce en V 6. Eliminar las variables que esten en V y no en V 7. Eliminar todas las producciones donde aparezca una variable de las eliminadas en el paso anterior El segundo paso se realiza con el siguiente algoritmo: V y J son conjuntos de variables. J son las variables por analizar. T es un conjunto de smbolos terminales 1. J = {S} V = {S} / T =0 / 2. Mientras J = 0 3. Extraer un elemento de J : A, (J = J {A}). 4. Para cada produccion de la forma A 5.Para cada variable B en 6. Si B no est en V aadir B a J y a V 7. Poner todos los simbolos terminales de en T 8. Eliminar todas las variables que no esten en V y todos los simbolos terminales que no esten en T . 9. Eliminar todas las producciones donde aparezca un simbolo o variable de los eliminado Ejemplo 55 Es importante aplicar los algoritmos anteriores en el orden especicado para que se garantice que se eliminan todos los smbolos y variables intiles. Como ejemplo de lo anterior, supongamos que tenemos la gramtica dada por S AB, S a, A a En el primer algoritmo se elimina B y la produccin S AB. Entonces en el segundo se elimina la variable A y la produccin A a. Sin embargo, si aplicamos primero el segundo algoritmo, entonces no se elimina nada. Al aplicar despues el primero de los algoritmos se elimina B y la produccin S AB. En denitiva, nos queda la gramtica

96

Modelos de Computacin I

S a, A a donde todava nos queda la variable intil A. Ejemplo 56 Eliminar smbolos y producciones intiles de la gramtica S gAe, S aY B, S cY , A bBY , A ooC , B dd , B D, C jV B, C gi, D n, U kW , V baX X X , V oV, W c, X fV, Y Y hm Primero se aplica el algoritmo primero. Inicialmente V tiene las variables V = {B, D, C , W }. En la siguiente iteracin aadimos a V las variables que se alcanzan desde estas: A y W . V queda igual a {B, D, C , W , A, U }. En la siguiente V = {B, D, C , W , A, U , S}. En la siguiente V = {B, D, C , W , A, U , S}. Como V no cambia ya se ha terminado el ciclo. Estas son las variables desde las que se alcanza una cadena de smbolos terminales. El restos de las variables: X , Y , V, son intiles y se pueden eliminar. Tambin se eliminan las producciones asociadas. La gramtica resultante es: S gAe, A ooC , B dd , B D, C gi, D n, U kW , W c A esta gramtica le aplicamos el segundo algoritmo / J = {S}, V = {S}, T = 0 Tomando S de J y ejecutando las instrucciones del ciclo principal nos queda J = {A}, V = {S, A}, T = {g, e} Tomando A de J, tenemos J = {C }, V = {S, A, C }, T = {g, e, o} Sacando C de J, obtenemos / , V = {S, A, C }, T = {g, e, o, i} J=0 / se acaba el ciclo. Solo nos queda eliminar las variables intiles: B, D, U , W , los Como J = 0 smbolos terminales intiles: n, k, c, d , y las producciones donde estos aparecen. La gramtica queda

Cap. 4

Gramticas Libres de Contexto

97

S gAe, A ooC , C gi En esta gramtica solo se puede generar una palabra: googige. Si el lenguaje generado por una gramtica es vaco, esto se detecta en que la variable S resulta intil en el primer algoritmo. En ese caso se pueden eliminar directamente todas las producciones, pero no el smbolo S. Ejemplo 57 eliminar smbolos y producciones intiles de la gramtica S aSb, S ab, S bcD, S cSE , E aDb, F abc, E abF

4.2.2. Producciones Nulas


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

98

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

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

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

Cap. 4

Gramticas Libres de Contexto

99

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

4.2.3. Producciones Unitarias


Las producciones unitarias son las que tienen la forma AB donde A, B V . Veamos como se puede transformar una gramtica G, en la que L(G), en otra gramtica equivalente en la que no existen producciones unitarias. Para ello, hay que partir de una gramtica sin producciones nulas. Entonces, se calcula el conjunto H de parejas (A, B) tales que B se puede derivar a partir de A: A B. Eso se hace con el siguiente algoritmo / 1. H = 0 2. Para toda produccion de la forma A B, la pareja (A, B) se introduce en H . 3. Mientras H cambie 4. Para cada dos parejas (A, B), (B, C ) 5. Si la pareja (A, C ) no est en H (A, C ) se introduce en H 6. Se eliman las producciones unitarias 7. Para cada produccion A

100

Modelos de Computacin I

8. Para cada pareja (B, A) H 9. Se aade una produccion B

Ejemplo 60 Consideremos la gramtica resultante en el ejemplo 58 del apartado anterior S ABb, S Ab, S Bb, S ABC , S AB, S AC , S BC , S A, S B, S C , C abC , C ab, B bB, B b, A aA, A a, C AB, C A, C B El conjunto H est formado por las parejas {(S, A), (S, B), (S, C ), (C , A), (C, B)}. Entonces se eliminan las producciones S A, S B, S C, C A, CB

Se aaden a continuacion las producciones (no se consideran las repetidas) S a, S ab, S aA, C aA, S bB, C a, S b, C bB, S abC , Cb

Ejemplo 61 El lenguaje L = {an bn : n 1} {an ban : n 1} viene generado por la siguiente gramtica de tipo 2: S A, H ab, S B, A ab, A aHb

H aHb,

B aBa, B b

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

Cap. 4

Gramticas Libres de Contexto

101

4.3. Formas Normales


4.3.1. Forma Normal de Chomsky
Una gramtica de tipo 2 se dice que est en forma normal de Chomsky si y solo si todas las producciones tienen la forma A BC , A a, donde A, B, C V , a T . Toda gram tica de tipo 2 que no acepte la palabra vaca se puede poner en forma normal de Chomsky. Para ello lo primero que hay que hacer es suprimir las producciones nulas y unitarias. Acontinuacin se puede ejecutar el siguiente algoritmo: 1. Para cada produccion de la forma A 1 . . . n , i (V T ), n 2 2. Para cada i , si i es terminal: i = a T 3. Se aade la produccion Ca a 4. Se cambia i por Ca en A 1 . . . n 5. Para cada produccion de la forma A B1 , . . . Bm , m 3 6. Se aaden (m 2) variables D1 , D2 , . . . , Dm2 (distintas para cada produccion) 7. La produccion A B1 . . . Bm se reemplaza por A B1 D1 , D1 B2 D2 , . . . , Dm2 Bm1 Bm Ejemplo 62 Sea la Gramtica G = ({S, A, B}, {a, b}, P, S) dada por las producciones S bA | aB, A bAA | AS | a, B aBB | bS | b

Para pasarla a forma normal de Chomsky, en el ciclo asociado al paso 1 se aaden las producciones Ca a, y las anteriores se transforman en S Cb A | Ca B, A Cb AA | AS | Ca , B Ca BB | Cb S | Cb b Cb b

Al aplicar el paso asociado al paso 5, la gramtica queda S Cb A | Cb B, A Cb D1 | AS | a, E1 B, D1 AA, Cb b

B Ca E1 | Cb S | b,

Ca a,

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

102

Modelos de Computacin I

4.3.2. Forma Normal de Greibach


Una gramtica se dice que est en forma normal de Greibach si y solo si todas las producciones tienen la forma A a donde a T , V . Toda gramtica de tipo 2 que no acepte la palabra vaca se puede poner en forma normal de Greibach. Para ello hay que partir de una gramtica en forma normal de Chomsky y aplicarle el siguiente algoritmo. En realidad no es necesario que la gramtica est en forma normal de Chomsky. Basta que todas las producciones sean de uno de los tipos siguientes: A a, A , a T, V . V .

Claro est, en una gramtica en forma normal de Chomsky, todas las producciones son de alguno de estos dos tipos. En este algoritmo se supone que el conjunto de variables de la gramtica est numerado: V = {A1 , . . . , Am }. El algoritmo se basa en dos operaciones bsicas. La primera es eliminar una produccin, A B de la gramtica G, donde A = B. Esto se hace con los siguientes pasos: 1. Eliminar A B 2. Para cada produccion B 3. Aadir A La idea bsica de esta operacin es la siguiente. Si aplicamos A B, entonces, despus tenemos que realizar una sustitucin de B, mediante una produccin B . Uniendo las dos sustituciones, obtenemos A B . Es decir, A se puede sustituir por . Si eliminamos A B, esta sustitucin ya no se puede hacer, por lo que si no queremos perder la posibilidad de eliminar ninguna palabra despus de esta eliminacin, tenemos que aadir producciones que nos permitan hacer esta sustitucin. Por ese motivo aadimos A , que permite realizar los dos pasos de antes en uno slo. La otra operacin bsica consiste en eliminar todas las producciones del tipo A A donde V . Esto se hace siguiendo los siguiente pasos: 1. Aadir una nueva variable BA 2. Para cada produccion A A 3. Aadir BA y BA BA

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

Gramticas Libres de Contexto

103

no empieza pro A

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

El algoritmo es como sigue: 1. Para cada k = 1, . . ., m 2. Para cada j = 1, . . ., k 1 3. Para cada produccion Ak A j 4. ELIMINA1 (Ak A j ) 5. Si existe alguna produccion de la forma Ak Ak 6. ELIMINA2 (Ak ) A continuacin se puede eliminar denitivamente la recursividad por la izquierda con el siguiente algoritmo pasando a forma normal de Greibach 1. Para cada i = m 1, . . ., 1 2. Para cada produccion de la forma Ai A j , 3. ELIMINA1 (Ai A j ) 4. Para cada i = 1, 2, . . ., m 5. Para cada produccion de la forma B j Ai . 6. ELIMINA1 (B j Ai )

j>i

El resultado del segundo algoritmo es ya una gramtica en forma normal de Greibach.

104

Modelos de Computacin I

Ejemplo 63 Pasar a forma normal de Greibach la gramtica dada por las producciones A1 A 2 A3 , A2 A 3 A1 , A2 b, A 3 A 1 A2 , A3 a

Aplicamos ELIMINA1 a A3 A1 A2 . Se elimina esta produccin y se aade: A3 A2 A3 A2 Queda: A1 A2 A3 , A2 A3 A1 , A2 b, A3 a, A 3 A 2 A3 A2

Aplicamos ELIMINA1 a A3 A2 A3 A2 Se elimina esta produccin y se aaden: A3 A3 A1 A3 A2 , Queda: A1 A 2 A3 , A3 a, A2 A 3 A1 ,

A3 bA3 A2

A2 b, A3 bA3 A2

A 3 A 3 A1 A3 A2 ,

Aplicamos ELIMINA2 a A3 Se aade B3 y las producciones B3 A1 A3 A2 , B3 A1 A3 A2 B3 Se elimina A3 A3 A1 A3 A2 . Se aaden las producciones: A3 aB3 , A3 bA3 A2 B3 Queda: A1 A 2 A3 , A2 A 3 A1 , A2 b, A3 a, A3 bA3 A2 B3 A1 A3 A2 , B3 A1 A3 A2 B3 A3 aB3 , A3 bA3 A2 B3 Se aplica ELIMINA1 a A2 A3 A1 . Se elimina esta produccin y se aaden: A2 aA1 , Queda: A1 A 2 A3 , A2 b, A2 aA1 , A2 aB3 A1 , A2 bA3 A2 B3 A1 , A2 bA3 A2 A1 , A3 a, A3 bA3 A2 , B3 A 1 A3 A2 , B3 A1 A3 A2 B3 A3 aB3 , A3 bA3 A2 B3 Se aplica ELIMINA1 a A1 A2 A3 . Se elimina esta produccin y se aaden: A2 aB3 A1 , A2 bA3 A2 B3 A1 , A2 bA3 A2 A1

Cap. 4

Gramticas Libres de Contexto

105

A1 bA3 , Queda:

A1 aA1 A3 ,

A1 aB3 A1 A3 ,

A1 bA3 A2 B3 A1 A3 ,

A1 bA3 A2 A1 A3

A2 b, A2 aA1 A2 aB3 A1 , A2 bA3 A2 B3 A1 , A2 bA3 A2 A1 , A3 a, A3 bA3 A2 , B3 A 1 A3 A2 , B3 A 1 A3 A2 B3 , A3 aB3 , A3 bA3 A2 B3 , A1 bA3 , A1 aA1 A3 , A1 aB3 A1 A3 , A1 bA3 A2 B3 A1 A3 , A1 bA3 A2 A1 A3 Se aplica ELIMINA1 a B3 A1 A3 A2 Se elimina esta produccin y se aaden: B3 bA3 A3 A2 , B3 aA1 A3 A3 A2 , B3 aB3 A1 A3 A3 A2 , B3 bA3 A2 B3 A1 A3 A3 A2 , B3 aB3 A1 A3 A3 A2 , Queda: A2 b, A2 aA1 A2 aB3 A1 , A2 bA3 A2 B3 A1 , A2 bA3 A2 A1 A3 a, A3 bA3 A2 , B3 A 1 A3 A2 B3 , A3 aB3 , A3 bA3 A2 B3 , A1 bA3 , A1 aA1 A3 , A1 aB3 A1 A3 , A1 bA3 A2 B3 A1 A3 , A1 bA3 A2 A1 A3 B3 bA3 A3 A2 , B3 aA1 A3 A3 A2 , B3 aB3 A1 A3 A3 A2 , B3 bA3 A2 B3 A1 A3 A3 A2 , B3 aB3 A1 A3 A3 A2 , Se aplica ELIMINA1 a B3 A1 A3 A2 B3 . Se elimina esta produccin y se aaden: B3 bA3 A3 A2 B3 , B3 aA1 A3 A3 A2 B3 , B3 aB3 A1 A3 A3 A2 B3 , B3 bA3 A2 B3 A1 A3 A3 A2 B3 , B3 aB3 A1 A3 A3 A2 B3 , Resultado: A2 b, A2 bA3 A2 B3 A1 , A3 bA3 A2 , A1 bA3 , A1 bA3 A2 B3 A1 A3 , B3 aA1 A3 A3 A2 , B3 aB3 A1 A3 A3 A2 , B3 aB3 A1 A3 A3 A2 B3 , A2 aA1 , A2 bA3 A2 A1 A3 aB3 , A1 aA1 A3 , A1 bA3 A2 A1 A3 , B3 aB3 A1 A3 A3 A2 , B3 bA3 A3 A2 B3 , B3 bA3 A2 B3 A1 A3 A3 A2 B3 , A2 aB3 A1 , A3 a, A3 bA3 A2 B3 , A1 aB3 A1 A3 , B3 bA3 A3 A2 , B3 bA3 A2 B3 A1 A3 A3 A2 , B3 aA1 A3 A3 A2 B3 , B3 aB3 A1 A3 A3 A2 B3

106

Modelos de Computacin I

Captulo 5 Autmatas con Pila

107

108

Modelos de Computacin I

5.1. Denicin de Autmata con Pila


Los lenguajes generados por las gramticas libres de contexto tambin tienen un autmata asociado que es capaz de reconocerlos. Estos autmatas son parecidos a los autmatas nitos determinsticos, solo que ahora tendrn un dispositivo de memoria de capacidad ilimitada: una pila. A contincuacin daremos la denicin formal de autmata con pila no determinstico (APND). Al contrario que en los autmatas nitos, los autmatas con pila no detrminsticos y determinsticos no aceptan las mismas familias de lenguajes. Precisamente son los no determsticos los asociados con los lenguajes libres de contexto. Los determinsticos aceptan una familia mas restringida de lenguajes. Denicin 43 Un autmata con pila no determinstico (APND) es una septupla (Q, A, B, , q 0 , Z0 , F ) en la que Q es un conjunto nito de estados A es un alfabeto de entrada B es un alfabeto para la pila es la funcin de transicin : Q (A {}) B (Q B ) q0 es el estado inicial Z0 es el smbolo inicial de la pila F es el conjunto de estados nales La funcin de transicin aplica cada estado, cada smbolo de entrada (incluyendo la cadena vaca) y cada smbolo tope de la pila en un conjunto de posibles movimientos. Cada movimiento parte de un estado, un smbolo de la cinta de entrada y un smbolo tope de la pila. El movimento en s consiste en un cambio de estado, en la lectura del smbolo de entrada y en la subtitucin del smbolo tope de la pila por una cadena de smbolos. / ) donde Ejemplo 64 Sea el autmata M = ({q1 , q2 }, {0, 1, c}, {R, B, G}, , q1 , R, 0 (q1 , 0, R) = {(q1 , BR)} (q1 , 0, B) = {(q1 , BB)} (q1 , 0, G) = {(q1 , BG)} (q1 , c, R) = {(q2 , R)} (q1 , c, G) = {(q2 , G)} (q2 , 1, G) = {(q2 , )} (q1 , 1, R) = {(q1 , GR)} (q1 , 1, B) = {(q1 , GB)} (q1 , 1, G) = {(q1 , GG)} (q1 , c, B) = {(q2 , B)} (q2 , 0, B) = {(q2 , )} (q2 , , R) = {(q2 , )}

Cap. 5

Autmatas con Pila

109

La interpretacin es que si el autmata est en el estado q1 y lee un 0 entonces permanece en el mismo estado y aade una B a la pila; si lo que lee es un 1, entonces aade una G; si lee una c pasa a q2 . En q2 se saca una B por cada 0, y una G por cada 1. Se llama descripcin instant nea o conguracin de un autmata con pila a una tripleta (q, u, ) Q A B en la que q es el estado en el se encuentra el autmata, u es la parte de la cadena de entrada que queda por leer y el contenido de la pila (el primer smbolo es el tope de la pila). Denicin 44 Se dice que de la conguracin (q, au, Z ) se puede llegar a la conguracin ( p, u, ) y se escribe (q, au, Z ) ( p, u, ) si y solo si ( p, ) (q, a, Z ) donde a puede ser cualquier smbolo de entrada o la cadena vaca. Denicin 45 Si C1 y C2 son dos conguraciones, se dice que se puede llegar de C1 a C2 mediante una sucesin de pasos de c lculo y se escribe C1 conguraciones T1 , . . . , Tn tales que C1 = T1 T Tn1

C2 si y solo si exite una sucesin de

Tn = C2

Denicin 46 Si M es un APND y u A , se llama conguracin inicial correspondiente a esta entrada, u, a (q0 , u, Z0 ) donde q0 es el estado inicial y Z0 el smbolo inicial de la pila. Ejemplo 65 En el caso del autmata con pila del ejemplo anterior tenemos (q1 , 011c110, R) (q1 , 11c110, BR) (q2 , 10, GBR) (q1 , 1c110, GBR) (q2 , 0, BR) (q1 , c110, GGBR) (q2 , , )

(q2 , 110, GGBR)

(q2 , , R)

5.1.1. Lenguaje aceptado por un autmata con pila


Existen dos criterios para determinar el lenguaje aceptado por un APND: a) Lenguaje aceptado por estados nales: L(M ) = {w A : (q0 , w, Z0 )

( p, , ), p F, B }

110

Modelos de Computacin I

b) Lenguaje aceptado por pila vaca: N (M ) = {w A : (q0 , w, Z0 )

( p, , ), p Q}

En el primer caso, una palabra es aceptada, si se puede llegar a un estado nal despues de consumir la entrada. En el segundo criterio, los estados nales no tienen ningn signicado, y una palabra se acepta si cuando se termina de leer la entrada la pila se queda vaca. Ejemplo 66 En el caso del ejemplo 64, la palabra 011c110 es aceptada por el autmata por el criterio de pila de vaca. Es decir, 011c110 N (M ). De hecho, el lenguaje aceptado por el este autmata, segn el criterio de la pila vaca es N (M ) = {wcw : w {0, 1} }. Para este mismo / , ya que al no haber estados nales, nunca se puede vericar la condicin de autmata L(M ) = 0 aceptacin. Una pequea modicacin del APND, lo tranformara en una autmata que aceptase el mismo lenguaje, pero ahora por el criterio de estados nales. Solo hay que considerar M = ({q1 , q2 , q3 }, {0, 1, c}, {R, B, G}, , q1 , R, {q3 }) donde (q1 , 0, R) = {(q1 , BR)} (q1 , 0, B) = {(q1 , BB)} (q1 , 0, G) = {(q1 , BG)} (q1 , c, R) = {(q2 , R)} (q1 , c, G) = {(q2 , G)} (q2 , 1, G) = {(q2 , )} Teorema 15 (q1 , 1, R) = {(q1 , GR)} (q1 , 1, B) = {(q1 , GB)} (q1 , 1, G) = {(q1 , GG)} (q1 , c, B) = {(q2 , B)} (q2 , 0, B) = {(q2 , )} (q2 , , R) = {(q3 , R)}

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

b) Si M es un APND entonces existe otro autmata M , tal que L(M ) = N (M ). Demostracin.a) Si M = (Q, A, B, , q0, Z0 , F ), entonces el autmata M se construye a partir de M siguiendo los siguientes pasos: Se aaden dos estados nuevos, q0 y q f . El estado inicial de M ser q0 y q f ser estado nal de M . Se aade un nuevo smbolo a B: Z0 . Este ser el nuevo smbolo inicial de la pila. Se mantienen todas las transiciones de M , aadindose las siguientes: (q0 , , Z0 ) = {(q0 , Z0 Z0 )} (q, , Z0 ) = {(q f , Z0 )}, q Q

Cap. 5

Autmatas con Pila

111

b) Si M = (Q, A, B, , q0, Z0 , F ), entonces el autmata M se construye a partir de M siguiendo los siguientes pasos: Se aaden dos estados nuevos, q0 y qs . El estado incial de M ser q0 . Se aade un nuevo smbolo a B: Z0 . Este ser el nuevo smbolo inicial de la pila. Se mantienen todas las transiciones de M , aadindose las siguientes: (q0 , , Z0 ) = {(q0 , Z0 Z0 )} (q, , H ) = {(qs , H )}, q F, H B {Z0 } (qs , , H ) = {(qs , )}, H B {Z0 }

5.2. Autmatas con Pila y Lenguajes Libres de Contexto


Teorema 16 Si un lenguaje es generado por una gramtica libre del contexto, entonces es aceptado por un Autmata con Pila No-Determinstico. Demostracin.- Supongamos que la gramtica no acepta la palabra vaca. En caso de que acepte la palabra vaca se le eliminara y despues se podra transformar el autmata para aadir la palabra vaca al lenguaje aceptado por el autmata. Transformemos entonces la gramtica a forma normal de Greibach. El autmata con pila / ) donde la funcin de transicin viene dada por correspondiente es M = ({q}, T , V, , q, S, 0 (q, ) (q, a, A) A a P Este autmata acepta por pila vaca el mismo lenguaje que genera la gramtica.

Ejemplo 67 Para la gramtica en forma normal de Greibach: S aAA A aS | bS | a el autmata es donde /) M = ({q}, {a, b}, {A, S}, , q, S, 0 (q, a, S) = {(q, AA)}

112

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

Teorema 17 Si L = N (M ) donde M es un APND, existe una gramtica libre del contexto G, tal que L(G) = L. Demostracin./ ), tal que L = N (M ). La gramtica G = (V, A, P, S) se construye Sea M = (Q, A, B, , q0, Z0 , 0 de la siguiente forma: V ser el conjunto de los objetos de la forma [q, C , p], donde p, q Q y C B, adems de la variable S que ser la variable inicial. P ser el conjunto de las producciones de la forma 1. S [q0 , Z , q] para cada q Q. 2. [q, C , qm ] a[ p, D1 , q1 ][q1 , D2 , q2 ] . . . [qm1 , Dm , qm ] donde a A , y C , D1 , . . . , Dm B tales que ( p, D1 D2 ...Dm ) (q, a, C ) (si m = 0, entonces la produccin es [q, A, p] a). Esta gramtica genera precisamente el lenguaje N (M ). La idea de la demostracin es que la generacin de una palabra en esta gramtica simula el funcionamiento del autmata no determinstico. En particular, se vericar que [q, C , p] generar la palabra x si y solo si el autmata partiendo del estado q y llegando al estado p, puede leer la palabra x eliminando el smbolo C de la pila.

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

Cap. 5

Autmatas con Pila

113

S [q0 , Z0 , q0 ] S [q0 , Z0 , q1 ] [q0 , Z0 , q0 ] 0[q0 , X , q0 ][q0 , Z0 , q0 ] [q0 , Z0 , q1 ] 0[q0 , X , q0 ][q0 , Z0 , q1 ] [q0 , Z0 , q0 ] 0[q0 , X , q1 ][q1 , Z0 , q0 ] [q0 , Z0 , q1 ] 0[q0 , X , q1 ][q1 , Z0 , q1 ] [q0 , X , q0 ] 0[q0 , X , q0 ][q0 , X , q0] [q0 , X , q1 ] 0[q0 , X , q0 ][q0 , X , q1] [q0 , X , q0 ] 0[q0 , X , q1 ][q1 , X , q0] [q0 , X , q1 ] 0[q0 , X , q1 ][q1 , X , q1] [q0 , X , q1 ] 1 [q1 , X , q1 ] 1 [q1 , X , q1 ] [q1 , Z0 , q1 ] Elimando smbolos y producciones intiles queda S [q0 , Z0 , q1 ] [q0 , Z0 , q1 ] 0[q0 , X , q1 ][q1 , Z0 , q1 ] [q0 , X , q1 ] 0[q0 , X , q1 ][q1 , X , q1] [q1 , X , q1 ] 1 [q1 , X , q1 ] [q1 , Z0 , q1 ] Despus de esta equivalencia un lenguaje independiente del contexto puede denirse indistintamente como aquel que es generado por una gramtica de tipo 2 o bien como aquel que es aceptado por un autmata con pila.

5.3. Lenguajes Independientes del Contexto Deterministas


Denicin 47 Un autmata con pila se dice que es determinista (APD) si y solo si se verican las dos condiciones siguientes / entonces (q, a, Z ) = 0 / , a A. 1. q Q, Z B, si (q, , Z ) = 0 2. a A , z B, q F, (q, a, Z ) nunca contiene ms de un elemento.

114

Modelos de Computacin I

El autmata del Ejemplo 64 es un autmata determinista. La clase de lenguajes aceptados por un autmata con pila determinista es ms reducida que la clase de los lenguajes aceptados por los autmatas con pila genricos. Adems, en el caso de los autmatas con pila deterministas, los dos criterios (pila vaca y estados nales) no son equivalentes. Denicin 48 Un lenguaje L se dice que es independiente del contextos determinista si y solo si es aceptado por un autmata con pila determinista por el criterio de estados nales. Ejemplo 69 El lenguaje aceptado por el autmata del Ejemplo 64 era L = {wcw 1 : w {0, 1} }. El autmata era determinista, pero el criterio usado era el de estados nales. Sin embargo, el autmata se puede convertir en otro tambin determinista y que acepte L por el criterio de estados nales. Sea el autmata M = ({q1 , q2 }, {0, 1, c}, {R, B, G}, , q1 , R, {q3 }) donde (q1 , 0, R) = {(q1 , BR)} (q1 , 0, B) = {(q1 , BB)} (q1 , 0, G) = {(q1 , BG)} (q1 , c, R) = {(q2 , R)} (q1 , c, G) = {(q2 , G)} (q2 , 1, G) = {(q2 , )} (q1 , 1, R) = {(q1 , GR)} (q1 , 1, B) = {(q1 , GB)} (q1 , 1, G) = {(q1 , GG)} (q1 , c, B) = {(q2 , B)} (q2 , 0, B) = {(q2 , )} (q2 , , R) = {(q3 , )}

El autmata tiene un slo estado nal y lo que hemos hecho es que, al mismo tiempo que dejamos la pila vaca, pasamos a ese estado nal. Lo que hemos hecho en el ejemplo anterior es siempre posible y se puede demostrar el siguiente resultado. Teorema 18 Si L es aceptado por un autmata con pila determinista M por el criterio de pila vaca, entonces existe otro autmata con pila determinista M que acepta el mismo lenguaje por el criterio de estados nales. Demostracin.- La demostracin es la misma que la del apartado a) del Teorema 15. Slo hay que tener en cuenta que en la transformacin que se realiza, si partimos de un autmata con pila determinista M , entonces el autmata con pila que se obtiene, M es tambin determinista. El resultado inverso no es cierto. Hay lenguajes que son aceptados por autmatas con pila por el criterio de estados nales, que no pueden ser aceptados por el criterio de pila vaca.

Cap. 5

Autmatas con Pila

115

Ejemplo 70 El siguiente autmata determinista acepta por el criterio de estados nales el lenguaje de las palabras del lenguaje sobre {0, 1} con la misma cantidad de ceros que de unos, donde q2 es el estado nal y R el smbolo inicial de la pila. (q1 , 0, X ) = {(q1 , X X )} (q1 , 1, Y ) = {(q1 , YY )} (q1 , 1, X ) = {(q1 , )} (q1 , 0, Y ) = {(q1 , )} (q1 , , R) = {(q2 , R)} (q2 , 0, R) = {(q1 , X R)} (q2 , 1, R) = {(q1 , Y R)} Sin embargo, no puede ser aceptado por un autmata determinista por el criterio de pila vaca. El problema es el siguiente: si fuese posible, despus de leer 0011 se quedara la pila vaca, pero entonces la palabra formada por 001101 no podra ser aceptada, porque al ser el autmata determinista, despus de leer la primera parte de la parte, 0011, la pila se quedara vaca y como un autmata no puede seguir funcionando con la pila vaca, la palabra completa 001101 no podra ser leida y, por tanto no es aceptada. El razonamiento del ejemplo anterior se puede generalizar a cualquier lenguaje en el que se de la misma situacin: dos palabras u y v del lenguaje distintas tal que una es un prejo de la otra (una subcadena del principio de la palabra). De hecho esta propiedad es fundamental para caracterizar a los lenguajes aceptados por un autmata con pila deterministas por el criterio de estados nales que lo son tambin por el criterio de pila vaca. En lo que sigue, formalizamos lo que que acabamos de decir. Denicin 49 Un lenguaje L se dice que tiene la propiedad prejo si no existen dos palabras u, v L tales que u = v y una es un prejo de la otra. El siguiente teorema (que enunciamos sin demostracin) establece la relacin entre los dos criterios de aceptacin en autmatas con pila deterministas. Teorema 19 Un lenguaje L puede ser acepatado por un autmata con pila determinista por el criterio de pila vaca si y solo si puede ser aceptado por un autmata con pila determinista por el criterio de estados nales y tiene la propiedad prejo. Si tenemos un lenguaje, L, independiente del contexto determinista que no cumple la propiedad prejo es fcil tranformarlo en otro lenguaje muy similar que cumple la propiedad prejo y puede ser aceptado por un autmata con pila determinista por el criterio de pila vaca. Basta con considerar un smbolo $ L y entonces el lenguaje viene dado por L{$} = {u$ : u L} Es como aadirle un smbolo de n de palabra ($) a todas las palabras de L.

116

Modelos de Computacin I

Finalmente, es importante que quede claro que hay lenguajes que son independientes del contexto, pero no deterministas. Como ejemplo, podemos considerar L = {u {0, 1} : u = u1 }. No vamos a demostrar formalmente que este lenguaje no es deterministas. Intuitivamente, las palabras de este lenguaje se reconocen metiendo smbolos en la pila hasta la mitad de la palabra (primera fase), y despus de la mitad se sacan smbolos de la pila (segunda fase). Si aparece el smbolo inicial de la pila se pasa a un estado nal y la palabra es aceptada. El problema es que cuando se est leyendo la palabra smbolo a smbolo no se sabe cuando estamos en la mitad de la palabra y cuando hay que pasar de meter smbolos a sacar. Si perminitimos que haya no determinismo esto se resuelve dando, en todo momento de la primera fase, la opcin de cambiar de la primera a la segunda fase.

Captulo 6 Propiedades de los Lenguajes Libres del Contexto

117

118

Modelos de Computacin I

6.1. Lema de Bombeo


Comenzamos esta seccin con un lema que nos da una condicin necesaria que deben de cumplir todos los lenguajes libres de contexto. Nos sirve para demostrar que un lenguaje dado no es libre de contexto, comprobando que no cumple esta condicin necesaria. Lema 2 (Lema de Bombeo para lenguajes libres de contexto) Sea L un lenguaje libre de contexto. Entonces, existe una constante n, que depende solo de L, tal que si z L y |z| n, z se puede escribir de la forma z = uvwxy de forma que 1. |vx| 1 2. |vwx| n, y 3. i 0, uvi wxi y L Demostracin.Slo vamos a indicar una idea de cmo es la demostracin. Supongamos que la gramtica no tiene producciones nulas ni unitarias (si existieses siempre se podran eliminar). Supongamos un rbol de derivacin de una palabra u generada por la gramtica. Es fcil ver que si la longitud de u es sucientemente grande, en su rbol de derivacin debe de existir un camino de longitud mayor que el nmero de variables. Sea N un nmero que garantice que se verica esta propiedad. En dicho camino, al menos debe de haber una variable repetida. Supongamos que esta variable es A, y que la gura 6.1 representa el rbol de derivacin y dos apariciones consecutivas de A.

Ejemplo 71 Vamos a utilizar el lema de bombeo para probar que el lenguaje L = {a i bi ci | i 1} no es libre de contexto. Supongamos que L fuese libre de contexto y sea n la constante especicada en el Lema de Bombeo. Consideremos la palabra z = an bn cn L, que tiene una longitud mayor que n. Consideremos que z se puede descomponer de la forma z = uvxy, vericando las condiciones del lema de bombeo. Como |vwx| n, no es posible para vx tener smbolos a y c al mismo tiempo: entre la ltima a y la primera c hay n smbolos. En estas condiciones se pueden dar los siguientes casos: |vx| contiene solamente smbolos a. En este caso para i = 0, uv 0 wx0 y = uwy debera de pertenecer a L por el lema de bombeo. Pero uwy contiene n smbolos b, n smbolos c, menos de n smbolos a, con lo que no podra pertenecer a L y se obtiene una contradiccin.

Cap. 6 S ... u ... ... v ... ... ... A ... A w ...

Propiedades de los Lenguajes Libres del Contexto

119

... y ... ... x ...

Figura 6.1: Arbol de Derivacin en el Lema de Bombeo |vx| contiene solamente smbolos b. Se llega a una contradiccin por un procedimiento similar al anterior. |vx| contiene solamente smbolos c. Se llega a una contradiccin por un procedimiento similar. |vx| contiene smbolos a y b. En este caso, uwy tendra ms smbolos c que a o b, con lo que se llegara de nuevo a una contradiccin. |vx| contiene smbolos b y c. En este caso, uwy tendra ms smbolos a que b o c, con lo que se llegara tambin a una contradiccin. En todo caso se llega a una contradiccin y el lema de bombeo no puede cumplirse, con lo que L no puede ser libre de contexto. Es importante sealar que el lema de bombeo no es una condicin suciente. Es solo necesaria. As si un lenguaje verica la condicin del lema de bombeo no podemos garantizar que sea libre de contexto. Un ejemplo de uno de estos lenguajes es L = {ai b j ck d l |(i = 0) ( j = k = l )} Ejemplo 72 Demostrar que el lenguaje L = {ai b j ci d j : i, j 0} no es libre de contexto. Ejemplo 73 Demostrar que el lenguaje L = {ai b j ck : i j k 0} no es libre de contexto.

120

Modelos de Computacin I

6.2. Propiedades de Clausura de los Lenguajes Libres de Contexto


Teorema 20 Los lengaujes libres de contexto son cerrados para las operaciones: Unin Concatenacin Clausura Demostracin.Sean G1 = (V1 , T1 , P1 , S1 ) y G2 = (V2 , T2 , P2 , S2 ) dos gramticas libres de contexto y L1 y L2 los lenguajes que generan. Supongamos que los conjuntos de variables son disjuntos. Demostraremos que los lenguajes L1 L2 , L1 L2 y L 1 son libres de contexto, encontrando gramticas de tipo 2 que los generen. L1 L2 . Una gramtica que genera este lenguaje es G3 = (V1 V2 {S3 }, T1 T2 , P3 , S3 ), donde S3 es una nueva variable, y P3 = P1 P2 ms las producciones S3 S1 y S3 S2 . L1 L2 . Una gramtica que genera este lenguaje es G4 = (V1 V2 {S4 }, T1 T2 , P4 , S4 ), donde S4 es una nueva variable, y P4 = P1 P2 ms la produccin S4 S1 S2 . L 1 . Una gramtica que genera este lenguaje es G 5 = (V1 {S5 }, T1 , P5 , S5 ), donde P5 es P1 ms las producciones S5 S1 S5 y S5 .

Algunas propiedades de clausura de los lenguajes regulares no se verican en la clase de los lenguajes libres de contexto, como las que expresan el siguiente teorema y corolario. Teorema 21 La clase de los lenguajes libres de contexto no es cerrada para la interseccin. Demostracin.- Sabemos que el lenguaje L = {ai bi ci |i 1} no es libre de contexto. Por otra parte los lenguajes L2 = {ai bi c j |i 1 y j 1} y L3 = {ai b j c j |i 1 y j 1} si lo son. El primero de ellos es generado por la gramtica: S AB A aAb|ab B cB|c

Cap. 6 y el segundo, por la gramtica:

Propiedades de los Lenguajes Libres del Contexto

121

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

Corolario 1 La clase de lenguajes libres de contexto no es cerrada para el complementario. Demostracin.Es inmediato, ya que como la clase es cerrada para la unin, si lo fuese para el complementario, se podra demostrar, usando las leyes DeMorgan que lo es tambin para la interseccin.

6.3. Algoritmos de Decisin para los Lenguajes Libres de Contexto


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

122

Modelos de Computacin I

a) De hecho, ya hemos visto un algoritmo para determinar si el lenguaje generado por una gramtica de tipo 2 es vaco. En el la primera parte del algoritmo para eliminar smbolos y producciones intiles de una gramtica, se determinaban las variables que podan generar una cadena fromada exclusivamente por smbolos terminales. El lenguaje generado es vaco si y solo si la variable inicial S es eliminada: no puede generar una palabra de smbolos terminales. b) y c) Para determinar si el lenguaje generado por una gramtica de tipo 2 es nito o innito pasamos la gramtica a forma normal de Chomsky, sin smbolos ni producciones intiles. En estas condiciones todas las producciones son de la forma: A BC , A a Se construye entonces un grafo dirigido en el que los vrtices son las variables y en el que para cada produccin de la forma A BC se consideran dos arcos: uno de A a B y otro de A a C . Se puede comprobar que el lenguaje generado es nito si y solo si el grafo construido de esta forma no tiene ciclos dirigidos.

Ejemplo 74 Consideremos la gramtica con producciones, S AB A BC |a B CC |b Ca El grafo asociado es el de la gura 6.2. No tiene ciclos y el lenguaje es nito. Si aadimos la produccin C AB, el grafo tiene ciclos (gura 6.3) y el lenguaje generado es innito.

6.3.1. Algoritmos de Pertenencia


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

Cap. 6 S B

Propiedades de los Lenguajes Libres del Contexto A C

123

Figura 6.2: grafo asociado a una gramtica de tipo 2 con lenguaje nito S B A C

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

124

Modelos de Computacin I

de Cocke-Younger-Kasami (CYK). Este algoritmo se aplica a palabras en forma normal de Chomsky. Este consta de los siguientes pasos (n es la longitud de la palabra). 1. Para i = 1 hasta n 2. Calcular Vi1 = {A | A a es una produccion y el simbolo i-esimo de u es a} 3. Para j = 2 hasta n 4. Para i = 1 hasta n j + 1 / 5. Vi j = 0 6. Para k = 1 hasta j 1 Vi j = Vi j {A | A BC es una produccion, B Vik y C Vi+k, jk } Este algoritmo calcula para todo i, j(i {1, . . ., n}, j n j + 1), el conjunto de variables Vi j que generan ui j , donde ui j es la subcadena de u que comienza en el smbolo que ocupa la posicin i y que contiene j smbolos. La palabra u ser generada por la gramtica si la variable inicial S pertenece al conjunto V1n . Los clculos se pueden organizar en una tabla como la de la siguiente gura (para una palabra de longitud 5): u11 V11 V12 V13 V14 V15 u21 V21 V22 V23 V24 u31 V31 V32 V33 u41 V41 V42 u51 V51

En ella, cada Vi, j se coloca en una casilla de la tabla. En la parte superior se ponen los smbolos de la palabra para la que queremos comprobar la pertenencia. La ventaja es que es fcil localizar los emparejamientos de variables que hay que comprobar para calcular cada conjunto Vi j . Se comienza en la casilla que ocupa la misma columna y est en la parte superior de la tabla, y la casilla que est en la esquina superior derecha, emparejando todas las variables de estas dos casillas. A continuacin elegimos como primera casilla la que est justo debajo de la

Cap. 6

Propiedades de los Lenguajes Libres del Contexto

125

primera anterior, y como segunda casilla la que ocupa la esquina superior derecha de la segunda anterior. Este proceso se contina hasta que se eligen como primera casilla todas las que estn encima de la que se est calculando. La siguiente gura ilustra el proceso que se sigue en las emparejamientos (para un elemento de la cuarta la, en una palabra de longitud 5). u11 u21 V21 V22 V23 V24 V33 V42 u31 u41 u51 V51

Ejemplo 75 Consideremos la gramtica libre de contexto dada por las producciones S AB|BC A BA|a B CC |b C AB|a Comprobar la pertenencia de las palabras baaba, aaaaa, aaaaaa al lenguaje generado por la gramtica. El Algoritmo de Early El algoritmo de Early es tambin de complejidad O(n3 ) en el caso general, pero es lineal para gramticas LR(1), que son las que habitualmente se emplean para especicar la sintaxis de las lenguajes de programacin. Al contrario que el algoritmo de Cocke-Younger-Kasami que trata de obtener las palabras de abajo hacia arriba (desde los smbolos terminales al smbolo inicial, el algoritmo de Early comenzar en el smbolo inicial (funciona de arriba hacia abajo).

126

Modelos de Computacin I

Sea G una gramtica con smbolo inicial S y que no tenga producciones nulas ni unitarias. Supondremos que u[i.. j] es la subcadena de u que va de la posicin i a la posicin j. El algoritmo producir registros de la forma (i, j, A, , ), donde i y j son enteros y A es una produccin de la gramtica. La existencia de un registro indicar un hecho y un objetivo. El hecho es que u[i + 1.. j] es derivable a partir de y el objetivo es encontrar todos los k takes que deriva a u[ j + 1..k]. Si encontramos uno de estos k sabemos que A deriva u[i + 1..k]. Para cada j, REGIST ROS[ j] contendr todos los registros existentes de la forma (i, j, A, , ). El algoritmos consta de los siguiente pasos: P1 Inicializacin.- Sea REGIST ROS[0] = {(0, 0, S, , ) : S es una produccin} / para j = 1, . . ., n. REGIST ROS[ j] = 0 j=0 P2 Clausura.- Para cada registro (i, j, A, , B) en REGIST ROS[ j] y cada produccin B , crear el registro ( j, j, B, , ) e insertarlo en REGIST ROS[ j]. Repetir la operacin recursivamente para los nuevos registros insertados. P3 Avance.- Para cada registro (i, j, A, , c) en REGIST ROS[ j], donde c es un smbolo terminal que aparece en la posicin j + 1 de u, crear (i, j + 1, A, c, ) e insertarlo en REGIST ROS[ j + 1]. Hacer j = j + 1. P4 Terminacin.- Para cada par de registros de la forma (i, j, A, , ) en REGIST ROS[ j] y (h, i, B, A, ) en REGIST ROS[i], crear el nuevo registro (h, j, B, A, ) e insertarlo en REGIST ROS[ j]. P5 Si j < n ir a P2. P6 Si en REGIST ROS[n] hay un registro de la forma (0, n, S, , ), entonces u es generada. En caso contrario no es generada. Ejemplo 76 Comprobar mediante el algoritmo de Early si la palabra baa es generada por la gramtica con producciones: S AB, B CC , S BC , B b, A BA, C AB, A a, Ca

Despus de aplicar el paso de inicializacin, el contenido de REGIST ROS[0] es: REGIST ROS[0] :(0, 0, S, , AB), (0, 0, S, , BC )

Cap. 6

Propiedades de los Lenguajes Libres del Contexto

127

(0, 0, A, , BA), (0, 0, A, , a), (0, 0, B, , CC ), (0, 0, B, , b), (0, 0, C , , AB), (0, 0, C , , a), REGIST ROS[1] :(0, 1, B, b, ), (0, 1, S, B, C ), (0, 1, A, B, A), (1, 1, C , , AB), (1, 1, C , , a), (1, 1, A, , BA), (1, 1, A, , a), (1, 1, B, , CC ), (1, 1, B, , b) REGIST ROS[2] :(1, 2, C , a, ), (1, 2, A, a, ), (0, 2, S, BC , ), (0, 2, A, BA, ), (1, 2, C , A, B), (1, 2, B, C , C ), (0, 2, S, A, B), (0, 2, C , A, B), (2, 2, B, , CC ), (2, 2, B, , b), (2, 2, C , , AB), (2, 2, C, , a), (2, 2, A, , BA), (2, 2, A, , a) REGIST ROS[3] :(2, 3, C , a, ), (2, 3, A, a, ), (1, 3, B, CC , ), (2, 3, B, C , C) (2, 3, C , A, B), (1, 3, A, B, A) Como (0, 3, S, , ) no est en REGIST ROS[3], la palabra baa no es generada S T , S S + T , T F, T T F, F a, F b, F (S) Palabra: (a + b) a REGIST ROS[0] :(0, 0, S, , T ), (0, 0, S, , S + T ), (0, 0, T , , F ), (0, 0, T , , T F ), (0, 0, F, , a), (0, 0, F, , b), ( REGIST ROS[1] :(0, 1, F, (, S)), (1, 1, S, , T ), (1, 1, S, , S + T ), (1, 1, T , , F ), (1, 1, T , , T F ), (1, 1, F, , a), (1, 1, F, , b), (1, 1, F, , (S)), REGIST ROS[2] :(1, 2, F, a, ), (1, 2, T , F, ), (1, 2, S, T , ), (0, 2, F, (S, )), (1, 2, S, S, +T ) REGIST ROS[3] :(1, 3, S, S+, T ), (3, 3, T , , F ), (3, 3, T , , T F ), (3, 3, F, , a), (3, 3, F, , b), (3, 3, F, , (S)) REGIST ROS[4] :(3, 4, F, b, ), (3, 4, T , F, ), (1, 4, S, S + T , ), (3, 4, T , T , F ), (0, 4, F, (S, )), (1, 4, S, S, +T ) REGIST ROS[5] :(0, 5, F, (S), ), (0, 5, T , F, ), (0, 5, S, T , ), (0, 5, T , T , F ), (0, 5, S, S, +T ), REGIST ROS[6] :(0, 6, T , T , F ), (6, 6, F, , a), (6, 6, F, , b), (6, 6, F, , (S)), REGIST ROS[7] :(6, 7, F, a, ), (0, 7, T , T F, ), (0, 7, S, T , ), (0, 7, T , T , F ), (0, 7, S, S, +T ) Como tenemos (0, 7, S, T , ), entonces la palabra (a + b) c es generada.

6.3.2. Problemas Indecidibles para Lenguajes Libres de Contexto


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

128

Modelos de Computacin I

Comprobar si L(G) es regular. Determinar si G es ambigua. Conocer si L(G) es inherentemente ambiguo. Comprobar si L(G) puede ser aceptado por una autmata determinstico con pila.

Bibliografa

129

130

Modelos de Computacin I

[1] A.V. Aho, J.D. Ullman, Foundations of Computer Science. W.H. Freeman and Company, New York (1992). [2] R.V. Book, F. Otto, String rewriting systems. Springer-Verlag, Nueva York (1993). [3] J.G. Brookshear, Teora de la Computacin. Lenguajes formales, autmatas y complejidad. Addison Wesley Iberoamericana (1993). [4] J. Carrol, D. Long, Theory of Finite Automata with an Introduction to Formal Languages. Prentice Hall (1989) [5] D.I. Cohen, Introduction to Computer Theory. John Wiley, Nueva York (1991). [6] M.D. Davis, E.J. Weyuker, Computability, Complexity, and Languages. Academic Press (1983) [7] M.D. Davis, R. Sigal, E.J. Weyuker, Computability, Complexity, and Languages, 2 Edic.. Academic Press (1994) [8] D. Grune, C.J. Ceriel, Parsing techniques: a practical guide. Ellis Horwood, Chichester (1990). [9] M. Harrison, Introduction to Formal Language Theory. Addison-Wesley (1978) [10] J.E. Hopcroft, R. Motwani, J.D. Ullman, Introduccin a la Teora de Autmatas, Lenguajes y Programacin, 2a Ed. Addison Wesley (2002). [11] J.E. Hopcroft, J.D. Ullman, Introduction to Automata Theory, Languages and Computation. Addison-Wesley (1979) [12] J.M. Howie, Automata and Languages. Oxford University Press, Oxford (1991) [13] H.R. Lewis, C.H. Papadimitriou, Elements of the Theory of Computation. Prentice Hall (1981) [14] B.I. Plotkin, J.L. Greenglaz, A.A. Gvarami, Algebraic structures in automata and database theory World Scientic, River Edge (1992). [15] G.E. Revesz, Introduction to Formal Laguages. Dover Publications, Nueva York (1991) [16] T.A. Sudkamp, Languages and Machines. Addison Wesley, Reading (1988)

Vous aimerez peut-être aussi