В первую очередь, действительно ли это только возможно на алгоритмах, которые не имеют никаких побочных эффектов?
Во-вторых, где я мог узнать об этом процессе, каких-либо хороших книгах, статьях, и т.д.?
CoQ - это помощник доказательства, который производит правильный выход OCAML. Это довольно сложно. Я никогда не хочелся взглянуть на него, но мой коллега начался, а затем остановился, используя его через два месяца. Это было в основном, потому что он хотел бы сделать все быстрее, но если вам нужно проверить алгоритм, это может быть хорошей идеей.
Вот курс , который использует CoQ и разговоры о доказательстве алгоритмов.
И Вот учебник о написании академических документов в Ковре.
Логика в области компьютерных наук, HUTH и RYAN, дает разумно читаемый обзор современных систем для проверки систем. Когда-то люди говорили о доказательстве программ, правильными - с языками программирования, которые могут или не могут иметь побочные эффекты. Впечатление, которое я получаю от этой книги и в других местах, заключается в том, что реальные приложения разные - например, доказывая, что протокол является правильным, или что блок с плавающей запятой чипов может правильно разделить, или что рутина без блокировки для манипулирования связанными списками является правильной.
ACM Computing Surveys Vol 41 Выпуск 4 (октябрь 2009 г.) - это особый вопрос о проверке программного обеспечения. Похоже, вы можете добраться до хотя бы одного из бумаг без учетной записи ACM, поисшив «формальные методы: практика и опыт».
Бетонный класс имеет весь свой метод реализован. Абстрактный класс весь свой метод, кроме некоторых (по меньшей мере, одного) метода (ы) не реализован, чтобы вы могли продлить его и внедрить нереализационный метод.
Преимущество: путем расширения от абстрактного класса, вы получаете все функциональные возможности базового класса, и вы будете «вынуждены» для реализации метода не реализованного. Таким образом, дизайнер класса в основном заставляют вас писать код в абстрактном методе до того, как класс имеет для вас любое использование.
-121--1036164-Обычно доказательство правильности очень специфичны для алгоритма под рукой.
Однако есть несколько известных хитростей, которые используются и снова используются. Например, с рекурсивными алгоритмами вы можете использовать контурные инварианты .
Другим распространенным трюком снижает исходную проблему к проблеме, для которой упрощает доказательство вашего алгоритма правильности проще, затем либо обобщена более легкая проблема, либо показывая, что более легкая проблема может быть переведена на решение для исходной проблемы. здесь - это описание.
Если у вас есть определенный алгоритм, вы можете сделать лучше, чтобы спросить, как построить доказательство для этого алгоритма, а не общий ответ.
Купить эти книги: http://www.amazon.com/science-programming-monographs-computer/dp/0387964800
Книга Grees, научное программирование - отличное. Пациент, тщательный, полный.
Я думаю, что проверка правильности алгоритма будет проверять его соответствие спецификации. Существует ветвь теоретической вычислительной техники под названием Формальные методы , которая может быть тем, что вы ищете, если вам необходимо как можно ближе подойти к доказательству. Из Википедии
Формальные методы - особый вид. математических методов для спецификация, разработка и проверка программного и аппаратного обеспечения системы
Вы сможете найти множество учебных ресурсов и инструментов из множества ссылок на странице Википедии и из вики Формальные методы.
Инструмент Frama-C , для которого Элазар предлагает демонстрационное видео в комментариях, дает вам язык спецификации, ACSL , Для написания функциональных контрактов и различных анализаторов для проверки того, что функция C удовлетворяет его свойствам договора и безопасности, таких как отсутствие ошибок времени выполнения.
Расширенное учебное пособие, ACSL на примере , показывает примеры фактических алгоритмов C, указанные и проверенные и отделяют функции без боковых эффектов от эффективных (безрезультатно считается легче и прийти первым в руководстве). Этот документ также интересен в том, что он не написан дизайнерами инструментов, которые он описывает, поэтому он дает более свежую и более дидактику на этих методах.
Если вы знакомы с LISP, вам обязательно стоит проверить ACL2: http://www.cs.utexas.edu/~moore/ acl2 / acl2-doc.html