Tcmod 04
Tcmod 04
Tcmod 04
MÓDULO IV
AUTÓMATAS DE ESTADO FINITO
Un Autómata Finito, también llamado Autómata de Estado Finito, es toda Máquina de
Estado Finito en la que el conjunto de símbolos de salida es exclusivamente O = { 0, 1 } y
dónde el estado actual determina cuál fue el último dato de salida. Aquellos estados para los
cuales el último dato de salida fue 1, se denominan estados de aceptación. En todo
Autómata Finito, representado como A, debe haber cuando menos un estado de aceptación
y por sentido común se recomienda que no todos lo sean.
En forma gráfica se muestra la forma como se identifican los dos tipos de estado que se
pueden presentar en este Autómata. La ? significa que no importa cúal es el símbolo en la
entrada.
?/0 ?/1
?/0 ?/1
?/0 ?/1
... ?/0 ... ?/1
En síntesis, es fácil notar que en muchos casos, lo importante no son las salidas
momentáneas del modelo, sino únicamente el último bit de salida, tal y como es el caso de
varios de los ejemplos presentados en el archivo de problemas por resolver
correspondientes al módulo 3. Lo anterior es muy importante, ya que se presenta un 0 en la
salida cuando la cadena de entrada no cumple un enunciado, puesto como especificación
de diseño del Autómata; por otro lado se presenta el 1 en la salida cuando sí lo cumple.
Se podría decir que un Autómata Finito es un aceptador o rechazador de cadenas.
EJEMPLO:
4. Autómatas de Estado Finito 51
Trazar el diagrama de transición de la Máquina de Estado Finito definida en la tabla;
en caso de que sea también un Autómata Finito, trazar su diagrama correspondiente en la
notación respectiva; determinar el conjunto de estados de aceptación.
I
S w x y z
q2 q2 , 1 q1 , 0 q1, 0 q0, 1
El anterior es un Autómata de Estado Finito en razón de que en todos los arcos que
llegan a los estados de aceptación se tiene la indicación de bit de salida en 1, y por otro lado
se tiene un 0 en los de no aceptación.
En el Autómata podremos analizar qué es lo que sucede cuando llega una cadena de
entrada, tal como yxxzwyxw, y en cuyo caso podremos especificar la secuencia de estados
por los que pasa el Autómata, de la siguiente forma:
Sin = y x x z w y x w // cadena de entrada.
q0 q 0 q2 q1 q0 q1 q1 q0 q1 // estados recorridos.
4. Autómatas de Estado Finito 52
Si un Autómata de Estado Finito recibe como dato de entrada una cadena o arreglo,
se puede concluir el recorrido en el Autómata o en un estado de aceptación o en uno de no
aceptación; la clase de estado en la cuál se termina, establece cuándo una cadena es
aceptada por el Autómata. Como el recorrido finalizó en este caso en un estado de no
aceptación ( q1 ), la cadena y x x z w y x w se considera que no es aceptada por el
Autómata; ésto significa que no cumple con las especificaciones que se dieron en el diseño.
I
S w x y z
⇒ q0 q1 q2 q0 q1
q1 q1 q0 q1 q0
q2 q2 q1 q1 q0
Representación en la que se observa que con una flecha se apunta el estado inicial, y
que se encierra en un círculo cada estado de aceptación. No se incluye la indicación del
símbolo de salida, ya que tal valor se deduce según el tipo de estado al que se accede.
EJEMPLO:
Diseñar un Autómata Finito que acepte únicamente los arreglos con I = { a, b } pero que no
contengan a.(Sin = bn n ∈ ℵ0).
Es un caso algo extraño, ya que nos podremos preguntar, por qué si la entrada a no se debe
presentar en ninguna cadena, entonces ¿para qué la definimos como posible entrada?
Este caso debe corresponder a una situación en la que el Autómata serviría para
representar un dispositivo de control, instalado en una empresa, para monitorear fallos en
distintas partes de las instalaciones. A dicho sistema llegan señales provenientes de
sensores ubicados en sitios estratégicos; el llegar una a, podría significar avería, mientras
que la b significaría bien. Si no llega ninguna de las dos, entonces no habría problema.
Esa podría ser la razón por la que es posible recibir una a, aunque tal situación sería no
aceptada.
b a, b
q0 q1
a
EJEMPLO:
Construir una expresión regular que describa el lenguaje aceptado por el siguiente
Autómata:
4. Autómatas de Estado Finito 54
Para resolver este problema, definamos las posibles trayectorias que nos llevan desde el
estado inicial, a todos y cada uno de los estados de aceptación; en este caso, hay tres
estados de aceptación. Para llegar a dos de ellos, hay uno solo de esos caminos, pero para
llegar al tercero, existen dos posibilidades, pasando por los dos estados mencionados
anteriormente, obteniéndose, en total, cuatro de esas posibles trayectorias.
Finalmente, se unen todas las respuestas individuales.
De esa forma, se tiene que la respuesta sería: L = { ab*} ∪ { ba*} ∪ { ab*a } ∪ { ba*b}
EJEMPLO:
¿Cuáles de los lenguajes descritos por las siguientes expresiones regulares para el alfabeto
{ x, y, z } son infinitos?
En este caso, los Autómatas Finitos que aceptan Lenguajes infinitos, son los indicados en
los incisos A, B y D. Eso, por el simple hecho de tener lazos en su estructura.
Además de ser esa una característica para identificar los Autómatas que aceptan este tipo
de Lenguajes, se tiene también que ocurre en los casos en los que se observa en el
diagrama la presencia de circuitos, es decir, de caminos cerrados. Por tanto, si uno solo de
los dos arcos que se dirigen de el estado inicial, al siguiente estado en el modelo del inciso
C, se invirtiera su sentido, ya no aceptaría un Lenguaje Finito como ahora.
AUTÓMATAS EQUIVALENTES
Si dos Autómatas aceptan exactamente las mismas palabras, se dice que tales son
equivalentes. El conjunto I debe ser el mismo para ambos, mientras que σ 0 y S pueden
variar y la función f necesariamente cambia entre ellos.
Es evidente que siempre es mejor hacer el diseño más simple, ya que su
implementación deberá ser más fácil y con menor riesgo de cometer errores al diseñarlo.
Queda para el estudiante proponer algunos ejemplos de Autómatas equivalentes.
4. Autómatas de Estado Finito 55
IMPLEMENTACIÓN DE UN AUTÓMATA
Los Autómatas de Estado Finito, al igual que las Máquinas, tienen la gran ventaja de
que SE PUEDEN PROGRAMAR, con lo que se transforman en una herramienta muy
valiosa para todo el profesional que intenta simular el funcionamiento de un sistema
real, inicialmente representado con este modelo matemático.
EJEMPLO:
Diseñar e implementar por medio de un Autómata Finito, un analizador que acepte las
cadenas que representan los nombres de identificadores válidos de un lenguaje de
programación típico como C o Pascal. Este diseño es un pequeño subconjunto de un
analizador léxico.
Se definen las clases para los símbolos de entrada que se consideran en los arcos
como tipos de datos para simplificar la representación del diagrama:
dígito: 0, 1, 2, ..., 9.
letra: A, B, C, ... , Z, a, b, c, ..., z, _ .
otro: +, -, @, ;, sp, ∼ , $, %, ... etc.
Se tomará como base el criterio de que un identificador inicia con una letra y después
puede llevar dígitos y/o letras, pero nunca caracteres diferentes a estos dos tipos.
Estado ← 0
LEER siguiente símbolo de entrada
MIENTRAS no ( fin de cadena ) HACER
OPCIÓN ( Estado ) DE
4. Autómatas de Estado Finito 56
0: SI ( Símbolo actual = letra )
ENTONCES ( Estado ← 2 )
SINO SI ( Símbolo actual = dígito )
ENTONCES ( Estado ←1 )
SINO ( Error_rutina )
1: Error_rutina
2: SI ( Símbolo actual = letra )
ENTONCES ( Estado ← 2 )
SINO SI ( Símbolo actual = dígito )
ENTONCES ( Estado ←2 )
SINO ( Error_rutina )
FINOPCIÓN
LEER Siguiente símbolo de entrada
FINMIENTRAS
SI ( Estado ≠ 2 ) ENTONCES (Error_rutina)
q1 X X X
q2 q2 q2 √
EJEMPLO:
Diseñar e implementar por medio de un autómata matricial, un analizador que
reconozca cadenas que representen los números reales sin signo, pero sólo aquellos
que inicien con dígito, tanto en notación decimal como en exponencial.
Sin embargo un compilador no debe aceptar números con exponentes tan grandes
como 2.34E-345261. ¿Cómo se modificaría el diagrama de transición para que el exponente
tenga 1 ó 2 dígitos solamente?
I
S dígito • E , e +,- FDC
4. Autómatas de Estado Finito 58
⇒ q0 q1 X X X X
q1 q1 q2 q4 X X
q2 q3 X X X X
q3 q3 X q4 X √
q4 q6 X X q5 X
q5 q6 X X X X
q6 q6 X X X √
Estado ← 0
REPETIR
LEER siguiente símbolo de entrada
OPCIÓN (símbolo) DE
0, ... , 9 : Entrada ← “dígito”
• : Entrada ← “punto”
E, e : Entrada ← “letra E”
+, - : Entrada ← “signo”
FDC : Entrada ← “FDC”
Otro : Error_rutina
FINOPCIÓN
Estado ← Tabla ( Estado, Entrada )
SI (Estado = “error”) ENTONCES (Error_rutina)
HASTA (Estado = “Aceptar”).
Nótese que, en esencia, cualquier Autómata Finito se diseña bajo el mismo formato
básico. Lo único que cambia de un caso a otro es el contenido del rango de la instrucción
Opción, según sean los símbolos que componen el alfabeto de las cadenas que se deben
aceptar, y distribuidas según sea su tipo. Inclusive, cuando los símbolos de entrada no
son tan variados, no se requiere la instrucción Opción en el algoritmo.
La clave para implementar Autómatas Finitos consiste en aprender esta estructura básica
del programa en seudocódigo:
Estado ← 0
HACER
LEER siguiente símbolo de entrada
OPCIÓN (símbolo)
A, ..., Z, a, ..., z, _ : Entrada ← “letra”
0, ... , 9 : Entrada ← “dígito”
+, - : Entrada ← “signo”
. : Entrada ← “punto”
... ... // y así con todas las entradas, si es
necesario.
FDC : Entrada ← “FDC”
Otro : Error_rutina
FINOPCIÓN
Estado ← Tabla ( Estado, Entrada )
SI (Estado = “error”) ENTONCES (Error_rutina)
HASTA (Estado = “ACEPTAR”)
En este caso se tiene un circuito digital secuencial en virtud de que para saber cuál
sería la salida obtenida, se debe conocer además de la entrada, lo que sucede en los puntos
marcados como y1 y y2. Los valores de voltajes presentes en esos puntos, en combinación,
determinarían el estado del sistema.
I
S 0 1
I
y1 y2 y1 y2 y1 y2 S 0 1
⇒ 0 0 0 0 0 1 ⇒ q0 q0 q1
0 1 1 1 0 1 q1 q3 q1
1 0 0 0 1 0 q2 q0 q2
1 1 1 1 1 0 q3 q3 q2
4. Autómatas de Estado Finito 63
Se muestra el circuito original, las tablas de transición obtenidas (considerando la
operación de las compuertas lógicas) y el diagrama de transición obtenido. Aquí q3 es el
estado de aceptación porque en ese caso las dos entradas a la AND (F) son 1.
Los circuitos electrónicos secuenciales, son muy propicios para ser representados por
Máquinas y Autómatas, ya que en ellos la entrada por sí sola no determina la salida, sino
que ésta se define también por los estados internos presentes en el circuito. Consultar
textos sobre la materia y ver cómo se emplean esos modelos, no sólo para la representación
de estos circuitos, sino también para su diseño.
Representamos los protagonistas: Hombre (H), Lobo (L), Gallina (G), Maíz (M).
I = { H, HL, HG, HM } // Indica quién está cruzando el río.
4. Autómatas de Estado Finito 64
En cada estado se muestra al separarlos en dos renglones, qué personajes están en
cada una de las orillas, tal que en el estado inicial todos se encuentran del mismo lado, y en
el de aceptación se encuentran en el otro. La entrada señala en forma abreviada, quién o
quiénes atraviesan el arroyo, debiendo en todos los casos viajar el hombre, solo o
acompañado. A esta representación, que sirve para representar la búsqueda de las
soluciones, se le llama en Inteligencia Artificial un Espacio de Estados.
REDES NEURONALES
Históricamente, los Autómatas Finitos se utilizaron por primera vez para modelar Redes de
Neuronas. Diseñar un Autómata Finito Determinístico cuyo comportamiento sea equivalente
a la Red Neuronal de la figura. Los estados finales del Autómata corresponden a una salida
1 de la red. Cada neurona tienen sinapsis excitantes ( O ) e inhibitorias ( • ). Una neurona
produce una salida 1 si el número de sinapsis excitantes con entrada 1 excede al de las
inhibitorias con entrada 1, por al menos el umbral de la neurona (el número que se
encuentra dentro del triángulo). Supóngase que existe tiempo suficiente entre cada cambio
de valor de entrada para que las señales se propaguen y para que la Red alcance una
configuración estable.
En realidad, una Red Neuronal no es tan sencilla como aparece en este ejemplo, pero
de aquí se pueden obtener conceptos muy importantes para entender como opera una Red
más compleja. Obsérvese la gran similitud que existe en su funcionamiento con los circuitos
digitales secuenciales.
El factor más importante, que determina en gran medida el hecho de poder emplear
un Autómata Finito para este caso, es el de presentarse una retroalimentación, lo cual
implica que los valores actuales de los puntos marcados como y1, y2 y y3 determinan un
estado actual de la red de neuronas.
4. Autómatas de Estado Finito 65
I I
S 0 1 S 0 1
y1 y2 y3 y1 y2 y3 y1 y2 y3
0 0 0 0 0 0 0 0 1 q0 q0 q1
0 0 1 0 1 1 0 0 1 q1 q3 q1
0 1 0 0 1 0 1 0 1 q2 q2 q5
0 1 1 0 1 1 1 1 1 q3 q3 q7
1 0 0 0 0 0 1 0 0 q4 q0 q4
1 0 1 0 1 0 1 0 1 q5 q2 q5
1 1 0 1 1 0 1 0 0 q6 q6 q4
1 1 1 1 1 0 1 1 1 q7 q6 q7
b
I ⇒q 0
S a b
a b
⇒ q0 {q1 } {q0} a b
q1 {q0, q2} ∅
q2 ∅ {q0, q2} q1 q2
a
El no determinismo ocurre en virtud de que estando en q 1 y llegando una a, o bien,
estando en q2 y llegando una b, no sabemos con certeza cuál será el siguiente estado.
Dada una cadena de entrada Sin, se considera que tal arreglo es aceptado si existe
por lo menos un recorrido en el Autómata que nos lleve a un estado de aceptación, sin
importar que existan otros para la misma cadena que terminen en uno de no aceptación.
Por ejemplo, sea la cadena de entrada Sin = aab. En este caso hay tres formas de
recorrer el Autómata, y como en un caso se finaliza en un estado de aceptación, entonces se
dice que es una cadena aceptada. Sin embargo, si Sin = abbaab, obsérvese que cuando
llega el segundo símbolo de entrada (b) es en una situación en la que se está en un estado
(q1) en el cual no está definido lo que sucede para esa b; en ese caso la cadena de entrada
se rechaza.
Dado el Autómata que reconoce números reales y exponenciales sin signo, analizado
previamente, se puede construir una Gramática Regular que produce tal lenguaje.
Obsérvese el siguiente fragmento del Autómata y las producciones asociadas e intentar
deducir el método que se podría emplear para obtener las reglas.
4. Autómatas de Estado Finito 67
dígito dígito Reglas de producción:
⇒ ...
<A> :: = dígito <B>
. <B> :: = dígito <B>
dígito <B> :: = . <C>
(fragmento) ... <C> :: = dígito <D>
dígito <D> ::= dígito <D> ...
Para definir la Gramática del Lenguaje Regular aceptada por un Autómata, se sigue el
siguiente procedimiento:
a) Los símbolos de entrada de A son los terminales de G.
b) Los estados se convierten en los símbolos no terminales.
c) El estado inicial se transforma en el símbolo inicial.
d) Las composiciones corresponden a los arcos dirigidos. Si existe un arco con la
marca x de A a B se escribe la regla de producción A --> xB. Además, si hay un lado con la
marca x de A a un estado de aceptación, se incluye la composición A --> x.
a aN = { A, B, C, D }
⇒ A B T = { a, b }
σ 0= { A }
b b b a P = { A → aB bC bD, B → aB,
C → aC bD,
D → aB bB bD,
C D A → a, A → b, B → a,
b C → a, D → a, D → b }
a b
Si solamente existieran los Autómatas Finitos Determinísticos, ¿Cómo se
podría diseñar el Autómata asociado con esa Gramática en particular, por ejemplo?
Es muy recomendable en los casos en que una Gramática sea difícil de diseñar, mejor
crear el Autómata Finito que acepta las cadenas, y obtener del diagrama de transición
las reglas gramaticales.
EJEMPLO:
Sea G = (N, T, P, σ 0) .
N = { S, A, B } T = { a, b } σ0 = { S }.
P = { S → aS | bS | aB , A → bB , B → aB | aA | b }
4. Autómatas de Estado Finito 68
Diseñar el AFND que acepta los arreglos de L (G), aplicando el procedimiento
anterior, en sentido inverso y obtener conclusiones.
Fue necesario agregar el estado que en este caso es llamado F, y que es una especie
de "estado vacío". No obstante, no existe incongruencia en el diseño, ya que si se hiciera el
diseño de la Gramática Regular que produce el Lenguaje aceptado por el AFND anterior, la
regla B → bF se deberá eliminar del resultado, ya que F no produciría nada.
Con esto, queda completada la relación que ya se había mencionado anteriormente: dada
una Gramática Regular, que produce un Lenguaje Regular, existe también un Autómata
de Estado Finito (Determinístico) que acepta las cadenas producidas por dicha Gramática.
Entonces el AFD llamado A' = ( I', S' , f' , A' , σo' ) es equivalente al Autómata A.
Nota: A' consiste en los subconjuntos de S' que contienen al menos un estado de
aceptación del AFND original.
REPRESENTACIÓN DE UN AFD.
En forma gráfica, se representa un Autómata como sigue:
... q2
Indicador Estado
Mecanismo de Control
Los componentes de un Autómata Finito son:
¤ Unidad de entrada: cinta de entrada con palabra de entrada, cabeza de lectura.
¤ Unidad de memoria (opcional): cintas de memoria para resultados auxiliares,
cabezas de lectura y escritura.
¤ Unidad de control: Controla el Autómata según un programa.
¤ Unidad de salida (opcional): cinta de salida para la palabra de salida, cabeza de
escritura.
El procedimiento indica que se debe dibujar un arco con la misma etiqueta que tienen
los que salen de los anteriores estados iniciales, ahora partiendo del nuevo estado inicial
(ésto por si m, n fueran 0).
L1 • L2 = { xmyxnyñxyo | m, n, ñ, o ∈ ℵo }.
Para que puedan aceptarse las repeticiones de las subcadenas se añade un arco de
cada estado de aceptación a cada estado que es el destino de un arco del estado inicial.
Cada uno de estos nuevos arcos se rotula con la etiqueta que corresponda al arco del
estado inicial.
EJEMPLO:
Representar gráficamente el Autómata de Estado Finito que acepta las cadenas de la
unión de a • ( b • a ) * con x • ( y • x ) *.
EJEMPLO:
Dibujar un diagrama de transiciones que acepte la concatenación del lenguaje
aceptado por A1 con el aceptado por A2.
4. Autómatas de Estado Finito 73
Los arcos que salen del estado inicial de A2 se reproducen en todos los estados de
aceptación. Se eliminan los de A1 excepto cuando se acepta λ en A2.