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.

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.


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.


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



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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.