Свидетели математического программного обеспечения

11

Я, как и многие люди, увлекаюсь математическими программами, такими как Mathematica и Maple. Однако меня все больше расстраивают многочисленные случаи, когда такое программное обеспечение просто дает вам неправильный ответ без предупреждения. Это может произойти при выполнении всех видов операций от простых сумм до оптимизации среди многих других примеров.

Мне было интересно, что можно сделать с этой серьезной проблемой. Необходим какой-то способ, позволяющий пользователю проверить правильность ответа, который дан, чтобы у него была определенная уверенность в том, что ему говорят. Если бы вы получили решение от математического коллеги, она или он могли бы просто сесть и показать вам, как они работают. Однако в большинстве случаев это невозможно для компьютера. Может ли компьютер вместо этого дать вам простой и легко проверяемый свидетель правильности их ответа? Проверка, возможно, должна быть сделана компьютером, но, надеюсь, проверка алгоритма проверки будет намного проще, чем проверка алгоритма для получения свидетеля в первую очередь. Когда это будет возможно и как именно это можно будет формализовать?

Итак, в заключение, мой вопрос заключается в следующем.

Возможно ли, по крайней мере, теоретически, для математического программного обеспечения предоставить краткое проверяемое доказательство вместе с ответом, который вы просили?

Тривиальный случай, когда мы можем сделать это немедленно, это, конечно, факторизация целых чисел или многих классических NP-полных задач (например, гамильтонова схема и т. Д.).

Сообщество
источник
Можете ли вы привести пример, когда полученный ответ неверен? Конечно, можно генерировать проверяемое доказательство правильности вычислений, но такое доказательство не обязательно легко проверить вручную, просто потому, что программное обеспечение обычно использует весьма нетривиальные алгоритмы, которые более эффективны, чем самые интуитивные.
Махди Черагчи
Я привел два примера в вопросе, но цвета ссылок могут быть не так легко увидеть. Нажмите на «суммы» или «оптимизация».
1
Вроде того, что Мануэль Блум и Сампат Каннан делали в dl.acm.org/citation.cfm?id=200880 ?
Андрей Бауэр
Возможно, вы захотите взглянуть на сертифицирующие алгоритмы .
Pratik Deoghare
да, слишком много символических программных систем рассматриваются как «черные ящики», и это также корпоративная стратегия защиты коммерческой тайны. (1) попробовать альтернативы с открытым исходным кодом (2) рассмотреть разработку программного обеспечения «передовой опыт» «модульного тестирования». Вкратце, идея состояла бы в том, чтобы создать «проверки правильности» результатов, например, путем замены известных значений, других манипуляций, инверсий и т. д. на хорошо построенные тесты, и маловероятно, что и формула, и тест провалились бы так, чтобы «ложный позитив».
vzn

Ответы:

5
  1. Понятие «свидетели» или «проверяемые доказательства» не является совершенно новым: как упоминалось в комментариях, ищите понятие «свидетельство». На ум пришло три примера, еще больше (в комментариях и в других местах):

    • В 1999 году Курт Мелхорн описал аналогичную проблему в алгоритмах вычислительной геометрии (например, незначительные ошибки в координатах могут привести к большим ошибкам в результатах некоторого алгоритма), аналогичным образом решаемую в библиотеке Leda , настаивая на том, что каждый алгоритм выдает «сертификат» его ответ в дополнение к самому ответу.

    • Демейн, Лопес-Ортиз и Мунро в 2000 году использовали концепции сертификатов (они называют их «доказательствами»), чтобы показать адаптивные нижние границы для вычисления объединения и пересечения (и различия, но это тривиально) отсортированных множеств. Не исключайте их работу, потому что они не использовали сертификаты для защиты от вычислительных ошибок: они показали, что хотя сертификат может быть линейным по размеру экземпляра в худшем случае, он часто короче и, следовательно, может быть «проверен» «в сублинейное время (при произвольном доступе к входным данным в виде отсортированного массива или B-дерева) и, в частности, во времени, меньшем, чем требуется для вычисления такого сертификата.

    • Я использую концепцию сертификатов для различных других проблем с тех пор, как Ян Мунро представил их реализацию на Alenex 2001 , и, в частности, для перестановок (извинения за бесстыдный плагин, еще один идет), где сертификат короче в лучшем случае чем в худшем или среднем случае, что дает сжатую структуру данных для перестановок. Здесь снова проверка сертификата (т. Е. Порядка) занимает самое большее линейное время, меньше, чем его вычисление (т. Е. Сортировка).

  2. Эта концепция не всегда полезна для проверки ошибок: существуют проблемы, когда проверка сертификата занимает столько же времени, сколько его создание (или просто получение результата). На ум приходят два примера, один тривиальный, а другой сложный, Блюм и Каннан (упомянутые в комментариях) приводят другие.

    • nn
    • Сертификат для выпуклого корпуса в двух и трех измерениях, если точки заданы в случайном порядке, требует столько же битов для кодирования, сколько и сравнений для вычисления [FOCS 2009] (другой бесстыдный штекер).

Библиотека Leda - это самое общее (насколько мне известно) усилие по превращению детерминированных алгоритмов создания сертификатов в норму на практике. Бумага Блюма и Каннана - лучшее, что я видел, чтобы сделать это теоретически нормой, но они действительно показывают пределы этого подхода.

Надеюсь, поможет...

Джереми
источник
Спасибо, что очень интересно. Что касается вашего пункта 2. Я думаю, что я говорю о чем-то немного другом. Проблема не в ошибках в коде, а в алгоритмах, которые, как мы знаем, могут дать неправильный ответ. Кроме того, на мирском уровне я даже не знаю, как будет выглядеть полезный сертификат для многих математических функций. Например, для бесконечной суммы или, скажем, минимизации функции.
Чтобы быть немного яснее. Кажется, что очень трудно придумать правильные алгоритмы для многих математических задач. Однако мы живем с алгоритмами, которые могут совершать ошибки, не предупреждая нас (и на самом деле они ошибочно доказываются) по практическим причинам. Надежда на то, что не составит труда придумать корректно проверяющие корректность проверки правильности для того же набора проблем.
Я далеко ухожу от своего опыта, но я думал, что ошибки в вычислениях, как правило, были вызваны ошибками округления с промежуточными результатами (это было ясно в примерах, мотивирующих Leda) на базовых операциях (умножения, деления и т. Д.), А не на ошибках в алгоритмах. Я бы подумал, что алгебраические системы, такие как клен и Matlab, избегают их :(
Джереми
Это интересный вопрос, и, возможно, кто-то здесь знает наверняка ... однако многие из неправильных ответов, о которых я говорю, не для численных расчетов, так что это подразумевает, по крайней мере, prima facie, что проблемы больше, чем вы описываете. Я не знаю сложности вычислительных ограничений / бесконечных сумм и т. Д., Но я предполагаю, что в общем случае они трудно поддаются решению в худшем случае, и поэтому эвристика, которая иногда дает неправильный ответ, необходима / полезна. mathematica.stackexchange.com/questions/tagged/bugs не является неинформативным, чтобы понять, что происходит не так.
Теоретическая CS имеет концепцию самотестирования, которая применяется ко многим задачам в линейной алгебре. Одна из основных идей заключается в том, что для многих проблем решение можно проверить (возможно, с небольшой дополнительной информацией) проще, чем вычислить. Смотрите, например, https://doi.org/10.1016/0022-0000(93)90044-W .
Нил Янг