• Aucun résultat trouvé

2.3 Application des techniques formelles

3.1.4 Les obligations de preuve

Les obligations de preuve relatives à une spécification peuvent être classées en quatre catégories :

3 les obligations de preuve générées dans un contexte,

3 les obligations de preuve définies pour prouver la consistance d’une machine, 3 les obligations de preuve générées pour les raffinements,

3 les obligations de preuve qui servent pour la preuve de la terminaison des événements.

3.1.4.1 Les obligations de preuve spécifiques aux contextes et la consistance des ma- chines

Dans le tableau 3.1, on mentionne les principaux types d’obligations de preuve qu’on peut trouver dans les deux premières catégories. Les obligations de preuve de bonne

Contexte Consistance d’une ma-

chine

WD bonne définition des

axiomes

bonne définition des inva- riants, des actions ou des gardes

THM preuve des axiomes mar-

qués comme théorèmes

preuve des invariants et gardes marqués comme théorèmes

INV preuve de la préservation

des invariants

FIS preuve de la faisabilité des

actions non déterministes

Tableau 3.1 — Les principaux types d’obligations de preuve générées dans un contexte et

celles générées pour prouver la consistance d’une machine

définition notées WD (Well De f inedness) peuvent être appliquées aux axiomes, aux inva- riants ou encore aux gardes et aux actions d’un événement. Elles assurent qu’un prédicat ou une affectation est bien défini. Par exemple, pour effectuer une division de A par B, le dénominateur B doit être différent de zéro. Cette restriction représente une contrainte de bonne définition de l’expression A/B. Un autre exemple consiste en l’application de l’opérateur Card sur un ensemble E. La contrainte de bonne définition de l’expression Card(E)est que E doit être fini.

Les obligations de preuve THM (THeoreM) assurent qu’un axiome, un invariant ou une garde marqué comme théorème, sera effectivement prouvé. Les obligations de preuve d’in-

variance notées I NV (I NVariant) et celles de faisabilité notées FIS (Feasibility) garantissent la consistance d’une machine. Les obligations de preuve I NV assurent que les propriétés d’invariance, exprimées par des invariants, ne seront jamais violées durant l’évolution du système. Si on considère I(v)un invariant d’une machine, alors pour tout événement E dont le prédicat avant-après est BAE(v, v0)l’obligation de preuve correspondante à la préservation de l’invariant I est donnée par l’implication suivante :

I(v) ∧BAE(v, v0) ⇒I(v0)

Les obligations de preuves de faisabilité notées FIS assurent la faisabilité de tout événement défini dans une machine. La faisabilité d’un événement signifie qu’à chaque activation, il doit y avoir pour toute action v :|Q(v, v0)une valeur v0à attribuer à la variable v satisfaisant le prédicat Q(v, v0). Si on considère un événement E ayant la garde gE(C, V, pE), I(v)étant l’invariant défini pour la variable v, l’obligation de preuve qui correspond à la faisabilité de l’événement E est donnée par l’implication suivante :

I(v) ∧gE(C, V, pE) ⇒ ∃v0.Q(v, v0)

3.1.4.2 Les obligations de preuve spécifiques à la correction du raffinement

La correction d’un raffinement est assurée grâce à un ensemble d’obligations de preuve dont les plus importantes sont mentionnées dans le tableau 3.2.

Correction du raffinement GRD renforcement des gardes SIM simulation des actions

EQL equality of preserved variable

Tableau 3.2 — Les principaux types d’OP assurant la correction d’un raffinement

Les obligations de preuve de renforcement des gardes (notées GRD) et de simulation des actions (notées SI M) concernent la preuve du raffinement des événements. L’obligation de preuve d’égalité des variables conservées (figurant aussi bien dans la machine concrète et la machine abstraite) notée EQL (EQuaLity) concerne le raffinement des données. Un événement raffiné ne doit être activé que lorsque l’événement abstrait est activé. Ainsi, la garde d’un événement concret doit renforcer celle de l’événement abstrait. Cette contrainte est assurée par l’obligation de preuve GRD formulée comme suit :

3.1. Le langage B-Evénementiel

Dans cette formule, I(c, v) représente l’invariant abstrait, J(c, v, w) l’invariant de collage, gEc(c, w, pEc) la garde de l’événement concret Ec et gEa(c, v, pEa) la garde de l’événement abstrait Ea.

L’action d’un événement concret peut modifier les valeurs de certaines variables déclarées dans la machine abstraite. Cette modification doit être faite de manière à ce que le com- portement concret correspond au comportement abstrait. En considérant I(c, v)l’invariant abstrait, J(c, v, w)l’invariant de collage, BAEa(v, v0)le prédicat avant-après de l’événement abstrait et BAEc(w, w0)le prédicat avant-après de l’événement concret, l’obligation de preuve montrant la correction du raffinement de Ea par Ec est définie comme suit :

I(c, v) ∧J(c, v, w) ∧BAEc(c, w, w0) ⇒ ∃v0.(BAEa(c, v, v0) ∧J(c, v0, w0))

Lorsqu’une variable notée x est utilisée par la machine abstraite et la machine concrète, les événements de la machine concrète qui modifient la variable x doivent garder sa valeur inchangée. Cette contrainte est vérifiée par l’obligation de preuve EQL définie comme suit :

I(c, v) ∧J(c, v, w) ∧BAEc(c, w, w0) ⇒x0 = x

Le prédicat BAEc(c, w, w0)est le prédicat avant-après de l’événement concret qui change la variable x.

Outre ces obligations de preuve, il est essentiel dans certains cas de prouver le non blo- cage d’une machine en garantissant qu’à chaque instant il existe au moins un événement déclenchable. Ceci peut être formulé en montrant que la disjonction des gardes des actions est toujours satisfaite sous l’hypothèse de la préservation des invariants. Cette contrainte de non blocage (Deadlock freedom) est formalisée comme suit :

I(c, v) ⇒gE1(c, w, pE1) ∨...∨gEk(c, w, pEk)

3.1.4.3 Les obligations de preuve spécifiques à la terminaison des événements

Dans un raffinement, de nouveaux événements concrets peuvent être ajoutés raffinant l’événement Skip dont l’action ne fait rien. A fin de préserver la propriété de non blocage par le raffinement, il faut prouver que les nouveaux événements sont convergents signifiant qu’ils ne seront pas déclenchables infiniment empêchant ainsi les autres événements de se déclencher. La preuve de la convergence2 (appelée aussi la terminaison) des nouveaux événements se fait en définissant un variant –une expression numérique ou un ensemble fini– pour tous les événements convergents et en montrant que chaque exécution de l’un de ces événements le fait décroître. Lorsque la preuve de la terminaison d’un événement ne peut pas être prouvée à un niveau de raffinement, cet événement est marqué anticip

2. La notion de convergence évoquée avec B-événementiel est synonyme de terminaison et elle est différente de la propriété de convergence évoquée avec les systèmes auto-organisateurs

(anticipated) ce qui signifie que sa terminaison doit être prouvée dans les prochaines étapes de raffinement.

Les obligations de preuve citées dans cette section sont relatives à la preuve de la termi- naison et sont résumées dans le tableau 3.3.

Les obligations de preuve FI N et N AT concernent le variant. FI N est utilisée lorsque le Terminaison des événements

FIN le variant est un ensemble fini NAT le variant est un entier naturel VAR le variant décroît

Tableau 3.3 — Les principaux types d’obligations de preuve assurant la terminaison d’un

événement convergent

variant est un ensemble et elle assure que cet ensemble est fini. Tandis que N AT est utilisée lorsque le variant est une expression numérique et permet de prouver que cette expression est entière. L’obligation de preuve FI N est donnée par la formule suivante dans laquelle Finite(V(c, w))est un prédicat qui indique que l’ensemble V(c, w)(le variant) est fini.

I(c, v) ∧J(c, v, w) ⇒Finite(V(c, w))

L’obligation de preuve N AT est formulée comme suit :

I(c, v) ∧J(c, v, w) ⇒V(c, w) ∈N

L’obligation de preuve VAR garantit que l’exécution de chaque événement convergent dé- croît le variant. Elle est définie comme suit :

I(c, v) ∧J(c, v, w) ∧gEc(c, w, pEc) ⇒V(c, w0) <V(c, w)