Arrestare il problema - un problema che mi dà fastidio


8

Per quanto ne sappia, l'arresto del problema chiede se esiste un programma che decide se un programma viene testato, dati alcuni dati di input (non importa quale programma sia, o quali dati di input che forniamo) verrà chiuso o meno. La risposta a questo problema è "no". In altre parole, non esiste un programma "singolo" in grado di verificarlo per tutte le coppie possibili (alcuni algoritmi, alcuni dati di input).

Ma ciò non significa che non possiamo decidere se un determinato programma X verrà chiuso o meno.

Non posso ancora commentare altre risposte, ma una di queste ha attirato la mia attenzione:

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

Forse puoi dirmi cosa voleva dire quella persona? Nel mio scenario, il mio capo ignorante può chiedermi di verificare (effettivamente, dimostrare o confutare) se il mio programma (che è un programma particolare) verrà chiuso o meno. E ovviamente ci sono coppie (algoritmo, dati di input) che possono essere dimostrati terminare (o mai terminare).

La domanda è: posso provarlo separatamente per ciascuna di queste coppie (programma, dati di input)? Anche se la risposta è sì, allora c'è un problema: possono esserci infiniti "dati di input". Quindi è del tutto naturale chiedersi: posso provare, per ogni algoritmo, che questo algoritmo terminerà (o viceversa), indipendentemente dai dati di input forniti?


Sia che siamo in grado di trovare tutte queste prove è una questione di logica, credo, ma ci sono certamente molti che non abbiamo ancora trovato .
Raffaello

il problema di arresto è definito come un algoritmo specifico che può determinare se un programma si arresterà o meno. È possibile verificare se un programma specifico (o anche più programmi specifici) con algoritmi diversi è in grado di arrestare o meno (il caso generale non lo è)
Nikos M.

Risposte:


6

No, non puoi provarlo per ogni algoritmo (macchina di Turing). Questo diventa una domanda sulla natura delle prove piuttosto che una domanda sul calcolo.

Prendi in considerazione la seguente macchina di Turing : controlla se esiste una prova per l'istruzione halts, of length(per una spiegazione sull'auto-riferimento, vedere il teorema della ricorsione di Klenee). Se viene trovata tale prova, entra in un ciclo infinito (altrimenti fermati).M(x)xM(x)|x|

Chiaramente non puoi provare ferma per tutte le , poiché se riesci a trovare una prova della lunghezza , non si fermerà per tutti gli input di dimensione . Inoltre, non puoi dimostrare che non si ferma per alcuni , poiché ciò significherebbe che esiste una prova per l'arresto di su tutti gli input (contraddizione). La situazione qui è che se il nostro sistema assioma è coerente, allora ferma per tutte le , ma non puoi dimostrarlo (nel senso che puoi dimostrare nella tua teoria che se è coerente alloraM(x)xppM(x)xMM(x)xTTxM(x) si interrompe, ma non è possibile dimostrare che si arresta senza questo presupposto, a meno che il sistema non sia incoerente).


Questa è la risposta a "posso dimostrare, per ogni algoritmo, che questo algoritmo terminerà (o viceversa), indipendentemente dai dati di input forniti?" - giusto per essere sicuri.
user4205580,

Sì. Hai bisogno di più personaggi
Ariel,

Potresti anche essere interessato ai risultati di incompletezza di Godel : fondamentalmente, in qualsiasi sistema logico che è abbastanza potente da parlare di aritmetica, ci sono affermazioni che sono vere che non possono essere provate.
jmite,

M - turing machine, - il suo input. Quindi lo eseguiamo con, diciamo, . Il programma si traduce in "controlla se esiste una prova per l'affermazione: per tutte le M (2) fermate, di lunghezza ..." Non ha molto senso dirlo per tutte e . O forse non è il modo in cui dovrei guardarlo. xx=2222
user4205580,

La variabile quantificata è nuova, pensaci mentre si ferma . (input) appare solo come limite sulla lunghezza della prova. yM(y)x
Ariel,

2

Per un programma specifico, sono sicuro di poter provare che il programma si fermerà su tutti gli input: il mio programma ha "halt" come prima istruzione.

Un altro esempio: posso avere un programma specifico che è un simulatore della macchina di Turing (cioè una macchina di Turing universale). Interpreta il suo input come una descrizione di una macchina Turing e il simulatore simula la macchina in esecuzione su un nastro vuoto. Quindi il simulatore si arresterà se la macchina in ingresso si arresta e funzionerà per sempre se la macchina in ingresso funziona per sempre. (Se l'ingresso non è nel formato corretto per descrivere una macchina di Turing, il simulatore si arresta.)

Sappiamo che è impossibile decidere se una macchina Turing arbitraria si arresta quando viene avviata su un nastro vuoto. Quindi, per il mio specifico simulatore di macchina, non esiste un algoritmo per decidere cosa fa sull'input arbitrario.

Non so se questi due esempi siano d'aiuto.

Sicuramente in molti settori problematici è ragionevole essere in grado di dimostrare che programmi specifici terminano. Se il mio programma moltiplica due matrici, mi aspetterei di essere in grado di dimostrare che non c'è modo di continuare per sempre.


2

Posso almeno chiarire l'ipotetica domanda che si presume ponga il capo immaginario che porta a questa risposta:

Puoi progettare un programma che accetta questo altro programma / modello / query del database / ecc. Che determina sempre se termina / solleva un'eccezione / esaurisce la memoria?

Il punto della prova di impossibilità è che tale compito non può essere realizzato. Naturalmente è risaputo oggi che un simile compito può essere approssimato abbastanza bene, cioè è possibile fornire un algoritmo che determina se un programma genererà un'eccezione, ma a volte risponde "potrebbe sollevare un'eccezione" anche se il programma non lo fa in pratica .

Alcuni di questi sono anche più difficili da fare in pratica, ad esempio la terminazione è molto più difficile da dimostrare dell'assenza di un'eccezione puntatore nullo per i "programmi del mondo reale" (ma equivalente in teoria).

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.