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.