TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES Práctica 3

Anuncio
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]];
]
Descargar