TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES Práctica 3 1. Equivalencia entre autómatas 1.1. Equivalencia entre AFD y AFN 1.1. Equivalencia entre AFD y AFλ 2. Ejercicios propuestos 1. Equivalencia entre autómatas 1.1 Equivalencia entre AFD y AFN La equivalencia entre AFD y AFN es clara entendiendo todo AFD como un caso particular de un AFN. En el otro sentido, a partir un AFN A=(Q,Σ, δ,q0,F) se puede construir otro AFD A'=(Q',Σ, δ', q0', F') equivalente (que acepte el mismo lenguaje), de la siguiente forma: z z Q' = 2Q q0' = {q0} z F' = { q' ∈ Q' | q' ∩ F ≠ ∅ } z δ'(q',a) = ∪ (q ∈ q')δ(q,a) : q' ∈ Q, a ∈ Σ Figura 1. Autómata finito no determinista del ejemplo 1. Ejemplo 1. Dado el autómata de la figura 1, el proceso de construcción de un AFD equivalente parte del estado inicial {q0}, y determina el conjunto de estados alcanzables con cada símbolo del alfabeto. De esta forma, por ejemplo, al considerar el símbolo a se alcanzan los estados {q0, q1, q2}. Cada uno de los conjuntos de estados que aparezcan se considera como uno de los estados del AFD equivalente, determinandose para cada uno de ellos su función de transición. El proceso se repite mientras aparezcan nuevos estados. La figura 2 muestra la tabla de transiciones del AFD. a b c {q0,q1,q2} {q1,q2} {q2} {q0} {q0,q1,q2} {q0,q1,q2} {q1,q2} {q2} {q1,q2} {q2} {q1,q2} ∅ {q2} ∅ ∅ {q2} Figura 2. Tabla de transiciones del AFD equivalente al AFN de la figura 1 a partir de esta tabla el diagrama de transiciones queda como muestra la figura 3. Figura 3. Autómata finito determinista equivalente. Ejemplo 2. Dado el AFN de la figura 4 la tabla de transiciones del AFD equivalente sería la mostrada en la figura 5, con lo que el diagrama de transiciones del AFD quedaria como se muestra en la figura 6 Figura 4. AFN ejemplo. {q0} a {q0} b {q0,q1} {q0,q1} {q0} {q0,q1,q2} {q0,q1,q2} {q0,q1,q2} {q0,q1,q2} Figura 5. Tabla de transiciones del AFD equivalente al AFN de la figura 4. Figura 6. AFD equivalente al AFN de la figura. El estado {q0,q1,q2} es el único estado final del AFD porque es el único que contiene el estado q2, estado final del AFN original. 1.2 Equivalencia entre AFD y AFλ A partir de todo autómata finito no determinista con λ-transiciones A=(Q,Σ, δ,q0,F), se puede construir un AFD equivalente. Para ello seguiremos los siguientes pasos: 1. Obtener un AFN A'=(Q,Σ,δ', q0, F') donde: { F' = F ∪ {q0}, si λ-clausura(q0) ∩ F ≠ ∅ F' = F, si λ-clausura(q0) ∩ F = ∅. { δ'(q,a) = τ(q,a) tomando a ∈ Σ, x ∈ Σ*, q ∈ Q y donde: τ(q,λ) = λ-clausura(q) τ(q,xa) = λ-clausura ( ∪(p ∈ τ(q,x)) δ(p,a)) de esta forma A' no posee λ-transiciones. 2. A partir del AFN obtenido, aplicar el método de la sección 1.1 para obtener un AFD a partir de un AFN. Figura 7. Ejemplo de autómata finito con transiciones vacias Ejemplo 3. Dado el AFλ de la figura 7, representamos en la figura 8 su tabla de transiciones y la λ-clausura de cada estado. a q0 ∅ b {q2} λclausura {q0,q1} {q0,q1} q1 {q1} {q3} q2 {q1} {q2,q3} {q0,q1,q2} q3 ∅ ∅ {q0,q1,q3} Figura 8. Tabla de transiciones y λ-clausura de cada estado del AFλ de la figura 7. Para obtener el conjunto de transiciones del AFN equivalente aplicaremos la construcción indicada al principio de la sección. Por ejemplo, para obtener el conjunto de transiciones del estado q0 con el símbolo b en el AFN equivalente: z partiremos de la λ-clausura de q0 ({q0,q1}) z obtendremos los estados que se alcanzan a partir de {q0,q1} utilizando una b ({q2} ∪ {q3}) z obtendremos la λ-clausura de este conjunto: λ-clausura({q2,q3}) = {q0,q1,q2} ∪ {q0,q1,q3} = {q0,q1, q2, q3} Procediendo de igual forma para todo q ∈ Q y todo a ∈ Σ, obtenemos la tabla de transiciones del AFN sin transiciones vacias que se muestra en la figura 9. En este AFN, el único estado final es q3 porque λ-clausura(q0) ∩ F = ∅. Una vez obtenida la tabla de transiciones del AFN, se puede construir el AFD equivalente que queda como muestra la figura 10. a b q0 {q0,q1} {q0,q1,q2,q3} q1 {q0,q1} {q0,q1,q2,q3} q2 {q0,q1} {q0,q1,q2,q3} q3 {q0,q1} {q0,q1,q2,q3} Figura 9. Tabla de transiciones del AFN equivalente al AFλ de la figura 7. Figura 10. Autómata finito determinista equivalente al AFλ de la figura 7. Ejemplo 4. Otro ejemplo de AFλ es el mostrado en la figura 11. Figura 11. Autómata finito con transiciones vacías. La tabla de transiciones y la λ-clausura de cada estado del autómata de la figura 11 se muestran en la figura 12. λclausura {q1} ∅ {q0,q2,q3} {q1} ∅ {q3} 0 q0 q1 1 q2 {q0} {q3} q3 ∅ {q3} {q2} {q3} Figura 12. Tabla de transiciones y λ-clausura de cada estado en el AFλ de la figura 11. Como ejemplo del paso a AFN, para obtener el conjunto de transiciones del estado q1 con el símbolo a: z z z partiremos de la λ-clausura de q1 ({q1}) obtendremos los estados que se alcanzan a partir de {q1} utilizando una a (conjunto vacio) λ-clausura(∅) = ∅ El AFN resultado tiene como estados finales {q0, q3} porque en este caso λ-clausura(q0) ∩ F ≠ ∅. Al repetir el proceso para cada estado se obtiene la tabla de transiciones de la figura 13. A partir de ella, se puede obtener el AFD de la figura 14. 0 1 q0 {q0,q1,q2,q3} {q3} {q3} q1 ∅ q2 {q0,q2,q3} {q3} {q3} q3 ∅ Figura 13. Tabla de transiciones del AFN equivalente al AFλ de la figura 11 Figura 14.Autómata finito determinista equivalente al AFλ de la figura 11 2. Ejercicios propuestos Ejercicio 1. Diseñar un módulo en Mathematica que reciba un AFN y devuelva un AFD equivalente al introducido. Ejercicio 2. Diseñar un módulo en Mathematica para calcular la λ-clausura de un estado de un autómata. Ejercicio 3. Sirviéndose del ejercicio 2, diseñar un módulo para calcular la λ-clausura de un conjunto de estados. Ejercicio 4. Diseñar un módulo en Mathematica que reciba un AFλ y devuelva un AFD equivalente al introducido. Solución al ejercicio 2 (* lambda clausura de un estado *) lc[q_,A_]:=Module[{xrevisar,lclausura,est,trans}, (* inicializacion *) lclausura={q}; xrevisar={q}; (* mientras queden estados por comprobar... *) While[xrevisar =!={}, (* ... considerar el primero de ellos ... *) est=First[xrevisar]; xrevisar=Rest[xrevisar]; (* ... y las transiciones vacias que parten de él *) trans=Cases[A[[3]],{est,{},_}]; (* Para todas ellas ... *) For[i=1,i<=Length[trans],i++, (* ... si se alcanza un nuevo estado ... *) If[!MemberQ[lclausura,trans[[i,3]]], (* ... se almacena para considerarlo *) AppendTo[lclausura,trans[[i,3]]]; AppendTo[xrevisar,trans[[i,3]]] ] ] ]; Return[Union[lclausura]]; ]