Академический Документы
Профессиональный Документы
Культура Документы
15 de abril de 2012
ndice general
1. Introduccin
1.1. 1.2. 1.3. 1.4. 1.5. Marco histrico de la teora de la computacin . . . . . . . . . . . . . Conceptos bsicos: Alfabeto, Palabra o Cadena, Lenguaje y Problema Jerarqua de Chomsky . . . . . . . . . . . . . . . . . . . . . . . . . . . Los problemas en la Teora de la Computacin . . . . . . . . . . . . . Preguntas y respuestas, ejercicios resueltos y propuestos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 . 7 . 9 . 10 . 11 . . . . . .
2.1. Autmatas de estados nitos . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1. Autmatas nitos determinista (AFD) . . . . . . . . . . . . . . . . . 2.1.2. Autmatas nitos no determinista (AFND) . . . . . . . . . . . . . . 2.1.3. Autmatas nitos no determinista con transiciones nulas (AFND-) 2.1.4. Herramientas, implementacin y uso de Lenguajes regulares . . . . . 2.1.5. Preguntas y respuestas, ejercicios resueltos y propuestos . . . . . . .
15
15 15 19 23 29 32
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
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 (teorema de la Incompletitud). En 1936, el matemtico americano Alonzo Church responde negativamente en un artculo al tercer problema propuesto por Hillbert, el problema decisorio (Teorema de Church y -clculo). 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 (Complejidad computacional). 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. En 1956, Moore publica el primer estudio riguroso sobre autmatas. Con anterioridad, debido al desarrollo de los primeros computadores, se haban estudiado diversos mtodos para la sntesis de circuitos secuenciales (Human en 1954 y Mealy en 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 computacin: Teora de los Lenguaje Formales. A nales de los aos 50 se relacionan los autmatas, las gramticas y los lenguajes (Jerarqua de Chomsky).
Conjunto
Coleccin (no importa el orden) de objetos (elementos del mismo tipo) sin repeticin. Existen 2 (dos) tipos de representacin de los conjuntos: Por Extensin, se enumeran todos sus elementos, por ejemplo: {0, 1} Por Comprensin, se dene de manera formal las caractersticas de sus elementos, por ejemplo: { 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 se escribe 1 en A. 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} Interseccin: A 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}. Si A tiene n elementos y B tiene m elementos entonces A B tiene n m elementos y A tiene 2n elementos. Conjunto de Potencias 2A A , es el conjunto de todos los subconjuntos de A. Tam es denominado Clausura de Kleene de A. Las deniciones formales son: A bin |A | i A| = i=0 Ai y A+ = |iA =1 A (clausura positiva que no incluye al conjunto vaco). Donde Ai representa todos los subconjuntos de A con i elementos. Ejemplo: Dados los conjuntos A = {1,2} y B = {2,3}, se realizan las siguientes operaciones sobre conjuntos: A B = {1, 2, 3} A B = {2} A - B = {1} A B = {(1,2),(1,3),(2,2),(2,3)} 2A = A = {,{1},{2},{1,2}}
Nota: es un smbolo que puede ser utilizado por algunos autores para denotar a la cadena vaca.
CAPTULO 1.
INTRODUCCIN
En la Teora de la Computacin se visualizan las entradas, salidas y procesos de un dominio de aplicacin como un tipo de problema particular: resolver la pertenencia de un elemento a un conjunto. 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: Denotado con (sigma). Conjunto nito de smbolos no vacos. Por ejemplo: Alfabeto binario = {0,1}. Smbolo: es una entidad abstracta que no se dene, por ejemplo nmeros, letras, etc. 2. Cadena (Palabra): secuencia nita de smbolos pertenecientes a un alfabeto (yuxtapuestos = uno detrs del otro). Por ejemplo: Cadena binaria "0111001". Sobre las cadenas se denen:
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 para el alfabeto binario, las longuitudes de las siguientes cadenas son |01101|= 5 y ||=0 c ) Concatenacin de Cadenas : x y y son cadenas entonces xy denota la concatenacin. Por ejemplo: x = 011 y = 1110, la concatenacin de xy = "0111110" d ) Potencias de un Alfabeto: Conjunto de todas las cadenas formadas a partir de un alfabeto de cierta longitud. k Cadenas de longitud k formadas por smbolos del alfabeto . Para el alfabeto binario = {0,1}, 2 = {00, 11, 10, 01} Conjunto de todas cadenas formadas por smbolos las i del alfabeto . Se 0 i 0 i dene por = . Donde = {} y = i=1 . Adems se denota el + = {} e ) Sujo, Prejo: cualquier cadena al nal o comienzo respectivamente 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 f ) Prejo (Sujo) propio, es cualquier Prejo (Sujo) que no sea la misma cadena.
3. 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).
es el lenguaje vaco, es un lenguaje para cualquier alfabeto.
{} es un lenguaje formado por la cadena vaca. Es un lenguaje para cualquier alfabeto . Por Ejemplo: 1 = {0, 1}, 2 = {00, 1}
1 = {, 0, 1, 00, 01, 10, 11, 000, 001, 010, 011, 100, ... } 2 = {, 00, 1, 001, 100, 0000, 11, 00001, 00100, 10000, 1001, 0011, 111, 000000,...
1.3.
JERARQUA DE CHOMSKY
Figura 1.1: Denicin de Problema en la Teora de la Computacin 4. Problema: consiste en determinar la pertenencia de una cadena sobre un lenguaje. Este tipo de problema es llamado un 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, que pertenecn a B). 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 el siguiente:
10
CAPTULO 1.
INTRODUCCIN
Cuadro 1.1: Jerarqua de Chomsky Tipo 0 1 2 3 Lenguaje Recursivamente enumerable Dependiente del Contexto Mquina Mquina de Turing Autmata linealmente acotado Independiente Autmata de del Contexto Pila Lenguaje Regu- Autmata lar nito Gramtica G = (V,T,P,S) Gramtica sin restricciones (, en (V T ) , contiene una variable) Gramtica al contexto (, sensible 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)
Figura 1.2: Problema de decisin en Teora de la Computacin frase del clculo de predicados de primer orden, decidir si ella es un teorema", es el problema de
1.5.
11
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 los nmeros enteros y se quiere saber si pertenece al conjunto de los nmeros primos. Lo anterior lleva a la pregunta de 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. Esta teora de la computacin entonces va a denir los problemas en funcin de un lenguaje. Justamente, el cuadro 1.1 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).
12
CAPTULO 1.
INTRODUCCIN
poderosa en la medida que soluciona problemas sin importar como lo hace (no importa la eciencia en tiempo y recursos, sino su efectividad en lograr resolver el problema). En los trminos del paradigma, si una mquina reconce lenguajes ms complejos ser ms podedora, segn la Jerarqua de Chomsky la mquina que reconoce el lenguaje tipo 0 es la ms poderosa.
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} cul es B*. La diferencia se debe a que el operador estrella o clausura de Kleene es polimrco. Aunque A y B son el mismo conjunto, se interpretan de forma diferente para el operador. En el caso de A es un conjunto de elementos y A* es el conjunto de todos sus subconjuntos, A es nito y A* tambin, A* = {, {a}, {b}, {a, b}}. En el caso de B, es interpretado como 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 segn la Teora de la Computacin. 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 alfanumricos, 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 (es decir con ). Cada cadena w se puede generar concatenando elementos de , de esta maneras tenemos innitas cadenas (textos)y entonces es 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. El problema 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 e innitos cdigos que pueden escribirse en
1.5.
13
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. Comentario: Evidentemente, el compilador es un sistema que adems de resolver el problema de decisin aporta como valor agregado un listado de errores en el caso de no poder compilar y el cdigo objeto en el caso de compilar. El problema P (compilacin), es un problema de pertenencia de un conjunto: pertenece el programa w al conjunto innito de programas L escritos en un lenguaje de programacin particular?. Si L fuese nito resultara sencillo de resolver, pero como afortunadamente (para quienes programan) L es innito (se pueden escribir innitos programas utilizando un lenguaje de programacin) se debe buscar el modelo nito de L que permita reconocer un programa bien escrito en un lenguaje de programacin dado. Este modelo nito es justamente lo que la Teora de la Computacin permite hacer.
Ejercicios propuestos
1. Qu es un lenguaje formal?, Diferencia con los lenguajes naturales 2. 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. c ) Dado el alfabeto = {a,b} y = {0,1}, la cadena w = a1b0 pertenece al alfabeto
d ) Segn la Jerarqua de Chomsky un lenguaje esta asociado un nivel de clasicacin de problemas asociado a una mquina 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*)
3. 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 b ) A*B* y (AB)*
AC
4. 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, describa el lenguaje.
14
CAPTULO 1.
INTRODUCCIN
Captulo 2
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.
15
16
CAPTULO 2.
En los AFD debe cumplirse que: Para toda a que esta en existe exactamente una transicin de salida de cada estado, es decir la funcin de transicin dado un estado y un valor de entrada se obtiene como resultado siempre un solo valor (estado). Las siguientes son las tres formas para expresar y representar la funcin de transicin, las cuales son equivalentes entre si, cualquiera de ellas es suciente para completar el diseo del AFD: 1. 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 (vrtice) q y el estado (vrtice) p. Los estados o vrtices de aceptacin se denotan grcamente con un doble crculo. Por ejemplo si r esta en F debe ser denotado con doble crculo como se observa en la gura 2.1.
Figura 2.1: Ejemplo de transicin en AFD 2. Funcin de transicin: representada 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). As la funcin f se denota f : A B, siendo A el dominio y B el rango. Por ejemplo, la siguiente funcin f(x)= x2 , se dene f: N N, donde N es el conjunto de los nmeros naturales. Los tipos de funciones son: Inyectiva: Si a1 = a2 , entonces f (a1 ) = f (a2 )
2.1.
17
Smbolos de Estados
Estados
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 de un AFD esta denida como : Q x Q, es decir tiene como dominio cualquier par del producto cartesiano (Q x ) del conjunto de estados Q y el alfabeto de entrada , y da como resultado un elemento del conjunto rango de estados Q. En la gura 2.1 se muestra un ejemplo de una funcin de transicin (q,a) = p. 3. Tabla de Transiciones: representada 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 (Q x ). Por notacin, en la tabla se escriben los estados de aceptacin o estados nales con asterisco al lado del estado y el estado inicial con una echa. En cada celda interna de la tabla se muestra el resultado de la transicin (codominio) 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.
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 } 1. Diagrama de transicin: se observa en la gura 2.2.
Figura 2.2: Ejemplo de AFD: cadenas binarias que comienzan con cero
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
18
CAPTULO 2.
0
q1 q1 q2
1
q2 q1 q2
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 entre ellas aunque se seleccione solo una de ellas para representar al autmata.
( ( (q0 , 0), 1), 0) ( (q1 , 1), 0) (q1 , 0) = q1 Se acepta al terminar de procesar la cadena 010 y quedar en un estado de aceptacin (q0 ,010) = q1 (q1 est en F)
2.1.
19
( ( (q0 , 1), 0), 1) ( (q2 , 1), 0) (q2 , 0) = q2 No se acepta al terminar de procesar la cadena 101 y quedar en un estado que no es de aceptacin (q0 ,101) = q2 (q2 no est en F)
20
CAPTULO 2.
Cuadro 2.3: Tabla de transicin: Lenguaje de las cadenas binarias que terminan en 01
q0 q1 * q2
1. Caso base para la cadena vaca : (q,) = {q}. Es desde cualquier estado del autmata la cadanea vaca no cambia de estado. 2. Paso recursivo para cadenas de cardinalidad mayor que 1: (q,xa) = { r | para algn p en (q,x), (p,a) = r }. Sea w de la forma w = xa donde a es el smbolo nal (sujo de longitud 1) de w y x el resto de w. (q,x) = {p1 , p2 , ..., pn } sea k i=1 (pi ,a) = {r1 , r2 , ..., rn } Entonces (q,x) = ( (q,x),a) = {r1 , r2 , ..., rn }, ver gura 2.4. La extensin para de Q x: ((P,w) = qenP (q,w), para todo conjunto de estados P en Q
Figura 2.4: Denicin de en un AFND Ejemplo: Dado el alfabeto = {0,1} y el lenguaje de todas las cadenas binarias que terminan en 01, L= { x | x en y x termina en 01 }, hallar el AFND que lo reconozca 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 se observa el AF que reconoce el lenguaje. Para las cadenas
2.1.
21
1. (q0 ,01) = ( (q0 ,0),1) = ( ( (q0 , ),0),1) ( ({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 (pertenece a F) 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) = (q (q1 ,1) = {q0 } 0 ,1) {q2 } = {q0 , q2 } ( ({q0 , q2 },0),1), ({q0 , q2 },0) = (q (q2 ,0) = { q 0 , q1 } = { q 0 , q 1 } 0 ,0) ({q0 , q1 },1), ({q0 , q (q1 ,1) = {q0 } {q2 } = {q0 , q2 } 1 },1) = (q0 ,1) Acepto porque {q0 , q2 } {q2 } = , es decir al menos uno de los estados es de aceptacin (pertenece a F).
Es el conjunto de cadenas pertenecientes a tal que ejecutar el AFND 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).
Teorema 1. Si L es aceptado por un AFND entonces existe un AFD que acepta L (es decir,
ambos aceptan la misma clase de lenguaje: lenguajes regulares).
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
22
CAPTULO 2.
Cuadro 2.4: Tabla de transicin N : Lenguaje de las cadenas binarias que terminan en 01
N q0 q1 * q2
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 N ). No todos los estados de QD son accesibles desde q0 , los 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.
Figura 2.6: Relacin AFDN y AFD: construccin de subconjunto sobre el AFND de la gura 2.5 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.
23
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 (se renombran los estados {q0 } = q0 , {q0 , q1 } = q 1 , {q 0 , q 2 } = q 2 )
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 }
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).
24
CAPTULO 2.
Facilidad para modelar (autmatas ms sencillos y con menos estados y transiciones). Relacin directa con las expresiones regulares (equivalencia demostrada formalmente) Un AFND- es una quntupla: A=(Q, , , q0 , F), siendo: Q = conjunto nito de estados.
= conjunto nito de smbolos del alfabeto. q0 = es el estado inicial (denotado con echa ) a inicio
{} Q .
Ejemplo: Dado L = {0n 1m 2p | n,m,p 0 }, el lenguaje de todas las cadenas de 0, 1 o ms digitos cero (0n ) seguidas de 0, 1 o ms dgitos uno (1m ), y seguidas de 0, 1 o ms digitos dos (2p ). Los siguientes autmatas de las guras 2.7 y 2.8 reconocen a L: En la tabla de transicin 2.6, del AFND- puede o no asumirse la transicin espontnea de
Figura 2.8: AFND- para el lenguaje 0n 1m 2p la cadena vaca . Es decir, (q,) = {q}. Por ejemplo en el estado q2 , puede ser pero sin embargo tambin es {q2 }.
2.1.
25
0 { q0 }
1
{q1 }
2
{q2 }
{q1 } {q2 }
Base: -clausura(q) = {q} , es decir por denicin (q,) = {q}, podemos imaginarnos un bucle de un estado a si mismo etiquetado . Ver gura 2.9. Paso inductivo: Si es la funcin de transicin de AFND- y p est en la -clausura(q), es decir (q, ) = {p} entonces la -clausura(q) tambin contiene los estados (p,). Ver gura 2.9.
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 este tipo de autmata, es la siguiente: 1. (q0 , ) = -clausura(q0 ) 2. Para todo w en y a en , (q,wa) = -clausura(P) con P Q, Donde:
-clausura(P) = { p | para algn r en (q,w), p en (r,a) } , Aplicar -clausura a cada p en P.
qenR
(q,a), R Q
26
CAPTULO 2.
Figura 2.10: Ejemplo de la denicin de -clausura en un AFND- en caso inductivo 4. Como aplicar la funcin a un conjunto de estados R. (R,a) = qenR (q,a), R Q. Entonces se tienen las siguientes deniciones (q,w) = (q,x) = {r1 , r2 , ..., rk } con w = xa. k m i=1 (ri ,a) = {p1 , p2 , ..., pm } y (q,w) = j =1 -clausura(pj ). Ver gura 2.10. 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:
-clausura(q0 ) = {q0 , q1 , q2 } -clausura(q1 ) = {q1 , q2 } -clausura(q2 ) = {q2 }
F = }
2.1.
27
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 obtiene un conjunto de estados de Q donde al menos uno pertenece al conjunto de estados de aceptacin (F).
Equivalencia entre AFD y AFND- (construccin de subconjuntos de ) Teorema 2. Si L es aceptado por un AFND con -transiciones entonces L es aceptado por
un AFND sin -transiciones. es aceptado por un AFD.
4. D (S,a) para todo a en y S en QD , se cumple: D (S,a) = n j =1 -clausura(rj ), {r1 , r2 , ..., rn } = k i=1 E (pi ,a) con S = {p1 , p2 , ..., pk }. Ver gura 2.11
28
CAPTULO 2.
0 {q0 , q1 , q2 }
1 { q1 , q 2 } { q1 , q 2 }
2 { q2 } { q2 } { q2 }
Ejemplo: Dado el AFND- E de la gura 2.8, encontrar un AFD equivalente que reconozca el mismo lenguaje. E = (Q, , , q0 , F), donde Q = {q0 , q1 , q2 }, = {0, 1, 2} y F = {q2 }. 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 para todos los elementos de : denicin * D ({q0 , q1 , q2 },0) = -clausura(E (q0 , 0) E (q1 , 0) E (q2 , 0)) = -clausura({q0 } ) = -clausura({q0 }) = -clausura(q0 ) = {q 0 , q1 , q 2 } * D ({q0 , q1 , q2 },1) = -clausura(E (q0 , 1) E (q1 , 1) E (q2 , 1)) = -clausura( {q1 } ) = -clausura({q1 }) = -clausura(q1 ) = {q 1 , q2 } * 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 , q 2} * 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 (es decir obtener un AFD). AFD: Se toma cada estado como un conjunto de etiquetas. Ver gura 2.12 AFND: Se interpreta el contenido de la etiqueta de cada estado. Ver gura 2.13
2.1.
29
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
30
CAPTULO 2.
Imprimir("Se acepta la cadena") sino Imprimir("No se acepta la cadena") fin Si FIN Funcin transicion (Estado q, Smbolo a): Estado Estado S Seleccin q q q q q q = = = = = =
q0 q0 q1 q1 q2 q2
y y y y y y
a a a a a a
= = = = = =
0: 1: 0: 1: 0: 1:
S S S S S S
= = = = = =
q1 q2 q1 q1 q2 q2
Donde se asume que se tiene los siguientes tipos de datos: Conjunto (paramtrico por el tipo de elemento), Estado, Simbolo. Para ellos se tiene las siguientes operaciones:
LeerSimboloCadena() que permite obtener desde la entrada estndar un Smbolo de la
cadena de entrada w (desde el comienzo, secuencialmente uno a uno) acepta o no la cadena de entrada
Imprimir(CadenaCaracter) funcin que permite imprimir la salida del autmata, si Pertenece(Estado A, Conjunto B[Estado]), es una operacin del tipo de dato Con-
junto que determina si el elemento A (del tipo Estado) pertenece al Conjunto de Estados 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) // funcin de transicin { switch(*estado) { case q0: if(a == '0') {
2.1.
31
putchar(a); *estado = q1; } 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;
<< endl; cad + c; " << cad << " SI esta en el lenguaje" << endl; " NO esta en el lenguaje" << endl;
32
CAPTULO 2.
2.1.
33
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, ni una ms ni una menos), 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 = {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 puede modicar el AF anterior para no considerar como identicadores a las palabras reservadas del lenguaje.
34
CAPTULO 2.
Cuadro 2.8: Tabla comparativa de AFD y AFND Caracterstica Funcin de transicin 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 en cada paso del autmata 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), es deir 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 (incluyendo el ). 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 simultneas en cada paso de transicin (bsqueda en un rbol realizando backtracking) y puede hacer complejo y poco eciente su programacin e implementacin
Condicin del Desde cada estado existe una trandiagrama de sicin de salida por cada smbolo de transicin Condicin de Cada posicin de la celda de la tala tabla de bla debe tener slo un estado (estar transicin completa) Utilidad Los AFD son los que se implementan para el reconocimiento de lenguajes regulares, se usan para simular AFND
Facilidad de El modelo de un AFD deben consimodelado y derar todo en cada estado, esto lo programacin hace exhaustivo y difcil de disear. En cambio su programacin o implementacin es un algortimo determinstico (tiene denido que hacer en cada caso) eciente
2.1.
35
4. Modelar un AF que reconozca el conjunto de enteros y nmeros en punto otante o tambin llamadas "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 (no hay el problema de la precisin). El AF que reconoce este lenguajs 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}.
Figura 2.15: AF que reconoce un literal numrico en el lenguaje C Se plantea como ejercicio pensar cmo puede modicar el AF de la gura 2.15 para reconocer lo siguiente: cambiar el uso del punto para que en su lugar la coma (,) se utilice para separar enteros y decimales, y el punto (.) se emplee como separador de las unidades decimales (comenzando desde el lado derecho de tres en tres). Por ejemplo, partes enteras de las literales numricas como: 1.300 o 35.413 o 38 o 23.300.080, etc.
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. c ) El conjunto de cadenas en las que el nmero de ceros es divisible por 3. d ) El conjunto de cadenas que terminan con 01. e ) El conjunto vaco. f ) El conjunto de la cadena vaca.
36
CAPTULO 2.
q r *s
1 {p} {r}
{s}
*q r *s
b ) Conjunto de 0 y 1 que contenga 2 ceros separados por un nmero de posiciones mltiplo de 3. Ntese que 0 es un mltiplo de 3 vlido.
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) a) b) c) d)
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
M1 = ({p, q, r, s}, {0, 1}, , p, {s}) donde est dada por el cuadro 2.9 M2 = ({p, q, r, s}, {0, 1}, , p, {q, s}) donde est dada por el cuadro 2.10 M3 = ({p, q, r}, {a, b, c}, , p, {r}) donde est dada por el cuadro 2.11 M4 = ({q0 , q1 , q2 , q3 , q4 }, {a, b}, , q0 , {q4 }) donde est dada por el cuadro 2.12
2.1.
37
q *r
{p} {q}
b {q} {r}
c {r}
{p}
38
CAPTULO 2.
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
39