Intro

De Turingmachine is een model van berekening en berekenbaarheid, ontwikkeld door de wiskundige Alan M. Turing in zijn beroemde artikel “On computable numbers, with an application to the Entscheidungsproblem” uit 1936-37.

De hypothetische machine bewerkt een oneindig lange band (zowel naar links als naar rechts). Deze band is verdeeld in vakjes waarin een symbool kan geschreven worden. Initieel is de band leeg. Om de band te bewerken gebruikt de Turingmachine toestanden. Sommige van die toestanden zijn die aanvaardende toestanden. Als de Turingmachine in een aanvaardende toestand terechtkomt stopt ze en aanvaard ze (geeft als het ware true terug). Om te wisselen tussen de toestanden maakt de machine gebruik van een transitie functie \(\delta\). Als \(\delta(q_0,t_0) = (q_1,t_1, \rightarrow)\) wilt dat zeggen dat als de Turingmachine zich in toestand \(q_0\) bevind en het symbool \(t_0\) onder de kop van de Turingmachine staat, dat de Turingmachine de waarde onder de kop veranderd door \(t_1\) en vervolgens naar rechts opschuift op de band en de toestand \(q_1\) aanneemt. Als \(\delta(q_0,t_0) = (q_1,t_1, \leftarrow)\) gebeurt hetzelfde maar dan schuift de Turingmachine op naar links in plaats van naar rechts.

Turingmachines die waarden berekenen

Turingmachines kunnen worden gebruikt om waarden te berekenen. Hiervoor wordt de waarde die moet worden verwerkt op de band gezet na de kop van de Turingmachine en wordt de waarde na de kop eens de Turingmachine stopt uitgelezen als antwoord.

Turingmachine in Prolog

Transitiefunctie

We kunnen de transitiefunctie beschrijven als een prolog predicaat transition/5. Zodat

Aanvaardende toestanden

Aanvaardenden toestanden kunnen worden aangegeven met accepting(State). Toestanden waarin de Turingmachine wel stopt, maar niet aanvaard kunnen worden aangegeven met halting(State).

Voorbeeld

Het volgende is bijvoorbeeld een programma op 1 op te tellen bij een binair getal dat op de band staat.

accepting(qh). % qh is een accepting toestand

%           huidige     waarde    nieuwe      schrijf 
%          toestand      band    toestand     op band  beweging
transition(   qs   ,    blank    ,  qs  ,     blank  , >  ).
transition(   qs   ,    C        ,  q0  ,     C      , >  ) :-C\==blank.
transition(   q0   ,    C        ,  q0  ,     C      , >  ) :-C\==blank.
transition(   q0   ,    blank    ,  q1  ,     blank  , <  ).
transition(   q1   ,    1        ,  q1  ,     0      , <  ).
transition(   q1   ,    0        ,  q2  ,     1      , <  ).
transition(   q2   ,    C        ,  q2  ,     C      , <  ) :-C\==blank.
transition(   q2   ,    blank    ,  qh  ,     blank  , >  ).

Echte Turingmachines


Opgave

Schrijf een predicaat turing(+State, +Input, -Output) die Output unificeert met

Als de TM vastloopt (omdat er geen regels meer toepasbaar zijn bijvoorbeeld) moet het predicaat falen.

Gebruik een hulppredicaat turing(State, Pre, CTape, Post, Output) die waar is als een Turingmachine die zich in de toestand State bevind en wiens band wordt beschreven door Pre, CTape, Post een output Output geeft (zoals hierboven beschreven). Hierbij wordt de band beschreven als twee stapels. Pre is de stapel van elementen voor de kop van de Turingmachine, in omgekeerde volgorde, CTape is de huidige waarde onder de het kop en Post is de stapel van elementen achter de Turingmachine. Vakken die leeg zijn worden aangeduid met het atoom blank.

                 qs
                  V
|   |   | 0 | 9 | 8 | 7 | 2 | 1 | 9 |   |   |   |

State = qs
Pre   = [9,0,blank,blank]
Cur   =  8
Post  = [7,2,1,9,blank,blank,blank]

Na het toepassen van de transitie transition(qs,8,q0,1,>) ziet de band er zo uit:

                     q0
                      V
|   |   | 0 | 9 | 1 | 7 | 2 | 1 | 9 |   |   |   |
State = q0
Pre   = [1,9,0,blank,blank]
Cur   =  7
Post  = [2,1,9,blank,blank,blank]

Houd er rekening mee dat de band van een turingmachine oneindig lang is. Als 1 van de stapels leeg is moet je emuleren dat er toch nog blank staat. Je mag er voor deze oefening van uitgaan dat de turingmachine deterministisch is (er is altijd hoogstens 1 transisie mogelijk).

Epiloog

In de literatuur is er een Turingmachine beschreven die stopt in een aanvaardende toestand als de Riemanhypothese niet waar is. Als je die turringmachien herschrijft en laat uitvoeren met jou interpreter wordt je mischien dollar milionair, het is immers een Millenniumprijsprobleem1.

Yedidia, Adam, and Scott Aaronson. “A relatively small Turingmachine whose behavior is independent of set theory.” arXiv preprint arXiv:1605.04343 (2016).2