Nel 1936, il matematico britannico Alan Turing propose un modello teorico
di macchina che potesse eseguire qualsiasi calcolo possibile. Questo modello, chiamato
Macchina di Turing, è alla base teorica di tutti i computer moderni.
Cos'è una Macchina di Turing?
Una Macchina di Turing è un modello matematico astratto composto da:
Metafora: La Persona con Foglio e Matita
Per capire meglio la Macchina di Turing, immagina una persona seduta a una scrivania infinitamente lunga,
con un foglio di carta a quadretti che si estende all'infinito in entrambe le direzioni.
Cosa fa questa persona?
- Può leggere il simbolo scritto nel quadretto che ha davanti agli occhi
- Può scrivere o cancellare simboli in quel quadretto con la matita
- Può spostarsi di un quadretto a destra o sinistra lungo la scrivania
- Segue delle istruzioni precise scritte su un manuale che ha davanti
- È in uno "stato mentale" (esempio: "cerco uno zero", "sto sommando", "ho finito")
Il manuale di istruzioni contiene regole come questa:
"Se sei nello stato 'cerco uno zero' e leggi '1', scrivi '0', spostati a destra e passa allo stato 'cerco un uno'"
Questo è esattamente ciò che fa una Macchina di Turing!
- Il nastro infinito = il foglio a quadretti infinito
- La testina di lettura/scrittura = la matita e gli occhi della persona
- Gli stati = lo "stato mentale" della persona
- La tabella delle transizioni = il manuale di istruzioni
Ogni computer che usiamo oggi (smartphone, laptop, supercomputer) è fondamentalmente
questa "persona con foglio e matita", solo incredibilmente più veloce (miliardi di operazioni al secondo)!
Componenti della Macchina di Turing
Nastro Infinito
Un nastro diviso in celle, ciascuna contenente un simbolo (come 0, 1, o vuoto).
Il nastro rappresenta la memoria, potenzialmente infinita.
Testina di Lettura/Scrittura
Una testina che può leggere e scrivere simboli sul nastro, e muoversi a sinistra
o a destra di una cella alla volta.
Insieme di Stati
Un insieme finito di "stati" in cui la macchina può trovarsi (come "stato iniziale",
"stato finale", "stato di calcolo", ecc.).
Tabella di Transizione
Un insieme di regole che dicono: "se sei nello stato X e leggi il simbolo Y,
scrivi Z, muoviti a sinistra/destra e passa allo stato W".
Esempi Pratici di Macchine di Turing
Vediamo alcuni esempi concreti per capire come funziona una Macchina di Turing nella pratica:
Esempio 1: Scrivere Tre X
COMPITO: Scrivere XXX su un nastro vuoto
Metafora della Persona:
La persona inizia davanti a un foglio bianco e deve scrivere tre X.
Stati mentali:
- S0: "Devo scrivere la prima X"
- S1: "Devo scrivere la seconda X"
- S2: "Devo scrivere la terza X"
- FINE: "Ho finito"
Istruzioni del manuale:
SE sono in S0:
- Scrivo "X" nel quadretto corrente
- Mi sposto a DESTRA
- Passo allo stato S1
SE sono in S1:
- Scrivo "X" nel quadretto corrente
- Mi sposto a DESTRA
- Passo allo stato S2
SE sono in S2:
- Scrivo "X" nel quadretto corrente
- Passo allo stato FINE
Esecuzione passo-passo:
Nastro iniziale: [ ][ ][ ][ ][ ]...
↑ (persona qui, stato S0)
Passo 1: Scrivo X, vado a destra, stato S1
Nastro: [X][ ][ ][ ][ ]...
↑ (persona qui, stato S1)
Passo 2: Scrivo X, vado a destra, stato S2
Nastro: [X][X][ ][ ][ ]...
↑ (persona qui, stato S2)
Passo 3: Scrivo X, stato FINE
Nastro finale: [X][X][X][ ][ ]...
↑ (persona qui, stato FINE - FERMATA)
Esempio 2: Sommare 1 a un Numero Binario
COMPITO: Incrementare 1011 (11 in decimale) di 1
Metafora della Persona:
Immagina di sommare 1 a un numero binario su carta, partendo dalla cifra più a destra.
Istruzioni del manuale:
1. Vai all'ultima cifra (più a destra)
2. SE leggi "1": scrivi "0", vai a sinistra (c'è riporto!)
3. SE leggi "0": scrivi "1" e FERMATI (somma completata)
4. SE leggi "vuoto": scrivi "1" e FERMATI
Esecuzione passo-passo:
Nastro iniziale: [1][0][1][1][ ][ ]... (1011₂ = 11₁₀)
↑ Parto da qui
Passo 1: Leggo [1] → Scrivo [0], vado a sinistra (riporto!)
Nastro: [1][0][1][0][ ][ ]...
↑
Passo 2: Leggo [1] → Scrivo [0], vado a sinistra (ancora riporto!)
Nastro: [1][0][0][0][ ][ ]...
↑
Passo 3: Leggo [0] → Scrivo [1], FERMATI (somma completa!)
Nastro finale: [1][1][0][0][ ][ ]... (1100₂ = 12₁₀)
↑ FINE
Verifica: 1011₂ + 1 = 1100₂ ✓ (11 + 1 = 12)
Esempio 3: Trovare una X su un Nastro
COMPITO: Cercare il primo simbolo X sul nastro
Metafora della Persona:
Scorri il foglio da sinistra a destra finché non trovi una X.
Stati mentali:
- CERCA: "Sto cercando una X"
- TROVATO: "Ho trovato la X!"
Istruzioni del manuale:
SE sono in CERCA e leggo qualsiasi simbolo diverso da X:
- Non scrivo niente
- Mi sposto a DESTRA
- Resto in stato CERCA
SE sono in CERCA e leggo "X":
- Passo allo stato TROVATO
- FERMATI
Esecuzione passo-passo:
Nastro: [A][B][C][X][Y][Z]...
↑ (inizio, stato CERCA)
Passo 1: Leggo [A] (non è X), vado a destra
Nastro: [A][B][C][X][Y][Z]...
↑ (stato CERCA)
Passo 2: Leggo [B] (non è X), vado a destra
Nastro: [A][B][C][X][Y][Z]...
↑ (stato CERCA)
Passo 3: Leggo [C] (non è X), vado a destra
Nastro: [A][B][C][X][Y][Z]...
↑ (stato CERCA)
Passo 4: Leggo [X] (trovata!), passo a stato TROVATO, FERMATI
Nastro: [A][B][C][X][Y][Z]...
↑ (stato TROVATO - FINE)
Esempio 4: Invertire 0 e 1
COMPITO: Trasformare tutti gli 0 in 1 e tutti gli 1 in 0
Metafora della Persona:
Scorri il foglio, quando vedi 0 cambialo in 1, quando vedi 1 cambialo in 0.
Istruzioni del manuale:
SE leggo "0":
- Scrivo "1"
- Vado a DESTRA
SE leggo "1":
- Scrivo "0"
- Vado a DESTRA
SE leggo "vuoto":
- FERMATI (ho finito la sequenza)
Esecuzione passo-passo:
Nastro iniziale: [1][0][1][1][0][ ]...
↑
Passo 1: Leggo [1] → Scrivo [0], vado a destra
Nastro: [0][0][1][1][0][ ]...
↑
Passo 2: Leggo [0] → Scrivo [1], vado a destra
Nastro: [0][1][1][1][0][ ]...
↑
Passo 3: Leggo [1] → Scrivo [0], vado a destra
Nastro: [0][1][0][1][0][ ]...
↑
Passo 4: Leggo [1] → Scrivo [0], vado a destra
Nastro: [0][1][0][0][0][ ]...
↑
Passo 5: Leggo [0] → Scrivo [1], vado a destra
Nastro: [0][1][0][0][1][ ]...
↑
Passo 6: Leggo [ ] (vuoto) → FERMATI
Nastro finale: [0][1][0][0][1][ ]...
Risultato: Tutti i bit sono stati invertiti! ✓
Prova Tu!
Esercizio pratico: Prendi carta e penna e simula una Macchina di Turing che:
- Conta quanti "1" ci sono in una sequenza binaria
- Sostituisce ogni "A" con "B" su un nastro
- Copia una sequenza di simboli in un'altra posizione del nastro
Ricorda: Puoi fare solo operazioni semplici: leggere, scrivere, spostarti di una cella,
cambiare stato mentale. Ma con queste operazioni elementari puoi fare QUALSIASI calcolo!
Importanza della Macchina di Turing
- Definizione di Computabilità - Ha definito formalmente cosa significa che un problema può essere risolto da un computer
- Tesi di Church-Turing - Qualsiasi cosa calcolabile può essere calcolata da una Macchina di Turing
- Base dei Computer Moderni - Tutti i computer odierni sono essenzialmente Macchine di Turing (con memoria finita)
- Limiti della Computazione - Ha dimostrato che esistono problemi che nessun computer potrà mai risolvere (problema della fermata)
Concetto Chiave
La Macchina di Turing dimostra che la programmazione è pura logica matematica.
Non servono circuiti elettronici complessi: si potrebbe costruire un computer
con ingranaggi meccanici, acqua che scorre in tubi, o persino con carta e matita!
Il computer fisico è solo uno strumento per eseguire velocemente ciò che potremmo
fare a mano (ma ci vorrebbe un'eternità).