(definice, vlastnosti, způsoby jejich reprezentace, konstrukce bezkontextové gramatiky a zásobníkového automatu, normální formy bezkontextových gramatik, použití lematu o vkládání pro bezkontextové jazyky, uzávěrové vlastnosti bezkontextových jazyků)
Jazyk je bezkontextový, pokud existuje bezkontextová gramatika taková, že .1) Bezkontextová gramatika (CFG) je čtveřice , kde:
Současně třída jazyků rozpoznávaných zásobníkovými automaty je právě třída bezkontextových jazyků. Tj. jazyk je bezkontextový, pokud je akceptován nějakým zásobníkovým automatem (existuje zásobníkový automat , takový, že ).
Definici zásobníkového automatu je možné nalézt v otázce AP11,IN11 Zásobníkové automaty
Bezkontextové jazyky lze reprezentovat:
Neformálně řečeno, rozšířený zásobníkový automat „vidí“ hlouběji do zásobníku – tj. čte 0–n vrchních symbolů.
Konstrukce zásobníkových automatů jsou popsány v otázce AP11,IN11 Zásobníkové automaty.
Každou bezkontextovou gramatiku, která reprezentuje neprázdný bezkontextový jazyk, lze dále upravit do tzv. kanonických tvarů - lépe se s nimi pracuje, jsou přehlednější, vyžadují je některé algoritmy atd. Kanonické tvary bezkontextových gramatik jsou následující:
Definice 3.7
Nepoužitelnost typu I.: Neexistuje terminální řetěz takový, že .
Nepoužitelnost typu II.: Neexistují řetězy takové, že .
Definice 3.13
Jednoduchým pravidlem nazýváme každé pravidlo tvaru , kde .
Definice 3.17 a Věta 3.18
Definice 3.28
Definice 3.19
Každý bezkontextový jazyk lze generovat bezkontextovou gramatikou v Chomského normální formě. Algoritmus transformace do CNF lze nalézt ve skriptech Automaty a gramatiky, strana 67. Ve zkratce algoritmus funguje tak, že pravé strany délky větší než 2 nahradí novými neterminály, a tak se tato pravá strana zkrátí. Například pravidlo X → ABC se změní na pravidla X → A<BC>, <BC> → BC (<BC> je nový neterminál). Pro pravé strany délky 2, které se skládají z terminálu a neterminálu nahradí terminál novým neterminálem. Např. X → aC se změní na X → <a>C, <a> → a.
Definice 3.33
Každý bezkontextový jazyk lze generovat bezkontextovou gramatikou v Greibachové normální formě. Velmi zhruba naznačený postup je následující: Pokud je prázdný, pak jej definujeme jako jediné pravidlo (). Pokud je neprázdný, odstraníme levou rekurzi a převedeme do GNF. Algoritmus transformace do GNF lze nalézt ve skriptech Automaty a gramatiky, strana 73,74.
Věta 3.24
Pokud by to někdo chtěl čistě matematicky pro „lehčí“ zapamatování:
Lemma o vkládání je vlastně ve tvaru implikace. Její kontrapositivní formu lze použít k důkazu, že nějaký jazyk není CFL. Stačí ukázat platnost následujícího tvrzení:
Pro libovolnou konstantu existuje slovo , takové, že pro všechna slova , , , , splňující: , a existuje takové , že .
Příklad
Pro libovolnou konstantu existuje slovo : Zvolíme slovo jako libovolné, pro důkaz vhodné, slovo z jazyka - . Dále pro každé libovolné rozdělení slova splňující následující podmínky: musí existovat takové, že .
Nyní musíme takové nalézt. Položme tedy a ověříme, že rozebráním jednotlivých případů:
Třída bezkontextových jazyků je uzavřena vzhledem k operacím:
Třída bezkontextových jazyků není uzavřena vzhledem k operacím:
Pro následující případy uvažujme:
je generován CFG , je generován CFG a bez újmy na obecnosti budeme předpokládat .
Definujme , kde je nový symbol a
Jazyk je generován gramatikou .
Definujme , kde je nový symbol a
Jazyk je generován gramatikou .
Definujme , kde je nový symbol a
Jazyk je generován gramatikou .
Definujme , kde je nový symbol a
Jazyk je generován gramatikou .
Kdyby byla třída bezkontextových jazyků uzavřena vzhledem k operaci průnik, pak i by musel být bezkontextový, což však není.
Neuzavřenost vůči doplňku plyne z uzavřenosti třídy bezkontextových jazyků vzhledem k operaci sjednocení, neuzavřenosti na průnik a De Morganových pravidel:
Pro třídu bezkontextových jazyků jsou rozhodnutelné následující vlastnosti:
Lingvista Noam Chomsky rozdělil gramatiky do čtyř skupin (typů) na základě různých omezení na tvar pravidel a podle jejich popisné síly.
Chomského hierarchie rozlišuje tyto čtyři (základní) typy gramatik - viz Regulární jazyky - poznámka
FI:IB005 Formální jazyky a automaty I prof. RNDr. Mojmír Křetínský, CSc.
FI:IB102 Automaty a gramatiky RNDr. Jan Strejček, Ph.D.
Honza Palas, hotovo
Je potřeba ještě zapracovat poznámky od Jitky Pospíšilové.
Diskuze
Opravil jsem chybu v sekci Průnik a doplněk – ty dva jazyky co tam byly předtím to moc neilustrovaly, protože byly totožné :)
Nějak nechápu jak ze z a^n b^n c^m a a^m b^n c^m dostane průnikem a^n b^n c^n ? Je to chyba na mém přijímači? Pokud ano tak prosím zdůvodnění
Aby to bylo v a^n b^n c^m, musí to mít stejný počet a jako b. Aby to bylo v tom druhém, musí to mít stejný počet a a c. Aby to bylo v průniku, musí to mít stejný počet a a b && stejný počet a a c. Z tranzitivity relace „stejný počet“ plyne, že tam musí být všech písmen stejně.
Pár drobností:
Pár věcí, které se mi prohnaly hlavou při učení, prosím někoho o upřesnění/potvrzení ať pak neplácám u zkoušky kraviny:
Stranu XX jsem dopsal, stejně tak jako odkaz na skripta, trochu jsem upravil definici rekursivnosti jazyka a přidal čistě matematickou definici pumping pro všechny všechny, které nebaví psát.
U GNF je ve skripetch poznámka, že se jedná o absenci epsilon pravidel ve smyslu definice(3.7), takže i v GNF imho může být S → epsilon, totéž u CNF, takže jsem to upravil.
Ahoj, omlouvám se, že jsem nereagoval na připomínky, byl jsem týden ve Finsku bez internetu. Nicméně na svoji „obranu“ uvedu to, že já jsem otázku neoznačil za hotovou (zřejmě to udělal někdo za mě) - některé věci jsem měl v plánu dodělat (např. odkazy na literaturu, strana XX :), atd. )
Takže teď zareaguji pouze na aktuální připomínky:
- v problému konečnosti nevím, jaký symbol máš na mysli. Pokud je tím symbol absolutní hodnoty,tak znamená délku slova
- symboly jako alfa a beta atd. se používají pro neterminály sjednocené s terminály - doplním
- a neodpustím si jedno rýpnutí: Snad tohle není bakalářka, abych musel každý pojem před použitím definovat, ne? :) Jestli někdo neví, co znamená PDA u otázky o týkající se také zásobníkových automatů, tak nevim, nevim… :) Vždyť se tyhle teoretické otázky snad nedají naučit (pochopit) jen z toho, co je vypíchnuto tedy na wiki? Pletu se nebo jsem v menšině, když se učím i ze skript/slidů?
Jinak zbylé připomínky zapracuji co nejdříve.
heh…len pomocou wiki isto nie ..ako som zvedavy co budu naozaj vyzadovat pri ustnych a akou formou sa to teda ma clovek ucit(opakovat), ono kym si clovek spomenie ako funguje P.L. pre CFL alebo nejake tie algoritmy, tak to vie zabrat cas a zas naucit sa len cisto formulku mi potom prestava davat vyznam naco sa to vobec ucim (basnicky)..a ked to zase chces zopaknut aby si vobec vedel pri kazdej otazke o com tocis, tak mi pridu tie niektore otazky velmo obsiahle..(to fakt nestiham absorbovat..nieto este mysliet akou formou prezentovat otazku)..
V popise algoritmu převodu CFG do Chomského normální formy je místo správného _neterminálem_ použito _terminálem_. (Někdo z registrovaných to pls opravte, ať to někoho nezmate..)
„Pro pravé strany délky 2, které se skládají z terminálu a neterminálu nahradí terminál novým _terminálem_. Např. X → aC se změní na X → <a>C, <a> → a.“
Done..
Opravil jsem ten matematický zápis PL. Teď jsem si všimnul, že ve skriptech mají něco podobného, jako tam bylo předtím. Ono záleží na tom, jak se přesně ty kvantifikátory a ty čárky v tom zápise interpretují. Nejlepší by asi bylo to napsat podle opravdové syntaxe predikátové logiky.