Czy istnieją adnotowane formalne systemy weryfikacji dla czysto funkcjonalnych języków programowania?

25

ACSL (Ansi C Specification Language), to specyfikacja kodu C, opatrzona specjalnymi komentarzami, która pozwala na formalną weryfikację kodu C.

Nie przyjrzałem się temu, ale wyobrażam sobie, że metody formalne stosowane w weryfikatorach ACSL byłyby podobne do Hoare Logic. Jednak w przypadku czysto funkcjonalnych języków, takich jak Haskell, nie mogę sobie wyobrazić, jakiego rodzaju formalizmu można użyć do formalnej weryfikacji.

Czy ktoś stworzył coś podobnego do ACSL , ale dla czysto funkcjonalnego języka? Jeśli nie, to czy przeprowadzono badania formalnej weryfikacji stylów opatrzonych specyfikacją dla języków funkcjonalnych?

Wiem, że istnieje pisanie zależne, które obsługuje wiele języków (Agda, Idris itp.), Ale w Haskell pisanie zależne jest trudne bez wykonywania niektórych (nieczytelnych?) Kreacji. Mając to na uwadze, a ponieważ Haskell ma o wiele lepsze wsparcie bibliotek niż Agda i Idris, uważam, że taki system funkcjonalnej weryfikacji formalnej może być przydatny, ale nie wiem, czy przeprowadzono badania nad tym, czy nie.

Nathan BeDell
źródło

Odpowiedzi:

13

Honda i Yoshida's

(prawdopodobnie) był pionierem logiki Hoare'a dla języków wyłącznie funkcjonalnych. Praca ta oparta jest na logice Hennessy-Milnera i kodowaniu funkcji Milnera w procesach, jak opisano tutaj:

Praca Régis-Gianas i wsp., O której mowa w innej odpowiedzi, jest podobna do pierwszej pracy powyżej przedstawionej przez Honda / Yoshida. Zostało to rozszerzone na skuteczne języki w stylu ML:

Wspomniane układy logiczne są nazywane kompletnie obserwacyjnie, co oznacza, że ​​semantyka operacyjna i logiczna pokrywają się. Arthur Charguéraud wykorzystał to uzupełnienie do swojej pracy nad weryfikacją programów funkcjonalnych w stylu Hoare'a w Coq.

Martin Berger
źródło
15

fa , który oferuje podobne konstrukty.

Wydaje się, że istnieje ścisła zgodność między typami zawężania a notacjami typu ACSL.

Wreszcie mogę jedynie zasugerować przyjrzenie się Agdzie i Idrisowi, ponieważ mogą one kompilować się do Haskell i mają na celu zapewnienie użytkownikowi użytecznego języka programowania (zwłaszcza Idris). Podejrzewam, że bez problemu można zintegrować biblioteki Haskell z kodem Idris.

cody
źródło
bez większych problemów - nie bardzo. Idris jest domyślnie surowy, a Haskell jest leniwy; to samo stanowi poważny problem. Zgodność z Haskell również nigdy nie była priorytetem w projektowaniu Idris.
Bartek Banachewicz
Słusznie. Agda domyślnie sprawdza zakończenie, więc takie rzeczy jak ścisłość nie są w teorii problemem . Oczywiście czas działania może być zupełnie inny.
cody
8

Jest papier w tegorocznym ICFP , rozszerzających typy dla Haskell . Artykuł dotyczy sprawdzania zakończenia, a nie pełnej logiki Hoare, ale mam nadzieję, że to początek w tym kierunku.

Powiązana sekcja pracy w tym dokumencie zawiera pewne wskazówki, takie jak Xu, Peyton-Jones i statyczne sprawdzanie kontraktu Claessena dla Haskell i Sonnex, Drossopoulou oraz Zeno i Vytiniotis Eisenbacha , Peyton-Jones, Claessen i Halo Rosen .

Ohad Kammar
źródło
1

Nasza praca nad miękką weryfikacją umów jest powiązana na OOPSLA 2012 i OOPSLA ICFP 2014 , pozwala ci pisać umowy, które są bardzo podobne do specyfikacji ACSL, a następnie albo weryfikować je statycznie, albo używać ich do kontroli dynamicznej w czasie wykonywania.

Sam Tobin-Hochstadt
źródło