Потужні алгоритми, які занадто важко реалізувати - як бути впевненим, що вони праві?


9

Я маю на увазі тут питання: потужні алгоритми занадто складні для реалізації .

Якщо алгоритм є потужним, але занадто складним для його здійснення, як ви можете бути впевнені, що алгоритм правильний? Без реалізації ви не зможете протестувати алгоритм у реальному сценарії, і такий складний алгоритм може містити помилки, які можуть визнати недійсним алгоритм.

Це я не розумію; якщо у вас є методики, щоб довести правильність алгоритму, то у вас був би алгоритм для його реалізації, чи не так? Або ж як ми можемо бути впевнені, що техніка доказування правильна?

Вибачте, якщо я звучу елементарно!

Оновлення від Kaveh (відтворено тут, оскільки аргумент кращий!):

Якщо ви можете офіційно довести правильність алгоритму в такій формальній системі, як Coq, то ви також можете витягнути алгоритм (оскільки, по суті, ви реалізували алгоритм), але ключовим фактом є те, що для більшості алгоритмів ми не надаємо формальних доказів правильність алгоритму, ми використовуємо неофіційні докази коректності. Докази можуть бути помилковими, що час від часу трапляється, і навіть формальне підтвердження правильності не дасть нам абсолютно впевнитися в правильності алгоритму.


6
Ось чому ми маємо методи доведення коректності алгоритмів, навіть якщо (правильна) реалізація на реальній машині є важкою.
Рафаель

9
Я згоден з Рафаелем. Видається, що питання ґрунтується на припущенні, що правильність алгоритму зазвичай доводиться, реалізуючи його, але це не так. Доведення правильності алгоритму та реалізація алгоритму - це абсолютно різні речі, і одна річ не передбачає іншого в жодному напрямку.
Цуйосі Іто

8
Прості алгоритми зі складними доказами правильності - як ви знаєте, що вони праві? Просто те, що алгоритм працює на тестових прикладах, не означає, що він працює на всіх входах.
Пітер Шор

2
Я згоден з більшістю зауважень, але я думаю, що вони пропускають ключовий момент. Якщо можна формально довести правильність алгоритму в такій формальній системі, як Coq, то ви також можете витягнути алгоритм (адже, по суті, ви реалізували алгоритм), але ключовим фактом є те, що для більшості алгоритмів ми не надаємо формальних доказів правильність алгоритму, ми використовуємо неофіційні докази коректності. Докази можуть бути помилковими, що трапляється час від часу, і навіть формальне підтвердження правильності не дасть нам абсолютно впевнитися в правильності алгоритму.
Kaveh

5
"Остерігайтеся помилок у наведеному вище коді. Я лише довів це правильно, а не пробував." ~ Дональд Кнут
Лев Рейзін

Відповіді:


11

Кілька років тому відбулася (досить жорстка) дискусія на подібну до цієї теми. Все почалося, коли кілька складних доказів виявилися невірними, і деякі дослідники почали викликати сумніви в самій природі доказів (ну, я мав би сказати "доказна криптографія", але заради загальності я цього не зробив) . Обидві сторони суперечки звинувачували іншу в неправильному розумінні понять. Ось посилання для отримання додаткової інформації .

Докази - це наш (математичний) інструмент для доведення теорем / алгоритмів правильних, але коли вони стали занадто складними, ми можемо прослизнути і довести неправильні речі. Нещодавно 100-або-близько-сторінки , на доказ P ≠ NP є відмінним прикладом. Однак це не виключає самої природи доказів: з ними нічого поганого.

Останній момент: Я думаю, що вивчаю філософії науки дасть нам більше розуміння цього. (Під даним посиланням див. Кулю " Як ми можемо знати, чи правильний математичний доказ? ")

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.