Está claro que cualquier AFD también es un AFND,
es decir, si es un lenguaje aceptado por un AFD, también está
aceptado por un AFND.
Simplemente existe como mucho una sola transición para cada
símbolo del alfabeta y para cada estado.
Pero también podemos construir para cada AFND un AFD equivalente, es decir, un autómata determinsta que acepta el mismo lenguaje.
Ejemplo: convertimos el AFND que acepta en un AFD equivalente:
Para el caso general tenemos:
Sea
un AFND, construimos un AFD
con
Se suele construir los estados necesarios del AFD a lo largo de la construcción en vez de coger por defecto todos los posibles subconjuntos, para evitar--en caso que sea posible--construir muchos estados que finalmente no se alcanza desde el estado inicial.
¿Porqué es correcta la construcción?
Tenemos que comprobar formalmente que si (siendo un AFND) acepta
,
entonces
(siendo el AFD construido) también lo acepta;
y si
acepta
, entonces
también lo hace, es decir,
que
.
Pues, sea un AFND y
el AFD correspondiente.
Sea
cualquier palabra aceptada por
.
Comprobamos que
, es decir,
:
Definimos los siguientes diagramas
es decir, si hacemos la transición en desde
a
leyendo
,
en otras palabras, usamos
, entonces existe (según
construcción) una transición en
de
(con
)
a
(con
) leyendo
, en otras palabras, existe
.
Para la palabra obtenemos:
donde la construcción va desde la izquierda, es decir, del estado
inicial, hacia la derecha, es decir, a un estado final.
Dado que acepta
,
es un estado final y siendo miembro
de un conjunto
, este será un estado final de
.
Entonces hemos comprobado que acepta
, y por eso
.
Ahora, sea
cualquier palabra
aceptada por
.
Comprobamos que , es decir,
:
Definimos los siguientes diagramas
es decir, si hacemos la transición en desde
leyendo
a
,
en otras palabras, usamos
, entonces existe (según
construcción) una transición en
de algún
(con
)
leyendo
a algún
(con
), en otras palabras, existe
.
Para la palabra obtenemos:
donde la construcción va ahora desde la derecha, es decir, un estado
final, hacia la izquierda, es decir, al estado inicial.
Dado que acepta
,
es un estado final y un conjunto
no vacío, entonces existe un miembro
que también es elemento
de
y por consecuencia un
aplicando el diagrama y asi succesivamente
hasta llegar a
.
Entonces hemos comprobado que acepta
, y por eso
.
Finalmente tenemos
y
y por eso
.
Como se observa en la construcción puede ser que se usa
estados en el autómata determinista si el autómata
no-determinista tenía
estados, es decir, el crecimiento
del número de estados puede ser exponencial.
Surgen dos preguntas:
¿Existen AFNDs que producen un AFD de tal tamaño grande?
¿Son necesarios tantos estados (o existe una mejor forma de realizar la conversión)?
Un ejemplo para una respuesta a la segunda:
Usamos
como alfabeto. Definimos los siguientes
lenguajes (que dependen del número
):
es decir, todas las palabras con letras donde la primera mitad
se distingue de la segunda.
Es bastante claro que para cualquier existe un autómata que acepta
porque el lenguaje es finito (
).
En un libro (HotzEstenfeld) se encuentra el siguiente
AFND que acepta (dejan la comprobación al lector)
Bueno, con un poco de trabajo se puede comprobar (enumerando todos
los caminos desde el estado inicial hasta el estado final)
que en cada
uno de los caminos siempre existe en la primera parte una arista
con una (o una
) donde en la misma posición de la segunda parte
hay una
(o una
).
El AFND dado tiene 22 estados que (sin que ellos lo dicen) está en
el orden de (si inspeccionamos la construcción `vemos' la suma
de 1 hasta
).
También construeron un AFD para :
Manifestan que dicho autómata es mínimo, y teniendo más de
estados concluyen que la construcción de un AFND a un AFD
puede incrementar el número de estados exponencialmente.
Veremos: ¡Ambas construcciones tienen sus deficiencias, aunque el hecho en si es correcto!
Primero, no dan un esquema cómo construir un autómata que
reconozca para cualquier
(puede ser que hay `buena suerte'
en el caso de
).
Segundo, el AFD dado no es mínimo, una simplificación sería:
Pero, el nuevo autómata sigue necesitando un número exponencial de
estados, porque se tiene que construir en el `lado izquierdo' todas
las posibles palabras .
Entonces: ¿Creemos o sabemos?, si no lo hemos comprobado o si no hemos entendido una comprobación presentada, entonces solamente creemos. El saber va más allá. Hay que mantenerse crítico, siempre.
Construimos un AFND para sistemáticamente.
Idea:
En cada uno de los caminos reconociendo siempre tiene que existir
una arista con una
(o una
) donde en la misma posición para reconocer
hay una
(o una
).
Este principio nos lleva a una construcción inductiva:
El número de estados entonces es:
Como vemos, incluso hemos reducido el número de estados:
el AFND para aceptar tiene solamente 20 estados.
La construcción de un AFD sigue el mismo argumento dado arriba: se necesita
construir todas las posibles palabras en `el lado izquierdo'
y por eso el AFD tiene por lo menos
estados (los
para
enumerar los
y por lo menos un estado final en `el lado derecho'.
Otro ejemplo para mostrar las capacidades de un AFND (y el crecemiento exponencial necesario del AFD equivalente):
Usamos
como alfabeto. Definimos los siguientes
lenguajes (que dependen del número
):
Es bastante fácil construir un AFND que acepte :
No es tan obvio como construir directamente un AFD. Pero es posible con la construcción (¡Hazlo!).
Observamos en la construcción:
Construimos un AFD directamente:
Este autómata (y siguiendo el esquema de la construcción) contiene
estados.
En ambos ejemplos parece que el número de estados necesarios en un AFD tenga algo que ver con la `capacidad de contar o enumerar' hasta cierto número.