FOJA 2 - DU2 - Úloha 1 Jakub Kaššák Definujme: φ(L1 , L2 ) = {v ∈ L1 ∩ LC 2 |v| | (∃u ∈ L2 ) |u| = }. 2 Chceme dokázat’, že trieda LECS je uzavretá na operáciu φ. Nech L1 , L2 ∈ LECS , potom aj Lc2 , L1 ∩LC 2 ∈ LECS . Vezmime LBA A1 = (K1 , Σ1 , Γ1 , δ1 , q01 , F1 ), A2 = (K2 , Σ2 , Γ2 , δ2 , q02 , F2 ) také, že L(A1 ) = L1 ∩ LC 2 , L(A2 ) = L2 . BUNV nech K1 ∩ K2 = ∅. Definujme LBA A = (K, Σ1 , Γ, δ, q01 , F2 ) taký, že L(A) = φ(L1 , L2 ). K = K1 ∪ K2 ∪ {generuj, vymaz, preskoc, najdi, zaciatok} ∪ {zober[a], uloz[a] | a ∈ Σ2 } Stavy generuj, vymaz, preskoc, najdi, zaciatok, zober[a], uloz[a] sú nové stavy. Γ = Γ1 ∪ Γ2 ∪ {B} Pričom B ∈ / Γ1 ∪ Γ2 . Pre prehl’adnost’ uvedieme delta funkciu vo fázach. 1. (∀q ∈ K1 − F1 )(∀a ∈ Γ1 ∪ {$, ¢}) : δ(q, a) = δ1 (q, a) 2. (∀q ∈ F1 )(∀a ∈ Γ1 ∪ {$}) : δ(q, a) ∋ (q, a, −1) (∀q ∈ F1 ) : δ(q, ¢) ∋ (generuj, ¢, 1) (∀a ∈ Γ1 )(∀b ∈ Σ2 ) : δ(generuj, a) ∋ (generuj, b, 1) δ(generuj, $) ∋ (vymaz, $, −1) (∀a ∈ Σ2 ) : δ(vymaz, a) ∋ (preskoc, B, −1) (∀a ∈ Σ2 ) : δ(preskoc, a) ∋ (vymaz, a, −1) 3. δ(preskoc, ¢) ∋ (najdi, ¢, 1) δ(vymaz, ¢) ∋ (najdi, ¢, 1) δ(najdi, B) ∋ (najdi, B, 1) (∀a ∈ Σ2 ) : δ(najdi, a) ∋ (zober[a], B, −1) (∀a ∈ Σ2 ) : δ(zober[a], B) ∋ (zober[a], B, −1) (∀a ∈ Σ2 )(∀b ∈ Σ2 ∪ {¢}) : δ(zober[a], b) ∋ (uloz[a], b, 1) (∀a ∈ Σ2 ) : δ(uloz[a], B) ∋ (najdi, a, 1) 4. δ(najdi, $) ∋ (zaciatok, $, −1) (∀a ∈ Σ2 ∪ {B}) : δ(zaciatok, a) ∋ (zaciatok, a, −1) δ(zaciatok, ¢) ∋ (q02 , ¢, 1) 5. (∀q ∈ K2 )(∀a ∈ Γ2 ∪ {¢}) : δ(q, a) = δ2 (q, a) (∀p, q ∈ K2 )(∀j ∈ {−1, 0}) : δ(q, B) ∋ (p, B, j) ⇐⇒ δ2 (q, $) ∋ (p, $, j) Popis výpočtu: 1. Spustı́me A1 na vstupe. Ak akceptuje, prejdeme do d’alšej fázy. 2. Z l’ubovol’ného akceptačného stavu A1 , dokráčame na ¢ a prejdeme do stavu generuj. V stave generuj vygenerujeme l’ubovol’né slovo u′ zo Σ∗2 (|u′ | = |v|, kde v je pôvodný vstup). Následne každé druhé pı́smenko vymažeme, tak že na zostane práve ⌊|v|/2⌋ pı́smen oddelených znakmi B. 3. V d’alšej fáze posunieme pı́smenká (okrem B) smerom ku ¢. V stave najdi hl’adá A pı́smenko. Ked’ ho nájde uložı́ si pı́smenko do stavu zober[a] a kráča smerom k ¢ až kým nenájde ¢ alebo neblank. Vtedy prejde do stavu uloz[a] a posunie sa na vedl’ajšı́ B. Na jeho miesto zapı́še pı́smenko a zopakuje celý postup. 4. Ak v stave najdi vidı́ $, znamená to, že slovo je už kompletne upratané. V stave zaciatok prejde na ¢ a odtial’ na prvý znak vygenerovaného slova v počiatočnom stave A2 . 5. V poslednej fáze simuluje A2 na vygnerovanom slove. Ak akceptuje A2 akceptuje aj A. Treba si uvedomit’, že ak A akceptuje nejaké slovo, znamená to, že musel prejst’ cez všetky fázy výpočtu. Tým pádom vstup musı́ spĺňat’ podmienku operacie φ. Naopak, ak slovo v ∈ L1 ∩ LC 2 a zároveň (∃u ∈ L2 ) |u| = ⌊|v|/2⌋, automat A1 akceptuje v, vd’aka čomu sa A dostane do fázy 2. Vo fázé 2 dokáže vygenerovat’ l’ubovol’né slovo, a preto ked’ následne vo fáze 3 nechá len polovicu dokáže nedeterministicky ’uhádnut’’ aj slovo u. Automat A2 akceptuje u, preto aj A akceptuje. FOJA 2 - DU2 - Úloha 2 Jakub Kaššák Chceme dokázat’, že PKP je rozhodnutel’ný práve vtedy, ked’ je rozhodnutel’né kompletné PKP. ⇐ 1 Nech existuje DT S A rozhodujúci kompletný PKP. Nech (X, Y ) je inštancia PKP. Spustı́me A pre každú podmnožinu indexov, okrem prázdnej množniny (toto si môžeme dovolit’, lebo podmnožı́n je konečne vel’á). Ak A pre aspoň jednu podmnožinu povie áno, inštancia PKP (X, Y ) má riešenie. Ak pre všetky podmnožiny povie nie, inštancia (X, Y ) nemá riešenie. ⇒ 2 Chceme ukázat’, že ak vieme rozhodovat’ PKP, tak vieme rozhodovat’ aj kompletné PKP. Nech (X, Y ) je inštancia kompletného PKP, pomocou špeciálnej sady obyčajného (X ′ , Y ′ ), ktorá má riešenie práve vtedy, ked’ má riešenie pôvodná inštancia. Potom by sme vedeli algoritmicky zostrojit’ novú špeciálnu inštanciu PKP, rozhdnút’ o nej, či má riešenie a tak by sme dostali odpoved’ na pôvodnú otázku. BUNV nech #, & je nový znak. Nech (X, Y ) je naša sada domı́n, |X| = n. Vytvorme sadu (X ′ , Y ′ ), s (n + 2)n + 3 dominami. Definujme pre ∀n ∈ N homomorfizmus zn : Σ∗ → Σ∗ ∪ {#} tak, že pre ∀a ∈ Σ zn(a) = a#n+1 . Definujme pre ∀n ∈ N zobrazenie mn : Σ∗ → Σ∗ ∪ {#} tak, že pre ∀w ∈ Σ∗ , ∃a ∈ Σ, ∃w′ ∈ Σ∗ , w = w′ a, mn(w) = mn(w′ a) = zn(w′ )a. Budeme mat’: (∀i ∈ N )(1 ≤ i ≤ n) : x′i = zn(xi ), yi′ = #n+2−i mn(yi )#i Tieto dominá nazývame prechody. (∀i, j, k ∈ N )(1 ≤ i ≤ n)(0 ≤ j ≤ n)(k = (n + 1)i + j + 1) : x′k = zn(xi ), yk′ = #n+1−j mn(yi )#j Tieto dominá nazývame medzi-bloky. (k = (n + 2)n + 2) : x′k = #n+2 , yk′ = & Toto domino voláme začiatok. (k = (n + 2)n + 3) : x′k = #, yk′ = #& Toto domino voláme koniec. Chceme dokázat’, že (X, Y ) má riešenie práve vtedy, ked’ (X ′ , Y ′ ). 2.1 ⇒ Nech α je postupnost’ indexov, ktoré sú riešenı́m (X, Y ). Vytvorme nové postupnosti pre ∀i ∈ {1, ..., n}. Hl’adáme prvý výskyt indexu i v α. Pretože α je riešenie kompletného PKP určite sa tam vyskytuje. α potom vyzerá nejako takto j1 , j2 , ..., jk−1 , jk , jk+1 , ..., jl , kde l = |α|, 1 ≤ k ≤ n, jk = i. αi bude potom postupnost’ (j1 (n+1)+i), ..., (jk−1 (n+1)+i), i, (jk+1 (n+1)+i+1)..., (jl (n+1)+i+1). Teraz už vieme skonštruovat’ riešenie (X ′ , Y ′ ). Ako prvý index zoberieme začiatok. Potom pridáme všetky indexy z α1 , potom α2 , ..., až po αn . Riešenie ukončı́me s koncom. Pı́smenká sedia pretože αn je riešenie, a vd’aka tomu ako sme zadefinovali postupnosti αi # na seba presne nadvázujú. 2.2 ⇐ Nech β je postupnost’ indexov, ktoré sú riešenı́m (X ′ , Y ′ ). Očividne prvý v nej musı́ byt’ začiatok, lebo ako jediný má viac # hore ako dole a zároveň začı́na rovnakým znakom. Posledný musı́ byt’ koniec, lebo aj ked’ viaceré bloky končia rovnakým znakom, ich použitie na konci vylučuje to, že na posledných n + 1 znakoch sa nezhodujú. Očividne # musia byt’ nad # a pı́smenká na pı́smenkami. Ak by sme teda ukázali, že pre každé xi , sa niekde nachádza mn(xi ), vedeli by sme nájst’ riešenie kompletného PKP. Predpokladajme, že nejaké mn(xi ) sa tam vôbec nenachádza. Potom sa tam nenachádza ani prechod x′i , yi′ . Vieme, že sme začali so začiatkom a skončili s koncom. Pretože počet mriežok hore začiatku je n + 2, dole iba 1, počet mriežok v konci dole je 1 a hore 0 a 1 ≤ n, vieme, že sme museli použit nejaký prechod (lebo iba prechody menia počet mriežok hore a dole). BUNV nech sa chýbajúci prechod nachádza medzi dvoma prechodmi (analogicky sa to dá ukázat’ aj pre chýbajúci prechod medzi začiatkom a koncom). Nech x′i je prvý chýbajúci prechod. Až po prechod xi−1 sú pı́smenká a mriežky správne zarovnané, preto dole chýba práve n − i + 1 mriežok. Prechod x′j , j > i ale nedokáže toto odstránit’, lebo jeho yi začı́na s najviac n − j + 1 < n − i + 1 mriežkami. Takisto j < i nedokáže toto odstránit’, lebo jeho yi začı́na s najviac n − j + 1 > n − i + 1 mriežkami. Ale potom β nemôže byt’ riešenie. Vieme, že β je riešenie a obsahuje každé domino aspoň raz. Odstránime z nej začiatky a konce. A pre každý index v β vyberieme index pre riešenie (X, Y ) nasledovne: i, ak i ≤ n (i − 1)/(n + 1), ak i > n