Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
43 AUTÓMATAS FINITOS 44 Introducción La teoría de autómatas se ocupa de clasificar y estudiar de modo sistemático diferentes tipos de máquinas abstractas que llevan a cabo un procesamiento secuencial de la información. Viendo desde el punto de vista de lenguajes, un autómata finito o máquina de estado finito es un modelo matemático de un sistema que recibe una cadena constituida por símbolos de un alfabeto y determina si esa cadena pertenece al lenguaje que el autómata reconoce. En la vida cotidiana, los autómatas finitos se utilizan para modelar el comportamiento, tanto de dispositivos mecánicos, como de sistemas naturales. Concretamente, permite estudiar procesos que dependen de una historia, es decir, sistemas cuyo comportamiento actual depende del pasado. Un ejemplo de la vida cotidiana es el control de una puerta automática. Las puertas automáticas que encontramos en las entradas y salidas de los supermercados se abren cuando el sensor detecta a una persona. Las puertas automáticas tiene sensores en la parte frontal de la puerta para detectar la presencia de una o varias personas que están a punto de atravesar la puerta. También cuenta con sensores en la parte trasera de la puerta para que el controlador pueda mantener la puerta abierta el suficiente tiempo para que la persona pase sin ser golpeada. Figura 1. Configuración de los sensores El controlador tiene dos estados, “OPEN” o “CLOSED” que representan los estados de la puerta. Como se muestra en la figura 2, existen 4 posibles entradas: “FRONT” (cuando la persona esta parada en la parte frontal de la puerta), “REAR” (cuando la persona esta parada en la parte trasera de la puerta), “BOTH” (hay personas paradas tanto al frente como atrás), y “NEITHER” (No hay alguien parado al frente ni atrás). El diagrama de 45 transición de un autómata finito puede estar representado como se muestra en la figura 2. Figura 2. Diagrama de transición de una puerta automática Por otro lado, si enfocamos dicha definición en el contexto de los lenguajes, es posible ver a un autómata como un dispositivo que procesa cadenas de símbolos que recibe como entrada, cambiando de estado y produciendo una salida que, en algunos casos, puede estar formada por otra cadena de símbolos. Algunos de los modelos de autómatas finitos más conocidos son: Autómatas Finitos Determinas, Autómatas Finitos No-Deterministas, Autómatas Finitos de Pila y Máquinas de Turing. Durante esta unidad estaremos tratando sólo los dos primeros, Autómatas Finitos Deterministas y No-Deterministas. Una de las diferencias fundamentales entre las clases de autómatas finitos es si el cambio de estado es “Determinista”, lo que quiere decir que el autómata no puede encontrarse en más de un estado a un mismo tiempo, o “No-Determinista”, lo que significa que SÍ puede estar en varios estados a la vez. Comprobaremos que añadir el no determinismo NO nos permite definir ningún lenguaje que no pueda ser definido mediante un autómata finito determinista, aunque se obtiene una eficacia sustancial al describir una aplicación utilizando un autómata finito no determinista. En efecto, el no determinismo nos permite “programar” soluciones para los problemas utilizando un lenguaje de alto nivel. Entonces el autómata finito no determinista se puede cambiar en un autómata finito determinista mediante un algoritmo. 46 Definición de Autómatas Finitos Deterministas (AFD) Los Autómatas Finitos son máquinas teóricas que van cambiando de estado dependiendo de la entrada que reciban. La salida de estos Autómatas está limitada a dos valores: aceptado y no aceptado, que pueden indicar si la cadena que se ha recibido como entrada es o no válida. Generalmente utilizaremos los Autómatas Finitos para reconocer lenguajes regulares, es decir, una palabra se considerará válida sólo si pertenece a un determinado lenguaje. Formalmente un Autómata Finito Determinista se define como una tupla: (Σ, Q, f, 𝑞0, 𝐹) donde: Σ es el alfabeto de entrada 𝑄 es el conjunto finito y no vacío de los estados de los Autómatas. 𝑓 es la función de transición que indica en que situaciones el Autómata pasa de un estado a otro, se define 𝑓: 𝑄 × Σ → 𝑄 𝑞0 ∈ 𝑄 es el estado inicial 𝐹 ⊆ 𝑄 es el conjunto de estados finales de aceptación (𝐹 ≠⊘) Representación de autómatas Existen dos formas de representar un AFD, mediante tablas de transición o mediante diagramas de transición. Introduciremos estas dos representaciones con un ejemplo. Sea el autómata finito determinista definido por: ({𝑎, 𝑏}, {𝑝, 𝑞, 𝑟}, 𝑓, 𝑝, {𝑞}) donde 𝑓 se define de la siguiente forma: Tabla 1. Función f 𝑓(𝑝, 𝑎) = 𝑞 𝑓(𝑝, 𝑏) = 𝑟 𝑓(𝑞, 𝑎) = 𝑞 𝑓(𝑞, 𝑏) = 𝑟 𝑓(𝑟, 𝑎) = 𝑟 𝑓(𝑟, 𝑏) = 𝑟 La tabla de transición corresponde a la siguiente: Tabla 2. Tabla de transición a b → 𝑃 q r ∗ 𝑞 q r 𝑟 r r 47 La flecha indica que 𝑝 es el estado inicial, y el asterisco indica que 𝑞 es el estado final de aceptación (en general, pueden aparecer muchos asteriscos aunque sólo puede aparecer una flecha ya que sólo hay un estado inicial) El diagrama de transición es el siguiente: Figura 3. Automata Finito Determinista Los estado finales de aceptación se identifican por estar encerrados en un doble círculo. El estado inicial se destaca por una flecha apuntando hacia el nodo que parte desde ningún otro nodo del grafo. Al analizar el autómata del ejemplo es evidente que sólo considera como cadenas aceptadas aquellas que están formadas solamente por a’s. Cualquier cadena que con- tenga una b hará que el autómata acabe en el estado de no aceptación. A menudo nos encontramos con autómatas para los que no están definidas todas las transiciones. Las situaciones que no están definidas deben de estar consideradas como situaciones de error, es decir, si una cadena hace llegar a un autómata a una situación no definida, consideraremos que la cadena no ha sido reconocida por dicho autómata. Si deseamos completar un autómata, bastará con añadir un estado que reciba todas las transiciones que le falta a un autómata incompleto. 48 Figura 4. Izquierda: automata sin estado de error, Derecha: automata con estado de error Autómatas Finitos que reconocen lenguajes Ahora veamos ejemplos de un autómata para reconocer un lenguaje. Los autómatas que reconocen lenguajes pueden aceptar varias cadenas, pero sólo reconocerán un lenguaje (recordemos que los lenguajes están formados por varias cadenas). Si el autómata no acepta alguna cadena, aun así está reconociendo un lenguaje, el lenguaje vacío L∅. Es común en la literatura que trata sobre autómatas finitos, que éstos sean conocidos también como máquinas de estado finito. Para identificar una máquina de estados finitos de otra, es común etiquetarlas, por lo que en general, si A es el conjunto de todas las cadenas que la máquina M acepta, se dice que A es el lenguaje de la máquina M y se escribe L(M) = A . Otra forma de decirlo es que M reconoce a A. Ejemplo. Sea el lenguaje A definido por: 𝐴 = {𝑤 | 𝑤 𝑡𝑒𝑟𝑚𝑖𝑛𝑎 𝑐𝑜𝑛 1} El autómata que reconoce dicho lenguaje está definido por M1 = ({0,1}, {q1, q2}, f, q1, {q2}) y su correspondiente diagrama de estado se muestra en la figura siguiente: Figura 5. Autómata M1 49 Y su tabla de transición sería: 0 1 q1 q1 q2 q2 q1 q2 Ejercicio: Sea el lenguaje 𝐴 = {𝑤 | 𝑤 𝑒𝑚𝑝𝑖𝑒𝑧𝑎 𝑦 𝑡𝑒𝑟𝑚𝑖𝑛𝑎 𝑐𝑜𝑛 𝑎 𝑜 𝑒𝑚𝑝𝑖𝑒𝑧𝑎 𝑦 𝑡𝑒𝑟𝑚𝑖𝑛𝑎 𝑐𝑜𝑛 𝑏} El diagrama de transición está dado por: Dar la descripción formal del autómata anterior: 1. Q = ? 2. Σ = ? 3. 𝑓 4. 𝑞0 5. 𝐹 = ¿ Autómatas Finitos No-Deterministas (AFN) En los autómatas deterministas sabemos exactamente cuál es la transición que debemos llevar a cabo ante una determinada situación.Sin embargo, en los no-deterministas podemos encontrarnos con varias opciones e, incluso, con 𝜆 − 𝑡𝑟𝑎𝑛𝑠𝑖𝑐𝑖𝑜𝑛𝑒𝑠 o 𝜀 − 𝑡𝑟𝑎𝑛𝑠𝑖𝑐𝑖𝑜𝑛𝑒𝑠. El no determinismo es una generalización del determinismo, de tal forma que para cada autómata finito determinista existe, automáticamente, un autómata finito no- determinista. 50 Las diferencias entre los autómatas finitos deterministas (AFD) de los autómatas finitos no-deterministas (AFN) son: 1. Cada AFD siempre tiene UNA TRANSICIÓN para cada símbolo del alfabeto, y en el caso de los AFN puede tener MÁS DE UNA TRANSICIÓN por símbolo del alfabeto. 2. En los AFD, las etiquetas de las transiciones son símbolos del alfabeto. En AFN los símbolos 𝜀 ó 𝜆 pueden estar como etiquetas en las flechas de transición indicando que es posible cambiar de estado aunque no se reciba nada en la entrada. A estos autómatas se les conoce como AFN-𝜆 ¿Cómo funciona un AFN? Suponga que estamos probando un AFN para una cadena de entrada dada y, en algún punto de la prueba, nos encontramos en un estado que tiene múltiples salidas para proceder. Una vez que se ha leído el símbolo de la cadena de entrada, el autómata se divide en varias copias de sí mismo y sigue todas las posibles opciones en paralelo. Cada una de las copias toma una opción de los posibles caminos y en caso de encontrarse de nuevo en un estado con varias salidas para el mismo símbolo, repite el procedimiento anterior. Si en alguna de las copias el AFN recibe una entrada de la cadena que no está considerada, esa copia termina su proceso. Si al final, cualquiera de las copias del AFN original termina en un estado de aceptación, el AFN acepta la cadena. La siguiente figura muestra un esquema de los AFD y AFN: 51 Ejemplo 1: Considere el siguiente autómata finito no-determinista N1 Supongamos que queremos probar la cadena 010110, la siguiente figura nos muestra cuales serían los caminos a seguir. 52 Ejemplo 2: Sea A el lenguaje compuesto por todas las cadenas sobre {0,1} que contienen un 1 en la tercera posición desde el final de la cadena (e.j 000100 pertenece al lenguaje pero 011000 o 0011 no pertenecen). El siguiente AFN reconoce A. Conversión de gramáticas regulares a autómatas finitos Sea G=(ΣT, ΣN, S, P) una gramática regular. Un autómata finito que reconoce el mismo lenguaje que G es el autómata M=(Σ, Q, f, 𝑞0, 𝐹) dado por: 1. El conjunto de estados del autómata M están definidos por: ΣN U Z si existe alguna regla A::=a (A ∈ ΣN, a ∈ ΣT) Q = ΣN en caso contrario 2. El alfabeto del autómata consiste de los símbolos terminales de la gramática, es decir Σ = ΣT 3. Las transiciones del autómata están dadas por: B cuando exista una regla A::=aB (A,B ∈ ΣN, a ∈ ΣT) f(A,a) = Z cuando exista una regla A::=a (A ∈ ΣN, a ∈ ΣT) 4. El estado inicial del autómata es el símbolo inicial de la gramática. 5. El conjunto de estados finales del autómata M están dados por: {A si existe la regla A::=λ} U {Z si Z ∈ Q} F= {A si existe la regla A::=λ} en caso contrario En otras palabras, para convertir una gramática regular a un autómata finito: - Asociar los símbolos no terminales de la gramática con los estados del autómata - Cada regla A::=bC de la gramática nos define una transición f(A,b)=C; donde A y C son símbolos no terminales y b es terminal. - Las reglas A::=b, en caso de que existan, nos definen transiciones f(A,b)=Z, donde Z es un nuevo estado para el que no hay un símbolo no terminal asociado. 53 Ejemplo: Sea G={{a,b},{S,A},S,{S::=aS|aA, A::=bA|b}} la gramática que reconoce el lenguaje representado por a+b+, el autómata finito que reconoce el mismo lenguaje que G es el autómata K=(Σ, Q, f, 𝑞0, 𝐹). 1. Los estados de K son los símbolos no terminales de la gramática más Z, dado que existe la regla A::=b, por lo tanto Q={S,A,Z} 2. El alfabeto del autómata son los símbolos terminales de la gramática, por lo tanto Σ={a,b} 3. Las transiciones de K serían: f(S,a)=S f(S,a)=A f(A,b)=A f(A,b)=Z 4. El estado inicial del autómata es el símbolo inicial de la gramática, es decir 𝑞0=S 5. El conjunto de estados está definido por F={Z} El diagrama de transición se muestra a continuación: Conversión de autómatas finitos a gramáticas regulares 1. Los símbolos terminales de la gramática son los mismos que el alfabeto del autómata 2. Asociar a los estados del autómata los símbolos no terminales de la gramática 3. El símbolo inicial de la gramática corresponde al estado inicial del autómata 4. La transición f(A,b)=C define la regla A::=bC 5. En caso de que el estado C en la transición f(A,b)=C sea un estado final, entonces añadimos la regla A::=b, además de la regla A::=bC, ya incluida en el paso anterior. 6. Llevar a cabo el proceso de limpieza y simplificación de gramáticas Ejemplo 1: Tomando el autómata de la sección anterior convertimos a gramática 1. Los símbolos terminales de la gramática son ΣT ={a,b} 54 2. Los símbolos no terminales de la gramática son ΣN ={S,A,Z} 3. El símbolo inicial es S 4. Las reglas son S::=aS, S::=aA, A::bA, A::=bZ 5. Añadimos la regla A::=b por la transición f(A,b)=Z, ya que el estado final es Z 6. Eliminamos la regla A::=bZ ya que Z es un símbolo no generativo Ejemplo 2: Considere el siguiente autómata Convirtiendo a gramática regular quedaría: 1. Los símbolos terminales de la gramática son ΣT ={a,b} 2. Los símbolos no terminales de la gramática son ΣN ={q0, q1, q2, q3} 3. El símbolo inicial es q0 4. Las reglas son q0::=bq0, q0::=aq1, q1::=aq2, q1::=bq0, q2::=aq3, q2::=bq0, q3::=aq3, q3::=bq3 5. Añadimos las reglas q0::=b, q2::=b, q1::=b y q1::=a, dado que q0 y q2 son estados finales 6. La gramática ya está limpia y simplificada Conversión de Autómata Finito No Determinista a Autómata Finito Determinista Los AFN son equivalentes a los AFD, es decir, a partir un autómata finito no determinista se puede construir un autómata finito determinista equivalente (que acepte el mismo lenguaje). Cabe mencionar que el proceso que se describe a continuación permite convertir un AFN a AFD siempre y cuando el AFN no contenga transiciones lambda, es decir que no sea un AFN-𝜆. También existe un algoritmo para convertir un AFN-𝜆 a AFD pero no se encuentra dentro del alcance de este curso. 55 Considere el autómata no determinista N=({a,b,c},{q0,q1,q2},f,q0,{q0,q1,q2}) donde f está definido en el siguiente diagrama de transición: Para convertir N en un autómata finito determinista D: 1. El estado inicial de A será el mismo que de N. En este caso, q0 2. Se construye una tabla de transiciones para A determinando el conjunto de estados alcanzables para cada símbolo del alfabeto, partiendo del símbolo inicial. De esta forma, por ejemplo, desde el estado q0 con la entrada del símbolo “a” se alcanzan los estados {q0, q1, q2}, para el símbolo “b” se alcanzan los estados {q1,q2} y para “c” los estados {q2}. a b c q0 q0, q1, q2 q1,q2 q2 3. Cada uno de los conjuntos de estados que aparecen se considera como un estado de A. a b c q0 q0, q1, q2 q1,q2 q2 q0, q1, q2 q1,q2 q2 4. Para cada uno de los nuevos estados de A: Se determina la unión del conjunto de estados alcanzables para un símbolo del alfabeto desde cada uno de los estados de N que pertenece al nuevo estado de A. Siguiendo el ejemplo, para el nuevo estado “q0,q1,q2” de A con el símbolo “a”: a) Los estados alcanzables desde el estado q0 de N para el símbolo “a” son {q0,q1,q2} b) Los estados alcanzables desde el estado q1 de N para el símbolo “a” son vacíos. c) Los estados alcanzables desde el estado q2 de N para el símbolo “a” son vacíos. 56 d) La unión de los tres conjuntos anteriores es {q0,q1,q2} a b c q0 q0, q1, q2 q1,q2 q2 q0, q1, q2 q0, q1, q2 q1,q2q2 Para el estado “q0,q1,q2” de A con el símbolo “b”: a) Los estados alcanzables desde el estado q0 de N para el símbolo “b” son {q1,q2} b) Los estados alcanzables desde el estado q1 de N para el símbolo “b” son {q1,q2} c) Los estados alcanzables desde el estado q2 de N para el símbolo “b” son vacíos. d) La unión de los tres conjuntos anteriores es { q1,q2} a b c q0 q0, q1, q2 q1,q2 q2 q0, q1, q2 q0, q1, q2 q1,q2 q1,q2 q2 Para el estado “q0,q1,q2” de A con el símbolo “c”: a) Los estados alcanzables desde el estado q0 de N para el símbolo “c” son {q2} b) Los estados alcanzables desde el estado q1 de N para el símbolo “c” son {q2} c) Los estados alcanzables desde el estado q2 de N para el símbolo “c” son {q2} d) La unión de los tres conjuntos anteriores es { q2} a b c q0 q0, q1, q2 q1,q2 q2 q0, q1, q2 q0, q1, q2 q1,q2 q2 q1,q2 q2 Para el estado “q1,q2” de A con el símbolo “a”: a) Los estados alcanzables desde el estado q1 de N para el símbolo “a” son vacíos. b) Los estados alcanzables desde el estado q2 de N para el símbolo “a” son vacíos. c) La unión de los dos conjuntos anteriores es vacío. a b c q0 q0, q1, q2 q1,q2 q2 q0, q1, q2 q0, q1, q2 q1,q2 q2 q1,q2 - 57 q2 Para el estado “q1,q2” de A con el símbolo “b”: a) Los estados alcanzables desde el estado q1 de N para el símbolo “b” son {q1,q2}. b) Los estados alcanzables desde el estado q2 de N para el símbolo “b” son vacíos. c) La unión de los dos conjuntos anteriores es {q1,q2}. a b c q0 q0, q1, q2 q1,q2 q2 q0, q1, q2 q0, q1, q2 q1,q2 q2 q1,q2 - q1,q2 q2 Para el estado “q1,q2” de A con el símbolo “c”: a) Los estados alcanzables desde el estado q1 de N para el símbolo “c” son {q2}. b) Los estados alcanzables desde el estado q2 de N para el símbolo “c” son {q2}. c) La unión de los dos conjuntos anteriores es {q2}. a b c q0 q0, q1, q2 q1,q2 q2 q0, q1, q2 q0, q1, q2 q1,q2 q2 q1,q2 - q1,q2 q2 q2 Para el estado “q2” de A con el símbolo “a”: a) Los estados alcanzables desde el estado q2 de N para el símbolo “a” son vacíos. b) La unión del conjunto anterior es vacío a b c q0 q0, q1, q2 q1,q2 q2 q0, q1, q2 q0, q1, q2 q1,q2 q2 q1,q2 - q1,q2 q2 q2 - Para el estado “q2” de A con el símbolo “b”: c) Los estados alcanzables desde el estado q2 de N para el símbolo “b” son vacíos. d) La unión del conjunto anterior es vacío a b c q0 q0, q1, q2 q1,q2 q2 q0, q1, q2 q0, q1, q2 q1,q2 q2 58 q1,q2 - q1,q2 q2 q2 - - Para el estado “q2” de A con el símbolo “c”: e) Los estados alcanzables desde el estado q2 de N para el símbolo “c” son {q2}. f) La unión del conjunto anterior es {q2} a b c q0 q0, q1, q2 q1,q2 q2 q0, q1, q2 q0, q1, q2 q1,q2 q2 q1,q2 - q1,q2 q2 q2 - - q2 5. El proceso se repite mientras aparezcan nuevos estados 6. Una vez terminada la tabla de transiciones se determinan los estados finales de A que serán aquellos en donde al menos uno de los nuevos estados de A es estado final en N. En este caso, los estados finales de N son q0,q1 y q2 por lo tanto todos los nuevos estados de A son finales, ya que al menos contienen un estado final de N. a b c *q0 q0, q1, q2 q1,q2 q2 *q0, q1, q2 q0, q1, q2 q1,q2 q2 *q1,q2 - q1,q2 q2 *q2 - - q2 A continuación se muestra el diagrama del autómata finito determinista resultante:
Compartir