Un autómata finito determinista (AFD) es una quíntupla
Podemos pensar de un autómata como un dispositivo que lee desde una cinta con símbolos y que realiza cambios de estados internamente:
Dibujamos los autómatas como grafos dirigidos (no introducimos el concepto matemático de grafos formalmente), los estados representan los nodos del grafo, y dibujamos una arista atribuida con un símbolo entre dos nodos si existe una transisión correspondiente:
es decir, el estado inicial está marcado por una flecha y los estados finales están marcados con doble círculo.
Ejemplo: Un AFD que `acepta' las cadena de s y s donde los números de ceros y unos es par:
entonces
¿Cómo describimos cómodamente ?
Observamos: y
, entonces podemos hacer una
tabla con los estados como filas y con los símbolos como columnas:
es decir, permitimos escribir más de un símbolo por arista, pero el cambio de estado se realiza con leer solo uno de la lista.
Para definir el lenguaje aceptado por un AFD ampliamos la función a una función para que trabaja sobre palabras:
Un autómata finito determinista acepta una palabra si donde es la ampliación de la funcion de transición .
O en otras palabras, acepta , si es un estado final del autómata.
El lenguaje aceptado por un autómata finito determinista
es el conjunto de palabras aceptadas por :
En el grafo podemos observar: si entonces existe un camino en el grafo desde el estado inicial hasta algún estado final de tal manera que podemos `leer' la palabra a lo largo de las aristas visitadas.
Ejemplo: Un autómata que acepta números reales (en Pascal):
Curiosidades de C/C++:
Vemos que estámos confrontados con diferentes problemas:
Observamos, cada AFD se puede completar:
Observamos:
Dos autómatas y son equivalentes si aceptan el mismo lenguaje, si .
Dos estados y de dos autómatas y son equivalentes, es decir, , si para y .
Entonces dos autómatas son equivalentes si sus estados iniciales son equivalentes.