Ir al contenido

Autómatas finitos

Concepto Clave: “Una máquina sin dudas”.

Un AFD es el modelo más estricto. Imagínalo como un tablero de juego donde, dado una casilla (estado) y una carta (símbolo), solo tienes una única jugada legal.

Características para identificar un AFD:

  • Determinismo: Para cada estado y cada símbolo del alfabeto, existe exactamente una flecha de salida. Ni cero, ni dos. Una.
  • Sin magia: No existen movimientos “gratuitos” (no hay transiciones ε\varepsilon).

Definición Formal (La “5-tupla”): En ejercicios teóricos, siempre debes definir estas 5 partes:

A=(Q,Σ,δ,q0,F)A = (Q, \Sigma, \delta, q_0, F)

  • QQ: Catálogo de todos los estados (los círculos).
  • Σ\Sigma: Alfabeto (las letras o números admitidos, ej: {0,1}\{0, 1\}).
  • δ\delta: El mapa de carreteras. Es una función Q×ΣQQ \times \Sigma \to Q. (Entra un estado y un símbolo, sale un estado).
  • q0q_0: Donde empieza todo (flecha sin origen).
  • FF: Donde ganamos (doble círculo).

Función de Transición Extendida (δ^\hat{\delta})

Sección titulada «Función de Transición Extendida (δ^\hat{\delta}δ^)»

1. Diferencia Conceptual

  • δ\delta (Transición simple): Procesa un solo símbolo a la vez. Es el “paso a paso” del autómata.
  • δ^\hat{\delta} (Transición extendida): Procesa una cadena completa (ww) desde el estado actual hasta el final. Calcula la “ruta entera”.
  1. Definición Formal (Recursiva): Para procesar una cadena, la máquina descompone el problema por inducción:

    • Caso Base (Cadena vacía): Si no leo nada, me quedo en el mismo estado. δ^(q,λ)=q\hat{\delta}(q, \lambda) = q
    • Paso Inductivo (Cadena w=xaw = xa):
      δ^(q,w)=δ(δ^(q,x),a)\hat{\delta}(q, w) = \delta( \hat{\delta}(q, x), a )

    Significado: Primero calculo dónde acabo con el prefijo xx (usando δ^\hat{\delta}) y, desde ese estado intermedio, doy el último paso con el símbolo final aa (usando δ\delta).

  2. Definición de Lenguaje Aceptado: Una cadena ww pertenece al lenguaje del autómata L(A)L(A) si, al procesarla entera desde el inicio, acabamos en un estado final: L(A)={wδ^(q0,w)F}L(A) = \{ w \mid \hat{\delta}(q_0, w) \in F \}

Concepto Clave: “Procesamiento en paralelo” o “Multiverso”.

El AFN es una máquina teórica más flexible. A diferencia del AFD, aquí la máquina puede “adivinar” el camino correcto.

Diferencias prácticas para ejercicios

  • Ambigüedad: Desde un estado con un símbolo (ej: ‘a’), pueden salir múltiples flechas o ninguna.
  • Multiverso: Si hay dos flechas con ‘a’, el autómata se clona y sigue ambos caminos a la vez.
  • Aceptación: Si al menos una de las copias del autómata llega a un estado final al terminar la cadena, la cadena se acepta. Si todas mueren o acaban en no-finales, se rechaza.

Definición Formal La única diferencia real con el AFD está en la función de transición δ\delta: δ:Q×(Σ{ε})2Q\delta: Q \times (\Sigma \cup \{\varepsilon\}) \to 2^Q

  • Traducción: La función devuelve un conjunto de estados (potencia de QQ), no un estado único. Puede devolver un conjunto vacío \emptyset (callejón sin salida).

En el AFN, puedes estar en varios estados a la vez y elegir entre múltiples caminos.

Función de Transición Extendida en AFN (δ^\hat{\delta})

Sección titulada «Función de Transición Extendida en AFN (δ^\hat{\delta}δ^)»
  • Concepto clave: A diferencia del determinista (que devuelve un estado), en un AFN la función devuelve un conjunto de estados {p1,,pk}\{p_1, \dots, p_k\}, representando todos los caminos posibles simultáneos.

  • Definición Recursiva:

    1. Base (λ\lambda): Si no hay entrada, el conjunto es solo el estado actual: δ^(q,λ)={q}\hat{\delta}(q, \lambda) = \{q\}.
    2. Inducción (w=xaw = xa): Para procesar una cadena, primero calculas los estados a los que llegas con el prefijo xx, aplicas la transición de la última letra aa a cada uno de ellos, y unes los resultados. δ^(q,w)=δ(pi,a)\hat{\delta}(q, w) = \bigcup \delta(p_i, a)
  • Condición de Aceptación: Una cadena se acepta si, al terminar de leerla, el conjunto de estados posibles contiene al menos un estado final. L(A)={wδ^(q0,w)F}L(A) = \{ w \mid \hat{\delta}(q_0, w) \cap F \neq \emptyset \}

2.3 Transiciones ε\varepsilon (Epsilon) y Clausura-ε

Sección titulada «2.3 Transiciones ε\varepsilonε (Epsilon) y Clausura-ε»

Una transición ε\varepsilon es un teletransporte. Permite al autómata cambiar de estado sin leer nada de la cinta de entrada. Te permite estar en varios estados al mismo tiempo

Para resolver ejercicios de conversión, necesitas dominar la Clausura-ε.

  • Pregunta: “¿A dónde puedo llegar desde aquí sin gastar ni una moneda (símbolo)?”
  • Regla: La clausura-ε(q) siempre incluye al propio estado qq más cualquier estado alcanzable solo con flechas ε\varepsilon.

La clausura de la imagen anterior sería:

Algoritmo para sacar la clausura:

  1. Sitúate en un estado (ej: q0q_0).
  2. Mete q0q_0 en tu saco (siempre llegas a ti mismo).
  3. Mira si salen flechas con ε\varepsilon. Si sí, sigue esas flechas a los nuevos estados.
  4. Desde esos nuevos estados, ¿salen más ε\varepsilon? Síguelas también.
  5. Repite hasta que no puedas avanzar más sin leer letras.

Ejemplo: q0εq1εq2q_0 \xrightarrow{\varepsilon} q_1 \xrightarrow{\varepsilon} q_2

  • Clausura(q0)={q0,q1,q2}Clausura(q_0) = \{q_0, q_1, q_2\}
  • Clausura(q1)={q1,q2}Clausura(q_1) = \{q_1, q_2\}

Los ordenadores reales no son “adivinos” (no son no-deterministas). Para programar un AFN, primero debemos convertirlo a AFD.

Como el AFN puede estar en varios sitios a la vez, cada estado del nuevo AFD será un grupo de estados del AFN original.

Para un ANF de nn estados, el AFD equivalente tendrá como máximo 2n2^n estados.

Algoritmo:

  1. Inicio: Calcula la clausura-ε(q0)clausura\text{-}\varepsilon(q_0) del AFN. Este conjunto de estados es tu estado inicial del AFD. Llámalo “A”.

  2. Iteración: Para el nuevo estado “A” y cada símbolo del alfabeto (ej: 0 y 1):

    • Mira a dónde van los estados dentro de “A” con ese símbolo.
    • A los destinos, aplícales clausura-εclausura\text{-}\varepsilon.
    • El resultado es un nuevo conjunto. ¿Ya existe? Úsalo. ¿No existe? Bautízalo como “B”.
  3. Iteración: Repite el paso 2 con “B”, “C”, etc., hasta que no aparezcan conjuntos nuevos.

  4. Estados Finales: Cualquier estado del AFD (A, B, C…) que contenga al menos un estado final del AFN original, se convierte en estado final.

Fórmula mateḿatica (si la pide se la saca): δD(S,a)=pSδN(p,a)\delta_D(S, a) = \bigcup_{p \in S} \delta_N(p, a) Imagina que estás en el estado combinado S={q1,q2}S = \{q_1, q_2\} y llega una letra ‘a’. ¿A dónde va la flecha?

  1. Preguntas: “¿A dónde va q1q_1 con la ‘a’?” \rightarrow Digamos que va a {x,y}\{x, y\}.
  2. Preguntas: “¿A dónde va q2q_2 con la ‘a’?” \rightarrow Digamos que va a {z}\{z\}.
  3. Haces la Unión (\bigcup): El resultado es el nuevo estado {x,y,z}\{x, y, z\}.

Ejemplo práctico:

Objetivo: Encontrar el autómata más pequeño posible que haga exactamente lo mismo. Elimina redundancia.

Algoritmo

  1. Partición Inicial (E0E_0): Divide los estados en solo dos grupos (clases):
  • Finales (FF): Todos los estados de aceptación.
  • No Finales (QFQ \setminus F): El resto.
  • Etiqueta cada grupo como C1,C2,C_1, C_2, \dots
  1. Construcción de la Tabla de Transiciones: Para cada estado, anota a qué Grupo (CxC_x) viaja con cada símbolo (0, 1…), basándote en la partición anterior.
  • Truco: No mires el estado destino, mira la clase del estado destino.
  1. Refinamiento (E1,E2E_1, E_2 \dots): Analiza los grupos formados:
  • Si dentro de un grupo (ej. C1C_1), todos los estados tienen el mismo patrón de clases destino, se quedan juntos.
  • Si un estado tiene un patrón diferente, se separa (“rompe” el grupo) y crea una nueva clase para la siguiente iteración.
  1. Parada: Repite el proceso hasta que EnE_n sea idéntica a En1E_{n-1} (ya no se rompen más grupos).

  2. Reconstrucción: Cada grupo final es un único estado en el autómata minimizado.

Dos estados pp y qq son equivalentes si son indistinguibles para un observador externo.

Imagínate que metemos el estado pp en una caja negra y el estado qq en otra. Tú no puedes ver el dibujo del autómata. Solo puedes meter cadenas de texto (inputs) y ver si la luz de “Aceptado” se enciende o no.

  • Si para cualquier cadena infinita de pruebas que se te ocurra, las dos cajas siempre coinciden (o ambas aceptan, o ambas rechazan), entonces los estados son equivalentes.
  • Si encuentras una sola cadena donde una caja dice “Sí” y la otra “No”, entonces son distinguibles (no equivalentes).

Sea un autómata (o dos) sobre un alfabeto Σ\Sigma. Dos estados pp y qq son equivalentes (se denota pqp \equiv q) si y solo si: wΣ:(δ^(p,w)F    δ^(q,w)F)\forall w \in \Sigma^* : (\hat{\delta}(p, w) \in F \iff \hat{\delta}(q, w) \in F)

Traducción: Para toda palabra ww (desde la cadena vacía hasta una palabra de un millón de letras), si partimos de pp y leemos ww, el resultado final (aceptación o rechazo) debe ser exactamente el mismo que si partimos de qq y leemos esa misma ww.

Por lo que si nos dicen que si dos lenguajes regulares son equivalentes entre sí si los estados iniciales de sus correspondientes AFD son equivalentes

La equivalencia de estados es transitiva. Es decir, si para un AFD dos estados pp y qq son equivalentes y qq y rr son equivalentes, entonces pp y rr son equivalentes.