Automi a pila

Un automa a pila (o PDA) è una sestupla equivalente alle CFG che sfrutta uno stack:

e i suoi componenti sono definiti come:

  1. è l'insieme degli stati
  2. è l'alfabeto dell'input
  3. è l'alfabeto dello stack
  4. è la funzione di transizione, con e
  5. è lo stato iniziale
  6. è l'insieme degli stati finali

Un PDA accetta se esistono e per cui:

  • e : comincia dallo stato iniziale e con la pila vuota
  • : alla fine dell'input, è su uno stato accettante
  • , con per e : il prossimo stato e pila sono determinati dallo stato , l'input e la cima della pila

Per esempio, l'automa che riconosce

sarà rappresentato da , dove:

Un altro esempio è l'automa che riconosce :

Equivalenza

Si può dimostrare che un linguaggio è context-free sse esiste un PDA tale che , infatti:

  1. Condizione sufficiente ()

    Dato che è context-free esiste una CFG che lo riconosce. Basterà quindi trasformare la CFG in PDA:

    1. Inserire sullo stack prima e poi , ovvero lo start symbol
    2. Per ogni regola , alla lettura di sullo stack rimuovere e inserirci
    3. Per ogni terminale , alla lettura di sullo stack rimuovere mentre viene anche letto sull'input

    Per esempio, la CFG si potrà convertire nel seguente PDA:

  2. Condizione necessaria ()

    Per dimostrarlo si vuole semplificare in modo che:

    • Abbia un unico stato accettante : con -transizioni dagli stati finali a
    • Svuoti lo stack prima di accettare: con sullo stato finale
    • Inserisca o rimuova un simbolo sullo stack ad ogni transizione: sostituendo le transizioni con e , e le transizioni con e

    Sia quindi , i non-terminali e lo start symbol di :

    1. Per ogni , e se contiene e contiene , allora a viene aggiunta la regola
    2. Per ogni viene aggiunta la regola a
    3. Per ogni viene aggiunta la regola a

    Il primo punto è il caso in cui per andare da a il primo simbolo aggiunto e l'ultimo rimosso dallo stack è lo stesso, mentre il secondo è il caso in cui il simbolo viene rimosso prima di arrivare a .

    Si può quindi dimostrare che sse porta da con lo stack vuoto a con lo stack vuoto:

    1. Condizione sufficiente (), per induzione sul numero di passi di derivazione:

      • Caso base con passo, ovvero senza non-terminali: usa che non tocca lo stack

      • Passo induttivo con passi, assumendo che valga fino a :

        Il primo passo può essere oppure .

        Nel primo caso, con , si ha che in passi, quindi per ipotesi induttiva parte da e arriva a con lo stack uguale. Essendo una regola di , da a aggiunge sullo stack e da a lo rimuove, verificando la proprietà.

        Nel secondo caso, con , si ha che e , entrambe fino a passi. Per ipotesi induttiva lo stack ritorna vuoto da a e da a , verificando la proprietà.

    2. Condizione necessaria (), per induzione sul numero di passi della computazione di da a :

      • Caso base con passi: va da un a senza leggere nulla, quindi e infatti

      • Passo induttivo con passi, assumendo che valga fino a :

        I passi per da a hanno lo stack vuoto all'inizio e alla fine oppure anche altrove.

        Nel primo caso, lo stesso simbolo va inserito leggendo da ad uno stato e rimosso leggendo da uno stato a , quindi . Ci sono passi da a quindi, dato , per ipotesi induttiva e allora .

        Nel secondo caso lo stack si svuota anche su quindi da a e da a sono al più passi, per cui, dato , per ipotesi induttiva e e allora .