Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Automata PDF
Automata PDF
Serafn Moral
Departamento de Ciencias de la Computacin e I.A.
ETSI Informtica
Universidad de Granada
Modelos de Computacin I
ndice general
1. Introduccin
1.1. Introduccin Histrica . . . . . . . . . . . . . . .
1.2. Diferentes Modelos de Computacin . . . . . . . .
1.2.1. Autmatas y Lenguajes . . . . . . . . . . .
1.3. Lenguajes y Gramticas. Aspectos de su traduccin
1.3.1. Alfabetos y Palabras . . . . . . . . . . . .
1.3.2. Lenguajes . . . . . . . . . . . . . . . . . .
1.3.3. Gramticas Generativas . . . . . . . . . .
1.3.4. Jerarqua de Chomsky . . . . . . . . . . .
.
.
.
.
.
.
.
.
5
7
11
15
17
17
19
22
27
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
33
34
37
39
42
44
45
48
52
53
54
61
65
65
67
68
71
72
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Modelos de Computacin I
3.2. Operaciones con Conjuntos Regulares . . . . . . . . . .
3.3. Algoritmos de Decision para Autmatas Finitos . . . . .
3.4. Teorema de Myhill-Nerode. Minimizacin de Autmatas
3.4.1. Minimizacin de Autmatas . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
76
78
79
83
.
.
.
.
.
.
.
.
89
90
93
94
97
99
101
101
102
.
.
.
.
107
108
109
111
113
.
.
.
.
.
117
118
120
121
122
127
Captulo 1
Introduccin
Modelos de Computacin I
Hoy en da parece que no existe ningn lmite a lo que un ordenador puede llegar a hacer, y
da la impresin de que cada vez se pueden resolver nuevos y ms difciles problemas.
Casi desde que aparece sobre La Tierra, el hombre ha tratado de buscar procedimientos y mquinas que le facilitasen la realizacin de clculos (aritmticos primero, y otros ms complejos
posteriormente).
El avance tecnolgico para representar datos y/o informacin por un lado, y el diseo de
nuevas formas de manejarlos, propicia el desarrollo de dispositivos y mquinas de calcular.
Un aspecto importante en el desarrollo de los ordenadores, es sin duda, su aplicacin para
resolver problemas cientficos y empresariales. Esta aplicacin hubiese resultado muy difcil sin
la utilizacin de procedimientos que permiten resolver estos problemas mediante una sucesin
de pasos claros, concretos y sencillos, es decir algortmos. El avance de las matemticas permite
la utilizacin de nuevas metodologas para la representacin y manejo de la informacin.
Por otro lado, aparece el intento de los matemticos y cientficos para obtener un procedimiento general para poder resolver cualquier problema (matemtico) claramente formulado. Es
lo que podramos llamar El problema de la computacin terica. El avance de la tecnologa y de las matemticas, y ms en concreto de la teora de conjuntos y de la lgica, permiten
plantearse aspectos de la computacin en 3 caminos.
a) Computacin terica. Autmatas, Funciones Recursivas, ...
b) Ordenadores digitales. Nuevas tecnologas, nuevos lenguajes, ....
c) Intentos de modelizar el cerebro biolgico
1. Redes Neuronales (intentan modelizar el "procesador")
2. Conjuntos y Lgica Difusa (representar y manejar la informacin)
En este texto veremos aspectos relativos a a) y c.1).
Considermos el problema general, bajo un planteamiento de Programacin.
Desde un punto de vista global, un programa (traducido a lenguaje mquina) se puede ver
como una sucesin de ceros y unos, cuya ejecucin produce una salida, que es otra serie de
ceros y unos. Si aadimos un 1 al inicio de cada cadena binaria (programa y salida), podemos
entender los programas como aplicaciones concretas de una funcin entre nmeros naturales en
binario. El argumento (variable independiente) sera el programa y la funcin (var. dependiente)
la salida del programa.
Obviamente, el nmero de funciones posibles de N en N es nonumerable, mientras que el
nmero de posibles programas que podemos escribir con un Lenguaje de Programacin, que
tiene un nmero finito de smbolos, es numerable.
Esto significa (cada programa puede calcular una sola funcin como las indicadas antes) que
existen muchas funciones para las que no podemos escribir un programa en nuestro L. de Alto
Nivel, aunque seguramente estamos interesados en resolver el problema asociado a la funcin.
Cap. 1
Introduccin
Modelos de Computacin I
El primer paso en la bsqueda de las respuestas a estas preguntas est en el estudio de los
modelos de computacin.
Los comienzos de la Teora. La Tesis de Church-Turing
Los modelos abstractos de computacin tienen su origen en los aos 30, bastante antes de
que existieran los ordenadores modernos, en el trabajo de los lgicos Church, Gdel, Kleene,
Post, y Turing. Estos primeros trabajos han tenido una profunda influencia no solo en el desarrollo terico de las C.C., sino que muchos aspectos de la prctica de la computacin que son
ahora lugar comn de los informticos, fueron presagiados por ellos; incluyendo la existencia
de ordenadores de propsito general, la posibilidad de interpretar programas, la dualidad entre
software y hardware, y la representacin de lenguajes por estructuras formales basados en reglas
de produccin.
El punto de partida de estos primeros trabajos fueron las cuestiones fundamentales que D.
Hilbert formul en 1928, durante el transcurso de un congreso internacional:
1.- Son completas las matemticas, en el sentido de que pueda probarse o no cada aseveracin
matemtica?
2.- Son las matemticas consistentes, en el sentido de que no pueda probarse simultaneamente
una aseveracin y su negacin ?
3.- Son las matemticas decidibles, en el sentido de que exista un mtodo definido que se pueda
aplicar a cualquier aseveracin matemtica, y que determine si dicha aseveracin es cierta?.
La meta de Hilbert era crear un sistema matemtico formal ompleto onsistente", en el que
todas las aseveraciones pudieran plantearse con precisin. Su idea era encontrar un algoritmo que
determinara la verdad o falsedad de cualquier proposicin en el sistema formal. A este problema
le llam el Entscheidungsproblem.
Por desgracia para Hilbert, en la dcada de 1930 se produjeron una serie de investigaciones
que mostraron que esto no era posible. Las primeras noticias en contra surgen en 1931 con K.
Gdel y su Teorema de Incompletitud: "Todo sistema de primer orden consistente que contenga
los teoremas de la aritmtica y cuyo conjunto de (nmeros de Gdel de) axiomas sea recursivo
no es completo."
Como consecuencia no ser posible encontrar el sistema formal deseado por Hilbert en el
marco de la lgica de primer orden, a no ser que se tome un conjunto no recursivo de axiomas,
hecho que escapaba a la mente de los matemticos. Una versin posterior y ms general del
teorema de Gdel elimina la posibilidad de considerar sistemas deductivos ms potentes que los
sistemas de primer orden, demostrando que no pueden ser consistentes y completos a la vez.
Un aspecto a destacar dentro del teorema de incompletitud de Gdel, fu la idea de codificacin. Se indica un mtodo (numeracin de Gdel) mediante el cual se asigna un nmero de
cdigo (entero positivo) a cada frmula bien formada del sistema (fbf) y a cada sucesin finita
de frmulas bien formadas, de tal modo que la fbf o sucesin finita de fbf se recupera fcilmente
a partir de su nmero de cdigo. A travs de este cdigo, los enunciados referentes a enteros positivos, pueden considerarse como enunciados referentes a nmeros de cdigo de expresiones, o
2
Cap. 1
Introduccin
incluso referentes a las propias expresiones. Esta misma idea fu posteriormente utilizada para
codificar algoritmos como enteros positivos, y as poder considerar un algoritmo, cuyas entradas
fuesen enteros positivos, como un algoritmo cuyas entradas fuesen algoritmos.
El siguiente paso importante lo constituye la aparicin casi simultanea en 1936 de varias caracterizaciones independientes de la nocin de calculabilidad efectiva, en los trabajos de Church,
Kleene, Turing y Post. Los tres primeros mostraban problemas que eran efectivamente indecidibles; Church y Turing probaron adems que el Entscheidungsproblem era un problema indecidible.
Church propuso la nocin de funcin -definible como funcin efectivamente calculable. La
demostracin de teoremas se convierte en una transformacin de una cadena de smbolos en otra,
en clculo lambda, segn un conjunto de reglas formales. Este sistema result ser inconsistente,
pero la capacidad para expresar-calcular funciones numricas como trminos del sistema llam
pronto la atencin de l y sus colaboradores.
Gdel habia recogido la idea de Herbrand de que una funcin f podra definirse por un
conjunto de ecuaciones entre trminos que incluian a la funcin f y a smbolos para funciones
previamente definidas, y precis esta idea requiriendo que cada valor de f se obtenga de las
ecuaciones por sustitucin de las variables por nmeros y los trminos libres de variables por
los valores que ya se habian probado que designaban. Esto define la clase de las funciones
recursivas de Herbrand-Gdel.
En 1936, Church hace un esquema de la demostracin de la equivalencia entre las funciones -definibles y las funciones recursivas de Herbrand-Gdel (esta equivalencia tambin haba
sido probada por Kleene ); y aventura que estas iban a ser las nicas funciones calculables por
medio de un algoritmo a travs de la tesis que lleva su nombre, y utilizando la nocin de funcin
-definible, di ejemplos de problemas de decisin irresolubles, y demostr que el Entscheidungsproblem era uno de esos problemas.
Por otra parte Kleene, pocos meses despues, demuestra formalmente la equivalencia entre
funciones -definible y funciones recursivas de Herbrand-Gdel, y d ejemplos de problemas
irresolubles utilizando la nocin de funcin recursiva.
La tercera nocin de funcin calculable proviene del matemtico ingls A. Turing, quin
argument que la tercera cuestin de Hilbert (el Entscheidungsproblem) poda atacarse con la
ayuda de una mquina, al menos con el concepto abstracto de mquina.
Turing seal que haba tenido xito en caracterizar de un modo matemticamente preciso,
por medio de sus mquinas, la clase de las funciones calculables mediante un algoritmo, lo que
se conoce hoy como Tesis de Turing.
Aunque no se puede dar ninguna prueba formal de que una mquina pueda tener esa propiedad, Turing di un elevado nmero de argumentos a su favor, en base a lo cual present la
tesis como un teorema demostrado. Adems, utiliz su concepto de mquina para demostrar
que existen funciones que no son calculables por un mtodo definido y en particular, que el
Entscheidungsproblem era uno de esos problemas.
10
Modelos de Computacin I
Cuando Turing conoci los trabajos de Church-Kleene, demostr que los conceptos de funcin -definible y funcin calculable por medio de una mquina de Turing coinciden. Naturalmente a la luz de esto la Tesis de Turing resulta ser equivalente a la de Church.
Finalmente, cabe resear el trabajo de E. Post. Este estaba interesado en marcar la frontera
entre lo que se puede hacer en matemticas simplemente por procedimientos formales y lo que
depende de la comprensin y el entendimiento. De esta forma, Post formula un modelo de procedimiento efectivo a travs de los llamados sistemas deductivos normales. Estos son sistemas
puramente formales en los que puede deducirse sucesiones finitas de smbolos como consecuencia de otras sucesiones finitas de smbolos por medio de un tipo normalizado de reglas y a
partir de un conjunto de axiomas. As pues, dada una sucesin finita de smbolos como entrada,
las reglas permiten convertirla en una sucesin finita de salida. En su artculo, Post demostr
resultados de incompletitud e indecibilidad en estos sistemas.
Los resultados hasta ahora citados, se refieren a funciones totales. La existencia de algoritmos que con determinadas entradas nunca terminan, condujo de forma natural a considerar
funciones parciales. Kleene fu el primero en hacer tal consideracin en 1938. El estudio de
estas funciones ha mostrado la posibilidad de generalizar todos los resultados anteriores a funciones parciales. Por otro lado, el estudio de las funciones parciales calculables ha resultado
esencial para el posterior desarrollo de la materia.
Posteriormente, se demostr la equivalencia entre lo que se poda calcular mediante una
mquina de Turing y lo que se poda calcular mediante un sistema formal en general.
A la vista de estos resultados, la Tesis de Church-Turing es aceptada como un axioma en la
teora de la computacin, y ha servido como punto de partida en la investigacin de los problemas que se pueden resolver mediante un algoritmo.
Problemas no computables
Usando la codificacin de Gdel, se demostr que era posible construir una mquina de
propsito general, es decir, capaz de resolver cualquier problema que se pudiese resolver mediante un algoritmo. Dicha mquina tendra como entrada el entero que codificara el algoritmo
solucin del problema y la propia entrada del problema, de tal forma, que la mquina aplicara
el algoritmo codificado a la entrada del problema. Esta hipottica mquina puede considerarse
como el padre de los actuales ordenadores de proposito general.
Una de las cuestiones ms estudiadas en la teora de la computabilidad ha sido la posibilidad de construir algoritmos que nos determinen si un determinado algoritmo posee o no una
determinada propiedad. As, sera interesante responder de forma automtica a cuestiones como:
- Calculan los algoritmos A y B la misma funcin? (Problema de la equivalencia)
- Parar el algoritmo A para una de sus entradas? (Problema de la parada)
- Parar el algoritmo A para todas sus entradas? (Problema de la totalidad)
- Calcula el algoritmo A la funcin f? (Problema de la verificacin?)
etc . . .
En un principio se fueron obteniendo demostraciones individuales de la no computabilidad
Cap. 1
Introduccin
11
de cada una de estas cuestiones, de forma que se tena la sensacin de que casi cualquier pregunta
interesante acerca de algoritmos era no computable.
A pesar de esto, y como consecuencia de la existencia de un programa universal hay otras
muchas cuestiones interesantes que se han demostrado computables.
El identificar los problemas que son computables y los que no lo son tiene un considerable
inters, pues indica el alcance y los lmites de la computabilidad, y as demuestra los lmites
tericos de los ordenadores. Adems de las cuestiones sobre algoritmos, se han encontrado numerosos problemas menos "generales"que han resultado ser no computables. Como ejemplo
citamos:
- Dcimo problema de Hilbert. Una ecuacin diofntica es la ecuacin de los ceros enteros de un
polinomio con coeficientes enteros. Se pregunta si hay un procedimiento efectivo que determine
si una ecuacin diofntica tiene o no solucin.
Por otro lado, son muchos los problemas interesantes que se han demostrado computables.
Todas las funciones construidas por recursividad primitiva o minimalizacin a partir de funciones calculables resultan ser calculables como consecuencia de los trabajos de Church y Turing.
Pero adems, otras funciones ms complejamente definidas tambin son computables. Como
ejemplo ms interesante de aplicacin de este tipo de recursin tenemos la funcin de Ackermann :
(0, y) = y + 1;
(x + 1, 0) = (x, 1);
(x + 1, y + 1) = (x, (x + 1, y)).
12
Modelos de Computacin I
Cap. 1
Introduccin
13
de las evidencias a favor y de la falta de evidencias en contra, aceptamos la Tesis de Church que
afirma la equivalencia de ambas clases.
Se clasifican los problemas segn que siempre sea posible encontrar la solucin por medio
de un algoritmo (problemas computables) que no existan algoritmos que siempre produzcan
una solucin (problemas no computables).
Surge de modo inmediato la cuestin B) de como disear un programa (algoritmo especificado para poder ser ejecutado por un ordenador) que resuelva un problema dado. En la primera
poca del desarrollo informtico los programas dependan intrnsecamente del ordenador utilizado, pues se expresaban en lenguaje mquina, directamente interpretable por el ordenador.
Surgi entonces la necesidad de idear otros mecanismos para construir y expresar los programas. El hilo conductor de tales mecanismos fu la abstraccin: separar el programa del ordenador y acercarlo cada vez ms al problema.
Los subprogramas empezaron ya a usarse a principios de los 50, dando lugar posteriormente
al primer tipo de abstraccin, la procedimental. A principios de los 60, se empezaron a entender
los conceptos abstractos asociados a estructuras de datos bsicas pero an no se separaban los
conceptos de las implementaciones. Con el nacimiento en esta poca de los primeros lenguajes
de alto nivel, Fortran p.ej., se lleg a la abstraccin sintctica, al abstraerse la semntica de las
expresiones matemticas y encapsular el acceso a ellas a travs de la sintaxis propia del lenguaje.
En cualquier caso con el desarrollo de estos lenguajes de alto nivel se solventaron los problemas
de flexibilidad en la comunicacin con el ordenador, y se empezaron a estudiar los algoritmos
de forma independiente del ordenador concreto en que se probaran y del lenguaje concreto en
que se expresaran.
Aparece la necesidad de traducir los programas escritos en lenguajes de alto nivel al lenguaje
mquina, de forma automtica, y se buscan mquinas o procedimientos que puedan reconer el
lxico y la sintxis de dichos lenguajes.
Hay que comentar que no hay un algoritmo para ensear a disear algoritmos, y que muchas
veces el proceso de construccin puede llegar a ser muy poco disciplinado. No obstante, existen
tcnicas de diseo de algoritmos, que vienen a ser modelos abstractos de los mismos aplicables
a gran variedad de problemas reales.
Una vez construido un programa para un problema, surge la cuestin C) de si lo resuelve
realmente. Normalmente los programadores prueban sus programas sobre una gran cantidad de
datos de entrada para descubrir la mayoria de los errores lgicos presentes, aunque con este
mtodo (al que suele denominarse de prueba y depuracin) no se puede estar completamente seguro de que el programa no contiene errores. Necesitaramos para realizar la verificacin
formal, reglas que describan de forma precisa el efecto que cada instruccin tiene en el estado
actual del programa, para, aplicando dichas reglas demostrar rigurosamente que lo que hace el
programa coincide con sus especificaciones. En cualquier caso y cuando la prueba formal resulte
muy complicada, podemos aumentar la confianza en nuestro programa realizando en el mismo
los "testuidadosos de que hablbamos al principio.
14
Modelos de Computacin I
Cap. 1
Introduccin
15
perfil de la plaza no se ocupa directamente de este problema que adems se estudia ampliamente
en otras materias y asignaturas del curriculum de Informtica.
16
Modelos de Computacin I
finito.
Rabin y Scott (1960) obtienen un modelo de computador con una cantidad finita de memoria,
al que llamaron autmata de estados finitos. Demostraron que su comportamiento posible, era
bsicamente el mismo que el descrito mediante expresiones regulares, desarrolladas a partir de
los trabajos de McCulloch y Pitts.
No obstante lo dicho, para un alfabeto concreto, no todos los lenguajes que se pueden construir son regulares. Ni siquiera todos los interesantes desde el punto de vista de la construccin
de algortmos para resolver problemas. Hay entonces muchos problemas que no son calculables con estos lenguajes. Esto pone de manifiesto las limitaciones de los autmatas finitos y
las gramticas regulares, y propicia el desarrollo de mquinas reconocedoras de otros tipos de
lenguajes y de las gramticas correspondientes, asociadas a los mismos.
En 1956, la Princenton Univ. Press publica el libro Automata Studies, editado por C. Shannon
y J. McCarthy, donde se recogen una serie de trabajos sobre autmatas y lenguajes formales. D.
A. Huffman (1954) ya utiliza conceptos como estado de un autmata y tabla de transiciones.
N. Chomsky (1956) propone tres modelos para la descripcin de lenguajes, que son la base
de su futura jerarqua de los tipos de lenguajes, que ayud tambin en el desarrollo de los lenguajes de programacin. Para ello intent utilizar autmatas para extraer estructuras sintcticas (...
el ingls no es un lenguaje de estados finitos) y dirige sus estudios a las gramticas, indicando
que la diferencia esencial entre autmatas y gramticas es que la lgica asociada a los autmatas
(p.e., para ver la equivalencia entre dos de ellos) es Decidible, mientras que la asociada a las
gramticas no lo es.
Desarrolla el concepto de gramtica libre del contexto, en el transcurso de sus investigaciones
sobre la sintxis de los lenguajes naturales.
Backus y Naur desarrollaron una notacin formal para describir la sintxis de algunos lenguajes de programacin, que bsicamente se sigue utilizando todava, y que poda considerarse
equivalente a las gramticas libres del contexto.
Consideramos entonces los lenguajes libres (independientes) del contexto, y las gramticas
libres del contexto y los autmatas con pila, como forma de caracterizarlos y manejarlos. Los
distintos lenguajes formales que se pueden construir sobre un alfabeto concreto pueden clasificarse en clases cada vez ms amplias que incluyen como subconjunto a las anteriores, de acuerdo
con la jerarqua establecida por Chomsky en los aos 50.
Se puede llegar as, de una forma casi natural a considerar las mquinas de Turing, establecidas casi 20 aos antes, como mquinas reconocedoras de los lenguajes formales dependientes
del contexto o estructurados por frases, e incluso a interpretar la Tesis de Turing como que n
sistema computacional nunca podr efectuar un anlisis sintctico de aquellos lenguajes que
estn por encima de los lenguajes estructurados por frases, segn la jerarqua de Chomsky".
En consecuencia, podemos utilizar la teora de autmatas y los conceptos relativos a gramticas sobre distintos tipos de lenguajes, para decidir (si se puede) si una funcin (o problema)
es calculable, en base a que podamos construir un algoritmo solucin mediante un lenguaje que
Cap. 1
Introduccin
17
18
Modelos de Computacin I
Cap. 1
Introduccin
19
1.3.2. Lenguajes
Definicin 8 Un lenguaje sobre el alfabeto A es un subconjunto del conjunto de las cadenas
sobre A: L A .
Los lenguajes los notaremos con las letras intermedias del alfabeto latino en maysculas.
Ejemplo 2 Los siguientes son lenguajes sobre un alfabeto A, cuyo contenido asumimos conocer
claramente:
L1 = {a, b, }, smbolos a, b y la cadena vaca
L2 = {ai bi | i = 0, 1, 2, . . .}, palabras formadas de una sucesin de smbolos a, seguida de
la misma cantidad de smbolos b.
L3 = {uu1 | u A }, palabras formadas con smbolos del alfabeto A y que consisten de
una palabra, seguida de la misma palabra escrita en orden inverso.
20
Modelos de Computacin I
2
L4 = {an | n = 1, 2, 3, . . .}, palabras que tienen un nmero de smbolos a que sea cuadrado
perfecto, pero nunca nulo.
Aparte de las operaciones de unin e interseccin de lenguajes, dada su condicin de conjuntos existe la operacin de concatenacin.
Definicin 9 If L1 , L2 son dos lenguajes sobre el alfabeto A, la concatenacin de estos dos
lenguajes es el que se obtiene de acuerdo con la siguiente expresin,
L1 L2 = {u1 u2 | u1 L1 , u2 L2 }
Ejemplo 3 Si L1 = {0i 1i : i 0},
L2 = {1i 0i : i 0} entonces,
L1 L2 = {0i 1i 1 j 0 j : i, j 0}
Propiedades:
/ = 0/ (0/ es el Lenguaje que contiene 0 palabras)
L0/ = 0L
Elemento Neutro.- {}L = L{} = L
Asociativa.- L1 (L2 L3 ) = (L1 L2 )L3
La iteracin de lenguajes se define como en las palabras, de forma recursiva:
Definicin 10 Si L es un lenguaje sobre el alfabeto A, entonces la iteracin de este lenguaje se
define de acuerdo con las siguientes expresiones recursivas,
L0 = {}
Li+1 = Li L
Definicin 11 Si L es un lenguaje sobre el alfabeto A, la clausura de Kleene de L es el lenguaje
obtenido de acuerdo con la siguiente expresin:
L =
Li
i0
i1
Li
Cap. 1
Introduccin
21
Propiedades:
L+ = L si L
L+ = L {} si 6 L
Ejemplo 4 Si L = {0, 01}, entonces, L = Conjunto de palabras sobre {0, 1} en las que un uno
va siempre precedido de un cero.
Por otra parte, L+ = Conjunto de palabras sobre {0, 1} en las que un uno va siempre precedido de un cero y distintas de la palabra vaca.
Definicin 13 Si L es un lenguaje, el lenguaje inverso de L es el lenguaje dado por:
L1 = {u | u1 L}
Definicin 14 Si L es un lenguaje sobre el alfabeto A, entonces la cabecera de L es el lenguaje
dado por
CAB(L) = {u | u A y v A tal que uv L}
Es decir, la CAB(L) contiene todas las palabras del lenguaje y aquellas otras que tengan
como primeros caracteres, alguna palabra del mismo.
Ejemplo 5 Si L = {0i 1i : i 0}, entonces CAB(L) = {0i 1 j : i j 0} .
Definicin 15 Si A1 y A2 son dos alfabetos, una aplicacin
h : A1 A2
se dice que es un homomorfismo si y solo si
h(uv) = h(u)h(v)
Consecuencias:
h() =
h(a1 . . . an ) = h(a1 ) . . . h(an )
Ejemplo 6 Si A1 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, A2 = {0, 1}
la siguiente aplicacin es un homorfismo
22
Modelos de Computacin I
h(0) = 0000,
h(4) = 0100,
h(8) = 1000
h(1) = 0001,
h(5) = 0101,
h(9) = 1001
h(2) = 0010,
h(6) = 0110,
h(3) = 0011
h(7) = 0111
Ejemplo 7
Si A es un afabeto, la aplicacin que transforma cada palabra u A en su
inversa no es un homomorfismo de A en A , ya que la transformacin no se hace smbolo
a smbolo.
La transformacin que a cada palabra sobre {0, 1} le aade 00 al principio y 11 al
final no es un homomorfismo. Si 0 se transforma en 00011, entonces 00 se debera de
transformar en 0001100011 si fuese un homomorfismo, y en realidad se transforma en
000011.
Cap. 1
Introduccin
23
E = (E E) + (E E)
.
Definicin 19 Se llama lenguaje generado por una gramtica G = (V, T, P, S) al conjunto de
cadenas formadas por smbolos terminales y que son derivables a partir del smbolo de partida.
Es decir,
L(G) = {u T | S = u}
24
Modelos de Computacin I
Ejemplo 11 En el caso de la gramtica de los ejemplos anteriores (E E) + (E E) no pertenece al lenguaje generado por G, ya que hay smbolos que no son terminales. Sin embargo,
(a + c) (a + b) si pertenece a L(G), ya que se puede comprobar que es derivable a partir de E
(smbolo de partida) y solo tiene smbolos terminales.
Si en una gramtica comenzamos a hacer derivaciones a partir del smbolo original S, dicha
derivacin acabar cuando solo queden smbolos terminales, en cuyo caso la palabra resultante
pertenece a L(G), o cuando queden variables pero no se pueda aplicar ninguna regla de produccin, en cuyo caso dicha derivacin no puede llevar a ninguna palabra de L(G). En general,
cuando estemos haciendo una derivacin puede haber ms de una regla de produccin aplicable
en cada momento.
Cuando no sea importante distinguir si la derivacin de una palabra en una gramtica se
haya realizado en uno o varios pasos, entonces eliminaremos la del smbolo de derivacin.
S bA,
B b,
A a,
B bS,
A aS,
B aBB
y el smbolo de partida es S.
Esta gramtica genera el lenguaje
L(G) = {u | u {a, b}+ y Na (u) = Nb (u)}
donde Na (u) y Nb (u) son el nmero de apariciones de smbolos a y b, en u, respectivamente.
Esto es fcil de ver interpretando que,
S genera (o produce) palabras con igual nmero de a que de b.
A genera palabras con una a de ms.
B produce palabras con una b de ms.
S genera palabras con igual nmero de a que de b.
Hay que demostrar que todas las palabras del lenguaje tienen el mismo nmero de a que
de b, hay que probar que todas las palabras generadas cumplen esta condicin y que todas las
palabras que cumplen esta condicin son generadas.
Para lo primero basta con considerar el siguiente razonamiento. Supongamos Na+A () y
Nb+B () que son el nmero de a + el nmero de A en y el nmero de b + el nmero de B en
, respectivamente. Entonces,
Cap. 1
Introduccin
25
26
Modelos de Computacin I
Las condiciones que garantizan que todas las palabras son generadas mediante este algoritmo son las siguientes:
Las palabras generadas tienen primero smbolos terminales y despus variables.
Se genera un smbolo de la palabra en cada paso de derivacin
Las variables que aparecen en la palabra pueden ser:
Una cadena de A (si hemos generado ms b que a)
Una cadena de B (si hemos generado ms a que b)
Una S si hemos generado las mismas a que b
Antes de generar el ltimo smbolo tendremos como variables:
Una A si tenemos que generar a
Una B si tenemos que generar b
Entonces aplicamos la primera opcin para generar los smbolos y la palabra queda
generada.
Ejemplo 13 Sea G = ({S, X ,Y }, {a, b, c}, P, S) donde P tiene las reglas,
S abc
bY Y b
S aX bc
aY aaX
X b bX
aY aa
X c Y bcc
Cap. 1
Introduccin
27
28
Modelos de Computacin I
L3 L2 L1 L0
Cap. 1
Introduccin
29
1. h(Ai ) = ai , i = 1, . . ., k
2. h(x) = x, x V T
Ahora se puede demostrar que este homorfismo transforma las reglas: si P 0 , entonces h() h() es una produccin de P h() = h().
Partiendo de esto se puede demostrar que si = entonces h() = h(). En particular,
como consecuencia, si S = u, u T , entonces h(S) = S = h(u) = u. Es decir, si u L(G0 )
entonces u L(G). Con lo que definitivamente L(G) = L(G0 ).
Ejercicios
1. Demostrar que la gramtica
G = ({S}, {a, b}, {S , S aSb}, S)
genera el lenguaje
L = {ai bi | i = 0, 1, 2}
Solucin:
Si seguimos este procedimiento, nos encontramos que podemos ir generando todas las
palabras de la forma ai bi , y siempre nos queda la palabra ai Sbi para seguir generando
las palabras de mayor longitud.
Por otra parte, estas son las nicas palabras que se pueden generar.
2. Encontrar el lenguaje generado por la gramtica G = ({A, B, S}, {a, b}, P, S) donde P
contiene las siguientes producciones
S aAB
Aa SaB
bB a
B SA
Ab SBb
B ab
Solucin:
El resultado es el Lenguaje vaco: nunca se puede llegar a generar una palabra con
smbolos terminales. Siempre que se sustituye S aparece A, y siempre que se sustituye A
aparece S.
30
Modelos de Computacin I
3. Encontrar una gramtica libre del contexto para generar cada uno de los siguientes lenguajes
a) L = {ai b j | i, j IN , i j}
Solucin:
S aSb
S
S Sb
b) L = {ai b j a j bi | i, j IN }
Solucin:
S aSb
S B,
B bBa,
c) L = {ai bi a j b j | i, j IN }
Solucin:
Podemos generar {ai bi | i IN } con:
S1 aS1 b,
S1
Cap. 1
Introduccin
31
d) L = {ai bi | i IN } {bi ai | i IN }
Solucin:
Podemos generar {ai bi | i IN } con:
S1 aS1 b,
S1
S2 bS2 a,
S2
y {bi ai | i IN } con
El lenguaje L se puede generar aadiendo:
S S1 ,
S S2
S bSb,
f) L = {ai b j ci+ j | i, j IN }
Solucin:
S aSc,
S B,
B bBc,
A Ab
Bd
Aa
32
Modelos de Computacin I
genera un lenguaje de tipo 3.
Solucin:
Esta gramtica genera el lenguaje: {abi c j d : i, j IN }, y este lenguaje se puede generar
mediante la gramtica:
S aB,
B bB,
B C,
C cC,
Cd
Captulo 2
Autmatas Finitos, Expresiones Regulares
y Gramticas de tipo 3
33
34
Modelos de Computacin I
Los autmatas finitos son capaces de reconocer solamente, un determinado tipo de lenguajes, llamados Lenguajes Regulares, que pueden ser caracterizados tambin, mediante un tipo de
gramticas llamadas tambin regulares. Una forma adicional de caracterizar los lenguajes regulares, es mediante las llamadas expresiones regulares, que son las frases del lenguaje, construidas
mediante operadores sobre el alfabeto del mismo y otras expresiones regulares, incluyendo el
lenguaje vaco.
Estas caracterizaciones de los lenguajes regulares se utilizan en la prctica, segn que la
situacin concreta est favorecida por la forma de describir el lenguaje de cada una de ellas. Los
autmatas finitos se utilizan generalmente para verificar que las cadenas pertenecen al lenguaje,
y como un analizador en la traduccin de algortmos al ordenador.
Las gramticas y sus reglas de produccin se usan frecuentemente en la descripcin de la
sintaxis de los lenguajes de programacin que se suele incluir en los manuales correspondientes.
Por otro lado, las expresiones regulares proporcionan una forma concisa y relativamente sencilla
(aunque menos intuitiva) para describir los lenguajes regulares, poniendo de manifiesto algunos
detalles de su estructura que no quedan tan claros en las otras caracterizaciones. Su uso es
habitual en editores de texto, para bsqueda y sustitucin de cadenas.
En definitiva, las caracterizaciones sealadas de los lenguajes (formales) regulares, y por
tanto ellos mismos, tienen un uso habitual en la computacin prctica actual. Esto por s mismo
justificara su inclusin en un curriculum de computacin terica.
Cap. 2
Sept1.
Inicio
Febr.
Fin2
Dec1
A
N
35
Fin1
N
Dec2
Sept2.
Dec3
N
P
Dic.
Fin3
36
Modelos de Computacin I
1 0 0
q0
q1
Cap. 2
37
a
a
q0
q1
b
b
q2
(q0 , b) = q2
(q1 , b) = q2
(q2 , b) = q0
F = {q1 }
El diagrama de transicin viene expresado en la Figura 2.3.
38
Modelos de Computacin I
Intuitivamente, la configuracin inicial indica que estamos en el estado inicial y nos queda
por leer toda la palabra u.
A continuacin definimos la relacin paso de clculo entre dos configuraciones.
Definicin 27 Si M = (Q, A, , q0 , F) es una autmata finito determinista y (p, u), (q, v) son dos
configuraciones, decimos que se puede pasar de (p, u) a (q, v) en un paso de clculo, lo que se
nota como (p, u) ` (q, v) si y slo si u = av, donde a A y (p, a) = q.
Finalmente, definimos la relacin de clculo entre dos configuraciones.
Definicin 28 Si M = (Q, A, , q0 , F) es una autmata finito determinista y (p, u), (q, v) son
dos configuraciones, decimos que puede pasar de (p, u) a (q, v) en una secuencia de clcu
lo, lo que se nota como (p, u) ` (q, v) si y solo si existe una sucesin de configuraciones:
(p0 , u0 ), . . . (pn , un ) donde n 1, de tal forma que (p0 , u0 ) = (p, u), (pn , un ) = (q, v) y (pi , ui ) `
(pi+1 , ui+1 ), i < n.
Existe otro enfoque alternativo para definir formalmente el clculo asociado a un autmata
de estado finito y consiste en definir la funcin de transicin de un autmata aplicada a una
palabra. Esta funcin que llamaremos 0 se define de forma recursiva
Definicin 29 Si M = (Q, A, , q0 , F) es un autmata de estado finito se define la funcin de
transicin asociada a palabras, como la funcin
0 : Q A Q
dada por
0 (q, ) = q
0 (q, aw) = 0 ((q, a), w),
w A , a A
Cap. 2
39
q1
1
Figura 2.4: Autmata que acepta el lenguaje de palabras con un nmero impar de unos
y solo si existe un q F tal que (q0 , u) ` (q, ). En caso contrario, se dice que la palabra es
rechazada por el autmata.
Es decir, una palabra es aceptada por un autmata si comenzando a calcular en el estado q 0
y leyendo los distintos smbolos de la palabra llega a un estado final.
En el caso del autmata del ejemplo 15, la palabra aba es aceptada por el autmata. La
palabra aab es rechazada.
Definicin 31 Dado un autmata M = (Q, A, , q0 , F) se llama lenguaje aceptado o reconocido
por dicho autmata al conjunto de las palabras de A que acepta:
40
Modelos de Computacin I
E, +,
q2
0, . . . , 9
q0
q8
0, . . . , 9
0, . . . , 9
0, . . . , 9
E, +, , .
0, . . . , 9
q4
E, +, , .
+,
q5
0, . . . , 9
q3
0, . . . , 9
+, , .
q7
0, . . . , 9
+,
E, +, , .
q1
E, +, , .
q6
E, .
E, .
Cap. 2
41
RF
B
B, D, Z, H
E
B, D, Z, H, S
S, Z, D
B, H, S
RD
D
42
Modelos de Computacin I
Cap. 2
Si P Q y u A, (P, a) =
43
(q, a)
qP
Esta funcin se puede extender para aplicarse tambin a palabras de la siguiente forma:
Si B Q,
(B, ) = B
(B, au) = ( (B, a), u)
se puede aplicar tambin a un slo estado de acuerdo con la siguiente expresin: (q, u) =
({q}, u)
Con estos elementos podemos definir cuando una palabra es aceptada por un autmata nodeterminstico.
Definicin 33 Sea M = (Q, A, , q0 , F) un autmata finito no-determinstico y u A . Se dice
que la palabra u es aceptada por M si y solo si 0 (q0 , u) F 6= 0/ .
Definicin 34 Sea M = (Q, A, , q0 , F) un AFND, se llama lenguaje aceptado por el autmata
al conjunto de palabras de A que acepta, es decir
/
L(M) = {u A | 0 (q0 , u) F 6= 0}
Cuando no haya lugar a confusin, ser representadas como , simplemente.
En clase, el lenguaje aceptado por un autmata no determinista se ha definido de forma distinta, pero ambas definiciones son totalmente equivalentes. Se define en funcin de la definicin
de la relacin de proceso de clculo entre dos configuraciones que, anlogamente como se hizo
con los autmatas deterministas, se basa en definir los siguientes elementos:
Descripcin Instantnea o Configuracin:
Un elemento de Q A : (q, u).
Configuracin Inicial para u A : (q0 , u)
Relacin paso de clculo entre dos configuraciones:
((q, au) ` (p, v)) p (q, a))
Aqu, al contrario de lo que ocurra en los autmatas deterministas, desdee una configuracin se puede pasar a varias configuraciones distintas en un paso de clculo, e incluso a
ninguna.
44
Modelos de Computacin I
r0
r1
r2
r0
r1
b, c
r3
r2
a, b, c
a, b, c
((q, u) ` (p, v)) si y solo si existe una sucesin de configuraciones C0 , . . . ,Cn tales que
C0 = (q, u),Cn = (p, v) y i n 1,Ci ` Ci+1 .
Finalmente, el lenguaje aceptado por un AF no-determinista es
2.2.1.
Diagramas de Transicin
Los diagramas de transicin de los AFND son totalmente anlogos a los de los autmatas
determinsticos. Solo que ahora no tiene que salir de cada vrtice un y solo un arco para cada
smbolo del alfabeto de entrada. En un autmata no determinstico, de un vrtice pueden salir
ninguna, una o varias flechas con la misma etiqueta.
Ejemplo 20 Un AFND que acepta el lenguaje
L = {u {a, b, c} | u = abi c, i 0}
es el de la Figura 2.7.
Este es un autmata no-determinista ya que hay transiciones no definidas.
Cap. 2
45
0, 1
0, 1
q0
q1
q2
q3
q4
q5
q6
46
Modelos de Computacin I
q2
0, . . . , 9
0, . . . , 9
q0
0, . . . , 9
0, . . . , 9
q8
q5
0, . . . , 9
q3
0, . . . , 9
0, . . . , 9
q4
0, . . . , 9
+,
+,
q1
q6
Es decir, que el conjunto de estados en los que puede estar el autmata no determinista
coincide con el estado en el que est el autmata determinista que hemos construido. Ambos
aceptan una palabra si al final de su lectura uno de estos estados es final.
Cap. 2
0, 1
0, 1
0
q0
q1
1
0
{q0 }
q2
q3
q4
{q0 , q1 }
{q0 , q2 }
{q0 , q1 , q6 }
0
{q0 , q6 }
1
0
0 1
{q0 , q2 , q5 }
0
0
1
1
0
{q0 , q1 , q4 , q6 }
1
{q0 , q2 , q5 , q6 }
q5
47
q6
{q0 , q1 , q3 }
0
{q0 , q1 , q4 }
{q0 , q1 , q3 , q6 }
0 1
{q0 , q2 , q6 }
48
Modelos de Computacin I
El teorema inverso es evidente: dado un autmata determinstico M = (Q, A, , q 0 , F) pode q0 , F) que acepta el mismo lenguaje. Solo hay
mos construir uno no-determinista M = (Q, A, ,
0 , a) = {(q0 , a)}: En cada situacin solo hay un camino posible, el dado
que considerar que (q
por .
2.3.
Son autmatas que pueden relizar una transicin sin consumir entrada. Estas transiciones se
etiquetan con en el diagrama asociado.
En la definicin, lo nico que hay que cambiar es la funcin de transicin que ahora est definida de Q (A {}) en P (Q).
Las transiciones nulas dan una nueva capacidad al autmata. Si se tiene una transicin nula,
el autmata puede quedarse donde est o cambiar de estado sin consumir ningn smbolo de la
palabra de entrada. Como en los AFND, una palabra ser aceptada si se llega a un estado final
con alguna de las elecciones posibles.
Ejemplo 24 El autmata siguiente acepta las palabras que son una sucesin de ceros, seguida
de una sucesin de 1, seguida de una sucesin de 2.
0
q0
q1
q2
a,
c,
q1
b
q2
q3
el lenguaje
{b2 i : i
0} {ab2 i : i
0} {b2 ic : i
0} {ab2 ic : i
acepta
0}
Definicin 36 Se llama clausura de un estado al conjunto de estados a los que puede evolucionar sin consumir ninguna entrada,
CL(p) = {q Q : q1 , . . . , qk tal que p = q1 , q = qk , qi (qi1 , ), i 2}
Cap. 2
49
CL(p)
pP
(q, u)
qR
0 (r, u)
r(CL(q),a)
0 (q, u)
qR
Notemos que 0 (q, a) no es lo mismo que (q, a) por lo que distinguiremos entre las dos
funciones.
Una palabra, u A , se dice aceptada por un AFND con transiciones nulas M = (Q, A, , q 0 , F)
si y solo si
0 (q, u) F 6= 0/
El lenguaje aceptado por el autmata, L(M), es el conjunto de palabras de A que acepta.
Las transiciones nulas son muy tiles para modificar autmatas o para construir autmatas mas
complejos partiendo de varios autmatas.
50
Modelos de Computacin I
Ejemplo 27 Los siguientes dos autmatas aceptan las palabras que contienen en su interior la
subcadena 0110 y 1000 respectivamente
0,1
0,1
q0 0
q1
q2
q3
q4
0,1
0,1
p0 1
p1
p2
p3
p4
Para construir un autmata que acepte las palabras aceptadas por uno cualquiera de estos
dos autmatas, es decir, las palabras con una subcadena 0110 una subcadena 1000 se pone
un nuevo estado inicial que se une con los antiguos mediante transiciones nulas.
r0
0, 1
q0 0
0, 1
p0 1
0, 1
1
q1
q2
q3
q4
0, 1
p1
p2
p3
p4
Ejemplo 28 Consideremos el siguiente autmata que acepta las palabras del alfabeto {a, b, c}
que tienen una sola b y sta va seguida de una c.
a,c
b
q
q
0
c
q2
a,c
Si L es el lenguaje que acepta el autmata anterior modifiqumoslo para que acepte cualquier sucesin no nula de palabras de L: cualquier palabra de L + . Para ello se unen los estados
finales del autmata con el estado inicial mediante una transicin nula:
Cap. 2
51
a, c
q0
q1
c
q2
a, c
Las transiciones nulas, como vemos dan ms capacidad de expresividad a los autmatas, pero
el conjunto de lenguajes aceptados es el mismo que para los autmatas finitos determinsticos,
como queda expresado en el siguiente teorema.
Teorema 3 Para todo autmata AFND con transiciones nulas existe un autmata finito determinstico que acepta el mismo lenguaje.
Demostracin.- Si M = (Q, A, , q0 , F) es un AFND con transiciones nulas, basta construir un
AFND sin transiciones nulas M = (Q, A, , q0 , F). A partir de ste se puede construir uno determinstico.
El autmata M se define de la siguiente forma
F=
F
F {q0 }
if CL(q0 ) F = 0/
en caso contrario
(q, a) = 0 (q, a)
(2.1)
(2.2)
(q, u) = 0 (q, u) si u 6=
(2.3)
Ejemplo 29 El AFND correspondiente al autmata con transiciones nulas del ejemplo 19,
acepta el mismo lenguaje que el siguiente autmata determinista:
52
Modelos de Computacin I
0
{q0 , q1 , q2 }
2
1
1
2
0, 1
{q2 }
{q1 , q2 }
0
0/
0, 1, 2
Cap. 2
53
Concatenacin
Unin
Ejemplo 30 Si A = {a, b, c}
(a + )b es una expresin regular que denotal el lenguaje {ai b j : i = 0, 1; j 0}
Si A = {0, 1}
00 es una expresin regular con lenguaje asociado {00}.
01 + 0 es una expresin regular que denota el lenguaje {01 i : i 0}.
(1 + 10) representa el lenguaje de las cadenas que comienzan por 1 y no tienen dos ceros
consecutivos.
(0 + 1) 011 representa el lenguaje de las cadenas que terminan en 011.
0 1 representa el lenguaje de las cadenas que no tienen un 1 antes de un 0
00 11 representa un subconjunto del lenguaje anterior formado por cadenas que al menos tienen un 1 y un 0. Si la expresin regular rr se representa como r + , 00 11 se puede
reprensentar como 0+ 1+ .
54
Modelos de Computacin I
9. (r1 + r2 )r3 = r1 r3 + r2 r3
10. r+ + = r
11. r + = r
12. (r + ) = r
13. (r + )+ = r
14. r1 + r2 = (r1 + r2 )
15.
r1 r2
= (r1 + r2 )
q1
Cap. 2
55
Ahora veremos como se pueden construir autmatas para las expresiones regulares compuestas a partir de los autmatas que aceptan cada una de sus componentes.
Si M1 es el autmata que acepta el mismo lenguaje que el representado por r 1 y M2 el que
acepta el mismo lenguaje que el de r2 , entonces
q0
M1
q01
qi1
q12
M2
q02
q j2
q11
q01
q12
q02
q j2
qi1
M1
El autmata para
r1
es
M2
56
Modelos de Computacin I
q11
q0
q01
qi1
M1
Se puede comprobar que efectivamente estos autmatas verifican las condiciones pedidas y
que el procedimiento de construccin siempre acaba.
q2
Autmatas correspondientes a 1 y 0
q1
q2
q3
q4
El autmata asociado a 10 es
q1
q2
q3
Autmatas asociado a 10 y 0
q4
Cap. 2
q5
q1
q2
q6
q3
q4
Autmata asociado a 10 + 0
0
q5
q6
q7
q1
q2
q3
q4
q8
q5
q6
q7
q1
q2
q3
q4
57
58
Modelos de Computacin I
q8
q5
q6
q7
q9
q1
q2
q3
q10
q11
q12
q13
q14
q4
q8
q5
q6
q7
q9
q1
q2
q3
q10
q11
q12
q13
q14
q4
Teorema 5 Si L es aceptado por un autmata finito determinstico, entonces puede venir expresado mediante una expresin regular.
Demostracin.Sea el autmata M = (Q, A, , q1 , F) donde Q = {q1 , . . . , qn } y q1 es el estado inicial.
Sea Rkij el conjunto de las cadenas de A que premiten pasar del estado qi al estado q j y
no pasa por ningn estado intermedio de numeracin mayor que k (q i y q j si pueden tener
numeracin mayor que k).
Rkij se puede definir de forma recursiva:
{a : (qi , a) = q j }
si i 6= j
0
Ri j =
{a : (qi , a) = qi } {} si i = j
Para k 1, tenemos la siguiente ecuacin:
k1
k1
k1
k1
Rkij = Ri(k1)
(R(k1)(k1)
) R(k1)
j Ri j
Cap. 2
59
Vamos a demostrar que para todos los lenguajes Rkij existe una expresin regular rkij que lo
representa. Lo vamos a demostrar por induccin sobre k.
Para k = 0 es inmediato. La expresin regular rkij puede escribirse como
a1 + . . . + a l
a1 + . . . + a l +
si i 6= j
si i = j
donde {a1 , . . ., al } es el conjunto {a : (qi , a) = q j }. Si este conjunto es vaco la expresin regular sera:
0/
si i 6= j
si i = j
k1
= Ri(k1)
k1
R(k1)(k1)
k1
k1
R(k1)
j Ri j
k1
Por la hiptesis de induccin, existen expresiones regulares para los lenguajes R lm
, que se
k1
k1
denotan como rlm De aqu se deduce que una expresin regular para Rk j viene dada por
k1
k1
k1
ri(k1)
(r(k1)(k1)
) r(k1)j
+ rijk1
con lo que concluye la demostracin de que existen expresiones regulares para los lenguajes Rkij . Adems esta demostracin nos proporciona un mtodo recursivo para calcular estas
expresiones regulares.
Finalmente, para demostrar que el lenguaje aceptado por el autmata puede venir expresado
mediante una expresin regular, solo hay que observar que
L(M) =
q j F
Rn1 j
Por tanto, L(M) viene denotado por la expresin regular rj1 + . . . + rjk donde F = {q j1 , . . ., q jk }.
Ejemplo 32 Sea el Autmata Finito Determinstico de la Figura 32. Vamos a construir la expresin regular que representa el lenguaje aceptado por este autmata.
60
Modelos de Computacin I
1
q1
0
0
q2
q3
0, 1
1 = r0 + r0 (r0 ) r0 = + () =
r11
11
11 11
11
1 = r0 + r0 (r0 ) r0 = 0 + () 0 = 0
r12
12
11 11
12
1 = r0 + r0 (r0 ) r0 = 1 + () 1 = 1
r13
13
11 11
13
1 = r0 + r0 (r0 ) r0 = 0 + 0() = 0
r21
21
21 11
11
1 = r0 + r0 (r0 ) r0 = + 0() 0 = + 00
r22
22
21 11
12
1 = r0 + r0 (r0 ) r0 = 1 + 0() 1 = 1 + 01
r23
23
21 11
13
1 = r0 + r0 (r0 ) r0 = 0
/ + 0()
/ = 0/
r31
31
31 11
11
1 = r0 + r0 (r0 ) r0 = 0 + 1 + 0()
/ 0 = 0 + 1
r32
32
31 11
12
1 = r0 + r0 (r0 ) r0 = + 0()
/ 1 =
r33
33
31 11
13
3
3
2
2
2 2
2
2
2 2
r12
+ r13
= r12
+ r13
(r33
) r32 + r13
+ r13
(r33
) r33 =
Cap. 2
61
62
Modelos de Computacin I
Teorema 6 Si L es un lenguaje generado por una gramtica regular, entonces existe un autmata finito determinstico que lo reconoce.
Demostracin.- Supongamos que L es un lenguaje generado por la gramtica G = (V, T, P, S)
que es lineal por la derecha. Vamos a construir un AFND con movimientos nulos que acepta L.
Este autmata ser M = (Q, T, , q, F) donde
Q = {[] : ( = S) (A V, u T, tales que A u P)}
q0 = [S]
F = {[]}
viene definida por
Si A es una variable
([A], ) = {[] : (A ) P}
Si a T y (T V ), entonces
([a], a) = []
La aceptacin de una palabra en este autmata simula la aplicacin de reglas de derivacin
en la gramtica original. La demostracin formal de que esto es as no la vamos a considerar.
En el caso de una gramtica lineal por la izquierda, G = (V, T, P, S), consideraremos la gramtica G0 = (V, T, P0, S) donde P0 = {A : A P}. Es decir que invertimos la parte
derecha de las producciones. La gramtica resultante G0 es lineal por la derecha y el lenguaje
que genera es L(G0 ) = L(G)1 .
Ahora, podemos construr un autmata que acepte el lenguaje L(G 0 ), siguiendo el procedimiento anterior. El autmata no determinstico correspondiente se puede transformar en uno
equivalente con un solo estado final. Para ello basta con aadir un nuevo estado final, pasar a
no-finales los estados finales originales y unir estos mediante una transicin nula con el nuevo
estado final.
El siguiente paso es invertir el autmata ya con un solo estado final, para que pase de aceptar
el lenguaje L(G0 ) = L(G)1 al lenguaje L(G0 )1 = L(G) . Para ello los pasos son:
Invertir las transiciones
Intercambiar el estado inicial y el final.
A partir de este autmata se podra construir un autmata determinstico, con lo que termina la
demostracin.
Cap. 2
63
[S]
[0A]
1
[A]
[10A]
[]
Ejemplo 35 La gramtica lineal por la izquierda que genera el lenguaje 0(01) tiene las siguientes producciones
S S10
S0
Para construir un AFND con transiciones nulas qque acepte este lenguaje se dan los siguientes pasos:
1. Invertir la parte derecha de las producciones
S 01S
S0
2. Construir el AFND con transiciones nulas asociado
[S]
[0]
[]
1
[1S]
[01S]
1
[1S]
[0]
[01S]
[]
64
Modelos de Computacin I
p aq,
p ,
si p F
Para el caso de una gramtica lineal por la izquierda, invertimos el autmata, construmos la
gramtica lineal por la derecha asociada e invertimos la parte derecha de las producciones.
q0
1
q1
1
0, 1
q2
La gramtica lineal por la derecha es (variable inicial q0 ):
q0 0q1 ,
q0 1q2 ,
q2 0q0 ,
q1 0q2 ,
q1 1q2
q2
q2 1q1 ,
Si lo que queremos es una gramtica lineal por la izquierda, entonces invertimos el autmata:
0
q0
1
q1
1
0, 1
q0
q2
La gramtica asociada es (variable inicial q2 ):
q1
1
0, 1
q2
Cap. 2
q1 0q0 ,
q2 1q0 ,
q0 0q2 ,
q2 0q1 ,
q1 1q2 ,
65
q2 1q1
q0
Invertimos la parte derecha de las producciones, para obtener la gramtica lineal por la
izquierda asociada:
q1 q0 0,
q2 q0 1,
q0 q2 0,
q2 q1 0,
q1 q2 1,
q2 q1 1
q0
66
Modelos de Computacin I
1
2
(0, 0)
q2
(R, R, R,V )
q3
(V, R, A, R)
q5
(R, R, R, A)
A
q6
(V, A, R, R)
(0, 0)
(0, 1)
q7
(A, A, R, R)
Cap. 2
67
68
Modelos de Computacin I
0/0 1/0
q0
q1
1/1
0/1
0/0
q2
1/1
0/0
1/0
1/1
q0
0/1
q1
Cap. 2
69
Teorema 9 Dada una mquina de Mealy, existe una mquina de Moore equivalente
Demostracin.- Sea M = (Q, A, B, , , q0) una mquina de Mealy.
La mquina de Moore ser: M = (Q0 , A, B, 0, 0 , q00 ) donde
Q0 = Q B
0 ((q, b), a) = ((q, a), (q, a))
0 (q, b) = b
q00 = (q0 , b), donde b B, cualquiera.
Ejemplo 40 Dada la mquina de Mealy de la figura 2.13, aplicando el procedimiento del teorema anterior, obtenemos la mquina de Moore equivalente de la figura 2.14.
70
Modelos de Computacin I
(q0 , 0)
0
(q1 , 0)
0
(q2 , 0)
0
0
0
1
0
1
0
(q0 , 1)
1
(q1 , 1)
1
(q2 , 1)
1
Captulo 3
Propiedades de los Conjuntos Regulares
71
72
Modelos de Computacin I
Cap. 3
73
74
Modelos de Computacin I
b) Basta considerar i = 2 y
uv2 w = uvvw = 0n v1n y esta no es una palabra de L, ya que si v tiene solo ceros, no
hay el mismo nmero de ceros que de unos, y si v tiene ceros y unos, z tendr unos
antes de algn cero.
Con esto es suficiente para probar que L no es regular. Un resultado mucho mas difcil de
encontrar directamente.
2
Cap. 3
75
76
Modelos de Computacin I
Cap. 3
77
f (1) = 11
78
Modelos de Computacin I
Cap. 3
79
casos, el nmero de palabras que hay que comprobar es finito, estos algoritmos siempre paran.
Sin embargo, en general ser n ineficientes.
Existe otro procedimiento ms eficiente para determinar si el lenguaje asociado a un autmata finito determinstico es o no finito. Lo vamos a explicar en funcin del diagrama de transicin
asociado. Consiste en eliminar previamente todos los estados que son inaccesibles desde el estado inicial (un estado es inaccesible desde el estado inicial si no existe un camino dirigido entre
el estado inicial y dicho estado). Despus de eliminar los estado inaccesibles se obtiene un autmata finito determinstico que acepta el mismo lenguaje que el inicial. Si en dicho autmata
queda algn estado final, el lenguaje aceptado por el autmata no es vaco. Es vaco si no queda
ningn estado final.
Para comprobar si es o no finito, se eliminan adems los estados desde los que no se puede
acceder a un estado final y las transiciones asociadas. Se obtiene as un autmata finito que
puede ser no determinstico y que acepta el mismo lenguaje que el original. El lenguaje aceptado
ser infinito si y solo si existe un ciclo en el diagrama de transicin del nuevo autmata.
Teorema 11 Existe un algoritmo para determinar si dos autmatas finitos determinsticos aceptan el mismo lenguaje.
Demostracin.Sean M1 y M2 dos autmatas finitos determinsticos. Entonces de forma algortmica se puede
construir un autmata, M, que acepte el lenguaje
L(M) = (L(M1 ) L(M2 )) (L(M1 ) L(M2 ))
/ lo cual
Entonces el comprobar si L(M1 ) = L(M2 ) es equivalente a comprobar si L(M) 6= 0,
se puede hacer tambin de forma algortmica.
80
Modelos de Computacin I
1
a
0
0
b
e
1
0
1
001RL 1
01 6 RL 0
11RL 101
Tambin se puede definir una relacin de equivalencia, RM , en A asociada a un autmata
finito determinstico M = (Q, A, , q0 , F) cualquiera de la siguiente forma,
Si u, v A , entonces uRM v si y solo si (0 (q0 , u) = 0 (q0 , v))
Esta relacin de equivalencia divide tambin el lenguaje A en clases de equivalencia.
Ejemplo 48 Consideremos el autmata de la Figura 3.1, que acepta el mismo lenguaje, L, del
ejemplo anterior. Ahora tenemos que
00RM 0000
0010RM 00010
00RM 0000
0010RM 00010
pero RL y RM no son exactamente la misma relacin de equivalencia.
Por ejemplo, 000RL 00 pero 000 6 RM 00.
En general, esto se va a verificar siempre. Si tenemos un lenguaje regular L y un autmata
finito determinstico M que acepta este lenguaje entonces,
uRM v uRL v
Cap. 3
81
pero la implicacin inversa no se va a verificar siempre. Solo, como veremos ms adelante, para
los autmatas minimales.
El ndice (n. de clases de equivalencia) de R ser a lo ms el nmero de estados del autmata
finito que sean accesibles desde el estado inicial. En efecto, si q Q, y este estado es accesible,
entonces definir una clase de equivalencia:
[q] = {x A : 0 (q0 , x) = q}
Esta clase es no vaca ya que x A tal que 0 (q0 , x) = q ( q es accesible desde q0 ).
Definicin 40 Una relacin de equivalencia R en A se dice que es invariante por la derecha
para la concatenacin si y solo si ((uRv) (z A , xzRyz)).
Proposicin 6
(q0 ,x)F
[x]M
82
Modelos de Computacin I
Cap. 3
[]L
0
1
[1]L
83
[11]L
84
Modelos de Computacin I
Por tanto RL tiene menos clases que RM .
El teorema queda demostrado si tenemos en cuenta que:
N. de estados de M N. de clases de RM N. de clases de RL = N. de estados de M 0
El teorema anterior nos permite encontrar el autmata minimal asociado a un lenguaje, partiendo de la relacin de equivalencia de dicho lenguaje. El problema fundamental es que normalmente no tenemos dicha relacin y normalmente no es fcil de calcular. Lo que solemos tener
es un autmata finito determinstico que acepta el lenguaje L y lo que nos interesa es transformarlo en un autmata minimal. Esto se puede hacer de forma algortmica. El procedimiento de
minimizacin est basado en el hecho de que los estados del autmata minimal construdo a
partir de la relacin RL estn formados por uniones de estados de un autmata M cualquiera que
acepte el mismo lenguaje. Los estados que se pueden identificar y unir en un solo estado son los
llamado estados indistinguibles, que se definen a continuacin.
Definicin 42 Si M = (Q, A, , q0 , F) es un autmata finito determinstico y qi , q j son dos estados de Q, se dice que qi y q j son indistinguibles si y solo si u A , 0 (qi , u) F 0 (q j , u) F.
Es decir, es indiferente estar en dos estados indistinguibles para el nico objetivo que nos
interesa: saber si vamos a llegar a un estado final o no.
El siguiente algoritmo identifica las parejas de estados indistinguibles. Supone que no hay
estados inaccesibles.
Para el algoritmo, asociaremos a cada pareja de estados accesibles del autmata una variable
booleana: marcado, y una lista de parejas. Al principio todas las variables booleanas estn a
falso y las listas vacas. Los pasos del algoritmo son como siguen,
1. Eliminar estados inaccesibles.
2. Para cada pareja de estados accesibles {qi , q j }
3. Si uno de ellos es final y el otro no, hacer la variable booleana
asociada igual a true.
4. Para cada pareja de estados accesibles {qi , q j }
5. Para cada smbolo a del alfabeto de entrada
6. Calcular los estados qk y ql a los que evoluciona el
autmata desde qi y q j leyendo a
7. Si qk 6= ql entonces
8. Si la pareja {qk , ql } est marcada entonces se
marca la pareja {qi , q j } y recursivamente se marcan tambin todas
las parejas en la lista asociada.
9. Si la pareja {qk , ql } no est marcada, se aade la pareja
Cap. 3
1
1
85
1
1
86
Modelos de Computacin I
0
0
1
1
1
1
b
c
e
f
g
h
a
Cap. 3
+ ++
+++
++
+
b
c
e
(g,a)
b h,
ae
(h,a)
(g,a)
+
+
+
+
+
(e,a)
(h,e)
+
+
+
+
+
0
1
{a, e}
{b, h}
0
1
87
88
Modelos de Computacin I
Captulo 4
Gramticas Libres de Contexto
89
90
Modelos de Computacin I
S
S
)
Cap. 4
91
S
a
S
A
b
a
a
92
Modelos de Computacin I
S
Cap. 4
93
S
a
94
Modelos de Computacin I
S
A
a
A
a
b
b
B
c
d
d
Cap. 4
95
1. V 0 = 0/
2. Para cada produccin de la forma A w, A se introduce en V 0 .
3. Mientras V 0 cambie
4. Para cada produccin B
5. Si todas las variables de pertenecen a V 0 ,
B se introduce en V 0
6. Eliminar las variables que esten en V y no en V
7. Eliminar todas las producciones donde aparezca una
variable de las eliminadas en el paso anterior
El segundo paso se realiza con el siguiente algoritmo:
V 00 y J son conjuntos de variables. J son las variables por analizar.
T 0 es un conjunto de smbolos terminales
1. J = {S}
V 00 = {S}
T 0 = 0/
2. Mientras J 6= 0/
3. Extraer un elemento de J : A, (J = J {A}).
4. Para cada produccion de la forma A
5.Para cada variable B en
6. Si B no est en V 00 aadir B a J y a V 00
7. Poner todos los simbolos terminales de en T 0
8. Eliminar todas las variables que no esten en V 00
y todos los simbolos terminales que no esten en T 0 .
9. Eliminar todas las producciones donde aparezca
un simbolo o variable de los eliminado
Ejemplo 55 Es importante aplicar los algoritmos anteriores en el orden especificado para que
se garantice que se eliminan todos los smbolos y variables intiles. Como ejemplo de lo anterior, supongamos que tenemos la gramtica dada por
S AB, S a, A a
En el primer algoritmo se elimina B y la produccin S AB.
Entonces en el segundo se elimina la variable A y la produccin A a.
Sin embargo, si aplicamos primero el segundo algoritmo, entonces no se elimina nada. Al
aplicar despues el primero de los algoritmos se elimina B y la produccin S AB. En definitiva,
nos queda la gramtica
96
Modelos de Computacin I
S a, A a
donde todava nos queda la variable intil A.
Ejemplo 56 Eliminar smbolos y producciones intiles de la gramtica
S gAe, S aY B, S cY,
A bBY, A ooC, B dd,
B D, C jV B, C gi,
D n, U kW, V baX X X ,
V oV, W c, X fV, Y Y hm
Primero se aplica el algoritmo primero.
Inicialmente V 0 tiene las variables V 0 = {B, D,C,W }.
En la siguiente iteracin aadimos a V 0 las variables que se alcanzan desde estas: A y W .
0
V queda igual a {B, D,C,W, A,U }.
En la siguiente V 0 = {B, D,C,W, A,U, S}.
En la siguiente V 0 = {B, D,C,W, A,U, S}.
Como V 0 no cambia ya se ha terminado el ciclo. Estas son las variables desde las que se
alcanza una cadena de smbolos terminales. El restos de las variables: X ,Y,V, son intiles y se
pueden eliminar. Tambin se eliminan las producciones asociadas. La gramtica resultante es:
S gAe, A ooC,
B dd, B D, C gi,
D n, U kW, W c
A esta gramtica le aplicamos el segundo algoritmo
J = {S},V 00 = {S}, T 0 = 0/
Tomando S de J y ejecutando las instrucciones del ciclo principal nos queda
J = {A},V 00 = {S, A}, T 0 = {g, e}
Tomando A de J, tenemos
J = {C},V 00 = {S, A,C}, T 0 = {g, e, o}
Sacando C de J, obtenemos
/ 00 = {S, A,C}, T 0 = {g, e, o, i}
J = 0,V
Como J = 0/ se acaba el ciclo. Solo nos queda eliminar las variables intiles: B, D,U,W, los
smbolos terminales intiles: n, k, c, d, y las producciones donde estos aparecen. La gramtica
queda
Cap. 4
97
S gAe, A ooC, C gi
En esta gramtica solo se puede generar una palabra: googige.
Si el lenguaje generado por una gramtica es vaco, esto se detecta en que la variable S
resulta intil en el primer algoritmo. En ese caso se pueden eliminar directamente todas las
producciones, pero no el smbolo S.
Ejemplo 57 eliminar smbolos y producciones intiles de la gramtica
S aSb, S ab, S bcD,
S cSE, E aDb, F abc, E abF
98
Modelos de Computacin I
donde i = i si i 6 H
(i = i ) (i = ) si H
y no todos los i puedan ser nulos al mismo tiempo
S0
Cap. 4
99
100
Modelos de Computacin I
S B,
S C,
C A,
CB
S aA,
S ab,
S bB,
C aA,
S b,
C a,
S abC,
C bB,
Cb
S B,
A ab,
H aHb,
A aHb
B aBa, B b
Las parejas resultantes en el conjunto H son {(S, A), (S, B)}. La gramtica sin producciones
unitarias equivalente es:
A ab,
B b,
A aHb,
S ab,
H ab,
H aHb,
S aHb,
S aBa,
B aBa,
S b.
Cap. 4
101
A bAA | AS | a,
B aBB | bS | b
Para pasarla a forma normal de Chomsky, en el ciclo asociado al paso 1 se aaden las
producciones
Ca a,
Cb b
A Cb AA | AS | Ca ,
B Ca BB | Cb S | Cb b
A Cb D1 | AS | a,
B Ca E1 | Cb S | b,
E1 B,
D1 AA,
Ca a,
Cb b
102
Modelos de Computacin I
a T, V .
V .
Claro est, en una gramtica en forma normal de Chomsky, todas las producciones son de
alguno de estos dos tipos.
En este algoritmo se supone que el conjunto de variables de la gramtica est numerado:
V = {A1 , . . . , Am }.
El algoritmo se basa en dos operaciones bsicas. La primera es eliminar una produccin,
A B de la gramtica G, donde A 6= B. Esto se hace con los siguientes pasos:
1. Eliminar A B
2. Para cada produccion B
3. Aadir A
La idea bsica de esta operacin es la siguiente. Si aplicamos A B, entonces, despus
tenemos que realizar una sustitucin de B, mediante una produccin B . Uniendo las dos
sustituciones, obtenemos A B . Es decir, A se puede sustituir por . Si eliminamos
A B, esta sustitucin ya no se puede hacer, por lo que si no queremos perder la posibilidad
de eliminar ninguna palabra despus de esta eliminacin, tenemos que aadir producciones que
nos permitan hacer esta sustitucin. Por ese motivo aadimos A , que permite realizar los
dos pasos de antes en uno slo.
La otra operacin bsica consiste en eliminar todas las producciones del tipo A A donde
V . Esto se hace siguiendo los siguiente pasos:
1. Aadir una nueva variable BA
2. Para cada produccion A A
3. Aadir BA y BA BA
Cap. 4
4. Eliminar A A
5. Para cada produccion A
6. Aadir A BA
103
no empieza pro A
a T, V .
Ai A j ,
j > i, V .
B j Ai ,
j>i
104
Modelos de Computacin I
Ejemplo 63 Pasar a forma normal de Greibach la gramtica dada por las producciones
A1 A 2 A3 ,
A2 A 3 A1 ,
A2 b,
A 3 A 1 A2 ,
A3 a
Aplicamos ELIMINA1 a A3 A1 A2 .
Se elimina esta produccin y se aade: A3 A2 A3 A2
Queda:
A1 A2 A3 , A2 A3 A1 , A2 b,
A3 a,
A 3 A 2 A3 A2
Aplicamos ELIMINA1 a A3 A2 A3 A2
Se elimina esta produccin y se aaden: A3 A3 A1 A3 A2 ,
Queda:
A1 A 2 A3 ,
A3 a,
A2 A 3 A1 ,
A 3 A 3 A1 A3 A2 ,
A3 bA3 A2
A2 b,
A3 bA3 A2
Aplicamos ELIMINA2 a A3
Se aade B3 y las producciones B3 A1 A3 A2 , B3 A1 A3 A2 B3
Se elimina A3 A3 A1 A3 A2 .
Se aaden las producciones: A3 aB3 , A3 bA3 A2 B3
Queda:
A1 A 2 A3 ,
A2 A 3 A1 ,
A2 b,
A3 a,
A3 bA3 A2
B3 A1 A3 A2 , B3 A1 A3 A2 B3 A3 aB3 ,
A3 bA3 A2 B3
Se aplica ELIMINA1 a A2 A3 A1 .
Se elimina esta produccin y se aaden:
A2 aA1 ,
A2 aB3 A1 ,
A2 bA3 A2 B3 A1 ,
A2 bA3 A2 A1
Queda:
A1 A 2 A3 ,
A2 b,
A2 aA1 , A2 aB3 A1 ,
A2 bA3 A2 B3 A1 , A2 bA3 A2 A1 , A3 a,
A3 bA3 A2 ,
B3 A 1 A3 A2 ,
B3 A1 A3 A2 B3 A3 aB3 , A3 bA3 A2 B3
Se aplica ELIMINA1 a A1 A2 A3 .
Se elimina esta produccin y se aaden:
Cap. 4
A1 bA3 ,
A1 aA1 A3 ,
A1 bA3 A2 B3 A1 A3 ,
A1 aB3 A1 A3 ,
A1 bA3 A2 A1 A3
Queda:
A2 b,
A2 aA1
A2 aB3 A1 ,
A2 bA3 A2 B3 A1 , A2 bA3 A2 A1 , A3 a,
A3 bA3 A2 ,
B3 A 1 A3 A2 , B3 A 1 A3 A2 B3 ,
A3 aB3 ,
A3 bA3 A2 B3 , A1 bA3 ,
A1 aA1 A3 ,
A1 aB3 A1 A3 , A1 bA3 A2 B3 A1 A3 ,
A1 bA3 A2 A1 A3
Se aplica ELIMINA1 a B3 A1 A3 A2 Se elimina esta produccin y se aaden:
B3 bA3 A3 A2 ,
B3 aA1 A3 A3 A2 ,
B3 aB3 A1 A3 A3 A2 ,
B3 bA3 A2 B3 A1 A3 A3 A2 , B3 aB3 A1 A3 A3 A2 ,
Queda:
A2 b,
A2 aA1
A2 aB3 A1 ,
A2 bA3 A2 B3 A1 ,
A2 bA3 A2 A1
A3 a,
A3 bA3 A2 ,
B3 A 1 A3 A2 B3 ,
A3 aB3 ,
A3 bA3 A2 B3 ,
A1 bA3 ,
A1 aA1 A3 ,
A1 aB3 A1 A3 ,
A1 bA3 A2 B3 A1 A3 , A1 bA3 A2 A1 A3
B3 bA3 A3 A2 ,
B3 aA1 A3 A3 A2 ,
B3 aB3 A1 A3 A3 A2 ,
B3 bA3 A2 B3 A1 A3 A3 A2 , B3 aB3 A1 A3 A3 A2 ,
Se aplica ELIMINA1 a B3 A1 A3 A2 B3 . Se elimina esta produccin y se aaden:
B3 bA3 A3 A2 B3 ,
B3 aA1 A3 A3 A2 B3 ,
B3 aB3 A1 A3 A3 A2 B3 ,
B3 bA3 A2 B3 A1 A3 A3 A2 B3 , B3 aB3 A1 A3 A3 A2 B3 ,
Resultado:
A2 b,
A2 bA3 A2 B3 A1 ,
A3 bA3 A2 ,
A1 bA3 ,
A1 bA3 A2 B3 A1 A3 ,
B3 aA1 A3 A3 A2 ,
B3 aB3 A1 A3 A3 A2 ,
B3 aB3 A1 A3 A3 A2 B3 ,
A2 aA1 ,
A2 bA3 A2 A1
A3 aB3 ,
A1 aA1 A3 ,
A1 bA3 A2 A1 A3 ,
B3 aB3 A1 A3 A3 A2 ,
B3 bA3 A3 A2 B3 ,
B3 bA3 A2 B3 A1 A3 A3 A2 B3 ,
A2 aB3 A1 ,
A3 a,
A3 bA3 A2 B3 ,
A1 aB3 A1 A3 ,
B3 bA3 A3 A2 ,
B3 bA3 A2 B3 A1 A3 A3 A2 ,
B3 aA1 A3 A3 A2 B3 ,
B3 aB3 A1 A3 A3 A2 B3
105
106
Modelos de Computacin I
Captulo 5
Autmatas con Pila
107
108
Modelos de Computacin I
Cap. 5
109
diante una sucesin de pasos de c lculo y se escribe C1 ` C2 si y solo si exite una sucesin de
configuraciones T1 , . . . , Tn tales que
C1 = T1 ` T ` Tn1 ` Tn = C2
Definicin 46 Si M es un APND y u A , se llama configuracin inicial correspondiente a esta
entrada, u, a (q0 , u, Z0 ) donde q0 es el estado inicial y Z0 el smbolo inicial de la pila.
Ejemplo 65 En el caso del autmata con pila del ejemplo anterior tenemos
(q1 , 011c110, R) ` (q1 , 11c110, BR) ` (q1 , 1c110, GBR) ` (q1 , c110, GGBR) `
(q2 , 110, GGBR) ` (q2 , 10, GBR) ` (q2 , 0, BR) ` (q2 , , R) ` (q2 , , )
110
Modelos de Computacin I
Cap. 5
111
/
M = ({q}, {a, b}, {A, S}, , q, S, 0)
(q, a, S) = {(q, AA)}
112
Modelos de Computacin I
(q, a, A) = {(q, S), (q, )}
(q, b, A) = {(q, S)}
Teorema 17 Si L = N(M) donde M es un APND, existe una gramtica libre del contexto G, tal
que L(G) = L.
Demostracin./ tal que L = N(M). La gramtica G = (V, A, P, S) se construye
Sea M = (Q, A, B, , q0, Z0 , 0),
de la siguiente forma:
V ser el conjunto de los objetos de la forma [q,C, p], donde p, q Q y C B, adems de
la variable S que ser la variable inicial.
P ser el conjunto de las producciones de la forma
1. S [q0 , Z, q] para cada q Q.
2. [q,C, qm ] a[p, D1 , q1 ][q1 , D2 , q2 ] . . .[qm1 , Dm , qm ]
donde a A , y C, D1 , . . . , Dm B tales que
(p, D1 D2 ...Dm ) (q, a,C)
(si m = 0, entonces la produccin es [q, A, p] a).
Esta gramtica genera precisamente el lenguaje N(M). La idea de la demostracin es que la
generacin de una palabra en esta gramtica simula el funcionamiento del autmata no determinstico. En particular, se verificar que [q,C, p] generar la palabra x si y solo si el autmata
partiendo del estado q y llegando al estado p, puede leer la palabra x eliminando el smbolo C
de la pila.
/ donde
Ejemplo 68 Si partimos del autmata M = ({q0 , q1 }, {0, 1}, {X , Z}, , q0 , Z0 , 0),
(q0 , 0, Z0 ) = {(q0 , X Z0 )}, (q1 , 1, X ) = {(q1 , )}
(q0 , 0, X ) = {(q0 , X X )}, (q1 , , X ) = {(q1 , )}
(q0 , 1, X ) = {(q1 , )},
(q1 , , Z0 ) = {(q1 , )}
las producciones de la gramtica asociada son
Cap. 5
113
S [q0 , Z0 , q0 ]
S [q0 , Z0 , q1 ]
[q0 , Z0 , q0 ] 0[q0 , X , q0 ][q0 , Z0 , q0 ]
[q0 , Z0 , q1 ] 0[q0 , X , q0 ][q0 , Z0 , q1 ]
[q0 , Z0 , q0 ] 0[q0 , X , q1 ][q1 , Z0 , q0 ]
[q0 , Z0 , q1 ] 0[q0 , X , q1 ][q1 , Z0 , q1 ]
[q0 , X , q0 ] 0[q0 , X , q0 ][q0 , X , q0]
[q0 , X , q1 ] 0[q0 , X , q0 ][q0 , X , q1]
[q0 , X , q0 ] 0[q0 , X , q1 ][q1 , X , q0]
[q0 , X , q1 ] 0[q0 , X , q1 ][q1 , X , q1]
[q0 , X , q1 ] 1
[q1 , X , q1 ] 1
[q1 , X , q1 ]
[q1 , Z0 , q1 ]
Elimando smbolos y producciones intiles queda
S [q0 , Z0 , q1 ]
[q0 , Z0 , q1 ] 0[q0 , X , q1 ][q1 , Z0 , q1 ]
[q0 , X , q1 ] 0[q0 , X , q1 ][q1 , X , q1]
[q1 , X , q1 ] 1
[q1 , X , q1 ]
[q1 , Z0 , q1 ]
Despus de esta equivalencia un lenguaje independiente del contexto puede definirse indistintamente como aquel que es generado por una gramtica de tipo 2 o bien como aquel que es
aceptado por un autmata con pila.
114
Modelos de Computacin I
El autmata tiene un slo estado final y lo que hemos hecho es que, al mismo tiempo que
dejamos la pila vaca, pasamos a ese estado final.
Lo que hemos hecho en el ejemplo anterior es siempre posible y se puede demostrar el
siguiente resultado.
Teorema 18 Si L es aceptado por un autmata con pila determinista M por el criterio de pila
vaca, entonces existe otro autmata con pila determinista M 0 que acepta el mismo lenguaje por
el criterio de estados finales.
Demostracin.- La demostracin es la misma que la del apartado a) del Teorema 15. Slo hay
que tener en cuenta que en la transformacin que se realiza, si partimos de un autmata con pila
determinista M, entonces el autmata con pila que se obtiene, M 0 es tambin determinista.
El resultado inverso no es cierto. Hay lenguajes que son aceptados por autmatas con pila
por el criterio de estados finales, que no pueden ser aceptados por el criterio de pila vaca.
Cap. 5
115
Ejemplo 70 El siguiente autmata determinista acepta por el criterio de estados finales el lenguaje de las palabras del lenguaje sobre {0, 1} con la misma cantidad de ceros que de unos,
donde q2 es el estado final y R el smbolo inicial de la pila.
(q1 , 0, X ) = {(q1 , X X )} (q1 , 1,Y ) = {(q1 ,YY )}
(q1 , 1, X ) = {(q1 , )}
(q1 , 0,Y ) = {(q1 , )}
(q1 , , R) = {(q2 , R)}
(q2 , 0, R) = {(q1 , X R)}
(q2 , 1, R) = {(q1 ,Y R)}
Sin embargo, no puede ser aceptado por un autmata determinista por el criterio de pila
vaca. El problema es el siguiente: si fuese posible, despus de leer 0011 se quedara la pila
vaca, pero entonces la palabra formada por 001101 no podra ser aceptada, porque al ser el
autmata determinista, despus de leer la primera parte de la parte, 0011, la pila se quedara
vaca y como un autmata no puede seguir funcionando con la pila vaca, la palabra completa
001101 no podra ser leida y, por tanto no es aceptada.
El razonamiento del ejemplo anterior se puede generalizar a cualquier lenguaje en el que se
de la misma situacin: dos palabras u y v del lenguaje distintas tal que una es un prefijo de la
otra (una subcadena del principio de la palabra). De hecho esta propiedad es fundamental para
caracterizar a los lenguajes aceptados por un autmata con pila deterministas por el criterio de
estados finales que lo son tambin por el criterio de pila vaca. En lo que sigue, formalizamos lo
que que acabamos de decir.
Definicin 49 Un lenguaje L se dice que tiene la propiedad prefijo si no existen dos palabras
u, v L tales que u 6= v y una es un prefijo de la otra.
El siguiente teorema (que enunciamos sin demostracin) establece la relacin entre los dos
criterios de aceptacin en autmatas con pila deterministas.
Teorema 19 Un lenguaje L puede ser acepatado por un autmata con pila determinista por el
criterio de pila vaca si y solo si puede ser aceptado por un autmata con pila determinista por
el criterio de estados finales y tiene la propiedad prefijo.
Si tenemos un lenguaje, L, independiente del contexto determinista que no cumple la propiedad prefijo es fcil tranformarlo en otro lenguaje muy similar que cumple la propiedad prefijo y
puede ser aceptado por un autmata con pila determinista por el criterio de pila vaca. Basta con
considerar un smbolo $ 6 L y entonces el lenguaje viene dado por
L{$} = {u$ : u L}
Es como aadirle un smbolo de fin de palabra ($) a todas las palabras de L.
116
Modelos de Computacin I
Finalmente, es importante que quede claro que hay lenguajes que son independientes del
contexto, pero no deterministas. Como ejemplo, podemos considerar L = {u {0, 1} : u = u1 }.
No vamos a demostrar formalmente que este lenguaje no es deterministas. Intuitivamente, las
palabras de este lenguaje se reconocen metiendo smbolos en la pila hasta la mitad de la palabra
(primera fase), y despus de la mitad se sacan smbolos de la pila (segunda fase). Si aparece
el smbolo inicial de la pila se pasa a un estado final y la palabra es aceptada. El problema es
que cuando se est leyendo la palabra smbolo a smbolo no se sabe cuando estamos en la mitad
de la palabra y cuando hay que pasar de meter smbolos a sacar. Si perminitimos que haya no
determinismo esto se resuelve dando, en todo momento de la primera fase, la opcin de cambiar
de la primera a la segunda fase.
Captulo 6
Propiedades de los Lenguajes Libres del
Contexto
117
118
Modelos de Computacin I
Cap. 6
119
S
...
...
u
...
...
y
...
...
...
...
v
...
x
...
...
...
120
Modelos de Computacin I
Cap. 6
121
122
Modelos de Computacin I
a) De hecho, ya hemos visto un algoritmo para determinar si el lenguaje generado por una
gramtica de tipo 2 es vaco. En el la primera parte del algoritmo para eliminar smbolos y
producciones intiles de una gramtica, se determinaban las variables que podan generar
una cadena fromada exclusivamente por smbolos terminales. El lenguaje generado es
vaco si y solo si la variable inicial S es eliminada: no puede generar una palabra de
smbolos terminales.
b) y c) Para determinar si el lenguaje generado por una gramtica de tipo 2 es finito o infinito
pasamos la gramtica a forma normal de Chomsky, sin smbolos ni producciones intiles.
En estas condiciones todas las producciones son de la forma:
A BC, A a
Se construye entonces un grafo dirigido en el que los vrtices son las variables y en el
que para cada produccin de la forma A BC se consideran dos arcos: uno de A a B y
otro de A a C. Se puede comprobar que el lenguaje generado es finito si y solo si el grafo
construido de esta forma no tiene ciclos dirigidos.
Cap. 6
123
Figura 6.2: grafo asociado a una gramtica de tipo 2 con lenguaje finito
S
Figura 6.3: grafo asociado a una gramtica de tipo 2 con lenguaje infinito
Un algoritmo simple, pero ineficiente se aplica a gramticas en forma normal de Greibach
(si una gramtica no est en esta forma se pasa, teniendo en cuenta que hemos podido dejar
de aceptar la palabra vaca). La pertencencia de una palabra no vaca se puede comprobar en
esta forma normal de Greibach de la siguiente forma: Como cada produccin aade un smbolo
terminal a la palabra generada, sabemos que una palabra, u, de longitud |u| ha de generarse
en |u| pasos. El algoritmo consistira en enumerar todas las generaciones por la izquierda de
longitud |u|, tales que los smbolos que se vayan generando coincidan con los de la palabra u, y
comprobar si alguna de ellas llega a generar la palabra u en su totalidad. Este algoritmo para, ya
que el nmero de derivaciones por la izquierda de una longitud dada es finito. Sin embargo puede
ser muy ineficiente ( exponencial en la longitud de la palabra). Para comprobar la pertenencia
de la palabra vaca se puede seguir el siguiente procedimiento:
Si no hay producciones nulas, la palabra vaca no pertence.
Si hay producciones nulas, la palabra vaca pertenece si y solo si al aplicar el algoritmo
que elimina las producciones nulas, en algn momento hay qhe eliminar la produccin
S .
El Algoritmo de Cocke-Younger-Kasami
Existen algoritmos de pertenencia con una complejidad O(n3 ), donde n es la longitud de
la palabra de la que se quiere comprobar la pertenencia. Nosotros vamos a ver el algoritmo
124
Modelos de Computacin I
u21
u31
u41
u51
V11
V21
V31
V41
V51
V12
V22
V32
V42
V13
V23
V33
V14
V24
V15
En ella, cada Vi, j se coloca en una casilla de la tabla. En la parte superior se ponen los
smbolos de la palabra para la que queremos comprobar la pertenencia. La ventaja es que es fcil
localizar los emparejamientos de variables que hay que comprobar para calcular cada conjunto
Vi j . Se comienza en la casilla que ocupa la misma columna y est en la parte superior de la
tabla, y la casilla que est en la esquina superior derecha, emparejando todas las variables de
estas dos casillas. A continuacin elegimos como primera casilla la que est justo debajo de la
Cap. 6
125
primera anterior, y como segunda casilla la que ocupa la esquina superior derecha de la segunda
anterior. Este proceso se contina hasta que se eligen como primera casilla todas las que estn
encima de la que se est calculando. La siguiente figura ilustra el proceso que se sigue en las
emparejamientos (para un elemento de la cuarta fila, en una palabra de longitud 5).
u11
u21
u31
u41
V51
V21
V22
V23
u51
V42
V33
V24
126
Modelos de Computacin I
Sea G una gramtica con smbolo inicial S y que no tenga producciones nulas ni unitarias.
Supondremos que u[i.. j] es la subcadena de u que va de la posicin i a la posicin j. El
algoritmo producir registros de la forma (i, j, A, , ), donde i y j son enteros y A es
una produccin de la gramtica. La existencia de un registro indicar un hecho y un objetivo. El
hecho es que u[i + 1.. j] es derivable a partir de y el objetivo es encontrar todos los k takes que
deriva a u[ j + 1..k]. Si encontramos uno de estos k sabemos que A deriva u[i + 1..k].
Para cada j, REGIST ROS[ j] contendr todos los registros existentes de la forma (i, j, A, , ).
El algoritmos consta de los siguiente pasos:
P1 Inicializacin.- Sea
REGIST ROS[0] = {(0, 0, S, , ) : S es una produccin}
REGIST ROS[ j] = 0/ para j = 1, . . ., n.
j=0
P2 Clausura.- Para cada registro (i, j, A, , B) en REGIST ROS[ j] y cada produccin B ,
crear el registro ( j, j, B, , ) e insertarlo en REGIST ROS[ j]. Repetir la operacin recursivamente para los nuevos registros insertados.
P3 Avance.- Para cada registro (i, j, A, , c) en REGIST ROS[ j], donde c es un smbolo terminal que aparece en la posicin j +1 de u, crear (i, j +1, A, c, ) e insertarlo en REGIST ROS[ j +
1].
Hacer j = j + 1.
P4 Terminacin.- Para cada par de registros de la forma (i, j, A, , ) en REGIST ROS[ j]
y (h, i, B, A, ) en REGIST ROS[i], crear el nuevo registro (h, j, B, A, ) e insertarlo en
REGIST ROS[ j].
P5 Si j < n ir a P2.
P6 Si en REGIST ROS[n] hay un registro de la forma (0, n, S, , ), entonces u es generada.
En caso contrario no es generada.
Ejemplo 76 Comprobar mediante el algoritmo de Early si la palabra baa es generada por la
gramtica con producciones:
S AB,
B CC,
S BC,
B b,
A BA,
C AB,
A a,
Ca
Cap. 6
127
(0, 0, A, , BA),
(0, 0, A, , a), (0, 0, B, ,CC), (0, 0, B, , b), (0, 0,C, , AB), (0, 0,C, , a),
REGIST ROS[1] :(0, 1, B, b, ), (0, 1, S, B,C), (0, 1, A, B, A), (1, 1,C, , AB),
(1, 1,C, , a), (1, 1, A, , BA), (1, 1, A, , a), (1, 1, B, ,CC), (1, 1, B, , b)
REGIST ROS[2] :(1, 2,C, a, ), (1, 2, A, a, ), (0, 2, S, BC, ), (0, 2, A, BA, ),
(1, 2,C, A, B), (1, 2, B,C,C), (0, 2, S, A, B), (0, 2,C, A, B), (2, 2, B, ,CC),
(2, 2, B, , b), (2, 2,C, , AB), (2, 2,C, , a), (2, 2, A, , BA), (2, 2, A, , a)
REGIST ROS[3] :(2, 3,C, a, ), (2, 3, A, a, ), (1, 3, B,CC, ), (2, 3, B,C,C)
(2, 3,C, A, B), (1, 3, A, B, A)
Como (0, 3, S, , ) no est en REGIST ROS[3], la palabra baa no es generada
S T, S S + T, T F, T T F, F a, F b, F (S)
Palabra: (a + b) a
REGIST ROS[0] :(0, 0, S, , T ), (0, 0, S, , S+T ), (0, 0, T, , F), (0, 0, T, , T F), (0, 0, F, , a), (0, 0, F, , b), (
REGIST ROS[1] :(0, 1, F, (, S)), (1, 1, S, , T ), (1, 1, S, , S + T ), (1, 1, T, , F),
(1, 1, T, , T F), (1, 1, F, , a), (1, 1, F, , b), (1, 1, F, , (S)),
REGIST ROS[2] :(1, 2, F, a, ), (1, 2, T, F, ), (1, 2, S, T, ), (0, 2, F, (S, )), (1, 2, S, S, +T)
REGIST ROS[3] :(1, 3, S, S+, T ), (3, 3, T, , F), (3, 3, T, , T F), (3, 3, F, , a), (3, 3, F, , b), (3, 3, F, , (S))
REGIST ROS[4] :(3, 4, F, b, ), (3, 4, T, F, ), (1, 4, S, S+T, ), (3, 4, T, T, F), (0, 4, F, (S, )), (1, 4, S, S, +T)
REGIST ROS[5] :(0, 5, F, (S), ), (0, 5, T, F, ), (0, 5, S, T, ), (0, 5, T, T, F), (0, 5, S, S, +T ),
REGIST ROS[6] :(0, 6, T, T , F), (6, 6, F, , a), (6, 6, F, , b), (6, 6, F, , (S)),
REGIST ROS[7] :(6, 7, F, a, ), (0, 7, T, T F, ), (0, 7, S, T, ), (0, 7, T, T, F), (0, 7, S, S, +T )
Como tenemos (0, 7, S, T, ), entonces la palabra (a + b) c es generada.
128
Modelos de Computacin I
Bibliografa
129
130
Modelos de Computacin I
[1] A.V. Aho, J.D. Ullman, Foundations of Computer Science. W.H. Freeman and Company,
New York (1992).
[2] R.V. Book, F. Otto, String rewriting systems. Springer-Verlag, Nueva York (1993).
[3] J.G. Brookshear, Teora de la Computacin. Lenguajes formales, autmatas y complejidad.
Addison Wesley Iberoamericana (1993).
[4] J. Carrol, D. Long, Theory of Finite Automata with an Introduction to Formal Languages.
Prentice Hall (1989)
[5] D.I. Cohen, Introduction to Computer Theory. John Wiley, Nueva York (1991).
[6] M.D. Davis, E.J. Weyuker, Computability, Complexity, and Languages. Academic Press
(1983)
[7] M.D. Davis, R. Sigal, E.J. Weyuker, Computability, Complexity, and Languages, 2 Edic..
Academic Press (1994)
[8] D. Grune, C.J. Ceriel, Parsing techniques: a practical guide. Ellis Horwood, Chichester
(1990).
[9] M. Harrison, Introduction to Formal Language Theory. Addison-Wesley (1978)
[10] J.E. Hopcroft, R. Motwani, J.D. Ullman, Introduccin a la Teora de Autmatas, Lenguajes
y Programacin, 2a Ed. Addison Wesley (2002).
[11] J.E. Hopcroft, J.D. Ullman, Introduction to Automata Theory, Languages and Computation. Addison-Wesley (1979)
[12] J.M. Howie, Automata and Languages. Oxford University Press, Oxford (1991)
[13] H.R. Lewis, C.H. Papadimitriou, Elements of the Theory of Computation. Prentice Hall
(1981)
[14] B.I. Plotkin, J.L. Greenglaz, A.A. Gvarami, Algebraic structures in automata and database
theory World Scientific, River Edge (1992).
[15] G.E. Revesz, Introduction to Formal Laguages. Dover Publications, Nueva York (1991)
[16] T.A. Sudkamp, Languages and Machines. Addison Wesley, Reading (1988)