Riepilogo: secondo il teorema di Rice, tutto è impossibile. Eppure, faccio queste cose apparentemente impossibili tutto il tempo!
Naturalmente, il teorema di Rice non dice semplicemente "tutto è impossibile". Dice qualcosa di più specifico: "Ogni proprietà di un programma per computer non è calcolabile".
(Se vuoi dividere i peli, ogni proprietà "non banale". Cioè, le proprietà che tutti i programmi possiedono o nessun programma possiedono sono banalmente calcolabili. Ma qualsiasi altra proprietà non è calcolabile.)
Questo è ciò che dice il teorema, o sembra dire. E presumibilmente un gran numero di persone molto intelligenti ha verificato attentamente la correttezza di questo teorema. Ma sembra sfidare completamente la logica! Esistono numerose proprietà dei programmi che sono banali da calcolare !! Per esempio:
Quanti passaggi esegue un programma prima di interrompere? Decidere se questo numero è finito o infinito è precisamente il problema Halting, che non è calcolabile. Decidere se questo numero è maggiore o minore di qualche finito è banale! Basta eseguire il programma per un massimo di n passaggi e vedere se si interrompe o meno. Facile!
Allo stesso modo, il programma utilizza più o meno di unità di memoria nelle sue prime m fasi di esecuzione? Trivialmente calcolabile.
Il testo del programma menziona una variabile chiamata ? Una banale analisi testuale rivelerà la risposta.
Il programma invoca il comando ? Ancora una volta, scansiona il testo del programma cercando quel nome di comando.
Vedo un sacco di proprietà che fanno sembrare non calcolabile pure; ad esempio, quante aggiunte esegue un'esecuzione completa del programma? Bene, è quasi lo stesso che chiedere quanti passaggi esegue il programma, che è praticamente il problema di Halting. Ma sembra che ci siano un sacco di proprietà del programma che è molto, molto facile da calcolare. Eppure, il teorema di Rice insiste sul fatto che nessuno di loro è calcolabile.
Cosa mi sto perdendo qui?