Post on 21-Feb-2020
CAPITOLUL 3
LIMBAJE REGULARE
3.1. LEMA DE POMPARE
Am văzut în capitolul 2 că dacă G este o gramatică regulară (toate
producţiile sunt de forma S λ→ , A aB→ sau A a→ ), atunci există o
maşină cu stări finite deterministă M, astfel încât ( ) ( )L G L M= . Deoarece
astfel de maşini sunt uşor de implementat pe calculator – chiar şi în
hardware – soluţia problemei de analiză pare evidentă: Fiind dat un
limbaj L, scriem o gramatică G pentru el astfel încât G să fie regulară iar
apoi construim un automat finit corespunzător. Considerăm, de exemplu,
limbajul
{0 1 | 0,1, 2, }n nL n= = K
care reprezintă mulţimea şirurilor formate din n 0-uri urmate de n 1-uri. O
gramatică pentru acest limbaj poate fi
0 1|S S λ→
care evident nu este regulară. Vom vedea că nu există o gramatică
regulară G astfel încât ( )L G L= . Arătăm aceasta prin a demonstra că nu
există o maşină cu stări finite M cu ( )L M L= . Presupunem că există o
astfel de maşină M şi fie 0 1 1, , , kQ Q Q −K stările acesteia (k din ele). Fie
0 1m mσ = un şir în limbajul L, a cărui lungime este mai mare decât k,
2m k> . Când M se iniţializează cu σ , va trece prin următoarea secvenţă
de mişcări:
0 0 0 0
0 0 1 21 1 1
1 2
ˆ ˆ ˆ ˆ
ˆ ˆm
m m
Q Q Q Q Q
Q Q+
= → → → →
→ → →
L
L
(1.1)
unde 2ˆ
mQ este stare acceptată. Deoarece M are 2k m< stări, unele Q̂ -uri
din (3.1) se repetă, ˆ ˆi i pQ Q += , 0i p > . Fie
1 2
1ˆ ˆ ˆ ˆ 0,1
p
i i i p i jQ Q Q Qεε ε
ε+ +→ → → = =L (1.2)
partea secvenţei (3.1) între aceste două stări şi fie τ secvenţa 1 2 pε ε εK .
Lungimea lui τ este 0p > . Deci 1 2σ σ τσ= şi τ λ≠ . Considerăm secvenţa
1 2ρ σ ττσ= – partea τ din σ se repetă de două ori – vom vedea în
continuare ce se întâmplă când ρ este introdus în M. Iniţial M se află în
configuraţia 0 1 2,Q σ ττσ . Dacă toate simbolurile din 1σ sunt citite, maşina
va trece în configuraţia 2ˆ ,iQ ττσ . După procesarea simbolurilor din
primul τ ,configuraţia va fi 2 2ˆ ˆ, ,i p iQ Qτσ τσ+ = , ˆ ˆ
i p iQ Q+ = . Mai departe,
maşina M va proceda ca în secvenţa (3.1), terminând în configuraţia
acceptată 2ˆ ,mQ λ . Schematic, cu input-ul 1 2ρ σ ττσ= , avem
1 2* **
0 2ˆ ˆ ˆ ˆ ˆ
i i p i mQ Q Q Q Qσ τστ
+→ → = → .
Cum ρ este acceptat de M, 1 2ρ σ ττσ= trebuie să aparţină limbajului L.
Aceasta, însă, este imposibil. Dacă τ se compune doar din 0-uri, atunci
1 2ρ σ ττσ= are mai multe 0-uri decât 1-uri ( 1 2σ σ τσ= are un număr egal de
0-uri şi 1-uri, τ λ≠ ); dacă τ se compune numai din 1-uri, atunci ρ va
avea mai multe 1-uri decât 0-uri. Dacă τ are atât 0-uri cât şi 1-uri, atunci
în şirul 1 2ρ σ ττσ= unele simboluri de 1 vor preceda unele 0-uri, ceea ce de
asemenea nu are loc pentru şiruri din limbajul L. Observăm că în toate
cazurile ρ nu poate fi în L, deci ( )L L M≠ .
Fenomenul descris aici este comun tuturor limbajelor regulare.
Teorema 3.1. (lema de pompare) Fie G o gramatică regulară.
Există un întreg k cu următoarea proprietate: Dacă σ este un şir din ( )L G
de lungime mai mare decât k, atunci σ poate fi scris ca 1 2σ σ τσ= , unde
τ λ≠ , şi în aşa fel încât toate şirurile 1 2 1 2 1 2 1 2, , , , , ,nσ τσ σ ττσ σ τττσ σ τ σK K
să aparţină de asemenea limbajului ( )L G .
Demonstraţie. G fiind o gramatică regulară, există o maşină cu
stări finite M astfel încât ( ) ( )L G L M= (teorema 2.1.). Fie k numărul de
stări din M; 0 1 1, , , kQ Q Q −K . Fie acum 1 2 lx x kσ = K un şir din ( )L G de
lungime l k> . Acest şir este accepta de maşina M, care va trece prin
următoarea secvenţă de configuraţii
1 2 1
0 0 1ˆ ˆ ˆ
x x x
lQ Q Q Q= → → →L (1.3)
unde ˆlQ este stare finală în M. Fiindcă l k> , apar două stări identice în
(3.3), ˆ ˆi i pQ Q += pentru , 0i p > . Fie tranziţia între aceste două stări
21 1
1ˆ ˆ ˆ ˆ ,
i pi xxx
i i i p i jQ Q Q Q x+++
+ +→ → → = ∈ΣL (1.4)
Luăm 1 2i i i px x xτ + + += K . Avem 0p > , τ λ≠ şi putem scrie 1 2σ σ τσ= . Pentru
orice 0n ≥ , mişcarea maşinii M la input-ul 1 2nσ τ σ va fi
1 2* *
0
de n ori
ˆ ˆ ˆ ˆ ˆi i i lQ Q Q Q Q
σ στ τ τ→ → → → →L144424443
şi astfel 1 2nσ τ σ este acceptat de M, deci este în limbajul ( )L M . Q.E.D.
Lema de pompare este de regulă folosită pentru a demonstra că
diferite limbaje nu au aceeaşi gramatică. Fiind dat un limbaj L,
presupunem că are o gramatică regulară şi aplicăm lema de pompare
pentru a obţine o contradicţie; ca în exemplul de la începutul capitolului.
Exemplu 3.1. Fie { | este pătratul unui întreg}nL a n= . Aşadar L se
compune din şiruri de a-uri cu lungimile 1, 4, 9, 16, 25, ..., etc. Vom arăta
în continuare că L nu are o gramatică regulară. Pentru aceasta
presupunem că există o gramatică regulară G astfel încât ( )L L G= şi fie k
întregul descris în lema de pompare. Dacă 2maa a aσ = =K este un şir de
lungime mai mare decât k, 2m k> . Atunci σ poate fi scris 1 2σ σ τσ= , τ λ≠
şi astfel încât pentru fiecare n şirul 1 2nσ τ σ să fie de asemenea în L. Fie 1r
lungimea lui 1σ , t lungimea lui τ şi 2r lungimea lui 2σ , astfel ca2
1 2r t r m+ + = şi 0t > . Discuţia anterioară ne arată că pentru fiecare întreg
n, numărul 1 2r nt r+ + este de asemenea un pătrat perfect, deci pentru
fiecare n avem 22 2 nr nt r j+ + = , unde nj este un întreg. Aşadar
1 2 1 22 2 2 2 2
1
( ( 1) ) ( )
( 1) 2 1n n n n n
t r n t r r t rj j j j j+
= + + + − + + =
= − ≥ + − = +(1.5)
Parte stângă din (3.5) este un număr fixat t, iar partea dreaptă devine din
ce în ce mai mare dacă n →∞ . Această contradicţie ne arată că L nu are o
gramatică regulară.
3.2. EXPRESII REGULARE
O altă modalitate de descriere a limbajelor este folosirea aşa
numitelor expresii regulare. Această metodă simulează descrierea
„verbală” a unui limbaj. De exemplu, putem specifica un limbaj L prin a
spune că L se compune din şiruri care încep cu două simboluri de 1
urmate de trei 0-uri şi de un număr arbitra de simboluri de 2 şi 3. Astfel
110002322 este în limbaj, în timp ce 11000201 nu. Vom vedea că este
posibilă dezvoltarea unui formalism matematic precis pentru astfel de
descrieri. Începem cu concepte preliminare şi terminologie.
Definiţia 3.1. Fie limbajele L, 1L şi 2L .
1. Limbajul 1 2L L este definit a fi mulţimea tuturor şirurilor obţinute
prin concatenarea unui şir din 1L cu un şir din 2L . Formal avem:
1 2 1 2 1 1 2 2{ | , }L L L Lσ σ σ σ= ∈ ∈
2. Limbajul 1 2L L+ este mulţimea tuturor şirurilor care aparţin sau
lui 1L sau lui 2L . Deci, 1 2L L+ este reuniunea teoretică între 1L şi 2L :
1 2 1 2 1 2{ | sau }L L L L L Lσ σ σ+ = ∈ ∈ = ∪
3. Limbajul *L este mulţimea şirurilor obţinute prin concatenarea
unui număr arbitrar, finit de şiruri din L.
*1 2 1 2{ | , , , }n nL L L Lσ σ σ σ σ σ= ∈ ∈ ∈K K
Dacă 0n = , şirul va fi interpretat ca λ – şirul vid. Aşadar, pentru orice
limbaj L, *Lλ∈ .
4. Limbajul L+ este definit ca mulţimea şirurilor obţinute prin
concatenarea unui număr arbitrar, pozitiv de şiruri din L.
1 2 1 2{ | , , , , 1}n nL L L L nσ σ σ σ σ σ+ = ∈ ∈ ∈ ≥K K
Limbajele L+ şi *L sunt similare, singura diferenţă între ele constă în
faptul că 0n = nu este permis. Dacă Lλ∉ atunci Lλ +∉ , dar *Lλ∈ .
Ilustrăm acesta prin unele exemplu.
Fie 1 {01,1001}L = şi 2 {11, 00,1}L = . Atunci
1 2 {0111, 0100, 011,100111,100100,10011}L L =
1 2 {01,1001,11, 00,1}L L+ =
În definiţia lui 1 2L L sunt subliniate părţile din şir care aparţin lui 1L
respectiv 2L . În general 1 2 2 1L L L L≠ . De pildă, 101 este în 2 1L L dar nu şi în
1 2L L . Un exemplu de şir din *2L este şirul 1100111:
1 2 3 4
11 00 1 11σ σ σ σ
unde 2i Lσ ∈ . Reprezentarea lui nu este unică. Acelaşi şir poate fi
reprezentat ca
1 2 3 4 5 6
1 1 00 1 1 1σ σ σ σ σ σ
.
În continuare trecem la conceptul de expresie regulară peste un alfabet Σ .
Expresiile regulare vor fi scrise cu caractere îngroşate şi vor desemna
diferite limbaje după cum urmează.
Definiţia 3.2. Fie Σ un alfabet, adică, o mulţime nevidă, finită de
simboluri.
1. ∅ este o expresie regulară peste Σ , ∅ desemnează limbajul vid,
adică limbajul fără nici un şir.
2. λ este o expresie regulară peste Σ şi desemnează limbajul { }λ ,
adică, limbajul format din şirul vid λ .
3. Pentru fiecare a∈Σ , a este o expresie regulară şi desemnează
limbajului { }a – limbajul format dintr-un singur şir a.
4. Dacă r şi s sunt expresii regulare peste Σ care desemnează
limbajele 1L respectiv 2L , atunci rs, +r s , şi *r sunt expresii
regulare, unde rs desemnează limbajul 1 2L L , +r s desemnează
1 2L L+ şi *r desemnează *1L .
5. Orice expresie regulară poate fi obţinută prin aplicarea repetată
a regulilor 1-4.
Motivul pentru care expresiile regulare sunt notate cu caractere
îngroşate este pentru a le distinge de simbolurile limbajelor pe care le
reprezintă. O observaţie merită a fi făcută asupra punctelor 1 şi 2 din
definiţia anterioară: expresia regulară λ este diferită de expresia regulară
∅ . Simbolul λ desemnează limbajul format din şirul vid, în timp ce ∅
desemnează limbajul care nu conţine nici un şir – nici şirul vid.
Exemplu 3.2. Fie { , , }a b cΣ = . Exemple de expresii regulare peste
Σ sunt: a, +a b , +ab c şi * +a bc . Limbajele pe care le reprezintă sunt
următoarele:
a reprezintă limbajul { }a format dintr-un singur şir a
+a b reprezintă limbajul { } { } { , }a b a b∪ = format din două şiruri: a şi
b
ab reprezintă limbajul { }{ } { }a b ab= , iar +ab c reprezintă limbajul
{ , }ab c
*a reprezintă limbajul { , , , , , , }na aa aaa aλ K K
* +a bc reprezintă limbajul { , , , , , , , }nbc a aa aaa aλ K K
Expresiile regulare pot fi cu mult mai complicate decât acestea. De
exemplu, expresia *( ) ( )= + +x ab a bc bc ca . O descriere verbală a unui şir σ
din limbajul x poate fi: σ trebuie să înceapă cu ab, urmat de un număr
finit de şiruri, fiecare dintre ele fiind format din a sau bc, şi se termină cu
bc sau ca. Aşadar, ababcaaca este în x, în schimb baabcab nu.
Există diferite convenţii de notaţie folosite la expresii regulate. În
continuare le vom prezenta pe scurt.
Definiţia 3.3. Fie r o expresie regulară. Atunci
* (de ori), şi n n += =r rr r r rrK
Astfel, nr desemnează limbajul şirurilor obţinute prin concatenarea
a n şiruri – toate din limbajul r. Limbajul +r se obţine luând toate
concatenările posibile ale unui număr finit de şiruri, fiecare dintre ele
aparţinând limbajul r, cu condiţia ca acest număr finit să fie strict pozitiv.
Se observă uşor că * += +r r λ ; în particular, dacă λ∈ r atunci *+ =r r . În
utilizarea expresiilor regulare se folosesc convenţiile de precedenţă
cunoscute din algebră: * are precedenţa mai mare decât concatenarea,
care la rândul ei are precedenţa mai mare decât +. Deci, *( )a b poarte fi
scris ca *ab şi ( ) +ab c ca +ab c . Algebra expresiilor regulare are
majoritatea, dar nu toate, proprietăţile algebrei obişnuite. Vom prezentăm
în continuare unele dintre ele.
Teorema 3.2. Fie expresiile regulare 1 2, ,r r K atunci au loc
următoarele:
1. 1 2 3 1 2 3( ) ( )+ + = + +r r r r r r Asociativitate faţă de +
2. 1 2 2 1+ = +r r r r Comutativitate faţă de +
3. 1 2 3 1 2 3( ) ( )=r r r r r r Asociativitate faţă de concatenare
4. 1 2 3 1 2 1 3 1 2 3 1 3 2 3) ( ) ) ( )α β+ = + + = +r r r r r r r r r r r r r r Distributivitate
5. 1 1 1+∅ =∅+ =r r r
6. 1 1 1= =λr r λ r
7. 1 1∅ = ∅ =∅r r
Demonstraţie. Proprietăţile 1 – 5 sunt imediate pe baza definiţiei.
Prin 6 se înţelege: dacă luăm şirul vid λ din λ (expresie regulată) şi-l
concatenăm cu un şir σ din 1r , obţinem acelaşi şir σ . În 7, 1∅r
desemnează mulţimea de şiruri σ de foram 1 2σ σ σ= , unde 1σ ∈∅ şi
2 1σ ∈ r . Fiind imposibil de găsit un şir 1σ în mulţimea vidă ∅ , nu există
şiruri σ de forma indicată mai sus, deci 1∅ =∅r . Q.E.D.
În general 1 2 2 1≠r r r r . Deci, 10 01≠ , deoarece limbajul 10 conţine
doar şirul 10 şi limbajul 01 conţine doar şirul 01. Evident limbajele nu
sunt identice.
Exemplu 3.3. Expresiile regulare ne permit descrierea limbajelor
într-un mod simplu şi natural. Considerăm, de pildă, limbajul constantelor
reale din Fortran discutate în exemplul 1.4. Alfabetul acestui limbaj este
{0,1, 2, 3, 4, 5, 6, 7, 8, 9, , , ., }EΣ = + −
Fie = + + + + + + + + +0 1 2 3 4 5 6 7 8 9d o expresie regulară peste Σ ; d
(expresie regulată) reprezintă limbajul format din numere simple:
{0,1, 2, 3, 4, 5, 6, 7, 8, 9}=d . Limbajul constantelor reale din Fortran poate fi
descris acum într-un mod natural astfel
( )( . . . )( ( ) )+ + + + ++ + − + + + + + + + −λ d d d d λ E λ d
Un alt exemplu ar fi limbajul identificatorilor din Fortran. Ei sunt definiţi
ca „orice combinaţie de 1 – 7 caractere care începe cu o literă” (vezi
[10]). Expresia regulară care desemnează acest limbaj este
2 3 4 5 6( )+ + + + + +u λ v v v v v v
unde = + + + + + +u A B C X Y ZL şi = + + + + + = +v u 0 1 8 9 u dL .
3.3. LIMBAJE REGULARE ŞI EXPRESII REGULARE
Având introdusă o nouă modalitate de descriere a limbajelor, ne
întrebăm care este diferenţa între această metodă şi ceea veche. Vom
descoperi că în afara unor convenţii de notaţie n-am obţinut mult.
Teorema 3.3. Un limbaj L poate fi descris de o expresie regulară
dacă şi numai dacă este limbaj regular (adică are o gramatică regulară).
Demonstraţie. Presupunem că avem un limbaj regular L şi vream
să găsim o expresie regulară care-l descrie (presupunem că există). L fiind
regular, există o maşină cu stări finite care acceptă limbajul L. Fie, de
exemplu, această maşină maşina din figura 3.1. În această figură starea
acceptată este 2Q , dar intenţionat nu specificăm starea iniţială. Pentru
fiecare 0,1, 2i = , fie iM maşina de mai sus cu starea iniţială iQ , şi fie
( )iL M limbajul acceptat de iM . Presupunem că teorema 3.3. este
adevărată, şi fie iQ expresia regulară care descrie limbajul ( )iL M . Arătăm
în continuare că expresia regulară trebuie să satisfacă mai multe relaţii
algebrice. Pentru 0Q , de exemplu, cerem ca
0 0 1= +Q bQ aQ (1.6)
şi presupunem că σ este un şir acceptat de 0M , adică, 0σ ∈Q . Acest şir
trebuie să înceapă cu simbolul a sau b. Dacă σ începe cu a, atunci
1aσ τ= , deci după citirea simbolului a, maşina va trece în starea 1Q şi
începe să citească 1τ . Dacă 0M acceptă 1aσ τ= , atunci 1M (adică maşina
cu starea iniţială 1Q ) trebuie să accepte 1τ , deci 1 1τ ∈Q şi 1 1a aτ ∈ Q .
Figura 3.1. Construcţia unei expresii regulare dintre-o MSF.
În mod analog, dacă σ începe cu b, atunci 2bσ τ= şi 2τ trebuie să fie
acceptat de 0M (după ce 0M citeşte simbolul b, rămâne în starea 0Q ).
Deci 0σ ∈bQ . Aşadar, oricare ar fi un şir 0σ ∈Q , el este şi în 0 1+bQ aQ . Se
observă uşor că dacă un şir σ aparţine părţii drepte din (3.6), trebuie să
aparţină şi părţii stângi. Fireşte, fiecare astfel de şir va fi de forma 1bτ , cu
1 0τ ∈Q (adică, τ este acceptat de 0M ), sau de forma 2aτ , cu 2 1τ ∈Q (τ este
acceptat de 1M ). În ambele cazuri σ este acceptat de 0M . Ca urmare (3.6)
este adevărată. Pornind cu starea 1Q şi procedând în exact acelaşi mod,
avem ecuaţia
1 1 2= +Q aQ bQ (1.7)
Considerăm acum starea 2Q şi expresia regulară 2Q , care descrie limbajul
2( )L M . 2Q trebuie să conţină expresia regulară 2 0+aQ bQ . Deoarece 2Q
este o stare acceptată, 2Q va trebuie să conţină şi şirul λ . Ecuaţia pentru
2Q este
2 2 0= + +Q aQ bQ λ (1.8)
Aceasta arată, că dacă limbajele ( )iL M sunt descrise de expresiile
regulare iQ , 0,1, 2i = , atunci aceste expresii sunt soluţiile sistemului de
ecuaţii
0 0 1
1 1 2
2 2 0
= += += + +
X bX aXX aX bXX aX bX λ
(1.9)
Pentru a arăta că fiecare dintre limbajele ( )iL M poate fi descris de o
expresie regulară, este de ajuns să arătăm următoarele două lucruri:
I. Sistemul de ecuaţii (3.9) are soluţie.
II. Dacă 0Q , 1Q şi 2Q sunt expresii regulare care satisfac (3.9),
atunci fiecare iQ este identic cu ( )iL M (1.10)
Începem mai întâi cu II. Presupunem că sistemul de ecuaţii (3.9)
are o soluţie 0 0=X Q , 1 1=X Q şi 2 2=X Q . Cerem ca aceste expresii regulare
iQ să descrie limbajele ( )iL M , adică, ( )i iL M=Q . Ceea ce trebuie să
arătăm este, că dat fiind un şir σ acesta aparţine lui ( )iL M dacă şi numai
dacă aparţine lui iQ 0,1, 2i = . (Nu am stabilit dacă sistemul (3.9) are o
soluţie sau, dacă există, cum s-o găsim.) Demonstraţia se face prin
inducţie după lungimea k a şirului σ . Presupunem că σ are lungimea 0;
deci σ λ= . Evident, σ este acceptat numai de 2( )L M şi aparţine lui 2Q
(din prima ecuaţie (3.9) avem că orice şir din 1Q trebuie să înceapă cu a
sau b; analog pentru şiruri din 0Q ). Pentru 0k = este adevărat.
Presupunem că este adevărată pentru k, şi fie σ un şir de lungime 1k + ,
xσ τ= , unde τ este de lungime k. Dacă τ este în 2Q , atunci din ecuaţia a
treia din (3.9), x trebuie sie fie a, caz în care τ este în 2Q , sau b, caz în
care τ trebuie să fie în 0Q . Din ipoteza inducţiei, avem că τ este acceptat
fie de 2M fie de 0M . Dar aceasta înseamnă că σ este acceptat de 2M ,
deoarece după ce 2M citeşte x, trece în 2M sau 0M , iar atunci citeşte τ .
Acelaşi argument este valabil şi pentru şiruri din 0Q şi 1Q : Orice şir σ de
lungime 1k + care este în iQ trebuie să fie în ( )iL M . Reciproc,
presupunem că şirul σ este acceptat de 1M , atunci x trebuie să fie sau a
sau b. Dacă x b= , atunci τ este acceptat de 2M , iar din ipoteza inducţie,
τ este în 2Q şi, conform ecuaţiei a doua din (3.9), σ este în 1Q . Analog se
procedează pentru x a= şi când σ este acceptat de alte iM -uri. Aceasta
demonstrează II. din (3.10).
Rămâne de arătat că sistemul de ecuaţii (3.9) are o soluţie şi cum se
găseşte ea. Vom folosi următoarea lemă.
Lema 3.1. Considerăm ecuaţia
= +x ux v (1.11)
unde u şi v sunt expresii regulare date şi x este expresia regulară care
trebuie găsită. Atunci sunt adevărate următoarele:
1. Expresia regulară *=x x v este o soluţie pentru (3.11).
2. Dacă şirul vid λ nu aparţine limbajului descris de u, atunci *=x x v
este singura soluţie pentru (3.11).
Demonstraţie. Pentru a demonstra 1, trebuie să arătăm că
* *= +u v uu v v (1.12)
ceea ce înseamnă că ambele părţi din (3.12) desemnează aceeaşi mulţime
de şiruri. Fie σ un şir din *u v . Atunci σ poarte fi scris ca 1 2σ σ σ= , unde*
1σ ∈u şi 2σ ∈v . Dacă 1σ λ≠ , * *1σ ∈ ⊂ +uu uu v ( 1σ este o concatenare a
unui număr pozitiv, finit de şiruri din u). Dacă 1σ λ= atunci*
2σ σ= ∈ ⊂ +v uu v . Astfel, partea stângă din (3.11) este o submulţime a
parţii drepte. Reciproc, presupunem că *σ ∈ +uu v v . Dacă *σ ∈uu v , atunci
aparţine şi lui *u v , dacă σ este în v, atunci este de asemenea în *u v . Ca
urmare (3.12) este adevărat.
Pentru a demonstra 2 este de ajuns să arătăm că dacă λ∈u , atunci
soluţia pentru (3.11) este unică. ( *=x u v este întotdeauna o soluţie.)
Presupunem atunci că avem două soluţii 1 2≠x x care satisfac (3.11):
1 1
2 2
= += +
x ux vx ux v
(1.13)
Prin 1 2≠x x înţelegem că 1x şi 2x descriu limbaje diferite, adică, există un
şir care aparţine unuia dar mu şi celuilalt. Fără a pierde din generalitate,
putem presupune că există un şir în 1x dar nu şi în 2x ; fie σ cel mai scurt
astfel de şir. Deci, 1σ ∈ x şi 2σ ∉ x , dacă σ̂ este un şir oarecare din 1x de
lungime mai mică decât lungimea lui σ , atunci σ̂ aparţine lui 2x .
Deoarece 1σ ∈ x , avem, conform din primei ecuaţii din (3.13), că 1σ ∈ux
sau σ ∈v . Dar σ nu poate aparţine lui v, deoarece ar aparţine atunci şi lui
2x , din a doua ecuaţie (3.13). Aşadar, 1 1σ τ σ= , unde 1τ ∈u şi 1 1σ ∈ x .
Având λ ≠ u , şirul 1τ λ≠ , deci 1σ este strict mai mic decât σ şi, conform
cele de mai sus, aparţine lui 2x . Ceea ce implică că 1 1τ σ , şi astfel σ ,
aparţin lui 2ux , şi, din a doua ecuaţia (3.13), lui 2x . Acesta oricum
contrazice alegerea lui σ . Q.E.D.
Acum putem rezolva sistemul de ecuaţii (3.9), pe care-l
reproducem în continuare.
0 0 1
1 1 2
2 2 0
= += += + +
X bX aXX bX aXX bX aX λ
(1.14)
Rezolvăm în 2X (folosind lema 3.1. cu =u a şi 0= +v bX λ ) ecuaţia a treia
din (3.14).
* * *2 0 0( )= + = +X a bX λ a bX a
şi soluţia este unică. Înlocuind această expresie în primele două ecuaţii
din (3.14) obţinem două ecuaţii cu două necunoscute.
0 0 1* *
1 1 0
= +
= + +
X bX aX
X aX ba bX ba(1.15)
Rezolvând a doua ecuaţie în 1X (cu =u a şi * *0= +v ba bX ba ) obţinem
* * * * * * *1 0 0( )= + = +X a ba bX ba a ba bX a ba
Substituind aceasta în prima ecuaţie din (3.15) avem
* * * *0 0( )= + +X n aa ba b X aa ba
care în final ne dă * * * * *0 0 ( )= = +X Q b aa ba b aa ba – o expresie regulară care
descrie limbajul 0( )L M din figura 3.1. În mod analog se procedează
pentru 1X şi 2X ; astfel putem găsi o expresie regulară care descrie fiecare
dintre limbajele ( )iL M , 0,1, 2i = din figura 3.1.
Metoda poate fi uşor extinsă pe caz general. Fiind dată o maşină cu
stări finite 0{Q, , , , F}M Q δ= Σ , pentru a găsi o expresie regulară care
descrie limbajul ( )L M , procedăm în felul următor. Pentru fiecare stare
0 1, , , nQ Q QK scriem o ecuaţie în expresii regulare:
, 0,1, 2, ,i i kk
i n= =∑ KX r (1.16)
unde pentru fiecare i, i kr este definit astfel:
1. Dacă iQ este o stare acceptată, se include λ în i kr .
2. Dacă ( , )i jQ a Qδ = este o tranziţie validă, se include jaX în i kr .
Formal, ecuaţia (3.16) poate fi scrisă ca
( , )i j
i j iQ a Qδ =
= +∑X aX µ (1.17)
unde i =µ λ dacă iQ este stare acceptată, şi i =∅µ dacă iQ nu este stare
acceptată. Se poate arăta atunci (utilizând lema 3.1.) că sistemul de
ecuaţii (3.17) are o soluţie 0 0=X Q , 1 1, , n n= =KX Q X Q şi că fiecare iQ este
o expresie regulară care descrie limbajul maşinii iM obţinută din M prin
schimbarea stării iniţiale în iQ . Maşina M este atunci dată de 0Q . Pentru a
calcula 0Q din sistemul (3.17) procedăm „invers”: Utilizând lema 3.1.
rezolvăm pentru nX din ultima ecuaţie şi substituim rezultatul în cele
1n − ecuaţii precedente. Repetând acesta de 1n − ori, ajungem la o singură
ecuaţie de forma
0 0= +X αX β
pe care o rezolvăm, din nou, folosind lema 3.1. Argumentele sunt aproape
aceleaşi ca cele folosite la demonstraţia pe caz special, şi pot fi neglijate.
Vom ilustra întregul procedeu pe un exemplu.
Exemplu 3.4. Considerăm maşina cu stări finite din figura 3.2.
Ecuaţiile (3.17) corespunzătoare sunt
0 1 2
1 1 3
2 1
3 2
= += +== +
X aX bXX bX aXX bXX aX λ
Figura 3.2. O maşină cu stări finite.
Substituind valorile pentru 3X din ultima ecuaţie în celelalte ecuaţii,
obţinem sistemul
0 1 2
1 1 2
2 1
= += + +=
X aX bXX bX aaX aX bX
Substituim atunci 2X în primele două ecuaţii pentru a obţine sistemul
0 1 12
1 1 1 1( )
= +
= + + = + +
X aX bbX
X bX aaX a b a b X a
Rezolvând în 1X ultima ecuaţie (cu lema 3.1.), obţinem 2 *1 ( )= +X b a b a , şi
în final, substituind aceasta în prima ecuaţie şi rezolvând în 1X , obţinem
descrierea maşinii 0( )L M printr-o expresie regulară: 2 2 *( )( )+ +a b b a b a .
Unele consideraţii asupra lemei 3.1. (Ecuaţia = +x ux v are o
soluţie *=x u v şi ea este unică dacă λ∉u ). Dacă λ∈u , soluţia nu trebuie
să fie unică. Considerăm ecuaţia
( )= + +x a λ x ab
Conform lemei 3.1., o soluţie este *1 ( )= +x a λ ab , dar, cum se poate
verifica uşor, *2 ( )= + +x a λ ab b este tot o soluţie, şi 1 2≠x x . Un caz special
apare când =∅v . Dacă λ∉u , atunci singura soluţie pentru = +∅x xu este
=∅x . Aşadar conform lemei 3.1. singura soluţie este *= ∅ =∅x u . Deci
am demonstrat prima parte a teoremei 3.3: Orice limbaj regular poate fi
descris printr-o expresie regulară.
În continuare vom arăta cum se construieşte o maşină cu stări finite
dintr-o expresie regulară. Mai întâi, vom face acesta pentru expresii
regulare simple: ∅ , λ şi a.
Teorema 3.4. Fie 1M , 2M şi 3M maşinile cu stări finite date de
diagramele figurii 3.3. Atunci 1( )L M =∅ , 2( )L M = λ şi 3( )L M = a .
Figura 3.3. Automate finite simple.
Demonstraţia este evidentă. Maşinile 1M şi 2M sunt ceva mai complicate
de cât ar trebui să fie, motivul va fi explicat mai târziu. Observăm că 1M
şi 2M nu au tranziţii; ( , )Q xδ =∅ pentru toate stările Q şi simbolurile de
intrare x.
Fie L, 1L şi 2L limbajele regulare acceptate de maşinile cu stări
finite M , 1M şi 2M . Mai presupunem că avem o metodă de construire a
maşinilor N, 1N şi 2N (folosind M , 1M şi 2M ) astfel încât * ( )L L N= ,
1 2 1( )L L L N+ = şi 1 2 2( )L L L N= (vezi definiţia 3.1.). Dacă avem o astfel de
metodă, atunci, dată fiind o expresie regulară r, vom putea construi o
maşină cu stări finite K astfel încât ( )L K = r . r se obţine din expresiile
regulare ∅ , λ şi a, aplicând succesiv operaţiile de concatenare, + şi *
(vezi definiţia 3.2.). Dar, maşinile corespunzătoare pentru ∅ , λ şi a sunt
deja cunoscute – din teorema 3.4.
Metoda de construire pentru N, 1N şi 2N este evidentă. Dacă
maşinile 1M şi 2M pentru 1L respectiv 2L sunt cunoscute, construim
maşina pentru 1 2L L „legând” 1M şi 2M , ca în figura 3.4. La construirea
maşinii pentru 1 2L L+ , reunim 1M şi 2M în mod „paralel”, ilustrat în
figura 3.5. În final, pentru a construi maşina N pentru *( )L M „legăm în
jurul lui M” ca în figura 3.6.
Figura 3.4. Maşină pentru limbajul 1 2L L .
Figura 3.5. Maşină pentru limbajul 1 2L L+ .
Figura 3.6. Maşină pentru limbajul *( )L M .
Este evident, că descrierea acestor construcţii trebuie să fie mai
precisă. Maşinile M , 1M şi 2M pot avea mai mult decât o stare acceptată,
şi apar dificultăţi la alegerea stărilor care vor fi combinate. Pentru aceasta
vom dezvoltăm în continuare o descriere matematică precisă.
Definiţia 3.4. Fie M o maşină cu stări finite. Spunem că M este
directă dacă satisface următoarele condiţii:
Se combină aceste două stări
Se combină aceste două stăriSe combină aceste două stări
Se combină aceste două stări
1. Nu există tranziţii care duc în starea iniţială 0Q din M. Cu alte
cuvinte, pentru orice stare Q şi orice simbol de intrare x,
0 ( , )Q Q xδ∉
2. Maşina M are una sau două stări acceptate. Una dintre ele, fie ea
FQ , este diferită de starea iniţială 0Q şi are proprietatea că nu există
tranziţii din ea, adică, ( , )FQ xδ =∅ , oricare ar fi x. Cealaltă stare
acceptată, dacă există, trebuie să fie starea iniţială 0Q .
Schematic, o maşină directă are una din formale indicate în figura 3.7.
Vom folosi aceste maşini directe pentru realizarea construcţiei indicate
mai sus.
Figura 3.7. Maşini directe.
Mai întâi avem:
Lema 3.2. Fiind dată o maşină oarecare cu stări finite M, există o
maşină directă K astfel încât ( ) ( )L M L K= .
Demonstraţie. Fie 0{Q, , , , F}M Q δ= Σ cu stările 0 2, , , nQ Q QK .
Pentru a construi maşina K, sunt adăugate două stări noi I şi F şi se fac
următoarele modificări.
O stare acceptată FQ Două stări acceptate 0Q şi FQ
1. Starea iniţială din K este I.
2. F este stare acceptată în K. În plus, dacă 0Q este stare acceptată în
M, atunci şi I este o stare acceptată din K.
3. Pentru fiecare tranziţie de forma 0
xQ Q→ din M, se adaugă tranziţia
xI Q→ în K.
4. Pentru fiecare tranziţie de forma 0ˆx
Q Q→ din M, unde Q̂ este o stare
acceptată, se adaugă tranziţia x
Q F→ în K.
5. Pentru fiecare tranziţie de forma 0
xQ Q→ din M, unde 0Q este o stare
iniţială şi Q o stare finală, se adaugă tranziţia x
I Q→ în K.
6. Relaţiile de tranziţie între Q-uri rămân neschimbate, starea 0Q nu
va mai fi stare iniţială (este I), şi stările acceptate din M devin
neacceptate.
Trebuie subliniat faptul că o tranziţie din M poate genera mai multe
tranziţii în K. De pildă, dacă M are 3 stări: 0Q (iniţială), 1Q şi 2Q
(acceptată), atunci tranziţia 0 2
xQ Q→ va genera tranziţiile 2
xI Q→ (regula 1),
0
xQ F→ (regula 4) şi
xI F→ (regula 5).
Arătăm în continuare că M şi K acceptă acelaşi şir. Presupunem că
σ λ= este acceptat de M, atunci 0Q trebuie să fi stare acceptată în M, deci
I este o stare acceptată în K, deoarece ( )L Kλ∈ . Reciproc, ( )L Kλ∈ dacă
şi numai dacă I este stare acceptată în K, dar aceasta are loc numai dacă
0Q este stare acceptată în M, deci ( )L Mλ∈ . Fie acum 1 2 mx x xσ = K un şir
nevid din ( )L M . Cu input-ul σ maşina M trece prin următoarea secvenţă
de configuraţii:
0 1 2 1 1 2 1 1ˆ ˆ ˆ, , , ,m m m m m m mQ x x x x Q x x x Q x Q λ− − −→ → →K K
unde ˆmQ este stare acceptată în M. Astfel
1
0 1ˆ
x
Q Q→ şi 1ˆ ˆmx
m mQ Q− → sunt
tranziţii legale din M, deci 1
1ˆ
x
I Q→ şi 1ˆ mx
mQ F− → sunt tranziţii în K. Aşadar,
cu input-ul σ , maşina K trece prin următoarea secvenţă de mişcări:
*
1 2 1 1 2 1 1ˆ ˆ, , , ,m m m m m mI x x x x Q x x x Q x F λ− − −→ → →K K
ca urmare ( )L Kσ ∈ . Procedând în mod similară, observăm ca dacă
( )L Kσ ∈ atunci σ va fi totodată şi în ( )L M . Q.E.D.
Exemplu 3.5. Presupunem o maşină M dată de diagrama din figura
3.8. Maşina directă corespunzătoare K este atunci descrisă de figura 3.9.
Figura 3.8.
De pildă, tranziţia 1
bQ F→ este inclusă deoarece 1 2
bQ Q→ (regula 4); 1
aI Q→
este inclusă deoarece 0 1
aQ Q→ (regula 2). Dacă 0Q ar fi o stare acceptată în
M, atunci I ar trebui să fie o stare acceptată din K, şi am avea trei tranziţii
adiţionale: 0
bQ F→ (regula 4 aplicat la 0 0
bQ Q→ ), 2
aQ F→ (regula 4 aplicat
la 2 0
aQ Q→ ), şi
bI F→ (regula 5 aplicată la 0 0
bQ Q→ ).
Figura 3.9. Maşină directă.
Putem descrie acum cu precizie construcţiile discutate anterior
definiţiei 3.4.
Teorema 3.5. Fie 1M , 2M şi M maşini cu stări finite. Atunci fiecare
dintre limbajele 1 2( ) ( )L M L M+ , 1 2( ) ( )L M L M şi *( )L M este acceptat de o
maşină cu stări finite.
Demonstraţie. Fără a pierde din generalitate, putem presupune că
1M , 2M şi M sunt maşini directe, dacă nu, ele pot fi convertite în maşini
directe folosind lema 3.2. Fie 1I , 2I şi I stările iniţiale ale maşinilor 1M ,
2M şi M respectiv 1F , 2F şi F stările finale. Pentru a construi o maşină
care acceptă 1 2( ) ( )L M L M+ „contopim” stările iniţiale din 1M şi 2M , şi
stările finale 1F şi 2F . Schematic, noua maşină are diagrama reprezentată
în figura 3.10. Starea iniţială este indicată printr-o săgeată → şi starea
finală printr-un cer dublu. Dacă 1I sau 2I (sau amândouă) sunt stări
acceptate, atunci 1 2I I= este tot o starea acceptată a maşinii. Evident,
limbajul acceptat de MSF este 1 2( ) ( )L M L M+ . Pentru a construi o maşină
care acceptă starea *( ( ))L M procedăm astfel: „legăm” maşina în jurul lui
M, astfel încât să combinăm I şi F într-o stare nouă care va fi stare iniţială
şi în acelaşi timp stare acceptată. Aceasta este reprezentat schematic în
figura 3.11. Evident, construcţia va da o un rezultat corect.
Figura 3.10. Maşină pentru limbajul 1 2( ) ( )L M L M+ .
Figura 3.11. Maşină pentru limbajul *( ( ))L M .
La construirea maşinii 1 2( ) ( )L M L M apar complicaţii minore. Fictiv,
ataşăm 2M la sfârşitul lui 1M , adică, stările 2I şi 1F să fie combinate
într-una, iar diagrama rezultată ar trebui să fie de forma celei din figura
3.12. În esenţă, aceasta este ceea ce se va face, mai multă atenţie trebuie
acordat cazului în care unul dintre limbaje conţine un şir vid. Considerăm,
de exemplu, situaţia în care 1( )L Mλ∈ (adică 1I este stare acceptată) şi un
şir nevid oarecare σ din 2( )L M . Atunci, şirul σ este în 1 2( ) ( )L M L M , dar
nu există nici o posibilitate pentru ca σ să fie „trimis prin 1M la 2M ”.
Figura 3.12. Maşină ipotetică pentru 1 2( ) ( )L M L M .
Pentru a realiza aceasta trebuie să considerăm mai multe cazuri
reprezentate în figura 3.13. Se observă, că în toate cele patru cazuri,
aceste maşini vor accepta limbajul 1 2( ) ( )L M L M . Q.E.D.
Cazul I. 1( )L Mλ∉ şi 2( )L Mλ∉ – 1I este neacceptată şi 2I este
neacceptată.
Cazul II. 1( )L Mλ∉ şi 2( )L Mλ∈ – 1I este neacceptată şi 2I este acceptată.
Cazul III. 1( )L Mλ∈ şi 2( )L Mλ∉ – 1I este acceptată şi 2I este neacceptată.
Maşina 2M se reproduce de două ori.
Cazul IV. 1( )L Mλ∈ şi 2( )L Mλ∈ – 1I este acceptată şi 2I este acceptată.
Maşina 2M se reproduce de două ori.
Figura 3.13. Maşini pentru limbajul 1 2( ) ( )L M L M .
Exemplu 3.6. Fie 1M şi 2M două maşini cu stări finite descrise de
diagramele din figura 3.14.
Figura 3.14. Două maşini cu stări finite.
Maşina 1M Maşina 2M
Maşinile pentru 1 2( ) ( )L M L M+ , *( ( ))L M , 1 2( ) ( )L M L M şi 2 1( ) ( )L M L M sunt
atunci date de diagramele figurii 3.15. Conform cazului III şi figurii 3.13,
în diagrama lui 2 1( ) ( )L M L M maşina 1M trebuie să fie reprodusă de două
ori. Pentru a distinge cele două reproduceri, notăm stările unei copii ai lui
1M cu 1I , A, B, 1F respectiv 1I , A , B şi 1F .
Am demonstrat deci teorema 3.3: Un limbaj este regular dacă şi
numai dacă poate fi descris de o expresie regulară. Înainte de a da un
exemplu de construire a unei maşini cu stări finite dintr-o expresie
regulară, demonstrăm în plus o proprietate a limbajelor regulare. Dacă L
este un limbaj peste alfabetul Σ , notăm cu L limbajul şirurilor din *Σ
care nu aparţin lui L – acest limbaj se numeşte complementul lui L. Dacă
1L şi 2L sunt două limbaje, notăm cu 1 2L L∩ toate şirurile care se regăsesc
în ambele limbaje, 1L şi 2L . (A nu se confunda cu limbajul 1 2L L , a
şirurilor din 1L concatenate cu toate şirurile din 2L .) Avem următoarele.
Teorema 3.6. Presupunem că L, 1L şi 2L sunt limbaje regulare.
Atunci şi următoarele limbajele sunt regulare: *L , 1 2L L , 1 2L L+ , L , 1 2L L∩ .
Demonstraţie. Singurele limbaje neacoperite de teorema 3.6. sunt
1 2( ) ( )L M L M :
2 1( ) ( )L M L M :
Figura 3.15. Combinaţii de maşini.
*2( ( ))L M 1 2( ) ( )L M L M+
limbajele L şi 1 2L L∩ . Dacă L este un limbaj regular, fie atunci M o
maşină cu stări finite care acceptă L. Construim acum o maşină cu stări
finite M prin interschimbarea stărilor acceptate şi neacceptate din M –
stările neacceptate vor deveni stări acceptate şi invers). Evident că
( )L L M= , aşadar L este de asemenea un limbaj regular. În final, este uşor
de observat că 1 2 1 2L L L L∩ = + , deci 1 2L L∩ este tot un limbaj regular.
Q.E.D.
Exemplu 3.7. Construim o maşină cu stări finite care recunoaşte
limbajul * *01(10) 1(1 0)+ + . Vom merge din aproape în aproape. Maşini
pentru 01 şi 10 sunt
Conform teoremei 3.6, maşina pentru *(10) este
Din lema 3.2. maşina directă pentru *(10) va fi
Astfel, din teorema 3.6. avem următoarea maşină pentru *01(10)
Maşina directă pentru *01(10) , conform lemei 3.2, este
(Stările A şi B pot fi eliminate.)
Maşinile pentru 1 şi *1 sunt (teorema 3.6.)
Maşina directă pentru *1 (lema 3.2.)
Maşina pentru *1 0+ este atunci
Şi astfel, maşina pentru *1(1 0)+ va fi (teorema 3.6.)
Maşina directă pentru *1(1 0)+
(Stările A şi B pot fi eliminate.)
În final, conform teoremei 3.6., maşina pentru * *01(10) 1(1 0)+ + va fi
3.4. MAŞINI CU OUTPUT
Deseori este convenabil să considerăm maşini cu stări finite care pe
lângă unor treceri prin stări interne, au şi un dispozitiv de ieşire. De
exemplu, presupunem că primim un flux de 0 şi 1-uri şi dorim să dam un
mesaj de atenţionare de fiecare dată când trei sau mai multe simboluri de
1 sunt recepţionate succesiv. În secvenţa
0110111101110010↑ ↑ ↑
săgeata ↑ indică poziţia la care apare mesajul. O modalitate formală de
descriere a uni astfel de proces este următoarea: Considerăm o maşină cu
stări finite M, cu 4 stări, notate sugestiv [00], [01], [10] şi [11]. Dacă
1 2 1k kε ε ε ε−K K este un şir de 0 şi 1-uri, presupunem că la întâlnirea
simbolului kε maşina se află în starea 1[ , ]k kε ε− (fiecare jε este sau 1 sau
0). După recepţionarea a două ε -uri, starea iniţială este specificată iar
următoarele mişcări ale maşinii sunt determinate de diagrama din figura
3.16.
Figura 3.16. Maşină cu output.
De pildă, presupunem că primele două simboluri primite sunt 00 astfel
încât maşina începe cu starea iniţială [00]. Mai presupunem că
simbolurile subsecvenţei sunt 101110. Maşina va trece atunci prin
următoarea secvenţă de mişcări:
1 0 1 1 1 0[00] [01] [10] [01] [11] [11] [10]→ → → → → →
Conform cerinţelor problemei, la trecerea maşinii din starea [11],
cu input-ul 1, înapoi în starea [11], adică la tranziţia 1
[11] [11]→ , trebuie
luată o decizie (lansarea mesajului) iar la toate celelalte tranziţii, trebuiesc
luate alte decizii. Aceasta poate fi descris matematic printr-o funcţie
( , )F Q x , unde Q este o stare şi x un simbol de intrare. În exemplul
discutat, funcţia F este dată astfel
dacă [11] şi 1( , )
în restA Q x
F Q xB
= ==
(1.18)
Ca urmare ( , )F Q x descrie output-ul maşinii în timpul tranziţiei din Q în
( , )Q xδ (δ este funcţia de tranziţie a maşinii). Maşini de acest tip se
numesc maşini Mealy, vezi [16]. Formal avem:
Definiţia 3.5. O maşină Mealy Me este o pereche ( , )Me F M= ,
unde M este o maşină cu stări finite obişnuită şi ( , )F F Q x= este o funcţie
definită pentru toate stările Q şi simbolurile de intrare x, cu valori în
mulţimea nevidă S ( : QF S×Σ→ , unde Q este o mulţime de stări din M şi
Σ este alfabetul de intrare din M). Mulţimea S se numeşte alfabetul de
ieşire pentru Me.
Interpretarea lui F este că în timpul tranziţiei ˆxQ Q→ maşina
generează output-ul ( , )F Q x . La fel ca în cazul maşinilor cu stări finite,
maşinile Mealy pot fi deterministe sau nedeterministe în funcţie de
automatul finit care le stă la bază. O modalitate convenabilă de descriere
a unei maşini Mealy este prin utilizarea de diagrame similare cu cele
folosite la descrierea automatelor finite. Presupunem că o maşină se află
în starea Q iar simbolul de intrare este x, astfel ca următoarea stare să fieˆ ( , )Q Q xδ= iar output-ul să fie ( , )X F Q x= . În diagramă se indică aceasta
astfel
Prin urmare, maşina cu stări finite din figura 3.16, în conjuncţie cu funcţia
de ieşire din (3.18), dă o maşină Mealy cu diagrama din figura 3.17.
Exemplu 3.8. Presupunem că primim un flux de simboluri, fiecare
dintre ele fiind 0, 1 sau 2 şi vrem să construim o maşină care emite
simbolul a ori câte ori suma a trei simboluri consecutive este 0, 1 sau 4; şi
simbolul b dacă suma a trei simboluri consecutive este 2 sau 3; iar c dacă
suma a trei simboluri consecutive este 5 sau 6. Maşina Mealy Me care
simulează această situaţie poate fi descrisă astfel. Alfabetul de intrare este
mulţimea {0,1, 2}Σ = . Stările sunt perechile [xy], unde x şi y sunt din Σ –
maşina se află în starea [xy] dacă ultimele două simboluri de intrare sunt x
şi y (în această ordine). Există 9 astfel de stări, iar după primirea primelor
două simboluri, starea iniţială este determinată.
Figura 3.17. O maşină Mealy.
Diagrama completă a unei astfel de maşini este prea complexe,
motiv pentru care va fi redat doar un fragment ilustrat în figura 3.18.
Figura 3.18. Un fragment de maşină Mealy.
De exemplu, tranziţia 1
[12] [21]a
→ înseamnă, că dacă maşina se află în
starea [12] şi primeşte input-ul 1, va trece în starea [21], şi are ca output,
în timpul tranziţiei, simbolul a. Acestea corespunde configuraţiei maşinii,
deoarece fiind în starea [12], ultimele două simboluri recepţionate au fost
1 şi 2, în această ordine. Input-ul 1 face suma ultimelor trei input-uri
egală cu 4, deci output-ul a este emis iar starea următoare este [21].
Întreaga maşină Me poate fi reprezentată sub formă tabelară ca în figura
3.19. În acest tabel ( , )Q xδ desemnează următoarea stare şi ( , )F Q x
desemnează output-ul maşinii în timpul tranziţiei din Q în ( , )Q xδ .
Simbol de intrare
0 1 2Starea
curent
a Q( , 0)Qδ ( , 0)F Q ( ,1)Qδ ( ,1)F Q ( , 2)Qδ ( , 2)F Q
[00] [00] a [01] a [02] b
[01] [10] a [11] b [12] b
[01] [20] b [21] b [22] a
[10] [00] a [01] b [02] b
[11] [10] b [11] b [12] c
[12] [20] b [21] a [22] c
[20] [00] b [01] b [02] b
[21] [10] b [11] a [12] c
[22] [20] a [21] c [22] c
Figura 3.19. Tabela de tranziţie a unei maşini Mealy.
Presupunem, de exemplu, că primele două simboluri primite sunt 2, 0,
deci starea iniţială este [20], şi următoarele cinci input-uri sunt 1, 2, 2, 0.
Atunci maşina va trece prin următoarea secvenţă de mişcări:
1 2 2 0
[20] [01] [12] [22] [20]b b c a
→ → → →
Astfel secvenţa de intrare 1, 2, 2, 0 produce secvenţa de ieşire b, b, c, a.
Există o altă modalitate de asociere a unui output la o maşină cu
stări finite, şi anume, prin a cere ca acest output să fie emis în timp ce
maşina rămâne într-o stare (şi nu în timpul tranziţiei dintre două stări, ca
în cazul maşinilor Mealy). De pildă, considerăm din nou problema
fluxurilor de 0 şi 1-uri la care dorim să semnalăm apariţia unei succesiuni
de trei 1-uri. O modalitate de simulare a acestei situaţii este de a
considera o maşină cu stări finite cu 8 stări:
[000] [001] [010] [011] [100] [101] [110] [111].
Starea 1 2 3[ , , ]ε ε ε înseamnă că primele teri simboluri primite sunt 1ε , 2ε şi
3ε (în această ordine). Funcţia de tranziţie δ este definită ca
1 2 3 4 2 3 4([ ], ) [ ]δ ε ε ε ε ε ε ε=
Odată ce primele trei simboluri sunt primite, starea iniţială este
determinată iar maşina îşi continuă activitatea. Vom construi în
continuare o funcţie de ieşire G, definită pentru fiecare stare prin
1 2 31 2 3
dacă [ , , ] [111]([ , , ])
în restA
GB
ε ε εε ε ε
==
Funcţia G depinde numai de stările maşinii, spre deosebire de funcţia de
ieşire F, a maşinii Mealy, care depinde de amândouă, adică de stare şi de
input. Maşini de acest tip se numesc maşini Moore, vezi [17]. Formal,
avem următoarea definiţie pentru ele.
Definiţia 3.6. O maşină Moore Mo se compune din două obiecte:
1. O maşină cu stări finite
2. O funcţie ( )G Q definită pentru toate stările Q din Mo cu valori
într-o mulţime nevidă S, numită alfabetul de ieşire a lui Mo
La fel ca automatele finite sau maşinile Mealy, şi maşinile Moore
pot fi reprezentate printr-o diagramă. Fiecare stare fiind o pereche ( , )Q X ,
unde Q este o stare iar ( )X G Q= este output-ul asociat stării Q. De pildă,
maşina Moore descrisă anterior (care detectează aparenţa unei secvenţe
de trei 1-uri dintr-un flux de 0 şi 1) are diagrama din figura 3.20.
Comparând această diagrama cu diagrama maşinii Mealy pentru aceeaşi
problemă, observăm că diferenţa esenţială constă în funcţia de ieşire.
Când şirul vid λ este primit de o maşină Mealy, nu va fi produs un
output atâta timp cât nu are loc o tranziţie. Pe de altă aparte, maşina
Moore va produce output-ul 0( )G Q asociat cu starea iniţială. Astfel, la un
input dat, output-ul maşinii Moore va fi întotdeauna cu un simbol mai
lung decât output-ul unei maşini Mealy. De exemplu, presupunem că
starea iniţială a maşinii Mealy din figura 3.17. este [00] şi starea iniţială a
maşinii Moore din figura 3.20. este [000].
Figura 3.20. O maşină Moore.
Dat fiind input-ul 11101σ = , maşina Mealy va produce ca output BBABB,
iar maşina Moore BBBABB – are un B în plus în faţă. Din acest motiv este
imposibile să construim o maşină Mealy echivalentă cu o maşină Moore
dată, şi reciproc. Dacă neglijăm însă simbolul iniţial al output-ului
maşinii Moore, cele două dispozitive sunt echivalente. Introducem
următoarea definiţie.
Definiţia 3.7. Fie M o maşină Mealy sau Moore. Pentru fiecare şir
de intrare σ fie ( )MH σ şirul de ieşire generat de M la input-ul σ . Spunem
că două maşini M şi M (amândouă sau Mealy sau Moore) sunt
echivalente dacă pentru orice input σ avem ( ) ( )M MH Hσ σ= .
Fie M o maşină Mealy şi K o maşină Moore. Spunem că M şi K
sunt echivalente dacă pentru fiecare şir de intrare σ avem
( ) ( )K MH XHσ σ= , unde X este un simbol din alfabetul de ieşire. Cu alte
cuvinte, presupunând că neglijăm simbolul iniţial al output-ului din K,
amândouă vor produce la acelaşi input acelaşi output.
Pe baza acestei definiţii, dată fiind o maşină de un tip, se poate
construi o maşină echivalentă de tipul celălalt.
Teorema 3.8. Dacă M este o maşină Mealy, atunci există o maşină
Moore K echivalentă cu M. Reciproc, dată fiind o maşină Moore K, există
o maşină Mealy M echivalentă cu K.
Demonstraţie. Fie M o maşină Mealy cu stările 0Q (starea iniţială),
1 nQ QK , alfabetul de ieşire 1{ , , }mX XK , alfabetul de intrare 1{ , , }jx xK şi
funcţia de ieşire ( , )F Q x . Stările maşinii Moore corespunzătoare K, vor fi
toate perechile posibile de { , }Q X , unde Q este o stare din M şi X este un
simbol de ieşire din M. Starea iniţială pentru K este 0 1{ , }Q X . Funcţia de
ieşire G în K este definită prin
({ , })G Q X X= .
Tranziţiile din K sunt definite de următoarea regulă:
/ ˆ ˆDacă este o tranziţie pentru , atunci { , } { , }este o tranziţie pentru , oricare ar fi un simbol de ieşire
x X xQ Q M Q B Q X
K B→ → (1.19)
Cu alte cuvinte, dacă diagrama de tranziţie pentru M conţine fragmentul
atunci diagrama de tranziţie pentru K va conţine un fragment de forma
Evident, că dacă M, cu input-ul 1 2ˆ ˆ ˆrx x xK , trece prin secvenţa de stări
0 0 1ˆ ˆ ˆ( ), , , rQ Q Q Q= K şi emite ca output 1 2
ˆ ˆ ˆrX X XK , atunci maşina K va trece
prin secvenţa de stări 0 1 1 1 2 2ˆ ˆ ˆˆ ˆ ˆ{ , }, { , }, { , }, , { , }r rQ X Q X Q X Q XK şi va emite
acelaşi output 1 1 2ˆ ˆ ˆ
rX X X XK (cu excepţia simbolului iniţial 1X ). Aşadar,
prima tranziţie din M este
1 1ˆˆ /
0 1ˆ
x X
Q Q→
adică, M trece în starea 1Q̂ şi emite simbolul 1X̂ . Iar K porneşte din starea
0 1{ , }Q X , deci emite simbolul 1X iar la input-ul 1x trece în 1 1ˆ ˆ{ , }Q X , unde
emite simbolul 1X̂ , vezi (3.19). Tranziţiile următoare pentru K şi M sunt
acele din (3.19),
2 2ˆ/
1 2ˆ
x X
Q Q→ şi 2
1 1 2 2ˆ ˆˆ ˆ{ , } { , }
x
Q X Q X→
astfel încât 2X̂ este al doilea simbol emis de M şi al treilea emis de K.
Continuând acest procedeu observăm că M şi K sunt echivalente.
Pentru a construi o maşină Mealy dintr-o maşină Moore K dată,
vom proceda în felul următor. Notăm stările din K cu 0Q (starea iniţială),
1, , nQ QK , simbolurile de ieşire cu 1, , mX XK şi simbolurile de intrare
1, , jx xK . Fie ( )G Q funcţia de ieşire pentru K (depinde numai de starea Q).
Stările, alfabetul de intrare şi de ieşire pentru M vor fi identice cu cele
pentru K. O stare din K pot fi văzute ca o pereche { , ( )}Q G Q , unde Q este
o stare şi ( )G Q este simbolul de ieşire emis de K în starea Q. Tranziţia şi
funcţia de ieşire pentru M sunt date de următoarea regulă:
ˆ/
ˆ ˆDacă { , } { , } este o tranziţie pentru
ˆatunci este o tranziţie pentru .
x
x X
Q X Q X K
Q Q M
→
→(1.20)
Văzute ca diagrame de tranziţie, fiecare fragment din diagrama de
tranziţie pentru K, figura 3.21.(a), generează un fragment al diagramei de
tranziţie pentru M, figura 3.21.(b).
ˆ ˆ{ , } { , }(a)
xQ X Q X→
ˆ/ ˆ
(b)
x XQ Q→
Figura 3.21. Tranziţii Mealy şi Moore.
În mod firesc, dacă maşina K cu input-ul 1 2ˆ ˆ ˆrx x xK trece prin secvenţa de
stări 0 0 1 1ˆ ˆˆ ˆ{ , }, { , }, , { , }r rQ X Q X Q XK emiţând simbolurile 0 1
ˆ ˆ, , , rX X XK , atunci
M va trece prin secvenţa de stări 0 1ˆ ˆ, , , rQ Q QK emiţând simbolurile
1 2ˆ ˆ ˆ, , , rX X XK . Q.E.D.
Exemplu 3.9. Considerăm maşina Mealy dată prin diagrama din
figura 3.22.
Figura 3.22. O maşină Mealy.
Maşina echivalentă Moore are şase stări 0{ , }Q X (= starea iniţială),
0 1 1 2{ , }, { , }, { , }, { , }Q Y Q X Q Y Q X şi 2{ , }Q Y . Diagrama ei de tranziţie este dată
în figura 3.23.
Figura 3.23. O maşină Moore.
De exemplu, tranziţia 1
1 0{ , } { , }Q Y Q X→ din maşina Moore este inclusă
deoarece 1/
1 0
XQ Q→ este o tranziţie a maşinii Mealy. Această ultimă tranziţie
este responsabilă şi pentru 1
1 0{ , } { , }Q X Q Y→ . Similar, 0
2 2{ , } { , }Q Y Q Y→ este
inclusă deoarece 0/
2 2
YQ Q→ generează
0
2 2{ , } { , }Q X Q Y→ şi 0
2 2{ , } { , }Q Y Q Y→ .
Maşina din figura 3.23. poate fi simplificată, prin înlăturarea stărilor
1{ , }Q X şi 0{ , }Q Y , ele fiind inaccesibile.
Exemplu 3.10. Considerăm maşina Moore din figura 3.24.(a).
Maşina Mealy corespunzătoare este reprezentată în figura 3.24.(b). De
exemplu, tranziţia 1
1 2{ , } { , }Q Y Q Y→ induce tranziţia 1/
1 2
YQ Q→ ,
1
2 3{ , } { , }Q Y Q Y→
induce 1/
2 3
YQ Q→ , etc. Cu input-ul 100 maşina Moore va produce output-ul
XYXY, în timp ce maşina Mealy emite output-ul YXY. Aceste două
output-uri sunt considerate identice, deoarece în compararea lor neglijăm
caracterul iniţial din output-ul maşinii Moore.
Figura 3.24. Maşini Mealy şi Moore.
(a) (b)
PROBLEME
În problemele 1 – 7 arătaţi că limbajul dat nu este regular.
1. 2{ | 1, 2, 3, }n n nL a b c n= = K
2. { | 0,1, 2, }n n nL a b c n= = K
3. { | 0,1, 2, }n nL a bc n= = K
4. 3{ | 1, 2, 3, }n nL a b n= = K
5. { | , 1, 2, 3, }n m n nL a b c n m+= = K
6. { | , 0,1, 2, }n m n mL a b c n m−= = K
7. {( ) ( ) | , , 0,1, 2, }n p m pL a b c d n m p= = K
Pentru fiecare dintre problemele 7 – 14, scrieţi expresia regulară care
descrie limbajul dat.
8. 8. *{ {0,1} | are un subşir de forma 111}L σ σ= ∈
9. *{ { , } | are ca subşiruri şi }L a b aa bbσ σ= ∈
10. *{ {0,1} | lungimea lui este divizibilă cu 3}L σ σ= ∈
11. L este mulţimea tuturor şirurilor peste { , , }a b c care conţin un număr
par de simboluri a.
12. *{ {0,1} | începe cu 0 şi are un număr par de 1-uri}L σ σ= ∈
13. *{ { , , } | nu există -uri în partea dreaptă a oricărui din }L a b c a bσ σ= ∈
14. *{ { , , } | are două simboluri consecutive}L a b c aσ σ= ∈
15. Verificaţi următoarele expresii:
a. * *( ) ( )r+ = +rs r r sr r
b. * * * *( ) ( )+ =a b a ba
c. * * *( )+ = +a b a b
d. * *( ) ( )+ + = +a a bc a bc
e. * * *( ) ( )+ = +x y x y
f. * * *( ) ( )= + +a b λ a b b
16. Construiţi o maşină cu stări finite care acceptă fiecare din
următoarele limbaje:
a. * *( ) ( )+ + + +1 0 11 1 0 10 λ
b. *( )+ +1ab ba
c. * * *( )( )+ +a b c a b
d. * *( )+a b c
e. * * *(( ) ) ( )+ +bc a ac b c
f. * *( ( ) )+ + +a ab a b
17. Găsiţi o expresie regulară care descrie limbajul acceptat de fiecare
dintre maşinile din figura 3.25.
18. Construiţi o maşină directă echivalentă pentru fiecare MSF din
figura 3.25.(a) şi (b).
Figura 3.25. Maşini cu stări finite.
19. Construiţi o maşină Moore echivalentă pentru fiecare maşină
Mealy din figura 3.26.
Figura 3.26. Maşini Mealy.