# 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