Pumping lemma per i linguaggi context-free

Come per i linguaggi regolari, anche per quelli context-free esiste un pumping lemma, il quale può essere usato per dimostrare che determinati linguaggi non sono context-free.

Teorema: Sia $L$ un linguaggio context-free. Esiste una costante $n$ tale che, per ogni stringa $z \in L$ con $|z|\geq n$, esiste una scomposizione $z = uVwXy$ che soddisfa le seguenti proprietà:

  1. $|VwX| \leq n$
  2. $VX \neq \epsilon$, cioè almeno una tra le stringhe $V$ e $X$ deve contenere almeno un simbolo
  3. per ogni $i\geq 0$, $uV^i wX^i y\in L$.

Siccome la scelta di $n$ per un determinato linguaggio $L$ non è univoca, per semplificare il discorso si chiamerà constante di pumping $N$ o $N_L$ la più piccola $n$ per cui vale il lemma.

Esempio di applicazione

Esempio di applicazione: numeri primi

Proprietà di chiusura dei linguaggi context-free

Teorema: La classe dei linguaggi liberi dal contesto è chiusa rispetto alle seguenti operazioni:

Invece, a differenza dei linguaggi regolari, i linguaggi context-free non sono chiusi rispetto all’operazione di intersezione: se $L_1$ e $L_2$ sono CFL, non è garantito che anche $L_1 \cap L_2$ sia un CFL. Ad esempio:

L’intersezione di questi due linguaggi contiene le stringhe che hanno lo stesso numero di 0, 1, e 2,

$$ L_1\cap L_2 = \{0^n1^n2^n \ | \ n\geq 1\} $$