Sous-sections
Mots clés : formules booléennes,
vérification de programme, Coq .
Participant : Laurent
Théry.
L'algorithme de Stålmarck est un des plus efficaces pour
déterminer si une formule booléenne est une tautologie. En
1998, lors de son stage de première année de magistère,
Pierre Letouzey avait prouvé la correction de l'algorithme de
base et en avait dérivé une première implantation certifiée.
Cette implantation étant peu efficace, un ensemble
d'optimisations permettant d'appliquer la nouvelle
implantation à des problèmes de taille conséquente (plus de
500 connecteurs logiques) a été validé.
Ce travail a aussi permis de développer à l'intérieur de
Coq une tactique qui se sert de l'algorithme de Stålmarck
pour prouver des tautologies. La solution d'interpréter
directement l'algorithme dans Coq ayant des problèmes de
performance, l'algorithme a été divisé en une première phase
de recherche et une seconde de vérification. La première
phase est effectuée en dehors de Coq et retourne en cas de
succès une trace d'exécution. L'interprétation de cette trace
d'exécution nécessitant moins de calculs est effectuée dans
Coq et permet d'accepter la tautologie en toute sûreté.
Ce travail a donné lieu à une publication dans les actes
de la conférence TPHOL [6].
Les résultats de ce travail sont accessibles par le web à
l'adresse suivante http://www-sop.inria.fr/lemme/stalmarck/index.html.
Mots clés : nombres flottants, norme
IEEE754, certification .
Participant : Laurent
Théry.
Dans le cadre de l'action de recherche coopérative AOC
(Arithmétique des Ordinateurs Certifiée), Laurent Théry a
commencé la formalisation des flottants machine suivant la
norme IEEE 754. S'inspirant d'un premier travail de Patrick
Loiseleur, il a introduit les nombres flottants et prouvé
certaines de leurs propriétés élémentaires. Ce travail
servira de base pour les travaux ultérieurs de l'action
AOC.
Participants : Michel
Hirschowitz, Laurent Théry.
Dans le cadre de son stage de maîtrise (1 mois), Michel
Hirschowitz a développé une bibliothèque permettant
d'effectuer des calculs (addition, soustraction,
multiplication et division) dans une base arbitraire dans le
démonstrateur Coq. En plus de ces opérations, une fonction de
conversion permet de passer d'une base à l'autre. Ce travail
se place dans le cadre de l'action AOC.
Participants : Sébastien Bardin,
Laurent Théry.
Dans le cadre de première année à l'IIE (2 mois et demi),
Sébastien Bardin s'est attaqué à la formalisation des
expansions flottantes dans Coq. Une expansion flottante est
une liste de nombres flottants décroissante. Le nombre
representé par une expansion est la somme de ses éléments. On
peut définir sur ces expansions une arithmétique qui permet
d'effectuer du calcul exact sur de grands nombres. Sébastien
Bardin a introduit les notions de base des expansions
s'appuyant sur la formalisation des flottants machines. Il a
ensuite prouvé la correction de l'opérateur arithmétique
FastTwoSum qui, étant donné deux nombres flottants,
retourne une expansion formée de l'arrondi de leur somme et
de son erreur . Il a ensuite formalisé l'addition de deux
expansions, sans en prouver cependant la correction. Ce
travail se place dans le cadre de l'action AOC.
Participant : Venanzio
Capretta.
Durant son séjour de deux mois dans le projet, Venanzio
Capretta (en thèse avec H. Barendregt à Niemegen) a démontré
en Coq la correction de la tranformée de Fourier rapide et de
son inverse. Pour cela, il a utilisé une représentation
particulière des polynÔmes en arbres avec les coefficients
des puissances paires dans la branche gauche, et les
coefficients des puissances impaires dans la branche droite,
et cela récursivement.
Pour faciliter les preuves d'égalités sur ces arbres, il a
utilisé une méthode de réflexion : il a défini un type des
contextes d'arbres et un opérateur qui prouve l'égalité des
substitutions de deux arbres égaux dans un même contexte.
La représentation en arbres n'est pas bonne pour prouver
la correction de la transformée de Fourier inverse. Pour cela
il a utilisé une deuxième représentation des polynÔmes comme
fonctions d'un type fini vers le domaine des coefficients.
Pour conclure ce développement, il a encore à prouver que les
deux représentations sont équivalentes.
Venanzio Capretta a utilisé Pcoq puis Ctcoq pour
développer les preuves. Ces outils lui ont permis de
développer les preuves plus rapidement qu'avec les outils
auxquels il était habitué.
Participants : Antonia Balaa,
Yves Bertot.
Nous avons continué cette année l'étude de l'utilisation
des fonctions récursives basées sur des ordres bien fondés
dans Coq. Ces résultats ont mené à l'implémentation d'un jeu
de commandes utilisables dans le système de preuve Coq. Ces
commandes permettent la définition d'une fonction récursive
basée sur un ordre bien fondé et effectuent une analyse sur
cette fonction pour construire automatiquement un théorème
important sur cette fonction.
Ces travaux ont donné lieu à une publication dans la
conférence TPHOLs'2000 ``Fix-point Equations for Well-Founded
Recursion in Type Theory'' [4].
L'adresse Web de cette conférence est :
http://www.cse.ogi.edu/tphols2000/default.htm.
Participants : Nicolas Magaud,
Yves Bertot.
Nous avons commencé un travail sur la traduction de
preuves d'une structure de donnée à une autre. Les
expériences menées les années précédentes sur la
certification d'algorithmes de calcul mathématique ont montré
que les développements de preuves étaient très sensibles aux
choix de structure de données. En particulier, si le
développeur découvre qu'il doit changer sa structure de
donnée pour améliorer l'efficacité de l'algorithme ou
l'aisance avec laquelle il peut faire une preuve, il est
souvent amené à refaire une grande partie du travail de
preuve déjà effectué. Notre objectif est de comprendre si une
grande partie de se travail peut être automatisée, en
effectuant des traductions automatiques de preuves d'une
structure de donnée dans une autre.
Une première solution a été ébauchée et une implémentation
a été construite. Elle mène à un module qui peut être chargé
dans le système et a déjà été utilisé avec succès pour
traduire des démonstrations entre plusieurs faÇons de
représenter les entiers naturels.
Ces travaux sont décrits dans un rapport [15] et
ont donné lieu à un article soumis pour publication [18].
Participants : David Pichardie,
Yves Bertot.
Pour élargir le spectre des algorithmes certifiés en Coq,
nous avons abordé la certification d'algorithmes de géométrie
algorithmique. Nous nous sommes basés sur un ouvrage de D.
Knuth décrivant les suppositions de base qui permettent de
comprendre le fonctionnement des algorithmes d'enveloppe
convexe. En partant d'une représentation du plan comme
R2, nous avons
montré que les suppositions de Knuth (qu'il appelle axiomes)
étaient vérifiées, et nous avons utilisé ces propositions
pour établir le bon fonctionnement d'un algorithme de calcul
d'enveloppe convexe. Nous avons ensuite montré que ce travail
s'adaptait bien pour certifier des algorithmes différents. Le
point qui reste à approfondir dans ce domaine est le
traitement des positions dégénérées, habituellement ignorées
par les auteurs du domaine de la géométrie algorithmique,
mais incontournables en terme de certification de
logiciel.
Participants : Loïc Pottier,
Laurence Rideau.
Suite à des discussions avec un ingénieur d'Alcatel Space
Industry (Cannes), nous nous sommes intéressés à formaliser
les quaternions en Coq. En effet le produit de quaternions
est l'opération de base des codes permettant le contrÔle
d'attitude des satellites. Nous avons d'une part formalisé
les quaternions sur R en Coq
et prouvé qu'ils formaient un corps non commutatif. D'autre
part, partant d'une procédure en ADA, nous avons formalisé un
produit de vecteurs de dimension 4 (incluant la gestion de
mémoire) et nous avons prouvé en Coq que le vecteur résultat
de la procédure calculait bien le produit des quaternions
correspondants. Cette preuve a été menée en supposant que
nous travaillions sur les Réels. L'étape suivante (en cours)
consiste à refaire la preuve avec des flottants (puisque
c'est le cas du programme ADA de départ). Pour cela, nous
voulons nous appuyer sur la formalisation de la norme IEEE754
des flottants réalisée par Laurent Théry dans le cadre
d'AOC.