1.1 Základné princípy práce Turingovho stroja 1 1 Turingove stroje 1.1 Základné princípy práce Turingovho stroja Predstavme si kol ajnice pevný, na je

Podobné dokumenty
Metódy dokazovanie v matematike 1 Základné pojmy Matematika exaktná veda vybudovaná DEDUKTÍVNE ZÁKLADNÉ POJMY základy každej matematickej teórie sú in

Vzorové riešenia úlohy 4.1 Bodovanie Úvod do TI 2010 Dôvod prečo veľa z Vás malo málo bodov bolo to, že ste sa nepokúsili svoje tvrdenia dokázať, prič

Paralelné algoritmy, cast c. 3

III. Diferenciálny počet funkcie viac premenných (Prezentácia k prednáškam, čast B) Matematická analýza IV (ÚMV/MAN2d/10) RNDr. Lenka Halčinová, PhD.

Aplikace matematiky- záverečná práca Juraj Bodík 28. septembra 2017 Definície Žena - objekt ohodnotený celým číslom. Každé dve ženy sa dajú porovnat a

Microsoft Word - skripta3b.doc

8 Cvičenie 1.1 Dokážte, že pre ľubovoľné body X, Y, Z platí X + Y Z = Z + Y X. 1.2 Dokážte, že pre ľubovoľné body A, B, D, E, F, G afinného priestoru

Paralelné algoritmy, cast c. 2

Microsoft Word - 6 Výrazy a vzorce.doc

Prenosový kanál a jeho kapacita

Paralelné algoritmy, cast c. 3

Poznámky k cvičeniu č. 2

SK MATEMATICKA OLYMPIADA 2010/ ročník MO Riešenia úloh domáceho kola kategórie Z4 1. Doplň do prázdnych políčok čísla od 1 do 7 každé raz tak,

Axióma výberu

SK MATEMATICKÁOLYMPIÁDA skmo.sk 2009/ ročník MO Riešenia úloh česko-poľsko-slovenského stretnutia 1. Určte všetky trojice (a, b, c) kladných r

2.5. Dotyčnica krivky, dotykový kužeľ. Nech f je krivka a nech P V (f) (t.j. m P (f) 1). Ak m P (f) = r a l je taká priamka, že I P (f, l) > r, potom

Teória pravdepodobnosti Zákony velkých císel

Tue Oct 3 22:05:51 CEST Začiatky s jazykom C 2.1 Štruktúra programu Štruktúra programu by sa dala jednoducho popísať nasledovnými časťami, kto

Cvičenie 9 Riešené príklady 1. Príklad min f(x 1, x 2 ) = x x x 1 s.t. x 1 80 x 1 + x Pre riešenie úlohy vykonáme nasledujúce kroky

Microsoft Word - Argumentation_presentation.doc

1 Rekurencie este raz riesenia niektorych rekurencii z cvik. mame danu rekurenciu napr T (n) = at ( n b ) + k. idea postupu je postupne rozpisovat cle

Metódy násobenie v stredoveku

Matematický model činnosti sekvenčného obvodu 7 MATEMATICKÝ MODEL ČINNOSTI SEKVENČNÉHO OBVODU Konečný automat predstavuje matematický model sekvenčnéh

Microsoft Word - Transparencies03.doc

Zeszyty Naukowe PWSZ, Nowy Sącz 2013 Konštrukcie magických obdĺžnikov Marián Trenkler Faculty of Education, Catholic University in Ružomberok Hrabovsk

Microsoft Word - Algoritmy a informatika-priesvitky02.doc

Matematika 2 - cast: Funkcia viac premenných

Informačná a modelová podpora pre kvantifikáciu prvkov daňovej sústavy SR

Oceňovanie amerických opcií p. 1/17 Oceňovanie amerických opcií Beáta Stehlíková Finančné deriváty, FMFI UK Bratislava

Úvod do lineárnej algebry Monika Molnárová Prednášky 2006

B5.indd

1

SK MATEMATICKÁOLYMPIÁDA skmo.sk 63. ročník Matematickej olympiády 2013/2014 Riešenia úloh česko-poľsko-slovenského stretnutia 1. Dokážte, že kladné re

Bariéra, rezonančné tunelovanie Peter Markoš, KF FEI STU February 25, 2008 Typeset by FoilTEX

Neineárne programovanie zimný semester 2018/19 M. Trnovská, KAMŠ, FMFI UK 1

Úlohy o veľkých číslach 6. Deliteľnosť In: Ivan Korec (author): Úlohy o veľkých číslach. (Slovak). Praha: Mladá fronta, pp Persistent UR

Operačná analýza 2

Microsoft Word - mnohouholnik.doc

1

Microsoft Word - 8.cvicenie.doc

SK MATEMATICKÁOLYMPIÁDA skmo.sk 2009/ ročník Matematickej olympiády Riešenia úloh IMO 1. Určte všetky funkcie f: R R také, že rovnosť f ( x y

Metrické konštrukcie elipsy Soňa Kudličková, Alžbeta Mackovová Elipsu, ako regulárnu kužeľosečku, môžeme študovať synteticky (konštrukcie bodov elipsy

trafo

Vzhľadom k tomu, že Žiadosť o platbu č

9.1 MOMENTY ZOTRVACNOSTI \(KVADRATICKÉ MOMENTY\) A DEVIACNÝ MOMENT PRIEREZU

Obsah 1 Úvod Predhovor Sylaby a literatúra Základné označenia

Tabuľky_teoria

2

Microsoft Word - 06b976f06a0Matice - Uzivatelska Dokumentacia

Import absencí z ASC

Obsah 1 Úvod Predhovor Sylaby a literatúra Základné označenia

Pokrocilé programovanie XI - Diagonalizácia matíc

Relačné a logické bázy dát

(ıkolské kolo-PYT)

M59dkZ9ri10

Všetci by sme mali byť feminist(k)ami (Ukážka)

Ďalšie vlastnosti goniometrických funkcií

Priebeh funkcie

Funkcie viac premenných

Novinky programu MSklad

Republika Srbsko MINISTERSTVO OSVETY, VEDY A TECHNOLOGICKÉHO ROZVOJA ÚSTAV PRE HODNOTENIE KVALITY VZDELÁVANIA A VÝCHOVY VOJVODINSKÝ PEDAGOGICKÝ ÚSTAV

SK MATEMATICKÁOLYMPIÁDA skmo.sk 64. ročník Matematickej olympiády 2014/2015 Riešenia úloh domáceho kola kategórie Z8 1. Písmenkový logik je hra pre dv

Analýza sociálnych sietí Geografická lokalizácia krajín EU

4. Pravidlo ret azenia. Často sa stretávame so skupinami premenných, ktoré zložitým spôsobom závisia od iných skupín premenných. Pravidlo ret azenia p

Dejepis extra 12/2018 Časopis nie iba pre tých, čo majú radi históriu... Pred budovou Národnej banky Slovenska.

Príklad 5 - Benzén 3. Bilančná schéma 1. Zadanie príkladu n 1 = kmol/h Definovaný základ výpočtu. Na základe informácií zo zadania si ho bude v

1)

Preco kocka stací? - o tom, ako sú rozdelené vlastné hodnoty laplasiánu v limite, ked sú velké

Pravidlá bezpečnosti pre majiteľov certifikátov certifikačnej autority DÔVERA zdravotná poisťovňa, a. s. Verzia 1.1 Platí od

bakalarska prezentacia.key

Dirichletov princíp 4. kapitola. Kódovanie In: Lev Bukovský (author); Igor Kluvánek (author): Dirichletov princíp. (Slovak). Praha: Mladá fronta, 1969

Príklad 9 - Lisovanie+ Vylúhovanie+ Sušenie 3. Bilančná schéma 1. Zadanie príkladu Bilančná schéma: m6 =? w6a = m4 =? kg 0.1 Zvolený základ výpočtu: w

30440_Enek_szlovak_2016._ofi.indd

Národné centrum popularizácie vedy a techniky v spoločnosti

Podvojné účtovníctvo, fakturácia a sklad Evidencia a zápočet daňovej licencie v DPPO 2018 Od je daňová licencia zrušená. Podľa prechodného us

Microsoft Word - Final_test_2008.doc

Snímka 1

Microsoft Word - zapis-predmetov-AiS

Operačná analýza 2

2_detsky pesibus v Novakoch_Putiska Ivan

Dejepis extra 7/2016 Časopis nielen pre tých, ktorí majú radi históriu. Nedívajme sa iba pod nohy Na nádvorí Oblastného výboru Slovenského zväzu proti

10 tipov pre tvoj forex úspech

Agenda záverečnej práce pedagóg Celá agenda týkajúca sa záverečnej práce je dostupná v obrazovke Záverečná práca (menu Agenda pedagóga -> Záverečné pr

1. KOMPLEXNÉ ČÍSLA 1. Nájdite výsledok operácie v tvare x+yi, kde x, y R. a i (5 2i)(4 i) b. i(1 + i)(1 i)(1 + 2i)(1 2i) (1 7i) c. (2+3i) a+bi d

PowerPoint-Präsentation

N desitka.indd

História

Rozdeľovanie IT zákaziek UX Peter Kulich

30435_M_Pracovny.indd

Úroveň strojového kódu procesor Intel Pentium Pamäťový operand Adresovanie pamäte Priama nepriama a indexovaná adresa Práca s jednorozmerným poľom Pra

Úvodná prednáška z RaL

Zdravé sebavedomie odzrkadľuje spôsob, akým vidíme sami seba. Ak sa chceme stať sebavedomejšími ľuďmi, musíme zmeniť to, čo si myslíme sami o sebe, ak

Informačné technológie

gazdikova

Algoritmizácia a programovanie - Príkazy

Microsoft PowerPoint - OOP_prednaska_10.pptx

Klasické a kvantové vĺny na rozhraniach. Peter Markoš, KF FEI STU April 14, 2008 Typeset by FoilTEX

Prepis:

1.1 Základné princípy práce Turingovho stroja 1 1 Turingove stroje 1.1 Základné princípy práce Turingovho stroja Predstavme si kol ajnice pevný, na jednu stranu nekonečný, rad (nerozoznatel ných) štvorčekov, po ktorých sa (vždy po jednom štvorčeku) pohybuje jeden vozík, ktorý má šírku práve jedného štvorčeka. Každý štvorček pritom obsahuje vždy jeden z dvoch typov predmetov. Vo vozíku je (nevyčerpatel ná) zásoba predmetov oboch typov, a tak (v prípade, že sa vozík nachádza v určitom stave) môžeme v tom štvorčeku, kde sa práve vozík nachádza, vymenit predmet za iný. Na konkrétnej podobe predmetov, pravdaže, nezáleží, budeme ich preto označovat iba symbolicky obl úbenými znakmi 0 a 1. Stavy vozíka tiež nebudeme popisovat slovami, ale číslami, presnejšie indexmi pevného symbolu s. Celú situáciu si teda môžeme znázornit napríklad takýmto obrázkom (symbol s 7 vl avo je stav vozíka, a ten je znázornený zarámovaným poĺıčkom): s 7 0 1 1 1 0 1 0 1 1 1 1 0 0 0... Aby sme sa vyjadrovali odbornejšie, takúto situáciu budeme nazývat konfigurácia, kol ajnice budeme nazývat páska a vozík hlava, pomenovanie stav si ponecháme. odajme, že nás budú zaujímat iba tie konfigurácie, v ktorých je počet jednotiek konečný, inými slovami, od istého miesta sú už vo všetkých d alších štvorčekoch iba nuly. Našou snahou bude, pravdaže, pohyb vozíka kontrolovat a hlavne automatizovat. Na jeho ovládanie tak budeme používat isté inštrukcie. Je zaujímavé a dôležité, že všetky inštrukcie budú vyzerat v podstate rovnako, typickou ukážkou je napríklad s 7 01Rs 8. Každá z nich teda bude zložená z piatich písmen: Prvé dve budú potvrdzovat jej vhodnost : Prvý znak (v našom prípade s 7 ) sa musí zhodovat s aktuálnym stavom hlavy. ruhý znak (u ná) musí byt rovnaký ako písmeno na štvorčeku s hlavou. V prípade splnenia oboch podmienok budeme hovorit, že inštrukcia s aktuálnou konfiguráciou korešponduje. (Napríklad naša inštrukcia s 7 01Rs 8 korešponduje s konfiguráciou na obrázku.) Zvyšné tri budú hovorit, ako sa má konfigurácia postupne zmenit : V štvorčeku, na ktorom sa nachádza hlava, sa doterajší znak nahradí tretím znakom inštrukcie (v našom prípade 1). (O nahradzovaní môžeme hovorit aj vtedy, ked sa druhý a tretí znak navzájom zhodujú, hoci sa v podstate nič nezmení.) Štvrtý znak (ktorý môže byt len jedno z písmen L, N, alebo R) hovorí, ako sa má zmenit poloha hlavy: L: Hlava sa posunie o jedno poĺıčko dol ava. N: Hlava ostáva na svojom pôvodnom mieste. R: Hlava sa posunie o jedno poĺıčko doprava (to je prípad našej inštrukcie). Posledné písmeno inštrukcie (u nás s 8 ) hovorí, v akom stave bude hlava po vykonaní tejto inštrukcie. Po aplikovaní našej inštrukcie s 7 01Rs 8 na vyššie uvedenú konfiguráciu tak dostávame novú konfiguráciu: s 8 0 1 1 1 1 1 0 1 1 1 1 0 0 0...

1.1 Základné princípy práce Turingovho stroja 2 L ahko vidiet, že pri každej konfigurácii vieme pripravit inštrukciu, ktorú na ňu môžeme aplikovat stačí z nej vyčítat stav a znak v sivom štvorčeku a doplnit ich (až na jedinú výnimku) jedným znakom 0 alebo 1, jedným posunom a jedným stavom. Po aplikácii takto vytvorenej inštrukcie vznikne nová konfigurácia, tú však môžeme opät zmenit nejakou d alšou inštrukciou, a takto celý proces podl a potreby opakujeme, až kým nevznikne konfigurácia, ktorú sme si predsavzali dosiahnut na začiatku. Naozaj však inštrukcie musíme pripravovat až na poslednú chvíl u, teda až vtedy, ked ich chceme aplikovat? Čo keby sme ich vytvorili ešte predtým? Z interaktívneho módu by sme tak prešli do programovacieho. Úlohou tu už nebude pripravit jednu inštrukciu, ale rovno program, ktorý z nich bude zložený. Takýto program budeme nazývat Turingov stroj. Pre danú konfiguráciu sa potom z tohto systému vyberie tá inštrukcia, ktorá s danou konfiguráciou korešponduje. Uvedomme si, že pri takomto prístupe sa musíme vyhnút situácii, ked s konfiguráciou korešponduje viac než jedna inštrukcia, v takom prípade by sme sa totiž nevedeli rozhodnút, ktorú z nich použit, a proces by sa tak stal nedeterministickým. Túto podmienku deterministickosti splníme l ahko jednoducho budeme od Turingovho stroja požadovat, aby žiadne jeho dve inštrukcie nemali prvé dva znaky rovnaké. Vezmime si napríklad Turingov stroj systém inštrukcíı { 00Ls 3, 10Rs 1, s 1 00Ns 2, s 1 11R } (všimnime si, že spĺňa podmienku deterministickosti) a úvodná konfigurácia nech je 0 1 1 1 0 0 0 0... Sme v stave a aktuálny znak je 1. Korešpondujúca inštrukcia teda musí začínat dvojicou znakov 1. Jediná taká je 10Rs 1. Tá nám prikazuje prepísat znak v sivom poĺıčku na 0, posunút sa o jedno poĺıčko doprava a zmenit stav na s 1. ostávame tak konfiguráciu s 1 0 0 1 1 0 0 0 0... Pre túto konfiguráciu zasa hl adáme inštrukciu, ktorá sa začína na s 1 1. Je to inštrukcia s 1 11R, po jej aplikovaní dostávame konfiguráciu 0 0 1 1 0 0 0 0... Opät sme sa dostali do stavu, pričom aktuálny znak na páske je 1, Jediná inštrukcia 10Rs 1, ktorá s touto konfiguráciou korešponduje, už však bola použitá! Znamená to azda, že je už znova nepoužitel ná? Nie, pokojne ju môžeme, ba musíme aplikovat, a to vždy, ked korešponduje s aktuálnou konfiguráciou. Takže máme s 1 0 0 1 0 0 0 0 0... Teraz sme sa dostali do stavu s 1, avšak sivé písmeno je 0. Použijeme teda inštrukciu s 1 00Ns 2 a dostávame s 2 0 0 1 0 0 0 0 0... ostali sme sa však do zvláštnej situácie: Sme totiž v stave s 2, takže na túto konfiguráciu už nemôžeme aplikovat žiadnu inštrukciu z nášho zoznamu. A to znamená, že náš výpočet (teda postupnost konfigurácíı sledujúcich inštrukcie) sa končí. Výsledkom takéhoto výpočtu je potom počet jednotiek na páske, v našom prípade je to 1. Skúsme spustit ten istý Turingov stroj na inú počiatočnú konfiguráciu, a to 0 1 1 1 1 0 0 0 0...

1.1 Základné princípy práce Turingovho stroja 3 L ahko vidiet, že výpočet prebieha takto: s 1 s 1 s 3 0 0 1 1 1 0 0 0 0... 0 0 1 1 1 0 0 0 0... 0 0 1 0 1 0 0 0 0... 0 0 1 0 1 0 0 0 0... 0 0 1 0 1 0 0 0 0... Tentoraz je výsledok výpočtu (čiže počet jednotiek na páske) 2. Navyše si môžeme všimnút, že tentoraz stroj skočil svoj výpočet v stave s 3. Aby sme mali obraz o práci Turingovho stroja úplnejší, uved me ešte jeden príklad: Aplikujme (oproti predchádzajúcemu minimálne upravený) Turingov stroj { 00Ls 3, 10Rs 1, s 1 00Ns 1, s 1 11R } na konfiguráciu 0 1 1 1 0 0 0 0... Prvých pár krokov výpočtu je takýchto: s 1 s 1 s 1 s 1 0 0 1 1 0 0 0 0... 0 0 1 1 0 0 0 0... 0 0 1 0 0 0 0 0... 0 0 1 0 0 0 0 0... 0 0 1 0 0 0 0 0.... Vidíme, že posledné tri znázornené konfigurácie sú úplne rovnaké, a tak to zrejme bude d alej. To však znamená, že výpočet na tomto stroji z tejto konfigurácie sa nikdy neskončí. (L ahko však vidiet, že pri iných konfiguráciách stroj zastane, ved stačí zobrat l ubovol nú úvodnú konfiguráciu so stavom trebárs s 4.) Už sme si povedali, aký má Turingov stroj výstup (bud počet jednotiek, alebo žiadny, ak sa nezastaví), treba ešte spomenút, ako je to s jeho vstupom: Turingov stroj vie, samozrejme, reagovat na každú vstupnú konfiguráciu. Aby však bol jeho výpočet rozumne interpretovatel ný, bude vhodné, aby vstupná konfigurácia mala pásku zloženú z tzv. blokov. Pod blokom kódujúcim číslo x budeme rozumiet súvislú konečnú postupnost x + 1 jednotiek, pred ktorými bude práve jedna nula, takže napríklad blok kódujúci číslo 3 bude vyzerat takto: 0 1 1 1 1 kým blok kódujúci číslo 0 bude 0 1

1.1 Základné princípy práce Turingovho stroja 4 Páska kódujúca usporiadanú n-ticu x 1, x 2,..., x n (budeme ju nazývat bloková páska) potom bude združením blokov kódujúcich postupne čísla x 1, x 2,..., x n, pričom zvyšok pásky je vyplnený nulami. Výpočty obvykle začínajú z konfigurácie, ktorej páska je bloková, hlava je nastavená na prvej jednotke prvého bloku a stav je. Takže štartovná bloková konfigurácia kódujúca štvoricu čísel 2, 3, 0, 1 bude vyzerat takto: 0 1 1 1 0 1 1 1 1 0 1 0 1 1 0 0 0... Ked že už takto vieme číselne interpretovat aj vstupy, aj výstup Turingovho stroja, môžeme tento stroj chápat ako prostriedok na počítanie funkcie, ktorej definičným oborom sú (možno nie niektoré) usporiadané n-tice prirodzených čísel (pri danom, pevnom počte n) a obor hodnôt je podmnožinou množiny prirodzených čísel: Ak na stroji T existuje (zrejme jediný) konečný výpočet, ktorého úvodná konfigurácia je bloková a kóduje x 1, x 2,..., x n, tak hodnota f(x 1,..., x n ) je rovná počtu jednotiek na páske poslednej konfigurácie tohto výpočtu. Ak taký (konečný) výpočet neexistuje, tak hodnota f(x 1,..., x n ) nie je definovaná. Po príklad sa vrát me k Turingovmu stroju { 00Ls 3, 10Rs 1, s 1 00Ns 2, s 1 11R }, ktorý sme ukážkovo spúšt ali na blokových konfiguráciách 0 1 1 1 0 0 0... a 0 1 1 1 1 0 0 0... V prvom prípade bol vstup 2 a výstup 1, v druhom vstup 3 a výstup 2. L ahko sa možno presvedčit, že pre vstup 2m (teda v prípade, že máme na páske 2m + 1 jednotiek), je výstupom číslo m, kým pre vstup 2m + 1 (teda v prípade, že máme na páske 2m + 2 jednotiek), je výstupom číslo m + 1. Znamená to teda, že tento Turingov stroj počíta funkciu f s jedným argumentom, pre ktorú platí: { k, ak x 1 = 2k, f(x 1 ) = k + 1, ak x 1 = 2k + 1. (Inými slovami, platí f(x) = x 2.) Jemne upravený Turingov stroj { 00Ls 3, 10Rs 1, s 1 00Ns 2, s 1 11R, s 2 00Ns 2 } zasa počítal funkciu g s jedným argumentom, pre ktorú platí: { = k, ak x 1 = 2k, g(x 1 ) nie je definované, ak x 1 = 2k + 1. Všimnime si, že d alšia malá úprava tohto stroja, a to { 00Ls 3, 10Rs 1, s 1 00Ns 2, s 1 11R, s 2 00Ns 2 }, počíta tú istú funkciu g. Vidíme teda, že jednu funkciu môže počítat i viacero rôznych Turingových strojov. Avšak naopak to neplatí každý Turingov stroj počíta práve jednu funkciu s daným počtom argumentov. oteraz sme hl adali funkcie, ktoré hl adajú dané Turingove stroje. Úloha je však vel mi často úplne opačná k danej funkcii treba nájst Turingov stroj, ktorý ju počíta. Skúsme teda nájst (čiže naprogramovat ) Turingov stroj, ktorý počíta obvyklú funkciu Súčet. Tá má dva argumenty, ako vstup výsledného Turingovho stroja teda bude slúžit l ubovol ná dvojica prirodzených čísel. Zároveň je táto funkcia totálna (teda jej definičný obor je celé N N), Turingov stroj teda musíme naprogramovat tak, aby zastal pre každý

1.1 Základné princípy práce Turingovho stroja 5 vstup. Vieme, že pri vstupe x 1, x 2 je na začiatku na páske (x 1 + 1) + (x 2 + 1) jednotiek, čo je o dve viac, než naozaj treba. Úlohou teda bude dve z týchto jednotiek zmenit na nuly. Ktoré to budú? Máme, pravdaže, viacero možností. Zdanlivo najjednoduchšia je vymazat prvé dve jednotky, vec však má háčik čo ak bude prvý vstup 0? ruhá vymazaná jednotka bude musiet byt v takom prípade z druhého bloku, a navyše budeme musiet testovat, či tento prípad nastáva, alebo nie. Tomuto testovaniu sa vyhneme, ak budeme (spolu s prvou jednotkou prvého bloku, na ktorej je hlava na začiatku priamo nastavená) mazat prvú jednotku druhého bloku (čiže nahradzovat nulou) pre úplne každý vstup. Vezmime si teda nejaký netriviálny vstup, napríklad 3, 2 (na konci má teda na páske zostat Súčet(3, 2) = 3 + 2 = 5 jednotiek): 0 1 1 1 1 0 1 1 1 0 0 0... Najprv, samozrejme, vymažeme jednotku, na ktorej je nastavená hlava. Pritom sa posunieme na d alšiu jednotku. Pokial ide o stav, bolo by fatálnou chybou nezmenit ho, príslušná inštrukcia 10R by sa totiž nevykonala iba raz, ale nenávratne by vymazala celý prvý blok jednotiek. Ten však v celkovom výsledku potrebujeme, a nemôžeme ho teda v žiadnom prípade stratit. Preto zmeníme stav na iný, povedzme na s 1. Po vykonaní príslušnej inštrukcie 10Rs 1 sa tak dostávame do konfigurácie s 1 0 0 1 1 1 0 1 1 1 0 0 0... Teraz je naším ciel om prejst celým zvyšným blokom jednotiek. V našom prípade sú tri, na prechod by preto stačilo použit tri d alšie inštrukcie. Uvedomme si, že náš program túto hodnotu x 1 vo všeobecnosti nepozná (vstupná konfigurácia je predsa zadávaná až neskôr), musí si preto poradit s l ubovol nou jej hodnotou. Našt astie existuje elegantné riešenie stačí použit inštrukciu s 1 11Rs 1. Ako l ahko vidiet, po jej prvom vykonaní sme opät v rovnakom stave s 1 a hlava je opät na znaku 1, preto sa táto inštrukcia použije vzápätí znova. L ahko vidiet, že takto sa to bude opakovat v našom prípade trikrát, vo všeobecnosti x 1 -krát. ostávame tak postupne konfigurácie s 1 s 1 s 1 0 0 1 1 1 0 1 1 1 0 0 0... 0 0 1 1 1 0 1 1 1 0 0 0... 0 0 1 1 1 0 1 1 1 0 0 0... Teraz sa už jednoducho posunieme z deliacej nuly na prvú jednotku druhého bloku, pričom musíme zmenit stav, aby sme nechtiac neprešli cez celý druhý blok až na jeho koniec. Vykonáme teda inštrukciu s 1 00Rs 2 a dostávame: s 2 0 0 1 1 1 0 1 1 1 0 0 0... Napokon stačí vymazat jednotku, na ktorej je hlava nastavená, a ked že sa tým pádom získa správny počet jednotiek, zmeníme stav na doposial nepoužitý, a to inštrukciou s 2 10Ns 3 : s 3 0 0 1 1 1 0 0 1 1 0 0 0... Výsledný Turingov stroj je teda { 10Rs 1, s 1 11Rs 1, s 1 00Rs 2, s 2 10Ns 3 }. Zostrojme ešte Turingov stroj, ktorý počíta funkciu Rozdiel. Tá má tiež dva argumenty, ako vstup výsledného Turingovho stroja teda bude slúžit l ubovol ná dvojica prirodzených čísel. Na rozdiel od predchádzajúcej funkcie však táto totálna nie je ved napr. hodnota Rozdiel(1, 2) nie je (na prirodzených číslach) definovaná. Znamená to, že

1.1 Základné princípy práce Turingovho stroja 6 pre niektoré vstupy (presnejšie práve tie x 1, x 2, pre ktoré platí x 1 < x 2 ) sa výpočet na Turingovom stroji nesmie zastavit. Myšlienka Turingovho stroja, ktorý budeme konštruovat, je založená na rovnosti hodnôt Rozdiel(x 1, x 2 ) a Rozdiel(x 1 1, x 2 1) (a v prípade, že nie je jedna z nich definovaná, ani druhá nie je definovaná). Budeme striedavo mazat jednotky (teda prepisovat ich nulami) z oboch blokov (pričom začneme druhým) a to až dovtedy, kým jeden z blokov nezanikne. V prípade, že skôr zanikne druhý blok, platí x 1 x 2, a teda výsledkom je počet jednotiek v (už redukovanom) prvom bloku, avšak zmenšený o 1 (ked že sme začali mazat z druhého bloku, z prvého sme zatial vymazali o jednu jednotku menej). V prípade, že skôr zanikne prvý blok, platí x 1 < x 2, a teda výpočet na stroji sa nemá zastavit. Ešte sa musíme rozhodnút, ktoré jednotky z oboch blokov budeme mazat. Všetky možnosti tu síce vedú k ciel u, ak však budeme mazat prvú jednotku z prvého bloku a poslednú z druhého, zachováme si výhodu existencie jedinej deliacej nuly. Majme teda konfiguráciu 0 1 1 1... 1 0 1 1 1... 1 0 0 0... Najprv sa musíme presunút na poslednú jednotku druhého bloku. Na prechod jednotkami prvého bloku stačí niekol kokrát použitá inštrukcia 11R, 0 1 1 1... 1 0 1 1 1... 1 0 0 0... 0 1 1 1... 1 0 1 1 1... 1 0 0 0.... 0 1 1 1... 1 0 1 1 1... 1 0 0 0... 0 1 1 1... 1 0 1 1 1... 1 0 0 0... Cez deliacu nulu prejdeme pomocou inštrukcie 00Rs 1 : s 1 0 1 1 1... 1 0 1 1 1... 1 0 0 0... ruhý blok prejdeme pomocou inštrukcie s 1 11Rs 1. s 1 s 1 s 1 s 1 0 1 1 1... 1 0 1 1 1... 1 0 0 0... 0 1 1 1... 1 0 1 1 1... 1 0 0 0.... 0 1 1 1... 1 0 1 1 1... 1 0 0 0... 0 1 1 1... 1 0 1 1 1... 1 0 0 0... Jedným krokom spät (pomocou inštrukcie s 1 00Ls 2 ) sa dostaneme na požadovanú poslednú jednotku druhého bloku:

1.1 Základné princípy práce Turingovho stroja 7 s 2 0 1... 1 1 1 0 1... 1 1 1 1 0 0 0... Vymažeme jednotku pod hlavou a posunieme sa dol ava (pomocou inštrukcie s 2 10Ls 3 ): s 3 0 1... 1 1 1 0 1... 1 1 1 0 0 0 0... Teraz musíme skontrolovat, či sme týmto vymazaním nespôsobili úplný zánik druhého bloku. Toto testovanie urobíme pomocou dvojice inštrukcíı s 3 00Ls 8 a s 3 11Ls 4 : Ak je znak hlavy 0, znamená to, že druhý blok sa minul (t. j. x 2 = 0) a sme na deliacej nule: s 3 0 1... 1 1 1 0 0 0 0... Ako sme už povedali, v takom prípade ešte treba vymazat jednu jednotku z prvého bloku. Vykonáme teda najprv inštrukciu s 3 00Ls 8 (stavy s 5, s 6 a s 7 ešte budeme potrebovat ): s 8 0 1... 1 1 1 0 0 0 0... a potom inštrukciu s 8 10Ns 9. s 9 0 1... 1 1 0 0 0 0 0... Na páske tak ostalo práve x 1 jednotiek, čo sme potrebovali. Ak je znak hlavy 1, znamená to, že druhý blok sa ešte neminul a treba sa teda presunút na prvú jednotku prvého bloku. Po vykonaní inštrukcie s 3 11Ls 4 teda dostávame: s 4 0 1... 1 1 1 0 1... 1 1 1 0 0 0 0... Cez druhý blok prejdeme niekol konásobným opakovaným vykonaním inštrukcie s 4 11Ls 4 : s 4 s 4 s 4 s 4 0 1... 1 1 1 0 1... 1 1 1 1 0 0 0 0... 0 1... 1 1 1 0 1... 1 1 1 1 0 0 0 0.... 0 1... 1 1 1 0 1... 1 1 1 1 0 0 0 0... 0 1... 1 1 1 0 1... 1 1 1 1 0 0 0 0... cez deliacu nulu jednorazovo inštrukciou s 4 00Ls 5, s 5 0 1... 1 1 1 0 1... 1 1 1 1 0 0 0 0... a cez prvý blok niekol konásobným použitím inštrukcie s 5 11Ls 5 :

1.1 Základné princípy práce Turingovho stroja 8 s 5 s 5 s 5 s 5 0 1... 1 1 1 0 1... 1 1 1 1 0 0 0 0... 0 1... 1 1 1 0 1... 1 1 1 1 0 0 0 0..... 0 1... 1 1 1 0 1... 1 1 1 1 0 0 0 0... 0 1... 1 1 1 0 1... 1 1 1 1 0 0 0 0... Inštrukciou s 5 00Rs 6 sa vrátime na prvú jednotku prvého bloku: s 6 0 1 1 1... 1 0 1 1 1... 1 0 0 0 0... A vymažeme ju inštrukciou s 6 10Rs 7 (pozor, nie s 6 10Rs 6, to by sme stratili celý prvý blok!): s 7 0 0 1 1... 1 0 1 1 1... 1 0 0 0 0... Teraz však musíme otestovat, či sme týmto vymazaním nespôsobili zánik tentoraz prvého bloku: Ak je na mieste hlavy nula, prvý blok jednotiek sa práve minul, a vtedy, ako vieme sa výpočet nemá skončit. Tu nám pomôžeme inštrukcia s 7 00Ns 7, ktorej opakované vykonávanie sa už nikdy neskončí. s 7 s 7 s 7 0 0 0 1 1 1... 1 0 0 0 0... 0 0 0 1 1 1... 1 0 0 0 0... 0 0 0 1 1 1... 1 0 0 0 0... Ak je na mieste hlavy jednotka, prvý blok jednotiek sa ešte neskončil. V takom prípade sa však stačí prepnút do stavu inštrukciou s 7 11N :. 0 0 1 1... 1 0 1 1 1... 1 0 0 0 0... Takto sme sa totiž dostali do situácie, v ktorej sme už raz boli, jediným rozdielom je, že v oboch blokoch ubudlo po jednej jednotke. A celý cirkus sa môže začat nanovo. Vyzbieraním všetkých použitých inštrukcíı tak dostávame výsledný Turingov stroj {00Rs 1, 11R, s 1 00Ls 2, s 1 11Rs 1, s 2 10Ls 3, s 3 00Ls 8, s 3 11Ls 4, s 4 00Ls 5, s 4 11Ls 4, s 5 00Rs 6, s 5 11Ls 5, s 6 10Rs 7, s 7 00Ns 7, s 7 11N, s 8 10Ns 9 }. Odkrokujme ho pre vstup 2, 1 : 0 1 1 1 0 1 1 0 0 0... 0 1 1 1 0 1 1 0 0 0... 0 1 1 1 0 1 1 0 0 0... 0 1 1 1 0 1 1 0 0 0...

1.2 Formalizácia základných pojmov 9 s 1 s 1 s 1 s 2 s 3 s 4 s 5 s 5 s 5 s 5 s 6 s 7 s 1 s 1 s 2 s 3 s 8 s 9 s 9 0 1 1 1 0 1 1 0 0 0... 0 1 1 1 0 1 1 0 0 0... 0 1 1 1 0 1 1 0 0 0... 0 1 1 1 0 1 1 0 0 0... 0 1 1 1 0 1 0 0 0 0... 0 1 1 1 0 1 0 0 0 0... 0 1 1 1 0 1 0 0 0 0... 0 1 1 1 0 1 0 0 0 0... 0 1 1 1 0 1 0 0 0 0... 0 1 1 1 0 1 0 0 0 0... 0 1 1 1 0 1 0 0 0 0... 0 0 1 1 0 1 0 0 0 0... 0 0 1 1 0 1 0 0 0 0... 0 0 1 1 0 1 0 0 0 0... 0 0 1 1 0 1 0 0 0 0... 0 0 1 1 0 1 0 0 0 0... 0 0 1 1 0 1 0 0 0 0... 0 0 1 1 0 1 0 0 0 0... 0 0 1 1 0 0 0 0 0 0... 0 0 1 1 0 0 0 0 0 0... 0 0 1 0 0 0 0 0 0 0... 0 0 1 0 0 0 0 0 0 0... Aj na tomto odkrokovaní sme si mohli všimnút, že napriek svojej extrémnej jednoduchosti sú Turingove stroje schopné simulovat jednak vetvenie (v prípade predchádzajúceho stroja sa tak dialo v stavoch s 3 a s 7 ), jednak cyklus (ked sme sa zo stavu s 7 opät dostali do stavu ), ktorý sa končil testom (šlo teda o cyklus neprávom zaznávaného typu repeat-until ). Všimnime si ešte pravú hranicu časti pásky, po ktorej sa hlava pohybuje počas (konečného) výpočtu. V tomto prípade sa dala až na poĺıčko za druhý blok. Index takéto poĺıčka budeme nazývat rozsah výpočtu.

1.2 Formalizácia základných pojmov 10 1.2 Formalizácia základných pojmov V tejto stati budeme formalizovat všetky pojmy zo state predchádzajúcej. Začnime inštrukciami a programom Turingovho stroja: Abeceda Turingových strojov bude tvorená týmito znakmi: Stavmi nazývame všetky prirodzené čísla, ich množinu označíme Stavy. Písmenami nazývame čísla 0 a 1, ich množinu označíme Písmená. Posunmi nazývame čísla 0, 1 a 2, ich množinu označíme Posuny. P Budeme používat tieto sprehl adňujúce označenia: Pri stavoch namiesto i budeme často písat s i, farebne budeme v takom prípade zapisovat aj konkrétny index. Pri páskových písmenách namiesto 0 a 1 budeme písat 0 a 1. Pri posunoch namiesto 0, 1 a 2 budeme písat (v tomto poradí) L ( left vl avo), N ( nowhere nikam) a R ( right vpravo). Inštrukciou nazývame každú usporiadanú päticu z množiny Množinu všetkých inštrukcíı označíme Inštrukcie. Stavy Písmená Písmená Posuny Stavy. Typickou inštrukciou je napríklad s 3, 1, 0, L, s 4 (čo je inak zapísaná pätica 3, 1, 0, 0, 4 ). P Vzhl adom na jednoznačnost a snahu o čo najjednoduchší zápis budeme špicaté zátvorky a čiarky v zápise inštrukcie vynechávat. Predchádzajúcu inštrukciu s 3, 1, 0, L, s 4 teda budeme zapisovat s 3 10Ls 4 (ako sme to už napokon robili v predošlej stati). efinujme nasledujúce funkcie z množiny Inštrukcie: StarýStav je funkcia do množiny Stavy, kde StarýStav(I) = P 5 1(I). StaréPísmeno je funkcia do množiny Písmená, kde StaréPísmeno(I) = P 5 2(I). NovéPísmeno je funkcia do množiny Písmená, kde NovéPísmeno(I) = P 5 3(I). Posun je funkcia do množiny Posuny, kde Posun(I) = P 5 4(I). NovýStav je funkcia do množiny Stavy, kde NovýStav(I) = P 5 5(I). StarýStav(s 3 10Ls 4 ) = s 3 (= 3). StaréPísmeno(s 3 10Ls 4 ) = 1 (= 1). NovéPísmeno(s 3 10Ls 4 ) = 0 (= 0). Posun(s 3 10Ls 4 ) = L (= 0). NovýStav(s 3 10Ls 4 ) = s 4 (= 4). Turingov stroj (alebo častejšie len stroj) definujeme ako konečnú množinu inštrukcíı takých, že žiadne dve nemajú prvé dva znaky rovnaké, t. j. ak inštrukcie I 1 a I 2 patria do predmetnej množiny, tak z platnosti vzt ahov StarýStav(I 1 ) = StarýStav(I 2 ) a StaréPísmeno(I 1 ) = StaréPísmeno(I 2 ) vyplýva I 1 = I 2. Množinu Turingových strojov označíme TuringoveStroje.

1.2 Formalizácia základných pojmov 11 P Špeciálne je tiež Turingov stroj. Množina inštrukcíı {s 1 11Rs 1, 10Rs 1, s 3 10Ns 7, s 2 11Rs 2, s 1 00Rs 2, s 2 00Ls 3 } je Turingov stroj, lebo žiadne dve jej inštrukcie sa nezhodujú v prvých dvoch znakoch. Množina inštrukcíı {s 1 11Rs 1, 10Rs 1, s 3 10Ns 7, s 2 11Rs 2, s 1 10Rs 2, s 2 00Ls 3 } nie je Turingov stroj, lebo obsahuje inštrukcie s 1 11Rs 1 a s 1 10Rs 2, ktoré majú prvé dva znaky rovnaké. P Inštrukcie Turingovho stroja možno zoradit lexikograficky (t. j. najprv podl a stavu na prvom a potom podl a písmena na druhom mieste), možno ho teda alternatívne (a ekvivalentne) považovat za konečnú postupnost lexikograficky usporiadaných inštrukcíı. Predchádzajúci Turingov stroj teda možno chápat ako túto (lexikograficky usporiadanú) postupnost : 10Rs 1, s 1 00Rs 2, s 1 11Rs 1, s 2 00Ls 3, s 2 11Rs 2, s 3 10Ns 7. V1 L ubovol ná podmnožina Turingovho stroja je Turingov stroj. Nech T je Turingov stroj a U je jeho podmnožina. Nech I 1 a I 2 patria do množiny U. Potom I 1 a I 2 patria aj do jej nadmnožiny T, a teda sú to inštrukcie. Nech navyše platia vzt ahy StarýStav(I 1 ) = StarýStav(I 2 ) a StaréPísmeno(I 1 ) = StaréPísmeno(I 2 ). Ked že I 1, I 2 T a T je Turingov stroj, tak I 1 = I 2. efinujme funkciu StaréStavy z množiny TuringoveStroje do množiny P(Stavy) takto: Ak T je Turingov stroj, tak StaréStavy(T ) = {s : ( I T )s = StarýStav(I)}. Ak T = { 11Ls 1, s 1 01Ls 2, s 1 10Ns 4, s 5 10Ns 1 }, tak StaréStavy(T ) = {, s 1, s 5 }. efinujme funkciu NovéStavy z množiny TuringoveStroje do množiny P(Stavy) takto: Ak T je Turingov stroj, tak NovéStavy(T ) = {s : ( I T )s = NovýStav(I)}. Ak T = { 11Ls 1, s 1 01Ls 2, s 1 10Ns 4, s 5 10Ns 1 }, tak NovéStavy(T ) = {s 1, s 2, s 4 }. efinujme funkciu PoužitéStavy z množiny TuringoveStroje do množiny P(Stavy) takto: Ak T je Turingov stroj, tak PoužitéStavy(T ) = StaréStavy(T ) NovéStavy(T ). Ak T = { 11Ls 1, s 1 01Ls 2, s 1 10Ns 4, s 5 10Ns 1 }, tak PoužitéStavy(T ) = {, s 1, s 2, s 4, s 5 }. V2 Nech T U je Turingov stroj. Potom platí: StaréStavy(T U) = StaréStavy(T ) StaréStavy(U). NovéStavy(T U) = NovéStavy(T ) NovéStavy(U). PoužitéStavy(T U) = PoužitéStavy(T ) PoužitéStavy(U). Podl a vety 1 máme, že ako T, tak U sú Turingove stroje, všetky uvedené množiny teda existujú. Pre l ubovol ný stav s platí: s StaréStavy(T U),

1.2 Formalizácia základných pojmov 12 akk existuje inštrukcia I z T U, že s = StarýStav(I) (podl a definície StaréStavy), akk existuje inštrukcia I z T alebo z U, že s = StarýStav(I), akk existuje inštrukcia I z T, že s = StarýStav(I) alebo existuje inštrukcia I z U, že s = StarýStav(I), akk s StaréStavy(T ) alebo s StaréStavy(U), akk s StaréStavy(T ) StaréStavy(U). Z toho už vyplýva dokazovaná rovnost. Pre l ubovol ný stav s platí: s NovéStavy(T U), akk existuje inštrukcia I z T U, že s = NovýStav(I) (podl a definície NovéStavy), akk existuje inštrukcia I z T alebo z U, že s = NovýStav(I), akk existuje inštrukcia I z T, že s = NovýStav(I) alebo existuje inštrukcia I z U, že s = NovýStav(I), akk s NovéStavy(T ) alebo s NovéStavy(U), akk s NovéStavy(T ) NovéStavy(U). Z toho už vyplýva dokazovaná rovnost. PoužitéStavy(T U), = StaréStavy(T U) NovéStavy(T U) (podl a definície PoužitéStavy), = (StaréStavy(T ) StaréStavy(U)) (NovéStavy(T ) NovéStavy(U)) (podl a už dokázaných častí), = (StaréStavy(T ) NovéStavy(T )) (StaréStavy(U) NovéStavy(U)) PoužitéStavy(T ) PoužitéStavy(U) (podl a definície PoužitéStavy). efinujme funkciu HyperaktívneStavy z množiny TuringoveStroje do množiny P(Stavy) takto: Ak T je Turingov stroj, tak HyperaktívneStavy(T ) = {s StaréStavy(T ) : ( I 0 T )(StarýStav(I 0 ) = s StaréPísmeno(I 0 ) = 0) Stavy z tejto množiny nazveme hyperaktívne. ( I 1 T )(StarýStav(I 1 ) = s StaréPísmeno(I 1 ) = 1)}. Ak T = { 11Ls 1, s 1 01Ls 2, s 1 10Ns 4, s 5 10Ns 1 }, tak HyperaktívneStavy(T ) = {s 1 }, lebo v T existuje aj ako inštrukcia začínajúca sa na s 1 0, tak inštrukcia začínajúca sa na s 1 1. V3 Ak T U je Turingov stroj, tak HyperaktívneStavy(T ) HyperaktívneStavy(T U). Podl a vety 1 máme, že T je Turingov stroj, množina HyperaktívneStavy(T ) teda existuje. Nech s HyperaktívneStavy(T ), teda v množine StaréStavy(T ) existujú inštrukcie I 0 a I 1 také, že platí StaréPísmeno(I 0 ) = 0, StaréPísmeno(I 1 ) = 1 a s = StarýStav(I 0 ) = StarýStav(I 1 ). Tieto inštrukcie sú podl a vety 2 aj v StaréStavy(T U), a teda platí s HyperaktívneStavy(T U). Z toho už vyplýva dokazovaná rovnost. efinujme funkciu PasívneStavy z množiny TuringoveStroje do množiny P(Stavy) takto: Ak T je Turingov stroj, tak PasívneStavy(T ) = {s PoužitéStavy(T ) :

1.2 Formalizácia základných pojmov 13 Stavy z tejto množiny nazveme pasívne. ( I T )(StarýStav(I) = s StaréPísmeno(I) = 0) ( I T )(StarýStav(I) = s StaréPísmeno(I) = 1)}. Ak T = { 11Ls 1, s 1 01Ls 2, s 1 10Ns 4, s 5 10Ns 1 }, tak PasívneStavy(T ) = {s 2, s 4 }, lebo stavy s 2 a s 4 síce sú použité, ale v T neexistuje žiadna inštrukcia začínajúca sa na s 2 ani na s 4. efinujme funkciu MaximálnyStav z množiny TuringoveStroje do množiny Stavy takto: Ak T je Turingov stroj, tak { 0, ak T =, MaximálnyStav(T ) = max(použitéstavy(t )) inak. Namiesto MaximálnyStav budeme písat iba Max. Ak T = { 11Ls 1, s 1 01Ls 2, s 1 10Ns 4, s 5 10Ns 1 }, tak Max(T ) = max{, s 1, s 2, s 4, s 5 } = s 5 = 5. Teraz sa zameriame na konfiguráciu a jej položky: Pod páskou rozumieme (nekonečnú) postupnost páskových písmen obsahujúcu len konečne vel a písmen 1. Množinu všetkých pások označíme Pásky. Páskou je napríklad funkcia p z N do Písmená, pre ktorú platí: { 1, ak i {1, 2, 3, 6, 7, 8, 9, 13, 14, 15}, p(i) = 0 inak. Jej obrázok je takýto: 0 1 1 1 0 0 1 1 1 1 0 0 0 1 1 1 0 0 0... Pod prázdnou páskou rozumieme (nekonečnú) postupnost 0. Budeme ju zapisovat 0. P Prázdna páska je tiež príkladom pásky (i ked trochu extrémnym). Jej obrázok je takýto: 0 0 0... Pod konfiguráciou rozumieme usporiadanú trojicu K = s, h, p, pričom platí: s je stav. h je prirodzené číslo. p je páska. Množinu všetkých konfigurácíı označíme Konfigurácie. Konfiguráciou je napríklad trojica s 3, 4, p, kde p je páska z predchádzajúceho príkladu. Túto konfiguráciu môžeme znázornit nasledujúcim obrázkom: s 3 0 1 1 1 0 0 1 1 1 1 0 0 0 1 1 1 0 0 0... efinujme nasledujúce funkcie z množiny Konfigurácie:

1.2 Formalizácia základných pojmov 14 Stav je funkcia do množiny Stavy, kde Stav(K) = P 3 1(K). Hlava je funkcia do množiny N, kde Hlava(K) = P 3 2(K). Páska je funkcia do množiny Pásky, kde Páska(K) = P 3 3(K). P Pre konfiguráciu K teda platí K = Stav(K), Hlava(K), Páska(K). Ak K je konfigurácia z predchádzajúceho príkladu, tak Hlava(K) = 4, Stav(K) = s 3 a napríklad (Páska(K))(0) = 0, (Páska(K))(1) = 1 a (Páska(K))(100) = 0. efinujme funkciu ČítanéPísmeno z množiny Konfigurácie do množiny Písmená vzt ahom ČítanéPísmeno(K) = (Páska(K))(Hlava(K)). P ČítanéPísmeno(K) je teda zarámované číslo 0 alebo 01 z obrázku konfigurácie K. Ak K je konfigurácia z predchádzajúceho príkladu, tak ČítanéPísmeno(K) = 0. Pod s-konfiguráciou rozumieme konfiguráciu K, pre ktorú platí Stav(K) = s. P Túto definíciu budeme obvykle používat pre prípad s =. -konfigurácia je napríklad 0 1 1 1 0 0 1 1 1 1 0 0 0 1 1 1 0 0 0... ale nie s 3 0 1 1 1 0 0 1 1 1 1 0 0 0 1 1 1 0 0 0... lebo je to s 3 -konfigurácia. efinujme funkciu KN z množiny N Pásky do množiny Konfigurácie vzt ahom KN(h, p) =, h, p. Ak p je páska 0 1 1 1 0 0 1 1 1 1 0 0 0 1 1 1 0 0 0... tak KN(4, p) je konfigurácia 0 1 1 1 0 0 1 1 1 1 0 0 0 1 1 1 0 0 0... Pripomeňme, že aby sme mohli v danej konfigurácii aplikovat danú inštrukciu, musia navzájom korešpondovat starý stav inštrukcie sa musí zhodovat so stavom konfigurácie a staré písmeno inštrukcie musí byt hlavou aktuálne čítané písmeno pásky. Aj za takej podmienky však môže nastat istý problém spôsobený tým, že naša páska má začiatok: Ak je totiž hlava na začiatku, inštrukcia by jej nemala prikázat íst vl avo. Formálne tento vzt ah definujeme takto: Hovoríme, že inštrukcia I korešponduje s konfiguráciou K, ak platia tieto podmienky: StarýStav(I) = Stav(K).

1.2 Formalizácia základných pojmov 15 StaréPísmeno(I) = ČítanéPísmeno(K). S konfiguráciou K s 3 0 1 1 1 0 0 1 1 1 1 0 0 0 1 1 1 0 0 0... korešponduje napríklad inštrukcia s 3 01Ls 5, pretože platia obe podmienky: StarýStav(s 3 01Ls 5 ) = s 3 = Stav(K). StaréPísmeno(s 3 01Ls 5 ) = 0 = (Páska(K))(4) = (Páska(K))(Hlava(K)) = ČítanéPísmeno(K). Všimnime si však, že s touto konfiguráciou korešpoduje i každá iná inštrukcia so začiatkom s 3 0. S predchádzajúcou konfiguráciou však nekorešponduje inštrukcia s 2 01Ls 5, lebo sa nezhodujú v stave, ani inštrukcia s 3 11Ls 5, lebo sa nezhodujú v písmene. Hovoríme, že inštrukcia I je aplikovatel ná na konfiguráciu K, ak platia tieto podmienky: I korešponduje s K. Neplatí naraz Hlava(K) = 0 a zároveň Posun(I) = L. Na predchádzajúcu konfiguráciu je aplikovatel ná spomínaná inštrukcia s 3 01Ls 5, pretože s ňou korešponduje, a navyše platí aj podmienka Hlava(K) = 4 0. Na konfiguráciu K s 6 1 1 1 1 0 0 0 0 1 1 0 0 0... je aplikovatel ná napríklad inštrukcia s 6 10Rs 5, pretože síce platí Hlava(K) = 0, ale Posun(s 6 10Rs 5 ) = R L. Naproti tomu inštrukcia s 6 10Ls 5 na ňu aplikovatel ná nie je, hoci s ňou korešponduje nie je totiž splnená tretia podmienka: platí ako Hlava(K) = 0, tak Posun(s 6 10Ls 5 ) = L. V4 (o jednoznačnosti aplikovatel nej inštrukcie) Nech sú I 1 a I 2 inštrukcie z toho istého stroja, pričom obe sú aplikovatel né na tú istú konfiguráciu. Potom I 1 = I 2. Nech K je predmetná konfigurácia. Podl a definície aplikovatel nosti pre obe inštrukcie platí: StarýStav(I 1 ) = Stav(K) = StarýStav(I 2 ). StaréPísmeno(I 1 ) = ČítanéPísmeno(K) = StaréPísmeno(I2 ). Z definície Turingovho stroja už dostávame I 1 = I 2. Touto vetou sme si zabezpečili determinovanost v každej konfigurácii možno z Turingovho stroja aplikovat bud práve jednu inštrukciu (a vtedy ju naozaj aj aplikujeme), alebo žiadnu (vtedy sa výpočet končí). Po aplikácii (samozrejme, aplikovatel nej) inštrukcie vznikne z pôvodnej konfigurácie nová, ktorá sa od nej bude spravidla mierne ĺıšit možno sa zmenilo jedno poĺıčko pásky, možno sa hlava posunula o jedno poĺıčko a možno nastala zmena stavu. Hovoríme, že inštrukcia I previedla konfiguráciu K na konfiguráciu L, a značíme K I L, ak platia tieto podmienky: I je aplikovatel ná na K.

1.2 Formalizácia základných pojmov 16 Stav(L) = NovýStav(I). Hlava(L) = Hlava(K) + (Posun(I) 1). {NovéPísmeno(I), ak i = Hlava(K), (Páska(L))(i) = (Páska(K))(i) inak. Ak na konfiguráciu s 3 0 1 1 1 0 0 1 1 1 1 0 0 0 1 1 1 0 0 0... aplikujeme inštrukciu s 3 01Ls 5, výsledná konfigurácia bude s 5 0 1 1 1 1 0 1 1 1 1 0 0 0 1 1 1 0 0 0... V súlade s inštrukciou sa zmenil obsah poĺıčka pôvodne čítaného hlavou, nastal posun hlavy a zmenil sa i stav. V5 (o determinovanosti kroku výpočtu) Nech sú I 1 a I 2 inštrukcie z toho istého stroja, nech K, L 1 a L 2 konfigurácie a nech K I1 L 1 a K I2 L 2. Potom I 1 = I 2 a L 1 = L 2. Podl a definície prevádzania sú ako I 1, tak I 2 aplikovatel né na K, a ked že sú obe z toho istého stroja T, podl a vety 4 platí I 1 = I 2. Z definície prevádzania potom dostávame: Stav(L 1 ) = NovýStav(I 1 ), = NovýStav(I 2 ), = Stav(L 2 ). Hlava(L 1 ) = Hlava(K) + (Posun(I 1 ) 1), = Hlava(K) + (Posun(I 2 ) 1), = Hlava(L 2 ). Rozoberme dva prípady: Nech i = Hlava(K). Potom platí: (Páska(L 1 ))(i) = NovéPísmeno(I 1 ), = NovéPísmeno(I 2 ) (lebo, ako už vieme, I 1 = I 2 ), = (Páska(L 2 ))(i). Nech i Hlava(K). Potom platí: (Páska(L 1 ))(i) = (Páska(K))(i), = (Páska(L 2 ))(i). Zhrnutím teda Páska(L 1 ) = Páska(L 2 ). Z toho dostávame L 1 = Stav(L 1 ), Hlava(L 1 ), Páska(L 1 ) = Stav(L 2 ), Hlava(L 2 ), Páska(L 2 ) = L 2. Prejdime ku vzt ahom konfigurácíı a Turingových strojov:

1.2 Formalizácia základných pojmov 17 efinujme funkciu Krok z podmnožiny množiny TuringoveStroje Konfigurácie do množiny Konfigurácie takto: { = L, ak v stroji T existuje inštrukcia I taká, že K I L, Krok(T, K) nie je definované inak. P Korektnost tejto definície zabezpečuje veta 5. Ak T = {s 3 01Ls 5, 00Rs 3 } a K je konfigurácia s 3 0 1 1 1 0 0 1 1 1 1 0 0 0 1 1 1 0 0 0... tak Krok(T, K) = L, kde L je konfigurácia s 5 0 1 1 1 1 0 1 1 1 1 0 0 0 1 1 1 0 0 0... Naproti tomu hodnota Krok(T, L) nie je definovaná. V6 Nech T U je Turingov stroj a K a L sú konfigurácie. Potom ak Krok(T, K) = L, tak aj Krok(T U, K) = L. Ak Krok(T, K) = L, tak existuje inštrukcia I z T, že platí K L. Avšak potom I T U, a teda platí Krok(T U, K) = L. Ako sme už naznačili, výpočet na Turingovom stroji môže dopadnút dvoma spôsobmi bud nastane konfigurácia, na ktorú už nemožno aplikovat žiadnu inštrukciu, a vtedy sa výpočet končí, alebo taká konfigurácia nenastane, a vtedy bude stroj počítat donekonečna. I Konečným výpočtom na Turingovom stroji T z konfigurácie K budeme nazývat konečnú postupnost konfigurácíı (K 0,..., K n ), pre ktorú platí: K 0 = K. Pre všetky prirodzené čísla i menšie ako n platí K i+1 = Krok(T, K i ). Hodnota Krok(T, K n ) nie je definovaná. Nekonečným výpočtom na Turingovom stroji T z konfigurácie K budeme nazývat nekonečnú postupnost konfigurácíı (K i : i N), pre ktorú platí: K 0 = K. Pre všetky prirodzené čísla i platí K i+1 = Krok(T, K i ). P Výpočtom na Turingovom stroji T z konfigurácie K budeme nazývat konečný alebo nekonečný výpočet na tomto stroji T z konfigurácie K. Výpočet na stroji z konfigurácie K je zrejme (K), je teda konečný. Nech T = {I 1, I 2, I 3 }, kde I 1 = 10Rs 1, I 2 = s 1 11Rs 1, I 3 = s 1 00R, a nech K je konfigurácia

1.2 Formalizácia základných pojmov 18 0 1 1 1 1 0 1 1 1 0 0 0... Potom výpočet na Turingovom stroji T z počiatočnej konfigurácie K vyzerá takto: K 0 = K: I 1 K1 : I 2 K2 : I 2 K3 : I 2 K4 : I 3 K5 : I 1 K6 : I 2 K7 : I 2 K8 : I 3 K9 : s 1 s 1 s 1 s 1 s 1 s 1 s 1 0 1 1 1 1 0 1 1 1 0 0 0... 0 0 1 1 1 0 1 1 1 0 0 0... 0 0 1 1 1 0 1 1 1 0 0 0... 0 0 1 1 1 0 1 1 1 0 0 0... 0 0 1 1 1 0 1 1 1 0 0 0... 0 0 1 1 1 0 1 1 1 0 0 0... 0 0 1 1 1 0 0 1 1 0 0 0... 0 0 1 1 1 0 0 1 1 0 0 0... 0 0 1 1 1 0 0 1 1 0 0 0... 0 0 1 1 1 0 0 1 1 0 0 0... Na konfiguráciu K 9 už nemožno aplikovat žiadnu inštrukciu z Turingovho stroja T, preto konečná postupnost (K 0, K 1, K 2, K 3, K 4, K 5, K 6, K 7, K 8, K 9 ) je konečný výpočet. Nech T = {I}, kde I = s 1 00Ns 1. Nech K je konfigurácia s 1 0 0 0 0... I Ked že K K, stroj sa nikdy nezastaví, t. j. výpočet na ňom je teda nekonečný, a to (K, K, K, K,... ). Naopak, pre konfiguráciu L s 1 1 0 0 0... je výpočet konečný, a to (L) (t. j. začiatočná konfigurácia je zároveň koncová), ked že jedinú inštrukciu I na L nemožno aplikovat. V7 (o jednoznačnosti výpočtu) Nech T je Turingov stroj a K konfigurácia. Potom existuje práve jeden výpočet na stroji T z konfigurácie K. Najprv ukážeme, že existuje aspoň jeden (konečný alebo nekonečný) výpočet. efinujme indukciou postupnost konfigurácíı (K i : i N): 1 K 0 = K. { 2 K 0, ak neexistuje inštrukcia I aplikovatel ná na K i, Ki+1 = Krok(T, K i ) inak. Rozoberme dva prípady: Nech n je najmenšie také prirodzené číslo, že nastal prvý prípad, teda neexistuje inštrukcia I aplikovatel ná na K n. To však podl a definície znamená, že (K 0,..., K n ) je konečný výpočet na stroji T z konfigurácie K.

1.2 Formalizácia základných pojmov 19 Nech pre žiadne i nenastane prvý prípad. To však podl a definície znamená, že (K i : i N) je nekonečný výpočet na stroji T z konfigurácie K. Teraz ukážeme, že neexistujú dva rôzne výpočty. Rozoberme tri prípady: Nech (K 1 0,..., K 1 n 1 ) a (K 2 0,..., K 2 n 2 ) sú dva konečné výpočty na stroji T z konfigurácie K. Bez ujmy na všeobecnosti nech platí n 1 n 2. Indukciou dokážeme, že pre všetky i neprevyšujúce n 1 platí K 1 i = K2 i : 1 Podl a definície výpočtu K 1 0 = K = K 2 0. 2 Nech i < n 1. Potom platí: K 1 i+1 = Krok(T, K 1 i ) (podl a definície konečného výpočtu), = Krok(T, K 2 i ) (podl a indukčného predpokladu), = K 2 i+1 (podl a definície konečného výpočtu). Ak by platilo n 1 < n 2, tak K 2 n 1 +1 = Krok(T, K2 n 1 ), čo by znamenalo, že v T existuje inštrukcia aplikovatel ná na K 2 n 1, t. j. na K 1 n 1. Avšak (K 1 0,..., K 1 n 1 ) je konečný výpočet, a teda taká inštrukcia neexistuje. To znamená n 1 = n 2, a teda (K 1 0,..., K 1 n 1 ) = (K 2 0,..., K 2 n 2 ). Nech (K0, 1..., Kn 1 ) je konečný a (K 2 1 i : i N) nekonečný výpočet na stroji T z konfigurácie K. Indukciou dokážeme, že pre všetky i neprevyšujúce n 1 platí Ki 1 = K2 i : 1 Podl a definície výpočtu K 1 0 = K = K 2 0. 2 Nech i < n 1. Potom platí: K 1 i+1 = Krok(T, K 1 i ) (podl a definície konečného výpočtu), = Krok(T, K 2 i ) (podl a indukčného predpokladu), = K 2 i+1 (podl a definície nekonečného výpočtu). Ked že platí K 2 n 1 +1 = Krok(T, K2 n 1 ), v T existuje inštrukcia aplikovatel ná na K 2 n 1, t. j. na K 1 n 1. Avšak (K 1 0,..., K 1 n 1 ) je konečný výpočet, a teda taká inštrukcia neexistuje. Tento prípad teda nastat nemôže. Nech (K 1 i : i N) a (K 2 i : i N) sú dva nekonečné výpočty na stroji T z konfigurácie K. Indukciou dokážeme, že pre všetky i z N platí K 1 i = K2 i : 1 Podl a definície výpočtu K 1 0 = K = K 2 0. 2 Nech i < n 1. Potom platí: K 1 i+1 = Krok(T, K 1 i ) (podl a definície nekonečného výpočtu), = Krok(T, K 2 i ) (podl a indukčného predpokladu), = K 2 i+1 (podl a definície nekonečného výpočtu). To znamená, že (K 1 i : i N) = (K2 i : i N). efinujme funkciu Koniec z podmnožiny množiny TuringoveStroje Konfigurácie do množiny Konfigurácie takto: { = L, ak existuje konečný výpočet (K 0,..., K n ) na T z K, že L = K n, Koniec(T, K) nie je definované inak.

1.2 Formalizácia základných pojmov 20 Špeciálne Koniec(, K) = K pre každú konfiguráciu K. efinujme funkciu Rozsah z podmnožiny množiny TuringoveStroje Konfigurácie do množiny N takto: { = max{hlava(k i ) : i {0,..., n}}, ak (K 0,..., K n ) je konečný výpočet na T z K, Rozsah(T, K) nie je definované inak. P Korektnost týchto definícíı zabezpečuje veta 4. P P Podl a tejto vety tiež vidno, že obe hodnoty Koniec(T, K) a Rozsah(T, K) sú definované práve v prípade, že výpočet na T z K je konečný. Ak teda neexistuje Koniec(T, K), neexistuje ani Rozsah(T, K). V prípade funkcie Rozsah by teoreticky malo zmysel definovat hodnotu aj v prípade takého nekonečného výpočtu, ktorého každá konfigurácia má hlavu nepresahujúcu toto číslo. Tak by sme vedeli odĺıšit výpočty, ktoré používajú celú pásku, od tých, ktoré sa zrejme zacyklia (ked že pracujú s konečne vel a páskami, stavmi i hlavami). Takéto odĺıšenie však nebudeme potrebovat, zvolili sme preto jednoduchšiu verziu tejto funkcie. Nasledujúce vety si všímajú situáciu, ked sa o výpočet starajú dva kooperujúce stroje. V ideálnom prípade sa tak výpočet skladá z dvoch nezávislých etáp, z ktorých každú zabezpečuje iný stroj. Môže sa však, samozrejme, stat, že niektorá z etáp zlyhá. Máme teda takéto štyri rozumné možnosti: Ak má prvá etapa nekonečne vel a krokov, na druhú sa už vôbec nedostane. Celkový výpočet sa tak zhoduje s prvou etapou, je však nekonečný. Tento prípad rozoberá veta 8. Ak je prvá etapa konečná, ale končí sa v stave, na ktorý druhý stroj nevie zareagovat, celkový výpočet sa aj tu zhoduje s prvou etapou, a je teda konečný. To je prípad, ktorý má na starosti veta 9. Ak je prvá etapa konečná, ale druhá etapa má nekonečne vel a krokov, celkový výpočet má síce obe etapy, ale je nekonečný. Tomuto prípadu sa venuje veta 10. Ak sú obe etapy konečné, aj celkový výpočet je konečný. Toto rieši veta 11. V8 Nech T a U sú stroje také, že T U je stroj. Nech K je konfigurácia taká, že Koniec(T, K) neexistuje. Potom neexistuje ani Koniec(T U, K). Ked že neexistuje Koniec(T, K), existuje nekonečný výpočet na T z K. Nech je to (K i : i N). S (Ki : i N) je nekonečný výpočet na T U z K. V9 Overíme podmienky definície nekonečného výpočtu: K 0 = K, lebo (K i : i N) je nekonečný výpočet na T z K. Nech i N. Potom K i+1 = Krok(T, K i ), lebo (K 0,..., K n ) je konečný výpočet na T z K. Podl a vety 6 potom K i+1 = Krok(T U, K i ). Zo sublemy už priamo vyplýva dokazované tvrdenie. Nech T a U sú stroje také, že T U je stroj. Nech K a L sú konfigurácie taká, že Koniec(T, K) = L existuje a platí Stav(L) / StaréStavy(U). Potom platí: Koniec(T U, K) = Koniec(T, K). Rozsah(T U, K) = Rozsah(T, K). Ked že existuje Koniec(T, K), existuje konečný výpočet na T z K. Nech je to (K 0,..., K n ).

1.2 Formalizácia základných pojmov 21 S (K0,..., K n ) je konečný výpočet na T U z K. Overíme podmienky definície konečného výpočtu: K 0 = K, lebo (K 0,..., K n ) je konečný výpočet na T z K. Nech i {0,..., n 1}. Potom K i+1 = Krok(T, K i ), lebo (K 0,..., K n ) je konečný výpočet na T z K. Podl a vety 6 potom K i+1 = Krok(T U, K i ). Nech v T U existuje inštrukcia I aplikovatel ná na K n, t. j. na L. Podl a definície však potom StarýStav(I) = Stav(L), čo však podl a predpokladu Stav(L) / StaréStavy(U) znamená, že I / U. Z toho máme I T, v T teda existuje inštrukcia aplikovatel ná na K n, čo je spor. To teda znamená, že (K 0,..., K n ) je konečný výpočet na T U z K. Zo sublemy podl a definícíı Koniec a Rozsah platí: Koniec(T U, K) = K n = Koniec(T, K). Rozsah(T U, K) = max({hlava(k i ) : i {0,..., n}}) = Rozsah(T, K). V10 Nech T a U sú stroje také, že T U je stroj. Nech K a L sú konfigurácie také, že Koniec(T, K) = L, ale Koniec(U, L) neexistuje. Potom neexistuje ani Koniec(T U, K) Ked že existuje Koniec(T, K), existuje konečný výpočet na T z K. Nech je to (K 0,..., K n ). Ked že neexistuje Koniec(U, L), existuje nekonečný výpočet na U z L. Nech je to (L j : j N). Z toho máme, že K n = L = L 0. S (K0,..., K n 1, L 0, L 1,... ) je nekonečný výpočet na T U z K. Overíme podmienky definície nekonečného výpočtu: K 0 = K, lebo (K 0,..., K n ) je konečný výpočet na T z K. Rozĺıšime dva prípady: Nech i {0,..., n 1}. Potom K i+1 = Krok(T, K i ), lebo (K 0,..., K n ) je konečný výpočet na T z K. Podl a vety 6 potom K i+1 = Krok(T U, K i ). Nech j N. Potom L j+1 = Krok(U, L j ), lebo (L j : j N) je nekonečný výpočet na U z L. Podl a vety 6 potom L j+1 = Krok(T U, L j ). Zo sublemy už priamo vyplýva dokazované tvrdenie. V11 Nech T a U sú stroje také, že T U je stroj. Nech K, L a M sú konfigurácie také, že L = Koniec(T, K), M = Koniec(U, L) a Stav(M) / StaréStavy(T ). Potom platí: Koniec(T U, K) = M. Rozsah(T U, K) = max{rozsah(t, K), Rozsah(U, L)}. Ked že existuje Koniec(T, K), existuje konečný výpočet na T z K. Nech je to (K 0,..., K n ). Ked že existuje Koniec(U, L), existuje konečný výpočet na U z L. Nech je to (L 0,..., L m ). Z toho máme, že K n = L = L 0 a L m = M. S (K0,..., K n 1, L 0,..., L m ) je konečný výpočet na T U z K. Overíme podmienky definície konečného výpočtu:

1.2 Formalizácia základných pojmov 22 K 0 = K, lebo (K 0,..., K n ) je konečný výpočet na T z K. Rozĺıšime dva prípady: Nech i {0,..., n 1}. Potom K i+1 = Krok(T, K i ), lebo (K 0,..., K n ) je konečný výpočet na T z K. Podl a vety 6 potom K i+1 = Krok(T U, K i ). Nech j {0,..., m 1}. Potom L j+1 = Krok(U, L j ), lebo (L 0,..., L m ) je konečný výpočet na U z L. Podl a vety 6 potom L j+1 = Krok(T U, L j ). Nech v T U existuje inštrukcia I aplikovatel ná na L m, t. j. na M. Podl a definície však potom StarýStav(I) = Stav(M), čo však podl a predpokladu Stav(M) / StaréStavy(T ) znamená, že I / T. Z toho máme I U, v U teda existuje inštrukcia aplikovatel ná na L m, čo je spor. Zo sublemy podl a definícíı Koniec a Rozsah vyplýva: Koniec(T U, K) = L m = M. Rozsah(T U, K) = max({hlava(k i ) : i {0,..., n}} {Hlava(L j ) : j {0,..., m}}), = max{max({hlava(k i ) : i {0,..., n 1}}), max({hlava(l j ) : j {0,..., m}})}, = max{rozsah(t, K), Rozsah(U, L)}. Pripomeňme, že každý Turingov stroj vlastne počíta nejakú funkciu, ktorej vstupom je istý počet prirodzených čísel a výstupom jedno prirodzené číslo. Vstupy i výstup tejto funkcie sú zakódované na páske Turingovho stroja, a to rôznym spôsobom: Ak ide o n-árnu funkciu, jej n vstupov x 1,..., x n je na páske zakódovaných nasledujúcim spôsobom: Na začiatku pásky je jedno písmeno 0, po ktorom nasleduje x 1 + 1 písmen 1, takýmto blokom sa kóduje prvý vstup. (Tu si uvedomme dôvod takéhoto kódovania treba vediet kódovat i vstup 0.) Bezprostredne potom nasleduje d alší blok kódujúci druhý vstup, tvorený opät jedným písmenom 0, po ktorom tentoraz ide x 2 +1 písmen 1. Analogicky sú d alšími blokmi príslušnej dĺžky postupne kódované všetky ostatné vstupy. Po poslednom bloku už nasledujú len písmená 0. Hlava je pritom na prvej jednotke prvého bloku a stav stroja je. Pokial ide o výstup, môžu nastat dve možnosti: V prípade, že po konečnom počte krokov výpočtu nastane konfigurácia, ked už nemožno aplikovat žiadnu inštrukciu, a teda stroj zastal, hodnotou funkcie pre daný vstup je jednoducho počet páskových písmen 1 na aktuálnej páske, a to bez ohl adu na ich rozmiestnenie. (Uvedomme si pritom, že tento počet je naozaj konečný, lebo taký bol (podl a predchádzajúceho bodu) i na začiatku a v každom kroku výpočtu, ktorých je konečne vel a, sa mohol zväčšit najviac o 1.) Ak však možno aplikovat jednu z inštrukcíı po každom kroku výpočtu, t. j. stroj nikdy nezastane, funkcia nie je pre daný vstup definovaná. Opät pod me všetky pojmy definovat formálne: efinujme funkciu PočetJednotiek z množiny Pásky do N takto: Ak p je páska, tak PočetJednotiek(p) = {i N : p(i) = 1}. Ak p je páska 0 1 1 1 0 0 1 1 1 1 0 0 0 1 1 1 0 0 0...

1.2 Formalizácia základných pojmov 23 tak PočetJednotiek(p) = 10. P Všimnime si, že platí PočetJednotiek(p) = i N p(i). o tohto súčtu totiž každá jednotka na páske prispeje svojou hodnotou 1, kým nuly ho neovplyvnia. Konečný počet jednotiek na páske pritom zabezpečí, že súčet naozaj existuje. efinujme funkciu Výsledok z množiny TuringoveStroje Konfigurácie do N takto: Ak T je Turingov stroj a K je konfigurácia, tak { = PočetJednotiek(Páska(Koniec(T, K))), ak existuje Koniec(T, K), Výsledok(T, K) = nie je definovaný inak. Pripomeňme, že výpočet na stroji { 10Rs 1, s 1 11Rs 1, s 1 00R }, ktorý označíme T, z konfigurácie K 0 1 1 1 1 0 1 1 1 0 0 0... sa končil konfiguráciou Koniec(T, K) 0 0 1 1 1 0 0 1 1 0 0 0... To teda znamená, že Výsledok(T, K) = PočetJednotiek(Koniec(T, K)) = 5. efinujme funkciu Blok z množiny prirodzených čísel do množiny Písmená slov z abecedy Písmená vzt ahom Blok(x) = 01 x+1. Blok(3) = 01111, Blok(4) = 011111, Blok(0) = 01. efinujme pre každé n z N funkciu Bloky n indukciou: 1 Bloky 0 (e) = e. 2 Bloky n+1 (x 1,..., x n+1 ) = Bloky n (x 1,..., x n )Blok(x n+1 ). P Explicitne teda Bloky n (x 1,..., x n ) = Blok(x 1 ) Blok(x n ). Bloky 3 (2, 0, 3) = 01110101111. V12 Nech n, m N. Potom pre všetky prirodzené čísla x 1,..., x n a y 1,..., y m platí okážeme to indukciou: Bloky n (x 1,..., x n )Bloky m (y 1,..., y m ) = Bloky n+m (x 1,..., x n, y 1,..., y m ). 1 Bloky n (x 1,..., x n )Bloky 0 (e) = Bloky n (x 1,..., x n )e, = Bloky n (x 1,..., x n ), = Bloky n+0 (x 1,..., x n ).

1.2 Formalizácia základných pojmov 24 2 Bloky n (x 1,..., x n )Bloky m+1 (y 1,..., y m+1 ) = Bloky n (x 1,..., x n )Bloky m (y 1,..., y m )Blok(y m ) = Bloky n+m (x 1,..., x n, y 1,..., y m )Blok(y m ) (podl a indukčného predpokladu), = Bloky n+m+1 (x 1,..., x n, y 1,..., y m+1 ). efinujme funkciu PáskaPosunutáZaSlovo z množiny Pásky Písmená do množiny Pásky takto: Ak a 1... a n je slovo z Písmená a p je páska, tak { a i+1, ak i < n, (PáskaPosunutáZaSlovo(p, a 1... a n ))(i) = p(i n) inak. P Namiesto PáskaPosunutáZaSlovo(p, α) budeme písat αp. Ak teda i ĺžka(α), tak (αp)(i) = p(i ĺžka(α)). Ak α = 110100 a p je páska z prvého riadku, tak αp je páska z druhého riadku: p: αp: 0 1 1 1 0 0 1 1 1 1 0 0 0 1 1 1 0 0 0... 1 1 0 1 0 0 0 1 1 1 0 0 1 1 1 1 0 0 0 1 1 1 0 0 0... Nech n N. efinujme funkciu BlokováPáska n z množiny N n do Pásky vzt ahom BlokováPáska n (x 1,..., x n ) = Bloky n (x 1,..., x n )0. Namiesto BlokováPáska n budeme často písat BP n. Napríklad BP 3 (2, 0, 3) je 0 1 1 1 0 1 0 1 1 1 1 0 0 0... V13 Nech n, m N. Potom pre všetky prirodzené čísla x 1,..., x n a y 1,..., y m platí Bloky n (x 1,..., x n )BP m (y 1,..., y m ) Bloky n (x 1,..., x n )BP m (y 1,..., y m ) = BP n+m (x 1,..., x n, y 1,..., y m ). = Bloky n (x 1,..., x n )(Bloky m (y 1,..., y m )0 ), = (Bloky n (x 1,..., x n )Bloky m (y 1,..., y m ))0, = Bloky n+m (x 1,..., x n, y 1,..., y m )0 (podl a vety 12), = BP n+m (x 1,..., x n, y 1,..., y m ). Nech n je kladné prirodzené číslo a i {1,..., n}. efinujme funkciu BlokováKonfigurácia n i z množiny Stavy N n do množiny Konfigurácie vzt ahom i 1 BlokováKonfigurácia n i (s, x 1,..., x n ) = s, (x j + 2) + 1, BP n (x 1,..., x n ). j=1

1.2 Formalizácia základných pojmov 25 P Hodnota i 1 j=1 (x j + 2) + 1 znamená, že hlava je nastavená na prvej jednotke i. bloku. Funkciu BlokováKonfigurácia n i budeme písat kratšie BK n i. BK 3 1(, 2, 0, 3 ) je 0 1 1 1 0 1 0 1 1 1 1 0 0 0... BK 3 2(s 4, 2, 0, 3 ) je s 4 0 1 1 1 0 1 0 1 1 1 1 0 0 0... efinujme funkciu KonfiguráciaPosunutáZaSlovo z Konfigurácie Písmená do Konfigurácie takto: Ak α je slovo z Písmená a K je konfigurácia, tak KonfiguráciaPosunutáZaSlovo(K, α) je konfigurácia L, pre ktorú platí: Stav(L) = Stav(K). Hlava(L) = Hlava(K) + ĺžka(α). Páska(L) = αpáska(k). Namiesto KonfiguráciaPosunutáZaSlovo(K, α) budeme písat αk. Ak α = 110100 a K je konfigurácia z prvého riadku, tak αk je konfigurácia z druhého riadku: K: αk: s 3 s 3 0 1 1 1 0 0 1 1 1 1 0 0 0 1 1 1 0 0 0... 1 1 0 1 0 0 0 1 1 1 0 0 1 1 1 1 0 0 0 1 1 1 0 0 0... V14 Nech n, m N, i {1,..., m} a s Stavy. Potom pre všetky prirodzené čísla x 1,..., x n a y 1,..., y m platí Bloky n (x 1,..., x n )BK m i (s, y 1,..., y m ) = BK n+m n+i (s, x 1,..., x n, y 1,..., y m ). Overíme rovnost všetkých troch položiek konfigurácie: Stav(Bloky n (x 1,..., x n )BK m i (s, y 1,..., y m )) = Stav(BK m i (s, y 1,..., y m )), = s, = Stav(BK n+m n+i (s, x 1,..., x n, y 1,..., y m )). Hlava(Bloky n (x 1,..., x n )BK m i (s, y 1,..., y m )) = Hlava(BK n i (s, y 1,..., y m )) + ĺžka(blokyn (x 1,..., x n )), = ( i 1 j=1 (y j + 1) + 1) + n j=1 (x j + 1), = ( n j=1 (x j + 1) + i 1 j=1 (y j + 1)) + 1, = Hlava(BK n+1 n+i (s, x 1,..., x n, y 1,..., y m )). Páska(Bloky n (x 1,..., x n )BK m i (s, y 1,..., y m ) = Bloky n (x 1,..., x n )Páska(BK m i (s, y 1,..., y m )), = Bloky n (x 1,..., x n )BP m (y 1,..., y m ), = BP n+m (x 1,..., x n, y 1,..., y m )podl a vety 2,