Last Modified: 18.5.2022
zápočtové písemky, odkazy, cvičení 1, cvičení 2, cvičení 3, cvičení 4, cvičení 5, cvičení 6, cvičení 7, cvičení 8, cvičení 9, cvičení 10, cvičení 11, cvičení 12, cvičení 13, cvičení 14
Cvičení by měla současně probíhat přes zoom, uvidíme, jak bude fungovat technika. Včas byste měli dostat e-mailem odkaz na google doc. V něm budou (GDPR) odkazy na sdílená videa. Pokud by k tomu z jakéhokoli důvodu nedošlo, kontaktujte mne mailem jmeno.prijmeni@mff.cuni.cz. V google doc by měly být odkazy na zoom i virtuální tabuli udržovány.
Zápočet je udělován za zápočtové písemky, které se konají na 3. a 2. hodině od konce semestru. (Snad se podaří tyto termíny neprošvihnout s ohledem na rektorské, děkanské dny a různé další dny volna). Na písemkách jsou zadávány 4 příklady z nichž je často jeden velmi složitý. Pokud student bez chyby vyřeší dva příklady z písemky, má zajištěn zápočet. Nepodceňujte to, procento úspěšných studentů na první písemce bývá malé.
Příklady zápočtových písemek z daleké minulosti: Podotýkám, že požadované konečné automaty byly tak malé, že dobře nakreslený graf byl přehlednější než tabulka. Ve vzorových řešeních jsou uvedeny jen tabulky (kreslení na papír je mnohem snazší než v editoru). Schválně, jestli objevíte neznámou chybu.
7.5.2003 E3 10:40-12:10 zadání řešení
12.5.2003 M4 12:20-13:50 zadání řešení (O opravitelné chybě v redukci 1) víme.)
12.5.2003 M4 14:00-15:30 zadání řešení
19.5.2003 M4 12:20-13:50 zadání řešení
19.5.2003 M4 14:00-15:30 zadání řešení
21.5.2003 E3 10:40-12:10 zadání řešení
4.5.2004 E3/E4 zadání řešení
18.5.2005 E1/E2 zadání řešení
Redukci automatu jsme následně použili na jednoduchém nekonečném automatu (trie přijímaných slov nebylo konečné) a redukovaný automat vyšel konečný. Výsledný rozklad $\sim_\infty$ byla pravá kongruence s konečným počtem tříd ekvivalence. Což tak trochu z Nerodovy věty dělá prázdné tvrzení $\dots$ pokud redukovaný automat daného jazyka má konečný počet stavů, tak je jazyk rozpoznávaný automatem s konečným počtem stavů. Taky jsme si ukázali redukovaný nekonečný automat pro $0^n1^n$ (zkontrolovali jsme (měli jsme), že je redukovaný), takže pro $0^n1^n$ konečný automat neexistuje.
Pak jsme dokázali, že deterministický 4 stavový automat přijímající $a^5$ přijímá i $a^{5+12}$ (odvodili jsme co máme dokazovat). Následně jsme u dvou třístavových automatů slovně popisovali přijímaný jazyk. U prvního z nich jsme doplnili komentáře/invarianty a zkontrolovali korektnost našeho tvrzení. U druhého jsme komentáře/invarianty nedoplňovali, necháme si to na později (na Kleeneho větu).
Na druhém cvičení jsme si ještě stihli nakreslit automat pro game v Tenisu (a podařilo se mi při tom zmínit Moore a Mealy stroje) a schéma automatu pro set v tenisu bez tiebreaku. Na příští hodině se budeme věnovat jazykovým operacím a tomu, zda jsme schopni z konečných automatů pro jednotlivé jazyky vytvořit konečný automat pro jazyk vzniklý danou jazykovou operací (takže jsou jazyky konečných automatů uzavřené na danou jazykovou operaci).
Na první verzi cvičení jsme kvůli substituci řešili tenisový automat. Nezdůraznil jsem, že u substituce potřebujeme, aby jazyky na něž se zobrazují jednotlivá písmenka byly rozpoznávány konečnými automaty. Ve výsledku jsme ověřili, že model, kde na hranách grafu jsou libovolná slova je výpočetně ekvivalentní konečným automatům.
Na druhé verzi cvičení jsme stihli probrat i inverzní homomorfismus a podtrhávací pumping lemma a zadat s ním spojený dlouhodobý domácí úkol.
Když jsme se zbavovali $\lambda$, nevěnovali jsme se případu, kdy na sebe navazuje více $\lambda$ (či dokonce máme cyklus $\lambda$). Možným řešením je nejprve „obarvit„ $\lambda$, pro něž jsme udělali náhradní šipky. $\lambda$ mohou vznikat, ale pro každou dvojici vrcholů $\lambda$ obarvíme nejvýš jednou (nepřidáváme hrany, které již existují), tedy celé obarvování bude trvat konečný počet kroků (množina vrcholů se nemění). Ve chvíli, kdy neexistuje neobarvená $\lambda$, můžeme všechy obarvené odstranit a skončit (alternativou je postupovat podle topologického uspořádání silně souvislých komponent grafu tvořeného hranami s $\lambda$).
Kartézský součin nemusíme dělat z deterministických automatů, ale pro negaci jazyka je nedeterministický automat nepoužitelný (takže při rozdílu kde potřebujeme negovat $\dots$).
Na první verzi cviření jsme dělali pumping lemma (včetně podtrhávacího lemma a zadání dlouhodobého domácího úkolu). Následně jsme si připomněli substituci a homomorfismus. Zakončili jsme to mikroprogramováním inverzního homomorfismu.
Na obou verzích cvičení jsme ještě chvíli pracovali s nestandardními jazykovými konstrukcemi.
Pak jsme si povídali o regulárních výrazech a jim odpovídajících jazycích. Zkonstatovali jsme, že naše jazykové konstrukce (ty nejzákladnější) dokáží zkonstruovat konečný automat pro každý regulární výraz.
Na závěr jsme si připomněli Floyd-Warshal algoritmus na hledání všech sledů. Tedy to, že jazyk každého konečného automatu odpovídá regulárnímu výrazu.
Na druhé verzi cvičení jsme měli dost času, abychom pro oblíbený konečný automat zjistili FW algoritmem regulární výraz popisující jeho jazyk. Měli jsme dokonce dost času na to, abychom postup zopakovali v optimalizované variantě a výsledný výraz nejen, že jsme spočítali mnohem rychleji, ale vyšel i výrazně jednodušší. (To že stejnému jazyku odpovídá více regulárních výrazů až tak překvapivé není. Naštěstí tomu vždy odpovídá jediný normalizovaný konečný automat.)
Na první verzi cvičení jsme dodělávali konstrukci regulárního výrazu na základě vybraného automatu a získali jsme zkušenost s optimalizací Floyd Warshalova algoritmu pro tyto účely.
Na obou cvičeních jsme se krátce věnovali Moore a Mealy strojům a déle věnovali dvoucestným automatům. Prošli jsme si důkaz s přechodovými posloupnostmi. Pak jsem zadal dlouhodobý domácí úkol týkající se dvoucestných automatů s kamínkem. To byla motivace k důkazu s prefixovými funkcemi. Nakonec jsme se věnovali důkazu se sufixovými funkcemi, ale stihli jsme jej dokončit jen na druhé verzi cvičení.
Na druhé verzi cvičení jsme ještě stihli důkaz ekvivalence tříd jazyků generovaných $L_3$ gramatikami a jazyků rozpoznávaných konečnými automaty.
Na obou verzích cvičení jsme se věnovali gramatikám, speciálně bezkontextovým, odvodili jsme si Chomskiho normální formu, pumping lemma, podtrhávací pumping lemma a aplikovali jsme podtrhávací lemma na dokázání nenáležení nějakého konkrétního jazyka do $\cal L_2$.
Na obou cvičeních jsem špatně odhadl nutnou délku slova ve vztahu k počtu neterminálů Chomskiho normální formy ($n$ mělo být ve výrazu o 1 menší ... 1 netrminál stačí délka $2^0+1$ ... chtěli jsme hloubku $n+1$ vrcholů, tedy $n$ hran).
Neuvědomil jsem si, že na pvrní verzi cvičení jsme ještě nedokázali ekvivalenci $\cal L_3$ gramatik a konečných automatů. Tím bychom měli příště začít. Taky mám pocit, že na první verzi cvičení jsem nezmínil, že pro gramatiky generující prázdné slovo máme problém s Chomskiho normální formou (ta jej generovat neumí) je to možno vyřešit tím, že gramatika je pětice, kde pátá složka je booleovská hodnota, která pokud je pravdivá, tak $\lambda$ patří do jazyka gramatiky i pokud jej gramatika negeneruje. (Méně se mi líbí komplikovaná oklika pomocí výjimky v Chomskiho formě umožňující $S\to\lambda$ za podmínky, že $S$ není nikde na pravé straně.)
Na první verzi cvičení jsme si povídali i o tom, co jsou zásobníkové automaty. O vzájemných vztazích různých jejich verzí a o vztahu k $\cal L_2$ jsme si nic odvodit nestihli.
Na první verzi cvičení jsme doplnili důkaz ekvivalence jayzků $\cal L_3$ gramatik a konečných automatů.
Na obou verzích cvičení jsme zkoumali nedeterministické i deterministické zásobníkové automaty přijímající koncovým stavem či prázdným zásobníkem. Rozmysleli jsme si možnosti vzájemných simulací. Pak jsme ukázali, že nederetministický automat s jediným stavem (přijímající prázdným zásobníkem) dokáže simulovat všechny zásobníkové autoamaty (na první verzi cvičení 9ne rozdíl od druhé) jsme se moc nezabývali nastartováním simulujícího automatu). Pak už byl jen krůček k tomu, ukázat, ekvivalenci jazyků $\cal L_2$ gramatik a nedeterministických zásobníkových automatů.
Na konci hodiny jsme si ještě hráli s jazyky „na hranici“ $\cal L_2$ a rozhodovali jsme, zda do $\cal L_2$ patří.
Programovali jsme v $\cal L_2$ (tvorba monotónních gramatik pro dva jazyky), následně jsme ukazovali, jak převést libovolnou monotónní gramatiku na kontextový normální tvar (a nezpůsobit, že nová gramatika bude generovat něco navíc).
Řešili jsme jak vztah $\cal L_1$ a $\cal L_0$ gramatik a nedeterministických (lineárně omezených či neomezených) Turingových strojů, tak (ne)uzavřenost tříd $\cal L_i$ na základní jazykové operace.
Počítali jsme příklady z historických písemek.
Zabrousili jsme do vyčíslitelnosti a složitosti. Ukázali jsme, že existují jazyky nepatřící do $\cal L_0$ (ne)spočetnost, diagonalizace (Goedelovo číslování strojů). Pak jsme hledali jazyk patřící do $\cal L_0\setminus L_1$. Použili jsme k tomu jazyk patřící do $\hbox{Space}(n^2)\setminus\hbox{Space}(n)$. K jeho konstrukci jsme potřebovali dokázat větu o hierarchii (definovat pojmy $\hbox{Space}(f(n))$, prostorovou konstruovatelnost, ukázali jsme si prostorově nenáročné skládání prostorově nenáročných transformací, naznačili jsme existenci univerzálního stroje a jeho $c_y$ konstantní prostorové zvětšení náročnosti při simulaci stroje $y$). Bavili jsme se o tom, jak by mohla vypadat funkce, která není prostorově konstruovatelná, zmínil jsem Borodinovu větu o mezerách a na druhém cvičeni i její důkaz.
Pak jsme se konečně vrátili k původnímu plánu hodiny a ukázali si univerzálnost Postova korespondenčního problému (nejprve ve variantě s inicializací, pak jsme vymysleli, jak se obejít bez speciálního pravidla pro inicializaci).
Na následujících dvou cvičeních budou zápočtové písemky. Pokud by se někdo nemohl účastnit osobně, pošlete mi (radši den předem e-mail), dostanete zadání e-mailem na začátku hodiny a budete mít čas do konce hodiny odevzdat e-mailem řešení. Můžete si případně o zadání říct přes zoom, pak ale možná chvilku potrvá, než e-mail dostanete.
Psali jsme zápočtovou písemku.
Psali jsme zápočtovou písemku.
Na posledním cvičení jsem prozradil řešení domácího úkolu, který se vyskytl v písemce, načež jsem odpovídal poslední dotazy k automatům a gramatikám a zbytek hodiny jsme volně věnovali hádance nesouvisející s automaty a gramatikami.
Příklady pro číslo $x$:
1) Dodejte redukovaný konečný automat přijímající jazyk nad abecedou $\{0,1\}$ slov, odpovídající nejkratším zápisům celých kladných čísel dávajících mod 18 zbytek stejný jako $x$.
2) $L_k$ je jazyk slov nad abecedou $\{0,1\}$ obsahujících posledních 5 cifer binárního zápisu $32+k$ jako podslovo. Dodejte redukovaný automat přijímající jazyk $L_x \setminus L_{x+7}$.