Cosa sappiamo delle versioni limitate del problema di arresto


16

( AGGIORNAMENTO : qui viene posta una domanda meglio formata poiché i commenti per la risposta accettata di seguito mostrano che questa domanda non è ben definita)


La classica dimostrazione dell'impossibilità del problema di arresto dipende dalla dimostrazione di una contraddizione quando si tenta di applicare l'algoritmo di rilevamento dell'arresto a se stesso come input. Vedi lo sfondo di seguito per ulteriori informazioni.

La contraddizione dimostrata si applica a causa di un paradosso autoreferenziale (come la frase "Questa frase non è vera"). Ma se severamente vietassimo tali autoreferenze (ovvero accettassimo il fatto che tali autoreferenze non siano decidibili a fermarsi), quale risultato ci rimane? Il problema di arresto per il restante set di macchine non autoreferenziali è decidibile o meno?

Le domande sono:

Se consideriamo un sottoinsieme di tutte le possibili macchine di Turing, che non sono autoreferenziali (cioè non le considerano come input), cosa sappiamo del problema di arresto per questo sottoinsieme?

AGGIORNARE

Forse una migliore riformulazione di ciò che sto cercando è una migliore comprensione di ciò che definisce un insieme decidibile. Stavo cercando di isolare la classica prova di indecidibilità perché non aggiunge alcuna informazione sull'indecidibilità, tranne per i casi in cui esegui HALT su se stesso.

Sfondo: supponendo che vi sia una contraddizione che esiste una macchina di Turing che può decidere sull'ingresso M che è una codifica per una macchina di Turing e X , anche se M ( X ) si ferma. Quindi considera una macchina di Turing K che prende M e X e usa Q per decidere se M ( X ) si ferma o meno, quindi fa il contrario, ovvero K si ferma se M ( X ) non si ferma e non si ferma se M ( X )QMXM(X)KMXQM(X)KM(X)M(X)fermate. Quindi mostra una contraddizione, poiché K dovrebbe fermarsi se non si ferma e non si ferma quando si ferma.K(K)K

Motivazione: un collega sta lavorando alla verifica formale dei sistemi software (specialmente quando il sistema è già stato provato a livello di codice sorgente e vogliamo riprovarlo per la sua versione compilata, per neutralizzare i problemi del compilatore), e nel suo caso si preoccupa di un serie speciale di programmi di controllo integrati per i quali sappiamo per certo che non si riferiranno da soli. Un aspetto della verifica che vuole effettuare è se è garantito che il programma compilato si fermerà se si dimostra che il codice sorgente di input termina.

AGGIORNARE

Sulla base dei commenti che seguono chiarisco il significato delle macchine di Turing non autoreferenziali.

L'obiettivo è definirlo come l'insieme che non porta alla contraddizione posta nella dimostrazione (cfr. "Sfondo" sopra). Potrebbe essere definito come segue:

Supponendo che vi sia una macchina di Turing che decide il problema di arresto per un set di macchina di Turing S , allora S non è autoreferenziale rispetto a Q se esclude tutte le macchine che invocano Q su S (direttamente o indirettamente). (Chiaramente ciò significa che Q non può essere un membro di S. )QSSQQSQS

Per chiarire cosa si intende invocando su S indirettamente:QS

Invocare su S è indicato da una macchina di Turing Q con un insieme di stati e un certo possibile input iniziale sul nastro (corrispondente a qualsiasi membro di S ), con la testa inizialmente all'inizio di quell'ingresso. Una macchina W invoca Q su S "indirettamente" se esiste una sequenza (finita) di passi che W prenderebbe per rendere la sua configurazione "omomorfa" alla configurazione iniziale di Q ( S ) .QSQSWQSWQ(S)

AGGIORNAMENTO 2

Da una risposta che segue sostenendo che ci sono infinitamente molte macchine di Turing che fanno lo stesso compito, e quindi non è univoco, cambiamo la definizione sopra dicendo dicendo che Q non è una singola macchina di Turing, ma l'insieme (infinito) di tutte le macchine che calcolano la stessa funzione (HALT), in cui HALT è la funzione che decide in che modo una macchina di Turing si ferma su un particolare input.QQ

AGGIORNAMENTO 3

La definizione di omomorfismo di Turing Machine:

Una TM A è omomorfa alla TM B se il grafico di transizione di A è omomorfo a quello di B, nel senso standard degli omomorfismi dei grafici con nodi E bordi etichettati. Un grafico di transizione (V, E) di una TM è tale che V = stati, E = archi di transizione tra stati. Ogni arco è etichettato con (S, W, D), S = simbolo letto dal nastro e W = il simbolo da scrivere su di esso, e D = la direzione verso cui si sposta la testa.


5
"il restante insieme di non autoreferenzialità" Prima di poter discutere sensatamente di questo insieme, vorrei una definizione di "autoreferenzialità". Tuttavia, penso che sarà una cosa difficile da definire?
Sam Nead,

1
Esistono studi su programmi che arrestano in modo dimostrabile (questa classe non include tutti i programmi di arresto). Fondamentalmente sono una coppia di un programma e una prova che si ferma. Ad esempio, se non sbaglio, Agda consente solo programmi che si fermano. Penso che le persone che lavorano sulla logica e sui linguaggi di programmazione abbiano altro da dire su questo.
Tsuyoshi Ito,

1
@M. Alaggan. Ora vorrei una definizione di "invoca indirettamente su S ", che sospetto sia difficile da definire come l'originale "autoreferenzialità" :)QS
Rob Simmons,

2
Ciò solleva una domanda interessante: tutte le prove di incomputabilità (indecidibilità) sono riconducibili al metodo di diagonalizzazione di Cantor? Esistono prove di indecidibilità che non si basano direttamente o indirettamente sul metodo di diagonalizzazione?
Mohammad Al-Turkistany,

Risposte:


9

Penso che ci vorrà un po 'più di lavoro per arrivare a una domanda "ben definita". In particolare, questo è problematico:

Invocare Q su S è indicato da una macchina di Turing Q con un insieme di stati e un certo possibile input iniziale sul nastro (corrispondente a qualsiasi membro di S), con la testa inizialmente all'inizio di quell'ingresso. Una macchina W invoca Q su S "indirettamente" se esiste una sequenza (finita) di passi che W prenderebbe per rendere la sua configurazione "omomorfa" alla configurazione iniziale di Q (S).

Un problema è che ci sono infinite macchine Turing che calcolano la stessa funzione. Nell'argomento standard sulla diagonalizzazione, posso semplicemente sostituire la subroutine Q con un altro decisore per HALT, poiché ce ne sono infiniti. O una funzione che è calcolabilmente equivalente a HALT. Quindi non mi è del tutto chiaro come definire la tua nozione di "invocazione indiretta".

Una domanda diversa potrebbe essere: per quali serie di macchine Turing è determinabile il problema dell'arresto? Qui ci sono molte risposte: TM limitate alle risorse (ad es. Utilizzare solo f (n) spazio, dove f è una funzione calcolabile specifica), TM che sono limitate operativamente in qualche modo particolare (ad es. La testina di lettura si sposta solo in una direzione), ecc. Ma un'altra domanda interessante è se l'appartenenza a quell'insieme limitato è decidibile o se devi limitarti ai "problemi di promessa", dove garantisci solo una risposta corretta su alcuni sottogruppi di input "promessi", ma non verifica appartenenza.


QH

Non è così semplice. La tua definizione è paradossale ora, poiché stai cercando un HALT calcolabile. Ma se questo è calcolabile, qualsiasi funzione calcolabile è calcolabile in modo equivalente ad essa. Ma se il tuo set di input contenesse problemi semi-calcolabili (TM), avresti una contraddizione dal momento che decidere il problema di arresto per tale TM ti darebbe una procedura decisionale per quel problema.
Mark Reitblatt,

1) Un HALT indiscutibile non significherebbe indecidibilità? Pensavo che esistesse un HALT così calcolabile, sperando in una contraddizione. 2) Non ho familiarità con il concetto che tutte le funzioni calcolabili sono calcolabili equivalenti tra loro, ti stavo citando e intendo che è una funzione che risolve il problema HALT. Apparentemente λx.1 è calcolabile ma non decide HALT. Correggimi se sbaglio, per favore. Per quanto riguarda i problemi semi-calcolabili, HALT può compiere un numero infinito di passaggi, il che non porterebbe comunque a una contraddizione nella prova originale secondo cui HALT non è decidibile.
M. Alaggan

1) Giusto. Ma il problema sta cercando di definire la tua nozione di "non autoreferenzialità". O è una restrizione debole, che consente la diagonalizzazione come ho sostenuto, o è una restrizione forte che elimina tutto. 2) è semplice. "Computabilmente equivalente" significa approssimativamente che esiste una mappatura calcolabile dall'una all'altra che conserva le risposte. Ma se riesco a calcolare una risposta, posso imbrogliare e rendere banale la mappatura. 3) Se il TM che decide HALT non termina da solo, non è un decisore per HALT.
Mark Reitblatt,

Qualcos'altro che è un po 'confuso è la conflazione di TM con il problema decisionale calcolato da loro. Non è normale parlare di una TM equivalente dal punto di vista computazionale. Piuttosto, le funzioni calcolate da loro possono essere equivalenti (o uguali). Il problema è che cercare di dire che una TM non simula un'altra TM è difficile da definire in generale, senza dare qualcosa di concreto per separare le funzioni calcolate da loro. Ad esempio, una Log-space TM non può simulare una TM risolvendo un problema di spazio EXP.
Mark Reitblatt,

9

Se capisco correttamente la tua motivazione, sembra che questo sia un problema di "correttezza del compilatore" più che un problema di "problema di arresto limitato". Hai una proprietà (terminazione) che hai provato per qualche programma a livello di sorgente Prog che vuoi estendere al codice compilato per ottenere la stessa proprietà di compilato (Prog) . Ma il compilatore può (in generale) fare cose arbitrariamente sciocche come implementare un runtime completo turing (diciamo la JVM), compilare il programma di terminazione in un bytecode JVM e quindi scaricare un eseguibile che avvia la JVM e lo alimenta con il bytecode compilato.

In pratica è probabilmente del tutto possibile utilizzare le conoscenze implicite che hai su come funziona il tuo compilatore per implementare una procedura di verifica che praticamente dimostra che i programmi compilati sono corretti dati i programmi sorgente corretti (in effetti, molti strumenti di verifica automatica per i programmi stanno utilizzando la conoscenza implicita del "compilatore" algoritmo-codice nel cervello dei programmatori). Tuttavia, in generale probabilmente stai esaminando un problema di correttezza del compilatore. A quanto ho capito, ci sono due modi classici per farlo.

Un'opzione è quella di avere un compilatore che accetta come input il programma Prog e la prova termina (Prog) e le uscite compilate (Prog) e termina (compilata (Prog)) - quest'ultima è una prova che può quindi essere ricontrollata indipendentemente da il compilatore. L'articolo classico su questo è Necula e Lee's La progettazione e l'implementazione di un compilatore di certificazione , credo.

In alternativa, puoi provare un fatto sulla funzione compiles () - che ogni volta che compiles () fornisce un input finale produce un output finale. Un'introduzione accessibile a questo modo di pensare alla correttezza del compilatore è l'articolo CACM di Xavier Leroy, Verifica formale di un compilatore realistico .

(PS Spero che questa risposta sia utile - Riconosco che è un po 'divergente dalla domanda che mi hai posto, quindi fammi sapere se sono fuori base e / o ripetendo qualcosa che già conosci.)


Grazie per la magnifica risposta. Questo sarebbe sicuramente utile per il mio collega. Tuttavia (indipendentemente dal mio collega) sono più interessato alle implicazioni teoriche sulla prova del problema dell'arresto, che se ci liberassimo del caso che mostrava la contraddizione, che altro sappiamo della decidibilità del problema dell'arresto?
M. Alaggan,
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.