Чи є анотована формальна система верифікації для чисто функціональних мов програмування?


25

ACSL (Мова специфікації Ansi C) - це специфікація коду С, анотація із спеціальними коментарями, що дозволяє офіційно перевірити код C.

Я не розглядав це, але уявляю, що формальні методи, що використовуються у верифікаторах ACSL, були б схожими на Лоріку Лоара . Однак для чисто функціональних мов, таких як Haskell, я не уявляю, який формалізм буде використовуватися для формальної перевірки.

Хтось зробив щось подібне до ACSL , але для чистої функціональної мови? Якщо ні, то чи проводились якісь дослідження щодо формальної перевірки стилю з анотованими стилями для функціональних мов?

Я знаю, що існує залежна типізація, яку підтримують багато мов (Agda, Idris тощо), але в Haskell залежно від того, щоб ввести текст, важко, не роблячи деякого (нечитабельного?) Типу майстра. Зважаючи на це, і оскільки Haskell має набагато кращу підтримку бібліотеки, ніж Agda та Idris, я вважаю, що така система функціональної формальної перевірки може бути корисною, але я не знаю, чи було проведено дослідження з цього питання чи ні.

Відповіді:


13

Хонда та Йосіда

(мабуть) піонерська логіка Хоара для суто функціональних мов. Ця робота заснована на логіці Хеннесі-Мілнера та кодуванні Мілнера функцій в процеси, як описано тут:

Робота Регіса-Джанаса та ін, згадана в іншій відповіді, аналогічна першій роботі Хонди / Йошиди. Це було поширено на ефективні мови стилю ML:

Згадана логіка - це те, що називається спостережно завершеним, тобто оперативна та логічна семантика збігаються. Артур Шарро використовував цей комплект для своєї роботи з перевірки функціональних програм стилю Хоара в Coq.


15

Ж

Здається, існує тісна відповідність між типами уточнення та ACSL, як позначення.

Нарешті, я можу лише запропонувати більш детально ознайомитись з Агдою та Ідрісом, оскільки вони можуть скластись до Haskell і спрямовані на надання користувачу корисної мови програмування (особливо Idris). Я підозрюю, що можливо інтегрувати бібліотеки Haskell в код Idris без особливих проблем.


без зайвих клопотів - не дуже. Ідріс за замовчуванням суворий, а Хаскелл лінивий; саме по собі це є основною проблемою. Сумісність з Haskell також ніколи не була дуже важливим пріоритетом для дизайну Idris.
Bartek Banachewicz

Досить справедливо. Однак Agda перевіряє припинення за замовчуванням, тому такі речі, як суворість, теоретично не є проблемою . Звичайно, час роботи може бути різним.
коді

11

Дивіться також роботу кандидатської дисертації Янна Регіс-Джанаса з Франсуа Поттьє: Логіка Хоара для функціональних програм за викликом за значенням (MPC'08) . Ця робота була розширена, щоб охопити звичайні побічні ефекти МЛ Йоганнеса Каніга та Жана-Крістофа Філіятра у 2009 році: Хто: верифікатор ефективних програм вищого порядку .


8

Існує стаття в цьому році МКВП , уточнення типів для Haskell . У статті йдеться про перевірку припинення, а не про повну логіку Хоара, але, сподіваємось, це початок у цьому напрямку.

У відповідному робочому розділі в цьому документі містяться деякі покажчики, такі як Сю, Пейтон-Джонс, і статична перевірка контракту Классена на Haskell , Sonnex, Drossopoulou та Eenoenbach, Zeno and Vytiniotis, Peyton-Jones, Claessen і Halo Rosen .


1

Наша робота з м'якої перевірки контрактів пов'язана, на OOPSLA 2012 та ICFP 2014 , ви можете писати договори, які дуже схожі на специфікації ACSL, а потім або статично перевіряти їх, або використовувати їх динамічні перевірки під час виконання.

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