Proprietà dei linguaggi regolari
Argomenti della lezione Relazione tra automi, grammatiche ed espressioni regolari Pumping lemma per i linguaggi regolari Equivalenza di automi a stati finiti
Le seguenti classi di linguaggi sono equivalenti: L(ER): linguaggi definiti da espressioni regolari L(ASF): linguaggi riconosciuti da ASF L(GR): linguaggi generati da grammatiche regolari (linguaggi regolari)
Dim. i) L(ASF) L(ER) Supponiamo dato l'alfabeto Σ={a,b} La dimostrazione si effettua per induzione sulla struttura delle espressioni regolari e cioé facendo vedere che i linguaggi rappresentati dalle ER a, b e Ø sono riconoscibili con ASFND
Inoltre, se sono riconoscibili con ASFND i linguaggi rappresentati dalle ER e, e1 ed e2, sono riconoscibili con ASFND anche i linguaggi: (e1+e2) (e1. e2) e*
La costruzione degli automi per i linguaggi Λ, {a} e {b} è banale. Vediamo come si costruisce un automa che riconosce il linguaggio risultante dall unione di due linguaggi riconosciuti da automi dati.
Siano dati due ASFND A 1 ed A 2 Esiste un ASFND che riconosce L(A 1 ) L(A 2 ) Sia dato un ASFND A Esiste un ASFND che riconosce L(A)* Le dimostrazioni vengono lasciate come esercizio
ii) L(GR) L(ASF) Sia dato un automa A = <Σ,K,δ,q 0,F> La grammatica corrispondente è la grammatica G=<V T, V N, P, S> dove: V T = Σ V N = {A i per ogni q i K} S= A 0
Per ogni regola di transizione δ(q i,σ) = q j costruiamo la produzione A i σa j e se q j F anche A i σ
iii) L(ER) L(GR) Mostriamo il metodo con l ausilio di un esempio Sia data la grammatica con produzioni A aa bb B bb c ed assioma A
Innanzitutto trasformiamo le produzioni in un sistema di equazioni definite sul monoide sintattico: A aa bb B bb c A=aA+bB B=bB+ c
Quindi si risolvono le equazioni mediante sostituzione; ad esempio, date A=aA+bB B=bB+ c otteniamo A = aa + b(bb + c) = aa + bbb + bc B=bB+ c
Quindi eliminiamo la ricursione; ad esempio, data l'equazione B = bb + c la soluzione è B = b*c è infatti semplice verificare che: b*c = b(b*c)+c = b + c+c = b*c
Applicando ancora la sostituzione abbiamo: A = aa + bbb + bc = aa + bbb*c + bc e applicando ancora l eliminazione della ricursione abbiamo: A = a*(bbb*c + bc) = a*bb*c B = b*c
Poiché A è l assioma, il linguaggio generato dalla grammatica è rappresentato dall espressione regolare a*bb*c
Pumping lemma per i linguaggi regolari Per ogni linguaggio regolare L esiste una costante n tale che se z L e z n allora esistono tre stringhe u, v, w, tali che z=uvw con uv n, v 1 e uv i w L, i=0,1,...
Basata sui cicli (eventualmente presenti) nel diagramma degli stati Supponiamo che A=<Σ,K,δ,q 0,F> sia l'asf che riconosce L con il minimo numero di stati; sia n= K Supponiamo esista z L con z n Poiché z L abbiamo che δ(q 0,z) F
Sia qi 0, qi 1,...,qi z la sequenza di stati attraversati da A durante il riconoscimento di z, qi 0 =q 0 e qi z F Dato che z n, allora esiste almeno uno stato attraversato 2 volte
Consideriamo un prefisso t di z tale che t =n e sia ty = z Anche durante la scansione di t esiste almeno uno stato qi j che viene attraversato due volte Sia u il più breve prefisso di t e di z tale che δ(q 0,u)= qi j e sia t = =uxe e z = =uxy
Sia ora v il più breve prefisso (non vuoto) di x tale che δ(qi j,v)= qi j e sia t = uvs e z = uvw per un opportuna stringa w = sy In base alle ipotesi fatte abbiamo che uv t =n
Poiché δ(q 0,u) = qi j e d(qi j,w) = qi z abbiamo che, δ(q 0,uw) = qi z, quindi uw L
Inoltre, se i 1, abbiamo: δ(q 0,uv i w)=δ(δ(q 0,u),v i w)=δ(qi j,v i w) = δ(δ(qi j,v),v i-1 w)=δ(qi j,v i-1 w) = = δ(qi j,w) = qi z e quindi anche uv i w L per ogni i
Il pumping lemma consente di dimostrare la non-regolarità di un linguaggio dato Il linguaggio L={a n b n n 0} non èregolare
Infatti, per il pumping lemma, per n sufficientemente grande, se L contiene a n b n =uvw dovrebbe contenere uv i w i=1,2,3,4,...
Ne consegue che se v=a h o v=b h allora L dovrebbe contenere a n b m con n m se v=a h b k allora L dovrebbe contenere a m-h (a h b k ) i b m-k
In tutti e tre i casi si tratta di stringhe che non fanno parte di L
Con la stessa tecnica del pumping lemma possiamo dimostrare i due seguenti risultati: Se il linguaggio L riconosciuto da un ASF con n stati non è vuoto esiste una stringa x in L di lunghezza x < n
Se il linguaggio L riconosciuto da un ASF con n stati è infinito esiste una stringa x in L di lunghezza n x <2n
I risultati precedenti ci dicono che è possibile decidere se un linguaggio regolare è vuoto finito infinito
Proprietà di chiusura dei linguaggi regolari Nel corso della lezione abbiamo visto che l'insieme dei linguaggi regolari è chiuso rispetto a: unione concatenazione iterazione
Vediamo ora ulteriori proprietà di chiusura: la classe dei linguaggi regolari è chiusa rispetto alla complementazione
La classe dei linguaggi regolari è chiusa rispetto all'intersezione La proprietà deriva immediatamente dalle proprietà di chiusura già viste e dalla legge di De Morgan che mette in relazione i tre operatori di unione, intersezione e complementazione.
Come ulteriore conseguenza delle proprietà di chiusura e delle proprietà derivanti dal pumping lemma possiamo dimostrare che per le grammatiche regolari (ed ovviamente anche per espressioni regolari, ASF ed ASFND) è decidibile l'equivalenza
Dati due automi A 1 =<Σ 1,K 1,δ 1,q 01,F 1 > >e e A 2 =<Σ 2,K 2,δ 2,q 02,F 2 > è possibile decidere se L(A 1 ) = L(A 2 )
Si può facilmente mostrare, prima di tutto, che i linguaggi regolari sono chiusi rispetto alla differenza simmetrica; infatti se indichiamo con la differenza simmetrica abbiamo:
(L(A 1 ), L(A 2 )) = = L(A 1 )\L(A 2 ) L(A 2 )\L(A 1 ) Successivamente possiamo osservare che L(A 1 ) = L(A 2 )se e solo se (L(A 1 ), L(A 2 )) è vuoto