Cenni sulla Macchina di Turing c.bonfanti - 2007 ELEMENTI COSTITUTIVI DI UNA MACCHINA DI TURING (TM: Turing Machine) Stazione di lettura/scrittura (CC) Casella Nastro Nastro: è suddiviso in caselle e lo si suppone illimitato (ovvero prolungabile a piacere tanto a destra quanto a sinistra. Ogni casella contiene un solo carattere tra quelli ammessi, compresi nell’alfabeto C = {c*,c1,c2, … cn}. C è definito in relazione al compito che la macchina deve assolvere ma contiene comunque il carattere c* che si conviene rappresenti il contenuto della casella vuota. Il nastro, dietro apposito comando, può scorrere da una casella a una delle due adiacenti. Stazione di lettura/scrittura: finestra che individua una casella del nastro detta casella corrente e denominata CC. La notazione (CC) significa: contenuto di CC. ELEMENTI COSTITUTIVI DI UNA MACCHINA DI TURING (TM: Turing Machine) Area di Controllo Stazione di lettura/scrittura (CC) (AC) Casella Nastro Controllo: una zona (p.e. un rettangolo disegnato su un foglio di carta) denominata AC (Area di Controllo), destinata a contenere uno dei simboli dell’insieme S = {s1,s2, … sk}, detti convenzionalmente stati della TM. La notazione (AC) significa: contenuto di AC. ELEMENTI COSTITUTIVI DI UNA MACCHINA DI TURING (TM: Turing Machine) Area di Controllo Stazione di lettura/scrittura (CC) (AC) Casella Alfabeto dei caratteri C = {c*,c1,c2, … cn} Stati S = {s1,s2, … sk} S* = {s*,s1,s2, … sk} Movimenti M = {de,si,fe} Insiemi dei simboli Nastro ELEMENTI COSTITUTIVI DI UNA MACCHINA DI TURING (TM: Turing Machine) Area di Controllo Stazione di lettura/scrittura (AC) (CC) Casella Nastro Programma Alfabeto dei caratteri C = {c*,c1,c2, … cn} s1 s2 s3 ... sk c* Stati S = {s1,s2, … sk} S* = {s*,s1,s2, … sk} c1 c2 c,m,s ... Movimenti M = {de,si,fe} cn Istruzione (c C; m M; s S*) Programma: tabella a doppia entrata (matrice) in cui - Le colonne sono intestate con tutti i simboli di stato compresi in S = {s1,s2, … sk}; il numero degli stati dipende dal compito che la macchina deve assolvere. Lo speciale stato designato come s* (stop) non figura come intestazione di colonna. - Le righe sono intestate con tutti i caratteri dell’alfabeto C = {c*,c1,c2, … cn}. Istruzioni: sono gli elementi della tabella, costituiti da una terna ordinata di simboli c,m,s in cui: c è un carattere dell’alfabeto C; m è il comando di movimento che può assumere uno dei valori in M = {de,si,fe} che stanno per destra, sinistra, fermo; s è uno degli stati presenti in S*, incluso quindi lo stop s*. Le coordinate ci e sj dell’elemento della tabella si chiamano indirizzo dell’istruzione in esso contenuta. Funzionamento della TM AC c3 c2 c2 c3 c2 L’istruzione da eseguire (istruzione corrente) è quella che sta scritta all’indirizzo c2 = (CC) e s2 = (AC) e l’esecuzione consta di tre passi: c1 s1 s2 s2 c* c1 c2 ... c1,si, s5 ... Funzionamento della TM passo 1 AC c3 c2 c2 c3 c2 c1 s2 c3 c2 c1 c3 c2 c1 s2 L’istruzione da eseguire (istruzione corrente) è quella che sta scritta all’indirizzo c2 = (CC) e s2 = (AC) e l’esecuzione consta di tre passi: 1 - Si trascrive c1 (primo simbolo dell’istruzione corrente) in CC. s1 s2 c* c1 c2 ... c1,si, s5 ... AC Funzionamento della TM passo 1 c3 c2 c2 c3 c2 c1 s2 c3 c2 c1 c3 c2 c1 s2 c2 c1 c3 c2 passo 2 c3 c1 L’istruzione da eseguire (istruzione corrente) è quella che sta scritta all’indirizzo c2 = (CC) e s2 = (AC) e l’esecuzione consta di tre passi: 1 - Si trascrive c1 (primo simbolo dell’istruzione corrente) in CC. 2 - Si sposta il nastro di una casella verso sinistra, come indicato dal secondo simbolo dell’istruzione corrente. s1 s2 s2 c* c1 c2 ... c1,si, s5 ... AC Funzionamento della TM passo 1 c3 c2 c2 c3 c2 c1 s2 c3 c2 c1 c3 c2 c1 s2 c2 c1 c3 c2 passo 2 passo 3 c3 c1 L’istruzione da eseguire (istruzione corrente) è quella che sta scritta all’indirizzo c2 = (CC) e s2 = (AC) e l’esecuzione consta di tre passi: 1 - Si trascrive c1 (primo simbolo dell’istruzione corrente) in CC. 2 - Si sposta il nastro di una casella verso sinistra, come indicato dal secondo simbolo dell’istruzione corrente. 3 - Se il terzo simbolo dell’istruzione corrente è s* allora la macchina si arresta, altrimenti si trascrive s5 in AC. s1 s5 s2 c* c1 c2 ... c1,si, s5 ... AC Funzionamento della TM passo 1 c3 c2 c2 c3 c2 c1 s2 c3 c2 c1 c3 c2 c1 s2 c2 c1 c3 c2 passo 2 passo 3 c3 c1 L’istruzione da eseguire (istruzione corrente) è quella che sta scritta all’indirizzo c2 = (CC) e s2 = (AC) e l’esecuzione consta di tre passi: 1 - Si trascrive c1 (primo simbolo dell’istruzione corrente) in CC. 2 - Si sposta il nastro di una casella verso sinistra, come indicato dal secondo simbolo dell’istruzione corrente. 3 - Si trascrive s5 (terzo simbolo dell’istruzione corrente) in AC. Se il terzo simbolo fosse stato s*, allora la macchina si sarebbe arrestata. Si ripete il ciclo: la prossima istruzione è perciò quella all’indirizzo (CC),(AC) ovvero c3,s5. s1 s5 s2 c* c1 c2 ... c1,si, s5 ... ESEMPIO: La Macchina “+ 1” Adottiamo l’alfabeto C = {c*,0,1,2,3,4,5,6,7,8,9} e programmiamo la MT in modo che essa fornisca in output x+1, essendo x 0 il numero intero scritto inizialmente sul nastro e delimitato da almeno una casella vuota a destra e a sinistra (input); il tutto nella normale notazione decimale, con partenza e arresto sulla casella che contiene le unità. Il programma qui a fianco, dove S = {s1, s2}, risolve il problema per qualsiasi valore di x, ponendo inizialmente (AC) = s1. Si veda qui appresso lo sviluppo completo del caso in cui x = 299. Questo esempio è tratto, con adattamenti del docente, da: M.Italiani, G.Serazzi Elementi di informatica; Etas Kompass, 1973, pp.115-117. s1 s2 c* 1,fe,s2 c*,de,s* 0 1,fe,s2 0,si,s2 1 2,fe,s2 1,si,s2 2 3,fe,s2 2,si,s2 3 4,fe,s2 3,si,s2 4 5,fe,s2 4,si,s2 5 6,fe,s2 5,si,s2 6 7,fe,s2 6,si,s2 7 8,fe,s2 7,si,s2 8 9,fe,s2 8,si,s2 9 0,de,s1 9,si,s2 indirizzo (CC),(AC) CC istruzione 2 9,s1 9 9 AC inizio s1 indirizzo (CC),(AC) CC istruzione 2 9,s1 0,de,s1 9 9 AC inizio s1 indirizzo (CC),(AC) CC istruzione 2 9,s1 9 9 2 9 AC inizio s1 0,de,s1 0 s1 indirizzo (CC),(AC) CC istruzione 2 9,s1 9,s1 9 9 2 9 AC inizio s1 0,de,s1 0 s1 indirizzo (CC),(AC) CC istruzione 2 9,s1 9,s1 2,s1 3,s2 s1 9 2 9 0 2 0 0 s1 3 0 0 s2 0 0 0,de,s1 s1 0,de,s1 3,fe,s2 3,si,s2 s2 0,si,s2 3 c*,s2 inizio 9 3 0,s2 AC 0 0 3 0 s2 c*,de,s* 0 fine s2 La prima idea fondamentale in base alla quale Turing ha concepito la sua “macchina” consiste nello scomporre l’algoritmo di calcolo nei passi più elementari, si potrebbe dire “atomici”, a cui si può ridurre il modo di procedere di un calcolatore umano. Questi, reciprocamente, può eseguire il “programma-algoritmo” senza esplicare alcuna decisione o ragionamento “intelligente”. Infatti gli si chiede soltanto di armarsi di carta, matita e gomma da cancellare e di attenersi acriticamente alle istruzioni del programma e alle regole di funzionamento. Si tratta quindi di un procedimento puramente meccanico che, in linea di principio, può essere eseguito da una macchina dotata degli opportuni automatismi. In tal modo, Turing ha fornito per la prima volta una definizione soddisfacente del concetto di algoritmo. Si noti che la descrizione della MT che abbiamo dato nelle slide precedenti (come pure la macchina “+1” usata quale esempio) è alquanto differente dall’impostazione originaria che Turing ha esposto nei paragrafi 1-5 del suo celebre articolo On Computable Numbers, with an Application to the Entscheidungsproblem.[1] [1] L’articolo (pubblicato nei Proceedings of the London Mathematical Society, vol.42, 1936-7, pp.230-265) si conclude con un’appendice in cui Turing dimostra l’equivalenza tra la sua nozione di computabilità e il λ-calcolo che Alonzo Church aveva introdotto in un articolo di poco precedente. Da un lato quindi Turing si metteva all’altezza del già rinomato Church e, dall’atro, rivendicava la differenza e l’originalità del proprio approccio. Questa appendice Turing la scrisse durante il suo lungo soggiorno a Princeton (1936-8) durante il quale fu a contatto diretto con lo stesso Church e con altri personaggi dell’università e dello IAS (p.e. Kleene e von Neumann). Subito dopo, sempre a Princeton, scrisse una breve nota per correggere alcuni errori formali che gli erano stati segnalati da P. Bernays (nota apparsa nello stesso volume dei Proceedings, pp.544-546). La più appariscente delle differenze che abbiamo introdotto consiste nel fatto che Turing presenta l’istruzione della MT come una quintupla ordinata[2] i cui primi due simboli sono quelli che noi abbiamo scorporato dal formato dell’istruzione (ridotto quindi a una terna) per usarli come “indirizzo” dell’istruzione stessa. Turing inoltre non introduce esplicitamente il comando s* (stop) né fa uso della nostra AC (Area di Controllo). Nella concezione originaria, infine, si fa distinzione tra l’insieme dei simboli ausiliari (tra i quali il “blank” della cella vuota) e quello dei simboli “significativi” (chiamati “figures”); quest’ultimo insieme, che equivale grosso modo al nostro alfabeto C, è composto dai soli caratteri 0 e 1, fatto che peraltro non ha alcuna attinenza con l’uso dell’aritmetica binaria. In ogni caso si tratta di varianti che non ledono la sostanza delle idee di Turing e che si è ritenuto utile adottare a scopo didattico, anche per dare più immediato risalto alla stretta analogia tra la MT e le logiche hardware / software del computer a programma registrato. [2] Alcuni autori riducono la quintupla a una quadrupla in virtù del fatto che Turing raggruppa i comandi di scrittura e di spostamento (terzo e quarto simbolo) sotto l’unica denominazione di “operations”. Macchina Universale di Turing (UTM) input per UTM output di UTM programma particolare P & dati di input per P output di (P applicato ai dati di input per P) UTM La UTM stabilisce il paradigma concettuale del calcolatore a programma registrato; concetto che sarà ripreso da von Neumann nella sua “architettura” e quindi implementato sotto forma di “macchina fisica”. La seconda idea fondamentale, consiste nell’aver dimostrato che esiste un programma universale che opera su un nastro su cui siano stati scritti (con una apposita codificazione) sia le istruzioni di un programma particolare, del tipo visto nell’esempio, e sia i dati di input su cui tale programma deve operare. Il programma universale (che altro non è se non la Macchina Universale di Turing UTM[3]) produce lo stesso output che sarebbe stato prodotto da quel programma particolare applicato a quei dati di input. L’obiettivo dell’articolo di Turing (esposto nel paragrafo finale) era peraltro di natura esclusivamente logica: risolvere il problema della decisione (l’entscheidungsproblem, proposto da Hilbert) con un teorema analogo ai teoremi “negativi” che Kurt Gödel aveva pubblicato nel 1933 (incompletezza; non-decidibilità). Turing infatti definì e risolse negativamente il problema che chiamò problema dell’arresto (halting problem) che è sostanzialmente isomorfo al problema di Hilbert e alla non-decidibilità di Gödel. [3] La UTM è descritta nei paragrafi 6 e 7 dell’articolo citato.