Sunteți pe pagina 1din 62

CAPITOLUL II.

MAŞINI CU STĂRI FINITE

În acest capitol introducem conceptul de maşină cu stări finite,


numită şi automat finit. Aceste dispozitive matematice îşi au originea în
modelarea comportamentului circuitelor electronice secvenţiale;
utilizarea şi aplicarea lor este mult mai largă. Ele pot fi văzute ca cel mai
simplu model de „algoritm” sau a unui analizator de limbaj sau chiar a
unui calculator. Dispozitive mai sofisticate cum sunt automatele push-
down, sau maşinile Turing, pot fi văzute ca maşini cu stări finite cu
numeroase „clopoţei şi zurgălăi” ataşate lor. Teoria automatelor finite
este destul de simplă pentru a motiva o pătrunde mai adâncă în studiul
acestor modele avansate.

2.1. DEFINIŢII

Considerăm conceptul matematic de maşină cu stări finite (MSF),


sau automat finit (AF). Mai întâi acordăm atenţie maşinilor cu stări finite
deterministe (MSFD). Aceste maşini se compun dintr-un număr finit de
stări şi un dispozitiv de intrare, care citeşte simboluri, unul câte unul (de
la stânga la dreapta), dintr-un şir de caractere de intrare. Dacă maşina se
află într-o stare Q şi simbolul de intrare este x, ea îşi schimbă starea (sau
se mişcă) în starea δ (Q, x) . Apoi citeşte următorul simbol de intrare din
dreapta iar procesul se repetă. Maşina se iniţializează într-o stare iniţială
Q0 , iar primul simbol din şirul citit este cel mai din stânga simbol a

acestui şir. Regula δ (Q, x) care descrie următoarea stare se numeşte


funcţie de tranziţie. Ea depinde doar de starea curentă Q şi de simbolul
curent x, deci este complet independentă de mişcările şi intrările
anterioare. Maşina se opreşte după ce a citit toate simbolurile şirului de
intrare. Unele variante ale conceptului de maşină admit ca funcţia δ (Q, x)
să nu fie definită pentru unele stări Q sau simboluri x. În acest caz,
maşina se va opri şi când ajunge într-o configuraţie pentru care δ (Q, x) nu
este definită. Înainte de a da definiţie formală vom parcurge câteva
exemple.

Exemplu 2.1. Se presupune că maşina M are patru stări: Q0 , Q1 , Q2


şi Q3 . Şirurile de intrare admise sunt formate din simbolurile a, b şi c. Fie
Q0 starea iniţială şi funcţia de tranziţie δ dată de tabela din figura 2.1.

Input curent
a B c
S Q0 Q1 Q2 Q0

t Q1 Q0 Q0 Q3
ă Q2 Q3 Q1 Q2
r
Q3 Q3 Q1 Q0
i

Figura 2.1. Tabelul funcţiei de tranziţie.

Maşina poate fi reprezentată, în mod autoexplicativ, prin aşa


numita diagramă de stare sau diagramă de tranziţie corespunzătoare din
figura 2.2. Săgeata → indică că Q0 este starea iniţială. Observăm că în
unele cazuri maşina rămâne în aceeaşi stare, de exemplu δ (Q3 , a) = Q3 .
Aşadar, dacă maşina se află în starea Q3 şi simbolul de intrare este a,
maşina rămâne în starea Q3 şi următorul simbol va fi citit. Dacă input-ul
maşinii este aacbbca, maşina va trece prin următoarea secvenţă de
mişcări:

a a c b b c a
Q0 → Q1 → Q0 → Q0 → Q2 → Q1 → Q3 → Q3

x
Aici Qi → Q j înseamnă trecerea maşinii din starea Qi în Q j citind input-ul

x, δ (Qi , x) = Q j . După ce a fost citit şirul de intrare maşina se află în starea

Q3 .

Maşini cu stări finite sunt folosite pentru „recunoaşterea” sau


„acceptarea” diferitelor tipuri de şiruri şi respingerea altora, în funcţie de
starea maşinii după citirea şirului. Pentru o maşină cu stări finite M dată,
stabilim unele din stări drept „acceptate” sau „finale”. Când un şir
σ = x1 x2 ...xn este introdus în maşină, ea va executa secvenţa de mişcări

descrisă mai sus (începând cu starea iniţială Q0 şi simbolul x1 ). După


citirea simbolul xn , aflăm starea în care se opreşte maşina M.
Figura 2.2. Diagramă de tranziţie.

Dacă starea curentă este o stare acceptată, vom spune că M acceptă σ , în


caz contrar M nu acceptă σ . În diagrama de tranziţie pentru M marcăm
stările acceptate cu un cerc dublu.

Figura 2.3. Stare acceptată Q.

Starea iniţială poate fi o stare acceptată. O maşină în care aşa ceva are loc
va accepta şirul vid λ . (Poate accepta şi alte şiruri.)

Exemplu 2.2. Construim o maşină M care acceptă şiruri de


simboluri 0 şi 1 cu un număr par de 1-uri (şi nimic alt ceva). Diagrama de
tranziţie a maşinii este dată în figura 2.4. Aşadar, dacă avem ca input
σ 1 = 01001011 secvenţa de mişcări este:
0 1 0 0 1 0 1 1
Q0 → Q0 → Q1 → Q1 → Q1 → Q0 → Q0 → Q1 → Q0

Maşina se opreşte in starea acceptată Q0 , astfel σ 1 este acceptat de M. Pe


de altă parte, dacă input-ul este σ 2 = 01101 secvenţa de mişcări va fi

0 1 1 0 1
Q0 → Q0 → Q1 → Q0 → Q0 → Q1 .

Starea Q1 în care se opreşte maşina, nu este o stare acceptată şi ca urmare


şirul σ 2 nu este acceptat de M.

Figura 2.4. Diagrama de tranziţie a unui automat finit.

← Şir de intrare
← Cap de citire

Input curent – xk
Stare curentă – Q j

Figura 2.5. Reprezentare schematică a unei maşini cu stări finite.


Figura 2.5. arată o reprezentare schematică a maşinii cu stări finite.
Capul de citire se mişcă numai la dreapta; săgeata spre simbolul Q j indică

starea curentă. Definiţia formală a unei maşini cu stări finite este:

Definiţia 2.1. O maşină cu stări finite se compune din următoarele


obiecte:

1. O mulţime finită, nevidă Q = {Q0 , Q1 , K , Qn } . Elementele Q din Q


se numesc stări;
2. O mulţime finită, nevidă Σ = {a1 , a2 , K , ak } de simboluri admise
în şirul de intrare. Mulţimea Σ se numeşte alfabetul de intrare
pentru M;
3. O stare desemnată Q0 ∈ Q , denumită stare iniţială;
4. O funcţie de tranziţie δ (Q, a) definită pentru toţi Q ∈ Q şi a ∈ Σ .
Valoarea funcţiei δ (Q, a) este o stare din Q, δ : Q × Σ → Q .
5. O mulţime nevidă F de stări din Q. Elementele din F se numesc
stări finale sau acceptate.

O maşină cu stări finite M va atunci un cvintet M = {Q, Σ, Q0 , δ , F} .

Pentru maşina din exemplul 2.2. avem Q = {Q0 , Q1} , Σ = {0, 1} ,


Q0 = Q0 şi δ este dat prin δ (Q0 , 0) = δ (Q1 , 1) = Q0 , δ (Q0 , 1) = δ (Q1 , 0) = Q1 . În

literatura de specialitate există doar mici variaţii ale acestei definiţii.


Uneori nu este necesar ca funcţia de tranziţie δ (Q, x) să fie definită pentru
toţi Q şi x; de asemenea mulţimea stărilor acceptate poate fi vidă.
← Şir de intrare

Figura 2.6. Maşină cu stări finite în configuraţia Q, ak ak +1 K am .

Pentru a simplifica descrierea mişcărilor maşinii, introducem


conceptul de configuraţie. O configuraţie a unei maşini M este o pereche
Q, σ , unde Q este starea şi σ = ak ak +1 K am este partea şirului de intrare

care se află la dreapta şi sub capului de citire, vezi figura 2.6. Dacă
maşina M se află în configuraţia Q, ak ak +1 K am şi δ (Q, ak ) = Qˆ ,

următoarea configuraţia a maşinii M este Qˆ , ak +1ak + 2 K am . Numim

aceasta mişcare şi o vom nota în felul următor:

Q, ak ak +1 K am → Qˆ , ak +1ak + 2 K am

Când şirul de intrare este vid, de exemplu după citirea întregului şir,
configuraţia maşinii M este Q, λ , unde λ ia locul şirului vid. Ca urmare,

mişcarea maşinii din exemplul 2.2. cu input-ul 01101 este descrisă de


următoarea secvenţă de configuraţii:
Q0 , 01101 → Q0 , 1101 → Q1 , 101 → Q0 , 01 → Q0 , 1 → Q1 , λ

Dacă pentru o anumită secvenţă de configuraţii avem secvenţa de mişcări

Q1 , σ 1 → Q2 , σ 2 → L → Q p , σ p

vom nota aceasta


*
Q1 , σ 1 → Q p , σ p

şi o numim tranziţie.

Exemplu 2.3. Maşina M are ca alfabet mulţimea Σ = {0, 1, 2} . Fie


input-ul pentru M numerele întregii nenegativi exprimaţi în notaţie
ternară (în baza 3). Astfel, şirul ε1ε 2 K ε n reprezintă numărul

x = ε n + ε n−1 ⋅ 3 + ε n− 2 ⋅ 32 + L ε1 ⋅ 3n −1 .

Maşina va accepta un şir ε1ε 2 K ε n dacă şi numai dacă numărul


corespunzător lui x este par. Va accepta 121 ( = 1 + 2*3 + 1*9 = 16 , în baza
10) însă nu şi 210 ( = 0 + 1*3 + 2*9 = 21 , în baza 10). Comportamentul
maşinii corespunde următoarei reguli de paritate a numerelor exprimate
în notaţie ternară: dacă

x = ε n + ε n−1 ⋅ 3 + ε n− 2 ⋅ 32 + L ε1 ⋅ 3n −1 (2.1)
atunci x este par, dacă şi numai dacă ε1 + ε 2 + L + ε n este par. Pentru a
vedea aceasta, presupunem că x este dat de (2.1). Împărţirea cu 2 a
puterilor lui 3, dă restul 1. Astfel, când împărţim x cu 2, fiecare termen
ε k ⋅ 3n − k va contribui cu ε k la rest. Demonstraţia formală se poate da cu

ajutorul congruenţelor. Maşina M corespunde atunci diagramei din figura


2.7.

Figura 2.7. Divizibilitatea cu 2.

Funcţia de tranziţie δ este dată astfel încât δ (Qi , ε ) = Q j , unde j este restul

obţinut în urma împărţirii lui i + ε la 2 ( j ≡ i + ε (mod 2) ). Cu input-ul de


forma σ = 121 maşina trece prin secvenţa de configuraţii

Q0 , 121 → Q1 , 21 → Q1 , 1 → Q0 , λ

şi pentru σ = 1122 mişcările sunt

Q0 , 1122 → Q1 , 122 → Q0 , 22 → Q0 , 2 → Q0 , λ .
2.2. DESCRIEREA UNUI LIMBAJ CU AJUTORUL MAŞINILOR

Conceptul de maşină cu stări finite permite o nouă metodă de


descriere a limbajelor. Fie M o maşină cu stări finite având alfabetul Σ .
Definim limbajul L( M ) generat de M ca mulţimea şirurilor de elemente
din Σ acceptate de M. Cu alte cuvinte, un şir σ = x1 x2 K xn din Σ* va fi în
L( M ) dacă şi numai dacă maşina M, pornită cu input-ul σ , se va opri

într-o stare acceptată. Formal avem:

Definiţia 2.2. Fie M = {Q, Σ, Q0 , δ , F} o maşină cu stări finite.


Limbajul L( M ) generat (recunoscut sau acceptat) de M este definit ca

{ *

}
L( M ) = σ ∈ Σ* | Q0 , σ → Q, λ unde Q ∈ F .

Descriere de mai sus a unui limbaj este foarte convenabilă. Maşini


cu stări finite por fi uşor simulate pe calculator, de fapt, ele pot fi uşor
implementate şi în componente hardware. Astfel, dat fiind un limbaj L
pentru care se poate construi o maşină cu stări finite, atunci, s-a obţinut,
de fapt, un analizator automat pentru L. În mod firesc apare următoarea
întrebare: Fiind dată o gramatică G, putem construi o maşină cu stări
finite M astfel încât L(G ) = L( M ) ? Din nefericire (sau din fericire, în
funcţie de punctul de vedere), acest lucru este posibil doar pentru un tip
special de gramatici – gramaticile regulare. Reamintim că G este regulară
dacă este liniară la dreapta (producţiile sunt de forma A → aB , A → a sau
S → λ ) sau liniară la stânga (producţiile sunt de forma A → Ba , A → a sau

S → λ ). Avem următorul rezultat.

Teorema 2.1. Fie L un limbaj. Există o maşină cu stări finite M


astfel încât L = L( M ) dacă şi numai dacă există o gramatică regulară G
astfel ca L = L(G ) .

În cele ce urmează vom demonstra doar suficienţa. Fiind dată o


maşină cu stări finite M, construim o gramatică regulară G astfel încât
L( M ) = L(G ) . Pentru M avem: stările Q0 , Q1 , K , Qn , alfabetul
Σ = {a1 , a2 , K , ak } , funcţia de tranziţie δ (Q, a ) , starea iniţială Q0 şi F

mulţimea stărilor finale. Gramatica G este construită astfel:

1. Alfabetul (mulţimea de terminale) este Σ = {a1 , a2 , K , ak } .


2. Mulţimea neterminalelor este mulţimea simbolurilor din Q
( N = Q ).
3. Simbolul de start în G este Q0 – starea iniţială a lui M.
4. Producţiile din G sunt formate după următoarele reguli:

I. Pentru fiecare tranziţie δ (Qi , a) = Q j , unde Q j nu este o

stare finală, folosim producţia Qi → aQ j .

II. Pentru fiecare tranziţie δ (Qi , a) = Q j , unde Q j este o

stare finală, folosim producţiile Qi → aQ j şi Qi → a .

III. Dacă Q0 este a stare finală, folosim producţia Q0 → λ .

Evident gramatică obţinută este regulară (liniară la stânga).


Exemplu 2.4. Fie M definită de diagrama din figura 2.8. Gramatica
corespunzătoare G este construită astfel:

1. Q0 → bQ0  b
 Regula II. Q0 → Q0
2. Q0 → b 
a
3. Q0 → aQ0 Regula I. Q0 → Q1
4. Q0 → λ Regula III. Q0 ∈ F
5. Q1 → aQ0  q
 Regula II. Q1 → Q0
6. Q1 → a 

7. Q1 → bQ2  b
 Regula II. Q1 → Q2
8. Q1 → b 
a
9. Q2 → aQ1 Regula I. Q2 → Q1
10. Q2 → bQ0  b
 Regula II. Q2 → Q0
11. Q2 → b 

Stare iniţială – Q0
Stări acceptate – Q0 şi Q1

Figura 2.8. Gramatică pentru o maşină cu stări finite.

Demonstraţia pentru L( M ) = L(G ) este imediată. Presupunem că un


şir σ = x1 x2 K x p este acceptat de maşină. Secvenţa de configuraţii pentru

M va fi
Q0 , x1 x2 K x p → Qˆ1 , x2 x3 K x p → Qˆ 2 , x3 x4 K x p
*
→ Qˆ i , xi +1 xi + 2 K x p → Qˆ i +1 , xi + 2 K x p (2.2)
*
→ Qˆ p −1 , x p → Qˆ p , λ

unde x j ∈ Σ , Qˆ j ∈ Q şi Qˆ p ∈ F . Tranziţiile corespund funcţie de tranziţie din

(2.3).

δ (Q0 , x1 ) = Qˆ1 , δ (Qˆ1 , x2 ) = Qˆ 2 , K ,


(2.3)
δ (Qˆ , x ) = Qˆ , K , δ (Qˆ , x ) = Qˆ
i i +1 i +1 p −1 p p

Prin urmare, gramatica G include (printre altele) următoarele producţii:

Q0 → x1Qˆ1 , Qˆ1 → x2Qˆ 2 , K , Qˆ i → xi +1Qˆ i +1 , K , Qˆ p −1 → x p Qˆ p ,


(2.4)
Qˆ p −1 → x p

Ultima producţie este inclusă deoarece Qˆ p este o stare finală. Deci, şirul

σ = x1 x2 K x p poate fi derivat în gramatica G astfel

Q0 ⇒ x1Qˆ1 ⇒ x1 x2Qˆ 2 ⇒ K ⇒ x1 x2 K xi Qˆ i
(2.5)
⇒ x1 x2 K xi xi +1Qˆ i +1 ⇒ x1 x2 K x p −1Qˆ p −1 ⇒ x1 x2 K x p −1 x p

În toate derivările, cu excepţia ultimei, am folosit producţii de forma


Qˆ i → xi +1Qˆ i +1 ; în ultima însă am folosit producţia Qˆ p −1 → x p . Inversa se

demonstrează în mod analog: Presupunem că derivarea unei propoziţii


x1 x2 K x p în gramatica G este dată de (2.5). Aceasta implică că toate
producţiile din (2.4) sunt producţii în G, deci funcţia de tranziţie δ
satisface relaţiile (2.3) ceea ce implică, în final, că maşina M trece prin
secvenţa de configuraţii (2.3), x1 x2 K x p ∈ L( M ) . Prin urmare, suficienţa

teoreme 2.1. este demonstrată.

Ca exemplu, considerăm maşina M şi gramatica G din exemplul


2.4. Şirul σ = abaab aparţine limbajului L( M ) întrucât

Q0 , abaab → Q1 , baab → Q2 , aab → Q1 , ab → Q0 , b → Q0 , λ

şi Q0 este o stare finală. Derivarea lui σ în gramatica G este atunci

3 7 9 5 2
Q0 ⇒ aQ1 ⇒ abQ2 ⇒ abaQ1 ⇒ abaaQ0 ⇒ abaab .

Numărul producţiei folosite este indicat deasupra săgeţilor.


Un mic comentariu merită să fie făcut asupra acceptării şirului vid
λ de o maşină cu stări finite M. Când un astfel de şir este prezentat
maşinii, ea porneşte din configuraţia (Q0 , λ ) , unde Q0 este starea iniţială,
şi se opreşte fără să fi facă nici o singură mişcare. Deci, λ ∈ L( M ) dacă şi
numai dacă starea iniţială Q0 este o stare finală.

2.3. MAŞINI CU STĂRI FINITE NEDETERMINISTE

Demonstraţia necesităţii teoremei 2.1. este imediată. Dată fiind o


gramatică G, construim o maşină cu stări finite M care acceptă L(G ) ,
a
punând neterminalele să joace rolul stărilor şi incluzând tranziţia A → B
( δ ( A, a) = B ) pentru fiecare producţie de forma A → aB . Cu toate acestea,
după cum arată exemplul următor, ideea nu aduce rezultatul dorit. Fie G
gramatica

S → aA A → aB B→b

S → bB A → aS .

Dacă încercăm să construim maşina potrivit schemei indicate, apar două


dificultăţi. Mai întâi, ce ar trebui să fi δ ( B, a) ? Nu există o producţie de
forma B → aX pentru nici un neterminal X. După cum vom vedea mai
târziu, acesta este doar un mic inconvenient care poate fi eliminat. O
problemă cu mult mai serioasă apare la producţiile A → aB sau A → aS . În
încercarea construirii maşinii M ne lovim de dilema definirii lui δ ( A, a) ,
de pildă, ce e de făcut când M se află în starea A şi citeşte simbolul a.
Producţia A → aB implică ca următoarea stare δ ( A, a) să fie B, în timp ce
A → aS sugerează să fie S. Aşadar, fragmentul diagramei de descriere a M

va arăta ca în figura 2.9.

Figura 2.9. Diagramă de tranziţie la ambiguitate.

La definirea maşinii cu stări finite în definiţia 2.1., s-a precizat că δ (Q, x)


a fost definită pentru fiecare stare Q în parte şi orice simbol de intrare x,
iar cunoscând Q şi x, ştim starea următoare, de exemplu, valoarea funcţie
de tranziţie δ (Q, x) a fost unic definită. Maşina nu a fost lăsată să facă
nici o altă alegere. O modalitate de ieşire din acest impas este de a
extinde definiţia unei maşini cu stări finite, permiţând includerea
particularităţilor descrise mai sus. Astfel de dispozitive vor fi numite
automate finite nedeterministe (AFN) sau maşini cu stări finite
nedeterministe (MSFN). Se observă, că dată fiind o maşină de acest gen,
M, există un automat finit determinist obişnuit (definit ca în definiţia 2.1.)
care acceptă acelaşi limbaj ca M. În continuare vom descrie detaliat acest
concept.

Definiţia 2.3. O maşină cu stări finite nedeterministă (MSFN) se


compune din următoarele cinci obiecte:

1. O mulţime finită, nevidă Q = {Q0 , Q1 , K , Qn } de stări.


2. O mulţime finită, nevidă Σ = {a1 , a2 , K , ak } de simboluri de
intrare admise (alfabetul).
3. O stare desemnată Q0 ∈ Q , numit stare iniţială.
4. O funcţie de tranziţie δ (Q, x) , care nu trebuie definită pentru toţi
Q din Q şi x din Σ . Pentru acei Q şi x pentru care este definită,
δ (Q, x) desemnează o mulţime de una sau mai multe stări din Q.

Concret, dacă β (Q) este mulţimea tuturor submulţimilor din Q,


atunci funcţia de tranziţie este δ : Q × Σ → β (Q) . Cu această
notaţie, δ (Q, x) „nu e definită” înseamnă δ (Q, x) = ∅ (mulţimea
vidă). Funcţia δ se interpretează la fel ca în cazul determinist:
starea următoare. Diferenţa este doar, că admite mai multe
posibilităţi (sau nici una).
5. O mulţime nevidă F de stări. Elementele din F se numesc stări
acceptate sau finale.
Aceste maşini M vor fi notate {Q, Σ, Q0 , δ , F} (ca maşinile
deterministe) şi se mai numesc automate finite nedeterministe (AFN).
Aşadar, totul e la fel ca în cazul determinist, cu excepţia definirii funcţie
de tranziţie δ . Mişcările unui MSFN sunt date în felul următor.

1. Fiind dat un şir σ = x1 x2 K x p de simboluri de intrare din Σ ,

configuraţia iniţială va fi Q0 , x1 x2 K x p , unde M este în starea

iniţială Q0 cu simbolul de intrare x1 .


2. Presupunem că la un moment dat, configuraţia M este
Q, xi xi +1 K x p . Dacă Q̂ este una din valorile posibile ale lui

δ (Q, xi ) (mai exact, Qˆ ∈ δ (Q, xi ) ) atunci M poate trece în

configuraţia Qˆ , xi +1 K x p . Deci, dacă M se află în starea Q şi

simbolul de intrare este x, M poate trece în orice stare din


δ (Q, xi ) , dar nu în alta. Când δ (Q, xi ) = ∅ nu se va face nici o

mişcare. Trecerea, dacă e posibilă, de la o configuraţie la alta, se


numeşte mişcare legală şi este notată prin

Q, xi xi +1 K x p → Qˆ , xi +1 K x p .

3. Maşina se opreşte dacă a citit întregul input (în configuraţia


Q, λ ) sau când δ (Q, xi ) = ∅ ( δ (Q, xi ) nu conţine posibilităţi

pentru următoarea starea).

Exemplu 2.5. Fie M o MSFN după cum urmează. Mulţimea


stărilor Q are patru elemente: Q = {Q0 , Q1 , Q2 , Q3} , alfabetul Σ = {1, 2, 3} ,
starea iniţială este Q0 şi mulţimea stărilor finale F = {Q2 , Q3 ,} .
Input curent
0 1 2
S Q0 {Q0 , Q1} {Q0 } ∅
t Q1 ∅ {Q2 } {Q0 , Q3}
ă Q2 {Q2 } {Q0 , Q3} ∅
r
Q3 {Q2 } {Q1 , Q3} {Q3 }
i

Figura 2.10. O funcţie de tranziţie nedeterministă δ .

Figura 2.11. O MSFN.

Funcţia de tranziţie este dată de tabelul din figura 2.10., sau de diagrama
din figura 2.11. Astfel, dacă maşina se află în starea Q1 şi simbolul de
intrare este 2, M poate trece în stările Q0 sau Q3 . Ca urmare, dat fiind un
input σ , maşina M poate trece prin diferite secvenţe de mişcări. De
exemplu, pentru σ = 01021 unele dintre mişcările posibile sunt
următoarele:

Q0 , 01021 → Q0 , 1021 → Q0 , 021 → Q1 , 21 → Q3 , 1 → Q1 , λ − stop

Q0 , 01021 → Q0 , 1021 → Q0 , 021 → Q0 , 21 − stop

Q0 , 01021 → Q1 , 1021 → Q2 , 021 → Q2 , 21 − stop

Q0 , 01021 → Q0 , 1021 → Q0 , 021 → Q1 , 21 → Q3 , 1 → Q3 , λ − stop

În prima secvenţă, input-ul este citit în întregime dar maşina se


opreşte într-o stare neacceptată; în a doua şi a treia secvenţă, M se opreşte
înainte ca şirul să fie citit în întregime; şi în a patra secvenţă, întregul şir
este citit iar ultima stare este o stare acceptată.

Dacă Q, σ şi Qˆ , σˆ sunt două configuraţii, astfel încât M poate

trece din Q, σ în Qˆ , σˆ printr-o secvenţă de mişcări admise, spunem că

Qˆ , σˆ este derivabil din Q, σ şi notăm aceasta

*
Q, σ → Qˆ , σˆ .

* *
În exemplul 2.5. avem Q0 , 01021 → Q1 , 21 şi Q0 , 01021 → Q3 , λ . Putem
defini acum un limbaj generat (acceptat, recunoscut) de o maşină cu stări
finite nedeterministă.

Definiţia 2.4. Fie M = {Q, Σ, Q0 , δ , F} o MSFN. Spunem că un şir


σ = x1 x2 K x p de elemente din Σ este acceptat de M dacă
*
Q0 , x1 x2 K x p → Q, λ

şi Q ∈ F . Mulţimea şirurilor acceptate de M se notează L( M ) şi se


numeşte limbaj generat de M.

Observăm, că pentru ca un şir σ să fie acceptat de M, avem nevoie


doar de o secvenţă legală de mişcări din Q0 , σ în Q, λ , unde Q este o

stare acceptată; nu toate secvenţele legale vor fi folosite aici. În exemplul


*
2.5. Q0 , 01021 → Q3 , λ , deci σ = 01021 este în L( M ) deoarece Q3 este o

stare acceptată. Chiar dacă maşina porneşte în configuraţia Q0 , 01021 , ea


*
poate ajunge în mai multe impasuri: Q0 , 01021 → Q0 , 21 ,
*
Q0 , 01021 → Q2 , 21 , etc.

Evident, că maşinile cu stări finite din definiţia 2.1. sunt cazuri


particulare ale maşinilor nedeterministe. Ele se caracterizate prin faptul că
pentru fiecare stare Q şi pentru fiecare input x mulţimea δ (Q, x) este
formată dintr-o singură stare. Din acest motiv e de aşteptat ca clasa
limbajelor acceptate de maşini nedeterministe să fie mai mare decât clasa
acceptată de maşinile deterministe, de exemplu, să existe o MSFN M,
astfel încât pentru nici o maşină deterministă K să avem L( M ) = L( K ) .
Surprinzător, acesta nu va fi cazul. Avem următoarea teoremă.

Teorema 2.2. Fie M o maşină cu stări finite nedeterministă. Atunci


există o maşină deterministă K astfel încât L( M ) = L( K ) ; maşinile M şi K
acceptă acelaşi şir.
Demonstraţie. Luăm o maşină cu stări finite nedeterministă M, de
genul celei specificate în definiţia 2.3. Fie Q = {Q0 , Q1 , K , Qn } o mulţime de
stări din M, cu Q0 starea iniţială, Σ = {a1 , a2 , K , ak } alfabetul, δ funcţia de
tranziţie şi F mulţimea stărilor acceptate. Maşina K se specifică astfel:

1. Alfabetul de intrare pentru K este Σ – acelaşi ca la M.


2. Stările din K vor fi toate submulţimile posibile din Q. De
exemplu, dacă M are trei stări – Q0 , Q1 şi Q2 – stările din K vor
fi S0 = {Q0 } , S1 = {Q1} , S 2 = {Q2 } , S3 = {Q0 , Q1} , S 4 = {Q0 , Q2 } ,

S5 = {Q1 , Q2 } , S6 = {Q0 , Q1 , Q2 } şi S7 = ∅ – mulţimea vidă. (Se

include mulţimea vidă ca submulţime a fiecărei mulţimi.)


Astfel, dacă M are n stări maşina K va avea 2n stări:
S0 , S1 , S2 , K , S 2n −1 . Mulţimea stărilor din K se notează cu S.

3. K are starea iniţială S0 = {Q0 } , unde Q0 este starea iniţială din M.


4. O stare S ∈ S va fi stare finală în K dacă şi numai dacă conţine o
stare finală Q ∈ F din M. De exemplu, considerând M maşina din
exemplul 2.5., stările finale pentru K vor fi mulţimi care conţin
Q2 sau Q3 (sau ambele). Acestea sunt {Q2 } , {Q3 } , {Q0 , Q2 } ,

{Q0 , Q3} , {Q1 , Q2 } , {Q1 , Q3} , {Q2 , Q3} , {Q0 , Q1 , Q2 } , {Q0 , Q1 , Q3} ,

{Q0 , Q2 , Q3} , {Q1 , Q2 , Q3} şi {Q0 , Q1 , Q2 , Q3} – în număr de .

5. Funcţia de tranziţie ∆ pentru K este definită în felul următor.


Fie S = {Qi , Qi , K , Qi } o stare din K şi x ∈ Σ . Valoarea ∆( S , x)
1 2 p

corespunde altei stare din K, de exemplu, o mulţime de Q-uri


definite după regula:

Dacă Q ∈ δ (Q j , x) pentru uni Q j din S, atunci Q ∈ ∆( S , x)


Formal avem

∆( S , x) = U δ (Q, x)
Q∈S
(2.6)

Cu alte cuvinte, dacă pentru uni Q j din S maşina M poate trece la input-ul

x din starea Q j în Q, atunci Q ∈ ∆( S , x) . O nedeterminare apare când S = ∅

(mulţimea vidă, care este o stare din K). Formal, aceasta nu reprezintă o
problemă, deoarece formule (2.6) ne dă în acest caz ∆(∅, x) = ∅ oricare ar
fi x (o reuniune de mulţimi vide este vidă).
Astfel, maşina K e complet definită şi evident deterministă: Pentru
fiecare stare S din K şi fiecare simbol de intrare x, funcţia ∆( S , x)
defineşte în mod unic altă stare pentru K. Înainte de a trece la a demonstra
că ambele maşini acceptă acelaşi limbaj, să vedem, ca exemplu, cum
construim K.

Exemplu 2.6. Fie M maşina din exemplul 2.5. Maşina deterministă


corespunzătoare K are 16 ( = 24 ) stări:

S0 = {Q0 } , S1 = {Q1} , S 2 = {Q2 } , S3 = {Q3} ,

S 4 = {Q0 , Q1} , S5 = {Q0 , Q2 } , S6 = {Q0 , Q3} ,

S7 = {Q1 , Q2 } , S8 = {Q1 , Q3 } , S9 = {Q2 , Q3} ,

S10 = {Q0 , Q1 , Q2 } , S11 = {Q0 , Q1 , Q3 } , S12 = {Q0 , Q2 , Q3} ,

S13 = {Q1 , Q2 , Q3} , S14 = {Q0 , Q1 , Q2 , Q3} şi S15 = ∅ .


Starea iniţială este S0 = {Q0 } şi stările acceptate sunt S2 , S3 , S5 , S6 , S7 , S8 ,
S9 , S10 , S11 , S12 , S13 şi S14 , acei S care conţin Q2 şi/sau Q3 – stările finale

din M. Să calculăm unele valori ale funcţie de tranziţie ∆ .


Considerăm ca exemplu ∆( S5 , 1) . Deoarece S5 = {Q0 , Q2 } şi δ (Q0 , 1) = {Q0 } ,
δ (Q2 , 1) = {Q0 , Q3} , atunci
∆( S5 , 1) = δ (Q0 , 1) ∪ δ (Q2 , 1) = {Q0 } ∪ {Q0 , Q3 } = {Q0 , Q3 } = S6 , deci ∆( S5 , 1) = S6 .

Analog, pentru S7 = {Q1 , Q2 } ,

∆( S7 , 0) = δ (Q1 , 0) ∪ δ (Q2 , 0) = ∅ ∪ {Q2 } = {Q2 } = S 2 . De asemenea,


∆( S0 , 2) = δ (Q0 , 2) = ∅ = S12 . Prin urmare ∆( S15 , x) = S15 pentru x = 0, 1, 2 .

Descrierea completă a funcţie de tranziţie ∆ este dată în tabelul din figura


2.12. Maşina K are propria diagramă de tranziţie, dar imaginea ei este
prea complexă. Aruncând o privire asupra tabelei funcţiei ∆ , se observă
că K are mai multe stări decât sunt necesare. De pildă, starea S7 nu poate
fi atinsă din starea iniţială S0 . De altfel, ea nu poate fi atinsă din nici o
stare. Aşadar, putem înlătura starea S7 iar maşina va accepta acelaşi şir.
Vom discuta, pe scurt, problema obţinerii unei MSF „pe cât posibil de
mică”. Ceea ce încercăm să arătăm acum este, că dată fiind o MSF
nedeterministă, există o MSF deterministă care acceptă exact acelaşi şir;
nu încercăm să găsim cea mai eficientă maşină de acest gen.
Input x
S0 = {Q0 } S4 S0 S15

S1 = {Q1} S15 S2 S6

S 2 = {Q2 } S2 S6 S15

S3 = {Q3} S2 S3 S3

S 4 = {Q0 , Q1} S4 S5 S6

S5 = {Q0 , Q2 } S10 S5 S15


S S6 = {Q0 , Q3} S10 S11 S3
t
S7 = {Q1 , Q2 } S2 S12 S6
ă
S8 = {Q1 , Q3 } S2 S13 S6
r
S9 = {Q2 , Q3} S2 S11 S3
i
S10 = {Q0 , Q1 , Q2 } S10 S12 S6

S11 = {Q0 , Q1 , Q3 } S10 S14 S6

S12 = {Q0 , Q2 , Q3} S10 S11 S3

S13 = {Q1 , Q2 , Q3} S2 S14 S6

S14 = {Q0 , Q1 , Q2 , Q3} S10 S14 S6

S15 = ∅ S15 S15 S15

Figura 2.12. Tabela funcţie de tranziţie ∆ .

Ne întoarcem la a demonstra că L( K ) = L( M ) . Presupunem că un şir


σ = x1 , x2 , K , x p este acceptat de M. Aceasta înseamnă că pentru o secvenţă

de stări Q0 , Qˆ1 , Qˆ 2 , K , Qˆ p secvenţa de mişcări

x1 x2 xi +1 xp
Q0 = Qˆ 0 → Qˆ1 → Qˆ 2 → L → Qˆ i → Qˆ i +1 → L → Qˆ p −1 → Qˆ p (2.7)
este legală, iar Qˆ p este o stare acceptată din M. Rezultă că pentru fiecare

i = 0, 1, 2, ..., p − 1 , funcţia de tranziţie δ satisface

Qˆ i +1 ∈ δ (Qˆ i , xi +1 ), i = 0, 1, ..., p − 1 (2.8)

Când şirul δ este introdus în maşina K, maşina execută următoarea


secvenţă de mişcări:

x1 x2 xi +1 xp
S0 = Sˆ0 → Sˆ1 → Sˆ2 → L → Sˆi → Sˆi +1 → L → Sˆ p −1 → Sˆ p (2.9)

x1
Pentru i = 0 în (2.8), Q̂1 este în δ (Qˆ 0 , x1 ) , deoarece Qˆ 0 → Qˆ1 este o tranziţie

legală în M, astfel Q̂1 este în Sˆ1 = ∆( Sˆ0 , x1 ) . Analog, cu i = 1 , Q̂2 este în

δ (Qˆ1 , x2 ) , deci Qˆ 2 ∈ Sˆ2 = ∆( Sˆ1 , x2 ) . Continuând în această manieră, observăm

că Qˆ j este în Sˆ j oricare ar fi j, în particular, Qˆ p ∈ Sˆ p . Qˆ p fiind o stare finală

în M ( σ a fost acceptat de M), constatăm că Sˆ p este o stare finală în K, σ


este acceptat de K.
Reciproc, presupunem că un şir σ = x1 , x2 , K , x p este acceptat de K,

şi fie (2.9) secvenţa de mişcări făcute de K la input-ul σ . Pentru fiecare


x1
Qˆ1 ∈ Sˆ1 mişcarea Qˆ 0 → Qˆ1 este legală pentru maşina M ( Ŝ1 se compune din
x1
acei Q pentru care Qˆ1 → Q este mişcare legală în M). Analog, pentru

fiecare Qˆ 2 ∈ Sˆ2 există un Q̂1 în Ŝ1 astfel încât secvenţa de mişcări

x1 x2
Qˆ 0 → Qˆ1 → Qˆ 2
x1
este legală în M. Alegem Q̂1 ca fiind starea pentru care tranziţia Qˆ1 → Qˆ 2

este legală ( Q̂1 există deoarece ∆( Sˆ1 , x2 ) = Sˆ2 ). În acelaşi mod arătăm, că

dacă Qˆ 3 ∈ Sˆ3 , atunci putem găsi Qˆ1 ∈ Sˆ1 şi Qˆ 2 ∈ Sˆ2 astfel încât
x1 x2 x3
Qˆ 0 → Qˆ1 → Qˆ 2 → Qˆ 3 este o secvenţă legală de mişcări. Continuând în acest

fel, observăm că pentru fiecare Qˆ p şi Sˆ p putem găsi Qˆ1 ∈ Sˆ1 , Qˆ 2 ∈ Sˆ2 , ...,

Qˆ p −1 ∈ Sˆ p −1 astfel încât (2.7) să fie o secvenţă legală de mişcări din M. Dacă

alegem acum Qˆ p din Sˆ p , care este o stare acceptată din M, constatăm că

σ este acceptat de M, adică, face parte din limbajul L( M ) . Q.E.D.

Definiţia 2.5. Fie M 1 şi M 2 două MSF. Maşinile M 1 şi M 2 se


numesc echivalente dacă generează (acceptă) acelaşi limbaj,
L( M 1 ) = L( M 2 ) .

Se observă imediat, din demonstraţia teoremei 2.2., că dată fiind o


maşină nedeterministă M 1 , maşina deterministă corespunzătoare M 2 este
destul de mare. Într-adevăr, dacă M 1 are n stări, atunci construcţie cere de
la M 2 2n stări. Dacă n = 10 , atunci M 2 va avea 210 = 1024 stări. În
paragraful 2.5. vom arăta cum micşorăm M 2 , de fapt cum să găsim cea
mai mică maşină echivalentă cu M 2 . În unele cazuri, construirea lui M 2
poate fi cu mult simplificată. Ne reamintim că maşina M = {Q, Σ, Q0 , δ , F}
va eşua la determinism din două motive:

1. δ (Q, x) = ∅ pentru Q ∈ Q şi x ∈ Σ (dacă M se află în starea Q

şi simbolul de intrare este x, următoarea stare e nedefinită).


2. δ (Q, x) conţine mai mult de o stare (pentru unii Q şi x).
Natura celor două cazuri diferă; maşina M nu este „chiar” nedeterministă,
problema constă în faptul că se poate „bloca” într-un punct mort. Din
acest motiv, unii autori nu consideră astfel de maşini nedeterministe. În
cazuri în care apare 1 şi 2 nu (atunci când δ (Q, x) este întotdeauna goală
sau conţine o singură stare) construirea unei maşini deterministe
echivalente poate fi cu mult simplificată.

Teorema 2.3. Fie M = {Q, Σ, Q0 , δ , F} o maşină cu stări finite


nedeterministă astfel încât pentru fiecare Q ∈ Q şi x ∈ Σ mulţimea δ (Q, x)
este vidă sau conţine un singur element. Fie K o maşină obţinută din M
prin adăugarea unei stări noi D, şi a cărei funcţie de tranziţie ∆ este
definită după cum urmează:

δ (Q, x) dacă δ (Q, x) ≠ ∅


∆(Q, x) =  ∆( D, x) = {D} pentru toţi x ∈ Σ
{D} dacă δ (Q, x) = ∅

Stările finale şi iniţiale din K sun aceleaşi ca şi în M – în particular D nu


este o stare acceptată. Atunci K este o maşină deterministă şi echivalentă
cu M.

Starea D introdusă mai sus are înţelesul de „capcană” sau stare


„moartă”. Ideea din spatele teoremei 2.3. este evidentă: Dacă maşina M se
blochează într-o stare oarecare, şirul σ citit nu poate fi acceptat. Totuşi se
trimite maşina în acea stare „moartă”.

Demonstraţie. Faptul că K e deterministă este evident: Pentru


fiecare stare Q ∈ Q ∪ {D} şi x ∈ Σ mulţimea ∆(Q, x) conţine numai o
singură stare. Dacă un şir σ = x1 , x2 , K , x p este acceptat de M, atunci

secvenţa de mişcări din K, la input-ul σ , este aceeaşi ca secvenţa de


mişcări din M cu acelaşi input – singura posibilitate ca mişcările să difere
este când M se blochează într-o configuraţie

Q, xi xi +1 K x p δ (Q, xi ) = ∅ (2.10)

Deoarece M acceptă σ , aceasta nu va avea loc. Reciproc, dacă M nu


acceptă σ , atunci ori M trece din configuraţia Q0 , σ în Q, λ unde Q nu

e stare acceptată, caz în care K face acelaşi lucru, ori M se blochează în


configuraţia (2.10). În acest caz, K continuă prin a trece în starea D şi
rămâne aici până când s-a citit restul şirului. Cum D nu este o stare
acceptată, K nu acceptă pe σ . Q.E.D.

Exemplu 2.7. Considerăm maşina M a cărei diagramă de tranziţie


este dată în figura 2.13. Evident, M satisface condiţiile teoremei 2.3.,
maşina K echivalentă cu M este dată de diagrama figurii 2.14.

Figura 2.13. Funcţie de tranziţie incompletă.


Figura 2.14. Completarea funcţiei de tranziţie.

2.4. GRAMATICI REGULARE ŞI MAŞINI CU STĂRI FINITE

În această parte completăm demonstraţia teoremei 2.1. arătând că,


dată fiind o gramatică regulată G, există o maşină cu stări finite
deterministă M astfel încât L( M ) = L(G ) . Vom demonstra doar pentru
gramaticile liniare la dreapta (producţiile sunt de forma S → λ , A → aB
sau A → a ); cazul gramaticilor liniare la stânga este simplu şi va fi lăsat
ca exerciţiu. În contextul teoremei 2.2., este suficient de arătat că dată
fiind o gramatică liniară la dreapta, există o maşină nedeterministă M
astfel încât L( M ) = L(G ) .

Teorema 2.4. Fie G o gramatică liniară la dreapta. Atunci există o


maşină cu stări finite nedeterministă M astfel încât L(G ) = L( M ) .

Demonstraţie. Fie G cu alfabetul Σ = {a1 , a2 , K , ak } , mulţimea de


neterminale N = {S , A, B, K} , S simbolul de start şi P mulţimea
producţiilor. Alfabetul de intrare pentru M va fi tot Σ , stările din M vor fi
neterminalele S , A, B, K , plus o stare X, diferită de celelalte neterminale.
Starea iniţială din M este S. Stările acceptate din M sunt X şi, dacă S → λ
este o producţie în G, starea S. Funcţia de tranziţie δ din M este definită
prin următoarele reguli:

1. Pentru fiecare producţie de forma A → aB din G se include B în


a
δ ( A, a ) , de exemplu, se include tranziţia A → B în diagrama de

tranziţie.
2. Pentru fiecare producţie de forma A → a se include starea X în
a
δ ( A, a ) , de exemplu, se include tranziţia A → X în diagrama de

tranziţie.

În general, maşina rezultată fa fi nedeterministă. Trebuie să arătăm că


şirurile acceptate de M sunt chiar acelea ce sunt derivabile în G. Fie
σ = x1 x2 K xn un şir acceptat de M. Prin definiţie există o secvenţă legală de

mişcări

x1 x2 x3 xn
S = Z1 → Z 2 → Z 3 → L → Z n → Z n +1 (2.11)

unde Z n +1 este stare acceptată şi Z n +1 = X sau (eventual) Z n +1 = S . Pentru


xi
fiecare i < n tranziţia Z i → Z i +1 este legală, ceea ce implică că
Z i +1 ∈ δ ( Z i , xi ) , astfel încât Z i → xi Z i +1 este o producţie în G. Considerăm
xn
acum ultima tranziţie Z n → Z n +1 . Dacă Z n +1 = X , atunci G are producţii de
forma Z n → xn ; dacă Z n +1 = S , atunci G trebuie să aibă producţiile Z n → xn S
şi S → λ . Astfel, secvenţa de derivări pentru σ în G este dată ori de
(2.12) ori de (2.13):

S = Z1 ⇒ x1Z 2 ⇒ x1 x2 Z 3 ⇒ L ⇒ x1 x2 K xn −1Z n ⇒ x1 x2 K xn −1 xn (2.12)

S = Z1 ⇒ x1Z 2 ⇒ x1 x2 Z 3 ⇒ L ⇒ x1 x2 K xn −1Z n ⇒ x1 x2 K xn −1 xn S ⇒ x1 x2 K xn (2.13)

În ambele cazuri, σ este derivabil în G. Şi reciproca este adevărată.


Presupunem că σ este în L(G ) ; derivarea lui trebuie să fie de forma
(2.12) sau (2.13). În ambele cazuri (2.11) este o secvenţă legală de
mişcări din M. Ceva atenţie trebuie acordată situaţiei când σ = λ este şirul
vid. Dacă S → λ este o producţie din G atunci evident λ ∈ L(G ) . În acest
caz S este tot o stare acceptată, astfel încât, dacă λ este introdus în M,
configuraţia iniţială a maşinii va fi S , λ şi se opreşte fără să facă o

singură mişcare. S fiind o stare acceptată, M acceptă λ , λ ∈ L( M ) . Q.E.D.

Exemplu 2.8. Considerăm gramatica

S → aA | aB | λ

A → aA | b

B → bS | b

Diagrama maşinii nedeterministe M, astfel încât L(G ) = L( M ) , este dată în


b
figura 2.15. S → λ fiind o producţie, starea S e acceptată. Tranziţia A → X
b
este rezultatul producţiei A → b ; B → S provine din producţia B → bS ;
b
A → A din A → aA , etc.

Figura 2.15. Maşină cu stări finite nedeterministă care recunoaşte un


limbaj.

Pentru a construi o maşină deterministă K astfel încât L( K ) = L(G ) ,


ne putem folosi de metoda utilizată în demonstraţia teoremei 2.2. Maşina
rezultată K are 16 stări şi funcţia de tranziţie dată de tabela din figura
2.16. Un număr mare de stări nu poate fi atins din starea iniţială Q0 . De
exemplu, Q4 nu poate fi atins din nici o stare, deci poate fi eliminată.
Desigur, maşina obţinută nu este cea mai mică posibilă. Ideea teoremei
2.2. este că o astfel de maşină poate fi construită. Vom discuta problema
găsirii celei mai mici maşini în paragraful următor. Starea iniţială în K
este Q0 iar stările acceptate sunt Q0 , Q3 , Q 4 , Q5 , Q6 , Q8 , Q9 , Q10 , Q11 ,
Q12 , Q13 şi Q14 (acei Q care conţin S sau X).
Input x
a b
Q0 = {S} Q7 Q15

Q1 = { A} Q1 Q3

Q 2 = {B} Q15 Q6

Q3 = { X } Q15 Q15

Q 4 = {S , A} Q7 Q3

Q5 = {S , B} Q7 Q6
S Q6 = {S , X } Q7 Q15
t
Q7 = { A, B} Q1 Q2
ă
Q8 = { A, X } Q1 Q3
r
Q 9 = {B , X } Q7 Q6
i
Q10 = {S , A, B} Q7 Q6

Q11 = {S , A, X } Q7 Q3

Q12 = {S , B, X } Q7 Q6

Q13 = { A, B, X } Q1 Q6

Q14 = {S , A, B, X } Q7 Q6

Q15 = ∅ Q15 Q15

Figura 2.16. Funcţia de tranziţie a maşinii K.

Considerăm acum, de exemplu, derivarea

S ⇒ aB ⇒ abS ⇒ abaA ⇒ abaaA ⇒ abaab

Mişcările maşinii nedeterministe K corespunzătoare acestei derivări sunt


S , abaab → B, baab → S , abaab → S , aab → A, ab → A, b → X , λ .

Pe de altă parte, maşina deterministă K va executa secvenţa de mişcări

Q0 , abaab → Q7 , baab → Q0 , abaab → Q6 , aab → Q7 , ab → Q1 , b → Q3 , λ


.

2.5. MINIMIZARE

Exemplele din paragrafele anterioare ne arată că chiar gramatici


simple conduc la maşini mari. Ar fi de mare ajutor o metodă de reducere
a mărimii maşinilor, dacă e posibil. Considerăm, de exemplu, MSF M 1
din figura 2.17. Stările Q3 şi Q4 pot fi combinate într-o singură stare T,
fără a schimba limbajul generat de M 1 . Rezultă o maşină echivalentă M 2
ilustrată în figura 2.18.

Figura 2.17. O maşină cu stări finite cu prea multe stări.


Orice input σ acceptat de M 1 este de asemenea acceptat de M 2 şi invers.
Maşina M 2 poate fi redusă mai mult combinând stările Q1 şi Q2 într-o
singură stare R. Se obţine o MSF M 3 ca în figura 2.19. Descrierea
limbajului generat de M 2 (deci şi de M 1 ) este acum evidentă: L( M 3 ) se
compune din toate şirurile de lungime patru, formate din simboluri de 0 şi
1, terminate în 0.

Figura 2.18. Eliminare de stări.

Figura 2.19. Maşină cu stări finite minimală.

Există un algoritm, care, dacă dată fiind o maşină cu stări finite


deterministă M 1 , va produce cea mai mică maşină cu stări finite M 2 astfel
încât L( M 1 ) = L( M 2 ) . Dedicăm acest paragraf descrierii acestui algoritm.
Începem cu a arăta cum se elimină dintr-o maşină aşa numitele stări
inaccesibile.

Definiţia 2.6. Fie M o maşină cu stări finite. Spunem că o stare Q


din M este inaccesibilă dacă nu există un şir de intrare σ astfel încât
*
Q0 , σ → Q, λ . Unde Q0 este starea iniţială din M.

Cu alte cuvinte, o stare Q din M este inaccesibilă dacă, începând cu


stare iniţială Q0 , maşina nu va ajunge niciodată în starea Q, indiferent de
input. De exemplu, stare Q1 a maşinii din figura 2.20. este inaccesibilă.

Figura 2.20. O maşină cu stări finite având o stare inaccesibilă.

Evident vom avea:

Teorema 2.5. Fie M 1 o maşină cu stări finite şi fie M 2 o maşină


obţinută din M1 prin eliminarea stărilor inaccesibile. Atunci
L( M 1 ) = L( M 2 ) .

Dată fiind o maşină M, toate stările sale inaccesibile pot fi găsite cu


următorul algoritm.
Algoritm 2.1. Stări inaccesibile ale unei maşini cu stări finite.
Input: O maşină cu stări finite M = {Q, Σ, Q0 , δ , F} .
Output: O mulţime ϑ de stări inaccesibile.

Mai întâi, mulţimea de stări accesibile A se construieşte astfel.


Formăm o secvenţă {A n } de mulţimi de stări din M conform regulilor:

1. A 0 = {Q0 } , A 0 se compune dintr-o singură stare Q0 – starea

iniţială din M.
2. Se presupunem A k deja construit pentru k ≥ 0 . Mulţimea
A k+1 se formează prin adăugarea la A k a stărilor din M

accesibile din A k printr-o singură mişcare,

A k = A k ∪ {Q : Pentru Qˆ din A k şi x din Σ, δ (Qˆ , x) = Q} .

3. Dacă A k = A k+1 , de exemplu, când nu sunt adăugate stări


noi la A k , ne oprim şi punem A = A k . În caz contrar ne
întoarcem la pasul 2.

Fiind un număr finit n de stări din M, acest proces se va termina în cel


mult n − 1 iteraţii. Mulţimea de stări inaccesibile ϑ se obţine din Q prin
eliminarea elementelor din A, ϑ = Q \ A (sunt eliminate din A elementele
mulţimii Q).
Figura 2.21. Eliminarea stărilor inaccesibile.

Exemplu 2.9. Fie M maşina dată prin diagrama de tranziţie din


figura 2.21. Atunci avem:

A 0 = {Q0 } – prin definiţie

A1 = {Q0 } ∪ {Q1 , Q2 } = {Q0 , Q1 , Q2 } , cu δ (Q0 , 0) = Q1 şi δ (Q0 , 1) = Q2

A 2 = A1 ∪ {Q4 } = {Q0 , Q1 , Q3 , Q4 } cu δ (Q2 , 0) = Q4

A 3 = A 2 – din A 2 nu se pot atinge stări noi

Astfel A = A 2 = {Q0 , Q1 , Q2 , Q3} şi ϑ = {Q3} este mulţime stărilor inaccesibile.


Starea Q3 poate fi eliminată din M.

Menţionăm că acest algoritm se poate aplica şi maşinilor


nedeterministe. De pildă, maşina din exemplul 2.8. are doar şase stări
accesibile. Verificarea o lăsăm ca exerciţiu. În continuare vom presupune
că fiecare maşină cu stări finite nu are stări inaccesibile şi ne concentrăm
asupra eliminării stărilor „structural redundante”. Procedeul folosit în
acest scop se bazează pe conceptul de congruenţă.

Definiţia 2.7. Fie M = {Q, Σ, Q0 , δ , F} o maşină deterministă cu stări

finite şi k ≥ 0 un întreg. Numim două stări Q şi Q̂ k-congruente dacă


următoarele sunt adevărate:

Fie σ un şir de intrare de lungime cel mult k şi presupunem că


* *
Q, σ → P, λ , Qˆ , σ → Pˆ , λ descriu mişcările din M cu input-ul

σ , începând cu stările Q şi Q̂ . Atunci sau P şi P̂ sunt acceptate

împreună, sau ele nu sunt acceptate împreună.

Dacă Q şi Q̂ sunt k-congruente, vom nota acesta prin Q ≡ k Qˆ . Dacă Q şi

Q̂ sunt k-congruente pentru toţi k = 0, 1, K , spunem că Q şi Q̂ sunt

congruente şi notăm Q ≡ Qˆ .

Înţelesul k-congruenţei este următorul. Presupunem că τ este şirul


de testat din L( M ) . Pornim maşina în configuraţia Q0 , τ ; M îşi continuă

mişcările până când ajunge în configuraţia Q, σ , unde σ este un şir de

lungime cel mult k. Dacă Q şi Q̂ sunt k-congruente putem schimba starea


din Q în Q̂ şi continuăm de aici (cu input-ul σ ), fără ca să se schimbe
rezultatul final: Dacă se porneşte cu configuraţia Q, σ , maşina se va

opri într-o stare acceptată, acest lucru este valabil şi când maşina a pornit
din configuraţia Qˆ , σ . Presupunem că Q şi Q̂ sunt k-congruente pentru

toţi k = 0, 1, K . Atunci putem combina Q şi Q̂ într-o singură stare – nu va


avea efect asupra mulţimii de şirului acceptate de M. Astfel, pentru a
minimiza o maşină cu stări finite M, trebuie să determinăm stările
congruente între ele. Din definiţie avem

1. Dacă Q1 ≡ k Qˆ 2 atunci Q2 ≡ k Qˆ1 . (simetric)

2. Pentru orice stare Q avem Q ≡ k Qˆ . (reflexiv)

3. Dacă Q1 ≡ k Qˆ 2 şi Q2 ≡ k Qˆ 3 atunci Q1 ≡ k Qˆ 3 . (tranzitiv)

Deci, relaţia ≡ k fiind simetrică, reflexivă şi tranzitivă, ea este o relaţie de


echivalenţă. Evident expresiile 1, 2 şi 3 de mai sus, vor rămâne adevărate
chiar dacă ≡ k se înlocuieşte cu ≡ , astfel, congruenţa ≡ este o relaţie de
echivalenţă pe stările din M. Problema minimizării unei maşini M constă,
în esenţă, în împărţirea stărilor din M în clase echivalente; oricare două
stări dintr-o clasă vor fi echivalente între ele, iar oricare două stări din
clase diferite nu vor fi echivalente între ele. Maşina minimizată va avea
ca stări aceste clase de echivalenţă. Se observă că acest procedeu
furnizează cea mai mic posibilă maşină echivalentă cu cea originală,
adică maşina cu cele mei puţine stări.

Înainte de a da un algoritm, avem nevoie de două leme.

Lema 2.1. Dacă două stări ale unei maşini sunt (k + 1) -congruente,
ele sunt şi k-congruente.

Demonstraţia rezultă imediat din definiţie.

Lema 2.2. Fie M = {Q, Σ, Q0 , δ , F} o maşină cu stări finite. Fie k ≥ 0


un întreg fixat şi G1 , G2 , K , Gn partiţia stărilor din M în clase de echivalenţe:
Două stări din fiecare clasă sunt k-congruente între ele şi două stări din
clase diferite nu sunt k-congruente între ele. Fie G una din aceste clase şi
Q1 , Q2 , K , Qm stările din G . Pentru fiecare simbol x ∈ Σ şi Q ∈G , fie

hk (Q, x) clasa Gi cu δ (Q, x) . Atunci stările Q şi Q̂ din G sunt


(k + 1) -congruente dacă şi numai dacă

hk (Q, x) = hk (Qˆ , x) pentru fiecare x ∈ Σ (2.14)

Demonstraţie. Presupunem Q şi Q̂ sunt două stări din aceeaşi


clasă G şi mai presupunem că (2.14) este adevărat. Vrem să arătăm că Q
şi Q̂ sunt (k + 1) -congruente, adică, dacă σ este un şir de lungime maximă
* *
k + 1 , cu Q, σ → P, λ şi Qˆ , σ → Pˆ , λ , atunci ori P şi P̂ sunt stări

acceptate, ori amândouă nu sunt stări acceptate. Dacă şirul σ este de


lungime maximă k, ne oprim, fiindcă conform ipotezei, Q şi Q̂ sunt în
aceeaşi clasă G de ≡ k -echivalenţă, deci, Q ≡ k Qˆ . Presupunem atunci că σ
are lungimea k + 1 , de exemplu, σ = xτ , unde x ∈ Σ şi τ este de lungime k.
Dar atunci

*
Q, σ = Q, xτ → Q1 , τ → P, λ

şi

*
Qˆ , σ = Qˆ , xτ → Qˆ1 , τ → Pˆ , λ
şi ambii Q1 şi Q̂1 aparţin aceleaşi clase G ' (deoarece (2.14) e valabilă, deci

hk (Q, x) = G ' = hk (Qˆ , x) ). Astfel Q1 ≡ k Qˆ1 şi τ având lungimea k, observăm că

P şi P̂ sunt amândoi acceptaţi sau neacceptaţi.


Reciproc, presupunem Q şi Q̂ sunt două stări (k + 1) -congruente;
vrem să arătăm că (2.14) este adevărată. Într-adevăr, dacă
hk (Q, x) ≠ hk (Qˆ , x) pentru x∈Σ, atunci δ (Q, x) = Q1 ∈ hk (Q, x) şi

δ (Qˆ , x) = Qˆ1 ∈ hk (Qˆ , x) , deci Q1 şi Q̂1 nu sunt k-congruente. Aceasta implică,

că pentru un şir oarecare σ , de lungime cel mult k, configuraţiile Q1 , σ

şi Qˆ1 , σ se vor „termina” diferit: una într-o stare acceptată iar cealaltă

într-una neacceptată. Acelaşi lucra este atunci adevărat şi pentru


configuraţiile Q, xσ şi Qˆ , xσ . Pe de altă parte, lungimea lui xσ este

k + 1 , ceea ce contrazice ipoteza că Q şi Q̂ sunt (k + 1) -congruente. Q.E.D.

Când k = 0 împărţirea stărilor în clase 0-congruente este simplă. Se


observă că două stări sunt 0-congruente dacă şi numai dacă fie că sunt
amândouă acceptate sau fie că amândouă sunt neacceptate. Astfel, pentru
k = 0 , există două clase de echivalenţă: G (0)1 – toate stările neacceptate şi

G (0) 2 – toate stările acceptate. Algoritmul de împărţire a stărilor în clase de

≡ - echivalenţe va opera în felul următor. Mai întâi se împart stările din M

în două grupuri G (0)1 şi G (0) 2 – clasele de echivalenţă pentru relaţia ≡0 (am


arătat adineauri ce sunt ele). Folosind lema 2.2., fiecare dintre aceştia sunt
împărţite în alte subgrupuri; partiţia rezultată formează clasa de
echivalenţă pentru ≡1 . Operaţia se repetă, până nu mai apar subdiviziuni.
Descrierea formală exactă a algoritmului este următoarea.
Algoritm 2.2. Maşină cu stări finite minimală.
Input: O maşină cu stări finite M = {Q, Σ, Q0 , δ , F} .
Output: O maşină cu stări finite K, cu cele mai puţine stări posibile,
astfel încât L( K ) = L( M ) .

I. Construire de stări din K. Stările din K vor fi clase de echivalenţă


a stărilor din M sub relaţia de echivalenţă ≡ . Aşadar, stările din K sunt
mulţimile de stări G1 , G2 , K , Gr din M astfel încât Q1 , Q2 să fie membrii din
acelaşi G dacă şi numai dacă Q1 ≡ Q2 . Aceste clase se construiesc în felul
următor.

1. Fie G (0)1 mulţimea stărilor neacceptate şi G (0) 2 mulţimea


tuturor stărilor acceptate din M.
2. Presupunem că mulţimile din M au fost împărţite în clase
de echivalenţe

G (k)1 , G (k) 2 , K , G (k) mk (2.15)

cu relaţia ≡ k . Pentru fiecare stare Q şi x ∈ Σ fie hk (Q, x) clasa


G (k) i care conţine δ (Q, x) . Se împarte fiecare mulţime G (k) i din

(2.15) astfel. Două stări Q şi Q̂ din G (k)i vor aparţine aceleaşi

clase dacă şi numai dacă hk (Q, x) = hk (Qˆ , x) , pentru fiecare x din


Σ . Fie partiţia de stări din M obţinută

G (k+1)1 , G (k+1) 2 , K , G (k+1) mk +1 (2.16)


3. Dacă mulţimile din (2.16) sunt identice cu cele din (2.15), ne
oprim. Am obţinut partiţionarea în clase de echivalenţă. Dacă în
(2.16) sunt mai multe clase decât în (2.15), ne întoarcem la
pasul 2.

II. K are acelaşi alfabetul de intrare ca şi M, adică mulţimea Σ .

III. Starea iniţială din K este clasa de echivalenţă care conţine


starea iniţială Q0 din M.

IV. Funcţia de tranziţie se defineşte pentru K astfel: Fie

G1 , G2 ,K , Gr (2.17)

stările din K. Există clase de echivalenţe pentru acel k pentru care clasele
de echivalenţă din (2.16) sunt identice cu cele din (2.15). Din construcţia
părţii I rezultă că dacă Q şi Q̂ sunt în aceeaşi Gi , atunci hk (Q, x) = hk (Qˆ , x) ,
oricare ar fi x ∈ Σ . Astfel funcţia

∆(G , x) = hk (Q, x) pentru oricare Q ∈ G

este bine definită, independent de Q. (Observăm că ∆(G , x) este o clasă de


echivalenţă, una din G -uri, deoarece hk (Q, x) este clasa de echivalenţă
care conţine δ (Q, x) .) Luăm funcţia ∆ ca funcţie de tranziţie pentru K.

V. O stare G este stare acceptată dacă şi numai dacă se compune


din stări acceptate din M.
Vom ilustra algoritmul 2.2. în exemplul următor.

Exemplu 2.10. Fie M maşina cu stări finite dată de diagrama din


figura 2.22. Clasa G1(0) (a stărilor neacceptate) este
{Q0 , Q1 , Q2 , Q3 , Q4 , Q6 , Q7 , Q9 } . Clasa (tuturor stărilor acceptate) G2 (0) este

{Q5 , Q8 } . Următoarea subdivizare se obţine cu ajutorul funcţiei

h0 (Q, x) = clasa Gi (0) care conţine δ (Q, x) .

Figura 2.22. Minimizarea unei maşini cu stări finite.

Astfel, pentru k = 1 clasa G1(0) se împarte în două subclase

G1(1) = {Q0 , Q2 } şi G2 (1) = { Q1 , Q3 , Q4 , Q6 , Q7 , Q9 } .

Clasa G2 (0) nu se împarte ( Q5 şi Q8 produc rânduri identice) şi devine G3(1) .


Continuarea împărţirii este redată în de tabelul din figura 2.24. Am omis
unele G -uri şi Q-uri, reţinând doar indicii relevanţi. ( G3(3) este reprezentat
ca 3 şi Q5 ca 5.) Partea superioară lui Pas #1 al tabelei din figura 2.24.
este identică cu tabelul figurii 2.23. În Pas 4# ( k = 3 ) nu sunt introduse
subclase noi, astfel, clasele de echivalenţă din M, deci stările din K, sunt
G1 = {Q0 } , G2 = {Q2 } , G3 = {Q1} , G4 = {Q3 , Q4 , Q6 , Q7 , Q9 } , G5 = {Q5 , Q8 } .

Starea iniţială din K este G1 şi starea finală este G5 . Funcţia de tranziţie ∆


este dată de funcţia h3 în tabelul din figura 2.24. De exemplu, ∆(G4 , a) = G4
deoarece h3 (Q3 , a) = h3 (Q4 , a) = h3 (Q6 , a) = h3 (Q7 , a) = h3 (Q9 , a) = G4 . În exact
acelaşi mod se obţine ∆(G5 , b) = G4 cu h3 (Q5 , b) = h3 (Q8 , b) = G4 . În final,
diagrama de tranziţie pentru K este dată în figura 2.25.

h0
G (0)
Q
h0 (Q, a ) h0 (Q, b)

Q0 G1(0) G2 (0)

Q1 G1(0) G1(0)

Q2 G1(0) G1(0)

Q3 G1(0) G1(0)
G1(0)
Q4 G1(0) G1(0)

Q6 G1(0) G1(0)

Q7 G1(0) G1(0)

Q9 G1(0) G1(0)

Q5 G1(0) G1(0)
(0)
G2
Q8 G1(0) G1(0)

Figura 2.23. Primul pas din algoritmul 2.2.


Rândurile pentru Q0 şi Q1 sunt distincte, deci Q0 şi Q1 vor aparţine
diferitor clase G (1) . Pentru Q2 şi Q3 ele sunt identice, deci aparţin aceleaşi
clase G (1) .

h0 h1 h2 h3
(0) (1) (2) (3)
G G G G
Q a b Q a b Q a b Q a b
0 1 2 0 2 3 0 2 4 1 0 3 5
1 1
1 1 1 2 2 3 2 3 4 2 2 4 5
2 1 2 1 2 1 2 1 3 1 3 1 4 2
3 1 1 3 2 2 3 3 3 3 4 4
1
4 1 1 4 2 2 4 3 3 4 4 4
2
6 1 1 6 2 2 3 6 3 3 4 6 4 4
7 1 1 7 2 2 7 3 3 7 4 4
9 1 1 9 2 2 9 3 3 9 4 4
5 1 1 5 2 2 5 3 3 5 4 4
2 3 4 5
8 1 1 8 2 2 8 3 3 8 4 4
Pas #1 Pas #2 Pas #3 Pas #4
k =0 k =1 k=2 k =3

Figura 2.24. Algoritmul 2.2. complet.

Figura 2.25. Maşină minimizată.


Încheiem acest paragraf prin a arăta că algoritmul 2.2. funcţionează
corect.

Teorema 2.6. Fie M şi K maşinile cu stări finite deterministe din


algoritmul 2.2. Atunci L( K ) = L( M ) . Mai mult, dacă K1 este o MSFD
astfel încât L( K1 ) = L( M ) atunci numărul de stări din K1 este cel puţin egal
cu numărul de stări din K.

Demonstraţie. Fie Q şi Q̂ două stări din M şi fie G şi Ĝ două stări


din K astfel încât Q ∈G şi Qˆ ∈Gˆ . Din construcţia lui K rezultă că pentru
oricare x ∈ Σ

Dacă δ (Q, x) = Qˆ atunci ∆(G , x) = Gˆ (2.18)

Fie acum σ = x1 x2 K x p un şir acceptat de M. Secvenţa de mişcări efectuate

de M la input-ul σ este

x1 x2 x3 xp
Q0 → Qi1 → Qi2 → L → Qi p (2.19)

unde Qi este stare acceptată în M. Fie Gi , Gi , K , Gi stările din K astfel


p 1 2 p

încât Qi ∈Gi . Din (2.18) rezultă că secvenţa de mişcări din K este


j j

x1 x2 x3 xp
G0 → Gi1 → Gi2 → L → Gi p (2.20)
Deoarece Qi ∈Gi , starea Gi este stare acceptată în K, deci σ ∈ L( K ) .
p p p

Reciproc, dacă σ nu este în L( M ) atunci starea Qi din (2.19) nu este


p

stare finală în M, şi din nou, deoarece Qi ∈Gi , starea Gi nu este stare


p p p

finală în K, deci σ ∉ L( K ). Ca urmare L( K ) = L( M ) .


Pentru a arăta că maşina K are minimul de stări, procedăm în felul
următor. Fie K1 o maşină cu stări finite deterministă cu mai puţine stări
decât K. Vom arăta că L( K1 ) ≠ L( M ) = L( K ) . Toate stările din M fiind
accesibile, şi stările din K vor fi de asemenea toate accesibile. Astfel,
*
pentru fiecare G din K există un şir σ = σ (G ) astfel încât G0 , σ → G , λ .

Fie P0 starea iniţială din K1 , şi considerăm mişcările din K1 la input-ul


σ (G ) pentru toate stările posibile G din K. Pentru fiecare astfel de G

maşină K1 se va opri într-o configuraţie P(G ), λ pentru o stare oarecare

P (G ) din K1 . Deoarece K1 are mai puţine stări decât K, vor exista două

stări diferite din K, fie ele G ' şi G '' , astfel încât P(G ' ) = P(G '' ) . Cu alte
cuvinte, există două şiruri diferite σ ' = σ (G ' ) şi σ '' = σ (G '' ) astfel încât

1. La input-ul σ ' şi σ '' maşina K1 se mişcă din P0 în aceeaşi stare


P.
2. La input-ul σ ' şi σ '' maşina K se mişcă din G0 în două stări
diferite G ' şi G '' .

Fie Q ' o stare din M conţinută în G ' şi fie Q '' o stare din M conţinută în
G '' . Având G ' ≠ G '' , stările Q ' şi Q '' nu sunt congruente. Deci pentru un

input τ , maşina M va trece din Q ' în Q şi din Q '' în Q unde una din

stările Q şi Q este acceptată iar cealaltă nu. Aceasta implică că unul din
şirurile σ 'τ şi σ ''τ este în L( M ) iar celălalt nu. Să vedem ce se întâmplă
când aceste şiruri sunt introduse în maşina K1 . La input-ul σ 'τ maşina K1

trece din configuraţia P0 , σ 'τ în P, τ . La fel, cu input-ul σ ''τ maşina K1

trece din P0 , σ ''τ în aceeaşi configuraţie P, τ iar apoi continuă până se

epuizează şirul τ . Aşadar, K1 trebuie să accepte fie ambele şiruri σ 'τ şi


σ ''τ fie să le respingă pe amândouă. Ca urmare L( K1 ) ≠ L( M ) , deoarece

prin construcţie, maşina L( M ) acceptă doar unul dintre aceste şiruri.


Q.E.D.

2.6. MAŞINI CU STĂRI FINITE BIDIRECŢIONALE

Există o variantă modificată a conceptului de maşină cu stări finite,


după cum vom vedea în continuare. Ne reamintim, că la definirea
automatelor finite a fost precizat faptul, că dacă maşina citeşte un simbol
x şi se află într-o stare Q, ea va trece în starea δ (Q, x) şi va deplasează
capul de citire cu un simbol spre dreapta. Presupunem acum că permitem
capului de citire să efectueze mişcări la dreapta şi la stânga sau deloc.
Astfel, dacă maşina se află în starea Q şi simbolul de intrare este x, ea
poate efectua următoarele:

1. Schimbă starea în Q ' şi mişcă capul de citire la dreapta.


2. Schimbă starea în Q ' şi mişcă capul de citire la stânga.
3. Schimbă starea în Q ' şi nu mişcă poziţia capului de citire.

Decizia luată se bazează pe starea curentă şi simbolul de intrare, şi este


independent de stările/input-urile precedente. Valoarea funcţiei de
tranziţie pentru aceste maşini va fi perechea:
δ (Q, x) = (Q ' , R) sau (Q ' , L) sau (Q ' , S )

Dacă δ (Q, x) = (Q ' , R) , maşina trece în starea Q ' şi mişcă capul de citire cu
un simbol la dreapta; când δ (Q, x) = (Q ' , L) , maşina trece în starea Q ' şi
mişcă capul de citire cu un simbol la stânga; când δ (Q, x) = (Q ' , S ) , capul
de citire nu se mişcă deloc şi simbolul de intrare x este recitit. Formal
avem:

Definiţia 2.8. O maşină cu stări finite deterministă bilaterală M se


compune din următoarele cinci obiecte:

1. O mulţime finită, nevidă Q = {Q0 , Q1 , K , Qn } . Elementele din Q se


numesc stări.
2. O mulţime finită, nevidă Σ = {a1 , a2 , K , an } de simboluri admise
în şirul de intrare. Mulţimea Σ se numeşte alfabet pentru M.
3. O stare desemnată Q0 ∈ Q , numită stare iniţială.
4. O funcţie de tranziţie δ (Q, x) definită pentru toate stările Q ∈ Q
şi toţi x ∈ Σ . Pentru fiecare Q ∈ Q şi x ∈ Σ valoarea δ (Q, x) este o
pereche (Q ' , Z ) , unde Q ' este altă stare din Q şi Z este unul din
simbolurile R, L sau S.
5. O mulţime nevidă F de stări din Q. Elementele lui F se numesc
stări finale sau acceptate.

O maşină cu stări finite de genul celei descrise mai sus va fi un cvintuplu


M = {Q, Σ, Q0 , δ , F} şi se notează MSF2D.
Exemplu 2.11. Fie M o MSF2D cu patru stări Q0 (starea iniţială),
Q1 , Q2 şi Q3 ; cu alfabetul de intrare Σ = {a, b, c} ; cu o stare finală Q3 ; şi cu

funcţia de tranziţie dată de tabelul din figura 2.26.

Input curent
a b C
S Q0 (Q0 , R) (Q1 , R) (Q2 , R)

t Q1 (Q0 , R) (Q3 , L) (Q1 , L)


ă Q2 (Q0 , R) (Q1 , R) (Q2 , S )
r
Q3 (Q0 , L) (Q3 , L) (Q0 , S )
i

Figura 2.26. O maşină cu stări finite deterministă bilaterală.

Pentru a facilita descrierea mişcărilor unei MSF2D avem nevoie de o


metodă de descriere a configuraţie maşinii în orice moment dat. Deoarece
capul de citire se poate deplasa la stânga cât şi la dreapta, trebuie să
cunoaştem conţinutul şirului din dreapta capului de citire, ca şi din
stânga. Deci, o configuraţie a unei MSF2D va fi un triplet σ , Q, τ , unde
σ este şirul de intrare din stânga capului de citire, Q este starea curentă şi
τ este şirul de intrare din dreapta capului de citire – presupunem că capul
de citire se află poziţionat pe primul simbol din τ . Întregul şir de intrare
este στ . σ şi τ pot fi şirul vid λ : Dacă σ = λ , şirul de intrare este pe
simbolul cel mai din stâng a şirului de intrare, iar τ = λ înseamnă că
întregul şir de intrare a fost citit. Figura 2.27. arată această configuraţie a
maşinii.
← Şir de intrare

Figura 2.27. O MSF2D în configuraţia a0 a1 K ak , Q, ak +1 K a p .

Mişcările posibile ale maşinii M sunt

 a1 K ak ak +1 , P, ak + 2 K a p dacă δ (Q, ak + 2 ) = ( P, R)


a0 a1 K ak , Q, ak +1 K a p →  a1 K ak −1 , P, ak K a p dacă δ (Q, ak +1 ) = ( P, L)

 a1 K ak , P, ak +1 K ak dacă δ (Q, ak +1 ) = ( P, S )

Maşina porneşte, ca de obicei, în configuraţia λ , Q0 , a1a2 K ak . Pot apărea


următoarele situaţii:

1. Maşina citeşte şirul de intrare σ în întregime şi ajunge în


configuraţia σ , Q, λ , unde Q este o stare oarecare. În acest caz spunem
că M s-a oprit. De pildă, maşina M din exemplul 2.11. va trece prin
următoarea secvenţă de mişcări având ca input σ = aabcac :
λ , Q0 , aabcac → a, Q0 , abcac → a, Q0 , bcac →

→ aab, Q1 , cac → aabc, Q2 , ac → aabca, Q0 , c → aabcac, Q2 , λ − se opreşte

2. Maşina ajunge în configuraţia λ , Q, a K şi δ (Q, a) = (Q ', L) ,


capul de citire citeşte cel mai din stânga simbol al şirul de intrare şi
instrucţiunile cer mutarea capului de citire la stânga. În acest caz vom
spune că maşina s-a blocat. De pildă, la input-ul σ = abbbca , maşina din
exemplul 2.11. va avea următoarea secvenţă de mişcare:

λ , Q0 , abbca → a, Q0 , bbca → ab, Q1 , bca →

→ a, Q3 , bbca → λ , Q3 , abbca → se suspendă

3. Maşina intră într-un ciclu infinit. De pildă, la input-ul


σ = abccab , mişcările maşinii M din exemplul 2.11. sunt:

λ , Q0 , abccab → a, Q0 , bccab → ab, Q1 , ccab →

→ abc, Q2 , cab → ab, Q1 , ccab − intră în ciclu

Definim limbajul acceptat sau generat de o MSF2D M ca fiind o mulţime


de şiruri σ pentru care maşina M, pornită în configuraţia λ , Q0 , σ , se va
opri în configuraţia σ , Q, λ , unde Q ∈ F . Formal avem

*
L( M ) = {σ ∈ Σ* | λ , Q0 , σ → σ , Q, λ , Q ∈ F}
Ca urmare, dacă M este maşina din exemplul 2.11, aabcac ∈ L( M ) , dar
abccab şi abbbca nu aparţin lui L( M ) . Maşinile cu stări finite obişnuite

pot fi văzute ca cazuri particulare ale maşinilor bidirecţionale:


δ (Q, a) ≠ (Q ', L) sau (Q ', S ) în acest caz. Este de aşteptat ca clasa

limbajelor generate de MSF2D să fie mai mare decât clasa generată de


MSF obişnuite. Surprinzător, acesta nu este cazul. Avem următoarea
teoremă:

Teorema 2.7. Fie M = {Q, Σ, Q0 , δ , F} o MSF2D. Atunci există o


MSF deterministă K astfel încât L( M ) = L( K ) .

Demonstraţie. Vom demonstra această teoremă sub ipoteza


suplimentară că maşina deplasează capul de citire ori la stânga ori la
dreapta, δ (Q, x) ≠ (Q ', S ) . Aceasta o face pentru simplificarea expresiei;
demonstraţia pe cazul general se bazează pe aceeaşi idee.
Fie Q0 , Q1 , K , Qn stările din M şi fie D un simbol nefolosit din M.
Pentru fiecare şir σ ∈ Σ definim două funcţii φσ (Q) şi ψ σ (Q, x) în felul
următor. Dacă Q este o stare, definim φσ (Q) ca fiind starea P, astfel încât
maşina M pornită în configuraţia λ , Q, σ , se va opri în configuraţia
σ , P, λ . Aceasta înseamnă că M va citi toate simbolurile din σ şi se

opreşte în starea P. Dacă nu există un astfel de P, avem φσ (Q) = D . Ceea


ce va avea loc dacă, de exemplu, maşina M pornită cu input-ul σ , va
trece într-o buclă infinită, sau dacă se blochează. De pildă, în maşina
exemplului 2.11. avem φcac (Q1 ) = Q2 deoarece

λ , Q1 , cac → c, Q2 , ac → ca, Q0 , c → cac, Q2 , λ − se opreşte


Pe de altă parte, φbca (Q1 ) = D fiindcă

λ , Q1 , bca → λ , Q3 , bca − se blochează

Formal avem φσ : Q → Q ∪ {D} dată prin

 *

φσ (Q) =  P dacă λ , Q , σ → σ , P, λ
 D dacă nu există un astfel de P

Funcţia ψ σ are două argumente – o starea Q şi un simbol x ∈ Σ şi se


defineşte astfel: Alegem ψ σ (Q, x) ca fiind starea P astfel încât maşina M,
pornită în configuraţia σ , Q, x va trece în configuraţia σ , P, x în aşa
mod încât să nu existe R astfel încât

* *
σ , Q, x → σ , R, x → σ , P , x

Cu alte cuvinte, ψ σ (Q, x) este definită a fi prima stare P astfel încât,


dacă M este pornită în configuraţia σ , Q, x , capul de citire a maşinii M
se mută la stânga şi rămâne în σ până când ajunge în configuraţia
σ , P, x . Dacă nu există o astfel de stare, punem ψ σ (Q, x) = D .

Referindu-ne la exemplul 2.11. avem ψ bca (Q3 , a ) = Q0 deoarece

bca, Q3 , a → bc, Q0 , aa → bca, Q0 , a

Formal, avem ψ σ : Q × Σ → Q ∪ {D} dată prin


 +

 P dacă σ , Q , x → σ , P, x , dar nu există R ≠ P


 * *
ψ σ (Q, x) =  astfel încât σ , Q, x → σ , R, x → σ , P, x
 D dacă nu există un astfel de P

+
În definiţia anterioară, notaţia σ , Q, x → σ , P , x înseamnă, că între
configuraţii, maşina execută un număr pozitiv de mişcări. Important de
reţinut despre funcţia ψ este: dacă ψ σ = (Q, x) = P , adică M porneşte în
configuraţia σ , Q, x , capul de citire se deplasează la dreapta şi rămâne în
σ până când se ajunge în configuraţia σ , P, x .

Observăm că există doar un număr finit de funcţii ψ şi φ , deoarece


mulţimile Q şi Σ sunt finite. Deci vor exista mai multe perechi σ 1 şi σ 2 în
Σ* astfel încât ψ σ1 (Q, x) = ψ σ 2 (Q, x) şi φσ1 (Q) = φσ 2 (Q) pentru orice Q ∈ Q şi

x ∈ Σ . Două astfel de şiruri se numesc echivalente şi notăm aceasta

σ 1 σ 2 . Evident, relaţia este o relaţie de echivalenţă. Deoarece există


un număr finit de funcţii ψ şi φ , avem şi un număr finit de clase de
echivalenţă ale acestei relaţii.
Relaţia de echivalenţă are în plus următoarea proprietate:
Presupunem σ 1 σ 2 . Atunci pentru oricare τ ,

σ 1τ ∈ L( M ) dacă şi numai dacă σ 2τ ∈ L( M ) (2.21)

Fie τ dat şi presupunem că σ 1τ ∈ L( M ) ; vream să demonstrăm că σ 2τ este


tot în L( M ) . Vom presupune τ ≠ λ , în caz contrar concluzia este evidentă.
Fie τ = xτ 1 şi considerăm mişcările maşinii M la input-ul σ 1 xτ 1 , în
particular, fie P1 starea din M când capul de citire ajunge prima dată la
*
simbolul x – primul simbol din τ : λ , Q0 , σ 1 xτ 1 → σ 1 , P1 , xτ 1 şi în timpul
tranziţie între aceste configuraţii capul de citire rămâne în σ 1 . Dar aceasta
înseamnă că P1 = φσ (Q0 ) , şi fiindcă şirurile σ 1 şi σ 2 sunt echivalente, P1
1

este de asemenea starea maşinii M când capul ei de citire ajunge prima


dată la x (pornind din configuraţia λ , Q0 , σ 2τ ). Astfel, la input-urile σ 1 xτ 1
şi σ 2 xτ 1 mişcările iniţiale ale maşinii M sunt

*
λ , Q0 , σ 1 xτ 1 → σ 1 , P1 , xτ 1
*
(2.22)
λ , Q0 , σ 2 xτ 1 → σ 2 , P1 , xτ 1

şi în cursul configuraţiilor intermediare, capul de citire rămâne în σ 1 ,


respectiv σ 2 . Fie P1 , P2 , K , Pk stările maşinii M corespunzătoare
momentelor consecutive când capul de citire punctează pe x – primul
simbol din τ . (Urmărim în continuare mişcările din M la input-ul σ 1τ ).
Cu alte cuvinte, fie P1 , P2 , K , Pk stări astfel încât

* * * *
σ 1 , P1 , xτ 1 → σ 1 , P2 , xτ 1 → L → σ 1 , Pk , xτ 1 →L (2.23)

unde mişcările din (2.23) sunt de felul următor

1. Înaintea ca configuraţia σ 1 , P1 , xτ 1 să fie ajunsă, capul maşinii


M punctează în interiorul şirului σ 1 .
2. Între configuraţiile σ 1 , Pj , xτ 1 şi σ 1 , Pj +1 , xτ 1 capul de citire

punctează ori numai în σ 1 ori numai în xτ 1 .


3. După configuraţia σ 1 , Pk , xτ 1 capul de citire este numai în xτ 1 .

Din definiţia funcţie ψ şi din faptul că σ 1 σ 2 rezultă, că mişcările


maşinii M la input-ul σ 2 şi configuraţia σ 2 , P1 , xτ 1 sunt

* * * *
σ 2 , P1 , xτ 2 → σ 2 , P2 , xτ 2 → L → σ 2 , Pk , xτ 2 →L (2.24)

Considerăm mişcările executate de M începând cu prima configuraţie din


(2.24). Dacă capul se deplasează la dreapta, mişcările vor fi identice cu
cele ale maşinii M pornite în prima configuraţie din (2.23). Aşadar, după
ce capul de citire se întoarce la x, M va fi în configuraţia σ 2 , P2 , xτ 1 .
Dacă, pe de altă parte, capul de citire se deplasează la stânga atunci,
deoarece P2 = ψ σ ( P1 , x) şi σ 2 este echivalent cu σ 1 , data următoare când
1

capul de citire întâlneşte x, M trece în starea P2 . Procedând la fel cu stările


P2 şi P3 în loc de P1 , P2 etc., observăm că (2.24) este valabil. După ce M

ajunge în ultima configuraţie din (2.24), procedează ca şi când ar începe


cu ultima configuraţie din (2.23); cu alte cuvinte, acceptă σ 2τ . Dat fiind
faptul că rolul lui σ 1 şi σ 2 , din această discuţie, a fost simetric, ajungem
la concluzia că (2.21) este adevărat.
În final, putem construi maşina K. Alfabetul de intrare este identic
cu alfabetul din M. Stările corespund claselor de echivalenţă a relaţiei .
Dacă σ este un şir oarecare din Σ* , atunci σ denotă clasa de echivalenţă
care-l conţine pe σ . Simbolul de start va fi λ – clasă de echivalenţă care
conţine şirul vid. Ca stări acceptate pentru K sunt luate acele clase de
echivalenţă în a căror componenţă intră doar şiruri din L( M ) . (Se arată
uşor că dacă σ 1 σ 2 atunci, ori σ 1 , σ 2 sunt în L( M ) , ori amândoi nu sunt
în L( M ) ). Funcţia de tranziţie ∆ din K se defineşte în modul următor:

∆(σ , x) = σ x (2.25)

Aceasta înseamnă că σ este o clasă de echivalenţă (o stare din K), şi x


este simbolul de intrare curent, atunci următoarea stare pentru K este
clasa de echivalenţă conţinând σ x . Evident, K este o maşină cu stări
finite deterministă, a cărei cap de citire se deplasează doar la dreapta.
Utilizând proprietatea (2.21), este uşor de arătat că L( M ) = L( K ) . Q.E.D.

PROBLEME

Construiţi pentru fiecare din problemele 1 – 9 o maşină cu stări finite


deterministă care acceptă limbajul dat.

1. Mulţimea şirurilor de 0-uri şi 1-uri de lungime cel mult 5.


2. Mulţimea de şiruri din {a, b}* având un număr par de b-uri.
3. Mulţimea de şiruri formate din a-uri şi b-uri având aa şi bb ca
subşiruri.
4. Limbajul tuturor constantelor întregi cu şi fără semn. Deci,
+345, -345 şi 345 aparţin toate limbajului.
5. Limbajul şirurilor peste {0, 1}* care nu conţin subşirul 0011.
6. Limbajul L ⊆ {a, b}* şirurilor cu număr par de a-uri şi impar de
b-uri.
7. Mulţimea şirurilor de 0-uri şi 1-uri care încep cu 000 şi nu mai
conţin şirul 000. Deci, 000 este în limbaj, dar 0000 nu.
8. Limbajul şirurilor formate din 0 şi 1 în care subşirul 001 apare
cel puţin de trei ori.
9. Mulţimea de şiruri din {a, b}* în care nici aa nici bb apar ca
subşir.
Construiţi pentru problemele 10 – 14 o maşină cu stări finite care acceptă
limbajul generat de gramatica indicată. Maşina nu trebuie să fie
deterministă.
10. S → aS | bS | b | λ
11. S → 0 A |1B , A → 0C |1A | 0 , B → 1B |1A |1 , C → 0 | 0 A
12. S → aA | aB , A → aA | bS , B → b | bA
13. S → aS | bB | λ , B → aA | b , A → aS | aB â
14. S → aS | bS | cA , A → cB , B → cC , C → aC | bC | λ
15. Construiţi o maşină cu stări finite deterministă care acceptă
fiecare din limbajele generate în problemele 10 – 14.
16. Pentru fiecare maşină din figura 2.28. construiţi o maşină
echivalentă deterministă.

Figura 2.28. Maşini cu stări finite nedeterministe.


17. Minimizaţi maşina cu stări finite a cărei funcţie de tranziţie este
dată în figura 2.16. (Întâi eliminaţi stările inaccesibile.)
18. Minimizaţi maşina cu stări finite din figura 2.29.
19. Completaţi demonstraţia teoremei 2.7. prin a arăta următoarele:
a. Dacă σ 1 σ 2 atunci sau σ 1 şi σ 2 sunt în L( M ) , sau
amândouă nu sunt în L( M ) .
b. Maşina K introdusă în demonstraţie este echivalentă cu
M.

Figura 2.29. Automate finite.

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