Documente Academic
Documente Profesional
Documente Cultură
Mulţimile regulate sunt foarte utilizate în cadrul operaţiei de descriere a limbajelor. Între
mulţimile regulate şi gramaticile liniare la dreapta există o strânsă legătură, demonstrată de
Chomsky şi Miller: există o echivalenţă între un limbaj generat de o gramatică liniară la
dreapta şi o mulţime regulată. Din acest motiv, ele se mai numesc şi limbaje regulate.
Pentru a simplifica utilizarea noţiunilor legate de mulţimi şi limbaje regulate, în mod uzual se
utilizează formalismul expresiile regulate, care a fost introduse pentru prima dată de Kleene.
Definiţia 2.1. Fie Σ un alfabet nevid. Clasa mulţimilor regulate peste Σ se notează cu µ(Σ) şi
este cea mai mică submulţime a mulţimii ℘(Σ*) care satisface următoarele relaţii:
a) Φ ∈ µ(Σ)
b) {ε} ∈ µ(Σ)
c) {a} ∈ µ(Σ), ∀a∈Σ
d) este închisă la operaţia de reuniune, concatenare şi închidere tranzitivă şi reflexivă;
adică, dacă P,Q∈µ(Σ), atunci:
1) P ∪ Q ∈ µ(Σ)
2) P · Q ∈ µ(Σ)
3) P* ∈ µ(Σ)
Observaţie. În cazul în care nu există confuzii, se poate renunţa la parantezele rotunde din
cadrul unei expresii regulate.
Reprezentarea mulţimilor regulate prin expresii regulate se face cu ajutorul unei funcţii de
interpretare, notată cu pentru simplitate cu L, prin care se asociază fiecărei expresii regulate o
mulţime regulată (un limbaj regulat). Astfel, o expresie regulată reprezintă o mulţime
regulată. Funcţia de interpretare este o apliacţie:
L: ρ(Σ) → µ(Σ),
definită astfel:
a) L(Φ) = Φ
b) L(ε) = {ε}
c) L(a) = {a}, ∀a∈Σ
d) dacă r, r1, r2 ∈ ρ(Σ), atunci:
L(r1 + r2)) = L(r1) ∪ L(r2)
L(r1r2)) = L(r1)L(r2)
L(r*) = (L(r))*
Exemple.
1) Expresia regulată 01 reprezintă mulţimea regulată {01}
2) Expresia regulată 0* reprezintă mulţimea regulată {0}*
3) Expresia regulată (0+1)* reprezintă mulţimea regulată {0, 1}*
4) Expresia regulată (0+1)*011 reprezintă mulţimea şirurilor de 0 şi 1 terminate cu
011
5) Expresia regulată (a+b)(a+b+0+1)* reprezintă mulţimea cuvintelor din
mulţimea {0, 1, a, b}* care încep cu a sau b.
Definiţia 2.3. Două expresii regulate, r1 şi r2 sunt egale şi se notează r1 = r2, dacă şi numai
dacă reprezintă aceeaşi mulţime regulată:
L(r1) = L(r2)
Pe baza acestei noţiuni, se pot defini câteva proprietăţi algebrice ale acestora.
Lema 2.1. Fie α şi β două expresii regulate. Următoarele relaţii sunt îndeplinite:
1) α+β = β+α (comutativitate pentru +)
2) α+(β+γ) = (α+β)+γ (asociativitate pentru +)
3) α+Φ = Φ+α = α (Φ este element neutru pentru +)
4) α+α = α (idempotenţă pentru +)
5) α(βγ) = (αβ)γ (asociativitate pentru ⋅)
6) αε = εα = α (ε este element unitate pentru ⋅)
7) αΦ = Φα = Φ (Φ este element unitate pentru ⋅)
8) (α+β)γ = αγ+βγ (distributivitatea lui + faţă de ⋅)
9) α(β+γ) = αβ+αγ (distributivitatea lui ⋅ faţă de +)
10) α* = αα*+ε
11) Φ* = ε
12) (α*)* = α*
Demonstraţie. Fie L1 şi L2 mulţimile regulate pe care expresiile α şi β le reprezintă. Atunci
expresiile α+β, αβ şi α* reprezintă mulţimile L1∪L2, L1∩L2 şi L1*. Iar relaţiile din cadrul
lemei se demnostrează prin demonstrarea relaţiilor corespunzătoare asociate mulţimilor
regulate.
Demonstrarea relaţiilor 1) ÷ 10) este imediată pe baza operaţiilor de reuniune,
intersecţie şi concatenare ale mulţimilor regulate:
L1∪L2 = L2∪L1
L1∪ (L2∪L3) = (L1∪L2) ∪L3
L1∪Φ = Φ∪L1 = L1
L1∪L1 = L1
L1∩ (L2∩L3) = (L1∩L2) ∩L3
L1∩{ε} = {ε}∩L1 = L1
L1∩Φ = Φ∩L1 = Φ
(L1∪L2) ∩L3 = L1∩L3∪L2∩L3
L1∩ (L2∪L3) = L1∩L2∪L1∩L3
L1* = L1L1*∪{ε}
Pentru demonstrarea relaţiei 11) se observă că:
L1(Φ*) = (L1(Φ))* = Φ* = ∪i≥0 (Φi) = Φ0 ∪ (∪i≥1(Φi)) = {ε} ∪ (∪i≥1(Φ)) = {ε} = L1(ε)
Pentru demonstrarea relaţiei 12) va trebui demonstrat că (L1*)* = L1*. Vom demonstra aceasta
prin dubla incluziune:
a) L1* ⊆ (L1*)*; Fie w∈ L1*. Atunci ∃k≥0 aşa încât w∈ L1k. Dar pentru L1k există următoarea
incluziune:
L1k = (L1k)1 ⊆ ∪i≥0(∪j≥0(L1j)i) ⊆ (L1*)*
b) (L1*)* ⊆ L1*; Fie w∈(L1*)*. Atunci w∈∪i≥0(∪j≥0(L1j)i) şi deci ∃k,l≥0 aşa încât w∈ (L1k)l.
Dar în acest caz:
(L1k)l = L1kl ⊆ ∪i≥0(L1i) = L1*
#
În continuare, atunci când nu se pot face confuzii, nu se va face distincţie între o expresie
regulată şi mulţimea regulată pe care o reprezintă (de exemplu, simbolul a reprezintă şi
mulţimea {a}).
În general, soluţia unei ecuaţii cu expresii regulate nu este unică. De exemplu, pentru ecuaţia
(2.1) din exemplul precedent, orice expresie de forma α*(β+γ) este soluţie, pentru orice
valoare γ, nu neapărat expresie regulată.
Există totuşi o situaţie în care soluţia α*β este unică: în cazul în care ε∉L(α).
Lema 2.2. (Regula lui Arden) Fie α, β expresii regulate, aşa încât ε∉L(α). Atunci ecuaţia 2.1
în nedeterminata X are o soluţia unică X = α*β.
Demonstraţie. Faptul că expresia regulată α*β este soluţie a ecuaţiei 2.1 s-a verificat anterior.
Să demonstrăm că ea este unică. Vom demonstra că întotdeauna când X = γ este o soluţie a
ecuaţiei, atunci L(γ) = L(α*β).
Deoarece L(αγ + β) = L(γ), rezultă că L(β) ⊆ L(γ), iar de aici următorul şir de relaţii:
L(αβ) ⊆ L(αγ) ⊆ L(γ),
L(α2β) ⊆ L(αγ)⊆ L(γ),
…
L(αkβ) ⊆ L(γ)
iar în general: L(α*β) ⊆ L(γ).
Pentru demonstrarea relaţiei inverse, să presupunem prin reducere la absurd contrariul:
L(γ) ⊈ L(α*β)
Rezultă că există un cuvânt w∈L(γ) aşa încât w∉L(α*β) şi fie w cel mai mic cuvânt cu
această proprietate. Atunci:
- deoarece w∉L(α*β)=L(α)*L(β)=L0(α)⋅L(β) ∪ ∪k≥1Lk(α)⋅L(β), rezultă că w∉L(β),
- deoarece L(γ) = L(αγ) ∪ L(β) şi w∉L(β), rezultă că w∈L(αγ)=L(α)L(γ).
Fie w = yx, unde y∈L(α), x∈L(γ). Deoarece ε∉L(α), rezultă că |w| > |x|. Dar, deoarece w a
fost ales ca fiind cel mai mic cuvânt w∈L(γ) şi w∉L(α*β), iar x∈L(γ), rezultă de aici că
x∈L(α*β).
Din această ultimă relaţie, rezultă că:
w = yx ∈ L(α)L(α*β) = L(αα*β) ⊆ L(α*β),
şi în concluzie, w ∈ L(α*β), ceea ce reprezintă o contradicţie cu presupunerea iniţială.
Rezultă că L(γ) ⊆ L(α*β), iar în final L(γ) = L(α*β). Dar aceasta înseamnă că γ=α*β
şi deci α*β este soluţia unică a ecuaţie.
#
Observaţie. Dacă ε∈L(α), atunci soluţia nu este unică şi se poate arăta simplu că orice
expresie regulată de forma α*(β+γ) este de asemenea o soluţie a ecuaţiei. Într-adevăr, dacă
se înlocuieşte X=α*(β+γ) în ecuaţia (2.1), rezultă următoarele relaţii:
α(α*(β+γ))+β = αα*β+β+αα*γ = αα*β+β+αα*γ = (αα*+ε)β+αα*γ = α*β+αα*γ
α(α*(β+γ))+β = α*β+αα*γ = α*β+(α+ε)α*γ
Ultima egalitate s-a bazat pe următoarea observaţie: dacă ε∈L(α), atunci L(α) = L(α)∪L(ε),
şi deci în termenii expresiilor regulate: α=α+ε. Revenind la relaţia anterioară şi utilizând
proprietăţile algebrice ale mulţimilor regulate (adică αα*+α* = α*), rezultă:
α(α*(β+γ))+β = α*β+(αα*+α*)γ = α*β+α*γ = α*(β+γ)
şi deci X=α*(β+γ) verifică ecuaţia (2.1).
În cazul în care o ecuaţie cu expresii regulate nu are soluţie unică, în mod uzual se caută o
soluţie minimă a ecuaţiei, cum este α*β din ecuaţia (2.1). O asemenea soluţie se numeşte
punct fix minimal al ecuaţiei.
Atât în cadrul mulţimilor regulate, cât şi al automatelor finite, în afară de ecuaţii, se utilizează
şi sisteme de ecuaţii cu expresii regulate. De exemplu:
(2.2) X = a1X + a2Y + a3
Y = b1X + b2Y + b3
Un asemenea sistem se poate rezolva prin metoda substituţiei. De exemplu, utilizând ecuaţia
precedentă (2.1), în care α este a1 şi β este (a2Y+a3), soluţia primei ecuaţii a sistemului se
scrie sub forma:
(2.3) X = a1*(a2Y+a3)
Înlocuind aceasta în a doua ecuaţie, se obţine:
Y = b1a1*(a2Y+a3) + b2Y + b3 = (b2 + b1a1*a2)Y + b3
Utilizând încă o dată ecuaţia (2.1), o soluţie a primei ecuaţii a sistemului (2.2) este:
Y = (b2 + b1a1*a2)*(a3 + a2b2*b3)
Înlocuind această soluţie în relaţia (2.3), se obţine următoarea soluţie a sistemului:
X = (a1 + a2b2*b1)* (a3 + a2b2*b3)
Y = (b2 + b1a1*a2)* (b3 + b1a2*a3)
Un sistem care are o formă asemănătoare cu sistemul (2.2) din exemplul precedent se numeşte
sistem în formă standard. Sistemele în formă standard sunt des utilizate deoarece permit
determinarea unei soluţii în mod asemănător metodei lui Gauss pentru sisteme liniare.
În definiţia anterioară, expresiile αij sunt coeficienţii sistemului. Dacă un coeficient αij = Φ,
atunci termenul αijXj nu apare în ecuaţia respectivă, iar dacă αij = ε, atunci termenul respectiv
se reduce la nedeterminata Xj.
Utilizând o metodă asemănătoare substituţiei lui Gauss, un sistem cu expresii regulate în
formă standard se poate rezolva succesiv începând cu prima ecuaţie a sistemului şi terminând
cu ultima. Ecuaţia de pe poziţia i se poate transforma utilizând relaţiile din lema 2.1 într-o
ecuaţie echivalentă de forma:
(2.5) Xi = αiXi + βi
unde termenul βi are forma:
(2.6) βi = bi0 + bi,i+1Xi+1 + … + binXn
iar coeficienţii bij sunt expresii regulate.
Algoritm 2.1. Rezolvarea unui sistem de ecuaţii cu expresii regulate în formă standard.
Se consideră un sistem de ecuaţii cu expresii regulate în formă standard specificat de definiţia
2.4.
Intrare:
- n: numărul de ecuaţii;
- α = (αij)i=1..n, j=0..n : coeficienţii ecuaţiilor de forma (2.4), care sunt expresii regulate peste
un alfabet Σ;
Ieşire:
- O mulţime de soluţii de forma: X = {X1=γ1, X2=γ2, …, Xn=γn}, unde γ1, …, γn sunt
expresii regulate peste Σ
Metodă:
procedure SolveRegularExpressionSystem(n, α; X)
for i=1 to n-1 do
* se transform ecuaţia a i-a în forma
dată de relaţiile (2.5)+(2.6):
Xi = αiXi + βi,
βi = bi0 + bi,i+1Xi+1 + … + binXn
for j=i+1 to n do
* în ecuaţia lui Xj se substituie Xi prin expresia
αi*βi
endfor
endfor
for i=n downto 2 do
// Ecuaţia lui Xi este de forma Xi = αiXi + βi
Xi ← αi*βi
for j=i-1 downto 1 do
* în expresiile bj = bj0 + bj,j+1Xj+1 + … + bjnXn se
substituie Xi prin expresiile αi*βi
endfor
endfor
end
După cum s-a precizat anterior, în general soluţia unei ecuaţii cu expresii regulate nu este
unică, aşa încât nici soluţia unui sistem de ecuaţii cu expresii regulate nu este unică. Deoarece
în algoritmul anterior s-a utilizat soluţia minimală a unei ecuaţii cu expresii regulate, soluţia
determinată de algoritm reprezintă de asemenea o soluţie minimală a sistemului.
Definiţia 2.5. Fie Q un sistem de ecuaţii cu expresii regulate peste un alfabet Σ, cu mulţimea
nedeterminatelor peste alfabetul ∆ şi f o aplicaţie a lui ∆ peste mulţimea limbajelor din Σ*:
f: ∆ →℘(Σ*)
(1) Funcţia f este o soluţie a lui Q, dacă, pentru oricare X∈∆, substituind pe X cu f(X) în
fiecare ecuaţie a sistemului, aceasta devine egalitate.
(2) Aplicaţia f este un punct fix minimal dacă f este o soluţie şi pentru orice altă soluţie g,
următoarea relaţie este îndeplinită:
f(X) ⊆ g(X), ∀X∈∆
Indiferent de numărul soluţiilor unui sistem de ecuaţii cu expresii regulate, punctul fix
minimal este unic.
Lema 2.3. Fiecare sistem standard Q de ecuaţii cu expresii regulate are un unic punct fix
minimal.
Demonstraţie. Pentru orice X∈∆, definim:
f(X) = {w | ∀g, soluţie a lui Q, w∈g(X)}
Rezultă imediat că f(X) este soluţie şi f(X) ⊆ g(X), pentru orice altă soluţie g, deci f este
punct fix minimal.
#
Se poate demonstra că algoritmul 2.1 determină corect punctul fix minimal al sistemului de
ecuaţii standard (2.4), pe baza definiţiei acestuia, a lemei 2.3, precum şi a observaţieie că
perechile de sisteme de ecuaţii înainte şi după execuţia fiecăreia din cele două instrucţiuni
for externe din algoritmul precedent sunt echivalente.
2.2 Muţimi regulate şi gramatici liniare la dreapta
Vom demonstra în acest paragraf o proprietate importantă legată de mulţimile regulate şi
gramaticile liniare la dreapta şi anume faptul că un limbaj este definit de o gramatică liniară la
dreapta dacă şi numai dacă el este o mulţime regulată.
Lema 2.4. Fie Σ un alfabet finit. Mulţimile Φ, {λ} şi {a}, pentru orice simbol a∈Σ sunt
limbaje liniare la dreapta.
Demonstraţie.
G = ({S}, Σ, Φ, S) este o gramatică liniară la dreapta pentru care L(G) = Φ
G = ({S}, Σ, {S→ε}, S) este o gramatică liniară la dreapta pentru care L(G) = {ε}
G = ({S}, Σ, {S→a}, S) este o gramatică liniară la dreapta pentru care L(G) = {a}
#
Lema 2.5. Dacă L1 şi L2 sunt limbaje liniare la dreapta, atunci şi limbajele L1∪L2, L1L2 şi L1*
sunt liniare la dreapta.
Demonstraţie. Deoarece L1 şi L2 sunt limbaje liniare la dreapta, atunci există două gramatici
liniare la dreapta,
G1 = (N1, Σ, P1, S1)
G2 = (N2, Σ, P2, S2)
aşa încât L1 = L(G1) şi L2 = L(G2). Putem presupune, fără a restrânge generalitatea, faptul că
mulţimile de simboluri neterminale N1 şi N2 sunt disjuncte, altfel simbolurile din cele două
mulţimi se pot redenumi.
a) Fie G3 gramatica liniară la dreapta următoare:
G3 = (N1∪N2∪{S3}, Σ, P1∪P2∪{S3→S1|S2}, S3)
unde S3 este un nou simbol neterminal, S3∉N1 şi S3∉N2.
Din definiţia gramaticii G3, se observă imediat că:
L(G3) = L(G1) ∪ L(G2)
pentru că fiecare derivare S3 ⇒G3+ w, este fie S1 ⇒G3+ w, fie S2 ⇒G3+ w. Însă G3 este
gramatică regulată la dreapta, deci limbajul L(G3) este un limbaj regulat la dreapta.
b) Fie G4 gramatica liniară la dreapta următoare:
G4 = (N1∪N2, Σ, P4, S1)
unde mulţimea producţiilor P4 este este definită astfel:
1) dacă producţia A→xB ∈ P1 , atunci A→xB ∈ P4
2) dacă A→x ∈ P1 , atunci A→xS2 ∈ P4
3) toate producţiile din P2 sunt şi în P4
Se observă că dacă există derivarea S1 ⇒G1+ w, atunci există şi derivarea S1 ⇒G4+ wS2. În
mod asemănător, dacă S2 ⇒G2+ x, atunci S2 ⇒G4+ x. Cu alte cuvinte, există incluziunea:
L(G1)L(G2) ⊆ L(G4)
Pentru demonstrarea incluziunii inverse, să presupunem derivarea S1 ⇒G4+ w. Deoarece în
G4 nu sunt producţii de forma A→x, care provin din G1, atunci, notând w=xy, derivarea
anterioară poate fi scrisă astfel:
S1 ⇒G4+ xS2 ⇒G4+ xy
cu observaţia că toate producţiile utilizate în derivarea S1 ⇒G4+ xS2 provin din regulile 1) şi
2) anterioare. Din acest motiv există S1 ⇒G1+ x, precum şi S2 ⇒G2+ y, adică:
L(G4) ⊆ L(G1)L(G2)
În concluzie, L(G4) = L(G1)L(G2), iar L(G4) este un limbaj liniar la dreapta.
c) Pentru ultima relaţie, fie gramatica:
G5 = (N1∪{S5}, Σ, P5, S5)
unde S5 ∉ N1, iar mulţimea producţiilor P5 este definită astfel:
1) dacă A→xB ∈ P1 , atunci A→xB ∈ P5
2) dacă A→x ∈ P1 , atunci ambele producţii A→xS2 ∈ P5, A→x ∈ P5
3) producţia S5 → S1 | ε ∈ P5
Demonstraţia ultimei relaţii, L(G5) = (L(G1))*, se bazează pe următorul raţionament: în
gramatica G5 există şirul de derivări:
S5 ⇒G5+ x1S5 ⇒G5+ x1x2S5 ⇒G5+ … ⇒G5+ x1x2…xn+1S5 ⇒G5+ x1x2…xn
dacă şi numai dacă în gramatica G1 există derivările:
S1 ⇒G1+ x1, S1 ⇒G1+ x2, … , S1 ⇒G1+ xn
#
Se poate demonstra acum teorema principală a acestui paragraf. Lemele 2.5 şi 2.6 sunt un
instrument preţios pentru aceasta, deoarece demonstrează faptul că un limbaj liniar la dreapta
poate fi obţinut în acelaşi mod ca şi o mulţime regulată, plecând de la limbajele elementare Φ,
{λ} şi {a} şi aplicând asupra acestora operaţiile de concatenare, reuniune şi închidere.
Teorema 2.1. Un limbaj este o mulţime regulată dacă şi numai dacă el este un limbaj liniar la
dreapta.
Demonstraţie.
a) Demonstrarea implicaţiei directe este imediată, utilizând lemele 2.5 şi 2.6. Fie L o mulţime
regulată. Atunci conform definiţiei mulţimilor regulate, există un număr n, astfel încât L se
obţine din mulţimile regulate Φ, {λ} şi {a}, pentru a∈Σ, aplicând de n ori într-o anumită
succesiune, una dintre operaţiile de de concatenare, reuniune şi închidere. Dar, conform lemei
2.5, mulţimile Φ, {λ} şi {a} sunt limbaje liniare la dreapta, iar conform lemei 2.6, după
fiecare aplicare a uneia dintre operaţiile respective, mulţimea rezultată este tot un limbaj liniar
la dreapta.
b) Demonstrarea implicaţiei inverse. Fie G = (N, Σ, P, S) o gramatică liniară la dreapta, cu
mulţimea simbolurilor neterminale N = {A1, A2, …, An}.
Pentru fiecare neterminal Ai, vom nota cu L(Ai) mulţimea cuvintelor (care conţin doar
simboluri din Σ) generate de Ai, iar în termenii expresiilor regulate, vom desemna această
mulţime tot cu simbolul Ai. Mulţimea L(Ai) se poate determina plecând de la toate producţiile
din P care au neterminalul Ai în partea stângă:
A → wl, l∈{1, …, k}
A → xiAj, j∈{1, …, m}, i∈{1, …, mj}
Rezultă că:
L(Ai) = ∪1≤l≤k(L(wl)) ∪ (∪1≤j≤m(∪1≤i≤m(L(xiAj)))) =
= ∪1≤l≤k{wl} ∪ (∪1≤j≤m(∪1≤i≤m(xiL(Aj))))
Plecând de la această relaţie, se poate scrie următoarea ecuaţie cu expresii regulate:
(2.9) Ai = αi0 + αi1A1 + … + αinAn , ∀i∈{1, 2, …, n}
unde:
αi0 = w1 + … + wk
αij = x1 + … + xmj
Termenii s-au completat folosind următoarele convenţii:
- αi0 = Φ, dacă k=0
- αij = Φ, dacă mj=0
Dar relaţiile (2.9) formează un sistem standard de ecuaţii cu expresii regulate cu
nedeterminatele A1, A2, …, An, iar conform lemei 2.3, acesta are un unic punct fix minimal.
Vom nota cu f acest punct fix minimal, iar f(Ai) reprezintă soluţia minimală a sistemului
pentru nedeterminata Ai, adică mulţimea tuturor cuvintelor din Σ* care se pot deriva din
neterminalul Ai.
Dar simbolul de start S∈N, iar limbajul L(G) generat de gramatica G este mulţimea
tuturor cuvintelor din Σ* care se pot deriva din S, adică L(G) = f(S). Deoarece f(S) este o
soluţie a sistemului (2.9) cu expresii regulate, el este o mulţime regulată şi deci L(G) este o
mulţime regulată.
#