Está en la página 1de 23

6

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,

También podría gustarte