Univerzita Karlova v Praze Matematicko-fyzikální fakulta BAKALÁŘSKÁ PRÁCE. Jan Vacek Universální Turingův stroj. Katedra algebry

Podobné dokumenty
TURINGOVY STROJE. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Složitost Filip Hlásek

NP-úplnost problému SAT

Vektory a matice. Obsah. Aplikovaná matematika I. Carl Friedrich Gauss. Základní pojmy a operace

Teorie informace a kódování (KMI/TIK) Reed-Mullerovy kódy

0.1 Úvod do lineární algebry

AUTOMATY A GRAMATIKY. Pavel Surynek. Kontextové uzávěrové vlastnosti Turingův stroj Rekurzivně spočetné jazyky Kódování, enumerace

Naproti tomu gramatika je vlastně soupis pravidel, jak

Matematika (CŽV Kadaň) aneb Úvod do lineární algebry Matice a soustavy rovnic

Rozšiřování = vynásobení čitatele i jmenovatele stejným číslem různým od nuly

PŘEDNÁŠKA 2 POSLOUPNOSTI

IB112 Základy matematiky

0.1 Úvod do lineární algebry

South Bohemia Mathematical Letters Volume 23, (2015), No. 1, DĚLENÍ KRUHU NA OBLASTI ÚVOD

M - Příprava na 1. zápočtový test - třída 3SA

M - Příprava na pololetní písemku č. 1

5 Orientované grafy, Toky v sítích

63. ročník Matematické olympiády 2013/2014

8.3). S ohledem na jednoduchost a názornost je výhodné seznámit se s touto Základní pojmy a vztahy. Definice

ŘEŠENÍ KVADRATICKÝCH A ZLOMKOVÝCH NEROVNIC V ŠESTI BODECH

Fakulta informačních technologií. Teoretická informatika

Výroková logika II. Negace. Již víme, že negace je změna pravdivostní hodnoty výroku (0 1; 1 0).

Vztah teorie vyčíslitelnosti a teorie složitosti. IB102 Automaty, gramatiky a složitost, /31

9 Kolmost vektorových podprostorů

Lineární algebra : Lineární prostor

Kolik existuje různých stromů na pevně dané n-prvkové množině vrcholů?

Limita a spojitost funkce. 3.1 Úvod. Definice: [MA1-18:P3.1]

1.3. Číselné množiny. Cíle. Průvodce studiem. Výklad

(Cramerovo pravidlo, determinanty, inverzní matice)

INTEGRÁLY S PARAMETREM

Jednoduché cykly

doplněk, zřetězení, Kleeneho operaci a reverzi. Ukážeme ještě další operace s jazyky, na které je

1 Linearní prostory nad komplexními čísly

Necht tedy máme přirozená čísla n, k pod pojmem systém lineárních rovnic rozumíme rovnice ve tvaru

Riemannův určitý integrál

V předchozí kapitole jsme podstatným způsobem rozšířili naši představu o tom, co je to číslo. Nadále jsou pro nás důležité především vlastnosti

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

MATICE. a 11 a 12 a 1n a 21 a 22 a 2n A = = [a ij]

Vektorové podprostory, lineární nezávislost, báze, dimenze a souřadnice

Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru:

6 Ordinální informace o kritériích

1 Řešení soustav lineárních rovnic

Báze a dimenze vektorových prostorů

Algoritmus pro hledání nejkratší cesty orientovaným grafem

INVESTICE DO ROZVOJE VZDĚLÁVÁNÍ. Modernizace studijního programu Matematika na PřF Univerzity Palackého v Olomouci CZ.1.07/2.2.00/28.

Komisionální přezkoušení 1T (druhé pololetí) 2 x. 1) Z dané rovnice vypočtěte neznámou x:. 2) Určete, pro která x R není daný výraz definován:

Mgr. et Mgr. Jan Petrov, LL.M. Ph.D. BYZNYS A PRÁVO

[1] Determinant. det A = 0 pro singulární matici, det A 0 pro regulární matici

JčU - Cvičení z matematiky pro zemědělské obory (doc. RNDr. Nýdl, CSc & spol.) Minitest MT4

Greenova funkce pro dvoubodové okrajové úlohy pro obyčejné diferenciální rovnice

Výběr báze. u n. a 1 u 1

PQ-stromy a rozpoznávání intervalových grafů v lineárním čase

f(c) = 0. cn pro f(c n ) > 0 b n pro f(c n ) < 0

Třídy složitosti P a NP, NP-úplnost

popel, glum & nepil 16/28

Úvod do informatiky. Miroslav Kolařík

Učební texty k státní bakalářské zkoušce Matematika Vlastní čísla a vlastní hodnoty. študenti MFF 15. augusta 2008

Zavedení a vlastnosti reálných čísel

GRAFY A GRAFOVÉ ALGORITMY

Definice. Vektorový prostor V nad tělesem T je množina s operacemi + : V V V, tj. u, v V : u + v V : T V V, tj. ( u V )( a T ) : a u V které splňují

Definice 7.2. Nejmenší přirozené číslo k, pro které je graf G k-obarvitelný, se nazývá chromatické číslo (barevnost) grafu G a značí se χ(g).

Derivace funkcí více proměnných

Příklad z učebnice matematiky pro základní školu:

Parametrická rovnice přímky v rovině

KAPITOLA 4 ZPRACOVÁNÍ TEXTU

Řešení úloh z TSP MU SADY S 1

5. Lokální, vázané a globální extrémy

Lingebraické kapitolky - Počítání s maticemi

7B. Výpočet limit L Hospitalovo pravidlo

Soustavy rovnic pro učební obory

Cykly a pole

označme j = (0, 1) a nazvěme tuto dvojici imaginární jednotkou. Potom libovolnou (x, y) = (x, 0) + (0, y) = (x, 0) + (0, 1)(y, 0) = x + jy,

Matematická logika. Miroslav Kolařík

Postup: Nejprve musíme vyplnit tabulku. Pak bude vypadat takto:

Semestrální z předmětu MM

6 Algebra blokových schémat

Logaritmická rovnice

Nechť je číselná posloupnost. Pro všechna položme. Posloupnost nazýváme posloupnost částečných součtů řady.

Unární je také spojka negace. pro je operace binární - příkladem může být funkce se signaturou. Binární je velká většina logických spojek

7 = 3 = = Učivo Vysvětlení Př. + pozn. Zlomek = vyjádření části celku 3 část snědla jsem 3 kousky

5. Náhodná veličina. 2. Házíme hrací kostkou dokud nepadne šestka. Náhodná veličina nabývá hodnot z posloupnosti {1, 2, 3,...}.

IV. Základní pojmy matematické analýzy IV.1. Rozšíření množiny reálných čísel

Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly.

Matematická analýza pro informatiky I. Limita posloupnosti (I)

FUNKCE 3. Autor: Mgr. Dana Kaprálová. Datum (období) tvorby: září, říjen Ročník: sedmý. Vzdělávací oblast: Informatika a výpočetní technika

Třída PTIME a třída NPTIME. NP-úplnost.

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

a se nazývá aritmetická právě tehdy, když existuje takové číslo d R

Matematika B101MA1, B101MA2

Dijkstrův algoritmus

Množinu všech slov nad abecedou Σ značíme Σ * Množinu všech neprázdných slov Σ + Jazyk nad abecedou Σ je libovolná množina slov nad Σ

Nyní využijeme slovník Laplaceovy transformace pro derivaci a přímé hodnoty a dostaneme běžnou algebraickou rovnici. ! 2 "

1 Mnohočleny a algebraické rovnice

16. Goniometrické rovnice

Algoritmizace a programování

3. podzimní série. ... {z }

Úlohy krajského kola kategorie C

Matematika III. Miroslava Dubcová, Daniel Turzík, Drahoslava Janovská. Ústav matematiky

12 DYNAMIKA SOUSTAVY HMOTNÝCH BODŮ

Transkript:

Univerzita Karlova v Praze Matematicko-fyzikální fakulta BAKALÁŘSKÁ PRÁCE Jan Vacek Universální Turingův stroj Katedra algebry Vedoucí bakalářské práce: prof. RNDr. Jan Krajíček, DrSc. Studijní program: Matematika, Obecná matematika 2010

Na tomto místě bych chtěl poděkovat vedoucímu práce profesorovi Janu Krajíčkovi za odbornou pomoc, Haně Cermonové za korekturu a všem blízkým, kteří mě podporovali. Prohlašuji, že jsem svou bakalářskou práci napsal samostatně a výhradně s použitím citovaných pramenů. Souhlasím se zapůjčováním práce a jejím zveřejňováním. V Praze dne 22.května 2010 Jan Vacek 2

Obsah 1 Úvod 5 1.1 Definice Univerzálního Turingova stroje... 5 2 Konstrukce Univerzálního Turingova stroje 8 2.1 Kódování Turingova stroje... 8 2.2 Konstrukce Univerzálního Turingova stroje... 11 3 Složitost Univerzálního Turingova stroje 26 3.1 Časová složitost stroje U... 26 Literatura 35 3

Název práce: Universální Turingův stroj Autor: Jan Vacek Katedra: Katedra algebry Vedoucí bakalářské práce: prof. RNDr. Jan Krajíček, DrSc. e-mail vedoucího: krajicek@karlin.mff.cuni.cz Abstrakt: V předložené práci studujeme Univerzální Turingův stroj. Konkrétně se zabýváme jeho konstrukcí. Sestrojený Univerzální Turingův stroj pro zadaný Turingův stroj T a nějaký jeho vstup simuluje chod tohoto stroje. Pro naší konstrukci jsme předpokládali, že Turingův stroj T má binární vstupní abecedu, že se jeho pracovní abeceda skládá ze symbolů 0, 1 a symbolu pro prázdné políčko. Dále jsme ještě předpokládali, že má nekonečnou pásku pouze směrem vpravo. Na takový tvar ale můžeme převést libovolný Turingův stroj. Nijak jsme tím tedy neubrali na obecnosti. Závěr práce je věnován výpočtu časové složitosti námi sestrojeného stroje. Dojdeme k závěru, že námi zkonstruovaný Univerzální Turingův stroj má asymptoticky kvadratickou složitost. Klíčová slova: Turingův stroj, Univerzální Turingův stroj, Časová složitost Title: Universal Turing machine Author: Jan Vacek Department: Department of Algebra Supervisor: prof. RNDr. Jan Krajíček, DrSc. Supervisor's e-mail address: krajicek@karlin.mff.cuni.cz Abstract: In the present work we study the Universal Turing machine. Specifically, we are engaged in its construction. Constructed Universal Turing machine simulates for a given Turing machine T and some of its input the run of this machine. We expected, for our construction, that the Turing machine T has a binary input alphabet and that its tape alphabet consists of symbols 0, 1 and the symbol for the blank cell. We have expected that the Turing machine T has an infinite tape just on the right hand side. We can change any Turing machine into this form. Hence, we haven t lost none of generality this way. Final part of this work consists of time complexity computation of our machine. We find that designed Universal Turing machine has asymptotically quadratic complexity. Keywords: Turing machine, Universal Turing machine, Time complexity 4

Kapitola 1 Úvod Tématem této práce je sestrojení Univerzálního Turingova stroje. V poslední části analyzujeme časovou složitost zkonstruovaného stroje. V první kapitole se nejprve seznámíme s několika pojmy, které budeme v dalším průběhu používat. Zmíníme také některá tvrzení, která ale nebudeme dokazovat. Přitom se ovšem vždy odvoláme na publikaci, v níž se o daném problému šíří obsáhleji. 1.1 Definice Univerzálního Turingova stroje V této části se nacházejí především definice, proto je následující text jakousi kombinací různých částí knih z použité literatury uvedené na konci celé práce. Nejprve ze všeho definujeme Turingův stroj. Definice Turingův stroj je uspořádaná šestice T = V,, P, S, q 0, F, kde V je konečná množina všech prvků vstupní abecedy, V je znak pro prázdné políčko pásky, P V { } je konečná množina pracovní abecedy, S je konečná množina stavů stroje, q 0 S je počáteční stav stroje a F je přechodová funkce stroje F : S P S P { L,R }, kde { L, R } určuje směr pohybu čtecí hlavy stroje. Přechodová funkce F může být jen částečná. V definici není pro přechodovou funkci stroje žádné omezení, co se týká posunu čtecí hlavy stroje. Turingův stroj jsme tedy definovali pro oboustranně nekonečnou pásku. Nyní budeme definovat výstup Turingova stroje, protože pro definici Univerzálního Turingova stroje budeme tento pojem potřebovat. Abychom ale mohli definovat výstup, musíme nejprve říci, 5

co je vstupem Turingova stroje. Zavedeme také značení, které budeme i dále používat. Vstupem Turingova stroje T = V,, P, S, q 0, F je libovolné slovo x V *, kde V * je množina všech slov nad V. Dále budeme předpokládat, že čtecí hlava stroje T bude umístěna nad první symbol x, že x je neprázdné slovo, a že kromě x je páska prázdná. Nyní již můžeme definovat výstup Turingova stroje. Definice Nechť se Turingův stroj někdy zastaví, pak výstup stroje definujeme jako nejdelší souvislé slovo bez symbolu pro prázdné políčko, na jehož začátku je čtecí hlava stroje. Výstup Turingova stroje T na vstupu x budeme označovat T x. Pokud se Turingův stroj na vstupu x nezastaví, výstup nedefinujeme. Takto definovaný výstup Turingova stroje nezáleží na vzdálenosti posloupnosti od předem vybraného políčka. Dalším potřebným pojmem je ekvivalence Turingových strojů. Definice Nechť S a T jsou Turingovy stroje, a nechť x V * je libovolné slovo. Pak řekneme, že S x T x, jsou li splněny následující podmínky : 1 ) S se na vstupu x zastaví T se na vstupu x zastaví 2 ) Pokud se S na vstupu x zastaví, pak S x =T x. Posledním pojmem, který použijeme v definici Univerzálního Turingova stroje je pojem zakódování stroje. Tomuto pojmu se budeme více věnovat v kapitole 2, nebudeme jej tedy definovat teď. Bude nám pouze stačit, že se jedná o jednoznačnou interpretaci Turingova stroje konečným slovem nad konečnou abecedou, a budeme jej značit kód T. Než přistoupíme k definici Univerzálního Turingova stroje zmíníme několik známých faktů, které budou potřebné pro další průběh konstrukce. Pro Turingův stroj budeme později chtít, aby jeho vstupní abeceda byla {0, 1} a aby jeho pracovní abeceda kromě symbolů vstupní abecedy obsahovala pouze symbol. 6

Z uvedené literatury [1] plyne, že se každý Turingův stroj dá převést na Turingův stroj se vstupní abecedou {0, 1} (takovému stroji budeme říkat binární) a pracovní abecedou {0, 1, }. Zřejmě se přitom musí zvýšit počet stavů, ale převod je možný. Dále budeme pro konstrukci potřebovat, aby stroj, který se chystáme simulovat, měl nekonečnou pásku pouze směrem vpravo. (Tzn., že pro každé políčko z pásky existuje pouze konečně mnoho políček směrem nalevo a nekonečně mnoho směrem napravo od tohoto políčka.) Z uvedené literatury [1] plyne, že na takový stroj lze převést každý Turingův stroj. Z toho jako závěr vyplývá, že každý Turingův stroj lze převést na Turingův stroj, který má pásku nekonečnou pouze vpravo, jeho vstupní abeceda je {0, 1} a pracovní abeceda je {0, 1, }. Dále tedy budeme bez újmy na obecnosti předpokládat, že Turingův stroj je tohoto tvaru. Pro náš Univerzální Turingův stroj tedy budeme takový převod využívat. Definice Univerzálním Turingovým strojem nazveme Turingův stroj U = V ',, P ', S ', q 0 ', F ', kde {0, 1} V ', právě když pro každý Turingův stroj T = V,, P, S, q 0, F takový, že V V ', a x V platí U kód T, x T x, kde kód T V ' je nějaké zakódování Turingova stroje T. Budeme říkat, že Univerzální Turingův stroj simuluje stroj T. Námi zkonstruovaný Univerzální Turingův stroj nebude stejného tvaru jako stroj, který simuluje. Bude mít sice nekonečnou pásku pouze směrem vpravo, ale bude používat mnoho symbolů a stavů. V této práci nám půjde hlavně o srozumitelnost konstrukce. Podle předchozích úvah bude ale existovat i Univerzální Turingův stroj s binární vstupní abecedou a pracovní abecedou {0, 1, }. 7

Kapitola 2 Konstrukce Univerzálního Turingova stroje Nejprve je třeba nějakým způsobem zakódovat Turingův stroj. V tomto případě budeme používat kódování popsané v následující podkapitole. 2.1 Kódování Turingova stroje Podle předpokladu je Turingův stroj, který se chystáme zakódovat, binární s pracovní abecedou {0, 1, }. Tuto množinu si uspořádáme podle pořadí v textu. Dále si vezmeme množinu všech stavů stroje. V našem případě se bude jednat o množinu {q 1, q 2, q 3,..., q n }. Tuto množinu si opět uspořádáme. Uspořádejme ji například podle indexů. Číslování začneme od jedničky. Budeme ale potřebovat, aby počáteční stav stroje T byl v pořadí první. Teď si můžeme vyrobit tabulku, která bude reprezentovat Turingův stroj. V jednotlivých řádcích budou popořadě všechny stavy a každý sloupec bude reprezentovat po řadě všechny symboly množiny {0, 1, }. V buňce o souřadnicích (q i, s j ), kde q i je i-tý stav a s j je j-tý symbol, bude uspořádaná trojice (q k, p m, s l ), kde p m je jeden prvek uspořádané množiny {R, L}. R znamená pohyb doprava a L pohyb doleva. A prvek s l je prvek {0, 1, } a znamená, na jaký symbol se přepíše symbol s j. Tato tabulka bude sestavována podle přechodové funkce Turingova stroje. Pokud pro nějakou buňku neexistuje instrukce, zapíšeme do příslušné buňky nulu. Jako příklad uvedu tabulku pro Turingův stroj T. T bude mít pouze čtyři stavy q 1, q 2, q 3, q 4 a přechodová funkce bude zadána následovně. Stroj ve stavu q 1 a na symbolu 0 přepíše symbol na 1, přejde do stavu q 3 a posune se o jedno políčko vpravo. Je-li na symbolu 1, přepíše jej na 0, zůstane ve stavu q 1 a posune se vpravo. Nachází-li se stroj T ve stavu q 1 a jeho čtecí 8

hlava na symbolu, zůstane stroj ve stavu q 1, symbol změní na 1 a posune svou hlavu o jedno místo vlevo. Zbytek přechodové funkce nechám znázorněn jen v Tabulce 1. stav\symbol 0 1 q 1 (q 3, R, 1) (q 1, R, 0) (q 1, L, 1) q 2 0 (q 1, R, ) (q 2, L, 0) q 3 (q 3, R, 1) 0 (q 1, R, ) q 4 (q 1, R, 0) (q 4, R, 1) (q 1, L, 1) Tabulka 1: Příklad tabulky kódující Turingův stroj T. Tato tabulka nám teď kóduje stroj T. Pro další konstrukci budeme předpokládat, že v prvním řádku tabulky bude vždy počáteční stav stroje T. Tvrzení T Pro každý Turingův stroj T existuje po uspořádání stavů právě jeden popsaný zápis do tabulky. Existence tabulky je zřejmým důsledkem způsobu, jakým zapisujeme přechodovou funkci libovolného Turingova stroje. Zvolíme-li následně posloupnost stavů libovolného stroje T, existuje zřejmě pouze jediná možnost pro zápis tabulky, neboť množinu symbolů {0, 1, } jsme již uspořádali. Již tedy víme, že pro každý Turingův stroj nějaká taková tabulka existuje. K zakódování každého Turingova stroje tedy použijeme jeho tabulku. Tu musíme nějak přepsat na řetězec znaků. Nejprve si ji ale trochu přepíšeme. Místo každého stavu napíšeme jen jeho pořadové číslo. To ale nakonec napíšeme jen pomocí jedniček. Tedy místo q 4 napíšeme 1111. Dále do tabulky nebudeme psát závorky ani čárky. Jelikož máme zvolené pořadí 9

stavů a symbolů, nemusíme dokonce psát první sloupec ani řádek. Výsledná tabulka je znázorněna v Tabulce 2. 111R1 1R0 1L1 0 1R 11L0 111R1 0 1R 1R0 1111R1 1L1 Tabulka 2: Zjednodušený přepis Tabulky 1. Teď už jen stačí takto zjednodušenou tabulku přepsat v posloupnost symbolů. K tomu použijeme nový symbol. Zvolíme třeba #. Posloupnosti znaků v jednotlivých buňkách tabulky napíšeme za sebe do řady, přičemž na začátku a na konci tabulky budou tři křížky ###, na konci buňky bude jeden křížek, tzn. #, a na konci řádku budou dva křížky, tzn. ##. Celou naší tabulku kódující stroj T převedeme v následující řetězec: ###111R1#1R0#1L1##0#1R #11L0##111R1#0#1R ##1R0#1111R1#1L1## # Tato posloupnost šesti symbolů nám kóduje Turingův stroj T. Protože se budeme čtecí hlavou Univerzálního stroje často vracet na začátek této posloupnosti, uděláme si tam jakousi zarážku. Tou bude znak. Ten tedy umístíme před celou posloupnost. Takto vytvořený kód použijeme jako část vstupnu pro Univerzální Turingův stroj. Tuto posloupnost symbolů kódující Turingův stroj T označíme jako kód T. Nyní si popíšeme, jak vyrobit univerzální Turingův stroj. Nazvěme jej U. Popíšeme práci stroje U, který má simulovat chod stroje T na nějakém jeho vstupu. U dostane jako vstup kód T a hned za ním vstup stroje T. Pro přehlednost budeme vstup stroje T označovat páska T. Pro názornost použijeme jako páska T posloupnost 1101000111010. Vstup stroje U tedy bude v našem příkladě vypadat takto: ###111R1#1R0#1L1##0#1R #11L0##111R1#0#1R ##1R0#1111R1#1L1# ##1101000111010 Náš univerzální stroj U bude potřebovat ještě další symboly. 10

Budou to již všechny použité symboly, kromě symbolu, s indexy st a hl. Symbol s indexem st bude značit, v jakém stavu se nachází stroj T, a symbol s indexem hl bude značit, na jaké políčko ukazuje hlava stroje T. Podrobněji to bude vysvětleno dále. Tedy množina všech symbolů je {0, 1,, R, L, #, 0 st, 1 st, st, R st, L st, # st, 0 hl, 1 hl, hl, R hl, L hl, # hl, }. Označme ji třeba S. 2.2 Konstrukce Univerzálního Turingova stroje Budeme předpokládat, že stroj T je neprázdný, tedy že počáteční stav má definovanou přechodovou funkci pro všechny symboly {0, 1, }. Dále musíme nějak připravit posloupnost na samotný výpočet. A to tak, že Univerzální stroj nejprve přepíše celkem třetí symbol # na # st a první symbol posloupnosti páska T na 0 hl, nebo 1 hl. Jeho stavy a přechodovou funkci pro tento počáteční podprogram nyní popíšeme. Můžeme předpokládat, že čtecí hlava stroje U začne na prvním políčku zadané posloupnosti. Stroj bude v počátečním stavu q 0 -st. Tento stav se bude starat o přejetí čtecí hlavy stroje U na třetí symbol # zleva. Potom stav q 0 -st 1 zapíše index st pod tento symbol. Přechodové funkce tedy budou vypadat takto: stav\symbol # a S-{#, } q 0 -st (q 0 -st, R, ) (q 0 -st, R, #) (q 0 -st 1, L, a) q 0 -st 1 0 (q 0 -hl 1,, R, # st ) 0 Tabulka 3: Přechodové funkce pro q 0 -st a q 0 -st 1. Stav q 0 -hl 1 je stav, který se stará o zapsání indexu hl k prvnímu symbolu posloupnosti páska T. K tomu budeme potřebovat ještě další čtyři stavy. Ty budou q 0 -hl 2, q 0 -hl 3, q 0 -hl 4, q 0 -hl 5. Stav q 0 -hl 1 pojede doprava, dokud nenarazí na symbol #, potom přejde do stavu q 0 -hl 2 a posune se o jedno políčko vpravo. Stav q 0 -hl 2 se podívá, jestli se jedná o symbol #. Pokud ano, posune se o jedno políčko vpravo a přejde do stavu q 0 -hl 3. Pokud ne, posune se o políčko vpravo a přejde zpět do stavu q 0 -hl 1. Stav q 0 -hl 3 se opět podívá, zda se jedná o symbol #. Jestliže ne, posune se vpravo a přejde do stavu q 0 -hl 1. Pokud ano, stroj U posune svou čtecí hlavu o jedno políčko 11

vpravo a přejde do stavu q 0 -hl 4. Stroj U ve stavu q 0 -hl 4 jen připíše index hl k symbolu, na němž se nachází, a přejde do stavu q 0 -hl 5. Stav q 0 -hl 5 jen přejede čtecí hlavou na začátek celé posloupnosti a přejde do stavu q 1. Stav q 1 je následující stav, který už není přípravný. Všechny stavy, které byly zatím popsány (kromě stavu q 1 ), můžeme shrnout do podbloku, který budeme označovat Q 0. Přechodové funkce celého podbloku Q 0 jsou popsány v Tabulce 4: stav\ symbol q 0 -st # 0 1 (q 0 -st, R, #) q 0 -st 1 (q 0 -hl 1,, R, # st ) q 0 -hl 1 (q 0 -hl 2, R, #) q 0 -hl 2 (q 0 -hl 3, R, #) q 0 -hl 3 (q 0 -hl 4, R, #) (q 0 -st, R, ) q 0 -hl 4 0 0 q 0 -hl 5 (q 0 -hl 5, L, #) (q 0 -st 1, L, 0) (q 0 -st 1, L, 1) a S-{#,,0,1, } 0 0 0 0 0 0 0 0 0 0 (q 1, R, ) (q 0 -hl 1, R, 0) (q 0 -hl 1, R, 0) (q 0 -hl 1, R, 0) (q 0 -hl 5, L, 0 hl ) (q 0 -hl 5, L, 0) (q 0 -hl 1, R, 1) (q 0 -hl 1, R, 1) (q 0 -hl 1, R, 1) (q 0 -hl 5, L, 1 hl ) (q 0 -hl 5, L, Tabulka 4: Přechodové funkce podbloku Q 0. 1) (q 0 -hl 1, R, ) (q 0 -hl 1, R, ) (q 0 -hl 1, R, ) (q 0 -hl 5, L, hl ) (q 0 -hl 5, L, ) (q 0 -hl 1, R, a) (q 0 -hl 1, R, a) (q 0 -hl 1, R, a) 0 (q 0 -hl 5, L, a) 12

Tvrzení Q 0 Podblok Q 0 označí indexem st třetí křížek zleva a zapíše index hl na první symbol posloupnosti páska T. Což odpovídá tomu, že stroj T najede svou čtecí hlavou na první symbol vstupu a je ve svém počátečním stavu. Po skončení podbloku Q 0 bude čtecí hlava stroje U na druhém symbolu posloupnosti kód T. Z předchozího popisu je celkem zřejmé, co stroj U v podbloku Q 0 dělá. Nejprve stavy q 0 -st a q 0 -st 1 připíší index st před stav, který je v zápisu stroje T jako první. Přepíše tedy třetí křížek zleva na # st. První stav v zápisu je podle naší volby na začátku počáteční stav stroje T. Potom stavy q 0 -st i, kde i {2,3,4}, přejedou čtecí hlavou stroje U na konec posloupnosti kód T a následně hned na další políčko. To je první políčko posloupnosti páska T. K němu připíše index hl, který nám označuje polohu čtecí hlavy námi simulovaného stroje T. A konečně stav q 0 -st 1 přejede čtecí hlavou stroje U na druhé políčko posloupnosti kód T. Podblok Q 0 byl přípravný. Teď rozepíšeme, jak se chová stroj U, aby simuloval jeden krok stroje T v případě, kdy je čtecí hlava simulovaného stroje na symbolu s indexem hl a nachází se ve stavu, který je označen indexem st. Posloupnost páska T se na pásce stroje U nachází vpravo od poslední trojice křížků. Nejprve pojede stroj U svou čtecí hlavou stále doprava, dokud nenarazí na symbol s indexem hl. Tento symbol (bez indexu) si zapamatuje a jede doleva, dokud nenarazí na symbol # st. Jelikož jsme si množinu možných symbolů stroje T uspořádali (a to sice takto: {0, 1, }), víme, která sekce odpovídá kterému symbolu. Hledáme-li například sekci odpovídající symbolu 1, víme, že se jedná o symboly mezi prvním a druhým osamoceným symbolem # za znakem # st. Tedy v našem příkladě se jedná o tučně vyznačenou část. 13

### st 111R1#1R0#1L1##0#1R #11L0##111R1#0#1R ##1R0#1111R1#1L1 ###1 hl 101000111010 Stroj U tedy vymaže index st u symbolu # st a posune svou hlavu na první symbol sekce, která odpovídá zapamatovanému symbolu. Toto budeme označovat jako podblok Q 1. stav\ symbol # # st 0 hl 1 hl hl a S- q 1 (q 1, R, #) (q 1, R, # st ) q 1-0 q 1-1 (q 1-0, L, #) (q 1-1, L, #) (q 1-0, L, 0 hl ) (q 1-1, L, 1 hl ) (q 1 -, L, hl ) (q 2, R, #) 0 0 0 (q 1-1 st, R, #) 0 0 0 q 1-1 st (q 2, R, #) 0 0 0 0 q 1 - (q 1 -, L, #) q 1 - st (q 1-1 st, R, #) (q 1 - st, R, #) 0 0 0 0 0 0 0 Tabulka 5: Přechodové funkce podbloku Q 1. {#,# st,0 hl, 1 hl, hl } (q 1, R, a) (q 1-0, L, a) (q 1-1, L, a) (q 1-1 st, R, a) (q 1 -, L, a) (q 1 - st, R, a) Tvrzení Q 1 Nachází li se stroj T v i tém stavu a jeho čtecí hlava je na j tém znaku uspořádané množiny symbolů, potom stroj U v podbloku Q 1 vymaže index st a přesune svou čtecí hlavu na první znak části posloupnosti, která odpovídá i tému řádku a j tému sloupci tabulky zapisující přechodovou funkci stroje T. Stroj U nejprve v tomto podbloku zjistí, na jaký symbol ukazuje právě stroj T. K tomu slouží stav q 1. Pak se postup stroje U dělí 14

podle toho, jaký symbol se na daném políčku vyskytoval. Pokud se čtecí hlava stroje T dívá na políčko se symbolem 0, pak se stroj U pouze posune o jedno políčko vpravo od políčka s indexem st, přičemž tento index vymaže. Hned vpravo od políčka, které bylo označeno indexem st se totiž nachází část posloupnosti příslušná symbolu 0. Pokud se na políčku, na němž je čtecí hlava stroje T, nachází symbol 1, tak stroj U posune nejprve svou čtecí hlavu o jeden křížek vpravo od symbolu s indexem st (index umaže) a pak postupuje jako v předchozím případě. Je-li nakonec poslední symbol na políčku, na nějž hledí čtecí hlava stroje T, posune se nejprve čtecí hlava stroje U o dva křížky vpravo od symbolu s indexem st. Index se jako v předchozích případech vymaže a pak stroj U postupuje stejně jako v případě, kdy byl symbol 0. V každém případě se tedy čtecí hlava stroje U přesune na odpovídající políčko. Pro symbol, na kterém se právě nachází čtecí hlava stroje U, jsou dvě možnosti. Buď je na tomto místě jednička, nebo nula. V případě nuly přechodová funkce stroje T není definovaná na symbol vstupu, tudíž by se stroj T zastavil. Musíme tedy zastavit i stroj U, ale nejprve musíme zařídit, aby konečný výstup stroje U byl stejný jako stroje T. To znamená, že musíme vymazat (tj. nahradit symbolem, který označuje prázdné políčko) všechny symboly posloupnosti kód T, následně odstranit index hl ve zbývajícím řetězci páska T a nastavit čtecí hlavu stroje U na políčko, z nějž byl index odstraněn. To budeme ale podrobně řešit později. Druhým možným symbolem je jednička. V takovém případě přepíše symbol na 1 st. Toto shrneme do podbloku Q 2. 15

stav\symbol 0 1 a S-{0,1} q 2 (q end, L, 0) (q 3, L, 1 st ) 0 Tabulka 6: Přechodová funkce podbloku Q 2. Tvrzení Q 2 V podbloku Q 2 stroj U zjistí, zda stroj T v aktuálním stavu na aktuálním symbolu skončí. Podblok Q 2 obsahuje pouze jeden stav q 2. Ten se pouze podívá, na jakém symbolu se nachází a je-li to 1, připíše k jedničce index st a pokračuje dál. Je-li ale symbol 0, přejde na ukončení, protože nula se na první pozici políčka tabulky kódující přechodovou funkci stroje T vyskytuje pouze v případě, že přechodová funkce stroje T není definovaná. Pokud byla posloupnost kód T vyrobena výše popsaným způsobem, jistě se na tomto políčku nemohl jiný symbol nacházet. Pro další postup by se nám hodila další sada symbolů s indexy. Abychom jich ale neměli tolik, použijeme symboly s indexem hl. Musíme si však dávat pozor, abychom je nezaměnili s těmi v sekci s údaji pro stroj T. To ale nehrozí, neboť se po celou dobu, kdy na pásce stroje U budou vyskytovat dva indexy hl, budeme pohybovat pouze v posloupnosti kód T. Nejprve se stroj U čtecí hlavou posune na začátek posloupnosti a tam označí křížek nejvíc vpravo indexem hl. Tuto část budeme označovat jako podblok Q 3. 16

stav\symbol # a S-{,#} q 3 (q 3 -, R, ) (q 3, L, #) (q 3, L, a) q 3-0 (q 3 -, R, #) (q 3 -#, L, a) q 3 -# 0 (q 4 -st 1, R, # hl ) 0 Tabulka 7: Přechodové funkce podbloku Q 3. Tvrzení Q 3 V podbloku Q 3 označí stroj U indexem hl první stav přechodové funkce stroje T. Čtecí hlava stroje U zde jede z levého kraje posloupnosti a označí indexem hl poslední křížek v řadě, což je křížek před prvním stavem stroje T. Podblok Q 3 byl přípravný na následující podblok. Zde se čtecí hlava stroje U vrátí zpět k symbolu s indexem st a podívá se na políčko vpravo, je-li tam jednička. Pokud ano, přepíše k této jedničce index st. Potom pojede stroj U hlavou až na začátek posloupnosti. Odtamtud se vydá vpravo, dokud nenarazí na symbol s indexem hl. Stroj U, vždy když hledá symbol s indexem hl, narazí v tomto podbloku na ten, který se nachází v posloupnosti kód T. Tento index pak přepíše k druhému křížku nejbližší pravé dvojice ##. Stroj U posune svou hlavu na symbol s indexem st a opět se podívá o jedno políčko vpravo, zda je tam jednička. Tento postup opakuje tak dlouho, dokud je na políčku o jedno vpravo od políčka s indexem st symbol jedna. Tedy zkráceně stroj U umístí index hl pod křížek, kterým začíná sekce tolikátého stavu, kolik je u indexu st jedniček za sebou. Tento podblok pojmenujeme Q 4. 17

stav\ a S- # # hl 1 st symbol {,#,# hl,1 st } (q 4 -st 1, R, (q 4 -st 1, R, (q 4 -st 2, R, (q 4 -st 1, R, q 4 -st 1 0 ) #) 1) a) (q 4 -hl 2, R, (q 4 -hl 1, L, (q 4 -hl 1, L, (q 4 -hl 1, L, q 4 -hl 1 0 ) #) # hl ) a) q 4 -hl 2 0 (q 4 -hl 2, R, (q 4 -hl 3, R, (q 4 -hl 2, R, (q 4 -hl 2, R, #) #) 1 st ) a) q 4 -hl 3 0 (q 4 -hl 4, R, (q 4 -hl 3, R, (q 4 -hl 3, R, (q 4 -hl 3, R, #) # hl ) 1 st ) a) q 4 -hl 4 0 (q 4 -st 0, L, (q 4 -hl 3, R, (q 4 -hl 3, R, (q 4 -hl 3, R, # hl ) # hl ) 1 st ) a) (q 4 -st 1, R, (q 4 -st 0, L, (q 4 -st 0, L, (q 4 -st 0, L, q 4 -st 0 0 ) #) 1 st ) a) Tabulka 8: Přechodové funkce podbloku Q 4 bez stavu q 4 -st 2 Stav q 4 -st 2 je už tak trochu částí dalšího podbloku, ale stále ještě jej budeme řadit do podbloku Q 4. stav\symbol 1 R L a S-{1,R,L} q 4 -st 2 (q 4 -hl 1, L, 1 st ) (q 5, R, R st ) (q 5, R, L st ) 0 Tabulka 9: Přechodová funkce stavu q 4 -st 2. Tvrzení Q 4 V podbloku Q 4 stroj U přesune index hl z posloupnosti kód T na ten křížek v posloupnosti, který je před stavem, do kterého by přešel stroj T v simulované situaci. Dále stroj U přesune index st na symbol určující směr posunu čtecí hlavy stroje T. 18

Jak již bylo uvedeno dříve, stroj U v tomto podbloku několikrát opakuje stejnou činnost. Pokaždé když se za symbolem s indexem st nachází další jednička, přesune na ni index st. Dále index hl, který je v posloupnosti kód T, přesune ke křížku předcházejícímu další stav stroje T. Neboli posune index hl k dalšímu stavu tolikrát, kolik je u indexu st jedniček za sebou mínus jedna. Je to o jednu méně, protože na začátku se čtecí hlava stroje U dívá už za první jedničku. To ale odpovídá skutečnosti, že na začátku je již označen první stav. Tímto stroj U simuloval výběr stavu, do kterého stroj T přejde. Další podblok bude Q 5. Ten se zabývá situací, kdy se napravo od symbolu 1 st nachází jiný symbol než 1. Tehdy stroj U na tento symbol přesune index st. Dále se podívá na políčko o jedno vpravo a zapamatuje si symbol na tomto místě napsaný. Stroj U potom posunuje svou čtecí hlavu vpravo do posloupnosti páska T až na políčko, kde je buď 0 hl, 1 hl, nebo hl. To přepíše na zapamatovaný symbol s indexem hl. stav\symbol 0 1 a S-{0,1, } q 5 (q 5-0, R, 0) (q 5-1, R, 1) (q 5 -, R, ) 0 Tabulka 10: Přechodová funkce stavu q 5. stav\symbol 0 hl 1 hl hl a S-{0 hl,1 hl, hl } q 5-0 (q 6, L, 0 hl ) (q 6, L, 0 hl ) (q 6, L, 0 hl ) (q 5-0, R, a) q 5-1 (q 6, L, 1 hl ) (q 6, L, 1 hl ) (q 6, L, 1 hl ) (q 5-1, R, a) q 5 - (q 6, L, hl ) (q 6, L, hl ) (q 6, L, hl ) (q 5 -, R, a) Tabulka 11: Přechodové funkce zbytku podbloku Q 5. 19

Tvrzení Q 5 V podbloku Q 5 přepíše stroj U symbol u indexu hl v posloupnosti páska T na symbol odpovídající přechodové funkci stroje T. Speciálně tedy v tomto podbloku stroj U simuluje přepsání symbolu strojem T. Stroj U nejprve ze zápisu přechodové funkce stroje T zjistí, na jaký symbol má znak na pásce stroje T přepsat. K tomu slouží stav q 5. Potom jede stroj U svou čtecí hlavou k symbolu s indexem hl v posloupnosti páska T a přepíše jej na odpovídající symbol opět s indexem hl. Udělá tedy totéž, co by se symbolem v daném stavu udělal i stroj T. Následně se čtecí hlava stroje U posunuje zpět doleva, dokud nenajde symbol s indexem st. Tento index vymaže a zapamatuje si symbol, u nějž index byl. stav\symbol R st L st a S-{R st,l st } q 6 (q 6 -R 1, L, R) (q 6 -L 1, L, L) (q 6 L, a) Tabulka 12: Přechodová funkce dělicího stavu q 6. Stav q 6 dělí další postup stroje U na dvě části podle toho, jaký symbol si pamatuje. Svou čtecí hlavu pak posune stroj U na první políčko posloupnosti. Index hl v posloupnosti kód T přepíše na index st. Pak se čtecí hlava posunuje doprava, dokud nenajde symbol s indexem hl v posloupnosti páska T. Podle toho, jaký symbol si stroj U pamatoval, přesune index hl buď o jedno políčko vpravo, nebo o jedno vlevo. (Pamatoval-li si R, přesune index o jedno políčko vpravo. Pamatoval-li si L, posune jej o jedno vlevo.) 20

stav\ symbol q 6 -R 1 (q 6 -R 2, R, ) q 6 -R 2 0 # hl 0 hl 1 hl hl a S-{,# hl, (q 6 -R 1, L, # hl ) (q 6 -R 2, R, # st ) (q 6 -R 1, L, 0 hl ) (q 6 -R 1, L, 1 hl ) (q 6 -R 1, L, hl ) (q 7, R, 0) (q 7, R, 1) (q 7, R, ) Tabulka 13: Přechodové funkce pro zapamatovaný symbol R. 0 hl,1 hl, hl } (q 6 -R 1, L, a) (q 6 -R 2, R, a) stav\ symbol q 6 -L 1 (q 6 -L 2, R, ) q 6 -L 2 0 # hl 0 hl 1 hl hl a S-{,# hl, (q 6 -L 1, L, # hl ) (q 6 -L 2, R, # st ) (q 6 -L 1, L, 0 hl ) (q 6 -L 1, L, 1 hl ) (q 6 -L 1, L, hl ) (q 7, L, 0) (q 7, L, 1) (q 7, L, ) Tabulka 14: Přechodové funkce pro zapamatovaný symbol L. 0 hl,1 hl, hl } (q 6 -L 1, L, a) (q 6 -L 2, R, a) Q 6. Tyto přechodové funkce shrneme do společného podbloku Tvrzení Q 6 V podbloku Q 6 stroj U smaže index st a napíše jej místo indexu hl v posloupnosti kód T. Pak čtecí hlava stroje U ještě smaže druhý index hl v posloupnosti páska T a podle přechodové funkce stroje T se přesune o jedno políčko vedle. To tedy speciálně odpovídá dokončení změny stavu stroje T a začátku přesunu čtecí hlavy stroje T na sousedící symbol. Hned první stav tohoto podbloku rozdělí zbytek výpočtu na dvě možnosti. Zda přechodová funkce stroje T posune čtecí hlavu vpravo, nebo vlevo. Tím si stroj U vlastně pamatuje, kam má na konci výpočtu posunout svou čtecí hlavu. Pak už jen stroj U 21

jede svou čtecí hlavou na začátek celé posloupnosti a odtud postupuje směrem vpravo. První index hl (tj. ten v posloupnosti kód T ) přepíše na index st, což odpovídá přechodu stroje T do jiného stavu. Index st totiž značí, v jakém stavu se stroj T nachází. Potom stroj U najde symbol s indexem hl v posloupnosti páska T, ten značí polohu čtecí hlavy stroje T, vymaže jej a posune se o jedno políčko vedle podle toho, jaký symbol si zpočátku pamatoval. Dále použijeme podblok Q 7. Ten pouze připíše index hl k symbolu, na němž je právě čtecí hlava stroje U. stav\symbol 0 1 a S-{0,1, } q 7 (q 1, L, 0 hl ) (q 1, L, 1 hl ) (q 1, L, hl ) 0 Tabulka 15: Přechodová funkce podbloku Q 7. Tvrzení Q 7 Podblok Q 7 slouží k tomu, aby stroj U připsal index hl do políčka, na nějž zrovna ukazuje jeho čtecí hlava. Tím tedy dokončí simulaci přesunu čtecí hlavy stroje T. V tomto podbloku je jen jedna přechodová funkce, která aktuálnímu políčku připíše index hl. Tím je tedy simulace přesunu čtecí hlavy stroje T dokončena. Právě popsaným postupem tedy stroj U nasimuluje chod stroje T krok za krokem. Přičemž simulaci jednoho kroku jsme právě předvedli. (tzn. Nejprve stroj U pomocí podbloku Q 0 upraví svou vstupní pásku. Dále stroj U v podbloku Q 1 simuluje proces, při němž stroj T zjistí, na jakém symbolu se nachází jeho čtecí hlava a podle toho se připraví na plnění 22

instrukcí přechodové funkce. Pomocí podbloku Q 2 stroj U zjistí, zda stroj T v daném okamžiku končí, či ne. Potom, pokud stroj T nekončí, nastane podblok Q 3, kde se stroj U připraví na přechod do jiného stavu. Přesun samotný simuluje stroj U v podbloku Q 4. Podblok Q 5 slouží k simulaci přepisu symbolu pod čtecí hlavou strojem T. Dále stroj U používá podblok Q 6 k ukončení simulace přechodu stroje T do jiného stavu a pomocí tohoto podbloku také spouští simulaci posunu čtecí hlavy stroje T. V podbloku Q 7 pak stroj U dokončí simulaci přesunu čtecí hlavy stroje T a připraví se na další krok.) Teď se ještě podíváme, jak budou vypadat přechodové funkce podbloku Q 8, který je ukončovací a začíná stavem q end. Nejprve čtecí hlava stroje U jede úplně vlevo, až narazí na symbol. Pak jede vpravo a cestou přepisuje všechny symboly na, dokud nedojede k druhé trojici křížků bezprostředně za sebou. Tyto křížky ještě také přepíše na. Tím stroj U vymaže celou posloupnost kód T. Dále už stroj U jen hledá symbol s indexem hl. Když jej najde, odebere od něj tento index, posune se o jedno políčko vpravo a přejde do dalšího stavu. Je jedno, na kterou stranu se čtecí hlava posune. Potřebujeme jen zajistit, aby se čtecí hlava stroje U zastavila na stejném políčku, jako by se zastavil stroj T. V tomto novém stavu se tedy jen popojede o jedno políčko zpět vlevo a přejde do stavu, pro nějž není definovaná přechodová funkce. Stroj U se tedy zastaví na symbolu, na kterém by se zastavil i stroj T. Na pásce stroje U se nyní sice nenachází přímo to, co by bylo na pásce stroje T. Jsou tam totiž v levé části navíc ještě symboly. Nicméně zbytek pásky již odpovídá tomu, jak by vypadala výstupní páska stroje T. Budeme-li tedy podle definice za výstup Turingova stroje považovat nejdelší souvislé slovo bez symbolu, na jehož první symbol se kouká čtecí hlava stroje, pak můžeme říci, že výstup stroje U je roven výstupu stroje T. 23

stav\ a S-{,#, # 0 hl 1 hl hl symbol 0 hl,1 hl, hl } q end (q end -, (q end, L, 0 0 0 (q end, L, a) R, ) #) q end - 0 (q end -, (q end -# 0, R, 0 0 0 R, ) ) q end -# 0 0 (q end -# 1, (q end -# 0, R, 0 0 0 R, ) ) q end -# 1 0 (q end -# 2, (q end -# 0, R, 0 0 0 R, ) ) q end -# 2 0 (q end -hl, (q end -# 0, R, 0 0 0 R, ) ) q end -hl 0 0 (q-end, (q-end, (q-end, (q end -hl, R, R, 0) R, 1) R, ) a) q-end 0 0 0 0 0 (q nedef, L, a) q nedef 0 0 0 0 0 0 Tabulka 16: Přechodové funkce podbloku Q 8. Tvrzení Q 8 Podblok Q 8 přepíše všechny symboly posloupnosti kód T na symboly značící prázdné políčko. Pak najde symbol s indexem hl, smaže tento index a zastaví se. Tím tedy stroj U přemění svou pásku na pásku stroje T po ukončení. A to tedy odpovídá ukončení chodu stroje T. Nejprve stroj U jede svou čtecí hlavou úplně vlevo, a jak je již popsáno výše, přepíše všechny symboly kód T na symbol. Následně přejede na symbol s indexem hl, kterýžto vymaže a skončí. Tím tedy stroj U simuluje konec chodu stroje T. 24

Nyní již z předchozích tvrzení zřejmě plyne tvrzení následující. V tom vlastně jen shrneme funkčnost námi sestrojeného stroje U. Tvrzení F Stroj U simuluje chod stroje T. Platí tedy vztah U kód T, x T x, pro každé binární slovo x, tzn. x {0,1} *. 25

Kapitola 3 Složitost Univerzálního Turingova stroje V této části se budeme zabývat časovou složitostí námi sestrojeného univerzálního stroje U. Budeme ji posuzovat vzhledem k délce posloupnosti kód T a době běhu stroje T na daném vstupu. Proto zavedeme jednoduché značení. Dobu běhu stroje T budeme značit t a f nám bude označovat délku posloupnosti kód T. 2.1 Časová složitost stroje U Nejprve se podíváme na přípravný podblok Q 0. Ten nemá z hlediska t moc velkou složitost, protože se provede jen jednou na začátku. Z hlediska f už ale má smysl tuto složitost počítat. V tomto podbloku nejprve stoj U jede svou čtecí hlavou čtyři políčka doprava a potom jedno zpět. Dále jede přes celý zbytek posloupnosti kód T až na první políčko posloupnosti páska T. Tam se zastaví a vrátí se zpět na začátek celé posloupnosti. Tedy celkem v podbloku Q 0 vykoná 2 f 2 kroků. Složitostní odhad našeho stroje U nás ale nebude zajímat takto přesně. Pro velká f (případně později i t ) bude konstantní číslo ztrácet význam. Tudíž jej zanedbáme. Proto definujeme značení O h, které budeme nazývat asymptotickou složitostí. Definice Pro g, h funkce N N označíme g=o h c 0 n 1: g n c h n. Pomocí takto definovaného značení můžeme tedy říci, že asymptotická složitost podbloku Q 0 je omezena O f. Stejně tak ale 26

můžeme říci, že asymptotická složitost podbloku Q 0 je O 2 f 2. Toto je ale teprve jedna z částí celkové složitosti stroje U, takže se zatím budeme snažit o co největší přesnost. Pořádné využití funkce O h uvidíme až v závěru. Teď se zatím spokojíme s tím, že nebudeme počítat jednotlivé kroky úplně přesně, ale konstantní počet kroků nahradíme O 1. Tímto způsobem tedy napíšeme, že složitost podbloku Q 0 je 2 f O 1. Značení O 1 budeme používat i při ostatních odhadech, toto označení tedy nebude vyjadřovat žádnou konkrétní hodnotu. Tím bude pouze naznačeno, že se jedná o konstantní člen. O 1 může nabývat libovolných hodnot ze Z. Zřejmě tedy platí následující: O 1 ±O 1 =O 1, O 1 O 1 =O 1. Složitosti jednotlivých podbloků budeme uvádět jako tvrzení. Tvrzení SQ 0 Podblok Q 0 má asymptotickou složitost 2 f O 1. tohoto tvrzení jsme vlastně již udělali. Teď se zaměříme na podbloky Q 1, Q 2, Q 3, Q 4, Q 5, Q 6 a Q 7. Všechny tyto podbloky se zabývají jen jedním krokem stroje T, tudíž je budeme všechny opakovat t krát. Nejprve si ale vypočítáme složitosti jednotlivých podbloků a teprve potom budeme jejich součet násobit počtem opakování. Pro snadnější popis si ještě zavedeme značení. Písmeno i bude značit počet kroků, který zatím stroj T provedl. Tvrzení i Stroj T použije v i tém kroku nejvýše i prvních míst pásky. Jelikož stroj T doposud udělal pouze i kroků, mohl se na pásce posunout maximálně o i míst doprava. Na další místo se již nemohl svou čtecí hlavou dostat, tudíž je z hlediska i - tého kroku jedno, co se nachází za i - tým políčkem pásky. 27

následujícím. Toto tvrzení bylo přípravné. Využijeme jej hned třeba v tvrzení Tvrzení SQ 1 Podblok Q 1 má asymptotickou složitost 2 f i O 1. Speciálně složitost podbloku Q 1 je omezena funkcí O f i. Čtecí hlava stroje U jede nejprve vpravo, dokud nenarazí na symbol s indexem hl. Projede tedy celou posloupnost kód T, což trvá f O 1 kroků, a pak ještě nějaký kus posloupnosti páska T. Podle Tvrzení i toto trvá nejvýše i kroků. Pak jede čtecí hlava stroje U zase zpět, což trvá opět f i O 1 kroků. Následně stroj U posune svou čtecí hlavu na příslušnou sekci. To zabere jen konstantní počet kroků. Po sečtení dílčích výpočtů tedy dostaneme 2 f i O 1 kroků. Tvrzení SQ 2 Podblok Q 2 má asymptotickou složitost O 1. V tomto podbloku stroj U pouze zjišťuje, jestli stroj T v tomto kroku končí, či nikoliv. Pouze se podívá, na jakém symbolu se nachází. Tedy jistě je složitost jen konstantní. Tvrzení SQ 3 Podblok Q 3 má asymptotickou složitost f O 1, neboli zkráceně O f. 28

Univerzální stroj U jede svou čtecí hlavou úplně vlevo. Odtamtud popojede o pár políček vpravo. Po předchozím podbloku Q 2 se čtecí hlava stroje U zastavila někde v posloupnosti kód T, tudíž na posunutí na začátek posloupnosti bude jistě stačit f O 1 kroků. Tvrzení SQ 4 Nechť f 17 2 4, pak podblok Q 4 má asymptotickou složitost 3 12 f 2 3 O 1 f O 1. Čili časová složitost podbloku Q 4 je omezena funkcí O f 3 2. V tomto podbloku stroj U zjistí, na jaký stav se má změnit stav stroje T, a potom posune index hl k tomuto stavu. To znamená, že musíme nejprve odhadnout počet stavů, který se v posloupnosti kód T může nacházet. Tímto odhadem budeme násobit. Stroj U totiž posune vždy index hl jen o jeden stav vpravo, přičemž začne na začátku posloupnosti. Při každém posunu indexu hl stroj U provede následující postup. Svou čtecí hlavou přejede stroj U až k prvnímu symbolu s indexem st, potom přejede zpět na začátek. Odtud se vydá vpravo, dokud nenajde symbol s indexem hl. (Ten, který je v posloupnosti kód T. V tomto podbloku se totiž čtecí hlava stroje U pohybuje výhradně v části kód T.) To je tedy prozatím přibližně 3 f O 1 kroků. Předpokládáme totiž vždy nejhorší možný případ. Dále se čtecí hlava přesune opět na začátek celé posloupnosti. Tím končí jeden krok tohoto cyklu. Za každé opakování cyklu tedy provede stroj U přibližně 4 f O 1 kroků. Pro výpočet celkové asymptotické složitosti proto stačí odhadnout počet opakování tohoto cyklu. Horní odhad počtu opakování je zřejmě roven počtu 29

přechodových funkcí stroje T mínus jedna. Pro poslední jedničku se sice provede jen první posun vpravo, při odhadu ale nic nepokazíme, pokud budeme počítat s tolika posuny, kolik je stavů stroje T. Budeme předpokládat, že na každý stav, kromě prvního, je někde odkazováno. V opačném případě bychom jej mohli z posloupnosti kód T vypustit a stroj by fungoval stejným způsobem. V zápisu se tedy vyskytuje alespoň l 1 l 2 1 jedniček, kde l značí počet stavů stroje T. Dále také obsahuje za každý stav dva křížky přímo za sebou, dva křížky samostatné a další tři symboly. Tyto tři symboly jsou z množiny {R, L, 0}. Jsou tam tři pro každý stav, protože sekce odpovídající každému stavu je rozdělena na tři části, kde každá odpovídá jednomu symbolu. Pro každý symbol se pak v příslušné sekci nachází buď nula, nebo je přechodová funkce definovaná. Je-li funkce definovaná, pak se v jejím zápise objevuje buď R, nebo L. Dále se za každým symbolem označujícím směr pohybu (R,L) nachází ještě jeden symbol. Jelikož jsme předpokládali, že přechodová funkce je definovaná alespoň v l případech, máme tedy dalších l symbolů. Takže celkem tedy dostáváme, že se v zápisu přechodové funkce stroje T nachází nejméně l 1 l 2 l 8 1 symbolů. Odtud můžeme odhadnou l jednoduše. Jelikož f l 1 l 2 l 8 1, pak 0 l 2 17 l 2 f 1. Čili pak dostáváme, že l 17 172 8 f 4 2. Pro f 17 2 4 tedy dostáváme l 17 3 f 2. Určitě tedy platí l 3 f. Roznásobením tím pádem dostaneme požadovaný 30

3 odhad 12 f 2 3 O 1 f O 1. Tvrzení SQ 5 Podblok Q 5 má asymptotickou složitost f i O 1. Čili jeho složitost je omezena funkcí O f i. Čtecí hlava stroje U jede stále vpravo, dokud v posloupnosti páska T nenajde symbol s indexem hl. Nejprve tedy přejede posloupnost kód T. Na to je potřeba f O 1 kroků. Potom stroj U posune svou čtecí hlavu ještě po nějaké části posloupnosti páska T. K tomu je podle Tvrzení i zapotřebí i kroků. Celkem tedy dostáváme asymptotickou složitost f i O 1. Tvrzení SQ 6 Podblok Q 6 má asymptotickou složitost 2 f i O 1. Je tedy ve složitosti omezen funkcí O f i. V podbloku Q 6 jede stroj U nejprve svou čtecí hlavou od symbolu s indexem hl v posloupnosti páska T k symbolu s indexem st a potom pokračuje na začátek celé posloupnosti. To nám z Tvrzení i dává celkem f i O 1 kroků. Potom se čtecí hlava stroje U posouvá stále vpravo, cestou přepíše index hl v části kód T na index st, a zastaví se až u indexu hl v posloupnosti páska T. Tento posun tedy podle Tvrzení i trvá opět f i O 1 kroků. Celkem tedy máme požadovanou složitost 2 f i O 1 kroků. 31

Tvrzení SQ 7 Podblok Q 7 má asymptotickou složitost O 1. Tento podblok vlastně jen připíše index hl ke znaku, na kterém se právě nachází čtecí hlava stroje U. Má tedy zřejmě jen konstantní složitost. Tvrzení SQ 1 7 Nechť f 17 2 4, potom asymptotická složitost podbloků Q 1, Q 2, Q 3,, Q 7 je za celou dobu běhu stroje U 5 2 t 2 O 1 5 3 2 t 12 t f 2 6 f t 3 O 1 f t O 1. Celková složitost těchto podbloků je tedy celkem omezena funkcí O t 2 t f 3 2. K ověření tohoto tvrzení stačí sečíst jednotlivé složitosti z Tvrzení SQ 1 až Tvrzení SQ 7 a vynásobit počtem opakování, který je v našem případě roven t. Pro přehlednost rovnou napíšeme pouze jednou O 1 na konec výrazu. Neboli rovnou sečteme všechna O 1. Dostáváme tedy t [ 2 f i f 12 f 2 f i O 1 ]. Úpravami získáme 12 f 3 2 3 O 1 f f i + 3 2 6 f t 3 O 1 t f O 1 t O 1 5 t i, kde si t t i můžeme vyjádřit jako i, protože v každém kroku je i=1 i o jedna větší a začíná na hodnotě 1. Podle vzorce 32

pro geometrickou řadu máme i = t 1 t. Po dosazení 2 tedy získáme požadovaný výsledek 5 2 t 2 O 1 5 3 2 t 12 t f 2 6 f t 3 O 1 t f O 1. t i=1 Teď už nám zbývá spočítat složitost podbloku Q 8 a budeme moci sečíst výsledky do souhrnného tvrzení. Podblok Q 8 se opět opakuje za celou simulaci pouze jednou na konci, proto jsme jej nechali samostatně, stejně jako podblok Q 0. Tvrzení SQ 8 Podblok Q 8 má asymptotickou složitost 2 f t O 1. Jeho složitost je tedy omezena funkcí O f t. V tomto podbloku jede nejprve stroj U svou čtecí hlavou z posloupnosti kód T na začátek celé posloupnosti, což mu tedy přibližně trvá f O 1 kroků. Potom se čtecí hlava stroje U přesouvá přes celou část kód T vpravo a pokračuje až k symbolu s indexem hl v části páska T. To trvá nejvýše f t O 1 kroků. Celkem tedy dostáváme asymptotickou složitost 2 f t O 1. Tvrzení S Asymptotická složitost stroje U je 5 2 t 2 O 1 7 3 2 t 12 t f 2 f 6 t 4 3 O 1 f t O 1. Celkem je tedy složitost stroje U omezena funkcí O t 2 t f 3 2. 33

Celková asymptotická složitost se rovná součtu složitostí z Tvrzení SQ 0, Tvrzení SQ 1 7 a Tvrzení SQ 8. Tím tedy snadno po upravení dostáváme kýžený výsledek. Důsledek t Asymptotická složitost univerzálního stroje U vzhledem k době chodu stroje T je O t 2. Čili pro pevně zvolený Turingův stroj T t.j. f je konstantní je jeho složitost omezená funkcí O t 2. Jedná se o zřejmý důsledek Tvrzení S. Stačí jen počítat s f jako s konstantou. Důsledek f Asymptotická složitost stroje U vzhledem k délce posloupnosti 3 kód T stroje T je O f. Neboli i tý krok chodu stroje T t.j. t je konstantní simuluje stroj U se složitostí odhadnutelnou funkcí O f 3 2. Podobně jako v Důsledku t stačí pouze t brát jako konstantu. A zbytek plyne již jednoduše z Tvrzení i. 34

Literatura [1] Aho A.V., Hopcroft J.E., Ullman J.D.: The design and analysis of computer algorithms, Reading, Massachusetts: Addison-Wesley, 1974. [2] Turing A. M.: On Computable Numbers, with an Application to the Entscheidungsproblem, Proceedings of the London Mathematical Society 42: pp. 230 65., 1937. 35