Lemma o vkládání

V teorii formálních jazyků je lemma o vkládání (pumping lemma) výrok, že každý jazyk z dané třídy jazyků může být „napumpován“: každé dostatečně dlouhé slovo v daném jazyce může být rozděleno na části, jejichž zopakováním lze získat opět nějaké slovo z jazyka. To znamená, že pokud pro danou třídu jazyků existuje lemma o vkládání, každý jazyk v této třídě, který není konečný, bude obsahovat nekonečně mnoho slov vyprodukovatelných jednoduchým pravidlem daným tímto lemmatem (v případě konečných jazyků lze onu „dostatečnou délku slova“ nastavit na více, než je délka nejdelšího slova v jazyce).

Dvě nejdůležitější lemmata o vkládání jsou lemmata pro regulární jazyky a pro bezkontextové jazyky.
Obě tato lemmata se využívají k důkazu skutečnosti, že jazyk neleží v dané třídě, nemohou být použity k důkazu toho, že jazyk v dané třídě leží. Lemma o vkládání je totiž podmínkou nutnou, nikoliv postačující.

Lemma o vkládání pro regulární jazyky 

Pokud je jazyk L regulární, existuje číslo p > 0 tak, že každé slovo w z L, pro které platí |w| ≥ p, lze zapsat ve tvaru w = xyz, kde pro slova x, y a z platí, že |xy| ≤ p, |y| > 0 a xyiz patří do L pro každé i≥0.

Důkaz 

Lemma o vkládání lze poměrně snadno dokázat přímo: je-li p větší nebo rovno počtu stavů, při zpracování dostatečně dlouhého slova se již automat musí nutně do nějakého stavu dostat alespoň dvakrát, tedy průchod v automatu je po nějaké smyčce – tu je možné buď zcela vypustit () nebo po ní naopak projít vícekrát (, neboť pokud bylo ještě před dokončením smyčky navštíveno více stavů než je celkový počet stavů, již dříve muselo při průchodu dojít ke smyčce a je možné pumpovat tu; , neboť smyčka není prázdná).

Pokud např. automatu znázorněnému na obrázku předložíme slovo abcd, automat projde stavem q1 dvakrát a přechody bc vytvořily smyčku. Tu můžeme zcela vypustit a stav q1 rovnou vpustit do stavu q3 (ad), nebo naopak po smyčce projít libovolněkrát (abcbcbcbcd).

Konečnost regulárních jazyků 

Lemma o vkládání lze také využít k algoritmickému rozhodování, zda je daný regulární jazyk konečný: stačí projít všechna slova délky n až 2n (kde n je počet stavů). Pokud existuje nějaké takové slovo u, , dle lemmatu jej jistě lze pumpovat (i při omezení n na počet stavů – viz důkaz lemmatu) a tak vytvořit nekonečně mnoho dalších slov. Pokud není žádné takové slovo nalezeno, je jazyk jistě konečný. Stačí přitom prohledat jen prostor slov, pro která : smyčka může mít délku nejvýše n (prochází-li všechny stavy), tedy pokud , dle pumping lemmatu je odstraněním smyčky nalezeno slovo dlouhé alespoň , které by však bylo zachyceno již dříve.

Lemma o vkládání pro bezkontextové jazyky 
Pokud je jazyk L bezkontextový, existuje číslo p > 0 tak, že každé slovo w z L, pro které platí |w| ≥ p, lze zapsat ve tvaru w = uvxyz, kde pro slova u, v, x, y a z platí, že |vxy| ≤ p, |vy| ≥ 1, a uvixyiz patří do L pro každé i ≥ 0.

Použití 

Lemma o vkládání pro bezkontextové jazyky může být použito k dokázání toho, že určitý jazyk NENÍ bezkontextový.

Lze ukázat, že jazyk L = {ajbjcj, j≥0} NENÍ bezkontextový.

	Předpokládejme, že L je bezkontextový
 	Podmínky:
	| vxy | ≤ p. To znamená, že prostřední část není příliš dlouhá.
	vy ≠ ε (prázdné). Protože v a y jsou pumpované úseky, tato podmínka říká, že alespoň jeden z řetězců, které pumpuje, musí být neprázdný.
	Pro všechna i ≥ 0, uvixyiz náleží L. To znamená, že dva řetězce v a y mohou být “pumpovány” libovolný počet krát, včetně 0, a výsledný řetězec bude stále náležet jazyku L.
	Jestliže w ∈ L kde | w | > p, pak z toho plyne, že w = uvxyz, kde | vxy | ≤ p
	Nyní si zvolíme hodnotu pro j takovou, která je větší než p.
	Pak, ať už se vxy v řetězci ajbjcj nachází kdekoliv, vxy nemůže obsahovat více než dvě různá písmena, protože nejpravější a je j+1 pozic vzdáleno od nejlevějšího c.
	Př.: Může se stát, že jsou to všechna áčka, všechna béčka, nebo všechna céčka, nebo to mohou být áčka a béčka, nebo to mohou být béčka a céčka.
	Řetězec vxy tedy nemůže obsahovat více než dvě různá písmena, ale podle lemma o vkládání zase také nemůže být úplně prázdný, tedy musí obsahovat alespoň jedno písmeno.
	Nyní můžeme začít „pumpovat“
	Protože uvxyz je v L, uv2xy2z musí být také v L. Protože v a y nemohou být obě současně prázdné, | uv2xy2z | >  | uvxyz |, museli jsme přidat nějaká písmena.
	Ale protože vy neobsahuje všechny tři různá písmena, nebylo možné přidat stejný počet nových exemplářů od všech písmen. Napumpovali jsme tedy od některého písmena více a popřeli jsme tím původní definici L. Tedy,  uv2xy2z nemůže náležet L.
	Došli jsme ke sporu. Tedy, původní předpoklad, že L je bezkontextový, je nepravdivý.  Q.E.D.

Externí odkazy 
 

Formální jazyky