Я хочу предоставить доказательства для частей программы на Haskell, которую я пишу, как часть моей диссертации. Однако до сих пор мне не удалось найти хорошую справочную работу.
Вступительная книга Грэма Хаттона « Программирование на Haskell» ( Google Books ), которую я читаю, изучая Haskell, затрагивает несколько методов рассуждения о таких программах, как
- рациональное мышление
- используя неперекрывающиеся шаблоны
- список индукции
в главе 13, но это не очень подробно.
Существуют ли какие-либо книги или статьи, которые вы можете порекомендовать, в которых содержится более подробный обзор формальных методов проверки для Haskell или другого функционального кода?
Вы можете начать с
Вы можете пропустить (или пропустить) части теории языка программирования и научиться обращаться с формальными доказательствами, начиная с предисловия и заканчивая принципами IndPrinciples. Книга действительно хорошо написана и полезна.
Тогда вы можете продолжить
Предупреждение: VFA все еще находится в бета-версии!
источник
Theorem app_assoc : ∀ l1 l2 l3 : natlist, (l1 ++ l2) ++ l3 = l1 ++ (l2 ++ l3)
из главы списков . Этот пример выглядит как то, что вас интересует? Они начинают с функционального программирования в Coq, но затем переходят к рассуждениям о свойствах функциональных программ. Главы от Предисловия до IndPrinciples охватывают оба из них, и я сказал бы, что программирование и рассуждение там переплетены.Оказывается, что превосходным источником методов и примеров доказательства для доказательств о чисто функциональных языках являются помощники по доказательству, которые обычно включают в свой язык спецификаций чисто функциональный язык, на котором можно разумно рассуждать.
Возможно, вы захотите обратиться к книге, такой как « Сертифицированное программирование с зависимыми типами», для подробного ознакомления с такого рода рассуждениями у конкретного помощника по доказательству, а именно Coq.
источник
Я предлагаю использовать программную логику. Они гораздо лучше справляются с эффектами, чем системы ввода текста.
Существует множество программных логик для функциональных языков. Это становится интересным с эффектами. См., Например, Логическое обоснование для функций высшего порядка с локальным состоянием .
Работа Артура Шаргеро объединяет программный логический подход с помощниками по проверке, см., Например, эту обзорную страницу .
источник