Chcę przedstawić dowody dla części programu Haskell, który piszę w ramach mojej pracy magisterskiej. Jednak jak dotąd nie udało mi się znaleźć dobrej pracy referencyjnej.
Książka wprowadzająca Grahama Huttona Programowanie w Haskell ( Google Books ) - którą czytam podczas nauki Haskell - porusza kilka technik rozumowania programów, takich jak
- rozumowanie równań
- za pomocą nienakładających się wzorów
- indukcja listy
w rozdziale 13, ale nie jest to zbyt szczegółowe.
Czy są jakieś książki lub artykuły, które możesz polecić, które zawierają bardziej szczegółowy przegląd formalnych technik sprawdzania kodu Haskell lub innego funkcjonalnego kodu?
Możesz zacząć od
Możesz pominąć (lub przejrzeć) części teorii języka programowania i nauczyć się, jak radzić sobie z formalnymi dowodami, poczynając od Wstępu aż po IndPrinciples. Książka jest naprawdę dobrze napisana i pouczająca.
Następnie możesz kontynuować
Uwaga: VFA jest wciąż w wersji beta!
źródło
Theorem app_assoc : ∀ l1 l2 l3 : natlist, (l1 ++ l2) ++ l3 = l1 ++ (l2 ++ l3)
z rozdziału Listy . Czy ten przykład przypomina coś, co Cię interesuje? Zaczynają od programowania funkcjonalnego w Coq, a następnie przechodzą do wnioskowania o właściwościach programów funkcjonalnych. Rozdziały od Przedmowy do IndPrinciples obejmują oba z nich, i powiedziałbym, że programowanie i rozumowanie są ze sobą powiązane.Okazuje się, że doskonałym źródłem technik dowodowych i przykładów do udowodnienia rzeczy o czysto funkcjonalnych językach są asystenci dowodowi, którzy zwykle zawierają jako część swojego języka specyfikacji czysty język funkcjonalny, w którym możliwe jest racjonalne uzasadnienie.
Ktoś może chcieć zajrzeć do książki takiej jak Certyfikowane programowanie z typami zależnymi, aby uzyskać szczegółowe wprowadzenie do tego rodzaju rozumowania w konkretnym asystencie dowodowym, a mianowicie Coq.
źródło
Sugeruję użycie logiki programu. Radzą sobie znacznie lepiej z efektami niż systemy pisania.
Istnieje wiele logiki programów dla języków funkcjonalnych. Staje się to interesujące z efektami. Patrz np. Logiczne uzasadnienie funkcji wyższego rzędu w stanie lokalnym .
Praca Arthura Charguérauda integruje logikę programu z asystentami dowodowymi, patrz np. Ta strona przeglądu .
źródło