Participant : Catherine Parent
Parallèlement à cette possibilité d'extraire des programmes de preuves de totalité de leur spécification, C. Parent a mis au point une méthode permettant dans un premier temps d'écrire un programme, puis ensuite de prouver sa correction. Plus précisément, le programme est utilisé pour guider la recherche automatique d'une preuve de totalité de la spécification, dont peut ensuite être extrait un programme identique au programme de départ.
Cette méthode qui est vue comme une tactique particulière de preuve s'appuie sur une analogie structurelle forte entre la preuve recherchée et le programme connu. Cette tactique engendre ensuite les lemmes sans contenu calculatoire (c'est-à-dire dont la preuve ne laisse pas de trace dans le programme extrait) qui impliquent la correction du programme.
Un point difficile est de retrouver des étapes de preuves essentielles qui sont invisibles dans un programme [30]. Une autre difficulté est d'engendrer les bonnes spécifications pour les sous-programmes du programme de départ. Cela ne peut pas se faire toujours automatiquement. Le langage d'écriture des programmes a donc été enrichi de manière à inclure des spécifications comme annotations des sous-programmes.
L'utilisation de variables existentielles a également
été étudiée. La tactique Program
peut être vue comme
une exécution particulière des programmes. Les programmes sont
exécutés en termes de preuve en ajoutant des variables
existentielles qui correspondent aux sous-buts de la preuve pour
lesquels l'information de preuve manque. Cette exécution est
supposée complète pourvu que les programmes soient suffisamment
annotés.
Cette méthode est décrite en détails dans [13] qui est une version abrégée de [3,31].