Pour ce travail, nous utiliserons Why3, (éventuellement Eclipse) et Isabelle. Les instructions d'installation et d'utilisation sont données sur cette page.
La syntaxe Micro C est décrite ici.
Méthode du paysan russe
Cette technique permet de calculer le produit de deux entiers en n'utilisant que la somme, la différence, et les multiplication et division entières par 2 (décalages d'un bit à gauche et à droite).
Cet exercice doit vous permettre de vérifier que votre environnement de travail fonctionne correctement, il n'y a rien à compléter dans le code Micro C fourni ci-dessous pour prouver la correction du programme.
Partie entière de la racine carrée d'un entier
Écrire en Micro C une fonction isqrt
calculant la partie entière de la racine carrée d'un entier en utilisant la propriété suivante : {$$n^2=\sum_{i=0}^{n-1}(2i+1)$$} Ajouter les prérequis, post-condition et invariant pour démontrer que votre code calcule bien cette partie entière. Ajouter un variant pour montrer que le programme termine. Le code Micro C vous est fourni ci-dessous.
Calcul du PGCD par la méthode d'Euclide
Faire de même avec un programme qui calcule le PGCD de deux entiers par soustractions successives. Il faudra définir un prédicat is_gcd(int x, int y, int d)
qui est vrai lorsque d est le PGCD de x et y. Vous aurez pour cela besoin d'un prédicat divides(int x, int y)
qui indique si x divise y, ainsi que d'autres prédicats auxiliaires selon votre façon de modéliser ce problème. Le code Micro C vous est fourni ci-dessous.