Alan Turing, nel progettare il suo esecutore, pensava alle capacità minime che tutti gli esseri umani possiedono
- leggere, riconoscere, dei simboli
- scrivere dei simboli, uno alla volta
- spostare la propria attenzione al simbolo a destra oppure a sinistra del simbolo appena letto
L’esecutore agisce secondo certe regole
- per un certo numero di situazioni gli viene fornita una regola di comportamento
- se si presenta una situazione non prevista allora si ferma
- in presenza di un certo simbolo ci possono essere comportamenti diversi, dipendono dallo stato
- in un certo stato ci possono essere comportamenti diversi, dipendono dal simbolo letto
- lo stato iniziale è unico, la macchina si accende sempre nelle stesse condizioni.
In pratica
- Lo stato iniziale è 0 (zero)
- Le azioni di osservazione e di scrittura dei simboli avvengono su un nastro, potenzialmente infinito nei due sensi, tramite una testina.
- I simboli appartengono a un certo alfabeto prefissato,
- Sono sufficienti due simboli che, per semplicità, si assume siano 0 e 1 oppure b (blank) e 1, ma si può derogare e usare alfabeti più ampi.
- Le regole che l’esecutore deve applicare sono scritte in un documento che costituisce a tutti gli effetti l’algoritmo….
Quadruple?
Le regole (le istruzioni…) per l’esecutore si possono scrivere come quadruple
(STATOattuale
, CARATTEREinput
, STATOfuturo
, AZIONE
)
dove
STATOattuale
, lo stato in cui si trova l’esecutoreCARATTEREinput
, il carattere sotto la testinaSTATOfuturo
, lo stato in cui passa l’esecutoreAZIONE
- la scrittura di un certo carattere
- lo spostamento della testina verso sinistra
- lo spostamento della testina verso destra
- nessuna azione.
Quintuple
Per rendere più semplice la stesura dei programmi si preferisce utilizzare le quintuple, specificando contemporaneamente il carattere da scrivere e la direzione dello spostamento
(STATOattuale
, CARATTEREinput
, STATOfuturo
, CARATTEREoutput
, DIREZIONE
)
Dati lo stato attuale e il carattere letto dalla testina allora l’esecutore dovrà
- cambiare stato
- scrivere un certo carattere (se il carattere attuale deve rimanere inalterato riscrive lo stesso carattere)
- spostare la testina a sinistra, a destra oppure non spostarla.
Come rappresentare i programmi per la macchina di Turing?
Come scrivere il codice sorgente da dare all’applicazione che lo eseguira?
Il programma è costituito da una sequenza di linee e ogni linea contiene 5 caratteri consecutivi
SCSCD
Con
- S: il nome per lo stato attuale e il nome per il prossimo stato
- C: il carattere letto e il carattere scritto
- D: il carattere predefinito per lo spostamento a destra, oppure a sinistra.
Se si introduce una sintassi più elaborata, con un carattere predefinito di separazione,
S, C, S, C, D
allora i nomi degli stati possono essere delle stringhe!
StatoAttuale
, C
, StatoFuturo
, C
, D
Tabella delle transizioni di stato
Se si interpretano le istruzioni in notazione funzionale
(STATOattuale
, CARATTEREinput
) => (STATOfuturo
, CARATTEREoutput
, DIREZIONE
)
allora è più semplice riportarle in una tabella, delle transizioni di stato, che per ogni entrata (stato, carattere) prevede una tripla (stato, carattere, direzione)
carattere1 | carattere2 | … | caratterem | |
---|---|---|---|---|
stato1 | (s11, c11, d11) | (s12, c12, d12) | … | (s1m, c1m, d1m) |
stato2 | (s21, c21, d21) | (s22, c22, d22) | … | (s2m, c2m, d2m) |
… | … | … | … | … |
staton | (sn1, cn1, dn1) | (sn2, cn2, dn2) | … | (snm, cnm, dnm) |
Diagramma di stato
Se le quintuple sono la scelta più ovvia per la scrittura veloce delle istruzioni e se la tabella permette un controllo maggiore quando le istruzioni sono numnerose, quando la stesura delle istruzioni diventa faticosa, perché l’individuazione dell’algoritmo non è immediata, lo strumento migliore è il diagramma di stato
- I cerchi, i nodi, rappresentano gli stati.
- Lo stato iniziale è evidenziato dal colore verde e dall’etichetta 0.
- Lo stato finale è evidenziato dal colore rosso e dall’etichetta H.
- Le frecce, gli archi, tra i nodi rappresentano le possibili transizioni di stato
- Un arco parte dallo stato attuale e conduce al prossimo stato, che può essere anche lo stesso
- Ogni arco è etichettato con una tripla
- il carattere che provoca la transizione
- il carattere da scrivere
- la direzione dello spostamento sul nastro
I caratteri per lo spostamento potrebbero essere
- D, N, S (Destra, Nullo, Sinistra)
- R, N, L (Right, Null, Left)
- >, –, <
Risorse online
- Macchina di Turing, Wikipedia
- Turing Machines, Stanford Encyclopedia of Philosophy
- Turing Machine, Algebraic.net
- Turing Machine, MathWorld
Online (Javascript)
- TURING MACHINE SIMULATOR
- Cms Turing
- La macchina di Alan Turing
- Turing Machines implemented in JavaScript
Windows