Sei sulla pagina 1di 7

Funcionamiento general de un

Autómata finito determinı́stico

Dr. Abdiel E. Cáceres González


Universidad Juárez Autónoma de Tabasco
abdielc@acm.org. 11-febrero-2011

1. Introducción

Los autómatas finitos son modelos abstractos de sistemas que tienen algunas
particularidades muy especiales, en forma general, estos sistemas reaccionan
a una serie muy especı́fica de eventos bien determinados entre sı́, otra car-
acteı́stica es que esos sistemas pueden ser observados en cualquier momento
en alguno de una serie bien conocida de formas o estados.

Los autómatas finitos se pueden encontrar en muchas partes, estamos rodea-


dos de sistemas que pueden ser modelados con autómatas finitos, desde los
sistemas más simples hasta aquellos que se antojan muy complejos. Pensemos
por ejemplo en un sistema que a primera vista sea sumamente complejo, co-
mo una fila de personas que se encuentran esperando ser atendidas por otra
persona. A pesar de lo complejo que pudiera parecer, en la tarea de modelar
el comportamiento de las filas de espera,puede ser modelada con un autómata
finito. Antes de describirlo con la formalidad que se requiere, podemos describir
informalmente la fila como un autómata finito en donde se puede observar a
la fila de personas que está avanzando o bien se encuentra detenida, y obedece
a eventos externos, como cuando la persona encargada termina de atender a
la primera de la fila.

En el uso de la computadora, en particular cuando se compilan los programas


de computadora, se requieren de autómatas finitos que determinen cuándo
un programa esta correctamente escrito. Para hacer esto, estos analizadores
léxicos, toman cada palabra y leen cada letra o sı́mbolo con que se escribe, y
en el momento que encuentra un error, este analizador léxico (este sistema) se
mueve a un estado de error, mientras que cuando se leen letras correctamente
escritas, el sistema se encuentra en un estado le lectura. En este sistema, los
eventos que hacen reaccionar al sistema son los sı́mbolos leı́dos, y los estados
son de error, leyendo o analizando (muy generalmente).

Tema de Lenguajes Formales y Autómatas. vol. 1 núm. 1 (2011) 1–7


2. Definición formal

Un autómata finito es un sistema compuesto por 5 elementos, que primero


vamos a describir y enseguida escribiremos formalmente tanto en Racket como
en notación matemt́ica. Cada elemento lo describiremos con cierto análisis
antes de escribir la definición formal.

2.1. El conjunto de estados

Los estados son las maneras en que se puede describir un sistema de manera
conveniente. Los estados se deben agrupar en un conjunto finito, discreto y
no vacı́o. Generalmente se abstraen los estados con un sı́mbolo, por ejemplo,
una lámpara de luz, puede describirse con los estados ’apagado’ y ’encendido’,
mismos que podemos abstraer con los dǵitos 1 y 0 respectivamente. General-
mente dedicamos la letra E mayúscula, para determinar un conjunto de es-
tados. Pensaremos en un ejemplo que construiremos a medida que avancemos
en las definiciones. Supongamos que deseamos modelar el comportamiento de
una persona que puede ser observada en uno de los siguientes estados: Ale-
gre, Triste o Enojada; modelaremos estos tres estados con los sı́mbolos a, b, c
respectivamente (a para alegre, b para triste y c para enojada). Matemática-
mente esto es E = {a, b, c}.

En Racket, podemos definir un conjunto de estados enlistando cada estado,


como se ilustra en el siguiente ejemplo particular:

Código 1. E = {a, b, c}
1 ; Los estados significan
2 ; a − Alegre
3 ; b − Triste
4 ; c − Enojado
5 (define E ’(a b c))

Es importante no perder de vista el significado de los sı́mbolos.

2.2. El alfabeto de entrada

Es el conjunto de eventos externos que hacen reaccionar al sistema. General-


mente lo simbolizamos por la letra griega Σ. Este conjunto debe ser finito y
discreto. En Racket podemos definir un conjunto finito y discreto como una
lista de sı́mbolos no repetidos, por ejemplo:

2
Código 2. Σ = {0, 1}
1 ; Los simbolos de entrada significan
2 ; 0 − Una patada
3 ; 1 − Un beso
4 (define S ’(0 1))

Los sı́mbolos del alfabeto de entrada, son los que hacen que el sistema pueda
cambiar de estado (si aplica). Es importante que el significado de los sı́mbolos
de entrada sean conocidos, para que no pierda sentido el modelo computacional
del sistema modelado.

2.3. La regla de transición

También se le conoce como función de transición. Es lo que nos permite


hacer cambiar de estado al sistema, en dependencia de su estado actual y
al evento externo que lo afecta. Esta función esta definida en el dominio del
producto cartesiano de los estados y el alfabeto de entrada, y su imagen reside
en el mismo conjunto de estados, esto significa que para que el sistema pueda
cambiar de estado, se requiere saber con precisión el estado actual y el sı́mbolo
del alfabeto actual. En notación matemática podemos describir esta función
como:
δ :E×S →E

Siguiendo los ejemplos anteriores, la función de transición definida para los


conjuntos E y S anteriores, se puede describir mediante una tabla de multi-
plicar (aunque la operación no sea precisamente la multiplicación aritmética),
como se puede apreciar en la tabla 1.

δ 0 1
a c a
b b a
c c b
Tabla 1. Función de transición δ

La tabla de transiciones muestra de un solo vistazo, lo que le sucede a una


persona que se encuentra alegre (estado a) y recibe una patada (evento 0); el
resultado es que la persona ahora se encontrará enojada (estado c).

En código Racket, es posible manipular las funciones desde dos puntos de


vista, uno de ellos es definir la función de transición como un procedimien-
to, que reciba los dos parámetros requeridos y devuelva algun elemento del
codominio, como en el siguiente ejemplo:

3
Código 3. Función de transición como un procedimiento
1 (define delta
2 (lambda (e s)
3 (cond ((equal? (list e s) ’(a 0)) ’c)
4 ((equal? (list e s) ’(a 1)) ’a)
5 ((equal? (list e s) ’(b 0)) ’b)
6 ((equal? (list e s) ’(b 1)) ’a)
7 ((equal? (list e s) ’(c 0)) ’c)
8 ((equal? (list e s) ’(c 1)) ’b))))

De acuerdo con esta manera de definir las funciones de transición, para obtener
un nuevo estado, es necesario invocar el procedimiento con un par de elemen-
tos, un estado y un sı́mbolo (ambos definidos en sus respectivos conjuntos):
> (delta ’a 0)
’c
> (delta ’b 1)
’a
> delta
#<procedure:delta>
>

O bien, se puede definir la función de transición como un conjunto, un conjunto


de trios ordenados, donde los primeros dos elemntos de cada trio representan
las parejas de estado-sı́mbolo y el tercer elemento representa la salida de la
función.

Código 4. Función de transición como un conjunto


1 (define delta ’((a 0 c) (a 1 a) (b 0 a) (b 1 a) (c 0 c) (c 1 b)))

En este caso, es necesario crear una manera de evaluar la función de transición:

Código 5. Función de transición como un conjunto


1 (define evalua
2 (lambda (fun edo sim)
3 (last (car (filter (lambda (x)
4 (equal? (list edo sim)
5 (list (car x) (cadr x))))
6 fun)))))

> (evalua delta2 ’a 0)


’c
> (evalua delta2 ’b 1)
’a
> delta2
’((a 0 c) (a 1 a) (b 0 a) (b 1 a) (c 0 c) (c 1 b))

4
>

Ambas maneras de definir la función de transición son iguales en el sentido de


que responden del mismo modo ante las mismas entradas, pero operativamente
son muy diferentes, la decisión de modelar la función de transición de uno u
otro modo, es muy importante y marcará de manera significativa el resto de
la programación del autómata.

2.4. El estado inicial

Cada autómata debe tener un punto de inicio, para tener una base de referencia
en cuanto a la secuencia de estados que se habrán de modificar. Es estado
inicial debe ser un elemento del conjunto de estados, en matemáticas, el estado
inicial se puede simbolizar con e0 ∈ E, o bien en Racketcomo:

Código 6. El estado inicial


1 (define e0 ’a)

2.5. El conjunto de estados aceptores

Con el fin de determinar el éxito o fracaso, o en palabras más adecudas, la


aceptación o rechazo de las secuencias de sı́mbolos analizados, determinamos
un subconjunto de estados, y ese subconjunto de estados se conocerá como el
conjunto de estados aceptores. En matemáticas nosotros escribimos A ⊆ E,
donde A = {b}, esto significa (siguiendo el ejemplo), que el estado b es el único
estado aceptor. En Racket podemos definir este conjunto como:

Código 7. El conjunto de estados aceptores


1 (define A ’b)

2.6. La descripción formal

Una vez descritos cada uno de los elementos de un autómata finito, daremos
la siguiente definición:

Definición 1 Un Autómata Finito Determinista (AFD), es una 5-tupla for-


mada por los elementos (E, Σ, δ, e0 , A), donde:

E: Es el conjunto de estados.

5
Σ: Es el conjunto de sı́mbolos de entrada (alfabeto, señales).
δ: Es la función de transición de estados.
e0 : Es el estado inicial.
A: Es el conjunto de estados aceptores.

Una descripción formal en Racket es la siguiente:

Código 8. La definición formal de un AFD


1 (define AFD-A (list E S delta e0 A))

Aquı́ hemos elegido que delta sea un procedimiento y tendremos que enfrentar
toda la responsabilidad que ello implica, claro que nada nos impide regresar
y tomar la otra opción.

2.7. Representaciones de los AFD

Los AFD frecuentemente son representados mediante un grafo, donde los no-
dos son etiquetados con los nombres de los estados, y se hace una distinción
en aquel nodo que representa a cada estado aceptor con un doble cı́rculo; las
transiciones se representan mediante un arco de flecha, donde la punta de
flecha indica el estado al que se accede en la transición, mientras que el esta-
do actual es aquel que se encuentra en el otro extremo de la flecha. Se suele
agregar una flecha que incide en un nodo que se reconoce como estado inicial,
esta flecha es diferente que las otras en que no tiene estado en el otro extremo
de la flecha, como en el ejemplo que se ilustra en la figura 1.

2.8. El comportamiento general del AFD

Un AFD tiene su utilidad cuando se le presenta una secuencia de sı́mbolos


(tomados del alfabeto de entrada), y se desea saber el estado final del sistema
cuando analice el último sı́mbolo de esa secuencia; si el estado final resulta
ser miembro del conjunto de estados aceptores, entonces se dice que el AFD
acepta la secuencia de entrada, y de otro modo, el AFD rechaza la secuencia
de entrada.

Esto es ası́ porque generalmente estos son modelos de un sistema que se quiere
probar con anticipación, de modo que todas las secuencias de entrada repre-
sentan secuencias de eventos a los que se podrı́a enfrentar el sistema que esta
siendo modelado. Formalmente tenemos que definir una extensión de la fun-
ción de transición, ya que la función de transición recibe un sı́mbolo y ahora
deseamos una función que reciba una secuencia de sı́mbolos (también se le

6
Figura 1. Grafo que representa a un AFD, considerando los conjuntos construidos como
ejemplo en estas notas.

puede llamar cadena de sı́mbolos.

Definición 2 Llamaremos función de transición extendida al sı́mbolo δ ∗ ,


definido δ ∗ : E × S ∗ → E. Si s = s0 s0 , es decir, s es una palabra compuesta
por un primer sı́mbolo s0 , y seguida por el resto de la palabra s0 , donde tanto
s0 como todos los sı́mbolos de s0 forman parte de los sı́mbolos del alfabeto, y e
es un estado del conjunto de estados,

e

si s =  (la secuencia vacı́a)
δ ∗ (e, s) =
 δ ∗ (δ(e, s 0
0 ), s ) e.o.c.

La programación de la función de transición extendida se deja como ejercicio.

Referencias

[Hopcroft y Ullman, 1993] Hopcroft, John E. y Ullman, Jeffrey D. Teorı́a de


Autómatas, Lenguajes y Computación. CECSA Ed., México (1993).

Potrebbero piacerti anche