Я, как и многие люди, увлекаюсь математическими программами, такими как Mathematica и Maple. Однако меня все больше расстраивают многочисленные случаи, когда такое программное обеспечение просто дает вам неправильный ответ без предупреждения. Это может произойти при выполнении всех видов операций от простых сумм до оптимизации среди многих других примеров.
Мне было интересно, что можно сделать с этой серьезной проблемой. Необходим какой-то способ, позволяющий пользователю проверить правильность ответа, который дан, чтобы у него была определенная уверенность в том, что ему говорят. Если бы вы получили решение от математического коллеги, она или он могли бы просто сесть и показать вам, как они работают. Однако в большинстве случаев это невозможно для компьютера. Может ли компьютер вместо этого дать вам простой и легко проверяемый свидетель правильности их ответа? Проверка, возможно, должна быть сделана компьютером, но, надеюсь, проверка алгоритма проверки будет намного проще, чем проверка алгоритма для получения свидетеля в первую очередь. Когда это будет возможно и как именно это можно будет формализовать?
Итак, в заключение, мой вопрос заключается в следующем.
Возможно ли, по крайней мере, теоретически, для математического программного обеспечения предоставить краткое проверяемое доказательство вместе с ответом, который вы просили?
Тривиальный случай, когда мы можем сделать это немедленно, это, конечно, факторизация целых чисел или многих классических NP-полных задач (например, гамильтонова схема и т. Д.).
источник
Ответы:
Понятие «свидетели» или «проверяемые доказательства» не является совершенно новым: как упоминалось в комментариях, ищите понятие «свидетельство». На ум пришло три примера, еще больше (в комментариях и в других местах):
В 1999 году Курт Мелхорн описал аналогичную проблему в алгоритмах вычислительной геометрии (например, незначительные ошибки в координатах могут привести к большим ошибкам в результатах некоторого алгоритма), аналогичным образом решаемую в библиотеке Leda , настаивая на том, что каждый алгоритм выдает «сертификат» его ответ в дополнение к самому ответу.
Демейн, Лопес-Ортиз и Мунро в 2000 году использовали концепции сертификатов (они называют их «доказательствами»), чтобы показать адаптивные нижние границы для вычисления объединения и пересечения (и различия, но это тривиально) отсортированных множеств. Не исключайте их работу, потому что они не использовали сертификаты для защиты от вычислительных ошибок: они показали, что хотя сертификат может быть линейным по размеру экземпляра в худшем случае, он часто короче и, следовательно, может быть «проверен» «в сублинейное время (при произвольном доступе к входным данным в виде отсортированного массива или B-дерева) и, в частности, во времени, меньшем, чем требуется для вычисления такого сертификата.
Я использую концепцию сертификатов для различных других проблем с тех пор, как Ян Мунро представил их реализацию на Alenex 2001 , и, в частности, для перестановок (извинения за бесстыдный плагин, еще один идет), где сертификат короче в лучшем случае чем в худшем или среднем случае, что дает сжатую структуру данных для перестановок. Здесь снова проверка сертификата (т. Е. Порядка) занимает самое большее линейное время, меньше, чем его вычисление (т. Е. Сортировка).
Эта концепция не всегда полезна для проверки ошибок: существуют проблемы, когда проверка сертификата занимает столько же времени, сколько его создание (или просто получение результата). На ум приходят два примера, один тривиальный, а другой сложный, Блюм и Каннан (упомянутые в комментариях) приводят другие.
Библиотека Leda - это самое общее (насколько мне известно) усилие по превращению детерминированных алгоритмов создания сертификатов в норму на практике. Бумага Блюма и Каннана - лучшее, что я видел, чтобы сделать это теоретически нормой, но они действительно показывают пределы этого подхода.
Надеюсь, поможет...
источник