Automi a pila 1 Un automa a pila
- Slides: 10
Automi a pila (1) Un automa a pila (PDA) è M = (Q, S, G, d, q 0, Z 0, F) dove: 1. Q insieme finito di stati 2. S alfabeto finito di input 3. G alfabeto di pila 4. d: Q (S {e}) G 2 Q G* 5. q 0 stato iniziale 6. Z 0 simbolo di inizio pila 7. 7. F = Q insieme degli stati finali (eventualmente vuoto). 8. La descrizione istantanea di un PDA è (q, w, g) dove 9. 1. q è lo stato 10. 2. w è la stringa ancora da leggere 11. 3. g è il contenuto della pila. 12. Dato un PDA M = (Q, S, G, d, q 0, Z 0, F), (q, aw, Za) |-M (p, w, ba) se 13. d(q, a, Z) contiene (p, b). 14. L(M) accettato a stati finali è {w | (q 0, w, Z 0) |-M* (p, e, g), p F}
Automi a pila (2) Esempio. Si abbia il PDA M = ({q 1, q 2}, {0, 1}, {R, B, G}, d, q 1, R, Ø) dove d è: d(q 1, 0, R) = {(q 1, BR)} d(q 1, 1, R) = {(q 1, GR)} d(q 1, 0, B) = {(q 1, BB), (q 2, e)} d(q 1, 1, B) = {(q 1, GB)} d(q 1, 0, G) = {(q 1, BG)} d(q 1, 1, G) = {(q 1, GG), (q 2, e)} d(q 2, 0, B) = {(q 2, e)} d(q 1, 1, G) = {(q 2, e)} d(q 1, e, R) = {(q 2, e)} d(q 2, e, R) = {(q 2, e)} Il PDA accetta L = {ww. R | w (0+1)* }.
Automi a pila (3) Un PDA M = (Q, S, G, d, q 0, Z 0, F) è deterministico se vale: 1. Se d(q, e, Z) non vuoto, allora d(q, a, Z) vuoto per ogni a S (non c’è una scelta tra una e -mossa e una mossa su input a) 2. d(q, a, Z) non contiene più di un elemento (per ogni a c’è una sola mossa). PDA deterministici e PDA non deterministici non sono equivalenti: non c’è un PDA che accetta L = {ww. R | w (0+1)* }. Teorema. I linguaggi accettati per stati finali sono esattamente quelli accettati per pila vuota. Prova. Se L è L(M 2) per un PDA M 2 allora è N(M 1) per un PDA M 1 cancella la pila quando M 2 entra in uno stato finale. Un nuovo marcatore di pila sotto quello originario impedisce che l’automa accetti senza che sia entrato in uno stato finale di M 2. Se L è N(M 1) per un PDA M 1 allora è L(M 2) per un PDA M 2. Quando M 1 svuota la pila rimane nella pila il nuovo marcatore e l’automa entra in uno stato finale.
Automi a pila (4) Teorema. Se L è un CFL allora esiste un PDA M tale che L = N(M). Prova. Sia G = (V, T, P, S) in GNF. Prendiamo M = ({q}, T, V, d, q, S, ) dove d(q, a, A) contiene (q, g) quando A ag è in P. Si dimostra S ÞG* xa se e solo se (q, x, S) |-M* (q, e, a). Prendendo a = e si ha S ÞG* x se e solo se (q, x, S) |-M* (q, e, e) ossia x L se e solo se x N(M). Teorema. Se L è N(M) per PDA M, allora L è un CFL. Prova. Sia M = (Q, S, G, d, q 0, Z 0 , ). Prendiamo G = (V, S, P, S) dove gli elementi di V sono della forma [q, A, p] con p, q Q e A G. P è l’insieme delle produzioni S [q 0, Z 0 , q] per ogni q Q [q, A, qm+1] a [q 1, B 1, q 2] … [qm, Bm, qm+1] se d(q, a, A) contiene (q 1, B 1 … Bm). Si dimostra [q, A, p] ÞG* x se e solo se (q, x, A) |-M* (p, e, e).
Pumping lemma per linguaggi non contestuali (1) Lemma. Sia L un CFL. Allora c’è una costante n (che dipende solo da L) tale che se z è in L e |z| >= n allora si può scrivere z= uvwxy con 1. |vx|>= 1 2. |vwx|<= n 3. per ogni i>= 0 uviwxiy è in L.
Pumping lemma per linguaggi non contestuali (4) Il pumping lemma può essere usato per provare che un linguaggio non è non contestuale. Esempio. Prendiamo L = {aibici | i >= 1}. Supponiamo che sia non contestuale e che n sia la costante del lemma. Prendiamo z = anbncn e scriviamo z = uvwxy. Dove potrebbero essere in anbncn le stringhe v e x da pompare? Poiché |vwx|<= n, vx non può contenere istanze di a e di c poiché la a più a destra è n+1 posizioni più lontano dal c più a sinistra. Se v e x consistono di sole a allora uwy ha n b e n c ma non n a (le altre istanze di a sono in vx) e quindi uwy non è della forma aibici , una contraddizione. Analogamente se v e x consistono di sole b o sole c. Se vx ha a e b allora uwy ha più c che a e b. Similmente se vx contiene b e c.
Proprietà dei linguaggi non contestuali (1) Teorema. I linguaggi non contestuali sono chiusi per unione, concatenazione, chiusura di Kleene. Prova. Sia L 1 non contestuale generato da G 1 = (V 1, T 1, P 1, S 1) e L 2 non contestuale generato da G 2 = (V 2, T 2, P 2, S 2). Assumiamo V 1 e V 2 disgiunti e S 3 , S 4 , S 5 non in V 1 V 2. Per L 1 L 2 prendiamo G 3 = (V 1 V 2 { S 3}, T 1 T 2, P 3, S 3) dove P 3 = P 1 P 2 {S 3 S 1 , S 3 S 2}. Per L 1. L 2 prendiamo G 4 = (V 1 V 2 { S 4}, T 1 T 2, P 4, S 4) dove P 3 = P 1 P 2 {S 4 S 1 S 2}. Per L 1* prendiamo G 5 = (V 1 {S 5}, T 1, P 5, S 5) dove P 3 = P 1 {S 5 S 1 S 5 , S 5 e }. Teorema. I linguaggi non contestuali sono chiusi per sostituzione. Teorema. I linguaggi non contestuali sono chiusi per omomorfismo.
Proprietà dei linguaggi non contestuali (2) Esempio. Sia L un linguaggio di parole con un numero uguale di a e di b, sia La = {0 n 1 n | n>= 1}, Lb = {ww. R | w (0+2)*}. Prendiamo per G la grammatica con produzioni S a S b S | b S a S| e Per Ga prendiamo Sa 0 Sa 1 | 01 Per Gb prendiamo Sb 0 Sb 0 | 2 Sb 2 | e Sia f la sostituzione f(a) = La, f(b) = La. Allora f(L) è generato dalla grammatica con produzioni S Sa S Sb S | Sb S S a S | e Sa 0 Sa 1 | 01 Sb 0 Sb 0 | 2 Sb 2 | e
Proprietà dei linguaggi non contestuali (3) Teorema. I linguaggi non contestuali sono chiusi per omomorfismo inverso. Prova. Sia L = L(M). Si costruisce un PDA M’ che sull’input a genera la stringa h(a), simula M su h(a) e accetta a se M accetta h(a). Teorema. I linguaggi non contestuali non sono chiusi per intersezione. Prova. Prendiamo L 1 = {aibici | i >= 1}, L 2 = {aibicj | i >= 1, j >= 1}, L 3 = {aibjcj | i >= 1, j >= 1}. Il linguaggio L 1 = L 2 L 3 è l’intersezione di due CFL ma non è un CFL. Teorema. I linguaggi non contestuali non sono chiusi per Intersezione con gli insiemi regolari.
Proprietà dei linguaggi non contestuali (4) Teorema. Data una CFG G = (V, T, P, S) e x T* è decidibile se x L(G). Prova. Convertiamo G in G’ in forma normale di Greibach. Ogni produzione aggiunge un solo terminale e quindi se x ha una derivazione in G’ ne ha una in esattamente |x| passi. Se nessun non terminale in G’ ha più di k produzioni, allora ci sono al più k|x| Derivazioni da più a sinistra di stringhe di lunghezza |x|. Si possono provare sistematicamente. Questo algoritmo richiede un tempo esponenziale in |x|. Ne esiste uno di Cocke-Younger-Kasami in tempo cubico.