Sunteți pe pagina 1din 59

CONF. DR.

DANIELA MARINESCU

REPROGRAFIA UNIVERSITĂŢII “TRANSILVANIA” DIN BRAŞOV


CUPRINS

Capitolul I. ......…………………………………………………………………………….1
§ 1.1 Noţiunea de limbaj ................................ ................................ .......................... …1
§ 1.2 Gramatici generative ................................ ................................ ......................... ..4
§ 1.3 Operaţii cu limbaje ................................ ................................ .......................... …7
§ 1.4 Exercitii…….. ................................ ................................ ................................ ... ..8

Capitolul II.………………………………………………………………………………..9
§ 2.1 Automate finite…………………………………………………………………9
§ 2.2 Legătura dintre gramaticile regulate şi automatele finite ........................... ..….12
§ 2.3 Minimizarea automatului finit..……………………………………………….16
§ 2.4 Algoritmi pentru minimizarea automatului finit ................................ .......... ….17
§ 2.5 Lema de pompare pentru mulţimi regulate ................................ ................... …22
§ 2.6 Gramatici regulate şi expresii regulate................................ ........................ …..22
§ 2.7 Algoritm de transformare a unei gramatici regulate într-o expresie regulată…24
§ 2.8 Echivalenţa dintre expresiile regulate şi automatele finite nedeterministe……27
§ 2.9 Proprietăţi ale limbajelor de tip 3 ................................ ................................ …..30
§ 2.10 Exercitii………………………………………………………………………..35

Capitolul III…...………………………………………………………………………….37
§ 3.1 Arbori de derivaţie pentru gramaticile I.D.C. ................................ ............. .….37
§ 3.2 Forme normale ................................ ................................ ............................ .….40
§ 3.3 Teorema de pompare pentru limbaje I.D.C.(lema Bar-Hillel).................... .….40
§ 3.4 Automate Push-down ................................ ................................ ................. ..….44
§ 3.5 Legătura dintre automatele push-down nedeterministe şi limbajele
independente de context ................................ ................................ .......................... ….47
§ 3.6 Proprietăţi de închidere pentru limbaje I.D.C. ................................ ............ …..48
§ 3.7 Exerciţii ................................ ................................ ................................ ....... …..54

BIBLIOGRAFIE ...............................................................................................................56
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

Introducem, în acest capitol, o serie de noţiuni folosite în teoria limbajelor formale cum ar fi:
alfabet, simbol, cuvânt, subcuvânt, prefix, suffix, cuvânt vid. Noţiunea de limbaj formal se defineşte apoi în
mai multe feluri, echivalente între ele, pornind de la sisteme de rescriere, pînă la gramatici generative şi
analitice. În continuare se prezintă o ierarhizare a gramaticilor, numită Ierarhia lui Chomsky, şi se
definesc operaţiile cu limbaje. Capitolul I se încheie cu probleme propuse spre rezolvare.

§ 1.1 Noţiunea de limbaj

Noţiunea de limbaj se întâlneşte atât în lingvistică, unde se referă la limbajele naturale, cât şi în
informatică, unde se referă la limbajele de programare.
O limbă naturală se defineşte, conform dicţionarului, ca o mulţime de cuvinte şi de metode de
combinare a lor, folosită şi înţeleasă de o comunitate umană considerabilă.
Un limbaj de programare se defineşte ca o mulţime de programe scrise în acel limbaj.
O limbă naturală sau un limbaj de programare pot fi considerate ca mulţimi de secvenţe, adică şiruri
finite de elemente ale unui anumit vocabular de bază.
Pentru a putea studia proprietăţile acestor limbaje a fost necesară formalizarea noţiunii de limbaj,
construirea unei teorii matematice riguroase a limbajelor. O astfel de teorie este suficient de generală pentru
a include şi limbajele naturale şi limbajele de programare, precum şi o mulţime de alte limbaje, formând la
un loc aşa numitele limbaje formale.
Pentru a putea defini noţiunea de limbaj formal vom introduce o serie de noţiuni şi notaţii folosite
frecvent în această teorie.
Definiţia 1.1.1 Un alfabet sau vocabular, V, este o mulţime finită, nevidă de elemente.
Definiţia 1.1.2 Un element al alfabetului V se numeşte literă sau simbol.
În cele ce urmează vom folosi ca simboluri cifrele, literele latine şi greceşti mari şi mici şi simboluri
speciale cum ar fi $, #.
Exemplul 1.1.1 Exemple de alfabete sunt:
-alfabetul latin: {A, B, C, ..., Z}
-alfabetul grecesc: {,  , , ..., }
-alfabetul binar: {0, 1}.
Definiţia 1.1.3 Un cuvânt peste alfabetul V este un şir finit constând din zero sau mai multe simboluri ale
lui V, unde un acelaşi simbol poate să apară de mai multe ori.
Notăm cu  sau , cuvântul vid, format din zero simboluri.
Dacă V este un alfabet atunci prin V* vom nota mulţimea tuturor cuvintelor peste V, inclusiv
cuvântul vid , iar V+= V* -   .
Exemplul 1.1.2 Dacă V =  0, 1  atunci
V*=, 0, 1, 00, 01, 10, 11, . ..
şi
V+=0, 1, 00, 01, 10, 11, 000 , ... .
Evident V* şi V+ sunt mulţimi infinite deoarece ele conţin cuvinte de lungime oricât de mare.
Definiţia 1.1.4 Un limbaj este o mulţime de cuvinte peste un alfabet.

-1-
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

Exemplul 1.1.3 Într-un limbaj natural alfabetul, în sensul definiţiilor de mai sus, este dicţionarul limbii
respective, cuvintele sunt frazele, iar limbajul este mulţimea tuturor frazelor. Într-un limbaj de programare
simbolurile sunt instrucţiunile limbajului, cuvintele sunt programele iar limbajul este mulţimea tuturor
programelor.
În mulţimea cuvintelor se introduce o operaţie numită concatenare:
Definiţia 1.1.5 Dacă u şi v sunt două cuvinte din V* atunci concatenarea uv este tot un cuvânt din V*, care
se obţine prin alăturarea simbolurilor lui v după ultimul simbol al lui u.
Observaţia 1.1.1 Evident operaţia de concatenare este asociativă, u(vw)=(uv)w, dar nu este comutativă (în
general uvvu) iar cuvântul vid  este element neutru relativ la operaţia de concatenare: u=u=u.
Definiţia 1.1.6 Puterea a i-a a cuvântului u, notată ui, este definită recursiv astfel:
(1) u0 = 
(2) ui+1 = uiu
Definiţia 1.1.7 Lungimea unui cuvânt u, notată lg(u) sau |u|, este numărul de simboluri ale cuvântului u şi
este o aplicaţie lg: V*  N .
Prin definiţie lg() = 0,  fiind cuvântul format din zero simboluri.
Definiţia 1.1.8 Un cuvânt u este subcuvânt al lui v dacă şi numai dacă există cuvintele  şi  astfel încât v =
u . Dacă  =  atunci u se numeşte prefix al lui v iar dacă  =  atunci u se numeşte sufix al lui v. Un
subcuvânt u al lui v se numeşte subcuvânt propriu al lui v numai dacă u{,v}.
Majoritatea limbajelor care ne interesează vor conţine o mulţime infinită de cuvinte. Se pun atunci
trei chestiuni importante:
1. Cum se poate reprezenta un limbaj?
Dacă limbajul este finit atunci el s-ar putea reprezenta prin enumerarea cuvintelor sale, deşi la un
număr mare de cuvinte enumerarea poate fi complicată. Dacă însă limbajul este infinit apare problema
găsirii unei reprezentări finite pentru limbaj.
Apare atunci o altă problemă:
2. Există o reprezentare finită pentru orice limbaj?
Evident mulţimea V* a tuturor cuvintelor peste un alfabet finit V este o mulţime numărabilă. Un
limbaj este o submulţime a lui V*, deci mulţimea tuturor limbajelor peste V este mulţimea părţilor lui V*,
adică o mulţime nenumărabilă.
Deşi nu am definit încă o reprezentare finită a unui limbaj, se pare că mulţimea reprezentărilor finite
este numărabilă [4] deci ar rezulta că există mai multe limbaje decât reprezentări finite ale limbajelor.
3. Ce se poate spune despre structura acelor clase de limbaje care admit reprezentări finite?
Aceasta este una din principalele problemele de care ne vom ocupa în continuare.
Să considerăm acum câteva limbaje peste alfabetul {a, b}.
L1={  }
L2={ a, ba, aaba, bbbb }
L3={ ap | p număr prim }
L4={ ai bi | i număr natural }
*
L5={ u a,b | N a(u)=Nb(u) }
unde Na (u) este numărul de apariţii ale simbolului a în cuvântul u. Considerăm şi limbajul vid  , care nu
conţine nici un cuvânt. Se observă că   {} pentru că limbajul { } conţine un cuvânt şi anume .
Limbajele L1 şi L2 fiind finite se pot reprezenta prin enumerarea cuvintelor lor pe când limbajele L3,
L4 şi L5 sunt infinite şi au fost caracterizate de o proprietate pe care trebuie să o satisfacă toate cuvintele
limbajului. O astfel de proprietate specifică este un mijloc de bază de definire a unui limbaj infinit.
Un alt mod de a defini un limbaj infinit este de a introduce un mecanism generativ şi de a considera
cuvintele produse de acest mecanism.
Se poate, de asemenea, construi un mecanism analitic, de recunoaştere. Astfel un limbaj se poate
defini ca mulţimea tuturor cuvintelor recunoscute de un astfel de mecanism.
Mecanismele generative şi analitice se pot defini în termenii unui sistem de rescriere.
-2-
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

Să considerăm câteva moduri de definire ale unor limbaje în exemplele următoare.


Exemplul 1.1.4 Fie L un limbaj peste alfabetul {a, b} definit după cum urmează:
(i) λ L
(ii) Dacă x L atunci axb  L
(iii) Nici un alt cuvânt nu aparţine lui L.
Se poate demonstra prin dublă incluziune că limbajul L construit conform acestor reguli este chiar
limbajul L4 = { a i bi | i număr natural }.
Se observă că (i)-(iii) constituie un mecanism generativ pe când L4 este definit de o proprietate
specifică.
Exemplul 1.1.5 Fie L’ definit după cum urmează :
(i) L’
(ii) Dacă xL’, atunci axbL’ şi bxaL’
(iii) Dacă x1L, x2L’ atunci x1x2L’
(iv) Nici un alt cuvânt nu aparţine lui L’.
Si aici se poate demonstra că L’=L5.
Exemplul 1.1.6 Fie L” un limbaj constând din toate cuvintele care se pot reduce la  prin înlocuirea
subcuvintelor ab prin .
Astfel cuvintele , ab, abab şi aabbab L”. Evident L”L5 dar L”L5 pentru că, de exemplu,
baL”. Definiţia aceasta poate fi considerată ca un mecanism de recunoaştere sau analitic.
În exemplele date anumite subcuvinte sunt rescrise. În conformitate cu definiţia următoare, o
mulţime finită de reguli de rescriere determină un sistem de rescriere.
Definiţia 1.1.9 Un sistem de rescriere este o pereche ordonată SR=(V, F), unde V este un alfabet şi F o
mulţime finită de perechi ordonate de cuvinte peste V. Elementele (α,β) ale lui F sunt numite reguli de
rescriere sau producţii şi se notează αβ.
Un cuvânt x peste V generează direct cuvântul y (x  y) dacă şi numai dacă există cuvintele u, v, α ,
SR

β astfel încât: x=uαv, y=uβv, iar α1β1 F, adică subcuvântul α al lui x este înlocuit prin subcuvântul β.
*
Un cuvânt α peste V generează β (în mai mulţi paşi) (α  β) dacă şi numai dacă există un şir finit de
cuvinte α0, α1 , ..., α k, k  0, unde α0=α, αk=β şi αi  αi+1, pentru 0  i  k-1. Secvenţa α0 α1... αk se
va numi derivaţie a lui β din α în conformitate cu sistemul de rescriere, SR.
α= α0 α1 α2.... αk=β
*
Astfel relaţia  este o relaţie binară pe V* iar  este închiderea reflexivă şi tranzitivă a relaţiei .
Numărul k se numeşte lungimea derivaţiei sau număr de paşi.
Un sistem de rescriere poate fi transformat într-un mecanism generativ prin specificarea unei
submulţimi Ax  V*, numită mulţimea de axiome, şi considerând limbajul
*
(1) Lg(SR, Ax)={ β | α  β, α Ax }
Similar un sistem de rescriere poate fi privit ca un mijloc analitic sau de recunoaştere, considerând
*
limbajul (2) La(SR, Ax)={ α | α  β, β Ax }
Formula (1) reprezintă limbajul generat de perechea (SR, Ax), iar formula (2) reprezintă limbajul
recunoscut sau acceptat de perechea (SR, Ax).
Observaţia 1.1.3 De cele mai multe ori mulţimea Ax este formată dintr-un singur simbol (simbolul iniţial)
sau are o structură foarte simplă.
Observaţia 1.1.4 De cele mai multe ori V se împarte în două submulţimi:VT, mulţimea terminalelor, VN
mulţimea neterminalelor sau a variabilelor şi limbajul se defineşte ca o submulţime a lui VT *.
Revenind la exemplele anterioare, în exemplul 1.1.6, L” se poate defini, în termenii unui sistem de
rescriere ca L” = La(SR,{}), unde V={a,b} iar F={ab}.
În exemplul 1.1.4, L=Lg(SR,{x}){a,b}*, unde SR=({a,b,x}, {x , xaxb}).
-3-
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

Limbajul L’ din exemplul 1.1.5 este definit acum :


L’ = Lg(SR,{x}){a,b}*,
Unde SR=({a,b,x}, {x , xaxb, xbxa, xxx}).
Sistemele de rescriere sunt de asemenea denumite sisteme semi - Thue.
Dintre cele mai cunoscute sisteme de rescriere fac parte: algoritmul normal în sens Markov[16], sistemele
normale Post si gramaticile generative.

§ 1.2 Gramatici generative

Vom defini un tip de mecanism care joacă un rol important în teoria limbajelor formale.
Definiţia 1.2.1 O gramatică generativă este un quadruplu ordonat G=(VN, VT,S,P), unde VN şi VT sunt
alfabete finite disjuncte SVN şi P este o mulţime finită de perechi ordonate (u,v), astfel încât v este un
cuvânt din V*, unde V=VNVT şi u este un cuvânt din V* care conţine cel puţin o literă din VN.
Elementele lui VN formează mulţimea neterminalelor sau variabilelor, iar cele ale lui VT formează
mulţimea terminalelor; S se numeşte simbolul iniţial, iar P sunt reguli de rescriere, producţii. De fapt o
gramatică este un sistem de rescriere (V, P) numit sistem de rescriere indus de G.
Noţiunile de derivare directă sau derivare corespund celor introduse în cadrul unui sistem de
rescriere.
Limbajul L(G) generat de G este definit de:
*
L(G)={ w| w V *, S  w }
Definiţia 1.2.2 Două gramatici, G şi G1, se numesc gramatici echivalente atunci şi numai atunci când
L(G)=L(G1).
Exemplul 1.2.1 Limbajul L = { a ibi | iN } este generat de gramatica generativă
G = ({S}, {a,b}, S, {S , S aSb})
Exemplul 1.2.2 Limbajul L = { w | w {a,b}*, N a(w)=Nb(w) } este generat de gramatica generativă
G = ({S}, {a,b}, S, {S , S asb, S bSa, S SS})
Vom da în continuare câteva exemple de gramatici conform cu [21].
Exemplul 1.2.3 [21].
G = ({S, B, C}, {a, b, c}, S, P}) , unde mulţimea P este formată din:
SaSBC bCbc
SaBC cCCc
CBBC aBab
bBbb
Să încercăm o derivaţie în gramatica G:
S  aSBC  aaSBCBC  aaaSBCBCBC  aaaaBCBCBCBC  aaaaBBCCBCBC
* aaaaBBBBCCCC  aaaabBBBCCCC  aaaabbBBCCC  aaaabbbBCCCC
 aaaabbbbCCCC  aaaabbbbcCCC  aaaabbbbccCC  aaaabbbbcccC  aaaabbbbcccc
Se poate demonstra că L(G)={anbncn | n 1}

Exemplul 1.2.4. [21] Fie limbajul L={ ww | w {0,1}* }. Gramatica G definită de: G=({x0, x1, x2, x3},
{0,1}, x 0, P}), unde P este:
P: x0  x1 x2 x3 x1x2ix1yi
x1x2 yijjyi
pentru fiecare i şi j din {0,1}
x3 yix3x2ix3
ix2x2i
Această gramatică generează limbajul L. Să încercăm o derivaţie în această gramatică:
x0  x1x2x3 0x1y0x3 0x1x20x3  01x1y10x3  01x10y1x3  01x10x21x3 

-4-
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

 01x1x201x3  0101x3  0101


Exemplul 1.2.5[21] Pentru limbajul L={an² | n1} vom avea următoarele reguli gramaticale care se
bazează pe identitatea n2=1+3+...+(2n-1), unde toate simbolurile cu excepţia lui a sunt simboluri
neterminale:
P : x0  a xx1x1yx y2yyy2
x0axx2z yx1y1yx y2xyx2
x2zaa xy1x1y
xaaa yy1y1y
yaaa ax1axxyx2
x2zy1yxz x2yxy2
Să încercăm şi aici câteva derivaţii:
x0  axx2z  axaa  aaaa
x0  axx2z  axy1yxz  ax1yyxz axxyx2yyxz axxyxy2yxz
 axxyxyy2xz  axxyxyyx2z axxyxyyaa  axxyxyaaa
 axxyxaaaa  axxyaaaaa  axxaaaaaa  axaaaaaaa
 aaaaaaaaa = a 9 = a3².

Exemplul 1.2.6. [21] Pentru generarea limbajului L = { a 2 | n 0 }vom avea următoarele reguli:
P: x0yxy zyxxy
yxyz x a
zxxxz y
Vom construi o derivaţie în aceasta gramatică pentru n = 2, pornind de la simbolul iniţial x0
x0  yxy  yzy  yxxy  yzxy yxxzy  yxxxxy  xxxy  axxxy 
 aaxxy aaaxy aaaay  aaaa
Exemplul 1.2.7 Fie G=({S,B}, {0,1}, S, P) unde
 S  0B
P: 
 B  1S
 B  1

Limbajul generat de G este L(G) = {(01)n | n>0}. Exemplificăm derivaţia unui cuvânt din limbaj pentru
n = 3. S  0B  01S  010B  0101S  01010B  010101 = (01)3
Exemplul 1.2.8 Fie gramatica G=({S,A,B},{a,b},S,P), unde mulţimea regulilor P={S  aSb, S  ab}.
Este uşor de demonstrat că limbajul generat de gramatica G este L(G) = {anbn | n>0}.
Pentru n = 4 obţinem următoarea derivaţie:
S aSb  aaSbb  aaaSbbb  aaaabbbb = a4b4
Gramaticile generative pot fi clasificate prin impunerea de restricţii asupra form ei regulilor.

Definiţia 1.2.4 (Ierarhia lui Chomsky) Pentru i{0,1,2,3}, o gramatică generativă, G=(VN, V T, S, P)
este de tip i dacă şi numai dacă regulile de rescriere din P îndeplinesc restricţiile de tip (i):
(0) Nici o restrictie.
(1) Reguli dependente de context (DC): Fiecare regulă din P este de forma u1Au2u1wu2 ,
unde u1, u2V*, A VN şi wV+ cu o singură excepţie posibilă S, care poate să apară
dacă S nu apare în dreapta nici unei reguli din P.
(2) Reguli independente de context (IDC): Fiecare regulă din P este de forma
A  w cu A  VN şi w  V+.
(3) Reguli regulate (R): Fiecare regulă este de una din următoarele două forme A aB sau A
 a , unde A, B VN şi aVT*.

5
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

Gramaticile de tip 1 se numesc dependente de context sau contextuale, gramaticile de tip 2 se


numesc independente de context, iar gramaticile de tip 3 se mai numesc şi regulate sau cu număr finit de
stări.
Evident că orice gramatică de tip 3 este şi de tip 2, orice gramatică de tip 2 este şi de tip 1, şi orice
gramatică de tip 1 este de tip 0.
Dacă notăm cu Li familia limbajelor de tip (i) avem, evident, următoarea incluziune între
familiile de limbaje:
L 3  L 2  L1  L0
Se va demonstra ulterior că incluziunea este proprie, deci că prin restricţiile (0)-(3) se obţine într-
adevăr o ierarhizare a familiilor de limbaje.
Definiţia 1.5 O gramatică este cu lungime crescătoare sau monotonă dacă şi numai dacă regula uv
satisface condiţia |u| |v| cu o singură excepţie posibilă S, care, dacă apare în mulţimea regulilor,
atunci S nu apare în partea dreaptă a nici unei reguli.
Observaţia 1.2.2 Gramaticile dependente de context sunt gramatici cu lungime crescătoare. Se poate
demonstra că gramaticile cu lungime crescătoare şi gramaticile dependente de context sunt echivalente.
Observaţia 1.2.3 Gramaticile din exemplele 1.2.3, 1.2.4, şi 1.2.6 sunt gramatici monotone deci, conform
observatiei 1.2.2, limbajele generate sunt dependente de context. Gramatica din exemplul 1.2.5 este o
gramatică de tip 0 (există reguli care nu sunt monotone, ca de exemplu regula x1x2), gramatica din
exemplul 1.2.8 este independentă de context iar cea din exemplul 1.2.7 este regulată sau de tip 3.
Exemplul 1.2.10 Din punct de vedere lingvistic, gramaticile sunt folosite pentru analiza frazelor. Să
considerăm următoarea gramatică analitică IDC unde VN = { F, A, V, P n, S, S n}, (variabile care
reprezintă, respective: fraza, articol, verb, predicat nominal, substantiv, subiect), V T = {o, fata, este,
laboranta}, unde fiecare din aceste cuvinte ale limbii române reprezintă un simbol al alfabetului
terminalelor. Regulile gramaticii sunt:
{ A  o,S  fată, S  laborantă, V  este, Sn AS, Pn VS, F SnPn }
Frazele generate sunt :
 o fata este laborantă
 o laborantă este fată
 o fată este fată
 o laborantă este laborantă
Fiecare din fraze este corectă gramatical dar unele s-ar putea să nu aibă nici un înţeles.
Exemplul 1.2.11 Se numeşte palindrom un cuvânt, care este identic când este citit de la stânga la dreapta
sau de la dreapta la stânga. Astfel în limba româna există palindroamele: capac, coc, cuc, lupul, ele, etc.
Notăm cu ~y reflectatul sau oglinditul unui cuvânt y, adică cuvântul ale cărui simboluri sunt în ordine
inversă faţă de y. Limbajul { y~ y | y VT* } este în mulţimea palindroamelor cu VT={a1, ..., a n} şi poate fi
generat de gramatica:
G=({S}, V T, S, {S , S a1Sa1, S a2Sa2, ..., S anSan}).
În exemplul anterior există regula S iar S apare şi în dreapta altor reguli. Vom arăta că există
ca pentru orice astefel de gramatică există o gramatică echivalentă în care S nu apare în dreapta nici unei
reguli.

Teorema 1.2.1. Dacă G = (VN, VT, S, P) este o gramatică DC, atunci există altă gramatică DC, G1, care
generează acelaşi limbaj cu G, pentru care simbolul initial (de start) nu apare în dreapta nici unei
reguli ale lui G 1. Dacă G este IDC sau R atunci şi G 1 este IDC, respectiv R.
▼ Demonstraţie :
Fie S1VNVT. Construim gramatica G1={VN{S1}, VT, S1, P1 }, unde P1 conţine toate regulile
din P şi în plus toate regulile de forma S1 unde S P :
P1=P{S1 │ S P }
Observăm că S1VNVT deci nu apare în dreapta nici unei producţii din G şi nici în dreapta
vreunei producţii noi adăugate în P.

-6-
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

Să demonstrăm acum că L(G)=L(G1).


*
a) Presupunem că wL(G), deci există o derivaţie în gramatica G de forma S  w. Atunci prima
*
regulă folosită este de forma S deci derivaţia va fi : Sw
G G

Prin definiţia lui P1 avem : S1 P1 şi deci: S1  


G1

Pentru că toate regulile lui P sunt în P1 rezultă că orice derivaţie din G este şi o derivaţie în gramatica
*
G1 deci  w
G1
*
Combinând cele două derivaţii se obţine: S1    w ,
G1 G1

Deci w  L(G1), de unde rezultă că L(G) L(G1).


*
b) Presupunem acum că wL(G1), deci există derivaţia S1  w în gramatica G1. Prima regulă folosită
este de forma S1, pentru un anume . Rezultă din construcţia gramaticii G1 că S este o regulă din
*
P şi deci S, în gramatica G. Acum   w este o derivaţie în gramatica G1 dar nu poate avea simbolul
*
S1, căci foloseşte numai regulile din P1 care sunt şi în P. Rezultă că   w este o derivaţie în gramatica
*
G şi atunci S    w, adică wL(G).
G G
Evident că regulile adăugate la P pentru a obţine P1 sunt de acelaşi tip cu regulile lui P deci dacă
G este DC (IDC sau R) atunci şi G1 este DC (IDC sau R). ▲

Teorema 1.2.2. Dacă L este un limbaj DC, IDC sau R, atunci şi L  şi L\{} sunt limbaje DC, IDC
respectiv R.
▼Demonstraţie : Dacă L este un limbaj DC, IDC sau R, din teorema 1.2.3 rezultă că există o gramatică
G, care poate fi DC, IDC sau R, în care simbolul iniţial, S, nu apare în partea dreaptă a nici unei reguli
de rescriere. În plus singura regulă în care membrul drept poate fi λ este de forma S→λ.
Atunci pentru limbajul L\{} se scoate regula S→λ, iar pentru limbajul L se adugă tot regula S→λ.
Toate aceste modificări nu au nici o influenţă asupra restului cuvintelor generate de G pentru că
simbolul iniţial S nu mai apare în partea dreaptă a nici unei reguli de rescriere . ▲

§1.3 Operaţii cu limbaje

Pentru că limbajele sunt mulţimi, rezultă că se pot folosi toate operaţiile cu mulţimi cunoscute.
Reuniunea a două limbaje L1L2={ w | w L1 sau wL2 }
Intersecţie a două limbaje L1L2={ w | w L1 şi w L2 }
Diferenţa a două limbaje L1\L2={ w | w L1 şi w L2 }
Complementara unui limbaj relativ la un alphabet V CV(L)=V*\L
În afară de aceste operaţii se pot introduce o serie de opera ţii specifice limbajelor :
Concatenarea a două limbaje L1L2={uv | u L1, vL2
Limbajele Φ şi {} reprezintă elementul zero şi respectiv elementul unitate relativ la concatenarea
limbajelor: L Φ = Φ L= Φ L{}={}L=L
Concatenarea se mai numeşte şi produs.
Puterea unui limbaj se defineşte recursiv prin:
L 0 = { }
Li+1 = L i L .
Produsul Kleene (sau Închiderea Kleene) este definit prin reuniunea tuturor puterilor lui L:

-7-
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR


*
L  Li
i 0

Închiderea Kleene  - liberă este L  Li
i 1
Câtul stâng a două limbaje este limbajul format din sufixele cuvintelor din L1 care au prefixul în L 2:
L2\L1={v |uv L1, u L2}
Derivata stângă a unui limbaj relativ la cuvântul v este  vs L={u |vuL} adică câtul stâng al
limbajelor {v}\L.
Câtul drept a două limbaje este limbajul format din prefixele cuvântelor din L1 cu sufixul în L:
L1/L2 = { v| vu L1 pentru uL2 }
Derivata dreaptă a unui limbaj relativ la cuvântul u este udL= {v |vuL} adică câtul drept al
limbajelor L/{u}.
~
Reflectatul sau oglinditul unui limbaj L = { ~ u | u L }.
Substituţia unui limbaj se defineşte astfel:
aV definim  (a) un limbaj peste Va iar apoi se aplică proprietăţile:
()=,
(uv)=(u)(v)  u, v  V*
deci  este o aplicaţie  : V* P(V’*), unde V’= Va .
aV
Substituţia unui limbaj L este atunci:
(L)={ v | v(u) pentru u L }
Dacă (a) este un singur cuvânt ua, atunci substituţia se numeşte homomorfism h:V*V’*. Un
homomorfism se numeşte -liber dacă nici unul din cuvintele (a)=ua nu este .
Una din problemele pe care le vom studia în capitolele următoare este problema închiderii
familiilor de limbaje de tip i, Li (i = 0, 1, 2, 3), relative la operaţiile introduse.

§1.4 Exerciţii

1.Să se construiască o derivaţie în gramatica din exemplul 1.2.3 pentru:


a. n = 2;
b. n = 3;
c. n = 4.
d. n = 5.
2. Să se construiască o derivaţie în gramatica din exemplul 1.2.4 pentru cuvintele:
a. 0001100011;
b. 10101010;
c. 1111011110.
3. Să se construiască o derivaţie în gramatica din exemplul 1.2.5 pentru:
a. n = 1;
b. n = 2;
c. n = 4;

-8-
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

Capitolul II este dedicat limbajelor de tip 3, numite şi limbaje regulate. Se prezintă trei moduri
de reprezentare ale limbajelor regulate: gramaticile de tip 3, automatele finite (deterministe şi
nedeterministe) şi expresiile regulate. Pentru automatele finite deterministe se prezintă un algoritm de
minimizare. Se demonstrează că cele trei moduri de reprezentare sunt echivalente şi se studiază
proprietăţile familiei limbajelor de tip 3, dintre care fac parte: lema de pompare şi proprietăţile de
închidere ale familiei limabjelor regulate la operaţiile introduse în capitolul I. Capitolul II se încheie cu
probleme propuse spre rezolvare.

În capitolul anterior am definit noţiunea de limbaj regulat sau limbaj de tip 3, ca fiind limbajul generat
de o gramatică de tip 3, adică de o gramatică G=(VN,VT,S,P), unde regulile din P sunt de forma :
A→aB sau A→a
Aici A şi B, sunt simboluri neterminale iar a este un symbol terminal.
Vom defini în cele ce urmează un sistem analitic pentru limbajele regulate ş i anume automatele finite.

§ 2.1 Automate finite

Din punct de vedere istoric, automatele finit au fost introduse pentru a modela reţelele neuronale
dar au o mulţime de aplicaţii şi în alte domenii cum ar fi: analiza lexicala (faza iniţială a unui
compilator), descrierea editoarelor de texte şi a altor programe de procesare a textelor, modelarea
circuitelor logice şi altele.
Automatul finit este un bun model pentru un calculator cu o cantitate extreme de limitată de
memorie. Vom vede că, deşi are o memorie foarte mică, un astfel de calculator poate sa facă o serie de
lucruri utile cum ar fi cele enumerate mai sus.
Definiţia 2.1.1 Un automat finit determinist, notat M=(Q, Σ, δ, q 0, F), este format din:
Q - o mulţime finită nevidă (mulţimea stărilor);
Σ - un alfabet finit de intrare;
 - o aplicaţie numită funcţie de tranziţie, care ataşează fiecărei combinaţii <stare, simbol de
intrare> o nouă stare δ : Q  Σ  Q ;
q 0  Q starea iniţială;
F  Q mulţimea stărilor finale.
Din punct de vedere practic un automat finit este format dintr-un control finit, care se poate afla într-una
din stările mulţimii Q, dintr-o bandă de intrare împărţită în celule în care sunt scrise un număr finit de
simboluri din Σ, şi un cap de citire care se mişcă pe banda de intrare secvenţial de la stânga la dreapta
(de fapt banda de intrare se mişcă în dreptul capului de citire de la dreapta la stânga ).
a0 a1 … ai … an …

CONTROL FINIT
Figura 2.1.1

-9-
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

Iniţial controlul finit se află în starea q 0 iar capul de citire analizează cel mai din stânga simbol scris pe
banda de intrare. Interpretarea lui δ(q, a)  p pentru q,pєQ şi aєΣ, este aceea că automatul M, aflat în
starea q şi analizând simbolul a pe banda de intrare, îşi schimbă starea în p şi îşi mută capul de citire cu
o celulă la dreapta.
S-ar putea ca funcţia de tranziţie δ să nu fie peste tot definită, adică să existe p P şi a astfel încât
δ(p,a)= . În cazul în care automatul se află în această stare p şi capul de citire vizează simbolul a pe
banda de intrare se spune că automatul se blochează fiindca nu este definită mişcarea următoare.
*
Aplicaţia δ se poate extinde la Q  Σ , prin δ̂ :
δ̂(q, λ)  q

δ̂(q, xa)  δ( δ̂(q, x), a)  x  Σ*, a  Σ ,
semnificaţia lui δ̂ (q, x)  p fiind aceea că M, pornind să analizeze secvenţa x din starea q, ajunge în
starea p în momentul în care capul de citire depăşeşte secvenţa x.
Observaţia 2.1.1 În continuare vom folosi notaţia δ şi pentru ˆ .
Definiţia 2.1.2 Un cuvânt x este acceptat sau recunoscut de un automat finit M, dacă, δ(q0 , x)  p
pentru p  F .
Limbajul acceptat de automatul M se notează T(M)  x δ(q 0 , x)  F  .
Definiţia 2.1.3 Numim configuraţie instantanee perechea (q,x), formată din starea q  Q în care se
*
află automatul finit şi şirul de caractere x  Σ rămas necitit pe banda de intrare, unde capul de citire
vizează cel mai din stânga simbol al lui x.
Dacă automatul finit foloseşte tranziţia δ(q, a)  p , atunci vom nota modificarea configuraţiei
astfel: (q, a ) ├ ( p, ) .
Exemplul 2.1.1 Specificarea unui automat finit M se poate face prin definirea funcţiei δ (într-un tabel)
sau printr-o diagramă de stare sau de tranziţie. Diagrama de tranziţie este un graf orientat în care
nodurile sunt stările automatului iar arcele (q,p) sunt etichetate cu a dacă δ(q,a)=p este o tranziţie din
automatul M.
▼Fie, de exemplu, automatul finit M  (Q, Σ, δ, q 0 , F)
  { 0 ,1} , Q  {q 0 , q 1 , q 2 , q 3 } , F  {q 0 }

Σ sau:
δ
0 1 0
Start q1
q0
q0 q1 q2 0
1 1
q1 q0 q3 1 1
Q
0
q2 q3 q0 q2 q3
0
q3 q2 q1
Figura 2.1.2
Fie şirul de intrare 10110010; atunci putem urmări execuţia automatului astfel:
δ(q0 ,10110010) δ(q2 ,0110010)  δ(q3 ,110010)  δ(q1 ,10010) 
 δ(q3 ,0010)  δ(q2 ,010)  δ(q3 ,10)  δ(q1 ,0)  q 0  F ,
deci 10110010  T(M) .
În mod echivalent, într-un calcul de configuraţii se scrie:

- 10 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

(q0,10110010) ├ (q 2,0110010) ├ (q 3,110010) ├ (q 1,10010) ├ (q3,0010) ├ (q 2,010)


├ (q 3,10) ├ (q 1,0) ├ (q 0,λ) unde q 0 F,
deci s-a obţinut din nou că 10110010  T(M) .
Se poate demonstra că automatul finit M de mai sus acceptă şirurile cu număr par de 0 şi număr
par de 1.▲
Definiţia 2.1.4 Un automat finit nedeterminist, notat M=(Q, Σ, δ’,q 0, F), este format din Q, Σ, q 0, F –
prezentate în definiţia 2.1.1, dar funcţia de tranziţie este aici
δ' : Q  Σ  P ( Q) .
Deci δ' (q, a) este o mulţime de stări şi nu o singură stare.

Şi aici δ’ se poate extinde la Q  Σ astfel:
 δ' (q, λ)  {q}
 δ' (q, xa)  δ' (p, a) ,  x  Σ  , a   .
 p  δ' (q, x)


Acum δ’ se poate extinde la P (Q)   astfel:
k
δ' ({p 1 , p 2 ,..., p k }, x)  δ' (p i , x)
i 1

Definiţia 2.1.5 Un cuvânt x este acceptat sau recunoscut de un automat finit nedeterminist M dacă
δ(q 0 , x) F   , adică dacă M pornind din starea q0 şi analizând cuvântul x poate ajunge într-o stare
finală.
Limbajul acceptat de un automat finit nedeterminist este format din mulţimea cuvintelor
acceptate T(M) pentru care există o secvenţă care conduce la acceptare:
T(M) = {w  | ’(q,w) ∩ F  }
Exemplul 2.1.2 Fie automatul finit descris în figura 2.1.3 cu ajutorul diagramei de tranziţie; în acest
caz T(M) este mulţimea cuvintelor care au sau doi de zero consecutivi sau doi de unu consecutivi.

0,1 0,1

Start q0 0 q3 0 q4

q1

0,1 q2

Figura 2.1.3
Să urmărim funcţionarea acestui automat pentru câteva situaţii diferite:
a) Dacă şirul de intrare este 0101, automatul va face toate încercările de tranziţii posibile, înainte de a
trage concluzia că acest cuvânt nu e recunoscut (nu duce automatul într-o stare finală):
(q0,0101)├ (q0,101)├ (q0,01)├ (q0,1)├ (q0,λ) , q 0  F
(q0,0101)├ (q0,101)├ (q0,01)├ (q0,1)├ (q1,λ) , q 1  F
(q0,0101)├ (q0,101)├ (q0,01)├ (q3,1)├ blocare (  (q 3 ,1)   )

- 11 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

(q0,0101)├ (q0,101)├ (q1,01)├ blocare (  (q 1 ,1)   )


(q0,0101)├ (q3,101)├ blocare (  (q 3 ,1)   )
b) Dacă şirul de intrare este 0110, automatul va accepta acest cuvînt în momentul depistării unui calcul
de configuraţii ce duce automatul într-o stare finală (indiferent câte încercări nereuşite face, automatul
acceptă şirul de intrare la înregistrarea unui succes):
(q0,0110)├ (q0,110)├ (q0,10)├ (q0,0)├ (q0,λ) , q 0  F
(q0,0110)├ (q0,110)├ (q0,10)├ (q0,0)├ (q3,λ) , q 3  F
(q0,0110)├ (q0,110)├ (q0,10)├ (q1,0)├ blocare (  (q 1 ,1)   )
(q0,0110)├ (q0,110)├ (q1,10)├ (q2,0)├ (q2,λ) , q 2  F  succes !
(q0,0110)├ (q3,110)├ blocare (  (q 3 ,1)   )
c) Configuraţiile instantanee ce determină acceptarea în cazul cuvântului de intrare 010011 sunt:
(q0,010011)├ (q0,10011)├ (q0,0011)├ (q3,011)├ (q4,11)├ (q4,1)├ (q4,λ)
şi
(q0,010011)├ (q0,10011)├ (q0,0011)├ (q0,011)├ (q0,11)├ (q1,1)├ (q2,λ)
Ambele arată faptul că şirul de intrare poate fi citit de pe bandă ajungând într-o stare finală (q 2 sau q4),
fiind deci recunoscut. Este suficientă găsirea uneia dintre ele, când se stabileşte acceptarea cuvântului de
către automat.
Pentru aceeaşi intrare propusă anterior, pot fi “încercate” şi alte posibile transformări de configuraţii, dar
care nu termină citirea într-o stare finală sau nici măcar nu permit finalizarea citirii benzii (ajung la
blocare, când simbolul de pe bandă şi starea automatului finit nu sunt compatibile d.p.d.v. al funcţiei de
tranziţie, cum ar fi cazul citirii simbolului 0 într-un moment în care automatul se află în starea q1,
deoarece se observă că δ(q 1 ,0)   ).▲

§ 2.2 Legătura dintre gramaticile regulate şi automatele finite

Vom demonstra în cele ce urmează că limbajele de tip 3 sunt echivalente cu limbajele


recunoscute de automatele finite (numite şi mulţimi regulate).
Teorema 2.2.1 Fie L o mulţime de cuvinte acceptate de un automat finit nedeterminist. Atunci există un
automat finit determinist care acceptă L.

▼ Demonstraţie:
Fie M  (Q, Σ, δ, q 0 , F) un automat finit nedeterminist care acceptă L, adică L=T(M).
Definim M'  (Q' , Σ, δ' , q' 0 , F' ) un automat finit determinist după cum urmează:
 Q' ≈P(Q) noile stări (M’ păstrează urma stărilor în care poate fi M la un moment dat)
Q'   [q 1 , q 2 ,..., q k ] q i  Q, 0  k  card(Q)  ;
 q 0  [q 0 ] ;
 F'  Q' , F'  , conţine cel puţin o stare finală din F;
şi definim tranziţiile:
 δ([q1 , q 2 ,..., q t ], a)  [p1 , p ,..., p j ]  δ({q1 , q 2 ,..., q t }, a)  {p1 , p 2 ,..., p j }
Deci dacă δ’ este aplicat unui element Z=[q1, q2,....,q k ] din Q', rezultatul este calculat prin aplicarea lui
δ la fiecare stare a lui Q din Z=[q1,q2,. . . ,q k ]:
δ ([q 1 , q 2 ,..., q k ], a)  [ p 1 , p 2 ,..., p j ]
k
pl  δ(q i , a) , l  1, j
i 1

Se arată prin inducţie asupra lungimii şirului de intrare x că :

- 12 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

(2.2.1) δ (q 0 , x)  [q 1 , q 2 ,..., q i ]  δ(q 0 , x)  {q 1 , q 2 ,..., q i }


- pentru |x|=0, q 0  [q 0 ]  afirmaţia (2.2.1) este adevărată;
- presupunem că (2.2.1) este adevărată pentru |x|  t ; să studiem atunci intrarea “xa”, unde a  Σ şi deci
|xa|  t+1 : δ(q 0 , xa)  δ(δ(q 0 , x), a)
Conform ipotezei inducţiei, δ ( q 0 , x)  [p 1 , p 2 ,..., p j ]  δ(q 0 , x)  {p 1 , p 2 ,..., p j }
Prin definiţie, δ ([p 1 , p 2 ,..., p j ], a)  [r1 , r2 ,..., rk ]  δ({p 1 , p 2 ,..., p j }, a)  { r1 , r2 ,..., rk }
Astfel, δ (q 0 , xa)  [r1 , r2 ,..., rk ]  δ(q 0 , xa)  {r1 , r2 ,..., rk }
Pentru a completa demonstraţia mai avem de adăugat că δ (q 0 , x)  F  exact când δ(q 0 , x) conţine o
stare a lui Q care este în F.
Aşadar T(M)=T(M’). ▲
Exemplul 2.2.1 Considerăm automatul finit M  ({q 0 , q 1 }, {0,1}, δ, q 0 , {q 1 }) ,
 δ(q 0 ,0)  {q 0 , q 1 }
 δ(q ,1)  {q }
 0 1

 δ(q 1 ,0)  
 δ(q 1 ,1)  {q 0 , q 1 }
Să se construiască automatul finit determinist M’, echivalent cu M.

Să reprezentăm automatul M sub formă de diagramă de tranziţie :

0 1 1
Start q0 q1

0,1
Construim M’ conform Teoremei 2.2.1 : Figura 2.2.1
M   ( {[q 0 ], [q 1 ], [q 0 , q 1 ]} , {0,1} , δ  , [q 0 ] , {[q 1 ], [q 0 , q 1 ]} )
 δ  ([q 0 ],0)  [q 0 , q 1 ]
 δ  ([q ],1)  [q ]
 0 1

 δ  ([q 1 ],0)  Φ

 δ  ([q 1 ],1)  [q 0 , q 1 ]
 δ  ([q 0 , q 1 ],0)  [q 0 , q 1 ]

 δ  ([q 0 , q 1 ],1)  [q 0 , q 1 ]
Deci automatul M’ va avea diagrama tranziţiilor ca în figura 2.2.2: ▲

Start 1
[q0] [q1]

0 1
[q0,q1] Figura 2.2.2
0,1

- 13 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

Teorema 2.2.2 Fie G=(VN, VT, S, P) o gramatică de tip 3. Atunci există un automat finit nedeterminist
M  (Q, Σ, δ, q 0 , F) cu T(M)=L(G).
▼ Demonstraţie:
Construim Q  V N {T}, T  V N ; q 0  S ;
Dacă S  λ  P , atunci F  {S, T} şi S nu apare la dreapta nici unei reguli; dacă
S  λ  P , atunci F  {T} ;
δ(T, a)   ,  a  V T ;
B  a  P 
Dacă   atunci T  δ(B, a) ;
a  VT , B  V N 
Dacă  B  aC  P 
 atunci C  δ(B, a) ;
 a  V T , B, C  V N 
Dacă există B  V N care nu apare în membrul stâng al nici unei reguli din P, atunci
δ(B, a)   ,  a  V T .
Atunci M simulează derivaţiile în G. Să arătăm că, într-adevăr, T(M)=L(G):
a) Fie x  a 1 a 2 ...a n  L(G) , n  1 . Atunci:
S  a 1 A 1  ...  a 1 a 2 ...a n 1 A n  1  a 1 a 2 ...a n 1 an
pentru anumite variabile Ai din VN. Din construcţia automatului M avem:
 A 1  δ(S, a 1 )
A 2  δ(A 1 , a 2 )

A  δ(A n -1 ,a n )
Aşadar:
(S, a 1a2…an)├ (A 1, a2…an)├ …├ (A n-1, an) ├ (A,λ)
Adică cuvântul x  a 1 a 2 ...a n  T(M) .
Pentru că x a fost din L(G)  L(G)  T(M)
b) Fie x  T(M) , | x |  1  există stările S,A1,…,An-1,T astfel încât:
 A 1  δ(S, a 1 ) S  a 1A 1  P
 A  δ(A , a ) A  a A  P
 2 1 2  1 2 2
  
...
  ...
 T  δ(A n  1 , a n )  A n  1  a  P
deci are loc derivaţia:
S  a 1 A 1  a 1 a 2 A 2  ...  a 1 a 2 ...a n 1
A n 1
 a 1 a 2 ...a n 1
an
De aici  x  L(G)  T(M)  L(G)
Din (a) şi (b)  T(M)  L(G) . ▲

Teorema 2.2.3 Fiind dat un automat finit determinist M, există o gramatică G de tip 3 astfel încât
L(G)=T(M).
▼ Demonstraţie:
Presupunem M  (Q, Σ, δ, q 0 , F) - automat finit determinist.
Definim o gramatică de tip 3, G  (Q, Σ, q 0 , P) astfel încât:
(i) q → ap  (q,a) = p
(ii) q → a  (q,a) = p  F

- 14 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

Demonstraţia este similară cu cea din Teorema 2.2.2. În plus dacă λ  T(M) atunci  q 0  F .▲

Teorema 2.2.4 Clasa limbajelor de tip 3 este echivalentă cu clasa limbajelor acceptate de automatele
finite.
Demonstraţia este evidentă din Teoremele 2.2.1, 2.2.2 şi 2.2.3 .

Observaţia 2.2.1 După unii autori clasa limbajelor acceptate de automatele finite se numeşte clasa
limbajelor regulate. Datorită teoremei anterioare (2.2.4), clasa limbajelor de tip 3 se numeşte şi clasa
mulţimilor regulate.
Exemplul 2.2.2 Fie G=({S,B}, {0,1}, S, P) unde
 S  0B
 B  0B
P: 

 B  1S
 B  0
a) Să se construiască automatul finit, M, care să recunoască L(G);
b) Pornind de la M să se construiască automatul finit determinist, M1, echivalent cu M:
c) Să se construiască gramatica G’ care să genereze T(M1).
▼Construcţie:
a) Conform Teoremei 2.2.2, construim automatul finit care să recunoască limbalul L(G), M
=({S,B,A}, {0,1}, δ, S, {A}), unde:
δ(S,0)  {B} δ(B,0)  {A, B} δ(A,0)  
δ(S,1)   δ(B,1)  {S} δ(A,1)  
Să reprezentăm în figura următore diagrama tranziţiilor din automatul M =({S,B,A}, {0,1}, δ, S, {A}):

0
Start
S
B 0
1
0

A
Figura 2.2.3
Este uşor de verificat că T(M)=L(G) este limbajul cuvintelor peste alfabetul {0,1} care încep şi se
termină cu o succesiune de cel puţin doi 0 şi orice apariţie a simbolului 1 este urmtă de succesiuni de 0.
b) Pornind de la M, să construim conform Teoremei 2.2.1, un automat finit determinist, M1,
echivalent cu M: M 1  ( Q, {0,1}, δ  , [S], {[A]} )
Q  {[S], [B], [A], [A, B]} (în Q nu sunt necesare şi stările [S, A], [S, B], [S, A, B] )
δ  ([S],0)  [B]
δ  ([S],1)  Φ
δ  ([B],0)  [B, A]
δ  ([B],1)  [S]
δ  ([A],0)  δ  ([A],1)  Φ
δ  ([A, B],0)  [B, A]
δ  ([A, B],1)  [S]
Pornind de la M 1, construim G’ conform cu Teorema 2.2.3: G’=({S],[B],[A],[A,B]},{0,1},[S], P)
- 15 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

 [S]  0[B]

P :  [B]  0[A, B] , [B]  1[S] , [B]  0
 [A, B]  0[A, B] , [A, B]  1[S] , [A, B]  0

Observaţia 2.2.2 Gramatica G’ este mult mai complicată decât gramatica G iniţială, deşi ele sunt
echivalente şi evident că dacă pornim de la ea se poate construi un automat finit şi mai complicat,
echivalent cu automatele de mai sus.
Se pune atunci problema dacă pornind de la un automat finit nu putem micşora numărul de stări
sau dacă atunci când se implementează un automat finit nedeterminist se poate obţine o reprezentare în
memorie optimală. Această ultimă problemă este de mare importanţa in construcţia compilatoarelor şi
este abordată în [12], [14]. În continuare nu vom ocupa de prima dintre aceste probleme, şi anume de
micşorarea numărului de stări ale unui automat fin it determinist.

§ 2.3 Minimizarea automatului finit

Definiţia 2.3.1 O relaţie binară R pe mulţimea S se numeşte relaţie de echivalenţă dacă ea este:
1) Reflexivă (xRx,  x  S)
2) Simetrică (xRy  yRx)
3) Tranzitivă (xRy, yRz  xRz)
O relaţie de echivalenţă peste S împarte mulţimea S în clase de echivalenţă, submulţimi disjuncte Si
 x, y  S i  xRy
astfel încât  .
S  Si
 i

Observaţia 2.3.3 Se poate construi un cel mai mic automat care acceptă un limbaj T(M), prin
eliminarea stărilor inaccesibile şi comasarea celor redundante. Stările redundante sunt determinate prin
partiţionarea stărilor automatului în clase de echivalenţă astfel încât fiecare clasă conţine stări care nu se
pot distinge între ele şi este atât de mare cât este posibil.
Definiţia 2.3.4 Fie M  (Q, Σ, δ, q 0 , F) un automat finit determinist şi q1,q2 două stări distincte.

Spunem că x  Σ distinge q1 de q 2 dacă:
(q 1 , x) ├* (q 3 , λ)
(q 2 , x) ├* (q 4 , λ)
şi una şi numai una dintre stările q 3 şi q4 este stare finală adică:
q3 F  q 4 F
şi q4 F  q 3 F.
k
Definiţia 2.3.5 Spunem că q1 şi q2 sunt k-nedistinctibile ( q 1  q 2 ) dacă şi numai dacă nu există x,
cux k, astfel încât x distinge q1 de q2.
Definiţia 2.3.6 Spunem că q1 si q2 sunt nedistinctibile (q1q2) dacă sunt k-nedistinctibile pentru k0.
Definiţia 2.3.7 O stare q este inaccesibilă dacă nu există x astfel încât (q 0 , x) ├ (q, λ) .
Definiţia 2.3.8 M este un automat redus dacă nici o stare nu este inaccesibilă şi nu există două stări
nedistinctibile.

Teorema 2.3.3 Fie M  (Q, Σ, δ, q 0 , F) un automat finit determinist cu n stări. Stările q1 şi q2 sunt
nedistinctibile dacă şi numai dacă sunt (n-2)-nedistinctibile.
▼ Demonstraţie:
Implicaţia directă ("" ) este evidentă; să demonstrăm implicaţia inversă ("" ) :

- 16 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

a) Dacă F are 0 sau n stări demonstraţia este imediată.


b) Presupunem că 0  card(F)  n.
n 2 n 3 1 0
Vom demonstra că      ...    .
Observăm că pentru q1,q2Q avem:
0

(1) q 1 q   δ(q1 , λ), δ(q 2 , λ)  F sau Q \ F  q 1 , q 2  F sau, respectiv, F 

 k
 k -1 k -1

(2) q 1  q   q 1  q 2  a  , δ(q1 , a)  δ(q 2 , a) 
  
0
Relaţia  partiţionează Q în două clase de echivalenţă: F şi K\F.
 k 1  k   k 1  k 
Dacă    atunci  este o rafinare a lui  şi conţine cel puţin o clasă de echivalenţă în plus.
0
Pentru că sunt cel mult n-1 stări în F sau Q\F ,   cel mult n-2 rafinări a lui  . Aşadar,  este prima
k   k 1  k 
relaţie  pentru care    .▲
Observaţia 2.3.4 Două stări sunt distinctibile dacă ele se pot distinge pe un şir de intrare de lungime
mai mică decât numărul stărilor.

§ 2.4 Algoritmi pentru minimizarea automatului finit

(A) Algoritm de minimizare[1]


Fie M=(Q,,,q0,F). Se construieşte M’ redus parcurgând următorii trei paşi:

A.1 Se elimină întâi nodurile inaccesibile (conform algoritmului (B))


0 1 k   k 1 
A.2 Se construiesc relaţiile de echivalenţă , ,... până când relaţia se stabilizează adică   .
k 
Alegem    .
A.3 Se construieşte M’=(Q’, , ’, q0, F’) unde Q’ e mulţimea claselor de echivalenţă ale lui Q,
astfel:
’([q],a)=[p] dacă (q,a)=p
q 0’=[q0]
F’=  [q]  qF 

(B) Algoritm de eliminare a stărilor inaccesibile. Pentru eliminarea stărilor inaccesibile se poate
folosi orice algoritm din teoria grafurilor de eliminare a nodurilor inaccesibiel din nodul reprezentând
starea iniţială, unde avem:
Intrare - Graful (Q,) cu (q,p)=a  (q,a)=p
- q 0 Q
Ieşire Mulţimea de noduri Q’Q astfel încât există un drum de la q0 la pQ’.
Algoritmul marchează succesiv nodurile accesibile din q0 printr-un drum. Astfel, găseşte nodurile
accesibile şi le elimină pe celelalte. Prezentăm în continuare două variante ale aces tui algoritm:
Varianta I
BI.1 Iniţializează Q’={q0} şi marchează q0 cu 0.

BI.2 Pentru qQ’ caută pQ astfel încât există un arc (q,p); marchează p cu 1+ marca lui q
(dacă p nu e marcat) şi adaugă pe q la Q’; reia pasul BI2.
Dacă qQ’ şi p astfel încât (q,p), p este marcat atunci stop.
Sau:

- 17 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

Varianta a II-a
BII.1 Iniţializează L=q0, marchează q0.
BII.2 Dacă L e vid stop .
Dacă nu, alege primul element q din L şi îl scoate din L.
BII.3 Pentru pQ astfel încât (q,p), dacă p nu e marcat, marchează p şi adaugă p în capul listei L.
Salt la pasul BII2.
Vom arăta în continuare că automatul obţinut prin algoritmul de minimizare este automatul cu număr
minim de stări.

Teorema 2.4.1. Automatul M’ definit de algoritmul de minimizare (A) este automatul cu cel mai mic
număr de stări acceptând L(M).
▼ Demonstraţie:
Presupunem că există un automat M’’, care are mai puţine stări decât M’ şi că L(M”)=L(M).
Pentru că fiecare clasă de echivalenţă indusă de relaţia de echivalenţă nedistinctibilitatea, , este nevidă,
rezultă că fiecare stare din M’ este accesibilă.
Pentru că M” are mai puţine stări decât M’ rezultă că w,x două cuvinte astfel încât:
( q 0 , w) ├*M” (q, λ)
( q 0 , x) ├*M” (q, λ)
unde q 0 este starea iniţială a lui M”.
Dar w şi x conduc M’ în stări diferite, deci w şi x conduc M în stări diferite, şi atunci:
(q 0 , w) ├*M (p, λ)
(q 0 , x) ├*M (r, λ)
stări care sunt distinctibile, adică y* astfel încât (p,y)F şi (r,y)  F
 (q0,wy)F şi (q0,xy)F
 wyT(M) iar xyT(M), pe când ”(q0,wy)=”(q0,xy)
deci wy şi xy sunt deodată în T(M”)=T(M)  contradicţie.

Exemplul 2.4.1 Să se construiască automatul finit redus pentru automatul finit M din Figura 2.4.1 .

a
Start q0 q5
a
a b
b
q3 b b q2
a
a
b b
q1 q4 Figura 2.4.1
a

Aplicăm algoritmul (A).
Pasul A.1 Toate nodurile sunt accesibile.
Pasul A.2 Construim relaţiile de echivalenţă.
Iniţializare ( 0-nedistinctibilitate ):
0
k0  {q 0 , q 5 },{q 1 , q 2 , q 3 , q 4 }
Analizăm 1-nedistinctibilitatea:

- 18 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

δ(q 0 , a)  q 5  0 
  (chiar egale) 
δ(q 5 , a)  q 5   1

  q 0
 q 5 (rămân în aceeaşi clasă)
δ(q 0 , b)  q 1  0

 
δ(q 5 , b)  q 4  
δ(q 1 , a)  q 4  0 
 
δ(q 2 , a)  q 2   1 (se vor separa în clase diferite)
  q1  q 2
δ(q 1 , b)  q 3  0 

δ(q 2 , b)  q 5  
δ(q 1 , a)  q 4  0 
 
δ(q 3 , a)  q 3   1 (se vor separa în clase diferite)
  q1  q 3
δ(q 1 , b)  q 3  0 

δ(q 3 , b)  q 0  
Ştiind deja că q1 se separă de q2 şi de q3, trebuie văzut dacă q2 şi q3 rămân totuşi împreună:

δ(q 2 , a)  q 2  0 
 
δ(q 3 , a)  q 3   1

  q 2
 q 3 (rămân în aceeaşi clasă de echivalenţă)
δ(q 2 , b)  q 5  0 
 
δ(q 3 , b)  q 0  
Ultima stare neanalizată este q4; din cele văzute deja, aceasta ar putea aparţine fie clasei care conţine pe
q1, sau celei care conţine pe q2 şi q3, sau unei clase noi. În următorul calcul se vede că prima este
varianta valabilă:
δ(q 1 , a)  q 4  0 
 
δ(q 4 , a)  q 1   1

  q1  q 4
δ(q 1 , b)  q 3  0 

δ(q 4 , b)  q 2  
Aşadar, s-a obţinut:
1
k 1  {q 0 , q 5 },{q 1 , q 4 },{q 2 , q 3 }
Să analizăm 2-nedistinctibilitatea:
δ(q 0 , a)  q 5  1 
 
δ(q 5 , a)  q 5   2

  q 0  q5
δ(q 0 , b)  q 1  1 
 
δ(q 5 , b)  q 4  
δ(q 1 , a)  q 4  1 
 
δ(q 4 , a)  q 1   2

  q1  q 4
δ(q 1 , b)  q 3  1 
 
δ(q 4 , b)  q 2  

- 19 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

δ(q 2 , a)  q 2  1 
 
δ(q 3 , a)  q 3   2

  q 2
 q3
δ(q 2 , b)  q 5  1 
 
δ(q 3 , b)  q 0  
Se observă că nici una dintre clasele 1-nedistinctibile nu s-a împărţit în subclase. Deci relaţia s-a
stabilizat şi s-a obţinut:
2
k2  {q 0 , q 5 },{q 1 , q 4 },{q 2 , q 3 }
1 2
Deoarece    , relaţia de echivalenţă este determinată.
Pasul A.3 Automatul redus are 3 stări (corespunzând celor trei clase de echivalenţă) reprezentate de
{q 0 , q 1 , q 2 } şi este descris în Figura 2.4.2 .

q1
b a

Start q0 b
b
a q2

Figura 2.4.2
a

Observăm că modul în care se construiesc relaţiile de k-echivalenţă este destul de complicat. Prezentăm
acum o altă variantă [7] de algoritm de de minimizare.

(C) Algoritm de minimizare[7]


Fie M=(Q,,,q0,F). Algoritmul va marca perechile de strări (p,q.). O pereche (p,q) va fi marcată în
momentul în care se descoperă că p şi q nu sunt echivalente. Se construieşte M’ redus parcurgând
următorii cinci paşi:

C.1 Se elimină întâi nodurile inaccesibile (conform algoritmului (B))


C.2 Se scrie tabelul tuturor perechilor (p,q), iniţial nemarcate.
C.3 Se marcheză (p,q) dacă p  F şi q  F sau invers.
C.4 Se repetă următoarele până când nu se mai schimbă nimic în table:
Dacă există o pereche nemarcată (p,q) astfel încât ((p,a), (q,a)) este marcată pentru un a  ,
atunci marchează perechea (p,q).
C.5 Perechile nemarcate (p,q) sunt perechile echivalente.

Exemplul 2.4.1 Să minimizăm automatul definit de următorul tabel al funcţiei de tranzitie, unde stările
finale sunt 1, 2, şi 5:

a b
0 1 2
1 3 4

- 20 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

2 4 3
3 5 5
4 5 5
5 5 5
C1. Toate nodurile sunt accesibile deci trecem la :
C2. Tabelul iniţial este cu toate perechile nemarcate.
0
_
1
_ _
2
_ _ _
3
_ _ _ _
4
_ _ _ _ _
5

C3. Marcheză perechile: (stare finală, stare nefinală).


0
X 1
X _ 2
_
X X 3
_
X X _ 4
X _ _ X X 5

C4. (i) Alegem acum o pereche nemarcată, (0,3). Pentru intrarea a, 0 şi 3 trimit automatul în 1 şi 5,
notat (0,3) → (1,5). Deoarece perechea (1,5) nu este marcată, nu vom marca nici (0,3). Cu intrarea b,
avem (0,3) → (2,5), care tot nemarcată estedeci nu vom marca perechea (0,3) nici acum. Continuam să
verificăm perechile şi observăm că pentru perechea (1,5) simbolul a realizează
(1,5) → (3,5), unde perechea (3,5) este marcată., deci marcăm perechea (1,5).

Verificând toate perechile nemarcate se obţine tabelul următor:


0
X 1
X _ 2
_
X X 3
_
X X _ 4
X X X X X 5

(ii) Acum mai facem o trecere prin tabel fiindcă s -a modificat linia stării 5. Vom obţine:
0
X 1
X _ 2
X X X 3
X X X _ 4
X X X X X 5
Tabel care nu se mai modifică.
C5. Stările echivalente sunt date de perechile nemarcate: (1,2) şi (3,4), deci automatul redus va fi:
a b
0 1 1
1 3 3
3 5 5
5 5 5

- 21 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

§ 2.5 Lema de pompare pentru mulţimi regulate

Această lemă dă o caracterizare a mulţimii regulate şi anume fiind dată o mulţime şi un cuvânt
suficient de lung, se poate găsi un subcuvânt nevid al acestui cuvânt care se poate repeta de oricâte ori
astfel încât cuvântul obţinut prin repetare rămâne în mulţimea regulată dată.
Teorema 2.5.1. Fie L o mulţime regulată . Atunci există o constantă p , astfel încât dacă un cuvânt w L
şi |w|p atunci w poate fi scris w=xyz, unde:
- 0  |y| p
- xyizL, i0.
▼ Demonstraţie:
Fie M=(Q,,,q0,F) un automat finit cu n stări astfel încât T(M)=L. Fie p=n.
Dacă w T(M) şi w n, atunci considerăm configuraţiile succesive ale lui M, în acceptarea lui w;
  cel puţin n+1 configuraţii, deci trebuie să fie cel puţin două stări identice p = qi = qj astfel încât:
(q 0 , w) ├* (qi , w) ├* (qj , z)├* (r, λ)
De aici rezultă că w=xw’ şi w’=yz şi deci w=xyz.
Fie j cel mai mic indice pentru care qi = qj de unde şi 0  |y| n.
Dar atunci :
(q 0 , xy i z) ├* (p, y i z) ├* (p, y i-1z) ├* …├* (p, z) ├* (r, λ)
Deci xyizT(M), i0.
Pentru i = 0 :
(q 0 , xz) ├* (p, z) ├* (r, λ) . ▲
Pentru ca lema de pompare dă o caracterizare a mulţimilor regulate ea poate fi folosită şi pentru a
demonstra că limbajele care nu respectă lema de pompare nu sunt regulate.
Exemplul 2.5.1 Folosind teorema de pompare (2.5.1), să se arate că mulţimea  aibi  i1  nu este o
mulţime regulată.

Presupunem că p astfel încât pentru w L : |w| p, w=xyz, |y|) p şi w’=xyizL.
- dacă y=aj cu ji, atunci  ai+jbiT(M) , ceeace contrazice structura limbajului deci este imposibil;
- dacă y=bj, atunci  aibj+iT(M) ceeace contrazice din nou structura limbajului deci este imposibil;
- dacă y=ajbk cu ji şi ki, atunci  aibkajbiT(M) din nou imposibil
  aibi  i1  nu e o mulţime regulată pentru că nu resp ectă lema de pompare. ▲

§ 2.6 Gramatici regulate şi expresii regulate

Să considerăm următorul exemplu în care folosim operaţiile cu limbaje definite în § 1.3:


Exemplul 2.6.1 Fie următoarele două alfabete:
L={A,B,…,Z,a,b,…,z}, alfabetul literelor mari şi mici
C={0,1,…,9}, alfabetul cifrelor din baza 10.
Cu aceste alfabete, pe care le putem chiar considera limbaje formate din cuvinte de lungime 1, putem
construi numeroase alte limbaje, cum ar fi:
(a) L C = mulţimea literelor şi a cifrelor;
(b) LC = mulţimea cuvintelor de lungime 2, formate din o literă urmată de o cifră;
(c) L4 = mulţimea cuvintelor formate din exact patru litere;
(d) L* = mulţimea cuvintelor formate din oricâte litere (inclusiv cuvântul vid);
(e) L( L C )* = mulţimea cuvintelor de lungime cel puţin 1, formate din litere şi cifre, primul
caracter fiind obligatoriu o literă;
(f) C+ = mulţimea şirurilor numerice formate din cel puţin o cifră.

- 22 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

Modul de reprezentare al limbajelor de mai sus sugerează un alt mod de descriere al limbajelor
de tip 3 şi anume cu ajutorul expresiilor regulate.
Definiţia 2.7.1 Se numeşte expresie regulată o expresie care poate fi construită cu următoarele reguli:
1.  este o expresie regulată indicând mulţimea vidă.
2. λ este o expresie regulată indicând limbajul format doar din cuvântul vid, { λ}.
3. Dacă a  VT , atunci a este o expresie regulată indicând limbajul format dintr-un cuvânt
de lungime 1, construit cu simbolul a şi anume limbajul {a}.
4. Dacă e1 şi e2 sunt expresii regulate indicând limbajele L1 şi L2, atunci următoarele
expresii sunt regulate:
a) Alternarea (e1)|(e2), indicând L1 L 2 ;
b) Concatenarea (e1)(e2), indicând L1  L 2 ;

c) Închiderea Kleene (e1*), indicând L1 .
Observaţia 2.6.1 Parantezele ( ) pot fi eliminate în următoarele cazuri:
({ }) = { }
(|) = |
(( )) = ( )
Observaţia 2.6.2
a) Operaţiile de alternare, |, concatenare, ., şi închidere, *, au precedenţa descrescând de la cea mai
mare ,  , la cea mai mică , | .
b) Toate operaţiile sunt asociative iar alternarea este şi comutativă.
Există un număr de reguli algebrice pentru expresii regulate care pot fi folosite pentru a le transforma
în alte expresii echivalente, conform tabelului următor.
Tabelul 2.6.1
Regulă Descriere
r|s=s|r Alternarea este comutativă
r|(s|t)=(r|s)|t Alternarea este asociativă
(rs)t=r(st) Concatenarea este asociativă
r(s|t)=(rs)|(rt) Concatenarea este distributivă la stânga
(s|t)r=(sr)|(tr) şi la dreapta faţă de alternare
λr=r Cuvântul vid este element neutru pentru concatenare
rλ=r
r*=(r|λ)*
r**=r* Idempotenţa închiderii (produs Kleene)
Operatorii folosiţi pentru scrierea expresiilor regulate sunt analogi cu forma BNF de descriere a
limbajelor (sunt simboluri ale metalimbajului).
Exemplul 2.6.2 Exemple de expresii regulate:
a) Expresia 110 reprezintă limbajul format dintr-un singur cuvânt {110}.
b) Expresia 0|1 reprezintă limbajul {0,1}.
c) Expresia 1* reprezintă limbajul {1i | i=0,1,2,…}.
d)  m n
a*b* reprezintă limbajul a b m, n  0 ; 
(ab)* reprezintă limbajul (ab) 
m
e) m0 ;
f) (aa|ab|ba|bb)* reprezintă mulţimea şirurilor peste {a,b} de lungime pară.
Vom defini în continuare egalitatea a două expresii regulate.
Definiţia 2.6.3 Două expresii regulate sunt egale (=) sau echivalente dacă ele reprezintă acelaşi limbaj.
Exemplul 2.6.4 00* = 000*|0 (ele reprezintă acelaşi limbaj, al şirurilor peste alfabetul {0} formate din
cel puţin un simbol 0).

- 23 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

Exemplul 2.6.5 Elementele unui limbaj de programare pot fi definite atât în termenii gramaticilor
regulate cât şi în cei ai expresiilor regulate. Spre exemplu, un identificator format din litere mici şi cifre,
începând cu o literă, poate fi descris de gramatica regulată ale cărei reguli sunt:
 S  aA | bA | cA | ... | zA | a | b | c | ... | z
 A  aA | bA | cA | ... | zA | 0A | 1A | ... | 9A | a | b | c | ... | z | 0 | 1 | ... | 9

şi de expresia regulată:
(a|b|c| . . . |z) (a|b|c| . . . |z|0|1| . . . |9)*
Putem folosi <literă> pentru a scurta reprezentarea lui a | b | c | ... | z şi <cifră> pentru 0 | 1 | ... | 9 ,
expresia putând fi scrisă în acest caz astfel:
<literă>(<literă>|<cifră>* .

§ 2.7 Algoritm de transformare a unei gramatici regulate într-o expresie regulată

Expresiile regulate pot fi utilizate în ecuaţii şi deci pot fi evaluate. De exemplu, A=aA|a este o
ecuaţie cu o expresie regulată validă.
Pentru a prezenta o metodă de a converti o gramatică regulată într-o expresie regulată,
 m n
considerăm gramatica regulată care generează limbajul a ba n, m  1 : 
 S  aS
 S  aB

 B  bC
 C  aC
 C  a
Înlocuind operatorul de rescriere "" cu unul de echivalenţă (“=”) şi combinând toate regulile
care au acelaşi membru stâng într-o singură expresie prin folosirea operatorului de alternare, gramatica
poate fi scrisă ca o mulţime de ecuaţii:
S  aS | aB
 B  bC
 C  aC | a
Prin rezolvarea acestui sistem de ecuaţii, se obţine o expresie regulată cu un singur simbol
terminal, care reprezintă acelaşi limbaj ca şi cel generat de gramatica regulată.
Să rezolvăm mai întâi ecuaţiile definite doar prin ele însele. În acest sistem, ecuaţia pentru C are
soluţia: C= a*a. Verificăm prin înlocuirea acestei soluţii în ecuaţia pentru C. Se obţine
a*a = a a*a | a,
sau altfel scris
a*a = (a a* | λ) a,
dar a a* | λ = a* şi deci se verifică a*a = a*a.
Soluţia pentru C poate fi înlocuită în a doua ecuaţie, obţinând sistemul:
S  a(S | B)

B  ba * a
Apoi B poate fi înlocuit în prima ecuaţie
 S  a(S | ba * a)
sau expresia echivalentă:
S = aS | aba*a
şi se vede imediat că o soluţie a acestei ecuaţii este:
S= a*aba*a
care este o expresie regulată reprezentând acelaşi limbaj ca şi limbajul generat de gramatica iniţială.
Prezentăm în continuare algoritmul de trecere de la o gramatică regulată la o expresie regulată.
Algoritm de transformare [EXPRESII REGULATE]

- 24 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

Intrare O gramatică regulată G, având regulile X i  ψ, ψ  {aX j , a} , cu X 1, simbol iniţial.


Ieşire Expresia regulată echivalentă cu G.

Pas 1. Transformarea în ecuaţii regulate:


- Pentru fiecare regulă X i  ψ a lui G, Execută:
- Dacă ecuaţia X i nu a fost iniţializată
Atunci defineşte X i  ψ
Altfel schimbă X i  α prin X i  α | ψ , unde α este partea definită anterior a lui X i)
Pas 2. Aducerea în formă intermediară a sistemului de ecuaţii:
- Pentru fiecare i=1,2,…,n-1, Execută:
- Transformă ecuaţia X i în forma X i  α i X i | ψ i , unde ψ i este de forma
β 0,i | β i 1,i X i 1 | ... | β n,i X n iar αi şi fiecare βj,i sunt expresii regulate peste V T.
- Pentru fiecare j=i+1,i+2,…,n, Execută:
- Înlocuieşte Xi cu i *ψi în ecuaţia pentru X j.
Pas 3. Rezolvarea ecuaţiilor:
- Pentru fiecare i=n,n-1,…,2,1, Execută:
- Transformă ecuaţia X i din forma X i  α i X i | ψi , unde ψi este o expresie regulată peste
 
VT, în Xi  i * ψi .
- Pentru fiecare j=i-1,i-2,…,2,1, Execută:
- Înlocuieşte soluţia i * ψi a lui Xi în ecuaţia pentru X j.
Pas 4. Stabilirea soluţiei:
- Soluţia este 1 * ψ1
Observaţia 2.7.1
a) Primul pas al algoritmului transformă gramatica regulată într-o mulţime de ecuaţii de forma:
X i  δ 1 | δ 2 | ... | δ m | ψ j X j | ψ k X k | ... | ψ l X l ,
unde fiecare δ i , ψ i  VT .
b) Pasul al doilea al algoritmului transformă fiecare ecuaţie în forma:
X i  α i X i | β 0, i | β i  1, i X i  1 | ... | β n, i X n ,
lucru posibil efectuând o serie de transformări alge brice.
c) În pasul al treilea se face substituţia înapoi pentru a rezolva mulţimea de ecuaţii. Soluţia pentru X n
este uşor de găsit pentru că această ecuaţie este de forma X n  α n X n | β 0, n şi deci soluţia este
X n  α n * β 0,n . Această soluţie se poate înlocui apoi în fiecare din ecuaţiile precedente din sistem, acolo
unde apare Xn. În general, îndată ce ecuaţia pentru X i a fost rezolvată şi înlocuită în ecuaţiile precedente
rezultă că este rezolvată şi ecuaţia pentru X i-1, care are numai variabilele Xi şi Xi-1 în membrul drept, iar
Xi a fost înlocuit.

Exemplul 2.8.1 Folosind algoritmul [EXPRESII REGULATE], să transformăm în expresie regulată


gramatica: G  S, A, B, a, b, c, S, P  , unde P este formată din regulile:

- 25 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

 S  aA
S  a
 A  aA

 A  bB
A  a
 B  bB
 B  c

S  aA | a
Pas 1.  A  aA | bB | a
 B  bB | c
Pas 2. Nu este necesar
Pas 3. i  3  B  b * c
A  aA | bb * c | a
i2 
A  {a}bb * c | {a}a
S  a(a * bb * c | a * a) | a
i1 
S  aa * bb * c | aa * a | a
Pas 4. Soluţie: S= aa*bb*c | aa*. Limbajul reprezentat de această expresie regulată este
  
a n b m c | n, m  1 
a n | n  1 .▲

Exemplul 2.8.2 Folosind algoritmul [EXPRESII REGULATE], să transformăm în expresie regulată


gramatica G  S, A, B, C, a, b, c, S, P  , unde P este formată din regulile:
S  aA
 A  aA
 A  aB
 B  bC

C  cB
C  c

 S  aA
Pas 1.  A  aA | aB
 B  bC

 C  cB | c
Singura ecuaţie care nu este în formă intermediară este ecuaţia pentru variabila C şi anume C =
cB|c. Este necesar atunci pasul 2 pentru transfomarea în formă intermediară:
S  aA
Pas 2.  A  aA | aB
 B  bC

 C  cbC | c
C  cbC | c
Pas 3. i  4 
C  cb  * c
i3  B  b cb  * c
A  {a}aB
i2 
A  a * ab(cb) * c

- 26 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

S  aA
i 1 
S  aa * ab(cb) * c
Pas 4. Soluţie: S = aaa*b(cb)*c sau, echivalent, S = aaa*bc(bc)*. Limbajul reprezentat de această

n m
expresie regulată este a (bc) | n  2, m  1 . ▲ 
§ 2.8 Echivalenţa dintre expresiile regulate şi automatele finite nedeterministe

Expresiile regulate sunt importante pentru construirea unui generator de analizor lexical, care
foloseşte ca intrare expresii regulate.
Vom prezenta în cele ce urmează metode de generare a unui acceptor cu număr finit de stări
dintr-o expresie regulată sau generarea unei expresii regulate dintr-un automat finit nedeterminist. Vom
arăta deci că expresiile regulate şi mulţimile acceptate de automate finite nedeterministe sunt
echivalente, deci că mulţimile regulate şi expresiile regulate reprezintă aceleaşi mulţimi. Pentru
construcţiile ce vor urma, este necesară următoarea definiţie.
Definiţia 2.9.1 Un automat finit nedeterminist cu λ-tranziţii este un ansamblu M=(Q, Σ, δ, q0, F) ale
cărui componente au aceleaşi semnificaţii ca la un automat finit oarecare, doar că funcţia de tranziţie
este definită astfel:
δ : Q  Σ λ  P(Q) .
Avem o λ-tranziţie între două configuraţii (p, w) ├ (q, w) dacă şi numai dacă q  δ(p, λ) ,
p  Q, w  Σ  . În reprezentarea grafică, o astfel de tranziţie, practic fără citirea benzii de intrare la acel
pas, arată astfel:

λ
p q
Figura 2.9.1

Teorema 2.8.1. Mulţimea cuvintelor recunoscute de automatele finite cu λ-tranziţii este aceiaşi cu
mulţimea cuvintelor recunoscute de automatele finite nedeterministe.

▼Demonstratie
Se arată în [5] că automatele finite nedeterministe cu λ-tranziţii sunt echivalente cu cele fără λ-tranziţii.
Vom da aici un exemplu de utilizare a homomorfismului pentru a da o altă demonstraţie [7] a acestei
afirmaţii. Fie automatul finit cu λ-tranziţii M = (Q, Σ, δ, q0, F), unde considerăm λ un simbol care nu
este în Σ. Considerăm acum automatul finit nedeterminist M’, peste alfabetul Σ{λ}:
M’ = (Q, Σ{λ}, δ, q 0, F) ,
Definim acum acceptarea pentru automatul cu cu λ-tranziţii după cum urmează: pentru orice x
din Σ*, automatul M acceptă x dacă există y în (Σ{λ})* astfel încât:
- M’ acceptă y relativ la definiţia acceptării unui automat finit nedeterminist;
- x este obţinut din y prin ştergerea tuturor apariţiilor simbolului λ; atunci x = h(y), unde:
h: (Σ{λ})* → Σ*,
este homomorfismul definit de :
h(a) = a pentru a  
h(λ) = λ.
În acest fel L(M) = h(L(M’)). Dar mulţimea L(M’) este regulată şi conform teoremei 2.9.11 va
rezulta că şi L(M) este o muţime regulată.▲

- 27 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

Algoritmul de conversie a unei expresii regulate într-un AFN este următorul:

Algoritmul 2.8.1. Construcţia unui automat finit nedeterminist cu -tranziţii pentru o


expresie regulată.
Intrare: o expresie regulată r peste un alfabet , sub forma unui arbore sintactic.
Ieşire: un AFN, N pentru limbajul L(r)
Metodă: Construim N, parcurgând arborele sintactic de jos în sus, aplicând regulile (1) şi (2) şi
combinând automatele obţinute la fiecare nod, cu ajutorul regulei (3) unde:
1. pentru , construim automatul
start
i f

cu i noua stare iniţială şi f noua stare finală. Automatul va recunoaşte limbajul {}.
2. pentru a, construim automatul
start a
i f

cu i noua stare iniţială şi f noua stare finală. Automatul va recunoaşte limbajul {a}.
3. dacă N(s) şi N(t) sunt AFN pentru expresiile regulate s şi t atunci:
a) Pentru expresia regulată s|t construim următorul automat N(s|t)

N(s)
 
start f
i

 
N(t)

cu i noua stare iniţială a lui N(s|t) şi f noua stare finală. Avem _tranziţii de la i la fostele stări iniţiale
ale lui N(s) şi N(t) şi _tranziţii de la fostele stări finale ale lui N(s) şi N(t) la f. Astfel, automatul N(s|t)
recunoaşte L(s) U L(t).
b) Pentru expresia regulată st construim următorul automat N(st)
N(s) N(t)
start
i f

unde i, starea iniţială pentru N(s) a devenit starea iniţială pentru N(st) şi f starea finală pentru N(t) a
devenit starea finală pentru N(st). Starea finală pentru N(s) este identificată cu starea iniţială pentru N(t)
şi noua stare creată în N(st) îşi pierde statutul de stare iniţială sau finală. Astfel, automatul N(st)
recunoaşte limbajul L(s)L(t).
c) Pentru expresia regulată s* construim automatul N(s*)

start  
i N(s) f

- 28 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

cu i noua stare iniţială şi f noua stare finală pentru N(s*). Stările iniţială şi finală pentru N(s) îşi pierd
acest statut. Astfel automatul N(s*) recunoaşte limbajul L(s)*.
Exemplul 2.11. Să folosim algoritmul 2.3. pentru a construi AFN N(r) din expresia regulată
r=(a|b)*abb. Arborele sintactic al expresiei regulate date este:

..
..
b
..
b
* a a

b
a bb
Parcurgând acum arborele vom avea:
Pentru simbolul a avem: start a
2 3
Pentru simbolul b avem: start b
4 5
Pentru a|b avem:
 2 3 
start a
1 6
 b 
4 5
Pentru (a|b)* avem:

2 a
3 

start  6  7
0 1

 b
4 5 

Continând acest proces, în final vom obţine automatul următor:


a
2 3
 
 6  7 a 8 b 9 b
start 0 1 10
 
b
4 5

- 29 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

Toate automatele construite astfel sunt nedeterministe cu λ-tranziţii.

Teorema 2.8.1 Fiind dată o expresie regulată R, există un automat F cu număr finit de stări,
nedeterminist şi cu λ-tranziţii, care acceptă limbajul generat de R.
▼ Demonstraţie:
- se face prin inducţie în raport cu fiecare din cele trei operaţii ale expresiilor regulate. Construcţia
formală se deduce din diagramele de stare definite mai sus. ▲

Teorema 2.8.2. Fiind dat un automat cu număr finit de stări, determinist, care acceptă limbajul L, există
o expresie regulată care reprezintă limbajul L.
▼ Demonstraţie:
- se aplică algoritmul de transformare a automatului finit determinist într-o gramatică de tip 3, după
care se aplică acesteia algoritmul de determinare a expresiei regulate echivalente. ▲

§ 2.9 Proprietăţi ale limbajelor de tip 3

Vom studia o serie de proprietăţi ale limbajelor regulate dintre care o parte importantă o
formează proprităţile de închidere ale familiei limbajelor rwegulte la operatiile cu limbaje introduce în §
1.3. Pentru că limbajele de tip 3 pot fi generate de gramatici de tip 3, recunoscute de automatele finite
sau reprezentate de expresii regulate, în demonstraţii vom folosi oricare dintre aceste

Teorema 2.9.1 Clasa limbajelor de tip 3 este închisă în raport cu reuniunea.


▼ Demonstraţie:
Demonstraţia se poate face folosind automate finite nedeterministe sau folosind gramaticile generative
de tip 3. Alegem cea de a doua variantă (prima poate constitui un exerciţiu).
Fie L1, L 2 două limbaje de tip 3 generate de gramaticile G1, G 2:
 G 1  (V N(1) , VT(1) , S 1 , P1 )  L(G 1 )  L 1 \  λ 
 , unde 
 G 2  (V N(2) , VT(2) , S 2 , P2 )  L(G 2 )  L 2 \  λ 
(1) (2)
Presupunem că VN VN   (în caz contrar, se poate face o redenumire a variabilelor astfel încât
condiţia să fie îndeplinită fiindcă variabilele nu apar în cuvintele limbajului) şi construim:
G 3  (VN(1) VN(2)  S3 , VT(1) VT(2) , S3 , P3 ) ,
 S 3  V N(1) V N(2)
unde 
 P 3  P1 P 2  S 3  α S 1  α  P1 sau S 2  α  P 2 
Dacă λ  L 1 L 2 ( S1  λ  P1 sau S 2  λ  P2 ) atunci la mulţimea regulilor se adaugă S3  λ .
Fie w  L1 . Atunci:
* *
w  L 1   S 1  α  w    α  w , S 3  α  P 3  .
 G G 1  1  G 3 
Similar pentru w  L 2 .
*
α VN(1) VT(1) 
* * *
Dacă α  w , α  S 3 , atunci α  w sau α w după cum sau
G3 G1 G2

α  VN(2) VT(2)  .▲
*

Teorema 2.9.2. Clasa limbajelor de tip 3 este închisă în raport cu complementarea.


▼ Demonstraţie:

- 30 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

Să arătăm această proprietate folosind automate finite deterministe. Fie M  (Q, Σ, δ, q 0 , F) un


automat finit determinist, astfel încât T(M)=L. Fie Σ 1  Σ şi s o nouă stare ( s  Q ).
Construim M 1  (Q {s}, Σ 1 , δ1 , q 0 , (Q \ F) {s}) , unde:
 δ 1 (q, a)  δ(q, a), pentru q  Q, a  Σ

 δ 1 (q, a)  s, pentru q  Q, a  Σ 1 \ Σ

 δ 1 (s, a)  s, pentru a  Σ 1
M1 este construit adăugând o stare “capcană” la mulţimea stărilor, stare în care automatul intră pentru
orice simbol care nu e în Σ şi rămâne în ea indifferent de simbolul de intrare citit, iar apoi schimbând
stările finale cu cele nefinale.
*
Un cuvânt din Σ1 \ T(M) este sau un cuvânt din Σ* de la care M nu ajunge în stare finală, deci care nu e
acceptat de M, adică δ(q 0 , x)  Q \ F , sau este un cuvânt care conţine simboluri din Σ 1 \ Σ şi în
momentul depistării unui astfel de simbol M1 intră în starea s în care rămâne până analizează tot
cuvântul. ▲

Teorema 2.9.3 Clasa limbajelor de tip 3 este închisă în raport cu intersecţia.


▼ Demonstraţie:
Varianta 1.
Folosim pentru această demonstraţie una dintre relaţiile lui DeMorgan, din teoria mulţimilor:
L1 L 2  L1 L2 ,
unde L reprezintă complementara lui L.
Din teoremele 2.6.1 şi 2.6.2 rezultă deci că dacă L1 şi L2 sunt limbaje regulate, atunci şi limbajul
L1 L 2 este regulat.
Sigur ca aceasta este o demonstraţie elegantă a teoremei dar ea nu ne furnizează nici un mijloc de
a construi gramatica sau automatul pentru L1 L 2 când cunoaştem gramaticile, respectiv automatele,
pentru L1 şi L2. Prezentăm in continuare o astfel de demonstraţie, care se poate face construind un
automat finit care să simuleze în paralel cele două automate M 1 si M 2 astfel:
Varianta 2.
Fie M 1  (Q1 , Σ 1 , δ1 , q 1 , F1 ) şi M 2  (Q 2 , Σ 2 , δ 2 , q 2 , F2 ) două automate finite deterministe. Ele
acceptă mulţimile regulate T(M 1) = L1, respectiv T(M 2) = L2.
Presupunem că Q1 Q 2   (dacă nu, se face o simplă redenumire a stărilor fiecăruia dintre ele, de
exemplu prin renumerotare). Putem presupune că Σ 1  Σ 2  Σ (dacă nu, creăm Σ  Σ 1 Σ 2 ).
Construim automatul finit nedeterminist M 3 care acceptă intersecţia L1 L 2 , după cum urmează:
M3 = (Q 1 x Q2, , 3, [q0,q1], F1 x F2), unde 3 este definit de :
3([q,p], a) = [r,t]  1(p,a) = r şi 2(q,a) = t
Evident că automatul M3 intră într-o sare finală din F1 x F 2 dacă şi M1 intră intr-o stare finală din F1 şi M2
intră intr-o stare finală din F2. ▲

Teorema 2.9.5 Toate mulţimile finite sunt limbaje de tip 3.


▼ Demonstraţie:
Dacă L este o mulţime finită de cuvinte, atunci L  {w 1 ,..., w n } .
Arătăm întâi că pentru fiecare cuvânt w i  L , există Gi o gramatică de tip 3, astfel încât
L(G i )  w i . Fie wi= a1a2. . . a n. Atunci mulţimea de reguli:
S → a 1A1

- 31 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

A1 → a 2A2
.............
An-2 → a n-1An-1
An-1 → a n
generează cuvântul wi adică:
*
Swi
G3

Deci limbajele w i i 1, n sunt regulate.


n
Cum L este un limbaj finit, L  w , folosind Teorema 2.6.1 rezultă că L este un limbaj de tip 3.
i
i 1
O demonstraţie echivalentă se poate face şi construind un automat finit M, astfel încât T(M)=L.▲

Teorema 2.9.6. Clasa mulţimilor regulate este închisă în raport cu operaţia de oglindire.
▼ Demonstraţie:
Fie un automat finit M  (Q, Σ, δ, q 0 , F) . Considerăm mulţimea regulată L=T(M).
Definim automatul finit nedeterminist M’ astfel încât să funcţioneze “invers” faţă de M:
M   (Q {q 0 }, Σ, δ, q 0 , F) , unde F  {q 0 } dacă λ  T(M) sau F  {q 0 , q 0 } dacă λ  T(M)
având tranziţiile:
 p  δ ( q 0 , a) dac ă δ (p, a)  F

 p  δ (q, a) dac ă δ (p, a)  q
~
Este uşor de demonstrat acum că T(M )  L (vezi şi definiţia oglindirii unui limbaj, în capitolul I,
paragraful § 1.3). ▲

Teorema 2.9.7 Clasa mulţimilor regulate este închisă în raport cu operaţia de concatenare .
▼ Demonstraţie:
Fie M 1  (Q1 , Σ 1 , δ1 , q 1 , F1 ) şi M 2  (Q 2 , Σ 2 , δ 2 , q 2 , F2 ) două automate finite deterministe.
Ele acceptă mulţimile regulate T(M1), respectiv T(M2).
Presupunem că Q1 Q 2   (dacă nu, se face o simplă redenumire a stărilor fiecăruia dintre ele, de
exemplu prin renumerotare). Putem presupune că Σ 1  Σ 2  Σ (dacă nu, creăm Σ  Σ 1 Σ 2 ).
Construim automatul finit nedeterminist M 3 care acceptă concatenarea T(M 1 )T(M 2 ) după cum
urmează: M 3  (Q1 Q 2 , Σ, δ 3 , q 1 , F3 )
 p  δ 3 (q, a) , dac ă q  Q 1 , p  Q 1 \ F1 ş i δ 1 (q, a)  p

cu {q 2 , p}  δ 3 (q, a) , dac ă q  Q 1 , p  F1 ş i δ 1 (q, a)  p

 p  δ 3 (q, a) , dac ă q, p  Q 2 ş i δ 2 (q, a)  p
 F2 , dac ă λ  L 2
şi F3  
 F2 F1 , dac ă λ  L 2
Automatul finit M3 astfel construit va simula pe M1 până când acesta va intra într-o stare finală, moment
în care M3 poate intra în starea iniţială a lui M2 sau poate continua să simuleze M1. Atunci când M3
ajunge în starea iniţială a lui M2, îl va simula pe acesta din urmă până la oprire.
Se demonstrează uşor că T(M 3 )  T(M 1 )  T(M 2 ) . ▲

- 32 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

Teorema 2.9.8 Clasa mulţimilor regulate este închisă în raport cu închiderea Kleene.
▼ Demonstraţie:
Fie M  (Q, Σ, δ, q 0 , F) un automat finit determinist acceptând limbajul regulat L=T(M).
Construim automatul finit nedeterminist:
M   (Q {q 0 }, Σ, δ, q 0 , F {q 0 })
 Dac ă δ (q 0 , a)  p  F, atunci δ  ( q 0 , a)  {p, q 0 }

 Dac ă δ (q 0 , a)  p  F, atunci δ  ( q 0 , a)  {p}

 Dac ă δ (q, a)  p  F, atunci δ  (q, a)  {p, q 0 }

 Dac ă δ (q, a)  p  F, atunci δ  (q, a)  {p}
Se adaugă astfel o nouă stare iniţială q 0 pentru că, dacă λ trebuie să aparţină lui T(M)*, nu putem forţa
q0 să aparţină lui F 3 căci M ar putea intra în q 0 şi pe parcursul acceptării unui cuvânt când q 0  F .
*
a) Dacă x  L atunci x  λ şi δ(q 0 , λ)  q 0  F3 sau x=x1x2…xn cu x i  L , iar în acest caz sunt
posibile situaţiile:
a.1) ( q 0 ,x 1x2…xn)├* (p, x 2…xn), p  F (pentru că x 1  L ) dar în continuare nu e sigur că
automatul va conduce la acceptare (pornind din starea p cu şirul rămas).
Alegem atunci a doua variantă:
a.2) ( q 0 ,x1x2…xn)├* (q0,x2…xn)├* (q0,x3…xn)├*…├*(q0,xn) ├ (r,λ) unde r  F .
Aşadar x  T(M ) .
b) Dacă x  T(M ) şi x=a1a2…am , atunci există stările q 1,q2,…,qm astfel încât:
 q 1  δ  ( q 0 , a 1 )

 q i  1  δ  ( q i , a i  1 )

q m  F

 ş i q 1 , q 2 ,..., q m  Q
Atunci, pentru un anume i avem:
q  q 0
sau  i  1 sau δ(q i , a i 1 )  q i 1 .
 δ (q i , a i  1 )  F
Deci x poate fi scris în forma x=x 1x2…xn, unde x j  L ( δ(q 0 , x j )  F ). ▲

Teorema 2.9.9 Clasa mulţimilor regulate este închisă relativ la substituţia cu mulţimi regulate.
▼ Demonstraţie:
 
Fie R  Σ o mulţime regulată şi pentru fiecare a  Σ fie R a  Δ o mulţime regulată.

Fie f : Σ  Δ o substituţie regulată, f(a)=Ra. Pentru ca R şi Ra, pentru fiecare a din R, sunt mulţimi
regulate rezultă că există câte o expresie regulată care să le reprezinte, expresii care conţin un număr
finit de opratori *, . ,sau |.
Se observă ca substituţia unei reuniuni, a unei concatenări sau a unui produs Kleene este reuniunea,
concatenarea, respectiv produsul Kleene al substituţiilor:
 f(R 1 R 2 )  f(R 1 ) f(R 2 )

 f(R 1  R 2 )  f(R 1 )  f(R 2 )

 f(R)   f(R  )

- 33 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

Dar reuniunea concatenarea şi respectiv produsul Kleene sunt reprezentate de cei trei operatori ai unei
expresii regulate: *, . , | . Deci şi pentru două expresii regulate e 1 si e2 vom avea:
f(e1 | e 2 )  f(e1 ) | f(e2 )

f(e1  e 2 )  f(e1 )  f(e2 )
  
f(e)  f(e )
Folosind inducţia relativ la numărul de operatori folosiţi de expresia regulată rezultă că: dacă r este o
expresie regulată atunci f(r) este tot o expresie regulată, ceea ce trebuia demonstrat. ▲

În capitolul I (paragraful § 1.3) s-a definit operaţia de homomorfism. Să introducem şi inversa acesteia:
Definiţia 2.9.1 Definim homomorfismul invers astfel:
h 1 (L)  x h(x)  L
h 1 (w)  x h(x)  w
h 1 (w)  x  h(x)  w
h(a)  1

Teorema 2.9.10 Clasa mulţimilor regulate este închisă în raport cu homomorfismul şi cu


homomorfismul invers.

▼ Demonstraţie:
Deoarece h(a) e un caz particular de substituţie, Teorema 2.9.10 justifică prima cerinţă a acestei
teoreme.
Fie L un limbaj de tip 3 şi M automatul finit care recunoaşte L = T(M). Construim un automat
finit M’ pentru h -1(L) care simulează în controlul său finit funcţionarea lui M corespunzător cu Fig.2.9.1.

Automatul M va fi un automat cu λ-tranziţii care citeşte câte un simbol ai de pe banda de intrare şi


a0 a1 … ai … an …

h(ai)

Fig.2.9.1
CF pt.M

generează pentru simbolul de intrare citi cuvântul h(ai) într-o zonă de memorie din controlul său finit.
Apoi efectuează o serie de λ-tranziţii în şirul de intrare, adică nu mai citeşte nici un simbol de intrare, şi
în acest timp simulează acţiunea automatului M în controlul său finit. Când M termină de citit h(ai) şi
starea sa este o stare finală (adică M acceptă h(ai)) atunci M’ işi goleşte zona sa de memorie în care
reprezenta h(ai) şi citeşte un nou simbol de intrare(această gilire se poate face şi pe parcurs reţinând în
zona de memorie numai partea necitită din h(ai)). M’ continuă de această manieră pînă când nu mai are
nici un simbol de intrare de citit şi zona sa de memorie este goală. Evident M’ termină de citit şirul său
de intrare numai dacă M a acceptat fiecare h(ai) pentru i de la 1 la n.
Pentru formalizare vom considera fiecare stare a lui M’ de forma [α,q]unde α este partea necitită din
h(ai) iar q este o stare a lui M. Funcţia de tranziţie, ’, a lui M’ se defineşte astfel:

- 34 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

’([λ,q],a) = [h(a),q] M’ generează h(a), în memoria lui ’([bα,q], λ) = [α, (b,q)] M’ simuleză,
funcţionarea lui M pe un sufix al lui h(a), în controlul său finit. ▲

§ 2.10 Exerciţii
1. Să considerăm automatele finite nedeterministe M 1 şi M2, ale căror funcţii de tranziţie δ1 şi δ2
sunt definite în următoarele tabele:
Σ Σ
δ1 δ2
0 1 0 1
q0 q0,q1 q0 p q,s q
q1 q2 q2 q r q,r
Q1 Q2
q2 q3 - r s p
q3 q3 q3 s - p

M1 = (Q1, Σ, δ 1, q0, { q 3}) M2 = (Q2, Σ, δ 2, p, { q,s})


Să se construiască automatele finite deterministe echivalente pentru fiecare dintre cele două automate.

2 Să considerăm automatul finit din figura următoare. El acceptă cuvintele cu număr par de 0 şi
număr par de 1. Să se construiască un automat finit care să accepte cuvintele cu:
a. Număr par de 0 şi impar de 1;
b. Număr par de 1 şi impar de 0;
c. Număr impar de 0 şi impar de 1;

0
Start q0 q1
0
1 1
1 1
0
q2 q3
0

3. Să se construiască automate finite deterministe pentru fiecare dintre mulţimile următoare:


a. Mulţimea cuvintelor peste alfabetul {0,1} care se termină în 010;
b. Mulţimea cuvintelor peste alfabetul {0,1} care conţin cel puţin trei apariţii consecutive ale lui 1;
c. Mulţimea cuvintelor peste alfabetul {0,1} pentru care fiecare apariţie a lui 1 este urmată de cel
puţin două apariţii ale lui 0:
d. Mulţimea cuvintelor peste alfabetul {0,1} care încep cu 1 şi, interpretate ca un număr în baza 2,
sunt divizibile prin 3;
e. Mulţimea cuvintelor peste alfabetul {0,1} pantru care al treilea simbol de la dreapta spre stânga
este 1.

4. Să se construiască automate finite nedeterministe pentru fiecare dintre mulţimile următoare:


a. Mulţimea cuvintelor peste {0,1} astfel încât să conţină doi de 0 separaţi de un număr par de 1;
b. Mulţimea cuvintelor peste alfabetul {a,b,c} astfel încât să conţină subcuvântul aba sau bab.

- 35 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

5. Pornind de la automatul finit din exerciţiul 2 să se construiască o gramatică de tip 3 care să genereze
limbajul T(M).

6. Să se construiască un automat finit şi o gramatică de tip 3 pentru limbajul;


L = {a (a 2b3)i b | i > 0}

7. Se consideră gramatica G = ({S,A,B}, {a,b}, S, P) unde mulţimea P este formată din regulile:
S → aA, S → bB, A → aA, A → aB, B → bA, B → b
Să se construiască:
a. Un automat finit care să recumoască L(G);
b. O expresie regulată care să reprezinte L(G).

8. Să se construiască câte o expresie regulată peste alfabetul {0,1} pentru fiecare dintre limbajele
următoare:
a. Muţimea tuturor cuvintelor care conţin 1101;
b. Muţimea tuturor cuvintelor care nu conţin 101;
c. Mulţimea cuvintelor peste alfabetul {0,1} astfel încât să conţină trei de 0 separaţi de un număr
impar de 1;
d. Mulţimea cuvintelor peste alfabetul {0,1} pentru care fiecare apariţie a lui 1 este urmată de cel
puţin două apariţii ale lui 0:
e. Mulţimea cuvintelor peste alfabetul {0,1} care se termină în 111;
f. Mulţimea cuvintelor peste alfabetul {0,1} care conţin cel puţin două apariţii consecutive ale lui 0.

9. Să se construiască câte un automat finit pentru fiecare dintre limbajele descries de următoarele
expresii regulate:
a. (11|0)* (00|1)*;
b. (1|01|001)* (0|00)*;
c. (00|11|10|01)*.
10. Să se minimizeze automatele finite de la exerciţiul 3 a, b, c, d, e.

- 36 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

Capitolul III este dedicat limbajelor de tip 2 din ierarhia lui Chomsky, numite limbaje
independente de context. Se defineşte noţiunea de arbore de derivaţie, noţiune foarte importantă în
teoria compilării, iar apoi se introduc formele normale: Chomsky şi Greibach, pentru gramaticile
independente de context. Se introduce aici un nou tip de automat, numit automat push-down
nedeterminist, şi se demonstrează că acest automat recunoaşte limbajele independente de context. Se
studiază proprietăţile limbajelor independente de context t. Capitolul III se încheie cu probleme propuse
spre rezolvare.

§ 3.1 Arbori de derivaţie pentru gramaticile I.D.C.

Limbajele independente de context sunt generate de gramaticile de tip 2 din ierarhia lui
Chomsky, adică gramatici de forma: G = ( VN, VT, S, P),unde mulţimea regulilor P este de forma:
A  α,, cu A variabilă din V N, iar α un şir format din variabile şi terminale, adică α  (VN V T)*.
Vom prezenta o metodă vizuală de descriere a oricărei derivaţii într-o gramatică I.D.C sub forma
unui arbore de derivaţie.
Definiţia 3.1.1 Un graf de tip arbore este un graf cu următoarele proprietăţi:
i) există un nod în care nu intră nici un arc, numit rădăcină;
ii) în oricare alt nod intră exact un arc;
iii) există un drum de la rădăcină către oricare nod (graf conex);
iv) nodurile din care nu pleacă nici un arc se numesc frunze.
Definiţia 3.1.2 Fie G= ( VN,VT,S,P) o gramatică I.D.C. Un arbore de derivaţie în G este un arbore în
care:
i) fiecare nod este etichetat cu un simbol din VN VT ;
ii) eticheta rădăcinii este S;
iii) dacă nodul A are cel puţin un descendent atunci el are o etichetă din VN;
iv) dacă A1, A2, A3,….,A k sunt toţi descendenţii direcţi ai lui A în ordine de la stânga spre dreapta
atunci : A  A1A2…Ak este o regulă din P.

A  A1A2…Ak
A1 A2 … Ak

Exemplul 3.1.1
▼ Fie G = ({S,A,B},{a,b},S,P), unde mulţimea P conţine regulile:

- 37 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

S  aAB
S  a
 S
S  bBA

S  b
A  aS
 a A B
B  bS

a S b S
Pentru această gramatică, un arbore
de derivaţie având frunzele a,a,b,b
şi a este cel din figura 3.1.1. b a

Figura 3.1.1.
Definiţia 3.1.3 Se numeşte rezultat al unui arbore cuvântul format din etichetele frunzelor citite de la
stânga spre dreapta.
Exemplul 3.1.2 Rezultatul arborelui de derivaţie din figura 3.1.1. este cuvântul aabba.
*
Vom arăta mai târziu că dacă α este rezultatul unui arbore de derivaţie, atunci S  α .
G
Definiţia 3.1.4 Se numeşte subarbore al unui arbore graful format dintr-un nod împreună cu toţi
descendenţii săi.
Exemplul 3.1.3

A

a S

Figura 3.1.2.
ab)▲

Teorema 3.1.1 Fie G =(VN,VT,A,P ) o gramatică I.D.C. Atunci pentru α  λ , (S  α )  există un
G
arbore de derivaţie în gramatica G al cărui rezultat este α .
▼ Demonstraţie:

Vom demonstra că dacă GA=(VN,VT,A,P) atunci pentru orice A în VN avem (A  α ) dacă şi
GA

numai dacă există un subarbore cu rădăcina A al cărui rezultat este α .


Se observă că regulile din P sunt aceleaşi pentru orice gramatică GA, deci
 
( A  α )  (A  α )
GA GB
 
şi, pentru că G = GS, avem (A  α )  (A  α ).
GA G

a) Presupunem că α este rezultatul unui arbore de derivare în gramatica GA; demonstrăm prin inducţie,

în raport cu numărul de noduri care nu sunt frunze , că A  α :
GA

- 38 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

a1) Dacă există un singur nod care nu e frunză atunci arborele arată ca în
figura 3.1.3. Rezultă că α =A1A2…Ak şi, din definiţia arborelui de derivaţie, avem A  α  P, deci

A1 A2 … Ak Figura 3.1.3 .


Aα .
a2) Presupunem că α este rezultatul unui arbore A cu n noduri care nu sunt frunze şi că rezultatul
anterior este valabil pentru arbori cu cel mult n-1 noduri care nu sunt frunze.
Considerăm descendenţii direcţi ai lui A: A1,A2,…,Ak , deci (A  A1….Ak  P).
Dacă Ai nu e o frunză, rezultă că Ai este o variabilă, rădăcină a unui subarbore cu rezultatul α i şi
cu cel mult n-1 noduri care nu sunt frunze.
Dacă Ai este o frunză, punem A i = α i.
Se observă că dacă j < i atunci nodul Aj şi toţi descendenţii săi se află la stânga lui Ai şi a tuturor
descendenţilor săi.
Rezultă că α = α 1 α 2…… α k .
Deoarece din ipoteza inducţiei α i este rezultatul unui subarbore cu rădăcina Ai şi cu cel mult n-1
*
noduri care nu sunt frunze, rezultă că (A i  α i).
G

Deci A  A1A2…Ak  α1α 2 ...α k  α ,
G G
*
adică (A  α ).
G

b) Presupunem acum că A  α . Vom arăta că există un arbore de derivaţie cu rezultatul α în GA, prin
GA

inducţie relativ la numărul de paşi ai derivaţiei.


b1) Dacă A  α într-un singur pas rezultă că ( A  α  P ) şi dacă α =A1A2…Ak rezultă din
GA

definiţia arborelui de derivaţie că există un arbore cu rezultatul α :

A1 A2 … Ak
Figura 3.1.4

- 39 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR


b2) Presupunem că A  α în n paşi şi că pentru orice derivaţie a lui β cu numărul de paşi mai
GA
*
mic decât n există o derivaţie cu rezultatul β . Fie primul pas al derivaţiei A  α de forma
A  A1A2…Ak. Atunci orice simbol al lui α este sau unul dintre Ai sau derivat dintr-un Ai în cel mult n-1
paşi. Deci, există subarborii T1,T2,..,T k de rădăcini A1,A2,…,A k, cu rezultatele α 1 , α 2 ,..., α k atunci când

Ai  α i .
GA

Deci dacă la arborele din Figura 3.1.4 adăugăm subarborii Ti, obţinem:

A1 A2 … Ak

T1 T2 Tk

α1 α2 … αk F ig u r a 3 .1 .5

Rezultă că arborele din Figura 3.1.5 (în care câte un arbore Tj poate fi vid, dacă A j  VT) are
rezultatul format din rezultatele subarborilor T1, …,T k în ordine de la stânga α 1α 2 ....α k  α . ▲

§ 3.2 Forme normale

Se poate arăta că pentru orice gramatică independentă de context, există o gramatică echivalentă în care
regulile au forme particulare, forme uşor de utilizat în demonstraţii.

Forma normală Chomsky

Teorema 3.3.1 (Forma normală Chomsky) Orice limbaj I.D.C. poate fi generat de o gramatică în care
toate regulile sunt de forma A  BC sau A  a, cu A,B,C  VN şi a  VT.
▼Demonstraţia se gaseste in [4]▲

Forma normală Greibach


În această formă normală fiecare regulă are membrul drept începând cu un terminal, eventual urmat de
variabile.

Teorema 3.3.2 (Forma normală Greibach) Fiecare limbaj I.D.C. poate fi generat de o gramatică

pentru care fiecare regulă este de forma A  aα cu A  VN, a  VT, α  VN ( α un şir de variabile,
posibil vid).
▼Demonstraţia se gaseste in [4]▲

§ 3.3 Teorema de pompare pentru limbaje I.D.C.(lema Bar-Hillel)

Teorema 3.4.1 (lema de pompare Bar-Hillel ) Fie un limbaj I.D.C., notat L. Atunci există constantele
p şi q, depinzând de L, astfel încât: dacă z  L cu | z |  p , atunci z poate fi scris sub forma:

- 40 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

 | vwx |  q
z = uvwxy, unde  astfel încât pentru fiecare întreg i  0 ,
 | vx |  0 (v, x nu sunt ambele λ)
uv i wx i z  L .
▼Demonstraţie:
Fie G=(VN,VT,S,P) o gramatică I.D.C. în formă normală Chomsky, pentru L. Dacă G are k
variabile, atunci fie p=2k-1 şi q=2k. Este uşor de observat că, pentru o gramatică în formă normală
Chomsky, dacă un arbore de derivaţie nu are drumuri de lungime mai mare decât j, atunci cuvântul
derivat nu este mai lung decât 2j-1, această valoare reprezentând maximul de frunze într-un astfel de
arbore (binar, datorită formei Chomsky).
Deci, dacă z  L şi |z| p , atunci arborele unei derivaţii a lui z în gramatica G conţine un

 Exemplu: G=({A,B,C},{a,b},A,P), unde


P={ A  BC, B  BA, C  BA, A  a, B  b }
a)
A Legendă:
drum R
B C

B A n1 B A

b B C b a

b B A n2

b a
z3=bb z 2=a z 4=λ z=bbbaba

b) n1 c)
A
A n2

B C
a

b B A n2

b a Figura 3.4.1

drum de lungime mai mare decât k. Să considerăm cel mai lung drum, R, cu lungimea mai mare decât k.
Atunci există două noduri n1 şi n2 în R astfel încât:
 n1 şi n2 sunt etichetate identic;
 n2 este subarborele lui n1;
 subarborele n1 nu are drumuri de lungime mai mare decât k+1.
Pentru a arăta că n1 şi n2 pot fi astfel găsite, parcurgem drumul R de la frunză înspre rădăcină.
Din primele k+2 noduri, numai o frunză are ca etichetă un simbol terminal. Cele k+1 noduri rămase nu
pot avea etichete distincte.

- 41 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

Subarborele T1, cu rădăcina n1, reprezintă derivaţia unui subcuvânt de lungime cel mult 2k (şi
deci de lungime cel mult q), pentru că în T1 nu există nici un drum de lungime mai mare decât k+1, din
cauză că R a fost drumul cel mai lung.
Fie z1 rezultatul subarborelui R. Dacă T2 este subarborele generat de nodul n 2 şi z2 este rezultatul
lui T2, atunci z1 se poate scrie z3z2z4. În plus, z3 şi z4 nu pot fi ambele λ, pentru că prima regulă folosită în
derivaţia lui z1 e de forma A  BC , unde B,C  VN . Subarborele T 2 trebuie să fie completat în interior
sau de subarborele lui B sau de subarborele lui C.
* *
Avem atunci A  z 3 Az 4  z 3 z 2 z 4 , unde | z3z 2 z 4 |  q . De aici rezultă că
G G
* *
A  z i3 Az i4  z i3 z 2 z i4 pentru i  0 .
G G

Evident şirul z poate fi scris sub forma uz 3 z 2 z 4 y , pentru anumiţi u şi y.


Vom pune acum v=z3, w=z2 şi x=z4, demonstraţia fiind astfel încheiată. ▲

Observaţia 3.4.1 Teorema 3.4.1 se poate aplica pentru a demonstra că L={akbkck | k  0} nu este I.D.C.
▼Demonstraţie:
Să presupunem, prin absurd, că limbajul L este I.D.C., ceea ce ar însemna că sunt îndeplinite
consecinţele Teoremei 3.4.1., care permit "pomparea" anumitor subcuvinte din interiorul unor cuvinte
suficient de lungi ale limbajului L.
Se observă, însă, că indiferent de lungimea cuvintelor alese din L, ele fiind de forma z = akbkck
(k  0), nu este posibilă alegerea vreunei descompuneri de forma z=uvwxy cu proprietăţile specificate în
i i
teorema amintită şi astfel încât uv wx y  L .
Să urmărim cazurile posibile. Fie m, n, p  0 ,  k  0). Atunci cuvintele v, w şi x pot fi de una
din următoarele forme:
z=u(vwx)y v w x i i
Motiv uv wx z  L

I. Grupul de simboluri "a" se alungeşte


am(an)ak-m-nbkck a n1 a n2 a n3 independent de grupurile "b" şi "c".

Grupurile de simboluri "a" şi "b" se


alungesc în mod independent. În plus,
a n1 a n2 a n3 b n dacă n3,n  0 , simbolurile "a" şi "b" se
amestecă.
II. Grupurile de simboluri "a" şi "b" se
am(ak-mbn)bk-nck a n1 a n 2 b n3 b n4 alungesc în mod independent.
Grupul de simboluri "b" se alungeşte
a n1 b n 2b n 3 independent de grupurile "a" şi "c". În
b n4 plus, dacă n1,n2  0 , simbolurile "a" şi
"b" se amestecă.
III. Grupul de simboluri "b" se alungeşte
akbm(bn)bk-m-nck b n1 b n 2 b n3 independent de grupurile "a" şi "c".
IV.
Similar cazului II. …
akbm(bk-mcn)ck-n
V. n1 n2 n3 Grupul de simboluri "c" se alungeşte
k k m n k-m-n
a b c (c )c c c c independent de grupurile "a" şi "b".
În concluzie, prin pompare se va afecta cel puţin una din proprietăţile limbajului considerat:
numărul de simboluri a, b, respectiv c este acelaşi (deci nu se pot multiplica subcuvinte formate dintr-

- 42 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

unul din cele trei simboluri), iar ordinea caracterelor în cuvânt este strict alfabetică (deci nu se pot
multiplica subcuvinte formate din "îmbinarea" a două simboluri distincte, ab sau bc, căci se amestecă).
Rezultă că {akbkck | k  0}  L1  L2 deci clasa limbajelor independente de context este diferită de
cea a limbajelor dependente de context: L1  L2 .▲

Teorema 3.4.3 Fiind dată o gramatică I.D.C., G1, se poate găsi o gramatică echivalentă G2, pentru
care, dacă A este o variabilă în G2 alta decât simbolul iniţial, atunci există o infinitate de cuvinte
iniţiale derivate din A.
▼Demonstraţie:
Dacă L(G1) este finit atunci L={u1,u2,…,un} şi putem considera G2 cu mulţimea regulilor
P2={S  ui | i=1,n}.
Dacă L(G1) este infinit, G1=(VN,VT,S,P 1), considerăm pentru fiecare A  VN gramatica
GA=(VN,VT,S,P 1). Prin Teorema 3.4.2 se poate determina dacă L(GA) este finit sau nu.
Presupunem că A1,A2,…,A k sunt variabilele care generează o infinitate de cuvinte şi că
B1,B2,…,B m sunt variabilele care generează un număr finit de cuvinte.
Creem mulţimea de reguli P2 din P1 în modul următor:
Presupunem că C0  C1C2…Cr este o regulă din P1, iar C0  {A1,A2,…,A k}. Atunci regula
C0  u1u2…un este o regulă din P2, unde:
1. Dacă Ci  VT  ui=ci
2. Dacă Ci  {A1,A2,…,A k}  ui=ci

3. Dacă Ci  {B1,B2,…,B m}  ui este unul din cuvintele (în număr finit) generate de ci (ci  ui).
Rezultă că P2 nu conţine nici o regulă cu Bi la dreapta.
' '
Considerăm acum G2=( VN ,VT,S,P 2) unde VN ={A1,A2,…,A k}. Observăm că S trebuie să aparţină
'
lui VN pentru că L(GS) este infinit.
* 
a) Evident, dacă ( α  β ) atunci (α  β ) deci L(G1)  L(G2).
G2 G1

b) Pentru a demonstra L(G2)  L(G1), demonstrăm prin inducţie asupra numărului de paşi din derivaţie
 
*
că dacă A i  w 1  i  k unde w  V atunci Ai  w.
T
G1 G2

Rezultatul este evident pentru o derivaţie într-un pas. Presupunem că este adevărat pentru o
derivaţie în cel mult j paşi. Considerăm o derivaţie în j+1 paşi şi presupunem că prima regulă folosită
este Ai  C1C2…Cr .

Putem astfel scrie w sub forma w1w2…wr unde Ci  wi , 1  i  r.
G1

Atunci există o regulă în G2 de forma Ai  u1u2…ur,


 w dac ă C i  V T {B 1 ,..., B m } .
unde u i   i
 C i dac ă C i  {A 1 ,..., A k }
 
Dar ci  wi în cel mult j paşi  (C i  wi) .
G1 G2

Deci A  u1u2…ur  w 1w2…wr . ▲
G2 G2
Exemplul 3.4.1 Fie gramatica G=({S,A,B},{a,b,c,d},S,P), unde P={S  ASB, S  AB, A  a, A  b,
B  c, B  d}). Să aplicăm Teorema 3.4.3.
▼Rezolvare:
Variabilele A şi B generează numai cuvintele a şi b respectiv c şi d, dar S generează o infinitate
de cuvinte. Atunci se construieşte G2=({S},{a,b,c,d},S,P 2), mulţimea regulilor fiind:
P 2: S  aSc S  ac S  aSd S  ad S  bSc S  bc S  aSd S  bd ▲

- 43 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

§ 3.5 Automate Push-down

Vom introduce un nou tip de dispozitiv care să accepte limbajele I.D.C., numit automat push-
down.
Un automat push-down are, pe lângă o bandă de intrare, şi o stivă (o listă LIFO). Într-o astfel de
stivă, intrarea şi ieşirea unui simbol se face numai la capul stivei. Când un simbol intră în stivă, simbolul
care anterior a fost capul stivei devine al doilea, cel care a fost al doilea devine al treilea ş.a.m.d. În mod
similar, când un simbol este scos din stivă, simbolul care anterior acestei scoateri era al doilea, ajunge în
capul stivei, cel care era al treilea devine al doilea ş.a.m.d.
O astfel de stivă se poate compara cu un teanc de farfurii în care se ridică sau se pune o farfurie
deasupra teancului.
Exemplul 3.5.1 Să utilizăm o stivă de "farfurii", cuplată cu un control finit pentru a recunoaşte o
mulţime neregulată.
▼ Fie limbajul I.D.C. L={ wcw ~ | w {0,1} }, care nu este regulat (posibil de demonstrat acest lucru
folosind lema de pompare) şi fie gramatica
G=({S},{0,1,c},S,P)
unde mulţimea regulilor este P= {S  0S0, S  1S1, S  c} .
Pentru a recunoaşte limbajul L, vom utiliza un control finit cu două stări q1 şi q2 şi o memorie
push-down pe care vom plasa "farfurii" albastre, roşii şi verzi. Dispozitivul va opera după următoarele
reguli:
1) Maşina porneşte cu o farfurie roşie pe stivă şi cu controlul finit în starea q 1.
2) Dacă simbolul de intrare este 0 şi starea este q1, dispozitivul plasează o farfurie albastră pe stivă,
iar dacă simbolul de intrare este 1 şi starea q 1, atunci plasează o farfurie verde pe stivă şi, în ambele
cazuri, rămâne în starea q 1.
3) Dacă intrarea este c şi starea q 1, îşi schimbă starea în q 2 fără a acţiona asupra stivei.
4) Dacă intrarea este 0, starea q 2 şi pe stivă se află o farfurie albastră, scoate farfuria şi rămâne în q 2,
iar dacă este 1, starea q 2 şi pe stivă este o farfurie verde, scoate farfuria şi rămâne tot în q 2.
5) Dacă dispozitivul este în starea q2 şi pe stivă este o farfurie roşie, scoate farfuria indiferent de
intrare.
6) În alte situaţii dispozitivul nu face nici o mişcare.
Dispozitivul acceptă şirul de intrare dacă, după citirea lui, stiva devine goală. ▲
Vom defini un automat push-down ca fiind un dispozitiv format din: bandă de intrare, control
finit şi memorie push-down (stivă), precum în Figura 3.5.1..

ai … Banda de intrare

CONTROL
FINIT (Q) Z Capul stivei

Z0
Figura 3.5.1
Dispozitivul este nedeterminist, având un număr finit de şanse de mişcare în fiecare situaţie.
Mişcările vor fi de două tipuri:

- 44 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

I. - tranziţie cu simbol de intrare: în funcţie de simbolul de intrare, de capătul stivei şi de starea


controlului finit, sunt posibile anumite mişcări care constau fiecare din: o nouă stare a controlului finit şi
un şir (posibil vid) de simboluri care înlocuieşte capul stivei. După alegerea unei mişcări posibile,
dispozitivul avansează cu un simbol pe banda de intrare.
II. - "λ-tranziţie" : este similară cu mişcarea tip I., dar nu e utilizat nici un simbol de intrare.
Limbajul acceptat de un automat push-down se poate defini în două moduri:
 mulţimea şirurilor de intrare care conduc la golirea memoriei push -down sau
 mulţimea şirurilor de intrare pentru care automatu l intră într-o stare finală.
Cele două tipuri de acceptări sunt echivalente.
Formal, un automat push-down se defineşte prin:
Definiţia 3.5.1 Un automat push-down nedeterminist, M, este un sistem format din:
M = (Q, Σ, Γ, δ, q 0 , Z 0 , F) ,
unde:
 Q este o mulţime finită de stări
 Σ este un alfabet finit al benzii de intrare
 Γ este un alfabet finit al memoriei push-down
 q 0  Q stare iniţială
 Z 0  Γ simbol de start al memoriei push-down
 F  Q mulţimea stărilor finale
 δ : Q  (Σ λ)    P (Q   * )
Interpretarea expresiei δ(q, a, Z)  {(p1 , γ1 ), (p 2 , γ 2 ),..., (p m , γ m )} , unde
q, p i  Q, a  Σ, Z  Γ, γ i  Γ * , i  1, m , este aceea că automatul push-down aflat în starea q, cu a pe
banda de intrare şi Z în capul stivei, poate trece într-una din stările pi înlocuind pe Z cu γi şi apoi
avansează cu un simbol pe banda de intrare.
Interpretarea expresiei δ(q, λ, Z)  {(p1 , γ1 ), (p 2 , γ 2 ),..., (p m , γ m )} , unde
q, p i  Q, Z  Γ, γ i  Γ * , i  1, m , este aceea că automatul push-down aflat în starea q şi având pe Z
în capul stivei, indiferent de simbolul aflat pe banda de intrare îşi schimbă starea într-una din stările pi şi
înlocuieşte pe Z cu γi fără să avanseze pe banda de intrare.
Exemplul 3.5.2 În exemplul anterior, automatul push-down acceptă limbajul { wcw ~ | w {0,1} } 

prin memorie vidă (v.definiţia 3.5.4). Să descriem formal acest automat.



M=({q1,q2},{0,1,c},{R,A,V},δ,q 1,R,  )
 δ(q 1 ,0, R)  {(q 1 , AR)} δ(q 1 , c, A)  {(q 2 , A)} 
 δ(q ,1, R)  {(q , VR)} 
δ(q 1 , c, V)  {(q 2 , V)} 
 1 1

 δ(q 1 ,0, A)  {(q 1 , AA)} δ(q 1 , c, R)  {(q 2 , R)} 


 
 δ(q 1 ,0, V)  {(q 1 , AV)} δ(q 2 ,0, A)  {(q 2 , λ)} 
 δ(q 1 ,1, A)  {(q 1 , VA)} δ(q 2 ,1, V)  {(q 2 , λ)} 
 
 δ(q 1 ,1, V)  {(q 1 , VV)} δ(q 2 , λ, R)  {(q 2 , λ)} 

Observaţia 3.5.1 Automatul din Exemplul 3.5.2 este determinist pentru că are o singură posibilitate de
mişcare la fiecare pas.
Un astfel de automat, idiferent dacă este determinist sau nedeterminist, se poate şi el reprezenta
printr-o diagramă de tranziţie[23], similară cu cea pentru automatul finit, cu excepţia faptului ca una
dintre etichetele unui arc între starea p şi starea q, este de forma:

- 45 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

(a, A→ BC) dacă (q, BC)  (p,a,A)


sau, folosind forma din [13]:
(a, A, BC) dacă (q, BC)  (p,a,A)
Să considerăm automatul push-down, definit printr-o diagramă de tranziţie, din figura 2.3.2, care
recunoaşte cuvintele limbajului:
{anbn | n ≥ 0}.

0, Z0 → AZ0 0, A → AA
q p
q Figura 3.2.2
λ, Z0 → λ 1, A → λ

s r 1, A → λ
r p
p
λ, Z0 → λ q
q *
Definiţia 3.5.2 O configuraţie instantanee este o pereche (q, γ) , unde q  Q şi γ   , unde cel mai
din stânga simbol al lui γ este vîrful stivei push-down, iar γ reprezintă conţinutul stivei.
Dacă a  Σ {λ} , γ, β  Γ * , Z  Γ şi (p, β)  δ(q, a, Z) , atunci scriem:
a : (q,Zγ)├ M (p,βγ) (Intrarea "a" trece automatul M din (q,Zγ) în (p,βγ).)
Dacă pentru fiecare a 1 ..., a n  Σ {λ} , q 1 ,..., q n 1  Q şi şirurile γ1 ,..., γ n 1  Γ * , avem:
*
ai : (q i,γi)├ M (qi+1,γi+1) i  1, n , atunci scriem: a1… an : (q 1,γ1)├ M (qi+1,γi+1)
Similar, se poate folosi descrierea instantanee, constituită din tripletul q, aw, Zα  şi atunci
scriem: q, aw, Zα  ├
(p,w,βα) dacă (p, β)  δ(q, a, Z) .
M
Definiţia 3.5.3 Limbajul acceptat prin stări finale de către automatul M este
L(M)  {w w  Σ * , (q 0 , w, Z 0 ) ├ *M p, λ, γ , γ  Γ * , p  F} .
Definiţia 3.5.4 Limbajul
acceptat prin stivă vidă de către automatul M este
N(M)  {w w  Σ , (q 0 , w, Z 0 ) ├ *M p, λ, λ , p  Q} .
*

~ | w {0,1} }.
Exemplul 3.5.3 Să construim automatul push-down care acceptă limbajul { ww


M=({q 1,q2},{0,1},{z 0,A,B},δ,q 1,Z0,  )
δ(q 1 ,0, Z 0 )  {(q 1 , AZ 0 )} δ(q 2 ,0, A)  {(q 2 , λ)} 
δ(q ,1, Z )  {(q , BZ )} 
δ(q 2 ,1, B)  {(q 2 , λ)} 
 1 0 1 0

δ(q 1 ,0, A)  {(q 1 , AA), (q 2 , λ)} 


 
δ(q 1 ,0, B)  {(q 1 , AB)} δ(q 1 , λ, Z 0 )  {(q 1 , λ)} 
δ(q 1 ,1, A)  {(q 1 , BA)} δ(q 2 , λ, Z 0 )  {(q 2 , λ)}
 
δ(q 1 ,1, B)  {(q 1 , BB), (q 2 , λ)} 
Spre exemplu, şirul de intrare 001100 este acceptat de automatul push-down deoarece există un
calcul de configuraţii care se finalizează prin golirea memoriei push -down după citirea benzii de intrare:
(q 1 ,001100, Z 0 ) ├ M (q 1 ,01100, AZ 0 ) ├ M (q 1 ,1100, AAZ0 ) ├ M
├ M (q 1 ,100, BAAZ0 ) ├ M (q 2 ,00, AAZ 0 ) ├ M (q 2 ,0, AZ 0 ) ├ M (q 2 , λ, Z 0 ) ├ M
├ M (q 2 , λ, λ) ,

- 46 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

deci 001100  N(M) .


Problema care apare în acest exemplu este de a determina mijlocul cuvântului de pe banda de
intrare. Pentru determinarea mijlocului, singura condiţie cunoscută este de a avea pe banda de intrare doi
de 0 consecutivi sau doi de 1 consecutivi. Însă această condiţie nu determină în mod precis mijlocul
cuvântului de intrare, situaţia nefiind unică. Astfel, automatul push-down poate "bănui" că a ajuns la
mijlocul cuvântului de intrare ori de câte ori apar doi de 0 sau doi de 1 consecutivi. Deci, de câte ori
automatul întâlneşte două simboluri identice pe banda de intrare, are de ales între două variante:
"bănuieşte" că aici este mijlocul şi trece în starea q2, care începe să şteargă stiva, sau "bănuieşte" că nu
este la mijloc şi continuă să memoreze în stivă. Dacă a "bănuit" corect atunci va reuşi să-şi golească
stiva. De aici apare nedeterminismul. ▲

Observaţia 3.5.2
a) Un automat push-down este determinist dacă sunt îndeplinite următoarele condiţii:
- pentru fiecare q  Q, a  Σ şi Z  Γ corespunzătoare, δ(q, a, Z) nu conţine mai mult de un element;
- pentru fiecare q  Q şi Z   , dacă δ(q, λ, Z)   atunci δ(q, a, Z)  , a   (aceste condiţii
evită situaţia în care ar fi posibile atât o λ-mutare cât şi o mutare nevidă, generând astfel nedeterminism).
b) Pentru automatele push-down în general, modelul determinist şi cel nedeterminist nu sunt
echivalente. Acest lucru se demonstrează în § 3.9., secţiune dedicată limbajelor independente de context
deterministe.

§ 3.6 Legătura dintre automatele push-down nedeterministe şi limbajele independente


de context

În cele ce urmează vom discuta numai despre automate push-down nedeterministe, pe care le
vom numi simplu automate push-down, iar atunci când ele nu sunt nedeterministe vom preciza acest
lucru.

Teorema 3.6.1 Un limbaj L este acceptat prin stivă vidă de către un automat push-down M1, (L=N(M1))
dacă şi numai dacă el este acceptat prin stări finale de către un automat push-down M2, ( L=N(M2) ).
▼Demonstraţie:
I. Fie L=T(M2), unde M2= (Q, Σ, Γ, δ, q 0 , Z 0 , F) .
Construim M1= (Q {q λ , q 0 }, Σ, Γ {X}, δ, q 0 , X, ) , unde δ este definit după cum urmează:
1) (q 0 , Z 0 X)  δ ( q 0 , λ, X)
2) δ(q, a, Z)  δ (q, a, Z) , q  Q, a  Σ λ, Z  Γ
3) Pentru toţi q  F, Z  Γ {X}  q λ , λ   δ (q, λ, Z)
4) Pentru toţi Z  Γ {X}  q λ , λ   δ (q λ , λ, Z)
Regula 1) îl face pe M1 să intre în configuraţia iniţială a lui M2, dar simbolul iniţial al stivei este
X. Regula 2) simulează pe M2 până când intră într-o stare finală. Regulile 3) şi 4) golesc stiva când M2
intră într-o stare finală.
Se observă că regulile 2) pot goli stiva lui M2 şi pentru un cuvânt care nu este în T(M2), iar acesta
este motivul pentru care M1 are propriul său simbol iniţial al stivei, X.
Să demonstrăm echivalenţa celor două automate:
a) Fie w  T(M 2 ) . Atunci:
q 0 , w, Z 0  ├ *M 2 (q,λ,γ) pentru q  Q .
Fie acum w intrarea lui M1;
conform regulei 1), rezultă că q 0 , w, Z 0  ├ M1 (q0,w,Z0X)
*
-

- 47 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

conform regulei 2), rezultă că q 0 , w, Z 0 X  ├ M1 (q,λ,γX) (M1 simulează pe M2)


*
-
conform regulilor 3) şi 4), re zultă în final că q, λ, γX  ├ M1 (qλ,λ,λ)
*
-
Aşadar  w  N(M 1 ) .
b) Dacă w  N(M 1 ) , atunci se vede că stiva este complet ştearsă numai dacă sunt aplicate regulile 3)
şi 4), deoarece regulile lui M2 nu pot şterge pe X. Aşadar, este necesar ca M2 să intre într-o stare finală cu
aceeaşi intrare ca M1, ca să poată fi aplicate reguli de tip 3 şi 4.
II. Reciproc, fie M 1= (Q, Σ, Γ, δ, q 0 , Z 0 ,  ) astfel încât L=N(M1).
Definim M2= (Q {q 0 , q f }, Σ, Γ {X}, δ, q 0 , X,{q f }) , unde δ este definit după cum urmează:
1) (q 0 , Z 0 X)  δ(q 0 , λ, X)
2) q  Q, a  Σ λ, Z  Γ  δ(q, a, Z)  δ(q , a, Z)
3) q  Q  (q f , λ)  δ(q, λ, X)
Regula 1) îl face pe M2 să intre în configuraţia iniţială a lui M1. Regula 2) simulează pe M1 până
îşi goleşte stiva la citirea intrării. Regula 3) îl determină pe M2 să intre într-o stare finală dacă M 1 şi-a
golit stiva iar în stiva lui M2 este doar X.
Demonstraţia este similară cu I. ▲

Teorema 3.6.2 Dacă L este un limbaj independent de context, atunci există un automat push-down M
astfel încât L=N(M).
▼Demonstraţie:
Fie o gramatică independentă de context G=(VN,VT,S,P) în formă normală Greibach, astfel încât
L=L(G). Presupunem că λ  L(G) (demonstraţia se poate adapta şi pentru cazul contrar).
Construim M= ({q 1 }, VT , VN , δ, q 1 , S,  ) , unde δ(q 1 , a, A) conţine (q 1 , γ) pentru fiecare
regulă A  aγ  P .
Pentru a arăta că L(G)=N(M), observăm că:
(xAβ  xaα β)  q 1 , a, Aβ  ├ M q 1 , λ, αβ 
G
Prin inducţie asupra numărului de paşi dintr-o derivaţie rezultă că:
*
(xAβ  xyα pentru x, y  VT* , A  VN , α, β  VN* )  (q 1 , y, Aβ )├ *M (q 1 , λ, α)
G
*
*
Atunci : S  x  (q 1 , x, S) ├ M (q 1 , λ, λ) .
G
Se observă că M nu face λ-mutări.▲

Teorema 3.6.3 Dacă L este acceptat prin stivă vidă de către un automat push-down M (L=N(M)), atunci L
este un limbaj independent de context.
▼Demonstraţia se gaseste in [4]:

Observaţia 3.6.1 Din teoremele 3.6.1, 3.6.2 şi 3.6.3 rezultă că următoarele afirmaţii sunt echivalente:
i) L este un limbaj independent de context;
ii) L=N(M1) pentru un automat push-down M 1 nedeterminist;
iii) L=T(M2) pentru un automat push-down M 2 nedeterminist.

§ 3.7 Proprietăţi de închidere pentru limbaje I.D.C.

Vom considera anumite operaţii care păstrează limbajele I.D.C. Aceste operaţii se pot folosi atât
pentru a demonstra că un limbaj este I.D.C. cât şi pentru a demonstra că un limbaj nu este I.D.C.

- 48 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

Teorema 3.7.1 Limbajele independente de context sunt închise la reuniune, concatenare şi produs
Kleene.
▼Demonstraţie:
Fie L1 şi L2 generate de G 1  (V1 , T1 , S1 , P1 ) şi G 2  (V2 , T2 , S 2 , P2 ) . Presupunem că
V1 V2=  . Atunci putem realiza următoarele construcţii de gramatici I.D.C:
Limbajul L1 L 2 este generat de G 3  (V1 V2 {S 3 }, T1 T2 , S3 , P3 ) , unde
P3  P1 P2 {S3  S1 , S3  S 2 } .
Să demonstrăm că L1 L 2  L(G 3 ) :
Fie w  L1 L 2 ; înseamnă că w aparţine cel puţin unuia din cele două limbaje:
i  {1,2} : w  L i , altfel spus i  {1,2} : w  L(G i ) . Există deci o derivare a lui w în una din cele

două gramatici date, G i, pornind de la simbolul iniţial al respectivei gramatici: Si  w . Deoarece toate
Gi

regulile din gramatica Gi sunt şi reguli ale gramaticii construite G3, înseamnă că aceeaşi derivare are loc
şi în gramatica G3. În plus, putem obţine simbolul Si printr-o derivare într-un pas pornind de la S3, şi
anume folosind una din cele două reguli nou adăugate la P 3, obţinând următoarea derivaţie în G3:

i  {1,2} : S3  Si  w , deci w  L(G 3 ) .
G3 G3

Rezultă că L1 L 2  L(G 3 ) .

Fie w  L(G 3 ) ; înseamnă că w poate fi generat cu regulile P3, pornind de la S3: S3  w .
G3

Deoarece singurele S3-reguli sunt cele două redenumiri {S 3  S1 , S3  S 2 } , rezultă că primul pas al
derivaţiei amintite nu poate fi decât rezultatul aplicării uneia d in aceste două reguli:
 
i  {1,2} : S3  Si  w , deci Si  w .
G3 G3 G3

Putem observa faptul că, în afară de primul pas al acestei derivări, toate regulile folosite în
obţinerea lui w pornind de la S3 sunt chiar reguli din Pi, i {1,2} , în funcţie de simbolul Si obţinut în

primul pas. Deoarece V 1 V2=  , rezultă că Si  w , deci w  L(G i ) =Li.
Gi

S-a arătat astfel că w  L1 sau w  L 2 , adică w  L1 L2 .


Rezultă că L1 L 2  L(G 3 ) .
Ţinând cont de cele două implicaţii rezultă că limbajul L1 L 2 este generat de gramatica G 3.
Următoarele construcţii se demonstrează în mod asemănător, constituind un bun exerciţiu:
a) Limbajul L1 L 2 este generat de G 4  (V1 V2 {S 4 }, T1 T2 , S 4 , P4 ) , unde
P4  P1 P2 {S 4  S1S 2 } .
*
b) Limbajul L 1 este generat de G 5  (V1 {S5 }, T1 , S5 , P5 ) , P5  P1 {S5  S5S1 , S5  λ} .▲

Teorema 3.7.2 Familia limbajelor independente de context este închisă la substituţie.


▼Demonstraţie:
*
Fie L un limbaj I.D.C., L  Σ şi pentru fiecare a  Σ fie La un limbaj I.D.C.
Fie o gramatică G care generează limbajul iniţial, L=L(G). De asemenea, pentru fiecare simbol
a  Σ considerăm câte o gramatică astfel încât La=L(Ga).
Presupunem că variabilele lui G şi ale lui G a sunt distincte, oricare ar fi a  Σ .

- 49 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

Construim gramatica G  I.D.C. în felul următor:


 Variabilele lui G  sunt variabilele lui G şi cele ale lui Ga, pentru a  Σ ;
 Terminalele lui G  sunt terminalele lui Ga;
 Simbolul iniţial al lui G  este simbolul iniţial al lui G;
 Regulile lui G  sunt cele ale lui Ga, pentru a  Σ , şi regulile lui G în care fiecare a  Σ se
înlocuieşte cu Sa (simbolul iniţial al G a).

Exemplul 3.7.1 Fie L limbajul cuvintelor cu număr egal de a şi b. Să urmărim aplicarea celor
demonstrate în teorema anterioară.
▼ Avem gramatica generativă G  ({S}, {a, b}, S, P) , unde mulţimea regulilor este
P  {S  aSbS, S  bSaS, S  λ} . Se poate verifica faptul că L=L(G). Să considerăm limbajele de
substituţie:
 L a  {0 n1n | n  1} , generat de regulile P(G a)= {S a  0S a 1, Sa  01} ;
 L b  {ww~ | w {0,2}* } , limbaj generat de mulţimea de reguli
P(Gb)= {S b  0S b 0, S b  2S b 2, S b  λ} .
Atunci, conform construcţiei efectuate în demonstraţia Teoremei 3.7.2, gramatica rezultată este
G  = ({S, Sa , S b },{0,1,2}, S, P) , cu mulţimea de reguli:
P    S  S a SS b S , S  S b SS a S , S   , S a  0 S a 1, S a  01, S b  0 S b 0, S b  2 S b 2, S b   }
Să generăm un cuvânt la întâmplare cu aceste reguli:
S  Sa SSbS  01SSbS  01SbS  012S b 2S  0120S b 02S  012002S  01200 2 ▲

Observaţia 3.7.1 Teorema 3.7.1 se poate obţine folosind Teorema 3.7.2 şi ţinând cont că a, b  Σ
avem:
 {a, b} este I.D.C.
 {a  b} este I.D.C.
 a  este I.D.C.
Dacă acum f(a)=La şi f(b)=Lb, atunci, datorită proprietăţii de închidere la substituţie , rezultă că:
 L a L b este I.D.C.
 L a  L b este I.D.C.
 La este I.D.C.
Pentru că homomorfismul este un caz special de substituţie, în care card(La)=1, obţinem şi
următorul corolar.

Corolar 3.7.1 Clasa limbajelor I.D.C. este închisă la homomorfism.

Teorema 3.7.3 Clasa limbajelor independente de context este închisă la homomorfismul invers.
▼Demonstraţie:
Fie h : Σ  Δ un homomorfism şi L un limbaj I.D.C.; atunci există un automat push-down
M  (Q, Δ, Γ, δ, q 0 , Z 0 , F) astfel încât L=T(M).
1
Construim un automat push-down M  care să accepte h (L) , astfel:
Cu intrarea a pentru automatul M', acesta generează h(a) şi simulează execuţia lui M cu această
intrare h(a). Dacă M' ar fi un automat cu număr finit de stări, atunci M' şi-ar schimba numai stările. În

- 50 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

cazul automatului push-down, M' poate şi să pună o mulţime de simboluri pe stivă şi, în plus, fiind
nedeterminist are o mulţime de posibilităţi de mişcare.
De aceea, dotăm M' cu un buffer (o zonă tampon) în care el poate să memoreze h(a). Atunci M'
poate să simuleze orice λ-mutare a lui M, dacă doreşte, şi să consume simbolurile lui h(a) câte unul la
fiecare moment, la fel cum face M. Pentru ca buffer-ul să fie o parte a controlului finit al lui M', el nu
poate fi oricât de lung. Se poate realiza asta permiţându-i lui M' să citească un simbol de intrare numai
când buffer-ul este gol. Astfel, în buffer este păstrat în fiecare moment un sufix al lui h(a), pentru un
anume a preluat de pe banda de intrare a lui M'.

Intrarea lui M'

h
Controlul
lui M'
Buffer Stiva lui
Controlul
lui M M şi M'

Figura 3.7.1
Automatul push-down M' acceptă cuvântul de intrare w dacă buffer-ul este vid şi M este într-o
stare finală. În acest fel, M a acceptat h(a) pentru fiecare simbol de intrare a, deci a acceptat h(w).
1
Astfel, L(M')= {w h(w)  L(M)} , adică: L(M')= h (L(M))
Construcţia formală este M   (Q, Σ, Γ, δ,[q 0 , λ], Z 0 , F  λ) , unde:
Q’ = {[q,x] | q  Q, iar x este un suffix al lui h(a),a }
Funcţia de tranziţie δ :
1) ([p, x], γ)  δ([q, x], λ, Y) pentru fiecare (p, γ)  δ(q, λ, Y) .
Astfel, M' simulează λ-mutările lui M, indiferent de conţinutul din buffer.
2) ([p, x], γ)  δ([q, ax], λ, Y) dacă (p, γ)  δ(q, a, Y) .
Astfel, M' simulează mutările lui M pe intrarea a din Σ, eliberând a din capul buffer-ului.
3) ([q, h(a)], Y)  δ([q, λ], a, Y) pentru toţi a  Σ şi Y  Γ .
În acest mod, M' încarcă în buffer h(a), citind a de pe intrarea M', în timp ce starea şi stiva lui M rămân
neschimbate.
1
Să demonstrăm că L(M')= h (L(M)) .
a) Mai întâi, să observăm că printr-o aplicare a regulii (3) urmată de o aplicare a regulilor (1) şi (2),
dacă (q, h(a), α) ├ M (p, λ, β) ,

atunci ([q, λ], a, α) ├ M ([q, h(a)], λ, α) ├ M ([p, λ], λ, β) .
 
Astfel, dacă M acceptă h(a), adică dacă (q 0 , h(w), Z 0 ) ├ M (p, λ, β) pentru p  F şi β  Γ , atunci
([q 0 , λ], w, Z 0 ) ├ M ([p, λ], λ, β) ,
astfel încât M' acceptă w.
1
Deci L(M')  h (L(M)) .
b) Reciproc, să presupunem că M' acceptă intrarea w=a1a2…an. Atunci, pentru că regula (3) poate fi
aplicată numai cu buffer-ul vid (precum arată a doua componentă a stării lui M), şirul de mişcări ale lui
M' ce conduc la acceptare poate fi scris ca:

- 51 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

([q 0 , λ], a 1a 2 ...a n , Z 0 ) ├ M ([p1 , λ], a 1a 2 ...a n , α1 ) ├ M ([p1 , h(a 1 )], a 2 ...a n , α1 ) ├ M
  
├ M ([p 2 , λ], a 2 ...a n , α 2 ) ├ M ([p 2 , h(a 2 )], a 3 ...a n , α 2 ) ├ M . . .. . . .
  
├ M ([p n , λ], a n , α n ) ├ M ([p n , h(a n )], λ, α n ) ├ M ([p n 1 , λ], λ, α n 1 ) , unde p n+1 F.
Tranziţia din starea [p i , λ] în [p i , h(a i )] se face prin regula (3) iar celelalte tranziţii prin
regulile (1) şi (2).
Astfel, (p1 , α1 )  δ(q 0 , λ, Z 0 )
şi i : (p i 1 , α i 1 )  δ(p i , h(a i ), α i )
deci obţinem o recunoaştere şi din partea lui M:
(q 0 , h(a 1a 2 ...a n ), Z 0 ) ├ M ([p1 , λ], a 1a 2 ...a n , α1 ) ├ M ([p 2 , λ], a 2 ...a n , α 2 ) ├ M …├ M
([p n , λ], a n , α n ) ├ M ([p n 1 , λ], λ, α n 1 ) , unde p n+1 F.▲
Există câteva proprietăţi ale mulţimilor regulate care nu se păstrează la mulţimile I.D.C., şi
anume proprietăţile de închidere la intersecţie şi complementare.

Teorema 3.7.4 Clasa limbajelor I.D.C. nu este închisă relativ la intersecţie.


▼Demonstraţie:
Să presupunem, prin absurd, că intersecţia oricăror limbaje I.D.C. este tot un limbaj I.D.C. Să
construim un contraexemplu:
i i i
Am demonstrat că limbajul L  {a b c i  1} nu este independent de context (v. Observaţia
3.4.1). Considerăm acum două limbaje care sunt I.D.C.:
L1  {a i b i c j i  1, j  1}
L 2  {a i b j c j i  1, j  1}
Pentru aceste limbaje este uşor să construim câte un automat push-down sau sau câte o gramatică I.D.C.;
spre exemplu, o gramatică pentru generarea limbajului L2 ar putea avea setul de reguli:
{S  AB, A  aA, A  a, B  bBc, B  bc} .
Dar L  L1 L 2 şi L nu este I.D.C., ceea ce contrazice presupunerea făcută. ▲

Corolar 3.7.2 Clasa limbajelor I.D.C. nu este închisă relativ la complementare.


▼Demonstraţie:
Ştim că clasa limbajelor I.D.C. este închisă la reuniune. Presupunând că ar fi închisă şi la
operaţia de complementare, şi ţinând cont de relaţiile lui de Morgan privind complementarea reuniunii (
C(A B)=C(A) C(B) ), am obţine concluzia că are loc închiderea şi la intersecţie, ceea ce contrazice
Teorema 3.7.4. ▲

Teorema 3.7.5 Dacă L este un limbaj I.D.C. iar R este o mulţime regulată, atunci L R este un limbaj
I.D.C.
▼Demonstraţie:
Fie L=T(M), M fiind un automat push-down, M  (Q M , Σ, Γ, δ M , q 0 , Z 0 , FM )
Fie şi R=T(A), unde A este un automat finit nedeterminis, A  (Q A , Σ, δ A , p 0 , FA )
Construim un automat push-down M' pentru limbajul L R , într-un mod care să simuleze
funcţionarea în paralel a lui M şi A: M' simulează mişcările lui M pe intrarea λ fără a schimba starea lui
A. Când M face o mişcare pe simbolul de intrare a, M' simulează această mişcare şi de asemenea
simulează schimbarea stării lui A pentru simbolul a. Automatul M' acceptă o intrare dacă şi numai dacă
atât A cât şi M o acceptă.
Construcţia formală a lui M' este următoarea: M   (Q A  Q M , Σ, Γ, δ,[p 0 , q 0 ], Z 0 , FA  FM ) ,

- 52 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

Intrarea lui A, M şi M'

Stiva lui
Controlul M şi M'
lui M' Controlul Controlul
lui A lui M

Figura 3.7.2

unde δ este definit astfel:


δ A (p, a)  p
([p, q ], γ)  δ([p, q], a, X) atunci când 
(q , γ)  δ M (q, a, X)
Desigur, dacă a  λ atunci p  p .
Să demonstrăm acum faptul că L R =T(M')
i
a) Se demonstrează uşor prin inducţie relativ la i că dacă ([p 0 , q 0 ], w, Z 0 ) ├ M ([p, q], λ, γ) , atunci
(q 0 , w, Z 0 ) ├ iM (q, λ, γ)
i
şi (p 0 , w) ├ A (p, λ)
 pentru i=0 rezultatul e trivial, deoarece luăm p=p0, q=q 0, γ=Z 0 şi w=λ.
 presupunem afirmaţia adevărată pentru i-1 şi fie
([p 0 , q 0 ], xa, Z 0 ) ├ iM-1 ([p' , q' ], a, β) ├ M ([p, q], λ, γ) ,
unde w=xa şi a  Σ sau a=λ.
Conform ipotezei de inducţie, rezultă că:
δ A (p 0 , x)  p
(q 0 , x, Z 0 ) ├ M (q , λ, β)
În plus, conform definiţiei,
δ A (p, a)  p şi (q , a, β) ├ M (q, λ, γ)
Utilizând toate acestea, obţinem:
δ A (p 0 , xa)  p
(q 0 , xa, Z 0 ) ├ M (q, λ, γ)
xa  T(A)
sau, altfel scris,  , ceea ce trebuia demonstrat.
xa  T(M)
b) Reciproc, se procedează într-o manieră similară, pentru a arăta că daca
(q 0 , w, Z 0 ) ├ iM (q, λ, γ) şi (p 0 , w) ├ Ai (p, λ) atunci ([p 0 , q 0 ], w, Z 0 ) ├ M ([p, q], λ, γ) ▲

Teorema 3.7.6 Clasa limbajelor independente de context este închisă în raport cu operaţia de oglindire.
▼Demonstraţie:
Fie G o gramatică independentă de context de forma:

- 53 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

G = (V N, VT, S, P) şi L = L(G).
Construim o nouă gramatică G’ = (V N, VT, S, P”), în care fiecare regulă din mulţimea regulilor, P, este
înlocuită cu o regulă similară în care membrul drept este oglinditul membrului drep al regulei
corespunzătoare din P:
P’ = {A → ~ u | A → u  P}
Se observă că regulile din P’ sunt tot independente de context. Este uşor de demonstrat că:
~
L(G’) = L ▲

Exemplul 3.7.2 Fie limbajul L  {ww w {a, b} } . Să se exemplifice proprietăţile de închidere.
▼ Limbajul L este format din cuvintele ale căror jumătate stângă este identică cu jumătatea dreaptă.
Presupunem că acest limbaj ar fi I.D.C.
   
Din Teorema 3.7.5 rezultă că limbajul L1  L a b a b ar fi şi el I.D.C.; dar
L1  {a i b j a i b j i  1, j  1} nu este de acest tip, fapt ce se poate vedea cu ajutorul teoremei de
pompare:
q q q q
Fie p,q  N . Alegem z = a b a b = uvwxy, unde |v| + |x| > 0, |vwx|  q. Posibilităţile de
alegere ale subcuvântului vwx sunt multiple (aibj cu i+j  q , bi cu i  q , bj-iai cu i  j  q ), ele însă nu
i i
permit crearea de cuvinte uv wx y care să fie tot din L1 (proprietatea egalităţii jumătăţilor nu se poate
păstra prin pompare).
Din contradicţia obţinută rezultă că limbajul L considerat iniţial nu este I.D.C.
Să mai observăm şi faptul că se poate demonstra că L1 nu este I.D.C. şi fără a folosi teorema de
pompare, reducând acest limbaj la limbajul
L 2  {a i b j c i d j i  1, j  1} .
1
Fie h(a)=h(c)=a şi h(b)=h(d)=b. Atunci h (L1 ) este format din toate cuvintele de forma
 
x1x2x3x4, unde x1 şi x3 au aceeaşi lungime în {a, c} , iar x 2 şi x4 au aceeaşi lungime în {b, d} .
1 * * * *
Atunci h (L1 ) a b c d  L 2 .
Dacă L1 ar fi I.D.C., atunci (din Teoremele 3.7.3 şi 3.7.5) rezultă că L2 ar fi şi el I.D.C., ceea ce
ştim că este fals.
Astfel s-a arătat, din nou, faptul că L1 nu este I.D.C. ▲

§ 3.7 Exerciţii

1. Să se construiască câte o gramatică independentă de context pentru fiecare din mulţimile următoare:
a. Mulţimea tuturor palindroamelor peste alfabetul {a,b}.
b. {an b2n | n > 0}
c. {an+1 b3n | n > 0}
d. {ai bj | i  j}
e. {ai bj ck | i  j sau j  k }
f. {u # ~ u | u  {a,b}* }
2. Considerăm gramatica:
G = ({S, T, L}, {a, b, +, -, x, /, [, ] }, S, P),
unde mulţimea P este formată din regulile:
S→T+S T→LxT L→[S]
S→T–S T→L/T L→a
S→T T→L L→b
Să se construiască o derivaţie şi un arbore de derivaţie pentru cuvântul: a + [a x b – b/a ]:

- 54 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

5. Să se construiască automate push-down pentru fiecare dintre mulţimile de la problema 1.

6. Să se construiască automate push-down pentru fiecare dintre mulţimile următoare:


d. {w | w  {0,1}* N 0(w) = N1(w)}, unde N0(w) reprezintă numărul de apariţii ale simbolului 0 în w;
e. {ai bj | i ≤ j ≤ 2i}
f. Limbajul generat de gramatica G = ({S,A}, {a,b}, S, { S → aAA, A → bBS, A → aS, A → a})

7. Se consideră automatul push-down definit de M = ({q,p}, {0,1}, {Z,X}, , q, Z,  ), unde  este:


(q, 1, Z) = {(q, XZ)} (q, λ, Z) = {(q, λ)}
(q, 1, X) = {(q, XX)} (q, 0, X) = {(p, X)}
(p, 1, X) = {(p, λ)} (p, 0, Z) = {(q, Z)}
Să se construiască o gramatică independentă de context care să genereze N(M).

8. Se consideră limbajul L = {an bn | n ≥ 1}  {an b2n| n ≥ 1}. Să se arate că L este un limbaj


independent de context (se construieşte un automat push-down nedeterminist).

Sfârşit

- 55 -
LIMBAJE FORMALE ŞI TEORIA AUTOMATELOR

BIBLIOGRAFIE

[1]. AHO, A.V., ULLMAN, J. D. “The theory of parsing, translation and compiling” Prentice Hall-
London, 1972.
[2]. AHO, A.V., SETHI, R., ULLMAN, J.D. “Compiling, Principles, Techniques and Tools”, Addison-
Wesley, Reading, Mass., 1988.
[3]. GRIES, D. “Compiler construction for digital computers”, New -York, John Weley, 1971.
[4]. HOPCROFT, J.E., ULLMAN, J. D. “Formal Languages and their relation to Automata” , Addison-
Wesley, Reading, Mass., 19769.
[5]. HOPCROFT, J.E., ULLMAN, J. D. “Introduction to automata theory, Languages and Computation” ,
Addison-Wesley, 1979.
[6]. IACOB P., MARINESCU D. "An Optimal Representation of the Nondeterministic Finite
Automaton by a Set - Union Knapsack Problem" Proceedings of the International Conference "Symetry
and Antisymetry in Mathematics, Formal Languages and Computer Science" Brasov 1996 pp 47-48.
[7]. KOZEN, D.C.,“ Automata and Computability”, Springer, 1997.
[8]. LIVOVSCHI, L. GEORGESCU, H. “Bazele informaticii”, Ed. Didactică şi Pedagogică, Bucureşti,
1985.
[9]. MARCUS, S. “ Lingvistica Matematică”, Ed. Didactică şi Pedagogică, Bucureşti, 1973.
[10]. MARINESCU D.,. “- “O masina Turing cu trei benzi universală pentru algoritmi normali” , Bul.
Univ. Braşov, seria C, Vol. XX – 1978, pp. 87 -100.
[11]. MARINESCU D., - “A bidimensional Turing machine for the cutting stock problem with quillotine
restrictions” - Proceeding of the scientific symposion with the contribution of teachers and researchers
from the Republic of Moldova , Brasov, 1991, pp 73 -83
[12]. MARINESCU D., - “Some Turing machines for the determination of the cuts in a cutting-stock
model” - Proceeding of the scientific symposion with the contribution of teachers and researchers from
the Republic of Moldova , Brasov 1991, pp 85 -96
[13]. MARINESCU D., " The Use of Didactic Software JFLAP for Formal Languages "Report TR--HH-
10-97 Restructuring of the (re)training of school teachers In Computer science- Computer Libris Agora,
ISBN 973-97515-1-2, Cluj-1997, pp.240-251.
[14]. M ARINESCU D., IACOB P., VLADAREAN C.- “ An Algorithm for Optimal Representation of a
Nondeterministic Finite Automaton By a set-union Knapsack Problem”, Proceedings of the 2-th
International Conference "Symetry and Antisymetry in Mathematics, Formal Languages and Computer
Science"- Satelite Conference of 3 ECM- Brasov 2000, pp 199-206.
[15] MARINESCU, D. “Limbaje Formale si Teoria Automatelor”, Ed. Univ. Transilvania, Brasov, 2003.
[15]. MOLDOVAN, G., CIOBAN, V., LUPEA,M. “ Limbaje Formale şi Teoria Automatelor-
Culegere de probleme”, Ed. Mesagerul, Cluj-Napoca, 1997.
[16]. MARUŞCIAC, I. “Teoria Algoritmilor”, Ed. Didactică şi Pedagogică, Bucureşti, 1966.
[17]. ORMAN, G. “Limbaje Formale”, Ed. Tehnică, Bucureşti, 1982.
[18]. ORMAN, G. “Limbaje Formale şi acceptori”, Ed. Albastră, Cluj-Napoca, 2002.
[19]. PĂUN, GH. “ Gramatici matriceale”, Ed. Ştiinţufică şi Enciclopedică, Bucureşti, 1981.
[20]. PĂUN, GH. “ Mecanisme generative ale proceselor economice”, Ed. Tehnică, Bucureşti, 1982.
[21]. PĂUN, GH. “ Probleme actuale în Teoria Limbajelor Formale”, Ed. Ştiinţufică şi Enciclopedică,
Bucureşti, 1984.
[21]. SALOMAA, A. “Formal Languages”, Academic Press, New-York, 1973.
[22]. SIMOVICI, D. “Limbaje Formale şi Tehnici de compilare”, Ed. Didactică şi Pedagogică, Bucureşti,
1978.
[23]. SIPSER, M. ” Introduction to the theory of computation”, PWS publishing Company, Boston,
1996.

- 56 -

S-ar putea să vă placă și