Esistono programmi che non si fermano mai e non hanno prove di non terminazione?


23

Come i buchi neri nell'informatica. Possiamo solo sapere che esistono ma quando ne abbiamo uno non sapremo mai che è uno di loro.


1
Decidere il problema dell'arresto è almeno tanto quanto provare i teoremi (dato un teorema puoi semplicemente scrivere un programma simile , il programma termina se e solo se il teorema è vero). Se non esistessero tali programmi, ciò significherebbe che potresti provare tutti i teoremi, che è noto per essere falso. Tif T is true then halt else loop forever
Bakuriu,

@Bakuriu: Come vorresti scrivere if T is true?
Ruakh,

@ruakh: Il metodo tradizionale èFor each string S in the (countable) universe of possible strings: If S is a syntactically valid proof of T, halt.
Quuxplusone il

@Quuxplusone: Beh, sì, ma questo non sembra adattarsi alla costruzione di Bakuriu. . .
ruakh,

Questo è interessante, ma al di là delle mie conoscenze. Puoi elaborare, per favore?
Evorlor,

Risposte:


23

Esistono davvero programmi come questo. Per dimostrarlo, supponiamo il contrario che per ogni macchina che non si ferma, c'è una prova che non si ferma.

Queste prove sono stringhe di lunghezza finita, quindi possiamo enumerare tutte le prove di lunghezza inferiori a per alcuni numeri interi s .ss

Possiamo quindi utilizzarlo per risolvere il problema di arresto nel modo seguente: Data una Turing Machine e un input x , utilizziamo il seguente algoritmo:Mx

s := 0
while (True)
    test if machine M halts on input x in s steps
    look at all proofs of length s and see if they prove M doesn't halt on input x
    set s := s + 1

Se ferma sull'input x , si ferma in un numero finito di passaggi s , quindi il nostro algoritmo termina.Mxs

Se non si ferma sull'input x , quindi per il nostro presupposto, ci sono alcune prove di lunghezza s dove c'è una prova che M non si ferma. Quindi, in questo caso, il nostro algoritmo termina sempre.MxsM

Pertanto, abbiamo un algoritmo che decide il problema di Halting che termina sempre. Ma sappiamo che questo non può esistere, quindi la nostra ipotesi che ci sia sempre una prova di non-stop deve essere falsa.


2
Penso che anche da questo derivi una forma più debole del teorema di incompletezza di Godel. Fondamentalmente che esistono cose vere ma che non possono essere provate. Questo è uno dei miei nuovi esperimenti di pensiero preferiti.
Jake,

Pensi che provare a dimostrare P = NP o cercare di trovare un numero dispari perfetto potrebbe essere uno di questi programmi?
Otakar Molnár López,

1
Non ha molto senso perché i programmi non terminanti non sono prove né numeri, ma l'idea a cui stai arrivando è stata sollevata. Alcuni sostengono che PvsNP non è dimostrabile
Jake,

1
@Jake Credo che parte della motivazione delle macchine di Turing fosse un'espressione più chiara dell'idea alla base del teorema di Godel.
Pas

6

Per un esempio un po 'più concreto, supponiamo che la teoria che stiamo usando per le nostre prove abbia le seguenti caratteristiche (abbastanza ragionevoli, IMO):

  1. È coerente ; cioè, non può dimostrare una contraddizione.
  2. Il suo insieme di assiomi è ricorsivamente enumerabile.
  3. Le sue prove possono essere scritte come stringhe di bit finite.
  4. La questione se una determinata stringa codifica una prova ben formata e corretta in essa è decidibile algoritmicamente in tempo finito.
  5. È abbastanza espressivo ammettere una prova del secondo teorema di incompletezza di Gödel, secondo il quale non può dimostrare la propria coerenza.

Con queste ipotesi, il seguente programma non si fermerà mai, ma non può essere dimostrato (nell'ambito della teoria che stiamo usando) di non fermarsi:

let k := 0;
repeat:
    let k := k + 1;
    let s := binary expansion of k, excluding leading 1 bit;
while s does not encode a proof of a contradiction;
halt.

Il dettaglio chiave qui è il primo presupposto sopra, vale a dire che la teoria che stiamo usando per le nostre prove è coerente. Ovviamente, dobbiamo assumerlo, perché le nostre prove valgano qualcosa, ma il secondo teorema di incompletezza di Gödel afferma che, per qualsiasi teoria ragionevolmente espressiva ed efficacemente assiomatizzata, non possiamo effettivamente dimostrarlo (tranne forse in qualche altra teoria, la cui coerenza allora necessità di assumere, ecc. ecc.).

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.