# Autómata con pila

Un autómata con pila, autómata a pila o autómata de pila es un modelo matemático de un sistema que recibe una cadena constituida por símbolos de un alfabeto y determina si esa cadena pertenece al lenguaje que el autómata reconoce. El lenguaje que reconoce un autómata con pila pertenece al grupo de los lenguajes libres de contexto en la clasificación de la Jerarquía de Chomsky.

## Definición formal

Formalmente, un autómata con pila puede ser descrito como una séptupla $M=(S,\Sigma ,\Gamma ,\delta ,s,Z,F)$ donde:
* $S$ es un conjunto finito de estados;
* $\Sigma$ y $\Gamma$ son alfabetos (símbolos de entrada y de la pila respectivamente);
* $\delta :S\times (\Sigma \cup \{\epsilon \})\times \Gamma \rightarrow {\mathcal {P}}(S\times \Gamma ^{*})$
* $s\in S$ es el estado inicial;
* $Z\ \in \Gamma$ es el símbolo inicial de la pila;
* $F\subseteq S$ es un conjunto de estados de aceptación o finales;
La interpretación de $\delta (q,a,b)=\{(q_{1},\gamma _{1}),(q_{2},\gamma _{2}),\ldots ,(q_{n},\gamma _{n})\}$, con $q,q_{i}\in S,a\in (\Sigma \cup \{\epsilon \}),b\in \Gamma$, y $\gamma _{i}\in \Gamma ^{*}$ es la siguiente:
Cuando el estado del autómata es $q$, el símbolo que la cabeza lectora está inspeccionando en ese momento es $a$, y en la cima de la pila nos encontramos el símbolo $b$, se realizan las siguientes acciones:
* Si $a\in \Sigma$, es decir no es la cadena vacía, la cabeza lectora avanza una posición para inspeccionar el siguiente símbolo.
* Se elimina el símbolo $b$ de la pila del autómata.
* Se selecciona un par $(q_{i},\gamma _{i})$ de entre los existentes en la definición de $\delta (q,a,b)$, la función de transición del autómata.
* Se apila la cadena $\gamma _{i}=c_{1}c_{2}\ldots c_{k}$, con $c_{i}\in \Gamma$ en la pila del autómata, quedando el símbolo $c_{k}$ en la cima de la pila.
* Se cambia el control del autómata al estado $q_{i}$.

### Funcionamiento

Los autómatas de pila, en forma similar a como se usan los autómatas finitos, también se pueden utilizar para aceptar cadenas de un lenguaje definido sobre un alfabeto A. Los autómatas de pila pueden aceptar lenguajes que no pueden aceptar los autómatas finitos. Un autómata de pila cuenta con una cinta de entrada y un mecanismo de control que puede encontrarse en uno de entre un número finito de estados. Uno de estos estados se designa como estado inicial, y además algunos estados se llaman de aceptación o finales. A diferencia de los autómatas finitos, los autómatas de pila cuentan con una memoria auxiliar llamada pila. Los símbolos (llamados símbolos de pila) pueden ser insertados o extraídos de la pila, de acuerdo con el manejo last-in-first-out (LIFO). Las transiciones entre los estados que ejecutan los autómatas de pila dependen de los símbolos de entrada y de los símbolos de la pila. El autómata acepta una cadena x si la secuencia de transiciones, comenzando en estado inicial y con pila vacía, conduce a un estado final, después de leer toda la cadena x.

### Representación

Una máquina de este tipo se representa de la siguiente forma
Al igual que un autómata finito un autómata de pila cuenta con un flujo de entrada y un flujo de control que puede encontrarse en uno de entre un número finito de estados. Uno de estos estados se designa como el inicial y por lo menos un estado es de aceptación.
La principal diferencia es que los autómatas de pila cuentan con una pila en donde pueden almacenar información para recuperarla más tarde.
Los símbolos que pueden almacenarse en esta pila se conocen como símbolos de pila de la máquina, constituyen un conjunto finito que puede incluir algunos símbolos definiendo el alfabeto de la máquina y quizá algunos símbolos adicionales que se utilizan como marcas internas. Si una máquina inserta un símbolo especial en la pila antes de efectuar algún otro cálculo, entonces ese símbolo en la cima de la pila puede usarse como indicador de pila vacía para cálculos posteriores, dicho símbolo es #.

### Ejemplo

Sea el siguiente LLC $L=\{a^{k}b^{k}|k\geq 0\}$; formado por las cadenas $L=\{\epsilon ,ab,aabb,aaabbb,aaaabbbb,\ldots \}$
Dicho lenguaje puede ser reconocido por el siguiente autómata con pila:
$M=(\{q_{0},q_{1},q_{2},q_{3}\},\{a,b\},\{A,{\underline {A}}\},\delta ,q_{0},\{q_{0},q_{3}\}),$
donde las transiciones son:
$\delta (q_{0},a,\epsilon )=\{(q_{1},{\underline {A}})\}$
$\delta (q_{1},a,\epsilon )=\{(q_{1},{\underline {A}})\}$
$\delta (q_{1},b,{\underline {A}})=\{(q_{2},\epsilon )\}$
$\delta (q_{1},b,{\underline {A}})=\{(q_{3},\epsilon )\}$
$\delta (q_{2},b,{\underline {A}})=\{(q_{2},\epsilon )\}$
$\delta (q_{2},b,{\underline {A}})=\{(q_{3},\epsilon )\}$
$\delta (q,\theta ,\rho )=\emptyset$ para cualquier $(q,\theta ,\rho )$
El significado de las transiciones puede ser explicado analizando la primera transición:
$\delta (q_{0},a,\epsilon )=\{(q_{1},{\underline {A}})\}$
donde $q_{0}$ es el estado actual, $a$ es el símbolo en la entrada y $\epsilon$ se extrae de la cima de la pila. Entonces, el estado del autómata cambia a $q_{1}$ y el símbolo ${\underline {A}}$ se coloca en la cima de la pila.
La idea del funcionamiento del autómata es que al ir leyendo los diferentes símbolos a, estos pasan a la pila en forma de símbolos A. Al aparecer el primer símbolo b en la entrada, se comienza el proceso de desapilado, de forma que coincida el número de símbolos b leídos con el número de símbolos A que aparecen en la pila.

## Autómata con pila determinístico

Nótese que, a diferencia de un autómata finito o una máquina de Turing, la definición básica de un autómata con pila es de naturaleza no determinista, pues la clase de los autómatas con pila deterministicos, a diferencia de lo que ocurría con aquellos modelos, tiene una potencia descriptiva estrictamente menor. Para calificar a un autómata con pila como deterministico deben darse dos circunstancias; en primer lugar, por supuesto, que en la definición de cada componente de la función de transición existan un único elemento lo que da la naturaleza determinista. Pero eso no es suficiente, pues además puede darse la circunstancia de que el autómata esté en el estado $s$ y en la pila aparezca el símbolo $sZ$, entonces, si existe una definición de transición posible para algún símbolo cualquiera $a$ del alfabeto de entrada, pero, además existe otra alternativa para la palabra vacía $\epsilon$, también esto es una forma de no determinismo, pues podemos optar entre leer un símbolo o no hacerlo. Por eso, en autómata deterministico no debe existir transición posible con lectura de símbolo si puede hacerse sin ella, ni al contrario.
Para cada $q\in Q,Z\in \Gamma$, se dé que: $\mid \delta (q,\epsilon ,Z)\mid +\mid \delta (q,a,Z)\mid \leq 1$ , para cada $a\in \Sigma$

### Definición

Un autómata de pila deterministico (AFPD) es una 7-upla,
P = (Q, Σ, Г,Δ, q0, T,Z) donde:
* Q es un conjunto finito de estados.
* Σ es el alfabeto de entrada.
* Г es el alfabeto de la pila.
* q0 є Q es el estado inicial.
* Z є Г símbolo inicial de la pila.
* T es subconjunto de Q (conjunto de estados finales).
* Δ es la función de transición tal que:
Observación
En un momento, la unidad de control del autómata escanea un símbolo ‘a’ sobre la cinta de entrada y el símbolo ‘s’ en el tope de la pila.
Este paso computacional representa: La unidad de control pasa a ‘q0’ y se mueve a la derecha en la cinta de entrada, borra el símbolo ‘s’ del tope, escribe en la cadena y pasa a escanear el nuevo tope.

## Autómata con pila no determinista

Un autómata finito con pila no determinista (AFPN) consta de los mismos parámetros de un AFPD.
P = (Q, Σ, Г, Δ, q0, T,Z):
Donde la función de transición Δ es de la forma:
Donde Pf (Q× Г *) es un conjunto de subconjuntos finitos de Q × Г*
Para q є Q, a є Σ U {ε} y s є Г
Donde γi є Г*

### Ejemplo

Diseñar un AFPN que acepte el lenguaje $\{a^{i}b^{i}:i\geq 0\}$
Sobre:
Σ = {a, b}
* Δ (q0, a, Z) = (q0, AZ)
* Δ (q0, ε, Z) = (q2, Z) (acepta ε)
* Δ (q0, a, A) = (q0, AA)
* Δ (q0, b, A) = (q1, ε)
* Δ (q1, b, A) = (q1, ε)
* Δ (q1, ε, Z) = (q2, Z)
El no determinismo se da por la presencia simultánea de: