Algoritmi potenti che sono troppo difficili da implementare: come essere sicuri che abbiano ragione?


9

Mi riferisco alla domanda qui: potenti algoritmi troppo complessi da implementare .

Se un algoritmo è potente, ma troppo complesso da implementare, come puoi essere sicuro che l'algoritmo sia corretto? Senza l'implementazione non sarai in grado di testare l'algoritmo in uno scenario del mondo reale e un algoritmo così complesso può contenere bug, che potrebbe invalidare l'algoritmo.

Questo è ciò che non capisco; se hai le tecniche per dimostrare la correttezza di un algoritmo, allora avresti l'algoritmo per implementarlo già, no? Oppure come possiamo essere sicuri che la tecnica di prova sia corretta?

Mi dispiace se suono elementare!

Aggiornamento da Kaveh (riprodotto qui perché l'argomento è migliore!):

Se puoi dimostrare formalmente la correttezza di un algoritmo in un sistema formale come Coq, puoi anche estrarre l'algoritmo (perché essenzialmente hai implementato l'algoritmo), ma il fatto chiave è che per la maggior parte degli algoritmi non forniamo prove formali di correttezza per l'algoritmo, utilizziamo prove informali di correttezza. Le prove possono essere false, cosa che succede di tanto in tanto e persino una prova formale di correttezza non ci renderà assolutamente sicuri che l'algoritmo sia corretto.


6
Questo è il motivo per cui abbiamo tecniche per dimostrare la correttezza degli algoritmi, anche se l'implementazione (corretta) su una macchina reale è difficile.
Raffaello,

9
Sono d'accordo con Raffaello. Sembra che la domanda si basi sul presupposto che la correttezza di un algoritmo sia di solito provata implementandolo, ma non è così. Dimostrare la correttezza di un algoritmo e implementare un algoritmo sono cose completamente diverse, e una cosa non implica l'altra in nessuna direzione.
Tsuyoshi Ito,

8
Algoritmi semplici con complesse prove di correttezza: come fai a sapere che hanno ragione? Solo perché un algoritmo funziona su esempi di test non significa che funzioni su tutti gli input.
Peter Shor,

2
Sono d'accordo con la maggior parte dei commenti, ma penso che manchi un punto chiave. Se puoi dimostrare formalmente la correttezza di un algoritmo in un sistema formale come Coq, puoi anche estrarre l'algoritmo (perché essenzialmente hai implementato l'algoritmo), ma il fatto chiave è che per la maggior parte degli algoritmi non forniamo prove formali di correttezza per l'algoritmo, utilizziamo prove informali di correttezza. Le prove possono essere false, ciò accade di tanto in tanto e anche una prova formale di correttezza non ci renderà assolutamente sicuri che l'algoritmo sia corretto.
Kaveh,

5
"Attenzione ai bug nel codice sopra; l'ho solo dimostrato corretto, non provato." ~ Donald Knuth
Lev Reyzin

Risposte:


11

Diversi anni fa si è svolto un dibattito (piuttosto aspro) su un argomento simile a questo. Tutto è iniziato quando diverse prove complesse si sono rivelate errate e alcuni ricercatori hanno iniziato a sollevare dubbi sulla natura stessa delle prove (beh, avrei dovuto dire "crittografia dimostrabile", ma per motivi di generalità, non l'ho fatto) . Entrambe le parti della controversia hanno accusato l'altro di fraintendere i concetti. Ecco un link per maggiori informazioni .

Le prove sono i nostri strumenti (matematici) per dimostrare che i teoremi / algoritmi sono corretti, ma quando diventano troppo complessi, possiamo scivolare e dimostrare che le cose sbagliate sono giuste. La recente prova di circa 100 pagine su P ≠ NP è un eccellente esempio. Tuttavia, ciò non esclude la natura stessa delle prove: nulla di sbagliato in esse.

Un ultimo punto: penso che studiare la filosofia della scienza ci darà maggiori informazioni su questo. (Sotto il link indicato, vedi il punto " Come facciamo a sapere se una dimostrazione matematica è corretta? ")

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.