Quali sono gli esempi più semplici di programmi che non sappiamo se terminano?


27

Il problema di arresto indica che non esiste un algoritmo che determinerà se un determinato programma si arresta. Di conseguenza, dovrebbero esserci programmi sui quali non possiamo dire se terminano o meno. Quali sono gli esempi più semplici (più piccoli) conosciuti di tali programmi?


Stai contraddicendo nelle tue risposte ..... Grazie! Ma l'arresto del programma presuppone la conoscenza della fonte. ... Se questo è vero, hai risposto alla tua domanda. Il programma di arresto lo saprebbe già. Immagina un sistema che controlla un segno, è sempre illuminato e lampeggiante, quando si spegne? Interruzione di corrente, interruttore di alimentazione o durante la sequenza flash. O dato un backup della batteria e un generatore, mai.
htm11h,


Aggiungerei che il problema dell'arresto è solo un problema se non si pone un limite superiore di tempistica. Sicuramente non c'è differenza nella pratica tra ottenere una risposta troppo tardi per essere di qualche utilità e non ottenere mai una risposta. Puoi chiedere se un programma restituirà una risposta in una serie di passaggi, come una definizione di correttezza in tempo reale. Se non puoi garantire una risposta tempestiva, allora hai semplicemente un programma privo di garanzia di correttezza.
Rob,

1
@Rob In realtà non è vero. Se non sai se una macchina si fermerà, puoi aspettare indefinitamente per vedere se si ferma; dopo un millennio, non saprai ancora se si fermerà, diciamo, il giorno successivo.
Kyle Strand,

@KyleStrand Sono d'accordo con te. Ma sto anche dicendo che in pratica è una questione totalmente esagerata, perché tutti i calcoli realistici sono soggetti a scadenze (da millisecondi a mesi). Se hai bisogno di una risposta in 5 secondi perché sia ​​utile, l'unica cosa che conta è se puoi garantire una risposta in 5 secondi. Supponiamo che tu possa garantire una risposta dato un tempo indeterminato per il calcolo. Sarebbe una garanzia inutile.
Rob

Risposte:


41

Un esempio piuttosto semplice potrebbe essere un programma che verifica la congettura di Collatz :

f(n)={HALT,if n is 1f(n/2),if n is evenf(3n+1),if n is odd

È noto che si fermi per n fino a almeno 5×2605,764×1018 , ma in generale è un problema aperto.


9
Per sottolineare il mio punto dal commento sotto la domanda: il problema " ferma per tutto n ?" è calcolabile . f(n)n
Raffaello

6
@KyleStrand Vedi qui .
Raffaello

10
@KyleStrand, Raphael ha ragione al 100%. Questo è un malinteso comune. Devi rintracciare ciò che la definizione dice con molta attenzione, e quindi potresti scoprire che la tua intuizione non corrisponde perfettamente alla definizione. Secondo la definizione di calcolabilità, è sufficiente che esista una macchina di Turing per calcolarla - non importa se sappiamo cos'è quella macchina di Turing. All'inizio vedendo questo molti studenti pensano che sia un imbroglio, ma non lo è - questa è solo una conseguenza della definizione.
DW

2
@KyleStrand Devi sbarazzarti dell'idea che il programma deve risolvere il problema . Non è così. Deve solo generare la risposta, che è un compito banale. Algoritmicamente, i problemi con insiemi finiti di istanze sono tutti noiosi poiché possiamo codificare le risposte. (E anche se noi non conosciamo le risposte, sappiamo ancora che c'è un algoritmo corretto.) In generale, quando dimostrando che non v'è alcun algoritmo per qualcosa, non si arriva a fare qualsiasi ipotesi su come sta andando opera. La nostra mancanza di immaginazione non fornisce una prova.
Raffaello

2
@KyleStrand Afaik, io uso la definizione standard di calcolabilità come viene insegnata oggi (e, afaik, è stata per decenni). Ti consiglio di assorbire le risposte e il materiale collegato e di capire dove hai sbagliato. Non ha senso per me e gli altri ripetere le stesse cose ancora e ancora. Un altro tentativo: la definizione di calcolabilità è intrinsecamente esistenziale, non costruttiva. Finché pensate all'interno dei regni della logica classica, non è affatto necessario essere in grado di consegnare un algoritmo di "risoluzione": dobbiamo solo dimostrare che ce n'è uno che fornisce le risposte giuste.
Raffaello

31

Il problema di arresto indica che non esiste un algoritmo che determinerà se un determinato programma si arresta. Di conseguenza, dovrebbero esserci programmi sui quali non possiamo dire se terminano o meno.

"Noi" non siamo un algoritmo =) Non esiste un algoritmo generale che possa determinare se un determinato programma si arresta per ogni programma .

Quali sono gli esempi più semplici (più piccoli) conosciuti di tali programmi?

Considera il seguente programma:

n = 3
while true:
    if is_perfect(n):
            halt()
    n = n + 2

La funzione is_perfect controlla se n è un numero perfetto . Non è noto se ci siano numeri perfetti dispari, quindi non sappiamo se questo programma si interrompe o meno.


7
Siamo un algoritmo.
PyRulez,

3
@PyRulez non ci sono prove che il potere computazionale della mente umana sia equivalente a Turing Machine. La dimostrazione non funziona, ad esempio non si sa come simulare una mente nell'altra.
avsmal

1
@avsmal Va bene, ma è estremamente improbabile che siamo capaci di ipercalcutazione.
PyRulez,

2
@PyRulez John Lucas e Roger Penrose hanno suggerito che la mente umana potrebbe essere il risultato di una sorta di calcolo "non algoritmico" potenziato dal punto di vista meccanico. Questo è un presupposto forte. Ma almeno la nostra mente può avere qualche fonte di incertezza. E questo è sufficiente per infrangere la prova: è impossibile negare la Turing Machine "randomizzata" (per una definizione adeguata del significato randomizzato) se non si sa se si ferma.
avsmal

5
Il calcolo quantistico è considerato ipercalcolo? Supponevo che i computer quantistici potessero essere perfettamente simulati dalle macchine turing - solo un po 'più lentamente.
MaiaVictor il

10

Scrivi:

Il problema di arresto indica che non esiste un algoritmo che determinerà se un determinato programma si arresta. Di conseguenza, dovrebbero esserci programmi sui quali non possiamo dire se terminano o meno.

Questo è un non sequitur, in entrambe le direzioni. Ti arrendi a un errore comune che vale la pena affrontare.

PPP

Solo se si richiede che l'algoritmo risolva il problema di Halting per tutti i programmi¹, è possibile dimostrare che tale algoritmo non può esistere.

Ora, sapere che il problema di Halting è indecidibile non implica che ci siano programmi di cui nessuno può provare la conclusione o il looping. Anche se non sei più potente di una macchina di Turing (che è solo un'ipotesi, non un fatto provato), tutto ciò che sappiamo è che nessun singolo algoritmo / persona può fornire tale prova per tutti i programmi. Potrebbe esserci una persona diversa che può decidere per ciascun programma.

Alcune letture più correlate:


Quindi vedi che la tua vera domanda (come ripetuto di seguito) non ha nulla a che fare con se il problema dell'arresto sia calcolabile. Affatto.

Quali sono gli esempi più semplici (più piccoli) conosciuti di [programmi che non sappiamo arrestare o eseguire in loop]?

S

g(n)={1,S vero,g(n+1),altro.

Certo, questi non sono molto "naturali".


  1. Non necessariamente tutti , ma "molti" in un certo senso. Infinitamente molti, almeno.

I commenti non sono per una discussione estesa; questa conversazione è stata spostata in chat .
Raffaello

Per tentare di riformulare questo per la mia comprensione, è giusto dire che mentre non esiste un algoritmo univoco in grado di determinare se un determinato programma arbitrario si interrompe, potrebbe esserci qualche algoritmo specifico del programma per risolvere il problema di arresto di ogni possibile programma?
Asad Saeeduddin,

@AsadSaeeduddin È "peggio": per ogni dato programma finito, il problema di Halting è banale . Ogni set finito è decidibile.
Raffaello

7

Qualsiasi problema aperto relativo all'esistenza di un numero con proprietà particolari dà origine a tale programma (quello che cerca tale numero). Ad esempio, prendi la congettura di Collatz; poiché non sappiamo se sia vero, non sappiamo nemmeno se il seguente programma termina:

    n:=1;
    found:=false;
    while not found do
      s:={};
      i:=n;
      while i not in s do
        add i to s;
        if i even then i:=i/2 else i:=3i+1
      if 1 not in s then found:=true;
      n:=n+1  

6

Dato che il problema del Castoro indaffarato non viene risolto per una macchina di Turing a 5 stati con 2 simboli, deve esserci una macchina di Turing con solo cinque stati e solo due simboli che non hanno mostrato di arrestarsi o meno quando avviato per un nastro vuoto . Questo è un programma molto breve, conciso e chiuso.


0

la domanda è complicata perché la decidibilità (la formalizzazione / generalizzazione equivalente di CS del problema di arresto) è associata alle lingue, quindi deve essere rifusa in quel formato. questo sembra non essere sottolineato molto, ma molti problemi aperti in matematica / CS possono essere prontamente convertiti in problemi (lingue) di decidibilità sconosciuta. ciò è dovuto alla stretta corrispondenza tra dimostrazione del teorema e analisi (non) di decidibilità. per esempio (un po 'come l'altra risposta con numeri dispari perfetti), prendi la congettura dei numeri primi gemelli che risale ai Greci (oltre 2 millenni fa) ed è soggetta a importanti avanzamenti recenti della ricerca, ad esempio di Zhang / Tao. convertilo in un problema algoritmico come segue:

Ingresso: n . Uscita: S / N esistono almeno n numeri primi gemelli.

l'algoritmo cerca numeri primi gemelli e si ferma se ne trova n . non è noto se questa lingua sia decidibile. la risoluzione del problema dei numeri primi gemelli (che chiede se ci sono numeri finiti o infiniti) risolverebbe anche la decidibilità di questo linguaggio (se è anche provato / scoperto quanti ce ne sono, se finiti).

un altro esempio, prendi l' ipotesi di Riemann e considera questa lingua:

Ingresso: n . Output: S / N esistono almeno n zero non banali della funzione zeta di Riemann.

l'algoritmo cerca zero non banali (il codice non è particolarmente complesso, è simile alla ricerca di radici, e ci sono altre formulazioni equivalenti che sono relativamente semplici, che fondamentalmente calcolano somme di "parità" di tutti i numeri primi inferiori a x etc) e si interrompe se ne trova n e di nuovo, non è noto se questo linguaggio sia decidibile e la risoluzione sia "quasi" equivalente alla soluzione della congettura di Riemann.

ora, che ne dici di un esempio ancora più spettacolare? ( avvertimento, probabilmente anche più controverso)

Input: c: Output: Y / N esiste un algoritmo O (n c ) per SAT.

allo stesso modo, la risoluzione della decidibilità di questo linguaggio è quasi equivalente al problema P vs NP . tuttavia esiste un caso meno ovvio per il codice "semplice" per il problema in questo caso.


1
Il downvoter spiegherebbe cosa c'è di sbagliato in questa risposta?
MaiaVictor,

2
NnNNun',B,cun'n+Bn=cnnN=2
vonbrand,

3
Non sono il downvoter, ma tutte le affermazioni in questa risposta sono sbagliate. Tutti e tre questi problemi sono dimostrabili (senza la necessità di fare ipotesi non dimostrate). Per questo motivo, studia attentamente la risposta di Raffaello.
DW

ok forse l'input deve avere la TM specificata e l'algoritmo decide se la TM calcola il problema. devo pensarci di più ... pensa che ci sia una semplice ricetta per questo tipo di problemi che fondamentalmente collega problemi aperti a linguaggi indecidibili ... ma concordato che questo è raramente documentato / formulato in riferimenti CS ... ne ho trovati solo alcuni refs ... o forse l'input è una prova e il linguaggio verifica se la prova è corretta ... le altre risposte più votate menzionano numeri perfetti dispari, problemi di collatz ecc ... i programmi non sono noti per arrestare o meno per costanti specifiche .
dal

dispiace per la confusione! su alcuni ulteriori pensieri, le asserzioni sono corrette nella forma in cui descrivono programmi semplici che non sono noti per terminare (per tutti gli input) (cioè la domanda originale) e il fallimento dell'idea generale delineata / indicata da DW sta tentando di convertire ciascuno in lingue indecide. continuerà a meditare su quest'ultima idea costruttiva alla ricerca di una che abbia successo. un altro modo di considerarlo è che i problemi possono essere visti come singole istanze / input per un risolutore di problemi di arresto, ma non (in realtà noti) equivalenti al problema di arresto stesso.
vzn

0

1n1050

1020

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.