Perché, davvero, il problema di Halting è così importante?


149

Non capisco perché l' Halting Problem sia così spesso usato per respingere la possibilità di determinare se un programma si interrompe. Wikipedia [articolo] [1] spiega correttamente che una macchina deterministica con memoria finita arresterà o ripeterà uno stato precedente. È possibile utilizzare l'algoritmo che rileva se un elenco collegato esegue un loop per implementare la funzione Halting con complessità spaziale di O (1).

Mi sembra che la dimostrazione di Halting Problem non sia altro che un cosiddetto "paradosso", una contraddizione autoreferenziale (per lo meno ciclica) allo stesso modo del paradosso del Bugiardo. L'unica conclusione che fa è che la funzione di interruzione è suscettibile a tali domande malformate.

Quindi, esclusi i programmi paradossali, la funzione di interruzione è decidibile. Quindi perché lo riteniamo una prova del contrario?

4 anni dopo : quando ho scritto questo, avevo appena visto questo video . Un programmatore ottiene alcuni programmi, deve determinare quali terminano e il video continua spiegando perché ciò è impossibile. Ero frustrato, perché sapevo che, dati alcuni programmi arbitrari, c'era la possibilità che il protagonista potesse dimostrare se fossero terminati. Il concetto di generalità è stato in qualche modo perso. È la differenza tra dire "non è possibile dimostrare la chiusura di alcuni programmi" e "non è possibile dimostrare la chiusura di nessun programma". Molti algoritmi hanno formalmente dimostrato di farlo. L'incapacità di fare questa distinzione, per ogni singolo riferimento che ho trovato in linea, è stato come sono arrivato al titolo per questa domanda. Per questo motivo, apprezzo molto la risposta che ridefinisce la funzione di arresto come ternaria anziché booleana.


16
"una macchina deterministica con memoria finita" è "noiosa" poiché non è altro che un automa finito; questi non sono utili per la modellazione del calcolo in generale. Per quanto riguarda il problema dell'arresto: è un esempio specifico di una funzione non calcolabile (Turing). Se sei soddisfatto di una prova non costruttiva, non "ne hai bisogno". Tuttavia ha ancora rilevanza storica.
Raffaello

16
Detto questo, la tua domanda si presenta come mal informata. Si potrebbe desiderare di migliorare le tue fondamenti della computabilità teoria (che si sfideranno il vostro intuito, che viene informato dalla realtà, non i modelli discussi lì). Consulta le nostre domande di riferimento per iniziare. Se hai bisogno di ulteriori "prove" che la tua intuizione (per quanto riguarda la teoria) sia fatalmente difettosa, vai a leggere questa domanda .
Raffaello

12
"È possibile utilizzare l'algoritmo che rileva se un elenco collegato esegue un loop per implementare la funzione Halting con complessità spaziale di O (1)" - ma se si desidera risolvere il problema per un computer con 2 GB di spazio di archiviazione, è necessario 2 ^ 2000000000 passaggi e un computer più grande.
user2357112

11
Molto tempo fa stavo chattando con un amico sul problema dell'arresto e qualcuno seduto nelle vicinanze mi ha chiesto "qual è il problema dell'arresto, è importante?" e il mio amico si rivolse a lui e gli disse "se potessimo risolvere il problema dell'arresto, potremmo costruire città sulle nuvole". Questo è vero.
Francis Davey,

8
@emory L'affermazione è vacuamente vera: P => Qè vera per qualsiasi Q, se sappiamo che Pè falsa (e sappiamo che il problema di Halting non è risolvibile). Francesco potrebbe anche dire "Se potessimo risolvere il problema dell'arresto, potremmo trovare una cura per la morte stessa". È il modo in cui viene definita l'implicazione logica.
amalloy,

Risposte:


217

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.

  1. 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.

  2. 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.


4
@Mehrdad Per qualsiasi definizione ragionevole di "codice macchina più veloce possibile per un determinato programma", la domanda ha senso e la risposta è "Non può esserci un compilatore del genere".
David Richerby,

13
Funziona anche per trovare il codice macchina più breve possibile da emettere, quello con il minor numero di accessi di memoria, ecc. Ecc. Per i programmi generali, è impossibile trovare una trasformazione ottimale. Questo è fondamentalmente il teorema di Rice.
jmite,

4
Come corollario al punto di cercare ancora l'algoritmo magico di Hilbert, senza il concetto strettamente correlato dell'equivalenza di Turing, discuteremo ancora se goto o codice auto-modificante consentano calcoli più potenti, cercando forme hardware computazionalmente più potenti e gli argomenti su quale sia il miglior linguaggio di programmazione sarebbero molto più soggettivi anche di quanto non lo siano ora.
sdenham,

3
Si presenta anche in posti che non ti aspetteresti. Vuoi scrivere un compilatore C ++ che rifiuta tutti i programmi non validi durante la compilazione di tutti quelli validi? Risolvi innanzitutto il problema di arresto: la metaprogrammazione dei modelli C ++ è Turing completa, quindi dire se i tuoi modelli sono validi o meno nel caso generale richiede di risolverli.
Segna il

7
@Merhrdad: Il tuo esempio di "simulazione dell'intero programma per computer" è un eccellente esempio del perché il problema dell'arresto è così importante. Per alcuni programmi, simulare il programma non è così semplice come sembra (ad esempio, guarda la pagina di wikipedia sull'arresto). Se il problema può essere ingannevole in questa forma, puoi immaginare quanto sia difficile spiegare a qualcuno una forma più nascosta (come il problema dell'antivirus)
Cort Ammon,

49

In termini pratici, è importante perché ti consente di dire ai tuoi capi ignoranti "ciò che stai chiedendo è matematicamente impossibile".

Il problema di arresto e vari problemi NP-completi (ad esempio il problema del commesso viaggiatore) si presentano molto sotto forma di "Perché non puoi semplicemente creare un programma che fa X?", E devi essere in grado di dare una spiegazione del perché è impossibile o impossibile nella vita residua dell'universo.

Si noti che è possibile progettare un linguaggio che non è completo di Turing, quindi può essere analizzato, vietando la ricorsione e l'iterazione illimitate.




8
è possibile progettare un linguaggio non completo di Turing : esempio di un linguaggio completo non di Turing utile: SQL (in realtà un SQL ridotto). La completezza di Turing aggiungerebbe automaticamente la non terminazione alla lingua, che è qualcosa che probabilmente non vuoi quando esegui una query db. (Anche se, temo che tutte le moderne implementazioni SQL offrano comunque completezza turing)
Bakuriu,

8
@FranciscoPresencia: hanno usato un gruppo di ricerca, quindi il punto generale vale ancora.
RemcoGerlich,

4
@MooingDuck: la cosa di Flickr non sceglie tra parchi e uccelli, (tenta di) confermare uno o entrambi. O, non XOR.
rickster,

45

È possibile utilizzare l'algoritmo che rileva se un elenco collegato esegue un loop per implementare la funzione Halting con complessità spaziale di O (1).

Per fare ciò, è necessario memorizzare almeno due copie dello stato parziale del programma in memoria, oltre al sovraccarico del programma di controllo. Quindi su un determinato computer, non è possibile testare tutti i programmi che possono essere eseguiti su quel computer, solo i programmi che vengono eseguiti su un computer più piccolo con meno della metà della memoria.

Il problema di arresto per un determinato computer di dimensioni finite non può essere risolto su quel computer di dimensioni finite. Può essere risolto solo su un computer più grande. (Questo vale per qualsiasi metodo, non solo per quello che proponi. Non ho intenzione di fornire una prova formale, ma ecco il punto. Se un computer C può eseguire N programmi diversi di cui almeno una P non termina , quindi un computer V in grado di verificare se questi N arresti di programma devono essere in grado di eseguire anche N programmi di verifica diversi. Se C e V sono lo stesso computer, allora P non è uno degli N programmi diversi che V esegue, quindi il il computer deve eseguire almeno N + 1 programmi diversi, il che contraddice l'assunto che C esegue N programmi diversi.)

M2M256

I numeri qui illustrano che pensare al computer come una macchina a stati finiti è raramente pratico. Il numero di stati può essere limitato, ma è sbalorditivo, poco pratico. L'unico modo per ragionare sui programmi non giocattolo è in astratto, non enumerando gli stati ma attraverso il ragionamento logico.

Quindi escludendo i programmi paradossali, il problema dell'arresto è decidibile

Il paradosso non deriva dal problema, ma dal tentativo di soluzione. Per ogni dato programma, esiste un algoritmo che dice "sì" se il programma termina e "no" se il programma non termina. È banale: print "yes"o lo print "no"farà o lo farà. Il problema è determinare quale chiamare. L'impossibilità di risolvere il problema di arresto significa che non esiste un algoritmo per effettuare questa determinazione. Il motivo per cui la dimostrazione utilizza un argomento di diagonalizzazione è che deve dimostrare che nola soluzione funziona; per fare ciò, parte da una soluzione presunta arbitraria e mostra che deve mancare alcuni programmi costruendo un programma mancato. La diagonalizzazione (quello che in modo inappropriato si chiama un "paradosso") sta nella costruzione, non nel programma risultante. I programmi risultanti non sono autoreferenziali.

C'è un risultato più generale chiamato teorema di Rice che afferma che qualsiasi proprietà non banaledei programmi è indecidibile - qualsiasi proprietà che dipende solo dal comportamento del programma e non nel modo specifico in cui è scritta (ad esempio, "il codice sorgente è composto da meno di 42 caratteri?" è chiaramente decidibile, mentre "c'è un programma il cui codice sorgente è composto da meno di 42 caratteri e che restituisce lo stesso risultato per tutti gli input? "non lo è, né" questo programma non genera mai qualcosa? "). L'arresto è solo un esempio. È importante perché si presenta spesso in pratica (di solito, vogliamo sapere se un programma restituirà un risultato in tempi ragionevoli date le risorse limitate del computer su cui è in esecuzione, ma poiché questo è raramente praticamente responsabile, siamo disposto ad accontentarsi della domanda più semplice se il programma alla fine terminerà dato il tempo e la memoria sufficienti).


2
Penserei che la domanda di "esiste un programma che produrrebbe lo stesso output di un determinato programma autonomo (nessun input ma il programma stesso), ma in meno tempo, incluso il tempo per caricare il programma ?" sarebbe decidibile, sebbene intrattabile, dal momento che la durata massima dei programmi candidati sarebbe limitata, come sarebbe il tempo di testare ciascuno di essi.
supercat

@supercat Sì, questa proprietà è decidibile. Non è decidibile per il caso generale di un programma che accetta input.
Gilles,

1
Ho avuto l'impressione che il problema di Halting presupponga in genere che tutto l'input che un programma riceverà nel corso della sua esecuzione sia in bundle con il programma. Se uno avesse una macchina in grado di risolvere magicamente il problema di interruzione per qualsiasi programma alimentato con una particolare sequenza di input, una macchina del genere potrebbe determinare se un programma si fermerebbe per tutti gli input di lunghezza limitata?
supercat

3
@supercat No, l' oracolo di stop-for-all-input sarebbe un passo avanti rispetto all'oracle di stop-for-a-input. Sarebbe una buona domanda per questo sito ... in effetti ce l'abbiamo . A proposito, il mio modello mentale predefinito sono funzioni ricorsive, in cui "input" significa "argomento" e l'esecuzione di un programma significa applicarlo a un argomento; hai ragione sul fatto che la mia affermazione è falsa in un contesto che riguarda le macchine Turing, lo aggiornerò.
Gilles,

28

Mi sembra che l'Halting Problem non sia altro che un cosiddetto "paradosso", una contraddizione autoreferenziale (per lo meno ciclica) allo stesso modo del paradosso del Bugiardo. L'unica conclusione che fa è che la funzione di interruzione è suscettibile a tali domande malformate

No, non è questo il problema di arresto. Paradossi come il paradosso del bugiardo non sono veri o falsi, semplicemente non hanno senso. Un algoritmo deterministico d'altra parte si fermerà per un dato input o funzionerà per sempre. La funzione halts(program, input)ha un valore deterministico perfettamente definito per ogni programma, per ogni input. Non possiamo deciderlo per nessun programma. O, più precisamente: non possiamo scrivere un programma che possa decidere per ogni coppia programma / input.

Σ(n):=nnnnΣ(n)


2
Vale la pena notare che nella forma comune il paradosso del bugiardo fa esplicito riferimento a se stesso, ma lo stesso problema può sorgere anche se non lo fa. La risposta all'istruzione si forma prendendo il testo: "La risposta all'istruzione si forma prendendo il testo e inserendo dopo la prima virgola una copia racchiusa tra virgolette, no?" e inserendo dopo la prima virgola una copia racchiusa tra virgolette singole, no? Tale affermazione non è esplicitamente autoreferenziale, ma si riferisce alla veridicità di un'affermazione che è identico carattere per carattere.
supercat

2
@supercat: huh, non credo di aver mai visto un quine in inglese prima ...
SamB,

@SamB: ne ho visti alcuni, ma ho deciso di cimentarmi in una formulazione originale che, sebbene più dettagliata di alcuni, legge (forse) in modo più naturale.
supercat

24

Non capisco perché l'Halting Problem sia così spesso usato per respingere la possibilità di determinare se un programma si interrompe. L'articolo di Wikipedia spiega correttamente che una macchina deterministica con memoria finita arresterà o ripeterà uno stato precedente. È possibile utilizzare l'algoritmo che rileva se un elenco collegato esegue un loop per implementare la funzione Halting con complessità spaziale di O (1).

Primo, sì, teoricamente ha senso vedere un vero computer, che ha una memoria finita, come una macchina a stati finiti. Ma in pratica il numero di stati di un computer reale è così grande che i computer reali sono modellati molto meglio dalle macchine di Turing o da altri modelli di calcolo a stati infiniti.

In secondo luogo, anche teoricamente ha senso vedere un computer moderno come una macchina a stati infiniti. Una macchina Turing non ha un nastro infinito, ha un nastro che può sempre essere esteso quando la macchina esaurisce la memoria. E non è esattamente quello che possiamo fare con i computer reali? (E se lo spazio degli indirizzi della CPU si esaurisce, possiamo usare il cloud, ecc.)

Mi sembra che l'Halting Problem non sia altro che un cosiddetto "paradosso", una contraddizione autoreferenziale (per lo meno ciclica) allo stesso modo del paradosso del Bugiardo. L'unica conclusione che fa è che la funzione di interruzione è suscettibile a tali domande malformate. Quindi escludendo i programmi paradossali, il problema dell'arresto è decidibile. Quindi perché lo riteniamo una prova del contrario?

HPxHPx

La prova di Turing dell'indecidibilità del problema di fermarsi usa un trucco simile al paradosso del bugiardo, sì. Un paradosso è spesso definito come un'apparente contraddizione, e alcune persone ne deducono che un paradosso non è quindi una vera contraddizione. Tuttavia, il paradosso di Russel (la controparte formale-teorica del paradosso del bugiardo) ha mostrato una vera contraddizione in matematica, e la prova dell'indecidibilità del problema di arresto usa una vera contraddizione per la sua prova di contraddizione.


1
+1 per spiegare la relazione tra computer reali, macchine a stati finiti e macchine di Turing che è una parte significativa della configurazione della domanda.
David Richerby,

1
Hai suscitato il mio interesse. Qual è la differenza tra un'apparente contraddizione e una vera contraddizione?
Brent,

Un altro modo per dirlo: in generale, la programmazione non presuppone risorse limitate. La maggior parte degli algoritmi che progettiamo o dei programmi che scriviamo non sono scritti per utilizzare una quantità limitata o addirittura fissa di risorse di elaborazione, a meno che non li progettiamo specificamente che modo (ad es. questo è spesso richiesto quando si programma per sistemi embedded).
reinierpost,

3
@ Brent. Molti paradossi non sono affatto contraddittori, ma solo a prima vista. Quando guardiamo più da vicino, si scopre che c'è un errore nel ragionamento, o qualche parola il cui significato è leggermente cambiato usandolo in un contesto diverso, o qualcosa di simile. A volte, tuttavia, un paradosso mette in luce una vera contraddizione.
Hoopje,

Ho studiato questo problema on e off dal mio PO. Il teorema di incompletezza di Gödel implica che è sempre possibile inventare un paradosso indipendentemente dal sistema di logica in uso?
Brent,

17

jmite ha risposto alla domanda molto bene. Vorrei aggiungere una piccola nota a margine sulla somiglianza percepita con il "Paradosso del bugiardo" che penso sia causato dal loro uso di un meccanismo di autoreferenzialità.

L'autoreferenzialità non è paradossale!

L'autoreferenzialità è uno strumento davvero utile nel calcolo (che un algoritmo può riferirsi al suo codice, riflessione ) e al linguaggio umano (che possiamo riferirci a noi stessi, all'autocoscienza ).

Il problema che causa il paradosso del bugiardo non è l'autoreferenzialità, sta cercando di usare il predicato della verità per un linguaggio (formale) all'interno del linguaggio. Causerà problemi anche senza autoreferenzialità, non abbiamo bisogno della capacità di usare l'autoreferenzialità per ottenere un paradosso: l'autoreferenzialità può essere eliminata! . Renderebbe la frase meno piacevole e concisa, ma non è difficile da fare. È essenzialmente come è dimostrato il teorema del punto fisso di Kleene . Ciò che il paradosso del bugiardo implica è che la verità delle affermazioni in una lingua (formale) è trascendente in quella lingua, non che l'autoreferenzialità sia problematica.


Mi sembra che il tuo disagio non sia dovuto alla indecidibilità del problema di arresto (per le macchine di Turing) ma con l'accettazione delle macchine di Turing come modello teorico per i computer. In genere (anche se non sempre) le macchine di Turing (e modelli equivalenti di calcolo come le macchine ad accesso casuale ) sono molto utili per la discussione del calcolo su computer reali rispetto agli automi finiti e ci sono buone ragioni per questo (tenere presente che una macchina di Turing non ha una quantità infinita di memoria, ha una quantità illimitata di memoria e queste sono cose diverse: illimitato significa che possiamo fornire alla macchina più memoria quando serve, non che usi una quantità infinita di memoria).

Certo, se vuoi pensare ai computer come automi finiti, e questo ha senso per il tuo scopo, allora il problema di arresto per automi finiti è decidibile (e per decidibile intendiamo decidibile con una macchina di Turing, non con automi finiti). Questo, tuttavia, non è ciò che le persone normalmente intendono quando usano il problema dell'arresto, significano il problema dell'arresto per le macchine di Turing.

s2s


14

il problema dell'arresto ha introdotto un nuovo concetto matematico di "indecidibilità" che in precedenza non esisteva in matematica. era una prova ("apparentemente paradossale") che alcuni problemi non hanno "prove". è collegato al concetto godeliano di improvabilità. Il teorema di Godels ha preceduto di alcuni anni l'interruzione della formulazione del problema da parte di Turing. Il risultato di Godels era considerato piuttosto astratto all'epoca ed era noto solo a ricercatori e specialisti. La formulazione di Turings ha mostrato che il principio di indecidibilità era correlato a questioni altamente pratiche / pragmatiche / applicate nell'informatica come determinare se i programmi arbitrari si fermano ed è considerato un concetto molto meno teorico, si presenta in sfide moderne come " (una sfida se i computer possono scoprire teoremi) e provare la fine del programma.

un altro aspetto interessante è che ci sono alcuni problemi molto vecchi nella teoria dei numeri (diottantina) originati dai Greci che non sono stati dimostrati per millenni. c'è un risultato correlato che le domande generali sulle equazioni di Dihanthant sono indecidibili chiamate decimo problema / teorema di Hilberts . Hilbert visse all'inizio del XX secolo e propose come programma di ricerca che la matematica potesse trovare approcci sistematici ai problemi di matematica. questa sfida / piano fu seriamente colpita dalla scoperta dell'indecidibilità di qualche decennio dopo. l'indecidibilità continua ad essere un'area di ricerca molto avanzata e il confine tra problemi indecidibili e decidibili sarà probabilmente sempre oggetto di ulteriori studi e analisi.


14

Sembri confondere la classica prova "autoreferenziale" basata sul fatto che il problema di Halting non può essere risolto con il problema di Halting (aka Halt) stesso.

Quel programma autoreferenziale - il programma che si ferma se e solo se non si ferma - è costruito per rendere facile dimostrare che non è possibile risolvere Halt. Il fatto che dimostriamo che X è impossibile con la tecnica Y non implica che Y sia l'unica ragione per cui non possiamo risolvere X.

Per dirla in un altro modo, non solo non possiamo risolvere Halt, ma non possiamo rilevare che un programma sia il tipo di programma che non possiamo determinare se si interrompe, a parte una misura grezza come "se l'esecuzione richiede più di 1 minuto, fingere non si ferma ".

Se inizi dal problema di Halting e riduci altri problemi, alla fine raggiungi il punto in cui hai ridotto quasi tutte le domande sui programmi al riguardo. Finiamo con il teorema di Rice:

Sia S una proprietà non banale di 1 cosa accetta una macchina di Turing. Ciò significa che esiste almeno una macchina di Turing che accetta input con la proprietà S e una che non lo fa.

Quindi è indecidibile se un dato Turing Machine T accetta input con la proprietà S.

Vuoi sapere se una macchina di Turing accetta numeri interi pari? Indecidibile.

Vuoi sapere se una macchina di Turing accetta accetta sequenze aritmetiche? Indecidibile.

Puoi ragionare sull'intestino di Turing Machine in generale. Puoi ragionare su una particolare Turing Machine e provare se si fermerà / accetterà una sequenza / ecc. Ma non puoi sapere se la tua tecnica funzionerà con la prossima Turing Machine che la nutri.


1 Con property ofesso non include il meccanismo di come è accettato - solo di ciò che è accettato. "Accetta in 100 o meno passaggi" è una proprietà che accetta, non di ciò che è accettato.


Potresti voler spiegare cos'è una "proprietà", poiché l'interpretazione ingenua che si potrebbe fare sarà probabilmente errata.
Rick Decker,

@rick Penso che la nota a piè di pagina lo copra ora?
Yakk,

7

Hai ragione sul fatto che il problema dell'arresto, come comunemente introdotto e dichiarato, è un semplice gotcha. Ciò non dimostra che non ci possa essere una funzione di arresto a tre valori ("si ferma", "loop", "non so") che in pratica restituisce sempre "si ferma" o "loop" e restituisce solo "don" non so "per esempio casi angolari appositamente costruiti.

Due motivi per cui il problema dell'arresto è significativo:

1) Questo è uno dei primi problemi dimostrabili indecidibili. Anche se ipoteticamente esistesse un solo "non so", sarebbe comunque di enorme interesse matematico.

2) Alcuni problemi si riducono al problema di arresto in cui un malintenzionato malintenzionato può fornire il caso da analizzare. Questo ci obbliga ad accettare che potrebbero esserci casi validi che dobbiamo ancora respingere.

Come ripensamento al secondo punto, l'analisi del software è un problema difficile, sebbene siano stati compiuti molti progressi sia nell'analisi che nella progettazione del linguaggio in modo da facilitare l'analisi. Se puoi dimostrare che un determinato compito è simile all'analisi del software, sì, è difficile con la maiuscola H. "È impossibile perché equivarrebbe a risolvere il problema di arresto", sebbene tecnicamente sbagliato o irrilevante in molti casi, viene spesso utilizzato un stenografia per questa osservazione.


5

C'è una tesi contraria avanzata da Eric Hehner in una serie di articoli che sostengono che l'insolvibilità del problema di Halting è comunemente fraintesa. Gli articoli "Epimenides, Gödel, Turing: un eterno groviglio d'oro", "Problemi con il problema dell'arresto", "Ricostruzione del problema dell'arresto" e "Problema dell'arresto", sono disponibili qui . Affinché questa risposta non sia "solo link", cercherò di riassumere una delle sue conclusioni, ma non l'argomento.

f(0)=1f(0)=2hh(M)MHhh


3
Non seguo La funzione di arresto è un predicato perfettamente ben definito e valido - per ogni data macchina di Turing e qualsiasi dato input, la macchina si ferma o si avvolge. (Ti manca un riferimento adeguato; quale papar stai riassumendo?)
Raffaello

@Raphael Il fatto che la funzione sia ben definita è generalmente accettato come un dato di fatto. Il punto di vista di Hehner è diverso ed è spiegato nei suoi articoli. Modificherò la mia risposta per fornire i nomi dei documenti.
Theodore Norvell,

Diciamo solo che tutto ciò che l'argomento di Hehner è [non ho letto i giornali] che si è rivelato controverso, almeno nella loro prima lettura / approssimazione: ' cs.toronto.edu/~hehner/Shallitaffair.pdf e recursed.blogspot.com/ 2013/10 / eric-hehner-replies.html
Fizz,

E non è chiaro data la natura e il numero di citazioni che gli articoli di Hehner (su questo) hanno che eventuali letture aggiuntive (delle sue opere su questo) valgono la seccatura.
Fizz,

Le sue prove sembrano molto solide e indicano che si tratta solo di ripassare le cose sciocche che puoi fare in filosofia come cercare di analizzare la seguente affermazione autoreferenziale per la sua veridicità: "Questa frase è falsa". il che, se vero, significa che è falso, il che significa che in realtà era vero, no, che lo rende nuovamente falso ... quindi questa sembra una domanda filosofica non così importante sullo sguardo navale. en.wikipedia.org/wiki/Liar_paradox il paradosso fermante può essere un caso di scienziati che non parlano con i filosofi.
James Wakefield,

3

Vorrei offrire una spiegazione diversa dell'importanza dell'arresto del problema che coinvolge le persone piuttosto che le macchine.

È l'ultima lezione del corso di interpretazione e interpretazione del MIT 1986 ; il professore chiede "Ci sono domande?" e si prepara a terminare la lezione, quando uno degli studenti chiede: "È questa l'ultima domanda?"

Pensaci un momento. Come può l'insegnante rispondere a questa domanda? Se lo studente decide di contraddire l'insegnante, non c'è una risposta valida che l'insegnante possa dare - questo è proprio come l'arresto del problema.

Siamo abituati a pensare astrattamente al problema dell'arresto, usando funzioni e macchine, ma è molto più profondo di così. Fondamentalmente, significa che ci sono domande perfettamente valide a cui non è possibile rispondere.

PS: Se non sai di quale corso sto parlando, vai a guardarlo, è fantastico.


Ma se lo eseguissi doesHalt(programCode, input);, il programma non può sapere cosa doesHaltrestituisce la funzione. È impossibile che il programma si interrompa dopo che la doesHaltfunzione lo ha valutato.
Tvde1,

0

Posso facilmente scrivere un programma che ha dato un input n, o emette il primo p> n più piccolo in modo tale che p + 2 sia anche un primo, oppure funziona per sempre se non esiste tale p. Se riesci a risolvere il problema per prevedere se il mio programma si interrompe per ogni input, hai appena risolto la congettura di Twin Prime.

È del tutto possibile che questa congettura possa rivelarsi indecidibile, nel qual caso avremmo un programma semplice in cui il programma di interruzione fallisce.


Penso che stai mescolando "Turing-indecidable" con una nozione molto diversa; in effetti, potresti esserti imbattuto per caso nello "stesso vecchio" errore. Vedi anche qui e qui .
Raffaello
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.