Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Obě strany předchozí revizePředchozí verzeNásledující verze | Předchozí verze | ||
| tin:pulsemestralka [02. 01. 2012, 09.59:47] – [Churchvoa teze] typo pitel | tin:pulsemestralka [02. 08. 2026, 13.51:45] (aktuální) – odstraněno - upraveno mimo DokuWiki (Neznámé datum) 127.0.0.1 | ||
|---|---|---|---|
| Řádek 1: | Řádek 1: | ||
| - | ====== Tahák ====== | ||
| - | ===== Půlsemestrálka ===== | ||
| - | ==== Gramatika ==== | ||
| - | [[wp> | ||
| - | //G// = (//N//, //Σ//, //P//, //S//) | ||
| - | * //N// – konečná množina neterminálů | ||
| - | * //Σ// – konečná množina terminálů, | ||
| - | * //P// – přepisovací pravidla, obecně ve tvaru (//Σ// ∪ //N//)* //N// (//Σ// ∪ //N//)* → (//Σ// ∪ //N//)* | ||
| - | * //S// ∈ //N// – startovací symbol | ||
| - | |||
| - | Podle tvaru //P// se rozlišují třídy gramatik. | ||
| - | |||
| - | ==== Operace nad jazyky ==== | ||
| - | [[wp> | ||
| - | * Konkatenace (zřetězení): | ||
| - | * Iterace a pozitivní iterace: | ||
| - | * //L//⁰ = {//ε//} | ||
| - | * //Lⁿ// = //L// · // | ||
| - | * //L//* = ∪ //Lⁿ// pro pro //n// ≥ 0 | ||
| - | * //L//⁺ = ∪ //Lⁿ// pro pro //n// ≥ 1 | ||
| - | * Doplněk: //L//′ = //Σ//* \ //L// | ||
| - | * Průnik: //L//₁ ∩ //L//₂ = {//w// | //w// ∈ //L//₁ ∧ //w// ∈ //L//₂} | ||
| - | * Sjednocení: | ||
| - | ==== Regulární jazyky ==== | ||
| - | [[wp> | ||
| - | === Gramatika === | ||
| - | [[wp> | ||
| - | |||
| - | Viz [[# | ||
| - | |||
| - | Rozlišujeme pravou a levou lineární, podle pozice neterminálu na pravé straně pravidel (v příkladu je pravá): | ||
| - | * //A// → //xB//; //A//, //B// ∈ //N//, //x// ∈ //Σ//* | ||
| - | * //A// → //x//; //x// ∈ //Σ//* | ||
| - | |||
| - | Rozlišujeme pravou a levou regulární: | ||
| - | * //A// → //xB//; //A//, //B// ∈ //N//, //x// ∈ //Σ// | ||
| - | * //A// → //x//; //x// ∈ //Σ// | ||
| - | * //S// → //ε//, pokud se //S// neobjevuje na pravé straně žádného pravidla | ||
| - | === Konečný automat === | ||
| - | [[wp> | ||
| - | |||
| - | //M// = (//Q//, //Σ//, //δ//, //q//₀, //F//) | ||
| - | * //Q// – konečná množina stavů | ||
| - | * //Σ// – konečná vstupní abeceda | ||
| - | * //δ// – přechodová funkce ve tvaru //δ//: //Q// × //Σ// → 2< | ||
| - | * //q//₀ ∈ //Q// – počáteční stav | ||
| - | * //F// ⊆ //Q// – množina koncových stavů | ||
| - | |||
| - | * Konfigurace: | ||
| - | * Přechod automatu: binární relace ⊢ ⊆ (//Q// × //Σ//*) × (//Q// × //Σ//*) | ||
| - | * (//q//, //w//) ⊢ (//q//′, //w//′) ⇔ //w// = //aw//′ ∧ //q//′ ∈ // | ||
| - | |||
| - | == Deterministický konečný automat == | ||
| - | Pouze se změní //δ//: //Q// × //Σ// → //Q// ∪ {// | ||
| - | |||
| - | == Úplně definovaný konečný automat == | ||
| - | Stejný jako deterministický, | ||
| - | === Pumping lemma === | ||
| - | [[wp> | ||
| - | |||
| - | ∃//p// > 0: ∀//w// ∈ //L//: |//w//| ≥ //p// ⇒ ∃//x//, //y//, //z// ∈ Σ*: | ||
| - | * //w// = //xyz// ∧ | ||
| - | * 0 < |//y//| ≤ //p// ∧ | ||
| - | * ∀//i// ≥ 0: //xyⁱz// ∈ //L// | ||
| - | |||
| - | Dokazuje se sporem. | ||
| - | |||
| - | Pumping lemma je podmínka nutná, nikoliv dostačující. Takže s ní dokážete, že jazyk není ragulární, | ||
| - | === Uzávěrové vlastnosti === | ||
| - | ^ Sjednocení (∪) | ✔ | | ||
| - | ^ Průnik (∩) | ✔ | | ||
| - | ^ Konkatenace (•) | ✔ | | ||
| - | ^ Iterace (*) | ✔ | | ||
| - | ^ Doplněk (‾) | ✔ | | ||
| - | ^ Reverze (ᴿ) | ✔ | | ||
| - | ^ Substituce | ||
| - | ^ Morfismus | ||
| - | ^ Inverzní morfismus | ||
| - | === Rozhodnutelné problémy === | ||
| - | * Problém neprázdnosti: | ||
| - | * Problém náležitosti: | ||
| - | * Problém ekvivalence: | ||
| - | ==== Bezkontextové jazyky ==== | ||
| - | [[wp> | ||
| - | === Gramatika === | ||
| - | [[wp> | ||
| - | |||
| - | Viz [[# | ||
| - | |||
| - | Bezkontextová gramatika má konečnou množinu přepisovacích pravidel //P//, tvaru: | ||
| - | * //A// → //α//, //A// ∈ //N//, //α// ∈ (//N// ∪ //Σ//)* | ||
| - | === Zásobníkový automat === | ||
| - | [[wp> | ||
| - | |||
| - | //M// = (//Q//, //Σ//, //Γ//, //δ//, //q//₀, //Z//₀, //F//) | ||
| - | * //Q// – konečná množina stavů | ||
| - | * //Σ// – konečná vstupní abeceda | ||
| - | * //Γ// – konečná zásobníková abeceda | ||
| - | * //δ// – přechodová funkce ve tvaru //δ//: //Q// × (//Σ// ∪ {//ε//}) × //Γ// → 2< | ||
| - | * //q//₀ ∈ //Q// – počáteční stav | ||
| - | * //Z//₀ ∈ //Γ// – počáteční symbol zásobníku | ||
| - | * //F// ⊆ //Q// – množina koncových stavů | ||
| - | |||
| - | == Determinsitický zásobníkový automat == | ||
| - | [[wp> | ||
| - | |||
| - | Automat je deterministický, | ||
| - | * ∀//q// ∈ //Q//, //a// ∈ //Σ// ∪ {//ε//}, //x// ∈ //Γ//: |// | ||
| - | * ∀//q// ∈ //Q//, //x// ∈ //Γ//: pokud // | ||
| - | |||
| - | Jiný zápis toho samého (je tam hezká symetrie): | ||
| - | * ∀//a// ∈ //Σ//: |// | ||
| - | * ∀//a// ∈ //Σ//: // | ||
| - | |||
| - | == Rozšířený zásobníkový automat == | ||
| - | //δ//: //Q// × (//Σ// ∪ {//ε//}) × //Γ//* → 2< | ||
| - | |||
| - | Rozdíl je v //Γ//*, automat tedy může číst 0–//n// symbolů ze sásobníku. | ||
| - | |||
| - | === Syntaktická analýza === | ||
| - | == Shora dolů == | ||
| - | [[wp> | ||
| - | |||
| - | Přijímá prázdným zásobníkem! | ||
| - | |||
| - | //P// = ({//q//}, //Σ//, //N// ∪ //Σ//, //δ//, //q//, //S//, ∅) | ||
| - | * Je-li //A// → //α// pravidlo z //P//, pak // | ||
| - | * // | ||
| - | |||
| - | == Zdola nahoru == | ||
| - | [[wp> | ||
| - | |||
| - | Vyžaduje rozšířený zásobníkový automat! | ||
| - | |||
| - | //P// = ({//q//, //r//}, //Σ//, //N// ∪ //Σ// ∪ {//#//}, //δ//, //q//, //#//, {//r//}) | ||
| - | - Redukce: Je-li //A// → //α// pravidlo z //P//, pak // | ||
| - | - Shift: // | ||
| - | - Accept: // | ||
| - | === Pumping lemma === | ||
| - | [[wp> | ||
| - | |||
| - | Nechť //L// je bezkontextový jazyk. Pak existuje konstanta //k// > 0 taková, že je-li //z// ∈ //L// a |//z//| ≥ //k//, pak lze //z// zapsat ve tvaru: //z// = //uvwxy//, //vx// ≠ ε, |//vwx//| ≤ //k// a pro všechna //i// ≥ 0 je // | ||
| - | |||
| - | Opět platí [[# | ||
| - | === Uzávěrové vlastnosti === | ||
| - | ^ Sjednocení (∪) | ✔ | | ||
| - | ^ Průnik (∩) | ✘((Jsou uzavřené pouze na průnik s regulárními jazyky)) | ||
| - | ^ Konkatenace (•) | ✔ | | ||
| - | ^ Iterace (*) | ✔ | | ||
| - | ^ Doplněk (‾) | ✘ | | ||
| - | ^ Reverze (ᴿ) | ✔ | | ||
| - | ^ Substituce | ||
| - | ^ Morfismus | ||
| - | ^ Inverzní morfismus | ||
| - | === Rozhodnutelné problémy === | ||
| - | * Problém neprázdnosti jazyka | ||
| - | * Probém příslušnosti řetězce //w// ∈ //Σ//* do jazyka | ||
| - | * Problém konečnosti jazyka | ||
| - | |||
| - | === Nerozhodnutelné problémy === | ||
| - | * Problém ekvivalence jazyků bezkontextových gramatik | ||
| - | * Problém inkluze jazyků bezkontextových gramatik | ||
| - | |||
| - | ===== Semestrálka ===== | ||
| - | <note important> | ||
| - | ==== Churchova teze ==== | ||
| - | [[wp> | ||
| - | |||
| - | Když jde něco vyčíslit, jde to udělat Turingovým strojem. | ||
| - | ==== Turingovy stroje ==== | ||
| - | [[wp> | ||
| - | |||
| - | //M// = (//Q//, //Σ//, //Γ//, //δ//, //q//₀, // | ||
| - | * //Q// -- konečná množina stavů | ||
| - | * //Σ// -- konečná vstupní abeceda, //Δ// ∉ //Σ// | ||
| - | * //Γ// -- konečná pásková abeceda, //Σ// ⊂ //Γ//, //Δ// ∈ //Γ// | ||
| - | * //δ// -- parciální přechodová funkce, //δ//: (//Q// \ {// | ||
| - | * //q//₀ -- počáteční stav, //q//₀ ∈ //Q// | ||
| - | * // | ||
| - | |||
| - | Jestli má stroj více pásek, nebo je nedeterministický nijak nezvětšuje jeho schopnost přijímat jazyky! | ||
| - | |||
| - | Turingův stroj se nazývá úplný, když pro každý vstup zastaví (tzn. že se nezacyklí). | ||
| - | |||
| - | Jazyk se nazývá rekurzivní, | ||
| - | |||
| - | Problém může být: | ||
| - | * rozhodnutelný -- pokud jeho jazyk je rekurzivní, | ||
| - | * nerozhodnutelný -- pokud není rozhodnutelný LOL | ||
| - | * částečně rozhodnutelný -- pokud je jeho jazyk rekurzivně vyčíslitelný, | ||
| - | |||
| - | TS jsou ekvivalentní s gramatikami typu 0 (rekurzivně vyčíslitelné). | ||
| - | |||
| - | Speciálním případem TS jsou linárně omezené automaty (LOA), je to vlastně TS ale s konečnou páskou, a dokáží přijímat kontextové jazyky | ||
| - | |||
| - | === Uzávěrové vlastnosti === | ||
| - | ^ ^ Kontextové | ||
| - | ^ Sjednocení (∪) | ✔ | ✔ | ✔ | | ||
| - | ^ Průnik (∩) | ✔ | ✔ | ✔ | | ||
| - | ^ Konkatenace (•) | ✔ | ✔ | ✔ | | ||
| - | ^ Iterace (*) | ✔ | ✔ | ✔ | | ||
| - | ^ Doplněk (‾) | ✔ | ✔ | ✘ | | ||
| - | ^ Reverze (ᴿ) | ✔ | ✔ | ✔ | | ||
| - | ^ Substituce | ||
| - | ^ Morfismus | ||
| - | ^ Inverzní morfismus | ||
| - | ==== Cookův teorém ==== | ||
| - | Je-li //L// libovolný jazyk z NP, pak je redukovatelný na [[wp> | ||
| - | |||
| - | **Důkaz:** Protože //L// ∈ //NP//, exsituje nedeterministický Turingův stroj //M// a polynom // | ||
| - | |||
| - | ==== Halting problem ==== | ||
| - | [[wp> | ||
| - | |||
| - | Zastaví daný TS pro daný vstup? Je to částečně rozhodnutelný problém. | ||
| - | |||
| - | Důkaz: | ||
| - | - Předpokládejme, | ||
| - | if (M(w).finished) { | ||
| - | return true; | ||
| - | } else { | ||
| - | return false; | ||
| - | } | ||
| - | }</ | ||
| - | - Zkonstrujeme program <code php>void paradox(x) { | ||
| - | if (halt(x, x)) { | ||
| - | while (true); | ||
| - | } else { | ||
| - | return; | ||
| - | } | ||
| - | }</ | ||
| - | - Co se stane, pokud zavoláme '' | ||
| - | * Předpokládejme, | ||
| - | * Pak se tedy '' | ||
| - | * Předpokládejme, | ||
| - | * Pak se tedy '' | ||
| - | - V obou případech jsme došli ke sporu, tudíž program '' | ||
| - | - Je ale zřejmé, že pokud má '' | ||
| - | ==== Redukce ==== | ||
| - | Je to technika dokazování, | ||
| - | |||
| - | Protože lze problémy specifikovat jako jazyky, jde vlastně o převod mezi jazyky, a platí že: | ||
| - | - Není-li jazyk //A// rekurzivně vyčíslitelný, | ||
| - | - Není-li jazyk //A// rekurzivní, | ||
| - | - Je-li jazyk //A// rekurzivně vyčíslitelný, | ||
| - | - Je-li jazyk //A// rekurzivní, | ||
| - | ==== Vyčíslitelné funkce ==== | ||
| - | [[wp> | ||
| - | |||
| - | Funkce, které je možné spočítat v obecném smyslu bez ohledu na výpočetní systém. Existují **totální funkce** (pokrývají celý obor hodnot) a **striktně parciální** (nejsou pro některé hodnoty definovány, | ||
| - | |||
| - | I o TS můžeme uvažovat jako o funkcích. Úplný TS je totální funkce, obyčejný TS je parciální funkce (pokud se zacyklí, funkce není definovaná). | ||
| - | |||
| - | //x//′ = (//x//₁, //x//₂, …, // | ||
| - | |||
| - | === Primitivně rekurzivní funkce === | ||
| - | [[wp> | ||
| - | |||
| - | Třída primitivně rekurzivních funkcí obsahuje funkce, které lze sestrojit pomocí počátečních funkcí a kombinace, kompozice a primitivní rekurze. **Každá** funkce v této třídě je totální. | ||
| - | |||
| - | == Počáteční funkce == | ||
| - | - nulová funkce: ξ() = 0 | ||
| - | - fce následníka: | ||
| - | - fce projekce: πⁿ< | ||
| - | |||
| - | == Základní funkce vytvořené z počátečních == | ||
| - | - kombinace //f// × //g//: | ||
| - | - ℕᵏ → ℕⁿ⁺ᵐ | ||
| - | - //f// × // | ||
| - | - kompozice //g// ∘ // | ||
| - | - primitivní rekurze: | ||
| - | - // | ||
| - | - // | ||
| - | |||
| - | === Parcialně neboli rekurzivní funkce === | ||
| - | [[wp> | ||
| - | |||
| - | Zavedeme techniku takzvané **minimalizace**, | ||
| - | * // | ||
| - | * // | ||
| - | Zapisujeme ji pak // | ||
| - | |||
| - | === Turingovsky vyčíslitelné funkce === | ||
| - | Funkce, které můžeme simulovat na TS. | ||
| - | |||
| - | == Turingovsky vyčíslitelné parciální rekurzivní funkce == | ||
| - | - Najdeme TS simulující počáteční funkce | ||
| - | - Najdeme TS simuljící primitivně rekurzivní funkce | ||
| - | - Najdeme TS simlujicí minimalizaci | ||
| - | |||
| - | == Funkce pomocí TS == | ||
| - | Parametry funkce můžeme hodit na pásku TS a odělit pomocí Δ. Pokud po provedení výpočtu bude na pásce výsledek funkce pro tyto parametry, TS přijme. Pokud není pro dané parametry funkce definována, | ||
| - | |||
| - | == TS pomocí funkcí == | ||
| - | Sestaví funkce pro jednotlivé funkce TS a to pro '' | ||