• No se han encontrado resultados

un buen libro.pdf

N/A
N/A
Protected

Academic year: 2020

Share "un buen libro.pdf"

Copied!
133
0
0

Texto completo

(1)

Isabel Navarrete S´

anchez

Mar´ıa Antonia C´

ardenas Viedma

Daniel S´

anchez Alvarez

Juan Antonio Bot´ıa Blaya

Roque Mar´ın Morales

Rodrigo Mart´ınez B´

ejar

Departamento de Ingenier´ıa de la Informaci´

on

y las Comunicaciones

Universidad de Murcia

TEOR´IA DE AUT ´

OMATAS

Y

LENGUAJES FORMALES

(2)

Introducci´

on

Aunque no debemos hacer una distinci´on tajante entre los aspectos pr´acticos y te´oricos de la Inform´atica, es cierto que existen materias que tienen un alto contenido formal, con desarrollos de tipo matem´atico, al contrario que otros temas m´as cercanos a la resoluci´on de problemas de tipo pr´actico. La asignatura deTeor´ıa de Aut´omatas y Lenguajes Formales sin duda trata con las materias del primer tipo y los contenidos que se imparten constituyen el eje fundamental de diversas ´areas de conocimiento encuadradas dentro de lo que podr´ıamos denominarInform´atica Te´orica. A veces estas disciplinas resultan para el alumno materias “´aridas” y distanciadas de lo que ellos entienden que deber´ıan estudiar en una carrera de Ingenier´ıa Inform´atica. Pero la Inform´atica, como cualquier otra ciencia o ingenier´ıa, tiene unos fundamentos te´oricos sobre los que apoyarse y que cualquier ingeniero en Inform´atica debe conocer. As´ı lo entienden di-versos organismos internacionales comoACM eIEEE que recomiendan al menos un curso de Aut´omatas y Lenguajes Formales en los curricula de las carreras relacionadas con la Inform´ati-ca. Una motivaci´on para el estudio de estas materias formales la expusoMillner en un discurso que dio en 1993 al recoger el prestigiosopremio Turing que se otorga a distinguidos cient´ıficos que trabajan en el ´area de las Ciencias de la Computaci´on:

“Estas [las aplicaciones] son altamente necesarias, pero no queremos que esto ocurra en detrimento del trabajo te´orico...Las Ciencias de la Computaci´on son tan amplias que si no tienen una teor´ıa b´asica, estaremos perdidos. Tantas cosas est´an avanzan-do...¿C´omo podr´ıa ocurrir esto sin una teor´ıa? Esta tiene que ir cogida de la mano de la pr´actica.”

1. Evoluci´on hist´orica de la Teor´ıa de la Computaci´on

LaTeor´ıa de la Computaci´ontrata conmodelos de c´alculo abstractos que describen con distintos grados de precisi´on las diferentes partes y tipos de computadores. Pero estos modelos no se usan para describir detalles pr´acticos del hardware de un determinado ordenador, sino que m´as bien se ocupan de cuestiones abstractas sobre la capacidad de los ordenadores, en general. As´ı, en loscurricula de Ciencias de la Computaci´on existen cursos separados para tratar materias como Arquitectura de Computadores, Teor´ıa de Circuitos, Algoritmos y Estructuras de Datos, Sistemas Operativos, etc. Todas estas ´areas tienen una componente te´orica, pero difieren del estudio de la Teor´ıa de la Computaci´on fundamentalmente en dos aspectos:

Las primeras tratan con computadores que existen realmente, mientras que los modelos abstractos de c´alculo abarcan todo tipo de computadores que existen, que puedan llegar a existir o simplemente que uno pueda imaginar.

(3)

La historia de la Teor´ıa de la Computaci´on es bastante interesante. Se ha desarrollado gracias a confluencia, por afortunadas coincidencias, de distintos campos de conocimiento y descubri-mientos (fundamentalmente matem´aticos) realizados a principios del siglo XX. Bajo el nombre Teor´ıa de la Computaci´on se recogen una serie de materias que constituyen hoy en d´ıa los fun-damentos te´oricos de la Inform´atica: Teor´ıa de Aut´omatas,Teor´ıa de los Lenguajes Formales, Computabilidad yComplejidad Algor´ıtmica.

Computabilidad

El primer tema que cae claramente dentro del campo de la Teor´ıa de la Computaci´on es el de Computabilidad. Iniciada por G¨odel, Church, Post, Turing y Kleene, tiene sus ra´ıces en la L´ogica Matem´atica. Al iniciar el siglo XX, los matem´aticos estaban a punto de efectuar grandes descubrimientos. Los logros de los siguientes 40 a˜nos estaban destinados a sacudir las bases de las matem´aticas y tuvieron consecuencias que se extendieron al campo de las Ciencias de la Computaci´on, a´un por nacer.

A principios de siglo XX se empez´o a fraguar un dilema.Georg Cantor(1845-1918), hab´ıa inven-tado por entonces la Teor´ıa de Conjuntos, pero al mismo tiempo descubri´o algunas paradojas inquietantes. Algunos de sus planteamientos pod´ıan ser comprensibles (como que hay “infinitos” de distinto tama˜no), pero otros no (por ejemplo, que alg´un conjunto sea mayor que el conjunto universal). Esto dej´o una nube de duda a los matem´aticos que ellos necesitaban disipar. El pun-to de partida de fueron las cuestiones fundamentales que David Hilbert (1845-1918) formul´o en 1928, durante el transcurso de un congreso internacional:

1. ¿Soncompletaslas Matem´aticas, en el sentido de que pueda probarse o no cada aseveraci´on matem´atica?

2. ¿Son las Matem´aticas consistentes, en el sentido de que no pueda probarse simult´anea-mente una aseveraci´on y su negaci´on?

3. ¿Son las Matem´aticas decidibles, en el sentido de que exista un m´etodo definido que se pueda aplicar a cualquier aseveraci´on matem´atica y que determine si dicha aseveraci´on es cierta o falsa?

La meta de Hilbert era crear un sistema axiom´atico l´ogico-matem´atico completo y consistente, del cual podr´ıan deducirse todas las Matem´aticas, esto es, cualquier teorema matem´atico podr´ıa derivarse de los axiomas aplicando una serie finita de reglas, es decir, mediante un proceso al-gor´ıtmico o computacional. Su idea era encontrar un algoritmo que determinara la verdad o falsedad de cualquier teorema en el sistema formal. A este problema le llam´o el ‘Entscheidungs-problem’.

Por desgracia para Hilbert, en la d´ecada de 1930 se produjeron una serie de investigaciones que mostraron que esto no era posible. Las primeras noticias en contra surgen en 1931 con Kurt G¨odel (1906-1978) y su Teorema de Incompletitud: “Todo sistema de primer orden consistente que contenga los teoremas de la aritm´etica y cuyo conjunto de axiomas sea recursivo no es completo”. Como consecuencia no ser´a posible encontrar el sistema formal deseado por Hilbert en el marco de la l´ogica de primer orden. Una versi´on posterior y m´as general del teorema de G¨odel elimina la posibilidad de considerar sistemas deductivos m´as potentes que los sistemas de primer orden, demostrando que no pueden ser consistentes y completos a la vez. Los resultados de G¨odel prueban que no s´olo no existe un algoritmo que pueda demostrar todos los teoremas en matem´aticas, sino que adem´as, no todos los resultados son demostrables. Entonces cabe plantearse las siguientes preguntas:

¿Qu´e pueden hacer los ordenadores (sin restricciones de ning´un tipo)?

(4)

A estas cuestiones pretende responder la Teor´ıa de la Computabilidad. El primer paso en la b´usqueda de las respuestas a estas preguntas est´a en el estudio de los modelos de computaci´on. Los Modelos Abstractos de C´alculo tienen su origen en los a˜nos 30, antes de que existieran los ordenadores (el primer computador electr´onico de prop´osito general fue el ENIAC que se desarroll´o a partir del a˜no 1943), en el trabajo de los l´ogicos Church, G¨odel, Kleene, Post, y Turing. Estos primeros trabajos han tenido una profunda influencia no s´olo en el desarrollo te´orico de las Ciencias de la Computaci´on, sino que muchos aspectos de la pr´acticos de la Inform´atica fueron presagiados por ellos: incluyendo la existencia de ordenadores de prop´osito general, la posibilidad de interpretar programas, la dualidad entre software y hardware y la representaci´on de lenguajes por estructuras formales basados en reglas de producci´on.

Alonzo Churchpropuso la noci´on de funci´on λ-definible como funci´on efectivamente calculable. La demostraci´on de teoremas se convierte en una transformaci´on de una cadena de s´ımbolos en otra, seg´un un conjunto de reglas formales, que se conocen como lambda c´alculo. En 1936, Church hace un esquema de la demostraci´on de la equivalencia entre las funcionesλ-definibles y las funciones recursivas de Herbrand-G¨odel (esta equivalencia tambi´en hab´ıa sido probada por Kleene ) y conjetura que ´estas iban a ser las ´unicas funciones calculables por medio de un algoritmoa trav´es de la tesis que lleva su nombre (Tesis de Church) y utilizando la noci´on de funci´on λ-definible, dio ejemplos de problemas de decisi´on irresolubles y demostr´o que el Entscheidungsproblemera uno de esos problemas.

Por otra parteKleene, pocos meses despu´es, demuestra de forma independiente la equivalencia entre funcionesλ-definibles y funciones recursivas de Herbrand-G¨odel, a trav´es del concepto de funci´on recursivay da ejemplos de problemas irresolubles.

La tercera noci´on de funci´on calculable proviene del matem´atico ingl´esAlan Turing(1912-1954). Turing se˜nal´o que hab´ıa tenido ´exito en caracterizar de un modo matem´aticamente preciso, por medio de sus m´aquinas, la clase de las funciones calculables mediante un algoritmo (funciones Turing-computables), lo que se conoce hoy comoTesis de Turing(1936). Aunque no se puede dar ninguna prueba formal de que unam´aquina de Turingpueda tener esa propiedad, Turing dio un elevado n´umero de argumentos a su favor, en base a lo cual present´o la tesis como un teorema demostrado. Adem´as, utiliz´o su concepto de m´aquina para demostrar que existen problemas que no son calculables por un m´etodo definido y en particular, que elEntscheidungsproblemera uno de esos problemas. Cuando Turing conoci´o los trabajos de Church y Kleene, demostr´o que los conceptos de funci´on λ-definible y funci´on calculable por medio de una m´aquina de Turing coinciden. Naturalmente a la luz de esto la Tesis de Turing resulta ser equivalente a la de Church.

Posteriormente, se demostr´o la equivalencia entre lo que se pod´ıa calcular mediante una m´aquina de Turing y lo que se pod´ıa calcular mediante un sistema formal en general. A la vista de estos resultados, laTesis de Church-Turing es aceptada como un axioma en la Teor´ıa de la Computaci´on y ha servido como punto de partida en la investigaci´on de los problemas que se pueden resolver mediante un algoritmo.

Una de las cuestiones m´as estudiadas en la Teor´ıa de la Computabilidad ha sido la posibilidad de construir programas que decidan si un determinado algoritmo posee o no una determinada propiedad. Ser´ıa interesante responder de forma autom´atica a cuestiones como:

¿Calculan los algoritmos A y B la misma funci´on? (Problema de la equivalencia) ¿Parar´a el algoritmo A para una de sus entradas? (Problema de la parada) ¿Parar´a el algoritmo A para todas sus entradas? (Problema de la totalidad) ¿Calcula el algoritmo A la funci´onf? (Problema de la verificaci´on)

(5)

de algoritmos era no computable. El Teorema de Rice, confirma esta sensaci´on: “Consid´erese cualquier propiedad que no sea trivial acerca de la funci´on calculada por un algoritmo, entonces la cuesti´on de si la funci´on calculada por un algoritmo arbitrario verifica dicha propiedad es no computable”.

Complejidad Algor´ıtmica

Despu´es de que la Teor´ıa de la Computabilidad fuera desarrollada, era natural preguntarse acerca de la dificultad computacional de las funciones computables. Este es el objetivo de la parte de las Ciencias de la Computaci´on que se conoce comoComplejidad Algor´ıtmica.Rabinfue uno de los primeros en plantear esta cuesti´on general expl´ıcitamente: ¿Qu´e quiere decir que una funci´on f sea m´as dif´ıcil de computar que otra funci´on g? Rabin sugiri´o una axiom´atica que fue la base para el desarrollo del estudio de medidas de complejidad abstractade Blum y otros (1967).

Una segunda aportaci´on que tuvo una influencia relevante en el desarrollo posterior de esta materia fue el art´ıculo de J. Hartmanis yR. Stearns en 1965, cuyo t´ıtulo On the Complexity of Algorithmsdio nombre a este cuerpo de conocimiento. En ´el se introduce la noci´on fundamental demedida de complejidaddefinida como el tiempo de computaci´on sobre una m´aquina de Turing multicinta y se demuestran los teoremas de jerarqu´ıa.

Un tercer hito en los comienzos del tema fue el trabajo de Cobham titulado, The Intrinsic Computational Difficulty of Functions (1964). Cobham enfatiz´o el t´ermino “intr´ınseco”, es de-cir, ´el estaba interesado en una teor´ıa independiente de las m´aquinas. Esto nos conduce al un concepto importante desarrollado en 1965: la identificaci´on de la clase de problemas que se pue-den resolver en tiempo acotado por un polinomio sobre la longitud de la entrada. La distinci´on entrealgoritmos de tiempo polinomialyalgoritmos de tiempo exponencialfue hecha por primera vez en 1953 por Von Neumann. La notaci´on de P para la clase de los problemas resolubles en tiempo polinomial fue introducida posteriormente por Karp(1972).

La teor´ıa de la NP-completitudes seguramente el desarrollo m´as importante de la Complejidad Algor´ıtmica. La clase N P consta de todos los problemas decidibles en tiempo polinomial por una m´aquina de Turing no determinista. Cook en 1971 introduce la noci´on de problema NP-completo y demuestra que el problema de la satisfacibilidad booleana es NP-completo. La clase N P incluye una gran cantidad de problemas pr´acticos que aparecen en la actividad empresarial e industrial. Demostrar que un problema es NP-completo equivale a demostrar que no tiene una soluci´on determinista en tiempo polinomial, salvo que todos los problemas de N P est´en en P, cuesti´on que a´un no est´a demostrada.

Otro ´area que actualmente est´a teniendo cada vez m´as importancia es la Criptograf´ıa, rela-cionada con la seguridad de los sistemas inform´aticos y donde se ha aplicado especialmente la teor´ıa de la complejidad algor´ıtmica. Mediante la criptograf´ıa podemos conseguir el manejo de informaci´on confidencial en el ordenador de forma m´as o menos segura.

M´aquinas Secuenciales y Aut´omatas Finitos

(6)

Desde un frente totalmente distinto, el concepto de aut´omata finito aparece en 1943 con el art´ıculo de de McCulloch y Pitts titulado A Logical Calculus of the Ideas Immanet in Nervous Activity, donde describen los c´alculos l´ogicos inmersos en un dispositivo (neurona artificial) que hab´ıan ideado para simular la actividad de una neurona biol´ogica. A partir de entonces, se han desarrollado asociaciones de neuronas para constituir redes. Podemos considerar una RNA (Red Neural Artificial) como una colecci´on de procesadores elementales (neuronas), conectadas a otras neuronas o entradas externas, y con una salida que permite propagar las se˜nales por m´ultiples caminos. Cada procesador pondera las entradas que recibe y estos pesos pueden ser modificados en aras de conseguir el objetivo previsto. Es lo que llamaremos funci´on de apren-dizaje. Es decir, una RNA puede “aprender” de sus propios errores, por un proceso inductivo a partir de un conjunto de ejemplos de lo que queremos aprender, frente al proceso deduc-tivo, propio de los Sistemas Expertos. Las caracter´ısticas que hacen interesantes a las RNAs son su capacidad para aprender (reproducir un sistema o funci´on a partir de ejemplos), me-morizar(almacenar un conjunto de patrones o ejemplos), generalizar y abstraer (que permita recuperaciones a partir de entradas defectuosas o incompletas). Las redes neuronales, dentro del perfil de Teor´ıa de la Computaci´on, aportan paradigmas interesantes como son el c´alculo paralelo, el aprendizaje inductivoy su capacidad para realizar c´alculos aproximadospor medio de interpolaci´on.

En el verano de 1951 Kleene fue invitado por la RAND Corporation para realizar un informe sobre los trabajos de McCulloch-Pitts. En este informe Kleene demuestra la equivalencia entre lo que ´el llama “dos formas de definir una misma cosa”: losconjuntos regulares, los cuales pueden ser descritos a partir de sucesos bases y los operadores uni´on, concatenaci´on y clausura, es decir, medianteexpresiones regulares y los lenguajes reconocidos por un aut´omata finito.

Los aut´omatas finitos son capaces de reconocer solamente un determinado tipo de lenguajes, llamadoslenguajes regulares, que tambi´en se caracterizan mediante un tipo de gram´aticas llama-das as´ı mismo regulares. Una forma adicional de caracterizar este tipo de lenguajes es mediante las citadas expresiones regulares, construidas mediante operadores sobre el alfabeto del lenguaje y otras expresiones regulares, incluyendo el lenguaje vac´ıo. Es f´acilmente comprobable que, 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 construcci´on de algoritmos para resolver problemas. Hay entonces muchos problemas que no son calculables con estos lenguajes. Esto pone de manifiesto las limitaciones de los aut´omatas finitos y las gram´aticas regulares, y pro-picia el desarrollo de m´aquinas reconocedoras de otros tipos de lenguajes y de las gram´aticas correspondientes asociadas a los mismos, como veremos en el siguiente apartado.

Desde su nacimiento, la Teor´ıa de Aut´omatas ha encontradoaplicaci´onen campos muy diver-sos. ¿Qu´e tienen en com´un? A primera vista no parece sencillo deducirlo. Sin embargo, podemos vislumbrar la soluci´on si nos damos cuenta de que en todos ellos se manejan conceptos como el ‘control’, la ‘acci´on’, la ‘memoria’ y adem´as, los objetos controlados o recordados son s´ımbolos, palabras o frases de alg´un tipo. Algunos de los campos donde ha encontrado aplicaci´on la Teor´ıa de Aut´omatas son:

Teor´ıa de la Comunicaci´on. Teor´ıa de Control.

L´ogica de Circuitos Secuenciales. Reconocimiento de Patrones. Fisiolog´ıa del Sistema Nervioso.

(7)

Teor´ıa Algebraica de Lenguajes.

Cuando un aut´omata se usa para modelar la construcci´on de hardware (ej. circuitos secuenciales) o software (ej. analizadores l´exicos) es muy importante examinar el problema de encontrar el aut´omata m´ınimo equivalente a uno dado. Tanto Huffman como Moore se ocuparon de este problema y encontraron algoritmos pr´acticos para minimizar un aut´omata de estados finitos. Para un aut´omata de n estados estos algoritmos requer´ıan n2 pasos. Bastante m´as tarde, en

1971Hopcroftencontr´o un m´etodo que lo hac´ıa enO(n×log(n)) pasos. Existe un punto de vista algebraico sobre la minimizaci´on y caracterizaci´on de aut´omatas finitos, debida a John Myhill y Anil Nerode. Kleene, en su intento de entender los trabajos de McCullock y Pitts, abstrajo el concepto de aut´omata finito a partir de las redes de neuronas y el concepto de expresi´on regular a partir del c´alculo l´ogico del modelo de McCullock y Pitts. De la misma forma, Myhill a partir de los conceptos de aut´omatas finitos de Kleene obtuvo el de diagrama de transici´on (deterministas) y a los eventos los redujo a la uni´on de clases de equivalencia. Siguiendo esta l´ınea de trabajo, se ha elaborado en las ´ultimas d´ecadas una teor´ıa abstracta de aut´omatas con una fuerte base matem´atica que, seg´un dijo Arbib en 1969, constituye “la matem´atica pura de la Inform´atica”.

Gram´aticas y Lenguajes Formales

El desarrollo de los ordenadores en la d´ecada de los 40, con la introducci´on de los programas en la memoria principal y posteriormente con los lenguajes de programaci´on de alto nivel, propician la distinci´on entre lenguajes formales, con reglas sint´acticas y sem´anticas r´ıgidas, concretas y bien definidas, de los lenguajes naturales como el ingl´es, donde la sintaxis y la sem´antica no se pueden controlar f´acilmente. Los intentos de formalizar los lenguajes naturales llevan a la construcci´on de gram´aticas como una forma de describir estos lenguajes, utilizando para ello reglas de producci´on para construir las frases del lenguaje. Se puede entonces caracterizar un lenguaje mediante las reglas de una gram´atica adecuada.

Noam Chomsky propone en 1956 tres modelos para la descripci´on de lenguajes, que son la base de su futura jerarqu´ıa de los tipos de lenguajes (1959), que ayud´o tambi´en en el desarrollo de los lenguajes de programaci´on. Chomsky estableci´o una clasificaci´on de gram´aticas de acuerdo con el formato de sus producciones y distingui´o cuatro clases fundamentales de lenguajes y relaciones de inclusi´on entre ellas.

La Teor´ıa de los Lenguajes Formales result´o tener una relaci´on sorprendente con la Teor´ıa de Aut´omatas y la Computabilidad. Paralelamente a la jerarqu´ıa de lenguajes existe otra equiva-lente de m´aquinas abstractas, de tal forma que a cada una de las clases de lenguajes definidas en la jerarqu´ıa de Chomsky a partir de restricciones impuestas a las gram´aticas, le corresponde un tipo de m´aquina abstracta, que no es otra cosa que un m´etodo reconocedor para la descrip-ci´on de lenguajes. La reladescrip-ci´on la podemos observar en la figura 1. Cada uno de estos tipos de m´aquinas es capaz de resolver problemas cada vez m´as complejos, desde los aut´omatas finitos (que son los m´as simples) hasta las m´aquinas de Turing que determinan el l´ımite de los pro-cesos computables. Se puede llegar as´ı, de una forma casi natural, a considerar las m´aquinas de Turing, establecidas casi 20 a˜nos antes, como m´aquinas reconocedoras de los lenguajes es-tructurados por frases (tipo 0) e incluso a interpretar la Tesis de Turing en t´erminos de que un sistema computacional nunca podr´a efectuar un an´alisis sint´actico de aquellos lenguajes que est´an por encima de los lenguajes estructurados por frases en la jerarqu´ıa de Chomsky.

2. Fundamentos Matem´aticos

(8)

LENGUAJES

TIPO 0

LENGUAJES

TIPO 1

TIPO 2 LENGUAJES

TIPO 3 LENGUAJES

MAQUINAS

DE TURING

AUTOMATAS

LINEALMENTE ACOTADOS AUTOMATAS

AUTOMATAS

FINITOS CON PILA

NO ENUMERABLES LENGUAJES

Figura 1: Relaci´on Lenguajes-M´aquinas Abstractas

demostraci´on matem´aticas.

Conjuntos

Un conjunto es una colecci´on de objetos. Por ejemplo, la colecci´on de las letras vocales forman un conjunto que podemos notar comoV ={a, e, i, o, u}. Los objetos que forman parte del conjunto se llaman elementos. Por ejemplo, a es un elemento de V y se escribe a∈ V; por otra parte podemos decir quez /∈V. Dos conjuntos sonigualessi y s´olo si tienen los mismos elementos. No se tienen en cuenta las repeticiones de elementos ni tampoco el orden de ´estos. Hay un conjunto que no tiene ning´un elemento llamado conjunto vac´ıo y lo notaremos por ∅. Un conjunto se puede especificar enumerando sus elementos entre llaves y separados por comas y esto es lo que se llamadefinici´on por extensi´on. Pero a veces esto no es posible hacerlo porque el conjunto es infinito y entonces se usa unadefinici´on por comprensi´on, es decir, haciendo referencia a otros conjuntos (conjuntos referenciales) y a propiedades que los elementos puedan tener. De forma general se definen:

B ={x∈A|x cumple la propiedad P}

Un conjunto A es un subconjunto de otro conjunto B, A B, si cada elemento de A es un elmento de B. Tambi´en podemos decir que A est´a incluido en B. Cualquier conjunto es un subconjunto de s´ı mismo. SiA es un subconjunto deB pero Ano es igual a B se dice queA es unsubconjunto propiodeB y se nota comoA⊂B. Es obvio que∅ ⊆Apara cualquier conjunto A. Para probar que dos conjuntosAyB son iguales debemos probar queA⊆B yB ⊆A: cada elemento deA debe ser un elemento deB y viceversa.

Dos conjuntos se pueden combinar para formar un tercero mediante una serie deoperaciones sobre conjuntos:

(9)

Algunas propiedades de las operaciones anteriores se pueden deducir f´acilmente a partir de sus definiciones:

1. Idempotencia: A∪A=A ; A∩A=A

2. Conmutatividad: A∪B =B∪A ; A∩B =B∩A

3. Asociatividad: (A∪B)∪C=A∪(B∪C)

(A∩B)∩C=A∩(B∩C)

4. Distributividad: A∪(B∩C) = (A∪B)(A∪C)

A∩(B∪C) = (A∩B)(A∩C) 5. Absorci´on: A∩(A∪B) =A ; A∪(A∩B) =A

6. Leyes de DeMorgan: A∩B=A∪B

A∪B=A∩B

Dos conjuntos son disjuntos si no tienen elementos en com´un, o lo que es lo mismo, si su intersecci´on es el conjunto vac´ıo. Es posible formar intersecciones y uniones de m´as de dos conjuntos.

La colecci´on de todos los subconjuntos deAes a su vez un conjunto llamadoconjunto potencia

de A y lo notamos como 2A. Al conjunto potencia deA tambi´en se le suele llamarconjunto de las partes de A y se nota comoP(A).

Ejemplo 0.1 Sea A={c, d}. Entonces 2A={∅,{c},{d},{c, d}}

Unapartici´onde un conjunto no vac´ıo A es un subconjunto, Π, de 2A tal que: 1. cada elemento de Π es no vacio;

2. los elementos de Π son disjuntos; 3. SΠ =A

Ejemplo 0.2 {{a, b},{c},{d}} es una partici´on de {a, b, c, d} pero {{a, b, c},{c, d}} no lo es. Los conjuntos de n´umeros pares e impares forman una partici´on de N.

Relaciones y funciones

De forma general podemos definir una relaci´on como un conjunto de elementos , que son en esencia combinaciones de objetos de un determinado tipo que est´an relacionados de alguna forma. Llamamos par ordenado a una pareja de objetos escritos entre par´entesis y separados por comas. Por ejemplo, (a, b) es un par ordenado ya, bson loscomponentes del par ordenado. No es lo mismo (a, b) que{a, b} por varios motivos:

el orden influye: no es lo mismo (a, b) que (b, a), sin embargo {a, b}={b, a}

los dos componentes de un par ordenado no tienen porqu´e ser distintos; por ejemplo, (2,2) es un par v´alido.

Elproducto cartesianode dos conjuntosA yB, que notamosA×B, es el conjunto de todos los pares ordenados (a, b) dondea∈A yb∈B.

Ejemplo 0.3 Dados los conjuntos {1,3,9} y {b, c, d},el producto cartesiano es,

(10)

Unarelaci´on binariaentre dos conjuntosA yB es un subconjunto deA×B.

Ejemplo 0.4 {(9, b),(1, c),(3, d)}es una relaci´on binaria entre los conjuntos{1,3,9}y{b, c, d}. La relaci´on ”menor que” entre los n´umeros naturales es una relaci´on binaria,

<={(i, j)|(i, j N )(i < j)}

Sea n un n´umero natural, entonces (a1, a2, ..., an) es una n-tupla ordenada. Para cada i

{1, ..., n}, aies la i-´esima componente de la n-tupla. Dos n-tuplas (b1, b2, ..., bn) y (a1, a2, ..., am) son iguales si y s´olo si m = n y ai = bi para cada i ∈ {1, ..., n}. Si A1, ..., An son conjuntos cualesquiera, el producto cartesiano de todos ellos,A1

n z }| {

×. . .×An , es el conjunto de todas las n-tuplas (a1, ..., an) con ai Ai para cada i ∈ {1, ..., n}. En el caso de que todos los Ai sean iguales el producto cartesiano A

n z }| {

×. . .×A se puede escribir como An . Una relaci´on n-aria entre los conjuntosA1, ..., An es un subconjunto del producto cartesiano A1

n z }| {

×. . .×An.

Vamos a tratar ahora con relaciones binarias entre un conjunto y el mismo, es decir, conR

A×A. Si (a, b)∈R podemos escribirlo con una notaci´on infija como a R b. Por ejemplo, en la relaci´on de igualdad se suele decir quea=b, en lugar de (a, b)=.

SeaR una relaci´on binaria sobre un conjuntoA. Decimos que:

R esreflexivasii∀a∈A:aRa R esirreflexivasii∀a∈A:¬(aRa)

R estransitivasii∀a, b, c∈A: (aRb)(bRc)(aRc) R essim´etrica sii∀a, b∈A:aRb⇒bRa

R esantisim´etrica sii∀a, b∈A:aRb⇒ ¬(bRa)

Una relaci´on R A×A que cumpla las propiedades reflexiva, sim´etrica y transitiva se dice que es una relaci´on de equivalencia. Usaremos la notaci´on [a]R para indicar la clase de equivalencia de la relaci´onR representada por el elemento a∈A y se define:

[a]R={b∈A|(a, b)∈R}

Al conjunto formado por todas las clases de equivalencia de una relaci´on de equivalenciaR

A×A se le denominaconjunto cociente de A modulo R y se nota comoA/R: A/R={[a]|a∈A}

Una relaci´onR⊆A×A que cumpla las propiedades reflexiva, antisim´etrica y transitiva se dice que es unarelaci´on de orden. Al par (A, R) lo llamaremosconjunto ordenado. Si adem´as la relaci´on de ordenR verifica que todo par de elementos deA son comparables, entonces se dice que R es una relaci´on de orden total o lineal en A y el par (A, R) es un conjunto totalmente ordenado. Un orden no total se llama parcial.

Supongamos que P es un conjunto de propiedades sobre relaciones. La P-clausuradeR⊆A×A es la menor relaci´on R0 que incluye todos los pares ordenados de R y cumple las propiedades

de P. Por ejemplo, la clausura transitivade R, que notaremos R+, se define de la siguiente

(11)

1. Si (a, b)∈R entonces (a, b)∈R+.

2. Si (a, b)∈R+ y (b, c)R, entonces (a, c)R+.

3. S´olo est´an enR+ los pares introducidos por 1 y 2.

La clausura reflexiva y transitiva de R, que notamosR∗, se define:

R∗ =R+∪ {(a, a)|a∈A}

Ejemplo 0.5 Sea R ={(1,2),(2,2),(2,3)} una relaci´on sobre el conjunto {1,2,3}. Entonces tenemos que,

R+ ={(1,2),(2,2),(2,3),(1,3)}

R∗ ={(1,1),(1,2),(1,3),(2,2),(2,3),(3,3)}

Una funci´on de un conjunto A en un conjunto B, que notamos como f : A −→ B, es una relaci´on binariaf ⊆A×Bcon la siguientepropiedad:para cada elementoa∈Ahay exactamente un par ordenado enf cuya primera componente sea a. Llamamos a A eldominio de la funci´on f y aB elcodominio def. Siaes un elemento cualquiera deA,f(a) ser´a un elementob∈B tal que (a, b)∈f y adem´as por serf una funci´on estebser´a ´unico. Al elementof(a) lo llamaremos imagen de a bajo f. Si tenemos la funci´onf anterior yA0 es un subconjunto deA, definimos:

f£A0¤=©f(a)|a∈A0ª

que es laimagen de A’ bajo f. Elrangode una funci´onfes la imagen de su dominio. Por convenio, si el dominio de una funci´on es un producto cartesiano, no hace falta que especifiquemos las parejas de par´entesis de los elementos.

Ejemplo 0.6 Si f : N×N N est´a definida de forma que la imagen de un par ordenado (m, n) es la suma de m y n, podemos escribirf(m, n) =m+n, en lugar def((m, n)) =m+n y adem´as podemos decir que m, n son los argumentos de f y m+n el correspondiente valor o resultado de f.

Monoides

El par (M,◦) es un semigrupo siM es un conjunto yes una operaci´on interna binaria asocia-tiva. Es decir, es una funci´on deM×M en M que verifica lo siguiente:

∀x, y, z∈M :x◦(y◦z) = (x◦y)◦z

Un elemento e∈M es laidentidad de un semigrupo (M,◦) si se verifica:

∀x∈M :e◦x=x◦e=x

Un monoide es un semigrupo con identidad. Sea el monoide (M,◦, e), x M y un n´umero natural n. La n-´esima potencia de x, representada por xn, se define inductivamente de la siguiente manera:

1. x0=e

2. xn=xxn−1, paran >0

Sean A y B subconjuntos del monoide (M,◦, e). La operaci´on induce de forma natural una operaci´on binaria sobre 2M, el conjunto de todos los subconjuntos deM. Esta operaci´on se define por:

(12)

Definici´on 0.1 Sea (M,◦, e) un monoide. Entonces ¡2M,,{e}¢, donde es la operaci´on in-ducida, es tambi´en un monoide que llamaremosmonoide inducidopor (M,◦, e) sobre 2M.

Definici´on 0.2 Si A es un subconjunto del monoide(M,◦, e). Entonces: Aescerrado positivo sii∀x, y∈A:x◦y∈A.

Aescerradosii es cerrado positivo y adem´as contiene a la identidad e.

Definici´on 0.3 SeaA un subconjunto cerrado de un monoide. Entonces(A,◦, e)donde◦es la restricci´on de la operaci´on deMpara los elementos deAes tambi´en un monoide. A tal monoide se le denominasubmonoidede (M,◦, e).

Definici´on 0.4 SeaA cualquier subconjunto de un monoide (M,◦, e). El cierre positivode A, representado por A+ , se define por:

A+ =

[ n=1

An

Elcierre de A, que notaremos como A∗, se define como:

A∗ =

[ n=0

An

dondeAn representa la n-´esima potencia de A en el monoide inducido¡2M,,{e}¢.

Un subconjunto B de un monoide M se dice que genera M sii B∗ = M. Al conjunto B se

le llama base (o generador) de M. Si B genera M entonces, por definici´on, cualquier x M (distinto dee) se puede representar como x=x1◦. . .◦xn, donde x1, . . . , xn ∈B yn > 0. Se dice queB genera libremente aM si la representaci´on anterior es ´unica (salvo el orden, si la operaci´on es conmutativa). M se dice que es un monoide libre si contiene un subconjunto B que lo genera libremente.

Conjuntos finitos e infinitos

Una propiedad b´asica de los conjuntos finitos es su tama˜no o cardinalidad. Algunos aspectos sobre el tama˜no de los conjuntos finitos son obvios, como por ejemplo, si A B entonces el cardinal deA es menor o igual que el cardinal de B; si A es subconjunto propio de B ser´a de menor tama˜no que B. Sin embargo esto no es tan simple cuando tenemos conjuntos infinitos. Por ejemplo, ¿hay m´as n´umeros naturales que n´umeros pares? Aunque la intuici´on nos dice que s´ı, formalmente no podemos afirmarlo.

Se dice que dos conjuntosAyBsonequinumerables oequipotentessi podemos encontrar una funci´onf :A−→Bdondef es biyectiva. Decimos que un conjunto esfinitosi es equinumerable con{1,2, . . . , n}, para alg´un n∈N, y diremos que el cardinal de A esn, esto es,|A|=n. Un conjuntoA esinfinitosi puede establecerse una aplicaci´on biyectiva entreA y un subcon-junto propio de A. No todos los conjuntos infinitos son equinumerables, por ejemploN yRno tienen la misma cardinalidad. Un conjunto se dice que esinfinito numerablesi es equinume-rable conN y se dice que esnumerable si es finito o infinito numerable. En caso contrario se dice que esno numerable, como por ejemplo el conjunto de los numeros realesR.

Teorema 0.1 Si A es un conjunto cualquiera (incluso infinito) entonces |A| < |P(A)|. Adem´as siA es infinito numerable entoncesP(A)es no numerable.

(13)

Principio de inducci´on

El principio de inducci´on matem´atica afirma lo siguiente,

SiA es un subconjunto de numeros naturales, A⊆N, y satisface las condiciones: 1. 0∈A

2. si k∈A entoncesk+ 1∈A

entonces debe ser A=N.

En la pr´actica, el principio de inducci´on es usado para probar afirmaciones del tipo “para todo n´umero naturalk la propiedadP se cumple”. Esto es lo mismo que probar que el conjunto

A={k∈N|P(k) se cumple}

coincide con el conjunto de n´umeros naturales, esto es, debemos probar queA=N. Esto es lo que se llama demostraci´on por inducci´on y el procedimiento a seguir es el siguiente:

etapa base Probar que la propiedadP se cumple para 0.

etapa de inducci´onSuponer que la propiedad se sumple parak (hip´otesis de inducci´on) y probar que esto implica que se cumple para k+ 1.

conclusi´on Puesto que hemos probado en la etapa base que 0 A y en la etapa de inducci´on que si k A entonces tambi´en k+ 1 A, resulta que, por el principio de inducci´on, podemos deducir que A=N, como quer´ıamos demostrar.

A veces, interesa demostrar que cierta propiedad se cumple para todo k m. En este caso debemos demostrar que el conjunto,

A={n∈N|P(n+m) se cumple}

coincide con el conjunto N. Para ello seguimos el siguiente razonamiento: etapa base (n= 0) Probar queP(m) se cumple.

etapa de inducci´on (n >0) Suponer que P(k) se cumple, siendo k≥m y probar que P(k+ 1) se cumple.

conclusi´on Por las etapas anteriores y el principio de inducci´on tenemos que A =N y por tanto P se cumple para todo k≥m.

El principio de inducci´on tambi´en se usa para definir conjuntos de objetos donde definimos el primer objeto y el objeto k se define en t´erminos del (k−1)-´esimo objeto. Esto es lo que se llama definici´on inductiva.

Ejemplo 0.7 El factorial de un n´umero natural puede ser definido inductivamente como, 1. 0! = 1

(14)
(15)

CAP´ITULO 1:

LENGUAJES Y GRAM ´

ATICAS FORMALES

¨ §

¥ ¦

Contenidos Te´oricos

1. Alfabetos y palabras

1.1 Concatenaci´on de palabras 1.2 Potencia de una palabra 1.3 Inversi´on de palabras 2. Lenguajes formales

2.1 Operaciones del ´algebra de conjuntos

2.2 Concatenaci´on, potencia e inversi´on de lenguajes 2.3 Clausura de un lenguaje

3. Gram´aticas formales

3.1 Definiciones b´asicas 3.2 Notaci´on BNF

3.3 Clasificaci´on de gram´aticas

3.4 Teorema de la jerarqu´ıa de Chomsky (enunciado) 4. Nociones b´asicas sobre traductores

1. Alfabetos y palabras

Unalfabetoes un conjunto finito y no vac´ıo de elementos llamadoss´ımbolos o letras. Unapalabra o cadena sobre un alfabetoV es una cadena finita de s´ımbolos del alfabeto. Lalongitud de una cadena w, que notaremos como|w|, es el n´umero de letras que aparecen en w. A la cadena que no tiene s´ımbolos, o lo que es lo mismo, que tiene longitud 0, la llamaremos palabra vac´ıa y se nota por λ(o tambi´en ², seg´un los autores).

Si V es un alfabeto, llamaremos Vn al conjunto de todas las palabras de longitud n sobre V. Un elemento de Vn ser´a una cadena del tipoa

1a2. . . an donde cadaai∈V. LlamaremosV0 al conjunto cuyo ´unico elemento es la palabra vac´ıa, es decir, V0={λ}.El conjunto de todas las

cadenas de cualquier longitud sobre V es:

V∗ =

[ n=0

Vn

Llamamos V+al conjunto de todas las cadenas sobre el alfabetoV excepto la vac´ıa. Por tanto,

(16)

1.1. Concatenaci´on de Palabras

La operaci´on de concatenaci´on, que notaremos ‘·’, es una operaci´on binaria entre palabras sobre un alfabeto V, esto es:

·:V∗×V∗−→V∗ de forma que si tenemos dos palabrasx, y∈V∗ dondex=a

1a2. . . an, y=b1b2. . . bm entonces,

xconcatenado cony ser´a una palabraw∈V∗ con|w|=|x|+|y|, de forma que: w=x·y=a1a2. . . anb1b2. . . bm

¨

§ ¥

¦

Nota A veces se suele suprimir el ‘·’ y se puede escribir directamentew=xy Algunaspropiedadesde la concatenaci´on son:

operaci´oncerrada99K ∀x, y∈V∗ : x·yV

propiedadasociativa99K ∀x, y, z∈V∗: x·(y·z) = (x·y)·z

elemento neutro λ99K ∀x∈V∗ : λ·x=x·λ=x

Por tener estas propiedades (V∗,·, λ) es un monoide. Adem´as cada palabra deV se representa

deforma ´unica como concatenaci´on de s´ımbolos de V, por eso es adem´as unmonoide libre. Todo monoide libre cumple la ley decancelaci´on izquierda y derecha, en este caso,∀x, y, z

V se cumple que:

(x·y=x·z)(y=z) k (y·x=z·x)(y=z)

Decimos que una cadenaz es subcadena de otra cadena wsi existen cadenas x, y∈V∗ tal que

w=x·z·y. Vamos a ver dos conjuntos especiales de subcadenas:

Prefijo(w) ={x∈V∗| ∃ z∈V∗ : w=x·z} k Sufijo(w) ={x∈V∗| ∃ z∈V∗ : w=z·x}

Diremos quex es unprefijo de w si x Prefijo(w) y ser´a un prefijo propio si x 6=w. Por otra parte, diremos que x es unsufijo de wsi x∈Sufijo(w) y ser´a un sufijo propio six6=w.

Ejemplo 1.1 Si w =abab es una palabra sobre el alfabeto {a, b}, o lo que es lo mismo, w {a, b}∗,tenemos que:

ab es un prefijo propio dew

abab es un prefijo de w, pero no es propio b es un sufijo de w

1.2. Potencia de una palabra

Llamamospotencia n-´esimade una palabra, a la operaci´on que consiste en concatenar la palabra consigo mismanveces. Dada una palabraw∈V∗,se define inductivamente la potencia n-´esima dew, que notaremoswn,como:

1. w0=λ

2. wn=w·wn−1 para n >0

Ejemplo 1.2 Si w=aba es una palabra sobre el alfabeto {a, b} entonces: w0 =λ

w1 =aba

(17)

1.3. Inversi´on de palabras

Si w=a1a2. . . an es una palabra sobre un alfabeto V entonces la palabra inversa o refleja de

w se define como: wR=a

nan−1. . . a1

Ejemplo 1.3 Si w=aabaes una palabra sobre el alfabeto {a, b}, entonceswR=abaa.

2. Lenguajes formales

Llamamoslenguaje sobre el alfabeto V a cualquier subconjunto deV∗. As´ı tenemos que,

V∗,∅, y V pueden considerarse como lenguajes. Puesto que un lenguaje es tan s´olo una clase especial de conjunto, podemos especificar unlenguaje finito por extensi´on enumerando sus ele-mentos entre llaves. Por ejemplo, {aba, czr, d, f}es un lenguaje sobre el alfabeto {a, b, c, ..., z}. Sin embargo, la mayor´ıa de los lenguajes de inter´es son infinitos. En este caso podemos especi-ficar un lenguaje por comprensi´on de la siguiente forma:

L={w∈V∗ |wcumple la propiedadP}

En la definici´on anterior vemos que V∗ es el conjuntoreferencial, que podemos llamar tambi´en

lenguaje universal sobre V.

Ejemplo 1.4 L ={w∈ {0,1}∗|ceros(w) =unos(w)}, palabras que tienen el mismo n´umero de ceros que de unos.

2.1. Operaciones del algebra de conjuntos

Sean L1 y L2 dos lenguajes definidos sobre el alfabeto V. Se define la uni´on de estos dos

lenguajes como el lenguaje L sobreV que se especifica como:

L=L1∪L2 ={w∈V∗|(w∈L1)(w∈L2)}

La uni´on de lenguajes sobre el mismo alfabeto es un operaci´on cerrada y adem´as cumple las propiedades asociativa, conmutativa, y existe un elemento neutro que es el lenguaje vac´ıo ∅ (no es lo mismo ∅ que el lenguaje que contiene la palabra vac´ıa {λ}). El conjunto P(V∗)

(esto es, el conjunto de las partes de V∗, tambi´en llamado 2V∗

), est´a formado por todos los lenguajes posibles que se pueden definir sobre el alfabeto V. Entonces, por cumplir la uni´on las propiedades anteriores tenemos que (P(V∗),,∅) es un monoide abeliano.

De forma an´aloga a la uni´on se pueden definir otras operaciones del ´algebra de conjuntos como laintersecci´on, diferencia, y complementaci´on de lenguajes. Por ejemplo, el complementario del lenguajeL sobre el alfabeto V ser´a: L=V∗L.

2.2. Concatenaci´on, potencia e inversi´on de lenguajes

SeanL1 yL2dos lenguajes definidos sobre el alfabetoV, laconcatenaci´onde estos dos lenguajes

es otro lenguaje L definido como:

L1·L2 ={x·y∈V∗ |(x∈L1)(y∈L2)}

La definici´on anterior s´olo es v´alida si L1 y L2 contienen al menos un elemento. Podemos

(18)

La concatenaci´on de lenguajes sobre un alfabeto es una operaci´oncerrada, y adem´as cumple la propiedad asociativa y tiene un elemento neutro que es el lenguaje {λ}. Con lo cual, tenemos que (P(V∗),·,{λ}) es el monoide inducido por el monoide (V,·, λ) sobreP(V). Esto es, la

operaci´on de concatenaci´on de palabras induce la operaci´on de concatenaci´on de lenguajes y ´esta conserva las propiedades de la primera.

Teorema 1.1 Dados los lenguajesA, B, C sobre un alfabetoV, la concatenaci´on de lengua-jes es distributiva con respecto a la uni´on, esto es, se cumple que:

1. (B∪C) = (A·B)(A·C) 2. (B∪C)·A= (B·A)(C·A)

Dem.- La demostraci´on se deja como ejercicio. En el primer caso se debe probar que: (B∪C)(A·B)(A·C) y (A·B)(A·C)⊆A·(B∪C) para demostrar la igualdad y el segundo caso se demuestra de forma an´aloga. ¥

Una vez definida la concatenaci´on de lenguajes, podemos definir la potencia n-´esima de un lenguaje como la operaci´on que consiste en concatenar el lenguaje consigo mismon veces. La definici´on inductiva es:

1. L0={λ}

2. Ln=L·Ln−1, n >0

Ejemplo 1.5 Si L={ab, c} es un lenguaje sobre el alfabeto{a, b, c} entonces, L0={λ}

L1=L={ab, c}

L2=L·L1={abab, abc, cab, cc}

L3=L·L2={ababab, ababc, abcab, abcc, cabab, cabc, ccab, ccc}

Las definiciones de prefijo y sufijo de una palabra podemos extenderlas a lenguajes de la siguiente forma:

Prefijo(L) = [ w∈L

Prefijo(w) k Sufijo(L) = [ w∈L

Sufijo(w)

Tambi´en podemos definir ellenguaje inverso o reflejo deL como: LRwR|w∈Lª

2.3. Clausura de un lenguaje

Dado un lenguajeLsobre un alfabeto V se define la clausura positiva (o cierre positivo) deL, denotado L+, como:

L+ =

[ n=1

Ln

DefinimosL∗ como la clausura (o cierre) de L, como:

L∗ =

[ n=0

(19)

En ambos casos, Ln se refiere a la potencia n-´esima del lenguaje L en el monoide inducido (P(V∗),·,{λ}). El cierre o clausura de un lenguaje, por definici´on, contiene cualquier palabra que se obtenga por concatenaci´on de palabras de L y adem´as la palabra vac´ıa.

3. Gram´aticas formales

Hasta ahora hemos descrito los lenguajes formales como se describen los conjuntos: por extensi´on (si son finitos) o por comprensi´on. Aqu´ı vamos a introducir otra forma general y rigurosa de describir un lenguaje formal: mediante el uso de gram´aticas. Las gram´aticas son mecanismos generadores de lenguajes, es decir, nos dicen c´omo podemos obtener o construir palabras de un determinado lenguaje.

3.1. Definiciones b´asicas

Definici´on 1.1 Unagram´atica es una cuadrupla G= (VN, VT, S, P) donde:

VT es el alfabeto des´ımbolos terminales

VN es el alfabeto de s´ımbolos no terminales ovariables, de forma que debe serVN∩VT =∅ y denotamos conV al alfabeto total de la gram´atica, esto es,V =VN ∪VT.

S es els´ımbolo inicial y se cumple queS∈VN P es un conjunto finito dereglas de producci´on

Definici´on 1.2 Unaregla de producci´on es un par ordenado (α, β)de forma que: (α, β)(V∗·VN ·V∗)×V∗

Es decir, α =γ12 donde γ1, γ2 (VN∪VT)∗, A VN y β (VN∪VT)∗. Una producci´on (α, β)∈P se suele escribir de forma infijacomo α→β.

Por convenio usaremos letras may´usculas para los s´ımbolos no terminales; d´ıgitos y las pri-meras letras min´usculas del alfabeto para los s´ımbolos terminales; las ´ultimas letras min´usculas del alfabeto para palabras que pertenezcan a V∗

T y letras griegas para cualquier palabra que pertenezca a V∗. Usando este convenio, a veces se suele describir una gram´atica enumerando

´

unicamente sus reglas de producci´on y cuando varias reglas tienen la misma parte izquierda, se suelen agrupar separ´andolas con |.

Ejemplo 1.6 Sea la gram´atica G cuyas producciones son: S →aSa|bSb|a|b|λ

Esta gram´atica tiene una sola variable S que adem´as es el s´ımbolo inicial. VT = {a, b} y P contiene 5 reglas de producci´on.

Definici´on 1.3 Sea G una gram´atica y sean las cadenas α, β V∗. Decimos que α deriva

directamente en β, que notamos como α β (derivaci´on directa), si y s´olo si existe una producci´on δ→σ∈P tal queα=γ1δγ2, β=γ1σγ2 conγ1, γ2 ∈V∗.

(20)

¨

§ ¥

¦

Nota Si α β es una regla de producci´on de G, entonces se cumple siempre que α β. Cuando sea necesario distinguir entre varias gram´aticas, escribiremos α⇒Gβ, para referirnos a un derivaci´on directa en G.

Por la definici´on anterior se deduce que es una relaci´on binaria en el conjunto de cadenas de la gram´atica, esto es: ⇒ ⊆V∗×V. Aqu´ı usamos una notaci´on infija para indicar que αβ

en lugar de (α, β)∈ ⇒.

Definici´on 1.4 Decimos queαderiva enβ, o bien que,β es derivable deα, y lo notamos como α⇒∗ β (derivaci´on) si y s´olo si se verifica una de las dos condiciones siguientes:

1. α=β,(son la misma cadena), o bien,

2. ∃γ0, γ1, . . . , γn∈V∗ tal queγ0 =α, γn=β y∀0≤i < nse cumple queγi ⇒γi+1

A la secuenciaγ0 ⇒γ2 ⇒. . .⇒γnla llamaremossecuencia de derivaciones directasde longitud

n, o simplemente derivaci´on de longitudn. ¨

§ ¥ ¦

Nota Por la definici´on anterior est´a claro que⇒∗ es tambi´en una relaci´on binaria en V∗ y adem´as es la clausura reflexiva y transitiva de la relaci´on de derivaci´on directa. Esto quiere decir que⇒∗ es la menor relaci´on que cumple lo siguiente:

Siα ⇒β entoncesα⇒∗ β. Esto es, si dos cadenas est´an relacionadas mediante

entonces tambi´en lo est´an mediante la relaci´on ⇒∗

es reflexiva, ya que ∀α∈V∗ se cumple queα α

es transitiva. En efecto, si α⇒∗ β yβ⇒∗ γ, entoncesα⇒∗ γ

Definici´on 1.5 Sea una gram´atica G = (VN, VT, S, P). Una palabra α (VN∪VT) se de-nomina forma sentencial de la gram´atica, si y s´olo si se cumple que: S ⇒∗ α. Una forma sentencialwtal quew∈V∗

T se dice que es una sentencia.

Ejemplo 1.7 Sea la gram´atica S→aSa|bSb|a|b|λ, podemos afirmar lo siguiente: aaSb⇒aabSbb, aunque ni aaSb ni aabSbb son formas sentenciales de G

aabb⇒∗ aabb, aunque aabb no es una sentencia de G

S, aSa, abSba, λson formas sentenciales de G y adem´asλ es una sentencia

aabaa es una sentencia de G, ya que existe una derivaci´on de longitud 3 por la que S⇒∗ aabaa. En efecto:

S ⇒aSa⇒aaSaa⇒aabaa

Definici´on 1.6 Sea una gram´aticaG= (VN, VT, S, P).Se llamalenguaje generado por la gram´atica G al lenguaje L(G) formado por todas las cadenas de s´ımbolos terminales que son derivables del s´ımbolo inicial de la gram´atica (sentencias):

L(G) = n

w∈VT |S ⇒∗ w o

(21)

Definici´on 1.7 Dos gram´aticasG y G0 sonequivalentes si y s´olo si generan el mismo

len-guaje, es decir, sii L(G) =L(G0).

3.2. Notaci´on BNF

A veces se utiliza una notaci´on especial para describir gram´aticas llamada notaci´on BN F (Backus-Naus-Form). En la notaci´on BN F los s´ımbolos no terminales o variables son ence-rrados entre ´angulos y utilizaremos el s´ımbolo ::= para las producciones, en lugar de . Por ejemplo, la producci´onS →aSase representa enBN F comohSi::=ahSia. Tenemos tambi´en la notaci´on BNF-extendida que incluye adem´as los s´ımbolos [ ] y { } para indicar elementos opcionales y repeticiones, respectivamente.

Ejemplo 1.9 Supongamos que tenemos un lenguaje de programaci´on cuyas dos primeras reglas de producci´on para definir su sintaxis son:

hprogramai::= [hcabecerai] begin hsentenciasi end

hsentenciasi::=hsentenciai {hsentenciai}

Esto viene a decir que un programa se compone de una cabecera opcional, seguido de la palabra clave “begin”, a continuaci´on una lista de sentencias (debe haber al menos una sentencia) y finaliza con la palabra clave “end”. Podemos transformar las producciones anteriores para espe-cificarlas, seg´un la notaci´on que nosotros hemos introducido (est´andar), de la siguiente forma:

P →CbeginAend|beginAend A→B A|B

donde P es el s´ımbolo inicial de la gram´atica y corresponde a la variable hprogramai, C corres-ponde a hcabecerai, A se refiere a la variable hsentenciasi y B a hsentenciai.

La simbolog´ıa utilizada para describir las gram´aticas en notaci´on est´andar y en notaci´onBN F nos proporcionan un herramienta para describir los lenguajes y la estructura de las sentencias del lenguaje. Puede considerarse a esta simbolog´ıa como unmetalenguaje, es decir un lenguaje que sirve para describir otros lenguajes.

3.3. Jerarqu´ıa de Chomsky

En 1959 Chomsky clasific´o las gram´aticas en cuatro familias, que difieren unas de otras en la forma que pueden tener sus reglas de producci´on. Si tenemos una gram´aticaG= (VN, VT, S, P) clasificaremos las gram´aticas y los lenguajes generados por ellas, de la siguiente forma:

Tipo 3(Gram´aticas regulares). Pueden ser, a su vez, de dos tipos:

Lineales por la derecha. Todas sus producciones son de la forma: A→bC

A→b A→λ

(22)

Lineales por la izquierda. Con producciones del tipo: A→Cb A→b A→λ

Los lenguajes generados por estas gram´aticas se llamanlenguajes regularesy el conjunto de todos estos lenguajes es la claseL3.

Tipo 2(Gram´aticas libres del contexto). Las producciones son de la forma:

A→α

dondeA∈VN yα∈(VN∪VT)∗.Los lenguajes generados por este tipo de gram´aticas se llamanlenguajes libres del contexto y la clase esL2.

Tipo 1(Gram´aticas sensibles al contexto). Las producciones son de la forma:

αAβ →αγβ

dondeα, β ∈V∗ yγ V+ Se permite adem´as la producci´on S λsiempre y cuando S

no aparezca en la parte derecha de ninguna regla de producci´on.

El sentido de estas reglas de producci´on es el de especificar que una variableApuede ser reemplazada por γ en una derivaci´on directa s´olo cuando A aparezca en el “contexto” de α y β, de ah´ı el nombre “sensibles al contexto”. Adem´as, las producciones de esa forma cumplen siempre que la parte izquierda tiene longitud menor o igual que la parte derecha, pero nunca mayor (excepto para S λ). Esto quiere decir que la gram´atica es no contr´actil.

Los lenguajes generados por las gram´aticas de tipo 1 se llamanlenguajes sensibles al contextoy su clase es L1.

Tipo 0 (Gram´aticas con estructura de frase) Son las gram´aticas m´as generales, que por ello tambi´en se llamangram´aticas sin restricciones. Esto quiere decir que las producciones pueden ser de cualquier tipo permitido, es decir, de la formaα→β conα (V∗·V

N ·V∗) yβ∈V∗.

Los lenguajes generados por estas gram´aticas son los lenguajes con estructura de frase, que se agrupan en la claseL0.Estos lenguajes tambi´en se conocen en el campo de

laTeor´ıa de la Computabilidadcomo lenguajes recursivamente enumerables.

Teorema 1.2 (Jerarqu´ıa de Chomsky) Dado un alfabetoV, el conjunto de los lenguajes regulares sobre V est´a incluido propiamente en el conjunto de los lenguajes libres de contexto y este a su vez est´a incluido propiamente en el conjunto de los lenguajes sensibles al contexto, que finalmente est´a incluido propiamente en el conjunto de lenguajes con estructura de frase. Esto es:

L3 ⊂ L2 ⊂ L1 ⊂ L0

La demostraci´on de este teorema la iremos viendo a lo largo del curso. ¨

§ ¥ ¦

(23)

ejemplo el espa˜nol o el ingl´es. Estos lenguajes evolucionan sin tener en cuenta re-glas gramaticales formales. Las rere-glas surgen despu´es con objeto de explicar, m´as que determinar la estructura de un lenguaje, y la sintaxis es dif´ıcil de determinar con precisi´on. Los lenguajes formales, por el contrario, est´an definidos por reglas de producci´on preestablecidas y se ajustan con todo rigor o “formalidad” a ellas. Como ejemplo tenemos los lenguajes de programaci´on y los lenguajes l´ogicos y matem´ati-cos. No es de extra˜nar, por tanto, que se puedan construir compiladores eficientes para los lenguajes de programaci´on y que por contra la construcci´on de traductores para lenguaje natural sea una tarea compleja e ineficiente, en general. Veremos que las gram´aticas regulares y libres de contexto, junto con sus m´aquinas abstractas asociadas tienen especial inter´es en la construcci´on de traductores para lenguajes de programaci´on.

4. Nociones b´asicas sobre traductores

Hace apenas unas cuantas d´ecadas, se utilizaban los llamados lenguajes de primera generaci´on para hacer que los computadores resolvieran problemas. Estos lenguajes operan a nivel de c´odigo binario de la m´aquina, que consiste en una secuencia de ceros y unos con los que se instruye al ordenador para que realice acciones. La programaci´on, por tanto, era dif´ıcil y problem´atica, aunque pronto se dio un peque˜no paso con el uso de c´odigo octal o hexadecimal.

El c´odigo de m´aquina fue reemplazado por los lenguajes de segunda generaci´on, o lenguajes ensambladores. Estos lenguajes permiten usar abreviaturas nem´onicas como nombres simb´olicos, y la abstracci´on cambia del nivel de flip-flop al nivel de registro. Se observan ya los primeros pasos hacia la estructuraci´on de programas, aunque no puede utilizarse el t´ermino de programaci´on estructurada al hablar de programas en ensamblador. Las desventajas principales del uso de los lenguajes ensambladores son, por un lado, la dependencia de la m´aquina y, por otro, que son poco legibles.

Para sustituir los lenguajes ensambladores, se crearon los lenguajes de tercera generaci´on o lenguajes de alto nivel. Con ellos se pueden usar estructuras de control basadas en objetos de datos l´ogicos: variables de un tipo espec´ıfico. Ofrecen un nivel de abstracci´on que permite la especificaci´on de los datos, funciones o procesos y su control en forma independiente de la m´aquina. El dise˜no de programas para resolver problemas complejos es mucho m´as sencillo utilizando este tipo de lenguajes, ya que se requieren menos conocimientos sobre la estructura interna del computador, aunque es obvio que el ordenador ´unicamente entiende c´odigo m´aquina. Por lo tanto, para que un computador pueda ejecutar programas en lenguajes de alto nivel, estos deben ser traducidos a c´odigo m´aquina. A este proceso se le denomina compilaci´on, y la herramienta correspondiente se llama compilador. Nosotros vamos a entender el t´ermino compilador como un programa que lee otro, escrito en lenguaje fuente, y lo traduce alenguaje objeto, informando, durante el proceso de traducci´on, de la presencia de errores en el programa fuente. Esto se refleja en la figura 1.1.

(24)

COMPILADOR

Programa

Objeto Programa

Fuente

Mensajes de error

Figura 1.1: Definici´on de un compilador

4.1. Traductores y compiladores

Untraductores un programa que acepta cualquier texto expresado en un lenguaje (ellenguaje fuentedel traductor) y genera un texto sem´anticamente equivalente expresado en otro lenguaje (sulenguaje destino).

Un ensamblador traduce un lenguaje ensamblador en su correspondiente c´odigo m´aquina. Ge-neralmente, un ensamblador genera una instrucci´on de la m´aquina por cada instrucci´on fuente. Un compiladortraduce desde un lenguaje de alto nivel a otro lenguaje de bajo nivel. General-mente, un compilador genera varias instrucciones de la m´aquina por cada comando fuente. Los ensambladores y compiladores son las clases m´as importantes de traductores de lenguajes de programaci´on, pero no son las ´unicas clases. A veces se utilizan lostraductores de alto nivelcuya fuente y destino son lenguajes de alto nivel. Undesensambladortraduce un c´odigo m´aquina en su correspondiente lenguaje ensamblador. Undescompiladortraduce un lenguaje de bajo nivel en un lenguaje de alto nivel.

Nosotros estamos interesados en la traducci´on de textos que son programas. Antes de realizar cualquier traducci´on, un compilador comprueba que el texto fuente sea un programa correcto del lenguaje fuente. (En caso contrario genera un informe con los errores). Estas comprobaciones tienen en cuenta lasintaxisy lasrestricciones contextualesdel lenguaje fuente. Suponiendo que el programa fuente es correcto, el compilador genera un programa objeto que es sem´anticamente equivalente al programa fuente, es decir, que tiene los efectos deseados cuando se ejecuta. La generaci´on del programa objeto tiene en cuenta tanto lasem´anticadel lenguaje fuente como la sem´anticadel lenguaje destino.

Los traductores, y otros procesadores de lenguajes, son programas que manipulan programas. Varios lenguajes se ven implicados: no s´olo el lenguaje fuente y el lenguaje destino, sino tam-bi´en el lenguaje en el cual el traductor se ha escrito. Este ´ultimo es el llamado lenguaje de implementaci´on.

4.2. Int´erpretes

Un compilador nos permite preparar un programa para que sea ejecutado en una m´aquina, traduciendo el programa a c´odigo m´aquina. El programa entonces se ejecuta a la velocidad de la m´aquina. Este m´etodo de trabajo no est´a libre de inconvenientes: todo el programa debe ser traducido antes que pueda ejecutarse y producir resultados. En un entorno interactivo, la interpretaci´ones un m´etodo de trabajo m´as atractivo.

Referencias

Documento similar

 Para recibir todos los números de referencia en un solo correo electrónico, es necesario que las solicitudes estén cumplimentadas y sean todos los datos válidos, incluido el

De acuerdo con Harold Bloom en The Anxiety of Influence (1973), el Libro de buen amor reescribe (y modifica) el Pamphihis, pero el Pamphilus era también una reescritura y

entorno algoritmo.

Habiendo organizado un movimiento revolucionario en Valencia a principios de 1929 y persistido en las reuniones conspirativo-constitucionalistas desde entonces —cierto que a aquellas

The part I assessment is coordinated involving all MSCs and led by the RMS who prepares a draft assessment report, sends the request for information (RFI) with considerations,

Desde esa concepción, el Derecho es considerado como algo que puede ser completamente objetivado y observado sin ningún tipo de parti- cipación (puede ser casi «fotografiado»).

Ciaurriz quien, durante su primer arlo de estancia en Loyola 40 , catalogó sus fondos siguiendo la división previa a la que nos hemos referido; y si esta labor fue de

En la parte central de la línea, entre los planes de gobierno o dirección política, en el extremo izquierdo, y los planes reguladores del uso del suelo (urbanísticos y