Je veux fournir des preuves pour des parties d'un programme Haskell que j'écris dans le cadre de ma thèse. Jusqu'à présent cependant, je n'ai pas réussi à trouver un bon ouvrage de référence.
Le livre d'introduction de Graham Hutton, Programming in Haskell ( Google Books ) - que j'ai lu tout en apprenant Haskell - aborde quelques techniques de raisonnement sur des programmes tels que
- raisonnement équationnel
- en utilisant des motifs qui ne se chevauchent pas
- liste d'induction
dans le chapitre 13, mais ce n'est pas très en profondeur.
Y a-t-il des livres ou des articles que vous pouvez recommander qui fournissent un aperçu plus détaillé des techniques de vérification formelles pour Haskell, ou un autre code fonctionnel?
la source
Vous pouvez commencer par
Vous pouvez ignorer (ou survoler) les parties théoriques du langage de programmation et apprendre uniquement à gérer les preuves formelles à partir de la préface jusqu'à IndPrinciples. Le livre est vraiment bien écrit et éclairant.
Ensuite, vous voudrez peut-être continuer
Un avertissement: VFA est toujours en version bêta!
la source
Theorem app_assoc : ∀ l1 l2 l3 : natlist, (l1 ++ l2) ++ l3 = l1 ++ (l2 ++ l3)
extrait du chapitre Listes . Cet exemple ressemble-t-il à la chose qui vous intéresse? Ils commencent par la programmation fonctionnelle dans Coq, puis passent au raisonnement sur les propriétés des programmes fonctionnels. Les chapitres de la Préface à IndPrinciples couvrent les deux, et je dirais que la programmation et le raisonnement y sont intimement liés.Il s'avère qu'une excellente source de techniques de preuve et d'exemples pour prouver les choses sur les langages fonctionnels purs sont les assistants de preuve qui incluent généralement dans leur langage de spécification un langage fonctionnel pur sur lequel il est possible de raisonner équationnellement.
On pourrait vouloir consulter un livre comme Certified Programing with Dependent Types pour une introduction approfondie à ce type de raisonnement dans un assistant de preuve spécifique, à savoir Coq.
la source
Je suggère d'utiliser les logiques du programme. Ils gèrent bien mieux les effets que les systèmes de frappe.
Il existe de nombreuses logiques de programme pour les langages fonctionnels. Cela devient intéressant avec des effets. Voir par exemple le raisonnement logique pour les fonctions d'ordre supérieur avec l'état local .
Le travail d'Arthur Charguéraud intègre l'approche logique du programme avec les assistants de preuve, voir par exemple cette page de présentation .
la source