next up previous contents
Siguiente: Equivalencia entre AFND y Subir: Autómatas finitos Anterior: Equivalencia entre AFD y   Índice General

Autómatas finitos no-deterministas con transiciones $\epsilon $ (AFND-$\epsilon $)

Queremos construir un autómata que acepta el lenguaje

\begin{displaymath}L=\{a^ib^jc^k \;\vert\;i,j,k \in\bbbn\} \end{displaymath}

Si fuesemos capaz de saltar mágicamente, es decir, sin consumir una letra de la entrada, de un estado a otro, sería fácil la construcción:

\fbox{AUTaibjckeps}

Es decir, hemos introducido aristas marcados con la palabra vacía $\epsilon $.

Un autómata finito no-determinista con transiciones $\epsilon $ (AFND-$\epsilon $) es una quíntupla


\begin{displaymath}M=(\Sigma,Q,\delta,q_0,F) \end{displaymath}

donde

Observamos que añadir más aristas con $\epsilon $ obviamente no cambia el comportamiento del autómata:

\fbox{AUTaibjckepstrans}

Podemos tratar las transiciones con $\epsilon $ como una relación $T$ sobre el conjunto de estados, es decir

\begin{displaymath}T=T_1=\{(q,p)\;\vert\;\delta(q,\epsilon)=p\}\subset Q\times Q \end{displaymath}

En el ejemplo tenemos

\begin{displaymath}T_1=\{(q_0,q_1),(q_1,q_2)\} \end{displaymath}

Esta relación podemos ampliar para que sea reflexiva, es decir, que todas las parejas $(q,q)$ con $q\in Q$ formen parte de la relación, es decir, formamos

\begin{displaymath}T_0=\{(q,q)\;\vert\;q\in Q\} \end{displaymath}

y con eso

\begin{displaymath}T=T_0\cup T_1 \end{displaymath}

entonces $T$ por construcción es una relación reflexiva. En el ejemplo tenemos

\begin{displaymath}T_0=\{(q_0,q_0),(q_1,q_1),(q_2,q_2)\} \end{displaymath}

y con eso

\begin{displaymath}T=\{(q_0,q_0),(q_0,q_1),(q_1,q_1),(q_1,q_2),(q_2,q_2)\} \end{displaymath}

Podemos ampliar la relación aun más considerando el efecto transitivo de las transiciones $\epsilon $, es decir, formamos en un primer paso

\begin{displaymath}T_2=\{(q,p)\;\vert\;\exists r\in Q\;:\;(q,r),(r,p)\in T_0\cup T_1
\mbox{ y } (q,p)\notin T_0\cup T_1\} \end{displaymath}

y con eso

\begin{displaymath}T=T_0\cup T_1 \cup T_2\end{displaymath}

en el ejemplo tenemos

\begin{displaymath}T_2=\{(q_0,q_2)\} \end{displaymath}

y así sucesivamente

\begin{displaymath}T_i=\{(q,p)\;\vert\;\exists r\in Q\;:\;(q,r),(r,p)\in \bigcup_{j=0}^{i-1} T_j
\mbox{ y } (q,p)\notin \bigcup_{j=0}^{i-1} T_j\} \end{displaymath}

Finalmente definimos

\begin{displaymath}T^*=T_0\cup T_1\cup T_2 \cup \dots = \bigcup_{i=0}^\infty T_i \end{displaymath}

como clausura (o ciero, o cerradura) transitiva de la relación de las transiciones $\epsilon $ o más breve clausura-$\epsilon $.

El proceso termina en nuestro caso de autómatas finitos, es decir, la unión va solamente sobre un número finito de $i$s, porque $T^*$ sigue siendo un subconjunto del conjunto finito $Q\times Q$ ($T^*Q\times Q$).

Con la clausura-$\epsilon $ podemos definir la clausura-$\epsilon $ de un estado, como todos aquellos estados que se puede alcanzar con caminos de transisiones $\epsilon $, es decir


\begin{displaymath}cl(q)=\{p\;\vert\;(q,p)\in T^*\} \end{displaymath}

En el ejemplo:

\begin{eqnarray*}
cl(q_0) &=& \{q_0,q_1,q_2\}\\
cl(q_1) &=& \{q_1,q_2\}\\
cl(q_2) &=& \{q_2\}
\end{eqnarray*}

\fbox{AUTaibjckafnd}

Entonces podemos formalizar el lenguaje aceptado por un AFND-$\epsilon $ (parecido a lo que hicimos para un AFND).

Primero definimos la ampliación de $\delta$ para autómatas con transiciones $\epsilon $. $\delta^*(q,w)$ va a ser el conjunto de estados (igual como en el caso de $\delta^*$ para AFNDs) que podemos alcanzar desde $q$ leyendo la palabra. Entonces:


\begin{displaymath}\delta^*: Q\times \mbox{$\Sigma^*$}\longrightarrow {\cal P}(Q) \end{displaymath}


  1. \begin{displaymath}\delta^*(q,\epsilon)=cl(q) \end{displaymath}

    es decir, nos quedamos en la clausura-$\epsilon $ si hemos alcanzado el final de la palabra
  2. \begin{eqnarray*}
\delta^*(q,w\sigma) &=&
\{ p \;\vert\;p\in Q \mbox{ y } \ex...
...ma)) \} \\
&=& \bigcup_{r\in\delta^*(q,w)}cl(\delta(r,\sigma))
\end{eqnarray*}

    es decir, $\delta^*(q,w)$ es el conjunto de estados alcanzables desde un estado $r$ siendo miembro de la clausura-$\epsilon $ de un estado alcanzable desde $q$ sin haber leído el último símbolo $\sigma$.

$\delta^*(q_0,w)$ enumera entonces todos los estados alcanzables desde $q_0$ leyendo la palabra $w$.

Observa: Hemos dado una definición recursiva desde la izquierda, es decir, añadimos un símbolo a la derecha. Hubiese sido posible definir $\delta^*$ para un AFND de la misma manera.

Un autómata no-determinista con transiciones $\epsilon $ $M$ acepta una palabra $w$ sobre el alfabeto $\Sigma$ ( $w\in\mbox{$\Sigma^*$}$) si

\begin{displaymath}\delta^*(q_0,w)\cap F\not= \emptyset \end{displaymath}

donde $\delta^*$ sea la ampliación de la funciòn $\delta$ dada arriba.

El lenguaje aceptado por $M$ es (como siempre)

\begin{displaymath}L(M) = \{ w \;\vert\;M \mbox{ acepta } w \} \end{displaymath}


next up previous contents
Siguiente: Equivalencia entre AFND y Subir: Autómatas finitos Anterior: Equivalencia entre AFD y   Índice General
© 2006, Dr. Arno Formella, Universidad de Vigo, Departamento de Informática