Comenzaremos
ahora a definir este
tipo de máquinas que a diferencia de las máquinas
secuenciales, estas poseen
estado inicial previsto que es por donde comenzarán su
ejecución.
Autómatas
Finitos Deterministas (AFD)
Este
tipo de autómatas admite su definición de dos
maneras bien diferentes:: Como
autómatas traductores o reconocedores. La
definición como autómatas traductores
continua a la definición de las máquinas
secuenciales, y se los podría definir
como una subclase de estas, ya que los autómatas finitos
tendrían como
limitante no poder iniciar desde cualquier estado como lo hacen en las
máquinas
secuenciales.
La
forma que
adoptaremos para la definición de los autómatas
finitos deterministas es como
autómatas reconocedores, ya que se ajusta
con los contenidos de la informática
teórica y
utilización que se les da dentro del diseño
de los analizadores léxicos.
Estos
autómatas solo se limitarán a aceptar o no una
determinada cadena recibida en
la entrada, por lo tanto podemos decir que la salida de los mismos solo
tendrá
dos valores posibles aceptar o no aceptar a la palabra de entrada.
Al
igual que en las máquinas secuenciales, estos
autómatas transitarán entre un
conjunto finito de estados posibles, a medida que reciban sucesivamente
los caracteres
de entrada, en un instante determinado de tiempo el autómata
solo podrá estar
en uno y solo uno de los estados posibles.
Una
característica importante de este tipo de
autómatas es el determinismo, lo cuál
significa que estando en un estado y recibiendo una entrada del
exterior el
autómata tendrá la posibilidad de transitar a uno
y solo un estado del conjunto
de estados posibles.
Con
respecto al conjunto de estados ahora se pueden clasificar en tres
tipos: Estado
Inicial, que es pon donde comenzará la
ejecución de la máquina; Estados
finales o de aceptación que
será un subconjunto del conjunto de estados
por los que transitará la máquina, y si cuando se
hayan terminado de procesar
todos los símbolos de entrada y no reste ningún
símbolo por leer, la máquina
quede posicionada en uno de estos estados de aceptación, se
concluirá que la
cadena procesada será aceptada por el autómata. y
Estados Intermedios,
que tienen comportamiento idéntico a los definidos en las
máquinas
secuenciales.
2.6.1.1. Definición:
Los
autómatas finitos deterministas quedarán
formalmente definida mediante una
quíntupla como sigue:
AFD = ( ∑ , Q, q0, F,
f )
donde:
∑
|
Alfabeto
de símbolos de entrada.
|
Q
|
Conjunto
finito de estados
|
q0
|
q0 Q – estado inicial previsto
|
F
|
F Q - es el conjunto de estado finales de
aceptación.
|
f
|
Función
de transición de estados definida como
f: Q x ∑
Q
|
2.6.1.2. Interpretación de funcionamiento:
Este autómata recibirá una
cadena en la cinta
de entrada e ira procesando de uno a la vez los símbolos de
entrada. Comenzará
su funcionamiento posicionada en el estado inicial, y desde este estado
comenzará su ejecución.
En cada intervalo de tiempo discreto
realizará dos acciones las cuales serán
consideradas como acciones indivisibles
en un determinado intervalo de tiempo.
Las acciones que realiza son:
·
Leer el
próximo símbolo, desde la cinta de entrada.
·
Transitar,
cambiar de estado
2.6.1.3.
Extensión a palabras
El
autómata finito determinista realizará
transiciones de estados a través de la
función f solo cuando reciba un símbolo de
entrada. Esto puede generalizarse a
una palabra completa, o cuando reciba la palabra vacia, en este caso se
denominará una función de transición
f´ como la función
f´ :
Q x ∑* Q
Donde:
f´ (q, ax) = f´(f(q,a),x)
f´ (q, ) =
q
con a ∑ ; x ∑* ;
q Q
2.6.1.4.
Aceptación de Palabras:
Una
palabra será aceptada por un AFD si estando formada pos
símbolos pertenecientes
al alfabeto de entrada, al finalizar de procesar la misma, el
autómata queda
posicionado en una de los estados perteneciente al conjunto de estados
finales
de aceptación.
Dada:
x W(∑)
f
( q0, x)
= qn
Si
qn F
la
cadena x es aceptada
2.6.1.5. Lenguaje reconocido por un AFD:
Es el
conjunto de todas las palabras reconocidas por el Autómata
Finito Determinista.
L AFD
= { x / x ∑* y f ( q0, x) = qn
con qn F }
Ejemplo:
Dado el
siguiente AFD definido como:
AFD1 = ( ∑, Q,
qi, F, f ), donde:
∑= { 0,1 } (Conjunto de símbolos
de entrada del AFD)
Q=
{ p, q, r } (Conjunto de
estados del AFD)
qi
= p (estado inicial
del AFD (p Є Q))
F= {q } (Conjunto de estados de
aceptación del AFD ({q
} с Q))
f: función de transición
de
estados del AFD
Donde la función f
será:
|
f
|
0
|
1
|
También puede expresarse como:
|
 |
p
|
q
|
r
|
f(p, 0)= q
f(p, 1)= r
|
* |
q
|
r
|
q
|
f(q,
0)= p
f(q, 1)= q
|
|
r
|
r
|
r
|
f(r, 0)= r
f(r, 1)= r
|
Representando su comportamiento por
medio del grafo
dirigido:

En donde el lenguaje aceptado por
esta AFD será:
L AFD1 = {x / x ∑* y
x = 0.1n con n
N 0}
2.6.1.6.
Accesibilidad
entre estados (A)
Dados
dos estados dentro de un autómata, se dice que uno de los estado es accesible desde
el otro, si existe
una palabra x formada por símbolos del
alfabeto de entrada que hace que partiendo de este estado y a
través de la
aplicación de la función de transición
se pueda llegar hasta el
otro.
De
esta manera definiremos:
Sean
p y q Q dos estados dentro de un AFD
y
existe
x W(∑) tal que:
f´( q , x ) = p
Entonces se dice que:
pAq
( Se lee – p es accesible desde q )
2.6.1.7.
Conjunto Conexo
Un
conjunto conexo es aquel en donde todos sus estados son accesibles
desde el
estado inicial. Por lo tanto un AFD
será
conexo si todo estado perteneciente al conjunto de estados es accesible
desde
el estado inicial.
Si en un AFD existieran estados
que
no son accesibles desde el estado inicial, los mismos pueden ser eliminados, de manera
de simplificar el
autómata. Esta eliminación no afectará
al comportamiento y por lo tanto
continuará aceptando
el mismo Lenguaje.
Ejemplo de conjunto conexo:
Dado el
siguiente AFD definido como:
AFD1 = (
∑, Q,
qi, F, f ), donde:
∑= { 0,1 }
Q= { p, q, r , t, s }
qi
= p
F= {q ,s }
Donde la función f
será:
|
F
|
0
|
1
|
También puede expresarse como:
|
 |
p
|
q
|
r
|
f(p, 0)= q
f(p, 1)= r
|
* |
q
|
r
|
q
|
f(q, 0)= p
f(q, 1)= q
|
|
R
|
r
|
r
|
f(r, 0)= r
f(r, 1)= r
|
|
T
|
s
|
q
|
f(t, 0)= s
f(t, 1)= q
|
* |
s
|
s
|
t
|
f(s, 0)= s
f(s, 1)= t
|
El Grafo correspondiente
será:

Analizando,
el
grafo del AFD, vemos que alos estados t y s , es imposible acceder
desde el
estado inicial p,
por lo tanto estos
estados pueden ser eliminados del AFD y el comportamiento del
autómata no se
alterará
2.6.1.8.
Equivalencias
en
los AFD
A
continuación presentaremos definiciones de equivalencias
para culminar con
equivalencia entre Autómatas Finitos Deterministas.
Equivalencias entre estados:
Dos estados p y q
serán equivalentes
si: Para toda cadena “
x ” que
desde el estado p hace transitar el autómata hasta un estado
de aceptación,
también lo hace desde el estado q. Debiendo ocurrir
simultaneamente que para
toda otra cadena “ y “ que no
hacen transitar desde el estado p hasta un
estado de aceptación, tampoco lo hará desde el
estado q.
De
esta manera definiremos:
Sean p y q Q
dos estados dentro de un AFD
p E q
( Se lee:
p y q son equivalentes)
si
cadena x W(∑) - se puede alcanzar un estado
final
previsto tanto comenzando desde el estado p como el de q Y
otra cadena y W(∑) – no se puede alcanzar un estado
final previsto tanto comenzando desde el estado p como el de q.
Equivalencias entre estados de
longitud n:
Dos estados p
y q serán equivalentes
de longitud n si: cumplen la
equivalencia planteada en la sección anterior pero con la
restricción de que la
longitud de las cadenas x e y sean menor o igual a n.
De esta manera definiremos:
Sean
p y q
Q dos estados dentro de un AFD
p
E q son
equivalentes de longitud
n si
si x W(∑) , | x | n - se puede alcanzar un
estado
final previsto tanto comenzando desde el estado p como el de q Y
y W(∑) ,
| y | n – no se puede
alcanzar un estado
final previsto tanto comenzando desde el estado p como el de q
Equivalencia
entre AFD
Dos
AFD A1
y A2 son
equivalentes,
y
se dice:
A1 E A2
Si ambos autómatas
aceptan las mismas cadenas o sean
que reconocen exactamente el mismo lenguaje.
2.6.1.9.
Conjunto cociente Q/E
Mediante
las relaciones de equivalencias entre estados se efectúa la
partición del
conjunto de estados en Clases de equivalencias, en la cuál
se encontrarán los
estados que son equivalentes entre sí.
Para
lograr el conjunto cociente, se comienza con la relación de
equivalencia entre
estados de longitud 0, o sea lo que primero se intenta formar el Q/E0,
y en el
caso de las AFD, este conjunto se subdivide en solo dos clases, los que
pertenecen al subconjunto de estados finales de aceptación y
los que no
pertenecen.
Q/E0
= [ {F} , {F}]
Se continuará con
iteraciones
sucesivas, incrementando en 1 la longitud de las cadenas de entrada en
cada
iteración y se verificará si los estados que
siendo equivalentes en una
iteración anterior continúan siendo equivalentes
en la nueva clase de
equivalencia Q/E1.
El proceso iterativo
continuará,
hasta conseguir la clase de equivalencia Q/E y este proceso se
detendrá cuando
un nuevo conjunto en una iteración i+1 se mantiene sin
modificaciones con
respecto al conjunto anterior.
Q/E
i = Q/E i+1 Se detiene el proceso.
Ejemplo:
Dado el
autómata, determinar el conjunto cociente mínimo
AFD3
= (
{ a , b },
{ p, q , r, s , t },
p,
{
r, t }, f )
, donde:
|
f
|
a
|
b
|

|
p
|
s
|
t
|
|
q
|
t
|
p
|
*
|
r
|
p
|
s
|
|
s
|
p
|
t
|
*
|
t
|
r
|
s
|
Resolución:
Para
la determinación del conjunto cociente, lo que debemos
buscar son el mínimo
conjuntos de estados que resultan diferentes entre sí y esto
lo realizamos a
través de la determinación de las clases de
equivalencia entre estados.
Para
ello partimos con la equivalencia de longitud 0 que
corresponderá a la división
en dos clases. Los estados que son de aceptación por un lado
y los que no por
otro lado, y luego en un proceso iterativo se continuará
verificando los
estados que continúen siendo equivalentes a medida que se
incrementa en 1 la
longitud de las estradas. El proceso finalizará cuando una
clase de
equivalencia se mantenga constante ante un incremento en la longitud de
la
entrada.
Q/E0
= [{ F } , {F}] =
[{ r
, t }{ p , q , s }]
Denominaremos con c1 = {r, t} y c2
= {p,q,s}
Lo que debemos hacer ahora, es
verificar si las clases de equivalencias detectadas hasta el momento (
c1 y c2)
continúan siéndolo ante una nueva entrada, o sea
debemos verificar si sus
estados integrantes siguen siendo equivalentes al incrementar la
longitud de la
cadena de entrada.
c1 = {r, t}:
Al estar constituido por los
estados
r y t, con una nueva entrada para cada uno de esos estados
deberán coincidir en
que transitarán a estados que pertenecen a una misma clase
de equivalencia.
|
f (
r , a ) = p
|
f (
r , b ) = s
|
|
f (
t , a ) = r
|
f (
t , b ) = s
|
Por lo tanto
f ( c1, a ) = van conjuntos cocientes
diferentes de la clase anterior, y por lo tanto los estados r y t no
podrán
seguir siendo equivalentes. No ocurre lo mismo con una entrada b, ya
que
f(c1,b) van a una misma clases de equivalencia anterior.
Pero con que al menos con una
entrada no vaya a una misma clase anterior, los estados r y t no
serán
equivalentes y por lo tanto deberán ser separados del
conjunto c1.
c2 = {p, q, s}:
Veremos como transitan ante una
nueva entrada (long. 1)
|
f (
p , a ) = s
|
c2
|
f (
p , b ) = t
|
c1
|
|
f (
q , a ) = t
|
c1
|
f (
q , b ) = p
|
c2
|
|
f (
s , a ) = p
|
c2
|
f (
s , b ) = t
|
c1
|
Vemos que los estados p y s
pertenecientes a c2 podrán continuar siendo equivalentes ya
que sus salidas a
las entradas respectivas caen dentro de una misma clase de equivalencia
anterior. No ocurre lo mismo con el estado q que deberá ser
separado de la
clase de equivalencia c2.
Por lo tanto Q/E1,
nos quedará:
Q/E1
= [{ r } , { t } ,
{ q }, {p , s }]
Denominaremos con d1 = {r} ; d2 =
{t} ; d3 = {q} ; d4
= {p,s}
Ahora debemos comprobar, si
incrementando en uno la cadena de entrada los estados p y s
continúan siendo equivalentes.
d4 = {p, s}:
Veremos que pasa con una nueva
entrada para cada uno de esos estados.
f (
p , a ) = s
|
d4 |
f (
p , b ) = t |
d2 |
f (
s , a ) = p
|
d4
|
f (
s , b ) = t
|
d2
|
De esta manera, se verifica que
ante
una nueva entrada, los estados p y s que son equivalentes,
continúan siéndolo.
Q/E2
= [{ r } , { t } ,
{ q }, {p , s }]
Vemos ahora que: Q/E1
= Q/E2, por lo tanto el proceso se
detiene, y las clases de equivalencias resultan:
Q/E
= [{ r } , { t } ,
{ q }, {p , s }]
Denominaremos con d1 = {r} ; d2 =
{t} ; d3 = {q} ; d4
= {p,s} a los estados, y el
nuevo autómata nos quedará:
AFD3 ´=
( { a , b
},
{ d1,
d2
, d3, d4 }, d4, {d1, d2}, f
) ,
donde:
f |
a |
b |
d1 |
d4 |
d4 |
d2 |
d1 |
d4 |
d3 |
d2 |
d4 |
d4
|
d4 |
d2 |
2.6.1.10.
Minimización
de
AFD
El
objetivo de minimización de los AFD, es obtener un
autómata equivalente al
dado, o sea que aceptará el mismo lenguaje,
pero este nuevo autómata
contendrá un menor número de estados.
Los
pasos a realizar para la obtención del autómata
mínimo son los siguientes:
·
Se
debe encontrar el autómata conexo,
para estos el autómata debe cumplir que todos sus estados
sean accesibles desde
el estado inicial. Si existiera algún estado que no
cumpliera con esta
condición se lo podrá eliminar, sin que se afecte
el lenguaje aceptado por el
autómata.
·
Determinar
el Conjunto cociente, en el
cuál nos
indicará el mínimo número de estados
con diferente significado.
· Construir
el nuevo autómata, para ello se utilizarán los
estados determinados por las clases de equivalencia. El estado inicial
del
nuevo autómata, pertenecerá a la clase de
equivalencia en donde se encuentre el
estado inicial del autómata original, y los mismo
ocurrirá con los estados
finales de aceptación, en donde serán los que
pertenezcan a clases de
equivalencias donde se encuentren estados finales de
aceptación del autómata
original. Con respecto a las transiciones de los nuevos estados, estas
se
realizarán en función a las transiciones de los
estados que conforman la clase
de equivalencia respectiva.
Ejemplo:
Dado el
siguiente AFD definido como:
AFD4 = (
∑, Q,
qi, F, f ),
donde:
∑=
{ a , b }
Q= { p, q, r , t, s }
qi
= p
F=
{q , r }
Donde
la función f será:
|
f |
a |
b |
 |
p |
s |
r |
* |
q |
t |
p |
* |
r |
p |
s |
|
s |
p |
r |
|
t |
t |
q |
Se pide :
a)
Grafo
b)
Autómata conexo
c)
Conjunto Cociente
d)
Autómata
mínimo
e)
Grafo del nuevo
autómata
f)
Identificar
una cadena de longitud 5 y verificar que la misma es aceptada por ambos
autómatas
Resolución:
a)
Grafo del Autómata

b) Autómata Conexo
Se verifica la accesibilidad de
estados desde el estado inicial, y vemos que los estados t y q resultan
inaccesibles, por lo tanto pueden ser descartados y nos queda un nuevo
AFD4
´, de la siguiente manera:
AFD4 ´ = (
{ a , b },
{ p, r
, s },
p, { r }, f ´)
,
donde:
Donde
la función f será:
|
f' |
a |
b |
 |
p |
s |
r |
* |
r |
p |
s |
|
s |
p |
r |
Y el nuevo grafo
será:

c) Conjunto cociente
Para la
determinación del conjunto
cociente, lo que debemos buscar son el mínimo conjuntos de
estados que resultan
diferentes entre sí y esto lo realizamos a través
de la determinación de las
clases de equivalencia entre estados.
Para
ello partimos con la equivalencia de longitud 0 que
corresponderá a la división
en dos clases. los estados que son de aceptación por un lado
y los que no por
otro lado.
Q/E0 = [
{p, s}, {r}]
Denominaremos con c1 = {p, s} y c2
= {r}
Lo que debemos hacer ahora, es
verificar si las clases de equivalencias detectadas hasta el momento
continúan
siéndolo ante una nueva entrada, o sea debemos verificar si
sus estados
integrantes siguen siendo equivalentes al incrementar la longitud de la
cadena
de entrada.
Por lo tanto, lo verificaremos
para
c1 = {p, s}. Al estar
constituido por los estados p y s, con una nueva entrada para cada uno
de esos
estados deberán coincidir en que transitarán a
estados que pertenecen a una
misma clase de equivalencia.
f (
p , a ) = s
f
( s , a ) =
p
La salida con la entrada a son
los estados s , p
que pertenecen a una
misma clase de equivalencia anterior por lo tanto, podemos decir que
f
( c1, a ) = c1
Con respecto a la entrada b:
f (
p , b ) = r
f
( s , b ) =
r
La salida con la entrada b es
el
estado r por lo tanto, podemos decir que
f ( c1, b ) = c2
Con lo que se puede afirmar,
que la
clase de equivalencia c1, continúa siéndolo para
una nueva entrada y por lo
tanto:
Q/E1 = [
{p, s}, {r}]
Ahora como Q/E0
= Q/E1 el proceso se
detiene y la
clase equivalencia con el
mínimo número de estados será
Q/E = [
{p, s}, {r}] = [
{c1}, {c2}]
d) Autómata
mínimo:
AFD4 ´´
= ( { a ,
b },
{ c1,
c2
}, c1, { c2 },
f´´ ) , donde:
El
estado inicial del nuevo
autómata será c1, ya que en este se encuentra
contenido el estado p que era el
estado inicial del autómata equivalente.
Con
respecto al estado c2, que es
el estado final de aceptación, lo es ya que tiene incluido
al estado r que lo
era anteriormente.
Para
el armado de la nueva
función de transición, lo haremos siguiendo las
transiciones originales de cada
uno de los estados que componen el estado resultante de la clase de
equivalencia, por lo tanto nos queda:
|
f'' |
a |
b |
 |
c1 |
c1 |
c2 |
* |
c2 |
c1 |
c1 |
e) Nuevo Grafo

f) Verificación:
Dadas
dos cadenas x1 y x2 ambas de longitud 5, verificaremos si ambos
autómatas son
capaces de reconocerlas
x1
= aabbb
x2
= baaab
Para
el caso del AFD4
f ( p, x1 )
= r
f ( p, x2 )
= r
En ambas cadenas al estado que
se
llega es r, el cuál pertenece
al
conjunto F por lo tanto ambas cadenas x1 y x2 son aceptadas por el
autómata AFD4.
Para el caso del AFD4´´
f ( c1, x1 )
= c2
f ( c1, x2 )
= c2
En ambas cadenas al estado que
se
llega es c2, el cuál pertenece
al
conjunto F por lo tanto ambas cadenas x1 y x2 son aceptadas por el
autómata AFD4´´.
2.6.1.11.
Configuración instantánea
y
movimiento
El
concepto de configuración
instantánea o descripción instantánea,
permite describir la configuración del
autómata en cada momento.
Representación: Lo representaremos
mediante un par ordenado (
q, w ) en donde, q Perteneciente al conjunto de estado Q, es el estado
en donde
se encuentra el autómata, w formada con los
símbolos del alfabeto de entrada,
será la cadena que resta por leer.
Configuración
Inicial:
Se
establecerá como:
( q0 , x )
; donde q0
será el estado
inicial, y x la cadena a ser leida
Configuración
Final:
Se
establecerá como:
( qn, )
=
;
donde qn será el estado en
donde se detiene el autómata, cuando no resta nada por leer ( ).
Movimiento:
Es
la transición de una configuración
a otra:
(
p, a )
( q , w ) ; dados p
, q
Q ;
a ∑
; w
∑*
este
movimiento será posible,
solo si existe una transición mediante la
aplicación de:
f( p , a ) = q
2.6.1.12.
Implementación de un
Algoritmo
Dentro
de los usos que se le pueden dar a las máquinas de estados,
y en particular a
los AFD, está el reconocimiento de cadenas. Para realizar
este reconocimiento
en forma precisa y automatizada, el mismo puede implementarse en
cualquier
lenguaje de programación.
Será posible que
habiendo diseñado
un autómata que sea capaz de reconocer un conjunto de
cadenas de un lenguaje,
construir un programa que implemente dicho autómata en
algún lenguaje de
programación, a tal fin el Algoritmo de funcionamiento del
programa puede ser
obtenido a partir del AFD en forma directa.
Ejemplo:
AFD5 = (
{0,1},
{p,q,r,s,t}, p, {q}, f ),
donde:
Donde la función f :
|
f |
0 |
1 |
 |
p |
s |
t |
* |
q |
q |
t |
|
r |
q |
t |
|
s |
s |
r |
|
t |
t |
t |
El Grafo será:

El lenguaje aceptado por esta
autómata es:
L AFD5 = { x / x W(Σ) /
an.b.am
con n,m 1
}
Diagrama de flujo de algoritmo:
El diagrama de flujo elemental,
asumiendo que en la entrada solo se ingresarán
símbolos a y b, y que siempre se
ingresará al menos un carácter válido
es el siguiente:
|