Официально проверяя правильность алгоритма

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

Во-вторых, где я мог узнать об этом процессе, каких-либо хороших книгах, статьях, и т.д.?

7
задан joemoe 27 January 2010 в 19:01
поделиться

8 ответов

CoQ - это помощник доказательства, который производит правильный выход OCAML. Это довольно сложно. Я никогда не хочелся взглянуть на него, но мой коллега начался, а затем остановился, используя его через два месяца. Это было в основном, потому что он хотел бы сделать все быстрее, но если вам нужно проверить алгоритм, это может быть хорошей идеей.

Вот курс , который использует CoQ и разговоры о доказательстве алгоритмов.
И Вот учебник о написании академических документов в Ковре.

7
ответ дан 6 December 2019 в 08:43
поделиться

Логика в области компьютерных наук, HUTH и RYAN, дает разумно читаемый обзор современных систем для проверки систем. Когда-то люди говорили о доказательстве программ, правильными - с языками программирования, которые могут или не могут иметь побочные эффекты. Впечатление, которое я получаю от этой книги и в других местах, заключается в том, что реальные приложения разные - например, доказывая, что протокол является правильным, или что блок с плавающей запятой чипов может правильно разделить, или что рутина без блокировки для манипулирования связанными списками является правильной.

ACM Computing Surveys Vol 41 Выпуск 4 (октябрь 2009 г.) - это особый вопрос о проверке программного обеспечения. Похоже, вы можете добраться до хотя бы одного из бумаг без учетной записи ACM, поисшив «формальные методы: практика и опыт».

1
ответ дан 6 December 2019 в 08:43
поделиться

Бетонный класс имеет весь свой метод реализован. Абстрактный класс весь свой метод, кроме некоторых (по меньшей мере, одного) метода (ы) не реализован, чтобы вы могли продлить его и внедрить нереализационный метод.

Преимущество: путем расширения от абстрактного класса, вы получаете все функциональные возможности базового класса, и вы будете «вынуждены» для реализации метода не реализованного. Таким образом, дизайнер класса в основном заставляют вас писать код в абстрактном методе до того, как класс имеет для вас любое использование.

-121--1036164-
  1. Это обычно много проще для проверки / доказать правильность, когда побочные эффекты не участвуют, но это не абсолютное требование.
  2. Вы можете посмотреть на некоторую документацию для формального языка спецификации, как Z . Формальная спецификация не является доказательством, но часто является основой для одного.
4
ответ дан 6 December 2019 в 08:43
поделиться

Обычно доказательство правильности очень специфичны для алгоритма под рукой.

Однако есть несколько известных хитростей, которые используются и снова используются. Например, с рекурсивными алгоритмами вы можете использовать контурные инварианты .

Другим распространенным трюком снижает исходную проблему к проблеме, для которой упрощает доказательство вашего алгоритма правильности проще, затем либо обобщена более легкая проблема, либо показывая, что более легкая проблема может быть переведена на решение для исходной проблемы. здесь - это описание.

Если у вас есть определенный алгоритм, вы можете сделать лучше, чтобы спросить, как построить доказательство для этого алгоритма, а не общий ответ.

2
ответ дан 6 December 2019 в 08:43
поделиться

Купить эти книги: http://www.amazon.com/science-programming-monographs-computer/dp/0387964800

Книга Grees, научное программирование - отличное. Пациент, тщательный, полный.

2
ответ дан 6 December 2019 в 08:43
поделиться

Я думаю, что проверка правильности алгоритма будет проверять его соответствие спецификации. Существует ветвь теоретической вычислительной техники под названием Формальные методы , которая может быть тем, что вы ищете, если вам необходимо как можно ближе подойти к доказательству. Из Википедии

Формальные методы - особый вид. математических методов для спецификация, разработка и проверка программного и аппаратного обеспечения системы

Вы сможете найти множество учебных ресурсов и инструментов из множества ссылок на странице Википедии и из вики Формальные методы.

2
ответ дан 6 December 2019 в 08:43
поделиться

Инструмент Frama-C , для которого Элазар предлагает демонстрационное видео в комментариях, дает вам язык спецификации, ACSL , Для написания функциональных контрактов и различных анализаторов для проверки того, что функция C удовлетворяет его свойствам договора и безопасности, таких как отсутствие ошибок времени выполнения.

Расширенное учебное пособие, ACSL на примере , показывает примеры фактических алгоритмов C, указанные и проверенные и отделяют функции без боковых эффектов от эффективных (безрезультатно считается легче и прийти первым в руководстве). Этот документ также интересен в том, что он не написан дизайнерами инструментов, которые он описывает, поэтому он дает более свежую и более дидактику на этих методах.

1
ответ дан 6 December 2019 в 08:43
поделиться

Если вы знакомы с LISP, вам обязательно стоит проверить ACL2: http://www.cs.utexas.edu/~moore/ acl2 / acl2-doc.html

1
ответ дан 6 December 2019 в 08:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: