CAPÍTULO 1. EXPRESIONES REGULARES Y AUTÓMATAS FINITOS 1.1 Introducción a los Autómatas Finitos Para el estudio de la teoría de la computación se necesitan tres herramientas matemáticas básicas. a) La notación teórica establecida, b) El dominio de los conceptos de funciones y relaciones, c) Buenos conocimientos de inducción matemática. La capacidad para usar notación la teórica establecida depende, fundamentalmente, del conocimiento de las definiciones básicas de símbolos y sus significados. Conocer las otras dos herramientas depende de la capacidad para entender razonamientos lógicos. El prerrequisito de este curso es el conocimiento de algún lenguaje de programación de alto nivel y los fundamentos de estructuras de datos y algoritmos, teoría de conjuntos, funciones, relaciones, lógica y elementos de razonamiento matemático. El campo de las ciencias computacionales incluye un amplio rango de temas especiales, desde el diseño de una máquina hasta la programación. El uso de la computación en el mundo involucra una riqueza de detalles específicos que deben ser aprendidos para aplicaciones exitosas. La construcción de modelos es unas de las esencias de cualquier disciplina científica, y el uso de una disciplina depende de la existencia de teorías y reglas. La Teoría de Lenguajes y Autómatas tiene diversas aplicaciones, como son el diseño digital, lenguajes de programación y compiladores. Para modelar el hardware de una computadora introducimos la noción de autómata, que es una construcción que posee las características indispensables de una computadora digital. Acepta una entrada, produce una salida, puede tener un almacenamiento temporal, y puede decidir en la transformación de la entrada en la salida. A continuación se describen algunos conceptos básicos: Un lenguaje formal consiste de un conjunto de símbolos y algunas reglas de formación por los cuales esos símbolos pueden ser combinados en entidades llamadas sentencias. 1 Un símbolo es una entidad abstracta que no se define formalmente, por ejemplo a,b,1,’,@ Un alfabeto es un conjunto finito de símbolos, por ejemplo {a,b,c}, {1,2,3} Una cadena es una secuencia de símbolos s= s1 s2 ...sn donde si Por ejemplo: casa, del alfabeto {c,a,s,a} La cadena nula es la cadena de longitud 0 Si x y y son cadenas, la concatenación de las dos se denota xy Si tenemos las cadenas: la, pelota del alfabeto {l,a,p,e,o,t}, entonces la concatenación de ambas cadenas es: la pelota Sean u,v dos cadenas, entonces uv = u {(i+|u|,j)|(i,j) v} En s=xyz, x es llamado prefijo, y es una subcadena, z es un sufijo de s Propiedades de la concatenación de cadenas: (xy)z = z(yz) x = x = x = x = x Una vez que se conoce el alfabeto, ya es posible definir un lenguaje, que en nuestro caso está aplicado a ejemplos computacionales como el reconocimiento de patrones, Bases de Datos y Gramáticas. Antes de continuar con los conceptos básicos, es conveniente describir un teorema importante de cardinalidad, el cual nos ayudará aa comprender mejor la cerradura de Kleen. Teorema. El conjunto 2N no es numerable Demostración. Supongamos que 2N es numerable. Dado que es un conjunto infinito, debe suponerse que 2n es enumerable y que por lo tanto, puede ser enumerado de la forma 2N = {A0,A1,….}. Sea D={n , n }. 2 Obsérvese que D y, por tanto, D= Ak para algún k. Consideremos dicho k. Si k Ak, entonces puesto que Ak = D, k no puede estar en Ak. Por otro lado, si k Ak, entonces k D y por tanto k debe estar en Ak. Ambas posibilidades nos llevan a una contradicción. Por consiguiente, la suposición de que 2 es enumerable es incorrecta. La técnica de diagonalización se usa para la refutación de muchas afirmaciones. En la demostración precedente no se ve claramente donde se usa dicha ténica. Un ejemplo clásico de diagolanización es la demostración de que el intervalo abierto (0,1) no es numerable. Supongamos que (0,1) es numerable, por lo que puede ser representado por el conjunto {a0, a1, …}. Entonces cada ai será representado por su desarrollo decimal y por convención se usará la forma incompleta tanto para los números de esa forma como para los de la forma completa. Por tanto, 0.25 se representará como 0.24999… Bajo esta representación, dos números en (0,1) son iguales si y sólo si los dígitos correspondientes son los mismos. Haremos una lista con los ai a0 = 0.d00d01d02… a1 = 0.d10d11d12… … ak = 0.dk0dk1dk2… Para demostrar que (0,1) no es numerable debemos encontrar un número z (0,1) tal que z ai para cualquier i. Sea z= 0.z0z1… donde zk = 5, si akk 5 2, si akk = 5 Obsérvese que z difiere de cada ak en al menos una cifra decimal y que 0<z<1. Por tanto, hemos encontrado el z que buscábamos, con lo que ai no da cuenta de todos os números pertenecientes a (0,1). Aquí la diagonalización resulta obvia. La Concatenación de Lenguajes es una extensión de la concatenación de cadenas; es una operación que se puede manejar desde diferentes puntos de vista. 3 Un lenguaje L es un conjunto finito o infinito de cadenas tomadas de algún alfabeto, por ejemplo el lenguaje español, inglés, binario. Los lenguajes que nos interesan son aquellos que se componen por cadenas que cumplen ciertas propiedades. Un lenguaje de cardinalidad infinita puede ser descrito por un conjunto finito de reglas (sintaxis, gramática). La teoría de lenguajes formales estudia los procedimientos de especificación, reconocimiento y manipulación de conjuntos de cadenas formadas a partir de un conjunto de símbolos. El reconocimiento de patrones es usado en Procesamiento de Señales, Inteligencia Artificial, Bases de Datos, etc. Normalmente se representa al patrón como una cadena de caracteres que hay que reconocer en una cadena más grande Si = {a,b}, entonces * = {a, aa, aaa, ..., b, bb, ..., ab, aba, abb } Si es el alfabeto, entonces L *, siendo L un lenguaje del alfabeto El lenguaje L1L2 está definido como {XY | X L1, Y L2 } De la misma manera tenemos L0 = {} Li = LLi-1 i 1 La cerradura de Kleen del lenguaje L está definida como L* = i 0 Li La cerradura positiva de Kleen del lenguaje L está definida como L+ = i 1 Li 1.2 Expresiones y conjuntos regulares Un lenguaje regular es aquel que puede ser descrito por Expresiones Regulares, para ello debemos definir este concepto y enfatizar en las tres operaciones válidas que se pueden utilizar entre ellos. Un lenguaje regular es aquel que puede ser descrito por expresiones regulares y autómatas finitos deterministas Las expresiones regulares (e.r.) de un alfabeto son conjuntos de cadenas definidos como sigue: es una e.r. que denota el conjunto vacío es una e.r. que denota el conjunto {} 4 Para cada a , a es una e.r. que denota el conjunto { a } Si p y q son e.r. entonces (p+q), (pq) y (p*) denotan los conjuntos PQ, PQ y P* respectivamente Son expresiones regulares: (x + y)*w (0 + 1)* (0 + 1 + ... + 9 )* (0 + 1 + ... + 9 )* No son expresiones regulares : xn yn an b2k an Cada expresión regular r de un alfabeto representa un lenguaje denotado por L(r) Existen diferentes formas de representar expresiones regulares, dependiendo de la complejidad de la condición establecida. Como veremos, el significado de una ER da como resultado un conjunto, por lo tanto las propiedades de los conjuntos son válidas para las ER. Sin embargo debemos considerar el orden cuando se trata de una operación de concatenación de palabras ya que allá si afecta la propiedad conmutativa. El significado de una expresión regular Para conocer el significado de una expresión regular, debemos conocer las características de éstos, ya que dos expresiones regulares distintas pueden referirse a un mismo lenguaje, y por lo tanto el significado es el mismo. El significado de una expresión regular es una función definida de la manera siguiente: £ : ER 2* £() = £() = { } £(a) = {a }, a R,S son ER £(RS) =£(R) £(S) £(R+S) =£(R) £(S) £(R*) =£(R)* 5 En el alfabeto = {a,b} Tenemos que * = 0 1 2 3 … * = {a,b} {ab, ba, aa, bb} … * = {a,b,ab,ba,aa,bb,…} 2* = { a,b,ab,ba,aa,bb,… {a,b}, {a,ab}, {a,aa},…,{a,b,ab},…} Si tenemos una ER que reconozca a las palabras que empiecen con la letra b, entonces la solución sería: b(a+b)* = b,bb,ba,…. La parte de la derecha tiene que ser un elemento de un conjunto ya que la función va de una ER a un elemento del conjunto. En * no hay un elemento de esa naturaleza, pero en 2* si lo hay Una ER que tenga cadenas con al menos dos ceros consecutivos, está representada por: (0+1)*00(0+1)* Ejercicio. Encuentra una ER para el lenguaje en el alfabeto {0,1} para a) Todas las cadenas de ceros y unos b) Las cadenas que comienzan con 1 y no tienen 2 ceros consecutivos c) Las cadenas que contienen un número de ceros distintos de tres La inversa de una cadena abc es cba. Este concepto es fácilmente entendido por una persona que programa, porque existen funciones en los lenguajes de programación que obtienen la inversa de una cadena. 6 Equivalencias principales de las Expresiones Regulares La práctica se pone de manifiesto cuando queremos detectar igualdades de expresiones regulares. Existen ocho equivalencias principales, las cuales se usarán como fórmulas para extender a otras expresiones. 1. (R+S)=(S+R) (R+S)+T=R+(S+T) R+=+R=R R+R=R 2. R=R=R R=R= (RS) T=R(ST) 3. R(S+T)=RS + RT (S+T) R=SR+TR 4.R*=R*R*=(R*)* =(+R)* 5.R*=+RR* 6.(R+S)*=(R*+S*) * =(R*S*)*=(R*S)*R * =R*(SR*)* R*+S* 7. R*R=RR* R(SR)*=(RS)*R 8. (R*S)*= +(R+S)*S (RS*)*=+R(R+S)* 9. R=SR+T ssi R=S*T R=RS+T ssi R=TS* Lo que procede es la comprobación de las igualdades, considerando las definiciones de cerradura de Kleen, cerradura positiva de Kleen y concatenación de ER. 1.3 Autómatas Finitos Deterministas Una máquina de estado finito se utiliza para representar expresiones regulares. Para entender su funcionamiento es conveniente familiarizarnos con algunos conceptos de la simbología formal y hacer la relación con un grafo. Una máquina de estados finitos es un quíntuplo en el cual se señalan el alfabeto y la función de traslación entre estados. La transición es única, ya que de cada estado salen exactamente el número de elementos del alfabeto. 7 Estos autómatas no tienen almacenamiento temporal. Debido a que el número de estados es finito, un AFD puede tratar únicamente con situaciones en las cuales la información a ser almacenada en determinado tiempo está estrictamente limitada. Para representar estos autómatas, usamos grafos de transición, en los cuales los vértices representan los estados y las ligas las transiciones. Un lenguaje es el conjunto de cadenas aceptadas por un Autómata. Se requiere mostrar la teoría de grafos, a manera de recordatorio, ya que éste es un tema de la asignatura de Matemáticas Discretas. Aceptación de una palabra Cuando rastreamos el AFD, nos damos cuenta que la cantidad de caminos desde un estado se reduce al número de elementos del alfabeto. Por lo tanto hay que concentrarnos en las configuraciones convenientes para armar un buen autómata. Muchas veces hacemos autómatas redundantes, y aunque aceptan las palabras requeridas, no son óptimos y eso se manifiesta en la implementación del AFD por computadora. Una máquina de estados finitos es un quíntuplo (K, , ,s, F ), donde K es un conjunto de identificadores de estados es el alfabeto de entrada s K es el estado inicial F K es un conjunto de estados finales : Kx K es la función de transición Una configuración es la situación en que se encuentra la máquina en un momento dado. Definición. [q1,w1 M [q2,w2 ssi w1=w2 para un , y existe una transición en M tal que (q1, )=q2 Definición. Una palabra w * es aceptada por una máquina M=(K, , ,s, F ) ssi existe un estado q F tal que [s,w M* [q, Definición. Un cálculo en una máquina M es una secuencia de configuraciones c1,c2,...,cn tales que ci ci+1. 8 Teorema. Dados una palabra w * y una máquina M, sólo hay un cálculo [s,w M... M[q, . Definición. Dos autómatas M1 y M2 son equivalentes, M1 M2 , cuando aceptan exactamente el mismo lenguaje. Definición. Dos estados son compatibles si ambos son finales o ninguno es final. Definición. Dos estados q1 y q2 son equivalentes, q1 q2 , ssi al intercambiarlos en cualquier configuración, no se altera la aceptación o rechazo de toda palabra. Definimos una función de Kx* K de la siguiente manera (q,) (q,wa) = ( (q,w), a ) La intención es que (q,w) represente al estado en que estará el AF después de leer la cadena w del estado q. Existen algunas características interesantes en un AFD que es conveniente analizar. Por ejemplo, el número de transiciones que salen de cada estado está en función de los elementos del alfabeto. Esta característica parece dificultar la representación regular del autómata, pero la definición lo pide, por lo cual, el alumno deberá pensar un poco más antes de obtener el AFD definitivo. Una palabra es reconocida por un AFD cuando se realizan una serie de configuraciones hasta llegar a un estado final y la cadena haya sido consumida en su totalidad. Cuando se rastrea una palabra en un AFD, se conocen los estados por donde se va pasando; sin embargo este camino es único, ya que de cada estado solo sale una transición por cada elemento del alfabeto. El alumno deberá demostrar esta unicidad, reforzando con aplicaciones. El cálculo de una palabra en un AFD es único. 9 Elaborando un AFD La construcción de AFD’s es esencial para entender el comportamiento de las expresiones regulares. Dado un alfabeto y una serie de condiciones, se puede elaborar un AFD que satisfaga dichas condiciones, mediante ensayo y error Ejercicios Dado el alfabeto en {0,1}, elaborar un AFD que acepte solamente palabras a) que empiecen con 00 b) que no empiecen con 00 c) con un número par de ceros d) con un número impar de unos e) con las dos condiciones anteriores A continuación se realiza el inciso c: 1.4 Autómatas Finitos No Deterministas A diferencia de los AFD, los AFN permiten que salga un número de ligas arbitrario de cada estado. Los Autómatas Finitos No Deterministas (AFN) varían un poco con respecto a los AFDs, ya que las transiciones que salen de un estado pueden ser muchas porque una palabra del alfabeto puede repetirse. Por tal motivo, las operaciones que se realizan son más flexibles y por tanto el análisis varía un poco. La relación de transición es la parte variable de la definición formal de un AFN, ya que en los AFD, se maneja una función. La flexibilidad permitida a las transiciones hace más poderosos a estos autómatas, pero también más peligrosos en cuanto al control del reconocimiento de un lenguaje. Definición. Un AFN es un quíntuplo (K, , ,s, F ) donde K, , s, F tienen el mismo significado que para el caso de los AFD, y , llamada la relación de transición, es un subconjunto finito de k x*x k. 10 Definición. Una palabra w es aceptada por AFN ssi existe una trayectoria en su diagrama de estados, que parte del estado inicial y llega a un estado final, tal que la concatenación de las etiquetas de las flechas es igual a w. Definición. La cerradura al vacío de cerr-(q) de un estado q es el conjunto más pequeño que contiene al estado q, a todo estado r una transición (p,,r) , con cerr-(q). Un primer ejemplo Se muestra en la siguiente gráfica el comportamiento de las transiciones de los AFN’s. Observamos que podría darse el caso en que no salgan transiciones de un estado, también que salga una transición vacía. Esto nos indica la gran flexibilidad de los AFN’s con respecto a los AFD’; sin embargo, hay ventajas y desventajas para cada uno. La transición en los Autómatas Finitos es de cuidado, ya que debemos distinguir las características de cada Autómata, así como del alfabeto. En un AF se definen dos conceptos, la transición en un AFD que significa estar en un estado sin transición, pero en un AFN se define con la cerradura al vacío. Teorema. Sea M=(K, , ,s, F ) un AFN. Entonces existe un AFD M’= (K’, ‘, ,s’, F’ ) que es equivalente a M. Teorema. Si L es aceptado por un AFN con transiciones , entonces L es aceptado por un AFN sin transiciones . 11 1.5 Lenguajes Regulares y Autómatas Finitos Se dice que dos autómatas son equivalentes si aceptan el mismo lenguaje. Un AFD es un AFN, pero no viceversa. Sin embargo, existe un procedimiento para convertir un AFN en un AFD. Un AFD define un único lenguaje, pero lo inverso no es verdadero. Se puede reducir el número de estados en un AF. Las ER pueden ser usadas para describir algunos lenguajes. Si r es una ER, L( r ) denota el lenguaje asociado con r. Este lenguaje se define como sigue: es una ER que denota el conjunto vacío es una ER que denota {} para cada a , a es una ER que denota {a} si r1 y r2 son ER, entonces L(r1 + r2) = L(r1) + L(r2) L(r1 r2) = L(r1) L(r2) L(r1*) = (L(r1) )* Un AFD es un AFN debido a que cumple las características de sus parámetros, sin embargo cuando queremos transformar un AFN en un AFD, debemos cuidar las transiciones. Es válida la transformación y siempre se puede realizar. El número de estados obtenidos es igual a la cardinalidad del conjunto potencia de los estados del AFN. Teorema de transformación AFN a AFD Para todo AFN N existe algún AFD D tal que L(N)=L(D) Un AFN con transiciones puede ser convertido en un AFN sin transiciones , eliminando las transiciones vacías, sin alterar el comportamiento del autómata. Para hacer esto, es necesario comprender que las deltas manejadas tienen una diferencia cuando se trata de la cerradura al vacío, ya que en el AFN sin la cerradura al vacío de un estado es solamente el mismo estado. Lema. Para cada x,y y A K, (A,xy) = ((A,x),y) 12 El lema anterior nos dice que es posible separar las cadenas en una operación de transición de un Autómata Finito. Esta separación nos ayudará a simplificar el rastreo de la cadena general. Ejercicios. a) Obtener un AF que acepte ((a+b)(a+b))*(ab+(ba)*) b) Obtener una ER para el lenguaje generado por el siguiente autómata: En este capítulo se enseñó el concepto de Expresión Regular y su relación para ser representado por un Autómata Finito. La construcción de AF’s tiene como base los grafos de transición, los cuales nos muestran cómo un lenguaje puede ser reconocido por dicho grafo. Ahora estamos preparados para profundizar un poco más en las Expresiones Regulares, tema del siguiente capítulo. 13