Uygulanması çok zor olan güçlü algoritmalar - bunların doğru olduğundan nasıl emin olabilirsiniz?


9

Buradaki soruya atıfta bulunuyorum: uygulamak için çok karmaşık güçlü algoritmalar .

Bir algoritma güçlü ancak uygulanamayacak kadar karmaşıksa, algoritmanın doğru olduğundan nasıl emin olabilirsiniz? Uygulama olmadan, algoritmayı gerçek dünya senaryosunda test edemezsiniz ve böyle karmaşık bir algoritma, algoritmayı geçersiz kılabilecek hatalar içerebilir.

Anlamadığım şey bu; bir algoritmanın doğruluğunu kanıtlamak için teknikleriniz varsa, o zaman onu zaten uygulayacak algoritmaya sahip olacaksınız, değil mi? Yoksa kanıtlama tekniğinin doğru olduğundan nasıl emin olabiliriz?

Temel ses çıkarırsam özür dilerim!

Kaveh'den güncelleme (burada argüman daha iyi olduğu için çoğaltılmıştır!):

Coq gibi resmi bir sistemde bir algoritmanın doğruluğunu resmi olarak kanıtlayabilirseniz, algoritmayı da çıkarabilirsiniz (çünkü algoritmayı uyguladınız), ancak asıl önemli olan çoğu algoritma için resmi kanıtlar vermememizdir. algoritma için doğruluk, gayri resmi doğruluk kanıtları kullanıyoruz. Kanıtlar yanlış olabilir, bu da zaman zaman gerçekleşir ve resmi bir doğruluk kanıtı bile algoritmanın doğru olduğundan emin olmamızı sağlamaz.


6
Bu nedenle , gerçek bir makinede (doğru) uygulama zor olsa bile algoritmaların doğruluğunu kanıtlamak için tekniklerimiz var .
Raphael

9
Raphael'e katılıyorum. Soru, bir algoritmanın doğruluğunun genellikle onu uygulayarak kanıtlandığı varsayımına dayanıyor gibi görünüyor, ancak durum böyle değil. Bir algoritmanın doğruluğunu kanıtlamak ve bir algoritmayı uygulamak tamamen farklı şeylerdir ve bir şey diğerini her iki yönde de ima etmez.
Tsuyoshi Ito

8
Karmaşık doğruluk kanıtlarına sahip basit algoritmalar - bunların doğru olduğunu nereden biliyorsunuz? Bir algoritmanın test örnekleri üzerinde çalışması, tüm girdilerde çalıştığı anlamına gelmez.
Peter Shor

2
Yorumların çoğuna katılıyorum, ancak bence önemli bir noktayı kaçırıyorlar. Eğer Eğer resmen Coq gibi resmi bir sistemde bir algoritma doğruluğunu kanıtlamak sonra (aslında sen algoritma uygulanan çünkü) ayrıca algoritma çıkarabilir, ancak anahtar gerçeği çoğu algoritmalarının olduğunu biz biçimsel kanıtlar vermeyin algoritma için doğruluk , gayri resmi doğruluk kanıtları kullanıyoruz . Kanıtlar yanlış olabilir, bu zaman zaman gerçekleşir ve resmi bir doğruluk kanıtı bile algoritmanın doğru olduğundan emin olmamızı sağlamaz .
Kaveh

5
"Yukarıdaki koddaki hatalara dikkat edin; sadece doğru olduğunu kanıtladım, denemedim." ~ Donald Knuth
Lev Reyzin

Yanıtlar:


11

Birkaç yıl önce, buna benzer bir konuda (oldukça sert) bir tartışma vardı. Her şey birkaç karmaşık kanıtın yanlış olduğu ortaya çıktı ve bazı araştırmacılar kanıtların doğası hakkında şüphe uyandırmaya başladılar (iyi, "kanıtlanabilir kriptografi" demeliydim, ancak genel olarak uğruna yapmadım) . Tartışmanın her iki tarafı da diğerini kavramları yanlış anlamakla suçladı. İşte daha fazla bilgi için bir bağlantı .

Kanıtlar, teoremlerin / algoritmaların doğru olduğunu kanıtlamak için (matematiksel) araçlarımızdır, ancak çok karmaşık olduklarında, yanlış şeylerin doğru olduğunu kanıtlayabilir ve kanıtlayabiliriz. P ≠ NP üzerinde son 100 ya-so-sayfa geçirmez mükemmel bir örneğidir. Bununla birlikte, bu kanıtların doğasını dışlamaz: Onlarda hiçbir şey yanlış değil.

Son bir nokta: Bence bilim felsefesini incelemek bize bu konuda daha fazla fikir verecektir. (Verilen bağlantının altındaki " Matematiksel kanıtın doğru olup olmadığını nasıl biliyoruz? "

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.