Résumé
Ce cours est une introduction à la preuve de programmes en général, et à l'outil Why3 en particulier. L'outil Why3 permet d'écrire des programmes dans un langage très proche d'OCaml (polymorphisme, types algébriques, filtrage, exceptions, références, tableaux, etc.), de leur donner une spécification dans une logique du premier ordre, et de prouver leur correction à l'aide de démonstrateurs interactifs ou automatiques (Coq, Alt-Ergo, Z3, CVC3, etc.). Au travers de nombreux exemples, ce cours introduit des concepts élémentaires de preuve de programmes (pré- et postcondition, invariant de boucle, variant) mais aussi des techniques (spécification, preuve de terminaison, modélisation de structures de données).
Les notes de cours.
Les fichiers de démonstration utilisés dans les transparents et dans
les notes de cours :
Matériel
Les transparents du cours :
Exercices
Pour faire les exercices, il faut installer Why3 et un ou plusieurs
démonstrateurs. Les instructions pour cela sont sur
le site de Why3.
On lance Why3 avec la commande : why3ide fichier.mlw
Pour chaque exercice, un fichier est fourni qu'il s'agit de compléter. Les différentes questions se trouvent au début du fichier.
- le drapeau hollandais de Dijkstra : exo_flag.mlw (solution)
- parcours infixe d'un arbre : exo_fill.mlw (solution)