Lang leve Turing
2012 is uitgeroepen tot het Turing-jaar. Op 23 juni is het precies honderd jaar geleden dat Alan Turing werd geboren. Deze Britse wiskundige en computerwetenschapper is om drie redenen beroemd. Ten eerste bedacht hij de Turing-test, een beroemd gedachte-experiment in de kunstmatige intelligentie. Daarbij wordt een computer geacht intelligent te zijn als een intelligent mens in een conversatie het onderscheid tussen deze computer en een ander mens niet meer kan maken. Ten tweede was Turing in de Tweede Wereldoorlog uiterst belangrijk bij het kraken van versleutelde berichten van de nazi's. De Duitsers codeerden hun berichten met de Enigma-systemen, een combinatie van typemachine en codeermachine, en Turing legde de basis voor het ontcijferen van deze berichten.
Tot slot is hij de bedenker van het onderwerp van dit artikel: de Turing-machine. Dat is een computermodel dat vooral in de theoretische informatica wordt gebruikt om de kracht van computersystemen en de complexiteit van problemen te bestuderen.
Het Centrum Wiskunde & Informatica organiseert voor de gelegenheid een tentoonstelling. Daar is onder andere een echte Enigma-machine te zien, maar ook een werkend Lego-model van een Turing-machine die door Jeroen van den Bos en Davy Landman, wetenschappers van het CWI, is gebouwd.
Helaas!
De video die je probeert te bekijken is niet langer beschikbaar op Tweakers.net.
Video van een Turing-machine die door Jeroen van den Bos en Davy Landman, wetenschappers van het CWI, is gebouwd. © CWI
Deterministische Turing-machine
Hoewel Turing-machines al meer dan driekwart eeuw geleden zijn bedacht, zijn ze nog steeds van groot belang voor de complexiteitstheorie. Informatici gebruiken deze conceptuele computers om te bestuderen of bepaalde problemen redelijkerwijs met behulp van computers kunnen worden opgelost. Omdat ze worden gebruikt om bewijzen te construeren, leunen deze modellen zwaar op wiskundige theorie. Desondanks hebben de uitkomsten van deze onderzoeken grote praktische consequenties, onder meer voor gegevensbeveiliging.
De eenvoudigste Turing-machine is de Deterministische Turing-machine. Deze wordt doorgaans voorgesteld als een rekeneenheid met een lees/schrijf-kop en een tape die zich naar beide kanten oneindig uitstrekt. Op de tape staat de input voor de machine, en afhankelijk van het karakter onder de leeskop wordt een nieuw karakter op de tape geschreven en wordt de kop naar links of rechts verplaatst.
De rekeneenheid bevat het programma, niet gedefinieerd in een programmeertaal zoals wij die kennen, maar in de vorm van een Finite-State Machine. Deze kan zich in een aantal states of toestanden bevinden en kan van de ene naar de andere state overgaan; dat heet een transitie.
Voor software-ontwikkelaars is dit een ongebruikelijke manier om een programma te definiëren, maar hardware-ontwikkelaars werken veel aan de hand van dit model. Het is ook mogelijk om een voorzichtige vergelijking tussen de deterministische Turing-machine en een processor te maken. De state wordt dan bepaald door alle processorregisters en de overgangen zijn vastgelegd in de microcode van de cpu, waarin wordt bepaald hoe de registers worden beïnvloed als een machinetaal-instructie wordt uitgevoerd.
We moeten wel bedenken dat deze deterministische Turing-machine niet bedoeld is om een computer of processor te modelleren, maar om iets te kunnen zeggen over de oplosbaarheid van problemen.
P =? NP
In de theoretische informatica noemen we een probleem oplosbaar als we voor een deterministische Turing-machine een algoritme - een finite state machine dus - kunnen verzinnen, dat eindig is voor alle mogelijke input strings op de tape. De laatste state van onze finite state machine is het antwoord voor de betreffende input-string, maar er kan tijdens het uitvoeren van het algoritme ook nog output naar de tape worden geschreven.
Daarmee zijn we aanbeland bij een van de belangrijkste kwesties in de complexiteitstheorie. Problemen waarvoor een algoritme gevonden kan worden dat in redelijke tijd kan worden uitgevoerd, zitten in de complexiteitsklasse P. De maximaal benodigde rekentijd kan dan aan de hand van de lengte van de invoerstring worden bepaald met een polynoomfunctie.
Problemen waarvoor nog geen efficiënt algoritme is gevonden, zitten in de NP-klasse. Deze Niet-deterministisch Polynomiale problemen zijn alleen op te lossen met algoritmen waarvan de rekentijd sneller dan polynomiaal toeneemt als de invoerstring langer wordt. Dat betekent dat de rekentijd voor langere invoerstrings al snel onwerkbaar groot wordt.
Is er voor een probleem helemaal geen algoritme te vinden, dan heet dat probleem onbeslisbaar. Het bekendste onbeslisbare probleem is het Halting-probleem: er is geen algoritme te bedenken dat kan vaststellen of een algoritme - of een Turing-machine - aan de hand van een eindige invoer ook daadwerkelijk een antwoord zal geven. Dit probleem staat model voor een hele zwik onbeslisbare problemen. Voor de wiskundeliefhebbers: volgens het theorema van Rice is het bepalen van een algoritme een onbeslisbaar probleem voor elke partiële functie met niet-triviale eigenschappen. Dat heeft enorme consequenties voor programmeertools die proberen de correctheid of de eindigheid van programma's aan te tonen.
NP-Compleet
Dat voor een willekeurig NP-probleem nog geen polynomiaal algoritme is gevonden, wil nog niet zeggen dat een dergelijk algoritme niet bestaat. Het zou dus kunnen dat er alsnog een efficiënt algoritme voor zo'n NP-probleem wordt verzonnen. Sterker nog, van een aantal NP-problemen is bewezen dat als daar een P-algoritme voor kan worden gevonden, dat dan voor álle NP-problemen een dergelijk algoritme bestaat. Deze klasse van de moeilijkste problemen binnen het NP-domein heet NP-Compleet.
De vraag of uiteindelijk voor alle problemen in de klasse NP een polynomiaal algoritme kan worden gevonden, waarmee die problemen dus in de klasse P terecht komen, wordt door de theoretici P =? NP genoemd. Het vermoeden is echter dat er problemen zijn waarvoor helemaal geen P-algoritme kan bestaan, maar dat bewijzen is vers twee. Dit is niet voor niets een van de zeven Millennium-vraagstukken, waar een geldprijs van een miljoen dollar aan is verbonden.
Bovendien lijken er problemen te zijn die wel in NP zitten maar niet in P of NP-Compleet. Omdat dat laatste betekent dat ze niet kunnen worden gereduceerd naar een NP-Compleet probleem, zijn deze zogenaamde open problemen weer anders van aard dan de problemen in P en NP-Compleet.
/i/1340344658.png?f=imagenormal)
Meer Turing-machines
Niet-Deterministische Turing Machine
Interessant aan NP-problemen is dat antwoorden weliswaar moeilijk te vinden zijn, maar dat eenmaal gegeven oplossingen wel makkelijk te verifiëren zijn. Een bekend NP-Compleet probleem is bijvoorbeeld het Traveling Salesman Problem. Daarbij moet een handelsreiziger alle steden op een lijst bezoeken. Het vinden van een route met een bepaalde maximale lengte blijkt heel snel moeilijker te worden naarmate het aantal steden op de lijst toeneemt. Voor een eenmaal gegeven route is het echter heel makkelijk om te controleren of deze inderdaad korter dan de gevraagde afstand is - daarvoor hoef je immers alleen maar de onderlinge afstanden op te tellen.
Voor deze zogenaamde beslissingsproblemen is de Niet-Deterministische Turing Machine bedacht. Deze bevat een gokmodule die vooraf een mogelijke oplossing op de tape zet. Het verifiëren van dit antwoord kan dan inderdaad in polynomiale tijd gebeuren. Een alternatieve uitwerking bevat geen gokmodule maar geeft de rekeneenheid van de NDTM de mogelijkheid om meerdere transities tegelijk uit te voeren - vandaar de naam 'non-deterministisch'.
/i/1340345340.jpeg?f=imagenormal)
In de praktijk bestaat er natuurlijk geen gokmodule die in een polynomiale tijdspanne een goede oplossing kan leveren - anders was het een P-probleem geweest dat we met een deterministische Turing-machine hadden kunnen oplossen. Enerzijds benadrukt dit nog eens het theoretische karakter van de Turing-machines. Anderzijds brengen quantumcomputers de oplossing voor dit soort berekeningen wel dichterbij. Helaas wordt er vermoed dat NP-Complete problemen ook met quantummachines niet in polynomiale tijd opgelost kunnen worden.
Universal Turing Machine
Er zijn nog diverse andere Turing-machines. De Universele Turing Machine bijvoorbeeld is een systeem dat andere Turing-machines kan simuleren. Behalve de invoer staat dan ook een beschrijving van de te simuleren machine op de tape. Daarmee komt dit model in de buurt van de Von Neumann-architectuur, waarbij het algoritme hetzelfde geheugen gebruikt als de input en output.
Van de verschillende manieren om de berekenbaarheid van problemen te modelleren, is de Turing-machine de meest gebruikte. Twee andere zijn de lamdba-calculus en recursie. Volgens de Church-Turing-thesis maakt het ook niet uit hoe je complexiteit modelleert: elk effectief algoritme kan met alle drie modellen worden beschreven. Anders gezegd: de drie methoden zijn Turing-equivalent.
De praktijk
Dat de methoden om berekenbaarheid te bepalen Turing-equivalent zijn, wil natuurlijk nog niet zeggen dat alle talen en systemen even snel zijn: deze theoretische complexiteitsmodellen zijn niet zomaar naar de praktijk te vertalen. Cobham's these stelt wel dat alleen problemen in P in redelijke tijd kunnen worden opgelost, maar ook polynomiale tijd kan heel lang duren.
Zo zegt het tijd-hiërarchie-theorema dat P bestaat uit een hiërarchie van problemen die steeds moeilijker op te lossen zijn. Dat wil zeggen dat een DTM steeds meer tijd nodig heeft om het antwoord uit te rekenen, bijvoorbeeld omdat de verwerkingstijd kwadratisch in plaats van lineair is ten opzichte van de lengte van de inputstring. De consequentie daarvan is dat er ook P-problemen zijn die oneindig veel polynomiale tijd kosten om op te lossen. Hetzelfde geldt voor de structuur van NP.
Het ruimte-hiërarchie theorema zegt iets vergelijkbaars voor de beschikbare geheugenruimte (de tape): je kunt steeds complexere problemen oplossen naarmate je meer geheugenruimte tot je beschikking hebt. Dat is uitermate relevant als je bedenkt dat de beschikbaarheid van een oneindig lange tape het belangrijkste onderscheid is tussen een Turing-machine en een echte computer.
Aan de andere kant zijn er een heleboel algoritmen bekend die misschien niet de exacte oplossing van een niet-polynomiaal probleem geven, maar wel een goede benadering kunnen leveren.
Parallelle systemen
De complexiteitshiërarchie van P en NP is maar het topje van de ijsberg. De theoretici hebben deze structuren uitgebreid met allerlei nieuwe problemen en klassen. Met de opkomst van multicoreprocessors en quantum computing zijn met name Nick's Class en BQP in de belangstelling komen te staan.
Nick's Class bevat alle problemen die met een parallelle Turing-machine in polylogaritmische tijd zijn op te lossen, dat wil zeggen: sneller dan polynomiaal. Zo'n parallel systeem bestaat uit een beperkt aantal rekeneenheden rond een gedeeld geheugen. Omdat een DTM een parallel random access machine kan simuleren, vallen de problemen in NC ook in P. Tegelijkertijd is het vermoeden dat er ook problemen zijn die geen voordeel hebben bij meerdere rekeneenheden, en dus inherent sequentieel zijn. Die klasse van problemen die wel in P vallen maar niet in NC, heet P-Compleet.
Dit theoretische concept zien we terug in de softwarewereld, waar de Wet van Amdahl een relatie legt tussen de parallelliseerbaarheid van een algoritme en de maximale versnelling die kan worden verkregen op een parallelle computer.
Quantum computers
BQP, kort voor Bounded Error Quantum Polynomial, bevat de problemen die, in elk geval hoogstwaarschijnlijk, in polynomiale tijd op een quantum-Turing-machine zijn op te lossen. Daarbij moet het aantal quantum bits weer polynomiaal beperkt zijn ten opzichte van de input string. De BQP-klasse omvat wel P, maar niet NP-Compleet. Dat betekent dat een quantumcomputer niet fundamenteel krachtiger is dan een traditionele computer, en alleen sneller is voor bepaalde NP-Intermediate problemen. Maar onbeslisbare problemen blijven onbeslisbaar, en NP-Complete problemen blijven niet-polynomiaal.

Helaas voor de veiligheidsleveranciers valt het algoritme van Shor binnen de klasse BQP. Dat wil zeggen dat er een quantumalgoritme bestaat waarmee de priemfactoren van getallen kunnen worden gevonden. Het in priemfactoren ontbinden van getallen is een NP-probleem, en de moeilijkheid daarvan is de basis van de public-keycryptografie die we dagelijks op het internet gebruiken. Dat betekent dat we op termijn nieuwe algoritmen moeten inzetten die informatie-theoretisch veilig zijn.