Sunteți pe pagina 1din 60

Seminar LFA gr.

141-144, 211
@ MN 2014-2015

Cuprins
~ Seminar 1 ~ .................................................................................................................. - 4 Automat Finit Determinist .......................................................................................... - 4 Automat Finit Nedeterminist ...................................................................................... - 4 EXEMPLE: ................................................................................................................. - 5 L1 = a* = {an, n 0} ............................................................................................... - 5 L2 = a+ = {an, n 1} ............................................................................................... - 5 L3 = {a2n, n 0} ..................................................................................................... - 5 L4 = {a2n+1, n 0}................................................................................................... - 5 L5 = {a2n, n 1} ..................................................................................................... - 5 L6 = {a2n+1, n 1}................................................................................................... - 6 L7 = {a2n b3m, n 0, m 0} .................................................................................... - 6 L8 = {a2n b3m, n 1, m 0} .................................................................................... - 7 L9 = {a2n b3m, n 0, m 1} .................................................................................... - 7 L10 = {a2n b3m, n 1, m 1} .................................................................................. - 7 Operaii cu limbaje ...................................................................................................... - 8 Reuniune L L1 L2 ............................................................................................ - 8 Concatenare L L1 L2 .......................................................................................... - 8 Stelare L L*1 L1n ........................................................................................... - 8 -

n0

Ridicare la putere nenul L L1 L1n ............................................................. - 8 n1

Compunerea automatelor finite ............................................................................... - 9 Reuniune ................................................................................................................. - 9 Concatenare............................................................................................................. - 9 Stelare ..................................................................................................................... - 9 Transformarea AFNAFD ........................................................................................ - 9 EXEMPLU:........................................................................................................... - 10 Verificare acceptare cuvnt de ctre automat finit ................................................... - 12 ~ Seminar 2 ~ ................................................................................................................ - 14 Automat Finit Nedeterminist cu tranziii .............................................................. - 14 nchiderea unei stri .......................................................................................... - 14 Verificare acceptare cuvnt de ctre automat AFN .......................................... - 14 EXEMPLU:........................................................................................................... - 15 Transformarea AFN AFD ................................................................................ - 18 EXEMPLU:........................................................................................................... - 19 Automatul minimal ................................................................................................... - 22 EXEMPLU:........................................................................................................... - 23 Condiii asupra numrului de apariii ale unui caracter ntr-un cuvnt .................... - 25 EXEMPLE: ........................................................................................................... - 25 L1 {w {0,1} a. . | w |0 par , | w |1 impar} ........................................................ - 25 L2 {w {a, b} a. . | w |a 2n 1, | w |b 3m 2, n 0, m 0} ............................... - 26 -

-1-

Seminar LFA gr.141-144, 211


@ MN 2014-2015
L3 {w {a, b} a. . aaa i bbb nu apar n w} ....................................................... - 26 -

~ Seminar 3 ~ ................................................................................................................ - 27 Expresii regulate ....................................................................................................... - 27 Precedena operaiilor , , ................................................................................ - 27 Transformarea expresie_regulat automat_finit .................................................. - 27 Transformarea automat_finit expresie_regulat .................................................. - 28 Cteva formule utile .............................................................................................. - 29 EXEMPLU:........................................................................................................... - 29 Gramatici................................................................................................................... - 31 Gramatici independente de context (GIC) / Context-free grammars (CFG) ............ - 31 Gramatici liniare ................................................................................................... - 31 Gramatici liniare la dreapta ................................................................................... - 31 Gramatici liniare la stnga .................................................................................... - 31 Gramatici regulate ................................................................................................. - 31 EXEMPLE (gramatici regulate): .............................................................................. - 32 L1 = a* = {an, n 0} ............................................................................................. - 32 L2 = a+ = {an, n 1} ............................................................................................. - 32 L3 = {a2n, n 0} ................................................................................................... - 32 L4 = {a2n+1, n 0}................................................................................................. - 32 L5 = {a2n, n 1} ................................................................................................... - 32 L6 = {a2n+1, n 1}................................................................................................. - 32 L7 = {a2n b3m, n 0, m 0} .................................................................................. - 32 Analogia ntre automate finite i gramatici regulate ............................................. - 33 ~ Seminar 4 ~ ................................................................................................................ - 34 EXEMPLE (gramatici independente de context): .................................................... - 34 L1 = {anbn, n 0} ................................................................................................. - 34 L2 = {anbn, n 1} ................................................................................................. - 34 L3 = {anb2n, n 1} ................................................................................................ - 35 L4 = {a2nbkc3n, n 0, k 1} ................................................................................. - 35 L5 = {a2nbkc3n, n 1, k 1} ................................................................................. - 35 L6 = {a2nc3nbk, n 1, k 1} ................................................................................. - 36 Verificare generare cuvnt de ctre gramatic...................................................... - 36 L7 = {an bk c2k dn, n 1, k 0} ............................................................................. - 38 L8 = {an bk c2k dn, n 0, k 1} ............................................................................. - 38 L9 = {an b2n c2k dk, n 0, k 1} ............................................................................ - 39 L10 = {an b2n ck dm e3k, n,k,m 0}......................................................................... - 39 Transformarea GIC gramatic n F.N. Chomsky ................................................. - 40 Automatul Push-Down (APD) / Automatul Stiv .................................................... - 43 Modaliti de acceptare a unui cuvnt de ctre un APD ....................................... - 44 EXEMPLE (automate push-down): .......................................................................... - 45 L1 = {anbn, n 1} ................................................................................................. - 45 L2 = {anb2n, n 0} ................................................................................................ - 46 L3 = {a2n bk c3k dn, n 1, k 1} ............................................................................ - 47 Verificare acceptare cuvnt de ctre un APD ....................................................... - 48 -

-2-

Seminar LFA gr.141-144, 211


@ MN 2014-2015
L4 = {a2n b3n c2k dk, n 1, k 1} ........................................................................... - 48 ~ Seminar 5 ~ ................................................................................................................ - 50 EXEMPLE (automate push-down) [continuare]: ..................................................... - 50 L5 = { w wR | w {a,b,c}* \ {} } (palindroame de lungime par) ................... - 50 L6 = {an bk, n > k 1} .......................................................................................... - 52 L7 = {an bk, k > n 1} .......................................................................................... - 52 L8 = {an bk, n 1, k 1, n k} ............................................................................ - 53 L9 = {a2n b3k, n 1, k 1, n k} .......................................................................... - 54 Algoritmul CYK (verificare generare cuvnt de ctre gramatic n F.N.Chomsky) - 55 EXEMPLU:........................................................................................................... - 56 ~ Seminar 6 ~ ................................................................................................................ - 59 Lema de pompare pentru limbajele regulate:............................................................ - 59 L1 = {ak^2, k 1} = {a1, a4, a9, a16, a25, a36, a49, a64, a81, a100, ...} ......................... - 59 L2 = {akbk, k 1} = {ab, a2b2, a3b3, a4b4, a5b5, ...} ............................................... - 60 -

-3-

Seminar LFA gr.141-144, 211


@ MN 2014-2015

~ Seminar 1 ~
(AFD; AFN; Operaii cu limbaje; Compunere automate; Transformarea AFNAFD)

Automat Finit Determinist


AFD = (Q, , q0, , F)
Q mulimea de stri
alfabetul de intrare
q0 Q starea iniial
F Q mulimea de stri finale
: Q Q funcia de tranziie (delta)
Pentru a verifica dac un cuvnt este sau nu acceptat de un automat AFD:
- se pornete din starea iniial q0
- ct timp este posibil:
- avnd starea curent i caracterul curent din cuvnt,
aplicm funcia pentru a determina noua stare
- repetm pentru noua stare i caracterul urmtor din cuvnt
- algoritmul se termin n 3 cazuri:
- chiar dac nu s-a citit complet tot cuvntul,
dar automatul s-a blocat pentru c funcia de tranziie nu era definit
pentru starea curent i caracterul curent cuvnt neacceptat
- dac ntreg cuvntul a fost citit, dar automatul a ajuns ntr-o stare
care nu este final (adic din mulimea Q\F) cuvnt neacceptat
- dac ntreg cuvntul a fost citit, iar automatul a ajuns ntr-o stare
care este final (adic din mulimea F) cuvnt acceptat

Automat Finit Nedeterminist


AFN = (Q, , q0, , F)
Q mulimea de stri
alfabetul de intrare
q0 Q starea iniial
F Q mulimea de stri finale
: Q 2Q funcia de tranziie (delta)
Diferena dintre AFD i AFN const n modul n care este definit funcia de tranziie.
La AFD: pentru orice pereche de o stare i un caracter, avem cel mult o stare de
continuare (putem s nu avem niciuna, adic funcia s fie nedefinit pentru acele valori).
La AFN: pentru orice pereche de o stare i un caracter, avem ca posibilitate de continuare
o submulime a mulimii de stri Q (putem s nu avem niciuna dac funcia este
nedefinit; putem s avem o singur stare de continuare; sau putem s avem mai multe
stri de continuare, aici apare nedeterminismul).

-4-

Seminar LFA gr.141-144, 211


@ MN 2014-2015
Pentru a verifica dac un cuvnt este sau nu acceptat de un automat AFN:
Se procedeaz analog ca n cazul AFD-ului, excepia fiind c la fiecare aplicare a funciei
delta trebuie s reinem toate posibilitile de stri de continuare, iar la pasul urmtor s
reaplicm delta pentru toate acestea mpreun cu caracterul curent.

EXEMPLE:
L1 = a* = {an, n 0} = {=a0, a=a1, aa=a2, aaa=a3, aaaa=a4, }

Ambele soluii sunt AFD-uri.


Obs: De fiecare dat cnd (cuvntul vid) trebuie s fie recunoscut de un AFD sau de un
AFN (simplu, adic AFN fr -tranziii), trebuie ca starea iniial q0 s fie i stare final.

L2 = a+ = {an, n 1} = {a=a1, aa=a2, aaa=a3, aaaa=a4, }

Diferena fa de exemplul anterior?


Aici nu trebuie acceptat, deci starea iniial q0 trebuie s nu fie stare final.

L3 = {a2n, n 0} = {=a0, aa=a2, aaaa=a4, aaaaaa=a6, }


L4 = {a2n+1, n 0} = {a=a1, aaa=a3, aaaaa=a5, }

Cele dou automate au aceleai stri i aceleai tranziii. Difer doar mulimea strilor
finale. Dac setm q0 final, atunci vor fi acceptate cuvintele de lungime par (inclusiv
zero), iar dac setm n schimb q1 final, atunci vor fi acceptate cuvintele de lungime
impar.
Obs: De fiecare dat cnd la putere apare un coeficient, nseamn c vom avea un circuit
de lungime egal cu acest coeficient (sau lungime proporional cu el, n cazul n care
puterea era aplicat unui cuvnt, nu doar unei litere).

L5 = {a2n, n 1} = {aa=a2, aaaa=a4, aaaaaa=a6, }

-5-

Seminar LFA gr.141-144, 211


@ MN 2014-2015
n primul rnd trebuie s ne asigurm c obligm automatul s citeasc cei doi de a (cel
mai mic cuvnt din limbaj) i c nu accept ceva mai scurt de att. Pentru asta, adugm
cele trei stri i tranziiile de la q0 spre q1 i de la q1 spre q2, iar apoi setm q2 s fie stare
final. Apoi vedem c avem coeficientul 2 la putere, deci trebuie s avem un circuit de
lungime 2. Avem dou variante: fie adugm tranziie de la q2 spre q1, fie adugm
tranziie de la q1 spre q0. Ambele automate recunosc acelai limbaj (dar primul este AFD,
iar al doilea este AFN pentru c din q1 cu a putem ajunge i n q0 i n q2).

L6 = {a2n+1, n 1} = {aaa=a3, aaaaa=a5, aaaaaaa=a7, }

La fel ca la exemplul anterior, ne vom asigura nti c automatul nu accept nimic mai
scurt dect cel mai mic cuvnt din limbaj, adic aaa. Deci vom aduga cele 4 stri i
tranziiile ctre dreapta i vom seta starea q3 final. Apoi pentru a avea circuitul de
lungime 2 (egal cu coeficientul lui n), avem cele trei variante. Dac adugm tranziia de
la q3 spre q2 vom obine un AFD, iar dac alegem una din celelalte dou variante vom
obine un AFN.

L7 = {a2n b3m, n 0, m 0}
= {, a2, a4, a6, a8, , b3, b6, b9, b12, , a2b3, a2b6, a4b3,a4b6, a6b3, a6b6, }

n primul rnd vedem c cel mai mic cuvnt ce trebuie acceptat este , deci setm starea
iniial q0 s fie i stare final. Apoi facem circuit de lungime 2 cu litera a. Dup ce
citim un numr par de a-uri (inclusiv zero), ajungem n starea q0, deci de aici trebuie s
pornim cu citirea b-urilor. Adugm q2, q3 i cele dou tranziii cu b. tim c va trebui s
avem un circuit de lungime 3 cu b-uri, dar trebuie s fim de asemenea ateni c literele de
a i de b nu pot fi amestecate ntre ele, dup ce am citit primul b nu mai avem voie
s citim niciun a. Deci nu putem avea muchie de ntoarcere de la q3 ctre q0 pentru c
n q0 se pot citi a-uri. nseamn c avem nevoie de a nou stare, aa c adugm q4 i
tranziii de la q3 spre q4 i de la q4 spre q2 pentru a nchide circuitul.

-6-

Seminar LFA gr.141-144, 211


@ MN 2014-2015

L8 = {a2n b3m, n 1, m 0}
= {a2, a4, a6, a8, , a2b3, a2b6, a4b3,a4b6, a6b3, a6b6, }
n acest caz, cuvintele conin obligatoriu a-uri, b-urile putnd s apar sau nu.

Trebuie s obligm automatul s citeasc numr par de a-uri, dar cel puin dou, deci nu
se mai poate ntoarce din q1 n q0 cu al doilea a, ci trebuie s continue spre q2 i setm
q2 ca stare final. Apoi ncepnd din q2 citim doi de b, dar pentru al treilea nu putem
nchide circuitul ntorcndu-ne n q2 dac am ales ca muchie de ntoarcere pentru a-uri de
la starea q2 spre starea q1. Deci trebuie s adugm i starea q5 care va fi i ea final i
cele dou tranziii de la q4 spre q5 i de la q5 spre q3.

Dar dac am fi ales ca muchie de ntoarcere pentru a-uri de la q1 spre q0?


Atunci nu am mai fi avut nevoie de starea q5, pentru c puteam s nchidem circuitul burilor de la q4 spre q2 i am fi avut doar starea q2 final.
Doar c n acest caz am fi obinut un AFN (din cauza lui q1).

L9 = {a2n b3m, n 0, m 1}
= {b3, b6, b9, b12, , a2b3, a2b6, a4b3,a4b6, a6b3, a6b6, }
n acest caz, cuvintele conin obligatoriu b-uri, a-urile putnd s apar sau nu.

Observm c automatul este foarte asemntor cu cel pentru limbajul L7.


Diferena este c acum starea q0 nu mai este stare final, ceea ce nseamn c putem sau
nu s trecem prin circuitul de a-uri, dar sigur suntem obligai s citim b-uri nainte de a
ajunge ntr-o stare final.

L10 = {a2n b3m, n 1, m 1}


= {a2b3, a2b6, a4b3,a4b6, a6b3, a6b6, }
n acest caz, cuvintele conin obligatoriu i a-urile, i b-urile.

-7-

Seminar LFA gr.141-144, 211


@ MN 2014-2015

Acest automat seamn cu cel pentru L8 (prima variant), unde eram obligai s avem auri. n plus, pentru c acum trebuie s avem i b-uri, starea q2 nu va mai fi stare final.

Operaii cu limbaje
Reuniune L L1 L2
L {w | w L1 sau w L2 }
Exemplu:
L1 = {a, ab, abc}
L2 = {a, bd, cd}
L = {a, ab, abc, bd, cd}

Concatenare L L1 L2
L {wi w j | wi L1 i w j L2 }

Exemplu:
L1 = {a, ab, abc}
L2 = {a, bd, cd}
L = {aa, abd, acd, aba, abbd, abcd, abca, abcbd, abccd}

Stelare L L*1 L1n


n0

L {w1w2 ...wn | wi L1 pentru orice 1 i n}


n
1

Exemplu:
L1 = {a, ab, abc}
(L1)* = { ; a, ab, abc ; aa, aab, aabc, aba, abab, ababc, abca, abcab, abcabc ; }
Obs: Cuvntul vid va aparine limbajului stelat, indiferent dac nainte aparinea sau nu
limbajului iniial.

Ridicare la putere nenul L L1 L1n


n1

La fel ca la stelare, doar c nu mai exist cuvntul vid. L L* \ {}

-8-

Seminar LFA gr.141-144, 211


@ MN 2014-2015
Obs: Atenie la ridicarea la putere a cuvintelor! (S nu distribuii puterea ca la nmulire,
ci concatenai cuvntul cu el nsui de cte ori spune puterea.)
(abc)2 = abcabc
;
(abc)2 aabbcc = a2b2c2

Compunerea automatelor finite


Reuniune
Dac avem deja construite dou automate finite (avnd strile iniiale q01 i q02 i
mulimile strilor finale F1 i F2) care accept respectiv limbajele L1 i L2 i dorim s
obinem un automat finit care s accepte limbajul L L1 L2 :
- introducem o nou stare q0 care va fi noua stare iniial
- adugm dou -tranziii de la q0 spre q01 i de la q0 spre q02
- noua mulime de stri finale va fi F F1 F2

Concatenare
Dac avem deja construite dou automate finite (avnd strile iniiale q01 i q02 i
mulimile strilor finale F1 i F2) care accept respectiv limbajele L1 i L2 i dorim s
obinem un automat finit care s accepte limbajul L L1 L2 :
- noua stare iniial va fi q01, starea iniial a primului automat
- adugm -tranziii de la fiecare stare final din F1 spre q02
- noua mulime de stri finale va fi F = F2

Stelare
Dac avem deja construit un automat finit (avnd starea iniial q01 i mulimea strilor
finale F1) care accept limbajul L1 i dorim s obinem un automat finit care s accepte
limbajul L L*1 :
- introducem o nou stare q0 care va fi noua stare iniial
- adugm o -tranziie de la q0 spre q01
- adugm -tranziii de la fiecare stare final din F1 spre q0
- noua mulime de stri finale va fi F = {q0} (sau putem lsa F q0 F1 )

Transformarea AFNAFD
Avnd dat un AFN (reprezentat sub form de graf), vom calcula funcia delta completnd
un tabel astfel:
La capetele de linie vom pune numele strilor AFN-ului (elementele mulimii Q):
q0, q1, ..., q|Q|-1
La capetele de coloan vom pune caracterele alfabetului AFN-ului (elementele
mulimii )
Calculm coninutul primelor |Q| linii astfel: elementul aflat pe linia li i coloana
cj reprezint mulimea de stri n care se poate ajunge n AFN dac pornim din
starea de pe linia li (n cazul acesta: qi-1 dac numerotm liniile ncepnd cu 1) i
citim caracterul de pe coloana cj. Pentru a afla aceast mulime, ne uitm la graful
-9-

Seminar LFA gr.141-144, 211


@ MN 2014-2015

care reprezint AFN-ul, cutm starea de la linia li i pentru fiecare tranziie cu


litera de la coloana cj care pornete din aceast stare, adugm starea destinaie a
tranziiei la mulimea curent din tabel.
Apoi trebuie s calculm aceast funcie delta i pentru noile mulimi de stri
obinute la paii anteriori (aceste calcule se fac cel mai simplu folosind doar liniile
din tabel calculate la pasul anterior, nu i graful automatului AFN)
(a) fie alegem s facem calculele pentru toate noile mulimi de stri, i abia apoi
s vedem care dintre ele vor aprea n AFD-ul obinut (tot fcnd
parcurgerea n adncime descris mai jos).
(b) fie alegem s facem calculele doar pentru noile mulimi de stri care vor
aprea n AFD: pentru a decide care vor fi acestea, facem un fel de parcurgere
n adncime a grafului care va reprezenta AFD-ul. Adic pornim cu starea q0
care va fi starea iniial a AFD-ului, apoi parcurgem prima linie a tabelului
(care conine calculele tranziiilor ce pleac din q0) i adugm la noul
automat toate aceste tranziii mpreun cu strile-destinaie calculate n tabel.
Apoi pentru toate aceste stri-destinaie, dac nu au deja n tabel un capt de
linie care s le corespund, l vom aduga i vom calcula acea linie astfel:
- fie noua stare-mulime {qk1, qk2, , qkp}. Pentru fiecare coloan cj,
calculm elementul din tabel fcnd reuniunea elementelor aflate pe
aceeai coloan cj i pe liniile corespunztoare strilor qk1, qk2, , qkp.
Apoi revenim la desenarea grafului AFD-ului, i adugm tranziiile proaspt
calculate mpreun cu strile-destinaie. Relum procedeul pn nu mai apar
stri noi.
Strile finale ale noului AFD obinut, vor fi acele stri-mulime (pot avea i un
singur element, nu neaprat mai multe) care conin cel puin una din strile care
erau finale pentru AFN-ul iniial.

EXEMPLU:
Se d AFN-ul urmtor:

Calculm tabelul pentru funcia delta: nti primele 3 linii folosind graful AFN-ului, apoi
urmtoarele linii folosind aceste prime 3 linii ale tabelului.
Vom avea dou coloane, pentru c alfabetul automatului iniial este = {a, b}.

q0
q1
q2

a
{q0, q1}
{q1, q2}
q2

b
q0
q1
q2

- 10 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015
Alegem varianta (b), adic s calculm doar acele stri care vor aprea n AFD.
(1) Pornim cu starea q0 i i adugm cele dou tranziii i strile-destinaie necesare,
adic {q0, q1} = q01 (prin notaie).

(2) Observm c a aprut noua stare q01 pentru care nu avem o linie n tabel, aa c o
adugm i o calculm pentru cele dou coloane.

(q01 , a) ({q0 , q1}, a)


{ (q0 , a)} { (q1 , a)}
{q0 , q1} {q1 , q2 } {q0 , q1 , q2 } q012

(q01 , b) ({q0 , q1}, b)


{ (q0 , b)} { (q1 , b)}
{q0 } {q1} {q0 , q1} q01

q0
q1
q2
q01

a
{q0, q1} = q01
{q1, q2} = q12
q2
{q0, q1, q2} = q012

b
q0
q1
q2
{q0, q1} = q01

(3) Revenim la desenul AFD-ului i adugm tranziiile care lipsesc, adic cele care
pleac din starea q01, mpreun cu strile-destinaie care lipsesc, adic q012.

(4) Pentru noua stare aprut, q012, i adugm linia n tabel i o calculm.

(q012 , a) ({q0 , q1 , q2 }, a)
{ (q0 , a)} { (q1 , a)} { (q2 , a)}
{q0 , q1} {q1 , q2 } {q2 } {q0 , q1 , q2 } q012

(q012 , b) ({q0 , q1 , q2 }, b)
{ (q0 , b)} { (q1 , b)} { (q2 , b)}
{q0 } {q1} {q2 } {q0 , q1 , q2 } q012

- 11 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015

q0
q1
q2
q01
q012

a
{q0, q1} = q01
{q1, q2} = q12
q2
{q0, q1, q2} = q012
{q0, q1, q2} = q012

b
q0
q1
q2
{q0, q1} = q01
{q0, q1, q2} = q012

(5) Revenim la graf i adugm tranziiile care pleac din starea q012.

(6) Observm c nu ne-a mai aprut nicio stare nou, deci nu ne-a rmas dect s marcm
strile finale i am obinul AFD-ul cerut. n AFN-ul iniial stare final era doar q2. Orice
stare-mulime din AFD-ul nostru care l conine pe q2 va fi stare final. Exist una
singur: q012.

Obs: Dac am fi ales varianta (a), atunci am fi calculat n tabel i linia corespunztoare
strii q12, ns observm c nici ea, dar nici strile q1 i q2 nu apar n AFD.

Verificare acceptare cuvnt de ctre automat finit


Folosim configuraii (sau descrieri instantanee) ale automatului, adic perechi
formate din starea curent i ct a mai rmas de citit din cuvntul de intrare, i aplicm
funcia delta ct timp este posibil (ne oprim fie cnd nu mai exist tranziie definit, fie
cnd se termin cuvntul). Dac la final ajungem n stare final, cuvntul va fi acceptat.
Pentru AFD:
(q0, bba) (q0, ba) (q0, a) (q01, )
Am terminat de citit cuvntul i am ajuns n starea q01, care nu este final, deci rezult c
automatul nu accept acest cuvnt.
(q0, babbaba) (q0, abbaba) (q01, bbaba) (q01, baba) (q01, aba) (q012, ba)
(q012, a) (q012, )

- 12 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015
Am terminat de citit cuvntul i am ajuns n starea q012, care este final, deci rezult c
automatul accept acest cuvnt.
Pentru AFN:
(q0, bba) (q0, ba) (q0, a) {(q0, ), (q1, )}
Am terminat de citit cuvntul i am avut dou drumuri posibile, care ne-au adus n strile
q0 i q1. Nici una din ele nu este stare final, deci cuvntul nu este acceptat.
(q0, babbaba) (q0, abbaba)
{(q0, bbaba), (q1, bbaba)}
{(q0, baba), (q1, baba)}
{(q0, aba), (q1, aba)}
{(q0, ba), (q1, ba), (q2, ba)}
{(q0, a), (q1, a), (q2, a)}
{(q0, ), (q1, ), (q2, )}
Am terminat de citit cuvntul i am avut apte drumuri posibile, care ne-au adus n strile
q0, q1 i q2. Exist printre ele o stare care este final, q2, deci cuvntul este acceptat.

- 13 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015

~ Seminar 2 ~
(AFN; Transformarea AFN AFD; Automatul minimal;
Condiii asupra numrului de apariii ale unui caracter ntr-un cuvnt)

Automat Finit Nedeterminist cu tranziii


AFN = (Q, , q0, , F)
Q mulimea de stri
alfabetul de intrare
q0 Q starea iniial
F Q mulimea de stri finale
: Q ( {}) 2Q funcia de tranziie (delta)
Diferena fa de AFN-ul simplu este c suntem ntr-o stare i putem citi fie un caracter
din alfabetul , fie cuvntul vid . Deci se poate ntmpla s ajungem ntr-o stare nou
fr s fi citit nicio liter nou din cuvntul de intrare, ci doar aplicnd tranziii.

nchiderea unei stri


Mulimea de stri n care se poate ajunge plecnd din starea q i aplicnd zero sau mai
multe tranziii se numete nchiderea strii q i se noteaz cu <q>.
Obs: Orice stare face parte din propria nchidere (pentru c (q, 0 ) q ; practic putem
presupune c orice stare are o tranziie implicit ctre ea nsi).

q {r | r (q, k )}
k 0

q {q} {qi | qi (q, 1 )} {qij | qij (q, 2 )} ...


Observm c mulimile se pot calcula inductiv dup puterea lui :
{qij | qij (q, 2 )} {qij | qi (q, 1 ), qij (qi , 1 )} .
Sau n general {r | r (q, k )} {r | s (q, k 1 ), r (s, 1 )} .

Verificare acceptare cuvnt de ctre automat AFN


Pentru a verifica dac un cuvnt este sau nu acceptat de un automat AFN:
Se procedeaz analog ca n cazul AFN-ului, doar c nainte de a cuta toate strile
posibile de continuare cu tranziii cu caracterul curent, trebuie s facem nchiderea
mulimii curente de stri. Iar dup ce a fost citit tot cuvntul de intrare, trebuie s facem o
ultim nchidere a strilor curente, pentru a obine mulimea final de stri n care
poate ajunge automatul pentru cuvntul dat.

- 14 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015
Obs: nchiderea unei mulimi de stri este egal cu reuniunea nchiderilor acelor
stri.
{qi1 , qi 2 , ..., qin } qi1 qi 2 ... qin

EXEMPLU:
Se d urmtorul AFN:

Calculm nchiderile tuturor strilor.

(q0 , 0 ) {q0 }
(q0 , 1 ) {q2 , q3 }
(q0 , 2 ) { (q2 , )} { (q3 , )} {q4 } {q5 } {q4 , q5 }
(q0 , 3 ) { (q4 , )} { (q5 , )} {q6 } {q2 , q6 } {q2 , q6 } dar q2 era deja n nchidere
(q0 , 4 ) { (q6 , )}
q0 {q0 , q2 , q3 , q4 , q5 , q6 }

(q1 , 0 ) {q1}
(q1 , 1 ) {q2 }
(q1 , 2 ) { (q2 , )} {q4 }
(q1 , 3 ) { (q4 , )} {q6 }
(q1 , 4 ) { (q6 , )}
q1 {q1 , q2 , q4 , q6 }

(q 2 , 0 ) {q 2 }
(q 2 , 1 ) {q4 }
(q 2 , 2 ) { (q 4 , )} {q6 }
(q 2 , 3 ) { (q6 , )}
q 2 {q 2 , q 4 , q6 }

- 15 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015

(q3 , 0 ) {q3 }
(q3 , 1 ) {q5 }
(q3 , 2 ) { (q5 , )} {q2 , q6 }
(q3 , 3 ) { (q2 , )} { (q6 , )} {q4 } {q4 }
(q3 , 4 ) { (q4 , )} {q6 } dar q6 era deja n nchidere
q3 {q2 , q3 , q4 , q5 , q6 }

(q4 , 0 ) {q4 }
(q4 , 1 ) {q6 }
(q4 , 2 ) { (q6 , )}
q4 {q4 , q6 }

(q5 , 0 ) {q5 }
(q5 , 1 ) {q2 , q6 }
(q5 , 2 ) { (q2 , )} { (q6 , )} {q4 } {q4 }
(q5 , 3 ) { (q4 , )} {q6 } dar q6 era deja n nchidere
q5 {q2 , q4 , q5 , q6 }

(q6 , 0 ) {q6 }
(q6 , 1 )
q6 {q6 }
Verificm dac un cuvnt este sau nu acceptat de automatul AFN dat.
pas 0: Pornim de la perechea (q0, abbaa).
pas 1a: Facem nchiderea mulimii curente de stri pentru a obine noua mulime de
stri.
<q0> = {q0, q2, q3, q4, q5, q6}
pas 1b: n fiecare stare din mulimea curent ncercm s citim simbolul curent din
cuvnt i obinem o nou mulime de stri.
(q0 , a) {q0 , q1}

(q2 , a) {q3 }
(q3 , a) {q6 }
(q4 , a) {q6 }
(q5 , a) {q6 }
( q6 , a )
Deci noua mulime de stri este {q0, q1, q3, q6}, iar cuvntul rmas este bbaa.
- 16 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015
pas 2a: Facem nchiderea mulimii curente de stri pentru a obine noua mulime de
stri.
q0 , q1 , q3 , q6 q0 q1 q3 q6
{q0 , q2 , q3 , q4 , q5 , q6 } {q1 , q2 , q4 , q6 } {q2 , q3 , q4 , q5 , q6 } {q6 }
{q0 , q1 , q2 , q3 , q4 , q5 , q6 }
pas 2b: n fiecare stare din mulimea curent ncercm s citim simbolul curent din
cuvnt i obinem o nou mulime de stri.
(q0 , b) {q2 }

(q1 , b)
( q2 , b)
(q3 , b) {q3 , q6 }
(q4 , b) {q5 }
(q5 , b) {q2 }
(q6 , b) {q6 }
Deci noua mulime de stri este {q2, q3, q5, q6}, iar cuvntul rmas este baa.
pas 3a: Facem nchiderea mulimii curente de stri pentru a obine noua mulime de
stri.
q2 , q3 , q5 , q6 q2 q3 q5 q6
{q2 , q4 , q6 } {q2 , q3 , q4 , q5 , q6 } {q2 , q4 , q5 , q6 } {6 6 }
{q2 , q3 , q4 , q5 , q6 }
pas 3b: n fiecare stare din mulimea curent ncercm s citim simbolul curent din
cuvnt i obinem o nou mulime de stri.
( q 2 , b)

(q3 , b) {q3 , q6 }
(q4 , b) {q5 }
(q5 , b) {q2 }
(q6 , b) {q6 }
Deci noua mulime de stri este {q2, q3, q5, q6}, iar cuvntul rmas este aa.
pas 4a: Facem nchiderea mulimii curente de stri pentru a obine noua mulime de
stri.
q 2 , q3 , q 5 , q 6 q 2 q 3 q 5 q 6
{q2 , q4 , q6 } {q2 , q3 , q4 , q5 , q6 } {q2 , q4 , q5 , q6 } {q6 }
{q2 , q3 , q4 , q5 , q6 }
pas 4b: n fiecare stare din mulimea curent ncercm s citim simbolul curent din
cuvnt i obinem o nou mulime de stri.

- 17 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015

(q2 , a) {q3 }
(q3 , a) {q6 }
(q4 , a) {q6 }
(q5 , a) {q6 }
( q6 , a )
Deci noua mulime de stri este {q3, q6}, iar cuvntul rmas este a.
pas 5a: Facem nchiderea mulimii curente de stri pentru a obine noua mulime de
stri.
q 3 , q 6 q3 q 6
{q2 , q3 , q4 , q5 , q6 } {q6 }
{q2 , q3 , q4 , q5 , q6 }
pas 5b: n fiecare stare din mulimea curent ncercm s citim simbolul curent din
cuvnt i obinem o nou mulime de stri.
(q2 , a) {q3 }

(q3 , a) {q6 }
(q4 , a) {q6 }
(q5 , a) {q6 }
( q6 , a )
Deci noua mulime de stri este {q3, q6}, iar cuvntul a fost citit n ntregime.
pas 6: Facem ultima nchidere a mulimii curente de stri pentru a obine mulimea
final de stri.
q 3 , q 6 q3 q 6
{q2 , q3 , q4 , q5 , q6 } {q6 }
{q2 , q3 , q4 , q5 , q6 }
pas 7: Verificm dac printre strile n care am ajuns este vreo una final.
{q2 , q3 , q4 , q5 , q6 } F {q2 , q3 , q4 , q5 , q6 } {q2 , q6 } {q2 , q6 }
Deci cuvntul abbaa este acceptat de automatul AFN dat.

Transformarea AFN AFD


Avnd dat un AFN (reprezentat sub form de graf), vom calcula funcia delta
completnd un tabel asemntor cu cel de la algoritmul de transformare AFN AFD.
La acest algoritm, capetele de coloan vor fi caracterele din alfabet, dar concatenate
la stnga i la dreapta cu *.
Pentru a calcula primele |Q| linii ale tabelului
- facem nchiderea strii de la captul de linie curent
- apoi n toate strile obinute ncercm s citim caracterul de pe coloana curent i
obinem o nou mulime de stri
- facem nchiderea acestei mulimi i ceea ce obinem scriem n tabel

- 18 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015

Pentru a calcula urmtoarele linii (corespunztoare noilor stri-mulime care apar),


procedm la fel ca la cellalt algoritm, adic reunim ce gsim n tabel pe aceeai
coloan i pe liniile potrivite strilor componente din starea-mulime.
Strile finale ale noului AFD obinut, vor fi acele stri-mulime (pot avea i un singur
element, nu neaprat mai multe) care conin cel puin una din strile care erau finale
pentru AFN-ul iniial. n plus, trebuie s verificm daca automatul iniial accepta
cuvntul vid (adic dac q0 FAFN ). Dac da, atunci starea iniial (<q0>)
va fi i stare final.

EXEMPLU:
Plecm de la acelai automat de mai sus.

nti trebuie calculate nchiderile tuturor strilor automatului iniial.


(Am fcut asta mai sus, deci doar rescriu ce am obinut.)
q0 {q0 , q2 , q3 , q4 , q5 , q6 }

q1 {q1 , q2 , q4 , q6 }
q2 {q2 , q4 , q6 }
q3 {q2 , q3 , q4 , q5 , q6 }
q4 {q4 , q6 }
q5 {q2 , q4 , q5 , q6 }
q6 {q6 }
Avem tabelul pentru primele 7 linii obinut dup cum urmeaz:

q0
q1
q2
q3
q4
q5
q6

* a *
{q0, q1, q2, q3, q4, q5, q6}
{q2, q3, q4, q5, q6}
{q2, q3, q4, q5, q6}
{q2, q3, q4, q5, q6}
{q6}
{q2, q3, q4, q5, q6}

* b *
{q2, q3, q4, q5, q6}
{q2, q4, q5, q6}
{q2, q4, q5, q6}
{q2, q3, q4, q5, q6}
{q2, q4, q5, q6}
{q2, q4, q5, q6}
{q6}

- 19 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015

( q0 , a) ({q0 , q2 , q3 , q4 , q5 , q6 }, a)
{ (q0 , a)} { (q2 , a)} { (q3 , a)} { (q4 , a)} { (q5 , a)} { (q6 , a)}
{q0 , q1} {q3 } {q6 } {q6 } {q6 } {q0 , q1 , q3 , q6 }
q0 q1 q3 q6
{q0 , q2 , q3 , q4 , q5 , q6 } {q1 , q2 , q4 , q6 } {q2 , q3 , q4 , q5 , q6 } {q6 } {q0 , q1 , q2 , q3 , q4 , q5 , q6 }
( q0 , b) ({q0 , q2 , q3 , q4 , q5 , q6 }, b)
{ (q0 , b)} { (q2 , b)} { (q3 , b)} { (q4 , b)} { (q5 , b)} { (q6 , b)}
{q2 } {q3 , q6 } {q5 } {q2 } {q6 } {q2 , q3 , q5 , q6 }
q 2 q3 q5 q 6
{q2 , q4 , q6 } {q2 , q3 , q4 , q5 , q6 } {q2 , q4 , q5 , q6 } {q6 } {q2 , q3 , q4 , q5 , q6 }
( q1 , a ) ({q1 , q2 , q4 , q6 }, a)
{ (q1 , a )} { (q2 , a )} { (q4 , a)} { (q6 , a)}
{q3 } {q6 } {q3 , q6 }
q3 q 6
{q2 , q3 , q4 , q5 , q6 } {q6 } {q2 , q3 , q4 , q5 , q6 }
( q1 , b) ({q1 , q2 , q4 , q6 }, b)
{ (q1 , b)} { (q2 , b)} { (q4 , b)} { (q6 , b)}
{q5 } {q6 } {q5 , q6 }
q5 q 6
{q2 , q4 , q5 , q6 } {q6 } {q2 , q4 , q5 , q6 }
( q2 , a) ({q2 , q4 , q6 }, a)
{ (q2 , a )} { (q4 , a)} { (q6 , a)}
{q3 } {q6 } {q3 , q6 }
q3 q 6
{q2 , q3 , q4 , q5 , q6 } {q6 } {q2 , q3 , q4 , q5 , q6 }
( q2 , b) ({q2 , q4 , q6 }, b)
{ (q2 , b)} { (q4 , b)} { (q6 , b)}
{q5 } {q6 } {q5 , q6 }
q5 q 6
{q2 , q4 , q5 , q6 } {q6 } {q2 , q4 , q5 , q6 }

- 20 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015
( q3 , a) ({q2 , q3 , q4 , q5 , q6 }, a )
{ (q2 , a )} { (q3 , a)} { (q4 , a)} { (q5 , a)} { (q6 , a)}
{q3 } {q6 } {q6 } {q6 } {q3 , q6 }
q3 q 6
{q2 , q3 , q4 , q5 , q6 } {q6 } {q2 , q3 , q4 , q5 , q6 }
( q3 , b) ({q2 , q3 , q4 , q5 , q6 }, b)
{ (q2 , b)} { (q3 , b)} { (q4 , b)} { (q5 , b)} { (q6 , b)}
{q3 , q6 } {q5 } {q2 } {q6 } {q2 , q3 , q5 , q6 }
q 2 q3 q 5 q 6
{q2 , q4 , q6 } {q2 , q3 , q4 , q5 , q6 } {q2 , q4 , q5 , q6 } {q6 } {q2 , q3 , q4 , q5 , q6 }
( q4 , a) ({q4 , q6 }, a) { (q4 , a)} { (q6 , a)}
{q6 } {q6 } q6 {q6 }
( q4 , b) ({q4 , q6 }, b) { (q4 , b)} { (q6 , b)}
{q5 } {q6 } {q5 , q6 } q5 q6 {q2 , q4 , q5 , q6 } {q6 } {q2 , q4 , q5 , q6 }

( q5 , a) ({q2 , q4 , q5 , q6 }, a)
{ (q2 , a )} { (q4 , a)} { (q5 , a)} { (q6 , a)}
{q3 } {q6 } {q6 } {q3 , q6 }
q3 q 6
{q2 , q3 , q4 , q5 , q6 } {q6 } {q2 , q3 , q4 , q5 , q6 }
( q5 , b) ({q2 , q4 , q5 , q6 }, b)
{ (q2 , b)} { (q4 , b)} { (q5 , b)} { (q6 , b)}
{q5 } {q2 } {q6 } {q2 , q5 , q6 }
q 2 q5 q 6
{q2 , q4 , q6 } {q2 , q4 , q5 , q6 } {q6 } {q2 , q4 , q5 , q6 }

( q6 , a) ({q6 }, a) { (q6 , a)}


( q6 , b) ({q6 }, b) { (q6 , b)} {q6 } q6 {q6 }

- 21 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015
Apoi calculm liniile urmtoare, corespunztoare noilor stri-mulime, pe msur ce ele
apar n automat. ncepem cu starea iniial, <q0> = q023456.

q0
q1
q2
q3
q4
q5
q6
q023456
q0123456
q23456

* a *
{q0, q1, q2, q3, q4, q5, q6}
{q2, q3, q4, q5, q6}
{q2, q3, q4, q5, q6}
{q2, q3, q4, q5, q6}
{q6}
{q2, q3, q4, q5, q6}

q0123456
q0123456
q23456

* b *
{q2, q3, q4, q5, q6}
{q2, q4, q5, q6}
{q2, q4, q5, q6}
{q2, q3, q4, q5, q6}
{q2, q4, q5, q6}
{q2, q4, q5, q6}
{q6}
q23456
q23456
q23456

Vom obine n final automatul AFD urmtor.

Automatul iniial avea strile finale FAFN = {q2, q6}, deci n noul automat vom avea
strile finale FAFD = { q023456, q0123456, q23456}.
Obs: Limbajul acceptat de acest automat este L = {a,b}*, adic orice cuvinte formate cu
literele a i b n orice ordine, cuvinte de orice lungime, inclusiv zero.
Obs: Cred c la seminar am uitat s punem i tranziia de la q5 la q2 cu b, aa c pot exista
mici diferene la calculele intermediare, dar rezultatul final este acelai.

Automatul minimal
Se pornete de la un AFD complet definit (adic pentru orice stare din mulimea Q i
pentru orice caracter din alfabetul , funcia este definit).
Ideea algoritmului este de a gsi acele stri care au comportament echivalent, pentru a le
grupa i a obine o unic stare nou n locul acestora.
- Dou stri sunt echivalente dac pentru orice cuvnt am alege, plecnd din cele
dou stri, fie ajungem n dou stri finale, fie ajungem n dou stri nefinale.
p, q Q, p q [w * , p, w F q, w F ]
- Dou stri sunt separabile dac exist un cuvnt pentru care plecnd din cele
dou stri ajungem ntr-o stare final i ntr-una nefinal.
p, q Q, p w q [w * , p, w F q, w F ]
- 22 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015
Vom construi un tabel, pe linii i pe coloane avnd strile automatului iniial. Vom
completa tabelul pentru fiecare pereche de stri (qi, qj), avnd i > j, cu un cuvnt prin care
cele dou stri sunt separabile. Dac nu vom gsi un astfel de cuvnt atunci acele stri
sunt echivalente.
Vom completa tabelul cutnd cuvintele recursiv, n ordinea cresctoare a lungimii lor.
Cuvintele de lungime k le vom obine cu ajutorul celor de lungime k1 calculate anterior.
Obs: Dou stri sunt separabile prin cuvntul vid (de lungime zero), dac una din ele
este final i cealalt este nefinal n automatul iniial.

EXEMPLU:
Fie automatul AFD complet definit:

Pas 0: Cutm perechile de stri separabile prin cuvntul de lungime zero. Avem o
singur stare final n acest exemplu, deci ea va fi separabil prin de toate celelalte
stri, care sunt nefinale. Completm n tabel, pentru toate perechile (q6, qi), 0 i 5.

q0
q1
q2
q3
q4
q5
q6

q0

q1

q2

q3

q4

q5

q6

Pas 1: Cutm cuvinte de lungime 1.


(q0 , a) q1 F ; (q1 , a) q3 F ; (q2 , a) q3 F ;
Avem
(q3 , a) q6 F ; (q4 , a) q6 F ; (q5 , a) q6 F
Rezult c orice stare din mulimea {q0, q1, q2} va fi separabil de orice stare din
mulimea {q3, q4, q5} prin cuvntul a.
(Observm c toate tranziiile cu b merg ctre stri nefinale, deci nu va exista nicio
pereche de stri care s fie separabile prin cuvntul b.)

- 23 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015
Obs: E posibil s fie separabile i prin altceva, dar este suficient s gsim un singur
cuvnt.
q0
q1
q2
q3
q4
q5
q6
q0
q1
q2
q3
a
a
a
q4
a
a
a
q5
a
a
a
q6

Pas 2: Cutm cuvinte de lungime 2.


- Perechea (q1, q0) cu caracterul a ajunge n perechea (q3, q1). Dar q3 i q1 erau
separabile prin a. Rezult c strile q1 i q0 vor fi separabile prin cuvntul aa
(obinut prin concatenarea caracterului ncercat i a fostului cuvnt calculat n
tabel).
- Perechea (q2, q0) cu caracterul a ajunge n perechea (q3, q1). Dar q3 i q1 erau
separabile prin a. Rezult c strile q1 i q0 vor fi separabile prin cuvntul aa.
- Perechea (q2, q1) cu caracterul a ajunge n perechea (q3, q3), iar cu caracterul
b ajunge n perechea (q2, q2). Observm c dac dup citirea primului caracter
(indiferent dac este a sau b), ambele drumuri pornesc din acelai loc, nu au
cum s se mai ramifice n continuare. Rezult c aceste dou stri, q2 i q1, sunt
echivalente.
- Perechea (q4, q3) cu caracterul a ajunge n perechea (q6, q6), iar cu caracterul
b ajunge n perechea (q5, q5). Cu aceeai observaie ca mai devreme, rezult c
strile q4 i q3 sunt echivalente.
- Perechea (q5, q3) cu caracterul a ajunge n perechea (q6, q6), dar cu caracterul
b ajunge n perechea (q2, q5). Perechea (q2, q5) era separabil prin a. Rezult,
prin concatenare, c strile q5 i q3 sunt separabile prin ba.
- Perechea (q5, q4) cu caracterul a ajunge n perechea (q6, q6), dar cu caracterul
b ajunge n perechea (q2, q5). Perechea (q2, q5) era separabil prin a. Rezult,
prin concatenare, c strile q5 i q4 sunt separabile prin ba.

q0
q1
q2
q3
q4
q5
q6

q0

q1

q2

q3

q4

q5

aa
aa
a
a
a

a
a
a

a
a
a

ba

ba

Am terminat de completat tabelul i am obinut stri echivalente: q1 q2 i q3 q4 .

- 24 -

q6

Seminar LFA gr.141-144, 211


@ MN 2014-2015
Automatul AFD minimal obinut va avea Q = {q0, q12, q34, q5, q6} i F = {q6}.
Tranziiile le desenm conform automatului iniial, dar innd cont de aceast grupare a
strilor.

Condiii asupra numrului de apariii ale unui caracter ntr-un cuvnt


Notm cu |w|a numrul de apariii ale caracterului a n cuvntul w.
Obs: n general, cnd avem limbaje definite cu astfel de condiii asupra numrului de
apariii ale unui caracter, sugestia pentru a putea construi mai uor automatul este s
folosim nite indici la stri pentru o codificare ct mai intuitiv a cuvintelor din limbaj.
Atenie! Nu confundai exemplele urmtoare cu cele din primul seminar, n sensul de a
ncerca s descriei limbajele acestea cu expresii asemntoare cu acelea cu puteri. Acolo
existau n plus restricii asupra poziiei literelor n cuvnt (de exemplu toate a-urile la
nceput i apoi toate b-urile). Aici nu conteaz ordinea literelor, ci doar numrul lor.

EXEMPLE:
L1 {w {0,1} a. . | w |0 par , | w |1 impar}

Ideea de rezolvare este ca fiecare stare s aib doi indici, egali cu restul mpririi la 2 a
numrului de apariii ale caracterului 0, respectiv ale caracterului 1.
Starea final va fi q01 pentru c ea codific numrul par de 0-uri i impar de 1-uri.

Obs: Pentru c nu exist nicio alt restricie asupra formei cuvntului, automatul va fi
complet definit, adic n orice stare am fi trebuie s avem tranziii cu toate caracterele din
alfabet.

- 25 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015
L2 {w {a, b} a. . | w |a 2n 1, | w |b 3m 2, n 0, m 0}

Obs:
- Fiecare stare va avea doi indici pentru c alfabetul are dou elemente i ambele au
condiii ataate.
- Primul indice, corespunztor caracterului a, va lua valori n mulimea resturilor
mpririi la 2, deoarece coeficientul necunoscutei n este 2. Al doilea indice,
corespunztor caracterului b, va lua valori n mulimea resturilor mpririi la 3,
deoarece coeficientul necunoscutei m este 3.
- Numrul de stri va fi egal cu produsul numerelor ce reprezint cardinalele
mulimilor n care iau valori indicii, n cazul acesta 23=6.
Starea final va fi q12, deoarece termenii liberi sunt + 1 i + 2.

L3 {w {a, b} a. . aaa i bbb nu apar n w}

Obs: Acest limbaj ar mai putea fi scris i L3 { , b, bb} ({a, aa} {b, bb}) { , a, aa} .
Suntei de acord c e adevrat? tii s explicai cum am ajuns la acea expresie ?

- 26 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015

~ Seminar 3 ~
(Expresii regulate; Transformarea expresie_regulat automat_finit
Transformarea automat_finit expresie_regulat ; Gramatici ; Gramatici regulate)

Expresii regulate
Se numete familia expresiilor regulate peste i se noteaz REX() mulimea de
cuvinte peste alfabetul {(, ),,,, , } definit recursiv astfel:
i) , REX ; a REX pentru a
ii) e1 , e2 REX (e1 e2 ) REX
iii) e1 , e2 REX (e1 e2 ) REX
iv) e REX (e*) REX

Precedena operaiilor , ,
Obs: Atenie la ordinea n care se evalueaz operaiile: nti stelarea, apoi concatenarea i
apoi reuniunea. (Dac vrei s fii siguri c nu le ncurcai, putei s facei o analogie cu
operaiile aritmetice, unde se evalueaz nti ridicarea la putere, apoi nmulirea i apoi
adunarea.)

Transformarea expresie_regulat automat_finit


Expresie
Limbaj
regulat

{ }

e1 e2
e1 e2
(e1 )

Automat finit

Q {q0 }, F ,
Q {q0 }, F {q0 },

{a}, a

Q {q0 , q1}, F {q1}, (q0 , a) q1

L(e1 e2 )

Q Q1 Q2 {q0 }; F F1 F2 ; V V1 V2 ;

L(e1 ) L(e2 )

1 2 { (q0 , ) {q01 , q02 }}

L(e1 e2 )

Q Q1 Q2 , q0 q01; F F2 ; V V1 V2 ;

L(e1 ) L(e2 )

1 2 { (q f 1 , ) q02 , pentruq f 1 F1}

L(e1 ) ( L(e1 ))

Q Q1 {q0 }; F {q0 }; V V1 ;

1 { (q0 , ) q01} { (q f 1 , ) q0 , pentruq f 1 F1}

Descrierea n cuvinte a ultimelor trei linii ale tabelului o gsii n acest document la
pagina 9 (compunerea automatelor finite).

- 27 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015
Obs: La construirea automatelor compuse se ine cont de precedena operaiilor (nti
stelarea, apoi concatenarea, apoi reuniunea) i de parantezele din expresie.

Transformarea automat_finit expresie_regulat


Se numete EFA (automat finit extins), M (Q, , et , q0 , F ) , unde, la fel ca la celelalte
automate finite, Q este mulimea strilor, este alfabetul, q0 este starea iniial, F este
mulimea strilor finale. Aici avem funcia de etichetare et : Q Q REX () .
Notm et ( p, q) prin e pq .
Ideea algoritmului este de a transforma automatul finit ntr-un automat finit extins, i apoi
a elimina una cte una strile pn ajungem la o expresie regulat echivalent cu
automatul iniial.
(a) Dac exist tranziii care ajung n starea iniial, atunci se adaug la automat o
nou stare care va fi iniial i va avea o tranziie ctre fosta stare iniial.
(b) Dac exist mai multe stri finale, atunci se adaug la automat o nou stare care
va fi singura final i va avea tranziii din toate fostele stri finale ctre ea.
(c) Se elimin pe rnd, una cte una, toate strile n afar de cea iniial i cea final.
Presupunem c vrem s eliminm starea qk i c exist etichetele
et (qi , qk ), et (qk , q j ) i eventual bucla et (qk , qk ) . Atunci obinem noua etichet
ntre strile qi i qj reunind (fosta etichet direct de la qi la qj) cu (eticheta de la
qi la qk concatenat cu stelarea etichetei buclei de la qk la qk concatenat cu
eticheta de la qk la qj).
(d) Atunci cnd rmn doar dou stri, se elimin bucla strii finale, dac exist.
Concatennd (expresia obinut ntre starea iniial i cea final) cu (stelarea
expresiei de pe bucla strii finale) obinem rspunsul final.
n practic, vom calcula etichetele folosind un tabel cu numrul de coloane complete egal
cu numrul de stri ale automatului, i cu numrul de linii egal cu ptratul numrului de
stri ale automatului.
Obs: Atenie, strile automatului vor fi numerotate ncepnd de la q1 (care va fi starea
iniial).
Notm cu Rik j expresia regulat ce se obine plecnd din starea qi, ajungnd n starea qj i
avnd ca stri intermediare primele k stri (adic q1, q2, ..., qk).
Tabelul va conine la capete de linii toate perechile posibile (qi, qj) cu i i j ntre 1 i |Q|,
iar la capete de coloan toi k, cu k de la 0 la |Q| 1.
Tabelul va fi calculat coloan cu coloan, pentru c valorile coloanei curente se
calculeaz n funcie de valori aflate pe coloana precedent.
Prima coloan se calculeaz astfel:
{a V | (qi , a) q j }, dac i j

Ri0j
{} {a V | (qi , a) q j }, dac i j
- 28 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015
Urmtoarele coloane se calculeaz astfel:
(coloana curent k+1 n funcie de coloana precedent k)
Rik j1 Rik j Rikk 1 ( Rkk1 k 1 ) ( Rkk1 j )
Rspunsul final, expresia regulat cutat, va fi obinut calculnd

|Q|
1f

, adic

f F

reuniunea etichetelor de la starea iniial la toate strile finale, avnd ca stri intermediare
toate strile automatului.

Cteva formule utile


(A) e ; e ( este pentru concatenare cum este 0 pentru nmulire)
(B) e e ; e e ( este pentru concatenare cum este 1 pentru nmulire)
(C) e e e ; e e e

(D) {e1 , e2 } (e1 e2 ) (e1 e2 ) (formul valabil pentru oricte expresii, nu doar 2)
(E) e1 (e2 e3 ) (e1 e2 ) (e1 e3 ) ; (e1 e2 ) e3 (e1 e3 ) (e2 e3 )

EXEMPLU:
Se d automatul finit urmtor i se dorete obinerea expresiei regulate care i corespunde,
folosind tabelul descris anterior.

Avem dou stri, deci tabelul va avea 22 = 4 linii i 2 coloane complete (plus eventual una
incomplet pentru rspunsul final).

Rik j1

k+1 = 0

rij = r11
rij = r12
rij = r21
rij = r22

1+
0

k+1 = 1

k+1 = 2

(a) Calculm prima coloan, pentru k+1 = 0.


- Dac indicii i i j sunt diferii, atunci cutm tranziiile de la qi la qj i scriem n tabel
(pe linia corespunztoare lui rij) expresia obinut prin reuniunea acelor caractere de pe
tranziii.
Deci R102 0 , R201 .
- Dac indicii i i j sunt egali, cutm buclele strii qi=qj i scriem n tabel expresia
obinut prin reuniunea acelor caractere de pe bucle i a caracterului .
Deci R101 1 , R20 2 .

- 29 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015
(b) Calculm a doua coloan, pentru k+1 = 1.

R111 R101 R101 ( R101 ) R101 (1 ) (1 ) (1 ) (1 )


Dac notm (1 ) cu b,
avem b b b b b1 {b n | n 2} {b n | n 1} b (1 )
Putem aplica formula (C) i avem (1 ) (1 ) (1 )
Apoi putem aplica formula (D) pentru prima parte i obinem (1 ) (1 )
Dar i conform formulei (B) prima parantez este egal cu 1*, deci vom avea
(1 ) (1 ) 1 (1 ) . Aplicm formula (E) (si apoi (C) i (B)) i obinem
(1 1) (1 ) 1 1 {1n | n 1} {1n | n 0} {1n | n 0} 1 pe care l trecem n
tabel.
R112 R102 R101 ( R101 ) R102 0 (1 ) (1 ) 0
Aplicm formula (C) i obinem 0 (1 ) 0 , care este echivalent dup cum am aflat
mai sus cu 0 1 0 0 1 0 0 1 0 ( 1 ) 0 1 0

R211 R201 R201 ( R101 ) R101 (1 ) (1 )


Aplicm formula (A) i avem
R21 2 R20 2 R201 ( R101 ) R102 (1 ) 0
Rik j1

k+1 = 0

k+1 = 1

rij = r11
rij = r12
rij = r21
rij = r22

1+
0

1*
1 0

k+1 = 2
1 0

(c) Calculm ultima coloan, cea incomplet, pentru k+1 = 2.


Singura stare final este q2, deci avem de calculat doar eticheta de la starea q1 (cea
iniiala) la starea q2. (Dac aveam mai multe stri finale, calculam pentru fiecare cte o
expresie i apoi le reuneam.)

R122 R112 R112 ( R21 2 ) R21 2 (1 0) (1 0) (1 0) (1 0) 1 0


Deci expresia regulat corespunztoare automatului dat este 1 0 .

- 30 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015

Gramatici
G = (N, T, S, P)
N = {A, B, C, } mulimea de simboluri neterminale
T = {a, b, c, ...} mulimea de simboluri terminale
S N simbolul de start
P mulimea de producii (sau reguli de producie)
Modul n care este definit funcia P determin diferite tipuri de gramatici.

Gramatici independente de context (GIC) /


Context-free grammars (CFG)
P N ( N T )
Cazuri particulare de gramatici independente de context:

Gramatici liniare
Au producii de tipurile

A x, cu x T i A N
A xBy, cu x, y T i A, B N

Gramatici liniare la dreapta


Au producii de tipurile

A x, cu x T i A N
A xB, cu x T i A, B N

Gramatici liniare la stnga


Au producii de tipurile

A x, cu x T i A N
A Bx , cu x T i A, B N

Gramatici regulate
O gramatic se numete regulat dac este liniar la dreapta sau liniar la stnga.
Dar pentru c gramaticile liniare la dreapta i cele liniare la stnga definesc acelai set de
limbaje, atunci n general ne referim la cele liniare la dreapta.
A
Deci gramaticile regulate au producii de tipurile A a
A aB, cu a T i A, B N

Obs: Putem grupa mai multe producii care au acelai membru stng i putem scrie pe
scurt A | a | aB, cu a T i A, B N

- 31 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015

EXEMPLE (gramatici regulate):


Vom relua acele exemple din primul seminar pentru care am construit automate finite
(pagina 5 din acest document), pentru a vedea corespondena strns dintre automate
finite si gramatici regulate (dintre stri i neterminale; tranziii i producii).
Obs: Vom scrie pe scurt, doar produciile, acolo unde nu exist risc de confuzii (adic se
nelege clar c literele mari sunt neterminale, literele mici sunt terminale, iar simbolul de
start este S).

L1 = a* = {an, n 0} = {=a0, a=a1, aa=a2, aaa=a3, aaaa=a4, }


S aS |
L2 = a+ = {an, n 1} = {a=a1, aa=a2, aaa=a3, aaaa=a4, }
S aS | a

L3 = {a2n, n 0} = {=a0, aa=a2, aaaa=a4, aaaaaa=a6, }


S aA |
A aS

L4 = {a2n+1, n 0} = {a=a1, aaa=a3, aaaaa=a5, }


S aA | a
A aS

sau

S aA
A aS |

L5 = {a2n, n 1} = {aa=a2, aaaa=a4, aaaaaa=a6, }


S aA
A aS | a

sau

S aA
A aB | a
B aA

sau

S aA
A aB
B aA |

L6 = {a2n+1, n 1} = {aaa=a3, aaaaa=a5, aaaaaaa=a7, }


S aA
A aB

B aA | a

sau

S aA
A aS | aB
Ba

L7 = {a2n b3m, n 0, m 0}
= {, a2, a4, a6, a8, , b3, b6, b9, b12, , a2b3, a2b6, a4b3,a4b6, a6b3, a6b6, }
S aA | bB |
S aA | bB |
A aS
A aS
B bC
sau
B bC
C bD
C bD | b
D bB |
D bB

- 32 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015

Analogia ntre automate finite i gramatici regulate


i) La limbajele L1 i L2, unde avem cuvinte de forma an:
- la automate avem bucl (adic tranziie de la o stare ctre ea nsi)
- la gramatici avem o producie n care acelai neterminal apare i n membrul stng i
n cel drept al produciei
ii) La limbajele L3 L10, unde la putere avem i un coeficient numr natural (2 pentru auri i 3 pentru b-uri):
- la automate avem circuit de lungime egal cu coeficientul ntre stri diferite
- la gramatici avem circuit de lungime egal cu coeficientul ntre neterminale diferite
iii) Dar ce se ntmpl dac avem limbaje definite folosind condiii asupra numrului de
apariii ale caracterelor n cuvinte ?
- la automate ideea era s folosim indici la stri, cte unul pentru fiecare condiie
- la gramatici ideea este s folosim indici la neterminale, cte unul pentru fiecare
condiie

- 33 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015

~ Seminar 4 ~
(Exemple cu gramatici independente de context GIC ;
Transformarea GIC gramatic n F.N. Chomsky ;
Automatul Push-Down / Automatul Stiv)

EXEMPLE (gramatici independente de context):


n general, trebuie s lucrm cu gramatici independente de context, pentru c nu putem cu
gramatici regulate (respectiv, trebuie s lucrm cu automate push-down, pentru c nu
putem cu automate finite), atunci cnd limbajul conine cuvinte n care numrul de litere
dintr-o parte a cuvntului depinde de numrul de litere din alt parte a cuvntului i deci
avem nevoie s controlm cumva acest numr de litere.

L1 = {anbn, n 0}
= {=a0b0, ab=a1b1, aabb=a2b2, aaabbb=a3b3, aaaabbbb=a4b4, }
(1)

( 2)

S aSb |

sau

(1)

( 2)

( 3)

( 4)

S aAb |

A aAb |

Ideea acestei gramatici este de a genera cuvntul dinspre margini spre mijlocui lui, astfel
pentru fiecare aplicare a produciei (1) vor aprea un a i un b, iar ntre ele va rmne
S-ul pentru a continua generarea. La final, se aplic producia (2) pentru a nu mai avea
neterminal n cuvntul obinut.
Cel mai mic cuvnd este ntr-adevr cuvntul vid, pentru c putem aplica direct a doua
producie fr s o aplicm deloc pe prima.

L2 = {anbn, n 1}
= {ab=a1b1, aabb=a2b2, aaabbb=a3b3, aaaabbbb=a4b4, }
(1)

(1)

( 2)

S aSb | ab

sau

S aAb
( 2)

( 3)

A aAb |

Aici, cel mai mic cuvnt trebuie s fie ab, deci observm c din ambele gramatici de la
exemplul anterior au disprut produciile S.
n prima soluie avem ca pas se oprire cuvntul ab, iar n a doua soluie suntem obligai
s generm cel puin un a i un b (prin prima producie) nainte de a ne opri (cu a
treia producie).

- 34 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015

L3 = {anb2n, n 1}
= {abb=a1b2, aabbbb=a2b4, aaabbbbbb=a3b6, }
(1)

( 2)

S aSbb | abb
Pentru fiecare a din prima parte a cuvntului trebuie s avem doi de b n a doua parte
a cuvntului.
Deoarece avem n 1, pasul de oprire, a doua producie este cu abb n membrul
drept.
Dac era n 0, atunci a doua producie ar fi avut ca membru drept cuvntul vid.

L4 = {a2nbkc3n, n 0, k 1}
= { b=b1, bb=b2, bbb=b3, bbbb=b4, ,
aabccc=a2b1c3, aabbccc=a2b2c3, aabbbccc=a2b3c3, aabbbbccc=a2b4c3, ,
aaaabcccccc=a4b1c6, aaaabbcccccc=a4b2c6, aaaabbbcccccc=a4b3c6, ... }
(1)

( 2)

S aaSccc | bA
( 3)

( 4)

A bA |

Pentru fiecare aa de la nceputul cuvntului trebuie s avem ccc la finalul lui, iar ntre
ele vom avea b-uri. Deci aici vom folosi nti neterminalul S pentru a genera a-urile
i c-urile, iar apoi vom trece n alt neterminal cu ajutorul cruia vom genera b-urile.
Observm c avem n 0, deci nu trebuie s-l obligm s aib a-uri i c-uri, ci
trebuie s l lsm s treac direct la b-uri.
Cel mai mic cuvnt este b: aplicm producia (2) i apoi pe (4).

L5 = {a2nbkc3n, n 1, k 1}
= { aabccc=a2b1c3, aabbccc=a2b2c3, aabbbccc=a2b3c3, aabbbbccc=a2b4c3, ,
aaaabcccccc=a4b1c6, aaaabbcccccc=a4b2c6, aaaabbbcccccc=a4b3c6, ... }
(1)

( 3)

( 4)

A bA | b

(1)

( 2)

S aaSccc | aaAccc

sau

( 2)

S aaSccc | aaAbccc
( 3)

( 4)

A bA |

(1)

sau

( 2)

S aaSccc | aabAccc
( 3)

( 4)

A bA |

Diferena fa de exemplul anterior este c aici i n este strict pozitiv, de aceea trebuie ca
nainte de a trece la neterminalul A s generm obligatoriu minim doi de a i trei de c
(producia a doua). Apoi n neterminalul A s generm cel puin un b (de aceea
observm c s-a modificat i producia a patra).
Cel mai mic cuvnt este aabccc: aplicm producia (2) i apoi (4).

- 35 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015

L6 = {a2nc3nbk, n 1, k 1}
= { aacccb=a2c3b1, aacccbb=a2c3b2, aacccbbb=a2c3b3, aacccbbbb=a2c3b4, ,
aaaabccccccb=a4c6b1, aaaaccccccbb=a4c6b2, aaaaccccccbbb= a4c6b3, ... }
(1)

S AB
( 2)

( 3)

A aaAccc | aaccc
( 4)

( 5)

B bB | b

Observm c nu ntotdeauna putem genera cuvintele dinspre exterior spre centru, avnd
maxim un singur neterminal n membrul drept al produciilor. Uneori este necesar s
generm cuvintele pe buci, folosind pentru fiecare parte un neterminal separat.
Aici, vom folosi neterminalul A pentru a genera a-urile i c-urile spre centru simultan
cte doi de a i cte trei de c, iar din neterminalul B vom genera b-urile.
Dac am fi avut condiia n 0, atunci producia (3) ar fi fost A, iar dac am fi
avut condiia k 0, atunci producia (5) ar fi fost B.

Verificare generare cuvnt de ctre gramatic


Obs: Atenie la terminologia folosit:
- automatul accept un (cuvnt din) limbaj
- cuvntul / limbajul este acceptat de automat
- gramatica genereaz un (cuvnt din) limbaj
- cuvntul / limbajul este generat de gramatic
Pentru a verifica dac un cuvnt este sau nu generat de o gramatic, se folosesc arborii
de derivare, care au ca rdcin simbolul de start al gramaticii (adic S, dac nu se
specific altul).
Pentru a trece de la un nod la altul al arborelui, ne alegem un neterminal care face parte
din cuvntul curent, cutm acele producii care l au ca membru stng, alegem una dintre
ele i obinem noul cuvnt curent prin nlocuirea neterminalului cu membrul drept al
acelei producii.
- Fie ne oprim cnd am gsit un drum prin care am ajuns s generm cuvntul verificat
(deci suntem ntr-o frunz a arborelui, nu mai avem neterminale n cuvnt).
- Fie ne oprim cnd toate drumurile posibile au creat cuvinte mai lungi dect cel verificat,
dar fr s ntlnim frunza corect (deci nu are rost s continum pentru c vom gsi
cuvinte din ce n ce mai lungi, deci diferite de cel verificat)
(a) Fie i reprezentm chiar sub form de arbore, de sus n jos ncepnd cu rdcina,
etichetnd nodurile cu cuvntul curent, iar muchiile cu numrul produciei pe care am
aplicat-o pentru a ajunge din nodul-tat n nodul-fiu.
(b) Fie i reprezentm de la stnga la dreapta cu aceeai convenie pentru etichetele
nodurilor i muchiilor. n acest caz, ori decidem s urmm toate ramificaiile posibile, ori
- 36 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015
scriem direct doar drumul care ne duce la rezultat (fiind cuvinte scurte i gramatici destul
de mici, putem vedea drumul far prea mare greutate). Preferabil alegem a doua
variant cnd avem de verificat un singur cuvnt.
Obs: Uneori se poate ntmpla ca pentru un cuvnt s existe mai muli arbori de derivare
distinci.
(i) Dac gramatica este regulat, asta poate nsemna c n gramatic exist unele
producii redundante (care ar putea fi eliminate fr s apar probleme, adic dup
eliminare s se obin o gramatic echivalent cu cea iniial).
(ii) Iar dac gramatica este independent de context i are cel puin o producie n al crei
membru drept apar mai multe neterminale, atunci apar mai muli arbori pentru un cuvnt
care conine la un moment dat mai multe neterminale, pentru c nu este obligatoriu s
ncercm s rescriem doar neterminalul cel mai din stnga/dreapta, ci putem s le alegem
n orice ordine.
EXEMPLU:
Pentru gramatica anterioar, vom verifica dac genereaz cuvntul a 4 c 6 b 3 L6 .
(1)

S AB
( 2)

( 3)

A aaAccc | aaccc
( 4)

( 5)

B bB | b

(a) Avei aici (http://bit.ly/arbore_derivare) poza arborelui de derivare pentru a gsi toate
drumurile posibile prin care poate fi obinut cuvntul dat.
n desen, muchiile sunt etichetate cu numrul produciei care a fost aplicat, iar nodurile
interioare cu neterminalul care a fost rescris (n interiorul cercului) i cu noul cuvnt
obinut (n dreptunghiul de sub cerc).
Avem mai multe tipuri de noduri fr fii:
- Cele marcate cu -- reprezint nceputul unor subarbori care mai pot fi extini,
dar n care nu vom mai gsi soluii pentru cuvntul dat. Acest lucru se poate
ntmpla din dou motive: fie am aplicat de prea multe ori una dintre produciile
recursive (2 sau 4), fie am aplicat producia pentru pasul de oprire (3 sau 5)
nainte de a o aplica de suficiente ori pe cea recursiv.
- Cele marcate cu cerc dublu reprezint frunze ale arborelui, adic sfritul
drumurilor n urma crora am obinut cuvinte fr neterminale, adic unele dintre
cuvintele care sunt generate de gramatic.
- Cel marcate cu cerc dublu n care este scris OK reprezint toate drumurile prin
care putem genera cuvntul dat.
Observm (direct din cuvnt i din structura gramaticii) c produciile pe care trebuie s
le aplicm sunt: o dat (1), apoi o dat (2), o dat (3) (dar numai dup ce a fost aplicat
2), de dou ori (4), o dat (5) (dar numai dup ce a fost aplicat 4 de dou ori). Dar
ordinea pentru 2,3,4,5 poate fi oricare n afara restriciilor menionate. De aceea vom
obine cele 10 soluii: 23445, 24345, 24435, 24453, 42345, 42435, 42453, 44235, 44253,
44523.

- 37 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015
(b) A doua variant, scriem direct pe scurt un drum prin care tim c vom obine cuvntul
dat. l vom alege pe primul, n care vom rescrie mereu cel mai din stnga neterminal.
(1)

( 2)

( 3)

( 4)

( 4)

( 5)

S AB aa AcccB a 4 c 6 B a 4 c 6b B a 4 c 6b 2 B a 4 c 6b 3
Obs: Dac cerina este doar de a verifica pentru un anumit cuvnt dac este sau nu
generat de gramatic, atunci este preferabil varianta (b). Dar dac cerina este s se afle
toate cuvintele generate de o gramatic, pentru o lungime de cuvnt dat sau pentru un
numr maxim de aplicri ale produciilor, atunci trebuie folosit varianta (a) cu
extinderea mai multor drumuri.
Continum cu exemplele de gramatici independente de context.
Dac avem cuvinte formate din 4 poriuni (a, b, c, d) i vrem ca lungimile poriunilor
(puterile la care sunt literele) s depind unele de altele grupate dou cte dou atunci
avem doar dou posibiliti de grupare: prima cu a patra (i a doua cu a treia) sau prima
cu a doua (i a treia cu a patra).
Deci nu vom putea s avem grupe intersectate (prima cu a treia; a doua cu a patra)!

L7 = {an bk c2k dn, n 1, k 0}


= { ad, a2d2, a3d3, a4d4, ..., abc2d, ab2c4d, ab3c6d, ..., a2bc2d2, a2b2c4d2, a2b3c6d2, ... }
(1)

( 3)

(1)

( 2)

S aSd | aAd
( 4)

sau

( 2)

( 3)

S aSd | ad | aAd
( 4)

( 5)

A bAcc |
A bAcc |
(n a doua soluie, producia (2) este redundant pentru c poate fi obinut aplicnd (3)
i apoi (5))
Aici avem grupate poriunile 1-4 i 2-3, deci vom genera cuvintele dinspre exterior spre
centru, nti a-urile simultan cu d-urile, iar apoi b-urile simultan cu c-urile.
Atenie, trebuie s folosim neterminale diferite, pentru c altfel s-ar genera i cuvinte cu
literele amestecate (a i b ntre ele i c i d ntre ele).
Avem k 0, deci b-urile i c-urile pot lipsi, de aceea avem producia (4) pe care o
aplicm pentru cazurile cnd avem k = 0.
Avem n 1, deci producia (2), pentru c trebuie s ne asigurm c avem cel puin un
a i un d nainte de a trece la neterminalul A pentru a genera mijlocul cuvntului.
Dac am fi avut k 1, atunci producia (4) s-ar fi transformat n Abcc.

L8 = {an bk c2k dn, n 0, k 1}


= { bc2, b2c4, b3c6, ..., abc2d, ab2c4d, ab3c6d, ..., a2bc2d2, a2b2c4d2, a2b3c6d2, ... }

- 38 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015
(1)

( 2)

S aSd | bAcc
( 3)

( 4)

A bAcc |

Structura cuvintelor este aceeai ca la exemplul anterior, s-au schimbat doar condiiile.
Avem n 0, deci a-urile i d-urile pot lipsi, dar mijlocul nu. De aceea avem
producia (2) n care folosim direct bcc-ul pentru a trece la neterminalul A.
Avem k 1, dar deja am citit un bcc cu neterminalul S, deci pasul de oprire pentru A
va fi cu cuvntul vid.
Dac am fi avut k 0, nseamn c i mijlocul (b-urile i c-urile) ar fi putut lipsi,
deci am fi avut n plus producia S.

L9 = {an b2n c2k dk, n 0, k 1}


= { c2d, c4d2, c6d3, ..., ab2c2d, ab2c4d2, ab2c6d3, ..., a2b4c2d, a2b4c4d2, a2b4c6d3, ... }
(1)

S AB
( 2)

( 3)

A aAbb |
( 4)

( 5)

B ccBd | ccd
Aici avem grupate poriunile 1-2 i 3-4, deci din simbolul de start S ne vom ramifica n
dou pri disjuncte: vom folosi un neterminal A pentru a genera dinspre exterior spre
interior poriunea cu a-uri i b-uri, iar separat vom folosi un neterminal B pentru a
genera dinspre exterior spre interior poriunea cu c-uri i d-uri.
Avem n 0, deci pasul de oprire pentru A va fi cuvntul vid.
Avem k 1, deci pasul de oprire pentru B va fi ccd.

L10 = {an b2n ck dm e3k, n,k,m 0}


(1)

( 2)

S AB |
( 3)

( 4)

A aAbb |
( 5)

(6)

(7)

B cBeee | | dC
(8)

(9)

C dC |
(producia (2) este reduntant pentru c poate fi obinut din 1, 4, 6)

Vom folosi neterminaul A pentru a genera spre interior a-urile i b-urile. Separat,
vom folosi neterminalul B pentru a genera spre interior c-urile i e-urile, iar apoi
ntre ele d-urile.

- 39 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015
Pentru n 0 avem producia (4).
Pentru m 0 avem producia (6).
Pentru k 0 avem producia (7) (n care trecem direct cu d mai departe fr s fi citit
ceee) sau producia (6) (atunci cnd avem i m = 0).

Transformarea GIC gramatic n F.N. Chomsky


O gramatic este (scris) n forma normal Chomsky dac are doar producii care au n
membrul stng un neterminal, iar n membrul drept fie un terminal, fie dou neterminale.
Aa

A BC

EXEMPLU:
Avem urmtoarea gramatic independent de context:
(1)

( 2)

( 3)

S aBcDeF | HF | HBc
( 4) (5)

B b |

(6) (7 )

Dd |
(8)

F G

( 9 ) (10)

G f | g
(11)

Pasul 1 Eliminarea produciilor


Vrem s nu mai avem n gramatic producii care au ca membru drept cuvntul vid.
Pot exista dou situaii:
(i) Dac neterminalul care are o producie NU are i alte producii, atunci
- va fi eliminat producia lui
- toate produciile care au ca membru drept un cuvnt de lungime minim 2 n care
apare acest neterminal vor fi nlocuite prin eliminarea neterminalului din cuvinte
- dac membrul drept avea lungime 1 (adic era doar acest neterminal), atunci se
nlocuiete cu (dar i aceast producie va fi ulterior eliminat tot la pasul 1)
n EXEMPLU:
Neterminalul H este singurul de acest gen, avnd doar producia (11), care va fi
eliminat. n plus, producia (2) va fi nlocuit cu SF (12), iar producia (3) va
fi nlocuit cu SBc (13).

- 40 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015
(1)

(12)

(13)

S aBcDeF | F | Bc
( 4)

(5)

(6)

(7)

B b |

Dd |
(8 )

F G

(9)

(10)

G f | g

(ii) Dac neterminalul care are o producie are i alte producii, atunci
- va fi eliminat doar producia lui
- toate produciile care au ca membru drept un cuvnt de lungime minim 2 n care
apare acest neterminal vor fi nlocuite att de varianta n care cuvntul conine
neterminalul, ct i de varianta n care neterminalul este eliminat din cuvnt
- dac membrul drept avea lungime 1 (adic era doar acest neterminal), atunci aceast
producie este o redenumire i va fi eliminat la pasul 2
n EXEMPLU:
Neterminalele B i D au mai multe producii printre care i cte o producie. Deci
(5) i (7) vor fi eliminate.
n producia (13) apare doar B, deci va fi nlocuit cu SBc (14) i Sc (15).
n producia (1) apar i B i D, deci va fi nlocuit de toate variaiile posibile:
-- B i D prezente: SaBcDeF (16)
-- B lips, D prezent: SacDeF (17)
-- B prezent, D lips: SaBceF (18)
-- B i D lips: SaceF (19)
(16)

(17)

(18)

(19)

(11)

(14)

(15)

S aBcDeF | acDeF | aBceF | aceF | F | Bc | c


( 4)

B b

(6)

; Dd

(8)

( 9 ) (10)

; F G ; G f | g

Pasul 2 Eliminarea redenumirilor


Vrem s nu mai avem n gramatic producii care au ca membru drept un neterminal.
nlocuim neterminalul din dreapta cu toate cuvintele care sunt membru drept n
produciile sale.
Verificm dac acest neterminal din dreapta mai apare n dreapta n cadrul altor producii
- Daca nu, atunci eliminm toate produciile pe care le avea.
- Dac mai apare n cuvinte de lungime minim 2, arunci trebuie s i le pstrm
- Dac apare n cuvnt de lungime 1, nseamn c este tot o redenumire i va fi
eliminat tot la pasul 2
n EXEMPLU:
Avem dou iruri de redenumiri:
F G (8) f (9) | g (10)
Producia (8) va fi nlocuit cu Ff (20) i Fg (21).
- 41 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015
Neterminalul G nu mai apare nicieri n dreapta, deci vom elimina (9) i (10).
S F (11) f (20) | g (21)
Producia (11) va fi nlocuit cu Sf (22) i Sg (23).
Dar neterminalul F mai apare n dreapta n produciile 1619, deci NU vom
elimina produciile lui F.
(16)

(17)

(18)

(19)

( 22) ( 23)

(14)

(15)

S aBcDeF | acDeF | aBceF | aceF | f | g | Bc | c


( 4)

B b

(6)

; Dd

( 20) ( 21)

; F f | g

Pasul 3 Adugare neterminale noi pentru terminalele din cuvinte


Vrem ca terminalele s apar doar singure n membrul drept. De aceea, peste tot unde
apar n componena unui cuvnt de lungime minim 2, le vom nlocui cu un neterminal
nou i vom aduga producia de la neterminalul nou la terminalul pe care l-a nlocuit.
n EXEMPLU:
Produciile 22, 23, 15, 4, 6, 20, 21 au deja forma dorit.
Producia (16) va fi nlocuit cu S Xa B Xc D Xe F (24).
Producia (17) va fi nlocuit cu S Xa Xc D Xe F (25).
Producia (18) va fi nlocuit cu S Xa B Xc Xe F (26).
Producia (19) va fi nlocuit cu S Xa Xc Xe F (27).
Producia (14) va fi nlocuit cu S B Xc (28).
n plus, vom avea Xaa (29); Xcc (30); Xee (31).
( 24)

( 25)

( 26)

( 27 )

( 22) ( 23)

( 28)

(15)

S Xa B Xc D Xe F | Xa Xc D Xe F | Xa B Xc Xe F | Xa Xc Xe F | f | g | B Xc | c
( 4)

B b

(6)

; D d

( 29)

Xa a

( 20) ( 21)

; F f | g
( 30)

Xc c

( 31)

Xe e

Pasul 4 Adugare neterminale noi pentru spargerea cuvintelor lungi (>2)


Vrem ca n dreapta s avem cuvinte formate din exact dou neterminale. De aceea, unde
avem cuvinte mai lungi, pstrm doar primul neterminal din cuvnt i i alipim un
neterminal nou, iar noul neterminal va avea o producie cu membrul drept cuvntul pe
care l-a nlocuit. Relum procedeul pn cnd toate cuvintele ajung la lungimea 2.
Obs: Fiecare producie care avea un cuvnt de lungime k va fi nlocuit de k1 producii
cu cuvinte de lungime 2.
n EXEMPLU:
Producia (24) va deveni SXa Y1 (32), iar Y1 ~ B Xc D Xe F.
Apoi Y1B Y2 (33), iar Y2 ~ Xc D Xe F.
Apoi Y2Xc Y3 (34), iar Y3 ~ D Xe F.
Apoi Y3D Y4 (35), iar Y4~ Xe F.
n final Y4 Xe F (36).
Observm c putem avea sufixe comune ale cuvintelor i atunci am putea folosi
neterminale deja adugate anterior.

- 42 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015
Producia (25) va deveni SXa Y2 (37), pentru c aveam Y2 ~ Xc D Xe F.
Producia (26) va deveni SXa Y5 (38), iar Y5 ~ B Xc Xe F.
Apoi Y5B Y6 (39), iar Y6 ~ Xc Xe F.
Apoi Y6Xc Y4 (40), pentru c aveam Y4~ Xe F.
Producia (27) va deveni SXa Y6 (41), pentru c aveam Y6 ~ Xc Xe F.
( 32)

( 37 )

( 38)

( 41)

( 22) ( 23)

( 28)

(15)

S X a Y1 | X a Y2 | X a Y5 | X a Y6 | f | g | B X c | c
( 4)

B b

(6)

; Dd

( 29)

Xa a

( 33)

Y1 B Y2

( 20) ( 21)

; F f | g
( 30)

Xc c

( 34)

; Y2 X c Y3

( 31)

Xe e

( 35)

; Y3 D Y4

( 36)

; Y4 X e F

( 39)

; Y5 B Y6

( 40)

; Y6 X c Y4

Automatul Push-Down (APD) / Automatul Stiv


APD = (Q, , q0, F, , , Z0)
Q mulimea de stri
alfabetul de intrare
q0 Q starea iniial
F Q mulimea de stri finale
alfabetul stivei (gamma)
Z0 simbolul iniial al stivei
: Q Q funcia de tranziie (delta)
Modul n care funcioneaz tranziiile pentru un APD
- La intrare avem nevoie de 3 parametri:
- starea curent (element din mulimea Q)
- caracterul curent din cuvntul de intrare (element din mulimea )
- simbolul aflat n vrful stivei (element din mulimea )
- La ieire vom avea 2 parametri:
- starea n care ajungem (element din mulimea Q)
- cuvntul cu care nlocuim simbolul din vrful stivei (element din mulimea *)
Atenie! Simbolul din vrful stivei este mereu eliminat din stiv, nainte de a se aduga
noul cuvnt n locul lui.
Deci avem mai multe variante pentru aceast nlocuire:
- Dac scriem n stiv, nseamn c doar am ters simbolul din vrful stivei fr
a aduga nimic n locul lui.
- Dac scriem acelai caracter n stiv (cel care fusese eliminat), nseamn c dorim
s pstrm stiva nemodificat.
- Dac scriem n stiv un cuvnt de lungime minim 2 avem dou cazuri:

- 43 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015
-- dac dorim s pstrm i caracterul care era deja n stiv, atunci cuvntul
introdus va avea ultima liter exact cea care fusese eliminat (deci partea de
nceput, din stnga, a cuvntului reprezint vrful stivei).
-- dac nu dorim s pstrm caracterul care era n vrful stivei, ci chiar s-l
nlocuim, atunci cuvntul se poate termina cu alt caracter dect cel eliminat.
Obs: La fel ca automatele finite, i automatele push-down pot fi:
- deterministe (definite anterior, dar sunt acceptate i tranziiile! Dar dac ntre
dou stri avem tranziie, nu putem avea tranziie i cu un caracter din .)
- nedeterministe (cnd avem mai multe posibiliti de continuare: fie ajungnd n
stri diferite, fie scriind pe stiv cuvinte diferite, fie ambele (ajungnd n stri
diferite i scriind pe stiv cuvinte diferite))
- nedeterministe cu tranziii (cnd ntre dou stri avem voie s avem tranziii
i cu i cu caractere din i n plus avem nedeterminismul descris anterior)

Modaliti de acceptare a unui cuvnt de ctre un APD


(a) cu stri finale
*

LF ( APD) {w | (q0 , w, Z 0 ) ( p, , ), p F , }
(Obs: semnul cu stelu deasupra ar trebui s fie doar T-ul ntors, fr sgeat n
dreapta, dar nu am gsit simbolul potrivit...)
Citim: Cuvntul w este acceptat de automat dac pornind din configuraia avnd starea
q0, cuvntul de intrare w i pe stiv simbolul iniial Z0, dup ce aplicm un numr
oarecare de tranziii ajungem n configuraia final.
n acest caz (a) ne intereseaz:
- prima component s fie o stare final;
- a doua component s fie cuvntul vid (adic s fi terminat de parcurs tot cuvntul
de intrare)
n acest caz (a) NU ne intereseaz a treia component (coninutul stivei): poate s fie vid
sau poate s conin un cuvnt cu simboluri din alfabetul .
(b) cu vidarea stivei
*

L ( APD) {w | (q0 , w, Z 0 ) ( p, , ), p Q}

n acest caz (b) ne intereseaz:


- a doua component s fie cuvntul vid (adic s fi terminat de parcurs tot cuvntul
de intrare)
- a treia component s fie cuvntul vid (adic stiva s fie vid)
n acest caz (b) NU ne intereseaz prima component: starea n care ajungem poate s fie
final sau poate s fie nefinal.

- 44 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015
Obs: Atenie, dac tergei tot coninutul stivei, automatul i oprete funcionarea,
pentru c nu poate aplica funcia delta dac nu mai are parametrul al treilea (simbolul din
vrful stivei). Deci asigurai-v c nu se va ntmpla asta nainte de a fi citit tot cuvntul
de intrare. n general e bine s-l pstrm pe Z0 la nceput i s-l eliminm abia la final
(eventual folosind o tranziie).
(c) cu stri finale i cu vidarea stivei
n unele cri apare i acest al treilea caz, care este de fapt intersecia primelor dou.
*

LF & ( APD) {w | (q0 , w, Z 0 ) ( p, , ), p F}


n acest caz (c) ne intereseaz:
- prima component s fie o stare final;
- a doua component s fie cuvntul vid (adic s fi terminat de parcurs tot cuvntul
de intrare)
- a treia component s fie cuvntul vid (adic stiva s fie vid)

EXEMPLE (automate push-down):


De fiecare dat vom scrie n cuvinte modul n care vom folosi stiva.
Adic pentru un caracter anume citit din cuvntul de intrare ce dorim s se ntmple pe
stiv:
- s eliminm de tot vrful stivei sau s-l pstrm?
- s scriem i ceva n plus sau s lsm stiva exact cum era nainte?
Putem reprezenta automatul push-down n dou moduri:
(i) Fie alegem s scriem lista cu cazurile n care definim funcia de tranziie i menionm
dac avem stri finale care sunt ele.
(ii) Fie alegem s facem ca la automatele finite, s desenm sub form de graf cu nodurile
stri i muchiile tranziii.
Obs: Avantajul alegerii variantei (i) ar fi faptul c putem pune comentarii n dreptul
rndurilor pentru a urmri mai uor logica automatului, iar dac greim ceva cnd scriem
pe foaie e mult mai uor de corectat prin tierea/adugarea unui rnd (mai ales pentru c
nu conteaz ordinea n care sunt scrise rndurile) dect modificarea pe desen.
Totui, pentru unele limbaje se poate s vi se par mai intuitiv varianta cu graful i
atunci o putei folosi.

L1 = {anbn, n 1}
Vrem ca numrul de a-uri s fie egal cu numrul de b-uri, deci vom reine acest
numr cu ajutorul stivei astfel:
- pentru fiecare a citit din cuvntul de intrare, vom aduga un A n stiv;
- pentru fiecare b citit vom terge un A din stiv;

- 45 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015
Trebuie s ne asigurm c citim cel puin un a i un b (pentru c n 1) i c literele
nu sunt amestecate. De aceea, dup ce citim primul b va trebui s schimbm starea.

(q0 , a, Z 0 ) (q0 , AZ0 ) // citim primul a, mereu iniial l gsim pe Z0 n stiv


// vrem s scriem A, dar s-l pstrm i pe Z0, deci scriem AZ0
(q0 , a, A) (q0 , AA) // citim oricare alt a i avem A n stiv (introdus anterior),
// vrem s scriem A, dar fr s-l tergem pe anteriorul, deci scriem AA
(q0 , b, A) (q1 , ) // citim primul b, gsim A n stiv
// schimbm starea, vrem s-l tergem pe A, deci scriem n locul lui
(q1 , b, A) (q1 , ) // citim oricare alt b, gsim sigur A n stiv; scriem pe stiv
Pentru a termina execuia i a accepta cuvintele prin cele 3 metode:
(a) cu stri finale:
Adugm (q1 , , Z 0 ) (q2 , Z 0 ) sau (q1 , , Z 0 ) (q2 , ) .
Avem F {q2 } stare final. Putem s-l pstrm pe Z0 pe stiv sau s-l tergem.
(b) cu vidarea stivei:
Adugm (q1 , , Z 0 ) (q1 , ) sau (q1 , , Z 0 ) (q2 , ) .
Putem avea q1 F , q2 F . Ne intereseaz doar s avem pe stiv.
(c) cu stri finale i cu vidarea stivei:
Adugm (q1 , , Z 0 ) (q2 , ) .
Avem F {q2 } stare final i stiva vid.
Aceeai soluie (c), sub form de graf:

Obs: Tranziiile se reprezint cu structura urmtoare: caracterul citit la intrare, apoi


virgul, apoi caracterul care va fi eliminat din vrful stivei, apoi punct i virgul (sau
slash / ), apoi cuvntul care va fi scris n stiv (cu aceeai convenie, prima liter din
cuvnt este cea care va fi n vrful stivei dup adugarea cuvntului).

L2 = {anb2n, n 0}
Pentru fiecare a citit, vom aduga doi de A n stiv (adic AA).
Pentru fiecare b citit, vom terge un A din stiv.
Astfel ne asigurm c numrul de b-uri este dublul celui de a-uri.
Schimbm starea dup ce citim primul b, pentru a nu amesteca literele.
Trebui s ne asigurm c acceptm i cuvntul vid (pentru c avem n 0).

- 46 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015

(q0 , a, Z 0 ) (q0 , AAZ 0 ) // adaugam AA pentru primul " a"


(q0 , a, A) (q0 , AAA) // adaugam AA pentru oricare " a"
(q0 , b, A) (q1 , ) // stergem un A pentru primul " b"
(q1 , b, A) (q1 , ) // stergem un A pentru oricare " b"
(q1 , , Z 0 ) (q2 , ) // gata cuvantul, stare finala si stiva vida
(q0 , , Z 0 ) (q2 , ) // acceptam cuvantul vid , stare finala si stiva vida
F {q2 }

Aceeai soluie, sub form de graf:

L3 = {a2n bk c3k dn, n 1, k 1}


Pentru fiecare aa de la nceputul cuvntului trebuie s avem d la finalul cuvntului.
(Obs: Dac am vrea s adugm cte un A pentru fiecare a, atunci ar trebui ca pentru
fiecare d s dispar doi de A; nu putem face asta direct, ci ar trebui un circuit de
lungime 2 ntre dou stri, cu o muchie se elimin un A pentru d-ul citit, iar cu muchia
de ntoarcele se elimin un A fcnd o tranziie)
Cel mai simplu, pentru pentru fiecare aa citii, vom scrie n stiv un singur A (pentru
primul a din pereche se adaug A, pentru al doilea a nu se modific stiva). Avem
nevoie de circuit de lungime 2 pentru a controla ca numrul de a-uri s fie par.
La mijlocul cuvntului, pentru fiecare b din stnga trebuie s avem ccc n dreapta.
Deasupra A-urilor din stiv, pentru fiecare b vom aduga cte 3 de B.
Apoi pentru fiecare c vom terge cte un B din stiv.
(Obs: Pentru c-uri nu vom avea nevoie de circuit de lungime 3 ntre stri pentru c n
stiv avem deja un numr de B-uri multiplu de 3.)
La final, pentru fiecare d vom terge cte un A.

(q0 , a, Z 0 ) (q1 , AZ 0 ) // pentru primul a, adugm un A


(q1 , a, A) (q0 , A) // pentru a-ul al 2-lea (4-lea, 6-lea, ...) nu modificm stiva
(q0 , a, A) (q1 , AA) // pentru a-ul al 3-lea (5-lea, 7-lea, ...) adugm un A
(q0 , b, A) (q2 , BBBA ) // pentru primul b schimbm starea, adugm BBB
(q2 , b, B) (q2 , BBBB ) // pentru orice alt b, adugm BBB
(q2 , c, B) (q3 , ) // pentru primul c schimbm starea, tergem un B
(q3 , c, B) (q3 , ) // pentru orice alt c, tergem un B
(q3 , d , A) (q3 , ) // pentru orice d, tergem un A

- 47 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015

(q3 , , Z0 ) (q4 , ) // am terminat cuvntul, stare final i stiv vid


F {q4}
Obs: Cnd am nceput s citim d-urile nu a fost neaprat necesar s schimbm starea
fa de cea n care am citit c-urile, deoarece nu exist problema amestecrii lor.
Putem citi c-uri doar att timp ct gsim B-uri n stiv, iar apoi putem citi d-uri
doar pentru A-urile din stiv.
Aceeai soluie, sub form de graf:

Verificare acceptare cuvnt de ctre un APD


Folosim configuraii (sau descrieri instantanee) avnd 3 componente: starea curent,
ct a mai rmas de citit din cuvntul de intrare i (ntreg!) coninutul stivei (partea stng
fiind vrful stivei, unde se fac tergerile i scrierile).
Fie n = 3 i k = 2, deci avem cuvntul a6b2c6d3.
Scriu de fiecare dat numrul tranziiei pe care am aplicat-o (a cta era n lista scris
anterior).
(q0, a6b2c6d3, Z0) (1) (q1, a5b2c6d3, AZ0) (2) (q0, a4b2c6d3, AZ0)
(3) (q1, a3b2c6d3, AZ0) (2) (q0, a2b2c6d3, AAZ0)
(3) (q1, ab2c6d3, AAAZ0) (2) (q0, b2c6d3, AAAZ0)
(4) (q2, bc6d3, BBBAAAZ0) (5) (q2, c6d3, B6A3Z0)
(6) (q3, c5d3, B5A3Z0) (7) (q3, c4d3, B4A3Z0) (7) (q3, c3d3, B3A3Z0)
(7) (q3, c2d3, B2A3Z0) (7) (q3, cd3, BA3Z0) (7) (q3, d3, A3Z0)
(8) (q3, d2, A2Z0) (8) (q3, d, AZ0) (8) (q3, , Z0)
(9) (q4, , ), q4 F , deci cuvntul este acceptat.

L4 = {a2n b3n c2k dk, n 1, k 1}


Acum avem grupate primele dou pri i ultimele dou pri.
Pentru fiecare aa trebuie s avem apoi bbb. Pentru primul a din fiecare pereche
vom aduga A n stiv, iar pentru al doilea a din fiecare pereche vom aduga AA n
stiv. Deci pentru fiecare b vom terge cte un A din stiv.
(Obs: Am fi putut la fel de bine pentru unul dintre a s scriem AAA iar pentru cellalt
nimic. Orice variant am alege, important e ca dup citirea aa s apar AAA n stiv.)
Apoi, dup ce toi A au fost teri, trebuie s avem pentru fiecare cc cte un d. Pentru
primul c din fiecare pereche vom aduga un D n stiv, iar pentru al doilea c din
fiecare pereche vom lsa stiva nemodificat. Apoi pentru fiecare d citit vom terge un
D din stiv.

- 48 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015
Att pentru a-uri ct i pentru c-uri vom avea nevoie de cte un circuit de lungime 2
ntre stri.

(q0 , a, Z 0 ) (q1 , AZ 0 ) // pentru primul a, adugm un A


(q1 , a, A) (q0 , AAA) // pentru a-ul al 2-lea (4-lea, 6-lea, ...) adugm AA
(q0 , a, A) (q1 , AA) // pentru a-ul al 3-lea (5-lea, 7-lea, ...) adugm un A
(q0 , b, A) (q2 , ) // pentru primul b schimbm starea, tergem un A
(q2 , b, A) (q2 , ) // pentru orice alt b, tergem un A
(q2 , c, Z 0 ) (q3 , DZ 0 ) // pentru primul c schimbm starea, adugm un D
(q3 , c, D) (q2 , D) // pentru c-ul al 2-lea (4-lea, 6-lea, ...) nu modificm stiva
(q2 , c, D) (q3 , DD ) // pentru c-ul al 3-lea (5-lea, 7-lea, ...) adugm un D
(q2 , d , D) (q4 , ) // pentru primul d schimbm starea, tergem un D
(q4 , d , D) (q4 , ) // pentru orice alt d, tergem un D
(q4 , , Z 0 ) (q5 , ) // am terminat cuvntul, stare final i stiv vid
F {q5 }
Obs: Cnd am vrut s nchidem circuitul pentru c-uri nu a trebuit neaprat s
schimbm starea, am putut folosi q2 pentru c aveam b cu A i c cu D (sau Z0), deci
nu exista risc de amestecare. Dar cnd am nceput citirea d-urilor a trebuit s o
schimbm pentru c aveam c cu D i d cu D, deci s-ar fi putut amesteca adugrile
i tergerile D-urilor (adic c-urile cu d-urile).
Aceeai soluie, sub form de graf:

- 49 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015

~ Seminar 5 ~
(Exemple cu APD (continuare) ;
Algoritmul CYK: Verificare generare cuvnt de ctre gramatic n F.N.Chomsky)

EXEMPLE (automate push-down) [continuare]:


Notm cu wR cuvntul oglindit al lui w. (R vine de la reverse)
De exemplu: (abcde)R = edcba

L5 = { w wR | w {a,b,c}* \ {} } (palindroame de lungime par)


= {aa, bb, cc, abba, acca, baab, bccb, caac, cbbc,
aaaaaa, aabbaa, aaccaa, abaaba, abbbba, abccba, acaaca, acbbca, acccca, ...}
Pentru prima jumtate de cuvnt am dori ca pentru fiecare a s adugm un A n stiv,
pentru fiecare b s adugm un B, iar pentru fiecare c c adugm un C. Vrem ca
literele s fie amestecate deci trebuie s folosim aceeai stare pentru toate citirile.
Pentru a doua jumtate de cuvnt am dori ca pentru fiecare a s tergem un A, pentru
fiecare b s tergem un B, iar pentru fiecare c s tergem un C. La fel, folosind
aceeai stare pentru toate tergerile.
Dar putem ca exact dup prima liter din a doua jumtate a cuvntului s schimbm
starea? NU, pentru c nu avem de unde ti unde este jumtatea cuvntului!
Deci dac cuvntul conine undeva aa, nu vom ti dac exact acolo este mijlocul (deci
ar trebui s trecem n starea pentru tergeri) sau dac suntem cumva tot n prima jumtate
(deci trebuie s scriem i pentru al doilea).
De aceea, acesta va fi un APD nedeterminist !

(q0 , a, Z 0 ) (q0 , AZ0 ) // cuvntul ncepe cu a


(q0 , b, Z 0 ) (q0 , BZ 0 ) // sau cuvntul ncepe cu b
(q0 , c, Z 0 ) (q0 , CZ 0 ) // sau cuvntul ncepe cu c
(q0 , a, A) {( q0 , AA), (q1 , )} // fie scriem; fie am ajuns la mijloc, alt stare i tergem
(q0 , a, B) (q0 , AB) // pstrm B-ul, scriem A
(q0 , a, C ) (q0 , AC ) // pstrm C-ul, scriem A
(q0 , b, B) {( q0 , BB ), (q1 , )} // fie scriem; fie am ajuns la mijloc, alt stare i tergem
(q0 , b, A) (q0 , BA) // pstrm A-ul, scriem B
(q0 , b, C ) (q0 , BC ) // pstrm C-ul, scriem B
(q0 , c, C ) {( q0 , CC), (q1 , )} // fie scriem; fie am ajuns la mijloc, alt stare i tergem
(q0 , c, A) (q0 , CA) // pstrm A-ul, scriem C

- 50 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015

(q0 , c, B) (q0 , CB) // pstrm B-ul, scriem C


(q1 , a, A) (q1 , ) // tergem A cnd citim a din a doua jumtate
(q1 , b, B) (q1 , ) // tergem B cnd citim b din a doua jumtate
(q1 , c, C) (q1 , ) // tergem C cnd citim c din a doua jumtate
(q1 , , Z 0 ) (q2 , ) // gata cuvntul, stare final, stiv vid
F {q2 }
nainte de a decide c nu accept un cuvnt, APD-ul nedeterminist va ncerca toate
drumurile posibile.
De exemplu, dac avem cuvntul aaaa.
Plecm din configuraia (q0, aaaa, Z0), aplicm tranziia (1) i ajungem n (q0, aaa, AZ0).
Apoi avem dou variante de continuare:
(i) Dac aplicm tranziia (4), ajungem n (q0, aa, AAZ0).
Acum avem din nou dou variante de continuare:
(i.i) Dac aplicm tranziia (4), ajungem n (q0, a, AAAZ0).
Din nou, avem cele dou variante de continuare:
(i.i.i) Dac aplicm tranziia (4), ajungem n (q0, , AAAAZ0).
De aici, nu avem nicio posibilitate de continuare, deci cuvntul nu va fi
acceptat folosind acest drum.
(i.i.ii) Dac aplicm tranziia (5), ajungem n (q1, , AAZ0).
Am terminat de citit cuvntul, dar avem A n vrful stivei, deci cuvntul
nu va fi acceptat folosind acest drum.
(i.ii) Dac aplicm tranziia (5), ajungem n (q1, a, AZ0).
Aplicm tranziia (16), ajungem n (q1, , Z0).
Aplicm (19), ajungem n (q2, , ) i acceptm cuvntul.
(ii) Dac aplicm tranziia (5), ajungem n (q1, aa, Z0).
De aici, nu avem nicio posibilitate de continuare. Nu am terminat de citit tot cuvntul
de intrare, deci nu va fi acceptat folosind acest drum.
Aceeai soluie, sub form de graf:

- 51 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015
Obs: Pn acum am avut doar condiii cu egaliti ntre puteri (sau divizori ai puterilor),
dar putem avea i inegaliti.

L6 = {an bk, n > k 1}


Pentru fiecare a vom aduga un A n stiv, pentru fiecare b vom terge un A din
stiv.
Numrul de a-uri trebuie s fie strict mai mare dect numrul de b-uri. De aceea,
dup ce am terminat de citit cuvntul de intrare, trebuie s mai existe cel puin un A n
stiv. Schimbm starea, tergem toat stiva i accepm cuvntul.

(q0 , a, Z 0 ) (q0 , AZ 0 )
(q0 , a, A) (q0 , AA)
(q0 , b, A) (q1 , )
(q1 , b, A) (q1 , )
(q1 , , A) (q2 , ) // obligatoriu mai gsete cel puin un A n stiv
(q2 , , A) (q2 , ) // altfel nu poate ajunge din q1 n q3
(q2 , , Z 0 ) (q3 , ) , F {q3 }
Aceeai soluie, sub form de graf:

Obs: Dac am fi avut n schimb condiia n k 1, am fi avut n plus tranziia


(q1 , , Z 0 ) (q3 , ) pentru cazul de egalitate (n=k).
Pentru condiia n > k 0, am fi avut i (q0 , , A) (q2 , ) (n plus fa de cele
iniiale), pentru k=0.
Pentru (pentru n k 0) am fi avut (q1 , , Z 0 ) (q3 , ) (pentru n=k) i

(q0 , , Z 0 ) (q2 , Z 0 ) (pentru k=0).

L7 = {an bk, k > n 1}


Pentru fiecare a vom aduga un A n stiv, pentru fiecare b vom terge un A din
stiv.
Numrul de a-uri trebuie s fie strict mai mic dect numrul de b-uri. De aceea, dup
ce vom elimina toi de A din stiv va trebui s mai citim cel puin un b din cuvnt i s
lsm stiva nemodificat. Cnd am terminat de citit cuvntul, schimbm starea, l tergem
i pe Z0 din stiv i accepm cuvntul.

(q0 , a, Z 0 ) (q0 , AZ 0 )

- 52 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015

(q0 , a, A) (q0 , AA)


(q0 , b, A) (q1 , )
(q1 , b, A) (q1 , )
(q1 , b, Z 0 ) (q2 , Z 0 ) // obligatoriu mai citete cel puin un b
(q2 , b, Z 0 ) (q2 , Z 0 ) // dar nu uitm c trebuie s-l pstrm pe Z0 pn la final
(q2 , , Z 0 ) (q3 , ), F {q3}
Aceeai soluie, sub form de graf:

Obs: Dac era condiia k n 1 aveam i (q1 , , Z 0 ) (q3 , ) (pentru k=n).


Dac era k > n 0 aveam i (q0 , b, Z 0 ) (q2 , Z 0 ) (pentru n=0).
Dac era k n 0 aveam (q1 , , Z 0 ) (q3 , ) (pentru k=n) i
(q0 , , Z 0 ) (q2 , Z 0 ) (pentru n=0).

L8 = {an bk, n 1, k 1, n k}
Putem avea fie numrul de a-uri strict mai mare dect numrul de b-uri fie invers
(numrul de b-uri strict mai mare dect numrul de a-uri).
Pentru fiecare a vom aduga un A, iar pentru fiecare b vom terge un A. Fie ne vor
rmne A-uri n stiv dup ce terminm de citit cuvntul de intrare (dac n > k), fie vom
ntlni Z0 dar vom mai citi cel puin un b din cuvnt (dac n < k).

(q0 , a, Z 0 ) (q0 , AZ 0 )
(q0 , a, A) (q0 , AA)
(q0 , b, A) (q1 , )
(q1 , b, A) (q1 , )
// n > k
(q1 , , A) (q2 , ) // obligatoriu mai gsete cel puin un A n stiv
(q2 , , A) (q2 , ) // altfel nu poate ajunge din q1 n q4
( q2 , , Z 0 ) ( q4 , )
// n < k
(q1 , b, Z 0 ) (q3 , Z 0 ) // obligatoriu mai citete cel puin un b
(q3 , b, Z 0 ) (q3 , Z 0 ) // dar nu uitm c trebuie s-l pstrm pe Z0 pn la final
(q3 , , Z 0 ) (q4 , )

F {q4 }

- 53 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015
Aceeai soluie, sub form de graf:

L9 = {a2n b3k, n 1, k 1, n k}
Obs: Exist i o alt modalitate de a avea circuite de o anumit lungime. n loc s
folosim stri diferite, putem folosi simboluri diferite n stiv pe care le nlocuim unul cu
altul.
Trebuie s avem grupuri de cte doi a. Cnd l citim pe primul din grup adugm un A
n stiv. Cnd l citim pe al doilea din grup vom nlocui A-ul cu un B. La final vom avea
n de B n stiv.
Trebuie s avem grupuri de cte trei b. Cnd citim primul b din grup nlocuim un B
cu C n stiv. Cnd citim al doilea b din grup nlocuim C-ul cu un D. Iar cnd citim al
treilea b din grup tergem D-ul din stiv.
Deci avem circuit ntre A-B-A pentru 2n i circuit ntre B-C-D-B pentru 3k.

(q0 , a, Z 0 ) (q0 , AZ 0 ) // pentru primul a, adugm A


(q0 , a, A) (q0 , B) // pentru al 2-lea (4-lea, 6-lea, ...) a, nlocuim A cu B
(q0 , a, B) (q0 , AB) // pentru al 3-lea (5-lea, 7-lea, ...) a, adugm A
// schimbm starea cnd ncepem citirea b-urilor
(q0 , b, B) (q1 , C ) // pentru primul b, nlocuim B cu C
(q1 , b, C) (q1 , D) // pentru al doilea (al 3m+2 -lea) b, nlocuim C cu D
(q1 , b, D) (q1 , ) // pentru al treilea (al 3m+3 -lea) b, tergem D-ul
(q1 , b, B) (q1 , C) // pentru al patrulea (al 3m+1 -lea) b, nlocuim B cu C
(q1 , , Z 0 ) (q2 , ), F {q2 }
Aceeai soluie, sub form de graf:

- 54 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015

Algoritmul CYK (verificare generare cuvnt de ctre gramatic n


F.N.Chomsky)
Am vzut c dac gramatica avea producii specifice uneia independente de context,
atunci foloseam arbori de derivare i porneam de la simbolul de start S i ncercam s
ajungem la cuvntul dat. (pagina 36 n acest document)
Dar dac gramatica are produciile scrise n forma normal Chomsky, atunci vom folosi
acest algoritm CYK, i vom porni de la cuvntul dat ncercnd s ajungem la simbolul de
start S.
Vi j { A N | B Vi k , C Vi k , j k , ( A BC ) P, k {1,2,..., j 1}}

Notm cu Vi j mulimea de neterminale care pot genera acea poriune din cuvntul de
intrare care ncepe de pe poziia i i are lungimea j.
Ideea este de a mpri cuvntul n dou pri n toate modurile posibile. Dac prima
parte poate fi generat de neterminalul B, a doua parte poate fi generat de neterminalul
C i avem n gramatic producia ABC, atunci nseamn c ntreg cuvntul poate fi
generat de neterminalul A.
Observm c avem mpriri posibile pentru k=1 (prima liter n prima parte, iar restul n
a doua), k=2 (primele dou litere n prima parte, iar restul n a doua), ... pn la k=j1
(doar ultima liter n a doua parte, iar restul n prima).
Obs: Nu reinei indicii pe dinafar, ci ncercai s i deducei logic!
Valoare pe care o calculm este Vi j pentru cuvntul care ncepe la poziia i i are
lungimea j.
Prima parte (generat de neterminalul B) conine primele k litere din cuvnt. Deci va
ncepe la poziia i (la fel ca ntreg cuvntul) i va avea lungime k, deci Vi k.
A doua parte (generat de neterminalul C) conine restul de litere, adic jk, i ncepe cu
k poziii mai n dreapta fa de cuvntul total, adic la i+k, deci avem Vi+k, j-k.
Rspunsul final pe care l cutm este V1, |w| adic mulimea de neterminale din care
putem genera cuvntul dat ncepnd de pe prima poziie i avnd lungimea egal cu
ntreg cuvntul. Dac n aceast mulime se va gsi i simbolul de start S, nseamn c
cuvntul este generat de gramatic. Dac nu, atunci nu este generat.
La pasul iniial vom cuta neterminalele care genereaz fiecare liter mic (terminal) din
cuvnt: Vi1 { A N | ( A xi ) P} , unde xi este litera de pe poziia i din cuvntul dat.

- 55 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015

EXEMPLU:
S BA
A a | BA | CA
Avem o gramatic n F.N.Chomsky:
i un cuvnt: baabca.
B b | AA | AB
C c | BC | BB

Avem un tabel cu i pe coloane i j pe linii n care vom completa neterminalele din


mulimile Vi j. Variabilele i i j iau valori ntre 1 i 6 (lungimea cuvntului dat).
Observm c putem avea maxim i + j 1 = |w| = 6. Deci de exemplu V62 nu va fi
calculat (6 + 2 1 = 7 > 6) pentru c dac ncepem pe poziia 6 (ultima) nu vom putea
avea lungimea 2 n cuvnt.
Pentru prima linie, j = 1, vom cuta n gramatic pentru fiecare liter mic de ce
neterminale poate fi generat.
Vom avea V21 V31 V61 { A} pentru c litera a se afl n cuvnt pe poziiile 2, 3, 6,
iar neterminalul A este singurul care genereaz a.
Vom avea V11 V41 {B} pentru c litera b se afl n cuvnt pe poziiile 1, 4, iar
neterminalul B este singurul care genereaz b.
Vom avea V51 {C} pentru c litera c se afl n cuvnt pe poziia 5, iar neterminalul C
este singurul care genereaz c.
Vi j
j=1
j=2
j=3
j=4
j=5
j=6

i=1
{B}

i=2
{A}

i=3
{A}

i=4
{B}

i=5
{C}

i=6
{A}

Pentru a doua linie, j = 2, avem cuvinte de lungime 2, deci nu le putem separa dect ntrun singur mod, pentru k = 1.
V12 V11 V21 {B}{A} {BA}
n gramatic apare BA ca membru drept pentru neterminalele S i A, deci n tabel vom
completa cu mulimea {S, A}.
V22 V21 V31 { A}{ A} { AA}
Singurul neterminal care se rescrie n AA este B, deci l trecem n tabel.
V32 V31 V41 { A}{B} { AB} rezult B n tabel.
V42 V41 V51 {B}{C} {BC} rezult C n tabel.
V52 V51 V61 {C} { A} {CA} rezult A n tabel.
Obs: Pentru a calcula orice valoare de pe linia j=2 se face produsul cartezian ntre
mulimile aflate la nord i la nord-est de acea valoare.

- 56 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015
Vi j
j=1
j=2
j=3
j=4
j=5
j=6

i=1
{B}
{S, A}

i=2
{A}
{B}

i=3
{A}
{B}

i=4
{B}
{C}

i=5
{C}
{A}

i=6
{A}

Pentru a treia linie, j = 3, avem cuvinte de lungime 3, deci putem avea k=1 sau k=2 i
reunim cele dou cazuri.
V13 V11 V22 V12 V31 {B}{B} {S , A}{ A} {BB , SA, AA}
Nu avem SA ca membru drept n gramatic, dar avem BB generat de C, iar AA de B,
deci n tabel completm {B, C}.
V23 V21 V32 V22 V41 { A}{B} {B}{B} { AB, BB} rezult {B, C} n tabel.
V33 V31 V42 V32 V51 { A}{C} {B}{C} { AC, BC} rezult {C} n tabel.
V43 V41 V52 V42 V61 {B}{ A} {C}{ A} {BA, CA} rezult {S, A} n tabel.
Vi j
j=1
j=2
j=3
j=4
j=5
j=6

i=1
{B}
{S, A}
{B, C}

i=2
{A}
{B}
{B, C}

i=3
{A}
{B}
{C}

i=4
{B}
{C}
{S, A}

i=5
{C}
{A}

i=6
{A}

Pentru a patra linie, j = 4, avem cuvinte de lungime 4, deci putem avea k=1, k=2 sau k=3.
V14 (V11 V23 ) (V12 V32 ) (V13 V41 )
Nu avem SB sau CB
{B} {B, C} {S , A} {B} {B, C} {B} {BB , BC , SB, AB, CB}
ca membru drept n gramatic, dar pentru restul avem {B,C} n tabel.
V24 (V21 V33 ) (V22 V42 ) (V23 V51 )

{ A} {C} {B} {C} {B, C} {C} { AC, BC , CC}


Nu avem AC sau CC, dar pentru BC rezult {C} n tabel.
V34 (V31 V43 ) (V32 V52 ) (V33 V61 )
{ A} {S , A} {B} { A} {C} { A} { AS , AA, BA, CA}
Nu avem AS, dar pentru celelalte rezult {S,A,B} n tabel.
Vi j
j=1
j=2
j=3
j=4
j=5
j=6

i=1
{B}
{S, A}
{B, C}
{B, C}

i=2
{A}
{B}
{B, C}
{C}

i=3
{A}
{B}
{C}
{S, A, B}

- 57 -

i=4
{B}
{C}
{S, A}

i=5
{C}
{A}

i=6
{A}

Seminar LFA gr.141-144, 211


@ MN 2014-2015
Pentru a cincea linie, avem cuvinte de lungime j = 5, iar k ia valori ntre 1 i 4.
V15 (V11 V24 ) (V12 V33 ) (V13 V42 ) (V14 V51 )

{B} {C} {S , A} {C} {B, C} {C} {B, C} {C} {BC , SC , AC, CC}
Nu avem SC, AC sau CC, dar pentru BC rezult {C} n tabel.
V25 (V21 V34 ) (V22 V43 ) (V23 V52 ) (V24 V61 )
{ A} {S , A, B} {B} {S , A} {B, C} { A} {C} { A} { AS , AA, AB, BS , BA, CA}
Nu avem AS, BS dar pentru AA, AB, BA, CA rezult {S,A,B} n tabel.
Vi j
j=1
j=2
j=3
j=4
j=5
j=6

i=1
{B}
{S, A}
{B, C}
{B, C}
{C}

i=2
{A}
{B}
{B, C}
{C}
{S, A, B}

i=3
{A}
{B}
{C}
{S, A, B}

i=4
{B}
{C}
{S, A}

i=5
{C}
{A}

i=6
{A}

Pentru linia a asea, avem cuvntul total de lungime j=6, variabila k ia valori ntre 1 i 5.
V16 (V11 V25 ) (V12 V34 ) (V13 V43 ) (V14 V52 ) (V15 V61 )

{B} {S , A, B} {S , A} {S , A, B} {B, C} {S , A} {B, C} { A} {C} { A}


{BS , BA, BB , SS , SA, SB, AS , AA, AB, CS , CA}
Pentru BA, BB, AA, AB, CA avem n tabel {S,A,B,C}.
Vi j
j=1
j=2
j=3
j=4
j=5
j=6

i=1
{B}
{S, A}
{B, C}
{B, C}
{C}
{S,A,B,C}

i=2
{A}
{B}
{B, C}
{C}
{S, A, B}

i=3
{A}
{B}
{C}
{S, A, B}

i=4
{B}
{C}
{S, A}

i=5
{C}
{A}

i=6
{A}

n mulimea final obinut pentru V16 exist S, deci cuvntul este generat de gramatic.
Obs: Dac mulimea final conine i alte elemente, nseamn c acel cuvnt dat ar putea
fi generat i pornind din acele neterminale (A, B sau C). Dar dac existau doar ele i nu
exista i S, acest lucru nu ne ajuta la nimic, cuvntul nu ar fi fost generat de gramatic.
Obs: Unde apare S n tabel nseamn c gramatica genereaz i cuvintele corespunztoare
pentru acele perechi (i, j).
Pentru ij = 12 avem cuvntul ba: S BA b A ba .
Pentru ij = 25 avem aabca, pentru ij = 34 avem abca, pentru ij = 43 avem bca.

- 58 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015

~ Seminar 6 ~
(Leme de pompare pentru limbajele regulate)

Lema de pompare pentru limbajele regulate:


Fie L un limbaj regulat. Atunci n N (numr natural) astfel nct pentru orice cuvnt
L , cu n , putem scrie u v w cu proprietile:

i)

u v n

ii )

v 1

iii ) u v i w L, i 0
Vrem s demonstrm c urmtoarele limbaje nu sunt regulate.
Schema demonstraiei este s presupunem prin absurd c limbajul este regulat i atunci
putem aplica lema anterioar. Alegem un cuvnt din limbajul dat care s respecte
ipoteza lemei, adic s aib lungimea cel puin n, iar descompunerea sa u v w s
respecte condiiile i) i ii). Apoi alegem convenabil un numr natural i pentru care s
obinem o contradicie a condiiei iii), adic s rezulte c cuvntul u v i w L , i deci
presupunerea fcut este fals.

L1 = {ak^2, k 1} = {a1, a4, a9, a16, a25, a36, a49, a64, a81, a100, ...}
Vrem s demonstrm c L1 nu este limbaj regulat. Observm c L1 conine cuvinte
formate doar din litera a i avnd lungimi egale cu ptratele perfecte strict pozitive.
Presupunem prin absurd c L1 este limbaj legulat. Atunci n N i putem aplica lema
2
de pompare. Alegem cuvntul a n , cu n 2 n (deci lungimea cuvntului
respect ipoteza lemei).
Conform lemei, cuvntul poate fi scris sub forma u v w , iar 1 v n (cele dou
inegaliti rezult din condiiile ii) i i) i din faptul c nu se spune c u nu ar putea fi
cuvntul vid, deci de lungime 0).
De asemenea, condiia iii) spune c u v i w L, i 0 . Alegem i 2 . Atunci avem
cuvntul u v 2 w de lungime u v 2 w u v w v v n 2 v .
La inegalitatea de mai sus adunm peste tot n2 i obinem: n2 1 n2 v n2 n , adic
n2 1 u v2 w n2 n .

Dar n 2 n 2 1 i n 2 n n 1 . Rezult c n 2 u v 2 w n 1 , adic


2

u v 2 w L1 (pentru c lungimea cuvntului este inclus strict ntre dou ptrate perfecte
alturate, deci u v 2 w nu poate fi ptrat perfect).

- 59 -

Seminar LFA gr.141-144, 211


@ MN 2014-2015

L2 = {akbk, k 1} = {ab, a2b2, a3b3, a4b4, a5b5, ...}


Vrem s demonstrm c L2 nu este limbaj regulat. Observm c L2 conine cuvinte
formate din k litere de a urmate tot de k litere de b, deci avnd lungimi numere pare
strict pozitive.
Presupunem prin absurd c L2 este limbaj legulat. Atunci n N i putem aplica lema
de pompare. Alegem cuvntul a n b n , cu 2n n (deci lungimea cuvntului
respect ipoteza lemei).
Conform lemei, cuvntul poate fi scris sub forma u v w .
Din condiia i), avem u v n . Rezult c cuvntul u v conine doar litere de a
(pentru c u v este un prefix al primelor n caractere din ).
Atunci fie v a p . Din condiiile i) i ii) avem 1 v n . Deci 1 a p n , adic
1 p n .

De asemenea, condiia iii) spune c u v i w L, i 0 . Alegem i 0 . Atunci avem


cuvntul u v 0 w u w a n p b n L 2 (pentru c p>0, deci numrul de a-uri este strict
mai mic dect numrul de b-uri).

- 60 -

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