Sunteți pe pagina 1din 229

Cuprins

1 Ierarhia lui Chomsky. Generari de limbaje 3


1.1 Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Generari de limbaje . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 Exercitii propuse spre rezolvare . . . . . . . . . . . . . . . . . . . . . . 24
2 Automate nite 38
2.1 Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.2 Sumatorul binar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.3 Relatiile A;s0 si L . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.4 Constructia automatului minimal . . . . . . . . . . . . . . . . . . . . . 54
2.5 Legatura dintre automate nite deterministe si cele nite nedeterministe 61
2.6 Legatura dintre limbaje regulate si automate nite . . . . . . . . . . . 65
2.7 Lema de pompare Bar-Hillel . . . . . . . . . . . . . . . . . . . . . . . . 71
2.8 Sisteme tranzitionale . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
2.8.1 Un algoritm e cient pentru conversia dintre un sistem tranzitional
si un automat nit nedeterminist . . . . . . . . . . . . . . . . . 76
2.9 Expresii regulate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
2.10 Exercitii propuse spre rezolvare . . . . . . . . . . . . . . . . . . . . . . 95
3 Limbaje independente de context 104
3.1 Automate pushdown nedeterministe . . . . . . . . . . . . . . . . . . . 104
3.1.1 Un algoritm e cient pentru conversia dintre un automat push-
down nedeterminist si o gramatica de tip 2 . . . . . . . . . . . 112
3.2 Lema de pompare pentru limbaje de tip 2 . . . . . . . . . . . . . . . . 116
3.3 Forma normala Chomsky . . . . . . . . . . . . . . . . . . . . . . . . . 124
3.4 Forma normala Greibach . . . . . . . . . . . . . . . . . . . . . . . . . . 127
3.5 Forma normala operator . . . . . . . . . . . . . . . . . . . . . . . . . . 132
3.5.1 Un algoritm e cient pentru conversia dintre o gramatica ^n
forma normala Chomsky si o gramatica ^n forma normala operator134
3.6 Limbaje independente de context deterministe . . . . . . . . . . . . . . 136
3.7 Probleme decidabile ^n clasa L . . . . . . . . . . . . . . . . . . . . . . 138
2

3.7.1 Un algoritm e cient de analiza sintactica pentru gramatici ^n


forma normala Chomsky . . . . . . . . . . . . . . . . . . . . . . 145

1
2

3.8 Problema echivalentei a doua gramatici independente de context . . . 152


3.9 Exercitii propuse spre rezolvare . . . . . . . . . . . . . . . . . . . . . . 156
4 Masini Turing si automate liniar marginite 163
4.1 Masini Turing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
4.2 Automate liniar marginite . . . . . . . . . . . . . . . . . . . . . . . . . 178
4.3 Legatura dintre gramaticile dependente de context si gramaticile mono-
tone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
4.4 Exercitii propuse spre rezolvare . . . . . . . . . . . . . . . . . . . . . . 186
Capitolul 1

Ierarhia lui Chomsky.


Generari de limbaje
1.1 Introducere
Termenul de gramatica a fost atribuit sistemelor generative din respect pentru lingvis-
tul si losoful Noam Chomsky . Domnia sa este primul care a folosit aceste sisteme
1

generative pentru de nirea unei gramatici \sintactice" pentru limba engleza. Printre
alte rezultate referitoare la gramaticile formale, ^n anul 1956, acesta le clasi ca pe
tipuri, clasi care care ^i poarta numele.
De nitia 1.1.1 Numim alfabet o multime nita si nevida (elementele sale le numim
simboluri). Vom numi cuv^ant peste V o aplicatie p : f1; 2; :::; ng ! V; numarul
n = jpj numindu-se lungimea cuv^antului p:
Notatia 1.1.1 Prin V n = fp=pS : f1; 2; :::; ng ! VSg ^ntelegem multimea cuvintelor
de lungime n: Notam cu V  = V n si cu V = V n:
+

n 0 n 1

De nitia 1.1.2 Se numeste gramatica (sau sistem generativ) un 4-uplu G =


(VN ; VT ; x ; P ), unde:
0

 VN este o multime nita si nevida, numita multimea neterminalilor (vari-


abilelor);
 VT este o multime nita si nevida, numita multimea terminalilor, astfel
^nc^at:
{ VN \ VT = ;;
{ V = VN [ VT se numeste alfabetul gramaticii G;
1 Profesor la Departamentul de lingvistica si loso e, Massachusetts Institute of Technology, Cam-
bridge, U.S.A.

3
Introducere 4

 x 2 VN este simbolul de start al gramaticii G;


0

 P  V   VN  V   V  este multimea regulilor de generare (productiilor).


Notatia 1.1.2 Pentru o gramatica G; o regula din P se noteaza cu (u; v) sau u ! v:
De nitia 1.1.3 Fie G = (VN ; VT ; x ; P ) o gramatica arbitrara. Se numeste
derivare directa (derivare ^ntr-un pas) relatia binara =G) V   V  de nita astfel:
0

( ; ) 2 =) daca 9u!v2P astfel ^nc^at = 1 u 2 ; = 1 v 2 :


G
Notatia 1.1.3 Pentru ( ; ) 2 =) se utilizeaza de obicei notatia =) :
G G

De nitia 1.1.4 ^Inchiderea re exiva si tranzitiva a relatiei de derivare directa se


numeste derivare. Mai precis, vom spune ca se deriveaza din ^n G; notatie
=) , daca
G
 = sau
 9 n  1 si 9 u ; u ; :::; un astfel ^nc^at = u ; = un si ui =G) ui ; 8 i =
1 2 1 +1

1; n 1:
De nitia 1.1.5 Limbajul generat de gramatica G este L(G) = fp=p 2 VT ; 9 x =)
G 0

pg:
De nitia 1.1.6 Fie G = (VN ; VT ; x ; P ) o gramatica arbitrara. Vom nota prin
F P (G) = f = 2 V  ; 9 x =) g multimea formelor propozitionale pen-
0

G 0


tru gramatica G: Mai general, putem considera F P ( ; G) = f = =) ; 2
G
V  g; 8 2 V  :
Observatia 1.1.1 De nitia 1.1.6 este o generalizare a De nitiei 1.1.5 deoarece
L(G) = F P (G) \ VT = F P (x ; G) \ VT :
0

De nitia 1.1.7 (Ierarhia lui Chomsky)


 gramatica de tip 0: nu are nici un fel de restrictie asupra regulilor dec^at cele
din De nitia 1.1.2; se mai numesc si gramatici generale;
 gramatica de tip 1: regulile sale sunt de tipul u x v ! u r v, unde u; v 2 V  ; x 2
VN ; r 2 V sau de forma x ! , caz ^n care x nu mai apare ^n partea
+
0 0

dreapta a vreunei reguli din gramatica; se mai numesc si gramatici sensibile la
(dependente de) context;
 gramatica de tip 2: regulile sale sunt de tipul x ! r, unde x 2 VN ; r 2 V  ; se
mai numesc si gramatici libere (independente) de context;
Generari de limbaje 5

 gramatica de tip 3: regulile sale sunt de tipul x ! p x0 sau x ! p; unde x; x0 2


VN ; p 2 VT ; se mai numesc si gramatici liniare la dreapta; analog se pot de ni
gramaticile liniare la st^anga, care contin reguli de tipul x ! x0 p sau x ! p;
unde x; x0 2 VN ; p 2 VT .

De nitia 1.1.8 Un limbaj L este de tipul j 2 f0; 1; 2; 3g daca exista o gramatica G


de tipul j astfel ^nc^at L = L(G) (adica genereaza limbajul L).
Observatia 1.1.2 Din De nitiile 1.1.7 si 1.1.8, rezulta ca un limbaj L de tip 3 este
si de tip 2; 1 sau 0: ^In general, se cauta j maximal astfel ^nc^at exista o gramatica G
de tip j ce satisface L = L(G).
Observatia 1.1.3 Not^and cu Lj multimea tuturor limbajelor de tipul j; j 2
f0; 1; 2; 3g; se observa imediat ca L  L si L  L : Incluziunea L  L este de
0 1 2 3 1 2

asemenea adevarata, dar demonstratia ei necesita c^ateva rezultate auxiliare [9, 11].
Aceste incluziuni justi ca denumirea de ierarhia lui Chomsky.

1.2 Generari de limbaje


^In aceasta sectiune vom prezenta exercitii referitoare la generari de limbaje cu ajutorul
gramaticilor. Unele dintre ele vor utile la demonstrarea unor rezultate importante.
De exemplu,
 gramaticile din Exercitiile 1.2.1, 1.3.5, de exemplu, genereaza limbaje indepen-
dente de context, dar care nu sunt regulate; de aici rezulta incluziunea stricta
L L ;
3 2

 gramaticile din Exercitiile 1.2.2 (sau 1.2.3, 1.2.4) si 1.2.5 genereaza limbaje care
sunt sensibile la context, dar care nu sunt independente de context; de aici
rezulta incluziunea stricta L  L ;
2 1

 gramaticile din Exercitiile 1.2.2 (sau 1.2.3, 1.2.4) genereaza un limbaj care se
poate obtine prin intersectia a doua limbaje independente de context (generate
de gramaticile din Exercitiile 1.3.6 si 1.3.7); cum, ^nsa, acesta nu este indepen-
dent de context, putem deduce rezultatul: Clasa limbajelor independente de
context nu este ^nchisa la intersectie.
Notatia 1.2.1 Fie gramatica G: Facem urmatoarele conventii:
i
 Prin =) vom ^ntelege ca derivarea directa a folosit regula cu numarul i:
G
( )

i;
 Prin =) vom ^ntelege ca derivarea s-a facut aplic^and i pasi (reguli); daca
G
i = 1;
atunci poate sa lipseasca;
 Prin =G) vom ^ntelege ca derivarea foloseste sirul de reguli (analizarea sintac-
tica)  ;
Generari de limbaje 6

 Prin =) vom ^ntelege ca se aplica mai multe reguli, dar cel putin una;
+

G
 Prin =) vom ^ntelege ca se aplica mai multe reguli, posibil niciuna;
G
i ;j
 Prin =) vom ^ntelege ca se aplica regula i de j ori;
( )

G
De obicei, egalitatea L = L(G) se demonstreaza prin dubla incluziune. Astfel,
dat limbajul L; dupa constructia gramaticii (de fapt, ^n timpul constructiei acesteia)
trebuie sa m convinsi ca toate cuvintele din limbaj sunt generate (L  L(G)) si
abia apoi sa veri cam ca se genereaza numai cuvinte din L (L(G)  L).
^In general, incluziunea L  L(G) este mai simpla si se demonstreaza prin
\inductie dupa un parametru dependent de limbaj", ^n timp ce incluziu-
nea L(G)  L -cea care creeaza probleme- se poate demonstra folosind \tehnica
invariantilor" (inductie dupa un parametru dependent de gramatica, cum
ar lungimea derivarii).
Exercitiul 1.2.1 Fie gramatica G = (fx g; fa; bg; x ; fx
0 0 0 ! a b; x ! a x bg):
0 0

a) sa se determine tipul gramaticii G;


b) sa se demonstreze ca L(G) = fan bn =n  1g:
Solutie
a) Se deduce imediat, folosind De nitia 1.1.7, ca gramatica G este de tip 2;
b) Fiind vorba de multimi, vom proceda prin dubla incluziune.
: Sa demonstram ca
(1) L(G)  fan bn =n  1g:


Cu alte cuvinte, trebuie sa aratam ca exista o derivare x =) an bn ; 8 n  1:


0
G
! Presupunem ca nu am stiut care este limbajul generat de G: Atunci, ar trebuit
sa facem mai ^nt^ai o cercetare prin inductie. Sa determinam, pentru ^nceput,
derivarile de lungime 1. Avem situatiile: x0 =) a b sau x0 =) a x0 b: Consider^and
(1) (2)

G G
derivari de lungime 2, obtinem x0 =) a x0 b =) a a x0 b b sau x0 =) a x0 b =) a a b b:
(2) (2) (2) (1)

G G G G
Acum putem sa formulam a rmatia:

(2) fak x bk ; ak bk g  fw= w 2 V  ; 9 x =k;G) wg


0 0

Vom demonstra aceasta prin inductie dupa k (ce coincide ^n acest caz cu lungimea
derivarii).
Baza: Pentru k = 1 si k = 2, s-a facut veri carea mai sus;
Pasul inductiv: Presupunem a rmatia adevarata pentru k = n si sa o demonstram
pentru k = n + 1: Astfel, avem derivarile x =n;)  an x bn =) an bn sau x =n;)
(1) 
+1 +1
0
G 0
G 0
G
an x0 bn =) an+1 x0 bn+1 ; adica exact a rmatia (2) pentru k = n + 1:
(2)

G
Generari de limbaje 7

Cu aceasta, ind veri cate cele doua etape ale inductiei matematice, rezulta in-
cluziunea (1):
: Sa demonstram ca
(3) L(G)  fan bn =n  1g:
Cu alte cuvinte, trebuie sa aratam ca an bn sunt singurele cuvinte generate de gra-
matica G: ^In acest sens, avem doua moduri de abordare:
 plecam de la simbolul de start si aratam ca derivarile din a rmatia (2) sunt
singurele posibile, adica
(4) fw= w 2 V  ; 9 x =k;) wg  fak x bk ; ak bk g
0
G 0

 sau vom demonstra urmatoarele:


{ (i) L(G)  fa; bg ; +

{ (ii) ^n orice forma propozitionala , simbolul a apare ^naintea lui b (notatie
a < b; formal, a < b () a = (i); b = (j ) cu i < j );
{ (iii) N (a) = N (b); 8 2 F P (G): 2

Vom aborda problema prin primul mod, adica vom demonstra a rmatia (4) prin
inductie dupa k:
Baza: Pentru k = 1; conform celor doua reguli ale gramaticii, este clar ca fw= w 2
V  ; 9 x =) wg  fa x b; a bg;
0
G 0

Pasul inductiv: Presupunem ca a rmatia (4) este adevarata pentru k = n si o
demonstram pentru k = n + 1:
 an x bn folosind regulile 1 si 2; obtinem exact doua
Astfel, din derivarea x =n;)
G 0 0

forme propozitionale. Este vorba de an x bn si an bn : Derivarea x =n;)


+1 +1 +1 +1
 an bn
0 0
G
nu se mai poate continua. Rezulta a rmatia (4) pentru k = n + 1:
Fiind ^ndeplinite cele doua etape ale inductiei matematice, rezulta ca a rmatia
(4) este adevarata.
Cu aceasta, concluzionam ca L(G) = fan bn=n  1g:
Exercitiul 1.2.2 Fie gramatica G = (fx ; x ; x g; fa; b; cg; x ; P ); unde multimea de
0 1 2 0

reguli P este:
1. x ! a b c
0

2. x ! a x b c
0 1

3. x b ! b x
4. x c ! x b c c
1 1

1 2

5. b x ! x b
6. a x ! a a x
2 2

2 1

2 N (a) reprezinta numarul de aparitii distincte ale simbolului a ^n forma propozitionala :
Generari de limbaje 8

7. a x2 ! a a
a) sa se determine ce tip de gramatica este G;
b) sa se demonstreze ca L(G) = fan bn cn = n  1g:
Solutie a) Se deduce imediat, folosind De nitia 1.1.7, ca gramatica G este de tip

~
0 (din cauza regulilor 3 si 5 nu este de tip 1);
Se stie ca: \Orice gramatica monotona 3 se poate reduce la o gramatica sensibila
la context" (amanunte ^n Sectiunea 4.3); cum gramatica din Exercitiul 1.2.2 este
monotona, rezulta ca exista G0 de tip 1 echivalenta cu G; deci limbajul generat de G
este de tip 1; asadar, putem spune ca gramatica G este de tip 0; iar limbajul generat
de G este de tip 1 (vom vedea mai t^arziu ca acest limbaj nu este de tip 2):
b) Fiind vorba de multimi, vom proceda prin dubla incluziune.
: Sa demonstram ca
(1) L(G)  fan bn cn = n  1g:
Cu alte cuvinte, trebuie sa aratam ca exista o derivare x =) an bn cn ; 8 n  1:
G 0

Procedam ca la Exercitiul 1.2.1, adica vom face mai ^nt^ai o cercetare inductiva.
 Pentru n = 1 se obtine: x =) a b c sau x =) a x b c:
0
(1)

G 0
(2)

G 1

 Pentru n = 2 obtinem: x =) a x b c =) a b x c =) a b x b c c =) a x b b c c:
0
(2)

G 1
(3)

G 1
(4)

G 2
(5)

G 2

De aici, putem continua cu a x b b c c =) a a b b c c sau cu a x b b c c =)


(7) (6)

G 2
G 2

a a x b b c c:
1

 Pentru n = 3; ^n mod analog, se observa ca se aplica succesiunea de reguli


2; 3; 4; 5; 6; 3; 3; 4; 5; 5; si se ajunge^n a a x b b b c c c; de unde, cu regula 7 obtinem
2

a b c ; sau cu regula 6 obtinem a x b c :


3 3 3 3
1
3 3

Astfel, intuim a rmatia:


k2 +k 1;
(2) fak x bk ck ; ak bk ck g  fw= w 2 V  ; 9 x
1 0 =) wg
G
Vom demonstra aceasta prin inductie dupa k:
Baza: Pentru k = 1; k = 2 si k = 3; s-a facut veri carea mai sus;
Pasul inductiv: Presupunem a rmatia (2) adevarata pentru k = n si o vom
2
demonstra pentru k = n + 1: Astfel, avem derivarile x n =n) ; an x bn cn =)
;n + 1 (3)
0
G 1
G
;n
an bn x cn =) an bn x b cn =) an x bn cn ; de unde putem aplica regula 6
(4) (5)
+1 +1 +1
1
G 2
G 2

sau 7: Deci, p^ana acum, avem n + n 1 + n + 1 + n = (n + 1) + n 1 derivari de un


2 2

n 2 n ; n
pas. Deci x =) a x bn cn =G) an x bn cn ; iar a doua derivare
( +1) + 2 (6)
+1 +1 +1 +1 +1
0
G 2 1

3 O gramatica este monotona daca regulile sale sunt de forma ! ; unde j j  j j:


Generari de limbaje 9

n 2 n ; n
este x =) a x bn cn =) an bn cn adica exact a rmatia (2) pen-
( +1) + 2 (7)
+1 +1 +1 +1 +1
0
G 2
G
tru k = n + 1:
Cu aceasta, ind veri cate cele doua etape ale inductiei matematice, rezulta
incluziunea (1): ^Inainte de a trece la cealalta incluziune, vom preciza cum am
dedus numarul k + k 1. Am considerat sirul (ak )k , dat prin a = 1 si
2
1 1

ak = ak + k + 1 + k + 1 (^nsemn^and k aplicari a regulii 3, apoi o aplicare a regulii


+1

4; dupa care k aplicari a regulii 5 si ^n sf^arsit o aplicare a regulii 6 sau 7). Deci avem:

a =11

ak = ak + 2k + 2
+1

D^and valori lui k 2 f1; 2; :::; n 1; ng si reduc^and \telescopic" termenii din membrul
st^ang cu cei din membrul drept, se obtine an = 1 + 2(n 1) + 2(1 + 2 + ::: + n 1) =
1 + 2(n 1) + n(n 1) = n + n 1: 2

: Sa demonstram ca (3) L(G)  fan bn cn =n  1g: Analog cu Exercitiul 1.2.1,
avem doua moduri de abordare:
 aratam ca derivarile din a rmatia (2) sunt singurele posibile, adica vom
demonstra a rmatia:
2
(4) fw= w 2 V  ; 9 x k =k) ; wg  fak x bk ck ; ak bk ck g
+ 1
0
G 1

 sau vom considera invariantii:


(i) L(G)  fa; b; cg ; +

(ii) ^n orice forma propozitionala avem: a < x < c; a < x < c; a < b < c;
1 2

(iii) N (a) + N (x ) = N (b) = N (c); 8 2 F P (G):


2

Vom demonstra (4) prin inductie dupa k:


Baza: Pentru k = 1; conform celor doua reguli ale gramaticii, este clar ca fw= w 2
V  ; 9 x =) wg  fa x b c; a b cg;
0
G 1

Pasul inductiv: Presupunem ca a rmatia (4) este adevarata pentru k = n si o
demonstram pentru k = n + 1: Mai ^nt^ai, sa observam ca derivarea x =) an bn cn
G 0

nu se mai poate continua. Consideram acum cealalta derivare:


2 n
x n =) an x bn cn
+ 1
0
G 1

Singura regula care se poate aplica este 3: Obtinem:


an x bn cn =G) an b x bn cn
(3)
1
1 1

La fel, singura regula care se poate aplica este 3; de altfel pe care o vom aplica de
n 1 ori. Obtinem:
n
an b x bn cn = 1 ) an bn x cn
1

G
1
1
Generari de limbaje 10

Singura regula care se poate aplica este 4: Deducem:


an bn x cn =) an bn x b c c cn
(4)
1
1
G 2

Acum, singura regula care se poate aplica este 5; pe care o vom aplica de n ori:
an b n x b cn +1
=n) an x bn cn +1 +1
2
G 2

Abia acum avem \nedeterminism", adica putem aplica regula 6 sau 7: Rezulta, deci,
singurele formele propozitionale de forma an x bn cn si an bn cn : +1
1
+1 +1 +1 +1 +1

Numarul de pasi ai derivarii pentru care putem obtine formele propozitionale


an x bn cn si an bn cn este egal cu n + n 1+ n +1+ n +1 = n +3n +1 =
+1
1
+1 +1 +1 +1 +1 2 2

(n + 1) + (n + 1) 1:
2

Cu aceasta, a rmatia (4) este demonstrata.


Astfel, L(G) = fan bn cn = n  1g:
Exercitiul 1.2.3 Fie gramatica G = (fx ; x ; x g; fa; b; cg; x ; P ); unde multimea de
0 1 2 0

reguli P este:
1. x ! a x x x
0 0 1 2

2. x ! a x x
3. x x ! x x
0 1 2

2 1 1 2

4. a x ! a b
5. b x ! b b
1

6. b x ! b c
2

7. c x ! c c
2

a) sa se determine tipul gramaticii G;


b) sa se demonstreze ca L(G) = fan bn cn = n  1g:
Solutie
a) Datorita regulii 3, rezulta ca gramatica este de tip 0, ^nsa ind monotona, se
poate reduce la una de tip 1. Oricum, limbajul generat este de tip 1.
b) Vom demonstra ca
L(G) = fan bn cn =n  1g:
(1)
: Sa gasim o derivare de forma x =G) an bn cn ; 8 n  1: Mai ^nt^ai, vom demonstra
0

prin inductie dupa k a rmatia:


(2) fak x (x x )k ; ak (x x )k g  f = x =k;) ; 2 (VN [ VT ) g:
0 1 2 1 2 0
G

Baza: Pentru k = 1 avem x0 =) a x0 x1 x2 sau x0 =) a x1 x2 ;


(1) (2)

G G
Pasul inductiv: Presupunem a rmatia adevarata pentru k = m si o demonstram
pentru k = m + 1: Folosind ipoteza inductiva si regulile 1 sau 2, obtinem:
m; m
x = ) a x (x x )m =) am x (x x )m sau
0
G 0 1 2
(1)

G
+1
0 1 2
+1
Generari de limbaje 11

m; m
x =) a x (x x )m =) am (x x )m
0
G 0 1 2
(2)

G
+1
1 2
+1

Astfel, demonstratia a rmatiei (2) s-a ^ncheiat.


^In continuare, vom arata ca, consider^and forma propozitionala ak (x x )k ; 1 2

obtinem la ak bk ck : Mai precis, vom demonstra a rmatia


(3) fak bk ck j k  1g  f = ak (x x )k =G) g; 1 2

; :::; 3}; 4; 5| ; 5{z


unde  = 3| ; 3{z ; :::; 5}; 6; 7| ; 7{z
; :::; 7} :
Ck2 ori k 1ori k 1 ori
Astfel, avem derivarea:
;C 2 ;k ;k
ak (x x )k =) ak xk xk =) ak b xk xk =) ak bk xk =) ak bk c xk =)
(3) k (4) (5) 1 (6) (7) 1
1 1
1
G 2
G 1
G2
G 1 2
G 2 2

ak bk ck :
Numarul de pasi care s-a facut ^n derivarea precedenta este k k +1+ k 1+1+ (
2
1)

k 1 = k k : Daca dorim sa vedem c^ati pasi sunt ^n total (adica, pentru derivarea
( +3)

x =) ak bk ck ), adunam k; si obtinem k k pasi. Putem astfel spune ca s-au facut
2
( +5)
0
G 2

O(k ) pasi (derivari directe) pentru obtinerea cuv^antului terminal.


2

Ca o observatie, gramaticile din Exercitiile 1.2.2 si 1.2.4 au k + k 1, respectiv 2

kk
( +3)
2
1, pasi p^ana la obtinerea cuv^antului ak bk ck ; deci tot O(k ): Deci \cea mai 2

buna" dintre acestea este cea din Exercitiul 1.2.4. Ca tema, studiati si gramaticile
echivalente din Exercitiul 1.3.18.
: Vom demonstra aceasta incluziune folosind invarianti. Din derivarile precedente,
se deduce destul de usor ca putem alege invariantii:
(i) L(G)  fa; b; cg ; +

(ii) daca N (x ) = 0 atunci a < x ; b < x ; a < b; b < x ; c < x ; b <


0 1 1 2 2

c; 8 2 F P (G);
(iii) N (a) = N (x ) + N (b) = N (x ) + N (c); 8 2 F P (G):
1 2

^Inainte de a trece la demonstrarea lor, sa observam ca relatiile (i), (ii) si (iii) implica
L(G)  fan bn cn =n  1g: Din (i), deducem ca L(G) contine numai cuvinte peste
fa; b; cg: ^In ceea ce priveste (ii), cazul c^and N (x ) 6= 0; lucrurile stau putin diferit. 0

Initial se aplica de un numar de ori regula 1 (caz ^n care N (x ) = 1), apoi regula 2 0

(caz ^n care N (x ) = 0). Aceasta derivare este singura posibila la ^nceput, deoarece
0

x nu apare ^n partea dreapta dec^at a regulii 1 (si este o singura aparitie). Deci, se
0

ajunge \determinist" la forma propozitionala = ak (x x )k pentru care N (x ) = 0; 1 2 0

deci de acum ^nainte ne ocupam de acest caz. Astfel, din a < b si b < c; 8 2
F P (G); rezulta ca simbolurile a apar ^naintea lui b; care, la r^andul lor, apar ^naintea
simbolurilor c: Cum L(G) contine numai cuvinte terminale, rezulta ca lu^and ^n (iii)
N (x ) = 0 si N (x ) = 0; obtinem N (a) = N (b) = N (c): Deci, avem L(G) 
1 2

fan bn cn = n  1g:
Trecem acum la demonstrarea invariantilor.
(i) Imediat, din VT (G) = fa; b; cg si din De nitia 1.1.5;
Generari de limbaje 12

(ii) Vom demonstra cele sase relatii prin inductie dupa lungimea derivarii, pe care
o notam cu k:
Baza: Pentru k = 1, avem x =) a x x x sau x =) a x x , deci pentru
(1) (2)
0
G 0
G 1 2 0 1 2

formele propozitionale 2 fa x x x ; a x x g se observa ca avem a < x ; x <


0 1 2 1 2 0 0

x ; a < x ; b < x ; a < b; b < x ; c < x ; b < c:


1 1 1 2 2

Pasul inductiv: Presupunem a rmatia (ii) adevarata pentru k = n > 1 si o


demonstram pentru k = n + 1: Punem ^n evidenta ultimul pas al derivarii. Deci
x =n;)  ; si, din ipoteza inductiva, rezulta ca pentru forma propozitionala ; avem
0
G
a < x ; b < x ; a < b; b < x ; c < x ; b < c: Dar ultimul pas =) se
1 1 2 2
G
obtine aplic^and una din regulile gramaticii. Se veri ca imediat ca cei sase invarianti
ram^an adevarati si pentru b (trebuie luate ^n considerare sapte cazuri, deoarece avem
sapte reguli). De exemplu, presupunem ca ultima regula aplicata este 6: Invariantii
a < x ; b < x ; a < b; b < x ; c < x sunt adevarati deoarece simbolurile
1 1 2 2

implicati nu apar unul dupa altul ^n partea dreapta a reguli 6. Invariantul b < c este
adevarat deoarece b apare ^naintea lui c ^n partea dreapta a regulii 6.
Analog, se demonstreaza si celelalte cazuri.
(iii) La fel, vom utiliza inductie dupa lungimea derivarii (pe care o notam cu k).
Baza: Pentru k = 1; obtinem formele propozitionale 2 fa x x x ; a x x g: Se 0 1 2 1 2

veri ca imediat ca are loc N (a) = N (x ) + N (b) = N (x ) + N (c):


Pasul inductiv: Presupunem (iii) adevarata pentru 8 2 F P (G) astfel ^nc^at
1 2

x =n;)  si sa demonstram pentru 8 2 F P (G); x n=); : Este clar ca din +1
0
G G 0

n ;
x =) rezulta ca exista 2 (V [ V ) astfel ^nc^at
+1
N T +
0
G
 =) :
x =n;)
0
G G
Din ipoteza inductiva, avem
N (a) = N (x ) + N (b) = N (x ) + N (c):
1 2

Dar =) ^nseamna aplicarea unei reguli din G: De exemplu, daca se aplica regula
G
1, avem N (a) = N (a) + 1; N (x ) = N (x ) + 1; N (x ) = N (x ) + 1; si, deci, ^n
1 1 2 2

nal, obtinem
N (a) = N (x ) + N (b) = N (x ) + N (c):
1 2

Analog se veri ca si pentru celelalte reguli. Asadar, am demonstrat (iii), deci inclu-
ziunea L(G)  fan bn cn = n  1g este aratata.
Exercitiul 1.2.4 Fie gramatica G = (fA; B g; fa; b; cg; A; P ); unde multimea de re-
guli P este:
1. A ! a b c
2. A ! a A B
3. b B ! b b c
4. c B ! B c
Generari de limbaje 13

a) sa se determine tipul gramaticii G;


b) sa se determine L(G):
Solutie
a) Se deduce imediat, folosind De nitia 1.1.7, ca gramatica G este de tip 0 (din
cauza regulii 4 care nu este de tip 1); dar, utiliz^and observatia de la Exercitiul 1.2.2
(gramatica G ind monotona), rezulta ca exista o gramatica dependenta de context
echivalenta cu ea; concluzionam ca desi gramatica G este de tip 0; limbajul L(G) este
de tip 1;
b) Pentru a intui limbajul generat de gramatica G; vom face mai ^nt^ai o cercetare
prin inductie dupa lungimea derivarii.
Astfel:
 A =G) a b c
(1)

 A =G) a A B =G) a a b c B =G) a a b B c =G) a a b b c c


(2) (1) (4) (3)

 A =G) a A B =G) a a A B B =G) a a a b c B B =G) a a a b B c B =G) a a a b B B c =G)


(2) (2) (1) (4) (3) (3)

a a a b b c B c =) a a a b b B c c =) a a a b b b c c c
(4) (3)

G G
Putem astfel presupune ca
(1) L(G) = fan bn cn = n  1g:
Ca de obicei, procedam prin dubla incluziune.
: Demonstram ca an bn cn 2 L(G): Sa gasim deci o derivare A =G) an bn cn ; 8 n  1:
Mai ^nt^ai, vom demonstra prin inductie dupa k a rmatia:
 wg;
(2) fak b c B k ; ak A B k g  fw=A =k;)
1
8 k 2 N :
G

Baza: Pentru k = 1 avem A =) a b c sau A =) a A B:


(1) (2)

G G
Pasul inductiv: Presupunem a rmatia (2) adevarata pentru k = m si o demon-
stram pentru k = m + 1: Folosind ipoteza inductiva si regulile 1 sau 2; obtinem:
m; m m; m
A= )
G
a A B m =) am b c B m sau A =
G
(1)
+1
) a A B m =G) am A B m .
G
(2)
+1 +1

Astfel, demonstratia a rmatiei (2) s-a ^ncheiat.


^In continuare, vom demonstra prin inductie dupa j a rmatia:
(3) ak b c B k 1
=) ak bj cj B k j ; 8 j; 1  j  k;
G
unde  este sirul de derivari 4; 3; 4; 4; 3; 4; 4; 4; 3; :::; 4| ; 4{z
; :::; 4}; 3:
j ori 1
Generari de limbaje 14

Baza: Cazul j = 1 este banal;


Pasul inductiv: Presupunem a rmatia (3) adevarata pentru j = m si o demon-
stram pentru j = m + 1: Folosind ipoteza inductiva si regulile 4 si 3 (regula 4 aplicata
de m ori), obtinem:
;m
ak b c B k =) ak bm cm B k m =) ak bm cm B c B k m =)
(4) (4) 1
1 1 1

G G G
;m
=) ak bm B cm B k m =) ak bm cm B k m :
(4) 1 (3)
1 +1 +1 1

G G
Fiind demonstrate cele doua etape ale inductiei matematice, rezulta ca a rmatia (3)
este adevarata. Particulariz^and acum j = k ^n relatia (3); obtinem derivarea
(4) ak b c B k =) ak bk ck :
1

G
Dar, din relatia (2); rezulta ca exista derivarea
(5) A =) ak b c B k : 1

Din (4) si (5) rezulta A =) ak bk ck :


G
: Sa demonstram ca (6) L(G)  fan bn cn =n  1g: Analog cu Exercitiul 1.2.1,
avem doua moduri de abordare:
 aratam ca toate derivarile posibile corespunzatoare neterminalului A conduc
numai la cuvinte de forma an bn cn ; n  1;
 sau vom considera invariantii:
(i) L(G)  fa; b; cg ; +

(ii) ^In orice forma propozitionala avem: a < A < B; b < B; a < b < c;
(iii) N (a) = N (B ) + N (b) = N (B ) + N (c); 8 2 F P (G):
Pentru simplitate, vom proceda prin prima metoda. Plecam de la simbolul de
start. Putem aplica doar regulile 1 sau 2. Deci putem ajunge la formele propozitionale
a b c sau a A B: Din a b c nu mai putem deriva nimic si se obtine incluziunea (6) pentru
n = 1:
Pentru a A B nu se mai poate aplica dec^at 1 sau 2: Deoarece aplicarea regulii 1
implica faptul ca nu se mai poate aplica apoi regula 2, rezulta ca putem presupune,
fara a restr^ange generalitatea, ca se aplica regula 2 de c^ateva ori, sa zicem de k ori,
si apoi se aplica regula 1: Mentionam ca pe parcursul aplicarii regulii 2 nu se puteau
aplica regulile 3 si 4: Deci am obtinut forma propozitionala:
ak b c B k 1
Generari de limbaje 15

Vom demonstra ca de aici, vom deduce, ca unic cuv^ant, ak bk ck : ^In mod unic, se
poate aplica doar regula 4; si obtinem ak b B c B k : Acum se pot aplica doar regulile 2

3 sau 4: Obtinem formele propozitionale


ak b b c c B k 2
sau ak b B B c B k 3

Pentru rigurozitate, vom demonstra prin inductie dupa m  0, relatia (7)


f = ak b c B k =m;G) ; 2 (VN [VT ) g  fak bi1 B j1 ck1 B j2 ck2 :::ck 1 B j c B k m =
1 +1 s s

i = k + k + ::: + ks ; m = j + j + ::: + js + i g
1 1 2 1 1 2 1

Baza: Se veri ca imediat pentru m = 0 ca are loc relatia (7);
Pasul inductiv: Presupunem relatia (7) adevarata pentru m si o demonstram
pentru m + 1. Astfel, avem derivarea:
m; k i1
k b c B k = ) a b B j1 ck1 B j2 ck2 :::ck 1 B j c B k m ;
1

G
+1 s s

unde i = k + k + ::: + ks
1 1 2 1 si m = j + j + ::: + js + i : Este clar ca putem aplica
1 2 1

regula 3 sau regula 4.


 regula 3 se poate aplica ^n mod unic si obtinem ak bi1 c B j1 ck1 B j2 ck2 ::: +2 1

ck 1 B j c B k m : Notam i0 = i +1; j 0 = 0; k0 = 1; j 0 = j 1; k0 = k ; j 0 =
s s

j ; :::; ks0 = ks ; js0 = js : Sa veri cam conditiile din pasul inductiv. Avem
1 1 1 1 2 1 2 1 3

i0 = 1+ i = 1+ k + k + :::ks = k0 + k0 + ::: + ks0 si m = j + j + ::: + js + i =


2 1 +1

0 + j 1 + j + ::: + js + i + 1 = j 0 + j 0 + ::: + js0 + i0 ;


1 1 1 2 1 1 2 1 2 1

1 2 1 1 2 +1 1

 ^n cazul aplicarii regulii 4, aceasta se poate aplica ^n mai multe locuri.
Fara a restr^ange generalitatea, presupunem ca s-a aplicat ^n pozitia t
(t = 1; n), adica ak bi1 B j1 ck1 B j2 ck2 :::B j ck B j +1 :::ck 1 B j c B k m =)
(4)
+1 t t t s s
G
ak bi1 B j1 ck1 B j2 ck2 :::B j ck B c B j +1 :::ck 1 B j c B k m :
+1 t t 1 t 1 s s

Notam i0 = i ; j 0 = j ; k0 = k ; :::; kt0 = kt 1; jt0 = 1; kt0 = 1; jt0 =


1; :::; ks0 = ks ; js0 = js : Veri cam conditia din pasul inductiv, si
1 1 1 1 1 1 +1 +1 +2

jt
anume, i0 = i = k + k + ::: + kt + kt 1 + 1 + kt + ::: + ks = k0 + k0 +
+1 1 +1

:::+kt0 +kt0 +kt0 +:::+ks0 si m = j +j +:::+jt +1+jt 1+jt +:::+js +i =


1 1 1 2 1 +1 1 1 2

j 0 + j 0 + ::: + jt0 + jt0 + jt0 + ::: + js0 + i0 :


1 +1 1 2 +1 +2 1

1 2 +1 +2 +1 1


Cu aceasta, demonstratia incluziunii (7) s-a ^ncheiat. Deci limbajul generat de gra-
matica este fan bn cn = n  1g:

 Gramaticile din Exercitiile 1.2.2, 1.2.4 si 1.2.3 genereaza acelasi limbaj, dar sunt
distincte. O gramatica este cu at^at mai simpla (\mai redusa") cu c^at are mai putine
reguli. Dintre acestea, gramatica din Exercitiul 1.2.4 este cea mai redusa.
Exercitiul 1.2.5 Fie gramatica G = (fS; A; B; C g; fag; S; P ); unde regulile P
sunt urmatoarele:
1. S ! B A B
Generari de limbaje 16

2. B A ! B C
3. C A ! A A C
4. C B ! A A B
5. A ! a
6. B ! 
a) sa se determine tipul gramaticii G ;
b) sa se demonstreze ca L(G) = fa2 = n  0g:
n

Solutie a) Datorita regulilor 3 si 6, rezulta ca gramatica G nu este de tip 1; deci
este de tip 0. Datorita regulii 6; gramatica G nu este monotona, deci nu stim daca
se poate reduce la o gramatica de tip 1; totusi, daca facem o mica modi care, prin
considerarea simbolului B terminal (sa zicem ''), atunci dispare regula 6; si deci
gramatica G0 obtinuta este monotona. Astfel G se poate reduce la una de tip 1,
limbajul generat ind L(G0 ) = f a  = n  0g: Asadar, cu exceptia \capetelor"
n
2

cuvintelor (cele doua simboluri ), G0 este echivalenta cu G:


b) Procedam prin dubla incluziune. Mai ^nt^ai, facem o cercetare prin inductie dupa
n:
;
 Pentru n = 0 avem S =) B A B =) B a B =) a; deci a 2 L(G);
(1)

G
(5)

G
(6) (6)

G
; ;
 Pentru n = 1 avem S =) B A B =) B C B =) B A A B =) B a a B =)
G G G
(1)

G
(2)

G
(4) (5) (5) (6) (6)

a a; deci aa 2 L(G);
 Pentru n = 2 avem S =) B A B =) B C B =) B A A B =) B C A B =)
G G
(1)

G
(2)

G G
(4) (2) (3)


B A A C B =) B A A A A B =) a a a a; unde ^n ultima derivare (=)) se
(4) 
G G G
^ntelege ca s-au aplicat de patru ori regula 5 si de doua ori regula 6:
+1
Sa demonstram ca din cuvinte de forma B A B obtinem B A B sau a (fara
j j j
2 2 2

a restr^ange generalitatea, putem presupune ca aceste doua forme propozitionale se


obtin prin aplicarea a cel mult o data a regulii 2).
Cuv^antului B A B ^i putem aplica regulile 2; 5 sau 6. Vom considera cele trei
j
2

cazuri:
 Cazul I: Se aplica regula 2 si obtinem:

B A B =) B C A B
j (2) j
2 2 1

Cuv^antului B C A B ^i putem aplica regulile 5; 6 sau 3: Daca aplicam regula


j
2 1

5 atunci obtinem un cuv^ant de forma B C Al a A l B din care nu putem j


2 1

elimina C; deci nu putem obtine cuvinte din limbaj. Daca aplicam 6 la ultimul
B nu mai putem elimina neterminalul C: Daca aplicam 6 la primul neterminal
B obtinem C A +1 B dupa care suntem obligati sa aplicam regula 3 de 2j 1
j
2 1

ori si obtinem A C B , altfel daca aplicam 5 sau 6 obtinem cuvinte din care
j
2 2
Generari de limbaje 17

nu +1putem elimina C: ^In continuare, putem aplica numai 4; 5 si 6 si obtinem
a :
j
2

Daca aplicam cuv^antului B C A B regula 3, obtinem


j
2 1

; +1 +1
BCA B =) B A C B =) B A B
j (3) j (4) j
2 1 2 2 2

 Cazul II: Daca se aplica regula 5; obtinem

B A B =) B Al a A l B:
j (5) j
2 2 1

Avem doua subcazuri:


{ a) l = 0: Se pot aplica numai regulile 5 si 6 si se obtine a ;
j
2

{ b) l > 0: Se pot aplica regulile 5 si 6 si se obtine a sau se poate aplica
j
2

regula 2 si obtinem B C Al a A l B si din acest cuv^ant nu putem


j
1 2 1

elimina neterminalul C , deci nu obtinem cuvinte din limbajul L(G);


 Cazul III: Se aplica cuv^antului B A2 B regula 6. Vom considera doua subcazuri
j

posibile:
{ a) Se aplica regula 6 primului B , deci se obtine cuv^antul A B: Mai departe
j
2

se pot aplica numai regulile 5; 6 si obtinem a ;


j
2

{ b) Se aplica regula 6 ultimului B , se obtine cuv^antul B A : Daca


j
2

cuv^antului B A i se aplica regula 2 se obtine B C A si din acest


j j
2 2 1

cuv^ant nu putem elimina C: Daca cuv^antului B A i se aplica regulile 5 si


j
2

6 se obtine a :
j
2

Deci, ^n concluzie, am demonstrat ca singurele derivari care conduc la cuvinte din
limbaj sunt:
B A B =) B A B
+1
(1)
j j
2 2

G
(2) B A B =) a
j j
2 2

G
B A B =) a
+1
(3)
j j
2 2

G
Sa demonstram ca L(G) = fa = n  0g: La fel, procedam prin dubla incluziune.
n
2

: Pentru n = 0; si n = 1 am demonstrat deja. Sa demonstram ca a 2 L(G) pentru 2


k

un k arbitrar, k  2: 0
Avem derivarea S =) B A B . Dar cuv^antul B A B = B A B , deci vom aplica 2

G
(1) de k ori si vom obtine
; ; ;
B =) B A B =) B A B =) a :
(1) k (5) (6) k
2 2

G G G
Generari de limbaje 18

: Fie p 2 L(G). Rezulta ca avem derivarea S =) p: Dar derivarea S =) p trebuie
G G
sa e de forma S =) B A B =) p si cum B A B este de forma B A B cu j = 0 si
j
2

G G
noi am demonstrat ca din B A B se obtin cuvinte formate din terminali numai de


j
2

forma a : ^In concluzie, rezulta ca p = a ; n  0:


n n
2 2


! Solutia se putea prezenta demonstr^and prin inductie dupa n a rmatia

(1) fB A B= n  0g  f = S =G)n; ; 2 fA; B g ; n  0g;


2
n 2
n
+

~
unde am presupus, fara a restr^ange generalitatea, ca regula 2 s-a aplicat de n ori.

Daca notam cu f (n) numarul de aparitii ale simbolului neterminal A unde n este
numarul de aplicari ale regulii 2 (sau, echivalent numarul de aparitii distincte ale
simbolului neterminal C ), atunci gramatica G \calculeaza" functia exprimata recursiv:

f (0) = 1;
f (n) = 2  f (n 1);
8 n  1:
Evident, limbajul generat de G se poate scrie L(G) = faf n = 8 n  0g: ( )

Exercitiul 1.2.6 Fie gramatica G = (fS; X; A; B g; f; ag; S; P ) cu urmatoarele


reguli:
1. S !  
2. S !  B 
3. S !  A A B B 
4.  A !  X A
5. X A ! A X
6. X B ! A A B X
7. X  ! B 
8. A ! a
9. B ! a
a) care este tipul gramaticii G ?
2
b) sa se arate ca L(G) = f an  = n 2 Ng:
Solutie a) Din cauza regulilor 5; 6 care nu sunt sensibile la context, rezulta ca G
nu este de tip 1; ci de tip 0: Totusi, gramatica G este monotona, si se stie ca ea se
poate \reduce" la o gramatica sensibila la context G0 , echivalenta cu G: Deci, limbajul
generat de G este totusi de tip 1 (vom vedea mai t^arziu ca nu poate de tip 2).
b) Procedam prin dubla incluziune.
: Mai ^nt^ai, facem o cercetare prin inductie dupa n.
 Pentru n = 0 avem derivarea S =)  
(1)

G
Generari de limbaje 19

 Pentru n = 1 avem derivarea S =)  B  =)  a 


(2)

G
(9)

G
; ;
 Pentru n = 2 putem considera derivarea S =)  A A B B  =)
(3)

G
(8) (9) +

G
aaaa
 Pentru n = 3 consideram derivarea S =)  A A B B  =)  X A A B B  =)
(3)

G
(4)

G
(5)

G
 A X A B B  =G)  A A X B B  =G)  A A A A B X B  =G)
(5) (6) (6)

; ;
=)  A A A A B A A B X  =)  A A A A B A A B B  =) a 
(6) (7) (8) (9) +
9

G G G
Astfel, putem acum sa formulam a rmatia pe care o vom demonstra prin inductie
dupa n:
Daca notam cu (1) derivarea S =a)  ; 2 fA; B g , atunci avem: n

G
(i) = Ai1 B j1 ::: Ai B j ; k k

(ii) i  2; i  0; :::; ik  0; j  0; j  0; :::; jk  0;


1 2 1 2

(iii) i + i + ::: + ik = n n;
1 2
2

(iv) j + j + ::: + jk = n:
1 2

Pentru calcularea numarului de pasi ai derivarii (1), consideram sirul recurent an ,


astfel: 
a =1 2

an = an + (n 1) + 2: 1
2

Sum^and telescopic, rezulta ca an = 2(n 2) + (n 1) + (n 2) + ::: + 2 + 1 = 2 2 2

3 2
2(n 2) + n n n = n n n :
( 1) (2 1) 2 3 +13 24

Cum pasul initial al inductiei a fost deja facut (pentru n 2 f0; 1; 2; 3g), ^n
6 6

continuare vom detalia pasul inductiv.


a
Pasul inductiv: Stim ca forma propozitionala ; (astfel ^nc^at S =) ), are pro- n

G
a +1 0
prietatile (i),(ii),(iii),(iv). Sa demonstram ca forma propozitionala 0 cu S =) n

G
satisface proprietatile:
(i') 0 = As1 B t1 ::: As B t ; h h

(ii') s  2; s  0; :::; sh  0; t  0; t  0; :::; th  0;


1 2 1 2

(iii') s + s + ::: + sh = (n + 1) (n + 1);


1 2
2

(iv') t + t + ::: + th = n + 1:
1 2

Din pasul inductiv, avem:


; ;
S =a)  Ai1 B j1 Ai2 B j2 ::: Ai B j  =)  X Ai1 B j1 Ai2 B j2 ::: Ai B j  =)
n (4) (5) (6) +
k k k k
G G G
 A B t1 As2 B t2 ::: Ash B th
s 1 1
X  =)  As1 B t1 As2 B t2 ::: Ash B th 
(7)

G
Se vede ca (i') este imediata. Punctul (ii') rezulta din (ii) deoarece aplicarea
regulilor 4; 5; 6; 7 nu micsoreaza numarul de aparitii a lui A si B: Sa demonstram
acum punctele (iii') si (iv'). Aplicarea regulilor 4 si 5 nu afecteaza numarul de aparitii
a lui A sau B: ^In schimb, aplicarea regulii 6 va determina aparitia a doua simboluri A
Generari de limbaje 20

pentru o aparitie a lui B: ^In sf^arsit, regula 7 implica aparitia unui simbol B: Asadar,
obtinem:
(iii') s + s + ::: + sh = i + i + ::: + ik + 2(j + j + :::jk ) = n n + 2n =
1 2 1 2 1 2
2

(n + 1) (n + 1);
2

(iv') t + t + ::: + th = j + j + :::jk + 1 = n + 1:


1 2 1 2

Cu aceasta, prima incluziune este demonstrata.


: Vom arata ca singurele cuvinte terminale generate de G sunt de forma  an2 ; n 
0:
Plec^and de la simbolul de start, observam ca se pot aplica regulile 1; 2 sau 3.
Cum S nu apare ^n partea dreapta a vreunei reguli, rezulta ca regulile 1; 2; 3 se pot
aplica cel mult o data:
2
 daca se aplica regula 1; atunci obtinem  , care este cuv^ant de forma  an ,
cu n = 0;
 daca se aplica regula 2; atunci obtinem  B , de unde aplic^and singura
2
regula ce
se poate aplica (regula 9) obtinem  a ; deci cuv^ant de forma  an , cu n = 1;
 daca se aplica regula 3; atunci obtinem  A A B B , de unde se vede ca putem
aplica regulile 4; 8 sau 9 :
{ daca aplicam regulile 8 sau 9; ajungem la  a a a a , (deoarece nu se mai
2
poate aplica nici o alta regula), deci este un cuv^ant de forma  an , cu
n = 2;
{ daca aplicam regula 4, obtinem  X A A B B , si deci putem aplica regulile
5; 8 sau 9. Observam ca daca aplicam regulile 8; 9 atunci nu mai avem
ce regula sa aplicam, deoarece nu exista nici o regula care sa contina ^n
partea st^anga X a sau simplu X:
^In acest sens, la fel ca la exercitiul precedent, deoarece gramatica este ^n forma
normala standard (De nitia 4.3.1, Teorema 4.3.1), nu restr^angem generalitatea daca
aplicam la ^nceput reguli de tipul (i) (adica regulile 1; 2; 3; 4; 5; 6; 7) si apoi reguli
de tipul (ii) (adica regulile 8 si 9).
^In continuare, ne vom referi doar la regulile 4; 5; 6; 7 (am vazut ca regulile 1; 2; 3
se aplica cel mult o data).
Asadar, am ajuns la forma propozitionala  X A A B B , de unde putem aplica
doar regula 5 (^nafara de 8 si 9). Obtinem forma propozitionala  A X A B B . ^In
acest moment, putem aplica regula 4 sau regula 5 (^nafara de 8 si 9):
 daca se aplica regula 4 ajungem la  X A X A B B  de unde putem aplica regula
5 ^n doua pozitii, obtin^and  A X X A B B  sau  X A A X A B B . Vom con-
sidera c^ateva conventii nerestrictive care vor simpli ca lucrurile. Pentru forma
propozitionala  A X X A B B  nu exista nici o regula care sa contina ^n partea
st^anga X X; deci oricum primul X (cel din st^anga) nu-l va putea \depasi" pe
al doilea X: Astfel, putem spune ca primul X ^l va \astepta" pe al doilea X sa
parcurga simbolurile A si B p^ana la capat (p^ana c^and acesta dispare cu regula
Generari de limbaje 21

7). Astfel, putem presupune, fara a restr^ange generalitatea, ca pentru formele
propozitionale ale gramaticii G, exista cel mult un X ;
 daca se aplica regula 5 obtinem forma propozitionala  A A X B B  de unde
aplic^and regula 6 de doua ori obtinem  A A A A B A A B X . Acum X \va dis-
pare"
2
cu regula 7 si obtinem  A2 B A B , care folosind regulile 8; 9 obtinem
4 2 2

an , adica cuv^ant de forma  an ; pentru n = 3.


Deci putem spune ca ^n cazul c^and se aplica doar regulile 3; 4; 5; 6; 7 forma
propozitionala care contine cel mult un X este
 X  cu ; 2 fA; B g :
Pentru deducerea formei generale a cuvintelor terminale generate de G; sa observam
ca simbolul neterminal X \trece peste" simbolurile A, iar c^and ^nt^alneste un B va
introduce ^nca 2 simboluri A si va \trece peste" B: La sf^arsit, c^and X ^nt^alneste ,
se ^nlocuieste X cu B: Astfel, daca notam cu N (A); respectiv N (B ), numarul de
aparitii ale simbolurilor neterminale A; respectiv B; ^n forma propozitionala care
nu contine X . Fie forma propozitionala care s-a obtinut din prin introducerea la
^nceput a unui simbol X (cu regula 4), parcurgerea simbolurilor A si B cu regulile 5
si 6 si \disparitia" lui X cu regula 7: Atunci obtinem:
N (A) = N (A) + 2  N (B ) si N (B ) = N (B ) + 1
Cum la ^nceput (pentru forma propozitionala =  A A B B ) avem N (A) = 2 si
N = 2 se demonstreaza usor prin inductie dupa n ca N (A) = n n; N (B ) = n:
2

Astfel, forma generala a cuvintelor care contin numai simboluri ; A; B este de


forma
 ; unde 2 fA; B g ; N (A) = n n; N (B ) = n:
2

2
De aici rezulta, utiliz^and regulile 8 si 9, cuv^antul  an  :

~
Astfel am demonstrat si cealalta incluziune.

Un alt mod de a demonstra incluziunea  este arat^and prin inductie dupa n ca
f = S =)  ; 2 fA; B g g  f A n
G
2(
B A n B ::: A B B g
1) 2( 2) 2

~ Daca notam cu f (n); g (n) si NA(X ) numarul de aparitii distincte ale simbolului
neterminal A; B; respectiv ale lui X , pentru n = NA(X ); gramatica G \calculeaza"
functiile exprimate recursiv:
8
> f (0)
= 2;
<
g(0) = 2;
: f (n) = f (n 1) + 2  g (n 1); 8 n  1;
>
g(n) = g(n 1) + 1; 8 n  1:
Evident, limbajul generat de G se poate scrie L(G) = f af n ( 2)+ (gn 2)
= 8 n 
2g [ f ;  a g:
Generari de limbaje 22

Exercitiul 1.2.7 Fie gramatica G = (fS; A; B; C; Y0 ; Y1 g; f0; 1g; S; P ) cu


regulile P :
1. S ! A B C
2. A B ! i A Yi ; 8 i 2 f0; 1g;
3. Yj i ! i Yj ; 8 i; j 2 f0; 1g;
4. Yi C ! B i C; 8 i 2 f0; 1g;
5. i B ! B i; 8 i 2 f0; 1g;
6. A B ! 
7. C ! 
a) sa se determine tipul gramaticii G;
b) sa se demonstreze ca L(G) = fw w= w 2 f0; 1g g:
Solutie a) Datorita regulilor 2; 3; 5; 6; 7 rezulta ca gramatica este de tip 0: Chiar
daca regulile 2; 3; 5 sunt monotone (si deci s-ar putea reduce la c^ateva reguli sensibile
la context), regulile 6 si 7 nu sunt monotone.
b) ^Intr-o alta notatie, avem de demonstrat ca
L(G) = fi i ::: in i i ::: in = ij 2 f0; 1g; j = 1; n; n 2 Ng:
1 2 1 2

: Cercetam c^ateva derivari pentru n 2 f0; 1; 2g:


 Pentru n = 0 avem derivarea S =) A B C =) C =) 
(1)

G
(6)

G
(7)

 Pentru n = 1 avem derivarea S =) A B C =) i A Yi1 C =) i A B i C =)


(1)

G
(2)

G 1
(4)

G 1 1
(6)

G
i i C =) i i
(7)
1 1
G 1 1

; ;
 Pentru n = 2 consideram derivarea S =) i A B i C =) i i A Yi2 i C =)
G G
(1) (2) (4)

G 1 1
(2)
1 2 1
(3)

i i A i Yi2 C =) i i A i B i C =) i i A B i i C =) i i i i C =)
(4) (5) (6) (7)
1 2 1
G 1 2 1 2
G 1 2 1 2
G 1 2 1 2
G
i i i i
1 2 1 2

Acum putem preciza a rmatia ce o vom demonstra prin inductie dupa n; n  1 :


(1) S =;) i i ::: i A B i i ::: i C;
G 1 2 n 1 2 n

unde  = 1; 2; 4; 2; 3; 4; 5; :::; 2; 3| ; 3;{z:::; 3}; 4; 5| ; 5;{z:::; 5} :


de n ori de n ori 1 1

Baza: Deja demonstrata pentru n = 1 si n = 2;


Pasul inductiv: Presupunem a rmatia (1) adevarata pentru n = k: Sa o demonstram
pentru n = k + 1:
Folosind pasul inductiv, deducem

S =G) i i ::: ik A B i i ::: ik C =G)


(2)
1 2 1 2
Generari de limbaje 23

;n
=) i i ::: ik ik A Yi +1 i i ::: ik C =)
(2) (3)

G 1 2 +1
G k 1 2

;n
=) i i ::: ik ik A i i ::: ik Yi +1 C =)
(3) (4)

G 1 2
G
+1 1 2 k

;n
=) i i ::: ik ik A i i ::: ik B ik C =)
(4) (5)

G 1 2 +1 1 2 +1
G
;n
=) i i ::: ik ik A B i i ::: ik ik C:
(5)

G 1 2 +1 1 2 +1

A rmatia (1) este acum complet demonstrata. Daca se continua derivarea cu


regulile 6 si 7 rezulta tocmai incluziunea \".
Sa determinam numarul de pasi pentru derivarea din a rmatia (1): Notam cu
ak ; k  1 acest numar. Este imediata recurenta:

a = 3; 1

ak = ak + 2k + 2: +1

Se deduce usor ca ak = k + k + 1: Ca o observatie, putem spune ca numarul de pasi


2

ai derivarii pentru obtinerea unui cuv^ant terminal (de forma w w; cu jwj = k) este
k + k + 3:
2

: La fel ca la Exercitiul 1.2.6, vom arata ca acestea sunt singurele cuvinte generate
de gramatica G:
La ^nceput, se poate aplica doar regula 1 (care se aplica numai acum deoarece
S nu mai apare ^n partea dreapta a vreunei reguli). Obtinem forma propozitionala
A B C: ^In acest moment, se poate aplica regula 2; 6; sau 7 :
 daca se aplica regula 6, atunci obtinem C , de unde ind obligati sa aplicam
regula 7, obtinem , care este un cuv^ant de forma w w; w = ;
 daca se aplica regula 7, atunci se obtine A B si deci se poate aplica 2 sau 6:
{ daca se aplica 6; se obtine  (de forma w w; cu w = );
{ daca se aplica 2; obtinem i A Yi (i 2 f0; 1g), si nu mai ce regula sa aplicam;
 daca se aplica regula 2 se obtine i A Yi C; care, daca aplicam 7 ne \blocam", iar
daca aplicam 4 obtinem i A B i C:
Astfel, putem trage concluzia ca regula 7 se aplica \la sf^arsit" (adica dupa aplicarea
regulii 6), altfel ar conduce la blocaj.
Deci, putem presupune ca ajungem la forma propozitionala generala
w A B w C; w = i i ::: in; ij 2 f0; 1g; j = 1; n:


1 2

Vom arata ca singurele cuvinte care se pot obtine de aici sunt w w si w i A B w i C .


! Aici singurele cuvinte se refera la primul cuv^ant terminal care se obtine, res-
pectiv la prima forma propozitionala care \seamana" cu cea de la care am pornit
(forma generala).
^In acest sens, putem aplica regula 6; 7 sau 2:
Exercitii propuse spre rezolvare 24

 daca aplicam 6 obtinem w w C , de unde observam ca se poate aplica doar 7:


Deci rezulta w w;
 daca aplicam 7 ajungem la w A B w: Acum putem aplica 6 si ajungem la w w
sau 2 si obtinem w i A Yi w. Singura regula care se poate aplica este 3: Obtinem
dupa jwj pasi forma propozitionala w i A w Yi , si se observa ca ne-am blocat.
 daca aplicam regula 2 atunci obtinem forma propozitionala w i A Yi w C: Putem
aplica regula 3 sau 7. Daca aplicam 7, la fel ca ^n cazul precedent, ne vom bloca.
Deci singura posibilitate (valida) este regula 3. Proced^and ca mai sus, dupa jwj
pasi, vom ajunge la w i A w Yi C: Aplicam 4 sau 7. La fel regula 7 va implica,
dupa efectuarea regulii 5, aplicarea regulii 6 (si se va obtine w w), altfel ne vom
bloca. Deci aplic^and 4 obtinem w i A w B i C: Putem aplica 5 sau 7. Aplic^and
regula 5 de jwj ori obtinem w i A B w i C:
Am vazut ca aplicarea regulii 7 implica aplicarea regulii 6 (daca este posibil),
conduc^and la w w, sau conduce la blocaj.
Astfel, am demonstrat si cealalta incluziune. Cu aceasta, solutia Exercitiului 1.2.7

~
s-a ^ncheiat.
^In generarea unui astfel de cuv^ant (de forma w w; w 2 f0; 1g ), este esential
sa stim care este \mijlocul" sau si care este \sf^arsitul" sau. Astfel grupul de neter-
minali A B reprezinta mijlocul cuv^antului si neterminalul C reprezinta capatul din
dreapta. Presupunem ca ne referim la forma propozitionala w A B w C: Pentru a ge-
nera w a A B w a C; a 2 f0; 1g parcurgem urmatorii pasi:
 \distrugem" simbolul B; inser^and la st^anga lui A un simbol a; iar la dreapta
un neterminal (marcator) asociat acestui a; sa zicem Ya ; tinem cont ca mijlocul
cuv^antului este marcat prin A; forma propozitionala arata acum w a A Ya w C ;
 trebuie sa parcurgem cu acest Ya subcuv^antul w; ne oprim c^and ^nt^alnim mar-
catorul de sf^arsit C ; forma propozitionala arata acum w a A w Ya C ;
 acum trebuie sa transformam Ya ^ntr-un simbol a (si, eventual, ^ntr-un mar-
cator care trebuie sa parcurga ^napoi w p^ana la mijlocul cuv^antului); forma
propozitionala arata acum w a A w B a C ;
 asa cum am spus mai sus, simbolul B ajunge la mijlocul cuv^antului; forma
propozitionala arata acum w a A B w a C :

1.3 Exercitii propuse spre rezolvare


Exercitiul 1.3.1 Sa se gaseasca o gramatica G (de tip c^at mai mare) care sa
genereze limbajul L = fa; bg ; si sa se arate ca L(G) = L:
Exercitii propuse spre rezolvare 25


 Putem alege gramatica G = (fS g; fa; bg; S; fS ! a S j b S j g); care este de tip 3.
Exercitiul 1.3.2 Fie gramatica G = (fAg; fa; bg; A; P ) cu regulile P de forma A !
a a A j b j : Sa se determine tipul gramaticii si sa se arate ca G genereaza limbajul
L = fa agb [ fa ag:
Exercitiul 1.3.3 Sa se gaseasca o gramatica G (de tip c^at mai mare) care sa
genereze limbajul L = fw= w 2 f0; 1g ; 2=Nw (0); 2=Nw (1)g; si sa se arate ca


L(G) = L:

 Putem alege gramatica G = (fX ; X ; X ; X g; f0; 1g; X ; fX ! 1 X j 0 X j ;


0

X ! 1 X j 0 X ; X ! 1 X j 0 X ; X ! 1 X j 0 X g):
1 0 2 2 3 1 3
1 2

2
3

0
0 0 1 3


Exercitiul 1.3.4 Sa se gaseasca o gramatica G (de tip c^at mai mare) care sa
genereze limbajul L = f0m 1n 2p = m; n; p 2 Ng; si sa se arate ca L(G) = L:

 Putem alege gramatica G = (fX ; X ; X g; f0; 1; 2g; X ; fX ! 0 X j X ; X !


1 X j X ; X ! 2 X j g):
1 2 2 2
0 1 2 0 0 0 1 1

Exercitiul 1.3.5 Sa se determine o gramatica G care genereaza L = fww= e w 2


fa; bgg; unde prin we se ^ntelege oglinditul lui w: Sa se determine tipul gramaticii

4

G si sa se demonstreze ca L = L(G):

 Putem alege gramatica G = (fx0 g; fa; bg; x0; fx0 ! a x0 a; x0 ! b x0 b; x0 ! g)


si se procedeaza ca la Exercitiul 1.2.1.


Exercitiul 1.3.6 Sa se gaseasca o gramatica (de preferat, de tip 2) care genereaza
limbajul L = fan bm cn = m; n  1g:

 Putem alege gramatica G = (fx ; x g; fa; b; cg; x ; fx ! a x c j b x ; x !


b x j g).
1
0 1 0 0 0 1 1


Exercitiul 1.3.7 Sa se gaseasca o gramatica (de preferat, de tip 2) care genereaza
limbajul L = fan bm cm = m; n  1g:

 Putem alege gramatica G = (fx0 ; x1 g; fa; b; cg; x0; fx0 ! a x j b x c; x !

~
b x c j g).
0 1 1

Intersectia limbajelor generate de gramaticile independente de context propuse ^n


Exercitiile 1.3.6 si 1.3.7 este limbajul generat de gramatica de la Exercitiul 1.2.2 (sau
1.2.3, 1.2.4). Vom vedea mai t^arziu (^n Exercitiul 3.2.2 ca limbajul fan bn cn = n  1g
nu este independent de context. Asadar, de aici rezulta: Clasa limbajelor indepen-
dente de context nu este ^nchisa la intersectie (Exercitiul 3.2.3).
4 Daca w = a1 a2 :::an 1 an atunci we = an an 1 :::a2 a1 :
Exercitii propuse spre rezolvare 26

Exercitiul 1.3.8 Sa se gaseasca o gramatica (de preferat, de tip 2) care genereaza


limbajul L = fan bn cm = n; m  1g:

 Putem alege gramatica G = (fx0 ; x1 g; fa; b; cg; x0 ; fx0


a x b j a bg).
1
! x c j x c; x !
0 1 1

Exercitiul 1.3.9 Sa se arate ca gramatica G = (fS; A; B; C; Dg; f0; 1; 2g; S; P ) cu
regulile P :
1. S ! A B j C D
2. A ! 0 A 1 j 
3. B ! 2 B j 
4. C ! 0 C j 
5. D ! 1 D 2 j 
genereaza limbajul L = f0i 1j 2k =i = j sau j = k g:
Exercitiul 1.3.10 Sa se gaseasca o gramatica (de tip c^at mai mare) care sa genereze


limbajul L = f0i 1j 2k = i = j sau i = k sau j = k; i; j; k 2 Ng:

 Se procedeaza ca la Exercitiul 1.3.9. De altfel, gramatica completa se gaseste ^n


solutia Exercitiului 3.6.1.
Exercitiul 1.3.11 Sa se gaseasca o gramatica (de tip c^at mai mare) care sa genereze


limbajul L = fan w=n  1; w 2 fb; cg ; jwj = 2ng:
+

 Putem alege gramatica G = (fx0 ; x1 g; fa; b; cg; x0; fx0


b b j b c j c b j c cg).
! ax x jax ; x !
0 1 1 1

Exercitiul 1.3.12 Sa se arate ca gramatica G = (fE; T; F g; f+; ; (; ); ag; E; P ) cu


regulile P :
1. E ! E + T j T
2. T ! T  F j F
3. F ! ( E ) j a


genereaza expresiile aritmetice care se pot construi cu simbolurile din multimea
f+; ; (; ); ag:


! Gramatica G din Exercitiul 1.3.12 este sub forma normala operator 5 . Se
observa ca daca redenumim toti neterminalii la fel 6 , obtinem gramatica G0 =
(fE g; f+; ; (; ); ag; E; fE ! E + E j E  E j ( E ) j ag); echivalenta cu G:
Exercitiul 1.3.13 Sa se arate ca gramatica G = (fS; T g; f1; +; =g; S; fS ! 1 S 1 j +
T; T ! 1 T 1 j =g) genereaza limbajul L = f1n + 1m = 1m n =m; n  0g: +

5^In partea dreapta a regulilor nu exista doi neterminali consecutivi (vom reveni ^n Sectiunea 3.5).
6 Aceste gramatici sunt utile ^n tehnicile de constructie a compilatoarelor, G ind gramatica de
precedenta slaba [1, 7]
Exercitii propuse spre rezolvare 27

Exercitiul 1.3.14 Sa se gaseasca o gramatica (de tip 2) care sa genereze limbajul


L = fan bn am bm = m; n  0g:

 Se poate alege gramatica G = (fX0 ; X1 g; fa; bg; X0 ; P ); unde regulile P sunt:


1: X 0 ! X X ; 2: X ! a X b j :
1 1 1 1

Exercitiul 1.3.15 Sa se gaseasca o gramatica (de tip 2) care sa genereze limbajul


L = fan bn k ck = n; k  0g:


+

Se poate alege gramatica G = (fX0 ; X1 ; X2 g; fa; b; cg; X0 ; P ); unde regulile


P sunt: 1: X ! X X ; 2: X ! a X b j ; 3: X ! b X c j :
0 1 2 1 1 2 2

Exercitiul 1.3.16 Fie gramatica G = (fS g; f(; )g; S; P ) cu regulile P :


1. S ! S S
2. S ! ( S )
3. S ! 
Sa se arate ca aceasta gramatica genereaza limbajul L al expresiilor corect paran-
tetizate, adica L este dat de acele cuvinte w 2 f(; )g care satisfac:
 pentru orice pre x w0 al lui w avem ca numarul de paranteze st^angi din w0 este
mai mare sau egal dec^at numarul de paranteze drepte ale lui w0 ;
 numarul de paranteze st^angi ale lui w este egal cu numarul de paranteze drepte

 ale lui w:


! Limbajul L din Exercitiul 1.3.16 se numeste limbajul lui Dyck.
Exercitiul 1.3.17 Sa se gaseasca o gramatica (de tip 2) care sa genereze limbajul


L = fw= w 2 fa; bg; Nw (a) = Nw (b)g:

 Se poate alege gramatica G = (fX0 ; X1 ; X2 g; fa; bg; X0 ; P ); unde regulile P


sunt: 1: X0 ! a X2 j b X1 2: X1 ! a j a X0 j b X1 X1 ; 3: X2 ! b j b X0 j a X2 X2 :
Exercitiul 1.3.18 Sa se arate ca urmatoarele gramatici sunt echivalente:
1. G1 = (fA; B g; fa; b; cg; A; P1); unde regulile P1 sunt:
(a) A ! aABc
(b) A ! abc
(c) cB ! Bc
(d) bB ! bb
Exercitii propuse spre rezolvare 28

2. G2 = (fX0 ; X1 ; X2 g; fa; b; cg; X0; P2 ); unde regulile P2 sunt:


(a) X ! aX X X
0 0 1 2

(b) X ! abX
0 2

(c) X X !X X
2 1 1 2

(d) bX ! bb
1

(e) X !c
2

3. G3 = (fA; B; X g; fa; b; cg; A; P3); unde regulile P3 sunt:


(a) A ! abc
(b) A ! aAbc
(c) A ! abX
(d) cB ! Bc
(e) X B ! bX
(f) X c ! cc
4. G4 = (fS; A; X; Y g; fa; b; cg; S; P4); cu regulile P4 :
(a) S ! abc
(b) A ! AaX
(c) X a ! aX
(d) X b ! bbY
(e) Y b ! bY
(f) Y c ! cc
(g) A!a
5. G5 = (fS; A; B; X; Y g; fa; b; cg; S; P5); cu regulile P5 :
(a) S ! abc
(b) S ! Ac
(c) A ! aAB
(d) A ! abX
(e) X B ! bX Y
(f) Y B !BY
(g) Y c ! cc
(h) Xc!c
6. G6 = (fA; B; C; E; F g; fa; b; cg; A; P6 ); cu regulile P6 :
(a) A ! a A b
Exercitii propuse spre rezolvare 29

(b) A ! abC
(c) CB !EB
(d) EB !EF
(e) EF !BF
(f) BF !BC
(g) C !c
(h) bB ! bbc
7. G7 = (fX0 ; X1 ; X2 ; X3 ; Y; Z g; fa; b; cg; X0; P7 ) cu regulile P7 :
(a) X !X Y
0 1

(b) X ! aX c
1 1

(c) X c ! X cZ
1 2

(d) aX ! abX
2 3

(e) X c ! cX
3 3

(f) X Z c ! X cZ
3 2

(g) cX ! X c
2 2

(h) bX ! bbX


2 3

(i) X ZY !
3

 Se arata ca cele sapte gramatici genereaza limbajul L = fan bn cn =n  1g:

~ Gramatica G6 este sensitiva la context, deci L = fan bn cn =n  1g este de tip 1.


Exercitiul 1.3.19 Sa se arate ca gramatica G = (fA; B; X g; fa; b; c; dg; A; P ) cu
regulile P :
 A ! aAB
 A ! aX bc
 X !Xd
 X!d
 bB ! bbc
 cB ! Bc
genereaza limbajul L(G) = fan dm bn cn = n; m  1g:
Exercitiul 1.3.20 (generalizarea Exercitiilor 1.2.2, 1.2.4, 1.2.3 si 1.3.18)
Sa se gaseasca o gramatica care genereaza limbajul Lk = fan an ::: ank = n  1g;
pentru ecare k  3:
1 2
Exercitii propuse spre rezolvare 30


 Solutia I: generalizarea Exercitiului 1.2.3; se alege gramatica monotona G =
(fx ; x ; :::; xk g; fa ; a ; :::; ak g; x ; P ) unde regulile P sunt:
1 2 1 2 1

1. x ! a x x x ::: xk
2. x ! a x x ::: xk
1 1 1 2 3

1 1 2 3

3. xj xi ! xi xj ; 8 i; j; 2  i < j  k ;
4. a x ! a a
1 2 1 2

5. ai xi ! ai ai ; 8 i = 2; k 1;



6. ai xi ! ai ai ; 8 i = 2; k 1;
7. ak xk ! ak ak
+1 +1


! Sunt k2 k reguli si k neterminali, adica O(k ) reguli si O(k) neterminali.


+ +2
2

Solutia a II-a: simularea unei masini Turing; se alege gramatica G =


2

(fS; A ; X ; X ; :::; Xk g; fa ; a ; :::; ak g; S; P ) unde regulile P sunt:


1 1 2 1 1 2

1. S ! A a ::: ak
2. A ! A a X
1 2

1 1 1 1

3. Xi ai ! ai Xi ; 8 i = 1; k 1;
4. Xi ai ! ai ai Xi ; 8 i = 1; k 2;

 5. Xk ak ! ak ak
+1 +1 +1 +1

6. A ! a


1 1

! Sunt 2k + 1 reguli si k + 1 neterminali, adica O(k) reguli si O(k) neterminali;
retinem ca aceasta gramatica este mai redusa dec^at prima (^n plus, este si \determi-
nista").
Exercitiul 1.3.21 Sa se gaseasca o gramatica care genereaza limbajul


 Putem alege gramatica G = (fS; A; B; X g; fa; bg; S; fS
L = fan bm an bm = m; n  1g:

! A b; A !
a A a j B j b; B ! b B X j b; X a ! a X; X b ! b bg):
Exercitiul 1.3.22 Sa se gaseasca o gramatica care genereaza limbajul

 L = fan bn c an bn= n  1g:

 Inspir^andu-ne din solutia a doua a Exercitiului 1.3.20, putem alege gramatica


G = (fS; A; X ; X ; X g; fa; b; cg; S; P ); unde regulile P sunt date prin:
1: S ! A b c a b
1 2 3

2: A ! A a X j a
3: X a ! a X
1

1 1

4: X b ! b b X
1 2

5: X b ! b X
6: X c ! c X
2 2

2 2
Exercitii propuse spre rezolvare 31

7: X a ! a a X
2 3

8: X a ! a X
9: X b ! b b
3 3

Exercitiul 1.3.23 Sa se gaseasca o gramatica care genereaza limbajul

 L = fai bi ci k = i  1; k x; k  0g:
+

 Se poate folosi ideea din Exercitiul 1.3.27.


Exercitiul 1.3.24 Sa se gaseasca o gramatica care genereaza limbajul



L = fan bn cm = m; n  1; m  ng:

Se poate folosi ideea din Exercitiul 1.3.27.


Exercitiul 1.3.25 Sa se gaseasca o gramatica care genereaza limbajul



L = fan bn cm = m; n  1; n  m  2  ng:

La gramatica din Exercitiul 1.2.4 se adauga regula b B ! b b c c:


Exercitiul 1.3.26 Sa se gaseasca o gramatica care genereaza limbajul



L = fai bj ck = i; j; k  0; i 6= j 6= kg:

Se poate folosi ideea din Exercitiul 1.3.27.


Exercitiul 1.3.27 Sa se gaseasca o gramatica care genereaza limbajul



L = fai bj ck = i; j; k  1; i 6= j 6= k 6= ig:

Putem scrie L ca o reuniune de limbaje disjuncte:


L=L 1 [L [L [L [L [L ;
2 3 4 5 6

unde:
L 1 = fai bj ck = i > j > k > 0g;
L = fai bj ck = j > i > k > 0g;
= fai bj ck = i > k > j > 0g;
2

L 3

L 4 = fai bj ck = k > i > j > 0g;


L = fai bj ck = j > k > i > 0g;
= fai bj ck = k > j > i > 0g;
5

L 6
Exercitii propuse spre rezolvare 32

Inspir^andu-ne din gramatica G1 (Exercitiul 1.3.18) deducem, pentru ecare dintre


aceste sase limbaje, c^ate o gramatica care le genereaza, apoi \reunim optimal" gra-
maticile. Astfel, se obtine urmatoarea gramatica cu 13 neterminali si 40 reguli:
G = (fS; A; B; C; D; A0 ; B 0 ; X ; X ; X ; X ; X ; X g; fa; b; c; g; S; P );
1 2 3 4 5 6

unde regulile P sunt urmatoarele:


1. S ! A  21. X4 B c ! B c X4
2. S !  A0 22. X4 B c ! c X4
3. A ! a A B c 23. X4  ! C
4. A ! a a b X1 24. C ! c C
5. X1 B c ! B c X1 25. C ! c
6. X1 B c ! B X1 26. c B ! B c
7. X1 B c ! X1 27. b B ! b b
8. X1  !  28. A0 ! a B 0 A0 c
9. A ! a a a b c c X3 29. A0 ! X6 b c c
10. X3 B c ! B c X3 30. a B 0 X6 ! X6 a B 0
11. X3 B c ! c X3 31. a B 0 X6 ! X6 B 0
12. X3 B c ! X3 32. a B 0 X6 ! X6
13. X3  !  33.  X6 ! 
14. A ! a b b D X2 34. A0 ! X5 a a b c c c
15. D ! b D 35. a B 0 X5 ! X5 a B 0
16. D ! b 36. a B 0 X5 ! X5 a
17. X2 B c ! B c X2 37. a B 0 X5 ! X5
18. X2 B c ! B X2 38.  X5 ! 
19. X2  !  39. B 0 a ! a B 0
20. A ! a a b c X4 40. B 0 b ! b b
Demonstratia egalitatii L(G) = L este imediata daca se tine seama de ^mpartirea lui
L ^n cele sase parti si de constructia gramaticilor Gi ; astfel ^nc^at L(Gi ) = Li ; i = 1; 6;
dupa cum urmeaza (pentru simplitate, vom scrie doar numarul regulii):
G = (fS; A; B; X g; fa; b; c; g; S; f1; 3; 4; 5; 6; 7; 8; 26; 27g);
= (fS; A; B; D; X g; fa; b; c; g; S; f1; 3; 14; 15; 16; 17; 18; 19; 26; 27g);
1 1

G 2 2

G 3 = (fS; A; B; X g; fa; b; c; g; S; f1; 3; 9; 10; 11; 12; 13; 26; 27g);
3

G = (fS; A; B; C; X g; fa; b; c; g; S; f1; 3; 20; 21; 22; 23; 24; 25; 26; 27g);
= (fS; A0 ; B 0 ; X g; fa; b; c; g; S; f2; 28; 34; 35; 36; 37; 38; 39; 40g);
4 4

G
= (fS; A0 ; B 0 ; X g; fa; b; c; g; S; f2; 28; 29; 30; 31; 32; 33; 39; 40g);
5 5

G 6 6

Exercitiul 1.3.28 Sa se arate ca gramatica G = (fS; D; Lg; fag; S; P ); unde regu-
lile P sunt 1: S ! S D; 2: S ! L; 3: a D ! D a a; 4: L D ! L a; L ! a; genereaza
limbajul L = fa = n  0g:
n
2

Exercitiul 1.3.29 Sa se gaseasca o gramatica care genereaza limbajul L = fa = n 


n
3

0g:
Exercitiul 1.3.30 Sa se gaseasca o gramatica care genereaza limbajul Lk =
fak = n  0g; k  2 natural xat.
n
Exercitii propuse spre rezolvare 33


 Se poate alege gramatica G = (fS; A; X; Y g; fag; S; P ) unde regulile P sunt:
1. S ! Y A Y
2. Y A ! Y X
3. X A ! A | A{z::: A} X
de k ori
4. X Y ! A | A{z::: A} Y


de k ori
5. A ! a


6. Y ! 
! Se observa ca sunt 6 reguli si 4 neterminali, deci avem O(1) reguli si O(1)
neterminali. Vom vedea ca ^n cazul gramaticilor care genereaza alte tipuri de functii
(nk ; nk + nk+1 + ::: + 1; P (n)), vor necesare mai multe reguli (care vor depinde de
k).
3
Exercitiul 1.3.31 Sa se gaseasca o gramatica care genereaza limbajul L = f an 
= n  0g:
Exercitiul 1.3.32 Sa se gaseasca o gramatica care genereaza limbajul Lk = f an 

k

= n  0g; k  2 natural xat.

 Se poate alege gramatica sensibila la context


G = (fS; A ; A ; :::; Ak ; X g; fag; S; P );
0 1

unde regulile P sunt:


1. S !  
2. S !  a 
3. S !  A0 A 2 ::: A2 ::: Ak 1 Ak 1 ::: Ak 1 Ak 
A1 ::: A}1 |A2 A{z
| 1 {z } | {z }
de Ck1 ori de Ck2 ori de Ckk 1 ori
4.  A0 !  X A0
5. X Aj ! A0 A1 A1 ::: A1 ::: Ai Ai ::: Ai ::: Aj X; 8 j = 0; k 1;
| {z } | {z }
de Cj1 ori de Cji ori
6. X Ak ! A A| A{z::: A} ::: |Ai A{zi ::: A}i ::: Ak
0 1 1 1

 de Ck1 ori
! a; 8 j = 0; k:
de Cki ori


7. Aj
! Se observa ca sunt 2k + 6 reguli si k + 3 neterminali, deci avem O(k) reguli si
O(k) neterminali.
Exercitiul 1.3.33 Sa se gaseasca o gramatica care genereaza limbajul
1 :::
L = f an n  = n  0g;
k k
+ + +1

unde k  2 este natural xat.


Exercitii propuse spre rezolvare 34


 Se poate alege gramatica sensibila la context
G = (fS; A ; A ; :::; Ak ; X g; fag; S; P );
0 1

unde regulile P sunt:


1. S !  a 
2. S !  A0 A1 A2 ::: Ak 
3.  A0 !  A0 X
4. X Ai ! A A0 ::: A0} A
| 0 {z
A1 ::: A1} ::: Ai 1 Ai 1 ::: Ai 1 Ai X;
| 1 {z
8 i = 0; k 1;
| {z }
de Cki ori de Cki 11 ori de Ck1 i+1 ori



5. X Ak ! A0 A1 A2 ::: Ak 1 Ak
6. Ai ! a; 8 i = 0; k:
! Se observa ca sunt 2k + 5 reguli si k + 3 neterminali, deci avem O(k) reguli si
O(k) neterminali.
Exercitiul 1.3.34 Sa se gaseasca o gramatica care genereaza limbajul
L = faP n = n  0g;
( )

unde P este un polinom cu coe cienti naturali.


Exercitiul 1.3.35 Sa se gaseasca o gramatica care genereaza limbajul
L = faP n Q k = n  0g;
n
( )+ ( )

unde P este un polinom cu coe cienti naturali, Q este o combinatie liniara cu


coe cienti naturali de functii exponentiale.
Exercitiul 1.3.36 Fie gramatica G = (fS; A; C; Y ; Y g; f0; 1g; S; P ) cu regulile
0 1

P:
1. S ! A C
2. A ! i A Yi ; 8 i 2 f0; 1g;
3. Yj i ! i Yj ; 8 i; j 2 f0; 1g;
4. Yi C ! i C; 8 i 2 f0; 1g;
5. A ! 
6. C ! 
a) sa se determine tipul gramaticii G;


b) sa se demonstreze ca L(G) = fw w= w 2 f0; 1g g:

 Acest exercitiu prezinta o reducere a numarului de neterminali, de reguli, respectiv


de o ^njumatatire a numarului de pasi ai derivarii p^ana la cuv^antul terminal fata de
gramatica G din Exercitiul 1.2.7.
Exercitii propuse spre rezolvare 35

Exercitiul 1.3.37 Fie (an )n sirul lui Fibonnacci . Sa se gaseasca o gramatica


7
0

care genereaza limbajul L = f aa  =n  0g: n

 Metoda I: Putem alege gramatica G = (fS; A; B; X; Y; A ; A ; :::; A g; f; ag;


S; P ); cu regulile P :
1 2 8

1. S !  a  13. B A ! A B 6 6

2. S !  A X B Y  14. X A ! A X
3.  A !  A A A 15. A A ! A A
6 7

1 2 7 7

4. A A ! A A
2 16. A A A ! A A A
2 1 7 1 2

5. A X ! X A 17. A A X ! A
6. A B ! B A 18. A B ! A A
2 3 1 7 8

3 3 8 8

7. A Y ! Y B A
3 19. A Y ! X
4 8

8. A B ! A B 20. A ! a
9. A  ! A Y  21. B ! a
4 5

4 5

10. A Y ! A Y 22. X ! 
11. B A ! A B 23. Y  ! 
4 5

~
5 5

12. Y A ! A Y 5 6

Forma propozitionala cea mai importanta este


 A A ::: A X B B ::: B Y 
unde numarul de simboluri A; respectiv B; este an ; respectiv an : Folosind regulile
20; 21; 22; 23 se obtine cuv^antul terminal  aa +2  (deoarece an = an + an ).
+1
n
+2 +1

Pentru a trece la urmatoarea forma propozitionala, se urmaresc pasii:


 se copie simbolurile A dupa simbolul Y (^nsa ^nlocuind A cu B ), adaug^and ^nca
un Y ; astfel, se obtine forma propozitionala:
 A| A{z::: A} X B| B{z::: B} Y B| B{z::: B} Y 
de an+1 ori de an ori de an+1 ori

 apoi stergem simbolul X si substituim prima grupare de simboluri B cu A; iar


primul Y ^l ^nlocuim cu X ; obtinem forma propozitionala:
 A| A{z::: A} A| A{z::: A} X B| B{z::: B} Y 
de an+1 ori de an ori de an+1 ori
| {z }

 de an+2 ori


! Metoda a II-a: ([13]) Putem alege gramatica G = (fS; A; B; X; Y; Z g; f; ag;
S; P ); cu regulile P :
1. S !  a 
7 a0 = a1 = 1; an+2 = an+1 + an ; 8 n 2 N:
Exercitii propuse spre rezolvare 36

2. S !  a a 
3. S !  X A B 
4. X A ! A B X
5. X B ! A X
6. X  ! Y 
7. A Y ! Y A
8. B Y ! Y B
9.  Y !  X
10.  Y !  Z
11. Z A ! a Z
12. Z B ! a Z
13. Z  ! 
Metoda a III-a: (Reducerea celei de-a doua metode)
Putem alege gramatica G = (fS; A; B; X g; f; ag; S; P ); cu regulile P :
1. S !  a 
2. S !  A B 
3.  A !  X A
4. X A ! A B X
5. X B ! A X
6. X  ! 
7. A ! a
8. B ! a
Exercitiul 1.3.38 (generalizarea Exercitiului 1.3.37)
Fie (an )n un sir dat prin urmatoarea recurenta:
0

(a = p
0 0

a =q
an = p  an + q  an ; 8 n  2; p; q 2 N
1 0

1 2


Sa se gaseasca o gramatica care genereaza limbajul L = f aan  =n  0g:

 Consideram gramatica G de mai jos cu 6 neterminali si 15 reguli, ^n care regulile
1; 2; 3 sunt de start, regulile 4; 5 creeaza recurenta, regulile 6 10 conduc la terminali,
iar regulile 11 15 conduc la urmatoarea forma propozitionala. Fie gramatica G =
(fS; A; B; X; Y; Z g; f; ag; S; P ); cu regulile P :
1. S !  ap0 
2. S !  aq0 
3. S !  X Ap0 B q0 
4. X A ! Ap C X
5. X B ! B q X
6. X  ! Y 
7. A Y ! Y a
8. B Y ! Y a
Exercitii propuse spre rezolvare 37

9. C Y ! Y
10.  Y ! 
11. X  ! Z 
12. A5 Z ! Z A
13. B Z ! Z A
14. C Z ! Z B
15.  Z !  X

^In rezolvarea problemelor de generari de limbaje (in nite) de catre gramatici


(L(G) = M ), se recomanda urmatoarea metodologie:
 mai ^nt^ai, se cerceteaza derivarile pentru primele 2; 3 cuvinte din M ; astfel ne
formam un tip de a rmatie, ^n care se precizeaza c^ateva forme propozitionale
utile pentru \trecerea" la urmatorul cuv^ant din limbaj;
 incluziunea  este, ^n general, simpla deoarece necesita punerea ^n evidenta
a unei derivari care conduce la cuv^antul de forma generala din multimea M ;
demonstratia se face prin inductie dupa un parametru ce depinde de forma gen-
erala a cuvintelor din M; care uneori coincide cu lungimea derivarii (Exercitiul
1.2.1);
 incluziunea  se poate demonstra ^n doua moduri: arat^and ca singurele cuvinte
generate de G sunt cele din M sau, mai formal, folosind invarianti raportati la
formele propozitionale; demonstratia acestor invarianti se face prin inductie
dupa lungimea derivarii sau dupa un parametru ce depinde de gramatica G
(Exercitiul 1.2.3).
Capitolul 2

Automate nite
2.1 Introducere
De nitia 2.1.1 Se numeste automat nit determinist (notatie AFD) un 5-uplu
A = (S; ; Æ; s ; F ) unde:
0

 S este o multime nevida, nita, numita multimea starilor;


  este o multime nevida, nita, numita alfabetul de intrare;
 Æ este functia de tranzitie Æ : S   ! S ;
 s 2 S este starea initiala;
0

 F  S este multimea starilor nale.

De nitia 2.1.2 Dat A un (AF D); cu functia de tranzitie Æ : S   ! S; numim


functia de tranzitie extinsa Æb : S   ! S; functia de nita astfel:
1. Æb(s; ) = s; 8 s 2 S ;
2. Æb(s; w a) = Æ (Æb(s; w); a); 8 w 2  ; 8 a 2 :
Observatia 2.1.1  Uneori, ^n loc de relatia 2 din De nitia 2.1.2, se foloseste
relatia
20: Æb(s; a w) = Æb(Æ(s; a); w); 8 w 2  ; a 2 
(Exercitiul 2.10.1);
 Pentru simplitatea notatiei, Æb se noteaza tot cu Æ (aceasta notatie este justi cata
si de faptul ca Æb(s; a) = Æ (s; a); 8 s 2 S; 8 a 2 ).
De nitia 2.1.3 Daca A este un AF D; numim limbajul acceptat de A, multimea
L(A) = fw=w 2  ; Æ(s ; w) 2 F g: Multimea limbajelor acceptate de automatele
nite deterministe se noteaza cu R:
0

38
Introducere 39

Notatia 2.1.1 ^In reprezentarea unui automat nit cu ajutorul grafului de tranzitie,
se fac urmatoarele conventii:
 \cercul" ce de neste starea initiala sa aiba o \sageata" care atinge cercul;
 \cercurile" starilor nale sa e dublate de ^nca un cerc concentric (pentru exem-
pli care, consultati Exercitiul 2.1.1).
Exercitiul 2.1.1 Fie automatul dat prin graful de tranzitie (sau, echivalent, prin
tabela de tranzitie):
A = (fs ; s ; s g; fa; bg; Æ; s ; fs ; s g)
1 2 3 1 2 3

Z~# #
a 
a b
S
- b

"! 
SoS
s
1

"!
7
a
s2

s 1 s1 s2

S  a

#
s s s
SS 
b b
2 1 3

S / s s s

"!
3 2 1

s3

Sa se precizeze daca cuvintele a a b b; a b b b 2 L(A):


Solutie Conform De nitiei 2.1.2, putem scrie Æ(s ; a a b b) = Æ(Æ(s ; a a b); b) = 1 1

Æ(Æ(Æ(s ; a a); b); b) = Æ(Æ(Æ(Æ(s ; a); a); b); b) = Æ(Æ(Æ(s ; a); b); b) = Æ(Æ(s ; b); b) =
1 1 1 1

Æ(s ; b) = s : Acum, folosind De nitia 2.1.3 si faptul ca s 2 F; rezulta ca a a b b 2
2 3 3

L(A):
Pentru al doilea cuv^ant, se poate proceda analog. Noi, ^nsa, vom da o
solutie bazata pe Exercitiul 2.10.1 sau prima parte a Observatiei 2.1.1. Astfel,
avem Æ(s ; a b b b) = Æ(Æ(s ; a); b b b) = Æ(s ; b b b) = Æ(Æ(s ; b); b b) = Æ(s ; b b) =
1 1 1 1 2

Æ(Æ(s ; b); b) = Æ(s ; b) = s : Cum s 2= F; rezulta ca a b b b 2= L(A):


2 3 1 1

Exercitiul 2.1.2 Sa se construiasca un automat nit determinist care sa accepte
limbajul L = fa b cn = n  1g:
2

Solutie Constructia nu este di cila. Vom considera automatul nit determinist


A = (fs ; s ; s ; s ; s ; s g; fa; b; cg; Æ; s ; fs g);
0 1 2 3 4 5 0 4

unde functia Æ este data prin graful de tranzitie:


Introducere 40

---- 
Rs  c


0


a s 1
b
a; c
s2
b
a; b
s 3
c
s
4

sR
a; c
a; b
b; c
? +


s

a; b; c
5

Sa aratam ca L = L(A): Vom proceda prin dubla incluziune.


: Fie n  1 arbitrar. Avem Æ(s ; a b cn ) = Æ(Æ(s ; a); b cn ) = Æ(s ; b cn ) =
0
2
0
2
1
2

Æ(Æ(s ; b); b cn) = Æ(s ; b cn ) = Æ(Æ(s ; b); cn ) = Æ(s ; cn ) = Æ(Æ(s ; c); cn ) =


1 2 2 3 3
1

Æ(s ; cn ) = Æ(s ; cn ) = ::: = Æ(s ; c) = s : Cum s 2 F rezulta ca a b cn 2 L(A):


4
1
4
2
4 4 4
2

: Fie w 2 L(A). Trebuie sa aratam ca exista n 2 N astfel ^nc^at w = a b cn : 2

Pentru simpli carea calculelor, vom face o notatie first :  !  [ fg; astfel
first(a w) = a (este vorba de prima litera a unui cuv^ant).
 Daca first(w) = b sau first(w) = c, atunci automatul ajunge ^n starea s 5

si nu o mai paraseste p^ana la terminarea citirii cuv^antului deoarece Æ(s ; a) = 5

s ; Æ(s ; b) = s ; si Æ(s ; c) = s : Cum s 2= F rezulta ca w 2= L(A); contradictie;


5 5 5 5 5 5

 Daca first(w) = a atunci w = a w deci Æ(s ; w) = Æ(Æ(s ; a); w ) = Æ(s ; w ):


1 0 0 1 1 1

Acum distingem situatiile:


{ daca first(w ) = a sau first(w ) = c atunci ajungem ^n starea s si deci
1 1 5

w 2= L(A); contradictie;
{ daca first(w ) = b atunci w = b w deci Æ(s ; w ) = Æ(Æ(s ; b); w ) =
1 1 2 1 1 1 2

Æ(s ; w ): Acum distingem situatiile:


2 2

 daca first(w ) = a sau first(w ) = c atunci ajungem ^n starea s si


deci w 2= L(A); contradictie;
2 2 5

 daca first(w ) = b atunci w = b w deci Æ(s ; w ) = Æ(Æ(s ; b); w ) =


2 2 3 2 2 2 3

Æ(s ; w ): Acum distingem situatiile:


3 3

 daca first(w ) = a sau first(w ) = b atunci ajungem ^n starea s


3 3 5

si deci w 2= L(A); contradictie;


 daca first(w ) = c atunci w = c w deci Æ(s ; w ) =
3 3 4 3 3

Æ(Æ(s ; c); w ) = Æ(s ; w ): ^In aceasta stare (s ), putem citi oric^ate


3 4 4 4 4

simboluri c, iar daca apare a; b ajungem ^n starea s si ne ind - 5

nala, cuv^antul nu este acceptat. Asadar w = cm ; unde m  0 4

arbitrar.
Obtinem w = a w = a b w = a b b w = a b b c w = a b b c cm, deci exista n 2

1 2 3 4

N ; n = m + 1 astfel ^nc^at w = a b cn : 2

Cu aceasta, ambele incluziuni sunt demonstrate, deci are loc relatia L(A) = L:
Sumatorul binar 41

2.2 Sumatorul binar


^In aceasta sectiune, vom prezenta un tip special de automat. Este vorba de sumatorul
binar. Automatul are ca scop calculul sumei binare a doua numere reprezentate ^n
baza doi, deci este clar ca alfabetul de intrare este format din perechi constituite din
cifrele celor doua numere. Consideram ca cele doua numere au acelasi numar de cifre,
^n caz contrar, se completeaza cel mai mic numar cu zerouri^n fata, p^ana c^and numarul
de cifre devine acelasi. Cum suma a doua numere binare este posibila mereu, este
clar ca automatul va avea toate starile nale. Starile automatului sunt perechi peste
f0; 1g deoarece trebuie efectuata suma a doua numere binare. Numerele vor citite
de catre automat cifra cu cifra, primul numar ind plasat pe prima componenta, iar
cel de-al doilea pe a doua componenta. Dar unde este memorata suma lor ? Foarte
simplu, suma binara a doua cifre va pastrata ^n prima componenta, iar bitul de
transport ^n a doua componenta. Suma lor nala se va obtine parcurg^and sirul de
stari prin care automatul a trecut, lu^and ^n considerare doar prima componenta, iar
la sf^arsit se adauga bitul de transport (daca este nevid).
Exercitiul 2.2.1 Fie doua numere arbitrare (dar cu acelasi numar de cifre) reprezen-
tate ^n baza doi.
a) sa se construiasca un automat nit determinist care sa simuleze un sumator
binar;
b) sa se prezinte toate modurile de reprezentare posibile (tabelar, analitic, graf de
tranzitie);
c) sa se dea o interpretare logica a acestuia;
d) folosind automatul astfel construit, sa se efectueze suma binara a numerelor
a = 1010 si b = 1101:
Solutie a) Tin^and cont de indicatiile precedente exercitiului nostru, de nim au-
tomatul A = (B; B; Æ; (0; 0); B ); unde B = f(0; 0); (0; 1); (1; 0); (1; 1)g (sau f0; 1g 
f0; 1g; sau f0; 1g ). ^Inainte de a de ni functia Æ; sa facem c^ateva notatii:
2

 starile le notam sn = (Sn ; Rn ); unde Sn ; Rn 2 f0; 1g;


 simbolurile alfabetului de intrare le notam cu in = (an ; bn ); unde an ; bn 2 f0; 1g:
Functia de tranzitie o vom de ni tabelar ^n modul urmator:
sn in sn = Æ(sn ; in )
+1

Sn Rn an bn Sn Rn +1 +1

0,1 0 0 0 0 0
0,1 0 0 1 1 0
0,1 0 1 0 1 0
0,1 0 1 1 0 1
0,1 1 0 0 1 0
0,1 1 0 1 0 1
0,1 1 1 0 0 1
0,1 1 1 1 1 1
Sumatorul binar 42

Citirea acestui tabel se face pe linii. Din starea (Sn ; Rn ) cu simbolul (an ; bn ) ajungem
^n starea (Sn ; Rn ): De exemplu, Æ((0; 1); (1; 0)) = (0; 1):
+1 +1

b) Reprezentarea automatului prin modul tabelar a fost deja facut la punctul a).
^Insa pentru claritate, vom mai prezenta ^nca o reprezentare tabelara a automatului.
Aceasta este mai redusa, av^and doar 4 linii si 4 coloane.
sn nin (0,0) (0,1) (1,0) (1,1)
(0,0) (0,0) (1,0) (1,0) (0,1)
(0,1) (1,0) (0,1) (0,1) (1,1)
(1,0) (0,0) (1,0) (1,0) (0,1)
(1,1) (1,0) (0,1) (0,1) (1,1)
Citirea acestui tabel se face pe linii si pe coloane. Se citeste de pe prima coloana
starea, iar de pe prima linie simbolul din banda de intrare. Apoi, la intersectia
dintre linia si coloana respectiva, se citeste starea ^n care ajungem. De exemplu,
Æ((0; 1); (0; 0)) = (1; 0):
Deoarece ultimele doua linii sunt egale cu primele doua, rezulta ca putem scrie o
forma de reprezentare tabelara si mai redusa.
sn nin (0,0) (0,1) (1,0) (1,1)
(0,0),(1,0) (0,0) (1,0) (1,0) (0,1)
(0,1),(1,1) (1,0) (0,1) (0,1) (1,1)
Cea mai economicoasa reprezentare din punct de vedere a spatiului de memorie este
^nsa de nirea analitica a functiei de tranzitie a automatului. Astfel
Æ((Sn ; Rn ); (an ; bn )) = ((an + bn + Rn ) mod 2; (an + bn + Rn ) div 2)
unde a mod b, respectiv a div b; ^nseamna restul, respectiv c^atul, ^mpartirii lui a la b:
Se veri ca imediat echivalenta cu moduri anterioare de reprezentare a functiei de
tranzitie. De exemplu, Æ((1; 0); (1; 1)) = ((1 + 1 + 0) mod 2; (1 + 1 + 0) div 2) = (0; 1):
O ultima reprezentare pe care o dam este graful de tranzitie. Aceasta este utila
c^and se urmareste acceptarea unui cuv^ant de lungime su cient de mare si este rapida
pentru exemplele care se testeaza intuitiv.
Sumatorul binar 43

#?
~
(0; 0)
#
(0; 1); (1; 0)


"! 
"!
-
(1; 1)
(0; 0) (0; 1)
6 (0; 0) 6
(0; 1); (0; 0) (1; 1)
(0; 1);

# #
(1; 0)

 
(1; 0)
? (1; 1) ?

"!


(1; 0)
(0; 0) 
"!

(1; 1)

(0; 1); (1; 0) (1; 1)


c) Pentru a da o interpretare logica, vom face apel la cunostinte despre se-
mantica calculului propozitional. Astfel, consideram ca Rn ; an ; bn sunt variabile
propozitionale. Din reprezentarea functiei de tranzitie de la punctul a), extragem
din coloanele referitoare la Sn ; respectiv Rn ; doua formule ^n forma normala
+1 +1

disjunctiva . 1

Sn  (eRn ^ean ^ bn ) _ (eRn ^ an ^ebn ) _ (Rn ^ean ^ebn ) _ (Rn ^ an ^ bn) 


+1

 Rn $ an $ bn ; 2

Rn  (eRn ^ an ^ bn ) _ (Rn ^ean ^ bn ) _ (Rn ^ an ^ebn ) _ (Rn ^ an ^ bn ) 


+1

 (a ^ b) _ (R ^ b) _ (R ^ a):
d) Am vazut deci ca daca Æ((Sn ; Rn ); (an ; bn )) = (Sn ; Rn ) atunci Sn +1 +1 +1

pastreaza suma binara dintre an ; bn si bitul de transport Rn : Pentru a face suma
a doua numere folosind sumatorul binar, trebuie mai ^nt^ai sa reprezentam ^n baza 2
cele doua numere. Astfel, e a = a a :::an si b = b b :::bm . Daca m 6= n; atunci
1 2 (2) 1 2 (2)

se completeaza cu zerouri ^n fata numarul mai mic p^ana se obtine un numar egal de
cifre. Deci se rescriu cele doua numere astfel ^nc^at m = n: Consideram acum perechea
formata din oglinditele acestor doua cuvinte peste f0; 1g: Aceasta va
(an an :::a a ; bn bn :::b b )
1 2 1 1 2 1

sau, echivalent, pun^and ^n evidenta ecare simbol


(an ; bn )(an ; bn ):::(a ; b )(a ; b )
1 1 2 2 1 1

1 Pentru orice formula booleana propozitionala F exista o formula booleana propozitionala F 0 ^n
forma normala disjunctiva astfel ^nc^at F 0  F: O formula booleana propozitionala este ^n forma
normal a disjunctiv a daca este o conjunctie de subformule care sunt disjunctii de literali. Un
literal este un atom sau negat ia sa.
2 a $ b  (ea _ b) ^ (a_eb)  (ea^eb) _ (a ^ b)
Relatiile A;s0 si L 44

Cuv^antul va acceptat deoarece multimea starilor nale coincide cu multimea starilor.


Ca efect lateral vom retine sirul S S :::Sn Sn Rn ; ^n care bine^nteles S = 0:
1 2 +1 +1 1

Deoarece cuvintele au fost oglindite la ^nceput, pentru a scrie a + b trebuie sa le mai
oglindim o data. Astfel, obtinem:
(
a+b=
Rn Sn Sn :::S S S
+1 +1 3 2 1 (2) daca Rn +1 6= 0
Sn Sn :::S S S
+1 3 2 1 (2) daca Rn +1 =0
Sa facem suma pentru numerele prezentate la punctul d). Din a = 1010 si b = 1101
formam cuv^antul w = (0; 1)(1; 0)(0; 1)(1; 1): Pornind din starea initiala (0; 0) obtinem
sirul tranzitiilor:
(0; 0) ` (1; 0) ` (1; 0) ` (1; 0) ` (0; 1)
Cuv^antul w este acceptat si conform procedeului de mai sus, obtinem a + b = 10111:

2.3 Relatiile A;s 0


si L
De nitia 2.3.1 Fie A = (S; ; Æ; s ; F ) un automat nit determinist. De nim
urmatoarele relatii peste  :
0

 (p; q) 2 A;s0 () Æ(s ; p) = Æ(s ; q);


0 0

 (p; q) 2 L () L (p r) = L(q r); 8 r 2  :


!
 L
Referitor la relatiile din De nitia 2.3.1, putem spune ca:
reprezinta functia caracteristica asociata unei multimi, L : A ! f0; 1g
astfel:
L = 1 daca x 2 A
n
0 daca x 2= A
 Relatia L se mai numeste si relatia lui Nerode, dupa numele celui ce a de nit-o;
 Se observa imediat ca A;s0  L (amanunte ^n [9, 10, 11]);
 Relatia L se poate de ni si fara a avea un automat, ci doar limbajul L   :
^In continuare, vom prezenta un exercitiu ^n care se demonstreaza o identitate
necesara pentru simpli carea calculelor din Exercitiul 2.3.2.
Exercitiul 2.3.1 Fie I = fi ; i g: Sa se demonstreze urmatoarea egalitate:
1 2

i I  [ fi g fi g i I  = fi g [ I  i i I  :
2 1
+
2
+
1 2
+
2 1
Relatiile A;s0 si L


45


! Reamintim ca i I  = fi u=u 2 I  g; fi g = fik =k  1g; fi g fi gi I  =
fik il i u=k; l  1; u 2 I  g:
1 2 1
2 2 1
+
1 1
+
2 1

Solutie Notam cu M = i I  [ fi g fi g i I  si M = fi g [ I  i i I  : Folosind


1 2 1
+
2
+
1 2 2
+
2 1

dubla incluziune, vom arata ca M = M :


: Fie p 2 M : Sa aratam ca p 2 M : Din p 2 M rezulta ca p 2 i I  sau
1 2

p 2 fi g fi g i I  :
1 2 1 2
+ +
1 2 1

 Cazul I: p 2 i I  deci p = i u; cu u 2 I  ;
2 2

{ Subcazul I.1: u = k  0; v 2 I  ; de unde p = i i ik v 2 I  i i I 


ik v; 2 1
1
2 1

deci p 2 M ;
1 1

{ Subcazul I.2: u = ik il v; k  0; l  1; v 2 I  ; de unde p = ik i i il v 2 1

I  i i I  ; deci, si ^n ultimul caz, avem p 2 M :


2 1 2 2 1 1

2 1 2

 Cazul II: p 2 fi g fi g i I  adica p = ik il i u; cu k; l  1: Grupam convenabil


+ +

si obtinem: p = ik il i i u 2 I  i i I  :
1 2 1 1 2 1
1
1 2 2 1 2 1

: Fie p 2 M : Sa aratam ca p 2 M : Din p 2 M ; rezulta ca p 2 fi g +


sau
p 2 I i i I :
2 1 2 2

2 1

 Cazul I: p 2 fi g 2
+
adica p = ik ; k  1: Scriem p = i ik 2 i I   M ; deci 2
1
2 1

p2M :
2 2

 Cazul II: p 2 I  i2 i1 I  adica p = u i2 i1 v; unde u; v 2 I  :


{ Subcazul II.1: u = ; de unde p = i i v 2 i I   M ; 2 1 2 1

{ Subcazul II.2: u = ik u ; k  1; u 2 I  ; =) p = i ik u i i v 2 i I  
2 1 1 2 2
1
1 2 1 2

M; 1

{ Subcazul II.3: u = ik il ; k  1; l  0 de unde p = ik il i v 2 +1

fi g fi g i I   M deci p 2 M ;
1 2 1 2 1
+ +
1 2 1 1 1

{ Subcazul II.4: u = ik il im u ; k; l; m  1; u 2 I  : Rezulta p =


ik il i im u i i v = ik il i v 2 fi g fi g i I   M ; unde am notat cu
1 2 1 1 1
1 + +
1 2 1 1 1 2 1 1 2 1 1 1 2 1 1

v = im u i i v; deci si ^n acest ultim caz, rezulta ca p 2 M :


1 1
1
1 2 1 1

^In concluzie, M = M : 1 2

Exercitiul 2.3.2 Fie automatul nit determinist


A = (fs ; s ; s ; s g; fi ; i g; Æ; s ; fs g)
0 1 2 3 1 2 0 2

cu Æ de nit prin graful de tranzitie:


Relatiile A;s0 si L 46


R 
 s 0
i1


-  s 1 i 1

i 2 i
2


? 

?


s 3
i1 
 Y s 2 i 2

i ;i1 2

a) sa se calculeze L(A);


b) sa se calculeze A;s0 ;
c) sa se arate ca A;s0 = L ;
d) sa se determine automatul minimal corespunzator limbajului L = L(A):
Solutie a) Pentru a determina limbajul L(A); parcurgem acest graf de tranzitie din
starea initiala s si p^ana ^n starea s ; ind singura nala, retin^and etichetele arcelor
0 2

prin care trecem.


Daca u = i v atunci Æ(s ; i v) = s ; 8 v 2 fi ; i g : Cum s 2= F atunci cuvintele
2 0 2 3 1 2 3

din limbajul L(A) nu ^ncep cu i : Starea s se mai numeste stare de blocare .


2 3
3

Deci u = i v: Sa vedem unde \mergem" cu alte simboluri. Deocamdata suntem ^n
1

starea s ; deoarece Æ(s ; i ) = s : ^In starea s putem, eventual, \sta citind" simbolul
1 0 1 1 1

i sau \mergem" direct ^n starea s : Deci v = ik i v ; k  0: Din aceasta stare s


1 2 1 2 1 2

putem citi i de oric^ate ori sau \mergem" cu simbolul i ^n starea s si ne-am blocat.
2 1 3

Deci, cum s este stare nala, cuvintele v care vor genera u 2 L(A); sunt de forma
2 1

v = il ; l  0: Astfel, am demonstrat ca singurele cuvinte acceptate de A sunt de


forma ik il ; l; k  1: Asadar, L(A) = fik il = l; k  1g:
1 2

1 2 1 2

b) Facem notatia [si ] 0 = fp=p 2  ; Æ(s ; p) = si g; unde si 2 S (uneori, se mai


A;s 0

noteaza doar [si ]; c^and este vorba de un singur automat). Folosind acum De nitia
2.3.1, rezulta ca p A;s0 q () 9 si 2 S astfel ^nc^at p 2 [si ]; q 2 [si ]: ^In acest sens,
vom calcula multimea c^at (factor) relativ la aceasta relatie de echivalenta. ^In cazul
exercitiului nostru, avem:
 =A;s = f[s ] ; [s ] ; [s ] ; [s ] g
0 0 A;s 0 1 A;s 0 2 A;s 0 3 A;s 0
Urmarind graful de tranzitie al automatului A; deducem imediat urmatoarele clase
de echivalenta:
 [s ] 0 = fp=Æ(s ; p) = s g = fg;
0 A;s 0 0

3 Starea s este stare de blocare daca s 2= F si Æ(s; i) = s; 8 i 2 : Aceste stari au proprietatea
ca acele cuvinte care ajung ^n s; nu sunt acceptate. De aceea, aceste stari se folosesc pentru a putea
de ni total functia de tranzitie a automatului.
Relatiile A;s0 si L 47

 [s ]
1
0
A;s
= fp=Æ(s ; p) = s g = fi
0 g ; 1 1
+

 [s ] 0 = fp=Æ (s ; p) = s g = fi g fi g ;
+ +


2 A;s 0 2 1 2

 [s ]  
0 = fp=Æ (s ; p) = s g = fi g fi g i I [ i I :
+ +


3 A;s 0 3 1 2 1 2

! E clar ca j =A;s0 j = jS j; adica cardinalul multimii c^at este egal cu numarul
starilor automatului A:
Folosind Exercitiul 2.3.1, multimea de cuvinte din clasa s este [s ] 0 = fi g [ +

I i i I :
3 3 A;s 2

2 1

c) Am vazut ca incluziunea A;s0  L este imediata (pentru detalii, consultati


[9, 10, 11]). Trebuie sa mai demonstram doar ca L  A;s0 ; adica din (p; q) 2 L
sa rezulte (p; q) 2 A;s0 ; unde L = L(A). Din De nitia 2.3.1, rezulta ca (p; q) 2 L
^nseamna L (p r) = L (q r); 8 r 2  ; sau echivalent p r 2 L () q r 2 L; 8 r 2  :
Din A;s0  L rezulta ca  =A;s0   =L ; adica clasele de echivalenta ale relatiei
L sunt incluse ^n clasele de echivalenta ale relatiei A;s0 : Astfel, daca (p; q) 2 L ;
pentru a arata ca (p; q) 2 A;s0 = [si ]; vom alege p 2 [si ] si apoi, vom arata ca
q 2= [sj ]; 8 sj 2 S; j 6= i: Folosind acest procedeu, pentru problema noastra vom
distinge patru cazuri:
 Cazul I: p 2 fg; adica p = : Fie q 2  astfel ^nc^at (p; q) 2 L: Asa cum
am discutat mai sus, vom considera, prin reducere la absurd, ca q 2 fi g +

sau q 2 fi g fi g sau q 2 fi g [ I  i i I  : Aceste subcazuri vor conduce la


1
+ + +
1 2 2 2 1

contradictie, deci q apartine clasei ramase prin eliminare, adica q 2 fg: Astfel,
e subcazurile:
{ Subcazul I.1: Presupunem, prin reducere la absurd, ca q 2 fi g ; adica +

q = ik ; k  1: Din (p; q) 2 L ; rezulta ca L (r) = L(ik r); 8 r 2  :


1

Alegem r = i (sau, mai general, r = il ; l  1) si obtinem relatia L (i ) =


1 1

2 2

L (ik i ): Conform punctului a), avem ca i 2= L, iar ik i 2 L, deci ar


2

1 2 2 1 2

rezulta 0 = 1 ceea ce este absurd.


{ Subcazul I.2: Presupunem, prin reducere la absurd, ca q 2 fi g fi g ; + +

adica q = ik il ; k; l  1: Din (p; q) 2 L; deducem L (r) = L(ik il r):


1 2

1 2 1 2

Putem alege r =  si rezulta L() = 0; L (ik il ) = 1; ceea ce conduce la1 2

contradictie;
{ Subcazul I.3: Presupunem q 2 fi g [ I  i i I  ; deci distingem situatiile:
2
+
2 1

 I.3.1: q 2 fi g ; adica q = ik ; k  1: Avem L(r) = L(ik r); 8 r 2


+

 : Alegem r = i i (sau, mai general, r = il im ; l; m  1), deci


2 2 2

1 2 1 2

L (r) = 1; pe c^and L(ik r) = 0; deci contradictie;


2

 I.3.2: q 2 I  i i I  ; adica q = u i i v; u; v 2 I  de unde L (r) =


L (u i i r); 8 r 2  : Aleg^and r = i i (sau, mai general, r =
2 1 2 1

2 1 1 2

ik il ; k; l  1), rezulta L (r) = 1; pe c^and L (u i i v) = 0 deoarece


1 2 2 1

Æ(s ; u i i v) = s ; contradictie .
0 2 1 3
4

4^In acest subcaz, se vede utilitatea Exercitiului 2.3.1, calculele ind mai rapide.
Relatiile A;s0 si L 48

Cum toate subcazurile au esuat, rezulta prin metoda eliminarii ca q 2 fg;
adica (p; q) 2 A;s0 ;
 Cazul II: p 2 fi1 g+ ; adica p = ik1 ; k  1:
{ Subcazul II.1: q = ; si din (p; q) 2 L; rezulta ca L (ik r) = L (r); 8 r 2
 : Observam ca acest subcaz este simetric cu subcazul I.1. Mentionam
1

doar ca prin alegerea lui r = i se obtine contradictie; 2

{ Subcazul II.2: q 2 fi g fi g adica q = il im ; l; m  1: Avem relatia


+ +

L (ik r) = L (il im r); 8 r 2  : Se alege r =  si se obtine contradictia;


1 2 1 2

1 1 2

{ Subcazul II.3: q 2 fi g [ I  i i I  ; distingem situatiile:


2
+
2 1

 q 2 fi g adica q = il ; l  1: Avem relatia L (ik r) = L (il r):


2
+

Contradictia se obtine pentru r = i ; (sau, mai general, r = im; m 


2 1 2

2 2

1) si obtinem 0 = 1;
 q 2 I  i i I  adica q = u i i v: Din (p; q) 2 L ; deducem relatia
L (ik r) = L(u i i v r): Contradictia se obtine pentru r = il ; l  1:
2 1 2 1

1 2 1 2

Deci q 2 fi
g ; si cum p 2 fi g ; rezulta (p; q) 2 A;s0 ;
1
+
1
+

 Cazul III: p 2 fi g fi g adica p = ik il ; k; l  1: Spre deosebire de celelalte


1
+
2
+
1 2

cazuri, de data aceasta vom proceda direct (se poate si indirect, adica analog
cu procedeul din cazurile I si II). Relatia L (p r) = L(q r) pentru r =  devine
L(p) = L (q): Dar L (p) = 1; deci L (q) = 1; si cum exista o singura stare
nala, rezulta q 2 fi g fi g ; deci, ^n acest caz, am obtinut incluziunea fara
1
+
2
+

sa procedam prin reducere la absurd;


 Cazul IV: p 2 fi g [ I  i i I  : Asemanator cu cazurile I, II si III (baz^andu-ne
+

pe simetrie), va rezulta ca q 2 fi g [ I  i i I  :


2 2 1
+
2 2 1


Astfel am eliminat toate cazurile, adica L  A;s0 ; de unde rezulta ca L = A;s0 ;


d) Automatul minimal coincide cu cel initial deoarece A;s0 = L ;
! De fapt, automatul minimal coincide p^ana la un izomor sm cu A, deoarece se
pot renumerota starile, scriindu-se corespunzator acestei bijectii Æ si F (amanunte la
pagina 54)
Exercitiul 2.3.3 Fie automatul A = (fs1 ; s2 ; s3 ; s4 ; s5 ; s6 g; f0; 1g; Æ; s1; fs3 ; s4 ; s5 g)
cu Æ de nit prin graful de tranzitie:
Relatiile A;s0 si L 49


R -
 
0

s 1
s 2



1
? 

?
1


 s 3

1 0 
 s 4


 j
0 1
?+ ?


6
s 5

1 
- o s 6

0; 1
0
a) sa se calculeze A;s1 ;
b) sa se calculeze L(A);
c) sa se determine L ;
d) sa se determine automatul minimal corespunzator limbajului L(A):
Solutie a) A determina o relatie de echivalenta ^nseamna, de fapt, a-i calcula clasele
de echivalenta. ^In acest sens, vom calcula  =A;s1 = f[s ]; [s ]; [s ]; [s ]; [s ]; [s ]g:
E clar ca [s ] 1 = fp=Æ(s ; p) = s g = f(00)g deoarece ^n s se poate ajunge
1 2 3 4 5 6

1 A;s 1 1 1

din s sau s (s ; s fac parte din aceeasi componenta tare conexa ).


1 2 1 2
5

Analog, se obtin si celelalte clase de echivalenta:


[s ] 1 = fp=Æ(s ; p) = s g = f(00)0g (sau, echivalent, 0(00));
[s ] 1 = fp=Æ(s ; p) = s g = f(00)1g;
2 A;s 1 2

[s ] 1 = fp=Æ(s ; p) = s g = f(00)01g;
3 A;s 1 3

[s ] 1 = fp=Æ(s ; p) = s g = f(00)100; (00) 0100g = f0100g (sau, echiva-


4 A;s 1 4

lent, 010 );
5 A;s 1 5
+

[s ] 1 = fp=Æ(s ; p) = s g = f(00)11f0; 1g; (00) 011f0; 1g; 0 1001f0; 1gg =


f0 11f0; 1g; 0 1001f0; 1gg = f0 101f0; 1gg;

6 A;s 1 6

 b) Deoarece F = fs ; s ; s g; rezulta imediat ca L(A) = f[s ]; [s ]; [s ]g =


f(00)1; (00) 01; 0100g = f01; 0100g = f010 g;
3 4 5 3 4 5

! Ca si ^n Exercitiul 2.3.2 (precedent), avem si ^n acest automat o stare de blocare.
Este vorba de starea s : 6

c) Avem ca A;s1  L ; deci  =L   =A;s1 ; deci clasele de echivalenta asociate
relatiei L sunt printre clasele de echivalenta ale relatiei A;s1 :
5 Spunem ca o multime de v^arfuri C a unui graf orientat G este componenta tare conexa daca
pentru orice x; y 2 C; exista ^n G drumuri de la x la y si de la y la x:
Relatiile A;s0 si L 50

 Cazul I: Fie p 2 [s ] 1 : Vom arata ca daca q 2 [s ] 1 atunci (p; q) 2


1 2

L; adica L (p r) = L(q r): Apoi vom arata ca pentru cuvintele q 2
A;s A;s

f[s ] 1 ; [s ] 1 ; [s ] 1 ; [s ] 1 g nu avem (p; q) 2 L : De aici va rezulta


3 A;s 4 A;s 5 A;s 6 A;s

[s ] = [s ] adica p si q vor ^n aceeasi clasa de echivalenta.


1 L 2 L

{ Subcazul I.1: Fie deci p 2 [s ] 1 si q 1 2 [s ] 2


1: Pentru a arata ca
(p; q) 2 L ; vom demonstra ca
A;s A;s

(1) L (p r) = L (q r); 8 r 2  :
Fiindca L este dat prin intermediul unui automat nit determinist, rezulta
ca L (p r) = 1 () Æ(s ; p r) 2 F (unde s este starea initiala). Cuv^antul
r poate avea una din formele ; 0k ; 0k 1 ; k  0: Cazul r =  este banal,
1 1

deoarece F (Æ(s ; p)) = F (s ) = 0 si F (Æ(s ; q)) = F (s ) = 0; deci


1 1 1 2

(p; q) 2 L: Cazul r = 0k ; k  0 se face analog cu cazul r = 0k 1 : De


aceea, pentru simplitate, vom considera doar cazul r = 0k 1 : Dupa cum
k este 0 sau strict pozitiv, distingem subcazurile:
 I.1.1: k = 0: Avem Æ(s ; p 1 ) = Æ(Æ(s ; p); 1 ) = Æ(s ; 1 ) = 1 1 1

Æ(Æ(s ; 1); ) = Æ(s ; ) si Æ(s ; q 1 ) = Æ(Æ(s ; q); 1 ) = Æ(s ; 1 ) =


1 3 1 1 2

Æ(Æ(s ; 1); ) = Æ(s ; ): Cum s ; s 2 F rezulta ca pentru = 


2 4 3 4

avem F (Æ(s ; p 1)) = F (Æ(s ; q 1)) deci p r 2 L si q r 2 L: Acum vom


demonstra urmatoarea a rmatie prin inductie dupa j j = m  1:
1 1

(2) Æ(s ; ) = Æ(s ; ); 8 2  :


3 4
+

Pasul initial: j j = 1: Se observa din automatul A ca Æ (s ; 0) = 2

Æ(s ; 0) = s si Æ(s ; 1) = Æ(s ; 1) = s ; deci are loc relatia (2);


4 5 3 4 6

Pasul inductiv: j j > 1: ^Inseamna ca se poate scrie sub forma


= 0 0 ; sau = 1 0 ; unde j 0 j  1: Pentru prima situatie,
avem Æ(s ; ) = Æ(s ; 0 0 ) = Æ(Æ(s ; 0); 0 ) = Æ(s ; 0 ) si Æ(s ; ) =
Æ(s ; 0 0 ) = Æ(Æ(s ; 0); 0 ) = Æ(s ; 0 ): Deci are loc relatia (2): Analog
3 3 3 5 4

4 4 5

se procedeaza pentru cea de-a doua situatie.


Din a rmatia (2) vom deduce ca F (Æ(s ; p r)) = F (Æ(s ; q r)); 8 r 2
 ; adica are loc relatia (1):
1 1

 I.1.2: k > 0: Dupa cum k este par sau impar, vom distinge cazurile:
 I.1.2.1: k par, adica k = 2  l; l > 0: Avem Æ(s ; p 0 l 1 ) = 1
2

Æ(Æ(s ; p); 0 l 1 ) = Æ(s ; 0 l 1 ) = Æ(Æ(s ; 0 l ); 1 ) = Æ(s ; 1 ) =


1
2
1
2
1
2
1

Æ(s ; ) si, ^n mod asemanator, se arata ca Æ(s ; q 0 l 1 ) =


3 1
2

Æ(s ; ): Apoi se continua ca ^n cazul I.1.1.


4

 I.1.2.2: k impar, adica k = 2  l + 1; l  0: Asemanator cu cazul


precedent, obtinem Æ(s ; p 0 l 1 ) = Æ(s ; ) si Æ(s ; q 0 l 1 ) =
1
2 +1
4 1
2 +1

Æ(s ; ): La fel, se continua ca ^n cazul I.1.1.


3

{ Subcazul I.2: Presupunem, prin reducere la absurd, ca q 2 [s ] 1 si


L (p r) = L (q r); 8 r 2  : Din p 2 [s ] rezulta Æ(s ; p) = s : Analog
3 A;s

Æ(s ; q) = s : Alegem r = 0 si avem Æ(s ; 0) = s 2= F; ^n timp ce Æ(s ; 0) =


1 1 1

1 3 1 2 3
Relatiile A;s0 si L 51

s 2 F; deci p r 2= L si q r 2 L; adica L (p r) 6= L(q r); ceea ce este o


5

contradictie. Ram^ane ca q 2= [s ] 1 ; 3 A;s

{ Subcazul I.3: Se alege r = 0 si se procedeaza ca ^n subcazul I.2; deci


q 2= [s ] 1 ;
4 A;s

{ Subcazul I.4: Se alege r = 0 si se procedeaza ca ^n subcazul I.2; deci


q 2= [s ] 1 ;
5 A;s

{ Subcazul I.5: Se alege r = 1 si se procedeaza ca ^n subcazul I.2; deci

 q 2= [s ] 1 ;
6 A;s

 !
A;
Date A; B doua multimi (de cuvinte), facem notatia A  B
8 y 2 B:
() x  y; 8 x 2

 Cazul II: Fie p 2 [s2 ]A;s1 : Deoarece s-a aratat ca [s1 ]L [s2 ]; rezulta si [s2 ]L [s1 ]
(deoarece relatia L este simetrica). Apoi se arata asemanator ca ^n cazul I ca
q 2= f[s ]; [s ]; [s ]; [s ]g astfel ^nc^at p L q:
3 4 5 6

 Cazul III: Fie p 2 [s ] 1 : Deoarece nu avem [s ]L[s ] si [s ]L [s ]


3 A;s 1 3 2 3

rezulta ca nici [s ]L [s ] si [s ]L[s ] nu este adevarat. Apoi, se arata ca
3 1 3 2

[s ]L [s ]; [s ]L[s ] si nu are loc [s ]L [s ];


3 4 3 5 3 6

 Cazul IV: Asemanator cu cazul III, se arata ca [s4 ]L [s5 ] si nu avem [s4 ]L [s6 ];
 Cazul V: La fel ca ^n cazul III, se arata ca nu are loc [s5 ]L [s6 ]:

Deci relatia L va determina urmatoarele clase de echivalenta: C = [s ] [ [s ]; C =


[s ] [ [s ] [ [s ]; C = [s ]:
1 1 2 2

3 4 5 3 6

[s ]3
C 2

[s ]2
[s ]4

C 1

[s ]1
[s ]5

[s ]6

C 3

C [ C [ C =  ; L = C ; 
1

2 3 2 L=C 1 [C 3

Consideram acest disc ca ind limbajul  ^mpartit de relatia A;s1 ^n sase parti
(le vom desena egale). Asa cum am demonstrat, clasa C cuprinde sectoarele discului 1

corespunzatoare claselor [s ] si [s ]; clasa C cuprinde sectoarele discului corespun-


1 2 2

zatoare claselor [s ]; [s ] si [s ]; si clasa C cuprinde sectorul corespunzator clasei


3 4 5 3

~
[s ]:
6

Cele trei clase de echivalenta ale relatiei L se pot acum formula astfel:
Relatiile A;s0 si L 52

 x2C 1 daca x nu contine 1;


 x2C 2 daca x are exact un simbol 1;



!
 x2C 3 daca x are (strict) mai mult de un simbol 1:

Mai precis, cele trei clase de echivalenta relative la relatia L ; se pot exprima
astfel:
C 1 = [s ] [ [s ] = f(00) 0; (00)g = 0 ;
1 2

C 2 = [s ] [ [s ] [ [s ] = L = f010g;
3 4 5



C 3 = [ s ] = 
6 C 1 C = f0101 g:
2

! Limbajul L = L(A) poate privit ca un predicat peste  ; adica w 2 L ()


L (w) = 1 (altfel, w 2  L).
d) Automatul minimal se construieste acum folosind relatia L :
Amin = ( =L; ; ÆL; [] ; L=L);
L

unde  =L = f[p] =p 2  g; L=L = f[p] =p 2 Lg; ÆL ([p] ; i) = [p i] :


^In cazul nostru, avem trei clase de echivalenta (este vorba de C ; C si C ),
L L L L

1 2 3

automatul minimal ind:


0

? 
 

?
0 0; 1

-
  
- C -
1

 1
C2
1
C3

~ Asadar, solutia Exercitiului 2.3.3 s-a ^ncheiat.


Relatiile L si A;s0 sunt compatibile la dreapta ^n raport cu concatenarea,
adica, de exemplu pentru L ; ^nseamna ca daca p L q atunci p r L q r; 8 r 2  :
Tot ^n demonstrarea unor rezultate teoretice (Teorema Myhill-Nerode, constructia
automatului minimal si altele, [7, 9, 10, 11]) sunt utile si alte relatii care sunt
congruente, adica sunt compatibile at^at la dreapta, c^at si la st^anga ^n raport
cu concatenarea. Astfel, relatia  este congruenta daca din p  q rezulta
u p v  u q v; 8 u; v 2  : Cele doua congruente sunt:
(p; q) 2 L () L(u p v) = L(u q v); 8 u; v 2  ;
(p; q) 2 A () Æ(s; p) = Æ(s; q); 8 s 2 S;
Relatiile A;s0 si L 53

unde limbajul L = L(A); iar A = (S; ; Æ; s0 ; F ) este un automat nit determinist.


Legatura cu celelalte relatii este urmatoarea:
L  L
[j [j
A  A;s0

^In continuare, vom prezenta un tip de aplicatie foarte important ^n probleme de
tipul \Limbajul L nu este regulat". Ideea este tocmai folosirea relatiilor L si A;s0 :
Exercitiul 2.3.4 Limbajul L = fanbn =n  0g nu este regulat.
Solutie Am vazut ^n Exercitiul 1.2.1 ca exista o gramatica de tip 2 care genereaza
limbajul L: Dar oare nu exista o gramatica de tip 3 care genereaza L ? Raspunsul la
aceasta ^ntrebare este negativ.
^In acest sens, presupunem prin reducere la absurd ca limbajul L este regu-
lat. Conform Teoremei Myhill-Nerode, rezulta ca L este o reuniune nita de clase
de echivalenta a relatiei L : Fie sirul in nit de cuvinte a; a ; :::; ai ; :::; aj ; :::   :
2

Deoarece L are rang nit, rezulta ca 9 i; j; i 6= j astfel ^nc^at ai L aj ; adica


L (ai r) = L (aj r); 8 r 2  : Alegem r = bi si obtinem 1 = L(ai bi ) = L (aj bi ) = 0;
contradictie.
Asadar, limbajul L nu este regulat.
2
Exercitiul 2.3.5 Limbajul L = fan =n  0g nu este regulat.
Solutie Presupunem, prin reducere la absurd, ca exista un automat nit deter-
minist A = (S; fag; Æ; s ; F ) astfel ^nc^at L = L(A): Consideram secventa de stari
0

Æ(s ; a ); Æ(s ; a ); :::; Æ(s ; an ); unde n = jS j: Deoarece ^n aceasta secventa, avem
0 1

n + 1 stari, exista j si l astfel ca 0  j < l  n si Æ(s ; aj ) = Æ(s ; al ):


0 0 0

0 0

Consideram acum 2
un numar2 natural k astfel ca 2k +2 1 > n: 2
Avem Æ(s ; ak ) = Æ(s ; ak j j ) = Æ(Æ(s ; aj ); ak j ) = Æ(Æ(s ; al ); ak j ) =
+

2 0 0
2 0
2 0

Æ(s ; ak j l ) si deoarece Æ(s ; ak ) 2 F; rezulta Æ(s ; ak j l ) 2 F: Dar acest lu-


+ +
0
2 0 0

cru este echivalent cu ak j l 2 L:


+

^In continuare, vom arata ca acest lucru este fals. Mai precis, vom arata ca
k < k + l j < (k + 1) :
2 2 2

Astfel, din l  n si j  0, rezulta ca l j  n. Dar n < 2k + 1; deci l j < 2k + 1;


de unde adun^and k rezulta ca k + l j < (k + 1) : Inegalitatea k < k + l j este
2 2 2 2 2

banala deoarece j < l.


Deci am ajuns la o contradictie, asadar limbajul L nu este regulat.
Constructia automatului minimal 54

2.4 Constructia automatului minimal


Relativ la acceptarea unui limbaj regulat trebuie sa gasim un automat c^at mai simplu
care sa-l accepte, adica sa nu aiba stari ^n care nu ajungem niciodata sau sa aiba prea
multe stari. ^In acest sens, exista notiunea de automat minimal. Formal, acest lucru
se exprima prin urmatoarele trei de nitii:
De nitia 2.4.1 Fie A = (S; ; Æ; s ; F ) un automat nit determinist. Starea s se
numeste accesibila daca 9 w 2  astfel ^nc^at Æ (s ; w) = s: O stare se numeste
0

inaccesibila daca nu este accesibila.


De nitia 2.4.2 Automatul nit determinist A este minimal daca nu exista un alt
automat nit determinist A0 cu mai putine stari dec^at A astfel ^nc^at L(A) = L(A0 ):
De nitia 2.4.3 Fie A un automat nit determinist. Spunem ca A este redus daca
nu are stari inaccesibile.
Asadar, e urmatoarele doua probleme:
Problema (P1):
Intrare: A = (S; ; Æ; s ; F ) un automat nit determinist;
Iesire: S 0  S multimea starilor accesibile.
0

Problema (P2):


Intrare: A = (S; ; Æ; s ; F ) un automat nit determinist;
Iesire: A0 = (S 0 ; ; Æ0 ; s0 ; F 0 ) un automat minimal echivalent cu A:
0


0

! Din De nitiile 2.4.1 si 2.4.2 rezulta usor urmatoarele observatii:


 Problema determinarii starilor accesibile este echivalenta cu problema deter-
minarii componentei conexe corespunzatoare starii initiale ^ntr-un graf orien-
tat. De fapt, pentru rezolvarea acestei probleme, nu conteaza daca arcele sunt
etichetate sau nu;
 Relativ la problema a doua, automatul minimal nu este unic. Se spune ca
este unic p^ana la un izomor sm. Formal, automatele A1 si A2 (Ai =
(Si ; ; Æ1 ; s0i ; Fi ); i = 1; 2) sunt izomorfe daca exista o bijectie (permutare,
renumerotare) h : S1 ! S2 astfel ^nc^at:
{ h(Æ (s; i)) = Æ (h(s); i);
1 2 8 s 2 S ; i 2 ;
1

{ s = h(s );
02 01

{ F = h(F ):
2 1

Trecem acum la rezolvarea problemei (P1). Formal, vom construi inductiv niste
multimi de stari accesibile, p^ana nu mai gasim nici o stare noua.

(1) = fs g
j = j [ Æ ( j ; );
0 0

+1
Constructia automatului minimal 55

unde Æ( j ; ) = fÆ(s; i)=s 2 j ; i 2 g:


Din procedeul de constructie al multimilor j rezulta imediat ca:
(i) 0  1  :::  j  j +1  :::  S:
Din (i); deoarece sirul de incluziuni este in nit, si S este multime nita, rezulta ca
exista un indice k pentru care
(ii) k = k : +1

Fara a restr^ange generalitatea, putem presupune ca acest k este minim cu proprietatea
(ii):
Vom demonstra, prin inductie dupa j; ca are loc
(iii) k = k j; + 8 j  1:
Pasul initial: Pentru j = 1 obtinem chiar (ii);
Pasul inductiv: Presupunem adevarata pentru j  n si o demonstram pentru j =
n + 1: Avem k n = k n [ Æ( k n ; ) = k [ Æ( k ; ) = k = k :
+ +1 + + +1

Fiind ^ndeplinite cele doua etape ale inductiei matematice, rezulta a rmatia (iii):
Deci, p^ana acum, am demonstrat ca algoritmul (1) are un numar nit de pasi.
Avem doua conditii de terminare a iteratiilor din algoritmul (1) :
a) k = S ;
b) k = k :
Deci complexitatea timp a relatiei (1) (privita ca un algoritm) este de O(maxfjS j; jS j
+1

jjg) = O(jS j  jj):


^In continuare, vom demonstra corectitudinea acestui procedeu, si anume:
(iv) s accesibila () s 2 k :
(=)) s accesibila, deci 9 p 2  astfel ^nc^at Æ(s ; p) = s: Vom proceda prin
0

inductie dupa jpj:


Pasul initial: jpj = 0; deci p = : Rezulta Æ (s ; ) = s : Dar s 2  k :
Pasul inductiv: Presupunem a rmatia (iv ) adevarata pentru orice p 2  ; 1 
0 0 0 0

jpj  n: Sa demonstram a rmatia (iv) pentru cuvinte de lungime n + 1: Astfel e


q = p i; jpj = n; i 2 : Avem s = Æ(s ; q) = Æ(s ; p i) = Æ(Æ(s ; p); i)  Æ( k ; ) 
0 0 0

k = k ; deci demonstratia directei s-a ^ncheiat.


+1

((=) Vom demonstra ceva mai general:


(v) s 2 i =) s este accesibila ; 8 i  0:
Vom face demonstratia a rmatiei (v) prin inductie dupa i:
Pasul initial: Pentru i = 0 avem s 2 = fs g: Dar s este stare accesibila pentru ca
0 0 0

Æ(s ; ) = s :
0 0

Pasul inductiv: Presupunem a rmatia (v ) adevarata pentru i  n si o demonstram


pentru i = n + 1: Fie s 2 n = n [ Æ( n ; ): Distingem doua cazuri:
+1
Constructia automatului minimal 56

a) s 2 n ; rezulta din pasul inductiv ca s este accesibila;


b) s 2 Æ( n ; ); ^nseamna ca 9  2 n ; i 2  astfel ^nc^at s = Æ(; i): Dar  2 n ;
de unde, conform ipotezei inductive, avem ca  este accesibila, adica 9 p 2  astfel
^nc^at  = Æ(s ; p): Deci s = Æ(; i) = Æ(Æ(s ; p); i) = Æ(s ; p i) = Æ(s ; q):
0 0 0 0

Cu aceasta, demonstratia corectitudinii si nititudinii relatiei (1) (privita ca un


algoritm) a luat sf^arsit.
Procedeul (1) se poate exprima folosind scrierea ^n pseudocod.
Algoritmul (ALG1):
begin
i := 0;
:= fs g;
0

repeat
i := i + 1;
i := i [ Æ ( i ; )
1 1

until ( i = i ) or ( i = S );
1

a seaza('Starile accesibile=', i );
a seaza('Starile inaccesibile=',S i );
end
Pentru implementare, multimile i se pot reprezenta folosind, ca structura de date, o
stiva sau o coada. ^In primul caz, algoritmul urmeaza o strategie \depth rst search"
(dfs), iar ^n al doilea \breadth rst search" (bfs). Pentru amanunte, cititorii pot
consulta [1].
^In continuare, vom vorbi despre solutia celei de-a doua probleme, adica despre au-
tomatul minimal. Am vazut ca problema determinarii automatului minimal folosind
relatia L este cel putin NP hard, deoarece relatia L foloseste ^n de nitia sa
multimea  ; care este in nita. ^In cele ce urmeaza, vom de ni relatia  de nita
peste multimea de stari (care este nita), si care va conduce la un algoritm polino-
mial pentru deducerea automatului minimal.
De nitia 2.4.4 Fie A = (S; ; Æ; s ; F ) un automat nit determinist. Starile
0

s ; s 2 S se numesc inseparabile ^n raport cu F (notatie s  s ) daca


F (Æ(s ; p)) = F (Æ(s ; p)); 8 p 2  :
1 2 1 2

1 2

De nitia 2.4.5 Fie A = (S; ; Æ; s ; F ) un automat nit determinist si e s ; s 2 S


0 1 2
k
arbitrare. Spunem ca s  s daca F (Æ (s ; p)) = F (Æ (s ; p)); 8 p 2  ; jpj  k:


1 2 1 2

1 k
T
! Se observa ca  = :
k=0
Urmatoarele doua rezultate sunt importante ^n demonstrarea corectitudinii si ni-
titudinii algoritmului pe care^l vom prezenta (pentru demonstratia lor, puteti consulta
[7, 9, 10, 11]).
Constructia automatului minimal 57

Lema 2.4.1 Fie A = (S; ; Æ; s0; F ) un automat nit determinist, si e s1 ; s2 2S


arbitrare. Atunci pentru orice k  1 are loc

s 1 k s () s k s
2 1
1
2 si Æ (s1 ; i)
k
 Æ(s ; i); 8 i 2 :
1
2

Teorema 2.4.1 Daca automatul nit determinist A are jS j = n stari, atunci


1

!
2
n
s  s () s  s :


1
2
2

Daca automatul A satisface relatia S= = S; atunci A este minimal.


Formal, automatul minimal este A = (S=; ; Æ ; [s ] ; F=): Astfel, pentru de- 0
k
ducerea sa, calculam clasele de echivalenta pentru  :
Algoritmul (ALG2):
begin
= fF; S F g;
0

i := 0;
repeat
i := i + 1;
i
calculeaza  (folosind Lema 2.4.1)
i i
until (=  ) or (i = n 2);
1

end
Complexitatea timp (una grosiera) a algoritmului precedent este de O(n m); unde 3

n = jS j; m = jj; deoarece bucla \repeat ... until " se executa de cel mult O(n) ori,
k
iar constructia lui  necesita O(n  m): Pentru implementare, puteti consulta Anexa
2

A sau [1]. Varianta implementata acolo este ^mbunatatita, av^and O(n  m) operatii. 2

Exercitiul 2.4.1 Fie automatul


A = (fs ; s ; s ; s ; s ; s ; s ; s g; f0; 1g; Æ; s ; fs ; s ; s ; s g)

 - 
0 1 2 3 4 5 6 7 0 3 4 5 7

cu Æ dat prin graful de tranzitie:


R
   1

6 ~ 
s s 0
> q

0 2

0 s
3

  
0

 
1 0 1
s


 -
0 1

K N U 1

 
1


 s

U
7 

1
0
s
6
s5
0
s 4

0; 1 1
Constructia automatului minimal 58

a) sa se deduca starile accesibile (si cele inaccesibile);


b) sa se calculeze clasele de echivalenta ale relatiei ;
c) sa se construiasca automatul minimal echivalent cu A;
d) care este L(A) ?
Solutie a) Conform cu Algoritmul (ALG1) deducem:
= fs g;
0 0

= fs ; s ; s g;
1 0 1 2

= fs ; s ; s ; s ; s ; s g;
= fs ; s ; s ; s ; s ; s ; s g;
2 0 1 2 6 3 5

3 0 1 2 6 3 5 4

= ;
Asadar, spunem ca S 0 = fs ; s ; s ; s ; s ; s ; s g este multimea starilor accesibile.
4 3

Deci S S 0 = fs g este multimea starilor inaccesibile. Astfel, eliminam starea s :


0 1 2 3 4 5 6

Se obtine automatul A0 = (fs ; :::; s g; ; Æ0 ; s ; fs ; s ; s g) si Æ0 (s; i) = Æ(s; i); 8 s 2


7 7

S fs g; i 2 : Pentru simplitate, vom nota Æ0 tot cu Æ:


0 6 0 3 4 5

b) Calculam ; ; :::; apoi facem intersectia lor pentru a a a relatia : Pentru


0 1

relatia , clasele sale de echivalenta sunt date de multimile F; S F; deoarece s 


0 0
1

s () F (Æ(s ; )) = F (Æ(s ; )) () F (s ) = F (s ); adica s ; s 2 F sau


2 1 2 1 2 1 2

s ; s 2 S F: Astfel, clasele de echivalenta pentru relatia  sunt:


0
1 2

fs ; s ; s g; fs ; s ; s ; s g
3 4 5 0 1 2 6

Pentru calculul claselor de echivalenta ale relatiei ; trebuie sa partitionam


1

multimile calculate la relatia  : Pentru aceasta, vom folosi Lema 2.4.1. Luam prima
0

clasa de echivalenta a relatiei  : Sa vedem daca fs ; s ; s g 2 : Trebuie sa luam


0 1
3 4 5

orice doua perechi de stari fs ; s g; fs ; s g; fs ; s g si sa veri cam daca ram^an ^n
3 4 3 5 4 5

 : Distingem C = 3 cazuri:
1
2
3

 Cazul I.1: e perechea fs3 ; s4 g; avem fs3 ; s4 g 2 si Æ (s3 ; 0) = s5 si Æ (s4 ; 0) = s5 ;
0

respectiv Æ(s ; 1) = s si Æ(s ; 1) = s : Dar s  s si s  s , deoarece relatiile


0 0
3 4 4 4 5 5 4 4

k ; 8 k 2 N sunt re exive. Folosind Lema 2.4.1, rezulta ca fs ; s g 2; 3 4


1

 Cazul I.2: pentru perechea fs3 ; s5 g; avem fs3 ; s5 g si Æ(s ; 0) = s si 2
0
3 5

Æ(s ; 0) = s ; respectiv Æ(s ; 1) = s si Æ(s ; 1) = s : Dar s  s si s  s ,


0 0
5 5 3 4 5 5 5 5 4 5

deci fs ; s g 2;
1
3 5

 Cazul I.3: pentru perechea fs4 ; s5 g se poate proceda la fel sau, mai elegant,
k
folosim proprietatile de simetrie si tranzitivitate a relatiilor ; 8 k 2 N: Astfel
din s  s ; folosind simetria, rezulta s  s ; si apoi, folosind s  s ; rezulta,
1 1 1
3 4 4 3 3 5

din tranzitivitate, ca s  s :


1
4 5
Constructia automatului minimal 59

Concluzia este deci ca fs ; s ; s g 2 :


1
3 4 5

Trecem acum la cea de-a doua clasa de echivalenta fs ; s ; s ; s g: De data aceasta 0 1 2 6

distingem C = 6 cazuri.
2
4

 Cazul II.1: pentru perechea fs0 ; s1 g; avem fs0 ; s1 g si Æ(s ; 0) = s si 2
0
0 1

Æ(s ; 0) = s ; respectiv Æ(s ; 1) = s si Æ(s ; 1) = s : Dar s  s si s  s ,


0 0
1 2 0 2 1 6 1 2 2 6

deci fs ; s g 2;
1
0 1

 Cazul II.2: pentru perechea fs0 ; s2 g; avem fs0 ; s2 g


2 si Æ(s ; 0) 0
0 = s si 1

Æ(s ; 0) = s : Nu mai continuam deoarece s 


6 s : Deci fs ; s g 62;
0 1
2 3 1 3 0 2

 Cazul II.3: pentru perechea fs0 ; s6 g; avem fs0 ; s6 g si Æ(s ; 0) = s si 2
0
0 1

Æ(s ; 0) = s ; respectiv Æ(s ; 1) = s si Æ(s ; 1) = s : Dar s  s si s  s ,


0 0
6 1 0 2 6 2 1 1 2 1

deci fs ; s g 2;
1
0 6

 Cazul II.4: pentru perechea fs1 ; s2 g: Putem proceda ca p^ana acum, sau folosim
simetria si tranzitivitatea relatiei  : Astfel, presupunem prin reducere la ab-
0

surd, ca fs ; s g 2 : Utiliz^and cazul II.1, rezulta ca fs ; s g 2; ceea ce este
1 1
1 2 0 2

o contradictie cu cazul II.2. Asadar, fs ; s g 62;


1
1 2

 Cazul II.5: pentru perechea fs1 ; s6 g: Din cazurile II.1 si II.3, rezulta fs1 ; s6 g 2;
1

 Cazul II.6: pentru perechea fs2 ; s6 g: Din cazurile II.4 si II.5, rezulta fs2 ; s6 g 62;
1

Deci clasa fs ; s ; s ; s g se partitioneaza ^n doua subclase: fs ; s ; s g si fs g.


0 1 2 6 0 1 6 2

^In concluzie, din cazurile I si II, obtinem clasele de echivalenta pentru relatia : 1

fs ; s ; s g; fs g; fs ; s ; s g:
~
0 1 6 2 3 4 5

Este vorba de o optimizare a procedeului de mai sus. Pentru cazul I, respectiv II, sunt
su ciente doar 2; respectiv 3 subcazuri, fata de cele dezbatute 3; respectiv 6: ^In general,
k
daca o clasa de echivalenta a relatiei  are n elemente, atunci sunt su ciente n 1
n n
subcazuri, ^n loc de Cn2 = 2 : Acest lucru rezulta imediat din proprietatile relatiei
( 1)

k (re exivitate, simetrie, tranzitivitate).Data multimea S = fs1 ; s2 ; :::; sn g de stari


arbitrare, se pot alege drept subcazuri perechile de stari fsi ; si+1 g; 8 i = 1; n 1:
Continuam acum cu calculul relatiei  : Conform cu clasele de echivalenta obtinute
2

pentru relatia ; deducem ca trebuie sa partitionam clasele fs ; s ; s g si fs ; s ; s g:


1
0 1 6 3 4 5

Clasa fs g apartine relatiei ; deoarece nu se mai poate partitiona si nici nu se poate
2
2

reuni cu alta clasa, datorita Lemei 2.4.1.



Constructia automatului minimal 60


! Rezulta o alta ^mbunatatire a Algoritmului (ALG2) si anume ca se partitioneaza
k
doar acele multimi S 0 2; pentru care jS 0 j  2:
 Cazul I: Ne referim acum la clasa fs3 ; s4 ; s5 g: Analog cu cazul I pentru relatia
; obtinem fs ; s ; s g 2 :
1
3 4 5
2

 Cazul II: ^In ceea ce priveste clasa fs0 ; s1 ; s6 g; ^n mod asemanator cu cazul II de
la relatia ; deducem urmatoarele clase pentru :
1 2

fs ; s g; fs g:
0 6 1

^In mod analog, se calculeaza  si se observa ca = : Conform Teoremei 2.4.1 si
3 2 3

Lemei 2.4.1, rezulta ca relatia  are urmatoarele clase de echivalenta:


fs ; s g; fs g; fs g; fs ; s ; s g:
0 6 1 2 3 4 5

c) Conform De nitiei 2.4.3 si punctelor a) si b) de mai sus, rezulta ca automatul

 
minimal echivalent cu A este A0 = (f[s ]; [s ]; [s ]; [s ]g; f0; 1g; Æ0; [s ]; [s ]); unde Æ0
0 1 2 3 0 3

este dat prin urmatorul graf de tranzitie:


R 
 
1
[s ] 0- [s ] 1

0
1 0


 s
?



 ]3
0; 1  [s ]2

0; 1
Legatura dintre starile lui A0 si cele ale lui A este imediata:
[s ] = fs ; s g; [s ] = fs g; [s ] = fs g; [s ] = fs ; s ; s g:
0 0 6 1 1 2 2 3 3 4 5

d) Este mai simplu de dedus si demonstrat care este limbajul acceptat de A
folosind automatul minimal echivalent cu A; deoarece are mai putine stari. Asadar


L(A) = L(A0 ) = fp=p 2 [s ] 0 0 g = f(01)1f1; 0g ; (01) 00f1; 0g g = f(01)(1 + + +
3

00)f1; 0g g:
A ;s


+

! Exercitiul 2.4.1 re ecta un exemplu de automat minimal care are doar jumatate
din numarul de stari ale automatului initial.
Legatura dintre automate nite deterministe si cele nite nedeterministe 61

2.5 Legatura dintre automate nite deterministe si


cele nite nedeterministe
De nitia 2.5.1 Se numeste automat nit nedeterminist (notatie AFN) un 5-
uplu A = (S; ; Æ; s ; F ) unde:
0

 S este o multime nevida, nita, numita multimea starilor;


  este o multime nevida, nita, numita alfabetul de intrare;
 Æ este functia de tranzitie Æ : S   ! P (S ); 6

 s 2 S este starea initiala;


0

 F  S este multimea starilor nale.


De nitia 2.5.2 Dat A = (S; ; Æ; s ; F ) un automat nit nedeterminist, numim
0

functia de tranzitie extinsa Æb : S   ! P (S ); functia de nita astfel:


1. Æb(s; ) = fsg; 8 s 2 S ;
2. Æb(s; w a) = [fÆ (s0 ; a)= s0 2 Æb(s; w)g; 8 w 2  ; a 2 :



!
Pentru simplitatea notatiei, Æb se noteaza tot cu Æ:
Daca automatul A este nedeterminist, atunci starea s este accesibila daca
9 w 2  astfel ^nc^at s 2 Æ(s ; w) (adica, cu alte cuvinte, s este accesibila daca exista
0

cel putin un drum ^n A din s0 catre s). De nitia pentru inaccesibilitate este aceeasi
cu cea pentru automate nite deterministe.
De nitia 2.5.3 Daca A este un AF N; numim limbajul acceptat de A, multimea
L(A) = fw=w 2  ; Æ(s ; w) \ F 6= ;g:
0

Cu toate ca, spre deosebire de automatele deterministe, dintr-o stare arbitrara


putem trece ^n una din mai multe stari (adica avem posibilitatea alegerii unui drum),
totusi puterea de acceptare a acestor automate nu se schimba fata de cele deterministe
(amanunte ^n [9, 10, 11]). ^In cele ce urmeaza, vom da un algoritm care va construi
un automat determinist echivalent cu unul nedeterminist, conform rezultatelor din
[9, 10, 11]. Apoi vom arata ca algoritmul este exponential, de exemplu ca exista un
automat nedeterminist care are n stari, iar cel determinist echivalent sa aiba 2n 1
stari.
Algoritmul (ALG3):
Intrare: A = (S; ; Æ; s ; F ) un automat nit nedeterminst;
Iesire: A0 = (S 0 ; ; Æ0 ; s0 ; F 0 ) un automat nit determinist echivalent cu A;
0

Metoda: Ca structura de date, vom utiliza o coada queue, necesara pentru memo-
rarea starilor automatului A0 . Deci, queue va un tablou cu m; (m  2n); compo-
nente cu valori submultimi ale multimii f1; 2; :::; ng: De exemplu, ^n limbajul Pascal,
se poate folosi urmatoarea structura de date:
6 P (S ) = fS 0 = S 0  S g se mai noteaza 2S si reprezinta multimea partilor multimii S .
Legatura dintre automate nite deterministe si cele nite nedeterministe 62

 const
{ n = 8;
{ m = 256;
 type
{ state = set of [1::n];
 var
{ queue : array [1::m] of state;
Metoda, scrisa ^n pseudocod, este:
begin
s0 := fs g;
queue[1] := fs g;
0 0

head := 1;
last := 1;
F 0 := ;;
while head  last do begin
elem := queue[head];
head := head + 1;
for (each i 2 ) do begin
S 0 := ;;
for (each s 2 elem) do
S 0 := S 0 [ Æ(s; i);
if (S 0 6= ;) and (S 0 2= queue) then begin
last := last + 1;
queue[last] := S 0 ;
if S 0 \ F 6= ; then F 0 := F 0 [ fS 0 g;
end;
Æ0 (elem; i) := S 0 ;
end
end
end:
Teorema 2.5.1 Automatul A0 din Algoritmul (ALG3) este determinist si echivalent
cu A: In^ plus, Algoritmul (ALG3) are un numar nit de pasi.

Demonstratie Faptul ca automatul A0 este determinist rezulta din faptul ca
^n coada queue se introduc tot timpul elemente noi, asa cum arata testul if (S 0 = 6
;) and (S 0 2= queue) then begin . Asadar valoarea variabilei elem va , la ecare
iteratie, distincta de celelalte valori anterioare ale variabilei elem. Faptul ca A si A0
sunt echivalente, rezulta din de nitiile lui S 0 ; Æ0 si F 0 din Algoritmul (ALG3) care
sunt conforme cu demonstratia constructiva din [9, 10, 11]. De fapt, acest algoritm
Legatura dintre automate nite deterministe si cele nite nedeterministe 63

construieste automatul A0 folosind o parcurgere bfs (breadth rst search). Algoritmul


(ALG3) are un numar nit de pasi deoarece cele doua \for-uri" se executa de un
numar nit de ori, iar while head  last do begin se executa de cel mult 2n ori,
unde n = jS j: Acest lucru rezulta usor din faptul ca ^n coada se vor introduce, cel
mult o data, multimile S 0 care sunt submultimi ale lui S .
Asadar, Teorema 2.5.1 este complet demonstrata.
^In continuare, vom prezenta un exercitiu care va arata ca Algoritmul (ALG3) este
exponential. Mai precis, vom da un automat nedeterminist care, servind ca intrare
pentru Algoritmul (ALG3) va genera la iesire un automat determinist care are numar
exponential de stari ^n raport cu numarul de stari al automatului initial.
Exercitiul 2.5.1 Fie automatul A = (S; fa; bg; Æ; s ; F ); unde S = fs ; s ; :::; sn g; F
1 1 2 
S o submultime arbitrara, si functia de tranzitie data prin:
1. Æ (si ; a) = fs1 ; si+1 g; 8 i = 1; n 1;
2. Æ (si ; b) = fsi+1 g; 8 i = 1; n 1;
3. Æ (sn ; a) = S1  S; o submultime arbitrara;
4. Æ (sn ; b) = S2  S; o submultime arbitrara;
Folosind Algoritmul (ALG3) sa se construiasca automatul determinist A0 echivalent
cu A.
Solutie Starea s este stare initiala pentru automatul A si deci multimea
este stare initiala pentru automatul nedeterminist A0 . Deoarece Algoritmul
1

fs g
1

(ALG3) foloseste o strategie bfs, vom da ^n continuare de nitia pentru nivel. Vom
spune ca starea S este pe nivelul k daca exista w 2 fa; bg; jwj = k astfel
^nc^at S = Æ0 (fs g; w): Vom demonstra, ^n cele ce urmeaza, ca A0 = (P (S )
1

f;g; fa; bg; Æ0; fs g; F 0), unde Æ0 si F 0 pot ram^ane neprecizate (Æ0 (fsi1 ; :::; si g; a) =
1 1

fs ; si1 ; :::; si g si Æ0 (fsi1 ; :::; si g; b) = fsi1 ; :::; si g pentru k = 1; n 1, iar


1 k

1 +1 k +1 +1 k +1

F 0 = fS 0 = S 0  fs ; s ; :::; sn g; F \ S 0 6= ;g). ^In continuare, vom demonstra prin


k

1 2

inductie dupa k; k = 1; n ca:


(1) \La nivelul m se genereaza toate submultimile ce contin starea sm ."
Pasul initial: Pentru m = 1 a rmatia (1) este imediata.
Pasul inductiv: Presupunem a rmatia (1) adevarata pentru m = k , sa o demonstram
pentru m = k + 1: Conform ipotezei inductive, toate submultimile de pe nivelul k
contin starea sk : Atunci conform de nirii lui Æ din automatul A; deoarece sk 2 +1

Æ(sk ; a) si sk 2 Æ(sk ; b), rezulta ca sk apartine oricarei submultimi de stari de pe
+1 +1

nivelul k + 1:
Sa demonstram acum ca pe nivelul k + 1 se a a toate submultimile ce contin
sk : Fie S o submultime a lui S ce contine sk : Distingem doua cazuri:
+1 2 +1

 s 2 S : Atunci S are forma:


1 2 2

S = fs ; si2 ; si3 ; :::; si ; sk


2 1 j +1 g;
Legatura dintre automate nite deterministe si cele nite nedeterministe 64

unde 2  j  k:
Fie S = fsi2 ; si3 ; :::; si ; sk g: Evident S se a a pe nivelul k conform
ipotezei inductive. Dupa Algoritmul (ALG3), rezulta Æ0 (S ; a) = S : Deci, S
1 1 1 j 1 1

1 2 2

se a a pe nivelul k + 1:
 s 2= S : Deci
1 1

S = fsi2 ; si3 ; :::; si ; sk


2 j +1 g; 2  j  k; si 6= s ; 8 l = 2; j:
l 1

Fie S = fsi2 ; si3 ; :::; si ; sk g: La fel, S se a a pe nivelul k: Avem


Æ0 (S ; b) = S : Deci, S se a a pe nivelul k + 1:
1 1 1 j 1 1

1 2 2

Deci, pe nivelul 1 avem Cn stari, pe nivelul 2 avem Cn stari, ..., pe nivelul n avem
0 1

Cnn stari. ^In total se obtin Cn + Cn + ::: + Cnn = 2n 1 stari, deci un numar
1 0 1 1

exponential.
Cu aceasta, solutia Exercitiului 2.5.1 s-a ^ncheiat.
Exercitiul 2.5.2 Fie automatul nedeterminist A = (fq1 ; q2 ; q3 g; fa; bg; Æ; q1; fq2 ; q3 g)
cu Æ dat prin graful de tranzitie:

#
Z~
a

-
# a; b

"! 
SoS
q 1

7 "!

6

a
q 2

S 

a

S#/
SS  b a; b

"! q 3

a
Folosind Algoritmul (ALG3), sa se determine automatul determinist echivalent cu
A:
Solutie Vom simula executia Algoritmului (ALG3) printr-o coada. La inceput, ^n
coada este starea fq g. Starea curenta este ^ncadrata de linii duble.
1

fq g1

Facem tranzitie cu caracterele a si b si obtinem starea cozii:


fq g fq ; q g fq g 1 1 2 2

Avem Æ(fq g; a) = fq ; q g si Æ(fq g; b) = fq g. Apoi


1 1 2 1 2
Legatura dintre limbaje regulate si automate nite 65

fq g fq ; q g fq g fq ; q ; q g fq ; q g
1 1 2 2 1 2 3 2 3

Avem Æ(fq ; q g; a) = fq ; q ; q g si Æ(fq ; q g; b) = fq ; q g.


1 2 1 2 3 1 2 2 3

fq g fq ; q g fq g fq ; q ; q g fq ; q g fq ; q g fq g
1 1 2 2 1 2 3 2 3 1 3 3

Avem Æ(fq g; a) = fq ; q g si Æ(fq g; b) = fq g.


2 1 3 2 3

fq g fq ; q g fq g fq ; q ; q g fq ; q g fq ; q g fq g
1 1 2 2 1 2 3 2 3 1 3 3

Avem Æ(fq ; q ; q g; a) = fq ; q ; q g si Æ(fq ; q ; q g; b) = fq ; q ; q g. Reamintim ca


1 2 3 1 2 3 1 2 3 1 2 3

elementele se introduc ^n coada cel mult o data.


fq g fq ; q g fq g fq ; q ; q g fq ; q
1 1 2 2 g fq ; q g fq g
1 2 3 2 3 1 3 3

Avem Æ(fq ; q g; a) = fq ; q g si Æ(fq ; q g; b) = fq ; q g.


2 3 1 3 2 3 1 3

fq g fq ; q g fq g fq ; q ; q g fq ; q g fq ; q g fq g
1 1 2 2 1 2 3 2 3 1 3 3

Avem Æ(fq ; q g; a) = fq ; q ; q g si Æ(fq ; q g; b) = fq ; q g.


1 3 1 2 3 1 3 1 2

fq g fq ; q g fq g fq ; q ; q g fq ; q g fq ; q g fq g stop
1 1 2 2 1 2 3 2 3 1 3 3

Avem Æ(fq g; a) = fq ; q g si Æ(fq g; b) = fq g.


3 2 3 3 1

Redenumind, eventual, aceste stari (de exemplu s = fq g; s = fq ; q g s.a.m.d.), 1 1 2 1 2

obtinem automatul nit determinist echivalent


A = (fs ; s ; s ; s ; s ; s ; s g; fa; bg; Æ; s ; fs ; s ; s ; s ; s ; s g);
1 2 3 4 5 6 7 1 2 3 4 5 6 7

cu Æ data prin matricea:


Æ a b
s 1 s 2 s 3

s 2 s 4 s 5

s 3 s 6 s 7

s 4 s 4 s 4

s 5 s 6 s 6

s 6 s 4 s 2

s 7 s 5 s 1

2.6 Legatura dintre limbaje regulate si automate -


nite
^In aceasta sectiune, ne vom ocupa de echivalenta dintre limbajele regulate (date prin
gramatici de tip 3) si automatele nite. Mai precis, plec^and de la un automat nit
(nu neaparat determinist), vom deduce gramatica de tip 3 echivalenta; reciproc, data
o gramatica de tip 3, pe care o vom transforma ^n forma normala, vom construi
automatul nit nedeterminist echivalent.
Legatura dintre limbaje regulate si automate nite 66

Exercitiul 2.6.1 Fie automatul A = (fs ; s ; s g; f0; 1g; Æ; s ; fs g) cu Æ reprezentat


1 2 3 1 3

prin graful de tranzitie:

q
W
0

U 

U
0 0; 1

  
-
s1
-
 1 s2
1 s 3

Sa se determine o gramatica de tip 3 echivalenta cu automatul A.


Solutie Folosind teorema de reducere (transformare) a unui automat la o gramatica
(amanunte ^n [9, 10, 11]), rezulta ca automatului A = (S; ; Æ; s ; F ), ^i corespunde
0 0
 a G = (S; ; s ; P ) unde P = fs ! a s = s 2 Æ (s; a)g [ fs !
0

gramatica echivalent 0

a= Æ(s; a) 2 F g [ s;; ! ; saltfel


0 2 F : Astfel, pentru automatul din acest exercitiu,
0

obtinem gramatica echivalenta G = (fs ; s ; s g; f0; 1g; s ; P ) cu regulile P :


1 2 3 1

1. s ! 0 s 2. s ! 1 s 3. s ! 0 s 4. s ! 1 s
5. s ! 1 6. s ! 0 s 7. s ! 1 s 8. s ! 0
1 1 1 2 2 2 2 3

2 3 3 3 3 3

9. s ! 1
3

Ca o observatie, putem preciza ca L(A) = L(G) = f0n 1 0m 1 f0; 1gk= n; m; k 


0g: De altfel, o alta cale de a deduce gramatica echivalenta este prin ^ncercari (se
pleaca de la forma analitica a limbajului).
O alta metoda de a obtine gramatica echivalenta, tot pornind de la automatul A,
este urmatoarea. Dat automatul A = (S; ; Æ; s ; F ), consideram gramatica echiva-
lenta G0 = (S; ; s ; P ) unde P = fs ! a s0 = s0 2 Æ(s; a)g [ fs ! = s 2 F g:
0

Astfel, pentru automatul din acest exercitiu, obtinem gramatica echivalenta G0 =


0

(fs ; s ; s g; f0; 1g; s ; P ) cu regulile P :


1 2 3 1


1. s ! 0 s 2. s ! 1 s 3. s ! 0 s 4. s ! 1 s
1 1 1 2 2 2 2 3

5. s ! 0 s 6. s ! 1 s 7. s ! 



3 3 3 3 3

! Demonstrati echivalenta dintre cele doua metode.


! Constructiile din exercitiul precedent ram^an valabile si daca se pleaca de la
un automat nit nedeterminist. De altfel, putem considera la intrare si un sis-
tem tranzitional,  tranzitiilor le punem ^n corespondenta reguli de redenumire
(s0 2 Æ (s; ) atunci adaugam ^n gramatica G regula s ! s0 )

~ Care este deosebirea dintre cele doua metode ? Gramaticile G si G0 sunt echiva-
lente, ^nsa G nu are -reguli, cu exceptia, eventual, a regulii s0 ! ; pe c^and G0 are
-reguli. Pentru aceasta metoda de deducere a gramaticilor echivalente prin elimina-
rea -regulilor, puteti consulta [1, 10].
De nitia 2.6.1 Fie G = (VN ; VT ; x ; P ) o gramatica arbitrara. Se numeste
0

 regula (sau  productie) orice regula de tipul x ! ; unde x 2 VN :


Legatura dintre limbaje regulate si automate nite 67

De nitia 2.6.2 Fie G = (VN ; VT ; x ; P ) o gramatica arbitrara. Se numeste regula


0

de redenumire orice regula de tipul x ! y; unde x; y 2 VN :


De nitia 2.6.3 Fie G = (VN ; VT ; x ; P ) o gramatica de tip 3: Spunem ca G este ^n
0

forma normala standard daca regulile sale sunt de forma:


 x ! a x0 ; x; x0 2 VN ; a 2 VT ;
 x ! a; x 2 VN ; a 2 VT ;
 x ! , caz ^n care x nu mai apare ^n partea dreapta a vreunei reguli.
0 0

Exercitiul 2.6.2 Fie gramatica (de tip 3) G = (fx ; x g; fa; bg; x ; P ) unde regulile
1 2 1

P sunt:
1. x 1 !x 2

2. x 1 ! abx 2

3. x 2 ! ax 2

4. x ! ba
2

5. x !
2

Sa se determine automatul nit (determinist sau nu) echivalent cu gramatica G:


Solutie Sunt mai multe etape:
a) eliminarea  regulilor;
b) eliminarea redenumirilor;
c) aducerea la forma normala;
d) constructia automatului nit echivalent cu G:
Vom parcurge pe r^and aceste etape.
a) Determinam simbolurile ce se pot sterge. Fie G = (VN ; VT ; x ; P ) o gramatica
0

arbitrara de tip 3 (constructia este valabila si pentru gramatici de tip 2). Consideram
multimile: 
N = fx=x 2 VN ; x !  2 P g
1

Ni = Ni [ fx=x ! 2 P; 2 Ni g; i  1:
+1
+

Deoarece N  N  N  :::  Ni  Ni  :::  VN , rezulta ca exista k 2 N


0 1 2 +1

(k  jVN j) astfel ^nc^at Nk = Nk . Se poate demonstra usor ca Nk = Nk j ; 8 j 2 N;


+1 +

si ca Nk reprezinta multimea simbolurilor neterminale care ajung prin derivari ^n 
(se mai spune ca \se pot sterge").
^In cazul exercitiului nostru, obtinem N = fx g si N = fx ; x g = VN , deci ne
0 1 1 1 2

oprim deoarece N = VN . 1

Pentru a deduce gramatica echivalenta, dar care nu are  reguli, vom considera
doua cazuri:
Legatura dintre limbaje regulate si automate nite 68

 Cazul I:  2
= L(G):
{ regulile de tip x !  se sterg;
{ ecarei reguli care are ^n partea dreapta simboluri din Nk , ^i punem ^n
corespondenta o multime de reguli obtinute prin stergerea a 0; 1; ::: sim-
boluri din Nk (astfel^nc^at sa nu se obtina ). Formal, consideram multimea
de reguli:
P = fx ! r =x ! r 2 P; r; r =
1 1 6 ; r se obtine din r prin stergerea a 0;
1 1

1; ::: simboluri din Nk g


 Cazul II:  2 L(G)
{ Subcazul II.1: daca x nu apare ^n partea dreapta a vreunei reguli, atunci
0

la regulile din cazul I se adauga regula x ! ; 0

{ Subcazul II.2: ^n caz contrar, se va considera un nou neterminal (care va


simbol de start) x0 si la regulile din cazul I se adauga regulile x0 !
; x0 ! x :
0 0

0 0

Astfel, pentru exercitiul nostru (suntem ^n subcazul II.1.), obtinem gramatica
echivalenta (fara  reguli) G = (fx ; x g; fa; bg; x ; P ) cu regulile P :
1 1 2 1 1 1

1. x 1 !x 2

2. x 1 !
3. x 1 ! abx 2

4. x 1 ! ab
5. x 2 ! ax 2

6. x 2 !a
7. x 2 ! ba
b) ^In aceasta etapa vom elimina redenumirile. Consideram gramatica G = 2

(VN ; VT ; x ; P ) unde regulile P = P [ P se construiesc astfel:


1 2 2 21 22

P 21 = fx ! r=x ! r 2 P ; r 2= VN g; 1

P 22 = fx ! w=x =) y; y ! w 2 P ; w 2= VN ; x; y 2 VN g.
+

G1 1

Singura redenumire ^n G este x ! x , adica x =) x este singura derivare ^n +


1
G11 2 1 2

care se pleaca cu un neterminal si se ajunge tot la un neterminal (deoarece nu avem


 reguli, cu exceptia regulii x ! ). Astfel, obtinem gramatica G echivalenta (fara
1 2

redenumiri) cu regulile:
Legatura dintre limbaje regulate si automate nite 69

1. x 1 !
2. x 1 ! abx 2

3. x 1 ! ab
4. x 1 ! ax 2

5. x 1 !a
6. x 1 ! ba
7. x 2 ! ax 2

8. x 2 !a
9. x 2 ! ba
c) Pentru aducerea gramaticii G la forma normala, vom pune ^n corespondenta
regulilor de tipul x ! p p ::: pn x0 ; i > 1; pi 2 VT ; 8 i = 1; n urmatoarele reguli (^n
2

1 2

forma normala):
1: x ! p x 1 1

2: x 1 !p x 2 2

...
n: xn ! pn x0

1

unde x ; x ; :::; xn sunt neterminali noi.


1 2 1

! O ^mbunatatire a numarului de reguli si neterminali ar urmatoarea. Daca


gramatica G mai contine regula y ! p1 p2 ::: pn x0 ; n > 1; pi 2 VT ; 8 i = 1; n,
bine^nteles x 6= y; atunci acestei reguli ^i punem ^n corespondenta regula y ! p1 x1 :
Utiliz^and acest procedeu, obtinem gramatica G echivalenta si ^n forma normala:
3

1. x 1 !
2. x 1 ! ax 3

3. x 3 ! bx 2

4. x 1 ! ax 4

5. x 4 !b
6. x 1 ! ax 2

7. x 1 !a
8. x 1 ! bx 5
Legatura dintre limbaje regulate si automate nite 70

9. x 5 !a
10. x 2 ! ax 2

11. x 2 !a
12. x 3 ! bx 6

13. x 6 !a
Se poate face o reducere a numarului de reguli si neterminali. Este vorba ca ^n
loc de x sa punem x deoarece singura regula cu x ^n partea st^anga este x ! a:
Astfel dispare regula 13, iar regula 12 devine x ! b x .
6 5 5 5

3 5

d) Astfel, am construit o gramatica echivalenta (G ) care este ^n forma normala. 3

Acum construim un automat nit (ne)determinist A astfel ^nc^at L(A) = L(G ): 3

A = (VN [ fx; yg; VT ; Æ; x ; F ); 0


unde F = fx; x g
daca x !  2 P
0 0

fxgaltfel.
Notam cu VN = fx ; x ; :::; xn g;  = VT = fi ; i ; :::; im g; Sjk = fxh =xj
1 2 1 2 !
ik xh 2 P g: Pentru de nirea functiei de tranzitie, vom construi tabelul:
Æ: xj ! ik 2= P xj ! ik 2 P
Sjk = ; Sjk 6= ; Sjk = ; Sjk 6= ;
Æ(xj ; ik ) fyg Sjk fxg fxg [ Sjk
Æ(x; ik ) fyg
Æ(y; ik ) fyg

Pentru gramatica G , utiliz^and aceasta constructie, obtinem automatul


3

A = (fx ; x ; x ; x ; x ; x ; x; yg; fa; bg; Æ; fx g; fx; x g)


1 2 3 4 5 6 1 1

cu Æ dat prin tabelul:


Æ a b
x 1 fx ; x ; x ; xg fx g
2 3 4 5

x 2 fx ; xg 2 fyg
x fy g fx ; x g
fy g fxg
3 2 6

x 4

x 5 fxg fyg
x fxg fyg
fy g fyg
6

x
y fy g fyg
Eventual, se gaseste automatul minimal echivalent cu acesta.
Lema de pompare a lui Bar-Hillel 71

2.7 Lema de pompare Bar-Hillel


Teorema 2.7.1 (Lema de pompare a lui Bar-Hillel)
Daca L este un limbaj de tip 3, atunci exista k 2 N astfel ^nc^at pentru 8 w 2 L
cu jwj  k , avem w = x y z astfel ^nc^at:
a) 0 < jy j  k ;
b) x y i z 2 L; 8 i  0:
Exercitiul 2.7.1 Folosind Lema de pompare Bar-Hillel, sa se arate ca limbajul L =
fan bn =n  0g nu este regulat.
Solutie Presupunem prin reducere la absurd ca L este regulat. Conform Lemei
lui Bar-Hillel, avem ca exista k 2 N astfel ^nc^at pentru orice w; jwj  k sa avem
descompunerea (factorizarea) w = x y z care satisface:
a) 0 < jyj  k;
b) x yi z 2 L; 8 i  0:
Alegem w = an bn cu n su cient de mare (jwj  k () 2n  k). Astfel distingem
trei cazuri:
 Cazul I:
a| a{z::: a} a| a{z::: a} a| a ::: a{zb b ::: }b
x=al y=am z=an l m bn
Faptul ca m > 0 rezulta din conditia (i) a Lemei Bar-Hillel. Lu^and i = 0 ^n
conditia (ii) din Lema Bar-Hillel, obtinem an m bn 2 L, ceea ce reprezinta o
contradictie, deoarece m > 0;
 Cazul II:
a| a{z::: a} a| a ::: a{zb b ::: }b |b b{z::: }b
x=al y=an l bm z=bn m

La fel, conditiile n > l si m  0 se obtin din conditia (i) a Lemei Bar-Hillel.
Distingem iarasi trei cazuri:
{ Subcazul II.1: n = l si m > 0. Luam i = 0 ^n conditia (i) si obtinem ca
an bn m 2 L, ceea ce reprezinta o contradictie, deoarece m > 0;
{ Subcazul II.2: m = 0 si n > l. Luam i = 0 ^n conditia (i) si obtinem ca
al bn 2 L, ceea ce reprezinta o contradictie, deoarece n > l;
{ Subcazul II.3: n > l si m > 0. Luam i = 2 ^n conditia (i) si obtinem ca
al an l bm an l bm bn m 2 L, ceea ce reprezinta o contradictie, deoarece
cuvintele din limbajul L au simbolul a ^naintea simbolului b:
Lema de pompare a lui Bar-Hillel 72

 Cazul III:
a| a ::: a{zb b ::: }b b| b{z::: }b b| b{z::: }b
x=an bm y=bl z=bn l m

Faptul ca l > 0 rezulta din conditia (i) a Lemei Bar-Hillel. Lu^and i = 0 ^n
conditia (ii) din Lema Bar-Hillel, obtinem an bn l 2 L, ceea ce reprezinta o
contradictie, deoarece l > 0.
^In concluzie, rezulta ca L nu este regulat.
Exercitiul 2.7.2 Fie G = (VN ; VT ; x ; P ) o gramatica de tip 3. Atunci:
0

L(G) 6= ; () 9 w 2 L(G) astfel ^nc^at jwj < k;


unde k este numarul rezultat din Lema Bar-Hillel.
Solutie
((=) Daca w 2 L(G) atunci este clar ca L(G) 6= ;:
(=)) Stim ca L(G) 6= ;, deci exista w 2 L(G).
Pasul 1. Daca jwj < k; atunci w are aceasta proprietate;
Pasul 2. Daca jwj  k; aplicam Lema Bar-Hillel, deci exista x; y; z 2 VT astfel
^nc^at w = x y z cu 0 < jyj  k si 2 L(G); 8 i  0: Consideram i = 0, deci
x yi z
x z 2 L(G): Apoi, not^and w = x z , reluam procedeul cu pasii 1 si 2.
Deoarece jyj > 0 rezulta, ca la ecare pas, lungimea lui w scade cu cel putin o
unitate. Astfel, dupa un numar nit de pasi (cel mult jwj k + 1 pasi), obtinem ca
exista w 2 L(G) astfel ^nc^at jwj < k:
Acest procedeu se poate descrie (mai clar) folosind urmatoarea procedura:
Intrare: L limbaj regulat, k 2 N, w 2 L(G);
Iesire: w0 2 L(G) astfel ^nc^at jw0 j < k;
Metoda:
begin
while jwj  k do begin
e x; y; z 2 VT (Lema Bar-Hillel) astfel ^nc^at w = x y z; 0 < jyj  k;
w := x z ;
endwhile;
w0 := w;
end .
Exercitiul 2.7.3 Fie G = (VN ; VT ; x ; P ) o gramatica de tip 3. Atunci:
0

L(G) este in nit () 9 w 2 L(G) astfel ^nc^at k  jwj < 2k;


unde k este numarul rezultat din Lema Bar-Hillel.
Lema de pompare a lui Bar-Hillel 73

Solutie
((=) Fiindca exista w 2 L(G) astfel ^nc^at jwj  k; rezulta aplic^and Lema de
pompare ca w = x y z si x yi z 2 L(G); 8 i 2 N; unde 0 < jyj  k: Dar multimea N
este in nita, deci L(G) este in nit.
(=)) Stim ca L(G) este in nit. Presupunem ca toate cuvintele din L(G) sunt mai
mici dec^at k; deci L(G) este nit, contradictie (sunt cel mult 1 + jVT j + jVT j + ::: +
2

jVT jk = jjVV jj cuvinte). Deci exista w 2 L(G); astfel ^nc^at jwj  k: Procedam
k
1 T 1

T 1

acum ca ^n Exercitiul 2.7.2.


Pasul 1. Daca jwj < 2k; atunci w este cel cautat;
Pasul 2. Daca jwj  2k; aplicam Lema Bar-Hillel, deci exista x; y; z astfel ^nc^at
w = x y z cu 0 < jyj  k si x yi z 2 L(G); 8 i  0: Consideram i = 0, deci
x z 2 L(G): Apoi, not^and w = x z (avem jwj  k deoarece jyj  k), reluam pasii
1 si 2.
Cum jyj > 0, rezulta ca pasul 2 se executa de un numar nit de ori (de cel mult
jwj k + 1 ori). La fel ca la exercitiul precedent, putem da rezolvarea sub forma unei
proceduri:
Intrare: L limbaj regulat, in nit, k 2 N; w 2 L(G); jwj  k;
Iesire: w0 2 L(G); k  jw0 j < 2k;
Metoda:
begin
while jwj  2k do begin
e x; y; z (din Lema de pompare) astfel ^nc^at w = x y z; 0 < jyj  k;
w = x z;
end ;
w0 := w;
end .
Exercitiul 2.7.4 Fie f : N ! N crescatoare care satisface proprietatea ca pentru
orice n 2 N exista m 2 N astfel ^nc^at f (m + 1) f (m) > n: Sa se demonstreze ca
limbajul L = faf m =m 2 Ng nu este regulat.
( )

Solutie Presupunem prin reducere la absurd ca limbajul L este regulat. Notam cu
= max ff (j + 1) f (j )g; unde k este constanta din Lema Bar-Hillel.
f j <k
( )

Multimea ff (j + 1) f (j )=f (j ) < kg este nita pentru ca exista m 2 N astfel


0

^nc^at f (m +1) f (m ) > k: De aici deducem ca f (m +1) > k: Deci f (t) > k pentru
0 0 0

t  m + 1 (deoarece f este crescatoare). Exista de asemenea un m 2 N astfel ^nc^at


f (m + 1) f (m) > maxf ; kg.
0

De aici avem ca f (m)  k; deoarece daca f (m) < k, atunci vom avea din de nitia
lui ca  f (m + 1) f (m) contradictie cu alegerea lui m:
Deci pentru cuv^antul w = af m putem aplica Lema Bar-Hillel, deci exista x; y; z
( )

astfel ^nc^at af m = x y z; 0 < jyj  k si x yi z 2 L; 8 i 2 N:


( )
Sisteme tranzitionale 74

Pe de alta parte, avem


jx y z j = jx y z j + jyj = f (m) + jyj  f (m) + k < f (m + 1):
2

Deci, din Lema Bar-Hillel, rezulta ca x y z 2 L: Dar avem f (m) < jx y z j < f (m +
2 2

1) (1).
Cum f (m) si f (m + 1) sunt doua valori consecutive ale functiei f; rezulta ca ^ntre
af m si af m nu avem alt cuv^ant din L (de lungime ^ntre f (m) si f (m + 1)).
( ) ( +1)

Contradictie cu relatia (1). Ram^ane deci ca limbajul L nu este regulat.


2
Exercitiul 2.7.5 Sa se arate ca limbajul fan =n  0g nu este regulat.
Solutie O metoda ar direct cu Lema Bar-Hillel, dar mai elegant se poate face
folosind Exercitiul 2.7.4. Astfel, e f : N ! N; f (n) = n . Este clar ca f este2

crescatoare. ^In plus, avem ca pentru 8 n 2 N; 9 m astfel ^nc^at f (m + 1) f (m) > n:
^Intr-adevar, relatia f (m + 1) f (m) > n devine m + 2m + 1 m > n. Putem astfel
2 2
  2
alege m > n + 1: Folosind deci Exercitiul 2.7.4, rezulta ca limbajul fan = n  0g
2
1

nu este regulat.

2.8 Sisteme tranzitionale


De nitia 2.8.1 Un sistem tranzitional este un 5 uplu T = (S; ; Æ; s ; F ), unde 0

 S este multime nita si nevida, numita multimea starilor;


  este multime nita si nevida, numita alfabetul de intrare;
 Æ : S  ( [ fg) ! P (S ) reprezinta functia de tranzitie;
 s 2 S este starea initiala;
0

 F  S reprezinta multimea starilor nale.


De nitia 2.8.2 Pe multimea starilor S introducem relatia binara ! : S  S; astfel:
 0
s! s daca s0 2 Æ(s; ):
 ;
Notam ^nchiderea re exiva si tranzitiva a relatiei ! cu ! , iar pentru starea s notam
! s0 g. Extinderea lui  la submultimi este imediata:
(s) = fs0=s ;
Daca S 0  S; atunci (S 0 ) = f(s)=s 2 S 0 g:

De nitia 2.8.3 Functia de tranzitie extinsa la cuvinte Æb : S  ! P (S ) se de neste


imediat (folosind functia Æ si relatia ) astfel:

 Æb(s; ) = (s); 8 s 2 S ;
Sisteme tranzitionale 75

 Æb(s; a) = (S ), unde S


1 = f=s0 2 (s);  2 Æ(s0 ; a)g. Cu alte cuvinte, asta
1

^nseamna ca exista un sir de  tranzitii, apoi se citeste litera \a", dupa care
eventual urmeaza alte  tranzitii;
s!  ! ::: ! s0 !a  ! ::: ! 0
 

 Asemanator cu Æb de la automate nedeterministe, Æb(s; wa) = fÆb(s0 ; a)=s0 2


Æb(s; w)g:
De nitia 2.8.4 Limbajul acceptat de sistemul tranzitional T este:
L(T ) = fw=w 2  ; Æb(s ; w) \ F 6= ;g 0

Observatia 2.8.1 Este clar ca R  LT (LT reprezinta multimea limbajelor acceptate
de sisteme tranzitionale) deoarece automatele nedeterministe sunt un caz particular
de sisteme tranzitionale.
Teorema 2.8.1 (LT  R)
Fie L un limbaj acceptat de un sistem tranzitional T: Atunci L este regulat.
Demonstratie Prezentam doar ideea. Demonstratia completa o gasiti ^n [7, 9, 10,
11].
Fie T = (S; ; Æ; s ; F ) astfel ^nc^at L = L(T ). Construim automatul nit nedeter-
minist A = (S; ; Æ0 ; s ; F 0 ) unde:
0

 Æ0 (s; a) = Æb(s; a); 8 s 2 S; a 2 ;


n
 F 0 = FF [ fs g contrar.
0(s ) \ F 6= ;;
0

Avem L(A) = L(T ):


Exercitiul 2.8.1 Fie sistemul tranzitional (partial de nit)
T = (fs ; s ; s ; s ; s g; fa; bg; Æ; s ; fs ; s g);
1 2 3 4 5 1 4 5

cu Æ dat prin tabelul:


Æ a b 
s1 ; fs ; s g ; 2 3

s fs g fs ; s g ;
fs ; s g fs g ;
2 4 3 5

s3 2 4 5

s4 ; ; fs g 5

s5 ; ; fs g 4

Folosind constructia din teorema precedenta si De nitia 2.8.3, sa se determine
automatul nit nedeterminist echivalent cu T:
Solutie Mai ^nt^ai, deducem multimile (s); 8 s 2 S: Astfel:
Sisteme tranzitionale 76

 (s 1 ) = fs ; s ; s g ;
1 2 3

 (s 2 ) = fs g;
2

 (s 3 ) = fs g;
3

 (s 4 ) = fs ; s g;
4 5

 (s 5 ) = fs ; s g;
4 5

Apoi, vom calcula Æb(s; a); 8 s 2 S; 8 Sa 2 : De exemplu, Æb(s ; a) = (S );


unde S = f=s0 2 (s );  2 Æ(s0 ; a)g =
1 1

1 1 Æ(s; a) = fs ; s g: Dar (fs ; s g) =


2 4 2 4
s2 s1 ( )

(s ) [ (s ) = fs ; s ; s g: ^In concluzie, avem Æb(s ; a) = fs ; s ; s g: Analog, se deduc


2 4 2 4 5 1 2 4 5

si celelalte tranzitii:


 Æb(s ; b) = (fs ; s g) = (s ) [ (s ) = fs ; s ; s g;
1 3 5 3 5 3 4 5

 Æb(s ; a) = (s ) = fs ; s g;
2 4 4 5

 Æb(s ; b) = (fs ; s g) = fs ; s ; s g;
2 3 5 3 4 5

 Æb(s ; a) = (fs ; s g) = fs ; s ; s g;
3 2 4 2 4 5

 Æb(s ; b) = (s ) = fs ; s g;
3 5 4 5

 Æb(s ; a) = Æb(s ; b) = Æb(s ; a) = Æb(s ; b) = ;:


4 4 5 5

^In concluzie, automatul nit nedeterminist echivalent cu T este


A = (fs ; s ; s ; s ; s g; fa; bg; Æ0; s ; fs ; s g);
1 2 3 4 5 1 4 5

unde Æ0 este data prin tabelul de tranzitie:


Æ0 a b
s fs ; s ; s g 1 2 4 5 fs ; s ; s g
3 4 5

s fs ; s g fs ; s ; s g
s fs ; s ; s g fs ; s g
2 4 5 3 4 5

3 2 4 5 4 5

s ; 4 ;
s ; 5 ;

2.8.1 Un algoritm e cient pentru conversia dintre un sistem


tranzitional si un automat nit nedeterminist
^In aceasta sectiune, ne propunem sa descriem un algoritm e cient care determina
automatul nit nedeterminist echivalent cu un sistem tranzitional.
^In acest sens, consideram, ca structura de date, pentru reprezentarea sistemului
tranzitional, o matrice  = (Æij ) i;jjSj ; Æij   [ fg cu semantica
1

a 2 Æij () sj 2 Æ(si ; a); 8 a 2  [ fg:


Sisteme tranzitionale 77

Exemplul 2.8.1 Pentru sistemul tranzitional din Exercitiul 2.8.1, matricea  este:
0 1
; fg fg ; ;
B
B ; ; fbg fag fbg C
C
= B
B ; fag ; fag fbg C
C
@ ; ; ; ; fg A
; ; ; fg ;
De nitia 2.8.5 Fie matricele  = (Æij );  = (Æij ) 2 MjSjjSj; i; j = 1; jS j cu
1
1
2
2

elemente submultimi din  [fg: De nim doua operatii noi relative la aceste matrice:
 adunarea:  + e1 = (Æij0 ); i; j = 1; jS j astfel:
2

Æij0 = Æij [ Æij ;


1 2

 compunerea:  eÆ 1 2 = (Æij0 ); i; j = 1; jS j astfel:


jSj
[
Æij0 = Æik Æ Ækj ;
1 2

k=1
iar legea \Æ" se de neste astfel:
8
> ; daca  2= A [A
2A
1 2
<
pentru orice A ; A  [fg; avem A ÆA = A 1 daca 2 A 1
1 2
:A
>
1 2
2 daca 2A 1 A 2

A 1 [A 2 daca 2A 1 \A2

Observatia 2.8.2 Daca jA j = jA j = 1; atunci regulile de mai sus devin:


1 2

  Æ  = ;
  Æ a = a Æ  = a; 8 a 2 ;
 a Æ b = ;; 8 a; b 2 ;
 ; Æ a = a Æ ; = ;; 8 a 2 ;
 ; Æ  =  Æ ; = ;:
De nitia 2.8.6 Numim puterea a n a a matricei :
n
n = n n=1
 1
Æ
e n > 1.
0 1
 ; : : ;
Notam + = + e ::: si  = In +
e 2+ e + , unde In = B
B ;  : : ; C
C:
@ : : : : : A
; ; : : 
Sisteme tranzitionale 78

Exemplul 2.8.2 Fie  din Exemplul 2.8.1. Vom calcula, pe r^and, puterile acestei
matrice. 0 1
; fag fbg fag fbg
B
B ; ; ; fbg fag C
C
 = 2 B
B ; ; ; fbg fag C
C
@ ; ; ; fg ; A
; ; ; ; fg
Apoi, avem 0 1
; ; ; fb g fag
B
B ; ; ; fag fbg C
C
 =  eÆ =
3 2 B
B ; ; ; fag fbg C
C
@ ; ; ; ; fg A
; ; ; fg ;
0 1
; ; ; fag fbg
B
B ; ; ; fbg fag C
C
 =  eÆ = B
4 3
B ; ; ; fbg fag C
C
@ ; ; ; fg ; A
; ; ; ; fg
0 1
; ; ; fbg fag
B
B ; ; ; fag fbg C
C
 =  eÆ =
5 4 B
B ; ; ; fag fbg C
C
@ ; ; ; ; fg A
; ; ; fg ;
Astfel obtinem suma
0 1
; f; ag f; bg f; a; bg f; a; bg
B
B ; ; fbg fa; bg fa; bg C
C
+
e 2 +
e 3 +
e 4 +
e 5 = B
B ; fag ; fa; bg fa; bg C
C
@ ; ; ; fg fg A
; ; ; fg fg
De nitia 2.8.7 Fie B  matricea care se obtine din B prin eliminarea lui  din
elementele lui B (adica daca notam cu B = (bij )1i;j n si B  = (b0ij )1i;j n , atunci
b0ij = bij fg; 8 i; j = 1; n).
Exemplul 2.8.3 Pentru  din Exemplul 2.8.1, not^and B = +
e +
e +
e +
e , 2 3 4 5

obtinem: 0 1
; fag fbg fa; bg fa; bg
B
B ; ; fbg fa; bg fa; bg C
C
B = B
B ; fag ; fa; bg fa; bg C
C
@ ; ; ; ; ; A
; ; ; ; ;
Observatia 2.8.3 Se vede ca B  este reprezentarea automatului nit nedeterminist
din Exemplul 2.8.1.
Sisteme tranzitionale 79

^In continuare, vom prezenta un algoritm e cient care, primind la intrare un sistem
tranzitional, va furniza la iesire un automat nit nedeterminist echivalent.
Algoritmul (ALG4):
Intrare: T = (S; ; Æ; s ; F ) sistem tranzitional, n = jS j;
0

Iesire: A automat nit nedeterminist echivalent cu T ;


Metoda:
1) e  matricea ce reprezinta T ;
2) calculam i ; 8 i = 1; n;
3) calculam B = + e +2 e n;
e :::+
4) calculam B  .
Teorema 2.8.2 (de corectitudine a Algoritmului (ALG4))
Fie  matricea de reprezentare a sistemului tranzitional T de la intrarea Algorit-
mului (ALG4). Dupa executia sa, avem urmatoarele relatii:
(i) + = B ;
(ii) Fie k arbitrar, k = 1; n: Daca notam k = (Æijk )1i;j jS j , atunci, ^n automatul
A (reprezentat cu k ), din starea si p^ana la sj , exista un drum de lungime k
etichetat cu Æijk   [ fg;
(iii) + = B  este reprezentarea automatului nit nedeterminist echivalent cu T:

Solutie (i) ^In automatul nit nedeterminist echivalent cu T , pot cel mult jS j
stari, deci orice drum (^n care nodurile sunt distincte) poate avea lungimea cel mult
jS j = n: Asadar  = +
+ e +2 e n = B;
e :::+
(ii) Procedam prin inductie dupa k; k  1:
Baza: Pentru k = 1 este clar ca  este reprezentarea lui T ;
Pasul inductiv: Presupunem (ii) adevarata pentru k = m, sa demonstram pentru
k = m + 1: Avem m = meÆ, deci folosind De nitia 2.8.5 avem:
+1

jSj
[
Æijm+1
= mÆÆ
Æik kj
k=1
Gra c, aceasta poate reprezentata:
s|i ! : !{z::: ! : !}sk ! sj
| {z }
Æik
m
Ækj

Din ipoteza inductiva, rezulta ca din starea si la sk exista un drum de lungime m
m   [ fg: Consideram muchia (sk ; sj ). Ea este etichetata cu Ækj :
etichetat cu Æik
Distingem cazurile:
  2= Æikm [ Ækj deci eticheta Æijm +1
este ;;
Expresii regulate 80

  2 Ækj Æikm de unde Æijm +1 m;


= Æik
  2 Æikm Ækj rezulta Æijm +1
= Ækj ;
  2 Æikm \ Ækj rezulta Æijm +1 m [ Ækj :
= Ækj
Deci, din starea si la sj exista un drum de lungime k etichetat cu Æijm   [ fg; +1

(iii) Din (ii), pentru k = n, rezulta ca + e + e n va reprezenta toate dru-
e :::+ 2

murile (cu lungimi^ntre 1 si n, dar etichetat cu cel mult un simbol din ) dintre oricare
doua stari. Cum T are n stari, rezulta ca +
e e n =  : Deci B =  : Acum,
e :::+
+ 2 + +

conform constructiei din Teorema 2.8.1, va rezulta ca B =  : +

Observatia 2.8.4 Daca matricele se ^nmultesc cu algoritmul standard (cel din


de nitie) atunci Algoritmul (ALG4) are O(n4  m) operatii, unde n = jS j; m = jj:
Observatia 2.8.5 Pentru a ^mbunatati numarul de operatii ale Algoritmului (ALG4),
vom calcula  ^n loc de  si tinem cont ca   =   : Calculul lui  se face
+ +

^n O(n  log n  m) operatii astfel:


3
2

1 : M = In +;
e

2 : M = M eÆM = (In +)


2 e eÆ(In +)
e = In +
e +
e ; deoarece +
e = ; 2

...
1 1
k: M =M 2
k
2
k
Æ
eM 2
k
, unde k este minim astfel ^nc^at 2k  n, deci k  [log2 n]:

Daca se face produsul matricelor cu algoritmul lui Strassen, atunci se ^mbunatateste


complexitatea timp ajung^and la O(n2:81  log2 n  m) operatii. Daca se foloseste un
algoritm si mai bun (cel al lui Winograd), atunci complexitatea timp devine O(n2:5 
log2n  m) operatii.

2.9 Expresii regulate


De nitia 2.9.1 Fie  = fa ; a ; :::; an g: De nim multimea expresiilor regulate:
1 2

1. ;; ; a sunt expresii regulate, 8 a 2 ;


2. daca E1 ; E2 sunt expresii regulate, atunci (E1 + E2 ); si (E1  E2 ) sunt expresii
regulate;
3. daca E este expresie regulata, atunci E  este expresie regulata;
4. singurele expresii regulate se obtin prin aplicarea regulilor 1, 2 si 3.
De nitia 2.9.2 Limbajul atasat unei expresii regulate este:
1. L(;) = ;; L() = fg; L(a) = fag; 8 a 2 ;
Expresii regulate 81

2. L((E1 + E2 )) = L(E1 ) [ L(E2 );


3. L((E1  E2 )) = L(E1 )  L(E2 );
4. L(E1 ) = (L(E1 )) ;
Exercitiul 2.9.1 Pentru expresiile regulate de mai jos, sa se precizeze limbajele aso-
ciate:
 E = (0 + 1) 0 0 (0 + 1) ;
1

 E = (1 + 10) ;
2

 E = (0 + 1) 0 1 1;
3

 E = 0 1 2;
4

 E = 0 0 1 1 2 2.
5

Solutie Limbajele asociate acestor expresii regulate se deduc imediat din De nitia
2.9.2. Astfel
 pentru expresia E avem L(E ) = f0; 1g 0 0 f0; 1g, adica L(E ) reprezinta
multimea tuturor cuvintelor peste alfabetul f0; 1g care au doua simboluri 0
1 1 1

consecutive;
 pentru expresia E avem L(E ) = f1; 10g; adica L(E ) reprezinta multimea
tuturor cuvintelor peste alfabetul f0; 1g care ^ncep cu 1 si nu au doua simboluri
2 2 2

0 consecutive;
 pentru expresia E avem L(E ) = f0; 1g 0 1 1, adica L(E ) reprezinta multimea
tuturor cuvintelor peste alfabetul f0; 1g care se sf^arsesc cu 0 1 1 (care au su xul
3 3 3

0 1 1);
 pentru expresia E avem L(E ) = f0g f1g f2g, adica L(E ) reprezinta
multimea tuturor cuvintelor peste alfabetul f0; 1g care au un numar arbitrar
4 4 4

de 0, urmat de un numar arbitrar de 1, apoi de un numar arbitrar de 2;


 pentru expresia E avem L(E ) = 0 f0g 0 f1g 2 f2g, adica L(E ) reprezinta
multimea tuturor cuvintelor peste alfabetul f0; 1g care au un numar arbitrar de
5 5 5

cel putin un 0, urmat de un numar arbitrar de cel putin un 1, apoi de un numar


arbitrar de cel putin un 2.

^In cele ce urmeaza vom da un algoritm care, av^and la intrare o expresie regulata
E , furnizeaza la iesire o gramatica G de tip 3 astfel ^nc^at L(E ) = L(G). ^In cea de-a
doua parte, vom da un procedeu de determinare a expresiei regulate echivalente cu
un automat nit (determinist, nedeterminist, sistem tranzitional).
Pentru corectitudinea algoritmului de transformare a unei expresii regulate ^ntr-
o gramatica de tip 3 echivalenta, avem nevoie de ^nchiderile la reuniune, produs si
iteratie a gramaticilor de tip 3.
Expresii regulate 82

Teorema 2.9.1
a) Familia limbajelor de tip 3 sunt ^nchise la reuniune (adica pentru orice G1 ; G2
gramatici de tip 3, exista G3 de tip 3 astfel ^nc^at L(G3 ) = L(G1 ) [ L(G2 ));
b) Familia limbajelor de tip 3 sunt ^nchise la produs;
c) Familia limbajelor de tip 3 sunt ^nchise la iteratie.
Solutie Vom prezenta doar ideea, demonstratia completa este prezentata ^n [10, 11].
Fie G = (VN ; VT ; x ; P ) si G = (VN ; VT ; x ; P ) doua gramatici de tip 3 (astfel
1
1 1
01 1 2
2 2
02 2

^nc^at VN \ VN = ;).
1 2

a) Consideram gramatica G = (VN [ VN [ fx g; VT [ VT ; x ; P [ P [ fx !


1 2
0
1 2
0 1 2 0

x ; x ! x g): Se poate demonstra ca L(G) = L(G ) [ L(G );


01 0 02 1 2

b) Consideram gramatica G = (VN [ VN ; VT [ VT ; x ; P [ fx ! p x0 = x ! p x0 2


1 2 1 2

P ; x; x0 2 VN ; p 2 (VT ) g [ fx ! p x = x ! p 2 P ; p 2 (VT ) g): Se poate


01 2
1 1 1
1 02 1

demonstra ca L(G) = L(G )  L(G ); 1 2

c) Consideram gramatica G = (VN [ fy g; VT ; y ; P [ fy ! x ; y ! g [ fx !


1 1

p y = x ! p 2 P ; x 2 VN ; p 2 (VT ) g): Se poate demonstra ca L(G) =


0 0 1 0 0 0
1 1

(L(G )) .
0 1

^In continuare, vom prezenta un algoritm e cient (liniar fata de dimensiunea expre-
siei regulate) care determina pentru o expresie regulata E , o gramatica drept-liniara
G echivalenta (adica L(E ) = L(G)).
Pentru acest algoritm, avem nevoie de:
 o stiva care va prelucra subexpresiile expresiei initiale E ; ^n aceasta stiva vom
pune simbolurile din expresia E p^ana c^and ^nt^alnim caracterele ')' sau ''; ^n
prima situatie, ^nseamna ca am terminat de citit o subexpresie (binara) de tipul
(E + E ) sau (E  E ), iar ^n a doua situatie ^nseamna ca avem o subexpresie
(unara) de tipul E  ;
1 2 1 2

 o alta structura de date necesara pentru acest algoritm este functia:


lista : VN [ VT ! P (VN )
de nita astfel:
(1) y 2 lista(x); x 2 VN () y 2 VN ; 9 x =) p y; p 2 VT si
(2) lista(x) = ;; 8 x 2 VT :
Altfel spus, lista(x) reprezinta multimea neterminalilor accesibili din x.
Algoritmul (ALG5):
Expresii regulate 83

Intrare:  alfabet de intrare, E expresie regulata peste  (complet parantetizata);


Iesire: G gramatica drept liniara echivalenta cu E (adica L(G) = L(E )).
Metoda:
begin
1. pune ^n stiva primul caracter al expresiei regulate;
2. i := 0; fcontorul neterminalilorg
3. j := 1; findicele caracterului curent din expresia Eg
4. VN := ;; VT := ; P := ;; lista(a) = ;; 8 a 2 ;
5. while (stiva este nevida) do begin
6. if (^n v^arful stivei este ')') then begin
7. consideram subexpresia E 0 p^ana la primul caracter egal cu '(' merg^and
spre baza stivei;
8. if E 0 = (E + E ) then begin
1 2

9. i := i + 1; fxi va deci un neterminal noug


10. VN := VN [ fxi g;
11. P := P [ fxi ! E ; xi ! E g;
1 2

12. lista(xi ) = fxi g [ lista(E ) [ lista(E );


1 2

13. ^nlocuieste E 0 din stiva cu xi


end
else f^nseamna ca E 0 = (E  E )g
1 2

case E of 1

14. E 2 VT : begin
1

15. i := i + 1;
16. VN := VN [ fxi g;
17. P := P [ fxi ! E E g;
1 2

18. lista(xi ) := fxi g [ lista(E );


2

19. ^nlocuieste E 0 din stiva cu xi


end
20. E 2 VN : begin
1

21. P := P fx ! p= x 2 lista(E ); p 2 VT g [ fx ! p E = x !


p 2 P; x 2 lista(E ); p 2 VT g
1 2

22. lista(x) := lista(x) [ lista(E ); unde x sunt cei din pasul 21;
2

23. ^nlocuieste E 0 din stiva cu E 1

end
end fde la caseg
end fde la if (v^arful stivei este ')')g
Expresii regulate 84

else
24. if (^n v^arful stivei este '') then begin
25. consideram expresia E 0 = E  ; E 2 VN [ VT ;
1 1

26. i := i + 1;
27. VN := VN [ fxi g;
28. lista(xi ) = fxi g [ lista(E );
1

29. ^nlocuieste E 0 din stiva cu xi


30. if E 2 VT then
1

31. P := P [ fxi ! E xi ; xi ! g
1

else begin
32. P := P [fxi ! E ; xi ! g[fx ! p xi = x 2 lista(E ); x !
p 2 P; p 2 VT g fx ! p= x 2 lista(E ); x ! p 2 P; p 2 VT g
1 1

33. lista(x) := lista(x) [ lista(xi ); unde x sunt cei din pasul 32;
end
end
else
34. if j = jE j then
35. if (stiva este nevida) then begin
36. if (topul stivei este xi sau (xi ), xi 2 VN ) then
37. G := (VN ; VT ; xi ; P )
else
38. G := (fx g; VT ; x ; fx ! ag);
1 1 1

39. exit
end
else begin
40. j := j + 1;
41. pune ^n stiva caracterul al j lea din sirul de intrare
end
end f de la if (^n v^arful stivei este ')') then begin g
end ; f de la while (stiva este nevida) do begin g
end . f de la begin g
Teorema 2.9.2 Algoritmul (ALG5) este corect si executia sa are un numar nit de
pasi.
Demonstratie Trebuie sa aratam ca bucla \while (stiva este nevida) do begin"
are un numar nit de iteratii. La ecare iteratie:
a) ori se scot din stiva cel putin doua elemente si se introduce unul (pasii 7-13,
14-23, 24-33) deci stiva descreste;
Expresii regulate 85

b) ori se executa pasii 35-39 si se iese din bucla;


c) ori se citeste un caracter care se pune ^n stiva (pasii 40-41).
Punctul a) va asigura golirea stivei (care are cel mult jE j elemente si care se introduc
o singura data) ^ntr-un numar nit de pasi. Punctul b) evident conduce la iesirea
din ciclul while (stiva este nevida) do begin . Punctul d) determina parcurgerea
completa a expresiei regulate E si introducerea unui simbol ^n stiva (deci a unui numar
nit de elemente).
Corectitudinea este asigurata de constructiile gramaticilor echivalente din Teorema
2.9.1. Pasii 8-13 construiesc gramatica care genereaza limbajul L(E 0 ) = L((E + 1

E )) = L(E ) [ L(E ) urmarind ideile din Teorema 2.9.1 (^nchiderea la reuniune).


2 1 2

Variabila lista(xi ) va contine deci neterminalul xi si neterminalii accesibili prezenti


^n listele lui E , respectiv E . Daca E sau E este terminal, atunci, prin de nitie,
1 2 1 2

lista(E ) = ;, respectiv lista(E ) = ;.


Pasii 14-19, respectiv 20-23, construiesc gramatica care genereaza L(E 0 ) = L((E 
1 2

E )) = L(E )  L(E ); baz^andu-ne pe ^nchiderea la produs. Cazul E 2 VN respecta


2 1 2 1

exact constructia din Teorema 2.9.1, bine^nteles aleg^and regulile cu neterminali accesi-
bili (adica din lista(E )). Cazul E 2 VT este mai simplu, deoarece regula xi ! E E
1 1 1 2

este de tip 3 (drept liniara).


Pasii 24-33 construiesc gramatica care genereaza L(E 0 ) = L(E  ) = (L(E )) 1

folosind ^nchiderea la produs. La fel, constructia difera putin dupa cum E 2 VT


1

sau E 2 VN :
1

Ultima situatie se refera la citirea unui simbol din expresia regulata sau la pre-
cizarea simbolului de start al gramaticii si iesirea din bucla while (stiva este nevida)
do begin :
 daca s-a terminat de citit expresia regulata (pasul 34), veri cam daca stiva este
nevida (preciz^and simbolul de start). Distingem si aici doua cazuri:
{ topul stivei este xi 2 VN atunci precizam ca xi este simbol de start (pasii
36,37);
{ topul stivei este a; a 2 VT atunci este clar ca gramatica ce genereaza acest
limbaj este x ! a; x 2 VN (pasul 38).
1 1

 daca nu s-a terminat de citit expresia regulata E , atunci trecem la urmatorul


simbol din E pe care ^l introducem ^n stiva (pasii 40-41).

Exercitiul 2.9.2 Fie expresia regulata E = ((ab) + ((a + (bb))(a b)) ): Folosind Al-
goritmul (ALG5), sa se determine gramatica G, de tip 3, pentru care L(G) = L(E ):
Solutie Vom desena evolutia stivei din Algoritmul (ALG5) numai pentru situatiile
din pasii 6-33 (pasii 34-41 sau determina iesirea din bucla, sau introduc ^n stiva
c^ate un simbol din expresia regulata). Bine^nteles, vom prezenta constructia lui
Expresii regulate 86

VN ; P; lista(x); x 2 VN si a simbolului de start. Intrarea pentru Algoritmul (ALG5)


va sirul de simboluri
((ab) + ((a + (bb))(a  b)))
cu precizarile:
  se scrie obisnuit (nu la putere);
 eventual, produsul (concatenarea) nu se mai gureaza prin ;
 pot lipsi unele paranteze (dar, ^n acest caz, Algoritmul (ALG5) trebuie adaptat
folosind prioritatile operatorilor);
 operatia de ^nlocuire a unor subexpresii din stiva cu neterminali va scoasa ^n
relief folosind linie dubla.

Astfel, executia Algoritmului (ALG5) este:


VN = ;; VT =  = fa; bg; P = ;; i = 0;

)
b
a
(
(
Dupa executia pasilor 14-19, obtinem
 i=1
 VN = fx g 1

 P = fx ! a bg
1

 lista(x ) = fx g
1 1
Expresii regulate 87

)
b
b
(
+
a
(
(
+
x1

(
Dupa executia pasilor 14-19, obtinem
 i=2
 VN = fx ; x
1 2 g
 P = fx1 ! a b; x ! b bg 2

 lista(x ) = fx g
1 1

 lista(x ) = fx g
2 2

)
x2

+
a
(
(
+
x1

(
Dupa executia pasilor 8-13, obtinem
 i=3
 VN = fx ; x ; x g
1 2 3

 P = fx ! a b; x ! b b; x ! a; x ! x g
1 2 3 3 2
Expresii regulate 88

 lista(x ) = fx g
1 1

 lista(x ) = fx g
2 2

 lista(x ) = fx ; x g
3 2 3


a
(
x3

(
+
x1

(
Dupa executia pasilor 25-31, obtinem
 i=4
 VN = fx ; x ; x ; x
1 2 g 3 4

 P = fx ! a b; x ! b b; x ! a; x ! x ; x ! a x ; x ! g
1 2 3 3 2 4 4 4

 lista(x ) = fx g
1 1

 lista(x ) = fx g
2 2

 lista(x ) = fx ; x g
3 2 3

 lista(x ) = fx g
4 4

)
b
x4

(
x3

(
+
x1

(
Dupa executia pasilor 20-23, obtinem
Expresii regulate 89

 i=4
 VN = fx ; x ; x ; x
1 2 g 3 4

 P = fx ! a b; x ! b b; x ! a; x ! x ; x ! a x ; x ! bg
1 2 3 3 2 4 4 4

 lista(x ) = fx g
1 1

 lista(x ) = fx g
2 2

 lista(x ) = fx ; x g
3 2 3

 lista(x ) = fx g
4 4

)
x4

x3

(
+
x1

(
Dupa executia pasilor 20-23, obtinem
 i=4
 VN = fx ; x ; x ; x
1 2 g 3 4

 P = fx ! a b; x ! b b x ; x ! a x ; x ! x ; x ! a x ; x ! bg
1 2 4 3 4 3 2 4 4 4

 lista(x ) = fx g
1 1

 lista(x ) = fx g
2 2

 lista(x ) = fx ; x ; x ; x g
3 2 3 4 5

 lista(x ) = fx ; x g
4 4 5


x3

+
x1

(
Expresii regulate 90

Dupa executia pasilor 24-29 si 32-33, obtinem


 i=5
 VN = fx ; x ; x ; x ; x g
1 2 3 4 5

 P = fx ! a b; x ! b b x ; x ! a x ; x ! x ; x ! a x ; x ! b x ; x !
1 2 4 3 4 3 2 4 4 4 5 5

; x ! x g
5 3

 lista(x ) = fx g
1 1

 lista(x ) = fx g
2 2

 lista(x ) = fx ; x ; x ; x g
3 2 3 4 5

 lista(x ) = fx ; x g
4 4 5

 lista(x ) = fx ; x ; x ; x g
5 2 3 4 5

)
x5

+
x1

(
Dupa executia pasilor 8-13, obtinem
 i=6
 VN = fx ; x ; x ; x ; x ; x g
1 2 3 4 5 6

 P = fx ! a b; x ! b b x ; x ! a x ; x ! x ; x ! a x ; x ! b x ; x !
1 2 4 3 4 3 2 4 4 4 5 5

; x ! x ; x ! x ; x ! x g
5 3 6 1 6 5

 lista(x ) = fx g
1 1

 lista(x ) = fx g
2 2

 lista(x ) = fx ; x ; x ; x g
3 2 3 4 5

 lista(x ) = fx ; x g
4 4 5

 lista(x ) = fx ; x ; x ; x g
5 2 3 4 5

 lista(x ) = fx ; x ; x ; x ; x ; x g
6 1 2 3 4 5 6

Ultima situatie este re ectata de pasii 34-39, c^and se precizeaza ca simbolul de start
al gramaticii G este x . 6
Expresii regulate 91

x
6

^In concluzie, gramatica echivalenta este


G = (fx ; x ; x ; x ; x ; x g; fa; bg; x ; P )
1 2 3 4 5 6 6

unde regulile P sunt fx ! a b; x ! b b x ; x


1 2 4 3 ! x ; x ! ax ; x ! ax ; x !
2 3 4 4 4 4

b x ; x ! x ; x ! ; x ! x ; x ! x g
5 5 3 5 6 1 6 5

^In cea de-a doua parte a sectiunii consacrate expresiilor regulate, vom da un pro-
cedeu (cu un numar polinomial de operatii) de determinare a expresiei regulate echiva-
lente (a claselor de echivalenta A;s0 , pagina 44, a limbajului unui automat) cu un
automat nit determinist, nedeterminist, sau cu  tranzitii. Exercitii asemanatoare
sunt prezentate si ^n [12].
Astfel, e A = (S; ; Æ; s ; F ) un automat nit (determinist, nedeterminist, sistem
tranzitional) si e si 2 S o stare arbitrara. Consideram toate arcele care ^nteapa si :
0

(1) si 2 Æ(si1 ; ai1 ) [ Æ(si2 ; ai2 ) [ ::: [ Æ(si ; ai ): k k

Vom asocia starii si o expresie regulata Xi (formal, e functia bijectiva h : S ! X


data prin h(s) = Xi , unde X = fX ; X ; :::; Xn g si n = jS j). Din relatia (1), obtinem
1 2

ecuatia:
(2) Xi = Xi1  ai1 + Xi2  ai2 + ::: + Xi  ai + i k k
n
unde i =  daca si este stare initiala sau, echivalent, i =  () i = 0:
; altfel
Cum si este o stare arbitrara, rezulta deci ca din (2) putem obtine un sistem de
ecuatii. Acest sistem se poate rezolva prin substitutii, adica putem ^nlocui o expresie
^ntr-o alta ecuatie (mai spunem ca sunt ^nchise la substitutie).
Lema 2.9.1 Ecuatiile de tip (2) sunt ^nchise la substitutie.
Demonstratie Fiind un numar nit de astfel de substitutii este su cient sa aratam
numai pentru doua astfel de ecuatii. Astfel, e
(3) Xi = Xi1  ai1 + Xi2  ai2 + ::: + Xi  ai + i k k

(4) Yj = Yj1  bj1 + Yj2  bj2 + ::: + Yj  bj + j h h

unde Xi 6= Yj :
Fie si ; sj starile corespunzatoare expresiilor Xi ; Xj din ecuatiile (3); (4): Rezulta
si 2 Æ(si1 ; ai1 ) [ Æ(si2 ; ai2 ) [ ::: [ Æ(si ; ai ) k k

sj 2 Æ(sj1 ; bj1 ) [ Æ(sj2 ; bj2 ) [ ::: [ Æ(sj ; bj ) h h


Expresii regulate 92

Daca ecuatiile (3); (4) n-au expresii ^n comun, adica daca Xi 2= fYj1 ; Yj2 ; :::; Yj g si
Yj 2= fXi1 ; Xi2 ; :::; Xi g atunci lema este banala.
h

Fara a restr^ange generalitatea, putem presupune acum ca exista t 2 f1; 2; :::; kg
k

astfel ^nc^at Yj = Xi : Facem substitutia respectiva si obtinem ecuatia:


t

Xi = Xi1  ai1 + ::: + Yj1  bj1  ai + Yj2  bj2  ai + ::: + Yj  bj  ai + j  ai + ::: + Xi  ai + i :


t t h h t t k k

Pentru a adevarata aceasta relatie, este su cient sa aratam ca:


si 2 Æ(sj1 ; bj1  ai ) [ Æ(sj2 ; bj2  ai ) [ ::: [ Æ(sj ; bj  ai ):
t t h h t

Dar Yj = Xi (deci sj = si ) si si 2 Æ(si ; ai ) deci si 2 Æ(sj ; ai )  Æ(Æ(sj1 ; bj1 ) [


Æ(sj2 ; bj2 ) [ ::: [ Æ(sj ; bj ); ai )  Æ(sj1 ; bj1  ai ) [ Æ(sj2 ; bj2  ai ) [ ::: [ Æ(sj ; bj  ai ):
t t t t t

Situatia j  ai este banala.


h h t t t h h t

Dupa un numar nit de astfel de substitutii, rezulta ^n cele din urma o ecuatie
\recursiva" (daca limbajul nu este nit), adica de forma:
X = +X  (5)
Lema 2.9.2 Solutia ecuatiei (5) este X =  :
Demonstratie ^Inlocuind solutia de mai sus ^n relatia (5), avem:  = +  :
^Insa +  = + = ( + ) =  deoarece  + =  pentru orice
+ + +

expresie regulata. Deci X =  este solutie a ecuatiei (5).


Unicitatea solutiei este asigurata de faptul ca este ecuatie \liniara".
Teorema 2.9.3 Fie A un automat nit si ecuatia Xi = + Xi  ; si 0 = L( ); 0 =
L( ): Atunci, avem:
a) Æ (s ; 0 ) = si ; Æ (si ; 0 ) = si ;
0

b) L(Xi ) = [si ]A;s0 ; unde [si ]A;s0 = fp= p 2  ; Æ (s0 ; p) = si g;


P S
c) Not^and cu E = Xi , avem ca L(A) = L(E ) = L(Xi ):
h 1 (xi )2F h 1 (xi )2F
Demonstratie
a) Rezulta din interpretarea expresiilor regulate Xi si din Lema 2.9.1;
b) Rezulta din punctul a) si din de nitia relatiei de echivalenta A;s0 ;
c) Din punctul b) si din de nitia limbajului acceptat de un automat.

Rezum^and, dam un algoritm polinomial de deducere a limbajului acceptat de


un automat (determinist, nedeterminist, sisteme tranzitionale) si de determinare a
expresiei regulate echivalente.
Algoritmul (ALG6):
Expresii regulate 93

Intrare: A = (S; ; Æ; s ; F ) automat nit (determinist, nedeterminist, sistem


1

tranzitional);
Iesire: E expresie regulata astfel ^nc^at L(E ) = L(A);
Metoda:
begin
L := ;;
E := ;;
for i := 1 to jS j do begin
f e Xi = f (X ; X ; :::; XjSj) ecuatia corespunzatoareg
1 2

if (si este stare initiala) then Xi = 


else Xi = ;;
for (each aj 2 ) do
if (9 sk 2 S; astfel ^nc^at Æ(sk ; aj ) = si ) then
adauga ^n membrul drept al lui Xi subexpresia +Xk  aj
if (ecuatia este recursiva) then
Xi = g(X ; X ; :::Xn ) ecuatie nerecursiva (cu Lema 2.9.2);
for j := 1 to jS j do
1 2

^nlocuieste Xi ^n toate ecuatiile unde acesta apare;


if si 2 F then begin
L := L [ L(Xi );
E = E + Xi ;
end
end
end:
Corectitudinea Algoritmului (ALG5) este asigurata de Teorema 2.9.3. Se vede
usor ca numarul de operatii ale algoritmului este O(jS j  jj):
2

Exercitiul 2.9.3 Fie automatul determinist A = (fs1 ; s2 ; s3 g; fa; bg; Æ; s1; fs2 ; s3 g)
cu Æ dat prin graful de tranzitie:

Z~ # a

- b
#
"! 
SoS
s 1

"!
7
a
s2

S   a
SS
S#

/
b b

"! s3
Expresii regulate 94

a) sa se calculeze clasele de echivalenta ale relatiei A;s1 ;


b) sa se determine o expresie regulata E astfel ^nc^at L(E ) = L(A);
c) sa se determine limbajul L(A):
Demonstratie Fie X ; X ; X cele trei variabile asociate starilor s ; s ; s cu
1 2 3 1 2 3

semni catiile precizate mai sus. Obtinem sistemul:


X =+X a+X a+X b
1 1 2 3

X =X b+X a
2 1 3

X =X b
3 2

Din prima ecuatie obtinem X = ( + X a + X b) a . ^Inlocuim acum X ^n a


doua ecuatie si obtinem X = a b + X a a b + X (b a b + a), de unde
1 2 3 1

2 2 3

X = (a b + X (b a b + a))(a a b)


2 3

^Inlocuind ^n a treia ecuatie, avem:


X = a b(a a b) b + X (b a b + a)(a a b) b deci
3 3

X = a b(a a b) b((b a b + a)(a a b) b)


3

Acum, ^nlocuim ^n restul ecuatiilor, obtinem:


X = (a b + a b(a a b) b((b a b + a)(a a b) b) (b a b + a))(a a b)
2

Apoi, ^nlocuind ^n prima ecuatie, rezulta:


X = ( + (a b + a b(a a b) b((b a b + a)(a a b) b)
1

(b a b + a))(a a b) a + a b(a a b) b((b a b + a)(a a b) b) b)a :


Acum, rezolvarea exercitiului nostru este imediata:
a) [s ] 1 = L(X ); [s ] 1 = L(X ); [s ] 1 = L(X );
1 A;s 1 2 A;s 2 3 A;s 3

b) Fie E = X + X : Este clar ca L(E ) = L(A);


2 3


c) L(A) = L(X ) [ L(X ): 2 3


! Exercitiul 2.9.3 este un exemplu ^n care se observa utilitatea acestei metode de
deducere a limbajului acceptat de un automat (sau a expresiei regulate echivalente).
Datorita faptului ca automatul A contine multe circuite, rezulta ca limbajul acceptat
este foarte greu de stabilit direct.
Exercitii propuse spre rezolvare 95

2.10 Exercitii propuse spre rezolvare


Exercitiul 2.10.1 Fie automatul nit determinist A = (S; ; Æ; s ; F ): Sa se arate
0

ca:
a) Æ (s; a w) = Æ (Æ (s; a); w); 8 s 2 S; 8 a 2 ; 8 w 2  ;
b) Æ (s; w1 w2 ) = Æ (Æ (s; w1 ); w2 ); 8 s 2 S; 8 w1 ; w2 2  :
Exercitiul 2.10.2 Fie A = (S; ; Æ; s ; F ) un automat nit determinist. Sa se arate
0

ca:
a) daca F = S atunci L(A) =  ;
b) daca A este minimal si L(A) =  atunci F = S ;
c) daca F = ; atunci L(A) = ;;
d) reciproca punctului c) nu are loc.
Exercitiul 2.10.3 Folosind automatul construit la Exercitiul 2.2.1, sa se efectueze
suma binara dintre numerele (cuvintele) a = 10011 si b = 11101:
Exercitiul 2.10.4 Sa se construiasca automate nite (ne)deterministe pentru lim-
bajele de mai jos:
a) L = fan bm ck =m; n; k 2 N g;
b) L = fan b2 cm =m; n 2 N g;
c) L = fa2n = n 2 Ng;
d) L = fakn = n 2 Ng; k 2 N xat;



e) L = fw= w 2 f0; 1g; jwj = 2k; 8 k 2 Ng:

d) Se considera automatul nit determinist A = (fs1 ; s2 ; :::; sk g; fag; Æ; s1; fs1 g);
cu Æ (si ; a) = si+1 ; 8 i = 1; n 1; iar Æ (sn ; a) = s1 ;
e) Se considera automatul nit determinist A = (fs1 ; s2 ; s3 ; s4 g; f0; 1g; Æ; s1; fs1 g);
cu Æ dat prin
Æ 0 1
s
1 s
3 s2

s
2 s
4 s1

s
3 s
1 s4

s
4 s
2 s3

Exercitiul 2.10.5 Fie automatul nit determinist


A = (fs ; s ; s ; s g; fa; bg; Æ; s ; fs g);
1 2 3 4 1 3

cu Æ de nit prin matricea de tranzitie:


Exercitii propuse spre rezolvare 96

Æ a b
s
1 s 2 s4

s
2 s 2 s3

s
3 s 4 s3

s
4 s 4 s4

a) sa se calculeze A;s1 ;


b) sa se calculeze L(A);
c) sa se determine L ;
d) sa se determine automatul minimal corespunzator limbajului L(A):
Exercitiul 2.10.6 Fie automatul nit determinist
A = (fs ; s ; s ; s ; s ; s g; fa; bg; Æ; s ; fs g);
1 2 3 4 5 6 1 6

cu Æ de nit prin matricea de tranzitie:


Æ a b
s
1 s 2 s3

s
2 s 4 s3

s
3 s 5 s2

s
4 s 5 s6

s
5 s 4 s6

s
6 s 4 s5

a) sa se calculeze A;s1 ;


b) sa se calculeze L(A);
c) sa se determine L ;
d) sa se determine automatul minimal corespunzator limbajului L(A):
Exercitiul 2.10.7 Folosind relatia A;s0 sa se arate ca urmatoarele limbaje nu sunt
regulate: 3
a) L = fan =n  0g;
b) L = fann =n  0g; k  2 natural xat;
k

c) L = fa n=n  0g;
2

d) L = fak =n  0g; k  2 natural xat;


e) L = fan! =n  1g;
f) L = faP (n) =n  0g; unde P este un polinom cu coe cienti naturali de grad cel
putin 2:
k
Exercitiul 2.10.8 Fie A = (S; ; Æ; s ; F ) un automat nit si S 0 = fs ; s ; :::; sn g 2
; k xat arbitrar. Presupunem ca s-a stabilit pentru perechile (si ; si ); 8 i = 1; n 1
0 1 2

+1
k
apartenenta la  :
+1

k+1
a) sa se precizeze un algoritm care sa stabileasca apartenenta la relatia  a
perechilor (si ; sj ); 8 i; j = 1; n; i 6= j ;
b) care este complexitatea timp si spatiu a algoritmului de la punctul a) ?
c) Folosind aceasta optimizare, sa se rescrie mai amanuntit Algoritmul (ALG2).
Exercitii propuse spre rezolvare 97


 Se foloseste algoritmul de ^nchidere re exiva si tranzitiva a unei relatii.
Exercitiul 2.10.9 Fie automatul nit determinist
A = (fs ; s ; s ; s ; s ; s g; fa; bg; Æ; s ; fs g);
1 2 3 4 5 6 1 6

cu Æ de nit prin matricea de tranzitie:


Æ a b
s
1 s
2 s3

s
2 s
4 s3

s
3 s
5 s2

s
4 s
5 s6

s
5 s
4 s6

s
6 s
4 s5

a) sa se deduca starile accesibile (si cele inaccesibile);


b) sa se calculeze clasele de echivalenta ale relatiei ;
c) sa se construiasca automatul minimal echivalent cu A;
d) care este L(A) ?
Exercitiul 2.10.10 Fie automatul nit determinist
A = (fs ; s ; s ; s ; s ; s ; s ; s g; f0; 1g; Æ; s ; fs g);
1 2 3 4 5 6 7 8 1 4

cu Æ de nit prin matricea de tranzitie:


Æ 0 1
s
1 s
2 s1

s
2 s
1 s3

s
3 s
4 s2

s
4 s
4 s1

s
5 s
4 s6

s
6 s
7 s5

s
7 s
6 s7

s
8 s
7 s4

a) sa se deduca starile accesibile (si cele inaccesibile);


b) sa se calculeze clasele de echivalenta ale relatiei ;
c) sa se construiasca automatul minimal echivalent cu A;
d) care este L(A) ?
Exercitiul 2.10.11 Fie A = (fs ; s ; s g; fa; bg; Æ; s ; fs g) un automat nit ne-
1 2 3 1 3

determinist, cu functia de tranzitie Æ data prin matricea:


Æ a b
s fs ; s g fs g
1 1 2 3

s fs ; s g fs g
2 1 3 2

s fs ; s g fs g
3 2 3 1
Exercitii propuse spre rezolvare 98

Folosind Algoritmul (ALG3), sa se construiasca automatul nit determinist echivalent


cu A:
Exercitiul 2.10.12 Fie A = (fs ; s ; s g; fa; bg; Æ; s ; fs g) un automat nit ne-
1 2 3 1 3

determinist, cu functia de tranzitie Æ data prin matricea:


Æ a b
s fs ; s g fs g
1 1 2 2

s fs ; s g fs g
2 1 3 3

s 3 fs g fs g 3 3

Folosind Algoritmul (ALG3), sa se construiasca automatul nit determinist echivalent


cu A:
Exercitiul 2.10.13 Fie A = (fs ; s ; s ; s g; fa; bg; Æ; s ; fs g) un automat nit
0 1 2 3 0 3

nedeterminist, cu functia de tranzitie Æ data prin matricea:


Æ a b
s fs ; s g fs g
0 0 1 2

s fs ; s g fs g
fs g fs ; s g
1 2 3 1

s 2 2 1 3

s 3 fs g fs g
3 3

Folosind Algoritmul (ALG3), sa se construiasca automatul nit determinist echivalent


cu A:
Exercitiul 2.10.14 Fie L un limbaj regulat pentru care  2= L. Sa se arate ca exista


un automat nedeterminist care are o singura stare nala si accepta limbajul L:

 Cum L este limbaj regulat si  2= L, rezulta ca exista o gramatica G de tip 3 fara
 reguli pentru care L(G) = L: Folosind constructia de la punctul d) al Exercitiului
2.6.2, rezulta ca exista un automat nit nedeterminist A cu o singura stare nala
(F = fxg) astfel ^nc^at L(G) = L(A): Deoarece gramatica G nu are  reguli, rezulta
x !  2= P , deci x 2= F .
0 0

Exercitiul 2.10.15 Fie automatul nit determinist


A = (fs ; s ; s ; s g; fa; bg; Æ; s ; fs g);
1 2 3 4 1 3

cu Æ de nit prin matricea de tranzitie:


Æ a b
s
1 s 2 s4

s
2 s 2 s3

s
3 s 4 s3

s
4 s 4 s4

Sa se determine gramatica de tip 3 echivalenta cu A.


Exercitii propuse spre rezolvare 99

Exercitiul 2.10.16 Pentru automatul din Exercitiul 2.10.12, sa se determine gra-
matica de tip 3 echivalenta.
Exercitiul 2.10.17 Fie gramatica G = (fx; yg; fa; bg; x; fx ! a x j a y; y ! b y j bg).
Sa se determine un automat nit nedeterminist echivalent.
Exercitiul 2.10.18 Fie gramatica G = (fx; yg; fa; bg; x; fx ! a x j a j y; y !
b y j b jg). Sa se determine un automat nit nedeterminist echivalent.
Exercitiul 2.10.19 Utiliz^and Lema Bar-Hillel sau Exercitiul 2.7.4, sa se arate ca
limbajele din Exercitiul 2.10.7 nu sunt regulate.
Exercitiul 2.10.20 Utiliz^and Lema Bar-Hillel, sa se arate ca urmatoarele limbaje
nu sunt regulate:
L 1 = fan bn k = n  1g; k xat;
+

L 2 = fan b n = n  1g;
2

L 3 = fan bkn = n  1g; k xat.


2
Exercitiul 2.10.21 Sa se arate ca limbajul L = fan b a +
g [ fa bg veri ca Lema
+

Bar-Hillel, dar nu este regulat.


Exercitiul 2.10.22 Fie sistemul tranzitional (partial de nit)
A = (fs ; s ; s ; s g; fa; bg; Æ; s ; fs g);
1 2 3 4 1 4

cu Æ de nit prin matricea de tranzitie:


Æ a b 
s 1 s 2 s3 ;
s 2 s 2 s2 s 4

s 3 fs ; s
3 4 g s2 ;
s 4 s 2 s3 s 1

Folosind Algoritmul (ALG4) sau procedeul din constructia teoretica din Teorema
2.8.1, sa se determine un automat nit nedeterminist echivalent cu A.
Exercitiul 2.10.23 Sa se precizeze un algoritm pentru determinarea sistemului


tranzitional echivalent pentru o expresie regulata data.

 Se foloseste un rezultat teoretic din [7, 9, 10, 11] care construieste pentru
ecare subexpresie regulata un sistem tranzitional echivalent si se obtine un algoritm
asemanator cu (ALG5).
Exercitiul 2.10.24 Sa se precizeze un algoritm pentru determinarea unei gramatici
drept liniare echivalente cu un sistem tranzitional dat. Sa se precizeze un algoritm si
pentru reciproca a rmatiei de mai sus.
Exercitii propuse spre rezolvare 100


 Asemanator cu constructia din Exercitiul 2.6.1, cu deosebirea ca o  tranzitie
va corespunde ^n gramatica echivalenta cu o regula de redenumire. Reciproca se face
folosind ideile din Exercitiul 2.6.2, evident fara a mai elimina regulile de redenumire.
Exercitiul 2.10.25 Fie L un limbaj generat de o gramatica st^ang liniara. Sa se
arate ca exista o gramatica drept liniara care genereaza limbajul L: Reciproca este
adevarata ?
Exercitiul 2.10.26 Fie gramaticile de tip 3 G = (fX ; X g; fa; b; cg; X ; fX !
1 1 2 1 1

a X ; X ! b X ; X ! b X ; X ! cg) si G = (fX ; X ; X g; fa; b; cg; X ; fX !


a X ; X ! b X ; X ! X ; X ! c X ; X ! g). Folosind, eventual, Teorema
1 1 2 2 2 2 2 1 2 3 1 1

2 2 2 2 3 3 3 3

2.9.1:
 sa se construiasca o gramatica G3 astfel ^nc^at L(G3 ) = L(G1 ) [ L(G2 );
 sa se construiasca o gramatica G3 astfel ^nc^at L(G3 ) = L(G1 )  L(G2 );
 sa se construiasca o gramatica G3 astfel ^nc^at L(G3 ) = (L(G1 )) :
Exercitiul 2.10.27 Folosind Algoritmul (ALG5), sa se determine gramaticile de tip
3 echivalente pentru urmatoarele expresii regulate:
 (a + (a b))
 ((1 + 01 + 001) ( + 0 + 00))
 ((0 + 1)(0 + 1)) + ((0 + 1)(0 + 1)(0 + 1))
Exercitiul 2.10.28 Sa se demonstreze ca L(E ) = L(E ) (sunt echivalente), unde:
1 2

E = 1 + 0(10)(11 + 0)
1

E = (01) (1 + 00):

~
2

Acest exercitiu se poate folosi pentru a scrie o alta forma a limbajului acceptat de
automatul din Exercitiul 2.4.1 utiliz^and metoda prezentata ^n Sectiunea 2.9.
Exercitiul 2.10.29 Sa se demonstreze ca L(E ) = L(E ) unde:
1 2

a)
E = ( + (a b + a b(a a b) b((b a b + a)(a a b) b)
1

(b a b + a))(a a b) a + a b(a a b) b((b a b + a)(a a b) b) b)a :


si
E = (a + b(b a)(a + b b)) ;
2
Exercitii propuse spre rezolvare 101

b)
E = (a b + a b(a a b) b((b a b + a)(a a b) b) (b a b + a))(a a b)
1

si
E = (a + b(b a)(a + b b)) b(b a) ;
2

c)
E = a b(a a b) b((b a b + a)(a a b) b)
1

si
E = (a + b(b a) (a + b b)) b(b a) b:

~
2

Sunt mai multe moduri de abordare a problemelor de acest tip:


 primul mod (cel mai nesigur) ar sa facem diferite transformari (de exemplu,
folosind identitatile din Exercitiul 2.10.30) si sa le aducem la o forma comuna;
 al doilea mod (sigur, dar de complexitate exponentiala), ar sa construim,
pentru cele doua expresii regulate, automatele minimale care accepta limbajele
L(E1 ) si L(E2 ). Apoi, se veri ca daca automatele sunt izomorfe;
 al treilea mod (sigur, de complexitate polinomiala, dar care merge numai pentru
acest exercitiu), este sa plecam de la Exercitiul 2.9.3. Vom rezolva ^n alt mod
sistemul de ecuatii:
(1) X =+X a+X a+X b
1 1 2 3

(2) X =X b+X a
2 1 3

(3) X =X b
3 2

^Inlocuim (3) ^n (2) si obtinem:

X = X b+X ba
2 1 2

Prin rezolvarea acestei ecuatii, rezulta (4) X2 = X1 b(b a) : ^Inlocuim (4) ^n (1)
si ^n (3), care apoi ^l ^nlocuim tot ^n (1): Deducem:
(5) X =  + X a + X b(b a) a + X b(b a) b b
1 1 1 1

Din aceasta ecuatie rezulta


(6) X = (a + b(b a) a + b(b a) b b) = (a + b(b a) (a + b b))
1

Apoi, rezulta imediat X2 si X3 :


(7) X = (a + b(b a) (a + b b)) b(b a)
2

(8) X = (a + b(b a) (a + b b)) b(b a) b


3

Acum, prin comparatie cu rezultatele de la Exercitiul 2.9.3, se veri ca imediat


echivalenta expresiilor regulate.
Exercitii propuse spre rezolvare 102

Exercitiul 2.10.30 Demonstrati urmatoarele identitati pentru expresiile regulate


r; s si t (notatie: r = s ^nseamna L(r) = L(s)):
a) r + s = s + r
b) (r + s) + t = r + (s + t)
c) (r s)t = r(s t)
d) r(s + t) = r s + r t
e) (r + s)t = r t + s t
f) ; = 
g)  = 
h)  r = r  = r
i) (r ) = r
j) ( + r) = r
k) (r s ) = (r + s)
l) r(s r) = (r s) r
Exercitiul 2.10.31 Fie r; s si t expresii regulate. Care din urmatoarele relatii sunt
adevarate si care nu ?
(i) (r s + r) r = r(s r + r)
(ii) s(r s + s) r = r r s(r r s)


(iii) (r + s) = r + s


! Folosind identitatile din Exercitiul 2.10.30, avem:
h) d) l) e)
(i) adevarata, deoarece (r s + r) r = (r s + r ) r = (r(s + )) r = r((s + )r) =
h
r(s r +  r) = r(s r + r)
)

(ii) falsa, deoarece prima expresie ^ncepe cu s si a doua cu r;


(iii) falsa, deoarece prima expresie contine r s, pe c^and a doua nu.
Exercitiul 2.10.32 Pentru expresiile regulate din Exercitiul 2.10.27, sa se determine
sistemele tranzitionale (automatele nedeterministe, deterministe, minimale) echiva-
lente.
Exercitii propuse spre rezolvare 103

Exercitiul 2.10.33 Utiliz^and Algoritmul (ALG6), sa se precizeze expresiile regulate


echivalente (si limbajele acceptate) pentru automatele din Exercitiile 2.10.5, 2.10.6,
2.10.9, 2.10.11, 2.10.12, 2.10.15 si 2.10.22. Aceeasi ^ntrebare pentru veri carea lim-
bajelor prezentate ^n Exercitiile 2.3.2, 2.3.3, 2.4.1, 2.5.1, 2.6.1 si 2.8.1.
Exercitiul 2.10.34 Spunem ca doua expresii regulate peste  sunt egale (notatie
E = E ) daca si numai daca L(E ) = L(E ). Aratati ca:
1 2 1 2

a) (ER(); +) este monoid comutativ;


b) (ER(); ) este monoid;
c) \" este distributiva fata de \+".
unde prin ER() s-a notat multimea tuturor expresiilor regulate cu variabile din .
Capitolul 3

Limbaje independente de
context
3.1 Automate pushdown nedeterministe
De nitia 3.1.1 Un automat pushdown nedeterminist nit este un 7-uplu
P = (S; ; ; Æ; s ; z ; F )
0 0

unde
 S reprezinta multimea starilor ( nita, nevida);
  este alfabetul benzii de intrare ( nit, nevid);
 este alfabetul stivei (memoriei) pushdown ( nit, nevid);
 Æ : S  ( [ fg)  ! P (S   ) este functia de tranzitie;
 s 2 S este starea initiala;
0

 z 2 este simbolul de start din memoria pushdown;


0

 F  S este multimea starilor nale.


De nitia 3.1.2 Multimea S     se numeste multimea con guratiilor.
Tripletul (s; a u; z ) se numeste con guratie, unde s 2 S; a 2 ; z 2 ,
u 2  ; 2  .
De nitia 3.1.3 Consideram relatia binara : S     , de nita astfel:
daca (s0 ; ) 2 Æ (s; a; z ) atunci (s; a u; z ) (s0 ; u; )

104
Automate pushdown nedeterministe 105

 +
Notam ; ^nchiderea re exiva si tranzitiva, respectiv tranzitiva, a relatiei
(1)

: C^and scriem ^nseamna ca s-a aplicat tranzitia cu numarul 1: Daca scriem
;
2 (1)

^nseamna ca s-a aplicat de doua ori tranzitia cu numarul 1:


De nitia 3.1.4 Fie P = (S; ; ; Æ; s ; z ; F ) un automat pushdown nedeterminist.
0 0

Atunci limbajul acceptat de P este



L(P ) = fw= w 2  ; (s ; w; z ) (s; ; ); s 2 F; 2  g:
0 0

De nitia 3.1.5 Fie P = (S; ; ; Æ; s0; z0 ; ;) un automat pushdown nedeterminist cu


memorie vida. Atunci limbajul acceptat de P este

L (P ) = fw= w 2  ; (s ; w; z ) 0 0 (s; ; ); s 2 S g:
Exercitiul 3.1.1 Fie automatul pushdown P = (fs0 ; s1 ; s2 g; f0; 1g; fz; 0g; Æ; s0; z; fs0g),
unde functia de tranzitie este:
1) Æ (s0 ; 0; z ) = f(s1 ; 0 z )g;
2) Æ (s1 ; 0; 0) = f(s1 ; 0 0)g;
3) Æ (s1 ; 1; 0) = f(s2 ; )g;
4) Æ (s2 ; 1; 0) = f(s2 ; )g;
5) Æ (s2 ; ; z ) = f(s0 ; )g;
6) Æ (s; a; z ) = ; ^n celelalte cazuri.
a) Sa se arate ca L(P ) = f0n 1n = n  0g;
b) Ce tip de automat pushdown este P ?
Solutie
a) : Trebuie sa aratam ca 0n 1n 2 L(P ): ^Inainte de a face cazul general, sa vedem,
de exemplu, daca 0 0 1 1 2 L(P ).
(1) (2) (3)

Astfel, avem (s ; 0 0 1 1; z )
0 (s ; 0 1 1; 0 z )
1 (s ; 1 1; 0 0 z )
1

2 F , rezulta ca 0 0 1 1 2 L(P ):


(4) (5)

(s ; 1; 0 z )
2 (s ; ; z )
2 (s ; ; ); si cum s
0 0
(1) n 1;(2)
Trecem acum la cazul general. Avem: (s ; 0n 1n ; z ) 0 (s ; 0n 1n ; 0 z )
1
1

(3) n 1;(4) (5)

(s ; 1n ; 0n z ) (s ; 1n ; 0n z ) 1
(s ; ; z )
1
(s ; ; ); si la fel cum
s 2 F , rezulta ca 0n 1n 2 L(P ): Cu aceasta, prima incluziune este terminata.
1 2 2 0


: Fie w 2 L(P ); adica exista tranzitia (s ; w; z ) (s ; ; ); 2  (s ind
0 0 0

singura stare nala). Sa aratam ca 9 n 2 N astfel ^nc^at w = 0n 1n: Distingem mai
multe situatii:
Automate pushdown nedeterministe 106

;

0

Cazul I: w = : E clar ca (s0 ; ; z ) (s ; ; z ): Deci pentru n = 0 avem


0

w = 0n 1n :
 Cazul II: w 6= ; deci w = i1 i2 ::: im ; m  1; cu i1 ; :::; im 2 f0; 1g: Presupunem
i = 1. Cum Æ(s ; 1; ) = ;; rezulta ca ne blocam (nu avem ce tranzitie sa
1 0

aplicam).
Asadar i = 0: Fara a restr^ange generalitatea, distingem cazurile:
1

k;+
{ Cazul II.1: w = 0k ; k  1 =) (s ; 0k ; z )
0 (s ; ; 0n z ) si ne-am blocat
1

deoarece Æ(s ; ; ) = ;;
1

{ Cazul II.2: w = 0k 1l u; unde l; k  1; iar u =  sau u ^ncepe cu 0 (u = 0 u0 ).



^In acest caz, avem (s ; 0k 1l u)
(3)

0 (s ; 1l u; 0k z )
1 (s ; 1l u; 0k z ). 2
1 1

Acum distingem trei situatii:


;
 Situatia 1: k < l. Obtinem
(4) (5)

(s ; 1l k u; z ) 2 (s ; 1l k u; ) si 0

ne-am blocat deoarece Æ(s ; 1; ) = ;;


0

;
 Situatia 2: k > l. Obtinem
(4)

(s ; u; 0k l z ) si ne-am blocat


2

deoarece Æ(s ; 0; 0) = ; si Æ(s ; ; 0) = ; (u nu ^ncepe cu 1);


2 2

;
 Situatia 3: k = l. Obtinem
(4) (5)

(s ; u; z ) (s ; u; ) si ne
blocam daca u = 0 u0; deoarece Æ(s ; 0; ) = ;: Deci singura posibilitate
2 0

ram^ane u = . Asadar, w = 0k 1k ; k  1:

Din cazul I, respectiv cazul II.2 (situatia 3), rezulta ca exista n  0; astfel ^nc^at
w = 0n 1n : ^In concluzie, L(P ) = f0n 1n = n  0g:
b) P este un automat pushdown cu stari nale. Pentru cuvintele de forma 0n 1n ; n 
1, automatul P poate privit ca ind cu memorie vida.
Cu aceasta, solutia Exercitiului 3.1.1 a luat sf^arsit.
Exercitiul 3.1.2 Fie automatul pushdown
P = (fs ; s ; s g; fa; bg; fz; a; bg; Æ; s ; z; fs g)
0 1 2 0 2

cu functia Æ de nita astfel:


1) Æ (s0 ; a; z ) = f(s0 ; a z )g;
2) Æ (s0 ; b; z ) = f(s0 ; b z )g;
3) Æ (s0 ; a; a) = f(s0 ; a a); (s1 ; )g;
4) Æ (s0 ; a; b) = f(s0 ; a b)g;
5) Æ (s0 ; b; a) = f(s0 ; b a)g;
Automate pushdown nedeterministe 107

6) Æ (s0 ; b; b) = f(s0 ; b b); (s1 ; )g;


7) Æ (s1 ; a; a) = f(s1 ; )g;
8) Æ (s1 ; b; b) = f(s1 ; )g;
9) Æ (s1 ; ; z ) = f(s2 ; )g;
10) Æ (s; i; x) = ;, pentru 8 (s; i; x) 2 S  ( [ fg)  nede nite mai sus (ramase).
a) Sa se arate ca L(P ) = fw w=w
e 2 fa; bg+g; unde we reprezinta oglinditul lui w;
b) Ce fel de automat pushdown este P ?
Solutie
_
a) : Facem conventiile ca
(1) (2)

sa ^nsemne aplicarea tranzitiei (1) sau (2), iar


(3 )b
daca scriem ^ntelegem ca se aplica tranzitia cu numarul 3 partea a doua (cea
_ (1) (2)

care ajunge ^n (s ; )). Astfel, avem tranzitiile (s ; i i ::: in in ::: i i ; z )


1 0 1 2 2 1
a _ _ _ a ; (3 ) (4) (5) (6 ) b_ b (3 ) (6 )

(s ; i ::: in in ::: i i ; i z )
0 2 2 1 1 (s ; in ::: i i ; in ::: i i z ) 0(s ; in 2 1 2 1 0 1
_ ; (7) (8) (9)

::: i i ; in ::: i i z )
2 1 1 2 1 (s ; ; z ) (s ; ; );
1 2


: Fie w 2 L(P ); deci exista tranzitia (s ; w; z ) (s ; ; ); 2 fz; a; bg: Dar 0 2

singura tranzitie care prin care se poate ajunge ^n s este (9), deci ne vor interesa 2

forma cuvintelor pentru care ajungem ^n starea s , iar ^n stiva pushdown avem z: 1

Astfel, e w = i i ::: ik ; ij 2 fa; bg; 8 j = 1; k: La ^nceput avem una din tranzitiile


1 2
_
(s ; i ::: ik ; i z ): ^In acest moment, putem aplica (3a) _ (4) _
(1) (2)

(s ; i i ::: ik ; z )
(5) _ (6a), sau (3b) _ (6b) daca i = i . Oricum, daca aplicam (3b) _ (6b), ajungem
0 1 2 0 2 1

2 1

^n starea s , si de acolo nu mai putem trece ^n starea s . Deci, fara a restr^ange
1 0

generalitatea consideram ca (3a) _ (4) _ (5) _ (6a) s-a aplicat de l ori (0  l  k).
Astfel am obtinut tranzitia
a _ _ _ a ;l (3 ) (4) (5) (6 )

(s ; i ::: ik ; i z )
0 2 1 (s ; il ::: ik ; il ::: i z ) 0 +1 1

 Cazul I: daca l = k atunci ne blocam deoarece Æ (s0 ; ; orice) = ;;


b _ b

(3 ) (6 )

Cazul II: daca l < k atunci (s0 ; il+1 ::: ik ; il ::: i1 z )


(s ; il ::: ik ; il ::: i 1 +2 1 1

z ) si il = il (altfel ne blocam). De aici se pot aplica doar regulile (7) sau (8)
+1

trebuind sa ajungem ^n con guratia (s ; ; z ). Distingem subcazurile: 1

{ Subcazul II.1: k l 1 < l 1 (sau k < 2l). Obtinem tranzitia:


_ ;k l ; (7) (8) 1

(s ; il ::: ik ; il ::: i z )
1 +2 (s ; ; i l k ::: i z )
1 1 1 2 1

care conduce la blocaj deoarece Æ(s ; ; orice) = ;; 1


Automate pushdown nedeterministe 108

{ Subcazul II.2: k l 1 > l 1 (sau k > 2l). Obtinem tranzitia:


_ ;l ;
(7) (8) 1 (9)

(s ; il ::: ik ; il ::: i z )
1 +2 1 1 (s ; ik l ::: ik ; z ) (s ; ik l1 2 2 2

::: ik ; )
si iarasi ne blocam deoarece memoria pushdown a devenit vida;
{ Subcazul II.3: k = 2l Obtinem tranzitia:
_ ;l ; (7) (8) 1 (9)

(s ; il ::: ik ; il ::: i z )
1 +2 1 1 (s ; ; z ) (s ; ; ) 1 2

care este o con guratie de acceptare deoarece s este stare nala. ^In 2

timpul aplicarii tranzitiilor (7) sau (8), avem satisfacute relatiile il = +2

il ; il = il ; :::; ik = i : De mai sus avem si il = il deci not^and


1 +3 2 1 +1

cu w = i i ::: il rezulta ca w = w wf ; w 2 fa; bg , adica exact ceea ce


1 1 2 1 1 1
+

trebuia demonstrat.
b) P este un automat pushdown cu stare nala, dar poate privit si ca un automat
pushdown cu memorie vida. Din punct de vedere al determinismului, P este automat
pushdown nedeterminist.
Exercitiul 3.1.3 Fie automatul pushdown P = (fq ; q ; q ; q g; fa; b; cg; fz; ag; Æ; q ;
0 1 2 3 0

z; fq g) cu Æ dat prin:
3

1) Æ (q0 ; a; z ) = f(q1 ; a a z )g;


2) Æ (q1 ; a; a) = f(q1 ; a a a)g;
3) Æ (q1 ; b; a) = f(q2 ; )g;
4) Æ (q1 ; c; a) = f(q2 ; )g;
5) Æ (q2 ; b; a) = f(q2 ; )g;
6) Æ (q2 ; c; a) = f(q2 ; )g;
7) Æ (q2 ; ; z ) = f(q3 ; )g;
8) Æ (s; i; x) = ;, pentru 8 (s; i; x) 2 S  ( [ fg)  nede nite mai sus (ramase).
a) Sa se arate ca L(P ) = fan w=w 2 fb; cg+; jwj = 2n; n  1g;
b) Ce fel de automat pushdown este P ?
c) Sa se gaseasca o gramatica de tip 2 echivalenta cu P:
Solutie
: Asemanatoare demonstratiilor din Exercitiile 3.1.1

si 3.1.2.
: Fie w 2 L(P ), adica exista tranzitia (q ; w; z ) (q ; ; ). La fel ca ^n Exercitiul
0 3

3.1.2, daca w ^ncepe cu b sau c atunci ne blocam.


Automate pushdown nedeterministe 109

Asadar, w ^ncepe cu a, adica 9 k  1 astfel ^nc^at w = ak w ; cu 1


(1)
w 1 2 fb; cg:
Astfel, ^n mod determinist, avem
k;
(q ; ak w ; z )
0 1 (q ; w ; a k z )
1 1
2

Sa notam w = i i ::: it . Este clar ca urmatoarea tranzitie va 3 sau 4. Se observa
ca i ; i ; :::; in 2 fb; cg, deoarece altfel ne blocam (nu avem Æ(q ; a; orice) de nit,
1 1 2

1 2 2

iar daca aplicam tranzitia 7, ne blocam indca golim memoria pushdown). Sa mai
observam acum ca pentru a ajunge ^n singura stare nala s , trebuie sa aplicam 3

tranzitia 7, deci trebuie vizat ^n memoria pushdown simbolul z . Asadar trebuie eli-
minate toate simbolurile a k prezente ^n stiva pushdown. Deci, daca t < 2k atunci ne
2

blocam deoarece nu avem tranzitie Æ(q ; ; a), iar daca t > 2k ajungem la con guratia
2

(q ; i k i k ::: it ; z ) si ne blocam deoarece nu avem ce aplica. Astfel, ram^ane ca


t = 2k, deci w = ak w ; w 2 fb; cg; jw j = 2k: Cu aceasta, am demonstrat si cealalta
3 2 +1 2 +2

1 1 1

incluziune.
b) Automatul P este cu memorie vida, dar si cu stare nala. ^In plus, acesta este
determinist (De nitia 3.6.1).
c) Vom vedea ^n Exercitiul 3.1.5 un procedeu de deducere a gramaticii echivalente cu
un automat pushdown folosind teoria ([11]). Pentru acest exercitiu, vom da ^nsa doua
gramatici echivalente cu P construite direct din forma analitica a limbajului. Acestea
sunt:
G 1 = (fS; Ag; fa; b; cg; S; fS ! a S A A j a A A; A ! b j cg);
G 2 = (fS g; fa; b; cg; S; fS ! a S b b j a S b c j a S c b j a S c c j a b b j a b c j a c b j a c cg).
Lasam ca tema cititorului demonstratia echivalentei dintre G ; G si P . 1 2

Teorema 3.1.1 Pentru orice gramatica independenta de context, exista un automat


pushdown (nedeterminist) cu memorie vida echivalent.
Demonstratie Se gaseste ^n [7, 11].
Exercitiul 3.1.4 Fie gramatica G = (fx ; xg; fa; b; cg; x ; fx ! x c j x c; x
1 0 0 0 0 !
a x b j a bg): Sa se construiasca un automat pushdown echivalent cu G : 1

Solutie Vom rezolva problema prin doua metode. Prima metoda se refera la
constructia generala din Teorema 3.1.1. Astfel pentru G = (VN ; VT ; x ; P ) construim 0

P = (fsg; VT ; VN [ VT ; Æ; s; x ; ;); unde Æ este de nit dupa cum urmeaza:


0

 (expandare) Æ(s; ; x) = f(s; r)= x ! r 2 P g;


 (reducere) Æ(s; a; a) = f(s; )g; 8 a 2 ;
 Æ(rest) = ;; ^n celelalte cazuri.
^In cazul exercitiului nostru avem P = (fsg; fa; b; cg; fx ; x; a; b; cg; Æ; s; x ; ;) unde Æ
0 0

este dat prin:


Automate pushdown nedeterministe 110

1) Æ(s; ; x ) = f(s; x c); (s; x c)g


0 0

Æ(s; ; x) = f(s; a x b); (s; a b)g


2) Æ(s; a; a) = f(s; )g
Æ(s; b; b) = f(s; )g
Æ(s; c; c) = f(s; )g
3) Æ(rest) = ;; ^n celelalte cazuri.
Nu este nevoie sa demonstram ca L(G ) = L (P ), deoarece am folosit constructia
1

din Teorema 3.1.1.


Pentru a prezenta a doua metoda, mai ^nt^ai sa observam ca L(G ) = 1

fan bn cm = n; m  1g: Asemanator cu Exercitiul 3.1.1, construim un automat push-


down determinist care accepta acest limbaj. Fie
P 0 = (fs ; s ; s ; s g; fa; b; cg; fa; z g; Æ; s ; z; fs g);
0 1 2 3 0 3

cu Æ dat astfel:
1. d(s ; a; z ) = (s ; a z );
0 1

2. d(s ; a; a) = (s ; a a);
1 1

3. d(s ; b; a) = (s ; );
1 2

4. d(s ; b; a) = (s ; );
2 2

5. d(s ; c; z ) = (s ; z );
2 3

6. d(s ; c; z ) = (s ; z );
3 3

7. Æ(rest) = ;; ^n celelalte cazuri.


Lasam cititorului, ca exercitiu, demonstratia echivalentei dintre P 0 si G :
1

Teorema 3.1.2 Pentru orice automat pushdown (nedeterminist) cu memorie vida,


exista o gramatica independenta de context echivalenta.


Demonstratie Se gaseste ^n [7, 11].


! ^In constructia din Teorema 3.1.1, se determina un automat pushdown nedeter-
minist cu o singura stare echivalent cu o gramatica de tip 2. Apoi din Teorema
(reciproca) 3.1.2 avem o constructie a unei gramatici de tip 2 echivalente cu un
automat pushdown nedeterminist. Din aceste doua teoreme rezulta ca pentru orice
automat pushdown nedeterminist cu mai multe stari, exista un automat pushdown
nedeterminist echivalent care are o singura stare. De aici rezulta ca putem elimina
din de nitia automatelor pushdown multimea starilor. Dezavantajele sunt distrugerea
"esentei" automatelor pushdown si faptul ca aceasta conversie este de dimensiune
exponentiala. Mai mult, automatul cu o singura stare (care se poate elimina) va
nedeterminist, deci nu vom putea studia proprietatile automatelor pushdown determi-
niste (care formeaza clasa L2DET ).
Automate pushdown nedeterministe 111

Exercitiul 3.1.5 Fie automatul pushdown determinist


P = (fs ; s ; s g; f0; 1g; fz; 0g; Æ; s ; z; ;);
0 1 2 0

unde Æ este dat prin:


1) Æ (s0 ; 0; z ) = (s1 ; 0 z );
2) Æ (s1 ; 0; 0) = (s1 ; 0 0);
3) Æ (s1 ; 1; 0) = (s2 ; );
4) Æ (s2 ; 1; 0) = (s2 ; );
5) Æ (s2 ; ; z ) = (s0 ; z );
6) Æ (rest) = ;; ^n celelalte cazuri.
Sa se construiasca o gramatica de tip 2 echivalenta cu P:
Solutie La fel ca ^n exercitiile precedente, vom prezenta doua metode. Prima
se va referi la constructia teoretica din demonstratia Teoremei 3.1.2 (amanunte ^n
[7, 9, 10]).
Metoda I: Fie P = (S; ; ; Æ; s ; z ; ;) un automat pushdown nedeterminist cu
0 0

memorie vida. Construim gramatica G = (S   S [ fx g; ; x ; P ) unde regulile 0 0

P se formeaza dupa cum urmeaza:


(i) Pentru tranzitii de tipul (r; ::: n ) 2 Æ(s; a; z ); unde a 2  [fg; ; ; :::;
1 2 1 2

n 2 ; ar trebui ca ^n gramatica G sa avem o regula de genul [s; z ] !


a[r; ::: n ]. Dar c^ampul al doilea al acestor perechi nu contine tot tim-
1 2

pul un singur simbol, de aceea trebuie introdus un al treilea c^amp. Asadar,


pentru tranzitia de mai sus, consideram regulile:
[s; z; s0] ! a [r; ; s ] [s ; ; s ] :::[sn ; n ; s0 ]; 8 s ; s ; :::; sn ; s0 2 S:
1 1 1 2 2 1 1 2 1

(ii) Pentru tranzitii de tipul (r; ) 2 Æ(s; a; z ); 8 a 2  [ fg; trebuie sa punem ^n
corespondenta ^n gramatica G regula [s; z; r] ! a:
(iii) Bine^nteles, trebuie precizate si reguli de start pentru gramatica G, si acestea
sunt x ! [s ; z ; s]; 8 s 2 S:
0 0 0

Cu aceasta constructie, sa vedem ce reguli trebuie sa contina gramatica G echivalenta
cu P .
 Pentru prima tranzitie, avem noua reguli ^n gramatica G:
{ [s ; z; s ] ! 0 [s ; 0; s ] [s ; z; s ]
0 0 1 0 0 0

{ [s ; z; s ] ! 0 [s ; 0; s ] [s ; z; s ]
0 0 1 1 1 0

{ [s ; z; s ] ! 0 [s ; 0; s ] [s ; z; s ]
0 0 1 2 2 0
Automate pushdown nedeterministe 112

{ [s
0 ; z; s
1 ] ! 0 [s 1 ; 0; s 0 ] [s0 ; z; s 1 ]
{ [s
0 ; z; s
1 ] ! 0 [s 1 ; 0; s 1 ] [s1 ; z; s 1 ]
{ [s
0 ; z; s
1 ] ! 0 [s 1 ; 0; s 2 ] [s2 ; z; s 1 ]
{ [s
0 ; z; s
2 ] ! 0 [s 1 ; 0; s 0 ] [s0 ; z; s 2 ]
{ [s
0 ; z; s
2 ] ! 0 [s 1 ; 0; s 1 ] [s1 ; z; s 2 ]
{ [s
0 ; z; s
2 ] ! 0 [s 1 ; 0; s 2 ] [s2 ; z; s 2 ]
 Pentru tranzitia Æ(s ; 0; 0) = (s ; 0 0), se procedeaza la fel (obtinem tot noua
1 1

reguli).
 Pentru tranzitia Æ(s ; 1; 0) = (s ; ), obtinem regula [s ; 0; s ] ! 1:
1 2 1 2

 Pentru tranzitia Æ(s ; 1; 0) = (s ; ), obtinem regula [s ; 0; s ] ! 1:


2 2 2 2

 Pentru tranzitia Æ(s ; ; z ) = (s ; z ), obtinem regula [s ; z; s ] ! :


2 0 2 0

 Reguli de start: x 0 ! [s ; z ; s ] j [s ; z ; s ] j [s ; z ; s ]:
0 0 0 0 0 1 0 0 2

Metoda a II-a: Se observa ca limbajul acceptat de acest automat se poate exprima
sub forma analitica, adica L(G) = f0n 1n= n  1g: Alegem, de exemplu, gramatica
G = (fx g; f0; 1g; x ; fx ! 0 x 1 j 0 1g). Se observa ca aceasta gramatica este mai


0 0 0 0

redusa dec^at gramatica din metoda I. Lasam ca exercitiu pentru cititor demonstratia
egalitatii L(G) = L (P ):


! Se observa, ^n constructia din prima metoda, ca pentru o tranzitie de tipul
(r; ) 2 Æ(s; a; z ); avem jS jm reguli, unde m = j j: ^In subsectiunea de mai jos, vom
prezenta un algoritm e cient (dar tot exponential), care construieste gramatica de tip
2 echivalenta cu un automat pushdown nedeterminist.

3.1.1 Un algoritm e cient pentru conversia dintre un automat


pushdown nedeterminist si o gramatica de tip 2
Am vazut ^n constructia din Exercitiul 3.1.5 ca avem jS j  j j + 1 neterminali si jS jk 2

reguli pentru o tranzitie de tipul (i). De asemeni, trebuie adaugate si regulile de
tipul (ii) si (iii) (din acelasi exercitiu). Asadar, dimensiunea gramaticii ce rezulta din
aceasta constructie este foarte mare.
Exemplul 3.1.1 Pentru limbajul L = f0n1 n =n  1g independent de context, con- 3

sideram automatul pushdown A = (fq ; q ; q g; f0; 1g; fx; z g; Æ; q ; z; ;); unde Æ este
0 1 2 0

dat prin:
1. Æ (q0 ; 0; z ) = f(q1 ; xxxz )g;
2. Æ (q1 ; 0; x) = f(q1 ; xxxx)g;
3. Æ (q1 ; 1; x) = f(q2 ; )g;
Automate pushdown nedeterministe 113

4. Æ (q2 ; 1; x) = f(q2 ; )g;


5. Æ (q2 ; ; x) = f(q0 ; )g:
Conform cu constructia prezentata ^n Exercitiul 3.1.5, obtinem o gramatica echiva-
lenta care are 19 neterminali si 168 reguli.
Pentru a rezolva e cient aceasta problema, dam urmatoarea de nitie:
De nitia 3.1.6 Consideram compunerea a doua triplete din Q    Q (notatie
\Æ"): 
[q ; u; q ] Æ [q ; v; q ] = ;[q ; uv; q ] altfel.
1 2
daca q = q
3 4
1 4 2 3

Folosind asociativitatea st^anga, putem extinde Æ la (Q    Q)m ; m  2; astfel:


[q ; u ; q ] Æ [q0 ; u ; q ] Æ ::: Æ [qm
1 1 2
0 ; um; qm ] =
2 2 3 +1

= ([q ; u ; q ] Æ [q0 ; u ; q ] Æ ::: Æ [qm


1 1 2 2
0 ; um ; qm ]) Æ [q0 ; um ; qm ]
2 3 m 1 1 +1

Algoritmul (ALG7):
Intrare: A = (Q; ; ; Æ; q ; z ; ;) un automat pushdown;
0 0

Iesire: G = (V; ; S; P ) o gramatica independenta la context echivalenta;


Metoda:
1. := ;;
0

2. := ;
3. P := ;;
1 0

4. for (orice (q ; ) 2 Æ(q; a; X )) do begin


1

5. := [ f[q; X; q ]g;
6. P := P [ f[q; X; q ] ! ag
1 1 1

end
7. k := 1;
repeat
8. k := k ;
9. for (orice (q ; z z :::zm ) 2 Æ(q; a; X )) do begin
+1

1 1 2

10. ok := true; tempq := q ; 1

11. for (i := 1; m) and ok do


12. if (e 9 [tempq; zi ; q0 ] 2 k ) then ok := false
else begin
13. temp[i] := q0 ; tempq := q0
end
14. if ok then begin
15. k := k [ f[q; X; temp[m]]g;
+1 +1

16. P := P [ f[q; X; temp[m]] ! [q ; z ; temp[1]][temp[1]; z ; temp[2]]::: 1 1 2

[temp[m 1]; zm ; temp[m]]g


end
Automate pushdown nedeterministe 114

end ;
17. k := k + 1
18. until k = k ; 1

19. if (9 [q ; z ; q] 2 k ) then begin


0 0

20. k := k [ fS g;
21. for (orice [q ; z ; q] 2 k ) do
0 0

22. P := fS ! [q ; z ; q]g 0 0

end ;
23. V := k ;
Teorema 3.1.3 (corectitudinea Algoritmului (ALG7))
Fie A = (Q; ; ; Æ; q ; z ; ;) un automat pushdown, care este intrare pentru Algo-
0 0

ritmul (ALG7). Dupa executia Algoritmului (ALG7), avem:


(i) G este echivalenta cu A (adica L(G) = L (A));
(ii) numarul de iteratii ale Algoritmului (ALG7) este nit (k  jQj2  j j).
Demonstratie Din Algoritmul (ALG7), (pasul 8), se observa imediat ca
1  2  :::  j  j +1  :::  Q   Q:
Dar Q   Q este o multime nita, pe c^and sirul de incluziuni este in nit. Deci,
9 k  1 astfel ^nc^at k = k (presupunem k  1 minimal care satisface aceasta
+1

proprietate).
Prin inductie dupa j; aratam ca k = k j ; 8 j  1: Asta ^nseamna ca k este
+

multimea maximala care contine neterminali accesibili.


Pasul initial: Cazul j = 1 este imediat.
Pasul inductiv: Presupunem ca k = k l ; 8 l  j: Trebuie sa demonstram ca
+

k = k l : Dar k l = k l [ Y; unde Y este multimea neterminalilor de forma


+ +1 + +1 +

[q; X; temp[m]] care se adauga la pasul 15 din Algoritmul (ALG7). Asadar, la pasul
16 al Algoritmului (ALG7), exista o regula
[q; X; temp[m]] ! [q ; z ; temp[1]][temp[1]; z ; temp[2]]:::[temp[m 1]; zm; temp[m]];
1 1 2

unde [q ; z ; temp[1]]; [temp[1]; z ; temp[2]]; :::; [temp[m


1 1 2 1]; zm; temp[m]] 2 k+l :
Dar k l = k ; (din presupunerea inductiva), deci
+

[q ; z ; temp[1]]; [temp[1]; z ; temp[2]]; :::; [temp[m 1]; zm; temp[m]] 2 k :


1 1 2

Astfel k l = k : De asemeni, din pasul inductiv aplicat pentru l = 1; rezulta


+ +1 +1

k = k : Astfel, k l = k : Asadar, rezulta ca k = k j ; 8 j  1:


Deci, k  Q   Q: Aceasta implica ca j k j  jQj j j: Dar, numarul de iteratii
+1 + +1 +
2

ale Algoritmului (ALG7) este mai mic sau egal dec^at j k j: Astfel, obtinem partea (ii).
Pentru demonstrarea partii (i), trebuie sa aratam ca Algoritmul (ALG7) con-
struieste k (multimea neterminalilor acesibili) si P regulile corespunzatoare. Astfel,
va rezulta L(G0 ) = L (A); unde G0 este gramatica din constructia prezentata ^n
Exercitiul 3.1.5. Dar L(G) = L(G0 ); deci L(G) = L (A):
Automate pushdown nedeterministe 115

Ram^ane sa aratam ca Algoritmul (ALG7) construieste corect gramatica cores-
punzatoare G: Pasul 3 este natural (el corespunde pentru = ;). La pasii 4,5,6 0

construim neterminalii accesibili folosind derivari directe:


[q; X; q ] ! a 1 () [q; X; q ] =G) a: 1
+

Deci, obtinem multimea neterminalilor accesibili folosind derivari directe ( k =


k [ fx=x ! x x :::xk ; x ; x ; :::; xk 2 k g).
1 +1

1 2 1 2

Presupunem ca am construit k multimea neterminalilor accesibili si P regulile


corespunzatoare. Sa vedem cum obtinem k : Din pasul 8, avem k = k : Pasul +1 +1

9 corespunde cu o tranzitie pentru automatul pushdown A din starea q; cu a ^n banda


de intrare si A ind primul element din stiva. Acum, cautam ^n k m variabile astfel
^nc^at:
[q ; z ; temp[1]]Æ[temp0[1]; z ; temp[2]]Æ::Æ[temp0[m 1]; zm; temp[m]]=[q0 ; z z :::zm ; ?q]
1 1 2 1 1 2

Punem ?q pentru ca nu este important care stare este pe locul trei. Conform cu
De nitia 3.1.6, obtinem:
temp[2] = temp0[2]; temp[3] = temp0 [3]; :::; temp[m 1] = temp0 [m 1]; q =
0
1

q ; ?q = temp[m]:
Daca 9 k 2 f2; 3; :::; mg astfel ^nc^at temp[k] 6= temp0[k]; atunci rezulta ca trebuie sa
1

gasim o alta variabila pentru a se putea face compunerea. Deci, obtinem pasii 10, 11,
12, 13, 14, 15, 16, 17, 18 din Algoritmul (ALG7). Scopul pasilor 19, 20, 21, 22, 23
este sa introduca un simbol de start ^n multimea de variabile si adaugarea regulilor
corespunzatoare ^n P: Astfel, demonstratia Teoremei 3.1.3 este terminata.
Exercitiul 3.1.6 Fie automatul pushdown din Exemplul 3.1.1. Sa se gaseasca gra-
matica echivalenta folosind Algoritmul (ALG7).
Solutie Obtinem = ;; 0

= f[q ; x; q ]; [q ; x; q ]; [q ; z; q ]g;
P = f[q ; x; q ] ! 1; [q ; x; q ] ! 1; [q ; z; q ] ! g;
1 1 2 2 2 2 0

1 2 2 2 2 0

2= [ f[q ; z; q ]; [q ; x; q ]g;
1 0 0 1 2

P = P [ f[q ; z; q ] ! 0[q ; x; q ][q ; x; q ][q ; x; q ][q ; z; q ];


[q ; z; q ] ! 0[q ; x; q ][q ; x; q ][q ; x; q ][q ; z; q ]g;
0 0 1 2 2 2 2 2 2 0

1 2 1 2 2 2 2 2 2 2

= ; (acum, trecem la pasul 19)


= [ fS g;
3 2

3 3

P = P [ fS ! [q ; z; q ]g: 0 0

Astfel, folosind Algoritmul (ALG7), obtinem o gramatica echivalenta cu 6 reguli si 5


neterminali (^n loc de 168 reguli si 20 neterminali obtinuti prin metoda constructiva).

Observatia 3.1.1 Acest tip de rezolvare a problemei este folosit ^n multe probleme:
eliminarea  regulilor si regulilor de redenumire, determinarea starilor accesibile
dintr-un automat nit (de tip 3). De asemeni, aceasta metoda este folosita ^n
multiple domenii: logica (rezolutie Robinson), baze de date deductive (Datalog),
grafuri (^nchiderea re exiva si tranzitiva a unei relatii). Consideram un operator
T : 2V ! 2V de nit astfel:
Lema de pompare pentru limbaje de tip 2 116

T ( ) = fx=x 2 or x ! x x :::xk ; xi 2 ; i = 1; kg:


1 2

Obtinem:
fq g ! T ( ) ! T (
0 0 1 ) ! :::
jj jj jj
0 1 2

Lema 3.1.1 Fie V ; V 1  V: Daca V  V atunci T (V )  T (V ):


2 1 2 1 2

Ca un corolar, rezulta ; =   ::: Astfel, operatorul T este monoton.


Aplic^and Teorema de punct x a lui Tarski , rezulta ca exista k 2 N astfel ^nc^at
0 1 2

k = k (sau o forma echivalenta: \9 k 2 N; k = astfel ^nc^at T ( ) = ").


+1

Acest se numeste cel mai mic punct x al operatorului T:

3.2 Lema de pompare pentru limbaje de tip 2


^In aceasta sectiune, vom prezenta aplicatii la Lema lui Ogden (sau Teorema
iteratiei), si Lema de pompare pentru limbaje independente de context.
De asemeni, vom prezenta arbori de derivare, notiune folosita ^n Lema lui Ogden.
Lema 3.2.1 (Lema lui Ogden, Teorema de iteratie)
Pentru orice limbaj L indepedent de context, exista o constanta n 2 N (care
depinde numai de L) astfel ca orice cuv^ant w 2 L cu m (m  n) pozitii marcate,
admite o factorizare w = x y z u v cu proprietatile:
(i) y u are cel putin o pozitie marcata;
(ii) y z u are cel mult n pozitii marcate;
(iii) x y i z ui v 2 L; 8 i  0:
Lema 3.2.2 (Lema de pompare pentru limbaje independente de context)
Pentru orice limbaj L indepedent de context, exista o constanta n 2 N (care
depinde numai de L) astfel ca orice cuv^ant w 2 L; jwj  n, admite o factorizare
w = x y z u v cu proprietatile:
(i) jy uj  1;
(ii) jy z uj  n;


(iii) x y i z ui v 2 L; 8 i  0:


! Demonstratia Lemei de pompare rezulta din Lema lui Ogden marc^and toate
simbolurile lui w.
De nitia 3.2.1 Fie G = (VN ; VT ; x ; P ) o gramatica independenta de context. Un
0

arbore de derivare (sau x -arbore) pentru G este un arbore \ordonat de la st^anga


0

la dreapta" A = (V; E ) ^mpreuna cu o functie de etichetare f : V ! VN [ VT [ fg


cu proprietatile:
Lema de pompare pentru limbaje de tip 2 117

1) f (r) = x0 daca r este radacina arborelui;


2) Daca v 2 V are descendenti, atunci f (v ) 2 VN ;
3) Daca f (v ) =  sau f (v ) 2 VT , atunci v nu are descendenti;
4) Daca v are descendentii v1 ; v2 ; :::; vn ^n aceasta ordine (^n acest sens arborele
este ordonat), atunci ^n G exista productia f (v ) ! f (v1 ) f (v2 ) :::; f (vn ):
Astfel, arborii de derivare se asociaza unei derivari. De nitia 3.2.1 privind arborii
de derivare se poate face si algoritmic.
Intrare: x =) w o derivare, w 2 (VN [ VT ) ;
0
G
Iesire: Arborele de derivare asociat.
Metoda: Vom descrie inductiv constructia arborelui de derivare.
Pasul I: Pentru derivarea ^ntr-un pas x ! x x ::: xn avem arborele
0 1 2

x 0

. # &
x x . . . xn
1 2

Mentionam ca etichetele x ; x ; :::; xn apar ^n aceasta ordine.


1 2

j;
Pasul j =) Pasul j + 1: Presupunem ca avem derivarea x0 =) Æj =) Æj +1 :
Presupunem ca Æj = y ::: yk yk yk ::: ym si ca ^n derivarea Æj =) Æj se aplica
1 1 +1 +1
 Æ ^i corespunde arborele de derivare de
regula yk ! r r ::: rt . Daca derivarii x =j;)
1 2 j 0

mai jos
x 0

. # &
y . . yk . . ym
1

 Æ ^i va corespunde arborele de derivare:


atunci derivarii x =j;)0 j +1

x 0

. # &
y . . yk . . ym
. # &
1

r r . . rt 1 2

Se observa ca pentru o derivare exista un unic arbore de derivare, pe c^and reciproc
nu. De exemplu, e gramatica expresiilor aritmetice
G = (fE; T; P g; f+; ; ag; E; fE ! T j E + T; T ! P j T  P; P ! ( E ) j ag):
Derivarile de mai jos (distincte)
E =) E + T =) T + T =) T + P =) T P +P
E =) E + T =) E + P =) T + P =) T  P + P
Lema de pompare pentru limbaje de tip 2 118

corespund la acelasi arbore de derivare:


E
. # &
E + T
# #
T P
. # &
T  P
De nitia 3.2.2 Numarul de ambiguitate (sau gradul de ambiguitate) al unui
cuv^ant w (^n general din VT ) ^ntr-o gramatica G este egal cu numarul de arbori de
derivare distincti cu frontiera etichetata cu w.
De nitia 3.2.3 Un cuv^ant (din (VN [ VT ) ) este neambiguu daca are gradul 1 de
ambiguitate.
De nitia 3.2.4 O gramatica este neambigua daca ecare cuv^ant (din (VN [ VT ) )
este neambiguu.
De nitia 3.2.5 O gramatica are ambiguitate nita daca exista o margine b a
tuturor gradelor de ambiguitate a oricarui cuv^ant (din (VN [ VT ) ) din gramatica.
De nitia 3.2.6 Se numeste derivare st^anga (dreapta) o derivare ^n care, ^n orice
forma propozitionala, se ^nlocuieste cel mai din st^anga (dreapta) neterminal.
Deoarece unui arbore de derivare ^i corespunde o unica derivare st^anga, atunci
putem spune, echivalent, ca o gramatica este neambigua daca pentru orice cuv^ant
w (w 2 (VN [ VT ) ) exista cel mult o derivare st^anga. Evident, o gramatica este
ambigua daca nu este neambigua.
Consideram o gramatica echivalenta cu gramatica expresiilor aritmetice din
Exercitiul 3.9.13 ce are regulile:
 E !E+E
 E !EE
 E ! (E )
 E!a
Pentru a observa ca aceasta gramatica este ambigua, consideram, de exemplu,
cuv^antul E  E + E . Avem doi arbori de derivare cu frontiera etichetata cu E  E + E .
E E
. # & . # &
E + E E  E
. # & . # &
E  E E + E
Lema de pompare pentru limbaje de tip 2 119

Exercitiul 3.2.1 Fie gramatica G = (fx ; x ; x g; fa; bg; x ; fx ! x x ; x !


1 2 3 1 1 2 3 2

x x j b; x ! x x j ag) si cuv^antul w = b a b b a a b a a a b a; ^n care pozitiile


3 1 3 1 2

1; 2; 3; 4; 6; 7; 8; 10; 12 sunt marcate. Presupun^and ca suntem ^n notatiile Lemei lui
Ogden, se cere:
a) C^at se poate alege m ?
b) Sa se precizeze drumul de marcare din demonstratia Lemei lui Ogden;
c) Sa se precizeze o in nitate de cuvinte care apartin lui L(G) asociate drumului
de marcare dedus mai sus.
Solutie
a) Gramatica G are 3 neterminali, deci constanta dependenta de limbaj din
demonstratia Lemei lui Ogden se poate alege n = 2 + 1 = 9. Astfel cuv^antul w 3

trebuie sa aiba cel putin 9 pozitii marcate. Deci, pentru cuv^antul care l-am ales ^n
exercitiul nostru, putem alege m (numarul de pozitii marcate) astfel^nc^at 9  m  12:
b) Pentru a preciza drumul de marcare din demonstratia Lemei lui Ogden, vom con-
sidera derivarea (st^anga)
x =) x x =) x x x =) x x x x =) x x x x x =) b x x x x =)
1 2 3 3 1 3 1 2 1 3 2 3 2 1 3 3 2 1 3

=) b a x x x =) b a b x x =) b a b x x x =) b a b b x x =) b a b b a x =)
2 1 3 1 3 2 3 3 3 3 3

=) b a b b a x x =) b a b b a x x x =) b a b b a x x x x =) b a b b a a x x x =)
1 2 2 3 2 3 1 3 2 1 3 2

=) b a b b a a x x x x =) b a b b a a b x x x =) b a b b a a b a x x =)
2 3 3 2 3 3 2 3 2

=) b a b b a a b a a x =) b a b b a a b a a x x =) b a b b a a b a a a x =)
2 3 1 1

=) b a b b a a b a a a x x =) b a b b a a b a a a b x =) b a b b a a b a a a b a
2 3 3

^In continuare, vom descrie arborele de derivare corespunzator derivarii de mai sus,
pozitiile marcate din w le vom pune ^ntr-un cerc, iar nodurile drumului de marcare
^ntr-un dreptunghi.
Lema de pompare pentru limbaje de tip 2 120

x 1

 j
x
2 x 3

+ R s
x3 x 1 x1 x2

/ N  W U U
x

? ? N ? 
x x x x x x x

? 

1 2 2 3 2 3 3 1

 U ? U

? 
?
x

2 x
?  W
? 
3

?
b b ax 3
x 1 a a x 2 x3

 
b

? ?
a
 a x 2 x3 b a

 
De exemplu, pentru prima derivare directa, s-a aplicat regula x ! x x : Am
b a

1 2 3

ales ca nod marcat pe x deoarece subarborele sau contine mai multe pozitii mar-
3

cate dec^at subarborele de radacina x (subarborele st^ang al lui x contine 4 pozitii


2 1

marcate, pe c^and cel drept 5 pozitii marcate) s.a.m.d. De exemplu, a doua aparitie a
neterminalului x pe drumul de marcare nu determina un punct de rami care deoarece
1

subarborele drept nu are nici o pozitie marcata. Deci, pentru arborele de radacina x 1

sunt m pozitii marcate, pentru subarborele de radacina x sunt cel putin m pozitii 3

marcate, ..., iar pentru subarborele de radacina x de pe nivelul 6 avem cel putin m5
2

2 2
pozitii marcate. De aceea se alege n un numar exponential ^n raport cu numarul de
neterminali din gramatica G.
c) Pentru a preciza o in nitate de cuvinte din G trebuie sa gasim o factorizare pentru
care au loc conditiile (i) si (ii) din Lema lui Ogden. Alegem ca neterminal (ce se
repeta) pe x si obtinem factorizarea:
2

w = b| a{z a |{z}
b b a} |{z} b |{z}
a a| a{zb a};
x y z u v
deci cuvintele b a b b a a b a a a b a 2 L(G);
i i 8 i  0:
Exercitiul 3.2.2 Folosind Lema de pompare (pentru limbaje independente de con-
text), aratati ca limbajul L = fan bn cj = n  j  2n; n  0g nu este de tip 2:
Solutie Ca observatie, limbajul L este de tip 1 (cel putin) deoarece este generat
de gramatica din Exercitiul 1.3.25.
Presupunem acum, prin reducere la absurd, ca limbajul L este de tip 2. ^In con-
formitate cu Lema de pompare, consideram constanta n dependenta de limbajul L:
Lema de pompare pentru limbaje de tip 2 121

Fie w = an bn cj ; unde j 2 fn; n + 1; :::; 2ng: Este clar ca jwj  3n > n; deci exista
factorizarea w = x y z u v ce veri ca conditiile (i), (ii), (iii).
Mai ^nt^ai, sa observam ca y; u au un singur tip de simbol ^n componenta, altfel,
daca, de exemplu y contine si a si b; din conditia (iii) scrisa pentru i = 2, rezulta
ca exista ^n L cuvinte ^n care simbolul a apare dupa b, contradictie. Asadar, vom
distinge doar cazurile:
Cazul I: y = al ; u = am si din conditia (i) din Lema de pompare, rezulta
l + m > 0.
w = a| a{z::: a} a| a{z::: a} a| a{z::: a} a| a{z::: a} a| a ::: a b b{z::: b c c ::: }c :
x y=al z u=am v
Alegem ^n conditia (iii) i = 0 si obtinem w0 = an l m bn cj 2 L: Dar n l m 6=
n deci w0 2= L contradictie;
Cazul II: y = al ; u = bm , deci
w = a| a{z::: a} a| a{z::: a} a| a ::: a{zb b ::: }b b| b{z::: }b b| b ::: b{zc c ::: }c :
x y=al z u=bm v
6 l. Alegem i = 0 ^n conditia (iii) si obtinem ca w0 =
Subcazul II.1. m =
an l bn m cj 2 L, ceea ce reprezinta o contradictie deoarece n l 6= n m:
Subcazul II.2. m = l. Din (i) este clar ca m + l > 0 deci m = l > 0.
Folosind (iii) rezulta wi0 = an i l bn i l cj 2 L (^nteleg^and ca wi0
+( 1) +( 1)

sunt indexate dupa i). Alegem i = [ nl ] + 2: deci (i 1)  l > n, de unde


n + (i 1)l > 2n  j; adica wi0 2= L contradictie.
Cazul III: y = al ; u = cm , deci
w = a| a{z::: a} a| a{z::: a} a| a ::: a b b{z::: b c c ::: }c c| c{z::: }c c| c{z::: }c :
x y=al z u=bm v
Subcazul III.1. l = 0; deci m 6= 0 (din (i)). Folosind conditia (iii) rezulta
wi0 = an bn cj i m 2 L. Alegem i = n + 2 deci j + (i 1)m  n + (n +
+( 1)

1)m  n + n + 1 > 2n deci wn0 2= L; contradictie.+2

Subcazul III.2. l 6= 0. Lu^and ^n (iii) i = 0 rezulta ca w0 = an l bn cj 2 L;


ceea ce este o falsitate deoarece n l 6= n:
Cazul IV: y = bl ; u = bm analog cu cazul I.
Cazul V: y = bl ; u = cm analog cu cazul III.
Cazul VI: y = cl ; u = cm analog cu cazul I.


^In concluzie, deoarece toate cazurile posibile conduc la o eroare, rezulta ca limbajul
L nu este independent de context.


! Rezolvati Exercitiul 3.2.2 folosind Lema lui Ogden marc^and pozitiile simbolurilor
a. Este mai simpla solutia ?
Lema de pompare pentru limbaje de tip 2 122

Exercitiul 3.2.3 Clasa L nu este ^nchisa la intersectie (adica exista limbajele


2

L ; L de tip 2 pentru care L \ L nu este de tip 2).


1 2 1 2

Solutie Consideram limbajele din Exercitiile 1.3.6 si 1.3.7. Acestea sunt L = 1

fan bm cn = m; n  1g si L = fan bm cm = m; n  1g: Se vede imediat ca L =


2

L \ L = fan bn cn = n  1g: Dar, din Exercitiul 3.2.2, aleg^and j = n, (sau, direct,


Exercitiul 3.9.6), rezulta ca L nu este de tip 2. Deci, clasa L nu este ^nchisa la
1 2

intersectie.
Exercitiul 3.2.4 Folosind Lema lui Ogden, sa se arate ca limbajul L = fai bj ck = i; j; k
 0; i 6= j 6= k 6= ig nu este de tip 2.
Solutie Ca observatie, limbajul L este de tip 1 (cel putin) deoarece este generat
de gramatica din Exercitiul 1.3.27.
Presupunem, prin reducere la absurd, ca limbajul L este de tip 2. Vom considera
cuv^antul w = an bn n cn n ^n care sunt marcate pozitiile simbolurilor a: Din Lema
+ ! +2 !

lui Ogden, rezulta factorizarea w = x y z u v. Analog cu cele discutate ^n solutia


Exercitiului 3.2.2, deducem ca y si u nu pot avea mai mult de un simbol, ^n caz
contrar, pentru i = 2, s-ar \amesteca" simbolurile.
Deoarece am marcat doar simbolurile a, rezulta, din conditia (i) ca cel putin unul
dintre cuvintele y si u contine simbolul a. Cum y apare ^naintea lui u; rezulta ca vom
distinge cazurile:
Cazul I: y = ak1 ; u = ak2 cu k1 + k2 > 0: Notam k1 + k2 = p: Din (i) si (ii),
rezulta ca 1  p  n: Atunci p=n!, adica n! = p  q; q 2 N: Aleg^and ^n (iii) i =
q + 1, obtinem x yi z ui v = an p api bn n cn n = an p ap q bn n cn n = + ! +2 ! ( +1) + ! +2 !

an n bn n cn n 2= L; deoarece simbolul a apare de acelasi numar de ori cu


+ ! + ! +2 !

simbolul b: Contradictie cu (iii).


Cazul II: y = ak1 ; u = bk2 ; n  k  1 (din (i) si (ii)) si k  0: Din 1 
k  n rezulta k =n! adica n! = k  q: Alegem i = 2q + 1 deci x yi z ui v =
1 2

an k1 ak1  q bn n k2 bk2 q cn n = an k1 q


1 1 1
(2 +1) + ! (2 +1) +2 ! +2

bn n k2 q cn n = an n bn n k2 q cn n 2= L deoarece simbolul a apare


+ !+2 +2 ! +2 ! + !+2 +2 !

de acelasi numar de ori ca simbolul c: Deci, contradictie cu (iii).


 0: Din (i) si (ii), rezulta 1  k  n deci k =n!
Cazul III: y = ak1 ; u = ck2 ; k2 1 1

adica n! = k  q: Alegem i = q + 1 si demonstratia decurge ca ^n cazul I.


1

Exercitiul 3.2.5 Sa se arate ca limbajul L = fa = n  0g nu este de tip 2:


n
10

Solutie Ca observatie, limbajul L este de tip 1 (cel putin) deoarece este generat
de gramatica din Exercitiul 1.3.30, aleg^and k = 10.
Presupunem ca limbajul L este de tip 2. ^In conformitate cu Lema de pompare,
consideram constanta n dependenta de limbajul L. Fie cuv^antul w = a , deci este
n
10
Lema de pompare pentru limbaje de tip 2 123

clar ca jwj > n: Din Lema de pompare, rezulta ca exista factorizarea w = x y z u v.
Deci y = ak1 ; u = ak2 : Din conditiile (i) si (ii) ale Lemei de pompare rezulta ca
1  k + k  n: Conditia (iii) va deveni:
1 2

x yi z ui v = a k1 k2 k1 i k2 i = a k1 k2 i :
n n
10 + + 10 +( + )( 1)

Trebuie sa aratam ca 9 i  0 astfel ^nc^at 10n + (k + k )(i 1) nu poate scris sub
1 2

forma 10m:
Cazul I: 10 nu divide k1 + k2 : Consideram i = 0, deci 10n (k + k ) nu are
1 2

ultima cifra 0; deci 10 nu divide 10n (k + k ):


1 2

Cazul II: 10=(k1 +k2 ). Fie k1 +k2 = 10k p; k  1 maximal cu aceasta proprietate
(adica 10 nu divide p). Dar k + k  n deci 10k  p  n de unde k < n; p  1:
1 2

Acum presupunem ca exista m 2 N astfel ^nc^at 10n + (k + k )(i 1) = 10m:


1 2

Este clar ca m > n (aleg^and i  2). ^Inlocuind, obtinem


10n + 10k  p  (i 1) = 10m
sau echivalent
10n k + p  (i 1) = 10m k
de unde
p  (i 1) = 10m k 10n k
^Insa k < n si m > n deci 10=(10m k 10n k ); de unde rezulta ca 10=p(i 1):
^Insa, daca alegem i 6= 10t + 1; cum 10 nu divide p, rezulta ca 10 nu divide
p(i 1); deci am obtinut o contradictie.


^In concluzie, nu este posibila nici o factorizare ca cea din Lema de pompare, deci
limbajul L nu este de tip 2:


! Exista un rezultat [7, 8] care spune ca \Daca L 2 L ; L  fag atunci 2

L 2 L ". Astfel, se putea aplica acest rezultat pentru exercitiul precedent, si ^n loc
3

de Lema de pompare pentru limbaje de tip 2, am aplicat Lema Bar-Hillel pentru


limbaje de tip 3. Demonstratia ar decurs exact la fel ca mai sus. Deosebirea ar
fost ca ^n loc de k1 + k2 am avut k:


!
1.2.5.
Limbajul L din exercitiul precedent este generat de gramatica din Exercitiul

2
Exercitiul 3.2.6 Sa se arate ca limbajul L = fan = n  0g nu este de tip 2:
Solutie Presupunem ca limbajul L este de tip 2. ^In conformitate cu Lema de 2
pompare, consideram constanta n dependenta de limbajul L. Fie cuv^antul w = an ,
deci este clar ca jwj > n: Din Lema de pompare, rezulta ca exista factorizarea w =
Forma normala Chomsky 124

x y z u v. Deci y = ak1 ; u = ak2 ; si facem notatia k = k + k : Din conditiile (i) si (ii)
1 2

ale Lemei de pompare 1  k  n: Conditia (iii) va deveni:


2 +(i k ;
x yi z ui v = an 1)
8 i  1:
Sa aratam ca, de exemplu, pentru i = 2, expresia n + k nu poate patrat perfect.
2

Este clar ca n < n + 1  n + k < n + n < n + 2n + 1 = (n + 1) , de


2 2 2 2 2 2


unde rezulta imediat ca n + k nu poate patrat perfect ( ind situat ^ntre 2 patrate
2

perfecte consecutive), deci L 2= L :


2

! Limbajul L din exercitiul precedent este de tip 1 deoarece este generat de gra-
matica din Exercitiul 1.2.6. La fel ca si Exercitiul 3.2.5, demonstratia se putea face
aplic^and Lema Bar-Hillel pentru limbaje de tip 3:

3.3 Forma normala Chomsky


De nitia 3.3.1 O gramatica de tip 2 este ^n forma normala Chomsky daca re-
gulile sale sunt de forma x ! y z; x ! a; cu x; y 2 VN si a 2 VT :
Mai ^nt^ai, trebuie sa eliminam  regulile si regulile de redenumire din gramatica
G: Acest algoritm a fost descris ^n cadrul Exercitiului 2.6.2. Acum sa presupunem ca
avem regula
(1) x ! y y ::: yk 1 2

^In ideea de a o aduce la forma normala Chomsky, distingem cazurile:


 k = 0 - nu se poate deoarece G nu are  reguli;
 k = 1 - situatia y 2 VN nu se poate deoarece G nu are reguli de redenumire; deci
ram^ane situatia yi 2 VT caz ^n care regula este sub forma normala Chomsky;
1

 k  2 - daca exista i = 1; k astfel ^nc^at yi 2 VT atunci consideram neterminalul


asociat (unul nou, daca acesta nu exista deja), sa zicem zi si adaugam (daca
nu exista) regula zi ! yi , iar ^n regula (1), ^nlocuim pe yi cu zi . Astfel, regula
generala (1) devine acum:
x ! A A ::: Ak ; k  2; x 2 VN ; Ai 2 VN ;
1 2 8 i = 1; k:
Daca k > 2, atunci aceasta regula se ^nlocuieste acum cu:
x!A B ; B 1 1 1 ! A B ; :::; Bk ! Ak Ak ;
2 2 2 1

unde B ; B ; :::; Bk
1 2 2 sunt neterminali noi (distincti).
Algoritmul (ALG8):
Forma normala Chomsky 125

Intrare: Gramatica G = (VN ; VT ; x ; P ) de tip 2, fara -reguli si redenumiri;


Iesire: Gramatica G0 = (VN0 ; VT ; x ; P 0 ) de tip 2, echivalenta ^n forma normala Chom-
0

sky.
Metoda:
Mai ^nt^ai, consideram o functie h : VN [ VT ! VN data prin:

h(yi ) = zyi yyi 2 VT (zi neterminal nou)
i i 2 VN
Extindem h la cuvinte din (VN [ VT ) astfel:

h() = 
h(x x ::: xk ) = h(x ) h(x ) ::: h(xk )
1 2 1 2

Cu aceasta notatie, urmatorul pseudocod descrie Algoritmul (ALG8):


begin
VN0 = VN ;
P 0 := P ;
l := 0;
for (8 a 2 VT ) do marcat(a):=false;
for (8 x ! y y ::: yk 2 P; k  2) do begin
1 2

if (yi 2 VT ) then
if not(marcat(yi )) then begin
l := l + 1;
VN0 := VN [ fzl g;
h(yi ) := zl ;
marcat(yi ) := true;
P 0 := P 0 [ fzl ! yi g
end ;
P 0 := P 0 fx ! y y ::: yk g [ fx ! h(y ) h(y ) ::: h(yk )g;
1 2 1 2

end ;
for (8 x ! y y ::: yk 2 P 0 ; k > 2) do begin
1 2

l := l + 1;
VN := VN [ fzl g;
P 0 := P 0 fx ! y y ::: yk g [ fx ! y zl g;
1 2 1

for i := 1 to k 2 do begin
l := l + 1;
VN0 := VN0 [ fzl g;
P 0 := P 0 [ fzl ! yi zl g;
1

end ;
l := l + 1;
VN0 := VN0 [ fzl g;
P 0 := P 0 [ fzl ! yk yk g;
1

end ;
end .
Forma normala Chomsky 126

Este clar ca Algoritmul (ALG8) are un numar nit de pasi. Corectitudinea algorit-
mului este asigurata de cele discutate mai sus.
Exercitiul 3.3.1 Fie gramatica G = (fS; A; B g; fa; bg; S; P ) cu regulile P :
1. S ! b A 2. S ! a B 3. A ! b A A 4. A ! a S
5. A ! a 6. B ! a B B 7. B ! b S 8. B ! b
Folosind procedeul de mai sus, sa se gaseasca o gramatica G0 de tip 2 sub forma
normala Chomsky echivalenta cu G:
Solutie Observam ca gramatica G nu contine  reguli si nici redenumiri. Astfel,
consideram neterminalii C si D pentru simbolurile a si b: Astfel, din procedeul de mai
sus, regulile gramaticii devin:
1. S ! D A 2. S ! C B 3. A ! D A A 4. A ! C S
5. A ! a 6. B ! C B B 7. B ! D S 8. B ! b
9. C ! a 10. D ! b
Se observa acum ca singurele reguli care nu sunt ^n forma normala Chomsky sunt 3
si 6. ^In locul regulii 3 vom scrie:
 A ! DE
 E ! A A,
iar ^n locul regulii 6:
 B !CF
 F ! B B.
^In concluzie, gramatica ^n forma normala Chomsky, echivalenta cu G; este G0 =
(fS; A; B; C; D; E; F g; fa; bg; S; P 0) cu regulile P 0 :
1. S ! D A 2. S ! C B 3. A ! D E 4. E ! A A
5. A ! C S 6. A ! a 7. B ! C F 8. F ! B B
9. B ! D S 10. B ! b 11. C ! a 12. D ! b
Exercitiul 3.3.2 Fie gramatica G = (VN ; VT ; x0 ; P ) de tip 2 care nu are  reguli
si nici redenumiri. Sa se deduca marginile superioare ale numarului de neterminali,
respectiv de reguli pentru gramatica sub forma normala Chomsky, echivalenta cu G;
folosind procedeul de mai sus.
Solutie Fie G0 = (VN0 ; VT ; x ; P 0 ) gramatica echivalenta sub forma normala Chom-
0

sky. Putem deduce care este numarul exact de neterminali, respectiv de reguli, pentru
gramatica G0 . Avem
X
jVN0 j = jVN j + jfx= x 2 VT ; 9 y ! r 2 P; jrj  2; x 2 rgj + (jrj 2);
x!r; jrj>2
Forma normala Greibach 127

unde jrj reprezinta numarul de simboluri din r. Numarul de reguli este


X
jP 0 j = jP j + jfx= x 2 VT ; 9 y ! r 2 P; jrj  2; x 2 rgj + (jrj 1):
x!r; jrj>
2

Putem preciza o estimare superioara mai simpla:


X
jVN0 j  jVN j + jVT j + (jrj 2):
x!r; jrj> 2

^In ceea ce priveste P 0 avem estimarea superioara:


X
jP 0 j  jP j + jVT j + (jrj 1):
x!r; jrj>2


Aceste estimari superioare mai simple devin egalitate daca pentru ecare terminal
exista o regula care-l contine ^n partea dreapta.

! Pentru gramatica din Exercitiul 3.3.1 are loc egalitatea. In ^ general, egalitatea
are loc daca si numai daca pentru orice regula de forma A ! a; a 2 VT , exista
cel putin o regula A ! ; 6= a: De altfel, algoritmul de transformare a regulilor
^n forma normala Chomsky, se poate ^mbunatati prin aceea ca daca exista o singura
regula cu A ^n partea dreapta, atunci nu mai este nevoie sa consideram un neterminal
nou B , si respectiv o regula noua B ! a.

Unde se foloseste forma normala Chomsky ?


 ^n demonstratia Lemei lui Ogden;
 la problema (P3) (si anume daca un limbaj generat de o gramatica de tip 2 este
nit sau nu);
 la problema apartenentei la clasa L2 folosind Algoritmul CYK (despre care o sa
discutam ^n Sectiunea 3.7);
 la obtinerea formei normale operator.

3.4 Forma normala Greibach


De nitia 3.4.1 O gramatica G este ^n forma normala Greibach daca regulile sale
sunt de forma x ! a ; x 2 VN ; a 2 VT ; 2 V  sau x ! , caz ^n care x nu mai
0 0

apare ^n partea dreapta a vreunei reguli.


O gramatica se spune ca este ^n forma m-standard daca lungimea lui este mai
mica sau egala dec^at m:
Pentru a ^ntelege algoritmul de constructie a unei gramatici ^n forma Greibach
echivalenta cu o gramatica oarecare (de tip 2), sa ^ncercam sa prezentam ideile ce
stau la baza sa:
Forma normala Greibach 128

I. e x ! r o regula arbitrara;
I.1. daca r = a ; a 2 VT atunci regula este ^n forma Greibach;
I.2. altfel r = y ; y 2 VN atunci putem elimina din G regula x ! r si sa
o ^nlocuim cu x ! j j ::: j n unde y ! j j::: j n sunt toate
1 2 1 2

regulile cu y ^n partea st^anga.


II. pentru aceste reguli noi introduse procedam la fel.
Dar c^and ne oprim ? Daca intervin circuite, ^nseamna ca avem un numar in nit
de pasi, deci nu este un algoritm cu un numar nit de pasi. Apare deci necesitatea
eliminarii recursiei st^angi pe care o vom transforma ^n recursie dreapta.
De nitia 3.4.2 Neterminalul x se numeste st^ang recursiv daca si numai daca
x =) x a:
+

Eliminarea recursiei st^angi se face astfel:


 se numeroteaza neterminalii, sa zicem VN = fx ; x ; :::; xn g;
1 2

 pornind de la regulile cu x ^n partea st^anga p^ana la xn se aplica procedeul de


1

mai sus (I.2.); astfel, vom reduce recursia st^anga cu mai multi pasi ^n recursie
st^anga cu un singur pas, adica la o regula de forma x ! x ;
 eliminarea recursiei st^angi cu un singur pas; astfel, e (i) x ! x j a j ::: j x n
1 2

regulile st^ang recursive si (ii) x ! j j ::: j m celelalte reguli cu x ^n partea
1 2

st^anga. Se scot regulile (i) si se introduc regulile (i) x ! y j y j ::: j bm y si
x ! y j y j ::: j an y j j j ::: j n :
1 2

1 2 1 2

Algoritmul (ALG9):
Intrare: Gramatica G = (VN ; VT ; x ; P ) de tip 2, VN = fx ; :::; xn g, fara  reguli;
Iesire: Gramatica G0 = (VN0 ; VT ; x ; P 0 ) de tip 2 echivalenta cu G ^n care regulile au
0 0

forma:
 x ! a ; a 2 VT ;
 xi ! xj ; 2 V ; j > i;
+

 yi ! ; 2 V : +

Metoda:
begin
1: VN0 := VN ;
2: P 0 := P ;
3. for k := 0 to n do begin
4. for j := 0 to k 1 do
5. while (9 ; xk ! xj 2 P 0 ) do
6. P 0 := P 0 fxk ! xj g [ fxk ! = xj ! 2 P 0 g;
Forma normala Greibach 129

7. while (9 ; xk ! xk 2 P 0 ) do begin
8. VN0 := VN0 [ fyk g;
9. P 0 := P 0 fxk ! xk g [ fyk ! ; yk ! yk g;
10. while (9 ; xk ! 2 P 0 ; 6= xk ; xk ! nemarcata) do begin
(1)

11. P 0 := P 0 [ fxk ! yk g;
12. marcheaza xk !
end
end
end
end ;
Observatia 3.4.1 O constructie echivalenta ar , ^n locul pasilor 9-12:
9. P 0 := P 0 fxk ! xk ; xk ! g [ fxk ! yk ; yk ! ; yk ! yk g;
Avantajul acestei constructii este ca gramatica obtinuta are sanse sa e LL(1)
(vezi gramatica expresiilor aritmetice de la pagina 131).

P^ana ^n prezent, am eliminat recursia st^anga, deci algoritmul precedent are un
numar nit de pasi. Chiar si dupa eliminarea recursiei st^angi, s-ar putea ca unele
reguli sa nu e de forma x ! a ; a 2 VT : Oricum, regulile corespunzatoare lui xn
sunt de forma xn ! a ; a 2 VT : Atunci, continuam ^n felul urmator:
 parcurgem ^n sens invers (de la regulile cu xn ^n partea st^anga p^ana la x ) si
1 1

aplicam procedeul I.2 de mai sus; acum putem spune ca toate regulile cu xk ^n
partea st^anga sunt de forma xk ! a ; a 2 VT :
 ce facem cu regulile cu y ^n partea st^anga care ^ncep cu un neterminal; aplicam
iar procedeul I.2; acest lucru este posibil deoarece regulile de forma y ! i y j i
nu sunt st^ang recursive (primul simbol din i ind un neterminal de forma xj ).
Algoritmul (ALG10):
Intrare: G0 = (VN0 ; VT ; x ; P 0 ) gramatica obtinuta la iesirea Algoritmului (ALG9);
Iesire: G = (VN0 ; VT ; x ; P ) o gramatica echivalenta cu G0 ^n forma normala
0

1 0 1

Greibach.
Metoda:
begin
1. P := P 0 ;
1

2. i := n;
3. while i > 0 do begin
4. i := i 1;
5. while (9 j; i < j  n; xi ! xj 2 P ) do
6. P := P fxi ! xj g [ fxi ! = xj ! 2 P g
1

1 1 1

end ;
7. for i := 0 to n do
8. while (9 j; 0  j  n; yi ! xj 2 P ) do
1

9. P := P fyi ! xj g [ fyi ! = xj ! 2 P g
1 1 1

end .
Forma normala Greibach 130

Exercitiul 3.4.1 Fie gramatica G = (fx ; x ; x g; fa; bg; x ; P ) cu regulile P : 1 2 3 1

1. x1 ! x2 x3
2. x2 ! x3 x1 j b
3. x3 ! x1 x2 j a
Folosind algoritmul de mai sus, sa se determine o gramatica echivalenta cu G care
este ^n forma normala Greibach.
Solutie Observam ca neterminalii sunt deja numerotati. Aplicam pasii 4,5,6 din
Algoritmul (ALG9) (eliminarea recursiei st^angi). Singura regula de forma xi ! xj
cu j < i este x ! x x : Eliminam aceasta regula adaug^and regula:
3 1 2

x3 !x x x 2 3 2

Aceasta este tot de forma xi ! xj cu j < i deci eliminam aceasta regula si intro-
ducem:
x ! x x x x jbx x 3 3 1 3 2 3 2

Acum aplicam pasii 7,8,9,10,11,12 din Algoritmul (ALG9) elimin^and recursia st^anga
^ntr-un pas (reguli de forma xi ! xi ). Eliminam regula x ! x x x x si adaugam 3 3 1 3 2

regulile:
x ! bx x y jay 3 3 2 3 3

y ! x x x y jx x x 3 1 3 2 3 1 3 2

Deci, p^ana ^n prezent, regulile gramaticii sunt:


1. x 1 !x x2 3

2. x ! x x jb
2 3 1

3. x ! bx x y jay jbx x ja
3 3 2 3 3 3 2

4. y ! x x x y jx x x
3 1 3 2 3 1 3 2

Acum aplicam pasii 3,4,5,6 din Algoritmul (ALG10) si deci regula 2.a) se sterge
si se ^nlocuieste cu:
x 2 ! bx x y x jay x jbx x x jax jb
3 2 3 1 3 1 3 2 1 1

Regula 1.a) se sterge si se ^nlocuieste cu:


x1 ! bx x y x x jay x x jbx x x x jax x jbx
3 2 3 1 3 3 1 3 3 2 1 3 1 3 3

Pasii 7,8,9 din Algoritmul (ALG10) ne permit ^nlocuirea regulilor de tipul yk ! :


Obtinem:
Forma normala Greibach 131

y 3 ! bx x y x x x x y jay x x x x y jbx x x x x x y j
3 2 3 1 3 3 2 3 3 1 3 3 2 3 3 2 1 3 3 2 3

ax x x x y jbx x x y jbx x y x x x x jay x x x x j


1 3 3 2 3 3 3 2 3 3 2 3 1 3 3 2 3 1 3 3 2

bx x x x x x jax x x x jbx x x
3 2 1 3 3 2 1 3 3 2 3 3 2

^In concluzie, regulile gramaticii echivalente ^n forma normala Greibach sunt:
x
1 ! bx x y x x jay x x jbx x x x jax x jbx
3 2 3 1 3 3 1 3 3 2 1 3 1 3 3

x !
2 bx x y x jay x jbx x x jax jb
3 2 3 1 3 1 3 2 1 1

x !
3 bx x y jay jbx x ja
3 2 3 3 3 2

y ! 3 bx x y x x x x y jay x x x x y jbx x x x x x y j
3 2 3 1 3 3 2 3 3 1 3 3 2 3 3 2 1 3 3 2 3

ax x x x y jbx x x y jbx x y x x x x jay x x x x


1 3 3 2 3 3 3 2 3 3 2 3 1 3 3 2 3 1 3 3 2 j
bx x x x x x jax x x x jbx x x
3 2 1 3 3 2 1 3 3 2 3 3 2

Deci se observa, ca plec^and de la o gramatica cu 3 neterminali si 5 reguli, am obtinut


o gramatica echivalenta ^n forma normala Greibach care are 4 neterminali si 24 reguli.

Unde se foloseste forma normala Greibach ?


 ^In primul r^and aducerea la forma normala Greibach implica un procedeu de
eliminare a recursiei st^angi. Astfel sunt sanse ca gramatica echivalenta obtinuta
sa e LL(1) (o clasa de gramatici pentru care problema apartenentei se poate
rezolva cu algoritm liniar, [1, 7]). Drept exemplu, putem mentiona gramatica
expresiilor aritmetice (Exercitiul 1.3.12). Aceasta se transforma ^n gramatica
echivalenta G0 = (fE; E 0 ; T; T 0 ; F g; f+; ; (; ); ag; E; P ) cu regulile P :
{ E ! T E0/
{ E0 ! + T E0
{ E0 ! 
{ T ! F T0
{ T0 ! F T0
{ T0 ! 
{ F ! (E )
{ F !a
 Forma simpla a gramaticilor ^n forma normala Greibach, aceea ca regulile ^ncep
cu terminal, permite un calcul rapid al \lookahead"-urilor ce se folosesc ^n teoria
si constructia compilatoarelor [1, 7].
Forma normala operator 132

3.5 Forma normala operator


De nitia 3.5.1 Spunem ca o gramatica este ^n forma normala operator daca
regulile sale nu contin doua simboluri neterminale consecutive. Formal, not^and G =
(VN ; VT ; x0 ; P ), atunci trebuie sa avem P  VN  (V  V  VN2 V  ).
Constructia efectiva se face astfel (constructia unei gramatici echivalente cu G,
dar ^n forma normala operator):
 aducem gramatica G ^n forma normala Chomsky, cu alte cuvinte determinam o
gramatica echivalenta G0 = (VN  VT ; VT ; x0 ; P 0 ) ^n care regulile P 0 au forma:
0

{ x ! y z; x; y; z 2 VN ;
{ x ! a; x 2 VN ; a 2 VT :
 regulile de tipul x ! a devin (x; a) ! ;
 regulile de tipul x ! y z devin (x; a) ! (y; b) b (z; a);
 adaugam un nou simbol de start x0 si regulile x0 ! (x ; a) a;
0 0 0 8 a 2 VT :
Algoritmul (ALG11):
Intrare: G = (VN ; VT ; x ; P ) o gramatica de tip 2 ^n forma normala Chomsky;
Iesire: G0 = (VN0 ; VT ; x0 ; P 0 ) o gramatica de tip 2 echivalenta cu G ^n forma normala
0

operator;
Metoda:
begin
VN0 := fx0 g [ VN  VT ;
P 0 := ;;
0

for (8 a 2 VT ) do
P 0 := P 0 [ fx0 ! (x ; a) ag;
for (8 x ! a 2 P ) do
0 0

P 0 := P 0 [ f(x; a) ! g;
for (8 x ! y z 2 P ) do
for (8 a; b 2 VT ) do
P 0 := P 0 [ f(x; a) ! (y; b) b (z; a)g;
end .
Exercitiul 3.5.1 Fie gramatica (din Exercitiul 3.4.1)
G = (fx ; x ; x g; fa; bg; x ; P );
1 2 3 1

cu regulile P :
1. x1 ! x2 x3
2. x2 ! x3 x1 j b
Forma normala operator 133

3. x3 ! x1 x2 j a
Folosind algoritmul de mai sus, sa se determine o gramatica echivalenta cu G care
este ^n forma normala operator.
Solutie Spre deosebire de constructia de la forma normala Greibach, aceasta
constructie este mai usoara. ^In plus, gramatica G de la care plecam este deja ^n
forma normala Chomsky. Astfel, gramatica G0 = (fx g [ VN  VT ; VT ; x ; P ) va avea
0 0

regulile P :
 scriem mai ^nt^ai regulile de start: x 0 ! (x ; a) a si x ! (x ; b) b;
1 0 1

 pentru regulile de tip x ! a adaugam ^n G0 evident regulile: (x ; b) 2 !


; (x ; a) ! ;
3

 pentru regulile de tip x ! y z avem evident situatiile:


{ pentru regula x ! x x adaugam ^n G0 regulile:
1 2 3


(x ; a) ! (x ; a) a (x ; a)
1 2 3


(x ; a) ! (x ; b) b (x ; a)
1 2 3


(x ; b) ! (x ; a) a (x ; b)
1 2 3


(x ; b) ! (x ; b) b (x ; b)
1 2 3

{ pentru regula x ! x x adaugam ^n G0 regulile:


2 3 1

 (x ; a) ! (x ; a) a (x ; a)
2 3 1

 (x ; a) ! (x ; b) b (x ; a)
2 3 1

 (x ; b) ! (x ; a) a (x ; b)
2 3 1

 (x ; b) ! (x ; b) b (x ; b)
2 3 1

{ pentru regula x ! x x adaugam ^n G0 regulile:


3 1 2

 (x ; a) ! (x ; a) a (x ; a)
3 1 2

 (x ; a) ! (x ; b) b (x ; a)
3 1 2

 (x ; b) ! (x ; a) a (x ; b)
3 1 2

 (x ; b) ! (x ; b) b (x ; b)
3 1 2

Bine^nteles, neterminalii de tip pereche (VN  VT ) se pot redenumi, dar acest lucru
distruge lizibilitatea gramaticii G0 .
Exercitiul 3.5.2 Sa se estimeze numarul maxim de neterminali si reguli din algo-
ritmul precedent.
Solutie Se vede imediat ca gramatica rezultata din Algoritmul (ALG11) are jVN0 j =
jVN jjVT j +1; iar numarul de reguli jP 0 j = jVT j + jfA ! a= A ! a 2 P gj + jVT j jfA !
2

B C= A ! B C 2 P gj. Aceste margini superioare se ating numai daca gramatica G0


este redusa.

Unde se folosesc gramaticile ^n forma normala operator ?


Forma normala operator 134

 gramatica expresiilor aritmetice (Exercitiul 1.3.12) este un exemplu important


de gramatica ^n forma operator;
 exista o subclasa de gramatici de precedenta (folosite ^n teoria si constructia
compilatoarelor) ^n care se aplica preponderent cele ^n forma operator [1, 7].

3.5.1 Un algoritm e cient pentru conversia dintre o gramatica


^n forma normala Chomsky si o gramatica ^n forma nor-
mala operator
^In aceasta subsectiune, vom prezenta un algoritm e cient pentru conversia dintre o
gramatica ^n forma normala Chomsky ^n forma normala operator. Acest algoritm
este asemanator cu cel din subsectiunea 3.1.1 ^n sensul ca gramatica echivalenta de la
iesire are numai neterminali accesibili.
Exemplul 3.5.1 Fie gramatica din Exercitiul 3.9.21 data astfel:
G = (fx ; x ; x ; x g; fa; bg; x ; fx
0 1 2 3 ! x x jx x ; x ! x x ; x ! a; x ! bg)
0 0 2 1 2 3 1 0 3 2 3

Evident G este ^n forma normala Chomsky. Se vede imediat ca L(G) = fan bn =n 
1g: Constructia prezentata ^n Sectiunea 2.5 va implica o gramatica echivalenta cu 8
neterminali si 16 reguli.

Vom da un algoritm e cient care va construi direct gramatica redusa.


Algoritmul (ALG12):
Intrare: G = (VN ; VT ; x ; P ) o gramatica ^n forma normala Chomsky;
Iesire: G0 = (VN0 ; VT ; x0 ; P 0 ) o gramatica echivalenta ^n forma normala operator;
0

Metoda:
1. := ;;
0

2. := ;
3. P 0 := ;;
1 0

4. for (orice x ! a 2 P ) do begin


5. := [ f(x; a)g;
6. P 0 := P 0 [ f(x; a) ! g
1 1

end ;
7. k := 1;
repeat
8. k := k ;
+1

9. if (9 x ! yz 2 P ) then begin
10. P 0 := P 0 [ f(x; a) ! (y; b)b(z; a)=(y; b); (z; a) 2 k g
11. k := k [ f(x; a)=(y; b); (z; a) 2 k g
+1 +1

end
12. k := k + 1
Forma normala operator 135

13. until k = k ; 1

14. if (9 (x ; a) 2 k ) then begin


k := k [ fx g;
0

15.
16. P 0 := P 0 [ fx0 ! (x ; a) a= 8 a 2 VT astfel ^nc^at (x ; a) 2 k g
0

0 0 0

end ;
17. VN0 := k ;
Teorema 3.5.1 (corectitudinea si terminarea Algoritmului (ALG12))
Fie G = (VN ; VT ; x ; P ) o gramatica ^n forma normala Chomsky care este intrare
0

pentru Algoritmul (ALG12). Dupa executia Algoritmului (ALG12), avem:


(i) L(G) = L(G0 );
(ii) numarul de iteratii ale Algoritmului (ALG12) este nit (k  jVT j  jVN j).
Demonstratie Analog cu demonstratia Teoremei 3.1.3. Din Algoritmul (ALG12),
(pasul 8), se vede usor ca
1  2  :::  j  j +1  :::  VN  VT :
Dar VN  VT este o multime nita, si sirul de incluziuni este in nit. Deci, 9 k  1
astfel ^nc^at k = k (presupunem k  1 minimal care satisface aceasta proprietate).
Prin inductie dupa j; se demonstreaza ca k = k j ; 8 j  1: Aceasta ^nseamna
+1

ca k este o multime minimala care contine neterminali accesibili.


Pasul initial: Pentru j = 1 imediat.
Pasul inductiv: Analog cu demonstratia Teoremei 3.1.3.
Asadar, numarul de iteratii ale Algoritmului (ALG12) este mai mic sau egal dec^at
j k j: Dar k  VN  VT : Aceasta implica j k j  jVN j  jVT j:
Pentru demonstrarea partii (i) a Teoremei 3.5.1, se poate proceda la fel ca ^n
demonstratia Teoremei 3.1.3.
Exemplul 3.5.2 Continuam cu Exemplul 3.5.1, pentru determinarea gramaticii
echivalente ^n forma normala operator folosind Algoritmul (ALG12):
= ;;
P 0 = ;;
0

= f(x ; a); (x ; b)g;


P 0 = f(x ; a) ! ; (x ; b) ! g;
1 2 3

2 3

= [ f(x ; b)g;
P 0 = P 0 [ f(x ; b) ! (x ; a)a(x ; b)g;
2 1 0

= [ f(x ; b)g;
0 2 3

P 0 = P 0 [ f(x ; b) ! (x ; b)b(x ; b)g;


3 2 1

= [ f(x ; b)g = ; (deoarece (x ; b) 2


1 0 3

)
P 0 = P 0 [ f(x ; b) ! (x ; a)a(x ; b)g;
4 3 0 3 0 2

= [ fx0 g;
0 2 1

P 0 = P 0 [ fx0 ! (x ; b)g:
4 4 0

0 0

Astfel, obtinem o gramatica echivalenta ^n forma operator care are 5 neterminali
(^n loc de 8) si 6 reguli (^n loc de 16). Mentionam ca acestea din paranteze sunt
obtinute cu algoritmul uzual.
Limbaje independente de context deterministe 136

3.6 Limbaje independente de context deterministe


De nitia 3.6.1 Automatul pushdown M = (S; ; ; Æ; s ; z ; F ) se numeste deter-
0 0

minist daca au loc conditiile:


1) jÆ (s; a; z )j  1; 8 (s; a; z ) 2 S  ( [ fg) [ ;

 2) daca Æ (s; ; z ) 6= ; atunci Æ (s; a; z ) = ;; 8 (s; a; z ) 2 S    :


! Uneori conditia 2) se mai scrie:
2') daca 9 (s; a; z ) 2 S    6 ;, atunci Æ(s; ; z ) =
astfel ^nc^at Æ (s; a; z ) = ;
(contrara reciprocei).
De nitia 3.6.2 Un limbaj L este independent de context determinist (sau, pe
scurt, determinist), notatie L 2 L DET ; daca 9 M un automat pushdown determinist
2

astfel ^nc^at L = L(M ):


^In legatura cu aceasta clasa de limbaje (L DET ) se cunosc doua rezultate funda-
2

mentale:
Teorema 3.6.1 Daca L 2 L DET ; R 2 L atunci L \ R 2 L DET :
2 3 2

 =  L 2 L DET :
Teorema 3.6.2 Daca L 2 L DET atunci C L not
2 2


L
!
2
Teorema 3.6.2 subliniaza diferenta dintre clasele de limbaje L2 si L2DET . Clasa
nu este ^nchisa la complementara, spre deosebire de L2DET .
Exercitiul 3.6.1 Sa se arate ca L DET 6= L
2 2 (adica exista un limbaj de tip 2 care
nu este determinist).
Solutie Fie L = f0i 1j 2k = i = j sau j = k sau i = k; i; j; k  0g: Evident L 2 L
deoarece este generat de gramatica G = (fS; A; B; C; D; E; F g; f0; 1; 2g; S; P ) unde P
2

este:
1. S ! A B j C D j E
2. B ! 2 B j 
3. A ! 0 A 1 j 
4. C ! 0 C j 
5. D ! 1 D 2 j 
6. E ! 0 E 2 j F
7. F ! 1F j
Limbaje independente de context deterministe 137

Vom arata ca L 2= L DET prin reducere la absurd. Asadar, presupunem ca
L 2 L DET , deci conform cu Teorema 3.6.2, rezulta ca L =  L 2 L DET :
2

Acum, consideram limbajul R = f0i 1j 2k = i; j; k  0g: Se observa imediat ca R 2 L


2 1 2

(consultati Exercitiile 1.3.4 sau 2.10.4, a) ). Aplic^and acum Teorema 3.6.1 pentru lim-
bajele L si R rezulta ca L = L \ R = f0i 1j 2k = i 6= j 6= k 6= i; i; j; k  0g 2 L DET :
Dar L DET  L ; deci limbajul L 2 L : Dar conform Exercitiului 3.2.4 avem ca
1 2 1 2

2 2 2 2

L 2= L , contradictie.
2 2

Ram^ane deci ca L 2 L L DET :

~
2 2

Prin analogie cu clasa de limbaje L2DET de nim L3DET = fL=9A automat nit
determinist astfel ^nc^at L = L(A)g: Utiliz^and Exercitiul 3.6.1, putem ra na putin
Ierarhia lui Chomsky, obtin^and:
L DET = L  L DET  L  L  L
3 3 2 2 1 0

Exercitiul 3.6.2 Fie L 2 L DET si R 2 L . Sa se arate ca limbajele L [ R; L R


2 3

si R L sunt deterministe.


Solutie Folosind una dintre relatiile lui De Morgan L [ R = C (C L \ C R). Din
Teorema 3.6.2 rezulta ca C L 2 L DET . Apoi, din ^nchiderea la complementara a lui
L , rezulta ca C R 2 L : Folosind acum Teorema 3.6.1, rezulta ca C L \ C R 2 L DET .
2

3 3 2

Aplic^and ^nca o data Teorema 3.6.1, obtinem ca C (C L \ C R) 2 L DET . 2

Analog L R = L \ C R; R L = C L \ R si se procedeaza la fel.


Exercitiul 3.6.3 Sa se arate ca urmatoarele limbaje de tip 2 sunt limbaje determi-
niste:
a) L1 = f0i 1i 2j = i; j  0g;
b) L2 = f0i 1j 2j = i; j  0g;
c) L3 = a L1 [ L2 ; a 2= f0; 1; 2g;
d) L4 = a L1 [ b L2 ; a; b 2= f0; 1; 2g; a 6= b:
Solutie
a) Construim un automat pushdown determinist care accepta L . Fie 1

M = (fs ; s ; s ; s g; f0; 1g; f0; z g; Æ; s ; z ; fs ; s g)


1 0 1 2 3 0 0 0 0 3

unde Æ este dat prin:


1. Æ(s ; 0; z ) = (s ; 0 z );
0 0 1 0

2. Æ(s ; 0; 0) = (s ; 0 0);
1 1

3. Æ(s ; 1; 0) = (s ; );
1 2
Probleme decidabile ^n clasa L2 138

4. Æ(s ; 1; 0) = (s ; );
2 2

5. Æ(s ; 1; z ) = (s ; z );
2 0 3 0

6. Æ(s ; 2; z ) = (s ; z );
0 0 3 0

7. Æ(s; a; z ) = ; ^n rest.


Se observa destul de usor ca L = L(M ) si ca M este determinist.
1 1 1

b) Analog cu automatul de la punctul a).


c) Pentru punctele c) si d) vom demonstra ceva mai general:
Daca L ; L 2 L DET atunci a L [ b L 2 L DET ; a; b 2
1 2 2 = ; a 6= b; b poate si :
1 2 2

 Cazul I: b = . Fie Mi = (Si ; ; ; Æi ; s ; z ; Fi ); i = 1; 2 astfel ^nc^at 01 01

Li = L(Mi ); S \ S = ;: De nim M = (S [ S [ fs g;  [ fag; [ [


fz g; Æ; s ; z ; F [ F ), unde Æ este de nit astfel:
1 2 1 2 0 1 2

0 0 0 1 2

1. Æ(s ; a; z ) = (s ; z );
0 0 01 01

2. Æ(s ; c; z ) = (s ; z ); 8 c 2 ;
0 0 02 02

3. Æ(s; c; z ) = ÆÆ ((s; c; z ); s 2 S
s; c; z ); s 2 S ; 8 c 2 ; 8 z 2 :
1 1

2 2

Este clar ca M este automat pushdown determinist deoarece S \ S = ;; a 2=  1 2

si M ; M sunt tot deterministe.


1 2

 Cazul II: La fel ca ^n cazul II, cu deosebirea ca ^n loc de tranzitia 2 se considera
Æ(s ; b; z ) = (s ; z );
0 0 02 02

3.7 Probleme decidabile ^n clasa L2


^In aceasta sectiune, vom prezenta algoritmi pentru c^ateva probleme importante rela-
tive la gramatici de tip 2. Pentru o gramatica G independenta de context, urmatoarele
probleme sunt decidabile:
 Problema P1: L(G) 6= ;;
 Problema P2: Problema eliminarii simbolurilor inaccesibile;
 Problema P3: L(G) este nit (sau in nit);
 Problema P4: Problema apartenentei.
Problema P1. Consideram urmatoarele multimi:

N =;
9 x ! 2 P si 2 (Ni [ VT ) g; 8 i  0:
0

Ni = Ni [ fx= x 2 VN ;
+1

Se observa imediat ca


Probleme decidabile ^n clasa L2 139

(i) N  N  N  :::  Ni  Ni  :::  VN ;


0 1 2 +1

(ii) k = minfk 2 N= Nk = Nk g atunci Nk = Nk j ; j  1;


+1 +

(iii) 6 ; () x 2 Nk :
L(G) = 0

Algoritmul (ALG13):
Intrare: G = (VN ; VT ; x ; P ) gramatica de tip 2;
Iesire: L(G) 6= ; ?
0

Metoda:
begin
i := 0;
N := ;;
0

repeat
i0 := i + 1;
Ni := Ni [ fx= x 2 VN ; 9 x ! 2 P; 2 (Ni [ VT ) g
1

until (Ni = Ni ) or (Ni = VN );


if x 2 Ni then \L(G) 6= ;"
1

else \L(G) = ;"


end .


! Folosind arborii de derivare, algoritmul precedent este echivalent cu a spune ca
\L(G) 6= ; () exista cel putin un arbore de derivare etichetat ^n radacina cu x0 si
toate frunzele etichetate cu simboluri terminale (din VT )."
De nitia 3.7.1 Fie G = (VN ; VT ; x ; P ) o gramatica (nu neaparat de tip 2). Un
neterminal x se numeste productiv daca exista w 2 VT astfel ^nc^at x =) w:
0

G
Un simbol se numeste neproductiv daca nu este productiv.
Observatia 3.7.1 VN Nk reprezinta multimea simbolurilor neproductive (unde Nk
este multimea din Algoritmul (ALG13)).
Rezolvarea problemei (P1) face parte din categoria metodelor de punct x (de
exemplu, algoritmul de deducere a unei gramatici echivalente cu un automat push-
down, pagina 116). Complexitatea timp a algoritmului (ALG13) este O(jVN jjP j q),
unde q este numarul maxim de simboluri din partea dreapta a regulilor.
Exercitiul 3.7.1 Fie gramatica G = (fS; A; B; C g; fa; bg; S; P ) unde regulile P sunt:
 S ! AB
 A!BC
 B !CC
 C!a
Probleme decidabile ^n clasa L2 140

Sa se cerceteze daca L(G) = ;:


Solutie Calculam N = fC g, dupa care N = fC; B g: La pasul 3, obtinem N =
fC; B; Ag. ^In sf^arsit, N = fC; B; A; S g: Conditiile de terminare a iteratiilor sunt
1 2 3

Nk = Nk (adica nu mai gasim nici un nou neterminal) sau Nk = VN (caz ^n


+1

care toti neterminalii pot trece ^n cuvinte). Astfel, deoarece S 2 N , va rezulta ca
L(G) 6= ;: De altfel, se observa ca toate simbolurile gramaticii sunt utile.
4

Rezolvarea celei de-a doua probleme este asemanatoare. Problema P2 se foloseste


at^at pentru reducerea numarului de simboluri, respectiv de reguli, pentru gramatica
de la intrare, c^at si la rezolvarea problemelor P3 si P4.
De nitia 3.7.2 Fie G = (VN ; VT ; x ; P ) o gramatica (nu neaparat de tip 2). Sim-
0

bolul x 2 VN[ VT se numeste accesibil daca exista o derivare


x =) x ; ; 2 (VN [ VT ) :
0
G
Un simbol se numeste inaccesibil daca nu este accesibil.
Vom de ni niste multimi asemanatoare cu cele din rezolvarea problemei P1, cu
deosebirea ca multimea N va contine simbolul de start. Astfel:
0


N = fx g
Ni = Ni [ fx= y ! 2 P; x 2 \ (VN [ VT ); y 2 Ni g:
0 0

+1

Se observa imediat ca


(i) N  N  N  :::  Ni  Ni  :::  VN [ VT ;
0 1 2 +1

(ii) k = minfk 2 N= Nk = Nk g atunci Nk = Nk j ; j  1;+1 +

(iii) x este accesibil () x 2 Nk :


Demonstrarea corectitudinii si implementarea se fac la fel ca ^n problema precedenta.
Algoritmul (ALG14):
Intrare: G = (VN ; VT ; x ; P ) gramatica de tip 2;
Iesire: G0 = (VN0 ; VT0 ; x ; P 0 ) gramatica de tip 2 echivalenta fara simboluri inaccesi-
0

bile;
Metoda:
begin
i := 0;
N := fx g;
0 0

repeat
i := i + 1;
Ni := Ni [ fx= y ! 2 P; x 2 ; y 2 Ni g
1

until (Ni = Ni ) or (Ni = VN [ VT );


1
Probleme decidabile ^n clasa L2 141

VN0 := VN \ Ni ;
VT0 := VT \ Ni ;
P 0 := P 0 fx ! = x 2= Ni sau 2= Ni g
end .
De nitia 3.7.3 Fie G = (VN ; VT ; x ; P ) o gramatica (nu neaparat de tip 2). Un
0

simbol se numeste util daca este productiv si accesibil. Un simbol se numeste inutil
daca nu este util.
O gramatica cu toate simbolurile utile se numeste redusa.
Exercitiul 3.7.2 Fie gramatica din Exercitiul 3.7.1. Sa se deduca simbolurile acce-
sibile.
Solutie Evident N = fS g: Calculam N = fS; A; B g, apoi N = fS; A; B; C g: ^In
0 1 2

nal N = fS; A; B; C; ag: Cu alte cuvinte, toate simbolurile gramaticii sunt accesibile.
3

Folosind si Exercitiul 3.7.1, putem spune ca gramatica G este redusa.
Trecem la rezolvarea problemei P3. Pentru aceasta, consideram (la intrare) o
gramatica G ^n forma normala Chomsky, pentru care  2= L(G) (cu toate simbolurile
accesibile). Construim urmatorul graf orientat:
Algoritmul (ALG15):
Intrare: G = (VN ; VT ; x ; P ) gramatica de tip 2 ^n forma normala Chomsky si cu
0

toate simbolurile accesibile;


Iesire: L(G) nit ? (sau in nit);
Metoda:
begin
V (GRAF ) := VN ;
E (GRAF ) := ;;
for (8 A ! B C 2 P ) do
E (GRAF ) := E (GRAF ) [ f(A; B ); (A; C )g;
if (GRAF are circuite) then \L(G) este in nit"
else \L(G) este nit"
end .
Demonstratia corectitudinii acestui algoritm este asemanatoare Lemei de pompare
pentru gramatici de tip 2. Problema determinarii daca un graf este ciclic (are circuite)
este polinomiala.
Exercitiul 3.7.3 Fie gramatica G = (fS; A; B; C g; fa; bg; S; P ) unde regulile P
1

sunt:
 S ! AB
 A ! BC ja
 B ! C C jb
Probleme decidabile ^n clasa L2 142

 C!a
Sa se cerceteze daca L(G1 ) este nit (sau in nit). Aceeasi problema daca se adauga
regula C ! A B:


Solutie ^In primul caz, utiliz^and algoritmul de mai sus, obtinem graful:


=
 ~
S

(GRAF )1
  
A - B


~ = C


Deoarece GRAF nu are circuite, rezulta ca L(G ) este nit.


1 1

 ~
S

=
(GRAF )2

} >
A - B

~ =
 C

Not^and cu G gramatica obtinuta din G prin adaugarea regulii C ! A B , deoarece


2 1

(GRAF ) are circuite, rezulta ca L(G ) este in nit.


2 2

Problema apartenentei pentru limbaje generate de gramatici de tip 2 (problema


P4 este cea mai importanta). Aceasta se mai scrie:
Intrare: G = (VN ; VT ; x ; P ) gramatica de tip 2 ^n forma normala Chomsky,  2=
L(G) si w 2 VT ;
0

Iesire: w 2 L(G) ?
Pentru rezolvarea acestei probleme vom prezenta Algoritmul (ALG16) propus de
Cocke, Younger si Kasami (uneori, se prescurteaza CYK). Astfel, e w = a a ::: an
1 2

cu ai 2 VT ; 1  i  n: De nim multimile
V = fA= A =) a ::: a
ij i ; 1  j  n; 1  i  n j + 1g:
i+j
G 1

Este clar ca w 2 L(G) () x 2 V n : Acum trebuie sa gasim un procedeu de


0 1

determinare efectiva a multimilor Vij :


 Pentru j = 1 avem Vi = fA= A ! ai 2 P g;
1 8 i = 1; n:
Probleme decidabile ^n clasa L2 143

 Pentru j  2 presupunem ca am construit Vil ; l  j 1. Pentru a construi Vij


punem ^n evidenta prima regula aplicata (de forma A ! B C , deoarece G este
^n forma normala Chomsky).
A
. &
B C
. & .&
ai . . ai k ai k . . ai j
+ 1 + + 1

Deci, rezulta caracterizarea: A 2 Vij () 9 1  k  j 1 astfel ^nc^at


A ! B C 2 P; B 2 Vik ; C 2 Vi k;j k : +

Algoritmul (ALG16):
Intrare: G = (VN ; VT ; x ; P ) gramatica de tip 2 ^n forma normala Chomsky si cu
toate simbolurile accesibile, w 2 VT ;
0

Iesire: w 2 L(G);
Metoda:
begin
for i := 1 to n do
Vi := fA= A ! ai 2 P g;
1

for j := 2 to n do
for i := 1 to n j + 1 do begin
Vij := ;;
for k := 1 to j 1 do
Vij := Vij [ fA= 9 A ! B C 2 P; B 2 Vik ; C 2 Vi k;j k g +

end ;
if x 2 V n then \w 2 L(G)"
else \w 2= L(G)"
0 1

end .
Complexitatea timp a algoritmului de mai sus este O(jwj ), iar complexitatea spatiu
3

este O(jP j + jwj jVN j). Pentru reprezentarea ^n memorie a gramaticii G se pot folosi
2

urmatoarele doua matrice:


 pentru reguli de tipul x ! a alegem matricea P = (p1ij ), unde 1  i  jP j si
1  j  2: De exemplu, daca regula x ! a are numarul 4, atunci ^n matricea
1

P se scrie p1 ; = x si p1 ; = a;
1 4 1 4 2

 pentru reguli de tipul A ! B C alegem matricea P = (p2ij ), unde 1  i  jP j


si 1  j  3: De exemplu, daca regula A ! B C are numarul 7, atunci ^n
2

matricea P se scrie p2 ; = A; p2 ; = B; p3 ; = C:
2 7 1 7 2 7 3

Pentru reprezentarea ^n memorie a multimilor Vij putem folosi un tablou tridimen-
sional, sa zicem V = (vijk ), unde 1  i; j  jwj; (de fapt putem alege j = 1; jwj; iar
i = 1; jwj j + 1), iar 1  k  jVN j (k 2 VN ). Semantic, vijk = true () k 2 Vij :
Probleme decidabile ^n clasa L2 144

Exercitiul 3.7.4 Fie gramatica G = (fS; A; B; C g; fa; bg; S; P ) unde regulile P sunt:
 S ! ABjBC
 A ! BAja
 B ! C C jb
 C ! ABja
si sirul de intrare w = b a a b a: Folosind Algoritmul (ALG16), sa se precizeze daca
w 2 L(G):
Solutie Calculam multimile Vij ; j = 1; n; i = 1; n j + 1 (n ind lungimea
cuv^antului w). Avem n = 5: Mai ^nt^ai, calculam Vi ; 8 i = 1; 5: Cuv^antul w se 1

mai scrie a a a a a , deci a = b; a = a; a = a; a = b si a = a: Obtinem


V = V = fB g si V = V = V = fA; C g:
1 2 3 4 5 1 2 3 4 5

11 41 21 31 51

Simpli cam caracterizarea A 2 Vij () 9 1  S k  j 1 astfel ^nc^at A ! B C 2


P; B 2 Vik ; C 2 Vi k;j k ; fac^and notatia Vij =
+ Vik Æ Vi k;j k : +

k=1;j 1

Putem cuprinde aceste rezultate ^n matricea


i=1 i=2 i=3 i=4 i=5
j = 1 fB g fA; C g fA; C g fB g fA; C g
j=2
j=3
j=4
j=5
Trecem acum la determinarea multimilor Vi ; 8 i 2 1; 4: Astfel, V = V Æ V 2 12 11 21

deci vor acei neterminali care pot trece printr-o regula ^n B A sau B C . Obtinem
V = fA; S g: Asemanator deducem V = V Æ V = fB g; V = V Æ V = fS; C g;
V = V Æ V = fS; Ag:
12 22 21 31 32 31 41

42 41 51

i=1 i=2 i=3 i=4 i=5


j = 1 fB g fA; C g fA; C g fB g fA; C g
j = 2 fS; Ag fB g fS; C g fS; Ag
j=3
j=4
j=5
Apoi, pentru calculul multimilor Vi folosim multimile deja calculate. Astfel, V =
V Æ V [ V Æ V = ;; V = V Æ V [ V Æ V = fB g; V = V Æ V [ V Æ V =
3 13

11 22 12 31 23 21 32 22 41 33 31 42 32 51

fB g:
i=1 i=2 i=3 i=4 i=5
j = 1 fB g fA; C g fA; C g fB g fA; C g
j = 2 fS; Ag fB g fS; C g fS; Ag
j=3 ; fB g fB g
j=4
j=5
Probleme decidabile ^n clasa L2 145

Apoi calculam multimile V = V Æ V [ V Æ V [ V Æ V = ; si V = V


14 11 23 12 32 13 41 24 21 ÆV [
33

V Æ V [ V Æ V = fS; C g [ fAg [ fA; S g = fS; A; C g:


22 42 23 51

i=1 i=2 i=3 i=4 i=5


j=1 fB g fA; C g fA; C g fB g fA; C g
j=2 fS; Ag fB g fS; C g fS; Ag
j=3 ; fB g fB g
j=4 ; fS; A; C g
j=5
^In sf^arsit, calculam multimea V =V ÆV [V ÆV [V ÆV [V ÆV =
fA; S g [ fS; C g = fS; A; C g:
15 11 24 12 33 13 42 14 51

i=1 i=2 i=3 i=4 i=5


j=1 fB g fA; C g fA; C g fB g fA; C g
j=2 fS; Ag fB g fS; C g fS; Ag
j=3 ; fB g fB g
j=4 ; fS; A; C g
j=5 fS; A; C g
^In concluzie, deoarece S 2 V , rezulta ca w 2 L(G):
15

3.7.1 Un algoritm e cient de analiza sintactica pentru gra-


matici ^n forma normala Chomsky
Algoritmul pe care-l prezentam ^n aceasta subsectiune este ^n str^ansa legatura cu
Algoritmul CYK din Sectiunea 3.7. Acesta va avea la intrare o gramatica ^n forma
normala Chomsky, multimile Vij ; si w 2 L(G): La iesire va preciza sirul de reguli
 w (care se mai numeste analizare sintactica).
aplicate ^n derivarea x =;)
0
G
Algoritmul (ALG17):
Intrare: G = (VN ; VT ; x ; P ) o gramatica de tip 2 ^n forma normala Chomsky,
multimile Vij din Algoritmul (ALG16) si w 2 VT (evident, are sens numai daca
0

w 2 L(G));
 w
Iesire: Derivarea  (analizarea sintactica) astfel ^nc^at x =;)
G 0

Metoda:
Vom prezenta mai ^nt^ai o procedura PARSE, si apoi programul principal ce apeleaza
aceasta procedura. Vom nota prin #(x ! r) numarul regulii x ! r 2 P: Analizarea
sintactica a lui w se va pastra ^n vectorul as.
procedure PARSE (i; j; A);
begin
if (j = 1) and (m = #(A ! ai )) then begin
h := h + 1;
Probleme decidabile ^n clasa L2 146

as[h] := m
end
else
if 9 k = minfl= 1  l  j 1; 9 A ! B C; B 2 Vil ; C 2 Vi l;j l g then
+

begin
h := h + 1;
as[h] := #(A ! B C );
PARSE (i; k; B );
PARSE (i + k; j k; C )
end
end ;
si programul principal este:
begin
h := 0;
if x 2 V n then begin
0 1

PARSE (1; n; x );
0

write(\analizarea sintactica este ", as);


end
else
write(\w 2= L(G)")
end .
Teorema 3.7.1 (de corectitudine si complexitate timp)
Fie G o gramatica independenta de context sub forma normala Chomsky si w 2
VT ; jwj  1: Atunci Algoritmul (ALG17) furnizeaza analizarea sintactica  daca
w 2 L(G) si mesajul \w 2= L(G)" ^n caz contrar. Mai mult, numarul de pasi ^n care
se executa Algoritmul (ALG17) este O(n ): 2

Demonstratie Se gaseste ^n [9, 10].


P^ana acum am prezentat notiuni prezentate ^n literatura de specialitate [7, 8, 9, 11,
17]. ^In continuare, ne propunem urmatoarele:
 Vom demonstra ca timpul mediu al algoritmului precedent este de O(n  log n)
(deci mai bun dec^at cazul cel mai defavorabil care are O(n )).
2

 Complexitatea spatiu a Algoritmului (ALG17) este de O(n). Vom prezenta


Algoritmul (ALG18) care ^mbunatateste aceasta complexitate spatiu, ajung^and
la O(log n);
2

 Deoarece se schimba ordinea aplicarii regulilor gramaticii, vom da Algoritmul


(ALG19) urmat de o teorema de corectitudine.
Teorema 3.7.2 Timpul mediu de lucru al Algoritmului (ALG17) este O(n  log n):
Probleme decidabile ^n clasa L2 147

Demonstratie Notam cu T (n) numarul mediu de operatii pentru prelucrarea


unei secvente de lungime n folosind Algoritmul (ALG17). Atunci, cele doua apeluri
recursive ale procedurii PARSE se fac ^n T (k 1) si respectiv T (n k) operatii.
Apelarea procedurii poate pozitiona k pe oricare din aceste n pozitii, k 2 f1; 2; :::; ng:
Presupun^and aceste cazuri echiprobabile, obtinem relatia de recurenta:
n
1 X
(1) T (n) = n 1 + 
n k
(T (k 1) + T (n k));
=1

unde T (0) = T (1) = 0:


Din relatia (1) deducem (prin ^nmultire cu n):
(2) n  T (n) = n(n 1) + 2[T (0) + T (1) + ::: + T (n 1)]
Scriem relatia (2) pentru n 1 :
(3) (n 1)  T (n 1) = (n 1)  (n 2) + 2[T (0) + T (1) + ::: + T (n 1)]
Scaz^and relatia (3) din (2), ajungem la:
(4) n  T (n) (n 1)  T (n 1) = 2  (n 1) + 2  T (n 1)
Grup^and, obtinem o recurenta neliniara:
(5) n  T (n) = (n + 1)  T (n 1) + 2  (n 1)
Acum ^mpartim cu n(n + 1) si deducem:
T (n) T (n 1) 2(n 1)
(6) = +
n+1 n n(n + 1)
Echivalent, obtinem relatia de recurenta:
 
T (n) T (n 1) 2 1
(7) = +2
n+1 n n+1 n
Prin sumarea relatiei (7) pentru orice n 2 N; n  2 obtinem:
    
T (n) T (n 1) 2 1 T (n 2) 2 2 1
(8) = +2 = +2 + +
n+1 n n+1 n n 1 n+1 n n
 nX " n # " n #
1 T (1) 1 +1
X 1 2 X 1 1
+ = ::: = +2 2 =2 +
n 1 2 k k =3 k=2 k n+1 k k =3
2
Acum, folosim inegalitatea imediata
2 1
n+1 2
 n +1 1 ; 8 n  1:
Probleme decidabile ^n clasa L2 148

Din relatia (8) rezulta


" n nX #
T (n)
 2 n + 1 + k = 2 k1 :
1 1
X +1

(9)
n+1 k k
=3 =3

Apel^and la integralele Riemann, putem aproxima suma din relatia (9) si obtinem:
nZ+1
T (n) 1 n+1
(10)
n+1
2 x
dx = 2 ln
2
< 2 ln(n + 1):
2

Asadar, rezulta T (n) < 2(n + 1) ln(n + 1); adica T (n) = O(n  ln n).
^In cele ce urmeaza vom discuta despre cum se poate ^mbunatati spatiul de memorie
si implicatiile acesteia.
^In legatura cu necesarul de memorie, observam ca stiva apelurilor recursive are
ad^ancimea maxima ^n situatia ^n care pentru ecare intrare (i; j ) (parametrul A nu
este important ^n calculul numarului de operatii ale Algoritmului (ALG17)) pentru
procedura PARSE se obtine k = j 1: ^In aceasta situatie, ad^ancimea maxima a stivei
este n 1:
Putem obtine un rezultat mai bun daca nu se memoreaza \orbeste" ^n stiva
perechile (i+k; j k); ci, dupa ecare apelare a procedurii PARSE, introducem^n stiva
perechea corespunzatoare subsecventei de lungime maxima (daca ea are lungimea mai
mare ca 1), urm^and sa prelucram cealalta subsecventa (cea de lungime mai mica).
Deci este vorba de apelurile recursive:
PARSE (i; k; B );
PARSE (i + k; j k; C );
Lungimea secventelor acestora este k, respectiv j k: Conform celor discutate mai
sus, trebuie sa apelam mai ^nt^ai cea pentru care lungimea secventei este mai mica.
Deci situatia de mai sus corespunde cazului c^and k  j k; ^n caz contrar av^and
inversate ordinea apelurilor recursive:
PARSE (i + k; j k; C );
PARSE (i; k; B );
Acum, vom rescrie procedura PARSE din Algoritmul (ALG17).
Algoritmul (ALG18):
Intrare: G = (VN ; VT ; x ; P ) o gramatica de tip 2 ^n forma normala Chomsky,
multimile Vij din Algoritmul (ALG16) si w 2 VT ;
0

Iesire: Derivarea (analizarea sintactica)  astfel ^nc^at x =;) w.


G 0

Metoda:
procedure PARSE (i; j; A);
begin
if (j = 1) and (m = #(A ! ai )) then begin
Probleme decidabile ^n clasa L2 149

h := h + 1;
as[h] := m
end
else
if 9 k = minfl= 1  l  j 1; 9 A ! B C; B 2 Vil ; C 2 Vi l;j l g then +

begin
h := h + 1;
as[h] := #(A ! B C );
if 2  k  j then begin
PARSE (i; k; B );
PARSE (i + k; j k; C )
end
else begin
PARSE (i + k; j k; C );
PARSE (i; k; B )
end
end
end ;
Teorema 3.7.3 Ad^ancimea maxima h(n) a stivei va majorata de blog nc (adica
S (n) = O(log n)).
2

Demonstratie Vom arata mai ^nt^ai inegalitatea \recursiva":


 n 
(11) h(n)  1 + h 2
1
n1
0 n=0
^Intr-adevar, e o secventa de lungime n care trebuie prelucrata. Aplicarea procedurii
 
PARSE produce doua secvente ; cu j j  j j: Deci j j  n : ^In stiva se 2
1

memoreaza indicii corespunzatori secventei (cel minim si cel maxim) si se trece la
prelucrarea secventei : At^ata timp c^at se prelucreaza subsecvente ale lui ; secventa
ram^ane ^n stiva (^ntr-un nivel mai jos al apelului recursiv); ad^ancimea n  maxim a
a stivei se poate produce
 
atunci c^
a nd 
este maxim,

adic
a j j = ; ceea ce 2
1

corespunde lui j j = n ; si este 1 + h n


2
1
2
: ^In continuare este scoasa din stiva
1

spre a prelucrata secventa ; ad^ancimea maxima a stivei ind


     
n 1 n 1 n 1
h
2
h 2
+1 h 2
+ 1:

Astfel, am demonstrat inegalitatea (11). ^In continuare, vom arata ca h(n)  blog nc: 2

Mai precis, aratam prin inductie dupa m ca pentru


(12) 8 n 2 N; astfel inc^at 2m  n < 2m (adica blog nc = m) atunci h(n)  m:
+1
2

Pasul initial: Pentru m = 0, inegalitatea este evident adevarata.


Probleme decidabile ^n clasa L2 150

Pasul inductiv: Presupunem inegalitatea (12) adevarata pentru m si e n 2


f2m ; 2m
+1 +1
+ 1; :::; 2m+2
1g: Atunci b n 2
1
c< 2m : Conform inegalitatii (11);
+1

avem:  
n 1
h(n)  1 + h  1 + m = blog nc:
2 2

Exemplul 3.7.1 Sa presupunem ca avem la intrarea Algoritmului (ALG17) cuv^antul
w cu lungimea 10 si ca alegerea regulilor de tipul A ! B C (conform multimilor Vij )
implica o partitionare din doua ^n doua simboluri. Astfel, perechile de tipul (i; j ) (nu
mai mentionam neterminalul A) din apelul procedurii PARSE vor la ^nceput (1; 10),
apoi (1; 8); respectiv (9; 10), dupa care (1; 6); respectiv (7; 8), s.a.m.d. Astfel lungimea
stivei necesare apelurilor recursive are lungimea 5: ^In cazul Algoritmului (ALG18),
avem la ^nceput (1; 10), apoi (1; 2); respectiv (3; 10). Dupa rezolvarea apelului recursiv
pentru parametrii (1; 2) (adica la \^ntoarcerea din recursie"), vom partitiona \bucata"
ramasa din cuv^antul w si anume (3; 10): Acesta se va ^mparti ^n (3; 4), respectiv (5; 10)
s.a.m.d. Astfel lungimea stivei necesare apelurilor recursive are lungimea 2:

^In ceea ce priveste corectitudinea Algoritmului (ALG18), aceasta este valabila tot
^n baza Teoremei 3.7.1. Problema este ca derivarile (^n cazul acceptarii unui cuv^ant)
nu mai sunt neaparat toate st^angi. Deci din c^and ^n c^and vor apare derivari drepte.
Cum rezolvam ^n acest caz problema \ambiguitatii" (nu este vorba de ambiguitate ^n
sensul de nitiilor de la pagina 118) ? Mai exact, care neterminal se va rescrie conform
regulilor gramaticii. Pentru aceasta, vom memora si pozitia ^n forma propozitionala
a neterminalului care determina aplicarea regulii. ^In ideea modi carii procedurii
PARSE, consideram poz o variabila globala astfel ^nc^at daca = x x ::: xm este
1 2

forma propozitionala curenta, atunci se aplica o regula de tipul xpoz ! r; r 2 (VN [


VT ) ; poz 2 f1; 2; :::; mg: Astfel, prezentam Algoritmul (ALG19).
Algoritmul (ALG19):
Intrare: G = (VN ; VT ; x ; P ) o gramatica de tip 2 ^n forma normala Chomsky,
multimile Vij din Algoritmul (ALG16) si w 2 VT ;
0

Iesire: Derivarea  (analizarea sintactica) astfel ^nc^at x =;G) w. Totodata se va


0

preciza si pozitia neterminalului care se transforma (care este partea st^anga a regulii
curente).
Metoda: Ca structura de date, vom extinde vectorul as care va avea elemente de tip
record cu c^ampurile val (cu aceeasi semni catie de p^ana acum, adica retine numarul
regulii) si pozitie care are semantica discutata mai sus. ^In ceea ce priveste variabila
globala poz aceasta este initializata ^naintea apelului procedurii PARSE cu 1:
procedure PARSE (i; j; A);
begin
if (j = 1) and (m = #(A ! ai )) then begin
h := h + 1;
Probleme decidabile ^n clasa L2 151

as[h]:val := m
as[h]:pozitie := poz
end
else
if 9 k = minfl= 1  l  j 1; 9 A ! B C; B 2 Vil ; C 2 Vi l;j l g then
+

begin
h := h + 1;
as[h]:val := #(A ! B C );
as[h]:pozitie := poz
if 2  k  j then begin
PARSE (i; k; B );
inc(poz );
PARSE (i + k; j k; C )
end
else begin
inc(poz );
PARSE (i + k; j k; C );
dec(poz );
PARSE (i; k; B )
end
end
end ;
Teorema 3.7.4 (de corectitudine a Algoritmului (ALG19))
Algoritmul (ALG19) furnizeaza analizarea sintactica si pozitia neterminalului care
este membrul st^ang al regulii curente.
Demonstratie Prima parte rezulta imediat din Teorema 3.7.3. Pentru partea
a doua, vom rationa prin inductie dupa lungimea derivarii, pe care o vom nota cu
h: Cu alte cuvinte, vom demonstra ca ^n cadrul derivarii cu numarul h, se aplica o
regula care are ^n partea st^anga neterminalul cu numarul poz din forma propozitionala
curenta.
Pasul initial: h = 0 Deci avem o derivare ^ntr-un pas (de tipul x =) ), iar ^n
0

procedura PARSE se intra pe ramura principala a instructiunii if (j = 1) and (m =


#(A ! ai )) then begin , deci poz = 1, adica neterminalul de pe pozitia 1 se modi ca;
Pasul inductiv: Presupunem adevarata a rmatia pentru 0; 1; :::; h 1 si o demon-
stram pentru h: Consideram deci o derivare generala:
0x = ) x ::: A ::: x =) x ::: B C ::: x =) a a ::: a :
;h1
i j i j 1 2 n
 Cazul I: S-a intrat pe ramura principala a instructiunii if 2  k  j then be-
gin, adica k  j k si deci vom alege subarborele de derivare st^ang. Asadar
neterminalul B devine cel curent (deci nu trebuie sa afectam variabila poz ,
av^and poz (B ) = poz (A)). Neterminalul C va deveni curent la urmatorul
apel recursiv, deci ^naintea lui trebuie sa incrementam variabila poz (av^and
poz (C ) = poz (A) + 1).
Problema echivalentei a doua gramatici de tip 2 152

 Cazul II: S-a intrat pe ramura else a instructiunii if 2  k  j then begin , si
deci vom alege subarborele de derivare drept. Asadar neterminalul C devine cel
curent, deci va trebui sa incrementam variabila globala poz: Evident, ^naintea
urmatorului apel recursiv, ^n care radacina subarborelui de derivare este B , va
trebui sa decrementam variabila poz:
Asadar, am retinut ^n vectorul as, (c^ampul al doilea (pozitie)), pozitia ecarui
neterminal care este membru st^ang al regulii curente.
Exercitiul 3.7.5 Fie gramatica G = (fA; B; C; Dg; fa; bg; A; P ) cu regulile P :
1) A ! B C 2) A ! C D 3) B ! C B 4) C ! D D
5) D ! B C 6) B ! a 7) C ! b 8) D ! a
Folosind Algoritmul (ALG19), sa se analizeze sintactic cuv^antul w = b a a b a:
Solutie Dupa executia Algoritmului (ALG19), obtinem analizarea sintactica
 = (2; 7; 5; 6; 4; 8; 5; 6; 7) cu vectorul pozitiilor (1; 1; 2; 2; 3; 4; 3; 3; 4). Cu alte cuvinte,
obtinem derivarea (neterminalul subliniat reprezinta cel care se transforma prin apli-
carea unei reguli):

A =) C D =) b D =) b BC =) b a C =) b a D D =)
2) 7) 5) 6) 4) 8)

=) b a D a =) b a B C a =) b a aC a =) b a a b a
8) 5) 6) 7)

Se observa ca ^n forma propozitionala b a D D este esential care neterminal se trans-
forma.

3.8 Problema echivalentei a doua gramatici inde-


pendente de context
Fie G ; G doua gramatici de tip 2 arbitrare si R un limbaj regulat arbitrar. Din [9]
1 2

am extras urmatoarele probleme nedecidabile:


 L(G ) \ L(G ) = ;;
1 2

 L(G ) = L(G );
1 2

 L(G )  L(G );
1 2

 L(G ) = R;
1

 R  L(G ); 1

 C L(G ) 2 L ;
1 2

 L(G ) \ L(G ) 2 L :
1 2 2
Problema echivalentei a doua gramatici de tip 2 153

^In aceasta sectiune, vom prezenta un exemplu de 3 gramatici de tip 2 echivalente


pe baza unor rezultate auxiliare. De remarcat ca echivalenta lor se va demonstra
direct din reguli, adica aplicarea unei reguli ^ntr-o gramatica poate dedusa printr-o
derivare ^n alta gramatica si reciproc.
Exercitiul 3.8.1 Sa se arate ca urmatoarele gramatici de tip 2 sunt echivalente:
a) G = (fS; Ag; fa; b; cg; S; P ) unde regulile P sunt:
1 1 1

{ S ! aAb
{ A ! aAbjAAjcj
b) G = (fS; Ag; fa; b; cg; S; P ) unde regulile P sunt:
2 2 2

{ S ! aAb
{ A ! AcjASj
c) G = (fS; Ag; fa; b; cg; S; P ) unde regulile P sunt:
3 3 3

{ S ! abjaA
{ A ! SbjcbjcAjSA
^Inainte de a trece la solutia Exercitiului 3.8.1, vom aminti doua leme cunoscute si
vom enunta si demonstra alte doua leme.
Lema 3.8.1 Fie G o gramatica de tip 2 astfel ^nc^at  2= L(G): Atunci exista o
gramatica de tip 2 echivalenta fara  reguli (este vorba de eliminarea -regulilor
prezentata la pagina 67).
Lema 3.8.2 Fie G = (VN ; VT ; x ; P ) o gramatica de tip 2 si regula x ! y a ,
iar y ! j j ::: j m toate regulile cu y ^n partea st^anga. Atunci gramatica G0 =
0 1 2

(VN ; VT ; x ; P 0 ), unde P 0 = P fx ! y g [ fx ! i = i = 1; mg, este


1 2

0 1 2 1 2

echivalenta cu G (aceasta lema am mai folosit-o la forma normala Greibach, pagina


127).
Lema 3.8.3 Fie G = (VN ; VT ; x0 ; P ) o gramatica de tip 2 si A ! A A 2 P , restul
regulilor cu A ^n partea st^anga ind A ! 1 j 2 j ::: j k ( i 6= A A): Atunci G0 =
(VN ; VT ; x0 ; P 0 ) unde
a) P 0 = P fA ! A Ag [ fA ! i A= i = 1; kg sau
b) P 0 = P fA ! A Ag [ fA ! A i = i = 1; kg.
Demonstratie Vom demonstra doar punctul a), punctul b) fac^andu-se analog.
Pentru a demonstra L(G0 ) = L(G), vom proceda prin dubla incluziune:
: Fie pasul arbitrar Æi =)0 Æi din derivarea generala din G0 :
G +1

x =)0 Æ =) ::: =)0 Æi =)0 Æi =)0 ::: =)


0 p
0
G G01
G G +1
G G
Distingem doua situatii:
Problema echivalentei a doua gramatici de tip 2 154

 Cazul I: Daca se aplica reguli care nu sunt de forma A ! i A atunci Æi =) Æi+1


G
 Cazul II: Presupunem ca s-a aplicat o regula de tipul A ! i A. Atunci
Æi = A =) A A =) i A = Æi
1 2
G 1 2
G 1 2 +1

: Fie pasul arbitrar Æi =G) Æi +1 din derivarea generala din G:

x =) Æ =) ::: =) Æi =) Æi =) ::: =) p
0
G 1
G G G +1
G G
Distingem doua situatii:
 Cazul I: Nu s-a aplicat regula A ! A A. Atunci este clar ca Æi =)
0 Æi+1 . G
 Cazul II: S-a aplicat regula A ! A A: Cum ^ntr-o gramatica de tip 2 nu con-
teaza ordinea aplicarii regulilor, rezulta ca primul simbol neterminal A se va
transforma astfel:
Æi = A =) A A =) i A sau
1 2
G 1 2
G 1 2

Æi = A =) A A =) A A A s.a.m.d.
1 2
G 1 2
G 1 2

Presupunem ca am aplicat toate regulile de tipul A ! A A si acum aplicam


reguli de tipul A ! j ::: j k ( i 6= A A): Deci avem derivarea generala
1

Æ = A =) An =) :::


i i1 i2 in
1 2
G 1 2
G 1 2

Aceasta derivare generala o putem obtine si ^n G0 astfel:


Æi = A =)0 i1 A =)0 i1 i2 A =)0 ::: =)0 i1 i2 ::: i
1
G2
G
1
G 2
G 1 2 1 n 2

Ultima regula din derivarea de mai sus este de forma A ! i , spre deosebire
de celelalte care sunt de tipul A ! i A.
n

Ram^ane deci ca L(G0 ) = L(G):


Lema 3.8.4 Gramatica G din Exercitiul 3.8.1 este echivalenta cu gramatica G0 =
(fS; Ag; fa; b; cg; S; P 0 ) unde regulile P 0 sunt:
3 3

3 3

 S ! abjaAb
 A ! SjcjcAjSA
Problema echivalentei a doua gramatici de tip 2 155

Demonstratie Demonstratia echivalentei dintre gramaticile G si G0 este imediata.


3 3

Se arata ca
S =) () S =0) ; 8 2 fS; A; a; b; cg:
G3 ;dr G3 ;dr
Mai precis, se poate demonstra imediat prin inductie dupa lungimea derivarii ca

S =) u () S G=0)
n
u daca A 2=
G3 ;dr 3 ;dr b u daca A 2
Restul demonstratiei o lasam ca tema pentru cititor.
Trecem acum la solutia Exercitiului 3.8.1.
Solutie Mai int^ai aplicam Lema 3.8.1 pentru gramaticile G si G . Cum singurul
1 2

simbol care se poate sterge este A, rezulta imediat gramaticile echivalente:


 G0 echivalenta cu G :
1 1

{ S ! aAbjab
{ A ! aAbjabjAAjc
 G0
2
echivalenta cu G : 2

{ S ! aAbjab
{ A ! AcjcjASjS
Acum, folosind Lema 3.8.3,a), transformam gramatica G0 si obtinem ca G00 echiva-
lenta cu G0 (deci si cu G ):
1 1

1 1

 S ! aAbjab
 A ! aAbjabjcjAaAbjAabjAc
Acum, folosind Lema 3.8.2 pentru gramatica G0 (lu^and simbolul y pe S ) deducem
gramatica G00 :
2

 S ! aAbjab
 A ! aAbjabjcjAaAbjAabjAc
Se observa clar ca G00 este identica cu G00 , deci L(G00 ) = L(G00 ). Echivalent va rezulta
2 1 2 1

ca L(G ) = L(G ).


1 2

Ne ocupam acum de G . Am vazut ^n Lema 3.8.4 ca G0 este echivalenta cu G . Acum
folosind Lema 3.8.1 lu^and la fel y ca ind S , obtinem gramatica G00 echivalenta cu
3 3 3

G0 :
3

 S ! abjaAb
 A ! abjaAbjcjcAjab AjaAbA
Exercitii propuse spre rezolvare 156

Acum aplicam Lema 3.8.3, b) gramaticii G0 si obtinem gramatica G000 echivalenta cu
G0 :
1 1

 S ! abjaAb
 A ! abjaAbjcjcAjab AjaAbA
Se observa clar ca G00 este identica cu G000 , deci L(G00 ) = L(G000 ). Echivalent va
3 1 3 1

rezulta ca L(G ) = L(G ).


1 3

^In concluzie, ram^ane deci ca cele trei gramatici din Exercitiul 3.8.1 sunt echivalente.
Lema 3.8.4. 0
Not^and cu G 3  G faptul ca L(G ) = L(G0 ) ^n baza Lemei 3.8.4, putem
3 3 3

sumariza aceasta solutie ^n desenul:


Lema 3.8.4 0 Lema 3.8.2 00
G 3 G 3
G 3

Lema 3.8.3,b)
Lema 3.8.1 0 G000 1
G G
G00
1 1

Lema 3.8.3,a)
Lema 3.8.1 0 Lema 3.8.2 00
G 2 G2
G 2

^In concluzie, solutia Exercitiului 3.8.1 s-a ^ncheiat.

3.9 Exercitii propuse spre rezolvare


Exercitiul 3.9.1 Sa se determine un automat pushdown care accepta limbajul L =


e w 2 fa; bg g, unde c 2
fw c w= = fa; bg:

 Fie P = (fs0 ; s1 g; fa; b; cg; fz; a; bg; Æ; s0; z; fs1 g) si Æ de nit astfel:
1) Æ (s0 ; a; z ) = (s0 ; a z ); 2) Æ (s0 ; b; z ) = (s0 ; b z );
3) Æ (s0 ; a; a) = (s0 ; a a); 4) Æ (s0 ; a; b) = (s0 ; a b);
5) Æ (s0 ; b; a) = (s0 ; b a); 6) Æ (s0 ; b; b) = (s0 ; b b);
7) Æ (s0 ; c; a) = (s1 ; a); 8) Æ (s0 ; c; b) = (s1 ; b);


9) Æ (s1 ; a; a) = (s1 ; ); 10) Æ (s1 ; b; b) = (s1 ; );
11) Æ (s; i; x) = ;, pentru 8 (s; i; x) 2 S    nede nite mai sus (ramase).


! Spre deosebire de automatul din Exercitiul 3.1.2, pentru care limbajul acceptat
difera putin, automatul din acest exercitiu este determinist. Diferenta dintre cele doua
limbaje este ca ^n acesta de fata se stie care este \mijlocul" cuv^antului de analizat (de
aceea este determinist).
Exercitii propuse spre rezolvare 157

Exercitiul 3.9.2 Sa se determine un automat pushdown care accepta limbajul L =


fan (b c)n = n  1g:

 Fie P = (fs0 ; s1 ; s2 ; s3 ; s4 g; fa; b; cg; fz; ag; Æ; s0; z; fs4g) si Æ de nit astfel:
1) Æ (s0 ; a; z ) = (s1 ; a a z );
2) Æ (s1 ; a; a) = (s1 ; a a a);
3) Æ (s1 ; b; a) = (s2 ; );
4) Æ (s2 ; c; a) = (s3 ; );
5) Æ (s3 ; b; a) = (s2 ; );
6) Æ (s3 ; ; z ) = (s4 ; );
6) Æ (s; i; x) = ;, pentru 8 (s; i; x) 2 S  ( [ fg)  nede nite mai sus (ramase).
Exercitiul 3.9.3 Construiti un automat pushdown (nedeterminist) echivalent cu gra-


matica G = (fS; Ag; fa; bg; S; fS ! a A A; A ! a S j b S j ag).

 Se poate folosi constructia din Exercitiul 3.1.5.


Exercitiul 3.9.4 Folosind constructia prezentata ^n Exercitiul 3.1.5, pentru au-
tomatul pushdown nedeterminist din Exercitiul 3.1.4, sa se deduca gramatica echiva-


lenta. Generalizare.

 
Obtinem gramatica cu regulile:
[s; x ; s] ! [s; x ; s] [s; c; s]
0 0

 [s; x ; s] ! [s; x; s] [s; c; s]


0

 [s; x; s] ! [s; a; s] [s; x; s] [s; b; s]


 [s; x; s] ! [s; a; s] [s; b; s]
 [s; a; s] ! a
 [s; b; s] ! b
 [s; c; s] ! c
 x0 ! [s; x ; s]
0

Exercitii propuse spre rezolvare 158


! Gramatica obtinuta mai sus este foarte apropiata ca forma de gramatica din
Exercitiul 3.1.4. Mai mult gramatica de tip 2 obtinuta aici este ^n forma standard
(adica regulile sale sunt de tipul ! ; ; 2 VN+ ; respectiv x ! a; x 2 VN ; a 2 VT ).
Generalizare:
\Data o gramatica G de tip 2 (nu neaparat ^n forma standard), e P automatul
pushdown nedeterminist echivalent obtinut din Teorema 3.1.1. Fie acum gramatica
G0 echivalenta cu P obtinuta din Teorema 3.1.2. Atunci gramaticile G si G0 sunt
echivalente si G0 este ^n forma standard."
Demonstratia generalizarii este imediata. Faptul ca cele doua gramatici sunt
echivalente rezulta din cele doua teoreme. Din forma tranzitiilor automatului push-
down nedeterminist P rezulta ca G0 este ^n forma standard. Mai putem spune ca
daca G este gramatica redusa, atunci P are stari accesibile si toate tranzitiile sunt
facute (utile). Mai mult, deoarece P are o singura stare, rezulta ca G0 va avea ^n
corespondenta cel mult o regula pentru o tranzitie a automatului P . Asadar, putem
spune ca gramatica G0 are o dimensiune apropiata de a gramaticii G:
Exercitiul 3.9.5 Sa se arate ca pentru orice automat pushdown nedeterminist exista
un automat pushdown nedeterminist echivalent cu memorie vida care are o singura
stare. Aratati, de aici, ca pentru orice automat pushdown nedeterminist exista un
automat pushdown nedeterminist echivalent care are doua stari.


Exercitiul 3.9.6 Sa se arate ca limbajul L = fan bn cn = n  0g nu este de tip 2.

 Limbajul L este un caz particular al limbajului prezentat ^n Exercitiul 3.2.2.


Exercitiul 3.9.7 Pentru gramaticile din Exercitiile 1.3.18-1.3.37, sa se arate ca lim-
bajele generate nu sunt de tip 2.
Exercitiul 3.9.8 Dovediti ca limbajele
a) L1 = fai bj ck = j = maxfi; k g; i; j; k 2 Ng;
b) L2 = fan bn ci = i 6= n; n 2 Ng:


nu sunt independente de context.

 Pentru punctul a) se aplica Lema lui Ogden pentru cuvinte de forma an bn! cn! ,
iar pentru punctul b) se considera cuvinte de forma an bn cn! (pozitiile simbolului a
sunt marcate).
Exercitiul 3.9.9 Dovediti ca limbajele
L 1 = fan bn cn = n 2 Ng;
+1 +2

L 2 = fan bn k1 cn k2 = n 2 Ng; k ; k
+ +
1 2 2 N xati;
Exercitii propuse spre rezolvare 159

L 3 = fan b n c n = n 2 Ng:
2 3

nu sunt independente de context.


Exercitiul 3.9.10 Sa se arate ca limbajele

Lk = faf1 n af2 n ::: afk n = n  1g;
1
1
( )
2
( ) k( )

unde fi sunt functii polinomiale de gradul ^nt^ai cu coe cienti din multimea nu-
merelor naturale (fi (n) = i  n + i ; i 2 N ; i 2 N), k  3 si

Lk = faf1 n af2 n ::: afk n = n  1g;
2
1
( )
2
( ) k( )

unde fi sunt functii polinomiale de grad cel putin doi cu coe cienti naturali,
k1


nu sunt independente de context.

 Exercitiul 3.9.10 reprezinta o generalizare a Exercitiilor 3.2.2, 3.2.5, 3.2.6, 3.9.9


si altele.
Exercitiul 3.9.11 Clasa L nu este ^nchisa la complementariere (adica 9L2L


astfel ^nc^at C L 2= L ).
2 2

 Presupunem prin reducere la absurd ca L2 este ^nchisa la complementariere. Fie


L ; L limbajele din cadrul Exercitiului 3.2.3. Datorita presupunerii facute, rezulta
ca C L 2 L si C L 2 L . Dar clasa L este ^nchisa la reuniune, deci C L [C L 2 L .
1 2

1 2 2 2 2 1 2 2

Aplic^and ^nca o data presupunerea facuta, rezulta ca C (C L [ C L ) 2 L . Folosind 1 2 2

acum o relatie a lui De Morgan rezulta ca L \ L 2 L . Dar din Exercitiul 3.2.2 (^n
care alegem j = n), rezulta L = L \ L 2= L contradictie cu presupunerea facuta.
1 2 2

1 2 2

Astfel clasa L 2 nu este ^nchisa la complementariere.


Exercitiul 3.9.12 Fie gramatica G = (fS; A; B g; fa; bg; S; P ) cu regulile P :
 S ! aBjbA
 A ! ajaSjbAA
 B ! bjbSjaBB
Pentru cuv^antul w = a a a b b a b b b a gasiti:
a) o derivare st^anga;
b) o derivare dreapta;
Exercitii propuse spre rezolvare 160

c) un arbore de derivare.
Exercitiul 3.9.13 Fie gramatica expresiilor aritmetice G = (fE g; f+; ; (; ); ag; E;
fE ! E + E j E  E j ( E ) j ag):
a) Dovediti ca gramatica este ambigua;

 b) Construiti o gramatica echivalenta neambigua.

 Gramatica expresiilor aritmetice de la pagina 117 (sau Exercitiul 1.3.12) este


neambigua si echivalenta cu gramatica din Exercitiul 3.9.13.
Exercitiul 3.9.14 Pentru gramaticile din Exercitiile 1.3.1-1.3.17, sa se construiasca
gramatici echivalente ^n forma normala Chomsky.
Exercitiul 3.9.15 Fie gramatica G = (fS g; fe; _; ^; (; ); a; b; c; g; S; fS !e S j ( S _
S ) j ( S ^ S ) j a j b j cg) care genereaza formulelor booleene propozitionale peste atomii
a; b; c si operatorii e; _; ^ (cu semni catia binecunoscuta). Sa se determine o


gramatica echivalenta ^n forma normala Chomsky.


! Se observa ca G este deja ^n formele normale Greibach si operator.
Exercitiul 3.9.16 O gramatica este liniara daca regulile sale sunt de forma:
 X ! a; X 2 VN ; a 2 VT ;
 X ! a Y; sau X ! Y a; unde X; Y 2 VN :
Fie G o gramatica ^n care partea dreapta a regulilor contine cel mult un neterminal.
Sa se arate ca exista G0 o gramatica liniara echivalenta cu G:
Exercitiul 3.9.17 Fie gramatica G ^n forma normala Chomsky. Sa se arate ca
folosind algoritmul de transformare a gramaticii G ^ntr-una echivalenta G0 ^n forma
normala Greibach, obtinem ^n G0 reguli de forma:
 x ! a ; a 2 VT ; 2 VN ;
 eventual (daca  2 L(G)) x !  (singura 
0 regula), si x0 nu mai apare ^n
partea dreapta a vreunei reguli.
Exercitiul 3.9.18 Fie gramatica G de tip 2 care nu are  reguli. Sa se deduca
marginile superioare ale multimilor de neterminali, respectiv de reguli pentru grama-
tica echivalenta cu G, sub forma normala Greibach, folosind Algoritmii (ALG9) si


(ALG10).

 Numarul de neterminali care sunt ^n plus (acele simboluri y ) este egal cu numarul
de circuite recursive st^ang maximale. O margine superioara este evident numarul de
neterminali ai gramaticii.
Exercitii propuse spre rezolvare 161

Exercitiul 3.9.19 Pentru gramaticile din Exercitiile 1.3.1-1.3.17, sa se construiasca


gramatici echivalente ^n forma normala Greibach.
Exercitiul 3.9.20 Pentru gramaticile din Exercitiile 1.3.1-1.3.17, sa se construiasca
gramatici echivalente ^n forma normala operator.
Exercitiul 3.9.21 Fie gramatica
G = (fx ; x ; x ; x ; x g; fa; bg; x ; fx
0 1 2 3 4 0 0 ! x x j x x ; x ! x x ; x ! a; x ! bg):
2 1 2 3 1 0 3 2 3


Sa se construiasca o gramatica echivalenta ^n forma normala operator.

 O prima metoda ar cu Algoritmul (ALG11). Metoda a doua va furniza o


gramatica echivalenta mult mai redusa (^n sensul numarului de reguli si neterminali).
Se observa ca L(G) = fan bn = n  1g. O gramatica ^n forma normala operator ce
genereaza acest limbaj este G0 = (fx0 g; fa; bg; x0; fx0 ! 0 x0 1 j 0 1g).
Exercitiul 3.9.22 Fie gramatica din Exercitiul 3.4.1. Folosind constructia din
Observatia 3.4.1, sa se construiasca o gramatica echivalenta ^n forma normala
Greibach. Este mai simpla gramatica echivalenta (numar de neterminali, reguli) ?
Exercitiul 3.9.23 Fie gramatica ^n forma normala Chomsky
G = (fS; Ag; f0; 1g; S; fS ! A A j 0; A ! S S j 1g):
Determinati:
a) o gramatica echivalenta ^n forma normala Greibach;
b) o gramatica echivalenta ^n forma normala operator.
Exercitiul 3.9.24 Fie gramatica G = (fS; A; B; C g; fa; b; cg; S; P ) unde regulile P
sunt:
1. S ! a A 2. S ! a B B 3. A ! a A B 4. B ! b B
5. B ! c 6. C ! A B b 7. C ! c
Sa se precizeze daca L(G) = ;; sa se deduca gramatica redusa si sa se veri ce


daca limbajul L(G) este in nit.

 Se utilizeaza Algoritmii (ALG13), (ALG14) si (ALG15).


Exercitiul 3.9.25 Pentru gramaticile din Exercitiile 1.3.1-1.3.17, sa se raspunda la
cerintele din Exercitiul 3.9.23.
Exercitii propuse spre rezolvare 162

Exercitiul 3.9.26 Fie gramatica G = (fS 0 ; S; A; B; C; Dg; fa; b; cg; S 0 ; P ) cu regulile


P:
1. S 0 ! S E 2. S ! S A 3. S ! C B 4. B ! S D
5. S ! C D 6. A ! C B 7. B ! A D 8. A ! C D
9. C ! a 10. D ! b 11. E ! c
Folosind Algoritmul (ALG16), sa se veri ce daca w = a2 b2 a3 b3 c 2 L(G) ? ^In caz
a rmativ, folosind (ALG17) (sau (ALG18), sau chiar (ALG19)) sa se precizeze si
analizarea sintactica.
Capitolul 4

Masini Turing si automate


liniar marginite
4.1 Masini Turing
^In aceasta sectiune, vom da de nitii referitoare la masinile Turing, dupa care vom
prezenta exercitii ce privesc acceptarea unor limbaje de catre masinile Turing, av^and
^n vedere si echivalenta cu gramaticile de tip 0.
De nitia 4.1.1 O masina Turing (notatie MT ) este un 7 uplu
M = (S; ; ; Æ; s ; B; F )
0

unde:
 S este multime nita si nevida numita multimea starilor;
 este multime nita si nevida, numita alfabetul de lucru (putem presupune
ca S \ = ;);
 B 2 este un simbol special numit blanc;
   ; B 2= ;  multime nita si nevida numita alfabetul de intrare;
 s 2 S este stare initiala;
0

 F  S este multimea starilor nale;


 Æ : S  ! S   fL; Rg; este functia de tranzitie, unde L; R ^nseamna
st^anga, respectiv dreapta.
De nitia 4.1.2 Se numeste con guratie (sau descriere instantanee) un cuv^ant
de forma s , unde ; 2  ; s 2 S: Semni catia acestei con guratii pentru
1 2 1 2

modelul masinii Turing este:

163
Masini Turing 164

 este cuv^antul de la ^nceput p^ana la capul de citire-scriere;


1

 s este starea unitatii de control;


 este cuv^antul de la simbolul vizat (imediat din dreapta lui s) p^ana la ultimul
2

simbol (diferit de blanc).


De nitia 4.1.3 Consideram relatia binara de nita pe multimea con guratiilor,
astfel:
daca x1 ::: xi 1 s xi ::: xn ; i 2 f1; :::; ng atunci
 daca Æ (s; xi ) = (s0 ; y; L) atunci
{ su xele de blancuri dispar (adica, de exemplu, putem sterge B B );
{ daca i = 1 atunci nu exista deplasare la st^anga;
{ daca 2  i  n atunci
x ::: xi s xi ::: xn
1 1 x ::: xi s0 xi y xi ::: xn
1 2 1 +1
M

 daca Æ (s; xi ) = (s0 ; y; R) atunci


x ::: xi s xi ::: xn
1 1 x ::: xi y s0 xi ::: xn
1 1 +1
M

 +
Consideram ^nchiderea re exiva si tranzitiva a relatiei (respectiv
^nchiderea tranzitiva a relatiei .)
De nitia 4.1.4 Fie M o masina Turing. De nim

L(M ) = fw= w 2  ; 9 s w 2  g:

s ; s 2 F; ;
0 1 2 1 2
M


!

^In notatiile din De nitia 4.1.4 avem:
daca F = ; atunci L(M ) = ;;
 daca F = S atunci L(M ) =  :
Teorema 4.1.1 Pentru orice masina Turing M , exista o gramatica G de tip 0 astfel
^nc^at L(M ) = L(G):
Demonstratie Se gaseste ^n [9, 11].
Exercitiul 4.1.1 Fie M = (fs0 ; s1 ; s2 ; s3 ; s4 g; f0; 1g; f0; 1; x; y; B g; Æ; s0; B; fs4 g) o
masina Turing cu functia de tranzitie de nita astfel:
Masini Turing 165

Æ 0 1 x y B
s (s ; x; R) ; ; (s ; y; R) ;
; ;
0 1 3

s 1 (s ; 0; R) (s ; y; L)
1 2 (s ; y; R) 1

s 2 (s ; 0; L)
2 ; (s ; x; R) (s ; y; L) ;0 2

s ; ; ; (s ; y; R) (s ; B; R)
; ; ; ; ;
3 3 4

s 4

a) Sa se arate ca L(M ) = f0n 1n = n  1g;


b) Folosind constructia din Teorema 4.1.1, sa se determine gramatica de tip 0
echivalenta cu M:
Solutie a) Fiind vorba de o egalitate de multimi, vom proceda prin dubla incluzi-
une. Procedeul este asemanator cu cel de la generari (acceptari) de limbaje de catre
gramatici, automate nite sau automate pushdown.
: Sa aratam ca 0n 1n 2 L(M ); 8 n  1: Consideram, mai ^nt^ai, cazul n = 3: Astfel,
avem
s 000111
0 xs 00111
1 x0s 0111
1 x00s 111 1 x0s 0y11 2

xs 00y11 s x00y11 xs 00y11 xxs 0y11 xx0s y11


2 2 0 1 1

xx0ys 11 xx0s yy1 xxs 0yy1 xs x0yy1 xxs 0yy1


1 2 2 2 0

xxxs yy1 xxxys y1 xxxy ys 1 xxxys yy xxxs yyy


1 1 1 2 2

xxs xyyy xxxs yyy xxxys yy xxxyys y xxxyyys


2 0 3 3 3

xxxyyyBs 4

Ajung^and astfel ^n starea s , care este nala, rezulta ca 0 1 2 L(M ):
4
3 3

^In general, consideram cuvinte de forma 0i 1i ; i  1 arbitrar. Avem


i ; i ;
s 0i 1i x s 0i 1i x 0i s 1i x 0i s 0 y 1i s x 0i y 1i
1 1
1 1 2 1 1 1
0 1 1 2 2

x s 0i y 1i
0
1 1

Astfel, vom demonstra prin inductie dupa j a rmatia:


 j i j j i j
P (j ) : \s 0i 1i x s 0 y 1 ; 0 0 8 j = 1; i:"
Pasul initial: A fost deja veri cat.
Pasul inductiv: Presupunem P (j ) adevarat, sa demonstram P (j +1): Conform pasului
inductiv, trebuie sa mai aratam ca
 j
xj s 0i j yj 1i j
0 x +1
s 0i j
0
1
yj +1
1i j 1

Aceasta tranzitie este imediata deoarece:


i ;
xj s 0i j yj 1i j xj s 0i j yj 1i j
1
+1 1
0 1
Masini Turing 166

i 1; i ;
xj 0i j yj s 1i j xj 0i j yj s y y 1i j
1
+1 1 +1 1 1 1
1 2

i ;
xj s x 0i j yj 1i j xj s 0i j yj 1i j
1
1 +1 1 +1 1 +1 1
2 0

Astfel, a rmatia P (j ) este veri cata pentru orice j = 1; i: Consideram acum cazul
\maximal", adica j = i: Avem
 i i
s 0i 1i xs y 0 0

De aici se continua ^n mod determinist astfel:


i ;
xi s yi xi y s yi xi yi s xi yi B s :
1
1
0 3 3 4

Deoarece s 2 F , rezulta deci ca 0i 1i 2 L(M ); 8 i 2 N :


4

: Fie w 2 L(M ): Trebuie sa aratam ca exista i 2 N astfel ^nc^at w = 0i 1i : Mai ^nt^ai,
sa observam ca w =  nu poate acceptat deoarece ne blocam. Apoi, sa observam ca
w nu ^ncepe cu simbolul 1, deoarece Æ(s ; 1) = ;: Deci w = 0i u; i  1; unde cuv^antul
u nu ^ncepe cu 0 (se mai noteaza u 6= 0). Distingem doua cazuri:
0
(1)

i ;
 Cazul I: u = . Rezulta s 0i x s 0i
1

0x 0i s blocaj, deoarece
1
1 1
1

Æ(s ; B ) = ;;
1

 Cazul II: u = 1j v; j  1 si v 6= 1 (adica primul simbol al lui v este diferit


(1)

de 1). Acum distingem trei subcazuri:


{ Subcazul II.1: i < j: Prin inductie dupa l se arata usor ca
 l i l l j l
s w x s 0 y 1 v; 1  l  i:
0 0

Demonstratia se face asemanator ca ^n propozitia P (j ) de mai sus. Lu^and


acum l = i obtinem
 i i j i i; i i j i
s w xs y 1 v
0 x y s 1 v blocaj
0 3

deoarece Æ(s ; 1) = ;; 3

{ Subcazul II.2: i > j: Prin inductie dupa l se arata ca


 l i l l j l
s w x s 0 y 1 v; 1  l  j; v 6= 1:
0 0
(1)

Alegem l = j si obtinem



s w 0 xj s 0i j yj v;
0
(1)
v 6= 1:
Aceasta tranzitie se continua astfel
i 1;
xj s 0 i j y j v
0 xj s 0i j
+1
1
1
yj v xj 0i j +1 1
yj s v
1

Dar (1)
v 6= 1 deci v =  sau (1)
v = 0:
Masini Turing 167

 II.2.1: Cazul v =  conduce la blocaj deoarece Æ (s1 ; B ) = ;:


 II.2.2: v = 0m v 0 ; m  1: Distingem iarasi doua cazuri:
 v0 = : Dupa m pasi ne blocam deoarece Æ(s ; B ) = ;: 1

 v0 = 1k v00 ; k  1: Conform situatiilor II.2.1 si II.2.2 avem k 


i j 1, ^n caz contrar ne blocam. Prin inductie se poate arata,
ca mai sus, ca
 i j m k i j
xj 0i j yj s 0m 1k v00
+1 1
xy s 0 1
1 3 v00 ( 1)

Dar Æ(s ; 0) = ;; deci ne blocam.


3

{ Cazul II.3: i = j: La fel, distingem doua cazuri.


 II.3.1: Cazul v = 0k v0 ; k  1 va conduce la o contradictie;
 II.3.2: Cazul v =  este acceptat si deci am obtinut w = 0i u =
0i 1i v = 0i 1i :
^In concluzie, cuvintele w cu proprietatea ca w 2 L(M ) au forma w = 0i 1i ; i  1: Cu
aceasta, demonstratia punctului a) s-a terminat.
b) Mai ^nt^ai, prezentam constructia din Teorema 4.1.1. Fie M = (S; ; ; Æ; s ; B; 0

F ) o masina Turing. Consideram gramatica G = (VN ; ; A ; P ) cu VN = (( [fg) 


) [ fA ; A ; A ; S g; iar regulile P de nite astfel:
1

1 2 3

1. A ! s A
1 0 2

2. A ! [a; a] A ; 8 a 2 
2 2

3. A ! A
2 3

4. A ! [; B ] A
3 3

5. A ! 
3

6. daca Æ(s; x) = (s0 ; y; R) atunci s [a; x] ! [a; y] s0 ; 8 a 2  [ fg;


7. daca Æ(s; x) = (s0 ; y; L) atunci [b; z ] s [a; x] ! s0 [b; z ] [a; y]; 8 a; b 2 [fg; 8 z 2
;
8. daca s 2 F atunci [a; x] s ! s a s; s [a; x] ! s a s; s ! ; 8 a 2 [fg; 8 x 2 :
Regulile 1-5 genereaza doua copii ale lui w, adica folosesc la obtinerea derivarii:
A =) s [a ; a ] [a ; a ] ::: [an ; an ] [; B ]m ;
G 1 0 1 1 2 2

1 2

unde w = a a ::: an 2  : Apoi, se demonstreaza a rmatia:

daca s a a ::: an 0 1 x x ::: xr s xr ::: xs atunci
2 1 2 1
M
s [a ; a ] [a ; a ] ::: [an ; an ] =) [a ; x ] [a ; x ] ::: [ar ; xr ] s [ar ; xr ] ::: [an m ; bn m ]
0 1 1 2 2
G 1 1 2 2 1 1 + +

Astfel, pentru masina Turing din Exercitiul 4.1.1, obtinem gramatica G =


(VN ; f0; 1g; A ; P ) unde:
1
Masini Turing 168

 VN = f[0; 0]; [0; 1]; [0; x]; [0; y]; [0; B ]; [1; 0]; [1; 1]; [1; x]; [1; y]; [1; B ]; [; 0]; [; 1];
[; x]; [; y]; [; B ]; A ; A ; A ; s ; s ; s ; s ; s g;
1 2 3 0 1 2 3 4

 regulile P :
{ regulile care creaza copiile:
 A !s A
1 0 2

 A ! [0; 0] A
2 2

 A ! [1; 1] A
2 2

 A !A 2 3

 A ! [; B ] A
3 3

 A ! 3

{ regulile ce deriva din tranzitii:


 din tranzitia Æ(s ; 0) = (s ; x; R) construim regulile:
0 1

 s [0; 0] ! [0; x] s
0 1

 s [1; 0] ! [1; x] s
0 1

 s [; 0] ! [; x] s
0 1

 la fel celelalte tranzitii ^n care capul de citire-scriere se misca la dreapta


s.a.m.d.;
 din tranzitia Æ(s ; 1) = (s ; y; L) construim regulile:
1 2

 [0; 0] s [0; 0] ! s [0; 0] [0; y]


1 2

 [0; 0] s [1; 0] ! s [0; 0] [1; y]


1 2

 [0; 0] s [; 0] ! s [0; 0] [; y]


1 2

 [1; 0] s [0; 0] ! s [1; 0] [0; y]


1 2

 [1; 0] s [1; 0] ! s [1; 0] [1; y]


1 2

 [1; 0] s [; 0] ! s [1; 0] [; y]


1 2

 [; 0] s [0; 0] ! s [; 0] [0; y]


1 2

 [; 0] s [1; 0] ! s [; 0] [1; y]


1 2

 [; 0] s [; 0] ! s [; 0] [; y]


1 2

 [0; 1] s [0; 0] ! s [0; 1] [0; y] s.a.m.d.


1 2

 la fel celelalte tranzitii ^n care capul de citire-scriere se misca la st^anga


s.a.m.d.; pentru gramatica noastra sunt 45 de reguli asociate unei
tranzitii la st^anga;
{ regulile asociate starilor nale:
 s !4

 [0; 0] s ! s 0 s
4 4 4

 [0; 1] s ! s 0 s
4 4 4

 [0; x] s ! s 0 s
4 4 4

 [0; y] s ! s 0 s
4 4 4

 [0; B ] s ! s 0 s
4 4 4
Masini Turing 169

 [1; 0] s ! s 1 s
4 4 4

 [1; 1] s ! s 1 s
4 4 4

 [1; x] s ! s 1 s
4 4 4

 [1; y] s ! s 1 s
4 4 4

 [1; B ] s ! s 1 s
4 4 4

 [; 0] s ! s s
4 4 4

 [; 1] s ! s s
4 4 4

 [; x] s ! s s
4 4 4

 [; y] s ! s s
4 4 4

 [; B ] s ! s s
4 4 4

Astfel, am obtinut o gramatica echivalenta cu M care are 178 de reguli si 19 netermi-
nali. De altfel, limbajul L(M ) poate generat de o gramatica cu numai doua reguli
si un neterminal (vezi Exercitiul 1.2.1).
Exercitiul 4.1.2 Sa se calculeze numarul de neterminali si de reguli din constructia
prezentata ^n Exercitiul 4.1.1, punctul b).
Solutie Fie M = (S; ; ; Æ; s ; B; F ). Din constructia prezentata ^n Exercitiul
0

4.1.1 rezulta ca numarul de neterminali este egal cu


(jj + 1)  j j + jS j + 3;
iar numarul de reguli este egal cu
4 + jj + jfÆ(s; x) = (s0 ; y; R)gj  (jj + 1) + jfÆ(s; x) = (s0 ; y; L)gj  (jj + 1) 2
 j j+
+jF j  (1 + (jj + 1)  j j):

Exercitiul 4.1.3 Fie M =(fs ; s ; s ; s ; s ; s ; s ; s g; f0; 1g; f0; 1; B g; Æ; s ; B; fs g)


0 1 2 3 4 5 6 7 0 7

o masina Turing cu functia de tranzitie de nita astfel:


Æ 0 1 B
s
0 (s ; B; R) (s ; B; R)
1 2 (s ; B; R)
7

s
1 (s ; 0; R) (s ; 1; R)
1 1 (s ; B; L)
3

s
2 (s ; 0; R) (s ; 1; R)
2 2 (s ; B; L)
4

s
3 (s ; B; L)
5 ; ;
s
4 ; (s ; B; L) 6 ;
s
5 (s ; 0; L) (s ; 1; L)
5 5 (s ; B; R)
0

s (s ; 0; L) (s ; 1; L) (s ; B; R)
; ; ;
6 6 6 0

s
7

e w 2 f0; 1g g;
Sa se arate ca L(M ) = fw w=
Masini Turing 170

Solutie Fiind vorba de egalitate de multimi, vom proceda prin dubla incluziune.
e w 2 f0; 1gg, vom demonstra c
: Pentru a arata ca L(M )  fw w= a pentru orice n,
n  1 are loc a rmatia:
n ; 4 +1

(1) s i i ::: in in ::: i i


0 1 2 s i ::: in in ::: i
2 1 0 2 2

Distingem doua cazuri:


 Cazul I: i1 = 0. Avem urmatoarele tranzitii ^ntre con guratii:
2 n 1 ;
s 0 i ::: in in ::: i 0 s i ::: in in ::: i 0
0 2 2 1 2 2

2n ; 1

i ::: in in ::: i 0 s i ::: in in ::: i s 0


2 2 1 2 2 3

n ; 2 2

i ::: in in ::: s i
2 5 s B i ::: in in ::: i
2 5 2 2

s i ::: in in ::: i
0 2 2

 Cazul II: i = 1. Analog cu cazul I, numai ca vom trece prin starile s ; s ; s ;
1 2 4 6

si ^n nal s :


0

Aplic^and acum a rmatia (1) pentru i ; i ; :::; in ori, rezulta ca:


1 2


(2) s i i ::: in in ::: i i
0 1 2 s 2 1 0

De aici ajungem^n con guratia s , si cum s este stare nala, rezulta ca toate cuvintele
de forma i i ::: in in ::: i i , unde ij 2 f0; 1g; 8 j = 1; n:
7 7

1 2 2 1

: Sa aratam ca singurele cuvinte acceptate de M sunt de forma u ue; u 2 f0; 1g:
Fie w 2 L(M ): Distingem mai multe cazuri:
 Cazul I: w =  este acceptat deoarece s0 s , si s este stare nala; 7 7

 Cazul II: w ^ncepe cu simbolul 0, adica w = 0 w0 : Notam w0 = w a; a 2 f0; 1g: 1

Avem tranzitiile deterministe:


 0
s 0 w0 s w0
0 ws w s a 1 1 1 3

{ Daca a = 1 atunci ne blocam deoarece Æ(s ; 1) = ;; 3

{ Daca a =  atunci ne blocam deoarece Æ(s ; B ) = ;; 3

{ Daca a = 0 atunci obtinem



w s a s Bw s w
1 3 5 1 0 1

 Cazul III: w ^ncepe cu simbolul 1, adica w = 1 w0 : Notam w0 = w1 a; a 2 f0; 1g:


Analog ca ^n cazul II, se arata ca a = 1:
Masini Turing 171

Aplic^and de un numar nit de pasi cazurile II, III ajungem la con guratia s care, 0

conform cazului I, trece ^n s . Cuv^antul w are deci forma


7

w = i w i = i i w i i = ::: = i i ::: in in i i ;


1 1 1 1 2 2 2 1 1 2 2 1

unde i ; i ; ::; in 2 f0; 1g:



1 2

! Putem ^mbunatati masina Turing din Exercitiul 4.1.3 av^and ^n vedere liniile
corespunzatoare starilor s si s . Fie
5 6

M = (fs ; s ; s ; s ; s ; s ; s g; f0; 1g; f0; 1; B g; Æ; s ; B; fs g)


0 1 2 3 4 5 6 0 6

masina Turing cu functia de tranzitie de nita astfel:


Æ 0 1 B
s 0 (s ; B; R) (s ; B; R)
1 2 (s ; B; R)
6

s 1 (s ; 0; R) (s ; 1; R)
1 1 (s ; B; L)
3

s (s ; 0; R) (s ; 1; R) (s ; B; L)
; ;
2 2 2 4

s 3 (s ; B; L)
5

s 4 ; (s ; B; L) 5 ;
s (s ; 0; L) (s ; 1; L) (s ; B; R)
; ; ;
5 5 5 0

s 6

Se poate demonstra asemanator ca la Exercitiul 4.1.3, ca L(M ) = fw w=


e w 2
f0; 1gg:
~ O alta ^mbunatatire, dar de data aceasta este vorba de o ^njumatatire a numarului
de pasi necesare acceptarii (sau neacceptarii) unui cuv^ant (Exercitiul 4.4.2).
Exercitiul 4.1.4 Sa se construiasca o masina Turing M = (S; ; ; Æ; s ; B; F ) care
sa accepte limbajul L = fw w= w 2 f0; 1gg si demonstrati ca L = L(M ):
0

(Exercitiile 1.2.7, 1.3.36)


Solutie (Solutie data de studentul Butuc Adrian Nicolae, Facultatea de Informatica,
Iasi)
Fie masina Turing M = (fs ; s ; :::; s g; f0; 1g; f0; 1; x; y; z; B g; Æ; s ; B; fs g)
0 1 13 0 13

unde functia de tranzitie Æ este data ^n tabelul de mai jos:


Masini Turing 172

Æ 0 1 x y z B
s 0 (s ; x; R) (s ; y; R)
1 1 (s ; x; L)
4 (s ; y; L)
4 (s ; B; R)
13

s 1 (s ; 0; R) (s ; 1; R)
1 1 (s ; x; L)
2 (s ; y; L)
2 (s ; B; L)
2

s 2 (s ; x; L) (s ; y; L)
3 3

s 3 (s ; 0; L) (s ; 1; L)
3 3 (s 0 ; x; R) (s 0 ; y; R)
s 4 (s 5 ; z; R) (s 6 ; z; R) (s 4 ; z; L)
s 5 (s 7 ; x; R) (s 7 ; y; R) (s 5 ; z; R)
s 6 (s 8 ; x; R) (s 8 ; y; R) (s 6 ; z; R)
s 7 (s 7 ; x; R) (s 7 ; y; R) (s 9 ; z; L) (s ; B; L)
9

s 8 (s 8 ; x; R) (s 8 ; y; R) (s 10 ; z; L) (s ; B; L)
10

s 9 (s 11 ; z; L)
s 10 (s ; z; L) 11

s 11 (s ; x; L) (s ; y; L) (s ; z; R)
12 12 13

s 12 (s ; x; L) (s ; y; L) (s ; z; R)
12 12 4

s 13

: Mai ^nt^ai, demonstram incluziunea L  L(M ): Avem  2 L. Veri cam daca


 2 L(M ): Evident avem s s , deci  2 L(M ): 0 13

Fie acum un cuv^ant oarecare u din L(M ), de forma u = i ::: im : Distingem doua 1

cazuri:
 Cazul I: Presupunem m de forma 2  h + 1; h 2 N: Con guratia initiala este
s i ::: i h :
0 1 2 +1

{ Daca i = 0 obtinem s 0 i ::: i h


1 0 2 2 +1 x s i ::: i h :
1 2 2 +1

{ Daca i = 1 obtinem s 1 i ::: i h


1 0 2 2 +1 y s i ::: i h :
1 2 2 +1

Starea s realizeaza doar deplasari la dreapta peste simbolurile 0 si 1, deci


1

obtinem:

{ x s i ::: i h
1 2 x i ::: i h s x i ::: i h s i h ; respectiv
2 +1 2 2 +1 1 2 2 2 2 +1


{ y s i ::: i h
1 2 y i ::: i h s y i ::: i h s i h :
2 +1 2 2 +1 1 2 2 2 2 +1

Pentru a usura demonstratia, vom nota x sau y cu i0k , unde i0k = x daca i0k = 0,
respectiv i0k = y daca i0k = 1. Deci putem scrie:
 0
s i ::: i h
0 1 i0 s i ::: i h
2 +1 i i ::: i h s i0 i ::: i h s i h :
1 1 2 2 +1 1 2 2 +1 1 1 2 2 2 2 +1

Starea s transforma 0 ^n x, respectiv 1 ^n y si realizeaza o parcurgere la st^anga,


deci obtinem con guratia i0 i ::: i h s i h i0 h :
2

1 2 2 1 3 2 2 +1

Utiliz^and starea s ne putem deplasa la st^anga peste simbolurile 0 si 1, oprirea


3

realiz^andu-se la ^nt^alnirea unui simbol x sau y. Avem deci:


  0
i0 i ::: i h s i h i0 h
1 2 2 1 s i0 i ::: i h i h i0 h
3 2 2 +1
i s i ::: i h i h i0 h
3 1 2 2 1 2 2 +1 1 0 2 2 1 2 2 +1
Masini Turing 173

pentru ca avem Æ(s ; x) = (s ; x; R) si Æ(s ; y) = (s ; y; R):


3 0 3 0

Urm^and rationamentul anterior si av^and Æ(s ; x) = (s ; x; L) si Æ(s ; y) = 1 2 1

(s ; y; L) obtinem
2

 0 0
i0 s i ::: i h i h i0 h
1 0 2 2 i i s i ::: i h i0 h i0 h
1 2 2 +1 1 2 0 3 2 1 2 2 +1

Numim un s-ciclu seria de tranzitii dintre doua con guratii succesive ^n care
starea masinii Turing este s, iar simbolurile vizate sunt de acelasi tip (adica 0; 1
sau x; y). Vom demonstra prin inductie matematica dupa numarul de s cicli 0

ca
(1) daca o con guratie contine s atunci este de forma 0

i0 ::: i0 s ik ::: i h k i0
1 k 0 ::: i0 ; +1 2 +1 2 h+2 k 2 h+1
unde 0  k  h.
Notam cu n acest numar si punem conditia n  h:
Baza inductiva: Am aratat anterior a rmatia (1) pentru n = 1.
Pasul inductiv: Presupunem a rmatia (1) adevarata pentru n si o demonstram
pentru n+1; n < h. Se poate usor observa ca aplic^and primii n cicli con guratiei
initiale obtinem con guratia
i0 ::: i0 s in ::: i h n i0
1 n 0 ::: i0 ; +1 2 +1 2 h+2 n 2 h+1
care trece ^n
i0 ::: i0n i0n s in ::: i h n i0 h n ::: i0 h :
1 +1 1 +2 2 +1 2 +2 2 +1

Folosind faptul ca starea s realizeaza deplasari la dreapta peste simbolurile 0


1

si 1, obtinem con guratia


i0 ::: i0n i0n in ::: i h n s i0 h n ::: i0 h ;
1 +1 +2 2 +1 1 2 +2 2 +1

care trece ^n


i0 ::: i0n i0n in ::: i h n s i h
1 +1 +2 2 2 2 +1
0
n i2h+2 n ::: i2h+1 ;
0
de unde obtinem
i0 ::: i0n i0n in ::: s i h n i0 h
1 +1 +2 3 2 2 +1
0
n i2h+2 n ::: i2h+1 :
0
Din faptul ca s realizeaza aceeasi operatie ca si s , dar spre st^anga, obtinem
3 1

con guratia
i0 ::: i0n s i0n in ::: i h n i0 h n i0 h n ::: i0 h ;
1 3 +1 +2 2 2 +1 2 +2 2 +1

care trece ^n


i0 ::: i0n i0n s in ::: i h n i0 h
1 +1 0 +2 2 2 +1
0
n i2h+2 n ::: i2h+1 ;
0
Masini Turing 174

Asadar, a rmatia (1) este complet demonstrata.


Folosind a rmatia anterioara obtinem:
 0 0
s i ::: i h 0 1i ::: ih s ih i0h ::: i0 h
2 +1 1 0 +1 +2 2 +1

i0 ::: i0h i0h s i0h ::: i0 h


1 +1
i0 ::: i0h s i0h i0h ::: i0 h :
1 +2 2 +1 1 2 +1 +2 2 +1

Deoarece Æ nu este de nita pentru perechi de forma (s ; x), respectiv (s ; y), 2 2

se obtine un blocaj, deci cuvintele u de lungime impara nu sunt acceptate de


masina Turing M .
 Cazul II: Consideram cuvintele u = i ::: im ; din f0; 1g; unde m = 2h: Ca si ^n 1

cazul precedent avem sirul de tranzitii:


 0 0
s i ::: i h i ::: ih s i0h ::: i0 h :
0 1 2 +1 1 0 +1 2

Deoarece Æ(s ; x) = (s ; x; L) si Æ(s ; y) = (s ; y; L) obtinem con guratia


0 4 0 4

i0 ::: i0h s i0h i0h ::: i0 h : 1 1 4 +1 2

^In continuare, vom demonstra prin inductie matematica dupa n numarul de


s cicli ca
4

(2) daca o con guratie contine starea s ; atunci este de forma 4

i0 ::: i0 s i0 z ::: z i0 ::: i0 z ::: z ;


1 k 1 4 k | {z } h+1 h+k | {z }
h k h k
unde 1  k  h, si ^n conditiile ^n care i0k p = i0h k p ; 1  p  h k: + + +

Baza inductiva: n = 1 =) k = h 1 si avem i0h = i0 h : 2

{ Subcazul 1. i0 = x; atunci obtinem


h
i0 ::: i0h s x i0h ::: i0 h x i0 ::: i0h z s i0h ::: i0 h x:
1 1 4 +1 2 1 1 1 5 +1 2 1

Deoarece Æ(s ; x) = (s ; x; R) si Æ(s ; y) = (s ; y; R), atunci urmatoarea


5 7 5 7

con guratie este


i0 ::: i0 z i0 s i0 ::: i0 x: 1 h 1 h+1 7 h+2 2h 1

Avem Æ(s ; x) = (s ; x; R) si Æ(s ; y) = (s ; y; R), deci vom obtine


7 7 7 7

i0 ::: i0h z i0h i0h ::: i0 h x s i0 ::: i0h z i0h i0h ::: i0 h s x;
1 1 +1 +2 2 1 7 1 1 +1 +2 2 1 9

deoarece Æ(s ; B ) = (s ; B; L):


7 9

Avem Æ(s ; x) = (s ; z; L); Æ(s ; x) = (s ; x; L) si Æ(s ; y) = (s ; y; L)


9 11 11 12 11 12

care determina sirul de tranzitii


i0 ::: i0 z i0 i0 ::: i0 s x i0 ::: i0 z i0 i0 ::: s i0 z
1 h 1 h+1 h+2 2 h 1 9 1 h 1 h+1 h+2 11 2 h 1
Masini Turing 175

i0 ::: i0h z i0h i0h ::: s i0 h i0 h z


1 1 +1 +2 12 2 2 2 1

Deoarece Æ(s ; x) = (s ; x; L); Æ(s ; y) = (s ; y; L) si Æ(s ; z ) =


12 12 12 12 12

(s ; z; L) obtinem
4


i0 ::: i0h z i0h i0h ::: s i0 h i0 h z
1 1 +1 +2 12 2 2 2 1

 0 0
i ::: ih s z i0h i0h ::: i0 h i0 h z
1 1 12 +1 +2 2 2 2 1

i0 ::: i0h s i0h z i0h i0h ::: i0 h i0 h z


1 2 4 1 +1 +2 2 2 2 1

{ Subcazul 2. i0h = y se trateaza ^n acelasi mod, cu singura deosebire ca ^n
locul starilor s ; s ; s se utilizeaza starile s ; s ; s . Deci a rmatia (2)
5 7 9 6 8 10

este adevarata pentru n = 1.


Pasul inductiv: Presupunem a rmatia (2) adevarata pentru n si realizam
demonstratia pentru cazul n + 1:
Din ipoteza avem ih p = i h p; 0  p 2 n 1 si aplic^and ipoteza inductiva
pentru n obtinem

i0 ::: i0h s i0h i0h i0h ::: i0 h i0 h
1 1 4 +1 +2 2 1 2

 0 0
1
::: z} i0h i0h ::: i0 h n z| {z
i ::: ih n s i0h n z| {z 1 4 ::: z} +1 +2 2

n n
{ Subcazul 1. i0h n = i0 h n = x: Obtinem con guratia
2

i0 ::: i0h n z s z| {z
1
::: z} i0h i0h ::: i0 h n z| {z
1
::: z}
5 +1 +2 2

n n
Repet^and rationamentul din baza inductiei si, ^n plus, folosind relatiile
Æ(s ; z ) = (s ; z; R); Æ(s ; z ) = (s ; z; L) si Æ(s ; z ) = (s ; z; L) obtinem
5 5 7 9 4 4

sirul de tranzitii:

i0 ::: i0h n z s z| {z
1
::: z} i0h i0h ::: i0 h n z| {z
1 5 ::: z} +1 +2 2

n n
 0 0
i ::: ih n
1 1
::: z} s i0h i0h ::: i0 h n z| {z
z| {z 5 +1
::: z}
+2 2

n+1 n

i0 ::: i0h n
1 1
::: z} i0h s i0h ::: i0 h n z| {z
z| {z +1 7 ::: z}
+2 2

n+1 n
 0 0
i ::: ih n
1 1
::: z} i0h i0h ::: i0 h n s z| {z
z| {z +1
::: z}
+2 2 7

n+1 n
Masini Turing 176

i0 ::: i0h n
1 1
::: z} i0h i0h ::: s i0 h n z| {z
z| {z +1 +2
::: z} 9 2

n+1 n
i0 ::: i0h n
1 1
::: z} i0h i0h ::: s i0 h n
z| {z +1 +2 11 2 1
z| {z
::: z}
n+1 n+1

i0 ::: i0h n
1 1
::: z} i0h i0h ::: s i0 h n i0 h n
z| {z +1 +2 12 2 2 2 1
z| {z
::: z}
n+1 n+1
 0 0 
i ::: ih n
1 1
::: z} s i0h i0h ::: i0 h n i0 h n
z| {z 12 +1 +2 2 2 2 1
z| {z
::: z}
n n+1
 0 0 
i ::: ih n
1 1
::: z} s z z i0h i0h ::: i0 h n i0 h n
z| {z 4 +1 +2 2 2 2 1
z| {z
::: z}
n 1 n+1
 0 0
i ::: ih n s i0h n
1 2 4 1
::: z} i0h i0h ::: i0 h n i0 h n
z| {z +1 +2 2 2 2 1
z| {z
::: z}
n+1 n+1
Ultima con guratie reprezinta ceea ce trebuia obtinut.
{ Subcazul 2. i0h n = i0 h n = y se trateaza analog, folosind ^n loc de starile
2

s ; s ; s starile s ; s ; respectiv s :
5 7 9 6 8 10

^In concluzie, a rmatia (2) este complet demonstrata.


Fie u = i :::i h cu proprietatea i0h p = i0 h p ; 0  p  k
1 2 2
1; i0h k =
6 i0 h k : 2

Distingem doua cazuri:


{ Subcazul 1) pentru 0  k  h 2: Avem con guratia
i0 ::: i0h k i0h k ::: i0h s i0h i0h ::: i h k i h k ::: i0 h
1 +1 1 4 +1 2 2 +1 2

si aplicam a rmatia (2) pentru k: Obtinem con guratia


i0 ::: i0 1
s i0 z ::: z i0 ::: i h k z ::: z
h k 1 4 h k | {z } h+1 2
| {z }
k k
a) Presupunem i0h k = x si i0 h k = y: Atunci avem sirul de tranzitii:
2

i0 ::: i0h k s i0h k z| {z


1
::: z} i0h ::: i h k z| {z
1 4 ::: z} +1 2

k k

1
::: z} i0h ::: i h k z| {z
i0 ::: i0h k z s z| {z 1 5 ::: z} +1 2

k k
 0 0
i ::: ih k
1 1
::: z} s i0h ::: i h k z| {z
z| {z 5 +1
::: z} 2

k+1 k

i0 ::: i0h k
1 1
::: z} i0h s i0h ::: i h k i h k z| {z
z| {z +1 7 ::: z}
+2 2 1 2

k+1 k
Masini Turing 177

 0 0
i ::: ih k
1 1
::: z} i0h ::: i0 h k i0 h k s z| {z
z| {z +1
::: z}
2 1 2 7

k+1 k
i0 ::: i0h k
1 1
z ::: z i0
| {z } +1
0
h ::: i h k 2 1
s i0 h k s z| {z
9 2
::: z} 7

k+1 k
Deoarece i0 h k = y si Æ(s ; y) = ; rezulta ca avem blocaj.
2 9

b) Situatia i0h k = y si i0 h k = x se trateaza analog, folosind starile


s ; s ; s ^n loc de s ; s ; respectiv s si av^and faptul ca Æ(s ; x) = ;.
2

6 8 10 5 7 9 10

Rezulta acelasi rezultat.


{ Subcazul 2) pentru k = h 1 obtinem i0 6= i0h si i0j = i0h j ; j = 2; h: Din 1 +1 +

a rmatia (2) aplicata pentru h 1 se obtin tranzitiile



i0 ::: i0h s i0h i0h ::: i0 h
1 1
::: z} i0h z| {z
s i0 z| {z
4 ::: z} +1 2 4 1 +1

h 1 h 1

a) Presupunem i0 = x si i0h 1 +1


= y: Obtinem

s x z| {z
4 ::: z} y z| {z
::: z} z s z| {z
::: z} y z| {z
5 ::: z} z| {z
::: z} s y z| {z
::: z}
5

h 1 h 1 h 1 h 1 h h 1

z| {z
::: z} y s z| {z
::: z} 7 z| {z
::: z} s y z| {z
::: z};9

h h 1 h h 1

ceea ce conduce la blocaj deoarece Æ(s ; y) = ;: 9

b) Situatia i0 = y si i0h = x se trateaza analog, folosindu-se starile


1 +1

s ; s ; s ^n loc de s ; s ; respectiv s :


6 8 10 5 7 9

^In concluzie, cuv^antul u trebuie sa e de forma w w; w 2 f0; 1g pentru a acceptat
de masina M . Asadar L  L(M ):
: Vom demonstra incluziunea L  L(M ): Fie u = i ::: i h ; ik = ik h ; k = 1; h:
Avem u 2 Lnfg: Folosind a rmatiile de la pasul 1, obtinem tranzitiile
1 2 +

 0 0
s i ::: i h
0 1 2 i ::: ih s i0h ::: i0 h
1 0 +1 2
i0 ::: i0h s i0h ih ::: i0 h
1 1 4 +1 2

Aplicam a rmatia (2) pentru h 1 si obtinem



i0 ::: i0h s i0h ih ::: i0 h
1 1
s i0 z| {z
4 ::: z} ih +1 2 4 1 +1 z| {z
::: z}
h 1 h 1

a) i0 = i0h
1 +1
= x: Obtinem

s x |z {z
4 ::: z} x z| {z
::: z} z s z| {z
::: z} x z| {z
5 ::: z} z| {z
::: z} s x z| {z
::: z}
5

h 1 h 1 h 1 h 1 h h 1
Automate liniar marginite 178

z| {z
::: z} x s z| {z
7 ::: z} z| {z
::: z} s x z| {z
9 ::: z} z| {z
::: z} s z| {z
11 ::: z}
h h 1 h h 1 h 1 h+1
Avem Æ(s ; z ) = (s ; z; R), deci obtinem con guratia
11 13

::: z} s z| {z
z| {z 13 ::: z}
h h
si cum s este stare nala, rezulta ca u este acceptat.
13

b) Situatia i0 = i0h = y se trateaza analog.


1 +1


^In concluzie, 8 u 2 L fg; avem u 2 L(M ): Deoarece  2 L(M ) (am demonstrat la


pasul 1), obtinem ca L = L(M ):
! Pentru masina Turing M de mai sus se poate micsora numarul de simboluri din
alfabetul folosindu-se ^n loc de z; unul din simbolurile 0 sau 1. Noua masina Turing
se obtine din M prin ^nlocuirea doar a simbolului z , de ecare data c^and este ^nt^alnit
^n matricea de de nitie a lui Æ , cu unul din simbolurile 0 sau 1.

4.2 Automate liniar marginite


De nitia 4.2.1 Un automat liniar marginit (Linear Bounded Automata, pres-
curtat LBA) este o masina Turing nedeterminista care satisface ^n plus urmatoarele
doua conditii:
1) alfabetul de intrare  contine doua simboluri speciale @ si $;
2) masina Turing nu poate face miscari la st^anga lui @ si la dreapta lui $ (adica
Æ(s; @) = (s0 ; @; R); respectiv Æ(s; $) = (s0 ; $; L)).
De nitia 4.2.2 Limbajul acceptat de automatul liniar marginit M este:

L(M ) = fw= w 2 nf@; $g; s @ w$ s ; s 2 F; ; 2  g
0 1 2 1 2
M
De nitia 4.2.3 O gramatica se numeste monotona daca regulile sale sunt de forma
! , unde j j  j j:
Teorema 4.2.1 Pentru orice automat liniar marginit M exista o gramatica mono-
tona G astfel ^nc^at L(G) = L(M ):
O importanta deosebita ^n automate liniar marginite o are Teorema 4.2.1 a carei
demonstratie se gaseste ^n [8, 9, 11]. ^In sectiunea 4.3, vom vedea un procedeu de
determinare a unei gramatici dependente de context echivalente cu una monotona.
Exercitiul 4.2.1 Fie M = (fs ; s ; s ; s ; s ; s g; f0; 1g; f0; 1; x; y; @; $g; Æ; s ; f@; $g;
fs g) un automat liniar marginit cu functia de tranzitie de nita astfel:
0 1 2 3 4 5 0

5
Automate liniar marginite 179

Æ @ 0 1 x y $
s (s ; @; R) ; ; ; ; ;
; ; ; ;
0 1

s 1 (s ; x; R)
2 (s ; y; R) 4

s 2 ; (s ; 0; R) (s ; y; L)
2 3 (s ; y; R) ; ; 2

s ; (s ; 0; L) ; (s ; x; R) (s ; y; L) ;
; ; ; ;
3 3 1 3

s 4 (s ; y; R) (s ; $; L)
4 5

s 5 ; ;; ; ; ;
a) Sa se arate ca L(M ) = f0n 1n = n  1g;
b) Folosind constructia din Teorema 4.2.1, sa se determine gramatica monotona
echivalenta cu M:
Solutie a) Acest punct rezulta imediat. Singurele deosebiri fata de masina Turing
din Exercitiul 4.1.1 sunt:
 c^and se pleaca din starea initiala s ajungem ^n starea s , nemaiput^and ajunge
0 1

vreodata ^n s ; ^n continuare, activitatea automatului liniar marginit se va


0

desfasura numai ^n starile s ; s ; s ; s ; s ;


1 2 3 4 5

 c^and se ajunge ^n starea s si este vizat simbolul $, trecem ^n starea s si facem
4 5

un pas ^napoi pentru ca nu putem depasi simbolul $.


Asadar L(M ) = f0n 1n= n  1g.
b) Prezentam constructia din Teorema 4.2.1, unde LMON ^nseamna clasa limbajelor
generate de gramatici monotone. Fie M = (S; ; ; Æ; s ; f@; $g; F ) un automat liniar
0

marginit. Consideram gramatica G = (VN ; ; A ; P ) cu 1

  [ [ 
VN =   (S [ fg)  f@g  ( [ )   f; $g (S [ fg)  (f$g [ ) [fA ; A g;
1 2

iar regulile P de nite astfel:


1. A ! [a; s @ a] A ; 8 a 2 
1 0 2

2. A ! [a; a] A ; 8 a 2 
2 2

3. A ! [a; a $]; 8 a 2 
2

4. daca Æ(s; @) = (s0 ; @; R) atunci [a; s @ x] ! [a; @ s0 x]; 8 a 2 ; 8x2 ;


5. daca Æ(s; x) = (s0 ; y; R) atunci ^n P se adauga regulile
{ [a; s x] [b; z ] ! [a; y] [b; s0 z ]; 8 a; b 2 ; 8 z 2 ;
{ [a; @ s x] [b; z ] ! [a; @ y] [b; s0 z ]; 8 a; b 2 ; 8 z 2 :
6. daca Æ(s; x) = (s0 ; y; L) atunci ^n P se adauga regulile
{ [b; z ] [a; s x] ! [b; s0 z ] [a; y]; 8 a; b 2 ; 8 z 2 ;
{ [a; @ s x] ! [a; s0 @ y] 8 a 2 :
Legatura dintre gramatici dependente de context si gramatici monotone 180

7. daca Æ(s; $) = (s0 ; $; L) atunci adaugam ^n P regulile [b; z ] [a; s $] !


[b; s0 z ] [a; $]; 8 a; b 2 ; 8 z 2 ;
8. daca s 2 F atunci avem regulile corespunzatoare
{ [a; s ] ! a; 8 ; 2 ;
{ [a; ] b ! a b; 8 a; b 2 ; 8 2 $[@ ;
{ b [a; ] ! b a; 8 a; b 2 ; 8 2 $[@ ;
Regulile 1-3 genereaza doua copii ale lui w, care folosesc la obtinerea derivarii:
A =) [a ; s @ a ] [a ; a ] ::: [a ; a $]; n n
1
G 1 0 1 2 2

unde w = a a ::: an 2  : Apoi, se demonstreaza a rmatia:


1 2


daca s @ a a ::: an $
0 1@ x x ::: xr s xr ::: xn $ atunci
2 1 2 1
M

[a ; s @ a ] [a ; a ] ::: [an ; an $] =) [a ; @ x ] [a ; x ] ::: [ar ; xr ] [ar ; s xr ] ::: [an ; bn $]


1 0 1 2 2
G 1 1 2 2 1 1

^In continuare, pentru automatul din exercitiul nostru se procedeaza la fel ca ^n
Exercitiul 4.1.1.
Exercitiul 4.2.2 Sa se calculeze numarul de neterminali si de reguli din constructia
prezentata ^n Exercitiul 4.2.1, punctul b).
Solutie Fie M = (S; ; ; Æ; s ; f@; $g; F ). Din constructia prezentata ^n Exercitiul
0

4.2.1 rezulta ca numarul de neterminali este egal cu


2 + jj  ((jS j + 1)  (jj + 2  j j + 1) + 2  jj)
iar numarul de reguli este egal cu
3  jj + jj  jj  jfÆ(s; @) = (s0 ; @; R)gj + 2  jj  j j  jfÆ(s; x) = (s0 ; y; R)gj+
2

+jj  (jj  j j + 1)  jfÆ(s; x) = (s0 ; y; L)gj + j j  j j  jfÆ(s; $) = (s0 ; $; L)gj+


2

+jF j  (jj  j j + 2  jj  j j):


2 2

4.3 Legatura dintre gramaticile dependente de con-


text si gramaticile monotone
^In aceasta sectiune, vom prezenta c^ateva rezultate ce implica
 \Clasa limbajelor generate de gramatici dependente de context (care nu contin
cuv^antul vid) este egala cu clasa limbajelor generate de gramatici monotone".
Legatura dintre gramatici dependente de context si gramatici monotone 181

De nitia 4.3.1 O gramatica G = (VN ; VT ; x0 ; P ) este ^n forma standard daca


orice regula a gramaticii G este ^n una din formele:
 ! ; unde ; 2 VN ; +

 A ! a unde A 2 VN ; a 2 VT [ fg:
Teorema 4.3.1 Pentru orice gramatica G; exista o gramatica G0 ^n forma standard
echivalenta cu G:
Demonstratie Fie G = (VN ; VT ; x ; P ) (care nu este ^n forma standard). Vom
atasa ecarui simbol i 2 VT simbolul xi 2= VN [ VT (deci un simbol neterminal nou)
0

si consideram gramatica G0 = (VN0 ; VT ; x ; P 0 ) cu VN0 = VN [ fxi = i 2 VT g: Pentru


de nirea regulilor P 0 , consideram aplicatia : VT [ VN ! VN0 de nita astfel:
0


(i) = ix dac a i 2 VN
i daca i 2 VT
Evident se poate extinde la cuvinte astfel:
Daca u = u u ::: uk atunci (u) = (u ) (u ) ::: (uk ):
1 2 1 2

Consider^and regulile P 0 = f (u) ! (v)= u ! v 2 P g[fxi ! i= i 2 VT g; se obtine ca


L(G) = L(G0 ): Ideea de demonstratie este preluata din [9], iar demonstratia completa
se gaseste ^n [11].
De nitia 4.3.2 Fie G = (VN ; VT ; x ; P ) o gramatica. Se numeste ponderea gra-
0

maticii G numarul
pond(G) = maxfj j= ! 2 P g:
Teorema 4.3.2 Pentru orice gramatica monotona G = (VN ; VT ; x ; P ) exista o gra-
matica monotona G0 = (VN0 ; VT ; x ; P 0 ) cu ponderea cel mult egala cu 2 astfel ^nc^at
0

L(G) = L(G0 ):
0

Demonstratie Stim deci ca G are regulile de tipul ! cu j j  j j: Trebuie sa


construim o gramatica G0 echivalenta cu G care sa aiba regulile de tipul ! unde
j j  j j  2: Vom prezenta doar ideea (preluata din [8]), demonstratia completa se
gaseste ^n [11].
 Daca ! 2 P are j j  2, atunci se copie ^n G0 neschimbata;
 Daca ! 2 P cu j j > 2, atunci vom face o constructie asemanatoare cu cea
prezentata la forma normala Chomsky. Astfel, e o regula de forma:
(1) x x ::: xn ! y y ::: ym ; n  m; m > 2;
1 2 1 2

unde xi ; yj 2 VN ; i = 1; n; j = 1; m conform Teoremei 4.3.1. Atunci con-


sideram niste variabile noi (zi ; i = 1; m) si ^nlocuim regula de mai sus cu
multimea de reguli:
Legatura dintre gramatici dependente de context si gramatici monotone 182

{ x !z
1 1

{ z x !y z
1 2 1 2

{ z x !y z
2 3 2 3

{ ....
{ zn xn ! yn zn
1 1

{ zn ! yn zn +1

{ zn ! yn zn
+1 +1 +2

{ ....
{ zm ! ym zm
1 1

{ zm ! ym

Teorema 4.3.3 Pentru orice gramatica monotona G = (VN ; VT ; x ; P ); exista o gra-


matica senzitiva de context G0 = (VN0 ; VT ; x ; P 0 ) echivalenta cu G:
0

Demonstratie Fara a restr^ange generalitatea putem presupune, ^n baza Teoremei


4.3.2 ca G are ponderea cel mult 2, adica regulile lui G sunt de forma ! ; cu
j j  j j  2: Astfel, ^n gramatica G putem avea 6 tipuri de reguli:
1. A ! a este senzitiva la contextul (; );
2. A ! B este senzitiva la contextul (; );
3. A ! B C este senzitiva la contextul (; );
4. A B ! A C este senzitiva la contextul (A; );
5. A B ! C B este senzitiva la contextul (; B );
6. A B ! C D nu mai este senzitiva la nici un context. Vom ^nlocui aceasta regula
cu patru reguli (echivalente) care sunt senzitive de context. Acestea sunt:
6.1. A B ! E B este senzitiva la contextul (; B );
6.2. E B ! E F este senzitiva la contextul (E; );
6.3. E F ! C F este senzitiva la contextul (; F );
6.4. C F ! C D este senzitiva la contextul (C; ):
Ideea este preluata din [8], iar demonstratia completa se gaseste ^n [11].
Teorema 4.3.4 Pentru orice gramatica senzitiva de context G = (VN ; VT ; x ; P ),
exista o gramatica monotona G0 = (VN ; VT ; x ; P 0 ) astfel ^nc^at L(G0 ) = L(G)nfg:
0

Demonstratie Regulile gramaticii G sunt de forma:


(i) A ! ; unde A 2 VN ; ; 2 (VN [ VT ) ; 2 (VN [ VT ) ; +
Legatura dintre gramatici dependente de context si gramatici monotone 183

(ii) x 0 !  si x 0 nu mai apare ^n partea dreapta a vreunei reguli din P .
Consideram acum gramatica G00 care este dedusa din G prin eliminarea regulii x ! 
(adica numai cu regulile de tipul (i)). Deci G00 are numai reguli monotone deoarece
0

j A j  j j si L(G00 ) = L(G) fg. Conform Teoremelor 4.3.1, 4.3.2 si 4.3.3


rezulta ca exista o gramatica G0 monotona echivalenta cu G00 : ^In concluzie, L(G0 ) =
L(G) fg:


! Teorema 4.3.4 demonstreaza rezultatul:
\Cu exceptia cuv^antului vid care se poate obtine din regula x0 !  (situatie ^n
care x0 nu mai apare ^n partea dreapta a vreunei reguli), clasa limbajelelor generate
de gramatici senzitive de context coincide cu clasa limbajelor generate de gramatici
monotone."
Clasa gramaticilor monotone este importante din doua puncte de vedere:
 forma gramaticilor monotone este mai putin restrictiva dec^at a gramaticilor
dependente de context, atunci putem deduce un procedeu mai tare de a veri ca
daca un limbaj generat de o gramatica este de tip 1 sau nu;
 problema apartenentei la limbaje generate de gramatici monotone este decida-
bila, deci si problema apartenentei la limbaje generate de gramatici dependente
de context este decidabila. Deci limbajele generate de gramatici monotone sunt
recursive.

Exercitiul 4.3.1 Fie gramatica G = (fA; B g; fa; b; cg; A; P ); unde multimea de re-
guli P este:
1. A ! a b c
2. A ! a A B
3. b B ! b b c
4. c B ! B c
Sa se determine tipul limbajului generat de gramatica G:
Solutie Din Exercitiul 1.2.4, se stie ca L(G) = fan bn cn = n  1g: Apoi din
Exercitiile 3.2.2 sau 3.9.7 se stie ca L(G) 2= L . Conform constructiilor precizate ^n
2

Teoremele 4.3.1, 4.3.2 si 4.3.3 vom determina o gramatica echivalenta cu G care este
dependenta de context. Deci este clar ca L(G) este de tip 1: De altfel, vom face
o mixtura ^ntre cele trei rezultate, si anume vom transforma numai regulile 1; 3; 4.
Regula 4 nu este senzitiva la context si se mai numeste regula de comutare. Astfel,
stergem regula 4 si modi cam regulile 1 si 3. Obtinem:
1. A ! a b C
3. b B ! b b C
4.1. C B ! B C
4.2. C ! c
Legatura dintre gramatici dependente de context si gramatici monotone 184

Acum transformam regula 4:1 si obtinem regulile


4.1.1. C B ! C D
4.1.2. C D ! C E
4.1.3. C E ! B E
4.1.4. B E ! B C
Astfel gramatica echivalenta cu G dar care este dependenta de context este G0 =
(fA; B; C; D; E g; fa; b; cg; A; P 0); unde multimea de reguli P 0 este:
1. A ! a b C 2. A ! a A B 3. b B ! b b C 4. C B ! C D
5. C D ! C E 6. C E ! B E 7. B E ! B C 8. C ! c
^In concluzie, L(G) = L(G0 ) este de tip 1; deoarece G0 este de tip 1: De altfel, gramatica
G0 este aproape aceeasi cu G din Exercitiul 1.3.18.
6

Asa cum am anticipat, vom demonstra ca problema apartenentei pentru gramatici
monotone este decidabila.
Teorema 4.3.5 Orice limbaj de tip 1 este recursiv (sau, echivalent, problema
apartenentei pentru gramatici monotone este decidabila).
Demonstratie Fie L 2 L : Pentru generarea sa, putem considera o gramatica
1

monotona ^mbogatita cu regula x ! , caz ^n care x nu mai apare ^n partea dreapta
0 0

a vreunei reguli.
Fie deci G = (VN ; VT ; x ; P ) o gramatica monotona ca mai sus, astfel ^nc^at L(G) =
0

L: Vom prezenta urmatorul algoritm:


Algoritmul (ALG20):
Intrare: G = (VN ; VT ; x ; P ) o gramatica monotona ca mai sus, w 2 VT ;
0

Intrebare: w 2 L(G) ?
Metoda:
begin
if jwj = 0 then
if x !  2 P then 'w 2 L(G)'
0

else 'w 2= L(G)'


else begin
T := fx g;
0 0

m := 1;
repeat
Tm := Tm [ f 2 (VN [ VT ) = 9 2 Tm ; =G) ; j j  ng;
1 1

m := m + 1;
until (Tm = Tm ) or (w 2 Tm );
1

if w 2 Tm then 'w 2 L(G)'


else 'w 2= L(G)'
Legatura dintre gramatici dependente de context si gramatici monotone 185

end
end ;
^In continuare, vom demonstra corectitudinea Algoritmului (ALG20). Mai ^nt^ai,
aratam ca acesta are un numar nit de pasi. Pentru usurinta calculelor, notam
n = jwj: ^In primul r^and avem sirul in nit de incluziuni:
 T  T  :::
T0 1 2

Dar numarul tuturor sirurilor astfel ^nc^at j j  n este 1 + k + k + ::: + kn ; unde


2

k = jVN [ VT j: Acest numar este nit, de exemplu, avem inegalitatea


1 + k + k + ::: + kn  (k + 1)n :
2

Dar sirul Ti este format din cuvinte peste VN [ VT de lungime cel mult n, si cum sirul
de incluziuni este in nit, rezulta ca exista un loc unde avem egalitate. Mai precis, e
i numarul natural minim pentru care are loc Ti = Ti :
Apoi, prin inductie dupa j; demonstram ca Ti = Ti j ; 8 j  1:
+1

Pasul initial: j = 1 clar.


Pasul inductiv: Presupunem ca Ti = Ti j : Sa demonstram ca Ti = Ti j : Avem
+ + +1

Ti j := Ti j [ f 2 (VN [ VT ) = 9 2 Ti j ; =) 2 P; j j  ng:
+ +1 + +
G
Dar, din pasul inductiv avem ca Ti = Ti j ; deci +

Ti j := Ti j [ f 2 (VN [ VT ) = 9 2 Ti ; =) 2 P; j j  ng = Ti :
+ +1 +
G +1

Dar Ti = Ti , deci Ti = Ti j :
+1 + +1

P^ana acum am demonstrat ca Algoritmul (ALG20) se opreste dupa un numar nit
de pasi. Bucla repeat se opreste c^and Ti = Ti sau w 2 L(G), deci dupa cel mult i
+1

pasi.
Pentru demonstrarea corectitudinii Algoritmului (ALG20), vom demonstra a rmatia:
(1) \x =m) ; j j  n () 2 Tm ":
0
G
Aleg^and = w si m = i se obtine relatia necesara corectitudinii Algoritmului
(ALG20).
(=)) Procedam prin inductie dupa lungimea derivarii m.
Pasul initial: Fie m = 0; = x : Dar x 2 T deci se veri ca relatia.
0 0 0

Pasul inductiv: Presupunem a rmatia (1) adevarata pentru m = j si o demonstram


j
pentru m = j +1: Avem x = 0) ; j j  n: Punem ^n evidenta ultimul pas al derivarii
G
+1

si obtinem
x =j) =) 0
G G
Dar j j  j j  n; si aplic^and pentru prima parte a derivarii din pasul inductiv,
deducem ca 2 Tj : Cum =) ; rezulta ca 2 Tj : +1
Exercitii propuse spre rezolvare 186

((=) La fel, procedam prin inductie dupa lungimea derivarii m.


Pasul initial: Daca m = 0; = x ; atunci avem derivarea ^n zero pasi x =)

x ; jx j  n:
0 0

0 0

Pasul inductiv: Presupunem a rmatia (1) adevarata pentru m = j si o demonstram


pentru m = j + 1: Stim ca 2 Tj deci 9 2 Tj astfel ^nc^at =) ; j j  n:
+1
G
Din 2 Tj ; aplic^and ipoteza inductiva, rezulta ca exista derivarea x =j) ; j j  n: 0
G
j j
Deci avem x =) =) ; deci avem derivarea x = ) : +1
0
G G 0
G
Exercitiul 4.3.2 Fie gramatica G = (fA; B g; fa; b; cg; A; P ); unde multimea de re-
guli P este:
1. A ! a b c
2. A ! a A B
3. b B ! b b c
4. c B ! B c
Folosind Algoritmul (ALG20), sa se veri ce daca a b c 2 L(G): 3 3 3

Solutie La ^nceput avem T = fAg: Apoi deducem T = fA; a b c; a A B g: Deriv^and


^ntr-un pas formele propozitionale din T obtinem T = T [ fa a b c B; a a A B B g:
0 1

1 2 1

Continu^and ^n felul acesta, generam toate formele propozitionale de lungime cel mult
9:
 T = T [ fa a b B c; a a a b c B B; a a a A B B B g;
3 2

 T = T [ fa a b b c c; a a a b B c B; a a a a b c B B B g;
4 3

 T = T [ fa a a b b c c B; a a a b B B c; a a a a b B c B B g;
5 4

 T = T [ fa a a b b c B c; a a a b b c B c; a a a a b B B c B g; nu generam cuv^antul
6 5

a a a a b b c c B B indca are 10 simboluri, deci mai mult dec^at w;


 T = T [ fa a a b b B c c; a a a a b B B B cg;
7 6

 T = T [ fa a a b b b c c cg:
8 7

^In concluzie, deoarece a b c 2 T ; rezulta din Teorema 4.3.5 ca a b c 2 L(G):


3 3 3
8
3 3 3

4.4 Exercitii propuse spre rezolvare


Exercitiul 4.4.1 Fie M = (fs0 ; s1 ; s2 ; s3 ; s4 ; s5 g; f0; 1g; f0; 1; x; y; B g; Æ; s0; B; fs5 g)
o masina Turing cu functia de tranzitie de nita astfel:
Æ 0 1 x y B
s (s ; x; R) ; ; (s ; y; R) ;
; ;
0 1 4

s
1 (s ; 0; R) (s ; y; L)
1 2 (s ; y; R) 1

s (s ; 0; L) ; (s ; x; R) (s ; y; L) ;
; ; ;
2 3 0 2

s
3 (s ; 0; L)
3 (s ; x; R) 0

s
4 ; ; ; (s ; y; R) (s ; B; R) 4 5

s
5 ; ; ; ; ;
Exercitii propuse spre rezolvare 187

a) Sa se arate ca L(M ) = f0n 1n = n  1g;


b) Folosind constructia din Teorema 4.1.1, sa se determine gramatica de tip 0



echivalenta cu M:

Masina Turing din Exercitiul 4.1.1 este echivalenta cu masina Turing din
Exercitiul 4.4.1. Chiar daca are mai multe stari, aceasta din urma face mai putini
pasi pentru acceptarea unui cuv^ant. Astfel, la demonstrarea incluziunii L(M )  L,
subcazul II.2 rezulta imediat. Ideea este ca odata transformat un \1" ^n \y " trec mai
^nt^ai peste toate simbolurile \y ", si apoi trecem ^n alta stare (adica nu ram^anem
tot ^n s2 ) si parcurgem toate simbolurile \0". Astfel cazul i > j se reduce substantial.
Exercitiul 4.4.2 Fie M = (fs0 ; s1 ; :::; s10 g; f0; 1g; f0; 1; B g; Æ; s0; B; fs10 g) masina
Turing cu functia de tranzitie de nita astfel:
Æ 0 1 B
s 0 (s ; B; R) (s ; B; R) (s ; B; R)
1 2 10

s 1 (s ; 0; R) (s ; 1; R) (s ; B; L)
1 1 3

s 2 (s ; 0; R) (s ; 1; R) (s ; B; L)
2 2 4

s (s ; B; L) ; ;
; ;
3 5

s 4 (s ; B; L) 5

s 5 (s ; B; L) (s ; B; L) (s ; B; R)
6 7 10

s 6 (s ; 0; L) (s ; 1; L) (s ; B; R)
6 6 8

s 7 (s ; 0; L) (s ; 1; L) (s ; B; R)
7 7 9

s 8 (s ; B; R)
0 ; ;
s ; (s ; B; R) ;
; ; ;
9 0

s 10

 e w 2 f0; 1g g:
Sa se arate ca L(M ) = fw w=

! Chiar daca M are mai multe stari dec^at masina Turing din Exercitiul 4.1.3,
avantajul masinii Turing din acest exercitiu este ca pentru acceptarea (sau neac-
ceptarea) unui cuv^ant se fac doar jumatate din numarul de pasi ai masinii din
Exercitiul 4.1.3. Ideea la Exercitiul 4.1.3 este sa \taiem" primul simbol din cuv^ant
(adica ^l ^nlocuim cu Blanc), mergem la st^anga, si \taiem" ultimul simbol (daca este
egal cu primul taiat), apoi ne ^ntoarcem la dreapta p^ana ^nt^alnim Blanc si reluam
procedeul. Diferenta la masina Turing din Exercitiul 4.1.3 este ca atunci c^and ne
\^ntoarcem" la dreapta, vom efectua acelasi procedeu care l-am facut la st^anga (adica
acele \taieri", dar ^n ordine inversa, bine^nteles).
Exercitiul 4.4.3 Fie M = (fs ; s ; s ; s ; s ; s ; s g; f0; 1g; f0; 1; x; y; B g; Æ; s ; B; fs g)
0 1 2 3 4 5 6 0 6

o masina Turing cu functia de tranzitie de nita astfel:


Exercitii propuse spre rezolvare 188

Æ 0 1 x y B
s (s ; x; R) ; ; (s ; y; R) ;
; ;
0 1 3

s
1 (s ; 0; R) (s ; y; L)
1 2 (s
1 ; y; R)
s
2 (s ; 0; L)
2 ; (s ; x; R) 0 (s 2 ; y; L) ;
s (s ; x; R) ; ; (s ; y; R) (s ; B; R)
; ;
3 4 3 6

s
4 (s ; 0; R) (s ; y; L)
4 5 (s
4 ; y; R)
s
5 (s ; 0; L)
5 ; (s ; x; R) 3 (s 5 ; y; L) ;
s
6 ; ; ; ; ;
a) Sa se arate ca L(M ) = f0n 1n 0m 1m = n  1g;
b) Folosind constructia din Teorema 4.1.1, sa se determine gramatica de tip 0
echivalenta cu M:


Exercitiul 4.4.4 Sa se construiasca o masina Turing M care accepta limbajul L =
f0n 1n 2n= n  1g:

! Fie M = (fs0 ; s1 ; s2 ; s3 ; s4 ; s5 g; f0; 1; 2g; f0; 1; 2; x; y; z; B g; Æ; s0; B; fs5 g) o
masina Turing cu functia de tranzitie de nita astfel:

Æ 0 1 2 x y z B
s (s ; x; R) ; ; ; (s ; y; R) ; ;
; ; ; ;
0 1 4

s (s ; 0; R) (s ; y; R)
1 1 2 (s ; y; R) 1

s ; (s ; 1; R) (s ; z; L) ; ; (s ; z; R) ;
; ;
2 2 3 2

s (s ; 0; L) (s ; 1; L)
3 3 3 (s ; x; R) (s ; y; L) 0 3 (s ; z; L)
3

s4 ; ; ; ; (s ; y; R) 4 (s ; z; R) (s ; B; R)
4 5

s5 ; ; ; ; ; ; ;


Exercitiul 4.4.5 Sa se construiasca o masina Turing M care accepta limbajul L =
f0n 1n ::: kn = n  1g; k  1 xat.

 Se procedeaza analog ca la Exercitiul 4.4.4.


Exercitiul 4.4.6 Sa se arate ca masinile Turing de mai jos accepta limbajul L =
fw c w= w 2 fa; bgg; c 2= fa; bg :
 e M = (fs ; s ; s ; s ; s ; s ; s ; s g; fa; b; cg; fa; b; c; x; y; B g; Æ; s ; B; fs g)
0 1 2 3 4 5 6 7 0 7 o
masina Turing cu functia de tranzitie de nita astfel:
Æ a b c x y B
s 0 (s
1 ; x; R) (s ; x; R) 2 (s ; c; R)
0 ; ; ;
s 1 (s
1 ; a; R) (s ; b; R) 1 (s ; c; R)
3 ; ; ;
s (s ; a; R) (s ; b; R) (s ; c; R) ; ; ;
; ; ; ;
2 2 2 4

s 3 (s ; y; L)
5 (s 3 ; y; R)
s ; (s ; y; L) ; ;(s ; y; R) ;
;
4 5 4

s 5 (s ; a; L) (s ; b; L)
5 5 (s ; c; L) (s ; x; R) (s
5 0 5 ; y; L)
s 6 ; ; ; ; (s 6 ; y; R) (s ; B; R)
7

s 7 ; ; ; ; ; ;
Exercitii propuse spre rezolvare 189

 e M = (fs0 ; s1 ; s2 ; s3 ; s4 ; s5 ; s6 ; s7 ; s8 g; fa; b; cg; fa; b; c; x; B g; Æ; s0; B; fs8 g) o


masina Turing cu functia de tranzitie de nita astfel:

Æ a b c x B
s (s ; x; R) (s ; x; R) (s ; c; R) ; ;
; ;
0 1 2 7

s1 (s
1 ; a; R) (s ; b; R) (s ; c; R)
1 3

s 2 (s
2 ; a; R) (s ; b; R) (s ; c; R)
2 4 ; ;
s (s ; x; L) ; ; (s ; x; R) ;
; ; ;
3 5 3

s4 (s ; x; L)5 (s
4 ; x; R)
s ; ; (s ; c; L) (s ; y; L) ;
; ;
5 6 5

s6 (s ; a; L) (s ; b; L)
6 6 (s
0 ; x; R)
s 7 ; ; ; (s
7 ; x; R) (s ; B; R)
8

s8 ; ; ; ; ;
 e M = (fs0 ; s1 ; s2 ; s3 ; s4 ; s5 ; s6 ; s7 ; s8 ; s9 ; s10 g; fa; b; cg; fa; b; c; x; y; B g; Æ; s0; B;
fs10g) o masina Turing cu functia de tranzitie de nita astfel:
Æ a b c x y B
s 0 (s1; x; R) (s ; y; R) (s ; c; R)
2 9 ; ; ;
s (s ; a; R) (s ; b; R) (s ; c; R) ; ; ;
; ; ;
1 1 1 3

s 2 (s2; a; R) (s ; b; R) (s ; c; R)
2 6

s 3 (s4; x; L) ; ; (s
3 ; x; R) (s ; x; R)
3 ;
s ; ; (s ; c; L) (s ; x; L) (s ; y; L) ;
; ; ;
4 5 4 4

s 5 (s ; a; L) (s ; b; L)
5 5 (s
0 ; x; R)
s ; (s ; y; L) ; (s ; x; R)
(s ; y; R) ;
; ; ;
6 7 6 6

s 7 (s ; c; L) 8 (s
7 ; x; R)
(s 7 ; y; R)
s 8 (s ; a; L) (s ; b; L)
8 ;
8 ; (s 0 ; y; R) ;
s ; ; ; (s ; x; R) (s ; y; R) (s ; B; R)
; ; ; ; ; ;
9 9 9 10

s 10


Care este diferenta dintre ele ?

 Se procedeaza la fel ca ^n Exercitiul 4.1.3 si 4.1.4. ^Incercati sa construiti o
masina Turing echivalenta care la \^ntoarcerea" ^n starea s0 sa faca acelasi lucru ca
^n \drumul" de la st^anga la dreapta (adica sa mai faca o veri care a unui simbol).
Exercitiul 4.4.7 Sa se construiasca masini Turing care sa accepte limbajele generate
de gramaticile din Exercitiile 1.3.18-1.3.37.
Exercitiul 4.4.8 Sa se construiasca masini Turing care sa accepte urmatoarele lim-
baje:
L 1 = f0n 1n 0n= n  1g;
L 2 = fw= w contine numar egal de simboluri 0 si 1 g:
Exercitii propuse spre rezolvare 190

Exercitiul 4.4.9 (propus de studentul Butuc Adrian Nicolae, Facultatea de Infor-


matica, Iasi)
Sa se construiasca o masina Turing M = (S; ; ; Æ; s0 ; B; F ) care sa accepte


limbajul L = fw w w= w 2 f0; 1gg si demonstrati ca L = L(M ):

 Fie masina Turing M = (fs0 ; :::; s25 g; f0; 1g; f0; 1; x; y; a; b; c; d; B g; Æ; s0; B; fs25 g),
cu Æ de nit mai jos:
Æ 0 1 x y a
s 0 (s ; B; R)
1 (s ; B; R)
2

s 1 (s ; 0; R)
1 (s ; 0; R)
2

s 2 (s ; 1; R)
1 (s ; 1; R)
2

s 3 (s ; 0; L)
3 (s ; 1; L)
3 (s ; a; L)
3

s 4 (s ; x; R)
5 (s ; y; R)
5 (s ; x; R)
4

s 5 (s ; 0; L)
6 (s ; 1; L)
6 (s5 ; x; R) (s ; y; R)
5

s 6 (s7 ; a; L) (s ; b; L)
7 (s10 ; a; R)
s 7 (s7 ; x; L) (s ; y; L)
7 (s
8 ; a; R)
s 8 (s9 ; a; R) (s ; b; L)
9 (s 3 ; a; L)
s 9 (s9 ; x; R) (s ; y; R)
9 (s 6 ; a; L)
s10 (s14 ; x; R) (s11 ; y; R) (s11 ; c; R)
s11 (s11 ; 0; R ) (s11 ; 1; R ) (s11 ; a; R)
s12 (s 13 ; c; L) (s13 ; d; L)
s13 (s13 ; 0; L) (s13 ; 1; L) (s ; a; L)
13

s14 (s14 ; 0; R ) (s14 ; 1; R )


s15 (s15 ; 0; L) (s15 ; 1; L) (s ; x; L) (s ; y; L) (s ; x; L)
15 15 15

s16

s17 (s ; x; L) (s ; y; L) (s
17 17 17 ; a; L)
s18 (s 19 ; 0; R)
s19 (s19 ; 0; R ) (s 19 ; a; R)
s20 (s20 ; 0; R ) (s 20 ; a; R)
s21 (s21 ; 0; R ) (s ; 0; L)
23

s22 (s22 ; 0; R ) (s ; 0; L)
23

s23 (s23 ; 0; L) (s 24 ; a; L)
s24 (s18 ; 0; R ) (s 24 ; a; L)
s25
Implementari ale algoritmilor prezentati ^n cele patru capitole 191

Æ b c d B
s 0 (s ; B; R)
25

s 1 (s ; 0; L)
3

s 2 (s ; 1; L)
3

s 3 (s ; b; L)
3 (s ; B; R)
4

s 4 (s ; y; R)
4

s 5

s 6 (s 10 ; b; R)
s 7 (s 8 ; b; R) (s ; B; R) 8

s 8 (s 3 ; b; L)
s 9 (s 6 ; b; L)
s 10 (s11 ; d; R) (s ; x; R) (s ; y; R)
16 16

s 11 (s 11 ; b; R) (s ; c; L) (s ; d; L) (s ; B; L)
12 12 12

s 12

s 13 (s ; b; L)
13 (s 10 ; c; R) (s
10 ; d; R)
s 14 (s 14 ; 0; R) (s
14 ; 1; R) (s ; B; L)
15

s 15 (s15 ; y; L) (s 15 ; x; L) (s 15 ; y; L) (s ; B; R)
5

s 16 (s 16 ; x; R) (s
16 ; y; R) (s ; B; L)
17

s 17 (s 17 ; b; L) (s ; c; L)
17 (s 17 ; d; L) (s ; B; R)
18

s 18 (s20 ; 0; R)
s 19 (s 19 ; b; R) (s 21 ; 0; R )
s 20 (s 20 ; b; R) (s ; 0; R)
22

s 21 (s 21 ; c; R) (s ; d; R)
21

s 22 (s 22 ; c; R) (s ; d; R)
22

s 23 (s 24 ; b; L) (s 23 ; c; L) (s ; d; L) (s ; B; R)
23 23

s 24 (s 24 ; b; L)
s 25

Exercitiul 4.4.10 Sa se precizeze care din gramaticile din Exercitiile 1.3.18-1.3.37


genereaza limbaje de tip 1 si de ce.

 Se procedeaza la fel ca ^n Exercitiul 4.3.1.


Exercitiul 4.4.11 Fie gramaticile din Exercitiile 1.2.2 si 1.2.3. Folosind Algoritmul


(ALG20), sa se precizeze daca a b c este generat de acestea.
3 3 3

 Se procedeaza la fel ca ^n Exercitiul 4.3.2.


Implementari ale algoritmilor prezentati ^n cele patru capitole 192

Anexa A

Implement
ari ale algoritmilor prezentat
i ^
n
cele patru capitole

^In aceasta anexa, vom prezenta implementari ^n limbajele Pascal si Prolog cores-
punzatoare problemelor aparute ^n cadrul primelor patru capitole. Este vorba de:
P1. problema determinarii starilor accesibile (Algoritmul (ALG1)) implementata ^n
limbajul Pascal;
P2. problema determinarii automatului minimal (Algoritmul (ALG2)) implemen-
tata ^n limbajul Pascal;
P3. problema apartenentei pentru automate nit deterministe implementata ^n lim-
bajul Pascal;
P4. problema apartenentei pentru automate nit nedeterministe implementata ^n
limbajul Prolog;
P5. problema construirii unui sistem tranzitional echivalent cu un automat nit
determinist implementata ^n limbajul Pascal;
P6. problema apartenentei pentru gramatici independente de context ^n forma nor-
mala Chomsky (Algoritmii (ALG16), (ALG17), (ALG18), (ALG19)) implemen-
tata ^n limbajul Pascal;
P7. problema apartenentei pentru gramatici independente de context st^ang nere-
cursive implementata ^n limbajul Pascal;
P8. problema apartenentei pentru gramatici independente de context fara  reguli
si redenumiri ciclice implementata ^n limbajul Prolog.

Problema P1:
Avem la intrare un automat nit determinist si furnizam la iesire multimea starilor
accesibile. Detalii puteti gasi ^n Algoritmul (ALG1), pagina 56.
program stari_accesibile;
const nmax=20;
mmax=20;
type stari =1..nmax;
litera =1..mmax;
automat=array [stari,litera] of stari;
Implementari ale algoritmilor prezentati ^n cele patru capitole 193

var n:stari;
{numarul de stari}
m:litera;
{cardinalul alfabetului de intrare}
q0:stari;
{starea initiala a automatului}
delta:automat;
{functia de tranzitie}
finale:array[stari] of boolean;
{finale[s]=true <=> starea s este finala}

procedure citirea_datelor;
var k,j:integer;

begin
writeln('Dati nr. starilor <=',nmax);
readln(n);
writeln('Dati cardinalul alfabetului <=',mmax);
readln(m);
writeln('Dati matricea de tranzitie ');
for j:=1 to n do
for k:=1 to m do begin
write('delta[',j,',',k,']=');
readln(delta[j,k]);
end;
writeln('Dati starea initiala');
readln(q0);
end;

procedure accesibile;
var coada:array[stari] of stari;
{structura de date pentru parcurgerea bfs a automatului}
cap,spate:integer;
{primul, respectiv ultimul element din coada}
este :array[stari] of boolean;
{este[s]=true <=> starea s este in coada}
stare_curenta:stari;
{starea curenta a automatului}
j:integer;
{variabila de lucru}

begin
for j:=1 to n do este[j]:=false;
este[q0]:=true;
cap:=1;
Implementari ale algoritmilor prezentati ^n cele patru capitole 194

coada[cap]:=q0;
spate:=1;
repeat
for j:=1 to m do
if not este[delta[coada[cap],j]] then begin
este[delta[cap,j]] :=true;
inc(spate);
coada[spate]:=delta[coada[cap],j]
end;
inc(cap)
until cap>spate;
dec(cap);
writeln('starile accesibile din ',q0,' sunt');
for j:=1 to cap do write(coada[j],' ' );
writeln;
readln
end;

begin {programul principal}


citirea_datelor;
accesibile
end.

Problema P2:
Avem la intrare un automat nit determinist si furnizam la iesire un automat
nit determinist minimal echivalent. Detalii au fost precizate ^n Algoritmul (ALG2),
pagina 57, sau puteti gasi ^n [1, 7].
program reducerea_unui_automat_la_un_automat_minimal;

uses crt;

const nmax=20;
mmax=20;

type stari =1..nmax;


litera =1..mmax;
automat =array [stari,litera] of stari;

var n :stari;
{numarul de stari}
m :litera;
{cardinalul alfabetului de intrare}
q0 :stari;
Implementari ale algoritmilor prezentati ^n cele patru capitole 195

{starea initiala}
delta :automat;
{functia de tranzitie}
finale:array [stari] of boolean;
{finale[s]=true <=> starea s este finala}

procedure citirea_datelor;
var i,j:integer;
{variabile de lucru}
begin
writeln('dati numarul de stari ale primului automat');
readln(n);
writeln('dati cardinalul alfabetului (fara lambda)');
readln(m);
writeln('dati matricea de tranzitie');
for i:=1 to n do
for j:=1 to m do begin
write('delta[',i,',',j,']='); {delta=Alt+235}
readln(delta[i,j])
end;
writeln('dati starea initiala');
readln(q0);
writeln('dati starile finale, 0 la terminare');
for i:=1 to n do finale[i]:=false;
repeat
readln(i);
if i<>0 then finale[i]:=true
until i=0
end;

procedure reducere;
type lista_perechi=^element;
element=record
unu,doi:stari;
urm:lista_perechi
end;
perechi=record
valoare:boolean;
lista :lista_perechi
end;

var pereche :array [stari,stari] of perechi;


p,q :stari;
{variabile de lucru}
Implementari ale algoritmilor prezentati ^n cele patru capitole 196

a :litera;
exista :boolean;
nprim :integer;
{numarul de stari ale celui de-al doilea automat}
clasa :array [stari] of stari;
{clasa[p]=q <=> clasa lui p este q}
i :integer;
{variabila de lucru}

procedure marcheaza(p,q:stari);
type cuplu=record
unu,doi:stari
end;
var coada :array [stari] of cuplu;
cap,spate:integer;
{primul, respectiv ultimul element al cozii}
pointer :lista_perechi;
temp :cuplu;
este :boolean;
{este=true <=> variabila este in coada}
i :integer;
{variabila de lucru}

begin
{facem marcarea perechilor din lista lui (p,q)}
spate:=0;
pointer:=pereche[p,q].lista;
while pointer<>nil do begin
inc(spate);
coada[spate].unu:=pointer^.unu;
coada[spate].doi:=pointer^.doi;
pointer:=pointer^.urm
end;
cap:=1;
while cap<=spate do begin
temp.unu:=coada[spate].unu;
temp.doi:=coada[spate].doi;
pereche[temp.unu,temp.doi].valoare:=true;
{punem toti vecinii lui (temp.unu,temp.doi) in coada}
pointer:=pereche[temp.unu,temp.doi].lista;
while pointer<>nil do begin
este:=false;
i:=1;
while not este and (i<=spate) do
Implementari ale algoritmilor prezentati ^n cele patru capitole 197

if (pointer^.unu=coada[i].unu) and (pointer^.doi=coada[i].doi)


then
este:=true
else
inc(i);
if not este then begin
inc(spate);
coada[spate].unu:=pointer^.unu;
coada[spate].doi:=pointer^.doi;
pointer:=pointer^.urm
end
end;
inc(cap)
end
end; {de la procedure marcheaza}

procedure adauga(p,q,p1,q1:stari);
var pointer1:lista_perechi;
begin
new(pointer1);
if q<p then begin
pointer1^.unu:=p;
pointer1^.doi:=q
end
else begin
pointer1^.unu:=q;
pointer1^.doi:=p
end;
pointer1^.urm:=pereche[p1,q1].lista;
pereche[p1,q1].lista:=pointer1;
end; {de la procedure adauga}

begin
{initializarea matricii totale la false}
for p:=1 to n do
for q:=1 to n do begin
pereche[p,q].valoare:=false;
pereche[p,q].lista:=nil
end;
{listele (p,q) sunt vide}
{si marcam (p,q) cu p in F, q in Q-F}
for p:=2 to n do
for q:=1 to p-1 do begin
pereche[p,q].lista:=nil;
if (finale[p] and finale[q]) or
Implementari ale algoritmilor prezentati ^n cele patru capitole 198

(not finale[p] and not finale[q]) then


pereche[p,q].valoare:=false
else
pereche[p,q].valoare:=true;
end;
{incepe iteratia}
for p:=2 to n do
for q:=1 to p-1 do
if (finale[p] and finale[q]) or
(not finale[p] and not finale[q]) then begin
exista:=false;
a:=1;
while (a<=m) and not exista do
if pereche[delta[p,a],delta[q,a]].valoare or
pereche[delta[q,a],delta[p,a]].valoare then begin
exista:=true;
{se marcheaza (p,q)}
pereche[p,q].valoare:=true;
{urmeaza marcarea perechilor din lista lui (p,q) si
din listele marcate la acest pas}
marcheaza(p,q)
end
else inc(a);
if not exista then
for a:=1 to m do
if (delta[p,a]<>delta[q,a]) and
((delta[p,a]<>p) or (delta[q,a]<>q)) and
((delta[p,a]<>q) or (delta[q,a]<>p)) then
adauga(p,q,delta[p,a],delta[q,a])
end;
{urmeaza procedura de scriere a automatului minimal}
nprim:=1;
clasa[1]:=1;
for p:=2 to n do begin
q:=1;
exista:=false; {exista=true <=> exista un element 0}
while (q<=p-1) and not exista do
if not pereche[p,q].valoare then
exista:=true
else
inc(q);
if not exista then begin
inc(nprim);
clasa[p]:=p
end
Implementari ale algoritmilor prezentati ^n cele patru capitole 199

else clasa[p]:=q
end; {de la for p:=2 to n ...}
writeln('automatul minimal are ',nprim,' stari');
i:=0;
for p:=1 to n do
if clasa[p]=p then begin
inc(i);
write('clasa[',i,']: ');
for q:=1 to n do
if clasa[q]=p then write(q,' ');
writeln(' (din primul automat) ');
end;
writeln('alfabetul este acelasi');
writeln('matricea de tranzitie este ');
write('Q\A|'); {A=Sigma=Alt+228}
for i:=1 to m do write(i,' ');
writeln;
write('----'); {-=Alt+196}
for i:=1 to m do write('--'); {-=Alt+196}
writeln;
i:=0;
for p:=1 to n do
if p=clasa[p] then begin
inc(i);
write(' ',i,'|');
for a:=1 to m do
write(clasa[delta[p,a]],' ');
writeln
end;
write('----'); {-=Alt+196}
for i:=1 to m do write('--'); {-=Alt+196}
writeln;
writeln('starea initiala este (aceeasi): ',q0);
write('starile finale sunt: ');
for p:=1 to n do
if (clasa[p]=p) and finale[p] then
write(p,' ');
writeln;
readln
end; {de la procedure reducere}

begin {programul principal}


citirea_datelor;
reducere;
Implementari ale algoritmilor prezentati ^n cele patru capitole 200

end.

Problema P3:
Avem la intrare un automat nit determinist A = (S; ; Æ; s ; F ) si w
0 2  . La
iesire raspundem la ^ntrebarea daca w 2 L(A): Detalii ^n [1].
program problema_apartenentei_pentru_automate_finit_deterministe;
const nmax=20;
mmax=20;
lung_max=20;
type stari =1..nmax;
litera =1..mmax;
automat=array[stari,litera] of stari;
var n:stari;
{numarul de stari}
m:litera;
{cardinalul alfabetului de intrare}
stare_initiala:stari;
{starea initiala a automatului}
delta:automat;
{functia de tranzitie}
finale:array[stari] of boolean;
{finale[s]=true <=> starea s este finala}

lung:1..lung_max;
w:array[1..lung_max] of litera;
stare_curenta:stari;
k,i:integer;

procedure citirea_datelor;
var i,k:integer;
{variabile de lucru}

begin
writeln('Dati nr. starilor <=',nmax);
readln(n);
writeln('Dati cardinalul alfabetului <=',mmax);
readln(m);
writeln('Dati matricea de tranzitie ');
for k:=1 to n do
for i:=1 to m do begin
write('delta[',k,',',i,']=');
readln(delta[k,i]);
end;
Implementari ale algoritmilor prezentati ^n cele patru capitole 201

writeln('Dati starea initiala');


readln(stare_initiala);
for k:=1 to n do finale[k]:=false;
writeln('dati starile finale, 0 la terminare');
readln(k);
while k<>0 do begin
finale[k]:=true;
readln(k);
end;
end;

procedure analiza_cuvant;
var lung:1..lung_max;
{numarul de simboluri ale cuvantului}
w:array[1..lung_max] of litera;
{cuvantul de analizat}
stare_curenta:stari;
{starea curenta a automatului}
k:integer;
{variabila de lucru}

begin
repeat
writeln('dati lungimea lui w');
readln(lung);
writeln('dati cuvintul w');
for k:=1 to lung do begin
write('w[',k,']=');
readln(w[k])
end;
k:=1;
stare_curenta:=stare_initiala;
while k<=lung do begin
stare_curenta:=delta[stare_curenta,w[k]];
inc(k);
end;
if finale[stare_curenta] then writeln('w apartine L(A)')
else writeln('w nu apartine L(A)');
writeln('Alt cuvint ? (da=1)');
read(k)
until k<>1
end;

begin {programul principal}


citirea_datelor;
Implementari ale algoritmilor prezentati ^n cele patru capitole 202

analiza_cuvant
end.

Problema P4:
Avem la intrare un automat nit (ne)determinist A = (S; ; Æ; s ; F ) si w 2  .
La iesire raspundem la ^ntrebarea daca w 2 L(A): Automatul A ind nedeterminist,
0

rezulta ca pentru a decide daca w 2 L(A) este necesar sa gasim macar un "drum"
etichetat cu w p^ana ^ntr-o stare nala. Acest lucru implica implementarea strategiei
backtracking. De aceea am ales limbajul Prolog deoarece are deja implementata
aceasta strategie.
domains
stare =symbol
litera=symbol
cuvant=litera *
% cuvantul w este privit ca o lista de simboluri

predicates
delta(stare,litera,stare)
% delta(s,a,s')=true <=> delta(s,a)=s'
stare_initiala(stare)
% stare_initiala(s)=true <=> starea s este initiala
finale(stare)
% finale(s)=true <=> starea s este finala
apartine(cuvant)
% apartine(w)=true <=> cuvantul w este acceptat
accepta(stare,cuvant)
% predicat de lucru

clauses
delta(s1,a,s1).
delta(s1,a,s2).
delta(s1,b,s2).
delta(s2,a,s2).
delta(s2,a,s3).
delta(s2,b,s3).
delta(s3,a,s3).
delta(s3,b,s1).
stare_initiala(s1).
finale(s3).
finale(s2).
apartine(W):-
stare_initiala(S_0),
accepta(S_0,W).
Implementari ale algoritmilor prezentati ^n cele patru capitole 203

apartine(_) :-
write("Cuvantul nu este acceptat.\n").
accepta(S,[]) :-
finale(S),
write("Cuvantul este acceptat.\n").
accepta(S,[H|T]) :-
delta(S,H,S1),
accepta(S1,T).

goal
apartine([a,a]).

Problema P5:
Avem la intrare un automat nit determinist cu  tranzitii A = (S; ; Æ; s ; F ).
0

La iesire construim un automat nit determinist echivalent cu A. Detalii ^n [1].


program reducerea_unui_afd_cu_lambda_tranzitii_la_un_afd;

uses crt;

const n1max=20;
n2max=50;
m1max=20;

type stari1 =1..n1max;


stari2 =1..n2max;
litera1 =0..m1max;
litera2 =1..m1max;
automat1=array [stari1,litera1] of stari1;
automat2=array [stari2,litera2] of stari2;
vector =array [stari1] of boolean;

var n1 :stari1;
{numarul de stari ale primului automat}
m1 :litera1;
{cardinalul alfabetului}
delta1 :automat1;
{functia de tranzitie a primului automat}
q01 :stari1;
{starea initiala a primului automat}
finale1:array [stari1] of boolean;
{multimea starilor finale ale primului automat}
{finale1[s]=true <=> starea s este finala}
n2 :stari2;
Implementari ale algoritmilor prezentati ^n cele patru capitole 204

{numarul de stari ale celui de-al doilea automat}


stare2 :array [stari2] of vector;
{starile celui de-al doilea automat sunt submultimi ale
multimilor de stari din primul automat}
{stare2[s2]=(true,false,...) apartine stari1;}
delta2 :automat2;
{functia de tranzitie a celui de-al doilea automat}
finale2:array [stari2] of boolean;
{multimea starilor finale ale celui de-al doilea automat}
{finale2[s]=true <=> starea s este finala}

procedure citirea_datelor;
var i,j:integer;
{variabile de lucru}

begin
writeln('dati numarul de stari ale primului automat');
readln(n1);
writeln('dati cardinalul alfabetului (fara lambda)');
readln(m1);
writeln('dati matricea de tranzitie');
for i:=1 to n1 do
for j:=0 to m1 do begin
write('delta1[',i,',',j,']='); {delta=Alt+235}
readln(delta1[i,j])
end;
writeln('dati starea initiala');
readln(q01);
writeln('dati starile finale, 0 la terminare');
for i:=1 to n1 do finale1[i]:=false;
repeat
readln(i);
if i<>0 then finale1[i]:=true
until i=0
end;

procedure reducere;
var i,j :integer;
{variabile de lucru}
gata :boolean;
{variabila de lucru}
exista:boolean;
{exista=true <=> exista stari nemarcate}
marcat:integer;
{marcat este indicele starii curente}
Implementari ale algoritmilor prezentati ^n cele patru capitole 205

a :litera1;
qiu :vector;
gata1 :boolean;

procedure escaciula(var es:vector);


var coada :array [stari1] of stari1;
{structura de date pentru memorarea parcurgerii starilor}
cap,spate:integer;
{primul, respectiv ultimul element}
i :integer;
{variabila de lucru}

begin
spate:=0;
for i:=1 to n1 do
if es[i] then begin
inc(spate);
coada[spate]:=i
end;
cap:=1;
repeat
if not es[delta1[coada[cap],0]] then begin
es[delta1[coada[cap],0]]:=true;
inc(spate);
coada[spate]:=delta1[coada[cap],0]
end;
inc(cap)
until cap>spate
end; {de la procedure escaciula}

begin {de la procedure reducere}


n2:=1;
for i:=1 to n1 do
stare2[n2,i]:=false;
stare2[n2,q01]:=true;
escaciula(stare2[n2]);
{am determinat prima stare, corelatie cu primul automat}
{in continuare, sa determinam daca este stare finala}
i:=1;
gata:=false;
while (i<=n1) and not gata do
if stare2[n2,i] and finale1[i] then gata:=true
else inc(i);
if gata then finale2[n2]:=true
else finale2[n2]:=false;
Implementari ale algoritmilor prezentati ^n cele patru capitole 206

{atentie ! q01 este stare initiala pentru ambele automate}


exista:=true;
marcat:=n2;
{urmeaza determinarea automatului finit determinist echivalent}
repeat
for a:=1 to m1 do begin
for i:=1 to n1 do
qiu[i]:=false;
for i:=1 to n1 do
if stare2[marcat,i] then
qiu[delta1[i,a]]:=true;
escaciula(qiu);
i:=1;
gata:=false;
while (i<=n2) and not gata do begin
j:=1;
gata1:=false;
while (j<=n1) and not gata1 do
if qiu[j]<>stare2[i,j] then gata1:=true
else inc(j);
if not gata1 then gata:=true
else inc(i)
end;
if not gata then begin
{a fost gasita starea printre cele existente}
inc(n2);
for j:=1 to n1 do
stare2[n2,j]:=qiu[j];
j:=1;
gata:=false;
while (j<=n1) and not gata do
if stare2[n2,j] and finale1[j] then gata:=true
else inc(j);
if gata then finale2[n2]:=true
else finale2[n2]:=false;
end;
{atentie ! i este starea corespunzatoare}
delta2[marcat,a]:=i
end;
inc(marcat);
until marcat>n2
end; {de la procedure reducere}

procedure scrierea_datelor;
var i,j:integer;
Implementari ale algoritmilor prezentati ^n cele patru capitole 207

{variabile de lucru}

begin
clrscr;
writeln('automatul 2 are ',n2,' stari');
for i:=1 to n2 do begin
write('starea ',i,' (din automatul 2) { ');
for j:=1 to n1 do
if stare2[i,j] then
write(j,' ');
writeln('} (din automatul 1)')
end;
writeln('si matricea de tranzitie delta');
write('Q\A|'); {A=Sigma=Alt+228}
for i:=1 to m1 do write(i,' ');
writeln;
write('----'); {-=Alt+196}
for i:=1 to m1 do write('--'); {-=Alt+196}
writeln;
for i:=1 to n2 do begin
write(' ',i,'|');
for j:=1 to m1 do
write(delta2[i,j],' ');
writeln
end;
write('----'); {-=Alt+196}
for i:=1 to m1 do write('--'); {-=Alt+196}
writeln;
writeln('starea initiala este ',q01);
write('starile finale sunt { ');
for i:=1 to n2 do
if finale2[i] then write(i,' ');
writeln('}');
readln
end;

begin
citirea_datelor;
reducere;
scrierea_datelor
end.

Problema P6:
Implementari ale algoritmilor prezentati ^n cele patru capitole 208

Avem la intrare o gramatica independenta de context G = (VN ; VT ; x ; P ) ^n


forma normala Chomsky si un cuv^ant w 2 VT . La iesire raspundem la ^ntrebarea
0

w 2 L(G) ?, si ^n caz a rmativ, furnizam analizarea sintactica  (sirul de reguli
aplicate ^n derivarea x =;) w).
0
G
Pentru a ^ntelege ^n detaliu aceasta implementare, puteti consulta Algoritmii
(ALG16), (ALG17), (ALG18) si (ALG19). Reprezentarea gramaticii G este simpla
deoarece G este ^n forma normala Chomsky. Pentru reprezentarea regulilor de forma
A ! B C am considerat matricea P1, ce are trei coloane. Astfel, daca regula de mai
sus are numarul 4, neterminalii A; B; C au numerele 7; 8; 9 atunci pentru matricea
P1 avem P1[4,1]=7, P1[4,2]=8 si P1[4,3]=9. ^In ceea ce priveste regulile de forma
A ! a, lucrurile stau si mai simplu. Astfel, daca regula A ! a are numarul 6, neter-
minalul A are numarul 7, iar terminalul a numarul 10, atunci pentru matricea P2
avem P2[6,1]=7, P2[6,2]=10.
program analizor_sintactic_ascendent;
{programul utilizeaza algoritmul Cocke-Younger-Kasami.
Presupunem ca gramatica este in forma normala Chomsky,
deci ea va avea o forma de codificare foarte restransa}

uses crt;

type valori=record
valoare,pozitie:integer
end;

var v :array [1..10,1..10,1..10] of boolean;


{multimile V_(ij)}
w :array [1..10] of integer;
{cuvantul de analizat}
as:array [1..30] of valori;
{analizarea sintactica a lui w}
P1:array [1..10,1..3] of integer;
{matricea regulilor cu doi neterminali in partea dreapta}
P2:array [1..10,1..2] of integer;
{matricea regulilor cu terminal in partea dreapta}
n, {lungimea cuvantului w}
n1, {numarul de neterminali}
n2, {numarul de terminali}
nr1, {numarul de reguli de primul tip}
nr2, {numarul de reguli de al doilea tip}
h, {lungimea analizei sintactice}
poz:integer; {pozitia neterminalului curent in forma propozitionala}
Implementari ale algoritmilor prezentati ^n cele patru capitole 209

procedure citirea_datelor;
var i,j:integer;
begin
clrscr;
write('dati lungimea cuvantului w, n=');
readln(n);
writeln('dati cuvantul w');
for i:=1 to n do begin
write('w[',i,']=');
readln(w[i])
end;
write('dati numarul de neterminali, n1=');
readln(n1);
write('dati numarul de terminali, n2=');
readln(n2);
write('dati numarul de reguli cu neterminali, nr1=');
readln(nr1);
write('dati numarul de reguli cu terminali, nr2=');
readln(nr2);
writeln('dati regulile cu neterminali');
for i:=1 to nr1 do
for j:=1 to 3 do begin
write('P1[',i,',',j,']=');
readln(P1[i,j])
end;
writeln('dati regulile cu terminali');
for i:=1 to nr2 do
for j:=1 to 2 do begin
write('P2[',i,',',j,']=');
readln(P2[i,j])
end;
end;

procedure CYK;
var i,j,k,l:integer;
begin
for i:=1 to n do
for k:=1 to n1 do v[i,1,k]:=false;
for i:=1 to n do
for k:=1 to nr2 do
if w[i]=P2[k,2] then v[i,1,P2[k,1]]:=true;
for j:=2 to n do
for i:=1 to n-j+1 do begin
for l:=1 to n1 do v[i,j,l]:=false;
for k:=1 to j-1 do
Implementari ale algoritmilor prezentati ^n cele patru capitole 210

for l:=1 to nr1 do


if v[i,k,P1[l,2]] and v[i+k,j-k,P1[l,3]] then
v[i,j,P1[l,1]]:=true
end
end;

procedure Parse(i,j,net:integer);
var k,l1,l2:integer;
e:boolean;
begin
if j=1 then begin
inc(h);
l1:=1;
e:=true;
while (l1<=nr2) and e do
if P2[l1,1]=net then begin
if P2[l1,2]=w[i] then begin
e:=false;
as[h].valoare:=nr1+l1;
as[h].pozitie:=poz;
end
end
else inc(l1);
end
else begin
k:=1;
e:=true;
while (k<=j-1) and e do begin
l2:=0;
while (l2<=nr1) and e do begin
inc(l2);
if P1[l2,1]=net then begin
if v[i,k,P1[l2,2]] and v[i+k,j-k,P1[l2,3]] then
e:=false
end
end;
if e then inc(k)
end;
inc(h);
as[h].valoare:=l2;
as[h].pozitie:=poz;
if 2*k<=j then begin
Parse(i,k,P1[l2,2]);
inc(poz);
Parse(i+k,j-k,P1[l2,3])
Implementari ale algoritmilor prezentati ^n cele patru capitole 211

end
else begin
inc(poz);
Parse(i+k,j-k,P1[l2,3]);
dec(poz);
Parse(i,k,P1[l2,2])
end
end
end;

procedure scriere;
var i:integer;
begin
writeln('analiza sintactica este ');
for i:=1 to 2*n-1 do
writeln(as[i].valoare,' pe pozitia ',as[i].pozitie);
writeln;
readln
end;

begin {programul principal}


citirea_datelor;
CYK;
if v[1,n,1] then begin
h:=0;
poz:=1;
Parse(1,n,1);
scriere
end
else writeln('w nu apartine lui L(G)');
end.

Problema P7:
Avem la intrare o gramatica independenta de context G = (VN ; VT ; x ; P ) care
nu este st^ang recursiva si un cuv^ant w 2 VT . La iesire raspundem la ^ntrebarea
0

w 2 L(G) ?, si ^n caz a rmativ, furnizam analizarea sintactica st^anga.


Se numeste con guratie tripletul (u #; #; ), unde:
 u este cuv^antul ce a ramas de citit (parcurs) din banda de intrare;
 este continutul stivei auxiliare (pentru care trebuie sa vedem daca =st) u);
  este analizarea sintactica curenta (sirul de reguli deja aplicate);
 # este un marcator de sf^arsit.
Implementari ale algoritmilor prezentati ^n cele patru capitole 212

Algoritmul de mai jos se poate descrie folosind urmatoarele tranzitii:


 Expandare: (u #; A #;  ) (u#; #;  r) daca r este numarul regulii A !
;
 Reducere: (a u#; a #;  ) (u#; #; );
 Acceptare: (#; #;  )
 Eroare: ^n rest.

Este clar ca initial avem con guratia (w #; x #; ). Alegerea regulii ^n tranzitia


0

de expandare se face ^n mod nedeterminist. Astfel pentru implementarea acestui


algoritm, avem nevoie de strategia backtracking.


! Gramatica G nu trebuie sa aiba simboluri st^ang recursive pentru ca altfel intram
^ntr-o bucla in nita (x este st^ang recursiv daca exista derivarea x =+) x ).
st
Pentru reprezentarea regulilor de forma A ! x x ::: xn ; A 2 VN ; xi 2 (VN [ VT )
1 2

am considerat matricea regula. Pe prima coloana, "tinem minte" numarul netermi-


nalului, restul coloanelor memor^and partea dreapta a regulii. Vom alege o variabila
care pastreaza numarul maxim de simboluri din partea dreapta (variabila nrmax).
Astfel, daca regula A ! a A B ce are numarul 4, neterminalii A; B au numerele
7; 8, terminalul a are numarul 10, nrmax=5, atunci ^n matricea regula urmatoarea
reprezentare regula[4,1]=7, regula[4,2]=10, regula[4,3]=7, regula[4,4]=8 si
regula[4,5]=-1.

program analizor_sintactic;
{Acest algoritm foloseste metoda backtrack pentru gramatici care
nu sunt stang recursive}
uses crt;
const cnrreguli=10;
cnrmax =10;
cneterm =10;
cterm =10;
type productie =array [1..cnrreguli,1..cnrmax+1] of -1..cneterm+cterm;
cuvant =array [1..50] of 0..cneterm+cterm;
var regula :productie;
{regulile gramaticii}
nrmax :integer;
{numarul maxim de simboluri din partea dreapta a unei reguli}
neterm :integer;
{numarul de neterminali}
term :integer;
{numarul de terminali}
nrreguli :integer;
{numarul de reguli}
Implementari ale algoritmilor prezentati ^n cele patru capitole 213

w :cuvant;
{cuvantul ce trebuie analizat}
lungime_w :integer;
{lungimea cuvantului w}
w1 :cuvant;
{forma propozitionala curenta}
posib :array [1..cneterm] of 1..cnrreguli;
{posib[i] este numarul de reguli in care neterminalul i apare
in partea stanga a unei reguli}
prima :array [1..cneterm] of 1..cnrreguli;
{prima[i] este prima regula ce contine i in partea stanga}
lung :array [1..cnrreguli] of 0..cnrmax+1;
{lung[i] este lungimea partii drepte a regulii i}
x :array [1..100] of 1..cnrreguli;
{x este analizarea sintactica a lui w}
ch :char;
{variabila de lucru}

procedure citirea_datelor;
var i,j:integer;

begin
clrscr;
writeln('introduceti gramatica in forma standard');
writeln('adica cu urmatoarele conventii');
writeln('1. simbolul de start se codifica cu 1;');
writeln('2. regulile se dau in ordinea aparitiei',
' neterminalului din stanga');
writeln;
write('dati nr. de neterminali=');
readln(neterm);
write('dati nr. de terminali=');
readln(term);
write('dati nr. de reguli=');
readln(nrreguli);
write('dati nr. maxim de simboluri din membrul drept=');
readln(nrmax);
writeln('dati matricea regulilor');
for i:=1 to nrreguli do begin
write('dati neterminalul[',i,']=');
readln(regula[i,1]);
for j:=2 to nrmax+1 do regula[i,j]:=-1;
j:=2;
while (j<=nrmax+1) and (regula[i,j-1]>=0) do begin
write('simbol[',i,',',j,']=');
Implementari ale algoritmilor prezentati ^n cele patru capitole 214

readln(regula[i,j]);
j:=j+1
end
end;
{sa calculam vectorii posib si prima}
for i:=1 to nrreguli do begin
posib[regula[i,1]]:=1;
prima[regula[i,1]]:=i;
while (i<=nrreguli) and (regula[i,1]=regula[i+1,1]) do begin
inc(posib[regula[i,1]]);
inc(i)
end;
end;
{cu toate ca avem doua cicluri, calculul vectorului posib se face
liniar in raport cu numarul de reguli}
{calculam acum lungimea partii drepte a tuturor regulilor}
for i:=1 to nrreguli do begin
lung[i]:=0;
j:=2;
while (j<=nrmax+1) and (regula[i,j]>0) do begin
inc(lung[i]);
inc(j)
end
end
end;

procedure citeste_cuvant;
var i:integer;
begin
writeln('dati lungimea cuvantului w');
readln(lungime_w);
for i:=1 to lungime_w do begin
write('w[',i,']=');
readln(w[i])
end;
end;

function egal(w1,w2:cuvant;lg:integer):boolean;
var i:integer;
e:boolean;
begin
i:=1;
e:=true;
if lungime_w=lg then begin
while (i<=lungime_w) and e do
Implementari ale algoritmilor prezentati ^n cele patru capitole 215

if w1[i]=w2[i] then inc(i)


else e:=false;
egal:=e
end
else egal:=false
end;

procedure scrie_solutie(k:integer);
var i:integer;
begin
write('cuvantul ');
for i:=1 to lungime_w do
write(w[i],' ');
writeln('are analizarea sintactica stanga:');
for i:=1 to k-1 do
write(x[i],' ');
writeln;
end;

function gaseste_primul_neterminal(w1:cuvant;lg:integer):integer;
{functia intoarce numarul neterminalului din w1 daca
acesta exista, si 0 in caz contrar}
var i:integer;
e:boolean;
begin
i:=1;
e:=false;
while (i<=lg) and not e do
if w1[i]<=neterm then e:=true
else inc(i);
if e then gaseste_primul_neterminal:=w1[i]
else gaseste_primul_neterminal:=0
end;

function cuv(w1,w2:cuvant;net:integer):boolean;
var i:integer;
e:boolean;
begin
i:=1;
e:=true;
while (w2[i]<>net) and e do
if w1[i]=w2[i] then inc(i)
else e:=false;
cuv:=e
end;
Implementari ale algoritmilor prezentati ^n cele patru capitole 216

procedure transformare(var w1 :cuvant;


var lg :integer;
net :integer;
expandare:integer);
var i:integer;
j:integer;
begin
i:=1;
while w1[i]<>net do inc(i);
if lung[expandare]=0 then begin
{avem regula de tip A->\lambda}
for j:=lg downto i+1 do
w1[j-1]:=w1[j];
w1[lg]:=0;
dec(lg)
end
else
if lung[expandare]=1 then begin
{avem regula de inlocuire, deci nu modifica lungimea formei
propozitionale}
w1[i]:=regula[expandare,2]
end
else
begin
{avem lung[expandare]>1, deci se modifica atat
forma propozitionala, cat si lungimea ei}
for j:=lg+lung[expandare]-1 downto i+lung[expandare] do
w1[j]:=w1[j-lung[expandare]+1];
for j:=i to i+lung[expandare]-1 do
w1[j]:=regula[expandare,j-i+2];
lg:=lg+lung[expandare]-1;
end
end;

procedure back_rec(k:integer;w_prim:cuvant;lungime_w_prim:integer);
{k-nivelul in arbore; w_prim este forma propozitionala curenta}
var i,j :integer;
prim_net :integer;
w_secund :cuvant;
lungime_w_secund:integer;
begin
if egal(w_prim,w,lungime_w_prim) then
scrie_solutie(k)
else begin
Implementari ale algoritmilor prezentati ^n cele patru capitole 217

prim_net:=gaseste_primul_neterminal(w_prim,lungime_w_prim);
{vectorul posib da sansele de alegere a regulii}
if prim_net<>0 then
for i:=0 to posib[prim_net]-1 do
{conditia de continuare va fi:
- w si w_prim sunt similare pana la prim_net}
if cuv(w,w_prim,prim_net) then begin
x[k]:=prima[prim_net]+i;
{prima= vector care da numarul primei reguli
a neterminalului (in cazul nostru, prim_net)}
for j:=1 to lungime_w_prim do
w_secund[j]:=w_prim[j];
lungime_w_secund:=lungime_w_prim;
transformare(w_secund,lungime_w_secund,prim_net,x[k]);
{procedura transformare modifica w_prim in care prim_net
este inlocuit cu partea dreapta a regulii x[k]}
back_rec(k+1,w_secund,lungime_w_secund)
end
end
end;

begin {programul principal}


citirea_datelor;
repeat
citeste_cuvant;
{apelam back_rec cu parametrii
- 1=nivelul arborelui
- w_secund=simbolul de start al gramaticii
- 1=lungimea lui w_secund}
w1[1]:=1;
back_rec(1,w1,1);
writeln('doriti sa continuati ? (d/n)');
ch:=readkey
until upcase(ch)='N';
end.

Problema P8:
Avem la intrare o gramatica independenta de context G = (VN ; VT ; x ; P ) care
nu are  reguli si redenumiri ciclice si un cuv^ant w 2 VT . La iesire raspundem la
0

^ntrebarea w 2 L(G) ?, si ^n caz a rmativ, furnizam analizarea sintactica st^anga.
Algoritmul implementat ^n limbajul Prolog este asemanator din punct de vedere
al con guratiilor si al tranzitiilor dintre ele. Singura tranzitie care difera este:
 Expandare: (u #; A #; ) (u#; #;  r) daca r este numarul regulii A !
; si j j  juj:
Implementari ale algoritmilor prezentati ^n cele patru capitole 218

Diferenta cea mai importanta dintre cei doi algoritmi (care rezolva P7 si P8) este
forma gramaticii de intrare. Acum, punem urmatoarele doua conditii pentru grama-
tica de la intrare:
 gramatica G nu are  reguli, cu exceptia, eventual, a regulii x 0 ! ; caz ^n
care x nu mai apare ^n partea dreapta a vreunei reguli;
0

 gramatica G nu are redenumiri ciclice, adica nu exista x 2 VN astfel ^nc^at


x =) x:
+

Cu alte cuvinte, spre deosebire de forma restrictiva a gramaticilor din algoritmul


precedent, aici sunt permise simboluri st^ang (drept) recursive. Daca exista x 2 VN
astfel ^nc^at x =) x sau x =) x, atunci punem singura restrictie 6= :
+ +

G G
Avantajul major al implementarii ^n limbajul Prolog este tocmai faptul ca acesta
contine deja implementata strategia backtracking. Asadar, programatorul nu trebuie
sa mai "piarda timpul" (asa cum s-a ^nt^amplat ^n precedenta implementare ^n Pascal)
sa descrie aceasta metoda.
^In continuare, vom prezenta un program ^n limbajul Prolog, ce are ca intrare grama-
tica ce genereaza limbajul lui Dyck (Exercitiul 1.3.16) si anume al expresiilor corect
parantetizate. Analitic, aceasta se poate exprima prin:
LDyck = fw= orice pre x propriu w0 al lui w avem Nw0 (0 (0 )  Nw0 (0 )0 ) si Nw (0 (0 )
= Nw (0 )0 )g;
unde prin Nw0 (0 (0 ) am notat numarul de paranteze st^angi 0 (0 din cuv^antul w0 : Formal,
spunem ca w0 este pre x al lui w daca 9 u 2  astfel ^nc^at w = w0 u:
+

Reprezentarea gramaticii G ^n limbajul Prolog "vorbeste de la sine".


domains
lista_int =integer *
lista_char=char *

predicates
neterminal(char)
% neterminal(X)=true <=> X este neterminal

start(char)
% start(S)=true <=> S este simbolul de start al gramaticii

regula(integer,char,lista_char)
% regula(1,'S',['S','S']) inseamna ca este vorba de regula 1:S->SS

configuratie(lista_char,lista_char,lista_int)
% configuratie(W,Fp,Pi) inseamna:
% - W = cuvantul ce a mai ramas de analizat in banda de intrare
Implementari ale algoritmilor prezentati ^n cele patru capitole 219

% - Fp = forma propozitionala curenta (continutul stivei)


% - Pi = analizarea sintactica curenta (sirul de reguli aplicate)

apartine(lista_char)
% apartine(W)=true <=> W apartine limbajului generat de gramatica

lungime(integer,lista_char)
% lungime(I,L) va intoarce in I lungimea listei L

append(lista_char,lista_char,lista_char)
append(lista_int,lista_int,lista_int)
% append(L1,L2,L3) va concatena L1 cu L2, rezultatul punandu-l in L3
% append(Pi,R,Pi1) va concatena Pi cu R, rezultatul punandu-l in
% Pi1, dar atentie ! este vorba de predicatul definit cu argumente
% din lista_int

clauses
neterminal('S').
start('S').
regula(1,'S',['S','S']).
regula(2,'S',['(','S',')']).
regula(3,'S',['(',')']).

% configuratia de acceptare
configuratie([],[],L):-
write(" este generat "),
write("si are analizarea sintactica ",L),nl.

% tranzitia de expandare
configuratie(U,[A|Gamma],Pi):-
neterminal(A),
regula(R,A,Beta),
append(Beta,Gamma,Gamma1),
lungime(L1,Gamma1),
lungime(L2,U),
L1<=L2,
append(Pi,[R],Pi1),
configuratie(U,Gamma1,Pi1).

% tranzitia de reducere
configuratie([A|U],[A|Gamma],Pi):-
configuratie(U,Gamma,Pi).
apartine(W):-
start(S),write("Cuvantul ",W),
configuratie(W,[S],[]).
Implementari ale algoritmilor prezentati ^n cele patru capitole 220

% tranzitia de eroare
apartine(_):-write(" nu este generat"),nl.

lungime(0,[]).
lungime(I,[_|T]):-
lungime(I1,T),
I=I1+1.
append([],L,L).
append([H|T1],L2,[H|T2]):-
append(T1,L2,T2).

goal
apartine(['(','(',')',')','(',')']).
Index 221

Anexa B

Aplicat
ii ale limba jelor formale ^
n descrierea
limba jului Pascal

^In aceasta anexa, vom prezenta doua gramatici (una de tip 3 si alta de tip 2) cu
care se poate exprima sintaxa limbajului Pascal. Mai precis, vom da o gramatica de
tip 3 care descrie "vocabularul" limbajului Pascal (analiza lexicala) si o gramatica de
tip 3 care descrie "sintaxa" limbajului Pascal (analiza sintactica). Pentru descrierea
unui limbaj de programare se cunosc mai multe moduri, printre care:
 forme Backus-Naur (BNF);
 diagrame Conway;
 gramatici Chomsky.
Aceste modalitati de descriere sunt echivalente. ^In acest sens, vom preciza cum se
pot transforma formele Backus-Naur ^n gramatici Chomsky, urm^and, din motive de
claritate, sa precizam vocabularul si sintaxa limbajului Pascal folosind forme Backus-
Naur.
De exemplu, pentru descrierea unei cifre, forma Backus-Naur asociata este:
< cifra >::= 0 j 1 j 2 j 3 j 4 j 5 j 6 j 7 j 8 j 9
Daca consideram < cifra > un neterminal si simbolul ::= ca ind ! atunci este ca
si cum ar o regula dintr-o gramatica Chomsky. Astfel, ^n general, cuvintele situate
^ntre "<" si ">" vor nota neterminali, simbolul ::= ^nseamna !. Cuvintele care nu
sunt ^ntre paranteze unghiulare sunt terminali (cuvinte rezervate, simboluri speciale).
^In formele BNF mai apar doua simboluri speci ce. Este vorba de f, g si [, ]. Prima
se refera la repetarea de oric^ate ori a unei secvente, iar a doua la optionalitate. De
exemplu, de nitia unui identi cator se face astfel:
< identi cator >::=< litera > f < litera > j < cifra > j g
Aceasta se poate exprima ^n gramaticile generative prin regulile:
 < identi cator >::=< litera > < X >
 < X >::=< litera > < X > j < cifra > < X > j < X > j 
Chiar daca nu toate regulile de mai sus sunt de tip 3, acestea se pot exprima imediat
prin mai multe reguli de tip 3. Un alt exemplu se refera la de nitia unui numar real
fara semn:
< real fara semn >::=< ^ntreg fara semn > [ e < factor scala > ]
La fel, aceasta se poate exprima ^n gramaticile generative prin regulile:
Index 222

 < real fara semn >::=< ^ntreg fara semn > < X >
 < X >::= e < factor scala > j 
^In cele ce urmeaza, vom prezenta vocabularul limbajului Pascal exprimat prin dia-
grame BNF.
1.1. < litera >::= A j B j C j D j E j F j G j H j I j J j K j L j M j N j O j P j Q j R j S j T j
U jV jW jX jY jZ j$
1.2. < cifra >::= 0 j 1 j 2 j 3 j 4 j 5 j 6 j 7 j 8 j 9
1.3. < cifra octala >::= 0 j 1 j 2 j 3 j 4 j 5 j 6 j 7
1.4. < simbol special >::=
+j j  j=j = j < j > j[j]jfjgj:j; j : j
; j ^ j @ j ( j ) j <> j <= j >= j := j :: j < cuv^ant cheie > j <
simbol echivalent >
1.4.1. < simbol echivalent >::= ( j ) j (: j :)
1.5. < cuv^ant cheie >::=
and j array j begin j case j const j div j do j downto j else j end j file j for j
function j goto j if j in j label j mod j nil j not j of j or j origin j otherwise j
packed j procedure j program j record j repeat j set jthen j to j type j until j
var j while j with
1.6. < identi cator >::=< litera > f < litera > j < cifra > jg
1.7. < directiva >::= forward j external j nonpascal
1.8. < secventa cifre >::=< cifra > f < cifra >g
1.9. < ^ntreg fara semn >::=< secventa cifre >
1.10. < real fara semn >::=
< ^ntreg fara semn > : < ^ntreg fara semn > [ e < factor scala > ] j
< ^ntreg fara semn > e < factor scala >
1.11. < numar octal >::=< cifra octala > f < cifra octala >g b
1.12. < numar fara semn >::=
< ^ntreg fara semn > j
< real fara semn > j
Index 223

< numar octal >


1.13. < factor scala >::=< ^ntreg cu semn >
1.14. < semn >::= + j
1.15. < ^ntreg cu semn >::= [ < semn > ] < ^ntreg fara semn >
1.16. < real cu semn >::= [ < semn > ] < real fara semn >
1.17. < numar cu semn >::=
< ^ntreg cu semn > j
< real cu semn > j
[ < semn > ] < numar octal >
1.18. < eticheta >::=< ^ntreg fara semn >
1.19. < sir de caractere >::=0 < element sir > f < element sir >g 0
1.20. < element sir >::=0 0 j < orice caracter ASCII imprimabil >
1.21. < comentariu >::= ( < orice secventa de caractere si sf^arsit de linie
necontin^and acolade drepte > )
1.22. < directiva lexicala >::= % include < nume sier >

Pentru neterminalii
< orice caracter ASCII imprimabil > si
< orice secventa de caractere si sf^arsit de linie necontin^and acolade drepte >
nu am descris regulile asociate deoarece sunt foarte simple (dependente chiar de codul
ASCII implicit). Secventa "(" se poate identi ca cu acolada st^anga f, iar ")" se
poate identi ca cu acolada dreapta g. ^In regula 1.4, parantezele patrate ([; ]), respectiv
(f; g), sunt simboluri de sine statatoare si nu au semni catia celor discutate ^n forma
Backus-Naur.
^In continuare, vom prezenta o gramatica de tip 2 (scrisa ^n forma BNF) care precizeaza
sintaxa limbajului Pascal.
2.1.a. < program >::=
[ < antet program > ] f < etichete > j < constante > j < tipuri > j <
variabile j
< subprogram >g [ < instructiune compusa > : ]
2.1.b. < subprogram >::=< procedura > ; j < functie > ;
Index 224

2.2. < antet program >::= program < identi cator > [ ( < identi cator > f ; <
identi cator > g ) ] ;
2.3. < corp >::=< declaratii > < instructiune compusa >
2.4. < declaratii >::= f [ < etichete > ] [ < constante > [ < tipuri > ] [ < variabile >
] gf < subprogram g
2.5. < etichete >::= label < eticheta > f ; < eticheta > g ;
2.6.a. < constante >::= const < de nitie constanta > f ; < de nitie constanta > g ;
2.6.b. < de nitie constanta >::=< identi cator > = < constanta >
2.7.a. < tipuri >::= type < de nitie tip > f ; < de nitie tip > g ;
2.7.b. < de nitie tip >::=< identi cator > = < tip >
2.8.a. < variabile >::= var < declaratie variabile > ; f < declaratie variabile > ; g
2.8.b. < declaratie variabile >::=< speci care variabila > f ; < speci care variabila >
g : < tip >
2.8.c. < speci care variabila >::=< identi cator > [ origin < constanta > ]
2.9.a. < constanta >::=
[ < semn > ] < numar fara semn > j
[ < semn > ] < identi cator > j
< sir de caractere > j
< constanta structurata >
2.9.b. < constanta structurata >::=< identi cator > < lista componente constante >
2.9.c. < lista componente constante >::= ( < componenta constanta > f; <
componenta constanta > g )
2.10. < componenta constanta >::=< constanta > j < lista componente constante >
2.11. < tip >::=
< identi cator > j
< tip enumerare > j
< tip subdomeniu > j
< tip set > j
< tip array > j
< tip record > j
< tip le >
Index 225

2.12.a. < tip enumerare >::= ( < identi cator > f ; < identi cator > g )
2.12.b. < tip subdomeniu >::=< constanta > : : < constanta >
2.12.c. < tip set >::= [ packed ] set of < tip >
2.12.d. < tip array >::= [ packed ] array ( : < tip > f < tip > g : ) of < tip >
2.12.e. < tip le >::= [ packed ] file of < tip >
2.12.f. < tip record >::= [ packed ] record < lista c^ampuri > [ ; ] end
2.13.a. < lista c^ampuri >::=
< parte xa > [ ; < parte variante > ] j
< parte variante >
2.13.b. < parte xa >::=< sectiune record > f ; < sectiune record > g
2.13.c. < sectiune record >::=< identi cator > f ; < identi cator > g : < tip >
2.14. < parte variante >::= case [ < identi cator > : ] < tip > of < varianta >
f ; < varianta > g
2.15. < varianta >::=< constanta > f ; < constanta > : ( [ < lista c^ampuri > ] [ ; ] )
2.16. < procedura >::=
< antet procedura > ; < corp > j
< antet procedura > ; < directiva > j
procedure < identi cator > ; < corp >
2.17. < functie >::=
< antet functie > ; < corp > j
< antet functie > ; < directiva > j
function < identi cator > ; < corp >
2.18.a. < antet procedura >::= procedure < identi cator > [ < lista parametri > ]
2.18.b. < lista parametri >::= ( < parametru formal > f ; < parametru formal > g )
2.19. < antet functie >::= function < identi cator > [ < lista parametri > ] :<
identi cator >
2.20. < parametru formal >::=
[ var ] < identi cator > f ; < identi cator > g : < identi cator > j
< antet procedura > j
< antet functie >
Index 226

2.21. < instructiune >::= [ < eticheta > : ] < instructiune neetichetata >
2.22. < instructiune neetichetata >::=
[ < atribuire > j
< apel procedura > j
< instructiune compusa > j
< instructiune if > j
< instructiune case > j
< instructiune while > j
< instructiune repeat > j
< instructiune for > j
< instructiune with > j
< instructiune goto > ]
2.23.a. < atribuire >::=< variabila > := < expresie >
2.23.b. < apel procedura >::=< identi cator > [ < lista argumente > j <
lista argumente write > ]
2.23.c. < lista argumente >::= ( < expresie > f < expresie > g )
2.23.d. < lista argumente write >::= ( < argument write > f ; < argument write > g )
2.23.e. < argument write >::=< expresie > [ : < expresie > [ : < expresie > ] ]
2.23.f. < instructiune compusa >::= begin < instructiune > f; < instructiune >
g end
2.23.g. < instructiune if >::= if < expresie booleana > then < instructiune > [ <
instructiune > ]
2.23.h. < instructiune case >::= case < expresie > of [ < element case >
f ; < element case > g ] [ otherwise < instructiune > ] [ ; ] end
2.23.i. < element case >::=< constanta > f ; < constanta > g : < instructiune >
2.23.j. < instructiune while >::= while < expresie booleana > do < instructiune >
2.23.k. < instructiune repeat >::= repeat < instructiune > f ; < instructiune > g
until < expresie booleana >
2.23.l. < instructiune for >::= for < variabila > := < expresie > < pas > <
expresie >
do < instructiune >
Bibliogra e 227

2.23.m. < pas >::= to j downto


2.23.n. < instructiune with >::= with < expresie > f ; < expresie > g do <
instructiune >
2.23.o. < instructiune goto >::= goto < eticheta >
2.24. < variabila >::=
< identi cator variabila > j
< variabila > ( : < expresie > f ; < expresie > g : ) j
< variabila > ^ j
< variabila > : < identi cator c^amp >
2.25.a. < expresie >::=< expresie simpla > f < operator relational > < expresie simpla >
g
2.25.b. < operator relational >::=< j > j <= j >= j = j <> j in
2.26.a. < termen >::=< factor > f < operator multiplicativ > < factor > g
2.26.b. < operator multiplicativ >::=  j = j div j mod j and
2.27.a. < expresie simpla >::= [ < semn > ] < termen > f < operator aditiv > <
termen > g
2.27.b. < operator aditiv >::= + j j or
2.28.a. < factor >::=
[ < constanta fara semn > j
< variabila > j
< apel functie > j
not < factor > j
( < expresie > ) j
( : [ < indicator membru > f < indicator membru > g ] : )
2.28.b. < apel functie >::=< identi cator functie > [ < lista argumente > ]
2.28.c. < indicator membru >::=< expresie > [ : : < expresie > ]
2.29. < constanta fara semn >::=
< numar fara semn > j
< sir de caractere > j
< identi cator > j
nil

^In regula 2.12.d, secventa "(:", respectiv ":)", semni ca "[", respectiv "]".
Bibliogra e
[1] Andrei, St., Grigoras, Gh., - Constructia compilatoarelor. Lucrari de laborator,
Editura Universitatii "Al.I.Cuza", Iasi, Rom^ania, 1995;
[2] Balanescu, T., Gavrila, S., Georgescu, H., Gheorghe, M., Sofonea, L., Vaduva, I.,
- Programarea ^n limbajele Pascal si Turbo Pascal, vol. 1, vol 2, Editura Tehnica,
Bucuresti, Rom^ania, 1992;
[3] Cazanescu, V. E., - Introducere ^n teoria limbajelor formale, Editura Academiei,
Bucuresti, Rom^ania, 1983;
[4] Chomsky, N., - Three models for the description of languages, IRE Transaction
on Information Theory, IT-2, pp.113-124, 1956;
[5] Chomsky, N., - On certain formal properties of grammars, Information Control,
pp.137-167, 1959;
[6] Creanga, I., Reischer, C., Simovici, D., - Introducere algebrica ^n informatica.
Teoria automatelor, Editura Junimea, Iasi, Rom^ania, 1973;
[7] Grigoras, Gh., - Limbaje formale si tehnici de compilare, Editura Universitatii
"Al.I.Cuza", Iasi, Rom^ania, 1985;
[8] Harrison, M., - Introduction to Formal Language Theory, Addison Wesley, Read-
ing Mass., U.S.A., 1978;
[9] Hopcroft, J.E., Ullman, J.D., - Introduction to Automata Theory, Languages and
Computation, Addison Wesley Publishing Company, U.S.A., 1979;
[10] Jucan, T., Simovici, D.,- Bazele informaticii, Editura "Al.I.Cuza", Iasi, Rom^ania,
1979;
[11] Jucan, T., - Limbaje formale si teoria automatelor, Editura "Al.I.Cuza", Iasi,
Rom^ania, 1997;
[12] Moldovan, G., Cioban, V., Lupea, M., - Limbaje formale si teoria automatelor.
Culegere de probleme, Universitatea "Babes-Bolyai", Cluj-Napoca, Rom^ania,
1996;

228
Bibliogra e 229

[13] Paun, Gh., - C^ateva gramatici dependente de context, Stud. Cerc. Mat., 26, 8
(1974), 1105-1110;
[14] Paun, Gh., - Gramatici matriciale, Editura Stiinti ca si Enciclopedica, Bucuresti,
Rom^ania, 1981;
[15] Perrin, D., - Finite Automata, Handbook of Theoretical Computer Science, El-
sevier Science Publishers B.V., 1990;
[16] Orman, G., - Limbaje formale, Editura Tehnica, Bucuresti, Rom^ania, 1982;
[17] Salomaa, A., - Formal Languages, Academic Press, New York, U.S.A., 1973;
[18] Simovici, D., - Limbaje formale si tehnici de compilare, Editura didactica si
pedagogica, Bucuresti, Rom^ania, 1978.

S-ar putea să vă placă și