Les règles de raffinements permettent de transformer une spécification en suite d'instructions réalisant un calcul permettant de passer des conditions initiales aux conditions finales. La spécification initiale est purement logique, les étapes intermédiaires mélange des formules logiques et des constructions algorithmiques (structures de contrôle impératives) la "spécification" finale ne contient plus que des instructions exécutables.
Outre le langage, le système offrira à l'utilisateur une série
de commande lui permettant de raffiner une spécification par
utilisation des règles vues en cours.
Le système offrira, au minimum, une interface utilisateur sous forme
de boucle d'interaction. Les commandes essentielles seront :
- initialiser la construction d'un programme en donnant sa
spécification initiale;
- appliquer une règle de raffinement en invocant une commande
accompagnée de ses éventuels arguments, le
système affiche alors le ou les résultats de l'application sur
lesquelles on réitère le processus de raffinement.
Une session de raffinement pourrait être (suggestion de
présentation) :
()> Goal [x=N and y=M, x=M and y=N]. ()> Var z. new goal : {Var z . [x=N and y=M, y=N and x=M] } subgoal 0 {Var z . [x=N and y=M, y=N and x=M] } (0)> Seq (z=N and y=M). new goal : {Var z . [x=N and y=M, z=N and y=M] ; [z=N and y=M, y=N and x=M] } subgoal 1 [x=N and y=M, z=N and y=M] subgoal 2 [z=N and y=M, y=N and x=M] (1)> Aff z (x). new goal : {Var z . z := x ; [z=N and y=M, y=N and x=M] } subgoal 2 [z=N and y=M, y=N and x=M] (2)> Seq (z=N and x=M). new goal : {Var z . z := x ; [z=N and y=M, z=N and x=M] ; [z=N and x=M, y=N and x=M] } subgoal 2.1 [z=N and y=M, z=N and x=M] subgoal 2.2 [z=N and x=M, y=N and x=M] (2.1)> Aff x (y). new goal : {Var z . z := x ; x := y ; [z=N and x=M, y=N and x=M] } subgoal 2.2 [z=N and x=M, y=N and x=M] (2.2)> Aff y (z). program : {Var z . z := x ; x := y ; y := z } ()>
L'auteur du projet verra d'un oeil extrèment favorables que les réalisateurs du projet proposent des règles de raffinements plus riches que celles de base vues en cours. On peut obtenir de telles macros règles par combinaison des règles de base.