Які загальні формальні прийоми доведення функціонального коду правильним?


10

Я хочу надати докази частин програми Haskell, про яку я пишу, як частину своєї дипломної роботи. Поки що, мені не вдалося знайти хорошої довідкової роботи.

Вступна книга Грем Хаттон « Програмування в Хаскеллі» ( Google Books ), яку я читав під час навчання Haskell - торкається кількох прийомів міркування про такі програми, як

  • еквівалентне міркування
  • використовуючи шаблони, що не перекриваються
  • список індукції

у главі 13, але це не дуже глибоко.

Чи є якісь книги чи статті, які ви можете порекомендувати, які надають більш детальний огляд формальних методів доказування Haskell або іншого функціонального коду?

Відповіді:


5

Один з фактичних методів доведення результатів у функціональному програмуванні - через групу Річарда Берда.

Зокрема, ви вимагаєте поглибленого або, принаймні, більш всебічного підходу до рівнянних міркувань та індукції списку, і це передбачено в Лекціях з конструктивного функціонального програмування .

Більш загально, текст "Алгебри програмування" Берда та де Мура також стосується правильності функціональних алгоритмів, таких як оптимізація та проблеми динамічного програмування.


Якщо ви зіткнулися з іншими корисними ресурсами для цієї проблеми, будь ласка, згадайте про них, і, можливо, ми можемо перетворити цю публікацію у вікі.


Дякую! Звичайно, якщо я знайду більше ресурсів, я обов’язково додам їх до своєї посади.
FK82

6

Ви можете почати з

Теми включають основні поняття логіки, комп’ютерне підтвердження теорем, асистент доказування Coq, функціональне програмування, оперативна семантика, логіка Хоара та системи статичного типу. Експозиція розрахована на широке коло читачів - від випускників магістратури до аспірантів та наукових працівників. Не передбачається конкретного підґрунтя в логіці чи мовах програмування, хоча ступінь математичної зрілості буде корисною.

Ви можете пропустити (або знехтувати) частини теорії мови програмування і тільки навчитися поводитися з офіційними доказами, починаючи від передмови до IndPrinciples. Книга справді добре написана і освітлююча.

Тоді ви, можливо, захочете продовжити

У цьому томі ви дізнаєтесь, як вказати та перевірити (довести правильність) алгоритми сортування, двійкові дерева пошуку, збалансовані дерева бінарного пошуку та черги пріоритетності. Перш ніж використовувати цю книгу, ви повинні мати певне розуміння цих алгоритмів та структур даних, доступних у будь-якому стандартному підручнику з алгоритмів для студентів. Ви повинні розуміти весь матеріал у програмі «Основи програмного забезпечення» 1 (Логічні основи)

Примітка попередження: VFA все ще знаходиться в бета-версії!


(Ваше друге посилання спрямоване в неправильне місце.) Також в Агді є перевірене функціональне програмування ; яка використовує Agda, формально мову програмування, але використовує unicode і так ближче до математичної позначення.
Musa Al-hassy

Виправлено, спасибі. Так, я читав VFPiA, але це не на мій смак.
Антон Трунов

Спасибі за вашу відповідь! Я думаю, що існує помилкова думка. Я шукаю не функціональні прийоми доведення алгоритмів (наприклад, асистент з доказування), а технік доведення функціонального коду (наприклад, для доведення функціональної реалізації заданого алгоритму правильним) @ MusaAl-hassy відповідь дуже близька моїй бажана відповідь. У випадку, якщо я пропустив це, а книги, які ви цитували, охоплюють і цей аспект, чи не заперечуєте ви додавати відповідні глави?
FK82

@ FK82 Ось Theorem app_assoc : ∀ l1 l2 l3 : natlist, (l1 ++ l2) ++ l3 = l1 ++ (l2 ++ l3)з розділу Списки . Чи виглядає цей приклад чимось як те, що вас цікавить? Вони починають з функціонального програмування в Coq, але потім переходять до міркувань про властивості функціональних програм. Розділи від передмови до IndPrinciples охоплюють обидва ці слова, і я б сказав, що там переплітаються програмування та міркування.
Антон Трунов

1
@ FK82 (1) Я повністю згоден з цим коментарем. (2) Можливо, ви захочете переглянути книгу Р. Берда "Мислення функціонально з Haskell" (2015). У книзі є багато прикладів міркувань про Haskell. (3) Також "Перлини функціонального алгоритму проектування" (2010) того ж автора можуть вам допомогти.
Антон Трунов

5

Виявляється, що чудовим джерелом методів доказування та прикладів доведення речей про чисті функціональні мови є помічники доказування, які зазвичай включають у свою частину мови специфікації чисту функціональну мову, на яку можна міркувати рівняльно.

Можна детальніше ознайомитись із книгою на зразок сертифікованого програмування із залежними типами для поглибленого ознайомлення з подібними міркуваннями у конкретному помічнику з доказування, а саме у Coq.


Дякую! Я насправді шукаю спеціально техніку в Haskell . Моя публікація була відредагована таким чином, щоб вона включала весь функціональний код, але це набагато вище моїх намірів.
FK82

1
Мені невідомі системи, призначені спеціально для перевірки Haskell, але я зазначу, що 1) Функціональне ядро ​​Coq (і Agda) по суті не відрізняється від Haskell (за винятком обмеження на загальні функції) та 2) Програми перевірені в Coq і Agda можна витягнути до Haskell (хоча я вважаю, видобуток до Haskell краще підтримується в Agda, де Coq більше орієнтований на окамл)
cody

Добре знати! Однак це означає, що я переписую свою програму (або відповідні частини) в Coq або Agda. Я не вважаю це розумним у моєму випадку.
FK82

Є кілька дуже експериментальних «передніх кінців», які намагаються перетворити Haskell в Isabelle або безпосередньо довести еквівалентність за допомогою Isabelle, але я не мав би занадто багато запасів у їхній зрілості. Я думаю, що переписати код в кінцевому рахунку буде менше роботи.
коді

4

Я пропоную використовувати логіку програми. Вони набагато краще справляються з ефектами, ніж набираючи системи.

Існує численна логіка програм для функціональних мов. Це стає цікавим з ефектами. Див., Наприклад, Логічне обґрунтування функцій вищого порядку з локальним станом .

Робота Артура Шаргеро інтегрує логічний підхід програми з помічниками, див., Наприклад, цю сторінку огляду .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.