Asignatura: Teoría de la Computación Unidad 1: Lenguajes Regulares Tema 1: Autómatas de Estados Finitos Autómatas de Estados Finitos Definición de Autómatas de estados finitos: Tipo Lenguaje Máquina Gramática G = (V,T,P,S) Gramática Regular 3 Lenguaje Regular Autómata finito A è aB, A è a (A,B en V y a en T) Autómata de Estados Finitos (AF): Describen, reconocen y definen a los Lenguajes Regulares. Modelo Matemático de un sistema con estados y salidas discretas. Tipos de Autómatas Finitos: - Autómata Finito Determinista (AFD). No pueden estar en más de un estado simultáneamente. - Autómata Finito No Determinista (AFN). Puede estar en varios estados al mismo tiempo. Definición de Autómatas de estados Finitos Deterministas (AFD): Un AFD es una quíntupla A = (Q , Σ, δ, q0 , F) Siendo: Q = conjunto finito de estados. Σ = conjunto finito de símbolos del alfabeto. q0 = es el estado inicial (denotado con flecha ) a inicio F = conjunto de estados finales (o estados de aceptación). F δ = La función de transición entre estados δ: Q x Σ Q Por ejemplo: si p y q estan en Q y a en Σ, Se define la transición δ(q,a) = p. En la figura se observa como hay una transición de q a p dado a. Es decir, existe un arco etiqueta a entre q u p. Q Los estados de aceptación se denotan gráficamente con un doble círculo y en la tabla de transición con asterisco al lado del estado. Por ejemplo si r esta en F debe ser denotado con doble circulo como se observa en la figura. Nota: En los AFD debe cumplirse que: Para toda a que esta en Σ existe exactamente una transición de salida de cada estado. Prof. Hilda Contreras Teoría de la Computación - Pregrado 1 Notación para la Función de Transición: Se tiene tres formas para presentar la función de transición cualquiera de ellas es suficiente para completar el diseño del AFD. Estas son: a) Diagrama de Transición b) Función de transición c) Tabla de Transiciones: Representación Tabular Ejemplo: Dado el lenguaje L = { x | x en {0,1} y x comienza con 0 }, es decir todas las cadenas binarias que comienzan con 0. El AFD que lo reconoce es el siguiente: M = (Q ,Σ, δ , q0 , F) Σ= {0,1}, F = {q1}, Q={q0,q1,q2} δ 0 1 --> q0 q1 q2 *q1 q1 q1 q2 q2 q2 Función de transición δ δ(q0,0) = q1 δ(q0,1) = q2 δ(q1,0) = q1 δ(q1,1) = q1 δ(q2,0) = q2 δ(q2,1) = q2 Las tres representaciones de la función de transición son equivalentes, y cada suficiente para dar el AF. Puede escoger una representación pero comprendiendo la relación entre ellas. Prof. Hilda Contreras Teoría de la Computación - Pregrado 2 Ejecución de un Autómatas de estados finitos determinista AFD: Para la ejecución formal de un AFD se utiliza la definición de la función de transición extendida sobre cadenas δˆ δˆ = Q x Σ* Q 1) δˆ(q,ε) = q 2) Para todo w en Σ* y a en Σ δˆ(q,wa) = δ (δˆ(q,w),a) Por ejemplo: Dado el AFD anterior que reconoce el lenguaje L = { x | x en {0,1} y x comienza con 0 } , pruebe si las cadenas w1 = 010 y w2 = 101 están en el lenguaje L δˆ(q0,010) = δ (δˆ(q0,01),0) = δ (δ (δˆ(q0,0),1),0) = δ (δ (δ (δˆ(q0,ε),0),1),0) δ (δ (δ (q0,0),1),0) δ (δ (q1,1),0) δ (q1,0) = q1 Acepto al terminar de procesar la cadena y quedar en un estado de aceptación (esta en F) δˆ(q0,101) = δ (δˆ(q0,10),1) = δ (δ (δˆ(q0,1),0),1) = δ (δ (δ (δˆ(q0,ε),1),0),1) δ (δ (δ (q0,1),0),1) δ (δ (q2,1),0) δ (q2,0) = q2 No acepto al terminar de procesar la cadena y quedar en un estado que no es de aceptación. Lenguaje aceptado por un AFD. Dado M = (Q ,Σ, δ , q0 , F) un AFD, el lenguaje L aceptado por M está definido por: L(M)= { w | w en Σ* y δˆ(q0,w) pertenece a F } Nota: el lenguaje de M, es un conjunto de cadenas w que llevan al autómata M desde q0 a un estado de aceptación. Si L es un L(M) para algún AFD M, entonces decimos que L es un “Lenguaje Regular”. Nota importante: Para poder verificar si la cadena w esta (es aceptada) o no (no es aceptada) en L se debe terminar de procesarse la cadena w. Ejemplo: Dado el lenguaje L = { w | w tiene un número par de ceros y unos } L = { 00, 11, 1100, 0011, 0101, 1010, 001010, … } M = (Q, Σ, δ, q0, F) Σ = {0,1} , Q = {q0,q1,q2,q3} F = { q3 } Para la cadena 0101 probar el AFD δˆ(q0,0101) = δ (δˆ(q0,010),1) = δ (δ (δˆ(q0,01),0),1) = δ (δ (δ (δˆ(q0,0),1),0),1) = δ (δ (δ (δ (δˆ(q0,ε),0),1),0),1) δ (δ (δ (δ (q0,0),1),0),1) δ (δ (δ (δ (q1,1),0),1) δ (δ (q3,0),1) δ (q2,1) = q0, Acepto al terminar de procesar la cadena y quedar en un estado de aceptación q0 (q0 esta en F es verdadero) Ejercicios AFD: Para Σ = {0,1} construya un AFD que acepte los siguientes lenguajes: Prof. Hilda Contreras Teoría de la Computación - Pregrado 3 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 número de ceros es divisible por 3. d) El conjunto de cadenas que terminan con 01. e) El conjunto vacío. f) El conjunto de la cadena vacía. g) Elabore un algoritmo para implementar el funcionamiento de un AFD en un computador (debe reflejar el estado, la función de transición y simular el funcionamiento y definición del AFD). Nota: El compilador de un lenguaje de programación implementa AFD. Autómata Finito No Determinista AFND. Son autómatas de estados finitos que tienen la capacidad de estar en más de un estado simultáneamente. Ventaja: son más compactos, flexibles y fáciles de diseñar que los AFD permiten cero, una o más transiciones de salida de un estado para el mismo símbolo. No hay que considerar todos los casos en cada estado. Q La diferencia con AFD es la función δ: Q x Σ 2 En la figura δ(q,a) = {p, r} A=(Q ,Σ, δ, q0, F) δ: Q x Σ Q* δ(q,a) = R , R Q , δ(q,a) = {p, r} ó también δ: Q x Σ Q* Función de Transición Extendida: δˆ = Q x Σ* Q* 1) δˆ(q,ε) = {q} 2) δˆ(q,xa) = { r | para algún p en δˆ(q,x), δˆ(p,a) = r } Sea w de la forma w = xa donde a es el símbolo final (sufijo de longitud 1) de w y x el resto de w. Entonces: . . . Extensión para Q* x Σ Prof. Hilda Contreras Teoría de la Computación - Pregrado 4 1) δ(P,w) = Lenguaje aceptado por un AFN. Dado M = (Q, Σ, δ, q0 , F) un AFN, el lenguaje L aceptado por M está definido por: L(M)= { w | w en Σ* y δˆ(q0,w) F≠} Es el conjunto de cadenas pertenecientes a Σ* tal que ejecutar el AFN desde el estado inicial q0 con la cadena w, la función de transición extendida δˆ(q0,w) contiene al menos un estado de aceptación (es diferente del vacío la intersección con F). Ejemplo: Dado el lenguaje L= { x | x en {0,1} y termina en 01}, hallar el AFN que lo reconozca L={ 01, 0001, 101, 1001, 10101, … } A = (Q, Σ, δ, q0, F) Q = { q0, q1, q2 } Σ = { 0,1 } F = {q2} 1 0 1 0 1 Para las cadenas w1 = 01 y w2 = 10101 se muestra la ejecución formal a partir de la función de transición extendida: δˆ(q0,01) = δ (δˆ(q0,0),1) = δ (δ (δˆ(q0,ε), 0),1) δ (δ(q0, 0),1) δ ({q0, q1},1) = δ (q0,1) U δ(q1,1) = {q0} U {q2} = {q0,q2} , Acepto porque {q0,q2} {q2} ≠ , es decir al menos uno de los estados del autómata, luego de procesar la cadena, es de aceptación δˆ(q0,10101) = δ (δˆ(q0,1010),1) = δ(δ(δ(δ(δ(δˆ(q0,ε),1),0),1),0),1) δ(δ(δ(δ(δ(q0,1),0),1),0),1) δ(δ(δ(δ({q0},0),1),0),1) δ(δ(δ({q0,q1},1),0),1) δ({q0,q1},1) = δ (q0,1) U δ(q1,1) = {q0} U {q2} = {q0,q2} δ(δ({q0,q2},0),1) δ({q0,q2},0) = δ (q0,0) U δ(q2,0) = {q0,q1} U = {q0,q1} δ({q0,q1},1) = δ (q0,1) U δ(q1,1) = {q0} U {q2} = {q0,q2}, acepto porque {q0,q2} {q2} ≠ , es decir al menos uno de los estados es de aceptación de F Ejercicios AFN: Prof. Hilda Contreras Teoría de la Computación - Pregrado 5 Construya un AFN que acepte los siguientes lenguajes: a) Conjunto de cadenas basadas en Σ={a,b,c} cuyo último símbolo no haya aparecido antes en la misma entrada. b) Conjunto de 0 y 1 que contenga 2 ceros separados por un número de posiciones múltiplo de 3. Nótese que 0 es un múltiplo de 3 valido. Equivalencia entre AFD y AFN: - Todo Lenguaje Regular puede describirse con ambos AFN y AFD. - Generalmente un AFN es más fácil de capturar, y un AFD es mas fácil de implementar. - Tienen casi el mismo número de estados. El AFD más grande puede tener 2n estados y el AFN mas pequeño solo tiene n estados. Teorema: Si L es aceptado por un AFN entonces existe un AFD que acepta L (es decir, ambos aceptan la misma clase de lenguaje). Algoritmo para la Construcción de Subconjuntos: Este algoritmo permite a partir de un AFN 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 AFN. AFN N = (QN ,Σ, δN, q0 , FN) AFD D = (QD ,Σ, δD, {q0} , FD) Tal que L(N) = L(D) (el lenguaje reconocido por el autómata N sea el mismo que el lenguaje reconocido por el autómata D, por tanto sean equivalentes) Algoritmo: - Σ son iguales de N y D. * - QD es el conjunto de los subconjuntos de QN, (QD ) conjunto potencia. No todos los estados de QD son accesibles desde q0, esos son eliminados. - FD es el conjunto de subconjuntos S 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 aceptación de N. - Para todo S QN y a en Σ , entonces δD(S,a) = Ejemplo: Dado N = (QN ,Σ, δN, q0 , FN) un AFN, Σ={0,1} y QN = {q0,q1,q2}, FN = {q2} δN q0 q1 q3 Prof. Hilda Contreras Teoría de la Computación - Pregrado 0 {q0,q1} 1 {q0} {q1} 6 Obtener D un AFD tal que L(N) = L(D) a través del algoritmo de construcción de subconjuntos D = (QD ,Σ, δD, {q0} , FD) QD = ( , {q0}, {q1}, {q2}, {q0,q1}, {q0,q2}, {q1,q2}, {q0,q1,q2}} FD = ({q2}, {q0,q2}, {q1,q2}, {q0,q1,q2}} δD({q0},0) = δN(q0,0) = {q0,q1} δD({q0},1) = δN(q0,1) = {q0} δD({q0,q1},0) = δN(q0,0) U δN(q1,0) = δD({q0,q1},1) = δN(q0,1) U δN(q1,1) = δD({q0,q1},1) = δN(q0,1) U δN(q1,1) = δD({q0,q2},0) = δN(q0,0) U δN(q2,0) = δD({q0,q2},1) = δN(q0,1) U δN(q2,1) = {q0,q1} U = {q0,q1} {q0} U {q2} = {q0,q2} {q0} U {q2} = {q0,q2} {q0,q1} U = {q0,q1} {q0} U = {q0} Para w= 10101 en Σ* δDˆ({q0},10101) = δD (δDˆ({q0},1010),1) = δD (δD (δD (δD (δD (δDˆ({q0},ε),1),0),1),0),1) δD (δD (δD (δD (δD ({q0},1),0),1),0),1) = δD (δD (δD (δD (δD ({q0},1),0),1),0),1) = δD (δD (δD (δD({q0},0),1),0),1) = δD (δD (δD ({q0,q1},1),0),1) = δD (δD ({q0,q2},0),1) = δD ({q0,q1},1) = {q0,q2} Acepto porque {q0,q2} esta en FD La demostración de este algoritmo esta en el libro [1]: Se demuestra por inducción sobre el tamaño de w, donde el caso base δNˆ(q0, ε) = δDˆ({q0}, ε) y para el caso inductivo δNˆ(q0, w) = δDˆ({q0}, w) Automatas Finitos con Transiciones espontáneas (AFN-ε) Es un AFN que permite transiciones para ε. Antes los AF no se movían con la cadena vacía, es decir δNˆ(q, ε) = {q} y δDˆ(q, ε) = q, los AF se quedaban en el mismo estado. Ahora con AFN-ε se tienen transición espontáneas sin recibir o procesar ningún símbolo de la entrada. Se aplica si ε no pertenece al conjunto de símbolos Σ. Utilidad: - Facilidad de Programación. - Relación directa con las expresiones regulares (equivalencia demostrada formalmente) Un AFN-ε es una quíntupla: A=(Q ,Σ, δ, q0, F) Siendo: Q = conjunto finito de estados. Σ = conjunto finito de símbolos del alfabeto. q0 = es el estado inicial (denotado con flecha ) a inicio F = conjunto de estados finales (o estados de aceptación). F δ = La función de transición entre estados δ: Q x Σ U {ε} Q* Prof. Hilda Contreras Q Teoría de la Computación - Pregrado 7 n m p Ejemplo: Dado L = { 0 1 2 | n,m,p ≥ 0 }, el lenguaje de todas las cadenas de 0, 1 o más ceros n m p (0 ) seguidas de 0, 1 o más unos (1 ), y seguidas de 0, 1 o más dos (2 ). Los siguientes autómatas reconocen a L: AFN : AFN-ε : Probando la cadena 002 1 0 Nota: en la tabla de transición puede o no asumirse la transición espontánea de ε. Es decir, δ(q,ε) = {q}. Por ejemplo en el estado q2, puede ser pero sin embargo también es U {q2} Ejecución de un AFN-ε: Dada una cadena y un AFN-ε, para reconocer dicha cadena se debe aplicar la función Extendida para cadena δ^: Q x Σ* Q* Donde δ^(q,w) es el conjunto de todos los estados pi tal que se puede ir de q a cada pi por un camino etiquetado w que puede incluir arcos etiquetados ε. Para calcular este camino es necesario definir el término ε-clausura de un estado. ε-clausura (q) = es el conjunto de todos los estados a los cuales se puede llegar a partir de q siguiendo un camino de arcos etiquetados con ε únicamente. Definición recursiva de ε-clausura (q): Base: ε-clausura(q) = q , es decir por definición δ(q,ε) = q, podemos imaginarnos un bucle de un estado a si mismo etiquetado ε Paso inductivo: Si δ es la función de transición de AFN-ε y p está en la ε-clausura(q), es decir δ(q,ε)=p entonces la ε-clausura(q) también contiene los estados δ(p,ε). Ver siguiente figura Prof. Hilda Contreras Teoría de la Computación - Pregrado 8 ^ Definir δ : 1) δ^(q0,ε) = ε-clausura(q0) 2) Para todo w en Σ* y a en Σ δ^(q,wa) = ε-clausura(P), Donde: ε-clausura(P) = { p | para algún r en δ^(q,w), p en δ(r,a) } Nota: aplicar ε-clausura a cada p. R es subconjunto de Q: 3) δ(R,a) = 4) ^ Entonces δ (q,w) = δ^(q,x) = {r1,r2,...,rk} con w = xa . Prof. Hilda Contreras Teoría de la Computación - Pregrado 9 y Ejemplo: Dada la cadena w= 02 determinar si pertenece o no al lenguaje reconocido por el siguiente AFN-ε ε-clausura(q0) = { q0,q1,q2} ε-clausura(q1) = {q1,q2} ε-clausura(q2) = {q2} δ^(q0,02) = ε-clausura(δ(δ^(q0,0),2)) = ε-clausura(δ(ε-clausura(δ(δ^(q0,ε),0)),2)) = ε-clausura(δ(ε-clausura(δ({q0,q1,q2},0)),2)) ya δ^(q0,ε) = ε-clausura(q0) = {q0,q1,q2} = ε-clausura(δ(ε-clausura({q0}),2)) = ε-clausura(δ({q0,q1,q2},2)) = ε-clausura({q2}) ya δ({q0,q1,q2},0) = {q0 } U U = {q0 } ya ε-clausura({q0}) = ε-clausura(q0 ) = {q0,q1,q2} ya δ({q0,q1,q2},2) = U U {q2} = {q2 } = {q2 } Acepto la cadena w “02” ya que δ^(q0,02) F≠ Lenguaje Aceptado por un AFN-ε : Dado un AFN- ε E=(Q ,Σ, δ, q0 , F) el L(E) se define como: L(E)= { w | δ^(q0,w) F≠} Equivalencia AFN- ε con AFD (construcción de subconjuntos de ε) Teorema: Si L es aceptado por un AFN con ε transiciones entonces L es aceptado por un AFN sin ε-transiciones. (Equivalencia Eliminación de ε-transiciones) Teorema: Un lenguaje L es aceptado por un AFN- si y solo si es aceptado por un AFD. Algoritmo para pasar de un AFD a un AFN-ε E es AFN- y A es AFD L(E) = L(A) es decir δE^(q0E,w) = δD^(q0D,w) para todo w en L E (AFN-ε) = (QE,Σ,δE, q0E,FE) D (AFD) = (QD,Σ,δD, q0D,FD) • • • • q0D = ε-clausura(q0E) QD = QE *, es decir el conjunto de subconjuntos de QE FD = { s | s en QD y S FE ≠ } δD (S,a) para todo a en Σ y S en QD = Prof. Hilda Contreras Teoría de la Computación - Pregrado 10 = { }= Ejemplo: Dado el AFN-ε E halle un AFD equivalente. E = (Q, Σ, δ, q0, F) Q = {q0,q1,q2} Σ = {0,1,2} F = {q2} D =( , , , ( ( )= ( )= ) )= Prof. Hilda Contreras Teoría de la Computación - Pregrado 11 AFD: Se ve cada estado como un Conjunto de etiqueta. AFN: Se interpreta el contenido de la etiqueta de cada estado. Hay dos formas de interpretar la construcción de subconjuntos- , una para crear un AFD y otra AFN. La idea es llegar a un AF más fácil de implementar los cuales son AFD. Ejercicios: 1. Obtenga un diagrama de transición de un AFN que acepte las cadenas de 0’s y 1’s que tengan 2 ceros separados por una cadena cuya longitud es 3i para algún i 0.Usando el algoritmo visto en clase, convierta este autómata en un AFD. 2. Obtenga un autómata finito (de cualquier tipo) para reconocer los siguientes lenguajes: • • • • • • • • 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 antepenúltima posición cadenas de longitud 4 1. El conjunto de enteros y números en punto flotante. Usando el Σ = { +, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, E, . } 2. Construir un AFD equivalente a los siguientes autómatas : a) M1 = ({p,q,r,s}, {0,1}, δ, p, {s}) donde δ está dada por : δ p q r *s 0 {p, q} {r} {s} {s} 1 {p} {r} {} {s} b) M2 = ({p,q,r,s},{0,1}, δ, p,{q,s}) donde δ está dada por: δ p *q r *s 0 {q, s} {r} {s} {} 1 {q} {q,r} {p} {p} 1. Dado el siguiente AFN-ε E, aplicando el procedimiento de construcción de subconjunto, convertir a un AFD E = (Q, Σ , δ, p, F) Q = { p, q, r } Σ = { a, b, c } F={r} δ p ε Ф a {p} Prof. Hilda Contreras b {q} c {r} Teoría de la Computación - Pregrado 12 q * r {p} {q} {q} {r} {r} Ф Ф {p} 2. Obtener a partir de los siguientes AFND-ε, un AFD equivalente. a) M1 = ( {q0,q1,q2,q3,q4}, {a,b}, δ, q0, { q4 } ) donde δ está dada por: δ q0 q1 q2 q3 q4 a {q1,q2} {} {q4} {} {} b {q1,q3} {} {} {q4} {} ε {} {q3} {} {} {} b) M2 = ( {q0,q1,q2,q3} , {a,b,c} , δ , q0 , {q3} ) donde δ está dada por : δ q0 q1 q2 q3 a {q0,q1} {} {} {} b {} {q1,q3} {q2} {} c {} {} {} {q3} ε {q2} {} {q3} {} Preguntas • Determine las diferencias entre un AFD y un AFN. • ¿Cuándo usar cada uno de estos autómatas? • ¿Puede obtener un AFND algorítmicamente a partir de un AFD?, ¿por qué? • Piense en aplicaciones de la vida real que pueden ser vistos como AF. Referencias [1] John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman. (2002), “Introducción a la Teoría de Autómatas y Lenguajes Formales”. PrenticeHall. Prof. Hilda Contreras Teoría de la Computación - Pregrado 13