Perché molti problemi davvero pratici sono l'arresto del problema sotto mentite spoglie. Una soluzione a loro risolve il problema di arresto.
Vuoi un compilatore che trova il codice macchina più veloce possibile per un determinato programma? In realtà il problema di arresto.
Hai JavaScript, con alcune variabili a livelli di sicurezza elevati e altre a livello di sicurezza basso. Vuoi assicurarti che un utente malintenzionato non riesca a ottenere informazioni di alta sicurezza. Questo è anche solo il problema di arresto.
Hai un parser per il tuo linguaggio di programmazione. Lo cambi, ma vuoi assicurarti che analizzi ancora tutti i programmi a cui era abituato. In realtà il problema di arresto.
Hai un programma antivirus e vuoi vedere se esegue mai un'istruzione malevola. In realtà solo il problema di arresto.
Per quanto riguarda l'esempio di Wikipedia, sì, potresti modellare un computer moderno come una macchina a stati finiti. Ma ci sono due problemi con questo.
Ogni computer sarebbe un automa diverso, a seconda del numero esatto di bit di RAM. Quindi questo non è utile per esaminare un particolare pezzo di codice, poiché l'automa dipende dalla macchina su cui può essere eseguito.
Avresti bisogno di stati se hai n bit di RAM. Quindi per il tuo moderno computer da 8 GB, questo è . Questo è un numero così grande che wolfram alpha non sa nemmeno come interpretarlo. Quando faccio mi dice che ha cifre decimali. Questo è chiaramente troppo grande per essere archiviato in un normale computer.2 32000000000 2 10 9 3000000002n2320000000002109300000000
Il problema di Halting ci consente di ragionare sulla relativa difficoltà degli algoritmi. Ci consente di sapere che esistono alcuni algoritmi che non esistono, che a volte tutto ciò che possiamo fare è indovinare un problema e non sapere mai se l'abbiamo risolto.
Se non avessimo avuto il problema dell'arresto, saremmo comunque alla ricerca dell'algoritmo magico di Hilbert che inserisce teoremi e produce se sono veri o no. Ora sappiamo che possiamo smettere di cercare e possiamo impegnarci per trovare l'euristica e i metodi migliori per risolvere questi problemi.
AGGIORNAMENTO: solo per affrontare un paio di problemi sollevati nei commenti.
@Tyler Fleming Cloutier: Il problema "insensato" emerge dalla prova che il problema dell'arresto è indecidibile, ma ciò che sta al centro dell'indecidibilità è davvero avere uno spazio di ricerca infinito. Stai cercando un oggetto con una determinata proprietà e, se non esiste, non c'è modo di sapere quando hai finito.
La difficoltà di un problema può essere correlata al numero di quantificatori che ha. Cercando di mostrare che esiste ( ) un oggetto con una proprietà arbitraria, devi cercare fino a quando non ne trovi uno. Se non esiste nessuno, non c'è modo (in generale) di saperlo. Provare che tutti gli oggetti ( ) hanno una proprietà è difficile, ma puoi cercare un oggetto senza la proprietà per confutare. Più sono le alternanze tra forall ed esistono, più è difficile un problema.∀∃∀
Per ulteriori informazioni, vedi la Gerarchia aritmetica . Qualcosa al di sopra di è indecidibile, sebbene il livello 1 sia semi-decidibile.Σ00= Π00
È anche possibile dimostrare che ci sono problemi indecidibili senza usare un paradosso insensato come il problema di Halting o il paradosso di Liars. Una macchina di Turing può essere codificata usando una stringa di bit, cioè un numero intero. Ma un problema può essere codificato come una lingua, cioè un sottoinsieme degli interi. È noto che non esiste alcuna biiezione tra l'insieme di numeri interi e l'insieme di tutti i sottoinsiemi degli interi. Quindi ci devono essere alcuni problemi (lingue) che non hanno una macchina di Turing (algoritmo) associata.
@Brent: sì, questo ammette che questo è decidibile per i computer moderni. Ma è decidibile per una macchina specifica. Se aggiungi un'unità USB con spazio su disco, o la possibilità di archiviare su una rete o qualsiasi altra cosa, la macchina è cambiata e il risultato non è ancora valido.
Va anche detto che ci saranno molte volte in cui l'algoritmo dice "questo codice si interromperà" perché il codice fallirà e si esaurirà la memoria, e che l'aggiunta di un singolo ulteriore bit di memoria causerebbe il codice avere successo e dare un risultato diverso.
Il fatto è che le macchine di Turing non hanno una quantità infinita di memoria. Non c'è mai un momento in cui una quantità infinita di simboli è scritta sul nastro. Invece, una macchina Turing ha una memoria "illimitata", il che significa che puoi continuare a ottenere più fonti di memoria quando ne hai bisogno. I computer sono così. È possibile aggiungere RAM, chiavette USB o dischi rigidi o memoria di rete. Sì, esaurisci la memoria quando esaurisci gli atomi nell'universo. Ma avere memoria illimitata è un modello molto più utile.