Documente Academic
Documente Profesional
Documente Cultură
LIMBAJE FORMALE
ŞI
TEORIA AUTOMATELOR
ÎNVĂŢĂMÂNT LA DISTANŢĂ
BRAŞOV 2009-2010
Introducere
Teoria limbajelor formale a apărut în conexiune cu studiul limbajelor naturale dar ea a avut o
dezvoltare rapidă datorită calculatorului electronic şi a limbajelor de programare. Cercetările
româneşti în limbaje formale au început în şcoala de lingvistică matematică creată şi condusă de
Solomon Marcus, din cadrul Universităţii Bucureşti. Printre reprezentanţii acestei şcoli se numără:
Gheorghe Păun, Gabriel Orman, Cristian Calude.
Limbajele formale au o mulţime de aplicaţii în diferite domenii: compilarea automată,
traducerea automată dintr-un limbaj natural într-altul, decidabilitate şi calculabilitate, demonstrarea
teoremelor, analiza imaginilor, modelarea unor procese chimice sau biologice, arhitectura, pictura,
modelarea unor probleme de cercetări operaţionale ş.a.m.d. O nouă direcţie deschisă de Păun
Gheorghe, este o aplicaţie practică a metodelor lingvistice în studiul proceselor economice.
Cursul de faţă îşi propune să trateze aspecte ale teoriei limbajelor formale strâns legate de
teoria compilării. El se adresează, în special, studenţilor de la secţiile de informatică, dar poate fi
folosit şi de cititori care nu au o pregătire specială în acest domeniu, pentru că noţiunile folosite au
fost introduse gradat şi metodic.
Obiectivele cursului
Cursul îşi propune ca obiectiv familiarizarea studenţilor cu noţiuni de
limbaje formale şi teoria automatelor, necesare în modelarea proceselor, în
procesarea limbajelor naturale şi, mai ales, în construcţia compilatoarelor pentru
limbaje de programare evoluate.
-1-
Competenţe conferite
După parcurgerea materialului studentul va fi capabil să:
Identifice tipuri diferite de gramatici din ierarhia lui Chomsky;
Construiască gramatici pentru diferite limbaje din ierarhia lui Chomsky;
Construiască automate finite şi automate push-down în funcţie de clasa de
limbaje pe care doresc să o recunoască;
Construiască reprezentari sub formă de expresii regulate pentru anumite
limbaje de tip 3;
Scrie programe pentru o serie de algoritmi descrişi în cadrul acestui curs.
Structura cursului
Cursul este structurat în 4 module şi 14 unităţi de învăţare, după cum
urmează:
Modulul 1 conţine 3 unităţi de învăţare;
Modulul 2 conţine 4 unităţi de învăţare;
Modulul 3 conţine 2 unităţi de învăţare;
Modulul 4 conţine 5 unităţi de învăţare.
Fiecare unitate de învăţare necesită între 2 şi 4 ore de învăţare;
Există 2 teme de control, prima fiind prezentată la sfârşitul modulului 3 iar
cea de a doua la sfârşitul modulului 4;
Transmiterea temelor de control se va face în mod electronic şi sub formă
de material tipărit;
Transmiterea rezultatelor se va face direct, în ziua exmenului, cu
comentarea problemelor apărute, şi în format electronic.
Cerinţe preliminare
Discipline necesare a fi parcurse înaintea disciplinei curente:
Algoritmica;
Structuri de date;
Programare procedurală”
Programare obiect orientată;
Algoritmica grafurilor.
-2-
Discipline deservite
Cursul de Limbaje Formale si Teoria Automateleor este absolut necesar în
înţelegerea cursului de Tehnici de compilare .
Evaluarea
Nota finală este compusă din 4 evaluari după cum urmează:
– ponderea evaluării finale (examen/colocviu) este de 50%;
– ponderea evaluărilor pe parcurs (teme de control, verificări pe parcurs)
este de 25%
– ponderea proiectelor/colocvii de laborator este de 25%.;
-3-
Cuprins
Introducere .................................................................................................................................. 1
Chestionar evaluare prerechizite .................................................................................................. 9
Modulul 1. Introducere în Teoria Limbajelor Formale
Introducere. .................................................................................................................. 9
Competenţe ................................................................................................................... 9
Unitatea de învăţare I.1 Notiuni generale de teoria limbajelor formale .......................... 9
I.1.1. Introducere....................................................................................... 10
I.1.2. Obiectivele unităţii de învăţare ......................................................... 10
I.1.3. Noţiunea de limbaj ......................................................................... ..10
I.1.4. Rezumat ........................................................................................... 17
Test de evaluare/autoevaluare ................................................................... 16
Unitatea de învăţare I.2. Algoritmi normali în sens Markov ........................................ 18
I.2.1. Introducere....................................................................................... 18
I.2.2. Obiectivele unităţii de învăţare ......................................................... 18
I.2.3. Algoritmi normali în sens Markov.................................................... 18
I.2.4. Exemple ........................................................................................... 19
I.2.5. Rezumat ........................................................................................... 25
Test de evaluare/autoevaluare ................................................................... 25
Unitatea de învăţare I.3. Gramatici analitice şi generative ........................................... 26
I.3.1. Introducere....................................................................................... 26
I.3.2. Obiective .......................................................................................... 26
I.3.3. Gramatici analitice şi generative ..................................................... 26
I.3.4. Ierarhia lui Chomsky ........................................................................ 30
I.3.5. Operaţii cu limbaje........................................................................... 35
I.3.6. Rezumat ........................................................................................... 38
Test de evaluare/autoevaluare ................................................................... 37
Modulul II. Automate finite şi limbaje de tip 3............................................................................ 39
Introducere. ................................................................................................................ 39
Competenţe ................................................................................................................. 39
Unitatea de învăţare II.1. Automate finite şi limbaje de tip 3 ....................................... 40
II.1.1. Introducere ..................................................................................... 40
II.1.2. Obiectivele unităţii de învăţare ....................................................... 40
-4-
II.1.3. Automate finite ................................................................................ 40
II.1.4. Legătura dintre gramaticile regulate şi automatele finite ................ 45
II.1.5. Rezumat .......................................................................................... 52
Test de evaluare/autoevaluare ................................................................... 51
Unitatea de învăţare II.2. Minimizarea automatului finit ............................................. 53
II.2.1. Introducere ..................................................................................... 53
II.2.2. Obiectivele unităţii de învăţare ....................................................... 53
II.2.3. Minimizarea automatului finit ......................................................... 53
II.2.4. Algoritmi de minimizare a automatului finit .................................... 57
II.2.5. Rezumat .......................................................................................... 61
Test de evaluare/autoevaluare ................................................................... 60
Unitatea de învăţare II.3. Gramatici regulate şi expresii regulate ............................... 62
II.3.1. Introducere ..................................................................................... 62
II.3.2. Obiectivele unităţii de învăţare ....................................................... 62
II.3.3. Gramatici de tip 3 şi expresii regulate ............................................. 62
II.3.4. Algoritm de transformare a unei gramatici regulate într-o
expresie regulată ............................................................................. 65
II.3.5. Rezumat .......................................................................................... 70
Test de evaluare/autoevaluare ................................................................... 70
Unitatea de învăţare II.4. Expresii regulate şi automate finite ..................................... 71
II.4.1. Introducere ..................................................................................... 71
II.4.2. Obiectivele unităţii de învăţare ....................................................... 71
II.4.3. Algoritm de construcţie a unui automat finit pornind de la o
expresie regulată ........................................................................... 71
II.4.4. Rezumat .......................................................................................... 76
Test de evaluare/autoevaluare ................................................................... 76
Modulul III Proprietăţi ale limbajelor regulate .......................................................................... 77
Introducere. ................................................................................................................ 77
Competenţe ................................................................................................................. 77
Unitatea de învăţare III.1 Proprietăţi de închidere pentru limbaje regulate. ................ 78
III.1.1. Introducere .................................................................................... 78
III.1.2. Obiectivele unităţii de învăţare ...................................................... 78
III.1.3. Proprietăţi de închidere pentru limbaje regulate ............................ 78
III.1.4. Rezumat ......................................................................................... 85
Test de evaluare/autoevaluare ................................................................... 85
Unitatea de învăţare III.2. Lema de pompare pentru limbaje regulate ......................... 86
-5-
III.2.1. Introducere .................................................................................... 86
III.2.2. Obiectivele unităţii de învăţare ...................................................... 86
III.2.3. Proprietăţi ale limbajelor regulate................................................. 86
III.2.4. Lema de pompare .......................................................................... 88
III.2.5. Rezumat ......................................................................................... 90
Test de evaluare/autoevaluare ................................................................... 90
Temă de contro Il ........................................................................................................ 91
Modulul IV Limbaje independente de context.. ........................................................................... 92
Introducere. ................................................................................................................ 92
Competenţe ................................................................................................................. 92
Unitatea de învăţare IV.1. Arbori de derivaţie pentru gramatici independente de
context ...................................................................................................... 93
IV.1.1. Introducere .................................................................................... 93
IV.1.2. Obiectivele unităţii de învăţare ...................................................... 93
IV.1.3 Arbori de derivaţie pentru gramatici I.D.C.. .................................... 93
IV.1.4. Rezumat ......................................................................................... 98
Test de evaluare/autoevaluare ................................................................... 97
Unitatea de învăţare IV.2. Simplificarea gramaticilor independente de context.şi
forme normale
IV.2.1. Introducere .................................................................................... 99
IV.2.2. Obiectivele unităţii de învăţare ...................................................... 99
IV.2.3. Simplificarea gramaticilor independente de context. ...................... 99
IV.2.4. Forme normale pentru gramatici I.D.C. ....................................... 105
IV.2.5. Rezumat ....................................................................................... 114
Test de evaluare/autoevaluare ............................................................... ..113
Unitatea de învăţare IV.3.Lema de pompare pentru limbaje independente de contex..115
IV.3.1. Introducere .................................................................................. 115
IV.3.2. Obiectivele unităţii de învăţare .................................................... 115
IV.3.3. Lema de pompare pentru limbaje I.D.C. ....................................... 115
IV.3.4.Rezumat. ....................................................................................... 120
IV.2.5. Rezumat ....................................................................................... 120
Test de evaluare/autoevaluare ................................................................. 120
Unitatea de învăţare IV.4. Automate push-down şi legătura lor cu gramaticile
independente de context ................................................... 121
IV.4.1. Introducere .................................................................................. 121
IV.4.2. Obiectivele unităţii de învăţare .................................................... 121
-6-
IV.4.3. Automate push-down ................................................................... 122
IV.4.4. Legătura dintre automate push-down şi gramatici de tip 2 ........... 126
IV.4.5. Rezumat ....................................................................................... 132
Test de evaluare/autoevaluare ................................................................. 132
Unitatea de învăţare IV.5. Proprietăţi de închidere ale familiei limbajelor de tip 2.....133
IV.5.1. Introducere .................................................................................. 133
IV.5.2. Obiectivele unităţii de învăţare .................................................... 133
IV.5.3. Proprietăţi de închidere pentru limbaje I.D.C................................ 133
IV.5.4. Rezumat ....................................................................................... 143
Test de evaluare/autoevaluare ................................................................. 142
Temă de control II ..................................................................................................... 144
Bibliografie .............................................................................................................................. 145
-7-
Chestionar evaluare prerechizite
1. Definiţi următoarele noţiuni: tip de data, variabilă într-un algoritm, stare a execuţiei unui
algoritm (program), calcul efectuat de un program (algoritm), algoritm parţial corect,
testarea unui program, complexitatea unui algoritm.
2. Descrieţi metoda backtracking. Precizaţi 2 exemple de probleme rezolvate prin
backtracking.
3. Cum se realizează trasmiterea parametrilor pentru funcţii (java/c++)?
4. Cum se realizează generarea numerelor aleatoare în java/c++?
5. Ce înţelegeţi prin precedenţa operatorilor? Oferiţi exemple.
6. Şiruri de caractere:
a. Cum se determină lungimea unui şir?
b. Cum se determină poziţia unui caracter într-un şir dat?
c. Cum extragem un subşir dintr-un şir?
d. Cum se realizează înlocuirea unui subşir cu un alt subşir?
e. Cum se obţine inversul unui şir?
7. Instrucţiuni repetitive:
a. Care este forma generală a instrucţiunii ”for”?
-8-
Modulul 1. Introducere în Teoria Limbajelor Formale
Cuprins
Introducere..........................................................................................................................9
Competenţe.........................................................................................................................9
U1. Noţiuni generale de teoria limbajelor formale............................................................10
U2. Algoritmi normali în sens Markov.............................................................................18
U3. Gramatici analitice şi generative................................................................................26
Introducere
Introducem, în acest modul, o serie de noţiuni folosite în teoria limbajelor formale
cum ar fi: alphabet, simbol, cuvânt, subcuvânt, prefix, suffix, cuvânt vid. Noţiunea
de limbaj formal se defineşte apoi în mai multe feluri, echivalente între ele,
pornind de la sisteme de rescriere, pînă la gramatici generative şi analitice.
Competenţe
La sfârşitul acestui modul studenţii vor fi capabili să:
Folosească noţiunile definite în descrierea limbajelor formale;
Construiască gramatici generative şi analitice pentru diferite limbaje;
Construiască algoritmi normali în sens Markov cu o intrare şi o ieşire;
fixată;
Implementeze algoritmii prezentaţi într-un limbaj de programare general.
-9-
Unitatea de învăţare M1.U1. Noţiuni generale de teoria
limbajelor formale
Cuprins
M1.U1.1. Introducere
Noţiunile folosite în teoria limbajelor formale au fost preluate din lingvistică deşi
sunt folosite de multe ori cu sens schimbat. Astfel limbajul este definit ca o
mulţime de cuvinte iar în lingvistică, care se referă la un limbaj natural, limbajul
este o mulţime de fraze care sunt la rândul lor mulţimi de cuvinte.
Problema delicată este de a defini în mod finit o mulţime infinită sau foarte mare
de cuvinte.
- 10 -
O limbă naturală se defineşte, conform dicţionarului, ca o mulţime de cuvinte şi de
metode de combinare a lor, folosită şi înţeleasă de o comunitate umană considerabilă.
Un limbaj de programare se defineşte ca o mulţime de programe corecte scrise în acel
limbaj.
O limbă naturală sau un limbaj de programare pot fi considerate ca mulţimi de secvenţe,
adică şiruri finite de elemente ale unui anumit vocabular de bază.
Pentru a putea studia proprietăţile acestor limbaje a fost necesară formalizarea noţiunii de
limbaj, construirea unei teorii matematice riguroase a limbajelor. O astfel de teorie este suficient
de generală pentru a include şi limbajele naturale şi limbajele de programare, precum şi o
mulţime de alte limbaje, formând la un loc aşa numitele limbaje formale.
Pentru a putea defini noţiunea de limbaj formal vom introduce o serie de noţiuni şi notaţii
folosite frecvent în această teorie.
Definiţia 1.1.1 Un alfabet sau vocabular, V, este o mulţime finită, nevidă de elemente.
În cele ce urmează vom folosi ca simboluri cifrele, literele latine şi greceşti mari şi mici
şi simboluri speciale cum ar fi $, #.
Definiţia 1.1.3 Un cuvânt peste alfabetul V este un şir finit constând din zero sau mai multe
simboluri ale lui V, unde un acelaşi simbol poate să apară de mai multe ori.
- 11 -
Definiţia 1.1.4 Un limbaj este o mulţime de cuvinte peste un alfabet.
Exemplul 3 Într-un limbaj natural alfabetul, în sensul definiţiilor de mai sus, este
dicţionarul limbii respective, cuvintele sunt frazele, iar limbajul este mulţimea
tuturor frazelor. Într-un limbaj de programare simbolurile sunt instrucţiunile
limbajului, cuvintele sunt programele iar limbajul este mulţimea tuturor
programelor.
Definiţia 1.1.5 Dacă u şi v sunt două cuvinte din V* atunci concatenarea uv este tot un cuvânt
din V*, care se obţine prin alăturarea simbolurilor lui v după ultimul simbol al lui u.
Observaţia 1.1.1 Evident operaţia de concatenare este asociativă, u(vw)=(uv)w, dar nu este
comutativă (în general uvvu) iar cuvântul vid este element neutru relativ la operaţia de
concatenare: u=u=u.
Definiţia 1.1.6 Puterea a i-a a cuvântului u, notată ui, este definită recursiv astfel:
(1) u0 =
(2) ui+1 = uiu
Definiţia 1.1.7 Lungimea unui cuvânt u, notată lg(u) sau |u|, este numărul de simboluri ale
cuvântului u şi este o aplicaţie lg: V* N .
Prin definiţie lg() = 0, fiind cuvântul format din zero simboluri.
Definiţia 1.1.8 Un cuvânt u este subcuvânt al lui v dacă şi numai dacă există cuvintele şi
astfel încât v = u. Dacă = atunci u se numeşte prefix al lui v iar dacă = atunci u se
numeşte sufix al lui v. Un subcuvânt u al lui v se numeşte subcuvânt propriu al lui v numai dacă
u{,v}.
- 12 -
3. Ce se poate spune despre structura acelor clase de limbaje care admit reprezentări finite?
Aceasta este una din principalele problemele de care ne vom ocupa în continuare.
L1={ }
L2={ a, ba, aaba, bbbb }
L3={ ap | p număr prim }
L4={ ai bi | i număr natural }
L5={ u a , b | Na(u)=Nb(u) }
*
unde Na (u) este numărul de apariţii ale simbolului a în cuvântul u. Considerăm şi limbajul vid
, care nu conţine nici un cuvânt Se observă că {} pentru că limbajul { } conţine un
cuvânt şi anume .
Limbajele L1 şi L2 fiind finite se pot reprezenta prin enumerarea cuvintelor lor pe când
limbajele L3, L4 şi L5 sunt infinite şi au fost caracterizate de o proprietate pe care trebuie să o
satisfacă toate cuvintele limbajului. O astfel de proprietate specifică este un mijloc de bază de
definire a unui limbaj infinit.
Un alt mod de a defini un limbaj infinit este de a introduce un mecanism generativ şi de a
considera cuvintele produse de acest mecanism.
Se poate, de asemenea, construi un mecanism analitic, de recunoaştere. Astfel un limbaj
se poate defini ca mulţimea tuturor cuvintelor recunoscute de un astfel de mecanism.
Mecanismele generative şi analitice se pot defini în termenii unui sistem de rescriere.
Să considerăm câteva moduri de definire ale unor limbaje în exemplele următoare.
Exemplul 4 Fie L un limbaj peste alfabetul {a, b} definit după cum urmează:
(i) λ L
(ii) Dacă x L atunci axb L
(iii) Nici un alt cuvânt nu aparţine lui L.
Vom demonstra prin dublă incluziune că limbajul L construit conform
acestor reguli este chiar limbajul L4 = { ai bi | i număr natural }.
▼
a) Demonstrăm prin inducţie relativ la k faptul că a k b k L, k N , adică că
L4L:
Din (i) =a0b0L .
Dacă akbkL prin (ii) aakbkbL adică ak+1bk+1L, deci prin inducţie
rezultă că L4L.
- 13 -
demonstrate această afirmaţie tot prin inducţie) rezultă că LL4.
Din a) şi b) rezultă că cele două limbaje sunt egale adică L4 =L .
▲
- 14 -
Definiţia 1.1.9 Un sistem de rescriere este o pereche ordonată SR=(V, F), unde V este un alfabet
şi F o mulţime finită de perechi ordonate de cuvinte peste V. Elementele (α,β) ale lui F sunt
numite reguli de rescriere sau producţii şi se notează αβ.
Un cuvânt α peste V generează direct un cuvânt β (α β) dacă şi numai dacă există
SR
Observaţia 1.1.2 Dacă este o relaţie binară pe o mulţime W , atunci închiderea reflexivă şi
tranzitivă * a relaţiei se defineşte :
(i) P*P pentru orice PW
(ii) Dacă P1*P2 şi P2P3 P1*P3
(iii) P*Q numai dacă se poate stabili prin (i) şi (ii).
Observaţia 1.1.3 De cele mai multe ori mulţimea Ax este formată dintr-un singur simbol
(simbolul iniţial) sau are o structură foarte simplă.
Să ne reamintim...
Definiţiile pentru: alphabet, simbol, cuvânt, subcuvânt, prefix, suffix,
cuvânt vid, limbaj, regulă de rescriere, sistem de rescriere, derivaţie,
axiomă.
.
- 16 -
M1.U1.4 Rezumat
Unitatea de învăţare prezintă câteva elemente introductive în teoria limbajelor
formale cum sunt: alphabet, simbol, cuvânt, subcuvânt, prefix, suffix, cuvânt vid.
Noţiunea de limbaj formal se defineşte apoi prin proprietăţi specifice cuvintelor
limbajului, printr-un sistem de generare a cuvintelor sau printr-un sistem de
rescriere. Important pentru fiecare din reprezentări ale unui limbaj este să
demonstrăm corectitudinea construcţiei, pentru care s-au prezentat, în unitatea de
învăţare, mai multe demonstraţii.
- 17 -
Unitatea de învăţare M1.U2. Algoritmi normali în sens Markov
Cuprins
M1.U2.1. Introducere.............................................................................................. 18
M1.U2.2. Obiectivele unităţii de învăţare ................................................................ 18
M1.U2.3. Algoritmi normali în sens Markov .......................................................... 18
M1.U2.4. Exemple de algoritmi normali.....................................................................19
M1.U2.5. Rezumat......................................................................................................25
M1.U2.1. Introducere
Unul din cele mai cunoscute sisteme de rescriere este algoritmul normal în sens
Markov[16]. Caracteristic pentru algoritmul normal Markov este faptul că
mulţimea de reguli este ordonată şi că regulile se aplica unui cuvânt iniţial într-o
anumită ordine.
.
Definiţia 1.1.10 Un algoritm normal în sens Markov este un sistem de rescriere SR = (V, F) unde
elementele lui F sunt date într-o anumită ordine α1β1, α2β2 , . . . , αkβk şi există o
submulţime, posibil vidă, F1F conţinând reguli sau producţii finale α.β ; la fiecare pas al
unui proces de rescriere, se aplică prima din regulile lui F care este aplicabilă, şi în plus se rescrie
cea mai din stânga apariţie a subcuvântului care este membrul stâng al regulei folosite.
- 18 -
Astfel, algoritmii normali în sens Markov posedă o proprietate specială şi anume :
pentru orice cuvânt P există cel mult un cuvânt care poate fi generat din P într-un singur
pas.
Din punct de vedere formal, α├─ β dacă şi numai dacă fiecare din următoarele condiţii
este satisfăcută.
(i) Există un număr i, 1 i k şi cuvintele α' şi α" astfel încât α=α'αiα", β= α'βiα".
(ii) Nici un cuvânt αj, j < i, nu este subcuvânt al lui α
(iii) αi apare o singură dată ca subcuvânt al lui α'αi.
Algoritmul normal reia aplicarea regulilor în ordine atâta timp cât este îndeplinita condiţia:
(iv) αiβi nu este un element al lui F1 şi unul din cuvintele α1, ..., αk este subcuvânt al lui β.
Dacă (iv) nu este îndeplinită, dar sunt îndeplinite (i)-(iii), atunci α├─*.β şi procesul de
rescriere se încheie.
Deci α├─*. β dacă şi numai dacă există α0, α1 , ..., αn astfel încât
O consecinţă imediată este lipsa ambiguităţii. Rezultă că există cel mult un singur cuvânt
β astfel încât α├─* .β .
Dacă există un astfel de cuvânt β se spune că algoritmul normal se termină cu α sau că
traduce α în β. În caz contrar algoritmul ciclează cu α.
- 19 -
Exemplul 8 Fie algoritmul cu alfabetul { a, x, y, # } şi regulile:
1. yaay
2. xaayx
3. x
4. a##x
5. #a#
6. #
7. ya
El traduce orice cuvânt de forma ai # aj cu i, j 0 în aij, deci realizează înmulţirea
a două numere.
Fie i = 2 şi j = 3. Atunci:
aa#aaa├4─ a#xaaa├2─ a#ayxaa├2─ a#ayayxa├1─ a#aayyxa├2─ a#aayyayx
( 3)
├1─ a#aayayyx├1─ a#aaayyyx a#aaayyy├4 ─ #xaaayyy├2─ #ayxaayyy
├2─ #ayayxayyy├1─ #aayyxayyy├2─ #aayyayxyyy├1─ #aayayyxyyy
├1─ #aaayyyxyyy├3─ #aaayyyyyy├5 ─ #aayyyyyy├5─ #ayyyyyy
├5─ # yyyyyy├6─ yyyyyy├7─* aaaaaa.
Exemplul 9 Trecerea de la un număr natural la succesorul său este dată de
algoritmul peste alfabetul = {a} cu mulţimea regulilor formată numai dintr-o
singură regulă:
1. a · aa.
Algoritmul transformă un cuvânt de forma ai în ai+1.
Exemplificare:
aaa ├─.aaaa
Exemplul 10 Algoritmul care calculează suma a două sau mai multe numere
este (, P) unde = {a, #} şi mulţimea regulilor P :
1. #
Acest algoritm transformă ai#aj în ai+j, ai#aj#ak în ai+j+k, etc.
Exemplificare:
a3 # a2 # a4 ├─ a5 # a4 ├─ a9
- 20 -
Exemplul 11 Modulul diferenţei a două numere: ai#aj ├─ a|i-j|
AN = (, P) unde = {a, #} şi P conţine regulile:
1. a#a #
2. #
Să calculăm modulul diferenţei dintre 4 şi 2.
AN : a4 # a2├1─ a3 # a ├1─ a2 # ├2─ a2
- 21 -
Exemplul 14 Câtul şi restul împărţirii unui număr natural la 5:
# ai ai / 5 # ai5i / 5
- 22 -
-axa 2 # a - xa 3 # a - xa 2 x # - xaxa # - x 2 a 2 # - x 2 a # y - x 2 # y 2 - x 2 # ay -
- x 2 # a 2 -zx # a 2 -z 2 # a 2 -az # a 2 -a 2 # a 2 -ax # a - xa # a - x 2 # -zx # -
-z 2 # -az # -a 2 # -a # y - # y 2 - # ay - # a 2 -a 2
sx s
sa s
s
x
y
a r
Exemplificări
a3 # a5 -a2 # xa5 -a2 # axa 4 -a2 # a2 xa3 -a2 # a3 xa2 -a2 # a 4 xa -
-a # xa 4 xa -a # axa 3 xa -a # a2 xa 2 xa -a # a3 xaxa -# xa3 xaxa -
- # axa 2 xaxa - # a2 xaxaxa - # a3 xaxa - # a 4 xa - # a5 - # ra 4 - # r 2a3 -
-#r 3a2 - # r 4a - # r 5
- 23 -
a11 # a 4 -a10 # xa 4 -a10 # a 3 xa -a 9 # xa 3 xa -a 9 # a 2 xaxa -
-a 8 # xa 2 xaxa - a 8 #axaxaxa -a 7 # xaxaxaxa -a 7 cy # axaxaxa -
a 12 # a 4 a 11 # xa 4 a 11 # a 3 xa a 10 # xa 3 xa a 10 # a 2 xaxa
a 9 # xa 2 xaxa a 9 # axaxaxa a 8 # xaxaxaxa a 8 cy # axaxaxa
ca 8 y # axaxaxa ca 8 y # a 4 ca 8 # a 4 ca 7 # xa 4 ca 7 # a 3 xa
ca 6 # xa 3 xa ca 6 # a 2 xaxa ca 5 # xa 2 xaxa ca 5 # axaxaxa
ca 4 # xaxaxaxa ca 4 cy # axaxaxa c 2 a 4 y # axaxaxa c 2 a 4 y # a 4
c 2 a 4 # a 4 c 2 a 3 # xa 4 c 2 a 3 # a 3 xa c 2 a 2 # xa 3 xa c 2 a 2 # a 2 xaxa
c 2 a # xa 2 xaxa c 2 a # axaxaxa c 2 # xaxaxaxa c 3 # saxaxaxa
c 3 # s c 3 #
Definiţia 1.1.11 Un sistem normal Post este un sistem de rescriere (V, F) unde toate elementele
(α, β) ale lui F sunt notate prin αxxβ, x fiind o variabilă operaţională. (Se presupune că x V şi
nici α nici β nu au x ca subcuvânt). Relaţia se defineşte astfel: α1β1 dacă şi numai dacă există
cuvintele α, u, β peste V\{x} astfel încât: α1=αu, β1=uβ, şi αxxβF.
Se poate şi aici specifica o mulţime de axiome şi se poate defini limbajul generat şi cel
recunoscut la fel ca mai sus.
- 24 -
pentru următoarele valori ale lui n:
a. n = 2;
b. n = 3;
c. n = 4.
Să ne reamintim...
M2.U2.5 Rezumat
Unitatea de învăţare prezintă unul din primele sisteme de rescriere,
algoritmul normal în sens Markov, în care regulile de rescriere sunt ordonate
şi se aplică la rândul lor într-o anumită ordine. Prezentarea este însoţită de
foarte multe exemple pentru înţelegerea complexităţii unei astfel de
construcţii, cât şi pentru utilizarea acestor exemple în constrcţii ulterioare.
- 25 -
Unitatea de învăţare M1.U3. Gramatici generative şi analitice
Cuprins
M1.U3.1. Introducere............................................................................................ 26
M1.U3.2. Obiectivele unităţii de învăţare .............................................................. 26
M1.U3.3. Gramatici generative şi analitice ........................................................... 26
M1.U3.4. Ierarhia lui Chomsky............................................................................. 30
M1.U3.5. Operaţii cu limbaje................................................................................ 35
M1.U3.6. Rezumat.....................................................................................................38
M1.U3.1. Introducere
Noţiunea de gramatică formală a fost introdusă de lingvistul Noam Chomsky, si
reprezintă mecanismul generativ cel mai folosit pe parcursul acestui material.
Astfel se prezintă atât gramatici generative cât şi analitice şi se demonstrează că
ele sunt într-o relaţie de dualitate, fapt care permite tratarea numai a uneia dintre
ele.
Un alt aspect important care va fi tratat este definirea unor operaţii cu limbaje ca
operaţii clasice cu mulţimi şi chiar a unor operatii specifice limbajelor.
.
- 26 -
unde VN şi VT sunt alfabete finite disjuncte SVN şi P este o mulţime finită de perechi ordonate
(u,v), astfel încât v este un cuvânt din V*, unde V=VNVT şi u este un cuvânt din V* care conţine
cel puţin o literă din VN.
Elementele lui VN formează mulţimea neterminalelor sau variabilelor, iar cele ale lui VT
formează mulţimea terminalelor; S se numeşte simbolul iniţial, iar P sunt reguli de rescriere,
producţii. De fapt o gramatică este un sistem de rescriere (V, P) numit sistem de rescriere indus
de G.
Noţiunile de derivare directă sau derivare corespund celor introduse în cadrul unui sistem
de rescriere.
Limbajul L(G) generat de G este definit de:
*
L(G)={ w| wV *, S w }
Vom introduce o noţiune duală celei de gramatică generativă şi anume cea de gramatică
analitică.
Definiţia 1.2.3 Două gramatici, G şi G1, se numesc gramatici echivalente atunci şi numai atunci
când L(G)=L(G1).
Teorema 1.2.1
Fie G = (VN, VT, S, P) o gramatică generativă (sau analitică). Fie P1 o mulţime de reguli
de forma u v dacă v u este în P. Atunci L(G1)=L(G) unde G1=(VN, VT, S, P1) este o
gramatică analitică (generativă).
- 27 -
▼ Demonstraţie:
Dacă G este o gramatică generativă vom demonstra că pentru orice cuvânt din
(VNVt)* avem
* *
(1.2.1) S S
G G1
Dacă acum u0=S vom obţine afirmaţia (1.2.1) dorită, deci L(G)=L(G1).
▲
Observaţia 1.2.1 Pentru o gramatică generativă sau analitică G, gramatica G1 definită mai sus se
va numi duala sa.
Exemplul 3 Fie G = ({S, B, C}, {a, b, c}, S, P}), unde mulţimea P este formată
din:
SaSBC
SaBC
CBBC
bBbb
bCbc
cCCc
aBab
Să încercăm o derivaţie în gramatica G:
- 28 -
Se poate demonstra că L(G)={anbncn | n1}
P: x0x1x2x3 x1x2ix1yi
x1x2 yijjyi
pentru fiecare i şi j din {0,1}
x3 yix3x2ix3
ix2x2i
Această gramatică generează limbajul L. Să încercăm o derivaţie în această
gramatică:
x0 x1x2x3 0x1y0x3 0x1x20x3 01x1y10x3 01x10y1x3 01x10x21x3
01x1x201x3 0101x3 0101
Exemplul 5 [21] Pentru limbajul L={an² | n1} vom avea următoarele reguli
gramaticale care se bazează pe identitatea n2=1+3+...+(2n-1), unde toate
simbolurile cu excepţia lui a sunt simboluri neterminale:
P: x0a
x0axx2z
x2zaa
xaaa
yaaa
x2zy1yxz
xx1x1yx
yx1y1yx
xy1x1y
yy1y1y
ax1axxyx2
x2yxy2
y2yyy2
y2xyx2
Să încercăm şi aici câteva derivaţii:
x0 axx2z axaa aaaa
x0 axx2z axy1yxz ax1yyxz axxyx2yyxz axxyxy2yxz
axxyxyy2xz axxyxyyx2z axxyxyyaa axxyxyaaa
axxyxaaaa axxyaaaaa axxaaaaaa axaaaaaaa
aaaaaaaaa = a9 = a3².
- 29 -
ⁿ
Exemplul 6 [21] ] Pentru generarea limbajului L = { a2 | n0 }vom avea
următoarele reguli gramaticale
x0yxy
yxyz
zxxxz
zyxxy
xa
y
Vom construi o derivaţie în aceasta gramatică pentru n = 2, pornind de la
simbolul iniţial x0
x0 yxy yzy yxxy yzxy yxxzy yxxxxy xxxy axxxy
aaxxy aaaxy aaaay aaaa
Definiţia 1.2.4 (Ierarhia lui Chomsky) Pentru i{0,1,2,3}, o gramatică generativă, G=(VN, VT,
S, P) este de tip i dacă şi numai dacă regulile de rescriere din P îndeplinesc restricţiile de tip (i):
(0) Nici o restrictie.
(1) Reguli dependente de context (DC): Fiecare regulă din P este de forma u1Au2u1 wu2 , unde
u1, u2V*, AVN şi w {VN VT }+ cu o singură excepţie posibilă S, care poate să
apară dacă S nu apare în dreapta nici unei reguli din P.
- 30 -
(2) Reguli independente de context (IDC): Fiecare regulă din P este de forma
A w cu A VN şi w {VN VT } *.
(3) Reguli regulate (R): Fiecare regulă este de una din următoarele două forme A aB sau
A a , unde A, BVN şi aVT.
Gramaticile de tip 1 se numesc dependente de context sau contextuale, gramaticile de tip
2 se numesc independente de context, iar gramaticile de tip 3 se mai numesc şi regulate sau cu
număr finit de stări.
Evident că orice gramatică de tip 3 este şi de tip 2, orice gramatică de tip 2 este şi de tip 1, şi
orice gramatică de tip 1 este de tip 0.
Dacă notăm cu Li familia limbajelor de tip (i) avem, evident, următoarea incluziune între
familiile de limbaje:
L3 L2 L1 L0
Se va demonstra ulterior că incluziunea este proprie, deci că prin restricţiile (0)-(3) se obţine
într-adevăr o ierarhizare a familiilor de limbaje.
Definiţia 1.5 O gramatică este cu lungime crescătoare sau monotonă dacă şi numai dacă regula
uv satisface condiţia |u| |v| cu o singură excepţie posibilă S, care, dacă apare în mulţimea
regulilor, atunci S nu apare în partea dreaptă a nici unei reguli.
Teorema 1.2.2
Pentru fiecare gramatică monotonă, G, există o gramatică dependentă de context, G’,
echivalentă cu G, adică L(G) = L(G’).
▼Demonstraţie.
Fie gramatica monotonă G=(VN, VT, S, P), în care regulile din P sunt monotone, adică de
forma uv unde |u| |v|. Presupunem că regula uv nu este dependentă de context şi că este de
forma:
A1 A2 … Am → B1 B2 … Bn
Pentru că gramatica este monotonă avem m n iar Ai şi Bi pot fi simboluri terminale sau
variabile. Presupunem că toate simbolurile Ai sunt variabile (în caz contrar înlocuim fiecare
simbol terminal Ai printr-un nou symbol neterminal Ai’ şi adăugăm regula Ai’→ Ai).
Considerăm noi variabile C1,C2, …, Cm. şi înlocuim regula iniţială uv prin mulţimea de reguli
dependente de context P(u,v):
A1 A2 … Am → C1 A2 … Am
C1 A2 … Am → C1 C2 … Am
………………………………………………
C1 C2 … Cm-1Am → C1 C2 …Cm Bm+1 Bm+2 … Bn
C1 C2 … Cm-1Cm Bm+1 … Bn → C1 C2 … Cm-1Bm Bm+1 … Bn
C1 C2 … Cm-1Bm Bm+1 … Bn → C1 C2 … Cm-2Bm-1 Bm … Bn
- 31 -
……………………………………………………………..
C1 B2 … Bn → B1 B2 … Bn
Fie acum gramatica G” = (VN {C1, C2, …, Cm}, VT, S, P\ {uv} P(u,v) ).
Este uşor de demonstrat acum că L(G) = L(G”).
Procedând de aceeaşi maniera cu fiecare regula monotonă care nu este dependentă de context se
obţine în final gramatica echivalentă G’.
▲
CB C1B
C1B C1C2
C1C2 C1C
C1C BC
Obţinem în final gramatica dependentă de context echivalentă cu G, G’= ({S,B,C,
C1, C2}, {a,b,c}, S, P’), unde P’:
S aSBC
S aBC
bB bb
bC bc
cC Cc
aB ab
CB C1B
C1B C1C2
C1C2 C1C
C1C BC.
Observaţia 1.2.3 Gramaticile din exemplele 3, 4, şi 6 sunt gramatici monotone deci, conform
teoremei 1.2.2, limbajele generate sunt dependente de context. Gramatica din exemplul 5 este o
gramatică de tip 0 (există reguli care nu sunt monotone, ca de exemplu regula x1x2),
gramatica din exemplul 8 este independentă de context iar cea din exemplul 7 este regulată sau
de tip 3.
- 32 -
Pentru gramaticile analitice definiţiile rămân aceleaşi ca şi pentru gramaticile generative,
schimbând însă membrul drept cu membrul stâng în regulile din P. Noţiunea de gramatică
generativă cu lungime crescătoare îşi are corespondentul dual în cea de gramatică analitică cu
lungime descrescătoare.
Exemplul 11 Se numeşte palindrom un cuvânt, care este identic când este citit
de la stânga la dreapta sau de la dreapta la stânga. Astfel în limba româna există
palindroamele: capac, coc, cuc, lupul, ele, etc. Notăm cu ~y reflectatul sau
oglinditul unui cuvânt y, adică cuvântul ale cărui simboluri sunt în ordine inversă
faţă de y. Limbajul { y~y | y VT* } este în mulţimea palindroamelor cu VT={a1,
..., an} şi poate fi generat de gramatica:
În exemplul anterior există regula S iar S apare şi în dreapta altor reguli. Vom arăta că
există ca pentru orice astefel de gramatică existăo gramatică echivalentă în care S nu apare în
dreapta nici unei reguli.
Teorema 1.2.3
Dacă G = (VN, VT, S, P) este o gramatică DC, atunci există altă gramatică D.C., G1, care
generează acelaşi limbaj cu G, pentru care simbolul initial (de start) nu apare în dreapta
nici unei reguli ale lui G1. Dacă G este I.D.C. sau R atunci şi G1 este I,D,C,, respectiv R.
▼ Demonstraţie :
Fie S1VNVT. Construim gramatica G1={VN{S1}, VT, S1, P1 }, unde P1 conţine toate
regulile din P şi în plus toate regulile de forma S1 unde
S P :
- 33 -
P1=P{S1 │ S P }
Observăm că S1VNVT deci nu apare în dreapta nici unei producţii din G şi nici în
dreapta vreunei producţii noi adăugate în P.
Să demonstrăm acum că L(G)=L(G1).
*
a) Presupunem că wL(G), deci există o derivaţie în gramatica G de forma S w. Atunci prima
regulă folosită este de forma S deci derivaţia va fi :
*
S w
G G
Pentru că toate regulile lui P sunt în P1 rezultă că orice derivaţie din G este şi o derivaţie în
gramatica G1 deci
*
w
G1
adică wL(G).
Evident că regulile adăugate la P pentru a obţine P1 sunt de acelaşi tip cu regulile lui P
deci dacă G este DC (IDC sau R) atunci şi G1 este DC (IDC sau R).
▲
Teorema 1.2.4
Dacă L este un limbaj DC, IDC sau R, atunci şi L şi L\{} sunt limbaje DC, IDC
respectiv R.
▼Demonstraţie : Dacă L este un limbaj DC, IDC sau R, din teorema 1.2.3 rezultă că există o
gramatică G, care poate fi DC, IDC sau R, în care simbolul iniţial, S, nu apare în partea dreaptă
a nici unei reguli de rescriere. În plus singura regulă în care membrul drept poate fi λ este de
forma S→λ.
Atunci pentru limbajul L\{} se scoate regula S→λ, iar pentru limbajul L se adugă tot
regula S→λ. Toate aceste modificări nu au nici o influenţă asupra restului cuvintelor generate de
G pentru că simbolul iniţial S nu mai apare în partea dreaptă a nici unei reguli de rescriere.
▲
- 34 -
M1.U3.5 Operaţii cu limbaje
Pentru că limbajele sunt mulţimi, rezultă că se pot folosi toate operaţiile cu mulţimi cunoscute.
Dacă (a) este un singur cuvânt ua, atunci substituţia se numeşte homomorfism h:V*V’*. Un
homomorfism se numeşte -liber dacă nici unul din cuvintele (a)=ua nu este .
Una din problemele pe care le vom studia în capitolele următoare este problema închiderii
familiilor de limbaje de tip i, Li (i = 0, 1, 2, 3) relative la operaţiile introduse.
(1) x0yxy
(2) xyyz
(3) zxxxz
- 36 -
(4) zyxxy
(5) xa
(6) y
L = {anbn | n>0}
Să ne reamintim...
Teste de evaluare/autoevaluare
I. Întrebări.
1. Ce este o gramatică generativă?
2. Câte tipuri de gramatici generative cunoaşteţi şi care sunt acestea?
II. Exerciţii propuse.
1. Se dă gramatica G=({S,A},{,,, p,q,r,„ },S, P), unde P =
{SSS, SSS, SS, SA, AA‟, Ap, Aq, Ar }.
- 37 -
Să se verifice dacă pqrpqr L(G).
2. Să se construiască o gramatică G care generază următorul limbaj:
L = {a2nbn | n>0}
- 38 -
Modulul 2. Automate finite şi limbaje de tip 3
Cuprins
Introducere ................................................................................................................ 39
Competenţe.....................................................................................................................39
U1. Automate finite şi gramatici de tip 3.......................................................................40
U2. Minimizarea automatului finit.................................................................................53
U3. Gramatici regulate şi expresii regulate.....................................................................61
U4. Expresii regulate şi automate finite..........................................................................71
Introducere
Acest modul se referă la limbajele regulate privite ca limbaje generate de gramatici
de tip 3, recunoscute de automatele finite sau reprezentate de expresii regulate. Se
demonstrează că cele trei moduri de reprezentare sunt echivalente.
Se prezintă doi algoritmi de minimizare a automatului finit, pe baza cărora se poate
construe un analizor lexical optim.
Competenţe
La sfârşitul acestui modul studenţii vor fi capabili să:
Construiască automate finite deterministe şi nedeterministe;
Construiască gramatici generative de tip3 pentru diferite limbaje;
Construiască expresii regulate pentru diferite limbaje de tip 3;
Să construiasca un mod de reprezentare(gramatica, automat finit, expresie
regultă) pornind de la alt mod de reprezentare echivalent;
Implementeze algoritmii prezentaţi într-un limbaj de programare general
- 39 -
Unitatea de învăţare M2.U1. Automate finite şi gramatici de tip 3
Cuprins
M2.U1.1. Introducere............................................................................................ 40
M2.U1.2. Obiectivele unităţii de învăţare .............................................................. 40
M2.U1.3. Automate finite ..................................................................................... 40
M2.U1.4. Legătura dintre gramaticile regulate şi automatele finite ........................ 45
M2.U1.5. Rezumat.....................................................................................................52
M2.U1.1. Introducere
Din punct de vedere istoric, automatele finite au fost introduse pentru a modela
reţelele neuronale dar au o mulţime de aplicaţii şi în alte domenii cum ar fi:
analiza lexicală (faza iniţială a unui compilator), descrierea editoarelor de texte şi a
altor programe de procesare a textelor, modelarea circuitelor logice şi altele.
În modulul 1 am definit noţiunea de limbaj regulat sau limbaj de tip 3, ca fiind limbajul generat
de o gramatică de tip 3, adică de o gramatică G=(VN,VT,S,P), unde regulile din P sunt de forma
:
- 40 -
A→aB
sau
A→a
Aici A şi B, sunt simboluri neterminale iar a este un simbol terminal.
Vom defini în cele ce urmează un sistem analitic pentru limbajele regulate şi anume automatele
finite.
Definiţia 2.1.1 Un automat finit determinist, notat M=(Q, Σ, δ, q0, F), este format din:
Q - o mulţime finită nevidă (mulţimea stărilor);
Σ - un alfabet finit de intrare;
- o aplicaţie numită funcţie de tranziţie, care ataşează fiecărei combinaţii <stare,
simbol de intrare> o nouă stare
δ:Q Σ Q;
q 0 Q starea iniţială;
F Q mulţimea stărilor finale.
Din punct de vedere practic un automat finit este format dintr-un control finit, care se poate
afla într-una din stările mulţimii Q, dintr-o bandă de intrare împărţită în celule în care sunt
scrise un număr finit de simboluri din Σ, şi un cap de citire care se mişcă pe banda de intrare
secvenţial de la stânga la dreapta (de fapt banda de intrare se mişcă în dreptul capului de citire
de la dreapta la stânga ).
Iniţial controlul finit se află în starea q0 iar capul de citire analizează cel mai din stânga
a0 a1 … ai … an …
CONTROL
FINIT
Figura 2.1.1
simbol scris pe banda de intrare. Interpretarea lui δ(q,a) p pentru q,pєQ şi aєΣ, este aceea
că automatul M, aflat în starea q şi analizând simbolul a pe banda de intrare, îşi schimbă starea
în p şi îşi mută capul de citire cu o celulă la dreapta.
S-ar putea ca funcţia de tranziţie δ să nu fie peste tot definită, adică să existe p P şi
a astfel încât δ(p,a)=. În cazul în care automatul se află în această stare p şi capul de citire
vizează simbolul a pe banda de intrare se spune că automatul se blochează fiindca nu este
definită mişcarea următoare.
Aplicaţia δ se poate extinde la Q Σ , prin δ̂ :
*
δ̂(q, λ) q
δ̂(q, xa) δ( δ̂(q, x), a) x Σ* , a Σ ,
- 41 -
unde δ̂(q, x) p înseamnă că M, pornind să analizeze secvenţa x din starea q, ajunge în starea
p în momentul în care capul de citire depăşeşte secvenţa x.
Observaţia 2.1.1 În continuare vom folosi notaţia δ şi pentru ˆ .
Definiţia 2.1.2 Un cuvânt x este acceptat sau recunoscut de un automat finit M, dacă,
δ(q 0 , x) p pentru p F .
Limbajul acceptat de automatul M se notează
T(M) x δ(q0 , x) F .
Un automat finit determinist se poate defini în termenii unui sistem de rescriere SR=(V,
P), unde :
V Q Σ, unde Q
q 0 Q starea iniţială
F Q mulţimea stărilor finale
şi P: q i a k q j , unde q i , q j Q şi a k
şi în plus pentru fiecare qiak există exact o regulă în P.
Atunci T(M) x
q 0 x p, p F .
Definiţia 2.1.3 Numim configuraţie instantanee perechea (q,x), formată din starea q Q în
care se află automatul finit şi şirul de caractere x Σ * rămas necitit pe banda de intrare, unde
capul de citire vizează cel mai din stânga simbol al lui x.
Dacă automatul finit foloseşte tranziţia δ(q,a) p , atunci vom nota modificarea
configuraţiei astfel: (q, a ) ├ ( p, ) .
Specificarea unui automat finit M se poate face prin definirea funcţiei δ (într-un tabel) sau
printr-o diagramă de stare sau de tranziţie. Diagrama de tranziţie este un graf orientat în care
nodurile sunt stările automatului iar arcele (q,p) sunt etichetate cu a dacă δ(q,a)=p este o
tranziţie din automatul M.
Exemplul 1
M (Q, Σ, δ,q 0 , F)
Fie, de exemplu, automatul finit
{0,1} , Q {q 0 , q 1 , q 2 , q 3 } , F {q 0 }
Σ
δ
0 1
q0 q1 q2
q1 q0 q3
Q
q2 q3 q0
q3 q2 q1
- 42 -
Fie şirul de intrare 10110010; atunci putem urmări execuţia automatului astfel:
δ(q 0 ,10110010) δ(q 2 ,0110010) δ(q 3 ,110010) δ(q1 ,10010)
δ(q 3 ,0010) δ(q 2 ,010) δ(q 3 ,10) δ(q1 ,0) q 0 F ,
deci 10110010 T(M) .
În mod echivalent, într-un calcul de configuraţii se scrie:
(q0,10110010) ├ (q2,0110010) ├ (q3,110010) ├ (q1,10010) ├
(q3,0010) ├ (q2,010) ├ (q3,10) ├ (q1,0) ├ (q0,λ) unde q0 F,
deci s-a obţinut din nou că 10110010 T(M) .
Se poate demonstra că automatul finit M de mai sus acceptă şirurile cu
număr par de 0 şi număr par de 1.
Definiţia 2.1.4 Un automat finit nedeterminist, notat M=(Q, Σ, δ’,q0, F), este format din Q, Σ,
q0, F – prezentate în definiţia 2.1.1, dar funcţia de tranziţie este aici
δ': Q Σ P (Q) .
Deci δ'(q, a) este o mulţime de stări şi nu o singură stare.
Şi aici δ’ se poate extinde la Q Σ astfel:
δ'(q, λ) {q}
δ'(q, xa) δ'(p, a) , x Σ , a .
pδ'(q, x)
k
δ'({p1 , p 2 ,..., p k }, x) δ'(p i , x)
i 1
Definiţia 2.1.5 Un cuvânt x este acceptat sau recunoscut de un automat finit nedeterminist M
dacă δ(q 0 , x) F , adică dacă M pornind din starea q0 şi analizând cuvântul x poate
ajunge într-o stare finală.
În termenii unui sistem de rescriere, definiţia este aceeaşi cu cea pentru un automat finit
determinist fără să existe restricţie în cazul unei reguli de forma: q i a k q j , de a fi singura
regulă cu acest membru stâng.
Limbajul acceptat de un automat finit nedeterminist este format din mulţimea
cuvintelor acceptate T(M) pentru care există o secvenţă care conduce la acceptare:
T(M) = {w | ’(q,w) ∩ F }
- 43 -
Să urmărim funcţionarea acestui automat pentru câteva situaţii diferite:
a) Dacă şirul de intrare este 0101, automatul va face toate încercările de tranziţii
posibile, înainte de a trage concluzia că acest cuvânt nu e recunoscut (nu duce
automatul într-o stare finală):
(q0,0101)├ (q0,101)├ (q0,01)├ (q0,1)├ (q0,λ) , q 0 F
(q0,0101)├ (q0,101)├ (q0,01)├ (q0,1)├ (q1,λ) , q 1 F
(q0,0101)├ (q0,101)├ (q0,01)├ (q3,1)├ blocare ( (q 3 ,1) )
(q0,0101)├ (q0,101)├ (q1,01)├ blocare ( (q 1 ,1) )
(q0,0101)├ (q3,101)├ blocare ( (q 3 ,1) )
b) Dacă şirul de intrare este 0110, automatul va accepta acest cuvînt în momentul
depistării unui calcul de configuraţii ce duce automatul într-o stare finală
(indiferent câte încercări nereuşite face, automatul acceptă şirul de intrare la
înregistrarea unui succes):
(q0,0110)├ (q0,110)├ (q0,10)├ (q0,0)├ (q0,λ) , q 0 F
(q0,0110)├ (q0,110)├ (q0,10)├ (q0,0)├ (q3,λ) , q 3 F
(q0,0110)├ (q0,110)├ (q0,10)├ (q1,0)├ blocare ( (q 1 ,1) )
(q0,0110)├ (q0,110)├ (q1,10)├ (q2,0)├ (q2,λ) , q 2 F succes !
(q0,0110)├ (q3,110)├ blocare ( (q 3 ,1) )
Ambele arată faptul că şirul de intrare poate fi citit de pe bandă ajungând într-o
- 44 -
stare finală (q2 sau q4), fiind deci recunoscut. Este suficientă găsirea uneia dintre
ele, când se stabileşte acceptarea cuvântului de către automat.
Teorema 2.2.1
Fie L o mulţime de cuvinte acceptate de un automat finit nedeterminist. Atunci există
un automat finit determinist care acceptă L.
▼ Demonstraţie:
Fie M (Q, Σ, δ, q 0 , F) un automat finit nedeterminist care acceptă L, adică
L=T(M).
Definim M' (Q' , Σ, δ' , q' 0 , F' ) un automat finit determinist după cum urmează:
Q' ≈P(Q) noile stări (M’ păstrează urma stărilor în care poate fi M la un moment dat)
Q' [q 1 , q 2 ,...,q k ] q i Q, 0 k card(Q) ;
q 0 [q 0 ] ;
F' Q', F' , conţine cel puţin o stare finală din F;
şi definim tranziţiile:
δ([q 1 , q 2 ,...,q t ], a) [p1 , p ,..., p j ] δ({q1 , q 2 ,...,q t }, a) {p1 , p 2 ,..., p j }
Deci dacă δ’ este aplicat unui element Z=[q1, q2,....,qk ] din Q', rezultatul este calculat
prin aplicarea lui δ la fiecare stare a lui Q din Z=[q1,q2,. . . ,qk ]:
δ([q 1 , q 2 ,...,q k ], a) [ p1 , p 2 ,..., p j ]
k
p l δ(qi , a), l 1, j
i 1
- 45 -
Prin definiţie,
δ([p1 , p 2 ,...,p j ], a) [r1 , r2 ,...,rk ] δ({p1 , p 2 ,...,p j }, a) {r1 , r2 ,...,rk }
Astfel,
δ(q0 , xa) [r1 , r2 ,..., rk ] δ(q 0 , xa) {r1 , r2 ,..., rk }
Pentru a completa demonstraţia mai avem de adăugat că δ(q 0 , x) F exact când
δ(q 0 , x) conţine o stare a lui Q care este în F.
Aşadar T(M)=T(M’). ▲
δ ([q 1 ],0) Φ
δ ([q 1 ],1) [q 0 , q 1 ]
δ ([q 0 , q 1 ],0) [q 0 , q 1 ]
δ ([q 0 , q 1 ],1) [q 0 , q 1 ]
- 46 -
Star 1
[q0] [q1]
t
0 1
[q0,q1]
0,1
Figura 2.2.2
Teorema 2.2.2
Fie G=(VN, VT, S, P) o gramatică de tip 3. Atunci există un automat finit nedeterminist
M (Q, Σ, δ, q 0 , F) cu T(M)=L(G).
▼ Demonstraţie:
Construim
Q VN {T}, T VN ;
q0 S;
Dacă S λ P , atunci F {S, T} şi S nu apare la dreapta nici unei
reguli; dacă S λ P , atunci F {T} ;
δ(T, a) , a VT ;
B a P
Dacă atunci T δ(B, a) ;
a VT , B VN
B aC P
Dacă atunci C δ(B, a) ;
a VT
, B, C VN
Dacă există B VN care nu apare în membrul stâng al nici unei reguli din P,
atunci δ(B, a) , a VT .
Atunci M simulează derivaţiile în G. Să arătăm că, într-adevăr, T(M)=L(G):
A 1 δ(S, a 1 )
A 2 δ(A 1 , a 2 )
- 47 -
…
A δ(A n -1 , a n )
Aşadar:
(S, a1a2…an)├ (A1, a2…an)├ …├ (An-1, an) ├ (A,λ)
L(G) T(M)
... ...
T δ(A n 1 , a n )
A n 1 a P
deci are loc derivaţia:
Teorema 2.2.3
Fiind dat un automat finit determinist M, există o gramatică G de tip 3 astfel încât
L(G)=T(M).
▼ Demonstraţie:
Presupunem M (Q, Σ, δ, q 0 , F) - automat finit determinist.
Definim o gramatică de tip 3, G (Q, Σ, q 0 , P) astfel încât:
(i) q → ap (q,a) = p
(ii) q → a (q,a) = p F
Demonstraţia este similară cu cea din Teorema 2.2.2.
În plus dacă λ T(M) atunci q 0 F şi q → λ este o regulă în G.
▲
- 48 -
Teorema 2.2.4
Clasa limbajelor de tip 3 este echivalentă cu clasa limbajelor acceptate de automatele
finite.
Observaţia 2.2.1 După unii autori clasa limbajelor acceptate de automatele finite se numeşte
clasa limbajelor regulate. Datorită teoremei anterioare (2.2.4), clasa limbajelor de tip 3 se
numeşte şi clasa mulţimilor regulate.
S 0B
B 0B
P:
B 1S
B 0
▼Construcţie:
a) Conform Teoremei 2.2.2, construim automatul finit care să recunoască
limbalul L(G), M =({S,B,A}, {0,1}, δ, S, {A}), unde:
δ(S,0) {B} δ(B,0) {A, B} δ(A,0)
δ(S,1) δ(B,1) {S} δ(A,1)
0
Start S
B 0
1
0
A
Figura 2.2.3
- 49 -
Este uşor de verificat că T(M)=L(G) este limbajul cuvintelor peste alfabetul
{0,1} care încep şi se termină cu o succesiune de cel puţin doi 0 şi orice apariţie a
simbolului 1 este urmtă de succesiuni de 0.
δ([S],0) [B]
δ([S],1) Φ
δ([B],0) [B, A]
δ([B],1) [S]
δ([A],0) δ([A],1) Φ
δ([A, B],0) [B, A]
δ([A, B],1) [S]
Observaţia 2.2.2 Gramatica G’ este mult mai complicată decât gramatica G iniţială, deşi ele
sunt echivalente şi evident că dacă pornim de la ea se poate construi un automat finit şi mai
complicat, echivalent cu automatele de mai sus.
Se pune atunci problema dacă pornind de la un automat finit nu putem micşora numărul de
stări sau dacă atunci când se implementează un automat finit nedeterminist se poate obţine o
reprezentare în memorie optimală. Această ultimă problemă este de mare importanţa in
construcţia compilatoarelor şi este abordată în [12], [14]. În continuare nu vom ocupa de prima
dintre aceste probleme, şi anume de micşorarea numărului de stări ale unui automat finit
determinist.
- 50 -
L = {0n1m | n≥0, m≥1}{1n0m | n≥0, m≥1}
Să ne reamintim...
Un automat finit determinist, notat M=(Q, Σ, δ, q0, F), este format din:
Q - o mulţime finită nevidă (mulţimea stărilor);
Σ - un alfabet finit de intrare;
- o aplicaţie numită funcţie de tranziţie, care ataşează fiecărei combinaţii
<stare, simbol de intrare> o nouă stare
δ:Q Σ Q;
q 0 Q starea iniţială;
F Q mulţimea stărilor finale.
Un automat finit nedeterminist, notat M=(Q, Σ, δ’,q0, F), este format din Q, Σ,
q0, F – prezentate în definiţia 2.1.1, dar funcţia de tranziţie este aici
δ': Q Σ P (Q) .
Deci δ'(q, a) este o mulţime de stări şi nu o singură stare.
- 51 -
Să se construiască un automat finit determinist, A’, echivalent cu
automatul dat şi să se construiască apoi o gramatică care să genereze
T(A’).
2. Fie gramatica G=({A,B},{a,b},A, P), unde P = {AAa|aB, BBb|b}.
Să se determine automatul finit (determinist sau nu) echivalent cu
gramatica G.
M2.U1.5 Rezumat
Unitatea de învăţare prezintă automatele finite deterministe şi nedeterministe şi la
legatura cu limbajele de tip3, numite şi limbaje regulate. S-au prezintat echivalenţa
dintre automatele finite deterministe şi cele nedeterministe precum şi un algoritm de
trecere de la un automat nedeterminist la unul determinist echivalent.
- 52 -
Unitatea de învăţare M2.U2. Minimizarea automatului finit
Cuprins
M2.U2.1. Introducere............................................................................................ 53
M2.U2.2. Obiectivele unităţii de învăţare .............................................................. 53
M2.U2.3. Minimizarea automatului finit ............................................................... 53
M2.U2.4. Algoritmi pentru minimizarea automatului finit .................................... 57
M2.U2.5. Rezumat.....................................................................................................61
M2.U2.1. Introducere
Prin trecerea de la un automat finit la o gramatică şi apoi de la gramatică la un
automat finit se obţin în final automate echivalente, adică automate care recunosc
acelaşi limbaj.
Problema care se pune este de a vedea dacă în mulţimea automatelor echivalente
există un cel mai mic automat, relative la numărul de stări. Respunsul este
afirmativ şi este dat în această unitate de învăţare, în care se prezintă fundamental
theoretic al acestei minimizări şi doi algoritmi de minimizare ai unui automat finit.
.
- 53 -
O relaţie de echivalenţă peste S împarte mulţimea S în clase de echivalenţă, submulţimi
x, y Si xRy .
disjuncte Si astfel încât
S S
i
i
Definiţia 2.3.2 O relaţie de echivalenţă R peste S se numeşte de indice finit dacă numărul de
clase de echivalenţă este finit.
Definiţia 2.3.3 O relaţie de echivalenţă, R, se numeşte invariantă la dreapta dacă
xRy xzRyz z S .
Vom arăta în cele ce urmează că orice automat finit induce o relaţie de echivalenţă
invariantă la dreapta de indice finit pe mulţimea şirurilor de intrare.
- 54 -
Fie Q’ mulţimea finită a claselor de echivalenţă induse de R, [x] Q' conţinând x.
Definim δ([x], a) [xa] . Definiţia e consistentă pentru că R este invariantă la
dreapta.
Fie - q 0 [λ]
- F {[x] x L}
Automatul finit M (Q, Σ, δ, q 0 , F) acceptă L pentru că
δ(q0 , x) [λx] [x] .
În concluzie, x T(M' ) [x] F' x L .
▲
Teorema 2.3.2
Automatul finit acceptând limbajul L este unic relativ la un izomorfism (o redenumire a
stărilor ) şi este dat de M’ din Teorema 2.3.1 .
▼ Demonstraţie:
Fie M acceptând L, M (Q, Σ, δ, q 0 , F) şi relaţia de echivalenţă R definită de
Teorema 2.3.1(3) .
Conform teoremei 2.3.1, orice automat finit determină o relaţie de echivalenţă R’ care
este o rafinare a lui R. Deci numărul claselor de echivalenţă induse de R’ este cel puţin cât cel
al claselor de echivalenţă induse de R. Rezultă că numărul de stări ale automatului M este
indicele relaţiei R’, şi este mai mare sau cel mult egal cu numărul stărilor lui M’ din Teorema
2.3.1 .
Aşadar, fie q Q o stare din M; x Σ astfel încât δ(q 0 , x) q . Dar q poate
fi scos din Q şi găsit un automat mai mic identificând q cu starea δ(q0 , x) , din M’.
Dacă δ(q 0 , x) δ(q 0 , y) q atunci xRy deci δ(q 0 , x) δ(q 0 , y) ,
ceea ce trebuia demonstrat.
▲
Observaţia 2.3.3 Se poate construi un cel mai mic automat care acceptă un limbaj T(M), prin
eliminarea stărilor inaccesibile şi comasarea celor redundante.
- 55 -
Stările redundante sunt determinate prin partiţionarea stărilor automatului în clase de
echivalenţă astfel încât fiecare clasă conţine stări care nu se pot distinge între ele şi este atât de
mare cât este posibil.
Definiţia 2.3.4 Fie M (Q, Σ, δ, q 0 , F) un automat finit determinist şi q1,q2 două stări
distincte. Spunem că x Σ distinge q1 de q2 dacă:
(q 1 , x) ├* (q 3 , λ)
(q 2 , x) ├* (q 4 , λ)
şi una şi numai una dintre stările q3 şi q4 este stare finală adică:
q3 F q4 F
şi q4 F q3 F.
k
Definiţia 2.3.5 Spunem că q1 şi q2 sunt k-nedistinctibile ( q1 q 2 ) dacă şi numai dacă nu
există x, cu |x| k, astfel încât x distinge q1 de q2.
Definiţia 2.3.7 O stare q este inaccesibilă dacă nu există x astfel încât (q 0 , x) ├ (q, λ) .
Definiţia 2.3.8 M este un automat redus dacă nici o stare nu este inaccesibilă şi nu există două
stări nedistinctibile.
Teorema 2.3.3
Fie M (Q, Σ, δ, q 0 , F) un automat finit determinist cu n stări. Stările q1 şi q2 sunt
nedistinctibile dacă şi numai dacă sunt (n-2)-nedistinctibile.
▼ Demonstraţie:
Implicaţia directă ("" ) este evidentă; să demonstrăm implicaţia inversă ("" ) :
a) Dacă F are 0 sau n stări demonstraţia este imediată.
b) Presupunem că 0 card(F) n.
n 2 n 3 1 0
Vom demonstra că ... .
Observăm că pentru q1,q2Q avem:
q 1 q δ(q1 , λ), δ(q 2 , λ) F sau Q \ F q1 , q 2 F sau, respectiv, F
0
(1)
k
k -1 k -1
(2) q 1 q q 1 q 2 a , δ(q1 , a) δ(q 2 , a)
0
Relaţia partiţionează Q în două clase de echivalenţă: F şi K\F.
k 1 k k 1 k
Dacă atunci este o rafinare a lui şi conţine cel puţin o clasă de
echivalenţă în plus.
- 56 -
0
Pentru că sunt cel mult n-1 stări în F sau Q\F , cel mult n-2 rafinări a lui .
k k 1 k
Aşadar, este prima relaţie pentru care .
▲
Observaţia 2.3.4 Două stări sunt distinctibile dacă ele se pot distinge pe un şir de intrare de
lungime mai mică decât numărul stărilor.
Varianta I
BI.1 Iniţializează Q’={q0} şi marchează q0 cu 0.
BI.2 Pentru qQ’ caută pQ astfel încât există un arc (q,p); marchează p cu 1+ marca
lui q (dacă p nu e marcat) şi adaugă pe q la Q’; reia pasul BI2.
Dacă qQ’ şi p astfel încât (q,p), p este marcat atunci stop.
Sau:
- 57 -
Varianta a II-a
BII.1 Iniţializează L= q0 , marchează q0.
BII.2 Dacă L e vid stop .
Dacă nu, alege primul element q din L şi îl scoate din L.
BII.3 Pentru pQ astfel încât (q,p), dacă p nu e marcat, marchează p şi adaugă p în
capul listei L. Salt la pasul BII2.
Vom arăta în continuare că automatul obţinut prin algoritmul de minimizare este
automatul cu număr minim de stări.
Teorema 2.4.1
Automatul M’ definit de algoritmul de minimizare (A) este automatul cu cel mai mic
număr de stări acceptând L(M).
▼ Demonstraţie:
Presupunem că există un automat M’’, care are mai puţine stări decât M’ şi că
L(M”)=L(M).
Pentru că fiecare clasă de echivalenţă indusă de relaţia de echivalenţă
nedistinctibilitatea, , este nevidă, rezultă că fiecare stare din M’ este accesibilă.
Pentru că M” are mai puţine stări decât M’ rezultă că w,x două cuvinte astfel încât:
(q 0 , w) ├*M” (q, λ)
(q 0 , x) ├*M” (q, λ)
unde q 0 este starea iniţială a lui M”.
Dar w şi x conduc M’ în stări diferite, deci w şi x conduc M în stări diferite, şi atunci:
(q 0 , w) ├*M (p, λ)
(q 0 , x) ├*M (r, λ) stări care sunt distinctibile, adică
y* astfel încât (p,y)F şi (r,y) F
(q0,wy)F şi (q0,xy)F
- 58 -
Exemplul 2 Să minimizăm automatul definit de următorul tabel al funcţiei de
tranzitie, unde stările finale sunt 1, 2, şi 5:
a b
0 1 2
1 3 4
2 4 3
3 5 5
4 5 5
5 5 5
0
_
1
_ _
2
_ _ _
3
_ _ _ _
4
_ _ _ _ _
5
0
X 1
X _ 2
_
X X 3
_
X X _ 4
X X X X X 5
(ii) Acum mai facem o trecere prin tabel fiindcă s-a modificat linia stării 5.
- 59 -
Vom obţine:
0
X 1
_
X 2
X X X 3
X X X _ 4
X X X X X 5
a b
0 1 1
1 3 3
3 5 5
5 5 5
Să ne reamintim...
Algoritmul se opreşte când relaţia s-a stabilizat sau când fiecare clasă de
echivalenţă cunţine un singur element.
- 60 -
M2.U2.5 Rezumat
- 61 -
Unitatea de învăţare M2.U3. Gramatici regulate şi expresii
regulate
Cuprins
M2.U3.1. Introducere .............................................................................................. 62
M2.U3.2. Obiectivele unităţii de învăţare ................................................................ 62
M2.U3.3. Gramatici de tip 3 şi expresii regulate ...................................................... 62
M2.U3.4. Algoritm de transformare a gramaticii regulate într-o expresie regulată ... 65
M2.U3.5. Rezumat.......................................................................................................70
M2.U3.1. Introducere
Cu aceste alfabete, pe care le putem chiar considera limbaje formate din cuvinte
- 62 -
de lungime 1, putem construi numeroase alte limbaje, cum ar fi:
(a) L C = mulţimea literelor şi a cifrelor;
(b) LC = mulţimea cuvintelor de lungime 2, formate din o literă urmată de o
cifră;
(c) L4 = mulţimea cuvintelor formate din exact patru litere;
(d) L* = mulţimea cuvintelor formate din oricâte litere (inclusiv cuvântul
vid);
(e) L( L C )* = mulţimea cuvintelor de lungime cel puţin 1, formate din
litere şi cifre, primul caracter fiind obligatoriu o literă;
(f) C+ = mulţimea şirurilor numerice formate din cel puţin o cifră.
Modul de reprezentare al limbajelor de mai sus sugerează un alt mod de descriere al limbajelor
de tip 3 şi anume cu ajutorul expresiilor regulate.
Există un număr de reguli algebrice pentru expresii regulate care pot fi folosite pentru a le
transforma în alte expresii echivalente, conform tabelului următor.
Tabelul 2.6.1
Regulă Descriere
r|s=s|r Alternarea este comutativă
r|(s|t)=(r|s)|t Alternarea este asociativă
(rs)t=r(st) Concatenarea este asociativă
r(s|t)=(rs)|(rt) Concatenarea este distributivă la stânga
(s|t)r=(sr)|(tr) şi la dreapta faţă de alternare
- 63 -
λr=r Cuvântul vid este element neutru pentru concatenare
rλ=r
r*=(r|λ)*
r**=r* Idempotenţa închiderii (produs Kleene)
Operatorii folosiţi pentru scrierea expresiilor regulate sunt analogi cu forma BNF de descriere
a limbajelor (sunt simboluri ale metalimbajului).
Definiţia 2.6.3 Două expresii regulate sunt egale (=) sau echivalente dacă ele reprezintă
acelaşi limbaj.
S aA | bA | cA | ... | zA | a | b | c | ... | z
A aA | bA | cA | ... | zA | 0A | 1A | ... | 9A | a | b | c | ... | z | 0 | 1 | ... | 9
şi de expresia regulată:
<literă>(<literă>|<cifră>* .
- 64 -
M2.U3.4. Algoritm de transformare a unei gramatici regulate într-o expresie regulată
Expresiile regulate pot fi utilizate în ecuaţii şi deci pot fi evaluate. De exemplu, A=aA|a este o
ecuaţie cu o expresie regulată validă.
Să rezolvăm mai întâi ecuaţiile definite doar prin ele însele. În acest sistem, ecuaţia pentru C
are soluţia:
C= a*a
Verificăm prin înlocuirea acestei soluţii în ecuaţia pentru C. Se obţine
a*a = a a*a | a,
sau altfel scris
a*a = (a a* | λ) a,
a*a = a*a.
- 65 -
care este o expresie regulată reprezentând acelaşi limbaj ca şi limbajul generat de gramatica
regulată iniţială.
c) În pasul al treilea se face substituţia înapoi pentru a rezolva mulţimea de ecuaţii. Soluţia
pentru Xn este uşor de găsit pentru că această ecuaţie este de forma X n α n X n | β 0,n şi
deci soluţia este X n α n * β 0,n . Această soluţie se poate înlocui apoi în fiecare din ecuaţiile
precedente din sistem, acolo unde apare Xn. În general, îndată ce ecuaţia pentru Xi a fost
rezolvată şi înlocuită în ecuaţiile precedente rezultă că este rezolvată şi ecuaţia pentru X i-1,
care are numai variabilele X i şi Xi-1 în membrul drept, iar Xi a fost înlocuit.
Pas 3. i 3 B b*c
A aA | bb * c | a
i2
A {a}bb * c | {a}a
S a(a * bb * c | a * a) | a
i 1
S aa * bb * c | aa * a | a
Pas 4. Soluţie: S= aa*bb*c | aa*. Limbajul reprezentat de această expresie
regulată este a b c | n, m 1 a | n 1 .
n m n
▲
- 67 -
Exemplul 2 Folosind algoritmul [EXPRESII REGULATE], să transformăm
în expresie regulată gramatica G S, A, B, C, a, b, c, S, P , unde P este
formată din regulile:
S aA
A aA
A aB
B bC
C cB
C c
▼
S aA
Pas 1. A aA | aB
B bC
C cB | c
Singura ecuaţie care nu este în formă intermediară este ecuaţia pentru
variabila C şi anume C = cB|c. Este necesar atunci pasul 2 pentru
transfomarea în formă intermediară:
S aA
Pas 2. A aA | aB
B bC
C cbC | c
Pas 3. i 4 C cbC | c
C cb * c
i3 B bcb * c
A {a}aB
i2
A a * ab(cb) * c
S aA
i 1
S aa * ab(cb) * c
Pas 4. Soluţie: S = aaa*b(cb)*c sau, echivalent, S = aaa*bc(bc)*. Limbajul
reprezentat de această expresie regulată este a (bc) | n 2, m 1 .
n m
▲
- 68 -
b. E2=(1|(10))*;
c. E3=(0|1)*011.
2. Se dă gramatica G=({P,Q,R},{0,1},P, W), unde mulţimea de reguli W =
{P0Q|1P, Q0R|1P, R 0R|1R|0}. Să se găsească expresia regulată
corespunzătoare acestei gramatici.
3. Precizaţi o expresie regulată pentru următoarele:
a. mulţimea cuvintelor peste {0,1}* unde există cel puţin o pereche de
zerouri consecutive;
b. mulţimea cuvintelor peste {0,1}* unde nu există nici o pereche de
zerouri consecutive.
4. Să se construiască câte o expresie regulată peste alfabetul {0,1} pentru
fiecare dintre limbajele următoare:
a. mulţimea cuvintelor care conţin trei de 0 separaţi de un număr impar
de 1;
b. mulţimea cuvintelor pentru care fiecare apariţie a lui 1 este urmată de
cel puţin două apariţii ale lui 0;
c. mulţimea cuvintelor care se termină în 111.
Să ne reamintim...
- 69 -
Pas 2. Aducerea în formă intermediară a sistemului de ecuaţii:
Pas 3. Rezolvarea ecuaţiilor
Pas 4. Stabilirea soluţiei
S → aA
S → bB
A → aA
A → aB
B → bA
B→b
- 70 -
Unitatea de învăţare M2.U4. Expresii regulate şi automate finite
Cuprins
M2.U4.1. Introducere ....................................................................................................... 71
M2.U4.2. Obiectivele unităţii de învăţare ........................................................................ ..71
M2.U4.3. Algoritm de construcţie a automatului finit pornind de la o expresie regulată.....71
M2.U4.4. Rezumat.................................................................................................................76
M2.U4.1. Introducere
Definiţia 2.9.1 Un automat finit nedeterminist cu λ-tranziţii este un ansamblu M=(Q, Σ, δ, q0,
F) ale cărui componente au aceleaşi semnificaţii ca la un automat finit oarecare, doar că funcţia
de tranziţie este definită astfel:
- 71 -
δ : Q Σ λ P(Q) .
Avem o λ-tranziţie între două configuraţii (p, w) ├ (q, w) dacă şi numai dacă
q δ(p,λ) , p Q, w Σ . În reprezentarea grafică, o astfel de tranziţie, practic fără citirea
benzii de intrare la acel pas, arată astfel:
λ
p q
Figura 2.9.1
Teorema 2.8.1.
Mulţimea cuvintelor recunoscute de automatele finite cu λ-tranziţii este aceiaşi cu
mulţimea cuvintelor recunoscute de automatele finite nedeterministe.
▼Demonstratie
Se arată în [5] că automatele finite nedeterministe cu λ-tranziţii sunt echivalente cu cele
fără λ-tranziţii.
Definim acum acceptarea pentru automatul cu cu λ-tranziţii după cum urmează: pentru
orice x din Σ*, automatul M acceptă x dacă există y în (Σ{λ})* astfel încât:
- M’ acceptă y relativ la definiţia acceptării unui automat finit nedeterminist;
- x este obţinut din y prin ştergerea tuturor apariţiilor simbolului λ; atunci x =
h(y), unde:
h: (Σ{λ})* → Σ*,
este homomorfismul definit de :
h(a) = a pentru a
h(λ) = λ.
În acest fel L(M) = h(L(M’)). Dar mulţimea L(M’) este regulată şi conform teoremei
2.9.11 va rezulta că şi L(M) este o muţime regulată.
▲
Algoritmul de conversie a unei expresii regulate într-un AFN este următorul:
Algoritmul 2.8.1. Construcţia unui automat finit nedeterminist cu -tranziţii pentru o
expresie regulată.
Intrare: o expresie regulată r peste un alfabet , sub forma unui arbore sintactic.
Ieşire: un AFN, N pentru limbajul L(r)
- 72 -
Metodă: construim N, parcurgând arborele sintactic de jos în sus, aplicând regulile (1) şi
(2) şi combinând automatele obţinute la fiecare nod, cu ajutorul regulei (3) unde:
pentru , construim automatul
start
i f
cu i noua stare iniţială şi f noua stare finală. Automatul va recunoaşte limbajul {}.
2. pentru a, construim automatul
start a
i f
cu i noua stare iniţială şi f noua stare finală. Automatul va recunoaşte limbajul {a}.
3. dacă N(s) şi N(t) sunt AFN pentru expresiile regulate s şi t atunci:
a) Pentru expresia regulată s|t construim următorul automat N(s|t)
N(s)
start f
i
N(t)
cu i noua stare iniţială a lui N(s|t) şi f noua stare finală. Avem _tranziţii de la i la fostele stări
iniţiale ale lui N(s) şi N(t) şi _tranziţii de la fostele stări finale ale lui N(s) şi N(t) la f. Astfel,
automatul N(s|t) recunoaşte L(s) U L(t).
b) Pentru expresia regulată st construim următorul automat N(st)
N(s) N(t)
start f
i
unde i, starea iniţială pentru N(s) a devenit starea iniţială pentru N(st) şi f starea finală pentru
N(t) a devenit starea finală pentru N(st). Starea finală pentru N(s) este identificată cu starea
iniţială pentru N(t) şi noua stare creată în N(st) îşi pierde statutul de stare iniţială sau finală.
Astfel, automatul N(st) recunoaşte limbajul L(s)L(t).
c) Pentru expresia regulată s* construim automatul N(s*)
start i
N(s) f
- 73 -
cu i noua stare iniţială şi f noua stare finală pentru N(s*). Stările iniţială şi finală pentru N(s) îşi
pierd acest statut. Astfel automatul N(s*) recunoaşte limbajul L(s)*.
Exemplul 1 Să folosim algoritmul 2.3. pentru a construi AFN N(r) din expresia
regulată r=(a|b)*abb. Arborele sintactic al expresiei regulate date este:
2 3
a
0
6
start
1 7
b
4 5
Continând acest proces, în final vom obţine automatul următor:
a
2 3
start
b 9 b
0 1 6 7 a 8 10
b
4 5
- 74 -
Toate automatele construite astfel sunt nedeterministe cu λ-tranziţii.
Teorema 2.8.1
Fiind dată o expresie regulată R, există un automat F cu număr finit de stări,
nedeterminist şi cu λ-tranziţii, care acceptă limbajul generat de R.
▼ Demonstraţie:
- se face prin inducţie în raport cu fiecare din cele trei operaţii ale expresiilor regulate.
Construcţia formală se deduce din diagramele de stare definite mai sus.
▲
Teorema 2.8.2
Fiind dat un automat cu număr finit de stări, determinist, care acceptă limbajul L, există
o expresie regulată care reprezintă limbajul L.
▼ Demonstraţie:
- se aplică algoritmul de transformare a automatului finit determinist într-o gramatică de tip
3, după care se aplică acesteia algoritmul de determinare a expresiei regulate echivalente.
▲
a. (11|0)*(00|1)*;
b. (1|01|001)*(0|00)*.
Să ne reamintim...
- 75 -
Test de evaluare a cunoştinţelor
I. Întrebări.
1. Ce legătură există între automatele finite şi expresiile regulate?
2. De la ce porneşte un algoritm de construcţie a automatului finit
pornind de la o expresie regulată şi ce tip de automate finite se
folosesc?
- 76 -
Modulul 3. Proprietăţi ale limbajelor regulate
Cuprins
Introducere ........................................................................................................... .....77
Competenţe .......................................................................................................... .....77
U1. Proprietăţi de închidere pentru limbaje regulate ............................................ .....78
U2. Lema de pompare pentru limbaje regulate.............................................................86
Introducere
Acest modul se referă la proprietăţi ale familiei limbajelor regulate care permit atât
construcţia de noi limbaje, gramatici, automate finite şi expresii regulate at şi
demonstrarea unui rezultat foarte interesant enunţat în modulul 1 şi anume: clasa
limbajele de tip 3 nu este egală cu clasa limbajelor independente de context.
Competenţe
La sfârşitul acestui modul studenţii vor fi capabili să:
Construiască automate finite deterministe şi nedeterministe pentru limbaje
compuse din mai multe alte limbaje;
Construiască gramatici generative de tip 3 nedeterministe pentru limbaje
compuse din mai multe alte limbaje;
Construiască expresii regulate nedeterministe pentru limbaje compuse din
mai multe alte limbaje;
Implementeze algoritmii prezentaţi într-un limbaj de programare general
- 77 -
Unitatea de învăţare M3.U1. Proprietăţi de închidere pentru
limbaje regulate
Cuprins
M3.U1.1. Introducere ................................................................................................ 78
M3.U1.2. Obiectivele unităţii de învăţare .................................................................. 78
M3.U1.3. Proprietăţi de închidere ale limbajelor regulate ..................................... .....78
M3.U1.4. Rezumat .................................................................................................... 85
M3.U1.1. Introducere
Vom studia o serie de proprietăţi ale limbajelor regulate dintre care o parte
importantă o formează proprităţile de închidere ale familiei limbajelor regulate la
operaţiile cu limbaje introduse în modulul 1. Pentru că limbajele de tip 3 pot fi
generate de gramatici de tip 3, recunoscute de automatele finite sau reprezentate de
expresii regulate, în demonstraţii vom folosi oricare dintre aceste reprezentări.
Teorema 2.9.1
Clasa limbajelor de tip 3 este închisă în raport cu reuniunea.
▼ Demonstraţie:
- 78 -
Demonstraţia se poate face folosind automate finite nedeterministe sau folosind
gramaticile generative de tip 3. Alegem cea de a doua variantă (prima poate constitui un
exerciţiu).
Fie L1, L2 două limbaje de tip 3 generate de gramaticile G1, G2:
G 1 (VN , VT , S1 , P1 ) , unde
L(G 1 ) L1 \ λ
(1) (1)
L(G 2 ) L 2 \ λ
(2) (2)
2
G (V N
, VT
, S 2
, P2
)
Presupunem că VN VN (în caz contrar, se poate face o redenumire a variabilelor
(1) (2)
astfel încât condiţia să fie îndeplinită fiindcă variabilele nu apar în cuvintele limbajului) şi
construim:
G 3 (VN(1) VN(2) S3 , VT(1) VT(2) , S3 , P3 ) ,
S3 VN(1) VN(2)
unde
P3 P1 P2 S3 α S1 α P1 sau S2 α P2
Dacă λ L1 L 2 atunci la mulţimea regulilor se adaugă S 3 λ (adică dacă
S1 λ P1 sau S 2 λ P2 ).
Fie w L 1 . Atunci:
w L S α *
α*
w , S3 α P3 .
w
G G G
1 1
1 1 3
Similar pentru w L 2 .
* * *
Dacă α w , α S3 , atunci α w sau α w după cum α VN VT
(1) (1) *
sau
G3 G1 G2
α VN(2) VT(2) .
*
Teorema 2.9.2
Clasa limbajelor de tip 3 este închisă în raport cu complementarea.
▼ Demonstraţie:
Să arătăm această proprietate folosind automate finite deterministe.
Fie M (Q, Σ, δ, q 0 , F) un automat finit determinist, astfel încât T(M)=L.
Fie Σ 1 Σ şi s o nouă stare ( s Q ).
Construim M 1 (Q {s}, Σ 1 , δ1 , q 0 , (Q \ F) {s}) , unde:
δ1 (q, a) δ(q,a), pentru q Q, a Σ
δ1 (q, a) s, pentru q Q, a Σ1 \ Σ
δ1 (s, a) s, pentru a Σ1
- 79 -
M1 este construit adăugând o stare “capcană” la mulţimea stărilor, stare în care automatul
intră pentru orice simbol care nu e în Σ şi rămâne în ea indifferent de simbolul de intrare citit, iar
apoi schimbând stările finale cu cele nefinale.
Un cuvânt din Σ1 \ T(M) este sau un cuvânt din Σ* de la care M nu ajunge în stare
*
finală, deci care nu e acceptat de M, adică δ(q 0 , x) Q \ F , sau este un cuvânt care conţine
simboluri din Σ 1 \ Σ şi în momentul depistării unui astfel de simbol M1 intră în starea s în care
rămâne până analizează tot cuvântul.
▲
Teorema 2.9.3
Clasa limbajelor de tip 3 este închisă în raport cu intersecţia.
▼ Demonstraţie:
Varianta 1.
Folosim pentru această demonstraţie una dintre relaţiile lui DeMorgan, din teoria
mulţimilor:
L1 L 2 L1 L 2 ,
unde L reprezintă complementara lui L.
Din teoremele 2.6.1 şi 2.6.2 rezultă deci că dacă L1 şi L2 sunt limbaje regulate, atunci şi
limbajul L1 L 2 este regulat.
Sigur ca aceasta este o demonstraţie elegantă a teoremei dar ea nun e furnizează nici un
mijloc de a construe gramatica sau automatul pentru L1 L 2 când cunoaştem gramaticile,
respectiv automatele, pentru L1 şi L2. Prezentăm in continuare o astfel de demonstraţie, care se
poate face construind un automat finit care să simuleze în paralel cele două automate M1 si M2
astfel:
Varianta 2.
Fie M 1 (Q1 , Σ1 , δ1 , q 1 , F1 ) şi M 2 (Q 2 , Σ 2 , δ 2 , q 2 , F2 ) două automate finite
deterministe. Ele acceptă mulţimile regulate T(M1) = L1, respectiv T(M2) = L2.
Presupunem că Q1 Q 2 (dacă nu, se face o simplă redenumire a stărilor fiecăruia
dintre ele, de exemplu prin renumerotare).
Putem presupune că Σ 1 Σ 2 Σ (dacă nu, creăm Σ Σ 1 Σ 2 ).
Construim automatul finit nedeterminist M3 care acceptă intersecţia L1 L 2 , după cum
urmează:
M3 = (Q1 x Q2, , 3, [q0,q1], F1 x F2), unde 3 este definit de :
Evident că automatul M3 intră într-o sare finală din F1 x F2 dacă şi M1 intră intr-o stare finală din
F1 şi M2 intră intr-o stare finală din F2.
▲
- 80 -
Din teoremele 2.6.1, 2.6.2 şi 2.6.3 rezultă că:
Teorema 2.9.4
Clasa mulţimilor regulate este o algebră booleană.
Teorema 2.9.5
Clasa mulţimilor regulate este închisă în raport cu operaţia de oglindire.
▼ Demonstraţie:
Fie un automat finit M (Q, Σ, δ, q 0 , F) . Considerăm mulţimea regulată L=T(M).
Definim automatul finit nedeterminist M’ astfel încât să funcţioneze “invers” faţă de M:
M (Q {q 0 }, Σ, δ, q 0 , F) , unde:
F {q 0 } dacă λ T(M)
sau F {q 0 , q 0 } dacă λ T(M)
având tranziţiile:
p δ(q0 , a) dacă δ(p, a) F
p δ(q, a) dacă δ(p, a) q
~
Este uşor de demonstrat acum că T(M) L (vezi şi definiţia oglindirii unui limbaj, în
capitolul I, paragraful § 1.3).
▲
Teorema 2.9.6
Clasa mulţimilor regulate este închisă în raport cu operaţia de concatenare.
▼ Demonstraţie:
Fie M 1 (Q1 , Σ1 , δ1 , q 1 , F1 ) şi M 2 (Q 2 , Σ 2 , δ 2 , q 2 , F2 ) două automate finite
deterministe. Ele acceptă mulţimile regulate T(M1), respectiv T(M2).
Presupunem că Q1 Q 2 (dacă nu, se face o simplă redenumire a stărilor fiecăruia
dintre ele, de exemplu prin renumerotare).
Putem presupune că Σ 1 Σ 2 Σ (dacă nu, creăm Σ Σ 1 Σ 2 ).
Construim automatul finit nedeterminist M3 care acceptă concatenarea T(M 1 )T(M 2 ) după cum
urmează:
M 3 (Q1 Q 2 , Σ, δ 3 , q 1 , F3 )
p δ 3 (q, a) , dacă q Q1 , p Q1 \ F1 şi δ1 (q, a) p
cu {q 2 , p} δ 3 (q, a) , dacă q Q1 , p F1 şi δ1 (q, a) p
p δ 3 (q, a) , dacă q, p Q 2 şi δ 2 (q, a) p
- 81 -
şi F2 , dacă λ L 2
F3
F2 F1 , dacă λ L 2
Automatul finit M3 astfel construit va simula pe M1 până când acesta va intra într-o stare
finală, moment în care M3 poate intra în starea iniţială a lui M2 sau poate continua să simuleze
M1. Atunci când M3 ajunge în starea iniţială a lui M2, îl va simula pe acesta din urmă până la
oprire.
Se demonstrează uşor că T(M 3 ) T(M 1 ) T(M 2 ) .
▲
Teorema 2.9.7
Clasa mulţimilor regulate este închisă în raport cu închiderea Kleene.
▼ Demonstraţie:
x λ şi δ( q 0 , λ) q 0 F3
sau
x=x1 x2…xn cu x i L , iar în acest caz sunt posibile situaţiile:
a.1) ( q 0 ,x1x2…xn)├* (p, x2…xn), p F (pentru că x 1 L ) dar în continuare nu e sigur
că automatul va conduce la acceptare (pornind din starea p cu şirul rămas).
Alegem atunci a doua variantă:
- 82 -
q 1 δ(q 0 , a 1 )
q i 1 δ(q i , a i 1 )
q m F
şi q 1 , q 2 ,...,q m Q
Atunci, pentru un anume i avem:
q i 1 q 0
sau sau δ(q i , a i 1 ) q i 1 .
δ(q i , a i 1 ) F
Teorema 2.9.8
Clasa mulţimilor regulate este închisă relativ la substituţia cu mulţimi regulate.
▼ Demonstraţie:
Fie R Σ o mulţime regulată şi pentru fiecare a Σ fie R a Δ o mulţime
regulată.
Fie f : Σ Δ o substituţie regulată, f(a)=Ra.
Pentru ca R şi Ra, pentru fiecare a din R, sunt mulţimi regulate rezultă că există câte o
expresie regulată care să le reprezinte, expresii care conţin un număr finit de opratori *, . ,sau |.
Se observă ca substituţia unei reuniuni, a unei concatenări sau a unui produs Kleene este
reuniunea, concatenarea, respectiv produsul Kleene al substituţiilor:
f(R 1 R 2 ) f(R 1 ) f(R 2 )
f(R 1 R 2 ) f(R 1 ) f(R 2 )
f(R) f(R )
Dar reuniunea concatenarea şi respectiv produsul Kleene sunt reprezentate de cei trei operatori
ai unei expresii regulate: *, . , | . Deci şi pentru două expresii regulate e1 si e2 vom avea:
f(e 1 | e 2 ) f(e 1 ) | f(e 2 )
f(e 1 e 2 ) f(e 1 ) f(e 2 )
f(e) f(e )
Folosind inducţia relativ la numărul de operatori folosiţi de expresia regulată rezultă că: dacă r
este o expresie regulată atunci f(r) este tot o expresie regulată, ceea ce trebuia demonstrat.
▲
- 83 -
h 1 (L) x h(x) L
h 1 (w) x h(x) w
h 1 (w) x h(x) w
h(a) 1
Teorema 2.9.10
Clasa mulţimilor regulate este închisă în raport cu homomorfismul şi cu homomorfismul
invers.
▼ Demonstraţie:
Deoarece h(a) e un caz particular de substituţie, Teorema 2.9.10 justifică prima cerinţă a
acestei teoreme.
Fie L un limbaj de tip 3 şi M automatul finit care recunoaşte L = T(M).
Construim un automat finit M’ pentru h-1(L) care simulează în controlul său finit
funcţionarea lui M corespunzător cu Fig.2.9.1.
a0 a1 … ai … an …
h(ai)
Fig.2.9.1
CF pt.M
- 84 -
Pentru formalizare vom considera fiecare stare a lui M’ de forma [α,q]unde α este partea
necitită din h(ai) iar q este o stare a lui M. Funcţia de tranziţie, ’, a lui M’ se defineşte astfel:
’([λ,q],a) = [h(a),q] M’ generează h(a), în memoria lui
’([bα,q], λ) = [α, (b,q)] M’ simuleză, funcţionarea lui M pe un sufix al lui h(a), în
controlul său finit.
▲
Să ne reamintim...
M3.U1.4 Rezumat
Unitatea de învăţare prezintă proprietăţile de închidere ale familiei limbajelor
regulate. . Pentru că limbajele de tip 3 pot fi generate de gramatici de tip 3,
recunoscute de automatele finite sau reprezentate de expresii regulate, în
demonstraţii s-au folosit una sau alta dintre aceste reprezentări.
- 85 -
Unitatea de învăţare M3.U2. Lema de pompare pentru limbaje
regulate
Cuprins
M3.U2.1. Introducere ............................................................................................. 86
M3.U2.2. Obiectivele unităţii de învăţare ............................................................... 86
M3.U2.3. Proprietăţi ale limbajelor regulate ........................................................... 86
M3.U2.4. Lema de pompare ................................................................................... 88
M3.U2.5. Rezumat......................................................................................................90
M3.U2.1. Introducere
Teorema 2.9.5
Toate mulţimile finite sunt limbaje de tip 3.
▼ Demonstraţie:
- 86 -
Dacă L este o mulţime finită de cuvinte, atunci L {w 1 ,..., w n } .
Arătăm întâi că pentru fiecare cuvânt w i L , există Gi o gramatică de tip 3, astfel încât
L(G i ) w i . Fie wi= a1a2. . . an. Atunci mulţimea de reguli:
S → a1A1
A1 → a2A2
.............
An-2 → an-1An-1
An-1 → an
generează cuvântul wi adică:
*
S w i
G3
Cum L este un limbaj finit, L w i , folosind Teorema 2.6.1 rezultă că L este un limbaj de
n
i 1
tip 3.
O demonstraţie echivalentă se poate face şi construind un automat finit M, astfel încât
T(M)=L.
▲
Teorema 2.9.9
Clasa mulţimilor regulate este cea mai mică clasă conţinând toate mulţimile finite şi fiind
închisă în raport cu operaţiile de reuniune, concatenare şi închidere Kleene.
▼ Demonstraţie:
În baza teoremelor anterioare, este suficient acum să demonstrăm că cea mai mică clasă
M conţinând toate mulţimile finite şi închisă la reuniune, concatenare şi închidere Kleene
conţine clasa mulţimilor regulate.
Fie L1 mulţimea acceptată de un anume automat finit,
M (q 1 ,...,q n , Σ, δ, q 1 , F)
Fie R ij mulţimea tuturor şirurilor x astfel încât δ(qi , x) q j şi dacă
(k)
R ik , R kk , R kj , R ij M
(k) (k) (k)
În concluzie, L1 este inclus în cea mai mică mulţime care conţine toate mulţimile finite şi
e închisă la reuniune, concatenare şi produs Kleene.
Implicaţia inversă este evidentă şi deci teorema este demonstrată.
▲
Consecinţa 2.9.1 Orice expresie formată dintr-un şir finit de simboluri peste Σ şi un număr finit
de operatori , , cu paranteze pentru a determina ordinea operaţiilor, este o mulţime regulată.
În plus, rezultă că orice mulţime acceptată de un automat finit determinist este de această
formă. Se obţine şi de aici un mod convenabil de a nota mulţimile regulate şi anume prin
intermediul expresiilor regulate.
Astfel următoarele mulţimi sunt reulate:
a) mulţimea cuvintelor care se pot forma cu simbolurile a,b,c se poate scrie sub forma a, b, c .
b) mulţimea cuvintelor formate din simbolurile 0 şi 1, având trei 0 consecutivi, se poate scrie sub
forma: 0,1 0000,1 .
Teorema 2.5.1
Fie L o mulţime regulată . Atunci există o constantă p , astfel încât dacă un cuvânt wL şi
|w|p atunci w poate fi scris w=xyz, unde:
- 88 -
- 0 |y| p
- xyizL, i0.
▼ Demonstraţie:
Fie M=(Q,,,q0,F) un automat finit cu n stări astfel încât T(M)=L.
Fie p=n.
Dacă wT(M) şi w n, atunci considerăm configuraţiile succesive ale lui M, în acceptarea
lui w;
cel puţin n+1 configuraţii, deci trebuie să fie cel puţin două stări identice p = qi = qj astfel
încât:
(q 0 , w) ├* (q i , w) ├* (q j , z) ├* (r, λ)
De aici rezultă că w=xw’ şi w’=yz şi deci w=xyz.
Fie j cel mai mic indice pentru care qi = qj de unde şi 0 |y| n.
Dar atunci :
(q 0 , xy i z) ├* (p, yi z) ├* (p, y i-1z) ├* …├* (p, z) ├* (r, λ)
Deci xyizT(M), i0.
Pentru i = 0 :
(q 0 , xz) ├* (p, z) ├* (r, λ) .
▲
Consecinţa 2.5.1. Clasa limbajelor de tip 3 este o subclasă proprie a clasei limbajelor
independente de context.
▼Demonstraţie.
Din ierarhia lui Chomsky rezultă ca regulile de tip 3 sunt şi de tip 2, deci familia limbajelor
regulate este inclusă în familia limbajelor de tip 2 adică independente de context
Pentru ca lema de pompare dă o caracterizare a mulţimilor regulate ea poate fi folosită şi
pentru a demonstra că limbajele care nu respectă lema de pompare nu sunt regulate.
Vom arăta că limbajul L= aibi i1 , pentru care am arătat că există o gramatică
independentă de context care sa-l genereze, nu este o mulţime regulată.
Presupunem că p astfel încât pentru wL : |w| p, w=xyz, |y|) p şi w’=xyizL.
- dacă y=aj cu ji, atunci ai+jbiT(M) , ceeace contrazice structura limbajului deci este
imposibil;
- dacă y=bj, atunci aibj+iT(M) ceeace contrazice din nou structura limbajului deci este
imposibil;
- dacă y=ajbk cu ji şi ki, atunci aibkajbiT(M) din nou imposibil
L= aibi i1 nu e o mulţime regulată pentru că nu respectă lema de pompare.
Deci există un limbaj ,L, care nu este de tip 3 dar este de tip 2, deci clasa limbajelor regulate
este o subclasă proprie a clasei limbajelor independente de context.
▲
- 89 -
Să ne reamintim...
Clasa mulţimilor regulate este cea mai mică clasă conţinând toate
mulţimile finite şi fiind închisă în raport cu operaţiile de reuniune,
concatenare şi închidere Kleene.
M3.U2.5 Rezumat
Această unitate de învăţare prezintă câteva dintre proprietăţile limbajelor regulate,
care nu sunt proprietăţi de închidere. Una dintre cele mai importante este lema de
pompare, care dă o caracterizare a mulţimilor regulate.
Conform lemei de pompare pentru mulţimi regulate, fiind dată o mulţime
regulată şi un cuvânt suficient de lung, se poate găsi un subcuvânt nevid al acestui
cuvânt care se poate repeta de oricâte ori astfel încât cuvântul obţinut prin repetare
rămâne în mulţimea regulată dată.
Această proprietate are multe aplicaţii printre care şi aceea că ne permite să
demonstrăm că anumite limbaje nu sunt regulate, prin faptul că nu respectă această
lemă.
- 90 -
Temă de control I
1. Să se construiască o gramatică de tip 3 şi un automat finit care să
genereze, respectiv să accepte limbajul:
L = {0n1m | n≥0, m≥1} {1n0m | n≥0, m≥1}
2. Fie automatul nedeterminist de mai jos:
(11|0)*(00|1)*;
- 91 -
Modulul 4. Limbaje independente de context
Cuprins
Introducere .............................................................................................................. .92
Competenţe ............................................................................................................. .92
U1. Arbori de derivaţie pentru gramatici independente de context ........................... .93
U2. Simplificarea gramaticilor independente de context.şi forme normale ............... .99
U3. Lema de pompare pentru limbaje independente de contex ............................... .115
U4. Automate push-down şi legătura lor cu gramaticile independente de context ... .121
U5. Proprietăţi de închidere ale familiei limbajelor de tip 2 .................................... .135
Introducere
Modulul 4 este dedicat limbajelor de tip 2 din ierarhia lui Chomsky, numite
limbaje independente de context. Se defineşte noţiunea de arbore de derivaţie,
noţiune foarte importantă în teoria compilării, iar apoi se introduc formele
normale: Chomsky şi Greibach, pentru gramaticile independente de context. Se
introduce aici un nou tip de automat, numit automat push-down nedeterminist, şi
se demonstrează că acest automat recunoaşte limbajele independente de context.
Competenţe
La sfârşitul acestui modul studenţii vor fi capabili să:
- Folosească noţiunile definite în descrierea limbajelor formale;
- Construiască gramatici generative şi analitice pentru diferite limbaje;
- Construiască algoritmi normali în sens Markov cu o intrare şi o ieşire
fixată.
- implementeze algoritmii prezentaţi într-un limbaj de programare general
- 92 -
Unitatea de învăţare M4.U1. Arbori de derivaţie pentru gramatici
independente de context
Cuprins
M4.U1.1. Introducere ............................................................................................. 93
M4.U1.2. Obiectivele unităţii de învăţare ............................................................... 93
M4.U1.3. Arbori de derivaţie pentru gramaticile I.D.C. .......................................... 93
M4.U1.5. Rezumat......................................................................................................98
M4.U1.1. Introducere
Limbajele independente de context sunt generate de gramaticile de tip 2 din
ierarhia lui Chomsky, adică gramatici de forma: G = ( VN, VT, S, P),unde
mulţimea regulilor P este de forma: A α,, cu A variabilă din VN, iar α un şir
format din variabile şi terminale, adică α (VN VT)*.
- 93 -
iv) dacă A1, A2, A3,….,Ak sunt toţi descendenţii direcţi ai lui A în ordine de la stânga
spre dreapta atunci : A A1A2…Ak este o regulă din P.
A A1A2…Ak
A1 A2 … Ak
b a
Fig. 3.1.1.
Pentru această gramatică, un arbore de derivaţie având frunzele a,a,b,b şi a este
cel din figura 3.1.1. Figura 3.1.1.
Definiţia 3.1.3 Se numeşte rezultat al unui arbore cuvântul format din etichetele frunzelor
citite de la stânga spre dreapta.
Conform acestei definiţii rezultatul arborelui de derivaţie din figura 3.1.1. este cuvântul
aabba.
Vom arăta mai târziu că dacă α este rezultatul unui arbore de derivaţie, atunci:
*
S α.
G
Definiţia 3.1.4 Se numeşte subarbore al unui arbore graful format dintr-un nod împreună cu
toţi descendenţii săi.
*
Exemplul 2 Fie arborele de derivaţie de mai jos. Atunci există derivaţia A ab.
G
*
a S ( A ab)
G
Figura
- 94 3.1.2.
-
Teorema 3.1.1
Fie G =(VN,VT,A,P ) o gramatică I.D.C. Atunci pentru α λ , (S α ) există un
G
arbore de derivaţie în gramatica G al cărui rezultat este α .
▼ Demonstraţie:
Vom demonstra că dacă GA=(VN,VT,A,P) atunci pentru orice A în VN avem (A α )
GA
a) Presupunem că α este rezultatul unui arbore de derivare în gramatica GA; demonstrăm prin
inducţie, în raport cu numărul de noduri care nu sunt frunze, că A α :
GA
a1) Dacă există un singur nod care nu e frunză atunci arborele arată ca în
figura 3.1.3.
A1 A2 … Ak
a2) Presupunem că α este rezultatul unui arbore A cu n noduri care nu sunt frunze şi
că rezultatul anterior este valabil pentru arbori cu cel mult n-1 noduri care nu sunt frunze.
Considerăm descendenţii direcţi ai lui A: A1,A2,…,Ak , deci (A A1….Ak P).
Dacă Ai nu e o frunză, rezultă că Ai este o variabilă, rădăcină a unui subarbore cu
rezultatul α i şi cu cel mult n-1 noduri care nu sunt frunze.
Dacă Ai este o frunză, punem Ai = α i.
Se observă că dacă j < i atunci nodul Aj şi toţi descendenţii săi se află la stânga lui Ai şi a
tuturor descendenţilor săi.
Rezultă că α = α 1 α 2…… α k .
Deoarece din ipoteza inducţiei α i este rezultatul unui subarbore cu rădăcina Ai şi cu
*
cel mult n-1 noduri care nu sunt frunze, rezultă că (Ai α i).
G
- 95 -
Deci A A1A2…Ak α1α 2 ...α k α ,
G G
*
adică (A α ).
G
b) Presupunem acum că A α . Vom arăta că există un arbore de derivaţie cu rezultatul α în
GA
A1 A2 … Ak
b2) Presupunem că A α în n paşi şi că pentru orice derivaţie a lui β3.1.4
Figura cu numărul de
GA
*
paşi mai mic decât n există o derivaţie cu rezultatul β . Fie primul pas al derivaţiei A α de
forma A A1A2…Ak. Atunci orice simbol al lui α este sau unul dintre Ai sau derivat dintr-un
Ai în cel mult n-1 paşi. Deci, există subarborii T1,T2,..,Tk de rădăcini A1,A2,…,Ak, cu rezultatele
α1 , α 2 ,...,α k atunci când Ai α i .
GA
Deci dacă la arborele din Figura 3.1.4 adăugăm subarborii Ti, obţinem:
A1 A2 … Ak
T1 T2 Tk
α1 α2 … αk Figura 3.1.5
Rezultă că arborele din Figura 3.1.5 (în care câte un arbore Tj poate fi vid, dacă Aj VT) are
rezultatul format din rezultatele subarborilor T1, …,Tk în ordine de la stânga α1α 2 ....α k α .
▲
- 96 -
S aSb
S ab
Să se construiască arbori de derivare, dacă este posibil, pentru cuvintele:
x1 = a2b2a2b2,
x2 = aababb,
x3 = babab,
x4 = aabbab.
Dacă nu este posibil să se justifice de ce.
Să ne reamintim...
a S S b
S
a
- 97 -
M4.U1.4 Rezumat
Unitatea de învăţare prezintă un mod vizual de reprezentare al unei derivaţii într-o
gramatică îndependentă de context, arborele de derivaţie. Obţinerea acestui arbore
de derivaţie este rezultatul esenţial al fazei de analiză sintactică din construcţia
compilatoarelor. În plus arborele de derivaţie este folosit pentru de monstrarea
multor rezultate privind limbajele independente de context.
- 98 -
Unitatea de învăţare M4.U2. Simplificarea gramaticilor
independente de context şi forme normale
Cuprins
M4.U2.1. Introducere ............................................................................................. 99
M4.U2.2. Obiectivele unităţii de învăţare ............................................................... 99
M4.U2.3. Simplificarea gramaticilor I.D.C. ............................................................ 99
M4.U2.4. Forme normale pentru gramatici I.D.C. . .............................................. 105
M4.U2.5. Rezumat. . ............................................................................................ 114
M4.U2.1. Introducere
Regulile independente de context sunt de forma A α,, cu A variabilă din VN, iar
α un şir format din variabile şi terminale, adică α (VN VT)*. Pentru că
membrul drept al regulei de rescriere α poate avea orice formă este greu de spus
ceva relativ la numărul de paşi şi lungimea unui cuvânt dintr-o derivaţie.
Se pot însă gasi alte forme de gramatici echivalente care pot fi folosite foarte bine
în demonstraţii sau în construcţii de limbaje independente de context. Astfel de
forme sunt forma normala Chomsky şi forma normală Greibach care se obţin
printr-o serie de transformări pornind de la o gramatică generală independentă de
context.
Vom arăta întâi cum se poate verifica dacă un limbaj generat de o gramatică I.D.C.
este vid sau nu.
Teorema 3.2.1
Există un algoritm pentru a determina dacă limbajul generat de o gramatică I.D.C. este
vid sau nu.
▼ Demonstraţie:
- 99 -
*
Fie G=(VN,VT,S,P) o gramatică I.D.C.; presupunem că S w pentru un anume
w VT* .
Considerăm un arbore de derivaţie al lui w în gramatica G. Presupunem că există un
drum în arbore cu două noduri n1 şi n2 cu aceeaşi etichetă A şi cu n2 descendentul lui n1; fie w1
şi w2 rezultatele arborilor n1 respectiv n2.
* *
Astfel, avem derivaţiile A w 1 şi A w 2 , iar w2 este un subcuvânt al lui w1.
Rezultă că w poate fi descompus în forma w=w3 w1 w4 , unde w3 sau w4 pot fi λ.
Dacă înlocuim subarborele n1 cu n2, obţinem:
*
S w 3 w 2 w 4 L(G) .
G
În această derivaţie am eliminat cel puţin un nod n1 cu eticheta A. Procesul se poate
repeta, până când în arbore nu mai există nici un drum cu două noduri cu aceeaşi etichetă.
Acest proces este finit, deoarece la fiecare pas se elimină cel puţin un nod.
Considerăm acum ultimul arbore obţinut. Dacă gramatica G are m variabile, atunci în
arborele de derivaţie nu poate exista un drum de lungime mai mare decât m, pentru că în caz
contrar un nod s-ar repeta.
În concluzie, dacă gramatica G generează vreun cuvânt, atunci există o derivaţie a unui
cuvânt a cărui arbore nu conţine nici un drum de lungime mai mare decât m. Rezultă
următorul algoritm:
Formăm o mulţime M de arbori corespunzători derivaţiilor din G, după cum urmează:
arborele format din nodul S aparţine mulţimii M;
dacă arborele A M, se adaugă arborele obţinut din A prin aplicarea unei singure reguli
dacă sunt respectate următoarele două condiţii:
arborele obţinut nu este în M;
arborele obţinut nu are drumuri de lungime mai mare decât m.
Procedeul acesta este finit, deoarece există un număr finit de paşi (numărul este
dependent doar de numărul variabilelor m şi de numărul de reguli din P).
*
În final, dacă M conţine vreun arbore al cărui rezultat este din VT , atunci L(G) este
nevid. În caz contrar, L(G) .
▲
Observaţia 3.2.1 Teorema 3.2.1 este foarte importantă în simplificarea gramaticilor I.D.C.;
însă acest rezultat nu mai este valabil pentru gramaticile D.C.
Teorema 3.2.2
Fie G=(VN,VT,S,P) o gramatică I.D.C. Atunci există o gramatică G1, echivalentă cu G,
*
astfel încât A VN , α VT astfel încât A α ( adică L(G A ) ).
*
GA
▼ Demonstraţie:
Fie A VN . Considerăm GA=(VN, VT, A, P). Conform teoremei 3.2.1, se poate
determina dacă L(GA) este vid sau nu.
Dacă L(G A ) , atunci scoatem A din VN, adică VN VN \ {A} şi scoatem din P
toate regulile care îl conţin pe A (indiferent în ce membru, stâng sau drept).
După ce eliminăm toţi neterminalii A pentru care L(G A ) , obţinem gramatica
G1=( VN1 ,VT,S,P1). Evident că L(G 1 ) L(G) . Să arătăm că L(G) \ L(G 1 ) :
- 100 -
Presupunem că există un cuvânt w L(G) \ L(G 1 ) . Atunci există o derivare
* *
S α1Aα 2 w , cu A VN \ VN1 .
Astfel, am obţinut două afirmaţii contradictorii:
*
pe de o parte, w1 VT astfel încât A w 1 (deci w 1 L(G A ) );
*
G
Teorema 3.2.3
Fie G=(VN,VT,S,P) o gramatică I.D.C., astfel încât L(G) . Atunci există
gramatica G1, echivalentă cu G, astfel încât VN1 nu conţine simboluri neutilizabile,
adică:
* *
A VN1 există o derivaţie S w 1Aw 2 w 1 w 3 w 2 cu w i VT* .
▼Demonstraţie:
Presupunem că G este o gramatică deja redusă conform Teoremei 3.2.2 (adică
A VN , L(G A ) }. Construim în continuare gramatica G1= (VN1 , VT , S, P1 ) .
Mulţimea neterminalelor VN1 se determină iterativ:
S VN1
dacă A VN1 , atunci adăugăm în VN1 toate variabilele B pentru care există în P
câte o regulă A α1 Bα 2
Procesul se opreşte când nici o nouă variabilă nu mai poate fi adăugată.
*
Fie atunci B VN1 ; în acest caz, există măcar o derivaţie B w 3 VT şi există
*
- 101 -
* *
S α1A1α1 α1α2 A 2 α2α1 α1α2 ...αk 1Bαk1αk ...α1 w1 w 3 w 2
Intrare G=(VN,VT,S,P)
1
Ieşire G1=(V N ,VT,S,P)
Intrare G=(VN,VT,S,P)
2
Ieşire G2=( VN ,VT,S,P2)
- 102 -
S A | B
P1=
B AB | Ba
A aB | bS | b
Eliminăm şi simbolurile neutilizabile:
V0= , i=1
V1= {A}={A} , i=2
V2={A} {S} , i=3
V3={A,S} V3=V2 VN ={A,S}
2
S A
P2 =
A bS
A b
▲
Lema 3.2.1
Fie G o gramatică I.D.C. Dacă S w, atunci există o derivaţie la stânga a lui w în G.
▼Demonstraţie:
Demonstraţia se face prin inducţie în raport cu numărul de paşi dintr-o derivaţie.
Pentru n = 1 S w evident;
Presupunem teorema adevărată pentru orice derivaţie cu lungimea n-1 şi fie o
derivaţie în n paşi : S α1 α 2 ... w .
Luăm în considerare simbolurile primului cuvânt derivat α 1 =A1A2…Ak; atunci
w=w1 w2…wk cu Ai wi în cel mult n-1 paşi.
Deci există o derivaţie la stânga Ai wi, pentru fiecare i 1, k .
Atunci S A1A2…Ak ... w1 w2…wk şi deci există derivaţia la stânga de forma:
S A1A2…Ak w1A2…Ak w1w2A3…Ak ... w1 w2…wk.
▲
Definiţia 3.2.3 Fie G o gramatică I.D.C. G = (VN, VT, S, P). O regulă de forma
A B P, unde A, B VN , se numeşte redenumire.
Teorema 3.2.4
Fie G o gramatică I.D.C.; atunci există gramatica G 1 G fără redenumiri.
▼Demonstraţie
Fie G = (VN, VT, S, P). Construim o nouă mulţime de producţii P1 prin includerea
tuturor producţiilor din P care nu sunt redenumiri.
- 103 -
*
Presupunem că A B pentru A, B VN ; atunci adăugăm în P1 toate regulile de
G
α i α i 1 .
G1
atunci α i , α i 1 ,...,α j au aceeaşi lungime şi, pentru că derivaţia este o derivaţie la stânga,
simbolul înlocuit în fiecare pas este pe aceeaşi poziţie. Dar atunci
α i α j1 printr-o producţie din P1 \ P .
G1
Varianta I
Pas 1 P0={ A α P nu este redenumire } , i=1
*
Pas 2 Pi=Pi-1 {A α j A B P B α j Pi 1}
- 104 -
Pas 3 Dacă Pi Pi-1 atunci i=i+1, salt la Pas 2; altfel
P1=Pi şi V N {A VN A α P1}
1
Sau
Varianta a II-a
Mai întâi, pentru fiecare A VN se construieşte RA=
B A B astfel:
Pas a R0={A} , i=1
Pas b Ri=Ri-1 {C B C P, B R i1}
Pas c Dacă Ri Ri-1 atunci i=i+1, salt la Pas a;
altfel RA=Ri .
Construcţia propriu-zisă:
Pas 1 P1
Pas 2 Fie B α P . Dacă α VN atunci salt la Pas 4 ;
altfel continuă cu Pas 3 .
Pas 3 P1 P1 A α B R A
Pas 4 P= P \ B α. Dacă P atunci salt la Pas 2 ;
altfel continuă cu Pas 5 .
Pas 5 G1=( V N , VT , S, P1 ), unde VN A A α P1
1 1
Vom arăta, în cele ce urmează, că pentru orice gramatică independentă de context, există o
gramatică echivalentă în care regulile au forme particulare, forme uşor de utilizat în
demonstraţii.
▼Demonstraţie:
Fie G o gramatică I.D.C. Din teorema 3.3.4 rezultă că există o gramatică echivalentă
G1=(VN,VT,S,P) în care nu există reguli A B, A,B VN. Deci dacă o regulă are un singur
simbol în partea dreaptă atunci el este un terminal.
Construim forma normală Chomsky în două etape:
- 105 -
Ci Bi dacă Bi VT
Atunci mulţimea variabilelor se modifică în V'N =VN {Ci | Bi VT} iar P’ va fi mulţimea
noilor reguli.
Fie G2=(V'N,VT,S,P’). Vom demonstra că L(G2)=L(G1).
a1) Din construcţia lui G2, dacă ( α β ) atunci ( α β ) şi deci L(G1) L(G2) .
G1 G2
a2) Vom demonstra prin inducţie în raport cu numărul de paşi într-o derivaţie că dacă
A w ,A VN, w VT atunci A w.
G2 G1
Dacă Ci V'N\VN atunci se poate folosi numai regula Ci ai pentru ai VT, de unde ai
= wi.
Aşadar, din construcţia lui P’ există o regulă A B1B2…Bm a lui P cu Bi = Ci dacă Ci VN şi
Bi=ai dacă Ci V’N\VN.
Pentru aceşti Ci avem derivaţiile în G2: Ci wi pentru că nu sunt mai mulţi de k paşi
G2
în derivaţie. Atunci Bi wi.
G1
Deci A w, şi în concluzie L(G2) L(G1).
G1
b) Modificăm acum G2 prin adăugarea unor noi simboluri şi a unor noi reguli şi anume:
- o regulă de forma A B1B2…Bm cu m 3, A,Bi VN se înlocuieşte cu
A B1 D1
D 1 B 2 D 2 , unde Di sunt noi variabile.
...
D m 2 B m 1 B m
Astfel rezultă G3 şi evident (A w) (A w) .
G2 G3
▲
T L*T
T L
- 106 -
L [S]
L a
L b
Să se realizeze transformarea în forma normală Chomsky.
▼ Aplicăm algoritmul ce rezultă din demonstraţia teoremei 3.3.1 :
Pas 1: Eliminăm întâi redenumirile S T . Atunci mulţimea de reguli
T L
S T S S L*T S [S]
T L * T T [S] Sa
devine:
L [S] Ta Sb
L a Tb
L b
Pas 2: Regulile aflate deja în forma normală Chomsky sunt păstrate ca atare:
L a Ta S a
L b Tb S b
S TD1
S TC1S se înlocuieste cu
S T S se înlocuieste cu D1 C1S
C
1
T LD 2
T LC 2 T se înlocuieste cu
T L * T se înlocuieste cu D 2 C 2 T
C *
2
L C 3 D 3
L C 3SC 4 se înlocuieste cu
L [S] se înlocuieste cu D 3 SC 4
C 3 [
C 4 ]
S LD 5
S LC 5 T se înlocuieste cu
S L * T se înlocuieste cu D 5 C 5 T
C *
5
T C 6 D 6
T C 6SC7 se înlocuieste cu
T [S] se înlocuieste cu D 6 SC7
C 6 [
C 7 ]
În final, gramatica în formă normală Chomsky va fi G3=(VN,VT,S,P3),
unde VN= {S, L, T} {C i | i 1,7} {D i | i 1,6} iar P3 conţine următoarele
reguli:
- 107 -
S TD1 T LD 2
D C S D2 C2T
1 1
C1 C2 *
S LD 5 T C6 D6 L C3D3
D 5 C 5 T D 6 SC7 D 3 SC 4
C * C6 [ C3 [
5
C 7 ] C 4 ]
S a Ta La
S b Tb Lb
▲
În această formă normală fiecare regulă are membrul drept începând cu un terminal,
eventual urmat de variabile.
Lema 3.3.1
Definim o A-regulă ca fiind o regulă cu A în membrul stâng. Fie G=(VN,VT,S,P) o
gramatică I.D.C. şi fie A α1 Bα 2 o regulă din P, astfel încât
{B β 1 ,B β 2 ,…,B β r} este mulţimea tuturor B-regulilor din P.
Atunci L(G)=L(G1) unde G1=(VN,VT,S,P1), în care P1 se obţine din P prin eliminarea
regulei A α1 Bα 2 şi adăugarea regulilor A1 α 1β 1α 2 , A α1β 2 α 2 ,…, A
α 1β r α 2 .
▼Demonstraţie:
Evident L(G1) L(G) căci dacă A α1 Bα 2 e folosită într-o derivaţie, atunci sigur
există i astfel încât: A α1 Bα 2 α 1β i α 2 şi deci A α 1β i α 2 .
G G G1
Lema 3.3.2
Fie G = (VN, VT, S, P) o gramatică I.D.C. şi mulţimea A-regulilor pentru care A este cel
mai din stânga simbol al părţii drepte (reguli cu recursie stângă) de forma: {A Aα 1 ,
A Aα 2 , . . . , A Aα r }.
Fie A β 1 , A β 2 ,…, A β s , restul A-regulilor din P. Fie G1=(VN {Z},VT,S,P1)
gramatica I.D.C., formată prin adăugarea variabilei Z la VN şi înlocuirea tuturor A-
regulilor cu:
(1) A βi
- 108 -
A β iZ, 1 i s
(2) Z αi
Z α iZ, 1 i r
Atunci L(G)=L(G1)
▼Demonstraţie:
Înainte de a demonstra lema să observăm că numai A-regulile generează, prin
derivarea la stânga, limbajul regulat:
{ β1 , β 2 ,...,β s}{ α1 , α 2 ,.., α r}* ,
aceasta fiind şi mulţimea generată de A-regulile lui G.
a) Fie x L(G). Dintr-o derivaţie la stânga a lui x în G putem construi o altă derivaţie a lui
x în G, după cum urmează:
De câte ori apare în derivaţia lui x în G o secvenţă de forma:
tA γ tA α j1 γ tA α j2 α j1 γ … tA α jp α jp-1 γ t β i α jp α jp-1… α j1 γ ,
G G G G G
înlocuim întreaga secvenţă cu:
tA γ t β iZ γ t β i α jpZ γ … t β i α jp.. α j2Z γ t β i α jp… α j2 α j1 γ .
G1 G1 G1 G1 G1
Rezultă o derivaţie în G1, care nu este neapărat o derivaţie la stânga. Folosind acest
rezultat ori de câte ori într-o derivaţie se folosesc reguli cu recursie stângă, rezultă că
L(G) L(G1).
b) Considerăm acum o derivaţie la stânga a lui x în G1. De câte ori Z apare într-o
derivaţie, reordonăm derivaţia astfel încât Z să fie imediat eliminat. Dacă într-o derivaţie la
stânga folosim regula Z α Z, atunci α va genera un şir terminal şi va fi folosită altă regulă
cu Z în partea stângă. Este clar că în această secvenţă α poate fi lăsat neschimbat, temporar, şi
poate fi aplicată imediat o regulă de rescriere a lui Z. Desigur, derivaţia nu va fi mai lungă
decât derivaţia la stânga. În final o regulă Z β i va fi folosită, unde β i nu are Z. Apoi
cuvintele α generate şi β pot să continue generarea normal. Rezultatul derivaţiei rearanjate
este acelaşi ca în derivaţia iniţială.
Înlocuim şirul rezultat de paşi din derivaţie care conţin variabila Z, şi anume:
tA α t β i Zγ tβ i α jp Zγ ... tβ i α jp… α j2Z γ tβ i α jp… α j2 α j1 γ
G1 G1 G1 G1
prin
tAγ tAα j1 γ tAα j2 α j1 γ ... tAα jp… α j1 γ tβ i α jp… α j1 γ
G G G G
Rezultatul este o derivaţie a lui x în G. Rezultă L(G1) L(G).
▲
▼Demonstraţie:
Fie G=(VN,VT,S,P) o gramatică în forma normală Chomsky generând limbajul L
independent de context.
Presupunem că VN = {A1,A2,…,Am}.
- 109 -
Pas I. În primul pas modificăm regulile astfel încât dacă Ai Aj γ este o regulă atunci j > i.
Aceasta se poate face în modul următor, începând cu A1 şi terminând cu Am:
Presupunem că producţiile au fost modificate astfel încât pentru orice i, 1 i
k, Ai Aj γ este o regulă numai dacă j > i.
Vom modifica acum Ak+1- regulile.
Dacă Ak+1 Aj γ este o regulă cu j < k+1, generăm o nouă mulţime de reguli,
înlocuind Aj cu partea dreaptă a tuturor Aj-regulilor conform Lemei 3.3.1. Repetând procedeul
de k-1 ori cel mult vom obţine reguli de forma Ak+1 Al γ cu l k+1. Regulile cu l = k+1
sunt acum înlocuite în conformitate cu Lema 3.3.2, introducând noi variabile Zk+1.
Repetând procedeul pentru fiecare variabilă vom avea reguli de forma:
Ak Al γ l > k
Ak a γ a VT
Zk γ γ (VN {Z1,Z2,…,Zm})*.
Pas II. Observăm că pentru Am membrul drept trebuie să înceapă cu un terminal. Partea
dreaptă a oricărei Am-l reguli este sau Am sau un terminal. Când este Am, putem genera noi
reguli înlocuind Am cu membrul drept al unei Am-reguli conform cu Lema 3.3.1. Atunci aceste
reguli trebuie să aibă membrul drept începând cu un terminal. Continuăm de această manieră
cu Am-2,…,A1 până când membrul drept al fiecărei reguli pentru un Ai, începe cu un terminal.
Pas III. La un ultim pas, examinăm regulile pentru noile variabile Z1,Z2,…,Zm. Aceste reguli
încep sau cu un simbol terminal sau cu o variabilă originală. Astfel încă o aplicare a Lemei
3.3.2 completează demonstraţia.
▲
5) A 3 a
▼Rezolvare:
3) A 2 b
4) A A A A
3 2 3 2
5) A 3 a
După înlocuirea lui A1 în regula 4, se vede că trebuie reaplicată Lema
3.3.1, deoarece A3-regula 4' obţinută anterior are în membrul drept primul simbol
- 110 -
pe A2, tot de indice inferior, necesitând înlocuirea acestui prim simbol cu ajutorul
A2-regulilor (adică regulile 2 şi 3). Se înlocuieşte deci regula 4' cu regulile
{4'',4'''}:
1) A1 A 2 A 3
2) A A A
2 3 1
3) A 2 b
4)A 3 A 3 A1 A 3 A 2
4)A 3 bA3 A 2
5) A a
3
A 2 b
A 3 bA 3 A 2 Z 3
A aZ
3 3
A 3 bA 3 A 2
A 3 a
Z A A A
3 1 3 2
Z 3 A1A 3 A 2 Z 3
Astfel, toate regulile au ajuns de forma Ai Aj γ , cu j > i.
A 2 bA 3 A 2 Z 3 A 1
A aZ A
2 3 1
A2-reguli:
A 2 bA 3 A 2 A 1
A aA
2 1
2
A b
Similar, pentru A1-reguli, se înlocuieşte setul de A2-reguli în apariţiile din
membrii drepţi, obţinând:
A 1 bA 3 A 2 Z 3 A 1 A 3
A aZ A A
1 3 1 3
A1-reguli:
A 1 bA 3 A 2 A 1 A 3
A aA A
1 1 3
A 1 bA 3
Astfel, toate regulile au ajuns să aibă membrul drept începând cu câte un
terminal.
- 111 -
Pas III. Pentru noua variabilă Z3 introdusă, Z3-regulile trebuie aduse şi ele la
aceeaşi formă cu celelalte (membrul drept să înceapă cu un terminal).
Regula Z 3 A 1 A 3 A 2 se înlocuieşte cu setul de reguli de mai jos (A1 se
înlocuieşte folosind A1-regulile existente):
Z 3 bA 3 A 2 Z 3 A 1 A 3 A 3 A 2
Z aZ 3 A 1 A 3 A 3 A 2
3
(*) Z 3 bA 3 A 2 A 1 A 3 A 3 A 2
Z aA 1 A 3 A 3 A 2
3
Z 3 bA 3 A 3 A 2
Z 3 bA 3 A 2 Z 3 A 1 A 3 A 3 A 2 Z 3
Z aZ 3 A 1 A 3 A 3 A 2 Z 3
3
(**) Z 3 bA 3 A 2 A 1 A 3 A 3 A 2 Z 3
Z aA 1 A 3 A 3 A 2 Z 3
3
Z 3 bA 3 A 3 A 2 Z 3
- 112 -
2. Considerăm gramatica G = ({S, T, L},{a, b, +, -, x, /, [, ]}, S, P) unde
mulţimea P este formată din regulile:
cuvântul a + [a x b – b / a]
Să ne reamintim...
Forma normală Chomsky
Orice limbaj I.D.C. poate fi generat de o gramatică în care toate
regulile sunt de forma A BC sau A a, cu A,B,C VN şi a VT.
- 113 -
2. Fie gramatica G = ({x1, x2, x3},{a, b}, x1, P) cu regulile:
(a) x1 x2 x3
(b) x2 x3 x1 | b
(c) x3 x1 x2 | a
Să se determine o gramatică echivalentă cu G care este în formă
normală Greibach.
M2.U2.5 Rezumat
Unitatea de învăţare prezintă o serie de transformări care pot fi făcute asupra
gramaticilor indeprndente de context, fără a schimba limbajul generat, astfel încât
membrul drept al unei reguli de rescriere să semene cu cel al regulilor te tip 3. Asfel
în forma normală Chomsky membrul drept are lungimea 2 sau 1 iar în forma
normală Greibach membrul drept începe cu un terminal. Deşi prin aceste
transformări numărul variabilelor gramaticii iniţiale şi cel al regulilor creşte foarte
mult, aceste forme normale sunt deosebit de utile în demonstraţii, aşa cum vom
vedea în continuare.
- 114 -
Unitatea de învăţare M4.U3. Lema de pompare pentru limbaje
independente de context
Cuprins
M4.U3.1. Introducere ........................................................................................... 115
M4.U3.2. Obiectivele unităţii de învăţare ............................................................. 115
M4.U3.3. Lema de pompare pentru limbaje I.D.C. ............................................... 115
M4.U3.4. Rezumat....................................................................................................120
M4.U3.1. Introducere
În unitatea de învăţare M4.U3 am arătat că se pot elimina dintr-o gramatică acele
reguli care nu conduc la cuvinte terminale. De fapt, se poate face mai mult. Putem
testa dacă un limbaj generat de un neterminal este finit sau nu şi să eliminăm acele
variabile (cu excepţia simbolului iniţial al gramaticii) din care se poate genera
numai un număr finit de cuvinte.
.
▼Demonstraţie:
Fie G=(VN,VT,S,P) o gramatică I.D.C. în formă normală Chomsky, pentru L. Dacă G
are k variabile, atunci fie p=2k-1 şi q=2k. Este uşor de observat că, pentru o gramatică în formă
normală Chomsky, dacă un arbore de derivaţie nu are drumuri de lungime mai mare decât j,
- 115 -
atunci cuvântul derivat nu este mai lung decât 2j-1, această valoare reprezentând maximul de
frunze într-un astfel de arbore (binar, datorită formei Chomsky).
Subarborele T1, cu rădăcina n1, reprezintă derivaţia unui subcuvânt de lungime cel
k
mult 2 (şi deci de lungime cel mult q), pentru că în T1 nu există nici un drum de lungime mai
mare decât k+1, din cauză că R a fost drumul cel mai lung.
- 116 -
a)
A
Legendă: drum R
B C
B A n B A
1
b B C b a
b B A n
2
b a
b) c)
A n
1
A n
2
B C
a
b B A n
2 Figura 3.4.1
b a
Teorema 3.4.2
Există un algoritm pentru a determina dacă o gramatică G generează un număr finit
sau infinit de cuvinte.
▼Demonstraţie:
Fie p şi q constantele definite în Teorema 3.4.1. Deci dacă z L(G) şi | z | > p, atunci z
poate fi scris ca uvwxy, unde pentru fiecare i 0, uviwxiy L şi deasemenea | v | + | x | > 0.
Deci dacă există un astfel de cuvânt atunci L(G) este infinit.
Presupunem că L(G) este infinit. Rezultă că există cuvinte de lungime arbitrară deci şi
cuvântul z, cu | z | > p+q. Acest cuvânt poate fi scris ca uvwxy cu | vwx | < q şi | v |
+ | x | > 0 şi, conform teoremei de pompare,
Dacă | uwy | > p+q atunci repetăm procedura până găsim un cuvânt în L de lungime l
cu p < l p+q.
p < l p+q.
- 117 -
Se poate testa dacă există un cuvânt de lungime mai mare decât p şi de cel mult p+q,
construind toţi arborii de derivaţie care conţin numai drumuri de lungime p+q şi verificând
condiţia.
Deci dacă există un arbore cu un drum cu lungime mai mare decât p, atunci rezultă că
L este infinit (unde p=2k ).
▲
Observaţia 3.4.1 Teorema 3.4.1 se poate aplica pentru a demonstra că L={ak bkck |
k 0} nu este I.D.C.
▼Demonstraţie:
Să presupunem, prin absurd, că limbajul L este I.D.C., ceea ce ar însemna că sunt
îndeplinite consecinţele Teoremei 3.4.1., care permit "pomparea" anumitor subcuvinte din
interiorul unor cuvinte suficient de lungi ale limbajului L.
Se observă, însă, că indiferent de lungimea cuvintelor alese din L, ele fiind de forma z
= akbkck (k 0), nu este posibilă alegerea vreunei descompuneri de forma z=uvwxy cu
proprietăţile specificate în teorema amintită şi astfel încât uv i wx i y L .
z=u(vwx)y v w x Motiv uv wx z L
i i
- 118 -
subcuvinte formate dintr-unul din cele trei simboluri), iar ordinea caracterelor în cuvânt este
strict alfabetică (deci nu se pot multiplica subcuvinte formate din "îmbinarea" a două
simboluri distincte, ab sau bc, căci se amestecă).
Rezultă că {akbkck | k 0}L1 \ L2 deci clasa limbajelor independente de context este
diferită de cea a limbajelor dependente de context:
L1 L2 .
▲
Teorema 3.4.3
Fiind dată o gramatică I.D.C., G1, se poate găsi o gramatică echivalentă G2, pentru
care, dacă A este o variabilă în G2 alta decât simbolul iniţial, atunci există o infinitate
de cuvinte iniţiale derivate din A.
▼Demonstraţie:
Dacă L(G1) este finit atunci L={u1,u2,…,un} şi putem considera G2 cu mulţimea
regulilor P2={S ui | i=1,n}.
Dacă L(G1) este infinit, G1=(VN,VT,S,P1), considerăm pentru fiecare A VN gramatica
GA=(VN,VT,S,P1). Prin Teorema 3.4.2 se poate determina dacă L(GA) este finit sau nu.
Presupunem că A1,A2,…,Ak sunt variabilele care generează o infinitate de cuvinte şi că
B1,B2,…,Bm sunt variabilele care generează un număr finit de cuvinte.
Creem mulţimea de reguli P2 din P1 în modul următor:
Presupunem că C0 C1C2…Cr este o regulă din P1, iar C0 {A1,A2,…,Ak}. Atunci
regula C0 u1u2…un este o regulă din P2, unde:
1. Dacă Ci VT ui=ci
2. Dacă Ci {A1,A2,…,Ak} ui=ci
3. Dacă Ci {B1,B2,…,Bm} ui este unul din cuvintele (în număr finit) generate
de ci (ci ui).
Rezultă că P2 nu conţine nici o regulă cu Bi la dreapta.
' '
Considerăm acum G2=( VN ,VT,S,P2) unde VN ={A1,A2,…,Ak}. Observăm că S trebuie
'
să aparţină lui VN pentru că L(GS) este infinit.
*
a) Evident, dacă ( α β ) atunci (α β ) deci L(G1) L(G2).
G2 G1
Rezultatul este evident pentru o derivaţie într-un pas. Presupunem că este adevărat
pentru o derivaţie în cel mult j paşi. Considerăm o derivaţie în j+1 paşi şi presupunem că
prima regulă folosită este Ai C1C2…Cr .
Putem astfel scrie w sub forma w1 w2…wr unde Ci wi , 1 i r.
G1
- 119 -
Deci A u1u2…ur w1 w2…wr .
G2 G2
▲
Exemplul 2 Fie gramatica G=({S,A,B},{a,b,c,d},S,P), unde P={S ASB,
S AB, A a, A b, B c, B d}). Să aplicăm Teorema 3.4.3.
▼Rezolvare:
Variabilele A şi B generează numai cuvintele a şi b respectiv c şi d, dar S
generează o infinitate de cuvinte. Atunci se construieşte G2=({S},{a,b,c,d},S,P2),
mulţimea regulilor fiind:
P2 : S aSc S ac
S aSd S ad
S bSc S bc
S aSd S bd
▲
Să ne reamintim...
- 120 -
Unitatea de învăţare M4.U4. Automate push-down şi legătura lor
cu gramaticile independente de context
Cuprins
M4.U4.1. Introducere ........................................................................................... 121
M4.U4.2. Obiectivele unităţii de învăţare ............................................................. 121
M4.U4.3. Automate push-down ........................................................................... 122
M4.U4.4. Legătura dintre automate push-down şi gramatici de tip 2 .................... 126
M4.U4.5. Rezumat ............................................................................................... 132
M4.U4.1. Introducere
Vom introduce un nou tip de dispozitiv care să accepte limbajele I.D.C., numit
automat push-down.
Într-o astfel de stivă, intrarea şi ieşirea unui simbol se face numai la capul stivei.
Când un simbol intră în stivă, simbolul care anterior a fost capul stivei devine al
doilea, cel care a fost al doilea devine al treilea ş.a.m.d. În mod similar, când un
simbol este scos din stivă, simbolul care anterior acestei scoateri era al doilea,
ajunge în capul stivei, cel care era al treilea devine al doilea ş.a.m.d.
- 121 -
M4.U4.3 Automate push-down
ai … Banda de intrare
Z0
Figura 3.6.1
- 122 -
I. - tranziţie cu simbol de intrare: în funcţie de simbolul de intrare, de capătul stivei şi de
starea controlului finit, sunt posibile anumite mişcări care constau fiecare din: o nouă stare a
controlului finit şi un şir (posibil vid) de simboluri care înlocuieşte capul stivei. După alegerea
unei mişcări posibile, dispozitivul avansează cu un simbol pe banda de intrare.
II. - "λ-tranziţie" : este similară cu mişcarea tip I., dar nu e utilizat nici un simbol de
intrare.
- 123 -
Exemplul 2 În exemplul anterior, automatul push-down acceptă limbajul
~ | w {0,1} } prin memorie vidă. Să descriem formal acest automat.
{ wcw
▼
M=({q1,q2},{0,1,c},{R,A,V},δ,q1,R, )
Observaţia 3.6.1 Automatul din Exemplul 3.6.2 este determinist pentru că are o singură
posibilitate de mişcare la fiecare pas.
1, A → λ
λ, Z0 → λ
r 1, A → λ
s
λ, Z0 → λ
Figura 3.2.2
- 124 -
Definiţia 3.6.2 O configuraţie instantanee este o pereche (q, γ) , unde q Q şi γ ,
*
unde cel mai din stânga simbol al lui γ este vîrful stivei push-down, iar γ reprezintă
conţinutul stivei.
Dacă a Σ {λ} , γ, β Γ , Z Γ şi (p,β) δ(q,a, Z) , atunci scriem:
*
avem:
ai : (qi,γi)├ M (qi+1,γi+1) i 1, n ,
atunci scriem:
*
a1… an : (q1,γ1)├ M (qi+1,γi+1)
Similar, se poate folosi descrierea instantanee, constituită din tripletul q, aw, Zα şi
atunci scriem:
q, aw, Zα ├ M (p,w,βα) dacă (p, β) δ(q,a, Z) .
Definiţia 3.6.3 Limbajul acceptat prin stări finale de către automatul M este
L(M) {w w Σ* , (q 0 , w, Z0 ) ├ *M p, λ, γ , γ Γ* , p F}.
Definiţia 3.6.4 Limbajul acceptat prin stivă vidă de către automatul M este
N(M) {w w Σ* , (q 0 , w, Z0 ) ├ *M p, λ, λ , p Q} .
▼
M=({q1,q2},{0,1},{z0,A,B},δ,q1,Z0, )
- 125 -
(q 2 , λ, Z 0 ) ├ M
├ M (q 2 , λ, λ) ,
Observaţia 3.6.2
Teorema 3.7.1
Un limbaj L este acceptat prin stivă vidă de către un automat push-down M1, (L=N(M1)
) dacă şi numai dacă el este acceptat prin stări finale de către un automat push-down
M2, ( L=N(M2) ).
▼Demonstraţie:
- 126 -
1) (q 0 , Z 0 X) δ(q 0 , λ, X)
2) δ(q, a, Z) δ(q, a, Z) , q Q, a Σ λ, Z Γ
3) Pentru toţi q F, Z Γ {X} q λ , λ δ(q, λ, Z)
4) Pentru toţi Z Γ {X} q λ , λ δ(q λ , λ, Z)
Regula 1) îl face pe M1 să intre în configuraţia iniţială a lui M2, dar simbolul iniţial al
stivei este X. Regula 2) simulează pe M2 până când intră într-o stare finală. Regulile 3) şi 4)
golesc stiva când M2 intră într-o stare finală.
Se observă că regulile 2) pot goli stiva lui M2 şi pentru un cuvânt care nu este în T(M2),
iar acesta este motivul pentru care M1 are propriul său simbol iniţial al stivei, X.
Să demonstrăm echivalenţa celor două automate:
b) Dacă w N(M 1 ) , atunci se vede că stiva este complet ştearsă numai dacă sunt aplicate
regulile 3) şi 4), deoarece regulile lui M2 nu pot şterge pe X. Aşadar, este necesar ca M2 să
intre într-o stare finală cu aceeaşi intrare ca M1, ca să poată fi aplicate reguli de tip 3 şi 4.
Teorema 3.7.2
Dacă L este un limbaj independent de context, atunci există un automat push-down M
astfel încât L=N(M).
▼Demonstraţie:
Fie o gramatică independentă de context G=(VN,VT,S,P) în formă normală Greibach,
astfel încât L=L(G). Presupunem că λ L(G) (demonstraţia se poate adapta şi pentru cazul
contrar).
- 127 -
Construim M= ({q 1 }, VT , VN , δ, q 1 , S, ) , unde δ(q 1 , a, A) conţine (q 1 , γ) pentru
fiecare regulă A aγ P .
Pentru a arăta că L(G)=N(M), observăm că:
Teorema 3.7.3
Dacă L este acceptat prin stivă vidă de către un automat push-down M (L=N(M)),
atunci L este un limbaj independent de context.
▼Demonstraţie:
Fie M un automat push-down, M= (Q, Σ, Γ, δ, q 0 , Z 0 , ) .
Definim gramatica G= (VN , Σ, S, P) , unde:
VN {[q, A, p] q, p Q, A Γ} {S}
iar P este definit după cum urmează:
S [q 0 , Z 0 , q] pentru q Q
-pentru fiecare tranziţie (q 1 , B1 B 2 ...Bm ) δ(q, a, A) se generează un set de reguli în
gramatică, astfel:
q 2 ,...,q m , p Q [q, A, p] a[q 1 , B1 , q 2 ][q 2 , B 2 , q 3 ]...[q m , B m , p] P
Dacă m=0, atunci q1=p, (p, λ) δ(q,a, A) şi apare doar regula [q, A, p] a P .
Regulile au fost astfel definite încât să simuleze funcţionarea lui M cu intrarea x. În
particular, variabilele gramaticii G corespund simbolurilor memoriei push-down când M a
văzut din şirul de intrare exact atât cât a derivat gramatica G.
Se demonstrează că L(G)=N(M) prin inducţie relativ la numărul de paşi dintr-o
derivaţie a lui G, respectiv numărul de mişcări ale lui M, adică:
[q, A, p]
*
x (q, x, A) ├ *M (p, λ, λ)
(3.7.3)
G
Luând apoi q=q0 şi A=Z0, rezultă următoarele:
[q , Z , p]*
x (q 0 , x, Z0 ) ├ *M (p, λ, λ)
0 0
G
Dar prima regulă din G este S [q 0 , Z 0 , p] pentru p Q , de unde rezultă:
*
S x x N(M) .
G
Rămâne doar să demonstrăm echivalenţa (3.7.3):
- 128 -
I. Să arătăm prin inducţie în raport cu i că
(q, x, A) ├ (p, λ, λ) [q, A, p] x ,
i
i
M
G
a. Dacă i=1,
definitia δ
(q, x, A) ├ (p, λ, λ) (p, λ) δ(q,x, A)
*
rezultă că [q, A, p] ay1 y 2 ...yt .
G
II. Reciproc, se arată că [q, A, p]
*
x (q, x, A) ├ *M (p, λ, λ) , prin inducţie relativ la
G
lungimea unei derivaţii (demonstraţia este similară celei de mai sus).
- 129 -
Exemplul 1 Fie automatul push-down:
M= ({q 0 , q 1 ),{0,1}, {X, Z 0 }, δ, q 0 , Z 0 , )
δ(q0 ,0, Z 0 ) {(q 0 , XZ 0 )} δ(q1 ,1, X) {(q 1 , λ)}
unde δ(q ,0, X) {(q , XX)}
0 0
δ(q1 , λ, X) {(q 1 , λ)}
δ(q ,1, X) {(q , λ)} δ(q1 , λ, Z 0 ) {(q 1 , λ)}
0 1
Să se construiască gramatica echivalentă acestui automat.
▼ Conform demonstraţiei teoremei 3.7.3, construim G=(VN, ,S,P) care
generează chiar limbajul N(M) astfel:
VN {S,[q 0 , X, q 0 ], [q 0 , X, q1 ], [q 1 , X, q 0 ], [q 1 , X, q1 ],
[q 0 , Z 0 , q 0 ], [q 0 , Z 0 , q1 ], [q 1 , Z 0 , q 0 ], [q 1 , Z 0 , q1 ]}
S [q 0 , Z 0 , q 0 ]
S [q , Z , q ]
0 0 1
[q 1 , X, q 1 ] 1
[q , X, q ] λ
1 1
1 0 1] λ
[q , Z , q
În final, putem urmări şi elimina regulile inutile şi, de asemenea,
simbolurile neterminale neutilizabile, obţinând următoarea variantă redusă:
VN {S, [q 0 , X, q1 ], [q 1 , X, q1 ], [q 0 , Z 0 , q 1 ],[q 1 , Z 0 , q1 ]}
S [q 0 , Z 0 , q1 ]
[q , Z , q ] 0[q , X, q ][q , Z , q ]
0 0 1 0 1 1 0 1
[q 1 , X, q1 ] λ
[q , Z , q ] λ
1 0 1
▲
Observaţia 3.7.1 Din teoremele 3.7.1, 3.7.2 şi 3.7.3 rezultă că următoarele afirmaţii sunt
echivalente:
i) L este un limbaj independent de context;
ii) L=N(M1) pentru un automat push-down M1 nedeterminist;
- 130 -
iii) L=T(M2) pentru un automat push-down M2 nedeterminist.
- 131 -
Să ne reamintim...
Un automat push-down nedeterminist, M, este asemănător cu un automat
finit dar conţine în plus şi o memorie de tip stivă.
Limbajul acceptat prin stări finale de către automatul M este
L(M) {w w Σ* , (q 0 , w, Z0 ) ├ *M p, λ, γ , γ Γ* , p F}.
Limbajul acceptat prin stivă vidă de către automatul M este
N(M) {w w Σ* , (q 0 , w, Z0 ) ├ *M p, λ, λ , p Q} .
M4.U4.5 Rezumat
Unitatea de învăţare prezintă un alt tip de automat , automatul push-down cu
varianta deterministă şi cu cea nedeterministă şi legatura dintre automatele
push-down nedeterministe şi gramaticile de tip 2.
Spre deosebire de automatele finite, la automatele push-down cele două
variante nu sunt echivalente, automatele push-down deterministe
recunoscând o subclasă proprie a limbajelor Independente de context numită
clasa limbajelor deterministe. Aceasta clasă a limbajelor deterministe este
utilizată în construcţia compilatoarelr moderne şi anume pentru construcţia
analizoarelor sintactice.
- 132 -
Unitatea de învăţare M4.U4. Proprietăţi de închidere pentru
familia limbajelor de tip 2
Cuprins
M4.U5.1. Introducere....................................................................................... 133
M4.U5.2. Obiectivele unităţii de învăţare ......................................................... 133
M4.U5.3. Proprietăţi de închidere pentru limbaje I.D.C. .................................. 133
M4.U5.4. Rezumat ........................................................................................... 143
M4.U5.1. Introducere
Vom considera întâi anumite operaţii cu limbaje care păstrează limbajele
independente de context. Apoi vom prezenta operaţii la care familia limbajelor
independente de context nu este închisă.
Aceste operaţii se pot folosi atât pentru a demonstra că un limbaj este I.D.C. cât
şi pentru a demonstra că un limbaj nu este I.D.C.
.
Teorema 3.8.1
Limbajele independente de context sunt închise la reuniune, concatenare şi produs
Kleene.
▼Demonstraţie:
- 133 -
Fie L1 şi L2 generate de G 1 (V1 , T1 , S1 , P1 ) şi G 2 (V2 , T2 , S 2 , P2 ) . Presupunem
că V1 V2= . Atunci putem realiza următoarele construcţii de gramatici I.D.C:
construite G3, înseamnă că aceeaşi derivare are loc şi în gramatica G3. În plus, putem
obţine simbolul Si printr-o derivare într-un pas pornind de la S3, şi anume folosind una din
cele două reguli nou adăugate la P3, obţinând următoarea derivaţie în G3:
i {1,2} : S3 Si w , deci w L(G 3 ) .
G3 G3
Rezultă că L1 L 2 L(G 3 ) .
Fie w L(G 3 ) ; înseamnă că w poate fi generat cu regulile P3, pornind de la S3:
S3 w .
G3
Putem observa faptul că, în afară de primul pas al acestei derivări, toate regulile
folosite în obţinerea lui w pornind de la S3 sunt chiar reguli din Pi, i {1,2} , în funcţie de
simbolul Si obţinut în primul pas. Deoarece V1 V2= , rezultă că
Si w ,
Gi
- 134 -
c) Limbajul L*1 este generat de G 5 (V1 {S5 }, T1 , S5 , P5 ) , unde
P5 P1 {S 5 S5S1 , S5 λ} .
▲
Teorema 3.8.2
Familia limbajelor independente de context este închisă la substituţie.
▼Demonstraţie:
Fie L un limbaj I.D.C., L Σ şi pentru fiecare a Σ fie La un limbaj I.D.C.
*
▼
Avem gramatica generativă G ({S},{a, b},S, P) , unde mulţimea
regulilor este P {S aSbS,S bSaS,S λ} . Se poate verifica faptul că
L=L(G). Să considerăm limbajele de substituţie:
La {0 n1n | n 1} , generat de regulile
P(Ga)={Sa 0S a 1, Sa 01} ;
~ | w {0,2}* }, limbaj generat de mulţimea de reguli
L b {ww
P(Gb)= {S b 0S b 0, S b 2S b 2, S b λ} .
- 135 -
S Sa SSb S
S S SS S
b a
S λ
Sa 0S a 1
P :
Sa 01
S b 0S b 0
S b 2S b 2
S λ
b
Să generăm un cuvânt la întâmplare cu aceste reguli:
S Sa SSb S 01SS b S 01S b S 012S b 2S 0120S b 02S
012002S 012002
▲
Observaţia 3.8.1 Teorema 3.8.1 se poate obţine folosind Teorema 3.8.2 şi ţinând cont că
a, b Σ avem:
{a, b} este I.D.C.
{a b} este I.D.C.
a este I.D.C.
Dacă acum f(a)=La şi f(b)=Lb, atunci, datorită proprietăţii de închidere la substituţie,
rezultă că:
L a L b este I.D.C.
L a L b este I.D.C.
La este I.D.C.
Pentru că homomorfismul este un caz special de substituţie, în care card(La)=1,
obţinem şi următorul corolar.
Teorema 3.8.3
Clasa limbajelor independente de context este închisă la homomorfismul invers.
▼Demonstraţie:
Fie h : Σ Δ un homomorfism şi L un limbaj I.D.C.; atunci există un automat push-
down M (Q, Δ, Γ, δ, q 0 , Z 0 , F) astfel încât L=T(M).
Construim un automat push-down M care să accepte h (L) , astfel:
1
- 136 -
Intrarea lui M'
Controlul
lui M' h
Buffer Stiva lui
Controlul
lui M M şi M'
Figura 3.8.1
Cu intrarea a pentru automatul M', acesta generează h(a) şi simulează execuţia lui M
cu această intrare h(a). Dacă M' ar fi un automat cu număr finit de stări, atunci M' şi-ar
schimba numai stările. În cazul automatului push-down, M' poate şi să pună o mulţime de
simboluri pe stivă şi, în plus, fiind nedeterminist are o mulţime de posibilităţi de mişcare.
De aceea, dotăm M' cu un buffer (o zonă tampon) în care el poate să memoreze h(a).
Atunci M' poate să simuleze orice λ-mutare a lui M, dacă doreşte, şi să consume simbolurile
lui h(a) câte unul la fiecare moment, la fel cum face M. Pentru ca buffer-ul să fie o parte a
controlului finit al lui M', el nu poate fi oricât de lung. Se poate realiza asta permiţându-i lui
M' să citească un simbol de intrare numai când buffer-ul este gol. Astfel, în buffer este păstrat
în fiecare moment un sufix al lui h(a), pentru un anume a preluat de pe banda de intrare a lui
M'.
Automatul push-down M' acceptă cuvântul de intrare w dacă buffer-ul este vid şi M
este într-o stare finală. În acest fel, M a acceptat h(a) pentru fiecare simbol de intrare a, deci a
acceptat h(w).
Astfel, L(M')= {w h(w) L(M)} , adică:
1
L(M')= h (L(M))
Construcţia formală este dată în continuare.
Funcţia de tranziţie δ :
- 137 -
1
Să demonstrăm că L(M')= h (L(M)) .
β Γ , atunci
([q 0 , λ], w, Z 0 ) ├ M ([p, λ], λ, β) ,
astfel încât M' acceptă w.
b) Reciproc, să presupunem că M' acceptă intrarea w=a1a2…an. Atunci, pentru că regula (3)
poate fi aplicată numai cu buffer-ul vid (precum arată a doua componentă a stării lui M),
şirul de mişcări ale lui M' ce conduc la acceptare poate fi scris ca:
c)
([q 0 , λ], a 1a 2 ...a n , Z 0 ) ├ M
├ M ([p 1 , λ], a 1a 2 ...a n , α1 ) ├ M ([p 1 , h(a 1 )], a 2 ...a n , α1 ) ├ M
├ M ([p 2 , λ], a 2 ...a n , α 2 ) ├ M ([p 2 , h(a 2 )], a 3 ...a n , α 2 ) ├ M
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .
├ M ([p n , λ], a n , α n ) ├ M ([p n , h(a n )], λ, α n ) ├ M
├ M ([p n 1 , λ], λ, α n 1 ) , unde pn+1 F.
Tranziţia din starea [p i , λ] în [p i , h(a i )] se face prin regula (3) iar celelalte tranziţii
prin regulile (1) şi (2).
Astfel,
(p1 , α1 ) δ(q 0 , λ, Z 0 )
şi i : (p i 1 , α i 1 ) δ(p i , h(a i ), α i )
Teorema 3.8.4
- 138 -
Clasa limbajelor I.D.C. nu este închisă relativ la intersecţie.
▼Demonstraţie:
Să presupunem, prin absurd, că intersecţia oricăror limbaje I.D.C. este tot un limbaj
I.D.C. Să construim un contraexemplu:
Am demonstrat că limbajul L {a b c i 1} nu este independent de context (v.
i i i
L1 {a i b i c j i 1, j 1}
L 2 {a i b jc j i 1, j 1}
Pentru aceste limbaje este uşor să construim câte un automat push-down sau sau câte o
gramatică I.D.C.; spre exemplu, o gramatică pentru generarea limbajului L2 ar putea avea setul
de reguli:
{S AB, A aA, A a, B bBc, B bc}.
Dar L L1 L 2 şi L nu este I.D.C., ceea ce contrazice presupunerea făcută.
▲
Corolar 3.8.2
Clasa limbajelor I.D.C. nu este închisă relativ la complementare.
▼Demonstraţie:
Ştim că clasa limbajelor I.D.C. este închisă la reuniune. Presupunând că ar fi închisă şi
la operaţia de complementare, şi ţinând cont de relaţiile lui de Morgan privind
complementarea reuniunii ( C(A B)=C(A) C(B) ), am obţine concluzia că are loc
închiderea şi la intersecţie, ceea ce contrazice Teorema 3.8.4.
▲
Teorema 3.8.5
Dacă L este un limbaj I.D.C. iar R este o mulţime regulată, atunci L R este un
limbaj I.D.C.
▼Demonstraţie:
Fie L=T(M), M fiind un automat push-down:
M (Q M , Σ, Γ, δ M , q 0 , Z 0 , FM )
Fie şi R=T(A), unde A este un automat finit nedeterminist:
A (Q A , Σ, δ A , p 0 , FA )
- 139 -
Construim un automat push-down M' pentru limbajul L R , într-un mod care să
simuleze funcţionarea în paralel a lui M şi A:
Controlul
Controlul Controlul Stiva lui
lui M'
lui A lui M M şi M'
…
Figura 3.8.2
M' simulează mişcările lui M pe intrarea λ fără a schimba starea lui A. Când M face o mişcare
pe simbolul de intrare a, M' simulează această mişcare şi de asemenea simulează schimbarea
stării lui A pentru simbolul a. Automatul M' acceptă o intrare dacă şi numai dacă atât A cât şi
M o acceptă.
Construcţia formală a lui M' este următoarea:
M (Q A Q M , Σ, Γ, δ, [p 0 , q 0 ], Z 0 , FA FM ) ,
unde δ este definit astfel:
δ A (p, a) p
([p, q], γ) δ([p, q], a, X) atunci când
(q , γ) δ M (q, a, X)
Desigur, dacă a λ atunci p p .
(q 0 , w, Z 0 ) ├ iM (q, λ, γ)
i
şi (p 0 , w) ├ A (p, λ)
pentru i=0 rezultatul e trivial, deoarece luăm p=p0, q=q0, γ=Z0 şi w=λ.
presupunem afirmaţia adevărată pentru i-1 şi fie
([p 0 , q 0 ], xa, Z 0 ) ├ iM-1 ([p', q'], a, β) ├ M ([p, q], λ, γ) ,
unde w=xa şi a Σ sau a=λ.
Conform ipotezei de inducţie, rezultă că:
δ A (p 0 , x) p
(q 0 , x, Z 0 ) ├ M (q , λ, β)
În plus, conform definiţiei,
δ A (p, a) p
şi (q , a, β) ├ M (q, λ, γ)
- 140 -
Utilizând toate acestea, obţinem:
δ A (p 0 , xa) p
(q 0 , xa, Z 0 ) ├ M (q, λ, γ)
xa T(A)
sau, altfel scris, , ceea ce trebuia demonstrat.
xa T(M)
(q 0 , w, Z 0 ) ├ iM (q, λ, γ)
dacă i
şi (p 0 , w) ├ A (p, λ)
atunci ([p 0 , q 0 ], w, Z 0 ) ├ M ([p, q], λ, γ) ,
▲
Teorema 3.8.6
Clasa limbajelor independente de context este închisă în raport cu operaţia de
oglindire.
▼Demonstraţie:
Fie G o gramatică independentă de context de forma:
G = (VN, VT, S, P)
şi L = L(G).
Construim o nouă gramatică G‟ = (VN, VT, S, P”), în care fiecare regulă din mulţimea
regulilor, P, este înlocuită cu o regulă similară în care membrul drept este oglinditul
membrului drept al regulei corespunzătoare din P:
P’ = {A → ~ u | A → u P}
Se observă că regulile din P’ sunt tot independente de context. Este uşor de demonstrat
că:
~
L(G’) = L
▲
▼
Limbajul L este format din cuvintele ale căror jumătate stângă este
identică cu jumătatea dreaptă. Presupunem că acest limbaj ar fi I.D.C.
Din Teorema 3.8.5 rezultă că limbajul L1 L a b a b ar fi şi el
- 141 -
cu i q , bj-iai cu i j q ), ele însă nu permit crearea de cuvinte uv wx y care
i i
Să ne reamintim...
Familia limbajelor independente de context este închisă la:
reuniune,
concatenare,
produs Kleene,
oglindire,
substituţie,
homomorfism,
homomorfismul invers,
intersecţia cu mulţimi regulate..
Familia limbajelor independente de context nu este închisă la:
intersecţie,
complementara relative la un alphabet.
Teste de evaluare/autoevaluare
I. Intrebări.
1. Să se enunţe şi să se demonstreze 4 proprietăţi de închidere
pentru limbajele de tip 2.
II. Exerciţii.
1.Se consideră limbajul L = {an bn | n ≥ 1} {an b2n| n ≥ 1}. Să se
arate că L este un limbaj independent de context (se construieşte un
automat push-down nedeterminist sau o gramatică IDC folosind
proprietatea de închidere a limbajelor IDC la reuniune.)
- 142 -
M4.U5.4. Rezumat. Această unitate de învăţare prezintă proprietăţi de închidere ale
familiei limbajelor de tip2, adică independente de context. Datorită faptului că
limbajele independente de context pot fi generate de gramatici de tip 2 sau recunoscute
de automatele push-down nedeterministe, în demonstrarea acestor proprietăţi se va
folosi una sau alte dintre reprezentăti.
Spre deosebire de familia limbajelor de tip 3, limbajele regulate, familie limbajeor
independente de context nu este închisă la o serie de operaţii cum ar fi intersecţia şi
complementara faţa de un alfabet.
Proprităţile de închidere pot fi folosite în demonstrarea anumitor rezultate. În plus
construcţiile folosite în demonstrarea acestor proprietăţi se pot folosi în construirea de
gramatici, respective automate push-down pentru anumite limbaje particulare.
- 143 -
Bibliografie.
[1]. AHO, A.V., ULLMAN, J. D. “The theory of parsing, translation and compiling” Prentice
Hall- London, 1972.
[2]. AHO, A.V., SETHI, R., ULLMAN, J.D. “Compiling, Principles, Techniques and Tools”,
Addison-Wesley, Reading, Mass., 1988.
[3]. GRIES, D. “Compiler construction for digital computers”, New-York, John Weley, 1971.
[4]. HOPCROFT, J.E., ULLMAN, J. D. “Formal Languages and their relation to Automata” ,
Addison-Wesley, Reading, Mass., 19769.
[5]. HOPCROFT, J.E., ULLMAN, J. D. “Introduction to automata theory, Languages and
Computation” , Addison-Wesley, 1979.
[6]. IACOB P., MARINESCU D. "An Optimal Representation of the Nondeterministic Finite
Automaton by a Set - Union Knapsack Problem" Proceedings of the International
Conference "Symetry and Antisymetry in Mathematics, Formal Languages and Computer
Science" Brasov 1996 pp 47-48.
[7]. KOZEN, D.C.,“ Automata and Computability”, Springer, 1997.
[8]. LIVOVSCHI, L. GEORGESCU, H. “Bazele informaticii”, Ed. Didactică şi
Pedagogică, Bucureşti, 1985.
[9]. MARCUS, S., “ Lingvistica Matematică”, Ed. Didactică şi Pedagogică, Bucureşti, 1973.
[10]. JALOBEANU C., MARINESCU D.,. - “Bazele teoriei calculului-Limbaje formale şi
automate”, Ed. Albastră, Cluj, 2007.
[11]. MARINESCU D., - “A bidimensional Turing machine for the cutting stock problem with
quillotine restrictions” - Proceeding of the scientific symposion with the contribution of
teachers and researchers from the Republic of Moldova , Brasov, 1991, pp 73-83.
[12]. MARINESCU D., - “Limbaje Formale şi Teoria Automatelor”, Ed. Univ. Transilvania
Braşov, 2003.
[13]. MARINESCU D., " The Use of Didactic Software JFLAP for Formal Languages "Report
TR--HH-10-97 Restructuring of the (re)training of school teachers In Computer science,
Computer Libris Agora, ISBN 973-97515-1-2, Cluj-1997, pp.240-251.
[14]. MARINESCU D., IACOB P., VLADAREAN C.- “ An Algorithm for Optimal
Representation of a Nondeterministic Finite Automaton By a set-union Knapsack
Problem”, Proceedings of the 2-th International Conference "Symetry and Antisymetry in
Mathematics, Formal Languages and Computer Science"- Satelite Conference of 3 ECM-
Brasov 2000, pp 199-206.
[15]. MOLDOVAN, G., CIOBAN, V., LUPEA, M.A,M. “ Limbaje Formale şi Teoria Automatelor-
Culegere de probleme”, Ed. Mesagerul, Cluj-Napoca, 1997.
- 145 -
[16]. MARUŞCIAC, I. “Teoria Algoritmilor”, Ed. Didactică şi Pedagogică, Bucureşti, 1966.
[17]. ORMAN, G. “Limbaje Formale”, Ed. Tehnică, Bucureşti, 1982.
[18]. ORMAN, G. “Limbaje Formale şi acceptori”, Ed. Albastră, Cluj-Napoca, 2002.
[19]. PĂUN, GH.,. “ Gramatici matriceale”, Ed. Ştiinţufică şi Enciclopedică, Bucureşti, 1981.
[20]. PĂUN, GH.,. “ Mecanisme generative ale proceselor economice”, Ed. Tehnică, Bucureşti,
1982.
[21]. PĂUN, GH.,. “ Probleme actuale în Teoria Limbajelor Formale”, Ed. Ştiinţufică şi
Enciclopedică, Bucureşti, 1984.
[21]. SALOMAA, A. “Formal Languages”, Academic Press, New-York, 1973.
[22]. SIMOVICI, D. “Limbaje Formale şi Tehnici de compilare”, Ed. Didactică şi Pedagogică,
Bucureşti, 1978.
[23]. SIPSER, M. ” Introduction to the theory of computation”, PWS publishing Company,
Boston, 1996.
- 146 -