Sunteți pe pagina 1din 171

See discussions, stats, and author profiles for this publication at: https://www.researchgate.

net/publication/308966996

Limbaje formale si automate

Book · June 2007

CITATIONS READS

0 1,521

1 author:

Adrian Constantin Atanasiu


University of Bucharest
66 PUBLICATIONS   312 CITATIONS   

SEE PROFILE

Some of the authors of this publication are also working on these related projects:

Information Security View project

Reaction Systems View project

All content following this page was uploaded by Adrian Constantin Atanasiu on 10 October 2016.

The user has requested enhancement of the downloaded file.


LIMBAJE FORMALE
ŞI
AUTOMATE

Adrian Atanasiu

Editura INFODATA Cluj


Prefaţă

Teoria limbajelor formale şi a automatelor a devenit un domeniu deja clasic şi poate
fi studiată sub o formă bine structurată, aşa cum sunt de exemplu algebra liniară sau
geometria plană. Iniţiată ca un aparat pentru modelarea limbajului natural, ea capătă
rapid un statut separat odată cu lucrările lui Noam Chomsky (anii 0 50) şi apoi Arto
Salomaa (anii 0 60). De remarcat aportul şcolii româneşti de limbaje formale, ı̂ncepând
cu Academicianul Solomon Marcus şi continuând cu nume bine cunoscute ı̂n domeniu
(Gheorghe Păun, Dan Simovici, Alexandru Mateescu, Victor Mitrana, Lucian Ilie şi alţii).
Importanţa limbajelor formale constă ı̂n principal ı̂n domeniile largi de aplicabili-
tate. Plecând de la prelucrarea limbajului natural (de la care a preluat terminologia) şi
continuând cu limbajele de programare (structura unui compilator este aproape ı̂n totali-
tate definită pe baza gramaticilor şi a automatelor), modele economice, biologice (calcule
bazate pe lanţuri ADN sau pe membrane celulare), lista domeniilor de aplicabilitate
oferă permanent noi posibilitaţi de investigare bazate pe structuri generative sau de re-
cunoaştere. Analiza complexităţii unui model de calcul este imposibilă fără o referire la
maşinile Turing – modelul teoretic standard al unui computer.
Acestea sunt – pe scurt – motivele existenţei ı̂ncă de la ı̂nceputul anilor 0 70 a unui
curs de Limbaje formale şi automate la secţiile de informatică. Cartea de faţă este un
suport de curs pentru studenţii Facultăţii de Matematică şi Informatică din Universitatea
Bucureşti şi preia ı̂n mare parte forma unui curs mai vechi de Bazele Informaticii, ţinut
de autor ı̂n perioada 1984 − 1990.

Structura lui urmăreşte ı̂n principal clasificarea făcută de Chomsky limbajelor formale,
prezentând pentru fiecare din cele 4 clase de limbaje clasice (limbaje regulate, indepen-
dente de context, dependente de context, limbaje recursiv enumerabile) atât mecanisme
generative (gramatici) cât şi de recunoaştere (automate) specifice fiecărei clase.
Astfel, după un prim capitol dedicat automatelor finite, cu rol de a obişnui pe studenţi
cu modalitatea de abordare a textelor formale, ı̂n Capitolul 2 sunt studiate limbajele
regulate ı̂mpreună cu principalele teoreme de reprezentare (lema de pompare şi Myhill-
Nerode).
Capitolul 3 introduce noţiunea de sistem de rescriere, pe baza căruia se definesc

3
4

metodele generative şi de recunoaştere folosite la definirea unui limbaj. Clasificarea


Chomsky stabileşte ierarhia standard a limbajelor ca punct de referinţă pentru studi-
ile ulterioare.
Capitolul 4 este dedicat principalelor operaţii pe limbaje. Se studiază proprietăţi de
ı̂nchidere la operaţiile de reuniune, concatenare, stelare (operaţiile regulate pe limbaje),
homomorfisme, substituţii, intersecţie, oglindire şi amestecare.
Capitolul 5 introduce câteva mecanisme de recunoaştere noi, legate strâns de auto-
matele finite: gsm-uri, translatori finiţi, automate Moore şi Mealy. După ce se arată că
automatele finite sunt mecanismele care recunosc limbajele generate de gramaticile regu-
late, ideea se extinde asupra lui L2 – unde se arată că automatele stivă sunt mecanismele
de recunoaştere duale gramaticilor independente de context.
Datorită importanţei deosebite pe care o are această clasă de gramatici, ei ı̂i este
dedicat Capitolul 6 – cel mai extins capitol. Sunt introduse noţiuni noi: arbore de derivare,
gramatici proprii, forme normale (Chomsky şi Greibach), teoreme de caracterizare.
În Capitolul 7 este făcut un studiu asupra limbajelor dependente de context şi a
automatelor liniar mărginite. De remarcat că spre deosebire de alte lucrări care tratează
această clasă de acceptori ca un caz particular de maşină Turing, am considerat că LBA-
urile sunt destul de importante pentru a fi construite şi analizate separat.
Ultimul capitol se referă la limbajele recursiv numărabile, acceptate de maşinile Turing
sau – dual – generate de gramaticile de tip 0.
De menţionat că prin acest curs nu se acoperă ı̂n totalitate studiul limbajelor formale şi
al automatelor. Astfel, nu se menţionează nimic despre structuri bine dezvoltate cum sunt
gramaticile matriciale, indexate, contextuale (cu o menţiune specială pentru gramaticile
contextuale Marcus), sisteme de gramatici, sisteme Lindenmayer, AF L-uri, sisteme Post,
translatori, modele biologice (automate Watson-Creek, P - sisteme1 ) sau despre noţiuni
cum sunt vectorii Parikh, operaţii de ştergere şi adăugare, studiul cuvintelor infinite etc,
despre care s-ar mai putea elabora alte câteva cursuri.
Prin această carte am intenţionat o abordare a elementelor de bază referitoare la
cele două domenii. Aceste noţiuni fundamentale sunt necesare atât pentru ı̂nţelegerea
mecanismelor de lucru folosite ı̂n alte discipline care au fost sau vor fi studiate ulterior
(arhitectura sistemelor de calcul, elemente de complexitate a calculului, construirea de
compilatoare, prelucrare de limbaj natural) precum şi o deschidere a interesului de a se
alătura colectivelor de cercetare din acest domeniu, colective existente ı̂n cadrul Facul-
tăţilor de Matematică şi Informatică din principalele centre universitare româneşti.

Autorul

1
Litera 0 P 0 vine de la numele lui Gheorghe Păun.
5

Cuprins

Prefaţă 3
Cap. 1: Automate finite 7
1.1. Prezentare generală 7
1.2. Definiţii şi notaţii preliminare 9
1.3. Automate finite deterministe 11
1.4. Automate finite nedeterministe 15
1.5. Echivalenţa dintre AF D şi AF N 18
1.6. Automate finite cu -mişcări 23
1.7. Exerciţii 28
Cap. 2: Teoreme de reprezentare pentru limbajele regulate 31
2.1. Lema de pompare 31
2.1.1. Aplicaţii ale lemei de pompare 33
2.2. Teorema Myhill - Nerode şi aplicaţii 36
2.2.1. Teorema de caracterizare algebrică a limbajelor regulate 36
2.2.2. Aplicaţii ale teoremei Myhill - Nerode 38
2.3. Exerciţii 44
Cap. 3: Gramatici si limbaje clasificabile Chomsky 45
3.1. Sisteme de rescriere 45
3.2. Gramatici, clasificarea Chomsky 51
3.3. Exerciţii 55
Cap. 4: Proprietăţi de ı̂nchidere ale limbajelor Chomsky 57
4.1. Noţiuni introductive 57
4.2. Închiderea limbajelor Chomsky faţă de operaţiile regulate 61
4.3. Închiderea faţă de homomorfisme şi substituţii 65
4.4. Închiderea faţă de alte operaţii 68
4.4.1. Închiderea la intersecţie 68
4.4.2. Închiderea la operaţia de oglindire 69
4.4.3. Închiderea la operaţii de amestecare 70
4.5. Exerciţii 72
6

Cap. 5: Metode de recunoaştere pentru limbajele Chomsky 73


5.1. Gramatici regulate şi automate finite 73
5.2. Gsm-uri şi translatori finiţi 76
5.2.1. Definiţii generale 76
5.2.2. Automate finite cu ieşiri 78
5.2.3. Translatori finiţi 80
5.3. Automate stivă 83
5.4. Automate pentru L1 şi L0 92
5.5. Exerciţii 93
Cap. 6: Gramatici independente de context 95
6.1. Introducere 95
6.2. Arbori de derivare şi derivări independente de context 96
6.3. Gramatici independente de context proprii 105
6.4. Forme normale 115
6.4.1. Forma normală Chomsky 115
6.4.2. Forma normală Greibach 116
6.5. Teorema uvwxy şi aplicaţii 123
6.5.1. Enunţ si demonstraţie. Variante 123
6.5.2. Aplicaţii ale teoremei uvwxy 128
6.6. Exerciţii 132
Cap. 7. L1 şi automate liniar mărginite 135
7.1. Gramatici ”monotone” şi gramatici ”senzitive de context” 135
7.2. Automate liniar mărginite 140
7.3. Exerciţii 146
Cap. 8: Limbaje de tip 0 şi maşini Turing 147
8.1. Definiţia maşinii Turing 148
8.2. Proprietăţi ale maşinilor Turing 151
8.3. Limbaje recursive şi recursiv numărabile 154
8.4. Maşina Turing folosită pentru calculul funcţiilor ı̂ntregi 156
8.5. Tehnici de construcţie a maşinilor Turing 157
8.6. Modificări ale maşinilor Turing 162
8.7. Exerciţii 168
Bibliografie 169
Capitolul 1

Automate finite

1.1 Prezentare generală


Structurile prezentate ı̂n acest prim capitol constituie cel mai simplu model de automat –
denumire prin care ı̂n mod normal se ı̂nţelege o ”cutie neagră” cu o intrare şi mai multe
ieşiri (răspunsuri), ca ı̂n Figura 1.1.

Figura 1.1:

-
- -
-

Complexitatea acestor răspunsuri este ı̂n strânsă legătură cu modul de organizare şi
funcţionare a structurii interne a ”cutiei”, inaccesibilă (din diverse motive) unui utilizator
ocazional.
Spre această direcţie ne vom ı̂ndrepta atenţia, prezentând – sub o formă matematică
coerentă – o clasă de astfel de automate, cunoscută sub numele de automate cu număr
finit de stări sau – mai scurt – automate finite.
Începem cu ele datorită simplităţii extreme sub care se prezintă: automatele finite nu
au memorie şi sunt formate esenţial doar din două componente:

1. Un dispozitiv secvenţial de citire (de pe o bandă de intrare),

2. Un registru de control de capacitate finită.

7
8 CAPITOLUL 1. AUTOMATE FINITE

Este remarcabilă ı̂nsă gama de aplicaţii – teoretice şi practice – ı̂n care pot fi folosite
aceste automate; de aceea studiul lor capătă un interes deosebit.
Un automat finit (AF ) poate fi privit ca o modelare matematică a unui sistem1 cu
intrări discrete.
Automatul conţine un număr finit de configuraţii interne (stări); caracteristica unei
stări este aceea de a păstra informaţii referitoare la intrările anterioare, necesare pentru
determinarea comportării sistemului ı̂n funcţie de diversele intrări ulterioare.

Există multe exemple ı̂n practică, care pot fi simulate cu automate finite, dificultatea
constând adesea doar ı̂ntr-un mod de reprezentare cât mai adecvat.

Exemplul 1.1 Circuitele logic combinaţionale ı̂ntâlnite ı̂n Arhitectura Calculatoarelor –


reprezentabile teoretic prin expresii booleene – sunt exemple de AF -uri. Un astfel de
circuit are un număr finit de intrări (variabile logice), fiecare având doar două poziţii
posibile: ı̂nchis (notat cu 1) şi deschis (notat cu 0).
Starea unui circuit cu n intrări este deci una din cele 2n secvenţe posibile de n caractere
0 sau 1.
Tot automate finite sunt şi circuitele de tip 1 sau 2 (memorii, flip-flopuri etc).

Exemplul 1.2 Unele programe utilizate de sistemul de operare (cum ar fi editorul de


legături sau analizorul lexical) sunt date sub forma unor automate finite.
De exemplu, un analizor lexical parcurge simbolurile unui program de calculator şi
recunoaşte secvenţe de caractere corespunzând identificatorilor, constantelor numerice,
cuvintelor cheie etc.

Exemplul 1.3 O problemă distractivă foarte cunoscută este aceea a trecerii peste o apă
de către un om a unui lup, o capră şi o varză.
Pentru aceasta el are la dispoziţie o barcă ı̂n care poate ı̂ncape – ı̂nafară de om – doar
unul din ceilalţi trei candidaţi la traversare.
Cum trebuie să acţioneze omul, ştiind că nu are voie să lase singure pe un mal lupul
cu capra sau capra cu varza ?
Problema poate fi modelată uşor cu un automat finit. Vom nota cu O - om, L - lup,
C - capră şi V - varză. Apar astfel 24 = 16 situaţii posibile, pe care le vom reprezenta
sub forma unor perechi separate printr-o linie, prima parte reprezentând ceea ce rămâne
pe un mal, iar a doua – ce a trecut pe malul celălalt.
O parte din stări (de exemplu CV − OL) sunt excluse de condiţiile problemei şi nu le
vom mai figura.
1
Noţiunea de sistem este similară celei definite ı̂n Arhitectura Sistemelor de Calcul (Ed. Infodata
2006).
1.2. DEFINIŢII ŞI NOTAŢII PRELIMINARE 9

Intrările ı̂n automat sunt acţiunile pe care le face omul cu barca; acesta poate trece
singur (o), sau ı̂mpreună cu lupul (l), capra (c) sau varza (z). Starea iniţială este OLCV −
∅, iar cea finală ∅ − OLCV .
O diagramă a problemei este prezentată ı̂n Figura 1.2.

Figura 1.2:
c- o -
OLCV −∅  LV −OC  OLV −C
c o *
 H
YHH
Hv
 H
l
 HH
v HHHH
 l
 


 Hj
V −OLC L−OCV
6 6
c c c c
? ?
OCV −L OLC−V
HH
YHH *

vHH v
H 
H l l



c o HH
jH 
H 


∅−OLCV - OC−LV - C−OLV
c o

Se observă că există două cele mai scurte soluţii ale problemei, care pot fi privite ca
drumuri de la starea iniţială la cea finală. Există de fapt o infinitate de soluţii, dar numai
acestea două – marcate de arcele ”colcvoc” şi respectiv ”covcloc” – nu conţin cicluri.

1.2 Definiţii şi notaţii preliminare


Vom considera cunoscute elementele uzuale de algebră şi teoria mulţimilor.
Vom nota totdeauna mulţimile cu litere latine mari – A, B, C, . . ., eventual indexate.
Fie A o mulţime nevidă (de obicei finită), numită alfabet (sau vocabular).
Elementele lui A se numesc caractere şi vor fi notate cu litere mici de la ı̂nceputul
alfabetului latin, eventual indexate (a, b, c5 , . . .).
Dacă A şi B sunt două mulţimi, definim mulţimea formală

AB = {ab | a ∈ A, b ∈ B}

Au loc relaţiile (evidente)

AB 6= BA, A(B ∪ C) = AB ∪ AC, A(B ∩ C) = AC ∩ AC


10 CAPITOLUL 1. AUTOMATE FINITE

Această operaţie (A, B) −→ AB se numeşte concatenare (compunere, alăturare).


În particular, vom putea construi mulţimile
A2 = AA, A3 = A2 A, ..., Ak = Ak−1 A, . . .
Prin convenţie
A0 = {}
unde  este secvenţa fără nici un caracter (evident, a = a = a, ∀a ∈ A).
Notăm
A∗ = Ak , A+ = Ak .
[ [

k≥0 k≥1

A∗ este ı̂nchiderea reflexiv - tranzitivă a mulţimii A (sau ı̂nchiderea Kleene).


Observaţia 1.1
1. A+ = A∗ \ {}.
2. A∗ este monoidul liber generat de A, cu operaţia de concatenare, având  ca element
neutru.
Elementele lui A∗ se numesc cuvinte ( fiind cuvântul vid), secvenţe sau şiruri şi se
notează uzual cu litere greceşti mici α, β, γ sau litere mici de la sfârşitul alfabetului latin
(u, v, x, y, z).
Orice alt gen de notaţie va fi specificat ı̂n mod explicit.
Fiind dat un cuvânt w ∈ V + , x ∈ V + este subcuvânt al lui w dacă ∃ α, β ∈ V ∗ astfel
ı̂ncât w = αxβ.
Dacă α =  atunci x este prefix al lui w, iar dacă β = , atunci x este sufix al lui w.
Pentru un cuvânt α ∈ A∗ , notăm |α| numărul de caractere care formează α; ı̂n parti-
cular || = 0.
Definiţia 1.1 Fie A o mulţime nevidă. Orice submulţime a lui A∗ se numeşte limbaj
peste A.
Exemplul 1.4 Fie A = {a}. Atunci A2 = {aa}, A3 = {aaa} ş.a.m.d.
Avem A∗ = {ak | k ≥ 0} (unde a0 = ) şi A+ = {ak | k ≥ 1}.
Mulţimea B = {ap | p număr prim } este un limbaj peste alfabetul A.
În particular, A∗ este el ı̂nsuşi un limbaj.
Exemplul 1.5 Să considerăm A = {0, 1}. Atunci
A2 = {0, 1}{0, 1} = {00, 01, 10, 11},
A3 = {00, 01, 10, 11}{0, 1} = {000, 001, 010, 011, 100, 101, 110, 111}.
În A∗ se vor afla toate secvenţele binare de lungime arbitrară.
1.3. AUTOMATE FINITE DETERMINISTE 11

1.3 Automate finite deterministe


Formal, un automat finit determinist (AF D) poate fi definit astfel:

Definiţia 1.2 Un AFD este o structură M = (Q, V, δ, q0 , F ) unde

• Q este o mulţime finită şi nevidă de elemente numite ”stări”;

• V este o mulţime finită şi nevidă numită ”alfabet de intrare”;

• δ : Q × V −→ Q este o aplicaţie parţial definită, numită ”funcţie de tranziţie”;

• q0 ∈ Q este ”starea iniţială” a automatului M ;

• F ⊆ Q este o mulţime nevidă de elemente numite ”stări finale”.

Unui AF D i se asociază un graf orientat numit diagramă de tranziţie; corespondenţa se


realizează ı̂n felul următor:

• Fiecărei stări a automatului ı̂i corespunde un nod ı̂n graf.

• Dacă δ(q, a) = p (există o tranziţie de la starea q la starea p, provocată de apariţia


caracterului a), atunci ı̂n graf există un arc marcat cu a de la nodul q la nodul p;
 a 
q - p
 

• Nodul asociat stării iniţiale are forma (a), iar pentru o stare finală – forma (b);
j
H
q0

qj
 
(a) (b)

• Graful nu conţine alte noduri şi alte arce ı̂nafara celor specificate anterior.

Exemplul 1.6 În Exemplul 1.3 este dată o diagramă de tranziţie. Reprezentarea AF D-
ului corespunzător este următoarea:
Q = {OLCV − ∅ (1), LV − OC (2), OLV − C (3), V − OLC (4), OCV − L (5),
L − OCV, (6), OLC − V (7), C − OLV (8), OC − LV (9), ∅ − OLCV (10)} (ı̂n paranteze
au fost date codificări ale stărilor, utile ı̂n simplificarea scrierii funcţiei de tranziţie δ),
V = {o, l, c, v}, q0 = 1, F = {10}.
12 CAPITOLUL 1. AUTOMATE FINITE

δ o l c v
1 − − 2 −
2 3 − 1 −
3 2 4 − 6
4 − 3 5 −
5 − − 4 8
6 − − 7 3
7 − 8 6 −
8 9 7 − 5
9 8 − 10 −
10 − − 9 −

Pentru a descrie comportarea unui AF D atunci când intrarea este un cuvânt, vom
extinde funcţia δ la δ̃ : Q × V ∗ −→ Q, definită recursiv astfel:

δ̃(q, ) = q, δ̃(q, αa) = δ(δ̃(q, α), a).

Deoarece δ̃(q, a) = δ(δ̃(q, ), a) = δ(q, a), putem nota extensia δ̃ tot cu δ fără a face nici o
confuzie.
δ(q, α) reprezintă starea la care ajunge automatul când se pleacă din starea q şi se
parcurge la intrare cuvântul α.
Propoziţia 1.1 δ(q, αβ) = δ(δ(q, α), β), ∀ q ∈ Q, α, β ∈ V ∗ .
Demonstraţie: Prin inducţie după lungimea cuvântului β.
i. |β| = 0: Deci β = ; atunci membrul drept devine succesiv
δ(δ(q, α), ) = δ(q 0 , ) = q 0 = δ(q, α) = δ(q, α), unde s-a folosit local notaţia δ(q, α) = q 0 .
ii. k −→ k + 1: Fie β ∈ V ∗ cu |β| = k + 1; deci β este de forma β = β 0 a cu
a ∈ V şi |β| = k.
Atunci
(1) (2) (3) (3)
δ(q, αβ) = δ(q, αβ 0 a) = δ(δ(q, αβ 0 ), a) = δ(δ(δ(q, α), β 0 ), a) = δ(q 0 , β 0 ), a) = δ(q 0 , β 0 a) =
= δ(δ(q, α), β),
unde s-a folosit:
(1) − definiţia extensiei funcţiei de tranziţie;
(2) − ipoteza de inducţie;
(3) − notaţia δ(q, α) = q 0 . q.e.d.
În unele lucrări se mai utilizează relaţia următoare (uşor de extins la clase mai largi
de automate) definită pe Q × V ∗ :

(q, aα) ` (p, α) ⇐⇒ δ(q, a) = p.


1.3. AUTOMATE FINITE DETERMINISTE 13

Se arată imediat că ı̂nchiderea ei reflexiv - tranzitivă este



(q, αβ) ` (p, β) ⇐⇒ δ(q, α) = p.
Exemplul 1.7 Fie automatul finit determinist M = (Q, V, δ, q0 , F ) cu
Q = {q0 , q1 , q2 , q3 }, V = {0, 1}, F = {q0 } şi
δ 0 1
q0 q2 q1
q1 q3 q0
q2 q0 q3
q3 q1 q2
Diagrama de tranziţie este
j 1 -
ql
H
0 q1
 
6 1 6
0 0 0 0

? 1 -
?
q2  q3
 
1
Fie 110101 ∈ V ∗ un cuvânt de intrare. Vom avea succesiv:
δ(q0 , 110101) = δ(δ(q0 , 1), 10101) = δ(q1 , 10101) = δ(δ(q1 , 1), 0101) = δ(q0 , 0101) =
= δ(δ(q0 , 0), 101) = δ(q2 , 101) = δ(δ(q2 , 1), 01) = d(q3 , 01) = δ(δ(q3 , 0), 1) = δ(q1 , 1) =
= q0 ∈ F .
Fie M = (Q, V, δ, q0 , F ) un AF D; definim limbajul acceptat de M ca fiind mulţimea
τ (M ) = {α| α ∈ V ∗ , δ(q0 , α) ∈ F }.
Revenind la Exemplul 1.7, 110101 ∈ τ (M ).
Exemplul 1.8 Să construim un AF D pentru limbajul L definit astfel:
”α ∈ L ⇐⇒ α ∈ {0, 1}∗ şi α conţine cel puţin două zerouri consecutive.”
De la ı̂nceput sunt precizate V = {0, 1} şi – bineı̂nţeles – q0 .
Se observă că avem nevoie de stări pentru a codifica următoarele informaţii:
q0 - starea iniţială;
q1 - starea ı̂n care se ajunge cu un 0 (se are ı̂n vedere posibilitatea să urmeze ı̂ncă
un 0);
q2 - starea ı̂n care se ajunge cu 1;
q3 - starea (finală) ı̂n care se ajunge cu al doilea 0 consecutiv.

Diagrama de tranziţie a automatului va arăta atunci:


14 CAPITOLUL 1. AUTOMATE FINITE

j 0 
0 
- qm
H 
q0 - q1 3 0, 1
 H   -6
HH 6
H 1 1 0
HH
HH
HH
j? 
q2 -6
 1

δ 0 1
q0 q1 q2
De aici va rezulta funcţia δ : q1 q3 q2
q2 q1 q2
q3 q3 q3

Să arătăm că acest automat acceptă limbajul cerut de problemă.


Fie α = α0 00α”; fără a micşora generalitatea, putem presupune că aceasta este prima
pereche de zerouri consecutive (altfel spus, 0 000 nu este subcuvânt al lui α0 0).
Apar două cazuri:

1. α0 =  : atunci α = 00α” şi


δ(q0 , 00α”) = δ(δ(q0 , 00), α”) = δ(q3 , α”) = q3 ∈ F , deci α ∈ τ (M ).

2. α0 = α1 1 (altfel perechea de zerouri din paranteză n-ar mai fi prima): atunci


δ(q0 , α1 100α”) = δ(δ(q0 , α1 1), 00α”) = δ(q2 , 00α”) = δ(δ(q2 , 00), α”) = δ(q3 , α”) =
q3 ∈ F .

S-a folosit faptul că pentru orice α1 6∈ τ (M ), δ(q0 , α1 ) ∈ {q0 , q1 , q2 } (după cum α1 este
 sau se termină cu 0 sau 1).
În toate cazurile, δ(q0 , α1 1) = δ(δ(q0 , α1 ), 1) = q2 .

Invers, fie α ∈ τ (M ); deci δ(q0 , α) = q3 .


Rezultă atunci din construcţie că există α1 , α2 ∈ V ∗ cu
α = α1 α2 şi δ(q0 , α1 ) = q1 , δ(q1 , α2 ) = q3 .
Fără a micşora generalitatea, putem presupune că α1 şi α2 sunt aleşi astfel ı̂ncât q1
nu mai apare ı̂n parcurgerea lui α2 .
Deoarece δ(q0 , α1 ) = q1 , α1 nu poate avea ca ultim element decât pe 0; deci α1 = α0 0.
Similar, cum lui α2 nu ı̂i corespunde nici un drum ı̂n graf care să conţină alt q1 ,
ı̂nseamnă că acest drum nu va avea nici pe q2 (deoarece orice drum de la q2 la q3 va trece
şi prin q1 ).
Deci din q1 nu se poate trece decât ı̂n q3 , adică α2 trebuie să ı̂nceapă cu 0: α2 = 0α”.
Rezumând, α = α1 α2 = α0 00α”.
1.4. AUTOMATE FINITE NEDETERMINISTE 15

Observaţia 1.2 În prezentarea de până acum s-a utilizat diagrama de tranziţie, nu şi
funcţia δ definită prin tabel.
Avantajul utilizării tabelei rezidă din posibilitatea de a decide mai rapid dacă funcţia
de tranziţie δ este sau nu bine definită.
De exemplu, diagrama

j 0 
0 
- qn
H -
q0 - q1 2 ?0, 1
  
-6
?
0, 1
deşi aparent răspunde problemei din Exemplul 1.8, nu corespunde unui AF D deoarece
δ(q0 , 0) 6∈ Q (pentru starea q0 şi intrarea 0, funcţia δ poate lua două valori: q0 sau q1 ).

1.4 Automate finite nedeterministe


După cum se observă, una din caracteristicile fundamentale ale AF D-urilor este aceea că
orice cuvânt de intrare determină un drum unic prin graful asociat automatului.
Pentru orice cuplu (q, a) ∈ Q × V există cel mult un arc notat cu a ı̂n diagrama
de tranziţie, care pleacă din q (se ia ı̂n considerare şi posibilitatea ca α 6∈ τ (M ); atunci
automatul se blochează ı̂ntr-o stare nefinală s, neexistând nici un arc marcat corespunzător
unui caracter din α care să plece din s).
Să renunţăm acum la această condiţie şi să definim un automat ı̂n care, plecând
dintr-o stare, un caracter din V să ofere posibilitatea alegerii unei stări ı̂n care să treacă
automatul.
Această alegere nu mai este determinată apriori, ci se face ı̂n funcţie de alte criterii,
externe automatului.
Noile definiţii sunt:

Definiţia 1.3 Un automat finit nedeterminist (AF N pe scurt) este o structură


M = (Q, V, δ, q0 , F ), unde

• Q, V, q0 , F au aceeaşi semnificaţie din Definiţia 1.2;

• δ : Q × V −→ 2Q (mulţimea submulţimilor lui Q).

Diagrama de tranziţie pentru AF N se defineşte identic cu cea de la AF D.


De asemenea, funcţia de tranziţie δ se poate extinde la δ̃ : Q × V ∗ −→ 2Q prin:
δ̃(q, ) = {q};
δ̃(q, αa) = {p | ∃r ∈ δ̃(q, α), p ∈ δ(r, a)}.
16 CAPITOLUL 1. AUTOMATE FINITE

În particular, pentru α = , avem


δ̃(q, a) = {p | ∃r ∈ δ̃(q, ), p ∈ δ(r, a)} = {p | ∃r ∈ {q}, p ∈ δ(r, a)} = {p | p ∈ δ(q, a)} =
= δ(q, a).
Deci, fără a micşora generalitatea, putem nota şi ı̂n cazul AF N -urilor, δ̃ cu δ.
Prin convenţie
δ(∅, α) = ∅[
δ(P, α) = δ(q, α), ∀P ⊆ Q, P 6= ∅.
q∈P

În acest fel, definiţia extensiei funcţiei δ se poate scrie formal


[
δ(q, ) = {q}, δ(q, αa) = δ(r, a).
r∈δ(q,α)

Propoziţia 1.2

1. δ(P, ) = P, ∀P ⊆ Q;

2. δ(q, αβ) = δ(δ(q, α), β), ∀q ∈ Q, α, β ∈ V ∗ .

Demonstraţie: Este lăsată ca exerciţiu (Exerciţiul 1.6.).


În particular

δ(q, aβ) = δ(δ(q, a), β), ∀q ∈ Q, a ∈ V, β ∈ V ∗ .

Limbajul acceptat de un AF N M este prin definiţie:

τ (M ) = {w | w ∈ V ∗ , δ(q0 , w) ∩ F 6= ∅}.

Un cuvânt w este acceptat de un AF N atunci când există o secvenţă de tranziţii cores-


punzând lui w, care conduce automatul de la starea iniţială la o stare finală.
Sau – dacă se lucrează pe diagrama de tranziţie – există cel puţin un drum de la nodul
q0 la un nod final, drum marcat prin cuvântul de intrare.
În cazul AF D-urilor, acest drum are proprietatea de a fi unic.
1.4. AUTOMATE FINITE NEDETERMINISTE 17

Exemplul 1.9 Fie automatul M = (Q, V, δ, q0 , F ) definit prin

Q = {q0 , q1 , q2 , q3 , q4 }, V = {a, b}, F = {q2 , q4 },

δ a b
q0 {q0 , q3 } {q0 , q1 }
q1 ∅ {q2 }
q2 {q2 } {q2 }
q3 {q4 } ∅
q4 {q4 } {q4 }
Diagrama de tranziţie va fi

a  a 
- qm
-
- q3 a, b
j
4
-   ?
H
q0 -6  
 b b - qm
-
? - q1 2 a, b
-6
?   ?
a, b

Să luăm de exemplu cuvântul α = abaab.

Dacă am urmări tranziţia stărilor, am obţine o figură arborescentă de tipul următor:

q0H a - q0 b - q0H a - q0H a - q0H b - q0


Ha HH
b Ha Ha Hb
HH H H HH HH HH
j
H
q3 j
H
q1 j
H
q3H j
H
q3 j
H
q1
a
HH
HH
j b - q4 q4

Parcurgând toate drumurile posibile, ele duc la una din stările q0 , q1 sau q4 .
Una din ele (q4 ) este stare finală; deci există o secvenţă de stări indicate de cuvântul
abaab care conduce de la q0 la q4 , adică abaab ∈ τ (M ).
Pe de-altă parte, folosind Propoziţia 1.2, putem scrie formal:
δ(q0 , abaab) = δ(δ(q0 , a), baab) = δ({q0 , q3 }, baab) = δ(q0 , baab) ∪ δ(q3 , baab) =
= δ(δ(q0 , b), aab) ∪ δ(δ(q3 , b), aab) = δ({q0 , q1 }, aab) ∪ δ(∅, aab) = δ(q0 , aab) ∪ δ(q1 , aab) ∪
∅ = δ(δ(q0 , a), ab) ∪ δ(δ(q1 , a), ab) = δ({q0 , q3 }, ab) ∪ δ(∅, ab) = δ(q0 , ab) ∪ δ(q3 , ab) ∪ ∅ =
δ(δ(q0 , a), b) ∪ δ(δ(q3 , a), b) = δ({q0 , q3 }, b) ∪ δ(q4 , b) = δ(q0 , b) ∪ δ(q3 , b) ∪ δ(q4 , b) =
{q0 , q1 } ∪ ∅ ∪ {q4 } = {q0 , q1 , q4 }.
Deci δ(q0 , abaab) ∩ F = {q4 } =
6 ∅.
18 CAPITOLUL 1. AUTOMATE FINITE

Exemplul 1.10 Automatul prezentat ı̂n Observaţia 1.2 este un AF N pentru limbajul din
Exemplul 1.13.
El este M = (Q, V, δ, q0 , F ) cu Q = {q0 , q1 , q2 }, V = {0, 1}, F = {q2 } şi
δ 0 1
q0 {q0 , q1 } {q0 }
q1 {q2 } ∅
q2 {q2 } {q2 }
Ca un exerciţiu, să vedem dacă w = 0110 este un cuvânt din limbaj:
δ(q0 , 0110) = δ(δ(q0 , 0), 110) = δ({q0 , q1 }, 110) = δ(q0 , 110) ∪ δ(q1 , 110) = δ(δ(q0 , 1), 10) ∪
δ(δ(q1 , 1), 10) = δ(q0 , 10) ∪ δ(∅, 10) = δ(q0 , 10) = δ(δ(q0 , 1), 0) = δ(q0 , 0) = {q0 , q1 }.
Cum {q0 , q1 } ∩ F = ∅, rezultă 0110 6∈ τ (M ).

1.5 Echivalenţa dintre AF D şi AF N


Definiţia 1.4 Două automate M1 şi M2 se numesc ”echivalente” dacă τ (M1 ) = τ (M2 )
(acceptă acelaşi limbaj).

Deoarece orice AF D este un caz particular de AF N (când mulţimile de valori se reduc la


cel mult câte un element), este evident că limbajele acceptate de AF D-uri sunt acceptate
şi de AF N -uri.
Mai puţin evidentă este incluziunea inversă, anume:
Teorema 1.1 Orice limbaj L acceptat de un AF N este acceptat şi de un AF D.
Demonstraţie: Fie M = (Q, V, δ, q0 , F ) un AF N cu τ (M ) = L.
Definim AF D-ul M 0 = (Q0 , V, δ 0 , q0 0 , F 0 ) astfel:

Q0 = 2Q , q0 0 = {q0 }, F 0 = {P | P ⊆ Q, P ∩ F 6= ∅},

δ 0 (∅, a) = ∅, δ 0 (P, a) =
[
δ(q, a), ∀P ⊆ Q, P 6= ∅.
q∈P

Extensia funcţiei δ 0 se defineşte ı̂n mod natural, conform cu Definiţia 1.3.


Vom arăta – prin inducţie după lungimea cuvântului α – relaţia

δ 0 ({q}, α) = δ(q, α).

Dacă |α| = 0, atunci α =  şi deci δ 0 ({q}, ) = {q} = δ(q, ).


Să presupunem egalitatea adevărată pentru orice cuvânt de lungime k şi fie β ∈ V +
cu |β| = k + 1.
1.5. ECHIVALENŢA DINTRE AF D ŞI AF N 19

Deci β = αa cu |α| = k, a ∈ V .
Atunci
(1) (2) [ (3) [ (4)
δ 0 ({q}, αa) = δ 0 (δ 0 ({q}, α), a) = δ(r, a) = δ(r, a) = δ(q, αa),
r∈δ 0 ({q},α) r∈δ(q,α)
unde s-a folosit:
(1) - definiţia extensiei lui δ 0 ;
(2) - definiţia lui δ 0 ;
(3) - ipoteza de inducţie;
(4) - definiţia extensiei lui δ.
Pe baza acestei relaţii, se poate construi secvenţa de echivalenţe

w ∈ τ (M ) ⇐⇒ δ(q0 , w)∩F 6= ∅ ⇐⇒ δ 0 (q0 0 , w)∩F 6= ∅ ⇐⇒ δ 0 (q0 0 , w) ∈ F 0 ⇐⇒ w ∈ τ (M 0 )

Exemplul 1.11 Fie un AF N dat de componentele Q = {q0 , q1 }, V = {0, 1}, F = {q1 }


şi
δ 0 1
q0 {q0 , q1 } {q1 }
q1 ∅ {q0 , q1 }
AF D-ul echivalent M 0 se va construi astfel:
Q0 = {p0 , p1 , p2 , p3 }, unde s-a notat p0 = {q0 }, p1 = {q1 }, p2 = ∅, p3 = {q0 , q1 }.
Apoi, q0 0 = p0 , F 0 = {p1 , p3 }.
Să calculăm funcţia de tranziţie:
δ 0 (p0 , 0) = δ(q0 , 0) = {q0 , q1 } = p3 ;
δ 0 (p1 , 0) = δ(q1 , 0) = ∅ = p2 ;
δ 0 (p2 , 0) = δ 0 (p2 , 1) = ∅ = p2 ;
δ 0 (p3 , 0) = δ(q0 , 0) ∪ δ(q1 , 0) = {q0 , q1 } ∪ ∅ = {q0 , q1 } = p3 ;
δ 0 (p0 , 1) = δ(q0 , 1) = {q1 } = p1 ;
δ 0 (p1 , 1) = δ(q1 , 1) = {q0 , q1 } = p3 ;
δ 0 (p3 , 1) = δ(q0 , 1) ∪ δ(q1 , 1) = {q1 } ∪ {q0 , q1 } = {q0 , q1 } = p3 .
δ0 0 1
p0 p3 p1
Deci p1 p2 p3
p2 p2 p2
p3 p3 p3
20 CAPITOLUL 1. AUTOMATE FINITE

Practic, multe din stările unui AF N nu sunt accesibile din starea iniţială q0 .
Cum şi aşa AF D-ul asociat are un număr mare de stări, este preferabil să utilizăm ı̂n
paralel şi un algoritm care să reţină ı̂n AF D numai stările accesibile.
Algoritmul 1.1 este prezentat ı̂n Figura 1.3:

Figura 1.3:

Algoritm 1.1
Intrare: Un AF D M = (Q, V, δ, q0 , F ).
Ieşire: Un AF D M 0 = (Q0 , V, δ 0 , q0 , F 0 ) echivalent, cu proprietatea
∀q ∈ Q0 ∃α ∈ V ∗ cu δ 0 (q0 , α) = q.
Algoritm:

1. i ← 0, Ti = {q0 };

2. i ← i + 1, Ti = Ti−1 ∪ {δ(q, a) | q ∈ Ti−1 , a ∈ V };

3. Dacă Ti 6= Ti−1 salt la 2;

4. Q0 = Ti , F 0 = F ∩ Ti , δ 0 = δ |Q0 ×V şi M 0 = (Q0 , V, δ 0 , q0 , F 0 ).

Propoziţia 1.3 Automatul M 0 obţinut prin Algoritmul 1.1

1. are toate stările accesibile din starea inţială;

2. este echivalent cu M .

Demonstraţie: Exerciţiu (Exerciţiul 1.6).

Exemplul 1.12 Fie M = {Q, V, δ, q0 , F ) unde Q = {q0 , q1 , q2 , q3 , q4 }, V = {a, b},


F = {q2 , q4 } şi
δ a b
q0 {q0 , q3 } {q0 , q1 }
q1 ∅ {q2 }
q2 {q2 } {q2 }
q3 {q4 } ∅
q4 {q4 } {q4 }
Să construim AF D-ul corespunzător.
1.5. ECHIVALENŢA DINTRE AF D ŞI AF N 21

Teoretic, Q0 = 2Q va avea 25 = 32 stări.


Deoarece ı̂nsă multe din ele – fiind inaccesibile – nu sunt folosite de funcţia δ 0 , va fi
inutil să le listăm de la ı̂nceput.
Construim funcţia de tranziţie δ 0 şi – pe măsură ce apar stări noi, le vom introduce ı̂n
0
Q . Iniţial, fie

p0 = {q0 }, p1 = {q1 }, p2 = {q2 }, p3 = {q3 }, p4 = {q4 }.

δ 0 (p0 , a) = δ(q0 , a) = {q0 , q3 }; notăm p5 = {q0 , q3 } noua stare introdusă;


δ 0 (p0 , b) = δ(q0 , b) = {q0 , q1 }, p6 = {q0 , q1 };
δ 0 (p1 , a) = δ(q1 , a) = ∅ : p7 = ∅;
δ 0 (p1 , b) = δ(q1 , b) = {q2 } = p2 ; δ 0 (p2 , a) = δ(q2 , a) = {q2 } = p2 ;
δ 0 (p2 , b) = δ(q2 , b) = {q2 } = p2 ; δ 0 (p3 , a) = δ(q3 , a) = {q4 } = p4 ;
δ 0 (p3 , b) = δ(q
[3 , b) = ∅ = p7 ; δ 0 (p4 , a) = δ(q4 , a) = {q4 } = p4 = δ 0 (p4 , b);
0
δ (p5 , a) = δ(p, a) = δ(q0 , a) ∪ δ(q3 , a) = {q0 , q3 } ∪ {q4 } = {q0 , q3 , q4 }.
p∈p5
Fiind o [stare nouă, notăm p8 = {q0 , q3 , q4 };
0
δ (p5 , b) = δ(p, b) = δ(q0 , b) ∪ δ(q3 , b) = {q0 , q1 } ∪ ∅ = {q0 , q1 } = p6 ;
p∈p5
δ 0 (p6 , a) =
[
δ(p, a) = δ(q0 , a) ∪ δ(q1 , a) = {q0 , q3 } ∪ ∅ = p5 ;
p∈p6
δ 0 (p6 , b) =
[
δ(p, b) = δ(q0 , b) ∪ δ(q1 , b) = {q0 , q1 } ∪ {q2 } = {q0 , q1 , q2 }.
p∈p6
Configuraţia {q0 , q1 , q2 } este nouă; deci p9 = {q0 , q1 , q2 };
δ 0 (p7 , a) = δ[
0
(∅, a) = ∅ = p7 = δ 0 (p7 , b);
δ 0 (p8 , a) = δ(p, a) = δ(q0 , a) ∪ δ(q3 , a) ∪ δ(q4 , a) = {q0 , q3 } ∪ {q4 } ∪ {q4 } = {q0 , q3 , q4 } =
p∈p8
= p8 ;
δ 0 (p8 , b) =
[
δ(p, b) = δ(q0 , b) ∪ δ(q3 , b) ∪ δ(q4 , b) = {q0 , q1 } ∪ ∅ ∪ {q4 } = {q0 , q1 , q4 } = p10 ,
p∈p8
unde p10 = [ {q0 , q1 , q4 };
0
δ (p9 , a) = δ(p, a) = δ(q0 , a)∪δ(q1 , a)∪δ(q2 , a) = {q0 , q3 }∪∅∪{q2 } = {q0 , q2 , q3 } = p11 ;
p∈p9
deci p11 = {q [0 , q2 , q3 };
δ 0 (p9 , b) = δ(p, b) = δ(q0 , b) ∪ δ(q1 , b) ∪ δ(q2 , b) = {q0 , q1 } ∪ {q2 } ∪ {q4 } = {q0 , q1 , q2 } =
p∈p9
= p9 ;
δ 0 (p10 , a) = δ(q0 , a) ∪ δ(q1 , a) ∪ δ(q4 , a) = {q0 , q3 } ∪ ∅ ∪ {q4 } = {q0 , q3 , q4 } = p8 ;
δ 0 (p10 , b) = δ(q0 , b) ∪ δ(q1 , b) ∪ δ(q4 , b) = {q0 , q1 } ∪ {q2 } ∪ {q4 } = {q0 , q1 , q2 , q4 }
şi notăm p12 = {q0 , q1 , q2 , q4 };
0
δ (p11 , a) = δ(q0 , a) ∪ δ(q2 , a) ∪ δ(q3 , a) = {q0 , q3 } ∪ {q2 } ∪ {q4 } = {q0 , q2 , q3 , q4 }
şi p13 = {q0 , q2 , q3 , q4 };
22 CAPITOLUL 1. AUTOMATE FINITE

δ 0 (p11 , b) = δ(q0 , b) ∪ δ(q2 , b) ∪ δ(q3 , b) = {q0 , q1 } ∪ {q2 } ∪ ∅ = {q0 , q1 , q2 } = p9 ;


δ 0 (p12 , a) = δ(q0 , a) ∪ δ(q1 , a) ∪ δ(q2 , a) ∪ δ(q4 , a) = {q0 , q3 } ∪ ∅ ∪ {q2 } ∪ {q4 } = p13 ;
δ 0 (p12 , b) = δ(q0 , b) ∪ δ(q1 , b) ∪ δ(q2 , b) ∪ δ(q4 , b) = {q0 , q1 } ∪ {q2 } ∪ {q4 } ∪ {q2 } = p12 ;
δ 0 (p13 , a) = {q0 , q2 , q3 , q4 } = p13 ; δ 0 (p13 , b) = {q0 , q1 , q2 , q4 } = p12 .
Deci, ı̂n loc de 32 stări, au fost folosite efectiv numai 14, restul (18 stări) fiind inac-
cesibile din q0 .
Tabela funcţiei δ 0 este
δ0 a b
p0 p5 p6
p1 p7 p2
p2 p2 p2
p3 p4 p7
p4 p4 p4
p5 p8 p6 Celelalte componente ale lui M 0 sunt:
p6 p5 p9 Q0 = {p0 , p1 , . . . , p13 }, p0 stare iniţială, şi
p7 p7 p7 F 0 = {p | p ∩ F 6= ∅} = {p2 , p4 , p8 , p9 , p10 , p11 , p12 , p13 }.
p8 p8 p10
p9 p11 p9
p10 p8 p12
p11 p13 p9
p12 p13 p12
p13 p13 p12
Acest AF D mai poate fi redus, el conţinând şi alte stări inaccesibile.
Să eliminăm aceste stări, utilizând Algoritmul 1.1.
Deci:
T0 = {p0 };
T1 = T0 ∪ {p | p = δ(p0 , a) sau p = δ(p0 , b)} = {p0 } ∪ {p5 , p6 } = {p0 , p5 , p6 };
T2 = T1 ∪ {p | p = δ(q, x), q ∈ T1 , x ∈ {a, b}, p 6∈ T1 } = {p0 , p5 , p6 } ∪ {p8 , p9 } =
= {p0 , p5 , p6 , p8 , p9 };
T3 = T2 ∪ {p | p = δ(q, x), q ∈ T2 , x ∈ {a, b}, p 6∈ T2 } = {p0 , p5 , p6 , p8 , p9 } ∪ {p10 , p11 } =
= {p0 , p5 , p6 , p8 , p9 , p10 , p11 };
T4 = T3 ∪ {p | p = δ(q, x), q ∈ T3 , x ∈ {a, b}, p 6∈ T3 } = {p0 , p5 , p6 , p8 , p9 , p10 , p11 } ∪
∪ {p12 , p13 } = {p0 , p5 , p6 , p8 , p9 , p10 , p11 , p12 , p13 };
T5 = T4 ∪ {p | p = δ(q, x), q ∈ T4 , x ∈ {a, b}, p 6∈ T4 } = T4 ∪ ∅ = T4 .
Algoritmul 1.1 s-a terminat şi automatul astfel redus are doar 9 stări.
El va fi M ” = (Q”, V, δ”, p0 , F ”), unde
Q” = T4 = {p0 , p5 , p6 , p8 , p9 , p10 , p11 , p12 , p13 },
F ” = T4 ∩ F = {p8 , p9 , p10 , p11 , p12 , p13 }, şi diagrama de tranziţie
1.6. AUTOMATE FINITE CU  - MIŞCĂRI 23
a
-
 a 
  
b - 
6?
p5 - p8 p10 b - p12
-
b
3   
a   ?
  
6
a
j
 6 6
H
p0 a b b a

Q
 
 a -
 a 

bQQ
s p6
?
b - p9
?-
p11 - p13 a
   
Q
     ?
6 b
?
-
b

1.6 Automate finite cu  - mişcări


Conform definiţiei unui automat finit, ı̂n general δ(q, ) = {q}.
Vom extinde acum această definiţie şi pentru cazul |δ(q, )| > 1.
Această variantă de extensie apare frecvent ı̂n practică. Există procese care, deşi nu
sunt activate de nici un mesaj de intrare, după un anumit interval de timp ı̂şi modifică
comportamentul: ecrane de calculator intră ı̂n standby, materiale sunt depreciate prin
uzură morală sau fizică etc.
Deci un astfel de proces există şi trebuie cuprins ı̂ntr-o formalizare a automatelor.
Definiţia 1.5 Un automat finit nedeterminist cu  - mişcări este o structură
M = (Q, V, δ, q0 , F ), unde Q, V, q0 , F sunt similare cu cele din Definiţia 1.2, iar funcţia
de tranziţie este δ : Q × (V ∪ {}) −→ 2Q .

Exemplul 1.13 Fie automatul dat de diagrama de tranziţie


j  

H
q0  - q1  - q2
  

-6
? -6
? -6
?
a b c
Funcţia de tranziţie este
δ a b c 
q0 {q0 } ∅ ∅ {q1 }
q1 ∅ {q1 } ∅ {q2 }
q2 ∅ ∅ {q2 } ∅

Pentru a defini extensia δ̂ : Q × V ∗ −→ Q, un prim pas constă ı̂n aflarea tuturor


stărilor accesibile dintr-o anumită stare q, folosind numai  - tranziţii. Fie deci, pentru
q ∈ Q:

< q >= { p | ∃r0 , .., rk ∈ Q, k ≥ 0, r0 = q, rk = p, ri+1 ∈ δ(ri , ), 0 ≤ i ≤ k − 1}


24 CAPITOLUL 1. AUTOMATE FINITE

Pentru calculul lui < q > se poate da un algoritm – de fapt o variantă simplificată a
Algoritmului 1.1 – pe care ı̂l propunem ca exerciţiu.
În mod natural, [
< P >= < q >, < ∅ >= ∅.
q∈P

Lema 1.1
1. q ∈< q >;
2. p ∈< q > =⇒ < p >⊆< q >;
3. << q >>=< q >.
Demonstraţie:
1. În definiţia lui < q > se ia k = 0.
2. Fie p ∈< q >; există deci stările r0 , . . . , rk cu r0 = q, rk = p şi ri ∈ δ(ri−1 , ), i = 1, k.
Dacă r ∈< p >, atunci există t0 , . . . , ts ∈ Q cu t0 = p, ts = r şi tj ∈ δ(tj−1 , ), j = 1, s.
Să considerăm secvenţa de stări r0 , . . . , rk (= t0 ), t1 , . . . , ts (dacă s > 0; )
obţinem (conform definiţiei) r ∈< q >.
Deci < p >⊆< q >.
În cazul s = 0 se ia secvenţa de stări r0 , r1 , . . . , rk şi se raţionează analog.
[
3. Se ştie că << q >>= < p >.
p∈<q>

[ (2), p ∈< q >


”⊆”: Cu [ =⇒ < p >⊆< q >.
Deci < p >⊆ < q >=< q >, sau << q >> ⊆ < q >.
p∈<q> p∈<q>  
[ (∗) [
”⊇”: << q >>= <p>= < p > ∪ < q > ⊇ < q >,
p∈<q> p∈<q>,p6=q
unde ı̂n egalitatea (∗) s-a utilizat primul punct al Lemei 1.1. q.e.d.
Exemplul 1.14 Pentru automatul din Exemplul 1.13 vom avea
< q0 >= {q0 , q1 , q2 } deoarece:
− q0 ∈< q0 > conform Lemei 1.1;
− q1 pentru că q1 ∈ δ(q0 , ) (k = 1);
− q2 pentru că q2 ∈ δ(q1 , ) (k = 2).
Evident, pentru q2 de exemplu, putem avea şi drumuri mai lungi; astfel,
q0 − q0 − q 0 − q1 − q1 − q 2 − q2
poate fi un drum, ı̂n care k = 6.
Importantă este existenţa unui drum; el nu va fi obligatoriu unic. De obicei convenim
ca lungimea lui să fie minimă.
1.6. AUTOMATE FINITE CU  - MIŞCĂRI 25

Similar, < q1 >= {q1 , q2 }, < q2 >= {q2 }.


În acest moment putem defini construcţia recursivă a lui δ̂ astfel:
δ̂(q, ) =< q >;
δ̂(q, aα) = {p | ∃ r ∈< δ(< q >, a) >, p ∈ δ̂(r, α)}

Observaţia 1.3 Această definiţie se mai poate scrie formal şi


δ̂(q, aα) = δ̂(< δ(< q >, a) >, α) (1)
unde am folosit notaţia obişnuită:
[
δ̂(∅, α) = ∅, δ̂(P, α) = δ̂(q, α).
q∈P

Propoziţia 1.4 δ̂(q, a) =< δ(< q >, a) >.

Demonstraţie: În (1) se ia α =  şi obţinem


δ̂(q, a) = δ̂(< δ(< q >, a) >, ) =<< δ(< q >, a) >>=< δ(< q >, a) > . q.e.d.
Deci, spre deosebire de un AF N obişnuit, ı̂n acest caz δ̂ nu mai este o generalizare
naturală a lui δ, ı̂ntre ele existând o relaţie de incluziune: δ(q, a) ⊆ δ̂(q, a).
De aceea este necesară o distincţie ı̂ntre δ şi δ̂.
Din (1) şi Propoziţia 1.4 rezultă egalitatea
δ̂(q, aα) = δ̂(δ̂(q, a), α) (2)
Lema 1.2 δ̂(q, a) = δ̂(< q >, a).
[ [
Demonstraţie: δ̂(< q >, a) = δ̂(p, a) = < δ(< p >, a) >=
p∈<q> p∈<q>
=< δ(<< q >>, a) >=< δ(< q >, a) >= δ̂(q, a). q.e.d.
Definim ı̂n mod natural (ca la AF N ) limbajul acceptat de automatul cu  - mişcări
M = (Q, V, δ, q0 , F ) ca fiind

τ (M ) = {w | w ∈ V ∗ , δ̂(q0 , w) ∩ F 6= ∅}

Exemplul 1.15 Reluând automatul din Exemplul 1.13, să cercetăm dacă w = aab este
sau nu ı̂n limbajul acceptat τ (M ). Avem:
δ̂(q0 , a) =< δ(< q0 >, a) >=< δ({q0 , q1 , q2 }, a) >=< δ(q0 , a) > ∪ < δ(q1 , a) > ∪
∪ < δ(q2 , a) >=< {q0 } > ∪ < ∅ > ∪ < ∅ >=< q0 >= {q0 , q1 , q2 };
δ̂(q1 , a) =< δ(< q1 >, a) >=< δ({q1 , q2 }, a) >=< δ(q1 , a) > ∪ < δ(q2 , a) >=
=< ∅ > ∪ < ∅ >= ∅ ∪ ∅ = ∅;
26 CAPITOLUL 1. AUTOMATE FINITE

δ̂(q2 , a) =< δ(< q2 >, a) >=< δ(q2 , a) >=< ∅ >= ∅;


δ̂(q0 , b) =< δ(< q0 >, b) >=< δ({q0 , q1 , q2 }, b) >=< δ(q0 , b) > ∪ < δ(q1 , b) > ∪
∪ < δ(q2 , b) >=< ∅ > ∪ < {q1 } > ∪ < ∅ >=< q1 >= {q1 , q2 };
δ̂(q1 , b) =< δ(< q1 >, b) >=< δ({q1 , q2 }, b) >=< δ(q1 , b) > ∪ < δ(q2 , b) >=
=< {q1 } > ∪ < ∅ >=< q1 >= {q1 , q2 };
δ̂(q2 , b) =< δ(< q2 >, b) >=< δ(q2 , b) >=< ∅ >= ∅.
Putem acum calcula
δ̂(q0 , aab) = δ̂(δ̂(q0 , a), ab) = δ̂({q0 , q1 , q2 }, ab) = δ̂(q0 , ab) ∪ δ̂(q1 , ab) ∪ δ̂(q2 , ab) =
δ̂(δ̂(q0 , a), b) ∪ δ̂(δ̂(q1 , a), b) ∪ δ̂(δ̂(q2 , a), b) = δ̂({q0 , q1 , q2 }, b) ∪ δ̂(∅, b) ∪ δ̂(∅, b) =
δ̂(q0 , b) ∪ δ̂(q1 , b) ∪ δ̂(q2 , b) ∪ ∅ ∪ ∅ = {q1 , q2 } ∪ {q1 , q2 } ∪ ∅ = {q1 , q2 }.
Deci δ̂(q0 , aab) ∩ F = {q1 , q2 } ∩ {q2 } = {q2 } =
6 ∅, adică aab ∈ τ (M ).

Propoziţia 1.5 δ̂(q, αβ) = δ̂(δ̂(q, α), β), ∀ α, β ∈ V ∗ .

Demonstraţie: Vom proceda prin inducţie după lungimea lui α:


Dacă α = β = , atunci δ̂(q, ) =< q > şi respectiv
δ̂(δ̂(q, ), ) = δ̂(< q >, ) =<< q >>=< q >, deci egalitate.
Dacă |α| = 1, deci α = a, avem δ̂(q, aβ) = δ̂(δ̂(q, a), β) (cf. (2)).
Să presupunem proprietatea adevărată pentru orice cuvânt de lungime n şi fie
α ∈ V ∗ , |α| = n + 1; deci α = aα0 cu |α0 | = n.
Atunci
(i) (ii)
δ̂(q, aα0 β) = δ̂(δ̂(q, a), α0 β) = δ̂(δ̂(δ̂(q, a), α0 ), β) = δ̂(ˆ(q, aα0 ), β) = δ̂(δ̂(q, α), β),
unde s-a folosit:
(i) - ipoteza de inducţie;
(ii) - egalitatea (1). q.e.d.
În particular, vom avea δ̂(αa) = δ̂(δ̂(q, α), a).
Teorema 1.2 Dacă L este un limbaj acceptat de un AF N cu  - mişcări, atunci L este
acceptat de un AF N fără  - mişcări.
Demonstraţie: Fie M = (Q, V, δ, q0 , F ) un AF N cu  - mişcări.
Construim un AF N M 0 = (Q, V, δ 0 , q0 , F 0 ) ı̂n care δ 0 (q, a) = δ̂(q, a) şi
(
0 F ∪ {q0 } dacă < q0 > ∩F 6= ∅
F =
F altfel

Prin construcţie, M 0 este un AF N fără  - mişcări.


Deci se poate folosi notaţia δ 0 ı̂n loc de δ̂ 0 (păstrându-se ı̂nsă diferenţierea ı̂ntre δ şi δ̂).
1.6. AUTOMATE FINITE CU  - MIŞCĂRI 27

Vom arăta ı̂ntâi, prin inducţie după lungimea lui α ∈ V + că


δ 0 (q0 , α) = δ̂(q0 , α) (3)
|α| = 1: atunci α = a ∈ V şi (3) se verifică banal folosind definiţia lui δ 0 .
Fie acum α cu |α| > 1; atunci α = βa cu a ∈ V . Vom avea
(i) (ii) (iii) (iv)
δ (q0 , α) = δ 0 (q0 , βa) = δ 0 (δ 0 (q0 , β), a) = δ 0 (δ̂(q0 , β), a) = δ̂(δ̂(q0 , β), a) = δ̂(q0 , βa) =
0

= δ̂(q0 , α),
unde s-a folosit:
(i) – extensia lui δ 0 (iii) – definiţia lui δ 0
(ii) – ipoteza de inducţie (iv) – Propoziţia 1.5
Folosind acum relaţia (3), vom deduce egalitatea τ (M ) = τ (M 0 ) (adică echivalenţa
celor două automate).
”⊆”: Fie α ∈ τ (M ); deci δ̂(q0 , α) ∩ F 6= ∅.
Dacă α = , atunci δ̂(q0 , ) ∩ F 6= ∅, deci q0 ∈ F 0 δ 0 (q0 , ) = {q0 } ⊆ F 0 =⇒  ∈ τ (M 0 ).
Dacă α 6= , atunci δ̂(q0 , α) = δ 0 (q0 , α) (cu (3)), deci δ 0 (q0 , α) ∩ F 0 ⊇ δ̂(q0 , α) ∩ F 6= ∅.
”⊇”: Considerăm α ∈ τ (M 0 ).
Dacă α = , atunci q0 ∈ F 0 .
Din construcţia lui F 0 rezultă < q0 > ∩F 6= ∅ sau δ̂(q0 , ) ∩ F 6= ∅; deci  ∈ τ (M ).
Să presupunem α 6= .
Atunci – cu (3) – rezultă imediat α ∈ τ (M ). q.e.d.
Exemplul 1.16 Să reluăm automatul definit ı̂n Exemplul 1.13 şi să construim un au-
tomat echivalent, fără  - mişcări.
Închiderile celor trei stări au fost construite ı̂n Exemplul 1.14.
Deoarece < q0 > ∩F 6= ∅, vom avea F 0 = {q0 , q2 }.
Funcţia de tranziţie a noului automat este determinată prin calcul:
0
δ (q0 , a) = δ̂(q0 , a) = {q0 , q1 , q2 };
δ 0 (q0 , b) = δ̂(q0 , b) = {q1 , q2 };
δ 0 (q0 , c) = δ̂(q0 , c) =< δ(< τ0 >, c) >=< δ({q0 , q1 , q2 }, c) >=
=< δ(q0 , c) ∪ δ(q1 , c) ∪ δ(q2 , c) >=< ∅ ∪ ∅ ∪ {q2 } >=< q2 >= {q2 };
δ 0 (q1 , a) = δ̂(q1 , a) = ∅;
δ 0 (q1 , b) = δ̂(q1 , b) = {q1 , q2 };
δ 0 (q1 , c) = δ̂(q1 , c) =< δ(< τ1 >, c) >=< δ({q1 , q2 }, c) >=< δ(q1 , c) ∪ δ(q2 , c) >=
=< ∅ ∪ {q2 } >=< q2 >= {q2 };
δ (q2 , a) = δ 0 (q2 , b) = ∅;
0

δ 0 (q2 , c) = δ̂(q2 , c) =< δ(< τ2 >, c) >=< δ(q2 , c) >=< q2 >= {q2 }.
28 CAPITOLUL 1. AUTOMATE FINITE

Deci
δ0 a b c
q0 {q0 , q1 , q2 } {q1 , q2 } {q2 }
q1 ∅ {q1 , q2 } {q2 }
q2 ∅ ∅ {q2 }

Diagrama de tranziţie a automatului M 0 = (Q, V, δ 0 , q0 , F 0 ) este

a- b- c-
  
j 
H 6 ?
a, b
6 ?
b, c

6 ?
q0 - q1 - q2

  

? -6
a, b, c

1.7 Exerciţii
Exerciţiul 1.1 Fie V = {a, b, c}, W = {x, y, z, u}. Să se scrie V W, W V, W W .

Exerciţiul 1.2 Fie A o mulţime nevidă. A este finită dacă şi numai dacă A∗ = {}.

Exerciţiul 1.3 Dacă A are n elemente, câte elemente va avea Ak (k ≥ 0) ?

Exerciţiul 1.4 Să se construiască AF D-uri pentru următoarele limbaje:

1. L = {03k+1 | k ≥ 0};

2. L = {α | α ∈ {a, b}∗ , α = α0 bbab};

3. L = {α | α ∈ {0, 1}∗ ; scris ı̂n binar, α este un multiplu de 5 };

4. L = {a1 a2 . . . an | n ≥ 3, ai ∈ {x, y}, an−2 = y};

5. L = {ai bj ck | i, j, k ≥ 1};

6. L conţine toate cuvintele peste alfabetul {a, b} care au un număr par de a-uri şi un
număr impar de b-uri;

7. L conţine toate cuvintele peste alfabetul {0, 1} care au cel puţin trei zerouri conse-
cutive.

Exerciţiul 1.5 Fie M = (Q, V, δ, q0 , F ) un AF D şi α, β ∈ V ∗ cu δ(q0 , α) = δ(q0 , β).


Să se arate că ∀γ ∈ V ∗ , αγ ∈ τ (M ) ⇐⇒ βγ ∈ τ (M ).
1.7. EXERCIŢII 29

Exerciţiul 1.6 Să se demonstreze Propoziţiile 1.2 şi 1.3.

Exerciţiul 1.7 Să se construiască AF N -uri pentru următoarele limbaje:


1. Limbajul cuvintelor peste {a, b, c} cu proprietatea că ultimul simbol a mai apărut
anterior;
2. Limbajul numerelor ı̂n care cel puţin o cifră se repetă;
3. L = {w | w ∈ {a, b}∗ , ∃w1 , w2 cu w = w1 aaw2 sau w = w1 bbw2 }.

Exerciţiul 1.8 Fie M = (Q, V, δ, q0 , F ) un AF D cu F = {q 0 }.


Construim AF D-ul M 0 = (Q, V, δ 0 , q 0 , F 0 ) unde F 0 = {q0 }, δ 0 (q, a) = {p| δ(p, a) = q}.
Să se exprime τ (M 0 ) ı̂n funcţie de τ (M ).

Exerciţiul 1.9 Să se construiască AF D-uri pentru AF N -urile date prin diagramele de
tranziţie:
0,-1

6?
0 - q1 1 -
6 
j
H 6 

?
q0 0 1 q3
 


?
? 1 - q2 0 -
6

-6
?
0, 1
0

-
j
6?
0  -
q0 - q1
H
  1
 ?
6

 2 q2  1 ?

?
-6
2
-a b
-
j  
6? 6?
H q0 a - q1 b - q2
  

a, b a, b


? a 

?
q3 q 4

 
-
b
30 CAPITOLUL 1. AUTOMATE FINITE

Exerciţiul 1.10 Să se construiască un AF D echivalent cu automatul dat ı̂n Exemplul


1.16.

Exerciţiul 1.11 Să se construiască un algoritm pentru calculul mulţimilor < q >.

Exerciţiul 1.12 Fie automatul M = (Q, V, δ, q0 , F ) unde Q = {q0 , q1 , q2 , q3 },


V = {0, 1}, F = {q2 } şi

δ 0 1 
q0 {q1 } ∅ ∅
q1 ∅ ∅ {q2 , q3 }
q2 ∅ {q2 } {q3 }
q3 {q1 } {q0 } ∅
Să se construiască un AF D echivalent.

Exerciţiul 1.13 Să se construiască AF D echivalente cu AF N cu  - mişcări date de


diagramele de tranziţie
a- b-
 

H
j 6 ? b,  - 6 ?
q0  q1
 a,  

1.

 a,  

H
j
q0  - q
1
 b,  

2.

Exerciţiul 1.14 Este adevărată egalitatea


δ(< q0 >, α) =< δ̂(q0 , α) > ?

Exerciţiul 1.15 Să se arate că:

1. Dacă p ∈< q > atunci ∀a ∈ V [< δ(p, a) > ⊆ < δ(q, a) >];

2. ∀ A, B ⊆ Q avem < A ∪ B >=< A > ∪ < B >.


Capitolul 2

Teoreme de reprezentare pentru


limbajele regulate

Începem cu o definiţie:

Definiţia 2.1 Limbajul acceptat de un automat finit se numeşte limbaj regulat.

Conform celor demonstrate ı̂n Capitolul 1, limbajele regulate sunt limbajele acceptate
de automatele finite (deterministe).
Atunci când avem un automat finit M , ştim că τ (M ) este un limbaj regulat.
Să considerăm ı̂nsă şi problema reciprocă: fiind dat un limbaj L, cum putem şti dacă
acesta este regulat sau nu: merită să căutăm un automat finit M cu τ (M ) = L, sau
putem stabili de la ı̂nceput că acest lucru este imposibil ?
Capitolul 2 va ı̂ncerca să dea un răspuns acestei probleme.

2.1 Lema de pompare


Lema 2.1 (Lema de pompare): Fie L un limbaj regulat. Există atunci un număr natural
n astfel ı̂ncât pentru orice cuvânt α ∈ L, |α| ≥ n, putem scrie α = uvw, cu proprietăţile:

1. |uv| ≤ n;

2. |v| ≥ 1;

3. uv i w ∈ L, ∀ i ≥ 0.

31
32CAPITOLUL 2. TEOREME DE REPREZENTARE PENTRU LIMBAJELE REGULATE

Demonstraţie: Fiind regulat, limbajul L este acceptat de un AF D M = (Q, V, δ, q0 , F );


fie n = |Q| valoarea pe care o considerăm ı̂n Lemă.
Să luăm un cuvânt α ∈ L cu |α| = m ≥ n; putem scrie deci α = a1 a2 . . . am .
Fie
δ(q0 , a1 . . . ai ) = qi (1 ≤ i ≤ m).
Evident, qm ∈ F (cuvântul α este ı̂n limbajul L).
În secvenţa de m + 1 stări q0 , q1 , . . . qm există cel puţin două stări care coincid (sunt
numai n stări distincte şi m + 1 > n).
Fie qj şi qk două astfel de stări, cu qj = qk , 0 ≤ j < k ≤ m.
Vom nota u = a1 . . . aj , v = aj+1 . . . ak , w = ak+1 . . . am .
Fără a micşora generalitatea, putem presupune că ı̂n secvenţa q0 , . . . , qk nu mai sunt
alte stări care se repetă (se ia j minim cu proprietatea că există k > j cu qk = qj ).
Să arătăm că cele trei cerinţe din lemă sunt ı̂ndeplinite:
1. Secvenţa q0 , . . . , qk−1 fiind formată din stări distincte (qk este prima stare care se
repetă), are cel mult n elemente. Cum ea generează cuvântul uv, rezultă |uv| ≤ n.
2. Deoarece j < k, cuvântul v = aj+1 . . . ak are lungimea cel puţin 1.
3. δ(q0 , u) = qj , δ(qj , v) = qk = qj , δ(qk , w) = qm . Se poate scrie atunci
δ(q0 , uv i w) = δ(δ(q0 , u), v i w) = δ(qj , v i w) = . . . = δ(qj , w) = qm ∈ F
deci uv i w ∈ L, ∀ i ≥ 0. q.e.d.
Observaţia 2.1
• Lema de pompare arată că dacă o mulţime regulată conţine un cuvânt uvw de
lungime suficient de mare, atunci există o infinitate de cuvinte de forma uv i w.
Aceasta nu ı̂nseamnă ı̂nsă că orice cuvânt de lungime suficient de mare este de
forma uv i w pentru u, v, w ∈ V ∗ şi un anumit i ı̂ntreg.
• Se poate demonstra similar o variantă a lemei de pompare, ı̂n care (1) se ı̂nlocuieşte
cu (10 ) |uw| ≤ n sau cu (1”) |vw| ≤ n.
Exemplul 2.1 Fie automatul finit determinist definit prin diagrama de tranziţie
 1 -
j
H
q0 q1

  
6 1 6
0 0 0 0

?  1  ?
q3 q2
 -
1
2.1. LEMA DE POMPARE 33

Se poate arăta uşor că el acceptă toate cuvintele cu un număr par de 0 şi un număr par
de 1. Conform demonstraţiei din Lema de pompare, n = 4.
Să luăm un cuvânt arbitrar α ∈ τ (M ) cu |α| ≥ 4; de exemplu α = 101101.
Secvenţa de stări a automatului, trasată de acest cuvânt este

q0 1 - q1 0 - q2 1 - q3 1 - q2 0 - q1 1 - q0

Prima stare care se repetă este q2 (apare pe poziţiile 3 şi 5). Deci j = 2 şi k = 4.
Cuvintele ı̂n care se descompune α vor fi u = 10, v = 11, w = 01.
Deci α = uvw şi
1. |uv| = |1011| = 4 ≤ 4;
2. |v| = 2 ≥ 1;
3. uv i w = 10(11)i 01 ∈ τ (M ), ∀ i ≥ 0.
În particular, pentru i = 0, 1001 ∈ τ (M ), iar pentru i = 2, 10111101 ∈ τ (M ).
Evident, limbajul L1 = {10(11)i 01| i ≥ 0} este inclus strict ı̂n τ (M ), acesta conţinând
şi alte cuvinte ı̂nafară de cele din L1 .

2.1.1 Aplicaţii ale Lemei de pompare


Una din principalele aplicaţii ale Lemei de pompare constă ı̂n posibilitatea de a demonstra
că anumite limbaje L nu sunt regulate (deci nu există automate finite M astfel ca τ (M ) =
L).
Vom arăta metoda utilizată folosind două exemple:

Exemplul 2.2 Fie


2
L = {ai | i ≥ 1}.
Vom presupune prin absurd că L este un limbaj regulat, şi fie n dat de Lema de pompare.
Alegem un cuvânt α cu |α| = n2 (acest lucru este posibil deoarece n2 > n, iar orice
cuvânt din L are ca lungime un pătrat perfect).
Conform Lemei, α = uvw, unde 1 ≤ |v| ≤ n şi uv i w ∈ L, ∀ i ≥ 0.
În particular, fie i = 2.
Atunci, cum |uv 2 w| = |uvw|+|v| = n2 +|v|, vom avea n2 < |uv 2 w| ≤ n2 +n < (n+1)2 .
Deci uv 2 w 6∈ L (lungimea lui nu este pătrat perfect), infirmând Lema de pompare.

Exemplul 2.3 Să considerăm limbajul


L = {ak bk | k ≥ 1}.
La fel, vom presupune că L este limbaj regulat, şi fie n dat de Lema de pompare.
Vom lucra cu α = an bn .
34CAPITOLUL 2. TEOREME DE REPREZENTARE PENTRU LIMBAJELE REGULATE

Conform Lemei, an bn = uvw, cu proprietăţile corespunzătoare.


Din |uv| ≤ n rezultă că uv este formată numai din 0 a0 -uri (uv este un prefix al primilor
n caractere din α).
Deci v = ap , 0 < p ≤ n (v 6= ).
Luând acum i = 0 ı̂n proprietatea (3) din Lema de pompare, obţinem uv 0 w = an−p bn ;
acest cuvânt nu este ı̂n L, deoarece are mai puţine 0 a0 -uri decât 0 b0 -uri, ceea ce contrazice
Lema de pompare.

O altă aplicaţie importantă a Lemei de pompare este posibilitatea de a construi algoritmi


care să decidă unele proprietăţi ale limbajelor regulate.
Propoziţia 2.1 Fie L un limbaj acceptat de un AF D cu n stări. Atunci
1. L 6= ∅ ⇐⇒ ∃ α ∈ L, |α| < n;
2. L infinit ⇐⇒ ∃ α ∈ L, n ≤ |α| < 2n.
Demonstraţie:
1. ” ⇐= ”: Evident.
” =⇒ ”: Fie α ∈ L (α există deoarece L 6= ∅).
Dacă |α| < n, demonstraţia s-a ı̂ncheiat.
În caz contrar, conform Lemei de pompare, α = uvw.
Cum |v| ≥ 1, vom avea uw ∈ L (cazul i = 0) şi |uw| < |α|.
Argumentaţia se reia pentru cuvântul α0 = uw.
Se obţine ı̂n acest fel un şir de cuvinte din L, de lungimi strict descrescătoare.
După un număr finit de paşi, se va ajunge la un cuvânt din L de lungime mai mică
decât n.
2. ” ⇐= ”: Fie α ∈ L, |α| ≥ n.
Conform Lemei de pompare, α = uvw, v 6=  şi uv i w ∈ L, ∀i ≥ 0.
Deci L conţine o infinitate de cuvinte, ceea ce ı̂nseamnă ı̂n particular că este infinit.
” =⇒ ”: L este infinit, deci există α ∈ L cu |α| ≥ n.
Dacă |α| < 2n, demonstraţia este ı̂ncheiată.
Dacă nu, se aplică Lema de pompare: α = uvw şi deci α0 = uw ∈ L, |α0 | < |α|;
α0 este mai scurt decât α cu cel mult n caractere (|α| ≤ n), deci |α0 | ≥ n.
Raţionamentul se reia pentru α0 şi – după un număr finit de paşi – se ajunge la un
cuvânt care verifică condiţiile cerute. q.e.d.
2.1. LEMA DE POMPARE 35

Se poate construi un algoritm care să testeze dacă limbajul acceptat de un automat
finit este finit sau nu:
Algoritmul 2.1:
Intrare: Un AF D : M = (Q, V, δ, q0 , F );
Ieşire: DA dacă τ (M ) este infinit, NU altfel.
Algoritm:

1. i := 0, Ti := {q0 };

2. i := i + 1; Ti := {p | δ(q, a) = p, q ∈ Ti−1 , a ∈ V };

3. Dacă i 6= n, salt la (2).

4. Dacă Ti ∩ F 6= ∅, atunci DA, STOP.

5. i := i + 1; dacă i = 2n, atunci NU, STOP.

6. Ti := {p | δ(q, a) = p, q ∈ Ti−1 , a ∈ V }, salt la (4).

Algoritmul se bazează pe o idee diferită de cea folosită ı̂n demonstraţia Propoziţiei 2.1.
Cu primii trei paşi se obţin toate stările la care poate ajunge AF D-ul după parcurgerea
tuturor cuvintelor de lungime n.
În continuare, timp de n paşi, se testează dacă ı̂n mulţimile astfel obţinute s-a ajuns la
o stare finală; dacă acest lucru este ı̂ndeplinit, ı̂nseamnă că există un cuvânt ı̂n limbajul
τ (M ) având lungimea ı̂n intervalul [n, 2n), deci τ (M ) este infinit.
Exemplul 2.4 Să aplicăm algoritmul de sus automatului definit ı̂n Exemplul 2.1.
Vom avea n = 4 şi se obţine succesiv:
Pas 1 : i := 0, T0 := {q0 }.
Pas 2 : i := 1, T1 := {q1 , q3 }; cum i 6= n, se reia pasul 2.
Pas 2 : i := 2, T2 := {q0 , q2 }; la fel, pentru că 2 6= 4, revenim la pasul 2.
Pas 2 : i := 3, T3 := {q1 , q3 }.
Pas 2 : i := 4, T4 := {q0 , q2 }. Acum i = n şi se trece mai departe.
Pas 4 : T4 ∩ F = {q0 , q2 } ∩ {q0 } = {q0 } =6 ∅.
Deci τ (M ) este un limbaj conţinând o infinitate de cuvinte.
În mod similar se poate construi şi un algoritm care să decidă posibilitatea ca un limbaj
să fie vid sau nu. Lăsăm ca exerciţiu construcţia unui astfel de algoritm (Exerciţiul 2.1).
Propoziţia 2.1 rezolvă două probleme de decidabilitate. Pe baza ei spunem că problema
vidării (emptyness) şi problema finitudinii (finitness) sunt decidabile pentru limbajele
regulate.
36CAPITOLUL 2. TEOREME DE REPREZENTARE PENTRU LIMBAJELE REGULATE

2.2 Teorema Myhill - Nerode şi aplicaţii


2.2.1 Teorema de caracterizare algebrică a limbajelor regulate
Fie V un alfabet şi L ⊆ V ∗ un limbaj peste V .
Pentru α, β ∈ V ∗ definim relaţia
α ≡L β ⇐⇒ ∀γ ∈ V ∗ [αγ ∈ L ⇐⇒ βγ ∈ L]
În particular, pentru γ =  obţinem α ∈ L ⇐⇒ β ∈ L.
Definiţia 2.2 S ⊂ V ∗ este o mulţime de bază pentru limbajul L dacă:
1. S este finită.
2. ∀w ∈ V ∗ , există α ∈ S cu α ≡L w.
În acest cadru, putem enunţa
Teorema 2.1 (Myhill - Nerode) Un limbaj L este regulat dacă şi numai dacă admite o
mulţime de bază.
Demonstraţie:
”=⇒”: Fie L ⊆ V ∗ un limbaj regulat.
Atunci există un AF D M = (Q, V, δ, q0 , F ) cu τ (M ) = L, ı̂n care funcţia δ este extinsă
ı̂n aşa fel ı̂ncât să fie total definită1 .
Folosind Algoritmul 1.1. din Capitolul 1, putem presupune că toate stările din Q
verifică proprietatea
∀q ∈ Q, ∃αq ∈ V ∗ cu δ(q0 , αq ) = q.
Evident, acest αq nu este unic.
Putem ı̂nsă selecta pentru fiecare q ∈ Q un cuvânt arbitrar cu această proprietate, pe
care ı̂l vom nota αq .
Fie S = {αq | q ∈ Q}.
Cum |S| = |Q|, rezultă că S este o mulţime finită.
Pentru a arăta că S este mulţime de bază, să luăm un cuvânt arbitrar w ∈ V ∗ şi să
arătăm că există α ∈ S cu w ≡L α.
Fie δ(q0 , w) = q. Atunci α = αq ∈ S.
Din construcţia lui S, δ(q0 , αq ) = q.
Acum, ∀u ∈ V ∗ , δ(q0 , wu) = δ(δ(q0 , w), u) = δ(q, u) = δ(δ(q0 , αq ), u) = δ(q0 , αq u).
Deci δ(q0 , wu) ∈ F ⇐⇒ δ(q0 , αq u) ∈ F , sau wu ∈ L ⇐⇒ αu ∈ L, adică w ≡L α.
1
Se adaugă eventual o stare nouă qe numită de obicei ”stare eroare” şi pentru orice pereche (q, a) ∈
Q × V pentru care δ(q, a) nu era definită, se completează cu δ(q, a) = qe .
2.2. TEOREMA MYHILL - NERODE ŞI APLICAŢII 37

”⇐=”: Fie S ⊂ V ∗ o mulţime de bază pentru limbajul L.


Să notăm cu φ aplicaţia canonică φ : S −→ V ∗ / ≡L , definită
φ(α) = [α]
(s-a notat [α] = {w | w ∈ V ∗ , α ≡L w}).
În particular, pentru  ∈ V ∗ , există α0 ∈ S cu  ∈ φ(α0 ).
Vom construi un AF N M = (Q, V, δ, q0 , F ) astfel:
Q = S, q0 = α0 , F = {α | α ∈ S, φ(α) ∩ L 6= ∅},
şi
δ(α, a) = {β | β ∈ S, αa ∈ φ(β)}, ∀α ∈ Q, a ∈ V.
Observaţia 2.2
1. Deoarece S este o mulţime de bază, φ va fi o aplicaţie surjectivă.
2. Aplicaţia φ nu este ı̂n general injectivă; de aici rezultă că M este un automat nede-
terminist.
De exemplu, pentru limbajul L = {0i 10j | i, j ≥ 0}, o mulţime de bază este
S = {0, 1, 10, 11}.
Vom avea
φ(0) = L1 , φ(1) = φ(10) = L, φ(11) = V ∗ \ (L ∪ L1 ), unde L1 = {0i | i ≥ 0}.
Evident, φ nu este injectivă, iar automatul M este definit prin diagrama de tranziţie
0- 0-


6 ? j
H 

q1  1 1 6 ?
q0 - q10

  

?-6
0
0,-1

? 1 6 ?
- q11  1 ?


3. φ(α) ∩ L 6= ∅ ⇐⇒ φ(α) ⊆ L.
Într-adevăr, dacă w ∈ φ(α) ∩ L, atunci w ∈ L şi w ≡L α. Fie u ∈ φ(α); deci
u ≡L α =⇒ u ≡L w.
Va rezulta
uγ ∈ L ⇐⇒ wγ ∈ L, ∀γ ∈V∗
Luând γ = , avem u ∈ L ⇐⇒ w ∈ L, deci u ∈ L.
Implicaţia inversă este banală.
38CAPITOLUL 2. TEOREME DE REPREZENTARE PENTRU LIMBAJELE REGULATE

Revenind la demonstrarea Teoremei 2.1, rămâne de arătat că τ (M ) = L.


Pentru aceasta, demonstrăm ı̂ntâi prin inducţie după k = |w| aserţiunea

β ∈ δ(α, w) ⇐⇒ αw ∈ φ(β), ∀ α, β ∈ Q, w ∈ V ∗.

k = 0: asta ı̂nseamnă w = ; atunci δ(α, ) = {α} şi α ∈ φ(α) (evident).


Fie w ∈ V ∗ cu |w| = k + 1. Atunci w = ua cu |u| = k.
Conform definiţiei lui φ, există γ ∈ Q cu αu ∈ φ(γ).
Folosind ipoteza de inducţie, avem γ ∈ δ(α, u).
”⇐=”: Cum δ(γ, a) 6= ∅ (prin ipoteză, δ este total definită), putem alege un
β ∈ δ(γ, a). Atunci β ∈ δ(γ, a) ⊂ δ(δ(α, u), a) = δ(α, w).
”=⇒”: Avem următoarele rezultate obţinute până acum:
αu ∈ φ(γ) ⇐⇒ αu ≡L γ (definiţia aplicaţiei canonice φ)
β ∈ δ(γ, a) ⇐⇒ γa ≡L β (definiţia lui δ)
Cum relaţia ≡L este invariantă la dreapta (Exerciţiul 2.6), avem αua ≡L γa ≡L β.
Deci αw ≡L β, adică αw ∈ φ(β).

Să arătăm acum egalitatea τ (M ) = L.


”⊆”: Fie w ∈ τ (M ); atunci δ(α0 , w) ∩ F 6= ∅.
Să luăm β ∈ δ(α0 , w) ∩ F , arbitrar.
Din β ∈ δ(α0 , w) rezultă α0 w ∈ φ(β); din β ∈ F avem φ(β) ∩ L 6= ∅, deci φ(β) ⊆ L.
Combinând aceste două rezultate, se obţine α0 w ∈ L.
Din α0 ≡L  rezultă α0 w ≡L w.
Cum α0 w ∈ L, vom avea şi w ∈ L.
”⊇”: Fie w ∈ L. Similar ca mai sus, se obţine şi α0 w ∈ L.
Din definiţia lui φ, există un β ∈ S cu α0 w ∈ φ(β); deci β ∈ δ(α0 , w).
Cum α0 w ∈ φ(β) ∩ L, vom avea β ∈ F .
Deci δ(α0 , w) ∩ F 6= ∅, adică w ∈ τ (M ). q.e.d.

2.2.2 Aplicaţii ale Teoremei Myhill-Nerode


Similar Lemei de pompare, şi folosind Teorema 2.1, putem demonstra că unele limbaje
nu sunt regulate.
Să exemplificăm acest lucru.

Exemplul 2.5 Să arătăm că limbajul

L = {α | α ∈ {a, b}∗ , |α|a = |α|b }


2.2. TEOREMA MYHILL - NERODE ŞI APLICAŢII 39

nu este regulat (s-a notat cu |α|X numărul de caractere X existente ı̂n secvenţa α).
Vom presupune prin absurd că există o mulţime de bază S pentru L; fie aceasta
S = {αi1 , . . . , αin } unde |αik |a − |αik |b = ik , ik ∈ Z, (1 ≤ k ≤ n).
Mulţimea {i1 , . . . , in } este finită; deci există i ∈ Z\{i1 , . . . , in }, i > 0.
Atunci cuvântul α ∈ V ∗ cu |α|a − |α|b = i nu este echivalent cu nici un cuvânt din S.
Într-adevăr, dacă există j cu αij ≡L α, deci αij w ∈ L ⇐⇒ αw ∈ L, alegem w = bi .
Vom avea |αw|a − |αw|b = 0 (şi αw ∈ L), dar |αij w|a − |αij w|b = ij − i 6= 0 (deci
αij 6∈ L).
Ca o remarcă, dacă ı̂ncercăm să obţinem acest rezultat folosind Lema de pompare, nu
vom reuşi, deoarece limbajul L verifică această lemă !
Din acest punct de vedere Teorema Myhill - Nerode completează Lema de pompare.

Un alt rezultat important obţinut pe baza Teoremei Myhill - Nerode este următorul:
Fiind dat un AF D M , se poate construi un AF D M 0 echivalent, având un
număr minim de stări.
Să demonstrăm acest lucru.

Propoziţia 2.2 Aplicaţia φ este injectivă dacă şi numai dacă automatul M corespunzător
are un număr minim de stări.

Demonstraţie: Fiind injectivă şi surjectivă, φ este o bijecţie ı̂ntre S şi V ∗ / ≡L .


Una din consecinţele acestui rezultat va fi |S| = |V ∗ / ≡L | = n.
Să presupunem prin absurd că limbajul regulat L este acceptat de un automat M cu
mai puţin de n stări.
Din demonstraţia Teoremei 2.1 rezultă că atunci există o mulţime de bază S 0 cu
|S 0 | = |Q| < n. Aplicaţia
φ0 : S 0 −→ V ∗ / ≡L
nu va mai fi surjectivă; va exista atunci w ∈ V ∗ cu w 6∈ φ0 (α), ∀α ∈ S 0 .
Deci w 6≡L α, ∀α ∈ S 0 , ceea ce contrazice definiţia mulţimii de bază.
În consecinţă, numărul minim de stări ale unui automat M care acceptă limbajul
regulat L va fi |V ∗ / ≡L |, tocmai cazul când φ este o aplicaţie injectivă.
Pe mulţimea Q a stărilor unui AF vom introduce următoarea relaţie de echivalenţă:

p≡q ⇐⇒ αp ≡L αq

Două stări p şi q care nu sunt echivalente, se numesc separabile.


40CAPITOLUL 2. TEOREME DE REPREZENTARE PENTRU LIMBAJELE REGULATE

Lema 2.2 Un automat finit cu toate stările separabile este determinist.

Demonstraţie: Să presupunem că AF M = (Q, V, δ, q0 , F ) are stările separabile dar nu


este determinist; deci ∃ q, q1 , q2 ∈ Q şi a ∈ V cu q1 , q2 ∈ δ(q, a), q1 6= q2 .
Atunci αq1 ≡L αq , αq2 ≡L αq (s-au folosit notaţiile din demonstraţia Teoremei 2.1),
deci αq1 ≡L αq2 , contradicţie pentru că q1 şi q2 sunt separabile. q.e.d.

Propoziţia 2.3 Fie M = (Q, V, δ, q0 , F ) un AF D cu stări echivalente. Atunci există un


AF D M 0 echivalent cu el, având toate stările separabile.

Demonstraţie: Fie p0 , p1 ∈ Q două stări echivalente.


Construim AF D M 0 = (Q0 , V, δ 0 , q0 , F 0 ) astfel: Q0 = Q \ {p1 }, F 0 = F \ {p1 },
δ 0 (q, a) = p0 dacă δ(q, a) = p1 , δ 0 (q, a) = δ(q, a) ı̂n rest.
Să arătăm că τ (M ) = τ (M 0 ).
”⊆”: Fie w ∈ τ (M ), w = a1 . . . an .
Dacă ∀i (1 ≤ i ≤ n), δ(q0 , a1 . . . ai ) 6= p1 , atunci aceeaşi secvenţă de stări se va găsi şi
ı̂n automatul M 0 , deci w ∈ τ (M 0 ).
Fie i (1 ≤ i ≤ n) cu δ(q0 , a1 . . . ai ) = p1 ; putem presupune că i este minim cu această
proprietate.
Din ipoteză, cum p1 ≡ p0 , rezultă că există α ∈ V ∗ cu δ(q0 , α) = p0 şi a1 . . . ai ≡L α.
Cum a1 . . . an ∈ L, vom avea şi αai+1 . . . an ∈ L, deci δ(q0 , αai+1 . . . an ) ∈ F , de unde
rezultă δ(p0 , ai+1 . . . an ) ∈ F .
Din definiţia lui M 0 avem δ 0 (q0 , a1 . . . ai ) = p0 .
Folosind acum un argument de inducţie asupra lungimii cuvântului, se obţine

δ 0 (p0 , ai+1 . . . an ) ∈ F

Deci δ 0 (q0 , a1 . . . an ) ∈ F , adică w ∈ τ (M 0 ).

”⊇”: Fie w ∈ τ (M 0 ), w = a1 . . . an .
Considerăm vectorii v 0 = (i1 , . . . , in ) şi v = (j1 , . . . , jn ), unde q0 , qi1 , . . . , qin reprezintă
secvenţa de stări din automatul M 0 notată de caracterele a1 , . . . , an , iar q0 , qj1 , . . . , qjn
secvenţa similară de stări din M 0 .
Comparăm lexicografic vectorii v şi v 0 . Dacă v = v 0 , atunci cele două drumuri sunt
identice, deci w ∈ τ (M ).
În caz contrar, fie k primul indice cu ik 6= jk .
Din construcţia automatului M 0 rezultă qik = p0 , qjk = p1 şi δ(qik−1 , ak ) = p1 .
În M , stările p0 şi p1 sunt echivalente, deci δ(p0 , ak+1 . . . an ) ∈ F ⇐⇒ δ(p1 , ak+1 . . . an ) ∈
F ; de aici rezultă δ(p1 , ak+1 . . . an ) ∈ F , adică qjn ∈ F şi δ(q0 , a1 . . . an ) = qjn , ceea ce
ı̂nseamnă w = a1 . . . an ∈ τ (M ).
2.2. TEOREMA MYHILL - NERODE ŞI APLICAŢII 41

Aplicăm această modalitate de eliminare a stărilor echivalente cât timp este posibil.
Automatul obţinut ı̂n final va avea proprietăţile cerute. q.e.d.

Pe baza Propoziţiei 2.3 se poate construi un algoritm de aflare a AF D-ului cu număr


minim de stări, echivalent cu un AF D dat M = (Q, V, δ, q0 , F ).
Deoarece ı̂n acest caz o formalizare ar complica mult prezentarea, vom schiţa algorit-
mul pe un exemplu.

Exemplul 2.6 Fie un AF D dat prin diagrama de tranziţie


 0

j ?
H  

6 
a 0 - b 1 - c  0 d
   
3 k
Q 
Q0 Q 1
Q Q  ?-6Q 
Q
Q1 Q 1 Q
Q QQ 0- Q1
 QQ  0 Q  ? 
 Q 
e 1 s
Q
- f
 1 s6 
Q
- g
+
 0 Q
h
   
 1 ? 0
?6 -6

Vom construi o tabelă de stări, ı̂n care marcăm cu × faptul că stările corespunzătoare
sunt separabile.

c ××
d ×××
e ×××
f ××× ×
g ××××××
h × ×××××
a b c d e f g
Iniţial, × se plasează ı̂n căsuţele aflate la intersecţia unei stări finale cu una nefinală
(deci (a, c), (b, c), (c, d), (c, e), (c, f ), (c, g), (c, h)).
Apoi, pentru fiecare pereche (p, q) de stări despre care nu se ştie dacă sunt separabile,
luăm toate perechile de stări (r, s) unde r = δ(p, a), s = δ(q, a), ∀a ∈ V .
Dacă r şi s sunt separabile, atunci p şi q sunt separabile (şi se pune × ı̂n căsuţa
corespunzătoare lor).
Revenind la exemplu, pentru (a, b) avem (δ(b, a), δ(a, 1)) = (c, f ), separabilă. Deci se
pune × ı̂n locaţia (a, b).
Se procedează astfel cât timp este posibil.
În final se obţin stările echivalente a ≡ e, b ≡ h, d ≡ f .
Folosind Propoziţia 2.3, se ajunge la automatul
42CAPITOLUL 2. TEOREME DE REPREZENTARE PENTRU LIMBAJELE REGULATE

 0 Z~
Z
a, e  1
  
6
? 0
7 S1
0
-
b, h S - g 0
 
 ?
 
S
 w
S
? 1 - c  0 d, f 1 -6

 
?-6
1

Corectitudinea acestui algoritm este dată de

Propoziţia 2.4 Fie M = (q, V, δ, q0 , F ) un AF D. Atunci stările p şi q sunt separabile


dacă şi numai dacă poziţia din tabel a lui (p, q) este marcată.

Demonstraţie:
”=⇒”: Fie p, q ∈ Q două stări separabile şi α ∈ V ∗ cel mai scurt drum care le face
separabile (δ(p, α) ∈ F şi δ(q, α) 6∈ F , sau invers).
Vom arăta – prin inducţie după lungimea lui α – că poziţia din tabel a lui (p, q) este
marcată.
Dacă α = , atunci una şi numai una din stările p, q este finală, şi, conform construcţiei
tabelului, se face marcarea.
Presupunem afirmaţia adevărată pentru |α| < i, ∀i ≥ 1, şi să considerăm |α| = i.
Atunci α = aβ şi fie t = δ(p, a), u = δ(q, a).
Stările t şi u sunt distinse prin β (δ(t, β) = δ(p, α), δ(u, β) = δ(q, α)) şi |β| = i − 1.
Conform ipotezei de inducţie, (t, u) este marcată şi, folosind regula de marcare, marcăm
şi (p, q).
”‘⇐=”: Se face o inducţie similară după numărul de perechi marcate. q.e.d.

Dacă renunţăm la condiţia ca automatul M să aibă funcţia de tranziţie total definită,
este posibil să mai micşorăm numărul stărilor sale, renunţând la stările inaccesibile (cu
Algoritmul 1.1 – Capitolul 1) şi la stările care nu sunt legate de stări finale prin nici un
drum (cum sunt de exemplu stările eroare).
Acest ultim tip de eliminare se bazează pe rezultatul următor:

Lema 2.3 Fie M = (Q, V, δ, q0 , F ) un AF D cu toate stările accesibile. Există atunci un


AF D M 0 echivalent, cu proprietatea
∀q ∈ Q, ∃α ∈ V ∗ cu δ(q, α) ∈ F.

Demonstraţie: Pentru fiecare stare qk ∈ Q se construieşte automatul Mk = (Q, V, δ, qk , F ).


Cu ajutorul Propoziţiei 2.1 putem decide dacă τ (Mk ) 6= ∅.
2.2. TEOREMA MYHILL - NERODE ŞI APLICAŢII 43

Automatul căutat este M 0 = (Q0 , V, δ 0 , q0 , F ), unde

Q0 = {qk | qk ∈ Q \ F, τ (Mk ) 6= ∅} ∪ F, δ 0 = δ|Q0 ×V .

Egalitatea τ (M 0 ) = τ (M ) este evidentă dacă se folosesc grafurile de tranziţie ale celor


două automate.

Exemplul 2.7 Fie AF D definit prin graful de tranziţie

R 0
@ -

q0  q1
 0 
1? 1 q1

 

?
q2 H q3 q2 ×0 ×0

 H1 0 

H q3 ×0 ×0
0 HHH 1

? j
H ? q4 ×0 ×0
q4 1 - q5

 
q5 ×1 ×1 ×0 ×0 ×0
?-6 ?-6 q0 q1 q2 q3 q4
0 0, 1

Tabela pentru construcţia AF D-ului cu număr minim de stări este reprezentată ı̂n
dreapta.
Am notat cu ×0 marcarea iniţială şi cu ×1 marcarea la prima trecere prin tabel.
La a doua trecere nu s-a mai efectuat nici o marcare.
Deci q0 ≡ q1 , q2 ≡ q3 ≡ q4 . Graful de tranziţie al noului automat este
0- 0- 0, -
1

6 ? 

6 ? 
6 ?
~q , q
Z
Z
0 1
1 - 2 , q3
q 1 - q5

q 4
  

Acesta nu are ı̂nsă efectiv un număr minim de stări, deoarece τ (M5 ) = ∅; deci starea q5
– ı̂mpreună cu toate arcele legate de ea – se poate elimina.
În final se obţine automatul de mai jos (unde stările au fost renotate):
Q
s 

1
 -
0 - q 0
0? q
- 0 1 ? 0
 


Observaţia 2.3 Teorema Myhill - Nerode completează Lema de pompare. Astfel, va-
loarea minimă lui n din Lema de pompare este n0 = |Q|, unde Q este mulţimea stărilor
automatului minimal construit pe baza Teoremei Myhill - Nerode.
44CAPITOLUL 2. TEOREME DE REPREZENTARE PENTRU LIMBAJELE REGULATE

2.3 Exerciţii
Exerciţiul 2.1 Să se construiască un algoritm care să decidă dacă τ (M ) = ∅, M fiind
un automat finit determinist.

Exerciţiul 2.2 Să se arate că problema apartenenţei este decidabilă pentru limbajele re-
gulate: se poate construi un algoritm care, pentru un limbaj regulat L ⊆ V ∗ şi un cuvânt
w ∈ V ∗ , poate decide dacă w ∈ L.

Exerciţiul 2.3 Să se demonstreze Lema de pompare cu variantele (10 ) şi (1”) din Obser-
vaţia 2.1.

Exerciţiul 2.4 Să se arate că limbajele {an | n prim } şi {an b2n | n ≥ 0} nu sunt
regulate.

Exerciţiul 2.5 Să se arate că limbajul L = {α | α ∈ {a, b}∗ , |α|a = |α|b } verifică Lema
de pompare.

Exerciţiul 2.6 Să se arate că ≡L este o relaţie de echivalenţă, invariantă la dreapta.

Exerciţiul 2.7 Fie S o mulţime de bază şi x, y ∈ S cu x ≡L y. Să se arate că S 0 = S\{x}
este tot o mulţime de bază.

Exerciţiul 2.8 Să se construiască mulţimi de bază pentru limbajele


L1 = {an bm cp | m, n, p ≥ 1}, L2 = {α00β | α, β ∈ {0, 1}∗ }

Exerciţiul 2.9 Folosind Teorema Myhill - Nerode, să se arate că limbajele definite ı̂n
Exerciţiul 2.4 nu sunt regulate.

Exerciţiul 2.10 Să se formalizeze algoritmul utilizat ı̂n demonstraţia Propoziţiei 2.3.
Capitolul 3

Gramatici clasificabile Chomsky

3.1 Sisteme de rescriere


Fie V un alfabet finit. După cum am văzut, orice submulţime L ⊆ V ∗ se numeşte limbaj.
În primele două capitole am dezvoltat un studiu al modalităţii de definire şi de re-
cunoaştere pentru limbajele regulate.
În acest capitol vom extinde acest studiu pentru o clasă arbitrară de limbaje.
Un limbaj este finit dacă are un număr finit de cuvinte; altfel, limbajul se consideră
infinit.
Pentru limbajele finite, o manieră des folosită de definire constă ı̂n listarea tuturor
cuvintelor care le conţin.
Aceasta nu este bineı̂nţeles posibil totdeauna.
De exemplu, limbajul tuturor secvenţelor binare de lungime 10 cuprinde 210 = 1024
cuvinte; listarea lor este mult mai complicată decât am scrie
L = {α | α ∈ {0, 1}∗ , |α| = 10}.
Aici dificultatea a constat ı̂n numărul de cuvinte care – deşi finit – este foarte mare.
Dar aceasta nu este singura dificultate ! Astfel, să construim limbajul următor:
Fie
W = {(m, n, p, k) | m, n, p, k ∈ N , k > 2, mk + nk = pk } şi

L = {x | x = 1 dacă W 6= ∅, x = 0 dacă W = ∅}.


L este un limbaj finit, cu un singur element. Dar acest element nu a putut fi specificat
decât ı̂n 1995 când a fost rezolvată marea teoremă a lui Fermat !
Deci şi pentru limbajele finite apar probleme ı̂n reprezentare, nu numai pentru limba-
jele infinite.

45
46 CAPITOLUL 3. GRAMATICI CLASIFICABILE CHOMSKY

În capitolele anterioare am folosit două modalităţi de definire a limbajelor:

1. Definirea cu ajutorul mulţimilor: se specifică o secvenţă de proprietăţi, după care


limbajul asociat este considerat ca fiind mulţimea tuturor cuvintelor care satisfac
acele proprietăţi.
Este o metodă folosită aproape universal, toate celelalte maniere de definire făcând
referire la ea.

Exemplul 3.1
L1 = ∅, L2 = {an | n prim },
L3 = {α|α| | α ∈ {a, b}∗ }, L4 = {α | α ∈ {a, b}∗ , |α|a = |α|b }.

2. Metodă de recunoaştere: constă dintr-un procedeu care – aplicat unui cuvânt – ı̂l
acceptă dacă acesta este ı̂n limbaj, sau ı̂l respinge – dacă nu este.
Automatele finite sunt o astfel de manieră de definire a unei clase de limbaje: lim-
bajele regulate.

Exemplul 3.2 Fie limbajul regulat L acceptat de AF D-ul:



 s a -
q2  c Q
Q
q0 q1

   
b
Să cercetăm dacă un cuvânt fixat α este sau nu ı̂n limbajul L; algoritmul aplicat pentru
a decide acest fapt este cel din Capitolul 1: testăm dacă δ(q0 , α) ∈ F ; ı̂n caz afirmativ,
α ∈ L, altfel răspunsul este α 6∈ L.
De exemplu, pentru α = (ab)2 c se obţine δ(q0 , (ab)2 c) = q2 ∈ F , deci (ab)2 c ∈ L.
În schimb, pentru α = aba, δ(q0 , aba) = q1 6∈ F , deci aba 6∈ L.
La fel, pentru α = abb, δ(q0 , abb) = δ(q0 , b) = nedefinit, deci abb 6∈ L.

Exemplul 3.3 Fie L un limbaj definit ı̂n felul următor:


”α ∈ L ⇐⇒ α poate fi redus la  printr-un şir de ı̂nlocuiri succesive ale lui ab cu .”
Deci, ı̂n particular, α = aabbab ∈ L deoarece – aplicând regula dată – se obţine pe
rând: aabbab −→ abab −→ ab −→ .
Similar, , aabb, a(ba)5 b sunt cuvinte din limbaj.
În schimb α = baabba nu este ı̂n L, pentru că reducerea nu este totală:
baabba −→ baba −→ ba şi regula de reducere nu se mai poate aplica.

Înafară de aceste modalităţi de definire a limbajelor, foarte des folosită este şi
3.1. SISTEME DE RESCRIERE 47

3. Metoda generativă: este o metodă care, folosind ca bază un set de axiome, efectuează
generarea recursivă a limbajului.

Exemplul 3.4 Fie următoarea definire recursivă a limbajului L:

1.  ∈ L;

2. Dacă α ∈ L atunci aαb, bαa ∈ L;

3. Dacă α, β ∈ L atunci αβ ∈ L;

4. L nu conţine alte cuvinte.

Să arătăm că L = L4 (L4 dat ı̂n Exemplul 3.1).


”⊆”:  are proprietatea cerută de L4 . Cu regulile (2) şi (3) se obţin numai cuvinte ı̂n
care 0 a0 şi 0 b0 apar de un număr egal de ori (deci cuvinte din L4 ).
”⊇”: Prin inducţie după lungimea lui α:
Dacă |α| = 0, atunci α =  care – conform cu (1) – este ı̂n L.
Presupunem acum că L conţine toate cuvintele de lungime cel mult 2k, cu un număr
egal de 0 a0 şi 0 b0 , şi fie α ∈ L4 cu |α| = 2(k + 1).
Apar patru posibilităţi:

α = aα0 b, α = bα0 a, α = aα”a, α = bα”b.

Primele două cazuri sunt similare şi vom trata numai unul din ele.
La fel ultimele două cazuri.

• α = aα0 b :
Aici |α0 |a = |α|a − 1 = k, |α0 |b = |α|b − 1 = k, deci α0 ∈ L4 .
Ipoteza de inducţie asigură α0 ∈ L.
Utilizând acum axioma (2) de construcţie a lui L, obţinem aα0 b = α ∈ L.

• α = aα”a :
Fie funcţia f : V ∗ −→ Z definită f (w) = |w|a − |w|b .
Evident, f (xy) = f (x) + f (y).
În cazul nostru, să considerăm α = a1 a2 . . . a2k+1 a2k+2 unde a1 = a2k+2 = a.
Din ipoteză, vom avea f (a1 a2 . . . a2k+1 a2k+2 ) = 0.
În plus, ∀n (1 ≤ n ≤ 2k +1), f (a1 . . . an+1 ) = f (a1 . . . an )±1, pentru că f (an+1 ) = 1
dacă an+1 = a, f (an+1 ) = 1 dacă an+1 = b.
48 CAPITOLUL 3. GRAMATICI CLASIFICABILE CHOMSKY

Această proprietate de ”continuitate” a lui f , la care se adaugă


f (a1 ) = 1, f (a1 . . . a2k+1 ) = −1,
duce la concluzia că există cuvintele α1 , α2 ∈ V ∗ cu α = α1 α2 şi f (α1 ) = 0.
Deci, cum f (α) = 0, vom avea şi f (α2 ) = 0, ceea ce ı̂nseamnă că α1 α2 ∈ L4 , cu
|α1 | ≤ 2k, |α2 | ≤ 2k.
Ipoteza de inducţie asigură că α1 , α2 ∈ L, iar cu axioma (3) din definirea lui L,
α = α1 α2 ∈ L.

Dintre cele trei modalităţi de descriere a limbajelor, ne vom ı̂ndrepta atenţia asupra
ultimelor două procedee.
Definirea cu ajutorul mulţimilor este o definire amorfă, statică, foarte utilă pentru
referinţe, nu şi pentru aplicarea ı̂n practică, pentru lucrul efectiv cu limbaje.
Ambele maniere de definire a limbajelor (generativă şi de recunoaştere) au o trăsătură
fundamentală comună: sunt proceduri ı̂n care cuvintele se obţin unele din altele prin
rescrierea anumitor subcuvinte.
Astfel, ı̂n Exemplul 3.3, fiecare subcuvânt ab era rescris ; ı̂n Exemplul 3.4, fiecare α
era rescris , aαb, bαa sau αα.
Să formalizăm această obseervaţie:
Definiţia 3.1 Un sistem de rescriere este o pereche ordonată SR = (W, P ) unde W este
un alfabet finit şi nevid, iar P ⊂ W ∗ × W ∗ este o mulţime finită de perechi de cuvinte,
numite reguli de rescriere.

Definiţia 3.2 Fie SR = (W, P ) un sistem de rescriere şi α, β ∈ W ∗ .


• α generează direct β şi scriem α =⇒ β dacă şi numai dacă ∃α1 , β1 , γ1 , γ2 ∈ W ∗
astfel ı̂ncât α = γ1 α1 γ2 , β = γ1 β1 γ2 şi (α1 , β1 ) ∈ P .

• α generează β şi scriem α =⇒ β dacă şi numai dacă ∃α0 , α1 , . . . , αk ∈ W ∗ (k ≥ 0)
astfel ı̂ncât α0 = α, αk = β şi αi =⇒ αi+1 (0 ≤ i ≤ k − 1).
Secvenţa α0 =⇒ α1 =⇒ . . . =⇒ αk se numeşte ”derivare” a lui α.

Deci =⇒ este o relaţie binară pe W ∗ , iar =⇒ este ı̂nchiderea ei reflexivă şi tranzitivă1 .
O relaţie τ ∗ este ı̂nchiderea reflexiv-tranzitivă a relaţiei τ pe mulţimea A dacă şi numai dacă sunt
1

verificate condiţiile:
1. xτ ∗ x, ∀x ∈ A;

2. xτ y & yτ z =⇒ xτ ∗ z;
3. Relaţia xτ ∗ y poate fi stabilită numai prin aplicarea condiţiilor (1) şi (2) de un număr finit de ori.
3.1. SISTEME DE RESCRIERE 49

Exemplul 3.5 Fie sistemul de rescriere SR = (W, P ) unde W = {a, b, c} şi


P = {(ba, ab), (ca, ac), (cb, bc)}.
Să construim câteva derivări ı̂n acest context.
Din α = bacb se pot efectua două generări directe:
1. bacb =⇒ abcb (s-a folosit notaţia β = abcb, γ1 = , γ2 = cb, α1 = ba, β1 = ab)
2. bacb =⇒ babc (aaici γ1 = ba γ2 = , α1 = cb, β1 = bc).
Deci cuvântul bacb poate genera direct atât pe abcb cât şi pe babc.
Să construim acum toate derivările posibile plecând de la cuvântul α = ccbca.
Vom avea
ccbca =⇒ cbcca =⇒ bccca =⇒ bccac =⇒ bcacc =⇒ baccc =⇒ abccc
ccbca =⇒ cbcca =⇒ cbcac =⇒ bccac =⇒ bcacc =⇒ baccc =⇒ abccc
ccbca =⇒ cbcca =⇒ cbcac =⇒ cbacc =⇒ bcacc =⇒ baccc =⇒ abccc
ccbca =⇒ cbcca =⇒ cbcac =⇒ cbacc =⇒ cabcc =⇒ acbcc =⇒ abccc
ccbca =⇒ ccbac =⇒ cbcac =⇒ bccac =⇒ bcacc =⇒ baccc =⇒ abccc
ccbca =⇒ ccbac =⇒ cbcac =⇒ cbacc =⇒ bcacc =⇒ baccc =⇒ abccc
ccbca =⇒ ccbac =⇒ cbcac =⇒ cbacc =⇒ cabcc =⇒ acbcc =⇒ abccc
ccbca =⇒ ccbac =⇒ ccabc =⇒ cacbc =⇒ cabcc =⇒ acbcc =⇒ abccc
ccbca =⇒ ccbac =⇒ ccabc =⇒ cacbc =⇒ accbc =⇒ acbcc =⇒ abccc
Acest sistem de rescriere efectuează de fapt o ordonare lexicografică a caracterelor
cuvântului α. Formal, ∀α ∈ W ∗ cu |α|a = i, |α|b = j, |α|c = k, este posibilă derivarea

α =⇒ ai bj ck .
Exemplul 3.6 Fie sistemul de rescriere SR = (W, P ) cu W = {a, A, B, .} şi regulile
P = {(Ba, aB), (Aa, aBA), (A, ), (a., .A), (.a, .), (., ), (B, a)}.
| {z } | {z } | {z } | {z } | {z } | {z } | {z }
1 2 3 4 5 6 7

Să arătăm că este posibilă derivarea ai .aj =⇒ aij , ∀i, j ≥ 0.
Pentru uşurinţa referirii, regulile de rescriere au fost numerotate.

Dacă i = 0, avem .aj =⇒ |{z} . =⇒
0
|{z}  = a = a
0·j

5 6
∗ ∗
Similar, pentru j = 0 : ai . =⇒ i
|{z} .A =⇒
i
|{z} A =⇒
0
|{z}  = a = a
i·0

4 6 3
Să presupunem i > 0, j > 0. Atunci vom avea
j−1 ∗ j ∗
ai .aj =⇒ i−1 j
|{z} a .Aa =⇒
i−1
|{z} a .aBAa =⇒ i−1 j i−1
|{z} a .(aB) =⇒
|{z} a .(aB) A =⇒
i−1 j j
|{z} a .a B
4 2 2 3 1
Procedeul este reluat pentru cuvântul ai−1 .aj şi se obţine similar ai−2 .aj B j . Deci
i j ∗
a .a =⇒ ai−2 .aj B 2j . Repetând procedeul până la epuizarea a-urilor din faţa punctului, se
ajunge la
∗ ∗ ij ∗
ai .aj =⇒ .aj B ij =⇒ ij
|{z} .B =⇒|{z} B =⇒
|{z} a
ij

5 6 7
50 CAPITOLUL 3. GRAMATICI CLASIFICABILE CHOMSKY

Definiţia 3.3 Se numeşte metodă generativă a limbajului L structura


Mg (L) = (SR, AX, X) unde:
• SR = (W, P ) este un sistem de rescriere;

• AX ⊂ W ∗ este o mulţime finită de elemente numite ”axiome”;

• X ⊂ W este o mulţime numită ”mulţime de bază”, AX ∩ X = ∅;



• L = {α | α ∈ X ∗ , ∃β ∈ AX, β =⇒ α}.

Definiţia 3.4 Se numeşte metodă de recunoaştere a limbajului L structura


Mr (L) = (SR, AX, X), unde SR, AX şi X au aceeaşi semnificaţie ca mai sus, iar

L = {α | α ∈ X ∗ , ∃β ∈ AX, α =⇒ β}

Exemplul 3.7 Să construim o metodă de recunoaştere care să accepte toate numerele
naturale divizibile cu 3.
Ideea construcţiei se bazează pe criteriul de divizibilitate cu 3: vom transforma fiecare
număr ı̂n restul său modulo 3. Dacă ı̂n final se obţine , numărul va fi acceptat.
Deci W = {0, 1, 2, . . . , 9}, X = W, AX = {},
P = {(0, ), (3, ), (4, 1), (5, 2), (6, ), (7, 1), (8, 2), (9, ), (11, 2), (12, ), (21, ), (22, 1)}.
De exemplu, 265 =⇒ 25 =⇒ 22 =⇒ 1, deci 265 nu se divide cu 3.
În schimb 8457 =⇒ 2457 =⇒ 2157 =⇒ 57 =⇒ 27 =⇒ 21 =⇒ , deci 8457 este un
număr divizibil cu 3.

Exemplul 3.8
• Limbajul definit ı̂n Exemplul 3.3 poate fi scris ca o metodă de recunoaştere astfel:
W = {a, b}, P = {(ab, )}, AX = {}, X = W .

• Limbajul L4 (tratat şi ı̂n Exemplul 3.4) poate fi definit prin metoda generativă:
W = {a, b, c}, P = {(x, ), (x, axb), (x, bxa), (x, xx)}, AX = {x}, X = {a, b}.

Propoziţia 3.1 AF sunt metode de recunoaştere a limbajelor regulate.

Demonstraţie: Fie M = (Q, V, δ, q0 , F ) un AF D cu L(M ) = L; fără a micşora gene-


ralitatea putem presupune Q ∩ V = ∅. Construim Mr (L1 ) astfel:
W = Q ∪ V, P = {(pa, q) | δ(p, a) = q} ∪ {(a, q0 a) | a ∈ V }, AX = F, X = V .
Mai rămâne de arătat că L = L1 , unde – conform Definiţiei 3.4,

L1 = {α | α ∈ V ∗ , ∃q ∈ F cu α =⇒ q}.
”⊆”: Fie α ∈ L; deci α = a1 a2 . . . ak şi există o secvenţă de stări q0 , q1 , . . . , qk astfel
ı̂ncât qk ∈ F şi δ(qi , ai+1 ) = qi+1 (0 ≤ i ≤ k − 1).
3.2. GRAMATICI, CLASIFICAREA CHOMSKI 51

Din construcţia lui Mr (L1 ) avem (qi ai+1 , qi+1 ) ∈ P (0 ≤ i ≤ k−1). În plus, (a1 , q0 a1 ) ∈ P .
Deci avem generarea

α = a1 a2 . . . ak =⇒ q0 a1 a2 . . . ak =⇒ . . . =⇒ qk−1 ak =⇒ qk

de unde rezultă concluzia α ∈ L1 .



”⊇”: Fie α ∈ L1 ; deci există q ∈ AX cu α =⇒ q.
Primul pas al generării foloseşte obligatoriu o regulă de rescriere de forma (a, q0 a), care
introduce q0 ı̂n faţa lui α. Orice inserare a lui q0 cu o astfel de regulă ı̂n interiorul
cuvântului conduce la un blocaj, deoarece cuvintele de forma βqγ cu β 6= , nu pot fi
reduse la o singură stare, ci – ı̂n cel mai bun caz – la o secvenţă de minimum două stări.
Din acelaşi motiv, o astfel de regulă se aplică o singură dată, la prima generare directă.
În continuare, raţionamentul este similar celui de la implicaţia inversă. q.e.d.
Pentru AF N -uri modificările din demonstraţie sunt minore.

3.2 Gramatici, clasificarea Chomski


Aşa cum – ı̂n general – metodele de recunoaştere pentru diverse clase de limbaje sunt
automatele sau modelări similare, cele mai cunoscute metode generative utilizate ı̂n teoria
limbajelor formale sunt gramaticile.

Definiţia 3.5 Se numeşte gramatică o meetodă generativă Mg (L) = (SR, AX, X) cu


următoarele proprietăţi:

• W este partiţionat ı̂n două mulţimi nevide VN şi VT , umite ”alfabet de neterminale”
şi respectiv ”alfabet de terminale”;

• X = VT ;

• ∃S ∈ VN şi AX = {S};

• ∀(α, β) ∈ P , α este un cuvânt nevid care conţine cel puţin un element din VN .

Observaţia 3.1 O gramatică se notează de obicei G = (VN , VT , S, P ).


Noţiunile de derivare, generare directă, generare, se păstrează.
O componentă αi a unei derivări se numeşte ”formă sentenţială”.
S mai poartă numele de ”simbol de start”.
(α, β) ∈ P se notează α −→ β şi se numeşte ”regulă de producţie” sau – mai simplu
– ”producţie”.

L = L(G) = {w | w ∈ VT∗ , S =⇒ w} se numeşte ”limbajul generat” de gramatica G.
52 CAPITOLUL 3. GRAMATICI CLASIFICABILE CHOMSKY

Prin convenţie – dacă nu există specificaţii speciale – elementele din VN (numite şi atribute)
se notează cu litere latine mari (A, B, C, . . .), iar cele din VT cu litere latine mici de
la ı̂nceputul alfabetului (a, b, c, . . .). Cuvintele (elementele lui W ∗ ) se notează cu litere
latine mici de la sfârşitul alfabetului (w, x, y, . . .) sau cu litere greceşti mici (α, β, γ, . . .).
Eventual literele pot fi indexate.

Exemplul 3.9 Să considerăm gramatica G = (VN , VT , S, P ) ı̂n care


VN = {S}, VT = {a, b}, P = {S −→ aSb|}
(adesea se utilizează notaţia α −→ β1 |β2 | . . . |βn ca o prescurtare pentru setul de producţii
α −→ β1 , α −→ β2 , . . . , α −→ βn ; caracterul | este un metasimbol care nu apare ı̂n W ,
folosit frecvent drept separator cu rol de alternativă).

Conform definiţiei, limbajul generat este L = {α | α ∈ {a, b}∗ , S =⇒ α}.
Să studiem proprietăţile unei derivări ı̂n această gramatică.
Fie o derivare de lungime n (n ≥ 1 arbitrar fixat)
s = α0 =⇒ α1 =⇒ α2 =⇒ . . . =⇒ αn = α

• Toate formele sentenţiale αi (ı̂nafară de ultima) sunt cuvinte formate dintr-o sin-
gură apariţie a neterminalului S (producţia S −→ aSb nu introduce mai multe
neterminale decât erau anterior), ı̂nsoţite de apariţii ale terminalelor 0 a0 şi 0 b0 .

• Generarea αi =⇒ αi+1 , (0 ≤ i ≤ n − 2) se face numai prin folosirea producţiei


S −→ aSb. Cu regula S −→  se şterge singurul neterminal existent ı̂n formele
sentenţiale, ajungându-se la un cuvânt din VT∗ (deci din L). Rezultă că S −→  este
ultima producţie utilizată ı̂n derivare.

Cu aceste observaţii tragem concluzia că este posibilă o singură derivare de lungime n:
S =⇒ aSb =⇒ a2 Sb2 =⇒ . . . =⇒ an−1 Sbn−1 =⇒ an−1 bn−1 dacă n > 1,
S =⇒  dacă n = 1.
Deci
L = L(G) = {an bn | n ≥ 0}.

Exemplul 3.10 Limbajul generat de gramatica G = ({S}, {a}, S, {S −→ aS}) este


L(G) = ∅. Aceasta se datoreşte observaţiei că prin singura producţie existentă (S −→ aS)
neterminalul S se păstrează permanent, deci nu se ajunge niciodată la un cuvânt w ∈ VT∗

obţinut prin derivarea S =⇒ w.

Exemplul 3.11 Să considerăm mulţimea

L = {an bn cn | n ≥ 1}

O gramatică pentru generarea ei este G = (VN , VT , S, P ) unde


3.2. GRAMATICI, CLASIFICAREA CHOMSKI 53

VN =({S, B, C}, VT = {a, b, c} şi


1. S −→ aSBC 3. CB −→ BC 5. bB −→ bb 7. cC −→ cc
P =
2. S −→ aBC 4. aB −→ ab 6. bC −→ bc
(producţiile au fost numerotate pentru a ne referi mai uşor la ele).
Să arătăm că L = L(G).

”⊆”: Fie an bn cn ∈ L; aplicând regula 1. de n − 1 ori, obţinem S =⇒ an−1 S(BC)n−1 .

Apoi, cu producţia 2., S =⇒ an S(BC)n ; cu 3. neterminalele B şi C se rearanjează ı̂n aşa

fel ı̂ncât toate B-urile să preceadă C-urile: S =⇒ an B n C n . Producţia 4. utilizată odată

şi 5. utilizată de n − 1 ori dau S =⇒ an bn C n (deoarece n ≥ 1, regula 4. se aplică ı̂n mod
cert). În sfârşit, cu producţia 6. utilizată odată, urmată de n − 1 aplicări ale regulii 7. se
ajunge la an bn cn .
”⊇”: În orice derivare care pleacă din S, producţiile 4.−7. nu pot fi folosite decât după
aplicarea regulii 2. (aceasta aduce terminalul 0 a0 la stânga lui B). Utilizarea producţiei 1.
de n ori duce la forma sentenţială an S(BC)n , (n ≥ 1). Apoi, cu regula 2. (care nu poate
fi aplicată decât odată) se obţine forma sentenţială an+1 (BC)n+1 .
Dacă n = 0, se ı̂ncepe direct cu aplicarea producţiei 2. şi avem aBC.
Deci, după dispariţia lui S se ajunge la forma sentenţială an (BC)n cu n ≥ 1. Din
acest moment producţiile 1. şi 2. nu mai pot fi folosite, iar orice aplicare a uneia din
regulile 3. − 7. duce la cuvinte de forma αβ cu α ∈ VT∗ , β ∈ VN∗ . Mai mult, producţiile
4. − 7. se pot aplica numai subcuvintelor de lungime 2, care constituie interfaţa dintre α
şi β, având ca efect transformarea unui neterminal din β (un B ı̂n 0 b0 sau un C ı̂n 0 c0 ).
Deci cuvântul final w va satisface condiţia |w|a = |w|b = |w|c .
Să presupunem acum că un C este transformat ı̂n 0 c0 ı̂nainte ca toate B-urile să fi fost
transformate ı̂n 0 b0 -uri. Atunci forma sentenţială la care se ajunge este an bi cα cu i < n
şi |α|B > 0. În acest moment se mai pot aplica doar producţiile 3. sau 7.; regula 7. la
interfaţa terminal/neterminal, iar regula 3. ı̂ntre două neterminale consecutive. Producţia
3. reordonează neterminalele, dar nu poate să-l elimine pe B. Producţia 3. generează
0 0
c -uri până când apare subcuvântul cB; ı̂n acest moment nu se mai poate aplica nici
o regulă 3. şi derivarea se blochează fără a se obţine nici un cuvânt din L(G). Deci
trebuie transformate ı̂n 0 b0 -uri toate neterminalele B aflate pe prima poziţie ı̂n secvenţa
de neterminale; când acest lucru nu mai este posibil, s-a ajuns la un cuvânt de forma
an bn C n . Transformarea ulterioară a C-urilor ı̂n 0 c0 -uri (cu producţiile 6. şi 7.) duce ı̂n
final la un cuvânt din L.

După anumite restricţii impuse regulilor de producţie, se poate defini următoarea clasifi-
care a gramaticilor – clasificare cunoscută sub numele de clasificare Chomsky:
54 CAPITOLUL 3. GRAMATICI CLASIFICABILE CHOMSKY

Definiţia 3.6 O gramatică G = (VN , VT , S, P ) este de tip i (0 ≤ i ≤ 3) dacă sunt


verificate restricţiile (i) asupra regulilor din P :
(0) : Nici o restricţie;
(1) : Orice producţie α −→ β ∈ P verifică condiţia |α| ≤ |β|; singura excepţie
posibilă o constituie regula S −→ ; apariţia ei impune condiţia suplimentară ca simbolul
de start S să nu apară ı̂n membrul drept al nici unei producţii din P ;
(2) : Toate regulile din P sunt de forma A −→ α, A ∈ VN , α ∈ (VN ∪ VT )∗ ;
(3) : P are numai producţii de forma A −→ bB sau A −→ a, unde A, B ∈ VN , b ∈
VT , a ∈ VT ∪ {}.

Observaţia 3.2

• Tipurile de gramatici definite ı̂n acest mod se numesc gramatici clasificabile Chom-
sky, pentru a le deosebi de alte clase de gramatici cu proprietăţi generative dar
construite diferit, cum ar fi gramaticile matriciale, indexate, programate, contex-
tuale etc.

• Gramaticile de tipul 3 se numesc şi gramatici regulate, dintr-un motiv care va fi


explicitat mai târziu.

• Gramaticile de tipul 2 se numesc şi independente de context (cfg – context-free


grammars), deoarece o producţie de forma A −→ α rescrie neterminalul A prin
cuvântul α, independent de contextul ı̂n care apare A.

• Gramaticile de tipul 1 se numesc dependente (senzitive) de context (csg)


deoarece ele mai pot fi definite ı̂n felul următor: P conţine numai producţii de
forma α1 Aα2 −→ α1 βα2 cu A ∈ VN , α1 , α2 ∈ (VN ∪ VT )∗ , β 6= . O regulă
α1 Aα2 −→ α1 βα2 arată că neterminalul A se rescrie β numai dacă A apare ı̂n
contextul (α1 , α2 ) (aceste noţiuni vor fi detaliate ı̂n Capitolul 7).

Un limbaj L este de tip i dacă este generat de o gramatică de tip i.


Familia limbajelor de tip i este notată Li . Din definiţie rezultă şirul de incluziuni
L3 ⊆ L2 ⊆ L1 ⊆ L0
Una din principalele probleme – pe care vom ı̂ncerca să o rezolvăm ulterior – este de
a decide dacă aceste incluziuni sunt stricte sau nu.
3.3. EXERCIŢII 55

3.3 Exerciţii
Exerciţiul 3.1 Să se definească metode de recunoaştere şi metode generative pentru lim-
bajele L1 = {an | n ≥ 0}, L2 = {an bn | n ≥ 0}, L3 = {an bn cn | n ≥ 0}.

Exerciţiul 3.2 Fie metoda de recunoaştere: α ∈ L dacă şi numai dacă


1. α ∈ {a, b}∗ , 2. |α| divizibil cu 3,
3. α = aβb, 4. a3 nu este subcuvânt al lui α.
Să se construiască un AF care să accepte acest limbaj.

Exerciţiul 3.3 Fie metoda de recunoaştere: α ∈ L dacă şi numai dacă

1. α = an (n ≥ 1),

2. ∃k impar unic astfel ca α0 = an−k ∈ L.


2
Să se arate că limbajul {ap | p ∈ N } este recunoscut de această metodă.

Exerciţiul 3.4 Fie metoda generativă pentru limbajul L ⊆ {a, b}∗ :


1.  ∈ L;
2. Dacă α ∈ L atunci aα, αb ∈ L;
3. L nu conţine alte cuvinte.
Să se determine limbajul L.

Exerciţiul 3.5 Se dă metoda generativă Mg (L) = (SR, AX, X) unde AX = {.X},
W = {X, Y, Z, ., a}, X = {a}, P = {(X, XY ), (X, a), (aY, Zaa), (aZ, Zaa), (.Z, .), (., )}.
n
Să se arate că L = {a2 | n ≥ 0}.

Exerciţiul 3.6 Pentru sistemul de rescriere definit ı̂n Exemplul 3.6 să se arate că este

posibilă derivarea ai .aj =⇒ ai+j , ∀i, j ≥ 0.

Exerciţiul 3.7 Se dă sistemul de rescriere SR = (W, P ) unde W = {a, A, B, C, .} şi


P = {(aA, Aa), (a.a, A.), (a., .B), ((B, a), (A, C), (c, a), (., )}.

Să se arate că este posibilă derivarea ai .aj =⇒ ak unde k = cmmdc(i, j).

Exerciţiul 3.8 Să se construiască o metodă de recunoaştere care să accepte toate cu-
vintele α ∈ {a, b, c}∗ care pot fi reduse la  dacă se şterg toate tripletele posibile abc (nu
neapărat consecutive) care apar ı̂n α (adică L = {α | α ∈ {a, b, c}∗ , |α|a = |α|b = |α|c }).

Exerciţiul 3.9 Să se construiască o metodă de recunoaştere pentru numerele pare.


56 CAPITOLUL 3. GRAMATICI CLASIFICABILE CHOMSKY

Exerciţiul 3.10 Să se arate că limbajul din Exemplul 3.9 poate fi generat şi de gramaticile
G = (VN , VT , S, P ) unde
a) VN = {S, A}, VT = {a, b}, P = {S −→ aA|, S −→ Sb}
b) VN = {S, A, B}, VT = {a, b}, P = {S −→ AB|, A −→ a, B −→ SB|b}.
Exerciţiul 3.11 Să se arate că limbajul L = {an bn cn | n ≥ 1} este generat de gramaticile
având producţiile
a) P1 = {S −→ aSBC|abC, CB −→ BC, bB −→ bb, bC −→ bc, cC −→ cc}
b) P2 = {S −→ aSA|aB, cA −→ Ac, BA −→ bBc, B −→ bc}
Exerciţiul 3.12 Se dă gramatica G = (VN , VT , S, P ) cu P = {S −→ aAcbA, bA −→
ca, Sc −→ cb, Acb −→ aSb}.
Să se determine dacă aacba ∈ L(G).
Exerciţiul 3.13 Să se construiască gramatici pentru generarea limbajelor
L1 = {an | n ≥ 0}, L2 = {w | w ∈ {a, b}∗ , |w|a = |w|b }, L3 = {ai caj | i ≥ j ≥ 0}.
Exerciţiul 3.14 Fie gramatica G = (VN , VT , S, P ) unde VN = {S, A}, VT = {a, b},
P = {S −→ aAb, aA −→ aaAb, A −→ }. Să se determine L(G).
Exerciţiul 3.15 Fie gramatica GX = (VN , VT , X, P ) cu VN = {A, B}, VT = {; , a, b},
P = {A −→ B|b; A, B −→ a|B; a}.
Să se afle L(GA ) şi L(GB ).
Exerciţiul 3.16 Similar exerciţiului precedent, fie VN = {A, B, C}, VT = {a, b} şi
P = {A −→ a|aC|bAA, B −→ b|bC|aBB, C −→ aB|bA}.
Să se afle L(GA ), L(GB ), L(GC ).
Exerciţiul 3.17 Fie gramatica G = (VN , VT , E, P ) unde VN = {E, T, F },
VT = {+, ∗, (, ), a}, ; P = {E −→ E + T |T, T −→ T ∗ F |F, F −→ (E)|a}. Să se arate că:
1. (a ∗ a + (a + a)) ∗ a, (a) + (a), (a + a) ∗ a ∈ L(G).
2. L(G) conţine toate expresiile aritmetice formate cu paranteze, operatorii +, ∗ şi
operandul 0 a0 .
Exerciţiul 3.18 Să se arate că limbajul generat de gramatica cu producţiile
S −→ ACaB, Ca −→ aaC, CB −→ DB, CB −→ E, aD −→ AC, AE −→ , aE −→ Ea
n
este L = {a2 | n ≥ 1}.
Exerciţiul 3.19 Să se arate că limbajul generat de o gramatică care are numai producţii
de forma A −→ Ba sau A −→ a este regulat.
Exerciţiul 3.20 Fie gramatica de producţii
P = {S −→ aAB|b, A −→ bBS|c, B −→ cSA|a}.
Câte cuvinte de lungime 5 sunt ı̂n L(G) ? Dar de lungime 100 ?
Capitolul 4

Proprietăţi de ı̂nchidere ale


limbajelor Chomsky

4.1 Noţiuni introductive


Fie L o familie arbitrară de limbaje peste un alfabet finit V .

Definiţia 4.1 L este ı̂nchisă faţă de o operaţie ◦ dacă


∀L1 , L2 ∈ L =⇒ L1 ◦ L2 ∈ L.

O problemă deosebit de importantă ı̂n teoria limbajelor formale este aceea a ı̂nchiderilor
unei clase de limbaje faţă de anumite operaţii. Proprietăţile de ı̂nchidere studiate aici
nu sunt singurele posibile; ne vom limita numai la operaţiile uzuale; de asemenea, vom
insista asupra celor mai utilizate clase de limbaje Chomsky: L2 şi L3 .
De menţionat că analiza anumitor proprietăţi de ı̂nchidere necesită noţiuni supli-
mentare; acestea vor fi abordate ulterior, ı̂n alte capitole.
Definiţia 4.2 Fie L1 şi L2 două limbaje arbitrare peste un alfabet V . Definim operaţiile
L1 ∪ L2 = {w | w ∈ L1 sau w ∈ L2 } (reuniune)
L1 ∩ L2 = {w | w ∈ L1 şi w ∈ L2 } (intersecţie)
L1 \ L2 = {w | w ∈ L1 şi w 6∈ L2 } (diferenţă)
L1 L2 = {w1 w2 | w1 ∈ L1 , w2 ∈ L2 } (concatenare)

Definiţia 4.3 Fie L un limbaj peste V . Se definesc operaţiile



L = V[ \L (complementară)
∗ i
L = L (ı̂nchidere Kleene sau ”stelare”)
i≥0
Li
[
L+ =
i≥1

57
58CAPITOLUL 4. PROPRIETĂŢI DE ÎNCHIDERE ALE LIMBAJELOR CHOMSKY

Reuniunea, concatenarea şi stelarea se numesc operaţii regulate.


Definiţia 4.4 Două gramatici G1 şi G2 se numesc echivalente dacă L(G1 ) = L(G2 ).
Pentru demonstrarea multor proprietăţi de ı̂nchidere sunt necesare câteva leme de carac-
terizare.

Lema 4.1 Pentru orice gramatică G = (VN , VT , S, P ) de tip i (0 ≤ i ≤ 3), există o


gramatică echivalentă G0 = (VN 0 , VT , S, P 0 ) de acelaşi tip, ı̂n care toate producţiile lui P 0
care conţin terminale sunt de forma A −→ a.

Demonstraţie: Pentru fiecare a ∈ VT se defineşte un neterminal nou Aa . Fie acum


VN 0 = VN ∪ {Aa | a ∈ VT }, iar P 0 obţinut din P prin ı̂nlocuirea tuturor terminalelor 0 a0
(oriunde apar) cu Aa , şi adăugarea ı̂n final a producţiilor Aa −→ a, ∀a ∈ VT .
Evident, G0 este tot o gramatică de tip i. Rămâne de arătat egalitatea L(G) = L(G0 ).

”⊆”: Fie w = a1 a2 . . . an ∈ L(G); deci există derivarea S =⇒ w. Aceeaşi derivare
construită ı̂n G0 va da forma sentenţială Aa1 Aa2 . . . Aan . Mai departe, aplicând noile
reguli introduse ı̂n G0 , fiecare Aaj va merge ı̂n aj (1 ≤ j ≤ n) şi se va obţine tot w.
”⊇”: Fie homomorfismul h : (VN 0 ∪ VT )∗ −→ (VN ∪ VT )∗ definit astfel:

h(Aa ) = a, ∀a ∈ VT , h(x) = x, ∀x ∈ VN ∪ VT .

Să considerăm o generare directă α =⇒ β, ı̂n gramatica G0 . Dacă s-a folosit o producţie
Aa −→ a, atunci h(α) = h(β); altfel h(α) =⇒ h(β).

În ambele cazuri avem h(α) =⇒ h(β) (derivare ı̂n G).
Deci, pentru orice w ∈ L(G0 ), vom avea o derivare ı̂n gramatica G:

S = h(S) =⇒ h(w) = w
adică w ∈ L(G). q.e.d.

Lema 4.2 Fie G = (VN , VT , S, P ) o gramatică independentă de context. Dacă AB =⇒ α
atunci există α1 , α2 ∈ (VN ∪ VT )∗ astfel ı̂ncât:
1. α = α1 α2 ;
∗ ∗
2. A =⇒ α1 , B =⇒ α2 .
n
Demonstraţie: Vom folosi o inducţie după lungimea n a derivării AB =⇒ α.
0
Pentru n = 0 avem AB =⇒ AB şi – dacă luăm α1 = A, α2 = B – afirmaţia este
evidentă.
n+1
Să presupunem lema adevărată pentru orice derivare de lungime n şi fie AB =⇒ α.
n
Punând ı̂n evidenţă ultimul pas al derivării, avem AB =⇒ γ =⇒ α, şi fie C −→ β a
(n + 1)-a producţie aplicată.
4.1. NOŢIUNI INTRODUCTIVE 59

∗ ∗
Conform ipotezei de inducţie, γ = α1 0 α2 0 şi A =⇒ α1 0 , B =⇒ α2 0 . Neterminalul C se
află ı̂n unul din cele două cuvinte: α1 0 sau α2 0 .
Să presupunem că α1 0 = β1 Cβ2 (dacă C se află ı̂n α2 0 , se procedează analog). Atunci
n
AB =⇒ β1 Cβ2 α2 0 =⇒ β1 ββ2 α2 0 = α

Vom lua α1 = β1 ββ2 , α2 = α2 0 ; se obţine


n+1 ∗ ∗
AB =⇒ α şi α = α1 α2 , A =⇒ β1 Cβ2 =⇒ β1 ββ2 = α1 , B =⇒ α1 0 = α2 . q.e.d.
Exemplul 4.1 Să luăm gramatica de producţii

S −→ aBC|b, B −→ bCS|c, C −→ cSB|a



În derivarea SB =⇒ accbcbab vom avea α1 = accbc, α2 = bab şi
S =⇒ aBC =⇒ acC =⇒ accSB =⇒ accbB =⇒ accbc,
B =⇒ bCS =⇒ baS =⇒ bab.

Observaţia 4.1
• Cuvintele α1 şi α2 nu sunt unic determinate. Astfel, pentru gramatica de producţii

S −→ SS|a, avem SS =⇒ aaa şi sunt două alegeri posibile: (α1 = a, α2 = aa),
sau (α1 = aa, α2 = a).

• Lema 4.2 poate fi generalizată pentru p neterminale; anume:


∗ ∗
Dacă A1 A2 . . . Ap =⇒ α, atunci α = α1 α2 . . . αp şi Ai =⇒ αi , (1 ≤ i ≤ p).

Lema 4.3 Orice gramatică regulată este echivalentă cu o gramatică care conţine numai
producţii de forma

A −→ αB, A −→ α, unde A, B ∈ VN , α ∈ VT∗ .

Demonstraţie: ”=⇒”: Fie G = (VN , VT , S, P ) o gramatică regulată; atunci ea va satisface


ı̂n mod banal condiţiile cerute de lemă.
”⇐=”: Fie A −→ αB o producţie de primul tip ı̂n gramatica G = (VN , VT , S, P ). Se
disting trei cazuri:
i. |α| = 1. Atunci producţia verifică condiţia cerută de o gramatică regulată şi rămâne
nemodificată.

ii. |α| ≥ 2. Dacă α = a1 a2 . . . an (n ≥ 2), se introduc n − 1 neterminale noi B1 , B2 , . . .


. . . , Bn−1 şi regula analizată se ı̂nlocuieşte cu producţiile

A −→ a1 B1 , B1 −→ a2 B2 , ... Bn−1 −→ an B.
60CAPITOLUL 4. PROPRIETĂŢI DE ÎNCHIDERE ALE LIMBAJELOR CHOMSKY


iii. α = . Se construieşte mulţimea N (B) = {D | B =⇒ D, D ∈ VN }; regula
A −→ B se ı̂nlocuieşte cu mulţimea de producţii {A −→ γC | D −→ γC ∈ P,
D ∈ N (B), γ 6= } ∪ {A −→ γ | D −→ γ ∈ P, D ∈ N (B)}.
De remarcat că este posibil ca mulţimea de reguli care ı̂nlocuieşte producţia A −→ B
să fie vidă.
Pentru o producţie de forma A −→ α (tipul doi) apar două situaţii:
iv. |α| ≤ 1. Producţia rămâne nemodificată.

v. |α| ≥ 2. Dacă α = b1 b2 . . . bn , atunci se introduc n − 1 neterminale noi C1 , C2 , . . .


. . . , Cn−1 şi regula A −→ α se ı̂nlocuieşte cu setul de producţii

A −→ b1 C1 , C1 −→ b2 C2 , ... Cn−1 −→ bn .

Se prelucrează pe rând fiecare regulă de tipul doi, apoi fiecare regulă de primul tip,
obţinându-se ı̂n final gramatica G0 = (VN 0 , VT , S, P 0 ) (eventualele producţii identice din
P 0 se elimină). Să arătăm că L(G) = L(G0 ).
”⊆”: Rezultă imediat din construcţia gramaticii G0 .
”⊇”: Fie w ∈ L(G0 ), w = a1 a2 . . . an , (n > 1). Deci există o derivare ı̂n G0 pentru w:

S =⇒ a1 X1 =⇒ a1 a2 X2 =⇒ ... =⇒ a1 a2 . . . an−1 Xn−1 =⇒ a1 a2 . . . an

Putem găsi atunci mulţimea tuturor neterminalelor Xi folosite ı̂n această derivare, cu
proprietatea Xi ∈ VN . Punând ı̂n evidenţă numai aceste neterminale Xi , avem
∗ ∗ ∗ ∗ ∗
S =⇒ a1 a2 . . . ai1 Xi1 =⇒ a1 a2 . . . ai2 Xi2 =⇒ ... =⇒ a1 a2 . . . aik Xik =⇒ a1 a2 . . . an

Din construcţia gramaticii G0 va rezulta că producţiile

S −→ a1 a2 . . . ai1 Xi1 , Xi1 −→ ai1 +1 . . . ai2 Xi2 , ... Xik −→ aik +1 . . . . . . an

sunt sau ı̂n P , sau – dacă Xij −→ aij +1 . . . aij+1 Xij+1 6∈ P , atunci ∃Y1 , Y2 , . . . , Yr ∈ VN
(r ≥ 1) cu Xij −→ Y1 , Y1 −→ Y2 , . . . , Yr −→ aij +1 . . . aij+1 Xij+1 producţii din P .
În acest fel, derivarea anterioară se poate scrie ca o derivare ı̂n gramatica G, deci
w ∈ L(G).
Dacă n = 1, atunci S −→ w ∈ P 0 , deci S −→ w ∈ P sau – altfel spus, w ∈ L(G).
q.e.d.
Exemplul 4.2 Fie gramatica de producţii

S −→ A|abc, A −→ aA|B, B −→ bbS|b


4.2. ÎNCHIDEREA LIMBAJELOR CHOMSKY FAŢĂ DE OPERAŢIILE REGULATE61

Conform Lemei 4.3, ea este echivalentă cu o gramatică regulată, construită astfel:


Producţiile A −→ aA şi B −→ b rămân nemodificate.
Pentru S −→ abc se introduc două neterminale noi C, D şi producţia se ı̂nlocuieşte cu
regulile S −→ aC, C −→ bD, D −→ c.
Pentru B −→ bbS este nevoie de un singur neterminal suplimentar – E, şi apar noile
reguli B −→ bE, E −→ bS.
Deci noua mulţime de neterminale este VN 0 = {S, A, B, C, D, E}, iar producţiile sunt

S −→ A|aC, A −→ aA|B, B −→ bE|b, C −→ bD, D −→ c, E −→ bS.

Mai trebuie eliminate două reguli: S −→ A şi A −→ B.


Se construiesc mulţimile N (A) = {A, B}, N (B) = {B}.
Producţia S −→ A se ı̂nlocuieşte cu S −→ aA|bE|b, iar A −→ B cu A −→ bE|b.
Gramatica regulată obţinută ı̂n final este G0 = (VN 0 , VT , S, P 0 ) unde
 
 S −→ aC|aA|bE|b,
 C −→ bD 

P0 = A −→ aA|bE|b, D −→ c
B −→ bE|b, E −→ bS 

 

Fie cuvântul w = bbabc.


El este obţinut ı̂n gramatica G cu derivarea S =⇒ A =⇒ B =⇒ bbS =⇒ bbabc,
iar ı̂n gramatica G0 cu derivarea S =⇒ bE =⇒ bbS =⇒ bbaC =⇒ bbabD =⇒ bbabc.

4.2 Închiderea limbajelor Chomsky faţă de operaţiile


regulate
Ne vom referi ı̂n această secţiune la familiile de limbaje Chomsky Li (0 ≤ i ≤ 3).

Teorema 4.1 Li conţine limbajele finite.

Demonstraţie: Fie L = {x1 , x2 , . . . , xn } un limbaj finit peste un vocabular V . Gramatica


G = ({S}, V, S, {S −→ x1 |x2 | . . . |xn }) este echivalentă cu o gramatică regulată (Lema
4.3) şi L(G) = L, deci L ∈ L3 . Cum L3 ⊆ Li (0 ≤ i ≤ 3), rezultă că orice clasă de
limbaje Chomsky conţine limbajele finite. q.e.d.
Fie acum L, L0 ∈ Li , două limbaje de tip i, generate de gramaticile G = (VN , VT , S, P )
respectiv G0 = (VN 0 , VT 0 , S 0 , P 0 ); fără a micşora generalitatea, putem presupune
VN ∩ VN 0 = ∅.

Teorema 4.2 Li (0 ≤ i ≤ 3) este ı̂nchisă faţă de reuniune.


62CAPITOLUL 4. PROPRIETĂŢI DE ÎNCHIDERE ALE LIMBAJELOR CHOMSKY

Demonstraţie: Fie gramatica G” = (VN ∪ VN 0 ∪ {S0 }, VT ∪ VT 0 , S0 , P ∪ P 0 ∪ {S0 −→ S|S 0 })


unde S0 6∈ VN ∪VN 0 este un neterminal nou. G” este o gramatică de tip i pentru i = 0, 1, 2;
pentru i = 3, Lema 4.3 asigură existenţa unei gramatici regulate echivalente.
Să arătăm că L(G”) = L ∪ L0 .

”⊆”: Fie w ∈ L(G”), deci există o derivare S0 =⇒ w ı̂n G”. Prima producţie care se
poate aplica este S0 −→ S sau S0 −→ S 0 (nu există alte reguli cu S0 ı̂n membrul stâng).
Să presupunem că s-a folosit S0 −→ S (pentru S0 −→ S 0 se procedează analog).
∗ ∗
Deci S0 =⇒ S =⇒ w. În derivarea S =⇒ w apar numai neterminale din VN , deci nu
se pot aplica decât producţii din P . Rezultă că aceasta va fi o derivare şi ı̂n gramatica G,
deci w ∈ L(G) = L ⊆ L ∪ L0 .
”⊇”: Dacă w ∈ L∪L0 , să presupunem că w ∈ L0 (cazul w ∈ L se tratează similar). Deci
0 ∗
S =⇒ w, derivare care utilizează numai reguli din P 0 . Cum P 0 ⊆ P ”, rezultă că aceasta va
fi o derivare şi ı̂n gramatica G”. Putem construi atunci derivarea ı̂n G” : S0 =⇒ S 0 =⇒w.
Deci w ∈ L(G”). q.e.d.
Teorema 4.3 Li (0 ≤ i ≤ 3) este ı̂nchisă faţă de concatenare.
Demonstraţie:
• i = 3: Construim gramatica G” = (VN ∪ VN 0 , VT ∪ VT 0 , S, P ”), unde

P ” = P 0 ∪ {A −→ aB | A −→ aB ∈ P } ∪ {A −→ aS 0 | A −→ a ∈ P }

Lăsăm ca exerciţiu demonstrarea egalităţii L(G”) = LL0 .

• i ≤ 2: Limbajul LL0 este generat de gramatica

G” = (VN ∪ VN 0 ∪ {S0 }, VT ∪ VT 0 , S0 , P ∪ P 0 ∪ {S0 −→ SS 0 })

unde S0 6∈ VN ∪ VN 0 este un simbol de start nou.


Egalitatea L(G”) = LL0 se arată folosind Lema 4.2 pentru cazul i = 2, sau pe baza
Lemei 4.1 şi a condiţiei VN ∩ VN 0 = ∅ pentru cazurile i = 0 şi i = 1. q.e.d.

Teorema 4.4 Li (0 ≤ i ≤ 3) este ı̂nchisă faţă de stelare.

Demonstraţie: Fie L ∈ Li un limbaj generat de G = (VN , VT , S, P ), gramatică de tip i.


• i = 3: Să considerăm S 0 6∈ VN un simbol de start nou; construim VN 0 = VN ∪ {S 0 } şi

P 0 = {A −→ aB | A −→ aB ∈ P } ∪ {A −→ aS 0 | A −→ a ∈ P } ∪ {S 0 −→ S | }.

Gramatica G0 = (VN 0 , VT , S 0 , P 0 ) este echivalentă cu o gramatică regulată (Lema


4.3), iar limbajul generat de ea este L(G0 ) = L∗ . Într-adevăr:
4.2. ÎNCHIDEREA LIMBAJELOR CHOMSKY FAŢĂ DE OPERAŢIILE REGULATE63


”⊆”: Fie w ∈ L(G0 ) şi S 0 =⇒ w o derivare ı̂n gramatica G0 .
Dacă w = , atunci S 0 =⇒  (pe baza producţiei S 0 −→ ) şi evident  ∈ L∗ .

Să presupunem w 6= ; punând ı̂n evidenţă ı̂n derivarea S 0 =⇒ w fiecare apariţie a
lui S 0 (singurul neterminal din VN 0 \ VN ) obţinem
∗ ∗ ∗ ∗ ∗
S 0 =⇒ α1 S 0 =⇒ α1 α2 S 0 =⇒ ... =⇒ α1 α2 . . . αk S 0 =⇒ α1 α2 . . . αk (k ≥ 1)
unde, datorită formei gramaticii G0 , α1 , α2 , . . . , αk ∈ VT∗ .
Deci, cu excepţia ultimei derivări, toate celelalte derivări folosite sunt de forma

S 0 =⇒ αi S 0 . Să detaliem o astfel de derivare:
Dacă αi = ai1 ai2 . . . aini , avem
S 0 =⇒ S =⇒ ai1 A1 =⇒ ai1 ai2 A2 =⇒ . . . =⇒ ai1 ai2 . . . aini −1 Ani −1 =⇒ ai1 ai2 . . . aini S 0 .

Înafara ultimei producţii utilizate, toate celelalte sunt reguli din P . Ultima regulă
Ani −1 −→ aini S 0 corespunde prin construcţie producţiei Ani −1 −→ aini ∈ P . Deci ı̂n

G există derivarea S =⇒ αi , adică αi ∈ L.
Rezumând, w = α1 α2 . . . αk ∈ Lk ⊆ L∗ .
”⊆”: Fie w ∈ L∗ ; deci există un ı̂ntreg k ≥ 0 cu w ∈ Lk .
Pentru k = 0, w =  şi S 0 =⇒ .
Pentru k ≥ 1 există α1 , α2 , . . . , αk ∈ L cu w = α1 α2 . . . αk .

Deci pentru i = 1, 2, . . . , k, ı̂n gramatica G există derivările S =⇒ αi .
Vom construi derivarea ı̂n gramatica G0
∗ ∗ ∗
S 0 =⇒ S =⇒ α1 S 0 =⇒ α1 S =⇒ α1 α2 S 0 =⇒ ... =⇒ α1 α2 . . . αk S 0 =⇒
=⇒ α1 α2 . . . αk = w

Detaliile derivării S =⇒ αi S 0 sunt similare celor de la incluziunea anterioară.
• i ≤ 2: Folosind Lema 4.1, putem presupune că orice producţie din P are sau forma
Aa −→ a, sau conţine numai neterminale. Fără a micşora generalitatea, putem
aranja ca ı̂ntr-o derivare, regulile de forma Aa −→ a să fie aplicate ultimele (acest
lucru este totdeauna posibil, regulile fiind de tip independent de context).
Cu aceste prezumţii, se demonstrează ı̂ntr-o manieră similară celei anterioare, că L∗
este generat de gramatica
G0 = (VN ∪ {S 0 }, VT , S 0 , P ∪ {S −→ S 0 S|})
q.e.d.
64CAPITOLUL 4. PROPRIETĂŢI DE ÎNCHIDERE ALE LIMBAJELOR CHOMSKY

Exemplul 4.3 Fie limbajul L = {ai bj ck | i 6= j sau j 6= k, i, j, k ≥ 1}.


Să construim o gramatică independentă de context G care să genereze L. Pentru
aceasta ne vom baza pe Teoremele 4.2 şi 4.3 ca să descompunem L ı̂n limbaje mai simple.
L poate fi scris L = L1 ∪ L2 unde
L1 = {ai bj ck | i 6= j, i, j, k ≥ 1}, L2 = {ai bj ck | j 6= k, i, j, k ≥ 1}.
Mai departe, L1 = L3 L4 şi L2 = L5 L6 , unde
L3 = {ai bj | i 6= j, i, j ≥ 1}, L4 = {ck | k ≥ 1},
L5 = {ai | i ≥ 1}, L6 = {bj ck | j 6= k, j, k ≥ 1}.
Pentru L4 şi L5 gramaticile sunt uşor de scris; ele au seturile de producţii
P4 = {S4 −→ cS4 |c} respectiv P5 = {S5 −→ aS5 |a}.
Pentru L3 şi L6 mai efectuăm o descompunere: L3 = L3 0 ∪ L3 ”, L6 = L6 0 ∪ L6 ” unde
L3 0 = {ai bj | 1 ≤ i < j}, L3 ” = {ai bj | 1 ≤ j < i},
L6 0 = {bj ck | 1 ≤ j < k}, L6 ” = {bj ck | 1 ≤ k < j}.
Avem gramaticile de producţii
P3 0 = {S3 0 −→ aS3 0 b|S3 0 b|ab2 }, P3 ” = {S3 ” −→ aS3 ”b|aS3 ”|a2 b},
P6 0 = {S6 0 −→ bS6 0 c|S6 0 c|bc2 }, P6 ” = {S6 ” −→ bS6 ”c|bS6 ”|b2 c}.
cu Li = L(Gi 0 ), Li ” = L(Gi ”), (i = 3, 6) (detalierea acestor egalităţi este lăsată ca
0

exerciţiu).
Acum ı̂ncepem să compunem pas-cu-pas gramatica pentru limbajul

L = (L3 0 ∪ L3 ”)L4 ∪ L5 (L6 0 ∪ L6 ”)

Pentru L3 şi L6 seturile de producţii sunt


0 0
 
 S3 −→ S3 |S3 ”
  S6 −→ S6 |S6 ”

P3 =  S3 0 −→ aS3 0 b|S3 0 b|ab2 respectiv P6 =  S6 0 −→ bS6 0 c|S6 0 c|bc2

S3 ” −→ aS3 ”b|aS3 ”|a2 b 
S6 ” −→ bS6 ”c|bS6 ”|b2 c

Setul de producţii pentru L1 este P1 = {S1 −→ S3 S4 } ∪ P3 ∪ P4 , iar pentru L2 :


P2 = {S2 −→ S5 S6 } ∪ P5 ∪ P6 .
În sfârşit, pentru limbajul L avem gramatica G = (VN , VT , S, P ), unde
VN = {S, S1 , S2 , S3 , S3 0 , S3 ”, S4 , S5 , S6 , S6 0 , S6 ”},
P = {S −→ S1 |S2 , S1 −→ S3 S4 , S2 −→ S5 S6 , S3 −→ S3 0 |S3 ”, S3 0 −→ aS3 0 b|S3 0 b|ab2 ,
S3 ” −→ aS3 ”b|aS3 ”|a2 b, S4 −→ cS4 |c, S5 −→ aS5 |a, S6 −→ S6 0 |S6 ”,
S6 0 −→ bS6 0 c|S6 0 c|bc2 , S6 ” −→ bS6 ”c|bS6 ”|b2 c}.
Evident, ı̂n această gramatică, derivarea unui cuvânt nu este totdeauna unică.
De exemplu, pentru w = ab2 c3 sunt posibile cel puţin două derivări:
S =⇒ S1 =⇒ S3 S4 =⇒ S3 cS4 =⇒ S3 c2 S4 =⇒ S3 c3 =⇒ S3 ”c3 =⇒ ab2 c3 şi
S =⇒ S2 =⇒ S5 S6 =⇒ aS6 =⇒ aS6 0 =⇒ abS6 0 c =⇒ ab2 c3 .
4.3. ÎNCHIDEREA FAŢĂ DE HOMOMORFISME ŞI SUBSTITUŢII 65

Exemplul 4.4 Fie limbajul L = {a(bc)n | n ≥ 0}. Ne propunem să construim o gra-
matică regulată pentru limbajul L∗ .
L este generat de gramatica regulată G = (VN , VT , S, P ) unde VN = {S, A, B},
VT = {a, b, c}, P = {S −→ aA, A −→ bB|, B −→ cA}.
Conform Teoremei 4.4, L∗ va fi generat de gramatica G0 = (VN 0 , VT , S 0 , P 0 ) cu
VN 0 = {S 0 , S, A, B} şi

P 0 = {S 0 −→ |S, S −→ aA, A −→ bB|S 0 , B −→ cA}.

Utilizând Lema 4.3, G0 este echivalentă cu o gramatică regulată. Singurele producţii care
trebuie modificate ı̂n acest scop sunt S 0 −→ S şi A −→ S 0 .
Vom avea N (S) = {S}, N (S 0 ) = {S 0 , S}.
S 0 −→ S se ı̂nlocuieşte cu S 0 −→ aA, iar A −→ S 0 cu A −→ aA|.
Deci setul de producţii P 0 va deveni

P 0 = {S 0 −→ aA|, S −→ aA, A −→ bB|aA|, B −→ cA}.

De remarcat că regula S −→ aA nu poate fi folosită ı̂n nici o derivare, şi deci ea poate
fi eliminată din gramatică, ı̂mpreună cu simbolul S (care nu mai este simbol de start).

Corolarul 4.1 Dacă L este un limbaj de tip i (0 ≤ i ≤ 3), atunci L+ este de tip i.

Demonstraţie: Din gramatica pentru L∗ construită ı̂n demonstraţia Teoremei 4.4, se


elimină regula S 0 −→ . q.e.d.
+
O clasă L de limbaje cu proprietatea L ∈ L =⇒ L ∈ L este ı̂nchisă la stelare
-free.

4.3 Închiderea faţă de homomorfisme şi substituţii



Definiţia 4.5 Fie V, W două alfabete finite. O aplicaţie f : V −→ 2W se numeşte
substituţie.

Aplicaţia f se poate extinde la V ∗ astfel:


1. f () = ;
2. f (aw) = f (a)f (w) ∀a ∈ V, w ∈ V ∗ .
[
Pentru un limbaj L ⊆ V ∗ , f (L) = f (x).
x∈L

Exemplul 4.5 Fie f (0) = {a}, f (1) = {ww̃ | w ∈ {b, c}∗ }. Substituţia f aplică cuvintele
din limbajul {0n 1n | n ≥ 1} ı̂n limbajul {an w1 w̃1 w2 w̃2 . . . wn w˜n | wi ∈ {b, c}∗ , 1 ≤ i ≤ n}.
66CAPITOLUL 4. PROPRIETĂŢI DE ÎNCHIDERE ALE LIMBAJELOR CHOMSKY

Definiţia 4.6 Fie V un alfabet finit, L o clasă de limbaje peste V şi f : V −→ L o


substituţie. L este ı̂nchisă faţă de f dacă ∀ L ∈ L avem f (L) ∈ L.

Substituţia f peste V este  - liberă dacă ∀ a ∈ V,  6∈ f (a).


Substituţia f este finită dacă ∀ a ∈ V, f (a) este un limbaj finit.
Dacă ∀ a ∈ V, f (a) ∈ W, f se numeşte homomorfism.
Pentru un homomorfism f : V −→ W , aplicaţia h : W −→ 2V definită
h(x) = {a | f (a) = x} se numeşte homomorfism invers al lui f (notat cu h = f −1 ).

Teorema 4.5 L3 este ı̂nchisă la substituţie.

Demonstraţie: Fie L ∈ L3 un limbaj, G = (VN , {a1 , . . . , an }, S, P ) gramatica regulată



care-l generează, iar f : V −→ 2W o substituţie. Fie Gi = (VNi , VTi , Si , Pi ) gramaticile
regulate cu L(Gi ) = f (ai ), (1 ≤ i ≤ n). Fără a micşora generalitatea, putem presupune
că

• Toate alfabetele de neterminale VNi sunt disjuncte două câte două.

• În fiecare Gi există Xi ∈ VNi unic, folosit ca membru stâng ı̂n regula Xi −→ . Cu
excepţia acestei producţii, toate regulile din Pi sunt de forma A −→ aB 1 .

• Similar, ı̂n G există un neterminal X cu aceeaşi proprietate.


 

VNi  VN , VT 0 = VTi ,
[ [ [
Construim gramatica G0 = (VN 0 , VT 0 , S, P 0 ) unde VN 0 = 
1≤i≤n 1≤i≤n
0
iar P este generată ı̂n felul următor:

• X −→  ∈ P 0 ;

• Pentru fiecare producţie A −→ ai B ∈ P , ı̂n P 0 se introduce setul de reguli


[
(Pi \ {Xi −→ }) {A −→ Si , Xi −→ B}.

Conform Lemei 4.3, gramatica G0 este echivalentă cu o gramatică regulată.


Demonstrarea egalităţii L(G0 ) = f (L) este lăsată ca exerciţiu. q.e.d.

Exemplul 4.6 Să considerăm substituţia regulată f : {a, b} −→ 2{0,1} definită

f (a) = (0 + 1)∗ 11(0 + 1)∗ , f (1) = 10∗ 1


1
Restricţia este uşor de ı̂ndeplinit. Se introduce un neterminal nou Xi , şi fiecare producţie de forma
A −→ a se ı̂nlocuieşte cu A −→ aXi . În plus, ı̂n Pi este introdusă şi producţia Xi −→ .
4.3. ÎNCHIDEREA FAŢĂ DE HOMOMORFISME ŞI SUBSTITUŢII 67

Limbajul regulat f (a) este generat de gramatica G1 = ({S1 , A1 , B1 , Y }, {0, 1}, S1 , P1 ), unde
P1 = {S1 −→ 0S1 |1S1 |1A1 , A1 −→ 1B1 |1Y1 , B1 −→ 0B1 |1B1 |0Y |1Y, Y −→ }.
Similar, f (b) este generat de G2 = ({S2 , A2 , Z}, {0, 1}, S2 , P2 ) cu
P2 = {S2 −→ 1A2 , A2 −→ 0A2 |1Z, Z −→ }.
Fie acum limbajul regulat L = (ab)+ ba şi G = ({S, A, B, C, X}, {a, b}, S, P ) gramatica
care ı̂l generează,
 cu

 (1) S −→ aA, (4) B −→ bC
P =  (2) A −→ bS (5) C −→ aX

(3) A −→ bB (6) X −→ 
Limbajul regulat f (L) este generat de gramatica G0 = (VN 0 , VT , S, P 0 ), unde VN 0 =
{S, S1 , S2 , A, A1 , A2 , B, B1 , C, X, Y, Z}, VT 0 = {0, 1}, iar P 0 este formată din producţiile

• X −→ 

• S1 −→ 0S1 |1S1 |1A1 , S2 −→ 1A2 , A1 −→ 1B1 |1Y, A2 −→ 0A2 |1Z,


B1 −→ 0B1 |1B1 |0Y |1Y (regulile nefinale din P1 ∪ P2 )

• {S −→ S1 , Y −→ A} (generate de producţia (1)),


{A −→ S2 , Z −→ S} (generate de producţia (2)),
{A −→ S2 , Z −→ B} (generate de producţia (3)),
{B −→ S2 , Z −→ C} (generate de producţia (4)),
{C −→ S1 , Y −→ X} (generate de producţia (5)).

Să considerăm cuvântul abba ∈ L. Atunci, de exemplu w = w1 w2 w3 w4 = 014 02 15 0 ∈ f (L),


unde w1 = 0111, w2 = 1001, w3 = 11, w4 = 110 şi w1 , w4 ∈ f (a), w2 , w3 ∈ f (b). Acest
cuvânt poate fi obţinut direct folosind derivarea
S =⇒ S1 =⇒ 0S1 =⇒ 01A1 =⇒ 012 B1 =⇒ 013 Y =⇒ 013 A =⇒ 013 S2 =⇒ 014 A2 =⇒
=⇒ 014 0A2 =⇒ 014 02 A2 =⇒ 014 02 1Z =⇒ 014 02 1B =⇒ 014 02 1S2 =⇒ 014 02 12 A2 =⇒
=⇒ 014 02 13 Z =⇒ 014 02 13 C =⇒ 014 02 13 S1 =⇒ 014 02 14 A1 =⇒ 014 02 15 B1 =⇒
=⇒ 014 02 15 0Y =⇒ 014 02 15 0X =⇒ 014 02 15 0.

Teorema 4.6 L2 este ı̂nchisă la substituţie.

Demonstraţie: Fie L ∈ L2 un limbaj şi G = (VN , {a1 , . . . , an }, S, P ) gramatica indepen-


dentă de context care-l generează, iar f o substituţie. Fie Gi = (VNi , VTi , Si , Pi ) gramaticile
independente de context cu L(Gi ) = f (ai ) (1 ≤ i ≤ n). Similar demonstraţiei anterioare,
vom presupune că toate alfabetele de neterminale VNi sunt disjuncte două câte două.
Construim gramatica G0 =(VN 0 , VT 0 ,S, P 0 ) unde

VNi  VT 0 = VTi .
[ [ [
VN 0 =  VN ,
1≤i≤n 1≤i≤n
68CAPITOLUL 4. PROPRIETĂŢI DE ÎNCHIDERE ALE LIMBAJELOR CHOMSKY

Fie h substituţia definită prin

h(ai ) = {Si } (1 ≤ i ≤ n), h(A) = {A} ∀A ∈ VN .


 
[ [
Atunci P 0 =  Pi  {A −→ h(α) | A −→ α ∈ P }.
1≤i≤n
G0 este evident tot independentă de context; se arată uşor că f (L(G)) = L(G0 ). q.e.d.

Exemplul 4.7 Fie limbajul L = {0n 1n | n ≥ 1}, generat de gramatica cu producţiile


S −→ 0S1|01
şi să luăm substituţia f definită ı̂n Exemplul 4.5.
f (0) = {a} este generat de gramatica cu producţia S1 −→ a, iar
f (1) = {ww̃ | w ∈ {b, c}∗ }, de gramatica cu producţiile S2 −→ bS2 b|cS2 c|.
Atunci limbajul f (L) va fi generat de gramatica G = ({S, S1 , S2 }, {a, b, c}, S, P ) unde
P = {S1 −→ a, S2 −→ bS2 b|cS2 c|, S −→ S1 SS2 |S1 S2 }.

Corolarul 4.2 L2 , L3 sunt ı̂nchise la substituţii finite, homomorfisme şi homomorfisme


inverse.

Teorema rămâne adevărată şi pentru L0 . În schimb, pentru limbajele dependente de
context, problema este mai dificilă. Se arată ([7], pp. 125 − 128 sau [14] pagina 90) că
L1 nu este ı̂nchisă la substituţii, substituţii finite şi homomorfisme, dar este ı̂nchisă la
substituţii şi homomorfisme  - libere.

4.4 Închiderea faţă de alte operaţii


4.4.1 Închiderea la intersecţie
Teorema 4.7 L3 este ı̂nchisă la intersecţie.

Demonstraţie: Fie limbajele L1 şi L2 peste V , generate de gramaticile regulate


Gi = (VNi , VTi , Si , Pi ), i = 1, 2.
Limbajul L1 ∩ L2 este generat de gramatica G0 = (VN1 × VN2 , VT1 ∩ VT2 , [S1 , S2 ], P 0 ) unde
P 0 = {[A, B] −→ a[C, D] | A −→ aC ∈ P1 , B −→ aD ∈ P2 }∪
∪{[A, B] | A −→ a ∈ P1 , B −→ a ∈ P2 }
Lăsăm ca exerciţiu demonstrarea egalităţii L(G0 ) = L1 ∩ L2 . q.e.d.

Teorema 4.8 L0 este ı̂nchisă la intersecţie.


4.4. ÎNCHIDEREA FAŢĂ DE ALTE OPERAŢII 69

Demonstraţie: Fie Gi = (VNi , VTi , Si , Pi ) două gramatici de tip 0 cu L(Gi ) = Li . Putem


presupunem – aşa cum mai mai făcut – că VN1 ∩ VN2 = ∅.
Construim gramatica G0 = (VN1 ∪ VN2 ∪ VN3 , VT1 ∪ VT2 , S0 , P1 ∪ P2 ∪ P3 ), unde

• VN3 = {Aa | a ∈ VT1 ∪ VT2 } ∪ {S0 , Y, Z};




 S0 −→ Y S1 ZS2 Y (1)
VT1 VT2

 Za −→ Aa Z dacă a ∈ ∪ (2)



• P3 = bAa −→ Aa b dacă a, b ∈ VT1 ∪ VT2 (3)
Y Aa a −→ aY dacă a ∈ VT1 ∪ VT2




 (4)
Y ZY −→  (5)

Folosind (1) precum şi producţiile din P1 ∪ P2 vom obţine derivări de forma

S0 =⇒ Y w1 Zw2 Y

cu wi ∈ Li (i = 1, 2).
Cu regulile (2) − (4), această formă sentenţială poate deriva ı̂n wY ZY dacă şi numai
dacă w = w1 = w2 . Regula (5) va şterge sufixul Y ZY , rămânând numai w ∈ VT1 ∩ VT2 .
Cum aceasta este singura posibilitate de a obţine un cuvânt terminal plecând din S0 ,
rezultă L(G0 ) = L1 ∩ L2 . q.e.d.
Vom studia mai târziu problemele ı̂nchiderii lui L2 şi L1 la intersecţie.

4.4.2 Închiderea la oglindire


Fie L ⊆ V ∗ un limbaj nevid. Considerăm limbajul L̃ = {w̃ | w ∈ L}.

Teorema 4.9 Dacă L ∈ Li (0 ≤ i ≤ 3) atunci L̃ ∈ Li .

Demonstraţie: Dacă L ∈ Li , atunci există o gramatică G = (VN , VT , S, P ) de tip i cu


L(G) = L (0 ≤ i ≤ 3).
Construim gramatica G1 = (VN , VT , S, P1 ) unde P1 = {α̃ −→ β̃ | α −→ β ∈ P }.
Gramatica G1 este evident de acelaşi tip cu G. Mai rămâne de arătat că L(G1 ) = L̃.
Este suficient să demonstrăm că x =⇒ y ı̂n gramatica G dacă şi numai dacă x̃ =⇒ ỹ
ı̂n G1 .
Fie x =⇒ y ı̂n gramatica G; deci x = x1 αx2 , y = y1 βy2 şi α −→ β ∈ P . Dar atunci
vom avea x̃ = x̃2 α̃x̃1 , ỹ = ỹ2 β̃ ỹ1 şi α̃ −→ β̃ ∈ P1 , informaţii din care se deduce x̃ =⇒ ỹ
ı̂n gramatica G1 .
Implicaţia inversă se demonstrează similar.

Printr-un simplu procedeu de inducţie va rezulta că S =⇒ w este o derivare ı̂n gra-

matica G dacă şi numai dacă S =⇒ w̃ ı̂n gramatica G1 . q.e.d.
70CAPITOLUL 4. PROPRIETĂŢI DE ÎNCHIDERE ALE LIMBAJELOR CHOMSKY

4.4.3 Închiderea la operaţii de amestecare


Fie V un alfabet finit nevid şi α, β ∈ V ∗ . Se defineşte operaţia

Shuf (α, β) = {α1 β1 α2 β2 . . . αp βp | αi , βi ∈ V ∗ , α1 α2 . . . αp = α, β1 β2 . . . βp = β, p ≥ 1}.

Pentru două limbaje L1 , L2 ⊆ V ∗ ,

Shuf (L1 , L2 ) = {Shuf (α, β) | α ∈ L1 , β ∈ L2 }.

În sfârşit, pentru L ⊆ V ∗ se definesc mulţimile

Shuf 0 (L) = {}, Shuf n+1 (L) = Shuf (Shuf n (L), L), n ≥ 0

şi

Shuf n (L).
[

Shuf (L) =
n=0

Deoarece clasa L2 a limbajelor independente de context nu este ı̂nchisă la operaţiile


Shuf şi Shuf ∗ (demonstrarea acestor afirmaţii necesită noţiuni mai elaborate de limbaje
formale), ne vom ı̂ndrepta atenţia asupra proprietăţilor de ı̂nchidere ale celorlaltor clase
de limbaje Chomsky.

Teorema 4.10 Li (i = 0, 1, 3) sunt ı̂nchise la operaţia Shuf .

Demonstraţie:
i = 0, 1: Fie limbajele Lj ⊆ Vj∗ de tip i, generate de gramaticile Gj = (VNj , Vj , Sj , Pj )
(j = 1, 2). Vom presupune VN1 ∩ VN2 = ∅. Considerăm două alfabete noi disjuncte U1 şi
U2 , precum şi două homomorfisme bijective hj : Vj −→ Uj (j = 1, 2).
Acum, pentru j = 1, 2:

• Extindem hj la Vj ∪ VNj punând hj (A) = A, ∀A ∈ VNj ;

• Fie hj (Pj ) = {hj (α) −→ hj (β) | α −→ β ∈ Pj }.

Construim gramatica G = (VN , VT , S, P ) definită prin


VN = VN1 ∪ VN2 ∪ U1 ∪ U2 ∪ {S},
VT = V1 ∪ V2 ,
P = h1 (P1 ) ∪ h2 (P2 ) ∪ {S −→ S1 S2 } ∪ {AB −→ BA | A ∈ U1 , B ∈ U2 } ∪
∪ {A −→ a | A ∈ U1 , a ∈ V1 , h1 (a) = A} ∪ {A −→ a | A ∈ U2 , a ∈ V2 , h2 (a) = A}.
Evident G este o gramatică de acelaşi tip cu G1 şi G2 .
Orice derivare ı̂n gramatica G decurge astfel: după folosirea producţiei S −→ S1 S2 se
derivează independent ı̂n gramaticile G1 şi G2 , obţinându-se limbajul h1 (L1 )h2 (L2 ). Cu
4.4. ÎNCHIDEREA FAŢĂ DE ALTE OPERAŢII 71

regulile de forma AB −→ BA simbolurile din U2 sunt transportate spre stânga, iar cele
din U1 , spre dreapta. Când se trece la o secvenţă de terminale, se obţine un cuvânt din
limbajul Shuf (L1 , L2 ).
Invers, orice cuvânt w ∈ Shuf (L1 , L2 ) se poate obţine ı̂n acest fel, deci are loc egali-
tatea L(G) = Shuf (L1 , L2 ).
i = 3: Dacă Lj ⊆ Vj∗ sunt limbaje generate de gramaticile regulate
Gj = (VNj , Vj , Sj , Pj ) (j = 1, 2), construim gramatica regulată G = (VN , VT , S, P ), unde
VN = (VN1 × VN2 ) ∪ (VN1 × {F }) ∪ ({F } × VN2 ), F 6∈ VN1 ∪ VN2 ,
VT = V1 ∪ V2 ,
S = (S1 , S2 ),
P = {(A, B) −→ a(C, B) | A, C ∈ VN1 , B ∈ VN2 ∪ {F }, a ∈ V1 , A −→ aC ∈ P1 }∪
∪{(A, B) −→ a(F, B) | A ∈ VN1 , B ∈ VN2 , a ∈ V1 , A −→ a ∈ P1 }∪
∪{(A, F ) −→ a | A ∈ VN1 , a ∈ V1 , A −→ a ∈ P1 }∪
∪{(A, B) −→ a(A, C) | A ∈ VN1 ∪ {F }, B, C ∈ VN2 , a ∈ V2 , B −→ aC ∈ P2 }∪
∪{(A, B) −→ a(A, F ) | A ∈ VN1 , B ∈ VN2 , a ∈ V2 , B −→ a ∈ P2 }∪
∪{(F, B) −→ a | B ∈ VN2 , a ∈ V2 , A −→ a ∈ P2 }
Orice derivare ı̂n gramatica G este compusă din două derivări: una ı̂n gramatica G1 pe
prima componentă a neterminalelor din VN şi una ı̂n gramatica G2 pe a doua componentă;
cele două derivări se desfăşoară ı̂n paralel, intercalând paşii lor de derivare.
Invers, din oricare două derivări – una ı̂n raport cu G1 şi cealaltă ı̂n raport cu G2 – se
pot obţine toate derivările intercalate.
În concluzie, L(G) = Shuf (L1 , L2 ). q.e.d.

Teorema 4.11 L3 nu este ı̂nchisă la operaţia Shuf ∗ . Mai mult, există limbaje finite L
pentru care Shuf ∗ (L) 6∈ L2 .

Demonstraţie: Fie limbajul finit L = {abc}; evident, acesta este regulat. Considerăm
limbajele
L1 = {an bm cp | n, m, p ≥ 1}, L2 = {an bn cn | n ≥ 1}.
Limbajul L1 este evident regulat, iar L2 nu este independent de context (afirmaţie care
se va demonstra ı̂n Capitolul 6). Avem egalitatea Shuf ∗ (L) ∩ L1 = L2 .
Într-adevăr, să observăm că ı̂n Shuf ∗ (L), orice şir conţine exact n simboluri 0 a0 , n
simboluri 0 b0 şi n simboluri 0 c0 . Deci Shuf ∗ (L) ∩ L1 = {an bn cn }. Dar
∞ ∞ ∞
!
n n n n
Shuf (L) ∩ L = Shuf ∗ (L) ∩ L1 .
n
[ [ [
L2 = {a b c } = (Shuf (L) ∩ L1 ) =
n=1 n=1 n=1

L3 este ı̂nchisă la intersecţie. Dacă Shuf ∗ (L) ar fi limbaj regulat, atunci şi intersecţia lui
cu L1 ar fi regulat, contradicţie. q.e.d.
72CAPITOLUL 4. PROPRIETĂŢI DE ÎNCHIDERE ALE LIMBAJELOR CHOMSKY

Teorema 4.12 L0 este ı̂nchisă la operaţia Shuf ∗ .

Demonstraţie: Fie limbajul L ∈ L0 generat de gramatica G = (VN , VT , S, P ); construim


limbajul
L1 = {R}L{C} ({A}L)+ {D} ∪ {R}L{D} ∪ {λ}
unde R, C, A, D 6∈ VN . Evident, L1 ∈ L0 .
Fie G0 = (VN 0 , VT , S, P 0 ) gramatica de tip 0 definită:
VN 0 = VN ∪ {R, D, C, A, B, E} ∪ {Aa , a0 | a ∈ VT } (B, E 6∈ VN ),
P = P1 ∪ {S −→ λ, D −→ λ, CA −→ AB} ∪ {BAa −→ a0 B | a ∈ VT } ∪
0

∪ {Aa0 −→ a0 A | a ∈ VT } ∪ {Ab a0 −→ a0 Ab | a, b ∈ VT } ∪ {ABA −→ EA, ABD −→ D} ∪


∪ {Aa E −→ EAa | a ∈ VT } ∪ {SE −→ SC} ∪ {a0 E −→ EAa | a ∈ VT } ∪
∪ {CAa −→ Aa C | a ∈ VT } ∪ {Aa −→ a | a ∈ VT },
unde P1 se obţine din P prin ı̂nlocuirea tuturor terminalelor a ∈ VT cu Aa .
Se poate arăta că L(G0 ) = Shuf ∗ (L). q.e.d.

Clasa L1 este de asemenea ı̂nchisă la operaţia Shuf , dar demonstraţia necesită ele-
mente specifice acestei clase de limbaje.

4.5 Exerciţii
Exerciţiul 4.1 Să se construiască gramatici regulate echivalente cu gramaticile de pro-
ducţii
a) S −→ abS|baS|A, A −→ aabb|S|;
b) E −→ a + T |T, T −→ a ∗ F |F, F −→ (E)|a;
c) S −→ A|B, A −→ abc|aA|, B −→ abC|C, C −→ cB|.

Exerciţiul 4.2 Să se construiască gramatici regulate pentru limbajele L1 ∪ L2 şi L1 L2 ,


unde
L1 = {ai | i ≥ 0}, L2 = {(ab)i | i ≥ 1}

Exerciţiul 4.3 Să se construiască gramatici pentru limbajele L1 ∪ L2 şi L1 L2 , unde


L1 = {0i 10j | i ≥ j ≥ 1}, L2 = {0i 10j | j ≥ i ≥ 1}

Exerciţiul 4.4 Să se construiască gramatici independente de context pentru limbajele


L1 = {an b2n | n ≥ 0} ∪ {an bn | n ≥ 0}, L2 = {ai bj ck | i = j sau j = k, i, j, k ≥ 1}

Exerciţiul 4.5 Fie limbajul L = {w | w ∈ {a, b}∗ , |w|a = |w|b }, generat de o gramatică
independentă de context G. Să se construiască o gramatică pentru L∗ şi să se arate că
această gramatică este echivalentă cu G.
Capitolul 5

Metode de recunoaştere pentru


limbajele Chomsky

În clasificarea Chomsky, pentru fiecare i (0 ≤ i ≤ 3) s-a notat cu Li clasa limbajelor care
pot fi generate de gramaticile de tip i. Similitudinea dintre metodele generative şi cele
de recunoaştere sugerează că pentru fiecare limbaj L de tip i, ı̂nafara gramaticii de tip i
care ı̂l generează, există şi o metodă de recunoaştere – un anumit tip de automat specific
clasei Li .
Deci clasificarea Chomsky este posibilă nu numai pe baza gramaticilor, ci şi pe baza
automatelor.

Definiţia 5.1 O gramatică G este echivalentă cu un automat M dacă L(G) = τ (M ).

5.1 Gramatici regulate şi automate finite


În cazul L3 , tipul de automat folosit este automatul finit (AF ) definit ı̂n Capitolul 1. În
Capitolul 3 am arătat că automatele finite sunt metode de recunoaştere. Mai rămâne de
arătat un singur lucru; anume:

Teorema 5.1 Pentru fiecare gramatică regulată G = (VN , VT , S, P ) există un automat


finit M = (Q, V, δ, q0 , F ) echivalent, şi reciproc.

Demonstraţie:
”=⇒”: Fie G = (VN , VT , S, P ) o gramatică regulată cu L(G) = L. Fără a micşora
generalitatea, putem presupune că ea are numai reguli de forma A −→ aB sau A −→ 
(producţiile A −→ a cu a ∈ VT se ı̂nlocuiesc cu A −→ aX, unde X este un neterminal
nou, şi ı̂n plus se introduce şi regula X −→ ).

73
74CAPITOLUL 5. METODE DE RECUNOAŞTERE PENTRU LIMBAJELE CHOMSKY

Construim automatul M = (Q, V, δ, q0 , F ) astfel:


Q = VN , V = VT , q0 = S, F = {A | A −→  ∈ P } şi δ(A, a) = {B | A −→ aB ∈ P }.
Rămâne de arătat egalitatea L = τ (M ).
”⊆”: Fie w = a1 a2 . . . an ∈ L; deci există derivarea
S =⇒ a1 A1 =⇒ a1 a2 A2 =⇒ . . . =⇒ a1 a2 . . . an An =⇒ a1 a2 . . . an .
Regulilor S −→ a1 A1 , A1 −→ a2 A2 , . . . , An−1 −→ an An ∈ P le corespund prin
construcţie apartenenţele
A1 ∈ δ(S, a), A2 ∈ δ(A1 , a2 ), . . . , An ∈ δ(An−1 , an ), An ∈ F ; atunci
(∗) (∗)
δ(S, a1 a2 . . . an ) = δ(δ(S, a1 ), a2 . . . an ) = V1 ∪ δ(A1 , a2 . . . an ) = . . . = Vn ∪ δ(An , ) =
= Vn ∪ {An } şi An ∈ F ; deci w ∈ τ (M ).
Pentru fiecare egalitate (∗) s-au notat cu Vi ⊆ Q (1 ≤ i ≤ n) mulţimi de stări (posibil
mulţimi vide).
”⊇”: Vom demonstra prin inducţie după n afirmaţia

h i
∀ A ∈ Q δ(A, a1 a2 . . . an ) ∩ F 6= ∅ =⇒ A =⇒ a1 a2 . . . an .

n = 1: Avem δ(A1 , a1 ) ∩ F 6= ∅; dacă δ(A, a1 ) = {B | A −→ a1 B ∈ P } şi


F = {B | B −→  ∈ P }, ipoteza de inducţie asigură existenţa unui element

B ∈ δ(A, a1 ) ∩ F , deci A =⇒ a1 B şi B =⇒ . Concluzie: A =⇒ a1 .
n → n + 1: Fie δ(A, a1 a2 . . . an+1 ) ∩ F 6= ∅. Detaliind această relaţie, avem
 ) ∩ F = δ(δ(A, a1 ), a2 . 
δ(A, a1 a2 . . . an+1 . . an+1 ) ∩ F =
[ [
= δ(B, a2 . . . an+1 ) ∩ F = [δ(B, a2 . . . an+1 ) ∩ F ] 6= ∅.
B∈δ(A,a1 ) b∈δ(A,a1 )
Deoarece reuniunea este nevidă, există cel puţin un B ∈ δ(A, a1 ) cu

δ(B, a2 . . . an+1 ) ∩ F 6= ∅. Ipoteza de inducţie asigură atunci că B =⇒ a2 . . . an+1 .
Pe de-altă parte, din B ∈ δ(A, a1 ) avem A =⇒ a1 B. Din cele două rezultate se obţine

A =⇒ a1 a2 . . . an+1 .

h i
În particular, pentru A ≡ S avem δ(S, w) ∩ F 6= ∅ =⇒ S =⇒ w . Deci

w ∈ τ (M ) =⇒ w ∈ L.

”⇐=”: Fie M = (q, V, δ, q0 , F ) un AF D cu L = τ (M ).


Gramatica echivalentă G = (VN , VT , S, P ) se defineşte astfel: VN = Q, VT = V,
S = q0 , iar pentru  6∈ L, mulţimea P a producţiilor este
P = {p −→ aq | δ(p, a) = q} ∪ {p −→ a | δ(p, a) ∈ F }.
Gramatica G este evident regulată. Rămâne de arătat egalitatea L = L(G), pe care o
vom demonstra folosind echivalenţa

δ(p, α) = q ⇐⇒ p =⇒ αq (1)
5.1. GRAMATICI REGULATE ŞI AUTOMATE FINITE 75

”⊆”: Fie αa ∈ L (se foloseşte faptul că αa 6= ). Deci δ(q0 , α) = p; aceasta ı̂nseamnă

– cu (a) – că există derivarea q0 =⇒ αp. În plus, cum δ(p, a) ∈ F , rezultă că p −→ a este

o regulă de producţie. Deci q0 =⇒ αp =⇒ αa.

”⊇”: Fie q0 =⇒ β. Atunci β = αa (β 6= ) şi – punând ı̂n evidenţă ultimul pas al
∗ ∗
derivării, q0 =⇒ αp =⇒ αa pentru un anumit p ∈ VN . Revenind la automatul iniţial
M, δ(q0 , α) = p şi δ(p, a) ∈ F , deci
δ(q0 , αa) = δ(δ(q0 , α), a) = δ(p, a) ∈ F =⇒ αa = β ∈ L
În cazul când  ∈ L, avem q0 ∈ F . La gramatica G construită mai sus (care generează
limbajul L\{}) se introduce un simbol de start nou S şi se adaugă producţiile S −→ q0 |.
Conform cu Lema 4.3, această gramatică este echivalentă cu o gramatică regulată G0 .
q.e.d.
Exemplul 5.1 Fie gramatica regulată G = (VN , VT , S, P ) cu VN = {S, A, B}, VT = {a, b}
şi P = {S −→ aA|a, A −→ bB, B −→ aA|a} care generează limbajul
L = {a(ba)n | n ≥ 0} = a(ba)∗ .
Pentru a construi automatul finit echivalent, se introduce un neterminal nou C şi se
transformă setul de producţii astfel:
P = {S −→ aA|aC, A −→ bB, B −→ aA|aC, C −→ }
Automatul finit este descris atunci de diagrama de tranziţie
JJ 
^ a
S - A
 
6
a a b


? 
?
a
C  B

 

sau – dacă se solicită să fie determinist:


 
 b -
a
JJ
^
S - A  a B
 
 

Exemplul 5.2 Fie automatul finit descris de diagrama de tranziţie:



-
q
: 1  ?a
a
 


JJ
^  b -
q0 
?



q`2
c  ?b

?-6
c
76CAPITOLUL 5. METODE DE RECUNOAŞTERE PENTRU LIMBAJELE CHOMSKY

Gramatica regulată asociată va fi ı̂n prima etapă (când  6∈ L): VN = {q0 , q1 , q2 },


VT = {a, b, c}, S = q0 , P1 = {q0 −→ aq1 |cq0 |c, q1 −→ aq1 |bq2 , q2 −→ bq2 |cq0 |c}.
Deoarece  ∈ L, se introduce un simbol de start nou – S, şi regulile S −→ q0 |.
Rebotezând neterminalele ı̂n notaţia uzuală, avem gramatica G = (VN , VT , S, P ) cu
VN = {S, A, B, C}, VT = {a, b, c},
P = {S −→ A|, A −→ aB|cA|c, B −→ aB|bC, C −→ bC|cA|c}.
Dacă eliminăm regula S −→ A (nespecifică unei gramatici regulate), se ajunge la
gramatica regulată, de producţii
P = {S −→ aB|cA|c|, A −→ aB|cA|c, B −→ aB|bC, C −→ bC|cA|c}.
De remarcat că ea este echivalentă cu gramatica regulată de producţii

A −→ aB|cA|, B −→ aB|bC, C −→ bC|cA

şi simbol de start A.

5.2 Gsm-uri şi translatori finiţi


5.2.1 Definiţii generale
Definiţia 5.2 Se numeşte maşină secvenţială generalizată (gsm) structura
M = (Q, Vi , Ve , δ, q0 , F ) unde:
• Q, Vi , Ve sunt mulţimi finite, nevide numite respectiv mulţime de stări, alfabet de
intrare, alfabet de ieşire;
• q0 ∈ Q este starea iniţială;
• F ⊆ Q, F 6= ∅ este mulţimea stărilor finale;

• δ : Q × Vi −→ 2Q×Ve este funcţia de tranziţie.

Aserţiunea (p, w) ∈ δ(q, a) poate fi interpretată ı̂n felul următor: automatul aflat ı̂n
starea q, având la intrare caracterul a, poate trece ı̂n starea p, emiţând la ieşire cuvântul
w.
Funcţia de tranziţie δ poate fi extinsă la Q × Vi∗ astfel: ∀q ∈ Q, a ∈ Vi , α ∈ Vi∗ ,
i. δ(q, ) = {(q, )};
ii. δ(q, αa) = {(p, w)|w = w1 w2 , ∃r ∈ Q, (r, w1 ) ∈ δ(q, α), (p, w2 ) ∈ δ(r, a)}.
Extensia este naturală, fapt arătat de cazul particular α = .
+
Dacă δ : Q × Vi −→ 2Q×Ve , atunci M este un gsm  - liber.
Similar automatelor finite, putem reprezenta un gsm ca un graf având drept noduri
elementele lui Q, iar arcele de tipul:
5.2. GSM-URI ŞI TRANSLATORI FINIŢI 77

qj a/w - pj ⇐⇒ (p, w) ∈ δ(q, a)

Fie M = (Q, Vi , Ve , δ, q0 , F ) un gsm şi α ∈ Vi∗ . Definim


M (α) = {β | ∃p ∈ F, (p, β) ∈ δ(q0 , α)}.

Dacă L ⊆ Vi este un limbaj, atunci putem defini [
M (L) = {β | ∃α ∈ L, β ∈ M (α)} = M (α).
α∈L
Spunem ı̂n acest caz că M (L) este o aplicaţie gsm (de variabilă L).
Dacă M este  - liber, atunci M (L) este o aplicaţie gsm  - liberă.
Similar vom defini
M −1 (β) = {α|β ∈ M (α)}
respectiv
M −1 (L) = {β|∃α ∈ L, α ∈ M (β)}.
M −1 este o aplicaţie gsm - inversă. De remarcat că – ı̂n ciuda denumirii – egalităţile

M −1 (M (L)) = M (M −1 (L)) = L

nu sunt ı̂n general adevărate.


Pentru a facilita operarea cu maşinile secvenţiale generalizate, putem lucra cu descrieri
instantanee (DI) care sunt triplete de forma (q, α, β) unde:
q ∈ Q;
α ∈ Vi∗ este o stivă cu vârful la stânga;
β ∈ Ve∗ este o stivă cu vârful la dreapta.
Pe aceste triplete se defineşte relaţia ` astfel:

∀p, q ∈ Q, a ∈ Vi , α ∈ Vi∗ , β, y ∈ Ve∗ [(q, aα, β) ` (p, α, βy) ⇐⇒ (p, y) ∈ δ(q, a)] .

Dacă ` este ı̂nchiderea reflexiv - tranzitivă a acestei relaţii, putem defini translatarea
unui gsm M ca fiind:

τ (M ) = {(α, β) | α ∈ Vi∗ , β ∈ Ve∗ , (q0 , α, ) ` (p, , β), p ∈ F }.

Atunci definiţiile anterioare se exprimă astfel:


M (α) = {β | (α, β) ∈ τ (M )}, M −1 (β) = {α | (α, β) ∈ τ (M )}.

Exemplul 5.3 Să considerăm M = ({q0 , q1 }, {0, 1}, {a, b}, δ, q0 , {q1 }) unde:

δ(q0 , 0) = {(q0 , aa), (q1 , b)}, δ(q1 , 0) = ∅,


δ(q0 , 1) = {(q0 , a)}, δ(q1 , 1) = {(q1 , e).}
78CAPITOLUL 5. METODE DE RECUNOAŞTERE PENTRU LIMBAJELE CHOMSKY

Fie L = {0n 1n | n ≥ 1}. Se arată prin inducţie după n că



(q0 , 0n 1n , ) ` (q1 , , a2n−2 b).
Deci M (L) = {a2n b | n ≥ 0}.
Să luăm acum L1 = {a2n b | n ≥ 0}. Căutând toate cuvintele w ∈ {0, 1}∗ cu proprie-

tatea (q0 , w, ) ` (q1 , , a2n b), găsim w ∈ {α01k | k ≥ 0, |α|1 = M2}.
Deci M −1 (L) = {w01k | k ≥ 0, |w|2 = M2}.
Se observă că M −1 (M (L)) ⊃ L.

Aplicaţiile gsm constituie o modalitate uzuală de exprimare a unui limbaj ı̂n termenii
unui alt limbaj având aceeaşi structură, dar cu elemente exterioare distincte.
De exemplu, L1 = {an bn | n ≥ 1} şi L2 = {an ban | n ≥ 1} au – ı̂ntr-un anumit sens –
aceeaşi structură, uşor modificată. Putem exprima două gsm-uri care transformă – unul
pe L1 ı̂n L2 , celălalt pe L2 ı̂n L1 :
a/a
- b/a
- a/a
- a/b
-
6j? b/ba - j 6? 6j
? b/ - 6 j
?

Dintre cazurile cele mai cunoscute de extensie a maşinilor secvenţiale generalizate, prezen-
tăm două: automatele finite cu ieşiri (Moore/Mealy) şi translatorii finiţi.

5.2.2 Automate finite cu ieşiri


În general, automatele finite privite ca metode de recunoaştere pot fi considerate ca având
la ieşire un semnal binar: acceptat/neacceptat. Pentru o rafinare a semnalului de ieşire,
s-au dezvoltat două tipuri distincte de automate: cele ı̂n care ieşirea corespunde unei stări
(automat sau maşină Moore) şi cele ı̂n care ieşirea corespunde unei tranziţii (automat sau
maşină Mealy).

Definiţia 5.3 Un automat Moore este o structură AM = (Q, Vi , Ve , δ, λ, q0 ) unde Q, Vi ,


Ve , q0 au semnificaţiile uzuale, δ : Q × Vi −→ Q este funcţia de tranziţie, iar λ : Q −→ Ve
este funcţia de ieşire.

Ieşirea unui automat Moore AM ca răspuns la cuvântul de intrare w = a1 a2 . . . an ∈


Vi∗ (n ≥ 0) este
λ(q0 )λ(q1 ) . . . λ(qn ) ∈ Ve∗
unde q0 , q1 , . . . , qn este secvenţa de stări definită δ(qi−1 , ai ) = qi , (1 ≤ i ≤ n).

Observaţia 5.1

1. La intrarea , răspunsul de ieşire este λ(q0 );


5.2. GSM-URI ŞI TRANSLATORI FINIŢI 79

2. Automatul finit determinist este un caz particular de automat Moore ı̂n care
Ve = {0, 1} şi F = {q | λ(q) = 1}.
Definiţia 5.4 Un automat Mealy este o structură AM = (Q, Vi , Ve , δ, λ, q0 ) unde Q, Vi ,
Ve , δ, q0 au semnificaţiile de la automatul Moore, iar funcţia de ieşire este λ : Q × Vi −→
Ve .
λ(q, a) dă ieşirea asociată tranziţiei din starea q cu intrarea a. Ieşirea unui automat Mealy
AM ca răspuns la cuvântul de intrare a1 a2 . . . an (n ≥ 0) este
λ(q0 , a1 )λ(q1 , a2 ) . . . λ(qn−1 , an )
unde q0 , q1 , . . . , qn este secvenţa de stări definită prin δ(qi−1 , ai ) = qi , (1 ≤ i ≤ n).
Observaţia 5.2
1. Pentru un cuvânt de intrare de lungime n, ieşirea este un cuvânt de lungime n + 1
la un automat Moore şi de lungime n la un automat Mealy.
2. Pentru automatele Mealy, la intrarea , răspunsul este .
Ambele tipuri de automate (Moore şi Mealy) pot fi tratate ı̂n mod unitar ca particularizări
ale automatelor Starke, a căror definiţie este:
Definiţia 5.5 Un automat Starke este o structură AS = (Q, Vi , Ve , h, q0 ) unde Q, Vi , Ve ,
q0 au aceleaşi semnificaţii ca mai sus, iar h : Q × Vi −→ 2Q×Ve .
Un automat Starke diferă de un gsm prin faptul că:
1. Nu are stări finale;
2. Dacă (p, x) ∈ δ(q, a) atunci |x| = 1.
De fapt, un automat Starke este un gsm ı̂n care F = Q şi δ : Q × Vi −→ 2Q×Ve .
Automatul Moore este un caz particular de automat Starke (gsm) ı̂n care funcţia h
este definită
h(q, a) = (δ(q, a), λ(q)).
Pentru automatul Mealy,
h(q, a) = (δ(q, a), λ(q, a)).
Reciproc, un automat Starke permite obţinerea unui automat Mealy (sau Moore) astfel:
Fie A1 , A2 , . . . , An mulţimi finite nevide; definim funcţia proiecţie
prk : A1 × A2 × . . . × An −→ Ak (1 ≤ k ≤ n)
ı̂n felul următor: dacă a = (a1 , a2 , . . . , an ) atunci prk (a) = ak .
80CAPITOLUL 5. METODE DE RECUNOAŞTERE PENTRU LIMBAJELE CHOMSKY

Acum, pentru un automat Starke AS = (Q, Vi , Ve , h, q0 ) se construieşte automatul


Mealy AM = (Q, Vi , Ve , δ, λ, q0 ) unde δ(q, a) = pr1 (h(q, a)), λ(q, a) = pr2 (h(q, a)).
Evident, comportările celor două automate sunt identice.
Pentru automatul Moore singura modificare este λ(q) = pr2 (h(q, a)).
Fie M = (Q, Vi , Ve , δ, λ, q0 ) un automat Mealy sau Moore; definim aplicaţia
fM : Vi∗ −→ Ve∗ astfel:
fM (x) = y ⇐⇒ (x, y) ∈ τ (M ).
Dacă M este un automat Mealy şi N este un automat Moore, nu va fi niciodată identitate
ı̂ntre funcţiile fM şi fN deoarece, pentru acelaşi x ∈ Vi∗ , |fN (x)| = |fM (x)| + 1.
Totuşi, dacă facem abstracţie de răspunsul unui automat Moore la intrarea  (ca-
racteristică fiecărui automat), putem conveni că automatul Mealy M este echivalent cu
automatul Moore N dacă bfM (x) = fN (x) unde b este ieşirea specifică lui N din starea
iniţială.
Cu această precizare, putem afirma:

Teorema 5.2 Pentru un automat Moore M1 există un automat Mealy M2 echivalent şi
reciproc.

Demonstraţie: O soluţie poate fi dată trecând prin automatele Starke. Vom prezenta ı̂nsă
şi o rezolvare directă.
”=⇒”: Fie M1 = (Q, Vi , Ve , δ, λ, q0 ) un automat Moore; se defineşte automatul Mealy
M2 = (Q, Vi , Ve , δ, λ0 , q0 ), unde singura modificare este funcţia de ieşire:

λ0 (q, a) = λ(δ(q, a)).

Echivalenţa este imediată.


”⇐=”: Fie M1 = (Q, Vi , Ve , δ, λ, q0 ) un automat Mealy; se defineşte automatul Moore
M2 = (Q × Ve , Vi , Ve , δ 0 , λ0 , [q0 , b0 ]) unde b0 ∈ Ve este arbitrar fixat, astfel:

δ 0 ([q, b], a) = [δ(q, a), λ(q, a)], λ0 ([q, b]) = b.

Se arată uşor, prin inducţie după n că, dacă pentru a1 a2 . . . an ∈ Vi∗ , M1 trece prin stările
q0 , q1 , . . . , qn şi emite ieşirile b1 , b2 , . . . , bn , atunci M2 trece prin stările [q0 , b0 ], [q1 , b1 ],
. . . , [qn , bn ] şi emite ieşirile b0 , b1 , . . . , bn . q.e.d.

5.2.3 Translatori finiţi


Un translator finit este un gsm care permite mişcări (ieşiri şi treceri ı̂n altă stare) şi ı̂n
cazul unei  - intrări. Formal, un translator finit este o structură M = (Q, Vi , Ve , δ, q0 , F )

unde Q, Vi , Ve , q0 , F au aceeaşi semnificaţie ca la gsm, iar δ : Q × (Vi ∪ {}) −→ 2Q×Ve .
5.2. GSM-URI ŞI TRANSLATORI FINIŢI 81

Notaţiile şi construcţiile prezentate la maşinile secvenţiale generalizate se păstrează şi


ı̂n cazul translatorilor finiţi. Operaţia de translatare ı̂n acest caz nu se va numi aplicaţie
gsm ci translatare finită.

Exemplul 5.4 Translatorul M = (Q, Vi , Ve , δ, q0 , F ) unde Q = {q0 , q1 , q2 , q3 },


Vi = {0, 1}, Ve = {0, 1, 2, 3}, F = {q1 } şi funcţia de tranziţie
δ(q0 , a) = (q1 , a), ∀a ∈ {, 0, 1}
δ(q1 , 0) = (q2 , ), δ(q1 , 1) = (q3 , ), δ(q2 , 0) = (q1 , 0),
δ(q2 , 1) = (q1 , 1), δ(q3 , 0) = (q1 , 2), δ(q3 , 1) = (q1 , 3)
are ca efect translatarea numerelor ı̂ntregi din baza 2 ı̂n baza 4.
Demonstraţia se bazează pe următoarea observaţie: un cuvânt w ∈ Vi∗ determină ı̂n
graful asociat un drum unic până la starea finală q1 astfel:
- dacă |w| = 2k + 1, se trece de la q0 la q1 citind primul caracter;
- dacă |w| = 2k, trecerea la q1 se face cu o  - mişcare
(alte variante determină terminarea cuvântului w ı̂n una din stările q2 , q3 , nefinale).

Un translator finit M este determinist dacă pentru orice stare q este verificată una din
condiţiile:

• ∀a ∈ Vi , |δ(q, a)| ≤ 1 şi δ(q, ) = ∅;

• |(q, )| = 1 şi δ(q, a) = ∅, ∀a ∈ Vi .

De remarcat că şi ı̂n acest caz, un translator finit poate defini mai multe translatări pentru
o singură intrare. De exemplu

q0 a/ -  -
q1  ?/b
 

permite translatările (q0 , a, ) ` (q1 , , b) ` . . . ` (q1 , , bn+1 ) ∀n ≥ 0. Deci

τ (M ) = {(a, bn )|n ≥ 1}.

Pot fi construite diverse modificări simple ale definiţiei determinismului pentru translatorii
finiţi, care să asigure unicitatea ieşirii. De exemplu, o sugestie poate fi condiţia

|δ(q, )| = 0 ∀q ∈ F.

Pentru alte proprietăţi simple ale translatorilor finiţi, recomandăm de exemplu [1], vol.
1.
Toate clasele de limbaje Chomsky sunt ı̂nchise la aplicaţiile gsm, gsm inverse şi transla-
tori finiţi. Pentru exemplificare, vom arăta acest lucru ı̂n cazul clasei limbajelor regulate.
82CAPITOLUL 5. METODE DE RECUNOAŞTERE PENTRU LIMBAJELE CHOMSKY

Teorema 5.3 L3 este ı̂nchisă la aplicaţii gsm şi translatori finiţi.

Demonstraţie: Fie M = (Q, Vi , Ve , δ, q0 , F ) un gsm şi L ⊆ Vi∗ un limbaj regulat; deci


există o gramatică regulată G = (VN , VT , S, P ) cu L(G) = L. Evident VT ⊆ Vi . Putem
presupune, fără a micşora generalitatea, că P are numai reguli de forma A −→ aB şi
există X ∈ VN unic cu X −→ .
Construim gramatica G0 = (VN 0 , VT 0 , S 0 , P 0 ) astfel:
VN 0 = Q × VN , S 0 = [q0 , S] şi P 0 are numai producţii de forma:
i. ∀ A −→ aB ∈ P, ∀ (p, w) ∈ δ(q, a), [q, A]w −→ [p, B] ∈ P 0 ;
ii. ∀ q ∈ F, [q, X] −→  ∈ P 0 .
Evident, G0 va genera un limbaj regulat. În plus, se arată folosind un procedeu de
inducţie, că L(G0 ) = M (L).
Pentru ı̂nchiderea la translatările finite, se adaugă regula:
iii. ∀ (p, w) ∈ δ(q, ) ∀ A ∈ VN , [q, A] −→ w[p, A] ∈ P 0 . q.e.d.
Pentru a arăta ı̂nchiderea faţă de aplicaţiile gsm inverse avem nevoie de un rezultat
suplimentar:

Lema 5.1 Orice gsm (translator finit) M = (Q, Vi , Ve , δ, q0 , F ) este echivalent cu un


translator finit M 0 = (Q0 , Vi , Ve , δ 0 , q0 , F ) unde δ 0 : Q × (Vi ∪ {}) −→ 2Q×(Ve ∪{}) .

Demonstraie:  Pentru fiecare (p, w) ∈ δ(q, a) cu w = x1 x2 . . . xn , (n ≥ 2) se introduc n − 1


stări noi r1 , r2 , . . . , rn−1 şi se defineşte (r1 , x1 ) ∈ δ 0 (q, a), (ri , xi ) ∈ δ 0 (ri−1 , ), (2 ≤ i ≤ n)
(prin convenţie, rn = p).
În rest (dacă |w| ≤ 1), (p, w) ∈ δ 0 (q, a) ⇐⇒ (p, w) ∈ δ(q, a). q.e.d.

Teorema 5.4 L3 este ı̂nchisă la aplicaţii gsm inverse.

Demonstraţie: Pentru gsm-ul M = (Q, Vi , Ve , δ, q0 , F ) se construieşte translatorul finit


M1 = (Q1 , Vi , Ve , δ1 , q0 , F ) dat de Lema 5.1. Pe baza lui, putem construi ı̂n etapa a doua
gsm - ul M 0 = (Q1 , Ve , Vi , δ 0 , q0 , F ) unde δ 0 este definit:

(p, x) ∈ δ 0 (q, a) ⇐⇒ (p, a) ∈ δ(q, x)

Se arată imediat că acesta este un gsm şi M 0 (L) = M −1 (L).


Restul aserţiunii din teoremă rezultă din teorema anterioară. q.e.d.
O consecinţă a acestei proprietăţi de ı̂nchidere este posibilitatea de a arăta că unele
limbaje nu sunt regulate.
5.3. AUTOMATE STIVĂ 83

Exemplul 5.5 Limbajul generat de gramatica de producţii S −→ if S then S| a nu este


regulat.
Pentru a arăta aceasta, intersectăm limbajul L(G) generat de gramatica dată mai sus
cu limbajul regulat (if )∗ a(thena)∗ şi obţinem

L1 = L(G) ∩ (if )∗ a(thena)∗ = {(if )n a(thena)n | n ≥ 0}

Construim aplicaţia gsm dată de diagrama de tranziţie



q0 a/- 
qm
2
t/-    
q3 h/ - q4 e/ - q5 n/- q6
     
6
f /0 i/ 6
a/1

 ?
?
q1

Se obţine M (L1 ) = {0k 1k |k ≥ 0}, care nu este un limbaj regulat.
Pentru că L3 este ı̂nchisă la intersecţie şi la aplicaţii gsm, rezultă că nici L(G) nu
este regulat.

5.3 Automate stivă


Automatul stivă (sau pushdown) este un mecanism destul de asemănător cu automatul
finit. Ca şi acesta, el este capabil să citească un cuvânt de intrare ı̂n mod secvenţial
(stânga-dreapta), folosind un număr finit de stări interne. Gradul crescut de complexitate
al automatului pushdown este dat ı̂nsă de o memorie auxiliară de tip stivă1 , teoretic
infinită.
După ce a citit la intrare un caracter 0 a0 , automatul stivă, aflat ı̂n starea q şi cu 0 z 0
caracter aflat ı̂n topul stivei, este capabil să efectueze următoarele acţiuni:

• Şterge 0 z 0 din stivă şi-l ı̂nlocuieşte cu un cuvânt w (posibil vid);

• Trece ı̂n altă stare p;

• Menţine capul de citire pe acelaşi caracter 0 a0 , sau trece la caracterul următor.

Automatul este ı̂n general nedeterminist: pentru fiecare triplet (q, a, z), pot fi ı̂n general
mai multe posibilităţi de continuare, alegerea unei variante fiind aleatoare teoretic.
Când un automat stivă ı̂ncepe citirea unui cuvânt de la intrare, el este ı̂ntr-o anumită
stare (numită stare iniţială) şi are un anumit caracter de start ı̂n stivă. Cuvântul de
1
Reamintim, caracteristica unei stive este aceea că informaţia deţinută de ea este accesibilă şi folosită
numai ı̂n ordinea inversă intrării. Din acest motiv, o stivă este o memorie de tip LIF O (Last In, First
Out).
84CAPITOLUL 5. METODE DE RECUNOAŞTERE PENTRU LIMBAJELE CHOMSKY

intrare este acceptat dacă şi numai dacă automatul ajunge la golirea stivei simultan cu
terminarea parcurgerii cuvântului2 .
Definiţia 5.6 Se numeşte automat stivă (pushdown) structura M = (Q, Σ, Γ, δ, q0 , Z0 )
unde
• Q, Σ, Γ sunt mulţimi finite nevide, numite respectiv mulţime de stări, alfabet de
intrare, alfabet stivă;

• q0 ∈ Q este starea iniţială;

• Z0 ∈ Γ este simbolul iniţial din stivă;



• δ : Q×(Σ∪{})×Γ −→ 2Q×Γ este funcţia de tranziţie (ı̂n general, parţial definită).
Un automat stivă M este determinist dacă

|δ(q, a, x)| ≤ 1 ∀ q ∈ Q, a ∈ Σ ∪ {}, x ∈ Γ.

La un automat stivă se lucrează cu descrieri instantanee sub forma unor triplete


(q, α, w), unde q ∈ Q, α ∈ Σ∗ , w ∈ Γ∗ . O mişcare (deplasare) pe aceste triplete se
defineşte astfel:

(q, aα, xw) ` (p, α, uw) ⇐⇒ (p, u) ∈ δ(q, a, x),

unde p, q ∈ Q, a ∈ Σ ∪ {}, x ∈ Γ, u, w ∈ Γ∗ .
Observaţia 5.3 Conform Definiţiei 5.6, α ∈ Σ∗ este un vector de tip stivă, cu vârful la
stânga (la fiecare mişcare se şterge cel mult un caracter aflat la extremitatea stângă a lui
α), iar w este memoria tip stivă a automatului, de asemenea cu vârful la stânga.

Dacă notăm cu ` ı̂nchiderea reflexivă şi tranzitivă a relaţiei `, limbajul acceptat de un
automat stivă va fi

τ (M ) = {α | α ∈ Σ∗ , (q0 , α, Z0 ) ` (q, , )}

Exemplul 5.6 Fie limbajul L = {an bn | n ≥ 1}. Un automat stivă M = (Q, Σ, Γ, δ, q0 ,


Z0 ) care acceptă L este: Q = {q0 , q1 }, Σ = {a, b}, Γ = {Z0 , A} şi
1) δ(q0 , a, Z0 ) = {(q0 , A)} 3) δ(q0 , b, A) = {(q1 , )}
2) δ(q0 , a, A) = {(q0 , AA)} 4) δ(q1 , b, A) = {(q1 , )}
2
Există şi posibilitatea de acceptare a cuvintelor de intrare prin ajungerea ı̂ntr-o stare finală – similar
automatelor finite – indiferent de conţinutul stivei. Se poate demonstra uşor că un astfel de automat
poate fi transformat ı̂ntr-un automat stivă fără stări finale, care acceptă cuvintele prin golirea stivei .
5.3. AUTOMATE STIVĂ 85

Primul caracter 0 a0 citit la intrare ( 6∈ L, deci există cel puţin un 0 a0 ) schimbă pe Z0


din stivă ı̂n A. Apoi se acceptă toate 0 a0 -urile de la intrare, efectul fiind adăugarea de
caractere A ı̂n stivă, cu rol de numărare: după citirea a p caractere 0 a0 , ı̂n stivă se află p
caractere A. Primul 0 b0 citit la intrare şterge un A din stivă şi concomitent schimbă starea.
În continuare, fiecare 0 b0 citit ”bifează” câte un A prin ştergerea lui din stivă. Cuvântul
este acceptat dacă au fost şterse toate A-urile din stivă, deci dacă numărul de 0 b0 -uri a
fost egal cu numărul de 0 a0 -uri. Schimbarea stării a fost necesară pentru a nu mai permite
citirea de caractere 0 a0 după 0 b0 -uri (cu formula 2).
Formal, egalitatea τ (M ) = L se arată prin dublă incluziune.

”⊇”: Fie an bn ∈ L; atunci (q0 , an bn , Z0 ) ` (q1 , , ) prin aplicarea succesivă a regulilor:
(1) odată, (2) de n − 1 ori, (3) odată, şi (4) de n − 1 ori.

”⊆”: Fie α ∈ τ (M ); deci (q0 , α, Z0 ) ` (q1 , , ). Singura regulă care se poate aplica la
ı̂nceput este (1); deci cuvântul α ı̂ncepe cu 0 a0 .
Să presupunem că numărul maxim de 0 a0 -uri de la ı̂nceputul lui α este n; deci α = an α1 .
Atunci
n−1
(q0 , an α1 , Z0 ) ` (q0 , an−1 α1 , A) ` (q0 , α1 , An ).
α1 ı̂ncepe cu 0 b0 . Să presupunem că sunt k 0 b0 -uri succesive la ı̂nceputul lui α1 : α1 = bk α2 .
Atunci
k−1
(q0 , bk α2 , An ) ` (q1 , bk−1 α2 , An−1 ) ` (q1 , α2 , An−k )
şi α2 nu ı̂ncepe cu 0 b0 . Sunt două posibilităţi:
1. α2 6= : Atunci α2 ı̂ncepe cu 0 a0 , ceea ce contrazice faptul că α ∈ τ (M ), derivarea
blocându-se ı̂n acest moment (nu se mai poate aplica nici una din regulile 1. − 4.).

2. α2 = : Atunci, pentru că α ∈ τ (M ), stiva trebuie să fie vidă, deci n = k. Rezultă
α = an bn ∈ L.

Exemplul 5.7 Automatele finite pot fi considerate cazuri particulare de automate stivă.
Într-adevăr, un AF D M = (Q, V, δ, q0 , F ) poate fi scris sub forma M1 = (Q, V, {Z0 }, δ1 ,
q0 , Z0 ) unde δ1 (q, a, Z0 ) = {(δ(q, a), Z0 )} ∪ A ı̂n care
(
∅ dacă δ(q, a) 6∈ F
A=
(q, ) dacă δ(q, a) ∈ F

Avem echivalenţa (evidentă)

(q, a1 a2 . . . an , Z0 ) ` (q1 , a2 . . . an , Z0 ) ⇐⇒ δ(q, a) = q1 .



Aplicând această regulă de n ori, se ajunge la (q, a1 a2 . . . an , Z0 ) ` (qn−1 , an , Z0 ).
86CAPITOLUL 5. METODE DE RECUNOAŞTERE PENTRU LIMBAJELE CHOMSKY

Vom avea (qn−1 , an , Z0 ) ` (qn−1 , , ) ⇐⇒ δ(qn−1 , an ) ∈ F ; deci



(q0 , α, Z0 ) ` (q, , ) ⇐⇒ δ(q0 , α) ∈ F

Teorema 5.5 Automatele stivă sunt metode de recunoaştere.

Demonstraţie: Fie automatul stivă M = (Q, Σ, Γ, δ, q0 , Z0 ), unde – fără a micşora genera-


litatea – putem presupune că mulţimile Q, Σ şi Γ sunt disjuncte (şi nevide). Pe baza lui
construim metoda de recunoaştere Mr astfel:
V = Q ∪ Σ ∪ Γ, AX = Q, W = Σ,
P = {(qx, pα) | (p, α) ∈ δ(q, , x)} ∪ {(qax, pα) | (p, α) ∈ δ(q, a, x)} ∪ {(, q0 Z0 )} ∪
{(xa, ax) | a ∈ Σ, x ∈ Γ}.
Mai trebuie demonstrată egalitatea τ (M ) = L, unde τ (M ) este limbajul acceptat de

automatul stivă M , iar L = {w | w ∈ Σ∗ , ∃q ∈ Q, w =⇒ q}.
Pentru aceasta, să arătăm ı̂ntâi echivalenţa

(q, aα, xw) ` (p, α, uw) ⇐⇒ qxwaα =⇒ puwα

unde p, q ∈ Q, a ∈ Σ ∪ {}, α ∈ Σ∗ , x ∈ Γ, u, w ∈ Γ∗ .
”=⇒”: (q, aα, xw) ` (p, α, uw) =⇒ (p, u) ∈ δ(q, a, x). Din construcţia lui Mr
rezultă că (qax, pu) ∈ P . Atunci

qxwaα =⇒ qaxwα =⇒ puwα (2)
unde prima parte a derivării este posibilă datorită regulilor de rescriere {(xa, ax) | ∀x ∈
Γ, a ∈ Σ}.
De remarcat că dacă a = , atunci această primă parte a derivării se aplică de 0 ori.
”⇐=”: Din analiza regulilor din P rezultă că (2) este singura posibilitate de generare
a formei sentenţiale puwα plecând de la qxwaα.
Deci, din existenţa ultimei generări directe, avem (p, u) ∈ δ(q, a, x), de unde rezultă –
conform definiţiei – că (q, aα, xw) ` (p, α, uw).
Folosind acum un procedeu de inducţie după lungimea derivării, se obţine echivalenţa
∗ ∗
(q0 , α, Z0 ) ` (q, , ) ⇐⇒ q0 Z0 α =⇒ q.

Regula (, q0 Z0 ) nu se poate aplica decât pe prima poziţie (altfel, cuvântul aflat ı̂n faţa
lui q0 nu se mai poate reduce); deci

α =⇒ q0 Z0 α =⇒ q.

q.e.d.
Prima teoremă fundamentală a acestei secţiuni este următoarea:
5.3. AUTOMATE STIVĂ 87

Teorema 5.6 Orice limbaj independent de context este acceptat de un automat stivă.
Demonstraţie: Fie L ∈ L2 şi G = (VN , VT , S, P ) o gramatică independentă de context cu
L(G) = L. Construim automatul stivă M = ({q}, VT , VN ∪ VT , δ, q, S) unde funcţia de
tranziţie δ este definită astfel:
δ(q, , A) = {(q, α) | A −→ α ∈ P } pentru toate neterminalele A ∈ VN ;
δ(q, x, x) = {(q, )}, ∀x ∈ VT ;
δ(q, a, b) = ∅ ı̂n rest.
Vom arăta că L(G) = τ (M ).

”⊆”: Fie α ∈ L(G); deci există o derivare S =⇒ α ı̂n gramatica G. Fiind independentă
de context, putem aranja această derivare ı̂n aşa fel ı̂ncât la fiecare pas, producţia care se
aplică este o rescriere a celui mai din stânga neterminal.

S =⇒ α1 A1 w1 =⇒ α1 α2 A2 w2 =⇒ α1 α2 . . . αk−1 Ak−1 wk−1 =⇒ α1 α2 . . . αk = α
cu αi ∈ VT∗ , Ai ∈ VN , wi ∈ (VN ∪ VT )∗ .
Ţinând cont acum de modul de construire al automatului M , rezultă

(q, α1 α2 . . . αk , S) ` (q, α1 α2 . . . αk , α1 A1 w1 ) ` (q, α2 . . . αk , A1 w1 ) `
∗ ∗
` (q, α2 . . . αk , α2 A2 w2 ) ` (q, αk , Ak−1 wk−1 ) ` (q, αk , αk ) ` (q, , ).
”⊇”: Fie α ∈ τ (M ); deci există o secvenţă
(q, α, S) = (q, a1 a2 . . . an , u1 ) ` (q, a2 a3 . . . an , u2 ) ` . . . ` (q, an , un ) ` (q, , )
cu ui ∈ (VN ∪ VT )∗ , ai ∈ VT ∪ {}.

Va trebui să arătăm că S =⇒ α. Pentru aceasta, vom demonstra prin inducţie des-
crescător după i (1 ≤ i ≤ n), că

ui =⇒ ai ai+1 . . . an (3)

Pentru cazul i = n, (q, an , un ) ` (q, , ) numai ı̂n cazul un = an ; deci un =⇒ an .
Să presupunem că derivarea (3) are loc pentru orice i (1 < i ≤ n) şi să o arătăm

ui−1 =⇒ ai−1 ai . . . an .
Relaţia (q, ai−1 ai . . . an , ui−1 ) ` (q, ai . . . an , ui ) conduce la două cazuri:
1. ai−1 ∈ VT : atunci ui−1 = ai−1 ui (altă posibilitate de derivare nu există) şi deci

ui−1 = ai−1 ui =⇒ ai−1 ai . . . an
conform ipotezei de inducţie.
2. ai−1 = : atunci derivarea a fost efectuată pe baza primei reguli. Deci ui−1 = Au0i−1
cu A ∈ VN , ui = βu0i−1 şi A −→ β ∈ P . Rezultă

ui−1 = Au0i−1 =⇒ βu0i−1 = ui =⇒ ai . . . an = ai−1 ai . . . an .
∗ ∗
Pentru i = 1 relaţia (3) devine u1 =⇒ a1 a2 . . . an = α şi cum u1 = S, rezultă S =⇒ α.
q.e.d.
88CAPITOLUL 5. METODE DE RECUNOAŞTERE PENTRU LIMBAJELE CHOMSKY

Teorema 5.7 Clasa limbajelor acceptate automatele stivă este L2 .

Demonstraţie: Fie M = (Q, Σ, Γ, δ, q0 , Z0 ) un automat stivă. Construim gramatica G =


(VN , VT , S, P ) astfel:
VT = Σ,
VN = {[q, A, p] | p, q ∈ Q, A ∈ Γ} ∪ {S},
iar mulţimea P a producţiilor este formată din
1. S −→ [q0 , Z0 , q] pentru toate stările q ∈ Q;

2. [q, A, qm+1 ] −→ a[q1 , B1 , q2 ][q2 , B2 , q3 ] . . . [qm , Bm , qm+1 ]


∀q, q1 , q2 , . . . , qm+1 ∈ Q, a ∈ Σ ∪ {}, A, B1 , B2 , . . . , Bm ∈ Γ cu proprietatea
(q1 , B1 B2 . . . Bm ) ∈ δ(q, a, A).
Când m = 0, producţia este [q, A, q1 ] −→ a.
Pentru a arăta egalitatea L(G) = τ (M ), vom demonstra ı̂n prima etapă – prin inducţie
după numărul de paşi ı̂ntr-o derivare a lui G, respectiv după numărul de mişcări ı̂n
automatul M – echivalenţa
∗ ∗
[q, A, p] =⇒ α ⇐⇒ (q, α, A) ` (p, , )
i ∗
• ”Dacă (q, α, A) ` (p, , ), atunci [q, A, p] =⇒ α.”
Pentru i = 1 : δ(q, α, A) conţine elementul (p, ) (ı̂n particular, |α| ≤ 1). Deci
[q, A, p] −→ α ∈ P şi derivarea este imediată (conform definiţiei).
i−1
Să considerăm i > 1. Fie α = aβ şi (q, aβ, A) ` (q1 , β, B1 B2 . . . Bn ) ` (p, , ).
Cuvântul β poate fi scris β = β1 β2 . . . βn , unde fiecare βj are ca efect ştergerea lui
Bj din stivă (după un număr arbitrar de mişcări). Altfel spus, fie β1 prefixul lui β
la sfârşitul căruia stiva ajunge la n − 1 simboluri, β2 cuvântul care urmează după
β1 , la sfârşitul căruia lungimea stivei mai scade cu o unitate etc. S-a considerat
lungimea iniţială a stivei ca fiind 1 (aici se află doar caracterul A).
De remarcat că B1 nu se află ı̂n topul stivei tot timpul citirii lui β1 ; el poate fi
schimbat (dacă este ı̂n top) cu zero, unu sau mai multe caractere. Important este
faptul că B2 , B3 , . . . Bn nu vor fi niciodată ı̂n topul stivei ı̂n timpul citirii lui β1 ; deci
ele nu vor putea influenţa comportarea automatului. În general Bj stă nemodificat
ı̂n stivă până la parcurgerea completă a lui β1 . . . βj−1 .
Există stările q2 , q3 , . . . , qn+1 (qn+1 = p) astfel ı̂ncât

(qj , βj , Bj ) ` (qj+1 , , )
5.3. AUTOMATE STIVĂ 89

ı̂n mai puţin de i mişcări (qj este starea atinsă ı̂n momentul când stiva ajunge la
n − j + 1 elemente). Ipoteza de inducţie asigură atunci derivările

[qj , Bj , qj+1 ] =⇒ βj , (1 ≤ j ≤ n)

Primei mişcări, (q, aβ, A) ` (q1 , β, B1 B2 . . . Bn ) ı̂i corespunde prin definiţie producţia
[q, A, p] −→ a[q1 , B1 , q2 ][q2 , B2 , q3 ] . . . [qn , Bn , qn+1 ].
Compunând derivările, se obţine forma finală

[q, A, p] =⇒ aβ1 β2 . . . βn = α

i ∗
• ”Dacă [q, A, p] =⇒ α atunci (q, α, A) ` (p, , ).”
i = 1: Afirmaţia este imediată, pentru că [q, A, p] −→ α trebuie să fie o producţie a
gramaticii G, şi deci (p, ) ∈ δ(q, α, A) (ı̂n subsidiar, |α| ≤ 1).
Pentru a doua fază a inducţiei, să presupunem că primul pas al derivării este
[q, A, p] =⇒ a[q1 , B1 , q2 ][q2 , B2 , q3 ] . . . [qn , Bn , qn+1 ] unde qn+1 = p. Atunci, conform
Lemei 4.1., putem scrie α = aα1 α2 . . . αn , unde

[qj , Bj , qj+1 ] =⇒ αj (1 ≤ j ≤ n).

Fiecare astfel de derivare are mai puţin de i paşi. Conform ipotezei de inducţie, va

rezulta (qj , αj , Bj ) ` (qj+1 , , ). Dacă inserăm ı̂n stivă Bj+1 . . . Bn , avem

(qj , αj , Bj Bj+1 . . . Bn ) ` (qj+1 , , Bj+1 . . . Bn ).

Din primul pas al derivării lui α din [q, A, p] se obţine



(q, α, A) ` (q1 , α1 α2 . . . αn , B1 B2 . . . Bn ).

Va rezulta ı̂n final (q, α, A) ` (p, , ).

Luând acum q = q0 , A = Z0 , putem scrie


∗ ∗
[q0 , Z0 , p] =⇒ α ⇐⇒ (q0 , α, Z0 ) ` (p, , )

sau – folosind şi prima regulă din P :


∗ ∗
S =⇒ α ⇐⇒ (q0 , α, Z0 ) ` (p, , )

adică α ∈ L(G) ⇐⇒ α ∈ τ (M ). q.e.d.


90CAPITOLUL 5. METODE DE RECUNOAŞTERE PENTRU LIMBAJELE CHOMSKY

Observaţia 5.4 Spre deosebire de automatele finite deterministe – care acceptă orice
limbaj regulat – automatele stivă deterministe nu acoperă L2 . Există limbaje independente
de context care nu sunt acceptate de nici un automat stivă determinist. Un exemplu
standard este
L = {ai bj ck |i = j sau j = k, i, j, k ≥ 1}.
Exemplul 5.8 Fie gramatica G = ({E, T, F }, {+, ∗, (, ), a}, E, P ) care generează expre-
siile aritmetice construite cu operatorii +, ∗ şi operandul a. Producţiile acestei gramatici
sunt
P = {E −→ E + T |T, T −→ T ∗ F |F, F −→ (E)|a}.
Folosind construcţia din demonstraţia Teoremei 5.6, automatul stivă echivalent este M =
(Q, Σ, Γ, δ, q, Z0 ) unde Q = {q}, Σ = {+, ∗, (, ), a}, Γ = {E, T, F, +, ∗, (, ), a}, Z0 = E şi
δ(q, , E) = {(q, E + T ), (q, T )}
δ(q, , T ) = {(q, T ∗ F ), (q, F )}
δ(q, , F ) = {(q, (E)), (q, a)}
δ(q, x, x) = {(q, )}, x ∈ {+, ∗, (, ), a}
Să luăm de exemplu cuvântul (a + a) ∗ a. O derivare a sa ı̂n gramatica G este
E =⇒ T =⇒ T ∗ F =⇒ F ∗ F =⇒ (E) ∗ F =⇒ (E + T ) ∗ F =⇒ (T + T ) ∗ F =⇒
=⇒ (F + T ) ∗ F =⇒ (a + T ) ∗ F =⇒ (a + F ) ∗ F =⇒ (a + a) ∗ F =⇒ (a + a) ∗ a
În automatul M vom avea secvenţa de mişcări
(q, (a + a) ∗ a, E) ` (q, (a + a) ∗ a, T ) ` (q, (a + a) ∗ a, T ∗ F ) ` (q, (a + a) ∗ a, F ∗ F ) `
(q, (a + a) ∗ a, (E) ∗ F ) ` (q, a + a) ∗ a, E) ∗ F ) ` (q, a + a) ∗ a, E + T ) ∗ F ) ` (q, a + a) ∗ a, T +
T ) ∗ F ) ` (q, a + a) ∗ a, F + T ) ∗ F ) ` (q, a + a) ∗ a, a + T ) ∗ F ) ` (q, +a) ∗ a, +T ) ∗ F ) `
(q, a) ∗ a, T ) ∗ F ) ` (q, a) ∗ a, F ) ∗ F ) ` (q, a) ∗ a, a) ∗ F ) ` (q, ) ∗ a, ) ∗ F ) ` (q, ∗a, ∗F ) `
(q, a, F ) ` (q, a, a) ` (q, , )
De remarcat multitudinea de variante care apar la fiecare moment, şi necesitatea de a
alege drumul corect, evitând toate celelalte variante care nu conduc la rezultat, blocându-se
mai devreme sau mai târziu.
Exemplul 5.9 În cazul când gramatica G are numai producţii de forma A −→ aα,
atunci automatul stivă asociat poate fi construit fără -mişcări (δ(q, a, x) este definit numai
pentru a 6= ). Această construcţie se bazează pe faptul că aplicarea unei reguli δ(q, , A) =
(q, aα) este urmată obligatoriu de folosirea regulii δ(q, a, a) = (q, ) – şi numai de aceasta.
De aceea, cele două reguli se pot comasa ı̂n δ(q, a, A) = (q, α).
Să luăm de exemplu gramatica de producţii
S −→ aAA, A −→ aS|bS|a
Automatul stivă echivalent va avea funcţia de tranziţie definită astfel:
δ(q, a, S) = {(q, AA)}, δ(q, a, A) = {(q, S), (q, )}, δ(q, b, A) = {(q, S)}
5.3. AUTOMATE STIVĂ 91

Această facilitate a condus la construirea unei forme speciale de gramatici independente


de context pe care o vom prezenta ı̂n Capitolul următor – forma normală Greibach.

Exemplul 5.10 Să construim o gramatică independentă de context pentru limbajul ac-
ceptat de automatul M = ({q0 , q1 }, {0, 1}, {Z0 , X}, δ, q0 , Z0 ) unde
(1) δ(q0 , 1, Z0 ) = {(q0 , XZ0 )}
(2) δ(q0 , 1, X) = {(q0 , XX)}
(3) δ(q0 , 0, X) = {(q1 , X)}
(4) δ(q0 , , Z0 ) = {(q1 , )}
(5) δ(q1 , 0, Z0 ) = {(q0 , Z0 )}
(6) δ(q1 , 1, X) = {(q1 , )}
Vom avea – conform construcţiei din demonstraţia Teoremei 5.7: VT = {0, 1}, VN =
{[q0 , Z , q ], [q0 , Z0 , q1 ], [q1 , Z0 , q0 ], [q1 , Z0 , q1 ], [q0 , X, q0 ], [q0 , X, q1 ], [q1 , X, q0 ], [q1 , X, q1 ], S},
0 0

 (0) S −→ [q0 , Z0 , q0 ] | [q0 , Z0 , q1 ]
(1) [q , Z0 0 ] −→ 1[q0 , X, q0 ][q0 , Z0 , q0 ] | 1[q0 , X, q1 ][q1 , Z0 , q0 ]
, q




 0
[q0 , Z0 , q1 ] −→ 1[q0 , X, q0 ][q0 , Z0 , q1 ] | 1[q0 , X, q1 ][q1 , Z0 , q1 ]





(2) [q 0 , X , q0 ] −→ 1[q0 , X, q0 ][q0 , X, q0 ] | 1[q0 , X, q1 ][q1 , X, q0 ]





[q0 , X, q1 ] −→ 1[q0 , X, q0 ][q0 , X, q1 ] | 1[q0 , X, q1 ][q1 , X, q1 ]




P =  (3) [q0 , X , q0 ] −→ 0[q1 , X, q0 ]



 [q0 , X , q1 ] −→ 0[q1 , X, q1 ]
(4) [q0 , Z0 , q1 ] −→ 





(5) [q1 , Z0 , q0 ] −→ 0[q0 , Z0 , q0 ]





[q1 , Z0 , q1 ] −→ 0[q0 , Z0 , q1 ]





(6) [q1 , X , q1 ] −→ 1

Dacă renotăm neterminalele:


[q0 , Z0 , q0 ] ≡ A1 , [q0 , Z0 , q1 ] ≡ A2 , [q1 , Z0 , q0 ] ≡ A3 , [q1 , Z0 , q1 ] ≡ A4 ,
[q0 , X, q0 ] ≡ B1 , [q0 , X, q1 ] ≡ B2 , [q1 , X, q0 ] ≡ B3 , [q1 , X, q1 ] ≡ B4 ,
setul  de producţii poate fi rescris mai clar:

 S −→ A1 |A2 B2 −→ 1B2 B4 |1B1 B2 |0B4
 A −→ 1B A |1B A |

A3 −→ 0A1
1 1 1 2 3
P =
 2

 A −→ 1B A
1 2 |1B A
2 4 A 4 −→ 0A2
B1 −→ 1B1 B2 |1B2 B3 |0B3 B4 −→ 1

Exemplul 5.11 Să considerăm limbajul L = {am can | m ≥ n ≥ 0}.


O gramatică independentă de context pentru L se poate defini imediat: vom lua de
exemplu gramatica de producţii S −→ aSa|aS|c.
Automatul stivă echivalent este M = ({q}, {a, c}, {S, a, c}, δ, q, S), unde funcţia de
tranziţie δ este definită
δ(q, , S) = {(q, aSa), (q, aS), (q, c)}, δ(q, a, a) = {(q, )}, δ(q, c, c) = {(q, )}
| {z } | {z } | {z } | {z } | {z }
1a 1b 1c 2 3
92CAPITOLUL 5. METODE DE RECUNOAŞTERE PENTRU LIMBAJELE CHOMSKY

De exemplu, cuvântul a2 ca este acceptat pe baza secvenţei de mişcări


1a 2 1b 2 1c 3
(q, aaca, S) ` (q, aaca, aSa) ` (q, aca, Sa) ` (q, aca, aSa) ` (q, ca, Sa) ` (q, ca, ca) `
3 2
` (q, a, a) ` (q, , ) (s-au aplicat regulile marcate).
Datorită formei particulare a producţiilor, automatul se poate construi şi fără -miş-
cări, conform Exerciţiului 5.9. El este M 0 = ({q}, {a, c}, {S, a}, δ 0 , q, S), unde funcţia de
tranziţie δ 0 se defineşte

δ 0 (q, a, S) = {(q, Sa), (q, S)}, δ 0 (q, c, S) = {(q, )}, δ 0 (q, a, a) = {(q, )}
| {z } | {z } | {z } | {z }
1a 1b 2 3

Regula δ 0 (q, c, c) = {(q, )} nu este necesară, deoarece 0 c0 nu apare ı̂n stivă (deci o astfel
de regulă nu se va aplica niciodată).
Pentru acelaşi cuvânt (a2 ca) se va folosi secvenţa de mişcări (evident, mai scurtă):
1a 1b 2 3
(q, aaca, S) ` (q, aca, Sa) ` (q, ca, Sa) ` (q, a, a) ` (q, , )
Să ı̂ncercăm acum procedeul invers: plecând de la acest automat stivă, să construim o
gramatică independentă de context care să genereze L.
Vom  avea VT = {a, c}, VN = {S, [q, S, q], [q, a, q]} şi



(0) S −→ [q, S, q] | [q, a, q]
(1a) [q, S, q] −→ a[q, S, q][q, a, q]




P = (1b) [q, S, q] −→ a[q, S, q]
(2) [q, S, q] −→ c





 (3) [q, a, q] −→ a

Renotând [q, S, q] ≡ A, [q, a, q] ≡ B, obţinem gramatica de producţii

S −→ A|B, A −→ aAB|aA|c, B −→ a

echivalentă (evident) cu gramatica iniţială.

5.4 Automate pentru L1 şi L0


Pentru clasele de limbaje Chomsky L1 , L0 se pot defini de asemenea metode de acceptare
de tip automat. Astfel, pentru limbajele dependente de context există automatele liniar
mărginite, iar pentru L0 – maşinile Turing. Acestor două clase de automate le vom
consacra Capitolele 7 şi 8.
5.5. EXERCIŢII 93

5.5 Exerciţii
Exerciţiul 5.1 Să se demonstreze echivalenţa (1), utilizând o inducţie după lungimea
cuvântului α.

Exerciţiul 5.2 Să se construiască automate finite pentru gramaticile regulate, de produc-
ţii
a) P = {S −→ aS|bA|a, A −→ aA|bS|b}
b) P = {S −→ aS|aA|a, A −→ bA}

Exerciţiul 5.3 Să se refacă demonstraţia lemei de pompare ı̂n termeni de gramatici re-
gulate.

Exerciţiul 5.4 Să se arate că limbajul din Exemplul 5.6 poate fi generat şi de următoarele
automate stivă
a) Q = {q0 }, Σ = {a, b}, Γ = {Z0 , a, b},
δ(q0 , , Z0 ) = {(q0 , aZ0 b), (q0 , ab)}, δ(q0 , a, a) = {(q0 , )}, δ(q0 , b, b) = {q0 , )}.
b) Q = {q0 }, Σ = {a, b}, Γ = {Z0 , b},
δ(q0 , a, Z0 ) = {(q0 , Z0 b), (q0 , b)}, δ(q0 , b, b) = {q0 , )}.

Exerciţiul 5.5 Să se construiască automate stivă pentru limbajele

L1 = {an bn+1 | n ≥ 0}, L2 = {an b2n | n ≥ 0}, L3 = {an bm | n > m ≥ 0}.

Exerciţiul 5.6 Să se arate că un AF poate fi descris ca un automat stivă sub forma
M1 = ({q0 }, V, Q, δ1 , q0 , q0 ) unde
δ1 (q0 , a, q) = (q0 , p) ⇐⇒ δ(q, a) = p
δ1 (q0 , , q) = (q0 , ), ∀ q ∈ F

Exerciţiul 5.7 Să se construiască automate stivă care să accepte limbajele

L1 = {w | w ∈ {a, b}, |w|a = |w|b }, L2 = {an bm an ”0 n, m ≥ 0}, L3 = {ai bj ck i, j, k ≥ 0}.

Exerciţiul 5.8 Să se construiască automate stivă pentru gramaticile de producţii

1. S −→ ABC, A −→ BB|, B −→ CC|a, C −→ AA|b

2. S −→ aSb|bSa|SS|

Să se verifice dacă aceste automate acceptă cuvintele:


babb, abba (cazul 1.), aabbbab, ababbbaa (cazul 2.)
94CAPITOLUL 5. METODE DE RECUNOAŞTERE PENTRU LIMBAJELE CHOMSKY

Exerciţiul 5.9 Să se construiască automate stivă fără -mişcări pentru gramaticile de
producţii

1. S −→ aSbS|bSaS|

2. S −→ aAA, A −→ aS|bS|a

3. S −→ aB|bA, A −→ a|aS|bAA, B −→ b|bS|aBB

Pentru automatul stivă construit ı̂n cazul 1., să se cerceteze acceptarea cuvântului baab şi
să se compare cu aceeaşi problemă ı̂n cazul Exerciţiului 5.7, limbajul L1 .

Exerciţiul 5.10 Să se definească gramatici independente de context echivalente cu au-


tomatele stivă având funcţiile de tranziţie

1. δ(a0 , a, Z0 ) = {(q1 , Z0 ), (q2 , Z0 Z0 )}, δ(q1 , b, Z0 ) = {(q1 , Z0 ), (q2 , )},


δ(q2 , a, Z0 ) = {(q2 , ), (q1 , Z0 )}

2. δ(q0 , a, Z0 ) = {(q0 , XZ0 )}, δ(q0 , a, X) = {(q0 , XX)}, δ(q0 , b, X) = {(q1 , X)}
δ(q0 , , Z0 ) = {(q0 , )}, δ(q1 , a, X) = {(q1 , )}, δ(q1 , b, Z0 ) = {q0 , Z0 )}.

Exerciţiul 5.11 Să se arate că dacă L este un limbaj independent de context, atunci
există un automat stivă M cu L = τ (M ) astfel ı̂ncât:

1. Dacă (p, u) ∈ δ(q, a, x) atunci |u| ≤ 2;

2. (q, aα, Xγ) ` (0, α, uγ) =⇒ γ =  sau γ = X sau γ = Y X.


Capitolul 6

Gramatici independente de context

6.1 Introducere
Importanţa gramaticilor independente de context (cf g) este deosebită din cauza ariei
largi de aplicabilitate. Modalitatea relativ uşoară de generare a cuvintelor a condus
la un studiu aprofundat al lor. Rolul cfg-urilor a devenit predominant ı̂n probleme de
limbaje de programare, compilatoare, prelucrarea secvenţială a textelor (numită şi analiză
sintactică), studiul sistemelor, modele ADN etc.
Cea mai mare parte a structurii unui limbaj de programare poate fi specificată cu
ajutorul unei astfel de gramatici. Un program (scris ı̂n P ascal, C, C + +, dar nu numai)
este un cuvânt generat de o astfel de gramatică. Primul lucru pe care-l face un compilator
atunci când citeşte un program este să-l translateze ı̂ntr-o secvenţă de simboluri mai uşor
de manipulat, iar apoi să-l ”analizeze”, adică să descopere dacă există o derivare de la
simbolul de start la acest cuvânt. În caz afirmativ, programul merge mai departe spre
execuţie; altfel, este respins cu ”erori sintactice”.
Clasa gramaticilor independente de context a fost utilizată iniţial pentru o descriere
primară a limbajului natural. De exemplu, să considerăm regulile
< propozitie > −→ < subiect >< predicat >
< subiect > −→ < substantiv >< adjectiv >
< substantiv > −→ < nume >
< nume > −→ apa
< adjectiv > −→ rece | calda
< predicat > −→ curge | citeste
unde VN conţine cuvintele (”atributele”) cuprinse ı̂ntre parantezele unghiulare <, >, iar
VT = {apa, rece, calda, curge, citeste}.
O derivare conform acestor producţii poate fi:
< propozitie >=⇒< subiect >< predicat >=⇒< substantiv >< adjectiv >

95
96 CAPITOLUL 6. GRAMATICI INDEPENDENTE DE CONTEXT

< predicat >=⇒< nume >< adjectiv >< predicat >=⇒ apa < adjectiv >< predicat >

=⇒ apa rece < predicat >=⇒ apa rece curge


Această modalitate de reprezentare a limbajelor naturale a fost ı̂nsă parţial abandonată
din mai multe motive; unul din cele mai importante a fost necesitatea de a folosi şi
informaţii semantice pentru generarea de propoziţii corecte sintactic.
De exemplu, conform regulilor de mai sus, se poate obţine şi ”cuvântul” corect sintactic
”apa calda citeste”, care ı̂nsă nu are nici un ı̂nţeles.
Utilizat cu discernământ, aparatul de lucru oferit de gramaticile independente de
context joacă ı̂nsă un rol destul de important ı̂n lingvistica pe calculator.

6.2 Arbori de derivare şi derivări independente de


context
Fiind dată o gramatică G = (VN , VT , S, P ) şi un cuvânt w ∈ L(G), uneori este important
să avem o privire de ansamblu asupra modului cum se obţine cuvântul w conform regu-
lilor gramaticii; adică dorim să avem o descriere structurală a derivării lui w. În cazul
gramaticilor independente de context derivările sunt caracterizate natural prin arborii de
derivare.

Definiţia 6.1 Fie Z o mulţime finită nevidă şi U ⊆ Z × Z. Se numeşte arbore, graful
Γ = (Z, U ) cu proprietăţile:

1. ∃ a0 ∈ Z unic cu {(a, a0 ) | a ∈ Z} ∩ U = ∅;

2. ∀a ∈ Z \ {a0 }, ∃a1 , a2 , . . . , ak ∈ Z unici, cu ak = a, (ai , ai+1 ) ∈ U (0 ≤ i ≤ k − 1).

Observaţia 6.1 Un arbore este un graf fără cicluri şi fără noduri izolate.

a0 se numeşte rădăcina arborelui.


Pentru (a, a0 ) ∈ U, a0 este descendentul direct al lui a, iar a – ascendentul direct al lui
a0 ı̂n arborele Γ.
a0 este descendentul lui a dacă există un drum ı̂n arbore de la a la a0 .
Un nod a0 cu proprietatea {(a0 , a) | a ∈ Z} ∩ U = ∅ se numeşte nod final sau terminal1 .
Altfel, a0 este un nod interior.
Un nod a este pe nivelul k dacă drumul de la rădăcină la a este de lungime k − 1; ı̂n
particular rădăcina este pe nivelul 1. k se numeşte numărul de nivel al nodului a.
1
Este cunoscut şi sub numele de frunză, din terminologia engleză a domeniului (leaf).
6.2. ARBORI DE DERIVARE ŞI DERIVĂRI INDEPENDENTE DE CONTEXT 97

Observaţia 6.2 Orice arc leagă două noduri aflate pe nivele vecine. Evident, dacă există
un nod x pe nivelul k, atunci pe fiecare din nivelele 1, 2, . . . , k − 1 se află câte un nod al
cărui descendent este x. Aceste noduri sunt unice.
Se numeşte subarbore un arbore având rădăcina pe un nivel k > 1.
Fie acum G = (VN , VT , S, P ) o gramatică independentă de context şi
X = α0 =⇒ α1 =⇒ . . . =⇒ αr (1)
o derivare oarecare ı̂n această gramatică. Să arătăm cum se poate ataşa un arbore acestei
derivări.
Nodurile arborelui vor fi notate cu elemente din VN ∪ VT ∪ {}; nodurile interioare sunt
notate numai cu simboluri neterminale.
Punând ı̂n evidenţă producţiile utilizate ı̂n derivarea (1), fie
Ai −→ βi astfel ı̂ncât αi = ui Ai vi , αi+1 = ui βi vi , (0 ≤ i ≤ r − 1) (2)

unde Ai ∈ VN , ui , vi , βi ∈ (VN ∪ VT ) .
În particular A0 = X, β0 = α1 .
Algoritm 6.1:
Intrare: O derivare (1) ı̂n gramatica independentă de context G = (VN , VT , S, P );
Ieşire: Un arbore Γ = (Z, U ) ataşat derivării (1);
Algoritm:

1. i := 1; Z := {(1)};

2. Presupunem că pentru ∀ j (j ≤ i) s-a prelucrat forma sentenţială


αj = a1j a2j . . . anj ; atunci există (n1 , n2 , . . . , njp ) ∈ Z cu
apj = h((n1 , n2 , . . . , njp )) (1 ≤ p ≤ n).
Fie acum nodul (n1 , n2 , . . . , nt ) ∈ Z de pe nivelul t cu
h(n1 , n2 , . . . , nt ) = Ai (Ai dat de (2)). Apar două cazuri:

(a) βi = ; atunci Z := Z∪{(n1 , n2 , . . . , nt , 1)} şi h((n1 , n2 , . . . , nt , 1)) = ;


(b) βi = a1 a2 . . . an ; atunci Z := Z ∪ {(n1 , n2 , . . . , nt , p) | 1 ≤ p ≤ n} şi
h((n1 , n2 , . . . , nt , p)) = ap , (1 ≤ p ≤ n);

3. i := i + 1; dacă i < r salt la Pasul 2;

4. U := {((n1 , n2 , . . . , nt ), (n1 , n2 , . . . , nt , nt+1 )) ∈ Z × Z | 1 ≤ t ≤ r}.

Nodurile arborelui
[ ataşat derivării (1) vor fi k-tupluri (k ≤ r + 1) de numere naturale.
Notăm [N ] = N i . Fie homomorfismul h parţial definit h : [N ] −→ VN ∪ VT ∪ {},
i≥1
h((n1 , n2 , . . . , nt )) reprezentând notarea nodului (n1 , n2 , . . . , nt ).
98 CAPITOLUL 6. GRAMATICI INDEPENDENTE DE CONTEXT

Exemplul 6.1 Fie gramatica G = (VN , VT , S, P ) cu

VN = {S}, VT = {a, b}, P = {S −→ aSbS|bSaS|}

Pentru derivarea

S =⇒ aSbS =⇒ abSaSbS =⇒ abaSbS =⇒ abaSb =⇒ abab

avem arborele de derivare:


(1)
P
@PPP
  PP
  @ PP
)
 R
@ q
P
(1, 1) P
(1, 2) (1, 3) (1, 4)
 @PPP
 PP
 @ PP
)
 R
@ q
P ?
(1, 2, 1) (1, 2, 2) (1, 2, 3) (1, 2, 4) (1, 4, 1)

? ?
(1, 2, 2, 1) (1, 2, 4, 1)
Putem observa următoarele:

1. h(1) = S;

2. Prima regulă aplicată este S −→ aSbS. Deci apar nodurile (1, 1), (1, 2), (1, 3), (1, 4)
cu h(1, 1) = a, h(1, 2) = S, h(1, 3) = b, h(1, 4) = S.

3. Primul neterminal S = h(1, 2) din aSbS este rescris bSaS. Deci din nodul (1, 2)
apar nodurile (1, 2, 1), (1, 2, 2), (1, 2, 3), (1, 2, 4) având notaţiile
h(1, 2, 1) = b, h(1, 2, 2) = S, h(1, 2, 3) = a, h(1, 2, 4) = S.

4. Neterminalul S = h(1, 2, 2) este rescris ; deci din nodul (1, 2, 2) apare descendentul
direct (1, 2, 2, 1) cu h(1, 2, 2, 1) = .

5. S = h(1, 2, 4) este rescris ; deci din nodul (1, 4) apare descendentul direct (1, 4, 1)
cu (h(1, 4, 1) = .

6. De asemenea, S = h(1, 2, 4) derivă ı̂n , ceea ce ı̂nseamnă că şi din nodul (1, 2, 4)
apare un descendent direct (1, 2, 4, 1) cu h(1, 2, 4, 1) = .

De obicei, pentru uşurinţa scrierii, atunci când vectorii numerici care definesc nodurile
nu sunt necesari, se folosesc ı̂n reprezentarea arborelui numai notaţiile nodurilor (valorile
lui h). Deci:
6.2. ARBORI DE DERIVARE ŞI DERIVĂRI INDEPENDENTE DE CONTEXT 99
S
 P@PPP
 @ PP
 PP
)
 R
@ q
P
a S b S
 P@ PP
 PP
  @ PP
PP
)
 R
@ q ?
b S a S 

? ?
 

De remarcat că acelaşi arbore corespunde şi derivării

S =⇒ aSbS =⇒ aSb =⇒ abSaSb =⇒ AbaSb =⇒ abab.

Mai este posibilă şi situaţia când derivări diferite ale aceluiaşi cuvânt generează arbori
diferiţi. De exemplu, tot pentru cuvântul abab se poate construi şi derivarea

S =⇒ aSbS =⇒ abS =⇒ abaSbS =⇒ ababS =⇒ abab

al cărei arbore asociat este


SX
 
 ZXXXX
  Z XXX
9
 
= ~
Z z
X
a S b SX
 ZXXXX
   Z XXX
? 9
  =
 ~
Z z
X
 a S b S
? ?
 

Pe mulţimea Z a nodurilor unui arbore de derivare se defineşte următoarea relaţie de


ordine parţială (ordonare lexicografică):

(n1 , n2 , . . . , np ) < (m1 , m2 , . . . , mq ) ⇐⇒ ∃ k, nk < mk şi ni = mi ∀ i, (1 ≤ i ≤ k − 1).

Propoziţia 6.1 ”<” este o relaţie de ordine totală pe mulţimea Zf ⊂ Z a nodurilor


finale.

Demonstraţie: Din construcţia arborelui de derivare rezultă că dacă (n1 , . . . , np ) şi
(n1 , . . . , np , np+1 , . . . , nq ) sunt două noduri, atunci (n1 , . . . , nq ) este un descendent al lui
(n1 , . . . , np ).
Evident, Zf 6= ∅; singurul lucru care mai trebuie arătat este
100 CAPITOLUL 6. GRAMATICI INDEPENDENTE DE CONTEXT

∀ (n1 , . . . , np ), (m1 , . . . , mq ) ∈ Zf =⇒ ∃ k ≤ min{p, q} cu mk 6= nk şi mi = ni , (1 ≤


i ≤ k − 1).
Dacă p = q atunci afirmaţia este evidentă (altfel, cei doi vectori ar fi identici).
Să considerăm cazul p < q (varianta p > q se tratează similar). Dacă prin absurd
ni = mi ∀i ≤ p, atunci (m1 , . . . , mq ) este un descendent al lui (n1 , . . . , np ). Aceasta duce
la concluzia că (n1 , . . . , np ) – având descendenţi – nu este nod final, contradicţie. q.e.d.
Să considerăm un arbore de derivare Γ şi Zf mulţimea nodurilor finale, ordonată cu
relaţia <; fie v1 , v2 , . . . , vn listarea ordonată a nodurilor din Zf . Dacă h(v1 v2 . . . vn ) = α,
spunem că Γ generează α, sau că este un arbore de derivare pentru α, iar α este frontiera
lui Γ.
Definiţia 6.2 Un subarbore al arborelui de derivare Γ = (Z, U ) este un nod al lui Z
ı̂mpreună cu toţi descendenţii lui şi arcele corespunzătoare, toate nodurile păstrând nota-
ţiile din Γ.

Observaţia 6.3
1. În cazul unui subarbore de derivare, rădăcina este un vector numeric cu k compo-
nente, k fiind numărul de nivel al nodului.

2. Dacă (n1 , . . . , nt ) este vectorul asociat rădăcinii subarborelui, şi h(n1 . . . , nt ) = A,


vom numi acest subarbore un A - arbore.
În particular, arborii de derivare sunt S - arbori.

Exemplul 6.2 Fie gramatica G = ({S, A}, {a, b}, S, P ) unde


P = {S −→ aAS|a, A −→ SbA|SS|ba}
Un arbore de derivare ı̂n această gramatică este (s-a păstrat şi notaţia h):
h(1)=S
XXX
  XXX
   XXX
9
  ? XXz
h(1,1)=a h(1,2)=A h(1,3)=S
XXX
 XXX HH

9
 ? X
z HH
j
h(1,2,1)=S h(1,2,2)=b h(1,2,3)=A h(1,3,1)=a
PPP
? 
)
 PP
q
h(1,2,1,1)=a h(1,2,3,1)=b h(1,2,3,2)a

Nodurile finale, ordonate după relaţia <, sunt


(1, 1)(1, 2, 1, 1)(1, 2, 2)(1, 2, 3, 1)(1, 2, 3, 2)(1, 3, 1)
Acestei secvenţe ı̂i corespunde frontiera

h(1, 1)h(1, 2, 1, 1)h(1, 2, 2)h(1, 2, 3, 1)h(1, 2, 3, 2)h(1, 3, 1) = aabbaa


6.2. ARBORI DE DERIVARE ŞI DERIVĂRI INDEPENDENTE DE CONTEXT 101

Pentru acest cuvânt (aabbaa) există o derivare ı̂n gramatica G; anume

S =⇒ aAS =⇒ aSbAS =⇒ aabAS =⇒ aabAa =⇒ aabbaa

Exemple de subarbori ai acestui arbore:


AP
 PP

) ? PP
q
S b A S A
Q Q
?  Q ? 
+ QQ
s
a a a a

+ s
Q
b b
(1) (2) (3)
Ei corespund derivărilor
(1) A =⇒ SbA =⇒ abA =⇒ abba
(2) S =⇒ a
(3) A =⇒ ba
În schimb, subarborele (4) nu este subarbore al acestui arbore, dar este subarbore ı̂n (5):
S
PPP
 PP
)
 ? q
P
A a A S
Q Z
 QQ
s +
 Z~
Z ?
a

+
S S S S
? ? ? ?
a a a a
(4) (5)
A
Z

= ZZ
~
De asemenea, b A nu este subarbore ı̂n nici un arbore ataşat unei
derivări ı̂n G, el neputând corespunde nici unei producţii din P .

Teorema 6.1 Fie G = (VN , VT , S, P ) o gramatică independentă de context şi A ∈ VN .



Atunci A =⇒ α dacă şi numai dacă există un A - arbore de derivare ataşat, cu frontiera
α.

Demonstraţie: ”⇐=”: Fie α frontiera unui A - arbore. Vom demonstra prin inducţie după

numărul i de noduri interioare ale arborelui, că A =⇒ α.
i = 1: singurul nod interior este rădăcina A şi arborele este de forma:
AP  S PP
 

) Pq
P
...
/ Sw
x1 x2 xn
102 CAPITOLUL 6. GRAMATICI INDEPENDENTE DE CONTEXT


Conform construcţiei, A −→ x1 x2 . . . xn ∈ P şi α = x1 x2 . . . xn , deci A =⇒ α.
Să presupunem afirmaţia adevărată pentru orice arbore cu i − 1 noduri interioare şi
să considerăm frontiera α a unui A - arbore cu i > 1 noduri interioare. Fie x1 , x2 , . . . , xn
descendenţii rădăcinii A, ordonaţi de la stânga la dreapta cu relaţia <; atunci
1. A −→ x1 x2 . . . xn ∈ P ;
2. Simbolurile x1 , x2 , . . . , xn nu sunt toate terminale sau  (altfel arborele ar avea un
singur nod interior – A). Atunci fiecare xp ∈ VN este rădăcina unui subarbore de

frontieră αp . Conform ipotezei de inducţie, xp =⇒ αp .

Pentru fiecare xp ∈ VT ∪ {} vom nota αp = xp , deci xp =⇒ αp . Atunci:
• Pentru j < p, componentele lui αj sunt la ”stânga” celor din αp (nodurile finale
notate cu componentele lui αj au (1, j) pe primele două poziţii, iar celelalte (1, p)).
Deci α = α1 α2 . . . αn ;
∗ ∗
• A =⇒ x1 x2 . . . xn =⇒ α1 x2 . . . xn =⇒ α1 α2 . . . αn .

Deci A =⇒ α.
Observaţia 6.4 Derivarea de mai sus este doar una din derivările posibile asigurate de
A-arborele ataşat.
k
”=⇒”: Fie A =⇒ α o derivare ı̂n k paşi.
Pentru k = 1, A −→ α ∈ P şi atunci există un A - arbore de derivare cu frontiera α,
construit ca la implicaţia anterioară.

Să presupunem că, dacă X =⇒ β printr-o derivare de lungime mai mică decât k
(pentru orice X ∈ VN ), atunci există un X - arbore de derivare de frontieră β.

Să luăm acum o derivare A =⇒ α de lungime k; fie A −→ x1 x2 . . . xn prima producţie
aplicată ı̂n derivare.

Conform Lemei 4.1, din A =⇒ x1 x2 . . . xn =⇒ α rezultă α = α1 α2 . . . αn şi

xi =⇒ αi , (1 ≤ i ≤ n).
Dacă xi ∈ VT , atunci αi = xi şi lui xi ı̂i va corespunde un nod final.

Dacă xi ∈ VN atunci xi =⇒ αi ı̂n mai puţin de k paşi; conform ipotezei de inducţie,
există un xi - arbore de derivare de frontieră αi . Fie Ti acest arbore, având rădăcina (1, i)
cu h((1, i)) = xi . A - arborele asociat acestei derivări va fi construit astfel:
Iniţial AP
 S PP
 /

) P
q
P
...
 Sw
x1 x2 xn
ı̂n care rădăcina este nodul (1), cu notaţia h((1)) = A.
Apoi, pentru fiecare neterminal xi , nodul xi este ı̂nlocuit prin subarborele Ti .
Faptul că acest A-arbore are frontiera α rezultă imediat prin construcţie. q.e.d.
6.2. ARBORI DE DERIVARE ŞI DERIVĂRI INDEPENDENTE DE CONTEXT 103

Exemplul 6.3 Fie gramatica G = ({E, T, F }, {+, ∗, (, ), a}, E, P ) unde


P = {E −→ E + T |T, T −→ T ∗ F |F, F −→ (E)|a}
şi arborii de derivare:
EPP E
 PP

)
 ? P
q
P ?
E + T T
? ? ?
T F F
Z Z
?  ?Z
+ ~
Z  ?Z
+ ~
Z
F ( E ) ( E )
Q
? + ?QQ
 s
a? T E + T
Q
+ ?QQ
 s ? ?
T ∗ F T F
Q
? ? ?  ?QQ
+ s
F a F ( E )
? ? ?
a a T
?
F
(a) (b)
a?
Atunci arborelui de derivare (a) ı̂i va corespunde o derivare
E =⇒ E + T =⇒ T + T =⇒ F + T =⇒ a + T =⇒ a + F =⇒ a + (E) =⇒ a + (T ) =⇒
=⇒ a + (T ∗ F ) =⇒ a + (F ∗ F ) =⇒ a + (a ∗ F ) =⇒ a + (a ∗ a)
Invers, derivării
E =⇒ T =⇒ F =⇒ (E) =⇒ (E + T ) =⇒ (E + F ) =⇒ (E + (E)) =⇒ (E + (T )) =⇒
=⇒ (E + (F )) =⇒ (E + (a)) =⇒ (T + (a)) =⇒ (F + (a)) =⇒ (a + (a))
ı̂i corespunde arborele (b).
Din cele arătate până acum rezultă că fiecărui arbore de derivare ı̂i pot corespunde ı̂n
general mai multe derivări. Două din acestea sunt deosebit de importante; anume:

Definiţia 6.3 O derivare A =⇒ α este o derivare stângă (sau ”cea mai stângă derivare”)
dacă la fiecare pas variabila ı̂nlocuită nu are la stânga ei nici un alt neterminal.

Vom nota aceasta prin A =⇒s α.

În mod similar se defineşte derivarea dreaptă (”cea mai dreaptă derivare”), A =⇒d α.
În Exemplul 6.3, derivarea scrisă pentru arborele (a) este o derivare stângă, iar cea
pentru arborele (b) - o derivare dreaptă.
104 CAPITOLUL 6. GRAMATICI INDEPENDENTE DE CONTEXT

Propoziţia 6.2 Pentru o gramatică independentă de context G = (VN , VT , S, P ), dacă


∗ ∗ ∗
A =⇒ α, atunci A =⇒s α (respectiv A =⇒d α).

Demonstraţie: Vom arată că A =⇒s α prin inducţie după numărul n de paşi ai derivării
n
A =⇒ α.
Pentru n = 0 sau n = 1, afirmaţia este banală.
Să presupunem Propoziţia 6.2 adevărată pentru toate derivările de lungime k ≤ n şi

fie A =⇒ α1 =⇒ α o derivare ı̂n n + 1 paşi. Dacă α1 = x1 x2 . . . xp cu xi ∈ VN ∪ VT ,
ni
atunci – conform Lemei 4.1 – putem scrie α = u1 u2 . . . up şi xi =⇒ αi printr-o derivare
p
X
de lungime ni (când xi ∈ VT , atunci ni = 0). Cum n = ni , vom avea ni ≤ n deci,
i=1

conform ipotezei de inducţie, xi =⇒s ui .
Putem construi acum derivarea stângă
∗ ∗ ∗ ∗
A =⇒ x1 x2 . . . xp =⇒s u1 x2 . . . xp =⇒s u1 u2 x3 . . . xp =⇒s ... =⇒s u1 u2 . . . up = α

Demonstraţia pentru existenţa derivării drepte se face similar. q.e.d.

Propoziţia 6.3 Pentru fiecare arbore de derivare Γ există o derivare stângă (dreaptă)
unică.

Demonstraţie: Se face similar cu demonstraţia Teoremei 6.1, prin inducţie după numărul
de noduri interioare ale arborelui Γ. q.e.d.

Definiţia 6.4 O gramatică independentă de context G este ”ambiguă” dacă există w ∈


L(G) care are două derivări stângi (drepte) distincte. În caz contrar, G este o gramatică
neambiguă.

Folosind Propoziţia 6.3, putem spune că o gramatică este ambiguă dacă pentru un w ∈
L(G) se pot construi doi arbori de derivare distincţi.
Un limbaj independent de context L este neambiguu dacă există o gramatică neam-
biguă G cu L(G) = L. Altfel, L este inerent ambiguu.

Exemplul 6.4 Gramatica de producţii S −→ aSb|bSa|SS|, care generează limbajul


L = {w | |w|a = |w|b } este o gramatică ambiguă.
Într-adevăr, pentru cuvântul w = abba se pot construi cel puţin doi arbori de derivare
distincţi:
6.3. GRAMATICI INDEPENDENTE DE CONTEXT PROPRII 105

S S
Z Z
 Z  Z
 Z  Z

=
 Z
~
Z 

= Z
~
Z
S S S S
@ @ Z
 Z
@ @  Z
R
@ ? @
R ? 
=
 Z~
Z
S6 S b S a  S S
@ @ @
@ @ @
? @R ? ? ? @
R ? @
R
a S b   a S b b S a

? ? ?
  

Studiul ambiguităţii gramaticilor şi limbajelor este dificil şi nu se poate efectua decât
pentru gramatici (limbaje) particulare; plecând de la un limbaj sau o gramatică indepen-
dentă de context oarecare, nu se cunoaşte nici un algoritm care să decidă proprietatea de
ambiguitate sau neambiguitate.

6.3 Gramatici independente de context proprii


După cum s-a văzut, o gramatică independentă de context este caracterizată de forma
generală a producţiilor sale: A −→ α cu A ∈ VN , α ∈ (VN ∪ VT )∗ .
Uneori ı̂nsă este de dorit să impunem restricţii asupra formei producţiilor, fără a
micşora puterea generativă a gramaticii. Aceste restricţii sunt necesare ı̂n special ı̂n
aplicaţiile limbajelor independente de context.
În cele ce urmează, fie G = (VN , VT , S, P ) o gramatică independentă de context cu
L(G) = L, L 6= ∅.

Definiţia 6.5

• X ∈ VN ∪ VT este un simbol ”inaccesibil” dacă nu există nici o derivare S =⇒ αXγ
cu α, γ ∈ (VN ∪ VT )∗ ;

• X ∈ VN ∪ VT este un simbol ”neutilizabil” dacă nu există nici o derivare


∗ ∗
S =⇒ αXγ =⇒ αβγ cu α, β, γ ∈ VT∗ .
106 CAPITOLUL 6. GRAMATICI INDEPENDENTE DE CONTEXT

Lema 6.1 Gramatica G este echivalentă cu o gramatică G0 fără simboluri inaccesibile.

Demonstraţie: Simbolurile inaccesibile din G pot fi eliminate folosind algoritmul liniar:


Algoritm 6.2:
Intrare: G = (VN , VT , S, P ) independentă de context
Ieşire: G0 = (VN 0 , VT 0 , S 0 , P 0 ) cu proprietăţile:

i. L(G) = L(G0 )

ii. ∀ A ∈ VN 0 ∪ VT 0 , ∃ α, β ∈ (VN 0 ∪ VT 0 )∗ cu S 0 =⇒ αAβ.

Algoritm:

1. V0 := {S}, i := 1;

2. Vi = Vi−1 ∪ {X | A −→ αXβ ∈ P, A ∈ Vi−1 };

3. Dacă Vi 6= Vi−1 atunci i := i + 1 şi salt la Pasul 2;

4. VN 0 := Vi ∩ VN , VT 0 := Vi ∩ VT , S 0 := S, P 0 conţine producţiile lui P care


au ı̂n ambii membri numai simboluri din Vi .

Deoarece P 0 ⊆ P , gramatica G0 va fi tot independentă de context.


În plus, cum Vi ⊆ VN ∪ VT , procesul de calcul se termină după un număr finit de paşi
(maxim |VN ∪ VT |), deci este un algoritm.
Pentru a ı̂ncheia demonstraţia, trebuie arătat că G0 verifică condiţiile (i) şi (ii).
Proprietatea (ii) este ı̂ndeplinită prin construcţia algoritmului. Pentru (i), vom arăta
ı̂ntâi prin inducţie după n afirmaţia:
n
Dacă S =⇒ αXβ atunci există i ≤ n cu X ∈ Vi . (3)
Când n = 1, avem banal i = 1 (X ∈ V1 ).
Să presupunem (3) adevărată pentru n şi să o arătăm pentru n + 1; fie deci derivarea
n+1
S =⇒ αXβ. Apar două cazuri:

1. X ∈ Vn , şi am terminat (există i ≤ n cu X ∈ Vi ⊆ Vn );

2. X 6∈ Vn . Aceasta ı̂nseamnă că X nu a apărut pe parcursul derivării; punând ı̂n


n
evidenţă ultimul pas, avem S =⇒ X1 X2 . . . Xp =⇒ αXβ.
Atunci ∃ j ≤ p, cu Xj −→ γXδ astfel ı̂ncât α = X1 X2 . . . Xj−1 γ, β = δXj+1 . . . Xp .
Evident, Xj ∈ Vn , deci X ∈ Vn+1 (i = n + 1).
6.3. GRAMATICI INDEPENDENTE DE CONTEXT PROPRII 107


Fie acum w ∈ L(G), deci S =⇒ w, derivare ı̂n gramatica G. Există atunci (conform cu
(3)) un i cu w ∈ Vi∗ ; cum w ∈ VT∗ , va rezulta w ∈ (VT ∩ Vi )∗ , deci w ∈ (VT 0 )∗ , adică
w ∈ L(G0 ). Altfel spus, L(G) ⊆ L(G0 ).

Incluziunea inversă este banală: S 0 =⇒ w a folosit ı̂n derivare numai reguli din P , deci

derivarea S =⇒ w este o derivare atât ı̂n G cât şi ı̂n G0 . q.e.d.
Lema 6.2 Gramatica G este echivalentă cu o gramatică G” = (VN ”, VT , S, P ”) cu pro-
prietatea

∀ A ∈ VN ”, ∃ α ∈ VT∗ cu A =⇒ α (derivare ı̂n gramatica G”)
Demonstraţie: Construim noua gramatică folosind algoritmul recursiv:
Algoritm 6.3:
Intrare: G = (VN , VT , S, P ) independentă de context.
Ieşire: G” = (VN ”, VT , S, P ”) cu proprietăţile:

i. L(G) = L(G”);

ii. ∀ A ∈ VN ”, ∃ α ∈ VT∗ cu A =⇒ α.

Algoritm:

1. V0 := ∅, i := 1;

2. Vi = Vi−1 ∪ {A | A −→ α ∈ P, α ∈ (Vi−1 ∪ VT )∗ };

3. Dacă Vi 6= Vi−1 atunci i := i + 1 şi salt la Pasul 2;

4. VN ” := Vi , P 0 conţine producţiile lui P care au ı̂n membrul stâng simboluri


din Vi .

Deoarece Vi ⊆ VN , procedeul descris este un algoritm (numărul de treeri prin Pasul 2


este maxim |VN |).
Să demonstrăm ı̂ntı̂i prin inducţie după i afirmaţia

∀ A ∈ Vi =⇒ ∃ w ∈ VT∗ cu A =⇒ w (ı̂n gramatica G”) (4)
i = 1: evident, prin construcţie.
Să presupunem proprietatea (4) adevărată pentru i şi fie A ∈ Vi+1 .
- Dacă A ∈ Vi , pasul inductiv asigură veridicitatea afirmaţiei.
- Dacă A ∈ Vi+1 \ Vi , atunci există o producţie A −→ X1 X2 . . . Xn , unde Xk ∈
VT ∪ Vi , (1 ≤ k ≤ n). Dacă Xk ∈ VT , se ia wk = Xk ; dacă Xk ∈ Vi , atunci ipoteza de

inducţie asigură existenţa lui wk ∈ VT∗ cu Xk =⇒ wk .
∗ ∗ ∗
Acum, A =⇒ X1 X2 . . . Xn =⇒ w1 X2 . . . Xn =⇒ . . . =⇒ w1 w2 . . . wn = w.
Aserţiunea (ii) rezultă luând i maxim care verifică (4) (atunci VN ” = Vi ).
108 CAPITOLUL 6. GRAMATICI INDEPENDENTE DE CONTEXT

Pentru (i) este nevoie de ı̂ncă un rezultat preliminar:


n
Dacă A =⇒ w, w ∈ VT∗ , atunci ∃ i cu A ∈ Vi . (5)
Vom demonstra aserţiunea (5) prin inducţie după n.
Pentru n = 1 afirmaţia este banală (i = 1).
n+1
Să presupunem (5) adevărată pentru n şi fie A =⇒ w. Atunci putem scrie (punând
n
ı̂n evidenţă primul pas al derivării): A =⇒ X1 X2 . . . Xk =⇒ w. Conform Lemei 4.1,
nj
w = w1 w2 . . . wk şi Xj =⇒ wj cu nj ≤ n.
Dacă Xj ∈ VT , atunci nj = 0 (wj = Xj ) şi luăm ij = 0. Dacă Xj ∈ VN , atunci –
conform ipotezei de inducţie – Xj ∈ Vij pentru un anumit ij .
Fie i = 1 + max{i1 , i2 , . . . , ik }. Atunci, conform definiţiei, A ∈ Vi ; şi aserţiunea (5)
este demonstrată.

Să luăm acum α ∈ L(G) (prin ipoteză, L(G) 6= ∅), deci S =⇒ α. Conform cu (5),

există i cu S ∈ Vi , ceea ce ı̂nseamnă S ∈ VN ” şi S =⇒ α ı̂n gramatica G” (regulile folosite
din P sunt şi ı̂n P ”). Deci L(G) ⊆ L(G”).
Incluziunea inversă este banală, folosind aserţiunea (4). q.e.d.
Corolarul 6.1 Este decidabil dacă limbajul generat de o gramatică independentă de con-
text este vid sau nu.
Demonstraţie: Fie G = (VN , VT , S, P ) o cfg. Se foloseşte Algoritmul 3, ı̂n care Pasul 4
este ı̂nlocuit cu
40 . Dacă S ∈ Vi atunci L(G) 6= ∅, altfel L(G) = ∅.
Corectitudinea Corolarului 6.1 se bazează pe (4), ı̂n care A se ı̂nlocuieşte cu S. q.e.d.
Lema 6.3 Gramatica G este echivalentă cu o gramatică G0 fără simboluri neutilizabile.
Demonstraţie: Pentru eliminarea simbolurilor neutilizabile vom folosi algoritmul următor:

Algoritm 6.4:
Intrare: G = (VN , VT , S, P ) independentă de context (cu L(G) 6= ∅);
Ieşire: G0 = (VN 0 , VT 0 , S, P 0 ) cu proprietăţile:

i. L(G) = L(G0 );

ii. În VN 0 ∪ VT 0 nu sunt simboluri neutilizabile.

Algoritm:

1. Se aplică Algoritmul 6.3 gramaticii G şi se obţine gramatica G”;

2. Se aplică Algoritmul 6.2 gramaticii G” şi se obţine gramatica G0 .


6.3. GRAMATICI INDEPENDENTE DE CONTEXT PROPRII 109

Cu Pasul 1 se elimină din gramatica G toate neterminalele care nu pot genera secvenţe
de terminale. Ulterior, Pasul 2 va elimina toate simbolurile care nu sunt accesibile din S.
Egalitatea L(G) = L(G0 ) se poate demonstra folosind Lemele 4.1 şi 4.2.
Să presupunem că simbolul A ∈ VN 0 este neutilizabil. Conform Definiţiei 6.5, aceasta
se poate ı̂ntâmpla numai ı̂n două cazuri:

1. În G0 nu este posibilă nici o derivare S =⇒ αAβ, α, β ∈ (VT 0 )∗ .
Cum A este accesibil (altfel ar fi fost eliminat cu Algoritmul 2, la Pasul 2), rezultă

că există u, v ∈ (VN 0 ∪ VT 0 )∗ cu S =⇒ uAv.
Neterminalele din u şi v au proprietatea că generează secvenţe de terminale. Deci
∗ ∗
∃ α, β ∈ (VT 0 )∗ astfel ı̂ncât u =⇒ α, v =⇒ β. Rezultă că ı̂n G0 există derivarea

S =⇒ αAβ, contradicţie.
∗ ∗
2. S =⇒ αAβ este adevărată, dar αAβ =⇒ αγβ este falsă ∀ γ ∈ (VT 0 )∗ . Conform

definiţiei derivărilor ı̂ntr-o gramatică independentă de context, rezultă că A =⇒ γ
este falsă ∀ γ ∈ (VT 0 )∗ , deci A trebuia eliminat de la Pasul 1 al Algoritmului 4.
În mod similar se arată că nici un terminal din V 0 nu este neutilizat. q.e.d.
Exemplul 6.5 Fie gramatica G = ({S, A, B, C}, {a, b}, S, P ) unde
P = {S −→ A|B, A −→ aB|bS|b, B −→ AB|Ba, C −→ AS|b}.
Să eliminăm simbolurile neutilizabile din această gramatică.
La primul pas se aplică Algoritmul 6.3. Construim secvenţa succesivă de mulţimi:
V0 = ∅,
V1 = V0 ∪ {X | X −→ α ∈ P, α ∈ (V0 ∪ VT )∗ } = {X | X −→ α ∈ P, α ∈ VT∗ } =
{A, C}, neterminale introduse pe baza producţiilor A −→ b respectiv C −→ b.
V2 = V1 ∪ {X | X −→ α ∈ P, α ∈ (V1 ∪ VT )∗ } = {A, C} ∪ {X | X −→ α ∈ P,
α ∈ {A, C, a, b}∗ } = {A, C} ∪ {S, A, C} = {S, A, C} (s-a putut folosi numai producţia
S −→ A).
V3 = V2 ∪ {X | X −→ α ∈ P, α ∈ (V2 ∪ VT )∗ } = {S, A, C} ∪ {X | X −→ α ∈ P,
α ∈ {S, A, C, a, b}∗ } = {S, A, C} ∪ {S, A, C} = {S, A, C} = V2 .
În acest moment Algoritmul 3 se termină şi se obţine gramatica G” cu
VN ” = {S, A, C}, VT ” = {a, b}, P ” = {S −→ A, A −→ bS|b, C −→ AS|b}
(toate producţiile care utilizează B se elimină deoarece B 6∈ VN ”).
Acestei gramatici i se aplică Algoritmul 6.2; vom obţine pas cu pas:
V0 = {S};
V1 = V0 ∪ {X | A −→ αXβ ∈ P, A ∈ V0 } = {S} ∪ {X | S −→ αXβ ∈ P } =
{S} ∪ {A} = {S, A}, deoarece există o singură S-producţie: S −→ A.
V2 = V1 ∪ {X | Y −→ αXβ ∈ P, Y ∈ V1 } = {S, A} ∪ {X | A −→ αXβ ∈ P sau
S −→ αXβ ∈ P } = {S, A} ∪ {S, A, b} = {S, A, b}, regulile utilizate fiind S −→ A şi
A −→ bS|b, care au ı̂n membrul drept pe S, A şi b.
110 CAPITOLUL 6. GRAMATICI INDEPENDENTE DE CONTEXT

V3 = V2 ∪ {X | Y −→ αXβ ∈ P, Y ∈ {S, A}} = {S, A, b} ∪ {S, A, b} = {S, A, b} = V2 .


Gramatica finală este G0 = (VN 0 , VT 0 , S, P 0 ) unde
VN 0 = VN ” ∩ V3 = {S, A}, VT 0 = VT ” ∩ V3 = {b}, P 0 = {S −→ A, A −→ bS|b}.
Deci din gramatica iniţială au fost eliminate pe rând B (cu Algoritmul 6.3), a, C
(cu Algoritmul 6.2), noua gramatică având şi avantajul unui număr substanţial redus de
producţii. De remarcat că terminalul 0 a0 a dispărut din producţii ı̂ncă de la primul pas.

Exemplul 6.6 Fie gramatica G = ({S, A, B}, {a, b}, S, P ) unde


P = {S −→ A|a, A −→ AB, B −→ b}.
Aplicând Algoritmul 6.3 (primul pas al Algoritmului 6.4) se obţin VN ” = V1 = {S, B},
deci P ” = {S −→ a, B −→ b}.
Apoi, cu Algoritmul 6.2 (pasul 2 al Algoritmului 6.4) avem V2 = V1 = {S, a}.
Deci G0 = ({S}, {a}, S, {S −→ a}).
Dacă am aplica ı̂ntâi Algoritmul 6.2, am obţine ca rezultat că toate simbolurile sunt
accesibile, deci gramatica nu se modifică. Utilizând ı̂n etapa a doua Algoritmul 6.3 se
ajunge la gramatica G” drept gramatică finală, ı̂n care B este de fapt un simbol neutilizabil.
Deci ordinea de aplicare celor doi algoritmi (Algoritmul 6.3 urmat de Algoritmul 6.2)
este importantă; utilizarea lor ı̂n ordine inversă nu elimină ı̂ntotdeauna simbolurile neu-
tilizabile.

Definiţia 6.6 Fie G = (VN , VT , S, P ) o gramatică independentă de context. Atunci:

• O regulă de forma A −→  se numeşte  - producţie;

• O regulă de forma A −→ B se numeşte redenumire.

Ne vom ı̂ndrepta atenţia ı̂n continuare asupra eliminării din P a  - producţiilor şi a
redenumirilor. Evident, dacă  ∈ L(G), atunci nu se pot elimina toate  - producţiile; aşa
că ı̂n prima fază vom considera numai cazul  6∈ L(G).
Adăugarea lui  la L(G) se face ulterior, ı̂n mod similar cu condiţia de la gramaticile
dependente de context: introducem un simbol de start nou S 0 şi producţiile S 0 −→ |S.
Redenumirea S 0 −→ S va fi eliminată ı̂n etapa următoare.

Lema 6.4 Gramatica independentă de context G este echivalentă cu o gramatică G0 ı̂n


care:

1. Dacă  6∈ L(G) atunci G0 nu are  - producţii;

2. Dacă  ∈ L(G) atunci singura  - producţie este S 0 −→  şi simbolul de start S 0 nu


apare ı̂n membrul drept al nici unei producţii.
6.3. GRAMATICI INDEPENDENTE DE CONTEXT PROPRII 111

Demonstraţie: Construcţia gramaticii G0 se face cu următorul algoritm:


Algoritm 6.5:
Intrare: G = (VN , VT , S, P ) gramatică independentă de context;
Ieşire: G0 = (VN 0 , VT , S 0 , P 0 ) cu proprietăţile:

i. L(G) = L(G0 );

ii. G0 nu are  - producţii.

Algoritm:

1. Se construieşte (cu un algoritm similar Algoritmului 6.2 sau 6.3) mulţimea



N = {A | A ∈ VN , A =⇒ }; ı̂n plus, P 0 := ∅;

2. Fie A −→ u0 B1 u1 B2 . . . un−1 Bn un , (n ≥ 0),


unde Bi ∈ N , ui ∈ (VT ∪ (VN \ N ))∗ , (0 ≤ i ≤ n).
Dacă n = 0, atunci P 0 := P 0 ∪ {A −→ u0 } \ {A −→ } şi salt la Pasul 4;

3. P 0 := P 0 ∪ {A −→ u0 X1 u1 X2 . . . un−1 Xn un | Xi ∈ {Bi , }, i = 1, n} \ {A −→ };

4. P := P \ {A −→ u0 B1 u1 B2 . . . un−1 Bn un }; dacă P 6= ∅, atunci salt la Pasul 2;

5. Dacă S ∈ N , atunci P 0 := P 0 ∪ {S 0 −→ |S}, VN 0 := VN ∪ {S 0 } şi


G0 = (VN 0 , VT , S 0 , P 0 ); altfel G0 = (VN , VT , S, P 0 ).

Prin construcţia asigurată de Algoritmul 6.5, gramatica G0 nu are -producţii (decât


eventual regula S 0 −→ ). Singura verificare care rămâne de făcut este echivalenţa gra-
maticilor G şi G0 . Pentru aceasta vom demonstra aserţiunea
∗ ∗
A =⇒ w (ı̂n G) ⇐⇒ w 6=  şi A =⇒ w (ı̂n G0 ) (6)
i
”=⇒”: Fie A =⇒ w o derivare ı̂n gramatica G şi w 6= ; vom arăta prin inducţie după

i că A =⇒ w ı̂n gramatica G0 .
i = 1: Atunci A =⇒ w, w 6= , deci A −→ w ∈ P nu este o -producţie. Atunci
A −→ w ∈ P 0 , adică A =⇒ w ı̂n G0 .
Să presupunem proprietatea (6) adevărată pentru orice derivare ı̂n mai puţin de i paşi,
i
şi fie A =⇒ w o derivare ı̂n G.
i−1
Punând ı̂n evidenţă primul pas al derivării, A =⇒ X1 X2 . . . Xn =⇒ w. Conform Lemei

4.1, w = w1 w2 . . . wn şi Xk =⇒ wk ı̂n mai puţin de i paşi (1 ≤ k ≤ n).

Dacă Xk ∈ VN şi wk 6= , ipoteza de inducţie asigură derivarea ı̂n G0 : Xk =⇒ wk .

Dacă Xk ∈ VT , atunci wk = Xk şi deci evident Xk =⇒ wk (ı̂n G0 ).
112 CAPITOLUL 6. GRAMATICI INDEPENDENTE DE CONTEXT

Dacă wk = , atunci Xk ∈ N . Conform Algoritmului 5, pasul 3, ı̂n P 0 există producţia


A −→ α1 α2 . . . αn , ı̂n care
(
Xk dacă wk 6= 
αk =
 dacă wk = 
Deoarece w 6= , rezultă α1 α2 . . . αn 6= . Avem atunci derivarea ı̂n G0 :
∗ ∗ ∗
A =⇒ α1 α2 . . . αn =⇒ w1 α2 . . . αn =⇒ . . . =⇒ w1 w2 . . . wn = w.
i
”⇐=”: Fie A =⇒ w o derivare ı̂n i paşi ı̂n G0 . În mod cert w 6=  (deoarece G0 nu are

-producţii). Vom arăta prin inducţie după i că A =⇒ w ı̂n gramatica G.
i = 1: Avem A −→ w ∈ P 0 , deci există o regulă A −→ α0 B1 α1 B2 . . . Bk αk ∈ P cu
α0 α1 . . . , αk = w, B0 , B1 , . . . , Bk ∈ N . În G se poate construi derivarea
∗ ∗ ∗
A =⇒ α0 B1 α1 B2 . . . Bk αk =⇒ α0 α1 B2 . . . Bk αk =⇒ . . . =⇒ α0 α1 . . . αk = w.
i
Să presupunem afirmaţia adevărată până la i şi fie A =⇒ w o derivare ı̂n G0 . Punând ı̂n
i−1
evidenţă primul pas, avem A =⇒ X1 X2 . . . Xn =⇒ w. Atunci

• A =⇒ X1 X2 . . . Xn ı̂n G (similar cazului i = 1);

• Conform Lemei 4.1, w = w1 w2 . . . wn şi Xk =⇒ wk (ı̂n G0 ) ı̂n mai puţin de i paşi
(1 ≤ k ≤ n).

Dacă Xk ∈ VN 0 = VN atunci, conform ipotezei de inducţie, Xk =⇒ wk (ı̂n G).

Dacă Xk ∈ VT atunci wk = Xk şi putem scrie Xk =⇒ wk (ı̂n G).

Rezumând, avem derivarea ı̂n gramatica G : A =⇒ X1 X2 . . . Xn =⇒ w1 w2 . . . wn = w.
În final, dacă se alege S ı̂n loc de A, avem
∗ ∗
S =⇒ w ı̂n G0 ⇐⇒ w 6=  şi S =⇒ w ı̂n G
adică L(G0 ) = L(G) \ {}. q.e.d.
Exemplul 6.7 Fie gramatica de producţii S −→ aSbS|bSaS|, căreia ı̂i aplicăm Algo-
ritmul 6.5 de eliminare a -producţiilor.
Iniţial avem N = {S}.
Producţia S −→ aSbS introduce ı̂n P 0 regulile S −→ aSbS|aSb|abS|ab.
Similar, S −→ bSaS introduce ı̂n P 0 pe S −→ bSaS|bSa|baS|ba.
Producţia S −→  se elimină.
În final, deoarece S ∈ N , se introduce un simbol de start nou S 0 şi producţiile
0
S −→ |S.
Se obţine gramatica G0 = (VN 0 , VT , S 0 , P 0 ) unde VN 0 = {S, S 0 }, VT = {a, b},
P = {S 0 −→ S|, S −→ aSbS|aSb|abS|ab|bSaS|bSa|baS|ba}.
0
6.3. GRAMATICI INDEPENDENTE DE CONTEXT PROPRII 113

Lema 6.5 Gramatica G este echivalentă cu o gramatică G0 fără redenumiri.

Demonstraţie: Algoritmul de eliminare a redenumirilor este:


Algoritm 6.6:
Intrare: G = (VN , VT , S, P ) gramatică independentă de context;
Ieşire: G0 = (VN , VT , S, P 0 ) cu proprietăţile:
i. L(G) = L(G0 );
ii. G0 nu are redenumiri.
Algoritm:

1. Pentru fiecare A ∈ VN se construieşte mulţimea RA = {B|A =⇒ B} ı̂n mod
iterativ, astfel:

(a) R0 := {A}, i := 1;
(b) Ri := Ri−1 ∪ {C|B −→ C ∈ P, B ∈ Ri−1 };
(c) Dacă Ri 6= Ri−1 atunci i := i + 1 şi salt la (b);
(d) RA := Ri .

În plus, P 0 := ∅.

2. Fie B −→ α ∈ P ; dacă α ∈ VN atunci salt la Pasul 4;

3. P 0 := P 0 ∪ {A −→ α|B ∈ RA };

4. P := P \ {B −→ α}; dacă P 6= ∅ atunci salt la Pasul 2;

5. G0 = (VN , VT , S, P 0 ).

Faptul că ı̂n P 0 nu sunt redenumiri rezultă din construcţia dată de algoritm: pentru
fiecare redenumire se sare direct de la Pasul 2 la Pasul 4 fără a se mai adăuga nimic la
mulţimea P 0 .
Mai trebuie arătată egalitatea L(G) = L(G0 )
”⊆”: Fie w ∈ L(G). Deci ı̂n gramatica G există derivarea stângă
S = α0 =⇒s α1 =⇒s α2 =⇒s . . . =⇒s αn = w.
Dacă producţia folosită pentru αi =⇒s αi+1 nu este o redenumire, atunci aceeaşi
generare directă αi =⇒s αi+1 este valabilă şi ı̂n G0 (0 ≤ i ≤ n).
Să presupunem că αi =⇒s αi+1 printr-o redenumire şi αi−1 =⇒s αi nu a folosit
redenumire, sau i = 0. Fie αi+1 =⇒s . . . =⇒s αj−1 =⇒s αj derivarea care foloseşte numai
redenumiri şi αj =⇒s αj+1 prima generare directă fără redenumiri. Atunci αi , αi+1 , . . . , αj
au toate aceeaşi lungime şi – pentru că am lucrat cu o derivare stângă – simbolul ı̂nlocuit
114 CAPITOLUL 6. GRAMATICI INDEPENDENTE DE CONTEXT

ı̂n fiecare din ele se află pe aceeaşi poziţie. Dar atunci αi =⇒s αj+1 este o generare directă
ı̂n G0 folosind o producţie din P 0 \ P .

Folosind acum o procedură de inducţie după n, rezultă S =⇒s w ı̂n G0 .
”⊇”: Fie w ∈ L(G0 ); deci există o derivare ı̂n gramatica G0 :
S = α0 =⇒ α1 =⇒ α2 =⇒ . . . =⇒ αn = w.
Dacă A −→ β este producţia folosită la generarea directă αi =⇒ αi+1 , atunci există
∗ ∗ ∗
B ∈ VN (posibil A = B) astfel ca A =⇒ B şi B =⇒ β (derivări ı̂n G). Deci A =⇒ β

şi rezultă αi =⇒ αi+1 (ı̂n G). Folosind acest raţionament pentru i = 1, n − 1 se obţine

derivarea ı̂n gramatica G : S =⇒ w. q.e.d.
Exemplul 6.8 Să eliminăm redenumirile din gramatica G = ({E, T, F }, {+, ∗, (, ), a},
E, P ) de producţii
P = {E −→ E + T |T, T −→ T ∗ F |F, F −→ (E)|a}.
Cu subalgoritmul de la Pasul 1 se obţine RE = {E, T, F }, RT = {T, F }, RF = {F }.
Regulile E −→ T şi T −→ F sunt eliminate (fiind redenumiri).
Fie E −→ E + T . Neterminalul E se află ı̂ntr-o singură mulţime R: ı̂n RE . Deci
E −→ E + T ∈ P 0 .
Pentru T −→ T ∗ F avem T ∈ RE şi T ∈ RT , deci E −→ T ∗ F şi T −→ T ∗ F se
includ ı̂n P 0 .
F −→ (E); cum F se află ı̂n toate cele trei mulţimi R, ı̂n P 0 se includ producţiile
E −→ (E), T −→ (E), F −→ (E). La fel pentru regula F −→ a.
În final, mulţimea P 0 a producţiilor este
P 0 = {E −→ E + T |T ∗ F |(E)|a, T −→ T ∗ F |(E)|a, F −→ (E)|a}
Exemplul 6.9 În Exemplul 6.5, după eliminarea simbolurilor neutilizabile s-a ajuns la
gramatica G0 de producţii P 0 = {S −→ A, A −→ bS|b} care conţine o redenumire
(S −→ A).
Pentru eliminarea ei avem RS = {S, A}, RA = {A}.
Producţia S −→ A se elimină, iar pentru A −→ bS se introduc ı̂n P1 regulile S −→ bS,
A −→ bS; similar pentru A −→ b. Noua gramatică G1 va avea
VN1 = {S, A}, VT1 = {b}, P1 = {S −→ bS|b, A −→ bS|b}.
Aplicând acum din nou Algoritmul 6.2 de eliminare a simbolurilor inaccesibile, neter-
minalul A se elimină şi se ajunge la o gramatică de producţii S −→ bS|b; simplitatea ei
faţă de gramatica iniţială din Exemplul 6.5 este evidentă.
Definiţia 6.7 O gramatică independentă de context fără simboluri neutilizabile, -produc-
ţii şi redenumiri se numeşte gramatică proprie.
Teorema 6.2 Orice gramatică independentă de context G cu L(G) 6= ∅ este echivalentă
cu o gramatică independentă de context proprie.
Demonstraţie: Se aplică succesiv Algoritmii 6.3, 6.2, 6.5 şi 6.6.
6.4. FORME NORMALE 115

6.4 Forme normale


Înafara gramaticilor proprii – forme reduse ale gramaticilor independente de context –
un rol deosebit de important ı̂l joacă gramaticile ı̂n care producţiile au anumite forme
standard, forme de mare ajutor ı̂n aplicaţiile practice. Cunoscute sub o formă generalizată
de forme normale, atenţia noastră va fi ı̂ndreptată ı̂n special a două din ele:
- forma normală Chomsky (F N C),
- forma normală Greibach (F N G).

6.4.1 Forma normală Chomsky


Teorema 6.3 Orice limbaj independent de context L cu  6∈ L este generat de o gramatică
care are toate producţiile de forma
A −→ BC sau A −→ a
Demonstraţie: Deoarece L este independent de context, fie G = (VN , VT , S, P ) o cfg cu L =
L(G). Folosind rezultatele din paragraful precedent, putem presupune că G este proprie
(este important ı̂n special ca G să nu aibă redenumiri sau -producţii). Transformarea lui
G ı̂ntr-o gramatică cu producţiile de tipul specificat ı̂n Teoremă se va face ı̂n două etape:
1. Fie A −→ α ∈ P o producţie a gramaticii G; α =
6  deoarece G nu are -producţii.
Dacă |α| = 1, atunci α ∈ VT (cum G nu are redenumiri, α 6∈ VN ) şi producţia
rămâne nemodificată.
Fie α = x1 x2 . . . xm (m ≥ 2). Pentru fiecare i (1 ≤ i ≤ m), dacă xi ∈ VN , el va
rămâne neschimbat. Dacă xi = a ∈ VT , introducem un neterminal nou Ca şi
• În producţia A −→ x1 x2 . . . xm ı̂nlocuim xi cu Ca ;
• Adăugăm la P regula Ca −→ a.
Procedăm ı̂n acest fel cu toate producţiile lui P şi obţinem un set nou de reguli de
forma A −→ a sau A −→ x1 x2 . . . xm , xi ∈ VN 0 , unde VN 0 este noua mulţime de
neterminale; gramatica G0 = (VN 0 , VT , S, P 0 ) astfel obţinută este echivalentă cu G.
2. Plecând de la gramatica G0 , modificăm ı̂n continuare forma producţiilor pentru a
ajunge la gramatica cerută ı̂n enunţul teoremei.
Producţiile de forma A −→ a rămân nemodificate.
Fie A −→ x1 x2 . . . xm o regulă din P 0 (m ≥ 2). Dacă m = 2, atunci ea nu se
modifică. Dacă m ≥ 3, adăugăm neterminalele noi D1 , D2 , . . . , Dm−2 şi ı̂nlocuim
producţia cercetată cu mulţimea de reguli
A −→ x1 D1 , D1 −→ x2 D2 , ... Dm−3 −→ xm−2 Dm−2 , Dm−2 −→ xm−1 xm .
116 CAPITOLUL 6. GRAMATICI INDEPENDENTE DE CONTEXT

Fie P ” mulţimea producţiilor obţinute prin prelucrarea tuturor regulilor din P 0 şi VN ”
noua mulţime de neterminale. Atunci gramatica G” = (VN ”, VT , S, P ”) este de forma
cerută de Teoremă şi – ı̂n plus – verifică evident egalitatea L(G) = L(G”). q.e.d.
Această formă a unei gramatici independente de context poartă numele de Formă
Normală Chomsky.

Exemplul 6.10 Să se aducă la forma normală Chomsky gramatica de producţii

S −→ bA|aB, A −→ bAA|aS|a, B −→ aBB|bS|b.

În prima etapă se observă că singurele producţii care nu se vor modifica sunt A −→ a şi
B −→ b. Penru celelalte reguli se introduc două neterminale noi Ca , Cb şi două reguli noi
Ca −→ a, Cb −→ b, care se adaugă la P .
Celelalte producţii din P se transformă ı̂n
S −→ Cb A|Ca B, A −→ Cb AA|Ca S, B −→ Ca BB|Cb S.
În etapa a doua se vor modifica numai producţiile care au lungimea membrului drept
cel puţin 3: anume A −→ Cb AA şi B −→ Ca BB. Pentru ele introducem neterminalele
noi D1 , D2 şi regulile ı̂n discuţie se ı̂nlocuiesc cu
A −→ Cb D1 , B −→ Ca D2 , D1 −→ AA, D2 −→ BB.
Gramatica ı̂n F N C rezultată va avea mulţimea de neterminale VN ” = {S, A, B, Ca , Cb ,
D1 , D2 } şisetul de producţii
 S −→ Cb A|Ca B,
 D1 −→ AA, Ca −→ a,
P ” = A −→ Cb D1 |Ca S|a, D2 −→ BB, Cb −→ b.
B −→ Ca D2 |Cb S|b,

Să considerăm o derivare oarecare ı̂n G :


S =⇒ aB =⇒ aaBB =⇒ aabSB =⇒ aabAB =⇒ aabbaB =⇒ aabbab.
Acelaşi cuvânt va avea ı̂n G” derivarea
S =⇒ Ca B =⇒ aB =⇒ aCa D2 =⇒ aaD2 =⇒ aaBB =⇒ aaCb SB =⇒ aabSB =⇒
aabCb AB =⇒ aabbAB =⇒ aabbaB =⇒ aabbab.

6.4.2 Forma normală Greibach


O altă formă normală a gramaticilor independente de context G cu  6∈ L(G), deosebit de
utilă ı̂n trecerile cfg – automat stivă – cfg, este Forma Normală Greibach (FNG).

Definiţia 6.8 O gramatică G = (VN , VT , S, P ) este ı̂n F N G dacă P nu are decât produc-
ţii de forma A −→ aα cu A ∈ VN , a ∈ VT , α ∈ (VN ∪ VT )∗ .

Pentru ı̂nceput sunt necesare câteva rezultate preliminare.


6.4. FORME NORMALE 117

Definiţia 6.9 O gramatică independentă de context proprie G = (VN , VT , S, P ) este re-


cursivă la stânga dacă ea conţine cel puţin o producţie de forma A −→ Aα ∈ P, α ∈
(VN ∪ VT )+ ; neterminalul A folosit ı̂n această producţie se numeşte recursiv la stânga.

Ştim că o A - producţie este o regulă de forma A −→ α; o producţie A −→ Aα se numeşte


A - producţie recursivă la stânga.

Lema 6.6 Fie G = (VN , VT , S, P ) o gramatică independentă de context proprie recursivă


la stânga. Atunci există o gramatică G0 = (VN 0 , VT , S, P 0 ) echivalentă, nerecursivă la
stânga.

Demonstraţie: Fie A −→ Aα1 |Aα2 | . . . |Aαr mulţimea A - producţiilor recursive la stânga


şi A −→ β1 |β2 | . . . |βs celelalte A - producţii (pentru un neterminal A recursiv la stânga).
Deoarece gramatica G este proprie, rezultă r > 0, s > 0, iar αi 6= , βi 6= , ∀ i ≥ 1.
Introducem un neterminal nou B şi ı̂nlocuim toate A - producţiile din P cu setul de reguli:
A −→ βi , A −→ βi B, (1 ≤ i ≤ s),
B −→ αi , B −→ αi B, (1 ≤ i ≤ r).
În acest mod, toate A - producţiile recursive la stânga au fost eliminate (nici un βi
nu ı̂ncepe cu A). Deoarece B este un neterminal nou, B - producţiile introduse nu sunt
recursive la stânga.
Se procedează similar pentru toate neterminalele recursive la stânga. Fie G0 noua
gramatică astfel obţinută. Mai rămâne de arătat că L(G) = L(G0 ).
Cum G este o gramatică proprie, toate A-producţiile sunt utilizate ı̂n derivări efective.
Mai mult, orice secvenţă de producţii de forma A −→ Aαi se ı̂ncheie cu o regulă A −→ βj
(altfel nu se poate elimina neterminalul A). Lucrând ı̂ntr-o gramatică independentă de
context, toate aceste reguli se pot rearanja pentru a fi aplicate succesiv (eventual se
lucrează cu o derivare stângă). Atunci secvenţa

A =⇒ Aαi1 =⇒ Aαi2 αi1 =⇒ . . . =⇒ Aαip αip−1 . . . αi1 =⇒ βj αip . . . αi1

va fi ı̂nlocuită ı̂n G0 prin derivarea

A =⇒ βj B =⇒ βj αip B =⇒ . . . =⇒ βj αip αip−1 . . . αi2 =⇒ βj αip αi2 αi1 .

Această substituţie de derivări poate fi făcută pentru ambele incluziuni. q.e.d.

Exemplul 6.11 Să eliminăm recursivitatea la stânga din gramatica de producţii


S −→ SS|a.
Există un singur neterminal recursiv la stânga – S. Aici α1 = S, β1 = a, r = s = 1.
Introducând un nou simbol B şi aplicând construcţia din demonstraţia Lemei 6.6, se
obţin producţiile:
118 CAPITOLUL 6. GRAMATICI INDEPENDENTE DE CONTEXT

S −→ a, B −→ S, S −→ aB, B −→ SB.
Aceasta nu este ı̂nsă o gramatică proprie deoarece conţine o redenumire (B −→ S).
Folosind Algoritmul de eliminare a redenumirilor, se obţine gramatica echivalentă proprie
G0 = ({S, B}, {a}, S, {S −→ a|aB, B −→ a|aB|SB}).

Lema 6.7 Fie A −→ α1 Bα2 o A-producţie şi B −→ β1 |β2 | . . . |βr toate B-producţiile lui
P . Notăm cu G1 = (VN , VT , S, P1 ) gramatica obţinută din G, ı̂n care
P1 = (P \ {A −→ α1 Bα2 }) ∪ {A −→ α1 β1 α2 |α1 β2 α2 | . . . |α1 βr α2 }.
Atunci L(G) = L(G1 ).

Demonstraţie: Incluziunea L(G1 ) ⊆ L(G) este evidentă: dacă producţia A −→ α1 βi α2


este folosită ı̂ntr-o derivare ı̂n gramatica G1 , ea poate fi ı̂nlocuită ı̂n G cu secvenţa
A =⇒ α1 Bα2 =⇒ α1 βi α2 .
Pentru incluziunea L(G) ⊆ L(G1 ) : A −→ α1 Bα2 este singura regulă din P \P1 . Dacă
ı̂ntr-o derivare din G se foloseşte producţia A −→ α1 Bα2 , neterminalul B va fi rescris
ulterior cu o regulă de forma B −→ βi . Gramatica fiind independentă de context, cele
două producţii se pot aplica succesiv, şi ı̂n G1 ele vor fi ı̂nlocuite cu A −→ α1 βi α2 . q.e.d.

Exemplul 6.12 În gramatica de producţii


P = {E −→ E + T |T, T −→ T ∗ F |F, F −→ (E)|a}
să eliminăm regula T −→ T ∗ F . Sunt două posibilităţi de aplica Lema 6.7.

• Se consideră B = F, α1 = T ∗, α2 = . Atunci T −→ T ∗ F se ı̂nlocuieşte cu


T −→ T ∗ (E)|T ∗ a şi G1 va avea setul de producţii
P1 = {E −→ E + T |T, T −→ T ∗ (E)|T ∗ a|F, F −→ (E)|a}.
Dacă vrem să eliminăm şi T −→ F , atunci ı̂n gramatica care se va obţine, neter-
minalul F devine inaccesibil şi se pot elimina toate F -producţiile, ajungând la setul
de reguli
P1 0 = {E −→ E + T |T, T −→ T ∗ (E)|T ∗ a|(E)|a}.

• Dacă B = T, α1 = , α2 = ∗F , producţia T −→ T ∗ F se ı̂nlocuieşte cu


T −→ T ∗ F ∗ F |F ∗ F şi gramatica G1 va avea setul de reguli
P = {E −→ E + T |T, T −→ T ∗ F ∗ F |F ∗ F, F −→ (E)|a}.

Teorema 6.4 Orice limbaj independent de context L cu  6∈ L poate fi generat de o


gramatică ı̂n F N G.

Demonstraţie: Fie G = (VN , VT , S, P ) o gramatică independentă de context cu L = L(G).


Conform Teoremei 6.3, putem presupune că G este ı̂n forma normală Chomsky. Fie
6.4. FORME NORMALE 119

VN = {A1 , A2 , . . . , An } mulţimea neterminalelor, unde s-a notat A1 = S. Algoritmul de


aducere a gramaticii G la forma normală Greibach cuprinde două etape:

Faza 1: Aplicând Lemele 6.6, 6.7, se obţine o gramatică echivalentă cu G care are
numai reguli de forma Ai −→ aγ sau Ai −→ Aj γ cu i < j.
Această fază este realizată de Algoritmul 6.7:

Algoritmul 6.7:
Intrare: G = ({A1 , A2 , . . . , Am }, VT , A1 , P ) proprie.
Ieşire: G0 = (VN 0 , VT , A1 , P 0 ) cu
i. L(G) = L(G0 );
ii. ∀ Ai −→ α ∈ P 0 =⇒ α = aγ (a ∈ VT ) sau
α = Aj γ cu i < j.

1. VN 0 := VN , P 0 := P ;

2. k := 1, n := 0;
0 0

 VN := VN ∪ {Bk },

3. Dacă Ak −→ Ak α ∈ P atunci P 0 := (P 0 ∪ {Bk −→ α|αBk }) \ {Ak −→ Ak α},


n := 1.
4. Dacă n = 0 atunci salt la pasul 5.
Altfel, ∀ Ak −→ β ∈ P 0 =⇒ P 0 := P 0 ∪ {Ak −→ βBk }.

5. k := k + 1. Dacă m < k atunci salt la Pasul 8; altfel j := 1.

6. Pentru orice regulă Ak −→ Aj α ∈ P 0 =⇒


P 0 := (P 0 ∪ {Ak −→ βα | Aj −→ β ∈ P 0 }) \ {Ak −→ Aj α}.

7. j := j + 1. Dacă j < k atunci salt la Pasul 6; altfel n := 0 şi salt la Pasul 3.

8. Dacă P 0 nu are proprietatea (b), atunci salt la Pasul 2;


altfel G0 = (VN 0 , VT , A1 , P 0 ), STOP.

Se observă că Paşii 3 şi 4 reprezintă de fapt aplicarea Lemei 6.6 (gramatica fiind
proprie, aplicarea cel puţin odată a Pasului 3 duce la o aplicare a Pasului 4), iar Pasul 6
reprezintă aplicarea Lemei 6.7 cu α1 = , α2 = α, A = Ak , B = Aj .
Cum aceşti paşi constituie toate modificările de producţii din algoritm (şi – ı̂n plus –
orice regulă din P este prelucrată cu unul din paşii 3, 4 sau 6), rezultă că L(G) = L(G0 ).

Pentru aserţiunea ii. vom raţiona inductiv după k:


120 CAPITOLUL 6. GRAMATICI INDEPENDENTE DE CONTEXT

Pentru k = 1 se aplică numai Paşii 3 şi 4 care introduc ı̂n P 0 doar A1 -producţii de
forma A1 −→ γ, iar γ nu ı̂ncepe cu A1 .
Presupunem că pentru toţi i (1 ≤ i ≤ k), Ai −→ Aj γ ∈ P 0 numai dacă i < j; vom
prelucra acum Ak - producţiile.
Dacă Ak −→ Aj γ ∈ P 0 şi k < j sau dacă Ak −→ aγ cu a ∈ VT , atunci se poate aplica
numai Pasul 4, care păstrează aceste reguli ı̂n P 0 .
Dacă Ak −→ Aj γ ∈ P 0 şi j < k, atunci – cu Pasul 6 – această regulă se ı̂nlocuieşte
cu mulţimea de producţii {Ak −→ βγ | Aj −→ β ∈ P 0 }. Dar cum j < k, ı̂n P 0 au fost
introduse (conform ipotezei de inducţie) la un pas anterior, numai reguli ı̂n care β are
una din formele aγ (cu a ∈ VT ) sau As γ cu j < s.
Deci o trecere prin algoritm ridică indicele j din Ak −→ Aj γ cu cel puţin o unitate.
Rezultă că după cel mult k − 1 treceri (asigurate de Pasul 7) obţinem numai Ak - reguli
de forma Ak −→ As γ cu s ≥ k sau Ak −→ aγ. Producţiile cu s = k sunt apoi eliminate
la trecerea următoare prin Pasul 3.
Deci numărul de treceri asigurat de Pasul 7 este finit; rezultă că procedura propusă
este un algoritm.

Observaţia 6.5 Rolul lui n este de a nu introduce simboluri Bk neutilizabile (eliminate


apoi cu Algoritmul 4).

Faza 2: În urma aplicării Algoritmului 6.7, gramatica G0 are numai producţii de forma
Ai −→ Aj γ (i < j), Ai −→ aγ, Bi −→ γ, γ ∈ (VT ∪ {B1 , B2 , . . . , Bm })∗ (7)
Pentru a ajunge la forma cerută de Teorema 6.4, aplicăm următorul algoritm:
Algoritmul 6.8:
Intrare: G0 = (VN 0 , VT , A1 , P 0 ) cu producţiile de forma (7);
Ieşire: G” = (VN ”, VT , A1 , P ”) cu proprietăţile
a) L(G”) = L(G0 );
b) P ” = {A −→ aγ | a ∈ VT , γ ∈ (VN ” ∪ VT )∗ }.

1. P ” := P, k := m − 1;

2. Pentru fiecare Ak −→ Aj α ∈ P 0 =⇒
P ” := (P ” ∪ {Ak −→ βα | Aj −→ β ∈ P 0 }) \ {Ak −→ Aj α}.

3. k := k − 1; dacă 1 ≤ k atunci salt la Pasul 2;

4. Pentru fiecare Bi −→ Aj α ∈ P ”, (1 ≤ i ≤ m, 1 ≤ j ≤ m) =⇒
P ” := (P ” ∪ {Bi −→ βα | Aj −→ β ∈ P ”}) \ {Bi −→ Aj α}.

5. G” = (VN 0 , VT , A1 , P ”).
6.4. FORME NORMALE 121

Aserţiunea (a) rezultă din faptul că singurele modificări de producţii – cele date de
Paşii 2 şi 4 – s-au efectuat conform cu Lema 7, care păstrează echivalenţa gramaticilor.
De asemenea, numarul de paşi este finit (cel mult |P 0 |), deci avem de-a face cu un
algoritm. Mai rămâne de verificat aserţiunea (b).
Din Algoritmul 6.7 rezultă că toate Am -producţiile sunt de forma Am −→ aγ (m este
indicele maxim al neterminalelor din VN ). Pentru m − 1, Am−1 -producţiile sunt de una
din formele Am−1 −→ aγ (şi nu se mai modifică nimic) sau Am−1 −→ Am γ. Trecerea
prin Pasul 2 ı̂nlocuieşte regula Am−1 −→ Am γ cu producţiile Am−1 −→ βγ pentru toate
Am -producţiile Am −→ β. Dar – conform construcţiei – β = aγ 0 , deci Am−1 −→ aγ 0 γ.
Algoritmul 6.8 prelucrează ı̂n mod analog, ı̂n mod descrescător, toate regulile având
succesiv ca membru stâng Am−1 , Am−2 , . . . , A1 .
În final, să examinăm regulile care au B-uri ca membru stâng. Orice Bk -producţie
este introdusă de Pasul 2 al Algoritmului 6.7, şi nu mai este modificată de nici o trecere
ulterioară prin algoritm. Ea apare ı̂n urma ı̂nlocuirii unei reguli Ak −→ Ak α.
Cum gramatica iniţială a fost ı̂n F N C, folosind o inducţie simplă după numărul de
aplicări ale Lemelor 6.6 şi 6.7, obţinem că orice Ai -producţie (1 ≤ i ≤ m) ı̂ncepe ı̂n
dreapta cu un terminal sau cu un prefix de forma Aj Ak . Deci cuvântul α din Pasul 2
al Algoritmului 6.8 nu este niciodată  sau cu un B pe prima poziţie. Rezultă că orice
Bi -producţie ı̂ncepe ı̂n dreapta sau cu un terminal, sau cu un Aj . Aplicând ı̂ncă odată
Lema 6.7 (Pasul 4), obţinem gramatica G” sub forma normală cerută. q.e.d.
Observaţia 6.6 Gramatica G” obţinută ı̂n urma aplicării Algoritmilor 6.7 şi 6.8 nu este
ı̂n general proprie (pot exista simboluri Bk neutilizabile). Se verifică uşor că aplicarea
ı̂n continuare a Algoritmilor 6.2 − 6.6 pentru a transforma G” ı̂ntr-o gramatică proprie
conduce tot la o gramatică ı̂n F N G.

Exemplul 6.13 Să aducem la F N G gramatica de producţii


P = {E −→ E + T |T, T −→ T ∗ F |F, F −→ (E)|a}.
Pentru a aplica mai uşor Algoritmul 6.7, vom renota neterminalele, astfel ı̂ncât produc-
ţiile vor avea forma
A1 −→ A1 + A2 |A2 , A2 −→ A2 ∗ A3 |A3 , A3 −→ (A1 )|a
unde m = 3.
Pas 1: P 0 := P ;
Pas 2: k := 1, n := 0;
Pas 3: Regula A1 −→ A1 + A2 se ı̂nlocuieşte ı̂n P 0 cu B1 −→ +A2 | + A2 B1 , unde B1
este un neterminal nou. În plus, n := 1;
Pas 4: Cum n 6= 0, regula A1 −→ A2 introduce ı̂n P 0 producţia A1 −→ A2 B1 ;
În acest moment, P 0 este formată din producţiile
P 0 = {A1 −→ A2 B1 |A2 , A2 −→ A2 ∗ A3 |A3 , A3 −→ (A1 )|a, B1 −→ +A2 | + A2 B1 }.
Pas 5: k := 2. Cum k ≤ 3, se ia j := 1 şi se trece la Pasul 6;
122 CAPITOLUL 6. GRAMATICI INDEPENDENTE DE CONTEXT

Pas 6: Pentru că nu există producţii de forma A2 −→ A1 α, P 0 nu se modifică;


Pas 7: j := 2. Condiţia j ≤ k − 1 nu este verificată, deci n := 0 şi salt la pasul 3;
Pas 3: Regula A2 −→ A2 ∗ A3 este scoasă din P 0 şi ı̂nlocuită cu B2 −→ ∗A3 | ∗ A3 B2 ,
unde B2 este un neterminal nou. În plus, n := 1.
Pas 4: Deoarece n 6= 0, producţia A2 −→ A3 introduce ı̂n P 0 producţia A2 −→ A3 B2 .
În acest moment, P 0 = {A1 −→ A2 B1 |A2 , A2 −→ A3 B2 |A3 , A3 −→ (A1 )|a,
B1 −→ +A2 | + A2 B1 , B2 −→ ∗A3 | ∗ A3 B2 };
Pas 5: k := 3. Condiţia k > 3 nu este verificată, deci j := 1 şi salt la Pasul 6;
Pas 6: P 0 nu se modifică (deoarece nu are reguli de forma A3 −→ A1 α);
Pas 7: j := 2. Condiţia j ≤ 2 se verifică şi se reia Pasul 6;
Pas 6: P 0 nu conţine reguli de forma A3 −→ A2 α;
Pas 7: j := 3. Condiţia j ≤ 2 nu este ı̂ndeplinită, aşa că n := 0 şi salt la Pasul 3;
Pas 3: Nu există reguli de forma A3 −→ A3 α;
Pas 4: Cum n = 0, se trece la Pasul 5;
Pas 5: k := 4. Acum k > 3 este falsă, deci urmează Pasul 8;
Pas 8: P 0 are proprietatea ii.;
Pas 9: Se obţine gramatica G0 = (VN 0 , VT , A1 , P 0 ) unde VN 0 = {A1 , A2 , A3 , B1 .B2 , B3 },
0
P = {A1 −→ A2 B1 |A2 , A2 −→ A3 B2 |A3 , A3 −→ (A1 )|a, B1 −→ +A2 | + A2 B1 ,
B2 −→ ∗A3 | ∗ A3 B2 }.
Cu această gramatică se ı̂ncepe Algoritmul 6.8:
Pas 1: P ” := P 0 , k := 2;
Pas 2: Producţia A2 −→ A3 B2 se ı̂nlocuieşte ı̂n P ” cu A2 −→ (A1 )B2 |aB2 ; similar,
ı̂n locul regulei A2 −→ A3 se introduc producţiile A2 −→ (A1 )|a. P ” va fi acum
P ” = {A1 −→ A2 B1 , A2 −→ (A1 )B2 |aB2 |(A1 )|a, A3 −→ (A1 )|a,
B1 −→ +A2 | + A2 B1 , B2 −→ ∗A3 | ∗ A3 B2 };
Pas 3: k := 1; cum k ≥ 1 este adevărată, se reia pasul 2;
Pas 2: A1 −→ A2 B1 se ı̂nlocuieşte cu A1 −→ (A1 )B2 B1 |aB2 B1 |(A1 )B1 |aB1 , iar
producţia A1 −→ A2 cu A1 −→ (A1 )B2 |aB2 |(A1 )|a. După acest pas, P ” este format din
P ” = {A1 −→ (A1 )B2 B1 |(A1 )B1 |(A1 )B2 |(A1 )|aB2 B1 |aB1 |aB2 |a,
A2 −→ (A1 )B2 |(A1 )|aB2 |a, A3 −→ (A1 )|a,
B1 −→ +A2 | + A2 B1 , B2 −→ ∗A3 | ∗ A3 B2 };
Pas 3: k := 0. Condiţia k ≥ 1 nu mai este ı̂ndeplinită;
Pas 4: Nu există producţii de forma Bi −→ Aj α, deci P ” rămâne nemodificat şi
gramatica ı̂n FNG este cea cu producţiile date mai sus, iar VN ” = VN 0 \ {B3 }.
Să luăm o derivare arbitrară ı̂n gramatica G :
A1 =⇒ A2 =⇒ A2 ∗ A3 =⇒ (A1 ) ∗ A3 =⇒ (A1 + A2 ) ∗ A3 =⇒ (A2 + A2 ) ∗ A3 =⇒
(A3 + A2 ) ∗ A3 =⇒ (a + A2 ) ∗ A3 =⇒ (a + A3 ) ∗ A3 =⇒ (a + 1) ∗ A3 =⇒ (a + a) ∗ a.
Corespunzător, ı̂n G” are loc derivarea:
A1 =⇒ (A1 )B2 =⇒ (aB1 )B2 =⇒ (a + A2 )B2 =⇒ (a + a)B2 =⇒ (a + a) ∗ A3 =⇒ (a + a) ∗ a.
6.5. TEOREMA U V W XY ŞI APLICAŢII 123

Observaţia 6.7 Algoritmii 6.7 şi 6.8 aduc la Forma Normală Greibach şi gramatici care
nu sunt proprii sau ı̂n F N C. Singura condiţie necesară este să nu existe -producţii
(condiţie asigurată de Algoritmul 6.5 şi de ipoteza  6∈ L).

6.5 Teorema uvwxy şi aplicaţii


Lema de pompare pentru limbajele regulate – a cărei importanţă am văzut la momentul
cuvenit – poate fi tratată ca un caz particular al unei teoreme valabile pentru limbajele
independente de context.
Cunoscută mai ales sub numele de Teorema uvwxy (după forma sub care se pot
descompune cuvintele unui limbaj independent de context), lema de pompare pentru
limbajele independente de context are o serie de consecinţe importante ı̂n dezvoltarea
studiului limbajelor din această clasă.

6.5.1 Enunţ şi demonstraţie. Variante


Teorema 6.5 Fie L un limbaj independent de context. Există atunci o constantă n astfel
ca pentru orice cuvânt α ∈ L, |α| ≥ n, este posibilă descompunerea α = uvwxy cu
1. |vx| ≥ 1;
2. |vwx| ≤ n;
3. uv i wxi y ∈ L, ∀ i ≥ 0.

Demonstraţie: Fie G = (VN , VT , S, P ) o cfg ı̂n FNC cu L(G) = L \ {}. Vom arăta prin
inducţie după i următoarea aserţiune:
∀ α ∈ L(G), dacă arborele de derivare pentru α nu are drumuri de lungime mai mare
decât i, atunci |α| ≤ 2i−1 . (8)
i := 1: afirmaţie banală, deoarece – gramatica fiind ı̂n Formal Normală Chomsky –
S

singurul arbore posibil cu drum de lungime 1 este a?


Fie acum i > 1 şi arborele pentru α de forma:
SP


) PP
q
A B

J
JJ
J


T1 J
T2 J

J

JJ

J
124 CAPITOLUL 6. GRAMATICI INDEPENDENTE DE CONTEXT

Dacă subarborii T1 şi T2 au frontierele α1 respectiv α2 , atunci α = α1 α2 . Cum T1


şi T2 au drumuri de lungimi maxim i − 1, rezultă (conform ipotezei de inducţie) |α1 | ≤
2i−2 , |α1 | ≤ 2i−2 . Deci |α| = |α1 | + |α2 | ≤ 2i−2 + 2i−2 = 2i−1 .
Revenind la demonstraţia Teoremei 6.5, fie k = |VN | şi n = 2k . Să considerăm acum
α ∈ L(G), |α| ≥ n = 2k . Conform cu (8), orice arbore de derivare pentru α trebuie să
aibă cel puţin un drum de lungime minimum k + 1. Un astfel de drum are cel puţin k + 2
vârfuri, dintre care doar ultimul nu este notat cu neterminale.
Cum ı̂n VN sunt k neterminale şi drumul are minim k + 1 noduri interioare, rezultă
că pe acest drum există cel puţin două noduri distincte notate cu acelaşi neterminal.
Formal, există două vârfuri v1 , v2 cu proprietăţile:

i. h(v1 ) = h(v2 ) = A, A ∈ VN ;

ii. v2 este un descendent al lui v1 ;

iii. Drumul de la v1 la nodul terminal este de lungime cel mult k + 1.

Nodurile v1 şi v2 pot fi găsite efectiv, parcurgând drumul de la nodul terminal spre
rădăcină, reţinând primele două noduri cu aceeaşi notaţie.

Notăm cu w frontiera subarborelui de rădăcină v2 (deci A =⇒ w) şi β frontiera

subarborelui de rădăcină v1 (A =⇒ β). Cum v1 şi v2 sunt distincte şi v2 este descendent
al lui v1 , rezultă că este posibilă derivarea
∗ ∗
A =⇒ vAx =⇒ β cu v, x ∈ VT∗ . (9)
Deci

• β = vwx;

• Cel puţin unul din cuvintele v sau x este nevid, deoarece – gramatica G fiind ı̂n
FNC – prima regulă aplicată ı̂n derivarea (9) este de forma A −→ BC; aşa că
neterminalul A din forma sentenţială vAx provine sau din B sau din C, celălalt
neterminal generând un cuvânt nevid.

• Subarborele de rădăcină v1 are drumul de lungime maxim k + 1 deci, conform cu


(8), |β| ≤ 2k , adică |vwx| ≤ n.

Completând derivarea pentru cuvântul α dat de acest arbore, există u, y ∈ VT∗ cu


∗ ∗ ∗
S =⇒ uAy =⇒ uvAxy =⇒ uvwxy.

Mai rămâne de arătat proprietatea (3) din Teoremă. Ea rezultă folosind derivarea (9):
∗ ∗
Pentru i := 0 : S =⇒ uAy =⇒ uwy;
6.5. TEOREMA U V W XY ŞI APLICAŢII 125

∗ ∗ ∗ ∗ ∗
Pentru i ≥ 1 : S =⇒ uAy =⇒ uvAxy =⇒ . . . =⇒ uv i Axi y =⇒ uv i wxi y.

În derivare s-a folosit de i ori secvenţa A =⇒ vAx (i ≥ 0) şi apoi – la sfârşit –

secvenţa A =⇒ w. q.e.d.
Observaţia 6.8
1. Lema de pompare este un caz particular al Teoremei 6.5 ı̂n care x = y = . La
această concluzie se ajunge scriind o gramatică regulată ca o gramatică independentă
de context ı̂n FNC şi refăcând demonstraţia.
2. Aserţiunea (8) se poate rescrie: ”∀ α ∈ L(G), dacă orice arbore de derivare pentru
α are toate drumurile de lungime cel mult i, atunci |α| ≤ 2i−1 .”
Din această variantă se deduce forma utilizată ı̂n demonstraţia Teoremei: ”∀ α ∈
L(G), dacă |α| ≥ 2i−1 , atunci ı̂n orice arbore de derivare pentru α există cel puţin
un drum de lungime minim i.”
3. Teorema 6.5 nu este valabilă pentru orice drum de lungime minim k + 1; impor-
tant este faptul că există cel puţin un drum de lungime minim k + 1 pentru care
descompunerea este posiblă. De obicei se alege un drum de lungime maximă ı̂n
arbore.
Să vedem aceasta pe un exemplu.
Exemplul 6.14 Fie gramatica de producţii
S −→ BC|a, B −→ BS|b, C −→ BS.
Aici k = 3 şi n = 23 = 8. Să considerăm α = bbbaabbba.
Un arbore de derivare pentru α este
S
XX
 XXX

9 XX
z
B
HH Q
C

 j
H 
 Q
s
Q
B S B S
HH Q
? 
 j
H ? 
 Q
s
Q
b B C b B C
HH Q
? 
 j
H ? 
 Q
s
Q
b B S b B S
H

 HH
j ? ? ?
B S a b a
? ?
b a
Pe baza acestui arbore să ı̂ncercăm să găsim toate descompunerile posibile ale cuvântului
α (descompuneri date de Teorema 6.5).
126 CAPITOLUL 6. GRAMATICI INDEPENDENTE DE CONTEXT

1. Pentru drumul S − B − S − C − B − S − a (cel mai lung) descompunerea este


u = b, v = bb, w = a, x = a şi y = bbba.
2. Pentru S − B − S − B − b avem u = , v = b, w = b, x = baa, y = bbba.
3. Pentru S − B − S − C − B − B − b avem u = bb, v = , w = b, x = a, y = abbba.
4. Pentru S − B − S − C − S − a avem u = b, v = bba, w = a, x = , y = bbba.
5. Pentru S − C − S − C − B − b avem u = bbbaa, v = bb, w = b, x = a, y = .
6. Pentru S − A − S − C − S − a avem u = bbbaab, v = bb, w = a, x = , y = .
7. Pentru S − C − S − B − b avem u = , v = bbbaab, w = bba, x = , y = .
În acest caz ı̂nsă |vwx| = 9 ≥ n, deci nu este o descompunere conformă cu Teorema 6.5.
Cauza este aceea că ı̂n construcţia lui v există drumuri cu lungimea mai mare decât cel
ales ı̂n construcţia variantei 7.
Înafara acestora mai sunt şi alte descompuneri posibile, ca de exemplu cea cores-
punzătoare drumului S − B − B − b ı̂n care u = v = , w = b, x = bbaa, y = bbba. Ea
verifică toate ipotezele Teoremei, dar nu a fost construită pe baza demonstraţiei, deoarece
drumul S − B − B − b este de lungime prea mică.
Dacă pe drumul S − B − S − B − b am alege drept noduri pe cele notate cu S, s-ar
obţine descompunerea u = , v = b, w = bbaa, x = bbba, y =  care nu verifică condiţia
|vwx| ≤ 8. De aceea se aleg pe fiecare drum ultimele două noduri notate identic.
Folosind concluzia (3) din Teoremă rezultă că ı̂n L(G) sunt incluse şi limbajele:
L1 = {b2i+1 ai+1 b3 a | i ≥ 0}, L2 = {bi+1 (baa)i b3 a | i ≥ 0}, L3 = {b3 ai+1 b3 a | i ≥ 0},
L4 = {b(bba)i ab3 a | i ≥ 0}, L5 = L6 = {b3 a2 b2i+1 a | i ≥ 0}.

O variantă a Teoremei uvwxy este Lema Bar-Hillel. Aceasta se bazează pe faptul că
Teorema 6.5 este valabilă şi pentru cuvinte de lungime mai mică decât 2k , anume pentru
orice α ∈ L(G) cu |α| ≥ 2k−1 .

Teorema 6.6 (Lema Bar-Hillel): Fie L un limbaj independent de context. Atunci există
două constante p şi q astfel ı̂ncât ∀ α ∈ L, |α| > p, are loc decompunerea α = uvwxy
cu proprietăţile

1. |vx| ≥ 1;

2. |vwx| ≤ q;

3. uv i wxi y ∈ L, ∀ i ≥ 0.

Demonstraţia este identică cu cea de la Teorema 6.5, unde se alege p = 2k , q = 2k−1 .


q.e.d.

Exemplul 6.15 Fie L = {ak bk ck | k ≥ 1}. Să presupunem că L este un limbaj indepen-
dent de context şi fie n constanta dată de Teorema 6.5. Să luăm cuvântul an bn cn . Cum
6.5. TEOREMA U V W XY ŞI APLICAŢII 127

|α| = 3n > n, rezultă că α = uvwxy cu |vx| ≥ 1, |vwx| ≤ n şi uv i wxi y ∈ L ∀ i ≥ 0.


Din |vwx| ≤ n rezultă că vx nu poate avea simultan 0 a0 -uri şi 0 c0 -uri pentru că ı̂ntre ele
nu pot ı̂ncape n caractere 0 b0 .
Dacă vx ∈ a+ , atunci uwy (cazul i = 0) are n 0 b0 -uri şi n 0 c0 -uri dar mai puţine 0 a0 -uri
(pentru că vx 6= ). Deci uwy 6∈ L, contradicţie.
Similar dacă vx ∈ c+ sau vx ∈ b+ .
Dacă vx ∈ a+ b+ atunci uwy are mai multe 0 c0 -uri decât 0 a0 -uri sau 0 b0 -uri, deci din
nou contradicţie. Similar dacă vx ∈ b+ c+ .
Din toată această analiză se poate trage o singură concluzie: Teorema 6.5 nu se poate
aplica, deci L nu este un limbaj independent de context.
Exemplul 6.16 Să ne punem aceeaşi problemă pentru limbajul L = {ap | p prim }.
Dacă L este independent de context, atunci există n prim pentru care Teorema 6.5 este
adevărată. Luând α = an , avem egalitatea an = uvwxy. Să considerăm v = ak , x = as .
Atunci concluzia (1) asigură k + s > 0, iar concluzia (3), că uv i wxi y ∈ L pentru orice
i ≥ 0; deci ∀ i ≥ 0, |uv i wxi y| este număr prim. Adică n + i(k + s) este prim pentru
orice număr natural i. Luând i = n se obţine n(k + s + 1) prim, imposibil pentru că
n > 1, k + s + 1 > 1. Deci L nu este limbaj independent de context.
Din aceste exemple rezultă că incluziunea L2 ⊆ L1 este strictă (pentru limbajul din
Exemplul 6.15 s-a construit ı̂n Capitolul 3 o gramatică dependentă de context).
Cu ajutorul Teoremei uvwxy se poate deci demonstra faptul că unele limbaje nu sunt
independente de context.
Acest lucru nu este ı̂ntotdeauna posibil.
De exemplu, limbajul L = {ai bj ck ds | i = 0 sau j = k = s} nu este independent de
context. Dar dacă luăm α = bj ck ds (α ∈ L pentru i = 0) şi scriem α = uvwxy, va fi
totdeauna posibil să alegem secvenţele u, v, w, x, y astfel ca uv i wxi y ∈ L, ∀ i ≥ 0 (de
exemplu se poate lua vwx ∈ b+ ).
Pentru α = ai bj cj dj , dacă alegem vx ∈ A+ , avem de asemenea uv i wxi y ∈ L ∀i ≥ 0.
Deci Teorema 6.5 poate fi verificată de anumite limbaje dependente de context. Aceas-
tă observaţie a dus la necesitatea de a transpune Teorema 6.5 ı̂ntr-o formă care să cores-
pundă şi unor astfel de cazuri. Cea mai cunoscută variantă este Lema lui Ogden.
Teorema 6.7 (Lema lui Ogden): Fie L un limbaj independent de context. Atunci există
o constantă n astfel ı̂ncât ∀ α ∈ L ı̂n care ”marcăm” cel puţin n poziţii oarecare, putem
scrie α = uvwxy, unde
1. vx are cel puţin o poziţie marcată;
2. vwx are cel mult n poziţii marcate;
3. uv i wxi y ∈ L, ∀i ≥ 0.
128 CAPITOLUL 6. GRAMATICI INDEPENDENTE DE CONTEXT

Teorema 6.5 este un caz particular al Lemei lui Ogden, ı̂n care se marchează toate
poziţiile lui α.
Demonstraţie: Fie G = (VN , VT , S, P ) o gramatică ı̂n FNC cu L(G) = L \ {} şi
k = |VN |. Alegem n = 2k + 1 şi luăm α ∈ L(G) cu |α| ≥ n, ı̂n care marcăm n poziţii.
În arborele de derivare cu frontiera α construim recursiv un drum P , ı̂n felul următor:
Introducem rădăcina ı̂n drumul P .
Fie v ultimul nod introdus; dacă v este un nod terminal, drumul se ı̂ncheie. Dacă
nu, v are doi descendenţi (gramatica G este ı̂n FNC). Se adaugă la drum acel descendent
direct pe a cărui frontieră sunt cele mai multe poziţii marcate; dacă numărul poziţiilor
marcate pe frontierele celor doi descendenţi este egal, se alege arbitrar unul din ei.
Prin această construcţie, fiecare nod al drumului are pe frontieră cel puţin jumătate
din poziţiile marcate, faţă de ascendentul său direct. Pentru că numărul poziţiilor marcate
este cel puţin n = 2k + 1, rezultă că drumul astfel construit are cel puţin k + 1 noduri
distincte. Există deci două noduri v1 şi v2 notate identic.
Mai departe, demonstraţia decurge la fel cu demonstraţia Teoremei 6.5. q.e.d.
În Exemplul anterior, luăm α = ai bj cj dj ;si marcăm n 0 b0 -uri şi 0 c0 -uri (condiţia este să
fie marcate cel puţin un 0 b0 şi un 0 c0 ). Aplicând Lema lui Ogden şi raţionând similar ca ı̂n
Exemplul 6.15, se ajunge la contradicţie pentru fiecare caz studiat. Deci limbajul nu este
independent de context.

6.5.2 Aplicaţii ale Teoremei uvwxy


Din Teorema uvwxy şi din faptul că există limbaje ı̂n L1 \ L2 (afirmaţie care a putut fi
probată cu ajutorul acestei teoreme), pot fi demonstrate o serie de proprietăţi interesante
legate de limbajele independente de context.
Propoziţia 6.4 L2 nu este ı̂nchisă la intersecţie şi complementară.
Demonstraţie: Fie limbajele L1 = {ai bj cj | i, j ≥ 1} şi L2 = {ai bi cj | i, j ≥ 1}.
Ele pot fi generate de gramaticile Gk = (VNk , VT , Sk , Pk ) unde VNk = {Sk , Ak , Bk ) (k =
1, 2), VT = {a, b, c} şi
P1 = {S1 −→ A1 B1 , A1 −→ aA1 |a, B1 −→ bB1 c|bc},
P2 = {S2 −→ A2 B2 , A2 −→ aA2 b|ab, B2 −→ cB2 |c}.
Deci L1 şi L2 sunt independente de context; intersecţia lor ı̂nsă, L1 ∩ L2 = {ai bi ci | i ≥ 1},
nu este un limbaj independent de context (Exemplul 6.15).
Pentru a doua afirmaţie folosim faptul că L2 este ı̂nchisă la reuniune (Capitolul 4).
Dacă ar fi ı̂nchisă şi faţă de complementară, atunci – conform egalităţii de mulţimi
L 1 ∩ L2 = L 1 ∪ L2
ar rezulta că L2 este ı̂nchisă la intersecţie, contradicţie. q.e.d.
6.5. TEOREMA U V W XY ŞI APLICAŢII 129

Teorema 6.8 L2 este ı̂nchisă la intersecţia cu limbaje regulate.


Demonstraţie: Fie L ∈ L2 şi R ∈ L3 două limbaje pe care le presupunem că sunt definite
peste acelaşi alfabet VT (lucru uşor de ı̂ndeplinit printr-o operaţie de reuniune).
În plus, se poate lucra şi ı̂n ipoteza  6∈ L ∪ R (dacă  ∈ L ∪ R, se va construi ı̂ntâi
o gramatică pentru limbajul (L − {}) ∩ (R − {}) după modelul de mai jos,, apoi, dacă
 ∈ L ∩ R, se adaugă un simbol de start nou S 0 şi producţiile S 0 −→ S|).
Fie automatul finit determinist M = (Q, VT , δ, q0 , F ) care acceptă limbajul R, şi gra-
matica independentă de context G = (VN , VT , S, P ) ı̂n FNC, care generează L. Dacă
F = {s1 , s2 , . . . , sh }, vom nota Ri = τ (Mi ) unde Mi = (Q, VT , δ, q0 , {si }). Evident

L ∩ R = (L ∩ R1 ) ∪ (L ∩ R2 ) ∪ . . . ∪ (L ∩ Rh ),

deci este suficient să arătăm că L ∩ Ri este un limbaj independent de context ∀ i =
1, 2, . . . , h (cum L2 este ı̂nchisă la reuniune, va rezulta imediat că L ∩ R este tot inde-
pendent de context).
Construim gramatica G1 = (VN1 , VT , S1 , P1 ) unde VN1 = (VN ∪ VT ) × Q × Q,
S1 = (S, q0 , q0 ) şi P1 format din toate producţiile de forma
1. (A, q, q1 ) −→ (B, q, q2 )(C, q2 , q1 ) unde q, q1 , q2 ∈ Q, A −→ BC ∈ P ;

2. (A, q, q1 ) −→ (a, q, q1 ) unde q, q1 ∈ Q, A −→ a ∈ P ;

3. (a, q, q1 ) −→ a, unde a ∈ VT , δ(q, a) = q1 .


G1 este independentă de context. Mai trebuie arătat doar că L(G1 ) = L ∩ Ri .
• Aserţiunea 1: Dacă se aplică numai producţii de tipul (1) atunci
h i h i
n n
(A, qi , qj ) =⇒ (X1 , qi , q1 )(X2 , Q1 , q2 ) . . . (Xn+1 , qn , qj ) ⇐⇒ A =⇒ X1 X2 . . . Xn+1
∀ A, X1 , X2 , . . . , Xn+1 ∈ VN , q ∈ Q.
Demonstraţia acestei aserţiuni se face prin inducţie după n:
n = 1: evident, prin definiţie.
Să presupunem Aserţiunea 1 adevărată pentru n paşi, şi să o demonstrăm pentru
n + 1.
”=⇒”: Fie derivarea (ı̂n care s-a detaliat primul pas):
n
(A, qi , qj ) =⇒ (B, qi , q 0 )(C, q 0 , qj ) =⇒ (X1 , qi , q1 ) . . . (Xn+1 , qn , qj ).
Conform Lemei 4.1., există k (1 ≤ k ≤ n) cu q 0 = qk şi
n
(B, qi , q 0 ) =⇒
1
(X1 , qi , q1 ) . . . (Xk , qk−1 , qk ),
n
2
(C, qk , qj ) =⇒ (Xk+1 , qk , qk+1 ) . . . (Xn+1 , qn , qj ).
130 CAPITOLUL 6. GRAMATICI INDEPENDENTE DE CONTEXT

Evident, n = n1 + n2 , n1 > 0, n2 > 0. Conform ipotezei de inducţie, avem


n1 n2
B =⇒ X1 X2 , . . . Xk , C =⇒ Xk+1 . . . Xn+1 . Din primul pas al derivării ı̂n G1 ,
A −→ BC ∈ P . Deci se poate construi derivarea ı̂n G :
n1 n2 n+1
A =⇒ BC =⇒ X1 X2 . . . Xk C =⇒ X1 X2 . . . Xn+1 , deci A =⇒ X1 X2 . . . Xn+1 .
”⇐=”: Similar.

• Aserţiunea
h 2: i
n
(a1 , q1 , q2 )(a2 , q2 , q3 ) . . . (an , qn , qn+1 ) =⇒ a1 a2 . . . an ⇐⇒ [δ(q1 , a1 a2 . . . an ) = qn+1 ]
Afirmaţia este evidentă datorită faptului că ı̂n derivare se aplică numai producţii de
tipul 3 şi – conform definiţiei – are loc echivalenţa

(ai , qi , qi+1 ) −→ ai ∈ P1 ⇐⇒ δ(qi , ai ) = qi+1 , ∀ i = 1, 2, . . . , n.

Cu aceste aserţiuni, putem demonstra egalitatea L(G1 ) = L ∩ Ri .


n
”⊆”: w = a1 a2 . . . an ∈ L(G1 ); deci S1 =⇒ a1 a2 . . . an , derivare care – ţinând cont că
G1 este ı̂n FNC – poate fi detaliată astfel:
∗ ∗ ∗
(S, q0 , si ) =⇒ (A1 , q0 , q1 ) . . . (An , qn−1 , si ) =⇒ (a1 , q0 , q1 ) . . . (an , qn−1 , si ) =⇒ a1 . . . an

unde s-au aplicat la ı̂nceput producţiile de forma (1), apoi cele de tipul (2), şi – ı̂n final
– de tipul (3).

Conform Aserţiunii 1, rezultă că S =⇒ A1 A2 . . . An , iar cu Aserţiunea 2,
δ(q0 , a1 , a2 . . . an ) = si . Cum si ∈ F , va rezulta w ∈ Ri .
Din a doua parte a derivării rezultă că ı̂n P există producţiile A1 −→ ai , (1 ≤ i ≤ n).
∗ ∗
Deci S =⇒ A1 A2 . . . An =⇒ a1 a2 . . . an adică w ∈ L. În concluzie, w ∈ L ∩ Ri .
”⊇”: Fie w = a1 a2 . . . an ∈ L ∩ Ri .
Din a1 a2 . . . an ∈ Ri , fie qi = δ(q0 , a1 a2 . . . aj ), (1 ≤ j ≤ n − 1). În plus,
si = δ(q0 , a1 a2 . . . an ). Cum G este o gramatică independentă de context ı̂n FNC, aranjăm

derivarea S =⇒ a1 a2 . . . an sub forma
∗ ∗
S =⇒ A1 A2 . . . An =⇒ a1 a2 . . . an

Din această derivare şi Aserţiunile 1 şi 2 se poate deduce derivarea ı̂n gramatica G1 :
∗ ∗
S1 = (S, q0 , si ) =⇒ (A1 , q0 , q1 )(A2 , q1 , q2 ) . . . (An , qn−1 , si ) =⇒
∗ ∗
=⇒ (a1 , q0 , q1 )(a2 , q1 , q2 ) . . . (an , qn−1 , si ) =⇒ a1 a2 . . . an = w. q.e.d.
Propoziţia 6.5 Dacă L ∈ L2 şi R ∈ L3 atunci L \ R ∈ L2 .
Demonstraţie: Folosim egalitatea (de mulţimi) L \ R = L ∩ R. Cum R este limbaj regulat,
ı̂n Capitolul 4 am demonstrat că şi R este regulat. Cu Teorema 6.8 se obţine deci că L \ R
este independent de context. q.e.d.
6.5. TEOREMA U V W XY ŞI APLICAŢII 131

Exemplul 6.17 Să considerăm limbajul L = {ak bk | k ≥ 1} generat de gramatica de


producţii P = {S −→ AC|AB, A −→ a, B −→ b, C −→ SB},
şi automatul cu diagrama de tranziţie
  b -

JJ
^
a q0 q1
-
?  b 

având τ (M ) = R.
Să construim o gramatică pentru limbajul L ∩ R.
Pentru uşurinţa scrierii, vom nota
Sij ≡ (S, qi , qj ), Aij ≡ (A, qi , qj ), Bij ≡ (B, qi , qj )
Cij ≡ (C, qi , qj ), Xij ≡ (a, qi , qj ), Yij ≡ (b, qi , qj )
Folosind construcţia din demonstraţia Teoremei 6.8:
−→ A00 C00 |A01 C01


 S 00
 S −→ A C |A C

S −→ AC induce producţiile  01 00 01 01 11

 10
 S −→ A C
10 00 |A 11 C10
S11 −→ A10 C01 |A11 C11

S00 −→ A00 B00 |A01 B10





 S −→ A B |A B

01 00 01 01 11
S −→ AB induce producţiile


 S 10 −→ A 10 B00 |A 11 B10
S11 −→ A10 B01 |A11 B11

C00 −→ S00 B00 |S01 B01





 C −→ S B |S B

C −→ SB induce producţiile  00 00 01 01 11

 C 10 −→ S 10 B00 |S11 B10
C −→ S 10 B01 |S11 B11

( 11
A00 −→ X00 , A01 −→ X01
Lui A −→ a ı̂i corespund
A10 −→ X10 , A11 −→ X11
(
B00 −→ Y00 , B01 −→ Y01
iar pentru B −→ b avem
B −→ Y10 , B11 −→ Y11
 10
 X00 −→ a (dată de
 δ(q0 , a) = q0 ),
Ultimele reguli din P1 sunt Y01 −→ b (dată de δ(q0 , b) = q1 )
Y10 −→ b (pentru


δ(q1 , b) = q0 )
Gramatica G1 astfel formată are 24 neterminale şi 35 producţii; este evident, foarte
dificil de folosit sub această formă. Aplicând algoritmul de eliminare a simbolurilor neuti-
lizabile se obţine o gramatică mai simplă, cu 10 neterminale, S01 simbol de start, producţii
S01 −→ A00 B01 |A00 C01 , S00 −→ A00 C00 , A00 −→ X00 , B01 −→ Y01 ,
B10 −→ Y10 , C00 −→ S01 B10 , C01 −→ S00 B01 , X00 −→ a, Y01 −→ b, Y10 −→ b.
Eliminând redenumirile şi rebotezând din nou neterminalele, se ajunge la o gramatică
ı̂n FNC, cu producţiile
{S −→ AB|AC, A −→ a, B −→ b, C −→ S 0 B S 0 −→ AD, D −→ SB}
132 CAPITOLUL 6. GRAMATICI INDEPENDENTE DE CONTEXT

sau – după eliminarea unor producţii cu Lema 6.7, rămâne un singur neterminal S şi
regulile {S −→ ab|aaSbb}.

Teorema 6.9 L2 este ı̂nchisă la aplicaţiile gsm şi translatările finite.

Demonstraţie: Fie M = (Q, Vi , Ve , δ, q0 , F ) un gsm şi L ⊆ Vi∗ un limbaj independent de


context. Există atunci o gramatică G = (VN , VT , S, P ) ı̂n FNC cu L(G) = L.
Definim VN 0 = (Q × VN × Q) ∪ {S 0 }, VT 0 = VT şi P 0 construit astfel:
i. ∀ q ∈ F, S 0 −→ [q0 , S, q] ∈ P 0 ;
ii. ∀ A −→ BC ∈ P, ∀ p, q, r ∈ Q, [p, A, q] −→ [p, B, r][r, C, q] ∈ P 0 ;
iii. ∀ A −→ a ∈ P, ∀ (p, w) ∈ δ(q, a), [q, A, p] −→ w ∈ P 0 .
Gramatica G0 = (VN 0 , VT 0 , S 0 , P 0 ) este independentă de context; egalitatea L(G0 ) =
M (L) se demonstrează similar ca la Teorema 6.8.
Dacă M este un translator finit, atunci se adaugă regula:
iv. ∀ (p, w) ∈ δ(q, ), ∀ A ∈ VN , ∀ r ∈ Q, [q, A, r] −→ w[p, A, r] ∈ P 0 . q.e.d.
Înafară de aceste proprietăţi de ı̂nchidere ale limbajelor independente de context –
care completează rezultatele din Capitolele 4 şi 5, tot din Teorema 6.5 pot fi deduse unele
proprietăţi de decidabilitate, cum ar fi:

• Verificarea dacă un limbaj nu este independent de context, bazată pe construcţii


exemplificate de Exemplele 6.15 şi 6.16.

• Verificarea dacă un limbaj independent de context este finit sau nu. Se poate con-
strui un algoritm similar celui dat ı̂n Capitolul 2 pentru limbaje regulate, bazat de o
consecinţă a Teoremei Bar-Hillel (care dă limite mai stricte decât Teorema uvwxy)

Propoziţia 6.6 Un limbaj independent de context L este infinit dacă şi numai dacă

∃α∈L cu p < |α| ≤ p + q

Demonstraţia este analogă cu cea de la Propoziţia 2.1 şi o lăsăm ca exerciţiu. q.e.d.

6.6 Exerciţii
Exerciţiul 6.1 Câţi arbori diferiţi se pot construi cu nodurile a, b, c ?

Exerciţiul 6.2 În gramatica de producţii


A −→ a|aBB, B −→ b|bCA, C −→ c|cAB
având simbol de start A, să se construiască un arbore de derivare pentru cuvântul (abc)3 .
6.6. EXERCIŢII 133

Exerciţiul 6.3 În gramatica de producţii S −→ SS|a, câţi arbori de derivare distincţi se
pot construi pentru cuvântul a30 ?

Exerciţiul 6.4 Pentru gramatica din Exemplul 6.4, care este numărul total de arbori de
derivare care se pot construi pentru cuvântul abba ?

Exerciţiul 6.5 Să se arate că orice gramatică care conţine printre producţiile sale regula
S −→ SS, este o gramatică ambiguă.

Exerciţiul 6.6 Fie gramatica de producţii S −→ aSa|aS|c. Câte derivări distincte există
pentru cuvântul am can ?

Exerciţiul 6.7 Să se arate că gramatica de producţii S −→ S + S|a este ambiguă. Să se
construiască o gramatică neambiguă echivalentă.

Exerciţiul 6.8 Să se construiască o gramatică pentru limbajul


L = {ai bj ck | i = j sau j = k, i, j, k ≥ 1}
şi să se arate că această gramatică este ambiguă.

Exerciţiul 6.9 Gramatica din Exemplul 6.3 nu este ambiguă. Găsiţi o justificare a aces-
tei afirmaţii.

Exerciţiul 6.10 Fie gramatica de producţii


P = {S −→ aB|bA, A −→ a|aS|bAA, B −→ b|bS|aBB}
Pentru cuvântul w = a3 b2 ab3 a să se construiască toate derivările stângi (drepte).

Exerciţiul 6.11 Să se elimine simbolurile neutilizabile din gramaticile de producţii


a) P1 = {S −→ AA|CA, A −→ a, B −→ BC|AB, C −→ aB|b};
b) P2 = {S −→ AB|a, A −→ bB|cC, B −→ SA|A, C −→ aA|bB|S};
c) P3 = {S −→ SS|AAa, A −→ aAB|aS|b}.

Exerciţiul 6.12 Să se decidă dacă limbajul generat de gramaticile următoare este nevid:
a) P1 = {S −→ AS|A, A −→ aB|bA};
b) P2 = {S −→ ABC, A −→ BB|, B −→ CC|a, C −→ AA|b}.

Exerciţiul 6.13 Să se elimine -producţiile din gramaticile de producţii


P1 = {S −→ ABC, A −→ BB|, B −→ CC|a, C −→ AA|b}
P2 = {S −→ aSb|bSa|SS|}

Exerciţiul 6.14 Să se construiască o gramatică independentă de context proprie echiva-


lentă cu gramatica de producţii
P = {S −→ A|B, A −→ C|D, B −→ D|E, C −→ S|a|, D −→ S|b, E −→ S|c|}.
134 CAPITOLUL 6. GRAMATICI INDEPENDENTE DE CONTEXT

Exerciţiul 6.15 Să se construiască gramatici ı̂n FNC pentru limbajele:


L1 = {w | w ∈ {a, b}∗ , |w|a = 2|w|b }, L2 = {ai bi+j cj | i, j ≥ 1}.
n
Exerciţiul 6.16 Fie G o gramatică ı̂n FNC şi S =⇒ α o derivare ı̂n această gramatică.
Cât este |α| ?
Exerciţiul 6.17 Să se elimine recursivitatea la stânga ı̂n gramaticile de producţii:
P1 = {E −→ E + T |T, T −→ T ∗ F |F, F −→ (E)|a};
P2 = {S −→ aSb|bSa|SS|ab|ba}.
Exerciţiul 6.18 Să se aplice Lema 6.7 pentru eliminarea primei producţii din gramatica
de reguli P = {S −→ SS|a}.
Exerciţiul 6.19 Să se aducă la Forma Normală Greibach gramaticile de producţii:
P1 = {S −→ AA|a, A −→ SS|b}, P2 = {S −→ AaA|b, A −→ SbS|a}.
Exerciţiul 6.20 Fie G o gramatică ı̂n F N G şi w ∈ L(G), |w| = n. Cât este lungimea

derivării S =⇒ w ?
Exerciţiul 6.21 Să se arate că orice gramatică independentă de context G cu  6∈ L(G)
este echivalentă cu o gramatică având numai reguli de forma
A −→ aBC, A −→ aB, A −→ a (A, B, C ∈ VN , a ∈ VT )
Exerciţiul 6.22 Să se aplice Lema lui Ogden pentru gramatica de producţii P1 = {S −→
AA, A −→ SS|b} şi cuvântul α = abbbaaaab (s-au subliniat poziţiile marcate).
Exerciţiul 6.23 Să se arate că limbajele
2 n
L1 = {an | n ≥ 1}, L2 = {a2 | n ≥ 0}, L3 = {an bm an bm | n, m ≥ 1}
nu sunt independente de context.
Exerciţiul 6.24 Să se construiască un algoritm care să testeze dacă limbajul generat de
o gramatică independentă de context este vid sau nu.
Exerciţiul 6.25 Fie limbajul L = {w | w ∈ {a, b}∗ , |w|a = |w|b } şi R acceptat de
automatul cu diagrama de tranziţie




 -

q0 a - q1
b- b
?
 

?

Să se construiască o gramatică pentru limbajul L ∩ R.


Exerciţiul 6.26 Să se cerceteze dacă limbajul generat de gramatica de producţii
P = {S −→ SB|A, A −→ a|aB, B −→ SB|BB}
este finit sau nu.
Capitolul 7

L1 şi automate liniar mărginite

7.1 Gramatici ”monotone” şi gramatici ”dependente


de context”
După cum am văzut ı̂n clasificarea Chomsky (Capitolul 3), un limbaj dependent de context
este generat de o gramatică ale cărei producţii sunt de forma α −→ β cu |α| ≤ |β|. Singura
excepţie o constituie eventual producţia S −→ ; ı̂n acest caz S nu apare ı̂n membrul drept
al nici unei producţii.
Să considerăm o astfel de gramatică, dar fără producţia S −→ ; datorită restricţiei
|α| ≤ |β| verificată de toate producţiile α −→ β, ea se numeşte gramatică monotonă.
Cum regula S −→  nu se aplică decât ı̂n eventualitatea  ∈ L(G) – şi atunci, numai ı̂n

derivarea S =⇒ , ı̂n continuare vom lucra numai cu gramatici monotone.

Definiţia 7.1 Se numeşte ponderea unei gramatici G = (VN , VT , S, P ) valoarea

pond(G) = max{|β| | α −→ β ∈ P }.

Teorema 7.1 Pentru orice gramatică monotonă G = (VN , VT , S, P ) există o gramatică


monotonă echivalentă, de pondere cel mult 2.

Demonstraţie: Fie G = (VN , VT , S, P ) o gramatică monotonă. Putem considera (Lema


4.1) că singurele producţii care conţin terminale sunt de forma A −→ a. Aceste producţii
se păstrează şi ı̂n noua gramatică.
Să presupunem că P conţine reguli de forma α −→ β cu |β| > 2 (altfel G este chiar
gramatica căutată).
Fie A1 A2 . . . Am −→ B1 B2 . . . Bn ∈ P o astfel de regulă, cu m ≤ n, n > 2, Ai , Bj ∈
VN (1 ≤ i ≤ m, 1 ≤ j ≤ n). (1)

135
136 CAPITOLUL 7. L1 ŞI AUTOMATE LINIAR MĂRGINITE

Introducem n − 1 neterminale noi C1 , C2 , . . . Cn−1 şi ı̂nlocuim producţia considerată


cu setul de reguli



 A1 −→ C1 ,
C A −→ B1 C2 ,


 1 2


 .........



Cm−1 Am −→ Bm−1 Cm , (2)
−→




 C m B C
m m+1 ,
. . . . . . . . .





n−1 −→ Bn−1 Bn
 C

Generăm câte un set de neterminale Ci şi de producţii de tipul (2) pentru fiecare
regulă de tipul (1); fie VN 0 noua mulţime de neterminale (formată din VN la care se
adaugă neterminalele nou introduse) şi P 0 mulţimea de reguli din P ı̂n care fiecare regulă
de tip (1) este ı̂nlocuită cu setul de producţii (2).
Rămâne de arătat că noua gramatică G0 = (VN 0 , VT , S, P 0 ) este echivalentă cu grama-
tica G.

L(G) ⊆ L(G0 ) : Fie w ∈ L(G); deci ı̂n gramatica G există derivarea S =⇒ w.
Considerăm un pas αi =⇒ αi+1 al acestei derivări. Dacă s-a aplicat o producţie din P ∩P 0 ,
atunci acest pas rămâne nemodificat şi ı̂n G0 . Dacă s-a aplicat o producţie de tipul (1),

atunci αi = β1 A1 A2 . . . Am β2 şi αi+1 = β1 B1 B2 . . . Bn β2 , iar αi =⇒ αi+1 (derivare ı̂n G0 ),
aplicând producţiile din (2) (care se află ı̂n P 0 \ P ).

L(G0 ) ⊆ L(G) : Fie w ∈ L(G0 ); deci ı̂n gramatica G0 există derivarea S =⇒ w. În
această derivare lăsăm nemodificaţi toţi paşii care folosesc producţii din P . Fie αi =⇒ αi+1
prima generare directă care nu foloseşte o producţie din P ; atunci acea producţie utilizată
nu poate fi decât de forma A1 −→ C1 , unde A1 ∈ VN , C1 ∈ VN 0 \ VN (αi conţine doar
elemente din VN ∪ VT , iar αi+1 are şi elemente din VN 0 \ VN ; singura regulă care poate
realiza acest lucru este de această formă). Deci αi = β1 A1 β2 , αi+1 = β1 C1 β2 . Primele
caractere din β2 sunt neterminale (altfel derivarea se blochează). În plus – pentru că se
ajunge la w ∈ VT∗ – toate neterminalele trebuie să dispară, deci ı̂n derivare se folosesc toate
producţiile din (2). Aceste producţii pot fi grupate astfel ı̂ncât să fie aplicate consecutiv.
Rezultă că se poate scrie β2 = A2 . . . Am β3 şi deci

αi = β1 A1 β2 =⇒ β1 C1 A2 . . . Am β3 =⇒ β1 B1 B2 . . . Bn β3
ı̂n gramatica G0 . Această derivare poate fi comprimată ı̂n G ı̂ntr-un singur pas:
β1 A1 A2 . . . β3 =⇒ β1 B1 B2 . . . Bn β3 .

Aplicăm acest raţionament ı̂n derivarea S =⇒ w din G0 şi obţinem o derivare ı̂n

G : S =⇒ w. Deci w ∈ L(G). q.e.d.
În noua gramatică G0 pot fi eliminate regulile de forma A −→ B printr-un algoritm
de eliminare a redenumirilor similar celui din Capitolul 6. Deci putem considera că orice
7.1. GRAMATICI ”MONOTONE” ŞI GRAMATICI ”DEPENDENTE DE CONTEXT”137

limbaj L ∈ L1 cu  6∈ L poate fi generat de o gramatică având numai producţii de forma

A −→ a, A −→ BC, AB −→ CD.

Aceasta este Forma Normală Kuroda a gramaticilor dependente de context1 .


Definiţia 7.2 O producţie α1 Aα2 −→ α1 βα2 se numeşte ”senzitivă de context (α1 , α2 )”.
Detaliind, ”A se rescrie β ı̂n contextul (α1 , α2 )”.

Observaţia 7.1 Producţiile de forma A −→ α sunt senzitive de context (, ); de aceea,
aceste reguli se numesc ”independente de context”.

Teorema 7.2 Un limbaj L ∈ L1 poate fi generat de o gramatică care are toate producţiile
senzitive de context.

Demonstraţie: Fie G = (VN , VT , S, P ) o gramatică de tip 1 cu L(G) = L \ {}. Fără a


micşora generalitatea, putem presupune că G este ı̂n forma normală Kuroda. Deoarece
toate producţiile de tipul A −→ a, A −→ BC sunt senzitive de context (, ), ele vor
rămâne nemodificate. Ne interesează numai regulile din P de forma AB −→ CD. Acestea
pot fi clasificate ı̂n:
1. AB −→ AD; sunt reguli senzitive de context (A, );

2. AB −→ CB; sunt reguli senzitive de context (, B).

3. AB −→ CD cu A 6= C, B 6= D. Aceste reguli nu sunt senzitive de context.


Pentru a demonstra teorema, este suficient să arătăm o modalitate de a ı̂nlocui producţiile
de tipul (3) cu producţii senzitive de context.
Fie AB −→ CD ∈ P o producţie de tipul (3). Introducem două neterminale noi
E, F 6∈ VN şi ı̂nlocuim producţia cu

(i) AB −→ EB, (ii) EB −→ EF, (iii) EF −→ CF, (iv) CF −→ CD

Fie G0 = (VN 0 , VT , S, P 0 ) noua gramatică obţinută din G prin ı̂nlocuirea tuturor


producţiilor de tipul (3) cu seturi de reguli de această formă. Demonstrarea egalităţii
L(G) = L(G0 ) se face similar cu demonstraţia Teoremei 7.1.
Dacă  ∈ L, atunci ı̂n gramatica G0 se introduce un simbol nou de start S 0 , iar ı̂n P 0
se adaugă producţiile S 0 −→ S|, ambele de context (, ). q.e.d.
Ca o consecinţă a Teoremei 7.2, clasa L1 este numită clasa limbajelor senzitive (de-
pendente) de context.
1
Forma normală Chomsky este – evident – un caz particular al Formei Normale Kuroda.
138 CAPITOLUL 7. L1 ŞI AUTOMATE LINIAR MĂRGINITE

Exemplul 7.1 Să reluăm limbajul L = {an bn cn | n ≥ 1} din Exemplul 3.11 (Capitolul
3). El a fost generat de gramatica de producţii
1. S −→ aSBC, 2. S −→ aBC, 3. CB −→ BC,
4. aB −→ ab, 5. bB −→ bb, 6. bC −→ bc, 7. cC −→ cc
Gramatica este monotonă. Dintre producţiile sale, numai a treia producţie nu este
senzitivă de context. Conform construcţiei din demonstraţia Deoremei 7.2, o vom ı̂nlocui
cu setul de reguli {CB −→ CD, CD −→ ED, ED −→ BD, BD −→ BC}, unde
D, E sunt neterminale noi. Celelalte reguli, deşi nu sunt ı̂n forma normală Kuroda, pot
fi păstrate.
Deci L poate fi generat de gramatica G0 = (VN 0 , VT , S, P 0 ) cu VN 0 = {S, B, C, D, E},
VT = {a, b, c} şi producţiile
S −→ aSBC de context (, ) S −→ aBC de context (, )
aB −→ ab de context (a, ) bB −→ bb de context (b, )
bC −→ bc de context (b, ) cC −→ cc de context (c, )
CB −→ CD de context (C, ) CD −→ ED de context (, D)
ED −→ BD de context (, D) BD −→ BC de context (B, )
Dacă dorim să transformăm gramatica iniţială ı̂ntr-o gramatică ı̂n forma normală
Kuroda, vom proceda ı̂n felul următor:

• În prima fază introducem trei neterminale noi X, Y, Z şi aducem producţiile la forma

1. S −→ XSBC, 4. XB −→ XY, 7. ZC −→ ZZ,


2. S −→ XBC, 5. Y B −→ Y Y, 8. X −→ a,
3. CB −→ BC, 6. Y C −→ Y Z, 9. Y −→ b,
10. Z −→ c

unde ultimele trei producţii (8, 9, 10) sunt noi.

• Mai trebuie modificate primele două reguli (care nu satisfac condiţiile de formă
normală). Pentru ele sunt suficiente două neterminale noi D, E; vom ı̂nlocui
- prima regulă S −→ XSBC cu S −→ XD, D −→ SE, E −→ BC;
- a doua regulă S −→ XBC cu S −→ XE (de remarcat că este suficientă o singură
producţie).

Pe baza faptului că orice gramatică monotonă generează un limbaj senzitiv de context
putem demonstra următorul rezultat:
7.1. GRAMATICI ”MONOTONE” ŞI GRAMATICI ”DEPENDENTE DE CONTEXT”139

Teorema 7.3 Orice limbaj din L1 este recursiv.

Demonstraţie: Un limbaj L ⊆ V ∗ este recursiv dacă există un algoritm care să decidă –
pentru orice w ∈ V ∗ – dacă w ∈ L sau nu.
Algoritmul 7.1.:
Intrare: O gramatică G = (VN , VT , S, P ) monotonă, w ∈ VT∗ , |w| = n;
Ieşire: DA - dacă w ∈ L(G), NU - altfel.
Algoritm:

1. T0 = {S}, i := 1;

2. Ti := Ti−1 ∪ {u | |u| ≤ n, ∃ v ∈ Ti−1 , v =⇒ u};

3. Dacă Ti 6= Ti−1 atunci i := i + 1 şi salt la P 2;

4. Dacă w ∈ Ti ∩ VT∗ atunci DA altfel NU.

Se poate demonstra uşor – similar demonstraţiilor Algoritmilor 6.2 şi 6.3 din Capitolul
6, secţiunea 3: h i
n
[w ∈ Ti ∩ VT∗ ] ⇐⇒ ∃n (n ≤ i) S =⇒ w .

Algoritmul 7.1. funcţionează şi pentru cazul  ∈ L(G); ı̂n această situaţie  ∈ V1 . q.e.d.

Observaţia 7.2 Este esenţial faptul că G este gramatică monotonă. De exemplu, dacă
se ia gramatica independentă de context de producţii
S −→ aSbS|bSaS|
care generează limbajul L = {w | w ∈ {a, b}∗ , |w|a = |w|b }, cuvântul ab ∈ L(G) nu va fi
recunoscut: pentru |ab| = 2 = n Algoritmul 7.1. dă T0 = {S}, T1 = {S, }, T2 = T1 şi
ab 6∈ T2 ∩ VT∗ = {}.
Pentru o aplicare corectă a Algoritmului 7.1. va trebui ı̂ntâi să eliminăm -producţiile
din gramatica G (cu Algoritmul 6.5), obţinând o gramatică G0 cu regulile
S 0 −→ |S, S −→ aSbS|bSaS|aSb|bSa|abS|baS|ab|ba.
În acest caz, T0 = {S 0 }, T1 = {S 0 , S, }, T2 = {S 0 , S, , ab, ba}, T3 = T2 . La pasul 4 al
Algoritmului 7.1. rezultă mulţimea T3 ∩ VT∗ = {, ab, ba}, care conţine cuvântul ab.

Teorema 7.3 arată că orice limbaj senzitiv de context este recursiv. Reciproca nu este ı̂nsă
adevărată: există limbaje recursive care nu sunt ı̂n L1 . O demonstraţie a acestei afirmaţii
va fi dată ı̂n Capitolul următor.
140 CAPITOLUL 7. L1 ŞI AUTOMATE LINIAR MĂRGINITE

7.2 Automate liniar mărginite


O metodă de recunoaştere a limbajelor senzitive de context este automatul liniar mărginit
(LBA - Linear Bounded Automaton).

Definiţia 7.3 Un automat liniar mărginit (LBA) este o structură


M = (Q, Σ, Γ, δ, q0 , $s , $d , F ) unde:

• Q este o mulţime finită nevidă de stări;

• Γ este o mulţime finită de simboluri numită alfabet de lucru;

• Σ (Σ ⊂ Γ) este alfabetul de intrare;

• q0 ∈ Q este starea iniţială a automatului;

• $s , $d ∈ Σ sunt două caractere speciale numite marcatori stânga/dreapta;

• F ⊆ Q (F 6= ∅) este mulţimea stărilor finale;

• δ : Q × Γ −→ 2Q×Γ×{s,d} este funcţia de tranziţie, funcţie parţial definită, cu propri-


etatea (∀q ∈ Q) [(δ(q, $s ) = {(q, $s , d)}, δ(q, $d ) = {(q, $d , s)}] .

$s ... a ... $d
6
Q

Un automat liniar mărginit poate fi privit ca o memorie de tipul unei benzi finite, pe
care sunt scrise elemente din Γ. Un cap de citire este poziţionat ı̂n dreptul unui caracter
scris pe bandă. La o mişcare (descrisă de funcţia δ), acest cap rescrie un caracter peste
caracterul curent, după care se deplasează cu o poziţie spre dreapta sau stânga. Capul
de citire nu poate depăşi marcatorii de margine ai benzii ($s , $d ).
Pentru a detalia funcţionarea unui LBA folosim descrieri instantanee (DI). O DI
este o configuraţie de forma (q, α, Xβ) unde q ∈ Q, α, β ∈ Γ∗ , X ∈ Γ.
q este starea curentă a automatului, αXβ este conţinutul benzii, iar X este caracterul
aflat ı̂n dreptul capului de citire. Pe mulţimea configuraţiilor definim o relaţie binară `
(relaţie de tranziţie), ı̂n modul următor:

1. (q, αa, Xβ) ` (p, α, abβ) dacă (p, b, s) ∈ δ(q, X), a 6= $s ;

2. (q, α, Xβ) ` (p, αb, β) dacă (p, b, d) ∈ δ(q, X), X 6= $d .


7.2. AUTOMATE LINIAR MĂRGINITE 141

De remarcat că pentu a = $s capul de citire nu se poate deplasa spre stânga, iar pentru
X = $d , capul de citire nu se poate deplasa spre dreapta.

Fie ` ı̂nchiderea reflexivă şi tranzitivă a relaţiei `. Putem defini acum limbajul ac-
ceptat de un automat liniar mărginit M prin:

τ (M ) = {w | w ∈ (Σ \ {$s , $d })∗ , (q0 , $s , w$d ) ` (q, α, β), q ∈ F }
Teorema 7.4 LBA este o metodă de recunoaştere.
Demonstraţie: Plecând de la un automat liniar mărginit M = (Q, Σ, Γ, δ, q0 , $s , $d , F ) cu
τ (M ) = L, construim o metodă de recunoaştere Mr (L) = (SR, AX, X) bazată pe sistemul
de rescriere SR = (W, P ). Componentele lui Mr sunt definite astfel:
1. W = Γ ∪ Q; presupunem – fără a micşora generalitatea – că Q ∩ Γ = ∅;
2. X = Σ;
3. AX = {$s q$d | q ∈ F };
4. P = {(Xqa, pXb) | (p, b, s) ∈ δ(q, a), X ∈ Γ \ {$s }} ∪ {(qa, pb) | (p, b, d) ∈ δ(q, a)} ∪
{(aq, q), (qa, q) | q ∈ F, a ∈ Σ \ {$s , $d }} ∪ {($s , $s q0 )}.
Se arată uşor (prin argumente similare teoremelor analoge referitoare la automatele finite
şi automatele stivă) că

Mr (L) = {w | w ∈ Σ∗ , ∃q ∈ F, w =⇒ $s αqβ$d , αβ ∈ Σ∗ , |αβ| = |w|} = τ (M )
Exemplul 7.2 Să construim un automat liniar mărginit care să accepte limbajul
2
L = {an | n ≥ 1}
Construcţia se bazează pe formula n2 = 1 + 3 + 5 + . . . + (2n − 1).
Automatul M va avea:
Q = {q0 , q1 , q2 , q3 , q4 , q5 , q6 , qf }, Σ = {a, $s , $d }, Γ = {a, b, c, x, $s , $d },
iar funcţia de tranziţie δ definită prin tabelul
δ a b c x $s $d
q0 (q1 , b, d) − − − − −
q1 (q2 , c, d) (q1 , b, d) − − − −
q2 (q3 , c, s) − − − − −
q3 − (q3 , b, s) (q3 , c, s) (q4 , x, d) (q4 , $s , d) −
q4 (q6 , a, s) (q5 , x, d) (q4 , c, d) − − (qf , $d , s)
q5 (q3 , c, s) (q5 , b, d) (q5 , c, d) − − −
q6 − (q6 , x, s) (q6 , b, s) (q1 , x, d) − −
q0 − − − − − −
142 CAPITOLUL 7. L1 ŞI AUTOMATE LINIAR MĂRGINITE

Definiţia lui δ fiind deterministă, s-a simplificat notaţia prin ı̂nlocuirea mulţimii cu
elementul pe care ı̂l conţine. De asemenea este posibilă introducerea unei stări de eroare
qe care să completeze spaţiile libere din tabel.
Rolurile celor opt stări sunt:

• q0 este starea iniţială; automatul merge spre dreapta şi transformă primul 0 a0 ı̂n 0 b0 .

• În starea q1 automatul se deplasează spre dreapta şi găseşte primul 0 a0 pe care ı̂l
transformă in 0 c0 .

• q2 are rolul de a transforma al doilea 0 a0 ı̂n 0 c0 şi să trecă ı̂n starea q3 . În acest
moment au fost marcate două caractere care fac trecerea de la 2i − 1 la 2i + 1 din
suma lui n2 ; mai departe trebuie găsite şi ı̂nlocuite următoarele 2i − 1 caractere 0 a0 .

• În starea q3 automatul parcurge banda de intrare spre stânga, până la primul caracter
diferit de 0 b0 sau 0 c0 ; atunci trece ı̂n starea q4 .

• Suntem ı̂n starea q4 . Automatul merge spre dreapta şi ı̂nlocuieşte primul 0 b0 cu 0 x0
(trecând ı̂n starea q5 ). Dacă ı̂ntâlneşte un caracter 0 a0 ı̂nseamnă că nu mai sunt
0 0
b -uri şi se trece ı̂n starea q6 . Dacă se ajunge la delimitator, cuvântul este acceptat.

• În starea q5 automatul merge spre dreapta până la primul 0 a0 pe care ı̂l ı̂nlocuieşte
cu 0 c0 (şi revine la starea q3 ).

• Starea q6 este destinată renotării caracterelor pentru a reı̂ncepe un nou ciclu. Au-
tomatul se deplasează spre stânga şi ı̂nlocuieşte 0 b0 -urile cu 0 x0 (pentru a le neutraliza)
şi 0 c0 -urile cu 0 b0 (pentru a ”bifa” ulterior acelaşi număr de caractere 0 a0 , ı̂n trecerea
de la 2i − 1 la 2i + 1). La ı̂ntâlnirea primului caracter 0 x0 , automatul reia ciclul
trecând ı̂n starea q1 .

Să luăm de exemplu cuvântul de intrare a9 . Automatul M va funcţiona ı̂n felul următor:
(q0 , $s , a9 $d ) ` (q1 , $s b, a8 $d ) ` (q2 , $s bc, a$d ) ` (q3 , $s b, cca6 $d ) ` (q3 , $s , bc2 a6 $d ) `
` (q3 , , $s c2 a6 $d ) ` (q4 , $s , bc2 a6 $d ) ` (q5 , $s x, c2 a6 $d ) ` (q5 , $s xc, ca6 $d ) `
` (q5 , $s xc2 , a6 $d ) ` (q3 , $s xc, c2 a5 $d ) ` (q3 , $s x, c3 a5 $d ) ` (q3 , $s , xc3 a5 $d ) `
` (q4 , $s x, c3 a5 $d ) ` (q4 , $s xc, c2 a5 $d ) ` (q4 , $s xc2 , ca5 $d ) ` (q4 , $s xc3 , a5 $d ) `
` (q6 , $s xc2 , ca5 $d ) ` (q6 , $s xc, cba5 $d ) ` (q6 , $s x, cb2 a5 $d ) ` (q4 , $s , xb3 a5 $d ) `
` (q1 , $s x, b3 a5 $d ) ` (q1 , $s xb, b2 a5 $d ) ` (q1 , $s xb2 , ba5 $d ) ` (q1 , $s xb3 , a5 $d ) `
` (q2 , $s xb3 c, a4 $d ) ` (q3 , $s xb3 , c2 a3 $d ) ` (q3 , $s xb2 , bc2 a3 $d ) ` (q3 , $s xb, b2 c2 a3 $d ) `

` (q2 , $s x, b3 c2 a3 $d ) ` (q2 , $s , xb3 c2 a3 $d ) ` (q4 , $s x, b3 c2 a3 $d ) ` (q5 , $s x2 , b2 c2 a3 $d ) `
∗ ∗
` (q5 , $s x2 b2 c2 , a3 $d ) ` (q3 , $s x2 b2 c, c2 a2 $d ) ` (q3 , $s x2 , b2 c3 a2 $d ) ` (q3 , $s x, xb2 c3 a2 $d )
7.2. AUTOMATE LINIAR MĂRGINITE 143

∗ ∗
` (q4 , $s x2 , b2 c3 a2 $d ) ` (q5 , $s x3 , bc3 a2 $d ) ` (q5 , $s x3 bc3 , a2 $d ) ` (q3 , $s x3 bc2 , c2 a$d ) `
∗ ∗
` (q3 , $s x2 , xbc4 a$d ) ` (q3 , $s x3 , bc4 a$d ) ` (q5 , $s x4 , c4 a$d ) ` (q5 , $s x4 c4 , a$d ) `
∗ ∗
` (q3 , $s x4 c3 , c2 $d ) ` (q3 , $s x3 , xc5 $d ) ` (q4 , $s x4 , c5 $d ) ` (q4 , $s x4 c5 , $d ) `
` (qf , $s x4 c4 , c$d )
deci cuvântul a9 este acceptat.
Pe baza formulei n2 = 1 + 3 + . . . + (2n − 1) se poate arăta echivalenţa
ak ∈ τ (M ) ⇐⇒ ∃ n [k = n2 ].
Următoarele două teoreme demonstrează faptul că automatele liniar mărginite sunt
metodele duale gramaticilor senzitive de context, ambele sisteme de rescriere definind ı̂n
mod complet clasa de limbaje L1 .
Teorema 7.5 Dacă L ∈ L1 şi  6∈ L, atunci există un automat liniar mărginit M cu
τ (M ) = L.
Demonstraţie: Dacă L ∈ L1 atunci există o gramatică ı̂n forma Normală Kuroda G =
(VN , VT , S, P ) cu L = L(G). Vom presupune  6∈ L (datorită modului de construcţie a
gramaticilor senzitive de context, modificările necesitate de posibila existenţă a cuvântului
vid ı̂n limbaj sunt minore şi nu afectează clasa L1 ). Un cuvânt w = a1 a2 . . . an ∈ VT+ este

ı̂n L dacă şi numai dacă S =⇒ w.
Vom construi un LBA ı̂n care banda este segmentată ı̂n două componente paralele:
ı̂n prima parte se află cuvântul $s w$d , iar pe a doua parte se simulează derivări ı̂n G,
plecând de la simbolul de start S.
Detaliind: fie i : αi −→ βi , (1 ≤ i ≤ |P |) producţiile gramaticii G. Avem
1. Q = {qi , q 0i | 1 ≤ i ≤ |P |} ∪ {q”i | 1 ≤ i ≤ |P |, |αi | < |βi |} ∪ {qX | X ∈
VN ∪ VT } ∪ {qo , qf , qr , qv }, unde q0 este starea iniţială, qf este starea finală, qr este
o stare de revenire iar qv este o stare de verificare;
2. Γ = {[a, X] | a ∈ VT , X ∈ VN ∪ VT ∪ {Z}} ∪ {[$s , $s ], [$c , $c ]}, unde Z 6∈ VN ∪ VT
este un simbol nou, iar $s , $d sunt cei doi delimitatori;
3. Σ = {[a, a] | a ∈ VT };
4. F = {qf };
5. Funcţia de transfer δ este definită:
(a) δ(q0 , [a, X]) = {(qi , [a, X], d) | αi = Xα0i } ∪ {(q0 , [a, X], d)] | a 6= $d };
Automatul este ı̂n starea iniţială şi capul de citire se deplasează spre dreapta.
Dacă există o producţie i : αi −→ βi ı̂n care αi ı̂ncepe cu X, automatul poate
trece ı̂n starea qi .
144 CAPITOLUL 7. L1 ŞI AUTOMATE LINIAR MĂRGINITE

(b) Automatul este ı̂n starea qi şi |αi | = |βi | = 1.


δ(qi , [a, X]) = {(q 0i , [a, X], s)}, ∀ a ∈ VT ∪ {$d }, X ∈ VN ∪ VT ∪ {$d };
δ(q 0i , [a, αi ]) = {(qr , [a, βi ], s)}, ∀ a ∈ VT .
(c) Automatul este ı̂n starea qi şi |αi | = |βi | = 2. Fie αi = AB, βi = CD.
δ(qi , [a, B]) = {(q 0i , [a, D], s)}, ∀ a ∈ VT ;
δ(q 0i , [a, A]) = {(qr , [a, C], s)}, ∀ a ∈ VT .
(d) Automatul este ı̂n starea qi şi |αi | < |βi |. Fie αi = A, βi = BC.
i. Dacă elementul curent pe bandă este [a, Z]:
δ(qi , [a, Z]) = {(q 0i , [a, C], s)}, ∀a ∈ VT ;
δ(q 0i , [a, A]) = {(qr , [a, B], s)}, ∀a ∈ VT .
ii. Dacă elementul curent pe bandă este [a, X] cu X ∈ VN ∪ VT :
δ(qi , [a, X]) = {(q”i , [a, X], s)}, a ∈ VT , X ∈ VN ∪ VT ;
δ(q”i , [a, A]) = {(q”i , [a, B], d)}, ∀a ∈ VT ;
δ(q”i , [a, X]) = {qX , [a, B], d)}, ∀a ∈ VT , X ∈ VN ∪ VT ;
δ(qX , [a, Y ]) = {(qY , [a, X], d)}, ∀a ∈ VT , X, Y ∈ VN ∪ VT ;
δ(qX , [a, Z]) = {(qr , [a, X], s)}, ∀a ∈ VT , X ∈ VN ∪ VT .
(e) δ(qr , [a, X]) = {(qr , [a, X], s)}, [a, X] 6= [$s , $s ];
Capul de citire se deplasează spre stânga până la primul element de pe bandă.
(f) δ(qr , [$s , $s ]) = {(q0 , [$s , $s ], d), (qv , [$s , $s ], d)};
Automatul trece ı̂n starea iniţială şi reia căutarea unei noi aplicări a unei
producţii, sau trece ı̂n starea qv şi se deplasează spre dreapta.
(g) δ(qv , [a, a]) = (qv , [a, a], d)}, ∀a ∈ VT ;
Se verifică dacă elementele de pe cele două componente ale benzii coincid.
(h) δ(qv , [$d , $d ]) = (qf , [$d , $d ], s).
Se ajunge ı̂n starea finală; cuvântul aflat pe prima componentă a benzii este
din L.
Se porneşte cu configuraţia iniţială (q0 , [$s , $s ], [a1 , S][a2 , Z] . . . [an , Z][$d , $d ]).
Automatul va opera ı̂n modul următor:
• Se alege nedeterminist o poziţie k (1 ≤ k ≤ n) astfel ca elementul aflat pe poziţia
k ı̂n a doua componentă a benzii să fie primul element al membrului stâng al unei
producţii. Fie αi −→ βi această producţie. Atunci automatul trece ı̂n starea qi
(definiţia (a)).
• Se ı̂nlocuieşte αi cu βi (definiţiile (b),(c),(d)), eventual deplasând spre dreapta
conţinutul componentei a doua a benzii (definiţia (d.ii)).
7.2. AUTOMATE LINIAR MĂRGINITE 145

• Procedeul se reia pentru o altă producţie (definiţiile (e),(f)).

• Se compară cuvântul rezultat pe a doua componentă cu cel de pe prima (definiţia


(g)). Dacă cele două cuvinte coincid (definiţia (h)), procesul se ı̂ncheie.
Pentru orice altă situaţie (nu se poate aplica nici o regulă, a doua componentă este
mai lungă decât prima, cele două cuvinte nu coincid) automatul se blochează.

Din acest algoritm reiese imediat că w ∈ L(M ) dacă şi numai dacă există o derivare

S =⇒ w ı̂n gramatica G, deci w ∈ L(G). q.e.d.

Teorema 7.6 Dacă M = (Q, Σ, Γ, δ, q0 , $s , $d , F ) este un LBA atunci τ (M ) ∈ L1 .

Demonstraţie: Fie L = τ (M ). Vom construi o gramatică monotonă G = (VN , VT , S, P )


care să genereze L \ {}. Vom avea:

• VN = {[a, q0 $s X], [a, q0 $s X$d ], [a, X], [a, qX], [a, $s qX], [a, q$s X], [a, $s qX$d ],
[a, q$s X$d ], [a, $s Xq$d ] | a ∈ Σ ∪ {}, X ∈ Γ, q0 , q ∈ Q} ∪ {S, S1 };

• VT = Σ;

• P conţine regulile de producţie (s-a notat a, b ∈ Σ \ {$s , $d }, X, Y, Z ∈ Γ, p, q ∈ Q):

1. S −→ [a, q0 $s a]S1 | [a, $s a$d ];


2. S1 −→ [a, a]S1 | [a, a$d ];
3. Dacă (p, $s , d) ∈ δ(q, $s ) atunci
[a, q$s X] −→ [a, $s pX], [a, q$s a$d ] −→ [a, $s pa$d ];
4. Dacă (p, Y, d) ∈ δ(q, X) atunci
[a, qX][b, Z] −→ [a, Y ][b, pZ], [a, $s qX][b, Z] −→ [a, $s Y ][b, pZ],
[a, $s qX$d ] −→ [a, $s Y p$d ];
5. Dacă (p, Y, s) ∈ δ(q, X) atunci
[a, $s qX$d ] −→ [a, p$s Y $d ], [a, $s qX] −→ [a, p$s Y ],
[b, Z][a, qX] −→ [b, pZ][a, Y ], [b, Z][a, qX$d ] −→ [b, pZ][a, Y $d ];
6. Dacă (p, $d , s) ∈ δ(q, $d ) atunci
[a, bq$d ] −→ [a, pb$d ], [a, $s Xq$d ] −→ [a, $s pX$d ];
7. Dacă q ∈ F, α, β ∈ Γ ∪ {} atunci
[a, αqβ] −→ a, b[a, α] −→ ba,
[a, α]b −→ ab, α ∈ Γ ∪ {$s }Γ{$d } ∪ {$s }Γ ∪ Γ{$d }.
146 CAPITOLUL 7. L1 ŞI AUTOMATE LINIAR MĂRGINITE

În prima fază, gramatica generează o secvenţă finită de perechi [a, X], unde prima compo-
nentă formează prin concatenare un cuvânt din VT+ . În continuare, pe a doua componentă
se simulează mişcările automatului. La sfârşit se ajunge la un cuvânt din L(G) numai
dacă pe a doua componentă rezultă un cuvânt identic cu cel de pe prima componentă.
De remarcat că  6∈ L(G), deoarece $s $d nu este o intrare pentru automatul liniar
mărginit M . q.e.d.

7.3 Exerciţii
Exerciţiul 7.1 Construiţi gramatici dependente de context pentru limbajele
L1 = {an+1 bn cn−1 | n ≥ 1},
L2 = {an bn c2n | n ≥ 1}
L3 = {an bm an bm | m, n ≥ 1}
L4 = {ww | w ∈ {a, b}+ }

Exerciţiul 7.2 Construiţi gramatici dependente de context pentru limbajele


L1 = {w | w ∈ {a, b, c}+ , |w|a = |w|b = |w|c },
L2 = {w | w ∈ {a, b, c}+ , |w|a = |w|b < |w|c }
n
L3 = {a2 | n ≥ 0}
2
L4 = {an | n ≥ 1}

Exerciţiul 7.3 Să se arate că L1 este ı̂nchisă la operaţia de oglindire.

Exerciţiul 7.4 Construiţi automate liniar mărginite pentru limbajele


L1 = {ap | p număr prim };
L2 = {ap | p nu este număr prim };
L3 = {ww | w ∈ {a, b}+ ;

Exemplul 7.3 Completaţi demonstraţia din Exemplul 7.2

Exerciţiul 7.5 Construiţi automate liniar mărginite pentru limbajele din Exerciţiile 7.1
şi 7.2.

Exerciţiul 7.6 Să se arate că orice LBA este echivalent cu un LBA ı̂n care |F | = 1.
Capitolul 8

Limbaje de tip 0 şi maşini Turing

Maşinile Turing constituie un model matematic simplu al calculatorului. În ciuda sim-
plităţii lor ı̂nsă, ele modelează capacitatea generală de calcul a acestuia. Studiul unei
maşini Turing poate fi făcut atât din punctul de vedere al clasei de limbaje pe care le
defineşte (mulţimile recursiv numărabile, sau pe scurt – L0 ) cât şi din cel al clasei de
funcţii ı̂ntregi pe care le calculează (funcţiile parţial recursive).
Noţiunea intuitivă de algoritm sau procedură efectivă a apărut ı̂n matematică de multă
vreme. Ştim că există algoritmi efectivi de determinare dacă mulţimea acceptată de un
AF este vidă sau finită (Propoziţia 2.1. Capitolul 2). Există ı̂nsă şi altfel de ı̂ntrebări,
la care răspunsul este negativ (de exemplu, nu există nici un algoritm care să determine
dacă şi complementara unui limbaj independent de context este vidă, deşi pentru L2 o
asemenea procedură efectivă există).
La ı̂nceputul sec.XX, matematicianul David Hilbert a pus problema găsirii unui al-
goritm care să determine valoarea de adevăr sau fals a unei propoziţii matematice1 . În
particular, el a cercetat dacă există o procedură pentru a determina dacă o formulă arbi-
trară din calculul predicatelor de ordinul I, aplicată la Z, este adevărată sau nu.
În 1931 Kurt Gödel publică faimoasa sa teoremă de incompletitudine, care demon-
strează că o astfel de procedură efectivă nu există. El a construit o formulă ı̂n calculul
predicatelor aplicat lui Z, a cărei valoare de adevăr nu poate nici afirmat nici negat
ı̂n interiorul sistemului său logic. Formalizarea acestui argument şi deci formalizarea şi
clarificarea noţiunii intuitive de procedură efectivă de calcul este una din cele mai mari
realizări teoretice secolului XX.
Odată formalizată noţiunea de procedură efectivă, s-a arătat că nu există proceduri
efective de calcul pentru multe funcţii. Deşi existenţa unor funcţii necalculabile nu sur-
prinde, ceea ce a surprins a fost existenţa de funcţii necalculabile cu o mare pondere ı̂n
1
Problema este cunoscută sub numele de SAT .

147
148 CAPITOLUL 8. LIMBAJE DE TIP 0 ŞI MAŞINI TURING

matematică, computer science sau ı̂n alte discipline2


Astăzi, maşinile Turing au devenit o formalizare acceptabilă a procedurilor efective.
Evident, nu se poate demonstra că un model de maşină Turing este echivalent cu noţiunea
intuitivă de calculator, dar există argumente ı̂n sprijinul unei asemenea aserţiuni, cum ar
fi teza lui Church. În particular, maşina Turing este echivalentă ı̂n putere de calcul cu un
calculator aşa cum ı̂l ştim astăzi precum şi cu toate noţiunile cele mai generale de calcul
matematic cunoscute.

8.1 Definiţia maşinii Turing


Conform lui Turing (1936), un model formal pentru o procedură efectivă trebuie să posede
anumite proprietăţi:

• Descrierea să poată fi făcută finit (ı̂n timp şi spaţiu);

• Procedura este formată din paşi consecutivi care se pot realiza mecanic.

Modelul prezentat de Turing constă din următoarele componente (similare tuturor auto-
matelor):

1. un control finit (număr finit de stări);

2. o bandă de intrare teoretic infinită, divizată ı̂n celule (unităţi de memorie) secvenţi-
ale, fiecare celulă putând conţine un caracter (de intrare) sau blanc (notat B); se
cunoaşte poziţia primei celule;

3. un cap de citire pe bandă, care prelucrează o celulă pe unitatea de timp; modalitatea


de prelucrare diferenţiază automatele ı̂ntre ele.
a1 a2 ... ai ... an B B ...
6

Control finit

La maşinile Turing, ı̂n funcţie de starea controlului finit şi de simbolul curent citit pe
bandă, automatul efectuează următoarele acţiuni:

• schimbă starea;
2
Securitatea informaţiei şi ı̂n special Criptografia cu chei publice se bazează ı̂n mare parte pe studiul
unor astfel de funcţii.
8.1. DEFINIŢIA MAŞINII TURING 149

• ı̂nlocuieşte simbolul citit pe bandă cu altul;

• mişcă capul de citire cu o poziţie spre dreapta sau stânga.

Definiţia 8.1 Se numeşte maşină Turing (M T ) structura M = (Q, V, Γ, δ, q0 , B, F ) cu:

1. Q – mulţime finită nevidă de elemente numite ”stări”;

2. V – mulţime finită numită ”alfabet de intrare”;

3. Γ – mulţime finită nevidă de ”simboluri de bandă”; Q ∩ Γ = ∅, V ⊆ Γ;

4. q0 – un element din Q numit ”stare iniţială”;

5. B – un element din Γ reprezentând blancul (spaţiul liber); B ∈ Γ \ V ;

6. F ⊆ Q – mulţime nevidă de elemente numite ”stări finale”;

7. δ : Q × Γ −→ 2Q×Γ×{s,d} – ”funcţia de tranziţie” (poate fi şi parţial definită).

În cazul când |δ(q, x)| ≤ 1, ∀q ∈ Q, x ∈ Γ, maşina Turing este deterministă.

Observaţia 8.1 Un automat liniar mărginit este un caz particular de M T , ı̂n care nu
există simbolul B (blanc) – deci simbolurile de pe bandă nu pot fi şterse ci numai ı̂nlocuite
(eventual). În plus, banda oferă un spaţiu de lucru finit (delimitat de marcatorii $s , $d care
mărginesc cuvântul de intrare), ceea ce nu este cazul la o MT, unde banda este ipotetic
infinită; orice celulă de pe bandă conţine un element din Γ (eventual B).

Multe elemente definite pentru LBA sunt valabile şi ı̂n cazul M T . Astfel, o descriere
instantanee (DI) a unei maşini Turing este tripletul (q, α, β) unde:

• q este starea curentă;

• α este o stivă cu vârful la dreapta; reprezintă ceea ce se află pe bandă până la capul
de citire;

• β este o stivă de lucru, cu vârful la stânga; reprezintă conţinutul benzii, de la capul


de bandă până la ultimul caracter diferit de B; primul caracter din β este pe poziţia
capului de citire şi-l vom numi ”caracter curent”.
Dacă β = , atunci pe poziţia capului de citire este B.

Observaţia 8.2 O descriere instantanee (q, α, β) poate fi notată – fără a crea ambiguităţi
– şi printr-o secvenţă αqβ.
150 CAPITOLUL 8. LIMBAJE DE TIP 0 ŞI MAŞINI TURING

Mişcări:
s
1. (q, αa, bβ) ` (p, α, axβ) dacă δ(q, b) = (p, x, s).
O astfel de mişcare este posibilă numai dacă αa 6= .
d
2. (q, αa, bβ) ` (p, αax, β) dacă δ(q, b) = (p, x, d).
M
Putem nota mişcările ı̂n general şi prin ` sau – dacă nu apare nici o ambiguitate de
notaţie – pur şi simplu cu `.

Notăm cu ` ı̂nchiderea reflexiv-tranzitivă a acestei relaţii; putem atunci defini limbajul
acceptat de maşina Turing M ca fiind

τ (M ) = {w | w ∈ V ∗ , (q0 , , w) ` (p, α, β) unde p ∈ F, α, β ∈ Γ∗ }.

De remarcat că pentru orice cuvı̂nt w ∈ τ (M ), maşina Turing se opreşte după un număr
finit de mişcări.
Dacă w 6∈ τ (M ), este posibil ca maşina Turing să nu se oprească niciodată.

Exemplul 8.1 Să construim o M T M care să accepte limbajul L = {an bn | n ≥ 1}.
Iniţial, banda lui M va conţine cuvântul an bn , urmat de o infinitate de blancuri.
Operaţiile efectuate vor fi următoarele:

• Cel mai din stânga caracter 0 a0 se ı̂nlocuieşte cu X;

• M se deplasează spre dreapta până la primul 0 b0 pe care-l ı̂nlocuieşte cu Y ;

• M se deplasează la stânga până găseşte cel mai din dreapta X;

• Dacă nu mai găseşte 0 a0 - uri, M caută dacă mai sunt b - uri; dacă DA, se opreşte
fără acceptare; dacă N U , cuvântul este acceptat;

• Dacă nu mai găseşte 0 b0 - uri, M nu acceptă cuvântul.

Funcţia de tranziţie δ este definită astfel:


δ a b X Y B
q0 (q1 , X, d) − − (q3 , Y, d) −
q1 (q1 , a, d) (q2 , Y, s) − (q1 , Y, d) −
q2 (q2 , a, s) − (q0 , X, d) (q2 , Y, s) −
q3 − − − (q3 , Y, d) (q4 , B, d)
q4 − − − − −
8.2. PROPRIETĂŢI ALE MAŞINILOR TURING 151

q4 este singura stare finală.


De exemplu, pentru a2 b2 , M va lucra astfel:
s d s s d d
(q0 , , aabb) ` (q1 , X, abb) ` (q1 , Xa, bb) ` (q2 , X, aY b) ` (q2 , , XaY b) ` (q0 , X, aY b) `
d s s d d
(q1 , XX, Y b) ` (q1 , XXY, b) ` (q2 , XX, Y Y ) ` (q2 , X, XY Y ) ` (q0 , XX, Y Y ) `
d d
(q3 , XXY, Y ) ` (q3 , XXY Y, ) ` (q4 , XXY Y B, ).

8.2 Proprietăţi ale maşinilor Turing


Teorema 8.1 Maşinile Turing sunt metode de recunoaştere.

Demonstraţie: Este similară demonstraţiei de la Teorema 7.4. (Capitolul 7), relativă la


automatele liniar mărginite. q.e.d.

Teorema 8.2 Orice limbaj de tip 0 este acceptat de o maşină Turing.

Demonstraţie: Deoarece L ∈ L0 , există o gramatică G = (VN , VT , S, P ) cu L = L(G). Se


construieşte o maşină Turing M care să funcţioneze ı̂n felul următor: Pentru un cuvânt de
intrare w ∈ VT∗ (scris iniţial pe bandă), M alege ı̂n mod nedeterminist o poziţie i ı̂n w şi o
producţie u −→ v ∈ P . Dacă ı̂ncepând cu poziţia i, pe bandă apare v ca subcuvânt al lui
w (adică w = αvβ), atunci v este ı̂nlocuit cu u. De remarcat că prin această ı̂nlocuire este
posibil ca β să fie deplasat spre stânga (dacă |v| > |u|) sau spre dreapta (dacă |v| < |u|).
Dacă după un număr finit de astfel de operaţii conţinutul benzii este S (de fapt
B ∗ SB ∗ ), atunci w este acceptat; altfel este respins. Evident, L(G) = τ (M ).
Lăsăm ca exerciţiu detaliile de construcţie ale lui M . q.e.d.

Teorema 8.3 Limbajul acceptat de o maşină Turing este de tip 0.

Demonstraţie: Fie maşina Turing M = (Q, V, Γ, δ, q0 , B, F ) şi L = τ (M ). Definim gra-


matica de tip 0 G = (VN , VT , S, P ) astfel:
VN = ((Σ ∪ {}) × Γ) ∪ Q ∪ {S, A1 , A2 }, VT = Σ, iar mulţimea P de producţii este
formată din:

1. S −→ q0 A1 ;

2. A1 −→ [a, a]A1 , ∀ a ∈ Σ;

3. A1 −→ A2 ;

4. A2 −→ [, B]A2 ;
152 CAPITOLUL 8. LIMBAJE DE TIP 0 ŞI MAŞINI TURING

5. A2 −→ ;

6. q[a, x] −→ [a, y]p dacă (p, y, d) ∈ δ(q, x), ∀ a ∈ Σ ∪ {}, p, q ∈ Q, x, y ∈ Γ;

7. [b, z]q[a, x] −→ p[b, z][a, y] dacă (p, y, s) ∈ δ(q, x) ∀a, b ∈ Σ ∪ {},


p, q ∈ Q, x, y, z ∈ Γ;

8. [a, x]q −→ qaq, q[a, x] −→ qaq, q −→  ∀ a ∈ Σ ∪ {}, q ∈ Q, x ∈ Γ.

Să demonstrăm prin dublă incluziune egalitatea L(G) = τ (M ).


”τ (M ) ⊆ L(G)”: Fie w = a1 a2 . . . an ∈ τ (M ); deci

(q0 , , a1 a2 . . . an ) ` (q, x1 . . . xr−1 , xr . . . xp ) şi q ∈ F .

Va trebui să găsim o derivare S =⇒ w (care conduce la concluzia w ∈ L(G)). Utilizând
regulile (1) şi (2), prima parte a acestei derivări trebuie sa fie

S =⇒ q0 [a1 , a1 ] . . . [an , an ]A1 cu ai ∈ Σ (1 ≤ i ≤ n).
Cum M acceptă cuvântul w, fie m numărul de locaţii la dreapta ultimului carac-
ter, cercetat de capul de citire al M T atunci când acceptă această secvenţă. Utilizând
producţia (3), apoi (4) de m ori şi ı̂n final (5), se obţine derivarea

S =⇒ q0 [a1 , a1 ] . . . [an , an ][, B]m .
Vom demonstra prin inducţie după numărul de paşi ı̂n M că
s
(q0 , , a1 . . . an ) ` (q, x1 . . . xr−1 , xr . . . xp ) (i)
implică

q0 [a1 , a1 ] . . . [an , an ][, B]m =⇒ [a1 , x1 ] . . . [ar−1 , xr−1 ]q[ar , xr ] . . . [an+m , an+m ] (ii)
unde
a1 , . . . an ∈ Σ, an+1 = . . . = an+m = , x1 . . . , xn+m ∈ Γ, xp+1 = . . . = xn+m = B.
0
s = 0: În acest caz (1) devine (q0 , , a1 . . . an ) ` (q0 , , a1 . . . an ), deci r = 1 şi p = n.
În gramatica G avem
0
q0 [a1 , a1 ] . . . [an , an ][, B]m =⇒ q0 [a1 , a1 ] . . . [an , an ][, B]m
şi a1 , . . . an ∈ Σ, an+1 = . . . = an+m = , x1 . . . , xn+m ∈ Γ, xp+1 = . . . = xn+m = B.
Să presupunem implicaţia adevărată pentru s ≤ k − 1 şi să o demonstrăm pentru
s = k. Fie
k−1
(q0 , , a1 . . . an ) ` (q, x1 . . . xr−1 , xr . . . xp ) ` (p, y1 . . . yt−1 , yt . . . yn ) (iii)
Conform ipotezei de inducţie, avem

q0 [a1 , a1 ] . . . [an , an ][, B]m =⇒ [a1 , x1 ] . . . [ar−1 , xr−1 ]q[ar , xr ] . . . [an+m , an+m ]
unde toate componentele verifică condiţiile din (ii).
Ultimul pas din (3) se poate face printr-o mişcare a capului de citire spre dreapta sau
spre stânga.
8.2. PROPRIETĂŢI ALE MAŞINILOR TURING 153

• Dacă mişcarea se face spre dreapta, atunci t − 1 = r şi (p, yr , d) ∈ δ(q, xr ). Deci
– conform cu (6) – ı̂n P există producţia q[ar , xr ] −→ [ar , yr ]p care – folosită ı̂n
derivarea din gramatica G – conduce la

q0 [a1 , a1 ] . . . [an , an ][, B]m =⇒ [a1 , x1 ] . . . [ar−1 , xr−1 ]q[ar , xr ] . . . [an+m , an+m ] =⇒
=⇒ [a1 , x1 ] . . . [ar−1 , xr−1 ][ar , yr ]p[ar+1 , xr+1 ] . . . [an+m , an+m ].
• Dacă are loc o mişcare spre dreapta a capului de citire, atunci t = r − 1 şi
(p, yr , s) ∈ δ(q, xr ) (r > 2). Va rezulta – conform cu (7) – că ı̂n P există producţia
[ar−1 , xr−1 q[ar , xr ] −→ p[ar−1 , xr−1 ][ar , yr ]. Putem atunci scrie ı̂n gramatica G:

q0 [a1 , a1 ] . . . [an , an ][, B]m =⇒ [a1 , x1 ] . . . [ar−1 , xr−1 ]q[ar , xr ] . . . [an+m , an+m ] =⇒
=⇒ [a1 , x1 ] . . . p[ar−1 , xr−1 ][ar , yr ] . . . [an+m , an+m ], deci de forma (iii).
Deoarece w = a1 . . . an ∈ τ (M ) rezultă că există secvenţa de mişcări

(q0 , , a1 . . . an ) ` (q, x1 . . . xr−1 , xr . . . xp ), q ∈ F.
Din faptul că (i) implică (ii) se obţine derivarea

q0 [a1 , a1 ] . . . [an , an ][, B]m =⇒ [a1 , x1 ] . . . [ar−1 , xr−1 ]q[ar , xr ] . . . [an+m],x[ n+m ] cu q ∈ F .
∗ ∗
Deci S =⇒ q0 [a1 , a1 ] . . . [an , an ][, B]m =⇒ [a1 , x1 ] . . . [ar−1 , xr−1 ]q[ar , xr ] . . . [an+m , xn+m ]
cu q ∈ F .
Ţinând acum cont de producţiile (8), această derivare se completează cu

[a1 , x1 ] . . . [ar−1 , xr−1 ]q[ar , xr ] . . . [an+m , xn+m ] =⇒ a1 . . . an ,

deci S =⇒ w.

”L(G) ⊆ τ (M )”: Fie w = a1 . . . an ∈ L(G); deci există derivarea S =⇒ w. Din forma
producţiilor (1) − (8) rezultă că ultimele reguli aplicate sunt de tipul (8) (sunt singurele
producţii terminale). Dar pentru aplicarea lor trebuie să existe o formă sentenţială de
tipul membrului drept din (ii), cu q ∈ F . Deci derivarea trebuie să fie de forma
∗ ∗ ∗
S =⇒ q0 [a1 , a1 ] . . . [an , an ][, B]m =⇒ [a1 , x1 ] . . . [ar−1 , xr−1 ]q[ar , xr ] . . . [an+m , xn+ ] =⇒ w.
Considerăm derivarea
s
q0 [a1 , a1 ] . . . [an , an ][, B]m =⇒ [a1 , x1 ] . . . [ar−1 , xr−1 ]q[ar , xr ] . . . [an+m , xn+ ]
unde q ∈ F, a1 , . . . , an ∈ Σ, an+1 = . . . = an+m =  şi x1 , . . . , xn+m ∈ Γ.
Aceasta este de forma (ii). Vom arăta că (ii) implică (i) prin inducţie după lungimea
s a derivării.

s = 0: Atunci (ii) devine q0 [a1 , a1 ] . . . [an , an ][, B]m =⇒ q0 [a1 , a1 ] . . . [an , an ][, B]m şi
0
deci ı̂n M există secvenţa de 0 mişcări (q0 , , a1 . . . an ) ` (q0 , , a1 . . . an ).
Presupunem implicaţia adevărată pentru derivări de lungime s ≤ k − 1 şi o demon-
străm pentru s = k.
154 CAPITOLUL 8. LIMBAJE DE TIP 0 ŞI MAŞINI TURING

Fie derivarea de lungime k:


k−1
q0 [a1 , a1 ] . . . [an , an ][, B]m =⇒ [a1 , x1 ] . . . [ar−1 , xr−1 ]q[ar , xr ] . . . [an+m , xn+m ] =⇒
=⇒ [a1 , y1 ] . . . [at−1 , yt−1 ]p[at , yt ] . . . [an+m , yn+m ].
Ultimul pas al derivării foloseşte o producţie de tipul (6) sau (7).

• Dacă este folosită o producţie de tipul (6), atunci (p, yr , d) ∈ δ(q, xr ) şi t = r + 1.
În acest caz avem (q, x1 . . . xr−1 , xr . . . xp ) ` (p, x1 . . . xr−1 yr , xr+1 . . . xp ).

• Dacă este folosită o producţie de tipul (7), atunci (p, yr , s) ∈ δ(q, xr ) şi t = r − 1;
deci ı̂n M avem mişcarea (q, x1 . . . xr−1 , xr . . . xp ) ` (p, x1 . . . xr−2 , xr−1 yr xr+1 . . . xp ).

Deoarece ı̂n derivarea existentă ı̂n gramatica G avem o secvenţa de tipul (ii), iar (ii)
implică (i), ı̂n M T M vom avea

(q0 , , a1 . . . an ) ` (q, x1 , . . . xr , xr+1 . . . xp )

cu q ∈ F , deci w ∈ τ (M ). q.e.d.

8.3 Limbaje recursive şi recursiv numărabile


Definiţia 8.2 Limbajul acceptat de o maşină Turing se numeşte recursiv numărabil.

Termenul de numărabil derivă din faptul că acestea sunt limbajele ale căror cuvinte pot
fi numărate (listate) de o maşină Turing. Pentru un limbaj L şi o maşină Turing M care
acceptă L, după ce maşina primeşte la intrare un cuvânt w, se pot ı̂ntâmpla următoarele
evenimente:

• M se opreşte după un număr finit de mişcări ı̂ntr-o stare finală, după ce a parcurs
complet w; spunem că w este acceptat de M (sau w ∈ L);

• M se opreşte după un număr finit de mişcări ı̂ntr-o stare nefinală;

• M nu se opreşte niciodată (intră ı̂ntr-o buclă infinită);

În aceste două ultime cazuri, spunem că w nu este acceptat de M (sau w 6∈ L).
Există o subclasă de limbaje, numite limbaje recursive, care sunt acceptate de maşini
Turing cu proprietatea că se opresc pentru orice cuvânt de intrare.
8.3. LIMBAJE RECURSIVE ŞI RECURSIV NUMĂRABILE 155

Teorema 8.4 Orice limbaj L ∈ L1 este acceptat de o M T care opreşte pentru toate
intrările.

Demonstraţie: Deoarece L este un limbaj senzitiv de context, există o gramatică monotonă


G = (VN , VT , S, P ) cu L = L(G). Pe de-altă parte, cum L1 ⊆ L0 , există o maşină Turing
(nedeterministă) M cu L = τ (M ).
Fie w ∈ VT∗ cu |w| = n. Folosind Algoritmul 7.1. (dat de Teorema 7.3, Capitolul 7),
putem decide dacă w ∈ L(G). Vom construi M ı̂n aşa fel ı̂ncât să simuleze acest algoritm:
pe bandă să apară numai elemente din Ti obţinute din Ti−1 prin aplicarea de producţii
din P . Cum o M T poate simula derivări din G, acest lucru este posibil. În plus, orice
secvenţă α ∈ Vi ∩ VT∗ obţinută pe bandă va trece maşina ı̂ntr-o stare finală. Evident, după
un număr finit de paşi, maşina Turing se va opri. Cuvântul de pe bandă este ı̂n L(G)
dacă şi numai dacă starea ı̂n care s-a oprit automatul este finală. q.e.d.
Pe baza Teoremei 8.4 putem demonstra că incluziunea L1 ⊆ L0 este strictă. Aceasta
va rezulta din următoarele două propoziţii.

Propoziţia 8.1 Fie M1 , M2 , . . . o enumerare a maşinilor Turing care opresc pentru toate
intrările. Există un limbaj recursiv care nu este acceptat de nici o maşină Turing.

Demonstraţie: Fie Σ = {0, 1} şi L ⊂ Σ∗ definit astfel: w ∈ L dacă şi numai dacă maşina
Turing Mi nu acceptă w, unde reprezentarea binară a lui i este w.
Limbajul L este recursiv: fiind dat un cuvânt w ∈ Σ∗ , calculăm i şi vedem dacă
w ∈ τ (Mi ) sau nu (lucru posibil, deoarece Mi se opreşte pentru toate intrările). Vom
arăta că ı̂n şirul din enunţ nu se află nici o maşină Turing Mj cu L = τ (Mj ).
Presupunem prin absurd că ar exista o astfel de maşină Mj şi fie x reprezentarea ı̂n
binar a lui j. Din construcţia limbajului L rezultă că dacă x ∈ L atunci x 6∈ τ (Mj ) şi
dacă x 6∈ L atunci x ∈ τ (Mj ); deci L 6= τ (Mj ). q.e.d.
Din Propoziţia 8.1 rezultă că L1 este inclusă strict ı̂n clasa limbajelor recursive.

Propoziţia 8.2 Există un limbaj recursiv enumerabil care nu este senzitiv de context.

Demonstraţie: Considerăm o gramatică G = (VN , {0, 1}, S, P ) de tip 1. Vom codifica ca-
racterele gramaticii 0, 1, , , −→, {, }, (, ) cu 10, 12 , . . . , 108 . Pentru neterminale, codificarea
se face ı̂n felul următor: al i-lea neterminal este codificat cu 108+i . Deci putem codifica
fiecare gramatică G cu un cod binar, cod care permite să enumerăm toate gramaticile
senzitive de context. Fiecărei astfel de gramatici ı̂i corespunde o M T echivalentă care se
opreşte pentru toate intrările (Teorema 8.4). Din Propoziţia 8.1 am văzut că există un
limbaj L care nu poate fi recunoscut de o M T care opreşte pentru toate intrările. Deci
L 6∈ L1 . q.e.d.
156 CAPITOLUL 8. LIMBAJE DE TIP 0 ŞI MAŞINI TURING

8.4 Maşina Turing folosită pentru calculul funcţiilor


ı̂ntregi
Înafara rolului de a accepta limbaje recursiv numărabile, o maşină Turing poate fi privită
şi ca un mod de a calcula funcţii de variabilă ı̂ntreagă cu valori ı̂ntregi.
Ideea este de a reprezenta ı̂ntregii ı̂n baza 1: un număr i ≥ 0 poate fi reprezentat prin
şirul 0i . Dacă o funcţie are n argumente i1 , i2 , . . . , in , aceste numere ı̂ntregi scrişe ı̂n baza
1 sunt plasate pe bandă şi separate prin câte un 1:

0i1 10i2 1 . . . 10in

Dacă maşina Turing se opreşte (ı̂ntr-o stare finală sau nu) cu 0m pe bandă, spunem că

f (i1 , i2 , . . . , in ) = m.

De remarcat că f poate să nu fie definită pentru orice set de valori (i1 , i2 , . . . , in ).
Dacă f (i1 , i2 , . . . , in ) este definită pentru toate n - tuplurile (i1 , i2 , . . . , in ), atunci
spunem că f este total recursivă. O funcţie calculată de o maşină Turing este numită
funcţie parţial recursivă.
Prin analogie, funcţiile total recursive corespund limbajelor recursive iar funcţiile
parţial recursive corespund limbajelor recursiv numărabile.
Toate funcţiile matematice uzuale sunt funcţii total recursive.

Exemplul 8.2 Operaţia de scădere ı̂ntreagă este definită


(
m−n dacă m ≥ n
m−̇n =
0 altfel

Maşina Turing M = ({q0 , . . . , q6 }, {0, 1}, {0, 1, B}, δ, q0 , B, {q6 }) definită mai jos, plea-
că din configuraţia de bandă 0m 10n şi se opreşte când pe bandă rămâne 0m−n .
Ca idee de lucru, M şterge sistematic primul 0, apoi caută spre dreapta până la ultimul
1; primul 0 de după acesta ı̂l ı̂nlocuieşte cu 1.
Funcţia δ este definită:
δ(q0 , 0) = (q1 , B, d); Se ı̂ncepe ciclul; se ı̂nlocuieşte primul 0 cu B.
δ(q1 , 0) = (q1 , 0, d);
δ(q1 , 1) = (q2 , 1, d); Se caută spre dreapta primul 1.
δ(q2 , 1) = (q2 , 1, d);
δ(q2 , 0) = (q3 , 1, s); Deplasare dreapta până la primul 0, care se transformă ı̂n 1.
δ(q3 , 0) = (q3 , 0, s);
δ(q3 , 1) = (q3 , 1, s);
8.5. TEHNICI DE CONSTRUCŢIE A MAŞINILOR TURING 157

δ(q3 , B) = (q0 , B, d); Deplasare stânga până la primul blanc; se repetă ciclul.
δ(q2 , B) = (q4 , B, s);
δ(q4 , 1) = (q4 , B, s);
δ(q4 , 0) = (q4 , 0, s);
δ(q4 , B) = (q6 , 0, d); Configuraţie finală de acceptare; se trece ı̂n starea q6 şi Stop.
δ(q0 , 1) = (q5 , B, d);
δ(q5 , 0) = (q5 , B, d);
δ(q5 , 1) = (q5 , B, d);
δ(q5 , B) = (q6 , B, d); Configuraţie finală de acceptare; se trece ı̂n starea q6 şi Stop.

De exemplu, pentru intrarea 0010, maşina M efectuează calculele:


(q0 , , 0010) ` (q1 , B, 010) ` (q1 , B0, 10) ` (q2 , B01, 0) ` (q3 , B0, 11) ` (q3 , B, 011) `
(q3 , eps, B011) ` (q0 , B, 011) ` (q1 , BB, 11) ` (q2 , BB1, 1) ` (q2 , 11, ) ` (q4 , 1, 1) `
(q4 , BB, 1) ` (q4 , B, ) ` (q6 , B0, ).
iar pentru intrarea 0100, M procedează astfel:
(q0 , , 0100) ` (q1 , B, 100) ` (q2 , B1, 00) ` (q3 , B, 110) ` (q3 , , B110) ` (q0 , B, 110) `
(q5 , BB, 10) ` (q5 , BBB, 0) ` (q5 , BBBB, ) ` (q6 , BBBBB, ).

8.5 Tehnici de construcţie a maşinilor Turing


Metoda de a defini o maşină Turing scriind lista completă a stărilor precum şi toată tabela
de tranziţie, nu este totdeauna un lucru uşor de realizat. În cazul unor M T complicate,
este necesar să folosim anumite concepte mai generale; vom face ı̂n continuare o trecere
ı̂n revistă a unor astfel de construcţii, folosind exemplificări pentru fiecare caz.

Stocarea ı̂n control finit


Controlul finit poate fi o informaţie utilă ı̂n descrierea unei M T . Pentru aceasta, o stare
este scrisă ca o pereche de elemente: una pentru controlul iar a doua pentru stocarea unui
simbol. În rest, definiţia maşinii Turing rămâne neschimbată.
Exemplul 8.3 Să considerăm o maşină Turing care ia primul simbol de pe bandă, ı̂l
ı̂nregistrează şi apoi cercetează dacă acesta mai apare. Cuvântul este acceptat ı̂n cazul ı̂n
care primul caracter nu se repetă.
Problema este foarte simplă (de fapt τ (M ) este un limbaj regulat) dar o folosim pentru
a reliefa utilizarea acestui tip de definire pentru o maşinile Turing.

M = (Q, {0, 1}, {0, 1, B}, δ, [q0 , B], B, F )

unde Q = {q0 , q1 } × {0, 1, B}, F = {[q1 , B]}, iar δ este definită astfel:
158 CAPITOLUL 8. LIMBAJE DE TIP 0 ŞI MAŞINI TURING

δ([q0 , B], 0) = ([q1 , 0], 0, d)


δ([q0 , B], 1) = ([q1 , 1], 1, d)
Iniţial, q0 este componenta de control a stării, iar M se deplasează la dreapta; prima
componentă a stării lui M devine q1 şi primul simbol este stocat pe a doua poziţie.
δ([q1 , 0], 1) = ([q1 , 0], 1, d)
δ([q1 , 1], 0) = ([q1 , 1], 0, d)
Dacă simbolul stocat nu coincide cu cel curent, M continuă deplasarea spre dreapta.
δ([q1 , 0], B) = ([q1 , B], 0, s)
δ([q1 , 1], B) = ([q1 , B], 0, s).
M T găseşte pe bandă un blanc fără să fi aflat un simbol identic cu cel căutat; se trece ı̂n
starea finală.
Dacă M găseşte simbolul căutat, se opreşte fără acceptare (funcţia δ nu mai este
definită).

Stocare multiplă
Putem imagina banda unei maşini Turing ca fiind suficient de lată pentru a putea fi
ı̂mpărţită ı̂n n benzi paralele (n ≥ 1, n finit). Simbolurile de pe bandă vor fi atunci
vectori de dimensiune n.

Exemplul 8.4 Să construim o maşină Turing care să determine dacă un număr natural
(mai mare decât 2) este prim. Ea va fi formată din 3 benzi paralele: pe prima, delimitat
ı̂ntre $s şi $d , scriem numărul ı̂n binar.
Deci, simbolurile de intrare: 0, 1, $s , $d se vor scrie [0, B, B], [1, B, B], [$s , B, B], [$d , B, B].
În particular, blancul se reprezintă prin [B, B, B].
Pentru a testa dacă numărul este prim, M T va scrie numărul 2 ı̂n binar pe a doua
bandă (aliniat la dreapta faţă de primul număr) şi copiază prima bandă pe a treia. Apoi,
banda a doua este scăzută din a treia cât timp este posibil.
Dacă ceea ce rămâne (restul ı̂mpărţirii celor două numere) este zero, atunci numărul
de pe prima bandă nu este prim. În caz contrar numărul de pe banda a doua creşte cu o
unitate; dacă el este egal cu cel de prima bandă, numărul este prim. Altfel, toată operaţia
se reia.
Situaţia de pe banda din figură:

$s 1 0 1 1 1 1 $d B B ...
B B B B 1 0 1 B B B ...
B 1 0 0 1 0 1 B B B ...
6

Control finit
8.5. TEHNICI DE CONSTRUCŢIE A MAŞINILOR TURING 159

corespunde testării dacă 47 este număr prim; momentul este acela când se ı̂ncearcă
ı̂mpărţirea cu 5, 5 fiind scăzut de două ori (deci pe banda 3 se află numărul 37).
De remarcat că M T din acest exemplu simulează un LBA, lucru normal dacă ştim că
limbajul L = {ap | p prim} este un limbaj dependent de context.

Controlul exterior al simbolurilor


Această modalitate face posibilă o vizualizare a modului cum o maşină Turing acceptă
limbaje definite prin şiruri repetate, cum ar fi de exemplu
{ww | w ∈ V ∗ } {wcy | w, y ∈ V ∗ , w 6= y} {ww̃ | w ∈ V ∗ }
sau când ı̂n definirea limbajelor intervine – ı̂n operaţii de comparare – şi lungimea
cuvintelor, cum ar fi
{an bn | n ≥ 1} {ai bj ck | i 6= j sau j 6= k}.
Pentru aceasta, ı̂mpărţim banda ı̂n două: prima parte (superioară) este folosită nor-
mal, iar pe a doua parte vor fi numai simbolurile B şi $.
Simbolul $ va apare pentru marcare.

Exemplul 8.5 Să construim o M T M = (Q, V, Γ, δ, q0 , B, F ) care să recunoască limbajul


{wcw | w ∈ {a, b}∗ }.
Pentru aceasta, definim:
Q = {[qi , x] | 1 ≤ i ≤ 9, x ∈ {a, b, B}}, a doua componentă a stării fiind folosită
la stocarea unui caracter de intrare.
V = {[B, x] | x ∈ {a, b, c}}. Simbolul [B, x] este o reprezentare internă (de bandă)
pentru x.
Γ = {[X, x] | X ∈ {B, $}, x ∈ {a, b, c, B}}. Reprezentarea internă a lui B este [B, B].
Pentru orice x, y ∈ {a, b} funcţia δ este definită:
δ([q1 , x], [B, y]) = ([q2 , y], [$, x], d);
Simbolul găsit la intrare este stocat de stare; apoi M T se deplasează la dreapta.
δ([q2 , y], [B, x]) = ([q2 , y], [B, x], d);
M continuă se se deplaseze spre dreapta, căutând simbolul c.
δ([q2 , y], [B, c]) = ([q3 , y], [B, c], d);
S-a găsit c. M trece ı̂ntr-o nouă stare.
δ([q3 , y], [$, x]) = ([q3 , y], [$, x], d);
M se deplasează la dreapta, peste simbolurile controlate.
δ([q3 , y], [B, y]) = ([q4 , B], [$, y], s);
M a ajuns la un simbol necontrolat ı̂ncă. Dacă acesta coincide cu simbolul păstrat pe a
doua componentă a stării, M T ı̂l bifează (cu $) şi ı̂ncepe deplasarea spre stânga. Dacă
simbolurile nu coincid, M nu are definită altă mişcare şi se opreşte fără acceptare.
δ([q4 , B], [$, y]) = ([q4 , B], [$, y], s);
160 CAPITOLUL 8. LIMBAJE DE TIP 0 ŞI MAŞINI TURING

δ([q4 , B], [B, c]) = ([q5 , B], [B, c], s);


δ([q5 , B], [B, y]) = ([q6 , B], [B, y], s);
δ([q6 , B], [B, y]) = ([q6 , B], [B, y], s);
δ([q6 , B], [$, y]) = ([q1 , B], [$, y], d);
M s-a deplasat până la cel mai din stânga simbol necontrolat; ı̂l marchează, ı̂l stochează
ı̂n starea curentă şi reia totul de la ı̂nceput.
δ([q5 , B], [$, y]) = ([q7 , B], [$, y], d);
M se află ı̂n situaţia când simbolul aflat la stânga lui c a fost controlat; deci s-au terminat
de verificat toate caracterele. Acum M T trebuie să verifice dacă au fost controlate şi toate
caracterele aflate la dreapta lui c.
δ([q7 , B], [B, c]) = ([q8 , B], [B, c], d);
δ([q8 , B], [$, y]) = ([q8 , B], [$, y], d);
δ([q8 , B], [B, B]) = ([q9 , B], [$, B], s).
M găseşte blancul şi se opreşte cu acceptare.

Mărirea spaţiului de lucru


O maşină Turing poate să-şi crească spaţiul de lucru (lucru imposibil pentru un automat
liniar mărginit), deplasând spre dreapta cu un număr finit de poziţii toate caracterele
diferite de blanc.

Exemplul 8.6 Să presupunem că M T M = (Q, V, Γ, δ, q0 , B, F ) trebuie să-şi deplaseze


simbolurile cu două poziţii spre dreapta; fără a micşora generalitatea, vom considera că
pe bandă simbolurile diferite de blanc sunt scrise compact (nu conţin blancuri ı̂ntre ele).
Q va conţine stări de tipul [qi , A1 , A2 ] unde i = 1, 2, A1 , A2 ∈ Γ.
Fie X un simbol special, nefolosit ı̂n altă parte de M .
M ı̂ncepe deplasarea din starea [q1 , B, B]. Elementele interesante ale funcţiei δ sunt:
δ([q1 , B, B], A1 ) = ([q1 , B, A1 ], X, d), A1 ∈ Γ \ {B, X};
Primul simbol citit este stocat pe a treia componentă a stării; se tipăreşte X pe celula
scanată şi M se deplasează la dreapta.
δ([q1 , B, A1 ], A2 ) = ([q1 , A1 , A2 ], X, d), A1 , A2 ∈ Γ \ {B, X};
M mută simbolul de pe a treia componentă pe a doua, stochează simbolul nou găsit ı̂n a
treia componentă, scrie ı̂n locul lui un X şi continuă deplasarea la dreapta.
δ([q1 , A1 , A2 ], A3 ) = ([q1 , A2 , A3 ], A1 , d), A1 , A2 , A3 ∈ Γ \ {B, X};
M continuă deplasarea, păstrând pe poziţiile 2 şi 3 ultimele elemente citite pe bandă.
δ([q1 , A1 , A2 ], B) = ([q1 , A2 , B], A1 , d), A1 , A2 ∈ Γ \ {B, X};
Când se găseşte un blanc, ultimele simboluri depozitate sunt scrise pe bandă.
δ([q1 , A1 , B], B) = ([q2 , B, B], A1 , s);
M a scris cele două simboluri; trece cu prima componentă ı̂ntr-o stare nouă şi ı̂ncepe
deplasarea spre stânga pentru a găsi prima poziţie, marcată cu X.
8.5. TEHNICI DE CONSTRUCŢIE A MAŞINILOR TURING 161

δ([q2 , B, B], A) = ([q2 , B, B], A, s), A ∈ Γ \ {B, X};


Când se ajunge la simbolul X, automatul va face transferul la o stare care există ı̂n Q şi
continuă alte operaţii proprii lui M .

Subrutine
Lucrul cu maşinile Turing este mult uşurat dacă – similar programării – vom folosi diverse
module pentru a efectua unele operaţii elementare.
O M T poate simula orice tip de subrutine din limbajele de programare, inclusiv pro-
cedurile recursive sau mecanismele de transfer de parametri.
Ideea generală este de a scrie o parte a M T care să servească drept subrutină; ea va
avea propria ei stare iniţială precum şi o stare de revenire (din care momentan nu se face
nici o mişcare) la rutina apelantă. Când scriem o M T care ”apelează” subrutina, este
asigurat un set de stări noi pentru subrutină, precum şi transferul din starea de revenire.
Apelul este efectuat intrând ı̂n starea iniţială a subrutinei iar ı̂ntoarcerea – prin
mişcarea din starea de revenire.

Exemplul 8.7 Să presupunem că M are nevoie de funcţia total recursivă de ” ı̂nmulţire”.
Ea va pleca cu 0m 10n pe bandă şi se va ı̂ncheia cu 0mn aflat ı̂ntre blancuri.
Ideea este de a plasa 1 după 0m 10n şi apoi de a copia secvenţa de n zerouri la dreapta
de m ori, la fiecare trecere ştergând câte un zero din cele m aflate la ı̂nceput.
Se obţine astfel 10n 10mn .
În final se şterge prefixul 10n 1.
M T va folosi subrutina COPY care ı̂ncepe cu o descriere instantanee (q1 , 0m 1, 0n 10i )
şi se termină cu (q5 , 0m 1, 0n 10i+n ).
Această subrutină are funcţia de tranziţie dată de tabela:

0 1 2 B
q1 (q2 , 2, d) (q4 , 1, s) − −
q2 (q2 , 0, d) (q2 , 1, d) − (q3 , 0, s)
q3 (q3 , 0, s) (q3 , 1, s) (q1 , 2, d) −
q4 − (q5 , 1, d) (q4 , 0, s) −

Pentru a completa, este necesar ca programul principal să aducă descrierea instantanee
iniţială (q0 , 0m 10n ) la (q1 , B0m−1 1, 0n 1). Aceasta se face definind regulile:

δ(q0 , 0) = (q6 , B, d) δ(q6 , 0) = (q6 , 0, d)


δ(q6 , 1) = (q 0 , 1, d) δ(q 0 , 0) = (q 0 , 0, d)
δ(q 0 , B) = (q”, 1, s) δ(q”, 0) = (q”, 0, s)
δ(q”, 1) = (q1 , 1, d)
162 CAPITOLUL 8. LIMBAJE DE TIP 0 ŞI MAŞINI TURING

Alte stări suplimentare sunt necesare pentru a transforma o descriere instantanee


(q5 , B i 0m−i 1, 0n 10ni ) ı̂n (q1 , B i+1 0m−i−1 1, 0n 10ni ) (după care M T acţionează COPY), şi
de a verifica dacă i = m. În această ultimă situaţie, primii 10n 1 sunt şterşi şi maşina se
opreşte ı̂n starea q12 .
Aceste mişcări sunt descrise ı̂n tabelul:

0 1 2 B
q5 (q7 , 0, s) − − −
q7 − (q8 , 1, s) − −
q8 (q9 , 0, s) − − (q10 , B, d)
q9 (q9 , 0, s) − − (q0 , B, d)
q10 − (q11 , B, d) − −
q11 (q11 , B, d) (q12 , B, d) − −

8.6 Modificări ale maşinilor Turing


Una din raţiunile care au condus la acceptarea maşinii Turing ca model general de calcul
este echivalenţa ei cu multe alte versiuni care creează diverse facilităţi de lucru. Vom
trece ı̂n revistă câteva din astfel de modalităţi de definire ale maşinilor Turing.

Maşină Turing cu bandă dublu infinită


O maşină Turing M = (Q, V, Γ, δ, q0 , B, F ) cu bandă dublu infinită are proprietatea că
banda de citire este infinită şi la stânga (nu numai la dreapta). Se consideră că prelungirile
porţiunii nevide ale benzii, ı̂n ambele direcţii, sunt formate din două infinităţi de blancuri.
M
Relaţia ` se defineşte la fel ca la maşinile Turing clasice, cu două completări:
M
1. dacă δ(q, X) = (p, Y, s) atunci (q, , Xα) ` (p, , BY α)
(ı̂n modelul iniţial nu exista nici o mişcare ı̂n această situaţie);
M
2. dacă δ(q, X) = (p, B, d) atunci (q, , Xα) ` (p, B, α).

Configuraţia iniţială este (q0 , , w).

Teorema 8.5 Limbajul L este acceptat de o M T cu bandă dublu infinită dacă şi numai
dacă este acceptat de o M T cu bandă infinită la dreapta.

Demonstraţie: Faptul că o maşină Turing cu bandă dublu infinită poate simula o M T
obişnuită, este simplu de arătat. La ı̂nceput se marchează celula aflată la stânga poziţiei
8.6. MODIFICĂRI ALE MAŞINILOR TURING 163

iniţiale a capului de citire. Dacă ı̂n timpul execuţiei se ajunge la acest marcaj, atunci
M T se va opri fără acceptare.
Invers, fie M2 = (Q2 , V2 , Γ2 , δ2 , q2 , B, F2 ) o M T cu bandă dublu infinită. Vom construi
o M T M1 care să simuleze M2 şi să aibă banda infinită numai la dreapta. M1 va avea
două benzi paralele, una pentru celula iniţial analizată ı̂mpreună cu tot ce este la dreapta,
cealaltă reprezentând – ı̂n ordine inversă – memoria aflată la stânga celulei iniţiale.
O reprezentare intuitivă este dată de figura:
. . . A−5 A−4 A−3 A−2 A−1 A0 A1 A2 A3 A4 A5 . . .
M2
A0 A 1 A2 A3 A4 A 5 . . .
$ A−1 A−2 A−3 A−4 A−5 . . .
M1
Construcţia formală a lui M1 = (Q1 , V1 , Γ1 , δ1 , q1 , B, F1 ) este:
Q1 = {q1 } ∪ {[q, S], [q, J] | q ∈ Q2 }. S (sus) şi J (jos) indică banda cu care se
lucrează.
V1 = {[a, B] | a ∈ V2 }.
Γ1 = {[X, Y ] | X ∈ Γ2 , Y ∈ Γ2 ∪ {$}}.
F1 = {[q, S], [q, J] | q ∈ F2 };
Funcţia de tranziţie δ1 este definită:
δ1 (q1 , [a, B]) = ([q, S], [X, $], d) unde δ2 (q2 , a) = (q, X, d), a ∈ V2 ∪ {B}
δ1 (q1 , [a, B]) = ([q, J], [X, $], d) unde δ2 (q2 , a) = (q, X, s), a ∈ V2 ∪ {B}
δ1 ([q, S], [X, Y ]) = ([p, S], [Z, Y ], A) unde δ2 (q, X) = (p, Z, A), A ∈ {s, d},
[X, Y ] ∈ Γ1 , Y 6= $.
M1 simulează M2 pe banda de sus.
δ1 ([q, J], [X, Y ]) = ([p, J], [X, Z], A) unde δ2 (q, Y ) = (p, Z, A0 ),
[X, Y ] ∈ Γ1 , Y 6= $.
Aici A = s dacă A0 = d şi invers.
M1 simulează M2 pe banda de jos a lui M1 , direcţia de mişcare a capului fiind ı̂nsă
inversă.
δ1 ([q, S], [X, $]) = δ1 ([q, J], [X, $]) = ([p, C], [Y, $], d) unde δ2 (q, X) = (p, Y, A).
Aici C = U dacă A = d şi C = D dacă A = s.
M1 simulează o mişcare a lui M2 pe celula scanată iniţial de M2 ; apoi M1 lucrează pe
banda de sus sau de jos, ı̂n funcţie de direcţia de mişcare a lui M2 . În această situaţie,
M1 se mişcă numai la dreapta. q.e.d

Maşini Turing multibandă


Cel mai general tip de M T multibandă constă dintr-un control finit având n capete de
citire - bandă, şi n benzi; fiecare bandă este dublu infinită. La o mişcare, ı̂n funcţie de
164 CAPITOLUL 8. LIMBAJE DE TIP 0 ŞI MAŞINI TURING

stare şi de simbolul analizat de fiecare cap de citire, maşina poate:


• să schimbe starea;
• să tipărească un simbol nou pe fiecare din cele n benzi;
• să deplaseze independent fiecare cap de bandă (dreapta/stânga sau să-l lase pe loc).
Iniţial, intrarea se află pe prima bandă, celelalte fiind goale (numai B).
Teorema 8.6 Dacă un limbaj L este acceptat de o M T multibandă, atunci el este acceptat
de o M T cu o bandă.
Demonstraţie: Teorema prezintă numai o implicaţie, reciproca fiind banală (orice M T
poate fi privită ca o M T cu n = 1 benzi).
Fie limbajul L acceptat de M T M1 cu n benzi. Vom construi o maşină Turing M2
cu stocare multiplă pe 2n benzi paralele, câte două pentru fiecare bandă a lui M1 : una
din componente va reţine conţinuturile benzii corespunzătoare a lui M1 iar cealaltă are
numai blancuri, ı̂nafara unui marcator ı̂n celula care conţine simbolul scanat de capul de
citire corespunzător din M1 . Controlul finit al lui M2 stochează starea lui M1 ı̂mpreună
cu numărul de marcatori aflaţi la dreapta capului de citire din M2 .
Fiecare mişcare a lui M1 este simulată de o parcurgere dreapta - stânga - dreapta a
capului de citire a lui M2 .
Iniţial, acest cap este poziţionat la cea mai din stânga celulă care conţine un marcator.
Pentru simularea unei mişcări a lui M1 , M2 merge spre dreapta, vizitează fiecare
celulă semnalată de un marcator şi ı̂nregistrează fiecare simbol prelucrat de capul de
citire respectiv din M1 . Când M2 ı̂ntâlneşte un marcator, contorul care ı̂nregistrează
numărul de marcatori aflaţi la dreapta capului de citire, scade cu o unitate.
Dacă acest contor ajunge la 0, M2 ı̂ncepe mişcarea spre stânga, către primul marcator.
La această revenire, la fiecare marcator, M2 efectuează pe banda paralelă operaţiile date
de M1 pe banda respectivă (inclusiv eventuala mişcare a marcatorului).
În final, M2 schimbă starea ı̂n starea lui M1 . Dacă aceasta este de acceptare, atunci
şi M2 se va opri cu acceptare. q.e.d
Justificarea utilizării unei M T multibandă constă ı̂n simplitatea ei: pentru n mişcări
pe benzile lui M1 sunt necesare aproximativ 2n2 mişcări pe M T M2 care o simulează.
Exemplul 8.8 Limbajul L = {ww̃ | w ∈ {a, b}∗ } poate fi acceptat de o M T cu o bandă
care mişcă capul de citire ı̂nainte şi ı̂napoi pe banda de intrare, controlând simbolurile de
la ambele capete. Pentru o M T cu două benzi, cuvântul de intrare este copiat pe a doua
bandă; apoi, la fiecare mişcare, cele două capete – aflate la cele două extremităţi – ı̂ncep
să se mişte unul spre altul comparând intrările.
Deci, pentru α ∈ L, |α| = k, numărul de mişcări pentru prima maşină Turing este
aproximativ k 2 , iar pentru a doua – numai k.
8.6. MODIFICĂRI ALE MAŞINILOR TURING 165

Maşini Turing nedeterministe şi deterministe


Conform definiţiei, ı̂n general o maşină Turing este nedeterministă: pentru o stare dată
şi un simbol citit pe bandă, maşina are la dispoziţie un număr finit de posibilităţi de
continuare. Fiecare alegere constă dintr-o stare, un simbol de bandă (pentru tipărit) şi o
direcţie de mişcare a capului de bandă. Cuvântul de intrare este acceptat dacă există o
secvenţă de mişcări prin care se ajunge la o stare de acceptare.
Ca şi la automatele finite, folosirea M T nedeterministe nu duce la o capacitate de
acceptare sporită faţă de M T -urile deterministe.

Teorema 8.7 Dacă L este un limbaj acceptat de o M T nedeterministă M1 , atunci L


este acceptat de o M T deterministă M2 .

Demonstraţie: Pentru orice stare şi simbol de intrare al lui M1 , există un număr finit de
alegeri pentru mişcarea următoare; să numerotăm aceste alegeri cu 1, 2, . . . Fie r numărul
maxim de alegeri pentru orice variantă (stare, simbol de intrare). Atunci orice secvenţă
finită de alegeri se poate reprezenta ca un cuvânt peste alfabetul V = {1, 2, . . . , r}.
Bineı̂nţeles, nu orice cuvânt va reprezenta o secvenţă de mişcări (unele situaţii pot
permite mai puţine variante).
M2 va avea 3 benzi.
Pe prima bandă se introduce cuvântul de intrare.
Pe a doua banda, M2 generează – ı̂n ordine crescătoare – cuvinte peste V . Pentru
fiecare astfel de cuvânt generat, M2 va copia pe banda 3 cuvântul de intrare şi va simula
M1 pe această bandă folosind secvenţa de pe banda 2 pentru a dicta mişcările lui M1 ;
dacă M1 ajunge la o stare de acceptare, M2 va accepta de asemenea.
Dacă există o secvenţă de mişcări care duce la acceptarea cuvântului, ea este un cuvânt
din L, deci va fi generată pe banda 2.
Dacă nici o secvenţă de mişcări ale lui M1 nu duce la acceptare, nici M2 nu va accepta
cuvântul de intrare. q.e.d

Maşini Turing multidimensionale


Ca o altă variantă, să considerăm o M T a cărei bandă este (pentru un n fixat), un tablou
n - dimensional de celule, infinit ı̂n toate cele 2n direcţii. În funcţie de stare şi de simbolul
scanat, se schimbă starea, se tipăreşte un nou simbol şi se mişcă capul de citire ı̂n una
din cele 2n direcţii, pe una din cele n axe. Intrarea este iniţială pe una din axe, cu capul
de citire poziţionat la stânga.
La orice moment, numai un număr finit de linii din orice dimensiune conţin elemente
(diferite de blanc) iar numărul acestor elemente este finit.
166 CAPITOLUL 8. LIMBAJE DE TIP 0 ŞI MAŞINI TURING

Teorema 8.8 Dacă L este acceptat de o M T 2 - dimensională M2 , atunci L este acceptat


de o M T M1 de dimensiune 1.

Demonstraţie: Generalizarea teoremei la mai multe dimensiuni este imediată.


M1 va simula banda lui M2 ca ı̂n exemplul de mai jos:

B B B a1 B B B
B B a2 a3 a4 a5 B
a6 a7 a8 a9 B a10 B
B a11 a12 a13 B a14 a15
B B a16 a17 B B B
M2
∗ ∗ BBBa1 BBB ∗ BBa2 a3 a4 a5 B ∗ a6 a7 a8 a9 Ba10 B ∗ Ba11 a12 a13 Ba14 a15 ∗ BBa16 a17 BBB ∗ ∗

M1

Înafara unei benzi dublu infinite, M1 dispune şi de o a doua bandă.


Să presupunem că M2 face o mişcare ı̂n care capul de citire nu părăseşte dreptunghiul
reprezentat pe bandă.
Dacă mişcarea este orizontală, atunci M1 ı̂şi mişcă pur şi simplu capul de citire cu o
poziţie spre stânga sau dreapta, schimbă starea şi tipăreşte (eventual) un simbol; totul
similar lui M2 .
Dacă mişcarea este verticală, M1 foloseşte a doua bandă pentru a reţine poziţia capului
de citire faţă de cel mai din stânga caracter ∗ anterior; apoi el traversează spre dreapta
(dacă mişcarea este ı̂n jos) sau stânga (dacă trebuie mers ı̂n sus) un caracter ∗, după care
repoziţionează capul de citire conform informaţiei reţinute pe banda a doua.
În cazul ı̂n care capul lui M2 se deplasează ı̂nafara dreptunghiului reprezentat pentru
M1 : dacă mişcarea este verticală, se adaugă un nou bloc de blancuri la dreapta sau stânga,
folosind banda a doua pentru a număra lungimea curentă a blocurilor. Dacă mişcarea
este orizontală, M1 foloseşte tehnica de mărire a spaţiului de lucru pentru a adăuga un
blanc la capul din stânga sau dreapta al fiecărui bloc.
Sfârşitul blocurilor este detectat prin ajungerea la ∗∗. q.e.d.

Restricţii
După cum am văzut, toate aceste ı̂ncercări de generalizare ale maşinilor Turing nu au
reuşit să mărească capacitatea lor de acceptare; se poate raţiona şi invers: este posibil
să construim modele restrictive de M T care să păstreze de asemenea clasa L0 de limbaje
acceptate. Dintre diversele modalităţi de restricţie avute ı̂n vedere ı̂n literatură, ne vom
8.6. MODIFICĂRI ALE MAŞINILOR TURING 167

referi cu precădere la acelea care limitează numărul de stări sau de simboluri de bandă.
Un exemplu de rezultat interesant ı̂n această direcţie este următorul: dacă nu există nici
o restricţie asupra alfabetului de bandă, atunci 3 stări şi o bandă sunt suficiente pentru
a accepta orice limbaj recursiv numărabil. (demonstraţia acestei aserţiuni este lăsată ca
exerciţiu).
Relativ la restricţiile alfabetelor de bandă, putem da următoarea teoremă:

Teorema 8.9 Dacă L ⊆ {0, 1}∗ este un limbaj recursiv numărabil, atunci L este acceptat
de o M T cu o bandă, având alfabetul de bandă {0, 1, B}.

Demonstraţie: Fie L = L(M1 ) unde M1 = (Q, {0, 1}, Γ, δ, q0 , B, F ). Să presupunem


2n−1 < |Γ| ≤ 2n ; ı̂n acest fel orice simbol de bandă poate fi codificat folosind n biţi.
Vom construi M T M2 cu alfabetul de bandă {0, 1, B} care să simuleze M1 . Banda lui
M2 conţine o secvenţă de coduri pentru simbolurile lui M1 ; controlul lui M2 reţine stările
lui M1 precum şi poziţia capului de citire al lui M2 modulo n, aşa că M2 poate şti când
se află la ı̂nceputul unui simbol de bandă codificat.
Comportarea lui M2 este simplu de detaliat.
Trebuie clarificată o singură situaţie; anume aceea că un cuvânt de intrare w este o
secvenţă binară care reprezintă exact w – şi nu o codificare a sa. Deci, ı̂nainte de a simula
M1 , M2 trebuie să ı̂nlocuiască w cu codificarea sa, ceea ce se poate realiza prin mărirea
spaţiului de lucru folosind simbolul B; anume, pentru fiecare simbol de intrare – ı̂ncepând
cu cel mai din stânga – secvenţa aflată la dreapta simbolului este deplasată spre dreapta
cu n − 1 poziţii, ı̂n locul lor fiind introdus B (deci fiecare simbol a ∈ {0, 1} este ı̂nlocuit
cu secvenţa aB n−1 ). q.e.d.
Putem aplica aceeaşi tehnică de codificare binară şi ı̂n cazul ı̂n care alfabetul de intrare
nu este {0, 1}; se obţine:

Corolarul 8.1 Dacă L este un limbaj recursiv numărabil, atunci el este acceptat de o
maşină Turing liniară cu o bandă şi alfabetul V = {0, 1, B}.

Teorema 8.10 Orice maşină Turing poate fi simulată de o maşină liniară cu o bandă de
stocare având simbolurile 0 (pentru blanc) şi 1. M T poate tipări 0 sau 1 peste 0 dar nu
poate tipări 0 peste 1.

Demonstraţie: Ideea este de a crea descrierile instantanee succesive al maşinii Turing


originale pe banda unei alte M T . Simbolurile de bandă sunt codificate. Fiecare descriere
instantanee este copiată peste cea veche. q.e.d
168 CAPITOLUL 8. LIMBAJE DE TIP 0 ŞI MAŞINI TURING

8.7 Exerciţii
Exerciţiul 8.1 Fie maşina Turing având funcţia de tranziţie definită

δ B a b c
q0 (q1 , B, d) − − −
q1 (q2 , B, s) (q1 , a, d) (q1 , c, d) (q1 , c, d)
q2 − (q2 , c, s) − (q2 , b, s)

Descrieţi funcţionarea maşinii pentru secvenţele de intrare aacba şi bcbc.

Exerciţiul 8.2 Fie maşina Turing având funcţia de tranziţie definită

δ B a b c
q0 (q1 , B, d) − − −
q1 (q2 , B, d) (q1 , a, d) (q1 , b, d) (q1 , c, s)
q2 − (q2 , b, s) − (q2 , a, s)

Descrieţi funcţionarea maşinii pentru secvenţele de intrare abcab şi abab.

Exerciţiul 8.3 Construiţi o M T cu alfabetul Σ = {a, b, c} care acceptă şiruri din Σ+ cu


cel puţin un 0 c0 , ı̂n care primul caracter 0 c0 este precedat de şirul aaa.

Exerciţiul 8.4 Construiţi o M T peste Σ = {a, b} care acceptă limbajul


L = {abn1 abn2 . . . abnk | k > 0, n1 < n2 < . . . < nk }.

Exerciţiul 8.5 Detaliaţi construcţia M T din Teorema 8.2.

Exerciţiul 8.6 Demonstraţi că orice limbaj recursiv numărabil este acceptat de o maşină
Turing cu o singură stare finală.

Exerciţiul 8.7 Generaţi maşini Turing pentru următoarele limbaje:


L1 = {1, 2, . . . , n}, L2 = {ai | i divizibil cu 3}, L3 = {ww | w ∈ {a, b}+ }

Exerciţiul 8.8 Fie L un limbaj. Dacă L şi L sunt recursiv numărabile, atunci L este
recursiv.

Exerciţiul 8.9 Demonstraţi că orice limbaj independent de context este recursiv.
Bibliografie

[1] Aho, A.V., Ullman, J.D. - The Theory of Parsing, Translation and Compiling, Pren-
tice Hall, Englewood Cliffs, N.J. 1973;

[2] Aho, A.V., Ulmann, J.D. - Principles of Compiler Design, Addison - Wesley, Reading,
Mass., 1977;

[3] Aho, A.V., Sethi R., Ullman, J.D. - Compilers; Principles, Techniques and Tools,
Addison - Wesley, Reading, Mass., 1986;

[4] Atanasiu, A. - Bazele Informaticii pentru anul II seral, Tipografia Universităţii Bu-
cureşti, 1987;

[5] Atanasiu, A. - Automate şi translatori, fascicola I, 1995;

[6] Atanasiu, A. - Arhitectura calculatoarelor, InfoData, Cluj, 2006

[7] Hopcroft, J.E., Ullman, J.D. - Formal Languages and their relation to Automata,
Addison - Wesley, Reading, Mass. 1969

[8] Hopcroft, J.E., Ullman, J.D. - Introduction to Automata Theory, Languages and
Computation, Addison - Wesley, Reading, Mass. 1979

[9] Jucan, T. - Limbaje formale şi automate, Ed. Matrix Rom, Bucureşti 1999

[10] Linz, P. - An Introduction to Formal languages and Automata, Jones and Bartlett
Publ., 2001

[11] Păun, Gh. - Mecanisme generative ale proceselor economice, Ed. Tehnică, 1980;

[12] Păun, Gh. - Probleme actuale ı̂n teoria limbajelor formale, Ed. Ştiinţifică şi Enciclo-
pedică, Bucureşti 1984;

[13] Rozenberg, G., Salomaa, A - Handbook of Formal Languages, vol 1, Springer Verlag,
1997

169
170 BIBLIOGRAFIE

[14] Salomaa, A - Formal Languages, Academic Press, N.Y. 1973

[15] Sipser, M. - Introduction to the Theory of Computation, Intern. Thomson Publ. 1997

[16] Sudkamp, Th. - Languages and Machines, Addison Wesley, 1997

View publication stats

S-ar putea să vă placă și