---
# System prepended metadata

title: Automi a pila (AP)

---

# Automi a pila (AP)
## Pila
Oggetto di memoria infinita limitata inferiormente dall'elemento $Z_0$
Operazioni su pila:
- Push E: mette L'elemento E in cima alla pila
- Pop: toglie l'elemento in cima alla pila e lo restituisce

Negli automi AP le operazioni sulla pila sono leggermente differenti dalle operazioni di push e pop.

## AP
- definiti nella forma <$Q, I, \Gamma, \delta, q_0, Z_0, F$> (con l'aggiunta di $O,\ \eta$ se AP traduttori), dove:
    - $\Gamma$ è l'alfabeto di pila, in generale $\Gamma \ne I$
    - $\delta: Q$ x $I\cup\{\varepsilon\}$ x $\Gamma \to Q$ x $\Gamma^*$
        - quindi ad ogni mossa devo fare la pop del primo elemento in pila, leggere o meno un elemento dalla stringa in ingresso ed inserire o meno uno o più elementi in cima alla pila. Convenzione per elementi per push:
            **Sinistra-basso, detra-alto. Pila cresce verso l'alto.**
- Configurazione: $c = <q, x, \gamma, [z]>$:
    - q: stato
    - x: stringa ancora da leggere
    - $\gamma$: pila
    - z: stringa in output
- Relazione di transizione tra stati: $\vdash$. 
- $c\ \vdash\ c'$, con $c = <q, i.y, \beta A>$ e $c' = <q, x', \beta\alpha>$ se:
    - $\delta(q,i,A)= <q',\alpha> \implies x'=y$
    - $\delta(q,\varepsilon,A)= <q',\alpha> \implies x'=i.y$
- Negli APD se c'è una $\varepsilon$ mossa allora non ci possono essere altre mosse che richiedono la stessa pop, quindi $\delta$ in generale non è totale
- Memoria degli AP è distruttiva:
    - posso accettare $L=\{a^nb^n|n>0\}$ e $L=\{a^n b^{2n}   |n>0\}$ ma non $L=\{a^nb^nc^n|n>0\}$
    - APD non chiusi rispetto all'unione (ad esempio tra $L=\{a^nb^n|n>0\}$ e $L=\{a^n b^{2n}|n>0\}$
    - APD non chiusi rispetto all'intersezione (intersezione tra $\{a^nb^*c^n|n>0\}$ e $\{a^nb^nc^*|n>0\}$ è $\{a^nb^nc^n|n>0\}$)
- Ho però chiusura rispetto al complemento:
    - mi serve rendere $\delta$ totale (tranne che per le $\varepsilon$ mosse) creando degli stati pozzo
    - scambio stati finali con stati non finali
    - faccio attenzione a non creare loop

## APND
Aggiungono potenza agli AP solo per quanto riguarda l'unione, non si è ancora chiusi per l'intersezione (stesso esempio di prima) e si perde la chiusura della negazione:
- Se x $\in L_1$ e x $\notin L_2$, con $L_1$ e $L_2$ due linguaggi *LP* (riconosciuti da un automa a pila), posso creare un APND che sia l'unione dei due AP che riconoscono $L_1$ e $L_2$, e che quindi accetta x. Ma non posso creare il complemento di questo APND scambiando gli stati di accettazione con gli altri, perché x verrebbe accettata in quanto x $\in L_2^{-1}$.

Non abbiamo visto la dimostrazione per cui non si ha la chiusura rispetto al complemento.

## To add:
- esempi