Documente Academic
Documente Profesional
Documente Cultură
31 de marzo de 2011
ndice general
1. Introduccin
1.0.1. 1.0.2. 1.0.3. 1.0.4. 1.0.5. Marco histrico de la teora de la computacin . . . . 5 Conceptos bsicos: Alfabeto, Palabra o Cadena, Lenguaje y Problema Jerarqua de Chomsky . . . . . . . . . . . . . . . . . . 10 Los problemas en la Teora de la Computacin . . . . 11 Preguntas y respuestas, ejercicios resueltos y propuestos 13
2. Lenguajes Regulares
2.1. Autmatas de estados nitos . . . . . . . . . . . . . . . . . . 17 2.1.1. Autmatas nitos determinista (AFD) . . . . . . . . . 17 2.1.2. Implementacin de un AFD: programacin basada en autmatas 22 2.1.3. Autmatas nitos no determinista (AFND) . . . . . . 25 2.1.4. Autmatas nitos no determinista con transiciones nulas (AFND-) 30 2.1.5. Preguntas y respuestas, ejercicios resueltos y propuestos 37
17
NDICE GENERAL
Captulo 1
Introduccin
La teora de la Computacin es un poco ms antigua que las computadoras electrnicas. Uno de sus pioneros, Alan Turing pudo anticipar el poder de las computadoras a travs de un modelo conceptual en 1936. Otras disciplinas como la matemtica, losofa, lingstica, biologa e ingeniera elctrica intervienen para completar sus teoras. Las teoras de bases son dos: Teora de Autmatas y Teora de los Lenguajes Formales. En general, la Teora de la Computacin facilita la comprensin de muchas reas de la ciencia de la computacin (como los compiladores), adems: 1. Se utiliza en el diseo y construccin de aplicaciones importantes de software y hardware. 2. Ayuda a comprender que esperar del software. 3. Permite deducir si es posible resolver un problema (determinar los lmites de la computacin). Adems, la comprensin de estas teoras representa en la prctica un conjunto de herramientas muy tiles como alternativas simples y ecientes para resolver problemas.
CAPTULO 1.
INTRODUCCIN
La matemticas son completas. Las matemticas son consistentes. Las matemticas son decidibles.
En 1928, el matemtico Ackermann presenta tambin el problema de la decisin en un estudio sobre la lgica de primer orden. En 1930, el matemtico checo Kurt Gdel prueba que las matemticas no pueden ser completas y consistentes al mismo tiempo. En 1936, el matemtico americano Alonzo Church responde negativamente en un artculo al tercer problema propuesto por Hillbert, el problema decisorio. En ese mismo ao 1936, el matemtico ingls Alan Turing da una respuesta tambin negativa a esa tercera cuestin, sus resultados son ms consistentes que los obtenidos por Church. La demostracin de Turing se basa en principios completamente bsicos y elementales. Turing enuncia el problema de decisin de la siguiente forma: "Buscar un algoritmo para determinar si una conclusin particular puede derivarse de ciertas premisas con el uso de reglas de prueba". Da una nocin precisa del concepto de algoritmo, como aquello que pueda ser realizado por una mquina abstracta, la Mquina de Turing. De este modo, Alan Turing con su mquina universal capaz de realizar el trabajo de cualquier otra mquina, mediante la lectura de su descripcin en una cinta, delinea el diseo de un computardor. En 1969, S. Cook extiende el estudio de Tuning. Cook separa aquellos problemas que pueden ser solucionados de aquellos que en principio pueden ser solucionados pero que en la prctica toman demasiados recursos. En 1937, Claude Shannon presenta su tesis de licenciatura en el MIT, estableciendo el paralelismo entre la lgica de Boole y los circuitos de transmisin. En 1943, McCulloch-Pitts desarrolla unas mquinas simples, en cuanto su funcionamiento, que fueron conocidas como autmatas nitos de actividad nerviosa, para modelar el funcionamiento de una neurona biolgica.
7 En 1956, Moore publica el primer estudio riguroso sobre autmatas. Con anterioridad, debido al desarrollo de los primeros ordenadores, se haban estudiado diversos mtodos para la sntesis de circuitos secuenciales (Human, 1954 y Mealy, 1955). En los aos 60 es donde se realizan la mayor parte de trabajos sobre la teora de los autmatas nitos En 1956, N. Chomsky comienza el estudio formal de las gramticas (como generadoras de lenguajes). Formaliza matemticamente los conceptos de gramtica generativa o reglas para la construccin las frases de un lenguaje. Enuncia la teora sobre el origen y la naturaleza de los lenguajes naturales. Estas herramientas fueron empleadas para la formalizacin de los lenguajes de ordenador, Teora de los Lenguaje Formales. A nales de los aos 50 se relacionan los autmatas con los lenguajes (Jerarqua de Chomsky).
Conjunto
Coleccin de objetos (elementos del mismo tipo) sin repeticin. Tipos de representacin de los conjuntos: Por Extensin {0, 1} Por Comprensin { i | Para todo j entero i = 2j } El conjunto vaco se representa as: . La pertenencia de un elemento a un conjunto: A = {0, 1, 2} y 1 A o tambin escribimos 1 en A. Nota: es un smbolo que puede ser utilizado por algunos autores para denotar a la cadena vaca. El subconjunto: A B signica que todo elemento de A esta en B. Si A B y A = B entonces escribimos A B (subconjunto propio). Operadores sobre conjuntos: Unin: A B = {x | x en A o x en B}
8 Interseccin: A
CAPTULO 1.
INTRODUCCIN
B = {x | x en A y x en B}
Diferencia: A - B = {x | x en A y x no est en B} Conjunto Producto = Producto Cartesiano: A B {(x,z) | x en A y z en B} Conjunto de Potencias 2A o A , es el conjunto de todos los subconjuntos de A. Tambin A es denominado Clausura de Kleene de A. |A| |A| Las deniciones formales son A = i=0 A y A+ = i=1 A (clausura positiva). Donde Ai representa todos los subconjuntos de A con i elementos. Si A tiene n elementos y B tiene m elementos entonces A B tiene n m elementos y A tiene 2n elementos. Ejemplo: Dados los conjuntos A = {1,2} y B = {2,3}, se realizan las siguientes operaciones sobre conjuntos: A A
B = {1, 2, 3} B = {2}
A - B = {1} A B = {(1,2),(1,3),(2,2),(2,3)} 2A = A = {,{1},{2},{1,2}} De ahora en adelante, el enfoque debe visualizar las entradas, salidas y procesos de un dominio de aplicacin como tipo de problema particular (problema): resolver la pertenencia de un elemento (cadena) a un conjunto (lenguaje). El problema, los elementos y el tipo de conjunto que se van a utilizar se denen en base a los siguientes conceptos bsicos: 1.
Alfabeto: Cadena
Denotado con (sigma). Conjunto nito de smbolos no vacos. Por ejemplo: Alfabeto binario = {0,1} Smbolo: entidad abstracta (no se denen), por ejemplo nmeros, letras, etc. (Palabra): secuencia nita de smbolos pertenecientes a un alfabeto (yuxtapuestos = uno detrs del otro). Por ejemplo: Cadena binaria "0111001"
2.
a ) Cadena Vaca (lambda): contiene cero (0) smbolos, puede construirse a partir de cualquier alfabeto.
b ) Longitud de una Cadena: nmero de posiciones de la cadena ocupadas por smbolos del alfabeto. Denotado con el pipe |, por ejemplo |01101|= 5 y ||=0
te de la cadena. Por ejemplo para la cadena w=abca, formada de = {a, b, c}, se tiene: Los prejos de w= , a, ab, abc, abca Los sujos de w= , a, ca, bca, abca
Lenguaje:
Conjunto de cadenas de smbolos del mismo alfabeto. El lenguaje formado por toda las cadenas posibles de un alfabeto se denota por (sigma asterisco).
= {, 0, 1, 00, 01, 10, 11, 000, 001, 010, 011, 100, ... } 1 = {, 00, 1, 001, 100, 0000, 11, 00001, 00100, 10000, 1001, 2 0011, 111, 000000,... }
Las cadenas formadas con 2 al aplicarle la cardinalidad: |001| = 2 y |1100| = 3
10
CAPTULO 1.
INTRODUCCIN
Problema:
es poder resolver la pertenencia de una cadena sobre un lenguaje. Este tipo de problema es llamado un problema de Problema de Decisin: funcin con salida binaria (si, no) aplicada sobre conjuntos. Por ejemplo ver gura 1.1: se dene un conjunto A con todas las posibles respuestas y un conjunto B que es subconjunto de A cuyos elementos son positivos (salida si). Expresado en trminos de la teora de la computacin, si es un alfabeto y L es un lenguaje de , entonces el problema sobre L es: Dada una cadena w que pertenece a , decidir si w pertenece o no a L.
11 Cuadro 1.1: Jerarquia de Chomsky Tipo 0 1 2 3 Lenguaje Recursivamente enumerable Dependiente del Contexto Independiente del Contexto Lenguaje Regular Mquina Mquina de Turing Autmata linealmente acotado Autmata de Pila Autmata nito Gramtica G = (V,T,P,S) Gramtica sin restricciones (, en (V T ) , contiene una variable) Gramtica sensible al contexto (, en (V T ) , contiene una variable, || ||) Gramtica libre de contexto A (A en V y en (V T) ) Gramtica Regular A aB, A a, (A,B en V y a en T)
Chomsky en la solucin de problemas: un problema consiste en determinar si una cadena pertenece a un lenguaje, entonces si se conoce el tipo de lenguaje se puede determinar con que mquina reconocerlo o con cual tipo de gramtica generarlo.
12
CAPTULO 1.
INTRODUCCIN
de decisin". Un problema de decisin es un problema que puede dar una respuesta positiva o negativa (si o no). Un problema de decisin, en trminos matemticos, es equivalente a decidir si un elemento pertenece o no a un conjunto dado. El conjunto equivalente al problema esta formado por los elementos para el cual la respuesta es positiva (si). La gura 1.2 se muestra el esquema general de los problemas. El Entscheidungsproblem [1] (problema de decisin en alemn) se dene co-
Figura 1.2: Problema de decisin en Teora de la Computacin mo "dada una frase del clculo de predicados de primer orden, decidir si ella es un teorema", es el problema de decisin que motiv a Turing y a Church a dar origen a la Teora de la Computacin en 1936. Un ejemplo tpico de este tipo de problema es la siguiente pregunta: Es primo un nmero entero dado?, y una instancia de este problema sera: Es 17 un nmero primo?. Se trata de entender al 17 como un elemento del conjunto de todos nmeros enteros y se quiere saber si pertenece al conjunto de los nmeros primos. Lo anterior nos hace preguntarnos si realmente es posible reducir o redenir "todos"los problemas a la forma de un problema de decisin. Para lo cual le sugiero platearse ejemplos e investigar esta posibilidad, pues es en base a esta generalizacin de problemas sobre la cual funciona la Teora de la Computacin. Esto puede parecer una desventaja, como lo menciona Hopcroft [2]: . . . Un aspecto potencialmente poco satisfactorio de esta denicin de problema es que normalmente no se piensa en los problemas como cuestiones de decisin (es o no verdadero lo siguiente?) sino como solicitudes para calcular o transformar algunos valores de entrada (encontrar la mejor forma para realizar esta tarea) . . . Sin embargo, segn la computabilidad y complejidad las soluciones al problema de decisin y al problema original se diferencian a lo sumo por un factor lineal y se puede decir que vale la pena esta generalizacin de los problemas a cambio del formalismo que necesita la Ciencia de la Computacin.
13 Esta teora de la computacin entonces va a denir los problemas en funcin de un lenguaje. Justamente, la siguiente tabla muestra la jerarqua de Chomsky en donde se relacionan los tipos de lenguajes (problemas) con el tipo de mquina (modelo) que reconoce cadenas que pertenecen a cada tipo y a la gramtica (modelo) que genera las cadenas que pertenecen al tipo de lenguaje. Dicha jerarqua estable una relacin inclusiva entre los lenguajes, asi, el lenguaje Tipo 3 Tipo 2 Tipo 1 Tipo 0. Esto quiere decir que los lenguajes Tipo 0 son el tipo de lenguaje que abarca a todos los que se pueden resolver a travs de una Mquina de Turing (la ms poderosa).
14
CAPTULO 1.
INTRODUCCIN
Ejercicios resueltos
1. Diferencia entre el operador clausura de Kleene aplicado sobre un conjunto y sobre un alfabeto. Por ejemplo: El conjunto A = {a,b} cul es el A* y para el alfabeto B = {a,b} cual es B*. Aunque A y B son el mismo conjunto, son entendidos diferentes para algunos operadores. En el caso de A es un conjunto de elementos y A* es el conjunto de todos sus subconjutnos, A es nito y A* tambin, A* = {, {a}, {b}, {a, b}}. En el caso de B, es interpretado con un alfabeto, es decir un conjunto nito de smbolos. Aplicando el mismo operador a B nos d un conjunto innito, B* = {, a, b, aa, ab, ba, bb, aaa, aab, aba, ... } (se est formando el conjunto de todas las cadenas, incluyendo la cadena vaca, que se puede formar con el alfabeto B). 2. Considere el proceso de compilacin de un programa escrito en un lenguaje de programacin. Identique el alfabeto, cadena, lenguaje y problema. El problema de la compilacin de un programa escrito en algn lenguaje de programacin puede ser visto a travs del paradigam de lenguajes formales que contiene la Teora de la Computacin. El compilador no es ms que un sistema que es capaz de ver si una entrada (el cdigo fuente) esta bien escrito y sigue las reglas del lenguaje de programacin que est reconociendo. Es decir, el compilador es una mquina reconocedora de textos (cdigos fuente) que pertenecen al conjunto de todos los cdigos escritos en un lenguaje de programacin. De esta forma se denen: El alfabeto : es el conjunto de smbolos que puede escribirse en un teclado de computador con el cual puede escribirse texto (caracteres alfanumericos, caracteres especiales, espacio, etc.). Cadena de entrada w: La entrada del compilador visto como una mquina reconocedora, no es ms que cualquier texto que podamos escribir con el teclado del computador, con . Se pueden generar concatenando innitas cadenas (textos), es entonces innito. El lenguaje L: es el subconjunto de formado por las cadenas (texto) que siguen las reglas de un lenguaje de programacin especco. El compilador reconoce un lenguaje L innito pues las reglas de un lenguaje de programacin (aunque son nitas) permiten escribir innitos programas que formaran parte de L.
15 El problemma P: El compilador resuelve un problema de decisin al determinar si un texto de entrada compila o no. Decir que un texto compila signica que pertenece al lenguaje L de todas los posibles cdigos que pueden escribirse en el lenguaje de programacin. Decir que un texto o cadena de entrada en no compila es decir que no pertenece a L, es decir que no sigue las reglas del lenguaje de programacin. Evidentemente, el compilador es un sistema que adems de resolver el problema de decisin aporta un valor agregado: errores en el caso de compilar y cdigo objeto en el caso de compilar.
Ejercicios propuestos
1. Contestar verdadero (V) o falso (F):
a ) es un lenguaje formado por el alfabeto. b ) La clausura de Kleene sobre el alfabeto puede ser en algunos
alfabetos un conjunto nito.
e ) Un algoritmo es el conjunto de instrucciones que puede calcular f ) No existe un lenguaje innito L en el alfabeto = {a,b} para el
cual L sea diferente a L* (L = L*) 2. Sea A, B y C lenguajes de un alfabeto . En cada una de los tems siguientes se indican la expresin de 2 lenguajes. Seale si son siempre iguales y justique (indique contraejemplos en caso de ser apropiado) a ) A (B C) y AB AC
b ) A*B* y (AB)*
3. Enumere al menos 5 lenguajes (que no sean lenguajes de programacin o idiomas) que haya utilizado. Para cada uno de ellos identique el alfabeto y de ejemplo de una cadena del lenguaje.
16
CAPTULO 1.
INTRODUCCIN
Captulo 2
Lenguajes Regulares
Los lenguajes regulares, de tipo 3 segn la jerarqua de Chomsky, son aquellos que son reconocidos por autmatas de estados nitos, son denotados por expresiones regulares y generados por gramticas regulares. Estos lenguajes contienen a todos los lenguajes nitos generados a partir de cualquier alfabeto. Los lenguajes innitos tipicados como regulares poseen ciertas propiedades que lo caracterizan y distinguen de otros lenguajes ms complejos, la seccin de propiedades y algoritmos de decisin asi lo muestran.
18
CAPTULO 2.
LENGUAJES REGULARES
q0 = es el estado inicial (denotado con echa ) a inicio F = conjunto de estados nales (o estados de aceptacin). F Q
Diagrama de Transicin:
Representado a travs de un grafo. Un grafo G = (V,E) consiste de un conjunto nito de vrtices (o nodos) V y un conjunto nito de pares de vrtices (o aristas) E llamados enlaces (los cuales son bidireccionales). Un camino en un grafo es una secuencia de vrtices V1 , V2 , ... , Vk , con k 1, tal que hay un enlace (Vi ,Vi+1 ) con 1 i k. La longitud del camino es k-1. Si V1 = Vk entonces el camino es un ciclo. Una clase de grafo dirigido Dgrafo G =(V,E), consiste en un conjunto nito de vrtices V (o nodos) y un conjunto nito de pares ordenados de vrtices E llamados arcos (una sola direccin). Un arco de v a w se denota como v w. Un camino en un dgrafo es una secuencia de vrtices V1 , V2 , ... , Vk , con k 1, tal que Vi Vi+1 es un arco con 1 i k. La longitud del camino es k-1. El camino es de V1 a Vk (importa la direccin). Si v w es un arco entonces v es predecesor de w y w es sucesor de v. Ejemplo: Dado el Grafo G = ({1,2,3,4}, {i j | i < j }) 1,2,3,4 es un camino de longitud 3 de 1 a 4. 1,4 es un camino de longitud 1 de 1 a 4. 3,3 no es un camino. 3 es un camino de longitud 0 de 3 a 3? Por notacin, dado un AFD si p y q estan en Q y a en , se dene la transicin (q,a) = p. como un arco (enlace) etiquetado a entre el estado (vertice) q y el estado (vertice) p. Los estados o vertices de aceptacin se denotan grcamente con un doble crculo. Por ejemplo si r esta en F debe ser denotado con doble circulo como se observa en la gura 2.1. representado a travs de una funcin. Una funcin asigna a cada elemento de un conjunto (Conjunto Dominio) un elemento de otro conjunto (Conjunto Rango o Codominio).
2.
Funcin de transicin:
2.1.
19
Figura 2.1: Ejemplo de transicin en AF f : A B, siendo A el dominio y B el rango. La siguiente funcin f(x)= x2 , se dene f: N N, donde N es el conjunto de los nmeros naturales. Tipos de funciones: Inyectiva: Si a1 = a2 , entonces f (a1 ) = f (a2 ) Sobreyectiva: Si todo elemento de B es imagen de alguno de A, es decir la funcin inversa f 1 (b) = , para todo b en conjunto Rango o Codominio. La funcin de transicin esta denida como : Q x Q, es decir tiene como dominio cualquier par del producto cartesiano del conjunto de estados Q y el alfabeto de entrada , y da como resultado un elemento del conjunto rango de estados Q. 3.
Tabla de Transiciones:
representacin a travs de una matriz. La tabla tiene en las columnas todas las entradas del alfabeto y en las las los estados de Q, por lo que el par FilaxColumna representa el dominio de la funcin de transicin. Por notacin, en la tabla se escriben los estados de aceptacin o estados nales con asterisco al lado del estado. En cada celda interna de la tabla se muestra el resultado de la transicin es decir el estado Q al cual se realiza la transicin dado la la y la columna de la posicin de la celda respectiva. En los AFD cada celda de la tabla debe tener un estado, no se permiten celdas vacias. Ver cuadro 2.1.
y x comienza con 0 }, es decir todas las cadenas binarias que comienzan con 0. El AFD que lo reconoce, en sus tres representaciones, es el siguiente: M = (Q, , , q0 , F) Donde Q = {q0 , q1 , q2 }, = {0,1} y F = {q1 }
Dada f:A B, la funcin inversa f 1 :B A, se dene como f 1 (b) = {x | x en A y f(x) = b } para todo b en B
20
CAPTULO 2.
LENGUAJES REGULARES
Estados
Smbolos de Estados
q0 * q1 q2
0 q1 q1 q2
1 q2 q1 q2
Figura 2.2: Ejemplo de AFD: cadenas binarias que comienzan con cero 2. Funcin de transicin (q0 , 0) = q1 (q0 , 1) = q2 (q1 , 0) = q1 (q1 , 1) = q1 (q2 , 0) = q2 (q2 , 1) = q2 3. Tabla de transicin: se observa en el cuadro 2.2 Las tres representaciones del AFD son equivalentes y cada una de ellas es suciente para expresar el modelo. Sin embargo, debe enterderse la relacin
2.1.
21
entre ellas aunque se seleccione solo una de ellas para representar al autmata.
22
CAPTULO 2.
LENGUAJES REGULARES
L(M)= { w | w en y (q0 ,w) pertenece a F } Nota: el lenguaje de M, es un conjunto de cadenas w que llevan al autmata M desde q0 a un estado de aceptacin. Si L es un L(M) para algn AFD M, entonces decimos que L es un Lenguaje Regular. Nota importante: Para poder vericar si la cadena w est (es aceptada) o no est (no es aceptada) en L se debe terminar de procesarse la cadena w.
INICIO Conjunto Q[Estado] = {q0 , q1 , q2 } Conjunto [Simbolo]= {0,1} Conjunto F[Estado] = {q1 } Estado Actual = q0 Simbolo A A = LeerSimboloCadena() Mientras a = entonces Actual = transicion (Actual, A) A = LeerSimboloCadena() fin Mientras Si Pertenece(Actual,F) entonces Imprimir("Se acepta la cadena") sino Imprimir("No se acepta la cadena") fin Si FIN Funcin transicion (Estado q, Smbolo a) Estado S Seleccin q = q0 y a = 0: S = q1
2.1.
23
q q q q q
= = = = =
q0 q1 q1 q2 q2
y y y y y
a a a a a
= = = = =
1: 0: 1: 0: 1:
S S S S S
= = = = =
q2 q1 q1 q2 q2
LeerSimboloCadena() que permite obtener desde la entrada estndar un Smbolo de la cadena de entrada w (desde el comienzo, secuencialmente uno a uno) Imprimir(CadenaCaracter) funcin que permite imprimir la salida del autmata, si acepta o no la cadena de entrada Pertenece(Estado A, Conjunto B[Estado]), es una operacin del tipo de dato Conjunto que determina si el elemento A pertenece al Conjunto B.
Una posible implementacin del algoritmo anterior en lenguaje C se muestra a continuacin:
#include <iostream> #include <string> #include <stdio.h> using namespace std; enum estados { q0, q1, q2 }; void transicion(enum estados *estado, char a) { switch(*estado) { case q0: if(a == '0') { putchar(a); *estado = q1; }
24
CAPTULO 2.
LENGUAJES REGULARES
else { if(a == '1') { putchar(a); *estado = q2; } } break; case q1: if(a == '0' || a == '1') { putchar(a); *estado = q1; } break; case q2: if(a == '0' || a == '1') { putchar(a); *estado = q2; } break; } } int main() { char c; string cad; enum estados state = q0; cout << "AFD que reconoce todas las cout << "Estado inicial: " << state c = getchar(); cad = c; while((c == '0') || (c == '1')) { transicion(&state, c); cout << " Estado actual: " << state c = getchar(); if ((c == '0') || (c == '1')) cad = } if (state == q1) cout << "La cadena else cout << "La cadena " << cad << return 0; }
cadena binarias que comienzan con 0" << endl; << endl;
" << cad << " SI esta en el lenguaje" << endl; " NO esta en el lenguaje" << endl;
2.1.
25
26
CAPTULO 2.
LENGUAJES REGULARES
Figura 2.4: Denicin de en un AFND Cuadro 2.3: Tabla de transicin: Lenguaje de las cadenas binarias que terminan en 01
q0 q1 * q2
0 {q0 , q1 }
1 {q0 } {q2 }
L = { 01, 0001, 101, 1001, 10101, ... } A = (Q, , , q0 , F), donde: Q = {q0 , q1 , q2 }, = {0,1} y F = {q2 } En la gura 2.5 y el cuadro 2.3
Figura 2.5: Ejemplo de AFND: cadenas binarias que terminan en 01 se observa el AF que reconoce el lengauje. Para las cadenas w1 = 01 y w2 = 10101 se muestra la ejecucin formal a partir de la funcin de transicin extendida: 1. (q0 ,01) = ((q0 ,0),1) = (((q0 , ),0),1)
2.1.
27
(({q0 },0),1) ({q0 , q1 },1) = (q0 ,1) (q1 ,1) = {q0 } {q2 } = {q0 , q2 }, Acepto porque {q0 , q2 } {q2 } = , es decir al menos uno de los estados del autmata es de aceptacin luego de procesar la cadena.
2. (q0 ,10101) = ((q0 ,1010),1) = ((((((q0 , ),1),0),1),0),1) ((((({q0 },1),0),1),0),1), ({q0 },1) = {q0 } (((({q0 },0),1),0),1), ({q0 },0) = {q0 , q1 } ((({q0 , q1 },1),0),1), ({q0 , q1 },1) = (q0 ,1) (q1 ,1) = {q0 } { q 2 } = {q 0 , q 2 } ( ({q0 , q2 },0),1), ({q0 , q2 },0) = (q0 ,0) (q2 ,0) = {q0 , q1 } = { q0 , q 1 } ({q0 , q1 },1), ({q0 , q1 },1) = (q0 ,1) (q1 ,1) = {q0 } {q2 } = { q0 , q 2 } Acepto porque {q0 , q2 } {q2 } = , es decir al menos uno de los estados es de aceptacin de F.
F = }
Es el conjunto de cadenas pertenecientes a tal que ejecutar el AFN desde el estado inicial q0 con la cadena w, la funcin de transicin extendida (q0 ,w) contiene al menos un estado de aceptacin (es diferente del vaco la interseccin con F).
28
CAPTULO 2.
LENGUAJES REGULARES
Cuadro 2.4: Tabla de transicin N : Lenguaje de las cadenas binarias que terminan en 01
N q0 q1 * q2
0 {q0 , q1 }
1 {q0 } {q2 }
Algoritmo para la Construccin de Subconjuntos: Este algoritmo permite a partir de un AFND obtener un AFD equivalente que reconoce el mismo lenguaje. Su nombre se debe a que se intenta construir todos los subconjuntos del conjunto de estados del AFND. AFN N = (QN , , N , q0 , FN ) AFD D = (QD , , D , {q0 } , FD ) Tal que L(N) = L(D) (el lenguaje reconocido por el autmata N sea el mismo que el lenguaje reconocido por el autmata D, por tanto sean equivalentes) Algoritmo :
1. son iguales para N y D. 2. QD es el conjunto de los subconjuntos de QN , (Conjunto potencia QD = Q ). No todos los estados de QD son accesibles desde q0 , los N estados inalcanzables desde el estado inicial sern eliminados. 3. FD es el conjunto S de subconjuntos de QN (S QN ) tal que S FN = . Es decir FD contiene todos los conjuntos de estados de N que incluyen al menos un estado de aceptacin de N. 4. Para todo S QN y a en , entonces D (S,a) = pS N (p,a). Ejemplo: Dado el AFDN de la gura 2.5 y el cuadro 2.4 denotado como N = (QN , , N , q0 , FN ), con = {0,1} y QN = {q0 , q1 , q2 }, FN = {q2 }. Obtener D un AFD tal que L(N) = L(D) a travs del algoritmo de construccin de subconjuntos. 1. = {0, 1} 2. D = (QD , , D , {q0 }, FD ) 3. QD = {, {q0 }, {q1 }, {q2 }, {q0 , q1 }, {q0 , q2 }, {q1 , q2 }, {q0 , q1 , q2 }} (Conjunto de todos los subconjuntos de Q)
2.1.
29
Figura 2.6: Relacin AFDN y AFD: construccin de subconjunto sobre el AFND dela gura 2.5 Cuadro 2.5: Tabla de transicin D a travs de la construccin de sunconjuntos
q0 q1 q2
0 { q0 , q 1 } { q0 , q 1 } { q0 , q 1 }
1 { q0 } { q0 , q 2 } { q0 }
4. FD = {{q2 }, {q0 , q2 }, {q1 , q2 }, {q0 , q1 , q2 }} 5. Generar D , ver cuadro 2.5 y gura 2.6
a) b) c) d) e) f)
D ({q0 },0) = N (q0 ,0) = {q0 , q1 } D ({q0 },1) = N (q0 ,1) = {q0 } D ({q0 ,q1 },0) = N (q0 ,0) N (q1 ,0) D ({q0 ,q1 },1) = N (q0 ,1) N (q1 ,1) D ({q0 ,q2 },0) = N (q0 ,0) N (q2 ,0) D ({q0 ,q2 },1) = N (q0 ,1) N (q2 ,1) = {q0 ,q1 } = {q0 ,q1 } = {q0 } {q2 } = {q0 ,q2 } = {q0 ,q1 } = {q0 ,q1 } = {q0 } = {q0 }
30
CAPTULO 2.
LENGUAJES REGULARES
D (D (D (D (D ({q0 },1),0),1),0),1) = D (D (D (D (D ({q0 },1),0),1),0),1) = D (D (D (D ({q0 },0),1),0),1) = D (D (D ({q0 , q1 },1),0),1) = D (D ({q0 , q2 },0),1) = D ({q0 , q1 },1) = {q0 , q2 }
Se acepta la cadena porque {q0 , q2 } esta en FD La demostracin de este algoritmo se encuentra en el libro de Hopcroft [2] : Se demuestra por induccin sobre el tamao de w, donde el caso base N (q0 , ) = N ({q0 }, ) y para el caso inductivo N (q0 ,w) = N ({q0 },w).
= conjunto nito de smbolos del alfabeto. q0 = es el estado inicial (denotado con echa ) a inicio
F = conjunto de estados nales (o estados de aceptacin). F Q = la funcin de transicin entre estados : Q x {} Q . Ejemplo: Dado L = {0n 1m 2p | n,m,p 0 }, el lenguaje de todas las cadenas de 0, 1 o ms ceros (0n ) seguidas de 0, 1 o ms unos (1m ), y seguidas de 0, 1 o ms dos (2p ). Los siguientes autmatas de las guras 2.7 y 2.8 reconocen
2.1.
31
a L: En la tabla de transicin 2.6, del AFND- puede o no asumirse la transicin espontnea de la cadena vaca . Es decir, (q,) = {q}. Por ejemplo en el estado q2 , puede ser pero sin embargo tambin es {q2 }.
q0 q1 * q2
0 { q0 }
1 {q1 }
2 {q2 }
{q1 } {q2 }
32
CAPTULO 2.
LENGUAJES REGULARES
Figura 2.9: Ejemplo de la denicin de -clausura en un AFND- La denicin de la funcin de transicin extendida de los AFND-, con la que se pueden ejecutar, es la siguiente: 1. (q0 , ) = -clausura(q0 ) 2. 2) Para todo w en y a en , (q,wa) = -clausura(P), Donde:
-clausura(P) = { p | para algn r en (q,w), p en (r,a) } , Aplicar -clausura a cada p en P. Ver gura 2.10.
2.1.
33
Figura 2.10: Ejemplo de la denicin de -clausura en un AFND- en caso inductivo 3. (R,a) = 4. (R,a) =
qenR
(q,a), R Q (q,a), R Q.
qenR
Entonces (q,w) = (q,x) = {r1 , r2 , ..., rk } w = xa. con k m j=1 -clausura(pj ). i=1 (ri ,a) = {p1 , p2 , ..., pm } y (q,w) = Ejemplo: Dada la cadena w = 02 determinar si pertenece o no al lenguaje 0n 1m 2p reconocido por el AFND- de la gura 2.8 Denicin de la -clausura de los estados del autmata:
(q0 ,02) = -clausura( ( (q0 ,0),2)) = -clausura( (-clausura( ( (q0 ,),0)),2)) -clausura( (-clausura( ({q0 , q1 , q2 },0)),2)) (q0 , ) = -clausura(q0 ) = { q0 , q 1 , q 2 } -clausura( (-clausura({q0 }),2)) ({q0 , q1 , q2 },0) = {q0 } = { q0 }
= -clausura( ({q0 , q1 , q2 },2)) -clausura({q0 }) = -clausura(q0 ) = { q0 , q 1 , q 2 }
34
CAPTULO 2.
LENGUAJES REGULARES
{q2 } = {q2 } {q2 } Acepto la cadena w = 02 ya que (q0 ,02) F = {q2 } = . -clausura(q2 ) ({q0 , q1 , q2 },2) =
F = }
El lenguaje L(E), el reconocido por el autmata E, es el conjunto de cadenas de que al aplicar la funcin de transicin extendida se obteien un conjutno de estados de Q donde al menos uno pertenece al conjunto F de aceptacin.
Teorema 3. Un lenguaje regular L es aceptado por un AFND con transiA partir de estos teoremas se deriva un algoritmo para pasar de un AFND- a un AFD, es decir para eliminar las transiciones y obtener un autmata equivalente que reconozca el mismo lenguaje de forma deterministica. Dado E un AFND- se quiere lograr que L(E) = L(A), con y A un AFD, es decir E (q0E ,w) = D (q0D ,w) para todo w en L: E (AFND-) = (QE , , E , q0E , FE ) D (AFD) = (QD , , D , q0D , FD ) Algoritmo: 1. q0D = clausura(q0E ) 2. QD = Q , es decir el conjunto de subconjuntos de QE E
2.1.
35
3. FD = {s|senQD ys
FE = }
4. D (S,a) para todo a en y S en QD , se cumple: D (S,a) = m -clausura(rj ), j=1 {r1 , r2 , ..., rm } = k E (pi ,a) con S = {p1 , p2 , ..., pk }. Ver gura 2.11 i=1
Figura 2.11: Construccin de subconjuntos en un AFND- Ejemplo: Dado el AFND-lambda E halle un AFD equivalente que reconozca el mismo lenguaje. E = (Q, , , q0 , F), donde Q = {q0 , q1 , q2 }, = {0, 1, 2} y F = {q2 }. Ver gura 2.8 Se obtiene el AFD D = (QD , , D , q0D , FD ), aplicando el algorimos de construccin de subconjuntos de : 1. = {0, 1, 2} 2. q0D = -clausura(q0 ) = {q0 , q1 , q2 } 3. QD = {, {q0 }, {q1 }, {q2 }, {q0 , q1 }, {q1 , q2 }, {q0 , q2 }, {q0 , q1 , q2 }} 4. FD = {{q2 }, {q1 , q2 }, {q0 , q2 }, q0 , q1 , q2 } 5. Clculo de D : (ver cuadro 2.7) Para el estado inicial {q0 , q1 , q2 } se aplica la denicin para todos los elementos de : * D ({q0 , q1 , q2 },0) = -clausura(E (q0 , 0) E (q1 , 0) E (q2 , 0)) = -clausura({q0 } ) = -clausura({q0 }) = -clausura(q0 ) = { q0 , q 1 , q 2 } * D ({q0 , q1 , q2 },1) = -clausura(E (q0 , 1) E (q1 , 1) E (q2 , 1))
36
CAPTULO 2.
LENGUAJES REGULARES
q0 q1 q2
D {q0 , q1 , q2 } { q1 , q 2 } *{q2 }
0 {q0 , q1 , q2 }
1 { q1 , q 2 } { q1 , q 2 }
2 { q2 } { q2 } { q2 }
= -clausura( {q1 } ) = -clausura({q1 }) = -clausura(q1 ) = { q1 , q 2 } * D ({q0 , q1 , q2 },2) = -clausura(E (q0 , 2) E (q1 , 2) E (q2 , 2)) = -clausura( {q2 }) = -clausura({q2 }) = -clausura(q2 ) = { q2 }
Para el estado {q1 , q2 } se aplica la denicin para todos los elementos de : * D ({q1 , q2 },0) = -clausura(E (q1 , 0) E (q2 , 0)) = -clausura( ) = -clausura() = * D ({q1 , q2 },1) = -clausura(E (q1 , 1) E (q2 , 1)) = -clausura({q1 } ) = -clausura({q1 }) = -clausura(q1 ) = {q1 , q2 } * D ({q1 , q2 },2) = -clausura(E (q1 , 2) E (q2 , 2)) = -clausura( {q2 }) = -clausura({q2 }) = -clausura(q2 ) = {q2 } Para el estado {q2 } se aplica la denicin para todos los elementos de : * D ({q2 },0) = -clausura(E (q2 , 0)) = -clausura() = * D ({q2 },1) = -clausura(E (q2 , 1)) = -clausura() = * D ({q2 },2) = -clausura(E (q2 , 2)) = -clausura({q2 }) = clausura(q2 ) = {q2 } Hay dos formas de interpretar la construccin de subconjuntos-, una para crear un AFD y otra AFND. La idea es llegar a un AF ms fcil de implementar los cuales son AFD. AFD: Se ve cada estado como un conjunto de etiqueta. Ver gura 2.12 AFND: Se interpreta el contenido de la etiqueta de cada estado. Ver gura 2.13
2.1.
37
Figura 2.12: AFD equivalente del AFND- de la gura 2.8 a travs de la Construccin de subconjuntos
Figura 2.13: AFND equivalente del AFND- de la gura 2.8 a travs de la Construccin de subconjuntos
38
CAPTULO 2.
LENGUAJES REGULARES
lenguaje y para eso necesita estados de aceptacn, por tanto el conjunto F no puede ser vaco, pero si puede tener uno o ms caminos para reconocer esas cadenas (tener mas de un estado en F). Con respecto al estado inicial se necesita slo uno, pues el AF necesita saber de forma precisa por donde comenzar el funcionamiento de la mquina. Si se tiene ms de un estado inicial el AF debe seleccionar por donde comenzar, lo cual resultara complicado para unmodelo matemtico sencillo. Esto mismo ocurre en los lenguajes de programacin donde slo hay un inicio para el programa (main) pero puede tener mas de un nal (exit). 3. Por qu se debe terminar de procesar la cadena para saber si est o no en el lenguaje?. La mayora de los autmatas o mquinas de reconocimiento (excepto la Mquina de Turing) tienen esta restriccin que les permite simplicar el funcionamiento de su modelo. Si bien es cierto que para algunos lenguajes no hace falta recorrer toda la cadena pues su denicin no lo requiere (por ejemplo puede estar relacionada slo con el prejo de las cadenas), hacer que estos casos funcionen como los dems es lo ms simple en un modelo matemtico. 4. Por qu el conjunto de estados del autmata son nitos? Una de las caractersticas de los autmatas nitos es que el conjunto de estados es nito. Esto se debe a una propiedad matemtica sobre los lenguajes regulares (relacin de equivalencia) que establece particiones nitas sobre el lenguaje (aunque el lenguaje puede ser innito). Esta propiedad es diferente en otros tipos de lenguajes ms complejos pues las particiones se hacen innitas y por ende el nmero de estados para representarlas. 5. Puede obtener un AFND algortmicamente a partir de un AFD?, por qu? El procedimiento de la construccin de subconjuntos permite llevar de un AFND a AFD, es decir eliminar el no determinismo. El no determinismo implica el manejo de opciones o alternativas en cada paso de transicin generando instancias simultneas del Autmata en cada alternativa. El caso contrario parte de un AFD y se quiere obtener un AFND, es decir agregar no determinismo al autmata. Este proceso no tiene un algortimo, pero si dicho algoritmo pudiera existir tendra que ser en si no determinstico, es decir aplicar alternativas nitas en cada paso de transicin que incluso podra no tener sentido, sera muy complejo e incluso dicil de aplicar en algunos AFD.
2.1.
39
6. Qu signica que 2 autmatas son equivalentes?. Dos autmatas son equivalente cuando reconocen exactamente el mismo lenguaje. Hay que distinguir entre ser iguales y ser equivalente. Dos autmatas diferentes pueden tener diferente cantidad de estados, con diferentes transiciones e incluso diferente cantidad de estados de aceptaciin, es decir son diferentes en todo sentido y por tanto no son iguales. Sin embargo, estos autmatas diferentes, M1 = M2 , son capaces de procesar cadenas de y reconocer el mismo lenguaje L (todas y cada una de las cadenas que forman a L), en ese caso son llamados autmatas equivalentes, es decir L(M1 ) = L(M2 ).
Ejercicios resueltos
1. Determine las diferencias entre un AFD y un AFND. Ver el cuadro 2.8 2. Aplicaciones de la vida real que pueden ser vistos como AF. Algunas aplicaciones interesantes de los AF estn referidas al almacenamiento de diccionarios como los usados en los celulares, en la que se utilizan sus caractersticas para hacer bsquedas, inserciones o modicaciones rpidas. As como tambin para mejorar el ordenamiento y bsqueda en otros tipos de aplicaciones como los circuitos digitales, texto, secuencias lgicas de funcionamiento (como la maquinaria industrial, robtica) y otras. Tambin son tiles para el modelado de aquellos casos en los que a partir de una accin anterior se puede llegar a un conjunto determinado de destinos, pero no se tiene certeza anticipada de cul de ellos es el indicado, utilizados para modelar protocolos de comunicacin, sistemas distribuidos, planicacin, etc. 3. Modelar un AF que reconozca un identicador vlido en el lenguaje de programacin C. Un identicador es un nombre que dene a una variable, una funcin o un tipo de datos. Un identicador vlido ha de empezar por una letra o por el carcer de subrayado _, seguido de cualquier cantidad de letras, dgitos o subrayados. Adems: No debe contener caracteres especiales, tales como @, $, #, no debe haber espacios en blanco en los identicadores. El AF que reconoce este lenguaje es el siguiente: A = (Q, , , q0 , F), donde Q = {q0 , q1 }, son todos los caracteres alfanumricos y caracteres especiales permitidos (tales como -,_,.) , F
40
CAPTULO 2.
LENGUAJES REGULARES
Cuadro 2.8: Tabla comparativa de AFD y AFND Caracterstica Funcin de transicin p Denicin del Lenguaje que reconoce Estado actual AFD : Q x Q, rango es un elemento de Q L(M)={w|w y (q0 ,w) F }, Lenguaje regular L reconocido por el AFD M Un solo estado actual AFND : Q x Q , rango es un subconjunto de Q L(M)={w|w y (q0 ,w) F = }, Lenguaje regular L reconocido por el AFND M El estado actual puede ser un conjunto de estados (subconjunto de Q), mltiples estados simultaneamente No hay restricciones con respecto a las transiciones, un smbolo de puede tener 0, 1 o ms transciones de salida desde el mismo estado Las posiciones de las celdas pueden tener cualquier subconjunto de Q. Los AFND se utilizan en lenguajes regulares con alfabetos grandes y muchos estados, pues es ms sencillo de modelar, tiene relacin directa con las expresiones regulares y son utiles para aplicar operaciones sobre autmatas El modelo de un AFND es sencillo pues no exige evaluar todo en cada estado, al contrario puede considerar solo las opciones que aceptan las cadenas y muestra un diseo ms sencillo. Por el contrario, su implementacin requiere simular las alternativas simultaneas en cada paso de transicin y puede hacer complejo y poco eciente su programacin e implementacin
Desde cada estado existe una transicin de salida por cada smbolo de Cada posicin de la celda de la tabla debe tener slo un estado (estar completa) Los AFD son los que se implementan para el reconocimiento de lenguajes regulares, se usan para simular AFND
El modelo de un AFD deben considerar todo en cada los estados esto lo hace exhaustivo y dicil de disear. En cambio su programacin o implementacin es un algortimo determinstico eciente que tiene denido que hacer en cada caso
2.1.
41
= {q1 }, y se expresa en el diagrama de transicin de la gura 2.14 , donde se observa dos conjuntos de caracteres: A = conjunto de caracteres alfabticos B = conjunto de caracteres alfabticos, numricos y subrayados
Figura 2.14: AF que reconoce un identicador en el lenguaje C Existen palabras propias del lenguaje (palabras reservadas) que no pueden ser usadas como identicadores ej: if, do, while, etc. Cmo modicara el AF anterior para considerar que no pueden ser palabras reservadas. 4. Modelar un AF que reconozca el conjunto de enteros y nmeros en punto otante o "literales numricas". En el lenguaje C, las siguientes expresiones son literales numricas vlidas: 3, +0, -2E+7, 13., -01, -14.4, 41.16, -.4E-7, 0.2E-20, 00E0, 01E-06. La letra E se reere a un exponente y su presencia hace que el nmero subsiguiente sea un entero. Se supone que no existe lmite en el nmero de dgitos consecutivos en ninguna parte de la expresin. El AF que reconoce este lenguajes puede ser el siguiente: B = (Q, , , q0 , F), donde Q = {qi | 0 i 7 }, son todos los caracteres numricos y caracteres especiales permitidos (tales como .,+,,E), F = {q1 , q4 , q5 , q6 }, y se expresa en el diagrama de transicin de la gura 2.15, donde se observa el conjunto de caracteres N = {0,1,2,3,4,5,6,7,8,9}.
Ejercicios propuestos
1. Para = {0,1} construya un AFD que acepte los siguientes lenguajes:
a ) El conjunto de cadenas que tiene 011 como subcadena. b ) El conjunto de todas las cadenas cuyo tercer elemento desde el
extremo izquierdo sea un 1.
42
CAPTULO 2.
LENGUAJES REGULARES
d ) El conjunto de cadenas que terminan con 01. e ) El conjunto vaco. f ) El conjunto de la cadena vaca.
2. Constuya un AF para los siguientes lenguajes:
3. Obtenga un autmata nito (de cualquier tipo) para reconocer los siguientes lenguajes apartir del alfabeto binario:
a) b) c) d) e) f) g) h)
cadenas acabadas en 00 cadenas con dos unos consecutivos cadenas que no contengan dos unos consecutivos cadenas con dos ceros consecutivos o dos unos consecutivos cadenas con dos ceros consecutivos y dos unos consecutivos cadenas acabadas en 00 o 11 cadenas con un 1 en la antepenltima posicin cadenas de longitud 4
2.1.
43
p q r *s
p *q r *s
b ) M2 = ({p, q, r, s}, {0, 1}, , p, {q, s}) donde est dada por el
cuadro 2.10 cuadro 2.11
c ) M3 = ({p, q, r}, {a, b, c}, , p, {r}) donde est dada por el d ) M4 = ({q0 , q1 , q2 , q3 , q4 }, {a, b}, , q0 , {q4 }) donde est dada
por el cuadro 2.12
p q *r
{p} {q}
b {q} {r}
c {r} {p}
44
CAPTULO 2.
LENGUAJES REGULARES
q0 q1 q2 q3 q4
a { q1 , q 2 } { q4 }
b {q1 , q3 } {q4 }
{q3 }
Bibliografa
[1] Alonzo Church: A note on the Entscheidungsproblem. Journal of Symbolic Logic. 1 (1936). pp 40 - 41. [2] Hopcroft, Rajeev Motwani, Jerey D. Ullman. Introduccin a la Teora de Autmatas y Lenguajes Formales. PrenticeHall, 2002. [3] Chacn, M. y Padrn, J. (1994) Qu es teora. Investigacin y Docencia. Caracas: Publicaciones del Decanato de Postgrado, USR. [4] Seymour Lipschutz (1970) Teora de Conjuntos y Temas anes. macGraw-Hill
45