Sei sulla pagina 1di 16

2 - Automi a stati niti

Il linguaggio di un DFA A. Questo linguaggio indicato con L(A) ed denio da: L(A) = {w | (q0 , w) e in F }. In altre parole il linguaggio di A linsieme delle stringhe di w che portano ` dallo stato iniziale q0 a uno degli stati accettanti. Se L uguale a L(A) per un DFA A, allora diciamo che L un Linguagggio Regolare. Teorema 2.11: Sia D un DFA costruito mediante la costruzione per sottoinsiemi a partire da un NFA N, allora L(D)=L(N). Dim: dimostriamo per induzione su |w| che D ({q0 }, w) = N (q0 , w) Base:|w| = 0 w =
def def D ({q0 }, ) = {q0 } = N (q0 , )

def hp induttiva Passo induttivo: |w| > 0 D ({q0 }, xa) = D (D ({q0 }, x), a) = def costruzione D (N (q0 , x), a) = N (p, a) = N (q0 , xa) pN (q0 ,x)

Teorema 2.12: Un linguaggio L accettato da un DFA sse L accettato da un NFA. Teorema 2.22: Un linguaggio L accettato da un -NFA sse L accettato da un DFA. Dim: (Se) trasformo il DFA in -NFA aggiungendo (q, ) = 0 per ogni stato q. Le transazioni del DFA sono equivalenti a quelle dell -NFA. (Solo se) dim per induzione su |w| che D (qD , w) = E (q0 , w) Base: |w|=0 allora w = . Sappaimo che E (q0 , ) = ECLOSE(q0 ) e che qD = ECLOSE(q0 ) D (qD , ) = ECLOSE(q0 ). Abbiamo dim che E (q0 , ) = D (qD , ). => E (q0 , x) = D (qD , x) = {p1 ....pk } -NFA E (pi , a) = Induzione: w=xa. Teorema vero per
i=1..k

{r1 ...rm } => E (q0 , w) = ECLOSE({r1 ...rm }) DFA D ({p1 ...pk} , a) si ottiene dagli stessi pas saggi usati sopra D (qd , w) = D ({p1 ...pk }, a) coincide con E (q0 , w).

3 - Espressioni e linguaggi regolari


Espressioni Regolari: Base: e sono regex;

se a un simbolo qualsiasi allora a una regex; Induzione: se E e F sono regex allora E + F una regex (unione); se E e F sono regex allora EF una regex (concatenazione); se E una regex allora E* una regex (chiusura); se E una regex allora (E) una regex.

Precedenze degli operatori nelle regex: loperatore * ha la priorit pi alta, il successivo la concatenazione e inne c lunione. Teorema 3.4: Se L = L(A) per un DFA A, allora esiste unespressione regolare R tale che L = L(R). Dim: il nostro primo compito consiste nel costruire una collezione di espressioni regolari che k descrivano insiemi via via pi ampi nel diagramma di transizione di A. Rij = nome della regex il cui linguaggio linsieme di stringhe w tale che w sia letichetta di un cammino dallo stato i allo stato j in A, e il cammino non abbia alcun nodo intermedio il cui numero sia maggiore di k. Base: k = 0. nessuno stato intermedio: 1. i = j un arco dal nodo i al nodo j; 2. i = j un cammino di lunghezza 0; 3. 0 + a + cio nonci sono simboli, c solo un simolo(o pi di uno), per includere il caso i=j Induzione: supponiamo che esista un cammino dallo stato i allo stato j che non attraversa (k) (k1) (k1) (k1) (k1) nessuno stato superiore a k: Rij = Rij + Rik (Rkk ) Rkj (da Dfa a Regex). Teorema 3.7: Ogni linguaggio denito da unespressione regolare denito anche da un automa a stati niti.(da Regex a N F A) Dim: 3 casi base: { }, e a; 3 casi passo induttivo: unione, concatenazione e chiusura. Propriet espressioni regolari: commutativa dellunione: L+M = M+L associativa dellunione: (L+M)+N = L+(M+N) idempotenza per lunione: L+L = L associativa per la concatenazione: (LM)N = L(MN) commutativa per la concatenazione: LM =ML (non vale) Teorema 3.11: (Distributiva) Se L, M e N sono linguaggi arbitrari, allora L(M N ) = LM LN (concatenazione a sx) ((M N )L = M L N L (concatenazione a dx)).

4 - Propriet dei linguaggi regolari


Teorema 4.1: (Punping lemma per linguaggi regolari ) Sia L un linguaggio regolare. Esiste allora una costante n (dipendente da L) tale che, per ogni stringa w in L per la quale |w| n, possiamo scomporre w in tre stringhe w = xyz in modo che: y = |xy| n per ogni k 0 anche la stringa xy k z in L. In altre parole possiamo sempre trovare una stringa non vuota y, non troppo distante dallinizio di w, da replicare, cio da ripetere quante volte vogliamo o anche da cancellare senza uscire dal linguaggio L. Dim: A DFA con n stati, L=L(A). w = a1 ...am L con |w|=m e m n. Deniamo pi come (q0 , a1 ..ai ) cio lo stato dove sitrova A dopo aver letto i primi i simboli di ingresso. Il DFA inizialmente si trova in q0 = p0 senza aver letto alcun simbolo di input. A ha solo n stati dierenti e q0 lo stato inizale e non consuma input e |w|n => 0 i < j m, pi = pj . Pertando il DFA passa due volte per lo stesso stato. Ma allora qualsisi stringa w = xy k z con k 0 appartiene a L. Possiamo interpretare lapplicazione del lemma come un gioco in cui : 1. il giocatore 1 seglie il linguaggio L, che si suppone non regolare; 2. il giocatore 2 seglie n senza rivelarlo a 1; 1 deve ideare una strategia per qualsiasi n; 3. il giocatore 1 sceglie w, che pu dipendere da n e devessere di lunghezza almeno pari a n; 4. il giocatore 2 scompone w in x, y e z, rispettando i vincoli imposti dal lemma: y = e | xy | n; anche in questo caso 2 non deve rivelare x, y e z a 1, ma deve soltanto rispetare i vincoli; 5. il giocatore 1 vince scegliendo k, che dipende da n, x, y e z, in modo che xy k z non appartenga a L. Propriet di chiusura dei linguaggi regolari: Teorema 4.4: (chiusura rispetto all unione) Se L e M sono linguaggi regolari, allora anche L M regolare. Dim: Poich L e M sono regolari essi sono descritti da regex , poniamo L=L(R) e M=L(S), allora L M =L(R+S) per la denizione delloperatore + nelle regex. Teorema 4.5: (chiusura rispetto al complemento) Se L un linguaggio regolare sullal L regolare. fabeto , allora anche L = Dim: L=L(A) per un DFA A=(Q, , , q0 , F ). L=L(B) dove B il DFA (Q, , , q0 , Q F ). Gli stati accettanti di A sono diventati gli stati non accettanti di B. Allora w in L(B) sse (q0 , w) in Q-F, il che succede sse w non in L(A). Teorema 4.8: (chiusura rispetto all intersezione) Se L e M sono linguaggi regolari, allora anche L M regolare. Dim: L M = L M . 3

Teorema 4.10: (chiusura rispetto alla dierenza) Se Le M sono linguaggi regolari, allora anche L-M regolare. Dim: L M = L M . Teorema 4.11: (chiusura rispetto all inversione) Se L un linguaggio regolare, lo anche LR . Dim: Supponiamo L denito dalla regex E. Dimostriamo che esiste una regex E R tale che L(E R )=(L(E))R . Vale a dire che il linguaggio di E R linversione del linguaggio di E. Base: se E , o a, allora E R =E; Induzione: 1. E=F+G allora E R =F R +GR ; 2. E=FG allora E R =GR F R (attenzione ai termini che vanno invertiti); 3. E=F allora E R =(E R ) . Teorema 4.14: (chiusura rispetto all omomorsmo) Se L un linguaggio regolare e h un omomorsmo, allora anche h(L) regolare. Dim: E regex con simboli in . Base: se E=a allora L(E) = {a} h(L(E)) = {h(A)}inoltre h(E) la regex formata dalla stringa di simboli di h(a) quindi anche L(h(E)) = {h(A)}e quindi h(L(E)) = L(h(E)). Induzione: E=F+G allora h(E) = h(F +G) = h(F )+h(G) sappiamo inoltre che L(E) = L(F )L(G)e che L(h(E)) = L(h(F )+h(G)) = L(h(F )) L(h(G)) per la def delloperatore + nelle regex. inoltre h(L(E)) = h(L(F ) L(G)) = h(L(F )) h(L(G)) poiche viene applicata ad ogni singola stringa del linguaggio. Teorema 4.16: (chiusura rispetto all omomorsmo inverso) Se h un omomorsmo dallalfabeto allalfabeto T e L un linguaggio regolare su T, allora h1 (L) un linguaggio regolare. Dim: se h un omomorsmo dallalfabeto allalfabeto T e L un linguaggio regolare su T, allora anche h1 (L) un linguaggio regolare. Dim: sia L=L(A) per un DFA A = (Q, T, , q0 , F ), deniamo un DFA B = (Q, , , q0 , F ) dove (q, w) = (q, h(a)) ovvero la transizione che B esegue in risposta allinput a pari al risultato delle transazioni che A esegue con ingresso h(a). Si vede che (q0 , w) = (q0 , h(w)) ovvero che B accetta le stringhe 1 w h (L). Problemi di decisione per i linguaggi regolari: Da NFA a DFA: O(n3 2n ) regex a automa: O(n) NON VUOTO (se) se FA accetta una stringa allora L diverso da 0. (solo se)w L(M ) corta quanto la pi corta stringa accettata da M. Se |w| n vale PL. Ma quindi |xz| < |xyz| e cio w non era la pi corta stringa accettata da M. Pertanto su generare tutte le stringhe di lunghezza < n per vericare se FA accetta => linguaggio non vuoto. Da DFA a NFA: O(n) Da automa a regex: O(4n n3 ) Da

INFINITO (se) se FA accetta w| n w < 2n |w| n e L regolare quindi vale PL e quindi se FA accetta n w < 2n allora accetta stringhe di lunghezza innita. (solo se) da dim che se L(M) innito accetta w | n |w| < 2n. Se |w| < n OK; Se |w| 2n andiamo a considerare la stringa pi corta L(M ). Uso PL: |xz| 2n w non era la pi corta stringa L(M ); |xz| < 2n allora esiste una stringa pi corta di 2n. Abbiamo dim che un linguaggio innito accettato da un FA sse w | n |w| < 2n. Lalgoritmo Riempi Tabella scopre ricorsivamente le coppie di stati distinguibili di un DFA A: Base: se p uno stato accettante e q non accettante, la coppia {p,q} distinguibile. Induzione: siano p e q due stati tali che, per un simbolo di input a, r = (p, a) e s = (q, a) sono stati che sappiamo essere distinguibili. Allora {p,q} una coppia di stati distinguibili. Teorema 4.20: Se due stati non sono distinguibili dallalgoritmo riempi tabella, allora sono equivalenti. Dim: Supponiamo lenunciato falso e cio che esista almeno un coppia di stati {p,q}tale che: 1. w : (p, w) F, (q, w) F o vice versa; / 2. lalgoritmo riempi tabella non distingue p da q. Deniamo w=a1 a2 ...an come la pi corta stringa che identica una coppia cattiva {p,q}. Consideriamo w = altrimenti siamo nel caso base dellalgoritmo. Consideriamo gli stati r=(p, a1 ) e s=(q, a1 ). La stringa che distingue r da s pi corta di ogni altra stringa che distingue una coppia cattiva; quindi {r,s} non pu essere una coppia cattiva, lalgoritmo riempi tabella deve aver scoperto che sono distinguibili. Ma poich scopre che (p, a1 )=r distinguibile da (q, a1 )=s, la parte induttiva dellalgoritmo non si arresta prima di aver dedotto che p e q sono distinguibili. Teorema 4.23: Lequivalenza di stati transitiva. Teorema 4.24: Se per ogni stato q di un DFA si crea un blocco formato da q e da tutti gli stati equivalenti a q, allora linsieme dei blocchi distinti costituisce una partizione dellinsieme degli stati. Quindi ogni stato appartiene ad un blocco. Tutti gli elementi di un blocco sono euivalenti, mentre due stati scelti da blocchi diversi non lo sono. Appartenenza a un linguaggio regolare: se L DFA si simula elaborazione di w. |w|=n tampo O(n); se L NFA con s stati il tempo per simulare w O(ns2 ); se regex convertiamo in N F A tempo O(s) e con 2s stati poi come sopra tempo O(ns2 ). Equivalenza: diciamo che due stati p e q sono equivalenti se: per ogni stringa di inuput w (p, w) uno stato accettante sse (q, w) uno stato accettante. Algoritmo riempi tabella: scopre ric le coppie di stati distinguibili di un DFA: base: se p accettante e q non accettante, la coppi {p, q} distinguibile; Induzione: siano p e q due stati tali che per un simbolo di input a, r = (p, a) e s = (q, a) sono stati che sappiamo essere distinguibili. Allora {p, q} una coppia di stati distinguibile. Tempo O(n2 ).

MYHILL-NERODE: le seguenti aermazioni sono equivalenti: 1- L un linguaggio regolare; 2- L lunione di alcune classi di equivalenza di una relazione di equivalenza di indice nito, invariante a dx; 3- Sia RL una relazione di equivalenza tale che xRL y z , xz L yz L allora RL di indice nito. (1->2) M DFA che accetta L. xRL y (q0 , x) = (q0 , y). RM 0 , x) F , in altre invariante a dx e di indice nito. Per def L linsieme delle stringhe x tali che (q parole, lunione delle classi di equivalenza di RM che includono le stringhe che terminano in uno stato nale. (2->3) E rel di eq di indice nito e invariante a dx. Quindi visto che L lunione di alcune classi di eq di E, un stringa xz L sse anche yz L e quindi xRL y. Si pu notare inoltre che la classe di equivalenza di x in RL contiene almeno tutti gli elementi contenuti nella classe di eq di x in E, ma allora il n di classi di eq di RL minore di quello di E ed quindi nito. (3->1) dim per prima cosa che RL invariante a dx. Dalla def di RL si ha che xRL y v , xv L yv L. Scegliendo v=wz si ottiene w , z xwz L ywz L che non altro che la def di invarianza a dx. Def ora: -Q insieme nito della classi di eq di RL ; - [X] elemento di Q che contiene x; ([X], a) = [x, a] coretto per linvarianza a dx di RL ; -q0 = []; -F = {[X] : x L}. Il DFA M (Q , , , q0 , F ) accetta il linguaggio L, infatti (q0 , x) = [x] F x L.

5 - Grammatiche e linguaggi liberi dal contesto


Una Grammatica Libera dal Contesto una notazione formale per esprimere denizioni ricorsive di linguaggi. Una grammatica consiste di una o pi variabili che rappresentano classi di stringhe, ossia linguaggi. La descrizione grammaticale di un linguaggio consiste di 4 componenti fondamentali: 1. un insieme nito di simboli che formano le stringhe del linguaggio da denire; T 2. un insieme nito di variabili. Ogni variabile rappresenta un linguaggio, ossia un insieme di stringhe; V 3. una variabile, detta simbolo iniziale, che rappresenta il linguaggio da denire; S 4. un insieme nito di produzioni o regole, che rappresenta la denizione ricorsiva di un linguaggio. ogni produzione consiste di 3 parti: P (a) una variabile detta testa della produzione; (b) un simbolo di produzione ; (c) una stringa di zero o pi terminali detta corpo della produzione. Le produzioni di una CFG si applicano per dedurre che determinate stringhe appartengono al linguaggio di una certa variabile. La deduzione pu seguire due strade: 1. delle regole che utilizzano il corpo per passare alla testa: Inferenza Ricorsiva; 2. delle produzioni dalla testa al corpo: Derivazione o (zero o pi passi). Un passo di derivazione sostituisce una variabile in un punto qualsiasi della stringa con il corpo di una delle sue produzioni. Base: per una qualsiasi stringa a di terminali e variabili, a a (qualunque stringa deriva se stessa); Induzione: se a e allora a . 6

Per ridurre il numero di scelte possibili nella derivazione di una stringa, spesso comodo imporre che a ogni passo si sostituisca la variabile allestrema sinistra con il corpo di una delle sue produzioni (derivazione a sinistra); se si parte da destra si avr la derivazione da destra. Se G=(V, T, P, S) una CFG, il linguaggio di G, denotato con L(G) linsieme delle stringhe terminali che hanno una derivazione dal simbolo iniziale: L(G) = {w in T | S w}. Se L il linguaggio di una CFG allora L detto Linguaggio Libero dal Contesto. Le derivazioni dal simbolo iniziale producono stringhe che hanno un ruolo speciale e che chiameremo Forme Sentenziali. Se G una CFG allora qualnque stringa a in (V T ) tale che S a una forma sentenziale. Gli Alberi Sintattici di G sono gli alberi che soddisfano le seguenti condizioni: 1. Ciascun nodo interno etichettato da una variabile in V; 2. ciascuna foglia etichettata da una variabile, da un terminale o da . Se una foglia etichettata , deve essere lunico glio del suo genitore; 3. Se un nodo interno etichettato A e i suoi gli sono etichettati, a partire da sinistra, X1 , X2 , ... , Xk allora A X1 , X2 , ... , Xk una produzione in P. Da INFERENZE ad ALBERI: Sia G=(V,T,P,S) una CFG. Se la procedura di inferenza ricorsiva indica che la stringa terminale w nel linguaggio della variabile A, allora esiste un albero sintattico con radice A e prodotto w. Dim: induzione sul num di passi usati per inferire che w nel linguaggio di A: Base: 1 passo. Deve esistere una prod A->w Lalbero quello che ha una foglia per ogni posizione di w. Induzione: n+1 passi. Ultimo passo inferenza: A x1 ..xk Dove ogni Xi una variabile o un terminale. Si pu dividere w in w1 ..wk dove se Xi un terminale Xi =wi ; se Xi una variabile allora wi la stringa che per hp induttiva si aermata essere nel linguaggio di Xi in quanto linferenza su wi richiede al pi n passi. Pertanto si pu aermare che esiste un albero sintattico con yeld wi e radice Xi . Costruiamo poi un albero con radice A e prodotto w come ultimo passo dellinduzione. Da ALBERI a DERIVAZIONI: Sia G=(V,T,P,S) una CFG, e supponiamo che esista un albero sintattico con radice etichettata da una variabile A econ prodotto w, dove w in T . Allora esiste una derivazioneA lm w nella grammatica G (ci si comporta in modo analogo anche per le derivazioni a destra). Dim: induzione su altezza dellalbero Base: altezza 1. Se lalbero ha radice A e prodotto w deve esistere una produzione A->w e di conseguenza in un passo si ha la derivazione A=>w. Induzione: altezza n, n>1. A|X1 Xk |w1 wk . Ogni Xi pu essere un terminale o una variabile. Se terminale Xi = wi , se variabile allora deve essere la radice di un albero sintattico con altezza < di n e prodotto wi . Pertanto per hp induttiva Xi wi . Si pu quindi costruire una derivazione a sx di w nel seguente modo: si inizia con A X1 ..Xk e si dim che w1 ...wi1 Xi ...Xk . Da DERIVAZIONI a INFERENZE: Sia G=(V,T,P,S) una CFG e supponiamo che esista una derivazione A w, dove w in T . Allora la procedura di inferenza ricorsiva, applicata a G, determina che w nel linguaggio della variabile A. Dim: induzione sulla lunghezza della derivazione. 7

Base: A=>w una produzione. Poich w composta da soli terminali si trova che w A nella base dellinferenza ricorsiva. Induzione: n+1 passi. A X1 ..Xk w . w = w1 ..wk dove se Xi terminale allora Xi = wi ; se Xi variabile Xi wi . Questa derivazione richiede n o meno di n passi quindi si applica hp induttiva concludendo che wi nel linguaggio di Xi . Nella iterazione successiva si scopre che w1 ..wk nel linguaggio di A. Una CFG G Ambigua se esiste almeno una stringa w in T per laquale possiamo trovare due alberi sintattici distinti, ciascuno con la radice etichettata S e con prodotto w. Un linguaggio L CF si dice Inerentemente Ambiguo se TUTTE le sue grammatiche sono ambigue. Teorema 5.29: Per ogni grammatica G=(V;T;P;S) e per ogni stringa w in T , w ha due alberi sintattici distinti sse ha due distinte derivazioni a sinistra da S.

6 - Automi a pila
Un Automa a Pila (PDA) in sostanza un automa a stati niti nondeterministico con transizioni e una capacit aggiuntiva: uno stack in cui pu memorizzare una stringa di simboli. A dierenza dellautoma a stati niti, grazie allo stack lautoma a pila pu ricordare una quantit illimitata di informazioni. PDA P = (Q, , , , q0 , Z0 , F ) Q: un insieme nito di stati; : un insieme nito di simboli di input; : un alfabeto di stack, nito; :la funzione di transizione. In termini formali riceve come argomento una tripla (q, a, X) in cui: 1. q uno stato in Q; 2. a un simbolo di input in oppure a = ; 3. X un simbolo di stack, ossia un membro di . Loutput di un insieme nito di coppie (p, ), dove p il nuovo stato e la stringa di simboli di stack che rimpiazza X alla sommit dello stack. q0 : lo stato iniziale; Z0 : il simbolo iniziale. Lo stack del PDA consiste allinizio in una sola coppia di questo simbolo e nientaltro. F: linsieme degli stati nali. La Configurazione Istantanea (ID) dellautma a pila rappresentata da una tripla (q, w, ), dove: 1. q lo stato; 8

2. w linput residuo; 3. il contenuto dello stack. Principi relativi alle Id e alle transizioni: 1. Se una sequenza di ID lecita per un PDA P, allora lecita anche la computazione formata accodando una stringa (sempre la stessa) allinput (saecondo componente) in ogni ID; 2. Se una computazione lecita per un PDA P, allora lecita anche la computazione formata aggiungendo gli stessi simboli sotto quelli nello stack in ogni ID; 3. Se una computazione lecita per un PDA P, e resta una coda di input non consumata, possiamo rimuovere il residuo dellinput in ogni ID e ottenere una computazione lecita. Teorema 6.5: Se P un PDA, e (q, x, a)

(p, y, ), allora per ogni stringa w in e in abbiamo un enunciato del

vero anche che: (q, xw, a) (p, yw, ). Si noti che se = primo principio e se = abbiamo il secondo principio. Teorema 6.6: Se P un PDA e (q, xw, a) (p, y, ). Abbiamo enunciato il terzo principio.

(p, yw, ) allora vero anche che (q, x, a)

Sia P un PDA. Allora L(P), il linguaggio Accettato per Stato Finale, {w | (q0 , w, Z0 ) (q, , a)} per uno stato q in F e una stringa qualsiasi a. A partire dalla ID iniziale con w in input, P consuma w ed entra in uno stato accettante. A questo punto il contenuto dello stack irrilevante. Per ogni PDA P deniamo N(P)= {w | (q0 , w, Z0 ) (q, , )} per qualsiasi stato q. Quindi N(P) linsieme degli input w che P pu consumare, svuotando nel contempo lo stack. N(P) lAccettazione per Stack Vuoto. Teorema 6.9: Se L= N (PN ) per un PDA PN , allora esiste un PDA PF tale che L= L(PF ). Da Stack Vuoto a Stato Finale. Ci serviamo di un nuovo simbolo X0 , che non deve appatenere a ; X0 sia il simbolo iniziale di PF sia un segnale che indica quando PN ha svuotato lo stack. Abbiamo inoltre bisogno di uu nuovo stato iniziale, X0 , la cui unica funzione inserire Z0 , il nuovo simbolo iniziale di PN , in cima allo stack ed entrare nello stato q0 , lo stato iniziale di PN . Questo PDA entra nello stato pf quando scopre che PN avrebbe svuotato il prorpio stack. Dim: Bisogna dim che: w L(PF ) w L(PN ). (Se) Si ha che (q0 , w, Z0 ) PN (q, , ) per qualunque stato q. Per i principi dei PDA si pu aggiungere X0 in fondo allo stack, ottenendo (q0 , w, Z0 X0 ) (q0 , w, Z0 X0 ) (q, , X0 ) e inoltre (q0 , , X0 ) PN (q, , ). (Solo se) Anch PF accetti w bisogna usare F (q, , X0 ) contiene (pf , ) q Q nellultimo passo. Tale regola pu essere usata solo se lo stack contiene X0 , il quale compare solo in ultima posizione. Inoltre la regola F (p0 , , X0 ) = {(q0 , Z0 X0 )}. Pertanto ogni computazione di PF che accetta w ha la seguente sequenza: (p0 , w, X0 )
PF PF PN

(q, , X0 ). Poich per costruzione PF ha tutte le mosse di PN si ha che

(q0 , w, Z0 X0 )

PF

equivalente a quella di PN . Pertanto (q0 , w, X0 ) (q, , ) Teorema 6.11: Se L= N (PF ) per un PDA PF . Allora esiste un PDA PN tale che L= L(PN ). Da Stato Finale a Stack Vuoto. Prendiamo un PDA PF che accetta un linguaggio L per stato nale e ne costruiamo un altro, PN , che accetta L per stack vuoto. pe 9

PN

(q, , X0 )

PF

(q, , ). La parte centrale

rcostruirlo si aggiunge una - transizione a un nuovo stato p da ogni stato accettante di PF . Quando si trova nello stato p, PN svuota lo stack senza consumare input. Di conseguenza, se PF entra in uno stato accettante dopo aver consumato linput w, PN svuota lo stack dopo aver consumato w. Per evitare il caso in cui PF svuota lo stack per una stringa che non va accettata, dotiamo PN di un indicatore di fondo stack, X0 . Dim: Bisogna dim che: w N (PN ) w L(PF ). (Se) si ha che (q0 , w, Z0 ) PF (q, , ) per un qualunque q F e . Per i principi dei PDA e per il fatto che PN contiene tutte le transizioni di PF si ha (q0 , w, Z0 X0 )
PN PN

(q, , X0 ). Pertanto PN pu eseguire la sequenza (p0 , w, X0 )


PN

PN

(q0 , w, Z0 X0 ) (q, , X0 ) (p, , ) ovvero w N (PN ). (Solo se) Lunico modo in cui PN pu vuotare lo stack entrare in uno stato p perch X0 viene messo in fondo allo stack e pF non ha mosse per X0 , PN entra in uno stato p solo quando PF entra in uno stato accettante, per cui ogni computazione accettante di PN deve essere nella forma (p0 , w, X0 ) (q, , X0 )
PN PN

(q0 , w, Z0 X0 )

PN

(p, , ). Tutte le transizioni centrali son anche transizioni di PF , per cui si ha

che (q0 , w, Z0 ) PF (q, , ). Si pu dimostrare che i linguaggi deniti dai PDA (accettazione per stato nale o accettazione per stack vuoto) sono proprio i linguaggi liberi dal contesto. Deniamo quindi un PDA P come Deterministico (DPDA) sse vengono soddisfatte le seguenti condizioni: (q, a, X) ha al massimo un elemento per ogni q in Q, a in (o a = ) e X in ; Se (q, a, X) non vuoto per un a in , allora (q, , X) devessere vuoto. Prefisso: Un linguaggio L ha la propriet di presso se in esso non esistono due stringhe x e y diverse, tali che x un presso di y. Un linguaggio L e N(P)(stack vuoto) per un DPDA P sse L gode della propriet di presso e L L(P) per un DPDA P. Tutti i linguaggi accettati dai DPDA hanno grammatiche non ambigue. Purtroppo i linguaggi dei DPDA non coincidono esattamente con il sottoinsieme dei CFL che non sono inerentemente ambigui. Se L=N(P) per un DPDA P, allora L ha una CFG non ambigua.

7 - Propriet dei linguaggi liberi dal contesto


Se un simblo non generatore o non raggiungibile un simbolo Inutile e pertanto pu essere eliminato. Il linguaggio generato da una grammatica non cambia se omettiamo i simboli inutili; possiamo quindi scoprirli tutti ed eliminarli. Teorema 7.2: Sia G una CFG, tale che L(G) = 0, cio G genera almeno una stringa. Sia G1 = (V1 , T1 , P1 , S) la grammatica costruita come segue: 1. Per prima cosa eliminiamo i simboli che non sono generatori (X un generatore se esiste una stringa terminale w tale che X w) e le produzioni in cui gurano. Sia G2 = (V2 , T2 , P2 , S) la grammatica risultante. Notiamo che S un generatore, per lipotesi che L(G) contiene almeno una stringa; dunque S non viene eliminato; 2. Eliminiamo poi i simboli non raggiungibili (X raggiungibile se esiste una derivazione S X) nella grammatica G2 . 10

Allora G1 non contiene simboli inutili e L(G1 ) = L(G). Per calcolare i simboli Generatori di G svolgiamo la seguente induzione: Base: Ogni simbolo di T (simboli terminali) palesemente generatore in quanto genera se stesso; Induzione: Supponiamo che esiste una produzione A a e che si sappia gi che ogni simbolo di a generatore. Allora A generatore. Per calcolare i simboli Raggiungibili di G svolgiamo la seguente induzione: Base: S senzaltro raggiungibile; Induzione: Supponiamo di aver scoperto che una certa variabile A raggiungibile. Allora, per ogni produzione con A in testa, tutti i simboli nel corpo sono raggiungibili. Mostriamo ora che le - produzioni non sono essenziali. Dimostriamo che se un linguaggio L ha una CFG, allora L { } ha una CFG senza - produzioni. Una variabile A Annullabile se A . Sia G una CFG. Possiamo trovare tutti i simboli annullabili di G tramite il seguente algoritmo iterativo: Base: Se A una produzione di G, allora A annullabile;

Induzione: Se esiste una produzione B C1 , C2 , ..., Ck in cui ogni Ci annullabile, allora B annullabile. Una Produzione Unitaria una produzione della forma A B, dove sia A sia B sono variabili. Una tecnica per lEliminazione delle Produzioni Unitarie consiste nel trovare prima tutte le coppie di variabili A e B tali che A B con una sequenza di sole produzioni unitarie. Una volta determinate tutte queste copie, possiamo sostituire qualunque sequenza di passi di derivazione in cui A B1 B2 ... Bn a per mezzo di una produzione che usa la produzione non unitaria Bn a diretta da A; in altre parole A a. Per cominciare, la costruzione induttiva delle coppie (A, B) tali che A B impiegando solo produzioni unitarie. Chiameremo tale coppia coppia unitaria. Base: (A, A) una coppia unitaria per ogni variabile A. Infatti A A in zero passi; Induzione: Supponiamo di aver determinato che (A, B) una coppia unitaria e B C una produzione, dove C una variabile. Allora (A, C) una cppia unitaria. Vogliamo convertire una CFG arbtraria G in una CFG equivalente che non abbia simboli inutili, produzioni o produzioni unitarie. Nel farlo bisogna prestare attenzione allordine di applicazione delle costruzioni. Un ordine sicuro : 1. Eliminazione delle - produzioni; 2. Eliminazione delle produzioni unitarie; 3. Eliminare i simboli inutili. 11

Teorema 7.14: Se G una CFG che genera un linguaggio contenente almeno una stringa diversa da , allora esiste unaltra CFG G1 tale che L(G1 ) = L(G) { },e G1 non ha - produzioni, produzioni unitarie o simboli inutili. Completiamo lesame delle semplicazioni grammaticali dimostrando che ogni CFL non vuoto, privo di , ha una grammatica G le cui produzioni sono di due semplici forme: 1. A BC, dove A, B e C sono variabili; 2. A a, dove A una variabile e a un terminale. Inoltre G non ha simboli inutili. Una tale grammatica si dice in CNF (Chomsky Normal Form). Per porre una grammatica in CNF si parte da una grammatica priva di - produzioni, produzioni unitarie e simboli inutili. Ogni produzione quindi nella forma A a, una forma ammessa nella CNF, oppure ha un corpo di lunghezza 2 o pi. Il nostro compito duplice: 1. Far si che i corpi di lunghezza 2 o pi consistano soltanto di variabili. Per ogni terminale a che compare in un corpo di lunghezza 2 o pi creiamo una nuova variabile, A. Questa variabile ha una sola produzione, A a. Dora in poi adoperiamo A anziche a in tutti i corpi di unghezza 2 o pi. A questo punto il corpo di ogni produzione o un terminale o una sequenza di almeno due variabili senza terminali; 2. Scomporre i corpi di lunghezza 3 o pi in una cascata di produzioni, ciascuna con un corpo fatto di due variabili. Dobbiamo scompore le produzioni A B1 , B2 , ..., Bk , con k 3, in una serie di produzioni con duevariabili in ogni corpo. Deniamo k-2 niove variabili, C1 , C2 , ..., Ck2 . La produzione originale va sostituita con le k-1 produzioni A B1 C1 , C1 B2 C2 , .... , Ck3 Bk2 Ck2 , Ck2 Bk1 Bk . Tempo per portare una grammatica in CNF: raggiungibili e genaratori O(n); coppie unitarie ed eliminare produzioni unitarie O(n2 ); eliminare produzioni bisogna limitare la lunghezza dei corpi. tempo O(n); CNF O(n). Teorema 7.17: Consideriamo un albero sintattico di una grammatica in CNF G; sia w, una stringa terminale, il suo prodotto. Se la lunghezza del cammino pi lungo n, abbiamo |w| 2n1 . Sviluppiamo uno strumento per dimostrare che certi linguaggi non sono liberi dal contesto. Il teorema del Punping Lemma per i Linguaggi Liberi dal Contesto aerma che in ogni stringa sucientemente lunga di un CFL si possono trovare due sottostringhe, brevi e vicine, che possibile iterare in tandem. Teorema 7.18: Sia Lun CFL. Esiste una costante n tale che, se z una stringa in L tale che |z| almeno n, possiamo scrivere z = uvwxy, con le seguenti condizioni: 1. | vwx |n. La parte mediana ha lunghezza limitata; 2. vx = . Poich v e x sono i pezzi da replicare, questa condizione aferma che almeno una di queste stringhe devessere non vuota; 12

3. Per ogni i 0, uv i wxi y in L. Le due stringhe v e x possono essere replicate per uno stesso numero arbitrario, anche zero, di volte, ottenendo stringhe che sono ancora in L. Dim: sia L un CFL. Esiste una costante n, tale che, se P una stringa di L tale che |z| n, possiamo scrivere z=uvwxy con le seguenti condizioni: - |vwx| n; - vx = ; - i 0, uv i wxi y L. DIM: grammatica G per L in CNF. L(G)=L-{}; scegliamon = 2m ; supponiamo che z in L sia lunga almeno n |z| n |z| 2m ; un albero sintattico il cui cammino pi lungo sia m, o meno, ha un prodotto di lunghezza 2m1 = n/2; un tale albero sintattico non pu avere z come prodotto perch z troppo lungo; ogni albero sintattico con prodotto z ha perci un cammino di lunghezza pari almeno a m+1 |z| 2m . Il cammino pi lungo sullalbero per z lungo k+1 dove k almeno m. Poich k m lungo il cammino ci sono almeno m+1 occorenze di variabili A0 A1 ..Ak . Ma in V ci sono solo m variabili e quindi almeno due delle variabili del cammino (da Akm a Ak ) devono essere uguali. Se Ah = Aj = A possiamo costruire nuovi alberi sintattici a partire da quello originale: 1- possiamo sostituire il sottoalbero radicato in Ah , che ha prodotto vwx, con quello radicato in Aj che ha prodotto w. Possiamo farlo perch entrambi hanno la radice etichettata A. Lalbero risultante ha come prodotto la stringa uwy e corrisponde a i=0; 2il sottoalbero Aj sostituito dallintero sottoalbero radicato in Ah . Il prodotto di questo albero uv 2 wx2 y. Lultimo dettaglio la condizione (1) che dice |vwx| n. Poiche abbiamo scelto Ah vicino alla base dellalbero (k h m), il cammino pi lungo nel sottoalbero radicato in Ah non pu essere pi lungo di m+1. Per il teorema sullaltezza dellalbero la lunghezza del prodotto del sottoalbero radicato in Ah non pu essere superiore a 2m = n. Applicazione du Punping Lemma come di un gioco a due: 1. Scegliamo un linguaggio L che vogliamo dimostrare non essere un CFL; 2. Lavversario sceglie n senza comunicarcelo: dovremo agire per ogni possibile n; 3. Scegliamo z; per farlo possiamo usare n come posibile parametro; 4. Lavversario scompone z in uvwxy, con il solo vincolo che | uwx | n e vx = ; 5. vinciamo la partita se possiamo scegliere i in modo che uv i wxi y non sia in L. Propriet di Chiusura dei Linguaggi Liberi dal Contesto: Teorema 7.23: (Sostituzione) Se L un CFL sullalfabeto , e s una sostituzione su tale che s(a) un CFL per gni a in , allora s(L) un CFL. Teorema 7.24: I CFL sono chiusi rispetto alle seguenti operazioni: unione; concatenazione; chiusura (*) e chiusura positiva (+); omomorsmo. UNIONE: siano L1 e L2 due CFL. Allora L1 L2 = s(L) con L={1, 2} e s la sostituzione denita da s(1) = L1 e s(2) = L2 . CONCATENAZIONE: siano L1 e L2 due CFL. Allora L1 L2 il linguaggio di s(L), dove L il linguaggio {12} e s la sostituzione denita da s(1) = L1 e s(2) = L2 . CHIUSURA: sia L1 un CFL, L il linguaggio {1} e s la sostituzione 13

s(1) = L1 allora L = s(L). OMOMORFISMO: sia L un CFL sullalfabeto e h un 1 omomorsmo su . Sia s la sostituzione che rimpiazza ogni simbolo a in con il linguaggio formato dalla stringa h(a). Cio s(a) = {h(a)} per ogni a in , allora h(L) = s(L). INVERSIONE: sia L=L(G) per una grammatica G=(V, T, P, S). si costruisca GR = (V, T, P R , S) dove P R linverso di ogni produzione di P. Per induzione sulla lunghezza della derivazione in G e GR si dim che L(GR ) = LR . Teorema 7.25: (Inversione) Se L un CFL, allora lo anche LR . Teorema 7.27: (Intersezione) Se L un CFL e R un linguaggio regolare, L R un CFL. Teorema 7.30: (Omomorfismo Inverso) Sia L un CFL e h un omomrsmo. Allora h1 (L) un CFL. VERIFICARE se un CFL FINITO G=(v, T, P, S) in CNF senza simboli inutili e L(G) \ {}. L(G) nito sse L(G) nito. DIM: andiamo a costruire un grafo diretto: - un vertice per ogni variabile; - un arco tra A e B se A->BC o A->CB. L innito sse non ci sono cicli in questo grafo diretto. (1) supponiamo che esista un ciclo: A0 A1 ..An A0 allora A = 0 A0 0 ... n An n n+1 A0 n+1 con , (V ) e |i i | = 1. Non ci sono simboli inutili (generatori e raggiungibili): n+1 w e n+1 x con w e x stringhe di terminali e |wx| n + 1 e w e x non entrambe . Visto che non ci sono simboli inutili, possiamo trovare le stringhe terminali y e z tali che S yA0 z e una stringa terminale 2 2 v A0 v. Allora i si ha S yA0 z ywA0 xz yw A0 x z ... ywi A0 xi z ywi vxi z. i i j j Visto che |wx|>0, yw vx z non pu essere uguale a yw vx z se i = j. Quindi la grammatica genera un numero innito di stringhe. (2) Contrariamente supponiamo che il grafo non abbia cicli: rank variabile A=lunghezza del percorso pi lungo che parte da A. Lassenza di cicli implica che il rank di a sia nito. Inoltre possiamo osservare che se A->BC una produzione il rank di B e C deve essere minore di quello di A. Se rank(A)=r, nessuna stringa di terminali ha lunghezza > 2r . Base: r=0 se A ha rank 0 il vertice a non ha archi uscenti. Ha una sola produzione e deriva la stringa di lunghezza 1. Induzione: r>0 A->BC, rank(B)<rank(A) e rank(C)<rank(A), vale ipotesi induttiva: B v1 e C v2 quindi |v1 | 2r1 e |v2 | 2r1 . A BC v1 v2 e |v1 v2 | 2r1 + 2r1 = 2r . Se la lunghezza massima delle stringhe derivate da S 2r0 con r0 rank di S il linguaggio nito. Complessit: valutare se un grafo ha cicli: con lalgoritmo di Belman Ford O(|V| * |E|) + O(n2 ) per portare la grammatica in CNF. VERIFICARE se un CFL VUOTO Stabilire se il simbolo iniziale generatore. Tempo O(n2 ) Poich la grammatica di dimensione n ha al massimo n variabili, la creazione e la preparazione dellarray richiede tempo O(n). Poich ci sono al massimo n produzioni, e la loro lunghezza totale al massimo n, la preparazione dei puntatori e dei contatori si compie in O(n). Il lavoro fatto quando si scopre che il contatore per una produzione 0 si divide in: lavoro svolto per la produzione: rilevare che il contatore 0, stabilire quale variabile in testa, vericare se gi stato dichiarato generatore e se necessario metterla in coda. Tutti questi passi richiedono O(1) per ogni produzione quindi in totale O(n).

14

lavoro svolto nellesaminare le posizioni nei corpi delle produzioni aventi A in testa. Questo lavoro proporzionale al numero di posizioni per A. Il lavoro complessivo per trattare tutti i simboli generatori quindi proporzionale al numero delle lunghezze dei corpi che O(n). Propriet di decisione dei CFL: Complessit lineare nella forma dellinput: da CFG a PDA; da PDA per stato nale a PDA per stack vuoto; da PDA per stack vuoto a PDA per stato nale; Da PDA a CFG tempo O(n3 ) e lunghezza O(n3 ). Algortimo per vericare lappartenenza ad un linguaggio O(n3 ).

8- 9-Macchina di Turing Indedicibilit


MACCHINA DI TURING: Q: insieme nito di stati del controllo; : insieme nito dei simboli di input; : insieme completo dei simboli di nastro : funzione di transizione. (q, X) > (p, Y, D) p stato successivo, Y simbolo di nastro scritto nella cella visitata al posto di X, D direzione q0 : stato iniziale del controllo B: blank F: insieme degli stati nali o accettanti. CODICI BINARI TM: lo stato iniziale sar sempre q1 e q2 sar lunico stato accettante. X1 sar sempre il simbolo 0, X2 sar 1 e X3 sar B. L come D1 e R come D2 . Una volta scelti gli interi che rappresentano stati simboli e direzioni possiamo codicare la funzione di transizione : (qi , Xj ) = (qk , Xl , Dm ). Codichiamo questa regola per mezzo delle stringa: 0i 10j 10k 10l 10m 11...111w I linguaggi che possiamo accettare usando una TM sono detti linguaggi RE. Diciamo ricorsivo un linguaggio che L se L=L(M) per una TM M tale che: se w in L allora M accetta e dunque si arresta; se w non in L allora M si arresta pur non entrando in uno stato accettante.

15

Ld DEFINIZIONE: consiste di tutte le stringhe w tali che la TM rappresentata da w non accetta linput w. Lu DEFINIZIONE: linsieme delle stringhe binarie che codicano un coppia (M, w) dove M un TM con alfabeto di input binario e w una stringa in (0+1)* tale che w sia in L(M). Se L un linguaggio ricorsivo, lo anche L. Dim: L=L(M) per TM(M) e L=L(M ) per TM(M ). Gli stati accettanti di M diventeranno gli stati non accettanti di M , in questi casi M si arresta senza accettare. M ha un nuovo stato accettante r, dal quale non esiste nessuna transizione escente. Per ogni combinazione di uno stato accettante e di un simbolo di M tale che m non avvia alcuna transizione (si arresta senza accettare), aggiungiamo una transizione verso lo stato accettante r. Poich garantito che M si arresta, lo stesso vale per M . Inoltre M accetta proprio lo stringhe che M non accetta. Di conseguenza M accetta L. Se un linguaggio L e il suo complemento sono RE, allora L ricorsivo. Dim: L=L(M1 ) e L = L(M2 ) se linput w di M in L, M1 accetta in tempo nito, quindi M accetta e si arresta. Se vw non in L, allora in L, dunque M2 prima o poi accetta, a quel punto M si arresta senza accettare. Quindi M si arresta su tutti gli input e L(M) esattamente L. Poich M si arresta sempre e L(M)=L, concludiamo che L ricorsivo. Lu RE ma non ricorsivo Dim: supponiamo che Lu sia ricorsivo, allora anche il complemento di Lu deve essere ricorsivo (Lu ricorsivo).Se abbiamo una TM che accetta Lu possiamo costruire una TM che accetta Ld . Ld non RE perci Ld non pu essere ricorsivo. Ld RE perch linsieme delle stringhe wi tali che Mi accetta wi . Si tratta di un linguaggio simile al linguaggio universale Lu formato da tutte le coppie (M,w) tali che M accetta w. Visto che questo linguaggio RE per la stessa ragione si dimostra che Ld RE. Poich sappiamo che Ld non RE, ne ricaviamo una contraddizione con lipotesi che Lu sia ricorsivo.

Propriet di chiusura dei linguaggi RE: *; concatenazione; unione; intersezione. Propriet di chiusura dei linguaggi RICORSIVI: *; omomorsmo; concatenzazione; unione; intersezione; complemento; dierenza. 16