Teorema di incompletezza di Gödels (primo) e il problema dell'arresto - Quanto è limitante?


8

Quando ho sentito parlare per la prima volta di queste cose, sono rimasto molto affascinato perché pensavo che ponesse davvero un limite alla matematica e alla scienza in generale. Ma quanto sono praticamente rilevanti queste cose?

Per il problema di arresto: ci sono più di alcuni casi artificialmente costruiti, in cui non si può decidere se l'algoritmo verrà chiuso o no?

Per il teorema di incompletezza: ci sono più di alcuni casi costruiti artificialmente, in cui non si può provare / confutare l'affermazione?

Lo sto chiedendo perché sembra che nella maggior parte delle aree della scienza non importa davvero che ci siano tali limiti fondamentali. Ci sono persino? Mi piacerebbe sapere dove questo pone davvero un limite e dove è veramente rilevante.


4
Il risultato del problema di arresto non indica che non è possibile decidere se una determinata TM non si ferma. Afferma che non esiste un algoritmo generale che può decidere ciò per tutte le TM.
babou,

2
Bene sì, ma quali sono le implicazioni pratiche di questo? È davvero rilevante o importa solo in casi costruiti artificialmente?
Nocta,

Forse qualcosa da esaminare è la programmazione funzionale totale, che consente solo di terminare i programmi. Quindi puoi vedere quanto spesso i praticanti si imbattono nel dover ripiegare su una programmazione funzionale debole (Turing completo) per risolvere i problemi. Per quanto riguarda i linguaggi di programmazione per scopi generali, ho sentito parlare solo di Idris - il resto sembra essere un dimostratore di teoremi.
Guildenstern,

1
Molti problemi matematici interessanti e difficili potrebbero essere risolti facilmente se si potesse risolvere il problema dell'arresto. Ad esempio, l'ultimo teorema di Fermat. Mi ci vogliono 5 minuti per scrivere un programma che si interromperà se e solo se esiste una soluzione a a ^ n + b ^ n = c ^ n con a, b, c> 0 e n> = 3. Se si dimostra o confuta che si ferma, è dimostrato FLT. "Ci sono infiniti molti numeri primi gemelli" è solo leggermente più difficile da dimostrare se il problema di arresto è risolto.
gnasher729,

2
Per favore, limitati a una domanda per post; i due teoremi a cui fai riferimento hanno poco a che fare l'uno con l'altro. Il tuo fraseggio suggerisce anche che non hai davvero capito cosa dicono (vedi il commento di Babou); devi leggere ancora! Queste sono affermazioni profondamente matematico-formali che non possono essere adeguatamente colte in modo pop-science.
Raffaello

Risposte:


9

Il fatto che il problema dell'arresto sia indecidibile ha molta rilevanza pratica, ecco un rapido esempio:

Scrivere un software antivirus è difficile: non possiamo decidere se un determinato codice è dannoso perché se potessimo potremmo decidere il problema di arresto.

Per vedere questo prendere un pezzo di codice che accetta come input una macchina di Turing M e una parola di input w e fa qualcosa di dannoso se e solo se M si ferma sull'input w. Se potessimo decidere se un determinato codice fosse dannoso, potremmo decidere se questo codice fosse dannoso, ma saremmo in grado di decidere il problema di arresto, che sappiamo di non poter fare.

Ciò che sta dicendo è che non esiste un software antivirus perfetto, non è possibile farlo. Ciò non significa che non dovremmo provare a scrivere un software antivirus, solo che non saremo mai in grado di scriverne uno perfetto. In effetti ogni affermazione su come decidere cosa fanno i programmi è indecidibile (vedi il teorema di Rice ).

Rispetto al teorema di Godel, il teorema di Goodstein è un esempio di un'affermazione che non è dimostrabile usando gli assiomi di Peano.


5
Con rispetto, penso che questa risposta sia un esempio perfetto di non riuscire a fare la distinzione di cui l'OP si sta chiedendo: stai usando il problema dell'arresto in un modo che non ha rilevanza pratica. In pratica, non vi è alcun motivo per cui un pezzo di codice benigno contenga istruzioni che eseguono un'azione dannosa, quindi non importa che non possiamo capire se tali istruzioni vengano mai eseguite o meno; se sono lì, il codice può essere considerato dannoso.
Harry Johnston,

(Sospetto che tu possa trarre più correttamente la stessa conclusione considerando invece una serie di istruzioni il cui effetto combinato può essere benigno o dannoso, a seconda della combinazione di istruzioni eseguita, e quindi sostenendo che nelle giuste circostanze non puoi capire quali combinazioni sono possibili. Ma non sono sicuro di come mettere tutto insieme rigorosamente.)
Harry Johnston,

@HarryJohnston Una possibilità è mascherare istruzioni dannose nei dati. Per alcuni programmi potremmo non essere in grado di decidere se questi dati vengono mai eseguiti come codice, o è semplicemente una stringa benigna che sembra apparire come istruzioni dannose. Naturalmente nei sistemi operativi tradizionali (e persino nei processori) esiste una separazione forzata tra memoria eseguibile di sola lettura e memoria dati scrivibile, ma ci sono scenari in cui non è così.
WaelJ,

@HarryJohnston: Sarebbe vero se potessimo interrogare la parte malvagia dell'istruzione, ma non possiamo. Il mio software arbitrario legge un file di configurazione da ~ / Documents e supporta l'eliminazione della propria configurazione. Esiste un percorso di esecuzione in cui il "file da eliminare" è impostato su ~ / Documents prima che venga chiamato "delete", che è estremamente dannoso, ma non c'è modo di dire "hey, questa applicazione ha queste due cose, deve essere dannosa !" senza guardare cosa ci sta facendo. Cosa che non puoi fare nel caso generale, perché fermare il problema.
Foshi,

@Phoshi: sì, questo è un esempio dell'argomento che descrivo nel mio secondo commento. Suppongo che sia possibile rendere questo rigoroso alla luce di alcuni presupposti, anche se non è ovvio per me dalla cima della mia testa il modo migliore per affrontarlo. OTOH, potrebbe essere che per renderlo rigoroso avresti bisogno di consentire all'applicazione di analizzarsi (ad esempio, ispezionare il proprio codice) e in pratica dovrebbe essere sicuro non consentirlo.
Harry Johnston,

6

Per il problema di arresto: ci sono più di alcuni casi artificialmente costruiti, in cui non si può decidere se l'algoritmo verrà chiuso o no?

ci sono alcuni contesti "approssimativamente pratici / applicati" con la ricerca attiva in cui il problema dell'arresto ha un ruolo:

  • dimostrazione di teoremi automatizzati . la dimostrazione di teoremi da parte dei computer incontra gli stessi limiti di indecidibilità del problema di arresto.

  • la dimostrazione della fine del programma per programmi reali è un'area di ricerca e si presenta ad esempio nella logica del compilatore e nell'analisi del programma.

  • La complessità di Kolmogorov tenta di studiare i limiti teorici degli algoritmi di compressione dei dati. trovare una compressione ottimale (in un certo senso, cioè trovare la TM più piccola che comprime una stringa) è indecidibile.

  • l'indecidibilità si manifesta in alcuni problemi fisici. ad es . sistemi dinamici .

  • un problema di base studiato chiamato problema "il castoro indaffarato" . ancora teorico ma meno astratto del problema di arresto e studiato in particolare per la sua connessione. i ricercatori hanno tentato di risolverlo per decenni per "piccole" TM con pochi stati / simboli.

ecco una citazione correlata / interessante di un recente studio che studia il problema del castoro indaffarato "problemi nella teoria dei numeri da una competizione di castori indaffarati" di Michel (p.3):

In realtà, il problema di arresto per le macchine di Turing lanciate su un nastro bianco è completo, e questo implica che questo problema è tanto difficile quanto il problema della provabilità di una dichiarazione matematica in una teoria logica come ZFC (Zermelo Fraenkel ha impostato la teoria con assioma di scelta). Quindi, quando si studiano macchine di Turing con sempre più stati e simboli, si incontrano potenzialmente tutti i teoremi della matematica. Quando si studiano sempre più macchine di Turing che non si fermano, per essere provate ininterrottamente, ci si deve aspettare di affrontare problemi di matematica apertamente aperti, problemi che le attuali conoscenze matematiche non possono risolvere.

in altre parole, il problema dell'arresto in realtà codifica / incapsula la sfida del tentativo di provare nuovi teoremi matematici in matematica / CS e quindi può essere considerato estremamente profondo / pratico / applicato in questo senso. (tuttavia, mentre alcuni considerano questa osservazione ovvia o banale, anche questa non è generalmente un'opinione comunemente espressa / espressa).


inoltre, per esempio Penrose sostiene che l'indecidibilità è un fattore che impedisce l'IA nella nuova mente degli imperatori
vzn,

un altro grande contesto in cui si manifesta l'indecidibilità è in alcune domande matematiche di base. forse il più basilare / famoso è il decimo problema di Hilberts , eqns di diotthant in polinomi. inoltre, l'indecidibilità si presenta in alcune domande sui frattali, ad esempio il set di Mandelbrot, ecc.
vzn,

5

Sto rispondendo a una delle tue due domande, riguardo al problema dell'arresto.

In primo luogo, l'indecidibilità del problema di arresto non afferma che non è possibile decidere se un determinato TM non si ferma. Indica che non esiste un algoritmo generale che può decidere ciò per tutte le TM.

Questa è una dichiarazione sui nostri modelli di ciò che costituisce il calcolo. Ma, secondo la tesi della Chiesa di Turing, questo è tutto ciò che dobbiamo esprimere computazione.

Per quanto riguarda la rilevanza, si basa su macchine di Turing costruite artificialmente. Ma poi, tutte le TM sono piuttosto artificiali e costruite solo per affermare alcuni fatti sul calcolo. Se alcuni TM sono più rilevanti di altri nella pratica è una domanda tanto importante quanto il sesso degli angeli o il numero di essi che possono stare sulla testa di un ago.

L'indecidibilità del problema di arresto ci dice che ci sono domande generali che non possono essere risolte con una tecnica generale applicabile a tutti i casi. Quello che intendo per domanda generale è una domanda che dipende da alcuni parametri, in cui si trova la risposta per alcuni valori dei parametri.

Ricordiamo che lo scopo di gran parte della nostra matematica è trovare tecniche generali per risolvere una famiglia di problemi. Un esempio tipico è la risoluzione delle equazioni. L'indecidibilità del problema di arresto ci dice che ciò non è sempre possibile.

Ad esempio, può essere usato per dimostrare che non esiste una tecnica generale per decidere se una grammatica senza contesto è ambigua.

Tuttavia, la tua domanda è valida. È possibile che un problema sia indecidibile perché lo hai reso un po 'troppo generico. Probabilmente, limitandolo un po ', puoi renderlo decidibile per sottofamiglia utile e ancora abbastanza grande.

Non ho in mente un esempio spettacolare, ma sono sicuro che ce ne devono essere alcuni.

Ricordo un vero caso di un problema di analisi del programma che è stato dimostrato NP completo (a meno che non fosse indecidibile, non ricordo bene). Contro ogni consiglio, uno studente di dottorato ha deciso di affrontarlo comunque. In realtà è stato in grado di dimostrare che alcune restrizioni sul problema, che non avevano molta importanza nella pratica, lo hanno trasformato in un problema molto trattabile, consentendo in tal modo l'uso di vari strumenti di analisi e ottimizzazione del programma.


4
Un esempio che penso si adatterebbe bene alla tua risposta è l'ottimizzazione dei compilatori. L'indecidibilità del problema di interruzione significa che, ad esempio, non esiste un algoritmo in grado di eseguire la perfetta rimozione del codice morto o produrre l'eseguibile più veloce possibile per un determinato file di origine. Ma questo non impedisce ai compilatori di fare un ottimo lavoro di queste cose, nella maggior parte dei casi, in pratica.
David Richerby,
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.