CAPITOLUL 3 LIMBAJE REGULAREandrei.clubcisco.ro/cursuri/3lfa/carti/cap3.pdfCAPITOLUL 3 LIMBAJE...

52
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 ( ) ( ) LG LM = . 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 {01 | 0, 1, 2, } n n L 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 ( ) LG L = . Arătăm aceasta prin a demonstra că nu există o maşină cu stări finite M cu ( ) LM L = . Presupunem că există o astfel de maşină M şi fie 0 1 1 , , , k Q Q Q K stările acesteia (k din ele). Fie 01 m m σ = un şir în limbajul L, a cărui lungime este mai mare decât k,

Transcript of CAPITOLUL 3 LIMBAJE REGULAREandrei.clubcisco.ro/cursuri/3lfa/carti/cap3.pdfCAPITOLUL 3 LIMBAJE...

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

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.

20. Construiţi o maşină Mealy echivalentă pentru fiecare maşinile

Moore din figura 3.27.

Figura 3.27. Maşini Moore.