Berekenbaarheid is een deelprobleem van de complexiteitstheorie. Het vraagstuk van berekenbaarheid gaat over het bepalen van de grens tussen wat berekenbaar is en wat niet.
Het mechanisme dat de berekenbaarheidsstudie gebruikt om deze vraag te beantwoorden, is de Turingmachine. De Turingmachine is een model van berekening en geeft (waarschijnlijk) aan waar de grens ligt van het berekenbare.
Om deze grens af te bakenen, maakt de berekenbaarheid gebruik van een aantal eigenschappen van wiskundige problemen, waaronder reduceerbaarheid.
Vanaf 1870 raakte de wiskunde in een stroomversnelling. De abstracte logica deed zijn intrede, abstractiemechanismen werden steeds beter begrepen. De mogelijkheden van de wiskunde leken eindeloos en voor alles kon een oplossing gevonden worden. De enige beperking was het vinden van de manier om een oplossing op te stellen. In 1900 publiceerde David Hilbert zijn 23 problemen, een hoopvolle uitdaging aan de wiskundige wereld om binnen de volgende 100 jaar toch eindelijk die 23 rottige probleempjes op te ruimen.
In 1931 werd de droom van de onbeperkte wiskunde wreed verstoord: Kurt Gödel bewees dat, in een voldoende expressief systeem van wiskunde, er altijd zaken moeten zijn die niet bewezen of ontkracht kunnen worden. En de rekenkunde was een dergelijke, expressieve wiskunde. Met de ontdekking van Gödel rees de vraag of zelfs wel voor ieder rekenprobleem een oplossing bestond.
Het antwoord op deze vraag kwam in 1935 en 1936, toen de eerste modellen van berekeningen gepubliceerd werden. Deze modellen demonstreerden hoe een berekening eigenlijk uitgevoerd wordt. Met een berekeningsmodel in de hand kon precies uitgelegd worden hoe een gegeven probleem opgelost moest worden, stap voor stap. En er kon ook gekeken worden of er iets was dat niet berekend kon worden: was er een probleem waarbij het berekeningsmodel vastliep?
In 1936 publiceerde Alan Turing een – inmiddels wereldberoemd – artikel getiteld "On computable numbers, with an application to the Entscheidungsproblem". In dit artikel introduceerde hij het bekendste berekeningsmodel dat de wiskunde kent, de Turingmachine. En hij deed dat om aan te kunnen tonen dat hij een probleem had gevonden dat onoplosbaar, onberekenbaar was: het beslissingsprobleem.
Bij de vraag of een probleem P berekenbaar is, gaat het eigenlijk om de volgende vraag:
Een instantie IP van een probleem P is overigens een specifiek voorbeeld van dat probleem P. Bijvoorbeeld, het vermenigvuldigen van twee getallen A en B is een probleem; het vermingvuldigen van 3 en 7 is een instantie van dat probleem.
De bovenstaande probleemstelling geeft een belangrijke beperking aan in de soort van Turingmachine die we zoeken als we naar een oplossing zoeken: het moet een Turingmachine zijn die altijd een antwoord oplevert (ja of nee). Het mag niet een machine zijn die ja op kan leveren of nee of ook gewoon eeuwig door kan blijven lopen. Dergelijke machines bestaan wel (we noemen dat herkenners), maar die leveren niet gegarandeerd voor iedere instantie een oplossing op – voor sommige instanties kunnen ze eeuwig blijven lopen. We zijn echt op zoek naar machines die altijd een antwoord opleveren (dit zijn de zogeheten beslissers).
Als we zeggen dat een probleem berekenbaar is, dan is er dus een belisser voor dat probleem – er is een Turingmachine TM die iedere instantie van het probleem beslist.
In dit hoofdstuk zullen ingaan op de vragen of er wiskundige problemen zijn die niet beslisbaar zijn, of zelfs herkenbaar zijn. Die vragen zullen we positief beantwoorden: er zijn problemen die niet berekenbaar zijn en zelfs problemen die niet herkenbaar zijn.
We zullen beginnen met aan te tonen dat er een onbeslisbaar probleem is. Hiervoor zullen we een aantal technische details overnemen uit het bewijs van Alan Turing. Vervolgens komen we op een onherkenbaar probleem.
In plaats van te praten over problemen en instanties, kun je het dus ook heel algemeen hebben over een gegeven Turingmachine TM en een rij symbolen s: het paar
Als we het over een dergelijk paar
Mensen die bekend zijn met formele talen, zullen op dit moment wellicht opmerken dat de bovenstaande verzameling op een formele taal lijkt. En dat klopt ook, het is de taal van paren van symboolrijen en Turingmachines die die symboolrijen beslissen.
Op dit moment zou je je af kunnen vragen of deze taal zelf beslisbaar is: kun je een Turingmachine bouwen die een paar
Stel, is een Turing-machine. Uiteraard bestaat de volledige machine uit een tupel van zeven elementen (toestanden, bandalfabet, begintoestand, accepterende toestand, afwijzende toestand en transitiefunctie). Maar stel nu dat we licht aanpassen tot :
De hele machine kan nu worden samengevat door zijn transitiefunctie . Immers:
Alle elementen van zijn afbeeldingen. Het domein van is een tuple van toestand en symbool, het bereik een triple van toestand, symbool en L of R – dat is de definitie van de transitiefunctie van een Turing-machine. Het domein en bereik van ieder element van kunnen we echter ook opschrijven als een tupel van vijf elementen:
wordt dan
Ook deze vorm kunnen we weer omschrijven. In plaats van een tupel schrijven we alles dan aan elkaar als een "woord":
In deze vorm kunnen we de hele transitiefunctie aan elkaar schrijven, gescheiden door spaties of puntkomma's of iets dergelijks. Tenslotte kunnen we de hele transitiefunctie nog eens omschrijven, volgens de volgende regels:
Stel dat we in het voorbeeld hierboven i, j, m, n en D als volgt invullen:
Dan wordt de omgeschreven vorm
Op deze manier kunnen we de hele transitiefunctie omschrijven naar een natuurlijk getal.
Deze omschrijving kan toegepast worden op iedere Turing-machine. Op deze manier correspondeert iedere Turing-machine een-op-een met een natuurlijk getal. De mogelijke Turing-machines zijn dus isomorf met een deelverzameling van de natuurlijke getallen. En omdat iedere oneindige deelverzameling van de natuurlijke getallen (net als de natuurlijke getallen zelf) aftelbaar is, is het aantal berekenbare problemen ook aftelbaar.
Tenminste, als de Turing-machines werkelijk alle berekenbare problemen kunnen beschrijven.
Ten eerste heb je een Turingmachine nodig, die iedere transitiefunctie uit kan voeren (een Universele Turingmachine). En een dergelijke machine bestaat. Turing geeft er in zijn artikel een complete beschrijving van, maar om het overzichtelijk te houden laten wij die beschrijving hier achterwege. Zij simpelweg gezegd dat het idee dit is: je neemt een Turingmachine die gecodeeerd is tot een getal zoals hierboven beschreven. Die zet je op de band. Op de band reserveer je ook ruimte voor een natuurlijk getal – hiermee wordt de toestand van de gecodeerde machine bijgehouden. De rest van de band is voor de invoer van de gecodeerde machine en om als kladruimte te gebruiken. De universele Turingmachine speelt nu de gecodeerde Turingmachine na op de gegeven invoer. Er is ruimte om de toestand bij te houden, de invoer staat op de band en de transities zijn uit de codering op te zoeken.
Stel nu dat het mogelijk was om een machine B te maken, die het beslissingsprobleem beslist. Deze machine zou natuurlijk lijken op de bovenstaande, universele machine – hij zou een paar
Merk op dat B afwijst als TM afwijst, maar ook als TM gewoon niet eindigt (hier zit overigens de kneep van het probleem).
Stel dat we een dergelijk apparaat B hebben. Dan kunnen we B ook gebruiken om andere Turingmachines te maken – we spelen gewoon na hoe B andere machines naspeelt. Op een dergelijke manier kunnen we bijvoorbeeld een specialistische machine bouwen, die als symboolrij s alleen maar beschrijvingen heeft van Turingmachines:
Of nog iets anders: machine , die precies het tegenovergestelde van doet:
Op dit punt is het even belangrijk om goed door te hebben wat machine eigenlijk doet: deze machine geeft aan dat een Turingmachine TM niet een beslisser is voor de codering van Turingmachine M.
Wat gebeurt er nu als we het resultaat laten uitrekenen? We krijgen dan:
Maar hierboven staat feitelijk: als een beslisser is voor de codering van , geef dan aan dat niet een beslisser is voor . En als niet een beslisser is voor , geef dan aan van wel. Oftewel: als een beslisser is voor , dan is niet een beslisser voor . En andersom.
Dat is een tegenspraak. We hebben dus een machine ontdekt die tegelijkertijd wel en niet een beslisser moet zijn. En die machine konden we bouwen, omdat we aangenomen hadden dat we het beslissingsprobleem konden beslissen. Die aanname is dus verkeerd.
Conclusie: het beslissingsprobleem is onbeslisbaar.
Het klinkt dus alsof de herkenners alle problemen moeten omvatten die er ooit kunnen zijn. Toch zijn er talen die niet herkenbaar zijn. En dat is vrij eenvoudig aan te tonen.
Stel, T is een formele taal. Dan bestaat er ook co-T (het compliment van T, notatie ), de taal die bestaat uit alle symboolrijen die niet in T zitten.
Stel nu dat we voor T en co-T een herkenner hebben. Dan kunnen we als volgt een Turingmachine bouwen:
Iedere symboolrij moet in T of in co-T zitten. Dus voor iedere symboolrij moet een van beide machines accepteren. Dus wat hebben we hierboven gebouwd? Een beslisser voor T. Voor iedere taal T geldt: als T herkenbaar is en co-T ook, dan is T beslisbaar.
Van de taal van het beslissingsprobleem (taal B) weten we dat hij herkenbaar is, maar niet beslisbaar. B is niet beslisbaar, maar B is wel herkenbaar. Als co-B herkenbaar was, dan was B beslisbaar. Conclusie: co-B kan niet herkenbaar zijn.
Het reduceren van een probleem wil zeggen P: zoek een manier om een probleem P uit te drukken in termen van een ander probleem Q. Als dat lukt, kun je de bekende eigenschappen van Q gebruiken om iets te zeggen over probleem P.
Als voorbeeld beschouwen we het halting problem, het probleem van het bepalen of een gegeven Turingmachine al dan niet stopt voor een gegeven invoer. De bijbehorende taal is
Stel dat we een Turingmachine H hebben, die dit probleem beslist.
Dan kunnen we een Turingmachine H' bouwen, als volgt:
Met behulp van H hebben we een H' gebouwd die het beslissingsprobleem beslist. Conclusie: de beslisser H kan niet bestaan, HALT is een onbeslisbaar probleem.
Hierboven hebben we, in ons bewijs, gebruik gemaakt van het feit dat we al wisten dat het beslissingsprobleem onbeslisbaar is. Door reductie hebben we laten zien dat HALT onbeslisbaar moet zijn.
Reductie is niet alleen een belangrijk hulpmiddel bij berekenbaarheidsbepaling, maar ook bij het bepalen van de complexiteit van een probleem. De meeste NP-complete problemen worden niet gevonden door een apart bewijs van NP-compleetheid, maar door reductie tot een ander NP-compleet probleem.
Theoretische informatica | Wiskunde
نظرية الحسوبية | Teorie vyčíslitelnosti | Berechenbarkeitstheorie | Computability theory (computer science) | Teoría de la computabilidad | نظریه محاسبهپذیری | Calculabilité | Teoria della calcolabilità | 計算可能性理論 | 계산 가능성 이론 | Teoria obliczalności | Теория вычислимости | Computability theory | ทฤษฎีการคำนวณได้
This article is licensed under the GNU Free Documentation License.
It uses material from the
"Berekenbaarheid".
Home Page • arts • business • computers • games • health • hospitals • home • kids & teens • news • physicians • recreation• reference • regional • science • shopping • society • sports • world