EuraStudy
La teoria della computazione studia che cosa può essere calcolato automaticamente, con quali modelli astratti di calcolo (automi a stati finiti, macchina di Turing) e a quale costo, fissando i limiti invalicabili dell'elaboratore. Si tratta di un approfondimento culturale che inquadra algoritmi e programmazione entro la loro cornice teorica. « Approfondimento — fuori dall'Esame di Stato »: l'argomento non costituisce un obiettivo direttamente valutato nella seconda prova, ma offre la chiave di lettura concettuale dell'intera disciplina.
5 sezioni~26 min di lettura3 competenzeLivello Standard 2 · Approfondimento 3Verificato · 07/2026
livello base
È sufficiente padroneggiare a livello intuitivo le idee-chiave: la nozione di calcolabilità, la macchina di Turing come modello universale, l'esistenza di problemi indecidibili e la distinzione tra problemi trattabili e intrattabili.
livello avanzato
Nell'indirizzo Scienze Applicate si curano gli automi a stati finiti come riconoscitori di linguaggi, la diagonalizzazione che prova l'indecidibilità della terminazione e la struttura logica della questione P vs NP (verifica polinomiale, riduzioni, NP-completezza).
Profondità di lettura: Approfondimento
Dimensione del testo: Standard
I modelli di calcolo equivalenti e la tesi di Church-Turing
Si consideri la procedura: « per stabilire se un numero naturale n è primo, prova a dividerlo per ogni intero d con 2 ≤ d ≤ n−1; se nessuna divisione è esatta, n è primo ». Si stabilisca, motivando, se questa procedura definisce un algoritmo e quindi una funzione calcolabile.
Per ogni n l'insieme dei divisori da provare è finito (da 2 a n−1), quindi il numero di passi è finito: la procedura termina sempre.
Ogni passo (la divisione e il confronto del resto con zero) è univocamente definito: dato lo stesso n si ottiene sempre lo stesso esito.
La procedura funziona per qualsiasi naturale n ≥ 2, non per un singolo valore particolare.
Ogni operazione (divisione intera, confronto) è elementare e meccanicamente eseguibile.
Soddisfatte le quattro proprietà, la procedura è un algoritmo; di conseguenza la funzione « n è primo? » è calcolabile (e, come tutte le funzioni totali ben definite, computabile da una macchina di Turing).
Risultato: La procedura è un algoritmo: la primalità è una proprietà decidibile e quindi calcolabile.
Errori frequenti
Approfondimento
Un argomento sorprendente mostra che i problemi non calcolabili non solo esistono, ma sono la stragrande maggioranza. Ogni programma è, in ultima analisi, una stringa finita di simboli: dunque i programmi possibili sono un'infinità «numerabile» (si possono mettere in fila e contare, come i numeri naturali). Le funzioni dai numeri naturali ai numeri naturali, invece, sono un'infinità «non numerabile», strettamente più grande, come dimostrò Georg Cantor con l'argomento diagonale. Poiché i programmi sono numerabili e le funzioni no, non può esistere un programma per ogni funzione: la maggior parte delle funzioni è, per pura ragione di cardinalità, non calcolabile — il problema della terminazione ne sarà un esempio concreto e «naturale». Questo chiarisce anche il valore della tesi di Church-Turing: fissando un unico confine per tutti i modelli equivalenti (macchina di Turing, lambda-calcolo, funzioni ricorsive e, per estensione, ogni linguaggio di programmazione reale), essa rende la calcolabilità una proprietà robusta, indipendente dal formalismo scelto. Un linguaggio si dice Turing-completo quando può simulare una macchina di Turing, e quasi tutti i linguaggi di uso comune lo sono: ciò significa che condividono esattamente lo stesso potere di calcolo — e gli stessi limiti invalicabili. La potenza di un linguaggio, al di là della comodità sintattica, non va dunque oltre quella di questo semplicissimo modello astratto degli anni Trenta.
Ripasso attivo
Spiega che cosa significa che una funzione è « calcolabile » e illustra il contenuto della tesi di Church-Turing, chiarendo perché essa non è un teorema ma una congettura. Indica almeno due modelli di calcolo che si sono rivelati equivalenti.
Richiamo attivo
Ricorda i punti chiave — poi rivela.
Fonti: Indicazioni Nazionali per i Licei (DPR 89/2010, DM 211/2010) — Obiettivi Specifici di Apprendimento (Ministero dell'Istruzione e del Merito (MIM))
Struttura di una macchina di Turing: nastro, testina e unità di controllo
Automa a stati finiti che accetta le stringhe binarie con un numero pari di 1
Dato l'automa a due stati che riconosce le stringhe binarie con un numero PARI di simboli « 1 » (stato iniziale e finale q0 = numero pari di 1 letti finora; q1 = numero dispari; leggere « 1 » commuta lo stato, leggere « 0 » lo lascia invariato), si determini, traccia per traccia, se la stringa « 1011 » viene accettata.
L'automa parte in q0 (zero « 1 » letti: numero pari).
Da q0, il simbolo « 1 » commuta lo stato: q0 → q1 (un « 1 » letto, dispari).
Da q1, il simbolo « 0 » lascia invariato lo stato: q1 → q1.
Da q1, « 1 » commuta: q1 → q0 (due « 1 » letti, pari).
Da q0, « 1 » commuta: q0 → q1 (tre « 1 » letti, dispari).
Consumata tutta la stringa, l'automa è in q1, che NON è stato finale: la stringa non è accettata. Coerentemente, « 1011 » contiene tre « 1 » (numero dispari).
Risultato: La stringa « 1011 » termina in q1 e quindi NON è accettata: contiene un numero dispari di « 1 ».
Errori frequenti
Approfondimento
Fra l'automa a stati finiti e la macchina di Turing esiste tutta una gerarchia di modelli di potenza crescente, la gerarchia di Chomsky, che lega ogni classe di macchine a una classe di grammatiche e di linguaggi. Alla base ci sono gli automi a stati finiti, che riconoscono i linguaggi regolari (descritti dalle espressioni regolari): perfetti per l'analisi lessicale, il primo stadio di un compilatore che spezza il testo in token. Aggiungendo all'automa una pila (una memoria LIFO) si ottiene l'automa a pila (pushdown automaton), che riconosce i linguaggi liberi dal contesto (context-free): è proprio la pila a permettergli di «contare» le parentesi aperte e chiuse, compito impossibile per l'automa a stati finiti, ed è il modello dell'analisi sintattica (il parser) che verifica la struttura grammaticale di un programma. Salendo ancora si incontrano gli automi limitati linearmente e i linguaggi dipendenti dal contesto, e infine, al vertice, la macchina di Turing, che riconosce i linguaggi ricorsivamente enumerabili, i più generali. Questa scala non è un'astrazione fine a sé stessa: spiega perché la sintassi dei linguaggi di programmazione si descriva con grammatiche libere dal contesto (in notazione BNF) e perché un compilatore sia organizzato in stadi di potenza crescente, dal lessicale al sintattico al semantico. Ogni gradino aggiunge memoria, e con la memoria potere di calcolo — la stessa lezione, portata al suo estremo teorico, che distingueva l'array dalla pila e la pila dalla macchina universale.
Ripasso attivo
Descrivi la struttura di una macchina di Turing elencandone i componenti e spiegando il ruolo della funzione di transizione. Indica quindi una differenza essenziale rispetto a un automa a stati finiti, con un esempio di compito che l'automa NON può svolgere.
Richiamo attivo
Ricorda i punti chiave — poi rivela.
Fonti: Indicazioni Nazionali per i Licei (DPR 89/2010, DM 211/2010) — Obiettivi Specifici di Apprendimento (Ministero dell'Istruzione e del Merito (MIM))
La contraddizione del problema della terminazione (diagonalizzazione su D(D))
Si classifichino, motivando, i seguenti problemi come decidibili o indecidibili: (a) « dato un intero n, stabilire se è pari »; (b) « dato un programma P e un dato d, stabilire se P(d) termina »; (c) « data una lista finita di interi, stabilire se è ordinata in modo crescente ».
Esiste un algoritmo che termina sempre: basta esaminare l'ultima cifra (o calcolare n mod 2). Risposta sì/no in un numero finito di passi per ogni n.
Problema DECIDIBILE.
È esattamente il problema della terminazione: Turing ha dimostrato che nessun algoritmo generale può deciderlo per ogni coppia (P, d).
Problema INDECIDIBILE.
La lista è finita: si scorrono gli elementi confrontando ciascuno col successivo; al primo confronto in cui l'ordine è violato si risponde « no », altrimenti « sì ». L'algoritmo termina sempre.
Problema DECIDIBILE.
Risultato: (a) decidibile · (b) indecidibile (è l'halting problem) · (c) decidibile.
Errori frequenti
Approfondimento
La dimostrazione dell'indecidibilità della terminazione non è un caso isolato: è la sorgente da cui, con la tecnica della riduzione, si dimostra indecidibile una miriade di altri problemi. Ridurre un problema A a un problema B significa mostrare che, se sapessimo risolvere B, sapremmo risolvere anche A; se A è già noto indecidibile, allora anche B deve esserlo, altrimenti risolveremmo A. Con questo metodo si dimostra, per esempio, che è indecidibile stabilire se un programma stamperà mai un dato output, o se due programmi calcolano la stessa funzione. Un risultato di portata generale è il teorema di Rice: qualunque proprietà «semantica» non banale del comportamento di un programma — cioè che riguardi che cosa il programma calcola, non come è scritto — è indecidibile. Ecco perché gli strumenti di analisi automatica del software possono controllare proprietà sintattiche, ma non decidere in generale proprietà di comportamento. Va infine distinta l'indecidibilità dalla semi-decidibilità: il problema della terminazione è «semi-decidibile» (o riconoscibile), perché esiste una procedura che, se il programma termina, prima o poi se ne accorge — basta eseguirlo e aspettare — ma se non termina, la procedura non lo scopre mai, restando in attesa all'infinito. Decidibile significa avere sempre una risposta certa, sì o no; semi-decidibile significa avere la certezza solo per i «sì»: un confine sottile, ma cruciale nella teoria.
Ripasso attivo
Enuncia il problema della terminazione (halting problem) e spiega, illustrando l'idea della dimostrazione per assurdo basata sull'autoreferenza, perché non può esistere un programma in grado di decidere la terminazione di ogni programma su ogni dato.
Richiamo attivo
Ricorda i punti chiave — poi rivela.
Fonti: Indicazioni Nazionali per i Licei (DPR 89/2010, DM 211/2010) — Obiettivi Specifici di Apprendimento (Ministero dell'Istruzione e del Merito (MIM))
Le classi di complessità: P contenuto in NP e i problemi NP-completi
Notazione O-grande
Il costo T(n) di un algoritmo è O(g(n)) se, per n sufficientemente grande, cresce al più come g(n) a meno di una costante: misura l'ordine di crescita, non i dettagli implementativi.
Relazione tra le classi
Ogni problema risolubile in tempo polinomiale (P) è anche verificabile in tempo polinomiale (NP). Se valga anche l'inclusione opposta (P = NP) è il grande problema aperto.
Crescita del costo: tempo polinomiale n² contro tempo esponenziale 2^n
Due algoritmi risolvono lo stesso problema: A esegue circa n^2 operazioni, B circa 2^n operazioni, dove n è la dimensione dell'ingresso. Si calcoli il numero di operazioni di ciascuno per n = 5 e n = 20 e si stabilisca quale algoritmo è trattabile.
n^2 = 5^2 = 25 operazioni.
2^n = 2^5 = 32 operazioni. Per n piccolo i due valori sono confrontabili.
n^2 = 20^2 = 400 operazioni: una crescita modesta.
2^n = 2^20 = 1.048.576 operazioni: oltre un milione, contro le 400 di A.
La crescita esponenziale di B esplode: già a n=20 supera quella polinomiale di A di oltre 2600 volte, e il divario cresce senza limite. Il polinomiale resta affrontabile, l'esponenziale diventa proibitivo.
Risultato: L'algoritmo A (O(n^2), polinomiale) è trattabile; l'algoritmo B (O(2^n), esponenziale) è intrattabile per n grande: a n=20 richiede 1.048.576 operazioni contro 400.
Errori frequenti
Approfondimento
Il cuore della teoria della complessità è la nozione di NP-completezza, e il suo motore è di nuovo la riduzione. Un problema è NP-completo quando appartiene a NP e, in più, ogni altro problema di NP gli si può ridurre in tempo polinomiale: esso è quindi «almeno difficile quanto» qualunque problema della classe. Il teorema di Cook-Levin (1971) dimostrò che il problema della soddisfacibilità booleana (SAT — esiste un'assegnazione di verità che rende vera una formula logica?) è NP-completo, il primo della storia; da allora, per riduzione a partire da SAT, si è dimostrato NP-completo un elenco vastissimo di problemi pratici: il commesso viaggiatore, la colorazione di grafi, lo zaino, la pianificazione. La conseguenza è pesante: se anche uno solo di essi avesse un algoritmo polinomiale, l'avrebbero tutti (P = NP); poiché si congettura di no, di fronte a un problema NP-completo non si cerca la soluzione esatta, ma ci si accontenta di algoritmi di approssimazione (che garantiscono una soluzione vicina all'ottimo), di euristiche (che funzionano bene in pratica senza garanzie) o di metodi probabilistici. Per rendere concreta la differenza fra polinomiale ed esponenziale: un algoritmo «O(n²)» su un ingresso «n = 50» esegue circa 2500 operazioni, mentre uno «O(2ⁿ)» ne esegue circa «10¹⁵» — la distanza fra un istante e millenni di calcolo. È questa voragine, che nessun hardware può colmare, a separare il trattabile dall'intrattabile.
Ripasso attivo
Spiega la differenza tra la classe P e la classe NP usando la distinzione tra « risolvere » e « verificare » una soluzione, e illustra il significato della domanda aperta « P = NP? ». Chiarisci infine perché un algoritmo di costo O(2^n) è considerato intrattabile rispetto a uno di costo O(n^2).
Richiamo attivo
Ricorda i punti chiave — poi rivela.
Fonti: Indicazioni Nazionali per i Licei (DPR 89/2010, DM 211/2010) — Obiettivi Specifici di Apprendimento (Ministero dell'Istruzione e del Merito (MIM))
Mappa dei problemi: non calcolabili, calcolabili intrattabili, calcolabili trattabili
Per ciascuna delle seguenti situazioni, indica quale limite teorico è coinvolto (indecidibilità oppure intrattabilità) e quale conseguenza pratica ne deriva: (a) un'azienda vuole un programma che, dato QUALSIASI software, garantisca che non andrà mai in loop infinito; (b) un corriere vuole il percorso più breve che tocchi 50 città una sola volta.
Decidere per ogni programma se termina è il problema della terminazione, dimostrato indecidibile.
Nessun programma può garantirlo in generale: gli strumenti di verifica si limitano a casi particolari o ad analisi approssimate, mai a una garanzia universale.
È una variante del problema del commesso viaggiatore, NP-completo: calcolabile (le soluzioni sono finite) ma con costo esponenziale nei metodi esatti.
Per 50 città l'enumerazione esatta è proibitiva; si ricorre ad algoritmi approssimati o euristici che trovano un buon percorso (non necessariamente l'ottimo) in tempi accettabili.
Risultato: (a) limite di indecidibilità → verifica solo parziale/approssimata; (b) limite di intrattabilità (NP-completezza) → si usano metodi approssimati ed euristici.
Errori frequenti
Approfondimento
Un'ultima domanda chiude il quadro: modelli di calcolo radicalmente nuovi possono superare questi limiti? Il candidato più discusso è il computer quantistico, che sfrutta i principi della meccanica quantistica (sovrapposizione, entanglement) per esplorare in parallelo molte possibilità. Conviene essere precisi su ciò che può e non può fare. Non supera i limiti di calcolabilità: un computer quantistico non può risolvere il problema della terminazione, perché è comunque simulabile da una macchina di Turing e calcola quindi le stesse funzioni, solo potenzialmente più in fretta. Sul piano della complessità offre invece accelerazioni notevoli per problemi specifici — l'algoritmo di Shor fattorizza numeri grandi in tempo polinomiale, minacciando la crittografia a chiave pubblica attuale e spingendo verso una crittografia «post-quantistica» — ma non si ritiene che possa risolvere in tempo polinomiale i problemi NP-completi in generale. I limiti di fondo, dunque, restano. Vi è infine un legame profondo con la logica: il teorema di incompletezza di Gödel (1931), gemello dei risultati di Turing, dimostra che in ogni sistema formale abbastanza potente esistono affermazioni vere ma indimostrabili al suo interno — calcolo e dimostrazione condividono lo stesso confine invalicabile. Conoscere questa mappa — che cosa si può calcolare, a quale costo, e che cosa resta per sempre fuori portata — è il traguardo culturale a cui l'intero corso di informatica conduce: non solo saper programmare, ma sapere che cosa la programmazione può e non può fare.
Ripasso attivo
Distingui tra i limiti di calcolabilità (problemi indecidibili) e i limiti di complessità (problemi intrattabili), spiegando perché entrambi sono limiti logici e non tecnologici. Illustra poi una conseguenza pratica per ciascuno dei due tipi di limite.
Richiamo attivo
Ricorda i punti chiave — poi rivela.
Fonti: Indicazioni Nazionali per i Licei (DPR 89/2010, DM 211/2010) — Obiettivi Specifici di Apprendimento (Ministero dell'Istruzione e del Merito (MIM))
Riferimenti e fonti
Ministero dell'Istruzione e del Merito (MIM)