Autómatas Finitos 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. Formalmente, un autómata finito (AF) puede ser descrito como una 5-tupla (S, Σ, T, s, A) donde: Σ es un alfabeto; S un conjunto de estados; T es la función de transición: T: S x (Σ u {}) -> P(S) ; s S es el estado inicial; S es un conjunto de estados de aceptación o finales. Además de notar un AF a través de su definición formal es posible representarlo a través de otras notaciones que resultan más cómodas. Entre estas notaciones, las más usuales son: Las Tablas de Transiciones: la tabla de transición para el AF del ejemplo 1 es 01 S1 S2 S1 S2 S1 S2 Los Diagramas de Transiciones: el diagrama de transición para el AF del ejemplo 1 es Las Expresiones regulares. Se demuestra que dado un autómata de estados finitos, existe una expresión regular que lo representa. Ø υ 1* υ (1* ο 0 ο 1* ο 0)* Función de transición para cadenas Se define además una función *: E x A* E, tal que * (ei, x) es el estado en que estará el autómata después de leer la cadena x comenzando en el estado ei. 1. 2. * (ei, ) = ei * (ei, xa) = (* (ei,x), a) siendo x una cadena y a un símbolo del alfabeto A. La diferencia entre y * es que se define desde un estado y un símbolo del alfabeto, y * se define desde un estado y una cadena de símbolos. El lenguaje aceptado por un autómata finito M = <E, A, , e0, F> es: L(M) = { x A* / * (e0, x) F } 1 Los lenguajes aceptados por autómatas finitos se denominan lenguajes regulares. AUTÓMATA FINITO DETERMINISTA Un AFD o autómata finito determinista es aquel autómata finito cuyo estado de llegada está unívocamente determinado por el estado inicial y el carácter leído por el autómata. Formalmente, un autómata finito determinista (AFD) es similar a un Autómata de estados finitos, representado con una 5-tupla (S,Σ,T,s,A) donde: Σ es un alfabeto; S un conjunto de estados; T es la función de transición: T : S x Σ -> S; s S es el estado inicial; A Ses un conjunto de estados de aceptación o finales. Es claro que, al contrario de la definición de Autómata finito, este es un caso particular donde no se permiten transiciones lambda (vacías), el dominio de la función T es S (con lo cual no se permiten transiciones desde un estado de un mismo símbolo a varios estados). A partir de este autómata finito es posible hallar la expresión regular resolviendo un sistema de ecuaciones. S1 = 1 S1 + 0 S2 + ε S2 = 1 S2 + 0 S1 Siendo ε la palabra nula. Resolviendo el sistema y haciendo uso de las reducciones apropiadas se obtiene la siguiente expresión regular: 1*(01*01*)*. Inversamente, dada la expresión regular es posible generar un autómata que reconozca el lenguaje en cuestión utilizando el algoritmo de Thompson. AUTÓMATA FINITO NO DETERMINISTA Un AFND o autómata finito no determinista es aquel que presenta cero, una o más transiciones por el mismo carácter del alfabeto. Un autómata finito no determinista también puede o no tener más de un nodo inicial. Los AFND también se representan formalmente como tuplas de 5 elementos (S,Σ,T,s,A). La única diferencia respecto al AFD es T. AFD: T : S x Σ -> S AFND: T : S x Σ -> P(S) (partes de S) Debido a que la función de transición lleva a un conjunto de estados, el autómata puede estar en varios estados a la vez (o en ninguno si se trata del conjunto vacío de estados). AUTÓMATA FINITO NO DETERMINISTA CON TRANSICIONES Λ 2 Un AFND-λ o autómata finito no determinista con transiciones λ permite cambiar de estado sin procesar ningún símbolo de entrada. Cuando el autómata llega a un estado, se encuentra en ese estado y en los estados a los que apunte este mediante una transición λ. Se representan formalmente con una tupla de 5 elementos, y se diferencian en los AFND en la función de transferencia: AFND: T : S x Σ -> P(S) (partes de S) AFND-λ: T : S x Σ -> P(S) (partes de S) Cuando el símbolo de entrada es la palabra vacía (λ), existe una transición λ entre los estados. AUTÓMATA DE PILA Los autómatas de pila, en forma similar a como se usan los autómatas finitos, también se pueden utilizar para aceptar cadenas de un lenguaje definido sobre un alfabeto A. Un autómata de pila o autómata a pila 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. El lenguaje que reconoce un autómata a pila pertenece al grupo de los lenguajes de contexto libre en la clasificación de la Jerarquía de Chomsky. Formalmente, un autómata de pila puede ser descrito como una séptupla M = (S,Σ,Γ,δ,s,Z,F) donde: Σ y Γ son alfabetos, de entrada y de pila respectivamente; S un conjunto de estados; Δ: S x (Σ u {}) u Γ -> P ( S x Γ*); s S es el estado inicial; Z Γ es el símbolo inicial de la pila; F S es un conjunto de estados de aceptación o finales. La interpretación de δ(s, a , Z) = {(s1, γ1),(s2, γ2),…,(sn, γn)} con s, pi Q, a Σ u {,γi Γ es la siguiente: Los autómatas de pila pueden aceptar lenguajes que no pueden aceptar los autómatas finitos. Un autómata de pila cuenta con una cinta de entrada y un mecanismo de control que puede encontrarse en uno de entre un número finito de estados. Uno de estos estados se designa como estado inicial, y además algunos estados se llaman de aceptación o finales. A diferencia de los autómatas finitos, los autómatas de pila cuentan con una memoria auxiliar llamada pila. Los símbolos (llamados símbolos de pila) pueden ser insertados o extraídos de la pila, de acuerdo con el manejo last-in-first-out (LIFO). Las transiciones entre los estados que ejecutan los autómatas de pila dependen de los símbolos de entrada y de los símbolos de la pila. El autómata acepta una cadena x si la secuencia de transiciones, comenzando en estado inicial y con pila vacía, conduce a un estado final, después de leer toda la cadena x. Cuando el estado del autómata es s, el símbolo que la cabeza lectora está inspeccionando en ese momento es a, y en la cima de la pila nos encontramos el símbolo Z, se realizan las siguientes acciones: Si a Σ, es decir no es la palabra vacía, se avanza una posición la cabeza lectora para inspeccionar el siguiente símbolo. Se elimina el símbolo Z de la pila del autómata. Se selecciona un par (pi,γi) de entre los existentes en la definición de δ(s,A,Z), la función de transición del autómata. 3 Se apila la cadena γi=A1,A2….,Ak en la pila del autómata, quedando el símbolo A1 en la cima de la pila. Se cambia el control del autómata al estado pi. Equivalencia entre AFD y AFND Para cada AFND, existe un AFD que acepta el mismo lenguaje. Dado el autómata finito no determinista MND = <END, A, ND, e0ND, FND>, se define el autómata finito determinista correspondiente MD= <ED, A, D, e0D, FD> como sigue: ED = P(END) (conjunto potencia de END). Cada elemento de ED se representa como [e1, e2, ..., ei] donde e1, e2, ..., ei están en END. Se debe notar que [e1, e2, ..., ei] es un único estado de MD que corresponde a un conjunto de estados de MND. A: alfabeto D: ED x A ED, se define como D([e1, e2, ..., ei], a) = [el, em, ..., ek] si ND({e1, e2, ..., ei}, a) = G ({e1, e2, ..., ei}, a) = {el, em, ..., ek}, donde G se define como G (C, a) = (p, a) y G (, a) = (C: conj. De estados), p C. Es decir, que D aplicada a un elemento [e1, e2, ..., ei] de ED se calcula aplicando ND a cada estado de END representado por [e1, e2, ..., ei]. e0D = [e0ND] FD: conjunto de todos los estados de ED que contienen al menos un estado final de MND. Minimización de AFD Para cada AFD existe un AFD con cantidad mínima de estados que acepta el mismo lenguaje. El algoritmo de minimización divide el conjunto de estados del AFD en clases de equivalencia. Los pasos a seguir son los siguientes: 1) Eliminar los estados no alcanzables desde el estado inicial. 2) Eliminar los estados desde los cuales no es posible alcanzar un estado final. 3) Construir una partición 0 del conjunto de estados, que consiste en dos grupos: estados finales y estados no finales. 4) Sea K = 0. 5) Definir K+1 de la siguiente manera: para cada grupo G de una partición K, dividir a G en subgrupos tales que dos estados s y t están en el mismo grupo sí y sólo sí para todo símbolo “a” del alfabeto de entrada, los estados “s” y “t” van al mismo grupo de K. 6) K = K + 1. 7) Si K K-1 volver al paso 5. En caso contrario, terminar. 4