Esercizi grammaticheEsercizi proprietà di chiusuraEsercizi pumping lemmaLinguaggi di programmazione

Esercizio svolto: tipo, grammatica, pumping lemma, L*

programmer

Esercizio svolto: tipo, grammatica, pumping lemma, L*

Dato il linguaggio

L = {an bn ck | n,k ∈ N}

stabilire il tipo e generare una grammatica G tale che L(G) = L*
Ricavato L*, stabilire il tipo di linguaggio tra L*·LB

LB = {an bm ck | n ≤ m ≤ k}

 

Iniziamo col ricavare la grammatica di L, quindi L(G) = L

G = (X, V, S, P)      X = {a,b,c}     V = {S,A,B}
P = {
S -> AB
A -> ε | aAb
B -> ε | cB
}

L è libero da contesto, quindi tipo 2, perché generato da una grammatica libera da contesto.
Verifichiamo che L possa essere un linguaggio regolare (tipo 3).

Per assurdo supponiamo L regolare, quindi per L vale il Pumping Lemma per i linguaggi regolari. Per il Pumping Lemma:

∃p ∈ N tale che ∀z ∈ L, |z| ≥ p allora z = uvw con
1) |uv| < p
2) |v| > 0
3) uvtw ∈ L, ∀t ≥ 0

Consideriamo z = apbp, z ∈ L  e |z| = p + p = 2p ≥ p quindi per il pumping lemma z = uvw

v può essere così composta:

  • di sole a: v =aj con 1 ≤ j ≤ p

z = uvw = ap-j aj bp

Consideriamo la stringa pompata uv2w
uv2w = ap-j (aj)2 bp = ap-j a2j bp = ap+j bp
uv2w ∉ L. Per assurdo L non è un linguaggio regolare, quindi è al massimo libero da contesto.

 

Adesso possiamo ricavare una grammatica L(G1) = L*

G1 = (X1, V1, S1, P1)      X1 = X = {a,b,c}       V1 = V ∪ S1 = {S1, S, A, B}
P1 = {
S1 -> ε | SS1
} ∪ P
P1 = {
S1 -> ε | SS1
S -> AB
A -> ε | aAb
B -> ε | cB
}

Quindi L* è di tipo 2 perché la classe dei linguaggi liberi da contesto è chiusa rispetto all’operazione di iterazione.

Adesso ci rimane stabilire il tipo di linguaggio tra L*·LB.

Iniziamo col ricavare la grammatica di LB, quindi L(G2) = LB

G2 = (X2, V2, S2, P2)      X2 = {a,b,c}      V2 = {S2,B,C,D,E}
P2 = {
S2 -> aS2BC | D
D -> BDC | E
EC -> CE
EB -> BE
CB -> BC
aB -> ab
bB -> bb
bC -> bc
cC -> cc
E -> ε | cE
}

Quindi LB è un linguaggio dipendente dal contesto (tipo 1) perché generato da una grammatica contestuale.
Verifichiamo che LB possa essere un linguaggio libero da contesto (tipo 2).

Supponiamo per assurdo che LB sia libero da contesto, quindi vale il pumping lemma per i linguaggi liberi da contesto. Per il pumping lemma:

∃p ∈ N, p dipendente solo da L, tale che se z ∈ L, |z| > p

allora

z = uvwxy con
1) |vwx| ≤ p
2) vx ≠ ɛ
3) uviwxiy ∈ L, ∀i ≥ 0
Consideriamo la parola: z = apbpcp
z ∈ LB, |z| = p+p+p = 3p > p quindi per il pumping lemma z = uvwxy

Per la 1) del Pumping Lemma si hanno le seguenti possibilità:

1) vwx è costituita da sole a: vwx = ak con 0<k≤p

2) vwx è costituita da sole b: vwx = bk con 0<k≤p

3) vwx è costituita da sole c: vwx = ck con 0<k≤p

4) vwx è a cavallo tra le a e le b: vwx = akby con 0<k+y≤p

5) vwx è a cavallo tra le b e le c: vwx = bkcy con 0<k+y≤p

vwx non può essere contemporaneamente a cavalo tra a,b e c perché sarebbe troppo lunga: |vwx| > p

Analizziamo ciascun caso:

1) Consideriamo la stringa pompata uv2wx2y
aggiungiamo almeno una a ed al più p  a

uv2wx2y = ar+t br cr con 0<t≤p

uv2wx2y ∉ LB

 

2) Consideriamo la stringa pompata uv2wx2y
aggiungiamo almeno una b ed al più p  b

uv2wx2y = ar br+t cr con 0<t≤p

uv2wx2y ∉ LB

 

3) Consideriamo la stringa pompata uv2wx2y
aggiungiamo almeno una c ed al più p  c

uv2wx2y = ar br cr+t con 0<t≤p

uv2wx2y ∉ LB

 

4) Per la 2) del Pumping Lemma si distinguono i seguenti casi:

  • 4a) v ≠ ɛ, x ≠ ɛ
  • 4b) v ≠ ɛ, x = ɛ
  • 4c) v = ɛ, x ≠ ɛ

 

4a) v ≠ ɛ, x ≠ ɛ allora v = ar e x = bt con 0<r+t≤p
consideriamo la stringa pompata uv2wx2y

uv2wx2y = ap+r bp+t cp

uv0wx0y ∉ LB

 

4b) v ≠ ɛ, x = ɛ allora v = ar con 0<r≤p
consideriamo la stringa pompata uv2wx2y

uv2wx2y = ar+p bp cp

uv2wx2y ∉ LB

 

4c) v = ɛ, x ≠ ɛ allora x = bt con 0<t≤p
consideriamo la stringa pompata uv2wx2y

uv2wx2y = ap bp+t cp

uv2wx2y ∉ LB

 

5) Per la 2) del Pumping Lemma si distinguono i seguenti casi:

  • 5a) v ≠ ɛ, x ≠ ɛ
  • 5b) v ≠ ɛ, x = ɛ
  • 5c) v = ɛ, x ≠ ɛ

 

5a) v ≠ ɛ, x ≠ ɛ allora v = br e x = ct con 0<r+t≤p
consideriamo la stringa spompata uv0wx0y

uv0wx0y = ap bp-r cp-t

uv0wx0y ∉ LB

 

5b) v ≠ ɛ, x = ɛ allora v = br con 0<r≤p
consideriamo la stringa pompata uv2wx2y

uv2wx2y = ap bp+r cp

uv2wx2y ∉ LB

 

5c) v = ɛ, x ≠ ɛ allora x = ct con 0<t≤p
consideriamo la stringa spompata uv0wx0y

uv0wx0y = ap bp cp-t

uv0wx0y ∉ LB

Analizzando tutti i casi la stinga spompata e pompata non appartiene ad LB.
Per assurdo ne consegue che LB non è libero da contesto.

L’ = L*·LB

L’ è un linguaggio dipendete dal contesto perché per il teorema delle proprietà di chiusura, la concatenazione di un linguaggio libero da contesto (L*) e un linguaggio dipendente da contesto (LB) genera un linguaggio dipendente da contesto (tipo 1).

/ 5
Grazie per aver votato!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *