Sunteți pe pagina 1din 7

LABORATOR NR 8

LEMA POMPĂRII.
PROBLEME REZOLVABILE ALGORITMIC PENTRU
LIMBAJE INDEPENDENTE DE CONTEXT.

1. Lema pompării pentru limbaje independente de context.

Fie L ∈ 3 un limbaj pe alfabetul Σ. Atunci există n ∈ N * astfel încât pentru

orice w ∈ L din w ≥ n , rezultă că w admite reprezentarea w = xuyvz unde :

a) uyv ≤ n
b) uv ≠ λ
c) xu i yv i z ∈ L pentru orice i ∈ N .
Lema pompării se foloseşte în aplicaţii pentru a demonstra că un limbaj nu
este de tip 2.
Aplicaţie. Demonstraţi că următoarele limbaje nu sunt de tip 3:
a) L1 = {a n | n = numar prim}
{
b) L2 = a n | n ∈ N
2
}
Soluţie.
a) Presupunem prin absurd că L1 ∈ 3 şi aplicăm lema pompării. Fie
w = a m ∈ L1 , m = nr prim, w ≥ n = constanta din lemă. Atunci w = xuyvz unde

x = a k1 , u = a k2 , y = a k3 , v = a k4 , z = a k5 şi k1 + k 2 + k 3 + k 4 + k 5 = m şi
m = nr prim . Secvenţele obţinute prin „pompare” sunt de forma

wi = xu i yv i z = a k1 a ik 2 a k3 a ik 4 a k5 = a k1 + ik 2 + k3 +ik 4 + k5

Pentru i = k1 + k 3 + k 5 se realizează descompunerea în factori


(k1 + k 3 + k 5 )(1 + k 2 + k 4 ) . Deoarece uv ≠ λ rezultă (1 + k 2 + k 4 ) > 1 şi
(k1 + k 3 + k 5 )(1 + k 2 + k 4 ) nu este număr prim. În concluzie am obţinut
contradicţie cu punctul c) din lemă. Presupunerea făcută este falsă şi L1 ∉ 3 .
b) Presupunem prin absurd că L2 ∈ 3 şi aplicăm lema pompării. Fie

w = a n ∈ L2 , w ≥ n = constanta din lemă. Atunci w = xuyvz unde x = a k1 , u = a k 2


2

, y = a k , v = a k , z = a k şi k1 + k 2 + k 3 + k 4 + k 5 = n 2 . Secvenţele obţinute prin


3 4 5

k + ik + k + ik + k
„pompare” sunt de forma wi = xu i yv i z = a a a a a = a
k ik k ik k 1 2
.
3 4 5 1 2 3 4 5

2
Pentru i = 2 avem wi = xu 2 yv 2 z = a k a 2 k a k a 2 k a k = a k + 2 k + k + 2 k + k = a n + k + k .
1 2 3 4 5 1 2 3 4 5 2 4

Deoarece uv ≠ λ rezultă (k 2 + k 4 ) > 0 şi uyv ≤ n implică (k 2 + k 4 ) ≤ n .


Au loc următoarele inegalităţi:
n 2 < n 2 + k 2 + k 4 ≤ n 2 + n < n 2 + 2n + 1 = (n + 1) 2 .

Cum între două pătrate perfecte consecutive nu poate exista un alt pătrat
perfect rezultă n 2 + k 2 + k 4 nu este pătrat perfect şi secvenţa xu i yv i z ∉ L2 ,
contradicţie cu c) din lemă. Presupunerea făcută este falsă şi L2 ∉ 3 .

Probleme rezolvabile algoritmic pentru 2

1. Problema mulţimii vide.


Are următorul enunţ: Fiind dată o gramatică G = (V N ,VT , S , P ) de tip 2
să se determine dacă L(G ) = φ .
⎧ *
*

Demonstraţie. Deoarece L (G ) = ⎨ w ∈ VT | ∃ S ⇒ w⎬ rezultă că S este un simbol
⎩ G ⎭

productiv. Pentru a rezolva problema mulţimii vide se aplică algoritmul


PROD pentru determinarea simbolurilor productive şi dacă S nu este
productiv atunci L(G ) = φ .
Algoritm pentru rezolvarea problemei mulţimii vide.
I: G = (V N ,VT , S , P ) de tip 2
O: „DA” dacă L(G ) = φ şi „NU” dacă L(G ) ≠ φ
P1. N 0 = {A ∈ V N | ∃ ( A → α ) ∈ P , α ∈ VT }
*

P2. i ← 0
P3. N i +1 = N i ∪ { A ∈ V N | ∃ ( A → α ) ∈ P , α ∈ ( N i ∪ VT ) * }
P4. Dacă N i +1 ≠ N i atunci i ← i + 1 şi mergi la pasul P3.
P5. Dacă S ∈ N i atunci scrie „NU” altfel scrie „DA”.
P6. STOP

Aplicaţii. Care dintre limbajele generate de următoarele gramatici este vid?


G1 = ({S , A, B, C }; {a, b}; S ; P ) G1 = ({S , A, B, C }; {0,1,2}; S ; P )
P : S → aA | bB P : S → ABC
A → BC | aCb A → 1B | 0C
B → BC | aC B → 2 AB | 0 B
C →b C → 1S | 1 | 2 A

Soluţie.
a) N 0 = {C} C → b
N 1 = N 0 ∪ {B, A} A → aCb B → aC

N 2 = N 1 ∪ {S } S → aA | bB

N3 = N2

S ∈ N 3 şi se afişează „NU” ( L(G ) ≠ φ )

b) N 0 = {C} C → 1
N 1 = N 0 ∪ {A} A → 0C

N 2 = N1

S ∉ N 2 şi se afişează „DA” ( L(G ) = φ )


2. Problema mulţimii infinite.
Are următorul enunţ: Fiind dată o gramatică G = (V N ,VT , S , P ) de tip 2
să se determine dacă L(G ) este infinit.
Demonstraţie. Deoarece pentru orice gramatică de tip 2 proprie există o
gramatică în forma normală Chomsky echivalentă cu ea, se poate considera
că G este în forma normală Chomsky. Se asociază gramaticii un graf orientat
construit astfel:
- nodurile grafului sunt neterminalele din gramatică
- dacă în gramatică există o producţie A → BC atunci în graf se
construiesc două arce orientate de la A la B şi de la B la C.
Problema mulţimii infinite se reduce la o problemă de teoria grafurilor. Dacă
graful orientat conţine cel puţin un drum închis atunci limbajul generat de
gramatică este infinit.

Aplicaţii. Care dintre limbajele generate de următoarele gramatici este


infinit?
G1 = ({S , A, B, C }; {0,1}; S ; P ) G1 = ({S , A, B, C }; {0,1,2}; S ; P )
P : S → AB | BC P : S → AB | CA
A → BC | 0 A → 1 | BC
B →1| B → AS | 0
C →1 C → BS | 2 | AC

Soluţie. a) Graful orientat asociat gramaticii G1 este reprezentat în figura 1:


Deoarece graful orientat nu conţine drumuri închise rezultă că limbajul
generat de gramatica G1 este finit.
b) Graful orientat asociat gramaticii G2 este reprezentat în figura 2:

Deoarece graful orientat conţine cel puţin un drum închis S,A,B,S


rezultă că limbajul generat de gramatica G2 este infinit.

3. Problema apartenenţei unei secvenţe la limbaj.


Are următorul enunţ: Fiind dată o gramatică G = (V N ,VT , S , P ) de tip 2

şi w ∈ VT * să se determine dacă w ∈ L(G ) .

Demonstraţie. Problema apartenenţei la limbaj se rezolvă utilizând


algoritmul Cocke-Younger-Kasami (CYK)

Algoritmul CYK
I: G = (V N ,VT , S , P ) în forma normală Chomsky şi w = a1 ...a n , n ≥ 1
O: Mesajul „DA” dacă w ∈ L(G ) şi „NU” în caz contrar
1. for i = 1, n do

1.1 Vi1 = {A ∈ V N | ( A → ai ) ∈ P}
2. for j = 2, n do

2.1 for i = 1, n − j + 1 do
begin
2.1.1 Vij = φ
2.1.2 for k = 1, j − 1 do
2.1.2.1 Vij = Vij ∪ { A ∈ V N | ∃( A → BC ) ∈ P, B ∈ Vik , C ∈ Vi + k , j − k }
end;
3. Dacă S ∈ V1n atunci tipăreşte „DA”, altfel tipăreşte „NU”

4. STOP

Aplicaţie. Să se determine dacă secvenţa w = a 4 b 2 aparţine limbajului


generat de gramatica:
G = ({S , A, B, C }, {a, b}S , P )
P : S → AB | CA
A→a
B → BC | AC
C → AB | b

Soluţie. Aplicând algoritmul CYK se obţin următoarele rezultate:


i 1 2 3 4 5 6
j a a a A b b
1 A A A A C C
2 φ φ φ B φ
3 φ φ S,C B
4 φ S S,C
5 φ B
6 S,C

Deoarece S ∈ V16 ⇒ w = a 4 b 2 ∈ L(G ) .


Teme propuse:
1. Implementaţi algoritmul care rezolvă problema mulţimii vide pentru

2 ( limbajul de programare la alegere).


2. Implementaţi algoritmul care rezolvă problema mulţimii infinite

pentru 2 ( limbajul de programare la alegere).


3. Implementaţi algoritmul care rezolvă problema apartenenţei la limbaj

pentru 2 ( limbajul de programare la alegere).

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