Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Autómatas Compiladores, Apuntes de Ingeniería Infórmatica

Asignatura: Teoría de Autómatas y Lenguajes Formales, Profesor: , Carrera: Ingeniería Informática, Universidad: UAX

Tipo: Apuntes

Antes del 2010

Subido el 28/05/2007

_vivayo_
_vivayo_ 🇪🇸

3.7

(117)

149 documentos

1 / 159

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
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
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Vista previa parcial del texto

¡Descarga Autómatas Compiladores y más Apuntes en PDF de Ingeniería Infórmatica solo en Docsity!

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

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 de Teor´ı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 denominar Inform´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 como ACM e IEEE 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 expuso Millner en un discurso que dio en 1993 al recoger el prestigioso premio 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

La Teor´ıa de la Computaci´on trata con modelos 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 los curricula 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.

En Teor´ıa de la Computaci´on, a diferencia de las otras materias, lo importante no es buscar la mejor manera de hacer las cosas (optimalidad ) sino estudiar qu´e puede o no puede hacerse con un ordenador (computabilidad ).

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 Church propuso 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 algoritmo a 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 Entscheidungsproblem era uno de esos problemas. Por otra parte Kleene, 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 recursiva y da ejemplos de problemas irresolubles. La tercera noci´on de funci´on calculable proviene del matem´atico ingl´es Alan 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 como Tesis de Turing (1936). Aunque no se puede dar ninguna prueba formal de que una m´aquina de Turing pueda 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 el Entscheidungsproblem era 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, la Tesis 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´on f? (Problema de la verificaci´on)

Conforme se fueron obteniendo demostraciones individuales de la no computabilidad de cada una de estas cuestiones, fue creciendo la sensaci´on de que casi cualquier pregunta interesante acerca

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 como Complejidad Algor´ıtmica. Rabin fue 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 abstracta de 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 y R. Stearns en 1965, cuyo t´ıtulo On the Complexity of Algorithms dio nombre a este cuerpo de conocimiento. En ´el se introduce la noci´on fundamental de medida de complejidad definida 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 Com- putational Difficulty of Functions (1964). Cobham enfatiz´o el t´ermino “intr´ınseco”, es decir, ´el estaba interesado en una teor´ıa independiente de las m´aquinas. Esto nos conduce al un con- cepto importante desarrollado en 1965: la identificaci´on de la clase de problemas que se pueden resolver en tiempo acotado por un polinomio sobre la longitud de la entrada. La distinci´on entre algoritmos de tiempo polinomial y algoritmos de tiempo exponencial fue 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-completitud es 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

La Teor´ıa de Aut´omatas, que engloba tambi´en al estudio de las M´aquinas secuenciales, tiene su origen en el campo de la Ingenier´ıa El´ectrica. El matem´atico norteameriacano Shanon (que luego se har´ıa famoso por su Teor´ıa de la Informaci´on) vino a establecer las bases para la aplicaci´on de la L´ogica Matem´atica a los circuitos combinatorios y posteriormente Huffman en 1954 los ampli´o a circuitos secuenciales y utiliza conceptos como estado de un aut´omata y tabla de transici´on. A lo largo de las d´ecadas siguientes, las ideas de Shanon se desarrollaron considerablemente, dando lugar a la formalizaci´on de una Teor´ıa de las M´aquinas Secuenciales y de los Aut´omatas Finitos (1956). Otros trabajos importantes sobre m´aquinas secuenciales son debidos a Mealy (1955) y Moore.

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 n^2 pasos. Bastante m´as tarde, en 1971 Hopcroft encontr´o un m´etodo que lo hac´ıa en O(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 descripci´on de lenguajes. La relaci´on la podemos observar en la figura 1. Cada uno de estos tipos de m´aqui- nas 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 procesos com- putables. 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 estructurados 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

A continuaci´on haremos un repaso breve sobre varias ideas matem´aticas que ser´an utilizadas en los pr´oximos cap´ıtulos. Estos conceptos incluyen conjuntos, relaciones, funciones y t´ecnicas de

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 como V = {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 que z /∈ V. Dos conjuntos son iguales si 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 llama definici´on por extensi´on. Pero a veces esto no es posible hacerlo porque el conjunto es infinito y entonces se usa una definici´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. Si A es un subconjunto de B pero A no es igual a B se dice que A es un subconjunto propio de B y se nota como A ⊂ B. Es obvio que ∅ ⊆ A para cualquier conjunto A. Para probar que dos conjuntos A y B son iguales debemos probar que A ⊆ B y B ⊆ A: cada elemento de A debe ser un elemento de B y viceversa. Dos conjuntos se pueden combinar para formar un tercero mediante una serie de operaciones sobre conjuntos:

uni´on A ∪ B = {x | (x ∈ A) ∨ (x ∈ B)} intersecci´on A ∩ B = {x | (x ∈ A) ∧ (x ∈ B)} diferencia A − B = {x | (x ∈ A) ∧ (x /∈ B)}

Una relaci´on binaria entre dos conjuntos A y B es un subconjunto de A × 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 (a 1 , a 2 , ..., an) es una n-tupla ordenada. Para cada i ∈ { 1 , ..., n} , ai es la i-´esima componente de la n-tupla. Dos n-tuplas (b 1 , b 2 , ..., bn) y (a 1 , a 2 , ..., am) son iguales si y s´olo si m = n y ai = bi para cada i ∈ { 1 , ..., n}. Si A 1 , ..., An son conjuntos

cualesquiera, el producto cartesiano de todos ellos, A 1

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

iguales el producto cartesiano A

︷ ︸︸^ n ︷ ×... × A se puede escribir como An^. Una relaci´on n-aria

entre los conjuntos A 1 , ..., An es un subconjunto del producto cartesiano A 1

n ︷ ︸︸ ︷ ×... × An. Vamos a tratar ahora con relaciones binarias entre un conjunto y el mismo, es decir, con R ⊆ 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 que a = b, en lugar de (a, b) ∈=.

Sea R una relaci´on binaria sobre un conjunto A. Decimos que:

R es reflexiva sii ∀ a ∈ A : aRa

R es irreflexiva sii ∀ a ∈ A : ¬(aRa)

R es transitiva sii ∀ a, b, c ∈ A : (aRb) ∧ (bRc) ⇒ (aRc)

R es sim´etrica sii ∀ a, b ∈ A : aRb ⇒ bRa

R es antisim´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´on R 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 equivalencia R ⊆ A × A se le denomina conjunto cociente de A modulo R y se nota como A/R:

A/R = {[a] | a ∈ A}

Una relaci´on R ⊆ A × A que cumpla las propiedades reflexiva, antisim´etrica y transitiva se dice que es una relaci´on de orden. Al par (A, R) lo llamaremos conjunto ordenado. Si adem´as la relaci´on de orden R verifica que todo par de elementos de A 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-clausura de R ⊆ A×A es la menor relaci´on R′^ que incluye todos los pares ordenados de R y cumple las propiedades de P. Por ejemplo, la clausura transitiva de R, que notaremos R+, se define de la siguiente manera:

  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 en R+^ los pares introducidos por 1 y 2.

La clausura reflexiva y transitiva de R, que notamos R∗, 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 binaria f ⊆ A×B con la siguiente propiedad: para cada elemento a ∈ A hay exactamente un par ordenado en f cuya primera componente sea a. Llamamos a A el dominio de la funci´on f y a B el codominio de f. Si a es un elemento cualquiera de A, f (a) ser´a un elemento b ∈ B tal que (a, b) ∈ f y adem´as por ser f una funci´on este b ser´a ´unico. Al elemento f (a) lo llamaremos imagen de a bajo f. Si tenemos la funci´on f anterior y A′^ es un subconjunto de A, definimos:

f

[

A′

]

f (a) | a ∈ A′

que es la imagen de A’ bajo f. El rango de una funci´on f es 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 escribir f (m, n) = m + n, en lugar de f ((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 si M es un conjunto y ◦ es una operaci´on interna binaria asocia- tiva. Es decir, ◦ es una funci´on de M × M en M que verifica lo siguiente:

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

Un elemento e ∈ M es la identidad 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. x^0 = e
  2. xn^ = x ◦ xn−^1 , para n > 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 de M. Esta operaci´on se define por: ∀ A, B ∈ 2 M^ : A ◦ B = {x ◦ y | (x ∈ A) ∧ (y ∈ B)}

Principio de inducci´on

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

Si A es un subconjunto de numeros naturales, A ⊆ N , y satisface las condiciones:

  1. 0 ∈ A
  2. si k ∈ A entonces k + 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 natural k la propiedad P 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 que A = 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 propiedad P se cumple para 0.

etapa de inducci´on Suponer que la propiedad se sumple para k (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 que P (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
  2. k! = k · (k − 1)! para k > 0.

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 palabras x, y ∈ V ∗^ donde x = a 1 a 2... an, y = b 1 b 2... bm entonces, x concatenado con y ser´a una palabra w ∈ V ∗^ con |w| = |x| + |y|, de forma que:

w = x · y = a 1 a 2... anb 1 b 2... bm ¨ §

¥ Nota (^) ¦A veces se suele suprimir el ‘·’ y se puede escribir directamente w = xy

Algunas propiedades de la concatenaci´on son:

operaci´on cerrada 99K ∀ x, y ∈ V ∗^ : x · y ∈ V ∗ propiedad asociativa 99K ∀ 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 de V ∗^ se representa de forma ´unica como concatenaci´on de s´ımbolos de V , por eso es adem´as un monoide libre. Todo monoide libre cumple la ley de cancelaci´on izquierda y derecha, en este caso, ∀ x, y, z ∈ V se cumple que:

(x · y = x · z) ⇒ (y = z) ‖ (y · x = z · x) ⇒ (y = z)

Decimos que una cadena z es subcadena de otra cadena w si 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} ‖ Sufijo(w) = {x ∈ V ∗^ | ∃ z ∈ V ∗^ : w = z · x}

Diremos que x es un prefijo de w si x ∈ Prefijo(w) y ser´a un prefijo propio si x 6 = w. Por otra parte, diremos que x es un sufijo de w si x ∈ Sufijo(w) y ser´a un sufijo propio si x 6 = 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 de w abab es un prefijo de w, pero no es propio b es un sufijo de w

1.2. Potencia de una palabra

Llamamos potencia n-´esima de una palabra, a la operaci´on que consiste en concatenar la palabra consigo misma n veces. Dada una palabra w ∈ V ∗, se define inductivamente la potencia n-´esima de w, que notaremos wn, como:

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

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

w^0 = λ w^1 = aba w^2 = abaaba

1.3. Inversi´on de palabras

Si w = a 1 a 2... an es una palabra sobre un alfabeto V entonces la palabra inversa o refleja de w se define como: wR^ = anan− 1... a 1

Ejemplo 1.3 Si w = aaba es una palabra sobre el alfabeto {a, b}, entonces wR^ = abaa.

2. Lenguajes formales

Llamamos lenguaje sobre el alfabeto V a cualquier subconjunto de V ∗. 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 un lenguaje 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 ∗^ | w cumple la propiedad P }

En la definici´on anterior vemos que V ∗^ es el conjunto referencial, 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 L 1 y L 2 dos lenguajes definidos sobre el alfabeto V. Se define la uni´on de estos dos lenguajes como el lenguaje L sobre V que se especifica como:

L = L 1 ∪ L 2 = {w ∈ V ∗^ | (w ∈ L 1 ) ∨ (w ∈ L 2 )}

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 la intersecci´on, diferencia, y complementaci´on de lenguajes. Por ejemplo, el complementario del lenguaje L sobre el alfabeto V ser´a: L = V ∗^ − L.

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

Sean L 1 y L 2 dos lenguajes definidos sobre el alfabeto V , la concatenaci´on de estos dos lenguajes es otro lenguaje L definido como:

L 1 · L 2 = {x · y ∈ V ∗^ | (x ∈ L 1 ) ∧ (y ∈ L 2 )}

La definici´on anterior s´olo es v´alida si L 1 y L 2 contienen al menos un elemento. Podemos extender la operaci´on de concatenaci´on al lenguaje vac´ıo de la siguiente manera:

∅ · L = L · ∅ = ∅

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 Una gram´atica es una cuadrupla G = (VN , VT , S, P ) donde:

VT es el alfabeto de s´ımbolos terminales

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

S es el s´ımbolo inicial y se cumple que S ∈ VN

P es un conjunto finito de reglas de producci´on

Definici´on 1.2 Una regla de producci´on es un par ordenado (α, β) de forma que:

(α, β) ∈ (V ∗^ · VN · V ∗) × V ∗

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

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 ∗.

Esto quiere decir que α deriva directamente en β, si β puede obtenerse a partir de α sustituyendo una ocurrencia de la parte izquierda de una producci´on que aparezca en α por la parte derecha de la regla de producci´on.

¨ §

¥ 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 < n se cumple que γi ⇒ γi+

A la secuencia γ 0 ⇒ γ 2 ⇒... ⇒ γn la llamaremos secuencia de derivaciones directas de longitud n, o simplemente derivaci´on de longitud n. ¨ §

¥ 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 sentencial w tal que w ∈ 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´atica G = (VN , VT , S, P ). Se llama lenguaje 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) =

w ∈ V (^) T∗ | S ∗ ⇒ w

Ejemplo 1.8 Sea L =

w ∈ {a, b}∗^ | w = wR

. Este lenguaje est´a formado por todos los pal´ındro- mos sobre el alfabeto {a, b}. Puede probarse que la gram´atica S → aSa | bSb | a | b | λ genera el lenguaje L. En general no existe un m´etodo exacto para probar que una gram´atica genera un determinado lenguaje. Para este caso tan sencillo podemos probarlo de “manera informal” haciendo una serie de derivaciones hasta darnos cuenta de que S ⇒∗ w si y s´olo si w = wR. Luego veremos una demostraci´on formal por inducci´on en la secci´on de aplicaciones.