Il problema di arresto è decidibile per i programmi puri su un computer ideale?


25

È abbastanza semplice capire perché il problema dell'arresto è indecidibile per i programmi impuri (cioè quelli che hanno I / O e / o stati dipendenti dallo stato macchina-globale); ma intuitivamente, sembra che l'arresto di un programma puro su un computer ideale sia determinabile, ad esempio, dall'analisi statica.

È davvero così? In caso contrario, quali sono alcuni controesempi o documenti che smentiscono questa affermazione?


35
Si noti che le prove standard che il problema di arresto è indecidibile (come quello descritto su wikipedia: en.wikipedia.org/wiki/Halting_problem#Sketch_of_proof ) funzionano tutti con modelli di calcolo che non tentano nemmeno di rappresentare l'I / O. E mentre ad esempio le macchine di Turing sono stateful, il loro comportamento è definito formalmente in termini di funzioni pure. Quindi, in un certo senso, "programmi puri su un computer ideale" è in realtà l'impostazione in cui il problema di arresto di solito si rivela indecidibile.
Ben,

1
Che ricerca hai fatto? Googling "Halting problem" avrebbe già dovuto rispondere a questa domanda per te.
Jonathan Cast

Risposte:


38

Ecco una prova di indecidibilità per riduzione dal problema di Halting.

Riduzione: data una macchina e un input , costruisci una nuova Turing Machine che non legge alcun input, ma scrive e sul nastro e simula su fino a quando ferma.x H M x M x MMxHMxMxM

Il comportamento di questa nuova macchina è indipendente dal nastro di input, quindi è una macchina di Turing pura su cui è applicabile solo l'analisi statica. Se l'analisi statica fosse sufficiente, allora potrebbe mostrare se ferma, il che mostrerebbe se ferma su , che risolverebbe il problema di arresto per macchine impure, che sappiamo essere indecidibile, e quindi anche il tuo problema è indecidibile.HM xHMx



@HendrikJan Precisely!
Lieuwe Vinkhuijzen,

16

No, non lo è e inoltre non dipende dall'I / O.

Semplice controesempio: scrivere un programma per trovare un numero dispari perfetto (questo è un problema aperto: non sappiamo ancora se ne esiste uno) - non accetta alcun input e non esegue attività impure ; può fermarsi quando ne trova uno o può funzionare all'infinito (nel caso in cui un tale numero non esista). Ora, se l'analisi statica fosse abbastanza potente da determinare il caso di interruzione, verrebbe utilizzata per rispondere a questa (e molte altre domande) in cui l'interruzione significherebbe l'esistenza positiva di un tale numero e non l'interruzione significherebbe che non esiste tale numero, ma purtroppo l'analisi statica non è così potente.


18
Non vedo davvero il punto in questa risposta. Solo perché al momento non sappiamo se un tale numero esiste non implica che non lo sia, né che in futuro non potremmo scrivere un analizzatore statico in grado di decidere. Un'alternativa migliore è utilizzare alcuni noti problemi indecidibili. Ad esempio, è noto che non esiste un programma in grado di risolvere tutte le equazioni diottantine e che risolvere tale equazione sia un compito simile a quello mostrato nella risposta.
Bakuriu,

2
Bene, se il problema di Halting fosse decidibile, allora ogni problema sarebbe decidibile se potessimo metterlo in una forma in cui chiediamo se un programma si interrompe o meno. O qualsiasi domanda del modulo: esiste un insieme numerabile e posso decidere se un singolo elemento potenziale è nell'insieme o no. Il set è vuoto? Le equazioni diottantine hanno una serie numerabile di soluzioni potenziali e posso verificare se ogni singola soluzione potenziale è una soluzione o meno. Se il problema di Halting fosse decidibile, le equazioni di Dihanthant sarebbero decidibili.
gnasher729,

10
@ gnasher729 Sì, e poiché non sono il problema Halting è indecidibile. Questo è il mio punto. Mentre l'affermazione in questa risposta non ha implicazioni reali: "Considera questa definizione matematica. Attualmente non abbiamo idea se un programma che decide questo si fermerà o no, ma domani un ragazzo potrebbe scoprire che lo fa o no e questa risposta diventa 100 % insignificante ".
Bakuriu,

6
Non è questo un caso simile a Come può essere decidibile se π ha una sequenza di cifre? , il problema dell'arresto è indecidibile su classi di problemi, non su singoli problemi.
npostavs,

2

La classica dimostrazione della diagonalizzazione è una macchina pura , non solo è una macchina di Turing pura, ma non si basa su "Problemi aperti".

Ad esempio, una macchina di Turing che esegue la congettura di Collatz ha uno stato di arresto sconosciuto, ma che si basa sulla nostra ignoranza sulla congettura di Collatz, un giorno potremmo dimostrare che Collatz aveva ragione e quindi saremmo in grado di decidere lo stato Halting della congettura (O per alcuni ingressi non si ferma, o si ferma sempre).

Quindi la congettura di Collatz potrebbe già rispondere alla tua domanda (almeno temporaneamente), ma si basa su qualcosa che non conosciamo . Invece la dimostrazione classica è un problema risolto: sappiamo già che è indecifrabile .


0

Per la cronaca, la prova standard dell'indecifrabilità del problema di arresto si basa sulla stessa idea di quines: che è possibile scrivere un programma di cui un sotto-termine restituisce il codice sorgente per l'intero programma. Quindi, se ci fosse una funzione haltsche, dato il codice sorgente per un programma, restituisce True se quel programma si interrompe su tutti gli input e False altrimenti, questo sarebbe un programma legale:

prog() = if halts "prog" then prog() else ()

dove "prog"sarebbe qualche espressione valutata per il codice sorgente per prog; tuttavia, puoi vedere rapidamente che si progferma (per tutti gli input) se non si ferma, il che è una contraddizione. Nulla in questa prova si basa in alcun modo sull'I / O (è necessario l'I / O per scrivere un quine?).

A proposito, potresti voler esaminare "I / O basato sul dialogo" per ulteriori prove del fatto che l'I / O è del tutto irrilevante per il tuo problema (in pratica, i programmi che eseguono I / O possono essere ridotti a programmi che accettano input come (espliciti) argomenti funzionali e restituiscono output come (espliciti) risultati aggiuntivi in ​​un linguaggio pigro). Sfortunatamente, non riesco a trovare una pagina ragionevole, non distorta (o pro-dialog) sul web in questo momento.

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.