Aplicación de las Expresiones Regulares a los Autómatas Finitos

Page 1

TODOS LOS DERECHOS RESERVADOS


INDICE CONTENIDO

PÁG

Precedencia de los operadores en las expresiones regulares…….

5

Ejemplos………..........................................................

5

Ejerccios………………….................................................................... Autómatas Finitos y Expresiones Regulares…............................................................................

6-8 9

Teoremas..................................................................

10 -12

Demostración...............................................................

12- 14

Ejercicios Resueltos........................................................................ Referencias Bibliográficas.............................................................

14 -16 17


EDITORIAL Curso Especial de Grado Universidad de Oriente Núcleo de Monagas Lógica Computacional

EDICIÓN-DIRECCIÓN: KEILA BELLORÍN Keilaandreina1213@gmail.com

DISEÑO Y PRODUCCIÓN: MARELIA BRAVO Marelia_bravo27@hotmail.com


INTRODUCCIÓN Como con otras álgebras, los operadores de las expresiones regulares tienen un orden de “precedencia” prefijado, lo que significa que se asocian con sus operando en un determinado orden. Estamos familiarizados con el concepto de precedencia en las expresiones aritméticas ordinarias. Por ejemplo, sabemos que en xy+z primero se realiza el producto xy y luego la suma, y esto es equivalente a escribir la expresión empleando paréntesis así (xy)+z y no de la forma x(y+z).De forma similar, en aritmética, dos operadores iguales se agrupan comenzando por la izquierda, por lo que x−y−z es equivalente a (x−y) −z, y no a x−(y−z).


Precedencia de los operadores en las expresiones regulares

C

Como con otras álgebras, los operadores de las expresiones regulares tienen un orden de “precedencia” prefijado, lo que significa que se asocian con sus operando en un determinado orden. Estamos familiarizados con el concepto de precedencia en las expresiones aritméticas ordinarias.

Por

ejemplo:

sabemos que en xy+z primero se realiza el producto xy y luego la suma, y esto es equivalente a escribir la expresión empleando paréntesis así (xy)+z y no de la forma x(y+z).De forma similar, en aritmética, dos operadores iguales se agrupan comenzando por la izquierda, por lo que x−y−z es equivalente a (x−y)−z, y no a x−(y−z). En las expresiones regulares, el orden de precedencia de los operadores es el siguiente:

1.

El operador asterisco (_) es el de precedencia más alta. Es decir, se aplica sólo a la secuencia más corta de símbolos a su izquierda que constituye una expresión regular bien formada.

2.

El siguiente en precedencia es el operador de concatenación, o “punto”. Después de aplicar todos los operadores _ a sus operando, aplicamos los operadores de concatenación a sus operando. Es decir, todas las expresiones yuxtapuestas (adyacentes sin ningún operador entre ellas). Dado que la concatenación es una operación asociativa, no importa en qué orden se realicen las sucesivas concatenaciones, aunque si hay que elegir, las aplicaremos por la izquierda. Por ejemplo, 012 se aplica así: (01)2.

3.

Por último, se aplican todos los operadores de unión (+) a sus operando. Dado que la unión también es asociativa, de nuevo no importa en qué orden se lleven a cabo, pero supondremos que se calculan empezando por la izquierda. Por supuesto, en ocasiones no desearemos que una expresión regular sea

5


agrupada según la precedencia de los operadores. En dicho caso, podemos emplear paréntesis para agrupar los operandos de la forma que deseemos. Además, nunca está de más encerrar entre paréntesis los operando que se quieran agrupar, incluso aunque la agrupación deseada sea la prevista por las reglas de precedencia. EJEMPLO 1 La expresión 01∗+1 se aplica de la forma siguiente: (0(1∗)) +1. El operador _ se aplica en primer lugar. Dado que el símbolo 1 situado inmediatamente a su izquierda es una expresión regular válida, éste es el operando de *.A continuación, realizamos las concatenaciones entre 0 y (1∗), obteniendo la expresión 0(1∗) Por último, el operador de unión se aplica entre la última expresión y la que está a su derecha, que es 1. Observe que el lenguaje de la expresión dada, aplicada de acuerdo con las reglas de precedencia, es la cadena 1 más todas las cadenas formadas por un 0 seguido de cualquier número de 1s

(incluyendo ningún 1). Si hubiéramos querido aplicar la concatenación antes que el operador _, podríamos haber empleado paréntesis así (01)∗ +1. El lenguaje de esta expresión es la cadena 1 y todas las cadenas que repitan 01, cero o más veces. Si hubiéramos querido realizar en primer lugar operación de unión, podríamos haber encerrado entre paréntesis dicha operación definiendo la expresión 0(1∗+1). El lenguaje de esta expresión es el conjunto de cadenas que comienzan con un 0 seguido de cualquier número de 1s. Ejercicios de la Sección 3.1: Ejercicio 3.1.1. Escriba expresiones regulares para los siguientes lenguajes: * a) El conjunto de cadenas del alfabeto {a,b,c} que contienen al menos una a y al menos una b. b) El conjunto de cadenas formadas por 0s y 1s cuyo décimo símbolo por la derecha sea 1. c) El conjunto de cadenas formadas por 0s y 1s con a

6


lo sumo una pareja de 1s consecutivos. ! Ejercicio 3.1.2. Escriba expresiones regulares para los siguientes lenguajes: * a) El conjunto de todas las cadenas formadas por ceros y unos tales que cada pareja de 0s adyacentes aparece antes que cualquier pareja de 1s adyacentes. b) El conjunto de cadenas formadas por ceros y unos cuyo número de ceros es divisible por cinco. Ejercicio 3.1.3: Escriba expresiones regulares para los siguientes lenguajes: a) El conjunto de todas las cadenas formadas por ceros y unos que contienen 101 como subcadena. b) El conjunto de todas las cadenas con el mismo número de ceros que de unos, tales que ningún prefijo tiene dos ceros más que unos ni dos unos más que ceros. c) El conjunto de todas las cadenas formadas por ceros y unos cuyo número de ceros es divisible por

cinco y cuyo número de unos es par. Ejercicio 3.1.4: Proporcione las descripciones informales de los lenguajes correspondientes a las siguientes expresiones regulares: * a) (1+ε )(00∗1)∗0∗. b) (0∗1∗)∗000(0+1)∗. c) (0+10)∗1∗. Autómatas finitos y expresiones regulares Aunque las expresiones regulares describen los lenguajes de manera completamente diferente a como lo hacen los autómatas finitos, ambas notaciones representan exactamente el mismo conjunto de lenguajes, que hemos denominado “lenguajes regulares”. Ya hemos demostrado que los autómatas finitos deterministas y los dos tipos de autómatas finitos no deterministas (con y sin transiciones ε) aceptan la misma clase de lenguajes. Para demostrar que las

7


expresiones regulares definen la misma clase, tenemos que probar que: 1. Todo lenguaje definido mediante uno de estos autómatas también se define mediante una expresión regular. Para demostrar esto, podemos suponer que el lenguaje es aceptado por algún AFD. 2. Todo lenguaje definido por una expresión regular puede definirse mediante uno de estos autómatas. Para esta parte de la demostración, lo más sencillo es probar que existe un AFN con transiciones-ε que acepta el mismo lenguaje. La Figura 3.1 muestra todas las equivalencias que se han probado o que van a probar. Un arco desde la clase X hasta la clase Y significa que todo lenguaje definido por la clase X también está definido por la clase Y. Dado que el grafo es fuertemente conexo (es decir, desde cualquiera de los cuatro nodos es posible llegar a

cualquier otro nodo), vemos que las cuatro clases son realmente la misma.

Figura 1 Esquema de demostración de la equivalencia de cuatro notaciones diferentes para los lenguajes regulares. De los AFD a las expresiones regulares La construcción de una expresión regular para definir el lenguaje de cualquier AFD tiene truco. Consiste básicamente en construir expresiones que describan conjuntos de cadenas que etiqueten ciertos caminos del diagrama de transiciones de un AFD. Sin embargo, estos caminos sólo pueden

8


pasar por un subconjunto limitado de estados. En una definición inductiva de estas expresiones, partiremos de las expresiones más simples que describen caminos que no pueden pasar a través de cualquier estado (es decir, son nodos simples o arcos simples), y construiremos inductivamente las expresiones que permitan caminos que pasen a través de caminos que progresivamente recorran conjuntos de estados más grandes. Finalmente, los caminos podrán pasar por cualquier estado; es decir, las expresiones que generemos al final representarán todos los caminos posibles. Estas ideas están contenidas en la demostración del siguiente teorema. TEOREMA: Si L = L(A) para algún AFD A, entonces existe una expresión regular R tal que L = L(R).

DEMOSTRACIÓN: Supongamos que los estados de A son {1,2, . . .,n} para algún entero n. No importa cuántos sean los estados de A, simplemente serán n siendo n finito y podemos hacer referencia a ellos de este modo como si fueran los n primeros números enteros positivos. La primera, y más difícil, tarea es la de construir una colección de expresiones regulares que describa, de manera progresiva, conjuntos cada vez más amplios de caminos en el diagrama de transiciones de A. Utilizamos R(k)i j como nombre de una expresión regular cuyo lenguaje es el conjunto de cadenas w tal que w es la etiqueta de un camino desde el estado i hasta el estado j de A, y dicho camino no tiene ningún nodo intermedio cuyo número sea mayor que k. Observe que los puntos inicial y final del camino no son “intermedios”, por lo que

9


no existe ninguna restricción para que i y/o j tengan que ser menores o iguales que k. La Figura 2 sugiere el requisito que deben cumplir los caminos representados por R(k)i j . La dimensión vertical representa el estado, desde 1 en la parte inferior hasta n en la parte superior, y la dimensión horizontal representa el recorrido a lo largo del camino. Observe que en este diagrama hemos supuesto que tanto i como j tienen que ser mayores que k, pero uno de ellos o ambos podrían ser menores o iguales que k. Observe también que el camino pasa a través del nodo k dos veces, pero nunca a través de un estado mayor que k, excepto en los puntos extremos. Para construir las expresiones R(k) i j , utilizamos la siguiente definición inductiva, comenzando en k = 0 y llegando finalmente a k = n. Fíjese en que cuando k

= n, no existe restricción en sobre el representado, ya existen estados que n.

ninguna absoluto camino que no mayores

BASE. El caso base es para k = 0. Puesto que todos los estados están numerados con 1 o un número mayor, la restricción sobre los caminos es que no deben tener ningún estado intermedio. Sólo existen dos tipos de caminos que cumplen esta condición:

Figura 3 Un camino cuya etiqueta pertenece al lenguaje de la expresión regular R(k) j . 1. Un arco desde el nodo (estado) i hasta el nodo j.

10


2. Un camino de longitud 0 que consta sólo de algún nodo i. Si i _= j, entonces sólo es posible el caso (1). Tenemos que examinar el AFD A y determinar aquellos símbolos de entrada a tales que exista una transición del estado i al estado j para el símbolo a. a) Si no existe tal símbolo a, entonces R(0) i j = / 0. b) Si existe solamente un símbolo a, entonces R(0)i j = a. c) Si existen símbolos a1,a2, . . . ,ak que etiquetan arcos desde el estado i hasta el estado j, entonces R(0)i j =a1 +a2+· · ·+ak. Sin embargo, si i = j, entonces los caminos válidos son el camino de longitud 0 y todos los bucles desde i a sí mismo. El camino de longitud 0 se representa mediante la expresión regular ε , ya que dicho camino no contiene símbolos a lo largo de él. Por tanto, añadimos ε a las distintas expresiones deducidas en los pasos anteriores (a) hasta (c). Es decir, en el caso (a) [no existe un símbolo a] la expresión es ε , en

el caso (b) [un símbolo a] la expresión es ε +a y en el caso (c) [múltiples símbolos] la expresión es ε +a1+a2+· · ·+ak.

PASO INDUCTIVO: Suponga que existe un camino desde el estado i hasta el estado j que no pasa por ningún estado mayor que k. Hay que considerar dos posibles casos:

1.

El camino no pasa a través del estado k. En este caso, la etiqueta sobre el camino está en el lenguaje de R(k−1)i j .

2. El camino pasa a través del estado k al menos una vez. Podemos dividir el camino en varios tramos, como se indica en la Figura 3.3. El primero de ellos va desde el estado i hasta el estado k sin pasar por k, el último tramo va desde el estado k al j sin pasar a través de k, y los restantes tramos intermedios van de k ak, sin pasar por k. Observe que si el camino atravesara el estado k sólo una vez, entonces no habría ningún tramo “intermedio”, sólo un camino desde i hasta k y un

11


camino desde k hasta j. El conjunto de etiquetas para todos los caminos de este tipo se representa mediante la expresión regular R(k−1) ik (R(k−1) kk )∗R(k−1) k j . Es decir, la primera expresión representa la parte del camino que alcanza el estado k por primera vez, la segunda representa la parte que va desde k hasta k cero, una o más de una vez, y la tercera expresión representa la parte del camino que abandona k por última vez y pasa al estado j. Si combinamos las expresiones para los caminos de los dos tipos anteriores, tenemos la expresión R(k)i j = R(k−1)i j +R(k−1)ik (R(k−1)kk )∗R(k−1)k j Para las etiquetas de todos los caminos desde el estado i al estado j que no pasan por ningún estado mayor que k. Si construimos estas expresiones en orden creciente de superíndices, dado que cada R(k) i j sólo depende

Figura 4 Un camino de i a j puede dividirse en segmentos en cada punto donde atraviesa el estado k. De las expresiones con superíndice más pequeño, entonces todas las expresiones estarán disponibles cuando las necesitemos. Luego tenemos R(n)i j para todo i y j. Podemos suponer que el estado 1 es el estado inicial, aunque los estados de aceptación podrían ser cualquier conjunto de estados. La expresión regular para el lenguaje del autómata es entonces la suma (unión) de todas las expresiones R(n)1 j tales que el estado j es un estado de aceptación. EJEMPLO 3 Vamos a convertir el AFD de la Figura 3.4 en una expresión regular. Este AFD acepta todas las cadenas que tienen al menos un 0. Para comprender por qué, observe que el autómata va

12


desde el estado inicial 1 al estado de aceptación 2 tan pronto como recibe una entrada 0. Después, el autómata permanece en el estado 2 para todas las secuencias de entrada. A continuación se especifican las expresiones básicas de la construcción del Teorema 3.4.

complejas que la primera teniendo en cuenta los caminos que pasan por el estado 1, luego los caminos que pasan por los estados 1 y 2, es decir, cualquier camino. La regla para calcular las expresiones R(1)i j es un caso particular de la regla generalidad en la parte inductiva del TEOREMA: R(1)i j = R(0)i j + R(0)i1 (R(0)11 )∗R(0)1 j (3.1)

Por ejemplo, R(0)11 tiene el término ε porque los estados inicial y final son el mismo, el estado 1. Contiene el término 1 porque existe un arco desde el estado 1 al estado 1 sobre la entrada 1. Otro ejemplo, R(0)12 es 0 porque hay un arco etiquetado como 0 desde el estado 1 hasta el estado 2. No existe el término ε porque los estados inicial y final son diferentes. Como tercer ejemplo, tenemos R(0)21 = / 0, porque no existe un arco desde el estado 2 al estado 1. Ahora tenemos que abordar la parte inductiva, construyendo expresiones más

La tabla de la Figura 3.5 proporciona primero las expresiones calculadas mediante la sustitución directa en la fórmula anterior y luego una expresión simplificada que podemos demostrar que representa el mismo lenguaje que la expresión más compleja. Por ejemplo, considere R(1)12 . Su expresión es R(0)12 +R(0)11 (R(0)11 )∗R(0)12 , la cual obtenemos a partir de (3.1) sustituyendo i = 1 y j = 2. Para comprender la simplificación, observe el principio general de que si R es cualquier expresión regular, entonces (ε +R)∗ = R∗. La

13


justificación es que ambos lados de la ecuación describen el lenguaje formado por

Figura 4 Un AFD que acepta todas las cadenas que tienen al menos un 0.

Figura 5 Expresiones regulares para caminos que sólo pueden pasar a través del estado 1. Cualquier concatenación de cero o más cadenas de L(R). En nuestro caso, tenemos (ε +1)∗ = 1∗; observe que ambas expresiones designan cualquier número de 1s. Además, (ε +1)1∗ = 1∗. De nuevo, se puede

observar que ambas expresiones designan “cualquier número de 1s”. Por tanto, la expresión original R(1)12 es equivalente a 0+1∗0. Esta expresión representa el lenguaje que contiene la cadena 0 y todas las cadenas formadas por un 0 precedido de cualquier número de 1s. Este lenguaje también puede describirse mediante la expresión más simple 1∗0. La simplificación de R(1)11 es similar a la simplificación de R(1)12 que acabamos de ver. La simplificación de R(1)21 y R(1)22 depende de las dos reglas correspondientes a la forma de operar de / 0. Para cualquier expresión regular R: 1. /0R = R/0 = / 0. Es decir, /0 es un aniquilador para la concatenación; da como resultado él mismo cuando se concatena por la izquierda o por la derecha con cualquier expresión. Esta regla es lógica, ya que para que una cadena sea el resultado de una concatenación, primero tenemos que determinar las cadenas de ambos argumentos de la concatenación. Cuando uno de los argumentos es /0, será

14


imposible determinar una cadena a partir de dicho argumento. 2. /0+R= R+ /0 = R. Es decir, /0 es el elemento identidad de la unión; da como resultado la otra expresión cuando aparece en una unión. Como resultado, una expresión como /0(ε +1)∗(ε +1) puede ser reemplazada por /0. Las dos últimas simplificaciones deberían ahora estar claras. A continuación calculamos las expresiones R(2)i j . La regla inductiva aplicada para k = 2 nos da:

expresiones en las que el primer estado sea el estado inicial y el segundo estado sea el estado de aceptación. En este ejemplo, siendo 1 el estado inicial y 2 el único estado de aceptación, sólo necesitamos la expresión R(2)12 . Esta expresión es 1∗0(0+1)∗ y es sencillo interpretarla. Su lenguaje consta de todas las cadenas que comienzan con cero o más 1s, seguidos de un 0 y de cualquier cadena de 0s y 1s. Dicho de otra forma, el lenguaje son todas las cadenas de 0s y 1s con al menos un 0.

R(2)i j = R(1)i j +R(1)i2 (R(1)22 )∗R(1)2 j (3.2) Si sustituimos las expresiones simplificadas de la Figura 3.5 en (3.2), obtenemos las expresiones de la Figura 3.6. Esta figura muestra también simplificaciones que siguen los mismos principios que hemos descrito para la Figura 3.5. La expresión regular final equivalente al autómata de la Figura 3.4 se construye calculando la unión de todas las

Figura 6 Expresiones regulares para los caminos que puede pasar por cualquier estado.

15


REFERENCIAS CONSULTADAS JOHN E. HOPCROFT Cornell University RAJEEV MOTWANI Stanford University JEFFREY D. ULLMAN Stanford University.Introducción a la teoría de autómatas lenguajes y computación Tercera Edición

http://eafranco.com/docencia/teoriacompu tacional/files/books/TeoriaDeAutomatas,lengua jesYComputacion-Hopcroft.pdf Consultado el 20 de Mayo de 2015.

16


17


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.