Számításelmélet Tamás Herendi

Hasonló dokumentumok
Számításelmélet. Második előadás

definiálunk. Legyen egy konfiguráció, ahol és. A következő három esetet különböztetjük meg. 1. Ha, akkor 2. Ha, akkor, ahol, ha, és egyébként.

Algoritmuselmélet 12. előadás

KOVÁCS BÉLA, MATEMATIKA I.

Automaták mint elfogadók (akceptorok)

Turing-gép május 31. Turing-gép 1. 1

A Formális nyelvek vizsga teljesítése. a) Normál A vizsgán 60 pont szerezhet, amely két 30 pontos részb l áll össze az alábbi módon:

A digitális számítás elmélete

Deníciók és tételek a beugró vizsgára

Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé. (Albert Einstein) Halmazok 1

Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé.

A számítógépes nyelvészet elmélete és gyakorlata. Automaták

Véges automaták, reguláris nyelvek

1. előadás: Halmazelmélet, számfogalom, teljes

NP-teljesség röviden

A Formális nyelvek vizsga teljesítése. a) Normál A vizsgán 60 pont szerezhet, amely két 30 pontos részb l áll össze az alábbi módon:

Turing-gépek. Számításelmélet (7. gyakorlat) Turing-gépek 2009/10 II. félév 1 / 1

minden x D esetén, akkor x 0 -at a függvény maximumhelyének mondjuk, f(x 0 )-at pedig az (abszolút) maximumértékének.

Leképezések. Leképezések tulajdonságai. Számosságok.

Hadamard-mátrixok Előadó: Hajnal Péter február 23.

1. tétel Halmazok és halmazok számossága. Halmazműveletek és logikai műveletek kapcsolata.

Analízis I. Vizsgatételsor

Az informatika elméleti alapjai 2 elővizsga december 19.

Formális nyelvek - 9.

Logika es sz am ıt aselm elet I. r esz Logika 1/36

Relációk Függvények. A diákon megjelenő szövegek és képek csak a szerző (Kocsis Imre, DE MFK) engedélyével használhatók fel!

Az R halmazt a valós számok halmazának nevezzük, ha teljesíti az alábbi 3 axiómacsoport axiómáit.

Algoritmusok bonyolultsága

KOVÁCS BÉLA, MATEMATIKA I.

HALMAZELMÉLET feladatsor 1.

1. Mondjon legalább három példát predikátumra. 4. Mikor van egy változó egy kvantor hatáskörében?

KOVÁCS BÉLA, MATEMATIKA I.

A továbbiakban Y = {0, 1}, azaz minden szóhoz egy bináris sorozatot rendelünk

Gráfelmélet. I. Előadás jegyzet (2010.szeptember 9.) 1.A gráf fogalma

22. GRÁFOK ÁBRÁZOLÁSA

Halmaz: alapfogalom, bizonyos elemek (matematikai objektumok) Egy halmaz akkor adott, ha minden objektumról eldönthető, hogy

Halmazelmélet. 1. előadás. Farkas István. DE ATC Gazdaságelemzési és Statisztikai Tanszék. Halmazelmélet p. 1/1

Diszkrét matematika 2. estis képzés

HHF0CX. k darab halmaz sorbarendezésének a lehetősége k! Így adódik az alábbi képlet:

Formális nyelvek és automaták

RE 1. Relációk Függvények. A diákon megjelenő szövegek és képek csak a szerző (Kocsis Imre, DE MFK) engedélyével használhatók fel!

Automaták és formális nyelvek

Itt és a továbbiakban a számhalmazokra az alábbi jelöléseket használjuk:

KOVÁCS BÉLA, MATEMATIKA I.

ALAPFOGALMAK 1. A reláció az program programfüggvénye, ha. Azt mondjuk, hogy az feladat szigorúbb, mint az feladat, ha

4. SOROK. a n. a k (n N) a n = s, azaz. a n := lim

Nagy Gábor compalg.inf.elte.hu/ nagy ősz

Permutációk véges halmazon (el adásvázlat, február 12.)

1. Alapfogalmak Algoritmus Számítási probléma Specifikáció Algoritmusok futási ideje

A sorozat fogalma. függvényeket sorozatoknak nevezzük. Amennyiben az értékkészlet. az értékkészlet a komplex számok halmaza, akkor komplex

Diszkrét matematika II., 8. előadás. Vektorterek

Adatbázisok elmélete 12. előadás

1. Részcsoportok (1) C + R + Q + Z +. (2) C R Q. (3) Q nem részcsoportja C + -nak, mert más a művelet!

Diszkrét matematika 2.

A fontosabb definíciók

f(x) vagy f(x) a (x x 0 )-t használjuk. lim melyekre Mivel itt ɛ > 0 tetszőlegesen kicsi, így a a = 0, a = a, ami ellentmondás, bizonyítva

2014. november 5-7. Dr. Vincze Szilvia

SHk rövidítéssel fogunk hivatkozni.

Nagy Gábor compalg.inf.elte.hu/ nagy

Diszkrét matematika 2.C szakirány

OSZTHATÓSÁG. Osztók és többszörösök : a 3 többszörösei : a 4 többszörösei Ahol mindkét jel megtalálható a 12 többszöröseit találjuk.

Csima Judit október 24.

4. Fuzzy relációk. Gépi intelligencia I. Fodor János NIMGI1MIEM BMF NIK IMRI

Sorozatok határértéke SOROZAT FOGALMA, MEGADÁSA, ÁBRÁZOLÁSA; KORLÁTOS ÉS MONOTON SOROZATOK

Logika és számításelmélet. 10. előadás

Diszkrét matematika 2. estis képzés

A valós számok halmaza

26. MINIMÁLIS KÖLTSÉGŰ UTAK MINDEN CSÚCSPÁRRA

Bonyolultságelmélet. Thursday 1 st December, 2016, 22:21

A Számítástudomány alapjai

Programozási módszertan

Sorozatok, sorok, függvények határértéke és folytonossága Leindler Schipp - Analízis I. könyve + jegyzetek, kidolgozások alapján

7.4. A programkonstrukciók és a kiszámíthatóság

2014. szeptember 24. és 26. Dr. Vincze Szilvia

Struktúra nélküli adatszerkezetek

Számsorozatok (1) First Prev Next Last Go Back Full Screen Close Quit

3. Előadás. Megyesi László: Lineáris algebra, oldal. 3. előadás Lineáris egyenletrendszerek

BOOLE ALGEBRA Logika: A konjunkció és diszjunkció tulajdonságai

3. előadás. Programozás-elmélet. A változó fogalma Kiterjesztések A feladat kiterjesztése A program kiterjesztése Kiterjesztési tételek Példa

Analízis I. beugró vizsgakérdések

út hosszát. Ha a két várost nem köti össze út, akkor legyen c ij = W, ahol W már az előzőekben is alkalmazott megfelelően nagy szám.

A Turing-gép. Formális nyelvek III.

Bevezetés a programozásba I 3. gyakorlat. PLanG: Programozási tételek. Programozási tételek Algoritmusok

Diszkrét matematika I., 12. előadás Dr. Takách Géza NyME FMK Informatikai Intézet takach november 30.

Matematika III. 2. Eseményalgebra Prof. Dr. Závoti, József

Bonyolultságelmélet. Monday 26 th September, 2016, 18:27. Bonyolultságelmélet

1 2. gyakorlat Matematikai és nyelvi alapfogalmak. dr. Kallós Gábor

Exponenciális, logaritmikus függvények

5. előadás. Programozás-elmélet. Programozás-elmélet 5. előadás

Formális nyelvek és automaták vizsgához statisztikailag igazolt várható vizsgakérdések

Halmazelméleti alapfogalmak

ismertetem, hogy milyen probléma vizsgálatában jelent meg ez az eredmény. A kérdés a következő: Mikor mondhatjuk azt, hogy bizonyos események közül

Kiterjesztések sek szemantikája

MBNK12: Permutációk (el adásvázlat, április 11.) Maróti Miklós

Atomataelmélet: A Rabin Scott-automata

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

Határérték. prezentációjából valók ((C)Pearson Education, Inc.) Összeállította: Wettl Ferenc október 11.

A valós számok halmaza 5. I. rész MATEMATIKAI ANALÍZIS

A félév során előkerülő témakörök

Sorozatok I. Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma)

Átírás:

Számításelmélet Tamás Herendi

Számításelmélet Tamás Herendi Publication date 2014.

Table of Contents 1. Előszó... 1 2. Formális nyelvek... 2 3. Függvények növekedési rendje... 8 4. A Turing-gép... 14 1. A Turing-gép definíciója... 15 2. Felismerő Turing-gépek... 17 3. Turing-gépek megadása... 18 3.1. Táblázatos reprezentáció:... 18 3.2. Gráfreprezentáció:... 24 3.3. Turing-gép megadása felsorolással:... 24 3.4. Példák... 25 3.5. Feladatok... 25 4. Church-Turing tézis... 26 5. Turing-gépek összefűzése... 27 6. Többszalagos Turing-gépek, szimuláció... 33 5. Kiszámíthatóság-elmélet... 39 1. Univerzális Turing-gép és az univerzális nyelv... 39 2. A diagonális nyelv... 41 3. Nyelvek rekurzivitása... 41 4. Megállási probléma... 56 6. Nemdeterminisztikus Turing-gépek... 59 1. Nemdeterminisztikus Turing-gépek definíciója... 59 2. Nemdeterminisztikus Turing-gépek szimulációja... 63 7. Bonyolultságfogalmak... 66 1. Idő-, tár- és programbonyolultság... 66 2. Bonyolultsági osztályok... 69 3. Tár-idő tételek... 72 8. Az NP nyelvosztály... 74 1. A Tanú-tétel... 74 2. NP-teljesség... 76 Irodalomjegyzék... 80 iii

List of Figures 3.1. 1. ábra... 8 3.2. 2. ábra... 9 3.3. 3. ábra... 9 4.1. Turing gép modell... 15 4.2. Paritásellenőrző bit hozzáfűzése a bemenő szóhoz... 18 4.3. Kezdő konfiguráció:... 19 4.4.... 19 4.5.... 19 4.6.... 19 4.7.... 19 4.8.... 19 4.9.... 19 4.10.... 20 4.11.... 20 4.12.... 20 4.13.... 20 4.14.... 20 4.15.... 20 4.16.... 20 4.17. A Turing-gép számítása a bemeneten... 20 4.18. Paritásellenőrző bit tesztelése... 21 4.19. Kezdő konfiguráció:... 21 4.20.... 22 4.21.... 22 4.22.... 22 4.23.... 22 4.24.... 22 4.25.... 22 4.26.... 22 4.27.... 22 4.28.... 22 4.29.... 23 4.30.... 23 4.31.... 23 4.32.... 23 4.33.... 23 4.34.... 23 4.35. A Turing-gép számítása a bemeneten... 23 4.36. és kompozíciója... 28 4.37., és feltételes kompozíciója... 30 4.38. iterációja... 32 4.39. Többszalagos Turing-gép... 33 iv

Számításelmélet 4.40. Egy kétszalagos Turing-gép szimulációja... 37 v

List of Examples 3.1. 1. példa... 8 3.2. 2. példa... 8 3.3. 3. példa... 9 vi

Chapter 1. Előszó Jelen jegyzet a Debreceni Egyetemen tartott Számításelmélet kurzushoz, annak anyagára épülve készült. A kurzusnak - és ennek megfelelően a jegyzetnek is - alapvető célja, hogy a hallgatók megfelelő háttértudáshoz jussanak a kiszámíthatóság- és bonyolultságelméleti alapfogalmakból. A 2. fejezet az általános algoritmikus feladat és a Turing-gép megfogalmazásához szükséges formális nyelvekkel kapcsolatos fogalmakat ismerteti. A 3. fejezetben a bonyolultságelméletben alkalmazandó, függvények növekedési rendjével kapcsolatos definíciók és tulajdonságok találhatók. A 4. fejezet a Turing-gép definícióját és a hozzá kapcsolódó alapvető ismereteket tárgyalja. Itt kerül ismertetésre a Turing-gépek számításának fogalma, a Church-Turing tézis, a Turing-gépek összefűzésének elmélete, a több szalagos Turing-gépek definíciója és a hozzá kapcsolódó szimulációs tételek. Az 5. fejezetben a kiszámíthatóságelmélettel találkozhatunk, ahol a rekurzivitást, rekurzív felsorolhatóságot és ezek kapcsolatát vizsgáljuk. A fejezet végén az eldönthetőségi problémákról esik szó. A 6. fejezet a nemdeterminisztikus Turing-gépekkel kapcsolatos definíciókkal és alapvető tulajdonságokkal, valamint a modell Turing-ekvivalenciájával foglalkozik. A 7. fejezetben az idő-, tár- és programbonyolultságról, a velük definiálható bonyolultsági osztályokról és kapcsolatukról esik szó. A 8. fejezet az nyelvosztályhoz köthető eredményeket tárgyalja, többek között a tanú tételt és az - teljességgel kapcsolatos legfontosabb ismereteket. 1

Chapter 2. Formális nyelvek Ahogy általában a programokat, úgy az algoritmusokat is jellemzően nem egy konkrét feladat, hanem egy feladatcsoport megoldására alkotjuk. Az algoritmus bemenetét, kimenetét illetve más kapcsolódó objektumokat (pl. magát az algoritmust is) valamilyen általános módon szeretnénk megadni, kezelni. Ehhez szükségünk lesz néhány alapvető fogalomra és eredményre a formális nyelvek elméletéből. Először következzen néhány függvényekkel kapcsolatos fogalom. 2.1. Definíció Legyen és két tetszőleges nem üres halmaz. A két halmaz Descartes-szorzatán az párokból álló halmazt értjük. Ha, akkor az jelölést is használhatjuk. Legyen. Az halmazt az -n értelmezett relációnak nevezzük. Ha valamilyen és esetén, akkor azt mondjuk, hogy és szerinti relációban van. Legyen egy reláció. Ha és esetén csak akkor lehet, ha, akkor -et (parciális) függvénynek nevezzük és -vel jelöljük, illetve ha, akkor a hagyományos jelölést használjuk. Ha amelyikre, akkor totális függvénynek nevezzük. Legyen egy totális függvény. Ha esetén amelyikre, akkor -et szürjektív leképezésnek vagy ráképezésnek nevezzük. Amennyiben esetén -ből következik, hogy, akkor -et injektív leképezésnek vagy egy-egy értelmű leképezésnek nevezzük. Ha szürjektív és injektív is, akkor bijektívnek nevezzük. 2.2. Megjegyzés Az reláció esetén a hagyományos jelölés, ahogy például a és relációknál megszoktuk. Ha és két függvény, akkor értelmezhetjük az uniójukat, mint relációk unióját. Ez azonban nem lesz feltétlenül újabb függvény. Amennyiben feltesszük, hogy, akkor már is függvény, amire. Mivel a későbbiek során azt szeretnénk igazolni, hogy a felépített algoritmusfogalmunk matematikai szempontból precízen megadható, ezért szükség van az ábécé, szó és nyelv pontos, a szemléletestől eltérő, de minden részletre kiterjedő definíciójára. Erre azért is van különösen nagy szükség, hogy az üres jelnek nevezett szimbólum helyét megtaláljuk a rendszerben. 2.3. Definíció 2

Formális nyelvek Ábécé: a véges nem üres halmazt ábécének nevezzük. elemeit betűknek (időnként jeleknek) nevezzük. Amennyiben, akkor -re megköveteljük, hogy legyen. (A továbbiakban -t üres jelnek nevezzük.) 2.4. Definíció Legyen egy nem üres halmaz és egy leképezés esetén. Ha 1. ; -re teljesülnek a következők: 2. betűre igaz, hogy amire ; 3. és esetén, akkor és csak akkor, ha és ; (lehet, hogy elegendő az "akkor") 4. esetén, és, amelyikre ; (Ez lehet, hogy 5-ból következik.) 5. (Teljes indukció.) Legyen egy állítás elemein. Ha igaz és esetén -ből következik, akkor esetén igaz ; 6. Ha, akkor ; akkor -t a ábécé fölötti véges szavak halmazának és -t az üres szónak nevezzük. A hagyományoknak megfelelően használni fogjuk a és a jelölést. 2.5. Megjegyzés 1. Legyen. A leképezést egyszerűen úgy értelmezhetjük, hogy -t -ből egy betű hozzáírásával kapjuk. 2. A és halmazok között megadható egy természetes beágyazás, ahol. Ennek megfelelően a halmaz elemei tekinthetők a halmaz elemeiből álló véges hosszúságú sorozatoknak. 3. Az előző definíció 6. pontja alapján, azaz és különbözőek, de a két halmazban egymásnak megfeleltethetők. 4. A definíció 6. pontja alapján a 3. pontját kiterjeszthetjük az és esetekre is. 5. Az 5. pont lényegében azt jelenti, hogy minden szó előállítható az üres szóból betűk hozzáadogatásával. Ilyen módon, amennyiben, ahol, akkor a szót jelölhetjük a szokásos módon 6. A 3. pont alapján az előbbi előállítás egyértelmű. 7. Az előző pontot kiterjeszthetjük az üres jelre is, alakkal is. tulajdonsággal. 2.6. Definíció Legyen 1. ; függvény a következő tulajdonságokkal: 3

Formális nyelvek 2., és esetén. Ekkor az értéket a szó hosszának nevezzük. 2.7. Tétel esetén értéke egyértelműen definiált. Bizonyítás Egy szó hossza a definíció alapján azt jelenti, hogy hányszor kellett leképezést alkalmazni az üres szóra, hogy megkapjuk -t. Mivel a szó előállítása során a valódi bővítő lépések darabszáma és sorrendje rögzített, hosszára egyértelmű értéket kapunk. 2.8. Megjegyzés Belátható,hogy amennyiben egy szót véges jelsorozatnak tekintünk, a hossza pontosan a benne szereplő jelek számával egyezik meg. 2.9. Definíció Legyen egy kétváltozós művelet -on, azaz: :, a következő tulajdonságokkal: 1. legyen ; 2. és esetén. Ekkor -t az összefűzés (más néven konkatenáció) műveletének nevezzük. A hagyományoknak megfelelően a jelölés helyett gyakran az egyszerűbb írásmódot választjuk. 2.10. Tétel A konkatenáció műveletére igaz, hogy esetén, ha és Bizonyítás, akkor. A bizonyítást -re vonatkozó teljes indukcióval végezzük. a.) A definíció alapján, ha, azaz, akkor az állítás igaz. b.) Tegyük fel, hogy egy adott esetén minden szóra, ha, akkor az állítás igaz. Legyen egy hosszú szó. Ha utolsó betűje, akkor valamilyen -re, ahol. Az indukciós feltevés szerint. Felhasználva az összefűzés definícióját, ami azt jelenti, hogy az állítás -re is igaz. a.)-ból és b.)-ből teljes indukcióval következik az állítás. 2.11. Tétel 4

Formális nyelvek a konkatenációval, mint kétváltozós művelettel egységelemes félcsoportot alkot. Bizonyítás A bizonyítást teljes indukcióval végezzük. 1. A konkatenáció asszociatív: a.) Definíció szerint. b.) Tegyük fel, hogy egy adott esetén minden szóra, ha, akkor igaz az asszociativitás. Legyen olyan, hogy. Ekkor és amelyikre és. Az indukciós feltevés alapján minden szóra igaz, hogy. Ez alapján, ami azt jelenti, hogy -re is igaz az állítás. a.)-ból és b.)-ből teljes indukcióval következik az asszociativitás. 2. egységelem. Definíció szerint minden esetén. Azt, hogy, teljes indukcióval bizonyíthatjuk. a.) Definíció szerint. b.) Tegyük fel, hogy minden esetén, ha, akkor. Legyen egy hosszúságú szó. Ekkor és, amire és. Az indukciós feltevés alapján, ami azt jelenti, hogy az állítás -re is igaz. a.)-ból és b.)-ből teljes indukcióval következik. Ezzel a tételt beláttuk. 2.12. Tétel A konkatenáció műveletére érvényes az egyszerűsítési szabály, azaz esetén -ből következik. Hasonlóan -ből következik Bizonyítás 5

Formális nyelvek A bizonyítást az előzőekhez hasonlóan teljes indukcióval végezhetjük. Az első esetben pedig -re és -re egyidejűleg. -re, a második esetben Szavak szerkezetének leírására hasznosak a következő definíciók. 2.13. Definíció Legyen olyan, hogy. Ekkor -t a egy kezdőszeletének, -t pedig egy zárószeletének nevezzük. 2.14. Megjegyzés Egy szó saját magának triviális kezdő- és zárószelete. Az üres szó minden szónak triviális kezdő- és zárószelete. A véges szavak halmazán megadhatunk alakú transzformációkat. Ezek rendelkezhetnek bizonyos jó tulajdonságokkal. Néhány a legfontosabbak közül a következőképpen adható meg. 2.15. Definíció Egy alakú transzformációt hossztartónak nevezünk, ha esetén. 2.16. Megjegyzés Hossztartó leképezés például a tükrözés, betűpermutáció, ciklikus permutáció, stb. 2.17. Definíció Egy alakú transzformációt kezdőszelettartónak nevezünk, ha esetén amelyikre. 2.18. Megjegyzés Az előző példák közül a tükrözés és ciklikus permutáció nem, viszont a betűpermutáció kezdőszelettartó. Kezdőszelettartó, viszont nem hossztartó például a következő transzformáció:. (Ismétlés.) A szavak fogalmát felhasználva az algoritmusok szempontjából fontos objektum meghatározásához érkeztünk. 2.19. Definíció Legyen egy véges ábécé. Az halmazt egy fölötti (formális) nyelvnek nevezünk. Nyelveken értelmezhetjük a hagyományos halmazműveleteket, pl. ha két nyelv, akkor az és is az. Az nyelvet az komplementerének nevezzük. Ezeken kívül kiemelt szerepűek a következő nyelvműveletek. 2.20. Definíció Legyen két nyelv. Az nyelvet a két nyelv összefűzésével nyert nyelvnek nevezzük és -vel jelöljük. 2.21. Megjegyzés 6

Formális nyelvek Ha az nyelvet saját magával fűzzük össze, használhatjuk a következő egyszerűsített jelölést: és, ha. 2.22. Definíció Legyen egy nyelv. Az nyelvet az iteráltjának, vagy más néven a konkatenációra vett lezártjának nevezzük. 2.23. Megjegyzés A lezárt elnevezés abból a tényből ered, hogy legszűkebb nyelv, amelyiknek részhalmaza az összefűzés művelete. 2.24. Definíció pontosan az a és nem vezet ki belőle Legyen nyelveknek egy osztálya. Ekkor }. Itt az nyelv komplementerét jelöli. 2.25. Megjegyzés nem a komplementerét jelöli. Olyannyira nem, hogy nem feltétlenül üres. Ha pl. az összes nyelv osztálya, akkor. 2.26. Tétel Legyen és két ugyanazon ábécé fölötti nyelvek osztálya. Ekkor 1. ; 2. ; 3. ; 4. akkor és csak akkor, ha. Bizonyítás Szokásos halmazelméleti egyenlőségbizonyításokkal dolgozhatunk. 1. Felírhatjuk a következő ekvivalencialáncot: vagy vagy. 2. Az előzőhöz teljesen hasonlóan felírhatjuk a következő ekvivalencialáncot: 3. Ebben az esetben a következő írhatjuk: és és.. 4. Definíció szerint akkor és csak akkor, ha és akkor és csak akkor, ha. Definíció szerint akkor és csak akkor, ha -ból következik. Az előzőek alapján ez pontosan akkor áll fenn, ha -ból következik. 7

Chapter 3. Függvények növekedési rendje A későbbi fejezetekben, bonyolultságelméleti vizsgálatoknál, szükségünk lesz arra, hogy függvények növekedési rendjét (aszimptotikus, azaz a végtelenhez tartó viselkedését) egységes formában ki tudjuk fejezni. Ehhez lényegében egy olyan formulát fogunk használni, amelyik segítségével egy függvényből egyszerűen le tudjuk választani a legfontosabb, legmeredekebben növő összetevőjét. 3.1. Definíció Legyen egy monoton növekvő függvény. Az halmazt az rendjébe tartozó függvények osztályának nevezzük. függvény növekedési Ha, azt mondjuk, hogy " egy nagy ordó " függvény. 3.2. Megjegyzés A növekedési rend egyértelművé tételéhez a legtisztább, ha -ről feltesszük, hogy monoton növekvő, de ez nem feltétlenül szükséges. Ez a feltételezés sok vizsgálatot feleslegesen elbonyolítana, az érthetőséget rontaná. A helyett gyakran a hagyományos jelölést használják. A definíció alapján legnyilvánvalóbb példa, ha egy függvény felülről korlátoz egy másikat. Erre azonban nem feltétlenül van szükség. Az alábbiakban néhány szemléletes példán keresztül megvizsgáljuk, hogy első megközelítésben mit is fejez ki a növekedési rend. Example 3.1. 1. példa Ha feltételezzük, hogy, akkor a definíció feltételei, választással teljesülnek. Figure 3.1. 1. ábra Example 3.2. 2. példa 8

Függvények növekedési rendje Ha feltételezzük, hogy, ha, kis -ek esetén nem törődünk a függvények viszonyával. Figure 3.2. 2. ábra Example 3.3. 3. példa Itt, viszont egy konstanssal megszorozva már nem kisebb mint. Figure 3.3. 3. ábra 3.3. Tulajdonságok 1. (reflexivitás) 2. minden esetén 3. Legyen és. Ekkor (tranzitivitás) Bizonyítás 9

Függvények növekedési rendje 1. Legyen és. Mivel minden esetén, így minden esetén. 2. Legyen és. Ekkor, azaz, minden esetén. 3. Legyen és olyan, hogy, ha és és olyan, hogy, ha. Ekkor és választással azt kapjuk, hogy, ha és, azaz. 3.4. Megjegyzés 1. A tranzitív tulajdonság kifejezi azt az elvárásunkat, hogy egy függvény gyorsabban nő, mint gyorsabban nő, amelyiktől, akkor minden olyan függvénytől is gyorsabb. 2. A növekedési rend definíciója alapján nem csak monoton függvényekre értelmezhető, de abban az esetben a vizsgálataink szempontjából nem értékes a jelentése. 3. A növekedési rendekre sem a szimmetria, sem az antiszimmetria nem teljesül. A szimmetriára ( ) az és függvénypár, míg az antiszimmetriára ( ) az és függvénypár jelent ellenpéldát. 3.5. További tulajdonságok 4. Legyen és. Ekkor. 5. Legyen és. Ekkor. 6. Legyen monoton növekvő, amire és. Ekkor. Bizonyítás 3. Tegyük fel, hogy és -re illetve, -re teljesül, hogy és. Legyen és. Ekkor. 4. Hasonlóan az előzőhöz, tegyük fel, hogy és -re illetve, -re teljesül, hogy és. Legyen és. Ekkor. 5. Tegyük fel, hogy -re illetve -re teljesül, hogy. Az általánosság megszorítása nélkül feltehetjük, hogy. Mivel a függvény szigorúan monoton növekvő, ezért. Mivel, ezért. Legyen. monotonitása miatt, és 10

Függvények növekedési rendje 3.6. Következmények 1. Legyen! Ekkor akkor és csak akkor, ha. 2. Legyen! Ekkor akkor és csak akkor, ha. 3. Legyen k > 0! Ekkor és. 4. Legyen! Ekkor. Bizonyítás Az 1., 2., 3. és 4. következmények egyszerű megfontolással származtathatók az 4.,5. és 6. tulajdonságokból. A következőkben definiálunk egy érdekes függvénysorozatot illetve hozzájuk kapcsolódóan egy rendkívül gyorsan növő függvényt. 3.7. Definíció Legyen, egy függvénysorozat, melyekre teljesülnek a következő tulajdonságok: 1. 2. 3. A függvénysorozat első néhány eleme a jól ismert aritmetikai műveleteket adja vissza. 1. a rákövetkező, 2. az összeadás, azaz 3. a szorzás, azaz 4. a hatványozás, azaz művelete. A definíció lényegében a szokásos meghatározásoknak a kiterjesztése: 1. az összeadás értelmezése, hogy -et -szor növeljük -el; 2. a szorzás értelmezése, hogy -et -szor adjuk össze önmagával; 3. a hatványozásnál -et -szor szorozzuk össze önmagával; stb. Ilyen módon egyre gyorsabban növő függvényeket kapunk. A függvénysorozatot felhasználva tudunk készíteni egy olyan függvényt, amelyik a sorozat minden elemétől jobban nő:. Szokás közvetlenül, a függvénysorozat felhasználása nélkül is definiálni egy ehhez kapcsolódó, rendkívül gyorsan növő függvényt. 3.9. Definíció 11

Függvények növekedési rendje Ackermann-függvény: Legyen függvény adott a következő rekurzív definícióval: 1. 2. 3. Az függvényt Ackermann-függvénynek nevezzük. Az nagyjából az -nek megfelelő értéket vesz fel (valamivel kisebb). első néhány függvényértéke:, ahol k egy több mint jegyű szám. Világos, hogy ez az érték messze meghaladja a az elképzelhető, vagy akár a lejegyezhető értéket. (Jóval nagyobb, mint a világegyetem összes atomjának száma.) És a növekedése egyre nagyobb ütemű. A növekedési rendek pontosabb kifejezésére más definíciókat is szokás használni. Ezek közül néhány fontosabbat megadunk a következő oldalakon, megvizsgálva egy-két alapvető tulajdonságukat. 3.10. Definíció Legyen egy függvény. A halmazt az függvény pontos növekedési rendjébe tartozó függvények osztályának nevezzük. 3.11. Tulajdonságok 1. Legyen két függvény. Ekkor akkor és csak akkor, ha. 2. Legyen két függvény. Ekkor akkor és csak akkor, ha és Bizonyítás 1. Legyen és olyan, hogy, ha, valamint és. Ekkor az első egyenlőtlenség alapján, ha illetve a második egyenlőtlenség alapján, ha. Ezzel tulajdonképpen az állítást igazoltuk. 2. A és relációk definíciója alapján és valamint és, amelyekre, ha és, ha. Legyen és. Az előző két egyenlőtlenség alapján azt kapjuk, hogy, ha. 12

Függvények növekedési rendje 3.12. Definíció Legyen egy függvény. Az halmazt az függvénytől kisebb növekedési rendű függvények osztályának nevezzük. Ha, azt mondjuk, hogy " egy kis ordó " függvény. 3.14. Tulajdonságok 1. Legyen két függvény. Ekkor akkor és csak akkor, ha. 2. Legyen egy függvény. Ekkor. 3. Legyen egy függvény. Ekkor. Bizonyítás 1. Legyen és olyan, hogy, ha. Ekkor, ha, azaz akármilyen kis esetén megadható egy korlát, hogy az -től nagyobb -ek esetén. Ez a határérték definíciója alapján pontosan azt jelenti, hogy. Visszafelé, azt jelenti, hogy esetén, amelyikre, ha. Ez alapján -nel beszorozva pontosan a keresett állítást kapjuk. 2. A definíciók alapján világos, hogy és. Legyen. A definíciók alapján ekkor és, amelyekre, ha, és esetén úgy, hogy ha. Legyen. Erre az -re igaz, hogy ha, ami pontosan a bizonyítandó állítás. 3. Indirekt módon, ha feltételezzük, hogy, akkor. Erre a -re igaz, hogy és, amelyekre ha, továbbá, úgy, hogy, ha. Legyen. Erre az -re igaz, hogy és, ha, ami ellentmondás. 13

Chapter 4. A Turing-gép Az algoritmus fogalmáról az informatikával szorosabb kapcsolatot ápolóknak van valamilyen elképzelése. A legtöbb esetben meg tudjuk mondani, hogy az éppen vizsgált dolog algoritmus-e vagy sem. Legalábbis a "hétköznapi" esetekben. Sokan asszociálnak az algoritmusok kapcsán számítógép-programokra, nem teljesen alaptalanul. Nem egyértelmű azonban, hogy például egy orvosi vizsgálat, vagy akár a járás tekinthető-e algoritmusnak. Minél inkább próbáljuk pontosítani a fogalmat, annál inkább ütközünk korlátokba. Az algoritmusokkal kapcsolatban a következő elvárásaink vannak: Az algoritmusnak jól meghatározott feladatot illetve feladattípust kell megoldania. Az algoritmus elkülöníthető lépésekből álljon, ezen lépések száma (típusa) véges legyen. Szeretnénk a feladatra adott megoldást véges időben megkapni. Az algoritmus minden egyes lépésének pontosan definiáltnak kell lennie. Az algoritmus számára szükség lehet bizonyos bemenő adatokra, amivel a megoldandó feladatosztály egy speciális feladatát jelöljük ki. Az adatok mennyisége csak véges lehet, annak minden értelmében. Az algoritmus válaszoljon a bemenetre. A válasznak megfelelően értelmezhetőnek és természetesen végesnek kell lennie. Látható, hogy ha megfelelően általánosan akarjuk meghatározni az algoritmus fogalmát, akkor több bizonytalanságot kell hagynunk benne. A legproblémásabb rész a "lépés" fogalma. Mit jelent az, hogy "pontosan definiált"? Ha megadunk egy igazán pontos definíciót, máris leszűkítjük a lehetőségeinket. Az algoritmus mibenlétének pontos meghatározásával a múlt század első felében többen is próbálkoztak. Ennek eredményeképpen több, egymástól különböző fogalom is megszületett, mint például a függvények, rekurzív függvények, Markov-gép és a Turing-gép. Mivel ezek pontosan definiált modellek, az az érzésünk lehet, hogy nem tekinthetők teljes mértékben alkalmasnak az algoritmus fogalmának helyettesítésre. Belátható, hogy az előbb felsorolt modellek egymással ekvivalensek, ami azt jelenti, hogy minden feladat, ami az egyik modellben megoldható, megoldható a másikban is. Az algoritmus fogalmának helyettesítésére azonban mind a mai napig nem találtak a felsoroltaknál teljesebb modellt. A jegyzetben a legnagyobb figyelmet a Turing-gép modelljének fogjuk szentelni, mivel az egyik leginkább letisztult, világosan érthető és sok szempontból kifejező fogalomnak bizonyult. Igaz ez annak ellenére is, hogy a ma legszéleskörűbben elterjedt számítógép-architektúrák modellezésére nem kifejezetten alkalmas. Turing-gépek segítségével könnyen ki tudjuk fejezni a kiszámíthatóság, azaz az algoritmussal való megoldhatóság fogalmát, és meg tudunk határozni egy precíz mértéket az algoritmusok bonyolultságának valamint a feladatok nehézségének leírására is. A Turing-gép elnevezés a modell kitalálójára, Alan Turingra (1912-1954) utal. A tényleges definíciónak számtalan azonos értelmű változata létezik. Ezek közül mi az egyik leginkább letisztult, megfelelően kifejező változatot használjuk. Ahhoz, hogy egyáltalán megpróbálhassuk matematikai eszközökkel leírni az algoritmusokat, szűkíteni kell a megoldásra váró feladatok körét. Ki kell zárnunk a lehetőségek közül többek között a fizikai objektumokon végrehajtott mechanikai műveleteket. Ez nem jelenti azt, hogy az ilyen jellegű problémákat nem tekintjük algoritmikusan megoldhatónak, csak annyi, hogy a fizikai algoritmus helyett annak egy matematikai modelljét tudjuk csak kezelni, és egy megfelelő interfész segítségével fizikai műveletekké alakítani. Ez lényegében a gyakorlatban minden esetben így működik, hiszen önmagukban a végrehajtott algoritmusaink, illetve a nekik megfelelő programjaink eredményeit nem észlelhetnénk. Feltételezzük tehát, hogy a feladat és annak paraméterei, bemenő adatai valamilyen véges reprezentációval leírhatóak. Ennek megfelelően a továbbiakban az algoritmusaink bemenetét (a feladat leírását) egy rögzített véges ábécé feletti szóként adjuk meg, és hasonló formában várjuk a választ is. Egy algoritmust tekinthetünk 14

A Turing-gép tehát úgy, mint egy leképezést, amely szavakhoz szavakat rendel. Világos, hogy meg tudunk adni olyan algoritmusokat, amelyek bizonyos bemenetekre "nem reagálnak", azaz nem adnak kimenetet (ilyenkor parciális függvényt valósítanak meg). Elképzelhetőek olyan speciális algoritmusok is, amelyek a bemenő szavak végtelen számossága ellenére csak véges sok lehetséges választ adhatnak. Erre példa a klasszikus elfogadó (felismerő) algoritmus, amely a bemenet értékétől függően igennel vagy nemmel válaszol (elfogadja, illetve elutasítja a bemenetet). 4.1. Definíció Legyen egy ábécé, egy nyelv, és egy transzformáció. Algoritmikus feladatnak (vagy egyszerűen csak feladatnak)nevezzük a következőket: 1. Határozzuk meg, hogy fennáll-e a reláció! 2. Határozzuk meg értékét! Az 1. típusú feladatot döntési (felismerési) feladatnak, míg a 2. típusút transzformációs feladatnak nevezzük. A későbbiekben látni fogjuk, hogy már az előbb említett, egyszerűnek látszó döntési feladat sem könnyű. Bebizonyítjuk, hogy vannak olyan problémák, amelyekről nem tudjuk eldönteni még azt sem, hogy egyáltalán megoldhatóak-e. Figure 4.1. Turing gép modell 1. A Turing-gép definíciója 4.2. Definíció A ötöst Turing-gépnek nevezzük, ha : véges, nem üres halmaz; állapotok halmaza véges, legalább elemű halmaz, ; szalag ábécé ; kezdő állapot, nem üres; végállapotok halmaza ; átmenetfüggvény A fenti formális definíciót megfelelő értelmezéssel kell ellátnunk. A szemünk előtt a következő "fizikai" modell fog lebegni: A Turing-gép három fő részből áll: 1. egy mindkét irányban végtelen szalag, cellákra osztva, a cellák tartalma a ábécé elemei közül kerül ki; 15

A Turing-gép a szalagon legfeljebb véges sok cellában van -beli elem és ezek között nem lehet (összefüggően helyezkednek el az értékes jelek); 2. egy regiszter, -beli értéket tartalmaz, ez határozza meg a Turing-gép pillanatnyi működését; 3. egy író-olvasó fej, ami mindig egy konkrét cellára mutat; ez kapcsolja össze a szalagot a regiszterrel. A Turing-gép egy lépése során beolvassa a szalagról az író-olvasó fej alatt levő jelet, a beolvasott jel értékétől, és a regiszterben tárolt állapottól függően a által meghatározott módon lép: - visszaír egy jelet az író-olvasó fej alatti cellába és megváltoztatja az állapotát vagy - a szomszédos cellák valamelyikére mozdítja az író-olvasó fejet és megváltoztatja az állapotát. A Turing-gép alternatív meghatározásaiban általában egyidejűleg történik a szalagra írás és fejmozgatás, a szétválasztás segítségével azonban bizonyos definíciókat lényegesen egyszerűbben és letisztultabban adhatunk meg. A szem előtt tartott értelmezésnek megfelelően szükség van matematikailag is pontos, jól meghatározott "működésre". Ezt írjuk le a következő definíciókkal. 4.3. Definíció A Turing-gép egy konfigurációja (= regiszterállapot + szalagtartalom, az író-olvasó fej helyének jelölésével) 4.4. Megjegyzés Egy Turing-gépnek csak akkor létezik alakú konfigurációja, ha vagy. 4.5. Definíció Azt mondjuk, hogy a Turing-gép. egy lépésben (vagy közvetlenül) átmegy -ból a konfigurációba (jelekben ), ha és a következők közül pontosan egy teljesül: 1), ahol, és. --- felülírási üzemmód 2), ahol, és. --- jobbra lépési üzemmód 3), ahol, és. --- balra lépési üzemmód 4.6. Megjegyzés 1. Mivel minden és a esetén egyértelműen definiált, ezért minden szabályos konfiguráció esetén vagy létezik egyértelműen konfiguráció, amelyikbe közvetlenül átmegy, vagy egyáltalán nem létezik ilyen. 2. A Turing-gép konfigurációjának definíciója, illetve a definíció utáni megjegyzés alapján, ha és, akkor a Turing-gép csak akkor tud továbblépni, ha vagy. 3. A jel tulajdonságai alapján, ha és, a átmenetben. 16

A Turing-gép Hasonlóképpen, ha és, akkor a átmenetben 4.7. Definíció. A Turing-gép egy számítása konfigurációk egy sorozata amelyekre 1., ahol ; 2., ha létezik -ből közvetlenül elérhető konfiguráció (és ez az egyértelműség miatt ); 3., ha nem létezik -ből közvetlenül elérhető konfiguráció. A szót a bemenetének nevezzük. Ha olyan, hogy, akkor azt mondjuk, hogy a számítás véges, a Turing-gép a végállapotban megáll. Ekkor a szót kimenetének nevezzük. Jelölése:. Ha egy esetén a Turing-gépnek végtelen számítása van, akkor nem értelmezünk kimenetet. Jelekben:. (Nem összetévesztendő a kimenettel.) 4.8. Megjegyzés Egy Turing-gépnek kétféleképpen lehet végtelen számítása egy bemeneten: 1. -re létezik -ből közvetlenül elérhető konfiguráció; 2., amelyikre -ből nincs közvetlenül elérhető konfiguráció és -hez tartozó állapot nem végállapot. (A Turing-gép "befagy" a konfigurációban.) 2. Felismerő Turing-gépek 4.9. Definíció Legyen egy Turing-gép, és. Ekkor -t elfogadó Turing-gépnek nevezzük, a -beli állapotokat pedig elfogadó állapotoknak. 4.10. Definíció Legyen egy elfogadó Turing-gép, a elfogadó állapotainak halmaza. Azt mondjuk, hogy elfogadja a szót, hogyha számítása véges a bemeneten, és megálláskor -beli állapotban van. 4.11. Definíció Legyen egy elfogadó Turing-gép. Az nyelvet a által felismert nyelvnek nevezzük. 17

A Turing-gép 4.12. Lemma Legyen egy elfogadó Turing-gép és. Ekkor átalakító Turing-gép, amelyikre pontosan akkor, ha. Bizonyítás Az előbbi lemma alapján megállapíthatjuk, hogy az elfogadó Turing-gépek lényegében nem jelentenek újdonságot az átalakító Turing-gépekhez képest, azonosnak tekinthetők az általuk felismert nyelv karakterisztikus függvényét megvalósító Turing-géppel. 3. Turing-gépek megadása Egy Turing-gép megadása a definícióban szereplő ötös leírását jelenti. és esetében ez nem jelent különösebb kihívást, viszont az átmenetfüggvény meghatározása kicsit több erőfeszítést igényel. Mivel azonban véges halmazon értelmezett, véges halmazba képező függvényről van szó, szerencsére több egyszerű lehetőségünk is adódik rá. A különböző reprezentációk használatát két Turing-gép különböző megadásával szemléltetjük. Az első Turing-gép által megvalósított feladat a ábécé fölötti szavakon végrehajtott paritásellenőrző bites kódolás. Ez egy tipikus transzformációs feladat. Kezdőszelettartó, viszont nem hossztartó átalakítás. A leképezés lényege, hogy a bemenő szóban megszámoljuk az jeleket és a szót kiegészítjük egy új jellel úgy, hogy a keletkezett szóban az -esek száma páros legyen. Ez a transzformáció az egyik legegyszerűbb, de az egyik leghatékonyabb és széles körben alkalmazott hibafelismerő kódolás. Pl. Paritásbit hozzáfűzése: Be: Ki: Be: Ki: A tényleges alkalmazásoknál általában feltételezik, hogy az egyes kódszavak azonos hosszúságúak, de a példában nem élünk ezzel a megszorítással. A második Turing-gép segítségével azt ellenőrizzük, hogy a bemenő szó megfelel-e a paritási feltételnek, azaz páros sok található benne. Ha igen, akkor elfogadjuk, ha nem, akkor sérültnek tekintjük. 3.1. Táblázatos reprezentáció: A táblázatos reprezentációban az átmenetfüggvényt többféleképpen is megadhatjuk. Egyik lehetőség, hogy a táblázat oszlopait állapotokhoz, sorait bemenetekhez (az író-olvasó fej által beolvasott értékekhez) rendeljük, a cellák tartalma pedig a függvényértékeket tartalmazza a megfelelő argumentumok esetén. A táblázat természetesen hiányos is lehet, amennyiben az átmenetfüggvény nem mindenütt definiált. Pl. Paritásbit hozzáfűzése A szakasz elején megadott feladat megoldására alkalmas Turing-gép a következő: ahol,, és : Figure 4.2. Paritásellenőrző bit hozzáfűzése a bemenő szóhoz 18

A Turing-gép A Turing-gép állapota végállapot, a kezdő állapot és egyben annak jelzésére szolgál, hogy az eddig megvizsgált jelsorozatban páros sok található. A állapot jelentése, hogy az eddigi vizsgálatok során páratlan sok található. A és állapotok az író-olvasó fej továbbítására és a paritásérték megjegyzésére szolgálnak. Egy konkrét bemeneten a Turing-gép a következő számítást végzi el: Be: Figure 4.3. Kezdő konfiguráció: Figure 4.4. Figure 4.5. Figure 4.6. Figure 4.7. Figure 4.8. Figure 4.9. 19

A Turing-gép Figure 4.10. Figure 4.11. Figure 4.12. Figure 4.13. Figure 4.14. Figure 4.15. Figure 4.16. Látható, hogy a Turing-gép számításának leírása így meglehetősen kényelmetlen, bár könnyen feldolgozható. Sokkal egyszerűbb az eredeti definíciónak megfelelően a konfigurációk leírásával megadni. Figure 4.17. A Turing-gép számítása a bemeneten 20

A Turing-gép Pl. Paritásbit ellenőrzése ahol,, és : Figure 4.18. Paritásellenőrző bit tesztelése A Turing-gép állapota elfogadó-, míg elutasító állapot, azaz és a kezdő állapot és egyben annak jelzésére szolgál, hogy az eddig megvizsgált jelsorozatban páros sok található. A állapot jelentése, hogy az eddigi vizsgálatok során páratlan sok található. A és állapotok az író-olvasó fej továbbítására és a paritásérték megjegyzésére szolgálnak. Egy konkrét bemeneten a Turing-gép a következő számítást végzi el: Be: Figure 4.19. Kezdő konfiguráció: 21

A Turing-gép Figure 4.20. Figure 4.21. Figure 4.22. Figure 4.23. Figure 4.24. Figure 4.25. Figure 4.26. Figure 4.27. Figure 4.28. 22

A Turing-gép Figure 4.29. Figure 4.30. Figure 4.31. Figure 4.32. Figure 4.33. Figure 4.34. A Turing-gép számításának leírása a konfigurációi segítségével: Figure 4.35. A Turing-gép számítása a bemeneten 23

A Turing-gép 3.2. Gráfreprezentáció: 3.3. Turing-gép megadása felsorolással: Az átmenetfüggvény megadható a definiált argumentumokon felvett értékek felsorolásával is. A paritásbit generáló Turing-gép átmenetfüggvénye: 24

A Turing-gép A paritásbit ellenőrző Turing-gép átmenetfüggvénye: 3.4. Példák 1. A bemenő szót tükröző Turing-gép:. 2. A bemenő szót megduplázó Turing-gép:. 3. A bemenő szót, mint bináris számot eggyel megnövelő Turing-gép:, ahol. 3.5. Feladatok 1. Adjunk meg egy Turing-gépet, amelyik a szót írja a szalagra! 25

A Turing-gép 2. Adjunk meg egy Turing-gépet, amelyik a szót írja a szalagra! 3. Adjunk meg egy Turing-gépet, amelyik a bemenő szót invertálja, azaz minden -t -ra, minden -t -re cserél! 4. Adjunk meg egy Turing-gépet, amelyik a bemenő szóban páronként megcseréli a jeleket! Pl. 5. Adjunk meg egy Turing-gépet, amelyik a bemenő szóról eldönti, hogy melyik jelből található több! Ha -ból, akkor, ha -ből, akkor, illetve ha egyenlőek, akkor állapotban áll meg. 4. Church-Turing tézis Ahogy azt a fejezet elején levő bevezetőben leírtuk, egy algoritmusra úgy tekintünk, mint egy függvényre, ami egy bemenő szóhoz (feladat) kiszámít egy kimenő szót (megoldás). Az előző szakasz definíciói alapján a Turing-gépek is hasonló feladatot oldanak meg. Felvetődik a kérdés, hogy melyek azok a feladatok, amelyek Turing-géppel megoldhatóak. Erre próbál választ adni a következő állítás. 4.13. Church-Turing tézis Legyen egy algoritmus, ami szavakat szavakká alakít, azaz. Ekkor létezik egy Turing-gép, amelyikre esetén. 4.14. Megjegyzés 1. Amennyiben egy adott bemenet esetén nem áll meg, nem definiált. Ekkor feltételezzük, hogy sem áll meg az adott szón. 2. A Church-Turing tézis mind a transzformációs, mind a döntési feladatra értelmezhető. Ez utóbbi esetben az algoritmus kimenete értelemszerűen nem egy szó, hanem egy döntés. (pl. igen-nem ) A Church-Turing tézis érdekessége, hogy a benne szereplő egyik fogalomnak (algoritmus) nincs matematikai definíciója. Ennek következménye, hogy az állításnak nem létezhet matematikai bizonyítása. Igazságértéke viszont van. Mit kezdhetünk akkor vele? Szokatlan módon, igazolni ugyan elvileg is lehetetlen, amennyiben azonban hamis az állítás, azt lehet bizonyítani. Ehhez elegendő találni egy olyan feladatot, amit valamilyen algoritmusnak elfogadható módszerrel meg tudunk oldani, Turing-géppel viszont bizonyíthatóan nem. A tézis első megfogalmazása az 1930-as évekre tehető. Azóta cáfolni nem sikerült, annak ellenére, hogy jó páran próbálkoztak vele. Tipikus módszer erre az, hogy kifejlesztenek egy újabb algoritmusmodellt, majd megpróbálják belátni, hogy van olyan feladat, amit ennek segítségével meg lehet oldani, Turing-géppel viszont nem. A mai napig azonban minden modellről kiderült, hogy nem erősebb a Turing-gép modellnél. Ha a megoldható feladatok osztálya az adott modell esetén ugyanaz, mint a Turing-gépekkel megoldható feladatok osztálya, a kérdéses algoritmusleírást Turing-ekvivalensnek nevezik. A későbbiek során mi is megismerünk néhány újabb modellt (alapvetően a Turing-gép általánosításairól lesz szó), és be is látjuk Turingekvivalenciájukat. Nem véletlen az sem, hogy számtalan Turing-gép definíció létezik. Ekvivalenciájuk miatt elhanyagolható a köztük levő különbség, ezért több-kevesebb szabadságot engedhetünk meg, megtartva az eredeti ötletet: mindkét (vagy csak egy) irányban végtelen (vagy végtelenül nyújtható) szalag, véges állapotú regiszter. A legismertebb Turing-ekvivalens algoritmusmodellek: 26

A Turing-gép kalkulus RAM gép Markov algoritmus Rekurzív függvények Sejtautomaták Neurális háló modell Genetikus algoritmus 5. Turing-gépek összefűzése Egy konkrét feladat megoldása Turing-gép segítségével a legtöbb esetben nem nyilvánvaló. Megadható azonban néhány művelet a Turing-gépeken, amelyek segítségével Turing-gépek felhasználásával új Turing-gépeket hozhatunk létre. Ezen műveletek hatásának megismerésével egyszerűbbé válik a modell használata, a bizonyítások megértése. Segítségével a jóval hétköznapibb eljáráselvű programozáshoz hasonló megoldásokat és gondolkodásmenetet követhetjük, megtartva a matematikai precizitás lehetőségét. 4.15. Definíció (Turing-gépek összefűzése [kompozíciója]) Legyen és két Turing-gép. Tegyük fel, hogy. A (vagy Turing-gépet a következőképpen definiáljuk:, ahol,,, Itt és. ahol, minden és esetén, valamint minden esetén és. 4.16. Megjegyzés A függvények uniója itt a 2. fejezetben értelmezett módon relációk uniójaként tekinthető. 4.17. Tétel Az előbbi definícióban adott Turing-gépre, azaz a Turing-gép lényegében a és Turing-gépek egymás utáni "futtatásával" kapható meg. Bizonyítás Legyen egy tetszőleges hosszúságú szó, számítása a bemeneten, számítása a bemeneten. Ha megáll a bemeneten, legyen és számítása a bemeneten. A definíció alapján, mivel, így. 27

A Turing-gép Ugyancsak a definíció szerint, ha, akkor, azaz ameddig, addig. Ez alapján, ha nem áll meg -n, akkor az sem áll meg. Ha, ahol, akkor a Turing-gép megáll. Ebben az esetben, azaz a szalag tartalma. definíciója alapján ilyenkor továbbszámol, a -nek megfelelően, azaz először átmegy a lépések során $K=(s_t,w_1,a,w_2)$ konfigurációba, majd a következő az író olvasó fejet a szalag elejére viszi. Ha azt eléri, átmegy a konfigurációba - itt -, ami viszont megegyezik a konfigurációval. Mivel, ha, ezért innentől kezdve, azaz ha nem áll meg -n, akkor sem fog megállni, egyébként pedig. Figure 4.36. és kompozíciója Felismerő Turing-gépek segítségével a feltételes végrehajtás (feltételes eljáráshívás) struktúráját is modellezni tudjuk. 4.18. Definíció (feltételes elágazás) Legyen, és három Turing-gép. Tegyük fel, hogy,,,,. A Turing-gépet a következőképpen definiáljuk:, ahol,,, és. Itt, ahol, minden és esetén, 28

A Turing-gép, minden és esetén, minden és esetén valamint, ahol. 4.19. Megjegyzés Többszörös elágazás is definiálható, ha -et nem két, hanem több részre partícionáljuk, és mindegyiknek megfeleltetünk egy új Turing-gépet. 4.20. Tétel Legyen és és a válaszát jelöljük -gyel, ha a bemeneten -beli állapotban, illetve -vel, ha a bemeneten -beli állapotban áll meg. Az előbbi definícióban adott Turing-gépre, ha válasza a bemeneten, illetve, ha válasza a bemeneten. Bizonyítás Legyen egy tetszőleges hosszúságú szó, számítása a bemeneten, számítása a bemeneten. Ha megáll a bemeneten, legyen és számítása a bemeneten, míg számítása a bemeneten. A definíció alapján, mivel, így. Ugyancsak a definíció szerint, ha, akkor, azaz ameddig, addig. Ez alapján, ha nem áll meg -n, akkor az sem áll meg. Ha, ahol, akkor a Turing-gép megáll. Ebben az esetben megfelelően., azaz a szalag tartalma. definíciója alapján ilyenkor továbbszámol, a -nek a.) Ha, akkor először átmegy a konfigurációba, majd a következő lépések során az író olvasó fejet a szalag elejére viszi. Ha azt eléri, átmegy a konfigurációba - itt -, ami viszont megegyezik a konfigurációval. Mivel, ha, ezért innentől kezdve, azaz ha nem áll meg -n, akkor sem fog megállni, egyébként 29

A Turing-gép pedig b.) Ha, akkor először átmegy a konfigurációba, majd a következő lépések során az író olvasó fejet a szalag elejére viszi. Ha azt eléri, átmegy a konfigurációba - itt -, ami viszont megegyezik a konfigurációval. Mivel, ha ezért innentől kezdve, azaz ha nem áll meg -n, akkor sem fog megállni, egyébként pedig. Figure 4.37., és feltételes kompozíciója Amennyiben egy Turing-gépet előre megadott számban többször egymás után szeretnénk végrehajtani, egy kicsit pontosítani kell a definíción, mivel az egyszerű kompozíciónál feltettük, hogy az összefűzendő Turinggépek állapothalmazai diszjunktak. 4.21. Definíció (rögzített ismétlésű ciklus) Legyen egy Turing-gép. A Turing-gépet definiáljuk úgy, hogy a megfelelő komponenseit helyettesítjük egy megfelelő, -vel ellátott komponenssel. (Azaz átjelöljük az összetevőit.) Ezzel a jelöléssel legyen. Általánosan: Legyen 4.22. Megjegyzés és, ha. Az egyszerű összefűzés definíciója utáni tétel alapján. Iteratív módon alkalmazva, ahol az egymásba ágyazás mélysége. ( jelölése pontosan megegyezik a függvénykompozíciónál hagyományosan elfogadottal.) A -nel jelölt Turing-gép a Turing-gép -szer egymás után történő végrehajtásaként értelmezhető. 30

A Turing-gép A programozásnál megszokott utasítások közül már csak a feltételes (végtelen) ciklus konstrukciója hiányzik. 4.23. Definíció (iteráció) Legyen és,. A Turing-gépet a következőképpen definiáljuk:, ahol,,, és Itt., ahol 4.24. Megjegyzés, minden, esetén,, és. Ha, akkor semmilyen bemeneten nem áll meg (= végtelen ciklus). 4.25. Tétel, azaz tekinthető a Turing-gép iteratív végrehajtásának. Bizonyítás Legyen egy tetszőleges hosszúságú szó, számítása a bemeneten, számítása a bemeneten. Ha megáll a bemeneten, legyen és számítása a bemeneten A definíció alapján, mivel, így. Ugyancsak a definíció szerint, ha, akkor, azaz ameddig, addig Ez alapján, ha nem áll meg -n, akkor az sem áll meg. Ha, ahol, akkor a Turing-gép megáll. Ebben az esetben, azaz a szalag tartalma. definíciója alapján, ha, akkor továbbszámol, a -nek megfelelően, ha, akkor megáll. Ha tehát, akkor először átmegy a konfigurációba, majd a következő lépések során az író olvasó fejet a szalag elejére viszi. Ha azt eléri, átmegy a konfigurációba 31

A Turing-gép - itt -, ami viszont kezdőkonfigurációja a bemenőszóval. Innentől kezdve, azaz pontosan úgy viselkedik, mintha -t a bemeneten indítottuk volna.. Figure 4.38. iterációja 4.26. Megjegyzés A különböző típusú összefűzések definíciójából elhagyhatjuk az író-olvasó fej előremozgatását. Ebben az esetben a következő Turing-gép végrehajtása a szalag azon pozíciójából folytatódik, ahol az előző abbahagyta a számolást. A legtöbb esetben ez a változat könnyebben használható, így viszont a függvények kompozíciójaként való értelmezés nem lenne helytálló. Ezen összefűzések segítségével, ahogy a definíciók előtt is említettük, egyszerűbb Turing-gépekből komplikáltabb és komplikáltabb gépeket építhetünk, úgy tekintve az építőelemekre, mintha eljárások lennének. Ilyen egyszerűbb gépek (a teljesség igénye nélkül) a következők lehetnek: cellát jobbra vagy balra lép cellát megvizsgál, a válasz "igen" vagy "nem" a szalag első vagy utolsó értékes jelére állítja az író-olvasó fejet egy rögzített jelet a szalagra ír cella tartalmát eggyel balra (jobbra) másolja... Összetett Turing-gépek a bemenő szó végére vagy elejére ír egy jelet a bemenő szó végéről vagy elejéről töröl egy jelet a bemenő szót megduplázza a bemenő szót tükrözi a bemenő szóról eldönti, hogy páros hosszúságú-e 32

A Turing-gép két bemenő szó hosszúságát összehasonlítja számrendszerek között átvált két szót összead Példa: Legyen a lehetséges bemenő szavak halmaza és legyenek adottak a következő egyszerű Turing-gépek: 1. : megvizsgálja az író-olvasó fej alatti jelet; ha az, akkor "igen", ellenkező esetben "nem" választ ad. 2. : megvizsgálja az író-olvasó fej alatti jelet; ha az, akkor "igen", ellenkező esetben "nem" választ ad. 3. : megvizsgálja az író-olvasó fej alatti jelet; ha az, akkor "igen", ellenkező esetben "nem" választ ad. 4. : egy cellát balra lép 5. : egy cellát jobbra lép 6. : -t ír a szalagra 7. : -et ír a szalagra 8. : -et ír a szalagra Konstruáljuk meg belőlük az összefűzési műveletek segítségével azt a Turing-gépet, amelyik a bemenő szóból elkészíti a szót! Először készítsük el azt a Turing-gépet, amelyik a szalagon levő szó (jobboldali) végére áll: Hasonlóan adható meg a szó elejére álló is:. Az a Turing-gép, amelyik jobbra haladva megkeresi az első jelet, a következőképpen adható meg:. Az a Turing-gép, amelyik balra haladva megkeresi az első jelet, a következőképpen adható meg:. 6. Többszalagos Turing-gépek, szimuláció Az eddig megismert Turing-gép modell általánosításaként bevezetjük a többszalagos Turing-gépek fogalmát. Itt a Turing-gép állapotregisztere egynél több szalaggal is kapcsolatban állhat, azokhoz külön író-olvasó fejjel rendelkezik, melyeket egymástól függetlenül mozgathat. Figure 4.39. Többszalagos Turing-gép 33

A Turing-gép 4.27. Definíció (többszalagos Turing-gép) Legyen, egész szám. A -ost -szalagos Turing-gépnek nevezzük, ha véges, nem üres halmaz; állapotok halmaza véges, nem üres halmaz, ; kezdő állapot, nem üres; végállapotok halmaza ; szalag ábécé ; átmenetfüggvény Hasonlóan az egyszerű (egy szalagos) Turing-géphez, definiálhatjuk a konfiguráció, konfigurációátmenet és számítás fogalmát. 4.28. Definíció Legyen egy -szalagos Turing-gép és. -t a lehetséges konfigurációi halmazának, elemeit lehetséges konfigurációknak nevezzük. Ekkor a egy szalagjának lehetséges leírásait tartalmazó halmaz. 4.29. Definíció Legyen egy -szalagos Turing-gép és két konfigurációja. Tegyük fel, hogy ahol,,, és, ahol. Azt mondjuk, hogy egy lépésben (vagy közvetlenül) átmegy -ból a konfigurációba (jelekben ), ha a minden esetén a következők közül pontosan egy igaz: 1) és, ahol. 34

A Turing-gép --- felülírási üzemmód 2), és. --- jobbra lépési üzemmód 3), és. --- balra lépési üzemmód 4.30. Megjegyzés Többszalagos Turing-gép esetén egy lépés során szalagonként függetlenül - bár az átmenet függvény által közösen meghatározott módon - végzünk műveleteket. 4.31. Definíció Legyen egy -szalagos Turing-gép. egy számítása az hosszúságú bemeneten konfigurációk egy sorozata amelyekre 1., ahol és, ha ; 2., ha létezik -ből közvetlenül elérhető konfiguráció (és ez az egyértelműség miatt ); 3., ha nem létezik -ből közvetlenül elérhető konfiguráció. Ha olyan, hogy, akkor azt mondjuk, hogy a számítás véges, a Turing-gép a végállapotban megáll. Ha ekkor, akkor a szót kimenetének nevezzük. Jelölése:. Ha egy esetén a Turing-gépnek végtelen számítása van, akkor nem értelmezünk kimenetet. Jelekben:. (Nem összetévesztendő a kimenettel.) 4.32. Megjegyzés A többszalagos Turing-gép definíciójában feltételeztük, hogy a bemenetet az első szalagon adjuk meg és a kimenetet ugyanoda írjuk vissza. Ez pusztán megállapodás kérdése. Természetesen egyedi esetekben más - esetleg több - szalag is tartalmazhatja a bemenetet vagy a kimenetet. Világos, hogy a frissen definiált többszalagos Turing-gép modell legalább olyan erős, mint az eredeti, egyszerű egyszalagos, hiszen minden egyszalagos Turing-gép kiegészíthető tetszőleges számú szalaggal, amelyeket menet közben nem használunk. Működés szempontjából teljesen azonosnak tekinthetők az egy- és belőle készített többszalagos Turing-gépek. Ahhoz, hogy az egyes modellek erősségét megvizsgáljuk, először is szükségünk lesz egy pontos definícióra, ami elég kifejezően leírja a modellek viszonyát. Ennek segítségével az új és régi modellt össze tudjuk hasonlítani. 4.33. Definíció 35

A Turing-gép Legyen, két Turing-gép. Azt mondjuk, hogy szimulálja -et, ha és esetén. 4.34. Megjegyzés Az előző definíció alapján tetszőleges bemenete lehetséges bemenete -nek is. Továbbá, azt jelenti, hogy ha megáll a bemeneten és kimenetként egy szót ad, akkor is megáll és szintén -t ad válaszul. Ha nem áll meg a bemeneten, akkor sem. Elképzelhető, hogy sokkal több mindent ki tud számolni, mint, más bemeneteket is kaphat, de azt mindenképpen meg tudja csinálni, amit. 4.35. Tétel Legyen, egy -szalagos Turing-gép. Ekkor létezik -t szimuláló -szalagos Bizonyítás Turing-gép. A precíz bizonyítás meglehetősen sok technikai részlet kidolgozását igényelné, ezért csak a vázlatát ismertetjük. Konstruktív módon látjuk be az állítás igazságát, ami azt jelenti, hogy nem egy általánosan létező Turing-gépről fogunk igazolni valamit, hanem megadjuk a konkrét felépítését is. A szimuláció alapötlete az, hogy lépésről-lépésre végrehajtjuk az eredeti Turing-gép adott inputon elvégzett számítását. Ehhez a szimuláló Turing-gép folyamatosan tárolja a szimulált Turing-gép aktuális konfigurációit. Általánosan megfogalmazható, hogy adattárolásra kétféle lehetőség adódik: az állapoton keresztül vagy a szalagon. Mivel az állapotok segítségével csak véges mennyiségű adat tárolható, a konfigurációk száma pedig végtelen, természetes módon adódik, hogy a szalagon tároljuk a szükséges információt. Mivel a szimuláló Turing-gépnek csak egyetlen szalagja van, így azon az egyetlen szalagon kénytelen tárolni a szimulált Turinggép teljes szalagtartalmát. Ennek megoldására több lehetőség is adódik. Az egyik az lehet, hogy a szimulált Turing-gép szalagjain levő szavakat a szimuláló Turing-gép szalagján egymás után, valamilyen határolójelekkel elválasztva tároljuk. Ekkor az jelent külön problémát, hogy a szavakhoz való hozzáírás vagy azokból való törlés esetén a többi szót folyamatosan mozgatni kell, hogy ne veszítsünk el egyetlen értékes jelet sem, illetve, hogy az ábrázolt szavak ne távolodjanak el egymástól. Egy másik megközelítés - amit végül is követni fogunk a bizonyítás során -, hogy az egyetlen szalagot "sávokra" bontjuk úgy, mintha továbbra is meglennének a korábbi szalagok, csak az író-olvasó fejeik mozgása egymáshoz rögzített lenne. Ekkor (akárcsak az előbbi modellnél) szükséges az eredeti Turing-gép író-olvasó fejeinek pozícióját tárolni. Ez utóbbi megoldást követve a szalag-abc jelei az eredeti szalag-abc jeleiből képzett komponensű vektorokként képzelhetők el, kiegészítve az író-olvasó fejek helyének jelölésére szolgáló komponensű vektorral. Lássuk az előbb leírtaknak megfelelő definícióját. Legyen a -t szimuláló Turing-gép, ahol 36

A Turing-gép és az átmenet függvény, amit az alábbiakban írunk le. A bizonyítás elején leírtaknak megfelelően szalagján fogjuk tárolni az eredeti Turing-gép szalagjairól származó összes információt. Eközben állapota tárolja többek között aktuális állapotát. A egy konfigurációjának kiindulásképpen a következő konfigurációját fogjuk megfeleltetni:. egyes összetevőit a következőképpen adhatjuk meg:, valamint, ahol ha és, illetve egyébként,, ahol (azaz hossza eggyel hosszabb, mint a szalagjain levő szavak leghosszabbikának hosszával), ) és minden esetén, ahol (ha akkor legyen, ha illetve egyébként (azaz az író-olvasó fej az. szalagon levő szó. betűjén áll), minden és esetén. Egy konkrét -szalagos Turing-gép esetén ez a következőképpen néz ki: Figure 4.40. Egy kétszalagos Turing-gép szimulációja A Turing-gép egy ilyen kiindulási konfigurációból a következő számítási fázisokat hajtja végre: 1. fázis: Beolvasás. Végig lépked a szalag értékes celláin, és ahol az író-olvasó fej pozíciójában -t talál, a megfelelő szimbólumot beírja az állapotának megfelelő pozíciójába. 37