| | | | |

I Programmi vanno in Crash? La Scienza dice che NON puoi evitarlo!

I Programmi vanno in Crash? La Scienza dice che NON puoi evitarlo!

Immagina di avere un programma che calcola qualcosa: come fai a sapere se si fermerà o se continuerà a girare all’infinito? Questo è il Problema dell’Arresto o della Terminazione (Halting Problem), uno dei concetti più importanti (e paradossali) dell’informatica.

Nel 1936, Alan Turing dimostrò che è impossibile creare un programma universale che possa sempre verificare se un altro programma terminerà o meno.

Perché è Importante?

Il Problema dell’Arresto non è solo un rompicapo teorico, ma ha conseguenze concrete nello sviluppo del software e nella nostra comprensione della tecnologia. Ecco tre ragioni fondamentali che ne dimostrano l’importanza:

  1. Limite fondamentale dei computer: Alcuni problemi non possono essere risolti da nessun algoritmo.
  2. Sicurezza e debugging: Non possiamo scrivere un tool perfetto che trovi tutti i loop infiniti. Ecco perché nessun programmatore può rilasciare un software perfetto al 100%: alcuni errori sono matematicamente impossibili da prevedere!
  3. Filosofia della computazione: Ci fa capire che i computer non sono “onnipotenti”.

Un Esempio Divertente: Il Mago che Non Può Esistere

Vediamo di spiegare il Problema dell’Arresto con un esempio semplice. Supponiamo che esista un mago dei programmi, chiamato Fermatore, che può rispondere a questa domanda:

“Se eseguo questo programma con questi dati, alla fine il programma si fermerà o andrà in un loop infinito?”

Fermatore risponde sempre:

  • ✅  (se il programma termina)
  • ❌ NO (se va in loop infinito)

Ora costruiamo un programma chiamato Trabocchetto, che fa esattamente il contrario di quello che dice Fermatore:

  1. Chiede a Fermatore“Se eseguo me stesso, mi fermerò?”
  2. Se Fermatore dice SÌ → Trabocchetto entra in un loop infinito (non si ferma!)
  3. Se Fermatore dice NO → Trabocchetto si ferma subito.

Il Paradosso

  • Se Fermatore dice , Trabocchetto non si ferma → quindi Fermatore ha sbagliato.
  • Se Fermatore dice NO, Trabocchetto si ferma → quindi Fermatore ha sbagliato di nuovo.

Conclusione: Fermatore non può esistere, perché può venire sempre ingannato!

Un Altro Esempio: Il Barbiere del Villaggio

C’è un villaggio dove il barbiere fa una promessa:

“Faccio la barba a tutti quelli che non si fanno la barba da soli!”

Ma allora:

  • Se il barbiere si rade, viola la sua regola (perché lui dovrebbe radere solo chi non si rade).
  • Se non si rade, allora dovrebbe radersi lui (perché è il suo compito).

È un paradosso senza soluzione, proprio come il Problema dell’Arresto!

La Dimostrazione Formale

Prima di tuffarci nella logica matematica della dimostrazione formale, facciamo un respiro profondo: la dimostrazione che segue è un capolavoro di eleganza concettuale che unisce informatica e filosofia in poche righe.

Ecco come Turing ha demolito il sogno di un computer perfetto:

Si indichi con LH il linguaggio dell’halting problem e si supponga che LH sia decidibile. Allora per definizione esiste una macchina di Turing T che decide LH e che per un qualsiasi input x la computazione T(x) va

  • nello stato di accettazione se x∈ LH ;
  • nello stato di rigetto se x∉ LH .

Da T si deriva una seconda macchina di Turing T’ complementando gli stati di accettazione e di rigetto della macchina T, quindi la computazione di T'(x) va

  • nello stato di accettazione se x∉ LH  ;
  • nello stato di rigetto se x ∈ LH.

Da T’ si deriva una terza macchina di Turing T” che o accetta o non termina, quindi la computazione di T”(x) va

  • nello stato di accettazione se T’ accetta;
  • non termina se T’ rigetta.

Poiché l’insieme delle macchine di Turing Ť è numerabile allora T ∈ Ť . Questo implica che ∃ n ∈ N (insieme dei numeri naturali) tale che Tn(n) = T”(n).

Se Tn(n) accetta allora anche T'(n) dovrebbe accettare, ma se T'(n) accetta allora significa che n∉LH e se n∉LH allora Tn(n) rigetta.

Se Tn(n) rigetta allora anche T'(n) dovrebbe rigettare, ma se T'(n) rigetta allora n∈LH e se n∈LH allora Tn(n) accetta.

In entrambi i casi esiste una contraddizione, quindi T” non esiste, e poiché T” è ottenuta mediante semplici modifiche alla macchina T che decide LH, questo porta a dire che LH non è decidibile.

Un Concetto Affascinante

Il Problema dell’Arresto ci mostra che alcune domande non hanno risposta, nemmeno per i computer più potenti. È un concetto affascinante che unisce logica, informatica e filosofia!

💡 MoraleNon tutto ciò che è computabile può essere previsto!

Share on Facebook, X, ...

Similar Posts