3.1.- Autómatas Finitos
Deterministicos (AFD)
Consideremos el lenguaje regular A
representado por c*(a È bc*)*. Si dada una cadena w se nos pregunta si w
pertenece a A, debemos analizar no sólo los caracteres que aparecen en w,
si no también sus posiciones relativas. Por ejemplo, la cadena abc5c3ab
esta en A, sin embargo cabac3bc no lo ésta. Podemos
construir un diagrama que nos ayude a determinar los distintos miembros del
lenguaje. Tal diagrama tiene la forma de un grafo dirigido con una información
adicional añadida, y se llama diagrama de transición. Los nodos del
grafo se llaman estados y se usan para señalar, en ese momento, hasta
que lugar se ha analizado la cadena. Las aristas del grafo se etiquetan con
caracteres del alfabeto y se llaman transiciones. Si el siguiente
carácter a reconocer concuerda con la etiqueta de algua transición que parta
del estado actual, nos desplazamos al estado al que nos lleve la arista
correspondiente. Naturalmente, nosotros debemos comenzar por un estado
inicial, y cuando se hayan tratado todos los caracteres de la cadena
correspondiente, necesitamos saber si la cadena es “legal”. Para ello se marcan
ciertos estados como estados de aceptación o estados finales.
Si cuando ha sido tratada la cadena en su totalidad terminamos en un estado de
aceptación, entonces la cadena es “legal”. Marcaremos el estado inicial con una
flecha (à) y alrededor
de los estados de aceptación trazaremos un circulo.
Formalmente un autómata finito
determinista M es una colección de 5 elementos.
1.- Un alfabeto de entrada S
2.- Una colección finita de estados
Q
3.- Un estado inicial S
4.- Una colección F de estados
finales o de aceptación
5.- Una función d: Q x S à Q que determina el único estado siguiente para el par (qi,s) correspondiente al estado actual y
la entrada.
Generalmente el termino autómata
finito determinista se abrevia como AFD. Usaremos M=(Q,S,S,F,d) para indicar el conjunto de estados, el
alfabeto, el estado inicial, el conjunto de estados finales y la función
asociada con el AFD M.
La característica principal de un
AFD es que d es una función.
Por tanto d se debe
definir para todos los pares (qi,s) de Q x S. Esto significa que sea cual seas el estado
actual y el carácter de la entrada, siempre hay un estado siguiente y este es
único. Por tanto, para un par (qi,s). En otras palabras, el estado siguiente está
totalmente determinado por la información que proporciona el par (qi,s).
Se puede crear un diagrama de
transición a partir de la definición de un AFD. Primero, creamos y etiquetamos
un nodo para cada estado. Entonces, para cada celda qj de la fila
correspondiente a estado qi trazamos una arista desde qi
a qj etiquetada tonel carácter de entrada asociado a qj.
Finalmente, se marca el nodo S con una flecha, y se trazan unos círculos en
todos los nodos de F para indicar cuales son los estados de aceptación. Por
tanto, el diagrama de transición para el AFD M=(Q,S,S,F,d), donde
Q = {q0,q1}
S = {a,b}
S = q0
F = { q0 }
y d representada mediante la tabla:
d |
a |
B |
q0 |
q0 |
q1 |
q1 |
q1 |
q0 |
3.2.- Autómatas Finitos No
Deterministicos (AFND)
Si se permite que desde un estado se
realicen cero, una o mas transiciones mediante el mismo símbolo de entrada, se
dice que el autómata es no deterministico. A veces es mas conveniente
diseñas autómatas finitos no deterministicos (AFND) en lugar de los autómatas
Finitos Deterministicos (AFD). Consideremos un lenguaje a*b È ab*. Las cadenas pertenecientes a
este lenguaje están formadas por algunas aes seguidas de una b o por una
a seguida de varias bes.
Aunque diseñar un diagrama es relativamente sencillo,
debemos detenernos en poder determinar si este diagrama de transición
corresponde al AFD de A. primero se debe comprobar que reconoce solo las
cadenas pertenecientes a A, y después, si representa un AFD. Para ello, debemos
comprobar que las reglas de transición constituyen una función, es decir, que
de cada estado parte una y solo una transición para cada símbolo del alfabeto.
Consideremos ahora el diagrama de
transición del AFD, este diagrama acepta solo cadenas pertenecientes a A.
Fíjese también que las reglas de transición no son una función de QxS en Q porque no asigna un estado
siguiente a los pares estado-entrada (q4,a), (q3,a), (q3,b),
(q2,a) y (q2,b). es mas, existe mas de un estado
siguiente correspondiente al par (q0,a).
Si tratamos de definir el término autómata
finito no determinista, veremos que la mayor parte de la definición se
puede obtener a partir de la de AFD. Es decir, tendremos un conjunto finito de
estados Q, un alfabeto de entradaS, un estado inicial o de partida S, un conjunto de estados de aceptación
F, y una regla de transición. La única diferencia que existe se encuentra en
las reglas de transición. En un AFND, las reglas se asocian pares (q,s) con cero o más estados. Se puede
decir que las reglas relacionan pares (q,s) con colecciones o conjuntos de estados. Esto
significa que la regla es una relacion entre QxS y Q, o sobre (QxS)xQ. Por tanto, definiremos un autómata
finito no determinista mediante una colección de 5 objetos (Q,S,S,F,D) donde:
1.- Q es un conjunto finito de
estados
2.- S es el alfabeto de entrada
3.- S es uno de los estados de Q,
designado como punto de partida
4.- F es una colección de estados de
aceptación o finales.
5.- D es una relación sobre (QxS)xQ y se llama relación de
transición.
Obsérvese que puesto que D es una relación para todo par (q,s) compuesto por el estado actual y
el símbolo de entrada, D(q,s) e una
colección de cero o mas estados [es decir, D(q,s) Í Q]. Esto
indica que, para todo estado q, se pueden tener cero o mas alternativas a
elegir como estado siguiente, todas para el mismo símbolo de entrada.
Como con los AFND, si M es un AFND,
definimos el lenguaje aceptado por M or medio de :
L(M) = {w | w es una cadena aceptada
por M}
Donde una cadena w es aceptada por
M, si M pasa de su estado inicial a un estado de aceptación o final al recorrer
w (w es consumida en su totalidad).
Para determinar si una cadena
pertenece a L(M), se debe recorrer el diagrama de transición correspondiente a
M. Debemos encontrar un camino que termine en un estado de aceptación cuando
haya sido consumida toda la cadena. Durante el recorrido, debemos elegir de
forma no deterministica la transición de un estado a otro cuando existe más de
una para el mismo símbolo. Para afirmar que la cadena no esta en L(M), debemos
agotar todas las formas posibles de recorrer el diagrama de transición
para dicha cadena. Para diagramas de transición sencillos, esto puede ocasionar
un problema de gasto de tiempo. El siguiente ejemplo proporciona una forma de
abordar este problema de una manera distinta, evitando la búsqueda exhaustiva
por el diagrama.
La naturaleza recursiva del
análisis de cadenas que vimos para los AFD se mantiene en los AFND si la
notación se define con cuidado. Si XÍQ, vamos a interpretar D(X,s) como
el conjunto de estados {p | q Î X y pÎD (q,s)}. Por tanto, D(X,s) es
el conjunto de todos los estados siguientes a los que se puede llegar desde X
con la entradas. Obsérvese que D(X,s)= ÈqÎX D (q,s)
[recuerdese que D(q,s) es un conjunto para cualquier estado q].
3.3.- Equivalencia entre AFD y AFND.
Hemos definido la equivalencia para
los AFD. Extenderemos esta definición para la clase de todos los autómatas
finitos (AFD y AFND)de forma que un autómata M es equivalente a un autómata M’
si L(M) = L(M’).
Ya que una función es un caso
especial de relación (es decir, las funciones son relaciones que poseen requerimientos
adicionales), las funciones de los AFD se consideran como relaciones en los
AFND. En consecuencia, todo AFD es un AFND. La colección d lenguajes aceptados
por los AFND incluye a todos los lenguajes aceptados por los AFD. De esto
resulta que los AFND solo aceptan lenguajes aceptados por los AFD. Por lo
tanto, los AFND no son más potentes que los AFD con respecto a los lenguajes
que aceptan. Para probar esto, necesitamos demostrar que todo lenguaje aceptado
por un AFND también es aceptado por algún AFD.
Sean M=(Q,S,S,F,D) un AFND. En el tema anterior presentamos una forma de recorrer M, de
la cual se obtenía la colección de todos los estados accesibles desde el estado
inicial en cada una de las etapas de análisis de una cadena. Estas técnicas proporcionan
la base para construir un AFD M’=(Q’,S’,S’,F’,d’) que acepte
el mismo lenguaje que M. Esencialmente, lo que se pretende es hacer que cada
estado Q’ se corresponda con un conjunto de estados Q. Cuando se analiza una
cadena con M, esta se acepta cuando la colección finadle estados contiene al
menos un estado de aceptación perteneciente a F. por tanto, haremos que F’ sea
el conjunto de estados de Q’ que se correspondan con los conjuntos de estados
(de Q) que contienen un estado de F. haremos corresponder a S’ con el conjunto
{S}.S’=S y definiremos d de forma que nos desplacemos de un conjunto de
estados de M a otro, como se hace D.
Ahora demostraremos formalmente que
todo lenguaje aceptado por un AFND es también aceptado por un AFD, con lo que
probaremos que los lenguajes AFND y los lenguajes AFD están formados por la
misma colección de lenguajes.
Teorema 1.- Sea M=(Q,S,S,F,D) un AFND. Entonces existe un AFD M’= (Q’,S’,S’,F’,d’) que es equivalente a M.
Demostración: Definamos M’=(Q’,S’,S’,F’,d’) como sigue: sea S’={S}, S’=S, Q’=2Q (que es la colección de
todos los subconjuntos de Q) y F’ la colección de todos los conjuntos de
Q’ que contienen estados de F. Para cada conjunto (qi1,qi2,qin)
de Q’ y cada símbolo de entrada s de S, definiremos a como:
d({qi1, qi2,
…,q1n},s) ={p1,p2,…pk)
D({qi1,qi2,…,qin},s) = {p1,p2,…,pk}
Obsérvese que d, definida de esta forma, es una
función Q’xS’ en Q’, puesto
que esta bien definida para todos los elementos de Q’xS’.
Para probar que L(M) = L(M’),
debemos demostrar que para toda la cadena w, d(S’,w)={p1,p2,…,pj}
si y solo si D (S,w)={p1,p2,…,pj}
con lo cual M’ acepta w si y solo si M acepta w. Probaremos esto por inducción
sobre la longitud de w. Si la longitud de w es 0 (es decir w=e), entonces:
D(S,w)=D (S,e) = {S} = d (S’,w)
Ahora supongamos que para toda
cadena w de longitud menor o igual que m se tiene que D(S,w)=d(S’,w). Supongamos que u es una cadena de longitud m+1. Entonces,
existirá algún sÎS, de forma que se obtiene que u=ws, donde w es una cadena de longitud m. En este
caso, d(S’ws) = d(d(S’,w),s). Ahora, por
la hipótesis de inducción, dado que w tiene longitud m, d(S’,w)= {p1,p2,…,pj}
si y solo si D(s,w)={p1,p2,…,pj}.Pero
por la forma en la que hemos definido d, tendremos que:
d({p1,p2,…,pj},s) = {r1,r2,…,rk}
si y solo si
D({p1,p2,…,pj},s)= {r1,r2,…,rk}
Por lo que d(S’,ws) = {r1,r2,…,rk} si y solo si D (S,ws) =
{r1,r2,…,rk}. Es decir, la igualdad se cumple para cadenas de longitud m+1 si
se cumple para cadenas de longitud m. Entonces por lo anterior tenemos que d(S’,w) es un estado de F’ si y solo
si D(S,w) contiene algún estado de F.
Por tanto M’ acepta w si y solo si M acepta w.
3.3.- Equivalencia entre AFD y AFND.
Hemos definido la equivalencia para
los AFD. Extenderemos esta definición para la clase de todos los autómatas
finitos (AFD y AFND)de forma que un autómata M es equivalente a un autómata M’
si L(M) = L(M’).
Ya que una función es un caso
especial de relación (es decir, las funciones son relaciones que poseen
requerimientos adicionales), las funciones de los AFD se consideran como
relaciones en los AFND. En consecuencia, todo AFD es un AFND. La colección d
lenguajes aceptados por los AFND incluye a todos los lenguajes aceptados por
los AFD. De esto resulta que los AFND solo aceptan lenguajes aceptados por los
AFD. Por lo tanto, los AFND no son más potentes que los AFD con respecto a los
lenguajes que aceptan. Para probar esto, necesitamos demostrar que todo lenguaje
aceptado por un AFND también es aceptado por algún AFD.
Sean M=(Q,S,S,F,D) un AFND. En el tema anterior presentamos una forma de recorrer M, de
la cual se obtenía la colección de todos los estados accesibles desde el estado
inicial en cada una de las etapas de análisis de una cadena. Estas técnicas
proporcionan la base para construir un AFD M’=(Q’,S’,S’,F’,d’) que acepte el mismo lenguaje que M.
Esencialmente, lo que se pretende es hacer que cada estado Q’ se corresponda
con un conjunto de estados Q. Cuando se analiza una cadena con M, esta se
acepta cuando la colección finadle estados contiene al menos un estado de
aceptación perteneciente a F. por tanto, haremos que F’ sea el conjunto de
estados de Q’ que se correspondan con los conjuntos de estados (de Q) que
contienen un estado de F. haremos corresponder a S’ con el conjunto {S}.S’=S y definiremos d de forma que nos desplacemos de un conjunto de
estados de M a otro, como se hace D.
Ahora demostraremos formalmente que
todo lenguaje aceptado por un AFND es también aceptado por un AFD, con lo que
probaremos que los lenguajes AFND y los lenguajes AFD están formados por la
misma colección de lenguajes.
Teorema 1.- Sea M=(Q,S,S,F,D) un AFND. Entonces existe un AFD M’= (Q’,S’,S’,F’,d’) que es equivalente a M.
Demostración: Definamos M’=(Q’,S’,S’,F’,d’) como sigue: sea S’={S}, S’=S, Q’=2Q (que es la colección de
todos los subconjuntos de Q) y F’ la colección de todos los conjuntos de
Q’ que contienen estados de F. Para cada conjunto (qi1,qi2,qin)
de Q’ y cada símbolo de entrada s de S, definiremos a como:
d({qi1, qi2,
…,q1n},s) ={p1,p2,…pk)
D({qi1,qi2,…,qin},s) = {p1,p2,…,pk}
Obsérvese que d, definida de esta forma, es una
función Q’xS’ en Q’, puesto
que esta bien definida para todos los elementos de Q’xS’.
Para probar que L(M) = L(M’),
debemos demostrar que para toda la cadena w, d(S’,w)={p1,p2,…,pj}
si y solo si D (S,w)={p1,p2,…,pj}
con lo cual M’ acepta w si y solo si M acepta w. Probaremos esto por inducción
sobre la longitud de w. Si la longitud de w es 0 (es decir w=e), entonces:
D(S,w)=D (S,e) = {S} = d (S’,w)
Ahora supongamos que para toda
cadena w de longitud menor o igual que m se tiene que D(S,w)=d(S’,w). Supongamos que u es una cadena de longitud m+1. Entonces,
existirá algún sÎS, de forma que se obtiene que u=ws, donde w es una cadena de longitud m. En este
caso, d(S’ws) = d(d(S’,w),s). Ahora, por
la hipótesis de inducción, dado que w tiene longitud m, d(S’,w)= {p1,p2,…,pj}
si y solo si D(s,w)={p1,p2,…,pj}.Pero
por la forma en la que hemos definido d, tendremos que:
d({p1,p2,…,pj},s) = {r1,r2,…,rk}
si y solo si
D({p1,p2,…,pj},s)= {r1,r2,…,rk}
Por lo que d(S’,ws) = {r1,r2,…,rk} si y solo si D (S,ws) =
{r1,r2,…,rk}. Es decir, la igualdad se cumple para cadenas de longitud m+1 si
se cumple para cadenas de longitud m. Entonces por lo anterior tenemos que d(S’,w) es un estado de F’ si y solo
si D(S,w) contiene algún estado de F.
Por tanto M’ acepta w si y solo si M acepta w.
3.3.- Equivalencia entre AFD y AFND.
Hemos definido la equivalencia para
los AFD. Extenderemos esta definición para la clase de todos los autómatas
finitos (AFD y AFND)de forma que un autómata M es equivalente a un autómata M’
si L(M) = L(M’).
Ya que una función es un caso
especial de relación (es decir, las funciones son relaciones que poseen
requerimientos adicionales), las funciones de los AFD se consideran como
relaciones en los AFND. En consecuencia, todo AFD es un AFND. La colección d lenguajes
aceptados por los AFND incluye a todos los lenguajes aceptados por los AFD. De
esto resulta que los AFND solo aceptan lenguajes aceptados por los AFD. Por lo
tanto, los AFND no son más potentes que los AFD con respecto a los lenguajes
que aceptan. Para probar esto, necesitamos demostrar que todo lenguaje aceptado
por un AFND también es aceptado por algún AFD.
Sean M=(Q,S,S,F,D) un AFND. En el tema anterior presentamos una forma de recorrer M, de
la cual se obtenía la colección de todos los estados accesibles desde el estado
inicial en cada una de las etapas de análisis de una cadena. Estas técnicas
proporcionan la base para construir un AFD M’=(Q’,S’,S’,F’,d’) que acepte el mismo lenguaje que M.
Esencialmente, lo que se pretende es hacer que cada estado Q’ se corresponda
con un conjunto de estados Q. Cuando se analiza una cadena con M, esta se
acepta cuando la colección finadle estados contiene al menos un estado de
aceptación perteneciente a F. por tanto, haremos que F’ sea el conjunto de
estados de Q’ que se correspondan con los conjuntos de estados (de Q) que
contienen un estado de F. haremos corresponder a S’ con el conjunto {S}.S’=S y definiremos d de forma que nos desplacemos de un conjunto de
estados de M a otro, como se hace D.
Ahora demostraremos formalmente que
todo lenguaje aceptado por un AFND es también aceptado por un AFD, con lo que
probaremos que los lenguajes AFND y los lenguajes AFD están formados por la
misma colección de lenguajes.
Teorema 1.- Sea M=(Q,S,S,F,D) un AFND. Entonces existe un AFD M’= (Q’,S’,S’,F’,d’) que es equivalente a M.
Demostración: Definamos M’=(Q’,S’,S’,F’,d’) como sigue: sea S’={S}, S’=S, Q’=2Q (que es la colección de
todos los subconjuntos de Q) y F’ la colección de todos los conjuntos de
Q’ que contienen estados de F. Para cada conjunto (qi1,qi2,qin)
de Q’ y cada símbolo de entrada s de S, definiremos a como:
d({qi1, qi2,
…,q1n},s) ={p1,p2,…pk)
D({qi1,qi2,…,qin},s) = {p1,p2,…,pk}
Obsérvese que d, definida de esta forma, es una
función Q’xS’ en Q’, puesto
que esta bien definida para todos los elementos de Q’xS’.
Para probar que L(M) = L(M’),
debemos demostrar que para toda la cadena w, d(S’,w)={p1,p2,…,pj}
si y solo si D (S,w)={p1,p2,…,pj}
con lo cual M’ acepta w si y solo si M acepta w. Probaremos esto por inducción
sobre la longitud de w. Si la longitud de w es 0 (es decir w=e), entonces:
D(S,w)=D (S,e) = {S} = d (S’,w)
Ahora supongamos que para toda
cadena w de longitud menor o igual que m se tiene que D(S,w)=d(S’,w). Supongamos que u es una cadena de longitud m+1. Entonces,
existirá algún sÎS, de forma que se obtiene que u=ws, donde w es una cadena de longitud m. En este
caso, d(S’ws) = d(d(S’,w),s). Ahora, por
la hipótesis de inducción, dado que w tiene longitud m, d(S’,w)= {p1,p2,…,pj}
si y solo si D(s,w)={p1,p2,…,pj}.Pero
por la forma en la que hemos definido d, tendremos que:
d({p1,p2,…,pj},s) = {r1,r2,…,rk}
si y solo si
D({p1,p2,…,pj},s)= {r1,r2,…,rk}
Por lo que d(S’,ws) = {r1,r2,…,rk} si y solo si D (S,ws) =
{r1,r2,…,rk}. Es decir, la igualdad se cumple para cadenas de longitud m+1 si
se cumple para cadenas de longitud m. Entonces por lo anterior tenemos que d(S’,w) es un estado de F’ si y solo
si D(S,w) contiene algún estado de F.
Por tanto M’ acepta w si y solo si M acepta w.