Model checking

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

Le Model Checking désigne une famille de techniques de vérification automatique des systèmes dynamiques (souvent d'origine informatique ou électronique). Il s'agit de vérifier algorithmiquement si un modèle donné, le système lui-même ou une abstraction du système, satisfait une spécification, souvent formulée en termes de logique temporelle.

On peut distinguer deux aspects du 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.

Les premiers travaux sur le model checking de formules de logique temporelle ont été menés par Edmund M. Clarke et E. Allen Emerson en 1981, ainsi que par Jean-Pierre Queille et Joseph Sifakis en 1982. Clarke, Emerson et Sifakis se sont vu attribuer le Prix Turing 2007 pour leurs travaux sur le model checking.

Fonctionnement formel[modifier | modifier le code]

Test de vacuité d'automate, méthodes explicites[modifier | modifier le code]

Une façon de procéder consiste à exprimer le système à vérifier et la propriété à tester sous la forme d'automates.

La première étape du Model Checking consiste à exprimer le modèle considéré au moyen d'un graphe orienté, formé de nœuds et de transitions. Chaque nœud représente un état du système, chaque transition représente une évolution possible du système d'un état donné vers un autre état. Parallèlement, le système est décrit par un ensemble de propositions logiques atomiques (e.g. i=2, le processeur 3 est en attente, ...). Chaque état du graphe orienté est étiqueté par l'ensemble des propositions atomiques vraies à ce point d'exécution. Un tel graphe est appelé structure de Kripke.

La deuxième étape du Model Checking consiste à exprimer la négation de la formule de logique temporelle que nous souhaitons tester. La négation de cette formule est donc elle-même transcrite sous forme d'une structure de Kripke, capable de reconnaître exactement l'ensemble des exécutions satisfaisant la négation de la formule donnée. Par exemple, on pourra transcrire une formule LTL en un automate de Büchi non déterministe (ou, parfois, en un automate de Rabin (en)).

La troisième et dernière étape consiste à réaliser le produit cartésien synchrone des deux structures de Kripke obtenues précédemment. Si le langage reconnu par le produit est vide (pour une propriété d'accessibilité, mais plus généralement pour une propriété d'acceptation mettant en jeu la vivacité et l'équité), alors le système satisfait la formule de logique. Sinon, toute séquence appartenant au langage du produit constitue un contre-exemple à la spécification.

Énumérer explicitement tous les états de l'automate peut être coûteux, c'est pourquoi on procède généralement par des méthodes symboliques, introduites par Ken McMillan et Ed Clarke.

Méthodes symboliques[modifier | modifier le code]

Une approche, répandue pour la vérification de propriétés exprimées dans la logique temporelle arborescente (en) (CTL), est fondée sur la représentation des états et des transitions du système par des ensembles. De nombreuses méthodes de représentation d'ensembles d'états ont vu le jour. La plus connue utilise les diagrammes de décision binaire (BDD).

Le fonctionnement d'un model-checker symbolique consiste en l'obtention de points fixes pour déterminer les états accessibles ainsi que ceux qui satisfont une ou plusieurs propriétés. Ces points fixes sont calculés à l'aide de deux transformateurs de prédicats associés au franchissement des transitions : Le premier (Post) détermine, pour un ensemble d'états donnés, l'ensemble des états successeurs tandis que le second (Pre) est l'opération réciproque du premier. Ces techniques sont souvent plus efficaces pour les systèmes présentant un fort degré de concurrence mais font intervenir des mécanismes trop lourds pour des systèmes séquentiels.

Résolution SAT, SMT[modifier | modifier le code]

Enfin, 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. L'existence d'une trace vérifiant une certaine propriété est équivalente à la satisfiabilité d'une certaine formule logique. Par exemple, si I identifie les états initiaux du système, F les états dont on veut tester l'accessibilité, et T est une relation de transition, alors on considérera \exists x_1,\dots,x_n~ I(x_1) \wedge T(x_1,x_2) \wedge \dots \wedge T(x_{n-1},x_n) \wedge F(x_n).

Si les états du système sont données par des n-uplets de booléens, alors on se ramène au problème de la satisfiabilité d'une formule propositionnelle (problème SAT). Il existe divers logiciels, nommés SAT solvers, 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 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. 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). Une approche consiste à remplacer les prédicats atomiques par des variables booléennes supplémentaires, et à résoudre le système via SAT. S'il n'y a pas de valuation vérifiant la formule booléenne, la formule originale n'était pas non plus satisfiable. S'il existe une valuation, il faut vérifier que celle-ci soit cohérente par rapport à la théorie. Par exemple, si on a remplacé x < 5 par un booléen b_1 et x > 6 par un booléen b_2, la valuation b_1=b_2=vrai est incohérente par rapport à la théorie des inégalités linéaires et on recommence avec une formule en conjonction de la négation du modèle ainsi exhibé afin d'en expliciter un autre par le solveur SAT. En pratique, il faudra donc savoir décider effectivement la satisfiabilité d'une conjonction de prédicats atomiques.

Model checkers[modifier | modifier le code]

Références[modifier | modifier le code]