Linguaggi di programmazione – esercizio 2 pumping lemma
Dimostrare se questo linguaggio sia libero da contesto:
L = {ai bj ck | i,j,k ≥ 0, j = max(i,k)}
Supponiamo per assurdo che L 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 = arbrcr con r = p+1
z ∈ L, |z| = 3r > 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 ∉ L perché #(b) ≠ max(#a, #c)
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 ∉ L perché #(b) ≠ max(#a, #b)
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 ∉ L perché #(b) ≠ max(#a, #c)
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 = ak1 con 0<k1≤k e x = by1 con 0<y1≤y
consideriamo la stringa spompata uv0wx0y
uv0wx0y = ar-k1 br-y1 cr
uv0wx0y ∉ L perché #(b) ≠ max(#a, #c)
4b) v ≠ ɛ, x = ɛ allora v = ak1 con 0<k1≤k
consideriamo la stringa pompata uv2wx2y
uv2wx2y = ar+k1 br cr
uv2wx2y ∉ L perché #(b) ≠ max(#a, #c)
4c) v = ɛ, x ≠ ɛ allora x = by1 con 0<y1≤y
consideriamo la stringa pompata uv2wx2y
uv2wx2y = ar br cr+y1
uv2wx2y ∉ L perché #(b) ≠ max(#a, #c)
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 = bk1 con 0<k1≤k e x = by1 con 0<y1≤y
consideriamo la stringa spompata uv0wx0y
uv0wx0y = ar br-k1 cr-y1
uv0wx0y ∉ L perché #(b) ≠ max(#a, #b)
5b) v ≠ ɛ, x = ɛ allora v = bk1 con 0<k1≤k
consideriamo la stringa pompata uv2wx2y
uv2wx2y = ar br+k1 cr
uv2wx2y ∉ L perché #(b) ≠ max(#a, #c)
5c) v = ɛ, x ≠ ɛ allora x = cy1 con 0<y1≤y
consideriamo la stringa pompata uv2wx2y
uv2wx2y = ar br cr+y1
uv2wx2y ∉ L perché #(b) ≠ max(#a, #c)
Analizzando tutti i casi la stinga spompata e pompata non appartiene ad L.
Per assurdo ne consegue che L non è libero da contesto.