Ho appena trovato una risposta ad un'altra domanda che fa riferimento al problema di interruzione. Inizia con questo frammento:
def halts( code_block ):
# Some magical code
def whistler():
while halts(whistler):
sys.whistle( 1 )
e poi spiega come la routine halts
non può essere definita correttamente perché essenzialmente equivale a essere logicamente equivalente a "questa frase è falsa". A parte la sintassi in stile Python, questa è fondamentalmente la spiegazione standard del problema dell'arresto e non ho mai capito il concetto. Ogni volta che guardo a quel tipo di esempio, penso "ma perché mai nel mondo qualcuno dovrebbe affrontare il problema in questo modo?"
Se volessi determinare una proprietà difficile di un pezzo di codice, come rispondere alla domanda se si fermasse o meno, non avrei mai inserito l'analisi nel codice da analizzare! Prima di tutto, ciò porta a contraddizioni come questo esempio e, in secondo luogo, l'aggiunta del codice di analisi modifica la natura della cosa analizzata. Cercherò quasi certamente di cercare la risposta alla domanda con strumenti esterni, non interni.
Quindi sì, capisco che non c'è modo di scrivere un'implementazione corretta di halts
nell'esempio sopra. Ma limitiamoci unicamente al regno del codice che in realtà può essere scritto correttamente, anziché ipotetici. Qual è un esempio di codice che può essere effettivamente scritto ed eseguito, per il quale è impossibile determinare con un'analisi esterna se il codice finirà in un ciclo infinito o se terminerà?