Czy jest jakieś narzędzie do prototypowania semantyki języka programowania i systemu typów, a także umożliwia pewnego rodzaju sprawdzanie modelu standardowych właściwości, takich jak poprawność typu?
Pytam o to, ponieważ czytam książkę o stopie i zapewnia on dokładnie taką funkcjonalność, jakiej chcę, ale dla modeli wyrażonych za pomocą logiki relacyjnej.
Zdaję sobie sprawę z Ott , ale nie ma takiej możliwości „sprawdzania modelu”, ponieważ koncentruje się na generowaniu kodu dla systemów asystenta dowodu.
Wszelkie odniesienia do takiego istnienia narzędzi byłyby fajne.
reference-request
programming-languages
semantics
model-checking
Rodrigo Ribeiro
źródło
źródło
Odpowiedzi:
Chociaż istnieją ramy stworzone specjalnie w celu prototypowania języków programowania (w tym ich semantyki, systemów typów, oceny, a także sprawdzania ich właściwości), najlepszy wybór zależy od konkretnego przypadku i konkretnych potrzeb.
Powiedziawszy to, istnieje wiele (być może nie tak wyraźnych) alternatyw, które możesz wziąć (w tym te, o których już wspomniałeś):
Zauważ, że istnieje kompromis między tym, jak łatwe jest użycie frameworka / narzędzia (np. Tak proste, jak opracowanie definicji na papierze lub w lateksie), a tym, jak potężne są mechanizmy sprawdzania właściwości języka (np. Osadzanie język w twierdzeniu twierdzącym pozwala sprawdzać bardzo wyszukane właściwości).
[1] Casey Klein, John Clements, Christos Dimoulas, Carl Eastlund, Matthias Felleisen, Matthew Flatt, Jay A. McCarthy, Jon Rafkind, Sam Tobin-Hochstadt i Robert Bruce Findler. Przeprowadź badania: dotyczące skuteczności lekkiej mechanizacji. POPL, 2012.
[2] Daniel Jackson. Stop: notacja lekkiego modelowania obiektów. TOSEM, 2002.
[3] Greg Dennis, Felix Chang, Daniel Jackson. Modułowa weryfikacja kodu za pomocą SAT. ISSTA, 2006
[4] System zarządzania dowodami formalnymi Coq
[5] Formalne uzasadnienie programów. Adam Chlipala, 2016
[6] Leon automatyczny system do weryfikacji, naprawy i syntezy funkcjonalnych programów Scala
źródło