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
2.1 Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Sumatorul binar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3 Relatiile A;s0 si L . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4 Constructia automatului minimal . . . . . . . . . . . . . . . . . . . . .
2.5 Legatura dintre automate nite deterministe si cele nite nedeterministe
2.6 Legatura dintre limbaje regulate si automate nite . . . . . . . . . . .
2.7 Lema de pompare Bar-Hillel . . . . . . . . . . . . . . . . . . . . . . . .
2.8 Sisteme tranzitionale . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.8.1 Un algoritm e cient pentru conversia dintre un sistem tranzitional
si un automat nit nedeterminist . . . . . . . . . . . . . . . . .
2.9 Expresii regulate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.10 Exercitii propuse spre rezolvare . . . . . . . . . . . . . . . . . . . . . .

38
38
41
44
54
61
65
71
74
76
80
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 pushdown 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
3.7.1 Un algoritm e cient de analiza sintactica pentru gramatici ^n
forma normala Chomsky . . . . . . . . . . . . . . . . . . . . . . 145
2

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


4.1 Masini Turing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2 Automate liniar marginite . . . . . . . . . . . . . . . . . . . . . . . . .
4.3 Legatura dintre gramaticile dependente de context si gramaticile monotone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4 Exercitii propuse spre rezolvare . . . . . . . . . . . . . . . . . . . . . .

163
163
178
180
186

Capitolul 1

Ierarhia lui Chomsky.


Generari de limbaje
1.1 Introducere
Termenul de gramatica a fost atribuit sistemelor generative din respect pentru lingvistul si losoful Noam Chomsky . Domnia sa este primul care a folosit aceste sisteme
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.
1

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
n
+

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, Cambridge, U.S.A.
3

Introducere

 x 2 VN este simbolul de start al gramaticii G;


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

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
G

9u!v2P

astfel ^nc^at = 1 u 2 ; = 1 v 2 :

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


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

+1

1; n 1:

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

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 penG

tru gramatica G: Mai general, putem considera F P ( ; G) = f = =) ; 2
G
V  g; 8 2 V  :
0

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
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

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

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 independente de context, dar care nu sunt regulate; de aici rezulta incluziunea stricta
L L ;
3

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

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 independent 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
G
i;
Prin =) vom ^ntelege ca derivarea s-a facut aplic^and i pasi (reguli); daca
G

Prin =) vom ^ntelege ca derivarea directa a folosit regula cu numarul i:


( )

i = 1;

 poate sa lipseasca;


 Prin =G) vom ^ntelege ca derivarea foloseste sirul de reguli (analizarea sintacatunci

tica)  ;

Generari de limbaje

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

Prin =) vom ^ntelege ca se aplica mai multe reguli, posibil niciuna;

Prin =) vom ^ntelege ca se aplica regula i de j ori;

G
G

i ;j
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 incluziunea 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


a) sa se determine tipul gramaticii G;
b) sa se demonstreze ca L(G) = fan bn =n  1g:
0

! a b; x ! a x bg):
0

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:




! 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,
(1)
(2)
derivarile de lungime 1. Avem situatiile: x0 =) a b sau x0 =) a x0 b: Consider^and
G

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


G
G
G
G
Acum putem sa formulam a rmatia:
(2)

(2)

(2)

(2)

(1)

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


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
 an x bn =) an bn sau x =n;)

pentru k = n + 1: Astfel, avem derivarile x =n;)
(1)

an x0 bn

=) an+1 x0 bn+1 ;
G
(2)

+1

adica exact a rmatia (2) pentru k = n + 1:

+1

Generari de limbaje

Cu aceasta, ind veri cate cele doua etape ale inductiei matematice, rezulta incluziunea (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 gramatica 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
G

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):
+

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;
G
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
 an bn
forme propozitionale. Este vorba de an x bn si an bn : Derivarea x =n;)
0

+1

+1

+1

+1

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


reguli P este:
1. x ! a b c
2. x ! a x b c
3. x b ! b x
4. x c ! x b c c
5. b x ! x b
6. a x ! a a x
2 N (a) reprezinta numarul de aparitii distincte ale simbolului a ^n forma propozitionala :
0

Generari de limbaje

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
Procedam ca la Exercitiul 1.2.1, adica vom face mai ^nt^ai o cercetare inductiva.
0

Pentru n = 1 se obtine: x =) a b c sau x =) a x b c:

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:

(1)

(2)

(2)

(3)

(4)

(5)

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 =)


G
G
a a x b b c c:
(7)

(6)

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
a b c ; sau cu regula 6 obtinem a x b c :
2

Astfel, intuim a rmatia:


(2)

fak x bk ck ; ak bk ck g  fw= w 2 V  ; 9 x
1

k2 +k 1;
=) 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
;n
demonstra pentru k = n + 1: Astfel, avem derivarile x n =n) ; an x bn cn =)
+

;n

(3)

an bn x cn =) an bn x b cn =) an x bn cn ; de unde putem aplica regula 6


G
G
sau 7: Deci, p^ana acum, avem n + n 1 + n + 1 + n = (n + 1) + n 1 derivari de un
n 2 n ; n
pas. Deci x
=)
a x bn cn =G) an x bn cn ; iar a doua derivare
G
(4)

+1

(5)

+1

+1

+1) +

+1

+1

(6)

+1

+1

+1

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

Generari de limbaje

n 2 n ; n
este x
=)
a x bn cn =) an bn cn adica exact a rmatia (2) penG
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
ak = ak + k + 1 + k + 1 (^nsemn^and k aplicari a regulii 3, apoi o aplicare a regulii
4; dupa care k aplicari a regulii 5 si ^n sf^arsit o aplicare a regulii 6 sau 7). Deci avem:
(

+1) +

+1

+1

(7)

+1

+1

+1

+1

a =1
ak = ak + 2k + 2
1

+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
+

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;
(iii) N (a) + N (x ) = N (b) = N (c); 8 2 F P (G):
+

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;
G
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
nu se mai poate continua. Consideram acum cealalta derivare:
0

2 n
x n =)
an x bn cn
+

Singura regula care se poate aplica este 3: Obtinem:

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

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 =
) an bn x cn
1

10

Generari de limbaje

Singura regula care se poate aplica este 4: Deducem:

an bn x cn =) an bn x b c c cn
(4)

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
G

+1

+1

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 :
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 =
(n + 1) + (n + 1) 1:
Cu aceasta, a rmatia (4) este demonstrata.
Astfel, L(G) = fan bn cn = n  1g:
+1

+1

+1

1
2

+1

+1

+1

+1

+1

+1

+1

+1

+1

Exercitiul 1.2.3 Fie gramatica G = (fx ; x ; x g; fa; b; cg; x ; P ); unde multimea de


reguli P este:
1. x ! a x x x
2. x ! a x x
3. x x ! x x
4. a x ! a b
5. b x ! b b
6. b x ! b c
7. c x ! c c
a) sa se determine tipul gramaticii G;
b) sa se demonstreze ca L(G) = fan bn cn = n  1g:
0

2
2

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:
: Sa gasim o derivare de forma x =G) an bn cn ; 8 n  1: Mai ^nt^ai, vom demonstra
prin inductie dupa k a rmatia:
(2)
fak x (x x )k ; ak (x x )k g  f = x =k;) ; 2 (VN [ VT ) g:
(1)

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


G
G
Pasul inductiv: Presupunem a rmatia adevarata pentru k = m si o demonstram
(1)

(2)

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
(1)

+1

+1

11

Generari de limbaje
m; m
x =
) a x (x x )m =) am (x x )m
(2)

+1

+1

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


^In continuare, vom arata ca, consider^and forma propozitionala ak (x x )k ;
obtinem la ak bk ck : Mai precis, vom demonstra a rmatia
1

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

(3)

; :::; 5}; 6; 7| ; 7{z


; :::; 7} :
unde  = 3| ; 3{z
; :::; 3}; 4; 5| ; 5{z
Ck2 ori

k 1ori

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
=)
G
G
G
G
G
ak bk ck :
Numarul de pasi care s-a facut ^n derivarea precedenta este k k +1+ k 1+1+
k 1 = k k : Daca dorim sa vedem c^ati pasi sunt ^n total (adica, pentru derivarea
x =) ak bk ck ), adunam k; si obtinem k k pasi. Putem astfel spune ca s-au facut
G
O(k ) pasi (derivari directe) pentru obtinerea cuv^antului terminal.
Ca o observatie, gramaticile din Exercitiile 1.2.2 si 1.2.4 au k + k 1, respectiv
kk
1, pasi p^ana la obtinerea cuv^antului ak bk ck ; deci tot O(k ): Deci \cea mai
buna" dintre acestea este cea din Exercitiul 1.2.4. Ca tema, studiati si gramaticile
echivalente din Exercitiul 1.3.18.
(3)

(4)

(5)

(6)

(7)

1)

( +3)
2

( +5)

( +3)

: 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 <
c; 8 2 F P (G);
(iii) N (a) = N (x ) + N (b) = N (x ) + N (c); 8 2 F P (G):
^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.
Initial se aplica de un numar de ori regula 1 (caz ^n care N (x ) = 1), apoi regula 2
(caz ^n care N (x ) = 0). Aceasta derivare este singura posibila la ^nceput, deoarece
x nu apare ^n partea dreapta dec^at a regulii 1 (si este o singura aparitie). Deci, se
ajunge \determinist" la forma propozitionala = ak (x x )k pentru care N (x ) = 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) 
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;
+

12

Generari de limbaje

(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
G
G
formele propozitionale 2 fa x x x ; a x x g se observa ca avem a < x ; x <
x ; a < x ; b < x ; a < b; b < x ; c < x ; b < c:
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
 ; si, din ipoteza inductiva, rezulta ca pentru forma propozitionala ; avem
x =n;)
G
a < x ; b < x ; a < b; b < x ; c < x ; b < c: Dar ultimul pas =) se
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
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
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
 si sa demonstram pentru 8 2 F P (G); x n=); : Este clar ca din
x =n;)
G
G
n ;
x =) rezulta ca exista 2 (V [ V ) astfel ^nc^at
(1)

(2)

+1

+1

 =) :
x =n;)
0

Din ipoteza inductiva, avem

N (a) = N (x ) + N (b) = N (x ) + N (c):


1

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
nal, obtinem
N (a) = N (x ) + N (b) = N (x ) + N (c):
Analog se veri ca si pentru celelalte reguli. Asadar, am demonstrat (iii), deci incluziunea L(G)  fan bn cn = n  1g este aratata.
1

Exercitiul 1.2.4 Fie gramatica G = (fA; B g; fa; b; cg; A; P ); unde multimea de reguli P este:
1. A ! a b c
2. A ! a A B
3. b B ! b b c
4. c B ! B c

13

Generari de limbaje

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)


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
G
G
(2)

(2)

(1)

(4)

(4)

(3)

(3)

(3)

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 :

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


G
G
Pasul inductiv: Presupunem a rmatia (2) adevarata pentru k = m si o demon(1)

(2)

stram pentru k = m + 1: Folosind ipoteza inductiva si regulile 1 sau 2; obtinem:


m; m
m; m
m =) am b c B m sau A =
A=
)
a
A
B
) a A B m =G) am A B m .
G
G
G
Astfel, demonstratia a rmatiei (2) s-a ^ncheiat.
(1)

(2)

+1

+1

^In continuare, vom demonstra prin inductie dupa j a rmatia:


(3) ak b c B k

=) ak bj cj B k j ;
G

8 j; 1  j  k;

unde  este sirul de derivari 4; 3; 4; 4; 3; 4; 4; 4; 3; :::; 4| ; 4{z


; :::; 4}; 3:
j ori
1

+1

14

Generari de limbaje

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:

ak b c B k

=) ak bm cm B k m =) ak bm cm B c B k m
(4)

;m
=) ak bm B cm B k m

(4)

;m
G

=)

(4)

=) ak bm cm B k m :
(3)

+1

+1

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

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

15

Generari de limbaje

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
3 sau 4: Obtinem formele propozitionale
2

ak b b c c B k

sau ak b B B c B k

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 =
i = k + k + ::: + ks ; m = j + j + ::: + js + i g
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

+1

+1

unde i = k + k + ::: + ks
regula 3 sau regula 4.
1

si m = j + j + ::: + js + i : Este clar ca putem aplica

regula 3 se poate aplica ^n mod unic si obtinem ak bi1 c B j1 ck1 B j2 ck2 :::
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 =
j ; :::; ks0 = ks ; js0 = js : Sa veri cam conditiile din pasul inductiv. Avem
i0 = 1+ i = 1+ k + k + :::ks = k0 + k0 + ::: + ks0 si m = j + j + ::: + js + i =
0 + j 1 + j + ::: + js + i + 1 = j 0 + j 0 + ::: + js0 + i0 ;
+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 =)
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 :
Notam i0 = i ; j 0 = j ; k0 = k ; :::; kt0 = kt 1; jt0 = 1; kt0 = 1; jt0 =
jt
1; :::; ks0 = ks ; js0 = js : Veri cam conditia din pasul inductiv, si
anume, i0 = i = k + k + ::: + kt + kt 1 + 1 + kt + ::: + ks = k0 + k0 +
:::+kt0 +kt0 +kt0 +:::+ks0 si m = j +j +:::+jt +1+jt 1+jt +:::+js +i =
j 0 + j 0 + ::: + jt0 + jt0 + jt0 + ::: + js0 + i0 :
+1

+1

+1

(4)

+1

+1

+2

+1

+1

+1

+2

+1

+1

+1

+2




Cu aceasta, demonstratia incluziunii (7) s-a ^ncheiat. Deci limbajul generat de gramatica 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

16

Generari de limbaje

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
;
n
b) sa se demonstreze ca L(G) = fa2 = n  0g:

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"
cuvintelor (cele doua simboluri ), G0 este echivalenta cu G:
2

b) Procedam prin dubla incluziune. Mai ^nt^ai, facem o cercetare prin inductie dupa
n:
;
G

Pentru n = 0 avem S =) B A B =) B a B =) a; deci a 2 L(G);

Pentru n = 1 avem S =) B A B =) B C B =) B A A B =) B a a B =)
G
G
G
G
G
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
G
G
G


B A A C B =) B A A A A B =) a a a a; unde ^n ultima derivare (=)) se
G
G
G
^ntelege ca s-au aplicat de patru ori regula 5 si de doua ori regula 6:

(1)

(5)

(1)

(6) (6)

(2)

(1)

(4)

(2)

(5) (5)

(4)

(6) (6)

(2)

(3)

(4)

+1

Sa demonstram ca din cuvinte de forma B A B obtinem B A B sau a (fara


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
cazuri:
2

j
2

Cazul I: Se aplica regula 2 si obtinem:

B A B =) B C A
j
2

(2)

j
2

Cuv^antului B C A
B ^i putem aplica regulile 5; 6 sau 3: Daca aplicam regula
l B din care nu putem
5 atunci obtinem un cuv^ant de forma B C Al a A
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
ori si obtinem A
C B , altfel daca aplicam 5 sau 6 obtinem cuvinte din care
2

17

Generari de limbaje

nu +1putem elimina C: ^In continuare, putem aplica numai 4; 5 si 6 si obtinem
a :
Daca aplicam cuv^antului B C A
B regula 3, obtinem
2

BCA

j
2

+1
;
B =) B A
j
2

(3)

C B =) B A
(4)

j
2

+1

Cazul II: Daca se aplica regula 5; obtinem

B A B =) B Al a A
2

(5)

l B:

Avem doua subcazuri:

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


{ b) l > 0: Se pot aplica regulile 5 si 6 si se obtine a sau se poate aplica
l B si din acest cuv^ant nu putem
regula 2 si obtinem B C Al a A
elimina neterminalul C , deci nu obtinem cuvinte din limbajul L(G);
2

j
2

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


se pot aplica numai regulile 5; 6 si obtinem a ;
{ b) Se aplica regula 6 ultimului B , se obtine cuv^antul B A : Daca
cuv^antului B A i se aplica regula 2 se obtine B C A
si din acest
cuv^ant nu putem elimina C: Daca cuv^antului B A i se aplica regulile 5 si
6 se obtine a :
j

j
2

j
2

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

(2)
(3)

j
2

B A B =) a
j

+1
B A B =) a
j
2

Sa demonstram ca L(G) = fa = n  0g: La fel, procedam prin dubla incluziune.
: Pentru n = 0; si n = 1 am demonstrat deja. Sa demonstram ca a 2 L(G) pentru
un k arbitrar, k  2:
0
Avem derivarea S =) B A B . Dar cuv^antul B A B = B A B , deci vom aplica
G
(1) de k ori si vom obtine
n
2

;
; ;
B =) B A B =) B A B =) a :
(1)

k
2

(5) (6)

k
2

18

Generari de limbaje

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
G
G
noi am demonstrat ca din B A B se obtin cuvinte formate din terminali numai de
forma a : ^In concluzie, rezulta ca p = a ; n  0:

: Fie p 2 L(G).




j
2

n
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;


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;


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:

f; ag; S; P ) cu urmatoarele

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)

19

Generari de limbaje

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

Pentru n = 2 putem considera derivarea S =)  A A B B  =)

Pentru n = 3 consideram derivarea S =)  A A B B  =)  X A A B B  =)

(2)

(9)

; ;
G

(3)

(8) (9) +

(3)

aaaa

(4)

(5)

 A X A B B  =G)  A A X B B  =G)  A A A A B X B  =G)


(5)

(6)

(6)

; ;
G

=)  A A A A B A A B X  =)  A A A A B A A B B  =)
(6)

(7)

(8) (9) +

a 
9

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:
G
(i) = Ai1 B j1 ::: Ai B j ;
(ii) i  2; i  0; :::; ik  0; j  0; j  0; :::; jk  0;
(iii) i + i + ::: + ik = n n;
(iv) j + j + ::: + jk = n:
Pentru calcularea numarului de pasi ai derivarii (1), consideram sirul recurent an ,
astfel:

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

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


3
2
2(n 2) + n n n = n n n :
Cum pasul initial al inductiei a fost deja facut (pentru n 2 f0; 1; 2; 3g), ^n
continuare vom detalia pasul inductiv.
a
Pasul inductiv: Stim ca forma propozitionala ; (astfel ^nc^at S =) ), are proG
a +1 0
prietatile (i),(ii),(iii),(iv). Sa demonstram ca forma propozitionala 0 cu S =)

2

1)

(2

1)

+13

24

satisface proprietatile:
(i') 0 = As1 B t1 ::: As B t ;
(ii') s  2; s  0; :::; sh  0; t  0; t  0; :::; th  0;
(iii') s + s + ::: + sh = (n + 1) (n + 1);
(iv') t + t + ::: + th = n + 1:
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
h

G
s
1
 A B t1 As2 B t2 ::: Ash B th

(4)

G
(7)
1
X  =)  As1 B t1 As2 B t2 ::: Ash B th 
G

; ;
G

=)

(5) (6) +

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

20

Generari de limbaje

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 =
(n + 1) (n + 1);
(iv') t + t + ::: + th = j + j + :::jk + 1 = n + 1:
Cu aceasta, prima incluziune este demonstrata.
1

: 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


regula ce
2
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 considera 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

21

Generari de limbaje

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 dispare"
cu regula 7 si obtinem  A2 B A B , care folosind regulile 8; 9 obtinem
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:
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
De aici rezulta, utiliz^and regulile 8 si 9, cuv^antul  an  :
Astfel am demonstrat si cealalta incluziune.
4

Un alt mod de a demonstra incluziunea

 este arat^and prin inductie dupa n ca


B A n B ::: A B B g

f = S =)  ; 2 fA; B g g  f A n
2(

1)

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
2g [ f ;  a g:
(

gn

2)+ (

2)

= 8 n 

22

Generari de limbaje

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

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




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

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

(1)

(6)

(7)

(1)

(2)

i i C =) i i

(4)

(6)

(7)

i i A i Yi2 C =)
G
i i i i
(4)

; ;

=) i A B i C =) i i A Yi2 i C =)
G
G
G
i i A i B i C =) i i A B i i C =) i i i i C =)

Pentru n = 2 consideram derivarea S

(1) (2) (4)

(2)

(5)

(6)

(3)

(7)

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


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

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


de n ori
de n ori
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
1

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


(2)

23

Generari de limbaje
;n

=) i i ::: ik ik A Yi +1 i i ::: ik C =)
G
G
(2)

(3)

+1

;n

=) i i ::: ik ik A i i ::: ik Yi +1 C =)
G
G

(3)

(4)

+1

;n
G

=) i i ::: ik ik A i i ::: ik B ik C =)
(4)

(5)

;n

+1

+1

=) i i ::: ik ik A B i i ::: ik ik C:
G
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;
ak = ak + 2k + 2:
(5)

+1

+1

+1

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


ai derivarii pentru obtinerea unui cuv^ant terminal (de forma w w; cu jwj = k) este
k + k + 3:
: 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:
Vom arata ca singurele cuvinte care se pot obtine de aici sunt w w si w i A B w i C .
2




Aici singurele cuvinte se refera la primul cuv^ant terminal care se obtine, respectiv 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 neterminali 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 genera 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 marcatorul 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 marcator 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:

25

Exercitii propuse spre rezolvare




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 ;


X ! 1 X j 0 X ; X ! 1 X j 0 X ; X ! 1 X j 0 X g):
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:
1

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):
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
G si sa se demonstreze ca L = L(G):
1







~

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).
Exercitiul 1.3.7 Sa se gaseasca o gramatica (de preferat, de tip 2) care genereaza
limbajul L = fan bm cm = m; n  1g:
0

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

b x c j g).

! a x j b x c; x !
0

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 independente 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 :

26

Exercitii propuse spre rezolvare

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).

! x c j x c; x !
0

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

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]
+

27

Exercitii propuse spre rezolvare

Exercitiul 1.3.14 Sa se gaseasca o gramatica (de tip 2) care sa genereze limbajul
L = fan bn am bm = m; n  0g:





1: X

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

! X X ; 2: X ! a X b j :
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

! X X ; 2: X ! a X b j ; 3: X ! b X c j :
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 ! 

P sunt: 1: X

Sa se arate ca aceasta gramatica genereaza limbajul L al expresiilor corect parantetizate, 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)
(b)
(c)
(d)

A ! aABc
A ! abc
cB ! Bc
bB ! bb

Exercitii propuse spre rezolvare

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


(a)
(b)
(c)
(d)
(e)

X ! aX X X
X ! abX
X X !X X
bX ! bb
X !c
0

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


(a)
(b)
(c)
(d)
(e)
(f)

A ! abc
A ! aAbc
A ! abX
cB ! Bc
X B ! bX
X c ! cc

4. G4 = (fS; A; X; Y g; fa; b; cg; S; P4); cu regulile P4 :


(a)
(b)
(c)
(d)
(e)
(f)
(g)

S ! abc
A ! AaX
X a ! aX
X b ! bbY
Y b ! bY
Y c ! cc
A!a

5. G5 = (fS; A; B; X; Y g; fa; b; cg; S; P5); cu regulile P5 :


(a)
(b)
(c)
(d)
(e)
(f)
(g)
(h)

S ! abc
S ! Ac
A ! aAB
A ! abX
X B ! bX Y
Y B !BY
Y c ! cc
Xc!c

6. G6 = (fA; B; C; E; F g; fa; b; cg; A; P6 ); cu regulile P6 :


(a) A ! a A b

28

29

Exercitii propuse spre rezolvare

(b)
(c)
(d)
(e)
(f)
(g)
(h)

A ! abC
CB !EB
EB !EF
EF !BF
BF !BC
C !c
bB ! bbc

7. G7 = (fX0 ; X1 ; X2 ; X3 ; Y; Z g; fa; b; cg; X0; P7 ) cu regulile P7 :


(a)
(b)
(c)
(d)
(e)
(f)
(g)
(h)
(i)



~

X !X Y
X ! aX c
X c ! X cZ
aX ! abX
X c ! cX
X Z c ! X cZ
cX ! X c
bX ! bbX
X ZY !
0

2
2

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
pentru ecare k  3:
1

 1g;

30

Exercitii propuse spre rezolvare




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. x ! a x x x ::: xk
2. x ! a x x ::: xk
3. xj xi ! xi xj ; 8 i; j; 2  i < j  k ;
4. a x ! a a
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
! Sunt k2 k reguli si k neterminali, adica O(k ) reguli si O(k) neterminali.
1






+1

+1

+ +2

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


(fS; A ; X ; X ; :::; Xk g; fa ; a ; :::; ak g; S; P ) unde regulile P sunt:
1. S ! A a ::: ak
2. A ! A a X
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
6. A ! a
! Sunt 2k + 1 reguli si k + 1 neterminali, adica O(k) reguli si O(k) neterminali;
1




+1

+1

+1

+1

retinem ca aceasta gramatica este mai redusa dec^at prima (^n plus, este si \determinista").

Exercitiul 1.3.21 Sa se gaseasca o gramatica care genereaza limbajul




L = fan bm an bm = m; n  1g:

Putem alege gramatica G = (fS; A; B; X g; fa; bg; S; fS


a A a j B j b; B ! b B X j b; X a ! a X; X b ! b bg):

! A b; A !

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
2: A ! A a X j a
3: X a ! a X
4: X b ! b b X
5: X b ! b X
6: X c ! c X
1

31

Exercitii propuse spre rezolvare

7: X a ! a a X
8: X a ! a X
9: X b ! b b
2

Exercitiul 1.3.23 Sa se gaseasca o gramatica care genereaza limbajul






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






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




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

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

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

Putem scrie L ca o reuniune de limbaje disjuncte:

L=L

unde:

L
L
L
L
L
L

1
2

[L [L [L [L [L ;

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


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

32

Exercitii propuse spre rezolvare

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" gramaticile. 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

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
G
G
G
G
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);
= (fS; A; B; X g; fa; b; c; g; S; f1; 3; 9; 10; 11; 12; 13; 26; 27g);
= (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);
= (fS; A0 ; B 0 ; X g; fa; b; c; g; S; f2; 28; 29; 30; 31; 32; 33; 39; 40g);
1

Exercitiul 1.3.28 Sa se arate ca gramatica G = (fS; D; Lg; fag; S; P ); unde regulile 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 


0g:
n
3

Exercitiul 1.3.30 Sa se gaseasca o gramatica care genereaza limbajul Lk =

fak = n  0g; k  2 natural xat.


n

33

Exercitii propuse spre rezolvare




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).




Exercitiul 1.3.32 Sa se gaseasca o gramatica care genereaza limbajul Lk = f an


= n  0g; k  2 natural xat.

Exercitiul 1.3.31 Sa se gaseasca o gramatica care genereaza limbajul L = f an


= n  0g:




Se poate alege gramatica sensibila la context

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


0

unde regulile P sunt:


1. S !  
2. S !  a 
3. S !  A0 A
A1 ::: A}1 |A2 A{z
2 ::: A2 ::: Ak 1 Ak 1 ::: Ak 1 Ak 
| 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;
|

6. X Ak




7. Aj

{z

de Cj1 ori

{z

de Cji ori

! A A| A{z::: A} ::: |Ai A{zi ::: A}i ::: Ak


0

de Ck1 ori

! a; 8 j = 0; k:

de Cki ori

! 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
k

unde k  2 este natural xat.

+1

 = n  0g;

34

Exercitii propuse spre rezolvare




Se poate alege gramatica sensibila la context

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


0

unde regulile P sunt:


1. S !  a 
2. S !  A0 A1 A2 ::: Ak 
3.  A0 !  A0 X
A1 ::: A1} ::: Ai 1 Ai 1 ::: Ai 1 Ai X;
4. X Ai ! A
A0 ::: A0} A
| 1 {z
| 0 {z
|
{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:

8 i = 0; k

1;




! 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;
(

)+

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


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:
0




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.

35

Exercitii propuse spre rezolvare

Exercitiul 1.3.37 Fie (an )n sirul lui Fibonnacci . Sa se gaseasca o gramatica
care genereaza limbajul L = f aa  =n  0g:




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


S; P ); cu regulile P :
1. S !  a 
13. B A ! A B
2. S !  A X B Y  14. X A ! A X
3.  A !  A A A
15. A A ! A A
4. A A ! A A
16. A A A ! A A A
5. A X ! X A
17. A A X ! A
6. A B ! B A
18. A B ! A A
7. A Y ! Y B A
19. A Y ! X
8. A B ! A B
20. A ! a
9. A  ! A Y 
21. B ! a
10. A Y ! A Y
22. X ! 
11. B A ! A B
23. Y  ! 
12. Y A ! A Y
1

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

+2

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

+1

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

{z

de an+2 ori

de an+1 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:

36

Exercitii propuse spre rezolvare

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:
(a = p
a =q
an = p  an + q  an ; 8 n  2; p; q 2 N
0




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 generala 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 ;

2 S este starea initiala;


F  S este multimea starilor nale.

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


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
relatia

! S; numim

Uneori, ^n loc de relatia 2 din De nitia 2.1.2, se foloseste

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

39

Introducere

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 exempli 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)


a
1

#
Z~#

"!
"!
SoS
7

S

SS

#

S
/
"!
b

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) =


(((s ; a a); b); b) = ((((s ; a); a); b); b) = (((s ; a); b); b) = ((s ; b); b) =
(s ; b) = s : Acum, folosind De nitia 2.1.3 si faptul ca s 2 F; rezulta ca a a b b 2
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) =
((s ; b); b) = (s ; b) = s : Cum s 2= F; rezulta ca a b b b 2= L(A):
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

unde functia este data prin graful de tranzitie:

Introducere

40

---- 




? +
sR



Rs

a; b

a; c

a; c

b; c

a; b

a; b; c

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 ) =
((s ; b); b cn) = (s ; b cn ) = ((s ; b); cn ) = (s ; cn ) = ((s ; c); cn ) =
(s ; cn ) = (s ; cn ) = ::: = (s ; c) = s : Cum s 2 F rezulta ca a b cn 2 L(A):
: Fie w 2 L(A). Trebuie sa aratam ca exista n 2 N astfel ^nc^at w = a b cn :
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
si nu o mai paraseste p^ana la terminarea citirii cuv^antului deoarece (s ; a) =
s ; (s ; b) = s ; si (s ; c) = s : Cum s 2= F rezulta ca w 2= L(A); contradictie;
2

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


Acum distingem situatiile:
1

{ daca first(w ) = a sau first(w ) = c atunci ajungem ^n starea s si deci
w 2= L(A); contradictie;
{ daca first(w ) = b atunci w = b w deci (s ; w ) = ((s ; b); w ) =
(s ; w ): Acum distingem situatiile:
 daca first(w ) = a sau first(w ) = c atunci ajungem ^n starea s si
deci w 2= L(A); contradictie;
 daca first(w ) = b atunci w = b w deci (s ; w ) = ((s ; b); w ) =
(s ; w ): Acum distingem situatiile:
 daca first(w ) = a sau first(w ) = b atunci ajungem ^n starea s
si deci w 2= L(A); contradictie;
 daca first(w ) = c atunci w = c w deci (s ; w ) =
((s ; c); w ) = (s ; w ): ^In aceasta stare (s ), putem citi oric^ate
simboluri c, iar daca apare a; b ajungem ^n starea s si ne ind nala, cuv^antul nu este acceptat. Asadar w = cm ; unde m  0
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

N ; n = m + 1 astfel ^nc^at w = a b cn :
Cu aceasta, ambele incluziuni sunt demonstrate, deci are loc relatia L(A) = L:
1

41

Sumatorul binar

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 automatul 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 )
Sn Rn an bn Sn
Rn
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
+1

+1

+1

42

Sumatorul binar

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):
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.
+1

+1

sn nin
(0,0)
(0,1)
(1,0)
(1,1)

(0,0)
(0,0)
(1,0)
(0,0)
(1,0)

(0,1)
(1,0)
(0,1)
(1,0)
(0,1)

(1,0)
(1,0)
(0,1)
(1,0)
(0,1)

(1,1)
(0,1)
(1,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.

43

Sumatorul binar

#?
~

"!
6
(0; 0)

(0; 1);
(1; 0)

(0; 1); (1; 0)

(1; 1)

(0; 0)

(0; 1)

(0; 0)

(0; 0)

#



"!
6

#
?



"!


#
?


"!


(1; 1)

(1; 0)

(1; 1)

(0; 1);
(1; 0)

(1; 1)

(0; 0)

(0; 1); (1; 0)


(1; 1)
c) Pentru a da o interpretare logica, vom face apel la cunostinte despre semantica 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
disjunctiva .
+1

+1

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


 Rn $ an $ bn ;
Rn  (eRn ^ an ^ bn ) _ (Rn ^ean ^ bn ) _ (Rn ^ an ^ebn ) _ (Rn ^ an ^ bn ) 
 (a ^ b) _ (R ^ b) _ (R ^ a):

Sn

+1

+1

d) Am vazut deci ca daca ((Sn ; Rn ); (an ; bn )) = (Sn ; Rn ) atunci Sn


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
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
+1

(2)

+1

+1

(2)

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


1

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


(an ; bn )(an ; bn ):::(a ; b )(a ; b )
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 dac
a 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)
1

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:
Deoarece cuvintele au fost oglindite la ^nceput, pentru a scrie a + b trebuie sa le mai
oglindim o data. Astfel, obtinem:
1

a+b=

+1

+1

Rn Sn Sn :::S S S
Sn Sn :::S S S
+1

+1

+1

1 (2)

1 (2)

daca Rn
daca Rn

+1
+1

6= 0
=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

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);


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



!

Referitor la relatiile din De nitia 2.3.1, putem spune ca:

 L





reprezinta functia caracteristica asociata unei multimi, L : A


astfel:
n
L = 1 daca x 2 A
0 daca x 2= A

! f0; 1g

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:


i I  [ fi g fi g i I  = fi g [ I  i i I  :
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:
Solutie Notam cu M = i I  [ fi g fi g i I  si M = fi g [ I  i i I  : Folosind
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
p 2 fi g fi g i I  :
 Cazul I: p 2 i I  deci p = i u; cu u 2 I  ;
1

{ Subcazul I.1: u =
k  0; v 2 I  ; de unde p = i i ik v 2 I  i i I 
deci p 2 M ;
{ Subcazul I.2: u = ik il v; k  0; l  1; v 2 I  ; de unde p = ik i i il v 2
I  i i I  ; deci, si ^n ultimul caz, avem p 2 M :
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  :
ik v;

2 2

2 1

2
1

1 2

1 2 1

: Fie p 2 M : Sa aratam ca p


p 2 I i i I :

2 M : Din p 2 M ; rezulta ca p 2 fi g

sau

Cazul I: p

p2M :

2 fi g
2

adica p = ik ; k
2

 1: Scriem p = i ik 2 i I   M ; deci
1

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 ;


{ Subcazul II.2: u = ik u ; k  1; u 2 I  ; =) p = i ik u i i v 2 i I  
M;
{ Subcazul II.3: u = ik il ; k  1; l  0 de unde p = ik il i v 2
fi g fi g i I   M deci p 2 M ;
{ 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
v = im u i i v; deci si ^n acest ultim caz, rezulta ca p 2 M :
2

2 2

1 2 1 1
1

+1
1
1 2

1 2

1 2 1

1 2 1

1 2 1

1 2 1

^In concluzie, M = M :
1

Exercitiul 2.3.2 Fie automatul nit determinist


A = (fs ; s ; s ; s g; fi ; i g; ; s ; fs g)
0

cu de nit prin graful de tranzitie:

Relatiile A;s0 si L




i ;i


?



s


- 


46


?

Y


s

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
prin care trecem.
Daca u = i v atunci (s ; i v) = s ; 8 v 2 fi ; i g : Cum s 2= F atunci cuvintele
din limbajul L(A) nu ^ncep cu i : Starea s se mai numeste stare de blocare .
Deci u = i v: Sa vedem unde \mergem" cu alte simboluri. Deocamdata suntem ^n
starea s ; deoarece (s ; i ) = s : ^In starea s putem, eventual, \sta citind" simbolul
i sau \mergem" direct ^n starea s : Deci v = ik i v ; k  0: Din aceasta stare s
putem citi i de oric^ate ori sau \mergem" cu simbolul i ^n starea s si ne-am blocat.
Deci, cum s este stare nala, cuvintele v care vor genera u 2 L(A); sunt de forma
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:
b) Facem notatia [si ] 0 = fp=p 2  ; (s ; p) = si g; unde si 2 S (uneori, se mai
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

1 2

1 2

1 2

A;s

A;s

A;s

A;s

A;s

Urmarind graful de tranzitie al automatului A; deducem imediat urmatoarele clase


de echivalenta:
 [s ] 0 = fp=(s ; p) = s g = fg;
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.
0

A;s

Relatiile A;s0 si L

 [s ]
 [s ]
 [s ]
1




47

g ;
0 = fp= (s ; p) = s g = fi g fi g ;


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

A;s

= fp=(s ; p) = s g = fi
0

A;s

A;s

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 :
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
contradictie, deci q apartine clasei ramase prin eliminare, adica q 2 fg: Astfel,
e subcazurile:
3

A;s

2 1

2 1

{ 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  :
Alegem r = i (sau, mai general, r = il ; l  1) si obtinem relatia L (i ) =
L (ik i ): Conform punctului a), avem ca i 2= L, iar ik i 2 L, deci ar
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):
Putem alege r =  si rezulta L() = 0; L (ik il ) = 1; ceea ce conduce la
contradictie;
{ Subcazul I.3: Presupunem q 2 fi g [ I  i i I  ; deci distingem situatiile:
 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
L (r) = 1; pe c^and L(ik r) = 0; deci contradictie;
 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 =
ik il ; k; l  1), rezulta L (r) = 1; pe c^and L (u i i v) = 0 deoarece
(s ; u i i v) = s ; contradictie .
4^In acest subcaz, se vede utilitatea Exercitiului 2.3.1, calculele ind mai rapide.
1

1 2

1 2

1 2

2 1

1 2

1 2

2 1

2 1

2 1

1 2

2 1

1 2

2 1

1 2

1 2

Relatiile A;s0 si L

48

2 fg;

Cum toate subcazurile au esuat, rezulta prin metoda eliminarii ca q


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
doar ca prin alegerea lui r = i se obtine contradictie;
{ 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;
{ Subcazul II.3: q 2 fi g [ I  i i I  ; distingem situatiile:
 q 2 fi g adica q = il ; l  1: Avem relatia L (ik r) = L (il r):
Contradictia se obtine pentru r = i ; (sau, mai general, r = im; m 
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:
1

1 2

1 2

2 1

2 1

2 1

2 1

Deci q 2 fi

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


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

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
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  :
1

2 1

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





?




?+



6




?



?
j
- o

-

49

0; 1

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
din s sau s (s ; s fac parte din aceeasi componenta tare conexa ).
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;
[s ] 1 = fp=(s ; p) = s g = f(00)01g;
[s ] 1 = fp=(s ; p) = s g = f(00)100; (00) 0100g = f0100g (sau, echivalent, 010 );
[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;
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;
! Ca si ^n Exercitiul 2.3.2 (precedent), avem si ^n acest automat o stare de blocare.
Este vorba de starea s :
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:
1

A;s

A;s

A;s

A;s

A;s
+

A;s




Relatiile A;s0 si L

50

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


L; adica L (p r) = L(q r): Apoi vom arata ca pentru cuvintele q 2
f[s ] 1 ; [s ] 1 ; [s ] 1 ; [s ] 1 g nu avem (p; q) 2 L : De aici va rezulta
[s ] = [s ] adica p si q vor ^n aceeasi clasa de echivalenta.

Cazul I: Fie p
3

A;s

A;s

A;s

A;s

A;s

A;s

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


(p; q) 2 L ; vom demonstra ca
1

2 [s ]
2

A;s

L (p r) = L (q r);

(1)

1:

A;s

Pentru a arata ca

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,
deoarece F ((s ; p)) = F (s ) = 0 si F ((s ; q)) = F (s ) = 0; deci
(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 ) =
((s ; 1); ) = (s ; ) si (s ; q 1 ) = ((s ; q); 1 ) = (s ; 1 ) =
((s ; 1); ) = (s ; ): Cum s ; s 2 F rezulta ca pentru = 
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

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

(2)

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


(s ; 0) = s si (s ; 1) = (s ; 1) = s ; deci are loc relatia (2);
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
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):
 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 ) =
((s ; p); 0 l 1 ) = (s ; 0 l 1 ) = ((s ; 0 l ); 1 ) = (s ; 1 ) =
(s ; ) si, ^n mod asemanator, se arata ca (s ; q 0 l 1 ) =
(s ; ): Apoi se continua ca ^n cazul I.1.1.
 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 ) =
(s ; ): La fel, se continua ca ^n cazul I.1.1.
{ 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
(s ; q) = s : Alegem r = 0 si avem (s ; 0) = s 2= F; ^n timp ce (s ; 0) =
2

2 +1

2 +1

A;s

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


contradictie. Ram^ane ca q 2= [s ] 1 ;
{ Subcazul I.3: Se alege r = 0 si se procedeaza ca ^n subcazul I.2; deci
q 2= [s ] 1 ;
{ Subcazul I.4: Se alege r = 0 si se procedeaza ca ^n subcazul I.2; deci
q 2= [s ] 1 ;
{ Subcazul I.5: Se alege r = 1 si se procedeaza ca ^n subcazul I.2; deci
q 2= [s ] 1 ;
5



!

A;s

A;s

A;s

Date A; B doua multimi (de cuvinte), facem notatia A  B

A;

8 y 2 B:

(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:
4

2 [s ] 1 : Deoarece nu avem [s ]L[s ] si [s ]L [s ]


rezulta ca nici [s ]L [s ] si [s ]L[s ] nu este adevarat. Apoi, se arata ca
[s ]L [s ]; [s ]L[s ] si nu are loc [s ]L [s ];

Cazul III: Fie p




() 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 ]
3

A;s

A;s

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

[s ]

[s ]
3

[s ]

[s ]
1

[s ]
5

[s ]
6

C

C [ C [ C =  ; L = C ; 
3

L=C

[C

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
corespunzatoare claselor [s ] si [s ]; clasa C cuprinde sectoarele discului corespunzatoare claselor [s ]; [s ] si [s ]; si clasa C cuprinde sectorul corespunzator clasei
[s ]:
1

Cele trei clase de echivalenta ale relatiei L se pot acum formula astfel:

Relatiile A;s0 si L

 x2C
 x2C
 x2C




52

daca x nu contine 1;

daca x are exact un simbol 1;

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
C
C



3

= [s ] [ [s ] = f(00) 0; (00)g = 0 ;
= [s ] [ [s ] [ [s ] = L = f010g;
1

= [ s ] = 

C = f0101 g:
2

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


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

2 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 ),
automatul minimal ind:
0; 1
0
0
L





?
?


  
C

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:

() L(u p v) = L(u q v); 8 u; v 2  ;


(p; q) 2 A () (s; p) = (s; q); 8 s 2 S;

(p; q) 2 L

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 regulat. 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 ; :::   :
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 determinist A = (S; fag; ; s ; F ) astfel ^nc^at L = L(A): Consideram secventa de stari
(s ; a ); (s ; a ); :::; (s ; an ); unde n = jS j: Deoarece ^n aceasta secventa, avem
n + 1 stari, exista j si l astfel ca 0  j < l  n si (s ; aj ) = (s ; al ):
Consideram acum
un numar2 natural k astfel ca 2k +2 1 > n:
2
2
Avem (s ; ak ) = (s ; ak j j ) = ((s ; aj ); ak j ) = ((s ; al ); ak j ) =
2
2
2
(s ; ak j l ) si deoarece (s ; ak ) 2 F; rezulta (s ; ak j l ) 2 F: Dar acest lu2
cru este echivalent cu ak j l 2 L:
^In continuare, vom arata ca acest lucru este fals. Mai precis, vom arata ca
0

k < k + l j < (k + 1) :
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
banala deoarece j < l.
Deci am ajuns la o contradictie, asadar limbajul L nu este regulat.
2

54

Constructia automatului minimal

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
inaccesibila daca nu este accesibila.
0

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:
!

Din De nitiile 2.4.1 si 2.4.2 rezulta usor urmatoarele observatii:

Problema determinarii starilor accesibile este echivalenta cu problema determinarii componentei conexe corespunzatoare starii initiale ^ntr-un graf orientat. 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);


{ s = h(s );
{ F = h(F ):
1

02
2

8 s 2 S ; i 2 ;
1

01

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

+1

55

Constructia automatului minimal

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


Din procedeul de constructie al multimilor j rezulta imediat ca:
(i)

 ::: 

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 :
+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 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 :
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
jjg) = O(jS j  jj):
^In continuare, vom demonstra corectitudinea acestui procedeu, si anume:
+

+1

+1

+1

(iv)

s accesibila () s 2 k :
p 2  astfel ^nc^at (s ; p) = s: Vom proceda prin

(=)) s accesibila, deci 9


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 
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 ; ) 
k = k ; deci demonstratia directei s-a ^ncheiat.
((=) Vom demonstra ceva mai general:
0

+1

(v)

s 2 i =) s este accesibila ;

8 i  0:

Vom face demonstratia a rmatiei (v) prin inductie dupa i:


= fs g: Dar s este stare accesibila pentru ca
(s ; ) = s :
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:

Pasul initial: Pentru i = 0 avem s 2


0

+1

56

Constructia automatului minimal

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):
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.
0

Algoritmul (ALG1):
begin
i := 0;
:= fs g;
repeat
i := i + 1;
i := i [ ( i ; )
until ( i = i ) or ( i = S );
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].
0

^In continuare, vom vorbi despre solutia celei de-a doua probleme, adica despre automatul 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 polinomial pentru deducerea automatului minimal.

De nitia 2.4.4 Fie A = (S; ; ; s ; F ) un automat nit determinist. Starile


s ; s 2 S se numesc inseparabile ^n raport cu F (notatie s  s ) daca
F ((s ; p)) = F ((s ; p)); 8 p 2  :
0

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


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



!

Se observa ca  =

1 k
T
k=0

:

Urmatoarele doua rezultate sunt importante ^n demonstrarea corectitudinii si nititudinii algoritmului pe care^l vom prezenta (pentru demonstratia lor, puteti consulta
[7, 9, 10, 11]).

57

Constructia automatului minimal

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


arbitrare. Atunci pentru orice k  1 are loc
s

k s () s k s
1

Teorema 2.4.1 Daca automatul nit


n
s  s () s  s :



1

 (s ; i); 8 i 2 :
determinist A are jS j = n

si (s1 ; i)

2S

stari, atunci

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

Formal, automatul minimal este A = (S=; ;  ; [s ] ; F=): Astfel, pentru dek


ducerea sa, calculam clasele de echivalenta pentru  :
0

Algoritmul (ALG2):
begin
= fF; S F g;
i := 0;
repeat
i := i + 1;
i
calculeaza  (folosind Lema 2.4.1)
i i
until (=  ) or (i = n 2);
end
Complexitatea timp (una grosiera) a algoritmului precedent este de O(n m); unde
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
A sau [1]. Varianta implementata acolo este ^mbunatatita, av^and O(n  m) operatii.
0

Exercitiul 2.4.1 Fie automatul


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

 - 

q


>
6 ~







N
U
K


 -

U









0

cu dat prin graful de tranzitie:

0; 1

58

Constructia automatului minimal

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;
= fs ; s ; s g;
= fs ; s ; s ; s ; s ; s g;
= fs ; s ; s ; s ; s ; s ; s g;
= ;
Asadar, spunem ca S 0 = fs ; s ; s ; s ; s ; s ; s g este multimea starilor accesibile.
Deci S S 0 = fs g este multimea starilor inaccesibile. Astfel, eliminam starea s :
Se obtine automatul A0 = (fs ; :::; s g; ; 0 ; s ; fs ; s ; s g) si 0 (s; i) = (s; i); 8 s 2
S fs g; i 2 : Pentru simplitate, vom nota 0 tot cu :
b) Calculam ; ; :::; apoi facem intersectia lor pentru a a a relatia : Pentru
relatia , clasele sale de echivalenta sunt date de multimile F; S F; deoarece s 
s () F ((s ; )) = F ((s ; )) () F (s ) = F (s ); adica s ; s 2 F sau
s ; s 2 S F: Astfel, clasele de echivalenta pentru relatia  sunt:
0

fs ; s ; s g; fs ; s ; s ; s g
3

Pentru calculul claselor de echivalenta ale relatiei ; trebuie sa partitionam


multimile calculate la relatia  : Pentru aceasta, vom folosi Lema 2.4.1. Luam prima
clasa de echivalenta a relatiei  : Sa vedem daca fs ; s ; s g 2 : Trebuie sa luam
orice doua perechi de stari fs ; s g; fs ; s g; fs ; s g si sa veri cam daca ram^an ^n
 : 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


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

Cazul I.2: pentru perechea fs3 ; s5 g; avem fs3 ; s5 g

2

si (s ; 0) = s si
(s ; 0) = s ; respectiv (s ; 1) = s si (s ; 1) = s : Dar s  s si s  s ,
deci fs ; s g 2;
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,
din tranzitivitate, ca s  s :
1

59

Constructia automatului minimal

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


Trecem acum la cea de-a doua clasa de echivalenta fs ; s ; s ; s g: De data aceasta
distingem C = 6 cazuri.
1

2
4

Cazul II.1: pentru perechea fs0 ; s1 g; avem fs0 ; s1 g

2

si (s ; 0) = s si
(s ; 0) = s ; respectiv (s ; 1) = s si (s ; 1) = s : Dar s  s si s  s ,
deci fs ; s g 2;
1

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

2 si (s ; 0)
(s ; 0) = s : Nu mai continuam deoarece s 
6 s : Deci fs ; s g 62;

= s si

Cazul II.3: pentru perechea fs0 ; s6 g; avem fs0 ; s6 g

2

si (s ; 0) = s si
(s ; 0) = s ; respectiv (s ; 1) = s si (s ; 1) = s : Dar s  s si s  s ,
deci fs ; s g 2;
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 absurd, ca fs ; s g 2 : Utiliz^and cazul II.1, rezulta ca fs ; s g 2; ceea ce este
o contradictie cu cazul II.2. Asadar, fs ; s g 62;
0

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

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

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


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

fs ; s ; s g; fs g; fs ; s ; s g:

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
1)
subcazuri, ^n loc de Cn2 = 2 : Acest lucru rezulta imediat din proprietatile relatiei

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


pentru relatia ; deducem ca trebuie sa partitionam clasele fs ; s ; s g si fs ; s ; s g:
Clasa fs g apartine relatiei ; deoarece nu se mai poate partitiona si nici nu se poate
reuni cu alta clasa, datorita Lemei 2.4.1.
2




60

Constructia automatului minimal

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

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

fs ; s g; fs g:
0

^In mod analog, se calculeaza  si se observa ca = : Conform Teoremei 2.4.1 si
Lemei 2.4.1, rezulta ca relatia  are urmatoarele clase de echivalenta:
3

fs ; s g; fs g; fs g; fs ; s ; s g:
0

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
este dat prin urmatorul graf de tranzitie:
R 
1
[s ]
- [s ]
0










[s ]



?
s

3

[s ]

0; 1

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

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 +
00)f1; 0g g:
! Exercitiul 2.4.1 re ecta un exemplu de automat minimal care are doar jumatate




A ;s

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 5uplu A = (S; ; ; s ; F ) unde:
 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 );
 s 2 S este starea initiala;
 F  S este multimea starilor nale.
0

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


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 :
0




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:
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;
Metoda: Ca structura de date, vom utiliza o coada queue, necesara pentru memorarea starilor automatului A0 . Deci, queue va un tablou cu m; (m  2n); componente 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 .
0

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;
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
^ plus, Algoritmul (ALG3) are un numar nit de pasi.
cu A: In
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
0

63

Legatura dintre automate nite deterministe si cele nite nedeterministe

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


S o submultime arbitrara, si functia de tranzitie data prin:
1

1. (si ; a) = fs1 ; si+1 g;

2. (si ; b) = fsi+1 g;

8 i = 1; n

8 i = 1; n

1;

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
(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 )
f;g; fa; bg; 0; fs g; F 0), unde 0 si F 0 pot ram^ane neprecizate (0 (fsi1 ; :::; si g; a) =
fs ; si1 ; :::; si g si 0 (fsi1 ; :::; si g; b) = fsi1 ; :::; si g pentru k = 1; n 1, iar
F 0 = fS 0 = S 0  fs ; s ; :::; sn g; F \ S 0 6= ;g). ^In continuare, vom demonstra prin
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
(sk ; a) si sk 2 (sk ; b), rezulta ca sk apartine oricarei submultimi de stari de pe
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:
 s 2 S : Atunci S are forma:
1

fs g
1

+1

k +1

+1

k +1

+1

+1

+1

+1

+1

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


2

+1

g;

64

Legatura dintre automate nite deterministe si cele nite nedeterministe

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
se a a pe nivelul k + 1:
1

 s 2= S : Deci
1

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


2

+1

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

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

Deci, pe nivelul 1 avem Cn stari, pe nivelul 2 avem Cn stari, ..., pe nivelul n avem
Cnn stari. ^In total se obtin Cn + Cn + ::: + Cnn = 2n 1 stari, deci un numar
exponential.
Cu aceasta, solutia Exercitiului 2.5.1 s-a ^ncheiat.
0

Exercitiul 2.5.2 Fie automatul nedeterminist A = (fq1 ; q2 ; q3 g; fa; bg; ; q1; fq2 ; q3 g)
cu dat prin graful de tranzitie:

#
#
6

"!
7 "!
SoS




S

SS

S#/
"!
a

Z~

a; b

a; b

A:

Folosind Algoritmul (ALG3), sa se determine automatul determinist echivalent cu

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 g
1

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

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

65

Legatura dintre limbaje regulate si automate nite

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

elementele se introduc ^n coada cel mult o data.


fq g fq ; q g fq g fq ; q ; q g fq ; q

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

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

cu data prin matricea:

s
s
s
s
s
s
s

2
3
4
5
6
7

a
s
s
s
s
s
s
s

2
4
6
4
6
4
5

b
s
s
s
s
s
s
s

3
5
7
4
6
2
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.

66

Legatura dintre limbaje regulate si automate nite

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


prin graful de tranzitie:




U
U
W
q
  

0; 1

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
gramatica echivalent
 a G = (S; ; s ; P ) unde P = fs ! a s = s 2 (s; a)g [ fs !
2 F : Astfel, pentru automatul din acest exercitiu,
a= (s; a) 2 F g [ s;; ! ; saltfel
obtinem gramatica echivalenta G = (fs ; s ; s g; f0; 1g; s ; P ) cu regulile P :
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
9. s ! 1
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 echivalenta G0 = (S; ; s ; P ) unde P = fs ! a s0 = s0 2 (s; a)g [ fs ! = s 2 F g:
Astfel, pentru automatul din acest exercitiu, obtinem gramatica echivalenta G0 =
(fs ; s ; s g; f0; 1g; s ; P ) cu regulile P :
1. s ! 0 s 2. s ! 1 s 3. s ! 0 s 4. s ! 1 s
5. s ! 0 s 6. s ! 1 s 7. s ! 
0





~
!

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 sistem 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 echivalente, ^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 eliminarea -regulilor, puteti consulta [1, 10].

De nitia 2.6.1 Fie G = (VN ; VT ; x ; P ) o gramatica arbitrara. Se numeste


 regula (sau  productie) orice regula de tipul x ! ; unde x 2 VN :
0

67

Legatura dintre limbaje regulate si automate nite

De nitia 2.6.2 Fie G = (VN ; VT ; x ; P ) o gramatica arbitrara. Se numeste regula


de redenumire orice regula de tipul x ! y; unde x; y 2 VN :
0

De nitia 2.6.3 Fie G = (VN ; VT ; x ; P ) o gramatica de tip 3: Spunem ca G este ^n
forma normala standard daca regulile sale sunt de forma:
 x ! a x0 ; x; x0 2 VN ; a 2 VT ;
0

 x ! a; x 2 VN ; a 2 VT ;
 x ! , caz ^n care x nu mai apare ^n partea dreapta a vreunei reguli.
Exercitiul 2.6.2 Fie gramatica (de tip 3) G = (fx ; x g; fa; bg; x ; P ) unde regulile
0

P sunt:
1. x
2. x
3. x

5.

!x
! abx
! ax
x ! ba
x !
1

4.

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
arbitrara de tip 3 (constructia este valabila si pentru gramatici de tip 2). Consideram
multimile:

N = fx=x 2 VN ; x !  2 P g
Ni = Ni [ fx=x ! 2 P; 2 Ni g; i  1:
Deoarece N  N  N  :::  Ni  Ni  :::  VN , rezulta ca exista k 2 N
(k  jVN j) astfel ^nc^at Nk = Nk . Se poate demonstra usor ca Nk = Nk j ; 8 j 2 N;
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
oprim deoarece N = VN .
Pentru a deduce gramatica echivalenta, dar care nu are  reguli, vom considera
doua cazuri:
0

+1

+1

+1

68

Legatura dintre limbaje regulate si automate nite

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; ::: simboluri din Nk (astfel^nc^at sa nu se obtina ). Formal, consideram multimea
de reguli:
P = fx ! r =x ! r 2 P; r; r =
6 ; r se obtine din r prin stergerea a 0;
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
la regulile din cazul I se adauga regula x ! ;
{ 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

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. x

2. x

3. x

4. x

5. x

6. x

7. x

!x
!
! abx
! ab
! ax
!a
! ba
2

b) ^In aceasta etapa vom elimina redenumirile. Consideram gramatica G =


(VN ; VT ; x ; P ) unde regulile P = P [ P se construiesc astfel:
2

P
P

21

22

21

22

= fx ! r=x ! r 2 P ; r 2= VN g;
1

= fx ! w=x =) y; y ! w 2 P ; w 2= VN ; x; y 2 VN g.
+

G1

Singura redenumire ^n G este x ! x , adica x =) x este singura derivare ^n


G1
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
redenumiri) cu regulile:
+

Legatura dintre limbaje regulate si automate nite

1. x

2. x

3. x

4. x

5. x

6. x

7. x

8. x

9. x

69

!
! abx
! ab
! ax
!a
! ba
! ax
!a
! 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
forma normala):
2

1: x ! p x
1

2: x

!p x
2

...

n: xn




! pn x0

unde x ; x ; :::; xn
1

sunt neterminali noi.

! 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

2. x

3. x

4. x

5. x

6. x

7. x

8. x

!
! ax
! bx
! ax
!b
! ax
!a
! bx

70

Legatura dintre limbaje regulate si automate nite

9. x

10. x

11. x

12. x

13. x

!a
! ax
!a
! bx
!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 .
d) Astfel, am construit o gramatica echivalenta (G ) care este ^n forma normala.
Acum construim un automat nit (ne)determinist A astfel ^nc^at L(A) = L(G ):
6

A = (VN [ fx; yg; VT ; ; x ; F );


0

daca x !  2 P
altfel.
Notam cu VN = fx ; x ; :::; xn g;  = VT = fi ; i ; :::; im g; Sjk = fxh =xj
ik xh 2 P g: Pentru de nirea functiei de tranzitie, vom construi tabelul:
unde F =

fx; x g
fxg
0

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

cu dat prin tabelul:

x
x
x
x
x
x
x
y

2
3
4
5

fx ; x ; x ; xg fx g
fx ; xg
fyg
fy g
fx ; x g
fy g
fxg
fxg
fyg
fxg
fyg
fy g
fyg
fy g
fyg
2

Eventual, se gaseste automatul minimal echivalent cu acesta.

71

Lema de pompare a lui Bar-Hillel

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


trei cazuri:

Cazul I:

() 2n  k). Astfel distingem

a| a{z::: a} a| a{z::: a} a| a ::: a{zb b ::: }b


x=al

y=am z=an

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

La fel, conditiile n > l si m


Distingem iarasi trei cazuri:

y=an l bm

z=bn

 0 se obtin din conditia (i) a Lemei Bar-Hillel.

{ 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:

72

Lema de pompare a lui Bar-Hillel

Cazul III:

a| a ::: a{zb b ::: }b b| b{z::: }b b| b{z::: }b


x=an bm

y=bl z=bn

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 z 2 L(G): Apoi, not^and w = x z , reluam procedeul cu pasii 1 si 2.

x yi z

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.

73

Lema de pompare a lui Bar-Hillel

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 + ::: +
jVT jk = jjVV jj cuvinte). Deci exista w 2 L(G); astfel ^nc^at jwj  k: Procedam
acum ca ^n Exercitiul 2.7.2.
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
^nc^at f (m +1) f (m ) > k: De aici deducem ca f (m +1) > k: Deci f (t) > k pentru
t  m + 1 (deoarece f este crescatoare). Exista de asemenea un m 2 N astfel ^nc^at
f (m + 1) f (m) > maxf ; kg.
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:
( )

74

Sisteme tranzitionale

Pe de alta parte, avem

jx y z j = jx y z j + jyj = f (m) + jyj  f (m) + k < f (m + 1):


Deci, din Lema Bar-Hillel, rezulta ca x y z 2 L: Dar avem f (m) < jx y z j < f (m +
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)).
Contradictie cu relatia (1). Ram^ane deci ca limbajul L nu este regulat.
(

+1)

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 este
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
alege m > n + 1: Folosind deci Exercitiul 2.7.4, rezulta ca limbajul fan = n  0g
nu este regulat.
2

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;

2 S este starea initiala;


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
(s) = fs0=s ;
! s0 g. Extinderea lui  la submultimi este imediata:
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 ;

75

Sisteme tranzitionale

= f=s0 2 (s);  2 (s0 ; a)g. Cu alte cuvinte, asta


^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) = fb(s0 ; a)=s0 2
b(s; w)g:

 b(s; a) = (S ), unde S


1

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 nedeterminist A = (S; ; 0 ; s ; F 0 ) unde:
 0 (s; a) = b(s; a); 8 s 2 S; a 2 ;
0

n
(s ) \ F 6= ;;
 F 0 = FF [ fs g contrar.
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

cu dat prin tabelul:

s
s
s
s
s

2
3
4

fs ; s g
fs g fs ; s g
;
fs ; s g fs g
;
;
;
fs g
;
;
fs g
4

5
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:

76

Sisteme tranzitionale







(s
(s
(s
(s
(s

) = fs ; s ; s g ;
1

) = fs g;
2

) = fs g;
3

) = fs ; s g;
4

) = fs ; s g;
4

Apoi, vom calcula b(s; a); 8 s 2 S;


unde S = f=s0 2 (s );  2 (s0 ; a)g =
1

8 Sa 2 :

De exemplu, b(s ; a) = (S );


(s; a) = fs ; s g: Dar (fs ; s g) =

s2 s1
(s ) [ (s ) = fs ; s ; s g: ^In concluzie, avem b(s ; a) = fs ; s ; s g: Analog, se deduc
si celelalte tranzitii:
2








b(s ; b) = (fs ; s g) = (s ) [ (s ) = fs ; s ; s g;


1

b(s ; a) = (s ) = fs ; s g;
2

b(s ; b) = (fs ; s g) = fs ; s ; s g;
2

b(s ; a) = (fs ; s g) = fs ; s ; s g;
3

b(s ; b) = (s ) = fs ; s g;
3

b(s ; a) = b(s ; b) = b(s ; a) = b(s ; b) = ;:


^In concluzie, automatul nit nedeterminist echivalent cu T este
A = (fs ; s ; s ; s ; s g; fa; bg; 0; s ; fs ; s g);
4

unde 0 este data prin tabelul de tranzitie:


a
0
s fs ; s ; s g
s
fs ; s g
s fs ; s ; s g
s
;
s
;
1

3
4

fs ; s ; s g
fs ; s ; s g
fs ; s g
;
;
3

5
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
a 2 ij () sj 2 (si ; a); 8 a 2  [ fg:
1

77

Sisteme tranzitionale

Exemplul 2.8.1 Pentru sistemul tranzitional din Exercitiul 2.8.1, matricea  este:
0

=

B
B
B
B
@

;
;
;
;
;

fg
;
fag
;
;

fg
fbg
;
;
;

;
fbg
fbg
fg
;

fag
fag
;
fg

1
C
C
C
C
A

De nitia 2.8.5 Fie matricele  = (ij );  = (ij ) 2 MjSjjSj; i; j = 1; jS j cu


elemente submultimi din  [fg: De nim doua operatii noi relative la aceste matrice:
e
 adunarea:  +
= (ij0 ); i; j = 1; jS j astfel:
1

ij0 = ij [ ij ;
1

 compunerea:  e
1

= (ij0 ); i; j = 1; jS j astfel:

ij0 =
iar legea \" se de neste astfel:

jSj
[

ik kj ;
1

k=1

8
>
<

pentru orice A ; A  [fg; avem A A = A


>
:A
A
1

1
2
1

[A

daca
daca
daca
daca

 2= A
2A
2A
2A

1
2
1
1

Observatia 2.8.2 Daca jA j = jA j = 1; atunci regulile de mai sus devin:


1







  = ;

 a = a  = a;
a b = ;;

8 a 2 ;

8 a; b 2 ;
; a = a ; = ;; 8 a 2 ;
;  =  ; = ;:

De nitia 2.8.6 Numim puterea a n a a matricei :


n
n = n


e

n=1
n > 1.

0
B

e 2+
e ::: si  = In +
e + , unde In = B
Notam + = +
@

; : : ;
;  : : ;


:

: : : :

; ; : : 

1
C
C:
A

[A

A
A
\A

1
2

78

Sisteme tranzitionale

Exemplul 2.8.2 Fie  din Exemplul 2.8.1. Vom calcula, pe r^and, puterile acestei

matrice.

 =
2

B
B
B
B
@

;
;
;
;
;

Apoi, avem

 =  e =
3

fag
;
;
;
;

fbg
;
;
;
;

;
;
;
;
;
;
;
;
;
;
;
;
;
;
;

B
B
B
B
@
0
B
B

 =  e = B
B
4

@
0

 =  e =
5

Astfel obtinem suma

e 2 +
e 3 +
e 4 +
e 5
+

B
B
B
B
@

B
B
B
B
@

;
;
;
;
;
;
;
;
;
;
;
;
;
;
;

fag
fbg
fbg
fg
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;

fb g
fag
fag
;
fg
fag
fbg
fbg
fg
;
fbg
fag
fag
;
fg

fbg
fag
fag
;
fg

1
C
C
C
C
A

fag
fbg
fbg
fg
;
fbg
fag
fag
;
fg
fag
fbg
fbg
fg
;

1
C
C
C
C
A
1
C
C
C
C
A
1
C
C
C
C
A

; f; ag f; bg f; a; bg f; a; bg


; ;
fbg fa; bg fa; bg
; fag
;
fa; bg fa; bg
; ;
;
fg
fg
; ;
;
fg
fg

1
C
C
C
C
A

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).
e
e
e
e
Exemplul 2.8.3 Pentru  din Exemplul 2.8.1, not^and B = +
+
+
+
,
2

obtinem:

B =

B
B
B
B
@

;
;
;
;
;

fag
;
fag
;
;

fbg fa; bg fa; bg


fbg fa; bg fa; bg
; fa; bg fa; bg
;
;
;
;
;
;

1
C
C
C
C
A

Observatia 2.8.3 Se vede ca B  este reprezentarea automatului nit nedeterminist

din Exemplul 2.8.1.

79

Sisteme tranzitionale

^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;
Iesire: A automat nit nedeterminist echivalent cu T ;
Metoda:
1) e  matricea ce reprezinta T ;
2) calculam i ; 8 i = 1; n;
e
e :::+
e n;
3) calculam B = +
+
4) calculam B  .
0

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
e
e :::+
e n = B;
jS j = n: Asadar  = +
+
(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

ijm

+1

jSj
[
k=1

m
ik
kj

Gra c, aceasta poate reprezentata:

s|i ! : !{z::: ! : !}sk ! sj


m
ik

| {z }

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 ;;

80

Expresii regulate

  2 kj ikm de unde ijm


  2 ikm kj rezulta ijm
  2 ikm \ kj rezulta ijm

+1

m;
= ik

+1

= kj ;

+1

m [ kj :
= kj

Deci, din starea si la sj exista un drum de lungime k etichetat cu ijm   [ fg;


e
e :::+
e n va reprezenta toate dru(iii) Din (ii), pentru k = n, rezulta ca +
+
murile (cu lungimi^ntre 1 si n, dar etichetat cu cel mult un simbol din ) dintre oricare
e
e :::+
e n =  : Deci B =  : Acum,
doua stari. Cum T are n stari, rezulta ca +
+
conform constructiei din Teorema 2.8.1, va rezulta ca B =  :
+1

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:
+

e
1 : M = In +;
e e
e
e +
e
e = ;
2 : M = M eM = (In +)
(In +)
= In +
; deoarece +
2

...

k: M =M
k
2

eM 2

, 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

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 ;

81

Expresii regulate

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 asociate:







E = (0 + 1) 0 0 (0 + 1) ;
E = (1 + 10) ;
1

E = (0 + 1) 0 1 1;
E = 0 1 2;
3

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
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
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
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
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
cel putin un 0, urmat de un numar arbitrar de cel putin un 1, apoi de un numar
arbitrar de cel putin un 2.
1

^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 ^ntro gramatica de tip 3 echivalenta, avem nevoie de ^nchiderile la reuniune, produs si
iteratie a gramaticilor de tip 3.

82

Expresii regulate

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
^nc^at VN \ VN = ;).
1

01

02

a) Consideram gramatica G = (VN [ VN [ fx g; VT [ VT ; x ; P [ P [ fx !


x ; x ! x g): Se poate demonstra ca L(G) = L(G ) [ L(G );
b) Consideram gramatica G = (VN [ VN ; VT [ VT ; x ; P [ fx ! p x0 = x ! p x0 2
P ; x; x0 2 VN ; p 2 (VT ) g [ fx ! p x = x ! p 2 P ; p 2 (VT ) g): Se poate
demonstra ca L(G) = L(G )  L(G );
1

01

02

01

02

c) Consideram gramatica G = (VN [ fy g; VT ; y ; P [ fy ! x ; y ! g [ fx !


p y = x ! p 2 P ; x 2 VN ; p 2 (VT ) g): Se poate demonstra ca L(G) =
(L(G )) .
1

^In continuare, vom prezenta un algoritm e cient (liniar fata de dimensiunea expresiei 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

o alta structura de date necesara pentru acest algoritm este functia:

lista : VN [ VT
de nita astfel:
(1)

! P (VN )

() y 2 VN ; 9 x =) p y; p 2 VT si


lista(x) = ;; 8 x 2 VT :

y 2 lista(x); x 2 VN

(2)
Altfel spus, lista(x) reprezinta multimea neterminalilor accesibili din x.

Algoritmul (ALG5):

83

Expresii regulate

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
9. i := i + 1; fxi va deci un neterminal noug
10. VN := VN [ fxi g;
11. P := P [ fxi ! E ; xi ! E g;
12. lista(xi ) = fxi g [ lista(E ) [ lista(E );
13. ^nlocuieste E 0 din stiva cu xi
end
else f^nseamna ca E 0 = (E  E )g
case E of
14. E 2 VT : begin
15. i := i + 1;
16. VN := VN [ fxi g;
17. P := P [ fxi ! E E g;
18. lista(xi ) := fxi g [ lista(E );
19. ^nlocuieste E 0 din stiva cu xi
end
20. E 2 VN : begin
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
22. lista(x) := lista(x) [ lista(E ); unde x sunt cei din pasul 21;
23. ^nlocuieste E 0 din stiva cu E
end
end fde la caseg
end fde la if (v^arful stivei este ')')g
1

84

Expresii regulate

else
24. if (^n v^arful stivei este '') then begin
25. consideram expresia E 0 = E  ; E 2 VN [ VT ;
26. i := i + 1;
27. VN := VN [ fxi g;
28. lista(xi ) = fxi g [ lista(E );
29. ^nlocuieste E 0 din stiva cu xi
30. if E 2 VT then
31. P := P [ fxi ! E xi ; xi ! g
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
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);
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
1

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;

85

Expresii regulate

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 +
E )) = L(E ) [ L(E ) urmarind ideile din Teorema 2.9.1 (^nchiderea la reuniune).
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,
lista(E ) = ;, respectiv lista(E ) = ;.
Pasii 14-19, respectiv 20-23, construiesc gramatica care genereaza L(E 0 ) = L((E 
E )) = L(E )  L(E ); baz^andu-ne pe ^nchiderea la produs. Cazul E 2 VN respecta
exact constructia din Teorema 2.9.1, bine^nteles aleg^and regulile cu neterminali accesibili (adica din lista(E )). Cazul E 2 VT este mai simplu, deoarece regula xi ! E E
este de tip 3 (drept liniara).
Pasii 24-33 construiesc gramatica care genereaza L(E 0 ) = L(E  ) = (L(E ))
folosind ^nchiderea la produs. La fel, constructia difera putin dupa cum E 2 VT
sau E 2 VN :
Ultima situatie se refera la citirea unui simbol din expresia regulata sau la precizarea simbolului de start al gramaticii si iesirea din bucla while (stiva este nevida)
do begin :
1

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

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 Algoritmul (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

86

Expresii regulate

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
P = fx ! a bg
lista(x ) = fx g
1

87

Expresii regulate

)
b
b
(
+
a
(
(
+
x
(

Dupa executia pasilor 14-19, obtinem







i=2
VN = fx ; x
1

P = fx

! a b; x ! b bg
lista(x ) = fx g
lista(x ) = fx g
1

)
x
+
a
(
(
+
x
(

Dupa executia pasilor 8-13, obtinem

 i=3
 VN = fx ; x ; x g
 P = fx ! a b; x ! b b; x ! a; x ! x g
1

88

Expresii regulate

 lista(x ) = fx g
 lista(x ) = fx g
 lista(x ) = fx ; x g
1

a
(
x
(
+
x
(

Dupa executia pasilor 25-31, obtinem









i=4
VN = fx ; x ; x ; x

g
P = fx ! a b; x ! b b; x ! a; x ! x ; x ! a x ; x ! g
lista(x ) = fx g
lista(x ) = fx g
lista(x ) = fx ; x g
lista(x ) = fx g
1

)
b
x
(
x
(
+
x
(

Dupa executia pasilor 20-23, obtinem

89

Expresii regulate









i=4
VN = fx ; x ; x ; x

g
P = fx ! a b; x ! b b; x ! a; x ! x ; x ! a x ; x ! bg
lista(x ) = fx g
lista(x ) = fx g
lista(x ) = fx ; x g
lista(x ) = fx g
1

)
x
x
(
+
x
(

4
3

Dupa executia pasilor 20-23, obtinem









i=4
VN = fx ; x ; x ; x

g
P = fx ! a b; x ! b b x ; x ! a x ; x ! x ; x ! a x ; x ! bg
lista(x ) = fx g
lista(x ) = fx g
lista(x ) = fx ; x ; x ; x g
lista(x ) = fx ; x g
1

x
+
x
(

90

Expresii regulate

Dupa executia pasilor 24-29 si 32-33, obtinem

 i=5
 VN = fx ; x ; x ; x ; x g
 P = fx ! a b; x ! b b x ; x ! a x ; x ! x ; x ! a x ; x ! b x ; x !
; x ! x g
 lista(x ) = fx g
 lista(x ) = fx g
 lista(x ) = fx ; x ; x ; x g
 lista(x ) = fx ; x g
 lista(x ) = fx ; x ; x ; x g
1

)
x
+
x
(

Dupa executia pasilor 8-13, obtinem

 i=6
 VN = fx ; x ; x ; x ; x ; x g
 P = fx ! a b; x ! b b x ; x ! a x ; x ! x ; x ! a x ; x ! b x ; x !
; x ! x ; x ! x ; x ! x g
 lista(x ) = fx g
 lista(x ) = fx g
 lista(x ) = fx ; x ; x ; x g
 lista(x ) = fx ; x g
 lista(x ) = fx ; x ; x ; x g
 lista(x ) = fx ; x ; x ; x ; x ; x g
1

Ultima situatie este re ectata de pasii 34-39, c^and se precizeaza ca simbolul de start
al gramaticii G este x .
6

91

Expresii regulate

^In concluzie, gramatica echivalenta este

G = (fx ; x ; x ; x ; x ; x g; fa; bg; x ; P )


1

unde regulile P sunt fx ! a b; x ! b b x ; x


b x ; x ! x ; x ! ; x ! x ; x ! x g
1

! x ; x ! ax ; x ! ax ; x !
2

^In cea de-a doua parte a sectiunii consacrate expresiilor regulate, vom da un procedeu (cu un numar polinomial de operatii) de determinare a expresiei regulate echivalente (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

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
ecuatia:
(2)
Xi = Xi1  ai1 + Xi2  ai2 + ::: + Xi  ai + i
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).
1

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)
(4)

Xi = Xi1  ai1 + Xi2  ai2 + ::: + Xi  ai + i


k

Yj = Yj1  bj1 + Yj2  bj2 + ::: + Yj  bj + j


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

sj 2 (sj1 ; bj1 ) [ (sj2 ; bj2 ) [ ::: [ (sj ; bj )


h

92

Expresii regulate

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.
Fara a restr^ange generalitatea, putem presupune acum ca exista t 2 f1; 2; :::; kg
astfel ^nc^at Yj = Xi : Facem substitutia respectiva si obtinem ecuatia:
h

Xi = Xi1  ai1 + ::: + Yj1  bj1  ai + Yj2  bj2  ai + ::: + Yj  bj  ai + j  ai + ::: + Xi  ai + i :


Pentru a adevarata aceasta relatie, este su cient sa aratam ca:
t

si 2 (sj1 ; bj1  ai ) [ (sj2 ; bj2  ai ) [ ::: [ (sj ; bj  ai ):


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 ):
Situatia j  ai este banala.
Dupa un numar nit de astfel de substitutii, rezulta ^n cele din urma o ecuatie
\recursiva" (daca limbajul nu este nit), adica de forma:
t

X = +X 
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 ;
(5)

b) L(Xi ) = [si ]A;s0 ; unde [si ]A;s0 = fp= p 2  ; (s0 ; p) = si g;


c) Not^and cu E =

h 1 (xi )2F

Xi , avem ca L(A) = L(E ) =

h 1 (xi )2F

L(Xi ):

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):

93

Expresii regulate

Intrare: A = (S; ; ; s ; F ) automat nit (determinist, nedeterminist, sistem


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
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
^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):
1

Exercitiul 2.9.3 Fie automatul determinist A = (fs1 ; s2 ; s3 g; fa; bg; ; s1; fs2 ; s3 g)
cu dat prin graful de tranzitie:

#
#

"!
"!
SoS
7

S

SS

#

S
/
"!
a

Z~

94

Expresii regulate

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


semni catiile precizate mai sus. Obtinem sistemul:
X =+X a+X a+X b
X =X b+X a
X =X b
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
X = (a b + X (b a b + a))(a a b)
1

^Inlocuind ^n a treia ecuatie, avem:


X = a b(a a b) b + X (b a b + a)(a a b) b deci
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 );
b) Fie E = X + X : Este clar ca L(E ) = L(A);
1

A;s




A;s

A;s

c) L(A) = L(X ) [ L(X ):


2

! 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.

95

Exercitii propuse spre rezolvare

2.10 Exercitii propuse spre rezolvare


Exercitiul 2.10.1 Fie automatul nit determinist A = (S; ; ; s ; F ): Sa se arate
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


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

s
s
s
s

1
2
3
4

0
s
s
s
s

3
4
1
2

1
s
s
s
s

2
1
4
3

Exercitiul 2.10.5 Fie automatul nit determinist


A = (fs ; s ; s ; s g; fa; bg; ; s ; fs g);
1

cu de nit prin matricea de tranzitie:

96

Exercitii propuse spre rezolvare

s
s
s
s

2
3
4

a
s
s
s
s

b
s
s
s
s

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

cu de nit prin matricea de tranzitie:

s
s
s
s
s
s

2
3
4
5
6

a
s
s
s
s
s
s

2
4
5
5
4
4

b
s
s
s
s
s
s

3
3
2
6
6
5

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;
k
b) L = fann =n  0g; k  2 natural xat;
2
c) L = fa n=n  0g;
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
k
apartenenta la  :
0

+1

+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).

97

Exercitii propuse spre rezolvare




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

cu de nit prin matricea de tranzitie:

s
s
s
s
s
s

a
s
s
s
s
s
s

b
s
s
s
s
s
s

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

cu de nit prin matricea de tranzitie:

s
s
s
s
s
s
s
s

0
s
s
s
s
s
s
s
s

4
4

4
5

1
s
s
s
s
s
s
s
s

1
3
2
1
6
5
7
4

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 nedeterminist, cu functia de tranzitie data prin matricea:

a
b
s fs ; s g fs g
s fs ; s g fs g
s fs ; s g fs g
1

98

Exercitii propuse spre rezolvare

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 nedeterminist, cu functia de tranzitie data prin matricea:
a
b

s fs ; s g fs g
s fs ; s g fs g
s
fs g fs g
1

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


nedeterminist, cu functia de tranzitie data prin matricea:
a
b

s fs ; s g fs g
s fs ; s g fs g
s
fs g fs ; s g
s
fs g
fs g
0

2
1

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

Exercitiul 2.10.15 Fie automatul nit determinist


A = (fs ; s ; s ; s g; fa; bg; ; s ; fs g);
1

cu de nit prin matricea de tranzitie:

s
s
s
s

2
3
4

a
s
s
s
s

2
2
4
4

b
s
s
s
s

4
3
3
4

Sa se determine gramatica de tip 3 echivalenta cu A.

99

Exercitii propuse spre rezolvare

Exercitiul 2.10.16 Pentru automatul din Exercitiul 2.10.12, sa se determine gramatica 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
L
L

= fan bn k = n  1g; k xat;


= fan b n = n  1g;
+

= fan bkn = n  1g; k xat.

Exercitiul 2.10.21 Sa se arate ca limbajul L = fan b a

Bar-Hillel, dar nu este regulat.

g [ fa bg veri ca Lema


+

Exercitiul 2.10.22 Fie sistemul tranzitional (partial de nit)


A = (fs ; s ; s ; s g; fa; bg; ; s ; fs g);
1

cu de nit prin matricea de tranzitie:

s
s
s
s

1
2
3

a
s
s
fs ; s
s
2

b
s
s
s
s

2
3

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.

100

Exercitii propuse spre rezolvare




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 !


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

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:
E = 1 + 0(10)(11 + 0)
1

E = (01) (1 + 00):

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

a)

E = ( + (a b + a b(a a b) b((b a b + a)(a a b) b)


(b a b + a))(a a b) a + a b(a a b) b((b a b + a)(a a b) b) b)a :
1

si

E = (a + b(b a)(a + b b)) ;


2

101

Exercitii propuse spre rezolvare

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)
(2)
(3)

X =+X a+X a+X b


X =X b+X a
X =X b
1

^Inlocuim (3) ^n (2) si obtinem:

X = X b+X ba
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:

X =  + X a + X b(b a) a + X b(b a) b b

(5)

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)
(8)

X = (a + b(b a) (a + b b)) b(b a)


X = (a + b(b a) (a + b b)) b(b a) b
2

Acum, prin comparatie cu rezultatele de la Exercitiul 2.9.3, se veri ca imediat


echivalenta expresiilor regulate.

102

Exercitii propuse spre rezolvare

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) echivalente.

103

Exercitii propuse spre rezolvare

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 limbajelor 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

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

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;

2 S este starea initiala;


z 2 este simbolul de start din memoria pushdown;
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; )
s

104

105

Automate pushdown nedeterministe

Notam

: C^and scriem

2 (1)

^nchiderea re exiva si tranzitiva, respectiv tranzitiva, a relatiei


(1)

^nseamna ca s-a aplicat tranzitia cu numarul 1: Daca scriem

^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.


Atunci limbajul acceptat de P este

L(P ) = fw= w 2  ; (s ; w; z )
(s; ; ); s 2 F; 2  g:
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

(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)

Astfel, avem (s ; 0 0 1 1; z )
0

(s ; 1; 0 z )
2

(4)

(s ; ; z )

(5)

(2)

(s ; 0 1 1; 0 z )

(s ; ; ); si cum s


0

2 F , rezulta ca 0 0 1 1 2 L(P ):

Trecem acum la cazul general. Avem: (s ; 0n 1n ; z )

(1)

(s ; 0n 1n ; 0 z )

(3)

n 1;(4)

(3)

(s ; 1 1; 0 0 z )

n 1;(2)

(5)

(s ; 1n ; 0n z )
(s ; 1n ; 0n z )
(s ; ; z )
(s ; ; ); si la fel cum
s 2 F , rezulta ca 0n 1n 2 L(P ): Cu aceasta, prima incluziune este terminata.

: Fie w 2 L(P ); adica exista tranzitia (s ; w; z )
(s ; ; ); 2  (s ind
singura stare nala). Sa aratam ca 9 n 2 N astfel ^nc^at w = 0n 1n: Distingem mai
multe situatii:
1

106

Automate pushdown nedeterministe


;

Cazul I: w = : E clar ca (s0 ; ; z )

Cazul II: w 6= ; deci w = i1 i2 ::: im ; m  1; cu i1 ; :::; im 2 f0; 1g: Presupunem

(s ; ; z ): Deci pentru n = 0 avem


0

w = 0n 1n :

i = 1. Cum (s ; 1; ) = ;; rezulta ca ne blocam (nu avem ce tranzitie sa


aplicam).
Asadar i = 0: Fara a restr^ange generalitatea, distingem cazurile:
1

k;+

(s ; ; 0n z ) si ne-am blocat


{ Cazul II.1: w = 0k ; k  1 =) (s ; 0k ; z )
deoarece (s ; ; ) = ;;
{ 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)
(s ; 1l u; 0k z )
(s ; 1l u; 0k z ).
Acum distingem trei situatii:
;
 Situatia 1: k < l. Obtinem
(s ; 1l k u; z )
(s ; 1l k u; ) si
ne-am blocat deoarece (s ; 1; ) = ;;
;
(s ; u; 0k l z ) si ne-am blocat
 Situatia 2: k > l. Obtinem
deoarece (s ; 0; 0) = ; si (s ; ; 0) = ; (u nu ^ncepe cu 1);
;
 Situatia 3: k = l. Obtinem
(s ; u; z )
(s ; u; ) si ne
blocam daca u = 0 u0; deoarece (s ; 0; ) = ;: Deci singura posibilitate
ram^ane u = . Asadar, w = 0k 1k ; k  1:
1

(3)

(4)

(5)

(4)

(4)

(5)

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

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;

107

Automate pushdown nedeterministe

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
daca scriem

(1)

(2)

sa ^nsemne aplicarea tranzitiei (1) sau (2), iar

(3 )

^ntelegem ca se aplica tranzitia cu numarul 3 partea a doua (cea


_
care ajunge ^n (s ; )). Astfel, avem tranzitiile (s ; i i ::: in in ::: i i ; z )
a _ _ _ a ;
b_ b
(s ; i ::: in in ::: i i ; i z )
(s ; in ::: i i ; in ::: i i z )
(s ; in
_ ;
(s ; ; z )
(s ; ; );
::: i i ; in ::: i i z )

: Fie w 2 L(P ); deci exista tranzitia (s ; w; z ) (s ; ; ); 2 fz; a; bg: Dar
singura tranzitie care prin care se poate ajunge ^n s este (9), deci ne vor interesa
forma cuvintelor pentru care ajungem ^n starea s , iar ^n stiva pushdown avem z:
Astfel, e w = i i ::: ik ; ij 2 fa; bg; 8 j = 1; k: La ^nceput avem una din tranzitiile
_
(s ; i i ::: ik ; z )
(s ; i ::: ik ; i z ): ^In acest moment, putem aplica (3a) _ (4) _
(5) _ (6a), sau (3b) _ (6b) daca i = i . Oricum, daca aplicam (3b) _ (6b), ajungem
^n starea s , si de acolo nu mai putem trece ^n starea s . Deci, fara a restr^ange
generalitatea consideram ca (3a) _ (4) _ (5) _ (6a) s-a aplicat de l ori (0  l  k).
Astfel am obtinut tranzitia
a _ _ _ a ;l
(s ; il ::: ik ; il ::: i z )
(s ; i ::: ik ; i z )
(1)

(3 )

(5)

(6 )

(8)

(2)

(3 )

(7)

(4)

(6 )

(9)

(1)

(2)

(3 )

(4)

(5)

(6 )

+1

Cazul I: daca l = k atunci ne blocam deoarece (s0 ; ; orice) = ;;

Cazul II: daca l < k atunci (s0 ; il+1 ::: ik ; il ::: i1 z )

_ b

(3 )

(6 )

(s ; il ::: ik ; il ::: i
z ) si il = il (altfel ne blocam). De aici se pot aplica doar regulile (7) sau (8)
trebuind sa ajungem ^n con guratia (s ; ; z ). Distingem subcazurile:
1

+2

+1

{ Subcazul II.1: k l 1 < l 1 (sau k < 2l). Obtinem tranzitia:


_ ;k l ;
(s ; ; i l k ::: i z )
(s ; il ::: ik ; il ::: i z )
(7)

+2

(8)

care conduce la blocaj deoarece (s ; ; orice) = ;;


1

108

Automate pushdown nedeterministe

{ Subcazul II.2: k l 1 > l 1 (sau k > 2l). Obtinem tranzitia:


_ ;l ;
(s ; ik l ::: ik ; z )
(s ; ik l
(s ; il ::: ik ; il ::: i z )
::: ik ; )
si iarasi ne blocam deoarece memoria pushdown a devenit vida;
{ Subcazul II.3: k = 2l Obtinem tranzitia:
_ ;l ;
(s ; il ::: ik ; il ::: i z )
(s ; ; z )
(s ; ; )
(7)

+2

(8)

(7)

+2

(9)

(8)

(9)

care este o con guratie de acceptare deoarece s este stare nala. ^In
timpul aplicarii tranzitiilor (7) sau (8), avem satisfacute relatiile il =
il ; il = il ; :::; ik = i : De mai sus avem si il = il deci not^and
cu w = i i ::: il rezulta ca w = w wf ; w 2 fa; bg , adica exact ceea ce
trebuia demonstrat.
2

+2

+3

+1

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 ;
z; fq g) cu dat prin:
0

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
3.1.2, daca w ^ncepe cu b sau c atunci ne blocam.
0

109

Automate pushdown nedeterministe

Asadar, w ^ncepe cu a, adica 9 k


Astfel, ^n mod determinist, avem

 1 astfel ^nc^at w = ak w ; cu
k;

(q ; ak w ; z )
0

(1)

2 fb; cg:

(q ; w ; a k z )
1

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,
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
tranzitia 7, deci trebuie vizat ^n memoria pushdown simbolul z . Asadar trebuie eliminate toate simbolurile a k prezente ^n stiva pushdown. Deci, daca t < 2k atunci ne
blocam deoarece nu avem tranzitie (q ; ; a), iar daca t > 2k ajungem la con guratia
(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
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:
1

2 +1

2 +2

G
G

= (fS; Ag; fa; b; cg; S; fS ! a S A A j a A A; A ! b j cg);

= (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

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


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
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
este dat prin:

110

Automate pushdown nedeterministe

1) (s; ; x ) = f(s; x c); (s; x c)g


(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
din Teorema 3.1.1.
Pentru a prezenta a doua metoda, mai ^nt^ai sa observam ca L(G ) =
fan bn cm = n; m  1g: Asemanator cu Exercitiul 3.1.1, construim un automat pushdown determinist care accepta acest limbaj. Fie
P 0 = (fs ; s ; s ; s g; fa; b; cg; fa; z g; ; s ; z; fs g);
cu dat astfel:
1. d(s ; a; z ) = (s ; a z );
2. d(s ; a; a) = (s ; a a);
3. d(s ; b; a) = (s ; );
4. d(s ; b; a) = (s ; );
5. d(s ; c; z ) = (s ; z );
6. d(s ; c; z ) = (s ; z );
7. (rest) = ;; ^n celelalte cazuri.
Lasam cititorului, ca exercitiu, demonstratia echivalentei dintre P 0 si G :
Teorema 3.1.2 Pentru orice automat pushdown (nedeterminist) cu memorie vida,
0

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 nedeterminist 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 deterministe (care formeaza clasa L2DET ).

111

Automate pushdown nedeterministe

Exercitiul 3.1.5 Fie automatul pushdown determinist


P = (fs ; s ; s g; f0; 1g; fz; 0g; ; s ; z; ;);
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
memorie vida. Construim gramatica G = (S   S [ fx g; ; x ; P ) unde regulile
P se formeaza dupa cum urmeaza:
0

(i) Pentru tranzitii de tipul (r; ::: n ) 2 (s; a; z ); unde a 2  [fg; ; ; :::;
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 timpul 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

(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

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 ]
{ [s ; z; s ] ! 0 [s ; 0; s ] [s ; z; s ]
{ [s ; z; s ] ! 0 [s ; 0; s ] [s ; z; s ]
0

112

Automate pushdown nedeterministe

{
{
{
{
{
{

[s
[s
[s
[s
[s
[s

0
0
0
0
0
0

; z; s
; z; s
; z; s
; z; s
; z; s
; z; s

1
1
1
2
2
2

] ! 0 [s
] ! 0 [s
] ! 0 [s
] ! 0 [s
] ! 0 [s
] ! 0 [s

1
1
1
1
1
1

; 0; s
; 0; s
; 0; s
; 0; s
; 0; s
; 0; s

0
1
2
0
1
2

] [s
] [s
] [s
] [s
] [s
] [s

0
1
2
0
1
2

; z; s
; z; s
; z; s
; z; s
; z; s
; z; s

1
1
1
2
2
2

]
]
]
]
]
]

Pentru tranzitia (s ; 0; 0) = (s ; 0 0), se procedeaza la fel (obtinem tot noua


reguli).






Pentru tranzitia (s ; 1; 0) = (s ; ), obtinem regula [s ; 0; s ] ! 1:

Pentru tranzitia (s ; 1; 0) = (s ; ), obtinem regula [s ; 0; s ] ! 1:


2

Pentru tranzitia (s ; ; z ) = (s ; z ), obtinem regula [s ; z; s ] ! :


2

Reguli de start: x

! [s ; z ; s ] j [s ; z ; s ] j [s ; z ; s ]:
0

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
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, consideram automatul pushdown A = (fq ; q ; q g; f0; 1g; fx; z g; ; q ; z; ;); unde este
3

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;

113

Automate pushdown nedeterministe

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 echivalenta 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

\"):

daca q = q
[q ; u; q ] [q ; v; q ] = ;[q ; uv; q ] altfel.
Folosind asociativitatea st^anga, putem extinde la (Q    Q)m ; m  2; astfel:
1

0 ; um; qm ] =
[q ; u ; q ] [q0 ; u ; q ] ::: [qm
0 ; um ; qm ]) [q0 ; um ; qm ]
= ([q ; u ; q ] [q0 ; u ; q ] ::: [qm
m
1

+1

+1

Algoritmul (ALG7):
Intrare: A = (Q; ; ; ; q ; z ; ;) un automat pushdown;
Iesire: G = (V; ; S; P ) o gramatica independenta la context echivalenta;
Metoda:
1. := ;;
2. := ;
3. P := ;;
4. for (orice (q ; ) 2 (q; a; X )) do begin
5.
:= [ f[q; X; q ]g;
6. P := P [ f[q; X; q ] ! ag
end
7. k := 1;
repeat
8.
k := k ;
9. for (orice (q ; z z :::zm ) 2 (q; a; X )) do begin
10.
ok := true; tempq := q ;
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;
16.
P := P [ f[q; X; temp[m]] ! [q ; z ; temp[1]][temp[1]; z ; temp[2]]:::
[temp[m 1]; zm ; temp[m]]g
end
0

0
1

+1

+1

+1

114

Automate pushdown nedeterministe

end ;
17. k := k + 1
18. until k = k ;
19. if (9 [q ; z ; q] 2 k ) then begin
20.
k := k [ fS g;
21. for (orice [q ; z ; q] 2 k ) do
22.
P := fS ! [q ; z ; q]g
end ;
23. V := k ;
1

Teorema 3.1.3 (corectitudinea Algoritmului (ALG7))


Fie A = (Q; ; ; ; q ; z ; ;) un automat pushdown, care este intrare pentru Algo0

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

 ::: 

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
[q; X; temp[m]] care se adauga la pasul 15 din Algoritmul (ALG7). Asadar, la pasul
16 al Algoritmului (ALG7), exista o regula
+

+ +1

+ +1

[q; X; temp[m]] ! [q ; z ; temp[1]][temp[1]; z ; temp[2]]:::[temp[m 1]; zm; temp[m]];


1

unde [q ; z ; temp[1]]; [temp[1]; z ; temp[2]]; :::; [temp[m


Dar k l = k ; (din presupunerea inductiva), deci
1

1]; zm; temp[m]]

k+l :

[q ; z ; temp[1]]; [temp[1]; z ; temp[2]]; :::; [temp[m 1]; zm; temp[m]] 2 k :


1

Astfel k l = k : De asemeni, din pasul inductiv aplicat pentru l = 1; rezulta


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
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) construieste 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):
+ +1

+1

+1

+ +1

115

Automate pushdown nedeterministe

Ram^ane sa aratam ca Algoritmul (ALG7) construieste corect gramatica corespunzatoare G: Pasul 3 este natural (el corespunde pentru
= ;). La pasii 4,5,6
construim neterminalii accesibili folosind derivari directe:
0

[q; X; q ] ! a

() [q; X; q ] =G) a:
+

Deci, obtinem multimea neterminalilor accesibili folosind derivari directe ( k =


k [ fx=x ! x x :::xk ; x ; x ; :::; xk 2 k g).
Presupunem ca am construit k multimea neterminalilor accesibili si P regulile
corespunzatoare. Sa vedem cum obtinem k : Din pasul 8, avem k = k : Pasul
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]
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
q ; ?q = temp[m]:
Daca 9 k 2 f2; 3; :::; mg astfel ^nc^at temp[k] 6= temp0[k]; atunci rezulta ca trebuie sa
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.
1

+1

+1

+1

Exercitiul 3.1.6 Fie automatul pushdown din Exemplul 3.1.1. Sa se gaseasca gramatica echivalenta folosind Algoritmul (ALG7).

Solutie Obtinem = ;;
= 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;
= [ f[q ; z; q ]; [q ; x; q ]g;
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;
= ; (acum, trecem la pasul 19)
= [ fS g;
P = P [ fS ! [q ; z; q ]g:
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).
0

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:

116

Lema de pompare pentru limbaje de tip 2

T ( ) = fx=x 2 or x ! x x :::xk ; xi 2 ; i = 1; kg:


1

Obtinem:

fq g ! T ( ) ! T (
jj
jj
jj
0

) ! :::

 V: Daca V  V atunci T (V )  T (V ):
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
k = k (sau o forma echivalenta: \9 k 2 N; k = astfel ^nc^at T ( ) = ").

Lema 3.1.1 Fie V ; V


1

Acest

+1

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


arbore de derivare (sau x -arbore) pentru G este un arbore \ordonat de la st^anga
la dreapta" A = (V; E ) ^mpreuna cu o functie de etichetare f : V ! VN [ VT [ fg
0

cu proprietatile:

117

Lema de pompare pentru limbaje de tip 2

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 ) ;
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
x
0

. #

&

x
x . . . xn
Mentionam ca etichetele x ; x ; :::; xn apar ^n aceasta ordine.
1

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


 ^i corespunde arborele de derivare de
regula yk ! r r ::: rt . Daca derivarii x =j;)
j
mai jos
x
1

+1

+1

&

y . . yk . . ym
 ^i va corespunde arborele de derivare:
atunci derivarii x =j;)
j
x
1

+1

. # &

y . . yk . . ym
1

. # &

r r . . rt
Se observa ca pentru o derivare exista un unic arbore de derivare, pe c^and reciproc
nu. De exemplu, e gramatica expresiilor aritmetice
1

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

118

Lema de pompare pentru limbaje de tip 2

corespund la acelasi arbore de derivare:


E

. # &
+

. # &
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

119

Lema de pompare pentru limbaje de tip 2

Exercitiul 3.2.1 Fie gramatica G = (fx ; x ; x g; fa; bg; x ; fx ! x x ; x !


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
1; 2; 3; 4; 6; 7; 8; 10; 12 sunt marcate. Presupun^and ca suntem ^n notatiile Lemei lui
1

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
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 considera derivarea (st^anga)
3

x =) x x =) x x x =) x x x x =) x x x x x =) b x x x x =)
1

=) 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 =)
=) 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 =)
=) 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 =)
=) 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 =)
=) 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
^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.
2

120

Lema de pompare pentru limbaje de tip 2

 W

? ? N ? 
? U
? 


? 
? 
?
?  W
?

 


? 
?


x

 U
x

a x

ax

De exemplu, pentru prima derivare directa, s-a aplicat regula x ! x x : Am


ales ca nod marcat pe x deoarece subarborele sau contine mai multe pozitii marcate dec^at subarborele de radacina x (subarborele st^ang al lui x contine 4 pozitii
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
subarborele drept nu are nici o pozitie marcata. Deci, pentru arborele de radacina x
sunt m pozitii marcate, pentru subarborele de radacina x sunt cel putin m pozitii
marcate, ..., iar pentru subarborele de radacina x de pe nivelul 6 avem cel putin m5
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:
1

a |{z}
b |{z}
a a| a{zb a};
w = b| a{z
b b a} |{z}

deci cuvintele

x
y
i
i
b a b b a a b a a a b a 2 L(G);

8 i  0:

Exercitiul 3.2.2 Folosind Lema de pompare (pentru limbaje independente de context), 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 conformitate cu Lema de pompare, consideram constanta n dependenta de limbajul L:

121

Lema de pompare pentru limbaje de tip 2

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

u=am

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

u=bm

Subcazul II.1. m =
6 l. Alegem i = 0 ^n conditia (iii) si obtinem ca w0 =

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
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 :
+(

1)

y=al

+(

1)

u=bm

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)m  n + n + 1 > 2n deci wn0 2= L; contradictie.
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.
+(

1)

+2




! Rezolvati Exercitiul 3.2.2 folosind Lema lui Ogden marc^and pozitiile simbolurilor
a. Este mai simpla solutia ?

122

Lema de pompare pentru limbaje de tip 2

Exercitiul 3.2.3 Clasa L nu este ^nchisa la intersectie (adica exista limbajele


L ; L de tip 2 pentru care L \ L nu este de tip 2).
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 =


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
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
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:
+

+2

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 =
an n bn n cn n 2= L; deoarece simbolul a apare de acelasi numar de ori cu
simbolul b: Contradictie cu (iii).
+

+2

+2

( +1)

+2

 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 =
an k1 ak1  q bn n k2 bk2 q cn n = an k1 q
bn n k2 q cn n = an n bn n k2 q cn n 2= L deoarece simbolul a apare
de acelasi numar de ori ca simbolul c: Deci, contradictie cu (iii).
Cazul II: y = ak1 ; u = bk2 ; n
1

(2 +1)

!+2

+2

(2 +1)

+2

+2

!+2

+2

+2

 0: Din (i) si (ii), rezulta 1  k  n deci k =n!


adica n! = k  q: Alegem i = q + 1 si demonstratia decurge ca ^n cazul I.

Cazul III: y = ak1 ; u = ck2 ; k2

Exercitiul 3.2.5 Sa se arate ca limbajul L = fa

n
10

= 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.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

123

Lema de pompare pentru limbaje de tip 2

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:
k1 k2 i :
x yi z ui v = a k1 k2 k1 i k2 i = a
1

10

10

+(

)(

1)

Trebuie sa aratam ca 9 i  0 astfel ^nc^at 10n + (k + k )(i 1) nu poate scris sub
forma 10m:
1

Cazul I: 10 nu divide k1 + k2 : Consideram i = 0, deci 10n

ultima cifra 0; deci 10 nu divide 10n

(k + k ):
1

(k + k ) nu are
1

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:


Acum presupunem ca exista m 2 N astfel ^nc^at 10n + (k + k )(i 1) = 10m:
Este clar ca m > n (aleg^and i  2). ^Inlocuind, obtinem
1

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


L 2 L ". Astfel, se putea aplica acest rezultat pentru exercitiul precedent, si ^n loc
2

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 =

124

Forma normala Chomsky

x y z u v. Deci y = ak1 ; u = ak2 ; si facem notatia k = k + k : Din conditiile (i) si (ii)
ale Lemei de pompare 1  k  n: Conditia (iii) va deveni:
1

2 +(i

x yi z ui v = an

k ;

1)

8 i  1:

Sa aratam ca, de exemplu, pentru i = 2, expresia n + k nu poate patrat perfect.


Este clar ca n < n + 1  n + k < n + n < n + 2n + 1 = (n + 1) , de
unde rezulta imediat ca n + k nu poate patrat perfect ( ind situat ^ntre 2 patrate
perfecte consecutive), deci L 2= L :
2




! Limbajul L din exercitiul precedent este de tip 1 deoarece este generat de gramatica 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 regulile 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
^In ideea de a o aduce la forma normala Chomsky, distingem cazurile:
1

 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;
 k  2 - daca exista i = 1; k astfel ^nc^at yi 2 VT atunci consideram neterminalul
1

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

8 i = 1; k:

Daca k > 2, atunci aceasta regula se ^nlocuieste acum cu:

x!A B ; B
1

unde B ; B ; :::; Bk
1

! A B ; :::; Bk ! Ak Ak ;
2

sunt neterminali noi (distincti).

Algoritmul (ALG8):

125

Forma normala Chomsky

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 Chomsky.
Metoda:
Mai ^nt^ai, consideram o functie h : VN [ VT ! VN data prin:
0

VT (zi neterminal nou)


h(yi ) = zyi yyi 2
i i 2 VN
Extindem h la cuvinte din (VN [ VT ) astfel:


h() = 
h(x x ::: xk ) = h(x ) h(x ) ::: h(xk )
1

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
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;
end ;
for (8 x ! y y ::: yk 2 P 0 ; k > 2) do begin
l := l + 1;
VN := VN [ fzl g;
P 0 := P 0 fx ! y y ::: yk g [ fx ! y zl g;
for i := 1 to k 2 do begin
l := l + 1;
VN0 := VN0 [ fzl g;
P 0 := P 0 [ fzl ! yi zl g;
end ;
l := l + 1;
VN0 := VN0 [ fzl g;
P 0 := P 0 [ fzl ! yk yk g;
end ;
end .
1

126

Forma normala Chomsky

Este clar ca Algoritmul (ALG8) are un numar nit de pasi. Corectitudinea algoritmului 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 Chomsky. Putem deduce care este numarul exact de neterminali, respectiv de reguli, pentru
gramatica G0 . Avem
0

jVN0 j = jVN j + jfx= x 2 VT ; 9 y ! r 2 P; jrj  2; x 2 rgj +

(jrj 2);

x!r; jrj>2

127

Forma normala Greibach

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>
Putem preciza o estimare superioara mai simpla:
X
jVN0 j  jVN j + jVT j +
(jrj 2):
x!r; jrj>
^In ceea ce priveste P 0 avem estimarea superioara:
2

jP 0 j  jP j + jVT j +




x!r; jrj>2

(jrj 1):

Aceste estimari superioare mai simple devin egalitate daca pentru ecare terminal
exista o regula care-l contine ^n partea dreapta.

^ general, egalitatea
! Pentru gramatica din Exercitiul 3.3.1 are loc egalitatea. In
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

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:

128

Forma normala Greibach

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
regulile cu y ^n partea st^anga.
1

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;

eliminarea recursiei st^angi cu un singur pas; astfel, e (i) x ! x j a j ::: j x n


regulile st^ang recursive si (ii) x ! j j ::: j m celelalte reguli cu x ^n partea
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 :

pornind de la regulile cu x ^n partea st^anga p^ana la xn se aplica procedeul de


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 ;
1

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
forma:
0

 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;

129

Forma normala Greibach

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
11. P 0 := P 0 [ fxk ! yk g;
12. marcheaza xk !
end
end
end
end ;
(1)

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
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
Greibach.
Metoda:
begin
1. P := P 0 ;
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
end ;
7. for i := 0 to n do
8. while (9 j; 0  j  n; yi ! xj 2 P ) do
9. P := P fyi ! xj g [ fyi ! = xj ! 2 P g
end .
1

130

Forma normala Greibach

Exercitiul 3.4.1 Fie gramatica G = (fx ; x ; x g; fa; bg; x ; P ) cu regulile P :


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

!x x x

Aceasta este tot de forma xi


ducem:

! xj cu j < i deci eliminam aceasta regula si intro-

x ! x x x x jbx x
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
regulile:
x ! bx x y jay
y ! x x x y jx x x
Deci, p^ana ^n prezent, regulile gramaticii sunt:
3

2.

4.

!x x
x ! x x jb
x ! bx x y jay jbx x ja
y ! x x x y jx x x

1. x
3.

Acum aplicam pasii 3,4,5,6 din Algoritmul (ALG10) si deci regula 2.a) se sterge
si se ^nlocuieste cu:

! bx x y x jay x jbx x x jax jb


3

Regula 1.a) se sterge si se ^nlocuieste cu:

! bx x y x x jay x x jbx x x x jax x jbx


3

Pasii 7,8,9 din Algoritmul (ALG10) ne permit ^nlocuirea regulilor de tipul yk


Obtinem:

! :

131

Forma normala Greibach

! bx x y x x x x y jay x x x x y jbx x x x x x y j
ax x x x y jbx x x y jbx x y x x x x jay x x x x j
bx x x x x x jax x x x jbx x x
3

^In concluzie, regulile gramaticii echivalente ^n forma normala Greibach sunt:

!
x !
x !
y !
x

bx x y x x jay x x jbx x x x jax x jbx


3

bx x y x jay x jbx x x jax jb


3

bx x y jay jbx x ja
3

bx x y x x x x y jay x x x x y jbx x x x x x y j
ax x x x y jbx x x y jbx x y x x x x jay x x x x
bx x x x x x jax x x x jbx x x
3

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
F

! (E )
!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].

132

Forma normala operator

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

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
operator;
Metoda:
begin
VN0 := fx0 g [ VN  VT ;
P 0 := ;;
for (8 a 2 VT ) do
P 0 := P 0 [ fx0 ! (x ; a) ag;
for (8 x ! a 2 P ) do
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 .
0

Exercitiul 3.5.1 Fie gramatica (din Exercitiul 3.4.1)


G = (fx ; x ; x g; fa; bg; x ; P );
1

cu regulile P :
1. x1 ! x2 x3

2. x2 ! x3 x1 j b

133

Forma normala operator

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
regulile P :
0




scriem mai ^nt^ai regulile de start: x


pentru regulile de tip x
; (x ; a) ! ;

! a

! (x ; a) a si x ! (x ; b) b;
1

adaugam ^n G0 evident regulile: (x ; b)


2

pentru regulile de tip x ! y z avem evident situatiile:


{ pentru regula x ! x x adaugam ^n G0 regulile:






(x ; a) ! (x ; a) a (x ; a)
(x ; a) ! (x ; b) b (x ; a)
(x ; b) ! (x ; a) a (x ; b)
(x ; b) ! (x ; b) b (x ; b)
{ pentru regula x ! x x adaugam ^n G0 regulile:
 (x ; a) ! (x ; a) a (x ; a)
 (x ; a) ! (x ; b) b (x ; a)
 (x ; b) ! (x ; a) a (x ; b)
 (x ; b) ! (x ; b) b (x ; b)
{ pentru regula x ! x x adaugam ^n G0 regulile:
 (x ; a) ! (x ; a) a (x ; a)
 (x ; a) ! (x ; b) b (x ; a)
 (x ; b) ! (x ; a) a (x ; b)
 (x ; b) ! (x ; b) b (x ; b)
1

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 algoritmul 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 !
B C= A ! B C 2 P gj. Aceste margini superioare se ating numai daca gramatica G0
este redusa.
2

Unde se folosesc gramaticile ^n forma normala operator ?

134

Forma normala operator

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 normala 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

! x x jx x ; x ! x x ; x ! a; x ! bg)
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
0

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;
Metoda:
1. := ;;
2. := ;
3. P 0 := ;;
4. for (orice x ! a 2 P ) do begin
5. := [ f(x; a)g;
6. P 0 := P 0 [ f(x; a) ! g
end ;
7. k := 1;
repeat
8.
k := k ;
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
end
12. k := k + 1
0

0
1

+1

+1

+1

135

Forma normala operator

13. until k = k ;
14. if (9 (x ; a) 2 k ) then begin
15.
k := k [ fx g;
16. P 0 := P 0 [ fx0 ! (x ; a) a= 8 a 2 VT astfel ^nc^at (x ; a) 2 k g
end ;
17. VN0 := k ;
1

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

 ::: 

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
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.
+1

Exemplul 3.5.2 Continuam cu Exemplul 3.5.1, pentru determinarea gramaticii


echivalente ^n forma normala operator folosind Algoritmul (ALG12):
= ;;
P 0 = ;;
= f(x ; a); (x ; b)g;
P 0 = f(x ; a) ! ; (x ; b) ! g;
= [ f(x ; b)g;
P 0 = P 0 [ f(x ; b) ! (x ; a)a(x ; b)g;
= [ f(x ; b)g;
P 0 = P 0 [ f(x ; b) ! (x ; b)b(x ; b)g;
= [ f(x ; b)g = ; (deoarece (x ; b) 2
P 0 = P 0 [ f(x ; b) ! (x ; a)a(x ; b)g;
= [ fx0 g;
P 0 = P 0 [ fx0 ! (x ; b)g:
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.

136

Limbaje independente de context deterministe

3.6 Limbaje independente de context deterministe


De nitia 3.6.1 Automatul pushdown M = (S; ; ; ; s ; z ; F ) se numeste determinist daca au loc conditiile:
0

1) j (s; a; z )j  1;

8 (s; a; z ) 2 S  ( [ fg) [ ;
daca (s; ; z ) 6= ; atunci (s; a; z ) = ;; 8 (s; a; z ) 2 S    :



2)

Uneori conditia 2) se mai scrie:

2') daca 9 (s; a; z ) 2 S   


(contrara reciprocei).

astfel ^nc^at (s; a; z ) =


6 ;, atunci (s; ; z ) =

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
astfel ^nc^at L = L(M ):
2

^In legatura cu aceasta clasa de limbaje (L DET ) se cunosc doua rezultate fundamentale:
2

Teorema 3.6.1 Daca L 2 L DET ; R 2 L atunci L \ R 2 L DET :


Teorema 3.6.2 Daca L 2 L DET atunci C L not
=  L 2 L DET :
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


nu este determinist).

L DET 6= L
2

(adica exista un limbaj de tip 2 care

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
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

137

Limbaje independente de context deterministe

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 :
Acum, consideram limbajul R = f0i 1j 2k = i; j; k  0g: Se observa imediat ca R 2 L
(consultati Exercitiile 1.3.4 sau 2.10.4, a) ). Aplic^and acum Teorema 3.6.1 pentru limbajele 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
L 2= L , contradictie.
Ram^ane deci ca L 2 L L DET :
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

Exercitiul 3.6.2 Fie L 2 L DET si R 2 L . Sa se arate ca limbajele L [ R; L R


L sunt deterministe.
2

si R

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 .
Aplic^and ^nca o data Teorema 3.6.1, obtinem ca C (C L \ C R) 2 L DET .
Analog L R = L \ C R; R L = C L \ R si se procedeaza la fel.
2

Exercitiul 3.6.3 Sa se arate ca urmatoarele limbaje de tip 2 sunt limbaje deterministe:

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

unde este dat prin:


1. (s ; 0; z ) = (s ; 0 z );
0

2. (s ; 0; 0) = (s ; 0 0);
1

3. (s ; 1; 0) = (s ; );
1

Probleme decidabile ^n clasa L2

138

4. (s ; 1; 0) = (s ; );
5. (s ; 1; z ) = (s ; z );
6. (s ; 2; z ) = (s ; z );
7. (s; a; z ) = ; ^n rest.
Se observa destul de usor ca L = L(M ) si ca M este determinist.
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
= ; a 6= b; b poate si :
2

Cazul I: b = . Fie Mi = (Si ; ; ; i ; s ; z ; Fi ); i = 1; 2 astfel ^nc^at


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. (s ; a; z ) = (s ; z );
2. (s ; c; z ) = (s ; z ); 8 c 2 ;

c; z ); s 2 S
3. (s; c; z ) = ((s;
s; c; z ); s 2 S ; 8 c 2 ; 8 z 2 :
Este clar ca M este automat pushdown determinist deoarece S \ S = ;; a 2= 
si M ; M sunt tot deterministe.
Cazul II: La fel ca ^n cazul II, cu deosebirea ca ^n loc de tranzitia 2 se considera
(s ; b; z ) = (s ; z );
01

01

01

01

02

02

02

02

3.7 Probleme decidabile ^n clasa L2


^In aceasta sectiune, vom prezenta algoritmi pentru c^ateva probleme importante relative 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 =;
Ni = Ni [ fx= x 2 VN ;
Se observa imediat ca
0

+1

9 x ! 2 P si 2 (Ni [ VT ) g; 8 i  0:

Probleme decidabile ^n clasa L2

 N  N  :::  Ni  Ni  :::  VN ;
k = minfk 2 N= Nk = Nk g atunci Nk = Nk j ; j  1;
L(G) =
6 ; () x 2 Nk :

(i) N

(ii)
(iii)

139

+1

+1

Algoritmul (ALG13):
Intrare: G = (VN ; VT ; x ; P ) gramatica de tip 2;
Iesire: L(G) 6= ; ?
Metoda:
begin
i := 0;
N := ;;
repeat
i0 := i + 1;
Ni := Ni [ fx= x 2 VN ; 9 x ! 2 P; 2 (Ni [ VT ) g
until (Ni = Ni ) or (Ni = VN );
if x 2 Ni then \L(G) 6= ;"
else \L(G) = ;"
end .
0




! 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:
G
Un simbol se numeste neproductiv daca nu este productiv.
0

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 pushdown, 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) = ;:

Calculam N = fC g, dupa care N = fC; B g: La pasul 3, obtinem N =


^In sf^arsit, N = fC; B; A; S g: Conditiile de terminare a iteratiilor sunt
Nk = Nk (adica nu mai gasim nici un nou neterminal) sau Nk = VN (caz ^n
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.
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.

Solutie

fC; B; Ag.

+1

De nitia 3.7.2 Fie G = (VN ; VT ; x ; P ) o gramatica (nu neaparat de tip 2). Sim[ VT se numeste accesibil daca exista o derivare
x =) x ; ; 2 (VN [ VT ) :
0

bolul x 2 VN

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

+1

Se observa imediat ca

 N  N  :::  Ni  Ni  :::  VN [ VT ;
k = minfk 2 N= Nk = Nk g atunci Nk = Nk j ; j  1;
x este accesibil () x 2 Nk :

(i) N

(ii)
(iii)

+1

+1

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 inaccesibile;
Metoda:
begin
i := 0;
N := fx g;
repeat
i := i + 1;
Ni := Ni [ fx= y ! 2 P; x 2 ; y 2 Ni g
until (Ni = Ni ) or (Ni = VN [ VT );
0

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
simbol se numeste util daca este productiv si accesibil. Un simbol se numeste inutil
0

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 accesibile.

Solutie Evident N = fS g: Calculam N = fS; A; B g, apoi N = fS; A; B; C g: ^In


nal N = fS; A; B; C; ag: Cu alte cuvinte, toate simbolurile gramaticii sunt accesibile.
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:
0

Algoritmul (ALG15):
Intrare: G = (VN ; VT ; x ; P ) gramatica de tip 2 ^n forma normala Chomsky si cu
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.
0

Exercitiul 3.7.3 Fie gramatica G = (fS; A; B; C g; fa; bg; S; P ) unde regulile P

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 )

Deoarece GRAF nu are circuite, rezulta ca L(G ) este nit.


1

(GRAF )

Not^and cu G gramatica obtinuta din G prin adaugarea regulii C ! A B , deoarece


(GRAF ) are circuite, rezulta ca L(G ) este in nit.
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 ;
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
cu ai 2 VT ; 1  i  n: De nim multimile
V = fA= A =) a ::: a
; 1  j  n; 1  i  n j + 1g:
2

ij

i+j

Este clar ca w 2 L(G) () x 2 V n : Acum trebuie sa gasim un procedeu de


determinare efectiva a multimilor Vij :
0

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).

. &

. &

.&

ai . . ai k ai k . . ai j
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 ;
Iesire: w 2 L(G);
Metoda:
begin
for i := 1 to n do
Vi := fA= A ! ai 2 P g;
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)"
end .
Complexitatea timp a algoritmului de mai sus este O(jwj ), iar complexitatea spatiu
este O(jP j + jwj jVN j). Pentru reprezentarea ^n memorie a gramaticii G se pot folosi
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
P se scrie p1 ; = x si p1 ; = a;
 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
matricea P se scrie p2 ; = A; p2 ; = B; p3 ; = C:
Pentru reprezentarea ^n memorie a multimilor Vij putem folosi un tablou tridimensional, 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 :
+

4 1

4 2

7 1

7 2

7 3

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
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:
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 :
1

11

41

21

31

51

k=1;j

Putem cuprinde aceste rezultate ^n matricea


i=1 i=2 i=3 i=4
j = 1 fB g fA; C g fA; C g fB g
j=2
j=3
j=4
j=5

i=5

fA; C g

Trecem acum la determinarea multimilor Vi ; 8 i 2 1; 4: Astfel, V = V V


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:
2

12

42

22

41

12

21

31

32

31

11

21

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 =
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
3

11

22

12

31

23

21

13

32

22

41

33

31

42

32

51

Probleme decidabile ^n clasa L2

145

Apoi calculam multimile V = V V [ V V [ V V = ; si V = V


V V [ V V = fS; C g [ fAg [ fA; S g = fS; A; C g:
14

22

42

23

11

23

12

32

13

41

24

21

V [
33

51

i=1
fB g
fS; Ag

j=1
j=2
j=3
j=4
j=5

i=2

;
;

^In sf^arsit, calculam multimea V


fA; S g [ fS; C g = fS; A; C g:

15

i=1
fB g
fS; Ag

j=1
j=2
j=3
j=4
j=5

;
;

i=3

i=4

i=5

fA; C g fA; C g fB g fA; C g


fB g fS; C g fS; Ag
fB g
fB g
fS; A; C g
=V

11

i=2

V [V V [V V [V V
24

12

i=3

33

i=4

13

42

14

51

i=5

fA; C g fA; C g fB g fA; C g


fB g fS; C g fS; Ag
fB g
fB g
fS; A; C g

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 gramatici ^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

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
w 2 L(G));
 w
Iesire: Derivarea  (analizarea sintactica) astfel ^nc^at x =;)
G
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;
0

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
PARSE (1; n; x );
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:
T (n) = n 1 +

(1)

n
1 X

(T (k 1) + T (n k));
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:


(6)

T (n) T (n 1) 2(n 1)
=
+
n+1
n
n(n + 1)

Echivalent, obtinem relatia de recurenta:


(7)

2
T (n) T (n 1)
=
+2
n+1
n
n+1

1
n

Prin sumarea relatiei (7) pentru orice n 2 N; n  2 obtinem:


(8)

T (n) T (n 1)
2
=
+2
n+1
n
n+1
"



1
T (n 2)
=
+2
n
n 1

nX
T (1)
1
= ::: =
+2 2
+
n 1
2
k
k
Acum, folosim inegalitatea imediata

2
n+1

1
2

+1

n
X

=3

k=2



2
2
+
n+1 n

"

n
X
1
2
1
=2
+
k
n+1 k k

 n +1 1 ; 8 n  1:

=3

1
2

1
+
n

Probleme decidabile ^n clasa L2

148

Din relatia (8) rezulta


(9)

T (n)
n+1

"

n
nX
X
1
1
 2 n + 1 + k = 2 k1 :
k
k
+1

=3

=3

Apel^and la integralele Riemann, putem aproxima suma din relatia (9) si obtinem:
(10)

T (n)
n+1

2

nZ+1
2

1
n+1
dx = 2 ln
< 2 ln(n + 1):
x
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 ;
Iesire: Derivarea (analizarea sintactica)  astfel ^nc^at x =;) w.
G
Metoda:
procedure PARSE (i; j; A);
begin
if (j = 1) and (m = #(A ! ai )) then begin
0

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":


(11)


n
h(n)  1 + h
0



n1
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
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
a
 n  maxim
;
ceea
ce
a stivei se poate produce
atunci
c^
a
nd

este
maxim,
adic
a
j

j
=




corespunde lui j j = n ; si este 1 + h n
: ^In continuare este scoasa din stiva
spre a prelucrata secventa ; ad^ancimea maxima a stivei ind
1



n 1
2



h



n 1
+1
2



h



n 1
2



+ 1:

Astfel, am demonstrat inegalitatea (11). ^In continuare, vom arata ca h(n)  blog nc:
Mai precis, aratam prin inductie dupa m ca pentru
2

(12)

8 n 2 N;

astfel inc^at 2m  n < 2m (adica blog nc = m) atunci h(n)  m:


+1

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

f2m ; 2m
+1

avem:

+1

1g: Atunci b n

+ 1; :::; 2m

+2

h(n)  1 + h



n 1
2



c<

2m : Conform inegalitatii (11);


+1

 1 + m = blog nc:
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
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).
1

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 ;
Iesire: Derivarea  (analizarea sintactica) astfel ^nc^at x =;G) w. Totodata se va
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;
0

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
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 demonstram pentru h: Consideram deci o derivare generala:
;h
x =
) x ::: A ::: x =) x ::: B C ::: x =) a a ::: a :
0

Cazul I: S-a intrat pe ramura principala a instructiunii if 2  k  j then begin, 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).

152

Problema echivalentei a doua gramatici de tip 2

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 aplicarea 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
Se observa ca ^n forma propozitionala b a D D este esential care neterminal se transforma.
8)

5)

6)

7)

3.8 Problema echivalentei a doua gramatici independente de context


Fie G ; G doua gramatici de tip 2 arbitrare si R un limbaj regulat arbitrar. Din [9]
am extras urmatoarele probleme nedecidabile:
1









L(G ) \ L(G ) = ;;
1

L(G ) = L(G );
1

L(G )  L(G );
1

L(G ) = R;
1

R  L(G );
1

C L(G ) 2 L ;
L(G ) \ L(G ) 2 L :
1

153

Problema echivalentei a doua gramatici de tip 2

^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:
{ S ! aAb
{ A ! aAbjAAjcj
b) G = (fS; Ag; fa; b; cg; S; P ) unde regulile P sunt:
{ S ! aAb
{ A ! AcjASj
c) G = (fS; Ag; fa; b; cg; S; P ) unde regulile P sunt:
{ 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.
1

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 =
(VN ; VT ; x ; P 0 ), unde P 0 = P fx ! y g [ fx ! i = i = 1; mg, este
echivalenta cu G (aceasta lema am mai folosit-o la forma normala Greibach, pagina
0

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
b)

fA ! A Ag [ fA ! i A= i = 1; kg sau
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
G
G0
G
G
Distingem doua situatii:
0

+1

=)0 ::: =)
0 p
G

154

Problema echivalentei a doua gramatici de tip 2




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

: Fie pasul arbitrar i =G) i

x =) =) ::: =) i =) i
G

+1

din derivarea generala din G:

+1

=) ::: =) p
G

+1

Distingem doua situatii:

Cazul I: Nu s-a aplicat regula A ! A A. Atunci este clar ca i =)


0 i+1 .

Cazul II: S-a aplicat regula A

! A A: Cum ^ntr-o gramatica de tip 2 nu conteaza ordinea aplicarii regulilor, rezulta ca primul simbol neterminal A se va
transforma astfel:
i = A =) A A =) i A sau
1

i = A =) A A =) A A A s.a.m.d.
1

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
= A =) An =) :::
1

i1 i2

in

Aceasta derivare generala o putem obtine si ^n G0 astfel:

i = A =)0 i1 A =)0 i1 i2 A =)0 ::: =)0 i1 i2 ::: i


G
G
G
G
1

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

 S ! abjaAb
 A ! SjcjcAjSA

155

Problema echivalentei a doua gramatici de tip 2

Demonstratie Demonstratia echivalentei dintre gramaticile G si G0 este imediata.


Se arata ca
S =) () S =0) ; 8 2 fS; A; a; b; cg:
3

G3 ;dr

G3 ;dr

Mai precis, se poate demonstra imediat prin inductie dupa lungimea derivarii ca

S =) u
G3 ;dr

n
u
() S G=0)
3 ;dr b u

daca A 2=
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
simbol care se poate sterge este A, rezulta imediat gramaticile echivalente:
 G0 echivalenta cu G :
1

 G0

{ S ! aAbjab
{ A ! aAbjabjAAjc

echivalenta cu G :
2

{ S ! aAbjab
{ A ! AcjcjASjS

Acum, folosind Lema 3.8.3,a), transformam gramatica G0 si obtinem ca G00 echivalenta cu G0 (deci si cu G ):
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
ca L(G ) = L(G ).
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
G0 :
2

 S ! abjaAb
 A ! abjaAbjcjcAjab AjaAbA

156

Exercitii propuse spre rezolvare

Acum aplicam Lema 3.8.3, b) gramaticii G0 si obtinem gramatica G000 echivalenta cu
G0 :
1

 S ! abjaAb
 A ! abjaAbjcjcAjab AjaAbA

Se observa clar ca G00 este identica cu G000 , deci L(G00 ) = L(G000 ). Echivalent va
rezulta ca L(G ) = L(G ).
^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

G faptul ca L(G ) = L(G0 ) ^n baza Lemei 3.8.4, putem
sumariza aceasta solutie ^n desenul:
Lema 3.8.4 0 Lema 3.8.2 00
G
G
G
3

Lema 3.8.3,b)
G000
Lema 3.8.1 0
G
G
G00
Lema 3.8.3,a)
1

Lema 3.8.1 0 Lema 3.8.2 00


G
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 =




fw c w=
e w 2 fa; bg g, unde c 2
= 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 gramatica 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 automatul pushdown nedeterminist din Exercitiul 3.1.4, sa se deduca gramatica echivalenta. Generalizare.




Obtinem gramatica cu regulile:










[s; x ; s] ! [s; x ; s] [s; c; s]


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

! [s; x ; s]
0




158

Exercitii propuse spre rezolvare

! 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 pushdown 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 limbajele 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
L

= fan bn cn = n 2 Ng;
+1

+2

= fan bn k1 cn k2 = n 2 Ng; k ; k
+

2 N xati;

159

Exercitii propuse spre rezolvare

L

= fan b n c n = n 2 Ng:
2

nu sunt independente de context.

Exercitiul 3.9.10 Sa se arate ca limbajele

Lk = faf1 n af2 n ::: afk n = n  1g;


(

k(

unde fi sunt functii polinomiale de gradul ^nt^ai cu coe cienti din multimea numerelor naturale (fi (n) = i  n + i ; i 2 N ; i 2 N), k  3 si

Lk = faf1 n af2 n ::: afk n = n  1g;


(

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


astfel ^nc^at C L 2= L ).




nu este ^nchisa la complementariere (adica

9L2L

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 .
Aplic^and ^nca o data presupunerea facuta, rezulta ca C (C L [ C L ) 2 L . Folosind
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

Astfel clasa

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;

160

Exercitii propuse spre rezolvare

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

partea dreapta a vreunei reguli.

regula), si x0 nu mai apare ^n

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 gramatica 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.

161

Exercitii propuse spre rezolvare

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

! x x j x x ; x ! x x ; x ! a; x ! bg):
2




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.

162

Exercitii propuse spre rezolvare

Exercitiul 3.9.26
P:
1. S 0 ! S E
5. S ! C D
9. C ! a

Fie gramatica G = (fS 0 ; S; A; B; C; Dg; fa; b; cg; S 0 ; P ) cu regulile


2. S ! S A
6. A ! C B
10. D ! b

3. S ! C B
7. B ! A D
11. E ! c

4. B ! S D
8. A ! C D

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;
 F  S este multimea starilor nale;
 : S  ! S   fL; Rg; este functia de tranzitie, unde L; R ^nseamna
0

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

modelul masinii Turing este:

163

164

Masini Turing

 este cuv^antul de la ^nceput p^ana la capul de citire-scriere;


 s este starea unitatii de control;
 este cuv^antul de la simbolul vizat (imediat din dreapta lui s) p^ana la ultimul
1

simbol (diferit de blanc).

De nitia 4.1.3 Consideram relatia binara

astfel:

daca x1 ::: xi

de nita pe multimea con guratiilor,

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
x ::: xi s0 xi y xi ::: xn
1

+1

daca (s; xi ) = (s0 ; y; R) atunci

x ::: xi s xi ::: xn
1

x ::: xi y s0 xi ::: xn
1

+1


Consideram
^nchiderea re exiva si tranzitiva a relatiei
^nchiderea tranzitiva a relatiei .)

(respectiv

De nitia 4.1.4 Fie M o masina Turing. De nim



s ; s 2 F; ;
L(M ) = fw= w 2  ; 9 s w




2  g:

^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:

165

Masini Turing

0
1
x
y
B
(s ; x; R)
;
;
(s ; y; R)
;
(s ; 0; R) (s ; y; L)
;
(s ; y; R)
;
(s ; 0; L)
;
(s ; x; R) (s ; y; L)
;
;
;
;
(s ; y; R) (s ; B; R)

s
s
s
s
s

;
Sa se arate ca L(M ) = f0n 1n = n  1g;
3

a)

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 incluziune. 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

xs 00111

x0s 0111

x00s 111

x0s 0y11

xs 00y11 s x00y11 xs 00y11 xxs 0y11 xx0s y11


xx0ys 11 xx0s yy1 xxs 0yy1 xs x0yy1 xxs 0yy1
xxxs yy1 xxxys y1 xxxy ys 1 xxxys yy xxxs yyy
xxs xyyy xxxs yyy xxxys yy xxxyys y xxxyyys
xxxyyyBs
Ajung^and astfel ^n starea s , care este nala, rezulta ca 0 1 2 L(M ):
^In general, consideram cuvinte de forma 0i 1i ; i  1 arbitrar. Avem
i ;
i ;
x 0i s 1i x 0i s 0 y 1i
s x 0i y 1i
s 0i 1i x s 0i 1i
2

x s 0i y 1i
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

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
x
0

+1

s 0i j

yj

+1

1i j

Aceasta tranzitie este imediata deoarece:

xj s 0i j yj 1i j
0

xj s 0i j
+1

i ;
yj 1i j
1

166

Masini Turing

i ;
xj 0i j yj s 1i j xj 0i j yj s y y 1i j
i ;
xj s x 0i j yj 1i j
xj s 0i j yj 1i j
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
i 1;

+1

+1

+1

+1

+1

De aici se continua ^n mod determinist astfel:


i ;
xi yi s
xi s yi xi y s yi
0

xi yi B s :

Deoarece s 2 F , rezulta deci ca 0i 1i 2 L(M ); 8 i 2 N :


: 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:
i ;
 Cazul I: u = . Rezulta s 0i x s 0i
x 0i s
blocaj, deoarece
(s ; B ) = ;;
4

(1)

Cazul II: u = 1j v; j  1 si


v 6= 1 (adica primul simbol al lui v este diferit
de 1). Acum distingem trei subcazuri:
(1)

{ 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

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
xs y 1 v
x y s 1 v blocaj
s w
0

deoarece (s ; 1) = ;;
{ 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:
3

(1)

Alegem l = j si obtinem

s w

xj s 0i j yj v;
0

Aceasta tranzitie se continua astfel

xj s 0 i j y j v
0

Dar

(1)

xj s 0i j
+1

v 6= 1 deci v =  sau

(1)

yj v

v = 0:

(1)

v 6= 1:

i 1;

xj 0i j
+1

yj s v
1

167

Masini Turing




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 ) = ;:


 v0 = 1k v00 ; k  1: Conform situatiilor II.2.1 si II.2.2 avem k 
1

i j 1, ^n caz contrar ne blocam. Prin inductie se poate arata,


ca mai sus, ca
 i j m k i j
xy s 0 1
v00
xj 0i j yj s 0m 1k v00
+1

1)

Dar (s ; 0) = ;; deci ne blocam.


{ 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 :
3

^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;
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. A ! s A
2. A ! [a; a] A ; 8 a 2 
3. A ! A
4. A ! [; B ] A
5. A ! 
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

unde w = a a ::: an 2  : Apoi, se demonstreaza a rmatia:

daca s a a ::: an
x x ::: xr s xr ::: xs atunci
0

s [a ; a ] [a ; a ] ::: [an ; an ] =) [a ; x ] [a ; x ] ::: [ar ; xr ] s [ar ; xr ] ::: [an m ; bn m ]


G
Astfel, pentru masina Turing din Exercitiul 4.1.1, obtinem gramatica G =
(VN ; f0; 1g; A ; P ) unde:
0

168

Masini Turing

 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;
 regulile P :
1

{ regulile care creaza copiile:


 A !s A
 A ! [0; 0] A
 A ! [1; 1] A
 A !A
 A ! [; B ] A
 A !
{ regulile ce deriva din tranzitii:
 din tranzitia (s ; 0) = (s ; x; R) construim regulile:
 s [0; 0] ! [0; x] s
 s [1; 0] ! [1; x] s
 s [; 0] ! [; x] s
 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:
 [0; 0] s [0; 0] ! s [0; 0] [0; y]
 [0; 0] s [1; 0] ! s [0; 0] [1; y]
 [0; 0] s [; 0] ! s [0; 0] [; y]
 [1; 0] s [0; 0] ! s [1; 0] [0; y]
 [1; 0] s [1; 0] ! s [1; 0] [1; y]
 [1; 0] s [; 0] ! s [1; 0] [; y]
 [; 0] s [0; 0] ! s [; 0] [0; y]
 [; 0] s [1; 0] ! s [; 0] [1; y]
 [; 0] s [; 0] ! s [; 0] [; y]
 [0; 1] s [0; 0] ! s [0; 1] [0; y] s.a.m.d.
 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 !
 [0; 0] s ! s 0 s
 [0; 1] s ! s 0 s
 [0; x] s ! s 0 s
 [0; y] s ! s 0 s
 [0; B ] s ! s 0 s
1

169

Masini Turing












[1; 0] s ! s 1 s
[1; 1] s ! s 1 s
[1; x] s ! s 1 s
[1; y] s ! s 1 s
[1; B ] s ! s 1 s
[; 0] s ! s s
[; 1] s ! s s
[; x] s ! s s
[; y] s ! s s
[; B ] s ! s s
4

Astfel, am obtinut o gramatica echivalenta cu M care are 178 de reguli si 19 neterminali. 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


4.1.1 rezulta ca numarul de neterminali este egal cu
0

(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)

 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

o masina Turing cu functia de tranzitie de nita astfel:

s
s
s
s
s
s
s
s

1
2
3
4
5

0
1
(s ; B; R) (s ; B; R)
(s ; 0; R) (s ; 1; R)
(s ; 0; R) (s ; 1; R)
(s ; B; L)
;
;
(s ; B; L)
(s ; 0; L) (s ; 1; L)
(s ; 0; L) (s ; 1; L)
1

3
4

;
;
Sa se arate ca L(M ) = fw w=
e w 2 f0; 1g g;
6

B
(s ; B; R)
(s ; B; L)
(s ; B; L)

;
;

(s ; B; R)
(s ; B; R)
0
0

170

Masini Turing

Solutie Fiind vorba de egalitate de multimi, vom proceda prin dubla incluziune.
: Pentru a arata ca L(M )  fw w=
e w 2 f0; 1gg, vom demonstra c
a pentru orice n,
n  1 are loc a rmatia:
n ;
s i ::: in in ::: i
(1)
s i i ::: in in ::: i i
4

+1

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


n ;
i ::: in in ::: i 0 s i ::: in in ::: i s 0
n ;
i ::: in in ::: s i
s B i ::: in in ::: i
s i ::: in in ::: i
0

Cazul II: i = 1. Analog cu cazul I, numai ca vom trece prin starile s ; s ; s ;
si ^n nal s :
1

Aplic^and acum a rmatia (1) pentru i ; i ; :::; in ori, rezulta ca:



(2)
s i i ::: in in ::: i i
s
1

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:
: 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:
7




s , si s este stare nala;


Cazul II: w ^ncepe cu simbolul 0, adica w = 0 w0 : Notam w0 = w a; a 2 f0; 1g:
Avem tranzitiile deterministe:
 0
s 0 w0 s w0
ws w s a
Cazul I: w =  este acceptat deoarece s0

{ Daca a = 1 atunci ne blocam deoarece (s ; 1) = ;;


{ Daca a =  atunci ne blocam deoarece (s ; B ) = ;;
{ Daca a = 0 atunci obtinem

s Bw s w
w s a
3

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:

171

Masini Turing

Aplic^and de un numar nit de pasi cazurile II, III ajungem la con guratia s care,
conform cazului I, trece ^n s . Cuv^antul w are deci forma
0




w = i w i = i i w i i = ::: = i i ::: in in i i ;
1

unde i ; i ; ::; in 2 f0; 1g:


! Putem ^mbunatati masina Turing din Exercitiul 4.1.3 av^and ^n vedere liniile
corespunzatoare starilor s si s . Fie
1

M = (fs ; s ; s ; s ; s ; s ; s g; f0; 1g; f0; 1; B g; ; s ; B; fs g)


0

masina Turing cu functia de tranzitie de nita astfel:

s
s
s
s
s
s
s

1
2
3
4
5

0
1
(s ; B; R) (s ; B; R)
(s ; 0; R) (s ; 1; R)
(s ; 0; R) (s ; 1; R)
(s ; B; L)
;
;
(s ; B; L)
(s ; 0; L) (s ; 1; L)

B
(s ; B; R)
(s ; B; L)
(s ; B; L)
6

3
4

;
;

(s ; B; R)
0

Se poate demonstra asemanator ca la Exercitiul 4.1.3, ca L(M ) =

f0; 1gg:

fw w=
e w 2

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)
unde functia de tranzitie este data ^n tabelul de mai jos:
0

13

13

172

Masini Turing

s
s
s
s
s
s
s
s
s
s
s
s
s
s

0
1
(s ; x; R) (s ; y; R)
(s ; 0; R) (s ; 1; R)
(s ; x; L) (s ; y; L)
(s ; 0; L) (s ; 1; L)

2
3

x
(s ; x; L)
(s ; x; L)

y
(s ; y; L)
(s ; y; L)

(s
(s
(s
(s
(s
(s
(s

(s
(s
(s
(s
(s
(s

8
7

7
8

B
(s ; B; R)
(s ; B; L)

13

; x; R)
; z; R)
; x; R)
; x; R)
; x; R)
; x; R)
; z; L)

0
6

7
8
7
8

; y; R)
; z; R)
; y; R)
; y; R)
; y; R)
; y; R)

(s
(s
(s
(s
(s

5
6
9

; z; L)
; z; R)
; z; R)
; z; L)
; z; L)

10

(s ; B; L)
(s ; B; L)
9

10

11

(s ; z; L)
(s ; x; L) (s ; y; L) (s ; z; R)
(s ; x; L) (s ; y; L) (s ; z; R)
11

10
11
12

12

12

13

12

12

13

: Mai ^nt^ai, demonstram incluziunea L  L(M ): Avem  2 L.


 2 L(M ): Evident avem s s , deci  2 L(M ):
0

Veri cam daca

13

Fie acum un cuv^ant oarecare u din L(M ), de forma u = i ::: im : Distingem doua
cazuri:
1

Cazul I: Presupunem m de forma 2  h + 1; h

s i ::: i h :
{ Daca i = 0 obtinem s 0 i ::: i h
{ Daca i = 1 obtinem s 1 i ::: i h
0

2 N: Con guratia initiala este

+1

+1

+1

x s i ::: i h :
y s i ::: i h :
1

+1

+1

Starea s realizeaza doar deplasari la dreapta peste simbolurile 0 si 1, deci


obtinem:

{ x s i ::: i h
x i ::: i h s x i ::: i h s i h ; respectiv

{ y s i ::: i h
y i ::: i h s y i ::: i h s i h :
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
i0 s i ::: i h
i i ::: i h s i0 i ::: i h s i h :
s i ::: i h
1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+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 :
Utiliz^and starea s ne putem deplasa la st^anga peste simbolurile 0 si 1, oprirea
realiz^andu-se la ^nt^alnirea unui simbol x sau y. Avem deci:

 0
i0 i ::: i h s i h i0 h
s i0 i ::: i h i h i0 h
i s i ::: i h i h i0 h
2

+1

+1

+1

+1

173

Masini Turing

pentru ca avem (s ; x) = (s ; x; R) si (s ; y) = (s ; y; R):


Urm^and rationamentul anterior si av^and (s ; x) = (s ; x; L) si (s ; y) =
(s ; y; L) obtinem
 0 0
i i s i ::: i h i0 h i0 h
i0 s i ::: i h i h i0 h
3

+1

+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
ca
(1)
daca o con guratie contine s atunci este de forma
i0 ::: i0 s ik ::: i h k i0
::: i0 ;
0

+1

+1

h+2 k

h+1

h+2 n

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
::: i0 ;
1

+1

+1

h+1

care trece ^n

i0 ::: i0n i0n s in ::: i h n i0 h n ::: i0 h :


Folosind faptul ca starea s realizeaza deplasari la dreapta peste simbolurile 0
si 1, obtinem con guratia
i0 ::: i0n i0n in ::: i h n s i0 h n ::: i0 h ;
1

+1

+2

+1

+2

+1

+2

+1

+1

+2

+1

care trece ^n

i0 ::: i0n i0n in ::: i h n s i h


de unde obtinem
i0 ::: i0n i0n in ::: s i h n i0 h
1

+1

+2

+1

+2

+1

+1

n i2h+2 n ::: i2h+1 ;


n i2h+2 n ::: i2h+1 :

Din faptul ca s realizeaza aceeasi operatie ca si s , dar spre st^anga, obtinem
con guratia
i0 ::: i0n s i0n in ::: i h n i0 h n i0 h n ::: i0 h ;
3

+1

+2

+1

+2

+1

care trece ^n

i0 ::: i0n i0n s in ::: i h n i0 h


1

+1

+2

+1

n i2h+2 n ::: i2h+1 ;

174

Masini Turing

Asadar, a rmatia (1) este complet demonstrata.


Folosind a rmatia anterioara obtinem:
 0 0
i ::: ih s ih i0h ::: i0 h
s i ::: i h
i0 ::: i0h i0h s i0h ::: i0 h
i0 ::: i0h s i0h i0h ::: i0 h :
Deoarece nu este de nita pentru perechi de forma (s ; x), respectiv (s ; y),
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
cazul precedent avem sirul de tranzitii:
 0 0
s i ::: i h
i ::: ih s i0h ::: i0 h :
0

+1

+1

+2

+1

+1

+2

+1

+1

+2

+1

+1

+1

Deoarece (s ; x) = (s ; x; L) si (s ; y) = (s ; y; L) obtinem con guratia


i0 ::: i0h s i0h i0h ::: i0 h :
^In continuare, vom demonstra prin inductie matematica dupa n numarul de
s cicli ca
(2)
daca o con guratie contine starea s ; atunci este de forma
i0 ::: i0 s i0 z ::: z i0 ::: i0 z ::: z ;
0

+1

k | {z } h+1
h k

h+k | {z }
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 :
{ Subcazul 1. i0 = x; atunci obtinem
+

+ +

i0 ::: i0h s x i0h ::: i0 h x i0 ::: i0h z s i0h ::: i0 h x:


Deoarece (s ; x) = (s ; x; R) si (s ; y) = (s ; y; R), atunci urmatoarea
con guratie este
i0 ::: i0 z i0 s i0 ::: i0 x:
1

+1

h+1

+1

h+2

Avem (s ; x) = (s ; x; R) si (s ; y) = (s ; y; R), deci vom obtine


i0 ::: i0h z i0h i0h ::: i0 h x s i0 ::: i0h z i0h i0h ::: i0 h s x;
deoarece (s ; B ) = (s ; B; L):
Avem (s ; x) = (s ; z; L); (s ; x) = (s ; x; L) si (s ; y) = (s ; y; L)
care determina sirul de tranzitii
i0 ::: i0 z i0 i0 ::: i0 s x i0 ::: i0 z i0 i0 ::: s i0 z
7

+1

+2

+1

+2

11

h+1 h+2

11

12

11

h+1 h+2

12

11

175

Masini Turing

i0 ::: i0h z i0h i0h ::: s i0 h i0 h z


Deoarece (s ; x) = (s ; x; L); (s ; y) = (s ; y; L) si (s ; z ) =
(s ; z; L) obtinem

i0 ::: i0h z i0h i0h ::: s i0 h i0 h z
 0 0
i ::: ih s z i0h i0h ::: i0 h i0 h z
i0 ::: i0h s i0h z i0h i0h ::: i0 h i0 h z
{ 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)
este adevarata pentru n = 1.
1

12

+1

12

+2

12

12

12

12

+1

12

+1

12

+2

+2

+1

+2

10

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
pentru n obtinem

n

1 si aplic^and ipoteza inductiva


i0 ::: i0h s i0h i0h i0h ::: i0 h i0 h
1

+1

+2

 0 0
::: z}
i ::: ih n s i0h n z| {z
::: z} i0h i0h ::: i0 h n z| {z
1

+1

+2

{ Subcazul 1. i0h n = i0 h n = x: Obtinem con guratia


i0 ::: i0h n z s z| {z
::: z} i0h i0h ::: i0 h n z| {z
::: z}
2

+1

+2

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
sirul de tranzitii:

i0 ::: i0h n z s z| {z
::: z} i0h i0h ::: i0 h n z| {z
::: z}
5

 0 0
i ::: ih n
1

i0 ::: i0h n
1

 0 0
i ::: ih n
1

+1

+2

z| {z
::: z} s i0h i0h ::: i0 h n z| {z
::: z}
5

n+1

+1

+2


z| {z
::: z} i0h s i0h ::: i0 h n z| {z
::: z}
n+1

+1

+2

::: z}
z| {z
::: z} i0h i0h ::: i0 h n s z| {z
n+1

+1

+2

176

Masini Turing

i0 ::: i0h n
1

i0 ::: i0h n
1

 0 0
i ::: ih n

 0 0
i ::: ih n
1

+2

z| {z
::: z} i0h i0h ::: s i0 h n
+1

n+1

+1

n+1

11

+2

z| {z
::: z}

n+1

12

+2

z| {z
::: z} s i0h i0h ::: i0 h n i0 h n
12

+1

+2

z| {z
::: z} s z z i0h i0h ::: i0 h n i0 h n
4

+1

+2

 0 0
i ::: ih n s i0h n
1

+1

n+1

z| {z
::: z} i0h i0h ::: s i0 h n i0 h n

i0 ::: i0h n
1

z| {z
::: z} i0h i0h ::: s i0 h n z| {z
::: z}

n+1

+1

+2

z| {z
::: z}
n+1

z| {z
::: z}

n+1

z| {z
::: z} i0h i0h ::: i0 h n i0 h n
n+1

z| {z
::: z}

z| {z
::: z}
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
s ; s ; s starile s ; s ; respectiv s :
2

10

^In concluzie, a rmatia (2) este complet demonstrata.


Fie u = i :::i h cu proprietatea i0h p = i0 h p ; 0  p  k
Distingem doua cazuri:
1

1; i0h k =
6 i0 h k :

{ 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

+1

si aplicam a rmatia (2) pentru k: Obtinem con guratia


i0 ::: i0
s i0 z ::: z i0 ::: i h k z ::: z
h k

h k | {z } h+1
k

| {z }

a) Presupunem i0h k = x si i0 h k = y: Atunci avem sirul de tranzitii:


i0 ::: i0h k s i0h k z| {z
::: z} i0h ::: i h k z| {z
::: z}
2

+1


::: z}
i0 ::: i0h k z s z| {z
::: z} i0h ::: i h k z| {z
1

 0 0
i ::: ih k
1

i0 ::: i0h k
1

+1

z| {z
::: z} s i0h ::: i h k z| {z
::: z}
5

k+1

+1


::: z}
z| {z
::: z} i0h s i0h ::: i h k i h k z| {z
k+1

+1

+2

177

Masini Turing

 0 0
i ::: ih k
1

::: z}
z| {z
::: z} i0h ::: i0 h k i0 h k s z| {z

i0 ::: i0h k
1

+1

k+1

z ::: z i0

0
h ::: i h k

| {z }

k+1

+1

s i0 h k s z| {z
::: z}
9

Deoarece i0 h k = y si (s ; y) = ; rezulta ca avem blocaj.


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) = ;.
Rezulta acelasi rezultat.
{ Subcazul 2) pentru k = h 1 obtinem i0 6= i0h si i0j = i0h j ; j = 2; h: Din
a rmatia (2) aplicata pentru h 1 se obtin tranzitiile

::: z}
s i0 z| {z
::: z} i0h z| {z
i0 ::: i0h s i0h i0h ::: i0 h
9

10

10

+1

a) Presupunem i0 = x si i0h


1

+1

s x z| {z
::: z} y z| {z
::: z}
h

+1

= y: Obtinem


z s z| {z
::: z} y z| {z
::: z}

+1

z| {z
::: z} s y z| {z
::: z}

z| {z
::: z} y s z| {z
::: z}
h

z| {z
::: z} s y z| {z
::: z};

ceea ce conduce la blocaj deoarece (s ; y) = ;:


b) Situatia i0 = y si i0h = x se trateaza analog, folosindu-se starile
s ; s ; s ^n loc de s ; s ; respectiv s :
9

+1

10

^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

 0 0
i ::: ih s i0h ::: i0 h

s i ::: i h
0

+1

i0 ::: i0h s i0h ih ::: i0 h

Aplicam a rmatia (2) pentru h 1 si obtinem



i0 ::: i0h s i0h ih ::: i0 h
s i0 z| {z
::: z} ih
1

a) i0 = i0h
1

+1

+1

+1

+1

z| {z
::: z}
h

= x: Obtinem

s x |z {z
::: z} x z| {z
::: z}
4

z s z| {z
::: z} x z| {z
::: z}
5

z| {z
::: z} s x z| {z
::: z}
5

178

Automate liniar marginite

z| {z
::: z} s x z| {z
::: z}

z| {z
::: z} x s z| {z
::: z}
7

z| {z
::: z} s z| {z
::: z}

11

h+1

Avem (s ; z ) = (s ; z; R), deci obtinem con guratia


11

13

::: z}
z| {z
::: z} s z| {z
13

si cum s este stare nala, rezulta ca u este acceptat.


b) Situatia i0 = i0h = y se trateaza analog.
13

+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, prescurtat 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

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 monotona 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

179

Automate liniar marginite

s
s
s
s
s
s

@
(s ; @; R)
1

2
3
4

;
;

;
;
;

(s ; x; R)
(s ; y; R)
;
(s ; 0; R) (s ; y; L)
(s ; y; R)
;
(s ; 0; L)
;
(s ; x; R) (s ; y; L)
;
;
;
;
(s ; y; R) (s ; $; L)
2

4
2

;
Sa se arate ca L(M ) = f0n 1n = n  1g;
5

a)

;
;
;
;
;

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
vreodata ^n s ; ^n continuare, activitatea automatului liniar marginit se va
desfasura numai ^n starile s ; s ; s ; s ; s ;
0

c^and se ajunge ^n starea s si este vizat simbolul $, trecem ^n starea s si facem
un pas ^napoi pentru ca nu putem depasi simbolul $.
4

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
marginit. Consideram gramatica G = (VN ; ; A ; P ) cu
0

VN =   (S [ fg)  f@g  ( [ )

  f; $g



(S [ fg)  (f$g [ )

[fA ; A g;
1

iar regulile P de nite astfel:

! [a; s @ a] A ; 8 a 2 
A ! [a; a] A ; 8 a 2 
A ! [a; a $]; 8 a 2 

1. A

2.

3.

4. daca (s; @) = (s0 ; @; R) atunci [a; s @ x] ! [a; @ s0 x]; 8 a 2 ;


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 :

8x2

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 $];
1

n n

unde w = a a ::: an 2  : Apoi, se demonstreaza a rmatia:



@ x x ::: xr s xr ::: xn $ atunci
daca s @ a a ::: an $
1

[a ; s @ a ] [a ; a ] ::: [an ; an $] =) [a ; @ x ] [a ; x ] ::: [ar ; xr ] [ar ; s xr ] ::: [an ; bn $]


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
4.2.1 rezulta ca numarul de neterminali este egal cu
0

2 + jj  ((jS j + 1)  (jj + 2  j j + 1) + 2  jj)


iar numarul de reguli este egal cu

j  jf(s; @) = (s0 ; @; R)gj + 2  jj  j j  jf(s; x) = (s0 ; y; R)gj+


+jj  (jj  j j + 1)  jf(s; x) = (s0 ; y; L)gj + j j  j j  jf(s; $) = (s0 ; $; L)gj+
+jF j  (jj  j j + 2  jj  j j):

3  jj + jj  j

4.3 Legatura dintre gramaticile dependente de context 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)
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

a i 2 VN
(i) = ix dac
i daca i 2 VT
Evident se poate extinde la cuvinte astfel:
Daca u = u u ::: uk atunci (u) = (u ) (u ) ::: (uk ):
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].
1

De nitia 4.3.2 Fie G = (VN ; VT ; x ; P ) o gramatica. Se numeste ponderea gramaticii G numarul


pond(G) = maxfj j= ! 2 P g:
0

Teorema 4.3.2 Pentru orice gramatica monotona G = (VN ; VT ; x ; P ) exista o gramatica monotona G0 = (VN0 ; VT ; x ; P 0 ) cu ponderea cel mult egala cu 2 astfel ^nc^at
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

unde xi ; yj 2 VN ; i = 1; n; j = 1; m conform Teoremei 4.3.1. Atunci consideram niste variabile noi (zi ; i = 1; m) si ^nlocuim regula de mai sus cu
multimea de reguli:

182

Legatura dintre gramatici dependente de context si gramatici monotone

{
{
{
{
{
{
{
{
{
{

x !z
z x !y z
z x !y z
....
zn xn ! yn zn
zn ! yn zn
zn ! yn zn
....
zm ! ym zm
zm ! ym
1

+1

+1

+1

+2

Teorema 4.3.3 Pentru orice gramatica monotona G = (VN ; VT ; x ; P ); exista o gramatica 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.
6.2.
6.3.
6.4.

A B ! E B este senzitiva la contextul (; B );


E B ! E F este senzitiva la contextul (E; );
E F ! C F este senzitiva la contextul (; F );
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 ) ;
+

183

Legatura dintre gramatici dependente de context si gramatici monotone

(ii) x

!  si x

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
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:
0



!

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 decidabila, 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 reguli 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
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:
2

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.
Asa cum am anticipat, vom demonstra ca problema apartenentei pentru gramatici
monotone este decidabila.
6

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
monotona ^mbogatita cu regula x ! , caz ^n care x nu mai apare ^n partea dreapta
a vreunei reguli.
Fie deci G = (VN ; VT ; x ; P ) o gramatica monotona ca mai sus, astfel ^nc^at L(G) =
L: Vom prezenta urmatorul algoritm:
1

Algoritmul (ALG20):
Intrare: G = (VN ; VT ; x ; P ) o gramatica monotona ca mai sus, w 2 VT ;
Intrebare: w 2 L(G) ?
Metoda:
begin
if jwj = 0 then
if x !  2 P then 'w 2 L(G)'
else 'w 2= L(G)'
else begin
T := fx g;
m := 1;
repeat
Tm := Tm [ f 2 (VN [ VT ) = 9 2 Tm ; =G) ; j j  ng;
m := m + 1;
until (Tm = Tm ) or (w 2 Tm );
if w 2 Tm then 'w 2 L(G)'
else 'w 2= L(G)'
0

185

Legatura dintre gramatici dependente de context si gramatici monotone

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  :::
Dar numarul tuturor sirurilor astfel ^nc^at j j  n este 1 + k + k + ::: + kn ; unde
k = jVN [ VT j: Acest numar este nit, de exemplu, avem inegalitatea
1 + k + k + ::: + kn  (k + 1)n :
Dar sirul Ti este format din cuvinte peste VN [ VT de lungime cel mult n, si cum sirul
T

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:
Pasul initial: j = 1 clar.
Pasul inductiv: Presupunem ca Ti = Ti j : Sa demonstram ca Ti = Ti j : Avem
Ti j := Ti j [ f 2 (VN [ VT ) = 9 2 Ti j ; =) 2 P; j j  ng:
+1

+ +1

+ +1

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

+1

Dar Ti = Ti , deci Ti = Ti j :
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
pasi.
Pentru demonstrarea corectitudinii Algoritmului (ALG20), vom demonstra a rmatia:
+1

+ +1

+1

\x =m) ; j j  n

(1)

() 2 Tm ":

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.
Pasul inductiv: Presupunem a rmatia (1) adevarata pentru m = j si o demonstram
j
pentru m = j +1: Avem x =
) ; j j  n: Punem ^n evidenta ultimul pas al derivarii
G
si obtinem
x =j) =)
0

+1

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

186

Exercitii propuse spre rezolvare

((=) 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:
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:
0

+1

Din 2 Tj ; aplic^and ipoteza inductiva, rezulta ca exista derivarea x =j) ; j j  n:


G

j
j
Deci avem x =)
=) ; deci avem derivarea x =
) :
+1

Exercitiul 4.3.2 Fie gramatica G = (fA; B g; fa; b; cg; A; P ); unde multimea de reguli 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):
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:
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;
 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;
 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;
 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
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;
 T = T [ fa a a b b b c c cg:
^In concluzie, deoarece a b c 2 T ; rezulta din Teorema 4.3.5 ca a b c 2 L(G):
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:

s
s
s
s
s
s

0
1

2
3
4

0
1
x
y
B
(s ; x; R)
;
;
(s ; y; R)
;
(s ; 0; R) (s ; y; L)
;
(s ; y; R)
;
(s ; 0; L)
;
(s ; x; R) (s ; y; L)
;
(s ; 0; L)
;
(s ; x; R)
;
;
;
;
;
(s ; y; R) (s ; B; R)
1

187

Exercitii propuse spre rezolvare

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:

s
s
s
s
s
s
s
s
s
s
s

2
3
4
5
6

7
8

0
1
B
(s ; B; R) (s ; B; R) (s ; B; R)
(s ; 0; R) (s ; 1; R) (s ; B; L)
(s ; 0; R) (s ; 1; R) (s ; B; L)
(s ; B; L)
;
;
;
(s ; B; L)
;
(s ; B; L) (s ; B; L) (s ; B; R)
(s ; 0; L) (s ; 1; L) (s ; B; R)
(s ; 0; L) (s ; 1; L) (s ; B; R)
(s ; B; R)
;
;
;
(s ; B; R)
;
1

10

10

;
;
Sa se arate ca L(M ) = fw w=
e w 2 f0; 1g g:
9




10

! 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 neacceptarea) 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

o masina Turing cu functia de tranzitie de nita astfel:

188

Exercitii propuse spre rezolvare

0
1
x
(s ; x; R)
;
;
(s ; 0; R) (s ; y; L)
;
(s ; 0; L)
;
(s ; x; R)
(s ; x; R)
;
;
(s ; 0; R) (s ; y; L)
;
(s ; 0; L)
;
(s ; x; R)

s
s
s
s
s
s
s

(s
(s
(s
(s
(s
(s

a) Sa se arate ca L(M ) = f0n 1n 0m 1m = n  1g;

y
B
; y; R)
;
; y; R)
;
; y; L)
;
; y; R) (s ; B; R)
; y; R)
;
; y; L)
;
6

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
s (s ; x; R)
;
;
;
(s ; y; R)
;
;
(s ; y; R)
s (s ; 0; R) (s ; y; R)
s
;
(s ; 1; R) (s ; z; L)
;
;
s (s ; 0; L) (s ; 1; L)
;
(s ; x; R) (s ; y; L)
s
;
;
;
;
(s ; y; R)
s
;
;
;
;
;
Exercitiul 4.4.5 Sa se construiasca o masina Turing M care
f0n 1n ::: kn = n  1g; k  1 xat.
0

;
;
;
;

(s ; z; R)
(s ; z; L)
(s ; z; R) (s ; B; R)
2




;
;

accepta limbajul L =

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

masina Turing cu functia de tranzitie de nita astfel:

s
s
s
s
s
s
s
s

0
1

2
3
4
5
6
7

a
b
; x; R) (s ; x; R)
; a; R) (s ; b; R)
; a; R) (s ; b; R)
; y; L)
;
;
(s ; y; L)
(s ; a; L) (s ; b; L)

(s
(s
(s
(s

;
;

;
;

c
(s ; c; R)
(s ; c; R)
(s ; c; R)

;
;
;
;
;

0
3
4

;
;

(s
(s
(s ; c; L) (s ; x; R) (s
;
;
(s
5

3
4
5

;
;
;

;
;
;
;
;
;

; y; R)
; y; R)
; y; L)
; y; R) (s ; B; R)

189

Exercitii propuse spre rezolvare

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; R) (s ; x; R) (s ; c; R)
; a; R) (s ; b; R) (s ; c; R)
; a; R) (s ; b; R) (s ; c; R)
; x; L)
;
;
;
(s ; x; L)
;
;
;
(s ; c; L)
(s ; a; L) (s ; b; L)
;

s
s
s
s
s
s
s
s
s

(s
(s
(s
(s

1
2
3

x
(s
(s
(s
(s
(s

4
5

6
7

;
;

;
;

;
;
;

;
;
;
;
;
;
;

; x; R)
; x; R)
; y; L)
; x; R)
; x; R) (s ; B; R)

;
;

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:

s
s
s
s
s
s
s
s
s
s
s

0
1

2
3

4
5
6
7
8
9




10

a
b
c
; x; R) (s ; y; R) (s ; c; R)
; a; R) (s ; b; R) (s ; c; R)
; a; R) (s ; b; R) (s ; c; R)
; x; L)
;
;
;
;
(s ; c; L)
(s ; a; L) (s ; b; L)
;
;
(s ; y; L)
;
;
;
(s ; c; L)
(s ; a; L) (s ; b; L)
;

(s
(s
(s
(s

;
;

;
;

;
;

x
(s
(s
(s
(s
(s

;
;
;

3
4

; x; R)
; x; L)
; x; R)
; x; R)
; x; R)

6
7
0

;
;
;
;
;
;
;
;
;

(s ; x; R)
(s ; y; L)

(s
(s
;
(s
(s ; x; R) (s
6

;
;
;

; y; R)
; y; R)
; y; R)
; y; R) (s ; B; R)

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
L

= f0n 1n 0n= n  1g;

= fw= w contine numar egal de simboluri 0 si 1 g:

190

Exercitii propuse spre rezolvare

Exercitiul 4.4.9 (propus de studentul Butuc Adrian Nicolae, Facultatea de Informatica, 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:

s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s

1
2
3
4

0
(s ; B; R)
(s ; 0; R)
(s ; 1; R)
(s ; 0; L)
(s ; x; R)
(s ; 0; L)
1

1
1

1
(s ; B; R)
(s ; 0; R)
(s ; 1; R)
(s ; 1; L)
(s ; y; R)
(s ; 1; L)
2

11
12

13
14
15

14
11

; x; R)
; 0; R )
; c; L)
; 0; L)
; 0; R )
; 0; L)

13

13

14

15

17

19
20
21

22
23

24
25

16

18

(s
(s
(s
(s
(s

(s
(s
(s
(s
(s
(s

; x; R)
; a; L)
; x; L)
; a; R)
; x; R)

(s
(s
(s
(s
(s
(s

11
11
13

19
20
21
22
23

18

; 0; R )
; 0; R )
; 0; R )
; 0; R )
; 0; L)
; 0; R )

(s ; a; L)
(s ; x; R)

(s ; y; R)
(s ; b; L)
(s ; y; L)
(s ; b; L)
(s ; y; R)
5

(s
(s
(s
(s
(s
(s

8
3
6

11

11

13

14

; a; R)
; a; R)
; a; L)
; a; L)
; c; R)
; a; R)

10

; y; R)
; 1; R )
; d; L)
; 1; L)
(s ; a; L)
; 1; R )
; 1; L) (s ; x; L) (s ; y; L) (s ; x; L)

15

13

15

15

15

(s ; x; L) (s ; y; L) (s
(s
(s
(s
(s ; 0; L)
(s ; 0; L)
(s
(s
17

(s
(s
(s
(s
(s
(s

10

17

17

19

19
20

; a; L)
; 0; R)
; a; R)
; a; R)

23

23

24
24

; a; L)
; a; L)

Implementari ale algoritmilor prezentati ^n cele patru capitole

s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s

3
4
5

6
7
8
9

10

11
12

13
14

15
16

17
18

19
20

23
24

(s ; b; L)
(s ; y; R)
3

(s
(s
(s
(s
(s
(s

; b; R)
; b; R)
(s ; B; R)
; b; L)
; b; L)
; d; R) (s ; x; R) (s ; y; R)
; b; R) (s ; c; L) (s ; d; L) (s ; B; L)

10
8
3
6

11

16

16

11

12

12

(s ; b; L)

(s
(s
; y; L) (s
(s
; b; L) (s
; 0; R)
; b; R) (s
; b; R)
(s
(s
; b; L) (s
; b; L)

13

15

(s
(s
(s
(s

15

16

17

20
19
20

; c; R)
; 0; R)
; x; L)
; x; R)
; c; L)

10

14

(s

21

22

B
(s ; B; R)
(s ; 0; L)
(s ; 1; L)
(s ; B; R)
25

1
2

191

17

21

14
15

16
17

; d; R)
; 1; R) (s ; B; L)
; y; L) (s ; B; R)
; y; R) (s ; B; L)
; d; L) (s ; B; R)
15
5

17

18

(s ; 0; R)
; c; R) (s ; d; R)
; c; R) (s ; d; R)
; c; L) (s ; d; L) (s ; B; R)
22

22

24

10

; 0; R )

21

(s
(s

(s
(s
(s
(s
(s

12

23

21
22

23

23

24

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

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 corespunzatoare 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)) implementata ^n limbajul Pascal;
P3. problema apartenentei pentru automate nit deterministe implementata ^n limbajul 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 normala Chomsky (Algoritmii (ALG16), (ALG17), (ALG18), (ALG19)) implementata ^n limbajul Pascal;
P7. problema apartenentei pentru gramatici independente de context st^ang nerecursive 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


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;

193

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
litera
automat

=1..nmax;
=1..mmax;
=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


{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}

195

Implementari ale algoritmilor prezentati ^n cele patru capitole


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

196

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


(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

198

Implementari ale algoritmilor prezentati ^n cele patru capitole


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;

199

200

Implementari ale algoritmilor prezentati ^n cele patru capitole


end.

Problema P3:
Avem la intrare un automat nit determinist A = (S; ; ; s ; F ) si w
iesire raspundem la ^ntrebarea daca w 2 L(A): Detalii ^n [1].
0

2  .

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;

La

Implementari ale algoritmilor prezentati ^n cele patru capitole


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;

201

202

Implementari ale algoritmilor prezentati ^n cele patru capitole


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,
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.
0

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).

203

Implementari ale algoritmilor prezentati ^n cele patru capitole


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 ).
La iesire construim un automat nit determinist echivalent cu A. Detalii ^n [1].
0

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


{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}

204

Implementari ale algoritmilor prezentati ^n cele patru capitole


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;

205

Implementari ale algoritmilor prezentati ^n cele patru capitole


{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;

206

Implementari ale algoritmilor prezentati ^n cele patru capitole


{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:

207

208

Implementari ale algoritmilor prezentati ^n cele patru capitole

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
w 2 L(G) ?, si ^n caz a rmativ, furnizam analizarea sintactica  (sirul de reguli
 w).
aplicate ^n derivarea x =;)
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, neterminalul A are numarul 7, iar terminalul a numarul 10, atunci pentru matricea P2
avem P2[6,1]=7, P2[6,2]=10.
0

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


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

209

Implementari ale algoritmilor prezentati ^n cele patru capitole

end
end;

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

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])

210

211

Implementari ale algoritmilor prezentati ^n cele patru capitole


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
w 2 L(G) ?, si ^n caz a rmativ, furnizam analizarea sintactica st^anga.
Se numeste con guratie tripletul (u #; #; ), unde:
0

 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.

212

Implementari ale algoritmilor prezentati ^n cele patru capitole

Algoritmul de mai jos se poate descrie folosind urmatoarele tranzitii:






Expandare: (u #; A #;  )

Reducere: (a u#; a #;  )

(u#; #;  r) daca r este numarul regulii A !


(u#; #; );

Acceptare: (#; #;  )
Eroare: ^n rest.

Este clar ca initial avem con guratia (w #; x #; ). Alegerea regulii ^n tranzitia
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 )


am considerat matricea regula. Pe prima coloana, "tinem minte" numarul neterminalului, 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.
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


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,']=');

213

Implementari ale algoritmilor prezentati ^n cele patru capitole


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

214

Implementari ale algoritmilor prezentati ^n cele patru capitole


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;

215

Implementari ale algoritmilor prezentati ^n cele patru capitole

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

216

217

Implementari ale algoritmilor prezentati ^n cele patru capitole


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
^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:
0

218

Implementari ale algoritmilor prezentati ^n cele patru capitole

Diferenta cea mai importanta dintre cei doi algoritmi (care rezolva P7 si P8) este
forma gramaticii de intrare. Acum, punem urmatoarele doua conditii pentru gramatica de la intrare:

gramatica G nu are  reguli, cu exceptia, eventual, a regulii x


care x nu mai apare ^n partea dreapta a vreunei reguli;

! ; caz ^n

gramatica G nu are redenumiri ciclice, adica nu exista x


x =) x:
+

2 VN

astfel ^nc^at

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= :
+

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 gramatica 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

% 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(['(','(',')',')','(',')']).

220

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 BackusNaur.
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:

222

Index

 < real fara semn >::=< ^ntreg fara semn > < X >
 < X >::= e < factor scala > j 
^In cele ce urmeaza, vom prezenta vocabularul limbajului Pascal exprimat prin diagrame 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 >
simbol echivalent >

j <

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 >

1.7. < directiva >::= forward j external j nonpascal

jg

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 >


< real fara semn > j

223

Index

< 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 >
variabile j
< subprogram >g [ < instructiune compusa > : ]

2.1.b. < subprogram >::=< procedura > ; j < functie > ;

j < tipuri > j <

224

Index

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 >
[ < 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 >
componenta constanta > g )

f; <

2.10. < componenta constanta >::=< constanta > j < lista componente constante >
2.11. < tip >::=

< identi cator > j


< tip enumerare > j
< tip subdomeniu >
< tip set > j
< tip array > j
< tip record > j
< tip le >

225

Index

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 >
< antet procedura > j
< antet functie >

226

Index

2.21. < instructiune >::= [ < eticheta > : ] < instructiune neetichetata >
2.22. < instructiune neetichetata >::=
[ < atribuire > j
< apel procedura > j
< instructiune compusa >
< 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 >
lista argumente write > ]

j <

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 >
g end

f; <

instructiune >

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
expresie >
do < instructiune >

< variabila > := < expresie > < pas > <

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 >

2.25.b.
2.26.a.
2.26.b.
2.27.a.
2.27.b.
2.28.a.

2.28.b.
2.28.c.
2.29.

< operator relational >::=< j > j <= j >= j = j <> j in


< termen >::=< factor > f < operator multiplicativ > < factor > g
< operator multiplicativ >::=  j = j div j mod j and
< expresie simpla >::= [ < semn > ] < termen > f < operator aditiv > <
termen > g
< operator aditiv >::= + j j or
< factor >::=
[ < constanta fara semn > j
< variabila > j
< apel functie > j
not < factor > j
( < expresie > ) j
( : [ < indicator membru > f < indicator membru > g ] : )
< apel functie >::=< identi cator functie > [ < lista argumente > ]
< indicator membru >::=< expresie > [ : : < expresie > ]
< 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, Reading 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, Elsevier 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