Vérification de modèles

Un article de Wikipédia, l'encyclopédie libre.
(Redirigé depuis Model checking)
Aller à : navigation, rechercher
image illustrant l’informatique image illustrant l’informatique théorique image illustrant la logique
Cet article est une ébauche concernant l’informatique, l’informatique théorique et la logique.

Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants.

Principe du model checking.

En informatique, la vérification de modèles, ou model checking en anglais, est le problème suivant : vérifier si le modèle d'un système (souvent informatique ou électronique) satisfait une spécification, par exemple, on souhaite vérifier qu'un programme ne se bloque pas, qu'une variable n'est jamais nulle, etc. Généralement, la spécification est écrite dans un langage, souvent en logique temporelle. La vérification est généralement faite de manière automatique. Sur le plan pratique, la vérification de modèles est devenue, au niveau industriel, la méthode de vérification de code et de systèmes matériels la plus populaire et la plus utilisée aujourd'hui[réf. nécessaire].

Histoire[modifier | modifier le code]

Un des pionniers est Amir Pnueli, qui reçut le prix Turing en 1996 pour « […] seminal work introducing temporal logic into computing science » (« […] travaux fondateurs qui introduisent la logique temporelle en informatique »)[1]. Le model checking commence avec les travaux de Edmund M. Clarke, E. Allen Emerson[2],[3],[4] et Jean-Pierre Queille et Joseph Sifakis[5]. au tout début des années 1980. Clarke, Emerson et Sifakis se sont vu attribuer le prix Turing 2007 pour leurs travaux sur le model checking[6],[7].

Description[modifier | modifier le code]

Dans cette section, on précise ce que l'on entend par modèle et propriété puis par le problème de model checking.

Modèle[modifier | modifier le code]

Système de transition d'états pour un distributeur de boissons.

Le système est modélisé par un système de transition d'états. Il s'agit d'un graphe orienté : un sommet représente un état du système[8] et chaque arc représente une transition[9], c'est-à-dire une évolution possible du système d'un état donné vers un autre état. Chaque état du graphe orienté est étiqueté par l'ensemble des propositions atomiques vraies à ce point d'exécution (par exemple, i=2, le processeur 3 est en attenteetc.). Un tel graphe est aussi appelé une structure de Kripke.

Exemple du distributeur de boissons[modifier | modifier le code]

On donne ici l'exemple d'un distributeur de boissons qui peut être dans 4 états[10] : attente d'une pièce de monnaie, sélection d'une boisson, distribution d'une bouteille d'eau minérale et distribution d'une bouteille de jus d'orange.

Exemple de l'ascenseur[modifier | modifier le code]

L'état du système est décrit par le niveau courant de l'ascenseur entre 0 et 3, l'état des appels (4 boutons, un par étage) et si l'ascenseur bouge et s'il patrouille vers le haut ou vers le bas[11] (il y a donc 4 X 2⁴ X 2 X 2 = 256 états).

Propriété[modifier | modifier le code]

La propriété à vérifier est écrite par une formule de logique temporelle. Par exemple, si l'on souhaite vérifier que x = 0 une infinité de fois, on peut écrire la formule GF(x = 0) qui se lit « toujours, dans le futur, x = 0 ». On distingue :

  • les propriétés de sûreté (l'ascenseur bouge toujours avec les portes fermées) ;
  • les propriétés de vivacité (si l'ascenseur est appelé à un certain étage, alors il ira à cet étage).

Exemple du distributeur de boissons[modifier | modifier le code]

Par exemple, (GFa → (G(s → F(e ou j))) (si la machine attend une infinité de fois une pièce, alors toujours, dès que l'on sélectionne une boisson, dans le futur, une boisson (eau minérale ou jus d'orange) est délivrée) est une propriété vraie pour le distributeur de boissons.

Problème du model checking[modifier | modifier le code]

L'entrée du problème du model checking est un modèle (typiquement un système de transition d'états) et une propriété (typiquement écrite dans une logique temporelle). En sortie, on souhaite savoir si la propriété est vérifiée et, le cas échéant, un contre-exemple d'une exécution du système qui falsifie la propriété.

Algorithmes[modifier | modifier le code]

Méthodes explicites[modifier | modifier le code]

Pour des propriétés de sûreté (toujours, p est fausse), on peut faire un parcours en profondeur du graphe et vérifier que chaque état vérifie p. Des algorithmes d'étiquettage existe pour la logique temporelle arborescente (en) (CTL). D'autres méthodes sont fondées sur les automates. On transforme la négation de la formule à vérifier en un automate puis on fait le produit cartésien synchrone de l'automate et du modèle. On se ramène alors à tester si le langage de l'automate produit est vide ou non.

Méthodes symboliques[modifier | modifier le code]

Parcourir (ou énumérer) explicitement tous les mondes de la structure de Kripke peut être coûteux, c'est pourquoi des méthodes symboliques, introduites par Ken McMillan et Ed Clarke sont plus pertinentes. Une approche, répandue pour la vérification de propriétés exprimées dans la logique temporelle arborescente, est fondée sur la représentation symbolique du modèle. De nombreuses méthodes de représentation d'ensembles d'états ont vu le jour[réf. nécessaire]. La plus connue utilise les diagrammes de décision binaire (BDD).

Discussions[modifier | modifier le code]

Model checking borné[modifier | modifier le code]

Au lieu de considérer l'ensemble des traces d'exécution du système, on peut se limiter à des traces finies, de longueur bornée : c'est le model checking borné[réf. nécessaire]. L'existence d'une trace vérifiant une certaine propriété est équivalente à la satisfiabilité d'une certaine formule booléenne. En effet, si un état du système est décrit par un k-uplets booléens, et que l'on s'intéresse aux traces de longueur bornée par un certain n, on se ramène au problème de la satisfiabilité d'une formule propositionnelle (problème SAT). Plus précisément, si une formule identifie les états initiaux du système, une formule les états dont on veut tester l'accessibilité, et une formule est une relation de transition, alors on considère la formule booléenne sont des propositions atomiques qui représentent l'état à l'étape i de l'exécution du système. Il existe divers logiciels, appelés solveurs SAT, qui peuvent décider « efficacement en pratique » le problème SAT. De plus, ces logiciels fournissent habituellement un exemple de valuation satisfaisant la formule en cas de succès. Certains peuvent produire des éléments d'une preuve de non satisfiabilité en cas d'échec.

Une évolution récente[réf. nécessaire] est l'ajout, en sus de variables booléennes, de variables entières ou réelles. Les formules atomiques ne sont alors plus seulement les variables booléennes, mais des prédicats atomiques sur ces variables entières ou réelles, ou plus généralement des prédicats pris dans une théorie (par exemple , etc.). On parle alors de satisfiabilité modulo une théorie (par exemple, on pourra considérer comme prédicats atomiques les égalités et inégalités linéaires).

Autres modèles[modifier | modifier le code]

Le modèle peut être plus riche que des automates finis. Il existe par exemple du model checking sur des automates temporisés (en)[réf. nécessaire]. Aussi, le concept de model checking se généralise en logique mathématiques. Par exemple, la vérification de structures avec une formule de la logique du premier ordre est PSPACE-complet. De même, pour une formule de la logique monadique du second ordre. La vérification de structures automatiques avec une formule du premier ordre est décidable.

Abstraction[modifier | modifier le code]

Des techniques comme CEGAR (Counterexample-Guided Abstraction Refinement, raffinement de l'abstraction guidé par les contre-exemples) [12] permettent de transformer un programme (écrit en C par exemple) en un modèle abstrait puis de raffiner successivement le modèle s'il est trop grossier.

Logiques temporelles[modifier | modifier le code]

Il existe plusieurs logiques temporelles : LTL, CTL, CTL* ou le mu-calcul (en).

Logique pour les systèmes multi-agents[modifier | modifier le code]

Dans les systèmes multi-agents, on s'intéresse à des propriétés épistémiques comme `l'agent sait que x = 0' d'où l'utilisation de logique épistémique et de logiques qui mélangent logique temporelle et épistémique[13]. On s'intéresse à raisonner sur l'existence de stratégies dans un jeu : il existe des logiques pour écrire des propriétés sur les jeux comme « l'agent a une stratégie pour qu'un jour x = 0 » (alternating-time temporal logic (en))[14].

Outils[modifier | modifier le code]

Recherche[modifier | modifier le code]

On peut distinguer deux aspects de la recherche en model checking :

  • Il peut s'agir de démontrer qu'une certaine classe de propriétés, ou une certaine logique, est décidable, ou que sa décision appartient à une certaine classe de complexité ;
  • Il peut s'agir de rechercher des algorithmes efficaces sur des cas intéressants en pratique, de les implémenter, et de les appliquer à des problèmes réels.

Voir aussi[modifier | modifier le code]

Notes et références[modifier | modifier le code]

  1. (en) « Amir Pnueli », Association for Computing Machinery.
  2. E. Allen Emerson et Edmund M. Clarke, « Characterizing correctness properties of parallel programs using fixpoints », Automata, Languages and Programming,‎ (DOI 10.1007/3-540-10003-2_69).
  3. Edmund M. Clarke, E. Allen Emerson: "Design and Synthesis of Synchronization Skeletons Using Branching-Time Temporal Logic". Logic of Programs 1981: 52-71.
  4. E. M. Clarke, E. A. Emerson et A. P. Sistla, « Automatic verification of finite-state concurrent systems using temporal logic specifications », ACM Transactions on Programming Languages and Systems, vol. 8, no 2,‎ , p. 244 (DOI 10.1145/5397.5399).
  5. J. P. Queille et J. Sifakis, « Specification and verification of concurrent systems in CESAR », International Symposium on Programming,‎ (DOI 10.1007/3-540-11494-7_22).
  6. (en) Press Release: ACM Turing Award Honors Founders of Automatic Verification Technology.
  7. USACM: 2007 Turing Award Winners Announced.
  8. En terminologie des structures de Kripke, on parle d'un monde.
  9. En terminologie des structures de Kripke, on parle d'accessibilité.
  10. Christel Baier et Joost-Pieter Katoen, Principles of Model Checking (Representation and Mind Series), The MIT Press, (ISBN 026202649X et 9780262026499, lire en ligne).
  11. « An introduction to model checking ».
  12. (en) Edmund Clarke, Orna Grumberg, Somesh Jha et Yuan Lu, Counterexample-Guided Abstraction Refinement, Springer Berlin Heidelberg, coll. « Lecture Notes in Computer Science », (ISBN 9783540677703 et 9783540450474, lire en ligne), p. 154–169.
  13. (en) Alessio Lomuscio et Wojciech Penczek, Symbolic Model Checking for Temporal-Epistemic Logic, Springer Berlin Heidelberg, coll. « Lecture Notes in Computer Science », (ISBN 9783642294136 et 9783642294143, lire en ligne), p. 172–195.
  14. Rajeev Alur, Thomas A. Henzinger et Orna Kupferman, « Alternating-time Temporal Logic », J. ACM, vol. 49,‎ , p. 672–713 (ISSN 0004-5411, DOI 10.1145/585265.585270, lire en ligne).
  15. Gerard Holzmann, Spin Model Checker, the: Primer and Reference Manual, Addison-Wesley Professional, (ISBN 0321228626, lire en ligne).

Bibliographie[modifier | modifier le code]

En français[modifier | modifier le code]

En anglais[modifier | modifier le code]