• Aucun résultat trouvé

Logique de Hoare pour la vérication de modèles discrets

4.2.1 Vérication d'un programme

La logique de Hoare est une méthode formelle qui permet de prouver la correction de programmes. Elle a été déni par Tony Hoare en 1969 [67]. A chaque instruction syntaxique du programme correspond une règle de la logique de Hoare. Les instructions élémentaires du programme sont donc adossées aux règles d'inférence d'aectation, d'instruction conditionnelle, de composition de programme et d'itération (boucle while).

La logique de Hoare s'appuie sur la notion detriplet de Hoare noté {P re} p {P ost} où Pre et Post sont des conditions d'états du système, et p est le programme. Un triplet est dit correct lorsque, en partant d'un état du système satisfaisant Pre, l'exécution du programme p

Section 4.2, Logique de Hoare pour la vérication de modèles discrets est possible, elle termine et mène à un état du système satisfaisant Post. Les règles d'inférence associées à l'aectation, l'instruction conditionnelle, la composition de programme et le while permettent de prouver ecacement qu'un programme, s'il termine, est correct. L'exemple le plus simple est celui où le programme est réduit à une incrémentation d'une variable x : Exemple: Soit le triplet de Hoare {x = 0} x := x + 1 {x = 1}. Si la variable x prend la valeur

0 en précondition,le programme x := x + 1 est possible et mène à un état où la postcondition du

triplet est satisfaite.

Edsger Dijkstra [40] a déni une sémantique de transformation des prédicats pour les lan-gages de programmation impératifs : à chaque instruction est aectée une transformation de prédicats. A partir d'une instruction élémentaire IE est calculée "la plus faible précondition" de cette instruction qui correspond à une fonction associant à chaque postcondition Post la plus faible précondition sur l'état initial assurant que l'exécution de IE termine dans un état nal satisfaisant Post. Pour une succession d'instruction élémentaire P ; IE dont la dernière instruction est IE, c'est-à-dire pour tout programme séquentiel, et pour chaque postcondition Post, la transformation de prédicats de IE permet de déterminer la plus faible précondition avant la dernière instruction. En réitérant ce procédé, il est possible de déterminer la plus faible précondition du programme complet : cette méthode est appelée la stratégie backward.

Exemple: Dans le cas où deux entités échangent leurs valeurs ( swap), le programme p =        aux := x; x := y; y := aux;        , les pré et postconditions P re = ( x = xval y = yval ) et P ost = ( x = yval y = xval )

mènent au schéma de preuve suivant : P re ⇒ ( x = xval y = yval ) ( x = xval y = yval ) aux := x ( aux = xval y = yval ) ( aux = xval y = yval ) x := y ( x = yval aux = xval ) {P re}aux := x; x := y ( x = yval aux = xval ) ( x = yval aux = xval ) y := aux{P ost} {P re} p {P ost}

La logique de Hoare a déjà été étendue pour s'adapter à des systèmes en temps réel tels que les communications asynchrones en incluant la composition parallèle [69]. Dans ce chapitre, nous dénissons une nouvelle adaptation de la logique de Hoare pour la modélisation des com-portements biologiques : le programme p est remplacé par unetrace biologiquequi représente des observations expérimentales sur le comportement qualitatif des entités du système au cours du temps. Similairement à la méthode de Dijkstra, nous dénissons un calcul de plus faible précondition dans l'objectif d'obtenir l'ensemble des contraintes minimales sur les paramètres

Chapitre 4 : Construction des contraintes sur les paramètres

dynamiques du modèle qui lui permet d'être cohérent avec la spécication exprimée sous forme de traces.

4.2.2 Logique de Hoare génétiquement modiée

Des précédents travaux ont déni une version modiée de la logique de Hoare (appelée logique de Hoare génétiquement modiée) bien adaptée au cadre de modélisation discret de René Thomas [17]. Les triplets de Hoare sont dénis selon des propriétés d'états (langage d'assertion) et des transitions d'états (langage de spécication de trace). Les règles d'inférence applicables à ces triplets sont les règles d'incrémentation, de décrémentation, d'assertion, de quanticateurs existentiel et universel, d'aectation, de composition séquentielle, d'itération et enn la règle associée au programme vide. La stratégie backward décrit par Dijkstra est utilisée de la même manière et permet de contraindre les paramètres dynamiques pour que le système soit compatible avec la spécication donnée sous forme de traces.

Pour que la logique puisse être d'une quelconque utilité, il est nécessaire que tout ce qui peut être prouvé grâce aux règles d'inférence soit juste du point de vue sémantique, c'est ce qu'on appelle la correction de la logique. La logique de Hoare génétiquement modiée a été prouvé correcte. De manière générale, la correction d'un algorithme se prouve en assurant que le programme termine et qu'il mène à un résultat correspondant à la spécication. On parle de correction partielle. Or une boucle while dans le langage de spécication de trace peut ne jamais terminer. Mais ici, puisqu'on est dans un espace ni, on peut trouver automatiquement les invariants de boucles, puis prouver la terminaison des programmes. La correction est alors prouvée par induction sur l'arbre de preuve {P } p {Q}, c'est-à-dire que chaque règle d'inférence est prouvée correcte. Pour chaque règle d'inférence, il sut de démontrer l'existence d'une transition d'un état η satisfaisant les règles décrites en précondition P vers un ensemble d'états E (car les quanticateurs mènent possiblement à plusieurs états), et que pour tout état η0

appartenant à E, η0 satisfait la postcondition Q.

Lacomplétudede la logique de Hoare est la propriété d'une logique qui assure que toutes les déductions sémantiques sont prouvables avec les règles d'inférence de la logique : si un triplet de Hoare est satisfait dans un réseau de gènes, alors il existe un arbre de preuve en utilisant les règles d'inférence de la logique et dont la racine de l'arbre est le triplet de Hoare d'intérêt. L'idée de la preuve consiste, pour un triplet de Hoare {Pre} p {Post}, à calculer les plus faibles invariants de toutes les boucles while des règles d'inférence et à prouver que la stratégie backward du calcul de la plus faible précondition mène à une postcondition qui est une conséquence sémantique de la précondition Pre (Pre ⇒ Plus faible précondition).

Section 4.3, Logique de Hoare hybride