• Aucun résultat trouvé

Les trois familles des langages de spécifications formelles

5.2.1 Langages de spécifications exécutables mais pas prouvables

De nombreux travaux ont porté sur la conception et l’implantation des langages de spécifi-cations exécutables. Ces efforts ont donné naissance d’une part à des langages de spécifispécifi-cations tel que ASM (Abstract State Machine), et d’autre part à des outils tels que AsmGofer, Asml et XASM, qui implémentent ces langages et offrent des environnements graphiques pour exécuter ces spécifications. Cependant, il leur manque une connexion à des outils de preuves afin de vérifier des propriétés de ces spécifications, nous donnerons dans ce qui suit une brève présentation du langage ASM et les outils XASM, Asml et AsmGofer.

5.2.1.1 Abstract State Machine

ASM est une méthodologie pour la spécification de la sémantique opérationnelle dynamique des langages de programmation, développée par Yuri Gurevich à l’Université de Michigan. La spé-cification en ASM est donnée par : des types de données, des fonctions (statiques et dynamiques) et un ensemble d’états, la sémantique des types de données et des fonctions statiques est spécifiée par des axiomes et la sémantique des fonctions dynamiques est spécifiée par des règles de tran-sition. Une spécification, vue comme un ensemble de règles de transition, combine les concepts déclaratifs de la logique du premier ordre avec les concepts de la programmation impérative. Ces spécifications sont exécutables à l’aide de plusieurs outils qui implémentent le langage ASM tels que XASM, AsmGofer et Asml.

5.2.1.2 XASM

XASM (Extensible ASM) est un outil qui implémente le langage ASM, et à partir d’une spéci-fication formelle XASM génère un programme écrit dans le langage C. L’outil XASM fournit une animation graphique en cours de l’exécution de ces spécifications, mais il n’a pas de connexion à des outils de preuves.

5.2.1.3 AsmGofer

AsmGofer est une extension du système TkGofer, qui utilise Gofer comme un langage de pro-grammation fonctionnelle et les concepts d’ASM pour la spécification formelle de la sémantique opérationnelle dynamique. Une telle spécification (appelée script en AsmGofer) est exécutable sur plusieurs plates-formes. AsmGofer peut générer des vues graphiques pour des spécifications for-melles en cours de l’exécution. Comme XASM, AsmGofer n’est pas relié à des outils de preuves. 5.2.1.4 AsmL

Asml (Abstract State Machine Language) est un langage de spécifications exécutables, intégré dans Microsoft Visual Studio 6.0, ce langage est basé sur la méthodologie ASM et sur l’approche orientée objets. Comme XASM et AsmGofer, Asml n’a pas de connexion à des outils de preuves.

5.2.1.5 Typol

Typol est un langage de spécifications sémantiques implémenté dans le système Centaur. La spécification d’un langage de programmation en Typol est donnée par un ensemble de jugements. A chaque jugement est associé un ensemble de règles regroupées dans un set. Une règle Typol est constituée d’un ensemble de séquents et d’un ensemble de prédicats Prolog importés. Les spé-cifications sémantiques écrites en TYPOL peuvent être traduites en PROLOG pour produire des vérificateurs de type et des évaluateurs. Delphine Terrasse [?, ?] a défini une traduction de Typol dans le système de preuves interactif Coq pour une classe de langages, afin de développer des preuves des propriétés des spécifications Typol.

5.2.2 Langages de spécifications prouvables mais pas exécutables

L’intérêt porté au développement des preuves des propriétés des langages a conduit à l’appa-rition de plusieurs outils de preuves. La plupart de ces outils fournit des spécifications non exé-cutables. Nous donnons dans ce qui suit une brève présentation de deux outils de preuves PVS et Isabelle/HOL.

5.2.2.1 PVS

PVS est un système de vérification, développé au sein de l’équipe des méthodes formelles du SRI International, écrit en Common LISP. PVS se compose d’un langage de spécification et d’un outil interactif d’aide à la preuve. Le langage de spécification est basé sur la logique d’ordre supérieur, enrichie par une notion de sous-typage. PVS introduit de multiples extensions permettant les types dépendants, la paramétrisation, la possibilité de construire des types de données abstraits et la modélisation des fonctions partielles. La notion de définition inductive n’est pas disponible dans ce système. Parce que le langage de spécification de PVS est conçu pour servir comme un langage de spécification logique et non un langage de programmation, la spécification en PVS n’est pas toujours exécutable.

5.2.2.2 Isabelle/HOL

Isabelle/HOL est un assistant de preuve, développé à Cambridge et Munich, permet d’écrire des spécifications des systèmes et de construire des preuves sur ces spécifications. Le système Isabelle/HOL est constitué de deux assistants de preuves : Isabelle et HOL. Parce que les fonctions dans Isabelle/HOL sont vues comme des relations, comme PVS la spécification en Isabelle/HOL n’est pas toujours exécutable.

5.2.3 Langages de spécifications exécutables et prouvables

Afin d’unifier ces deux approches complémentaires, plusieurs chercheurs se sont penchés avec beaucoup d’intérêt sur l’étude et la conception des nouveaux langages de spécification exécutable et d’implémenter ou de connecter ces langages à des systèmes de preuves. Ceci a donné naissance

à plusieurs langages et outils tels que KIV et CASL. Nous donnerons dans ce qui suit une brève présentation de ELAN, COQ, CASL et KIV.

5.2.3.1 ELAN

L’INRIA a développé un environnement, nommé ELAN, pour conduire des preuves en logique classique, de spécifier et d’exécuter en logique de réécriture. ELAN, écrit en Java, est modulaire et chaque module définit un ensemble de sortes, une liste d’opérateurs avec leurs types et un ensemble de règles, les règles dans ELAN peuvent être conditionnelles et sont enrichies par une construction d’affectations locales. ELAN contient un interpréteur et un compilateur qui génère un programme C à partir d’un programme ELAN. L’exécution des spécifications (règles) ELAN est non détermi-niste, ELAN est le premier langage de programmation basé sur la logique de réécriture qui utilise la notion de stratégies : décrivant des calculs et contrôlant l’application des règles de réécriture. ELAN permet d’effectuer des preuves par réécriture. Une interface entre ELAN et le système de preuves Coq est en cours de réalisation.

5.2.3.2 Coq

Coq est un système de vérification à usage général qui intègre un langage de spécification basé sur la logique d’ordre supérieur typée et un assistant de preuve interactif. Coq développé à l’INRIA fournit une interface interactive dans laquelle l’utilisateur développe une théorie et énonce des pro-priétés exprimées dans le langage de spécification. Le langage de spécification de Coq comporte les opérations standard des langages de programmation fonctionnelle tel que les fonctions récursives. Le système Coq est basé sur le calcul des constructions inductives. Les types inductifs de Coq sont pour nous essentiels car les termes et les relations sémantiques d’un langage de programma-tion sont des structures récursives. Coq repose sur une théorie des types constructifs qui permet de modéliser des fonctions complexes sous la forme d’algorithmes exécutables. Le système Coq permet la production de programmes (extraction) dans plusieurs dialectes de ML tels que Caml Light et Gofer.

5.2.3.3 CASL

Le projet CoFI (Common Framework Initiative for Algebraic Specifications) rassemble une grande partie de la communauté européenne travaillant sur les spécifications algébriques. Il en émane la proposition du langage CASL (Common Algebraic Spécification Language) synthétisant les principales caractéristiques des langages algébriques. Un des objectifs du projet CoFI est de réutiliser les outils existants, tel que ELAN, dans la communauté pour exécuter les programmes CASL et vérifier leurs propriétés. L’outil de preuve HOL-CASL est développé spécialement pour CASL afin de prouver des propriétés des spécifications CASL. CASL permet la spécification de sous-typage, des fonctions partielles, des prédicats et des axiomes de la logique de premier ordre. CASL remplace l’utilisation des règles d’inférences dans la spécification de SOS (sémantique opérationnelle structurelle) par l’utilisation de l’implication.

HasCASL (Haskell and Common Algebraic Spécification Language) est un langage de spécifi-cations sémantiques développé par le projet DFG en Allemagne. Le but du projet est la conception et la mise en place d’une extension évoluée de CASL qui établit une connexion avec le langage de programmation fonctionnelle Haskell.

5.2.3.4 KIV

KIV est un outil pour le développement des systèmes formels, écrit en Java et développé à l’Université de Kalsruhe. L’outil KIV utilise une interface graphique pour le développement des preuves, ces preuves sont représentées en KIV par des arbres (Figure ??) : la racine de l’arbre représente le théorème et les feuilles de l’arbre représentent les axiomes. La spécification peut se faire en Abstract State Machine (ASM) ou en logique d’ordre supérieur.

FIGURE5.1 – Représentation d’un arbre de preuve en KIV

L’outil KIV implémente un langage de spécification algébrique exécutable similaire à CASL. Cet outil fournit une vue graphique (arbre, Figure ??) des preuves pour aider l’utilisateur à construire ces preuves, mais pas une vue graphique pour la visualisation de l’exécution de spécifications KIV. L’outil KIV implémente aussi un langage de programmation impérative similaire à Pascal qui est exécutable.