Ir al contenido

Autómatas con Pila

Concepto Intuitivo: Imagina un Autómata Finito (AFN) que lleva una mochila llena de platos.

  • Puede leer la entrada.
  • Puede mirar el plato de arriba de la pila.
  • Dependiendo de lo que ve y lee, puede quitar platos (pop) o poner platos nuevos (push).

Esta “mochila” (memoria LIFO) le permite contar y comparar, algo que un autómata finito simple no puede hacer (ej: saber si hay el mismo número de ‘a’ que de ‘b’).

Un autómata con pila (AP) es un AFN con transiciones Ɛ y con una pila en la que se puede almacenar una cadena de símbolos de pila. El AP puede recordar una cantidad infinita de información. Reconoce Lenguajes Independientes del Contexto.

Un AP se define matemáticamente así: P=(Q,Σ,Γ,δ,q0,Z0,F)P = (Q, Σ, Γ, δ, q₀, Z₀, F)

Diferencias clave con el autómata finito:

  1. Γ\Gamma (Alfabeto de Pila): Símbolos que podemos guardar en la memoria. Puede ser diferente al de entrada (Σ\Sigma).
  2. Z0Z_0 (Fondo de Pila): El símbolo que está en la pila antes de empezar nada. Nos avisa de que “la pila está vacía”.
  3. δ\delta (Función de Transición): La “ley” del movimiento. δ:Q×(Σ{ε})×ΓP(Q×Γ)\delta : Q \times (\Sigma \cup \{\varepsilon\}) \times \Gamma \to P(Q \times \Gamma^*)

Lo que está antes de la flecha (\to) son las 3 condiciones que se tienen que cumplir para que la máquina pueda moverse. Significa: “Para hacer un movimiento, necesito saber…”

  1. QQ (Estado actual): ¿En qué círculo estoy ahora mismo? (Ej: estoy en q0q_0).

  2. Σ{ε}\Sigma \cup \{\varepsilon\} (Lo que leo en la cinta):

    • Σ\Sigma: ¿Qué letra estoy leyendo de la palabra de entrada? (Ej: una ‘a’).
    • {ε}\cup \{\varepsilon\}: O también puedo no leer nada (usar ε\varepsilon). Esto permite al autómata hacer movimientos “gratis” o espontáneos sin consumir letras de la entrada.
  3. Γ\Gamma (Tope de la Pila): ¿Qué símbolo está encima del todo en la pila? (Ej: hay una ‘Z’).

    • Nota: A diferencia del autómata finito, aquí es obligatorio mirar y sacar (pop) el símbolo superior de la pila para decidir.

En resumen (Izquierda): “Estoy en el estado qq, leo la letra aa y saco de la pila el símbolo ZZ. Lo que está después de la flecha es la consecuencia. Significa: “Esto es lo que voy a hacer…”

  1. P(...)P(...) (Partes de / Conjunto Potencia):
    • Esto es crucial. La PP indica que el resultado es un conjunto de opciones, no una sola.
    • Esto confirma que es un Autómata NO Determinista. Ante una misma situación, la función puede devolver varias parejas de (estado, pila) posibles.
  2. QQ (Nuevo Estado): ¿A qué estado me voy ahora? (Ej: me muevo a q1q_1).
  3. Γ\Gamma^* (Lo que escribo en la Pila):
    • Aquí decides qué metes de vuelta en la pila. Como tiene el asterisco (*), significa que puedes escribir una cadena de cualquier longitud de símbolos de pila.

La parte Γ\Gamma^* es la palanca de cambios de la memoria:

  • Si escribes ε\varepsilon (vacío): Has sacado el tope para leerlo y no metes nada. \to Desapilar (POP)
  • Si escribes el mismo símbolo que sacaste (ej: ‘Z’): Lo sacaste y lo volviste a meter igual. \to Quedarse igual (No-Op).
  • Si escribes dos o más símbolos (ej: ‘AZ’): Sacaste ‘Z’ y metes ‘AZ’. Has añadido ‘A’ encima. \to Apilar (PUSH).

Imagina esta transición concreta derivada de tu fórmula: δ(q0,a,Z)={(q1,AZ)}\delta(q_0, a, Z) = \{ (q_1, AZ) \}

Lectura:

  1. Situación: Estoy en estado q0q_0, leo una ‘a’ en la entrada y el tope de la pila es ‘Z’.
  2. Acción:
    • Cambio al estado q1q_1.
    • Sustituyo la ‘Z’ que saqué por la cadena “AZ”.
    • Efecto: He guardado (apilado) una A sobre la Z.

En este tema solo se habla de los APN, pero para preguntas tipo test hay que saber lo siguiente.

5.1.1 Autómata de Pila NO Determinista (APN)

Sección titulada «5.1.1 Autómata de Pila NO Determinista (APN)»

Es el modelo estándar y el más potente de los dos.

  • Comportamiento: Ante una misma situación (mismo estado, misma entrada y mismo símbolo en el tope de la pila), la máquina puede tener varias opciones de movimiento.

    • Puede elegir desapilar, no hacer nada, o apilar diferentes cosas.
    • La máquina “adivina” mágicamente cuál es el camino correcto para aceptar la cadena.
  • Lenguajes que reconoce: Reconoce todos los Lenguajes Independientes del Contexto (LIC) (o Libres de Contexto).

    • Ejemplo clásico: Los palíndromos pares (wwRww^R, como “anitalavalatina”). La máquina necesita el no determinismo para “adivinar” cuándo ha llegado exactamente a la mitad de la palabra y debe empezar a comprobar la segunda parte con la pila.

Es una versión restringida y menos potente.

  • Comportamiento: Ante una situación dada (estado, entrada, tope de pila), existe como máximo una acción posible.

    • Nunca hay duda de qué hacer. Es predecible, como un programa de ordenador normal.
  • Lenguajes que reconoce: Reconoce los Lenguajes Independientes del Contexto Deterministas.

    • Estos lenguajes están “a medio camino entre los lenguajes regulares y los independentes al contexto” .
    • Son un subconjunto estricto. No todos los lenguajes libres de contexto pueden ser reconocidos por un APD.
CaracterísticaAP NO Determinista (APN)AP Determinista (APD)
Capacidad de elecciónMúltiples transiciones posibles.Solo una transición posible.
PotenciaMayor. Reconoce toda la familia de lenguajes de contexto libre.Menor. Solo reconoce un subconjunto.
LenguajesLenguajes Independientes del Contexto (LIC).Lenguajes Indep. del Contexto Deterministas.
Ejemplo de LenguajePalíndromos (wwRww^R) sin marcar el centro.Código de programación (C, Java), expresiones aritméticas.
EquivalenciaNO es equivalente al Determinista.NO es equivalente al No Determinista.

5.2 Mecánica de Transición (Cómo leer los arcos)

Sección titulada «5.2 Mecánica de Transición (Cómo leer los arcos)»

Esta es la parte vital para los ejercicios prácticos. En los diagramas verás arcos con la etiqueta: a, Aγa, \ A \to \gamma

Esto se lee: “Leo, Saco \to Meto”.

  1. Leo (aa): Leo el símbolo ‘a’ de la cinta de entrada.
  2. Saco (AA): Compruebo si AA está en la cima de la pila y lo extraigo (pop).
  3. Meto (γ\gamma): Escribo la cadena γ\gamma en la cima de la pila (push).

Casos Prácticos de “Meto” (γ\gamma):

  • Apilar (Push): a,Z0AZ0a, Z_0 \to AZ_0

    • Explicación: Saco Z0Z_0 y meto AA seguido de Z0Z_0. Efecto neto: AA queda encima de Z0Z_0.
  • Desapilar (Pop): a,Aεa, A \to \varepsilon

    • Explicación: Saco AA y meto… nada (ε\varepsilon). Efecto neto: Borro AA.
  • Cambiar (Swap): a,ABa, A \to B

    • Explicación: Saco AA y meto BB.
  • No tocar (Peep): a,AAa, A \to A

    • Explicación: Saco AA y vuelvo a meter AA. La pila se queda igual.

Un AP puede decir “OK” de dos formas. En los ejercicios te especificarán cuál usar.

  • Condición: La entrada se ha terminado (w=εw = \varepsilon) Y el autómata está en un estado qFq \in F.
  • La pila: No importa lo que tenga dentro (puede estar llena de basura).
  • Uso: Es lo más parecido a los autómatas normales.

El lenguaje aceptado por estado final se define como: L(P)={w(q0,wZ0)(q,ϵ,α)}L(P)=\{w|(q_0,wZ_0) \vdash^* (q,\epsilon, \alpha)\} Dónde q pertenece al conjunto de estados finales

Aceptación por Pila Vacía (\emptyset)

Sección titulada «Aceptación por Pila Vacía (∅\emptyset∅)»
  • Condición: La entrada se ha terminado (w=εw = \varepsilon) Y la pila está totalmente vacía (ni siquiera queda Z0Z_0).
  • El estado: No importa en qué estado termine.
  • Uso: Muy común en análisis sintáctico (compiladores).

El lenguaje aceptado por estado final se define como: L(P)={w(q0,wZ0)(q,ϵ,ϵ)}L(P)=\{w|(q_0,wZ_0) \vdash^* (q,\epsilon, \epsilon)\}

Conversión: Todo lenguaje aceptado por pila vacía puede ser aceptado por estado final y viceversa. Son equivalentes en poder.

Patrón 1: “El Acumulador” (Sumar cosas)

Sección titulada «Patrón 1: “El Acumulador” (Sumar cosas)»

Cuándo usarlo: Ecuaciones tipo k>i+jk > i + j o k=i+jk = i + j. Lógica: Tienes dos variables que “suman” y una que “resta”.

  • Fase 1 (Entrada ‘a’): Apilas ‘a’.
  • Fase 2 (Entrada ‘b’): Sigues apilando (pero ojo, como tienes la restricción, apila ‘b’ o sigue apilando ‘a’ si te dejan. Aquí dice “alfabeto de pila = alfabeto entrada”, así que apila ‘b’).
  • Fase 3 (Entrada ‘c’): Desapilas todo. Primero las ‘b’ y luego las ‘a’.
  • Resultado: Si al acabar de leer ‘c’ la pila se vacía, eran iguales. Si sobra pila, i+ji+j era mayor. Si falta pila, kk era mayor.

Patrón 2: “La Deuda” (El orden da igual / Sopa de letras)

Sección titulada «Patrón 2: “La Deuda” (El orden da igual / Sopa de letras)»

Cuándo usarlo: Ejercicios donde el orden es libre (N(a)=N(b)N(a) = N(b) entrando en cualquier orden) o ecuaciones complejas (i+k=j+mi+k = j+m).

Lógica: La pila representa el Balance.

  • Define dos bandos: Positivos (los que suman) y Negativos (los que restan).
  • Regla de Oro:
    • Si leo un símbolo y la pila tiene al del bando contrario: DESAPILO (se cancelan, como materia y antimateria).
    • Si leo un símbolo y la pila tiene al de mi bando o está vacía (Z0Z_0): APILO (aumento mi deuda).

Cuándo usarlo: N(a)=2N(b)N(a) = 2N(b) o 3k=i3k = i. Lógica:

  • Opción A (Apilar doble): Por cada ‘a’ que lees, metes dos ‘a’ en la pila. Luego las ‘b’ borran de una en una.
  • Opción B (Desapilar doble): Metes las ‘a’ normales. Cuando llegan las ‘b’, cada ‘b’ elimina dos ‘a’ de la pila (necesitas un estado intermedio auxiliar para hacer el “doble pop”).
  • Hay que tener una forma de marcar números negativos también

Patrón 4: “El Multiverso” (La Unión / Ó)

Sección titulada «Patrón 4: “El Multiverso” (La Unión / Ó)»

Cuándo usarlo: “Cadenas que cumplen XX ó cumplen YY”. Lógica: El estado inicial (q0q_0) no lee nada. Lanza dos transiciones λ\lambda (o ϵ\epsilon) hacia dos caminos distintos.

  • Camino 1: Resuelve el problema XX.
  • Camino 2: Resuelve el problema YY.
  • El autómata “adivina” qué camino tomar.

Patrón 5: “Álgebra Simple” (Reorganizar ecuaciones)

Sección titulada «Patrón 5: “Álgebra Simple” (Reorganizar ecuaciones)»

Cuándo usarlo: Ecuaciones con restas como k=ijk = i - j o ki<jk - i < j. Truco: Los autómatas odian restar, pero aman sumar. Pasa todo a positivo.

  • Si te dan k=ijk = i - j \rightarrow Transfórmalo en i=k+ji = k + j.
    • Significa: Las ‘a’ (i) deben ser iguales a la suma de ‘b’ (j) + ‘c’ (k).
    • Estrategia: Apila las ‘a’. Las ‘b’ borran ‘a’. Las ‘c’ borran las ‘a’ que queden.

5.5 Lema del Bombeo para Lenguajes Independientes del Contexto

Sección titulada «5.5 Lema del Bombeo para Lenguajes Independientes del Contexto»

Sea LL un lenguaje independiente del contexto. Entonces existe una constante nn (llamada cte. de bombeo) tal que cualquier cadena zz perteneciente a LL puede descomponerse en 5 partes, z=uvwxyz=uvwxy, cumpliendo:

  1. vwxn|vwx| \le n: La “ventana” donde ocurre el bombeo tiene un tamaño limitado.
  2. vxϵvx \neq \epsilon: Al menos una de las dos partes que se bombean (vv o xx) debe contener algo (no pueden estar ambas vacías).
  3. Para todo k0k \ge 0, la cadena uvkwxkyLu v^k w x^k y \in L: Si repetimos vv y xx el mismo número de veces (kk), la cadena resultante sigue perteneciendo al lenguaje.

Si no cumple el lema, no estamos ante un Lenguaje Independiente del Contexto.

Ejemplo: L={aibjckk=i/j; i,j,k1}L = \{ a^i b^j c^k \mid k = i/j; \ i, j, k \ge 1 \} Y nos dan como componentes (llaman a yy zz):

  • u=a2n2u = a^{2n-2}
  • v=a2v = a^2
  • w=λw = \lambda (nada)
  • x=bx = b
  • z=bn1c2z = b^{n-1} c^2

Si usamos k=0k=0 en la expresión uvkwxkzuv^k wx^k z, nos queda uwzuwz por lo que tendríamos a2nbnc2a^{2n} b^n c^2 . Además mirando el lenguaje sabemos que se debe cumplir que N(c)=N(a)N(b)N(c)=\frac{N(a)}{N(b)} . Por lo que podemos sustituir y comprobar si se cumple o no: 2=2n2n12=\frac{2n-2}{n-1} Por lo que vemos que cumple el lema (también siguen el orden de abcabc), no podemos demostrar que no sea un LIC. Y así seguiríamos probando con los kk que nos digan. Aunque a simple vista ya se puede afirmar que no lo será porque los LICLIC no tienen la capacidad de realizar multiplicaciones, solo sumar y contar.