Ich möchte Beweise für Teile eines Haskell-Programms liefern, das ich im Rahmen meiner Abschlussarbeit schreibe. Bisher habe ich jedoch kein gutes Nachschlagewerk gefunden.
Graham Huttons Einführungsbuch Programming in Haskell ( Google Books ), das ich beim Lernen von Haskell gelesen habe, geht auf einige Techniken ein, um über Programme wie z
- Gleichungsdenken
- Verwenden nicht überlappender Muster
- Liste Induktion
in Kapitel 13, aber es ist nicht sehr ausführlich.
Gibt es Bücher oder Artikel, die Sie empfehlen können und die einen detaillierteren Überblick über formale Prüftechniken für Haskell oder anderen funktionalen Code bieten?
Sie können mit beginnen
Sie können die Teile der Programmiersprachtheorie überspringen (oder überfliegen) und nur lernen, wie man mit formalen Beweisen vom Vorwort bis zu den Grundsätzen umgeht. Das Buch ist wirklich gut geschrieben und aufschlussreich.
Dann möchten Sie vielleicht fortfahren
Ein Hinweis zur Warnung: VFA befindet sich noch in der Beta-Version!
quelle
Theorem app_assoc : ∀ l1 l2 l3 : natlist, (l1 ++ l2) ++ l3 = l1 ++ (l2 ++ l3)
aus dem Kapitel Listen . Sieht dieses Beispiel so aus, wie Sie es interessieren? Sie beginnen mit der funktionalen Programmierung in Coq, gehen dann aber zu den Überlegungen über die Eigenschaften von funktionalen Programmen über. Die Kapitel von Vorwort bis IndPrinciples behandeln beide, und ich würde sagen, dass Programmierung und Argumentation dort miteinander verflochten sind.Es stellt sich heraus, dass eine ausgezeichnete Quelle für Beweisverfahren und Beispiele für den Beweis von Dingen über reine Funktionssprachen Beweisassistenten sind, die normalerweise als Teil ihrer Spezifikationssprache eine reine Funktionssprache enthalten, auf der es möglich ist, gleich zu argumentieren.
Vielleicht möchten Sie ein Buch wie Certified Programing with Dependent Types konsultieren, um eine ausführliche Einführung in diese Art von Argumentation in einem bestimmten Proof-Assistenten, nämlich Coq, zu erhalten.
quelle
Ich schlage vor, Programmlogiken zu verwenden. Sie gehen viel besser mit Effekten um als Tippsysteme.
Es gibt zahlreiche Programmlogiken für funktionale Sprachen. Dies wird mit Effekten interessant. Siehe z. B. logisches Denken für Funktionen höherer Ordnung mit lokalem Status .
Die Arbeit von Arthur Charguéraud integriert den Programmlogik-Ansatz mit Proof-Assistenten, siehe z . B. diese Übersichtsseite .
quelle